Updating to 59.0.3068.0 (#45)

diff --git a/src/base/BUILD.gn b/src/base/BUILD.gn
index f99c40d..d1fb90a 100644
--- a/src/base/BUILD.gn
+++ b/src/base/BUILD.gn
@@ -87,35 +87,6 @@
   }
 }
 
-if (is_nacl) {
-  # None of the files apply to nacl, and we can't make an empty static library.
-  group("base_paths") {
-  }
-} else {
-  static_library("base_paths") {
-    sources = [
-      "base_paths.cc",
-      "base_paths.h",
-      "base_paths_android.cc",
-      "base_paths_android.h",
-      "base_paths_mac.h",
-      "base_paths_mac.mm",
-      "base_paths_posix.cc",
-      "base_paths_posix.h",
-      "base_paths_win.cc",
-      "base_paths_win.h",
-    ]
-
-    if (is_android || is_mac || is_ios) {
-      sources -= [ "base_paths_posix.cc" ]
-    }
-
-    configs += [ ":base_implementation" ]
-
-    visibility = [ ":base" ]
-  }
-}
-
 if (is_android) {
   config("android_system_libs") {
     libs = [ "log" ]  # Used by logging.cc.
@@ -722,7 +693,6 @@
     "process/process_win.cc",
     "profiler/native_stack_sampler.cc",
     "profiler/native_stack_sampler.h",
-    "profiler/native_stack_sampler_mac.cc",
     "profiler/native_stack_sampler_posix.cc",
     "profiler/native_stack_sampler_win.cc",
     "profiler/scoped_profile.cc",
@@ -1008,6 +978,8 @@
     "trace_event/memory_dump_session_state.h",
     "trace_event/memory_infra_background_whitelist.cc",
     "trace_event/memory_infra_background_whitelist.h",
+    "trace_event/memory_peak_detector.cc",
+    "trace_event/memory_peak_detector.h",
     "trace_event/memory_usage_estimator.cc",
     "trace_event/memory_usage_estimator.h",
     "trace_event/process_memory_dump.cc",
@@ -1113,6 +1085,24 @@
     "win/wrapped_window_proc.h",
   ]
 
+  if (!is_nacl) {
+    sources += [
+      "base_paths.cc",
+      "base_paths.h",
+      "base_paths_android.cc",
+      "base_paths_android.h",
+      "base_paths_mac.h",
+      "base_paths_mac.mm",
+      "base_paths_posix.h",
+      "base_paths_win.cc",
+      "base_paths_win.h",
+    ]
+
+    if (is_linux) {
+      sources += [ "base_paths_posix.cc" ]
+    }
+  }
+
   all_dependent_configs = []
   defines = []
   data = []
@@ -1132,7 +1122,6 @@
   ]
 
   public_deps = [
-    ":base_paths",
     ":base_static",
     ":build_date",
     ":debugging_flags",
@@ -1469,10 +1458,6 @@
       "strings/sys_string_conversions_posix.cc",
       "threading/platform_thread_internal_posix.cc",
     ]
-
-    if (is_mac) {
-      sources -= [ "profiler/native_stack_sampler_posix.cc" ]
-    }
   } else {
     # Non-Mac/ios.
     sources -= [
@@ -1633,8 +1618,6 @@
     configs -= [ "//build/config/compiler:default_optimization" ]
     configs += [ "//build/config/compiler:optimize_max" ]
   }
-
-  allow_circular_includes_from = public_deps
 }
 
 buildflag_header("debugging_flags") {
@@ -1643,6 +1626,7 @@
   flags = [
     "ENABLE_PROFILING=$enable_profiling",
     "ENABLE_MEMORY_TASK_PROFILER=$enable_memory_task_profiler",
+    "CAN_UNWIND_WITH_FRAME_POINTERS=$can_unwind_with_frame_pointers",
   ]
 }
 
@@ -1845,9 +1829,7 @@
       "//base/win:base_win_features",
     ]
   }
-}
 
-if (is_win || is_mac) {
   if (current_cpu == "x64") {
     # Must be a shared library so that it can be unloaded during testing.
     shared_library("base_profiler_test_support_library") {
@@ -1911,6 +1893,7 @@
 
 test("base_unittests") {
   sources = [
+    "allocator/allocator_interception_mac_unittest.mm",
     "allocator/malloc_zone_functions_mac_unittest.cc",
     "allocator/tcmalloc_unittest.cc",
     "android/application_status_listener_unittest.cc",
@@ -2178,6 +2161,7 @@
     "trace_event/memory_allocator_dump_unittest.cc",
     "trace_event/memory_dump_manager_unittest.cc",
     "trace_event/memory_dump_scheduler_unittest.cc",
+    "trace_event/memory_peak_detector_unittest.cc",
     "trace_event/memory_usage_estimator_unittest.cc",
     "trace_event/process_memory_dump_unittest.cc",
     "trace_event/trace_category_unittest.cc",
@@ -2309,9 +2293,6 @@
       "CoreFoundation.framework",
       "Foundation.framework",
     ]
-    if (current_cpu == "x64") {
-      data_deps += [ ":base_profiler_test_support_library" ]
-    }
   }
 
   if (is_linux) {
@@ -2350,7 +2331,7 @@
     deps += [ "//base:scoped_handle_test_dll" ]
     if (current_cpu == "x64") {
       sources += [ "profiler/win32_stack_frame_unwinder_unittest.cc" ]
-      data_deps += [ ":base_profiler_test_support_library" ]
+      deps += [ ":base_profiler_test_support_library" ]
     }
   }
 
diff --git a/src/base/allocator/allocator_interception_mac.h b/src/base/allocator/allocator_interception_mac.h
index 8867f38..68f1d53 100644
--- a/src/base/allocator/allocator_interception_mac.h
+++ b/src/base/allocator/allocator_interception_mac.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 
 #include "base/base_export.h"
+#include "third_party/apple_apsl/malloc.h"
 
 namespace base {
 namespace allocator {
@@ -40,6 +41,15 @@
 // Also calls ClearAllMallocZonesForTesting.
 BASE_EXPORT void UninterceptMallocZonesForTesting();
 
+// Periodically checks for, and shims new malloc zones. Stops checking after 1
+// minute.
+BASE_EXPORT void PeriodicallyShimNewMallocZones();
+
+// Exposed for testing.
+BASE_EXPORT void ShimNewMallocZones();
+BASE_EXPORT void ReplaceZoneFunctions(ChromeMallocZone* zone,
+                                      const MallocZoneFunctions* functions);
+
 }  // namespace allocator
 }  // namespace base
 
diff --git a/src/base/allocator/allocator_interception_mac.mm b/src/base/allocator/allocator_interception_mac.mm
index 70c40c4..4980051 100644
--- a/src/base/allocator/allocator_interception_mac.mm
+++ b/src/base/allocator/allocator_interception_mac.mm
@@ -29,11 +29,13 @@
 
 #include "base/allocator/features.h"
 #include "base/allocator/malloc_zone_functions_mac.h"
+#include "base/bind.h"
 #include "base/logging.h"
 #include "base/mac/mac_util.h"
 #include "base/mac/mach_logging.h"
 #include "base/process/memory.h"
 #include "base/scoped_clear_errno.h"
+#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "third_party/apple_apsl/CFBase.h"
 
@@ -263,44 +265,6 @@
   return result;
 }
 
-void ReplaceZoneFunctions(ChromeMallocZone* zone,
-                          const MallocZoneFunctions* functions) {
-  // Remove protection.
-  mach_vm_address_t reprotection_start = 0;
-  mach_vm_size_t reprotection_length = 0;
-  vm_prot_t reprotection_value = VM_PROT_NONE;
-  DeprotectMallocZone(zone, &reprotection_start, &reprotection_length,
-                      &reprotection_value);
-
-  CHECK(functions->malloc && functions->calloc && functions->valloc &&
-        functions->free && functions->realloc);
-  zone->malloc = functions->malloc;
-  zone->calloc = functions->calloc;
-  zone->valloc = functions->valloc;
-  zone->free = functions->free;
-  zone->realloc = functions->realloc;
-  if (functions->batch_malloc)
-    zone->batch_malloc = functions->batch_malloc;
-  if (functions->batch_free)
-    zone->batch_free = functions->batch_free;
-  if (functions->size)
-    zone->size = functions->size;
-  if (zone->version >= 5 && functions->memalign) {
-    zone->memalign = functions->memalign;
-  }
-  if (zone->version >= 6 && functions->free_definite_size) {
-    zone->free_definite_size = functions->free_definite_size;
-  }
-
-  // Restore protection if it was active.
-  if (reprotection_start) {
-    kern_return_t result =
-        mach_vm_protect(mach_task_self(), reprotection_start,
-                        reprotection_length, false, reprotection_value);
-    MACH_CHECK(result == KERN_SUCCESS, result) << "mach_vm_protect";
-  }
-}
-
 void UninterceptMallocZoneForTesting(struct _malloc_zone_t* zone) {
   ChromeMallocZone* chrome_zone = reinterpret_cast<ChromeMallocZone*>(zone);
   if (!IsMallocZoneAlreadyStored(chrome_zone))
@@ -524,5 +488,81 @@
   ClearAllMallocZonesForTesting();
 }
 
+namespace {
+
+void ShimNewMallocZonesAndReschedule(base::Time end_time,
+                                     base::TimeDelta delay) {
+  ShimNewMallocZones();
+
+  if (base::Time::Now() > end_time)
+    return;
+
+  base::TimeDelta next_delay = delay * 2;
+  SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+      FROM_HERE,
+      base::Bind(&ShimNewMallocZonesAndReschedule, end_time, next_delay),
+      delay);
+}
+
+}  // namespace
+
+void PeriodicallyShimNewMallocZones() {
+  base::Time end_time = base::Time::Now() + base::TimeDelta::FromMinutes(1);
+  base::TimeDelta initial_delay = base::TimeDelta::FromSeconds(1);
+  ShimNewMallocZonesAndReschedule(end_time, initial_delay);
+}
+
+void ShimNewMallocZones() {
+  StoreFunctionsForAllZones();
+
+  // Use the functions for the default zone as a template to replace those
+  // new zones.
+  ChromeMallocZone* default_zone =
+      reinterpret_cast<ChromeMallocZone*>(malloc_default_zone());
+  DCHECK(IsMallocZoneAlreadyStored(default_zone));
+
+  MallocZoneFunctions new_functions;
+  StoreZoneFunctions(default_zone, &new_functions);
+  ReplaceFunctionsForStoredZones(&new_functions);
+}
+
+void ReplaceZoneFunctions(ChromeMallocZone* zone,
+                          const MallocZoneFunctions* functions) {
+  // Remove protection.
+  mach_vm_address_t reprotection_start = 0;
+  mach_vm_size_t reprotection_length = 0;
+  vm_prot_t reprotection_value = VM_PROT_NONE;
+  DeprotectMallocZone(zone, &reprotection_start, &reprotection_length,
+                      &reprotection_value);
+
+  CHECK(functions->malloc && functions->calloc && functions->valloc &&
+        functions->free && functions->realloc);
+  zone->malloc = functions->malloc;
+  zone->calloc = functions->calloc;
+  zone->valloc = functions->valloc;
+  zone->free = functions->free;
+  zone->realloc = functions->realloc;
+  if (functions->batch_malloc)
+    zone->batch_malloc = functions->batch_malloc;
+  if (functions->batch_free)
+    zone->batch_free = functions->batch_free;
+  if (functions->size)
+    zone->size = functions->size;
+  if (zone->version >= 5 && functions->memalign) {
+    zone->memalign = functions->memalign;
+  }
+  if (zone->version >= 6 && functions->free_definite_size) {
+    zone->free_definite_size = functions->free_definite_size;
+  }
+
+  // Restore protection if it was active.
+  if (reprotection_start) {
+    kern_return_t result =
+        mach_vm_protect(mach_task_self(), reprotection_start,
+                        reprotection_length, false, reprotection_value);
+    MACH_CHECK(result == KERN_SUCCESS, result) << "mach_vm_protect";
+  }
+}
+
 }  // namespace allocator
 }  // namespace base
diff --git a/src/base/allocator/allocator_interception_mac_unittest.mm b/src/base/allocator/allocator_interception_mac_unittest.mm
new file mode 100644
index 0000000..c919ca0
--- /dev/null
+++ b/src/base/allocator/allocator_interception_mac_unittest.mm
@@ -0,0 +1,64 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <mach/mach.h>
+
+#include "base/allocator/allocator_interception_mac.h"
+#include "base/allocator/allocator_shim.h"
+#include "base/allocator/malloc_zone_functions_mac.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace allocator {
+
+namespace {
+void ResetMallocZone(ChromeMallocZone* zone) {
+  MallocZoneFunctions& functions = GetFunctionsForZone(zone);
+  ReplaceZoneFunctions(zone, &functions);
+}
+
+void ResetAllMallocZones() {
+  ChromeMallocZone* default_malloc_zone =
+      reinterpret_cast<ChromeMallocZone*>(malloc_default_zone());
+  ResetMallocZone(default_malloc_zone);
+
+  vm_address_t* zones;
+  unsigned int count;
+  kern_return_t kr = malloc_get_all_zones(mach_task_self(), 0, &zones, &count);
+  if (kr != KERN_SUCCESS)
+    return;
+  for (unsigned int i = 0; i < count; ++i) {
+    ChromeMallocZone* zone = reinterpret_cast<ChromeMallocZone*>(zones[i]);
+    ResetMallocZone(zone);
+  }
+}
+}  // namespace
+
+class AllocatorInterceptionTest : public testing::Test {
+ protected:
+  void TearDown() override {
+    ResetAllMallocZones();
+    ClearAllMallocZonesForTesting();
+  }
+};
+
+#if !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+TEST_F(AllocatorInterceptionTest, ShimNewMallocZones) {
+  InitializeAllocatorShim();
+  ChromeMallocZone* default_malloc_zone =
+      reinterpret_cast<ChromeMallocZone*>(malloc_default_zone());
+
+  malloc_zone_t new_zone;
+  memset(&new_zone, 1, sizeof(malloc_zone_t));
+  malloc_zone_register(&new_zone);
+  EXPECT_NE(new_zone.malloc, default_malloc_zone->malloc);
+  ShimNewMallocZones();
+  EXPECT_EQ(new_zone.malloc, default_malloc_zone->malloc);
+
+  malloc_zone_unregister(&new_zone);
+}
+#endif
+
+}  // namespace allocator
+}  // namespace base
diff --git a/src/base/allocator/partition_allocator/partition_alloc.cc b/src/base/allocator/partition_allocator/partition_alloc.cc
index 439ce17..b13f36b 100644
--- a/src/base/allocator/partition_allocator/partition_alloc.cc
+++ b/src/base/allocator/partition_allocator/partition_alloc.cc
@@ -1051,8 +1051,13 @@
   // determine it is a win.
   if (actual_new_size == actual_old_size) {
     // Trying to allocate a block of size new_size would give us a block of
-    // the same size as the one we've already got, so no point in doing
-    // anything here.
+    // the same size as the one we've already got, so re-use the allocation
+    // after updating statistics (and cookies, if present).
+    PartitionPageSetRawSize(page, PartitionCookieSizeAdjustAdd(new_size));
+#if DCHECK_IS_ON()
+    // Write a new trailing cookie.
+    PartitionCookieWriteValue(static_cast<char*>(ptr) + new_size);
+#endif
     return ptr;
   }
 
diff --git a/src/base/allocator/partition_allocator/partition_alloc_unittest.cc b/src/base/allocator/partition_allocator/partition_alloc_unittest.cc
index 1ed26bb..0507c0b 100644
--- a/src/base/allocator/partition_allocator/partition_alloc_unittest.cc
+++ b/src/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -2088,6 +2088,27 @@
   }
 }
 
+TEST(PartitionAllocTest, ReallocMovesCookies) {
+  TestSetup();
+
+  // Resize so as to be sure to hit a "resize in place" case, and ensure that
+  // use of the entire result is compatible with the debug mode's cookies, even
+  // when the bucket size is large enough to span more than one partition page
+  // and we can track the "raw" size. See https://crbug.com/709271
+  const size_t kSize = base::kMaxSystemPagesPerSlotSpan * base::kSystemPageSize;
+  void* ptr =
+      PartitionAllocGeneric(generic_allocator.root(), kSize + 1, type_name);
+  EXPECT_TRUE(ptr);
+
+  memset(ptr, 0xbd, kSize + 1);
+  ptr = PartitionReallocGeneric(generic_allocator.root(), ptr, kSize + 2,
+                                type_name);
+  EXPECT_TRUE(ptr);
+
+  memset(ptr, 0xbd, kSize + 2);
+  PartitionFreeGeneric(generic_allocator.root(), ptr);
+}
+
 }  // namespace base
 
 #endif  // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/src/base/allocator/tcmalloc_unittest.cc b/src/base/allocator/tcmalloc_unittest.cc
index 5313bfd..4724658 100644
--- a/src/base/allocator/tcmalloc_unittest.cc
+++ b/src/base/allocator/tcmalloc_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "base/process/process_metrics.h"
+#include "base/sys_info.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -86,6 +87,10 @@
   }
 }
 
+bool IsLowMemoryDevice() {
+  return base::SysInfo::AmountOfPhysicalMemory() <= 256LL * 1024 * 1024;
+}
+
 }  // namespace
 
 TEST(TCMallocTest, Malloc) {
@@ -154,6 +159,12 @@
     }
   }
 
+  // The logic below tries to allocate kNumEntries * 9000 ~= 130 MB of memory.
+  // This would cause the test to crash on low memory devices with no VM
+  // overcommit (e.g., chromecast).
+  if (IsLowMemoryDevice())
+    return;
+
   // Now make sure realloc works correctly even when we overflow the
   // packed cache, so some entries are evicted from the cache.
   // The cache has 2^12 entries, keyed by page number.
diff --git a/src/base/android/callback_android.cc b/src/base/android/callback_android.cc
index 2326d85..a97deab 100644
--- a/src/base/android/callback_android.cc
+++ b/src/base/android/callback_android.cc
@@ -4,6 +4,8 @@
 
 #include "base/android/callback_android.h"
 
+#include "base/android/jni_array.h"
+#include "base/android/scoped_java_ref.h"
 #include "jni/Callback_jni.h"
 
 namespace base {
@@ -25,5 +27,13 @@
                                       callback, arg);
 }
 
+void RunCallbackAndroid(const JavaRef<jobject>& callback,
+                        const std::vector<uint8_t>& arg) {
+  JNIEnv* env = base::android::AttachCurrentThread();
+  base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
+      base::android::ToJavaByteArray(env, arg);
+  Java_Callback_onResultFromNativeV_AB(env, callback, j_bytes);
+}
+
 }  // namespace android
 }  // namespace base
diff --git a/src/base/android/callback_android.h b/src/base/android/callback_android.h
index f118827..5cefe0f 100644
--- a/src/base/android/callback_android.h
+++ b/src/base/android/callback_android.h
@@ -6,24 +6,27 @@
 #define BASE_ANDROID_CALLBACK_ANDROID_H_
 
 #include <jni.h>
+#include <vector>
 
 #include "base/android/scoped_java_ref.h"
 #include "base/base_export.h"
 
+// Provides helper utility methods that run the given callback with the
+// specified argument.
 namespace base {
 namespace android {
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
                                     const JavaRef<jobject>& arg);
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
                                     bool arg);
 
-// Runs the given |callback| with the specified |arg|.
 void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback, int arg);
 
+void BASE_EXPORT RunCallbackAndroid(const JavaRef<jobject>& callback,
+                                    const std::vector<uint8_t>& arg);
+
 }  // namespace android
 }  // namespace base
 
diff --git a/src/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java b/src/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
index 986973d..406f328 100644
--- a/src/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
+++ b/src/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
@@ -36,7 +36,6 @@
 import android.widget.TextView;
 
 import java.io.File;
-import java.lang.reflect.Method;
 
 /**
  * Utility class to use new APIs that were added after ICS (API level 14).
@@ -573,22 +572,13 @@
      * @param context The Android context, used to retrieve the UserManager system service.
      * @return Whether the device is running in demo mode.
      */
+    @SuppressWarnings("NewApi")
     public static boolean isDemoUser(Context context) {
-        // UserManager#isDemoUser() is only available in Android versions greater than N.
-        if (!BuildInfo.isGreaterThanN()) return false;
+        // UserManager#isDemoUser() is only available in Android NMR1+.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) return false;
 
-        try {
-            UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
-            Method isDemoUserMethod = UserManager.class.getMethod("isDemoUser");
-            boolean isDemoUser = (boolean) isDemoUserMethod.invoke(userManager);
-            return isDemoUser;
-        } catch (RuntimeException e) {
-            // Ignore to avoid crashing on startup.
-        } catch (Exception e) {
-            // Ignore.
-        }
-
-        return false;
+        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        return userManager.isDemoUser();
     }
 
     /**
diff --git a/src/base/android/java/src/org/chromium/base/BuildInfo.java b/src/base/android/java/src/org/chromium/base/BuildInfo.java
index 03bf4bc..de4ad08 100644
--- a/src/base/android/java/src/org/chromium/base/BuildInfo.java
+++ b/src/base/android/java/src/org/chromium/base/BuildInfo.java
@@ -153,13 +153,6 @@
     }
 
     /**
-     * @return Whether the current build version is greater than Android N.
-     */
-    public static boolean isGreaterThanN() {
-        return Build.VERSION.SDK_INT > 24 || Build.VERSION.CODENAME.equals("NMR1");
-    }
-
-    /**
      * @return Whether the current device is running Android O release or newer.
      */
     public static boolean isAtLeastO() {
diff --git a/src/base/android/java/src/org/chromium/base/Callback.java b/src/base/android/java/src/org/chromium/base/Callback.java
index ee5857d..0810b62 100644
--- a/src/base/android/java/src/org/chromium/base/Callback.java
+++ b/src/base/android/java/src/org/chromium/base/Callback.java
@@ -34,4 +34,10 @@
     private void onResultFromNative(int result) {
         onResult((T) Integer.valueOf(result));
     }
+
+    @SuppressWarnings("unchecked")
+    @CalledByNative
+    private void onResultFromNative(byte[] result) {
+        onResult((T) result);
+    }
 }
diff --git a/src/base/android/java/src/org/chromium/base/MemoryPressureListener.java b/src/base/android/java/src/org/chromium/base/MemoryPressureListener.java
index d61a006..408cafb 100644
--- a/src/base/android/java/src/org/chromium/base/MemoryPressureListener.java
+++ b/src/base/android/java/src/org/chromium/base/MemoryPressureListener.java
@@ -6,7 +6,6 @@
 
 import android.app.Activity;
 import android.content.ComponentCallbacks2;
-import android.content.Context;
 import android.content.res.Configuration;
 
 import org.chromium.base.annotations.CalledByNative;
@@ -47,8 +46,8 @@
             "org.chromium.base.ACTION_TRIM_MEMORY_MODERATE";
 
     @CalledByNative
-    private static void registerSystemCallback(Context context) {
-        context.registerComponentCallbacks(
+    private static void registerSystemCallback() {
+        ContextUtils.getApplicationContext().registerComponentCallbacks(
                 new ComponentCallbacks2() {
                     @Override
                     public void onTrimMemory(int level) {
diff --git a/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessCreationParams.java b/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessCreationParams.java
index fd5e879..75edde0 100644
--- a/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessCreationParams.java
+++ b/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessCreationParams.java
@@ -73,12 +73,14 @@
     private final String mPackageName;
     private final boolean mIsExternalService;
     private final int mLibraryProcessType;
+    private final boolean mBindToCallerCheck;
 
-    public ChildProcessCreationParams(
-            String packageName, boolean isExternalService, int libraryProcessType) {
+    public ChildProcessCreationParams(String packageName, boolean isExternalService,
+            int libraryProcessType, boolean bindToCallerCheck) {
         mPackageName = packageName;
         mIsExternalService = isExternalService;
         mLibraryProcessType = libraryProcessType;
+        mBindToCallerCheck = bindToCallerCheck;
     }
 
     public String getPackageName() {
@@ -93,6 +95,10 @@
         return mLibraryProcessType;
     }
 
+    public boolean getBindToCallerCheck() {
+        return mBindToCallerCheck;
+    }
+
     public void addIntentExtras(Intent intent) {
         intent.putExtra(EXTRA_LIBRARY_PROCESS_TYPE, mLibraryProcessType);
     }
diff --git a/src/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl b/src/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
index ea680c3..32a5347 100644
--- a/src/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
+++ b/src/base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl
@@ -16,5 +16,5 @@
   int setupConnection(in Bundle args, IBinder callback);
 
   // Asks the child service to crash so that we can test the termination logic.
-  void crashIntentionallyForTesting();
+  oneway void crashIntentionallyForTesting();
 }
diff --git a/src/base/android/jni_android.cc b/src/base/android/jni_android.cc
index 56dc5c2..e91e6f9 100644
--- a/src/base/android/jni_android.cc
+++ b/src/base/android/jni_android.cc
@@ -29,7 +29,7 @@
     g_class_loader = LAZY_INSTANCE_INITIALIZER;
 jmethodID g_class_loader_load_class_method_id = 0;
 
-#if BUILDFLAG(ENABLE_PROFILING) && HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 base::LazyInstance<base::ThreadLocalPointer<void>>::Leaky
     g_stack_frame_pointer = LAZY_INSTANCE_INITIALIZER;
 #endif
@@ -289,7 +289,7 @@
   return ConvertJavaStringToUTF8(exception_string);
 }
 
-#if BUILDFLAG(ENABLE_PROFILING) && HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 JNIStackFrameSaver::JNIStackFrameSaver(void* current_fp) {
   previous_fp_ = g_stack_frame_pointer.Pointer()->Get();
@@ -304,7 +304,7 @@
   return g_stack_frame_pointer.Pointer()->Get();
 }
 
-#endif  // ENABLE_PROFILING && HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 }  // namespace android
 }  // namespace base
diff --git a/src/base/android/jni_android.h b/src/base/android/jni_android.h
index de53c10..cc23b2c 100644
--- a/src/base/android/jni_android.h
+++ b/src/base/android/jni_android.h
@@ -14,10 +14,11 @@
 #include "base/atomicops.h"
 #include "base/base_export.h"
 #include "base/compiler_specific.h"
+#include "base/debug/debugging_flags.h"
 #include "base/debug/stack_trace.h"
 #include "base/macros.h"
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 // When profiling is enabled (enable_profiling=true) this macro is added to
 // all generated JNI stubs so that it becomes the last thing that runs before
@@ -46,7 +47,7 @@
 #define JNI_SAVE_FRAME_POINTER
 #define JNI_LINK_SAVED_FRAME_POINTER
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 namespace base {
 namespace android {
@@ -166,7 +167,7 @@
 BASE_EXPORT std::string GetJavaExceptionInfo(JNIEnv* env,
                                              jthrowable java_throwable);
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 // Saves caller's PC and stack frame in a thread-local variable.
 // Implemented only when profiling is enabled (enable_profiling=true).
@@ -182,7 +183,7 @@
   DISALLOW_COPY_AND_ASSIGN(JNIStackFrameSaver);
 };
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 }  // namespace android
 }  // namespace base
diff --git a/src/base/android/memory_pressure_listener_android.cc b/src/base/android/memory_pressure_listener_android.cc
index 32e0871..10ec87d 100644
--- a/src/base/android/memory_pressure_listener_android.cc
+++ b/src/base/android/memory_pressure_listener_android.cc
@@ -4,7 +4,6 @@
 
 #include "base/android/memory_pressure_listener_android.h"
 
-#include "base/android/context_utils.h"
 #include "base/memory/memory_pressure_listener.h"
 #include "jni/MemoryPressureListener_jni.h"
 
@@ -27,8 +26,7 @@
 }
 
 void MemoryPressureListenerAndroid::RegisterSystemCallback(JNIEnv* env) {
-  Java_MemoryPressureListener_registerSystemCallback(
-      env, GetApplicationContext());
+  Java_MemoryPressureListener_registerSystemCallback(env);
 }
 
 }  // namespace android
diff --git a/src/base/bind_internal.h b/src/base/bind_internal.h
index 8988bdc..c8af87d 100644
--- a/src/base/bind_internal.h
+++ b/src/base/bind_internal.h
@@ -360,7 +360,7 @@
 
     return InvokeHelper<is_weak_call, R>::MakeItSo(
         std::forward<Functor>(functor),
-        Unwrap(base::get<indices>(std::forward<BoundArgsTuple>(bound)))...,
+        Unwrap(std::get<indices>(std::forward<BoundArgsTuple>(bound)))...,
         std::forward<UnboundArgs>(unbound_args)...);
   }
 };
@@ -393,7 +393,7 @@
                                  const BoundArgsTuple& bound_args,
                                  IndexSequence<indices...>) {
   return CallbackCancellationTraits<Functor, BoundArgsTuple>::IsCancelled(
-      functor, base::get<indices>(bound_args)...);
+      functor, std::get<indices>(bound_args)...);
 }
 
 // Relays |base| to corresponding CallbackCancellationTraits<>::Run(). Returns
diff --git a/src/base/bind_unittest.cc b/src/base/bind_unittest.cc
index 6e01f7f..38a66b2 100644
--- a/src/base/bind_unittest.cc
+++ b/src/base/bind_unittest.cc
@@ -1303,65 +1303,59 @@
   static_assert(std::is_constructible<
       RepeatingClosure, const RepeatingClosure&>::value,
       "RepeatingClosure should be copyable.");
-  static_assert(is_assignable<
-      RepeatingClosure, const RepeatingClosure&>::value,
+  static_assert(
+      std::is_assignable<RepeatingClosure, const RepeatingClosure&>::value,
       "RepeatingClosure should be copy-assignable.");
 
   // Move constructor and assignment of RepeatingCallback.
   static_assert(std::is_constructible<
       RepeatingClosure, RepeatingClosure&&>::value,
       "RepeatingClosure should be movable.");
-  static_assert(is_assignable<
-      RepeatingClosure, RepeatingClosure&&>::value,
-      "RepeatingClosure should be move-assignable");
+  static_assert(std::is_assignable<RepeatingClosure, RepeatingClosure&&>::value,
+                "RepeatingClosure should be move-assignable");
 
   // Conversions from OnceCallback to RepeatingCallback.
   static_assert(!std::is_constructible<
       RepeatingClosure, const OnceClosure&>::value,
       "OnceClosure should not be convertible to RepeatingClosure.");
-  static_assert(!is_assignable<
-      RepeatingClosure, const OnceClosure&>::value,
+  static_assert(
+      !std::is_assignable<RepeatingClosure, const OnceClosure&>::value,
       "OnceClosure should not be convertible to RepeatingClosure.");
 
   // Destructive conversions from OnceCallback to RepeatingCallback.
   static_assert(!std::is_constructible<
       RepeatingClosure, OnceClosure&&>::value,
       "OnceClosure should not be convertible to RepeatingClosure.");
-  static_assert(!is_assignable<
-      RepeatingClosure, OnceClosure&&>::value,
-      "OnceClosure should not be convertible to RepeatingClosure.");
+  static_assert(!std::is_assignable<RepeatingClosure, OnceClosure&&>::value,
+                "OnceClosure should not be convertible to RepeatingClosure.");
 
   // Copy constructor and assignment of OnceCallback.
   static_assert(!std::is_constructible<
       OnceClosure, const OnceClosure&>::value,
       "OnceClosure should not be copyable.");
-  static_assert(!is_assignable<
-      OnceClosure, const OnceClosure&>::value,
-      "OnceClosure should not be copy-assignable");
+  static_assert(!std::is_assignable<OnceClosure, const OnceClosure&>::value,
+                "OnceClosure should not be copy-assignable");
 
   // Move constructor and assignment of OnceCallback.
   static_assert(std::is_constructible<
       OnceClosure, OnceClosure&&>::value,
       "OnceClosure should be movable.");
-  static_assert(is_assignable<
-      OnceClosure, OnceClosure&&>::value,
-      "OnceClosure should be move-assignable.");
+  static_assert(std::is_assignable<OnceClosure, OnceClosure&&>::value,
+                "OnceClosure should be move-assignable.");
 
   // Conversions from RepeatingCallback to OnceCallback.
   static_assert(std::is_constructible<
       OnceClosure, const RepeatingClosure&>::value,
       "RepeatingClosure should be convertible to OnceClosure.");
-  static_assert(is_assignable<
-      OnceClosure, const RepeatingClosure&>::value,
-      "RepeatingClosure should be convertible to OnceClosure.");
+  static_assert(std::is_assignable<OnceClosure, const RepeatingClosure&>::value,
+                "RepeatingClosure should be convertible to OnceClosure.");
 
   // Destructive conversions from RepeatingCallback to OnceCallback.
   static_assert(std::is_constructible<
       OnceClosure, RepeatingClosure&&>::value,
       "RepeatingClosure should be convertible to OnceClosure.");
-  static_assert(is_assignable<
-      OnceClosure, RepeatingClosure&&>::value,
-      "RepeatingClosure should be covretible to OnceClosure.");
+  static_assert(std::is_assignable<OnceClosure, RepeatingClosure&&>::value,
+                "RepeatingClosure should be covretible to OnceClosure.");
 
   OnceClosure cb = BindOnce(&VoidPolymorphic<>::Run);
   std::move(cb).Run();
diff --git a/src/base/containers/flat_map.h b/src/base/containers/flat_map.h
index e2cb003..bd0b126 100644
--- a/src/base/containers/flat_map.h
+++ b/src/base/containers/flat_map.h
@@ -38,6 +38,15 @@
 // flat_tree.h for more details for most of these functions. As a quick
 // reference, the functions available are:
 //
+// Constructors (inputs need not be sorted):
+//   flat_map(InputIterator first, InputIterator last,
+//            FlatContainerDupes, const Compare& compare = Compare());
+//   flat_map(const flat_map&);
+//   flat_map(flat_map&&);
+//   flat_map(std::vector<value_type>, FlatContainerDupes);  // Re-use storage.
+//   flat_map(std::initializer_list<value_type> ilist,
+//            const Compare& comp = Compare());
+//
 // Assignment functions:
 //   flat_map& operator=(const flat_map&);
 //   flat_map& operator=(flat_map&&);
@@ -95,7 +104,7 @@
 //   iterator                 upper_bound(const Key&);
 //   const_iterator           upper_bound(const Key&) const;
 //
-// General functions
+// General functions:
 //   void swap(flat_map&&)
 //
 // Non-member operators:
@@ -134,21 +143,28 @@
   // duplicates an arbitrary one will be chosen.
   //
   // Assume that move constructors invalidate iterators and references.
+  //
+  // The constructors that take ranges, lists, and vectors do not require that
+  // the input be sorted.
 
   flat_map();
   explicit flat_map(const Compare& comp);
 
-  // Not stable in the presence of duplicates in the initializer list.
   template <class InputIterator>
   flat_map(InputIterator first,
            InputIterator last,
+           FlatContainerDupes dupe_handling,
            const Compare& comp = Compare());
 
   flat_map(const flat_map&);
   flat_map(flat_map&&);
 
-  // Not stable in the presence of duplicates in the initializer list.
+  flat_map(std::vector<value_type> items,
+           FlatContainerDupes dupe_handling,
+           const Compare& comp = Compare());
+
   flat_map(std::initializer_list<value_type> ilist,
+           FlatContainerDupes dupe_handling,
            const Compare& comp = Compare());
 
   ~flat_map();
@@ -160,7 +176,7 @@
 
   flat_map& operator=(const flat_map&);
   flat_map& operator=(flat_map&&);
-  // Not stable in the presence of duplicates in the initializer list.
+  // Takes the first if there are duplicates in the initializer list.
   flat_map& operator=(std::initializer_list<value_type> ilist);
 
   // --------------------------------------------------------------------------
@@ -197,8 +213,9 @@
 template <class InputIterator>
 flat_map<Key, Mapped, Compare>::flat_map(InputIterator first,
                                          InputIterator last,
+                                         FlatContainerDupes dupe_handling,
                                          const Compare& comp)
-    : tree(first, last, comp) {}
+    : tree(first, last, dupe_handling, comp) {}
 
 template <class Key, class Mapped, class Compare>
 flat_map<Key, Mapped, Compare>::flat_map(const flat_map&) = default;
@@ -207,10 +224,17 @@
 flat_map<Key, Mapped, Compare>::flat_map(flat_map&&) = default;
 
 template <class Key, class Mapped, class Compare>
+flat_map<Key, Mapped, Compare>::flat_map(std::vector<value_type> items,
+                                         FlatContainerDupes dupe_handling,
+                                         const Compare& comp)
+    : tree(std::move(items), dupe_handling, comp) {}
+
+template <class Key, class Mapped, class Compare>
 flat_map<Key, Mapped, Compare>::flat_map(
     std::initializer_list<value_type> ilist,
+    FlatContainerDupes dupe_handling,
     const Compare& comp)
-    : flat_map(std::begin(ilist), std::end(ilist), comp) {}
+    : flat_map(std::begin(ilist), std::end(ilist), dupe_handling, comp) {}
 
 template <class Key, class Mapped, class Compare>
 flat_map<Key, Mapped, Compare>::~flat_map() = default;
diff --git a/src/base/containers/flat_map_unittest.cc b/src/base/containers/flat_map_unittest.cc
index 18524ef..0556527 100644
--- a/src/base/containers/flat_map_unittest.cc
+++ b/src/base/containers/flat_map_unittest.cc
@@ -36,10 +36,16 @@
 
 TEST(FlatMap, RangeConstructor) {
   flat_map<int, int>::value_type input_vals[] = {
-      {1, 1}, {1, 1}, {1, 1}, {2, 2}, {2, 2}, {2, 2}, {3, 3}, {3, 3}, {3, 3}};
+      {1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}, {3, 1}, {3, 2}, {3, 3}};
 
-  flat_map<int, int> cont(std::begin(input_vals), std::end(input_vals));
-  EXPECT_THAT(cont, ElementsAre(std::make_pair(1, 1), std::make_pair(2, 2),
+  flat_map<int, int> first(std::begin(input_vals), std::end(input_vals),
+                           KEEP_FIRST_OF_DUPES);
+  EXPECT_THAT(first, ElementsAre(std::make_pair(1, 1), std::make_pair(2, 1),
+                                 std::make_pair(3, 1)));
+
+  flat_map<int, int> last(std::begin(input_vals), std::end(input_vals),
+                          KEEP_LAST_OF_DUPES);
+  EXPECT_THAT(last, ElementsAre(std::make_pair(1, 3), std::make_pair(2, 3),
                                 std::make_pair(3, 3)));
 }
 
@@ -60,13 +66,40 @@
   EXPECT_EQ(1U, moved.count(MoveOnlyInt(4)));
 }
 
+TEST(FlatMap, VectorConstructor) {
+  using IntPair = std::pair<int, int>;
+  using IntMap = flat_map<int, int>;
+  {
+    std::vector<IntPair> vect{{1, 1}, {1, 2}, {2, 1}};
+    IntMap map(std::move(vect), KEEP_FIRST_OF_DUPES);
+    EXPECT_THAT(map, ElementsAre(IntPair(1, 1), IntPair(2, 1)));
+  }
+  {
+    std::vector<IntPair> vect{{1, 1}, {1, 2}, {2, 1}};
+    IntMap map(std::move(vect), KEEP_LAST_OF_DUPES);
+    EXPECT_THAT(map, ElementsAre(IntPair(1, 2), IntPair(2, 1)));
+  }
+}
+
 TEST(FlatMap, InitializerListConstructor) {
-  flat_map<int, int> cont{{1, 1}, {2, 2}, {3, 3},   {4, 4},
-                          {5, 5}, {6, 6}, {10, 10}, {8, 8}};
-  EXPECT_THAT(cont, ElementsAre(std::make_pair(1, 1), std::make_pair(2, 2),
-                                std::make_pair(3, 3), std::make_pair(4, 4),
-                                std::make_pair(5, 5), std::make_pair(6, 6),
-                                std::make_pair(8, 8), std::make_pair(10, 10)));
+  {
+    flat_map<int, int> cont(
+        {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {1, 2}, {10, 10}, {8, 8}},
+        KEEP_FIRST_OF_DUPES);
+    EXPECT_THAT(cont, ElementsAre(std::make_pair(1, 1), std::make_pair(2, 2),
+                                  std::make_pair(3, 3), std::make_pair(4, 4),
+                                  std::make_pair(5, 5), std::make_pair(8, 8),
+                                  std::make_pair(10, 10)));
+  }
+  {
+    flat_map<int, int> cont(
+        {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {1, 2}, {10, 10}, {8, 8}},
+        KEEP_LAST_OF_DUPES);
+    EXPECT_THAT(cont, ElementsAre(std::make_pair(1, 2), std::make_pair(2, 2),
+                                  std::make_pair(3, 3), std::make_pair(4, 4),
+                                  std::make_pair(5, 5), std::make_pair(8, 8),
+                                  std::make_pair(10, 10)));
+  }
 }
 
 TEST(FlatMap, InsertFindSize) {
diff --git a/src/base/containers/flat_set.h b/src/base/containers/flat_set.h
index e0a7ef7..da19034 100644
--- a/src/base/containers/flat_set.h
+++ b/src/base/containers/flat_set.h
@@ -11,8 +11,9 @@
 
 // Overview:
 // This file implements flat_set container. It is an alternative to standard
-// sorted containers that stores it's elements in contiguous memory (current
-// version uses sorted std::vector).
+// sorted containers that stores it's elements in contiguous memory using a
+// std::vector.
+//
 // Discussion that preceded introduction of this container can be found here:
 // https://groups.google.com/a/chromium.org/forum/#!searchin/chromium-dev/vector$20based/chromium-dev/4uQMma9vj9w/HaQ-WvMOAwAJ
 //
@@ -24,11 +25,11 @@
 // Usage guidance:
 // Prefer base::flat_set for:
 //  * Very small sets, something that is an easy fit for cache. Consider
-//    "very small" to be under a 100 32bit integers.
+//    "very small" to be under 100 32bit integers.
 //  * Sets that are built once (using flat_set::flat_set(first, last)). Consider
 //    collecting all data in a vector and then building flat_set out of it.
-//    TODO(dyaroshev): improve the interface to better support this pattern
-//    (crbug.com/682254).
+//    Using the constructor that takes a moved vector allows you to re-use
+//    storage.
 //  * Sets where mutating happens in big bulks: to erase multiple elements, use
 //    base::EraseIf() rather than repeated single-element removal. Insertion is
 //    harder - consider set operations or building a new vector. Set operations
@@ -40,7 +41,9 @@
 //  * Set operations (union/intersect etc).
 //
 // Prefer to build a new flat_set from a std::vector (or similar) instead of
-// calling insert() repeatedly, which would have O(size^2) complexity.
+// calling insert() repeatedly, which would have O(size^2) complexity. The
+// constructor that can accept a moved vector (not required to be sorted) is
+// the most efficient.
 //
 // TODO(dyaroshev): develop standalone benchmarks to find performance boundaries
 // for different types of sets crbug.com/682215.
@@ -57,12 +60,6 @@
 //     - we ask (for now) to assume that move operations invalidate iterators.
 //       TODO(dyaroshev): Research the possibility of using a small buffer
 //       optimization crbug.com/682240.
-//   * Constructor sorts elements in a non-stable manner (unlike std::set). So
-//     among equivalent (with respect to provided compare) elements passed to
-//     the constructor it is unspecified with one will end up in the set.
-//     However insert()/emplace() methods are stable with respect to already
-//     inserted elements - an element that is already in the set will not be
-//     replaced.
 //   * allocator support is not implemented.
 //   * insert(first, last) and insert(std::initializer_list) are not
 //     implemented (see Notes section).
@@ -82,6 +79,15 @@
 // flat_tree.h for more details for most of these functions. As a quick
 // reference, the functions available are:
 //
+// Constructors (inputs need not be sorted):
+//   flat_set(InputIterator first, InputIterator last,
+//            FlatContainerDupes, const Compare& compare = Compare());
+//   flat_set(const flat_set&);
+//   flat_set(flat_set&&);
+//   flat_set(std::vector<Key>, FlatContainerDupes);  // Re-use storage.
+//   flat_set(std::initializer_list<value_type> ilist,
+//            const Compare& comp = Compare());
+//
 // Assignment functions:
 //   flat_set& operator=(const flat_set&);
 //   flat_set& operator=(flat_set&&);
@@ -137,7 +143,7 @@
 //   iterator                 upper_bound(const Key&);
 //   const_iterator           upper_bound(const Key&) const;
 //
-// General functions
+// General functions:
 //   void swap(flat_set&&)
 //
 // Non-member operators:
diff --git a/src/base/containers/flat_set_unittest.cc b/src/base/containers/flat_set_unittest.cc
index 26bb4da..dc024fc 100644
--- a/src/base/containers/flat_set_unittest.cc
+++ b/src/base/containers/flat_set_unittest.cc
@@ -37,15 +37,16 @@
 TEST(FlatSet, RangeConstructor) {
   flat_set<int>::value_type input_vals[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
 
-  flat_set<int> cont(std::begin(input_vals), std::end(input_vals));
+  flat_set<int> cont(std::begin(input_vals), std::end(input_vals),
+                     base::KEEP_FIRST_OF_DUPES);
   EXPECT_THAT(cont, ElementsAre(1, 2, 3));
 }
 
 TEST(FlatSet, MoveConstructor) {
   int input_range[] = {1, 2, 3, 4};
 
-  flat_set<MoveOnlyInt> original(std::begin(input_range),
-                                 std::end(input_range));
+  flat_set<MoveOnlyInt> original(std::begin(input_range), std::end(input_range),
+                                 base::KEEP_FIRST_OF_DUPES);
   flat_set<MoveOnlyInt> moved(std::move(original));
 
   EXPECT_EQ(1U, moved.count(MoveOnlyInt(1)));
@@ -55,7 +56,7 @@
 }
 
 TEST(FlatSet, InitializerListConstructor) {
-  flat_set<int> cont{1, 2, 3, 4, 5, 6, 10, 8};
+  flat_set<int> cont({1, 2, 3, 4, 5, 6, 10, 8}, KEEP_FIRST_OF_DUPES);
   EXPECT_THAT(cont, ElementsAre(1, 2, 3, 4, 5, 6, 8, 10));
 }
 
diff --git a/src/base/containers/flat_tree.h b/src/base/containers/flat_tree.h
index 57335d8..c3a234f 100644
--- a/src/base/containers/flat_tree.h
+++ b/src/base/containers/flat_tree.h
@@ -9,8 +9,39 @@
 #include <vector>
 
 namespace base {
+
+enum FlatContainerDupes {
+  KEEP_FIRST_OF_DUPES,
+  KEEP_LAST_OF_DUPES,
+};
+
 namespace internal {
 
+// This algorithm is like unique() from the standard library except it
+// selects only the last of consecutive values instead of the first.
+template <class Iterator, class BinaryPredicate>
+Iterator LastUnique(Iterator first, Iterator last, BinaryPredicate compare) {
+  if (first == last)
+    return last;
+
+  Iterator dest = first;
+  Iterator cur = first;
+  Iterator prev = cur;
+  while (++cur != last) {
+    if (!compare(*prev, *cur)) {
+      // Non-identical one.
+      if (dest != prev)
+        *dest = std::move(*prev);
+      ++dest;
+    }
+    prev = cur;
+  }
+
+  if (dest != prev)
+    *dest = std::move(*prev);
+  return ++dest;
+}
+
 // Implementation of a sorted vector for backing flat_set and flat_map. Do not
 // use directly.
 //
@@ -24,7 +55,6 @@
 //   const Key& operator()(const Value&).
 template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
 class flat_tree {
- public:
  private:
   using underlying_type = std::vector<Value>;
 
@@ -71,21 +101,28 @@
   // length).
   //
   // Assume that move constructors invalidate iterators and references.
+  //
+  // The constructors that take ranges, lists, and vectors do not require that
+  // the input be sorted.
 
   flat_tree();
   explicit flat_tree(const key_compare& comp);
 
-  // Not stable in the presence of duplicates in the initializer list.
   template <class InputIterator>
   flat_tree(InputIterator first,
             InputIterator last,
+            FlatContainerDupes dupe_handling,
             const key_compare& comp = key_compare());
 
   flat_tree(const flat_tree&);
   flat_tree(flat_tree&&);
 
-  // Not stable in the presence of duplicates in the initializer list.
+  flat_tree(std::vector<value_type> items,
+            FlatContainerDupes dupe_handling,
+            const key_compare& comp = key_compare());
+
   flat_tree(std::initializer_list<value_type> ilist,
+            FlatContainerDupes dupe_handling,
             const key_compare& comp = key_compare());
 
   ~flat_tree();
@@ -97,7 +134,7 @@
 
   flat_tree& operator=(const flat_tree&);
   flat_tree& operator=(flat_tree&&);
-  // Not stable in the presence of duplicates in the initializer list.
+  // Takes the first if there are duplicates in the initializer list.
   flat_tree& operator=(std::initializer_list<value_type> ilist);
 
   // --------------------------------------------------------------------------
@@ -248,7 +285,7 @@
 
  protected:
   // Emplaces a new item into the tree that is known not to be in it. This
-  // is for implementing map [] and at().
+  // is for implementing map operator[].
   template <class... Args>
   iterator unsafe_emplace(const_iterator position, Args&&... args);
 
@@ -276,17 +313,26 @@
     return std::next(begin(), distance);
   }
 
-  void sort_and_unique() {
-    // std::set sorts elements preserving stability because it doesn't have any
-    // performance wins in not doing that. We do, so we use an unstable sort.
-    std::sort(begin(), end(), impl_.get_value_comp());
-    erase(std::unique(begin(), end(),
-                      [this](const value_type& lhs, const value_type& rhs) {
-                        // lhs is already <= rhs due to sort, therefore
-                        // !(lhs < rhs) <=> lhs == rhs.
-                        return !impl_.get_value_comp()(lhs, rhs);
-                      }),
-          end());
+  void sort_and_unique(FlatContainerDupes dupes) {
+    // Preserve stability for the unique code below.
+    std::stable_sort(begin(), end(), impl_.get_value_comp());
+
+    auto comparator = [this](const value_type& lhs, const value_type& rhs) {
+      // lhs is already <= rhs due to sort, therefore
+      // !(lhs < rhs) <=> lhs == rhs.
+      return !impl_.get_value_comp()(lhs, rhs);
+    };
+
+    iterator erase_after;
+    switch (dupes) {
+      case KEEP_FIRST_OF_DUPES:
+        erase_after = std::unique(begin(), end(), comparator);
+        break;
+      case KEEP_LAST_OF_DUPES:
+        erase_after = LastUnique(begin(), end(), comparator);
+        break;
+    }
+    erase(erase_after, end());
   }
 
   // To support comparators that may not be possible to default-construct, we
@@ -325,9 +371,10 @@
 flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::flat_tree(
     InputIterator first,
     InputIterator last,
+    FlatContainerDupes dupe_handling,
     const KeyCompare& comp)
     : impl_(comp, first, last) {
-  sort_and_unique();
+  sort_and_unique(dupe_handling);
 }
 
 template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
@@ -340,9 +387,19 @@
 
 template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
 flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::flat_tree(
-    std::initializer_list<value_type> ilist,
+    std::vector<value_type> items,
+    FlatContainerDupes dupe_handling,
     const KeyCompare& comp)
-    : flat_tree(std::begin(ilist), std::end(ilist), comp) {}
+    : impl_(comp, std::move(items)) {
+  sort_and_unique(dupe_handling);
+}
+
+template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
+flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::flat_tree(
+    std::initializer_list<value_type> ilist,
+    FlatContainerDupes dupe_handling,
+    const KeyCompare& comp)
+    : flat_tree(std::begin(ilist), std::end(ilist), dupe_handling, comp) {}
 
 template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
 flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::~flat_tree() = default;
@@ -362,7 +419,7 @@
 auto flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::operator=(
     std::initializer_list<value_type> ilist) -> flat_tree& {
   impl_.body_ = ilist;
-  sort_and_unique();
+  sort_and_unique(KEEP_FIRST_OF_DUPES);
   return *this;
 }
 
@@ -683,8 +740,8 @@
     const_iterator position,
     Args&&... args) -> iterator {
   // We have to cast away const because of crbug.com/677044.
-  return impl_.body_.insert(const_cast_it(position),
-                            value_type(std::forward<Args>(args)...));
+  return impl_.body_.emplace(const_cast_it(position),
+                             std::forward<Args>(args)...);
 }
 
 // For containers like sets, the key is the same as the value. This implements
diff --git a/src/base/containers/flat_tree_unittest.cc b/src/base/containers/flat_tree_unittest.cc
index 91a853c..e3a8f87 100644
--- a/src/base/containers/flat_tree_unittest.cc
+++ b/src/base/containers/flat_tree_unittest.cc
@@ -130,6 +130,13 @@
   }
 };
 
+template <class PairType>
+struct LessByFirst {
+  bool operator()(const PairType& lhs, const PairType& rhs) const {
+    return lhs.first < rhs.first;
+  }
+};
+
 // Common test trees.
 
 // TODO(dyaroshev): replace less<int> with less<>, once we have it
@@ -138,6 +145,11 @@
     flat_tree<int, int, GetKeyFromValueIdentity<int>, std::less<int>>;
 using IntTree =
     flat_tree<int, int, GetKeyFromValueIdentity<int>, std::less<int>>;
+using IntPair = std::pair<int, int>;
+using IntPairTree = flat_tree<IntPair,
+                              IntPair,
+                              GetKeyFromValueIdentity<IntPair>,
+                              LessByFirst<IntPair>>;
 using MoveOnlyTree = flat_tree<MoveOnlyInt,
                                MoveOnlyInt,
                                GetKeyFromValueIdentity<MoveOnlyInt>,
@@ -158,6 +170,68 @@
 
 }  // namespace
 
+TEST(FlatTree, LastUnique) {
+  using Pair = std::pair<int, int>;
+  using Vect = std::vector<Pair>;
+
+  auto cmp = [](const Pair& lhs, const Pair& rhs) {
+    return lhs.first == rhs.first;
+  };
+
+  // Empty case.
+  Vect empty;
+  EXPECT_EQ(empty.end(), LastUnique(empty.begin(), empty.end(), cmp));
+
+  // Single element.
+  Vect one;
+  one.push_back(Pair(1, 1));
+  EXPECT_EQ(one.end(), LastUnique(one.begin(), one.end(), cmp));
+  ASSERT_EQ(1u, one.size());
+  EXPECT_THAT(one, ElementsAre(Pair(1, 1)));
+
+  // Two elements, already unique.
+  Vect two_u;
+  two_u.push_back(Pair(1, 1));
+  two_u.push_back(Pair(2, 2));
+  EXPECT_EQ(two_u.end(), LastUnique(two_u.begin(), two_u.end(), cmp));
+  EXPECT_THAT(two_u, ElementsAre(Pair(1, 1), Pair(2, 2)));
+
+  // Two elements, dupes.
+  Vect two_d;
+  two_d.push_back(Pair(1, 1));
+  two_d.push_back(Pair(1, 2));
+  auto last = LastUnique(two_d.begin(), two_d.end(), cmp);
+  EXPECT_EQ(two_d.begin() + 1, last);
+  two_d.erase(last, two_d.end());
+  EXPECT_THAT(two_d, ElementsAre(Pair(1, 2)));
+
+  // Non-dupes, dupes, non-dupes.
+  Vect ndn;
+  ndn.push_back(Pair(1, 1));
+  ndn.push_back(Pair(2, 1));
+  ndn.push_back(Pair(2, 2));
+  ndn.push_back(Pair(2, 3));
+  ndn.push_back(Pair(3, 1));
+  last = LastUnique(ndn.begin(), ndn.end(), cmp);
+  EXPECT_EQ(ndn.begin() + 3, last);
+  ndn.erase(last, ndn.end());
+  EXPECT_THAT(ndn, ElementsAre(Pair(1, 1), Pair(2, 3), Pair(3, 1)));
+
+  // Dupes, non-dupes, dupes.
+  Vect dnd;
+  dnd.push_back(Pair(1, 1));
+  dnd.push_back(Pair(1, 2));
+  dnd.push_back(Pair(1, 3));
+  dnd.push_back(Pair(2, 1));
+  dnd.push_back(Pair(3, 1));
+  dnd.push_back(Pair(3, 2));
+  dnd.push_back(Pair(3, 3));
+  last = LastUnique(dnd.begin(), dnd.end(), cmp);
+  EXPECT_EQ(dnd.begin() + 3, last);
+  dnd.erase(last, dnd.end());
+  EXPECT_THAT(dnd, ElementsAre(Pair(1, 3), Pair(2, 1), Pair(3, 3)));
+}
+
 // ----------------------------------------------------------------------------
 // Class.
 
@@ -181,36 +255,31 @@
 TEST(FlatTree, Stability) {
   using Pair = std::pair<int, int>;
 
-  struct LessByFirst {
-    bool operator()(const Pair& lhs, const Pair& rhs) const {
-      return lhs.first < rhs.first;
-    }
-  };
-
   using Tree =
-      flat_tree<Pair, Pair, GetKeyFromValueIdentity<Pair>, LessByFirst>;
+      flat_tree<Pair, Pair, GetKeyFromValueIdentity<Pair>, LessByFirst<Pair>>;
 
-  // Constructors are not stable.
-  Tree cont{{0, 0}, {1, 0}, {0, 1}, {2, 0}, {0, 2}, {1, 1}};
+  // Constructors are stable.
+  Tree cont({{0, 0}, {1, 0}, {0, 1}, {2, 0}, {0, 2}, {1, 1}},
+            KEEP_FIRST_OF_DUPES);
 
-  auto NoneOfSecondsAreTwo = [&cont] {
-    return std::none_of(cont.begin(), cont.end(),
-                        [](const Pair& elem) { return elem.second == 2; });
+  auto AllOfSecondsAreZero = [&cont] {
+    return std::all_of(cont.begin(), cont.end(),
+                       [](const Pair& elem) { return elem.second == 0; });
   };
 
+  EXPECT_TRUE(AllOfSecondsAreZero()) << "constructor should be stable";
+
   // Should not replace existing.
   cont.insert(Pair(0, 2));
   cont.insert(Pair(1, 2));
   cont.insert(Pair(2, 2));
 
-  EXPECT_TRUE(NoneOfSecondsAreTwo())
-      << "insert should be stable with respect to constructor";
+  EXPECT_TRUE(AllOfSecondsAreZero()) << "insert should be stable";
 
   cont.insert(Pair(3, 0));
   cont.insert(Pair(3, 2));
 
-  EXPECT_TRUE(NoneOfSecondsAreTwo())
-      << "insert should be stable with respect to previous insert";
+  EXPECT_TRUE(AllOfSecondsAreZero()) << "insert should be stable";
 }
 
 // ----------------------------------------------------------------------------
@@ -263,16 +332,26 @@
 }
 
 // flat_tree(InputIterator first,
-//          InputIterator last,
-//          const Compare& comp = Compare())
+//           InputIterator last,
+//           FlatContainerDupes dupe_handling,
+//           const Compare& comp = Compare())
 
 TEST(FlatTree, RangeConstructor) {
   {
-    IntTree::value_type input_vals[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
+    IntPair input_vals[] = {{1, 1}, {1, 2}, {2, 1}, {2, 2}, {1, 3},
+                            {2, 3}, {3, 1}, {3, 2}, {3, 3}};
 
-    IntTree cont(MakeInputIterator(std::begin(input_vals)),
-                 MakeInputIterator(std::end(input_vals)));
-    EXPECT_THAT(cont, ElementsAre(1, 2, 3));
+    IntPairTree first_of(MakeInputIterator(std::begin(input_vals)),
+                         MakeInputIterator(std::end(input_vals)),
+                         KEEP_FIRST_OF_DUPES);
+    EXPECT_THAT(first_of,
+                ElementsAre(IntPair(1, 1), IntPair(2, 1), IntPair(3, 1)));
+
+    IntPairTree last_of(MakeInputIterator(std::begin(input_vals)),
+                        MakeInputIterator(std::end(input_vals)),
+                        KEEP_LAST_OF_DUPES);
+    EXPECT_THAT(last_of,
+                ElementsAre(IntPair(1, 3), IntPair(2, 3), IntPair(3, 3)));
   }
   {
     TreeWithStrangeCompare::value_type input_vals[] = {1, 1, 1, 2, 2,
@@ -280,6 +359,7 @@
 
     TreeWithStrangeCompare cont(MakeInputIterator(std::begin(input_vals)),
                                 MakeInputIterator(std::end(input_vals)),
+                                KEEP_FIRST_OF_DUPES,
                                 NonDefaultConstructibleCompare(0));
     EXPECT_THAT(cont, ElementsAre(1, 2, 3));
   }
@@ -288,7 +368,7 @@
 // flat_tree(const flat_tree& x)
 
 TEST(FlatTree, CopyConstructor) {
-  IntTree original{1, 2, 3, 4};
+  IntTree original({1, 2, 3, 4}, KEEP_FIRST_OF_DUPES);
   IntTree copied(original);
 
   EXPECT_THAT(copied, ElementsAre(1, 2, 3, 4));
@@ -303,7 +383,8 @@
 TEST(FlatTree, MoveConstructor) {
   int input_range[] = {1, 2, 3, 4};
 
-  MoveOnlyTree original(std::begin(input_range), std::end(input_range));
+  MoveOnlyTree original(std::begin(input_range), std::end(input_range),
+                        KEEP_FIRST_OF_DUPES);
   MoveOnlyTree moved(std::move(original));
 
   EXPECT_EQ(1U, moved.count(MoveOnlyInt(1)));
@@ -312,19 +393,65 @@
   EXPECT_EQ(1U, moved.count(MoveOnlyInt(4)));
 }
 
-//  flat_tree(std::initializer_list<value_type> ilist,
+// flat_tree(std::vector<value_type>, FlatContainerDupes dupe_handling)
+
+TEST(FlatTree, VectorConstructor) {
+  using Pair = std::pair<int, MoveOnlyInt>;
+
+  // Construct an unsorted vector with a duplicate item in it. Sorted by the
+  // first item, the second allows us to test for stability. Using a move
+  // only type to ensure the vector is not copied.
+  std::vector<Pair> storage;
+  storage.push_back(Pair(2, MoveOnlyInt(0)));
+  storage.push_back(Pair(1, MoveOnlyInt(0)));
+  storage.push_back(Pair(2, MoveOnlyInt(1)));
+
+  using Tree =
+      flat_tree<Pair, Pair, GetKeyFromValueIdentity<Pair>, LessByFirst<Pair>>;
+  Tree tree(std::move(storage), KEEP_FIRST_OF_DUPES);
+
+  // The list should be two items long, with only the first "2" saved.
+  ASSERT_EQ(2u, tree.size());
+  const Pair& zeroth = *tree.begin();
+  ASSERT_EQ(1, zeroth.first);
+  ASSERT_EQ(0, zeroth.second.data());
+
+  const Pair& first = *(tree.begin() + 1);
+  ASSERT_EQ(2, first.first);
+  ASSERT_EQ(0, first.second.data());
+
+  // Test KEEP_LAST_OF_DUPES with a simple vector constructor.
+  std::vector<IntPair> int_storage{{1, 1}, {1, 2}, {2, 1}};
+  IntPairTree int_tree(std::move(int_storage), KEEP_LAST_OF_DUPES);
+  EXPECT_THAT(int_tree, ElementsAre(IntPair(1, 2), IntPair(2, 1)));
+}
+
+// flat_tree(std::initializer_list<value_type> ilist,
+//           FlatContainerDupes dupe_handling,
 //           const Compare& comp = Compare())
 
 TEST(FlatTree, InitializerListConstructor) {
   {
-    IntTree cont{1, 2, 3, 4, 5, 6, 10, 8};
+    IntTree cont({1, 2, 3, 4, 5, 6, 10, 8}, KEEP_FIRST_OF_DUPES);
     EXPECT_THAT(cont, ElementsAre(1, 2, 3, 4, 5, 6, 8, 10));
   }
   {
-    TreeWithStrangeCompare cont({1, 2, 3, 4, 5, 6, 10, 8},
+    IntTree cont({1, 2, 3, 4, 5, 6, 10, 8}, KEEP_FIRST_OF_DUPES);
+    EXPECT_THAT(cont, ElementsAre(1, 2, 3, 4, 5, 6, 8, 10));
+  }
+  {
+    TreeWithStrangeCompare cont({1, 2, 3, 4, 5, 6, 10, 8}, KEEP_FIRST_OF_DUPES,
                                 NonDefaultConstructibleCompare(0));
     EXPECT_THAT(cont, ElementsAre(1, 2, 3, 4, 5, 6, 8, 10));
   }
+  {
+    IntPairTree first_of({{1, 1}, {2, 1}, {1, 2}}, KEEP_FIRST_OF_DUPES);
+    EXPECT_THAT(first_of, ElementsAre(IntPair(1, 1), IntPair(2, 1)));
+  }
+  {
+    IntPairTree last_of({{1, 1}, {2, 1}, {1, 2}}, KEEP_LAST_OF_DUPES);
+    EXPECT_THAT(last_of, ElementsAre(IntPair(1, 2), IntPair(2, 1)));
+  }
 }
 
 // ----------------------------------------------------------------------------
@@ -333,7 +460,7 @@
 // flat_tree& operator=(const flat_tree&)
 
 TEST(FlatTree, CopyAssignable) {
-  IntTree original{1, 2, 3, 4};
+  IntTree original({1, 2, 3, 4}, KEEP_FIRST_OF_DUPES);
   IntTree copied;
   copied = original;
 
@@ -347,7 +474,8 @@
 TEST(FlatTree, MoveAssignable) {
   int input_range[] = {1, 2, 3, 4};
 
-  MoveOnlyTree original(std::begin(input_range), std::end(input_range));
+  MoveOnlyTree original(std::begin(input_range), std::end(input_range),
+                        KEEP_FIRST_OF_DUPES);
   MoveOnlyTree moved;
   moved = std::move(original);
 
@@ -360,7 +488,7 @@
 // flat_tree& operator=(std::initializer_list<value_type> ilist)
 
 TEST(FlatTree, InitializerListAssignable) {
-  IntTree cont{0};
+  IntTree cont({0}, KEEP_FIRST_OF_DUPES);
   cont = {1, 2, 3, 4, 5, 6, 10, 8};
 
   EXPECT_EQ(0U, cont.count(0));
@@ -373,7 +501,7 @@
 // void reserve(size_type new_capacity)
 
 TEST(FlatTree, Reserve) {
-  IntTree cont{1, 2, 3};
+  IntTree cont({1, 2, 3}, KEEP_FIRST_OF_DUPES);
 
   cont.reserve(5);
   EXPECT_LE(5U, cont.capacity());
@@ -382,7 +510,7 @@
 // size_type capacity() const
 
 TEST(FlatTree, Capacity) {
-  IntTree cont{1, 2, 3};
+  IntTree cont({1, 2, 3}, KEEP_FIRST_OF_DUPES);
 
   EXPECT_LE(cont.size(), cont.capacity());
   cont.reserve(5);
@@ -392,7 +520,7 @@
 // void shrink_to_fit()
 
 TEST(FlatTree, ShrinkToFit) {
-  IntTree cont{1, 2, 3};
+  IntTree cont({1, 2, 3}, KEEP_FIRST_OF_DUPES);
 
   IntTree::size_type capacity_before = cont.capacity();
   cont.shrink_to_fit();
@@ -405,7 +533,7 @@
 // void clear()
 
 TEST(FlatTree, Clear) {
-  IntTree cont{1, 2, 3, 4, 5, 6, 7, 8};
+  IntTree cont({1, 2, 3, 4, 5, 6, 7, 8}, KEEP_FIRST_OF_DUPES);
   cont.clear();
   EXPECT_THAT(cont, ElementsAre());
 }
@@ -461,7 +589,7 @@
 // const_reverse_iterator crend() const
 
 TEST(FlatTree, Iterators) {
-  IntTree cont{1, 2, 3, 4, 5, 6, 7, 8};
+  IntTree cont({1, 2, 3, 4, 5, 6, 7, 8}, KEEP_FIRST_OF_DUPES);
 
   auto size = static_cast<IntTree::difference_type>(cont.size());
 
@@ -684,7 +812,7 @@
 // iterator erase(const_iterator position_hint)
 
 TEST(FlatTree, ErasePosition) {
-  IntTree cont{1, 2, 3, 4, 5, 6, 7, 8};
+  IntTree cont({1, 2, 3, 4, 5, 6, 7, 8}, KEEP_FIRST_OF_DUPES);
 
   IntTree::iterator it = cont.erase(std::next(cont.cbegin(), 3));
   EXPECT_EQ(std::next(cont.begin(), 3), it);
@@ -722,7 +850,7 @@
 // iterator erase(const_iterator first, const_iterator last)
 
 TEST(FlatTree, EraseRange) {
-  IntTree cont{1, 2, 3, 4, 5, 6, 7, 8};
+  IntTree cont({1, 2, 3, 4, 5, 6, 7, 8}, KEEP_FIRST_OF_DUPES);
 
   IntTree::iterator it =
       cont.erase(std::next(cont.cbegin(), 5), std::next(cont.cbegin(), 5));
@@ -749,7 +877,7 @@
 // size_type erase(const key_type& key)
 
 TEST(FlatTree, EraseKey) {
-  IntTree cont{1, 2, 3, 4, 5, 6, 7, 8};
+  IntTree cont({1, 2, 3, 4, 5, 6, 7, 8}, KEEP_FIRST_OF_DUPES);
 
   EXPECT_EQ(0U, cont.erase(9));
   EXPECT_THAT(cont, ElementsAre(1, 2, 3, 4, 5, 6, 7, 8));
@@ -785,7 +913,7 @@
 // key_compare key_comp() const
 
 TEST(FlatTree, KeyComp) {
-  ReversedTree cont{1, 2, 3, 4, 5};
+  ReversedTree cont({1, 2, 3, 4, 5}, KEEP_FIRST_OF_DUPES);
 
   EXPECT_TRUE(std::is_sorted(cont.begin(), cont.end(), cont.key_comp()));
   int new_elements[] = {6, 7, 8, 9, 10};
@@ -797,7 +925,7 @@
 // value_compare value_comp() const
 
 TEST(FlatTree, ValueComp) {
-  ReversedTree cont{1, 2, 3, 4, 5};
+  ReversedTree cont({1, 2, 3, 4, 5}, KEEP_FIRST_OF_DUPES);
 
   EXPECT_TRUE(std::is_sorted(cont.begin(), cont.end(), cont.value_comp()));
   int new_elements[] = {6, 7, 8, 9, 10};
@@ -813,7 +941,7 @@
 
 TEST(FlatTree, Count) {
   {
-    const IntTree cont{5, 6, 7, 8, 9, 10, 11, 12};
+    const IntTree cont({5, 6, 7, 8, 9, 10, 11, 12}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(1U, cont.count(5));
     EXPECT_EQ(1U, cont.count(6));
@@ -826,7 +954,8 @@
     EXPECT_EQ(0U, cont.count(4));
   }
   {
-    const IntTreeWithLess cont{5, 6, 7, 8, 9, 10, 11, 12};
+    const IntTreeWithLess cont({5, 6, 7, 8, 9, 10, 11, 12},
+                               KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(1U, cont.count(5));
     EXPECT_EQ(1U, cont.count(6));
@@ -845,7 +974,7 @@
 
 TEST(FlatTree, Find) {
   {
-    IntTree cont{5, 6, 7, 8, 9, 10, 11, 12};
+    IntTree cont({5, 6, 7, 8, 9, 10, 11, 12}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.find(5));
     EXPECT_EQ(std::next(cont.begin()), cont.find(6));
@@ -858,7 +987,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.find(4));
   }
   {
-    const IntTree cont{5, 6, 7, 8, 9, 10, 11, 12};
+    const IntTree cont({5, 6, 7, 8, 9, 10, 11, 12}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.find(5));
     EXPECT_EQ(std::next(cont.begin()), cont.find(6));
@@ -871,7 +1000,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.find(4));
   }
   {
-    IntTreeWithLess cont{5, 6, 7, 8, 9, 10, 11, 12};
+    IntTreeWithLess cont({5, 6, 7, 8, 9, 10, 11, 12}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.find(5));
     EXPECT_EQ(std::next(cont.begin()), cont.find(6));
@@ -890,7 +1019,7 @@
 
 TEST(FlatTree, EqualRange) {
   {
-    IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     std::pair<IntTree::iterator, IntTree::iterator> result =
         cont.equal_range(5);
@@ -946,7 +1075,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), result.second);
   }
   {
-    const IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    const IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     std::pair<IntTree::const_iterator, IntTree::const_iterator> result =
         cont.equal_range(5);
@@ -1002,7 +1131,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), result.second);
   }
   {
-    IntTreeWithLess cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTreeWithLess cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     std::pair<IntTree::iterator, IntTree::iterator> result =
         cont.equal_range(5);
@@ -1064,7 +1193,7 @@
 
 TEST(FlatTree, LowerBound) {
   {
-    IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.lower_bound(5));
     EXPECT_EQ(std::next(cont.begin()), cont.lower_bound(7));
@@ -1085,7 +1214,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.lower_bound(20));
   }
   {
-    const IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    const IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.lower_bound(5));
     EXPECT_EQ(std::next(cont.begin()), cont.lower_bound(7));
@@ -1106,7 +1235,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.lower_bound(20));
   }
   {
-    IntTreeWithLess cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTreeWithLess cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(cont.begin(), cont.lower_bound(5));
     EXPECT_EQ(std::next(cont.begin()), cont.lower_bound(7));
@@ -1133,7 +1262,7 @@
 
 TEST(FlatTree, UpperBound) {
   {
-    IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(std::next(cont.begin(), 1), cont.upper_bound(5));
     EXPECT_EQ(std::next(cont.begin(), 2), cont.upper_bound(7));
@@ -1154,7 +1283,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.upper_bound(20));
   }
   {
-    const IntTree cont{5, 7, 9, 11, 13, 15, 17, 19};
+    const IntTree cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(std::next(cont.begin(), 1), cont.upper_bound(5));
     EXPECT_EQ(std::next(cont.begin(), 2), cont.upper_bound(7));
@@ -1175,7 +1304,7 @@
     EXPECT_EQ(std::next(cont.begin(), 8), cont.upper_bound(20));
   }
   {
-    IntTreeWithLess cont{5, 7, 9, 11, 13, 15, 17, 19};
+    IntTreeWithLess cont({5, 7, 9, 11, 13, 15, 17, 19}, KEEP_FIRST_OF_DUPES);
 
     EXPECT_EQ(std::next(cont.begin(), 1), cont.upper_bound(5));
     EXPECT_EQ(std::next(cont.begin(), 2), cont.upper_bound(7));
@@ -1204,8 +1333,8 @@
 // void swap(flat_tree& lhs, flat_tree& rhs)
 
 TEST(FlatTreeOurs, Swap) {
-  IntTree x{1, 2, 3};
-  IntTree y{4};
+  IntTree x({1, 2, 3}, KEEP_FIRST_OF_DUPES);
+  IntTree y({4}, KEEP_FIRST_OF_DUPES);
   swap(x, y);
   EXPECT_THAT(x, ElementsAre(4));
   EXPECT_THAT(y, ElementsAre(1, 2, 3));
@@ -1224,9 +1353,9 @@
 
 TEST(FlatTree, Comparison) {
   // Provided comparator does not participate in comparison.
-  ReversedTree biggest{3};
-  ReversedTree smallest{1};
-  ReversedTree middle{1, 2};
+  ReversedTree biggest({3}, KEEP_FIRST_OF_DUPES);
+  ReversedTree smallest({1}, KEEP_FIRST_OF_DUPES);
+  ReversedTree middle({1, 2}, KEEP_FIRST_OF_DUPES);
 
   EXPECT_EQ(biggest, biggest);
   EXPECT_NE(biggest, smallest);
diff --git a/src/base/critical_closure.h b/src/base/critical_closure.h
index 35ce2b5..94c618d 100644
--- a/src/base/critical_closure.h
+++ b/src/base/critical_closure.h
@@ -29,13 +29,13 @@
 // |ios::ScopedCriticalAction|.
 class CriticalClosure {
  public:
-  explicit CriticalClosure(Closure closure);
+  explicit CriticalClosure(OnceClosure closure);
   ~CriticalClosure();
   void Run();
 
  private:
   ios::ScopedCriticalAction critical_action_;
-  Closure closure_;
+  OnceClosure closure_;
 
   DISALLOW_COPY_AND_ASSIGN(CriticalClosure);
 };
@@ -57,13 +57,14 @@
 // background running time, |MakeCriticalClosure| should be applied on them
 // before posting.
 #if defined(OS_IOS)
-inline Closure MakeCriticalClosure(Closure closure) {
+inline OnceClosure MakeCriticalClosure(OnceClosure closure) {
   DCHECK(internal::IsMultiTaskingSupported());
-  return base::Bind(&internal::CriticalClosure::Run,
-                    Owned(new internal::CriticalClosure(std::move(closure))));
+  return base::BindOnce(
+      &internal::CriticalClosure::Run,
+      Owned(new internal::CriticalClosure(std::move(closure))));
 }
 #else  // defined(OS_IOS)
-inline Closure MakeCriticalClosure(Closure closure) {
+inline OnceClosure MakeCriticalClosure(OnceClosure closure) {
   // No-op for platforms where the application does not need to acquire
   // background time for closures to finish when it goes into the background.
   return closure;
diff --git a/src/base/critical_closure_internal_ios.mm b/src/base/critical_closure_internal_ios.mm
index 4088a47..e35eca0 100644
--- a/src/base/critical_closure_internal_ios.mm
+++ b/src/base/critical_closure_internal_ios.mm
@@ -13,13 +13,13 @@
   return [[UIDevice currentDevice] isMultitaskingSupported];
 }
 
-CriticalClosure::CriticalClosure(Closure closure)
+CriticalClosure::CriticalClosure(OnceClosure closure)
     : closure_(std::move(closure)) {}
 
 CriticalClosure::~CriticalClosure() {}
 
 void CriticalClosure::Run() {
-  closure_.Run();
+  std::move(closure_).Run();
 }
 
 }  // namespace internal
diff --git a/src/base/debug/stack_trace.cc b/src/base/debug/stack_trace.cc
index 43a23d9..ede8bd4 100644
--- a/src/base/debug/stack_trace.cc
+++ b/src/base/debug/stack_trace.cc
@@ -12,7 +12,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 #if defined(OS_LINUX) || defined(OS_ANDROID)
 #include <pthread.h>
@@ -28,14 +28,14 @@
 extern "C" void* __libc_stack_end;
 #endif
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 namespace base {
 namespace debug {
 
 namespace {
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN)
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) && !defined(OS_WIN)
 
 #if defined(__arm__) && defined(__GNUC__) && !defined(__clang__)
 // GCC and LLVM generate slightly different frames on ARM, see
@@ -142,11 +142,11 @@
   return prev_parent_fp;
 }
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN)
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) && !defined(OS_WIN)
 
 }  // namespace
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 uintptr_t GetStackEnd() {
 #if defined(OS_ANDROID)
   // Bionic reads proc/maps on every call to pthread_getattr_np() when called
@@ -194,7 +194,7 @@
   // Don't know how to get end of the stack.
   return 0;
 }
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 StackTrace::StackTrace() : StackTrace(arraysize(trace_)) {}
 
@@ -220,7 +220,7 @@
   return stream.str();
 }
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 size_t TraceStackFramePointers(const void** out_trace,
                                size_t max_depth,
@@ -286,7 +286,7 @@
 }
 #endif  // !defined(OS_WIN)
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 }  // namespace debug
 }  // namespace base
diff --git a/src/base/debug/stack_trace.h b/src/base/debug/stack_trace.h
index ab1d2eb..5796f56 100644
--- a/src/base/debug/stack_trace.h
+++ b/src/base/debug/stack_trace.h
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/base_export.h"
+#include "base/debug/debugging_flags.h"
 #include "base/macros.h"
 #include "build/build_config.h"
 
@@ -23,24 +24,6 @@
 struct _CONTEXT;
 #endif
 
-// TODO(699863): Clean up HAVE_TRACE_STACK_FRAME_POINTERS.
-#if defined(OS_POSIX)
-
-#if defined(__i386__) || defined(__x86_64__)
-#define HAVE_TRACE_STACK_FRAME_POINTERS 1
-#elif defined(__arm__) && !defined(__thumb__)
-#define HAVE_TRACE_STACK_FRAME_POINTERS 1
-#else  // defined(__arm__) && !defined(__thumb__)
-#define HAVE_TRACE_STACK_FRAME_POINTERS 0
-#endif  // defined(__arm__) && !defined(__thumb__)
-
-#elif defined(OS_WIN)
-#define HAVE_TRACE_STACK_FRAME_POINTERS 1
-
-#else  // defined(OS_WIN)
-#define HAVE_TRACE_STACK_FRAME_POINTERS 0
-#endif  // defined(OS_WIN)
-
 namespace base {
 namespace debug {
 
@@ -56,7 +39,7 @@
 BASE_EXPORT bool EnableInProcessStackDumping();
 
 // Returns end of the stack, or 0 if we couldn't get it.
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 BASE_EXPORT uintptr_t GetStackEnd();
 #endif
 
@@ -119,7 +102,7 @@
   size_t count_;
 };
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 // Traces the stack by using frame pointers. This function is faster but less
 // reliable than StackTrace. It should work for debug and profiling builds,
 // but not for release builds (although there are some exceptions).
@@ -184,7 +167,7 @@
 };
 #endif  // !defined(OS_WIN)
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 
 namespace internal {
 
diff --git a/src/base/debug/stack_trace_unittest.cc b/src/base/debug/stack_trace_unittest.cc
index 536edb2..bdff543 100644
--- a/src/base/debug/stack_trace_unittest.cc
+++ b/src/base/debug/stack_trace_unittest.cc
@@ -8,6 +8,7 @@
 #include <sstream>
 #include <string>
 
+#include "base/debug/debugging_flags.h"
 #include "base/debug/stack_trace.h"
 #include "base/logging.h"
 #include "base/process/kill.h"
@@ -254,10 +255,11 @@
 }
 #endif  // defined(OS_POSIX) && !defined(OS_ANDROID)
 
-#if HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN)
 // Windows x64 binaries cannot be built with frame pointer, and MSVC doesn't
 // provide intrinsics to query the frame pointer even for the x86 build, nor
 // does it allow us to take the address of labels, so skip these under Windows.
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) && !defined(OS_WIN)
+
 template <size_t Depth>
 void NOINLINE ExpectStackFramePointers(const void** frames,
                                        size_t max_depth) {
@@ -315,7 +317,7 @@
   EXPECT_NE(0u, GetStackEnd());
 }
 
-#endif  // HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_WIN)
+#endif  // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) && !defined(OS_WIN)
 
 }  // namespace debug
 }  // namespace base
diff --git a/src/base/deferred_sequenced_task_runner.cc b/src/base/deferred_sequenced_task_runner.cc
index 3811bda..15367f0 100644
--- a/src/base/deferred_sequenced_task_runner.cc
+++ b/src/base/deferred_sequenced_task_runner.cc
@@ -34,7 +34,7 @@
 
 bool DeferredSequencedTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   AutoLock lock(lock_);
   if (started_) {
@@ -54,7 +54,7 @@
 
 bool DeferredSequencedTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   AutoLock lock(lock_);
   if (started_) {
@@ -69,9 +69,11 @@
 
 void DeferredSequencedTaskRunner::QueueDeferredTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay,
     bool is_non_nestable) {
+  DCHECK(task);
+
   DeferredTask deferred_task;
   deferred_task.posted_from = from_here;
   deferred_task.task = std::move(task);
diff --git a/src/base/deferred_sequenced_task_runner.h b/src/base/deferred_sequenced_task_runner.h
index 94651dd..85f196f 100644
--- a/src/base/deferred_sequenced_task_runner.h
+++ b/src/base/deferred_sequenced_task_runner.h
@@ -28,13 +28,13 @@
 
   // TaskRunner implementation
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
   // SequencedTaskRunner implementation
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   TimeDelta delay) override;
 
   // Start the execution - posts all queued tasks to the target executor. The
@@ -51,7 +51,7 @@
     DeferredTask& operator=(DeferredTask&& other);
 
     tracked_objects::Location posted_from;
-    Closure task;
+    OnceClosure task;
     // The delay this task was initially posted with.
     TimeDelta delay;
     bool is_non_nestable;
@@ -61,7 +61,7 @@
 
   // Creates a |Task| object and adds it to |deferred_tasks_queue_|.
   void QueueDeferredTask(const tracked_objects::Location& from_here,
-                         Closure task,
+                         OnceClosure task,
                          TimeDelta delay,
                          bool is_non_nestable);
 
diff --git a/src/base/files/file.cc b/src/base/files/file.cc
index 1b2224e..6729500 100644
--- a/src/base/files/file.cc
+++ b/src/base/files/file.cc
@@ -71,7 +71,6 @@
 }
 
 File& File::operator=(File&& other) {
-  DCHECK_NE(this, &other);
   Close();
   SetPlatformFile(other.TakePlatformFile());
   tracing_path_ = other.tracing_path_;
diff --git a/src/base/files/file_unittest.cc b/src/base/files/file_unittest.cc
index 66c312b..e179bbb 100644
--- a/src/base/files/file_unittest.cc
+++ b/src/base/files/file_unittest.cc
@@ -105,6 +105,17 @@
   EXPECT_FALSE(base::PathExists(file_path));
 }
 
+TEST(FileTest, SelfSwap) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  FilePath file_path = temp_dir.GetPath().AppendASCII("create_file_1");
+  File file(file_path,
+            base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_DELETE_ON_CLOSE);
+  using namespace std;
+  swap(file, file);
+  EXPECT_TRUE(file.IsValid());
+}
+
 TEST(FileTest, Async) {
   base::ScopedTempDir temp_dir;
   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
diff --git a/src/base/files/file_util_win.cc b/src/base/files/file_util_win.cc
index 65dc5ce..294726a 100644
--- a/src/base/files/file_util_win.cc
+++ b/src/base/files/file_util_win.cc
@@ -20,6 +20,7 @@
 
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
+#include "base/guid.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/metrics/histogram.h"
@@ -340,25 +341,47 @@
 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) {
   ThreadRestrictions::AssertIOAllowed();
 
-  wchar_t temp_name[MAX_PATH + 1];
+  // Use GUID instead of ::GetTempFileName() to generate unique file names.
+  // "Due to the algorithm used to generate file names, GetTempFileName can
+  // perform poorly when creating a large number of files with the same prefix.
+  // In such cases, it is recommended that you construct unique file names based
+  // on GUIDs."
+  // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364991(v=vs.85).aspx
 
-  if (!GetTempFileName(dir.value().c_str(), L"", 0, temp_name)) {
+  FilePath temp_name;
+  bool create_file_success = false;
+
+  // Although it is nearly impossible to get a duplicate name with GUID, we
+  // still use a loop here in case it happens.
+  for (int i = 0; i < 100; ++i) {
+    temp_name = dir.Append(ASCIIToUTF16(base::GenerateGUID()) + L".tmp");
+    File file(temp_name,
+              File::FLAG_CREATE | File::FLAG_READ | File::FLAG_WRITE);
+    if (file.IsValid()) {
+      file.Close();
+      create_file_success = true;
+      break;
+    }
+  }
+
+  if (!create_file_success) {
     DPLOG(WARNING) << "Failed to get temporary file name in "
                    << UTF16ToUTF8(dir.value());
     return false;
   }
 
   wchar_t long_temp_name[MAX_PATH + 1];
-  DWORD long_name_len = GetLongPathName(temp_name, long_temp_name, MAX_PATH);
+  DWORD long_name_len =
+      GetLongPathName(temp_name.value().c_str(), long_temp_name, MAX_PATH);
   if (long_name_len > MAX_PATH || long_name_len == 0) {
     // GetLongPathName() failed, but we still have a temporary file.
-    *temp_file = FilePath(temp_name);
+    *temp_file = std::move(temp_name);
     return true;
   }
 
   FilePath::StringType long_temp_name_str;
   long_temp_name_str.assign(long_temp_name, long_name_len);
-  *temp_file = FilePath(long_temp_name_str);
+  *temp_file = FilePath(std::move(long_temp_name_str));
   return true;
 }
 
diff --git a/src/base/json/json_parser.cc b/src/base/json/json_parser.cc
index c6f6409..a91038c 100644
--- a/src/base/json/json_parser.cc
+++ b/src/base/json/json_parser.cc
@@ -804,7 +804,7 @@
         return nullptr;
       }
       NextNChars(kNullLen - 1);
-      return Value::CreateNullValue();
+      return MakeUnique<Value>();
     }
     default:
       ReportError(JSONReader::JSON_UNEXPECTED_TOKEN, 1);
diff --git a/src/base/json/json_writer_unittest.cc b/src/base/json/json_writer_unittest.cc
index 6cb236f..de4ab61 100644
--- a/src/base/json/json_writer_unittest.cc
+++ b/src/base/json/json_writer_unittest.cc
@@ -15,7 +15,7 @@
   std::string output_js;
 
   // Test null.
-  EXPECT_TRUE(JSONWriter::Write(*Value::CreateNullValue(), &output_js));
+  EXPECT_TRUE(JSONWriter::Write(Value(), &output_js));
   EXPECT_EQ("null", output_js);
 
   // Test empty dict.
diff --git a/src/base/logging.h b/src/base/logging.h
index 7ca018e..1dcb0f7 100644
--- a/src/base/logging.h
+++ b/src/base/logging.h
@@ -642,7 +642,7 @@
         std::is_enum<T>::value,
     void>::type
 MakeCheckOpValueString(std::ostream* os, const T& v) {
-  (*os) << static_cast<typename base::underlying_type<T>::type>(v);
+  (*os) << static_cast<typename std::underlying_type<T>::type>(v);
 }
 
 // We need an explicit overload for std::nullptr_t.
diff --git a/src/base/logging_unittest.cc b/src/base/logging_unittest.cc
index 04f349c..6232397 100644
--- a/src/base/logging_unittest.cc
+++ b/src/base/logging_unittest.cc
@@ -185,7 +185,13 @@
 // Official builds have CHECKs directly call BreakDebugger.
 #if !defined(OFFICIAL_BUILD)
 
-TEST_F(LoggingTest, CheckStreamsAreLazy) {
+// https://crbug.com/709067 tracks test flakiness on iOS.
+#if defined(OS_IOS)
+#define MAYBE_CheckStreamsAreLazy DISABLED_CheckStreamsAreLazy
+#else
+#define MAYBE_CheckStreamsAreLazy CheckStreamsAreLazy
+#endif
+TEST_F(LoggingTest, MAYBE_CheckStreamsAreLazy) {
   MockLogSource mock_log_source, uncalled_mock_log_source;
   EXPECT_CALL(mock_log_source, Log()).Times(8).
       WillRepeatedly(Return("check message"));
@@ -386,7 +392,13 @@
 }
 void DcheckEmptyFunction2() {}
 
-TEST_F(LoggingTest, Dcheck) {
+// https://crbug.com/709067 tracks test flakiness on iOS.
+#if defined(OS_IOS)
+#define MAYBE_Dcheck DISABLED_Dcheck
+#else
+#define MAYBE_Dcheck Dcheck
+#endif
+TEST_F(LoggingTest, MAYBE_Dcheck) {
 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
   // Release build.
   EXPECT_FALSE(DCHECK_IS_ON());
diff --git a/src/base/mac/sdk_forward_declarations.h b/src/base/mac/sdk_forward_declarations.h
index b477347..86fac9c 100644
--- a/src/base/mac/sdk_forward_declarations.h
+++ b/src/base/mac/sdk_forward_declarations.h
@@ -144,6 +144,7 @@
 
 @interface NSView (YosemiteSDK)
 - (BOOL)isAccessibilitySelectorAllowed:(SEL)selector;
+@property(copy) NSString* accessibilityLabel;
 @end
 
 #endif  // MAC_OS_X_VERSION_10_10
diff --git a/src/base/message_loop/incoming_task_queue.cc b/src/base/message_loop/incoming_task_queue.cc
index f0df650..316b5ec 100644
--- a/src/base/message_loop/incoming_task_queue.cc
+++ b/src/base/message_loop/incoming_task_queue.cc
@@ -60,9 +60,10 @@
 
 bool IncomingTaskQueue::AddToIncomingQueue(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay,
     bool nestable) {
+  DCHECK(task);
   DLOG_IF(WARNING,
           delay.InSeconds() > kTaskDelayWarningThresholdInSeconds)
       << "Requesting super-long task delay period of " << delay.InSeconds()
diff --git a/src/base/message_loop/incoming_task_queue.h b/src/base/message_loop/incoming_task_queue.h
index a912dc2..17bea07 100644
--- a/src/base/message_loop/incoming_task_queue.h
+++ b/src/base/message_loop/incoming_task_queue.h
@@ -36,7 +36,7 @@
   // returns false. In all cases, the ownership of |task| is transferred to the
   // called method.
   bool AddToIncomingQueue(const tracked_objects::Location& from_here,
-                          Closure task,
+                          OnceClosure task,
                           TimeDelta delay,
                           bool nestable);
 
diff --git a/src/base/message_loop/message_loop_task_runner.cc b/src/base/message_loop/message_loop_task_runner.cc
index ddfdeb2..aece087 100644
--- a/src/base/message_loop/message_loop_task_runner.cc
+++ b/src/base/message_loop/message_loop_task_runner.cc
@@ -26,7 +26,7 @@
 
 bool MessageLoopTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     base::TimeDelta delay) {
   DCHECK(!task.is_null()) << from_here.ToString();
   return incoming_queue_->AddToIncomingQueue(from_here, std::move(task), delay,
@@ -35,7 +35,7 @@
 
 bool MessageLoopTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     base::TimeDelta delay) {
   DCHECK(!task.is_null()) << from_here.ToString();
   return incoming_queue_->AddToIncomingQueue(from_here, std::move(task), delay,
diff --git a/src/base/message_loop/message_loop_task_runner.h b/src/base/message_loop/message_loop_task_runner.h
index 11ee8a6..99a96a7 100644
--- a/src/base/message_loop/message_loop_task_runner.h
+++ b/src/base/message_loop/message_loop_task_runner.h
@@ -32,10 +32,10 @@
 
   // SingleThreadTaskRunner implementation
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        base::TimeDelta delay) override;
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   base::TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
diff --git a/src/base/metrics/bucket_ranges.h b/src/base/metrics/bucket_ranges.h
index c356195..db82e55 100644
--- a/src/base/metrics/bucket_ranges.h
+++ b/src/base/metrics/bucket_ranges.h
@@ -24,6 +24,7 @@
 
 #include <limits.h>
 
+#include "base/atomicops.h"
 #include "base/base_export.h"
 #include "base/macros.h"
 #include "base/metrics/histogram_base.h"
@@ -58,6 +59,17 @@
   // Return true iff |other| object has same ranges_ as |this| object's ranges_.
   bool Equals(const BucketRanges* other) const;
 
+  // Set and get a reference into persistent memory where this bucket data
+  // can be found (and re-used). These calls are internally atomic with no
+  // safety against overwriting an existing value since though it is wasteful
+  // to have multiple identical persistent records, it is still safe.
+  void set_persistent_reference(uint32_t ref) const {
+    subtle::NoBarrier_Store(&persistent_reference_, ref);
+  }
+  uint32_t persistent_reference() const {
+    return subtle::NoBarrier_Load(&persistent_reference_);
+  }
+
  private:
   // A monotonically increasing list of values which determine which bucket to
   // put a sample into.  For each index, show the smallest sample that can be
@@ -71,6 +83,12 @@
   // noise on UMA dashboard.
   uint32_t checksum_;
 
+  // A reference into a global PersistentMemoryAllocator where the ranges
+  // information is stored. This allows for the record to be created once and
+  // re-used simply by having all histograms with the same ranges use the
+  // same reference.
+  mutable subtle::Atomic32 persistent_reference_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(BucketRanges);
 };
 
diff --git a/src/base/metrics/histogram_functions.h b/src/base/metrics/histogram_functions.h
index 58fc301..5960aca 100644
--- a/src/base/metrics/histogram_functions.h
+++ b/src/base/metrics/histogram_functions.h
@@ -43,7 +43,10 @@
 void UmaHistogramEnumeration(const std::string& name, T sample, T max) {
   static_assert(std::is_enum<T>::value,
                 "Non enum passed to UmaHistogramEnumeration");
-  return UmaHistogramExactLinear(name, static_cast<int>(sample), max);
+  DCHECK_LE(static_cast<uintmax_t>(max), static_cast<uintmax_t>(INT_MAX));
+  DCHECK_LE(static_cast<uintmax_t>(sample), static_cast<uintmax_t>(max));
+  return UmaHistogramExactLinear(name, static_cast<int>(sample),
+                                 static_cast<int>(max));
 }
 
 // For adding boolean sample to histogram.
diff --git a/src/base/metrics/persistent_histogram_allocator.cc b/src/base/metrics/persistent_histogram_allocator.cc
index 5f44b67..b2dae99 100644
--- a/src/base/metrics/persistent_histogram_allocator.cc
+++ b/src/base/metrics/persistent_histogram_allocator.cc
@@ -340,24 +340,49 @@
       return nullptr;
     }
 
-    size_t ranges_count = bucket_count + 1;
-    size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample);
+    // Since the StasticsRecorder keeps a global collection of BucketRanges
+    // objects for re-use, it would be dangerous for one to hold a reference
+    // from a persistent allocator that is not the global one (which is
+    // permanent once set). If this stops being the case, this check can
+    // become an "if" condition beside "!ranges_ref" below and before
+    // set_persistent_reference() farther down.
+    DCHECK_EQ(this, GlobalHistogramAllocator::Get());
+
+    // Re-use an existing BucketRanges persistent allocation if one is known;
+    // otherwise, create one.
+    PersistentMemoryAllocator::Reference ranges_ref =
+        bucket_ranges->persistent_reference();
+    if (!ranges_ref) {
+      size_t ranges_count = bucket_count + 1;
+      size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample);
+      ranges_ref =
+          memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray);
+      if (ranges_ref) {
+        HistogramBase::Sample* ranges_data =
+            memory_allocator_->GetAsArray<HistogramBase::Sample>(
+                ranges_ref, kTypeIdRangesArray, ranges_count);
+        if (ranges_data) {
+          for (size_t i = 0; i < bucket_ranges->size(); ++i)
+            ranges_data[i] = bucket_ranges->range(i);
+          bucket_ranges->set_persistent_reference(ranges_ref);
+        } else {
+          // This should never happen but be tolerant if it does.
+          NOTREACHED();
+          ranges_ref = PersistentMemoryAllocator::kReferenceNull;
+        }
+      }
+    } else {
+      DCHECK_EQ(kTypeIdRangesArray, memory_allocator_->GetType(ranges_ref));
+    }
+
     PersistentMemoryAllocator::Reference counts_ref =
         memory_allocator_->Allocate(counts_bytes, kTypeIdCountsArray);
-    PersistentMemoryAllocator::Reference ranges_ref =
-        memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray);
-    HistogramBase::Sample* ranges_data =
-        memory_allocator_->GetAsArray<HistogramBase::Sample>(
-            ranges_ref, kTypeIdRangesArray, ranges_count);
 
     // Only continue here if all allocations were successful. If they weren't,
     // there is no way to free the space but that's not really a problem since
     // the allocations only fail because the space is full or corrupt and so
     // any future attempts will also fail.
-    if (counts_ref && ranges_data && histogram_data) {
-      for (size_t i = 0; i < bucket_ranges->size(); ++i)
-        ranges_data[i] = bucket_ranges->range(i);
-
+    if (counts_ref && ranges_ref && histogram_data) {
       histogram_data->minimum = minimum;
       histogram_data->maximum = maximum;
       // |bucket_count| must fit within 32-bits or the allocation of the counts
diff --git a/src/base/metrics/persistent_histogram_allocator_unittest.cc b/src/base/metrics/persistent_histogram_allocator_unittest.cc
index df250a3..cfd20a8 100644
--- a/src/base/metrics/persistent_histogram_allocator_unittest.cc
+++ b/src/base/metrics/persistent_histogram_allocator_unittest.cc
@@ -281,4 +281,41 @@
   EXPECT_EQ(1, snapshot->GetCount(7));
 }
 
+TEST_F(PersistentHistogramAllocatorTest, RangesDeDuplication) {
+  // This corresponds to the "ranges_ref" field of the PersistentHistogramData
+  // structure defined (privately) inside persistent_histogram_allocator.cc.
+  const int kRangesRefIndex = 5;
+
+  // Create two histograms with the same ranges.
+  HistogramBase* histogram1 =
+      Histogram::FactoryGet("TestHistogram1", 1, 1000, 10, 0);
+  HistogramBase* histogram2 =
+      Histogram::FactoryGet("TestHistogram2", 1, 1000, 10, 0);
+  const uint32_t ranges_ref = static_cast<Histogram*>(histogram1)
+                                  ->bucket_ranges()
+                                  ->persistent_reference();
+  ASSERT_NE(0U, ranges_ref);
+  EXPECT_EQ(ranges_ref, static_cast<Histogram*>(histogram2)
+                            ->bucket_ranges()
+                            ->persistent_reference());
+
+  // Make sure that the persistent data record is also correct. Two histograms
+  // will be fetched; other allocations are not "iterable".
+  PersistentMemoryAllocator::Iterator iter(allocator_);
+  uint32_t type;
+  uint32_t ref1 = iter.GetNext(&type);
+  uint32_t ref2 = iter.GetNext(&type);
+  EXPECT_EQ(0U, iter.GetNext(&type));
+  EXPECT_NE(0U, ref1);
+  EXPECT_NE(0U, ref2);
+  EXPECT_NE(ref1, ref2);
+
+  uint32_t* data1 =
+      allocator_->GetAsArray<uint32_t>(ref1, 0, kRangesRefIndex + 1);
+  uint32_t* data2 =
+      allocator_->GetAsArray<uint32_t>(ref2, 0, kRangesRefIndex + 1);
+  EXPECT_EQ(ranges_ref, data1[kRangesRefIndex]);
+  EXPECT_EQ(ranges_ref, data2[kRangesRefIndex]);
+}
+
 }  // namespace base
diff --git a/src/base/metrics/statistics_recorder.cc b/src/base/metrics/statistics_recorder.cc
index ba2101b..409e637 100644
--- a/src/base/metrics/statistics_recorder.cc
+++ b/src/base/metrics/statistics_recorder.cc
@@ -431,8 +431,24 @@
 
 // static
 void StatisticsRecorder::ForgetHistogramForTesting(base::StringPiece name) {
-  if (histograms_)
-    histograms_->erase(name);
+  if (!histograms_)
+    return;
+
+  HistogramMap::iterator found = histograms_->find(name);
+  if (found == histograms_->end())
+    return;
+
+  HistogramBase* base = found->second;
+  if (base->GetHistogramType() != SPARSE_HISTOGRAM) {
+    // When forgetting a histogram, it's likely that other information is
+    // also becoming invalid. Clear the persistent reference that may no
+    // longer be valid. There's no danger in this as, at worst, duplicates
+    // will be created in persistent memory.
+    Histogram* histogram = static_cast<Histogram*>(base);
+    histogram->bucket_ranges()->set_persistent_reference(0);
+  }
+
+  histograms_->erase(found);
 }
 
 // static
diff --git a/src/base/numerics/safe_conversions_impl.h b/src/base/numerics/safe_conversions_impl.h
index 24357fd..020cac0 100644
--- a/src/base/numerics/safe_conversions_impl.h
+++ b/src/base/numerics/safe_conversions_impl.h
@@ -517,38 +517,16 @@
   static const bool is_contained = false;
 };
 
-// This hacks around libstdc++ 4.6 missing stuff in type_traits.
-#if defined(__GLIBCXX__)
-#define PRIV_GLIBCXX_4_7_0 20120322
-#define PRIV_GLIBCXX_4_5_4 20120702
-#define PRIV_GLIBCXX_4_6_4 20121127
-#if (__GLIBCXX__ < PRIV_GLIBCXX_4_7_0 || __GLIBCXX__ == PRIV_GLIBCXX_4_5_4 || \
-     __GLIBCXX__ == PRIV_GLIBCXX_4_6_4)
-#define PRIV_USE_FALLBACKS_FOR_OLD_GLIBCXX
-#undef PRIV_GLIBCXX_4_7_0
-#undef PRIV_GLIBCXX_4_5_4
-#undef PRIV_GLIBCXX_4_6_4
-#endif
-#endif
-
 // Extracts the underlying type from an enum.
 template <typename T, bool is_enum = std::is_enum<T>::value>
 struct ArithmeticOrUnderlyingEnum;
 
 template <typename T>
 struct ArithmeticOrUnderlyingEnum<T, true> {
-#if defined(PRIV_USE_FALLBACKS_FOR_OLD_GLIBCXX)
-  using type = __underlying_type(T);
-#else
   using type = typename std::underlying_type<T>::type;
-#endif
   static const bool value = std::is_arithmetic<type>::value;
 };
 
-#if defined(PRIV_USE_FALLBACKS_FOR_OLD_GLIBCXX)
-#undef PRIV_USE_FALLBACKS_FOR_OLD_GLIBCXX
-#endif
-
 template <typename T>
 struct ArithmeticOrUnderlyingEnum<T, false> {
   using type = T;
diff --git a/src/base/optional.h b/src/base/optional.h
index cf65ad7..2be2f82 100644
--- a/src/base/optional.h
+++ b/src/base/optional.h
@@ -8,7 +8,6 @@
 #include <type_traits>
 
 #include "base/logging.h"
-#include "base/template_util.h"
 
 namespace base {
 
@@ -32,7 +31,7 @@
 
 namespace internal {
 
-template <typename T, bool = base::is_trivially_destructible<T>::value>
+template <typename T, bool = std::is_trivially_destructible<T>::value>
 struct OptionalStorage {
   // Initializing |empty_| here instead of using default member initializing
   // to avoid errors in g++ 4.8.
diff --git a/src/base/optional_unittest.cc b/src/base/optional_unittest.cc
index 83025e8..8b9a1ae 100644
--- a/src/base/optional_unittest.cc
+++ b/src/base/optional_unittest.cc
@@ -89,11 +89,11 @@
 
 }  // anonymous namespace
 
-static_assert(is_trivially_destructible<Optional<int>>::value,
+static_assert(std::is_trivially_destructible<Optional<int>>::value,
               "OptionalIsTriviallyDestructible");
 
 static_assert(
-    !is_trivially_destructible<Optional<NonTriviallyDestructible>>::value,
+    !std::is_trivially_destructible<Optional<NonTriviallyDestructible>>::value,
     "OptionalIsTriviallyDestructible");
 
 TEST(OptionalTest, DefaultConstructor) {
diff --git a/src/base/pickle.cc b/src/base/pickle.cc
index 02f39b5..7c8420b 100644
--- a/src/base/pickle.cc
+++ b/src/base/pickle.cc
@@ -308,7 +308,6 @@
 
 Pickle& Pickle::operator=(const Pickle& other) {
   if (this == &other) {
-    NOTREACHED();
     return *this;
   }
   if (capacity_after_header_ == kCapacityReadOnly) {
diff --git a/src/base/posix/unix_domain_socket_linux.cc b/src/base/posix/unix_domain_socket_linux.cc
index 8b3094e..6b445c6 100644
--- a/src/base/posix/unix_domain_socket_linux.cc
+++ b/src/base/posix/unix_domain_socket_linux.cc
@@ -26,10 +26,7 @@
 const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
 
 #if !defined(OS_NACL_NONSFI)
-// Creates a connected pair of UNIX-domain SOCK_SEQPACKET sockets, and passes
-// ownership of the newly allocated file descriptors to |one| and |two|.
-// Returns true on success.
-static bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
   int raw_socks[2];
   if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, raw_socks) == -1)
     return false;
diff --git a/src/base/posix/unix_domain_socket_linux.h b/src/base/posix/unix_domain_socket_linux.h
index 2ba739e..84e7d16 100644
--- a/src/base/posix/unix_domain_socket_linux.h
+++ b/src/base/posix/unix_domain_socket_linux.h
@@ -19,6 +19,13 @@
 
 class Pickle;
 
+#if !defined(OS_NACL_NONSFI)
+// Creates a connected pair of UNIX-domain SOCK_SEQPACKET sockets, and passes
+// ownership of the newly allocated file descriptors to |one| and |two|.
+// Returns true on success.
+bool BASE_EXPORT CreateSocketPair(ScopedFD* one, ScopedFD* two);
+#endif
+
 class BASE_EXPORT UnixDomainSocket {
  public:
   // Maximum number of file descriptors that can be read by RecvMsg().
diff --git a/src/base/post_task_and_reply_with_result_internal.h b/src/base/post_task_and_reply_with_result_internal.h
index 1456129..6f50de8 100644
--- a/src/base/post_task_and_reply_with_result_internal.h
+++ b/src/base/post_task_and_reply_with_result_internal.h
@@ -16,16 +16,15 @@
 // Adapts a function that produces a result via a return value to
 // one that returns via an output parameter.
 template <typename ReturnType>
-void ReturnAsParamAdapter(const Callback<ReturnType(void)>& func,
-                          ReturnType* result) {
-  *result = func.Run();
+void ReturnAsParamAdapter(OnceCallback<ReturnType()> func, ReturnType* result) {
+  *result = std::move(func).Run();
 }
 
 // Adapts a T* result to a callblack that expects a T.
 template <typename TaskReturnType, typename ReplyArgType>
-void ReplyAdapter(const Callback<void(ReplyArgType)>& callback,
+void ReplyAdapter(OnceCallback<void(ReplyArgType)> callback,
                   TaskReturnType* result) {
-  callback.Run(std::move(*result));
+  std::move(callback).Run(std::move(*result));
 }
 
 }  // namespace internal
diff --git a/src/base/process/process_metrics.h b/src/base/process/process_metrics.h
index d247366..1562e7b 100644
--- a/src/base/process/process_metrics.h
+++ b/src/base/process/process_metrics.h
@@ -67,8 +67,12 @@
 // shareable:      0
 // swapped         Pages swapped out to zram.
 //
-// On OS X: TODO(thakis): Revise.
-// priv:           Memory.
+// On macOS:
+// priv:           Resident size (RSS) including shared memory. Warning: This
+//                 does not include compressed size and does not always
+//                 accurately account for shared memory due to things like
+//                 copy-on-write. TODO(erikchen): Revamp this with something
+//                 more accurate.
 // shared:         0
 // shareable:      0
 //
diff --git a/src/base/process/process_metrics_mac.cc b/src/base/process/process_metrics_mac.cc
index 6366ac8..be4107e 100644
--- a/src/base/process/process_metrics_mac.cc
+++ b/src/base/process/process_metrics_mac.cc
@@ -19,23 +19,6 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/sys_info.h"
 
-#if !defined(TASK_POWER_INFO)
-// Doesn't exist in the 10.6 or 10.7 SDKs.
-#define TASK_POWER_INFO        21
-struct task_power_info {
-        uint64_t                total_user;
-        uint64_t                total_system;
-        uint64_t                task_interrupt_wakeups;
-        uint64_t                task_platform_idle_wakeups;
-        uint64_t                task_timer_wakeups_bin_1;
-        uint64_t                task_timer_wakeups_bin_2;
-};
-typedef struct task_power_info        task_power_info_data_t;
-typedef struct task_power_info        *task_power_info_t;
-#define TASK_POWER_INFO_COUNT        ((mach_msg_type_number_t) \
-                (sizeof (task_power_info_data_t) / sizeof (natural_t)))
-#endif
-
 namespace base {
 
 namespace {
diff --git a/src/base/process/process_posix.cc b/src/base/process/process_posix.cc
index 9b94891..bbb342c 100644
--- a/src/base/process/process_posix.cc
+++ b/src/base/process/process_posix.cc
@@ -225,7 +225,6 @@
 }
 
 Process& Process::operator=(Process&& other) {
-  DCHECK_NE(this, &other);
   process_ = other.process_;
   other.Close();
   return *this;
diff --git a/src/base/profiler/native_stack_sampler_mac.cc b/src/base/profiler/native_stack_sampler_mac.cc
deleted file mode 100644
index 6eb655c..0000000
--- a/src/base/profiler/native_stack_sampler_mac.cc
+++ /dev/null
@@ -1,471 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/profiler/native_stack_sampler.h"
-
-#include <dlfcn.h>
-#include <libkern/OSByteOrder.h>
-#include <libunwind.h>
-#include <mach-o/swap.h>
-#include <mach/kern_return.h>
-#include <mach/mach.h>
-#include <mach/thread_act.h>
-#include <pthread.h>
-#include <sys/resource.h>
-#include <sys/syslimits.h>
-
-#include <algorithm>
-#include <map>
-#include <memory>
-
-#include "base/logging.h"
-#include "base/mac/mach_logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_number_conversions.h"
-
-namespace base {
-
-namespace {
-
-// Miscellaneous --------------------------------------------------------------
-
-size_t StackCopyBufferSize() {
-  static size_t stack_size = 0;
-  if (stack_size)
-    return stack_size;
-
-  // In platform_thread_mac's GetDefaultThreadStackSize(), RLIMIT_STACK is used
-  // for all stacks, not just the main thread's, so it is good for use here.
-  struct rlimit stack_rlimit;
-  if (getrlimit(RLIMIT_STACK, &stack_rlimit) == 0 &&
-      stack_rlimit.rlim_cur != RLIM_INFINITY) {
-    stack_size = stack_rlimit.rlim_cur;
-    return stack_size;
-  }
-
-  // If getrlimit somehow fails, return the default macOS main thread stack size
-  // of 8 MB (DFLSSIZ in <i386/vmparam.h>) with extra wiggle room.
-  return 12 * 1024 * 1024;
-}
-
-// Stack walking --------------------------------------------------------------
-
-// Fills |state| with |target_thread|'s context.
-//
-// Note that this is called while a thread is suspended. Make very very sure
-// that no shared resources (e.g. memory allocators) are used for the duration
-// of this function.
-bool GetThreadState(thread_act_t target_thread, x86_thread_state64_t* state) {
-  mach_msg_type_number_t count =
-      static_cast<mach_msg_type_number_t>(x86_THREAD_STATE64_COUNT);
-  return thread_get_state(target_thread, x86_THREAD_STATE64,
-                          reinterpret_cast<thread_state_t>(state),
-                          &count) == KERN_SUCCESS;
-}
-
-// If the value at |pointer| points to the original stack, rewrites it to point
-// to the corresponding location in the copied stack.
-//
-// Note that this is called while a thread is suspended. Make very very sure
-// that no shared resources (e.g. memory allocators) are used for the duration
-// of this function.
-uintptr_t RewritePointerIfInOriginalStack(
-    const uintptr_t* original_stack_bottom,
-    const uintptr_t* original_stack_top,
-    uintptr_t* stack_copy_bottom,
-    uintptr_t pointer) {
-  uintptr_t original_stack_bottom_int =
-      reinterpret_cast<uintptr_t>(original_stack_bottom);
-  uintptr_t original_stack_top_int =
-      reinterpret_cast<uintptr_t>(original_stack_top);
-  uintptr_t stack_copy_bottom_int =
-      reinterpret_cast<uintptr_t>(stack_copy_bottom);
-
-  if ((pointer < original_stack_bottom_int) ||
-      (pointer >= original_stack_top_int)) {
-    return pointer;
-  }
-
-  return stack_copy_bottom_int + (pointer - original_stack_bottom_int);
-}
-
-// Copies the stack to a buffer while rewriting possible pointers to locations
-// within the stack to point to the corresponding locations in the copy. This is
-// necessary to handle stack frames with dynamic stack allocation, where a
-// pointer to the beginning of the dynamic allocation area is stored on the
-// stack and/or in a non-volatile register.
-//
-// Eager rewriting of anything that looks like a pointer to the stack, as done
-// in this function, does not adversely affect the stack unwinding. The only
-// other values on the stack the unwinding depends on are return addresses,
-// which should not point within the stack memory. The rewriting is guaranteed
-// to catch all pointers because the stacks are guaranteed by the ABI to be
-// sizeof(void*) aligned.
-//
-// Note that this is called while a thread is suspended. Make very very sure
-// that no shared resources (e.g. memory allocators) are used for the duration
-// of this function.
-void CopyStackAndRewritePointers(uintptr_t* stack_copy_bottom,
-                                 const uintptr_t* original_stack_bottom,
-                                 const uintptr_t* original_stack_top,
-                                 x86_thread_state64_t* thread_state)
-    NO_SANITIZE("address") {
-  size_t count = original_stack_top - original_stack_bottom;
-  for (size_t pos = 0; pos < count; ++pos) {
-    stack_copy_bottom[pos] = RewritePointerIfInOriginalStack(
-        original_stack_bottom, original_stack_top, stack_copy_bottom,
-        original_stack_bottom[pos]);
-  }
-
-  uint64_t* rewrite_registers[] = {&thread_state->__rbx, &thread_state->__rbp,
-                                   &thread_state->__rsp, &thread_state->__r12,
-                                   &thread_state->__r13, &thread_state->__r14,
-                                   &thread_state->__r15};
-  for (auto* reg : rewrite_registers) {
-    *reg = RewritePointerIfInOriginalStack(
-        original_stack_bottom, original_stack_top, stack_copy_bottom, *reg);
-  }
-}
-
-// Walks the stack represented by |unwind_context|, calling back to the provided
-// lambda for each frame. Returns false if an error occurred, otherwise returns
-// true.
-template <typename StackFrameCallback>
-bool WalkStackFromContext(unw_context_t* unwind_context,
-                          size_t* frame_count,
-                          const StackFrameCallback& callback) {
-  unw_cursor_t unwind_cursor;
-  unw_init_local(&unwind_cursor, unwind_context);
-
-  int step_result;
-  unw_word_t ip;
-  do {
-    ++(*frame_count);
-    unw_get_reg(&unwind_cursor, UNW_REG_IP, &ip);
-
-    callback(static_cast<uintptr_t>(ip));
-
-    step_result = unw_step(&unwind_cursor);
-  } while (step_result > 0);
-
-  if (step_result != 0)
-    return false;
-
-  return true;
-}
-
-bool IsIPInValidImage(unw_context_t* unwind_context) {
-  unw_cursor_t unwind_cursor;
-  unw_init_local(&unwind_cursor, unwind_context);
-  unw_proc_info_t proc_info;
-  unw_get_proc_info(&unwind_cursor, &proc_info);
-  return proc_info.extra != 0;
-}
-
-// Walks the stack represented by |thread_state|, calling back to the provided
-// lambda for each frame.
-template <typename StackFrameCallback>
-void WalkStack(const x86_thread_state64_t& thread_state,
-               uintptr_t stack_top,
-               const StackFrameCallback& callback) {
-  size_t frame_count = 0;
-  // This uses libunwind to walk the stack. libunwind is designed to be used for
-  // a thread to walk its own stack. This creates two problems.
-
-  // Problem 1: There is no official way to create a unw_context other than to
-  // create it from the current state of the current thread's stack. To get
-  // around this, forge a context. A unw_context is just a copy of the 16 main
-  // registers followed by the instruction pointer, nothing more.
-  // Coincidentally, the first 17 items of the x86_thread_state64_t type are
-  // exactly those registers in exactly the same order, so just bulk copy them
-  // over.
-  unw_context_t unwind_context;
-  memcpy(&unwind_context, &thread_state, sizeof(uintptr_t) * 17);
-  bool result = WalkStackFromContext(&unwind_context, &frame_count, callback);
-
-  if (!result)
-    return;
-
-  if (frame_count == 1) {
-    // Problem 2: Because libunwind is designed to be triggered by user code on
-    // their own thread, if it hits a library that has no unwind info for the
-    // function that is being executed, it just stops. This isn't a problem in
-    // the normal case, but in this case, it's quite possible that the stack
-    // being walked is stopped in a function that bridges to the kernel and thus
-    // is missing the unwind info.
-    //
-    // If so, cheat by scanning the stack and trying again. Only do this if the
-    // first time using libunwind fails after one frame.
-    bool ip_in_valid_image = false;
-    auto& rsp = unwind_context.data[7];
-    auto& rip = unwind_context.data[16];
-    const uintptr_t kMaxScanDepthWords = 16;
-    uintptr_t scan_limit = std::min<uintptr_t>(
-        stack_top, rsp + kMaxScanDepthWords * sizeof(uintptr_t));
-    do {
-      rip = *reinterpret_cast<uintptr_t*>(rsp);  // rip = *rsp
-      rsp += sizeof(uintptr_t);                  // rsp++
-      if (rsp % sizeof(uintptr_t)) {
-        // The "stack pointer" isn't aligned. Just give up.
-        return;
-      }
-
-      ip_in_valid_image = IsIPInValidImage(&unwind_context);
-    } while (!ip_in_valid_image && rsp < scan_limit);
-
-    if (ip_in_valid_image)
-      WalkStackFromContext(&unwind_context, &frame_count, callback);
-  }
-}
-
-// Module identifiers ---------------------------------------------------------
-
-// Returns the hex encoding of a 16-byte ID for the binary loaded at
-// |module_addr|. Returns an empty string if the UUID cannot be found at
-// |module_addr|.
-std::string GetUniqueId(const void* module_addr) {
-  const mach_header_64* mach_header =
-      reinterpret_cast<const mach_header_64*>(module_addr);
-  DCHECK_EQ(MH_MAGIC_64, mach_header->magic);
-
-  size_t offset = sizeof(mach_header_64);
-  size_t offset_limit = sizeof(mach_header_64) + mach_header->sizeofcmds;
-  for (uint32_t i = 0; (i < mach_header->ncmds) &&
-                       (offset + sizeof(load_command) < offset_limit);
-       ++i) {
-    const load_command* current_cmd = reinterpret_cast<const load_command*>(
-        reinterpret_cast<const uint8_t*>(mach_header) + offset);
-
-    if (offset + current_cmd->cmdsize > offset_limit) {
-      // This command runs off the end of the command list. This is malformed.
-      return std::string();
-    }
-
-    if (current_cmd->cmd == LC_UUID) {
-      if (current_cmd->cmdsize < sizeof(uuid_command)) {
-        // This "UUID command" is too small. This is malformed.
-        return std::string();
-      }
-
-      const uuid_command* uuid_cmd =
-          reinterpret_cast<const uuid_command*>(current_cmd);
-      static_assert(sizeof(uuid_cmd->uuid) == sizeof(uuid_t),
-                    "UUID field of UUID command should be 16 bytes.");
-      return HexEncode(&uuid_cmd->uuid, sizeof(uuid_cmd->uuid));
-    }
-    offset += current_cmd->cmdsize;
-  }
-  return std::string();
-}
-
-// Gets the index for the Module containing |instruction_pointer| in
-// |modules|, adding it if it's not already present. Returns
-// StackSamplingProfiler::Frame::kUnknownModuleIndex if no Module can be
-// determined for |module|.
-size_t GetModuleIndex(const uintptr_t instruction_pointer,
-                      std::vector<StackSamplingProfiler::Module>* modules,
-                      std::map<const void*, size_t>* profile_module_index) {
-  Dl_info inf;
-  if (!dladdr(reinterpret_cast<const void*>(instruction_pointer), &inf))
-    return StackSamplingProfiler::Frame::kUnknownModuleIndex;
-
-  auto module_index = profile_module_index->find(inf.dli_fbase);
-  if (module_index == profile_module_index->end()) {
-    StackSamplingProfiler::Module module(
-        reinterpret_cast<uintptr_t>(inf.dli_fbase), GetUniqueId(inf.dli_fbase),
-        base::FilePath(inf.dli_fname));
-    modules->push_back(module);
-    module_index =
-        profile_module_index
-            ->insert(std::make_pair(inf.dli_fbase, modules->size() - 1))
-            .first;
-  }
-  return module_index->second;
-}
-
-// ScopedSuspendThread --------------------------------------------------------
-
-// Suspends a thread for the lifetime of the object.
-class ScopedSuspendThread {
- public:
-  explicit ScopedSuspendThread(mach_port_t thread_port)
-      : thread_port_(thread_suspend(thread_port) == KERN_SUCCESS
-                         ? thread_port
-                         : MACH_PORT_NULL) {}
-
-  ~ScopedSuspendThread() {
-    if (!was_successful())
-      return;
-
-    kern_return_t kr = thread_resume(thread_port_);
-    MACH_CHECK(kr == KERN_SUCCESS, kr) << "thread_resume";
-  }
-
-  bool was_successful() const { return thread_port_ != MACH_PORT_NULL; }
-
- private:
-  mach_port_t thread_port_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedSuspendThread);
-};
-
-// NativeStackSamplerMac ------------------------------------------------------
-
-class NativeStackSamplerMac : public NativeStackSampler {
- public:
-  NativeStackSamplerMac(mach_port_t thread_port,
-                        AnnotateCallback annotator,
-                        NativeStackSamplerTestDelegate* test_delegate);
-  ~NativeStackSamplerMac() override;
-
-  // StackSamplingProfiler::NativeStackSampler:
-  void ProfileRecordingStarting(
-      std::vector<StackSamplingProfiler::Module>* modules) override;
-  void RecordStackSample(StackSamplingProfiler::Sample* sample) override;
-  void ProfileRecordingStopped() override;
-
- private:
-  // Suspends the thread with |thread_port_|, copies its stack and resumes the
-  // thread, then records the stack frames and associated modules into |sample|.
-  void SuspendThreadAndRecordStack(StackSamplingProfiler::Sample* sample);
-
-  // Weak reference: Mach port for thread being profiled.
-  mach_port_t thread_port_;
-
-  const AnnotateCallback annotator_;
-
-  NativeStackSamplerTestDelegate* const test_delegate_;
-
-  // The stack base address corresponding to |thread_handle_|.
-  const void* const thread_stack_base_address_;
-
-  // The size of the |stack_copy_buffer_|.
-  const size_t stack_copy_buffer_size_;
-
-  // Buffer to use for copies of the stack. We use the same buffer for all the
-  // samples to avoid the overhead of multiple allocations and frees.
-  const std::unique_ptr<unsigned char[]> stack_copy_buffer_;
-
-  // Weak. Points to the modules associated with the profile being recorded
-  // between ProfileRecordingStarting() and ProfileRecordingStopped().
-  std::vector<StackSamplingProfiler::Module>* current_modules_ = nullptr;
-
-  // Maps a module's base address to the corresponding Module's index within
-  // current_modules_.
-  std::map<const void*, size_t> profile_module_index_;
-
-  DISALLOW_COPY_AND_ASSIGN(NativeStackSamplerMac);
-};
-
-NativeStackSamplerMac::NativeStackSamplerMac(
-    mach_port_t thread_port,
-    AnnotateCallback annotator,
-    NativeStackSamplerTestDelegate* test_delegate)
-    : thread_port_(thread_port),
-      annotator_(annotator),
-      test_delegate_(test_delegate),
-      thread_stack_base_address_(
-          pthread_get_stackaddr_np(pthread_from_mach_thread_np(thread_port))),
-      stack_copy_buffer_size_(StackCopyBufferSize()),
-      stack_copy_buffer_(new unsigned char[stack_copy_buffer_size_]) {
-  DCHECK(annotator_);
-
-  // This class suspends threads, and those threads might be suspended in dyld.
-  // Therefore, for all the system functions that might be linked in dynamically
-  // that are used while threads are suspended, make calls to them to make sure
-  // that they are linked up.
-  x86_thread_state64_t thread_state;
-  GetThreadState(thread_port_, &thread_state);
-}
-
-NativeStackSamplerMac::~NativeStackSamplerMac() {}
-
-void NativeStackSamplerMac::ProfileRecordingStarting(
-    std::vector<StackSamplingProfiler::Module>* modules) {
-  current_modules_ = modules;
-  profile_module_index_.clear();
-}
-
-void NativeStackSamplerMac::RecordStackSample(
-    StackSamplingProfiler::Sample* sample) {
-  DCHECK(current_modules_);
-
-  SuspendThreadAndRecordStack(sample);
-}
-
-void NativeStackSamplerMac::ProfileRecordingStopped() {
-  current_modules_ = nullptr;
-}
-
-void NativeStackSamplerMac::SuspendThreadAndRecordStack(
-    StackSamplingProfiler::Sample* sample) {
-  x86_thread_state64_t thread_state;
-
-  // Copy the stack.
-
-  uintptr_t new_stack_top = 0;
-  {
-    // IMPORTANT NOTE: Do not do ANYTHING in this in this scope that might
-    // allocate memory, including indirectly via use of DCHECK/CHECK or other
-    // logging statements. Otherwise this code can deadlock on heap locks in the
-    // default heap acquired by the target thread before it was suspended.
-    ScopedSuspendThread suspend_thread(thread_port_);
-    if (!suspend_thread.was_successful())
-      return;
-
-    if (!GetThreadState(thread_port_, &thread_state))
-      return;
-    uintptr_t stack_top =
-        reinterpret_cast<uintptr_t>(thread_stack_base_address_);
-    uintptr_t stack_bottom = thread_state.__rsp;
-    if (stack_bottom >= stack_top)
-      return;
-    uintptr_t stack_size = stack_top - stack_bottom;
-
-    if (stack_size > stack_copy_buffer_size_)
-      return;
-
-    (*annotator_)(sample);
-
-    CopyStackAndRewritePointers(
-        reinterpret_cast<uintptr_t*>(stack_copy_buffer_.get()),
-        reinterpret_cast<uintptr_t*>(stack_bottom),
-        reinterpret_cast<uintptr_t*>(stack_top), &thread_state);
-
-    new_stack_top =
-        reinterpret_cast<uintptr_t>(stack_copy_buffer_.get()) + stack_size;
-  }  // ScopedSuspendThread
-
-  if (test_delegate_)
-    test_delegate_->OnPreStackWalk();
-
-  // Walk the stack and record it.
-
-  // Reserve enough memory for most stacks, to avoid repeated allocations.
-  // Approximately 99.9% of recorded stacks are 128 frames or fewer.
-  sample->frames.reserve(128);
-
-  auto* current_modules = current_modules_;
-  auto* profile_module_index = &profile_module_index_;
-  WalkStack(
-      thread_state, new_stack_top,
-      [sample, current_modules, profile_module_index](uintptr_t frame_ip) {
-        sample->frames.push_back(StackSamplingProfiler::Frame(
-            frame_ip,
-            GetModuleIndex(frame_ip, current_modules, profile_module_index)));
-      });
-}
-
-}  // namespace
-
-std::unique_ptr<NativeStackSampler> NativeStackSampler::Create(
-    PlatformThreadId thread_id,
-    AnnotateCallback annotator,
-    NativeStackSamplerTestDelegate* test_delegate) {
-  return base::MakeUnique<NativeStackSamplerMac>(thread_id, annotator,
-                                                 test_delegate);
-}
-
-}  // namespace base
diff --git a/src/base/profiler/native_stack_sampler_win.cc b/src/base/profiler/native_stack_sampler_win.cc
index d320fea..e160510 100644
--- a/src/base/profiler/native_stack_sampler_win.cc
+++ b/src/base/profiler/native_stack_sampler_win.cc
@@ -398,12 +398,14 @@
   void ProfileRecordingStopped() override;
 
  private:
-  // Intended to hold the largest stack used by Chrome. The default Win32
-  // reserved stack size is 1 MB and Chrome Windows threads currently always
-  // use the default, but this allows for expansion if it occurs. The size
-  // beyond the actual stack size consists of unallocated virtual memory pages
-  // so carries little cost (just a bit of wasted address space).
-  static constexpr size_t kStackCopyBufferSize = 2 * 1024 * 1024;
+  enum {
+    // Intended to hold the largest stack used by Chrome. The default Win32
+    // reserved stack size is 1 MB and Chrome Windows threads currently always
+    // use the default, but this allows for expansion if it occurs. The size
+    // beyond the actual stack size consists of unallocated virtual memory pages
+    // so carries little cost (just a bit of wasted address space).
+    kStackCopyBufferSize = 2 * 1024 * 1024
+  };
 
   // Attempts to query the module filename, base address, and id for
   // |module_handle|, and store them in |module|. Returns true if it succeeded.
@@ -472,6 +474,9 @@
     StackSamplingProfiler::Sample* sample) {
   DCHECK(current_modules_);
 
+  if (!stack_copy_buffer_)
+    return;
+
   std::vector<RecordedFrame> stack;
   SuspendThreadAndRecordStack(thread_handle_.Get(), thread_stack_base_address_,
                               stack_copy_buffer_.get(), kStackCopyBufferSize,
diff --git a/src/base/profiler/stack_sampling_profiler_unittest.cc b/src/base/profiler/stack_sampling_profiler_unittest.cc
index e7e4515..0b300d5 100644
--- a/src/base/profiler/stack_sampling_profiler_unittest.cc
+++ b/src/base/profiler/stack_sampling_profiler_unittest.cc
@@ -12,7 +12,6 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
-#include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
@@ -39,8 +38,8 @@
 #endif
 
 // STACK_SAMPLING_PROFILER_SUPPORTED is used to conditionally enable the tests
-// below for supported platforms (currently Win x64 and Mac x64).
-#if defined(_WIN64) || (defined(OS_MACOSX) && !defined(OS_IOS))
+// below for supported platforms (currently Win x64).
+#if defined(_WIN64)
 #define STACK_SAMPLING_PROFILER_SUPPORTED 1
 #endif
 
@@ -307,8 +306,6 @@
          ::GetLastError() != ERROR_MOD_NOT_FOUND) {
     PlatformThread::Sleep(TimeDelta::FromMilliseconds(1));
   }
-#elif defined(OS_MACOSX)
-// Unloading a library on the Mac is synchronous.
 #else
   NOTIMPLEMENTED();
 #endif
@@ -545,7 +542,7 @@
         << "Stack:\n"
         << FormatSampleForDiagnosticOutput(sample, profile.modules);
   } else {
-    // We didn't wait for the asynchronous unloading to complete, so the results
+    // We didn't wait for the asynchonous unloading to complete, so the results
     // are non-deterministic: if the library finished unloading we should have
     // the same stack as |wait_until_unloaded|, if not we should have the full
     // stack. The important thing is that we should not crash.
@@ -625,8 +622,7 @@
       << FormatSampleForDiagnosticOutput(sample, profile.modules);
   FilePath executable_path;
   EXPECT_TRUE(PathService::Get(FILE_EXE, &executable_path));
-  EXPECT_EQ(executable_path,
-            MakeAbsoluteFilePath(profile.modules[loc->module_index].filename));
+  EXPECT_EQ(executable_path, profile.modules[loc->module_index].filename);
 }
 
 // Checks that annotations are recorded in samples.
@@ -1007,8 +1003,7 @@
 
 // Checks that a stack that runs through a library that is unloading produces a
 // stack, and doesn't crash.
-// Unloading is synchronous on the Mac, so this test is inapplicable.
-#if defined(STACK_SAMPLING_PROFILER_SUPPORTED) && !defined(OS_MACOSX)
+#if defined(STACK_SAMPLING_PROFILER_SUPPORTED)
 #define MAYBE_UnloadingLibrary UnloadingLibrary
 #else
 #define MAYBE_UnloadingLibrary DISABLED_UnloadingLibrary
diff --git a/src/base/sequenced_task_runner.cc b/src/base/sequenced_task_runner.cc
index fa19ae5..4c367cb 100644
--- a/src/base/sequenced_task_runner.cc
+++ b/src/base/sequenced_task_runner.cc
@@ -12,7 +12,7 @@
 
 bool SequencedTaskRunner::PostNonNestableTask(
     const tracked_objects::Location& from_here,
-    Closure task) {
+    OnceClosure task) {
   return PostNonNestableDelayedTask(from_here, std::move(task),
                                     base::TimeDelta());
 }
diff --git a/src/base/sequenced_task_runner.h b/src/base/sequenced_task_runner.h
index b92bd99..b291539 100644
--- a/src/base/sequenced_task_runner.h
+++ b/src/base/sequenced_task_runner.h
@@ -110,11 +110,11 @@
   // below.
 
   bool PostNonNestableTask(const tracked_objects::Location& from_here,
-                           Closure task);
+                           OnceClosure task);
 
   virtual bool PostNonNestableDelayedTask(
       const tracked_objects::Location& from_here,
-      Closure task,
+      OnceClosure task,
       base::TimeDelta delay) = 0;
 
   // Submits a non-nestable task to delete the given object.  Returns
diff --git a/src/base/task_runner.cc b/src/base/task_runner.cc
index 8502510..c3e0574 100644
--- a/src/base/task_runner.cc
+++ b/src/base/task_runner.cc
@@ -23,7 +23,7 @@
 
  private:
   bool PostTask(const tracked_objects::Location& from_here,
-                Closure task) override;
+                OnceClosure task) override;
 
   // Non-owning.
   TaskRunner* destination_;
@@ -36,20 +36,20 @@
 
 bool PostTaskAndReplyTaskRunner::PostTask(
     const tracked_objects::Location& from_here,
-    Closure task) {
+    OnceClosure task) {
   return destination_->PostTask(from_here, std::move(task));
 }
 
 }  // namespace
 
 bool TaskRunner::PostTask(const tracked_objects::Location& from_here,
-                          Closure task) {
+                          OnceClosure task) {
   return PostDelayedTask(from_here, std::move(task), base::TimeDelta());
 }
 
 bool TaskRunner::PostTaskAndReply(const tracked_objects::Location& from_here,
-                                  Closure task,
-                                  Closure reply) {
+                                  OnceClosure task,
+                                  OnceClosure reply) {
   return PostTaskAndReplyTaskRunner(this).PostTaskAndReply(
       from_here, std::move(task), std::move(reply));
 }
diff --git a/src/base/task_runner.h b/src/base/task_runner.h
index d6a3871..0421d56 100644
--- a/src/base/task_runner.h
+++ b/src/base/task_runner.h
@@ -61,7 +61,7 @@
   // will not be run.
   //
   // Equivalent to PostDelayedTask(from_here, task, 0).
-  bool PostTask(const tracked_objects::Location& from_here, Closure task);
+  bool PostTask(const tracked_objects::Location& from_here, OnceClosure task);
 
   // Like PostTask, but tries to run the posted task only after
   // |delay_ms| has passed.
@@ -69,7 +69,7 @@
   // It is valid for an implementation to ignore |delay_ms|; that is,
   // to have PostDelayedTask behave the same as PostTask.
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
-                               Closure task,
+                               OnceClosure task,
                                base::TimeDelta delay) = 0;
 
   // Returns true if the current thread is a thread on which a task
@@ -122,8 +122,8 @@
   //     and the reply will cancel itself safely because it is bound to a
   //     WeakPtr<>.
   bool PostTaskAndReply(const tracked_objects::Location& from_here,
-                        Closure task,
-                        Closure reply);
+                        OnceClosure task,
+                        OnceClosure reply);
 
  protected:
   friend struct TaskRunnerTraits;
diff --git a/src/base/task_scheduler/delayed_task_manager.cc b/src/base/task_scheduler/delayed_task_manager.cc
index 1921364..420f893 100644
--- a/src/base/task_scheduler/delayed_task_manager.cc
+++ b/src/base/task_scheduler/delayed_task_manager.cc
@@ -26,6 +26,7 @@
     std::unique_ptr<Task> task,
     const PostTaskNowCallback& post_task_now_callback) {
   DCHECK(task);
+  DCHECK(task->task);
 
   const TimeDelta delay = task->delay;
   DCHECK(!delay.is_zero());
diff --git a/src/base/task_scheduler/post_task.cc b/src/base/task_scheduler/post_task.cc
index 0781e85..6f9adae 100644
--- a/src/base/task_scheduler/post_task.cc
+++ b/src/base/task_scheduler/post_task.cc
@@ -21,7 +21,7 @@
 
  private:
   bool PostTask(const tracked_objects::Location& from_here,
-                Closure task) override {
+                OnceClosure task) override {
     PostTaskWithTraits(from_here, traits_, std::move(task));
     return true;
   }
@@ -32,43 +32,43 @@
 
 }  // namespace
 
-void PostTask(const tracked_objects::Location& from_here, Closure task) {
+void PostTask(const tracked_objects::Location& from_here, OnceClosure task) {
   PostDelayedTask(from_here, std::move(task), TimeDelta());
 }
 
 void PostDelayedTask(const tracked_objects::Location& from_here,
-                     Closure task,
+                     OnceClosure task,
                      TimeDelta delay) {
   PostDelayedTaskWithTraits(from_here, TaskTraits(), std::move(task), delay);
 }
 
 void PostTaskAndReply(const tracked_objects::Location& from_here,
-                      Closure task,
-                      Closure reply) {
+                      OnceClosure task,
+                      OnceClosure reply) {
   PostTaskWithTraitsAndReply(from_here, TaskTraits(), std::move(task),
                              std::move(reply));
 }
 
 void PostTaskWithTraits(const tracked_objects::Location& from_here,
                         const TaskTraits& traits,
-                        Closure task) {
+                        OnceClosure task) {
   PostDelayedTaskWithTraits(from_here, traits, std::move(task), TimeDelta());
 }
 
 void PostDelayedTaskWithTraits(const tracked_objects::Location& from_here,
                                const TaskTraits& traits,
-                               Closure task,
+                               OnceClosure task,
                                TimeDelta delay) {
   DCHECK(TaskScheduler::GetInstance())
       << "Ref. Prerequisite section of post_task.h";
   TaskScheduler::GetInstance()->PostDelayedTaskWithTraits(
-      from_here, traits, std::move(task), delay);
+      from_here, traits, std::move(task), std::move(delay));
 }
 
 void PostTaskWithTraitsAndReply(const tracked_objects::Location& from_here,
                                 const TaskTraits& traits,
-                                Closure task,
-                                Closure reply) {
+                                OnceClosure task,
+                                OnceClosure reply) {
   PostTaskAndReplyTaskRunner(traits).PostTaskAndReply(
       from_here, std::move(task), std::move(reply));
 }
diff --git a/src/base/task_scheduler/post_task.h b/src/base/task_scheduler/post_task.h
index efdee58..69eda89 100644
--- a/src/base/task_scheduler/post_task.h
+++ b/src/base/task_scheduler/post_task.h
@@ -71,7 +71,7 @@
 // Posts |task| to the TaskScheduler. Calling this is equivalent to calling
 // PostTaskWithTraits with plain TaskTraits.
 BASE_EXPORT void PostTask(const tracked_objects::Location& from_here,
-                          Closure task);
+                          OnceClosure task);
 
 // Posts |task| to the TaskScheduler. |task| will not run before |delay|
 // expires. Calling this is equivalent to calling PostDelayedTaskWithTraits with
@@ -80,7 +80,7 @@
 // Use PostDelayedTaskWithTraits to specify a BACKGROUND priority if the task
 // doesn't have to run as soon as |delay| expires.
 BASE_EXPORT void PostDelayedTask(const tracked_objects::Location& from_here,
-                                 Closure task,
+                                 OnceClosure task,
                                  TimeDelta delay);
 
 // Posts |task| to the TaskScheduler and posts |reply| on the caller's execution
@@ -89,8 +89,8 @@
 // PostTaskWithTraitsAndReply with plain TaskTraits. Can only be called when
 // SequencedTaskRunnerHandle::IsSet().
 BASE_EXPORT void PostTaskAndReply(const tracked_objects::Location& from_here,
-                                  Closure task,
-                                  Closure reply);
+                                  OnceClosure task,
+                                  OnceClosure reply);
 
 // Posts |task| to the TaskScheduler and posts |reply| with the return value of
 // |task| as argument on the caller's execution context (i.e. same sequence or
@@ -99,16 +99,30 @@
 // TaskTraits. Can only be called when SequencedTaskRunnerHandle::IsSet().
 template <typename TaskReturnType, typename ReplyArgType>
 void PostTaskAndReplyWithResult(const tracked_objects::Location& from_here,
-                                Callback<TaskReturnType(void)> task,
-                                Callback<void(ReplyArgType)> reply) {
+                                OnceCallback<TaskReturnType()> task,
+                                OnceCallback<void(ReplyArgType)> reply) {
   PostTaskWithTraitsAndReplyWithResult(from_here, TaskTraits(), std::move(task),
                                        std::move(reply));
 }
 
+// Callback version of PostTaskAndReplyWithResult above.
+// Though RepeatingCallback is convertible to OnceCallback, we need this since
+// we can not use template deduction and object conversion at once on the
+// overload resolution.
+// TODO(tzik): Update all callers of the Callback version to use OnceCallback.
+template <typename TaskReturnType, typename ReplyArgType>
+void PostTaskAndReplyWithResult(const tracked_objects::Location& from_here,
+                                Callback<TaskReturnType()> task,
+                                Callback<void(ReplyArgType)> reply) {
+  PostTaskAndReplyWithResult(
+      from_here, OnceCallback<TaskReturnType()>(std::move(task)),
+      OnceCallback<void(ReplyArgType)>(std::move(reply)));
+}
+
 // Posts |task| with specific |traits| to the TaskScheduler.
 BASE_EXPORT void PostTaskWithTraits(const tracked_objects::Location& from_here,
                                     const TaskTraits& traits,
-                                    Closure task);
+                                    OnceClosure task);
 
 // Posts |task| with specific |traits| to the TaskScheduler. |task| will not run
 // before |delay| expires.
@@ -118,7 +132,7 @@
 BASE_EXPORT void PostDelayedTaskWithTraits(
     const tracked_objects::Location& from_here,
     const TaskTraits& traits,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay);
 
 // Posts |task| with specific |traits| to the TaskScheduler and posts |reply| on
@@ -128,8 +142,8 @@
 BASE_EXPORT void PostTaskWithTraitsAndReply(
     const tracked_objects::Location& from_here,
     const TaskTraits& traits,
-    Closure task,
-    Closure reply);
+    OnceClosure task,
+    OnceClosure reply);
 
 // Posts |task| with specific |traits| to the TaskScheduler and posts |reply|
 // with the return value of |task| as argument on the caller's execution context
@@ -139,14 +153,31 @@
 void PostTaskWithTraitsAndReplyWithResult(
     const tracked_objects::Location& from_here,
     const TaskTraits& traits,
-    Callback<TaskReturnType()> task,
-    Callback<void(ReplyArgType)> reply) {
+    OnceCallback<TaskReturnType()> task,
+    OnceCallback<void(ReplyArgType)> reply) {
   TaskReturnType* result = new TaskReturnType();
   return PostTaskWithTraitsAndReply(
-      from_here, traits, Bind(&internal::ReturnAsParamAdapter<TaskReturnType>,
-                              std::move(task), result),
-      Bind(&internal::ReplyAdapter<TaskReturnType, ReplyArgType>,
-           std::move(reply), Owned(result)));
+      from_here, traits,
+      BindOnce(&internal::ReturnAsParamAdapter<TaskReturnType>, std::move(task),
+               result),
+      BindOnce(&internal::ReplyAdapter<TaskReturnType, ReplyArgType>,
+               std::move(reply), Owned(result)));
+}
+
+// Callback version of PostTaskWithTraitsAndReplyWithResult above.
+// Though RepeatingCallback is convertible to OnceCallback, we need this since
+// we can not use template deduction and object conversion at once on the
+// overload resolution.
+// TODO(tzik): Update all callers of the Callback version to use OnceCallback.
+template <typename TaskReturnType, typename ReplyArgType>
+void PostTaskWithTraitsAndReplyWithResult(
+    const tracked_objects::Location& from_here,
+    const TaskTraits& traits,
+    Callback<TaskReturnType()> task,
+    Callback<void(ReplyArgType)> reply) {
+  PostTaskWithTraitsAndReplyWithResult(
+      from_here, traits, OnceCallback<TaskReturnType()>(std::move(task)),
+      OnceCallback<void(ReplyArgType)>(std::move(reply)));
 }
 
 // Returns a TaskRunner whose PostTask invocations result in scheduling tasks
diff --git a/src/base/task_scheduler/priority_queue_unittest.cc b/src/base/task_scheduler/priority_queue_unittest.cc
index 221532b..afaeafb 100644
--- a/src/base/task_scheduler/priority_queue_unittest.cc
+++ b/src/base/task_scheduler/priority_queue_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <memory>
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
@@ -59,26 +61,26 @@
   // Create test sequences.
   scoped_refptr<Sequence> sequence_a(new Sequence);
   sequence_a->PushTask(MakeUnique<Task>(
-      FROM_HERE, Closure(),
+      FROM_HERE, Bind(&DoNothing),
       TaskTraits().WithPriority(TaskPriority::USER_VISIBLE), TimeDelta()));
   SequenceSortKey sort_key_a = sequence_a->GetSortKey();
 
   scoped_refptr<Sequence> sequence_b(new Sequence);
   sequence_b->PushTask(MakeUnique<Task>(
-      FROM_HERE, Closure(),
+      FROM_HERE, Bind(&DoNothing),
       TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), TimeDelta()));
   SequenceSortKey sort_key_b = sequence_b->GetSortKey();
 
   scoped_refptr<Sequence> sequence_c(new Sequence);
   sequence_c->PushTask(MakeUnique<Task>(
-      FROM_HERE, Closure(),
+      FROM_HERE, Bind(&DoNothing),
       TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), TimeDelta()));
   SequenceSortKey sort_key_c = sequence_c->GetSortKey();
 
   scoped_refptr<Sequence> sequence_d(new Sequence);
   sequence_d->PushTask(MakeUnique<Task>(
-      FROM_HERE, Closure(), TaskTraits().WithPriority(TaskPriority::BACKGROUND),
-      TimeDelta()));
+      FROM_HERE, Bind(&DoNothing),
+      TaskTraits().WithPriority(TaskPriority::BACKGROUND), TimeDelta()));
   SequenceSortKey sort_key_d = sequence_d->GetSortKey();
 
   // Create a PriorityQueue and a Transaction.
diff --git a/src/base/task_scheduler/scheduler_single_thread_task_runner_manager.cc b/src/base/task_scheduler/scheduler_single_thread_task_runner_manager.cc
index 059e459..d4c26d6 100644
--- a/src/base/task_scheduler/scheduler_single_thread_task_runner_manager.cc
+++ b/src/base/task_scheduler/scheduler_single_thread_task_runner_manager.cc
@@ -253,7 +253,7 @@
 
   // SingleThreadTaskRunner:
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure closure,
+                       OnceClosure closure,
                        TimeDelta delay) override {
     auto task = MakeUnique<Task>(from_here, std::move(closure), traits_, delay);
     task->single_thread_task_runner_ref = this;
@@ -272,7 +272,7 @@
   }
 
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure closure,
+                                  OnceClosure closure,
                                   TimeDelta delay) override {
     // Tasks are never nested within the task scheduler.
     return PostDelayedTask(from_here, std::move(closure), delay);
diff --git a/src/base/task_scheduler/scheduler_worker_pool_impl.cc b/src/base/task_scheduler/scheduler_worker_pool_impl.cc
index 9e61bd7..874d211 100644
--- a/src/base/task_scheduler/scheduler_worker_pool_impl.cc
+++ b/src/base/task_scheduler/scheduler_worker_pool_impl.cc
@@ -58,7 +58,7 @@
 
   // TaskRunner:
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure closure,
+                       OnceClosure closure,
                        TimeDelta delay) override {
     // Post the task as part of a one-off single-task Sequence.
     return worker_pool_->PostTaskWithSequence(
@@ -93,7 +93,7 @@
 
   // SequencedTaskRunner:
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure closure,
+                       OnceClosure closure,
                        TimeDelta delay) override {
     std::unique_ptr<Task> task(
         new Task(from_here, std::move(closure), traits_, delay));
@@ -104,7 +104,7 @@
   }
 
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure closure,
+                                  OnceClosure closure,
                                   base::TimeDelta delay) override {
     // Tasks are never nested within the task scheduler.
     return PostDelayedTask(from_here, std::move(closure), delay);
@@ -192,25 +192,120 @@
   DISALLOW_COPY_AND_ASSIGN(SchedulerWorkerDelegateImpl);
 };
 
+SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
+    const std::string& name,
+    ThreadPriority priority_hint,
+    ReEnqueueSequenceCallback re_enqueue_sequence_callback,
+    TaskTracker* task_tracker,
+    DelayedTaskManager* delayed_task_manager)
+    : name_(name),
+      priority_hint_(priority_hint),
+      re_enqueue_sequence_callback_(std::move(re_enqueue_sequence_callback)),
+      idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
+      idle_workers_stack_cv_for_testing_(
+          idle_workers_stack_lock_.CreateConditionVariable()),
+      join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL,
+                                 WaitableEvent::InitialState::NOT_SIGNALED),
+#if DCHECK_IS_ON()
+      workers_created_(WaitableEvent::ResetPolicy::MANUAL,
+                       WaitableEvent::InitialState::NOT_SIGNALED),
+#endif
+      // Mimics the UMA_HISTOGRAM_LONG_TIMES macro.
+      detach_duration_histogram_(Histogram::FactoryTimeGet(
+          kDetachDurationHistogramPrefix + name_ + kPoolNameSuffix,
+          TimeDelta::FromMilliseconds(1),
+          TimeDelta::FromHours(1),
+          50,
+          HistogramBase::kUmaTargetedHistogramFlag)),
+      // Mimics the UMA_HISTOGRAM_COUNTS_1000 macro. When a worker runs more
+      // than 1000 tasks before detaching, there is no need to know the exact
+      // number of tasks that ran.
+      num_tasks_before_detach_histogram_(Histogram::FactoryGet(
+          kNumTasksBeforeDetachHistogramPrefix + name_ + kPoolNameSuffix,
+          1,
+          1000,
+          50,
+          HistogramBase::kUmaTargetedHistogramFlag)),
+      // Mimics the UMA_HISTOGRAM_COUNTS_100 macro. A SchedulerWorker is
+      // expected to run between zero and a few tens of tasks between waits.
+      // When it runs more than 100 tasks, there is no need to know the exact
+      // number of tasks that ran.
+      num_tasks_between_waits_histogram_(Histogram::FactoryGet(
+          kNumTasksBetweenWaitsHistogramPrefix + name_ + kPoolNameSuffix,
+          1,
+          100,
+          50,
+          HistogramBase::kUmaTargetedHistogramFlag)),
+      task_tracker_(task_tracker),
+      delayed_task_manager_(delayed_task_manager) {
+  DCHECK(task_tracker_);
+  DCHECK(delayed_task_manager_);
+}
+
+void SchedulerWorkerPoolImpl::Start(const SchedulerWorkerPoolParams& params) {
+  suggested_reclaim_time_ = params.suggested_reclaim_time();
+
+  std::vector<SchedulerWorker*> workers_to_wake_up;
+
+  {
+    AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
+
+#if DCHECK_IS_ON()
+    DCHECK(!workers_created_.IsSignaled());
+#endif
+
+    DCHECK(workers_.empty());
+    workers_.resize(params.max_threads());
+
+    // The number of workers created alive is |num_wake_ups_before_start_|, plus
+    // one if the standby thread policy is ONE (in order to start with one alive
+    // idle worker).
+    const int num_alive_workers =
+        num_wake_ups_before_start_ +
+        (params.standby_thread_policy() ==
+                 SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE
+             ? 1
+             : 0);
+
+    // Create workers in reverse order of index so that the worker with the
+    // highest index is at the bottom of the idle stack.
+    for (int index = params.max_threads() - 1; index >= 0; --index) {
+      const SchedulerWorker::InitialState initial_state =
+          index < num_alive_workers ? SchedulerWorker::InitialState::ALIVE
+                                    : SchedulerWorker::InitialState::DETACHED;
+      scoped_refptr<SchedulerWorker> worker = SchedulerWorker::Create(
+          params.priority_hint(),
+          MakeUnique<SchedulerWorkerDelegateImpl>(
+              this, re_enqueue_sequence_callback_, index),
+          task_tracker_, initial_state, params.backward_compatibility());
+      if (!worker)
+        break;
+
+      if (index < num_wake_ups_before_start_)
+        workers_to_wake_up.push_back(worker.get());
+      else
+        idle_workers_stack_.Push(worker.get());
+
+      workers_[index] = std::move(worker);
+    }
+
+#if DCHECK_IS_ON()
+    workers_created_.Signal();
+#endif
+
+    CHECK(!workers_.empty());
+  }
+
+  for (SchedulerWorker* worker : workers_to_wake_up)
+    worker->WakeUp();
+}
+
 SchedulerWorkerPoolImpl::~SchedulerWorkerPoolImpl() {
   // SchedulerWorkerPool should never be deleted in production unless its
   // initialization failed.
   DCHECK(join_for_testing_returned_.IsSignaled() || workers_.empty());
 }
 
-// static
-std::unique_ptr<SchedulerWorkerPoolImpl> SchedulerWorkerPoolImpl::Create(
-    const SchedulerWorkerPoolParams& params,
-    const ReEnqueueSequenceCallback& re_enqueue_sequence_callback,
-    TaskTracker* task_tracker,
-    DelayedTaskManager* delayed_task_manager) {
-  auto worker_pool = WrapUnique(
-      new SchedulerWorkerPoolImpl(params, task_tracker, delayed_task_manager));
-  if (worker_pool->Initialize(params, re_enqueue_sequence_callback))
-    return worker_pool;
-  return nullptr;
-}
-
 scoped_refptr<TaskRunner> SchedulerWorkerPoolImpl::CreateTaskRunnerWithTraits(
     const TaskTraits& traits) {
   return make_scoped_refptr(new SchedulerParallelTaskRunner(traits, this));
@@ -252,6 +347,7 @@
   if (task->delayed_run_time.is_null()) {
     PostTaskWithSequenceNow(std::move(task), std::move(sequence));
   } else {
+    DCHECK(task->task);
     delayed_task_manager_->AddDelayedTask(
         std::move(task),
         Bind(
@@ -299,16 +395,25 @@
 }
 
 int SchedulerWorkerPoolImpl::GetMaxConcurrentTasksDeprecated() const {
+#if DCHECK_IS_ON()
+  DCHECK(workers_created_.IsSignaled());
+#endif
   return workers_.size();
 }
 
 void SchedulerWorkerPoolImpl::WaitForAllWorkersIdleForTesting() {
+#if DCHECK_IS_ON()
+  DCHECK(workers_created_.IsSignaled());
+#endif
   AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
   while (idle_workers_stack_.Size() < workers_.size())
     idle_workers_stack_cv_for_testing_->Wait();
 }
 
 void SchedulerWorkerPoolImpl::JoinForTesting() {
+#if DCHECK_IS_ON()
+  DCHECK(workers_created_.IsSignaled());
+#endif
   DCHECK(!CanWorkerDetachForTesting() || suggested_reclaim_time_.is_max())
       << "Workers can detach during join.";
   for (const auto& worker : workers_)
@@ -464,96 +569,21 @@
   last_detach_time_ = TimeTicks::Now();
 }
 
-SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
-    const SchedulerWorkerPoolParams& params,
-    TaskTracker* task_tracker,
-    DelayedTaskManager* delayed_task_manager)
-    : name_(params.name()),
-      suggested_reclaim_time_(params.suggested_reclaim_time()),
-      idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
-      idle_workers_stack_cv_for_testing_(
-          idle_workers_stack_lock_.CreateConditionVariable()),
-      join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL,
-                                 WaitableEvent::InitialState::NOT_SIGNALED),
-#if DCHECK_IS_ON()
-      workers_created_(WaitableEvent::ResetPolicy::MANUAL,
-                       WaitableEvent::InitialState::NOT_SIGNALED),
-#endif
-      // Mimics the UMA_HISTOGRAM_LONG_TIMES macro.
-      detach_duration_histogram_(Histogram::FactoryTimeGet(
-          kDetachDurationHistogramPrefix + name_ + kPoolNameSuffix,
-          TimeDelta::FromMilliseconds(1),
-          TimeDelta::FromHours(1),
-          50,
-          HistogramBase::kUmaTargetedHistogramFlag)),
-      // Mimics the UMA_HISTOGRAM_COUNTS_1000 macro. When a worker runs more
-      // than 1000 tasks before detaching, there is no need to know the exact
-      // number of tasks that ran.
-      num_tasks_before_detach_histogram_(Histogram::FactoryGet(
-          kNumTasksBeforeDetachHistogramPrefix + name_ + kPoolNameSuffix,
-          1,
-          1000,
-          50,
-          HistogramBase::kUmaTargetedHistogramFlag)),
-      // Mimics the UMA_HISTOGRAM_COUNTS_100 macro. A SchedulerWorker is
-      // expected to run between zero and a few tens of tasks between waits.
-      // When it runs more than 100 tasks, there is no need to know the exact
-      // number of tasks that ran.
-      num_tasks_between_waits_histogram_(Histogram::FactoryGet(
-          kNumTasksBetweenWaitsHistogramPrefix + name_ + kPoolNameSuffix,
-          1,
-          100,
-          50,
-          HistogramBase::kUmaTargetedHistogramFlag)),
-      task_tracker_(task_tracker),
-      delayed_task_manager_(delayed_task_manager) {
-  DCHECK(task_tracker_);
-  DCHECK(delayed_task_manager_);
-}
-
-bool SchedulerWorkerPoolImpl::Initialize(
-    const SchedulerWorkerPoolParams& params,
-    const ReEnqueueSequenceCallback& re_enqueue_sequence_callback) {
-  AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
-
-  DCHECK(workers_.empty());
-  workers_.resize(params.max_threads());
-
-  // Create workers and push them to the idle stack in reverse order of index.
-  // This ensures that they are woken up in order of index and that the ALIVE
-  // worker is on top of the stack.
-  for (int index = params.max_threads() - 1; index >= 0; --index) {
-    const bool is_standby_lazy =
-        params.standby_thread_policy() ==
-        SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY;
-    const SchedulerWorker::InitialState initial_state =
-        (index == 0 && !is_standby_lazy)
-            ? SchedulerWorker::InitialState::ALIVE
-            : SchedulerWorker::InitialState::DETACHED;
-    scoped_refptr<SchedulerWorker> worker = SchedulerWorker::Create(
-        params.priority_hint(),
-        MakeUnique<SchedulerWorkerDelegateImpl>(
-            this, re_enqueue_sequence_callback, index),
-        task_tracker_, initial_state, params.backward_compatibility());
-    if (!worker)
-      break;
-    idle_workers_stack_.Push(worker.get());
-    workers_[index] = std::move(worker);
-  }
-
-#if DCHECK_IS_ON()
-  workers_created_.Signal();
-#endif
-
-  return !workers_.empty();
-}
-
 void SchedulerWorkerPoolImpl::WakeUpOneWorker() {
-  SchedulerWorker* worker;
+  SchedulerWorker* worker = nullptr;
   {
     AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
-    worker = idle_workers_stack_.Pop();
+
+#if DCHECK_IS_ON()
+    DCHECK_EQ(workers_.empty(), !workers_created_.IsSignaled());
+#endif
+
+    if (workers_.empty())
+      ++num_wake_ups_before_start_;
+    else
+      worker = idle_workers_stack_.Pop();
   }
+
   if (worker)
     worker->WakeUp();
   // TODO(robliao): Honor StandbyThreadPolicy::ONE here and consider adding
diff --git a/src/base/task_scheduler/scheduler_worker_pool_impl.h b/src/base/task_scheduler/scheduler_worker_pool_impl.h
index 0c1fdcd..f9b04a1 100644
--- a/src/base/task_scheduler/scheduler_worker_pool_impl.h
+++ b/src/base/task_scheduler/scheduler_worker_pool_impl.h
@@ -45,23 +45,33 @@
   // from it.
   using ReEnqueueSequenceCallback = Callback<void(scoped_refptr<Sequence>)>;
 
+  // Constructs a pool without workers. Tasks can be posted to the pool, but
+  // they won't run until workers are created. To create workers and start
+  // running tasks, call Start().
+  //
+  // |name| is used to label the pool's threads ("TaskScheduler" + |name| +
+  // index) and histograms ("TaskScheduler." + histogram name + "." + |name| +
+  // extra suffixes). |priority_hint| is the preferred thread priority; the
+  // actual thread priority depends on shutdown state and platform capabilities.
+  // |re_enqueue_sequence_callback| is invoked when a Sequence isn't empty after
+  // a worker pops a Task from it. |task_tracker| keeps track of tasks.
+  // |delayed_task_manager| handles tasks posted with a delay.
+  SchedulerWorkerPoolImpl(
+      const std::string& name,
+      ThreadPriority priority_hint,
+      ReEnqueueSequenceCallback re_enqueue_sequence_callback,
+      TaskTracker* task_tracker,
+      DelayedTaskManager* delayed_task_manager);
+
+  // Creates workers following the |params| specification, allowing existing and
+  // future tasks to run. Can only be called once. CHECKs on failure.
+  void Start(const SchedulerWorkerPoolParams& params);
+
   // Destroying a SchedulerWorkerPoolImpl returned by Create() is not allowed in
   // production; it is always leaked. In tests, it can only be destroyed after
   // JoinForTesting() has returned.
   ~SchedulerWorkerPoolImpl() override;
 
-  // Creates a SchedulerWorkerPoolImpl following the |worker_pool_params|
-  // specification. |re_enqueue_sequence_callback| will be invoked after a
-  // worker of this worker pool tries to run a Task. |task_tracker| is used to
-  // handle shutdown behavior of Tasks. |delayed_task_manager| handles Tasks
-  // posted with a delay. Returns nullptr on failure to create a worker pool
-  // with at least one thread.
-  static std::unique_ptr<SchedulerWorkerPoolImpl> Create(
-      const SchedulerWorkerPoolParams& params,
-      const ReEnqueueSequenceCallback& re_enqueue_sequence_callback,
-      TaskTracker* task_tracker,
-      DelayedTaskManager* delayed_task_manager);
-
   // SchedulerWorkerPool:
   scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
       const TaskTraits& traits) override;
@@ -113,10 +123,6 @@
                           TaskTracker* task_tracker,
                           DelayedTaskManager* delayed_task_manager);
 
-  bool Initialize(
-      const SchedulerWorkerPoolParams& params,
-      const ReEnqueueSequenceCallback& re_enqueue_sequence_callback);
-
   // Wakes up the last worker from this worker pool to go idle, if any.
   void WakeUpOneWorker();
 
@@ -132,23 +138,27 @@
   // Returns true if worker thread detachment is permitted.
   bool CanWorkerDetachForTesting();
 
-  // The name of this worker pool, used to label its worker threads.
   const std::string name_;
-
-  // All worker owned by this worker pool. Only modified during initialization
-  // of the worker pool.
-  std::vector<scoped_refptr<SchedulerWorker>> workers_;
+  const ThreadPriority priority_hint_;
+  const ReEnqueueSequenceCallback re_enqueue_sequence_callback_;
 
   // PriorityQueue from which all threads of this worker pool get work.
   PriorityQueue shared_priority_queue_;
 
-  // Suggested reclaim time for workers.
-  const TimeDelta suggested_reclaim_time_;
+  // All workers owned by this worker pool. Initialized by Start() within the
+  // scope of |idle_workers_stack_lock_|. Never modified afterwards (i.e. can be
+  // read without synchronization once |workers_created_.IsSignaled()|).
+  std::vector<scoped_refptr<SchedulerWorker>> workers_;
 
-  // Synchronizes access to |idle_workers_stack_| and
-  // |idle_workers_stack_cv_for_testing_|. Has |shared_priority_queue_|'s
-  // lock as its predecessor so that a worker can be pushed to
-  // |idle_workers_stack_| within the scope of a Transaction (more
+  // Suggested reclaim time for workers. Initialized by Start(). Never modified
+  // afterwards (i.e. can be read without synchronization once
+  // |workers_created_.IsSignaled()|).
+  TimeDelta suggested_reclaim_time_;
+
+  // Synchronizes access to |idle_workers_stack_|,
+  // |idle_workers_stack_cv_for_testing_| and |num_wake_ups_before_start_|. Has
+  // |shared_priority_queue_|'s lock as its predecessor so that a worker can be
+  // pushed to |idle_workers_stack_| within the scope of a Transaction (more
   // details in GetWork()).
   mutable SchedulerLock idle_workers_stack_lock_;
 
@@ -162,6 +172,9 @@
   // Signaled when all workers become idle.
   std::unique_ptr<ConditionVariable> idle_workers_stack_cv_for_testing_;
 
+  // Number of wake ups that occurred before Start().
+  int num_wake_ups_before_start_ = 0;
+
   // Signaled once JoinForTesting() has returned.
   WaitableEvent join_for_testing_returned_;
 
@@ -171,7 +184,7 @@
 
 #if DCHECK_IS_ON()
   // Signaled when all workers have been created.
-  WaitableEvent workers_created_;
+  mutable WaitableEvent workers_created_;
 #endif
 
   // TaskScheduler.DetachDuration.[worker pool name] histogram. Intentionally
diff --git a/src/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc b/src/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
index d24775f..86f6327 100644
--- a/src/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
+++ b/src/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
@@ -67,7 +67,7 @@
       : service_thread_("TaskSchedulerServiceThread") {}
 
   void SetUp() override {
-    InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
+    CreateAndStartWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
   }
 
   void TearDown() override {
@@ -76,23 +76,33 @@
     worker_pool_->JoinForTesting();
   }
 
-  void InitializeWorkerPool(TimeDelta suggested_reclaim_time,
-                            size_t num_workers) {
+  void CreateWorkerPool() {
     ASSERT_FALSE(worker_pool_);
     ASSERT_FALSE(delayed_task_manager_);
     service_thread_.Start();
     delayed_task_manager_ =
         base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner());
-    worker_pool_ = SchedulerWorkerPoolImpl::Create(
-        SchedulerWorkerPoolParams("TestWorkerPool", ThreadPriority::NORMAL,
-                                  StandbyThreadPolicy::LAZY, num_workers,
-                                  suggested_reclaim_time),
+    worker_pool_ = MakeUnique<SchedulerWorkerPoolImpl>(
+        "TestWorkerPool", ThreadPriority::NORMAL,
         Bind(&TaskSchedulerWorkerPoolImplTest::ReEnqueueSequenceCallback,
              Unretained(this)),
         &task_tracker_, delayed_task_manager_.get());
     ASSERT_TRUE(worker_pool_);
   }
 
+  void StartWorkerPool(TimeDelta suggested_reclaim_time, size_t num_workers) {
+    ASSERT_TRUE(worker_pool_);
+    worker_pool_->Start(SchedulerWorkerPoolParams(
+        "TestWorkerPool", ThreadPriority::NORMAL, StandbyThreadPolicy::LAZY,
+        num_workers, suggested_reclaim_time));
+  }
+
+  void CreateAndStartWorkerPool(TimeDelta suggested_reclaim_time,
+                                size_t num_workers) {
+    CreateWorkerPool();
+    StartWorkerPool(suggested_reclaim_time, num_workers);
+  }
+
   std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool_;
 
   TaskTracker task_tracker_;
@@ -377,6 +387,75 @@
 
 namespace {
 
+class TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest
+    : public TaskSchedulerWorkerPoolImplTest {
+ public:
+  void SetUp() override {
+    CreateWorkerPool();
+    // Let the test start the worker pool.
+  }
+};
+
+void TaskPostedBeforeStart(PlatformThreadRef* platform_thread_ref,
+                           WaitableEvent* task_scheduled,
+                           WaitableEvent* barrier) {
+  *platform_thread_ref = PlatformThread::CurrentRef();
+  task_scheduled->Signal();
+  barrier->Wait();
+}
+
+}  // namespace
+
+// Verify that 2 tasks posted before Start() to a SchedulerWorkerPoolImpl with
+// more than 2 workers are scheduled on different workers when Start() is
+// called.
+TEST_F(TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest,
+       PostTasksBeforeStart) {
+  PlatformThreadRef task_1_thread_ref;
+  PlatformThreadRef task_2_thread_ref;
+  WaitableEvent task_1_scheduled(WaitableEvent::ResetPolicy::MANUAL,
+                                 WaitableEvent::InitialState::NOT_SIGNALED);
+  WaitableEvent task_2_scheduled(WaitableEvent::ResetPolicy::MANUAL,
+                                 WaitableEvent::InitialState::NOT_SIGNALED);
+
+  // This event is used to prevent a task from completing before the other task
+  // is scheduled. If that happened, both tasks could run on the same worker and
+  // this test couldn't verify that the correct number of workers were woken up.
+  WaitableEvent barrier(WaitableEvent::ResetPolicy::MANUAL,
+                        WaitableEvent::InitialState::NOT_SIGNALED);
+
+  worker_pool_
+      ->CreateTaskRunnerWithTraits(TaskTraits().WithBaseSyncPrimitives())
+      ->PostTask(FROM_HERE,
+                 Bind(&TaskPostedBeforeStart, Unretained(&task_1_thread_ref),
+                      Unretained(&task_1_scheduled), Unretained(&barrier)));
+  worker_pool_
+      ->CreateTaskRunnerWithTraits(TaskTraits().WithBaseSyncPrimitives())
+      ->PostTask(FROM_HERE,
+                 Bind(&TaskPostedBeforeStart, Unretained(&task_2_thread_ref),
+                      Unretained(&task_2_scheduled), Unretained(&barrier)));
+
+  // Workers should not be created and tasks should not run before the pool is
+  // started.
+  EXPECT_EQ(0U, worker_pool_->NumberOfAliveWorkersForTesting());
+  EXPECT_FALSE(task_1_scheduled.IsSignaled());
+  EXPECT_FALSE(task_2_scheduled.IsSignaled());
+
+  StartWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
+
+  // Tasks should be scheduled shortly after the pool is started.
+  task_1_scheduled.Wait();
+  task_2_scheduled.Wait();
+
+  // Tasks should be scheduled on different threads.
+  EXPECT_NE(task_1_thread_ref, task_2_thread_ref);
+
+  barrier.Signal();
+  task_tracker_.Flush();
+}
+
+namespace {
+
 constexpr size_t kMagicTlsValue = 42;
 
 class TaskSchedulerWorkerPoolCheckTlsReuse
@@ -401,7 +480,8 @@
               WaitableEvent::InitialState::NOT_SIGNALED) {}
 
   void SetUp() override {
-    InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+    CreateAndStartWorkerPool(kReclaimTimeForDetachTests,
+                             kNumWorkersInWorkerPool);
   }
 
   subtle::Atomic32 zero_tls_values_ = 0;
@@ -493,7 +573,7 @@
 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaits) {
   WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
                       WaitableEvent::InitialState::NOT_SIGNALED);
-  InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
+  CreateAndStartWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
   auto task_runner = worker_pool_->CreateSequencedTaskRunnerWithTraits(
       TaskTraits().WithBaseSyncPrimitives());
 
@@ -537,7 +617,7 @@
 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaitsWithDetach) {
   WaitableEvent tasks_can_exit_event(WaitableEvent::ResetPolicy::MANUAL,
                                      WaitableEvent::InitialState::NOT_SIGNALED);
-  InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+  CreateAndStartWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
   auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
       TaskTraits().WithBaseSyncPrimitives());
 
@@ -599,7 +679,7 @@
 }
 
 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
-  InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+  CreateAndStartWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
 
   auto histogrammed_thread_task_runner =
       worker_pool_->CreateSequencedTaskRunnerWithTraits(
@@ -714,12 +794,12 @@
   TaskTracker task_tracker;
   DelayedTaskManager delayed_task_manager(
       make_scoped_refptr(new TestSimpleTaskRunner));
-  auto worker_pool = SchedulerWorkerPoolImpl::Create(
-      SchedulerWorkerPoolParams("LazyPolicyWorkerPool", ThreadPriority::NORMAL,
-                                StandbyThreadPolicy::LAZY, 8U,
-                                TimeDelta::Max()),
+  auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
+      "LazyPolicyWorkerPool", ThreadPriority::NORMAL,
       Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
       &delayed_task_manager);
+  worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::LAZY, 8U,
+                                               TimeDelta::Max()));
   ASSERT_TRUE(worker_pool);
   EXPECT_EQ(0U, worker_pool->NumberOfAliveWorkersForTesting());
   worker_pool->JoinForTesting();
@@ -729,11 +809,12 @@
   TaskTracker task_tracker;
   DelayedTaskManager delayed_task_manager(
       make_scoped_refptr(new TestSimpleTaskRunner));
-  auto worker_pool = SchedulerWorkerPoolImpl::Create(
-      SchedulerWorkerPoolParams("LazyPolicyWorkerPool", ThreadPriority::NORMAL,
-                                StandbyThreadPolicy::ONE, 8U, TimeDelta::Max()),
+  auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
+      "OnePolicyWorkerPool", ThreadPriority::NORMAL,
       Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
       &delayed_task_manager);
+  worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::ONE, 8U,
+                                               TimeDelta::Max()));
   ASSERT_TRUE(worker_pool);
   EXPECT_EQ(1U, worker_pool->NumberOfAliveWorkersForTesting());
   worker_pool->JoinForTesting();
diff --git a/src/base/task_scheduler/scheduler_worker_pool_params.h b/src/base/task_scheduler/scheduler_worker_pool_params.h
index daa1319..ca2aafc 100644
--- a/src/base/task_scheduler/scheduler_worker_pool_params.h
+++ b/src/base/task_scheduler/scheduler_worker_pool_params.h
@@ -60,7 +60,7 @@
   StandbyThreadPolicy standby_thread_policy() const {
     return standby_thread_policy_;
   }
-  size_t max_threads() const { return max_threads_; }
+  int max_threads() const { return max_threads_; }
   TimeDelta suggested_reclaim_time() const { return suggested_reclaim_time_; }
   SchedulerBackwardCompatibility backward_compatibility() const {
     return backward_compatibility_;
@@ -71,7 +71,7 @@
   std::string name_;
   ThreadPriority priority_hint_;
   StandbyThreadPolicy standby_thread_policy_;
-  size_t max_threads_;
+  int max_threads_;
   TimeDelta suggested_reclaim_time_;
   SchedulerBackwardCompatibility backward_compatibility_;
 };
diff --git a/src/base/task_scheduler/sequence.cc b/src/base/task_scheduler/sequence.cc
index 601b540..9867c1d 100644
--- a/src/base/task_scheduler/sequence.cc
+++ b/src/base/task_scheduler/sequence.cc
@@ -15,6 +15,8 @@
 Sequence::Sequence() = default;
 
 bool Sequence::PushTask(std::unique_ptr<Task> task) {
+  DCHECK(task);
+  DCHECK(task->task);
   DCHECK(task->sequenced_time.is_null());
   task->sequenced_time = base::TimeTicks::Now();
 
diff --git a/src/base/task_scheduler/sequence_unittest.cc b/src/base/task_scheduler/sequence_unittest.cc
index c45d8a8..7093b1e 100644
--- a/src/base/task_scheduler/sequence_unittest.cc
+++ b/src/base/task_scheduler/sequence_unittest.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/test/gtest_util.h"
@@ -24,27 +25,27 @@
   TaskSchedulerSequenceTest()
       : task_a_owned_(
             new Task(FROM_HERE,
-                     Closure(),
+                     Bind(&DoNothing),
                      TaskTraits().WithPriority(TaskPriority::BACKGROUND),
                      TimeDelta())),
         task_b_owned_(
             new Task(FROM_HERE,
-                     Closure(),
+                     Bind(&DoNothing),
                      TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
                      TimeDelta())),
         task_c_owned_(
             new Task(FROM_HERE,
-                     Closure(),
+                     Bind(&DoNothing),
                      TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
                      TimeDelta())),
         task_d_owned_(
             new Task(FROM_HERE,
-                     Closure(),
+                     Bind(&DoNothing),
                      TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
                      TimeDelta())),
         task_e_owned_(
             new Task(FROM_HERE,
-                     Closure(),
+                     Bind(&DoNothing),
                      TaskTraits().WithPriority(TaskPriority::BACKGROUND),
                      TimeDelta())),
         task_a_(task_a_owned_.get()),
diff --git a/src/base/task_scheduler/task.cc b/src/base/task_scheduler/task.cc
index 44aaa60..fc513e3 100644
--- a/src/base/task_scheduler/task.cc
+++ b/src/base/task_scheduler/task.cc
@@ -12,7 +12,7 @@
 namespace internal {
 
 Task::Task(const tracked_objects::Location& posted_from,
-           Closure task,
+           OnceClosure task,
            const TaskTraits& traits,
            TimeDelta delay)
     : PendingTask(
diff --git a/src/base/task_scheduler/task.h b/src/base/task_scheduler/task.h
index 1f3b775..43095f2 100644
--- a/src/base/task_scheduler/task.h
+++ b/src/base/task_scheduler/task.h
@@ -28,7 +28,7 @@
   // behavior in |traits| is BLOCK_SHUTDOWN, the shutdown behavior is
   // automatically adjusted to SKIP_ON_SHUTDOWN.
   Task(const tracked_objects::Location& posted_from,
-       Closure task,
+       OnceClosure task,
        const TaskTraits& traits,
        TimeDelta delay);
   ~Task();
diff --git a/src/base/task_scheduler/task_scheduler.cc b/src/base/task_scheduler/task_scheduler.cc
index bff2de6..0e621f1 100644
--- a/src/base/task_scheduler/task_scheduler.cc
+++ b/src/base/task_scheduler/task_scheduler.cc
@@ -40,16 +40,29 @@
 #if !defined(OS_NACL)
 // static
 void TaskScheduler::CreateAndSetSimpleTaskScheduler(const std::string& name) {
-  constexpr int kMinNumThreads = 1;
-  std::vector<SchedulerWorkerPoolParams> worker_pool_params_vector;
-  worker_pool_params_vector.emplace_back(
-      name, ThreadPriority::NORMAL,
-      SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY,
-      std::max(kMinNumThreads, SysInfo::NumberOfProcessors()),
-      TimeDelta::FromSeconds(30));
+  using StandbyThreadPolicy = SchedulerWorkerPoolParams::StandbyThreadPolicy;
+
+  // Values were chosen so that:
+  // * There are few background threads.
+  // * Background threads never outnumber foreground threads.
+  // * The system is utilized maximally by foreground threads.
+  const int num_cores = SysInfo::NumberOfProcessors();
+  constexpr int kBackgroundMaxThreads = 1;
+  constexpr int kBackgroundBlockingMaxThreads = 2;
+  const int kForegroundMaxThreads = std::max(1, num_cores);
+  const int kForegroundBlockingMaxThreads = std::max(2, num_cores);
+
+  constexpr TimeDelta kSuggestedReclaimTime = TimeDelta::FromSeconds(30);
+
   CreateAndSetDefaultTaskScheduler(
-      worker_pool_params_vector,
-      Bind([](const TaskTraits&) -> size_t { return 0; }));
+      name, {{StandbyThreadPolicy::LAZY, kBackgroundMaxThreads,
+              kSuggestedReclaimTime},
+             {StandbyThreadPolicy::LAZY, kBackgroundBlockingMaxThreads,
+              kSuggestedReclaimTime},
+             {StandbyThreadPolicy::LAZY, kForegroundMaxThreads,
+              kSuggestedReclaimTime},
+             {StandbyThreadPolicy::LAZY, kForegroundBlockingMaxThreads,
+              kSuggestedReclaimTime}});
 }
 #endif  // !defined(OS_NACL)
 
diff --git a/src/base/task_scheduler/task_scheduler.h b/src/base/task_scheduler/task_scheduler.h
index 57272bc..d19841f 100644
--- a/src/base/task_scheduler/task_scheduler.h
+++ b/src/base/task_scheduler/task_scheduler.h
@@ -70,7 +70,7 @@
   virtual void PostDelayedTaskWithTraits(
       const tracked_objects::Location& from_here,
       const TaskTraits& traits,
-      Closure task,
+      OnceClosure task,
       TimeDelta delay) = 0;
 
   // Returns a TaskRunner whose PostTask invocations result in scheduling tasks
diff --git a/src/base/task_scheduler/task_scheduler_impl.cc b/src/base/task_scheduler/task_scheduler_impl.cc
index f323310..9d0320c 100644
--- a/src/base/task_scheduler/task_scheduler_impl.cc
+++ b/src/base/task_scheduler/task_scheduler_impl.cc
@@ -122,7 +122,7 @@
 void TaskSchedulerImpl::PostDelayedTaskWithTraits(
     const tracked_objects::Location& from_here,
     const TaskTraits& traits,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   // Post |task| as part of a one-off single-task Sequence.
   GetWorkerPoolForTraits(traits)->PostTaskWithSequence(
@@ -252,10 +252,11 @@
     // Passing pointers to objects owned by |this| to
     // SchedulerWorkerPoolImpl::Create() is safe because a TaskSchedulerImpl
     // can't be deleted before all its worker pools have been joined.
-    worker_pools_.push_back(SchedulerWorkerPoolImpl::Create(
-        worker_pool_params, re_enqueue_sequence_callback, task_tracker_.get(),
+    worker_pools_.push_back(MakeUnique<SchedulerWorkerPoolImpl>(
+        worker_pool_params.name(), worker_pool_params.priority_hint(),
+        re_enqueue_sequence_callback, task_tracker_.get(),
         delayed_task_manager_.get()));
-    CHECK(worker_pools_.back());
+    worker_pools_.back()->Start(worker_pool_params);
   }
 }
 
diff --git a/src/base/task_scheduler/task_scheduler_impl.h b/src/base/task_scheduler/task_scheduler_impl.h
index 4a048c9..1e31888 100644
--- a/src/base/task_scheduler/task_scheduler_impl.h
+++ b/src/base/task_scheduler/task_scheduler_impl.h
@@ -62,7 +62,7 @@
   // TaskScheduler:
   void PostDelayedTaskWithTraits(const tracked_objects::Location& from_here,
                                  const TaskTraits& traits,
-                                 Closure task,
+                                 OnceClosure task,
                                  TimeDelta delay) override;
   scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
       const TaskTraits& traits) override;
diff --git a/src/base/task_scheduler/task_tracker_unittest.cc b/src/base/task_scheduler/task_tracker_unittest.cc
index 85378b6..0005e6c 100644
--- a/src/base/task_scheduler/task_tracker_unittest.cc
+++ b/src/base/task_scheduler/task_tracker_unittest.cc
@@ -263,24 +263,34 @@
 }
 
 TEST_P(TaskSchedulerTaskTrackerTest, WillPostAndRunLongTaskBeforeShutdown) {
-  // Create a task that will block until |event| is signaled.
-  WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC,
-                      WaitableEvent::InitialState::NOT_SIGNALED);
+  // Create a task that signals |task_running| and blocks until |task_barrier|
+  // is signaled.
+  WaitableEvent task_running(WaitableEvent::ResetPolicy::AUTOMATIC,
+                             WaitableEvent::InitialState::NOT_SIGNALED);
+  WaitableEvent task_barrier(WaitableEvent::ResetPolicy::AUTOMATIC,
+                             WaitableEvent::InitialState::NOT_SIGNALED);
   auto blocked_task = base::MakeUnique<Task>(
-      FROM_HERE, Bind(&WaitableEvent::Wait, Unretained(&event)),
+      FROM_HERE,
+      Bind(
+          [](WaitableEvent* task_running, WaitableEvent* task_barrier) {
+            task_running->Signal();
+            task_barrier->Wait();
+          },
+          Unretained(&task_running), base::Unretained(&task_barrier)),
       TaskTraits().WithBaseSyncPrimitives().WithShutdownBehavior(GetParam()),
       TimeDelta());
 
   // Inform |task_tracker_| that |blocked_task| will be posted.
   EXPECT_TRUE(tracker_.WillPostTask(blocked_task.get()));
 
-  // Run the task asynchronouly.
+  // Create a thread to run the task. Wait until the task starts running.
   ThreadPostingAndRunningTask thread_running_task(
       &tracker_, std::move(blocked_task),
       ThreadPostingAndRunningTask::Action::RUN, false);
   thread_running_task.Start();
+  task_running.Wait();
 
-  // Initiate shutdown while the task is running.
+  // Initiate shutdown after the task has been scheduled.
   CallShutdownAsync();
 
   if (GetParam() == TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN) {
@@ -292,7 +302,7 @@
   }
 
   // Unblock the task.
-  event.Signal();
+  task_barrier.Signal();
   thread_running_task.Join();
 
   // Shutdown should now complete for a non CONTINUE_ON_SHUTDOWN task.
diff --git a/src/base/template_util.h b/src/base/template_util.h
index 4255210..536cad8 100644
--- a/src/base/template_util.h
+++ b/src/base/template_util.h
@@ -12,17 +12,6 @@
 
 #include "build/build_config.h"
 
-// This hacks around libstdc++ 4.6 missing stuff in type_traits, while we need
-// to support it.
-#define CR_GLIBCXX_4_7_0 20120322
-#define CR_GLIBCXX_4_5_4 20120702
-#define CR_GLIBCXX_4_6_4 20121127
-#if defined(__GLIBCXX__) &&                                               \
-    (__GLIBCXX__ < CR_GLIBCXX_4_7_0 || __GLIBCXX__ == CR_GLIBCXX_4_5_4 || \
-     __GLIBCXX__ == CR_GLIBCXX_4_6_4)
-#define CR_USE_FALLBACKS_FOR_OLD_GLIBCXX
-#endif
-
 // Some versions of libstdc++ have partial support for type_traits, but misses
 // a smaller subset while removing some of the older non-standard stuff. Assume
 // that all versions below 5.0 fall in this category, along with one 5.0
@@ -51,46 +40,8 @@
 template <class T> struct is_non_const_reference<T&> : std::true_type {};
 template <class T> struct is_non_const_reference<const T&> : std::false_type {};
 
-// is_assignable
-
 namespace internal {
 
-template <typename First, typename Second>
-struct SelectSecond {
-  using type = Second;
-};
-
-struct Any {
-  Any(...);
-};
-
-// True case: If |Lvalue| can be assigned to from |Rvalue|, then the return
-// value is a true_type.
-template <class Lvalue, class Rvalue>
-typename internal::SelectSecond<
-    decltype((std::declval<Lvalue>() = std::declval<Rvalue>())),
-    std::true_type>::type
-IsAssignableTest(Lvalue&&, Rvalue&&);
-
-// False case: Otherwise the return value is a false_type.
-template <class Rvalue>
-std::false_type IsAssignableTest(internal::Any, Rvalue&&);
-
-// Default case: Neither Lvalue nor Rvalue is void. Uses IsAssignableTest to
-// determine the type of IsAssignableImpl.
-template <class Lvalue,
-          class Rvalue,
-          bool = std::is_void<Lvalue>::value || std::is_void<Rvalue>::value>
-struct IsAssignableImpl
-    : public std::common_type<decltype(
-          internal::IsAssignableTest(std::declval<Lvalue>(),
-                                     std::declval<Rvalue>()))>::type {};
-
-// Void case: Either Lvalue or Rvalue is void. Then the type of IsAssignableTest
-// is false_type.
-template <class Lvalue, class Rvalue>
-struct IsAssignableImpl<Lvalue, Rvalue, true> : public std::false_type {};
-
 // Uses expression SFINAE to detect whether using operator<< would work.
 template <typename T, typename = void>
 struct SupportsOstreamOperator : std::false_type {};
@@ -102,56 +53,10 @@
 
 }  // namespace internal
 
-// TODO(crbug.com/554293): Remove this when all platforms have this in the std
-// namespace.
-template <class Lvalue, class Rvalue>
-struct is_assignable : public internal::IsAssignableImpl<Lvalue, Rvalue> {};
-
-// is_copy_assignable is true if a T const& is assignable to a T&.
-// TODO(crbug.com/554293): Remove this when all platforms have this in the std
-// namespace.
-template <class T>
-struct is_copy_assignable
-    : public is_assignable<typename std::add_lvalue_reference<T>::type,
-                           typename std::add_lvalue_reference<
-                               typename std::add_const<T>::type>::type> {};
-
-// is_move_assignable is true if a T&& is assignable to a T&.
-// TODO(crbug.com/554293): Remove this when all platforms have this in the std
-// namespace.
-template <class T>
-struct is_move_assignable
-    : public is_assignable<typename std::add_lvalue_reference<T>::type,
-                           const typename std::add_rvalue_reference<T>::type> {
-};
-
-// underlying_type produces the integer type backing an enum type.
-// TODO(crbug.com/554293): Remove this when all platforms have this in the std
-// namespace.
-#if defined(CR_USE_FALLBACKS_FOR_OLD_GLIBCXX)
-template <typename T>
-struct underlying_type {
-  using type = __underlying_type(T);
-};
-#else
-template <typename T>
-using underlying_type = std::underlying_type<T>;
-#endif
-
-// TODO(crbug.com/554293): Remove this when all platforms have this in the std
-// namespace.
-#if defined(CR_USE_FALLBACKS_FOR_OLD_GLIBCXX)
-template <class T>
-using is_trivially_destructible = std::has_trivial_destructor<T>;
-#else
-template <class T>
-using is_trivially_destructible = std::is_trivially_destructible<T>;
-#endif
-
 // is_trivially_copyable is especially hard to get right.
 // - Older versions of libstdc++ will fail to have it like they do for other
-//   type traits. In this case we should provide it based on compiler
-//   intrinsics. This is covered by the CR_USE_FALLBACKS_FOR_OLD_GLIBCXX define.
+//   type traits. This has become a subset of the second point, but used to be
+//   handled independently.
 // - An experimental release of gcc includes most of type_traits but misses
 //   is_trivially_copyable, so we still have to avoid using libstdc++ in this
 //   case, which is covered by CR_USE_FALLBACKS_FOR_OLD_EXPERIMENTAL_GLIBCXX.
@@ -172,8 +77,7 @@
 
 // TODO(crbug.com/554293): Remove this when all platforms have this in the std
 // namespace and it works with gcc as needed.
-#if defined(CR_USE_FALLBACKS_FOR_OLD_GLIBCXX) ||              \
-    defined(CR_USE_FALLBACKS_FOR_OLD_EXPERIMENTAL_GLIBCXX) || \
+#if defined(CR_USE_FALLBACKS_FOR_OLD_EXPERIMENTAL_GLIBCXX) || \
     defined(CR_USE_FALLBACKS_FOR_GCC_WITH_LIBCXX)
 template <typename T>
 struct is_trivially_copyable {
@@ -193,7 +97,6 @@
 
 }  // namespace base
 
-#undef CR_USE_FALLBACKS_FOR_OLD_GLIBCXX
 #undef CR_USE_FALLBACKS_FOR_GCC_WITH_LIBCXX
 #undef CR_USE_FALLBACKS_FOR_OLD_EXPERIMENTAL_GLIBCXX
 
diff --git a/src/base/template_util_unittest.cc b/src/base/template_util_unittest.cc
index 9215964..70d28c8 100644
--- a/src/base/template_util_unittest.cc
+++ b/src/base/template_util_unittest.cc
@@ -30,39 +30,6 @@
               "IsNonConstReference");
 static_assert(is_non_const_reference<int&>::value, "IsNonConstReference");
 
-class AssignParent {};
-class AssignChild : AssignParent {};
-
-// is_assignable<Type1, Type2>
-static_assert(!is_assignable<int, int>::value, "IsAssignable");  // 1 = 1;
-static_assert(!is_assignable<int, double>::value, "IsAssignable");
-static_assert(is_assignable<int&, int>::value, "IsAssignable");
-static_assert(is_assignable<int&, double>::value, "IsAssignable");
-static_assert(is_assignable<int&, int&>::value, "IsAssignable");
-static_assert(is_assignable<int&, int const&>::value, "IsAssignable");
-static_assert(!is_assignable<int const&, int>::value, "IsAssignable");
-static_assert(!is_assignable<AssignParent&, AssignChild>::value,
-              "IsAssignable");
-static_assert(!is_assignable<AssignChild&, AssignParent>::value,
-              "IsAssignable");
-
-struct AssignCopy {};
-struct AssignNoCopy {
-  AssignNoCopy& operator=(AssignNoCopy&&) { return *this; }
-  AssignNoCopy& operator=(const AssignNoCopy&) = delete;
-};
-struct AssignNoMove {
-  AssignNoMove& operator=(AssignNoMove&&) = delete;
-  AssignNoMove& operator=(const AssignNoMove&) = delete;
-};
-
-static_assert(is_copy_assignable<AssignCopy>::value, "IsCopyAssignable");
-static_assert(!is_copy_assignable<AssignNoCopy>::value, "IsCopyAssignable");
-
-static_assert(is_move_assignable<AssignCopy>::value, "IsMoveAssignable");
-static_assert(is_move_assignable<AssignNoCopy>::value, "IsMoveAssignable");
-static_assert(!is_move_assignable<AssignNoMove>::value, "IsMoveAssignable");
-
 // A few standard types that definitely support printing.
 static_assert(internal::SupportsOstreamOperator<int>::value,
               "ints should be printable");
@@ -102,28 +69,5 @@
     internal::SupportsOstreamOperator<const StructWithOperator&>::value,
     "struct with operator<< should be printable by const ref");
 
-// underlying type of enums
-static_assert(std::is_integral<underlying_type<SimpleEnum>::type>::value,
-              "simple enum must have some integral type");
-static_assert(
-    std::is_same<underlying_type<EnumWithExplicitType>::type, uint64_t>::value,
-    "explicit type must be detected");
-static_assert(std::is_same<underlying_type<ScopedEnum>::type, int>::value,
-              "scoped enum defaults to int");
-
-struct TriviallyDestructible {
-  int field;
-};
-
-class NonTriviallyDestructible {
-  ~NonTriviallyDestructible() {}
-};
-
-static_assert(is_trivially_destructible<int>::value, "IsTriviallyDestructible");
-static_assert(is_trivially_destructible<TriviallyDestructible>::value,
-              "IsTriviallyDestructible");
-static_assert(!is_trivially_destructible<NonTriviallyDestructible>::value,
-              "IsTriviallyDestructible");
-
 }  // namespace
 }  // namespace base
diff --git a/src/base/test/BUILD.gn b/src/base/test/BUILD.gn
index fc0350f..d79d7f3 100644
--- a/src/base/test/BUILD.gn
+++ b/src/base/test/BUILD.gn
@@ -84,6 +84,8 @@
     "scoped_mock_time_message_loop_task_runner.h",
     "scoped_path_override.cc",
     "scoped_path_override.h",
+    "scoped_task_environment.cc",
+    "scoped_task_environment.h",
     "scoped_task_scheduler.cc",
     "scoped_task_scheduler.h",
     "sequenced_task_runner_test_template.cc",
@@ -354,6 +356,7 @@
     ]
     srcjar_deps = [ ":test_support_java_aidl" ]
     java_files = [
+      "android/java/src/org/chromium/base/ChildProcessConstants.java",
       "android/java/src/org/chromium/base/MainReturnCodeResult.java",
       "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java",
       "android/java/src/org/chromium/base/MultiprocessTestClientService.java",
@@ -372,7 +375,9 @@
       "//base/android/java/src",
     ]
     sources = [
+      "android/java/src/org/chromium/base/ITestCallback.aidl",
       "android/java/src/org/chromium/base/ITestClient.aidl",
+      "android/java/src/org/chromium/base/ITestController.aidl",
     ]
   }
 }
diff --git a/src/base/test/android/java/src/org/chromium/base/ChildProcessConstants.java b/src/base/test/android/java/src/org/chromium/base/ChildProcessConstants.java
new file mode 100644
index 0000000..457c59c
--- /dev/null
+++ b/src/base/test/android/java/src/org/chromium/base/ChildProcessConstants.java
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base;
+
+/**
+ * Constants to be used by child processes.
+ */
+public interface ChildProcessConstants {
+    // Key for the command line.
+    public static final String EXTRA_COMMAND_LINE = "org.chromium.base.extra.command_line";
+
+    // Key for the file descriptors that should be mapped in the child process..
+    public static final String EXTRA_FILES = "org.chromium.base.extra.extra_files";
+}
diff --git a/src/base/test/android/java/src/org/chromium/base/ContentUriTestUtils.java b/src/base/test/android/java/src/org/chromium/base/ContentUriTestUtils.java
index f6d5f60..fe9d540 100644
--- a/src/base/test/android/java/src/org/chromium/base/ContentUriTestUtils.java
+++ b/src/base/test/android/java/src/org/chromium/base/ContentUriTestUtils.java
@@ -5,7 +5,6 @@
 package org.chromium.base;
 
 import android.content.ContentValues;
-import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
 import android.provider.MediaStore;
@@ -20,19 +19,16 @@
      * Insert an image into the MediaStore, and return the content URI. If the
      * image already exists in the MediaStore, just retrieve the URI.
      *
-     * @param context Application context.
      * @param path Path to the image file.
      * @return Content URI of the image.
      */
     @CalledByNative
-    private static String insertImageIntoMediaStore(Context context, String path) {
+    private static String insertImageIntoMediaStore(String path) {
         // Check whether the content URI exists.
-        Cursor c = context.getContentResolver().query(
+        Cursor c = ContextUtils.getApplicationContext().getContentResolver().query(
                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
-                new String[] { MediaStore.Video.VideoColumns._ID },
-                MediaStore.Images.Media.DATA + " LIKE ?",
-                new String[] { path },
-                null);
+                new String[] {MediaStore.Video.VideoColumns._ID},
+                MediaStore.Images.Media.DATA + " LIKE ?", new String[] {path}, null);
         if (c != null && c.getCount() > 0) {
             c.moveToFirst();
             int id = c.getInt(0);
@@ -43,7 +39,7 @@
         // Insert the content URI into MediaStore.
         ContentValues values = new ContentValues();
         values.put(MediaStore.MediaColumns.DATA, path);
-        Uri uri = context.getContentResolver().insert(
+        Uri uri = ContextUtils.getApplicationContext().getContentResolver().insert(
                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
         return uri.toString();
     }
diff --git a/src/base/test/android/java/src/org/chromium/base/ITestCallback.aidl b/src/base/test/android/java/src/org/chromium/base/ITestCallback.aidl
new file mode 100644
index 0000000..48d9994
--- /dev/null
+++ b/src/base/test/android/java/src/org/chromium/base/ITestCallback.aidl
@@ -0,0 +1,16 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base;
+
+import org.chromium.base.ITestController;
+import org.chromium.base.MainReturnCodeResult;
+import org.chromium.base.process_launcher.FileDescriptorInfo;
+
+/**
+ * This interface is called by the child process to pass its controller to its parent.
+ */
+oneway interface ITestCallback {
+  void childConnected(ITestController controller);
+}
diff --git a/src/base/test/android/java/src/org/chromium/base/ITestClient.aidl b/src/base/test/android/java/src/org/chromium/base/ITestClient.aidl
index 22acdfb..227725c 100644
--- a/src/base/test/android/java/src/org/chromium/base/ITestClient.aidl
+++ b/src/base/test/android/java/src/org/chromium/base/ITestClient.aidl
@@ -9,37 +9,22 @@
 
 /**
  * This interface is used to control child processes.
+ * TODO(jcivelli): http://crbug.com/702316 remove this once ChildProcessLauncher has moved to base/.
  */
 interface ITestClient {
+  // On the first call to this method, the service will record the calling PID
+  // and return true. Subsequent calls will only return true if the calling PID
+  // is the same as the recorded one.
+  boolean bindToCaller();
+
   /**
    * Runs the native <code>main</code> method in that service's process.
-   * @param args the arguments passed to <code>main</code>
-   * @param fdsToMap a list of file descriptors that are mapped in the native code
-   * in <code>base::GlobalDescriptors</code>.
+   * @param args contains the arguments passed to <code>main</code> as well as the files to be
+   * mapped in the service process, see <code>org.chromium.base.ChildProcessConstants</code>.
+   * @param callback a callback used to communicate back to the parent process. (until we use the
+   * common launcher in base/, we'll use this test implentation and this callback is an
+   * ITestCallback).
    * @return the process ID for the service's process.
    */
-  int launch(in String[] args, in FileDescriptorInfo[] fdsToMap);
-
-  /**
-   * Blocks until the <code>main</code> method started with {@link #launch()} returns, or returns
-   * immediately if main has already returned.
-   * @param timeoutMs time in milliseconds after which this method returns even if the main method
-   * has not returned yet.
-   * @return a result containing whether a timeout occured and the value returned by the
-   * <code>main</code> method
-   */
-  MainReturnCodeResult waitForMainToReturn(int timeoutMs);
-
-  /**
-   * Forces the service process to terminate and block until the process stops.
-   * @param exitCode the exit code the process should terminate with.
-   * @return always true, a return value is only returned to force the call to be synchronous.
-   */
-  boolean forceStopSynchronous(int exitCode);
-
-  /**
-   * Forces the service process to terminate.
-   * @param exitCode the exit code the process should terminate with.
-   */
-  void forceStop(int exitCode);
+  int setupConnection(in Bundle args, IBinder callback);
 }
diff --git a/src/base/test/android/java/src/org/chromium/base/ITestController.aidl b/src/base/test/android/java/src/org/chromium/base/ITestController.aidl
new file mode 100644
index 0000000..4bf7429
--- /dev/null
+++ b/src/base/test/android/java/src/org/chromium/base/ITestController.aidl
@@ -0,0 +1,36 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base;
+
+import org.chromium.base.MainReturnCodeResult;
+import org.chromium.base.process_launcher.FileDescriptorInfo;
+
+/**
+ * This interface is used to control child processes.
+ */
+interface ITestController {
+   /**
+   * Blocks until the <code>main</code> method started with {@link #launch()} returns, or returns
+   * immediately if main has already returned.
+   * @param timeoutMs time in milliseconds after which this method returns even if the main method
+   * has not returned yet.
+   * @return a result containing whether a timeout occured and the value returned by the
+   * <code>main</code> method
+   */
+  MainReturnCodeResult waitForMainToReturn(int timeoutMs);
+
+  /**
+   * Forces the service process to terminate and block until the process stops.
+   * @param exitCode the exit code the process should terminate with.
+   * @return always true, a return value is only returned to force the call to be synchronous.
+   */
+  boolean forceStopSynchronous(int exitCode);
+
+  /**
+   * Forces the service process to terminate.
+   * @param exitCode the exit code the process should terminate with.
+   */
+  void forceStop(int exitCode);
+}
diff --git a/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java b/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
index 71eadb2..d5dca6c 100644
--- a/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
+++ b/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
@@ -8,6 +8,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
@@ -21,6 +22,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
+import java.util.concurrent.CountDownLatch;
 
 import javax.annotation.concurrent.GuardedBy;
 
@@ -99,19 +101,39 @@
     }
 
     private static class ClientServiceConnection implements ServiceConnection {
-        private final String[] mCommandLine;
-        private final FileDescriptorInfo[] mFilesToMap;
+        private final Bundle mSetupBundle;
         private final Object mConnectedLock = new Object();
+        private final CountDownLatch mPidReceived = new CountDownLatch(1);
         private final int mSlot;
         private ITestClient mService = null;
         @GuardedBy("mConnectedLock")
         private boolean mConnected;
         private int mPid;
+        private ITestController mTestController;
+        private final ITestCallback.Stub mCallback = new ITestCallback.Stub() {
+            public void childConnected(ITestController controller) {
+                mTestController = controller;
+                // This method can be called before onServiceConnected below has set the PID.
+                // Wait for mPid to be set before notifying.
+                try {
+                    mPidReceived.await();
+                } catch (InterruptedException ie) {
+                    Log.e(TAG, "Interrupted while waiting for connection PID.");
+                    return;
+                }
+                // Now we are fully initialized, notify clients.
+                synchronized (mConnectedLock) {
+                    mConnected = true;
+                    mConnectedLock.notifyAll();
+                }
+            }
+        };
 
         ClientServiceConnection(int slot, String[] commandLine, FileDescriptorInfo[] filesToMap) {
             mSlot = slot;
-            mCommandLine = commandLine;
-            mFilesToMap = filesToMap;
+            mSetupBundle = new Bundle();
+            mSetupBundle.putStringArray(ChildProcessConstants.EXTRA_COMMAND_LINE, commandLine);
+            mSetupBundle.putParcelableArray(ChildProcessConstants.EXTRA_FILES, filesToMap);
         }
 
         public void waitForConnection() {
@@ -130,11 +152,12 @@
         public void onServiceConnected(ComponentName className, IBinder service) {
             try {
                 mService = ITestClient.Stub.asInterface(service);
-                mPid = mService.launch(mCommandLine, mFilesToMap);
-                synchronized (mConnectedLock) {
-                    mConnected = true;
-                    mConnectedLock.notifyAll();
+                if (!mService.bindToCaller()) {
+                    Log.e(TAG, "Failed to bind to child service");
+                    return;
                 }
+                mPid = mService.setupConnection(mSetupBundle, mCallback);
+                mPidReceived.countDown();
             } catch (RemoteException e) {
                 Log.e(TAG, "Connect failed");
             }
@@ -149,8 +172,8 @@
             sConnectionAllocator.freeConnection(this);
         }
 
-        public ITestClient getService() {
-            return mService;
+        public ITestController getTestController() {
+            return mTestController;
         }
 
         public String getServiceClassName() {
@@ -180,13 +203,12 @@
      * Spawns and connects to a child process.
      * May not be called from the main thread.
      *
-     * @param context context used to obtain the application context.
      * @param commandLine the child process command line argv.
      * @return the PID of the started process or 0 if the process could not be started.
      */
     @CalledByNative
-    private static int launchClient(final Context context, final String[] commandLine,
-            final FileDescriptorInfo[] filesToMap) {
+    private static int launchClient(
+            final String[] commandLine, final FileDescriptorInfo[] filesToMap) {
         if (ThreadUtils.runningOnUiThread()) {
             // This can't be called on the main thread as the native side will block until
             // onServiceConnected above is called, which cannot happen if the main thread is
@@ -198,10 +220,11 @@
                 sConnectionAllocator.allocateConnection(commandLine, filesToMap);
         Intent intent = new Intent();
         String className = connection.getServiceClassName();
-        intent.setComponent(new ComponentName(context.getPackageName(), className));
-        if (!context.bindService(
+        String packageName = ContextUtils.getApplicationContext().getPackageName();
+        intent.setComponent(new ComponentName(packageName, className));
+        if (!ContextUtils.getApplicationContext().bindService(
                     intent, connection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT)) {
-            Log.e(TAG, "Failed to bind service: " + context.getPackageName() + "." + className);
+            Log.e(TAG, "Failed to bind service: " + packageName + "." + className);
             sConnectionAllocator.freeConnection(connection);
             return 0;
         }
@@ -215,32 +238,30 @@
      * Blocks until the main method invoked by a previous call to launchClient terminates or until
      * the specified time-out expires.
      * Returns immediately if main has already returned.
-     * @param context context used to obtain the application context.
      * @param pid the process ID that was returned by the call to launchClient
      * @param timeoutMs the timeout in milliseconds after which the method returns even if main has
      *        not returned.
      * @return the return code returned by the main method or whether it timed-out.
      */
     @CalledByNative
-    private static MainReturnCodeResult waitForMainToReturn(
-            Context context, int pid, int timeoutMs) {
+    private static MainReturnCodeResult waitForMainToReturn(int pid, int timeoutMs) {
         ClientServiceConnection connection = sConnectionAllocator.getConnectionByPid(pid);
         if (connection == null) {
             Log.e(TAG, "waitForMainToReturn called on unknown connection for pid " + pid);
             return null;
         }
         try {
-            return connection.getService().waitForMainToReturn(timeoutMs);
+            return connection.getTestController().waitForMainToReturn(timeoutMs);
         } catch (RemoteException e) {
             Log.e(TAG, "Remote call to waitForMainToReturn failed.");
             return null;
         } finally {
-            freeConnection(context, connection);
+            freeConnection(connection);
         }
     }
 
     @CalledByNative
-    private static boolean terminate(Context context, int pid, int exitCode, boolean wait) {
+    private static boolean terminate(int pid, int exitCode, boolean wait) {
         ClientServiceConnection connection = sConnectionAllocator.getConnectionByPid(pid);
         if (connection == null) {
             Log.e(TAG, "terminate called on unknown connection for pid " + pid);
@@ -248,21 +269,21 @@
         }
         try {
             if (wait) {
-                connection.getService().forceStopSynchronous(exitCode);
+                connection.getTestController().forceStopSynchronous(exitCode);
             } else {
-                connection.getService().forceStop(exitCode);
+                connection.getTestController().forceStop(exitCode);
             }
         } catch (RemoteException e) {
             // We expect this failure, since the forceStop's service implementation calls
             // System.exit().
         } finally {
-            freeConnection(context, connection);
+            freeConnection(connection);
         }
         return true;
     }
 
-    private static void freeConnection(Context context, ClientServiceConnection connection) {
-        context.unbindService(connection);
+    private static void freeConnection(ClientServiceConnection connection) {
+        ContextUtils.getApplicationContext().unbindService(connection);
         sConnectionAllocator.freeConnection(connection);
     }
 
diff --git a/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java b/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
index d601afe..58a6c02 100644
--- a/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
+++ b/src/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
@@ -6,9 +6,12 @@
 
 import android.app.Service;
 import android.content.Intent;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.Parcelable;
 import android.os.Process;
+import android.os.RemoteException;
 
 import org.chromium.base.annotations.SuppressFBWarnings;
 import org.chromium.base.library_loader.LibraryLoader;
@@ -34,29 +37,7 @@
     @GuardedBy("mResultLock")
     private MainReturnCodeResult mResult;
 
-    private final ITestClient.Stub mBinder = new ITestClient.Stub() {
-        @Override
-        public int launch(final String[] commandLine, FileDescriptorInfo[] fdsToMap) {
-            final int[] fdKeys = new int[fdsToMap.length];
-            final int[] fdFds = new int[fdsToMap.length];
-            for (int i = 0; i < fdsToMap.length; i++) {
-                fdKeys[i] = fdsToMap[i].id;
-                // Take ownership of the file descriptor so they outlive the FileDescriptorInfo
-                // instances. Native code will own them.
-                fdFds[i] = fdsToMap[i].fd.detachFd();
-            }
-            // Don't run main directly, it would block and the response would not be returned.
-            // We post to the main thread as this thread does not have a Looper.
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    int result = MainRunner.runMain(commandLine, fdKeys, fdFds);
-                    setMainReturnValue(result);
-                }
-            });
-            return Process.myPid();
-        }
-
+    private final ITestController.Stub mTestController = new ITestController.Stub() {
         @SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE")
         @Override
         public MainReturnCodeResult waitForMainToReturn(int timeoutMs) {
@@ -91,6 +72,63 @@
         }
     };
 
+    private final ITestClient.Stub mBinder = new ITestClient.Stub() {
+        @Override
+        public boolean bindToCaller() {
+            return true;
+        }
+
+        @Override
+        public int setupConnection(Bundle args, final IBinder callback) {
+            // Required to unparcel FileDescriptorInfo.
+            args.setClassLoader(getApplicationContext().getClassLoader());
+
+            final String[] commandLine =
+                    args.getStringArray(ChildProcessConstants.EXTRA_COMMAND_LINE);
+            final Parcelable[] fdInfosAsParcelable =
+                    args.getParcelableArray(ChildProcessConstants.EXTRA_FILES);
+
+            FileDescriptorInfo[] fdsToMap = new FileDescriptorInfo[fdInfosAsParcelable.length];
+            System.arraycopy(fdInfosAsParcelable, 0, fdsToMap, 0, fdInfosAsParcelable.length);
+
+            final int[] fdKeys = new int[fdsToMap.length];
+            final int[] fdFds = new int[fdsToMap.length];
+            for (int i = 0; i < fdsToMap.length; i++) {
+                fdKeys[i] = fdsToMap[i].id;
+                // Take ownership of the file descriptor so they outlive the FileDescriptorInfo
+                // instances. Native code will own them.
+                fdFds[i] = fdsToMap[i].fd.detachFd();
+            }
+
+            // Prevent potential deadlocks by letting this method return before calling back to the
+            // launcher: the childConnected implementation on the launcher side might block until
+            // this method returns.
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        ITestCallback testCallback = ITestCallback.Stub.asInterface(callback);
+                        testCallback.childConnected(mTestController);
+                    } catch (RemoteException re) {
+                        Log.e(TAG, "Failed to notify parent process of connection.");
+                    }
+                }
+            });
+
+            // Don't run main directly, it would block and the response would not be returned.
+            // We post to the main thread as this thread does not have a Looper.
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    int result = MainRunner.runMain(commandLine, fdKeys, fdFds);
+                    setMainReturnValue(result);
+                }
+            });
+
+            return Process.myPid();
+        }
+    };
+
     @SuppressFBWarnings("DM_EXIT")
     @Override
     public void onCreate() {
diff --git a/src/base/test/multiprocess_test_android.cc b/src/base/test/multiprocess_test_android.cc
index a1b8fcb..f502552 100644
--- a/src/base/test/multiprocess_test_android.cc
+++ b/src/base/test/multiprocess_test_android.cc
@@ -7,7 +7,6 @@
 #include <string.h>
 #include <vector>
 
-#include "base/android/context_utils.h"
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/scoped_java_ref.h"
@@ -54,7 +53,7 @@
   android::ScopedJavaLocalRef<jobjectArray> j_argv =
       android::ToJavaArrayOfStrings(env, command_line.argv());
   jint pid = android::Java_MultiprocessTestClientLauncher_launchClient(
-      env, android::GetApplicationContext(), j_argv, fds);
+      env, j_argv, fds);
 
   SpawnChildResult result;
   result.process = Process(pid);
@@ -69,8 +68,7 @@
 
   base::android::ScopedJavaLocalRef<jobject> result_code =
       android::Java_MultiprocessTestClientLauncher_waitForMainToReturn(
-          env, android::GetApplicationContext(), process.Pid(),
-          static_cast<int32_t>(timeout.InMilliseconds()));
+          env, process.Pid(), static_cast<int32_t>(timeout.InMilliseconds()));
   if (result_code.is_null() ||
       Java_MainReturnCodeResult_hasTimedOut(env, result_code)) {
     return false;
@@ -88,7 +86,7 @@
   DCHECK(env);
 
   return android::Java_MultiprocessTestClientLauncher_terminate(
-      env, android::GetApplicationContext(), process.Pid(), exit_code, wait);
+      env, process.Pid(), exit_code, wait);
 }
 
 }  // namespace base
diff --git a/src/base/test/null_task_runner.cc b/src/base/test/null_task_runner.cc
index 66bdf6f..476af63 100644
--- a/src/base/test/null_task_runner.cc
+++ b/src/base/test/null_task_runner.cc
@@ -11,14 +11,14 @@
 NullTaskRunner::~NullTaskRunner() {}
 
 bool NullTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
-                                     Closure task,
+                                     OnceClosure task,
                                      base::TimeDelta delay) {
   return false;
 }
 
 bool NullTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     base::TimeDelta delay) {
   return false;
 }
diff --git a/src/base/test/null_task_runner.h b/src/base/test/null_task_runner.h
index a47e7b2..3dd9d7e 100644
--- a/src/base/test/null_task_runner.h
+++ b/src/base/test/null_task_runner.h
@@ -20,10 +20,10 @@
   NullTaskRunner();
 
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       base::Closure task,
+                       base::OnceClosure task,
                        base::TimeDelta delay) override;
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  base::Closure task,
+                                  base::OnceClosure task,
                                   base::TimeDelta delay) override;
   // Always returns true to avoid triggering DCHECKs.
   bool RunsTasksOnCurrentThread() const override;
diff --git a/src/base/test/scoped_async_task_scheduler.cc b/src/base/test/scoped_async_task_scheduler.cc
index dcc5c15..397243e 100644
--- a/src/base/test/scoped_async_task_scheduler.cc
+++ b/src/base/test/scoped_async_task_scheduler.cc
@@ -4,37 +4,33 @@
 
 #include "base/test/scoped_async_task_scheduler.h"
 
-#include <vector>
-
-#include "base/bind.h"
 #include "base/logging.h"
 #include "base/task_scheduler/scheduler_worker_pool_params.h"
 #include "base/task_scheduler/task_scheduler.h"
-#include "base/task_scheduler/task_scheduler_impl.h"
 
 namespace base {
 namespace test {
 
 ScopedAsyncTaskScheduler::ScopedAsyncTaskScheduler() {
   DCHECK(!TaskScheduler::GetInstance());
+
+  // Instantiate a TaskScheduler with 1 thread in each of its 4 pools. Threads
+  // stay alive even when they don't have work.
   constexpr int kMaxThreads = 1;
   const TimeDelta kSuggestedReclaimTime = TimeDelta::Max();
-  std::vector<SchedulerWorkerPoolParams> worker_pool_params_vector;
-  worker_pool_params_vector.emplace_back(
-      "ScopedAsyncTaskScheduler", ThreadPriority::NORMAL,
-      SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY, kMaxThreads,
+  const SchedulerWorkerPoolParams worker_pool_params(
+      SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
       kSuggestedReclaimTime);
   TaskScheduler::CreateAndSetDefaultTaskScheduler(
-      worker_pool_params_vector,
-      Bind([](const TaskTraits&) -> size_t { return 0; }));
+      "ScopedAsync", {worker_pool_params, worker_pool_params,
+                      worker_pool_params, worker_pool_params});
   task_scheduler_ = TaskScheduler::GetInstance();
 }
 
 ScopedAsyncTaskScheduler::~ScopedAsyncTaskScheduler() {
   DCHECK_EQ(TaskScheduler::GetInstance(), task_scheduler_);
   TaskScheduler::GetInstance()->Shutdown();
-  static_cast<internal::TaskSchedulerImpl*>(TaskScheduler::GetInstance())
-      ->JoinForTesting();
+  TaskScheduler::GetInstance()->JoinForTesting();
   TaskScheduler::SetInstance(nullptr);
 }
 
diff --git a/src/base/test/scoped_async_task_scheduler.h b/src/base/test/scoped_async_task_scheduler.h
index 3fec517..5d29e53 100644
--- a/src/base/test/scoped_async_task_scheduler.h
+++ b/src/base/test/scoped_async_task_scheduler.h
@@ -17,6 +17,11 @@
 //
 // To wait until all tasks posted without a delay have run, use
 // TaskScheduler::GetInstance()->FlushForTesting().
+//
+// Deprecated. Use ScopedTaskEnvironment instead. https://crbug.com/708584
+//
+// TODO(fdoray): Replace ScopedAsyncTaskScheduler instances by
+// ScopedTaskEnvironment.
 class ScopedAsyncTaskScheduler {
  public:
   // Registers a single-threaded TaskScheduler.
diff --git a/src/base/test/scoped_task_environment.cc b/src/base/test/scoped_task_environment.cc
new file mode 100644
index 0000000..8744b4a
--- /dev/null
+++ b/src/base/test/scoped_task_environment.cc
@@ -0,0 +1,41 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/test/scoped_task_environment.h"
+
+#include "base/run_loop.h"
+#include "base/task_scheduler/scheduler_worker_pool_params.h"
+#include "base/task_scheduler/task_scheduler.h"
+#include "base/time/time.h"
+
+namespace base {
+namespace test {
+
+ScopedTaskEnvironment::ScopedTaskEnvironment() {
+  DCHECK(!TaskScheduler::GetInstance());
+
+  // Instantiate a TaskScheduler with 1 thread in each of its 4 pools. Threads
+  // stay alive even when they don't have work.
+  constexpr int kMaxThreads = 1;
+  const TimeDelta kSuggestedReclaimTime = TimeDelta::Max();
+  const SchedulerWorkerPoolParams worker_pool_params(
+      SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
+      kSuggestedReclaimTime);
+  TaskScheduler::CreateAndSetDefaultTaskScheduler(
+      "ScopedTaskEnvironment", {worker_pool_params, worker_pool_params,
+                                worker_pool_params, worker_pool_params});
+  task_scheduler_ = TaskScheduler::GetInstance();
+}
+
+ScopedTaskEnvironment::~ScopedTaskEnvironment() {
+  RunLoop().RunUntilIdle();
+
+  DCHECK_EQ(TaskScheduler::GetInstance(), task_scheduler_);
+  TaskScheduler::GetInstance()->Shutdown();
+  TaskScheduler::GetInstance()->JoinForTesting();
+  TaskScheduler::SetInstance(nullptr);
+}
+
+}  // namespace test
+}  // namespace base
diff --git a/src/base/test/scoped_task_environment.h b/src/base/test/scoped_task_environment.h
new file mode 100644
index 0000000..2887d07
--- /dev/null
+++ b/src/base/test/scoped_task_environment.h
@@ -0,0 +1,56 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_TEST_SCOPED_TASK_ENVIRONMENT_H_
+#define BASE_TEST_SCOPED_TASK_ENVIRONMENT_H_
+
+#include "base/macros.h"
+#include "base/message_loop/message_loop.h"
+
+namespace base {
+
+class TaskScheduler;
+
+namespace test {
+
+// ScopedTaskEnvironment allows usage of these APIs within its scope:
+// - (Thread|Sequenced)TaskRunnerHandle, on the thread where it lives
+// - base/task_scheduler/post_task.h, on any thread
+//
+// Tests that need either of these APIs should instantiate a
+// ScopedTaskEnvironment.
+//
+// Tasks posted to the (Thread|Sequenced)TaskRunnerHandle run synchronously when
+// RunLoop::Run(UntilIdle) is called on the thread where the
+// ScopedTaskEnvironment lives.
+//
+// Tasks posted through base/task_scheduler/post_task.h run on dedicated threads
+// as they are posted.
+//
+// Design and future improvements documented in
+// https://docs.google.com/document/d/1QabRo8c7D9LsYY3cEcaPQbOCLo8Tu-6VLykYXyl3Pkk/edit
+class ScopedTaskEnvironment {
+ public:
+  ScopedTaskEnvironment();
+
+  // Runs pending (Thread|Sequenced)TaskRunnerHandle tasks and pending
+  // BLOCK_SHUTDOWN TaskScheduler tasks. Then, unregisters the TaskScheduler and
+  // the (Thread|Sequenced)TaskRunnerHandle.
+  ~ScopedTaskEnvironment();
+
+ private:
+  // Note: |message_loop_| is an implementation detail and will be replaced in
+  // the future, do NOT rely on the presence of a MessageLoop beyond
+  // (Thread|Sequenced)TaskRunnerHandle and RunLoop.
+  MessageLoop message_loop_;
+
+  const TaskScheduler* task_scheduler_ = nullptr;
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedTaskEnvironment);
+};
+
+}  // namespace test
+}  // namespace base
+
+#endif  // BASE_TEST_SCOPED_ASYNC_TASK_SCHEDULER_H_
diff --git a/src/base/test/scoped_task_scheduler.cc b/src/base/test/scoped_task_scheduler.cc
index dbf4936..4020e0e 100644
--- a/src/base/test/scoped_task_scheduler.cc
+++ b/src/base/test/scoped_task_scheduler.cc
@@ -49,7 +49,7 @@
   // TaskScheduler:
   void PostDelayedTaskWithTraits(const tracked_objects::Location& from_here,
                                  const TaskTraits& traits,
-                                 Closure task,
+                                 OnceClosure task,
                                  TimeDelta delay) override;
   scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
       const TaskTraits& traits) override;
@@ -134,10 +134,10 @@
 
   // SingleThreadTaskRunner:
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure closure,
+                       OnceClosure closure,
                        TimeDelta delay) override;
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure closure,
+                                  OnceClosure closure,
                                   TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
@@ -167,7 +167,7 @@
 void TestTaskScheduler::PostDelayedTaskWithTraits(
     const tracked_objects::Location& from_here,
     const TaskTraits& traits,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   CreateTaskRunnerWithTraits(traits)->PostDelayedTask(from_here,
                                                       std::move(task), delay);
@@ -280,7 +280,7 @@
 
 bool TestTaskSchedulerTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure closure,
+    OnceClosure closure,
     TimeDelta delay) {
   auto task =
       MakeUnique<internal::Task>(from_here, std::move(closure), traits_, delay);
@@ -293,7 +293,7 @@
 
 bool TestTaskSchedulerTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure closure,
+    OnceClosure closure,
     TimeDelta delay) {
   // Tasks are never nested within the task scheduler.
   return PostDelayedTask(from_here, std::move(closure), delay);
diff --git a/src/base/test/test_file_util_android.cc b/src/base/test/test_file_util_android.cc
index f773af9..d085f13 100644
--- a/src/base/test/test_file_util_android.cc
+++ b/src/base/test/test_file_util_android.cc
@@ -19,8 +19,7 @@
   ScopedJavaLocalRef<jstring> j_path =
       base::android::ConvertUTF8ToJavaString(env, path.value());
   ScopedJavaLocalRef<jstring> j_uri =
-      Java_ContentUriTestUtils_insertImageIntoMediaStore(
-          env, base::android::GetApplicationContext(), j_path);
+      Java_ContentUriTestUtils_insertImageIntoMediaStore(env, j_path);
   std::string uri = base::android::ConvertJavaStringToUTF8(j_uri);
   return FilePath(uri);
 }
diff --git a/src/base/test/test_mock_time_task_runner.cc b/src/base/test/test_mock_time_task_runner.cc
index a431189..a236acf 100644
--- a/src/base/test/test_mock_time_task_runner.cc
+++ b/src/base/test/test_mock_time_task_runner.cc
@@ -81,7 +81,7 @@
     : public base::TestPendingTask {
   TestOrderedPendingTask();
   TestOrderedPendingTask(const tracked_objects::Location& location,
-                         Closure task,
+                         OnceClosure task,
                          TimeTicks post_time,
                          TimeDelta delay,
                          size_t ordinal,
@@ -106,7 +106,7 @@
 
 TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask(
     const tracked_objects::Location& location,
-    Closure task,
+    OnceClosure task,
     TimeTicks post_time,
     TimeDelta delay,
     size_t ordinal,
@@ -240,7 +240,7 @@
 
 bool TestMockTimeTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   AutoLock scoped_lock(tasks_lock_);
   tasks_.push(TestOrderedPendingTask(from_here, std::move(task), now_ticks_,
@@ -251,7 +251,7 @@
 
 bool TestMockTimeTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   return PostDelayedTask(from_here, std::move(task), delay);
 }
diff --git a/src/base/test/test_mock_time_task_runner.h b/src/base/test/test_mock_time_task_runner.h
index 5c61a36..2f892f5 100644
--- a/src/base/test/test_mock_time_task_runner.h
+++ b/src/base/test/test_mock_time_task_runner.h
@@ -141,10 +141,10 @@
   // SingleThreadTaskRunner:
   bool RunsTasksOnCurrentThread() const override;
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   TimeDelta delay) override;
 
  protected:
diff --git a/src/base/test/test_pending_task.cc b/src/base/test/test_pending_task.cc
index 63bdfff..3f71a99 100644
--- a/src/base/test/test_pending_task.cc
+++ b/src/base/test/test_pending_task.cc
@@ -12,7 +12,7 @@
 TestPendingTask::TestPendingTask() : nestability(NESTABLE) {}
 
 TestPendingTask::TestPendingTask(const tracked_objects::Location& location,
-                                 Closure task,
+                                 OnceClosure task,
                                  TimeTicks post_time,
                                  TimeDelta delay,
                                  TestNestability nestability)
diff --git a/src/base/test/test_pending_task.h b/src/base/test/test_pending_task.h
index 4497ba1..52ca592 100644
--- a/src/base/test/test_pending_task.h
+++ b/src/base/test/test_pending_task.h
@@ -23,7 +23,7 @@
   TestPendingTask();
   TestPendingTask(TestPendingTask&& other);
   TestPendingTask(const tracked_objects::Location& location,
-                  Closure task,
+                  OnceClosure task,
                   TimeTicks post_time,
                   TimeDelta delay,
                   TestNestability nestability);
diff --git a/src/base/test/test_simple_task_runner.cc b/src/base/test/test_simple_task_runner.cc
index df03340..4280a0d 100644
--- a/src/base/test/test_simple_task_runner.cc
+++ b/src/base/test/test_simple_task_runner.cc
@@ -18,7 +18,7 @@
 
 bool TestSimpleTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   AutoLock auto_lock(lock_);
   pending_tasks_.push_back(TestPendingTask(from_here, std::move(task),
@@ -29,7 +29,7 @@
 
 bool TestSimpleTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   AutoLock auto_lock(lock_);
   pending_tasks_.push_back(TestPendingTask(from_here, std::move(task),
diff --git a/src/base/test/test_simple_task_runner.h b/src/base/test/test_simple_task_runner.h
index ac609f1..f46e065 100644
--- a/src/base/test/test_simple_task_runner.h
+++ b/src/base/test/test_simple_task_runner.h
@@ -44,10 +44,10 @@
 
   // SingleThreadTaskRunner implementation.
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   TimeDelta delay) override;
 
   bool RunsTasksOnCurrentThread() const override;
diff --git a/src/base/test/values_test_util.cc b/src/base/test/values_test_util.cc
index ab12cfb..0cd8ea2 100644
--- a/src/base/test/values_test_util.cc
+++ b/src/base/test/values_test_util.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -68,7 +69,7 @@
       json, base::JSON_ALLOW_TRAILING_COMMAS, NULL, &error_msg);
   if (!result) {
     ADD_FAILURE() << "Failed to parse \"" << json << "\": " << error_msg;
-    result = Value::CreateNullValue();
+    result = MakeUnique<Value>();
   }
   return result;
 }
diff --git a/src/base/threading/post_task_and_reply_impl.cc b/src/base/threading/post_task_and_reply_impl.cc
index 802de8c..cddb898 100644
--- a/src/base/threading/post_task_and_reply_impl.cc
+++ b/src/base/threading/post_task_and_reply_impl.cc
@@ -29,8 +29,8 @@
 class PostTaskAndReplyRelay {
  public:
   PostTaskAndReplyRelay(const tracked_objects::Location& from_here,
-                        Closure task,
-                        Closure reply)
+                        OnceClosure task,
+                        OnceClosure reply)
       : sequence_checker_(),
         from_here_(from_here),
         origin_task_runner_(SequencedTaskRunnerHandle::Get()),
@@ -42,8 +42,7 @@
   }
 
   void RunTaskAndPostReply() {
-    task_.Run();
-    task_.Reset();
+    std::move(task_).Run();
     origin_task_runner_->PostTask(
         from_here_, Bind(&PostTaskAndReplyRelay::RunReplyAndSelfDestruct,
                          base::Unretained(this)));
@@ -58,7 +57,7 @@
     // while |reply_| is executing.
     DCHECK(!task_);
 
-    reply_.Run();
+    std::move(reply_).Run();
 
     // Cue mission impossible theme.
     delete this;
@@ -67,8 +66,8 @@
   const SequenceChecker sequence_checker_;
   const tracked_objects::Location from_here_;
   const scoped_refptr<SequencedTaskRunner> origin_task_runner_;
-  Closure reply_;
-  Closure task_;
+  OnceClosure reply_;
+  OnceClosure task_;
 };
 
 }  // namespace
@@ -77,8 +76,8 @@
 
 bool PostTaskAndReplyImpl::PostTaskAndReply(
     const tracked_objects::Location& from_here,
-    Closure task,
-    Closure reply) {
+    OnceClosure task,
+    OnceClosure reply) {
   DCHECK(!task.is_null()) << from_here.ToString();
   DCHECK(!reply.is_null()) << from_here.ToString();
   PostTaskAndReplyRelay* relay =
diff --git a/src/base/threading/post_task_and_reply_impl.h b/src/base/threading/post_task_and_reply_impl.h
index a02c32e..00aee6d 100644
--- a/src/base/threading/post_task_and_reply_impl.h
+++ b/src/base/threading/post_task_and_reply_impl.h
@@ -29,12 +29,12 @@
   // SequencedTaskRunnerHandle::IsSet(). Both |task| and |reply| are guaranteed
   // to be deleted on the sequence or thread that called this.
   bool PostTaskAndReply(const tracked_objects::Location& from_here,
-                        Closure task,
-                        Closure reply);
+                        OnceClosure task,
+                        OnceClosure reply);
 
  private:
   virtual bool PostTask(const tracked_objects::Location& from_here,
-                        Closure task) = 0;
+                        OnceClosure task) = 0;
 };
 
 }  // namespace internal
diff --git a/src/base/threading/post_task_and_reply_impl_unittest.cc b/src/base/threading/post_task_and_reply_impl_unittest.cc
index 5385739..f1b1d7a 100644
--- a/src/base/threading/post_task_and_reply_impl_unittest.cc
+++ b/src/base/threading/post_task_and_reply_impl_unittest.cc
@@ -29,7 +29,7 @@
 
  private:
   bool PostTask(const tracked_objects::Location& from_here,
-                Closure task) override {
+                OnceClosure task) override {
     return destination_->PostTask(from_here, std::move(task));
   }
 
diff --git a/src/base/threading/sequenced_worker_pool.cc b/src/base/threading/sequenced_worker_pool.cc
index a5f997f..64f1bbd 100644
--- a/src/base/threading/sequenced_worker_pool.cc
+++ b/src/base/threading/sequenced_worker_pool.cc
@@ -93,12 +93,15 @@
 
   ~SequencedTask() {}
 
+  SequencedTask(SequencedTask&&) = default;
+  SequencedTask& operator=(SequencedTask&&) = default;
+
   int sequence_token_id;
   int trace_id;
   int64_t sequence_task_number;
   SequencedWorkerPool::WorkerShutdown shutdown_behavior;
   tracked_objects::Location posted_from;
-  Closure task;
+  OnceClosure task;
 
   // Non-delayed tasks and delayed tasks are managed together by time-to-run
   // order. We calculate the time by adding the posted time and the given delay.
@@ -140,7 +143,7 @@
 
   // TaskRunner implementation
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
@@ -164,7 +167,7 @@
 
 bool SequencedWorkerPoolTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   if (delay.is_zero()) {
     return pool_->PostWorkerTaskWithShutdownBehavior(from_here, std::move(task),
@@ -194,13 +197,13 @@
 
   // TaskRunner implementation
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
   // SequencedTaskRunner implementation
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   TimeDelta delay) override;
 
  private:
@@ -229,7 +232,7 @@
 
 bool SequencedWorkerPool::PoolSequencedTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   if (delay.is_zero()) {
     return pool_->PostSequencedWorkerTaskWithShutdownBehavior(
@@ -246,7 +249,7 @@
 
 bool SequencedWorkerPool::PoolSequencedTaskRunner::PostNonNestableDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   // There's no way to run nested tasks, so simply forward to
   // PostDelayedTask.
@@ -349,7 +352,7 @@
                 SequenceToken sequence_token,
                 WorkerShutdown shutdown_behavior,
                 const tracked_objects::Location& from_here,
-                Closure task,
+                OnceClosure task,
                 TimeDelta delay);
 
   bool RunsTasksOnCurrentThread() const;
@@ -394,8 +397,7 @@
   // Returns true if the task may run at some point in the future and false if
   // it will definitely not run.
   // Coalesce upon resolution of http://crbug.com/622400.
-  bool PostTaskToTaskScheduler(const SequencedTask& sequenced,
-                               const TimeDelta& delay);
+  bool PostTaskToTaskScheduler(SequencedTask sequenced, const TimeDelta& delay);
 
   // Returns the TaskScheduler TaskRunner for the specified |sequence_token_id|
   // and |traits|.
@@ -693,8 +695,10 @@
     SequenceToken sequence_token,
     WorkerShutdown shutdown_behavior,
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
+  DCHECK(task);
+
   // TODO(fdoray): Uncomment this DCHECK. It is initially commented to avoid a
   // revert of the CL that adds debug::DumpWithoutCrashing() if it fails on the
   // waterfall. https://crbug.com/622400
@@ -752,12 +756,14 @@
       sequenced.sequence_token_id = LockedGetNamedTokenID(*optional_token_name);
 
     if (g_all_pools_state == AllPoolsState::REDIRECTED_TO_TASK_SCHEDULER) {
-      if (!PostTaskToTaskScheduler(sequenced, delay))
+      if (!PostTaskToTaskScheduler(std::move(sequenced), delay))
         return false;
     } else {
-      pending_tasks_.insert(sequenced);
+      SequencedWorkerPool::WorkerShutdown shutdown_behavior =
+          sequenced.shutdown_behavior;
+      pending_tasks_.insert(std::move(sequenced));
 
-      if (sequenced.shutdown_behavior == BLOCK_SHUTDOWN)
+      if (shutdown_behavior == BLOCK_SHUTDOWN)
         blocking_shutdown_pending_task_count_++;
 
       create_thread_id = PrepareToStartAdditionalThreadIfHelpful();
@@ -794,7 +800,7 @@
 }
 
 bool SequencedWorkerPool::Inner::PostTaskToTaskScheduler(
-    const SequencedTask& sequenced,
+    SequencedTask sequenced,
     const TimeDelta& delay) {
   DCHECK_EQ(AllPoolsState::REDIRECTED_TO_TASK_SCHEDULER, g_all_pools_state);
 
@@ -824,7 +830,8 @@
                                 .WithPriority(task_priority_)
                                 .WithShutdownBehavior(task_shutdown_behavior);
   return GetTaskSchedulerTaskRunner(sequenced.sequence_token_id, traits)
-      ->PostDelayedTask(sequenced.posted_from, sequenced.task, delay);
+      ->PostDelayedTask(sequenced.posted_from, std::move(sequenced.task),
+                        delay);
 }
 
 scoped_refptr<TaskRunner>
@@ -1242,7 +1249,11 @@
       // refcounted, so we just need to keep a copy of them alive until the lock
       // is exited. The calling code can just clear() the vector they passed to
       // us once the lock is exited to make this happen.
-      delete_these_outside_lock->push_back(*i);
+      //
+      // The const_cast here is safe since the object is erased from
+      // |pending_tasks_| soon after the move.
+      delete_these_outside_lock->push_back(
+          std::move(const_cast<SequencedTask&>(*i)));
       pending_tasks_.erase(i++);
       continue;
     }
@@ -1253,14 +1264,18 @@
       status = GET_WORK_WAIT;
       if (cleanup_state_ == CLEANUP_RUNNING) {
         // Deferred tasks are deleted when cleaning up, see Inner::ThreadLoop.
-        delete_these_outside_lock->push_back(*i);
+        // The const_cast here is safe since the object is erased from
+        // |pending_tasks_| soon after the move.
+        delete_these_outside_lock->push_back(
+            std::move(const_cast<SequencedTask&>(*i)));
         pending_tasks_.erase(i);
       }
       break;
     }
 
-    // Found a runnable task.
-    *task = *i;
+    // Found a runnable task. The const_cast is safe here since the object is
+    // erased from |pending_tasks_| soon after the move.
+    *task = std::move(const_cast<SequencedTask&>(*i));
     pending_tasks_.erase(i);
     if (task->shutdown_behavior == BLOCK_SHUTDOWN) {
       blocking_shutdown_pending_task_count_--;
@@ -1533,14 +1548,14 @@
 
 bool SequencedWorkerPool::PostWorkerTask(
     const tracked_objects::Location& from_here,
-    Closure task) {
+    OnceClosure task) {
   return inner_->PostTask(NULL, SequenceToken(), BLOCK_SHUTDOWN, from_here,
                           std::move(task), TimeDelta());
 }
 
 bool SequencedWorkerPool::PostDelayedWorkerTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   WorkerShutdown shutdown_behavior =
       delay.is_zero() ? BLOCK_SHUTDOWN : SKIP_ON_SHUTDOWN;
@@ -1550,7 +1565,7 @@
 
 bool SequencedWorkerPool::PostWorkerTaskWithShutdownBehavior(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     WorkerShutdown shutdown_behavior) {
   return inner_->PostTask(NULL, SequenceToken(), shutdown_behavior, from_here,
                           std::move(task), TimeDelta());
@@ -1559,7 +1574,7 @@
 bool SequencedWorkerPool::PostSequencedWorkerTask(
     SequenceToken sequence_token,
     const tracked_objects::Location& from_here,
-    Closure task) {
+    OnceClosure task) {
   return inner_->PostTask(NULL, sequence_token, BLOCK_SHUTDOWN, from_here,
                           std::move(task), TimeDelta());
 }
@@ -1567,7 +1582,7 @@
 bool SequencedWorkerPool::PostDelayedSequencedWorkerTask(
     SequenceToken sequence_token,
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   WorkerShutdown shutdown_behavior =
       delay.is_zero() ? BLOCK_SHUTDOWN : SKIP_ON_SHUTDOWN;
@@ -1578,7 +1593,7 @@
 bool SequencedWorkerPool::PostNamedSequencedWorkerTask(
     const std::string& token_name,
     const tracked_objects::Location& from_here,
-    Closure task) {
+    OnceClosure task) {
   DCHECK(!token_name.empty());
   return inner_->PostTask(&token_name, SequenceToken(), BLOCK_SHUTDOWN,
                           from_here, std::move(task), TimeDelta());
@@ -1587,7 +1602,7 @@
 bool SequencedWorkerPool::PostSequencedWorkerTaskWithShutdownBehavior(
     SequenceToken sequence_token,
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     WorkerShutdown shutdown_behavior) {
   return inner_->PostTask(NULL, sequence_token, shutdown_behavior, from_here,
                           std::move(task), TimeDelta());
@@ -1595,7 +1610,7 @@
 
 bool SequencedWorkerPool::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   return PostDelayedWorkerTask(from_here, std::move(task), delay);
 }
diff --git a/src/base/threading/sequenced_worker_pool.h b/src/base/threading/sequenced_worker_pool.h
index 8cdeb0b..e577e1b 100644
--- a/src/base/threading/sequenced_worker_pool.h
+++ b/src/base/threading/sequenced_worker_pool.h
@@ -275,7 +275,8 @@
   //
   // Returns true if the task was posted successfully. This may fail during
   // shutdown regardless of the specified ShutdownBehavior.
-  bool PostWorkerTask(const tracked_objects::Location& from_here, Closure task);
+  bool PostWorkerTask(const tracked_objects::Location& from_here,
+                      OnceClosure task);
 
   // Same as PostWorkerTask but allows a delay to be specified (although doing
   // so changes the shutdown behavior). The task will be run after the given
@@ -287,13 +288,13 @@
   // task will be guaranteed to run to completion before shutdown
   // (BLOCK_SHUTDOWN semantics).
   bool PostDelayedWorkerTask(const tracked_objects::Location& from_here,
-                             Closure task,
+                             OnceClosure task,
                              TimeDelta delay);
 
   // Same as PostWorkerTask but allows specification of the shutdown behavior.
   bool PostWorkerTaskWithShutdownBehavior(
       const tracked_objects::Location& from_here,
-      Closure task,
+      OnceClosure task,
       WorkerShutdown shutdown_behavior);
 
   // Like PostWorkerTask above, but provides sequencing semantics. This means
@@ -309,13 +310,13 @@
   // shutdown regardless of the specified ShutdownBehavior.
   bool PostSequencedWorkerTask(SequenceToken sequence_token,
                                const tracked_objects::Location& from_here,
-                               Closure task);
+                               OnceClosure task);
 
   // Like PostSequencedWorkerTask above, but allows you to specify a named
   // token, which saves an extra call to GetNamedSequenceToken.
   bool PostNamedSequencedWorkerTask(const std::string& token_name,
                                     const tracked_objects::Location& from_here,
-                                    Closure task);
+                                    OnceClosure task);
 
   // Same as PostSequencedWorkerTask but allows a delay to be specified
   // (although doing so changes the shutdown behavior). The task will be run
@@ -329,7 +330,7 @@
   bool PostDelayedSequencedWorkerTask(
       SequenceToken sequence_token,
       const tracked_objects::Location& from_here,
-      Closure task,
+      OnceClosure task,
       TimeDelta delay);
 
   // Same as PostSequencedWorkerTask but allows specification of the shutdown
@@ -337,12 +338,12 @@
   bool PostSequencedWorkerTaskWithShutdownBehavior(
       SequenceToken sequence_token,
       const tracked_objects::Location& from_here,
-      Closure task,
+      OnceClosure task,
       WorkerShutdown shutdown_behavior);
 
   // TaskRunner implementation. Forwards to PostDelayedWorkerTask().
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
diff --git a/src/base/threading/thread_restrictions.h b/src/base/threading/thread_restrictions.h
index 1827434..8f3beb1 100644
--- a/src/base/threading/thread_restrictions.h
+++ b/src/base/threading/thread_restrictions.h
@@ -30,16 +30,15 @@
 namespace content {
 class BrowserGpuChannelHostFactory;
 class BrowserGpuMemoryBufferManager;
-class BrowserMainLoop;
 class BrowserShutdownProfileDumper;
 class BrowserSurfaceViewManager;
 class BrowserTestBase;
-class CategorizedWorkerPool;
 class NestedMessagePumpAndroid;
 class ScopedAllowWaitForAndroidLayoutTests;
 class ScopedAllowWaitForDebugURL;
 class SoftwareOutputDeviceMus;
 class TextInputClientMac;
+class CategorizedWorkerPool;
 }  // namespace content
 namespace dbus {
 class Bus;
@@ -175,7 +174,6 @@
  private:
   // DO NOT ADD ANY OTHER FRIEND STATEMENTS, talk to jam or brettw first.
   // BEGIN ALLOWED USAGE.
-  friend class content::BrowserMainLoop;
   friend class content::BrowserShutdownProfileDumper;
   friend class content::BrowserSurfaceViewManager;
   friend class content::BrowserTestBase;
diff --git a/src/base/threading/worker_pool.cc b/src/base/threading/worker_pool.cc
index bc313ce..26ff10f 100644
--- a/src/base/threading/worker_pool.cc
+++ b/src/base/threading/worker_pool.cc
@@ -27,7 +27,7 @@
 
  private:
   bool PostTask(const tracked_objects::Location& from_here,
-                Closure task) override {
+                OnceClosure task) override {
     return WorkerPool::PostTask(from_here, std::move(task), task_is_slow_);
   }
 
@@ -45,7 +45,7 @@
 
   // TaskRunner implementation
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
@@ -56,7 +56,7 @@
   // zero because non-zero delays are not supported.
   bool PostDelayedTaskAssertZeroDelay(
       const tracked_objects::Location& from_here,
-      Closure task,
+      OnceClosure task,
       base::TimeDelta delay);
 
   const bool tasks_are_slow_;
@@ -73,7 +73,7 @@
 
 bool WorkerPoolTaskRunner::PostDelayedTask(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     TimeDelta delay) {
   return PostDelayedTaskAssertZeroDelay(from_here, std::move(task), delay);
 }
@@ -84,7 +84,7 @@
 
 bool WorkerPoolTaskRunner::PostDelayedTaskAssertZeroDelay(
     const tracked_objects::Location& from_here,
-    Closure task,
+    OnceClosure task,
     base::TimeDelta delay) {
   DCHECK_EQ(delay.InMillisecondsRoundedUp(), 0)
       << "WorkerPoolTaskRunner does not support non-zero delays";
@@ -102,8 +102,8 @@
 }  // namespace
 
 bool WorkerPool::PostTaskAndReply(const tracked_objects::Location& from_here,
-                                  Closure task,
-                                  Closure reply,
+                                  OnceClosure task,
+                                  OnceClosure reply,
                                   bool task_is_slow) {
   // Do not report PostTaskAndReplyRelay leaks in tests. There's nothing we can
   // do about them because WorkerPool doesn't have a flushing API.
diff --git a/src/base/threading/worker_pool.h b/src/base/threading/worker_pool.h
index d97dbd6..d1c666d 100644
--- a/src/base/threading/worker_pool.h
+++ b/src/base/threading/worker_pool.h
@@ -32,15 +32,15 @@
   // false if |task| could not be posted to a worker thread.  Regardless of
   // return value, ownership of |task| is transferred to the worker pool.
   static bool PostTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        bool task_is_slow);
 
   // Just like TaskRunner::PostTaskAndReply, except the destination
   // for |task| is a worker thread and you can specify |task_is_slow| just
   // like you can for PostTask above.
   static bool PostTaskAndReply(const tracked_objects::Location& from_here,
-                               Closure task,
-                               Closure reply,
+                               OnceClosure task,
+                               OnceClosure reply,
                                bool task_is_slow);
 
   // Return true if the current thread is one that this WorkerPool runs tasks
diff --git a/src/base/threading/worker_pool_posix.cc b/src/base/threading/worker_pool_posix.cc
index e0efa46..851480a 100644
--- a/src/base/threading/worker_pool_posix.cc
+++ b/src/base/threading/worker_pool_posix.cc
@@ -49,7 +49,7 @@
   ~WorkerPoolImpl() = delete;
 
   void PostTask(const tracked_objects::Location& from_here,
-                base::Closure task,
+                base::OnceClosure task,
                 bool task_is_slow);
 
  private:
@@ -61,7 +61,7 @@
                                              kIdleSecondsBeforeExit)) {}
 
 void WorkerPoolImpl::PostTask(const tracked_objects::Location& from_here,
-                              base::Closure task,
+                              base::OnceClosure task,
                               bool task_is_slow) {
   pool_->PostTask(from_here, std::move(task));
 }
@@ -114,7 +114,7 @@
 
 // static
 bool WorkerPool::PostTask(const tracked_objects::Location& from_here,
-                          base::Closure task,
+                          base::OnceClosure task,
                           bool task_is_slow) {
   g_lazy_worker_pool.Pointer()->PostTask(from_here, std::move(task),
                                          task_is_slow);
@@ -140,12 +140,14 @@
 
 void PosixDynamicThreadPool::PostTask(
     const tracked_objects::Location& from_here,
-    base::Closure task) {
+    base::OnceClosure task) {
   PendingTask pending_task(from_here, std::move(task));
   AddTask(&pending_task);
 }
 
 void PosixDynamicThreadPool::AddTask(PendingTask* pending_task) {
+  DCHECK(pending_task);
+  DCHECK(pending_task->task);
   AutoLock locked(lock_);
 
   pending_tasks_.push(std::move(*pending_task));
diff --git a/src/base/threading/worker_pool_posix.h b/src/base/threading/worker_pool_posix.h
index cfa50c2..0b10adf 100644
--- a/src/base/threading/worker_pool_posix.h
+++ b/src/base/threading/worker_pool_posix.h
@@ -51,7 +51,7 @@
                          int idle_seconds_before_exit);
 
   // Adds |task| to the thread pool.
-  void PostTask(const tracked_objects::Location& from_here, Closure task);
+  void PostTask(const tracked_objects::Location& from_here, OnceClosure task);
 
   // Worker thread method to wait for up to |idle_seconds_before_exit| for more
   // work from the thread pool.  Returns NULL if no work is available.
diff --git a/src/base/threading/worker_pool_win.cc b/src/base/threading/worker_pool_win.cc
index ab64f71..9b1192c 100644
--- a/src/base/threading/worker_pool_win.cc
+++ b/src/base/threading/worker_pool_win.cc
@@ -45,6 +45,8 @@
 
 // Takes ownership of |pending_task|
 bool PostTaskInternal(PendingTask* pending_task, bool task_is_slow) {
+  DCHECK(pending_task->task);
+
   ULONG flags = 0;
   if (task_is_slow)
     flags |= WT_EXECUTELONGFUNCTION;
@@ -62,7 +64,7 @@
 
 // static
 bool WorkerPool::PostTask(const tracked_objects::Location& from_here,
-                          base::Closure task,
+                          base::OnceClosure task,
                           bool task_is_slow) {
   PendingTask* pending_task = new PendingTask(from_here, std::move(task));
   return PostTaskInternal(pending_task, task_is_slow);
diff --git a/src/base/trace_event/heap_profiler_allocation_context_tracker.cc b/src/base/trace_event/heap_profiler_allocation_context_tracker.cc
index b47dc16..8c6f441 100644
--- a/src/base/trace_event/heap_profiler_allocation_context_tracker.cc
+++ b/src/base/trace_event/heap_profiler_allocation_context_tracker.cc
@@ -8,6 +8,7 @@
 #include <iterator>
 
 #include "base/atomicops.h"
+#include "base/debug/debugging_flags.h"
 #include "base/debug/leak_annotations.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_local_storage.h"
@@ -206,7 +207,7 @@
         const void* frames[128];
         static_assert(arraysize(frames) >= Backtrace::kMaxFrameCount,
                       "not requesting enough frames to fill Backtrace");
-#if HAVE_TRACE_STACK_FRAME_POINTERS && !defined(OS_NACL)
+#if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) && !defined(OS_NACL)
         size_t frame_count = debug::TraceStackFramePointers(
             frames,
             arraysize(frames),
diff --git a/src/base/trace_event/heap_profiler_allocation_register.cc b/src/base/trace_event/heap_profiler_allocation_register.cc
index 1cfb983..b9f440a 100644
--- a/src/base/trace_event/heap_profiler_allocation_register.cc
+++ b/src/base/trace_event/heap_profiler_allocation_register.cc
@@ -82,15 +82,15 @@
   sentinel.frame_count = 1;
 
   // Rationale for max / 2: in theory we could just start the sentinel with a
-  // refcount == 0. However, this optimization avoids to hit the 2nd condition
-  // of the "if" in RemoveBacktrace, hence reducing the chances of hurting the
-  // fastpath. From a functional viewpoint, the sentinel is safe even if we wrap
-  // over the refcount.
+  // refcount == 0. However, using max / 2 allows short circuiting of the
+  // conditional in RemoveBacktrace() keeping the sentinel logic out of the fast
+  // path. From a functional viewpoint, the sentinel is safe even if we wrap
+  // over refcount because .
   BacktraceMap::KVPair::second_type sentinel_refcount =
       std::numeric_limits<BacktraceMap::KVPair::second_type>::max() / 2;
   auto index_and_flag = backtraces_.Insert(sentinel, sentinel_refcount);
   DCHECK(index_and_flag.second);
-  out_of_storage_backtrace_index_ = index_and_flag.first;
+  DCHECK_EQ(index_and_flag.first, kOutOfStorageBacktraceIndex);
 }
 
 AllocationRegister::~AllocationRegister() {}
@@ -165,7 +165,7 @@
     const Backtrace& backtrace) {
   auto index = backtraces_.Insert(backtrace, 0).first;
   if (index == BacktraceMap::kInvalidKVIndex)
-    return out_of_storage_backtrace_index_;
+    return kOutOfStorageBacktraceIndex;
   auto& backtrace_and_count = backtraces_.Get(index);
   backtrace_and_count.second++;
   return index;
@@ -174,7 +174,7 @@
 void AllocationRegister::RemoveBacktrace(BacktraceMap::KVIndex index) {
   auto& backtrace_and_count = backtraces_.Get(index);
   if (--backtrace_and_count.second == 0 &&
-      index != out_of_storage_backtrace_index_) {
+      index != kOutOfStorageBacktraceIndex) {
     // Backtrace is not referenced anymore - remove it.
     backtraces_.Remove(index);
   }
diff --git a/src/base/trace_event/heap_profiler_allocation_register.h b/src/base/trace_event/heap_profiler_allocation_register.h
index 6d63923..f491e41 100644
--- a/src/base/trace_event/heap_profiler_allocation_register.h
+++ b/src/base/trace_event/heap_profiler_allocation_register.h
@@ -8,13 +8,13 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <type_traits>
 #include <utility>
 
 #include "base/bits.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/process/process_metrics.h"
-#include "base/template_util.h"
 #include "base/trace_event/heap_profiler_allocation_context.h"
 #include "build/build_config.h"
 
@@ -39,9 +39,10 @@
 template <size_t NumBuckets, class Key, class Value, class KeyHasher>
 class FixedHashMap {
   // To keep things simple we don't call destructors.
-  static_assert(is_trivially_destructible<Key>::value &&
-                    is_trivially_destructible<Value>::value,
+  static_assert(std::is_trivially_destructible<Key>::value &&
+                    std::is_trivially_destructible<Value>::value,
                 "Key and Value shouldn't have destructors");
+
  public:
   using KVPair = std::pair<const Key, Value>;
 
@@ -52,7 +53,7 @@
 
   // Capacity controls how many items this hash map can hold, and largely
   // affects memory footprint.
-  FixedHashMap(size_t capacity)
+  explicit FixedHashMap(size_t capacity)
       : num_cells_(capacity),
         num_inserts_dropped_(0),
         cells_(static_cast<Cell*>(
@@ -252,6 +253,8 @@
 // freed. Internally it has two hashtables: one for Backtraces and one for
 // actual allocations. Sizes of both hashtables are fixed, and this class
 // allocates (mmaps) only in its constructor.
+//
+// When either hash table hits max size, new inserts are dropped.
 class BASE_EXPORT AllocationRegister {
  public:
   // Details about an allocation.
@@ -366,8 +369,13 @@
   AllocationMap allocations_;
   BacktraceMap backtraces_;
 
-  // Sentinel used when we run out of backtraces_ storage.
-  BacktraceMap::KVIndex out_of_storage_backtrace_index_;
+  // Sentinel used when the |backtraces_| table is full.
+  //
+  // This is a slightly abstraction to allow for constant propagation. It
+  // knows that the sentinel will be the first item inserted into the table
+  // and that the first index retuned will be 0. The constructor DCHECKs
+  // this assumption.
+  enum : BacktraceMap::KVIndex { kOutOfStorageBacktraceIndex = 0 };
 
   DISALLOW_COPY_AND_ASSIGN(AllocationRegister);
 };
diff --git a/src/base/trace_event/memory_dump_manager.cc b/src/base/trace_event/memory_dump_manager.cc
index 6ed1ca8..20c0d4e 100644
--- a/src/base/trace_event/memory_dump_manager.cc
+++ b/src/base/trace_event/memory_dump_manager.cc
@@ -98,6 +98,15 @@
   }
 }
 
+void FillOsDumpFromProcessMemoryDump(
+    const ProcessMemoryDump* pmd,
+    MemoryDumpCallbackResult::OSMemDump* osDump) {
+  if (pmd->has_process_totals()) {
+    const ProcessMemoryTotals* totals = pmd->process_totals();
+    osDump->resident_set_kb = totals->resident_set_bytes() / 1024;
+  }
+}
+
 // Proxy class which wraps a ConvertableToTraceFormat owned by the
 // |session_state| into a proxy object that can be added to the trace event log.
 // This is to solve the problem that the MemoryDumpSessionState is refcounted
@@ -195,8 +204,7 @@
   if (profiling_mode == "") {
     AllocationContextTracker::SetCaptureMode(
         AllocationContextTracker::CaptureMode::PSEUDO_STACK);
-#if HAVE_TRACE_STACK_FRAME_POINTERS && \
-    (BUILDFLAG(ENABLE_PROFILING) || !defined(NDEBUG))
+#if (BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) || !defined(NDEBUG))
   } else if (profiling_mode == switches::kEnableHeapProfilingModeNative) {
     // We need frame pointers for native tracing to work, and they are
     // enabled in profiling and debug builds.
@@ -807,6 +815,10 @@
           GetDumpsSumKb("partition_alloc/partitions/*", process_memory_dump);
       result.chrome_dump.blink_gc_total_kb =
           GetDumpsSumKb("blink_gc", process_memory_dump);
+      FillOsDumpFromProcessMemoryDump(process_memory_dump, &result.os_dump);
+    } else {
+      auto& os_dump = result.extra_processes_dump[pid];
+      FillOsDumpFromProcessMemoryDump(process_memory_dump, &os_dump);
     }
   }
 
diff --git a/src/base/trace_event/memory_dump_manager_unittest.cc b/src/base/trace_event/memory_dump_manager_unittest.cc
index 86c90d4..e126edd 100644
--- a/src/base/trace_event/memory_dump_manager_unittest.cc
+++ b/src/base/trace_event/memory_dump_manager_unittest.cc
@@ -105,7 +105,7 @@
 // Posts |task| to |task_runner| and blocks until it is executed.
 void PostTaskAndWait(const tracked_objects::Location& from_here,
                      SequencedTaskRunner* task_runner,
-                     base::Closure task) {
+                     base::OnceClosure task) {
   base::WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
                             WaitableEvent::InitialState::NOT_SIGNALED);
   task_runner->PostTask(from_here, std::move(task));
@@ -116,8 +116,6 @@
   event.Wait();
 }
 
-}  // namespace
-
 // Testing MemoryDumpManagerDelegate which, by default, short-circuits dump
 // requests locally to the MemoryDumpManager instead of performing IPC dances.
 class MemoryDumpManagerDelegateForTesting : public MemoryDumpManagerDelegate {
@@ -184,14 +182,14 @@
   unsigned no_of_post_tasks() const { return num_of_post_tasks_; }
 
   bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
-                                  Closure task,
+                                  OnceClosure task,
                                   TimeDelta delay) override {
     NOTREACHED();
     return false;
   }
 
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       Closure task,
+                       OnceClosure task,
                        TimeDelta delay) override {
     num_of_post_tasks_++;
     if (enabled_) {
@@ -214,6 +212,8 @@
   unsigned num_of_post_tasks_;
 };
 
+}  // namespace
+
 class MemoryDumpManagerTest : public testing::Test {
  public:
   MemoryDumpManagerTest() : testing::Test(), kDefaultOptions() {}
diff --git a/src/base/trace_event/memory_dump_provider_info.h b/src/base/trace_event/memory_dump_provider_info.h
index 0f7ca7c..ca63a98 100644
--- a/src/base/trace_event/memory_dump_provider_info.h
+++ b/src/base/trace_event/memory_dump_provider_info.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <set>
 
+#include "base/base_export.h"
 #include "base/memory/ref_counted.h"
 #include "base/trace_event/memory_dump_provider.h"
 
@@ -41,7 +42,7 @@
 //   MDM::SetupNextMemoryDump() or MDM::InvokeOnMemoryDump(), when the copy
 //   inside ProcessMemoryDumpAsyncState is erase()-d.
 // - The PeakDetector can keep extra refptrs when enabled.
-struct MemoryDumpProviderInfo
+struct BASE_EXPORT MemoryDumpProviderInfo
     : public RefCountedThreadSafe<MemoryDumpProviderInfo> {
  public:
   // Define a total order based on the |task_runner| affinity, so that MDPs
diff --git a/src/base/trace_event/memory_dump_request_args.h b/src/base/trace_event/memory_dump_request_args.h
index a8b3f42..fd42608 100644
--- a/src/base/trace_event/memory_dump_request_args.h
+++ b/src/base/trace_event/memory_dump_request_args.h
@@ -20,9 +20,9 @@
 namespace trace_event {
 
 // Captures the reason why a memory dump is being requested. This is to allow
-// selective enabling of dumps, filtering and post-processing. Important: this
-// must be kept consistent with
-// services/resource_coordinator/public/cpp/memory/memory_infra_traits.cc.
+// selective enabling of dumps, filtering and post-processing. Keep this
+// consistent with memory_instrumentation.mojo and
+// memory_instrumentation_struct_traits.{h,cc}
 enum class MemoryDumpType {
   PERIODIC_INTERVAL,     // Dumping memory at periodic intervals.
   EXPLICITLY_TRIGGERED,  // Non maskable dump request.
@@ -31,8 +31,8 @@
 };
 
 // Tells the MemoryDumpProvider(s) how much detailed their dumps should be.
-// Important: this must be kept consistent with
-// services/resource_Coordinator/public/cpp/memory/memory_infra_traits.cc.
+// Keep this consistent with memory_instrumentation.mojo and
+// memory_instrumentation_struct_traits.{h,cc}
 enum class MemoryDumpLevelOfDetail : uint32_t {
   FIRST,
 
@@ -55,8 +55,8 @@
 };
 
 // Initial request arguments for a global memory dump. (see
-// MemoryDumpManager::RequestGlobalMemoryDump()). Important: this must be kept
-// consistent with services/memory_infra/public/cpp/memory_infra_traits.cc.
+// MemoryDumpManager::RequestGlobalMemoryDump()). Keep this consistent with
+// memory_instrumentation.mojo and memory_instrumentation_struct_traits.{h,cc}
 struct BASE_EXPORT MemoryDumpRequestArgs {
   // Globally unique identifier. In multi-process dumps, all processes issue a
   // local dump with the same guid. This allows the trace importers to
diff --git a/src/base/trace_event/memory_peak_detector.cc b/src/base/trace_event/memory_peak_detector.cc
new file mode 100644
index 0000000..c361037
--- /dev/null
+++ b/src/base/trace_event/memory_peak_detector.cc
@@ -0,0 +1,164 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/trace_event/memory_peak_detector.h"
+
+#include <stdint.h>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/time/time.h"
+#include "base/trace_event/memory_dump_provider_info.h"
+
+namespace base {
+namespace trace_event {
+
+// static
+MemoryPeakDetector* MemoryPeakDetector::GetInstance() {
+  static MemoryPeakDetector* instance = new MemoryPeakDetector();
+  return instance;
+}
+
+MemoryPeakDetector::MemoryPeakDetector()
+    : generation_(0),
+      state_(NOT_INITIALIZED),
+      polling_interval_ms_(0),
+      poll_tasks_count_for_testing_(0) {}
+
+MemoryPeakDetector::~MemoryPeakDetector() {
+  // This is hit only in tests, in which case the test is expected to TearDown()
+  // cleanly and not leave the peak detector running.
+  DCHECK_EQ(NOT_INITIALIZED, state_);
+}
+
+void MemoryPeakDetector::Setup(
+    const GetDumpProvidersFunction& get_dump_providers_function,
+    const scoped_refptr<SequencedTaskRunner>& task_runner,
+    const OnPeakDetectedCallback& on_peak_detected_callback) {
+  DCHECK(!get_dump_providers_function.is_null());
+  DCHECK(task_runner);
+  DCHECK(!on_peak_detected_callback.is_null());
+  DCHECK(state_ == NOT_INITIALIZED || state_ == DISABLED);
+  DCHECK(dump_providers_.empty());
+  get_dump_providers_function_ = get_dump_providers_function;
+  task_runner_ = task_runner;
+  on_peak_detected_callback_ = on_peak_detected_callback;
+  state_ = DISABLED;
+}
+
+void MemoryPeakDetector::TearDown() {
+  if (task_runner_) {
+    task_runner_->PostTask(
+        FROM_HERE,
+        Bind(&MemoryPeakDetector::TearDownInternal, Unretained(this)));
+  }
+  task_runner_ = nullptr;
+}
+
+void MemoryPeakDetector::Start() {
+  task_runner_->PostTask(
+      FROM_HERE, Bind(&MemoryPeakDetector::StartInternal, Unretained(this)));
+}
+
+void MemoryPeakDetector::Stop() {
+  task_runner_->PostTask(
+      FROM_HERE, Bind(&MemoryPeakDetector::StopInternal, Unretained(this)));
+}
+
+void MemoryPeakDetector::NotifyMemoryDumpProvidersChanged() {
+  // It is possible to call this before the first Setup() call, in which case
+  // we want to just make this a noop. The next Start() will fetch the MDP list.
+  if (!task_runner_)
+    return;
+  task_runner_->PostTask(
+      FROM_HERE,
+      Bind(&MemoryPeakDetector::ReloadDumpProvidersAndStartPollingIfNeeded,
+           Unretained(this)));
+}
+
+void MemoryPeakDetector::StartInternal() {
+  DCHECK_EQ(DISABLED, state_);
+  state_ = ENABLED;
+  polling_interval_ms_ = 1;  // TODO(primiano): temporary until next CL.
+
+  // If there are any dump providers available, NotifyMemoryDumpProvidersChanged
+  // will fetch them and start the polling. Otherwise this will remain in the
+  // ENABLED state and the actual polling will start on the next call to
+  // ReloadDumpProvidersAndStartPollingIfNeeded().
+  // Depending on the sandbox model, it is possible that no polling-capable dump
+  // providers will be ever available.
+  ReloadDumpProvidersAndStartPollingIfNeeded();
+}
+
+void MemoryPeakDetector::StopInternal() {
+  DCHECK_NE(NOT_INITIALIZED, state_);
+  state_ = DISABLED;
+  ++generation_;
+  dump_providers_.clear();
+}
+
+void MemoryPeakDetector::TearDownInternal() {
+  StopInternal();
+  get_dump_providers_function_.Reset();
+  on_peak_detected_callback_.Reset();
+  state_ = NOT_INITIALIZED;
+}
+
+void MemoryPeakDetector::ReloadDumpProvidersAndStartPollingIfNeeded() {
+  if (state_ == DISABLED || state_ == NOT_INITIALIZED)
+    return;  // Start() will re-fetch the MDP list later.
+
+  DCHECK((state_ == RUNNING && !dump_providers_.empty()) ||
+         (state_ == ENABLED && dump_providers_.empty()));
+
+  dump_providers_.clear();
+
+  // This is really MemoryDumpManager::GetDumpProvidersForPolling, % testing.
+  get_dump_providers_function_.Run(&dump_providers_);
+
+  if (state_ == ENABLED && !dump_providers_.empty()) {
+    // It's now time to start polling for realz.
+    state_ = RUNNING;
+    task_runner_->PostTask(FROM_HERE,
+                           Bind(&MemoryPeakDetector::PollMemoryAndDetectPeak,
+                                Unretained(this), ++generation_));
+  } else if (state_ == RUNNING && dump_providers_.empty()) {
+    // Will cause the next PollMemoryAndDetectPeak() task to early return.
+    state_ = ENABLED;
+    ++generation_;
+  }
+}
+
+void MemoryPeakDetector::PollMemoryAndDetectPeak(uint32_t expected_generation) {
+  if (state_ != RUNNING || expected_generation != generation_)
+    return;
+
+  // We should never end up in a situation where state_ == RUNNING but all dump
+  // providers are gone.
+  DCHECK(!dump_providers_.empty());
+
+  poll_tasks_count_for_testing_++;
+  uint64_t memory_total = 0;
+  for (const scoped_refptr<MemoryDumpProviderInfo>& mdp_info :
+       dump_providers_) {
+    DCHECK(mdp_info->options.is_fast_polling_supported);
+    uint64_t value = 0;
+    mdp_info->dump_provider->PollFastMemoryTotal(&value);
+    memory_total += value;
+  }
+  ignore_result(memory_total);  // TODO(primiano): temporary until next CL.
+
+  // TODO(primiano): Move actual peak detection logic from the
+  // MemoryDumpScheduler in next CLs.
+
+  SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+      FROM_HERE,
+      Bind(&MemoryPeakDetector::PollMemoryAndDetectPeak, Unretained(this),
+           expected_generation),
+      TimeDelta::FromMilliseconds(polling_interval_ms_));
+}
+
+}  // namespace trace_event
+}  // namespace base
diff --git a/src/base/trace_event/memory_peak_detector.h b/src/base/trace_event/memory_peak_detector.h
new file mode 100644
index 0000000..b914295
--- /dev/null
+++ b/src/base/trace_event/memory_peak_detector.h
@@ -0,0 +1,139 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_TRACE_EVENT_MEMORY_PEAK_DETECTOR_H_
+#define BASE_TRACE_EVENT_MEMORY_PEAK_DETECTOR_H_
+
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "base/base_export.h"
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+
+namespace base {
+
+class SequencedTaskRunner;
+
+namespace trace_event {
+
+struct MemoryDumpProviderInfo;
+
+// This class is NOT thread-safe, the caller has to ensure linearization of
+// the calls to the public methods. In any case, the public methods do NOT have
+// to be called from the |task_runner| on which the polling tasks run.
+class BASE_EXPORT MemoryPeakDetector {
+ public:
+  using OnPeakDetectedCallback = RepeatingClosure;
+  using DumpProvidersList = std::vector<scoped_refptr<MemoryDumpProviderInfo>>;
+  using GetDumpProvidersFunction = RepeatingCallback<void(DumpProvidersList*)>;
+
+  enum State {
+    NOT_INITIALIZED = 0,  // Before Setup()
+    DISABLED,             // Before Start() or after Stop().
+    ENABLED,              // After Start() but no dump_providers_ are available.
+    RUNNING  // After Start(). The PollMemoryAndDetectPeak() task is scheduled.
+  };
+
+  static MemoryPeakDetector* GetInstance();
+
+  // Configures the peak detector, binding the polling tasks on the given
+  // thread. Setup() can be called several times, provided that: (1) Stop()
+  // is called; (2a) the previous task_runner is flushed or (2b) the task_runner
+  // remains the same.
+  // GetDumpProvidersFunction: is the function that will be invoked to get
+  //   an updated list of polling-capable dump providers. This is really just
+  //   MemoryDumpManager::GetDumpProvidersForPolling, but this extra level of
+  //   indirection allows easier testing.
+  // SequencedTaskRunner: the task runner where PollMemoryAndDetectPeak() will
+  //  be periodically called.
+  // OnPeakDetectedCallback: a callback that will be invoked on the
+  //   given task runner when a memory peak is detected.
+  void Setup(const GetDumpProvidersFunction&,
+             const scoped_refptr<SequencedTaskRunner>&,
+             const OnPeakDetectedCallback&);
+
+  // Releases the |task_runner_| and the bound callbacks.
+  void TearDown();
+
+  // This posts a task onto the passed task runner which refreshes the list of
+  // dump providers via the GetDumpProvidersFunction. If at least one dump
+  // provider is available, this starts immediately polling on the task runner.
+  // If not, the detector remains in the ENABLED state and will start polling
+  // automatically (i.e. without requiring another call to Start()) on the
+  // next call to NotifyMemoryDumpProvidersChanged().
+  void Start();
+
+  // Stops the polling on the task runner (if was active at all). This doesn't
+  // wait for the task runner to drain pending tasks, so it is possible that
+  // a polling will happen concurrently (or in the immediate future) with the
+  // Stop() call. It is responsibility of the caller to drain or synchronize
+  // with the task runner.
+  void Stop();
+
+  // Used by MemoryDumpManager to notify that the list of polling-capable dump
+  // providers has changed. The peak detector will reload the list on the next
+  // polling task. This function can be called before Setup(), in which
+  // case will be just a no-op.
+  void NotifyMemoryDumpProvidersChanged();
+
+ private:
+  friend class MemoryPeakDetectorTest;
+
+  MemoryPeakDetector();
+  ~MemoryPeakDetector();
+
+  // All these methods are always called on the |task_runner_|.
+  void StartInternal();
+  void StopInternal();
+  void TearDownInternal();
+  void ReloadDumpProvidersAndStartPollingIfNeeded();
+  void PollMemoryAndDetectPeak(uint32_t expected_generation);
+
+  // It is safe to call these testing methods only on the |task_runner_|.
+  State state_for_testing() const { return state_; }
+  uint32_t poll_tasks_count_for_testing() const {
+    return poll_tasks_count_for_testing_;
+  }
+
+  // The task runner where all the internal calls are posted onto. This field
+  // must be NOT be accessed by the tasks posted on the |task_runner_| because
+  // there might still be outstanding tasks on the |task_runner_| while this
+  // refptr is reset. This can only be safely accessed by the public methods
+  // above, which the client of this class is supposed to call sequentially.
+  scoped_refptr<SequencedTaskRunner> task_runner_;
+
+  // After the Setup() call, the fields below, must be accessed only from
+  // the |task_runner_|.
+
+  // Bound function to get an updated list of polling-capable dump providers.
+  GetDumpProvidersFunction get_dump_providers_function_;
+
+  // The callback to invoke when peaks are detected.
+  OnPeakDetectedCallback on_peak_detected_callback_;
+
+  // List of polling-aware dump providers to invoke upon each poll.
+  DumpProvidersList dump_providers_;
+
+  // The generation is incremented every time the |state_| is changed and causes
+  // PollMemoryAndDetectPeak() to early out if the posted task doesn't match the
+  // most recent |generation_|. This allows to drop on the floor outstanding
+  // PostDelayedTask that refer to an old sequence that was later Stop()-ed or
+  // disabled because of NotifyMemoryDumpProvidersChanged().
+  uint32_t generation_;
+
+  State state_;
+  uint32_t polling_interval_ms_;
+  uint32_t poll_tasks_count_for_testing_;
+
+  DISALLOW_COPY_AND_ASSIGN(MemoryPeakDetector);
+};
+
+}  // namespace trace_event
+}  // namespace base
+
+#endif  // BASE_TRACE_EVENT_MEMORY_PEAK_DETECTOR_H_
diff --git a/src/base/trace_event/memory_peak_detector_unittest.cc b/src/base/trace_event/memory_peak_detector_unittest.cc
new file mode 100644
index 0000000..9a9b922
--- /dev/null
+++ b/src/base/trace_event/memory_peak_detector_unittest.cc
@@ -0,0 +1,381 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/trace_event/memory_peak_detector.h"
+
+#include <memory>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/run_loop.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/test/test_timeouts.h"
+#include "base/threading/platform_thread.h"
+#include "base/threading/thread.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/trace_event/memory_dump_provider.h"
+#include "base/trace_event/memory_dump_provider_info.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::Return;
+
+namespace base {
+namespace trace_event {
+
+namespace {
+
+class MockMemoryDumpProvider : public MemoryDumpProvider {
+ public:
+  bool OnMemoryDump(const MemoryDumpArgs&, ProcessMemoryDump*) override {
+    NOTREACHED();
+    return true;
+  }
+
+  MOCK_METHOD1(PollFastMemoryTotal, void(uint64_t*));
+};
+
+// Wrapper to use gmock on a callback.
+struct OnPeakDetectedWrapper {
+  MOCK_METHOD0(OnPeak, void());
+};
+
+}  // namespace
+
+class MemoryPeakDetectorTest : public testing::Test {
+ public:
+  struct FriendDeleter {
+    void operator()(MemoryPeakDetector* inst) { delete inst; }
+  };
+
+  MemoryPeakDetectorTest() : testing::Test() {}
+
+  std::unique_ptr<MemoryPeakDetector, FriendDeleter> NewInstance() {
+    return std::unique_ptr<MemoryPeakDetector, FriendDeleter>(
+        new MemoryPeakDetector());
+  }
+
+  void RestartThreadAndReinitializePeakDetector() {
+    bg_thread_.reset(new Thread("Peak Detector Test Thread"));
+    bg_thread_->Start();
+    peak_detector_ = NewInstance();
+    peak_detector_->Setup(
+        Bind(&MemoryPeakDetectorTest::MockGetDumpProviders, Unretained(this)),
+        bg_thread_->task_runner(),
+        Bind(&OnPeakDetectedWrapper::OnPeak, Unretained(&on_peak_callback_)));
+  }
+
+  void SetUp() override {
+    get_mdp_call_count_ = 0;
+    RestartThreadAndReinitializePeakDetector();
+  }
+
+  void TearDown() override {
+    peak_detector_->TearDown();
+    bg_thread_->FlushForTesting();
+    EXPECT_EQ(MemoryPeakDetector::NOT_INITIALIZED, GetPeakDetectorState());
+    dump_providers_.clear();
+  }
+
+  // Calls MemoryPeakDetector::state_for_testing() on the bg thread and returns
+  // the result on the current thread.
+  MemoryPeakDetector::State GetPeakDetectorState() {
+    WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                      WaitableEvent::InitialState::NOT_SIGNALED);
+    MemoryPeakDetector::State res = MemoryPeakDetector::NOT_INITIALIZED;
+    auto get_fn = [](MemoryPeakDetector* peak_detector, WaitableEvent* evt,
+                     MemoryPeakDetector::State* res) {
+      *res = peak_detector->state_for_testing();
+      evt->Signal();
+    };
+    bg_thread_->task_runner()->PostTask(
+        FROM_HERE, Bind(get_fn, Unretained(&*peak_detector_), Unretained(&evt),
+                        Unretained(&res)));
+    evt.Wait();
+    return res;
+  }
+
+  // Calls MemoryPeakDetector::poll_tasks_count_for_testing() on the bg thread
+  // and returns the result on the current thread.
+  uint32_t GetNumPollingTasksRan() {
+    uint32_t res = 0;
+    auto get_fn = [](MemoryPeakDetector* peak_detector, WaitableEvent* evt,
+                     uint32_t* res) {
+      *res = peak_detector->poll_tasks_count_for_testing();
+      evt->Signal();
+    };
+
+    WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                      WaitableEvent::InitialState::NOT_SIGNALED);
+    bg_thread_->task_runner()->PostTask(
+        FROM_HERE, Bind(get_fn, Unretained(&*peak_detector_), Unretained(&evt),
+                        Unretained(&res)));
+    evt.Wait();
+    return res;
+  }
+
+  // Called on the |bg_thread_|.
+  void MockGetDumpProviders(MemoryPeakDetector::DumpProvidersList* mdps) {
+    get_mdp_call_count_++;
+    *mdps = dump_providers_;
+  }
+
+  uint32_t GetNumGetDumpProvidersCalls() {
+    bg_thread_->FlushForTesting();
+    return get_mdp_call_count_;
+  }
+
+  scoped_refptr<MemoryDumpProviderInfo> CreateMockDumpProvider() {
+    std::unique_ptr<MockMemoryDumpProvider> mdp(new MockMemoryDumpProvider());
+    MemoryDumpProvider::Options opt;
+    opt.is_fast_polling_supported = true;
+    scoped_refptr<MemoryDumpProviderInfo> mdp_info(
+        new MemoryDumpProviderInfo(mdp.get(), "Mock MDP", nullptr, opt, false));
+
+    // The |mdp| instance will be destroyed together with the |mdp_info|.
+    mdp_info->owned_dump_provider = std::move(mdp);
+    return mdp_info;
+  }
+
+  static MockMemoryDumpProvider& GetMockMDP(
+      const scoped_refptr<MemoryDumpProviderInfo>& mdp_info) {
+    return *static_cast<MockMemoryDumpProvider*>(mdp_info->dump_provider);
+  }
+
+ protected:
+  MemoryPeakDetector::DumpProvidersList dump_providers_;
+  uint32_t get_mdp_call_count_;
+  std::unique_ptr<MemoryPeakDetector, FriendDeleter> peak_detector_;
+  std::unique_ptr<Thread> bg_thread_;
+  OnPeakDetectedWrapper on_peak_callback_;
+};
+
+TEST_F(MemoryPeakDetectorTest, GetDumpProvidersFunctionCalled) {
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  peak_detector_->Start();
+  EXPECT_EQ(1u, GetNumGetDumpProvidersCalls());
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  EXPECT_EQ(0u, GetNumPollingTasksRan());
+}
+
+TEST_F(MemoryPeakDetectorTest, NotifyBeforeInitialize) {
+  peak_detector_->TearDown();
+
+  WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                    WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp = CreateMockDumpProvider();
+  EXPECT_CALL(GetMockMDP(mdp), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt](uint64_t*) { evt.Signal(); }));
+  dump_providers_.push_back(mdp);
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  EXPECT_EQ(MemoryPeakDetector::NOT_INITIALIZED, GetPeakDetectorState());
+  RestartThreadAndReinitializePeakDetector();
+
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+  evt.Wait();  // Wait for a PollFastMemoryTotal() call.
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  EXPECT_EQ(1u, GetNumGetDumpProvidersCalls());
+  EXPECT_GE(GetNumPollingTasksRan(), 1u);
+}
+
+TEST_F(MemoryPeakDetectorTest, DoubleStop) {
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+
+  EXPECT_EQ(1u, GetNumGetDumpProvidersCalls());
+  EXPECT_EQ(0u, GetNumPollingTasksRan());
+}
+
+TEST_F(MemoryPeakDetectorTest, OneDumpProviderRegisteredBeforeStart) {
+  WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                    WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp = CreateMockDumpProvider();
+  EXPECT_CALL(GetMockMDP(mdp), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt](uint64_t*) { evt.Signal(); }));
+  dump_providers_.push_back(mdp);
+
+  peak_detector_->Start();
+  evt.Wait();  // Signaled when PollFastMemoryTotal() is called on the MockMDP.
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  EXPECT_EQ(1u, GetNumGetDumpProvidersCalls());
+  EXPECT_GT(GetNumPollingTasksRan(), 0u);
+}
+
+TEST_F(MemoryPeakDetectorTest, ReInitializeAndRebindToNewThread) {
+  WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                    WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp = CreateMockDumpProvider();
+  EXPECT_CALL(GetMockMDP(mdp), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt](uint64_t*) { evt.Signal(); }));
+  dump_providers_.push_back(mdp);
+
+  for (int i = 0; i < 5; ++i) {
+    evt.Reset();
+    peak_detector_->Start();
+    evt.Wait();  // Wait for a PollFastMemoryTotal() call.
+    // Check that calling TearDown implicitly does a Stop().
+    peak_detector_->TearDown();
+
+    // Reinitialize and re-bind to a new task runner.
+    RestartThreadAndReinitializePeakDetector();
+  }
+}
+
+TEST_F(MemoryPeakDetectorTest, OneDumpProviderRegisteredOutOfBand) {
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+  EXPECT_EQ(1u, GetNumGetDumpProvidersCalls());
+
+  // Check that no poll tasks are posted before any dump provider is registered.
+  PlatformThread::Sleep(TestTimeouts::tiny_timeout());
+  EXPECT_EQ(0u, GetNumPollingTasksRan());
+
+  // Registed the MDP After Start() has been issued and expect that the
+  // PeakDetector transitions ENABLED -> RUNNING on the next
+  // NotifyMemoryDumpProvidersChanged() call.
+  WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                    WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp = CreateMockDumpProvider();
+  EXPECT_CALL(GetMockMDP(mdp), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt](uint64_t*) { evt.Signal(); }));
+  dump_providers_.push_back(mdp);
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+
+  evt.Wait();  // Signaled when PollFastMemoryTotal() is called on the MockMDP.
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+  EXPECT_EQ(2u, GetNumGetDumpProvidersCalls());
+
+  // Now simulate the unregisration and expect that the PeakDetector transitions
+  // back to ENABLED.
+  dump_providers_.clear();
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+  EXPECT_EQ(3u, GetNumGetDumpProvidersCalls());
+  uint32_t num_poll_tasks = GetNumPollingTasksRan();
+  EXPECT_GT(num_poll_tasks, 0u);
+
+  // At this point, no more polling tasks should be posted.
+  PlatformThread::Sleep(TestTimeouts::tiny_timeout());
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  EXPECT_EQ(num_poll_tasks, GetNumPollingTasksRan());
+}
+
+// Test that a sequence of Start()/Stop() back-to-back doesn't end up creating
+// several outstanding timer tasks and instead respects the polling_interval_ms.
+TEST_F(MemoryPeakDetectorTest, StartStopQuickly) {
+  WaitableEvent evt(WaitableEvent::ResetPolicy::MANUAL,
+                    WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp = CreateMockDumpProvider();
+  dump_providers_.push_back(mdp);
+  const uint32_t kNumPolls = 20;
+  uint32_t polls_done = 0;
+  EXPECT_CALL(GetMockMDP(mdp), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&polls_done, &evt, kNumPolls](uint64_t*) {
+        if (++polls_done == kNumPolls)
+          evt.Signal();
+      }));
+
+  const TimeTicks tstart = TimeTicks::Now();
+  for (int i = 0; i < 5; i++) {
+    peak_detector_->Start();
+    peak_detector_->Stop();
+  }
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+  evt.Wait();  // Wait for kNumPolls.
+  const double time_ms = (TimeTicks::Now() - tstart).InMillisecondsF();
+
+  // TODO(primiano): this will become config.polling_interval_ms in the next CL.
+  const uint32_t polling_interval_ms = 1;
+  EXPECT_GE(time_ms, kNumPolls * polling_interval_ms);
+  peak_detector_->Stop();
+}
+
+TEST_F(MemoryPeakDetectorTest, RegisterAndUnregisterTwoDumpProviders) {
+  WaitableEvent evt1(WaitableEvent::ResetPolicy::MANUAL,
+                     WaitableEvent::InitialState::NOT_SIGNALED);
+  WaitableEvent evt2(WaitableEvent::ResetPolicy::MANUAL,
+                     WaitableEvent::InitialState::NOT_SIGNALED);
+  scoped_refptr<MemoryDumpProviderInfo> mdp1 = CreateMockDumpProvider();
+  scoped_refptr<MemoryDumpProviderInfo> mdp2 = CreateMockDumpProvider();
+  EXPECT_CALL(GetMockMDP(mdp1), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt1](uint64_t*) { evt1.Signal(); }));
+  EXPECT_CALL(GetMockMDP(mdp2), PollFastMemoryTotal(_))
+      .WillRepeatedly(Invoke([&evt2](uint64_t*) { evt2.Signal(); }));
+
+  // Register only one MDP and start the detector.
+  dump_providers_.push_back(mdp1);
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+
+  // Wait for one poll task and then register also the other one.
+  evt1.Wait();
+  dump_providers_.push_back(mdp2);
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  evt2.Wait();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+
+  // Now unregister the first MDP and check that everything is still running.
+  dump_providers_.erase(dump_providers_.begin());
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+
+  // Now unregister both and check that the detector goes to idle.
+  dump_providers_.clear();
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+
+  // Now re-register both and check that the detector re-activates posting
+  // new polling tasks.
+  uint32_t num_poll_tasks = GetNumPollingTasksRan();
+  evt1.Reset();
+  evt2.Reset();
+  dump_providers_.push_back(mdp1);
+  dump_providers_.push_back(mdp2);
+  peak_detector_->NotifyMemoryDumpProvidersChanged();
+  evt1.Wait();
+  evt2.Wait();
+  EXPECT_EQ(MemoryPeakDetector::RUNNING, GetPeakDetectorState());
+  EXPECT_GT(GetNumPollingTasksRan(), num_poll_tasks);
+
+  // Stop everything, tear down the MDPs, restart the detector and check that
+  // it detector doesn't accidentally try to re-access them.
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  dump_providers_.clear();
+  mdp1 = nullptr;
+  mdp2 = nullptr;
+
+  num_poll_tasks = GetNumPollingTasksRan();
+  peak_detector_->Start();
+  EXPECT_EQ(MemoryPeakDetector::ENABLED, GetPeakDetectorState());
+  PlatformThread::Sleep(TestTimeouts::tiny_timeout());
+
+  peak_detector_->Stop();
+  EXPECT_EQ(MemoryPeakDetector::DISABLED, GetPeakDetectorState());
+  EXPECT_EQ(num_poll_tasks, GetNumPollingTasksRan());
+
+  EXPECT_EQ(6u, GetNumGetDumpProvidersCalls());
+}
+
+}  // namespace trace_event
+}  // namespace base
diff --git a/src/base/trace_event/memory_usage_estimator.h b/src/base/trace_event/memory_usage_estimator.h
index 6f02bb9..174429f 100644
--- a/src/base/trace_event/memory_usage_estimator.h
+++ b/src/base/trace_event/memory_usage_estimator.h
@@ -24,7 +24,6 @@
 #include "base/base_export.h"
 #include "base/containers/linked_list.h"
 #include "base/strings/string16.h"
-#include "base/template_util.h"
 
 // Composable memory usage estimators.
 //
@@ -207,7 +206,7 @@
 struct EMUCaller<
     T,
     typename std::enable_if<!HasEMU<T>::value &&
-                            is_trivially_destructible<T>::value>::type> {
+                            std::is_trivially_destructible<T>::value>::type> {
   static size_t Call(const T& value) { return 0; }
 };
 
diff --git a/src/base/trace_event/process_memory_dump.h b/src/base/trace_event/process_memory_dump.h
index 6f8d167..45a9739 100644
--- a/src/base/trace_event/process_memory_dump.h
+++ b/src/base/trace_event/process_memory_dump.h
@@ -167,6 +167,7 @@
   void AsValueInto(TracedValue* value) const;
 
   ProcessMemoryTotals* process_totals() { return &process_totals_; }
+  const ProcessMemoryTotals* process_totals() const { return &process_totals_; }
   bool has_process_totals() const { return has_process_totals_; }
   void set_has_process_totals() { has_process_totals_ = true; }
 
diff --git a/src/base/tuple.h b/src/base/tuple.h
index 34fd789..e13afaf 100644
--- a/src/base/tuple.h
+++ b/src/base/tuple.h
@@ -51,20 +51,6 @@
 struct MakeIndexSequenceImpl<N, Ns...>
     : MakeIndexSequenceImpl<N - 1, N - 1, Ns...> {};
 
-// std::get() in <=libstdc++-4.6 returns an lvalue-reference for
-// rvalue-reference of a tuple, where an rvalue-reference is expected.
-template <size_t I, typename... Ts>
-typename std::tuple_element<I, std::tuple<Ts...>>::type&& get(
-    std::tuple<Ts...>&& t) {
-  using ElemType = typename std::tuple_element<I, std::tuple<Ts...>>::type;
-  return std::forward<ElemType>(std::get<I>(t));
-}
-
-template <size_t I, typename T>
-auto get(T& t) -> decltype(std::get<I>(t)) {
-  return std::get<I>(t);
-}
-
 template <size_t N>
 using MakeIndexSequence = typename MakeIndexSequenceImpl<N>::Type;
 
@@ -88,7 +74,7 @@
                                  Method method,
                                  Tuple&& args,
                                  IndexSequence<Ns...>) {
-  (obj->*method)(base::get<Ns>(std::forward<Tuple>(args))...);
+  (obj->*method)(std::get<Ns>(std::forward<Tuple>(args))...);
 }
 
 template <typename ObjT, typename Method, typename Tuple>
@@ -105,7 +91,7 @@
 inline void DispatchToFunctionImpl(Function function,
                                    Tuple&& args,
                                    IndexSequence<Ns...>) {
-  (*function)(base::get<Ns>(std::forward<Tuple>(args))...);
+  (*function)(std::get<Ns>(std::forward<Tuple>(args))...);
 }
 
 template <typename Function, typename Tuple>
@@ -128,7 +114,7 @@
                                  OutTuple* out,
                                  IndexSequence<InNs...>,
                                  IndexSequence<OutNs...>) {
-  (obj->*method)(base::get<InNs>(std::forward<InTuple>(in))...,
+  (obj->*method)(std::get<InNs>(std::forward<InTuple>(in))...,
                  &std::get<OutNs>(*out)...);
 }
 
diff --git a/src/base/tuple_unittest.cc b/src/base/tuple_unittest.cc
index 6f90c29..815b43b 100644
--- a/src/base/tuple_unittest.cc
+++ b/src/base/tuple_unittest.cc
@@ -114,30 +114,4 @@
   EXPECT_EQ(2, CopyLogger::TimesCopied);
 }
 
-TEST(TupleTest, Get) {
-  int i = 1;
-  int j = 2;
-  std::tuple<int, int&, int&&> t(3, i, std::move(j));
-  EXPECT_TRUE((std::is_same<int&, decltype(base::get<0>(t))>::value));
-  EXPECT_EQ(3, base::get<0>(t));
-
-  EXPECT_TRUE((std::is_same<int&, decltype(base::get<1>(t))>::value));
-  EXPECT_EQ(1, base::get<1>(t));
-
-  EXPECT_TRUE((std::is_same<int&, decltype(base::get<2>(t))>::value));
-  EXPECT_EQ(2, base::get<2>(t));
-
-  EXPECT_TRUE((std::is_same<int&&,
-               decltype(base::get<0>(std::move(t)))>::value));
-  EXPECT_EQ(3, base::get<0>(std::move(t)));
-
-  EXPECT_TRUE((std::is_same<int&,
-               decltype(base::get<1>(std::move(t)))>::value));
-  EXPECT_EQ(1, base::get<1>(std::move(t)));
-
-  EXPECT_TRUE((std::is_same<int&&,
-               decltype(base::get<2>(std::move(t)))>::value));
-  EXPECT_EQ(2, base::get<2>(std::move(t)));
-}
-
 }  // namespace base
diff --git a/src/base/values.cc b/src/base/values.cc
index 59ec9eb..d492a47 100644
--- a/src/base/values.cc
+++ b/src/base/values.cc
@@ -69,18 +69,13 @@
           static_cast<const DictionaryValue&>(node));
 
     default:
-      return node.CreateDeepCopy();
+      return MakeUnique<Value>(node);
   }
 }
 
 }  // namespace
 
 // static
-std::unique_ptr<Value> Value::CreateNullValue() {
-  return WrapUnique(new Value(Type::NONE));
-}
-
-// static
 std::unique_ptr<BinaryValue> BinaryValue::CreateWithCopiedBuffer(
     const char* buffer,
     size_t size) {
@@ -185,7 +180,6 @@
 }
 
 Value& Value::operator=(Value&& that) noexcept {
-  DCHECK(this != &that) << "attempt to self move assign.";
   InternalCleanup();
   InternalMoveConstructFrom(std::move(that));
 
@@ -341,55 +335,11 @@
 }
 
 Value* Value::DeepCopy() const {
-  // This method should only be getting called for null Values--all subclasses
-  // need to provide their own implementation;.
-  switch (type()) {
-    case Type::NONE:
-      return CreateNullValue().release();
-
-    case Type::BOOLEAN:
-      return new Value(bool_value_);
-    case Type::INTEGER:
-      return new Value(int_value_);
-    case Type::DOUBLE:
-      return new Value(double_value_);
-    case Type::STRING:
-      return new Value(*string_value_);
-    // For now, make BinaryValues for backward-compatibility. Convert to
-    // Value when that code is deleted.
-    case Type::BINARY:
-      return new Value(*binary_value_);
-
-    // TODO(crbug.com/646113): Clean this up when DictionaryValue and ListValue
-    // are completely inlined.
-    case Type::DICTIONARY: {
-      DictionaryValue* result = new DictionaryValue;
-
-      for (const auto& current_entry : **dict_ptr_) {
-        result->SetWithoutPathExpansion(current_entry.first,
-                                        current_entry.second->CreateDeepCopy());
-      }
-
-      return result;
-    }
-
-    case Type::LIST: {
-      ListValue* result = new ListValue;
-
-      for (const auto& entry : *list_)
-        result->Append(entry->CreateDeepCopy());
-
-      return result;
-    }
-
-    default:
-      NOTREACHED();
-      return nullptr;
-  }
+  return new Value(*this);
 }
 
 std::unique_ptr<Value> Value::CreateDeepCopy() const {
-  return WrapUnique(DeepCopy());
+  return MakeUnique<Value>(*this);
 }
 
 bool operator==(const Value& lhs, const Value& rhs) {
@@ -542,14 +492,23 @@
       binary_value_.Init(*that.binary_value_);
       return;
     // DictStorage and ListStorage are move-only types due to the presence of
-    // unique_ptrs. This is why the call to |CreateDeepCopy| is necessary here.
+    // unique_ptrs. This is why the explicit copy of every element is necessary
+    // here.
     // TODO(crbug.com/646113): Clean this up when DictStorage and ListStorage
     // can be copied directly.
     case Type::DICTIONARY:
-      dict_ptr_.Init(std::move(*that.CreateDeepCopy()->dict_ptr_));
+      dict_ptr_.Init(MakeUnique<DictStorage>());
+      for (const auto& it : **that.dict_ptr_) {
+        (*dict_ptr_)
+            ->emplace_hint((*dict_ptr_)->end(), it.first,
+                           MakeUnique<Value>(*it.second));
+      }
       return;
     case Type::LIST:
-      list_.Init(std::move(*that.CreateDeepCopy()->list_));
+      list_.Init();
+      list_->reserve(that.list_->size());
+      for (const auto& it : *that.list_)
+        list_->push_back(MakeUnique<Value>(*it));
       return;
   }
 }
@@ -600,14 +559,15 @@
       *binary_value_ = *that.binary_value_;
       return;
     // DictStorage and ListStorage are move-only types due to the presence of
-    // unique_ptrs. This is why the call to |CreateDeepCopy| is necessary here.
+    // unique_ptrs. This is why the explicit call to the copy constructor is
+    // necessary here.
     // TODO(crbug.com/646113): Clean this up when DictStorage and ListStorage
     // can be copied directly.
     case Type::DICTIONARY:
-      *dict_ptr_ = std::move(*that.CreateDeepCopy()->dict_ptr_);
+      *dict_ptr_ = std::move(*Value(that).dict_ptr_);
       return;
     case Type::LIST:
-      *list_ = std::move(*that.CreateDeepCopy()->list_);
+      *list_ = std::move(*Value(that).list_);
       return;
   }
 }
@@ -1073,8 +1033,7 @@
       }
     }
     // All other cases: Make a copy and hook it up.
-    SetWithoutPathExpansion(it.key(),
-                            base::WrapUnique(merge_value->DeepCopy()));
+    SetWithoutPathExpansion(it.key(), MakeUnique<Value>(*merge_value));
   }
 }
 
@@ -1091,11 +1050,11 @@
 DictionaryValue::Iterator::~Iterator() {}
 
 DictionaryValue* DictionaryValue::DeepCopy() const {
-  return static_cast<DictionaryValue*>(Value::DeepCopy());
+  return new DictionaryValue(*this);
 }
 
 std::unique_ptr<DictionaryValue> DictionaryValue::CreateDeepCopy() const {
-  return WrapUnique(DeepCopy());
+  return MakeUnique<DictionaryValue>(*this);
 }
 
 ///////////////////// ListValue ////////////////////
@@ -1127,7 +1086,7 @@
   if (index >= list_->size()) {
     // Pad out any intermediate indexes with null settings
     while (index > list_->size())
-      Append(CreateNullValue());
+      Append(MakeUnique<Value>());
     Append(std::move(in_value));
   } else {
     // TODO(dcheng): remove this DCHECK once the raw pointer version is removed?
@@ -1358,11 +1317,11 @@
 }
 
 ListValue* ListValue::DeepCopy() const {
-  return static_cast<ListValue*>(Value::DeepCopy());
+  return new ListValue(*this);
 }
 
 std::unique_ptr<ListValue> ListValue::CreateDeepCopy() const {
-  return WrapUnique(DeepCopy());
+  return MakeUnique<ListValue>(*this);
 }
 
 ValueSerializer::~ValueSerializer() {
diff --git a/src/base/values.h b/src/base/values.h
index 7c74ea5..e19eca7 100644
--- a/src/base/values.h
+++ b/src/base/values.h
@@ -63,8 +63,6 @@
     // Note: Do not add more types. See the file-level comment above for why.
   };
 
-  static std::unique_ptr<Value> CreateNullValue();
-
   // For situations where you want to keep ownership of your buffer, this
   // factory method creates a new BinaryValue by copying the contents of the
   // buffer that's passed in.
@@ -157,6 +155,8 @@
   // to the copy. The caller gets ownership of the copy, of course.
   // Subclasses return their own type directly in their overrides;
   // this works because C++ supports covariant return types.
+  // DEPRECATED, use Value's copy constructor instead.
+  // TODO(crbug.com/646113): Delete this and migrate callsites.
   Value* DeepCopy() const;
   // Preferred version of DeepCopy. TODO(estade): remove the above.
   std::unique_ptr<Value> CreateDeepCopy() const;
@@ -176,7 +176,7 @@
   bool Equals(const Value* other) const;
 
   // Compares if two Value objects have equal contents. Can handle NULLs.
-  // NULLs are considered equal but different from Value::CreateNullValue().
+  // NULLs are considered equal but different from Value(Value::Type::NONE).
   // DEPRECATED, use operator==(const Value& lhs, const Value& rhs) instead.
   // TODO(crbug.com/646113): Delete this and migrate callsites.
   static bool Equals(const Value* a, const Value* b);
@@ -364,6 +364,8 @@
     DictStorage::const_iterator it_;
   };
 
+  // DEPRECATED, use DictionaryValue's copy constructor instead.
+  // TODO(crbug.com/646113): Delete this and migrate callsites.
   DictionaryValue* DeepCopy() const;
   // Preferred version of DeepCopy. TODO(estade): remove the above.
   std::unique_ptr<DictionaryValue> CreateDeepCopy() const;
@@ -480,6 +482,8 @@
   const_iterator begin() const { return list_->begin(); }
   const_iterator end() const { return list_->end(); }
 
+  // DEPRECATED, use ListValue's copy constructor instead.
+  // TODO(crbug.com/646113): Delete this and migrate callsites.
   ListValue* DeepCopy() const;
   // Preferred version of DeepCopy. TODO(estade): remove DeepCopy.
   std::unique_ptr<ListValue> CreateDeepCopy() const;
diff --git a/src/base/values_unittest.cc b/src/base/values_unittest.cc
index f19f08e..85f0a10 100644
--- a/src/base/values_unittest.cc
+++ b/src/base/values_unittest.cc
@@ -16,27 +16,22 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/template_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
 
 TEST(ValuesTest, TestNothrow) {
-  // TODO(crbug.com/554293): Replace this with
-  // std::is_nothrow_move_constructible when all platforms have them in the std
-  // namespace.
-  static_assert(std::is_nothrow_constructible<Value, Value&&>::value,
+  static_assert(std::is_nothrow_move_constructible<Value>::value,
                 "IsNothrowMoveConstructible");
-  // TODO(crbug.com/554293): Replace this with
-  // std::is_nothrow_default_constructible when all platforms have them in the
-  // std namespace.
-  static_assert(std::is_nothrow_constructible<Value>::value,
+  static_assert(std::is_nothrow_default_constructible<Value>::value,
                 "IsNothrowDefaultConstructible");
   static_assert(std::is_nothrow_constructible<Value, std::string&&>::value,
                 "IsNothrowMoveConstructibleFromString");
   static_assert(
       std::is_nothrow_constructible<Value, std::vector<char>&&>::value,
       "IsNothrowMoveConstructibleFromBlob");
+  static_assert(std::is_nothrow_move_assignable<Value>::value,
+                "IsNothrowMoveAssignable");
 }
 
 // Group of tests for the value constructors.
@@ -588,8 +583,8 @@
 
 TEST(ValuesTest, DictionaryWithoutPathExpansion) {
   DictionaryValue dict;
-  dict.Set("this.is.expanded", Value::CreateNullValue());
-  dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue());
+  dict.Set("this.is.expanded", MakeUnique<Value>());
+  dict.SetWithoutPathExpansion("this.isnt.expanded", MakeUnique<Value>());
 
   EXPECT_FALSE(dict.HasKey("this.is.expanded"));
   EXPECT_TRUE(dict.HasKey("this"));
@@ -612,8 +607,8 @@
 // TODO(estade): remove.
 TEST(ValuesTest, DictionaryWithoutPathExpansionDeprecated) {
   DictionaryValue dict;
-  dict.Set("this.is.expanded", Value::CreateNullValue());
-  dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue());
+  dict.Set("this.is.expanded", MakeUnique<Value>());
+  dict.SetWithoutPathExpansion("this.isnt.expanded", MakeUnique<Value>());
 
   EXPECT_FALSE(dict.HasKey("this.is.expanded"));
   EXPECT_TRUE(dict.HasKey("this"));
@@ -659,7 +654,7 @@
 
 TEST(ValuesTest, DeepCopy) {
   DictionaryValue original_dict;
-  std::unique_ptr<Value> scoped_null = Value::CreateNullValue();
+  auto scoped_null = MakeUnique<Value>();
   Value* original_null = scoped_null.get();
   original_dict.Set("null", std::move(scoped_null));
   std::unique_ptr<Value> scoped_bool(new Value(true));
@@ -700,7 +695,7 @@
   scoped_nested_dictionary->SetString("key", "value");
   original_dict.Set("dictionary", std::move(scoped_nested_dictionary));
 
-  std::unique_ptr<DictionaryValue> copy_dict = original_dict.CreateDeepCopy();
+  auto copy_dict = MakeUnique<DictionaryValue>(original_dict);
   ASSERT_TRUE(copy_dict.get());
   ASSERT_NE(copy_dict.get(), &original_dict);
 
@@ -807,8 +802,8 @@
 }
 
 TEST(ValuesTest, Equals) {
-  std::unique_ptr<Value> null1(Value::CreateNullValue());
-  std::unique_ptr<Value> null2(Value::CreateNullValue());
+  auto null1 = MakeUnique<Value>();
+  auto null2 = MakeUnique<Value>();
   EXPECT_NE(null1.get(), null2.get());
   EXPECT_EQ(*null1, *null2);
 
@@ -821,16 +816,16 @@
   dv.SetDouble("c", 2.5);
   dv.SetString("d1", "string");
   dv.SetString("d2", ASCIIToUTF16("http://google.com"));
-  dv.Set("e", Value::CreateNullValue());
+  dv.Set("e", MakeUnique<Value>());
 
-  std::unique_ptr<DictionaryValue> copy = dv.CreateDeepCopy();
+  auto copy = MakeUnique<DictionaryValue>(dv);
   EXPECT_EQ(dv, *copy);
 
   std::unique_ptr<ListValue> list(new ListValue);
   ListValue* original_list = list.get();
-  list->Append(Value::CreateNullValue());
+  list->Append(MakeUnique<Value>());
   list->Append(WrapUnique(new DictionaryValue));
-  std::unique_ptr<Value> list_copy(list->CreateDeepCopy());
+  auto list_copy = MakeUnique<Value>(*list);
 
   dv.Set("f", std::move(list));
   EXPECT_NE(dv, *copy);
@@ -841,7 +836,7 @@
   EXPECT_NE(dv, *copy);
 
   // Check if Equals detects differences in only the keys.
-  copy = dv.CreateDeepCopy();
+  copy = MakeUnique<DictionaryValue>(dv);
   EXPECT_EQ(dv, *copy);
   copy->Remove("a", NULL);
   copy->SetBoolean("aa", false);
@@ -849,8 +844,8 @@
 }
 
 TEST(ValuesTest, StaticEquals) {
-  std::unique_ptr<Value> null1(Value::CreateNullValue());
-  std::unique_ptr<Value> null2(Value::CreateNullValue());
+  auto null1 = MakeUnique<Value>();
+  auto null2 = MakeUnique<Value>();
   EXPECT_TRUE(Value::Equals(null1.get(), null2.get()));
   EXPECT_TRUE(Value::Equals(NULL, NULL));
 
@@ -864,7 +859,7 @@
   EXPECT_FALSE(Value::Equals(i42.get(), NULL));
   EXPECT_FALSE(Value::Equals(NULL, i42.get()));
 
-  // NULL and Value::CreateNullValue() are intentionally different: We need
+  // NULL and MakeUnique<Value>() are intentionally different: We need
   // support for NULL as a return value for "undefined" without caring for
   // ownership of the pointer.
   EXPECT_FALSE(Value::Equals(null1.get(), NULL));
@@ -993,7 +988,7 @@
 
 TEST(ValuesTest, DeepCopyCovariantReturnTypes) {
   DictionaryValue original_dict;
-  std::unique_ptr<Value> scoped_null(Value::CreateNullValue());
+  auto scoped_null = MakeUnique<Value>();
   Value* original_null = scoped_null.get();
   original_dict.Set("null", std::move(scoped_null));
   std::unique_ptr<Value> scoped_bool(new Value(true));
@@ -1026,15 +1021,15 @@
   scoped_list->Append(std::move(scoped_list_element_1));
   original_dict.Set("list", std::move(scoped_list));
 
-  std::unique_ptr<Value> copy_dict = original_dict.CreateDeepCopy();
-  std::unique_ptr<Value> copy_null = original_null->CreateDeepCopy();
-  std::unique_ptr<Value> copy_bool = original_bool->CreateDeepCopy();
-  std::unique_ptr<Value> copy_int = original_int->CreateDeepCopy();
-  std::unique_ptr<Value> copy_double = original_double->CreateDeepCopy();
-  std::unique_ptr<Value> copy_string = original_string->CreateDeepCopy();
-  std::unique_ptr<Value> copy_string16 = original_string16->CreateDeepCopy();
-  std::unique_ptr<Value> copy_binary = original_binary->CreateDeepCopy();
-  std::unique_ptr<Value> copy_list = original_list->CreateDeepCopy();
+  auto copy_dict = MakeUnique<Value>(original_dict);
+  auto copy_null = MakeUnique<Value>(*original_null);
+  auto copy_bool = MakeUnique<Value>(*original_bool);
+  auto copy_int = MakeUnique<Value>(*original_int);
+  auto copy_double = MakeUnique<Value>(*original_double);
+  auto copy_string = MakeUnique<Value>(*original_string);
+  auto copy_string16 = MakeUnique<Value>(*original_string16);
+  auto copy_binary = MakeUnique<Value>(*original_binary);
+  auto copy_list = MakeUnique<Value>(*original_list);
 
   EXPECT_EQ(original_dict, *copy_dict);
   EXPECT_EQ(*original_null, *copy_null);
@@ -1209,7 +1204,7 @@
   }
 
   Value value1("value1");
-  dict.Set("key1", value1.CreateDeepCopy());
+  dict.Set("key1", MakeUnique<Value>(value1));
   bool seen1 = false;
   for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
     EXPECT_FALSE(seen1);
@@ -1220,7 +1215,7 @@
   EXPECT_TRUE(seen1);
 
   Value value2("value2");
-  dict.Set("key2", value2.CreateDeepCopy());
+  dict.Set("key2", MakeUnique<Value>(value2));
   bool seen2 = seen1 = false;
   for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
     if (it.key() == "key1") {
@@ -1253,21 +1248,21 @@
   DictionaryValue dict_value;
   ListValue list_value;
 
-  main_dict.Set("bool", bool_value.CreateDeepCopy());
-  main_dict.Set("int", int_value.CreateDeepCopy());
-  main_dict.Set("double", double_value.CreateDeepCopy());
-  main_dict.Set("string", string_value.CreateDeepCopy());
-  main_dict.Set("binary", binary_value.CreateDeepCopy());
-  main_dict.Set("dict", dict_value.CreateDeepCopy());
-  main_dict.Set("list", list_value.CreateDeepCopy());
+  main_dict.Set("bool", MakeUnique<Value>(bool_value));
+  main_dict.Set("int", MakeUnique<Value>(int_value));
+  main_dict.Set("double", MakeUnique<Value>(double_value));
+  main_dict.Set("string", MakeUnique<Value>(string_value));
+  main_dict.Set("binary", MakeUnique<Value>(binary_value));
+  main_dict.Set("dict", MakeUnique<Value>(dict_value));
+  main_dict.Set("list", MakeUnique<Value>(list_value));
 
-  main_list.Append(bool_value.CreateDeepCopy());
-  main_list.Append(int_value.CreateDeepCopy());
-  main_list.Append(double_value.CreateDeepCopy());
-  main_list.Append(string_value.CreateDeepCopy());
-  main_list.Append(binary_value.CreateDeepCopy());
-  main_list.Append(dict_value.CreateDeepCopy());
-  main_list.Append(list_value.CreateDeepCopy());
+  main_list.Append(MakeUnique<Value>(bool_value));
+  main_list.Append(MakeUnique<Value>(int_value));
+  main_list.Append(MakeUnique<Value>(double_value));
+  main_list.Append(MakeUnique<Value>(string_value));
+  main_list.Append(MakeUnique<Value>(binary_value));
+  main_list.Append(MakeUnique<Value>(dict_value));
+  main_list.Append(MakeUnique<Value>(list_value));
 
   EXPECT_TRUE(main_dict.Get("bool", NULL));
   EXPECT_TRUE(main_dict.Get("int", NULL));
@@ -1524,4 +1519,11 @@
   EXPECT_FALSE(main_list.GetList(7, NULL));
 }
 
+TEST(ValuesTest, SelfSwap) {
+  base::Value test(1);
+  using namespace std;
+  swap(test, test);
+  EXPECT_TRUE(test.GetInt() == 1);
+}
+
 }  // namespace base
diff --git a/src/base/win/scoped_comptr.h b/src/base/win/scoped_comptr.h
index 8e05250..ac704e0 100644
--- a/src/base/win/scoped_comptr.h
+++ b/src/base/win/scoped_comptr.h
@@ -5,6 +5,7 @@
 #ifndef BASE_WIN_SCOPED_COMPTR_H_
 #define BASE_WIN_SCOPED_COMPTR_H_
 
+#include <objbase.h>
 #include <unknwn.h>
 
 #include "base/logging.h"
@@ -45,7 +46,7 @@
     static_assert(
         sizeof(ScopedComPtr<Interface, interface_id>) == sizeof(Interface*),
         "ScopedComPtrSize");
-    Release();
+    Reset();
   }
 
   Interface* get() const { return ptr_; }
@@ -56,12 +57,14 @@
   // ScopedComPtr instance.
   // Note that this function equates to IUnknown::Release and should not
   // be confused with e.g. unique_ptr::release().
-  void Release() {
+  unsigned long Reset() {
+    unsigned long ref = 0;
     Interface* temp = ptr_;
     if (temp) {
       ptr_ = nullptr;
-      temp->Release();
+      ref = temp->Release();
     }
+    return ref;
   }
 
   // Sets the internal pointer to NULL and returns the held object without
@@ -99,7 +102,7 @@
     // IUnknown already has a template version of QueryInterface
     // so the iid parameter is implicit here. The only thing this
     // function adds are the DCHECKs.
-    return ptr_->QueryInterface(p);
+    return ptr_->QueryInterface(IID_PPV_ARGS(p));
   }
 
   // QI for times when the IID is not associated with the type.
@@ -113,7 +116,7 @@
   // error code from the other->QueryInterface operation.
   HRESULT QueryFrom(IUnknown* object) {
     DCHECK(object);
-    return object->QueryInterface(Receive());
+    return object->QueryInterface(IID_PPV_ARGS(Receive()));
   }
 
   // Convenience wrapper around CoCreateInstance
@@ -135,10 +138,10 @@
       return false;
 
     ScopedComPtr<IUnknown> my_identity;
-    QueryInterface(my_identity.Receive());
+    QueryInterface(IID_PPV_ARGS(my_identity.Receive()));
 
     ScopedComPtr<IUnknown> other_identity;
-    other->QueryInterface(other_identity.Receive());
+    other->QueryInterface(IID_PPV_ARGS(other_identity.Receive()));
 
     return my_identity == other_identity;
   }
@@ -213,11 +216,6 @@
     r.ptr_ = tmp;
   }
 
-  // static methods
-  static const IID& iid() {
-    return *interface_id;
-  }
-
  private:
   Interface* ptr_ = nullptr;
 };
@@ -257,6 +255,12 @@
   return out << p.get();
 }
 
+// Helper to make IID_PPV_ARGS work with ScopedComPtr.
+template <typename T>
+void** IID_PPV_ARGS_Helper(base::win::ScopedComPtr<T>* pp) throw() {
+  return pp->ReceiveVoid();
+}
+
 }  // namespace win
 }  // namespace base
 
diff --git a/src/base/win/scoped_comptr_unittest.cc b/src/base/win/scoped_comptr_unittest.cc
index 988c469..3cde314 100644
--- a/src/base/win/scoped_comptr_unittest.cc
+++ b/src/base/win/scoped_comptr_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/win/scoped_comptr.h"
 
+#include <objbase.h>
 #include <shlobj.h>
 
 #include <memory>
@@ -18,8 +19,8 @@
 
 struct Dummy {
   Dummy() : adds(0), releases(0) { }
-  void AddRef() { ++adds; }
-  void Release() { ++releases; }
+  unsigned long AddRef() { return ++adds; }
+  unsigned long Release() { return ++releases; }
 
   int adds;
   int releases;
@@ -34,9 +35,6 @@
 }  // namespace
 
 TEST(ScopedComPtrTest, ScopedComPtr) {
-  EXPECT_EQ(memcmp(&ScopedComPtr<IUnknown>::iid(), &IID_IUnknown, sizeof(IID)),
-            0);
-
   base::win::ScopedCOMInitializer com_initializer;
   EXPECT_TRUE(com_initializer.succeeded());
 
@@ -51,10 +49,9 @@
   EXPECT_TRUE(SUCCEEDED(CoGetMalloc(1, mem_alloc.Receive())));
 
   ScopedComPtr<IUnknown> qi_test;
-  EXPECT_HRESULT_SUCCEEDED(mem_alloc.QueryInterface(IID_IUnknown,
-      reinterpret_cast<void**>(qi_test.Receive())));
+  EXPECT_HRESULT_SUCCEEDED(mem_alloc.QueryInterface(IID_PPV_ARGS(&qi_test)));
   EXPECT_TRUE(qi_test.get() != NULL);
-  qi_test.Release();
+  qi_test.Reset();
 
   // test ScopedComPtr& constructor
   ScopedComPtr<IMalloc> copy1(mem_alloc);
@@ -66,7 +63,7 @@
   copy1 = naked_copy;  // Test the =(T*) operator.
   naked_copy->Release();
 
-  copy1.Release();
+  copy1.Reset();
   EXPECT_FALSE(copy1.IsSameObject(unk2.get()));  // unk2 is valid, copy1 is not
 
   // test Interface* constructor
@@ -75,7 +72,7 @@
 
   EXPECT_TRUE(SUCCEEDED(unk.QueryFrom(mem_alloc.get())));
   EXPECT_TRUE(unk.get() != NULL);
-  unk.Release();
+  unk.Reset();
   EXPECT_TRUE(unk.get() == NULL);
   EXPECT_TRUE(unk.IsSameObject(copy1.get()));  // both are NULL
 }
diff --git a/src/base/win/shortcut.cc b/src/base/win/shortcut.cc
index f574809..856b00f 100644
--- a/src/base/win/shortcut.cc
+++ b/src/base/win/shortcut.cc
@@ -29,14 +29,14 @@
     const wchar_t* shortcut,
     ScopedComPtr<IShellLink>* i_shell_link,
     ScopedComPtr<IPersistFile>* i_persist_file) {
-  i_shell_link->Release();
-  i_persist_file->Release();
+  i_shell_link->Reset();
+  i_persist_file->Reset();
   if (FAILED(i_shell_link->CreateInstance(CLSID_ShellLink, NULL,
                                           CLSCTX_INPROC_SERVER)) ||
       FAILED(i_persist_file->QueryFrom(i_shell_link->get())) ||
       (shortcut && FAILED((*i_persist_file)->Load(shortcut, STGM_READWRITE)))) {
-    i_shell_link->Release();
-    i_persist_file->Release();
+    i_shell_link->Reset();
+    i_persist_file->Reset();
   }
 }
 
@@ -158,15 +158,15 @@
 
   // Release the interfaces to the old shortcut to make sure it doesn't prevent
   // overwriting it if needed.
-  old_i_persist_file.Release();
-  old_i_shell_link.Release();
+  old_i_persist_file.Reset();
+  old_i_shell_link.Reset();
 
   HRESULT result = i_persist_file->Save(shortcut_path.value().c_str(), TRUE);
 
   // Release the interfaces in case the SHChangeNotify call below depends on
   // the operations above being fully completed.
-  i_persist_file.Release();
-  i_shell_link.Release();
+  i_persist_file.Reset();
+  i_shell_link.Reset();
 
   // If we successfully created/updated the icon, notify the shell that we have
   // done so.
diff --git a/src/build/OWNERS b/src/build/OWNERS
index 89f07f1..c644ca7 100644
--- a/src/build/OWNERS
+++ b/src/build/OWNERS
@@ -12,5 +12,11 @@
 per-file package_mac_toolchain.py=erikchen@chromium.org
 per-file package_mac_toolchain.py=justincohen@chromium.org
 per-file whitespace_file.txt=*
+per-file OWNERS.status=*
 
+# gn-dev is probably a better team here, but the tooling won't let us
+# have more than one team per component, and infra-dev is a catch-all
+# for other build-related lists.
+#
+# TEAM: infra-dev@chromium.org
 # COMPONENT: Build
diff --git a/src/build/OWNERS.status b/src/build/OWNERS.status
new file mode 100644
index 0000000..f5cc1fc
--- /dev/null
+++ b/src/build/OWNERS.status
@@ -0,0 +1,12 @@
+# Use this file to set a global status message that should be shown whenever
+# git cl owners proposes to add you as a reviewer.
+#
+# The status messages should be somewhat stable, so please don't use this for
+# short term, or frequently changing updates.
+#
+# The format of the file is
+#
+#  you@chromium.org: Single line status message.
+#
+
+jochen@chromium.org: EMEA based reviewer.
diff --git a/src/build/android/gradle/generate_gradle.py b/src/build/android/gradle/generate_gradle.py
index 88d0263..d57dfa9 100755
--- a/src/build/android/gradle/generate_gradle.py
+++ b/src/build/android/gradle/generate_gradle.py
@@ -745,7 +745,7 @@
     _ExtractZips(generator.project_dir, zip_tuples)
 
   logging.warning('Project created! (%d subprojects)', len(project_entries))
-  logging.warning('Generated projects work best with Android Studio 2.2')
+  logging.warning('Generated projects work with Android Studio 2.3')
   logging.warning('For more tips: https://chromium.googlesource.com/chromium'
                   '/src.git/+/master/docs/android_studio.md')
 
diff --git a/src/build/android/gradle/root.jinja b/src/build/android/gradle/root.jinja
index 52f0eda..d3730e7 100644
--- a/src/build/android/gradle/root.jinja
+++ b/src/build/android/gradle/root.jinja
@@ -8,6 +8,6 @@
         jcenter()
     }
     dependencies {
-        classpath "com.android.tools.build:gradle:2.2.3"
+        classpath "com.android.tools.build:gradle:2.3.0"
     }
 }
diff --git a/src/build/android/gyp/util/proguard_util.py b/src/build/android/gyp/util/proguard_util.py
index a965ff3..6fc57d9 100644
--- a/src/build/android/gyp/util/proguard_util.py
+++ b/src/build/android/gyp/util/proguard_util.py
@@ -15,15 +15,24 @@
   """
 
   IGNORE_RE = re.compile(
-      r'(?:Pro.*version|Note:|Reading|Preparing|.*:.*(?:MANIFEST\.MF|\.empty))')
+      r'(?:Pro.*version|Note:|Reading|Preparing|ProgramClass:|'
+      '.*:.*(?:MANIFEST\.MF|\.empty))')
 
   def __init__(self):
     self._last_line_ignored = False
+    self._ignore_next_line = False
 
   def __call__(self, output):
     ret = []
     for line in output.splitlines(True):
-      if not line.startswith(' '):
+      if self._ignore_next_line:
+        self._ignore_next_line = False
+        continue
+
+      if '***BINARY RUN STATS***' in line:
+        self._last_line_ignored = True
+        self._ignore_next_line = True
+      elif not line.startswith(' '):
         self._last_line_ignored = bool(self.IGNORE_RE.match(line))
       elif 'You should check if you need to specify' in line:
         self._last_line_ignored = True
@@ -199,4 +208,3 @@
     }
 
     build_utils.WriteJson(this_info, self._outjar + '.info')
-
diff --git a/src/build/android/lint/suppressions.xml b/src/build/android/lint/suppressions.xml
index 33882a2..9123117 100644
--- a/src/build/android/lint/suppressions.xml
+++ b/src/build/android/lint/suppressions.xml
@@ -94,7 +94,7 @@
   </issue>
   <issue id="IconDensities">
     <!-- The large assets below only include a few densities to reduce APK size. -->
-    <ignore regexp=": data_reduction_illustration.png, google_icon_sprite.png, physical_web_logo.png, physical_web_logo_anim1.png, physical_web_logo_anim2.png$"/>
+    <ignore regexp=": data_reduction_illustration.png, physical_web_logo.png, physical_web_logo_anim1.png, physical_web_logo_anim2.png$"/>
     <!-- crbug.com/457918 is tracking missing assets -->
     <ignore regexp="chrome/android/java/res/drawable-xxhdpi"/>
     <ignore regexp="chrome/android/java/res/drawable-xxxhdpi"/>
@@ -108,7 +108,6 @@
   </issue>
   <issue id="IconDipSize">
     <ignore regexp="chromecast/internal"/>
-    <ignore regexp="google_icon_sprite.png.*"/>
   </issue>
   <issue id="IconDuplicates" severity="Error">
     <ignore regexp="chromecast/internal"/>
@@ -323,12 +322,6 @@
     <ignore regexp="chrome/android/java/res/drawable-hdpi/signin_promo_illustration.png"/>
     <ignore regexp="chrome/android/java/res/drawable-nodpi/missing.png"/>
     <ignore regexp="chrome/android/java/res/values-v17/styles.xml"/>
-    <!--
-        This file isn't used if the target SDK version is less than 24.
-        TODO(estevenson) remove this and the conditional inclusion in
-        AndroidManifest.xml after rolling to SDK 24.
-    -->
-    <ignore regexp="chrome/android/java/res/xml/network_security_config.xml"/>
     <ignore regexp="chromecast/browser/android/apk/res/values/strings.xml"/>
     <ignore regexp="chromecast/internal"/>
     <ignore regexp="clank"/>
diff --git a/src/build/android/pylib/gtest/gtest_test_instance.py b/src/build/android/pylib/gtest/gtest_test_instance.py
index df285fb..26288be 100644
--- a/src/build/android/pylib/gtest/gtest_test_instance.py
+++ b/src/build/android/pylib/gtest/gtest_test_instance.py
@@ -143,7 +143,6 @@
           duration, log=('\n'.join(log) if log else '')))
 
   for l in output:
-    logging.info(l)
     matcher = _RE_TEST_STATUS.match(l)
     if matcher:
       if matcher.group(1) == 'RUN':
diff --git a/src/build/android/pylib/instrumentation/instrumentation_test_instance.py b/src/build/android/pylib/instrumentation/instrumentation_test_instance.py
index 5261ff2..d01e36e 100644
--- a/src/build/android/pylib/instrumentation/instrumentation_test_instance.py
+++ b/src/build/android/pylib/instrumentation/instrumentation_test_instance.py
@@ -321,8 +321,8 @@
     raise TestListPickleException(
         '%s newer than %s.' % (jar_path, pickle_path))
 
-  with open(pickle_path, 'r') as pickle_file:
-    pickle_data = pickle.loads(pickle_file.read())
+  with open(pickle_path, 'r') as f:
+    pickle_data = pickle.load(f)
   jar_md5 = md5sum.CalculateHostMd5Sums(jar_path)[jar_path]
 
   if pickle_data['VERSION'] != _PICKLE_FORMAT_VERSION:
diff --git a/src/build/android/pylib/local/device/local_device_gtest_run.py b/src/build/android/pylib/local/device/local_device_gtest_run.py
index 4856f59..dca9615 100644
--- a/src/build/android/pylib/local/device/local_device_gtest_run.py
+++ b/src/build/android/pylib/local/device/local_device_gtest_run.py
@@ -418,6 +418,9 @@
     if not self._env.skip_clear_data:
       self._delegate.Clear(device)
 
+    for l in output:
+      logging.info(l)
+
     # Parse the output.
     # TODO(jbudorick): Transition test scripts away from parsing stdout.
     if self._test_instance.enable_xml_result_parsing:
@@ -443,7 +446,7 @@
                 time.strftime('%Y%m%dT%H%M%S', time.localtime()),
                 device.serial)
             tombstones_url = logdog_helper.text(
-                stream_name, resolved_tombstones)
+                stream_name, '\n'.join(resolved_tombstones))
           result.SetLink('tombstones', tombstones_url)
 
     tests_stripped_disabled_prefix = set()
diff --git a/src/build/android/pylib/local/device/local_device_perf_test_run.py b/src/build/android/pylib/local/device/local_device_perf_test_run.py
index 19e2003..7e4538d 100644
--- a/src/build/android/pylib/local/device/local_device_perf_test_run.py
+++ b/src/build/android/pylib/local/device/local_device_perf_test_run.py
@@ -206,10 +206,10 @@
     pickled = os.path.join(constants.PERF_OUTPUT_DIR, result['name'])
     if os.path.exists(pickled):
       with file(pickled, 'r') as f:
-        previous = pickle.loads(f.read())
+        previous = pickle.load(f)
         result['output'] = previous['output'] + result['output']
     with file(pickled, 'w') as f:
-      f.write(pickle.dumps(result))
+      pickle.dump(result, f)
 
   def _TestTearDown(self):
     if self._output_dir:
diff --git a/src/build/android/pylib/perf/perf_test_instance.py b/src/build/android/pylib/perf/perf_test_instance.py
index c897f18..69ecf4c 100644
--- a/src/build/android/pylib/perf/perf_test_instance.py
+++ b/src/build/android/pylib/perf/perf_test_instance.py
@@ -26,7 +26,7 @@
     return None
 
   with file(file_name, 'r') as f:
-    return pickle.loads(f.read())
+    return pickle.load(f)
 
 
 def _GetChromiumRevision():
diff --git a/src/build/android/pylib/utils/emulator.py b/src/build/android/pylib/utils/emulator.py
index e2a5fea..a5aa544 100644
--- a/src/build/android/pylib/utils/emulator.py
+++ b/src/build/android/pylib/utils/emulator.py
@@ -417,7 +417,6 @@
     if self.headless:
       emulator_command.extend([
         '-no-skin',
-        '-no-audio',
         '-no-window'
         ])
     else:
diff --git a/src/build/android/resource_sizes.py b/src/build/android/resource_sizes.py
index 89e7dca..77000b9 100755
--- a/src/build/android/resource_sizes.py
+++ b/src/build/android/resource_sizes.py
@@ -299,6 +299,8 @@
                 None)
 
   def FindLargest(self):
+    if not self._zip_infos:
+      return None
     return max(self._zip_infos, key=lambda i: i.file_size)
 
   def ComputeZippedSize(self):
diff --git a/src/build/android/test_runner.pydeps b/src/build/android/test_runner.pydeps
index 2bf69ff..31b3ef5 100644
--- a/src/build/android/test_runner.pydeps
+++ b/src/build/android/test_runner.pydeps
@@ -47,7 +47,6 @@
 ../../third_party/catapult/devil/devil/android/sdk/aapt.py
 ../../third_party/catapult/devil/devil/android/sdk/adb_wrapper.py
 ../../third_party/catapult/devil/devil/android/sdk/build_tools.py
-../../third_party/catapult/devil/devil/android/sdk/gce_adb_wrapper.py
 ../../third_party/catapult/devil/devil/android/sdk/intent.py
 ../../third_party/catapult/devil/devil/android/sdk/keyevent.py
 ../../third_party/catapult/devil/devil/android/sdk/shared_prefs.py
diff --git a/src/build/android/test_wrapper/logdog_wrapper.py b/src/build/android/test_wrapper/logdog_wrapper.py
index e3904f5..5213cb3 100755
--- a/src/build/android/test_wrapper/logdog_wrapper.py
+++ b/src/build/android/test_wrapper/logdog_wrapper.py
@@ -36,6 +36,8 @@
                       help='The logdog bin cmd.')
   parser.add_argument('--target-devices-file', required=False,
                       help='The target devices file.')
+  parser.add_argument('--logcat-output-file',
+                      help='The logcat output file.')
   return parser
 
 def CreateStopTestsMethod(proc):
@@ -52,7 +54,9 @@
   with tempfile_ext.NamedTemporaryDirectory() as logcat_output_dir:
     test_cmd = [
         os.path.join('bin', 'run_%s' % args.target),
-        '--logcat-output-file', os.path.join(logcat_output_dir, 'logcats'),
+        '--logcat-output-file',
+        (args.logcat_output_file if args.logcat_output_file
+            else os.path.join(logcat_output_dir, 'logcats')),
         '--upload-logcats-file',
         '--target-devices-file', args.target_devices_file,
         '-v'] + extra_cmd_args
diff --git a/src/build/args/headless.gn b/src/build/args/headless.gn
index 6d073ae..639c4f7 100644
--- a/src/build/args/headless.gn
+++ b/src/build/args/headless.gn
@@ -23,7 +23,6 @@
 # to simplify deployment.
 v8_use_external_startup_data = false
 
-enable_basic_printing = false
 enable_nacl = false
 enable_print_preview = false
 enable_remoting = false
diff --git a/src/build/config/BUILD.gn b/src/build/config/BUILD.gn
index e774b20..51d68cf 100644
--- a/src/build/config/BUILD.gn
+++ b/src/build/config/BUILD.gn
@@ -194,6 +194,12 @@
       defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=0" ]
     }
   }
+
+  if (is_ios) {
+    # Disable NSAssert and GTMDevAssert (from Google Toolbox for Mac). This
+    # follows XCode's default behavior for Release builds.
+    defines += [ "NS_BLOCK_ASSERTIONS=1" ]
+  }
 }
 
 # Default libraries ------------------------------------------------------------
diff --git a/src/build/config/android/config.gni b/src/build/config/android/config.gni
index a88c936..1d276ff 100644
--- a/src/build/config/android/config.gni
+++ b/src/build/config/android/config.gni
@@ -87,7 +87,7 @@
   }
 
   webview_public_framework_jar =
-      "//third_party/android_platform/webview/frameworks_7.0.0_r1.jar"
+      "//third_party/android_platform/webview/frameworks_7.1.1_r28.jar"
   if (!defined(webview_framework_jar)) {
     webview_framework_jar = webview_public_framework_jar
   }
diff --git a/src/build/config/compiler/BUILD.gn b/src/build/config/compiler/BUILD.gn
index 08e9a9e..320b7fc 100644
--- a/src/build/config/compiler/BUILD.gn
+++ b/src/build/config/compiler/BUILD.gn
@@ -1381,18 +1381,22 @@
 }
 
 config("default_stack_frames") {
-  if (is_posix && !(is_mac || is_ios)) {
-    if (using_sanitizer || enable_profiling || is_debug ||
-        current_cpu == "arm64") {
-      # Explicitly ask for frame pointers, otherwise:
-      # * Stacks may be missing for sanitizer and profiling builds.
-      # * Debug tcmalloc can crash (crbug.com/636489).
-      # * Stacks may be missing for arm64 crash dumps (crbug.com/391706).
+  if (is_posix) {
+    if (enabled_frame_pointers) {
       cflags = [ "-fno-omit-frame-pointer" ]
-    } else if (is_android) {
+    } else {
       cflags = [ "-fomit-frame-pointer" ]
     }
   }
+  # On Windows, the flag to enable framepointers "/Oy-" must always come after
+  # the optimization flag [e.g. "/O2"]. The optimization flag is set by one of
+  # the "optimize" configs, see rest of this file. The ordering that cflags are
+  # applied is well-defined by the GN spec, and there is no way to ensure that
+  # cflags set by "default_stack_frames" is applied after those set by an
+  # "optimize" config. Similarly, there is no way to propagate state from this
+  # config into the "optimize" config. We always apply the "/Oy-" config in the
+  # definition for common_optimize_on_cflags definition, even though this may
+  # not be correct.
 }
 
 # Default "optimization on" config.
@@ -1658,7 +1662,8 @@
     # "third_party/binutils/Linux_x64/Release/bin/ld.gold: warning:
     # /tmp/lto-llvm-0b5201.o: corrupt debug info in .debug_info"
     if (!is_mac && !is_ios && !is_nacl && target_cpu != "x86" &&
-        !allow_posix_link_time_opt && !is_official_build) {
+        (use_gold || use_lld) && !allow_posix_link_time_opt &&
+        !is_official_build) {
       ldflags += [ "-Wl,--gdb-index" ]
     }
   }
diff --git a/src/build/config/compiler/compiler.gni b/src/build/config/compiler/compiler.gni
index 403dd4f..2cb9637 100644
--- a/src/build/config/compiler/compiler.gni
+++ b/src/build/config/compiler/compiler.gni
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/android/config.gni")
+import("//build/config/arm.gni")
 import("//build/config/chrome_build.gni")
 import("//build/config/chromecast_build.gni")
 import("//build/config/compiler/pgo/pgo.gni")
@@ -65,6 +66,34 @@
   use_pic = true
 }
 
+# Whether to emit frame pointers by default.
+if (is_mac || is_ios) {
+  enabled_frame_pointers = true
+} else if (is_win) {
+  # 64-bit Windows ABI doesn't support frame pointers.
+  if (target_cpu == "x64") {
+    enabled_frame_pointers = false
+  } else {
+    enabled_frame_pointers = true
+  }
+} else {
+  # Explicitly ask for frame pointers, otherwise:
+  # * Stacks may be missing for sanitizer and profiling builds.
+  # * Debug tcmalloc can crash (crbug.com/636489).
+  # * Stacks may be missing for arm64 crash dumps (crbug.com/391706).
+  enabled_frame_pointers =
+      using_sanitizer || enable_profiling || is_debug || current_cpu == "arm64"
+}
+
+# Unwinding with frame pointers requires that frame pointers are enabled by
+# default for most translation units, and that the architecture isn't thumb, as
+# frame pointers are not correctly emitted for thumb.
+if (enabled_frame_pointers && !(current_cpu == "arm" && arm_use_thumb)) {
+  can_unwind_with_frame_pointers = true
+} else {
+  can_unwind_with_frame_pointers = false
+}
+
 declare_args() {
   # Whether or not the official builds should be built with full WPO. Enabled by
   # default for the PGO and the x64 builds.
diff --git a/src/build/config/sanitizers/BUILD.gn b/src/build/config/sanitizers/BUILD.gn
index 2a6c578..ddcb49f 100644
--- a/src/build/config/sanitizers/BUILD.gn
+++ b/src/build/config/sanitizers/BUILD.gn
@@ -200,7 +200,10 @@
     ldflags = []
     if (is_asan) {
       ldflags += [ "-fsanitize=address" ]
-      if (!is_mac) {
+      if (is_mac) {
+        # https://crbug.com/708707
+        ldflags += [ "-fno-sanitize-address-use-after-scope" ]
+      } else {
         ldflags += [ "-fsanitize-address-use-after-scope" ]
       }
     }
@@ -314,6 +317,9 @@
     cflags += [ "-fsanitize=address" ]
     if (!is_mac && !is_win) {
       cflags += [ "-fsanitize-address-use-after-scope" ]
+    } else {
+      # https://crbug.com/708707
+      cflags += [ "-fno-sanitize-address-use-after-scope" ]
     }
     if (!asan_globals) {
       cflags += [
diff --git a/src/build/config/sysroot.gni b/src/build/config/sysroot.gni
index 60fc290..63e3c13 100644
--- a/src/build/config/sysroot.gni
+++ b/src/build/config/sysroot.gni
@@ -63,12 +63,6 @@
   }
 
   if (sysroot != "") {
-    # Our sysroot images only contains gcc 4.6 headers, but chromium requires
-    # gcc 4.9. Clang is able to detect and work with the 4.6 headers while
-    # gcc is not. This check can be removed if we ever update to a more modern
-    # sysroot.
-    assert(is_clang, "sysroot images require clang (try use_sysroot=false)")
-
     _script_arch = current_cpu
     if (_script_arch == "x86") {
       _script_arch = "i386"
diff --git a/src/build/experimental/install-build-deps.py b/src/build/experimental/install-build-deps.py
index 1687b94..04a26ab 100755
--- a/src/build/experimental/install-build-deps.py
+++ b/src/build/experimental/install-build-deps.py
@@ -13,7 +13,6 @@
 
 
 SUPPORTED_UBUNTU_VERSIONS = (
-  {'number': '12.04', 'codename': 'precise'},
   {'number': '14.04', 'codename': 'trusty'},
   {'number': '14.10', 'codename': 'utopic'},
   {'number': '15.04', 'codename': 'vivid'},
@@ -300,9 +299,7 @@
   lsb_codename = lsb_release_short_codename()
 
   # Find the proper version of libstdc++6-4.x-dbg.
-  if lsb_codename == 'precise':
-    _packages_dbg += ('libstdc++6-4.6-dbg',)
-  elif lsb_codename == 'trusty':
+  if lsb_codename == 'trusty':
     _packages_dbg += ('libstdc++6-4.8-dbg',)
   else:
     _packages_dbg += ('libstdc++6-4.9-dbg',)
diff --git a/src/build/install-build-deps-android.sh b/src/build/install-build-deps-android.sh
index cbf9931..06f79ae 100755
--- a/src/build/install-build-deps-android.sh
+++ b/src/build/install-build-deps-android.sh
@@ -32,11 +32,7 @@
 
 # Some binaries in the Android SDK require 32-bit libraries on the host.
 # See https://developer.android.com/sdk/installing/index.html?pkg=tools
-if [[ $lsb_release == "precise" ]]; then
-  sudo apt-get -y install ia32-libs
-else
-  sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
-fi
+sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
 
 # Required by //components/cronet/tools/generate_javadoc.py
 # TODO(375324): Stop requiring ANT.
diff --git a/src/build/linux/sysroot_scripts/debian-archive-wheezy-stable.gpg b/src/build/linux/sysroot_scripts/debian-archive-wheezy-stable.gpg
deleted file mode 100644
index d587901..0000000
--- a/src/build/linux/sysroot_scripts/debian-archive-wheezy-stable.gpg
+++ /dev/null
Binary files differ
diff --git a/src/build/linux/sysroot_scripts/install-sysroot.py b/src/build/linux/sysroot_scripts/install-sysroot.py
index c8e88ee..90b7068 100755
--- a/src/build/linux/sysroot_scripts/install-sysroot.py
+++ b/src/build/linux/sysroot_scripts/install-sysroot.py
@@ -122,12 +122,6 @@
   if host_arch == 'amd64':
     InstallDefaultSysrootForArch('i386')
 
-  # Desktop Chromium OS builds require the precise sysroot.
-  # TODO(thomasanderson): only download this when the GN arg target_os
-  # == 'chromeos', when the functionality to perform the check becomes
-  # available.
-  InstallSysroot('Precise', 'amd64')
-
   # If we can detect a non-standard target_arch such as ARM or MIPS,
   # then install the sysroot too.  Don't attempt to install arm64
   # since this is currently and android-only architecture.
diff --git a/src/build/linux/sysroot_scripts/packagelist.precise.amd64 b/src/build/linux/sysroot_scripts/packagelist.precise.amd64
deleted file mode 100644
index 8e6fc70..0000000
--- a/src/build/linux/sysroot_scripts/packagelist.precise.amd64
+++ /dev/null
@@ -1,179 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-1ubuntu10.2_amd64.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-1ubuntu10.2_amd64.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-0ubuntu1_amd64.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-0ubuntu1_amd64.deb
-main/a/avahi/libavahi-client3_0.6.30-5ubuntu2.2_amd64.deb
-main/a/avahi/libavahi-common3_0.6.30-5ubuntu2.2_amd64.deb
-main/b/bluez/libbluetooth3_4.98-2ubuntu7.2_amd64.deb
-main/b/bluez/libbluetooth-dev_4.98-2ubuntu7.2_amd64.deb
-main/b/brltty/libbrlapi0.5_4.3-1ubuntu5_amd64.deb
-main/b/brltty/libbrlapi-dev_4.3-1ubuntu5_amd64.deb
-main/c/cairo/libcairo2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo2-dev_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo-gobject2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cairo/libcairo-script-interpreter2_1.10.2-6.1ubuntu3_amd64.deb
-main/c/cups/libcups2_1.5.3-0ubuntu8.7_amd64.deb
-main/c/cups/libcups2-dev_1.5.3-0ubuntu8.7_amd64.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.98-1ubuntu1.1_amd64.deb
-main/d/dbus/libdbus-1-3_1.4.18-1ubuntu1.8_amd64.deb
-main/d/dbus/libdbus-1-dev_1.4.18-1ubuntu1.8_amd64.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42-1ubuntu2.3_amd64.deb
-main/e/e2fsprogs/libcomerr2_1.42-1ubuntu2.3_amd64.deb
-main/e/eglibc/libc6_2.15-0ubuntu10.15_amd64.deb
-main/e/eglibc/libc6-dev_2.15-0ubuntu10.15_amd64.deb
-main/e/elfutils/libelf1_0.152-1ubuntu3.1_amd64.deb
-main/e/elfutils/libelf-dev_0.152-1ubuntu3.1_amd64.deb
-main/e/expat/libexpat1_2.0.1-7.2ubuntu1.4_amd64.deb
-main/e/expat/libexpat1-dev_2.0.1-7.2ubuntu1.4_amd64.deb
-main/f/fontconfig/libfontconfig1_2.8.0-3ubuntu9.2_amd64.deb
-main/f/fontconfig/libfontconfig1-dev_2.8.0-3ubuntu9.2_amd64.deb
-main/f/freetype/libfreetype6_2.4.8-1ubuntu2.3_amd64.deb
-main/f/freetype/libfreetype6-dev_2.4.8-1ubuntu2.3_amd64.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libgcc1_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libgomp1_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libquadmath0_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libstdc++6_4.6.3-1ubuntu5_amd64.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-1ubuntu5_amd64.deb
-main/g/gconf/libgconf-2-4_3.2.5-0ubuntu2_amd64.deb
-main/g/gconf/libgconf2-4_3.2.5-0ubuntu2_amd64.deb
-main/g/gconf/libgconf2-dev_3.2.5-0ubuntu2_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1ubuntu1.5_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1ubuntu1.5_amd64.deb
-main/g/glib2.0/libglib2.0-0_2.32.4-0ubuntu1_amd64.deb
-main/g/glib2.0/libglib2.0-dev_2.32.4-0ubuntu1_amd64.deb
-main/g/gnutls26/libgnutls26_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutls-dev_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gnutls26/libgnutlsxx27_2.12.14-5ubuntu3.13_amd64.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-0ubuntu6.3_amd64.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-0ubuntu6.3_amd64.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-0ubuntu0.9_amd64.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-0ubuntu0.9_amd64.deb
-main/k/keyutils/libkeyutils1_1.5.2-2_amd64.deb
-main/k/krb5/krb5-multidev_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libgssapi-krb5-2_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libgssrpc4_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libk5crypto3_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkadm5clnt-mit8_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkadm5srv-mit8_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkdb5-6_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5-3_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5-dev_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/k/krb5/libkrb5support0_1.10+dfsg~beta1-2ubuntu0.7_amd64.deb
-main/libc/libcap2/libcap2_2.22-1ubuntu3_amd64.deb
-main/libc/libcap2/libcap-dev_2.22-1ubuntu3_amd64.deb
-main/libd/libdrm/libdrm2_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-dev_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-intel1_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-nouveau2_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libdrm-radeon1_2.4.52-1~precise2_amd64.deb
-main/libd/libdrm/libkms1_2.4.46-1ubuntu0.0.0.1_amd64.deb
-main/libf/libffi/libffi6_3.0.11~rc1-5_amd64.deb
-main/libf/libffi/libffi-dev_3.0.11~rc1-5_amd64.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-3ubuntu0.6_amd64.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-3ubuntu0.6_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.2.2-2_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.2.2-2_amd64.deb
-main/libg/libgpg-error/libgpg-error0_1.10-2ubuntu1_amd64.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-2ubuntu1_amd64.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-3.2ubuntu3_amd64.deb
-main/libp/libp11/libp11-2_0.2.8-2_amd64.deb
-main/libp/libpng/libpng12-0_1.2.46-3ubuntu4.2_amd64.deb
-main/libp/libpng/libpng12-dev_1.2.46-3ubuntu4.2_amd64.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3_amd64.deb
-main/libs/libselinux/libselinux1_2.1.0-4.1ubuntu1_amd64.deb
-main/libt/libtasn1-3/libtasn1-3_2.10-1ubuntu1.5_amd64.deb
-main/libx/libx11/libx11-6_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-dev_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-xcb1_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libx11/libx11-xcb-dev_1.4.99.1-0ubuntu2.3_amd64.deb
-main/libx/libxau/libxau6_1.0.6-4_amd64.deb
-main/libx/libxau/libxau-dev_1.0.6-4_amd64.deb
-main/libx/libxcb/libxcb1_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-render0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-1ubuntu0.2_amd64.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2build1_amd64.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2build1_amd64.deb
-main/libx/libxcursor/libxcursor1_1.1.12-1ubuntu0.1_amd64.deb
-main/libx/libxcursor/libxcursor-dev_1.1.12-1ubuntu0.1_amd64.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2build1_amd64.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2build1_amd64.deb
-main/libx/libxdmcp/libxdmcp6_1.1.0-4_amd64.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.0-4_amd64.deb
-main/libx/libxext/libxext6_1.3.0-3ubuntu0.2_amd64.deb
-main/libx/libxext/libxext-dev_1.3.0-3ubuntu0.2_amd64.deb
-main/libx/libxfixes/libxfixes3_5.0-4ubuntu4.4_amd64.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4ubuntu4.4_amd64.deb
-main/libx/libxi/libxi6_1.7.1.901-1ubuntu1~precise3_amd64.deb
-main/libx/libxi/libxi-dev_1.7.1.901-1ubuntu1~precise3_amd64.deb
-main/libx/libxinerama/libxinerama1_1.1.1-3ubuntu0.1_amd64.deb
-main/libx/libxinerama/libxinerama-dev_1.1.1-3ubuntu0.1_amd64.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2ubuntu0.3_amd64.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2ubuntu0.3_amd64.deb
-main/libx/libxrender/libxrender1_0.9.6-2ubuntu0.2_amd64.deb
-main/libx/libxrender/libxrender-dev_0.9.6-2ubuntu0.2_amd64.deb
-main/libx/libxss/libxss1_1.2.1-2_amd64.deb
-main/libx/libxss/libxss-dev_1.2.1-2_amd64.deb
-main/libx/libxt/libxt6_1.1.1-2ubuntu0.1_amd64.deb
-main/libx/libxt/libxt-dev_1.1.1-2ubuntu0.1_amd64.deb
-main/libx/libxtst/libxtst6_1.2.0-4ubuntu0.1_amd64.deb
-main/libx/libxtst/libxtst-dev_1.2.0-4ubuntu0.1_amd64.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.1-2ubuntu0.1_amd64.deb
-main/l/linux/linux-libc-dev_3.2.0-123.166_amd64.deb
-main/m/mesa/libegl1-mesa_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libegl1-mesa-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgbm1_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgbm-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgl1-mesa-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libgl1-mesa-glx_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/libglapi-mesa_8.0.4-0ubuntu0.7_amd64.deb
-main/m/mesa/mesa-common-dev_8.0.4-0ubuntu0.7_amd64.deb
-main/n/nspr/libnspr4_4.12-0ubuntu0.12.04.1_amd64.deb
-main/n/nspr/libnspr4-dev_4.12-0ubuntu0.12.04.1_amd64.deb
-main/n/nss/libnss3_3.26.2-0ubuntu0.12.04.1_amd64.deb
-main/n/nss/libnss3-dev_3.26.2-0ubuntu0.12.04.1_amd64.deb
-main/o/openssl/libssl1.0.0_1.0.1-4ubuntu5.39_amd64.deb
-main/o/openssl/libssl-dev_1.0.1-4ubuntu5.39_amd64.deb
-main/o/orbit2/liborbit2_2.14.19-0.1ubuntu1_amd64.deb
-main/p/p11-kit/libp11-kit0_0.12-2ubuntu1_amd64.deb
-main/p/pam/libpam0g_1.1.3-7ubuntu2.3_amd64.deb
-main/p/pam/libpam0g-dev_1.1.3-7ubuntu2.3_amd64.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-0ubuntu3.1_amd64.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-0ubuntu3.1_amd64.deb
-main/p/pciutils/libpci3_3.1.8-2ubuntu6_amd64.deb
-main/p/pciutils/libpci-dev_3.1.8-2ubuntu6_amd64.deb
-main/p/pcre3/libpcre3_8.12-4ubuntu0.2_amd64.deb
-main/p/pcre3/libpcre3-dev_8.12-4ubuntu0.2_amd64.deb
-main/p/pcre3/libpcrecpp0_8.12-4ubuntu0.2_amd64.deb
-main/p/pixman/libpixman-1-0_0.30.2-1ubuntu0.0.0.0.3_amd64.deb
-main/p/pixman/libpixman-1-dev_0.30.2-1ubuntu0.0.0.0.3_amd64.deb
-main/p/pulseaudio/libpulse0_1.1-0ubuntu15.4_amd64.deb
-main/p/pulseaudio/libpulse-dev_1.1-0ubuntu15.4_amd64.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_1.1-0ubuntu15.4_amd64.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6ubuntu3_amd64.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6ubuntu3_amd64.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6ubuntu3_amd64.deb
-main/w/wayland/libwayland0_0.85.0-1ubuntu2_amd64.deb
-main/w/wayland/libwayland-dev_0.85.0-1ubuntu2_amd64.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.22-1ubuntu0.2_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2ubuntu1_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.3-1~precise2_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.5-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.4.0+git20120101.is.really.1.4.0-0ubuntu1~precise2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.1-2_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.1-2_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1~precise2_all.deb
-main/z/zlib/zlib1g_1.2.3.4.dfsg-3ubuntu4_amd64.deb
-main/z/zlib/zlib1g-dev_1.2.3.4.dfsg-3ubuntu4_amd64.deb
-universe/libx/libxkbcommon/libxkbcommon0_0.1.0~1-0ubuntu1_amd64.deb
-universe/libx/libxkbcommon/libxkbcommon-dev_0.1.0~1-0ubuntu1_amd64.deb
diff --git a/src/build/linux/sysroot_scripts/packagelist.wheezy.amd64 b/src/build/linux/sysroot_scripts/packagelist.wheezy.amd64
deleted file mode 100644
index 60073a9..0000000
--- a/src/build/linux/sysroot_scripts/packagelist.wheezy.amd64
+++ /dev/null
@@ -1,180 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_amd64.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_amd64.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_amd64.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_amd64.deb
-main/a/attr/libattr1_2.4.46-8_amd64.deb
-main/a/avahi/libavahi-client3_0.6.31-2_amd64.deb
-main/a/avahi/libavahi-common3_0.6.31-2_amd64.deb
-main/b/bluez/libbluetooth3_4.99-2_amd64.deb
-main/b/bluez/libbluetooth-dev_4.99-2_amd64.deb
-main/b/brltty/libbrlapi0.5_4.4-10+deb7u1_amd64.deb
-main/b/brltty/libbrlapi-dev_4.4-10+deb7u1_amd64.deb
-main/c/cairo/libcairo2_1.12.2-3_amd64.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_amd64.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_amd64.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_amd64.deb
-main/c/cups/libcups2_1.5.3-5+deb7u6_amd64.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u6_amd64.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_amd64.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u6_amd64.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u6_amd64.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1+deb7u1_amd64.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1+deb7u1_amd64.deb
-main/e/eglibc/libc6_2.13-38+deb7u10_amd64.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u10_amd64.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_amd64.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_amd64.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u2_amd64.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u2_amd64.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_amd64.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_amd64.deb
-main/f/freetype/libfreetype6_2.4.9-1.1+deb7u3_amd64.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1+deb7u3_amd64.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_amd64.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_amd64.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libquadmath0_4.7.2-5_amd64.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_amd64.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_amd64.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1+deb7u3_amd64.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1+deb7u3_amd64.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_amd64.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_amd64.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u5_amd64.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u5_amd64.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u5_amd64.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u5_amd64.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_amd64.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_amd64.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-7+deb7u1_amd64.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-7+deb7u1_amd64.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_amd64.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u7_amd64.deb
-main/libc/libcap2/libcap2_2.22-1.2_amd64.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_amd64.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_amd64.deb
-main/libd/libdrm/libdrm-dev_2.4.40-1~deb7u2_amd64.deb
-main/libd/libdrm/libdrm-intel1_2.4.40-1~deb7u2_amd64.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.40-1~deb7u2_amd64.deb
-main/libd/libdrm/libdrm-radeon1_2.4.40-1~deb7u2_amd64.deb
-main/libd/libdrm/libkms1_2.4.40-1~deb7u2_amd64.deb
-main/libf/libffi/libffi5_3.0.10-3_amd64.deb
-main/libf/libffi/libffi-dev_3.0.10-3_amd64.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u4_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_amd64.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_amd64.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_amd64.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_amd64.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_amd64.deb
-main/libp/libp11/libp11-2_0.2.8-2_amd64.deb
-main/libp/libpng/libpng12-0_1.2.49-1+deb7u2_amd64.deb
-main/libp/libpng/libpng12-dev_1.2.49-1+deb7u2_amd64.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3_amd64.deb
-main/libs/libselinux/libselinux1_2.1.9-5_amd64.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u2_amd64.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u2_amd64.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u2_amd64.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u2_amd64.deb
-main/libx/libx11/libx11-xcb-dev_1.5.0-1+deb7u2_amd64.deb
-main/libx/libxau/libxau6_1.0.7-1_amd64.deb
-main/libx/libxau/libxau-dev_1.0.7-1_amd64.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_amd64.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2_amd64.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2_amd64.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_amd64.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_amd64.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2_amd64.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2_amd64.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_amd64.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.1-1_amd64.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_amd64.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_amd64.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_amd64.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_amd64.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_amd64.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_amd64.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_amd64.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_amd64.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_amd64.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_amd64.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u2_amd64.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u2_amd64.deb
-main/libx/libxss/libxss1_1.2.2-1_amd64.deb
-main/libx/libxss/libxss-dev_1.2.2-1_amd64.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_amd64.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_amd64.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_amd64.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_amd64.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_amd64.deb
-main/l/linux/linux-libc-dev_3.2.78-1_amd64.deb
-main/m/mesa/libegl1-mesa_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libegl1-mesa-dev_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libgbm1_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libgbm-dev_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_amd64.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_amd64.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u3_amd64.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u3_amd64.deb
-main/n/nss/libnss3_3.14.5-1+deb7u5_amd64.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u5_amd64.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u20_amd64.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u20_amd64.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_amd64.deb
-main/p/p11-kit/libp11-kit0_0.12-3_amd64.deb
-main/p/pam/libpam0g_1.1.3-7.1_amd64.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_amd64.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_amd64.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_amd64.deb
-main/p/pciutils/libpci3_3.1.9-6_amd64.deb
-main/p/pciutils/libpci-dev_3.1.9-6_amd64.deb
-main/p/pcre3/libpcre3_8.30-5_amd64.deb
-main/p/pcre3/libpcre3-dev_8.30-5_amd64.deb
-main/p/pcre3/libpcrecpp0_8.30-5_amd64.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u2_amd64.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u2_amd64.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_amd64.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_amd64.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_amd64.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_amd64.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_amd64.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_amd64.deb
-main/u/udev/libudev0_175-7.2_amd64.deb
-main/u/udev/libudev-dev_175-7.2_amd64.deb
-main/w/wayland/libwayland0_0.85.0-2_amd64.deb
-main/w/wayland/libwayland-dev_0.85.0-2_amd64.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_amd64.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_amd64.deb
diff --git a/src/build/linux/sysroot_scripts/packagelist.wheezy.arm b/src/build/linux/sysroot_scripts/packagelist.wheezy.arm
deleted file mode 100644
index 18f54a1..0000000
--- a/src/build/linux/sysroot_scripts/packagelist.wheezy.arm
+++ /dev/null
@@ -1,179 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_armhf.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_armhf.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_armhf.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_armhf.deb
-main/a/attr/libattr1_2.4.46-8_armhf.deb
-main/a/avahi/libavahi-client3_0.6.31-2_armhf.deb
-main/a/avahi/libavahi-common3_0.6.31-2_armhf.deb
-main/b/bluez/libbluetooth3_4.99-2_armhf.deb
-main/b/bluez/libbluetooth-dev_4.99-2_armhf.deb
-main/b/brltty/libbrlapi0.5_4.4-10+deb7u1_armhf.deb
-main/b/brltty/libbrlapi-dev_4.4-10+deb7u1_armhf.deb
-main/c/cairo/libcairo2_1.12.2-3_armhf.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_armhf.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_armhf.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_armhf.deb
-main/c/cups/libcups2_1.5.3-5+deb7u6_armhf.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u6_armhf.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_armhf.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u6_armhf.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u6_armhf.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1+deb7u1_armhf.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1+deb7u1_armhf.deb
-main/e/eglibc/libc6_2.13-38+deb7u10_armhf.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u10_armhf.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_armhf.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_armhf.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u2_armhf.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u2_armhf.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_armhf.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_armhf.deb
-main/f/freetype/libfreetype6_2.4.9-1.1+deb7u3_armhf.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1+deb7u3_armhf.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_armhf.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_armhf.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_armhf.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_armhf.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_armhf.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_armhf.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_armhf.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1+deb7u3_armhf.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1+deb7u3_armhf.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_armhf.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_armhf.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u5_armhf.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u5_armhf.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u5_armhf.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u5_armhf.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_armhf.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_armhf.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-7+deb7u1_armhf.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-7+deb7u1_armhf.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_armhf.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u7_armhf.deb
-main/libc/libcap2/libcap2_2.22-1.2_armhf.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_armhf.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_armhf.deb
-main/libd/libdrm/libdrm-dev_2.4.40-1~deb7u2_armhf.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.40-1~deb7u2_armhf.deb
-main/libd/libdrm/libdrm-omap1_2.4.40-1~deb7u2_armhf.deb
-main/libd/libdrm/libdrm-radeon1_2.4.40-1~deb7u2_armhf.deb
-main/libd/libdrm/libkms1_2.4.40-1~deb7u2_armhf.deb
-main/libf/libffi/libffi5_3.0.10-3+b1_armhf.deb
-main/libf/libffi/libffi-dev_3.0.10-3+b1_armhf.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_armhf.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u4_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_armhf.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_armhf.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_armhf.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_armhf.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_armhf.deb
-main/libp/libp11/libp11-2_0.2.8-2_armhf.deb
-main/libp/libpng/libpng12-0_1.2.49-1+deb7u2_armhf.deb
-main/libp/libpng/libpng12-dev_1.2.49-1+deb7u2_armhf.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3+b1_armhf.deb
-main/libs/libselinux/libselinux1_2.1.9-5_armhf.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u2_armhf.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u2_armhf.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u2_armhf.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u2_armhf.deb
-main/libx/libx11/libx11-xcb-dev_1.5.0-1+deb7u2_armhf.deb
-main/libx/libxau/libxau6_1.0.7-1_armhf.deb
-main/libx/libxau/libxau-dev_1.0.7-1_armhf.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_armhf.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2+b1_armhf.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2+b1_armhf.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_armhf.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_armhf.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2+b1_armhf.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2+b1_armhf.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_armhf.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.1-1_armhf.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_armhf.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_armhf.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_armhf.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_armhf.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_armhf.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_armhf.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_armhf.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_armhf.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_armhf.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_armhf.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u2_armhf.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u2_armhf.deb
-main/libx/libxss/libxss1_1.2.2-1_armhf.deb
-main/libx/libxss/libxss-dev_1.2.2-1_armhf.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_armhf.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_armhf.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_armhf.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_armhf.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_armhf.deb
-main/l/linux/linux-libc-dev_3.2.78-1_armhf.deb
-main/m/mesa/libegl1-mesa_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libegl1-mesa-dev_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libgbm1_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libgbm-dev_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_armhf.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_armhf.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u3_armhf.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u3_armhf.deb
-main/n/nss/libnss3_3.14.5-1+deb7u5_armhf.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u5_armhf.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u20_armhf.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u20_armhf.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_armhf.deb
-main/p/p11-kit/libp11-kit0_0.12-3_armhf.deb
-main/p/pam/libpam0g_1.1.3-7.1_armhf.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_armhf.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_armhf.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_armhf.deb
-main/p/pciutils/libpci3_3.1.9-6_armhf.deb
-main/p/pciutils/libpci-dev_3.1.9-6_armhf.deb
-main/p/pcre3/libpcre3_8.30-5_armhf.deb
-main/p/pcre3/libpcre3-dev_8.30-5_armhf.deb
-main/p/pcre3/libpcrecpp0_8.30-5_armhf.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u2_armhf.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u2_armhf.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_armhf.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_armhf.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_armhf.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_armhf.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_armhf.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_armhf.deb
-main/u/udev/libudev0_175-7.2_armhf.deb
-main/u/udev/libudev-dev_175-7.2_armhf.deb
-main/w/wayland/libwayland0_0.85.0-2_armhf.deb
-main/w/wayland/libwayland-dev_0.85.0-2_armhf.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_armhf.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_armhf.deb
diff --git a/src/build/linux/sysroot_scripts/packagelist.wheezy.i386 b/src/build/linux/sysroot_scripts/packagelist.wheezy.i386
deleted file mode 100644
index 7672da8..0000000
--- a/src/build/linux/sysroot_scripts/packagelist.wheezy.i386
+++ /dev/null
@@ -1,180 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_i386.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_i386.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_i386.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_i386.deb
-main/a/attr/libattr1_2.4.46-8_i386.deb
-main/a/avahi/libavahi-client3_0.6.31-2_i386.deb
-main/a/avahi/libavahi-common3_0.6.31-2_i386.deb
-main/b/bluez/libbluetooth3_4.99-2_i386.deb
-main/b/bluez/libbluetooth-dev_4.99-2_i386.deb
-main/b/brltty/libbrlapi0.5_4.4-10+deb7u1_i386.deb
-main/b/brltty/libbrlapi-dev_4.4-10+deb7u1_i386.deb
-main/c/cairo/libcairo2_1.12.2-3_i386.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_i386.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_i386.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_i386.deb
-main/c/cups/libcups2_1.5.3-5+deb7u6_i386.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u6_i386.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_i386.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u6_i386.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u6_i386.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1+deb7u1_i386.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1+deb7u1_i386.deb
-main/e/eglibc/libc6_2.13-38+deb7u10_i386.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u10_i386.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_i386.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_i386.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u2_i386.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u2_i386.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_i386.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_i386.deb
-main/f/freetype/libfreetype6_2.4.9-1.1+deb7u3_i386.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1+deb7u3_i386.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_i386.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_i386.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_i386.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_i386.deb
-main/g/gcc-4.7/libquadmath0_4.7.2-5_i386.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_i386.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_i386.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_i386.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1+deb7u3_i386.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1+deb7u3_i386.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_i386.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_i386.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u5_i386.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u5_i386.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u5_i386.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u5_i386.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_i386.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_i386.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-7+deb7u1_i386.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-7+deb7u1_i386.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_i386.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u7_i386.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u7_i386.deb
-main/libc/libcap2/libcap2_2.22-1.2_i386.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_i386.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_i386.deb
-main/libd/libdrm/libdrm-dev_2.4.40-1~deb7u2_i386.deb
-main/libd/libdrm/libdrm-intel1_2.4.40-1~deb7u2_i386.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.40-1~deb7u2_i386.deb
-main/libd/libdrm/libdrm-radeon1_2.4.40-1~deb7u2_i386.deb
-main/libd/libdrm/libkms1_2.4.40-1~deb7u2_i386.deb
-main/libf/libffi/libffi5_3.0.10-3_i386.deb
-main/libf/libffi/libffi-dev_3.0.10-3_i386.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u4_i386.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_i386.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_i386.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_i386.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_i386.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_i386.deb
-main/libp/libp11/libp11-2_0.2.8-2_i386.deb
-main/libp/libpng/libpng12-0_1.2.49-1+deb7u2_i386.deb
-main/libp/libpng/libpng12-dev_1.2.49-1+deb7u2_i386.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3_i386.deb
-main/libs/libselinux/libselinux1_2.1.9-5_i386.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u2_i386.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u2_i386.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u2_i386.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u2_i386.deb
-main/libx/libx11/libx11-xcb-dev_1.5.0-1+deb7u2_i386.deb
-main/libx/libxau/libxau6_1.0.7-1_i386.deb
-main/libx/libxau/libxau-dev_1.0.7-1_i386.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_i386.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2_i386.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2_i386.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_i386.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_i386.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2_i386.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2_i386.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_i386.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.1-1_i386.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_i386.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_i386.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_i386.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_i386.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_i386.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_i386.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_i386.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_i386.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_i386.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_i386.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u2_i386.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u2_i386.deb
-main/libx/libxss/libxss1_1.2.2-1_i386.deb
-main/libx/libxss/libxss-dev_1.2.2-1_i386.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_i386.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_i386.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_i386.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_i386.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_i386.deb
-main/l/linux/linux-libc-dev_3.2.78-1_i386.deb
-main/m/mesa/libegl1-mesa_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libegl1-mesa-dev_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libgbm1_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libgbm-dev_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_i386.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_i386.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u3_i386.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u3_i386.deb
-main/n/nss/libnss3_3.14.5-1+deb7u5_i386.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u5_i386.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u20_i386.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u20_i386.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_i386.deb
-main/p/p11-kit/libp11-kit0_0.12-3_i386.deb
-main/p/pam/libpam0g_1.1.3-7.1_i386.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_i386.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_i386.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_i386.deb
-main/p/pciutils/libpci3_3.1.9-6_i386.deb
-main/p/pciutils/libpci-dev_3.1.9-6_i386.deb
-main/p/pcre3/libpcre3_8.30-5_i386.deb
-main/p/pcre3/libpcre3-dev_8.30-5_i386.deb
-main/p/pcre3/libpcrecpp0_8.30-5_i386.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u2_i386.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u2_i386.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_i386.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_i386.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_i386.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_i386.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_i386.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_i386.deb
-main/u/udev/libudev0_175-7.2_i386.deb
-main/u/udev/libudev-dev_175-7.2_i386.deb
-main/w/wayland/libwayland0_0.85.0-2_i386.deb
-main/w/wayland/libwayland-dev_0.85.0-2_i386.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_i386.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_i386.deb
diff --git a/src/build/linux/sysroot_scripts/packagelist.wheezy.mipsel b/src/build/linux/sysroot_scripts/packagelist.wheezy.mipsel
deleted file mode 100644
index 0179fe7..0000000
--- a/src/build/linux/sysroot_scripts/packagelist.wheezy.mipsel
+++ /dev/null
@@ -1,178 +0,0 @@
-main/a/alsa-lib/libasound2_1.0.25-4_mipsel.deb
-main/a/alsa-lib/libasound2-dev_1.0.25-4_mipsel.deb
-main/a/atk1.0/libatk1.0-0_2.4.0-2_mipsel.deb
-main/a/atk1.0/libatk1.0-dev_2.4.0-2_mipsel.deb
-main/a/attr/libattr1_2.4.46-8_mipsel.deb
-main/a/avahi/libavahi-client3_0.6.31-2_mipsel.deb
-main/a/avahi/libavahi-common3_0.6.31-2_mipsel.deb
-main/b/bluez/libbluetooth3_4.99-2_mipsel.deb
-main/b/bluez/libbluetooth-dev_4.99-2_mipsel.deb
-main/b/brltty/libbrlapi0.5_4.4-10+deb7u1_mipsel.deb
-main/b/brltty/libbrlapi-dev_4.4-10+deb7u1_mipsel.deb
-main/c/cairo/libcairo2_1.12.2-3_mipsel.deb
-main/c/cairo/libcairo2-dev_1.12.2-3_mipsel.deb
-main/c/cairo/libcairo-gobject2_1.12.2-3_mipsel.deb
-main/c/cairo/libcairo-script-interpreter2_1.12.2-3_mipsel.deb
-main/c/cups/libcups2_1.5.3-5+deb7u6_mipsel.deb
-main/c/cups/libcups2-dev_1.5.3-5+deb7u6_mipsel.deb
-main/d/dbus-glib/libdbus-glib-1-2_0.100.2-1_mipsel.deb
-main/d/dbus/libdbus-1-3_1.6.8-1+deb7u6_mipsel.deb
-main/d/dbus/libdbus-1-dev_1.6.8-1+deb7u6_mipsel.deb
-main/e/e2fsprogs/comerr-dev_2.1-1.42.5-1.1+deb7u1_mipsel.deb
-main/e/e2fsprogs/libcomerr2_1.42.5-1.1+deb7u1_mipsel.deb
-main/e/eglibc/libc6_2.13-38+deb7u10_mipsel.deb
-main/e/eglibc/libc6-dev_2.13-38+deb7u10_mipsel.deb
-main/e/elfutils/libelf1_0.152-1+wheezy1_mipsel.deb
-main/e/elfutils/libelf-dev_0.152-1+wheezy1_mipsel.deb
-main/e/expat/libexpat1_2.1.0-1+deb7u2_mipsel.deb
-main/e/expat/libexpat1-dev_2.1.0-1+deb7u2_mipsel.deb
-main/f/fontconfig/libfontconfig1_2.9.0-7.1_mipsel.deb
-main/f/fontconfig/libfontconfig1-dev_2.9.0-7.1_mipsel.deb
-main/f/freetype/libfreetype6_2.4.9-1.1+deb7u3_mipsel.deb
-main/f/freetype/libfreetype6-dev_2.4.9-1.1+deb7u3_mipsel.deb
-main/g/gcc-4.6/gcc-4.6_4.6.3-14_mipsel.deb
-main/g/gcc-4.6/libstdc++6-4.6-dev_4.6.3-14_mipsel.deb
-main/g/gcc-4.7/libgcc1_4.7.2-5_mipsel.deb
-main/g/gcc-4.7/libgomp1_4.7.2-5_mipsel.deb
-main/g/gcc-4.7/libstdc++6_4.7.2-5_mipsel.deb
-main/g/gconf/libgconf2-4_3.2.5-1+build1_mipsel.deb
-main/g/gconf/libgconf-2-4_3.2.5-1+build1_mipsel.deb
-main/g/gconf/libgconf2-dev_3.2.5-1+build1_mipsel.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.26.1-1+deb7u3_mipsel.deb
-main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.26.1-1+deb7u3_mipsel.deb
-main/g/glib2.0/libglib2.0-0_2.33.12+really2.32.4-5_mipsel.deb
-main/g/glib2.0/libglib2.0-dev_2.33.12+really2.32.4-5_mipsel.deb
-main/g/gnutls26/libgnutls26_2.12.20-8+deb7u5_mipsel.deb
-main/g/gnutls26/libgnutls-dev_2.12.20-8+deb7u5_mipsel.deb
-main/g/gnutls26/libgnutls-openssl27_2.12.20-8+deb7u5_mipsel.deb
-main/g/gnutls26/libgnutlsxx27_2.12.20-8+deb7u5_mipsel.deb
-main/g/gtk+2.0/libgtk2.0-0_2.24.10-2_mipsel.deb
-main/g/gtk+2.0/libgtk2.0-dev_2.24.10-2_mipsel.deb
-main/g/gtk+3.0/libgtk-3-0_3.4.2-7+deb7u1_mipsel.deb
-main/g/gtk+3.0/libgtk-3-dev_3.4.2-7+deb7u1_mipsel.deb
-main/k/keyutils/libkeyutils1_1.5.5-3+deb7u1_mipsel.deb
-main/k/krb5/krb5-multidev_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libgssapi-krb5-2_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libgssrpc4_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libk5crypto3_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkadm5clnt-mit8_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkadm5srv-mit8_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkdb5-6_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkrb5-3_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkrb5-dev_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u7_mipsel.deb
-main/libc/libcap2/libcap2_2.22-1.2_mipsel.deb
-main/libc/libcap2/libcap-dev_2.22-1.2_mipsel.deb
-main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_mipsel.deb
-main/libd/libdrm/libdrm-dev_2.4.40-1~deb7u2_mipsel.deb
-main/libd/libdrm/libdrm-nouveau1a_2.4.40-1~deb7u2_mipsel.deb
-main/libd/libdrm/libdrm-radeon1_2.4.40-1~deb7u2_mipsel.deb
-main/libd/libdrm/libkms1_2.4.40-1~deb7u2_mipsel.deb
-main/libf/libffi/libffi5_3.0.10-3_mipsel.deb
-main/libf/libffi/libffi-dev_3.0.10-3_mipsel.deb
-main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_mipsel.deb
-main/libg/libgcrypt11/libgcrypt11-dev_1.5.0-5+deb7u4_mipsel.deb
-main/libg/libgnome-keyring/libgnome-keyring0_3.4.1-1_mipsel.deb
-main/libg/libgnome-keyring/libgnome-keyring-dev_3.4.1-1_mipsel.deb
-main/libg/libgpg-error/libgpg-error0_1.10-3.1_mipsel.deb
-main/libg/libgpg-error/libgpg-error-dev_1.10-3.1_mipsel.deb
-main/libn/libnss-db/libnss-db_2.2.3pre1-4_mipsel.deb
-main/libp/libp11/libp11-2_0.2.8-2_mipsel.deb
-main/libp/libpng/libpng12-0_1.2.49-1+deb7u2_mipsel.deb
-main/libp/libpng/libpng12-dev_1.2.49-1+deb7u2_mipsel.deb
-main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-3_mipsel.deb
-main/libs/libselinux/libselinux1_2.1.9-5_mipsel.deb
-main/libt/libtasn1-3/libtasn1-3_2.13-2+deb7u2_mipsel.deb
-main/libx/libx11/libx11-6_1.5.0-1+deb7u2_mipsel.deb
-main/libx/libx11/libx11-dev_1.5.0-1+deb7u2_mipsel.deb
-main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u2_mipsel.deb
-main/libx/libx11/libx11-xcb-dev_1.5.0-1+deb7u2_mipsel.deb
-main/libx/libxau/libxau6_1.0.7-1_mipsel.deb
-main/libx/libxau/libxau-dev_1.0.7-1_mipsel.deb
-main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcb/libxcb-shm0-dev_1.8.1-2+deb7u1_mipsel.deb
-main/libx/libxcomposite/libxcomposite1_0.4.3-2_mipsel.deb
-main/libx/libxcomposite/libxcomposite-dev_0.4.3-2_mipsel.deb
-main/libx/libxcursor/libxcursor1_1.1.13-1+deb7u1_mipsel.deb
-main/libx/libxcursor/libxcursor-dev_1.1.13-1+deb7u1_mipsel.deb
-main/libx/libxdamage/libxdamage1_1.1.3-2_mipsel.deb
-main/libx/libxdamage/libxdamage-dev_1.1.3-2_mipsel.deb
-main/libx/libxdmcp/libxdmcp6_1.1.1-1_mipsel.deb
-main/libx/libxdmcp/libxdmcp-dev_1.1.1-1_mipsel.deb
-main/libx/libxext/libxext6_1.3.1-2+deb7u1_mipsel.deb
-main/libx/libxext/libxext-dev_1.3.1-2+deb7u1_mipsel.deb
-main/libx/libxfixes/libxfixes3_5.0-4+deb7u1_mipsel.deb
-main/libx/libxfixes/libxfixes-dev_5.0-4+deb7u1_mipsel.deb
-main/libx/libxi/libxi6_1.6.1-1+deb7u1_mipsel.deb
-main/libx/libxi/libxi-dev_1.6.1-1+deb7u1_mipsel.deb
-main/libx/libxinerama/libxinerama1_1.1.2-1+deb7u1_mipsel.deb
-main/libx/libxinerama/libxinerama-dev_1.1.2-1+deb7u1_mipsel.deb
-main/libx/libxrandr/libxrandr2_1.3.2-2+deb7u1_mipsel.deb
-main/libx/libxrandr/libxrandr-dev_1.3.2-2+deb7u1_mipsel.deb
-main/libx/libxrender/libxrender1_0.9.7-1+deb7u2_mipsel.deb
-main/libx/libxrender/libxrender-dev_0.9.7-1+deb7u2_mipsel.deb
-main/libx/libxss/libxss1_1.2.2-1_mipsel.deb
-main/libx/libxss/libxss-dev_1.2.2-1_mipsel.deb
-main/libx/libxt/libxt6_1.1.3-1+deb7u1_mipsel.deb
-main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_mipsel.deb
-main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_mipsel.deb
-main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_mipsel.deb
-main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_mipsel.deb
-main/l/linux/linux-libc-dev_3.2.78-1_mipsel.deb
-main/m/mesa/libegl1-mesa_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libegl1-mesa-dev_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libegl1-mesa-drivers_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libgbm1_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libgbm-dev_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_mipsel.deb
-main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_mipsel.deb
-main/n/nspr/libnspr4_4.9.2-1+deb7u3_mipsel.deb
-main/n/nspr/libnspr4-dev_4.9.2-1+deb7u3_mipsel.deb
-main/n/nss/libnss3_3.14.5-1+deb7u5_mipsel.deb
-main/n/nss/libnss3-dev_3.14.5-1+deb7u5_mipsel.deb
-main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u20_mipsel.deb
-main/o/openssl/libssl-dev_1.0.1e-2+deb7u20_mipsel.deb
-main/o/orbit2/liborbit2_2.14.19-0.1_mipsel.deb
-main/p/p11-kit/libp11-kit0_0.12-3_mipsel.deb
-main/p/pam/libpam0g_1.1.3-7.1_mipsel.deb
-main/p/pam/libpam0g-dev_1.1.3-7.1_mipsel.deb
-main/p/pango1.0/libpango1.0-0_1.30.0-1_mipsel.deb
-main/p/pango1.0/libpango1.0-dev_1.30.0-1_mipsel.deb
-main/p/pciutils/libpci3_3.1.9-6_mipsel.deb
-main/p/pciutils/libpci-dev_3.1.9-6_mipsel.deb
-main/p/pcre3/libpcre3_8.30-5_mipsel.deb
-main/p/pcre3/libpcre3-dev_8.30-5_mipsel.deb
-main/p/pcre3/libpcrecpp0_8.30-5_mipsel.deb
-main/p/pixman/libpixman-1-0_0.26.0-4+deb7u2_mipsel.deb
-main/p/pixman/libpixman-1-dev_0.26.0-4+deb7u2_mipsel.deb
-main/p/pulseaudio/libpulse0_2.0-6.1_mipsel.deb
-main/p/pulseaudio/libpulse-dev_2.0-6.1_mipsel.deb
-main/p/pulseaudio/libpulse-mainloop-glib0_2.0-6.1_mipsel.deb
-main/s/speech-dispatcher/libspeechd2_0.7.1-6.2_mipsel.deb
-main/s/speech-dispatcher/libspeechd-dev_0.7.1-6.2_mipsel.deb
-main/s/speech-dispatcher/speech-dispatcher_0.7.1-6.2_mipsel.deb
-main/u/udev/libudev0_175-7.2_mipsel.deb
-main/u/udev/libudev-dev_175-7.2_mipsel.deb
-main/w/wayland/libwayland0_0.85.0-2_mipsel.deb
-main/w/wayland/libwayland-dev_0.85.0-2_mipsel.deb
-main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
-main/x/x11proto-core/x11proto-core-dev_7.0.23-1_all.deb
-main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
-main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
-main/x/x11proto-input/x11proto-input-dev_2.2-1_all.deb
-main/x/x11proto-kb/x11proto-kb-dev_1.0.6-2_all.deb
-main/x/x11proto-randr/x11proto-randr-dev_1.3.2-2_all.deb
-main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
-main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
-main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
-main/x/x11proto-xext/x11proto-xext-dev_7.2.1-1_all.deb
-main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
-main/z/zlib/zlib1g_1.2.7.dfsg-13_mipsel.deb
-main/z/zlib/zlib1g-dev_1.2.7.dfsg-13_mipsel.deb
diff --git a/src/build/linux/sysroot_scripts/sysroot-creator-precise.sh b/src/build/linux/sysroot_scripts/sysroot-creator-precise.sh
deleted file mode 100755
index 8c536b4..0000000
--- a/src/build/linux/sysroot_scripts/sysroot-creator-precise.sh
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/bin/bash
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-DISTRO=ubuntu
-DIST=precise
-DIST_UPDATES=precise-updates
-REPO_EXTRA="universe"
-
-# This is where we get all the debian packages from.
-APT_REPO=http://archive.ubuntu.com/ubuntu
-APT_REPO_ARM=http://ports.ubuntu.com
-APT_REPO_ARM64=http://ports.ubuntu.com
-KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg
-
-HAS_ARCH_AMD64=1
-
-# Precise supports these architectures but they are not needed by chrome.
-# HAS_ARCH_I386=1
-# HAS_ARCH_ARM=1
-
-# Sysroot packages: these are the packages needed to build chrome.
-# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
-# by running this script in GeneratePackageList mode.
-DEBIAN_PACKAGES="\
-  comerr-dev
-  gcc-4.6
-  krb5-multidev
-  libasound2
-  libasound2-dev
-  libatk1.0-0
-  libatk1.0-dev
-  libavahi-client3
-  libavahi-common3
-  libbluetooth3
-  libbluetooth-dev
-  libbrlapi0.5
-  libbrlapi-dev
-  libc6
-  libc6-dev
-  libcairo2
-  libcairo2-dev
-  libcairo-gobject2
-  libcairo-script-interpreter2
-  libcap-dev
-  libcap2
-  libcomerr2
-  libcups2
-  libcups2-dev
-  libdbus-1-3
-  libdbus-1-dev
-  libdbus-glib-1-2
-  libdrm-dev
-  libdrm-intel1
-  libdrm-nouveau1a
-  libdrm-nouveau2
-  libdrm-radeon1
-  libdrm2
-  libegl1-mesa
-  libegl1-mesa-dev
-  libegl1-mesa-drivers
-  libelf1
-  libelf-dev
-  libexpat1
-  libexpat1-dev
-  libffi6
-  libffi-dev
-  libfontconfig1
-  libfontconfig1-dev
-  libfreetype6
-  libfreetype6-dev
-  libgbm1
-  libgbm-dev
-  libgcc1
-  libgconf-2-4
-  libgconf2-4
-  libgconf2-dev
-  libgcrypt11
-  libgcrypt11-dev
-  libgdk-pixbuf2.0-0
-  libgdk-pixbuf2.0-dev
-  libgl1-mesa-dev
-  libgl1-mesa-glx
-  libglapi-mesa
-  libglib2.0-0
-  libglib2.0-dev
-  libgnome-keyring0
-  libgnome-keyring-dev
-  libgnutls26
-  libgnutls-dev
-  libgnutls-openssl27
-  libgnutlsxx27
-  libgomp1
-  libgpg-error0
-  libgpg-error-dev
-  libgssapi-krb5-2
-  libgssrpc4
-  libgtk-3-0
-  libgtk-3-dev
-  libgtk2.0-0
-  libgtk2.0-dev
-  libk5crypto3
-  libkadm5clnt-mit8
-  libkadm5srv-mit8
-  libkdb5-6
-  libkeyutils1
-  libkms1
-  libkrb5-3
-  libkrb5-dev
-  libkrb5support0
-  libnspr4
-  libnspr4-dev
-  libnss3
-  libnss3-dev
-  libnss-db
-  liborbit2
-  libp11-2
-  libp11-kit0
-  libpam0g
-  libpam0g-dev
-  libpango1.0-0
-  libpango1.0-dev
-  libpci3
-  libpci-dev
-  libpcre3
-  libpcre3-dev
-  libpcrecpp0
-  libpixman-1-0
-  libpixman-1-dev
-  libpng12-0
-  libpng12-dev
-  libpthread-stubs0-dev
-  libpulse0
-  libpulse-dev
-  libpulse-mainloop-glib0
-  libselinux1
-  libspeechd2
-  libspeechd-dev
-  libssl1.0.0
-  libssl-dev
-  libstdc++6
-  libstdc++6-4.6-dev
-  libtasn1-3
-  libwayland0
-  libwayland-dev
-  libx11-6
-  libx11-dev
-  libx11-xcb1
-  libx11-xcb-dev
-  libxau6
-  libxau-dev
-  libxcb1
-  libxcb1-dev
-  libxcb-glx0
-  libxcb-render0
-  libxcb-render0-dev
-  libxcb-shm0
-  libxcb-shm0-dev
-  libxcomposite1
-  libxcomposite-dev
-  libxcursor1
-  libxcursor-dev
-  libxdamage1
-  libxdamage-dev
-  libxdmcp6
-  libxdmcp-dev
-  libxext6
-  libxext-dev
-  libxfixes3
-  libxfixes-dev
-  libxi6
-  libxi-dev
-  libxinerama1
-  libxinerama-dev
-  libxkbcommon0
-  libxkbcommon-dev
-  libxrandr2
-  libxrandr-dev
-  libxrender1
-  libxrender-dev
-  libxss1
-  libxss-dev
-  libxt6
-  libxt-dev
-  libxtst6
-  libxtst-dev
-  libxxf86vm1
-  linux-libc-dev
-  mesa-common-dev
-  speech-dispatcher
-  x11proto-composite-dev
-  x11proto-core-dev
-  x11proto-damage-dev
-  x11proto-fixes-dev
-  x11proto-input-dev
-  x11proto-kb-dev
-  x11proto-randr-dev
-  x11proto-record-dev
-  x11proto-render-dev
-  x11proto-scrnsaver-dev
-  x11proto-xext-dev
-  zlib1g
-  zlib1g-dev
-"
-
-DEBIAN_PACKAGES_X86="libquadmath0"
-DEBIAN_PACKAGES_ARM="libdrm-omap1"
-
-. "${SCRIPT_DIR}/sysroot-creator.sh"
diff --git a/src/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh b/src/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh
deleted file mode 100755
index 7f8c9ce..0000000
--- a/src/build/linux/sysroot_scripts/sysroot-creator-wheezy.sh
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/bin/bash
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-DISTRO=debian
-DIST=wheezy
-DIST_UPDATES=wheezy-updates
-
-APT_REPO=http://http.us.debian.org/debian
-KEYRING_FILE="${SCRIPT_DIR}/debian-archive-wheezy-stable.gpg"
-
-HAS_ARCH_AMD64=1
-HAS_ARCH_I386=1
-HAS_ARCH_ARM=1
-HAS_ARCH_MIPS=1
-
-# Sysroot packages: these are the packages needed to build chrome.
-# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
-# by running this script in GeneratePackageList mode.
-DEBIAN_PACKAGES="\
-  comerr-dev
-  gcc-4.6
-  krb5-multidev
-  libasound2
-  libasound2-dev
-  libatk1.0-0
-  libatk1.0-dev
-  libattr1
-  libavahi-client3
-  libavahi-common3
-  libbluetooth3
-  libbluetooth-dev
-  libbrlapi0.5
-  libbrlapi-dev
-  libc6
-  libc6-dev
-  libcairo2
-  libcairo2-dev
-  libcairo-gobject2
-  libcairo-script-interpreter2
-  libcap-dev
-  libcap2
-  libcomerr2
-  libcups2
-  libcups2-dev
-  libdbus-1-3
-  libdbus-1-dev
-  libdbus-glib-1-2
-  libdrm2
-  libdrm-dev
-  libdrm-nouveau1a
-  libdrm-radeon1
-  libegl1-mesa
-  libegl1-mesa-dev
-  libegl1-mesa-drivers
-  libelf1
-  libelf-dev
-  libexpat1
-  libexpat1-dev
-  libffi5
-  libffi-dev
-  libfontconfig1
-  libfontconfig1-dev
-  libfreetype6
-  libfreetype6-dev
-  libgbm1
-  libgbm-dev
-  libgcc1
-  libgconf-2-4
-  libgconf2-4
-  libgconf2-dev
-  libgcrypt11
-  libgcrypt11-dev
-  libgdk-pixbuf2.0-0
-  libgdk-pixbuf2.0-dev
-  libgl1-mesa-dev
-  libgl1-mesa-glx
-  libglapi-mesa
-  libglib2.0-0
-  libglib2.0-dev
-  libgnome-keyring0
-  libgnome-keyring-dev
-  libgnutls26
-  libgnutls-dev
-  libgnutls-openssl27
-  libgnutlsxx27
-  libgomp1
-  libgpg-error0
-  libgpg-error-dev
-  libgssapi-krb5-2
-  libgssrpc4
-  libgtk-3-0
-  libgtk-3-dev
-  libgtk2.0-0
-  libgtk2.0-dev
-  libk5crypto3
-  libkadm5clnt-mit8
-  libkadm5srv-mit8
-  libkdb5-6
-  libkeyutils1
-  libkms1
-  libkrb5-3
-  libkrb5-dev
-  libkrb5support0
-  libnspr4
-  libnspr4-dev
-  libnss3
-  libnss3-dev
-  libnss-db
-  liborbit2
-  libp11-2
-  libp11-kit0
-  libpam0g
-  libpam0g-dev
-  libpango1.0-0
-  libpango1.0-dev
-  libpci3
-  libpci-dev
-  libpcre3
-  libpcre3-dev
-  libpcrecpp0
-  libpixman-1-0
-  libpixman-1-dev
-  libpng12-0
-  libpng12-dev
-  libpthread-stubs0-dev
-  libpulse0
-  libpulse-dev
-  libpulse-mainloop-glib0
-  libselinux1
-  libspeechd2
-  libspeechd-dev
-  libssl1.0.0
-  libssl-dev
-  libstdc++6
-  libstdc++6-4.6-dev
-  libtasn1-3
-  libudev-dev
-  libudev0
-  libwayland0
-  libwayland-dev
-  libx11-6
-  libx11-dev
-  libx11-xcb1
-  libx11-xcb-dev
-  libxau6
-  libxau-dev
-  libxcb1
-  libxcb1-dev
-  libxcb-glx0
-  libxcb-render0
-  libxcb-render0-dev
-  libxcb-shm0
-  libxcb-shm0-dev
-  libxcomposite1
-  libxcomposite-dev
-  libxcursor1
-  libxcursor-dev
-  libxdamage1
-  libxdamage-dev
-  libxdmcp6
-  libxdmcp-dev
-  libxext6
-  libxext-dev
-  libxfixes3
-  libxfixes-dev
-  libxi6
-  libxi-dev
-  libxinerama1
-  libxinerama-dev
-  libxrandr2
-  libxrandr-dev
-  libxrender1
-  libxrender-dev
-  libxss1
-  libxss-dev
-  libxt6
-  libxt-dev
-  libxtst6
-  libxtst-dev
-  libxxf86vm1
-  linux-libc-dev
-  mesa-common-dev
-  speech-dispatcher
-  x11proto-composite-dev
-  x11proto-core-dev
-  x11proto-damage-dev
-  x11proto-fixes-dev
-  x11proto-input-dev
-  x11proto-kb-dev
-  x11proto-randr-dev
-  x11proto-record-dev
-  x11proto-render-dev
-  x11proto-scrnsaver-dev
-  x11proto-xext-dev
-  x11proto-xinerama-dev
-  zlib1g
-  zlib1g-dev
-"
-
-DEBIAN_PACKAGES_X86="libquadmath0 libdrm-intel1"
-DEBIAN_PACKAGES_ARM="libdrm-omap1"
-DEBIAN_PACKAGES_AMD64=""
-
-. "${SCRIPT_DIR}/sysroot-creator.sh"
diff --git a/src/build/linux/sysroot_scripts/sysroots.json b/src/build/linux/sysroot_scripts/sysroots.json
index 3b2333a..d4b2f77 100644
--- a/src/build/linux/sysroot_scripts/sysroots.json
+++ b/src/build/linux/sysroot_scripts/sysroots.json
@@ -29,40 +29,10 @@
         "SysrootDir": "debian_jessie_mips-sysroot",
         "Tarball": "debian_jessie_mips_sysroot.tgz"
     },
-    "precise_amd64": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "8fffb717217b2dc4e29b3a1305877bcd0552f55e",
-        "SysrootDir": "ubuntu_precise_amd64-sysroot",
-        "Tarball": "ubuntu_precise_amd64_sysroot.tgz"
-    },
     "trusty_arm": {
         "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
         "Sha1Sum": "f78eb929410b94cdf48276db82a7e7adcafcc277",
         "SysrootDir": "ubuntu_trusty_arm-sysroot",
         "Tarball": "ubuntu_trusty_arm_sysroot.tgz"
-    },
-    "wheezy_amd64": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "f86a3d88e777ac6e52f61d97ac0c008b2b088429",
-        "SysrootDir": "debian_wheezy_amd64-sysroot",
-        "Tarball": "debian_wheezy_amd64_sysroot.tgz"
-    },
-    "wheezy_arm": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "e1939f3de5c814a9309ba4668b7d324fa0f90ba8",
-        "SysrootDir": "debian_wheezy_arm-sysroot",
-        "Tarball": "debian_wheezy_arm_sysroot.tgz"
-    },
-    "wheezy_i386": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "b28d8ea2eecb51c30c20e05cc399e428b4ad5af9",
-        "SysrootDir": "debian_wheezy_i386-sysroot",
-        "Tarball": "debian_wheezy_i386_sysroot.tgz"
-    },
-    "wheezy_mips": {
-        "Revision": "d3d82f7c4e34a753953581a48e62ef577b334529",
-        "Sha1Sum": "370fac62175c1ea41070cc6e115e4f086136cfee",
-        "SysrootDir": "debian_wheezy_mips-sysroot",
-        "Tarball": "debian_wheezy_mips_sysroot.tgz"
     }
 }
diff --git a/src/build/sanitizers/tsan_suppressions.cc b/src/build/sanitizers/tsan_suppressions.cc
index d9753ef..74b802a 100644
--- a/src/build/sanitizers/tsan_suppressions.cc
+++ b/src/build/sanitizers/tsan_suppressions.cc
@@ -246,6 +246,9 @@
 "race:net::(anonymous namespace)::ProxyResolverV8TracingImpl::RequestImpl"
 "::~RequestImpl()\n"
 
+// http://crbug.com/691029
+"deadlock:libGLX.so*\n"
+
 // End of suppressions.
 ;  // Please keep this semicolon.
 
diff --git a/src/build/secondary/third_party/android_tools/BUILD.gn b/src/build/secondary/third_party/android_tools/BUILD.gn
index bcb7ce8..f11a245 100644
--- a/src/build/secondary/third_party/android_tools/BUILD.gn
+++ b/src/build/secondary/third_party/android_tools/BUILD.gn
@@ -155,6 +155,44 @@
   aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
 }
 
+android_aar_prebuilt("android_support_v7_preference_java") {
+  deps = [
+    ":android_support_v7_appcompat_java",
+  ]
+  _lib_name = "preference-v7"
+  aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
+}
+
+android_aar_prebuilt("android_support_v14_preference_java") {
+  deps = [
+    ":android_support_v7_preference_java",
+  ]
+  _lib_name = "preference-v14"
+  aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
+}
+
+android_aar_prebuilt("android_support_v17_leanback_java") {
+  deps = [
+    ":android_support_v4_java",
+    ":android_support_v7_recyclerview_java",
+  ]
+  _lib_name = "leanback-v17"
+  aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
+}
+
+android_aar_prebuilt("android_support_v17_preference_java") {
+  deps = [
+    ":android_support_v14_preference_java",
+    ":android_support_v17_leanback_java",
+    ":android_support_v4_java",
+    ":android_support_v7_appcompat_java",
+    ":android_support_v7_preference_java",
+    ":android_support_v7_recyclerview_java",
+  ]
+  _lib_name = "preference-leanback-v17"
+  aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
+}
+
 # TODO(dgn): Remove this once no other target has a dependency on it
 java_group("google_play_services_default_resources") {
   deps = []
@@ -176,20 +214,6 @@
   ]
 }
 
-android_aar_prebuilt("android_support_v17_leanback_java") {
-  deps = [
-    ":android_support_v7_recyclerview_java",
-  ]
-  _lib_name = "leanback-v17"
-  aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
-}
-
-# TODO(jbudorick): Remove this once net_java_test_support no longer needs it.
-android_java_prebuilt("legacy_http_javalib") {
-  testonly = true
-  jar_path = "$android_sdk/optional/org.apache.http.legacy.jar"
-}
-
 # TODO(dgn): Use the POM files instead of hardcoding the dependencies.
 gms_path = "$default_extras_android_sdk_root/extras/google/m2repository/com/google/android/gms"
 gms_version = "10.2.0"
diff --git a/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn b/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
index feaf97e..398a115 100644
--- a/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
+++ b/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
@@ -84,6 +84,9 @@
     "misc/initialization_state_dcheck.h",
     "misc/metrics.cc",
     "misc/metrics.h",
+    "misc/paths.h",
+    "misc/paths_mac.cc",
+    "misc/paths_win.cc",
     "misc/pdb_structures.cc",
     "misc/pdb_structures.h",
     "misc/random_string.cc",
@@ -122,6 +125,8 @@
     "posix/drop_privileges.h",
     "posix/process_info.h",
     "posix/process_info_mac.cc",
+    "posix/scoped_mmap.cc",
+    "posix/scoped_mmap.h",
     "posix/signals.cc",
     "posix/signals.h",
     "posix/symbolic_constants_posix.cc",
diff --git a/src/build/util/LASTCHANGE b/src/build/util/LASTCHANGE
index 48d2462..876b2ab 100644
--- a/src/build/util/LASTCHANGE
+++ b/src/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=a64e5348bede993ba2f5a36c656d7aebb9d9059d-refs/heads/master@{#461544}
+LASTCHANGE=8c425270f28666a3fab38db1b6e68f54311990ea-refs/heads/master@{#463257}
diff --git a/src/build/util/LASTCHANGE.blink b/src/build/util/LASTCHANGE.blink
index e4d6652..2731b54 100644
--- a/src/build/util/LASTCHANGE.blink
+++ b/src/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=a64e5348bede993ba2f5a36c656d7aebb9d9059d
+LASTCHANGE=8c425270f28666a3fab38db1b6e68f54311990ea
diff --git a/src/buildtools/checkdeps/README.md b/src/buildtools/checkdeps/README.md
new file mode 100644
index 0000000..ff51884
--- /dev/null
+++ b/src/buildtools/checkdeps/README.md
@@ -0,0 +1,78 @@
+# DEPS Files
+
+DEPS files specify which files the sources in a directory tree may include.
+
+## File format
+
+First you have the normal module-level deps. These are the ones used by
+gclient. An example would be:
+
+```
+deps = {
+  "base":"http://foo.bar/trunk/base"
+}
+```
+
+DEPS files not in the top-level of a module won't need this. Then you have any
+additional include rules. You can add (using `+`) or subtract (using `-`) from
+the previously specified rules (including module-level deps). You can also
+specify a path that is allowed for now but that we intend to remove, using `!`;
+this is treated the same as `+` when `check_deps` is run by our bots, but a
+presubmit step will show a warning if you add a new include of a file that is
+only allowed by `!`.
+
+Note that for .java files, there is currently no difference between `+` and
+`!`, even in the presubmit step.
+
+```
+include_rules = [
+  # Code should be able to use base (it's specified in the module-level
+  # deps above), but nothing in "base/evil" because it's evil.
+  "-base/evil",
+
+  # But this one subdirectory of evil is OK.
+  "+base/evil/not",
+
+  # And it can include files from this other directory even though there is
+  # no deps rule for it.
+  "+tools/crime_fighter",
+
+  # This dependency is allowed for now but work is ongoing to remove it,
+  # so you shouldn't add further dependencies on it.
+  "!base/evil/ok_for_now.h",
+]
+```
+
+If you have certain include rules that should only be applied for some files
+within this directory and subdirectories, you can write a section named
+`specific_include_rules` that is a hash map of regular expressions to the list
+of rules that should apply to files matching them. Note that such rules will
+always be applied before the rules from `include_rules` have been applied, but
+the order in which rules associated with different regular expressions is
+applied is arbitrary.
+
+```
+specific_include_rules = {
+  ".*_(unit|browser|api)test\.cc": [
+    "+libraries/testsupport",
+  ],
+}
+```
+
+# Directory structure
+
+DEPS files may be placed anywhere in the tree. Each one applies to all
+subdirectories, where there may be more DEPS files that provide additions or
+subtractions for their own sub-trees.
+
+There is an implicit rule for the current directory (where the DEPS file lives)
+and all of its subdirectories. This prevents you from having to explicitly
+allow the current directory everywhere. This implicit rule is applied first, so
+you can modify or remove it using the normal include rules.
+
+The rules are processed in order. This means you can explicitly allow a higher
+directory and then take away permissions from sub-parts, or the reverse.
+
+Note that all directory separators must be `/` slashes (Unix-style) and not
+backslashes. All directories should be relative to the source root and use
+only lowercase.
diff --git a/src/buildtools/checkdeps/builddeps.py b/src/buildtools/checkdeps/builddeps.py
index eb3eb1e..507a3cd 100755
--- a/src/buildtools/checkdeps/builddeps.py
+++ b/src/buildtools/checkdeps/builddeps.py
@@ -6,73 +6,7 @@
 """Traverses the source tree, parses all found DEPS files, and constructs
 a dependency rule table to be used by subclasses.
 
-The format of the deps file:
-
-First you have the normal module-level deps. These are the ones used by
-gclient. An example would be:
-
-  deps = {
-    "base":"http://foo.bar/trunk/base"
-  }
-
-DEPS files not in the top-level of a module won't need this. Then you
-have any additional include rules. You can add (using "+") or subtract
-(using "-") from the previously specified rules (including
-module-level deps). You can also specify a path that is allowed for
-now but that we intend to remove, using "!"; this is treated the same
-as "+" when check_deps is run by our bots, but a presubmit step will
-show a warning if you add a new include of a file that is only allowed
-by "!".
-
-Note that for .java files, there is currently no difference between
-"+" and "!", even in the presubmit step.
-
-  include_rules = [
-    # Code should be able to use base (it's specified in the module-level
-    # deps above), but nothing in "base/evil" because it's evil.
-    "-base/evil",
-
-    # But this one subdirectory of evil is OK.
-    "+base/evil/not",
-
-    # And it can include files from this other directory even though there is
-    # no deps rule for it.
-    "+tools/crime_fighter",
-
-    # This dependency is allowed for now but work is ongoing to remove it,
-    # so you shouldn't add further dependencies on it.
-    "!base/evil/ok_for_now.h",
-  ]
-
-If you have certain include rules that should only be applied for some
-files within this directory and subdirectories, you can write a
-section named specific_include_rules that is a hash map of regular
-expressions to the list of rules that should apply to files matching
-them.  Note that such rules will always be applied before the rules
-from 'include_rules' have been applied, but the order in which rules
-associated with different regular expressions is applied is arbitrary.
-
-  specific_include_rules = {
-    ".*_(unit|browser|api)test\.cc": [
-      "+libraries/testsupport",
-    ],
-  }
-
-DEPS files may be placed anywhere in the tree. Each one applies to all
-subdirectories, where there may be more DEPS files that provide additions or
-subtractions for their own sub-trees.
-
-There is an implicit rule for the current directory (where the DEPS file lives)
-and all of its subdirectories. This prevents you from having to explicitly
-allow the current directory everywhere.  This implicit rule is applied first,
-so you can modify or remove it using the normal include rules.
-
-The rules are processed in order. This means you can explicitly allow a higher
-directory and then take away permissions from sub-parts, or the reverse.
-
-Note that all directory separators must be slashes (Unix-style) and not
-backslashes. All directories should be relative to the source root and use
-only lowercase.
+See README.md for the format of the deps file.
 """
 
 import copy
diff --git a/src/buildtools/checkdeps/checkdeps.py b/src/buildtools/checkdeps/checkdeps.py
index d3d977c..1bf6bac 100755
--- a/src/buildtools/checkdeps/checkdeps.py
+++ b/src/buildtools/checkdeps/checkdeps.py
@@ -9,7 +9,7 @@
 "#include" and "import" directives in the .cpp, .java, and .proto source files.
 Any source file including something not permitted by the DEPS files will fail.
 
-See builddeps.py for a detailed description of the DEPS format.
+See README.md for a detailed description of the DEPS format.
 """
 
 import os
diff --git a/src/buildtools/checkdeps/graphdeps.py b/src/buildtools/checkdeps/graphdeps.py
index b8b4c75..aff3c76 100755
--- a/src/buildtools/checkdeps/graphdeps.py
+++ b/src/buildtools/checkdeps/graphdeps.py
@@ -12,7 +12,7 @@
 depend on modules A, B, and C, what valid options among the existing modules
 are there to put it in."
 
-See builddeps.py for a detailed description of the DEPS format.
+See README.md for a detailed description of the DEPS format.
 """
 
 import os
diff --git a/src/chrome/VERSION b/src/chrome/VERSION
index 35eb4a3..f90b0fa 100644
--- a/src/chrome/VERSION
+++ b/src/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=59
 MINOR=0
-BUILD=3062
+BUILD=3068
 PATCH=0
diff --git a/src/net/BUILD.gn b/src/net/BUILD.gn
index 994b957..7458b3b 100644
--- a/src/net/BUILD.gn
+++ b/src/net/BUILD.gn
@@ -354,6 +354,7 @@
     "//base",
     "//net/base/registry_controlled_domains",
     "//net/data/ssl/wosign:wosign_domains",
+    "//net/http:generate_transport_security_state",
     "//third_party/protobuf:protobuf_lite",
     "//url:url_features",
   ]
@@ -460,6 +461,7 @@
       "base/network_interfaces_linux.cc",
       "base/network_interfaces_linux.h",
       "base/network_interfaces_mac.cc",
+      "base/network_interfaces_mac.h",
       "base/network_interfaces_win.cc",
       "base/network_interfaces_win.h",
       "base/network_throttle_manager.h",
@@ -789,7 +791,6 @@
       "http/http_auth_controller.h",
       "http/http_auth_filter.cc",
       "http/http_auth_filter.h",
-      "http/http_auth_filter_win.h",
       "http/http_auth_gssapi_posix.cc",
       "http/http_auth_gssapi_posix.h",
       "http/http_auth_handler.cc",
@@ -1397,16 +1398,30 @@
       "quic/quartc/quartc_stream.h",
       "quic/quartc/quartc_stream_interface.h",
       "quic/quartc/quartc_task_runner_interface.h",
+      "reporting/reporting_browsing_data_remover.cc",
+      "reporting/reporting_browsing_data_remover.h",
       "reporting/reporting_cache.cc",
       "reporting/reporting_cache.h",
       "reporting/reporting_client.cc",
       "reporting/reporting_client.h",
+      "reporting/reporting_context.cc",
+      "reporting/reporting_context.h",
+      "reporting/reporting_delegate.cc",
+      "reporting/reporting_delegate.h",
+      "reporting/reporting_delivery_agent.cc",
+      "reporting/reporting_delivery_agent.h",
       "reporting/reporting_endpoint_manager.cc",
       "reporting/reporting_endpoint_manager.h",
       "reporting/reporting_header_parser.cc",
       "reporting/reporting_header_parser.h",
+      "reporting/reporting_observer.cc",
+      "reporting/reporting_observer.h",
+      "reporting/reporting_policy.cc",
+      "reporting/reporting_policy.h",
       "reporting/reporting_report.cc",
       "reporting/reporting_report.h",
+      "reporting/reporting_service.cc",
+      "reporting/reporting_service.h",
       "reporting/reporting_uploader.cc",
       "reporting/reporting_uploader.h",
       "sdch/sdch_owner.cc",
@@ -1431,6 +1446,8 @@
       "socket/socket_descriptor.h",
       "socket/socket_net_log_params.cc",
       "socket/socket_net_log_params.h",
+      "socket/socket_options.cc",
+      "socket/socket_options.h",
       "socket/socket_posix.cc",
       "socket/socket_posix.h",
       "socket/socks5_client_socket.cc",
@@ -1450,7 +1467,6 @@
       "socket/tcp_client_socket.h",
       "socket/tcp_server_socket.cc",
       "socket/tcp_server_socket.h",
-      "socket/tcp_socket.cc",
       "socket/tcp_socket.h",
       "socket/tcp_socket_posix.cc",
       "socket/tcp_socket_posix.h",
@@ -1514,15 +1530,16 @@
       "spdy/http2_frame_decoder_adapter.h",
       "spdy/http2_priority_dependencies.cc",
       "spdy/http2_priority_dependencies.h",
-      "spdy/http2_write_scheduler.h",
       "spdy/multiplexed_http_stream.cc",
       "spdy/multiplexed_http_stream.h",
       "spdy/multiplexed_session.cc",
       "spdy/multiplexed_session.h",
       "spdy/platform/api/spdy_estimate_memory_usage.h",
+      "spdy/platform/api/spdy_string.h",
       "spdy/platform/api/spdy_string_piece.h",
       "spdy/platform/api/spdy_string_utils.h",
       "spdy/platform/impl/spdy_estimate_memory_usage_impl.h",
+      "spdy/platform/impl/spdy_string_impl.h",
       "spdy/platform/impl/spdy_string_piece_impl.h",
       "spdy/platform/impl/spdy_string_utils_impl.h",
       "spdy/priority_write_scheduler.h",
@@ -1833,12 +1850,15 @@
         "base/mac/url_conversions.h",
         "base/mac/url_conversions.mm",
         "base/network_change_notifier_mac.cc",
+        "base/network_change_notifier_mac.h",
         "base/network_config_watcher_mac.cc",
+        "base/network_config_watcher_mac.h",
         "base/network_interfaces_mac.cc",
         "base/network_interfaces_mac.h",
         "base/platform_mime_util_mac.mm",
         "cert/test_root_certs_mac.cc",
         "proxy/proxy_resolver_mac.cc",
+        "proxy/proxy_resolver_mac.h",
         "proxy/proxy_server_mac.cc",
       ]
 
@@ -2307,6 +2327,7 @@
     "data/ssl/certificates/spdy_pooling.pem",
     "data/ssl/certificates/start_after_expiry.pem",
     "data/ssl/certificates/subjectAltName_sanity_check.pem",
+    "data/ssl/certificates/subjectAltName_www_example_com.pem",
     "data/ssl/certificates/test_mail_google_com.pem",
     "data/ssl/certificates/thawte.single.pem",
     "data/ssl/certificates/tls_feature_extension.pem",
@@ -4616,9 +4637,12 @@
     "quic/test_tools/simulator/switch.h",
     "quic/test_tools/simulator/traffic_policer.cc",
     "quic/test_tools/simulator/traffic_policer.h",
+    "reporting/reporting_browsing_data_remover_unittest.cc",
     "reporting/reporting_cache_unittest.cc",
+    "reporting/reporting_delivery_agent_unittest.cc",
     "reporting/reporting_endpoint_manager_unittest.cc",
     "reporting/reporting_header_parser_unittest.cc",
+    "reporting/reporting_service_unittest.cc",
     "reporting/reporting_test_util.cc",
     "reporting/reporting_test_util.h",
     "reporting/reporting_uploader_unittest.cc",
@@ -4664,7 +4688,6 @@
     "spdy/hpack/hpack_round_trip_test.cc",
     "spdy/hpack/hpack_static_table_test.cc",
     "spdy/http2_priority_dependencies_unittest.cc",
-    "spdy/http2_write_scheduler_test.cc",
     "spdy/mock_spdy_framer_visitor.cc",
     "spdy/mock_spdy_framer_visitor.h",
     "spdy/platform/api/spdy_string_utils_test.cc",
diff --git a/src/net/android/BUILD.gn b/src/net/android/BUILD.gn
index ef2b433..8ef0eb7 100644
--- a/src/net/android/BUILD.gn
+++ b/src/net/android/BUILD.gn
@@ -58,7 +58,6 @@
     "//base:base_java",
     "//base:base_java_test_support",
     "//third_party/android_tools:android_support_annotations_java",
-    "//third_party/android_tools:legacy_http_javalib",
   ]
   srcjar_deps = [
     ":embedded_test_server_aidl",
diff --git a/src/net/base/net_error_list.h b/src/net/base/net_error_list.h
index 4499ef2..1398543 100644
--- a/src/net/base/net_error_list.h
+++ b/src/net/base/net_error_list.h
@@ -706,6 +706,9 @@
 // The client MAY retry the request over a different connection.
 NET_ERROR(MISDIRECTED_REQUEST, -373)
 
+// There is a QUIC protocol error and QUIC has been marked as broken.
+NET_ERROR(QUIC_BROKEN_ERROR, -374)
+
 // The cache does not have the requested entry.
 NET_ERROR(CACHE_MISS, -400)
 
diff --git a/src/net/base/registry_controlled_domains/effective_tld_names.dat b/src/net/base/registry_controlled_domains/effective_tld_names.dat
index bba925d..7598355 100644
--- a/src/net/base/registry_controlled_domains/effective_tld_names.dat
+++ b/src/net/base/registry_controlled_domains/effective_tld_names.dat
@@ -6793,11 +6793,16 @@
 org.zm
 sch.zm
 
-// zw : https://en.wikipedia.org/wiki/.zw
-*.zw
+// zw : https://www.potraz.gov.zw/
+// Confirmed by registry <bmtengwa@potraz.gov.zw> 2017-01-25
+zw
+ac.zw
+co.zw
+gov.zw
+mil.zw
+org.zw
 
-
-// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-11-29T01:06:51Z
+// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2017-02-23T00:46:09Z
 
 // aaa : 2015-02-26 American Automobile Association, Inc.
 aaa
@@ -7729,9 +7734,6 @@
 // dvr : 2016-05-26 Hughes Satellite Systems Corporation
 dvr
 
-// dwg : 2015-07-23 Autodesk, Inc.
-dwg
-
 // earth : 2014-12-04 Interlink Co., Ltd.
 earth
 
@@ -8299,9 +8301,6 @@
 // ifm : 2014-01-30 ifm electronic gmbh
 ifm
 
-// iinet : 2014-07-03 Connect West Pty. Ltd.
-iinet
-
 // ikano : 2015-07-09 Ikano S.A.
 ikano
 
@@ -8869,9 +8868,6 @@
 // mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC
 mutual
 
-// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française
-mutuelle
-
 // nab : 2015-08-20 National Australia Bank Limited
 nab
 
@@ -9370,6 +9366,9 @@
 // rsvp : 2014-05-08 Charleston Road Registry Inc.
 rsvp
 
+// rugby : 2016-12-15 World Rugby Strategic Developments Limited
+rugby
+
 // ruhr : 2013-10-02 regiodot GmbH & Co. KG
 ruhr
 
@@ -9796,9 +9795,6 @@
 // theatre : 2015-05-07
 theatre
 
-// theguardian : 2015-04-30 Guardian News and Media Limited
-theguardian
-
 // tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America
 tiaa
 
@@ -9946,7 +9942,7 @@
 // verisign : 2015-08-13 VeriSign, Inc.
 verisign
 
-// versicherung : 2014-03-20 dotversicherung-registry GmbH
+// versicherung : 2014-03-20
 versicherung
 
 // vet : 2014-03-06
@@ -10171,9 +10167,6 @@
 // xn--4gbrim : 2013-10-04 Suhub Electronic Establishment
 موقع
 
-// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc.
-一号店
-
 // xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
 公益
 
@@ -10234,7 +10227,7 @@
 // xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
 삼성
 
-// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limted
+// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limited
 商标
 
 // xn--czrs0t : 2013-12-19 Wild Island, LLC
@@ -10291,7 +10284,7 @@
 // xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
 संगठन
 
-// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limted
+// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limited
 餐厅
 
 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
@@ -10600,6 +10593,11 @@
 // Submitted by Andreas Weise <a.weise@avm.de>
 myfritz.net
 
+// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com
+// Submitted by James Kennedy <domains@advisorwebsites.com>
+*.awdev.ca
+*.advisor.ws
+
 // backplane : https://www.backplane.io
 // Submitted by Anthony Voutas <anthony@backplane.io>
 backplaneapp.io
@@ -10690,6 +10688,10 @@
 // Submitted by Leon Rowland <leon@clearvox.nl>
 virtueeldomein.nl
 
+// Cloud66 : https://www.cloud66.com/
+// Submitted by Khash Sajadi <khash@cloud66.com>
+c66.me
+
 // cloudControl : https://www.cloudcontrol.com/
 // Submitted by Tobias Wilken <tw@cloudcontrol.com>
 cloudcontrolled.com
@@ -10765,6 +10767,7 @@
 // Daplie, Inc : https://daplie.com
 // Submitted by AJ ONeal <aj@daplie.com>
 daplie.me
+localhost.daplie.me
 
 // Dansk.net : http://www.dansk.net/
 // Submitted by Anani Voule <digital@digital.co.dk>
@@ -11173,8 +11176,10 @@
 // Submitted by Michal Kralik <support@evennode.com>
 eu-1.evennode.com
 eu-2.evennode.com
+eu-3.evennode.com
 us-1.evennode.com
 us-2.evennode.com
+us-3.evennode.com
 
 // Facebook, Inc.
 // Submitted by Peter Ruibal <public-suffix@fb.com>
@@ -11258,19 +11263,26 @@
 
 // Fastly Inc. : http://www.fastly.com/
 // Submitted by Fastly Security <security@fastly.com>
+fastlylb.net
+map.fastlylb.net
+freetls.fastly.net
 map.fastly.net
 a.prod.fastly.net
 global.prod.fastly.net
 a.ssl.fastly.net
 b.ssl.fastly.net
 global.ssl.fastly.net
-fastlylb.net
-map.fastlylb.net
 
 // Featherhead : https://featherhead.xyz/
 // Submitted by Simon Menke <simon@featherhead.xyz>
 fhapp.xyz
 
+// Fedora : https://fedoraproject.org/
+// submitted by Patrick Uiterwijk <puiterwijk@fedoraproject.org>
+fedorainfracloud.org
+fedorapeople.org
+cloud.fedoraproject.org
+
 // Firebase, Inc.
 // Submitted by Chris Raynor <chris@firebase.com>
 firebaseapp.com
@@ -11434,6 +11446,10 @@
 herokuapp.com
 herokussl.com
 
+// Ici la Lune : http://www.icilalune.com/
+// Submitted by Simon Morvan <simon@icilalune.com>
+moonscale.net
+
 // iki.fi
 // Submitted by Hannu Aronsson <haa@iki.fi>
 iki.fi
@@ -11472,6 +11488,10 @@
 sp.leg.br
 to.leg.br
 
+// IPiFony Systems, Inc. : https://www.ipifony.com/
+// Submitted by Matthew Hardeman <mhardeman@ipifony.com>
+ipifony.net
+
 // Joyent : https://www.joyent.com/
 // Submitted by Brian Bennett <brian.bennett@joyent.com>
 *.triton.zone
@@ -11624,6 +11644,10 @@
 // Submitted by Matthew Brown <mattbrown@nyc.mn>
 nyc.mn
 
+// Octopodal Solutions, LLC. : https://ulterius.io/
+// Submitted by Andrew Sampson <andrew@ulterius.io>
+cya.gg
+
 // One Fold Media : http://www.onefoldmedia.com/
 // Submitted by Eddie Jones <eddie@onefoldmedia.com>
 nid.io
@@ -11791,6 +11815,10 @@
 // Submitted by Lina He <info@stackspace.io>
 stackspace.space
 
+// Storj Labs Inc. : https://storj.io/
+// Submitted by Philip Hutchins <hostmaster@storj.io>
+storj.farm
+
 // Synology, Inc. : https://www.synology.com/
 // Submitted by Rony Weng <ronyweng@synology.com>
 diskstation.me
@@ -11806,6 +11834,7 @@
 i234.me
 myds.me
 synology.me
+vpnplus.to
 
 // TAIFUN Software AG : http://taifun-software.de
 // Submitted by Bjoern Henke <dev-server@taifun-software.de>
@@ -11849,6 +11878,10 @@
 synology-diskstation.de
 synology-ds.de
 
+// Uberspace : https://uberspace.de
+// Submitted by Moritz Werner <mwerner@jonaspasche.com>
+uber.space
+
 // UDR Limited : http://www.udr.hk.com
 // Submitted by registry <hostmaster@udr.hk.com>
 hk.com
@@ -11872,6 +11905,10 @@
 // Submitted by Yuvi Panda <yuvipanda@wikimedia.org>
 wmflabs.org
 
+// XS4ALL Internet bv: https://www.xs4all.nl/
+// Submitted by Daniel Mostertman <unixbeheer+publicsuffix@xs4all.net>
+xs4all.space
+
 // Yola : https://www.yola.com/
 // Submitted by Stefano Rivera <stefano@yola.com>
 yolasite.com
diff --git a/src/net/base/registry_controlled_domains/effective_tld_names.gperf b/src/net/base/registry_controlled_domains/effective_tld_names.gperf
index 5d15238..ba49a41 100644
--- a/src/net/base/registry_controlled_domains/effective_tld_names.gperf
+++ b/src/net/base/registry_controlled_domains/effective_tld_names.gperf
@@ -93,6 +93,7 @@
 ac.vn, 0
 ac.za, 0
 ac.zm, 0
+ac.zw, 0
 aca.pro, 0
 academy, 0
 academy.museum, 0
@@ -118,6 +119,7 @@
 adult.ht, 0
 adv.br, 0
 adv.mz, 0
+advisor.ws, 6
 adygeya.ru, 4
 adygeya.su, 4
 ae, 0
@@ -465,6 +467,7 @@
 avoues.fr, 0
 aw, 0
 awaji.hyogo.jp, 0
+awdev.ca, 6
 aws, 0
 ax, 0
 axa, 0
@@ -859,6 +862,7 @@
 c.cdn77.org, 4
 c.la, 4
 c.se, 0
+c66.me, 4
 ca, 0
 ca.eu.org, 4
 ca.it, 0
@@ -1123,6 +1127,7 @@
 clock.museum, 0
 clothing, 0
 cloud, 0
+cloud.fedoraproject.org, 4
 cloudapp.net, 4
 cloudcontrolapp.com, 4
 cloudcontrolled.com, 4
@@ -1217,6 +1222,7 @@
 co.vi, 0
 co.za, 0
 co.zm, 0
+co.zw, 0
 coach, 0
 coal.museum, 0
 coastaldefence.museum, 0
@@ -1462,6 +1468,7 @@
 cx, 0
 cy, 0
 cy.eu.org, 4
+cya.gg, 4
 cyber.museum, 0
 cymru, 0
 cymru.museum, 0
@@ -1642,7 +1649,6 @@
 dvr, 0
 dvrcam.info, 4
 dvrdns.org, 4
-dwg, 0
 dy.fi, 4
 dyn-ip24.de, 4
 dyn-o-saur.com, 4
@@ -1932,6 +1938,7 @@
 eu, 0
 eu-1.evennode.com, 4
 eu-2.evennode.com, 4
+eu-3.evennode.com, 4
 eu.com, 4
 eu.int, 0
 eu.meteorapp.com, 4
@@ -1992,6 +1999,8 @@
 federation.aero, 0
 fedex, 0
 fedje.no, 0
+fedorainfracloud.org, 4
+fedorapeople.org, 4
 feedback, 0
 fermo.it, 0
 ferrara.it, 0
@@ -2125,6 +2134,7 @@
 freeboxos.com, 4
 freeboxos.fr, 4
 freemasonry.museum, 0
+freetls.fastly.net, 4
 frei.no, 0
 freiburg.museum, 0
 freight.aero, 0
@@ -2585,6 +2595,7 @@
 gov.ws, 0
 gov.za, 0
 gov.zm, 0
+gov.zw, 0
 government.aero, 0
 govt.nz, 0
 gp, 0
@@ -3021,7 +3032,6 @@
 iida.nagano.jp, 0
 iide.yamagata.jp, 0
 iijima.nagano.jp, 0
-iinet, 0
 iitate.fukushima.jp, 0
 iiyama.nagano.jp, 0
 iizuka.fukuoka.jp, 0
@@ -3169,6 +3179,7 @@
 inzai.chiba.jp, 0
 io, 0
 ip6.arpa, 0
+ipifony.net, 4
 ipiranga, 0
 iq, 0
 ir, 0
@@ -4055,6 +4066,7 @@
 loan, 0
 loans, 0
 localhistory.museum, 0
+localhost.daplie.me, 4
 locker, 0
 locus, 0
 lodi.it, 0
@@ -4379,6 +4391,7 @@
 mil.ve, 0
 mil.za, 0
 mil.zm, 0
+mil.zw, 0
 milan.it, 0
 milano.it, 0
 military.museum, 0
@@ -4530,6 +4543,7 @@
 monzabrianza.it, 0
 monzaebrianza.it, 0
 monzaedellabrianza.it, 0
+moonscale.net, 4
 mopar, 0
 mordovia.ru, 4
 mordovia.su, 4
@@ -4617,7 +4631,6 @@
 mutsu.aomori.jp, 0
 mutsuzawa.chiba.jp, 0
 mutual, 0
-mutuelle, 0
 mv, 0
 mw, 0
 mw.gov.pl, 0
@@ -5462,6 +5475,7 @@
 org.ws, 0
 org.za, 0
 org.zm, 0
+org.zw, 0
 organic, 0
 orientexpress, 0
 origins, 0
@@ -5984,6 +5998,7 @@
 ru.com, 4
 ru.eu.org, 4
 ru.net, 4
+rugby, 0
 ruhr, 0
 run, 0
 ruovat.no, 0
@@ -6630,6 +6645,7 @@
 store.st, 0
 store.ve, 0
 storfjord.no, 0
+storj.farm, 4
 stpetersburg.museum, 0
 strand.no, 0
 stranda.no, 0
@@ -6871,7 +6887,6 @@
 theater, 0
 theater.museum, 0
 theatre, 0
-theguardian, 0
 thruhere.net, 4
 tiaa, 0
 tickets, 0
@@ -7159,6 +7174,7 @@
 ua, 0
 ubank, 0
 ube.yamaguchi.jp, 0
+uber.space, 4
 ubs, 0
 uchihara.ibaraki.jp, 0
 uchiko.ehime.jp, 0
@@ -7230,6 +7246,7 @@
 us, 0
 us-1.evennode.com, 4
 us-2.evennode.com, 4
+us-3.evennode.com, 4
 us-east-1.amazonaws.com, 4
 us.com, 4
 us.eu.org, 4
@@ -7404,6 +7421,7 @@
 voting, 0
 voto, 0
 voyage, 0
+vpnplus.to, 4
 vr.it, 0
 vs.it, 0
 vt.it, 0
@@ -7566,7 +7584,6 @@
 xn--45brj9c, 0
 xn--45q11c, 0
 xn--4gbrim, 0
-xn--4gq48lf9j, 0
 xn--4it168d.jp, 0
 xn--4it797k.jp, 0
 xn--4pvxs.jp, 0
@@ -7954,6 +7971,7 @@
 xn--zf0avx.hk, 0
 xn--zfr164b, 0
 xperia, 0
+xs4all.space, 4
 xxx, 0
 xyz, 0
 xz.cn, 0
@@ -8120,5 +8138,5 @@
 zt.ua, 0
 zuerich, 0
 zushi.kanagawa.jp, 0
-zw, 2
+zw, 0
 %%
diff --git a/src/net/cert/cert_verify_proc_mac.cc b/src/net/cert/cert_verify_proc_mac.cc
index 6df9725..6e1f8d6 100644
--- a/src/net/cert/cert_verify_proc_mac.cc
+++ b/src/net/cert/cert_verify_proc_mac.cc
@@ -278,34 +278,14 @@
   return !leaf_uses_weak_hash && intermediates_contain_weak_hash;
 }
 
-using ExtensionsMap = std::map<net::der::Input, net::ParsedExtension>;
-
-// Helper that looks up an extension by OID given a map of extensions.
-bool GetExtensionValue(const ExtensionsMap& extensions,
-                       const net::der::Input& oid,
-                       net::der::Input* value) {
-  auto it = extensions.find(oid);
-  if (it == extensions.end())
-    return false;
-  *value = it->second.value;
-  return true;
-}
-
 // Checks if |*cert| has a Certificate Policies extension containing either
 // of |ev_policy_oid| or anyPolicy.
 bool HasPolicyOrAnyPolicy(const ParsedCertificate* cert,
                           const der::Input& ev_policy_oid) {
-  der::Input extension_value;
-  if (!GetExtensionValue(cert->unparsed_extensions(), CertificatePoliciesOid(),
-                         &extension_value)) {
-    return false;
-  }
-
-  std::vector<der::Input> policies;
-  if (!ParseCertificatePoliciesExtension(extension_value, &policies))
+  if (!cert->has_policy_oids())
     return false;
 
-  for (const der::Input& policy_oid : policies) {
+  for (const der::Input& policy_oid : cert->policy_oids()) {
     if (policy_oid == ev_policy_oid || policy_oid == AnyPolicy())
       return true;
   }
@@ -329,18 +309,11 @@
   if (!cert)
     return;
 
-  der::Input extension_value;
-  if (!GetExtensionValue(cert->unparsed_extensions(), CertificatePoliciesOid(),
-                         &extension_value)) {
-    return;
-  }
-
-  std::vector<der::Input> policies;
-  if (!ParseCertificatePoliciesExtension(extension_value, &policies))
+  if (!cert->has_policy_oids())
     return;
 
   EVRootCAMetadata* metadata = EVRootCAMetadata::GetInstance();
-  for (const der::Input& policy_oid : policies) {
+  for (const der::Input& policy_oid : cert->policy_oids()) {
     if (metadata->IsEVPolicyOID(policy_oid)) {
       *ev_policy_oid = policy_oid.AsString();
 
diff --git a/src/net/cert/internal/parse_name.cc b/src/net/cert/internal/parse_name.cc
index bb9b640..2e7a8e7 100644
--- a/src/net/cert/internal/parse_name.cc
+++ b/src/net/cert/internal/parse_name.cc
@@ -176,6 +176,43 @@
   return der::Input(oid);
 }
 
+bool X509NameAttribute::ValueAsString(std::string* out) const {
+  switch (value_tag) {
+    case der::kTeletexString:
+      for (char c : value.AsStringPiece()) {
+        if (c < 32 || c > 126)
+          return false;
+      }
+      *out = value.AsString();
+      return true;
+    case der::kIA5String:
+      for (char c : value.AsStringPiece()) {
+        if (static_cast<uint8_t>(c) > 127)
+          return false;
+      }
+      *out = value.AsString();
+      return true;
+    case der::kPrintableString:
+      for (char c : value.AsStringPiece()) {
+        if (!(base::IsAsciiAlpha(c) || c == ' ' || (c >= '\'' && c <= ':') ||
+              c == '=' || c == '?')) {
+          return false;
+        }
+      }
+      *out = value.AsString();
+      return true;
+    case der::kUtf8String:
+      *out = value.AsString();
+      return true;
+    case der::kUniversalString:
+      return ConvertUniversalStringValue(value, out);
+    case der::kBmpString:
+      return ConvertBmpStringValue(value, out);
+    default:
+      return false;
+  }
+}
+
 bool X509NameAttribute::ValueAsStringUnsafe(std::string* out) const {
   switch (value_tag) {
     case der::kIA5String:
diff --git a/src/net/cert/internal/parse_name.h b/src/net/cert/internal/parse_name.h
index ce09bc8..26eff26 100644
--- a/src/net/cert/internal/parse_name.h
+++ b/src/net/cert/internal/parse_name.h
@@ -42,9 +42,17 @@
       : type(in_type), value_tag(in_value_tag), value(in_value) {}
 
   // Attempts to convert the value represented by this struct into a
+  // UTF-8 string and store it in |out|, returning whether the conversion
+  // was successful.
+  bool ValueAsString(std::string* out) const WARN_UNUSED_RESULT;
+
+  // Attempts to convert the value represented by this struct into a
   // std::string and store it in |out|, returning whether the conversion was
   // successful. Due to some encodings being incompatible, the caller must
-  // verify the attribute |type|.
+  // verify the attribute |value_tag|.
+  //
+  // Note: Don't use this function unless you know what you're doing. Use
+  // ValueAsString instead.
   //
   // Note: The conversion doesn't verify that the value corresponds to the
   // ASN.1 definition of the value type.
diff --git a/src/net/cert/internal/parse_name_unittest.cc b/src/net/cert/internal/parse_name_unittest.cc
index b1d768f..2d87616 100644
--- a/src/net/cert/internal/parse_name_unittest.cc
+++ b/src/net/cert/internal/parse_name_unittest.cc
@@ -31,13 +31,91 @@
 }
 }
 
+TEST(ParseNameTest, IA5SafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0x6f, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kIA5String, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Foo bar", result_unsafe);
+  std::string result;
+  ASSERT_TRUE(value.ValueAsString(&result));
+  ASSERT_EQ("Foo bar", result);
+}
+
+TEST(ParseNameTest, IA5UnsafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0xFF, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kIA5String, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Fo\377 bar", result_unsafe);
+  std::string result;
+  ASSERT_FALSE(value.ValueAsString(&result));
+}
+
+TEST(ParseNameTest, PrintableSafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0x6f, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kPrintableString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Foo bar", result_unsafe);
+  std::string result;
+  ASSERT_TRUE(value.ValueAsString(&result));
+  ASSERT_EQ("Foo bar", result);
+}
+
+TEST(ParseNameTest, PrintableUnsafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0x5f, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kPrintableString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Fo_ bar", result_unsafe);
+  std::string result;
+  ASSERT_FALSE(value.ValueAsString(&result));
+}
+
+TEST(ParseNameTest, TeletexSafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0x6f, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kTeletexString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Foo bar", result_unsafe);
+  std::string result;
+  ASSERT_TRUE(value.ValueAsString(&result));
+  ASSERT_EQ("Foo bar", result);
+}
+
+TEST(ParseNameTest, TeletexUnsafeStringValue) {
+  const uint8_t der[] = {
+      0x46, 0x6f, 0x1F, 0x20, 0x62, 0x61, 0x72,
+  };
+  X509NameAttribute value(der::Input(), der::kTeletexString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("Fo\037 bar", result_unsafe);
+  std::string result;
+  ASSERT_FALSE(value.ValueAsString(&result));
+}
+
 TEST(ParseNameTest, ConvertBmpString) {
   const uint8_t der[] = {
       0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x61, 0x00, 0x72,
   };
   X509NameAttribute value(der::Input(), der::kBmpString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("foobar", result_unsafe);
   std::string result;
-  ASSERT_TRUE(value.ValueAsStringUnsafe(&result));
+  ASSERT_TRUE(value.ValueAsString(&result));
   ASSERT_EQ("foobar", result);
 }
 
@@ -47,6 +125,7 @@
   X509NameAttribute value(der::Input(), der::kBmpString, der::Input(der));
   std::string result;
   ASSERT_FALSE(value.ValueAsStringUnsafe(&result));
+  ASSERT_FALSE(value.ValueAsString(&result));
 }
 
 TEST(ParseNameTest, ConvertUniversalString) {
@@ -54,8 +133,12 @@
                          0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x62,
                          0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x72};
   X509NameAttribute value(der::Input(), der::kUniversalString, der::Input(der));
+  std::string result_unsafe;
+  ASSERT_TRUE(value.ValueAsStringUnsafe(&result_unsafe));
+  ASSERT_EQ("foobar", result_unsafe);
   std::string result;
-  ASSERT_TRUE(value.ValueAsStringUnsafe(&result));
+  ASSERT_TRUE(value.ValueAsString(&result));
+  ASSERT_EQ("foobar", result);
 }
 
 // UniversalString must encode characters in pairs of 4 bytes.
@@ -64,6 +147,7 @@
   X509NameAttribute value(der::Input(), der::kUniversalString, der::Input(der));
   std::string result;
   ASSERT_FALSE(value.ValueAsStringUnsafe(&result));
+  ASSERT_FALSE(value.ValueAsString(&result));
 }
 
 TEST(ParseNameTest, EmptyName) {
diff --git a/src/net/cert/internal/parsed_certificate.cc b/src/net/cert/internal/parsed_certificate.cc
index 0c65507..97a432a 100644
--- a/src/net/cert/internal/parsed_certificate.cc
+++ b/src/net/cert/internal/parsed_certificate.cc
@@ -4,6 +4,8 @@
 
 #include "net/cert/internal/parsed_certificate.h"
 
+#include "net/cert/internal/certificate_policies.h"
+#include "net/cert/internal/extended_key_usage.h"
 #include "net/cert/internal/name_constraints.h"
 #include "net/cert/internal/signature_algorithm.h"
 #include "net/cert/internal/verify_name_match.h"
@@ -22,6 +24,21 @@
 
 }  // namespace
 
+bool ParsedCertificate::GetExtension(const der::Input& extension_oid,
+                                     ParsedExtension* parsed_extension) const {
+  if (!tbs_.has_extensions)
+    return false;
+
+  auto it = extensions_.find(extension_oid);
+  if (it == extensions_.end()) {
+    *parsed_extension = ParsedExtension();
+    return false;
+  }
+
+  *parsed_extension = it->second;
+  return true;
+}
+
 ParsedCertificate::ParsedCertificate() {}
 ParsedCertificate::~ParsedCertificate() {}
 
@@ -102,37 +119,40 @@
     return nullptr;
   }
 
-  // Parse the standard X.509 extensions and remove them from
-  // |unparsed_extensions|.
+  // Parse the standard X.509 extensions.
   if (result->tbs_.has_extensions) {
     // ParseExtensions() ensures there are no duplicates, and maps the (unique)
     // OID to the extension value.
-    if (!ParseExtensions(result->tbs_.extensions_tlv,
-                         &result->unparsed_extensions_)) {
+    if (!ParseExtensions(result->tbs_.extensions_tlv, &result->extensions_)) {
       return nullptr;
     }
 
     ParsedExtension extension;
 
     // Basic constraints.
-    if (ConsumeExtension(BasicConstraintsOid(), &result->unparsed_extensions_,
-                         &extension)) {
+    if (result->GetExtension(BasicConstraintsOid(), &extension)) {
       result->has_basic_constraints_ = true;
       if (!ParseBasicConstraints(extension.value, &result->basic_constraints_))
         return nullptr;
     }
 
-    // KeyUsage.
-    if (ConsumeExtension(KeyUsageOid(), &result->unparsed_extensions_,
-                         &extension)) {
+    // Key Usage.
+    if (result->GetExtension(KeyUsageOid(), &extension)) {
       result->has_key_usage_ = true;
       if (!ParseKeyUsage(extension.value, &result->key_usage_))
         return nullptr;
     }
 
+    // Extended Key Usage.
+    if (result->GetExtension(ExtKeyUsageOid(), &extension)) {
+      result->has_extended_key_usage_ = true;
+      if (!ParseEKUExtension(extension.value, &result->extended_key_usage_))
+        return nullptr;
+    }
+
     // Subject alternative name.
-    if (ConsumeExtension(SubjectAltNameOid(), &result->unparsed_extensions_,
-                         &result->subject_alt_names_extension_)) {
+    if (result->GetExtension(SubjectAltNameOid(),
+                             &result->subject_alt_names_extension_)) {
       // RFC 5280 section 4.2.1.6:
       // SubjectAltName ::= GeneralNames
       result->subject_alt_names_ =
@@ -151,8 +171,7 @@
     }
 
     // Name constraints.
-    if (ConsumeExtension(NameConstraintsOid(), &result->unparsed_extensions_,
-                         &extension)) {
+    if (result->GetExtension(NameConstraintsOid(), &extension)) {
       result->name_constraints_ =
           NameConstraints::Create(extension.value, extension.critical);
       if (!result->name_constraints_)
@@ -160,9 +179,8 @@
     }
 
     // Authority information access.
-    if (ConsumeExtension(AuthorityInfoAccessOid(),
-                         &result->unparsed_extensions_,
-                         &result->authority_info_access_extension_)) {
+    if (result->GetExtension(AuthorityInfoAccessOid(),
+                             &result->authority_info_access_extension_)) {
       result->has_authority_info_access_ = true;
       if (!ParseAuthorityInfoAccess(
               result->authority_info_access_extension_.value,
@@ -170,10 +188,14 @@
         return nullptr;
     }
 
-    // NOTE: if additional extensions are consumed here, the verification code
-    // must be updated to process those extensions, since the
-    // VerifyNoUnconsumedCriticalExtensions uses the unparsed_extensions_
-    // variable to tell which extensions were processed.
+    // Policies.
+    if (result->GetExtension(CertificatePoliciesOid(), &extension)) {
+      result->has_policy_oids_ = true;
+      if (!ParseCertificatePoliciesExtension(extension.value,
+                                             &result->policy_oids_)) {
+        return nullptr;
+      }
+    }
   }
 
   return result;
diff --git a/src/net/cert/internal/parsed_certificate.h b/src/net/cert/internal/parsed_certificate.h
index 06bd378..9b561a0 100644
--- a/src/net/cert/internal/parsed_certificate.h
+++ b/src/net/cert/internal/parsed_certificate.h
@@ -142,6 +142,16 @@
     return key_usage_;
   }
 
+  // Returns true if the certificate has a ExtendedKeyUsage extension.
+  bool has_extended_key_usage() const { return has_extended_key_usage_; }
+
+  // Returns the ExtendedKeyUsage key purpose OIDs. Caller must check
+  // has_extended_key_usage() before accessing this.
+  const std::vector<der::Input>& extended_key_usage() const {
+    DCHECK(has_extended_key_usage_);
+    return extended_key_usage_;
+  }
+
   // Returns true if the certificate has a SubjectAltName extension.
   bool has_subject_alt_names() const { return subject_alt_names_ != nullptr; }
 
@@ -184,11 +194,24 @@
   // Returns any OCSP URIs from the AuthorityInfoAccess extension.
   const std::vector<base::StringPiece>& ocsp_uris() const { return ocsp_uris_; }
 
-  // Returns a map of unhandled extensions (excludes the ones above).
-  const ExtensionsMap& unparsed_extensions() const {
-    return unparsed_extensions_;
+  // Returns true if the certificate has a Policies extension.
+  bool has_policy_oids() const { return has_policy_oids_; }
+
+  // Returns the policy OIDs. Caller must check has_policy_oids() before
+  // accessing this.
+  const std::vector<der::Input>& policy_oids() const {
+    DCHECK(has_policy_oids());
+    return policy_oids_;
   }
 
+  // Returns a map of all the extensions in the certificate.
+  const ExtensionsMap& extensions() const { return extensions_; }
+
+  // Gets the value for extension matching |extension_oid|. Returns false if the
+  // extension is not present.
+  bool GetExtension(const der::Input& extension_oid,
+                    ParsedExtension* parsed_extension) const;
+
  private:
   friend class base::RefCountedThreadSafe<ParsedCertificate>;
   ParsedCertificate();
@@ -232,6 +255,10 @@
   bool has_key_usage_ = false;
   der::BitString key_usage_;
 
+  // ExtendedKeyUsage extension.
+  bool has_extended_key_usage_ = false;
+  std::vector<der::Input> extended_key_usage_;
+
   // Raw SubjectAltName extension.
   ParsedExtension subject_alt_names_extension_;
   // Parsed SubjectAltName extension.
@@ -249,8 +276,12 @@
   std::vector<base::StringPiece> ca_issuers_uris_;
   std::vector<base::StringPiece> ocsp_uris_;
 
-  // The remaining extensions (excludes the standard ones above).
-  ExtensionsMap unparsed_extensions_;
+  // Policies extension.
+  bool has_policy_oids_ = false;
+  std::vector<der::Input> policy_oids_;
+
+  // All of the extensions.
+  ExtensionsMap extensions_;
 
   DISALLOW_COPY_AND_ASSIGN(ParsedCertificate);
 };
diff --git a/src/net/cert/internal/parsed_certificate_unittest.cc b/src/net/cert/internal/parsed_certificate_unittest.cc
index 5212caa..9b3b2e4 100644
--- a/src/net/cert/internal/parsed_certificate_unittest.cc
+++ b/src/net/cert/internal/parsed_certificate_unittest.cc
@@ -68,9 +68,8 @@
 
   const uint8_t kExpectedValue[] = {0x30, 0x00};
 
-  auto it = cert->unparsed_extensions().find(DavidBenOid());
-  ASSERT_NE(cert->unparsed_extensions().end(), it);
-  const auto& extension = it->second;
+  ParsedExtension extension;
+  ASSERT_TRUE(cert->GetExtension(DavidBenOid(), &extension));
 
   EXPECT_TRUE(extension.critical);
   EXPECT_EQ(DavidBenOid(), extension.oid);
@@ -85,9 +84,8 @@
 
   const uint8_t kExpectedValue[] = {0x30, 0x00};
 
-  auto it = cert->unparsed_extensions().find(DavidBenOid());
-  ASSERT_NE(cert->unparsed_extensions().end(), it);
-  const auto& extension = it->second;
+  ParsedExtension extension;
+  ASSERT_TRUE(cert->GetExtension(DavidBenOid(), &extension));
 
   EXPECT_FALSE(extension.critical);
   EXPECT_EQ(DavidBenOid(), extension.oid);
@@ -134,13 +132,16 @@
       ParseCertificateFromFile("extended_key_usage.pem");
   ASSERT_TRUE(cert);
 
-  const auto& extensions = cert->unparsed_extensions();
-  ASSERT_EQ(3u, extensions.size());
+  ASSERT_EQ(4u, cert->extensions().size());
 
-  auto iter = extensions.find(ExtKeyUsageOid());
-  ASSERT_TRUE(iter != extensions.end());
-  EXPECT_FALSE(iter->second.critical);
-  EXPECT_EQ(45u, iter->second.value.Length());
+  ParsedExtension extension;
+  ASSERT_TRUE(cert->GetExtension(ExtKeyUsageOid(), &extension));
+
+  EXPECT_FALSE(extension.critical);
+  EXPECT_EQ(45u, extension.value.Length());
+
+  EXPECT_TRUE(cert->has_extended_key_usage());
+  EXPECT_EQ(4u, cert->extended_key_usage().size());
 }
 
 // Parses an Extensions that contains a key usage.
@@ -166,13 +167,16 @@
       ParseCertificateFromFile("policies.pem");
   ASSERT_TRUE(cert);
 
-  const auto& extensions = cert->unparsed_extensions();
-  ASSERT_EQ(3u, extensions.size());
+  ASSERT_EQ(4u, cert->extensions().size());
 
-  auto iter = extensions.find(CertificatePoliciesOid());
-  ASSERT_TRUE(iter != extensions.end());
-  EXPECT_FALSE(iter->second.critical);
-  EXPECT_EQ(95u, iter->second.value.Length());
+  ParsedExtension extension;
+  ASSERT_TRUE(cert->GetExtension(CertificatePoliciesOid(), &extension));
+
+  EXPECT_FALSE(extension.critical);
+  EXPECT_EQ(95u, extension.value.Length());
+
+  EXPECT_TRUE(cert->has_policy_oids());
+  EXPECT_EQ(2u, cert->policy_oids().size());
 }
 
 // Parses an Extensions that contains a subjectaltname extension.
@@ -191,16 +195,17 @@
       ParseCertificateFromFile("extensions_real.pem");
   ASSERT_TRUE(cert);
 
-  const auto& extensions = cert->unparsed_extensions();
-  ASSERT_EQ(4u, extensions.size());
+  ASSERT_EQ(7u, cert->extensions().size());
 
   EXPECT_TRUE(cert->has_key_usage());
   EXPECT_TRUE(cert->has_basic_constraints());
+  EXPECT_TRUE(cert->has_policy_oids());
 
-  auto iter = extensions.find(CertificatePoliciesOid());
-  ASSERT_TRUE(iter != extensions.end());
-  EXPECT_FALSE(iter->second.critical);
-  EXPECT_EQ(16u, iter->second.value.Length());
+  ParsedExtension extension;
+  ASSERT_TRUE(cert->GetExtension(CertificatePoliciesOid(), &extension));
+
+  EXPECT_FALSE(extension.critical);
+  EXPECT_EQ(16u, extension.value.Length());
 
   // TODO(eroman): Verify the other 4 extensions' values.
 }
diff --git a/src/net/cert/internal/path_builder_unittest.cc b/src/net/cert/internal/path_builder_unittest.cc
index ed26c15..d207d44 100644
--- a/src/net/cert/internal/path_builder_unittest.cc
+++ b/src/net/cert/internal/path_builder_unittest.cc
@@ -439,12 +439,15 @@
 
   void SetUp() override {
     ParsedCertificateList path;
-    bool unused_result;
-    std::string unused_errors;
 
+    VerifyCertChainTest test;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &path, &oldroot_, &time_, &unused_result, &unused_errors);
+        &test);
+    path = test.chain;
+    oldroot_ = test.trust_anchor;
+    time_ = test.time;
+
     ASSERT_EQ(2U, path.size());
     target_ = path[0];
     oldintermediate_ = path[1];
@@ -454,7 +457,9 @@
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &path, &oldroot_, &time_, &unused_result, &unused_errors);
+        &test);
+    path = test.chain;
+
     ASSERT_EQ(4U, path.size());
     newintermediate_ = path[1];
     newroot_ = path[2];
diff --git a/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc b/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
index 003157b..3c404be 100644
--- a/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
+++ b/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
@@ -15,30 +15,26 @@
 
 class PathBuilderDelegate {
  public:
-  static void Verify(const ParsedCertificateList& chain,
-                     const scoped_refptr<TrustAnchor>& trust_anchor,
-                     const der::GeneralizedTime& time,
-                     bool expected_result,
-                     const std::string& expected_errors,
+  static void Verify(const VerifyCertChainTest& test,
                      const std::string& test_file_path) {
     SimpleSignaturePolicy signature_policy(1024);
-    ASSERT_FALSE(chain.empty());
+    ASSERT_FALSE(test.chain.empty());
 
     TrustStoreInMemory trust_store;
-    trust_store.AddTrustAnchor(trust_anchor);
+    trust_store.AddTrustAnchor(test.trust_anchor);
 
     CertIssuerSourceStatic intermediate_cert_issuer_source;
-    for (size_t i = 1; i < chain.size(); ++i)
-      intermediate_cert_issuer_source.AddCert(chain[i]);
+    for (size_t i = 1; i < test.chain.size(); ++i)
+      intermediate_cert_issuer_source.AddCert(test.chain[i]);
 
     CertPathBuilder::Result result;
     // First cert in the |chain| is the target.
-    CertPathBuilder path_builder(chain.front(), &trust_store, &signature_policy,
-                                 time, &result);
+    CertPathBuilder path_builder(test.chain.front(), &trust_store,
+                                 &signature_policy, test.time, &result);
     path_builder.AddCertIssuerSource(&intermediate_cert_issuer_source);
 
     path_builder.Run();
-    EXPECT_EQ(expected_result, result.HasValidPath());
+    EXPECT_EQ(test.expected_result, result.HasValidPath());
   }
 };
 
diff --git a/src/net/cert/internal/test_helpers.cc b/src/net/cert/internal/test_helpers.cc
index 24d4f32..f6a65d3 100644
--- a/src/net/cert/internal/test_helpers.cc
+++ b/src/net/cert/internal/test_helpers.cc
@@ -102,15 +102,13 @@
   return ::testing::AssertionSuccess();
 }
 
+VerifyCertChainTest::VerifyCertChainTest() = default;
+VerifyCertChainTest::~VerifyCertChainTest() = default;
+
 void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
-                                     ParsedCertificateList* chain,
-                                     scoped_refptr<TrustAnchor>* trust_anchor,
-                                     der::GeneralizedTime* time,
-                                     bool* verify_result,
-                                     std::string* expected_errors) {
-  chain->clear();
-  *trust_anchor = nullptr;
-  expected_errors->clear();
+                                     VerifyCertChainTest* test) {
+  // Reset all the out parameters to their defaults.
+  *test = {};
 
   std::string file_data = ReadTestFileToString(file_path_ascii);
 
@@ -124,6 +122,7 @@
   const char kTimeHeader[] = "TIME";
   const char kResultHeader[] = "VERIFY_RESULT";
   const char kErrorsHeader[] = "ERRORS";
+  const char kKeyPurpose[] = "KEY_PURPOSE";
 
   pem_headers.push_back(kCertificateHeader);
   pem_headers.push_back(kTrustAnchorUnconstrained);
@@ -131,10 +130,12 @@
   pem_headers.push_back(kTimeHeader);
   pem_headers.push_back(kResultHeader);
   pem_headers.push_back(kErrorsHeader);
+  pem_headers.push_back(kKeyPurpose);
 
   bool has_time = false;
   bool has_result = false;
   bool has_errors = false;
+  bool has_key_purpose = false;
 
   PEMTokenizer pem_tokenizer(file_data, pem_headers);
   while (pem_tokenizer.GetNext()) {
@@ -147,11 +148,11 @@
           bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
               reinterpret_cast<const uint8_t*>(block_data.data()),
               block_data.size(), nullptr)),
-          {}, chain, &errors))
+          {}, &test->chain, &errors))
           << errors.ToDebugString();
     } else if (block_type == kTrustAnchorUnconstrained ||
                block_type == kTrustAnchorConstrained) {
-      ASSERT_FALSE(*trust_anchor) << "Duplicate trust anchor";
+      ASSERT_FALSE(test->trust_anchor) << "Duplicate trust anchor";
       CertErrors errors;
       scoped_refptr<ParsedCertificate> root = net::ParsedCertificate::Create(
           bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
@@ -159,7 +160,7 @@
               block_data.size(), nullptr)),
           {}, &errors);
       ASSERT_TRUE(root) << errors.ToDebugString();
-      *trust_anchor =
+      test->trust_anchor =
           block_type == kTrustAnchorUnconstrained
               ? TrustAnchor::CreateFromCertificateNoConstraints(std::move(root))
               : TrustAnchor::CreateFromCertificateWithConstraints(
@@ -167,23 +168,37 @@
     } else if (block_type == kTimeHeader) {
       ASSERT_FALSE(has_time) << "Duplicate " << kTimeHeader;
       has_time = true;
-      ASSERT_TRUE(der::ParseUTCTime(der::Input(&block_data), time));
+      ASSERT_TRUE(der::ParseUTCTime(der::Input(&block_data), &test->time));
+    } else if (block_type == kKeyPurpose) {
+      ASSERT_FALSE(has_key_purpose) << "Duplicate " << kKeyPurpose;
+      has_key_purpose = true;
+
+      if (block_data == "anyExtendedKeyUsage") {
+        // TODO(eroman): test->key_purpose = ....
+      } else if (block_data == "serverAuth") {
+        // TODO(eroman): test->key_purpose = ....
+      } else if (block_data == "clientAuth") {
+        // TODO(eroman): test->key_purpose = ....
+      } else {
+        ADD_FAILURE() << "Unrecognized " << block_type << ": " << block_data;
+      }
     } else if (block_type == kResultHeader) {
       ASSERT_FALSE(has_result) << "Duplicate " << kResultHeader;
       ASSERT_TRUE(block_data == "SUCCESS" || block_data == "FAIL")
           << "Unrecognized result: " << block_data;
       has_result = true;
-      *verify_result = block_data == "SUCCESS";
+      test->expected_result = block_data == "SUCCESS";
     } else if (block_type == kErrorsHeader) {
       ASSERT_FALSE(has_errors) << "Duplicate " << kErrorsHeader;
       has_errors = true;
-      *expected_errors = block_data;
+      test->expected_errors = block_data;
     }
   }
 
   ASSERT_TRUE(has_time);
   ASSERT_TRUE(has_result);
-  ASSERT_TRUE(*trust_anchor);
+  ASSERT_TRUE(test->trust_anchor);
+  ASSERT_TRUE(has_key_purpose);
 }
 
 std::string ReadTestFileToString(const std::string& file_path_ascii) {
diff --git a/src/net/cert/internal/test_helpers.h b/src/net/cert/internal/test_helpers.h
index 0e4cd17..0cd2f70 100644
--- a/src/net/cert/internal/test_helpers.h
+++ b/src/net/cert/internal/test_helpers.h
@@ -76,17 +76,33 @@
   return ReadTestDataFromPemFile(file_path_ascii, mappings, N);
 }
 
-// Reads a test case from |file_path_ascii| (which is relative to //src). Test
-// cases are comprised of a certificate chain, trust anchor, a timestamp to
-// validate at, and the expected result of verification.
+// Test cases are comprised of all the parameters to certificate
+// verification, as well as the expected outputs.
+struct VerifyCertChainTest {
+  VerifyCertChainTest();
+  ~VerifyCertChainTest();
+
+  // The chain of certificates (with the zero-th being the target).
+  ParsedCertificateList chain;
+
+  // The trust anchor to use when verifying the chain.
+  scoped_refptr<TrustAnchor> trust_anchor;
+
+  // The time to use when verifying the chain.
+  der::GeneralizedTime time;
+
+  // The expected result from verification.
+  bool expected_result = false;
+
+  // The expected errors from verification (as a string).
+  std::string expected_errors;
+};
+
+// Reads a test case from |file_path_ascii| (which is relative to //src).
 // Generally |file_path_ascii| will start with:
 //   net/data/verify_certificate_chain_unittest/
 void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
-                                     ParsedCertificateList* chain,
-                                     scoped_refptr<TrustAnchor>* trust_anchor,
-                                     der::GeneralizedTime* time,
-                                     bool* verify_result,
-                                     std::string* expected_errors);
+                                     VerifyCertChainTest* test);
 
 // Reads a data file relative to the src root directory.
 std::string ReadTestFileToString(const std::string& file_path_ascii);
diff --git a/src/net/cert/internal/trust_store_collection_unittest.cc b/src/net/cert/internal/trust_store_collection_unittest.cc
index c9cd85c..198988e 100644
--- a/src/net/cert/internal/trust_store_collection_unittest.cc
+++ b/src/net/cert/internal/trust_store_collection_unittest.cc
@@ -16,13 +16,14 @@
  public:
   void SetUp() override {
     ParsedCertificateList chain;
-    bool unused_verify_result;
-    der::GeneralizedTime unused_time;
-    std::string unused_errors;
 
+    VerifyCertChainTest test;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &chain, &oldroot_, &unused_time, &unused_verify_result, &unused_errors);
+        &test);
+    chain = test.chain;
+    oldroot_ = test.trust_anchor;
+
     ASSERT_EQ(2U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
@@ -30,12 +31,12 @@
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    scoped_refptr<TrustAnchor> unused_root;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &chain, &unused_root, &unused_time, &unused_verify_result,
-        &unused_errors);
+        &test);
+    chain = test.chain;
+
     ASSERT_EQ(4U, chain.size());
     newintermediate_ = chain[1];
     newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
diff --git a/src/net/cert/internal/trust_store_nss_unittest.cc b/src/net/cert/internal/trust_store_nss_unittest.cc
index f9d1f27..e83ba67 100644
--- a/src/net/cert/internal/trust_store_nss_unittest.cc
+++ b/src/net/cert/internal/trust_store_nss_unittest.cc
@@ -24,14 +24,14 @@
   void SetUp() override {
     ASSERT_TRUE(test_nssdb_.is_open());
 
+    VerifyCertChainTest test;
     ParsedCertificateList chain;
-    bool unused_verify_result;
-    der::GeneralizedTime unused_time;
-    std::string unused_errors;
-
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &chain, &oldroot_, &unused_time, &unused_verify_result, &unused_errors);
+        &test);
+    chain = test.chain;
+    oldroot_ = test.trust_anchor;
+
     ASSERT_EQ(2U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
@@ -39,12 +39,12 @@
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    scoped_refptr<TrustAnchor> unused_root;
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
         "key-rollover-longrolloverchain.pem",
-        &chain, &unused_root, &unused_time, &unused_verify_result,
-        &unused_errors);
+        &test);
+    chain = test.chain;
+
     ASSERT_EQ(4U, chain.size());
     newintermediate_ = chain[1];
     newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
diff --git a/src/net/cert/internal/verify_certificate_chain.cc b/src/net/cert/internal/verify_certificate_chain.cc
index 34d1422..cc9da69 100644
--- a/src/net/cert/internal/verify_certificate_chain.cc
+++ b/src/net/cert/internal/verify_certificate_chain.cc
@@ -56,15 +56,32 @@
                      "Certificate.signatureAlgorithm is encoded differently "
                      "than TBSCertificate.signature");
 
+bool IsHandledCriticalExtensionOid(const der::Input& oid) {
+  if (oid == BasicConstraintsOid())
+    return true;
+  if (oid == KeyUsageOid())
+    return true;
+  if (oid == NameConstraintsOid())
+    return true;
+  // TODO(eroman): SubjectAltName isn't actually used here, but rather is being
+  // checked by a higher layer.
+  if (oid == SubjectAltNameOid())
+    return true;
+
+  // TODO(eroman): Make this more complete.
+  return false;
+}
+
 // Adds errors to |errors| if the certificate contains unconsumed _critical_
 // extensions.
 void VerifyNoUnconsumedCriticalExtensions(const ParsedCertificate& cert,
                                           CertErrors* errors) {
-  for (const auto& entry : cert.unparsed_extensions()) {
-    if (entry.second.critical) {
+  for (const auto& it : cert.extensions()) {
+    const ParsedExtension& extension = it.second;
+    if (extension.critical && !IsHandledCriticalExtensionOid(extension.oid)) {
       errors->AddError(kUnconsumedCriticalExtension,
-                       CreateCertErrorParams2Der("oid", entry.second.oid,
-                                                 "value", entry.second.value));
+                       CreateCertErrorParams2Der("oid", extension.oid, "value",
+                                                 extension.value));
     }
   }
 }
diff --git a/src/net/cert/internal/verify_certificate_chain_typed_unittest.h b/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
index 8c64d91..1861241 100644
--- a/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
+++ b/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
@@ -18,20 +18,14 @@
 class VerifyCertificateChainTest : public ::testing::Test {
  public:
   void RunTest(const char* file_name) {
-    ParsedCertificateList chain;
-    scoped_refptr<TrustAnchor> trust_anchor;
-    der::GeneralizedTime time;
-    bool expected_result;
-    std::string expected_errors;
+    VerifyCertChainTest test;
 
     std::string path =
         std::string("net/data/verify_certificate_chain_unittest/") + file_name;
 
-    ReadVerifyCertChainTestFromFile(path, &chain, &trust_anchor, &time,
-                                    &expected_result, &expected_errors);
+    ReadVerifyCertChainTestFromFile(path, &test);
 
-    TestDelegate::Verify(chain, trust_anchor, time, expected_result,
-                         expected_errors, path);
+    TestDelegate::Verify(test, path);
   }
 };
 
diff --git a/src/net/cert/internal/verify_certificate_chain_unittest.cc b/src/net/cert/internal/verify_certificate_chain_unittest.cc
index d66f674..7a162b8 100644
--- a/src/net/cert/internal/verify_certificate_chain_unittest.cc
+++ b/src/net/cert/internal/verify_certificate_chain_unittest.cc
@@ -14,21 +14,17 @@
 
 class VerifyCertificateChainDelegate {
  public:
-  static void Verify(const ParsedCertificateList& chain,
-                     const scoped_refptr<TrustAnchor>& trust_anchor,
-                     const der::GeneralizedTime& time,
-                     bool expected_result,
-                     const std::string& expected_errors,
+  static void Verify(const VerifyCertChainTest& test,
                      const std::string& test_file_path) {
-    ASSERT_TRUE(trust_anchor);
+    ASSERT_TRUE(test.trust_anchor);
 
     SimpleSignaturePolicy signature_policy(1024);
 
     CertPathErrors errors;
-    bool result = VerifyCertificateChain(chain, trust_anchor.get(),
-                                         &signature_policy, time, &errors);
-    EXPECT_EQ(expected_result, result);
-    EXPECT_EQ(expected_errors, errors.ToDebugString(chain))
+    bool result = VerifyCertificateChain(test.chain, test.trust_anchor.get(),
+                                         &signature_policy, test.time, &errors);
+    EXPECT_EQ(test.expected_result, result);
+    EXPECT_EQ(test.expected_errors, errors.ToDebugString(test.chain))
         << "Test file: " << test_file_path;
     EXPECT_EQ(result, !errors.ContainsHighSeverityErrors());
   }
diff --git a/src/net/cert/x509_certificate.h b/src/net/cert/x509_certificate.h
index 21247d0..b3fff1f 100644
--- a/src/net/cert/x509_certificate.h
+++ b/src/net/cert/x509_certificate.h
@@ -192,10 +192,13 @@
   const base::Time& valid_start() const { return valid_start_; }
   const base::Time& valid_expiry() const { return valid_expiry_; }
 
-  // Gets the DNS names in the certificate.  Pursuant to RFC 2818, Section 3.1
+  // Gets the DNS names in the certificate. Pursuant to RFC 2818, Section 3.1
   // Server Identity, if the certificate has a subjectAltName extension of
   // type dNSName, this method gets the DNS names in that extension.
   // Otherwise, it gets the common name in the subject field.
+  //
+  // Note: Chrome has deprecated fallback to the subject field, see
+  // https://crbug.com/308330; prefer GetSubjectAltName() instead.
   void GetDNSNames(std::vector<std::string>* dns_names) const;
 
   // Gets the subjectAltName extension field from the certificate, if any.
diff --git a/src/net/cert/x509_util.cc b/src/net/cert/x509_util.cc
index a5d583d..4a1f755 100644
--- a/src/net/cert/x509_util.cc
+++ b/src/net/cert/x509_util.cc
@@ -30,7 +30,7 @@
   for (const auto& rdn : rdn_sequence) {
     for (const auto& atv : rdn) {
       if (atv.type == TypeCommonNameOid()) {
-        return atv.ValueAsStringUnsafe(common_name);
+        return atv.ValueAsString(common_name);
       }
     }
   }
diff --git a/src/net/data/ssl/certificates/subjectAltName_www_example_com.pem b/src/net/data/ssl/certificates/subjectAltName_www_example_com.pem
new file mode 100644
index 0000000..88a338e
--- /dev/null
+++ b/src/net/data/ssl/certificates/subjectAltName_www_example_com.pem
@@ -0,0 +1,75 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 15837232328995864193 (0xdbc926e4db217e81)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost
+        Validity
+            Not Before: Mar 28 22:42:07 2017 GMT
+            Not After : Mar 26 22:42:07 2027 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:b5:12:3c:e3:76:25:c4:e5:9f:ac:69:3a:dd:40:
+                    78:95:ef:1e:f2:b6:c2:74:14:e7:ba:cc:f3:a6:46:
+                    6c:51:1f:2e:4e:9c:99:7a:82:1f:43:bc:28:8a:74:
+                    8e:52:73:59:24:ac:0a:71:c9:b5:30:a9:d3:85:f9:
+                    8c:76:d0:19:43:fe:cb:c0:d6:4b:9e:9b:76:63:84:
+                    ae:99:4d:14:a2:be:ae:81:5d:05:22:b9:46:39:66:
+                    4e:42:10:57:64:26:27:f2:88:7f:55:10:38:83:7a:
+                    dd:6c:09:ae:f1:09:33:04:84:ab:48:53:1c:9c:42:
+                    b4:f7:ee:c5:21:7a:65:56:91:64:99:9b:f4:2c:22:
+                    50:dc:36:35:ac:04:22:eb:5c:2d:4c:6c:4b:16:70:
+                    f7:13:36:f9:32:ec:6d:e8:f7:2e:f2:b9:b8:0c:e2:
+                    99:de:ed:61:7d:66:17:33:67:0e:6e:87:5d:05:65:
+                    e1:98:46:2c:e7:8e:6d:a7:20:ab:87:5b:f3:32:55:
+                    cb:2d:df:76:9b:cf:06:71:5c:06:77:3b:20:49:6b:
+                    47:5e:6e:ae:42:99:8b:8f:9e:c4:ba:4c:50:ec:14:
+                    a1:43:8f:24:e9:9a:c8:ca:ec:b3:e2:26:d4:a5:ba:
+                    c3:f8:90:b1:03:2a:05:72:a4:3f:17:bd:9c:af:68:
+                    e4:17
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Subject Alternative Name: 
+                DNS:www.example.com
+    Signature Algorithm: sha256WithRSAEncryption
+         38:41:86:d5:01:6b:00:3d:61:1e:ad:f1:82:1d:01:fc:c1:98:
+         8e:d7:ea:46:2d:e3:7c:22:3c:ce:f2:64:f0:73:0c:e5:ea:21:
+         3a:8f:63:e1:c0:27:3d:84:ed:0f:aa:0e:d3:ca:76:67:ba:b9:
+         f4:da:fc:d5:ec:07:f4:97:08:2c:55:e4:be:5f:0c:e7:c9:7f:
+         be:81:b5:76:d2:47:6b:be:01:82:8c:75:27:df:78:99:62:55:
+         74:91:d9:c7:37:a3:62:1f:36:0b:ed:9f:54:01:be:87:9a:3d:
+         d5:90:1e:98:13:29:cd:23:9b:d4:a8:d0:c0:18:04:d5:05:55:
+         97:8d:6b:89:14:0a:1b:b4:2b:bd:7d:05:68:87:72:64:9e:b9:
+         66:a2:89:21:2a:ae:a1:b3:ef:22:0d:e1:80:46:52:11:20:3a:
+         a8:7e:18:1e:e1:19:2d:f5:de:cc:b9:f2:ff:6a:88:db:c1:31:
+         dc:34:25:e2:c0:4c:a7:6e:28:6e:b1:10:7b:04:ed:a4:82:3a:
+         81:55:44:1a:87:25:14:69:de:2d:c0:7d:3b:e3:21:c4:21:e5:
+         ca:f6:7c:11:12:d8:7f:c1:b7:f5:45:ca:6b:e5:41:91:5d:d8:
+         db:64:48:01:64:a5:df:85:51:4b:c4:ed:27:e3:2f:b4:71:f4:
+         c6:a1:a2:ad
+-----BEGIN CERTIFICATE-----
+MIIDcjCCAlqgAwIBAgIJANvJJuTbIX6BMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
+aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTcw
+MzI4MjI0MjA3WhcNMjcwMzI2MjI0MjA3WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH
+VGVzdCBDQTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAtRI843YlxOWfrGk63UB4le8e8rbCdBTnuszzpkZsUR8uTpyZ
+eoIfQ7woinSOUnNZJKwKccm1MKnThfmMdtAZQ/7LwNZLnpt2Y4SumU0Uor6ugV0F
+IrlGOWZOQhBXZCYn8oh/VRA4g3rdbAmu8QkzBISrSFMcnEK09+7FIXplVpFkmZv0
+LCJQ3DY1rAQi61wtTGxLFnD3Ezb5Muxt6Pcu8rm4DOKZ3u1hfWYXM2cOboddBWXh
+mEYs545tpyCrh1vzMlXLLd92m88GcVwGdzsgSWtHXm6uQpmLj57EukxQ7BShQ48k
+6ZrIyuyz4ibUpbrD+JCxAyoFcqQ/F72cr2jkFwIDAQABoy8wLTAPBgNVHRMBAf8E
+BTADAQH/MBoGA1UdEQQTMBGCD3d3dy5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsF
+AAOCAQEAOEGG1QFrAD1hHq3xgh0B/MGYjtfqRi3jfCI8zvJk8HMM5eohOo9j4cAn
+PYTtD6oO08p2Z7q59Nr81ewH9JcILFXkvl8M58l/voG1dtJHa74Bgox1J994mWJV
+dJHZxzejYh82C+2fVAG+h5o91ZAemBMpzSOb1KjQwBgE1QVVl41riRQKG7QrvX0F
+aIdyZJ65ZqKJISquobPvIg3hgEZSESA6qH4YHuEZLfXezLny/2qI28Ex3DQl4sBM
+p24obrEQewTtpII6gVVEGoclFGneLcB9O+MhxCHlyvZ8ERLYf8G39UXKa+VBkV3Y
+22RIAWSl34VRS8TtJ+MvtHH0xqGirQ==
+-----END CERTIFICATE-----
diff --git a/src/net/data/ssl/scripts/ee.cnf b/src/net/data/ssl/scripts/ee.cnf
index 7d91d75..3d42df1 100644
--- a/src/net/data/ssl/scripts/ee.cnf
+++ b/src/net/data/ssl/scripts/ee.cnf
@@ -81,6 +81,13 @@
 otherName = 1.2.3.4;UTF8:ignore me
 dirName = more_san_sanity
 
+[req_san_example]
+basicConstraints = critical, CA:true
+subjectAltName   = @san_example
+
+[san_example]
+DNS = www.example.com
+
 [req_spdy_pooling]
 subjectAltName = @spdy_pooling
 
diff --git a/src/net/data/ssl/scripts/generate-test-certs.sh b/src/net/data/ssl/scripts/generate-test-certs.sh
index f5395e4..abb9bd1 100755
--- a/src/net/data/ssl/scripts/generate-test-certs.sh
+++ b/src/net/data/ssl/scripts/generate-test-certs.sh
@@ -201,6 +201,11 @@
     -config ../scripts/ee.cnf -newkey rsa:2048 -text \
     -out ../certificates/subjectAltName_sanity_check.pem
 
+## SubjectAltName containing www.example.com
+try openssl req -x509 -days 3650 -extensions req_san_example \
+    -config ../scripts/ee.cnf -newkey rsa:2048 -text \
+    -out ../certificates/subjectAltName_www_example_com.pem
+
 ## Punycode handling
 SUBJECT_NAME="req_punycode_dn" \
   try openssl req -x509 -days 3650 -extensions req_punycode \
diff --git a/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
index 01d64cf..0e80a32 100644
--- a/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
+++ b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ec:1a:fe:56:e3:0e:27:0c:51:3b:f8:18:3a:2f:
-                    18:97:f4:9a:3c:6b:8f:7c:5e:7e:0e:07:ba:9d:f4:
-                    1e:2c:86:0f:85:8f:80:de:35:96:29:2a:64:56:0d:
-                    e8:8d:2d:84:8d:78:3a:e2:ec:e7:c6:4f:ba:b8:35:
-                    d4:6b:e0:02:8b:58:d5:61:90:fe:fa:13:fd:7c:63:
-                    6f:ce:4b:75:ea:cd:0d:ab:cd:75:bf:ef:c4:b0:3d:
-                    8a:64:9a:0d:e6:b3:80:09:a8:21:52:ff:dc:05:e8:
-                    4d:00:78:8d:94:43:2d:24:9b:81:a4:89:81:5f:d3:
-                    0f:e7:76:46:bf:cd:0f:24:30:0d:13:1b:49:f5:c3:
-                    90:f4:8a:d3:1a:47:75:9f:73:97:be:4b:5b:d0:7d:
-                    01:42:64:e3:16:a6:ef:86:91:78:19:a1:a8:c9:3f:
-                    41:a1:dc:ca:c0:7c:0d:a3:72:af:6b:c9:2f:1b:81:
-                    ba:fa:7e:65:af:de:95:fa:5d:1f:30:22:98:79:db:
-                    4a:6a:e8:0f:99:58:e6:20:f4:68:d9:e0:21:cf:ad:
-                    3c:ad:9e:43:34:e7:26:62:e6:15:cb:95:78:6c:4b:
-                    3b:73:71:8d:b8:c0:dd:f8:52:4b:92:25:22:2e:39:
-                    04:73:24:47:09:46:07:5f:80:9a:c5:5d:69:5a:03:
-                    03:1b
+                    00:c8:f1:e2:5c:ee:69:40:e3:8a:2f:c5:4c:19:35:
+                    17:95:32:7f:be:5d:7c:02:19:fa:fb:e5:28:13:d2:
+                    63:1e:6a:4f:a3:bc:e6:77:af:fd:de:77:de:de:41:
+                    93:1a:81:d9:9e:50:65:97:c9:f2:03:67:27:84:aa:
+                    fb:8a:3e:46:b3:43:07:3f:44:38:60:84:a4:79:1b:
+                    f6:5c:81:5b:4b:73:07:b2:6e:57:35:12:6e:b5:79:
+                    ce:34:4a:be:5c:c0:6c:5e:4a:60:86:6a:31:6a:29:
+                    67:43:d3:98:51:ba:0e:30:c1:3f:99:62:1b:0f:f1:
+                    bf:4d:6c:aa:04:2b:79:d4:ea:d1:ac:65:02:39:b6:
+                    01:01:c5:10:6c:b5:2e:57:f7:bf:e4:fc:b7:27:6e:
+                    a5:70:3d:a4:5e:ff:40:d2:73:8e:a0:9e:58:49:95:
+                    31:6d:49:c3:3a:06:ee:d2:14:1e:a5:a4:04:64:55:
+                    70:45:6d:0b:11:5e:81:15:f0:39:79:cc:0c:40:da:
+                    79:4e:60:6d:02:96:ec:ee:0d:af:1a:fd:c1:9f:b5:
+                    bb:bc:43:db:0e:6f:e9:d3:62:86:e5:23:07:b1:c1:
+                    09:b9:5e:37:0e:93:06:e7:4b:93:85:bb:78:cd:2b:
+                    c6:68:d4:b5:1e:c0:75:5f:00:cc:e4:a7:8c:ec:fb:
+                    32:dd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7B:92:03:28:A9:49:81:7F:C8:EC:36:25:A4:A8:31:A8:09:E0:AF:DD
+                9A:5B:96:DC:94:94:07:D1:04:BF:29:A7:6E:F1:01:EE:6F:8B:B6:74
             X509v3 Authority Key Identifier: 
-                keyid:73:DB:AF:CB:C5:A7:D4:A3:D4:A4:0B:33:21:04:3C:37:CE:8F:BE:2D
+                keyid:7A:81:EF:00:EF:96:26:9C:AA:B5:A1:7B:F5:02:C4:00:DC:D1:ED:52
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         40:59:36:cb:ac:7f:e8:5f:ff:57:eb:09:f3:fc:c3:e9:2b:b2:
-         90:6e:6b:e7:60:a9:6c:1d:02:f5:5f:cc:29:f6:ed:25:fd:63:
-         7d:48:e2:f0:c8:ec:59:a1:8b:49:c3:a9:63:a1:12:70:7d:6f:
-         a3:04:bf:1a:83:6a:e1:21:5f:ee:6b:6f:9f:5d:4b:79:cb:4c:
-         43:a4:92:ea:41:ea:e1:36:92:90:fd:01:0a:82:65:0e:3c:19:
-         44:fd:b5:f3:eb:69:cd:c5:ec:9c:f6:bf:34:35:36:8d:73:c2:
-         6f:ee:20:63:c7:c5:1b:ca:13:2a:fb:2c:dc:a0:24:49:7f:42:
-         f3:be:16:6d:62:5b:c9:88:20:bb:e4:99:11:e5:59:66:40:23:
-         bf:a2:cb:54:14:76:39:7a:7c:82:8f:dd:16:b9:4f:e4:d5:05:
-         ab:ea:eb:6b:55:64:ba:15:42:7b:4e:cf:25:68:12:8f:55:0e:
-         47:93:bf:0b:01:b5:68:76:c3:1e:2e:1d:96:8e:f1:da:fd:13:
-         ed:29:cf:8e:30:2d:dc:9c:d6:1a:04:1b:7a:8c:c3:fd:a1:42:
-         72:79:2e:47:c8:7f:28:b0:8e:ea:2a:b3:de:b0:0d:17:4a:e0:
-         7b:ec:a4:93:89:aa:a4:ef:c4:6e:d2:4f:ea:6f:16:f6:4f:6f:
-         41:d9:8e:55
+         19:13:bf:58:b6:96:ec:62:65:28:37:09:a3:59:b3:ae:cc:ac:
+         9e:4c:83:51:66:50:e4:0b:60:13:af:4c:83:f5:5f:e0:96:f9:
+         9e:b1:3b:f6:24:d6:66:4f:eb:28:5d:b3:9b:44:b7:e0:4e:3f:
+         e3:60:91:34:54:fb:5e:3e:82:37:32:ff:c3:b0:18:1f:99:0e:
+         94:33:4e:e8:3f:57:e5:09:2d:a7:ef:55:47:29:3e:ee:b0:11:
+         d7:c7:b0:cb:57:a3:a5:cc:a6:50:24:77:71:d9:79:d8:3e:db:
+         5c:cd:e2:9b:46:c7:7d:7c:a4:c7:62:47:84:b9:d5:09:a4:ec:
+         a9:42:af:2c:78:eb:7e:23:b2:f8:78:a3:05:65:95:46:29:e2:
+         41:57:62:24:f8:43:79:90:87:a5:70:8f:cc:67:2d:c2:26:b0:
+         e8:b6:b4:66:e8:e0:08:0e:62:ad:ef:60:71:a8:d9:ee:01:4d:
+         d0:1e:a1:b6:ba:4c:c0:46:b0:b8:bc:d6:1b:3b:d9:28:bb:4b:
+         bb:3a:03:76:a9:4c:60:15:45:47:c3:da:25:af:62:b8:e1:9e:
+         a2:22:66:47:01:94:b3:71:77:b2:f6:e3:3a:8f:4b:85:c3:38:
+         71:40:c8:f6:39:31:fe:8c:70:c9:08:0a:d6:5b:89:bc:2b:01:
+         55:55:ba:28
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDsGv5W
-4w4nDFE7+Bg6LxiX9Jo8a498Xn4OB7qd9B4shg+Fj4DeNZYpKmRWDeiNLYSNeDri
-7OfGT7q4NdRr4AKLWNVhkP76E/18Y2/OS3XqzQ2rzXW/78SwPYpkmg3ms4AJqCFS
-/9wF6E0AeI2UQy0km4GkiYFf0w/ndka/zQ8kMA0TG0n1w5D0itMaR3Wfc5e+S1vQ
-fQFCZOMWpu+GkXgZoajJP0Gh3MrAfA2jcq9ryS8bgbr6fmWv3pX6XR8wIph520pq
-6A+ZWOYg9GjZ4CHPrTytnkM05yZi5hXLlXhsSztzcY24wN34UkuSJSIuOQRzJEcJ
-RgdfgJrFXWlaAwMbAgMBAAGjgekwgeYwHQYDVR0OBBYEFHuSAyipSYF/yOw2JaSo
-MagJ4K/dMB8GA1UdIwQYMBaAFHPbr8vFp9Sj1KQLMyEEPDfOj74tMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI8eJc
+7mlA44ovxUwZNReVMn++XXwCGfr75SgT0mMeak+jvOZ3r/3ed97eQZMagdmeUGWX
+yfIDZyeEqvuKPkazQwc/RDhghKR5G/ZcgVtLcweyblc1Em61ec40Sr5cwGxeSmCG
+ajFqKWdD05hRug4wwT+ZYhsP8b9NbKoEK3nU6tGsZQI5tgEBxRBstS5X97/k/Lcn
+bqVwPaRe/0DSc46gnlhJlTFtScM6Bu7SFB6lpARkVXBFbQsRXoEV8Dl5zAxA2nlO
+YG0CluzuDa8a/cGftbu8Q9sOb+nTYoblIwexwQm5XjcOkwbnS5OFu3jNK8Zo1LUe
+wHVfAMzkp4zs+zLdAgMBAAGjgekwgeYwHQYDVR0OBBYEFJpbltyUlAfRBL8pp27x
+Ae5vi7Z0MB8GA1UdIwQYMBaAFHqB7wDvliacqrWhe/UCxADc0e1SMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAQFk2y6x/6F//V+sJ8/zD
-6SuykG5r52CpbB0C9V/MKfbtJf1jfUji8MjsWaGLScOpY6EScH1vowS/GoNq4SFf
-7mtvn11LectMQ6SS6kHq4TaSkP0BCoJlDjwZRP218+tpzcXsnPa/NDU2jXPCb+4g
-Y8fFG8oTKvss3KAkSX9C874WbWJbyYggu+SZEeVZZkAjv6LLVBR2OXp8go/dFrlP
-5NUFq+rra1VkuhVCe07PJWgSj1UOR5O/CwG1aHbDHi4dlo7x2v0T7SnPjjAt3JzW
-GgQbeozD/aFCcnkuR8h/KLCO6iqz3rANF0rge+ykk4mqpO/EbtJP6m8W9k9vQdmO
-VQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAGRO/WLaW7GJlKDcJo1mz
+rsysnkyDUWZQ5AtgE69Mg/Vf4Jb5nrE79iTWZk/rKF2zm0S34E4/42CRNFT7Xj6C
+NzL/w7AYH5kOlDNO6D9X5Qktp+9VRyk+7rAR18ewy1ejpcymUCR3cdl52D7bXM3i
+m0bHfXykx2JHhLnVCaTsqUKvLHjrfiOy+HijBWWVRiniQVdiJPhDeZCHpXCPzGct
+wiaw6La0ZujgCA5ire9gcajZ7gFN0B6htrpMwEawuLzWGzvZKLtLuzoDdqlMYBVF
+R8PaJa9iuOGeoiJmRwGUs3F3svbjOo9LhcM4cUDI9jkx/oxwyQgK1luJvCsBVVW6
+KA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:3f:0f:56:90:45:57:c4:d8:42:91:22:59:d4:
-                    81:5e:4b:af:73:90:fc:5f:85:cc:14:71:73:c5:76:
-                    70:2b:2c:f7:25:e7:b8:7d:a0:1d:a7:70:b4:f9:b8:
-                    08:1f:58:33:95:5f:37:73:c2:39:eb:da:ac:4b:fe:
-                    18:77:35:d5:46:e7:d3:2e:8d:d5:df:c9:21:98:c3:
-                    86:5d:22:f0:19:b1:1c:e0:49:a7:ad:d4:c7:e0:e4:
-                    f1:ef:c1:b7:48:38:de:a9:d3:fc:4d:14:a4:53:b6:
-                    80:64:bf:f7:82:3e:05:9a:7e:b7:b4:5a:5f:6d:28:
-                    1a:91:86:a6:f8:f5:37:42:8a:81:7b:25:e8:1f:75:
-                    e1:7f:bf:01:38:05:dd:38:ae:04:2e:8a:9e:e0:b7:
-                    c5:2a:aa:7b:4e:1e:ff:87:97:c8:9e:dd:33:ef:d9:
-                    f5:58:80:04:9a:e1:b6:49:d9:b9:85:40:d7:c7:fe:
-                    e1:13:73:e5:70:37:cd:40:1d:eb:9b:43:52:e6:c3:
-                    31:a0:2f:fb:82:38:62:aa:9e:08:dd:bc:4d:2b:05:
-                    f0:a3:31:ab:b7:47:ca:69:a6:47:14:c1:64:63:d0:
-                    0c:2d:bc:6c:e3:d2:98:e0:df:25:0d:9f:1f:9b:07:
-                    1b:80:0f:9d:da:04:67:8d:e0:cf:0b:5b:ec:f6:62:
-                    5f:51
+                    00:f2:7f:51:83:f1:cf:ad:13:e7:2b:10:61:a7:9a:
+                    d4:a3:92:3f:c2:91:b1:87:22:2d:2b:ac:0b:bd:e2:
+                    02:a0:ca:30:7b:ea:24:bf:d9:c9:2c:82:4d:a9:ba:
+                    f2:21:e2:c2:ab:79:3a:f1:06:c2:bb:9a:48:2c:7e:
+                    19:49:85:84:1c:c2:1c:92:a1:0b:ea:db:04:ea:ac:
+                    29:14:bf:a5:1e:bb:65:81:87:15:ad:4a:84:d9:6b:
+                    c6:72:c3:df:5d:8c:d3:ec:b5:8a:cc:13:38:77:04:
+                    9a:1c:d9:5a:f3:db:5a:4a:d9:40:a5:bd:f1:13:e2:
+                    be:03:c4:ec:a6:c0:0b:8a:8d:92:46:38:f3:23:24:
+                    d3:46:28:23:52:85:70:04:c7:8d:12:b0:a9:75:e8:
+                    c4:b2:f6:5d:05:05:1f:f7:c1:28:b4:0d:e6:e8:18:
+                    24:9e:91:bf:56:f4:1a:47:35:67:79:19:77:92:8a:
+                    c0:05:17:bc:ce:47:d7:f6:b1:20:2b:bf:c7:7e:ab:
+                    03:49:07:e2:9d:2a:85:04:f6:9a:74:c1:19:f6:ed:
+                    dc:9b:9e:16:14:9e:99:b7:14:8a:c2:bc:0e:58:da:
+                    21:6f:42:97:d3:14:f9:c4:9a:7e:cd:da:84:92:b3:
+                    bc:f6:4f:22:2c:55:9b:a5:77:e1:ce:3c:36:ce:2c:
+                    32:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                73:DB:AF:CB:C5:A7:D4:A3:D4:A4:0B:33:21:04:3C:37:CE:8F:BE:2D
+                7A:81:EF:00:EF:96:26:9C:AA:B5:A1:7B:F5:02:C4:00:DC:D1:ED:52
             X509v3 Authority Key Identifier: 
-                keyid:48:4D:93:8D:A1:E0:46:7F:2F:DD:60:DF:D1:DF:58:29:2C:1B:CB:4F
+                keyid:56:E7:9F:25:A4:B7:B0:69:2F:53:F0:23:9A:E6:16:88:B2:BB:B9:BC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         02:4e:c6:b9:10:f4:c7:3a:52:73:e3:7c:02:6d:61:77:b3:f8:
-         98:5f:c5:f2:b4:78:74:36:6b:40:6e:fc:a7:53:7c:b2:5e:e3:
-         35:08:1b:44:6c:51:75:29:0f:d1:6c:c0:eb:92:da:11:41:6d:
-         d8:56:01:aa:81:e2:58:4f:24:bd:bd:25:6b:ab:b3:b3:0a:05:
-         1c:db:ed:c2:34:68:11:34:67:ef:32:81:be:e1:53:0b:dd:2b:
-         ec:07:13:b8:12:b5:42:84:02:e0:56:69:f1:71:bd:6c:1a:5a:
-         64:59:8b:4c:a5:d2:7d:13:7d:99:d5:4e:94:41:5c:69:f7:32:
-         12:6a:c9:a9:ce:96:1f:6d:72:60:35:d1:fc:2f:c6:66:a2:2e:
-         48:1e:6e:0a:80:07:5b:d9:b7:ec:28:78:c3:31:2d:c8:45:0d:
-         28:94:b4:98:ba:83:1e:66:e7:f1:37:1e:f6:1d:00:50:90:c0:
-         58:09:f2:ee:02:85:0c:10:65:0b:c8:2b:04:06:92:64:d4:34:
-         10:36:99:f0:e4:fa:b6:b4:24:3a:57:6c:34:b4:dc:bf:48:d5:
-         df:97:a7:16:3d:3d:48:ed:c3:3c:b7:ca:e9:36:b4:43:49:e5:
-         ba:e9:c3:11:70:2f:b2:74:31:4c:60:da:b3:c4:b6:82:43:e8:
-         f1:e7:1a:4a
+         54:6b:d3:d1:28:70:dc:e1:2a:0d:26:33:92:22:7c:da:43:3a:
+         d3:23:bb:8f:a5:e0:49:ed:51:dc:00:bb:66:05:8a:a9:2f:e3:
+         b1:fe:4d:ca:97:01:87:a2:45:88:47:93:50:81:e1:8e:c2:1b:
+         25:eb:c6:62:71:65:be:2a:43:4a:6f:57:81:59:fd:f6:03:60:
+         85:a3:64:50:26:a1:30:ee:a9:4f:37:11:18:04:02:b9:f3:b8:
+         11:5e:f7:ec:ee:cb:cb:7e:c3:e6:b9:98:72:e7:9d:08:4d:98:
+         e1:96:b0:d9:8b:02:e3:78:5c:12:38:8d:0d:df:34:b9:6c:e1:
+         7c:82:73:ec:a2:67:2a:76:9e:3c:88:c0:cf:77:f3:f8:48:18:
+         4a:e5:6e:59:e4:c1:e9:df:d7:ed:d2:2e:7e:0c:59:a5:ae:43:
+         55:06:8e:03:8b:ac:6d:57:f0:67:ac:3f:db:4e:0b:58:92:70:
+         59:b8:8d:dd:5e:ae:88:6e:51:5b:a8:fe:7c:a6:c8:f3:65:5e:
+         67:a1:9e:47:2b:9c:ce:5f:52:87:cb:83:06:e9:98:45:0b:11:
+         b8:db:8a:d9:7c:8c:2f:60:14:b7:36:9b:a5:d2:27:48:93:11:
+         9a:3b:c1:e7:d0:3c:88:f0:dd:81:3f:7a:3d:4f:6d:ab:e2:21:
+         5d:f0:a4:b6
 -----BEGIN CERTIFICATE-----
 MIIDiDCCAnCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjAXMRUwEwYD
 VQQDDAxJbnRlcm1lZGlhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQC8Pw9WkEVXxNhCkSJZ1IFeS69zkPxfhcwUcXPFdnArLPcl57h9oB2ncLT5uAgf
-WDOVXzdzwjnr2qxL/hh3NdVG59MujdXfySGYw4ZdIvAZsRzgSaet1Mfg5PHvwbdI
-ON6p0/xNFKRTtoBkv/eCPgWafre0Wl9tKBqRhqb49TdCioF7JegfdeF/vwE4Bd04
-rgQuip7gt8UqqntOHv+Hl8ie3TPv2fVYgASa4bZJ2bmFQNfH/uETc+VwN81AHeub
-Q1LmwzGgL/uCOGKqngjdvE0rBfCjMau3R8pppkcUwWRj0AwtvGzj0pjg3yUNnx+b
-BxuAD53aBGeN4M8LW+z2Yl9RAgMBAAGjgd4wgdswHQYDVR0OBBYEFHPbr8vFp9Sj
-1KQLMyEEPDfOj74tMB8GA1UdIwQYMBaAFEhNk42h4EZ/L91g39HfWCksG8tPMD8G
+AQDyf1GD8c+tE+crEGGnmtSjkj/CkbGHIi0rrAu94gKgyjB76iS/2cksgk2puvIh
+4sKreTrxBsK7mkgsfhlJhYQcwhySoQvq2wTqrCkUv6Ueu2WBhxWtSoTZa8Zyw99d
+jNPstYrMEzh3BJoc2Vrz21pK2UClvfET4r4DxOymwAuKjZJGOPMjJNNGKCNShXAE
+x40SsKl16MSy9l0FBR/3wSi0DeboGCSekb9W9BpHNWd5GXeSisAFF7zOR9f2sSAr
+v8d+qwNJB+KdKoUE9pp0wRn27dybnhYUnpm3FIrCvA5Y2iFvQpfTFPnEmn7N2oSS
+s7z2TyIsVZuld+HOPDbOLDI3AgMBAAGjgd4wgdswHQYDVR0OBBYEFHqB7wDvliac
+qrWhe/UCxADc0e1SMB8GA1UdIwQYMBaAFFbnnyWkt7BpL1PwI5rmFoiyu7m8MD8G
 CCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0lu
 dGVybWVkaWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3It
 Y3JsL0ludGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI
-MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAAJOxrkQ9Mc6UnPjfAJtYXez+Jhf
-xfK0eHQ2a0Bu/KdTfLJe4zUIG0RsUXUpD9FswOuS2hFBbdhWAaqB4lhPJL29JWur
-s7MKBRzb7cI0aBE0Z+8ygb7hUwvdK+wHE7gStUKEAuBWafFxvWwaWmRZi0yl0n0T
-fZnVTpRBXGn3MhJqyanOlh9tcmA10fwvxmaiLkgebgqAB1vZt+woeMMxLchFDSiU
-tJi6gx5m5/E3HvYdAFCQwFgJ8u4ChQwQZQvIKwQGkmTUNBA2mfDk+ra0JDpXbDS0
-3L9I1d+XpxY9PUjtwzy3yuk2tENJ5brpwxFwL7J0MUxg2rPEtoJD6PHnGko=
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAFRr09EocNzhKg0mM5IifNpDOtMj
+u4+l4EntUdwAu2YFiqkv47H+TcqXAYeiRYhHk1CB4Y7CGyXrxmJxZb4qQ0pvV4FZ
+/fYDYIWjZFAmoTDuqU83ERgEArnzuBFe9+zuy8t+w+a5mHLnnQhNmOGWsNmLAuN4
+XBI4jQ3fNLls4XyCc+yiZyp2njyIwM938/hIGErlblnkwenf1+3SLn4MWaWuQ1UG
+jgOLrG1X8GesP9tOC1iScFm4jd1erohuUVuo/nymyPNlXmehnkcrnM5fUofLgwbp
+mEULEbjbitl8jC9gFLc2m6XSJ0iTEZo7wefQPIjw3YE/ej1PbaviIV3wpLY=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:e8:e6:8a:d4:14:cf:36:33:e1:1b:9d:9a:cc:
-                    d0:2c:1d:50:df:32:32:c7:d8:27:cc:68:21:8b:6d:
-                    1b:b0:14:8f:51:64:7f:6d:a4:ca:8d:73:b2:64:93:
-                    fe:63:55:50:09:64:e6:2b:7c:e0:21:c8:39:98:13:
-                    12:34:70:60:0c:67:20:4a:35:3d:9f:9b:11:f4:8d:
-                    34:3f:b8:fb:b7:88:42:cb:70:94:a7:9f:b6:f2:46:
-                    24:21:3f:ec:26:a6:39:63:87:04:04:9a:33:01:b6:
-                    dc:05:67:79:16:d6:e2:0b:fe:de:31:9a:a7:a2:07:
-                    8b:dc:1c:eb:70:ea:4a:76:b1:cd:b8:79:f8:e2:8e:
-                    a4:4a:a7:c6:9b:ad:34:a6:1d:40:c9:8d:04:df:66:
-                    87:a1:d4:8b:59:4e:e9:11:42:2c:7d:19:d6:e9:bb:
-                    d3:2c:b3:d5:df:69:c2:00:83:f8:3b:80:98:71:92:
-                    62:34:8b:6d:d4:fa:5d:d9:31:a6:d4:fb:ff:e2:9f:
-                    e2:ad:0a:bf:15:63:55:54:96:d9:f2:46:01:c8:06:
-                    a8:00:45:ad:b5:d1:4d:f0:e4:a8:f5:19:04:7b:03:
-                    33:8f:bb:94:9d:b3:23:cd:5e:73:54:62:3b:09:0f:
-                    73:8c:4f:0c:5a:2c:64:bb:33:70:49:2b:6f:cc:93:
-                    49:91
+                    00:ca:54:d4:15:17:dd:b1:db:15:d1:38:5b:1b:50:
+                    14:2c:6f:6a:b7:68:9c:1d:22:25:5f:6d:60:8c:ca:
+                    0c:00:03:a1:c9:29:c9:3b:99:70:89:5c:68:a8:45:
+                    03:c3:0c:c3:28:d1:78:f7:25:50:82:7a:91:f3:cb:
+                    45:77:6e:e8:9d:ee:25:61:c3:68:75:ea:12:55:0d:
+                    eb:68:7d:7f:a2:29:a8:9f:f0:9f:5a:5d:49:c1:f9:
+                    42:2b:d8:6e:7d:4e:7a:3c:9e:a5:1a:88:b6:4b:a0:
+                    c9:ad:70:71:b8:87:e0:8d:1c:f4:9b:73:c3:71:53:
+                    94:59:da:c8:d1:b8:b7:45:f5:07:27:8b:25:50:97:
+                    49:d2:f2:18:e4:54:20:f2:e4:73:32:ba:eb:d4:8f:
+                    91:98:47:b0:d6:a2:84:4a:eb:6f:83:74:87:03:df:
+                    f1:2d:3d:80:98:02:a0:39:64:1a:9c:ca:76:f5:89:
+                    5f:05:4e:5f:54:e3:bf:93:1e:f8:07:e0:6b:68:98:
+                    c6:07:65:87:a2:29:7d:e4:2c:b6:74:ce:83:eb:90:
+                    e1:f9:0f:7b:6d:22:0b:05:60:c9:56:5f:74:f7:52:
+                    a1:35:dc:93:ea:55:e8:f3:ee:3e:af:2a:63:82:9a:
+                    d0:99:8b:3a:9b:31:98:ae:89:47:1c:c8:21:0b:02:
+                    49:15
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                48:4D:93:8D:A1:E0:46:7F:2F:DD:60:DF:D1:DF:58:29:2C:1B:CB:4F
+                56:E7:9F:25:A4:B7:B0:69:2F:53:F0:23:9A:E6:16:88:B2:BB:B9:BC
             X509v3 Authority Key Identifier: 
-                keyid:1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                keyid:79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         94:bc:e1:64:08:ca:c2:07:5e:6e:16:0a:95:78:26:81:d1:6f:
-         14:5d:10:b0:4a:0b:f9:04:1f:58:68:35:1b:70:cd:d3:22:58:
-         62:7d:38:a2:f3:69:af:a3:1e:a0:22:4d:9b:5a:4b:36:3e:78:
-         49:a0:aa:02:9d:fe:5c:ce:df:6b:e8:f4:fb:5b:05:7c:78:4f:
-         f4:66:56:0c:95:c4:31:59:33:f0:e8:be:ad:1c:5d:36:64:0d:
-         b4:ee:49:19:9f:ad:b7:f5:c4:4c:8e:58:db:61:b7:a2:a7:f7:
-         86:22:da:2f:07:65:33:0a:23:86:59:2d:33:37:8f:e9:a9:24:
-         84:5a:43:5f:80:5a:88:97:1c:b3:ea:50:0e:10:f4:4f:36:28:
-         3a:6a:4a:70:0b:78:16:97:83:ea:ae:34:94:87:02:7b:6d:a0:
-         7d:1b:8c:9b:66:3e:69:f5:d1:6e:04:83:6b:f1:68:a0:69:2b:
-         88:7c:57:e1:42:81:d3:a8:d8:c7:7e:aa:3a:bf:37:1e:fd:64:
-         a7:3a:4a:10:3b:7e:c9:fe:d0:ac:c0:d4:f0:16:4a:78:f2:7f:
-         db:db:4c:8c:96:42:27:85:02:32:b8:71:ca:41:ac:a9:5e:11:
-         a1:f7:3b:4b:f4:ae:b0:25:ff:cc:4e:12:5b:ca:a6:ae:ed:71:
-         c8:14:47:56
+         37:35:37:79:96:28:98:44:ea:fa:13:bf:fe:22:ab:d4:ca:f4:
+         5b:31:f6:63:24:98:13:46:9e:5a:52:85:f8:fe:e2:92:24:17:
+         1a:96:93:f7:bf:40:6b:25:fe:1c:bd:f3:3d:38:15:d1:03:e0:
+         53:6e:2d:48:fa:0e:77:d3:a1:20:83:f1:5e:19:6c:fe:6d:68:
+         b5:a4:97:ab:ca:b0:79:e7:33:be:ae:98:0c:ca:02:97:17:65:
+         94:f9:c4:7b:f1:92:80:3f:09:27:a8:9e:f5:0e:82:95:2b:06:
+         8d:7c:51:7b:e8:6b:0a:6f:ea:91:90:83:3b:c5:e2:85:7d:b1:
+         13:c7:e8:94:a2:e0:14:e2:d7:43:29:dc:5d:cc:fa:f3:b2:8b:
+         6e:6a:cf:cc:65:98:77:a3:16:5e:8c:fb:57:30:b4:a1:03:d6:
+         d9:22:6a:a8:8e:19:0f:09:9a:30:ee:73:97:41:8e:ab:94:34:
+         95:90:48:49:b6:b6:9b:36:54:e6:db:d8:8c:2f:e3:35:d8:70:
+         4e:37:63:aa:c8:e2:da:96:5a:30:44:fa:43:a4:97:8e:ed:2e:
+         4d:4c:6e:84:15:72:e9:a5:5b:9c:f3:84:2c:6c:bd:db:54:4c:
+         c4:9a:e6:3d:52:30:17:11:e1:2b:cb:f9:90:53:4e:5f:12:d3:
+         81:ff:7d:21
 -----BEGIN CERTIFICATE-----
 MIIDcDCCAligAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+jmitQU
-zzYz4RudmszQLB1Q3zIyx9gnzGghi20bsBSPUWR/baTKjXOyZJP+Y1VQCWTmK3zg
-Icg5mBMSNHBgDGcgSjU9n5sR9I00P7j7t4hCy3CUp5+28kYkIT/sJqY5Y4cEBJoz
-AbbcBWd5FtbiC/7eMZqnogeL3BzrcOpKdrHNuHn44o6kSqfGm600ph1AyY0E32aH
-odSLWU7pEUIsfRnW6bvTLLPV32nCAIP4O4CYcZJiNItt1Ppd2TGm1Pv/4p/irQq/
-FWNVVJbZ8kYByAaoAEWttdFN8OSo9RkEewMzj7uUnbMjzV5zVGI7CQ9zjE8MWixk
-uzNwSStvzJNJkQIDAQABo4HOMIHLMB0GA1UdDgQWBBRITZONoeBGfy/dYN/R31gp
-LBvLTzAfBgNVHSMEGDAWgBQaejJHH4ovqPz38KNnNz45yPRGAjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylTUFRfd
+sdsV0ThbG1AULG9qt2icHSIlX21gjMoMAAOhySnJO5lwiVxoqEUDwwzDKNF49yVQ
+gnqR88tFd27one4lYcNodeoSVQ3raH1/oimon/CfWl1JwflCK9hufU56PJ6lGoi2
+S6DJrXBxuIfgjRz0m3PDcVOUWdrI0bi3RfUHJ4slUJdJ0vIY5FQg8uRzMrrr1I+R
+mEew1qKESutvg3SHA9/xLT2AmAKgOWQanMp29YlfBU5fVOO/kx74B+BraJjGB2WH
+oil95Cy2dM6D65Dh+Q97bSILBWDJVl9091KhNdyT6lXo8+4+rypjgprQmYs6mzGY
+rolHHMghCwJJFQIDAQABo4HOMIHLMB0GA1UdDgQWBBRW558lpLewaS9T8COa5haI
+sru5vDAfBgNVHSMEGDAWgBR57bWFZHAhqvCfqWSC1Z1Gx4ZFwzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQAD
-ggEBAJS84WQIysIHXm4WCpV4JoHRbxRdELBKC/kEH1hoNRtwzdMiWGJ9OKLzaa+j
-HqAiTZtaSzY+eEmgqgKd/lzO32vo9PtbBXx4T/RmVgyVxDFZM/Dovq0cXTZkDbTu
-SRmfrbf1xEyOWNtht6Kn94Yi2i8HZTMKI4ZZLTM3j+mpJIRaQ1+AWoiXHLPqUA4Q
-9E82KDpqSnALeBaXg+quNJSHAnttoH0bjJtmPmn10W4Eg2vxaKBpK4h8V+FCgdOo
-2Md+qjq/Nx79ZKc6ShA7fsn+0KzA1PAWSnjyf9vbTIyWQieFAjK4ccpBrKleEaH3
-O0v0rrAl/8xOElvKpq7tccgUR1Y=
+ggEBADc1N3mWKJhE6voTv/4iq9TK9Fsx9mMkmBNGnlpShfj+4pIkFxqWk/e/QGsl
+/hy98z04FdED4FNuLUj6DnfToSCD8V4ZbP5taLWkl6vKsHnnM76umAzKApcXZZT5
+xHvxkoA/CSeonvUOgpUrBo18UXvoawpv6pGQgzvF4oV9sRPH6JSi4BTi10Mp3F3M
++vOyi25qz8xlmHejFl6M+1cwtKED1tkiaqiOGQ8JmjDuc5dBjquUNJWQSEm2tps2
+VObb2Iwv4zXYcE43Y6rI4tqWWjBE+kOkl47tLk1MboQVcumlW5zzhCxsvdtUTMSa
+5j1SMBcR4SvL+ZBTTl8S04H/fSE=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:da:42:ae:40:b4:79:95:43:58:4b:a9:e0:62:96:
-                    d0:f2:19:7c:6e:dc:8a:96:f6:5a:ec:66:f6:c3:9d:
-                    3f:0e:18:b9:7a:60:da:df:e1:67:ce:ec:4c:8d:45:
-                    8a:76:5f:1b:c7:22:1c:2b:40:4d:83:ed:1d:94:f0:
-                    21:0f:d1:37:8e:9c:4e:98:29:94:3c:e3:e2:79:74:
-                    4d:12:91:c9:32:b8:6e:7f:7a:d8:26:44:3d:f6:3d:
-                    b6:6b:0f:2a:bd:cd:3d:24:e0:34:bc:53:8b:fa:c6:
-                    86:66:ec:9e:f9:b3:c0:41:cc:23:c2:5a:72:da:de:
-                    f6:56:6e:10:d0:5a:26:d1:e5:7e:f5:bb:6b:67:47:
-                    2a:01:d4:5c:d2:40:89:c5:0b:19:b7:63:32:af:d9:
-                    85:f2:79:77:6a:81:e1:27:13:c7:da:b9:94:7b:25:
-                    c5:d0:ca:67:bb:26:8f:7a:0f:8d:19:67:6d:96:2f:
-                    24:7a:76:50:c3:62:fa:ae:47:99:a4:97:af:f1:ce:
-                    02:8b:fe:50:09:a2:16:07:b3:08:65:e9:35:e8:f5:
-                    b6:54:c2:66:15:ac:97:76:ee:da:0d:92:6e:f1:be:
-                    18:2d:8d:c5:8e:de:fc:a7:b9:fa:27:43:19:4a:08:
-                    d5:ae:0e:9c:7e:7a:8e:36:2f:1d:11:5b:70:c0:77:
-                    90:af
+                    00:b0:41:66:34:fa:a7:25:3b:3f:2b:52:d9:40:dc:
+                    86:a7:31:c8:38:fc:ff:d9:b0:f5:68:f1:41:2d:4e:
+                    53:a2:c1:54:6b:73:e0:5d:33:73:0d:be:ff:09:31:
+                    4f:60:79:04:19:23:b0:ad:19:a7:8e:77:dd:f9:60:
+                    c2:6e:3f:b2:20:71:bb:32:6b:71:59:16:0b:b4:84:
+                    47:7c:89:7a:06:80:2b:ce:67:be:c3:82:b2:41:5c:
+                    4a:a9:af:08:e0:06:40:26:0c:fd:02:51:bd:5f:5b:
+                    89:13:41:bc:da:cf:ac:f7:8a:9b:23:d3:6f:d1:b4:
+                    0e:93:fb:30:b6:42:62:c4:e5:c3:70:81:65:2f:e6:
+                    eb:d9:98:6f:73:23:44:1e:5f:d9:4c:55:ec:40:8c:
+                    3d:84:7e:ca:76:31:8a:05:74:b2:f6:ad:dd:1e:b5:
+                    e3:fa:5e:68:3a:46:ed:7d:33:e1:0b:f2:0c:a5:24:
+                    ee:76:a8:ba:7b:24:a3:b8:55:23:eb:f4:ea:1e:13:
+                    e9:ca:ac:ca:ce:fc:2e:d4:0d:5d:19:a8:6a:8e:d5:
+                    c3:5d:9a:05:08:4e:ae:88:6a:05:d7:06:c4:63:a3:
+                    ec:ba:67:5c:77:83:b6:c3:5d:da:6b:2f:8e:3a:62:
+                    0c:95:15:e8:91:20:86:37:b0:2f:c7:ec:55:bd:7c:
+                    34:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
             X509v3 Authority Key Identifier: 
-                keyid:1A:7A:32:47:1F:8A:2F:A8:FC:F7:F0:A3:67:37:3E:39:C8:F4:46:02
+                keyid:79:ED:B5:85:64:70:21:AA:F0:9F:A9:64:82:D5:9D:46:C7:86:45:C3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c4:30:1e:17:33:a6:67:a2:0f:5e:a9:53:54:f6:2f:f6:18:ad:
-         21:b8:48:8a:81:38:62:1d:63:9f:2e:ef:a6:d2:56:c4:19:b5:
-         00:8e:19:fd:29:35:b9:a5:c1:26:9b:81:4a:2a:a6:37:8a:bf:
-         23:5e:2c:ca:e7:8a:a6:75:7f:fd:49:1b:cc:e8:42:99:2a:b0:
-         44:e3:27:17:11:88:bc:1b:b1:40:f5:5c:f0:85:22:ad:41:8d:
-         a0:95:d7:94:5b:f0:a7:da:56:3a:db:5d:d3:29:d9:87:e3:1e:
-         34:14:c3:91:f9:0b:91:fb:40:f4:9f:44:d9:e3:68:b8:fe:b7:
-         20:8c:d4:63:da:45:60:7f:2d:42:d5:15:b5:9c:69:d6:ed:ff:
-         2b:aa:49:43:0f:a8:52:0c:91:28:88:0f:da:7b:92:66:63:85:
-         b6:f2:29:8f:2c:aa:c4:b4:53:32:a1:00:2f:a5:1d:34:f0:32:
-         b2:59:a1:61:f4:16:42:a5:9a:fb:62:31:e3:85:3b:23:73:2d:
-         c1:cc:88:97:f6:12:95:01:52:5d:c2:06:aa:85:1c:25:78:9e:
-         f5:e6:8f:59:49:7c:d1:a6:e2:f4:1f:a2:7f:92:2b:6a:c0:44:
-         d7:c0:e5:7f:d9:44:13:82:ae:06:ee:1f:64:04:c4:7d:7f:cf:
-         04:97:2e:41
+         15:f2:28:3b:3d:cf:e7:4d:3b:d1:04:a7:16:05:66:3a:ab:20:
+         23:0a:ea:62:e0:0a:7a:00:3f:e8:50:79:8b:27:56:07:39:b2:
+         15:f3:f5:42:dc:ea:fe:3e:7e:f8:36:c5:62:c8:f2:ff:48:0f:
+         22:c3:2d:7d:1a:17:c5:8f:0b:10:1a:16:0c:28:a4:d5:62:3d:
+         b8:c9:03:9f:7b:c0:67:bc:6f:d6:46:14:ae:79:12:da:00:23:
+         1a:6a:47:c4:74:4d:80:9f:2d:ac:14:98:0a:03:d3:56:81:aa:
+         06:5b:30:d0:3e:1c:7c:87:7c:9e:d5:c9:00:b6:e1:14:ef:de:
+         ec:88:3e:a9:37:17:e0:f9:91:8e:f5:65:db:98:14:a2:22:9b:
+         5e:72:40:3f:4d:02:06:71:2f:15:5b:f1:a2:40:c2:07:3b:69:
+         bd:70:91:0b:67:61:36:c2:92:2e:54:c2:ef:c8:6d:1b:4b:46:
+         c4:e7:61:0e:ce:77:31:05:0e:04:d3:05:e8:b9:48:8e:fa:d3:
+         9b:fc:49:7f:43:18:75:cf:99:40:4c:6b:4d:bd:9d:89:9e:b4:
+         32:0d:3c:ac:2a:d0:a1:07:c1:53:17:f8:94:14:fb:ce:65:99:
+         3a:b5:3e:0d:cd:f6:54:7c:9c:cd:0e:47:1f:c0:86:c3:ea:1d:
+         3e:b9:29:26
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANpCrkC0eZVDWEup4GKW
-0PIZfG7cipb2Wuxm9sOdPw4YuXpg2t/hZ87sTI1FinZfG8ciHCtATYPtHZTwIQ/R
-N46cTpgplDzj4nl0TRKRyTK4bn962CZEPfY9tmsPKr3NPSTgNLxTi/rGhmbsnvmz
-wEHMI8Jactre9lZuENBaJtHlfvW7a2dHKgHUXNJAicULGbdjMq/ZhfJ5d2qB4ScT
-x9q5lHslxdDKZ7smj3oPjRlnbZYvJHp2UMNi+q5HmaSXr/HOAov+UAmiFgezCGXp
-Nej1tlTCZhWsl3bu2g2SbvG+GC2NxY7e/Ke5+idDGUoI1a4OnH56jjYvHRFbcMB3
-kK8CAwEAAaOByzCByDAdBgNVHQ4EFgQUGnoyRx+KL6j89/CjZzc+Ocj0RgIwHwYD
-VR0jBBgwFoAUGnoyRx+KL6j89/CjZzc+Ocj0RgIwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALBBZjT6pyU7PytS2UDc
+hqcxyDj8/9mw9WjxQS1OU6LBVGtz4F0zcw2+/wkxT2B5BBkjsK0Zp4533flgwm4/
+siBxuzJrcVkWC7SER3yJegaAK85nvsOCskFcSqmvCOAGQCYM/QJRvV9biRNBvNrP
+rPeKmyPTb9G0DpP7MLZCYsTlw3CBZS/m69mYb3MjRB5f2UxV7ECMPYR+ynYxigV0
+svat3R614/peaDpG7X0z4QvyDKUk7naounsko7hVI+v06h4T6cqsys78LtQNXRmo
+ao7Vw12aBQhOrohqBdcGxGOj7LpnXHeDtsNd2msvjjpiDJUV6JEghjewL8fsVb18
+NN8CAwEAAaOByzCByDAdBgNVHQ4EFgQUee21hWRwIarwn6lkgtWdRseGRcMwHwYD
+VR0jBBgwFoAUee21hWRwIarwn6lkgtWdRseGRcMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDEMB4XM6Zn
-og9eqVNU9i/2GK0huEiKgThiHWOfLu+m0lbEGbUAjhn9KTW5pcEmm4FKKqY3ir8j
-XizK54qmdX/9SRvM6EKZKrBE4ycXEYi8G7FA9VzwhSKtQY2gldeUW/Cn2lY6213T
-KdmH4x40FMOR+QuR+0D0n0TZ42i4/rcgjNRj2kVgfy1C1RW1nGnW7f8rqklDD6hS
-DJEoiA/ae5JmY4W28imPLKrEtFMyoQAvpR008DKyWaFh9BZCpZr7YjHjhTsjcy3B
-zIiX9hKVAVJdwgaqhRwleJ715o9ZSXzRpuL0H6J/kitqwETXwOV/2UQTgq4G7h9k
-BMR9f88Ely5B
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAV8ig7Pc/n
+TTvRBKcWBWY6qyAjCupi4Ap6AD/oUHmLJ1YHObIV8/VC3Or+Pn74NsViyPL/SA8i
+wy19GhfFjwsQGhYMKKTVYj24yQOfe8BnvG/WRhSueRLaACMaakfEdE2Any2sFJgK
+A9NWgaoGWzDQPhx8h3ye1ckAtuEU797siD6pNxfg+ZGO9WXbmBSiIpteckA/TQIG
+cS8VW/GiQMIHO2m9cJELZ2E2wpIuVMLvyG0bS0bE52EOzncxBQ4E0wXouUiO+tOb
+/El/Qxh1z5lATGtNvZ2JnrQyDTysKtChB8FTF/iUFPvOZZk6tT4NzfZUfJzNDkcf
+wIbD6h0+uSkm
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -370,3 +370,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/common.py b/src/net/data/verify_certificate_chain_unittest/common.py
index 14ee909..a3d8642 100755
--- a/src/net/data/verify_certificate_chain_unittest/common.py
+++ b/src/net/data/verify_certificate_chain_unittest/common.py
@@ -42,6 +42,12 @@
 # The default time tests should use when verifying.
 DEFAULT_TIME = MARCH_2_2015_UTC
 
+KEY_PURPOSE_ANY = 'anyExtendedKeyUsage'
+KEY_PURPOSE_SERVER_AUTH = 'serverAuth'
+KEY_PURPOSE_CLIENT_AUTH = 'clientAuth'
+
+DEFAULT_KEY_PURPOSE = KEY_PURPOSE_SERVER_AUTH
+
 # Counters used to generate unique (but readable) path names.
 g_cur_path_id = {}
 
@@ -451,10 +457,10 @@
     return cert_data.replace('CERTIFICATE', block_name)
 
 
-def write_test_file(description, chain, trust_anchor, utc_time, verify_result,
-                    errors, out_pem=None):
+def write_test_file(description, chain, trust_anchor, utc_time, key_purpose,
+                    verify_result, errors, out_pem=None):
   """Writes a test file that contains all the inputs necessary to run a
-  verification on a certificate chain"""
+  verification on a certificate chain."""
 
   # Prepend the script name that generated the file to the description.
   test_data = '[Created by: %s]\n\n%s\n' % (sys.argv[0], description)
@@ -469,6 +475,8 @@
   verify_result_string = 'SUCCESS' if verify_result else 'FAIL'
   test_data += '\n' + text_data_to_pem('VERIFY_RESULT', verify_result_string)
 
+  test_data += '\n' + text_data_to_pem('KEY_PURPOSE', key_purpose)
+
   if errors is not None:
     test_data += '\n' + text_data_to_pem('ERRORS', errors)
 
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
index b8f2d4e..af255e6 100644
--- a/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:aa:6c:0c:2e:35:34:f6:1f:5d:c3:8b:9e:fe:
-                    f7:7e:5b:26:fd:2b:ba:20:83:92:3a:4e:02:18:7c:
-                    1d:49:c5:05:15:c1:fa:98:b3:5d:0c:e8:03:9b:60:
-                    d4:e3:a6:3e:0c:ae:b3:c5:21:38:3b:a0:02:fd:80:
-                    a6:05:47:29:d2:12:95:6b:41:7b:41:94:45:ce:bd:
-                    65:84:d4:5a:51:cc:81:2a:a4:03:8f:31:00:d5:15:
-                    06:13:54:07:87:99:d9:55:fa:23:a8:19:56:11:87:
-                    78:4d:62:15:55:4d:b1:5f:00:c3:ce:a1:f0:21:6f:
-                    97:01:ef:76:49:6d:21:6b:f8:50:12:e9:48:94:3e:
-                    cd:01:d2:30:1f:2d:e2:25:f8:b5:ee:ad:a8:91:e9:
-                    0d:03:be:b4:11:84:1c:9f:9f:09:60:37:bf:52:c4:
-                    ad:2c:12:6d:eb:2d:1f:e2:c5:64:a8:55:c3:01:e8:
-                    19:f8:be:96:07:e2:3b:32:7f:59:28:12:79:f2:fd:
-                    e4:98:a7:f1:77:9f:28:13:1e:b7:2c:56:d9:af:8f:
-                    a4:9c:ac:4e:7d:3a:3c:a0:a6:06:61:d2:9c:88:d0:
-                    4b:72:d4:f3:88:18:b5:53:90:ae:b2:80:dd:b4:90:
-                    c4:e4:76:20:c3:ee:ed:ce:bb:44:d9:ad:39:b1:dd:
-                    27:cf
+                    00:e6:27:55:64:41:33:04:6b:80:a5:13:f1:bf:73:
+                    1c:1a:4f:ba:fe:8a:34:0d:aa:5a:1e:a0:58:f6:ae:
+                    53:bf:e1:86:1c:b3:6f:92:fa:52:4e:56:81:12:8a:
+                    24:3f:78:6d:0e:98:1a:c4:7f:14:2c:f1:72:3c:0d:
+                    d2:7c:1d:e4:11:24:73:9e:8f:6a:1b:1d:c4:46:b7:
+                    dd:8a:8c:df:04:31:a7:67:c8:68:08:4e:f9:45:68:
+                    17:aa:00:10:44:16:3b:8c:63:93:d7:7e:c5:79:9a:
+                    bc:e1:2e:cc:57:0d:ae:b4:35:63:10:3f:6b:46:19:
+                    48:2c:80:f4:03:0c:f4:f6:5b:e0:3f:35:90:97:80:
+                    42:35:ed:30:6d:8d:25:a4:24:b7:61:95:02:ec:a7:
+                    9b:89:7e:75:22:80:34:3c:c8:9b:ea:72:5f:85:38:
+                    f5:28:2a:54:f4:59:d0:9a:34:04:df:26:5f:67:17:
+                    9a:8c:fd:a3:c4:be:c5:8c:8e:72:29:b5:bf:ce:17:
+                    f5:6a:68:0e:6b:9b:7a:94:3d:d0:6a:58:72:58:9a:
+                    a1:4f:eb:1d:14:26:ea:f9:e2:16:d8:c9:68:c9:14:
+                    04:2e:3c:5f:ec:69:f2:b9:0f:e3:84:30:01:7a:54:
+                    98:fb:b5:2f:e0:e1:ef:f2:dd:fa:b5:41:0c:4e:76:
+                    d1:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:67:B6:67:88:D3:B0:33:53:B8:A0:1F:0F:63:46:A3:28:35:A9:A3
+                32:15:E6:F8:4B:BD:4C:36:3B:51:35:D9:6E:0D:00:1C:A5:6E:DF:EF
             X509v3 Authority Key Identifier: 
-                keyid:9C:54:60:08:5E:37:A1:FA:4A:EA:A7:CB:AB:E1:74:51:84:5F:46:FD
+                keyid:FB:DA:0E:92:4D:60:FD:C1:2C:1C:F6:9B:00:54:DA:31:BA:D0:98:F9
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         26:13:cf:55:3b:59:ce:94:65:01:3e:96:fb:c5:62:d9:d8:0c:
-         53:f2:23:12:f6:a1:a5:c7:30:f3:2b:f2:68:7d:ed:6a:c9:9d:
-         a5:21:b5:5d:1c:aa:4e:af:57:8c:3d:08:e7:72:d6:8c:20:9f:
-         25:f5:cf:31:91:23:47:4e:cc:cc:db:9c:e3:f7:53:d4:46:8f:
-         ea:92:05:37:12:c8:4b:c8:e5:57:24:ed:86:93:0f:14:1b:ea:
-         83:5c:87:c5:52:a4:bb:1c:48:80:4a:28:f6:ef:e6:6d:9a:0c:
-         62:75:11:6d:87:bf:8e:79:14:ed:4a:3f:74:5c:5f:7d:f6:53:
-         f1:dc:94:9b:67:cb:ae:da:18:80:db:31:85:64:ee:b9:36:67:
-         50:a8:26:55:0e:38:74:e3:b3:4f:19:10:b4:82:2b:90:18:34:
-         eb:89:47:3c:2a:fc:e5:06:01:99:fe:8c:56:6c:a1:5b:d6:5f:
-         22:b5:00:c8:dd:fc:ae:43:5a:77:ee:17:1c:27:73:7f:71:a9:
-         e1:e1:0d:7c:81:31:b7:7d:8d:3f:3e:96:8a:2c:5f:bb:8d:7b:
-         ad:b3:91:3a:ce:68:f2:25:02:cf:ca:84:0b:91:4f:b3:f5:d3:
-         e2:34:b6:4a:d7:92:c4:f0:4d:d2:40:f9:46:b7:60:ff:84:95:
-         cd:da:73:73
+         04:cb:ae:c2:7e:4b:84:73:79:b0:b9:a8:1c:39:0e:87:6c:e5:
+         ca:8e:64:6e:59:31:bd:be:63:c9:24:4d:fb:a2:c9:c0:4d:09:
+         5f:53:28:a6:17:7e:3a:dd:03:31:0c:85:9e:c5:2c:5d:4c:3c:
+         ef:57:2b:03:93:4a:de:6d:19:ba:9e:ae:d6:32:9f:5b:35:24:
+         f0:45:d9:65:07:bf:8c:0e:e7:e2:01:06:0e:e8:3d:27:55:bd:
+         76:06:26:90:e0:75:29:2f:d5:e7:c9:ed:c1:27:7d:45:f4:5b:
+         88:f2:2a:7c:ef:c8:bb:e5:b2:0b:01:19:ef:f5:93:29:d5:5e:
+         f1:0e:cf:68:7b:c7:88:40:39:f1:5d:90:c1:45:5e:82:7e:85:
+         a8:ff:af:71:7f:a8:e2:63:f4:7a:d9:9e:e1:af:e2:90:53:8d:
+         1a:b3:75:29:9c:bd:71:53:8b:bc:fe:af:47:b9:7e:9e:8d:fd:
+         6c:23:7b:44:83:61:9f:3e:6a:92:4b:88:80:c5:53:95:32:a3:
+         11:e7:f1:76:1d:21:3f:29:92:53:dd:c2:41:fd:31:bf:78:6a:
+         01:87:70:e3:89:9f:f9:1e:b6:c6:f5:77:d4:67:99:0f:96:35:
+         0b:2b:d9:5e:25:97:b8:5d:b2:ea:cf:38:f3:b2:b6:be:44:12:
+         24:62:b6:9f
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzqmwM
-LjU09h9dw4ue/vd+Wyb9K7ogg5I6TgIYfB1JxQUVwfqYs10M6AObYNTjpj4MrrPF
-ITg7oAL9gKYFRynSEpVrQXtBlEXOvWWE1FpRzIEqpAOPMQDVFQYTVAeHmdlV+iOo
-GVYRh3hNYhVVTbFfAMPOofAhb5cB73ZJbSFr+FAS6UiUPs0B0jAfLeIl+LXuraiR
-6Q0DvrQRhByfnwlgN79SxK0sEm3rLR/ixWSoVcMB6Bn4vpYH4jsyf1koEnny/eSY
-p/F3nygTHrcsVtmvj6ScrE59OjygpgZh0pyI0Ety1POIGLVTkK6ygN20kMTkdiDD
-7u3Ou0TZrTmx3SfPAgMBAAGjgekwgeYwHQYDVR0OBBYEFExntmeI07AzU7igHw9j
-RqMoNamjMB8GA1UdIwQYMBaAFJxUYAheN6H6Suqny6vhdFGEX0b9MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmJ1Vk
+QTMEa4ClE/G/cxwaT7r+ijQNqloeoFj2rlO/4YYcs2+S+lJOVoESiiQ/eG0OmBrE
+fxQs8XI8DdJ8HeQRJHOej2obHcRGt92KjN8EMadnyGgITvlFaBeqABBEFjuMY5PX
+fsV5mrzhLsxXDa60NWMQP2tGGUgsgPQDDPT2W+A/NZCXgEI17TBtjSWkJLdhlQLs
+p5uJfnUigDQ8yJvqcl+FOPUoKlT0WdCaNATfJl9nF5qM/aPEvsWMjnIptb/OF/Vq
+aA5rm3qUPdBqWHJYmqFP6x0UJur54hbYyWjJFAQuPF/safK5D+OEMAF6VJj7tS/g
+4e/y3fq1QQxOdtGVAgMBAAGjgekwgeYwHQYDVR0OBBYEFDIV5vhLvUw2O1E12W4N
+ABylbt/vMB8GA1UdIwQYMBaAFPvaDpJNYP3BLBz2mwBU2jG60Jj5MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJhPPVTtZzpRlAT6W+8Vi
-2dgMU/IjEvahpccw8yvyaH3tasmdpSG1XRyqTq9XjD0I53LWjCCfJfXPMZEjR07M
-zNuc4/dT1EaP6pIFNxLIS8jlVyTthpMPFBvqg1yHxVKkuxxIgEoo9u/mbZoMYnUR
-bYe/jnkU7Uo/dFxfffZT8dyUm2fLrtoYgNsxhWTuuTZnUKgmVQ44dOOzTxkQtIIr
-kBg064lHPCr85QYBmf6MVmyhW9ZfIrUAyN38rkNad+4XHCdzf3Gp4eENfIExt32N
-Pz6Wiixfu417rbOROs5o8iUCz8qEC5FPs/XT4jS2SteSxPBN0kD5Rrdg/4SVzdpz
-cw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEABMuuwn5LhHN5sLmoHDkO
+h2zlyo5kblkxvb5jySRN+6LJwE0JX1Mophd+Ot0DMQyFnsUsXUw871crA5NK3m0Z
+up6u1jKfWzUk8EXZZQe/jA7n4gEGDug9J1W9dgYmkOB1KS/V58ntwSd9RfRbiPIq
+fO/Iu+WyCwEZ7/WTKdVe8Q7PaHvHiEA58V2QwUVegn6FqP+vcX+o4mP0etme4a/i
+kFONGrN1KZy9cVOLvP6vR7l+no39bCN7RINhnz5qkkuIgMVTlTKjEefxdh0hPymS
+U93CQf0xv3hqAYdw44mf+R62xvV31GeZD5Y1CyvZXiWXuF2y6s8487K2vkQSJGK2
+nw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c6:0a:10:7c:70:eb:74:84:70:54:78:38:0e:6b:
-                    da:e4:e6:9c:3b:92:69:8c:5f:eb:ab:11:af:56:27:
-                    1d:59:94:21:91:c3:5c:2b:cd:67:75:95:5d:fc:d6:
-                    04:e6:65:0d:9b:4b:70:ce:e5:23:11:a8:a3:f5:61:
-                    d4:5b:d0:99:b8:4b:44:51:3d:7a:ed:9d:5d:e7:82:
-                    09:25:23:60:12:16:0f:b9:9a:3d:9f:02:22:39:f3:
-                    02:85:b2:45:a6:f4:81:e7:2f:6a:f9:65:28:94:b4:
-                    61:b2:4b:04:6e:2d:dd:a9:75:3e:d4:78:16:8a:45:
-                    6f:3c:85:81:b2:f1:8d:3b:84:ff:19:bd:c5:4d:58:
-                    d4:87:ec:dc:34:23:5c:e3:67:d8:26:c0:dc:ae:ad:
-                    27:34:8b:60:9d:47:bb:be:54:c1:4a:0d:56:91:c6:
-                    54:2d:07:51:d5:87:5d:e4:d5:b6:ee:1a:50:51:99:
-                    c4:2d:37:2d:47:4a:3e:19:1c:4f:ba:14:2d:0b:b0:
-                    e7:87:ab:d4:e4:ca:93:a7:77:13:6f:10:c6:df:dd:
-                    f0:86:53:03:0d:b6:92:66:1d:bf:63:1c:84:f0:63:
-                    cb:18:d3:f4:54:20:a8:e8:4c:94:21:7e:3f:b5:81:
-                    49:9f:bc:51:b9:eb:12:ab:6d:cb:03:37:d0:30:a8:
-                    1b:11
+                    00:f0:15:83:ff:9f:31:22:1a:3d:4a:0c:45:cf:41:
+                    5e:a1:d0:58:3e:77:f0:8f:78:5b:64:e2:c2:d2:0e:
+                    b4:f8:c3:f3:ba:9a:10:d6:90:9d:93:f9:35:ad:4e:
+                    96:35:e5:e6:a3:52:1b:23:13:3c:3d:e8:9b:ad:de:
+                    7d:05:52:40:f1:c1:90:af:a2:29:2e:81:99:7e:24:
+                    e3:34:b5:cf:01:f2:96:25:40:97:4e:61:29:88:5e:
+                    f6:74:ed:79:94:8c:92:23:dd:56:4d:77:3e:f2:5c:
+                    59:1f:7c:21:37:6b:df:27:d1:13:3a:96:0d:e5:e4:
+                    3c:60:18:42:df:b0:c1:50:b5:e3:4c:83:c9:7f:b5:
+                    f2:06:c4:fd:eb:ea:1d:e6:d8:bc:6f:37:a7:d2:2d:
+                    e6:88:b4:a2:66:cc:5c:43:68:90:b5:ad:af:3f:12:
+                    44:5a:93:27:97:5a:72:bb:a2:88:87:87:44:17:72:
+                    8e:c0:43:67:84:c6:63:66:b8:c4:93:89:b2:a8:6d:
+                    4f:18:fd:39:6f:66:34:1a:b8:f6:ee:40:d7:60:10:
+                    7e:e4:30:fc:08:85:43:6a:8b:3c:05:66:1e:e0:6a:
+                    90:c3:fa:ef:09:e9:eb:a4:08:9d:08:af:d0:f6:b0:
+                    20:ff:9e:7d:7b:ec:57:0b:d7:ab:7a:b2:b2:50:26:
+                    d2:6d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9C:54:60:08:5E:37:A1:FA:4A:EA:A7:CB:AB:E1:74:51:84:5F:46:FD
+                FB:DA:0E:92:4D:60:FD:C1:2C:1C:F6:9B:00:54:DA:31:BA:D0:98:F9
             X509v3 Authority Key Identifier: 
-                keyid:4E:4A:66:D2:28:27:6E:75:19:FA:97:E6:3D:38:18:C6:A6:56:68:69
+                keyid:2A:0D:A0:73:85:3A:BA:A8:17:8D:8D:97:60:4F:7E:3C:85:53:B8:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5e:d4:51:bf:58:80:db:77:af:e6:7c:a7:03:ab:95:ae:e6:0f:
-         26:64:63:b0:70:30:92:1c:f0:d8:7c:f8:93:13:14:e3:62:6e:
-         45:ed:cf:dd:c0:4d:8d:b7:b7:2f:bc:29:2d:6e:c2:ed:d5:10:
-         e6:80:53:91:88:18:35:c5:88:63:69:95:c1:f2:bc:e6:5c:02:
-         01:e7:e8:22:f4:3e:6d:91:09:82:64:12:86:80:b1:27:3c:9b:
-         ee:61:43:c2:1f:54:dc:31:9b:89:38:fe:3d:48:27:f0:fb:c6:
-         44:58:c6:de:21:19:b1:e1:4a:70:e4:1b:aa:ea:ad:e9:d3:a8:
-         bd:23:9a:95:d8:06:3c:32:9d:21:28:7c:de:37:d7:47:a6:96:
-         a0:d1:98:04:19:f5:47:bc:19:f8:9e:b6:dc:4b:d5:39:c6:27:
-         88:ab:9a:19:f1:f1:33:af:e0:62:36:f7:2e:5d:26:5c:70:55:
-         5e:3c:df:20:12:42:54:64:e0:5e:5f:2e:ee:6a:85:a4:1e:15:
-         52:0b:01:01:1b:70:19:fe:67:31:b7:6e:5e:4d:61:93:6b:3c:
-         c3:fd:c7:55:a8:f0:bc:81:5e:2b:38:84:ab:d8:b8:54:3c:a1:
-         59:db:ae:70:2b:71:ca:f3:5f:f8:ce:d0:67:af:45:99:19:8c:
-         25:9d:d1:e9
+         30:00:47:cc:03:e0:c2:98:f6:a9:44:a4:e0:31:40:63:47:a4:
+         67:df:98:9b:d9:d4:67:56:d4:9c:d9:83:31:54:d7:16:16:11:
+         af:04:39:08:d0:3a:3d:e1:ca:29:19:34:b9:0c:dc:f1:1e:3d:
+         98:88:d4:e3:64:3d:6b:fb:f4:f2:57:87:a9:e3:92:ba:33:a7:
+         0c:33:86:ee:b7:59:9d:29:b0:85:ec:c0:00:31:99:1c:5d:08:
+         74:6d:43:b5:44:84:2f:83:02:b8:e3:c0:33:7f:13:29:d2:52:
+         3d:b8:08:e2:ba:c8:fb:fc:08:2c:c7:ed:f0:12:8e:d6:b2:56:
+         9f:38:aa:ad:7e:63:42:ab:96:9a:e6:9c:d8:87:6a:70:5b:04:
+         52:0f:c0:3c:ae:5b:24:8c:42:8b:71:1f:ef:7d:c5:97:c2:5d:
+         47:fa:9a:02:7a:c3:92:b2:bc:8a:e1:ba:81:d6:c1:09:49:29:
+         48:80:a1:ff:23:42:96:a8:57:e6:bb:5d:70:e7:08:59:88:66:
+         48:02:51:e9:5f:2f:04:cb:05:45:36:0b:18:a2:64:d1:d4:66:
+         fb:c9:5b:c3:22:38:ca:0f:c6:62:de:b3:ad:a5:84:78:e5:bd:
+         c5:ea:17:65:4e:14:41:a9:bc:d8:60:5f:09:a2:6c:72:a0:5e:
+         18:0e:69:24
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxgoQfHDr
-dIRwVHg4Dmva5OacO5JpjF/rqxGvVicdWZQhkcNcK81ndZVd/NYE5mUNm0twzuUj
-Eaij9WHUW9CZuEtEUT167Z1d54IJJSNgEhYPuZo9nwIiOfMChbJFpvSB5y9q+WUo
-lLRhsksEbi3dqXU+1HgWikVvPIWBsvGNO4T/Gb3FTVjUh+zcNCNc42fYJsDcrq0n
-NItgnUe7vlTBSg1WkcZULQdR1Ydd5NW27hpQUZnELTctR0o+GRxPuhQtC7Dnh6vU
-5MqTp3cTbxDG393whlMDDbaSZh2/YxyE8GPLGNP0VCCo6EyUIX4/tYFJn7xRuesS
-q23LAzfQMKgbEQIDAQABo4HLMIHIMB0GA1UdDgQWBBScVGAIXjeh+krqp8ur4XRR
-hF9G/TAfBgNVHSMEGDAWgBROSmbSKCdudRn6l+Y9OBjGplZoaTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8BWD/58x
+Iho9SgxFz0FeodBYPnfwj3hbZOLC0g60+MPzupoQ1pCdk/k1rU6WNeXmo1IbIxM8
+Peibrd59BVJA8cGQr6IpLoGZfiTjNLXPAfKWJUCXTmEpiF72dO15lIySI91WTXc+
+8lxZH3whN2vfJ9ETOpYN5eQ8YBhC37DBULXjTIPJf7XyBsT96+od5ti8bzen0i3m
+iLSiZsxcQ2iQta2vPxJEWpMnl1pyu6KIh4dEF3KOwENnhMZjZrjEk4myqG1PGP05
+b2Y0Grj27kDXYBB+5DD8CIVDaos8BWYe4GqQw/rvCenrpAidCK/Q9rAg/559e+xX
+C9ererKyUCbSbQIDAQABo4HLMIHIMB0GA1UdDgQWBBT72g6STWD9wSwc9psAVNox
+utCY+TAfBgNVHSMEGDAWgBQqDaBzhTq6qBeNjZdgT348hVO48jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AF7UUb9YgNt3r+Z8pwOrla7mDyZkY7BwMJIc8Nh8+JMTFONibkXtz93ATY23ty+8
-KS1uwu3VEOaAU5GIGDXFiGNplcHyvOZcAgHn6CL0Pm2RCYJkEoaAsSc8m+5hQ8If
-VNwxm4k4/j1IJ/D7xkRYxt4hGbHhSnDkG6rqrenTqL0jmpXYBjwynSEofN4310em
-lqDRmAQZ9Ue8GfiettxL1TnGJ4irmhnx8TOv4GI29y5dJlxwVV483yASQlRk4F5f
-Lu5qhaQeFVILAQEbcBn+ZzG3bl5NYZNrPMP9x1Wo8LyBXis4hKvYuFQ8oVnbrnAr
-ccrzX/jO0GevRZkZjCWd0ek=
+ADAAR8wD4MKY9qlEpOAxQGNHpGffmJvZ1GdW1JzZgzFU1xYWEa8EOQjQOj3hyikZ
+NLkM3PEePZiI1ONkPWv79PJXh6njkrozpwwzhu63WZ0psIXswAAxmRxdCHRtQ7VE
+hC+DArjjwDN/EynSUj24COK6yPv8CCzH7fASjtayVp84qq1+Y0KrlprmnNiHanBb
+BFIPwDyuWySMQotxH+99xZfCXUf6mgJ6w5KyvIrhuoHWwQlJKUiAof8jQpaoV+a7
+XXDnCFmIZkgCUelfLwTLBUU2CxiiZNHUZvvJW8MiOMoPxmLes62lhHjlvcXqF2VO
+FEGpvNhgXwmibHKgXhgOaSQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a5:1a:7b:1e:97:d2:f5:6c:17:83:73:76:62:4f:
-                    12:53:75:3d:4b:86:2d:42:77:e7:11:75:65:cd:43:
-                    69:5a:b3:80:ad:42:87:a0:8e:9e:cf:e5:9e:6a:2d:
-                    1f:3e:0a:9a:6e:2b:01:e9:aa:d5:bd:91:50:38:f8:
-                    16:04:79:d3:fe:69:1c:82:9d:e7:10:2c:19:31:8a:
-                    1b:8d:a7:ef:f2:4c:36:de:f6:2f:65:93:78:0a:77:
-                    ba:1d:5b:b1:39:bf:55:71:05:43:fb:6c:d4:49:b2:
-                    35:93:85:c0:99:4e:3b:d2:4d:bf:19:4c:1b:55:b6:
-                    ef:ca:40:b3:6e:6a:18:29:eb:78:fa:f5:7e:15:61:
-                    85:70:1d:1f:a4:cd:59:eb:86:c1:a5:c4:8b:74:22:
-                    e1:5d:9b:80:d4:26:a1:a1:7d:40:4d:89:17:4f:ef:
-                    ea:04:d0:d1:b8:7a:38:b1:a5:13:9a:08:64:4d:85:
-                    88:4e:8d:07:fc:55:0b:22:7e:b7:ab:85:28:b9:d9:
-                    71:c9:99:cb:fb:85:fb:cf:8a:2e:cd:98:90:bb:b1:
-                    17:5f:50:02:5e:23:9c:55:d7:f2:fa:76:47:d6:ee:
-                    12:44:9a:17:c4:67:83:9d:75:5f:20:b1:a8:70:c4:
-                    22:69:00:17:26:a8:9d:c5:88:1a:e5:29:bb:63:c8:
-                    02:f5
+                    00:b9:6b:4b:41:42:a1:61:15:05:4a:1b:4d:cf:26:
+                    42:0f:9d:86:1e:29:97:4c:fd:2a:c3:bd:dd:58:56:
+                    46:85:20:c9:12:98:c1:cc:7c:c7:c6:43:16:47:7e:
+                    f8:37:2c:60:07:e1:a3:45:f8:79:a3:68:f5:3a:90:
+                    5d:2b:b5:74:ea:13:91:69:46:0d:32:c7:9a:a4:a3:
+                    54:cd:16:50:dc:11:62:58:bf:ef:cc:40:d3:76:b9:
+                    0c:a2:45:12:a9:63:f9:40:3f:4c:44:78:87:45:c6:
+                    cc:eb:5a:c5:4f:7f:0c:8f:15:a9:bb:3c:2e:55:1c:
+                    bf:75:73:7d:e3:1e:62:c6:79:08:0e:ec:c9:83:61:
+                    92:b6:71:43:c4:91:a6:d3:11:c7:89:d7:92:e2:32:
+                    21:9b:61:13:84:89:ab:d0:02:9b:72:2e:30:bc:19:
+                    d5:56:d5:e7:ae:e4:e5:ee:59:a1:29:6b:1b:22:ac:
+                    3b:33:2b:3f:06:f6:24:92:04:85:bf:fa:e2:86:06:
+                    f1:46:a4:fd:1c:31:c4:1f:6e:c9:95:27:6a:9d:e9:
+                    0a:24:05:c6:ad:d0:14:16:53:3c:c7:49:da:06:89:
+                    89:ed:ff:0f:c3:76:ba:f6:e6:6b:f9:54:de:c3:7c:
+                    4b:4e:ad:ce:fb:15:90:48:07:f6:6a:1b:f1:e3:70:
+                    37:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4E:4A:66:D2:28:27:6E:75:19:FA:97:E6:3D:38:18:C6:A6:56:68:69
+                2A:0D:A0:73:85:3A:BA:A8:17:8D:8D:97:60:4F:7E:3C:85:53:B8:F2
             X509v3 Authority Key Identifier: 
-                keyid:8F:01:DF:48:8B:1D:55:FA:61:CF:0A:EF:D6:89:C1:E7:69:7E:24:51
+                keyid:3C:49:3D:9A:7E:00:F0:23:D1:08:68:01:1A:EB:50:33:F2:B5:1F:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/UberRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c8:bb:c7:40:ef:2b:d4:1d:61:92:65:48:61:99:5b:d4:5b:1d:
-         8d:c6:ea:b8:d4:bf:1b:e9:ea:5a:f0:21:f3:95:b8:e7:cf:e7:
-         c3:8b:68:b2:14:53:fc:c8:07:4d:d8:fc:97:27:8d:0d:41:68:
-         4c:5e:c8:ab:ee:e3:9c:72:d3:d5:5b:a4:3a:2b:e4:2f:e2:13:
-         c8:a5:8d:63:61:c9:f8:e1:99:3f:c4:22:36:0d:bb:88:28:85:
-         99:23:ae:b9:0b:4e:50:7b:81:2d:28:da:9e:9e:7e:86:21:99:
-         ac:f1:a9:bc:1f:cf:6c:5f:90:91:b1:bf:76:b2:3a:5f:f3:e6:
-         54:89:bf:db:1e:f5:3a:93:53:ec:80:75:7e:ea:81:e0:c1:8b:
-         2d:89:f8:62:16:f0:96:ae:8e:be:d7:af:e6:fa:d4:54:b4:01:
-         bc:dd:f0:93:cc:89:b7:f2:06:81:2e:df:02:11:ac:22:21:44:
-         77:de:22:aa:9f:2b:05:3a:4e:a9:b4:a2:15:50:13:03:b1:a1:
-         1a:f4:de:c4:7b:2e:84:56:80:7c:98:db:82:af:a0:8e:79:a5:
-         b1:81:b7:0f:9b:60:78:5b:57:fc:eb:8e:74:91:e5:e3:58:c6:
-         b7:82:b2:88:d2:83:5f:b4:94:75:6b:97:8a:3f:88:40:ad:5d:
-         a1:18:da:7a
+         4d:22:da:99:6e:42:69:9e:c5:d4:77:0a:71:ff:d5:f9:20:bd:
+         8c:4c:3e:7d:17:55:c8:18:09:10:99:4d:eb:e7:4d:35:63:30:
+         ea:6c:b0:c7:de:2f:16:ac:f6:a6:90:61:92:c5:9b:46:31:44:
+         e4:30:c3:22:6a:a1:85:e1:9c:b1:93:61:66:67:a1:89:99:bf:
+         2f:b7:7e:75:83:a9:c8:c2:46:90:0d:fd:be:3c:c3:93:25:f2:
+         8a:c3:6d:21:ab:cf:56:27:55:7d:05:c1:27:9a:29:5e:e5:5d:
+         36:63:7e:e9:c9:56:22:c0:61:40:8a:24:ea:c1:18:7d:f5:fb:
+         11:4d:92:93:49:54:6e:c2:cf:6d:19:7a:16:c7:1f:79:3d:73:
+         41:17:38:5c:93:e0:b5:c3:18:27:07:3c:ae:3a:29:a1:73:60:
+         12:d2:69:64:47:68:5c:75:78:78:f8:19:a4:04:25:a5:37:9b:
+         ef:a8:e6:aa:d4:2c:19:48:72:9b:bb:75:30:77:46:69:e7:08:
+         2b:ef:06:d3:70:d6:d2:94:45:83:91:f8:4b:e5:0c:42:72:11:
+         e2:68:31:27:95:59:cd:e9:a0:06:3f:93:bd:13:fc:f9:7a:a9:
+         e0:f1:7f:f6:ed:aa:3b:d4:51:39:af:f8:58:ad:9d:85:01:88:
+         3e:0d:74:75
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
 Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClGnsel9L1bBeD
-c3ZiTxJTdT1Lhi1Cd+cRdWXNQ2las4CtQoegjp7P5Z5qLR8+CppuKwHpqtW9kVA4
-+BYEedP+aRyCnecQLBkxihuNp+/yTDbe9i9lk3gKd7odW7E5v1VxBUP7bNRJsjWT
-hcCZTjvSTb8ZTBtVtu/KQLNuahgp63j69X4VYYVwHR+kzVnrhsGlxIt0IuFdm4DU
-JqGhfUBNiRdP7+oE0NG4ejixpROaCGRNhYhOjQf8VQsifrerhSi52XHJmcv7hfvP
-ii7NmJC7sRdfUAJeI5xV1/L6dkfW7hJEmhfEZ4OddV8gsahwxCJpABcmqJ3FiBrl
-KbtjyAL1AgMBAAGjgdMwgdAwHQYDVR0OBBYEFE5KZtIoJ251GfqX5j04GMamVmhp
-MB8GA1UdIwQYMBaAFI8B30iLHVX6Yc8K79aJwedpfiRRMDsGCCsGAQUFBwEBBC8w
+BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5a0tBQqFhFQVK
+G03PJkIPnYYeKZdM/SrDvd1YVkaFIMkSmMHMfMfGQxZHfvg3LGAH4aNF+HmjaPU6
+kF0rtXTqE5FpRg0yx5qko1TNFlDcEWJYv+/MQNN2uQyiRRKpY/lAP0xEeIdFxszr
+WsVPfwyPFam7PC5VHL91c33jHmLGeQgO7MmDYZK2cUPEkabTEceJ15LiMiGbYROE
+iavQAptyLjC8GdVW1eeu5OXuWaEpaxsirDszKz8G9iSSBIW/+uKGBvFGpP0cMcQf
+bsmVJ2qd6QokBcat0BQWUzzHSdoGiYnt/w/Ddrr25mv5VN7DfEtOrc77FZBIB/Zq
+G/HjcDc3AgMBAAGjgdMwgdAwHQYDVR0OBBYEFCoNoHOFOrqoF42Nl2BPfjyFU7jy
+MB8GA1UdIwQYMBaAFDxJPZp+APAj0QhoARrrUDPytR/yMDsGCCsGAQUFBwEBBC8w
 LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
 BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
 MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQDIu8dA7yvUHWGSZUhhmVvUWx2Nxuq41L8b6epa8CHzlbjnz+fDi2iyFFP8
-yAdN2PyXJ40NQWhMXsir7uOcctPVW6Q6K+Qv4hPIpY1jYcn44Zk/xCI2DbuIKIWZ
-I665C05Qe4EtKNqenn6GIZms8am8H89sX5CRsb92sjpf8+ZUib/bHvU6k1PsgHV+
-6oHgwYstifhiFvCWro6+16/m+tRUtAG83fCTzIm38gaBLt8CEawiIUR33iKqnysF
-Ok6ptKIVUBMDsaEa9N7Eey6EVoB8mNuCr6COeaWxgbcPm2B4W1f86450keXjWMa3
-grKI0oNftJR1a5eKP4hArV2hGNp6
+A4IBAQBNItqZbkJpnsXUdwpx/9X5IL2MTD59F1XIGAkQmU3r5001YzDqbLDH3i8W
+rPamkGGSxZtGMUTkMMMiaqGF4Zyxk2FmZ6GJmb8vt351g6nIwkaQDf2+PMOTJfKK
+w20hq89WJ1V9BcEnmile5V02Y37pyVYiwGFAiiTqwRh99fsRTZKTSVRuws9tGXoW
+xx95PXNBFzhck+C1wxgnBzyuOimhc2AS0mlkR2hcdXh4+BmkBCWlN5vvqOaq1CwZ
+SHKbu3Uwd0Zp5wgr7wbTcNbSlEWDkfhL5QxCchHiaDEnlVnN6aAGP5O9E/z5eqng
+8X/27ao71FE5r/hYrZ2FAYg+DXR1
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
index f884298..829ceb2 100644
--- a/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
+++ b/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b8:b6:4b:46:a5:2a:82:68:2c:9f:19:09:8f:0c:
-                    c6:ad:af:bf:e1:8f:86:e5:2b:7b:b6:53:cd:bf:cf:
-                    57:f2:c9:19:55:2c:3e:d5:33:b6:5f:0c:d6:65:4b:
-                    f0:37:49:28:32:68:c5:56:32:a1:8d:13:5f:2a:7e:
-                    ff:b4:13:b4:69:07:df:82:04:f9:bf:9e:06:61:ad:
-                    4b:82:2c:12:3e:d6:37:ef:1f:be:4c:6e:16:5b:f1:
-                    02:ea:31:75:40:2b:f1:6d:2d:7b:fb:5c:43:7a:34:
-                    70:23:c5:dc:80:fa:76:4b:36:28:91:7c:0f:14:01:
-                    5b:66:51:89:54:79:3c:d5:c3:e3:4f:6a:a9:d6:ab:
-                    ba:57:f9:6d:13:b3:cc:2c:7a:5f:87:06:62:9e:31:
-                    9b:e2:5c:5e:b7:70:e1:1a:dc:02:0a:23:cb:dc:28:
-                    fb:85:03:b0:5b:a0:94:d8:4a:6a:8e:dc:02:2a:19:
-                    c1:ea:32:9d:a2:9b:84:34:6c:79:90:d6:bf:9d:74:
-                    02:cd:21:a3:bf:57:46:db:4e:5a:76:3e:32:54:66:
-                    7e:2f:f1:4b:40:72:9d:bf:c3:fc:33:8b:6b:cc:a4:
-                    ce:2a:dd:74:13:7b:e7:3d:31:26:ae:a8:88:83:ab:
-                    24:27:31:21:55:17:de:a9:d6:d4:ae:c1:6e:b0:ca:
-                    e5:9f
+                    00:ad:9f:31:d8:58:8d:85:d4:1e:b4:31:59:e6:a8:
+                    38:c0:68:c6:1b:57:24:de:1d:bd:f7:d0:d8:49:b3:
+                    1f:94:88:f3:bc:e2:ab:a6:38:35:88:1f:87:53:73:
+                    b3:66:34:fd:1d:05:9c:be:6b:3f:68:2a:65:a5:ff:
+                    8a:5e:fb:11:80:a6:dd:27:85:50:e6:5a:45:4c:1c:
+                    2f:d8:f2:f7:29:a3:d5:a2:50:3c:aa:be:b9:ce:ba:
+                    7e:97:6e:e8:c2:93:31:26:3f:b7:a7:9f:00:5d:a9:
+                    2d:bc:a2:af:62:0e:ca:7a:f2:fe:a5:5f:b1:da:d1:
+                    81:c3:70:d9:19:94:43:21:0f:b9:c9:ef:82:7c:03:
+                    62:aa:25:ad:cc:43:0a:e7:cb:89:83:81:9c:13:fb:
+                    4e:e8:6f:8c:44:f5:b2:49:55:bf:e7:55:83:32:08:
+                    40:30:e0:24:55:a9:90:0b:b1:4d:af:81:90:3b:24:
+                    7d:75:99:74:64:d8:1d:83:94:d1:40:1f:5d:23:74:
+                    bd:1b:a1:3e:b4:f0:b9:e9:97:6f:ae:a2:15:af:a4:
+                    12:e2:b0:5d:a5:4c:31:8c:2a:23:3c:32:f0:a8:a9:
+                    ca:f0:00:a1:b4:e3:a2:97:f7:82:2e:39:d9:02:85:
+                    35:51:f1:27:46:34:e0:b9:4e:b6:c0:70:f9:1d:1b:
+                    d8:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CB:79:A5:28:D4:40:7E:78:F4:F3:C5:7B:21:DA:CF:D8:4C:95:FC:EE
+                59:79:5B:6D:64:E8:28:D9:94:0C:36:92:CD:EF:90:95:F0:FE:AA:AC
             X509v3 Authority Key Identifier: 
-                keyid:21:63:3C:E9:BA:5F:79:17:3D:28:91:51:B7:72:6E:26:3C:9E:9C:65
+                keyid:ED:AE:33:A9:E1:04:6D:F8:AF:86:87:70:E7:D8:A9:01:0E:75:4A:3F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         96:8e:91:69:58:40:6d:ef:8b:60:3f:35:57:0a:93:85:6d:e5:
-         a5:df:99:05:e4:b9:32:c6:e3:9b:e6:2e:8c:4c:b5:4d:c4:fa:
-         40:cd:44:2c:f1:b3:bd:d2:24:9a:d7:cb:1b:64:46:b7:db:11:
-         a0:7f:49:5b:ec:fc:0e:d5:36:73:f7:60:48:82:11:be:92:1c:
-         41:0f:96:85:ef:c3:e5:cf:3b:a6:2e:41:99:6c:77:6b:3b:74:
-         e3:a9:d0:35:9f:17:f8:7f:4d:a7:33:6c:ce:fa:a3:be:f4:0d:
-         fb:38:02:ab:10:d3:46:22:e6:ae:a6:62:5b:5f:48:98:cd:ba:
-         4b:ef:1f:5c:3b:2a:2e:ef:48:76:8b:3d:05:d6:e4:25:2b:60:
-         2d:a8:cd:64:98:95:73:22:62:d7:67:7f:35:93:2f:2f:cc:99:
-         ac:d2:07:1f:9d:ff:1f:e3:33:84:4f:ff:a6:b7:48:7a:fc:24:
-         c5:25:c1:22:b4:4e:f1:cd:10:10:0a:b8:9b:1d:9e:86:d9:9d:
-         52:3c:af:04:76:b8:3b:98:83:6d:82:51:ca:b2:ff:15:e4:22:
-         50:98:8f:fb:2c:bc:2e:77:8e:11:6b:5b:06:97:ff:da:ea:29:
-         51:88:df:94:2f:7c:75:26:54:99:d9:0a:bc:bb:8d:a0:23:6a:
-         db:cc:85:4e
+         31:64:a4:b0:f8:b5:ae:c5:2b:6b:cf:1a:44:fa:f6:a7:f0:d7:
+         dc:20:f9:10:e7:9f:67:cd:ed:94:97:10:ba:7a:9e:d1:1b:b7:
+         24:45:f7:92:10:bc:35:22:10:09:ac:fc:58:24:2f:c3:ad:5f:
+         95:71:76:91:70:53:92:00:33:a5:f2:ce:fb:f9:d3:99:7a:44:
+         1e:47:4c:c4:35:b3:71:0f:98:ce:cd:5f:aa:f4:40:6b:66:89:
+         91:af:e9:90:66:61:0f:14:b5:ee:d7:65:fe:51:78:01:ed:88:
+         11:6b:f6:36:e9:0d:35:13:70:13:90:37:ad:4b:91:23:61:6d:
+         40:82:d6:f6:14:6f:9b:9b:f8:34:8a:2a:4d:1a:8f:16:df:7d:
+         a6:b0:c0:51:ad:c8:21:49:84:26:64:4a:09:cc:44:1b:3b:98:
+         4c:8a:c1:e4:d6:f1:df:a4:d1:93:ec:f9:98:99:9e:60:27:59:
+         9c:90:bd:fd:21:b6:eb:d5:0f:6c:7d:1e:3d:5f:ff:60:cd:dd:
+         ee:28:2e:d2:c3:6a:38:b6:91:f5:59:f5:33:b9:7f:48:cf:63:
+         3f:61:33:b6:9e:74:38:9b:84:d7:42:70:2f:02:eb:26:10:c3:
+         09:6a:6b:c5:27:a0:b3:9c:78:a1:36:4e:bd:fd:d1:6d:31:19:
+         55:32:81:22
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4tktG
-pSqCaCyfGQmPDMatr7/hj4blK3u2U82/z1fyyRlVLD7VM7ZfDNZlS/A3SSgyaMVW
-MqGNE18qfv+0E7RpB9+CBPm/ngZhrUuCLBI+1jfvH75MbhZb8QLqMXVAK/FtLXv7
-XEN6NHAjxdyA+nZLNiiRfA8UAVtmUYlUeTzVw+NPaqnWq7pX+W0Ts8wsel+HBmKe
-MZviXF63cOEa3AIKI8vcKPuFA7BboJTYSmqO3AIqGcHqMp2im4Q0bHmQ1r+ddALN
-IaO/V0bbTlp2PjJUZn4v8UtAcp2/w/wzi2vMpM4q3XQTe+c9MSauqIiDqyQnMSFV
-F96p1tSuwW6wyuWfAgMBAAGjgekwgeYwHQYDVR0OBBYEFMt5pSjUQH549PPFeyHa
-z9hMlfzuMB8GA1UdIwQYMBaAFCFjPOm6X3kXPSiRUbdybiY8npxlMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtnzHY
+WI2F1B60MVnmqDjAaMYbVyTeHb330NhJsx+UiPO84qumODWIH4dTc7NmNP0dBZy+
+az9oKmWl/4pe+xGApt0nhVDmWkVMHC/Y8vcpo9WiUDyqvrnOun6XbujCkzEmP7en
+nwBdqS28oq9iDsp68v6lX7Ha0YHDcNkZlEMhD7nJ74J8A2KqJa3MQwrny4mDgZwT
++07ob4xE9bJJVb/nVYMyCEAw4CRVqZALsU2vgZA7JH11mXRk2B2DlNFAH10jdL0b
+oT608Lnpl2+uohWvpBLisF2lTDGMKiM8MvCoqcrwAKG046KX94IuOdkChTVR8SdG
+NOC5TrbAcPkdG9ipAgMBAAGjgekwgeYwHQYDVR0OBBYEFFl5W21k6CjZlAw2ks3v
+kJXw/qqsMB8GA1UdIwQYMBaAFO2uM6nhBG34r4aHcOfYqQEOdUo/MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAlo6RaVhAbe+LYD81VwqT
-hW3lpd+ZBeS5Msbjm+YujEy1TcT6QM1ELPGzvdIkmtfLG2RGt9sRoH9JW+z8DtU2
-c/dgSIIRvpIcQQ+Whe/D5c87pi5BmWx3azt046nQNZ8X+H9NpzNszvqjvvQN+zgC
-qxDTRiLmrqZiW19ImM26S+8fXDsqLu9Idos9BdbkJStgLajNZJiVcyJi12d/NZMv
-L8yZrNIHH53/H+MzhE//prdIevwkxSXBIrRO8c0QEAq4mx2ehtmdUjyvBHa4O5iD
-bYJRyrL/FeQiUJiP+yy8LneOEWtbBpf/2uopUYjflC98dSZUmdkKvLuNoCNq28yF
-Tg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAMWSksPi1rsUra88aRPr2
+p/DX3CD5EOefZ83tlJcQunqe0Ru3JEX3khC8NSIQCaz8WCQvw61flXF2kXBTkgAz
+pfLO+/nTmXpEHkdMxDWzcQ+Yzs1fqvRAa2aJka/pkGZhDxS17tdl/lF4Ae2IEWv2
+NukNNRNwE5A3rUuRI2FtQILW9hRvm5v4NIoqTRqPFt99prDAUa3IIUmEJmRKCcxE
+GzuYTIrB5Nbx36TRk+z5mJmeYCdZnJC9/SG269UPbH0ePV//YM3d7igu0sNqOLaR
+9Vn1M7l/SM9jP2Eztp50OJuE10JwLwLrJhDDCWprxSegs5x4oTZOvf3RbTEZVTKB
+Ig==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a9:38:35:27:ba:37:72:ce:20:03:31:f3:dc:4e:
-                    96:e4:69:f4:d4:d1:77:8f:59:a8:93:d8:02:d3:a6:
-                    14:c1:d4:a2:8e:a2:69:0b:fa:28:1d:3c:71:f4:59:
-                    de:c7:a0:80:09:7a:3e:b0:74:be:50:29:93:ce:73:
-                    66:67:64:30:5f:e0:8c:8a:05:2a:18:16:77:03:c6:
-                    09:26:b6:dd:c0:5d:d3:99:07:71:98:02:82:bd:ff:
-                    d4:5a:f2:84:6c:9f:3c:90:d5:d7:fb:06:24:65:12:
-                    fd:df:29:f1:2e:81:d0:b8:2f:ea:dd:0f:52:15:50:
-                    91:b4:10:6b:2d:88:d5:91:44:57:51:ff:1f:db:62:
-                    47:5d:41:9a:b1:3f:03:f6:fd:3b:79:e0:46:b0:69:
-                    01:ee:72:d9:48:22:6a:b7:59:2e:39:6f:1f:01:1b:
-                    e0:b2:c4:a1:9e:b8:dc:c5:99:87:0f:84:d5:55:4d:
-                    bb:0b:73:fc:85:62:a6:14:53:13:1d:d8:36:a1:96:
-                    b8:7f:65:81:e6:04:20:97:e8:05:ca:c9:4e:55:9b:
-                    eb:74:97:7d:cf:72:52:17:7b:ac:a2:10:0f:96:7d:
-                    0c:f3:d3:52:6d:d0:af:36:44:be:6f:18:d9:39:0c:
-                    75:b8:e0:9e:5c:38:ec:47:72:a3:61:cc:e1:e9:de:
-                    a5:a9
+                    00:c4:01:7b:4f:02:d0:de:88:53:75:4b:44:50:d4:
+                    93:6d:42:9d:62:6c:62:67:a9:e7:eb:d0:08:2a:01:
+                    be:06:20:38:2b:5e:a3:1a:5b:59:d3:91:9d:5e:30:
+                    f7:f7:d1:7b:e3:75:08:6e:d2:c5:95:9a:6b:d2:0f:
+                    67:c9:6f:43:74:36:ac:b7:49:8b:b5:45:dd:34:d8:
+                    60:f0:ca:3f:e9:1a:95:be:3a:05:93:e4:95:85:c7:
+                    ad:09:04:46:c1:8d:c2:c8:81:93:56:3d:a9:dc:5a:
+                    30:4b:1a:ff:25:11:18:e5:17:a4:50:ff:29:49:ed:
+                    70:d6:28:92:61:3c:ca:61:30:b4:11:90:c6:92:f5:
+                    75:b2:1d:9c:e1:67:ef:16:f6:82:ad:fc:7f:99:98:
+                    cc:b1:73:68:6d:56:a9:a0:b9:b7:4d:c8:d8:90:bf:
+                    b8:34:95:8f:40:89:a3:8e:99:f7:3e:34:99:e9:60:
+                    7c:b9:50:af:00:8b:1c:92:3a:90:b5:06:00:7f:7b:
+                    12:0b:57:5d:e6:8a:75:a4:57:f9:11:db:c1:54:71:
+                    52:da:48:04:27:7f:22:a3:e7:3b:86:72:e9:81:9e:
+                    24:25:63:85:0e:c4:da:54:c2:56:af:e0:2a:9c:0d:
+                    bc:b7:21:f3:0d:42:d9:f9:4c:d8:a8:49:f8:1a:08:
+                    e8:51
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                21:63:3C:E9:BA:5F:79:17:3D:28:91:51:B7:72:6E:26:3C:9E:9C:65
+                ED:AE:33:A9:E1:04:6D:F8:AF:86:87:70:E7:D8:A9:01:0E:75:4A:3F
             X509v3 Authority Key Identifier: 
-                keyid:A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                keyid:AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ad:e7:db:f0:f9:65:22:52:9d:80:63:50:03:43:15:e2:19:44:
-         93:31:c8:7b:f3:8c:81:d4:72:84:5c:a3:b9:90:b3:97:78:c6:
-         7c:c3:50:8c:29:e9:49:d6:f1:cc:6e:f0:20:a2:2c:ff:ab:52:
-         15:04:90:73:b1:3f:7f:be:21:87:96:c4:31:87:ae:15:ca:33:
-         4a:79:84:11:11:4f:2c:dd:12:36:b0:c4:03:dd:c6:a5:a4:d2:
-         5b:71:23:40:56:4e:49:97:1f:cb:af:c3:93:69:69:a0:6d:cd:
-         ac:47:9a:65:d1:c0:2f:d8:6d:56:4e:a4:90:16:6c:8b:fb:38:
-         b7:b3:ac:52:d6:0a:17:21:8d:a6:6e:ff:f3:15:13:d4:3b:0d:
-         74:77:4e:60:63:9c:10:6f:36:70:a6:a8:93:8a:88:ff:82:13:
-         25:0a:ba:5e:e6:09:c9:bb:8b:3d:cb:e4:d3:c0:28:6e:c6:2d:
-         21:82:d3:81:b1:28:41:dd:7a:aa:cd:be:66:1e:06:3a:99:cf:
-         41:ed:02:81:0a:0e:98:a2:f4:03:4b:31:c1:d8:78:79:a0:fd:
-         25:a1:30:09:1c:29:e5:38:3a:b3:f2:48:70:5f:82:b6:71:b7:
-         f4:cd:99:e6:62:f2:78:b7:8c:92:af:d6:ce:96:c8:0f:84:60:
-         93:19:fa:21
+         99:1e:ca:2c:10:fe:17:0e:0c:b0:f2:b4:36:50:16:e6:8f:22:
+         2f:c3:5d:9d:c0:da:de:24:b2:b3:c8:8c:47:bf:fb:16:52:87:
+         80:bd:db:3f:74:dd:d1:0d:16:77:cf:54:72:ee:b8:59:64:24:
+         96:bf:20:22:d8:50:2b:23:7c:27:a0:b2:72:b5:a3:79:37:12:
+         c7:d0:1b:cf:fb:8e:9e:0a:2f:62:b9:df:9f:83:b8:8f:d4:33:
+         7c:99:a9:ce:d0:b0:ae:f1:cb:71:bd:f5:ab:ed:ce:45:30:1d:
+         a3:b9:9a:0c:07:1a:5c:19:e4:28:83:40:4a:31:c6:49:6e:7d:
+         44:e0:c6:ab:96:dd:47:e9:4c:94:2f:63:d0:89:ce:09:a5:cd:
+         da:e0:9f:41:47:25:d1:1a:51:91:66:48:dc:eb:28:ba:b4:55:
+         c3:08:a0:67:a6:63:d8:a9:27:e8:f2:43:e6:c1:75:b4:5e:ac:
+         9b:8f:97:f6:4c:db:03:ce:3b:cc:49:0e:df:70:6c:69:41:eb:
+         56:6a:85:b3:42:03:1a:63:67:24:9a:8c:e4:7c:9b:bf:f4:43:
+         07:1a:84:d7:af:10:c2:ce:d2:06:d6:a0:ba:22:9d:1b:70:85:
+         73:de:61:3e:d3:48:23:84:9c:6e:4a:6b:3d:0b:64:0d:0d:e2:
+         ab:e3:6d:8c
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqTg1J7o3
-cs4gAzHz3E6W5Gn01NF3j1mok9gC06YUwdSijqJpC/ooHTxx9Fnex6CACXo+sHS+
-UCmTznNmZ2QwX+CMigUqGBZ3A8YJJrbdwF3TmQdxmAKCvf/UWvKEbJ88kNXX+wYk
-ZRL93ynxLoHQuC/q3Q9SFVCRtBBrLYjVkURXUf8f22JHXUGasT8D9v07eeBGsGkB
-7nLZSCJqt1kuOW8fARvgssShnrjcxZmHD4TVVU27C3P8hWKmFFMTHdg2oZa4f2WB
-5gQgl+gFyslOVZvrdJd9z3JSF3usohAPln0M89NSbdCvNkS+bxjZOQx1uOCeXDjs
-R3KjYczh6d6lqQIDAQABo4HLMIHIMB0GA1UdDgQWBBQhYzzpul95Fz0okVG3cm4m
-PJ6cZTAfBgNVHSMEGDAWgBSkSu+NAwVahdjVQ2Sy7gbW0XU2izA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAF7TwLQ
+3ohTdUtEUNSTbUKdYmxiZ6nn69AIKgG+BiA4K16jGltZ05GdXjD399F743UIbtLF
+lZpr0g9nyW9DdDast0mLtUXdNNhg8Mo/6RqVvjoFk+SVhcetCQRGwY3CyIGTVj2p
+3FowSxr/JREY5RekUP8pSe1w1iiSYTzKYTC0EZDGkvV1sh2c4WfvFvaCrfx/mZjM
+sXNobVapoLm3TcjYkL+4NJWPQImjjpn3PjSZ6WB8uVCvAIsckjqQtQYAf3sSC1dd
+5op1pFf5EdvBVHFS2kgEJ38io+c7hnLpgZ4kJWOFDsTaVMJWr+AqnA28tyHzDULZ
++UzYqEn4GgjoUQIDAQABo4HLMIHIMB0GA1UdDgQWBBTtrjOp4QRt+K+Gh3Dn2KkB
+DnVKPzAfBgNVHSMEGDAWgBSqtRStljmvL9LA7AWfkSwOBApy7zA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AK3n2/D5ZSJSnYBjUANDFeIZRJMxyHvzjIHUcoRco7mQs5d4xnzDUIwp6UnW8cxu
-8CCiLP+rUhUEkHOxP3++IYeWxDGHrhXKM0p5hBERTyzdEjawxAPdxqWk0ltxI0BW
-TkmXH8uvw5NpaaBtzaxHmmXRwC/YbVZOpJAWbIv7OLezrFLWChchjaZu//MVE9Q7
-DXR3TmBjnBBvNnCmqJOKiP+CEyUKul7mCcm7iz3L5NPAKG7GLSGC04GxKEHdeqrN
-vmYeBjqZz0HtAoEKDpii9ANLMcHYeHmg/SWhMAkcKeU4OrPySHBfgrZxt/TNmeZi
-8ni3jJKv1s6WyA+EYJMZ+iE=
+AJkeyiwQ/hcODLDytDZQFuaPIi/DXZ3A2t4ksrPIjEe/+xZSh4C92z903dENFnfP
+VHLuuFlkJJa/ICLYUCsjfCegsnK1o3k3EsfQG8/7jp4KL2K535+DuI/UM3yZqc7Q
+sK7xy3G99avtzkUwHaO5mgwHGlwZ5CiDQEoxxklufUTgxquW3UfpTJQvY9CJzgml
+zdrgn0FHJdEaUZFmSNzrKLq0VcMIoGemY9ipJ+jyQ+bBdbRerJuPl/ZM2wPOO8xJ
+Dt9wbGlB61ZqhbNCAxpjZySajOR8m7/0QwcahNevEMLO0gbWoLoinRtwhXPeYT7T
+SCOEnG5Kaz0LZA0N4qvjbYw=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e9:d3:1f:75:ed:64:d9:2b:d9:1c:3b:ab:db:86:
-                    88:7a:65:57:87:7c:b9:51:2f:57:7f:34:7d:73:5d:
-                    53:8f:a0:13:08:26:ec:46:0d:05:cb:91:36:4a:9b:
-                    13:65:76:9d:68:b9:30:6a:13:9e:b2:1b:95:e7:3e:
-                    11:fc:16:50:ff:6f:8e:bd:88:79:4d:9e:fa:74:20:
-                    2d:1c:f0:15:98:d7:de:f9:99:46:f3:f5:c2:17:08:
-                    c2:c3:3b:e3:6e:1b:bf:c9:3f:db:c3:ff:a4:d2:ee:
-                    c4:8e:91:e6:af:12:e7:5c:1c:73:af:df:0f:0f:05:
-                    d8:f0:f6:21:95:5e:40:97:ee:5d:1b:df:a8:89:30:
-                    f4:08:e6:e4:c6:ca:aa:58:fa:e6:8c:b4:2f:3e:56:
-                    ea:9b:02:4f:bc:65:c5:a7:41:bf:8d:e2:34:dc:f3:
-                    da:f3:23:36:07:32:62:96:5b:be:44:69:39:47:44:
-                    70:96:96:03:f1:d8:1b:e3:bd:32:bc:9e:3b:5a:4c:
-                    38:fa:75:d1:af:2c:30:d3:59:0b:87:43:85:b1:2e:
-                    43:15:97:13:89:8e:e7:15:c2:8b:39:be:5f:f1:59:
-                    57:45:b8:ac:e8:bd:4a:46:a6:50:5e:22:40:68:60:
-                    5a:77:81:2f:3d:be:03:13:3b:70:2c:a6:ad:eb:58:
-                    c1:05
+                    00:9e:35:c6:7b:c5:c8:62:47:51:3e:e2:02:5c:47:
+                    ea:01:5b:46:12:0b:50:d3:56:5c:d2:9e:37:92:f6:
+                    dd:c3:b6:89:d6:26:47:2f:22:96:93:f4:4e:ac:f7:
+                    02:01:37:a8:be:3a:98:51:9c:6d:ae:03:70:dd:9d:
+                    f0:a1:1d:a2:cf:81:ec:d7:cf:73:34:4b:29:59:bd:
+                    7d:a1:2b:72:10:79:28:ce:25:c1:08:57:03:d9:b7:
+                    26:cd:f2:58:7e:4a:fa:22:81:8f:f6:c9:03:08:6d:
+                    53:25:dd:1b:ad:0f:64:88:59:1c:91:13:fa:b7:87:
+                    4d:6b:7d:1a:6e:63:4e:08:03:d3:2d:94:35:6c:82:
+                    a2:63:35:a5:e0:78:cc:75:33:1c:fa:5c:e3:c7:64:
+                    cd:d3:b7:b8:cd:0b:41:a4:9e:7c:fc:c7:76:34:9e:
+                    37:d1:4a:5b:fe:94:d2:6f:1a:db:6c:14:8c:46:5d:
+                    c5:d3:5a:39:6c:db:1a:03:e2:9a:ab:b2:7d:77:f9:
+                    68:07:b9:b0:56:43:d3:2e:2d:a4:c1:5a:98:63:26:
+                    0c:65:bc:ed:35:5c:25:6c:64:86:2e:45:5d:47:b3:
+                    79:21:f2:07:17:a1:08:d3:68:f6:d4:07:91:b6:85:
+                    41:bd:5f:bf:58:31:a4:6c:3f:f1:2b:ac:d3:01:d3:
+                    47:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
             X509v3 Authority Key Identifier: 
-                keyid:A4:4A:EF:8D:03:05:5A:85:D8:D5:43:64:B2:EE:06:D6:D1:75:36:8B
+                keyid:AA:B5:14:AD:96:39:AF:2F:D2:C0:EC:05:9F:91:2C:0E:04:0A:72:EF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         26:9d:8a:78:1d:b6:59:cd:cc:23:10:2b:9b:2c:a1:b4:fc:53:
-         1e:c5:57:d8:d8:05:f2:dc:a6:13:2e:4b:13:af:14:bf:fa:c0:
-         af:3e:96:24:4a:ed:38:0f:10:f0:90:a9:c4:0d:92:59:6d:c7:
-         12:bf:17:e2:d7:1b:20:1c:74:ab:7a:50:38:52:cf:55:58:40:
-         f7:c4:ee:78:a4:c1:79:ab:50:0c:a7:90:86:09:b0:05:bd:2a:
-         ec:31:00:a5:83:43:95:45:27:06:c0:e7:49:a3:81:9e:90:56:
-         97:29:fc:b0:f1:4d:75:68:04:93:a2:1b:8e:fd:52:e1:2d:b8:
-         30:be:4e:3d:e9:2b:96:4e:38:a3:26:4b:fe:36:72:45:55:57:
-         f1:c9:98:a7:9d:17:e2:b6:05:c8:bb:a4:ed:5e:be:23:8b:60:
-         e0:c8:42:c6:29:5f:37:37:2c:86:7d:06:67:5e:67:44:19:7f:
-         13:5d:d3:8a:1e:50:b7:1c:03:52:0d:ff:4e:3c:69:f6:2f:d1:
-         70:37:47:63:fa:60:1f:34:a4:1f:d8:2f:ed:e0:0e:f2:68:f8:
-         e3:58:34:33:3b:af:8f:15:c8:fe:2e:73:17:60:a9:49:7e:7e:
-         1a:0e:9a:a2:60:bf:09:8d:85:8c:a3:dc:77:5f:45:b4:f9:f0:
-         6d:a0:29:2a
+         82:39:f7:d4:dd:8c:fd:7d:9a:50:88:6c:3d:30:a6:b8:5b:1d:
+         23:f1:c1:7c:bf:33:9d:b1:0d:19:e9:33:bb:d9:fd:7b:b6:06:
+         32:13:be:d9:33:92:51:ab:20:ca:4e:50:55:52:ab:bf:8a:f4:
+         d7:ee:eb:e4:ca:9f:76:a7:39:1b:e2:6e:c9:04:56:e2:5d:6f:
+         37:48:08:2e:73:66:d6:fb:a6:95:9d:cf:d5:24:ac:08:89:42:
+         6f:0f:ac:40:dc:a6:9f:3e:ee:e7:78:60:fc:b3:12:6d:50:b2:
+         b9:84:49:7f:39:75:2d:8f:a9:a5:15:39:58:01:ad:c9:69:36:
+         f5:22:5f:ba:a4:cc:3b:0f:4c:21:b8:c9:6f:22:44:2f:28:63:
+         86:30:4d:c0:c9:d0:32:9e:67:dc:22:9d:f1:1c:56:6c:5e:da:
+         38:7f:08:42:c9:a8:d9:7a:35:a5:67:28:5c:d7:da:a3:c1:ff:
+         65:39:a1:e4:8b:72:d4:2d:d4:5a:ab:e4:6f:b6:fd:53:82:fd:
+         23:25:ea:70:8f:6a:85:ff:48:d2:83:47:71:d6:4f:86:4f:4c:
+         13:16:5e:8f:8b:9a:50:5a:76:53:ad:ad:cb:11:c4:7c:3d:8a:
+         bf:c5:ae:2b:1f:4a:d6:ac:58:64:9a:a7:bd:31:aa:7b:4a:67:
+         2d:32:74:0d
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOnTH3XtZNkr2Rw7q9uG
-iHplV4d8uVEvV380fXNdU4+gEwgm7EYNBcuRNkqbE2V2nWi5MGoTnrIblec+EfwW
-UP9vjr2IeU2e+nQgLRzwFZjX3vmZRvP1whcIwsM7424bv8k/28P/pNLuxI6R5q8S
-51wcc6/fDw8F2PD2IZVeQJfuXRvfqIkw9Ajm5MbKqlj65oy0Lz5W6psCT7xlxadB
-v43iNNzz2vMjNgcyYpZbvkRpOUdEcJaWA/HYG+O9MryeO1pMOPp10a8sMNNZC4dD
-hbEuQxWXE4mO5xXCizm+X/FZV0W4rOi9SkamUF4iQGhgWneBLz2+AxM7cCymretY
-wQUCAwEAAaOByDCBxTAdBgNVHQ4EFgQUpErvjQMFWoXY1UNksu4G1tF1NoswHwYD
-VR0jBBgwFoAUpErvjQMFWoXY1UNksu4G1tF1NoswNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ41xnvFyGJHUT7iAlxH
+6gFbRhILUNNWXNKeN5L23cO2idYmRy8ilpP0Tqz3AgE3qL46mFGcba4DcN2d8KEd
+os+B7NfPczRLKVm9faErchB5KM4lwQhXA9m3Js3yWH5K+iKBj/bJAwhtUyXdG60P
+ZIhZHJET+reHTWt9Gm5jTggD0y2UNWyComM1peB4zHUzHPpc48dkzdO3uM0LQaSe
+fPzHdjSeN9FKW/6U0m8a22wUjEZdxdNaOWzbGgPimquyfXf5aAe5sFZD0y4tpMFa
+mGMmDGW87TVcJWxkhi5FXUezeSHyBxehCNNo9tQHkbaFQb1fv1gxpGw/8Sus0wHT
+R6kCAwEAAaOByDCBxTAdBgNVHQ4EFgQUqrUUrZY5ry/SwOwFn5EsDgQKcu8wHwYD
+VR0jBBgwFoAUqrUUrZY5ry/SwOwFn5EsDgQKcu8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAmnYp4HbZZzcwj
-ECubLKG0/FMexVfY2AXy3KYTLksTrxS/+sCvPpYkSu04DxDwkKnEDZJZbccSvxfi
-1xsgHHSrelA4Us9VWED3xO54pMF5q1AMp5CGCbAFvSrsMQClg0OVRScGwOdJo4Ge
-kFaXKfyw8U11aASTohuO/VLhLbgwvk496SuWTjijJkv+NnJFVVfxyZinnRfitgXI
-u6TtXr4ji2DgyELGKV83NyyGfQZnXmdEGX8TXdOKHlC3HANSDf9OPGn2L9FwN0dj
-+mAfNKQf2C/t4A7yaPjjWDQzO6+PFcj+LnMXYKlJfn4aDpqiYL8JjYWMo9x3X0W0
-+fBtoCkq
+AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCCOffU3Yz9fZpQ
+iGw9MKa4Wx0j8cF8vzOdsQ0Z6TO72f17tgYyE77ZM5JRqyDKTlBVUqu/ivTX7uvk
+yp92pzkb4m7JBFbiXW83SAguc2bW+6aVnc/VJKwIiUJvD6xA3KafPu7neGD8sxJt
+ULK5hEl/OXUtj6mlFTlYAa3JaTb1Il+6pMw7D0whuMlvIkQvKGOGME3AydAynmfc
+Ip3xHFZsXto4fwhCyajZejWlZyhc19qjwf9lOaHki3LULdRaq+Rvtv1Tgv0jJepw
+j2qF/0jSg0dx1k+GT0wTFl6Pi5pQWnZTra3LEcR8PYq/xa4rH0rWrFhkmqe9Map7
+SmctMnQN
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
index 307b9f2..acf4292 100644
--- a/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
+++ b/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ad:75:ea:d9:63:a8:36:b6:47:9e:1f:f4:c4:38:
-                    b8:81:a1:cb:46:09:41:00:e8:12:9e:fd:c1:f8:92:
-                    cc:cb:92:90:72:e3:8c:74:20:9a:b2:d7:17:2a:c5:
-                    91:d7:2f:99:64:ad:96:52:16:bc:cd:f0:7a:5d:c8:
-                    04:90:f9:28:ec:05:40:4a:ca:29:33:9f:6c:98:5b:
-                    da:9d:be:6a:a5:2d:82:a5:78:2e:b9:a9:20:77:c0:
-                    53:3c:63:19:af:ca:1c:20:da:b6:69:bc:0b:ba:b5:
-                    f0:a0:92:e7:f5:34:af:a2:41:32:86:6d:67:03:5e:
-                    d5:e6:68:d0:e5:8d:54:89:5d:39:66:ae:af:f2:2f:
-                    38:e2:f6:64:a5:7c:84:fe:2b:87:73:1b:76:29:c8:
-                    d9:06:a8:bf:c7:c9:90:a2:7a:ab:36:b5:96:b2:e4:
-                    1c:68:3a:27:d6:80:e8:f6:cd:61:cf:c5:a6:f8:60:
-                    bf:bc:2c:8c:aa:fb:ae:a4:12:b7:3f:a5:db:cc:25:
-                    f7:7e:fe:01:bf:0e:2d:26:ef:b4:da:d0:e7:31:53:
-                    88:e6:3f:bc:85:f9:e7:9d:40:a9:70:8a:73:8d:f7:
-                    b3:dd:7d:67:52:a5:98:7a:22:2b:e8:15:3f:82:4e:
-                    10:27:ed:92:f8:fa:41:89:6b:26:e9:dd:93:4a:74:
-                    d3:a9
+                    00:b7:36:7c:df:9b:72:f6:3e:9c:69:62:49:17:32:
+                    9b:26:b4:c9:53:83:cb:d1:4c:bd:f3:3e:b1:06:f6:
+                    b7:8b:78:8f:26:4f:72:92:03:7e:99:f3:61:60:c2:
+                    44:ae:ba:50:72:49:cc:7c:be:89:88:2c:cf:fc:67:
+                    61:cf:8b:3f:ec:84:29:11:61:18:25:b7:1e:1a:3c:
+                    38:f0:17:e4:54:14:3f:ee:42:35:f6:be:c2:9a:ab:
+                    9d:dc:f9:a4:a4:4c:9b:3b:36:66:64:09:44:07:35:
+                    ea:1c:82:e6:6e:d2:a8:6d:76:9f:8c:cc:7f:38:c6:
+                    f0:c6:cc:b9:6e:ba:7c:28:b8:35:48:59:f2:f8:19:
+                    1b:bd:2f:bd:9f:0f:4e:53:4a:9c:a4:c2:34:7b:1f:
+                    97:d0:02:58:b8:6c:a3:f5:c9:81:ac:cc:5a:25:b6:
+                    fe:45:15:91:b6:ea:ab:56:82:2f:04:00:df:37:a5:
+                    87:b5:de:e9:aa:2c:8a:79:c2:8b:aa:d8:2c:2f:f8:
+                    72:f2:cd:96:70:27:a6:b0:d7:11:02:b8:20:8a:9b:
+                    01:36:71:cb:f5:f1:fa:55:4a:f4:a6:e4:84:ba:f4:
+                    5b:c4:e0:5d:f7:d5:a9:e8:18:77:57:b1:f8:2f:da:
+                    07:4b:38:cd:9f:43:2d:06:60:aa:7b:2d:dc:cf:df:
+                    1b:3d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                92:9A:80:3A:5C:7F:B9:45:6C:C1:79:03:FC:BE:1D:F9:00:A5:ED:9E
+                51:BA:12:8F:AE:B3:25:F2:B6:00:9B:C9:E3:C8:0C:B0:D7:A3:82:68
             X509v3 Authority Key Identifier: 
-                keyid:A4:79:C2:53:F1:7B:AF:B0:97:61:6B:AE:EA:24:7A:98:C7:D7:41:18
+                keyid:63:82:98:2F:91:C3:4A:70:69:98:B9:A5:D2:E7:33:E1:D5:37:9F:94
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         5e:39:9f:dc:2f:71:14:dc:68:84:af:52:a3:3d:07:68:3f:cc:
-         db:fa:4e:b9:d8:7e:7a:a0:7c:9a:75:81:55:a4:c2:45:4f:90:
-         46:d4:8d:08:ca:3a:fa:64:04:b0:1c:42:e4:64:ad:4b:d3:c3:
-         3c:57:b5:47:76:fd:7e:e4:a5:6c:22:71:4b:1c:d2:0d:23:8c:
-         b1:9a:20:18:f5:78:49:fa:06:e6:47:e5:4a:43:88:b4:8e:b8:
-         d9:23:b8:75:97:d4:cd:db:58:dd:7a:21:c6:65:47:fa:2f:f5:
-         c5:c7:c3:43:7f:e2:61:ff:55:e5:0e:1e:f7:2b:a7:1a:45:16:
-         16:e6:bb:4b:f5:f5:2d:fd:01:f2:e3:41:b9:d1:dc:bb:52:97:
-         c5:90:cf:d1:57:70:46:46:ad:0f:e3:81:cc:18:e6:ce:05:fd:
-         29:09:b2:eb:91:18:79:38:92:23:33:9b:0f:53:b1:fe:5d:81:
-         65:b9:49:c9:64:6a:75:c4:e6:fe:8b:fc:3f:06:22:ab:e0:0a:
-         18:d9:d5:5e:a6:d5:bd:2d:9f:b4:48:b5:ba:42:54:c7:75:be:
-         8d:95:8b:ef:27:68:2a:a9:82:14:e4:9f:2c:ec:fd:27:cb:56:
-         c3:26:ec:10:96:85:f5:9b:42:b6:9c:99:ee:48:4a:3e:1b:81:
-         9c:5f:7d:ad
+         20:8f:fb:50:37:02:9f:0c:c4:9d:02:37:46:80:4d:cc:a9:03:
+         5d:5f:95:9e:d1:3b:13:c3:59:af:7a:cb:4c:46:25:b5:8d:1a:
+         78:3d:41:69:fc:d6:e4:03:1d:be:5d:cf:0b:19:13:4c:12:0e:
+         6a:46:94:da:10:bb:e7:57:6b:1c:1d:d4:6e:41:13:69:d2:89:
+         bb:eb:2e:87:18:7d:f2:dc:69:6e:76:e0:dd:91:f8:8b:ef:5a:
+         0c:48:02:41:c7:69:cd:ad:20:05:b6:61:12:12:2a:fa:86:5e:
+         b4:2d:2d:df:72:b6:0d:76:07:8c:d9:a4:4d:73:f3:3c:32:25:
+         eb:28:f3:12:b1:05:d5:87:fb:07:96:0f:96:63:94:e1:bc:59:
+         99:ee:b1:eb:f2:17:c4:31:ef:60:20:e5:d1:4e:53:80:65:4c:
+         e9:e4:be:34:9e:03:66:be:be:50:85:f1:91:d0:01:e2:b9:48:
+         f6:6e:de:da:fc:da:15:0a:c6:ec:cf:4a:64:e2:21:20:6e:28:
+         8a:55:fd:d5:98:10:6a:f4:cf:dd:3e:51:79:de:76:16:35:75:
+         cc:ca:b5:49:e4:48:54:03:d8:50:62:90:38:c1:c4:f1:4b:06:
+         f6:9f:f7:64:f7:11:17:f1:bd:13:8a:8f:66:01:8a:99:97:00:
+         c8:4f:a4:33
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtderZ
-Y6g2tkeeH/TEOLiBoctGCUEA6BKe/cH4kszLkpBy44x0IJqy1xcqxZHXL5lkrZZS
-FrzN8HpdyASQ+SjsBUBKyikzn2yYW9qdvmqlLYKleC65qSB3wFM8Yxmvyhwg2rZp
-vAu6tfCgkuf1NK+iQTKGbWcDXtXmaNDljVSJXTlmrq/yLzji9mSlfIT+K4dzG3Yp
-yNkGqL/HyZCieqs2tZay5BxoOifWgOj2zWHPxab4YL+8LIyq+66kErc/pdvMJfd+
-/gG/Di0m77Ta0OcxU4jmP7yF+eedQKlwinON97PdfWdSpZh6IivoFT+CThAn7ZL4
-+kGJaybp3ZNKdNOpAgMBAAGjgekwgeYwHQYDVR0OBBYEFJKagDpcf7lFbMF5A/y+
-HfkApe2eMB8GA1UdIwQYMBaAFKR5wlPxe6+wl2FrruokepjH10EYMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3Nnzf
+m3L2PpxpYkkXMpsmtMlTg8vRTL3zPrEG9reLeI8mT3KSA36Z82FgwkSuulByScx8
+vomILM/8Z2HPiz/shCkRYRgltx4aPDjwF+RUFD/uQjX2vsKaq53c+aSkTJs7NmZk
+CUQHNeocguZu0qhtdp+MzH84xvDGzLluunwouDVIWfL4GRu9L72fD05TSpykwjR7
+H5fQAli4bKP1yYGszFoltv5FFZG26qtWgi8EAN83pYe13umqLIp5wouq2Cwv+HLy
+zZZwJ6aw1xECuCCKmwE2ccv18fpVSvSm5IS69FvE4F331anoGHdXsfgv2gdLOM2f
+Qy0GYKp7LdzP3xs9AgMBAAGjgekwgeYwHQYDVR0OBBYEFFG6Eo+usyXytgCbyePI
+DLDXo4JoMB8GA1UdIwQYMBaAFGOCmC+Rw0pwaZi5pdLnM+HVN5+UMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAXjmf3C9xFNxohK9Soz0H
-aD/M2/pOudh+eqB8mnWBVaTCRU+QRtSNCMo6+mQEsBxC5GStS9PDPFe1R3b9fuSl
-bCJxSxzSDSOMsZogGPV4SfoG5kflSkOItI642SO4dZfUzdtY3XohxmVH+i/1xcfD
-Q3/iYf9V5Q4e9yunGkUWFua7S/X1Lf0B8uNBudHcu1KXxZDP0VdwRkatD+OBzBjm
-zgX9KQmy65EYeTiSIzObD1Ox/l2BZblJyWRqdcTm/ov8PwYiq+AKGNnVXqbVvS2f
-tEi1ukJUx3W+jZWL7ydoKqmCFOSfLOz9J8tWwybsEJaF9ZtCtpyZ7khKPhuBnF99
-rQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAII/7UDcCnwzEnQI3RoBN
+zKkDXV+VntE7E8NZr3rLTEYltY0aeD1BafzW5AMdvl3PCxkTTBIOakaU2hC751dr
+HB3UbkETadKJu+suhxh98txpbnbg3ZH4i+9aDEgCQcdpza0gBbZhEhIq+oZetC0t
+33K2DXYHjNmkTXPzPDIl6yjzErEF1Yf7B5YPlmOU4bxZme6x6/IXxDHvYCDl0U5T
+gGVM6eS+NJ4DZr6+UIXxkdAB4rlI9m7e2vzaFQrG7M9KZOIhIG4oilX91ZgQavTP
+3T5Red52FjV1zMq1SeRIVAPYUGKQOMHE8UsG9p/3ZPcRF/G9E4qPZgGKmZcAyE+k
+Mw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9b:ae:24:f7:35:a1:99:8f:a3:2e:f8:62:c1:ba:
-                    f3:f3:92:a8:18:1e:57:b1:40:17:0a:3a:3b:67:64:
-                    7d:7c:97:98:ce:b0:e4:4b:aa:98:5e:66:4f:d6:4a:
-                    83:2d:c2:db:ac:4e:d0:83:3c:07:0a:f1:51:3f:7d:
-                    8f:5f:1d:48:14:e1:39:98:bf:c9:44:f6:a0:72:6c:
-                    1d:1c:13:91:cd:90:e2:19:88:80:59:2f:13:62:ac:
-                    9b:d0:19:53:a8:fe:f3:43:a7:94:fb:8c:df:98:10:
-                    48:6c:4b:20:c5:70:21:27:43:02:fe:15:ed:37:bf:
-                    ee:71:d0:7d:69:f6:94:82:8e:83:a5:f8:b2:31:47:
-                    bf:af:5c:94:d8:d8:a7:f8:bd:a2:fa:89:62:61:43:
-                    9e:46:10:e9:32:73:9c:32:bd:b9:a2:fe:35:96:df:
-                    10:b5:a6:8f:af:ed:4b:e0:4b:22:00:7f:e8:78:bf:
-                    e9:0f:2d:26:80:d2:96:3a:0a:2e:02:b9:f7:49:57:
-                    d6:7e:df:e4:97:dd:50:69:c7:49:f2:b2:74:94:1e:
-                    ea:f9:7b:61:45:36:3b:7d:29:6b:09:de:ac:58:19:
-                    14:58:2c:83:b8:99:08:ba:be:78:ba:e8:f1:bb:f1:
-                    09:32:44:18:fb:72:4e:41:1c:6b:43:16:a2:73:6a:
-                    63:65
+                    00:af:2b:dd:ce:94:26:44:b4:47:07:b5:6f:6b:6d:
+                    a4:e1:55:90:8b:18:52:b0:18:f2:e9:c0:5e:de:bd:
+                    1f:7e:b6:82:5f:a0:c2:76:d7:32:50:13:6a:33:91:
+                    93:40:ab:21:42:41:1b:cf:01:2c:99:8c:b3:dc:a0:
+                    7f:77:a6:af:4b:6a:fe:cc:13:4d:5b:8d:17:a1:fc:
+                    a5:27:22:86:73:c0:5c:ce:9d:41:c5:f0:37:49:7f:
+                    58:6e:72:48:f8:5e:2f:ad:3d:20:81:0b:e9:02:58:
+                    15:79:75:68:79:6b:73:2e:04:3a:df:0a:77:f6:b0:
+                    08:94:00:39:0b:b3:6e:eb:4d:c9:0e:89:c4:d0:21:
+                    36:53:18:e9:74:42:0e:a4:fd:2d:ef:5f:14:73:8e:
+                    2f:40:9f:9b:6d:19:ad:95:f9:ba:a5:a9:4a:08:b7:
+                    33:8d:7d:23:3e:4c:0f:d1:02:42:18:fc:d9:a5:b8:
+                    fd:52:3a:e8:7b:01:1f:b7:a4:88:d7:db:32:f2:94:
+                    ab:4d:41:f4:d5:ec:81:5a:65:10:02:bd:16:06:45:
+                    21:55:c9:cc:80:87:99:24:ad:58:64:da:08:79:fe:
+                    21:03:c8:60:9b:a1:fb:dd:05:20:99:6b:17:74:2a:
+                    b1:60:62:86:6a:a7:b0:e4:1a:23:4a:97:37:1f:86:
+                    3d:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:79:C2:53:F1:7B:AF:B0:97:61:6B:AE:EA:24:7A:98:C7:D7:41:18
+                63:82:98:2F:91:C3:4A:70:69:98:B9:A5:D2:E7:33:E1:D5:37:9F:94
             X509v3 Authority Key Identifier: 
-                keyid:75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                keyid:55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         93:d8:9b:e5:69:16:43:e6:5b:3b:c0:70:44:ec:1d:7d:9e:4f:
-         28:16:99:b5:70:6f:5a:f6:f3:90:1f:e9:3c:eb:8f:bb:3b:28:
-         d0:e1:3f:60:6d:81:de:01:77:71:88:54:44:41:16:73:48:3c:
-         f6:5c:7d:6b:6d:81:e4:35:05:f6:4c:91:cb:a3:bf:06:d3:b2:
-         33:39:06:07:4f:2d:99:ff:34:85:6b:75:02:18:5f:b1:9e:5d:
-         a7:a0:78:b9:26:aa:1e:87:51:37:3f:47:af:56:07:04:95:01:
-         cf:40:39:0a:ce:01:7b:e0:34:dc:14:e3:06:57:d8:93:0c:6c:
-         90:51:92:51:6e:b8:f7:ff:62:81:e3:73:f1:34:5f:a0:19:7c:
-         39:d7:d1:81:10:5a:90:52:e1:32:c7:3a:66:69:c5:5b:d7:54:
-         15:70:d0:9b:42:bd:70:74:37:2b:a2:e7:ee:d3:20:96:3a:32:
-         ee:53:21:f0:f6:4b:c8:fb:a7:e1:ce:9d:72:cf:d0:e2:7c:e4:
-         13:20:66:62:8d:b6:b9:9d:56:4b:c8:cc:e9:00:b6:c7:f7:e4:
-         dc:ed:2c:25:af:32:05:98:ef:56:de:7a:07:ff:eb:62:c1:7b:
-         0b:56:95:ee:90:55:d6:6f:c9:8d:8f:15:dd:d3:65:c1:c7:8c:
-         94:f9:82:5d
+         15:35:ad:b6:a5:5b:7c:ba:fe:6e:62:c0:0e:6e:31:b7:08:15:
+         db:23:4d:4f:6a:ae:aa:0c:d6:87:b2:86:84:75:10:f9:b9:47:
+         63:6d:a9:b8:a8:2e:53:27:45:18:c5:d5:dd:cc:78:08:0e:ef:
+         ff:0d:d7:d8:91:54:1f:59:68:1b:48:e2:f6:10:9e:cb:7a:99:
+         f7:ee:1f:60:72:c0:9f:15:25:8a:74:87:61:fe:f2:79:2e:6a:
+         a6:5b:c2:40:da:3d:c6:e9:05:f3:1c:8f:01:59:a7:e3:da:d9:
+         b7:d5:09:81:49:87:cd:44:f4:ac:58:1d:e5:55:57:35:c6:8a:
+         b9:82:72:b9:cc:6c:2a:94:91:c0:b5:c1:e8:5c:80:ed:67:35:
+         35:eb:e0:0b:b8:5c:5d:6a:b4:d4:7b:4c:5f:1a:d2:62:2f:93:
+         54:83:bc:4f:92:2f:59:5b:cc:b7:aa:bb:49:04:6d:ee:7f:b1:
+         3b:45:52:69:b6:19:f6:69:96:be:d1:cc:56:c1:5f:dd:ff:76:
+         fc:d4:d3:fb:0c:43:e4:44:fd:eb:5a:7c:f2:97:68:93:51:db:
+         b7:e9:5e:c1:53:a3:99:69:18:9c:95:09:31:80:53:79:81:9a:
+         c3:19:1b:3a:1c:64:e3:50:ee:ff:f9:46:30:31:d5:7f:a2:c2:
+         5f:70:b8:1b
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm64k9zWh
-mY+jLvhiwbrz85KoGB5XsUAXCjo7Z2R9fJeYzrDkS6qYXmZP1kqDLcLbrE7QgzwH
-CvFRP32PXx1IFOE5mL/JRPagcmwdHBORzZDiGYiAWS8TYqyb0BlTqP7zQ6eU+4zf
-mBBIbEsgxXAhJ0MC/hXtN7/ucdB9afaUgo6DpfiyMUe/r1yU2Nin+L2i+oliYUOe
-RhDpMnOcMr25ov41lt8QtaaPr+1L4EsiAH/oeL/pDy0mgNKWOgouArn3SVfWft/k
-l91QacdJ8rJ0lB7q+XthRTY7fSlrCd6sWBkUWCyDuJkIur54uujxu/EJMkQY+3JO
-QRxrQxaic2pjZQIDAQABo4HLMIHIMB0GA1UdDgQWBBSkecJT8XuvsJdha67qJHqY
-x9dBGDAfBgNVHSMEGDAWgBR1fWJXvIEmWGdNSfgEERJiYzw83DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryvdzpQm
+RLRHB7Vva22k4VWQixhSsBjy6cBe3r0ffraCX6DCdtcyUBNqM5GTQKshQkEbzwEs
+mYyz3KB/d6avS2r+zBNNW40XofylJyKGc8Bczp1BxfA3SX9YbnJI+F4vrT0ggQvp
+AlgVeXVoeWtzLgQ63wp39rAIlAA5C7Nu603JDonE0CE2UxjpdEIOpP0t718Uc44v
+QJ+bbRmtlfm6palKCLczjX0jPkwP0QJCGPzZpbj9UjroewEft6SI19sy8pSrTUH0
+1eyBWmUQAr0WBkUhVcnMgIeZJK1YZNoIef4hA8hgm6H73QUgmWsXdCqxYGKGaqew
+5BojSpc3H4Y9EwIDAQABo4HLMIHIMB0GA1UdDgQWBBRjgpgvkcNKcGmYuaXS5zPh
+1TeflDAfBgNVHSMEGDAWgBRVeppEfdotrs39b/MndbCzGziXwjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJPYm+VpFkPmWzvAcETsHX2eTygWmbVwb1r285Af6Tzrj7s7KNDhP2Btgd4Bd3GI
-VERBFnNIPPZcfWttgeQ1BfZMkcujvwbTsjM5BgdPLZn/NIVrdQIYX7GeXaegeLkm
-qh6HUTc/R69WBwSVAc9AOQrOAXvgNNwU4wZX2JMMbJBRklFuuPf/YoHjc/E0X6AZ
-fDnX0YEQWpBS4TLHOmZpxVvXVBVw0JtCvXB0Nyui5+7TIJY6Mu5TIfD2S8j7p+HO
-nXLP0OJ85BMgZmKNtrmdVkvIzOkAtsf35NztLCWvMgWY71beegf/62LBewtWle6Q
-VdZvyY2PFd3TZcHHjJT5gl0=
+ABU1rbalW3y6/m5iwA5uMbcIFdsjTU9qrqoM1oeyhoR1EPm5R2NtqbioLlMnRRjF
+1d3MeAgO7/8N19iRVB9ZaBtI4vYQnst6mffuH2BywJ8VJYp0h2H+8nkuaqZbwkDa
+PcbpBfMcjwFZp+Pa2bfVCYFJh81E9KxYHeVVVzXGirmCcrnMbCqUkcC1wehcgO1n
+NTXr4Au4XF1qtNR7TF8a0mIvk1SDvE+SL1lbzLequ0kEbe5/sTtFUmm2GfZplr7R
+zFbBX93/dvzU0/sMQ+RE/etafPKXaJNR27fpXsFTo5lpGJyVCTGAU3mBmsMZGzoc
+ZONQ7v/5RjAx1X+iwl9wuBs=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d6:d2:49:ce:36:d3:12:76:22:3f:67:89:7e:64:
-                    6e:09:f4:eb:b8:d7:66:3e:92:18:f2:2b:2c:4e:4a:
-                    ca:77:97:83:cc:79:38:d2:50:ea:cf:7e:cf:dc:fa:
-                    83:05:61:d1:70:8f:e3:32:85:39:52:57:0b:77:62:
-                    a0:63:ce:69:79:d0:a5:2c:95:06:92:38:f1:12:41:
-                    4b:5d:87:1e:8e:c5:40:28:36:16:c6:bd:fc:1f:ca:
-                    07:73:d5:1d:c5:5d:46:56:03:c7:f6:67:fb:91:ab:
-                    43:fb:53:48:a4:6f:75:e7:0b:10:f1:3d:aa:14:42:
-                    32:0b:b1:fc:10:81:d0:18:1b:1b:bd:d1:fd:e9:0d:
-                    53:64:3e:8f:3e:df:f0:07:2e:b8:b2:23:74:ea:9b:
-                    23:7c:15:42:e5:53:1a:0c:80:1e:49:dd:4e:fa:e4:
-                    50:a8:e2:74:3f:09:4f:bc:1c:71:7d:72:fe:7a:15:
-                    ac:2e:0b:9b:8c:41:2b:ce:32:a4:f5:40:71:6b:e8:
-                    2c:93:a9:41:03:53:95:a0:4a:68:2d:f0:b6:1e:01:
-                    da:7d:34:47:3d:d5:fb:ef:63:9a:72:df:e8:14:08:
-                    1a:29:29:aa:c3:ff:37:f4:ee:37:a4:45:da:d1:2c:
-                    94:1c:f3:df:62:41:f2:d0:00:0e:2c:06:88:12:71:
-                    8d:7f
+                    00:a6:73:2c:85:79:b0:7f:38:4f:b7:25:27:86:91:
+                    4b:eb:1e:15:30:b3:65:07:71:0e:a3:23:b0:33:51:
+                    9d:14:58:93:ee:42:4e:9f:87:27:a2:a9:cb:85:b4:
+                    63:9a:e0:c1:56:2a:98:07:fe:0c:d8:09:9c:0a:6f:
+                    4f:89:09:fc:7e:a7:1d:6b:74:82:97:3d:39:87:33:
+                    eb:32:c3:72:bc:0d:05:5a:f5:02:af:f0:bc:2b:3a:
+                    9a:30:a1:3e:da:6d:25:4e:ae:b6:6a:62:e6:15:39:
+                    13:6a:d3:ad:5d:b8:d3:bb:09:fe:4c:f9:f5:7a:13:
+                    03:98:a9:ef:29:27:ec:4b:94:fb:fc:91:a9:b6:b4:
+                    86:39:44:d3:29:00:4f:88:ba:48:37:8a:f9:d1:88:
+                    d7:fc:26:1f:8c:f9:58:84:6f:bf:35:62:38:81:54:
+                    7b:b4:d2:d7:f1:7b:5b:6c:2b:ce:86:91:a6:e1:d4:
+                    fa:d5:bb:07:c4:97:30:50:78:5f:59:a9:a1:2c:1f:
+                    2b:d1:fb:88:73:dd:19:7d:4a:7e:99:bc:49:33:dd:
+                    fd:37:b4:27:bf:1d:96:c6:9f:d6:af:45:b6:67:17:
+                    bc:e1:09:a7:39:39:89:d4:c2:83:70:06:44:99:2b:
+                    1e:73:7c:59:aa:bb:cd:20:0c:31:6e:57:cd:9e:7a:
+                    d5:d5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
             X509v3 Authority Key Identifier: 
-                keyid:75:7D:62:57:BC:81:26:58:67:4D:49:F8:04:11:12:62:63:3C:3C:DC
+                keyid:55:7A:9A:44:7D:DA:2D:AE:CD:FD:6F:F3:27:75:B0:B3:1B:38:97:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -233,40 +233,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         52:16:ce:5c:55:aa:c3:76:80:5a:60:ee:8a:85:f5:9f:64:ca:
-         6d:b9:66:53:73:a4:92:47:a9:d5:8e:b5:90:b2:a9:62:69:32:
-         e3:2c:f5:28:e6:d3:6c:d9:94:af:83:11:04:30:95:48:e2:9e:
-         2d:bf:67:63:95:97:32:99:28:b7:87:3d:dc:97:41:08:72:f7:
-         89:6a:94:bb:fe:62:cd:08:f6:d6:0b:86:60:5b:d7:4d:eb:df:
-         40:70:d9:bd:cb:e0:24:b8:ee:62:5a:7f:58:d3:3d:11:53:63:
-         34:aa:af:59:6b:86:30:ab:fb:55:40:cc:e3:65:0e:d6:36:b4:
-         dc:d1:db:a4:bc:1c:7a:51:cf:8a:7d:41:0a:e6:3a:16:c9:43:
-         e6:9e:41:31:f3:4f:81:c1:24:e8:fb:c5:db:87:c8:01:f5:b8:
-         60:ed:2a:0e:fc:31:59:26:63:fb:60:26:8f:52:0c:7c:19:b7:
-         29:18:c9:12:eb:80:6c:aa:25:46:41:92:1a:3a:e1:df:9e:94:
-         1f:92:01:90:b0:92:2c:e0:dd:31:81:a2:c0:ae:05:ae:85:c2:
-         ee:ce:63:2c:c8:3f:41:f9:06:8b:66:56:05:e7:58:7d:3f:d0:
-         ed:05:25:ea:1e:d0:69:24:f0:e3:dd:0a:d8:2e:ba:fe:d9:1a:
-         ba:39:2b:7d
+         1a:6e:d8:a7:3d:20:74:d6:60:5b:41:26:b8:b4:d2:ab:64:83:
+         76:83:b8:6f:68:14:87:0f:83:7a:52:f8:f5:66:9e:7c:27:8c:
+         71:58:17:08:3e:24:df:a3:d8:ed:41:c1:2d:26:0c:93:24:8a:
+         3d:52:7d:05:26:e2:0e:fc:da:88:7f:f4:5e:ac:d8:d1:8e:e4:
+         84:a0:ef:9a:9d:ff:98:75:56:23:83:17:c9:4a:8d:44:c5:ae:
+         30:f5:99:58:77:9d:69:bf:fa:eb:28:f4:e1:a2:06:57:cb:a5:
+         9b:be:d0:3d:0a:aa:56:03:12:9b:ce:88:91:e6:28:fc:51:e2:
+         32:fc:b0:80:88:43:74:44:e4:77:d3:67:cd:f7:f6:bb:50:8b:
+         ba:66:5f:95:c1:05:8c:f0:01:aa:b3:5e:4e:fa:29:dc:1d:23:
+         a7:9b:eb:27:6d:21:a1:2f:8f:f9:5f:5f:28:0b:9b:14:dd:17:
+         c0:0f:74:54:d7:66:91:5e:c8:f3:61:78:be:1d:45:f8:f7:73:
+         a9:2a:5e:7b:de:6d:b0:86:c2:21:61:f7:2e:00:dc:b8:e5:a4:
+         89:db:b5:77:bd:49:86:d0:99:83:39:8d:da:77:31:bb:b0:9e:
+         ca:7c:d5:3c:ff:41:2e:2e:81:21:1b:40:f6:9d:a7:e1:74:77:
+         df:d6:fe:3d
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbSSc420xJ2Ij9niX5k
-bgn067jXZj6SGPIrLE5KyneXg8x5ONJQ6s9+z9z6gwVh0XCP4zKFOVJXC3dioGPO
-aXnQpSyVBpI48RJBS12HHo7FQCg2Fsa9/B/KB3PVHcVdRlYDx/Zn+5GrQ/tTSKRv
-decLEPE9qhRCMgux/BCB0BgbG73R/ekNU2Q+jz7f8AcuuLIjdOqbI3wVQuVTGgyA
-HkndTvrkUKjidD8JT7wccX1y/noVrC4Lm4xBK84ypPVAcWvoLJOpQQNTlaBKaC3w
-th4B2n00Rz3V++9jmnLf6BQIGikpqsP/N/TuN6RF2tEslBzz32JB8tAADiwGiBJx
-jX8CAwEAAaOBujCBtzAdBgNVHQ4EFgQUdX1iV7yBJlhnTUn4BBESYmM8PNwwHwYD
-VR0jBBgwFoAUdX1iV7yBJlhnTUn4BBESYmM8PNwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKZzLIV5sH84T7clJ4aR
+S+seFTCzZQdxDqMjsDNRnRRYk+5CTp+HJ6Kpy4W0Y5rgwVYqmAf+DNgJnApvT4kJ
+/H6nHWt0gpc9OYcz6zLDcrwNBVr1Aq/wvCs6mjChPtptJU6utmpi5hU5E2rTrV24
+07sJ/kz59XoTA5ip7ykn7EuU+/yRqba0hjlE0ykAT4i6SDeK+dGI1/wmH4z5WIRv
+vzViOIFUe7TS1/F7W2wrzoaRpuHU+tW7B8SXMFB4X1mpoSwfK9H7iHPdGX1Kfpm8
+STPd/Te0J78dlsaf1q9FtmcXvOEJpzk5idTCg3AGRJkrHnN8Waq7zSAMMW5XzZ56
+1dUCAwEAAaOBujCBtzAdBgNVHQ4EFgQUVXqaRH3aLa7N/W/zJ3Wwsxs4l8IwHwYD
+VR0jBBgwFoAUVXqaRH3aLa7N/W/zJ3Wwsxs4l8IwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAUhbOXFWqw3aAWmDuioX1n2TKbblmU3Ok
-kkep1Y61kLKpYmky4yz1KObTbNmUr4MRBDCVSOKeLb9nY5WXMpkot4c93JdBCHL3
-iWqUu/5izQj21guGYFvXTevfQHDZvcvgJLjuYlp/WNM9EVNjNKqvWWuGMKv7VUDM
-42UO1ja03NHbpLwcelHPin1BCuY6FslD5p5BMfNPgcEk6PvF24fIAfW4YO0qDvwx
-WSZj+2Amj1IMfBm3KRjJEuuAbKolRkGSGjrh356UH5IBkLCSLODdMYGiwK4FroXC
-7s5jLMg/QfkGi2ZWBedYfT/Q7QUl6h7QaSTw490K2C66/tkaujkrfQ==
+AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAGm7Ypz0gdNZgW0EmuLTSq2SDdoO4b2gU
+hw+DelL49WaefCeMcVgXCD4k36PY7UHBLSYMkySKPVJ9BSbiDvzaiH/0XqzY0Y7k
+hKDvmp3/mHVWI4MXyUqNRMWuMPWZWHedab/66yj04aIGV8ulm77QPQqqVgMSm86I
+keYo/FHiMvywgIhDdETkd9Nnzff2u1CLumZflcEFjPABqrNeTvop3B0jp5vrJ20h
+oS+P+V9fKAubFN0XwA90VNdmkV7I82F4vh1F+PdzqSpee95tsIbCIWH3LgDcuOWk
+idu1d71JhtCZgzmN2ncxu7CeynzVPP9BLi6BIRtA9p2n4XR339b+PQ==
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -278,3 +278,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem b/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
index 190fb56..78db71b 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a8:bc:a9:2c:1c:80:81:33:16:83:62:e9:f7:0a:
-                    0d:5a:8b:86:da:a8:45:2f:04:1c:18:c0:d6:e5:f7:
-                    33:f3:76:86:eb:a3:07:6b:83:e1:75:e5:da:6d:1c:
-                    ee:99:a1:d7:38:bb:29:9a:7d:8f:54:c6:d4:0e:88:
-                    dd:b7:59:b2:a8:45:c3:c8:82:42:ca:8c:e5:21:f6:
-                    94:b0:8f:59:41:64:0c:31:a2:93:f9:2a:38:fe:d8:
-                    f5:e1:2e:b6:6c:f8:51:3f:9b:85:53:48:4e:34:30:
-                    f1:cc:2b:c5:32:6d:ce:85:ed:69:d0:a3:53:3e:8c:
-                    f7:4e:b1:d7:a6:ea:18:08:c6:23:d2:9e:13:e0:a6:
-                    50:e7:ea:da:f8:a0:d0:0f:ef:54:9b:fe:8c:3f:a1:
-                    ea:c8:13:1b:84:f6:44:c1:a9:7a:69:ef:34:99:41:
-                    ec:a9:1c:b0:9b:39:ae:98:4c:fc:68:2d:ba:96:68:
-                    d5:b7:cf:2c:f0:2f:35:8a:0f:73:7c:8a:a0:e1:7a:
-                    0a:e4:3d:d0:05:e2:d9:d1:bd:30:d2:69:82:ba:31:
-                    b4:c7:9a:29:d5:aa:97:36:e5:2a:92:85:fa:a9:87:
-                    00:ef:5b:ec:db:5e:82:2b:78:dd:89:de:99:ff:d8:
-                    35:17:eb:bc:57:c1:ae:11:52:63:ef:23:54:09:18:
-                    f9:7f
+                    00:de:6f:00:3c:55:a6:0d:08:55:ef:d0:a4:d8:57:
+                    41:19:b0:78:3a:c4:48:f7:b0:4e:11:46:b1:5f:16:
+                    6a:33:5d:ae:d7:d3:80:78:2e:4e:63:9f:0b:ac:47:
+                    72:5b:c1:a8:b2:1c:99:2e:de:f9:f2:6e:10:73:64:
+                    f7:94:95:be:e7:46:37:fd:4b:d4:95:54:bb:dd:ba:
+                    99:9b:83:89:38:6e:43:22:6b:97:8b:4f:34:28:94:
+                    5e:0e:31:6b:0f:70:06:6e:80:aa:1d:a3:48:c0:ed:
+                    f8:6b:11:94:87:17:22:10:2e:fd:24:8c:b0:2d:34:
+                    d2:1d:32:8b:66:d7:65:34:10:e1:2a:39:70:7e:55:
+                    b0:ba:0c:13:a1:0c:56:2d:35:bf:67:69:4f:19:b6:
+                    0d:b1:a4:71:f5:74:22:d6:87:17:09:cc:be:8a:23:
+                    55:45:c8:d9:b6:1c:d9:f1:a4:51:7a:be:0d:a9:f6:
+                    f6:cc:43:85:a0:eb:8d:0d:68:12:f2:77:8c:96:31:
+                    12:c4:dd:68:0d:14:6a:80:ad:83:92:08:77:29:f9:
+                    1f:2f:37:84:2b:75:d9:c6:80:c6:ca:ba:61:f1:40:
+                    d0:d6:2c:3b:69:f2:94:1f:33:17:57:27:bb:fd:ac:
+                    f1:db:22:7e:da:18:ca:4a:13:54:3d:7c:a1:0b:a0:
+                    0a:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                27:5D:22:BE:A2:20:5F:DC:69:8D:8A:6F:5B:CC:EF:D1:2A:AE:57:5B
+                36:B3:FD:9C:3B:AB:7A:63:A3:05:4E:3C:FB:71:11:21:D3:1D:45:AC
             X509v3 Authority Key Identifier: 
-                keyid:9F:6B:C0:D8:24:51:E0:D7:89:F4:E0:74:B7:0D:D6:FF:8B:AF:58:04
+                keyid:67:DA:2F:45:54:93:91:B7:44:F5:7F:18:C4:4A:9D:AA:5D:A4:5A:56
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         1d:e0:a8:55:02:9d:d1:70:c6:ca:d2:82:75:35:ce:14:88:18:
-         65:5d:12:42:b2:80:8d:ae:c1:24:fe:e2:c8:ca:b0:51:d0:39:
-         24:e2:82:c1:96:bb:38:d1:54:dc:c0:51:dd:96:c0:d7:45:76:
-         cf:5c:37:fc:53:96:b0:c8:84:99:f9:4a:ad:03:98:1e:44:86:
-         81:36:e1:4b:3a:3d:bc:f0:b5:58:4d:83:3a:30:56:45:e0:89:
-         67:f6:61:cb:18:60:e9:53:42:a2:92:0b:dc:8f:6e:59:b2:9a:
-         bc:36:61:11:f2:90:17:72:5f:a8:e2:2f:43:22:e2:b0:7c:00:
-         69:64:e2:3f:69:15:32:56:1a:58:c3:b3:61:ec:37:a7:58:e3:
-         df:e2:e2:f0:04:5e:37:f5:07:7d:52:aa:21:32:35:d2:18:5a:
-         b8:17:ef:7a:cc:de:10:10:2b:ae:73:a7:d8:38:a5:32:58:65:
-         6c:9c:8e:e6:c9:93:e9:e0:54:bf:8b:01:cf:ee:a0:b6:dc:68:
-         26:af:fe:39:48:8b:aa:37:37:ca:9c:28:97:0a:60:f6:53:dd:
-         ff:81:34:c1:68:2f:05:84:86:9e:7e:89:cd:21:a5:66:85:63:
-         33:fb:1d:e6:70:88:56:f6:c2:34:60:0b:c3:f4:49:2a:c5:81:
-         82:72:da:1a
+         2c:c8:92:ca:af:b3:42:dd:4e:13:a4:71:2b:60:4c:61:a3:5d:
+         67:62:bf:4f:fe:ad:07:17:44:37:80:d7:f0:4f:be:ed:26:1c:
+         e2:30:53:cb:f1:d5:7c:63:3c:a5:f4:56:71:17:c4:8e:8c:52:
+         e1:27:76:e3:55:54:e5:40:50:16:78:8a:70:db:19:4d:ff:b5:
+         12:45:8c:9a:4f:15:3f:a8:3a:61:c5:d8:b1:f0:ca:ed:82:b2:
+         44:ce:a1:58:d3:87:b6:c0:0f:69:a8:3f:f1:f1:c5:ba:46:37:
+         fe:84:da:c3:b2:6e:1c:19:fb:b8:91:d2:c7:1f:54:b5:c8:a7:
+         1c:ad:44:18:67:6d:18:eb:41:22:be:40:4f:a9:13:37:c5:28:
+         80:dc:a0:43:cc:08:4b:e1:57:b4:b9:0b:f6:9f:97:62:55:d1:
+         24:ee:d3:22:00:11:65:46:0d:78:8e:8f:68:b7:8e:e5:74:12:
+         4b:e8:08:36:08:bc:5b:ec:4b:2b:72:d0:0f:2a:56:c5:b2:db:
+         1a:27:6e:0c:f3:4f:e7:36:72:47:b0:d9:f7:df:48:1a:1c:2c:
+         ae:3c:63:e6:c3:44:6c:5a:2e:24:11:72:9a:31:89:05:7d:f7:
+         a2:ab:f3:9e:f0:24:43:3c:ea:45:b1:2f:01:be:da:a5:7c:21:
+         35:9b:da:03
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCovKks
-HICBMxaDYun3Cg1ai4baqEUvBBwYwNbl9zPzdobrowdrg+F15dptHO6Zodc4uyma
-fY9UxtQOiN23WbKoRcPIgkLKjOUh9pSwj1lBZAwxopP5Kjj+2PXhLrZs+FE/m4VT
-SE40MPHMK8Uybc6F7WnQo1M+jPdOsdem6hgIxiPSnhPgplDn6tr4oNAP71Sb/ow/
-oerIExuE9kTBqXpp7zSZQeypHLCbOa6YTPxoLbqWaNW3zyzwLzWKD3N8iqDhegrk
-PdAF4tnRvTDSaYK6MbTHminVqpc25SqShfqphwDvW+zbXoIreN2J3pn/2DUX67xX
-wa4RUmPvI1QJGPl/AgMBAAGjgekwgeYwHQYDVR0OBBYEFCddIr6iIF/caY2Kb1vM
-79EqrldbMB8GA1UdIwQYMBaAFJ9rwNgkUeDXifTgdLcN1v+Lr1gEMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDebwA8
+VaYNCFXv0KTYV0EZsHg6xEj3sE4RRrFfFmozXa7X04B4Lk5jnwusR3JbwaiyHJku
+3vnybhBzZPeUlb7nRjf9S9SVVLvdupmbg4k4bkMia5eLTzQolF4OMWsPcAZugKod
+o0jA7fhrEZSHFyIQLv0kjLAtNNIdMotm12U0EOEqOXB+VbC6DBOhDFYtNb9naU8Z
+tg2xpHH1dCLWhxcJzL6KI1VFyNm2HNnxpFF6vg2p9vbMQ4Wg640NaBLyd4yWMRLE
+3WgNFGqArYOSCHcp+R8vN4QrddnGgMbKumHxQNDWLDtp8pQfMxdXJ7v9rPHbIn7a
+GMpKE1Q9fKELoAqpAgMBAAGjgekwgeYwHQYDVR0OBBYEFDaz/Zw7q3pjowVOPPtx
+ESHTHUWsMB8GA1UdIwQYMBaAFGfaL0VUk5G3RPV/GMRKnapdpFpWMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAHeCoVQKd0XDGytKCdTXO
-FIgYZV0SQrKAja7BJP7iyMqwUdA5JOKCwZa7ONFU3MBR3ZbA10V2z1w3/FOWsMiE
-mflKrQOYHkSGgTbhSzo9vPC1WE2DOjBWReCJZ/Zhyxhg6VNCopIL3I9uWbKavDZh
-EfKQF3JfqOIvQyLisHwAaWTiP2kVMlYaWMOzYew3p1jj3+Li8AReN/UHfVKqITI1
-0hhauBfveszeEBArrnOn2DilMlhlbJyO5smT6eBUv4sBz+6gttxoJq/+OUiLqjc3
-ypwolwpg9lPd/4E0wWgvBYSGnn6JzSGlZoVjM/sd5nCIVvbCNGALw/RJKsWBgnLa
-Gg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEALMiSyq+zQt1OE6RxK2BM
+YaNdZ2K/T/6tBxdEN4DX8E++7SYc4jBTy/HVfGM8pfRWcRfEjoxS4Sd241VU5UBQ
+FniKcNsZTf+1EkWMmk8VP6g6YcXYsfDK7YKyRM6hWNOHtsAPaag/8fHFukY3/oTa
+w7JuHBn7uJHSxx9UtcinHK1EGGdtGOtBIr5AT6kTN8UogNygQ8wIS+FXtLkL9p+X
+YlXRJO7TIgARZUYNeI6PaLeO5XQSS+gINgi8W+xLK3LQDypWxbLbGiduDPNP5zZy
+R7DZ999IGhwsrjxj5sNEbFouJBFymjGJBX33oqvznvAkQzzqRbEvAb7apXwhNZva
+Aw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ae:5d:2a:68:be:2b:83:82:45:26:41:fc:7d:0a:
-                    0a:91:4c:d4:b6:83:35:d5:ba:81:07:57:ce:9b:2c:
-                    28:b0:e9:34:e3:60:f3:93:71:b2:a1:a7:57:9a:a4:
-                    fb:5f:2f:22:c8:71:37:0a:22:de:b9:3d:d1:19:89:
-                    06:3f:cd:bd:50:8d:57:4b:86:ca:2e:2c:5a:57:dd:
-                    0d:2d:3b:83:31:d2:3a:ca:92:a1:a6:a5:79:3f:94:
-                    a6:b3:b6:d0:64:31:ad:3e:28:cf:9c:6d:da:f4:df:
-                    46:55:4b:89:ce:38:b1:dc:33:1d:05:56:ad:c0:75:
-                    c2:21:0e:29:f5:10:52:85:a9:dd:cd:b1:cb:b3:74:
-                    d7:d6:36:13:42:8b:d1:bc:71:8a:b9:65:64:b9:b4:
-                    84:b7:49:6d:f7:95:f5:48:d9:0c:5f:84:b7:84:ab:
-                    4c:4c:78:ed:b6:70:7b:f6:0c:3d:74:00:4a:e7:68:
-                    fe:c2:00:f9:2e:dc:10:e7:4e:6e:87:6f:db:c7:cb:
-                    06:53:2a:44:53:2f:84:f2:d0:2d:21:fc:60:00:69:
-                    ba:fd:52:a0:86:84:c4:7e:88:7f:35:ab:41:45:38:
-                    a7:c2:3f:d2:0f:20:26:3e:a4:8c:35:10:d3:93:52:
-                    70:18:44:25:ef:89:ea:f3:10:a1:ce:33:69:88:11:
-                    d1:09
+                    00:e7:37:c2:8d:0b:b4:b3:09:f1:4f:f2:1f:46:46:
+                    6e:41:af:62:51:c9:22:5f:a8:96:e0:13:66:83:17:
+                    a3:ec:f0:5a:48:91:66:78:6f:c5:cd:42:d2:c7:ca:
+                    35:df:41:ec:d4:1b:4a:1a:94:d8:c8:e2:e6:8f:c8:
+                    09:9f:92:67:40:c2:93:b3:dd:85:b2:83:c6:0f:07:
+                    ef:54:09:f1:fc:16:a7:7a:1a:dc:57:f5:4f:bb:78:
+                    bd:e8:fc:cb:9c:ae:aa:d2:f0:e2:93:52:72:c6:f4:
+                    3a:1b:b6:21:21:da:0f:8e:39:47:03:34:4b:b1:ee:
+                    0c:bf:f0:22:b6:b1:07:c6:f3:7e:e8:27:57:3f:e5:
+                    a5:fb:f8:62:6f:d4:42:ba:15:94:6c:df:5a:cc:fb:
+                    9f:6b:3c:df:de:7d:dc:44:41:94:71:b4:43:ad:85:
+                    5a:3e:a6:8f:0a:d8:c4:8d:a3:5b:20:99:fc:f6:e4:
+                    10:0f:52:8a:22:82:0f:62:a8:2c:33:ce:1f:50:34:
+                    5b:f1:97:00:9d:33:a3:85:f7:b0:50:aa:1d:f0:d2:
+                    b4:c6:6b:10:1d:5e:be:9b:cc:65:bc:ad:46:88:ba:
+                    49:65:a2:62:21:53:39:22:76:bd:af:e6:18:f3:9a:
+                    56:14:ff:27:a9:7e:21:5e:a2:a2:21:9b:2e:e2:8c:
+                    e1:cb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9F:6B:C0:D8:24:51:E0:D7:89:F4:E0:74:B7:0D:D6:FF:8B:AF:58:04
+                67:DA:2F:45:54:93:91:B7:44:F5:7F:18:C4:4A:9D:AA:5D:A4:5A:56
             X509v3 Authority Key Identifier: 
-                keyid:A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                keyid:56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         69:1c:29:c5:7c:e3:18:58:86:0c:88:41:20:23:9d:75:07:22:
-         4b:89:1d:6a:08:15:cf:85:c2:8d:f4:17:37:9e:a0:7e:67:b9:
-         0e:95:80:b1:a8:8f:06:2d:5e:9d:67:5c:d3:a7:47:74:d3:f7:
-         00:fb:84:75:99:d4:b9:07:ba:3b:63:2c:d9:57:04:48:35:f4:
-         20:91:39:55:ad:86:27:4e:ba:22:17:85:9a:dd:e4:4f:dd:dd:
-         d4:d0:0a:5b:43:6c:2e:d1:4f:f8:50:32:64:a2:15:46:bb:82:
-         ef:d1:ff:17:2a:dd:13:50:81:7e:1c:5b:6e:50:7b:8c:72:03:
-         eb:58:9a:fd:e8:e6:f1:d7:c5:59:ff:18:2a:95:64:c0:53:84:
-         0f:c1:1c:66:73:24:29:81:ae:0d:b7:b1:fc:44:2d:fb:02:89:
-         70:97:c0:ed:91:6f:9b:57:7b:40:38:29:8c:fa:87:52:f8:db:
-         8a:3b:1c:a2:a3:c1:08:8b:cf:9a:6e:dc:a8:b3:96:5e:31:05:
-         af:5c:1c:21:8e:d3:fe:18:17:af:a9:77:92:6f:46:93:36:d2:
-         e1:4f:a2:d9:e4:5d:bf:61:ad:db:c4:87:61:79:c3:bd:c3:e1:
-         5b:d7:76:03:e3:fe:4a:75:a0:84:2b:ea:82:c1:d5:2c:6f:e7:
-         55:46:1f:36
+         06:d9:0a:6c:b9:69:0b:d0:77:a3:ce:81:38:fd:46:0a:fd:4c:
+         0d:ca:a5:85:13:2c:e2:c4:97:90:3d:7a:57:61:cf:bb:f2:f3:
+         ca:d9:a9:ba:c7:dd:b7:0b:89:a9:c5:8b:59:3a:a6:33:e6:de:
+         90:53:6b:80:a9:a7:4a:99:1f:37:d2:55:40:40:1b:15:0a:f4:
+         7a:24:14:6c:8e:20:5f:b5:f5:eb:7b:a4:4c:c9:71:8f:53:e2:
+         9c:52:da:35:91:0d:6f:f4:a1:54:45:3a:34:a8:cc:a2:e0:a0:
+         45:59:ed:d8:ae:4b:8a:73:4f:1a:6a:17:2f:3b:70:0b:1e:86:
+         91:46:f7:80:e6:d2:4b:94:9c:f2:b1:62:dd:ad:ac:11:1b:60:
+         b4:4e:d3:ff:9a:c0:73:88:27:ee:7b:68:ab:37:c2:8a:af:71:
+         89:82:32:c1:ec:82:15:e3:d3:28:1a:41:66:c7:74:aa:ac:41:
+         22:34:2c:eb:5c:8e:82:38:b3:19:30:a3:1c:9e:4a:32:14:1b:
+         f3:08:c9:e0:7b:6f:12:49:42:87:53:50:aa:5e:4d:72:68:4c:
+         c9:96:b0:0b:d8:88:a0:ac:28:a4:0d:b7:25:93:b0:b8:fa:96:
+         b6:af:bb:76:3c:0a:6b:a4:b5:05:d9:2b:8e:94:a1:61:9f:be:
+         d9:56:dd:88
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArl0qaL4r
-g4JFJkH8fQoKkUzUtoM11bqBB1fOmywosOk042Dzk3GyoadXmqT7Xy8iyHE3CiLe
-uT3RGYkGP829UI1XS4bKLixaV90NLTuDMdI6ypKhpqV5P5Sms7bQZDGtPijPnG3a
-9N9GVUuJzjix3DMdBVatwHXCIQ4p9RBShandzbHLs3TX1jYTQovRvHGKuWVkubSE
-t0lt95X1SNkMX4S3hKtMTHjttnB79gw9dABK52j+wgD5LtwQ505uh2/bx8sGUypE
-Uy+E8tAtIfxgAGm6/VKghoTEfoh/NatBRTinwj/SDyAmPqSMNRDTk1JwGEQl74nq
-8xChzjNpiBHRCQIDAQABo4HLMIHIMB0GA1UdDgQWBBSfa8DYJFHg14n04HS3Ddb/
-i69YBDAfBgNVHSMEGDAWgBSoDD2tgiap669hzD3gaB2C3tvR/TA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5zfCjQu0
+swnxT/IfRkZuQa9iUckiX6iW4BNmgxej7PBaSJFmeG/FzULSx8o130Hs1BtKGpTY
+yOLmj8gJn5JnQMKTs92FsoPGDwfvVAnx/BanehrcV/VPu3i96PzLnK6q0vDik1Jy
+xvQ6G7YhIdoPjjlHAzRLse4Mv/AitrEHxvN+6CdXP+Wl+/hib9RCuhWUbN9azPuf
+azzf3n3cREGUcbRDrYVaPqaPCtjEjaNbIJn89uQQD1KKIoIPYqgsM84fUDRb8ZcA
+nTOjhfewUKod8NK0xmsQHV6+m8xlvK1GiLpJZaJiIVM5Ina9r+YY85pWFP8nqX4h
+XqKiIZsu4ozhywIDAQABo4HLMIHIMB0GA1UdDgQWBBRn2i9FVJORt0T1fxjESp2q
+XaRaVjAfBgNVHSMEGDAWgBRW5+J2EiaLpm966eIz+c6bVnPy8jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AGkcKcV84xhYhgyIQSAjnXUHIkuJHWoIFc+Fwo30FzeeoH5nuQ6VgLGojwYtXp1n
-XNOnR3TT9wD7hHWZ1LkHujtjLNlXBEg19CCROVWthidOuiIXhZrd5E/d3dTQCltD
-bC7RT/hQMmSiFUa7gu/R/xcq3RNQgX4cW25Qe4xyA+tYmv3o5vHXxVn/GCqVZMBT
-hA/BHGZzJCmBrg23sfxELfsCiXCXwO2Rb5tXe0A4KYz6h1L424o7HKKjwQiLz5pu
-3Kizll4xBa9cHCGO0/4YF6+pd5JvRpM20uFPotnkXb9hrdvEh2F5w73D4VvXdgPj
-/kp1oIQr6oLB1Sxv51VGHzY=
+AAbZCmy5aQvQd6POgTj9Rgr9TA3KpYUTLOLEl5A9eldhz7vy88rZqbrH3bcLianF
+i1k6pjPm3pBTa4Cpp0qZHzfSVUBAGxUK9HokFGyOIF+19et7pEzJcY9T4pxS2jWR
+DW/0oVRFOjSozKLgoEVZ7diuS4pzTxpqFy87cAsehpFG94Dm0kuUnPKxYt2trBEb
+YLRO0/+awHOIJ+57aKs3woqvcYmCMsHsghXj0ygaQWbHdKqsQSI0LOtcjoI4sxkw
+oxyeSjIUG/MIyeB7bxJJQodTUKpeTXJoTMmWsAvYiKCsKKQNtyWTsLj6lravu3Y8
+CmuktQXZK46UoWGfvtlW3Yg=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b1:3a:fd:fa:bf:99:17:55:07:e6:61:ce:aa:d9:
-                    34:6c:24:96:c6:72:78:40:b4:98:21:ba:82:d4:3c:
-                    63:a2:17:75:45:d5:92:ee:63:e5:e1:75:16:cf:69:
-                    fb:92:ee:80:a1:61:60:c4:bf:d1:a2:d8:e2:45:6b:
-                    6b:0a:a0:2b:ee:c7:d4:9e:db:c7:7e:30:93:17:d8:
-                    66:0d:c3:9e:da:d9:98:97:a2:bd:1a:3a:6e:cf:14:
-                    d4:50:c6:30:60:09:9c:5c:4c:65:dd:23:5d:90:87:
-                    80:06:16:5d:8b:0a:af:37:9b:bc:e9:83:61:dd:3e:
-                    50:07:42:52:17:bc:68:de:20:d2:98:ee:5d:e5:24:
-                    4d:7a:9d:50:e7:6a:81:2c:43:3f:0a:57:c1:a7:03:
-                    a8:94:2e:e7:4f:0c:29:8e:cf:a2:13:06:e9:6f:e0:
-                    22:ba:39:a9:d6:0f:0a:55:13:38:9b:67:5d:fa:59:
-                    b5:6a:8c:8a:af:9e:73:b4:67:47:56:7f:1f:f6:96:
-                    81:7f:b3:7f:9c:18:1e:3c:c6:76:3a:2d:ed:b0:ea:
-                    81:60:0a:a1:d4:e3:70:c0:ef:62:58:4e:7e:43:c3:
-                    3e:8e:c4:dd:13:64:57:ee:14:df:24:93:73:27:c4:
-                    df:13:9a:87:67:b5:ea:e0:7e:0c:dd:1b:b2:88:1c:
-                    a5:9d
+                    00:ba:98:6c:5a:c8:0e:52:5f:2e:60:52:d5:05:66:
+                    4f:2a:a2:52:b1:28:96:8e:08:35:90:28:7a:11:33:
+                    ec:2b:93:81:d6:93:ec:18:d4:35:17:8e:8c:e6:74:
+                    1c:fb:92:53:f4:cb:03:cf:1f:eb:3d:c7:2e:8c:26:
+                    30:63:57:7a:f6:a6:34:60:35:72:4f:6c:0f:bd:9f:
+                    bd:23:7b:a1:ed:ac:01:52:c2:27:46:29:3c:e9:9c:
+                    33:96:1d:71:77:43:22:cc:0d:05:cc:1c:c3:04:b4:
+                    5b:a1:dc:e4:b0:b1:88:18:35:17:19:a6:bc:6f:b5:
+                    3b:93:34:f6:de:c0:b9:ef:f3:cd:45:11:48:de:31:
+                    6e:e1:c4:d3:8a:3e:65:cf:78:af:83:ed:70:4b:bd:
+                    bb:1d:3a:d9:99:38:55:81:8f:01:0c:d3:d4:a8:3b:
+                    e7:c9:1e:64:a9:a1:13:a0:6f:19:6e:69:54:25:2c:
+                    25:bd:6e:97:a1:21:34:d9:ec:33:b5:89:84:35:25:
+                    5b:ed:08:b9:47:f6:ec:a2:1c:8e:37:5f:1d:d4:31:
+                    9e:93:94:db:f8:57:f2:40:2c:45:46:2c:c9:7b:2c:
+                    28:b5:79:a7:62:00:68:2a:50:50:15:69:65:07:53:
+                    b5:ba:cb:43:8d:2a:09:33:fb:8f:4a:93:9f:cd:a6:
+                    ee:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
             X509v3 Authority Key Identifier: 
-                keyid:A8:0C:3D:AD:82:26:A9:EB:AF:61:CC:3D:E0:68:1D:82:DE:DB:D1:FD
+                keyid:56:E7:E2:76:12:26:8B:A6:6F:7A:E9:E2:33:F9:CE:9B:56:73:F2:F2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         45:91:23:ab:2f:b8:a2:2e:24:63:4b:bb:54:17:29:3d:86:9c:
-         7d:f8:a3:9d:88:4c:9e:89:bf:e9:1a:bc:35:73:27:e1:9d:3e:
-         e4:fc:3c:87:71:21:be:a5:bd:e7:e1:dd:44:b1:67:36:b6:1f:
-         0a:7c:a1:30:8a:57:23:5f:61:88:18:48:a4:15:0e:58:81:27:
-         a3:9a:42:f4:47:d7:f1:0c:c6:84:dd:03:8f:63:49:07:01:38:
-         6f:88:60:33:4d:45:73:9f:02:78:a2:1d:e1:a7:75:d7:18:7c:
-         b9:89:e5:ff:30:e6:45:5f:80:5f:f9:88:b5:89:bd:8f:d4:6c:
-         7d:af:c2:c7:4e:a1:83:74:08:cb:4d:e9:c1:e6:c6:c4:de:55:
-         10:19:fa:6a:04:89:0a:d8:54:cf:5d:58:f0:17:63:cb:db:0a:
-         18:6b:75:2a:36:97:3f:f9:ed:3c:c9:2d:8b:40:dd:63:3b:82:
-         f6:fa:0f:5a:31:6e:f9:4a:b8:18:ca:1a:0d:77:6b:b6:01:8e:
-         a8:4b:15:be:29:b6:9a:db:15:2a:8a:66:49:29:74:c2:68:c9:
-         80:0b:ce:de:aa:4d:54:d2:43:c2:7f:6b:ed:80:5a:0a:c7:bf:
-         d3:95:ed:d1:c1:e8:d0:f2:1f:dc:a7:22:e6:2d:52:b0:fe:d8:
-         b7:3d:bc:d1
+         4d:c4:c6:47:69:78:06:88:e5:5e:ae:c6:bc:b1:f5:7f:49:ac:
+         e6:51:bc:dc:dd:7b:28:fc:ee:b1:ca:6d:bd:ad:fb:e8:76:53:
+         5a:7a:2d:4c:76:b5:89:4b:69:cc:f6:2d:1b:45:f5:f8:04:cd:
+         e8:34:8b:f3:3b:cb:8b:04:9e:a7:8f:e2:85:6d:20:3c:0a:8e:
+         d9:d1:45:84:a7:06:f6:e9:0e:e0:fa:5d:28:89:84:6a:b2:1b:
+         08:55:5f:6c:0d:d8:47:9a:cb:cc:fa:e9:b7:fe:15:fa:6c:ae:
+         ab:7b:4a:c6:b2:fc:f3:96:ac:36:6c:e9:4a:ef:ad:27:75:9a:
+         b9:67:7c:cd:d5:83:f3:ab:2d:4d:66:2d:c5:5e:a1:01:42:2f:
+         a2:ff:5b:2f:0e:ec:e5:74:cb:15:0d:c4:e4:15:65:31:41:a3:
+         f1:11:a1:18:2b:af:1e:d4:09:66:f3:d7:f6:fc:a7:6b:cc:8f:
+         f7:d7:f7:7f:5e:19:50:32:d7:f9:0d:69:60:bd:b9:f0:9b:ed:
+         f9:b8:81:1d:70:44:0a:49:87:b8:c2:93:46:4f:13:c1:e8:a7:
+         50:f9:dc:f3:39:4f:cb:4a:85:92:ca:9b:2e:e1:b7:4c:ed:18:
+         9a:9a:cd:51:12:47:dd:b9:ba:f1:36:7e:b5:34:1e:c7:4e:36:
+         45:e2:ca:99
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALE6/fq/mRdVB+ZhzqrZ
-NGwklsZyeEC0mCG6gtQ8Y6IXdUXVku5j5eF1Fs9p+5LugKFhYMS/0aLY4kVrawqg
-K+7H1J7bx34wkxfYZg3DntrZmJeivRo6bs8U1FDGMGAJnFxMZd0jXZCHgAYWXYsK
-rzebvOmDYd0+UAdCUhe8aN4g0pjuXeUkTXqdUOdqgSxDPwpXwacDqJQu508MKY7P
-ohMG6W/gIro5qdYPClUTOJtnXfpZtWqMiq+ec7RnR1Z/H/aWgX+zf5wYHjzGdjot
-7bDqgWAKodTjcMDvYlhOfkPDPo7E3RNkV+4U3ySTcyfE3xOah2e16uB+DN0bsogc
-pZ0CAwEAAaOByzCByDAdBgNVHQ4EFgQUqAw9rYImqeuvYcw94Ggdgt7b0f0wHwYD
-VR0jBBgwFoAUqAw9rYImqeuvYcw94Ggdgt7b0f0wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqYbFrIDlJfLmBS1QVm
+TyqiUrEolo4INZAoehEz7CuTgdaT7BjUNReOjOZ0HPuSU/TLA88f6z3HLowmMGNX
+evamNGA1ck9sD72fvSN7oe2sAVLCJ0YpPOmcM5YdcXdDIswNBcwcwwS0W6Hc5LCx
+iBg1FxmmvG+1O5M09t7Aue/zzUURSN4xbuHE04o+Zc94r4PtcEu9ux062Zk4VYGP
+AQzT1Kg758keZKmhE6BvGW5pVCUsJb1ul6EhNNnsM7WJhDUlW+0IuUf27KIcjjdf
+HdQxnpOU2/hX8kAsRUYsyXssKLV5p2IAaCpQUBVpZQdTtbrLQ40qCTP7j0qTn82m
+7qMCAwEAAaOByzCByDAdBgNVHQ4EFgQUVufidhImi6ZveuniM/nOm1Zz8vIwHwYD
+VR0jBBgwFoAUVufidhImi6ZveuniM/nOm1Zz8vIwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBFkSOrL7ii
-LiRjS7tUFyk9hpx9+KOdiEyeib/pGrw1cyfhnT7k/DyHcSG+pb3n4d1EsWc2th8K
-fKEwilcjX2GIGEikFQ5YgSejmkL0R9fxDMaE3QOPY0kHAThviGAzTUVznwJ4oh3h
-p3XXGHy5ieX/MOZFX4Bf+Yi1ib2P1Gx9r8LHTqGDdAjLTenB5sbE3lUQGfpqBIkK
-2FTPXVjwF2PL2woYa3UqNpc/+e08yS2LQN1jO4L2+g9aMW75SrgYyhoNd2u2AY6o
-SxW+Kbaa2xUqimZJKXTCaMmAC87eqk1U0kPCf2vtgFoKx7/Tle3RwejQ8h/cpyLm
-LVKw/ti3PbzR
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBNxMZHaXgG
+iOVersa8sfV/SazmUbzc3Xso/O6xym29rfvodlNaei1MdrWJS2nM9i0bRfX4BM3o
+NIvzO8uLBJ6nj+KFbSA8Co7Z0UWEpwb26Q7g+l0oiYRqshsIVV9sDdhHmsvM+um3
+/hX6bK6re0rGsvzzlqw2bOlK760ndZq5Z3zN1YPzqy1NZi3FXqEBQi+i/1svDuzl
+dMsVDcTkFWUxQaPxEaEYK68e1Alm89f2/KdrzI/31/d/XhlQMtf5DWlgvbnwm+35
+uIEdcEQKSYe4wpNGTxPB6KdQ+dzzOU/LSoWSypsu4bdM7Riams1REkfdubrxNn61
+NB7HTjZF4sqZ
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem b/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
index 621f1da..baf7b58 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c0:b3:a7:c8:34:e7:e2:df:55:43:80:00:33:96:
-                    78:2c:3a:ac:7e:79:5d:86:9f:df:7e:9b:7a:30:d0:
-                    5b:30:2b:26:cc:06:e7:1f:13:6c:80:36:59:ec:1c:
-                    4b:c9:70:c2:79:14:f4:83:2f:cf:39:a2:9d:96:5c:
-                    f2:91:90:ae:8f:f6:63:f6:cc:fb:1b:eb:fe:53:9b:
-                    b6:27:8b:52:bb:bb:94:1b:8b:e5:76:cc:5a:4d:d7:
-                    9c:96:05:62:f4:c8:bf:87:cf:a7:6e:55:fd:b5:ab:
-                    28:ae:08:c3:cd:5f:72:77:e3:d8:8d:de:1b:cb:17:
-                    bb:4c:b3:3d:6d:f2:84:22:5c:fb:84:31:46:68:3e:
-                    bd:b5:83:81:24:01:80:7d:eb:76:8e:1f:7b:8f:e7:
-                    77:cb:8f:ca:69:77:5a:7a:56:f3:1c:3c:16:bf:00:
-                    2b:9f:2d:f5:3a:59:e0:f5:84:91:d3:7a:3e:90:39:
-                    44:5a:65:36:ab:5f:25:5d:9b:57:1e:13:91:97:88:
-                    cb:36:39:d3:10:ee:2c:54:4d:6c:d7:22:92:37:0b:
-                    04:05:8f:1d:c3:58:b4:87:7c:db:17:2b:fc:db:00:
-                    eb:0f:8c:75:96:e5:12:96:37:fe:b2:d5:68:1c:67:
-                    fe:fb:60:c2:30:85:ae:0d:9b:62:50:6f:32:ae:fc:
-                    85:77
+                    00:bb:96:f1:5b:2b:5a:7e:e7:6f:38:53:81:52:60:
+                    7f:76:fc:e3:03:d7:43:ea:3a:28:23:5b:03:21:6a:
+                    6c:23:88:96:83:4a:e7:d0:6e:21:0d:29:28:99:a4:
+                    5a:5c:75:5b:0b:82:ff:84:e1:8e:82:01:70:0a:16:
+                    5d:dd:b7:2f:a8:44:66:8f:c5:18:0b:f4:5c:ac:0e:
+                    55:dc:68:c3:16:9e:ea:86:b3:29:f9:5f:39:e8:c5:
+                    13:51:f6:89:ee:bb:cb:81:12:e4:fa:cf:69:1b:cb:
+                    46:42:f5:ef:e3:9f:c5:06:8b:30:f0:2b:6d:b0:00:
+                    ce:d9:01:a2:79:39:ee:14:bc:38:b1:3d:9d:7c:b7:
+                    5c:dc:6d:ae:af:6a:dd:19:5f:87:01:3a:46:db:35:
+                    ef:f2:72:1b:82:25:3d:07:d4:eb:03:75:ff:d3:9f:
+                    f5:8f:92:6b:86:d2:50:e1:3c:0b:78:da:2f:35:ed:
+                    ee:2e:8f:bb:cb:b2:36:83:cf:13:2c:11:e5:f2:84:
+                    9c:c1:6d:a7:8b:4c:2b:18:09:7e:48:3a:41:36:37:
+                    f6:80:e5:99:4d:ac:13:97:be:ff:99:89:84:45:fd:
+                    2f:f7:db:65:40:0c:ac:8d:26:2f:dc:13:13:01:ad:
+                    41:0c:87:eb:f7:9d:bd:f6:2a:4b:a9:34:27:f0:63:
+                    0d:65
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FC:25:45:D2:F9:2D:71:1C:EA:7B:79:2C:C5:C7:37:5F:9E:2A:5F:5D
+                3B:B6:93:A0:97:08:69:A7:DA:9B:4B:98:F9:73:34:EF:E6:F0:77:7F
             X509v3 Authority Key Identifier: 
-                keyid:4C:33:3C:86:48:60:C6:50:02:47:AF:DE:60:2F:A0:5C:96:EE:70:7B
+                keyid:CE:1B:E0:BB:3C:38:CE:25:A4:97:48:9E:FA:83:B5:97:B9:83:9C:AF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         46:d0:27:3e:e6:49:d1:48:c4:0e:d3:0e:d0:3e:be:44:7f:0e:
-         a0:38:92:84:c4:ed:60:65:1c:26:3f:12:dd:d8:e3:49:c6:c8:
-         42:86:67:95:6c:61:e7:61:8c:da:0a:db:90:d0:6f:e7:9f:05:
-         38:a5:4a:4e:c3:40:f8:2b:ff:67:ad:9f:70:27:10:8d:68:f2:
-         ee:78:d5:a7:83:2f:e3:67:b3:47:8c:39:c9:29:97:f0:77:b7:
-         fe:7f:c7:6b:aa:6d:4c:83:39:e3:dc:bd:c3:18:e3:d8:d3:50:
-         8a:97:d3:ee:59:3a:62:20:5b:e7:99:77:e6:d1:d2:d3:d0:d5:
-         04:7d:86:8e:26:30:05:d1:0e:0f:d6:d2:1e:49:42:67:61:81:
-         3d:10:75:d6:ba:c4:07:bb:e7:43:c8:a6:f7:56:e3:2b:d4:35:
-         d1:56:94:5c:0b:b6:25:02:d7:cd:74:e7:4d:1d:02:d3:43:ab:
-         dd:50:9f:c4:cf:15:4c:77:87:48:1e:57:3f:3d:7e:7e:67:9b:
-         ae:2f:79:ea:16:a9:cd:c6:76:cb:3c:75:75:a7:78:22:af:a9:
-         b4:83:d3:b2:72:e8:43:cc:4a:8d:ee:b4:5a:ac:b2:30:96:52:
-         91:26:4b:17:29:4e:53:b4:58:df:f9:1d:53:2c:66:3d:c5:d7:
-         11:99:b6:f5
+         39:5d:5e:53:44:d5:b1:f8:cb:10:f4:0c:d4:47:d3:57:e1:2a:
+         55:b7:30:c2:41:36:b8:18:e4:df:6c:d2:3e:84:ad:a1:a4:dd:
+         a3:3e:3c:9d:8c:e7:79:4b:9e:87:4c:f4:fe:42:69:40:b1:1b:
+         64:ee:a2:fa:6d:ad:b3:b1:09:1a:7f:2a:74:f0:be:1a:f7:a8:
+         46:5b:c7:26:e0:a6:7e:1e:42:cf:26:7b:39:ca:cc:c4:38:58:
+         46:03:48:77:ea:93:23:1f:6b:24:88:f6:d0:a6:d4:eb:2c:e5:
+         48:26:49:69:84:0f:84:56:12:75:ef:ec:fd:81:f4:d4:bf:51:
+         da:ab:3f:77:d8:03:f4:36:41:7e:59:39:81:45:2f:22:8a:fa:
+         18:d4:e4:22:4c:6a:73:b3:5f:a1:e7:17:82:1c:1a:30:0f:e8:
+         2f:b5:e2:61:62:1a:cb:5c:1b:c5:2c:71:13:c4:18:c0:c6:42:
+         6e:26:50:80:b2:67:f0:6e:b4:23:ae:73:c8:83:ab:41:e2:eb:
+         2d:e5:ad:50:5c:38:37:3f:b9:3e:1d:5e:c4:b6:75:79:8c:2a:
+         8d:a0:02:b1:fc:76:cb:70:ff:46:b2:8f:b0:66:b6:9b:b6:e6:
+         ff:ad:fa:0b:d1:f3:4b:98:ed:ee:88:2a:0c:e6:62:0b:15:37:
+         9d:d3:01:08
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAs6fI
-NOfi31VDgAAzlngsOqx+eV2Gn99+m3ow0FswKybMBucfE2yANlnsHEvJcMJ5FPSD
-L885op2WXPKRkK6P9mP2zPsb6/5Tm7Yni1K7u5Qbi+V2zFpN15yWBWL0yL+Hz6du
-Vf21qyiuCMPNX3J349iN3hvLF7tMsz1t8oQiXPuEMUZoPr21g4EkAYB963aOH3uP
-53fLj8ppd1p6VvMcPBa/ACufLfU6WeD1hJHTej6QOURaZTarXyVdm1ceE5GXiMs2
-OdMQ7ixUTWzXIpI3CwQFjx3DWLSHfNsXK/zbAOsPjHWW5RKWN/6y1WgcZ/77YMIw
-ha4Nm2JQbzKu/IV3AgMBAAGjgekwgeYwHQYDVR0OBBYEFPwlRdL5LXEc6nt5LMXH
-N1+eKl9dMB8GA1UdIwQYMBaAFEwzPIZIYMZQAkev3mAvoFyW7nB7MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7lvFb
+K1p+5284U4FSYH92/OMD10PqOigjWwMhamwjiJaDSufQbiENKSiZpFpcdVsLgv+E
+4Y6CAXAKFl3dty+oRGaPxRgL9FysDlXcaMMWnuqGsyn5XznoxRNR9onuu8uBEuT6
+z2kby0ZC9e/jn8UGizDwK22wAM7ZAaJ5Oe4UvDixPZ18t1zcba6vat0ZX4cBOkbb
+Ne/ychuCJT0H1OsDdf/Tn/WPkmuG0lDhPAt42i817e4uj7vLsjaDzxMsEeXyhJzB
+baeLTCsYCX5IOkE2N/aA5ZlNrBOXvv+ZiYRF/S/322VADKyNJi/cExMBrUEMh+v3
+nb32KkupNCfwYw1lAgMBAAGjgekwgeYwHQYDVR0OBBYEFDu2k6CXCGmn2ptLmPlz
+NO/m8Hd/MB8GA1UdIwQYMBaAFM4b4Ls8OM4lpJdInvqDtZe5g5yvMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARtAnPuZJ0UjEDtMO0D6+
-RH8OoDiShMTtYGUcJj8S3djjScbIQoZnlWxh52GM2grbkNBv558FOKVKTsNA+Cv/
-Z62fcCcQjWjy7njVp4Mv42ezR4w5ySmX8He3/n/Ha6ptTIM549y9wxjj2NNQipfT
-7lk6YiBb55l35tHS09DVBH2GjiYwBdEOD9bSHklCZ2GBPRB11rrEB7vnQ8im91bj
-K9Q10VaUXAu2JQLXzXTnTR0C00Or3VCfxM8VTHeHSB5XPz1+fmebri956hapzcZ2
-yzx1dad4Iq+ptIPTsnLoQ8xKje60WqyyMJZSkSZLFylOU7RY3/kdUyxmPcXXEZm2
-9Q==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOV1eU0TVsfjLEPQM1EfT
+V+EqVbcwwkE2uBjk32zSPoStoaTdoz48nYzneUueh0z0/kJpQLEbZO6i+m2ts7EJ
+Gn8qdPC+GveoRlvHJuCmfh5CzyZ7OcrMxDhYRgNId+qTIx9rJIj20KbU6yzlSCZJ
+aYQPhFYSde/s/YH01L9R2qs/d9gD9DZBflk5gUUvIor6GNTkIkxqc7NfoecXghwa
+MA/oL7XiYWIay1wbxSxxE8QYwMZCbiZQgLJn8G60I65zyIOrQeLrLeWtUFw4Nz+5
+Ph1exLZ1eYwqjaACsfx2y3D/RrKPsGa2m7bm/636C9HzS5jt7ogqDOZiCxU3ndMB
+CA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ae:f8:c2:3a:71:85:a2:bd:ca:2c:30:b7:22:3a:
-                    f3:c9:24:7e:74:86:98:af:cd:13:0a:c1:4c:52:56:
-                    f6:03:19:af:7d:67:73:2e:e2:99:e4:3b:f7:7a:7c:
-                    dc:8d:83:61:36:c4:89:bc:14:aa:11:8d:e7:fe:3d:
-                    61:e5:1a:78:88:9b:af:63:05:30:78:f8:1e:f5:92:
-                    e5:2d:02:d4:b4:cb:a4:44:a4:cc:1b:38:52:fb:55:
-                    4a:b9:37:d4:bb:d0:13:20:69:cb:1f:34:4c:d0:ca:
-                    32:04:23:f3:52:1f:39:e8:90:a3:3d:68:f5:a9:e3:
-                    fc:e3:f1:e2:c3:47:55:68:ab:7e:90:77:87:90:00:
-                    e9:30:05:ea:30:07:6d:66:d6:c8:98:bd:8b:81:18:
-                    c6:c5:45:26:30:ce:c8:61:6a:dc:70:7a:23:8a:4d:
-                    b8:ca:94:68:a7:48:ba:d6:fb:10:89:a9:9d:5e:1c:
-                    43:10:b5:de:33:68:a3:2c:91:2b:70:da:be:bd:1e:
-                    b2:30:2e:b9:f7:57:fc:d9:d1:4a:92:78:34:93:df:
-                    89:6a:85:1c:df:23:f3:30:fb:7d:9f:7b:b3:cc:9d:
-                    85:98:f8:64:7a:34:ba:7a:51:80:01:eb:91:77:7f:
-                    77:f6:65:86:9e:51:5e:4e:20:6f:c9:ed:3c:50:1c:
-                    cd:8f
+                    00:d2:ac:b0:9d:ea:a3:98:bd:31:99:4a:5c:52:d4:
+                    e6:36:79:ae:03:e3:6c:f2:f9:05:51:dd:3e:38:d5:
+                    3c:02:e8:ea:74:66:62:c7:63:9f:ce:91:ef:c3:0b:
+                    b9:08:ce:cc:cd:86:26:83:f0:c7:d2:1a:6c:21:8c:
+                    68:f3:2c:f7:28:e6:20:e7:7e:78:1a:18:67:40:70:
+                    f5:eb:ce:39:52:2d:35:75:00:a6:cc:13:24:47:58:
+                    9b:59:7c:ec:17:b8:e4:8b:94:94:06:00:0f:16:c9:
+                    14:b4:95:86:67:2e:e2:d7:16:86:81:2d:a3:4d:66:
+                    60:81:cc:83:d8:6a:ca:36:9e:7b:0c:06:ab:01:a9:
+                    08:99:ee:a1:ba:c3:fa:0d:4d:dd:c6:1a:59:8b:93:
+                    cc:16:3e:07:62:99:3f:14:e5:04:10:c3:ec:7e:03:
+                    5d:6e:a2:aa:c2:8c:13:ec:7b:18:34:2d:b9:46:a7:
+                    00:24:67:3e:ff:46:f9:e9:a8:6a:00:db:8d:af:02:
+                    0d:cd:1d:00:53:81:d4:d8:b0:d3:14:32:95:21:fe:
+                    02:f6:27:15:55:5a:51:cc:dc:d4:ff:e5:12:28:ff:
+                    af:be:23:5e:36:f6:8b:14:c2:4e:cb:c4:8b:03:79:
+                    e4:19:db:a6:6b:5a:92:83:67:95:c9:c6:44:77:66:
+                    ee:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:33:3C:86:48:60:C6:50:02:47:AF:DE:60:2F:A0:5C:96:EE:70:7B
+                CE:1B:E0:BB:3C:38:CE:25:A4:97:48:9E:FA:83:B5:97:B9:83:9C:AF
             X509v3 Authority Key Identifier: 
-                keyid:FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                keyid:14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         4f:a5:3b:98:b8:a9:83:3a:35:3d:75:a8:f6:e8:59:43:95:3a:
-         0b:37:dc:ac:d0:12:82:31:2a:64:c8:64:81:f4:f8:d7:28:2c:
-         bf:6f:81:79:a8:21:7b:70:62:4b:7f:c8:b1:bf:69:8b:38:14:
-         e8:78:aa:61:f1:6f:6b:1a:81:93:e7:c4:7b:9f:99:75:2c:90:
-         e9:8d:3a:7e:4e:2f:09:f9:0a:20:04:cb:3e:c6:ed:59:f5:2e:
-         2e:be:73:b4:40:4f:9d:96:f0:8c:b8:01:88:fa:bf:7a:ed:f6:
-         cc:46:c5:62:1b:bb:f3:1d:3a:4b:02:7c:aa:6e:61:1f:5b:4e:
-         0e:d5:3f:c3:5c:c0:5f:1a:aa:fb:bb:4f:4d:a4:45:4c:2a:cd:
-         c0:c2:29:3d:1f:31:2b:0d:80:45:c7:5f:4b:09:96:88:a6:4a:
-         b0:fb:66:3f:4b:41:c3:5b:a7:f7:7f:ce:cb:b5:c9:54:62:66:
-         61:d1:20:73:f6:c2:e0:81:11:20:b1:a0:a5:44:3f:52:4a:77:
-         9d:b9:b9:99:e7:73:a8:23:1f:02:91:03:e5:90:ad:23:00:2a:
-         08:99:37:16:df:ca:70:bf:da:e9:50:1d:c5:94:81:57:97:7d:
-         3f:d2:4f:91:74:94:90:2e:5c:dd:33:13:a0:83:25:4d:c0:7e:
-         19:97:e3:d6
+         85:90:10:59:59:a7:08:ac:49:ac:37:1f:11:2b:ad:5e:ea:7d:
+         7a:f5:10:9a:a8:33:a2:67:ac:d0:fa:0f:ac:b6:c5:c5:e8:6f:
+         3a:82:72:99:b1:b1:8c:3b:1a:af:10:03:b5:a4:21:f6:3b:a0:
+         a8:80:84:b0:8c:11:64:b7:e1:79:d9:a3:21:64:24:ed:97:a8:
+         65:e1:62:e6:44:fa:cc:49:bd:fe:43:cc:69:ff:95:bb:6f:ac:
+         58:25:3a:da:57:42:e9:4b:32:3b:c5:ab:02:87:c9:d0:ea:8a:
+         7f:51:6f:b5:c0:1f:97:95:50:c1:e2:70:ac:af:fe:7d:49:bc:
+         d0:80:19:a7:bc:80:28:cb:73:93:fb:06:83:29:23:bb:b1:10:
+         b9:51:a9:bf:73:87:15:05:39:92:1e:ec:9a:48:b0:ea:c4:e1:
+         c5:c8:22:04:aa:e2:29:d5:31:f8:b1:4c:9e:e6:0f:a5:62:68:
+         71:3b:1b:7b:4d:c6:b0:01:51:ae:99:da:77:77:41:2b:c7:4b:
+         d3:83:d2:a0:d9:48:0a:4a:e6:52:91:a3:27:16:7c:0d:c4:93:
+         2c:fc:5c:51:bf:dc:b0:81:1a:80:d2:58:87:bc:26:08:13:cd:
+         d3:c0:26:40:23:e8:6b:b0:18:95:c5:d7:6a:a2:1a:19:00:62:
+         3d:92:94:45
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArvjCOnGF
-or3KLDC3IjrzySR+dIaYr80TCsFMUlb2AxmvfWdzLuKZ5Dv3enzcjYNhNsSJvBSq
-EY3n/j1h5Rp4iJuvYwUwePge9ZLlLQLUtMukRKTMGzhS+1VKuTfUu9ATIGnLHzRM
-0MoyBCPzUh856JCjPWj1qeP84/Hiw0dVaKt+kHeHkADpMAXqMAdtZtbImL2LgRjG
-xUUmMM7IYWrccHojik24ypRop0i61vsQiamdXhxDELXeM2ijLJErcNq+vR6yMC65
-91f82dFKkng0k9+JaoUc3yPzMPt9n3uzzJ2FmPhkejS6elGAAeuRd3939mWGnlFe
-TiBvye08UBzNjwIDAQABo4HLMIHIMB0GA1UdDgQWBBRMMzyGSGDGUAJHr95gL6Bc
-lu5wezAfBgNVHSMEGDAWgBT7WT7MokJicp9TlpU6SOoWgMhCQDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0qywneqj
+mL0xmUpcUtTmNnmuA+Ns8vkFUd0+ONU8AujqdGZix2OfzpHvwwu5CM7MzYYmg/DH
+0hpsIYxo8yz3KOYg5354GhhnQHD16845Ui01dQCmzBMkR1ibWXzsF7jki5SUBgAP
+FskUtJWGZy7i1xaGgS2jTWZggcyD2GrKNp57DAarAakIme6husP6DU3dxhpZi5PM
+Fj4HYpk/FOUEEMPsfgNdbqKqwowT7HsYNC25RqcAJGc+/0b56ahqANuNrwINzR0A
+U4HU2LDTFDKVIf4C9icVVVpRzNzU/+USKP+vviNeNvaLFMJOy8SLA3nkGduma1qS
+g2eVycZEd2butwIDAQABo4HLMIHIMB0GA1UdDgQWBBTOG+C7PDjOJaSXSJ76g7WX
+uYOcrzAfBgNVHSMEGDAWgBQU1gC8mlMewCMpN0Vg7xGhr84rGjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AE+lO5i4qYM6NT11qPboWUOVOgs33KzQEoIxKmTIZIH0+NcoLL9vgXmoIXtwYkt/
-yLG/aYs4FOh4qmHxb2sagZPnxHufmXUskOmNOn5OLwn5CiAEyz7G7Vn1Li6+c7RA
-T52W8Iy4AYj6v3rt9sxGxWIbu/MdOksCfKpuYR9bTg7VP8NcwF8aqvu7T02kRUwq
-zcDCKT0fMSsNgEXHX0sJloimSrD7Zj9LQcNbp/d/zsu1yVRiZmHRIHP2wuCBESCx
-oKVEP1JKd525uZnnc6gjHwKRA+WQrSMAKgiZNxbfynC/2ulQHcWUgVeXfT/ST5F0
-lJAuXN0zE6CDJU3AfhmX49Y=
+AIWQEFlZpwisSaw3HxErrV7qfXr1EJqoM6JnrND6D6y2xcXobzqCcpmxsYw7Gq8Q
+A7WkIfY7oKiAhLCMEWS34XnZoyFkJO2XqGXhYuZE+sxJvf5DzGn/lbtvrFglOtpX
+QulLMjvFqwKHydDqin9Rb7XAH5eVUMHicKyv/n1JvNCAGae8gCjLc5P7BoMpI7ux
+ELlRqb9zhxUFOZIe7JpIsOrE4cXIIgSq4inVMfixTJ7mD6ViaHE7G3tNxrABUa6Z
+2nd3QSvHS9OD0qDZSApK5lKRoycWfA3Ekyz8XFG/3LCBGoDSWIe8JggTzdPAJkAj
+6GuwGJXF12qiGhkAYj2SlEU=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c9:53:af:4f:d1:35:5f:3e:69:08:13:28:41:5b:
-                    69:25:b0:ee:39:75:73:4c:63:c4:08:42:0c:5e:04:
-                    04:62:21:1a:92:5d:c8:6d:e8:44:6a:3b:3e:c5:6a:
-                    22:56:86:db:cb:38:c8:c7:55:ed:2c:dc:bc:36:39:
-                    76:96:3f:6a:5f:3d:12:43:60:b1:94:13:75:94:02:
-                    8b:ad:f4:be:85:5b:ed:f1:c5:03:2c:3c:0c:e3:eb:
-                    7f:ab:94:4a:79:8b:48:fd:ad:7a:c3:e0:a8:de:40:
-                    ea:f0:a7:87:54:40:6e:f4:74:88:aa:2b:bb:21:bf:
-                    d6:7f:da:bc:cf:52:48:3d:b6:75:0d:e2:6b:ea:03:
-                    0a:d7:39:f5:78:45:63:05:1a:4b:99:40:5e:97:08:
-                    0a:5d:34:63:fa:ba:de:a7:f5:1c:e8:b2:26:96:0f:
-                    c9:c1:ac:6d:ef:05:8d:1c:dc:09:0b:bc:d3:f3:fb:
-                    10:43:2f:b2:36:3e:cf:84:1a:37:1e:fc:81:67:c6:
-                    14:87:bb:87:33:16:2a:95:cf:e7:0a:b7:52:00:05:
-                    09:08:a9:a5:97:5d:be:ed:19:92:4e:6c:4f:94:7f:
-                    e5:1a:34:c0:dc:3f:02:8e:ae:77:fc:b6:27:77:78:
-                    48:e7:ca:a1:bd:27:1d:3c:a3:2d:8d:46:d5:a6:9d:
-                    53:cd
+                    00:b6:13:fa:98:f7:b4:55:90:4b:c0:e4:41:74:47:
+                    e1:ca:ac:c0:84:7e:0a:55:af:06:c5:39:50:87:8a:
+                    35:c2:36:e0:01:8c:e5:4d:ff:a6:74:cc:76:b6:a5:
+                    91:ce:ff:95:86:7c:d1:5d:14:b4:30:04:7d:c6:41:
+                    2c:85:99:08:fa:b7:8f:92:86:3d:03:c1:83:5a:b0:
+                    d2:f7:93:ba:03:9c:8c:30:2f:e4:d5:d2:a7:be:70:
+                    d4:1c:71:71:00:8a:ac:df:ff:ff:27:05:27:ba:c2:
+                    6a:91:33:51:d3:8b:50:3a:bc:80:80:1b:cc:ff:6c:
+                    62:d2:a9:a2:c8:ef:99:02:86:2f:c0:4f:b0:84:38:
+                    43:d3:78:f7:c9:53:75:4a:75:3a:e4:60:1d:64:43:
+                    6b:8c:88:ff:c5:0b:f1:d2:36:9c:52:df:92:00:70:
+                    ff:15:e2:0d:08:be:b1:94:b8:11:a1:40:b2:6f:aa:
+                    dd:9a:bf:4a:83:93:d4:b1:bc:07:47:e9:22:55:7c:
+                    f2:c1:89:8a:b0:34:b0:e8:5a:34:70:56:e7:b3:4d:
+                    51:a0:9e:ba:f6:66:76:5f:dc:1f:0d:6a:18:fb:85:
+                    41:dd:d4:c9:8f:0f:f6:9c:66:2a:b0:ab:af:43:16:
+                    5e:79:d7:2b:f2:91:74:f6:5c:72:b4:bb:eb:ea:02:
+                    1f:53
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
             X509v3 Authority Key Identifier: 
-                keyid:FB:59:3E:CC:A2:42:62:72:9F:53:96:95:3A:48:EA:16:80:C8:42:40
+                keyid:14:D6:00:BC:9A:53:1E:C0:23:29:37:45:60:EF:11:A1:AF:CE:2B:1A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         34:3c:af:58:31:78:ea:c0:32:23:d8:b0:8e:84:44:9c:a3:b7:
-         0b:b5:a4:4b:3d:21:d2:8a:02:ec:4c:ed:ab:c3:0a:17:89:50:
-         45:fc:43:0b:db:6c:e6:69:56:3c:41:b0:c9:2d:12:19:bd:a1:
-         b6:a7:fa:25:a4:73:6f:32:06:b7:f5:ac:64:b3:b9:b6:44:65:
-         83:b2:48:cc:3c:68:69:ae:16:0a:c0:c5:57:39:00:51:16:97:
-         0e:03:7d:e7:02:65:f2:84:de:e9:a6:9d:d5:83:73:37:9d:f5:
-         bc:d8:ef:dc:6f:1b:48:db:f6:ca:a0:00:d5:e6:c0:f6:94:2d:
-         a9:4e:b4:4d:cf:49:7d:c4:4d:3a:68:a2:b2:d8:e8:67:77:98:
-         6f:1c:2d:4a:74:13:2b:24:04:67:50:38:7e:e9:cb:0c:94:0d:
-         d0:07:50:52:a5:03:10:07:6a:04:ef:33:ea:b0:70:9f:27:34:
-         47:b0:f8:41:81:7e:f2:93:0b:c0:cf:c3:d7:06:59:f1:24:2a:
-         61:64:7f:38:f0:4f:77:d3:92:e4:1f:e4:44:a4:b6:85:40:59:
-         3d:df:f2:cc:57:ea:1a:58:1d:f8:90:d4:2d:53:67:56:c3:88:
-         9d:17:0f:19:19:fc:ed:4e:cc:b9:76:fa:fc:93:e5:bf:08:e7:
-         a9:d6:46:0f
+         a8:92:8b:16:34:ca:84:e9:d6:0c:85:9a:b2:c7:e0:ab:37:50:
+         dd:68:2e:ba:93:22:17:09:53:a5:a1:4b:0d:75:8a:e6:38:8a:
+         0f:eb:5e:a4:fb:2d:7f:ce:39:6c:f8:c1:2b:25:03:a3:16:49:
+         61:e3:b1:04:68:c7:2b:38:f7:06:0a:e6:59:07:46:65:05:ef:
+         63:90:2b:28:58:58:95:8b:7a:02:32:f3:64:fc:79:77:45:47:
+         d0:9e:21:18:28:e2:1f:b1:f6:2d:af:bc:77:ff:37:c2:61:e2:
+         bc:56:c5:f3:e8:ed:12:3f:9f:ab:6f:7d:2d:14:92:47:79:f7:
+         1a:73:2a:f4:20:df:c6:87:10:80:2b:f7:08:09:3d:61:56:a7:
+         3d:27:71:19:c7:38:b2:36:13:0a:91:2a:c5:e0:a0:72:d6:2e:
+         de:ff:da:e5:80:f7:c8:55:b7:c1:d5:84:f7:31:e0:50:72:55:
+         09:bc:cb:ac:84:c6:b6:91:25:73:a4:4c:a3:5d:90:a9:9b:a8:
+         1a:44:d9:46:48:69:17:59:85:6e:0c:54:27:db:7d:4a:91:96:
+         71:ec:ff:a1:58:41:d1:06:4a:8b:12:2b:01:fb:98:06:8a:c7:
+         3e:df:01:23:a8:cf:04:d6:35:8a:95:c0:97:9f:f6:e4:38:20:
+         ab:15:f3:2f
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMlTr0/RNV8+aQgTKEFb
-aSWw7jl1c0xjxAhCDF4EBGIhGpJdyG3oRGo7PsVqIlaG28s4yMdV7SzcvDY5dpY/
-al89EkNgsZQTdZQCi630voVb7fHFAyw8DOPrf6uUSnmLSP2tesPgqN5A6vCnh1RA
-bvR0iKoruyG/1n/avM9SSD22dQ3ia+oDCtc59XhFYwUaS5lAXpcICl00Y/q63qf1
-HOiyJpYPycGsbe8FjRzcCQu80/P7EEMvsjY+z4QaNx78gWfGFIe7hzMWKpXP5wq3
-UgAFCQippZddvu0Zkk5sT5R/5Ro0wNw/Ao6ud/y2J3d4SOfKob0nHTyjLY1G1aad
-U80CAwEAAaOByzCByDAdBgNVHQ4EFgQU+1k+zKJCYnKfU5aVOkjqFoDIQkAwHwYD
-VR0jBBgwFoAU+1k+zKJCYnKfU5aVOkjqFoDIQkAwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALYT+pj3tFWQS8DkQXRH
+4cqswIR+ClWvBsU5UIeKNcI24AGM5U3/pnTMdralkc7/lYZ80V0UtDAEfcZBLIWZ
+CPq3j5KGPQPBg1qw0veTugOcjDAv5NXSp75w1BxxcQCKrN///ycFJ7rCapEzUdOL
+UDq8gIAbzP9sYtKposjvmQKGL8BPsIQ4Q9N498lTdUp1OuRgHWRDa4yI/8UL8dI2
+nFLfkgBw/xXiDQi+sZS4EaFAsm+q3Zq/SoOT1LG8B0fpIlV88sGJirA0sOhaNHBW
+57NNUaCeuvZmdl/cHw1qGPuFQd3UyY8P9pxmKrCrr0MWXnnXK/KRdPZccrS76+oC
+H1MCAwEAAaOByzCByDAdBgNVHQ4EFgQUFNYAvJpTHsAjKTdFYO8Roa/OKxowHwYD
+VR0jBBgwFoAUFNYAvJpTHsAjKTdFYO8Roa/OKxowNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0PK9YMXjq
-wDIj2LCOhESco7cLtaRLPSHSigLsTO2rwwoXiVBF/EML22zmaVY8QbDJLRIZvaG2
-p/olpHNvMga39axks7m2RGWDskjMPGhprhYKwMVXOQBRFpcOA33nAmXyhN7ppp3V
-g3M3nfW82O/cbxtI2/bKoADV5sD2lC2pTrRNz0l9xE06aKKy2Ohnd5hvHC1KdBMr
-JARnUDh+6csMlA3QB1BSpQMQB2oE7zPqsHCfJzRHsPhBgX7ykwvAz8PXBlnxJCph
-ZH848E9305LkH+REpLaFQFk93/LMV+oaWB34kNQtU2dWw4idFw8ZGfztTsy5dvr8
-k+W/COep1kYP
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCokosWNMqE
+6dYMhZqyx+CrN1DdaC66kyIXCVOloUsNdYrmOIoP616k+y1/zjls+MErJQOjFklh
+47EEaMcrOPcGCuZZB0ZlBe9jkCsoWFiVi3oCMvNk/Hl3RUfQniEYKOIfsfYtr7x3
+/zfCYeK8VsXz6O0SP5+rb30tFJJHefcacyr0IN/GhxCAK/cICT1hVqc9J3EZxziy
+NhMKkSrF4KBy1i7e/9rlgPfIVbfB1YT3MeBQclUJvMushMa2kSVzpEyjXZCpm6ga
+RNlGSGkXWYVuDFQn231KkZZx7P+hWEHRBkqLEisB+5gGisc+3wEjqM8E1jWKlcCX
+n/bkOCCrFfMv
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Time is after notAfter
 
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
index 84b78fc..7628ea8 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d8:d8:32:e7:2a:be:55:8d:e7:e8:ae:ee:1d:c6:
-                    f5:3b:0c:6d:25:d9:53:8e:4a:84:0c:1e:7b:cb:30:
-                    2f:5f:1f:85:a3:e7:e0:92:79:b4:a2:35:fe:b7:71:
-                    b4:a3:c0:79:dd:50:e5:e4:b0:61:b5:2c:97:2e:e6:
-                    4a:bc:c6:3c:c7:20:f3:87:20:4e:27:d8:8a:f6:0d:
-                    a9:ac:0a:57:9a:53:03:9e:5f:32:ef:07:18:0a:ab:
-                    f6:a7:42:4e:ef:36:9a:10:4a:db:d3:9f:49:d7:04:
-                    3a:95:61:77:ba:5e:d2:84:cb:57:ec:45:91:d0:fd:
-                    be:5b:8b:4d:2f:0b:21:ab:89:ab:92:d9:fc:18:0c:
-                    44:bb:54:0a:94:5d:bd:ee:ac:a9:ee:f2:27:a8:3f:
-                    30:b1:e7:f6:fd:1a:05:86:56:db:22:de:bd:e5:a6:
-                    d2:50:2d:4c:0c:ab:1c:b2:49:6c:23:9a:46:d8:f5:
-                    53:f4:9d:52:2c:f0:25:e3:a8:e7:99:d3:6d:ec:f0:
-                    0c:d1:bd:1e:73:c6:8f:5d:11:50:88:b3:63:bc:c7:
-                    c5:eb:36:74:8f:03:fe:1a:36:d7:ac:5f:18:ae:73:
-                    11:7f:dc:81:dc:7c:77:17:ec:2c:91:c5:db:cc:2d:
-                    1a:a0:f1:ad:aa:d4:b6:1d:22:ee:22:bd:48:c9:f0:
-                    df:7f
+                    00:ac:a3:a7:c6:1e:71:aa:8e:cf:a1:00:f6:ad:4c:
+                    a0:92:eb:eb:4f:18:02:be:72:71:9f:3a:aa:c0:b6:
+                    ef:99:fb:dd:21:06:c2:fa:c8:e3:bc:43:c2:fd:30:
+                    44:2f:a8:60:e7:d3:6e:b6:9b:b0:1d:f6:13:8d:42:
+                    62:c2:f4:71:6f:28:89:bb:9b:c3:5e:e8:53:64:7e:
+                    ed:70:dd:fd:f5:33:ec:14:dc:10:47:58:db:8e:2d:
+                    63:5b:73:6f:81:b6:d8:79:31:01:80:c0:77:14:a4:
+                    af:85:34:6c:e8:ed:da:7a:fb:7d:cb:a9:2a:fb:9b:
+                    5a:18:42:a0:56:29:e4:92:e9:e0:80:cf:0b:b8:fc:
+                    52:da:09:7a:dd:2e:0c:79:e0:b0:60:88:6d:e8:65:
+                    8b:d5:fb:ea:65:f6:d2:5e:7c:34:1c:4f:1b:e5:28:
+                    9c:9a:bc:b4:bd:2f:23:9d:6a:be:56:af:89:0e:11:
+                    9a:b2:cd:51:8b:b5:d6:d3:9c:18:e0:2d:d4:96:e1:
+                    e2:64:34:a8:a0:fe:87:7b:81:33:b7:63:59:22:c9:
+                    41:59:00:44:7c:ed:60:1a:85:38:02:64:ca:16:8d:
+                    0a:de:f9:8e:47:14:2f:04:24:f9:fd:d6:58:e8:eb:
+                    78:70:86:87:45:91:09:06:55:20:55:49:65:2e:c6:
+                    ac:ab
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E6:C3:54:85:55:F1:44:F6:4B:55:D3:EA:09:69:E3:95:F6:DA:2A:FA
+                71:C3:9D:BC:84:61:67:9E:2F:3E:A4:68:1D:CE:1A:1D:AF:E9:91:C0
             X509v3 Authority Key Identifier: 
-                keyid:EC:3F:B7:92:DD:EA:7D:97:A5:77:22:28:E9:98:4D:0D:07:69:C4:86
+                keyid:FF:3D:EF:B0:91:47:17:69:4F:6F:13:60:CE:45:AD:51:B9:56:0B:05
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         27:8e:41:9c:f0:5c:4a:e0:b0:63:c7:fa:cc:1f:d4:21:35:33:
-         87:13:68:b7:18:08:0e:ba:22:a1:51:1a:d9:ba:31:a7:35:80:
-         c7:75:35:a4:68:c8:3e:91:79:55:e3:60:34:79:a1:0f:a9:cc:
-         05:92:61:40:b0:66:2b:fe:c7:29:a2:54:f3:7c:71:b6:36:fe:
-         a9:fd:7b:79:ea:66:19:c0:2f:d2:56:97:2f:ca:12:a3:96:6b:
-         b3:57:c8:06:58:6f:de:53:d7:63:ee:93:d6:b2:f2:11:9c:8a:
-         a1:00:26:6c:9a:bd:dd:da:97:ea:07:61:5e:48:8e:dd:3f:10:
-         4b:39:d1:9a:ba:8f:14:30:b3:36:3c:9f:a7:2c:68:b4:3c:da:
-         f2:90:24:4a:03:19:38:24:73:b5:72:b3:ae:31:b3:44:96:36:
-         3d:38:c5:c7:07:62:78:06:d8:5d:01:07:d9:b3:2d:be:0f:46:
-         13:8c:25:f9:d7:e0:84:5d:a4:62:a7:5d:3b:22:cf:e6:95:97:
-         20:d3:24:40:cc:cf:3d:72:17:f9:c1:8e:ee:15:6f:99:8f:24:
-         d1:83:6b:f9:fe:6b:94:3a:9c:2c:02:5c:1d:70:d6:f8:d6:69:
-         0d:99:f5:53:89:4f:21:7b:a6:34:dd:ce:27:ef:45:a5:e0:c6:
-         e5:f5:fc:5f
+         aa:47:6d:8b:a4:17:44:75:4d:70:14:bd:44:05:ad:08:a2:57:
+         34:2b:e9:20:76:d3:5a:97:b4:d7:07:78:4a:02:dc:61:a8:cc:
+         e1:11:70:ca:6d:2d:50:8f:7a:bb:a2:02:52:24:95:41:6e:8f:
+         48:ec:29:98:42:2d:4b:49:db:84:e4:f1:96:32:21:6e:db:40:
+         34:78:22:2e:94:11:4c:d4:02:e4:d0:eb:7d:16:3f:65:59:bd:
+         8b:57:1a:95:c0:d5:8b:2b:63:85:5a:c7:7d:2a:2f:f9:5a:e2:
+         45:77:cf:ee:2e:01:68:de:69:e0:7e:78:f2:f5:ef:af:4c:85:
+         54:7a:a2:01:d9:d9:23:d4:da:ed:49:91:fb:59:22:ee:f4:a9:
+         37:84:e3:0e:3e:0f:e6:43:fd:27:d1:7b:67:76:ea:6d:e6:56:
+         b5:47:d2:b7:b1:ff:d2:4e:a5:fe:ae:63:6e:f8:28:19:5e:c7:
+         ec:9c:54:e4:b3:73:89:bc:d1:b0:ac:31:60:80:8e:fc:ef:c2:
+         a3:ef:fc:9b:cc:8a:ad:a2:de:4f:c1:40:64:13:f0:17:0b:19:
+         8c:5b:f3:d9:5a:11:b6:f1:6d:e9:52:87:f5:58:e4:8d:6b:96:
+         66:48:c7:43:c6:87:0a:ea:87:2c:c6:c6:99:f1:c2:bd:01:d8:
+         5d:eb:02:c3
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMzAyMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDY2DLn
-Kr5Vjeforu4dxvU7DG0l2VOOSoQMHnvLMC9fH4Wj5+CSebSiNf63cbSjwHndUOXk
-sGG1LJcu5kq8xjzHIPOHIE4n2Ir2DamsCleaUwOeXzLvBxgKq/anQk7vNpoQStvT
-n0nXBDqVYXe6XtKEy1fsRZHQ/b5bi00vCyGriauS2fwYDES7VAqUXb3urKnu8ieo
-PzCx5/b9GgWGVtsi3r3lptJQLUwMqxyySWwjmkbY9VP0nVIs8CXjqOeZ023s8AzR
-vR5zxo9dEVCIs2O8x8XrNnSPA/4aNtesXxiucxF/3IHcfHcX7CyRxdvMLRqg8a2q
-1LYdIu4ivUjJ8N9/AgMBAAGjgekwgeYwHQYDVR0OBBYEFObDVIVV8UT2S1XT6glp
-45X22ir6MB8GA1UdIwQYMBaAFOw/t5Ld6n2XpXciKOmYTQ0HacSGMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCso6fG
+HnGqjs+hAPatTKCS6+tPGAK+cnGfOqrAtu+Z+90hBsL6yOO8Q8L9MEQvqGDn0262
+m7Ad9hONQmLC9HFvKIm7m8Ne6FNkfu1w3f31M+wU3BBHWNuOLWNbc2+Btth5MQGA
+wHcUpK+FNGzo7dp6+33LqSr7m1oYQqBWKeSS6eCAzwu4/FLaCXrdLgx54LBgiG3o
+ZYvV++pl9tJefDQcTxvlKJyavLS9LyOdar5Wr4kOEZqyzVGLtdbTnBjgLdSW4eJk
+NKig/od7gTO3Y1kiyUFZAER87WAahTgCZMoWjQre+Y5HFC8EJPn91ljo63hwhodF
+kQkGVSBVSWUuxqyrAgMBAAGjgekwgeYwHQYDVR0OBBYEFHHDnbyEYWeeLz6kaB3O
+Gh2v6ZHAMB8GA1UdIwQYMBaAFP8977CRRxdpT28TYM5FrVG5VgsFMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJ45BnPBcSuCwY8f6zB/U
-ITUzhxNotxgIDroioVEa2boxpzWAx3U1pGjIPpF5VeNgNHmhD6nMBZJhQLBmK/7H
-KaJU83xxtjb+qf17eepmGcAv0laXL8oSo5Zrs1fIBlhv3lPXY+6T1rLyEZyKoQAm
-bJq93dqX6gdhXkiO3T8QSznRmrqPFDCzNjyfpyxotDza8pAkSgMZOCRztXKzrjGz
-RJY2PTjFxwdieAbYXQEH2bMtvg9GE4wl+dfghF2kYqddOyLP5pWXINMkQMzPPXIX
-+cGO7hVvmY8k0YNr+f5rlDqcLAJcHXDW+NZpDZn1U4lPIXumNN3OJ+9FpeDG5fX8
-Xw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqkdti6QXRHVNcBS9RAWt
+CKJXNCvpIHbTWpe01wd4SgLcYajM4RFwym0tUI96u6ICUiSVQW6PSOwpmEItS0nb
+hOTxljIhbttANHgiLpQRTNQC5NDrfRY/ZVm9i1calcDViytjhVrHfSov+VriRXfP
+7i4BaN5p4H548vXvr0yFVHqiAdnZI9Ta7UmR+1ki7vSpN4TjDj4P5kP9J9F7Z3bq
+beZWtUfSt7H/0k6l/q5jbvgoGV7H7JxU5LNzibzRsKwxYICO/O/Co+/8m8yKraLe
+T8FAZBPwFwsZjFvz2VoRtvFt6VKH9VjkjWuWZkjHQ8aHCuqHLMbGmfHCvQHYXesC
+ww==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e4:7c:a3:bb:4c:6d:c3:5e:ae:62:cd:af:18:39:
-                    c5:4b:6a:a3:fd:85:d0:ed:8b:25:93:bd:2b:06:22:
-                    b2:6b:c1:ff:73:c9:26:dd:d6:eb:eb:ee:93:4a:6d:
-                    df:10:02:b8:c5:72:d4:2f:c7:b4:1a:06:e9:38:b4:
-                    90:ae:9f:5f:69:45:47:07:68:17:b2:84:8a:65:b8:
-                    1e:ef:de:f1:b4:8a:6b:ab:de:55:79:5d:f5:2e:96:
-                    46:5b:5c:87:0b:4a:a8:53:70:4f:6f:f3:9e:9d:f4:
-                    f8:38:fa:1f:a6:5f:a3:25:08:f2:e9:63:fc:3c:98:
-                    4d:91:df:77:60:e7:e2:bd:af:bb:d9:23:38:2d:6e:
-                    07:07:0c:1a:59:5e:8a:43:c7:da:b2:ce:39:3a:80:
-                    c6:72:60:1f:d3:93:45:cd:63:b8:8b:96:bf:30:cd:
-                    b1:f6:56:d7:a9:de:14:42:ae:42:40:f8:e9:7b:47:
-                    a3:63:a1:5d:b9:2b:c0:3b:2b:81:56:11:54:ce:96:
-                    85:e6:3a:8c:66:ff:42:9f:ce:e4:a4:80:f5:59:8a:
-                    4b:ae:b2:37:c2:1f:45:9b:49:cd:db:0f:8b:a7:37:
-                    31:20:19:b4:42:20:aa:e9:e4:af:13:5a:b9:ea:d2:
-                    2c:9a:15:48:af:8d:ed:d0:fe:02:c0:a2:c6:47:bd:
-                    dd:2f
+                    00:ab:f9:3f:ad:20:59:6b:b4:1c:0e:cf:ae:16:46:
+                    92:ba:d7:7b:05:16:b9:e3:00:71:fb:36:25:c0:35:
+                    75:b3:d6:c0:7e:f1:99:3b:83:f6:0d:97:b7:ea:1e:
+                    7d:cd:32:bc:00:ca:b8:23:24:f3:d0:b9:7a:16:33:
+                    82:69:71:ef:33:3f:7d:f4:e8:1a:41:6a:7c:44:d3:
+                    19:36:7b:ec:2d:0b:3f:53:67:41:2f:c7:07:d3:f0:
+                    95:a4:71:95:62:96:e7:fa:77:80:48:c4:5e:62:54:
+                    d8:10:85:3d:9b:dc:74:b0:66:c7:49:d4:64:a3:92:
+                    49:6a:e6:e1:4a:92:8b:65:9b:30:ae:55:16:37:0e:
+                    46:b7:ff:47:72:7b:d3:d3:b4:61:7e:aa:3f:4c:a0:
+                    df:f8:4c:0e:6b:96:f8:05:49:5d:0e:2c:1f:f6:83:
+                    42:4c:ed:89:58:98:94:72:8d:a5:9c:2b:a8:02:67:
+                    36:c1:b7:70:7c:64:cb:c8:65:68:ac:6f:b9:a7:97:
+                    57:06:45:f0:cf:f6:03:c1:db:e6:f2:be:57:4a:2c:
+                    36:01:35:96:4a:65:d5:b9:05:4e:5e:b0:62:2f:1d:
+                    57:8e:7e:bb:ad:9e:50:76:cb:61:f5:f6:45:bb:78:
+                    c9:e8:21:f4:4e:47:99:3c:7e:db:b6:e9:7a:51:7e:
+                    bd:ad
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                EC:3F:B7:92:DD:EA:7D:97:A5:77:22:28:E9:98:4D:0D:07:69:C4:86
+                FF:3D:EF:B0:91:47:17:69:4F:6F:13:60:CE:45:AD:51:B9:56:0B:05
             X509v3 Authority Key Identifier: 
-                keyid:44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                keyid:BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         40:21:7c:15:90:68:e9:aa:b0:ab:21:63:e7:21:f1:92:5b:75:
-         02:34:b4:cd:06:b3:45:f4:93:07:d1:0f:f2:bc:92:ac:75:94:
-         43:ad:a8:4f:91:6a:28:0c:cd:47:8d:01:de:54:51:aa:14:e3:
-         35:f8:eb:d8:d4:59:f5:86:ef:55:e6:6f:54:17:47:c1:5f:e8:
-         be:0d:7f:34:d2:88:2d:b5:04:29:25:11:cc:a3:d7:0e:49:b2:
-         9a:e3:01:1d:3f:15:89:68:41:19:4d:ee:8d:12:0e:96:ce:5e:
-         e5:08:31:64:4f:89:e0:91:1b:a9:b0:3c:4e:50:cb:83:a0:df:
-         d0:d3:df:af:53:d5:99:6b:88:dd:9c:4f:98:f1:0d:1d:f5:29:
-         f6:c5:be:18:84:4f:1f:76:ce:6f:c8:08:a0:f4:58:af:a3:ff:
-         cb:44:55:ad:2e:6e:e0:44:07:f4:a3:d4:08:9c:d1:0e:04:29:
-         34:54:1b:bd:e8:e3:b4:56:e1:0b:05:bd:ee:6d:47:fb:10:42:
-         d2:14:12:e4:15:29:bd:06:13:7d:12:41:fa:5f:5d:01:27:69:
-         99:76:ff:76:74:c8:c8:fe:11:c5:2e:67:44:d3:32:6d:8f:45:
-         e4:0a:5a:73:ef:74:75:6a:6c:d6:c2:c5:e8:73:bc:be:29:b3:
-         3a:01:cf:02
+         3d:38:96:2b:a7:e2:04:4c:b2:7e:e5:d9:d1:c3:b3:5a:7f:3d:
+         92:a7:6f:f3:5f:94:8b:5a:33:e0:11:05:16:ad:10:6f:3f:f9:
+         78:a3:56:99:be:c6:df:55:f9:e3:e4:64:75:cb:65:9a:f9:d8:
+         42:bc:92:45:c7:13:58:e8:d6:1a:80:08:ea:c5:05:2f:dd:8f:
+         34:74:24:89:6a:a8:8d:e0:e7:e0:43:cc:91:69:dc:bb:0a:80:
+         3b:b4:dd:d1:a9:da:26:18:f6:8c:7d:eb:bd:97:ae:eb:e8:cb:
+         53:d2:c4:42:a1:71:86:49:95:e2:14:87:ad:4b:d6:58:d6:2b:
+         74:5f:30:ad:b8:af:e7:82:5f:2b:60:6e:8e:62:6d:28:6b:b0:
+         c6:88:cf:55:c9:df:a6:5f:2f:a3:c0:81:f8:d3:db:90:3e:ee:
+         8c:3f:3f:55:69:2c:0a:1e:b9:c7:ef:3d:34:5a:41:55:9e:34:
+         f6:81:2a:20:65:3b:85:c3:42:2a:c7:2a:4c:02:30:39:7e:2d:
+         9d:2a:f9:6c:e5:bb:e6:8f:3b:02:ee:6f:a3:c9:b3:82:97:66:
+         59:77:52:aa:d5:c6:ba:73:26:5a:83:c5:b3:36:8a:a1:5b:6a:
+         cc:ff:4c:e4:6d:cd:1d:ed:05:7f:8a:d1:1b:63:53:2d:53:cc:
+         c7:25:03:fd
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Hyju0xt
-w16uYs2vGDnFS2qj/YXQ7Yslk70rBiKya8H/c8km3dbr6+6TSm3fEAK4xXLUL8e0
-GgbpOLSQrp9faUVHB2gXsoSKZbge797xtIprq95VeV31LpZGW1yHC0qoU3BPb/Oe
-nfT4OPofpl+jJQjy6WP8PJhNkd93YOfiva+72SM4LW4HBwwaWV6KQ8fass45OoDG
-cmAf05NFzWO4i5a/MM2x9lbXqd4UQq5CQPjpe0ejY6FduSvAOyuBVhFUzpaF5jqM
-Zv9Cn87kpID1WYpLrrI3wh9Fm0nN2w+LpzcxIBm0QiCq6eSvE1q56tIsmhVIr43t
-0P4CwKLGR73dLwIDAQABo4HLMIHIMB0GA1UdDgQWBBTsP7eS3ep9l6V3IijpmE0N
-B2nEhjAfBgNVHSMEGDAWgBRE/J3wUfIjmf6kdsvLXDm9/Gg4RTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq/k/rSBZ
+a7QcDs+uFkaSutd7BRa54wBx+zYlwDV1s9bAfvGZO4P2DZe36h59zTK8AMq4IyTz
+0Ll6FjOCaXHvMz999OgaQWp8RNMZNnvsLQs/U2dBL8cH0/CVpHGVYpbn+neASMRe
+YlTYEIU9m9x0sGbHSdRko5JJaubhSpKLZZswrlUWNw5Gt/9HcnvT07Rhfqo/TKDf
++EwOa5b4BUldDiwf9oNCTO2JWJiUco2lnCuoAmc2wbdwfGTLyGVorG+5p5dXBkXw
+z/YDwdvm8r5XSiw2ATWWSmXVuQVOXrBiLx1Xjn67rZ5Qdsth9fZFu3jJ6CH0TkeZ
+PH7btul6UX69rQIDAQABo4HLMIHIMB0GA1UdDgQWBBT/Pe+wkUcXaU9vE2DORa1R
+uVYLBTAfBgNVHSMEGDAWgBS8Ucxgjh1I7PA7LCAmY6vAyx1ptTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AEAhfBWQaOmqsKshY+ch8ZJbdQI0tM0Gs0X0kwfRD/K8kqx1lEOtqE+RaigMzUeN
-Ad5UUaoU4zX469jUWfWG71Xmb1QXR8Ff6L4NfzTSiC21BCklEcyj1w5JsprjAR0/
-FYloQRlN7o0SDpbOXuUIMWRPieCRG6mwPE5Qy4Og39DT369T1ZlriN2cT5jxDR31
-KfbFvhiETx92zm/ICKD0WK+j/8tEVa0ubuBEB/Sj1Aic0Q4EKTRUG73o47RW4QsF
-ve5tR/sQQtIUEuQVKb0GE30SQfpfXQEnaZl2/3Z0yMj+EcUuZ0TTMm2PReQKWnPv
-dHVqbNbCxehzvL4pszoBzwI=
+AD04liun4gRMsn7l2dHDs1p/PZKnb/NflItaM+ARBRatEG8/+XijVpm+xt9V+ePk
+ZHXLZZr52EK8kkXHE1jo1hqACOrFBS/djzR0JIlqqI3g5+BDzJFp3LsKgDu03dGp
+2iYY9ox9672Xruvoy1PSxEKhcYZJleIUh61L1ljWK3RfMK24r+eCXytgbo5ibShr
+sMaIz1XJ36ZfL6PAgfjT25A+7ow/P1VpLAoeucfvPTRaQVWeNPaBKiBlO4XDQirH
+KkwCMDl+LZ0q+Wzlu+aPOwLub6PJs4KXZll3UqrVxrpzJlqDxbM2iqFbasz/TORt
+zR3tBX+K0RtjUy1TzMclA/0=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a0:21:1c:d1:00:97:80:26:4c:59:fe:1f:73:23:
-                    48:97:10:b0:7f:bb:bb:34:00:76:fb:5d:e6:1f:59:
-                    ed:24:d9:25:9c:16:06:50:8e:83:da:d6:93:22:80:
-                    34:69:d3:d2:ee:98:9b:51:09:02:25:e4:04:fa:cc:
-                    de:4f:f6:3d:9c:65:80:b3:83:19:dd:74:b7:3f:84:
-                    86:7f:77:f9:5b:bc:c9:5c:0d:98:3e:77:df:3b:f1:
-                    43:cd:3d:4a:88:81:76:08:cb:56:25:5f:ff:56:7e:
-                    e1:e2:ab:41:60:9a:89:32:cf:9b:5e:3f:95:17:04:
-                    75:2d:a2:b7:e8:02:ea:6e:a0:2f:69:9f:30:a7:cd:
-                    7b:e6:e5:3d:98:01:51:b4:3e:c2:cf:87:f9:a1:e8:
-                    9d:69:43:91:37:58:b9:ec:2e:64:5f:76:21:e5:09:
-                    8c:6e:72:31:f4:c5:79:2f:14:1f:84:17:10:e3:50:
-                    0f:5d:d2:dd:f1:33:cb:57:f2:19:8c:04:96:e8:a7:
-                    3b:77:51:3a:6e:03:2b:29:2a:db:40:da:fb:41:f2:
-                    bc:37:ef:31:5c:2b:0f:b2:f4:58:27:b6:0f:24:4d:
-                    1d:97:ca:bd:00:c8:5f:eb:c4:3d:5d:b7:9e:d6:58:
-                    45:8a:20:af:2f:16:fc:51:6c:55:66:24:19:21:66:
-                    38:9f
+                    00:c4:82:4f:23:96:10:a0:b9:d9:e7:f0:8a:ca:2f:
+                    33:21:c4:ab:06:e4:a8:bc:21:7b:49:db:66:ce:45:
+                    0a:f8:c6:31:9a:2f:62:0c:e0:f2:23:6b:22:b6:4b:
+                    91:54:cc:d7:2e:75:a0:41:8d:ce:b9:4d:f2:e5:ca:
+                    4c:dc:53:cb:ff:cd:be:79:1e:e0:f2:b6:be:5f:16:
+                    c4:7b:11:15:b7:24:35:fe:3a:b4:b5:17:bd:7a:9d:
+                    14:1f:e7:73:bd:31:ba:02:42:35:43:1d:7a:8a:5d:
+                    f8:e4:75:8c:db:b8:48:c2:d1:01:50:a7:d1:74:0d:
+                    b2:ea:b9:b2:ad:49:bc:fe:e4:cf:d5:d6:28:a3:43:
+                    1b:33:c7:62:64:88:62:2d:54:b8:2a:9f:01:c7:42:
+                    06:a3:61:2b:d2:19:0e:98:34:8b:ff:42:be:6b:c1:
+                    80:92:e8:9c:26:88:90:a6:ef:1f:cd:f7:cc:4f:af:
+                    2e:7b:b7:29:ae:26:42:a9:de:b2:29:79:eb:29:71:
+                    1c:8b:41:6d:82:c5:0b:56:f8:fd:f2:40:08:c6:8c:
+                    62:f9:c9:d1:d8:c5:e0:e1:19:d8:9d:c4:8f:d3:b4:
+                    69:41:72:d3:00:20:de:53:dc:91:2b:5f:ac:a7:8e:
+                    7d:15:c0:54:90:b1:e2:81:6d:ea:08:43:a1:5c:b5:
+                    b4:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
             X509v3 Authority Key Identifier: 
-                keyid:44:FC:9D:F0:51:F2:23:99:FE:A4:76:CB:CB:5C:39:BD:FC:68:38:45
+                keyid:BC:51:CC:60:8E:1D:48:EC:F0:3B:2C:20:26:63:AB:C0:CB:1D:69:B5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         94:de:4b:73:02:e3:22:7f:1e:82:0c:64:a8:de:79:70:34:96:
-         9d:b5:e9:a0:51:bc:5c:3a:b1:97:7e:a4:0a:04:60:5a:3b:3a:
-         88:7e:ff:67:1a:19:7f:61:c0:6a:f9:73:14:b4:6b:be:21:fd:
-         f3:e2:7a:61:56:73:15:9e:8d:c5:bb:21:47:8a:1f:fa:03:0d:
-         0a:90:20:37:69:49:0b:2e:6a:9c:64:5b:e8:f0:ed:29:32:5f:
-         bc:f8:59:81:ad:d8:d9:71:ef:8d:bd:9c:ed:2e:c3:53:4f:12:
-         ec:f3:83:24:36:30:b1:c6:59:a7:2c:a8:6d:62:30:bc:a3:28:
-         13:0a:09:ed:47:a9:f5:68:e9:97:33:b2:e7:e7:5c:f9:bb:c1:
-         4b:7b:63:62:0a:0f:31:58:7e:24:88:30:f5:42:cf:3e:86:ca:
-         48:5b:83:44:b0:04:fa:0b:e2:9c:8b:5f:9c:68:77:23:79:40:
-         29:95:0d:6e:32:bf:ab:b4:ae:8a:2a:ca:f2:2a:92:a7:0d:b4:
-         80:5d:ce:be:f8:68:24:00:d9:30:9c:de:ba:35:d4:22:b5:dd:
-         15:37:70:bd:2e:7c:53:65:db:6f:1d:47:fa:53:56:dd:d0:9f:
-         e7:d5:d5:27:7f:c7:2e:9b:55:c2:70:1f:5e:66:b8:d1:2e:ac:
-         c6:e9:de:aa
+         12:dc:f7:d4:f8:1c:f1:5e:26:fe:e1:3e:18:21:3f:3d:02:63:
+         89:28:77:18:ed:8c:2f:85:38:18:4c:68:0c:8c:69:97:93:97:
+         ab:1b:0d:0b:4c:f8:89:67:5e:a8:a1:db:4e:27:4e:d8:79:8b:
+         da:4c:ab:e1:2f:1c:da:87:78:47:ea:16:b3:e8:a5:0f:a2:bf:
+         34:be:4d:e2:1f:ec:2d:1d:39:b1:43:5b:c1:d4:ef:17:0f:04:
+         62:dc:60:cf:0c:1b:98:5f:79:19:a4:f1:f8:51:e9:cd:5e:cb:
+         59:0a:f9:1e:dd:26:b1:7e:a6:b5:14:61:a2:5c:26:5f:bf:ce:
+         8f:f7:4a:58:e4:eb:79:7e:d8:91:be:c8:dc:17:5b:55:9f:9d:
+         02:07:7d:7c:24:67:68:b4:00:6a:66:90:55:1f:e9:8a:d3:3c:
+         38:b5:99:ac:ab:43:bb:bd:dc:28:fe:90:15:83:c6:bf:eb:9c:
+         84:89:2c:7b:15:81:60:d4:c6:35:7e:13:55:58:1f:38:fd:02:
+         9b:4c:47:e7:69:32:24:b2:89:3f:30:1d:2a:32:e5:e8:a2:e0:
+         9d:43:b1:be:76:cd:e2:7a:20:9b:67:6c:dd:30:60:79:57:2b:
+         0c:42:3f:29:8d:d4:42:83:e5:5c:b2:9e:ed:64:d1:4e:b1:ef:
+         81:8c:1d:c4
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAhHNEAl4AmTFn+H3Mj
-SJcQsH+7uzQAdvtd5h9Z7STZJZwWBlCOg9rWkyKANGnT0u6Ym1EJAiXkBPrM3k/2
-PZxlgLODGd10tz+Ehn93+Vu8yVwNmD533zvxQ809SoiBdgjLViVf/1Z+4eKrQWCa
-iTLPm14/lRcEdS2it+gC6m6gL2mfMKfNe+blPZgBUbQ+ws+H+aHonWlDkTdYuewu
-ZF92IeUJjG5yMfTFeS8UH4QXEONQD13S3fEzy1fyGYwEluinO3dROm4DKykq20Da
-+0HyvDfvMVwrD7L0WCe2DyRNHZfKvQDIX+vEPV23ntZYRYogry8W/FFsVWYkGSFm
-OJ8CAwEAAaOByzCByDAdBgNVHQ4EFgQURPyd8FHyI5n+pHbLy1w5vfxoOEUwHwYD
-VR0jBBgwFoAURPyd8FHyI5n+pHbLy1w5vfxoOEUwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMSCTyOWEKC52efwisov
+MyHEqwbkqLwhe0nbZs5FCvjGMZovYgzg8iNrIrZLkVTM1y51oEGNzrlN8uXKTNxT
+y//Nvnke4PK2vl8WxHsRFbckNf46tLUXvXqdFB/nc70xugJCNUMdeopd+OR1jNu4
+SMLRAVCn0XQNsuq5sq1JvP7kz9XWKKNDGzPHYmSIYi1UuCqfAcdCBqNhK9IZDpg0
+i/9CvmvBgJLonCaIkKbvH833zE+vLnu3Ka4mQqnesil56ylxHItBbYLFC1b4/fJA
+CMaMYvnJ0djF4OEZ2J3Ej9O0aUFy0wAg3lPckStfrKeOfRXAVJCx4oFt6ghDoVy1
+tLcCAwEAAaOByzCByDAdBgNVHQ4EFgQUvFHMYI4dSOzwOywgJmOrwMsdabUwHwYD
+VR0jBBgwFoAUvFHMYI4dSOzwOywgJmOrwMsdabUwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCU3ktzAuMi
-fx6CDGSo3nlwNJadtemgUbxcOrGXfqQKBGBaOzqIfv9nGhl/YcBq+XMUtGu+If3z
-4nphVnMVno3FuyFHih/6Aw0KkCA3aUkLLmqcZFvo8O0pMl+8+FmBrdjZce+NvZzt
-LsNTTxLs84MkNjCxxlmnLKhtYjC8oygTCgntR6n1aOmXM7Ln51z5u8FLe2NiCg8x
-WH4kiDD1Qs8+hspIW4NEsAT6C+Kci1+caHcjeUAplQ1uMr+rtK6KKsryKpKnDbSA
-Xc6++GgkANkwnN66NdQitd0VN3C9LnxTZdtvHUf6U1bd0J/n1dUnf8cum1XCcB9e
-ZrjRLqzG6d6q
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAS3PfU+Bzx
+Xib+4T4YIT89AmOJKHcY7YwvhTgYTGgMjGmXk5erGw0LTPiJZ16oodtOJ07YeYva
+TKvhLxzah3hH6haz6KUPor80vk3iH+wtHTmxQ1vB1O8XDwRi3GDPDBuYX3kZpPH4
+UenNXstZCvke3Saxfqa1FGGiXCZfv86P90pY5Ot5ftiRvsjcF1tVn50CB318JGdo
+tABqZpBVH+mK0zw4tZmsq0O7vdwo/pAVg8a/65yEiSx7FYFg1MY1fhNVWB84/QKb
+TEfnaTIksok/MB0qMuXoouCdQ7G+ds3ieiCbZ2zdMGB5VysMQj8pjdRCg+Vcsp7t
+ZNFOse+BjB3E
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150301120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Time is before notBefore
 
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target.pem b/src/net/data/verify_certificate_chain_unittest/expired-target.pem
index 10a24eb..10a6f1c 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-target.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:82:6a:2a:fe:30:47:00:84:06:de:48:a1:fc:
-                    a5:d9:2c:d5:7d:e2:71:eb:ff:b5:7b:da:8c:c7:fc:
-                    38:8a:a3:64:5a:f8:01:70:e0:c0:26:d4:70:2c:08:
-                    da:6b:5c:b4:40:41:aa:9e:b4:1d:05:9b:54:7c:54:
-                    a4:b8:07:03:b0:69:95:98:c5:e6:7a:7f:71:6f:07:
-                    dd:a5:21:59:79:7c:58:7c:00:0d:9d:18:6b:c0:3d:
-                    2d:fe:c6:63:58:c6:5f:29:47:01:b6:a2:dd:bb:f4:
-                    8a:8b:d0:15:3e:0b:01:18:34:0a:d4:a1:d3:e9:7a:
-                    c3:5d:97:2b:c7:53:ff:49:81:34:fc:16:b4:02:f8:
-                    7c:55:6e:fa:9b:4f:cd:31:1a:f5:d2:5c:8f:92:d7:
-                    bd:48:50:a9:b1:c4:89:cd:6d:c8:1d:99:77:34:d1:
-                    d3:61:8f:b9:f8:3b:3e:c6:b3:2e:5f:3c:d0:f7:04:
-                    34:51:9f:83:4e:7b:1d:c9:59:53:81:6e:d9:f7:4b:
-                    36:dc:80:9e:b4:a4:cb:5d:18:1d:d3:52:3e:d8:b3:
-                    4e:28:c5:ba:2c:bd:dc:d1:e2:4a:21:e5:2a:ed:6f:
-                    97:84:a9:01:89:eb:2e:21:9e:b9:4a:6a:9b:c5:fe:
-                    b0:5a:34:cf:25:0f:55:53:41:be:94:b9:8d:81:44:
-                    fa:b5
+                    00:a6:a2:e2:2b:94:f1:2d:8e:32:96:75:ec:49:9f:
+                    37:c1:f3:06:90:be:8a:16:78:23:35:a9:00:47:cf:
+                    d9:87:32:7f:8d:cd:1d:88:c1:5d:54:d0:1f:bd:eb:
+                    fa:09:1f:63:3b:4d:a9:6d:f3:2a:f4:c0:54:5d:42:
+                    e5:f6:2c:e0:f9:6e:35:6e:52:93:a1:58:a3:80:22:
+                    2e:10:9b:50:5c:db:d6:4f:20:6c:a9:2d:51:82:46:
+                    7b:60:f6:c4:78:dc:9a:79:e4:32:7e:98:1b:92:03:
+                    c3:7f:aa:67:9c:3a:9a:cb:4c:3c:3f:5e:f9:d9:59:
+                    a5:6c:8e:49:d1:e7:42:83:17:a4:a7:03:da:c1:d0:
+                    a0:81:90:aa:ac:eb:7c:db:11:bf:a0:17:3d:c8:4f:
+                    ff:99:35:b3:fa:02:96:1d:c0:63:ca:13:2e:18:68:
+                    ce:14:26:e8:8e:99:5b:d1:a6:16:9f:08:fe:3d:38:
+                    52:bc:a8:6a:f8:d7:28:c6:7a:cb:46:4a:4c:98:ac:
+                    d5:e6:6b:b5:dd:47:b7:c6:f0:61:dc:df:af:e2:0a:
+                    d6:3a:3f:ba:52:82:5a:d7:43:7b:90:78:38:fb:9b:
+                    e5:4b:60:17:52:21:b6:16:96:17:d1:85:ba:ff:49:
+                    dd:d6:09:ef:f6:a0:e6:bf:eb:f1:b4:61:c1:43:6d:
+                    e5:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A1:54:DE:B4:8A:C7:C9:C4:33:C6:9B:40:BF:3D:6E:CF:DB:47:EC:8C
+                1E:7B:16:66:04:07:9C:19:2D:FF:9B:1C:9A:0F:3E:45:6B:BF:1E:C9
             X509v3 Authority Key Identifier: 
-                keyid:13:F7:B3:D5:1C:C9:63:BD:3A:24:01:43:AE:4A:26:96:46:55:F5:F0
+                keyid:CA:B8:E9:2C:83:2C:C1:BA:51:E1:CB:B6:78:C8:94:A8:45:09:45:63
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         aa:f9:d5:79:52:fa:99:3e:d8:cd:ab:c3:e4:05:a9:85:c5:bf:
-         78:3b:d6:14:0b:06:f4:62:77:8e:70:40:a5:b9:b4:46:52:5d:
-         86:ad:52:52:f7:c3:1f:e9:e8:8a:e2:5b:23:63:bf:e8:5c:d8:
-         a6:11:ad:02:94:09:04:3b:67:cb:62:a3:09:67:eb:b3:68:0f:
-         81:6d:0f:d6:4e:6c:d8:a3:e5:85:8f:8f:7e:65:a4:c7:d9:ba:
-         a8:05:22:2c:94:9d:8f:e4:d1:a5:5c:7e:c0:0f:39:3e:d7:b4:
-         2c:df:d7:c1:ab:9e:5d:8d:28:51:d5:fa:2f:c6:fa:85:17:d4:
-         05:d5:4d:d8:ee:6a:14:23:da:a0:cc:43:7b:65:54:71:e1:e1:
-         79:b0:62:0a:a3:70:56:9b:53:5d:70:b7:78:6f:fd:ba:13:a7:
-         99:0a:0a:b3:46:2a:7b:48:26:31:b2:50:aa:5e:29:d9:1b:55:
-         1f:cb:de:2a:17:4d:ee:0d:67:2b:4e:dd:f6:54:d0:72:ec:e3:
-         53:4e:24:26:a6:1e:17:e8:94:ca:a8:4a:3a:af:b8:48:51:1a:
-         76:38:bd:bf:cb:c5:56:e4:a8:e4:f8:cb:cb:e9:97:ed:4e:b9:
-         af:fb:e7:92:d3:b7:ba:81:a0:13:e8:09:31:f3:45:91:2a:5c:
-         93:12:a9:99
+         68:d0:70:03:90:29:44:fe:54:34:da:2e:57:6a:68:9b:9c:54:
+         0a:92:13:07:c9:e2:1b:30:f7:9b:0a:a6:c7:6a:28:c4:41:e7:
+         40:27:51:49:5d:a9:d5:11:0e:c3:86:25:96:70:5e:8e:74:da:
+         17:7d:82:01:6a:d1:33:f9:0c:56:30:4c:3a:67:c4:aa:b2:d7:
+         93:17:d2:73:51:71:ec:c0:88:98:7d:70:cb:a1:f7:87:dc:f3:
+         2b:90:ce:50:00:a3:88:b6:2a:90:c6:42:d7:95:c3:ec:01:cf:
+         0a:11:f9:50:33:d8:23:ab:9c:b3:8b:38:62:84:80:3e:35:d5:
+         58:53:ab:05:c3:ef:cd:27:7f:00:aa:cb:93:d6:48:5b:cd:eb:
+         9d:09:23:75:4d:3d:d6:16:69:b7:2f:b2:c1:b6:f6:f8:d4:03:
+         ff:c2:b3:82:76:04:51:7e:76:ab:db:8d:31:24:a6:4b:fe:34:
+         ca:9e:dd:11:71:84:37:7b:5e:0b:b1:ef:54:10:fb:ea:59:65:
+         48:e8:27:4a:82:9a:a9:a8:ef:80:b1:a6:21:45:32:95:c4:ed:
+         fd:1a:8a:fc:5e:e3:87:72:50:90:40:a9:c8:f3:7e:7f:26:6c:
+         c9:54:87:7a:e9:09:a0:a4:f0:06:6d:ac:8f:ee:f0:62:ab:d0:
+         77:8b:ce:56
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTUwMzAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfgmoq
-/jBHAIQG3kih/KXZLNV94nHr/7V72ozH/DiKo2Ra+AFw4MAm1HAsCNprXLRAQaqe
-tB0Fm1R8VKS4BwOwaZWYxeZ6f3FvB92lIVl5fFh8AA2dGGvAPS3+xmNYxl8pRwG2
-ot279IqL0BU+CwEYNArUodPpesNdlyvHU/9JgTT8FrQC+HxVbvqbT80xGvXSXI+S
-171IUKmxxInNbcgdmXc00dNhj7n4Oz7Gsy5fPND3BDRRn4NOex3JWVOBbtn3Szbc
-gJ60pMtdGB3TUj7Ys04oxbosvdzR4koh5Srtb5eEqQGJ6y4hnrlKapvF/rBaNM8l
-D1VTQb6UuY2BRPq1AgMBAAGjgekwgeYwHQYDVR0OBBYEFKFU3rSKx8nEM8abQL89
-bs/bR+yMMB8GA1UdIwQYMBaAFBP3s9UcyWO9OiQBQ65KJpZGVfXwMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmouIr
+lPEtjjKWdexJnzfB8waQvooWeCM1qQBHz9mHMn+NzR2IwV1U0B+96/oJH2M7Talt
+8yr0wFRdQuX2LOD5bjVuUpOhWKOAIi4Qm1Bc29ZPIGypLVGCRntg9sR43Jp55DJ+
+mBuSA8N/qmecOprLTDw/XvnZWaVsjknR50KDF6SnA9rB0KCBkKqs63zbEb+gFz3I
+T/+ZNbP6ApYdwGPKEy4YaM4UJuiOmVvRphafCP49OFK8qGr41yjGestGSkyYrNXm
+a7XdR7fG8GHc36/iCtY6P7pSglrXQ3uQeDj7m+VLYBdSIbYWlhfRhbr/Sd3WCe/2
+oOa/6/G0YcFDbeWVAgMBAAGjgekwgeYwHQYDVR0OBBYEFB57FmYEB5wZLf+bHJoP
+PkVrvx7JMB8GA1UdIwQYMBaAFMq46SyDLMG6UeHLtnjIlKhFCUVjMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqvnVeVL6mT7YzavD5AWp
-hcW/eDvWFAsG9GJ3jnBApbm0RlJdhq1SUvfDH+noiuJbI2O/6FzYphGtApQJBDtn
-y2KjCWfrs2gPgW0P1k5s2KPlhY+PfmWkx9m6qAUiLJSdj+TRpVx+wA85Pte0LN/X
-waueXY0oUdX6L8b6hRfUBdVN2O5qFCPaoMxDe2VUceHhebBiCqNwVptTXXC3eG/9
-uhOnmQoKs0Yqe0gmMbJQql4p2RtVH8veKhdN7g1nK07d9lTQcuzjU04kJqYeF+iU
-yqhKOq+4SFEadji9v8vFVuSo5PjLy+mX7U65r/vnktO3uoGgE+gJMfNFkSpckxKp
-mQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAaNBwA5ApRP5UNNouV2po
+m5xUCpITB8niGzD3mwqmx2ooxEHnQCdRSV2p1REOw4YllnBejnTaF32CAWrRM/kM
+VjBMOmfEqrLXkxfSc1Fx7MCImH1wy6H3h9zzK5DOUACjiLYqkMZC15XD7AHPChH5
+UDPYI6ucs4s4YoSAPjXVWFOrBcPvzSd/AKrLk9ZIW83rnQkjdU091hZpty+ywbb2
++NQD/8KzgnYEUX52q9uNMSSmS/40yp7dEXGEN3teC7HvVBD76lllSOgnSoKaqajv
+gLGmIUUylcTt/RqK/F7jh3JQkECpyPN+fyZsyVSHeukJoKTwBm2sj+7wYqvQd4vO
+Vg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:33:55:c9:1e:c0:91:17:3a:eb:30:8c:ed:23:
-                    cc:1d:6d:1e:e7:6e:4e:ac:23:63:23:ae:48:87:13:
-                    61:0f:0c:0b:ee:72:f7:c2:7b:95:2e:7b:25:34:08:
-                    b6:e1:f5:ae:50:bf:8f:cf:81:6e:e6:26:9f:92:61:
-                    c4:fb:44:9e:23:09:df:13:80:bc:38:5b:db:08:6c:
-                    68:60:46:d4:e3:e0:41:91:c4:42:d5:d9:75:d2:c4:
-                    df:29:b8:04:bb:96:dc:9d:e4:0b:f7:de:ab:cf:90:
-                    ad:22:c8:ab:56:65:84:00:3b:b9:e6:29:b5:e2:96:
-                    88:bd:95:e5:10:6d:57:ab:be:d1:f4:61:bb:1d:b4:
-                    7f:f9:02:db:48:d3:21:9d:f1:03:77:bf:f9:ca:f3:
-                    4e:2d:44:1c:28:1d:c5:4f:30:1b:0a:8b:71:0e:5f:
-                    86:0a:3f:97:7f:47:a6:a2:3c:60:02:c6:e8:bd:e9:
-                    52:b1:0b:cb:53:d4:09:f4:b6:20:23:b4:89:09:ff:
-                    1a:61:e8:dd:ac:19:4d:be:94:1e:60:24:d4:6c:89:
-                    03:3a:c4:44:5b:dd:7c:59:37:b7:0c:83:40:24:0e:
-                    ed:ab:02:cf:cd:93:d2:3d:5d:e0:c6:c4:c5:1d:1a:
-                    01:d1:e1:77:58:62:90:e1:83:af:d2:ee:31:f3:29:
-                    0c:1f
+                    00:c5:4a:45:32:1d:7a:47:92:73:d0:af:4a:93:31:
+                    6d:5b:a6:b3:68:9e:46:a3:34:5e:75:cc:a7:09:da:
+                    ca:34:cf:6c:ed:74:fb:97:f5:c4:14:6f:e3:78:f4:
+                    1c:3d:d3:2a:6f:1e:1f:ef:61:2a:a5:f1:e6:87:0b:
+                    67:06:79:10:d6:2d:fc:f1:22:5f:28:8a:47:20:bb:
+                    29:f5:5a:25:8a:de:02:73:81:5a:5b:94:84:f7:5e:
+                    e4:8e:58:e6:29:21:0b:e2:86:0f:30:00:9e:a6:71:
+                    e5:56:7d:b7:be:43:6d:a1:d5:75:6b:4a:ef:7a:32:
+                    2b:9d:1b:9e:4f:a6:9a:21:a4:ed:ab:47:6a:af:66:
+                    d3:64:f3:cd:11:0a:5e:78:ec:c8:61:95:27:45:68:
+                    ac:41:c0:12:73:c6:1f:f0:45:03:ba:a5:f9:c9:ce:
+                    1e:a8:cf:3e:9c:28:1c:10:3e:d5:76:84:62:f5:e9:
+                    45:44:54:f6:d3:de:5b:59:52:07:9f:e1:98:7d:66:
+                    d1:da:aa:67:e6:d1:e9:57:bf:6e:8a:75:8f:3c:a0:
+                    27:7a:07:80:01:55:b2:e6:08:2a:45:8e:2b:7c:2b:
+                    d8:dc:21:c2:63:63:d5:fe:93:48:08:8b:16:4b:48:
+                    4e:8d:c0:ff:f1:49:62:a4:7b:79:26:ef:69:8c:71:
+                    a7:21
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                13:F7:B3:D5:1C:C9:63:BD:3A:24:01:43:AE:4A:26:96:46:55:F5:F0
+                CA:B8:E9:2C:83:2C:C1:BA:51:E1:CB:B6:78:C8:94:A8:45:09:45:63
             X509v3 Authority Key Identifier: 
-                keyid:5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                keyid:E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a5:43:87:2e:d0:2c:51:df:a7:aa:48:b4:38:fc:1d:6f:c9:db:
-         23:32:75:f2:d1:52:45:ea:4a:89:1f:e9:10:0c:22:0d:70:3e:
-         f0:c1:cf:b7:a8:cd:af:d4:33:99:14:6e:62:b9:a8:0f:a6:2c:
-         75:dd:d8:79:88:fc:cb:c4:7e:64:b1:2f:7a:0b:b2:a4:6c:82:
-         29:7d:23:32:d3:de:a8:90:a8:77:f8:33:13:e9:3e:42:0b:32:
-         e8:50:e0:af:31:2f:b9:e5:be:b7:c7:16:ca:a7:96:9e:95:24:
-         d2:c1:b3:df:70:5f:7b:8a:33:6b:55:76:e8:18:32:66:0e:9a:
-         60:cf:dc:30:1e:38:15:05:6e:cc:4a:1e:e7:2e:e0:5a:de:ea:
-         84:a1:ce:04:fd:db:74:d6:fe:b6:4d:6b:86:38:22:78:f1:3e:
-         ba:dc:8b:85:a6:2f:56:10:1f:7d:b8:96:00:4c:d6:a3:fa:93:
-         fd:1b:29:64:40:7c:f8:65:3f:73:8a:7e:3e:72:c7:ce:19:74:
-         51:21:26:5d:2d:41:a0:95:c9:8f:70:fd:2a:60:7a:b0:fc:e5:
-         14:65:9a:3e:68:2c:4a:47:1b:5a:97:8a:31:a9:1a:1a:c9:fc:
-         e3:be:c9:dd:65:0f:33:2b:f9:d9:68:5b:54:22:c4:dc:a6:21:
-         42:6c:ec:64
+         0f:ca:f8:35:3d:da:a1:ba:e4:4d:dd:48:b6:38:a6:d9:f2:88:
+         2d:ae:5c:f3:79:4c:d4:81:d8:ab:1e:32:e5:5a:fa:5c:12:e8:
+         bc:b3:6c:e4:5c:19:8b:80:24:c8:8d:14:07:cc:2d:75:39:d8:
+         e7:7c:8d:3e:03:de:19:2f:e0:7c:07:26:85:aa:0d:92:11:97:
+         b5:e5:a7:f9:04:c5:22:be:82:35:10:f4:2b:7a:5f:4a:dc:c0:
+         e1:64:c3:5f:62:e3:9f:cd:fa:22:c4:e4:65:5b:0c:e6:bd:f8:
+         04:b0:3a:91:6c:8a:44:51:16:ca:13:92:55:9f:45:df:74:5c:
+         9c:ee:6a:83:db:0b:52:2c:68:3b:ac:6e:86:d8:1d:23:6d:95:
+         f5:87:d9:c9:14:0a:0f:2b:99:b1:d6:b3:38:73:a6:6e:d8:d7:
+         d9:1a:c0:33:98:6e:63:14:37:10:5b:c2:7d:03:37:49:2d:d7:
+         26:56:99:a2:ce:03:01:d0:b2:25:94:a2:69:e8:e0:30:42:11:
+         44:a9:89:d7:96:d4:c0:10:7a:64:79:88:d1:2b:e2:8a:b6:4a:
+         32:6f:2a:e1:2b:43:2a:44:b2:42:74:c8:27:1e:da:f2:9b:ac:
+         c6:03:4a:d0:c3:44:87:41:ec:cd:a5:9b:68:e2:e3:fd:01:fe:
+         40:a3:c2:e7
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujNVyR7A
-kRc66zCM7SPMHW0e525OrCNjI65IhxNhDwwL7nL3wnuVLnslNAi24fWuUL+Pz4Fu
-5iafkmHE+0SeIwnfE4C8OFvbCGxoYEbU4+BBkcRC1dl10sTfKbgEu5bcneQL996r
-z5CtIsirVmWEADu55im14paIvZXlEG1Xq77R9GG7HbR/+QLbSNMhnfEDd7/5yvNO
-LUQcKB3FTzAbCotxDl+GCj+Xf0emojxgAsbovelSsQvLU9QJ9LYgI7SJCf8aYejd
-rBlNvpQeYCTUbIkDOsREW918WTe3DINAJA7tqwLPzZPSPV3gxsTFHRoB0eF3WGKQ
-4YOv0u4x8ykMHwIDAQABo4HLMIHIMB0GA1UdDgQWBBQT97PVHMljvTokAUOuSiaW
-RlX18DAfBgNVHSMEGDAWgBRfseLFWOvvc9wVow+OJAxsZ2UABDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxUpFMh16
+R5Jz0K9KkzFtW6azaJ5GozRedcynCdrKNM9s7XT7l/XEFG/jePQcPdMqbx4f72Eq
+pfHmhwtnBnkQ1i388SJfKIpHILsp9Volit4Cc4FaW5SE917kjljmKSEL4oYPMACe
+pnHlVn23vkNtodV1a0rvejIrnRueT6aaIaTtq0dqr2bTZPPNEQpeeOzIYZUnRWis
+QcASc8Yf8EUDuqX5yc4eqM8+nCgcED7VdoRi9elFRFT2095bWVIHn+GYfWbR2qpn
+5tHpV79uinWPPKAnegeAAVWy5ggqRY4rfCvY3CHCY2PV/pNICIsWS0hOjcD/8Uli
+pHt5Ju9pjHGnIQIDAQABo4HLMIHIMB0GA1UdDgQWBBTKuOksgyzBulHhy7Z4yJSo
+RQlFYzAfBgNVHSMEGDAWgBTj0rxTDu3TBrvs5H7QM94adwpiqDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AKVDhy7QLFHfp6pItDj8HW/J2yMydfLRUkXqSokf6RAMIg1wPvDBz7eoza/UM5kU
-bmK5qA+mLHXd2HmI/MvEfmSxL3oLsqRsgil9IzLT3qiQqHf4MxPpPkILMuhQ4K8x
-L7nlvrfHFsqnlp6VJNLBs99wX3uKM2tVdugYMmYOmmDP3DAeOBUFbsxKHucu4Fre
-6oShzgT923TW/rZNa4Y4InjxPrrci4WmL1YQH324lgBM1qP6k/0bKWRAfPhlP3OK
-fj5yx84ZdFEhJl0tQaCVyY9w/SpgerD85RRlmj5oLEpHG1qXijGpGhrJ/OO+yd1l
-DzMr+dloW1QixNymIUJs7GQ=
+AA/K+DU92qG65E3dSLY4ptnyiC2uXPN5TNSB2KseMuVa+lwS6LyzbORcGYuAJMiN
+FAfMLXU52Od8jT4D3hkv4HwHJoWqDZIRl7Xlp/kExSK+gjUQ9Ct6X0rcwOFkw19i
+45/N+iLE5GVbDOa9+ASwOpFsikRRFsoTklWfRd90XJzuaoPbC1IsaDusbobYHSNt
+lfWH2ckUCg8rmbHWszhzpm7Y19kawDOYbmMUNxBbwn0DN0kt1yZWmaLOAwHQsiWU
+omno4DBCEUSpideW1MAQemR5iNEr4oq2SjJvKuErQypEskJ0yCce2vKbrMYDStDD
+RIdB7M2lm2ji4/0B/kCjwuc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:df:9c:45:02:46:38:eb:d4:64:cd:8e:95:65:63:
-                    d5:e6:71:8b:67:13:d8:bc:6d:64:73:d7:40:17:79:
-                    80:a4:8d:8e:5f:bf:5e:48:b0:2f:bc:49:08:71:b4:
-                    80:38:00:cd:e9:ee:2e:6e:73:8a:77:56:b4:b3:d0:
-                    e3:0c:40:c9:ca:1f:9b:a0:89:68:07:34:cd:f4:f4:
-                    b9:a2:c1:ca:42:0e:da:90:cf:95:89:3a:3c:de:ad:
-                    a6:ff:49:6c:e2:5e:f5:0b:ff:be:06:ee:ab:e1:81:
-                    e9:da:a3:b8:d5:63:af:5e:10:63:49:23:0a:1d:ca:
-                    3e:bc:96:6e:82:5c:4f:ce:56:a7:8f:53:34:65:cb:
-                    47:88:3e:38:4d:71:b6:8a:06:e4:ed:4f:d2:df:59:
-                    3e:a7:03:a7:be:c2:14:a6:cf:9e:4b:c8:a3:25:21:
-                    b2:3e:f8:cd:65:de:fc:0e:52:fd:fa:cf:d3:07:af:
-                    79:53:11:bf:e6:77:ce:d8:1a:4b:4f:cb:d2:35:28:
-                    f8:5a:4b:05:a2:dd:88:e1:54:ac:1a:15:8d:54:a2:
-                    b7:ac:66:7a:f8:4a:2a:75:94:15:b3:44:c2:05:ff:
-                    e3:a0:34:40:84:00:39:6d:6d:e1:8e:16:f3:d3:60:
-                    2b:95:2f:fc:74:6e:b1:83:b7:0b:9d:9e:d8:34:45:
-                    21:f7
+                    00:b1:cc:77:be:73:84:5e:fd:71:f9:35:59:4c:a4:
+                    3c:83:2a:bb:cd:49:ee:69:c2:35:b9:00:8a:0c:29:
+                    49:52:f2:89:ff:87:5a:99:e3:d7:1d:99:c8:2a:8b:
+                    d8:83:44:65:89:a9:41:46:71:8a:49:73:9e:c3:96:
+                    ed:12:b4:a6:ae:ba:ab:84:28:79:3d:2f:c7:37:4b:
+                    85:35:37:59:94:55:2f:d0:d5:1c:c6:32:85:17:c3:
+                    2d:0f:5b:92:be:75:2a:9f:05:67:74:37:59:b5:c6:
+                    34:d6:7c:56:b8:d2:a2:13:d1:41:71:84:df:4b:10:
+                    af:63:8d:83:6d:87:c2:aa:c1:ba:9e:0a:bc:57:36:
+                    09:9d:5a:a6:e4:31:a6:8a:f1:82:5c:4f:cd:cf:79:
+                    69:6f:51:89:63:82:e1:0e:78:a7:bf:43:d1:c5:be:
+                    12:87:81:10:67:13:67:da:36:6f:37:03:12:32:39:
+                    62:1f:a4:43:5d:d4:65:e3:44:4c:ca:da:9d:1c:22:
+                    60:00:3d:fd:d1:8e:66:e2:e3:1f:d1:72:b3:53:4e:
+                    2f:9b:2f:67:72:f2:9c:b7:c7:a3:0b:27:75:85:c9:
+                    d3:90:7c:1c:59:ae:b9:47:25:57:08:51:45:f0:8b:
+                    a0:37:62:a9:7e:3e:ee:53:08:47:c7:d5:e4:29:b1:
+                    7c:4d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
             X509v3 Authority Key Identifier: 
-                keyid:5F:B1:E2:C5:58:EB:EF:73:DC:15:A3:0F:8E:24:0C:6C:67:65:00:04
+                keyid:E3:D2:BC:53:0E:ED:D3:06:BB:EC:E4:7E:D0:33:DE:1A:77:0A:62:A8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         98:24:67:cd:0c:c3:0f:c5:09:c1:b3:b2:c3:eb:90:d5:1b:7e:
-         ce:45:7e:e8:f9:ae:bd:54:46:58:4e:0f:b3:65:30:45:98:3e:
-         02:bf:a0:a9:e6:9c:69:f7:94:c8:bc:3d:33:ed:ac:52:5e:65:
-         58:f1:ef:4d:bd:bf:39:65:62:e1:75:35:b2:27:92:fa:9b:3d:
-         92:ed:51:f3:73:9a:73:2f:2f:61:2a:1d:34:e0:a1:fa:fc:b3:
-         dc:24:40:af:14:fd:d5:26:d0:5e:cb:fd:05:8b:88:f5:5c:0f:
-         6f:75:68:c5:32:f1:1d:cd:a2:be:b2:66:0c:1a:4c:d6:df:1b:
-         e4:09:b9:bf:32:41:59:ca:bc:48:33:b1:ec:6a:fa:4d:dc:72:
-         ae:96:15:29:35:78:85:96:f9:64:05:75:50:b3:3e:b0:f8:15:
-         7c:06:54:ff:36:98:2a:6d:4f:33:b0:78:1c:d3:be:12:2d:5b:
-         b4:37:2b:04:1b:d8:ce:28:db:9c:6d:49:e8:6f:f6:45:75:0a:
-         fb:69:dc:71:63:cd:c6:17:84:4b:8a:14:a0:ef:42:6a:6f:f2:
-         a8:76:e9:c6:4b:94:d2:24:f5:aa:80:d2:b6:81:17:c6:7d:7d:
-         88:36:fe:26:44:cf:36:5a:5e:de:c4:34:da:54:1e:89:1f:d6:
-         98:9e:3c:f7
+         62:ea:d8:8a:ac:91:27:7c:7e:b1:ab:a4:5e:80:2c:2a:88:0e:
+         fe:f4:0e:58:6a:78:b7:84:86:fa:fa:a6:44:28:40:a1:ca:61:
+         98:b7:23:14:64:15:67:20:c9:2c:83:11:de:62:9d:af:9f:bb:
+         46:7b:c5:53:8a:77:88:bb:ef:04:7a:fe:d2:12:98:60:4f:9e:
+         e7:0d:a5:68:41:59:9b:1e:02:4d:62:50:ee:85:e0:ce:5a:61:
+         6e:eb:7c:a7:4e:1a:2c:16:53:72:89:8a:45:0a:42:b0:da:7b:
+         bd:dd:22:c5:b7:f4:fc:7d:ff:4c:04:93:d2:1a:5e:78:de:b6:
+         07:65:19:0e:4d:51:7f:37:e6:05:ac:61:42:ef:65:14:84:7e:
+         03:80:3a:24:23:22:38:3d:60:36:45:60:d6:a5:37:f7:94:27:
+         a8:e9:91:93:61:f0:1f:20:ac:3b:5f:62:d7:f0:28:1b:aa:46:
+         4b:5e:36:f6:11:c7:68:d1:39:61:2d:a9:a5:8d:88:b0:bf:92:
+         35:c1:7b:d4:ea:6b:d4:b7:8a:8b:c7:d9:79:93:2e:aa:73:a7:
+         1e:4e:70:8d:6a:7d:1a:2b:0e:cf:7f:f0:5b:be:ec:5f:bf:f2:
+         c7:da:be:c2:93:96:80:fc:e1:2a:19:d8:58:53:36:09:e0:39:
+         ea:1c:9a:76
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+cRQJGOOvUZM2OlWVj
-1eZxi2cT2LxtZHPXQBd5gKSNjl+/XkiwL7xJCHG0gDgAzenuLm5zindWtLPQ4wxA
-ycofm6CJaAc0zfT0uaLBykIO2pDPlYk6PN6tpv9JbOJe9Qv/vgbuq+GB6dqjuNVj
-r14QY0kjCh3KPryWboJcT85Wp49TNGXLR4g+OE1xtooG5O1P0t9ZPqcDp77CFKbP
-nkvIoyUhsj74zWXe/A5S/frP0weveVMRv+Z3ztgaS0/L0jUo+FpLBaLdiOFUrBoV
-jVSit6xmevhKKnWUFbNEwgX/46A0QIQAOW1t4Y4W89NgK5Uv/HRusYO3C52e2DRF
-IfcCAwEAAaOByzCByDAdBgNVHQ4EFgQUX7HixVjr73PcFaMPjiQMbGdlAAQwHwYD
-VR0jBBgwFoAUX7HixVjr73PcFaMPjiQMbGdlAAQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHMd75zhF79cfk1WUyk
+PIMqu81J7mnCNbkAigwpSVLyif+HWpnj1x2ZyCqL2INEZYmpQUZxiklznsOW7RK0
+pq66q4QoeT0vxzdLhTU3WZRVL9DVHMYyhRfDLQ9bkr51Kp8FZ3Q3WbXGNNZ8VrjS
+ohPRQXGE30sQr2ONg22HwqrBup4KvFc2CZ1apuQxporxglxPzc95aW9RiWOC4Q54
+p79D0cW+EoeBEGcTZ9o2bzcDEjI5Yh+kQ13UZeNETMranRwiYAA9/dGOZuLjH9Fy
+s1NOL5svZ3LynLfHowsndYXJ05B8HFmuuUclVwhRRfCLoDdiqX4+7lMIR8fV5Cmx
+fE0CAwEAAaOByzCByDAdBgNVHQ4EFgQU49K8Uw7t0wa77OR+0DPeGncKYqgwHwYD
+VR0jBBgwFoAU49K8Uw7t0wa77OR+0DPeGncKYqgwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCYJGfNDMMP
-xQnBs7LD65DVG37ORX7o+a69VEZYTg+zZTBFmD4Cv6Cp5pxp95TIvD0z7axSXmVY
-8e9Nvb85ZWLhdTWyJ5L6mz2S7VHzc5pzLy9hKh004KH6/LPcJECvFP3VJtBey/0F
-i4j1XA9vdWjFMvEdzaK+smYMGkzW3xvkCbm/MkFZyrxIM7HsavpN3HKulhUpNXiF
-lvlkBXVQsz6w+BV8BlT/NpgqbU8zsHgc074SLVu0NysEG9jOKNucbUnob/ZFdQr7
-adxxY83GF4RLihSg70Jqb/KodunGS5TSJPWqgNK2gRfGfX2INv4mRM82Wl7exDTa
-VB6JH9aYnjz3
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBi6tiKrJEn
+fH6xq6RegCwqiA7+9A5Yani3hIb6+qZEKEChymGYtyMUZBVnIMksgxHeYp2vn7tG
+e8VTineIu+8Eev7SEphgT57nDaVoQVmbHgJNYlDuheDOWmFu63ynThosFlNyiYpF
+CkKw2nu93SLFt/T8ff9MBJPSGl543rYHZRkOTVF/N+YFrGFC72UUhH4DgDokIyI4
+PWA2RWDWpTf3lCeo6ZGTYfAfIKw7X2LX8CgbqkZLXjb2Ecdo0TlhLamljYiwv5I1
+wXvU6mvUt4qLx9l5ky6qc6ceTnCNan0aKw7Pf/Bbvuxfv/LH2r7Ck5aA/OEqGdhY
+UzYJ4DnqHJp2
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Time is after notAfter
 
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem b/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
index cdb2ede..198ed24 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:fa:1c:ab:da:95:23:00:c5:f7:9d:3e:fa:be:
-                    50:46:36:b3:b8:6c:9b:ed:57:22:ae:c1:19:65:f5:
-                    53:9b:55:48:bd:9f:59:95:8f:a6:a8:33:25:87:f8:
-                    69:be:58:ac:73:1f:aa:5b:0d:8d:ed:65:53:a8:fd:
-                    a4:99:92:d7:9f:a2:ce:9d:09:a7:af:65:dd:e7:1c:
-                    18:9d:61:6e:3f:05:7c:09:10:03:50:90:03:3a:20:
-                    7c:b5:80:f3:16:8b:d8:1e:c9:e4:53:5d:1c:6e:e2:
-                    b3:b3:9d:87:fa:2b:47:25:fe:ee:8b:4e:22:35:cc:
-                    22:59:94:78:13:57:67:69:ab:99:14:70:94:2c:0e:
-                    32:e3:bc:89:b4:e4:b1:09:4b:ae:bd:6d:7e:cd:a8:
-                    ff:ee:37:8b:1a:25:5e:ae:21:51:e2:cb:9c:6a:a5:
-                    27:23:62:c7:62:89:a1:69:13:c3:03:ec:f9:a7:5a:
-                    90:e2:e0:c5:c7:6d:ec:76:f5:76:88:f5:15:1a:4d:
-                    00:da:38:51:ea:03:16:a4:90:74:87:6e:ba:23:3a:
-                    91:58:a0:94:6c:3c:8c:f1:c6:2f:69:9e:41:1a:50:
-                    ea:3b:d1:a6:d2:9b:50:04:63:ca:b7:c1:eb:04:07:
-                    89:40:43:07:1e:84:d5:6c:08:01:50:7f:7b:aa:9e:
-                    c4:4d
+                    00:c0:9c:7a:54:dd:91:b9:88:ea:c9:1c:de:ab:33:
+                    a0:17:76:a0:ea:f3:d2:23:3d:ed:2d:69:ea:ae:b1:
+                    13:39:c7:0b:1e:f3:17:6d:f3:3b:70:3a:c7:c8:dd:
+                    5a:23:9a:5c:60:86:85:d9:43:45:76:fd:c0:15:3d:
+                    32:de:54:36:ef:69:96:8e:36:fe:01:6a:03:ca:ba:
+                    3e:93:65:b3:24:d4:af:15:e2:0c:ab:66:a5:3b:b1:
+                    8e:a9:33:3f:d7:da:c5:05:1e:fd:c0:28:c5:b0:59:
+                    b0:f3:fe:1c:76:5c:1d:c4:a5:c8:de:e7:90:da:31:
+                    fa:29:0e:c0:03:74:8c:75:e2:42:b3:41:ea:00:bd:
+                    d1:44:94:c2:8b:d6:74:82:db:e1:b7:8b:b9:ac:69:
+                    23:59:03:53:bc:95:bc:54:e1:2b:20:05:e5:88:f6:
+                    a2:f8:b5:bc:5b:9c:be:26:37:87:71:45:f8:7f:ea:
+                    1a:bc:71:23:f0:ea:6e:8f:92:29:7f:5b:a4:87:f2:
+                    7e:1d:fd:52:73:eb:80:75:df:0b:93:52:1c:04:83:
+                    15:9b:75:53:41:7f:4d:4a:30:32:d7:14:f7:32:e3:
+                    ac:94:de:a3:7f:3d:48:8e:2d:ab:6f:57:c2:e5:34:
+                    98:c3:d5:06:b2:fb:37:53:55:b7:5f:fe:2a:79:e0:
+                    b8:ab
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BD:E0:2F:8E:DD:4A:65:2F:EE:52:E4:0F:3B:8A:28:80:D6:17:C4:76
+                B7:E2:28:7D:8F:77:36:F1:C0:CB:79:8B:74:69:91:F2:BA:87:CC:E9
             X509v3 Authority Key Identifier: 
-                keyid:A8:9E:04:25:6D:55:C9:D7:11:47:D3:DD:67:71:0E:7E:88:89:49:71
+                keyid:1A:FB:8F:0C:10:69:F1:A4:80:32:09:03:A4:26:A9:66:2C:EF:4E:2A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         95:07:d3:f3:57:d3:2d:c3:f9:d5:4a:d4:54:85:1f:25:3d:3c:
-         e8:34:6f:6e:bc:5a:b3:50:fd:4f:b5:cf:87:54:26:7b:ab:4d:
-         5d:28:af:29:d1:24:ad:75:5d:3f:5b:68:63:b3:c0:20:82:8e:
-         c4:7f:58:7c:74:ea:d8:0d:50:11:63:43:ee:67:af:9f:16:c3:
-         89:f1:15:a6:94:a9:72:bb:0c:40:48:54:25:87:e7:94:6f:34:
-         f5:83:03:ed:2a:6f:b6:2d:b7:70:4d:8b:6e:31:80:0c:dd:3d:
-         9a:84:5a:55:ce:b7:08:a9:15:59:66:ec:a9:a1:4f:79:73:16:
-         a2:6a:44:1f:7a:6d:69:f2:de:a0:50:07:da:01:4b:22:2e:40:
-         f4:8b:e7:7c:f3:cd:27:fd:92:eb:fd:e8:4a:da:32:91:6a:ec:
-         b8:0c:49:db:f8:73:5e:a4:83:a2:c2:40:dd:e0:78:f9:3c:83:
-         39:e4:22:88:7c:d1:cf:58:4a:4c:f1:0b:4f:21:94:c4:fb:4e:
-         a8:c4:84:ce:6a:7c:ff:0c:9b:1f:c6:db:67:22:6d:29:2f:28:
-         81:60:c2:a3:ab:af:fa:f9:a5:55:83:35:97:1d:17:23:2a:32:
-         75:92:7b:2b:67:99:3c:25:f4:b5:c8:74:ac:05:7e:59:43:5c:
-         47:38:16:9b
+         36:fd:d6:dd:d4:38:e7:81:d2:ee:2a:4b:3e:d0:0d:7b:2e:56:
+         9e:99:67:f1:26:77:38:cb:b7:8b:8d:ec:64:6f:cb:c6:96:2d:
+         39:d4:da:8c:34:84:08:7d:20:fb:cd:2f:25:26:bb:1b:69:d5:
+         07:e8:d5:2f:8f:fb:c1:32:16:03:b1:ec:6c:a9:62:63:4d:57:
+         8a:39:2f:df:3e:2a:57:7b:22:5c:43:31:ae:d6:de:a0:2c:77:
+         c4:ef:d3:d5:06:db:61:5b:68:a2:3b:63:36:07:60:fa:8b:ed:
+         c9:70:89:14:7f:6d:26:3f:12:d6:04:8b:22:46:f3:a2:e8:42:
+         16:3e:b2:0a:d1:02:fe:01:12:48:e9:3e:7a:40:2d:f3:c2:db:
+         ed:69:88:52:68:a7:bd:12:3a:66:08:55:ce:a7:06:4c:ec:ff:
+         5c:3e:ba:6e:a3:5a:1b:60:30:7b:1e:87:ae:a4:9b:c5:57:cd:
+         95:31:1f:7f:e0:b4:7f:a9:23:fb:70:19:c1:c4:c8:ee:52:e2:
+         8b:5d:2f:78:45:69:1a:29:0c:25:5a:0d:d2:1f:70:06:70:c2:
+         4b:03:e1:47:0d:38:f8:49:1a:87:d0:53:58:1d:8e:b9:e8:c2:
+         a6:1c:c1:e8:d2:e9:40:85:3c:c7:81:21:f4:e7:ed:d3:29:28:
+         61:dd:54:4a
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+hyr
-2pUjAMX3nT76vlBGNrO4bJvtVyKuwRll9VObVUi9n1mVj6aoMyWH+Gm+WKxzH6pb
-DY3tZVOo/aSZktefos6dCaevZd3nHBidYW4/BXwJEANQkAM6IHy1gPMWi9geyeRT
-XRxu4rOznYf6K0cl/u6LTiI1zCJZlHgTV2dpq5kUcJQsDjLjvIm05LEJS669bX7N
-qP/uN4saJV6uIVHiy5xqpScjYsdiiaFpE8MD7PmnWpDi4MXHbex29XaI9RUaTQDa
-OFHqAxakkHSHbrojOpFYoJRsPIzxxi9pnkEaUOo70abSm1AEY8q3wesEB4lAQwce
-hNVsCAFQf3uqnsRNAgMBAAGjgekwgeYwHQYDVR0OBBYEFL3gL47dSmUv7lLkDzuK
-KIDWF8R2MB8GA1UdIwQYMBaAFKieBCVtVcnXEUfT3WdxDn6IiUlxMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAnHpU
+3ZG5iOrJHN6rM6AXdqDq89IjPe0taequsRM5xwse8xdt8ztwOsfI3VojmlxghoXZ
+Q0V2/cAVPTLeVDbvaZaONv4BagPKuj6TZbMk1K8V4gyrZqU7sY6pMz/X2sUFHv3A
+KMWwWbDz/hx2XB3Epcje55DaMfopDsADdIx14kKzQeoAvdFElMKL1nSC2+G3i7ms
+aSNZA1O8lbxU4SsgBeWI9qL4tbxbnL4mN4dxRfh/6hq8cSPw6m6Pkil/W6SH8n4d
+/VJz64B13wuTUhwEgxWbdVNBf01KMDLXFPcy46yU3qN/PUiOLatvV8LlNJjD1Qay
++zdTVbdf/ip54LirAgMBAAGjgekwgeYwHQYDVR0OBBYEFLfiKH2PdzbxwMt5i3Rp
+kfK6h8zpMB8GA1UdIwQYMBaAFBr7jwwQafGkgDIJA6QmqWYs704qMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAlQfT81fTLcP51UrUVIUf
-JT086DRvbrxas1D9T7XPh1Qme6tNXSivKdEkrXVdP1toY7PAIIKOxH9YfHTq2A1Q
-EWND7mevnxbDifEVppSpcrsMQEhUJYfnlG809YMD7Spvti23cE2LbjGADN09moRa
-Vc63CKkVWWbsqaFPeXMWompEH3ptafLeoFAH2gFLIi5A9IvnfPPNJ/2S6/3oStoy
-kWrsuAxJ2/hzXqSDosJA3eB4+TyDOeQiiHzRz1hKTPELTyGUxPtOqMSEzmp8/wyb
-H8bbZyJtKS8ogWDCo6uv+vmlVYM1lx0XIyoydZJ7K2eZPCX0tch0rAV+WUNcRzgW
-mw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEANv3W3dQ454HS7ipLPtAN
+ey5Wnpln8SZ3OMu3i43sZG/LxpYtOdTajDSECH0g+80vJSa7G2nVB+jVL4/7wTIW
+A7HsbKliY01Xijkv3z4qV3siXEMxrtbeoCx3xO/T1QbbYVtoojtjNgdg+ovtyXCJ
+FH9tJj8S1gSLIkbzouhCFj6yCtEC/gESSOk+ekAt88Lb7WmIUminvRI6ZghVzqcG
+TOz/XD66bqNaG2Awex6HrqSbxVfNlTEff+C0f6kj+3AZwcTI7lLii10veEVpGikM
+JVoN0h9wBnDCSwPhRw04+Ekah9BTWB2OuejCphzB6NLpQIU8x4Eh9Oft0ykoYd1U
+Sg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c0:b1:53:c8:38:a8:e5:4e:90:c9:19:52:07:46:
-                    ec:7c:87:46:9e:ac:a4:c9:51:89:9c:55:43:98:a0:
-                    58:60:59:ce:73:e2:53:df:4a:e5:fb:ee:57:a9:9c:
-                    da:d3:c4:76:6b:82:77:94:ee:83:39:e5:d6:6e:ed:
-                    e1:3f:6e:80:a0:51:82:85:79:14:53:b6:aa:15:d8:
-                    d7:7a:1a:96:26:8f:09:b8:29:b4:c8:6c:a7:80:e6:
-                    10:18:ec:d7:f7:b0:ff:59:19:45:f8:37:de:28:bd:
-                    56:4f:67:53:c1:80:44:7d:80:b5:dd:d6:6f:bf:3b:
-                    1f:02:f3:00:67:88:7d:36:65:13:39:7d:3e:a8:35:
-                    13:54:e4:91:c8:ee:f1:53:fd:af:f7:3b:f8:59:e0:
-                    bc:e0:1e:ac:41:01:d1:b8:01:ee:ae:d2:39:b8:fa:
-                    57:6e:b2:7a:98:5f:51:ac:d6:6a:38:80:6b:01:64:
-                    13:96:d7:0b:74:5f:76:82:d9:44:9d:47:26:cc:59:
-                    9a:22:3c:72:eb:20:9a:d9:2b:b1:dd:cd:0a:54:0b:
-                    77:0b:83:2c:0d:bf:b4:62:4a:fc:87:84:4f:29:8d:
-                    fc:6c:b9:3a:4c:8b:45:85:2b:48:7d:2c:33:1f:ac:
-                    8b:77:39:8c:cb:0c:f4:08:93:4c:ec:34:15:be:81:
-                    09:a3
+                    00:98:93:d4:b5:fc:f1:0f:29:a9:39:6a:d1:f8:5b:
+                    38:c4:35:70:4a:9a:32:32:4d:e1:06:9d:a2:03:60:
+                    0f:61:82:cd:ee:1e:5d:4a:cf:20:d0:6c:62:42:67:
+                    89:07:18:46:fc:d5:15:8f:59:39:48:84:02:ef:59:
+                    ba:7b:8c:e7:ec:ff:4a:a5:2c:a8:fd:de:8a:94:d9:
+                    19:d3:16:16:86:57:d4:35:7b:46:00:f8:29:5b:9e:
+                    f7:28:1a:3b:7a:13:ac:57:75:0b:3f:3b:0b:9a:04:
+                    10:d0:40:02:7a:6e:b3:aa:41:c5:7b:0a:ad:c4:dc:
+                    a7:d3:23:4e:9a:96:0e:45:e3:fe:a3:a2:4e:cf:ce:
+                    ec:69:b5:33:c0:f5:58:a4:d0:6a:3a:4d:5b:7a:71:
+                    95:13:51:e5:9b:03:c5:15:34:4e:a7:35:6d:9e:70:
+                    37:c1:d3:07:98:5e:af:db:71:49:de:62:72:5a:1f:
+                    dd:ee:3e:4e:aa:c6:bd:7a:47:e5:6d:29:a0:c0:85:
+                    00:4f:26:9b:8c:f3:e4:15:88:a8:50:7c:d5:02:ab:
+                    27:10:48:ba:ba:93:97:3f:33:00:1b:3e:51:a2:50:
+                    8c:33:e3:c9:cc:d5:99:b9:8c:f4:ba:52:73:59:ba:
+                    71:d4:7f:6c:09:0f:e8:0c:35:fc:52:6f:2e:40:cd:
+                    45:35
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A8:9E:04:25:6D:55:C9:D7:11:47:D3:DD:67:71:0E:7E:88:89:49:71
+                1A:FB:8F:0C:10:69:F1:A4:80:32:09:03:A4:26:A9:66:2C:EF:4E:2A
             X509v3 Authority Key Identifier: 
-                keyid:29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                keyid:E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         57:37:54:5c:fd:ce:4e:4c:0f:b5:37:13:0d:0e:5f:dd:d8:4c:
-         17:53:38:e6:07:65:6c:67:80:e0:75:25:26:78:7b:2e:b8:1a:
-         6c:31:44:a1:5f:73:83:6d:34:1e:ff:76:42:d5:ad:ab:c0:b9:
-         cc:25:9e:88:7f:be:29:db:49:25:08:5d:3b:7d:43:2e:85:66:
-         ff:fe:b5:d4:aa:21:7a:b8:5a:b4:49:ab:c6:ef:8d:28:64:f4:
-         ea:be:64:33:c4:94:c6:31:f5:cc:55:cb:f1:20:be:e6:85:03:
-         32:99:61:e0:09:3c:e6:df:61:9a:c5:45:ea:f8:a3:f8:c1:6d:
-         ff:7b:44:04:8e:7f:74:89:ab:39:5a:fc:a6:09:77:9c:5d:1c:
-         99:a8:db:bc:2a:8e:19:25:8d:e3:10:37:94:42:e7:37:9c:16:
-         ba:be:4b:67:94:5f:18:2e:ae:e3:fd:ef:15:12:7d:4b:5a:47:
-         b7:45:7a:ee:27:3f:e1:6b:42:02:75:40:36:50:fd:6c:1e:de:
-         8a:b9:f7:d5:f8:69:0c:fd:58:65:35:64:a2:ca:c5:1e:b3:aa:
-         a0:4b:42:22:00:e3:d8:e7:b4:e8:69:48:37:42:55:60:24:48:
-         9a:d8:42:9e:d9:cf:2b:3c:9e:b1:fc:2f:39:5d:b5:fe:e3:72:
-         44:e4:00:50
+         08:61:27:f8:7c:59:e5:b5:66:af:47:ce:5c:32:76:b3:48:4b:
+         c1:3c:63:75:42:c6:15:18:10:6f:82:28:4c:df:57:44:40:b4:
+         6a:93:f6:eb:a3:21:e5:01:3b:35:f4:df:ce:38:ea:47:be:7b:
+         9b:ee:1d:40:db:be:a4:4d:24:ce:73:95:40:f3:a0:8b:16:18:
+         16:f8:1c:40:8c:4d:09:85:d5:20:52:1e:3f:e4:47:58:4f:c6:
+         1d:01:b9:cc:30:4e:69:e0:4b:0a:fe:57:e3:0a:7b:dd:7b:6a:
+         57:47:6a:e5:d2:a5:63:95:3e:eb:9d:d4:14:a1:b4:ba:ed:dd:
+         f9:05:e1:8c:64:2b:29:d9:68:1d:27:58:e1:62:bb:95:0f:92:
+         82:4a:7e:2e:66:8f:a8:77:e0:11:7c:e2:bc:61:82:7e:b9:80:
+         c2:3c:4a:7d:dc:82:38:a6:9b:de:2d:92:ba:72:1e:aa:37:59:
+         67:5b:aa:9f:37:20:ac:d5:d7:00:4a:ea:8c:db:ed:f2:2e:a4:
+         5d:dc:66:6e:3a:58:3b:0a:c3:06:c9:1c:d8:57:8e:98:58:82:
+         66:a9:92:4d:28:54:27:3f:83:1a:c5:61:7c:e4:22:ed:32:2f:
+         8c:9a:22:2d:f2:b7:7e:14:06:3f:e3:55:aa:2c:a8:2d:87:f1:
+         b0:56:1e:ba
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLFTyDio
-5U6QyRlSB0bsfIdGnqykyVGJnFVDmKBYYFnOc+JT30rl++5XqZza08R2a4J3lO6D
-OeXWbu3hP26AoFGChXkUU7aqFdjXehqWJo8JuCm0yGyngOYQGOzX97D/WRlF+Dfe
-KL1WT2dTwYBEfYC13dZvvzsfAvMAZ4h9NmUTOX0+qDUTVOSRyO7xU/2v9zv4WeC8
-4B6sQQHRuAHurtI5uPpXbrJ6mF9RrNZqOIBrAWQTltcLdF92gtlEnUcmzFmaIjxy
-6yCa2Sux3c0KVAt3C4MsDb+0Ykr8h4RPKY38bLk6TItFhStIfSwzH6yLdzmMywz0
-CJNM7DQVvoEJowIDAQABo4HLMIHIMB0GA1UdDgQWBBSongQlbVXJ1xFH091ncQ5+
-iIlJcTAfBgNVHSMEGDAWgBQpE4LuJRB/QCPWpxsoJTWK6LaqKDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmJPUtfzx
+DympOWrR+Fs4xDVwSpoyMk3hBp2iA2APYYLN7h5dSs8g0GxiQmeJBxhG/NUVj1k5
+SIQC71m6e4zn7P9KpSyo/d6KlNkZ0xYWhlfUNXtGAPgpW573KBo7ehOsV3ULPzsL
+mgQQ0EACem6zqkHFewqtxNyn0yNOmpYOReP+o6JOz87sabUzwPVYpNBqOk1benGV
+E1HlmwPFFTROpzVtnnA3wdMHmF6v23FJ3mJyWh/d7j5Oqsa9ekflbSmgwIUATyab
+jPPkFYioUHzVAqsnEEi6upOXPzMAGz5RolCMM+PJzNWZuYz0ulJzWbpx1H9sCQ/o
+DDX8Um8uQM1FNQIDAQABo4HLMIHIMB0GA1UdDgQWBBQa+48MEGnxpIAyCQOkJqlm
+LO9OKjAfBgNVHSMEGDAWgBTgWF3rs7kD3tgeQnqmu25fMkpQtzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AFc3VFz9zk5MD7U3Ew0OX93YTBdTOOYHZWxngOB1JSZ4ey64GmwxRKFfc4NtNB7/
-dkLVravAucwlnoh/vinbSSUIXTt9Qy6FZv/+tdSqIXq4WrRJq8bvjShk9Oq+ZDPE
-lMYx9cxVy/EgvuaFAzKZYeAJPObfYZrFRer4o/jBbf97RASOf3SJqzla/KYJd5xd
-HJmo27wqjhkljeMQN5RC5zecFrq+S2eUXxguruP97xUSfUtaR7dFeu4nP+FrQgJ1
-QDZQ/Wwe3oq599X4aQz9WGU1ZKLKxR6zqqBLQiIA49jntOhpSDdCVWAkSJrYQp7Z
-zys8nrH8Lzldtf7jckTkAFA=
+AAhhJ/h8WeW1Zq9HzlwydrNIS8E8Y3VCxhUYEG+CKEzfV0RAtGqT9uujIeUBOzX0
+38446ke+e5vuHUDbvqRNJM5zlUDzoIsWGBb4HECMTQmF1SBSHj/kR1hPxh0Bucww
+TmngSwr+V+MKe917aldHauXSpWOVPuud1BShtLrt3fkF4YxkKynZaB0nWOFiu5UP
+koJKfi5mj6h34BF84rxhgn65gMI8Sn3cgjimm94tkrpyHqo3WWdbqp83IKzV1wBK
+6ozb7fIupF3cZm46WDsKwwbJHNhXjphYgmapkk0oVCc/gxrFYXzkIu0yL4yaIi3y
+t34UBj/jVaosqC2H8bBWHro=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b4:d2:a3:a5:24:1a:21:0c:58:52:09:77:f1:ab:
-                    2d:49:cb:b0:e5:e2:3c:12:9a:bd:a8:df:36:37:fe:
-                    be:97:6f:18:b0:8e:51:08:94:c1:8e:3e:8f:f0:ae:
-                    23:19:5e:0a:eb:5e:02:a1:bb:be:61:83:39:cb:52:
-                    e1:8f:0e:ba:61:c4:4b:53:09:c3:f7:38:a3:95:fc:
-                    89:86:06:59:bc:0c:b5:e1:a2:d3:6d:d8:84:de:75:
-                    80:7b:1d:04:04:b0:94:03:07:42:b4:73:52:96:b0:
-                    68:3c:08:e3:b3:af:e9:29:60:f6:4f:6f:8a:42:fc:
-                    85:63:f6:18:d6:12:6c:6e:94:eb:c3:c0:60:12:19:
-                    f8:61:d6:47:72:46:1a:cd:ed:6a:0b:65:cc:91:68:
-                    ec:a7:c7:f1:c8:7a:44:5c:1e:e8:8e:2b:ed:50:82:
-                    a2:1d:31:31:be:bd:06:56:52:20:bf:37:25:3d:cf:
-                    18:7f:87:94:ba:c7:9d:6e:68:7f:96:29:20:b7:dc:
-                    fc:73:d9:26:82:6e:f1:97:c2:48:9d:71:35:5c:3e:
-                    b6:86:69:e5:b5:1a:e9:08:4e:dc:dd:c5:0d:e1:4e:
-                    08:97:0a:41:1a:39:56:b1:31:02:0f:c2:e2:94:a0:
-                    3a:e0:d8:77:6e:a9:b6:fe:1d:8e:38:ad:52:e6:de:
-                    59:e3
+                    00:c8:eb:a7:88:6d:a0:10:2f:9d:5a:19:d8:19:b2:
+                    37:74:77:59:93:63:03:af:79:18:16:72:7c:86:e2:
+                    9c:96:74:d8:0a:fc:88:1f:4a:0d:ed:54:84:da:56:
+                    1f:f6:af:e1:53:8d:0c:9f:d2:fb:43:03:f7:00:de:
+                    25:26:43:22:d6:51:d3:4c:50:f1:24:c5:f8:74:98:
+                    30:ab:30:57:b6:5d:ed:9c:7a:12:1d:f2:09:9f:b2:
+                    95:a5:90:65:c0:e1:35:a2:20:09:a3:6c:23:c1:20:
+                    a2:17:49:3b:39:77:ee:21:33:f8:d4:c2:51:07:b9:
+                    79:80:c4:32:c2:d6:72:a2:ec:1e:2a:a0:2a:2a:39:
+                    7b:8e:70:2e:3e:d4:31:11:b9:19:7e:b5:0e:7d:75:
+                    9f:7a:3e:3b:ad:9b:8d:6a:65:27:c9:0b:9b:c6:56:
+                    e8:cf:a6:51:95:7e:b7:d6:d2:a2:50:46:31:51:71:
+                    e5:94:79:1b:15:1f:3d:b4:45:6b:6c:bc:11:1e:6a:
+                    be:c6:08:47:4b:eb:8d:5d:cc:14:a7:e3:a8:fc:c2:
+                    84:9b:33:f9:72:41:8b:e3:54:ac:0b:52:f1:1f:f8:
+                    44:ee:c6:65:c9:4e:c6:65:35:2c:d4:86:3c:a1:17:
+                    69:ce:6b:e8:32:fb:6a:a9:2c:ce:0a:86:82:61:cc:
+                    a0:cd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
             X509v3 Authority Key Identifier: 
-                keyid:29:13:82:EE:25:10:7F:40:23:D6:A7:1B:28:25:35:8A:E8:B6:AA:28
+                keyid:E0:58:5D:EB:B3:B9:03:DE:D8:1E:42:7A:A6:BB:6E:5F:32:4A:50:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         6a:88:6c:4d:9f:ee:e6:a5:ec:19:64:e7:b9:86:03:c5:f0:32:
-         92:69:3b:35:03:b8:87:12:db:48:78:5d:44:3b:75:e2:3b:87:
-         7d:ef:96:83:93:06:93:fc:17:58:71:3e:c6:b0:8b:5b:13:2b:
-         c7:97:42:ed:3e:de:4a:96:cd:f1:df:3a:90:96:7f:f1:21:72:
-         90:58:9b:77:cc:80:2d:19:5a:b1:6f:d6:dd:c8:fc:b7:32:1d:
-         8f:77:d4:5e:f0:9d:e4:05:8a:ae:d9:7c:58:fa:00:6e:9f:f9:
-         9a:2e:11:25:8b:28:5c:4b:76:ef:62:4d:ff:55:bc:aa:77:fa:
-         87:33:3c:f5:a9:87:b5:d5:7f:e0:ef:51:a5:74:9a:04:5b:e9:
-         35:f8:e6:43:d0:82:9a:db:4a:90:df:56:20:1d:31:b1:56:bc:
-         73:0b:5e:91:bb:a6:62:37:fc:ba:dd:f7:24:69:54:95:c3:28:
-         41:68:21:16:9f:d6:32:b6:17:88:29:52:f6:d3:2b:98:2f:28:
-         78:c3:67:b3:76:83:df:a9:86:01:cd:c2:bf:e0:84:61:56:76:
-         f5:1f:12:d4:d1:fb:9e:c0:1b:22:c8:9e:05:4c:34:3b:93:54:
-         1e:0a:db:41:91:9a:07:8d:aa:f8:fd:8d:89:ec:eb:32:b3:10:
-         4f:52:53:68
+         64:1b:2f:a1:77:3a:56:af:6e:4c:38:25:09:0c:1e:54:d6:3b:
+         57:e4:0c:82:e1:43:25:d8:a8:10:91:a7:08:79:89:13:75:8b:
+         0a:a3:35:6d:e5:f5:2a:b2:ba:35:6e:84:db:2d:f0:4c:34:b6:
+         75:bb:37:83:45:fd:e4:ea:9b:b4:a3:74:48:7b:b4:c5:b5:91:
+         56:e1:dc:2d:f6:bd:80:32:b7:85:05:bb:71:6d:d5:83:2f:9c:
+         05:ad:9a:cb:f3:c1:4e:63:05:10:6b:4a:70:aa:da:98:16:3d:
+         f4:72:aa:1c:c9:87:71:26:e2:5d:c8:e4:ec:31:84:f7:e2:3d:
+         6f:89:ed:1f:2f:89:2a:24:bb:be:f0:4f:8c:b9:fa:02:a2:83:
+         4f:bd:23:6a:19:77:bb:7a:4f:64:57:c8:a6:17:2e:52:a6:7a:
+         b5:26:50:9c:37:bd:3e:ed:a9:13:1a:51:d1:a8:2c:c0:b8:7f:
+         68:8b:4c:ad:31:41:7d:f7:19:6a:f8:60:c5:96:50:b2:98:3b:
+         5e:91:fe:da:22:69:00:dd:d4:f8:98:db:62:b3:5c:cf:b2:b0:
+         31:de:2a:c1:d2:7f:5e:fc:1d:fd:bd:4c:14:53:72:17:3e:fd:
+         a0:85:28:34:ca:36:86:a7:59:2b:72:3a:aa:3f:18:cc:83:27:
+         62:91:2c:89
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTSo6UkGiEMWFIJd/Gr
-LUnLsOXiPBKavajfNjf+vpdvGLCOUQiUwY4+j/CuIxleCuteAqG7vmGDOctS4Y8O
-umHES1MJw/c4o5X8iYYGWbwMteGi023YhN51gHsdBASwlAMHQrRzUpawaDwI47Ov
-6Slg9k9vikL8hWP2GNYSbG6U68PAYBIZ+GHWR3JGGs3tagtlzJFo7KfH8ch6RFwe
-6I4r7VCCoh0xMb69BlZSIL83JT3PGH+HlLrHnW5of5YpILfc/HPZJoJu8ZfCSJ1x
-NVw+toZp5bUa6QhO3N3FDeFOCJcKQRo5VrExAg/C4pSgOuDYd26ptv4djjitUube
-WeMCAwEAAaOByzCByDAdBgNVHQ4EFgQUKROC7iUQf0Aj1qcbKCU1iui2qigwHwYD
-VR0jBBgwFoAUKROC7iUQf0Aj1qcbKCU1iui2qigwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMjrp4htoBAvnVoZ2Bmy
+N3R3WZNjA695GBZyfIbinJZ02Ar8iB9KDe1UhNpWH/av4VONDJ/S+0MD9wDeJSZD
+ItZR00xQ8STF+HSYMKswV7Zd7Zx6Eh3yCZ+ylaWQZcDhNaIgCaNsI8EgohdJOzl3
+7iEz+NTCUQe5eYDEMsLWcqLsHiqgKio5e45wLj7UMRG5GX61Dn11n3o+O62bjWpl
+J8kLm8ZW6M+mUZV+t9bSolBGMVFx5ZR5GxUfPbRFa2y8ER5qvsYIR0vrjV3MFKfj
+qPzChJsz+XJBi+NUrAtS8R/4RO7GZclOxmU1LNSGPKEXac5r6DL7aqkszgqGgmHM
+oM0CAwEAAaOByzCByDAdBgNVHQ4EFgQU4Fhd67O5A97YHkJ6prtuXzJKULcwHwYD
+VR0jBBgwFoAU4Fhd67O5A97YHkJ6prtuXzJKULcwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBqiGxNn+7m
-pewZZOe5hgPF8DKSaTs1A7iHEttIeF1EO3XiO4d975aDkwaT/BdYcT7GsItbEyvH
-l0LtPt5Kls3x3zqQln/xIXKQWJt3zIAtGVqxb9bdyPy3Mh2Pd9Re8J3kBYqu2XxY
-+gBun/maLhEliyhcS3bvYk3/Vbyqd/qHMzz1qYe11X/g71GldJoEW+k1+OZD0IKa
-20qQ31YgHTGxVrxzC16Ru6ZiN/y63fckaVSVwyhBaCEWn9YytheIKVL20yuYLyh4
-w2ezdoPfqYYBzcK/4IRhVnb1HxLU0fuewBsiyJ4FTDQ7k1QeCttBkZoHjar4/Y2J
-7OsysxBPUlNo
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBkGy+hdzpW
+r25MOCUJDB5U1jtX5AyC4UMl2KgQkacIeYkTdYsKozVt5fUqsro1boTbLfBMNLZ1
+uzeDRf3k6pu0o3RIe7TFtZFW4dwt9r2AMreFBbtxbdWDL5wFrZrL88FOYwUQa0pw
+qtqYFj30cqocyYdxJuJdyOTsMYT34j1vie0fL4kqJLu+8E+MufoCooNPvSNqGXe7
+ek9kV8imFy5Spnq1JlCcN70+7akTGlHRqCzAuH9oi0ytMUF99xlq+GDFllCymDte
+kf7aImkA3dT4mNtis1zPsrAx3irB0n9e/B39vUwUU3IXPv2ghSg0yjaGp1krcjqq
+PxjMgydikSyJ
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py b/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
index 1d71f77..9db4ffe 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
@@ -30,7 +30,9 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
index fe2378d..b51c0da 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
@@ -23,8 +23,10 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
 
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
index dd4ae51..d8f1d3f 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
@@ -24,7 +24,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
index b646d26..fe632b9 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
@@ -22,7 +22,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
index bee2c1e..e62caa9 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
@@ -29,7 +29,9 @@
 # Both the target and intermediate are valid at this time, however the
 # root is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
index 0a38082..037bf01 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
@@ -27,10 +27,12 @@
 # Both the root and target are valid at this time, however the
 # intermediate certificate is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Time is after notAfter
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
index 2d077c8..a04f2f4 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
@@ -27,10 +27,12 @@
 # Both the root and intermediate are valid at this time, however the
 # target is not.
 time = common.MARCH_1_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Time is before notBefore
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py
index e01cc74..9245676 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py
@@ -27,10 +27,12 @@
 # Both the root and intermediate are valid at this time, however the
 # target is not.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Time is after notAfter
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
index 7585cb2..e415072 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
@@ -30,7 +30,9 @@
 # root is not. This doesn't matter since the root certificate is
 # just a delivery mechanism for the name + SPKI.
 time = common.MARCH_2_2015_UTC
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py b/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
index 956bc2b..1d6eb5b 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
@@ -25,6 +25,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(bogus_root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Signature verification failed
@@ -33,4 +34,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
index c49ea7a..faa9247 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
@@ -23,10 +23,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Basic Constraints indicates not a CA
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
index 1e9bb3f..ee4ab5e 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
index 7c1c531..80743e7 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
@@ -22,10 +22,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Does not have Basic Constraints
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
index 5b6e7d2..b04faef 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
@@ -23,10 +23,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: keyCertSign bit is not set
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
index 087c11b..a1d208c 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
@@ -22,6 +22,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unacceptable signature algorithm
@@ -29,4 +30,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
index 0229862..357cd90 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
@@ -24,6 +24,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unconsumed critical extension
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
index 67879f6..ae4b03d 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py b/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
index 686e53e..f838098 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
@@ -78,15 +78,19 @@
 newtrusted = common.TrustAnchor(newroot, constrained=False)
 
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, oldchain, oldtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-oldchain.pem")
-common.write_test_file(__doc__, rolloverchain, oldtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-rolloverchain.pem")
-common.write_test_file(__doc__, longrolloverchain, oldtrusted, time,
+common.write_test_file(__doc__, oldchain, oldtrusted, time, key_purpose,
                        verify_result, errors,
+                       out_pem="key-rollover-oldchain.pem")
+common.write_test_file(__doc__, rolloverchain, oldtrusted, time, key_purpose,
+                       verify_result, errors,
+                       out_pem="key-rollover-rolloverchain.pem")
+common.write_test_file(__doc__, longrolloverchain, oldtrusted, time,
+                       key_purpose, verify_result, errors,
                        out_pem="key-rollover-longrolloverchain.pem")
-common.write_test_file(__doc__, newchain, newtrusted, time, verify_result,
-                       errors, out_pem="key-rollover-newchain.pem")
+common.write_test_file(__doc__, newchain, newtrusted, time, key_purpose,
+                       verify_result, errors,
+                       out_pem="key-rollover-newchain.pem")
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
index d30e530..709c83c 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
@@ -23,7 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py b/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
index 1b5c80e..0132b2b 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
@@ -20,7 +20,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py b/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
index 585b02f..7d361df 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
@@ -25,10 +25,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py b/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
index b8135e7..b8e7673 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
@@ -24,10 +24,12 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py b/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
index a9e17d0..59bc3aa 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
@@ -21,7 +21,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
index f86013b..f88b90b 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
@@ -22,6 +22,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: RSA modulus too small
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
index b0a9fd2..b2acb8d 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
@@ -21,7 +21,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
index 7511486..6b9adc0 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
@@ -21,6 +21,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Unacceptable signature algorithm
@@ -28,4 +29,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
index 8179c08..375522c 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
@@ -24,6 +24,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Unconsumed critical extension
@@ -32,4 +33,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py b/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
index 368d4f0..b803a39 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
@@ -27,6 +27,7 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=0 (CN=Target) -----
 ERROR: Signature verification failed
@@ -34,4 +35,5 @@
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
index 4d433a7..80a147b 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
@@ -23,8 +23,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
-
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
index ba48dd8..1f71d1e 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
@@ -24,8 +24,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
-
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
index dbd1802..68a4941 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
@@ -22,7 +22,9 @@
 chain = [target, intermediate]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py b/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
index 4d4e40a..30e375a 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
@@ -29,10 +29,12 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
index 7b73f39..ac8ed03 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
@@ -27,10 +27,12 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=True)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = False
 errors = """----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
 """
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
index d51a38a..1a83ab0 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
@@ -27,7 +27,9 @@
 chain = [target, intermediate2, intermediate1]
 trusted = common.TrustAnchor(root, constrained=False)
 time = common.DEFAULT_TIME
+key_purpose = common.DEFAULT_KEY_PURPOSE
 verify_result = True
 errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, verify_result, errors)
+common.write_test_file(__doc__, chain, trusted, time, key_purpose,
+                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
index c486909..f81453e 100644
--- a/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
+++ b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:7b:69:ed:ad:13:3f:59:75:63:cf:2a:9e:b0:
-                    78:06:62:e2:5e:40:3f:12:2e:61:1c:7f:2e:f8:4f:
-                    0e:92:28:80:18:d8:e2:e2:f4:b4:63:84:c8:0b:4d:
-                    ae:1b:f0:4d:d5:49:91:89:b9:a4:11:b3:77:72:ba:
-                    12:16:3e:29:7c:51:28:99:37:69:57:6d:3b:68:e1:
-                    58:83:c0:ad:13:af:63:2e:85:63:ab:92:11:7a:92:
-                    8b:fa:66:33:f9:3b:c9:ab:22:75:9f:6c:91:1b:22:
-                    6b:c9:2d:c8:6d:58:2b:bc:a9:f3:cf:24:8f:7a:37:
-                    9b:83:67:e5:b2:eb:ea:35:c6:9d:e4:a8:24:74:18:
-                    5b:8b:62:6b:cd:92:d7:c3:6c:b1:40:e1:2f:a3:16:
-                    52:92:df:59:70:bc:cc:37:27:8f:8e:3d:b9:fc:d6:
-                    ca:fb:63:89:b3:d0:64:24:2b:97:e3:a7:bc:6f:76:
-                    7e:e6:82:36:9f:c4:ea:b2:96:60:ac:86:57:09:55:
-                    d7:3b:45:a8:23:b8:b1:4a:92:f8:a9:66:1f:1a:0f:
-                    c5:f6:da:4e:6d:02:56:1b:8a:9f:52:9f:bd:b5:16:
-                    a6:fb:85:3d:fa:04:1d:8e:25:b4:03:9e:74:e4:98:
-                    4a:da:39:7b:d0:f2:7d:f9:f4:97:ce:d1:d8:4d:31:
-                    88:47
+                    00:d2:d5:0d:d0:0f:c6:e6:ff:bf:3b:49:ff:d5:9c:
+                    b4:03:9b:40:b3:ed:50:78:f8:80:91:06:18:d1:6a:
+                    fa:ed:0c:e4:57:24:75:fa:79:3c:30:b6:53:2b:61:
+                    bc:9a:46:37:01:94:c0:9c:aa:35:16:90:5a:22:25:
+                    6d:31:56:69:aa:7e:13:0c:5c:75:d0:21:31:49:02:
+                    8c:17:8f:e8:a6:15:86:3f:48:c7:a2:0a:7b:2f:bb:
+                    18:0f:d6:c7:21:68:66:ff:9d:d1:59:f4:0d:0a:67:
+                    e9:e0:18:9b:ec:1d:00:b2:83:25:54:94:dc:0c:09:
+                    e0:b6:2d:70:3e:7d:8c:87:5d:fd:cd:ba:d1:d2:0f:
+                    ac:22:43:d3:00:71:b4:99:eb:83:d4:6b:8a:b5:54:
+                    db:9b:02:96:99:2e:59:32:01:98:7f:15:c2:e7:ee:
+                    12:61:21:ed:28:15:78:98:45:93:89:29:ee:d0:c3:
+                    5b:9b:51:f3:52:01:d4:24:2d:94:cf:71:bf:1d:f4:
+                    8f:a0:2d:15:b2:8c:f7:ed:fa:5b:db:23:6e:ec:0a:
+                    a3:a5:41:64:55:32:f6:14:3e:cb:17:c7:29:81:65:
+                    2b:51:70:0e:b3:c4:d9:8c:1d:31:ee:34:02:89:7d:
+                    53:c3:69:b7:9e:ec:1f:d4:0c:92:f2:ed:d5:0e:bd:
+                    aa:eb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                94:D6:3E:50:DE:FF:47:B8:65:1A:C6:33:78:79:87:8D:F2:32:32:BA
+                73:6C:8B:E4:86:B3:59:CE:20:E0:D2:76:8A:07:C4:B7:32:3C:51:4D
             X509v3 Authority Key Identifier: 
-                keyid:CC:11:88:FF:DF:7E:14:06:07:B5:10:B6:C1:BC:CB:2B:65:FC:83:77
+                keyid:28:02:89:88:59:90:49:58:6C:2B:C7:05:2C:41:3B:6C:5E:45:82:5E
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         b4:9a:15:da:2b:7d:d4:26:f2:41:a2:04:1e:13:f3:b3:28:bf:
-         a3:85:34:fc:42:b1:57:05:0f:97:e5:f5:d9:d4:0e:eb:43:e8:
-         63:ce:5b:23:8b:48:ab:2f:25:03:81:43:ba:7e:9a:14:e4:4e:
-         9c:5b:d3:08:56:b7:00:7c:7f:fd:9e:ab:50:ce:09:95:2c:21:
-         00:74:22:26:83:fb:08:47:34:1b:67:0e:eb:e0:c4:ab:3d:00:
-         76:b2:9a:b1:00:c8:d0:17:0d:2e:81:43:71:51:f8:d7:f5:ad:
-         e9:f0:81:12:2a:e0:6f:c7:10:11:d7:f4:55:73:a4:7c:cb:97:
-         6c:fd:2b:34:bf:7e:a9:57:d8:e1:a9:05:01:5a:09:2b:49:bf:
-         bc:99:a3:a5:7c:b0:df:7a:32:0f:c2:94:0f:e0:15:f2:86:8f:
-         c3:19:44:49:02:10:56:f6:a9:58:38:7f:4d:f1:66:58:00:f9:
-         17:18:ab:b4:0c:c1:9e:f3:8d:5d:61:4d:02:8c:3a:97:89:8d:
-         5f:d0:98:f3:57:5c:85:35:b0:94:f8:02:7c:6f:bf:69:bf:7b:
-         91:5a:c3:38:88:0d:ec:42:3b:b5:29:6b:0a:2d:10:19:ae:bc:
-         6c:18:95:2e:cd:74:04:af:95:79:ab:8e:4a:cc:53:6e:4d:ad:
-         83:58:6d:c5
+         7d:c1:e7:bd:46:4a:d1:29:fc:94:59:4b:bc:9c:ec:5b:c8:f1:
+         a4:de:a6:47:d3:32:3c:7d:a3:8c:73:3f:a1:9d:c6:0b:80:a6:
+         18:60:c6:f5:86:92:e5:d0:c0:df:32:f2:cb:11:93:c1:9e:2c:
+         25:80:3c:ca:89:ff:53:ab:f6:dd:84:d0:15:9e:24:96:59:59:
+         66:16:87:47:2a:38:86:46:08:03:d2:8c:c1:b7:6c:b0:68:d0:
+         23:e9:b6:85:b3:68:fe:87:2a:4c:bd:92:b7:9e:c9:65:e7:1d:
+         8b:b1:39:a0:82:7a:38:e1:a1:06:54:7b:83:b1:6a:86:7a:e5:
+         f3:b0:1b:8a:43:48:88:49:e9:37:70:3a:c5:2b:36:da:86:5f:
+         c2:f0:89:fe:07:9f:2f:1d:d9:c7:86:29:f2:2a:4d:a4:eb:f4:
+         64:60:08:ed:a4:75:90:fe:80:74:a0:7a:7f:e8:9c:76:b2:a2:
+         d7:4a:d2:85:5b:95:e3:32:38:7a:c2:4d:d8:4c:3b:df:71:6c:
+         d7:eb:cf:95:74:6c:65:9f:84:f1:93:32:93:48:c1:56:98:31:
+         c5:92:c7:6a:d2:29:21:25:a9:4f:f3:65:bb:ca:8c:ef:2f:0c:
+         21:89:2b:bf:20:09:4d:85:a7:55:ac:6a:45:ae:40:7b:60:1c:
+         39:50:b8:e8
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCje2nt
-rRM/WXVjzyqesHgGYuJeQD8SLmEcfy74Tw6SKIAY2OLi9LRjhMgLTa4b8E3VSZGJ
-uaQRs3dyuhIWPil8USiZN2lXbTto4ViDwK0Tr2MuhWOrkhF6kov6ZjP5O8mrInWf
-bJEbImvJLchtWCu8qfPPJI96N5uDZ+Wy6+o1xp3kqCR0GFuLYmvNktfDbLFA4S+j
-FlKS31lwvMw3J4+OPbn81sr7Y4mz0GQkK5fjp7xvdn7mgjafxOqylmCshlcJVdc7
-RagjuLFKkvipZh8aD8X22k5tAlYbip9Sn721Fqb7hT36BB2OJbQDnnTkmEraOXvQ
-8n359JfO0dhNMYhHAgMBAAGjgekwgeYwHQYDVR0OBBYEFJTWPlDe/0e4ZRrGM3h5
-h43yMjK6MB8GA1UdIwQYMBaAFMwRiP/ffhQGB7UQtsG8yytl/IN3MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDS1Q3Q
+D8bm/787Sf/VnLQDm0Cz7VB4+ICRBhjRavrtDORXJHX6eTwwtlMrYbyaRjcBlMCc
+qjUWkFoiJW0xVmmqfhMMXHXQITFJAowXj+imFYY/SMeiCnsvuxgP1schaGb/ndFZ
+9A0KZ+ngGJvsHQCygyVUlNwMCeC2LXA+fYyHXf3NutHSD6wiQ9MAcbSZ64PUa4q1
+VNubApaZLlkyAZh/FcLn7hJhIe0oFXiYRZOJKe7Qw1ubUfNSAdQkLZTPcb8d9I+g
+LRWyjPft+lvbI27sCqOlQWRVMvYUPssXxymBZStRcA6zxNmMHTHuNAKJfVPDabee
+7B/UDJLy7dUOvarrAgMBAAGjgekwgeYwHQYDVR0OBBYEFHNsi+SGs1nOIODSdooH
+xLcyPFFNMB8GA1UdIwQYMBaAFCgCiYhZkElYbCvHBSxBO2xeRYJeMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAtJoV2it91CbyQaIEHhPz
-syi/o4U0/EKxVwUPl+X12dQO60PoY85bI4tIqy8lA4FDun6aFOROnFvTCFa3AHx/
-/Z6rUM4JlSwhAHQiJoP7CEc0G2cO6+DEqz0AdrKasQDI0BcNLoFDcVH41/Wt6fCB
-Eirgb8cQEdf0VXOkfMuXbP0rNL9+qVfY4akFAVoJK0m/vJmjpXyw33oyD8KUD+AV
-8oaPwxlESQIQVvapWDh/TfFmWAD5FxirtAzBnvONXWFNAow6l4mNX9CY81dchTWw
-lPgCfG+/ab97kVrDOIgN7EI7tSlrCi0QGa68bBiVLs10BK+VeauOSsxTbk2tg1ht
-xQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAfcHnvUZK0Sn8lFlLvJzs
+W8jxpN6mR9MyPH2jjHM/oZ3GC4CmGGDG9YaS5dDA3zLyyxGTwZ4sJYA8yon/U6v2
+3YTQFZ4klllZZhaHRyo4hkYIA9KMwbdssGjQI+m2hbNo/ocqTL2St57JZecdi7E5
+oIJ6OOGhBlR7g7Fqhnrl87AbikNIiEnpN3A6xSs22oZfwvCJ/gefLx3Zx4Yp8ipN
+pOv0ZGAI7aR1kP6AdKB6f+icdrKi10rShVuV4zI4esJN2Ew733Fs1+vPlXRsZZ+E
+8ZMyk0jBVpgxxZLHatIpISWpT/Nlu8qM7y8MIYkrvyAJTYWnVaxqRa5Ae2AcOVC4
+6A==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b6:cf:57:a5:6e:7c:9a:78:f2:c1:bd:99:eb:7c:
-                    af:6a:c8:38:2e:8e:cf:e5:20:c0:f9:57:5c:e2:83:
-                    29:33:2c:b1:9d:2b:91:ce:4c:da:27:62:5f:18:08:
-                    a8:f1:03:eb:0e:be:f2:1e:00:8c:63:f2:8f:d3:c1:
-                    e4:df:0a:d3:d4:82:0d:6c:c4:98:87:eb:5b:81:66:
-                    43:f3:38:5e:d4:8b:91:47:70:8b:89:90:a0:0b:9d:
-                    63:56:4f:58:4b:e2:36:e1:97:df:37:71:7a:90:f5:
-                    62:2c:3e:57:71:6a:75:db:10:66:22:4c:fd:e9:a0:
-                    78:5e:4c:e3:8c:d5:c2:c9:a0:10:3d:ec:bd:7b:76:
-                    9f:5f:54:e3:c3:88:9b:d7:7f:8c:80:79:87:0f:3c:
-                    aa:28:d9:f5:63:e8:f3:a5:6b:2b:e0:45:1c:af:94:
-                    00:84:b4:e4:fc:3a:5d:9c:bc:05:c2:04:b7:3a:23:
-                    84:56:66:a2:50:fc:8d:00:06:52:7f:a2:d3:9e:0b:
-                    fa:d5:ba:1b:1e:10:e9:13:60:56:a6:cd:ab:67:90:
-                    66:0c:3d:71:c0:46:42:13:48:74:a8:a8:6d:0c:a8:
-                    6d:7b:6b:57:f1:ba:c0:c5:c8:cd:d9:75:20:d3:59:
-                    ed:32:ed:5c:b6:63:b4:9b:0b:3a:05:7b:ad:38:70:
-                    e4:3d
+                    00:af:ce:d1:57:74:aa:26:65:67:76:e9:d3:53:12:
+                    d5:66:d3:98:c6:84:6f:b5:cc:bd:8e:b5:08:c2:49:
+                    06:c7:0c:8d:6e:3c:04:5a:92:8c:cf:b8:3a:25:99:
+                    7e:84:aa:60:cf:ff:a1:db:9d:26:3b:60:36:69:de:
+                    e9:61:34:cc:c9:4b:86:2f:00:17:0e:e3:30:3d:f3:
+                    b5:f1:74:b3:8d:2a:8e:13:fb:16:16:f0:a7:b1:07:
+                    0b:cc:c9:3f:f3:ee:2d:5f:3d:60:ee:e6:b1:d8:f7:
+                    d6:d6:30:49:44:52:be:41:bd:2c:9d:21:f0:67:6e:
+                    ed:4b:3c:b8:c7:d8:7b:8d:94:37:3c:62:e7:2d:30:
+                    01:a7:5b:00:05:0b:98:62:1a:79:c0:94:8d:90:74:
+                    25:03:58:f6:42:b6:4c:8c:83:dd:f7:a8:a2:96:98:
+                    66:ba:52:a2:e5:70:4c:b1:00:4e:cf:24:10:40:2f:
+                    5c:ca:3c:80:1f:d4:5c:23:1d:0b:08:34:d7:36:23:
+                    e0:50:cf:ea:10:09:49:ff:86:81:56:1f:45:64:a5:
+                    51:98:8c:60:73:f6:9b:ac:c5:32:fb:88:c3:dc:46:
+                    81:33:2c:23:7e:80:9c:22:f5:f7:8b:e2:ca:d2:1e:
+                    a2:c7:da:88:be:ea:1b:cb:05:2c:59:39:48:40:b7:
+                    b3:8f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CC:11:88:FF:DF:7E:14:06:07:B5:10:B6:C1:BC:CB:2B:65:FC:83:77
+                28:02:89:88:59:90:49:58:6C:2B:C7:05:2C:41:3B:6C:5E:45:82:5E
             X509v3 Authority Key Identifier: 
-                keyid:A7:26:DB:0B:03:E6:0B:32:0B:8C:34:AD:CE:60:CD:4C:89:9B:59:6E
+                keyid:BB:D1:D5:54:45:52:ED:03:40:FE:CD:9A:4F:66:90:09:28:0E:A6:5F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         69:10:d5:c3:ff:f0:65:c6:79:55:be:ba:6b:7c:7f:49:a2:47:
-         b0:d7:e9:28:9f:14:f6:11:6a:d7:1f:e3:11:30:c1:d0:0c:21:
-         8c:b3:21:95:c1:f3:2e:7c:8a:34:f6:d6:c7:49:9a:75:4c:93:
-         35:c4:88:f7:be:d6:ed:e0:75:22:29:4d:0f:59:80:1a:1b:9b:
-         a4:fd:86:af:1e:76:44:03:f9:42:f2:74:1e:6b:74:fc:fa:64:
-         67:33:4a:14:93:fc:84:1f:92:0c:62:ac:aa:e1:f0:6f:3e:09:
-         90:d5:67:68:2a:28:9c:5f:86:29:8d:48:ef:3e:a5:48:60:08:
-         b5:cf:ac:ba:ff:ba:d7:7d:9a:8e:b4:63:10:e3:14:12:12:89:
-         37:00:42:fb:4c:e5:b7:0d:e5:b8:28:5b:9f:79:48:aa:e4:ef:
-         17:ec:eb:f1:c3:82:d9:48:ec:cd:f4:f7:1f:8f:e2:9e:ec:71:
-         a6:7a:ce:c0:fc:14:8f:48:17:56:10:02:27:aa:d9:10:bb:fc:
-         6d:e2:d8:b6:66:27:08:e5:31:4d:fb:24:45:0f:da:7a:9c:8d:
-         e5:91:0c:80:91:1e:44:78:01:28:ca:db:40:87:db:38:0f:18:
-         1a:a9:ff:68:8c:03:b2:89:82:e2:80:ee:3c:77:e2:4e:85:a5:
-         cf:72:3f:24
+         41:60:3c:a8:ae:a7:cf:56:c3:bd:40:b1:ce:ea:68:bf:0b:04:
+         39:a0:f2:2b:41:f3:30:33:c2:35:4b:bd:84:da:6a:47:72:ef:
+         5b:fa:1e:e9:a9:2b:8c:1a:a0:48:21:20:9d:a2:1b:14:48:51:
+         86:a0:a8:5f:36:5e:bd:0a:17:f4:a2:49:c7:7e:b7:dc:9c:04:
+         0b:c0:92:2b:f6:de:db:21:b6:7a:b2:bc:7c:5d:cb:22:6c:61:
+         b0:83:84:d2:86:98:4a:20:7d:f3:cd:48:e3:30:00:70:f9:25:
+         ed:15:71:7f:27:8e:cd:4b:f8:34:42:23:90:b0:1e:2a:c7:58:
+         c2:74:fc:a8:34:02:04:fa:60:14:b4:68:18:3b:9d:c0:d3:77:
+         ec:86:b8:43:ad:37:80:2d:13:b4:d7:a9:ad:26:25:ef:30:2a:
+         0c:c4:2b:24:0b:05:f4:3b:77:e6:2f:d7:e2:8b:5d:d2:b2:2a:
+         55:bc:c9:e7:68:6c:68:49:9b:1f:6f:d4:02:21:18:ad:c8:d5:
+         4a:03:1b:aa:96:f1:8e:46:af:4a:40:24:4e:e7:db:e5:72:e4:
+         29:0c:13:85:19:74:ef:a6:68:8c:47:d4:b9:d4:79:6b:62:e0:
+         5b:55:68:2a:27:0e:14:1c:43:f7:ce:be:33:e9:a4:73:f3:03:
+         49:2b:4f:be
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAts9XpW58
-mnjywb2Z63yvasg4Lo7P5SDA+Vdc4oMpMyyxnSuRzkzaJ2JfGAio8QPrDr7yHgCM
-Y/KP08Hk3wrT1IINbMSYh+tbgWZD8zhe1IuRR3CLiZCgC51jVk9YS+I24ZffN3F6
-kPViLD5XcWp12xBmIkz96aB4XkzjjNXCyaAQPey9e3afX1Tjw4ib13+MgHmHDzyq
-KNn1Y+jzpWsr4EUcr5QAhLTk/DpdnLwFwgS3OiOEVmaiUPyNAAZSf6LTngv61bob
-HhDpE2BWps2rZ5BmDD1xwEZCE0h0qKhtDKhte2tX8brAxcjN2XUg01ntMu1ctmO0
-mws6BXutOHDkPQIDAQABo4HLMIHIMB0GA1UdDgQWBBTMEYj/334UBge1ELbBvMsr
-ZfyDdzAfBgNVHSMEGDAWgBSnJtsLA+YLMguMNK3OYM1MiZtZbjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr87RV3Sq
+JmVndunTUxLVZtOYxoRvtcy9jrUIwkkGxwyNbjwEWpKMz7g6JZl+hKpgz/+h250m
+O2A2ad7pYTTMyUuGLwAXDuMwPfO18XSzjSqOE/sWFvCnsQcLzMk/8+4tXz1g7uax
+2PfW1jBJRFK+Qb0snSHwZ27tSzy4x9h7jZQ3PGLnLTABp1sABQuYYhp5wJSNkHQl
+A1j2QrZMjIPd96iilphmulKi5XBMsQBOzyQQQC9cyjyAH9RcIx0LCDTXNiPgUM/q
+EAlJ/4aBVh9FZKVRmIxgc/abrMUy+4jD3EaBMywjfoCcIvX3i+LK0h6ix9qIvuob
+ywUsWTlIQLezjwIDAQABo4HLMIHIMB0GA1UdDgQWBBQoAomIWZBJWGwrxwUsQTts
+XkWCXjAfBgNVHSMEGDAWgBS70dVURVLtA0D+zZpPZpAJKA6mXzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AGkQ1cP/8GXGeVW+umt8f0miR7DX6SifFPYRatcf4xEwwdAMIYyzIZXB8y58ijT2
-1sdJmnVMkzXEiPe+1u3gdSIpTQ9ZgBobm6T9hq8edkQD+ULydB5rdPz6ZGczShST
-/IQfkgxirKrh8G8+CZDVZ2gqKJxfhimNSO8+pUhgCLXPrLr/utd9mo60YxDjFBIS
-iTcAQvtM5bcN5bgoW595SKrk7xfs6/HDgtlI7M309x+P4p7scaZ6zsD8FI9IF1YQ
-Aieq2RC7/G3i2LZmJwjlMU37JEUP2nqcjeWRDICRHkR4ASjK20CH2zgPGBqp/2iM
-A7KJguKA7jx34k6Fpc9yPyQ=
+AEFgPKiup89Ww71Asc7qaL8LBDmg8itB8zAzwjVLvYTaakdy71v6HumpK4waoEgh
+IJ2iGxRIUYagqF82Xr0KF/SiScd+t9ycBAvAkiv23tshtnqyvHxdyyJsYbCDhNKG
+mEogffPNSOMwAHD5Je0VcX8njs1L+DRCI5CwHirHWMJ0/Kg0AgT6YBS0aBg7ncDT
+d+yGuEOtN4AtE7TXqa0mJe8wKgzEKyQLBfQ7d+Yv1+KLXdKyKlW8yedobGhJmx9v
+1AIhGK3I1UoDG6qW8Y5Gr0pAJE7n2+Vy5CkME4UZdO+maIxH1LnUeWti4FtVaCon
+DhQcQ/fOvjPppHPzA0krT74=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a6:2e:77:a3:0d:0b:86:02:e4:79:46:6d:76:0e:
-                    de:ba:55:19:76:07:90:e5:7a:4b:9a:99:70:f2:91:
-                    f2:28:94:e7:e0:8b:aa:c4:a5:c1:82:36:d8:30:be:
-                    84:43:45:ae:2a:60:e7:fe:d4:a0:a1:a7:e9:30:56:
-                    d0:c9:5d:f8:5f:86:9c:ba:c9:ad:cc:29:77:15:0c:
-                    e8:7b:78:52:42:ec:69:db:db:38:d6:f5:25:75:50:
-                    6f:21:a0:9a:b2:4e:3a:33:6c:47:60:b2:a4:e7:ec:
-                    bc:c0:9f:d7:46:1b:bb:82:43:2a:22:6d:fb:65:0d:
-                    b5:cf:48:b9:a6:e3:2b:26:77:32:db:a6:80:b6:a7:
-                    63:f5:b9:d7:bf:f3:37:bd:2b:88:15:b5:50:06:0c:
-                    c9:6f:05:2b:97:ac:ff:01:d9:9e:55:b8:2d:90:62:
-                    a4:38:d4:d3:19:87:8f:b0:dd:88:4d:ca:19:f3:c9:
-                    2f:95:22:a8:19:be:98:38:6d:0f:17:65:d7:ee:5b:
-                    82:73:f8:c5:28:43:76:96:a6:ef:00:9c:5e:d0:9d:
-                    cc:52:dc:c8:6c:d6:4a:8e:2c:5a:c0:9b:e0:b4:1b:
-                    f4:5f:43:84:b7:ad:7d:d1:07:c6:79:16:d8:01:c2:
-                    73:e7:ad:dc:4c:d4:a5:bc:ab:99:60:6d:18:34:14:
-                    ed:07
+                    00:b6:f8:c2:50:35:39:c4:ad:3c:b5:81:77:33:8e:
+                    62:aa:ef:55:39:a6:68:1a:00:fb:98:7f:2e:c9:f7:
+                    1c:14:8b:57:ae:ea:a3:30:0d:a6:99:fc:a9:a2:f9:
+                    ca:11:57:2b:64:da:f1:a7:07:ac:68:17:e3:eb:d1:
+                    73:ab:b8:fc:cf:fd:69:02:0f:a0:d0:63:8d:fd:76:
+                    5a:a2:8d:82:6d:0c:94:7a:e2:21:79:01:db:fb:07:
+                    52:4b:bc:b9:b0:b4:16:90:f1:44:53:4b:64:30:d2:
+                    aa:ce:97:ff:2a:cb:d6:46:12:88:28:c5:61:3e:17:
+                    4f:44:9f:a1:a3:ca:51:74:8a:37:e6:4f:a5:58:46:
+                    ff:42:c5:00:20:2a:14:3d:fd:1e:88:c9:5d:9c:a1:
+                    c0:66:5f:53:e4:7f:87:97:e3:45:fb:30:d5:08:67:
+                    fe:7a:c3:1b:ed:0b:c0:d9:31:77:18:9f:98:58:09:
+                    1b:5e:88:08:ce:c0:ba:92:bd:ca:7f:ce:3d:68:cc:
+                    7c:14:4b:08:ba:d0:89:c1:8d:78:d5:55:bd:1f:af:
+                    0d:70:4e:24:7f:c8:3a:e6:57:86:57:a7:8a:5c:c4:
+                    b1:b2:5e:5f:3e:16:b8:5a:bb:d4:20:82:2d:a2:d7:
+                    5b:35:05:18:a5:f7:f3:96:8e:ab:22:b4:dd:1a:d7:
+                    bd:93
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:21:11:AF:90:99:E9:F8:9A:0B:80:16:9C:63:C3:DC:45:08:84:91
+                6A:92:E0:5C:B1:19:9D:04:CA:11:A8:53:24:59:A3:3F:75:3F:0F:BD
             X509v3 Authority Key Identifier: 
-                keyid:60:21:11:AF:90:99:E9:F8:9A:0B:80:16:9C:63:C3:DC:45:08:84:91
+                keyid:6A:92:E0:5C:B1:19:9D:04:CA:11:A8:53:24:59:A3:3F:75:3F:0F:BD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/BogusRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         97:aa:1c:16:64:05:60:ea:e0:5b:ae:7e:31:f3:6e:04:07:fe:
-         ba:34:6d:fd:b3:c9:74:d1:f8:b4:da:c2:97:1e:00:da:05:b6:
-         08:de:e3:8e:6e:5e:a9:9b:15:62:41:0b:2f:d2:bc:24:4a:47:
-         e9:7a:0c:6b:ba:c9:04:7c:82:ea:c5:89:5c:03:6f:8a:e6:a1:
-         13:4c:02:1a:5b:2e:ae:48:8b:16:f5:6d:01:89:89:66:29:06:
-         40:49:fe:b9:51:19:9e:ea:6d:76:ce:a7:78:7e:72:bf:04:4c:
-         bf:f6:17:b0:bc:79:3e:67:47:89:ec:d9:07:40:55:6e:5b:7c:
-         79:6e:7f:97:e9:1b:d3:df:b6:54:e5:53:44:32:e2:39:17:ea:
-         17:be:6c:82:8a:b6:c2:6a:b4:c5:b7:8c:6d:38:34:b4:b8:27:
-         66:1f:4f:70:1d:65:77:6c:73:d8:69:24:6f:06:09:d4:f9:a9:
-         7a:eb:47:cb:9b:3e:ec:42:89:2e:f4:2b:20:36:f1:fc:70:e2:
-         3b:83:0a:e0:3a:04:1e:bf:53:cb:b6:ca:fe:2f:25:d5:c6:aa:
-         71:39:a9:8e:25:4a:75:bb:15:fc:29:4f:ba:d6:a9:02:c7:8d:
-         d8:06:48:aa:6d:0b:34:bd:36:19:ea:87:a9:50:e5:a8:d8:31:
-         73:a2:30:44
+         26:e0:77:eb:1a:b0:5b:c6:64:45:f3:b8:e7:93:dc:a5:fd:0a:
+         70:b8:3a:de:eb:a3:84:6b:49:1e:34:f0:22:c3:6b:f7:06:eb:
+         5b:5d:5d:a5:58:10:4b:b8:20:db:8c:ad:41:6f:30:63:09:b6:
+         e9:3a:a3:5e:80:b5:74:42:e0:64:ab:dd:23:16:ff:fa:a8:3f:
+         d1:d2:25:cc:88:48:c8:79:8e:01:b4:b0:32:27:74:b9:2c:67:
+         28:05:c2:b7:18:e2:52:0d:ff:ed:a1:43:fc:ff:d4:f0:d0:7b:
+         14:aa:e6:6f:cf:b4:e4:83:30:97:67:cd:46:6b:15:d2:80:07:
+         0a:d5:e7:6f:9e:59:21:07:57:43:c7:f2:bc:2b:d2:e0:31:77:
+         46:92:64:39:cc:fe:30:b0:9e:c2:19:31:cd:66:6a:2d:44:35:
+         8c:b9:00:b0:6a:85:71:0e:d2:a7:a1:5e:89:70:82:3e:de:f3:
+         83:c8:e3:14:4b:c6:21:b9:c6:b7:43:86:37:19:11:28:fc:3b:
+         f5:99:e8:5f:46:1b:32:57:68:69:0b:37:30:10:41:91:70:04:
+         52:ea:e4:71:70:28:8a:91:69:03:f1:f4:3e:96:31:81:bc:51:
+         8a:a6:79:7f:1f:32:99:f5:d5:79:d9:82:5b:88:0a:d4:c9:b7:
+         b9:15:9f:e8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDeTCCAmGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlCb2d1
 c1Jvb3QwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjAUMRIwEAYDVQQD
-DAlCb2d1c1Jvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmLnej
-DQuGAuR5Rm12Dt66VRl2B5DlekuamXDykfIolOfgi6rEpcGCNtgwvoRDRa4qYOf+
-1KChp+kwVtDJXfhfhpy6ya3MKXcVDOh7eFJC7Gnb2zjW9SV1UG8hoJqyTjozbEdg
-sqTn7LzAn9dGG7uCQyoibftlDbXPSLmm4ysmdzLbpoC2p2P1ude/8ze9K4gVtVAG
-DMlvBSuXrP8B2Z5VuC2QYqQ41NMZh4+w3YhNyhnzyS+VIqgZvpg4bQ8XZdfuW4Jz
-+MUoQ3aWpu8AnF7QncxS3Mhs1kqOLFrAm+C0G/RfQ4S3rX3RB8Z5FtgBwnPnrdxM
-1KW8q5lgbRg0FO0HAgMBAAGjgdUwgdIwHQYDVR0OBBYEFGAhEa+Qmen4mguAFpxj
-w9xFCISRMB8GA1UdIwQYMBaAFGAhEa+Qmen4mguAFpxjw9xFCISRMDwGCCsGAQUF
+DAlCb2d1c1Jvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2+MJQ
+NTnErTy1gXczjmKq71U5pmgaAPuYfy7J9xwUi1eu6qMwDaaZ/Kmi+coRVytk2vGn
+B6xoF+Pr0XOruPzP/WkCD6DQY439dlqijYJtDJR64iF5Adv7B1JLvLmwtBaQ8URT
+S2Qw0qrOl/8qy9ZGEogoxWE+F09En6GjylF0ijfmT6VYRv9CxQAgKhQ9/R6IyV2c
+ocBmX1Pkf4eX40X7MNUIZ/56wxvtC8DZMXcYn5hYCRteiAjOwLqSvcp/zj1ozHwU
+Swi60InBjXjVVb0frw1wTiR/yDrmV4ZXp4pcxLGyXl8+Frhau9Qggi2i11s1BRil
+9/OWjqsitN0a172TAgMBAAGjgdUwgdIwHQYDVR0OBBYEFGqS4FyxGZ0EyhGoUyRZ
+oz91Pw+9MB8GA1UdIwQYMBaAFGqS4FyxGZ0EyhGoUyRZoz91Pw+9MDwGCCsGAQUF
 BwEBBDAwLjAsBggrBgEFBQcwAoYgaHR0cDovL3VybC1mb3ItYWlhL0JvZ3VzUm9v
 dC5jZXIwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL3VybC1mb3ItY3JsL0JvZ3Vz
 Um9vdC5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
-hvcNAQELBQADggEBAJeqHBZkBWDq4FuufjHzbgQH/ro0bf2zyXTR+LTawpceANoF
-tgje445uXqmbFWJBCy/SvCRKR+l6DGu6yQR8gurFiVwDb4rmoRNMAhpbLq5Iixb1
-bQGJiWYpBkBJ/rlRGZ7qbXbOp3h+cr8ETL/2F7C8eT5nR4ns2QdAVW5bfHluf5fp
-G9PftlTlU0Qy4jkX6he+bIKKtsJqtMW3jG04NLS4J2YfT3AdZXdsc9hpJG8GCdT5
-qXrrR8ubPuxCiS70KyA28fxw4juDCuA6BB6/U8u2yv4vJdXGqnE5qY4lSnW7Ffwp
-T7rWqQLHjdgGSKptCzS9Nhnqh6lQ5ajYMXOiMEQ=
+hvcNAQELBQADggEBACbgd+sasFvGZEXzuOeT3KX9CnC4Ot7ro4RrSR408CLDa/cG
+61tdXaVYEEu4INuMrUFvMGMJtuk6o16AtXRC4GSr3SMW//qoP9HSJcyISMh5jgG0
+sDIndLksZygFwrcY4lIN/+2hQ/z/1PDQexSq5m/PtOSDMJdnzUZrFdKABwrV52+e
+WSEHV0PH8rwr0uAxd0aSZDnM/jCwnsIZMc1mai1ENYy5ALBqhXEO0qehXolwgj7e
+84PI4xRLxiG5xrdDhjcZESj8O/WZ6F9GGzJXaGkLNzAQQZFwBFLq5HFwKIqRaQPx
+9D6WMYG8UYqmeX8fMpn11XnZgluICtTJt7kVn+g=
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Signature verification failed
 ERROR: VerifySignedData failed
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
index ccb91e6..0568376 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b7:1c:6d:3b:54:28:d0:fa:14:25:fe:22:77:55:
-                    16:d3:25:34:af:cd:e7:5a:8a:38:4b:82:99:95:6d:
-                    e1:99:f7:f3:1d:53:2d:8e:90:b2:d5:4e:7e:e7:0c:
-                    9d:73:98:5e:3b:ed:bc:4f:fe:c7:38:f7:8a:ce:b7:
-                    08:0f:bd:78:18:9a:ec:f2:21:9e:25:ba:bc:24:3f:
-                    22:73:60:f7:2c:fa:9a:e9:aa:f8:75:65:4e:af:4e:
-                    d9:01:f3:27:3e:c8:f5:b5:27:98:bd:a2:f6:34:ad:
-                    70:c8:5e:fb:3f:87:08:dc:d0:a6:30:c1:35:ee:95:
-                    7b:f2:7a:59:03:7e:03:39:fb:51:be:b3:13:54:cc:
-                    15:68:e1:b7:97:40:cf:e4:ff:84:a2:10:75:6d:d5:
-                    29:f8:91:8d:38:0a:92:c6:34:89:89:c2:d4:49:84:
-                    35:94:f9:08:ad:8c:44:10:3e:49:40:21:53:bb:6e:
-                    1b:20:1c:ce:e3:c8:a7:c7:e9:ab:4f:3f:f2:21:47:
-                    3a:d5:0a:59:6f:a9:59:42:ff:c5:7c:6a:c5:fc:79:
-                    29:05:a0:07:47:64:39:d0:bc:a1:86:64:c8:4c:08:
-                    ec:f2:03:47:7c:00:ce:02:ff:5a:02:59:d3:ee:2c:
-                    db:35:32:e9:24:a2:c2:f8:50:c8:3e:10:b1:dd:0a:
-                    5d:1b
+                    00:eb:2f:b6:14:8e:0e:51:b5:d4:2f:0d:ff:fd:3b:
+                    e1:3b:c3:a1:2e:a4:4f:b2:c8:98:3f:95:c3:41:18:
+                    7e:04:f1:03:26:cd:f4:80:4e:82:3c:d2:e9:3c:53:
+                    7f:b6:ab:34:34:a2:e3:31:80:09:d3:07:4c:c4:ac:
+                    b8:59:e2:36:ac:59:f5:10:59:b4:94:71:a3:aa:3b:
+                    82:fb:98:83:22:3a:81:28:07:eb:df:c1:eb:95:15:
+                    13:7a:3f:31:fc:64:2c:c1:e3:2b:64:4c:34:af:21:
+                    e9:dd:0d:88:00:38:10:87:67:9e:a9:1f:01:32:c6:
+                    24:61:86:20:36:ac:8c:95:30:98:9b:4f:f7:2b:c2:
+                    67:43:fb:6a:8e:7e:a2:4b:34:cd:05:60:67:f3:16:
+                    df:c9:53:de:4e:70:91:d3:ff:1a:c6:81:82:48:01:
+                    3e:a1:f5:89:13:97:fd:41:fb:f0:19:12:90:08:f7:
+                    5b:9e:79:a6:c9:11:73:be:98:9f:cd:06:dc:09:30:
+                    b1:55:90:eb:c5:7c:5a:7c:69:18:75:99:99:07:e8:
+                    95:0d:2f:31:b1:68:fe:f9:2e:2b:da:88:61:5f:0f:
+                    1e:fa:d0:3c:43:64:c8:65:1b:6d:8e:b7:89:24:79:
+                    e5:80:41:de:9b:22:ce:c5:bc:bd:1a:9f:f8:9f:43:
+                    16:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                03:34:C9:78:9C:53:67:7A:2C:96:D9:3F:63:F2:18:3D:49:A8:44:87
+                F2:AE:16:44:FF:CD:C4:8A:12:A7:83:1A:6F:ED:96:E6:83:92:AD:B2
             X509v3 Authority Key Identifier: 
-                keyid:9C:93:40:54:48:97:2B:0C:3B:AF:CE:5C:79:97:26:EC:32:33:4C:FB
+                keyid:CC:76:BA:62:45:30:8F:0C:F1:16:BF:97:D6:1E:5F:0D:4A:E8:04:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         72:78:37:46:b3:e3:d4:01:73:3a:59:1c:5f:13:27:10:46:dd:
-         ec:b1:9e:7c:6d:d8:a7:ac:b1:62:36:57:2a:44:17:d4:64:22:
-         18:67:ae:84:0b:6b:53:49:76:15:a3:d3:7e:69:ae:d4:54:5d:
-         46:11:0a:15:1c:ee:91:ab:da:6a:88:24:b0:ae:21:ee:a2:e6:
-         de:c4:cb:79:93:62:18:7d:4e:ee:d8:83:7d:65:63:f3:9c:08:
-         ca:28:5c:af:51:9f:36:b2:c3:06:3c:ec:cf:35:84:c5:9e:bc:
-         75:03:be:e5:23:4e:7f:67:7d:86:14:df:21:4d:5e:d3:b7:86:
-         d6:14:cd:84:3a:3d:29:4f:de:e5:db:ac:96:a9:58:cf:02:e4:
-         c4:b1:26:08:34:f5:a4:3f:47:a1:0f:b3:0b:69:29:78:50:ba:
-         a9:eb:4a:44:fc:e7:bf:e9:ce:ba:8b:dc:b9:6a:25:c6:11:32:
-         24:a0:59:7c:6e:4d:6c:cf:1b:f2:06:0f:5f:d7:4d:35:b1:f9:
-         a2:f7:c4:b0:b4:bb:ab:58:b5:ba:09:39:0d:50:d9:c2:a4:eb:
-         d9:79:23:40:ed:51:97:75:de:f5:14:c0:dc:ea:9f:6a:80:70:
-         ef:4e:b8:52:26:46:fc:70:e8:83:9c:2c:e8:63:b0:7f:81:a3:
-         4e:91:35:02
+         7f:a6:0e:b1:4a:2e:21:e7:f5:d6:a7:3c:c8:47:c1:89:4d:1c:
+         e4:51:c2:3e:ba:7c:05:aa:ca:73:55:34:fc:e1:12:06:c3:26:
+         6d:4e:22:53:71:b4:d4:55:1c:a4:86:5e:61:68:00:78:84:18:
+         c3:8e:e1:c0:42:fe:7e:ed:57:be:4e:5b:e9:4b:8e:ce:8a:f4:
+         93:7d:0d:73:4d:0c:7c:af:ac:14:bc:43:e3:6c:c5:bf:d8:1a:
+         b8:15:55:98:27:9c:a2:a8:34:9e:64:1e:4a:f2:a2:82:60:36:
+         57:ec:ab:8b:1e:17:0d:b8:82:32:ed:8e:c0:71:4c:27:94:6e:
+         fc:74:5a:9e:d2:a3:47:11:d2:cb:2b:da:ca:fd:37:fc:33:1e:
+         8d:a1:46:dd:3d:70:f9:d5:98:e1:4d:1b:09:44:2c:79:4e:db:
+         39:25:8b:9f:97:9e:f7:11:4a:6d:e4:dc:fb:54:02:dd:39:a4:
+         94:56:2b:e8:8d:18:21:a0:f3:91:cf:88:c2:2d:ac:2e:24:b3:
+         d1:ff:39:1d:94:f3:8a:ca:ea:5b:cb:bc:11:03:01:ad:8c:cb:
+         17:f5:8c:29:63:04:eb:52:9b:b8:a0:a2:2c:c5:d2:be:bc:fb:
+         64:26:5e:01:a8:db:2e:dc:56:9c:88:0a:17:b4:76:47:14:1e:
+         63:1f:49:69
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3HG07
-VCjQ+hQl/iJ3VRbTJTSvzedaijhLgpmVbeGZ9/MdUy2OkLLVTn7nDJ1zmF477bxP
-/sc494rOtwgPvXgYmuzyIZ4lurwkPyJzYPcs+prpqvh1ZU6vTtkB8yc+yPW1J5i9
-ovY0rXDIXvs/hwjc0KYwwTXulXvyelkDfgM5+1G+sxNUzBVo4beXQM/k/4SiEHVt
-1Sn4kY04CpLGNImJwtRJhDWU+QitjEQQPklAIVO7bhsgHM7jyKfH6atPP/IhRzrV
-CllvqVlC/8V8asX8eSkFoAdHZDnQvKGGZMhMCOzyA0d8AM4C/1oCWdPuLNs1Mukk
-osL4UMg+ELHdCl0bAgMBAAGjgekwgeYwHQYDVR0OBBYEFAM0yXicU2d6LJbZP2Py
-GD1JqESHMB8GA1UdIwQYMBaAFJyTQFRIlysMO6/OXHmXJuwyM0z7MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrL7YU
+jg5RtdQvDf/9O+E7w6EupE+yyJg/lcNBGH4E8QMmzfSAToI80uk8U3+2qzQ0ouMx
+gAnTB0zErLhZ4jasWfUQWbSUcaOqO4L7mIMiOoEoB+vfweuVFRN6PzH8ZCzB4ytk
+TDSvIendDYgAOBCHZ56pHwEyxiRhhiA2rIyVMJibT/crwmdD+2qOfqJLNM0FYGfz
+Ft/JU95OcJHT/xrGgYJIAT6h9YkTl/1B+/AZEpAI91ueeabJEXO+mJ/NBtwJMLFV
+kOvFfFp8aRh1mZkH6JUNLzGxaP75LivaiGFfDx760DxDZMhlG22Ot4kkeeWAQd6b
+Is7FvL0an/ifQxb5AgMBAAGjgekwgeYwHQYDVR0OBBYEFPKuFkT/zcSKEqeDGm/t
+luaDkq2yMB8GA1UdIwQYMBaAFMx2umJFMI8M8Ra/l9YeXw1K6ATEMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAcng3RrPj1AFzOlkcXxMn
-EEbd7LGefG3Yp6yxYjZXKkQX1GQiGGeuhAtrU0l2FaPTfmmu1FRdRhEKFRzukava
-aogksK4h7qLm3sTLeZNiGH1O7tiDfWVj85wIyihcr1GfNrLDBjzszzWExZ68dQO+
-5SNOf2d9hhTfIU1e07eG1hTNhDo9KU/e5duslqlYzwLkxLEmCDT1pD9HoQ+zC2kp
-eFC6qetKRPznv+nOuovcuWolxhEyJKBZfG5NbM8b8gYPX9dNNbH5ovfEsLS7q1i1
-ugk5DVDZwqTr2XkjQO1Rl3Xe9RTA3OqfaoBw7064UiZG/HDog5ws6GOwf4GjTpE1
-Ag==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAf6YOsUouIef11qc8yEfB
+iU0c5FHCPrp8BarKc1U0/OESBsMmbU4iU3G01FUcpIZeYWgAeIQYw47hwEL+fu1X
+vk5b6UuOzor0k30Nc00MfK+sFLxD42zFv9gauBVVmCecoqg0nmQeSvKigmA2V+yr
+ix4XDbiCMu2OwHFMJ5Ru/HRantKjRxHSyyvayv03/DMejaFG3T1w+dWY4U0bCUQs
+eU7bOSWLn5ee9xFKbeTc+1QC3TmklFYr6I0YIaDzkc+Iwi2sLiSz0f85HZTzisrq
+W8u8EQMBrYzLF/WMKWME61KbuKCiLMXSvrz7ZCZeAajbLtxWnIgKF7R2RxQeYx9J
+aQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c6:22:75:92:c4:7c:6f:77:4d:46:f7:17:84:1b:
-                    e2:08:1f:ff:71:7e:4d:6d:a4:e7:0f:58:46:84:61:
-                    22:02:70:4e:b8:45:3a:e2:10:d1:cf:ff:91:7c:12:
-                    8e:7d:19:ab:0a:46:ac:1b:d6:d6:05:b6:99:43:9b:
-                    ab:e5:cf:ee:62:e9:94:21:84:72:5b:63:6e:5a:e1:
-                    25:42:c3:b7:ee:31:5f:e0:e7:69:19:01:a2:d5:54:
-                    70:f8:aa:aa:24:5b:3b:4d:2b:cd:2f:e4:2a:a4:be:
-                    ba:2f:ab:a2:b6:f8:84:71:f3:23:bc:12:68:26:1e:
-                    49:d0:87:3e:46:46:33:47:70:f2:42:d4:3f:ba:9c:
-                    89:7d:4f:6e:a5:35:cf:d9:46:a8:63:c4:35:4a:e7:
-                    4f:f2:e0:51:90:8e:08:ed:2e:ae:18:ac:5d:16:44:
-                    25:32:fa:1b:3c:14:e9:37:69:9f:72:48:01:a5:1b:
-                    f3:e1:e7:75:ec:ca:92:83:48:a4:67:e1:8d:c1:dd:
-                    15:02:e4:4a:82:93:d3:f3:27:9e:66:ce:a8:3a:17:
-                    d2:c6:a7:08:31:ba:d2:e8:e7:fa:53:b6:4f:09:d8:
-                    7e:e4:53:b2:f1:03:d9:c4:31:0c:6d:32:a0:9d:08:
-                    d3:c4:bb:db:45:11:68:80:ba:f8:52:dc:19:9e:67:
-                    68:99
+                    00:c0:60:da:db:95:0d:0b:bd:bf:0d:7f:af:a5:83:
+                    43:5e:08:ac:12:17:cd:f2:fd:70:3e:b5:33:7d:ce:
+                    a7:1d:e9:4a:88:0c:83:76:71:78:38:65:91:76:70:
+                    f8:8e:be:d0:cf:8f:41:82:0c:96:95:f8:90:fe:d2:
+                    a6:99:58:07:f6:41:b2:eb:b0:41:8e:e2:7b:c2:26:
+                    34:54:98:2e:c9:8d:df:98:1c:08:58:26:a6:9f:a2:
+                    84:0e:90:1c:2d:7d:e5:01:bb:c0:cc:d1:06:b5:f3:
+                    4d:61:8d:dd:cf:3c:ca:af:ac:97:c4:98:d4:4f:1c:
+                    81:61:28:5c:08:77:bb:d2:b7:01:3c:e3:eb:78:95:
+                    ad:0e:aa:14:18:6a:71:21:e2:12:45:df:e1:33:03:
+                    03:de:2c:bc:9f:97:02:c6:cc:e0:fb:7c:05:37:6c:
+                    ed:4c:84:08:b0:bc:31:a3:cd:4a:8f:1c:f6:a4:2b:
+                    44:fa:7e:29:bd:41:76:b8:6b:cd:b4:cc:3d:1c:a1:
+                    01:27:2a:e9:64:cf:4e:97:34:00:15:18:5b:dc:53:
+                    a9:c5:c1:56:85:45:0e:e7:19:f5:b7:13:89:bc:7d:
+                    b5:7e:59:13:13:c9:dc:a0:11:13:98:1c:e5:e8:f7:
+                    be:37:84:99:ba:8c:22:3c:c4:59:4d:98:53:41:96:
+                    6e:27
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9C:93:40:54:48:97:2B:0C:3B:AF:CE:5C:79:97:26:EC:32:33:4C:FB
+                CC:76:BA:62:45:30:8F:0C:F1:16:BF:97:D6:1E:5F:0D:4A:E8:04:C4
             X509v3 Authority Key Identifier: 
-                keyid:6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                keyid:C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         14:4a:f9:6f:29:a6:a1:1b:2b:d7:3d:5d:14:83:05:1a:46:ac:
-         73:64:d5:b7:09:87:0f:08:1d:b2:ac:1c:db:79:05:e4:62:fa:
-         37:7d:78:82:c9:7c:44:f3:01:9a:a6:31:78:ac:af:1e:53:9e:
-         84:ab:95:f0:2e:48:62:d6:3e:a3:95:35:1e:18:c6:9e:0d:15:
-         9e:94:0f:bd:8c:1b:f6:de:48:d8:cd:7c:9b:23:4d:bb:d0:f6:
-         df:bb:27:a6:55:82:07:3e:27:2e:80:6e:b3:67:06:67:6d:b6:
-         f8:5f:60:58:ab:d8:9d:f6:4b:6b:a8:9a:be:9e:c3:69:e8:15:
-         00:61:9f:b2:24:6d:bd:d5:e3:7e:c7:83:66:4e:12:58:b7:c1:
-         c1:0e:de:1a:dc:ae:4d:19:78:b8:6c:48:fb:5b:fc:a2:86:0b:
-         60:77:d7:cb:d6:e6:c9:13:5f:cf:d6:98:6c:ab:9e:9b:9d:99:
-         4c:87:91:3e:d1:4a:ad:ef:84:f6:45:cc:da:99:fa:ff:57:df:
-         be:44:70:f9:0c:38:63:c0:31:44:45:05:46:9a:63:db:dd:a0:
-         f5:dc:1b:f8:51:d8:30:e5:47:23:29:d1:79:a5:e6:1e:87:2b:
-         c3:f8:0e:fe:de:13:bb:cd:a5:14:f3:d8:0b:34:73:47:68:07:
-         8a:ac:e0:65
+         11:24:4f:5a:a7:66:92:de:89:08:f6:49:7d:0c:76:be:e2:5f:
+         2f:1c:9d:f1:69:8a:f5:f7:5b:3b:24:83:40:51:06:67:61:40:
+         e0:5a:64:26:70:53:3b:17:78:b4:07:3a:7c:b9:6a:44:88:f3:
+         4f:2f:27:d1:1c:40:95:c4:0f:47:90:ee:da:87:f1:82:78:72:
+         3f:86:f2:7e:2e:b4:d3:18:02:48:dd:a5:6f:5f:ac:a2:c0:f0:
+         f6:50:6d:66:da:6f:8d:9b:b4:ce:df:fa:4f:13:e6:d3:c3:fd:
+         ff:f5:72:fc:65:b8:78:19:b9:d5:00:d0:13:00:1d:1e:28:05:
+         cc:dd:02:0d:48:20:24:b2:3a:1b:89:34:de:d9:24:fb:42:7f:
+         8a:5a:97:23:04:00:5e:8a:eb:2f:39:c0:e6:dc:c7:1b:d9:be:
+         12:df:1e:e9:62:9b:ff:cd:95:0e:9a:20:1b:6f:ae:e7:9f:33:
+         78:95:9c:c8:1d:a2:9b:6e:52:ff:8a:85:94:4a:d5:98:40:a0:
+         3e:ab:3a:a6:6f:21:ce:ef:06:5c:54:71:00:30:d0:aa:a6:25:
+         dc:44:fc:75:ca:77:c4:84:50:4f:3b:f5:c4:b3:fc:31:00:fb:
+         c2:f7:4b:6a:3b:7a:7c:34:89:fa:58:62:b3:a3:66:ea:b1:37:
+         38:e1:24:49
 -----BEGIN CERTIFICATE-----
 MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxiJ1ksR8
-b3dNRvcXhBviCB//cX5NbaTnD1hGhGEiAnBOuEU64hDRz/+RfBKOfRmrCkasG9bW
-BbaZQ5ur5c/uYumUIYRyW2NuWuElQsO37jFf4OdpGQGi1VRw+KqqJFs7TSvNL+Qq
-pL66L6uitviEcfMjvBJoJh5J0Ic+RkYzR3DyQtQ/upyJfU9upTXP2UaoY8Q1SudP
-8uBRkI4I7S6uGKxdFkQlMvobPBTpN2mfckgBpRvz4ed17MqSg0ikZ+GNwd0VAuRK
-gpPT8yeeZs6oOhfSxqcIMbrS6Of6U7ZPCdh+5FOy8QPZxDEMbTKgnQjTxLvbRRFo
-gLr4UtwZnmdomQIDAQABo4HIMIHFMB0GA1UdDgQWBBSck0BUSJcrDDuvzlx5lybs
-MjNM+zAfBgNVHSMEGDAWgBRvJc1NHwnQWtU6Iwhy8Z0Iih3KNDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwGDa25UN
+C72/DX+vpYNDXgisEhfN8v1wPrUzfc6nHelKiAyDdnF4OGWRdnD4jr7Qz49BggyW
+lfiQ/tKmmVgH9kGy67BBjuJ7wiY0VJguyY3fmBwIWCamn6KEDpAcLX3lAbvAzNEG
+tfNNYY3dzzzKr6yXxJjUTxyBYShcCHe70rcBPOPreJWtDqoUGGpxIeISRd/hMwMD
+3iy8n5cCxszg+3wFN2ztTIQIsLwxo81Kjxz2pCtE+n4pvUF2uGvNtMw9HKEBJyrp
+ZM9OlzQAFRhb3FOpxcFWhUUO5xn1txOJvH21flkTE8ncoBETmBzl6Pe+N4SZuowi
+PMRZTZhTQZZuJwIDAQABo4HIMIHFMB0GA1UdDgQWBBTMdrpiRTCPDPEWv5fWHl8N
+SugExDAfBgNVHSMEGDAWgBTGcXFBDlQJccTSYwG0VuHU8DxSszA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABRK
-+W8ppqEbK9c9XRSDBRpGrHNk1bcJhw8IHbKsHNt5BeRi+jd9eILJfETzAZqmMXis
-rx5TnoSrlfAuSGLWPqOVNR4Yxp4NFZ6UD72MG/beSNjNfJsjTbvQ9t+7J6ZVggc+
-Jy6AbrNnBmdttvhfYFir2J32S2uomr6ew2noFQBhn7Ikbb3V437Hg2ZOEli3wcEO
-3hrcrk0ZeLhsSPtb/KKGC2B318vW5skTX8/WmGyrnpudmUyHkT7RSq3vhPZFzNqZ
-+v9X375EcPkMOGPAMURFBUaaY9vdoPXcG/hR2DDlRyMp0Xml5h6HK8P4Dv7eE7vN
-pRTz2As0c0doB4qs4GU=
+VR0PAQH/BAQDAgEGMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABEk
+T1qnZpLeiQj2SX0Mdr7iXy8cnfFpivX3Wzskg0BRBmdhQOBaZCZwUzsXeLQHOny5
+akSI808vJ9EcQJXED0eQ7tqH8YJ4cj+G8n4utNMYAkjdpW9frKLA8PZQbWbab42b
+tM7f+k8T5tPD/f/1cvxluHgZudUA0BMAHR4oBczdAg1IICSyOhuJNN7ZJPtCf4pa
+lyMEAF6K6y85wObcxxvZvhLfHulim//NlQ6aIBtvruefM3iVnMgdoptuUv+KhZRK
+1ZhAoD6rOqZvIc7vBlxUcQAw0KqmJdxE/HXKd8SEUE879cSz/DEA+8L3S2o7enw0
+ifpYYrOjZuqxNzjhJEk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:3e:31:36:4f:df:d0:36:0e:06:5c:89:2c:c8:
-                    01:c6:18:a4:e7:1f:82:11:af:30:66:28:7c:c3:14:
-                    b2:ff:a4:6c:6a:c0:f4:ae:58:82:5f:91:e6:78:19:
-                    d7:d2:87:5c:9e:75:3a:af:c0:fd:e8:18:c4:81:b4:
-                    51:be:f7:c3:0d:74:d7:8a:53:01:28:c9:da:93:f4:
-                    a6:da:51:6a:d1:23:78:1b:ab:17:46:e6:bb:71:4e:
-                    33:8b:9d:e1:75:7e:56:3b:00:02:74:fe:1f:49:01:
-                    81:0f:59:05:d6:2a:a0:48:db:9f:fc:29:6e:77:6e:
-                    e3:78:63:4d:12:9f:f5:54:63:a5:1e:b2:c4:83:62:
-                    ac:79:76:bd:80:d9:4c:dd:99:44:91:c3:31:fd:0f:
-                    3a:d8:13:6d:3c:4f:98:5b:50:e0:1a:84:b5:3b:e2:
-                    0f:52:89:7f:b0:de:97:e2:f9:e5:0b:2c:c4:61:9a:
-                    f3:4b:15:e3:f2:a3:30:44:b0:d4:a6:1a:dd:60:c0:
-                    85:21:30:ed:b5:1e:6f:9f:50:db:ad:42:a6:3a:04:
-                    7c:3f:ae:94:ed:eb:43:2a:d9:85:c8:1d:72:f4:61:
-                    d5:27:7a:a4:62:93:56:37:4b:4e:d5:44:02:f0:29:
-                    1f:70:2c:76:fb:2f:5b:d4:dc:86:09:03:fe:d9:13:
-                    5f:27
+                    00:be:73:10:40:dd:65:86:31:5c:ae:42:67:6c:47:
+                    fa:1c:5b:c5:22:46:fc:46:75:72:84:52:fe:f2:5a:
+                    fd:96:65:80:75:ba:43:d5:1e:ff:d9:9e:b4:f2:d3:
+                    c5:be:d6:b6:75:c9:33:e8:83:33:77:ec:17:90:e5:
+                    30:56:a3:f3:00:ab:cb:e9:ae:f3:69:04:07:e3:1f:
+                    11:ec:9f:78:b5:81:0a:ae:f5:52:bb:fb:ed:16:b4:
+                    6e:c1:af:ca:0b:be:eb:39:af:d8:97:7d:ef:63:0d:
+                    73:43:60:10:b0:71:9b:78:da:5f:19:a9:49:03:bf:
+                    50:49:f3:8b:2c:93:a4:c0:f8:e5:67:0c:3d:28:9c:
+                    51:f5:95:c9:7f:cc:be:6e:1a:3c:e4:20:cc:11:37:
+                    48:a5:4f:54:36:23:67:80:cf:be:2e:66:d1:a8:d6:
+                    83:cd:9d:40:a3:18:97:97:d5:98:d4:45:09:34:4c:
+                    4d:f3:d1:03:44:90:4a:fd:86:df:9e:92:ba:b1:59:
+                    9e:e1:e1:9d:1b:da:1e:a7:f0:9e:72:98:88:4c:cc:
+                    1d:38:4f:d6:8f:05:53:55:67:31:c3:d1:34:3e:3b:
+                    11:f4:c1:c6:63:77:17:64:dd:c6:b4:ab:bc:fd:c1:
+                    1f:34:59:56:48:53:95:36:97:ca:02:d0:31:da:70:
+                    70:c1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
             X509v3 Authority Key Identifier: 
-                keyid:6F:25:CD:4D:1F:09:D0:5A:D5:3A:23:08:72:F1:9D:08:8A:1D:CA:34
+                keyid:C6:71:71:41:0E:54:09:71:C4:D2:63:01:B4:56:E1:D4:F0:3C:52:B3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5e:dc:6f:dc:d9:7f:6f:75:c7:c8:27:62:2f:02:7c:c2:26:35:
-         82:6c:5e:93:88:34:9b:e2:fc:8a:89:9e:0a:a0:89:aa:08:e4:
-         1c:59:38:4b:c7:5c:ba:92:d5:ce:1a:b0:30:25:ba:69:c9:52:
-         6e:29:78:31:d6:49:c5:b3:64:e3:49:28:2d:3c:41:8a:10:c4:
-         77:f1:a8:77:37:50:52:ec:ed:bb:1a:61:3f:29:ad:3e:1a:56:
-         06:48:a0:89:17:91:77:67:bc:4d:68:9a:ac:a8:a8:ad:4a:05:
-         2a:33:18:7a:5e:b9:32:f5:c4:7b:c0:23:90:fb:78:9a:0a:18:
-         f3:9b:46:f1:3c:c5:f0:3c:1b:06:56:39:3b:ba:da:5e:7e:5f:
-         42:47:bc:fd:a6:bb:64:2d:db:9a:5b:60:61:e6:9d:a6:ac:c9:
-         24:20:ff:cd:b7:5d:ee:8e:04:92:a1:10:34:26:48:b2:b6:3a:
-         c7:9a:66:2e:f0:64:f0:61:64:ef:28:85:c9:94:46:6b:fb:c5:
-         0f:b9:f5:ef:51:5a:61:be:27:39:00:4c:00:7f:8a:49:14:7b:
-         1a:40:e5:e7:fe:d6:d0:a7:df:33:5c:86:1e:e5:4a:64:ff:e8:
-         8f:1f:9e:3c:d8:a9:a2:d2:0b:c3:53:b7:cf:f6:d1:92:84:be:
-         d9:e6:67:06
+         a0:fe:16:79:26:b5:c1:85:54:21:49:ea:b6:0b:03:14:1f:bb:
+         0c:e2:0c:35:d6:38:b6:0c:3e:39:d5:fb:5c:5d:db:73:99:1c:
+         b7:26:e4:d8:1d:87:59:8c:33:77:e6:58:8b:ec:5c:a6:2d:06:
+         c5:60:7d:c2:b3:dc:96:39:95:9e:12:06:19:2d:80:21:dc:cd:
+         2c:d9:12:b4:9e:fc:e8:47:61:4e:bb:56:c5:19:62:01:bd:e4:
+         70:60:91:6f:c6:5c:c8:e9:c0:af:a0:16:b9:20:cb:eb:19:9d:
+         49:03:52:01:09:4b:7d:f0:20:cc:96:b6:e8:b0:4d:55:65:a9:
+         dd:45:06:25:f6:54:37:8a:7a:81:c6:ce:65:18:99:a2:4b:e5:
+         5a:29:5f:fc:24:6e:07:67:33:dc:70:2e:1f:02:57:53:47:c4:
+         c9:2d:aa:dc:5c:d5:ce:16:30:8d:81:aa:fa:c3:92:cc:b6:a6:
+         fc:cd:e8:d5:90:b6:46:a9:6b:7b:3a:64:1b:e8:a6:d1:b0:24:
+         fd:e1:f5:be:d8:d8:e7:0b:f8:af:8b:9f:47:24:76:65:48:a7:
+         56:40:b2:e3:1a:52:b4:ae:9b:86:01:1f:89:86:0b:c6:dd:1b:
+         16:d2:6a:14:d4:de:35:19:9a:f0:7f:b2:96:56:ee:65:87:58:
+         25:15:98:be
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMQ+MTZP39A2DgZciSzI
-AcYYpOcfghGvMGYofMMUsv+kbGrA9K5Ygl+R5ngZ19KHXJ51Oq/A/egYxIG0Ub73
-ww1014pTASjJ2pP0ptpRatEjeBurF0bmu3FOM4ud4XV+VjsAAnT+H0kBgQ9ZBdYq
-oEjbn/wpbndu43hjTRKf9VRjpR6yxINirHl2vYDZTN2ZRJHDMf0POtgTbTxPmFtQ
-4BqEtTviD1KJf7Del+L55QssxGGa80sV4/KjMESw1KYa3WDAhSEw7bUeb59Q261C
-pjoEfD+ulO3rQyrZhcgdcvRh1Sd6pGKTVjdLTtVEAvApH3AsdvsvW9TchgkD/tkT
-XycCAwEAAaOByzCByDAdBgNVHQ4EFgQUbyXNTR8J0FrVOiMIcvGdCIodyjQwHwYD
-VR0jBBgwFoAUbyXNTR8J0FrVOiMIcvGdCIodyjQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5zEEDdZYYxXK5CZ2xH
++hxbxSJG/EZ1coRS/vJa/ZZlgHW6Q9Ue/9metPLTxb7WtnXJM+iDM3fsF5DlMFaj
+8wCry+mu82kEB+MfEeyfeLWBCq71Urv77Ra0bsGvygu+6zmv2Jd972MNc0NgELBx
+m3jaXxmpSQO/UEnziyyTpMD45WcMPSicUfWVyX/Mvm4aPOQgzBE3SKVPVDYjZ4DP
+vi5m0ajWg82dQKMYl5fVmNRFCTRMTfPRA0SQSv2G356SurFZnuHhnRvaHqfwnnKY
+iEzMHThP1o8FU1VnMcPRND47EfTBxmN3F2TdxrSrvP3BHzRZVkhTlTaXygLQMdpw
+cMECAwEAAaOByzCByDAdBgNVHQ4EFgQUxnFxQQ5UCXHE0mMBtFbh1PA8UrMwHwYD
+VR0jBBgwFoAUxnFxQQ5UCXHE0mMBtFbh1PA8UrMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBe3G/c2X9v
-dcfIJ2IvAnzCJjWCbF6TiDSb4vyKiZ4KoImqCOQcWThLx1y6ktXOGrAwJbppyVJu
-KXgx1knFs2TjSSgtPEGKEMR38ah3N1BS7O27GmE/Ka0+GlYGSKCJF5F3Z7xNaJqs
-qKitSgUqMxh6Xrky9cR7wCOQ+3iaChjzm0bxPMXwPBsGVjk7utpefl9CR7z9prtk
-LduaW2Bh5p2mrMkkIP/Nt13ujgSSoRA0JkiytjrHmmYu8GTwYWTvKIXJlEZr+8UP
-ufXvUVphvic5AEwAf4pJFHsaQOXn/tbQp98zXIYe5Upk/+iPH5482Kmi0gvDU7fP
-9tGShL7Z5mcG
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCg/hZ5JrXB
+hVQhSeq2CwMUH7sM4gw11ji2DD451ftcXdtzmRy3JuTYHYdZjDN35liL7FymLQbF
+YH3Cs9yWOZWeEgYZLYAh3M0s2RK0nvzoR2FOu1bFGWIBveRwYJFvxlzI6cCvoBa5
+IMvrGZ1JA1IBCUt98CDMlrbosE1VZandRQYl9lQ3inqBxs5lGJmiS+VaKV/8JG4H
+ZzPccC4fAldTR8TJLarcXNXOFjCNgar6w5LMtqb8zejVkLZGqWt7OmQb6KbRsCT9
+4fW+2NjnC/ivi59HJHZlSKdWQLLjGlK0rpuGAR+JhgvG3RsW0moU1N41GZrwf7KW
+Vu5lh1glFZi+
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Basic Constraints indicates not a CA
 
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
index 8a1ec44..cb075aa 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9f:2f:38:1d:84:e6:1c:ed:c4:47:2b:63:0b:41:
-                    73:dd:fe:74:c7:1a:d2:c8:7f:c1:90:ae:bf:6b:82:
-                    a1:17:93:80:a1:92:39:52:66:81:93:90:e6:15:d7:
-                    d6:bc:a4:03:eb:fc:50:b2:dc:f6:29:f7:a9:32:b6:
-                    23:6c:d4:d0:3e:d9:56:6e:9d:a0:91:10:2c:8a:1e:
-                    93:8d:38:37:ef:3e:7d:7a:de:15:07:c2:6c:62:1c:
-                    76:81:ce:a7:9e:be:44:57:1b:77:77:ed:fa:2f:e1:
-                    c5:53:83:65:74:c6:11:3c:f2:4d:84:89:1d:3b:54:
-                    93:5e:38:44:f1:d4:03:ad:03:69:fd:eb:da:02:aa:
-                    cf:6f:04:ea:22:0a:3f:a1:68:bc:56:a4:51:aa:93:
-                    8a:f2:22:47:42:04:98:48:68:40:2e:f6:a6:8d:38:
-                    84:ba:1a:56:0c:bc:53:85:77:b4:ba:e2:03:ac:10:
-                    0f:1d:52:64:ad:f5:92:20:38:dc:fa:dd:8b:c6:8d:
-                    96:30:ea:72:e2:aa:ff:5d:c3:fc:dc:1a:43:c6:da:
-                    48:56:f6:4c:d4:8d:00:da:28:5f:01:23:9b:b1:eb:
-                    b7:92:b7:35:43:5e:c0:21:96:22:b6:bd:c6:5f:1b:
-                    0b:58:88:44:a5:ee:90:f4:e6:d0:94:41:2c:44:8c:
-                    af:e9
+                    00:ed:76:79:eb:55:2f:66:53:1e:8c:9b:58:a4:77:
+                    cb:ac:a3:3b:a1:28:c0:e2:1d:b1:40:4e:61:89:43:
+                    ac:32:7d:8b:38:61:27:16:c9:1d:6e:67:c7:06:98:
+                    0d:64:e9:8f:42:82:6a:f4:e1:11:10:9c:d2:71:6c:
+                    08:5e:83:d2:76:0c:47:a6:86:74:e2:f4:26:10:85:
+                    9a:23:9e:d4:73:ea:f0:dc:80:43:a3:9a:23:01:b7:
+                    4f:7d:26:2e:b6:e5:4c:86:89:89:da:b9:77:60:a9:
+                    ff:37:57:a2:76:c0:85:53:b0:29:3a:d3:a4:83:2b:
+                    f4:70:71:2d:f9:20:ff:04:95:21:8a:56:18:e7:74:
+                    7f:6b:24:52:fb:79:1e:9a:5a:c6:81:5c:a2:97:bf:
+                    9b:0a:d5:18:6f:f0:07:08:54:ee:40:ad:2f:13:9e:
+                    75:3a:d2:7c:8a:40:a2:48:f9:10:84:ef:47:3b:5e:
+                    fd:78:67:19:d1:1d:97:d5:a5:b3:08:db:f4:36:aa:
+                    df:df:14:5c:24:11:38:3b:9b:ea:2e:35:c0:ae:8b:
+                    2b:55:07:01:77:aa:98:b2:b4:dc:f7:4e:82:55:e7:
+                    8e:ab:c5:bf:3e:c9:35:a5:b2:09:93:29:6c:c1:dc:
+                    b1:17:fd:f3:1b:7d:18:97:d6:3c:68:4e:4d:c6:3a:
+                    72:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                05:31:5F:95:5B:3C:43:02:74:27:C6:2E:06:50:92:FF:5C:54:AE:73
+                C0:8D:DC:47:E2:8A:82:BC:92:6D:8F:9F:F2:C7:F6:14:DE:09:CC:AC
             X509v3 Authority Key Identifier: 
-                keyid:77:27:6B:15:A8:06:86:AD:0D:67:E0:D6:5B:82:3A:F8:6B:00:A3:A7
+                keyid:8A:DE:CB:21:3C:DA:E9:1D:8B:27:C3:94:11:AD:14:38:5F:9F:9F:66
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         00:ba:cd:3c:7b:0f:eb:b3:b1:5f:5b:0a:83:12:4d:d6:28:7e:
-         ff:d9:65:2c:23:f8:d2:68:cc:25:14:0c:6e:9b:37:bb:72:66:
-         13:54:ff:b9:2f:f4:c8:9e:77:5b:31:2b:93:e6:94:cf:e9:bd:
-         43:1a:e8:f6:c3:c5:61:fa:ff:a7:72:09:ba:2b:08:02:e4:a5:
-         62:24:b1:b1:3b:0a:c0:bb:72:19:af:73:2d:9a:66:8e:f7:0f:
-         30:9f:49:0f:aa:83:87:ed:45:9e:75:3a:50:32:d6:c4:cf:20:
-         a0:31:73:16:98:69:e9:d7:16:5b:6f:6f:0a:d8:96:82:a3:d6:
-         a8:a4:84:d7:1a:50:22:bd:14:d7:61:d9:43:a9:58:cf:46:e8:
-         64:e9:1c:a9:d6:d3:49:45:1e:53:16:71:05:a7:0b:ae:d7:c0:
-         43:8c:24:02:07:6f:99:ed:4b:f6:89:a8:31:f5:ba:56:e3:db:
-         00:10:7e:0d:e0:46:96:b2:27:be:60:29:e8:91:e9:55:43:b1:
-         e6:74:e9:17:4e:bd:db:32:ec:61:7e:b0:d1:17:27:90:29:d9:
-         2e:53:6a:8f:de:77:ae:f4:ff:f4:96:84:e6:8d:37:43:63:17:
-         87:6a:8c:55:bd:ea:fd:2c:b2:83:10:3c:d7:f0:bd:21:45:ad:
-         ba:36:6d:43
+         67:4f:b4:2f:37:81:5d:d5:5b:50:a7:ae:65:06:9f:b2:90:1b:
+         dd:8e:5c:9e:77:05:ed:6e:50:bf:af:9d:0a:06:f0:5b:1e:ef:
+         ce:b4:2b:65:d3:93:46:cf:d4:3f:6e:b1:c4:92:35:15:e3:c9:
+         3e:01:56:6c:25:1f:d4:ab:04:14:f3:a5:68:33:aa:59:32:3b:
+         d1:24:fe:54:2f:df:6b:58:33:ab:2f:da:c4:47:4e:09:ea:32:
+         54:7e:46:52:03:23:d7:84:0d:b1:e1:8a:ee:79:cc:69:55:7e:
+         df:7a:f2:8a:21:b9:ba:f6:0e:29:4b:5b:bb:18:11:01:6c:22:
+         c4:17:eb:2b:6a:c7:af:f6:80:a5:c4:f3:e3:47:e0:e9:9d:47:
+         f5:77:6d:d2:da:96:93:bc:2c:25:d2:ec:eb:6b:e2:de:b2:9a:
+         bf:7b:41:a0:f9:07:3a:8a:00:30:14:40:6e:4f:f4:c4:c3:cb:
+         d3:20:50:69:b4:ab:0a:96:44:ea:dc:e9:7a:2f:11:3a:7e:cf:
+         2e:0d:60:e2:f1:78:4d:42:c2:11:84:67:4f:eb:1c:14:7b:fe:
+         81:7a:93:ed:5b:4a:a1:d2:99:51:f6:a6:db:e7:d5:09:40:d1:
+         f6:7c:48:71:ab:5d:b2:b2:c1:32:ae:b0:36:43:fe:1e:ab:cb:
+         93:ad:c6:45
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfLzgd
-hOYc7cRHK2MLQXPd/nTHGtLIf8GQrr9rgqEXk4ChkjlSZoGTkOYV19a8pAPr/FCy
-3PYp96kytiNs1NA+2VZunaCRECyKHpONODfvPn163hUHwmxiHHaBzqeevkRXG3d3
-7fov4cVTg2V0xhE88k2EiR07VJNeOETx1AOtA2n969oCqs9vBOoiCj+haLxWpFGq
-k4ryIkdCBJhIaEAu9qaNOIS6GlYMvFOFd7S64gOsEA8dUmSt9ZIgONz63YvGjZYw
-6nLiqv9dw/zcGkPG2khW9kzUjQDaKF8BI5ux67eStzVDXsAhliK2vcZfGwtYiESl
-7pD05tCUQSxEjK/pAgMBAAGjgekwgeYwHQYDVR0OBBYEFAUxX5VbPEMCdCfGLgZQ
-kv9cVK5zMB8GA1UdIwQYMBaAFHcnaxWoBoatDWfg1luCOvhrAKOnMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtdnnr
+VS9mUx6Mm1ikd8usozuhKMDiHbFATmGJQ6wyfYs4YScWyR1uZ8cGmA1k6Y9Cgmr0
+4REQnNJxbAheg9J2DEemhnTi9CYQhZojntRz6vDcgEOjmiMBt099Ji625UyGiYna
+uXdgqf83V6J2wIVTsCk606SDK/RwcS35IP8ElSGKVhjndH9rJFL7eR6aWsaBXKKX
+v5sK1Rhv8AcIVO5ArS8TnnU60nyKQKJI+RCE70c7Xv14ZxnRHZfVpbMI2/Q2qt/f
+FFwkETg7m+ouNcCuiytVBwF3qpiytNz3ToJV546rxb8+yTWlsgmTKWzB3LEX/fMb
+fRiX1jxoTk3GOnKpAgMBAAGjgekwgeYwHQYDVR0OBBYEFMCN3EfiioK8km2Pn/LH
+9hTeCcysMB8GA1UdIwQYMBaAFIreyyE82ukdiyfDlBGtFDhfn59mMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAALrNPHsP67OxX1sKgxJN
-1ih+/9llLCP40mjMJRQMbps3u3JmE1T/uS/0yJ53WzErk+aUz+m9Qxro9sPFYfr/
-p3IJuisIAuSlYiSxsTsKwLtyGa9zLZpmjvcPMJ9JD6qDh+1FnnU6UDLWxM8goDFz
-Fphp6dcWW29vCtiWgqPWqKSE1xpQIr0U12HZQ6lYz0boZOkcqdbTSUUeUxZxBacL
-rtfAQ4wkAgdvme1L9omoMfW6VuPbABB+DeBGlrInvmAp6JHpVUOx5nTpF0692zLs
-YX6w0RcnkCnZLlNqj953rvT/9JaE5o03Q2MXh2qMVb3q/SyygxA81/C9IUWtujZt
-Qw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAZ0+0LzeBXdVbUKeuZQaf
+spAb3Y5cnncF7W5Qv6+dCgbwWx7vzrQrZdOTRs/UP26xxJI1FePJPgFWbCUf1KsE
+FPOlaDOqWTI70ST+VC/fa1gzqy/axEdOCeoyVH5GUgMj14QNseGK7nnMaVV+33ry
+iiG5uvYOKUtbuxgRAWwixBfrK2rHr/aApcTz40fg6Z1H9Xdt0tqWk7wsJdLs62vi
+3rKav3tBoPkHOooAMBRAbk/0xMPL0yBQabSrCpZE6tzpei8ROn7PLg1g4vF4TULC
+EYRnT+scFHv+gXqT7VtKodKZUfam2+fVCUDR9nxIcatdsrLBMq6wNkP+HqvLk63G
+RQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:94:4c:ba:e4:24:50:f0:02:98:a7:42:66:d3:d6:
-                    53:4d:ad:3f:76:fa:4f:72:61:fd:79:cc:43:e2:d6:
-                    2f:d9:99:84:0b:da:34:6f:65:ca:78:2b:a9:22:98:
-                    04:ba:93:89:e9:8c:d0:71:62:cd:a4:3a:35:e2:8c:
-                    2d:8a:48:36:2b:d1:99:52:27:c7:44:34:30:2c:87:
-                    a7:47:e3:df:74:a3:6c:c6:3c:d2:ba:5c:3c:04:79:
-                    1f:11:36:58:7a:86:65:60:cc:a1:4c:ba:f9:72:7e:
-                    80:d3:1b:12:18:8a:44:b3:f3:fa:20:f8:8c:3d:63:
-                    e3:96:0a:6b:0a:32:a1:f1:75:7c:6b:76:5f:1b:ef:
-                    bd:64:c3:34:fd:2e:27:89:dd:ef:e5:74:08:08:a4:
-                    96:92:7b:f3:4b:f5:ee:eb:91:0b:bb:ca:53:e8:ed:
-                    48:a8:bb:7c:f8:9f:30:f7:15:05:32:7d:73:62:37:
-                    4f:f7:a1:d4:de:45:e2:f7:49:86:b9:c9:f8:84:cc:
-                    67:b2:f0:34:48:e6:54:e4:5d:1f:fb:03:fc:d8:15:
-                    a1:17:0e:53:0d:c8:c9:a6:99:bf:f8:93:df:af:35:
-                    e3:10:91:91:24:f3:eb:88:0b:d8:4f:16:36:a3:28:
-                    ad:21:bd:22:bf:46:59:0a:ea:f0:fb:fc:01:c3:ba:
-                    42:e9
+                    00:a8:ea:08:6f:d9:38:21:99:d3:63:51:e7:2e:2a:
+                    a4:35:da:22:83:26:f7:cf:41:e2:7e:9a:7d:a0:59:
+                    52:92:3b:46:4f:9d:da:0f:34:e6:a5:83:bb:20:9b:
+                    e2:8e:70:9b:ea:dd:99:14:de:15:9c:f8:4b:04:0a:
+                    53:90:09:82:77:ba:f5:04:e5:f3:8a:aa:b5:05:1d:
+                    50:0c:c9:3f:2b:0a:22:a1:4c:31:ab:99:7b:11:8f:
+                    a2:19:76:05:8a:de:8c:24:d2:52:73:6f:d9:1b:e9:
+                    0e:06:37:04:15:8a:cf:b0:74:1c:32:e5:5d:8b:56:
+                    3c:55:99:97:2c:67:5d:27:2f:21:4d:6c:da:76:93:
+                    69:3d:36:65:4e:50:f8:38:6a:09:6c:87:4c:95:9d:
+                    db:2d:6f:2c:2a:20:47:c7:0a:e0:df:24:fc:df:d3:
+                    49:e7:30:3c:ff:a1:10:2a:4c:5d:0a:e6:12:b2:9b:
+                    d7:1a:09:28:b2:71:41:16:75:9c:65:79:2a:78:c6:
+                    ed:7e:e5:c2:b0:6c:15:46:aa:c7:aa:e1:86:2a:7c:
+                    38:e0:ac:e6:e9:36:2a:17:93:87:3f:3f:c5:b0:7c:
+                    85:39:49:c1:9a:31:88:92:d3:2c:7b:2f:a1:64:b4:
+                    d2:78:11:30:61:91:27:bb:a7:fc:c4:dc:33:e8:4e:
+                    9d:97
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                77:27:6B:15:A8:06:86:AD:0D:67:E0:D6:5B:82:3A:F8:6B:00:A3:A7
+                8A:DE:CB:21:3C:DA:E9:1D:8B:27:C3:94:11:AD:14:38:5F:9F:9F:66
             X509v3 Authority Key Identifier: 
-                keyid:6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                keyid:B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         af:80:f1:f7:93:98:cd:84:13:e3:eb:ab:2d:ff:91:4c:72:5d:
-         d9:a9:b7:96:e8:bc:e9:f3:31:a0:46:7c:0d:49:a3:1f:5a:6a:
-         aa:82:9a:c2:1f:37:7a:9a:37:1a:96:fb:8e:fa:28:e1:eb:b8:
-         a3:d0:66:2d:9e:6e:ff:8e:c3:0a:17:23:ae:60:d5:9b:d2:fb:
-         23:2b:a9:b0:22:cb:e6:85:29:11:d3:b5:71:3e:30:9a:9c:60:
-         24:c5:a8:42:66:4f:5c:10:8b:fa:61:ad:d7:14:2b:51:0e:53:
-         24:1a:c7:5f:d9:12:97:6a:8c:da:d5:f9:35:41:4c:d4:0e:a8:
-         98:c6:e8:61:db:7b:95:d5:ca:26:ff:60:01:e2:c6:4e:f7:67:
-         ee:36:1f:2b:71:82:46:f5:11:44:ce:7b:ac:85:06:f1:09:35:
-         07:62:08:36:ad:b6:5b:c6:70:a0:bb:f0:5b:2e:47:09:a2:69:
-         79:a6:f1:77:fd:3c:b9:57:f4:c7:e6:f8:80:18:ba:d0:a0:c1:
-         b1:6f:b9:c8:3b:a2:c1:83:5c:e7:3a:05:19:36:c5:ae:54:dc:
-         df:1d:ad:18:e0:52:dd:71:ba:53:3e:2c:7d:eb:09:3a:cb:25:
-         10:b3:52:50:7f:42:2b:a8:2c:a7:cc:02:8e:17:99:af:7e:d2:
-         75:f4:15:f1
+         5d:26:64:34:00:76:cd:aa:49:2a:2a:35:27:da:c2:f9:84:69:
+         89:81:7e:e1:03:59:d2:9d:54:21:04:4b:b9:e4:32:70:43:fd:
+         9e:91:2d:37:4e:17:4f:50:0e:01:94:9e:ec:f7:82:0a:30:00:
+         45:20:7d:5a:46:d1:8e:4e:51:9a:78:b7:c3:6f:a4:dd:30:fb:
+         7d:4a:c4:d4:d1:1b:0c:97:06:d5:7e:75:fc:0e:d0:fb:0c:15:
+         14:9f:21:1f:d5:9f:01:5f:ac:30:37:db:52:05:9b:b3:e8:d7:
+         39:39:4e:2c:c7:19:6a:dd:36:83:ef:67:89:de:91:92:94:e2:
+         5a:75:e4:f3:8d:ed:66:68:4d:93:1d:c9:87:58:42:84:4c:80:
+         5b:6f:0a:99:b7:fa:88:b1:df:f5:d5:b7:59:65:80:27:56:db:
+         1c:76:0b:f9:5f:89:38:5c:79:a3:a9:81:aa:5a:ae:ec:26:d9:
+         00:ac:5a:49:86:8e:38:4e:9f:a4:ff:ad:7e:83:12:04:e0:1f:
+         6a:a5:f8:57:ad:f4:0f:0f:3d:ae:36:ce:0a:8a:e5:2b:1a:71:
+         d9:9d:4e:57:7e:74:fd:b8:d1:13:5e:ac:e8:2e:54:d6:99:b6:
+         22:af:d4:12:5f:8e:3b:26:9d:e7:ba:a8:a7:70:26:64:e9:83:
+         62:cf:68:1e
 -----BEGIN CERTIFICATE-----
 MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlEy65CRQ
-8AKYp0Jm09ZTTa0/dvpPcmH9ecxD4tYv2ZmEC9o0b2XKeCupIpgEupOJ6YzQcWLN
-pDo14owtikg2K9GZUifHRDQwLIenR+PfdKNsxjzSulw8BHkfETZYeoZlYMyhTLr5
-cn6A0xsSGIpEs/P6IPiMPWPjlgprCjKh8XV8a3ZfG++9ZMM0/S4nid3v5XQICKSW
-knvzS/Xu65ELu8pT6O1IqLt8+J8w9xUFMn1zYjdP96HU3kXi90mGucn4hMxnsvA0
-SOZU5F0f+wP82BWhFw5TDcjJppm/+JPfrzXjEJGRJPPriAvYTxY2oyitIb0iv0ZZ
-Curw+/wBw7pC6QIDAQABo4HIMIHFMB0GA1UdDgQWBBR3J2sVqAaGrQ1n4NZbgjr4
-awCjpzAfBgNVHSMEGDAWgBRsFyMYyqakKMYITKqaPxj7e2eyNjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqOoIb9k4
+IZnTY1HnLiqkNdoigyb3z0Hifpp9oFlSkjtGT53aDzTmpYO7IJvijnCb6t2ZFN4V
+nPhLBApTkAmCd7r1BOXziqq1BR1QDMk/KwoioUwxq5l7EY+iGXYFit6MJNJSc2/Z
+G+kOBjcEFYrPsHQcMuVdi1Y8VZmXLGddJy8hTWzadpNpPTZlTlD4OGoJbIdMlZ3b
+LW8sKiBHxwrg3yT839NJ5zA8/6EQKkxdCuYSspvXGgkosnFBFnWcZXkqeMbtfuXC
+sGwVRqrHquGGKnw44Kzm6TYqF5OHPz/FsHyFOUnBmjGIktMsey+hZLTSeBEwYZEn
+u6f8xNwz6E6dlwIDAQABo4HIMIHFMB0GA1UdDgQWBBSK3sshPNrpHYsnw5QRrRQ4
+X5+fZjAfBgNVHSMEGDAWgBS1TyuxbKLuxrVJtXfRrIJFdcmbHDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAK+A
-8feTmM2EE+Prqy3/kUxyXdmpt5bovOnzMaBGfA1Jox9aaqqCmsIfN3qaNxqW+476
-KOHruKPQZi2ebv+OwwoXI65g1ZvS+yMrqbAiy+aFKRHTtXE+MJqcYCTFqEJmT1wQ
-i/phrdcUK1EOUyQax1/ZEpdqjNrV+TVBTNQOqJjG6GHbe5XVyib/YAHixk73Z+42
-Hytxgkb1EUTOe6yFBvEJNQdiCDattlvGcKC78FsuRwmiaXmm8Xf9PLlX9Mfm+IAY
-utCgwbFvucg7osGDXOc6BRk2xa5U3N8drRjgUt1xulM+LH3rCTrLJRCzUlB/Qiuo
-LKfMAo4Xma9+0nX0FfE=
+VR0PAQH/BAQDAgEGMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAF0m
+ZDQAds2qSSoqNSfawvmEaYmBfuEDWdKdVCEES7nkMnBD/Z6RLTdOF09QDgGUnuz3
+ggowAEUgfVpG0Y5OUZp4t8NvpN0w+31KxNTRGwyXBtV+dfwO0PsMFRSfIR/VnwFf
+rDA321IFm7Po1zk5TizHGWrdNoPvZ4nekZKU4lp15PON7WZoTZMdyYdYQoRMgFtv
+Cpm3+oix3/XVt1llgCdW2xx2C/lfiThceaOpgaparuwm2QCsWkmGjjhOn6T/rX6D
+EgTgH2ql+Fet9A8PPa42zgqK5SsacdmdTld+dP240RNerOguVNaZtiKv1BJfjjsm
+nee6qKdwJmTpg2LPaB4=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e2:4c:a9:08:30:3f:0e:6a:ec:ec:80:8e:07:cb:
-                    fa:9b:01:b9:8a:37:f0:b1:f2:c2:43:79:90:7e:70:
-                    76:ac:5c:41:60:55:66:fb:4f:e6:79:c8:18:01:7f:
-                    d5:bd:9a:d5:58:5a:00:bf:81:86:37:1e:68:1a:92:
-                    da:dd:e8:20:1a:47:43:78:bb:7e:5c:82:c6:59:1b:
-                    37:c9:99:b2:ac:bb:d2:c0:cf:58:5a:25:13:a6:6b:
-                    9a:79:be:dc:f6:6f:6c:80:5d:58:c2:b5:67:ae:09:
-                    1b:ba:2a:f3:2a:00:d2:43:b6:59:df:38:7c:ef:c1:
-                    be:1b:a1:e0:7d:9b:20:27:04:67:94:45:b3:2d:f6:
-                    77:91:3c:c4:94:5f:78:7a:79:2c:4b:21:23:8b:f4:
-                    d3:60:73:10:59:c7:a1:84:3f:5a:4e:82:43:90:68:
-                    77:2a:f6:b1:d2:d4:cc:cd:76:36:13:95:c5:a7:f4:
-                    46:d8:b7:ee:ef:59:07:2c:69:4d:9c:22:e4:2d:f1:
-                    a9:2c:50:35:50:c2:91:ea:37:d9:6c:b6:f2:ff:cd:
-                    7e:00:ae:51:e3:b4:10:5f:87:e3:92:fe:9e:62:a5:
-                    34:fe:15:c4:19:20:3a:68:fd:3c:be:ae:aa:a3:52:
-                    48:d3:05:95:99:f8:38:18:c5:44:d6:71:c4:bf:34:
-                    e5:c7
+                    00:a3:cb:ea:d8:bd:24:ab:0c:9a:cc:b2:0e:d2:37:
+                    89:9a:1c:87:6d:80:b9:74:3f:0f:f8:3a:c7:e2:8b:
+                    0f:26:3a:56:7e:a0:70:bd:7a:b8:83:c3:e2:44:b9:
+                    7a:98:74:41:75:e8:48:ee:42:8a:87:7f:fd:31:76:
+                    f6:d6:61:3c:50:0d:68:fe:36:41:de:1f:85:d1:c1:
+                    ab:2d:34:c5:13:ea:62:eb:e4:b6:0e:19:be:9f:d3:
+                    dd:ed:91:14:90:85:60:44:67:17:bc:cf:e4:cb:8c:
+                    eb:f2:0c:9f:90:c1:51:7c:cd:34:a3:af:51:c0:e0:
+                    0c:44:bb:2c:e1:4f:1f:99:1b:ac:5a:f3:b2:c9:80:
+                    53:52:82:6d:d6:4e:83:ee:1e:04:15:3c:d8:6f:b8:
+                    5a:72:16:5a:f3:6d:a1:ce:0c:89:5c:ac:7b:d1:87:
+                    f9:d1:69:63:20:ad:0d:fb:d5:d9:6c:8a:5a:1c:c5:
+                    70:71:33:e0:84:7b:68:9e:00:80:00:a3:0d:49:2e:
+                    e6:c8:5f:4a:d7:47:73:52:07:66:ee:36:da:26:f2:
+                    a2:ec:f1:ed:46:4a:d6:d8:48:22:88:3a:22:45:81:
+                    7c:e7:d6:0d:3a:43:76:55:50:0c:1d:f5:df:cc:86:
+                    4d:62:1f:13:07:2b:6c:2a:e4:d3:90:46:7e:95:14:
+                    e9:3b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
             X509v3 Authority Key Identifier: 
-                keyid:6C:17:23:18:CA:A6:A4:28:C6:08:4C:AA:9A:3F:18:FB:7B:67:B2:36
+                keyid:B5:4F:2B:B1:6C:A2:EE:C6:B5:49:B5:77:D1:AC:82:45:75:C9:9B:1C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:00:6a:7a:21:40:79:ad:84:23:e8:62:29:b5:47:0a:7a:91:
-         08:3d:f3:af:0a:14:e9:93:08:7a:81:bf:44:6f:e9:59:5b:d6:
-         8f:e1:bd:cd:9f:46:94:2e:7e:79:df:53:9e:85:e3:86:e0:15:
-         65:e4:fd:b9:10:f7:19:6c:f1:ba:39:3b:2e:49:97:18:7d:95:
-         a9:e5:14:49:65:44:31:39:5b:75:c7:09:75:1f:b3:5a:5b:fe:
-         09:1a:4a:af:ec:6b:58:5a:7b:ef:44:58:37:ab:23:72:bd:97:
-         7b:02:63:65:cf:3d:f6:13:62:44:49:04:dc:85:fc:6f:31:80:
-         c7:e0:1e:5b:77:90:29:cb:06:67:4e:99:41:b1:66:d7:4b:a3:
-         fa:85:5c:bc:2e:c5:fa:a0:a1:8d:07:ba:52:31:cf:5e:2a:98:
-         f1:ba:dc:56:4b:b3:cc:11:b2:d1:2d:0a:eb:75:a8:fe:f6:02:
-         d8:9b:0f:5b:7e:11:50:b1:51:b9:31:11:c5:4b:fa:bf:34:4d:
-         46:e9:27:39:61:ca:09:41:b2:67:fc:54:8a:38:0b:50:7d:f0:
-         e4:7a:a4:30:08:12:86:b3:fc:d2:43:0c:b5:50:4b:45:ee:cf:
-         90:5b:3e:39:47:11:b6:6b:a6:24:fe:02:17:07:7c:06:15:23:
-         0f:d8:0e:7b
+         01:3c:59:aa:07:e9:87:6b:46:2a:63:7c:8f:89:cf:cf:29:64:
+         ce:27:f8:9f:a8:00:20:90:61:28:d8:a2:f9:f1:c4:20:f7:2e:
+         44:31:32:c8:e1:f8:ef:f0:ab:3e:09:a4:ea:f0:60:f2:13:d1:
+         03:9e:b2:8a:ac:b1:b9:30:cf:5e:77:d5:45:25:27:49:14:3a:
+         5e:c9:68:6c:4e:e6:61:8e:35:e9:fd:72:f8:8d:30:92:95:20:
+         ed:5c:05:65:fc:fc:ea:a3:f7:3d:0f:a0:77:16:73:af:62:2b:
+         69:e3:9f:62:df:f4:33:49:0d:48:1b:9d:6a:9d:18:ee:8a:93:
+         d7:a0:b4:5e:3a:96:0f:19:aa:1d:76:7a:8a:0d:c9:3b:78:d6:
+         c9:9c:34:0b:51:30:2b:85:01:94:f8:ef:88:76:e1:40:3d:dc:
+         e8:62:91:8a:09:a9:e9:ae:6a:a7:b9:95:d6:b3:db:ad:e6:49:
+         c1:75:8d:87:fb:cc:6f:ad:ac:de:f8:f0:e3:30:be:f3:a7:73:
+         7e:4b:7d:14:72:f7:03:d2:e1:4e:ea:70:c3:a7:86:21:2b:0d:
+         e5:ed:e0:d3:a9:51:8d:c1:bc:16:58:f8:06:cd:72:6a:86:74:
+         30:8b:e5:76:6e:20:46:37:4a:d8:cc:b7:89:2d:e4:0e:0b:90:
+         4b:38:0c:73
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJMqQgwPw5q7OyAjgfL
-+psBuYo38LHywkN5kH5wdqxcQWBVZvtP5nnIGAF/1b2a1VhaAL+BhjceaBqS2t3o
-IBpHQ3i7flyCxlkbN8mZsqy70sDPWFolE6Zrmnm+3PZvbIBdWMK1Z64JG7oq8yoA
-0kO2Wd84fO/Bvhuh4H2bICcEZ5RFsy32d5E8xJRfeHp5LEshI4v002BzEFnHoYQ/
-Wk6CQ5Bodyr2sdLUzM12NhOVxaf0Rti37u9ZByxpTZwi5C3xqSxQNVDCkeo32Wy2
-8v/NfgCuUeO0EF+H45L+nmKlNP4VxBkgOmj9PL6uqqNSSNMFlZn4OBjFRNZxxL80
-5ccCAwEAAaOByzCByDAdBgNVHQ4EFgQUbBcjGMqmpCjGCEyqmj8Y+3tnsjYwHwYD
-VR0jBBgwFoAUbBcjGMqmpCjGCEyqmj8Y+3tnsjYwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKPL6ti9JKsMmsyyDtI3
+iZoch22AuXQ/D/g6x+KLDyY6Vn6gcL16uIPD4kS5eph0QXXoSO5Ciod//TF29tZh
+PFANaP42Qd4fhdHBqy00xRPqYuvktg4Zvp/T3e2RFJCFYERnF7zP5MuM6/IMn5DB
+UXzNNKOvUcDgDES7LOFPH5kbrFrzssmAU1KCbdZOg+4eBBU82G+4WnIWWvNtoc4M
+iVyse9GH+dFpYyCtDfvV2WyKWhzFcHEz4IR7aJ4AgACjDUku5shfStdHc1IHZu42
+2ibyouzx7UZK1thIIog6IkWBfOfWDTpDdlVQDB3138yGTWIfEwcrbCrk05BGfpUU
+6TsCAwEAAaOByzCByDAdBgNVHQ4EFgQUtU8rsWyi7sa1SbV30ayCRXXJmxwwHwYD
+VR0jBBgwFoAUtU8rsWyi7sa1SbV30ayCRXXJmxwwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDSAGp6IUB5
-rYQj6GIptUcKepEIPfOvChTpkwh6gb9Eb+lZW9aP4b3Nn0aULn5531OeheOG4BVl
-5P25EPcZbPG6OTsuSZcYfZWp5RRJZUQxOVt1xwl1H7NaW/4JGkqv7GtYWnvvRFg3
-qyNyvZd7AmNlzz32E2JESQTchfxvMYDH4B5bd5ApywZnTplBsWbXS6P6hVy8LsX6
-oKGNB7pSMc9eKpjxutxWS7PMEbLRLQrrdaj+9gLYmw9bfhFQsVG5MRHFS/q/NE1G
-6Sc5YcoJQbJn/FSKOAtQffDkeqQwCBKGs/zSQwy1UEtF7s+QWz45RxG2a6Yk/gIX
-B3wGFSMP2A57
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQABPFmqB+mH
+a0YqY3yPic/PKWTOJ/ifqAAgkGEo2KL58cQg9y5EMTLI4fjv8Ks+CaTq8GDyE9ED
+nrKKrLG5MM9ed9VFJSdJFDpeyWhsTuZhjjXp/XL4jTCSlSDtXAVl/Pzqo/c9D6B3
+FnOvYitp459i3/QzSQ1IG51qnRjuipPXoLReOpYPGaoddnqKDck7eNbJnDQLUTAr
+hQGU+O+IduFAPdzoYpGKCanprmqnuZXWs9ut5knBdY2H+8xvraze+PDjML7zp3N+
+S30UcvcD0uFO6nDDp4YhKw3l7eDTqVGNwbwWWPgGzXJqhnQwi+V2biBGN0rYzLeJ
+LeQOC5BLOAxz
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
index 6872669..63e18ca 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ac:3c:48:cb:8e:9b:00:37:e3:06:36:23:5e:3c:
-                    24:0b:d2:57:0e:52:8f:53:d0:48:ca:38:67:91:a7:
-                    10:d3:35:2d:67:f4:ad:2c:9e:c1:ee:f5:6b:62:23:
-                    34:03:32:76:29:96:fd:db:cc:a4:9a:d8:b6:97:c4:
-                    a9:73:c1:a1:57:2f:cd:80:d1:d9:db:39:82:11:bb:
-                    95:3e:1b:b3:1e:ac:e7:c0:67:f3:1e:cb:4f:d4:a6:
-                    c7:01:32:c5:45:ca:53:ff:cf:46:e1:b3:4f:55:01:
-                    ef:76:44:92:55:55:d8:a4:db:5c:80:8f:48:51:86:
-                    6c:d9:b6:b7:5c:74:56:06:00:38:3f:d9:ee:c3:ae:
-                    78:a0:57:ff:fa:41:02:14:63:00:bb:1f:98:9a:f5:
-                    39:50:51:50:78:03:5d:13:a2:fd:a3:08:b0:ff:69:
-                    ee:60:c8:af:1c:1e:8a:13:4b:0e:b9:48:29:92:f2:
-                    95:0a:d9:85:2f:ff:17:ab:c7:6f:e0:32:d1:16:9e:
-                    66:ae:81:87:b8:7e:70:ac:73:8c:67:de:dd:1a:e0:
-                    0e:0e:bb:ab:bc:f5:ef:38:d9:37:49:71:d1:7c:e6:
-                    64:f7:00:10:e4:83:ed:1e:58:05:44:89:f2:a9:a2:
-                    1d:57:5c:b5:db:bc:55:39:35:d7:f3:a5:b8:28:d1:
-                    45:5d
+                    00:bf:5a:8f:db:be:ba:83:5c:5a:e0:4a:66:41:a8:
+                    39:80:40:e7:b5:92:a3:07:13:ec:65:a5:75:b2:2f:
+                    9a:aa:c7:1f:8f:64:8e:6c:e0:8e:4f:2b:af:95:c0:
+                    f3:86:17:46:1b:b4:1d:7a:f1:fe:32:f8:58:29:da:
+                    22:31:20:8b:0f:45:be:81:80:2b:a7:25:e6:d2:fc:
+                    46:fe:fe:83:b6:55:d3:32:9c:64:f5:a3:0e:ef:5a:
+                    2f:ad:83:fd:44:76:7d:33:42:ef:0a:cd:fd:b0:d3:
+                    2d:70:93:44:25:75:24:61:2e:d1:e2:e6:d4:17:9a:
+                    42:ff:a1:67:23:9d:4b:2a:a3:e9:ba:aa:c3:9e:54:
+                    12:09:8b:d8:4a:8d:22:8c:6f:b8:92:84:4b:fa:7b:
+                    07:e1:82:da:a4:1d:7f:3a:d3:7d:cd:76:e0:90:41:
+                    87:c9:56:39:14:30:b4:2c:1b:7d:dc:4b:48:03:cd:
+                    3c:88:9a:6d:08:97:8c:01:14:14:06:f7:2a:cd:76:
+                    2e:ba:74:af:76:b8:3c:dc:83:a4:9e:ab:ab:93:0e:
+                    61:2e:6c:2d:18:97:95:c5:29:e6:f4:c9:96:09:d4:
+                    12:ce:39:a9:1a:40:ad:c0:54:4c:fc:41:07:15:1e:
+                    cd:cd:0b:9c:e0:03:af:e6:b0:b6:7a:35:fa:7c:70:
+                    b3:cf
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9E:25:C3:B0:61:AE:69:26:DE:05:F4:15:3C:58:B0:7C:6D:91:5C:5B
+                A4:58:36:4B:8C:71:D3:FA:D3:04:1A:BC:36:D9:CC:78:1C:C1:E0:D6
             X509v3 Authority Key Identifier: 
-                keyid:E5:AE:8F:CC:87:F7:B5:85:86:1E:4B:A6:CF:FC:B9:CA:10:C8:79:90
+                keyid:89:51:1E:D6:EA:B6:84:32:05:F0:15:A9:39:24:C0:46:25:5F:FB:8A
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         c5:3c:97:21:6a:dc:f8:0c:23:76:c2:4e:33:63:f4:7e:d1:61:
-         bd:f8:cf:6d:b5:ef:d6:f1:96:a0:84:07:42:ab:e2:34:90:3a:
-         95:2a:db:f6:19:28:bd:19:22:65:20:b0:25:b0:f0:ca:d0:d3:
-         44:41:fe:03:f2:9f:0c:df:02:dc:64:c6:47:13:1e:26:dd:6a:
-         5d:52:8a:fe:d3:0a:9a:d1:8c:a5:93:ec:1a:d4:d5:ad:ba:cd:
-         6b:c2:99:6b:04:b7:06:98:a8:53:dc:d9:97:97:da:ac:29:bb:
-         09:4a:25:ca:08:83:eb:ed:1f:a7:ae:28:fc:51:09:a9:e4:95:
-         f2:66:97:f2:97:48:9e:01:44:40:5b:4a:91:a5:ed:f9:86:6b:
-         fb:e2:47:c8:47:aa:ad:8d:aa:79:30:fb:4f:f1:a7:7c:c3:23:
-         b3:23:4d:15:a3:04:67:ff:26:b1:50:c0:5a:13:f4:8a:61:da:
-         98:a2:35:0e:ec:4f:2b:e7:e0:dc:29:0a:07:20:e4:22:97:b1:
-         da:0d:73:6f:32:03:f1:cd:4b:a2:7b:9b:c3:62:a8:dd:55:02:
-         57:6b:2f:a4:d6:46:20:bc:bd:f7:52:e7:44:8e:3d:2c:73:05:
-         55:ac:35:8b:af:39:32:a1:07:da:fd:bb:8c:bb:35:e0:e6:bb:
-         0c:49:1a:e4
+         8d:4b:a8:5d:f6:9a:e0:3d:6d:e5:78:57:26:00:b6:90:4d:f6:
+         38:ae:30:a2:40:5e:1f:42:43:fd:2e:34:f3:03:c8:e1:e3:a5:
+         17:34:37:81:f6:8d:8f:af:7b:ff:4b:5c:dd:27:0e:58:69:ba:
+         46:a9:b1:31:8d:d1:b2:f7:1d:6b:ea:25:9e:00:ce:93:89:5a:
+         9f:66:e1:48:1e:56:97:4e:76:60:42:c8:c9:6d:f5:dd:d2:58:
+         12:d2:4a:71:85:2b:b8:df:6c:1f:ff:8e:e9:25:15:a5:d2:b4:
+         82:00:59:e5:1e:9e:bd:8e:30:6f:b7:b8:b4:08:c2:85:4f:77:
+         c8:66:8a:33:a4:bf:ed:13:3a:85:5f:90:1c:f4:e5:35:8f:5b:
+         57:14:e4:04:e1:4e:1c:79:74:a6:2f:c3:a7:6b:d4:29:fa:d0:
+         12:b9:e1:3c:94:8f:f0:49:b4:01:7b:df:87:a2:8d:e8:f1:72:
+         a7:95:b2:a0:de:41:85:87:3f:01:cf:1d:77:2f:ac:17:e1:35:
+         6e:4b:9e:64:a3:3e:30:e3:e3:9c:32:e9:de:4a:e3:b8:7d:12:
+         36:0a:e6:bf:36:38:85:2d:df:f2:57:e4:ad:c4:f9:7f:fa:62:
+         42:c2:b6:ad:3e:ae:9c:6d:aa:3d:d1:02:86:9a:4d:40:ef:9d:
+         1c:71:6f:04
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsPEjL
-jpsAN+MGNiNePCQL0lcOUo9T0EjKOGeRpxDTNS1n9K0snsHu9WtiIzQDMnYplv3b
-zKSa2LaXxKlzwaFXL82A0dnbOYIRu5U+G7MerOfAZ/Mey0/UpscBMsVFylP/z0bh
-s09VAe92RJJVVdik21yAj0hRhmzZtrdcdFYGADg/2e7DrnigV//6QQIUYwC7H5ia
-9TlQUVB4A10Tov2jCLD/ae5gyK8cHooTSw65SCmS8pUK2YUv/xerx2/gMtEWnmau
-gYe4fnCsc4xn3t0a4A4Ou6u89e842TdJcdF85mT3ABDkg+0eWAVEifKpoh1XXLXb
-vFU5Ndfzpbgo0UVdAgMBAAGjgekwgeYwHQYDVR0OBBYEFJ4lw7Bhrmkm3gX0FTxY
-sHxtkVxbMB8GA1UdIwQYMBaAFOWuj8yH97WFhh5Lps/8ucoQyHmQMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/Wo/b
+vrqDXFrgSmZBqDmAQOe1kqMHE+xlpXWyL5qqxx+PZI5s4I5PK6+VwPOGF0YbtB16
+8f4y+Fgp2iIxIIsPRb6BgCunJebS/Eb+/oO2VdMynGT1ow7vWi+tg/1Edn0zQu8K
+zf2w0y1wk0QldSRhLtHi5tQXmkL/oWcjnUsqo+m6qsOeVBIJi9hKjSKMb7iShEv6
+ewfhgtqkHX86033NduCQQYfJVjkUMLQsG33cS0gDzTyImm0Il4wBFBQG9yrNdi66
+dK92uDzcg6Seq6uTDmEubC0Yl5XFKeb0yZYJ1BLOOakaQK3AVEz8QQcVHs3NC5zg
+A6/msLZ6Nfp8cLPPAgMBAAGjgekwgeYwHQYDVR0OBBYEFKRYNkuMcdP60wQavDbZ
+zHgcweDWMB8GA1UdIwQYMBaAFIlRHtbqtoQyBfAVqTkkwEYlX/uKMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAxTyXIWrc+AwjdsJOM2P0
-ftFhvfjPbbXv1vGWoIQHQqviNJA6lSrb9hkovRkiZSCwJbDwytDTREH+A/KfDN8C
-3GTGRxMeJt1qXVKK/tMKmtGMpZPsGtTVrbrNa8KZawS3BpioU9zZl5farCm7CUol
-ygiD6+0fp64o/FEJqeSV8maX8pdIngFEQFtKkaXt+YZr++JHyEeqrY2qeTD7T/Gn
-fMMjsyNNFaMEZ/8msVDAWhP0imHamKI1DuxPK+fg3CkKByDkIpex2g1zbzID8c1L
-onubw2Ko3VUCV2svpNZGILy991LnRI49LHMFVaw1i685MqEH2v27jLs14Oa7DEka
-5A==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjUuoXfaa4D1t5XhXJgC2
+kE32OK4wokBeH0JD/S408wPI4eOlFzQ3gfaNj697/0tc3ScOWGm6RqmxMY3Rsvcd
+a+olngDOk4lan2bhSB5Wl052YELIyW313dJYEtJKcYUruN9sH/+O6SUVpdK0ggBZ
+5R6evY4wb7e4tAjChU93yGaKM6S/7RM6hV+QHPTlNY9bVxTkBOFOHHl0pi/Dp2vU
+KfrQErnhPJSP8Em0AXvfh6KN6PFyp5WyoN5BhYc/Ac8ddy+sF+E1bkueZKM+MOPj
+nDLp3krjuH0SNgrmvzY4hS3f8lfkrcT5f/piQsK2rT6unG2qPdEChppNQO+dHHFv
+BA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c5:bf:ce:e4:8e:d2:b9:92:d9:78:eb:36:78:b0:
-                    d4:2b:a9:22:cd:83:57:58:a2:0f:5b:e5:c8:e4:f4:
-                    d6:41:2c:1f:5a:08:6b:12:7b:f6:8f:39:44:0f:f4:
-                    d2:3e:56:cd:63:87:13:b1:88:1a:da:f1:13:2f:4a:
-                    d0:76:78:61:6f:71:08:e0:0c:a2:9a:6a:6b:c7:8c:
-                    81:6f:e1:ea:22:09:83:fd:09:53:78:f0:1d:4e:f7:
-                    b3:17:17:7e:fc:dc:a5:21:83:7f:46:8c:81:af:07:
-                    68:91:14:54:43:bf:d2:85:fa:58:91:61:cc:87:bc:
-                    8d:b3:97:c1:a5:42:de:73:49:29:c9:0c:48:92:15:
-                    d9:0e:6b:3d:4a:4c:50:c6:8b:a5:69:6c:b2:2f:02:
-                    9e:0a:4f:27:1a:d0:1c:0e:b8:d9:fc:a7:62:92:69:
-                    0c:40:ec:49:3b:59:a5:38:fc:8e:cb:2f:91:9f:09:
-                    76:2c:b8:d4:25:7e:83:71:56:89:29:2c:a3:d8:bf:
-                    95:70:99:f5:cb:20:df:fa:fd:b8:89:e6:42:82:a9:
-                    01:d8:e0:42:f2:d2:c3:78:26:cc:fb:05:30:90:a0:
-                    83:bd:ce:b3:6d:bb:01:ae:84:aa:71:4f:d9:37:38:
-                    7e:07:35:6f:ed:88:c7:52:17:38:ac:c6:44:b5:fe:
-                    4a:b3
+                    00:df:57:52:0b:c1:38:ec:8a:61:d8:2f:9c:fd:66:
+                    0f:34:ab:e1:b3:fd:70:90:04:71:47:1a:3f:aa:44:
+                    57:c4:a9:c2:18:64:c1:3e:5d:aa:6c:b2:0f:48:53:
+                    d2:9e:08:2b:e6:ff:b1:57:3f:39:d4:7d:81:b7:69:
+                    0a:4d:5d:5c:2d:17:17:81:89:77:84:b8:1c:f5:31:
+                    a5:40:6c:6f:e9:e2:52:80:39:e9:71:95:b9:54:8b:
+                    5a:0d:18:05:fa:c5:6d:9d:27:c9:27:bd:7d:36:5f:
+                    ac:a0:42:a0:ce:66:06:6a:e0:57:9f:e2:c5:de:54:
+                    f0:e5:ec:89:f0:4f:6d:7b:70:2b:6e:c1:2b:ee:4c:
+                    37:91:43:40:e5:d6:ad:64:a4:a0:b8:29:37:8c:4d:
+                    01:2d:85:4f:06:8e:37:ba:5c:dc:96:f8:f5:37:62:
+                    5d:00:f5:85:ed:91:19:9d:cc:9a:ae:ce:7b:53:d4:
+                    5e:42:9a:5a:2c:fb:e1:7a:79:55:81:4e:b5:51:2d:
+                    b6:ad:10:f1:36:3e:fe:25:31:07:3c:7d:df:f6:3c:
+                    bc:e3:57:4d:e0:50:6d:d5:48:53:d1:4c:a4:c6:77:
+                    93:ac:be:e1:c9:3f:d3:f4:f8:3a:19:59:29:ff:46:
+                    5a:b6:3e:da:69:91:4d:c7:dc:27:ac:5f:ca:e4:be:
+                    99:6d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E5:AE:8F:CC:87:F7:B5:85:86:1E:4B:A6:CF:FC:B9:CA:10:C8:79:90
+                89:51:1E:D6:EA:B6:84:32:05:F0:15:A9:39:24:C0:46:25:5F:FB:8A
             X509v3 Authority Key Identifier: 
-                keyid:0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                keyid:91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -144,40 +144,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         12:11:99:0b:59:f6:cd:61:bf:99:bc:25:83:b2:e7:4b:42:ec:
-         ee:1d:03:3b:cf:5d:76:95:19:2c:d1:41:d0:f6:5c:08:9d:6f:
-         66:50:07:ea:07:fa:88:01:96:05:39:8d:6a:e0:34:27:1e:a2:
-         80:c2:9b:91:ba:17:35:49:ef:8c:42:9d:59:ac:42:3f:52:fa:
-         ef:5f:51:aa:3a:dc:b6:ee:d6:8c:20:89:de:36:7d:a2:e2:ff:
-         eb:13:9d:dc:99:d1:62:33:c5:82:19:12:18:d4:94:5b:5f:c4:
-         f7:74:55:f0:be:fa:0e:4d:7a:01:7e:53:b3:2d:4d:09:b6:7b:
-         8e:0a:7c:3e:b9:39:a1:ee:b6:3d:3f:e8:4a:b0:1d:e4:ee:7b:
-         96:75:19:b5:71:6a:ae:e0:af:14:59:9f:fc:2b:13:dd:70:c9:
-         da:dd:a9:3c:14:3e:f1:69:3b:ce:42:b4:c5:3f:12:f8:37:eb:
-         bf:0c:9d:48:a4:6e:4c:9f:e7:3c:4f:a5:91:32:8b:7f:2e:5f:
-         e7:bf:bc:f4:a0:5f:43:f7:3a:1f:78:a3:0e:8e:c0:46:16:9e:
-         58:6a:0f:7e:e0:69:af:94:ec:bc:3a:7f:8b:44:ef:19:f8:14:
-         16:a4:1d:bd:49:c6:96:da:ba:11:a8:bc:36:11:c7:ad:ab:e0:
-         a5:e2:05:77
+         4b:c2:17:9e:2e:d2:af:2a:32:48:01:ca:5c:ec:24:2d:cc:81:
+         49:b9:86:3a:83:5e:23:9a:b6:8b:46:e8:43:04:20:9b:23:43:
+         b1:e2:a8:93:f0:1f:92:b6:5a:74:64:c1:df:29:20:40:39:fb:
+         d3:91:61:5b:40:e5:b0:95:6c:20:1a:b1:b9:ef:e6:1c:1c:dd:
+         61:78:86:12:7e:c2:59:d3:ed:3c:15:df:53:55:38:55:5d:b1:
+         7e:b0:52:9e:4f:dc:c2:60:66:8b:c5:1e:b6:9e:59:88:b5:cb:
+         07:94:d7:09:72:11:87:b3:16:d9:e7:10:c4:08:a0:48:51:e4:
+         b5:08:e2:30:d2:cd:7a:17:b0:be:af:ee:d1:fc:5c:a2:76:5e:
+         8e:f7:e1:c6:86:0a:8d:a9:41:86:8e:8d:08:44:69:a1:1b:c4:
+         94:59:41:dc:db:52:a6:41:36:63:7e:7e:53:26:a4:71:5a:c4:
+         41:ef:72:2a:1d:cd:1e:4a:df:7b:0a:5b:55:13:4e:80:34:34:
+         0b:44:7e:cb:40:ed:34:54:c9:53:1c:0a:9f:39:a5:b6:92:32:
+         83:b2:8e:55:4c:f7:2d:91:b0:99:dc:15:32:ea:59:3a:bd:d7:
+         15:f6:09:a7:57:77:a7:64:e6:a6:87:ac:4f:46:e3:f8:e5:6a:
+         0b:41:c0:82
 -----BEGIN CERTIFICATE-----
 MIIDXDCCAkSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxb/O5I7S
-uZLZeOs2eLDUK6kizYNXWKIPW+XI5PTWQSwfWghrEnv2jzlED/TSPlbNY4cTsYga
-2vETL0rQdnhhb3EI4Ayimmprx4yBb+HqIgmD/QlTePAdTvezFxd+/NylIYN/RoyB
-rwdokRRUQ7/ShfpYkWHMh7yNs5fBpULec0kpyQxIkhXZDms9SkxQxoulaWyyLwKe
-Ck8nGtAcDrjZ/KdikmkMQOxJO1mlOPyOyy+Rnwl2LLjUJX6DcVaJKSyj2L+VcJn1
-yyDf+v24ieZCgqkB2OBC8tLDeCbM+wUwkKCDvc6zbbsBroSqcU/ZNzh+BzVv7YjH
-Uhc4rMZEtf5KswIDAQABo4G6MIG3MB0GA1UdDgQWBBTlro/Mh/e1hYYeS6bP/LnK
-EMh5kDAfBgNVHSMEGDAWgBQPWTwNuLFbxZadtOhPz0ums60z5zA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA31dSC8E4
+7Iph2C+c/WYPNKvhs/1wkARxRxo/qkRXxKnCGGTBPl2qbLIPSFPSnggr5v+xVz85
+1H2Bt2kKTV1cLRcXgYl3hLgc9TGlQGxv6eJSgDnpcZW5VItaDRgF+sVtnSfJJ719
+Nl+soEKgzmYGauBXn+LF3lTw5eyJ8E9te3ArbsEr7kw3kUNA5datZKSguCk3jE0B
+LYVPBo43ulzclvj1N2JdAPWF7ZEZncyars57U9ReQppaLPvhenlVgU61US22rRDx
+Nj7+JTEHPH3f9jy841dN4FBt1UhT0UykxneTrL7hyT/T9Pg6GVkp/0Zatj7aaZFN
+x9wnrF/K5L6ZbQIDAQABo4G6MIG3MB0GA1UdDgQWBBSJUR7W6raEMgXwFak5JMBG
+JV/7ijAfBgNVHSMEGDAWgBSRTW7n7I8TjYTIRC4j6bqxpm1EljA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQASEZkLWfbNYb+ZvCWDsudL
-QuzuHQM7z112lRks0UHQ9lwInW9mUAfqB/qIAZYFOY1q4DQnHqKAwpuRuhc1Se+M
-Qp1ZrEI/UvrvX1GqOty27taMIIneNn2i4v/rE53cmdFiM8WCGRIY1JRbX8T3dFXw
-vvoOTXoBflOzLU0JtnuOCnw+uTmh7rY9P+hKsB3k7nuWdRm1cWqu4K8UWZ/8KxPd
-cMna3ak8FD7xaTvOQrTFPxL4N+u/DJ1IpG5Mn+c8T6WRMot/Ll/nv7z0oF9D9zof
-eKMOjsBGFp5Yag9+4GmvlOy8On+LRO8Z+BQWpB29ScaW2roRqLw2Ecetq+Cl4gV3
+VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQBLwheeLtKvKjJIAcpc7CQt
+zIFJuYY6g14jmraLRuhDBCCbI0Ox4qiT8B+Stlp0ZMHfKSBAOfvTkWFbQOWwlWwg
+GrG57+YcHN1heIYSfsJZ0+08Fd9TVThVXbF+sFKeT9zCYGaLxR62nlmItcsHlNcJ
+chGHsxbZ5xDECKBIUeS1COIw0s16F7C+r+7R/Fyidl6O9+HGhgqNqUGGjo0IRGmh
+G8SUWUHc21KmQTZjfn5TJqRxWsRB73IqHc0eSt97CltVE06ANDQLRH7LQO00VMlT
+HAqfOaW2kjKDso5VTPctkbCZ3BUy6lk6vdcV9gmnV3enZOamh6xPRuP45WoLQcCC
 -----END CERTIFICATE-----
 
 Certificate:
@@ -194,30 +194,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c3:da:da:10:95:78:5c:73:c8:43:66:41:23:8e:
-                    3e:3f:a1:00:57:de:60:d9:2a:84:57:85:08:c6:60:
-                    79:65:2d:51:c9:93:c1:e7:fa:5b:1a:eb:6f:79:44:
-                    d5:71:f6:bd:f4:8c:86:0b:d9:e3:49:dd:a6:f3:5d:
-                    48:8a:25:4a:2a:20:80:c1:83:da:b8:c5:e0:20:de:
-                    40:67:bc:22:38:51:72:df:e3:b7:82:aa:47:ed:c9:
-                    74:a0:82:97:71:35:a8:2f:73:01:86:56:43:e8:88:
-                    42:f9:cc:9b:69:71:09:45:8c:39:82:14:db:2e:08:
-                    17:85:96:c5:69:46:73:55:9b:d8:12:4b:5f:32:70:
-                    cc:52:4e:7e:77:94:78:0e:f4:dd:40:ff:d7:3b:cc:
-                    f7:df:a9:a7:a1:a3:a3:4e:25:c8:e4:68:1c:e3:90:
-                    c2:c5:bb:66:3a:c1:8b:e3:1b:df:b9:8c:0c:9a:3a:
-                    6a:a9:8e:8d:b3:54:49:14:af:28:51:29:b2:5b:7b:
-                    68:34:4c:f3:bb:a5:5d:51:0b:99:6b:b1:fe:b3:16:
-                    d1:ef:2f:18:ee:8a:f8:05:9b:df:0d:92:3a:e0:62:
-                    7b:1d:bc:fb:60:45:ce:f9:e0:46:f6:16:39:08:a7:
-                    68:b5:da:e5:9f:7c:db:07:15:dc:47:e6:5d:a3:8c:
-                    06:7b
+                    00:a0:05:db:73:c2:62:ce:b7:44:2a:d4:fa:15:84:
+                    b6:22:26:47:86:56:7a:e1:d0:e9:d5:60:bb:f3:37:
+                    79:79:21:c1:68:a1:db:d3:22:14:7a:04:15:0e:6c:
+                    c3:1f:fe:0d:0d:b2:2e:6b:7a:19:63:f3:f8:e3:c9:
+                    e9:63:8e:5b:47:98:7e:68:02:2b:e3:9a:e0:9b:04:
+                    f5:04:a4:49:b9:f7:f4:e4:3d:86:34:72:62:e2:dd:
+                    80:71:de:ba:6a:01:eb:a2:fb:db:1f:7c:57:b6:89:
+                    2c:2d:5e:9e:3a:8d:4c:40:dc:96:9d:a4:4f:3a:e6:
+                    e7:a4:63:1c:12:29:76:dd:2f:82:72:4a:d7:81:d6:
+                    59:7a:88:8b:b0:7e:f4:b7:e9:5b:e1:86:8a:27:82:
+                    92:77:bc:b3:38:92:93:13:59:07:5a:79:23:a9:af:
+                    8c:3e:7f:c1:08:59:96:4c:4c:90:ca:0f:37:c6:52:
+                    c6:bd:f4:64:8b:a4:f9:6b:dc:f5:f2:a0:62:d5:29:
+                    79:9b:31:3a:6b:32:38:75:66:0a:55:9b:2d:b9:2b:
+                    5d:72:bc:ec:28:d0:3c:26:3e:c4:f2:f8:a8:14:11:
+                    dd:ca:3c:81:2f:20:55:4a:89:24:0e:77:d7:fa:36:
+                    a7:d8:b1:c3:c1:b2:c6:c1:db:83:f0:1a:37:f8:95:
+                    a2:dd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
             X509v3 Authority Key Identifier: 
-                keyid:0F:59:3C:0D:B8:B1:5B:C5:96:9D:B4:E8:4F:CF:4B:A6:B3:AD:33:E7
+                keyid:91:4D:6E:E7:EC:8F:13:8D:84:C8:44:2E:23:E9:BA:B1:A6:6D:44:96
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -232,41 +232,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3e:f9:8e:c2:1a:d7:ea:b1:71:03:6d:6d:a9:de:e9:45:1d:ab:
-         a3:26:4c:95:4b:15:ad:9d:be:94:aa:20:57:83:b2:32:96:06:
-         c1:37:9a:6a:18:41:ad:13:3b:52:23:a1:0a:1f:fc:8c:fa:3b:
-         88:43:d1:5e:1e:59:80:06:a5:0a:5e:95:66:3d:3d:cb:4a:b4:
-         38:77:a6:fa:04:29:e8:c1:b8:b5:f7:49:07:ae:53:dd:62:64:
-         3c:70:4c:64:b5:54:84:4d:04:3f:6d:86:80:9d:e2:2b:a4:88:
-         1c:38:74:fc:83:c3:60:c8:86:64:f5:d7:29:f7:e4:8e:02:a9:
-         47:a6:e1:46:0f:c4:b5:22:59:f1:a7:1b:ae:86:7c:70:32:d4:
-         8c:19:7f:a7:6d:82:0b:f3:42:37:02:b5:3d:f3:41:d5:7d:67:
-         97:80:78:9a:e2:06:54:18:bc:b0:7f:5d:77:15:bb:89:cb:4d:
-         29:0c:02:ab:b3:b7:40:44:3a:2c:4a:2e:54:43:7f:ff:b0:5f:
-         da:c5:5f:38:0e:ce:4e:18:ed:f3:f9:99:f0:7c:01:69:ca:0e:
-         15:85:1e:ff:b7:2d:04:6c:3b:5b:f9:7f:70:bc:0c:ac:16:b7:
-         d1:b4:f1:74:84:ad:73:e7:9f:c7:c9:ea:93:d9:f1:c6:a7:59:
-         bf:92:4e:ec
+         63:d1:10:02:d6:c9:15:54:98:5d:1e:fb:fe:43:46:f7:43:91:
+         b2:e2:68:75:1d:7c:0a:b5:85:5d:22:70:dc:89:3b:72:91:3d:
+         6b:d6:90:ac:a8:ec:c9:d9:03:03:93:90:7d:ed:f9:47:b9:c4:
+         93:61:eb:e0:99:eb:56:7e:ce:2b:9b:9f:3f:1d:22:b9:97:19:
+         47:c3:60:33:38:af:cc:7d:19:34:42:c8:fe:26:28:af:31:1d:
+         e8:36:85:c8:67:0f:f3:e0:8e:6c:2b:52:1b:32:05:e5:b5:d8:
+         8c:e9:d5:43:ab:12:6b:4d:da:cc:27:11:01:1f:f4:9a:50:96:
+         cb:f7:29:24:cc:d3:3f:a6:c9:01:d1:9c:e3:8c:f8:3f:ce:91:
+         d7:ed:68:67:40:03:29:93:ed:0c:c1:5d:83:31:e9:12:df:96:
+         a9:0e:44:9d:e5:7f:75:1b:15:58:71:ac:e5:32:ee:d6:5d:9f:
+         19:11:7b:d7:5d:0c:62:f3:ab:0c:e9:a3:6a:ee:f3:c1:d7:c7:
+         3a:87:9e:61:f3:20:3e:70:d4:8e:2a:1f:b0:1d:3d:f0:0c:93:
+         10:ff:91:c7:5e:1a:48:c5:11:b3:89:29:2a:c1:21:f4:d3:1e:
+         be:33:bc:a0:85:37:74:0b:87:f4:53:94:fc:71:35:b8:9b:f9:
+         8d:c4:f0:86
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPa2hCVeFxzyENmQSOO
-Pj+hAFfeYNkqhFeFCMZgeWUtUcmTwef6Wxrrb3lE1XH2vfSMhgvZ40ndpvNdSIol
-SioggMGD2rjF4CDeQGe8IjhRct/jt4KqR+3JdKCCl3E1qC9zAYZWQ+iIQvnMm2lx
-CUWMOYIU2y4IF4WWxWlGc1Wb2BJLXzJwzFJOfneUeA703UD/1zvM99+pp6Gjo04l
-yORoHOOQwsW7ZjrBi+Mb37mMDJo6aqmOjbNUSRSvKFEpslt7aDRM87ulXVELmWux
-/rMW0e8vGO6K+AWb3w2SOuBiex28+2BFzvngRvYWOQinaLXa5Z982wcV3EfmXaOM
-BnsCAwEAAaOByzCByDAdBgNVHQ4EFgQUD1k8DbixW8WWnbToT89LprOtM+cwHwYD
-VR0jBBgwFoAUD1k8DbixW8WWnbToT89LprOtM+cwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAF23PCYs63RCrU+hWE
+tiImR4ZWeuHQ6dVgu/M3eXkhwWih29MiFHoEFQ5swx/+DQ2yLmt6GWPz+OPJ6WOO
+W0eYfmgCK+Oa4JsE9QSkSbn39OQ9hjRyYuLdgHHeumoB66L72x98V7aJLC1enjqN
+TEDclp2kTzrm56RjHBIpdt0vgnJK14HWWXqIi7B+9LfpW+GGiieCkne8sziSkxNZ
+B1p5I6mvjD5/wQhZlkxMkMoPN8ZSxr30ZIuk+Wvc9fKgYtUpeZsxOmsyOHVmClWb
+LbkrXXK87CjQPCY+xPL4qBQR3co8gS8gVUqJJA531/o2p9ixw8GyxsHbg/AaN/iV
+ot0CAwEAAaOByzCByDAdBgNVHQ4EFgQUkU1u5+yPE42EyEQuI+m6saZtRJYwHwYD
+VR0jBBgwFoAUkU1u5+yPE42EyEQuI+m6saZtRJYwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA++Y7CGtfq
-sXEDbW2p3ulFHaujJkyVSxWtnb6UqiBXg7IylgbBN5pqGEGtEztSI6EKH/yM+juI
-Q9FeHlmABqUKXpVmPT3LSrQ4d6b6BCnowbi190kHrlPdYmQ8cExktVSETQQ/bYaA
-neIrpIgcOHT8g8NgyIZk9dcp9+SOAqlHpuFGD8S1IlnxpxuuhnxwMtSMGX+nbYIL
-80I3ArU980HVfWeXgHia4gZUGLywf113FbuJy00pDAKrs7dARDosSi5UQ3//sF/a
-xV84Ds5OGO3z+ZnwfAFpyg4VhR7/ty0EbDtb+X9wvAysFrfRtPF0hK1z55/HyeqT
-2fHGp1m/kk7s
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBj0RAC1skV
+VJhdHvv+Q0b3Q5Gy4mh1HXwKtYVdInDciTtykT1r1pCsqOzJ2QMDk5B97flHucST
+YevgmetWfs4rm58/HSK5lxlHw2AzOK/MfRk0Qsj+JiivMR3oNoXIZw/z4I5sK1Ib
+MgXltdiM6dVDqxJrTdrMJxEBH/SaUJbL9ykkzNM/pskB0ZzjjPg/zpHX7WhnQAMp
+k+0MwV2DMekS35apDkSd5X91GxVYcazlMu7WXZ8ZEXvXXQxi86sM6aNq7vPB18c6
+h55h8yA+cNSOKh+wHT3wDJMQ/5HHXhpIxRGziSkqwSH00x6+M7yghTd0C4f0U5T8
+cTW4m/mNxPCG
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -279,6 +279,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Does not have Basic Constraints
 
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
index c43067f..cd5683e 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:21:17:35:c0:77:f1:a3:51:77:11:45:3e:92:
-                    5f:97:65:eb:99:cc:26:e2:8c:f8:4a:d8:3d:71:17:
-                    a2:eb:6a:cf:2f:07:a8:fa:27:c1:f8:c5:50:22:42:
-                    a2:6f:92:4b:67:c3:0c:a7:ec:35:87:05:ac:eb:e3:
-                    27:cd:62:3d:c4:2e:80:f6:2a:af:31:05:c7:1b:0f:
-                    3b:71:6d:90:77:0d:b4:48:e7:26:2e:4a:44:af:bb:
-                    76:e0:62:ec:e6:61:cc:5b:61:ea:03:ce:4d:46:d0:
-                    96:e2:d5:d9:67:6f:0c:f2:06:e3:9a:14:04:68:82:
-                    88:d6:8b:c1:7f:fb:81:8c:e6:dc:88:20:f7:53:ef:
-                    d5:56:5b:5e:00:b3:5b:e8:ce:d0:d2:6a:ed:b8:4a:
-                    f2:4b:56:fb:63:75:d4:6b:a3:8a:d4:3f:e6:9e:29:
-                    1b:a7:23:61:ba:f0:d6:19:fb:8c:ad:40:2f:7c:14:
-                    36:0f:4b:f1:6e:f0:b8:6e:7d:cc:82:11:63:48:15:
-                    2f:34:00:99:cd:be:b4:1a:be:d8:73:38:00:ac:c1:
-                    09:41:a2:c4:ec:74:69:15:52:c4:45:2d:20:ff:b5:
-                    ce:d0:41:be:a2:b2:4d:ef:a7:3b:f1:df:9d:78:1a:
-                    9d:2c:6c:61:26:2e:f7:82:ab:50:76:6d:a3:d3:33:
-                    46:07
+                    00:c7:e4:5b:20:c1:2e:a1:89:32:d1:e5:80:0e:e3:
+                    12:77:b7:98:35:d7:6b:ec:9e:9c:50:92:b2:9a:28:
+                    b1:f6:e9:22:99:23:05:54:7d:67:de:8c:09:04:b7:
+                    6f:93:95:d6:c7:c5:48:23:6e:d2:56:32:19:bb:ac:
+                    b4:3d:3b:df:4b:40:85:48:25:2a:1b:22:c4:61:3b:
+                    08:5c:26:89:63:e7:19:27:c5:58:3f:9b:4d:b2:ff:
+                    b4:18:42:4d:7d:b5:a9:5a:4b:4b:46:1b:ce:bb:17:
+                    0e:29:10:78:50:10:bd:d2:16:b6:63:be:94:21:c6:
+                    e7:0b:d1:95:ea:d0:b5:ae:33:27:7e:02:0b:1b:4b:
+                    85:9c:d7:9a:4c:d1:82:b6:8f:4d:25:e4:f0:25:96:
+                    34:a7:f9:b5:e6:24:19:7c:56:54:de:b9:15:5e:39:
+                    ec:bb:12:ff:57:ef:87:37:46:fa:61:bc:a5:4a:32:
+                    6d:c3:35:b1:53:02:0b:cd:f1:6f:de:39:63:03:fe:
+                    a1:b6:7a:67:a9:f6:d0:df:d0:24:ad:39:f0:d8:58:
+                    e3:69:dd:6d:a5:ab:23:9f:be:ff:16:78:6a:0b:7e:
+                    ac:82:b6:5a:d7:e9:e4:b4:3c:fa:4f:64:29:74:5a:
+                    0d:fb:2e:d6:a0:c2:a8:86:3f:be:07:f7:1d:6e:ba:
+                    10:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                95:3C:F4:24:9F:9C:4A:CB:16:AA:A4:8A:AB:DF:D7:9D:6D:BA:AC:FA
+                82:4F:1E:35:E1:DD:95:CF:C7:D0:E7:CC:86:B7:EB:50:BF:33:62:07
             X509v3 Authority Key Identifier: 
-                keyid:29:73:E8:7F:69:DE:63:14:43:C6:6D:55:6C:C2:AE:84:FA:D5:FC:8C
+                keyid:E6:A1:BA:DF:A4:01:75:1C:DE:59:26:D2:66:E6:AE:E7:8D:3E:13:C2
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a7:dc:31:88:64:26:72:62:34:8d:3a:75:7a:71:d4:ae:7a:2c:
-         f4:2d:44:e9:e9:e8:c5:4d:79:b2:dc:12:ea:75:60:44:cb:6e:
-         df:22:47:d5:ae:f6:03:dc:c4:6b:cf:90:75:29:49:50:04:e0:
-         94:2a:b3:bf:d4:ae:e2:08:ad:52:22:65:91:33:09:79:cf:c9:
-         27:9b:52:dd:a8:0d:f5:21:b6:58:c4:5f:1b:79:72:69:7a:7b:
-         49:7d:64:67:d0:d6:1c:21:fe:e9:ae:39:1c:b4:3f:f2:f6:6d:
-         7e:30:15:76:a3:af:eb:43:c0:ed:f3:8a:bc:48:5c:47:fc:44:
-         09:da:7d:9a:20:f1:e2:1d:4d:40:34:0c:e1:68:16:9e:47:57:
-         1a:6a:19:e4:b2:6e:dd:7c:69:5f:b8:2b:bd:e7:cb:e4:9c:9c:
-         79:e1:a5:b3:82:a1:c9:5b:fd:73:d6:a8:1d:1d:d8:31:d6:37:
-         00:e9:7a:d2:a2:ee:c0:42:21:22:da:70:6e:a8:8c:fa:0c:24:
-         c9:70:4b:49:0a:c1:db:35:f2:71:d7:30:41:a7:6b:05:92:c6:
-         cd:8c:d4:de:c2:6b:aa:b8:70:d2:fa:cf:9a:01:af:34:80:95:
-         ad:ab:59:86:f2:56:6d:d8:43:95:24:e3:f7:7b:b9:83:89:ed:
-         e7:7a:2f:35
+         4b:dc:3c:86:b5:53:1c:c6:e6:77:4d:41:cf:e8:1f:37:dd:33:
+         8d:10:f9:1d:93:1d:41:96:86:79:7b:14:27:1b:70:80:10:96:
+         ea:38:e5:e2:a2:91:4a:c0:a9:8b:de:49:3b:f1:74:c0:bc:ae:
+         81:71:32:21:88:e5:2a:7d:41:d4:c0:e1:e7:0c:3a:d2:52:a5:
+         1e:ca:19:32:c0:88:c5:16:36:cc:b6:7c:cf:af:98:b3:2d:f8:
+         f8:40:08:16:52:00:ba:a2:3a:76:83:e8:cd:1d:95:d1:f1:67:
+         ec:06:e2:71:1d:01:ef:bb:4e:30:73:26:ad:3a:ac:25:4e:b9:
+         24:f9:9e:bb:72:b3:04:ba:ee:7e:16:bb:eb:42:66:04:14:48:
+         5e:5a:7d:0b:b3:5e:40:22:6c:65:e1:5b:61:1b:b6:dd:d0:e4:
+         5f:f8:b1:22:e1:d0:6c:d6:55:aa:a2:f5:9d:fa:62:f0:ab:4a:
+         c4:91:db:e4:fd:7d:df:a7:02:87:5e:17:76:2e:96:56:45:56:
+         cf:b2:2b:01:80:a4:81:9e:4e:a2:79:45:38:83:06:2e:61:ac:
+         22:bb:41:86:b2:9c:9b:b9:1f:62:23:27:cc:d4:bc:06:df:3e:
+         54:22:ed:69:02:e0:53:bc:ed:28:50:5d:82:fe:a6:8f:10:a2:
+         cd:38:17:80
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjIRc1
-wHfxo1F3EUU+kl+XZeuZzCbijPhK2D1xF6Lras8vB6j6J8H4xVAiQqJvkktnwwyn
-7DWHBazr4yfNYj3ELoD2Kq8xBccbDztxbZB3DbRI5yYuSkSvu3bgYuzmYcxbYeoD
-zk1G0Jbi1dlnbwzyBuOaFARogojWi8F/+4GM5tyIIPdT79VWW14As1voztDSau24
-SvJLVvtjddRro4rUP+aeKRunI2G68NYZ+4ytQC98FDYPS/Fu8LhufcyCEWNIFS80
-AJnNvrQavthzOACswQlBosTsdGkVUsRFLSD/tc7QQb6isk3vpzvx3514Gp0sbGEm
-LveCq1B2baPTM0YHAgMBAAGjgekwgeYwHQYDVR0OBBYEFJU89CSfnErLFqqkiqvf
-151tuqz6MB8GA1UdIwQYMBaAFClz6H9p3mMUQ8ZtVWzCroT61fyMMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDH5Fsg
+wS6hiTLR5YAO4xJ3t5g112vsnpxQkrKaKLH26SKZIwVUfWfejAkEt2+TldbHxUgj
+btJWMhm7rLQ9O99LQIVIJSobIsRhOwhcJolj5xknxVg/m02y/7QYQk19talaS0tG
+G867Fw4pEHhQEL3SFrZjvpQhxucL0ZXq0LWuMyd+AgsbS4Wc15pM0YK2j00l5PAl
+ljSn+bXmJBl8VlTeuRVeOey7Ev9X74c3RvphvKVKMm3DNbFTAgvN8W/eOWMD/qG2
+emep9tDf0CStOfDYWONp3W2lqyOfvv8WeGoLfqyCtlrX6eS0PPpPZCl0Wg37Ltag
+wqiGP74H9x1uuhDRAgMBAAGjgekwgeYwHQYDVR0OBBYEFIJPHjXh3ZXPx9DnzIa3
+61C/M2IHMB8GA1UdIwQYMBaAFOahut+kAXUc3lkm0mbmrueNPhPCMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAp9wxiGQmcmI0jTp1enHU
-rnos9C1E6enoxU15stwS6nVgRMtu3yJH1a72A9zEa8+QdSlJUATglCqzv9Su4git
-UiJlkTMJec/JJ5tS3agN9SG2WMRfG3lyaXp7SX1kZ9DWHCH+6a45HLQ/8vZtfjAV
-dqOv60PA7fOKvEhcR/xECdp9miDx4h1NQDQM4WgWnkdXGmoZ5LJu3XxpX7grvefL
-5JyceeGls4KhyVv9c9aoHR3YMdY3AOl60qLuwEIhItpwbqiM+gwkyXBLSQrB2zXy
-cdcwQadrBZLGzYzU3sJrqrhw0vrPmgGvNICVratZhvJWbdhDlSTj93u5g4nt53ov
-NQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAS9w8hrVTHMbmd01Bz+gf
+N90zjRD5HZMdQZaGeXsUJxtwgBCW6jjl4qKRSsCpi95JO/F0wLyugXEyIYjlKn1B
+1MDh5ww60lKlHsoZMsCIxRY2zLZ8z6+Ysy34+EAIFlIAuqI6doPozR2V0fFn7Abi
+cR0B77tOMHMmrTqsJU65JPmeu3KzBLrufha760JmBBRIXlp9C7NeQCJsZeFbYRu2
+3dDkX/ixIuHQbNZVqqL1nfpi8KtKxJHb5P1936cCh14Xdi6WVkVWz7IrAYCkgZ5O
+onlFOIMGLmGsIrtBhrKcm7kfYiMnzNS8Bt8+VCLtaQLgU7ztKFBdgv6mjxCizTgX
+gA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cf:bd:56:f0:dc:36:bc:a8:05:9b:fd:e3:c1:86:
-                    da:96:c5:0b:b0:7f:fd:e5:6d:f4:df:44:46:82:ed:
-                    45:60:4b:5d:c6:27:5a:d8:f1:3c:28:a5:eb:3f:a9:
-                    5f:bc:b2:a9:20:fe:09:fa:39:76:5f:2a:91:b2:ef:
-                    c9:47:70:c9:d0:ce:66:57:25:d0:72:12:c5:2a:ab:
-                    5c:bc:b3:9a:ba:c8:e9:cb:81:6a:16:f1:7d:a9:9f:
-                    e8:9a:0a:47:29:53:34:f7:99:70:14:c6:63:4c:aa:
-                    ba:96:7c:78:c4:11:d1:cc:3b:35:56:e8:7f:41:9c:
-                    41:69:d2:b0:dd:36:00:ed:dd:a2:bd:e2:56:29:c5:
-                    8d:4e:7b:71:fb:f5:a1:7b:37:df:d2:66:d4:fe:c8:
-                    24:6d:a3:c4:43:e9:d3:3e:e3:08:78:95:e9:86:e3:
-                    73:09:f9:04:fe:1a:25:19:5b:7c:a8:da:62:05:aa:
-                    56:1b:2a:d4:33:ff:4f:a2:fe:34:90:ec:e9:94:f5:
-                    0a:92:e9:b3:bf:c4:d3:78:80:0a:5e:4e:11:58:94:
-                    66:a8:52:b8:6e:49:64:cb:45:ee:7c:46:80:d7:3d:
-                    40:df:9e:69:54:ce:a5:7f:db:6b:73:42:c5:9c:6e:
-                    7c:b6:9f:ac:b9:8c:cd:7f:da:00:7b:3b:c2:dd:4d:
-                    44:c7
+                    00:9b:74:18:e4:63:39:09:24:c9:68:d2:cd:f3:7f:
+                    29:14:e9:46:45:e6:ca:47:3f:b5:21:38:a8:f4:ac:
+                    16:6c:51:16:b0:06:93:de:8a:b8:0e:28:02:52:bc:
+                    19:f7:b3:c7:47:a8:d2:20:9b:30:f6:b4:e9:cc:25:
+                    9e:30:f4:74:ed:73:1a:1c:4e:92:f8:8d:04:32:98:
+                    36:85:34:24:7a:c5:3c:e1:bc:0d:c0:a2:7f:ff:65:
+                    12:10:c0:19:6e:c1:cf:2f:04:90:b0:41:4c:42:42:
+                    ed:8a:7a:5f:4c:67:79:6c:e5:15:ce:96:02:bc:73:
+                    cd:4b:7a:e2:c6:54:ee:39:5b:74:39:df:b2:a9:8c:
+                    81:94:b4:ae:05:a0:d2:05:65:68:ee:54:ff:0c:ab:
+                    e2:d1:28:b4:4b:bc:5a:16:d1:84:24:5f:38:d3:7f:
+                    7b:3e:92:ef:8a:4e:ba:d2:2b:fb:f4:df:35:e5:55:
+                    82:d8:4a:5d:e6:49:4e:84:ee:bd:ea:a7:35:86:a8:
+                    dc:43:02:af:a7:ca:3e:2f:c6:bc:7b:aa:07:7a:69:
+                    cf:af:cb:63:89:9d:1d:6d:a8:b4:a1:64:29:bb:b7:
+                    7c:bb:d5:b0:72:89:f5:f9:26:8c:e1:e1:6f:a9:ef:
+                    d5:2c:66:ae:4e:c4:f5:31:ec:74:db:f9:a9:7f:86:
+                    37:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                29:73:E8:7F:69:DE:63:14:43:C6:6D:55:6C:C2:AE:84:FA:D5:FC:8C
+                E6:A1:BA:DF:A4:01:75:1C:DE:59:26:D2:66:E6:AE:E7:8D:3E:13:C2
             X509v3 Authority Key Identifier: 
-                keyid:77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                keyid:57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ad:b2:08:36:77:a1:da:aa:e4:31:7d:a8:61:03:be:0a:86:a2:
-         15:3b:08:bb:c8:86:eb:f8:52:c0:63:27:db:5c:25:16:98:05:
-         b1:84:dc:12:74:ce:25:a6:2e:be:32:2c:1f:0a:04:4e:9e:bb:
-         a1:b6:34:ef:20:2d:a3:fe:cc:b3:40:2e:75:9c:2d:c3:c0:e7:
-         8e:aa:9f:18:60:a9:61:18:4f:a5:d8:3d:c7:d3:09:62:6c:b8:
-         5a:99:3b:34:70:7b:7d:61:cc:f8:c9:71:97:2c:59:96:d2:1a:
-         c5:4e:ce:df:65:cf:18:05:bd:9f:bc:86:ba:16:55:79:58:d8:
-         f7:32:44:b6:59:32:9f:5d:ef:04:25:2a:2d:54:36:9e:62:0f:
-         c4:df:1c:10:64:02:ba:64:f2:ea:3d:cc:5c:ea:2e:4d:72:fa:
-         e9:72:0f:77:af:5d:1e:32:b9:64:7c:c5:b2:77:36:64:e5:ba:
-         d0:a0:8c:97:7d:b3:76:6c:c1:15:70:f8:0c:50:b8:3c:d4:6c:
-         4f:33:32:f2:c8:b8:35:cd:80:a2:3a:49:55:ba:2e:5b:c9:9a:
-         b6:77:fb:0f:01:2e:72:21:bc:88:f6:e3:71:8c:68:59:f3:1b:
-         d8:e1:d3:e3:6c:15:5d:8d:82:a3:db:84:44:58:3e:2f:a9:88:
-         56:2a:a6:4b
+         5f:8c:fb:75:af:a0:cb:79:8e:c5:c9:6d:90:11:3d:a7:aa:12:
+         ac:e9:22:15:b1:15:9a:8f:30:7b:5c:ad:f8:0a:df:38:69:4a:
+         56:38:1b:ee:c4:af:63:26:13:10:40:ef:3d:42:d0:77:25:b4:
+         54:59:05:72:d1:8d:61:d6:ad:7d:09:28:ba:a8:e1:99:aa:ae:
+         3b:78:03:d9:56:80:23:5d:81:81:0f:96:ce:07:35:3e:cf:88:
+         54:4d:7f:3c:5d:d0:03:93:3c:b7:76:9f:4d:51:37:4f:6b:8c:
+         18:e2:ba:e4:4c:18:a2:c2:80:c4:a8:4d:b7:81:d4:99:9d:28:
+         fe:ca:ab:a5:af:f1:0f:dd:13:84:47:be:fc:d2:88:47:d4:7c:
+         be:aa:62:49:65:f2:b8:b1:4e:ad:7a:f3:e1:52:50:6b:3c:8e:
+         07:df:d4:22:20:53:32:68:fa:0b:9c:8a:4a:e9:63:08:ee:eb:
+         65:10:05:1d:9d:c1:2b:a3:22:4b:90:37:59:c5:9f:90:ac:8f:
+         10:cb:76:3b:ca:1a:60:f5:a1:b1:26:24:05:92:2c:68:61:8e:
+         03:ca:54:e6:f6:40:b2:bf:db:a8:18:9f:62:ad:05:10:e1:05:
+         ce:be:2f:34:8c:1d:44:73:90:b3:4e:5b:7d:1a:2e:b6:2b:0f:
+         79:da:15:4b
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz71W8Nw2
-vKgFm/3jwYbalsULsH/95W3030RGgu1FYEtdxida2PE8KKXrP6lfvLKpIP4J+jl2
-XyqRsu/JR3DJ0M5mVyXQchLFKqtcvLOausjpy4FqFvF9qZ/omgpHKVM095lwFMZj
-TKq6lnx4xBHRzDs1Vuh/QZxBadKw3TYA7d2iveJWKcWNTntx+/Whezff0mbU/sgk
-baPEQ+nTPuMIeJXphuNzCfkE/holGVt8qNpiBapWGyrUM/9Pov40kOzplPUKkumz
-v8TTeIAKXk4RWJRmqFK4bklky0XufEaA1z1A355pVM6lf9trc0LFnG58tp+suYzN
-f9oAezvC3U1ExwIDAQABo4HLMIHIMB0GA1UdDgQWBBQpc+h/ad5jFEPGbVVswq6E
-+tX8jDAfBgNVHSMEGDAWgBR3s71JTWfQfk9nwybHHmZC+W3kCDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3QY5GM5
+CSTJaNLN838pFOlGRebKRz+1ITio9KwWbFEWsAaT3oq4DigCUrwZ97PHR6jSIJsw
+9rTpzCWeMPR07XMaHE6S+I0EMpg2hTQkesU84bwNwKJ//2USEMAZbsHPLwSQsEFM
+QkLtinpfTGd5bOUVzpYCvHPNS3rixlTuOVt0Od+yqYyBlLSuBaDSBWVo7lT/DKvi
+0Si0S7xaFtGEJF840397PpLvik660iv79N815VWC2Epd5klOhO696qc1hqjcQwKv
+p8o+L8a8e6oHemnPr8tjiZ0dbai0oWQpu7d8u9Wwcon1+SaM4eFvqe/VLGauTsT1
+Mex02/mpf4Y34QIDAQABo4HLMIHIMB0GA1UdDgQWBBTmobrfpAF1HN5ZJtJm5q7n
+jT4TwjAfBgNVHSMEGDAWgBRXMGxPNNHgJ0ov6Crv03UBJG+1+jA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgWgMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AK2yCDZ3odqq5DF9qGEDvgqGohU7CLvIhuv4UsBjJ9tcJRaYBbGE3BJ0ziWmLr4y
-LB8KBE6eu6G2NO8gLaP+zLNALnWcLcPA546qnxhgqWEYT6XYPcfTCWJsuFqZOzRw
-e31hzPjJcZcsWZbSGsVOzt9lzxgFvZ+8hroWVXlY2PcyRLZZMp9d7wQlKi1UNp5i
-D8TfHBBkArpk8uo9zFzqLk1y+ulyD3evXR4yuWR8xbJ3NmTlutCgjJd9s3ZswRVw
-+AxQuDzUbE8zMvLIuDXNgKI6SVW6LlvJmrZ3+w8BLnIhvIj243GMaFnzG9jh0+Ns
-FV2NgqPbhERYPi+piFYqpks=
+AF+M+3WvoMt5jsXJbZARPaeqEqzpIhWxFZqPMHtcrfgK3zhpSlY4G+7Er2MmExBA
+7z1C0HcltFRZBXLRjWHWrX0JKLqo4Zmqrjt4A9lWgCNdgYEPls4HNT7PiFRNfzxd
+0AOTPLd2n01RN09rjBjiuuRMGKLCgMSoTbeB1JmdKP7Kq6Wv8Q/dE4RHvvzSiEfU
+fL6qYkll8rixTq168+FSUGs8jgff1CIgUzJo+gucikrpYwju62UQBR2dwSujIkuQ
+N1nFn5CsjxDLdjvKGmD1obEmJAWSLGhhjgPKVOb2QLK/26gYn2KtBRDhBc6+LzSM
+HURzkLNOW30aLrYrD3naFUs=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:13:19:f8:ad:c0:ff:5e:86:19:9a:3c:7f:0c:
-                    04:81:2c:bd:c4:ee:fe:6c:bb:b5:a2:ee:08:10:bd:
-                    bb:b6:d1:6c:0d:e7:49:6a:45:0f:0f:46:2b:b6:49:
-                    49:92:7d:c8:b8:81:c1:3f:70:80:39:8a:29:de:77:
-                    f0:a3:3e:ef:8f:8d:9c:74:ca:05:c6:5f:12:fc:d4:
-                    4f:47:64:5d:ea:4d:84:af:f0:d0:88:ff:58:98:ad:
-                    7f:6f:c0:22:bc:8e:a4:44:7b:2c:d3:3e:08:45:2a:
-                    13:20:90:1d:b6:0b:2c:4e:a4:40:c3:76:66:6f:eb:
-                    5c:49:fc:1d:81:8e:a7:cc:a3:91:bd:6f:fa:22:73:
-                    84:35:99:08:2c:3e:8e:0b:74:a6:16:79:b3:37:2f:
-                    66:5c:b1:4c:55:76:af:65:9c:cc:e6:af:b0:8c:c3:
-                    28:24:c9:a0:f2:b4:d0:74:d3:e0:72:af:0d:86:f0:
-                    21:4a:9e:4a:9f:95:7b:7a:73:4c:a9:b5:0a:ac:23:
-                    f7:63:64:88:fc:00:9b:69:23:33:1a:75:bd:6d:f6:
-                    f2:62:c7:68:19:d0:d1:55:2c:6d:f4:41:d8:3b:79:
-                    41:5f:44:97:b9:8f:5a:b4:0a:12:b9:94:0e:34:c7:
-                    a7:93:cf:dd:f1:3d:bb:0f:11:33:fc:c8:c4:76:2d:
-                    9e:cd
+                    00:b0:25:1d:c5:67:18:55:8a:dd:f2:19:86:be:a3:
+                    da:c1:03:6b:82:76:3f:09:83:35:0b:73:b7:53:40:
+                    64:94:90:8b:5b:e5:24:a6:bb:cf:46:ce:80:44:f1:
+                    85:17:86:d4:3b:9e:54:1f:7c:b4:ff:fd:c2:24:57:
+                    2e:a8:9d:97:57:92:ec:f7:bb:31:32:70:53:cc:7f:
+                    0f:b3:be:65:86:dc:f1:86:4b:c1:d9:df:1d:9b:d8:
+                    49:4c:16:54:de:f9:a2:8f:c3:b1:38:85:ea:6b:4c:
+                    04:8a:52:f6:3e:96:a4:86:9d:de:6d:be:ae:21:21:
+                    f6:82:03:3f:b0:23:70:f3:6f:31:a4:70:a1:4f:9f:
+                    23:c1:78:41:ff:f8:65:93:75:a5:f9:5a:74:1c:7f:
+                    74:1a:55:bf:8c:66:e5:30:44:fd:3d:f3:43:9a:c8:
+                    e0:43:96:41:ca:4b:9b:71:f5:ca:fe:91:d3:39:b6:
+                    03:c7:58:d9:7d:8f:7c:f6:1e:55:46:a6:03:dd:d6:
+                    38:b4:d2:f0:bd:b2:83:9b:ea:8b:6b:c8:5e:ff:7b:
+                    05:60:84:bf:ba:7b:6d:8f:88:4a:31:c7:11:c2:4c:
+                    08:e1:2e:26:19:f0:5d:08:c5:e2:61:f8:52:4a:0b:
+                    92:f5:a4:d0:7c:ad:91:59:f1:3b:d8:fa:62:0d:58:
+                    79:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
             X509v3 Authority Key Identifier: 
-                keyid:77:B3:BD:49:4D:67:D0:7E:4F:67:C3:26:C7:1E:66:42:F9:6D:E4:08
+                keyid:57:30:6C:4F:34:D1:E0:27:4A:2F:E8:2A:EF:D3:75:01:24:6F:B5:FA
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         5d:bb:5a:36:f5:74:9c:51:8c:7c:b3:e0:71:91:0d:51:59:45:
-         92:b8:3c:f1:0a:42:ac:c3:c7:9f:4e:2a:61:09:7d:46:27:c7:
-         a6:23:09:39:39:18:9e:78:3f:94:cf:d6:44:5e:8e:9f:c4:4e:
-         fd:b4:ab:4f:56:ea:90:6d:4d:51:88:55:e2:56:c0:03:14:a2:
-         99:d2:1d:67:03:75:6d:5c:a0:c5:5c:78:a6:c5:8e:96:6e:7a:
-         4f:a1:b0:4e:29:62:92:bc:44:88:a4:72:8d:64:16:da:ff:c4:
-         e8:4c:d3:eb:a6:03:85:eb:a8:42:ee:ae:c0:87:f2:43:41:05:
-         43:e2:d5:ad:b6:59:dd:59:51:6c:2b:77:f3:51:a9:e0:9b:3e:
-         ba:04:64:d3:f3:ce:59:5a:ad:b1:56:da:91:80:89:d9:62:81:
-         99:9c:a4:49:24:7a:bc:91:4e:ab:86:e6:0b:76:0d:34:2d:75:
-         fa:7b:13:f5:b3:52:22:c1:57:7c:cd:79:0c:2b:ba:8b:87:83:
-         52:59:5b:69:55:9d:c4:0a:98:b0:b0:dd:88:86:8c:28:c3:b2:
-         bd:35:85:b1:f0:78:6a:99:ac:63:52:08:5b:69:97:55:c0:87:
-         81:be:bd:09:7f:eb:56:a9:84:9f:f6:9c:df:f2:19:41:60:f1:
-         06:d1:77:38
+         37:42:51:57:5a:64:63:1c:1c:47:88:7d:76:dc:d7:5a:81:75:
+         eb:36:20:4b:1c:99:82:1b:e6:48:f6:10:c2:1b:07:7e:12:f6:
+         c9:39:47:4e:9b:30:4e:78:4a:0f:69:d5:19:51:dc:64:df:c9:
+         e2:09:4e:15:55:25:5f:47:43:66:d4:4e:cc:f7:89:a2:60:dd:
+         42:a7:3e:69:b3:28:d8:a3:60:2a:4e:d1:3e:65:2d:fa:c8:13:
+         29:fc:0e:a8:ad:82:47:e0:fc:3b:54:1d:da:ac:fd:f3:db:39:
+         d9:bb:a9:96:33:43:96:0c:95:df:be:af:a2:64:44:08:ad:5f:
+         83:1b:be:a3:ad:41:a2:0f:0b:05:f5:49:4c:b5:b2:cb:a7:e4:
+         30:c7:44:5a:bd:3b:34:d8:ad:27:6b:f5:83:ed:78:53:2e:d7:
+         cc:b4:82:d7:52:2b:06:c4:62:96:53:23:e7:4a:8d:13:b5:95:
+         3f:34:25:23:e9:0a:04:74:83:f1:c3:c9:94:2e:b0:0a:a2:b6:
+         ce:dc:03:11:a2:52:7b:26:7f:5e:37:98:7b:7b:3f:99:a8:a5:
+         07:4b:55:90:7a:21:a9:32:92:1d:c6:f3:55:ca:4e:a2:83:14:
+         d8:1f:d2:1d:76:11:19:ae:10:81:72:35:bf:0b:fa:d1:66:a8:
+         f5:19:d9:6b
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALMTGfitwP9ehhmaPH8M
-BIEsvcTu/my7taLuCBC9u7bRbA3nSWpFDw9GK7ZJSZJ9yLiBwT9wgDmKKd538KM+
-74+NnHTKBcZfEvzUT0dkXepNhK/w0Ij/WJitf2/AIryOpER7LNM+CEUqEyCQHbYL
-LE6kQMN2Zm/rXEn8HYGOp8yjkb1v+iJzhDWZCCw+jgt0phZ5szcvZlyxTFV2r2Wc
-zOavsIzDKCTJoPK00HTT4HKvDYbwIUqeSp+Ve3pzTKm1Cqwj92NkiPwAm2kjMxp1
-vW328mLHaBnQ0VUsbfRB2Dt5QV9El7mPWrQKErmUDjTHp5PP3fE9uw8RM/zIxHYt
-ns0CAwEAAaOByzCByDAdBgNVHQ4EFgQUd7O9SU1n0H5PZ8Mmxx5mQvlt5AgwHwYD
-VR0jBBgwFoAUd7O9SU1n0H5PZ8Mmxx5mQvlt5AgwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALAlHcVnGFWK3fIZhr6j
+2sEDa4J2PwmDNQtzt1NAZJSQi1vlJKa7z0bOgETxhReG1DueVB98tP/9wiRXLqid
+l1eS7Pe7MTJwU8x/D7O+ZYbc8YZLwdnfHZvYSUwWVN75oo/DsTiF6mtMBIpS9j6W
+pIad3m2+riEh9oIDP7AjcPNvMaRwoU+fI8F4Qf/4ZZN1pfladBx/dBpVv4xm5TBE
+/T3zQ5rI4EOWQcpLm3H1yv6R0zm2A8dY2X2PfPYeVUamA93WOLTS8L2yg5vqi2vI
+Xv97BWCEv7p7bY+ISjHHEcJMCOEuJhnwXQjF4mH4UkoLkvWk0HytkVnxO9j6Yg1Y
+eQcCAwEAAaOByzCByDAdBgNVHQ4EFgQUVzBsTzTR4CdKL+gq79N1ASRvtfowHwYD
+VR0jBBgwFoAUVzBsTzTR4CdKL+gq79N1ASRvtfowNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBdu1o29XSc
-UYx8s+BxkQ1RWUWSuDzxCkKsw8efTiphCX1GJ8emIwk5ORieeD+Uz9ZEXo6fxE79
-tKtPVuqQbU1RiFXiVsADFKKZ0h1nA3VtXKDFXHimxY6WbnpPobBOKWKSvESIpHKN
-ZBba/8ToTNPrpgOF66hC7q7Ah/JDQQVD4tWttlndWVFsK3fzUangmz66BGTT885Z
-Wq2xVtqRgInZYoGZnKRJJHq8kU6rhuYLdg00LXX6exP1s1IiwVd8zXkMK7qLh4NS
-WVtpVZ3ECpiwsN2Ihowow7K9NYWx8HhqmaxjUghbaZdVwIeBvr0Jf+tWqYSf9pzf
-8hlBYPEG0Xc4
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA3QlFXWmRj
+HBxHiH123NdagXXrNiBLHJmCG+ZI9hDCGwd+EvbJOUdOmzBOeEoPadUZUdxk38ni
+CU4VVSVfR0Nm1E7M94miYN1Cpz5psyjYo2AqTtE+ZS36yBMp/A6orYJH4Pw7VB3a
+rP3z2znZu6mWM0OWDJXfvq+iZEQIrV+DG76jrUGiDwsF9UlMtbLLp+Qwx0RavTs0
+2K0na/WD7XhTLtfMtILXUisGxGKWUyPnSo0TtZU/NCUj6QoEdIPxw8mULrAKorbO
+3AMRolJ7Jn9eN5h7ez+ZqKUHS1WQeiGpMpIdxvNVyk6igxTYH9IddhEZrhCBcjW/
+C/rRZqj1Gdlr
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: keyCertSign bit is not set
 
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
index 71e03f9..42fe109 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:20:16:45:28:21:d2:a5:63:de:24:67:38:92:
-                    4c:f1:a4:c8:45:30:94:b8:aa:5f:7c:1a:3f:6c:28:
-                    2f:31:7e:a6:bb:af:45:46:68:a2:f2:5d:a4:94:4b:
-                    9b:c9:4c:e0:5d:be:ce:34:5e:08:df:a7:50:c0:30:
-                    94:98:0f:52:ec:ec:91:23:91:bc:24:60:65:9d:b7:
-                    74:38:7f:9d:d4:20:94:5c:1b:6f:71:82:e1:b5:98:
-                    95:3c:33:48:7e:6a:c6:e0:59:e6:a2:c5:0b:95:78:
-                    0e:7e:e3:a8:16:93:0a:43:df:ec:d7:03:c0:f1:60:
-                    13:45:9d:52:b5:37:66:03:79:78:8f:d6:53:87:7c:
-                    dd:50:8a:16:54:33:bb:62:f2:42:a0:fa:49:c3:c1:
-                    e2:c4:c8:d7:db:49:16:43:c8:69:0e:88:e2:f1:2d:
-                    c6:59:c6:5a:e3:d8:57:e9:a7:10:48:73:c8:c8:f7:
-                    a1:6d:57:25:b3:04:43:05:6a:90:1d:87:36:67:7f:
-                    3e:97:eb:5b:66:03:3a:10:56:32:1d:04:cc:43:90:
-                    82:9c:ed:d2:b4:4d:ba:d0:ac:23:26:f9:25:5e:63:
-                    6c:e1:83:07:2b:ec:38:9a:d1:82:bc:38:a0:64:58:
-                    19:c2:77:3c:e9:bd:20:d5:45:43:8d:ee:51:ba:98:
-                    95:65
+                    00:c4:84:2b:01:17:da:c2:19:ed:2c:f5:e5:d3:3a:
+                    7c:e0:ae:b2:b7:08:77:73:10:3b:64:ed:d3:80:8e:
+                    e6:30:bd:a7:36:de:8d:67:2e:f7:07:36:b3:3b:1e:
+                    90:2e:f0:ae:e6:13:90:58:ef:c3:8d:c2:f7:cd:42:
+                    5b:0d:45:0d:0e:67:c3:ee:e6:21:5b:e7:a7:f8:f2:
+                    d7:82:d6:0e:be:49:bb:24:eb:7e:dc:7f:03:c1:58:
+                    4a:0c:04:d4:d3:c2:f1:af:21:70:ad:d4:dd:82:ab:
+                    da:fe:95:bb:cf:86:da:36:3d:b7:7b:6d:04:72:f3:
+                    29:5c:f6:f5:c5:27:37:3c:68:99:3e:ec:91:dd:3f:
+                    8c:79:db:9f:cc:66:1c:ad:5b:20:8f:61:64:39:91:
+                    35:ef:ae:ac:4a:44:08:9c:62:5e:be:00:78:f4:90:
+                    7e:b8:5a:88:d6:b7:24:fb:3e:05:0c:38:54:e8:9e:
+                    3a:3c:5d:f6:8a:07:f1:d4:0f:db:fe:1f:07:4b:ed:
+                    b0:84:a2:d6:fb:a3:6c:5e:9c:54:27:c0:c2:2a:06:
+                    a2:d8:e1:fc:62:1e:55:c4:7c:24:fa:85:a9:c2:6b:
+                    0c:cd:b6:76:43:55:c0:46:74:37:9c:3a:d2:82:a3:
+                    d4:aa:3b:64:cc:8a:39:9f:37:0c:eb:fa:44:5e:49:
+                    c2:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7E:D1:A4:40:CE:81:CA:14:BD:C9:25:39:E5:F7:21:B6:24:90:61:1D
+                2E:E9:9C:97:E6:50:AF:13:B9:C3:CB:CE:21:70:CF:E6:C9:1D:E2:F6
             X509v3 Authority Key Identifier: 
-                keyid:60:72:15:4D:8C:1A:E1:CD:8F:EF:00:AA:9B:37:4C:00:57:29:66:15
+                keyid:AF:9F:E8:B3:08:2D:62:FF:99:69:5A:52:FA:0E:FE:09:99:1B:03:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6f:98:46:c6:44:e8:ba:f3:06:49:81:74:87:9e:d5:a1:0c:54:
-         66:56:88:7d:89:5e:cd:2f:1a:06:af:d8:c7:ed:9e:ad:8c:7a:
-         b0:3d:eb:93:3a:59:49:89:ba:ec:27:15:0e:08:d0:cd:ff:40:
-         57:3f:c2:77:c1:08:cb:5d:4f:40:ec:20:b3:96:9b:43:fa:96:
-         00:42:cd:dc:db:27:3e:98:fd:8a:45:80:ef:5c:86:20:12:a5:
-         83:b3:74:66:09:57:1c:4d:7e:0e:00:c4:57:dc:86:c0:2b:db:
-         fb:3a:77:1c:5f:7d:8f:ae:47:16:96:85:48:a7:95:4c:bc:b1:
-         18:09:34:c4:78:76:57:46:db:1e:b7:12:16:78:54:ec:2d:eb:
-         44:00:54:48:1d:6b:b0:d1:98:a8:58:ab:3d:f2:f2:5b:06:44:
-         d1:d5:d6:f5:d1:f2:c4:46:93:9a:9b:29:a8:9f:91:3d:e5:16:
-         d6:d6:ba:55:76:1c:2d:90:76:2f:92:a1:e4:52:a4:f3:f3:2a:
-         3c:b3:11:78:f6:9a:ce:17:c3:8f:da:57:fc:a2:02:06:59:9f:
-         18:10:ba:45:b4:0d:3d:64:aa:6c:ae:5b:a6:c8:f3:8b:d0:b0:
-         b6:1b:4a:cc:6c:fe:f9:d6:e4:15:da:28:1b:22:b3:ce:b4:6f:
-         bf:39:9b:34
+         50:bc:7d:72:3e:28:61:ab:86:50:31:4c:64:31:79:92:21:d0:
+         e2:54:75:4f:6b:81:c1:f2:86:c7:a2:9f:9f:40:b8:56:72:8d:
+         04:45:16:57:37:b0:34:28:10:4d:04:71:3d:bd:1c:c2:00:6b:
+         38:74:69:2b:17:dd:dc:2e:29:98:e3:93:d6:21:2a:e5:0f:1a:
+         55:94:78:38:37:b3:4a:f6:37:a1:68:3b:19:f3:56:81:6f:67:
+         1a:08:ea:84:b7:37:78:64:84:5e:b3:2b:17:bd:5c:14:7d:bb:
+         1a:00:2e:0e:00:99:fb:87:c3:8f:7a:fc:64:60:c8:83:f6:a7:
+         d0:fc:7a:85:4c:dd:c0:ff:19:65:92:73:fa:e4:f2:99:7c:65:
+         b4:0d:a8:d5:e1:2a:5d:e6:7c:2f:9a:72:c2:cb:e0:af:75:59:
+         36:c7:ff:dc:40:d3:65:9b:6a:68:e8:ec:47:0c:a5:02:3c:de:
+         c3:f4:44:c7:62:54:62:8a:24:b4:db:19:37:2f:98:28:ed:fb:
+         92:4a:4b:16:85:ee:dd:b7:49:05:bc:84:7f:8e:c5:4f:e6:87:
+         04:a2:1e:12:f7:b8:e0:d0:ca:ae:ea:34:3f:99:e2:42:60:15:
+         f2:34:b8:d4:6f:7e:fa:f5:ba:76:98:49:3b:16:ca:36:51:65:
+         02:d5:cc:8e
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/IBZF
-KCHSpWPeJGc4kkzxpMhFMJS4ql98Gj9sKC8xfqa7r0VGaKLyXaSUS5vJTOBdvs40
-Xgjfp1DAMJSYD1Ls7JEjkbwkYGWdt3Q4f53UIJRcG29xguG1mJU8M0h+asbgWeai
-xQuVeA5+46gWkwpD3+zXA8DxYBNFnVK1N2YDeXiP1lOHfN1QihZUM7ti8kKg+knD
-weLEyNfbSRZDyGkOiOLxLcZZxlrj2FfppxBIc8jI96FtVyWzBEMFapAdhzZnfz6X
-61tmAzoQVjIdBMxDkIKc7dK0TbrQrCMm+SVeY2zhgwcr7Dia0YK8OKBkWBnCdzzp
-vSDVRUON7lG6mJVlAgMBAAGjgekwgeYwHQYDVR0OBBYEFH7RpEDOgcoUvcklOeX3
-IbYkkGEdMB8GA1UdIwQYMBaAFGByFU2MGuHNj+8Aqps3TABXKWYVMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEhCsB
+F9rCGe0s9eXTOnzgrrK3CHdzEDtk7dOAjuYwvac23o1nLvcHNrM7HpAu8K7mE5BY
+78ONwvfNQlsNRQ0OZ8Pu5iFb56f48teC1g6+Sbsk637cfwPBWEoMBNTTwvGvIXCt
+1N2Cq9r+lbvPhto2Pbd7bQRy8ylc9vXFJzc8aJk+7JHdP4x525/MZhytWyCPYWQ5
+kTXvrqxKRAicYl6+AHj0kH64WojWtyT7PgUMOFTonjo8XfaKB/HUD9v+HwdL7bCE
+otb7o2xenFQnwMIqBqLY4fxiHlXEfCT6hanCawzNtnZDVcBGdDecOtKCo9SqO2TM
+ijmfNwzr+kReScIHAgMBAAGjgekwgeYwHQYDVR0OBBYEFC7pnJfmUK8TucPLziFw
+z+bJHeL2MB8GA1UdIwQYMBaAFK+f6LMILWL/mWlaUvoO/gmZGwO/MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAb5hGxkTouvMGSYF0h57V
-oQxUZlaIfYlezS8aBq/Yx+2erYx6sD3rkzpZSYm67CcVDgjQzf9AVz/Cd8EIy11P
-QOwgs5abQ/qWAELN3NsnPpj9ikWA71yGIBKlg7N0ZglXHE1+DgDEV9yGwCvb+zp3
-HF99j65HFpaFSKeVTLyxGAk0xHh2V0bbHrcSFnhU7C3rRABUSB1rsNGYqFirPfLy
-WwZE0dXW9dHyxEaTmpspqJ+RPeUW1ta6VXYcLZB2L5Kh5FKk8/MqPLMRePaazhfD
-j9pX/KICBlmfGBC6RbQNPWSqbK5bpsjzi9CwthtKzGz++dbkFdooGyKzzrRvvzmb
-NA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAULx9cj4oYauGUDFMZDF5
+kiHQ4lR1T2uBwfKGx6Kfn0C4VnKNBEUWVzewNCgQTQRxPb0cwgBrOHRpKxfd3C4p
+mOOT1iEq5Q8aVZR4ODezSvY3oWg7GfNWgW9nGgjqhLc3eGSEXrMrF71cFH27GgAu
+DgCZ+4fDj3r8ZGDIg/an0Px6hUzdwP8ZZZJz+uTymXxltA2o1eEqXeZ8L5pywsvg
+r3VZNsf/3EDTZZtqaOjsRwylAjzew/REx2JUYooktNsZNy+YKO37kkpLFoXu3bdJ
+BbyEf47FT+aHBKIeEve44NDKruo0P5niQmAV8jS41G9++vW6dphJOxbKNlFlAtXM
+jg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:04:ea:a3:74:51:66:9f:f2:6b:5d:9a:3d:96:
-                    bd:5c:b3:9e:9c:df:64:42:c7:85:1e:56:7a:3e:d5:
-                    3d:c9:f3:17:46:a3:a0:98:f6:80:df:f4:54:ca:e2:
-                    d5:e9:15:b8:3a:19:4e:1e:26:67:00:80:96:d5:bc:
-                    1e:af:a4:f3:23:de:15:72:89:1f:50:3f:8c:e1:62:
-                    6d:e1:0d:42:9f:67:76:aa:f5:20:b4:4d:58:fd:3d:
-                    63:57:bc:9c:23:fa:db:31:0c:09:37:0d:7c:f4:d1:
-                    06:c4:7f:b1:22:d1:df:05:43:a4:12:94:e2:02:ee:
-                    b7:ae:cd:48:04:00:39:4f:dc:40:f7:62:a7:d9:3e:
-                    81:9c:5d:98:6f:8d:0f:da:b6:0e:ad:1d:5b:ff:b6:
-                    50:90:ab:55:c7:2a:db:d8:67:6c:0f:87:68:8a:2a:
-                    79:24:a7:64:d8:c1:72:15:ff:6e:ca:31:f1:92:42:
-                    2e:78:a5:ce:2b:07:8a:4b:a0:80:88:14:76:d6:e1:
-                    ad:b2:75:9d:79:9b:d6:c2:cc:ac:74:67:d2:5b:90:
-                    6f:c4:8f:50:4c:ce:50:89:a4:69:ab:ca:d4:d1:a4:
-                    47:ae:0d:46:f3:5f:28:91:66:27:02:f0:7a:da:aa:
-                    80:be:c2:e7:83:89:06:49:de:9d:60:03:a3:fc:11:
-                    e2:2b
+                    00:df:eb:bf:48:cc:eb:45:fc:5e:33:cc:c3:37:cb:
+                    9c:fb:81:43:05:8a:65:a6:a9:25:13:16:ff:2b:46:
+                    0b:21:83:c4:ed:3e:f6:33:94:20:87:01:a9:8d:8a:
+                    e9:c6:e6:a1:a3:40:2a:c4:8e:21:7a:e8:4b:c6:e8:
+                    21:fc:0b:8f:2f:7b:a9:a4:1c:54:1f:fb:a5:a4:9d:
+                    30:60:ff:44:e6:c1:bd:5e:71:d8:30:07:e0:35:a0:
+                    30:c2:bb:7d:14:87:0c:82:84:77:7f:00:fa:9a:ec:
+                    14:f6:54:91:98:5e:c2:b3:9c:23:f5:de:30:ae:24:
+                    03:c1:25:bb:d3:f7:98:c8:c8:7a:f8:72:5d:28:82:
+                    d8:b4:73:6a:9a:ce:ed:31:ed:b4:a0:ed:4f:f5:94:
+                    60:f9:fb:c7:11:05:88:a1:cb:dd:f4:0f:6f:8a:bc:
+                    ed:e5:f3:80:c3:48:b0:73:2f:6f:a7:42:26:00:31:
+                    6d:8e:4b:63:f8:fa:36:03:7f:d2:17:e6:55:b3:0e:
+                    a8:a1:4a:e2:b4:9c:4a:db:e7:71:6d:9b:21:3a:7f:
+                    9f:31:94:b5:5f:d5:c2:c7:8f:9b:bc:fb:e9:19:3b:
+                    85:ce:7b:00:2a:72:9b:59:0c:9b:a2:da:03:ba:91:
+                    1a:5d:9f:59:a2:55:09:51:42:80:8f:5c:4e:1b:4b:
+                    b6:09
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:72:15:4D:8C:1A:E1:CD:8F:EF:00:AA:9B:37:4C:00:57:29:66:15
+                AF:9F:E8:B3:08:2D:62:FF:99:69:5A:52:FA:0E:FE:09:99:1B:03:BF
             X509v3 Authority Key Identifier: 
-                keyid:60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                keyid:71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
-         0b:ea:a8:1e:f0:70:66:9b:e0:48:9a:fa:62:3b:80:b0:9f:41:
-         e3:60:35:9c:b4:6e:0c:32:17:9d:38:72:b3:de:69:45:69:b1:
-         4b:87:2a:e1:68:59:d6:b9:03:c4:88:7e:e0:77:26:3d:c5:ad:
-         55:3f:13:bc:13:42:0f:9c:be:f7:70:3e:19:79:96:3b:b8:12:
-         d6:8a:a2:04:d2:17:ee:bd:78:db:cc:9f:54:87:26:89:61:c9:
-         f1:3e:8f:2f:19:55:49:05:c0:35:b2:ea:c4:ec:9a:11:d6:88:
-         f2:4b:ad:68:0a:32:75:42:42:a0:6a:51:cb:0f:63:32:20:4a:
-         59:89:e5:f9:61:ee:63:80:e0:71:03:d1:58:ea:d6:31:24:11:
-         ef:03:44:02:76:86:67:99:a5:71:18:a8:4e:be:fe:78:63:20:
-         67:b1:5a:1d:52:2a:48:fb:8a:ee:99:af:8f:57:37:43:67:1c:
-         54:00:d0:50:8c:ce:18:e0:ef:7b:cc:e1:13:d1:cc:3f:ea:3c:
-         ce:cf:07:fc:6e:4a:09:b1:1c:54:70:a4:21:47:5d:70:7d:b4:
-         04:3e:30:50:1d:86:2a:a6:67:3f:bd:b0:cb:57:e0:26:81:45:
-         c0:9a:86:8c:e6:ab:d0:87:9a:05:ee:2c:c5:eb:c6:c7:c0:94:
-         68:4a:48:20
+         92:14:97:70:e2:7e:a2:bb:28:e7:32:2b:8f:6d:73:2c:21:c9:
+         84:5a:52:94:2c:9c:f5:f9:e2:27:39:c2:81:7b:75:c6:ac:d3:
+         ca:92:62:55:8f:f5:ab:a8:c0:bc:b6:50:3f:fc:a2:4b:1c:ef:
+         64:6a:a2:b8:6c:c7:45:88:dd:45:3a:62:1c:85:9a:c3:a9:90:
+         cd:ec:25:a9:3d:e2:ce:65:19:43:ca:e5:e6:fe:e4:23:26:c2:
+         99:15:04:23:6e:52:57:9a:ac:1c:7b:cf:61:d9:ed:a9:d8:8c:
+         5c:db:ee:89:31:91:04:8c:b6:9c:7c:ed:7b:21:2e:d4:51:59:
+         84:f1:40:64:0c:57:df:7b:07:29:81:5f:96:f7:40:d7:05:2a:
+         e1:8d:4f:2c:76:29:4a:33:63:8b:c4:ae:3d:1d:9c:37:7e:e2:
+         4c:4e:f1:17:d0:cc:2d:89:60:9f:a7:8f:e0:51:95:8d:7f:94:
+         9f:05:f9:a9:a6:f0:b8:56:ad:75:23:ca:27:8f:93:5c:c8:3a:
+         44:20:a3:ed:52:90:7c:ae:23:d8:fc:d7:cf:bb:50:18:55:5e:
+         56:83:cc:5f:91:95:62:c5:2f:b6:4e:55:41:dc:4b:34:cd:54:
+         5c:01:fa:2e:ab:e8:7f:57:fe:c0:70:c0:00:d4:26:6e:47:6e:
+         69:6d:7b:8a
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwTqo3RR
-Zp/ya12aPZa9XLOenN9kQseFHlZ6PtU9yfMXRqOgmPaA3/RUyuLV6RW4OhlOHiZn
-AICW1bwer6TzI94VcokfUD+M4WJt4Q1Cn2d2qvUgtE1Y/T1jV7ycI/rbMQwJNw18
-9NEGxH+xItHfBUOkEpTiAu63rs1IBAA5T9xA92Kn2T6BnF2Yb40P2rYOrR1b/7ZQ
-kKtVxyrb2GdsD4doiip5JKdk2MFyFf9uyjHxkkIueKXOKweKS6CAiBR21uGtsnWd
-eZvWwsysdGfSW5BvxI9QTM5QiaRpq8rU0aRHrg1G818okWYnAvB62qqAvsLng4kG
-Sd6dYAOj/BHiKwIDAQABo4HLMIHIMB0GA1UdDgQWBBRgchVNjBrhzY/vAKqbN0wA
-VylmFTAfBgNVHSMEGDAWgBRgtJV/6vEpsumdZIOpyKNJbz4YUzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+u/SMzr
+RfxeM8zDN8uc+4FDBYplpqklExb/K0YLIYPE7T72M5QghwGpjYrpxuaho0AqxI4h
+euhLxugh/AuPL3uppBxUH/ulpJ0wYP9E5sG9XnHYMAfgNaAwwrt9FIcMgoR3fwD6
+muwU9lSRmF7Cs5wj9d4wriQDwSW70/eYyMh6+HJdKILYtHNqms7tMe20oO1P9ZRg
++fvHEQWIocvd9A9virzt5fOAw0iwcy9vp0ImADFtjktj+Po2A3/SF+ZVsw6ooUri
+tJxK2+dxbZshOn+fMZS1X9XCx4+bvPvpGTuFznsAKnKbWQybotoDupEaXZ9ZolUJ
+UUKAj1xOG0u2CQIDAQABo4HLMIHIMB0GA1UdDgQWBBSvn+izCC1i/5lpWlL6Dv4J
+mRsDvzAfBgNVHSMEGDAWgBRxrAbkZNaH7cQlnLTBR1VTpB3DkTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEB
-AAvqqB7wcGab4Eia+mI7gLCfQeNgNZy0bgwyF504crPeaUVpsUuHKuFoWda5A8SI
-fuB3Jj3FrVU/E7wTQg+cvvdwPhl5lju4EtaKogTSF+69eNvMn1SHJolhyfE+jy8Z
-VUkFwDWy6sTsmhHWiPJLrWgKMnVCQqBqUcsPYzIgSlmJ5flh7mOA4HED0Vjq1jEk
-Ee8DRAJ2hmeZpXEYqE6+/nhjIGexWh1SKkj7iu6Zr49XN0NnHFQA0FCMzhjg73vM
-4RPRzD/qPM7PB/xuSgmxHFRwpCFHXXB9tAQ+MFAdhiqmZz+9sMtX4CaBRcCahozm
-q9CHmgXuLMXrxsfAlGhKSCA=
+AJIUl3DifqK7KOcyK49tcywhyYRaUpQsnPX54ic5woF7dcas08qSYlWP9auowLy2
+UD/8oksc72Rqorhsx0WI3UU6YhyFmsOpkM3sJak94s5lGUPK5eb+5CMmwpkVBCNu
+UlearBx7z2HZ7anYjFzb7okxkQSMtpx87XshLtRRWYTxQGQMV997BymBX5b3QNcF
+KuGNTyx2KUozY4vErj0dnDd+4kxO8RfQzC2JYJ+nj+BRlY1/lJ8F+amm8LhWrXUj
+yiePk1zIOkQgo+1SkHyuI9j818+7UBhVXlaDzF+RlWLFL7ZOVUHcSzTNVFwB+i6r
+6H9X/sBwwADUJm5Hbmlte4o=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d3:ee:d0:8d:92:7d:ce:5f:4e:f2:0c:55:4d:bd:
-                    2f:b3:ff:6a:ab:2c:28:5e:c6:bd:49:ae:80:f0:e6:
-                    2c:30:e8:0a:e7:2b:3f:d7:1e:a8:6d:f1:c4:46:0e:
-                    f5:1d:3c:e1:05:5d:a9:91:69:57:43:22:33:bc:c1:
-                    18:6e:b1:48:1f:13:64:18:03:c1:63:14:97:21:5a:
-                    65:49:52:6a:57:9d:ad:7b:f6:06:6e:f0:af:a0:6d:
-                    2c:6d:53:9a:ad:82:56:2a:95:e1:a7:5a:a3:b4:77:
-                    c7:d7:97:39:73:c8:de:a8:19:09:ba:69:69:01:25:
-                    e6:68:e3:d0:5a:84:5d:3e:f0:8a:3b:c6:31:26:34:
-                    38:ed:8d:40:80:0f:5f:84:d7:e5:4f:24:ca:ff:c1:
-                    48:f5:74:3a:b3:1e:9f:b5:ef:bb:24:cb:91:f3:81:
-                    47:bd:80:eb:ef:dd:45:39:fd:d2:c3:be:3e:ba:e6:
-                    5b:09:e0:88:98:27:91:e5:9a:5b:88:d6:5e:17:7f:
-                    08:e2:2d:f4:3c:3f:08:54:7b:10:53:f4:7d:ef:67:
-                    04:6f:d6:74:08:d1:b9:03:2d:89:5d:ca:cf:de:3d:
-                    d0:e5:e2:e5:2a:7f:21:29:23:7e:b2:75:d9:ea:5c:
-                    73:45:7e:33:83:b6:62:5e:01:3b:dd:11:99:c7:c5:
-                    7b:65
+                    00:c8:77:60:23:34:2d:df:bf:ff:8f:8e:5f:df:c2:
+                    a9:b9:21:69:87:91:1d:ef:8c:e6:be:0b:46:ab:27:
+                    34:15:a1:a8:68:2f:73:76:da:8d:bc:d3:dd:43:0b:
+                    b4:aa:c3:e4:b2:6b:d3:c6:a8:d8:84:4d:41:a3:d1:
+                    d1:8c:7f:dc:3b:79:16:c5:f3:06:67:4f:aa:96:51:
+                    fd:02:f3:b8:16:57:f7:30:37:f4:78:78:5c:42:06:
+                    65:ba:d4:fa:e3:2c:db:fc:43:d8:64:e7:ca:c0:78:
+                    12:6c:6c:4e:47:bc:db:d4:e4:95:da:ab:74:c2:46:
+                    f6:94:ab:63:b2:89:6a:6b:05:25:c1:8a:a6:8a:ba:
+                    bd:a1:a6:2c:dc:0d:44:72:89:a6:2f:03:3c:c1:d9:
+                    de:21:1d:51:7c:46:e9:90:3e:cc:e3:82:35:69:73:
+                    24:c0:78:73:0d:7c:52:21:82:38:fa:89:dc:e8:fb:
+                    55:7d:52:9b:56:41:1a:24:7c:78:e5:aa:5a:41:67:
+                    26:83:4f:ce:44:14:a2:1f:f1:5d:c8:79:57:72:97:
+                    93:f8:d7:79:fe:11:64:6f:4e:e1:ea:fd:62:17:60:
+                    26:1e:1a:2b:63:50:6e:ab:b0:84:26:76:8d:7f:2e:
+                    b1:06:1d:72:cd:39:5c:e4:a8:77:ef:12:64:83:3c:
+                    00:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
             X509v3 Authority Key Identifier: 
-                keyid:60:B4:95:7F:EA:F1:29:B2:E9:9D:64:83:A9:C8:A3:49:6F:3E:18:53
+                keyid:71:AC:06:E4:64:D6:87:ED:C4:25:9C:B4:C1:47:55:53:A4:1D:C3:91
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         49:67:dc:58:22:e3:ee:0a:e8:1a:3d:38:1a:13:dd:d7:e0:45:
-         67:69:b1:44:49:e2:96:15:86:94:8b:d4:fb:8a:94:d5:22:39:
-         20:48:97:d2:09:a7:16:4b:40:f3:3c:37:3e:e8:81:28:08:cf:
-         4a:2c:3e:79:d0:0d:90:4d:63:a5:63:ce:24:75:03:41:7f:79:
-         17:3f:4d:df:60:98:a5:a3:c1:39:14:4b:7e:b7:0d:8a:9f:d6:
-         a4:0b:0c:34:c9:fe:3b:c0:89:9e:5e:27:3d:d8:3d:d5:28:46:
-         e4:b9:f5:28:39:b4:cf:1a:ea:fd:d3:14:bd:8b:87:78:35:80:
-         a1:bb:4e:59:cc:2a:f7:f7:40:bc:b7:75:cc:35:f5:3d:95:bb:
-         32:7a:0c:9d:67:c7:ff:b0:da:e6:05:e6:12:d5:1e:19:3c:69:
-         5d:d8:08:5e:bc:fe:df:ab:36:a4:70:3f:2c:6c:1c:8e:e3:f1:
-         0b:b3:22:e4:5b:fd:86:23:7a:bd:9b:b9:56:08:e3:a2:6d:2b:
-         e3:cb:42:93:6f:c8:5f:57:bd:66:41:51:8a:5d:4b:7e:0f:36:
-         82:61:8e:e0:4e:2c:9a:7a:45:e3:21:1c:b8:86:cf:a0:35:1b:
-         bf:55:36:86:05:1c:df:b0:e2:85:3b:a4:c7:7c:69:f9:56:b3:
-         20:28:e4:c2
+         ab:13:60:41:86:ba:d3:84:bf:7d:5b:e0:a6:56:24:c2:e2:ac:
+         4c:91:4c:cd:c5:81:c3:46:45:99:74:fb:c4:05:17:d0:68:e3:
+         32:fa:b1:ff:d8:21:67:a7:15:91:7f:a1:68:45:08:78:1a:5b:
+         d0:c2:47:72:93:98:1b:a1:b9:6a:ad:b9:a3:b0:1e:55:8f:b5:
+         03:2e:3f:04:01:fc:d0:c9:8a:c6:28:08:26:37:06:e5:a2:19:
+         90:37:2f:b8:e8:b5:56:16:27:32:a1:64:0c:23:29:86:e0:36:
+         4d:bc:ee:dd:e0:63:21:3a:89:07:31:63:20:06:33:1e:7a:1c:
+         99:25:e2:92:18:80:4a:0f:2c:cb:33:7a:54:20:9d:2a:d4:5f:
+         2c:23:0a:5c:6b:e3:50:a8:cd:c9:d4:07:7d:c0:22:e5:12:a0:
+         0e:b4:72:c5:93:76:64:b9:b9:37:9f:26:f8:99:0d:ad:c2:98:
+         89:a5:e1:d5:07:cf:43:01:3b:df:2d:ea:e4:fd:e7:f6:4e:bb:
+         d2:7c:30:2a:7b:4d:69:57:9b:61:3c:c7:94:d0:a9:de:0d:aa:
+         50:de:9f:13:42:2f:f5:f6:3a:c1:5e:86:2b:a0:e1:a0:fd:43:
+         8f:60:ed:ee:62:8c:23:e5:43:90:2e:fe:40:61:87:ea:9d:a0:
+         2d:e0:59:77
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANPu0I2Sfc5fTvIMVU29
-L7P/aqssKF7GvUmugPDmLDDoCucrP9ceqG3xxEYO9R084QVdqZFpV0MiM7zBGG6x
-SB8TZBgDwWMUlyFaZUlSaledrXv2Bm7wr6BtLG1Tmq2CViqV4adao7R3x9eXOXPI
-3qgZCbppaQEl5mjj0FqEXT7wijvGMSY0OO2NQIAPX4TX5U8kyv/BSPV0OrMen7Xv
-uyTLkfOBR72A6+/dRTn90sO+PrrmWwngiJgnkeWaW4jWXhd/COIt9Dw/CFR7EFP0
-fe9nBG/WdAjRuQMtiV3Kz9490OXi5Sp/ISkjfrJ12epcc0V+M4O2Yl4BO90RmcfF
-e2UCAwEAAaOByzCByDAdBgNVHQ4EFgQUYLSVf+rxKbLpnWSDqcijSW8+GFMwHwYD
-VR0jBBgwFoAUYLSVf+rxKbLpnWSDqcijSW8+GFMwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMh3YCM0Ld+//4+OX9/C
+qbkhaYeRHe+M5r4LRqsnNBWhqGgvc3bajbzT3UMLtKrD5LJr08ao2IRNQaPR0Yx/
+3Dt5FsXzBmdPqpZR/QLzuBZX9zA39Hh4XEIGZbrU+uMs2/xD2GTnysB4EmxsTke8
+29TkldqrdMJG9pSrY7KJamsFJcGKpoq6vaGmLNwNRHKJpi8DPMHZ3iEdUXxG6ZA+
+zOOCNWlzJMB4cw18UiGCOPqJ3Oj7VX1Sm1ZBGiR8eOWqWkFnJoNPzkQUoh/xXch5
+V3KXk/jXef4RZG9O4er9YhdgJh4aK2NQbquwhCZ2jX8usQYdcs05XOSod+8SZIM8
+AOkCAwEAAaOByzCByDAdBgNVHQ4EFgQUcawG5GTWh+3EJZy0wUdVU6Qdw5EwHwYD
+VR0jBBgwFoAUcawG5GTWh+3EJZy0wUdVU6Qdw5EwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBJZ9xYIuPu
-CugaPTgaE93X4EVnabFESeKWFYaUi9T7ipTVIjkgSJfSCacWS0DzPDc+6IEoCM9K
-LD550A2QTWOlY84kdQNBf3kXP03fYJilo8E5FEt+tw2Kn9akCww0yf47wImeXic9
-2D3VKEbkufUoObTPGur90xS9i4d4NYChu05ZzCr390C8t3XMNfU9lbsyegydZ8f/
-sNrmBeYS1R4ZPGld2AhevP7fqzakcD8sbByO4/ELsyLkW/2GI3q9m7lWCOOibSvj
-y0KTb8hfV71mQVGKXUt+DzaCYY7gTiyaekXjIRy4hs+gNRu/VTaGBRzfsOKFO6TH
-fGn5VrMgKOTC
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCrE2BBhrrT
+hL99W+CmViTC4qxMkUzNxYHDRkWZdPvEBRfQaOMy+rH/2CFnpxWRf6FoRQh4GlvQ
+wkdyk5gboblqrbmjsB5Vj7UDLj8EAfzQyYrGKAgmNwblohmQNy+46LVWFicyoWQM
+IymG4DZNvO7d4GMhOokHMWMgBjMeehyZJeKSGIBKDyzLM3pUIJ0q1F8sIwpca+NQ
+qM3J1Ad9wCLlEqAOtHLFk3Zkubk3nyb4mQ2twpiJpeHVB89DATvfLerk/ef2TrvS
+fDAqe01pV5thPMeU0KneDapQ3p8TQi/19jrBXoYroOGg/UOPYO3uYowj5UOQLv5A
+YYfqnaAt4Fl3
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unacceptable signature algorithm
 ERROR: VerifySignedData failed
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
index fb2dd14..4fec397 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:8a:82:ba:91:ca:1e:03:94:8f:9d:68:98:8b:
-                    95:3b:c1:e3:d1:5b:82:45:bf:72:24:cb:6f:de:91:
-                    2e:e3:49:ba:31:7b:57:db:90:36:32:e6:b4:41:8f:
-                    38:89:c6:6b:82:60:dc:98:e7:4b:06:55:41:db:9c:
-                    a8:e0:97:15:5a:3c:06:ac:37:89:f5:9b:65:b6:93:
-                    a7:2e:45:f3:b3:15:59:a7:6d:64:d5:cb:93:da:46:
-                    b1:97:8a:79:f6:48:4b:4c:18:d6:38:cf:55:5b:6b:
-                    78:c2:f5:f0:37:54:67:8d:90:43:81:ec:15:1e:e7:
-                    75:55:57:7e:6a:74:71:73:6d:b4:d5:37:b5:28:40:
-                    2e:6f:a6:64:b8:77:fd:2c:6c:25:2c:27:cf:db:fa:
-                    b4:c9:39:c2:d1:1e:e2:a1:73:bb:ec:81:dc:c3:ec:
-                    d0:a0:08:1e:81:53:88:51:d2:83:d2:ba:33:3f:79:
-                    1e:2a:6f:80:7b:21:d8:bb:80:93:68:ea:f4:a9:d5:
-                    88:b8:ac:0b:ff:90:bd:cc:8a:6b:e7:e5:27:47:d9:
-                    a0:68:5d:38:3c:b0:a3:4a:ae:5a:d9:a6:f8:51:61:
-                    28:fb:21:5c:01:aa:72:76:60:f6:e0:88:a1:44:b5:
-                    fa:85:27:45:67:0f:c6:b1:11:00:81:23:3c:aa:a1:
-                    58:65
+                    00:ca:ea:47:99:a6:75:27:44:09:a0:41:3f:98:17:
+                    a1:8e:92:08:76:19:9a:6e:2b:f9:4b:1c:80:d3:f7:
+                    db:1f:50:39:95:fb:de:4d:31:e6:d8:32:42:5c:ea:
+                    28:1a:f0:a2:ef:b0:22:5e:be:14:fb:ea:ec:74:3c:
+                    98:46:67:6b:ff:78:01:37:15:7c:f1:dd:4e:f8:29:
+                    6f:9a:60:08:f6:e1:59:46:87:23:5a:3c:3c:93:55:
+                    86:92:68:f6:0f:1f:da:82:c1:38:c8:e5:55:2b:f7:
+                    44:06:4c:ff:04:bc:3b:8c:ac:5f:d8:54:7d:e3:aa:
+                    87:84:0b:64:df:16:38:fb:92:3a:03:0d:40:be:c0:
+                    f4:04:da:25:87:a2:46:be:56:19:21:1a:d2:6c:82:
+                    c8:22:e7:fb:8f:47:29:95:34:e8:6f:3a:f3:fd:8f:
+                    9f:5f:41:0d:40:0b:5c:52:9e:e1:21:eb:e9:dc:a9:
+                    96:42:f5:b2:76:40:b3:a2:f4:e3:c1:99:e6:50:57:
+                    52:ee:f9:7f:80:38:26:85:7c:69:34:f1:b7:af:88:
+                    ee:ef:37:58:81:5c:27:4c:f9:5e:60:01:11:44:48:
+                    38:6c:d7:5e:d3:e2:9c:2e:3f:f0:4c:29:54:82:f3:
+                    22:4d:8a:f2:d9:e0:d8:29:99:93:a5:af:ff:f3:88:
+                    49:93
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                94:30:C8:2B:C4:EC:EB:81:5B:D2:2B:62:ED:34:29:BB:3C:40:FD:4B
+                24:0E:D5:1E:5E:24:19:82:7B:4D:68:8C:DC:D9:B1:06:14:2A:E9:D4
             X509v3 Authority Key Identifier: 
-                keyid:C8:5D:13:08:EB:15:BB:7B:35:8E:74:DF:D3:C3:55:51:78:E1:4A:D3
+                keyid:B8:39:FE:EF:FE:00:23:8B:C4:1B:5F:9E:7E:E8:DB:35:A5:7A:76:EE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         ca:46:c4:08:c9:4e:1b:3f:96:fd:d7:9c:89:d6:ea:7f:76:53:
-         ac:03:55:eb:9a:d5:86:f8:66:cd:39:54:f0:7b:d1:74:62:83:
-         c7:58:46:b1:ad:da:b7:fd:03:94:3b:b8:a5:4a:01:45:53:2c:
-         c6:ae:55:52:08:78:de:66:49:a0:40:eb:7d:43:03:00:46:03:
-         1d:6d:c5:83:57:f6:92:a5:c6:04:76:f1:de:bf:ec:90:8b:3b:
-         99:70:80:41:10:93:07:2c:eb:cd:5b:b5:e6:12:76:41:db:81:
-         ab:f5:6a:a5:e4:67:45:39:fa:14:bf:0d:e7:e4:a9:f3:9a:57:
-         4c:20:4e:68:fd:1a:35:00:66:b7:c6:fd:2f:14:db:7b:28:3a:
-         59:31:5a:9d:96:d1:2e:27:d1:7a:c3:eb:b4:28:f1:e2:9a:d1:
-         1d:be:6b:9d:81:4e:4c:7f:5d:fe:5f:20:8f:bb:f0:85:ee:bb:
-         2d:66:40:bb:ec:40:c1:51:4f:f9:1d:24:4e:64:ad:64:1c:e5:
-         68:3f:cb:b2:6c:c5:82:c9:e7:5d:7d:73:8d:ec:d9:b7:af:06:
-         71:53:92:dd:aa:23:28:38:f0:06:d6:64:cb:f5:ac:f2:4c:e2:
-         5a:55:c3:a6:d7:7e:32:21:19:54:c4:aa:cd:21:60:fd:b7:45:
-         81:a1:53:ae
+         8e:7f:b5:2e:04:f9:3e:c9:a4:25:9d:7a:d7:20:49:61:8a:3b:
+         f8:3f:6f:02:0b:66:e6:b9:16:3d:93:c6:72:04:17:ef:63:4f:
+         f4:8e:a9:fd:8b:da:9b:4b:48:1e:c6:a0:89:1e:6c:e1:b6:4b:
+         f9:27:5d:94:c7:c3:54:aa:a6:85:78:d3:f7:38:ad:d9:a3:ef:
+         c2:39:46:47:04:d0:86:5f:dc:2d:03:8d:f1:3d:94:a2:82:6a:
+         0f:33:29:b0:02:0f:99:3d:c9:ac:aa:67:cc:ae:b3:91:98:f3:
+         fe:36:7c:88:47:28:23:7a:d1:95:db:8e:03:7a:7c:48:e4:4f:
+         55:55:76:d0:c9:f5:fd:ea:1b:7f:ac:6e:b3:25:be:53:10:65:
+         63:09:16:3b:a0:c1:f0:4f:42:1c:7a:03:34:96:63:40:05:33:
+         2a:05:06:78:52:2a:6c:e6:87:87:c6:2a:a5:1d:4c:fd:4d:37:
+         ed:43:80:fd:34:04:98:ec:01:17:7a:71:9b:a1:37:af:fd:53:
+         42:9f:5c:80:98:96:f5:78:d7:80:20:ca:f1:67:4c:d7:ed:a5:
+         ed:1b:96:df:d6:19:6e:5c:fc:bb:07:b1:93:0e:5c:a5:a4:a8:
+         be:1a:0a:d8:20:c2:b0:a4:a5:b4:14:30:e0:b1:9d:97:89:00:
+         cd:ca:cd:6b
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHioK6
-kcoeA5SPnWiYi5U7wePRW4JFv3Iky2/ekS7jSboxe1fbkDYy5rRBjziJxmuCYNyY
-50sGVUHbnKjglxVaPAasN4n1m2W2k6cuRfOzFVmnbWTVy5PaRrGXinn2SEtMGNY4
-z1Vba3jC9fA3VGeNkEOB7BUe53VVV35qdHFzbbTVN7UoQC5vpmS4d/0sbCUsJ8/b
-+rTJOcLRHuKhc7vsgdzD7NCgCB6BU4hR0oPSujM/eR4qb4B7Idi7gJNo6vSp1Yi4
-rAv/kL3Mimvn5SdH2aBoXTg8sKNKrlrZpvhRYSj7IVwBqnJ2YPbgiKFEtfqFJ0Vn
-D8axEQCBIzyqoVhlAgMBAAGjgekwgeYwHQYDVR0OBBYEFJQwyCvE7OuBW9IrYu00
-Kbs8QP1LMB8GA1UdIwQYMBaAFMhdEwjrFbt7NY5039PDVVF44UrTMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDK6keZ
+pnUnRAmgQT+YF6GOkgh2GZpuK/lLHIDT99sfUDmV+95NMebYMkJc6iga8KLvsCJe
+vhT76ux0PJhGZ2v/eAE3FXzx3U74KW+aYAj24VlGhyNaPDyTVYaSaPYPH9qCwTjI
+5VUr90QGTP8EvDuMrF/YVH3jqoeEC2TfFjj7kjoDDUC+wPQE2iWHoka+VhkhGtJs
+gsgi5/uPRymVNOhvOvP9j59fQQ1AC1xSnuEh6+ncqZZC9bJ2QLOi9OPBmeZQV1Lu
++X+AOCaFfGk08beviO7vN1iBXCdM+V5gARFESDhs117T4pwuP/BMKVSC8yJNivLZ
+4NgpmZOlr//ziEmTAgMBAAGjgekwgeYwHQYDVR0OBBYEFCQO1R5eJBmCe01ojNzZ
+sQYUKunUMB8GA1UdIwQYMBaAFLg5/u/+ACOLxBtfnn7o2zWlenbuMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAykbECMlOGz+W/decidbq
-f3ZTrANV65rVhvhmzTlU8HvRdGKDx1hGsa3at/0DlDu4pUoBRVMsxq5VUgh43mZJ
-oEDrfUMDAEYDHW3Fg1f2kqXGBHbx3r/skIs7mXCAQRCTByzrzVu15hJ2QduBq/Vq
-peRnRTn6FL8N5+Sp85pXTCBOaP0aNQBmt8b9LxTbeyg6WTFanZbRLifResPrtCjx
-4prRHb5rnYFOTH9d/l8gj7vwhe67LWZAu+xAwVFP+R0kTmStZBzlaD/LsmzFgsnn
-XX1zjezZt68GcVOS3aojKDjwBtZky/Ws8kziWlXDptd+MiEZVMSqzSFg/bdFgaFT
-rg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjn+1LgT5PsmkJZ161yBJ
+YYo7+D9vAgtm5rkWPZPGcgQX72NP9I6p/Yvam0tIHsagiR5s4bZL+SddlMfDVKqm
+hXjT9zit2aPvwjlGRwTQhl/cLQON8T2UooJqDzMpsAIPmT3JrKpnzK6zkZjz/jZ8
+iEcoI3rRlduOA3p8SORPVVV20Mn1/eobf6xusyW+UxBlYwkWO6DB8E9CHHoDNJZj
+QAUzKgUGeFIqbOaHh8YqpR1M/U037UOA/TQEmOwBF3pxm6E3r/1TQp9cgJiW9XjX
+gCDK8WdM1+2l7RuW39YZblz8uwexkw5cpaSovhoK2CDCsKSltBQw4LGdl4kAzcrN
+aw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:da:1c:0d:74:40:2d:01:10:9c:e0:0c:aa:01:c7:
-                    ed:a4:03:b5:a0:b0:1d:c0:70:70:9a:76:6d:5d:4d:
-                    16:ed:39:87:76:43:e1:c1:3f:b9:f8:20:63:40:02:
-                    d4:0f:f4:f5:4a:97:eb:46:ad:8c:29:cb:45:a7:33:
-                    16:b0:10:b3:bc:f6:9e:fb:e6:61:d5:7d:43:ce:27:
-                    43:ae:4f:b1:d1:47:6b:13:e5:20:66:09:b9:10:83:
-                    a3:d4:40:6d:cc:fb:cb:28:1e:6e:bc:75:46:7b:9d:
-                    f9:b4:5f:c9:43:24:d6:d7:c1:a8:6b:d6:52:1e:6d:
-                    9d:89:d6:41:eb:9f:db:32:e3:05:21:b1:b7:77:78:
-                    e1:d4:f9:95:c5:84:63:91:88:ce:31:66:2c:51:89:
-                    f3:a4:a3:0d:11:b2:a2:45:fd:59:1b:09:a9:bc:48:
-                    38:0d:25:c7:dd:c9:6a:15:5f:c5:5f:60:5e:c0:28:
-                    5d:19:ff:51:17:86:ea:b5:56:f6:1e:cc:ee:80:93:
-                    f2:82:7b:2f:fa:96:1f:4b:15:b0:34:23:81:bb:b9:
-                    a4:83:1a:2f:e0:6d:ee:48:96:4d:f1:7b:09:3e:1f:
-                    43:c6:76:8f:56:fd:1e:5f:21:6f:6f:49:b0:94:fa:
-                    c9:be:76:61:f6:f8:51:72:40:99:d5:f2:f6:09:f7:
-                    d9:8b
+                    00:de:2c:50:a5:d0:e9:9c:e2:1c:45:e9:e8:75:5a:
+                    b9:40:38:3d:8c:c7:48:82:7f:1e:84:6a:0d:2b:f9:
+                    1a:69:fd:e1:14:2e:5b:09:98:a5:c9:58:5e:b2:2f:
+                    98:3e:d7:a2:e4:d6:44:20:32:6f:e5:d9:20:86:47:
+                    86:e5:f5:00:66:39:73:ec:0d:e8:8e:7d:4e:e5:01:
+                    00:35:1b:e6:ed:ff:49:3d:4b:b1:11:9d:cf:b7:b9:
+                    f2:f6:7c:5f:13:a5:48:58:8a:c2:0a:62:9d:20:6b:
+                    2f:77:13:a6:a3:18:86:0e:16:79:72:e6:e7:14:70:
+                    1b:3c:5f:7d:18:73:a8:38:fd:88:86:74:ba:d5:c8:
+                    8b:80:41:c4:59:6c:b5:51:3b:c0:83:be:b7:b4:05:
+                    17:9a:58:6d:11:61:9e:97:89:56:47:8a:97:13:21:
+                    4e:46:14:4f:db:5c:b7:12:bc:33:94:2a:a5:24:d5:
+                    43:05:db:1c:11:e2:e2:7d:21:25:b8:21:a9:4d:59:
+                    48:77:e1:1e:73:3a:9e:7e:ea:16:25:1b:bb:63:01:
+                    b3:2f:6b:99:59:2b:d6:e7:c9:13:d1:4a:87:75:79:
+                    d5:a5:1a:fa:7a:e2:53:b6:55:58:ce:e2:e4:a7:1f:
+                    78:a4:cb:08:a2:7a:99:e6:30:83:97:68:6c:a8:b3:
+                    37:05
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C8:5D:13:08:EB:15:BB:7B:35:8E:74:DF:D3:C3:55:51:78:E1:4A:D3
+                B8:39:FE:EF:FE:00:23:8B:C4:1B:5F:9E:7E:E8:DB:35:A5:7A:76:EE
             X509v3 Authority Key Identifier: 
-                keyid:3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                keyid:5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             1.2.3.4: critical
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         dc:d2:aa:62:74:fa:cf:eb:4f:b3:cd:aa:a9:52:b0:fe:7a:0d:
-         96:e4:07:8f:b6:d4:6d:ad:33:a6:4e:ad:2f:a5:ff:83:a0:75:
-         d1:ed:fc:c0:80:a6:73:73:49:6d:0d:3f:84:b5:d4:cf:07:74:
-         3e:aa:bf:38:59:e4:fa:b6:d2:45:07:b3:a6:0b:b0:43:47:03:
-         7e:45:c1:7b:f1:84:10:c3:0b:d7:2f:c9:be:ff:96:da:1b:4b:
-         cb:fa:05:ca:22:d2:e4:f0:f7:32:91:4f:95:05:6c:5d:be:6c:
-         64:7b:cb:6d:a1:a9:d0:9c:5b:1d:3a:bd:4a:50:69:e2:06:fa:
-         89:2b:3b:2e:12:f6:3f:d7:79:f1:36:ec:e3:6c:12:67:b2:a3:
-         b0:89:16:8c:2c:02:04:0d:89:e1:ca:69:d0:86:7e:fd:14:9d:
-         c8:ef:06:42:fc:46:b9:88:25:e2:b5:b7:8a:6b:ab:d6:1f:ec:
-         d1:12:b3:28:cd:9e:9f:56:8d:7c:49:6c:06:96:93:66:25:43:
-         b0:76:b0:9a:59:f8:9c:35:29:8c:db:a7:74:d7:ac:e7:99:ea:
-         11:34:0b:6f:cf:bb:5e:28:2a:ab:9a:13:83:44:d7:01:3c:61:
-         c8:10:dd:0d:ef:66:3d:be:ee:72:70:d3:27:a2:b0:f7:f1:bc:
-         50:e1:ac:3e
+         11:21:3f:43:4f:cc:37:a7:71:ca:a6:d1:ce:4f:78:b4:f5:af:
+         4e:31:b7:d7:81:3b:67:19:35:eb:b1:49:d8:39:2d:e7:6f:45:
+         db:91:a2:da:ed:cd:46:4b:62:3e:f2:26:7a:ee:69:8b:81:ab:
+         f0:11:08:72:89:eb:28:57:bd:83:b2:71:05:28:f1:5d:22:5b:
+         13:e4:3f:94:c8:28:0f:50:66:77:f9:f2:a6:08:22:38:e7:b9:
+         49:19:ee:62:58:32:32:79:06:b1:d9:4c:65:ac:df:70:b0:d4:
+         34:31:a4:8d:43:35:1e:3e:42:77:0c:e1:1c:b5:08:e7:22:39:
+         98:b3:88:42:05:f6:6d:03:bc:8b:3c:f0:84:9b:17:e5:84:1a:
+         8d:1f:9a:63:94:e0:12:7a:25:34:e4:3d:7d:76:58:ca:f4:a3:
+         e6:11:33:21:06:8c:7e:91:83:e4:ce:17:0a:59:37:9d:c9:85:
+         fd:0b:06:62:aa:db:a1:a7:01:df:77:a4:7b:0b:b7:d5:1c:b9:
+         57:ad:ab:ce:fa:74:52:09:3b:2d:f2:d2:12:bf:e1:3b:7b:e7:
+         c3:4b:db:eb:23:77:d0:59:93:cc:de:81:5c:48:da:c2:ea:ed:
+         63:92:bc:af:26:80:3f:3e:69:3e:23:53:35:ff:87:43:7f:2b:
+         f0:5e:23:b8
 -----BEGIN CERTIFICATE-----
 MIIDfTCCAmWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2hwNdEAt
-ARCc4AyqAcftpAO1oLAdwHBwmnZtXU0W7TmHdkPhwT+5+CBjQALUD/T1SpfrRq2M
-KctFpzMWsBCzvPae++Zh1X1DzidDrk+x0UdrE+UgZgm5EIOj1EBtzPvLKB5uvHVG
-e535tF/JQyTW18Goa9ZSHm2didZB65/bMuMFIbG3d3jh1PmVxYRjkYjOMWYsUYnz
-pKMNEbKiRf1ZGwmpvEg4DSXH3clqFV/FX2BewChdGf9RF4bqtVb2HszugJPygnsv
-+pYfSxWwNCOBu7mkgxov4G3uSJZN8XsJPh9DxnaPVv0eXyFvb0mwlPrJvnZh9vhR
-ckCZ1fL2CffZiwIDAQABo4HbMIHYMB0GA1UdDgQWBBTIXRMI6xW7ezWOdN/Tw1VR
-eOFK0zAfBgNVHSMEGDAWgBQ/s6oT4YaWs+ONIOy+cHHQG/hnmjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ixQpdDp
+nOIcRenodVq5QDg9jMdIgn8ehGoNK/kaaf3hFC5bCZilyVhesi+YPtei5NZEIDJv
+5dkghkeG5fUAZjlz7A3ojn1O5QEANRvm7f9JPUuxEZ3Pt7ny9nxfE6VIWIrCCmKd
+IGsvdxOmoxiGDhZ5cubnFHAbPF99GHOoOP2IhnS61ciLgEHEWWy1UTvAg763tAUX
+mlhtEWGel4lWR4qXEyFORhRP21y3ErwzlCqlJNVDBdscEeLifSEluCGpTVlId+Ee
+czqefuoWJRu7YwGzL2uZWSvW58kT0UqHdXnVpRr6euJTtlVYzuLkpx94pMsIonqZ
+5jCDl2hsqLM3BQIDAQABo4HbMIHYMB0GA1UdDgQWBBS4Of7v/gAji8QbX55+6Ns1
+pXp27jAfBgNVHSMEGDAWgBRcgOH9nCrX4hUVHiKg/DmEuKILQjA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDKgMEAQH/BAQBAgMEMA0G
-CSqGSIb3DQEBCwUAA4IBAQDc0qpidPrP60+zzaqpUrD+eg2W5AePttRtrTOmTq0v
-pf+DoHXR7fzAgKZzc0ltDT+EtdTPB3Q+qr84WeT6ttJFB7OmC7BDRwN+RcF78YQQ
-wwvXL8m+/5baG0vL+gXKItLk8PcykU+VBWxdvmxke8ttoanQnFsdOr1KUGniBvqJ
-KzsuEvY/13nxNuzjbBJnsqOwiRaMLAIEDYnhymnQhn79FJ3I7wZC/Ea5iCXitbeK
-a6vWH+zRErMozZ6fVo18SWwGlpNmJUOwdrCaWficNSmM26d016znmeoRNAtvz7te
-KCqrmhODRNcBPGHIEN0N72Y9vu5ycNMnorD38bxQ4aw+
+CSqGSIb3DQEBCwUAA4IBAQARIT9DT8w3p3HKptHOT3i09a9OMbfXgTtnGTXrsUnY
+OS3nb0XbkaLa7c1GS2I+8iZ67mmLgavwEQhyiesoV72DsnEFKPFdIlsT5D+UyCgP
+UGZ3+fKmCCI457lJGe5iWDIyeQax2UxlrN9wsNQ0MaSNQzUePkJ3DOEctQjnIjmY
+s4hCBfZtA7yLPPCEmxflhBqNH5pjlOASeiU05D19dljK9KPmETMhBox+kYPkzhcK
+WTedyYX9CwZiqtuhpwHfd6R7C7fVHLlXravO+nRSCTst8tISv+E7e+fDS9vrI3fQ
+WZPM3oFcSNrC6u1jkryvJoA/Pmk+I1M1/4dDfyvwXiO4
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e7:de:8d:6f:81:af:35:2d:99:eb:62:b4:41:d8:
-                    dd:55:5f:5a:12:02:46:8f:41:14:fe:f5:b0:32:ab:
-                    fa:96:2a:e2:ba:e6:3a:1d:89:80:8f:20:6a:40:4a:
-                    5f:97:d3:5d:7f:e8:eb:26:f1:f9:1b:a2:a7:cd:54:
-                    c0:d9:64:77:dc:ba:90:a4:b7:86:3f:8c:72:c2:ad:
-                    96:6c:f0:c0:30:d8:e0:71:f5:ff:f3:8c:18:34:3a:
-                    07:b2:79:32:92:91:d4:51:95:c4:bb:62:78:2e:30:
-                    f8:b5:f1:91:26:9a:28:07:27:cc:57:d5:a2:1c:e9:
-                    20:ac:fa:3d:db:3b:70:81:17:3d:4b:54:a8:fe:2f:
-                    18:f7:7f:de:cb:4f:ec:70:c8:fa:a9:ed:64:41:36:
-                    c2:74:a7:dd:e6:27:2b:af:79:ce:76:86:57:3a:2c:
-                    d9:52:b8:bf:87:de:f1:5e:80:81:70:10:78:e7:89:
-                    0a:d1:14:74:f4:f0:93:cf:89:68:66:8f:d4:2a:8a:
-                    c8:ff:96:fb:f6:cc:ee:dd:a6:62:f0:73:43:a6:29:
-                    7a:51:7e:63:e1:8f:d9:83:10:23:ed:1b:d4:26:2d:
-                    40:62:c5:ed:c5:af:4f:d9:9b:87:5b:3a:7e:2c:43:
-                    59:e3:f4:91:2f:ab:d0:04:a3:5e:da:ac:b0:c1:e2:
-                    15:99
+                    00:e1:06:5e:f4:68:1b:03:b0:84:e4:7d:b2:55:05:
+                    ea:8b:e3:9b:fc:bd:7d:c4:6c:33:39:59:11:1e:46:
+                    95:aa:07:6b:81:59:d4:0d:8c:d7:0e:c2:1e:4d:0b:
+                    86:32:ab:7c:c3:d9:8e:a9:31:87:4e:9b:2a:02:49:
+                    66:40:75:c2:44:c2:74:dc:12:86:ad:3a:8f:62:f9:
+                    6f:87:6b:33:98:ab:72:d8:26:c1:fb:51:64:85:63:
+                    fd:b1:79:d7:a1:e8:da:1c:57:21:ce:9b:ba:0b:c2:
+                    d4:e3:7b:b6:58:89:97:12:5d:4c:a4:81:34:42:e7:
+                    3b:85:0c:13:98:0b:63:44:99:95:e8:8e:bc:1a:33:
+                    b8:c0:d0:5f:b1:f3:0a:a6:3c:c2:a0:00:c1:9b:16:
+                    1c:84:55:6b:f2:fc:fe:74:40:8d:43:6f:61:29:05:
+                    e3:01:41:06:37:cc:65:9b:be:f5:88:2c:c8:31:5a:
+                    0a:5b:55:13:4d:1b:3f:03:85:c1:f4:7d:45:0c:50:
+                    d5:4a:65:34:ea:06:fa:44:20:01:e4:16:64:4d:13:
+                    35:6c:6d:18:5b:36:0a:de:3c:03:a9:f2:9e:fd:51:
+                    6f:f9:dc:dc:9d:f7:25:ff:a8:b6:1a:80:2b:df:9f:
+                    e3:22:ae:5c:4b:6b:d1:e0:fe:6c:87:18:93:92:d6:
+                    42:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
             X509v3 Authority Key Identifier: 
-                keyid:3F:B3:AA:13:E1:86:96:B3:E3:8D:20:EC:BE:70:71:D0:1B:F8:67:9A
+                keyid:5C:80:E1:FD:9C:2A:D7:E2:15:15:1E:22:A0:FC:39:84:B8:A2:0B:42
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         84:9a:7d:63:f9:44:d8:2c:4e:b0:24:86:af:0c:ba:0e:29:33:
-         67:68:7d:a2:1d:46:99:b0:fb:9d:65:69:da:f8:46:67:d9:c4:
-         30:72:eb:57:79:4a:e8:2d:7b:57:d4:c2:18:13:19:d1:36:8c:
-         45:9f:49:1e:a6:83:c5:41:41:fd:29:ac:a0:12:c7:0f:6e:a6:
-         45:70:64:c3:9d:b0:22:2e:ed:c0:8d:6c:68:c0:94:d9:ba:e0:
-         2f:5a:1c:29:ed:d0:d6:ec:0e:bb:41:ce:1e:e3:93:c4:85:80:
-         aa:a1:67:31:76:80:24:a4:70:ec:f3:6e:a3:63:8c:71:fd:38:
-         65:1f:56:e9:75:74:15:3c:69:f3:e3:d3:9d:9a:9c:7d:f6:00:
-         71:98:61:68:13:7c:23:79:e1:84:68:a6:3d:ce:19:1c:0a:62:
-         48:d9:f9:4c:92:ff:b7:5b:e8:1d:e4:66:00:50:4d:38:c8:3a:
-         e3:e1:8e:ae:aa:32:30:65:78:25:b3:d0:eb:4f:de:ab:9d:51:
-         40:7e:6f:d4:15:87:cf:41:7d:be:3d:32:45:a2:f1:a8:7c:11:
-         97:90:a4:ea:d8:aa:c2:b7:08:34:a3:62:23:4b:a5:e3:9e:4d:
-         90:7f:d7:4c:dc:4f:c8:ac:b2:b6:de:42:fd:05:98:f6:33:90:
-         54:c3:6a:3f
+         da:f3:43:e6:bf:67:83:9c:dc:b5:9e:20:9e:4a:93:97:3b:cc:
+         e2:27:20:20:53:e3:6c:60:40:35:5f:13:3e:5b:8e:a8:a2:62:
+         90:5a:25:ab:fe:27:02:93:4f:c3:9e:31:82:f2:56:c1:4d:8c:
+         6a:14:ca:63:4c:51:2c:6d:4d:fa:62:64:45:5b:64:5d:19:d3:
+         cc:17:d1:a8:f1:22:d7:62:c0:00:b4:39:fd:fc:81:24:dd:fe:
+         cf:35:8e:74:47:76:7c:9c:0d:56:bc:7b:10:1f:09:07:f6:98:
+         25:1b:ce:f0:bf:ce:1a:81:d1:1e:bc:c9:11:67:8c:eb:1a:9b:
+         6a:13:5b:f5:a5:55:36:2e:cd:1f:d8:4b:0f:23:45:2f:27:fd:
+         06:5e:20:c8:ff:16:65:90:3f:b7:f0:13:1b:af:f4:fc:ac:65:
+         8a:97:21:23:6b:94:de:74:d5:35:6f:f7:0e:98:e1:c7:df:1b:
+         e5:20:89:39:3c:f5:cc:a5:af:1a:bf:ba:af:01:bb:6f:86:5b:
+         8e:47:2e:91:91:b3:7c:06:17:18:1a:dd:21:a4:14:07:8c:d8:
+         17:42:ec:ae:21:46:ce:56:37:f5:7d:ba:75:4b:f9:1c:59:53:
+         d7:2d:d0:be:2a:b8:ed:75:0a:02:a6:ed:b3:24:14:73:7b:9a:
+         ad:2e:f9:cd
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOfejW+BrzUtmetitEHY
-3VVfWhICRo9BFP71sDKr+pYq4rrmOh2JgI8gakBKX5fTXX/o6ybx+Ruip81UwNlk
-d9y6kKS3hj+McsKtlmzwwDDY4HH1//OMGDQ6B7J5MpKR1FGVxLtieC4w+LXxkSaa
-KAcnzFfVohzpIKz6Pds7cIEXPUtUqP4vGPd/3stP7HDI+qntZEE2wnSn3eYnK695
-znaGVzos2VK4v4fe8V6AgXAQeOeJCtEUdPTwk8+JaGaP1CqKyP+W+/bM7t2mYvBz
-Q6YpelF+Y+GP2YMQI+0b1CYtQGLF7cWvT9mbh1s6fixDWeP0kS+r0ASjXtqssMHi
-FZkCAwEAAaOByzCByDAdBgNVHQ4EFgQUP7OqE+GGlrPjjSDsvnBx0Bv4Z5owHwYD
-VR0jBBgwFoAUP7OqE+GGlrPjjSDsvnBx0Bv4Z5owNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOEGXvRoGwOwhOR9slUF
+6ovjm/y9fcRsMzlZER5GlaoHa4FZ1A2M1w7CHk0LhjKrfMPZjqkxh06bKgJJZkB1
+wkTCdNwShq06j2L5b4drM5irctgmwftRZIVj/bF516Ho2hxXIc6bugvC1ON7tliJ
+lxJdTKSBNELnO4UME5gLY0SZleiOvBozuMDQX7HzCqY8wqAAwZsWHIRVa/L8/nRA
+jUNvYSkF4wFBBjfMZZu+9YgsyDFaCltVE00bPwOFwfR9RQxQ1UplNOoG+kQgAeQW
+ZE0TNWxtGFs2Ct48A6nynv1Rb/nc3J33Jf+othqAK9+f4yKuXEtr0eD+bIcYk5LW
+QhMCAwEAAaOByzCByDAdBgNVHQ4EFgQUXIDh/Zwq1+IVFR4ioPw5hLiiC0IwHwYD
+VR0jBBgwFoAUXIDh/Zwq1+IVFR4ioPw5hLiiC0IwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCEmn1j+UTY
-LE6wJIavDLoOKTNnaH2iHUaZsPudZWna+EZn2cQwcutXeUroLXtX1MIYExnRNoxF
-n0kepoPFQUH9KaygEscPbqZFcGTDnbAiLu3AjWxowJTZuuAvWhwp7dDW7A67Qc4e
-45PEhYCqoWcxdoAkpHDs826jY4xx/ThlH1bpdXQVPGnz49Odmpx99gBxmGFoE3wj
-eeGEaKY9zhkcCmJI2flMkv+3W+gd5GYAUE04yDrj4Y6uqjIwZXgls9DrT96rnVFA
-fm/UFYfPQX2+PTJFovGofBGXkKTq2KrCtwg0o2IjS6Xjnk2Qf9dM3E/IrLK23kL9
-BZj2M5BUw2o/
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDa80Pmv2eD
+nNy1niCeSpOXO8ziJyAgU+NsYEA1XxM+W46oomKQWiWr/icCk0/DnjGC8lbBTYxq
+FMpjTFEsbU36YmRFW2RdGdPMF9Go8SLXYsAAtDn9/IEk3f7PNY50R3Z8nA1WvHsQ
+HwkH9pglG87wv84agdEevMkRZ4zrGptqE1v1pVU2Ls0f2EsPI0UvJ/0GXiDI/xZl
+kD+38BMbr/T8rGWKlyEja5TedNU1b/cOmOHH3xvlIIk5PPXMpa8av7qvAbtvhluO
+Ry6RkbN8BhcYGt0hpBQHjNgXQuyuIUbOVjf1fbp1S/kcWVPXLdC+KrjtdQoCpu2z
+JBRze5qtLvnN
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -285,6 +285,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate) -----
 ERROR: Unconsumed critical extension
   oid: 2A0304
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
index 7c4e664..a3ca96c 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b6:04:af:e9:58:68:65:f6:6e:cd:e3:fe:93:35:
-                    d3:c0:06:53:75:df:15:59:23:d3:fd:42:8c:36:a1:
-                    df:6b:35:3f:7d:63:57:e4:17:d9:2a:63:77:7f:d6:
-                    f5:b0:85:00:70:ab:f9:5e:f3:00:4d:0f:5e:28:b8:
-                    56:7b:15:f1:4e:eb:32:e0:bf:e4:83:2b:49:ff:ac:
-                    3e:09:38:40:75:73:11:ee:0c:8c:d9:e6:c6:d2:44:
-                    ce:99:74:78:8b:90:19:b5:32:75:45:ba:e0:76:55:
-                    5f:c9:44:27:e2:91:8e:9a:21:aa:3d:be:e7:cf:1e:
-                    af:08:4b:b0:cc:03:b8:c6:2b:92:ae:d6:1e:61:fa:
-                    18:4e:b5:98:cc:0b:55:16:77:4c:9c:26:99:0f:3b:
-                    91:22:87:19:36:b9:4f:72:c9:40:bb:d0:2b:8e:d7:
-                    c3:1b:eb:2e:e4:82:a8:0e:7d:45:a1:c7:6a:e9:db:
-                    d2:f7:30:9b:ad:4f:a7:04:17:2b:78:85:15:1a:8f:
-                    f1:77:6c:51:c0:a8:fc:53:70:f0:32:8c:86:09:8b:
-                    00:9c:3f:32:ff:cc:86:4f:4c:32:6a:f9:53:5d:36:
-                    f9:55:34:8c:e4:0e:56:af:bf:f6:92:25:8a:4e:d5:
-                    66:53:66:7b:b0:16:08:04:d2:56:de:c6:b0:75:2c:
-                    b5:d5
+                    00:bb:61:26:8a:b1:15:f2:75:3f:ed:47:c0:92:9c:
+                    f2:65:a2:16:a8:21:d9:bb:40:3a:1c:a0:ce:3b:94:
+                    44:6b:c2:5f:4b:f5:ae:84:f6:25:ee:6b:f6:3b:38:
+                    e7:0d:f9:e8:3f:d0:48:27:ba:53:31:7d:41:a6:89:
+                    36:d4:42:27:44:8f:88:af:5b:67:92:47:1b:d3:b3:
+                    a0:16:e5:a9:b4:1c:aa:19:cf:ae:8b:30:e5:e2:05:
+                    d2:c6:e4:72:09:f3:da:56:7e:0e:64:17:ba:dc:65:
+                    6d:4d:17:ae:35:9e:fa:54:5e:be:a7:09:63:53:3b:
+                    ea:71:f9:35:e0:b2:c8:0b:3b:62:e9:1e:b4:6d:2a:
+                    fa:9e:5c:7e:9d:f5:cf:1b:96:15:4b:1e:ca:d5:73:
+                    82:07:a9:fb:dc:e5:38:79:60:ed:ca:3c:4b:9a:ce:
+                    78:78:c8:76:c0:e0:6b:f4:7a:2d:ac:12:12:75:2d:
+                    e4:1c:99:01:ae:34:b5:f7:8f:7d:2e:29:fa:b5:dd:
+                    79:8f:9e:e4:1d:9f:74:93:0e:94:e8:f1:9e:59:ae:
+                    f4:3b:a4:ca:0a:c1:1f:34:03:e5:0d:2b:cc:3e:2c:
+                    dd:4c:dc:1d:7b:2d:a6:58:1a:bb:f8:86:23:92:0f:
+                    df:b7:b1:78:bb:42:d9:f6:4b:54:86:4d:f6:06:10:
+                    1e:1d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A7:25:2F:78:CA:01:CA:68:1D:8F:FF:93:D6:FA:FA:A3:9C:BB:C8:0E
+                37:FF:20:10:71:A8:C4:95:89:AA:12:00:64:1D:63:E5:28:DE:C0:2D
             X509v3 Authority Key Identifier: 
-                keyid:D5:16:02:7F:4F:D3:7F:21:1A:9D:CC:55:09:30:CF:EF:6C:08:1F:53
+                keyid:74:00:B4:D2:D2:F7:13:7B:35:AB:B1:20:0C:CA:4B:4A:9B:D0:32:53
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6a:e8:e9:eb:26:54:d4:51:72:d0:4d:a3:7c:e4:5e:8d:bd:c7:
-         5e:0a:ab:46:a0:88:20:15:68:56:3f:43:0d:13:60:30:eb:65:
-         86:45:5b:0d:8b:c4:b0:7f:2f:18:fe:27:a7:6e:4b:10:99:05:
-         25:f8:4b:9a:80:a3:36:f6:35:5e:0a:dc:0a:81:3c:fc:be:32:
-         71:fc:ed:8c:d9:77:ce:25:3c:74:af:b7:ad:50:ee:dc:fe:35:
-         91:15:cc:79:91:f0:48:74:68:8b:a0:e2:70:95:df:1d:b3:e5:
-         c5:48:bc:9c:c3:4c:95:50:94:8d:3c:42:9a:13:e3:03:b3:df:
-         43:32:bf:0f:cd:50:d9:2c:52:1c:30:9e:5f:30:02:69:66:bc:
-         e5:92:63:43:ca:62:e8:d2:ae:dd:2a:e1:ac:ce:00:f0:d7:54:
-         81:6b:b8:1f:b1:0e:e7:57:2b:71:17:50:4b:fb:e4:f0:37:2a:
-         da:37:e2:80:4a:87:9b:d6:d5:6d:6b:b4:af:4b:43:c9:08:9d:
-         57:f1:98:3c:2a:b6:58:7d:a8:83:d3:f0:b1:df:c5:bd:8b:0c:
-         a8:48:91:0c:c8:eb:29:f8:54:70:b0:49:b7:f4:e3:80:cc:2e:
-         37:23:23:f4:49:21:8d:22:12:8c:3e:24:a2:11:66:15:cd:68:
-         96:19:3b:5f
+         2a:2e:53:ae:ee:f2:12:91:7f:38:6b:a2:c2:d7:fb:24:7d:61:
+         dc:fb:c2:13:86:4a:db:8f:4d:47:48:6a:e4:a0:f1:1b:3c:a0:
+         93:7f:85:c1:96:3f:d2:4f:62:db:90:00:d2:4d:05:0c:45:58:
+         96:d4:ef:25:7e:54:c0:33:d9:3d:28:e4:0b:17:98:de:c1:79:
+         38:54:a7:4b:6b:e1:7c:1c:05:d6:03:72:67:df:d7:f1:48:a7:
+         18:24:2e:86:90:fb:91:db:75:74:4e:f1:77:a9:da:d6:65:a2:
+         5b:6d:ba:ef:e4:6c:b3:81:cf:b5:1b:bf:ee:fa:1c:4a:72:be:
+         ae:5d:7f:02:84:cd:18:7a:ca:c6:6c:5c:34:af:5e:91:d7:9d:
+         f9:39:54:0c:5a:44:82:44:c4:0a:f7:21:3b:21:ba:b2:87:38:
+         fa:a9:0f:9c:33:f9:d3:0e:30:cf:a0:2d:4b:77:70:8a:03:4f:
+         b4:7e:af:8e:cd:57:fe:5c:56:42:01:ec:39:9f:52:af:6b:be:
+         1a:22:1e:70:4b:55:1d:c6:3a:97:ca:ec:66:d4:f7:3b:4f:cd:
+         6b:89:71:3d:09:a8:59:86:52:c5:07:9c:ac:8e:de:10:64:5f:
+         f0:8b:0a:e9:6f:7c:8a:ff:9f:20:53:5a:a8:af:6c:5c:12:b2:
+         96:d2:2a:11
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2BK/p
-WGhl9m7N4/6TNdPABlN13xVZI9P9Qow2od9rNT99Y1fkF9kqY3d/1vWwhQBwq/le
-8wBND14ouFZ7FfFO6zLgv+SDK0n/rD4JOEB1cxHuDIzZ5sbSRM6ZdHiLkBm1MnVF
-uuB2VV/JRCfikY6aIao9vufPHq8IS7DMA7jGK5Ku1h5h+hhOtZjMC1UWd0ycJpkP
-O5Eihxk2uU9yyUC70CuO18Mb6y7kgqgOfUWhx2rp29L3MJutT6cEFyt4hRUaj/F3
-bFHAqPxTcPAyjIYJiwCcPzL/zIZPTDJq+VNdNvlVNIzkDlavv/aSJYpO1WZTZnuw
-FggE0lbexrB1LLXVAgMBAAGjgekwgeYwHQYDVR0OBBYEFKclL3jKAcpoHY//k9b6
-+qOcu8gOMB8GA1UdIwQYMBaAFNUWAn9P038hGp3MVQkwz+9sCB9TMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7YSaK
+sRXydT/tR8CSnPJlohaoIdm7QDocoM47lERrwl9L9a6E9iXua/Y7OOcN+eg/0Egn
+ulMxfUGmiTbUQidEj4ivW2eSRxvTs6AW5am0HKoZz66LMOXiBdLG5HIJ89pWfg5k
+F7rcZW1NF641nvpUXr6nCWNTO+px+TXgssgLO2LpHrRtKvqeXH6d9c8blhVLHsrV
+c4IHqfvc5Th5YO3KPEuaznh4yHbA4Gv0ei2sEhJ1LeQcmQGuNLX3j30uKfq13XmP
+nuQdn3STDpTo8Z5ZrvQ7pMoKwR80A+UNK8w+LN1M3B17LaZYGrv4hiOSD9+3sXi7
+Qtn2S1SGTfYGEB4dAgMBAAGjgekwgeYwHQYDVR0OBBYEFDf/IBBxqMSViaoSAGQd
+Y+Uo3sAtMB8GA1UdIwQYMBaAFHQAtNLS9xN7NauxIAzKS0qb0DJTMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAaujp6yZU1FFy0E2jfORe
-jb3HXgqrRqCIIBVoVj9DDRNgMOtlhkVbDYvEsH8vGP4np25LEJkFJfhLmoCjNvY1
-XgrcCoE8/L4ycfztjNl3ziU8dK+3rVDu3P41kRXMeZHwSHRoi6DicJXfHbPlxUi8
-nMNMlVCUjTxCmhPjA7PfQzK/D81Q2SxSHDCeXzACaWa85ZJjQ8pi6NKu3SrhrM4A
-8NdUgWu4H7EO51crcRdQS/vk8Dcq2jfigEqHm9bVbWu0r0tDyQidV/GYPCq2WH2o
-g9Pwsd/FvYsMqEiRDMjrKfhUcLBJt/TjgMwuNyMj9EkhjSISjD4kohFmFc1olhk7
-Xw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAKi5Tru7yEpF/OGuiwtf7
+JH1h3PvCE4ZK249NR0hq5KDxGzygk3+FwZY/0k9i25AA0k0FDEVYltTvJX5UwDPZ
+PSjkCxeY3sF5OFSnS2vhfBwF1gNyZ9/X8UinGCQuhpD7kdt1dE7xd6na1mWiW226
+7+Rss4HPtRu/7vocSnK+rl1/AoTNGHrKxmxcNK9ekded+TlUDFpEgkTECvchOyG6
+soc4+qkPnDP50w4wz6AtS3dwigNPtH6vjs1X/lxWQgHsOZ9Sr2u+GiIecEtVHcY6
+l8rsZtT3O0/Na4lxPQmoWYZSxQecrI7eEGRf8IsK6W98iv+fIFNaqK9sXBKyltIq
+EQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:94:b0:d4:b6:63:20:79:6f:d7:5f:3e:0a:32:b1:
-                    79:0a:be:db:d4:86:23:8d:f8:17:0d:3e:b8:49:ed:
-                    d3:6a:39:db:e4:16:6b:f6:c9:03:d6:0f:60:a0:ae:
-                    6c:86:18:2d:50:06:70:48:5f:9b:14:17:4d:2b:d5:
-                    e4:e9:8c:19:0b:78:19:0e:d9:82:39:8f:92:f8:bc:
-                    7f:cc:7a:6e:06:7c:75:e3:7e:7e:24:71:7e:19:ba:
-                    64:2f:7b:60:e5:ab:c0:1a:9a:44:9d:a4:db:eb:d5:
-                    5b:69:31:ab:9f:86:9c:ec:90:2f:c2:29:ea:19:15:
-                    fb:85:50:89:71:67:28:70:46:f7:e4:1e:6d:e6:81:
-                    49:15:7e:e9:2e:9f:14:d6:f9:02:c9:91:8f:d1:a9:
-                    65:8a:cc:29:57:7b:e5:a8:08:db:19:a6:27:2f:89:
-                    4b:e1:ca:3e:1e:c4:f6:65:4f:b0:26:c4:29:13:44:
-                    3f:6c:49:ba:b7:99:2c:70:0c:54:7b:c2:9a:06:ce:
-                    95:51:62:16:a3:0c:9e:2c:34:d0:04:65:32:41:d7:
-                    db:6e:38:e9:12:8c:91:a5:0d:fe:b2:c6:b7:74:f4:
-                    23:65:d9:ae:88:af:0f:12:6a:28:f0:7b:db:2b:e4:
-                    6d:1b:74:de:93:e9:f6:72:f1:1c:28:8f:8a:32:37:
-                    a2:65
+                    00:cf:54:af:ff:58:f8:e6:17:3d:4d:7b:af:97:15:
+                    62:77:a7:e2:8c:91:9f:bf:6e:96:70:51:21:77:42:
+                    bc:bc:67:f5:62:4b:98:60:ec:16:14:27:bf:33:87:
+                    b5:a7:db:18:ff:99:c4:9d:95:d1:fb:06:31:11:15:
+                    2b:da:67:bb:7f:2f:11:92:35:62:8b:bf:dc:86:f2:
+                    4c:e5:73:2d:cd:dc:81:61:17:17:af:9e:2c:2c:23:
+                    53:09:84:79:4f:55:9c:66:91:e4:e3:aa:23:c8:2e:
+                    2f:46:36:ed:6d:53:f5:84:6c:41:ce:b6:62:81:9c:
+                    26:8f:4d:c6:29:0c:df:28:e9:f6:6e:a4:17:c7:b4:
+                    06:fa:d8:08:da:94:aa:a3:97:38:6b:2d:e7:7f:3f:
+                    65:e8:29:ae:2c:5c:6e:aa:70:bc:f2:2e:92:e3:57:
+                    6f:b9:43:57:4e:65:bc:61:df:cc:7e:36:a6:27:cb:
+                    9e:16:16:39:66:64:90:13:2c:07:3f:98:fe:20:93:
+                    2a:71:62:bd:bf:d0:07:c3:a4:4c:6d:2d:70:8f:e7:
+                    1b:52:09:b4:f8:eb:e7:be:d0:32:cc:d5:5c:03:35:
+                    c7:61:e3:96:e5:1e:1c:82:19:40:20:8a:45:57:73:
+                    6b:c6:87:90:ad:86:bd:01:59:b6:53:73:75:f9:55:
+                    6f:1b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D5:16:02:7F:4F:D3:7F:21:1A:9D:CC:55:09:30:CF:EF:6C:08:1F:53
+                74:00:B4:D2:D2:F7:13:7B:35:AB:B1:20:0C:CA:4B:4A:9B:D0:32:53
             X509v3 Authority Key Identifier: 
-                keyid:99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                keyid:54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             1.2.3.4: 
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         0b:1e:08:36:25:d9:1b:97:a3:07:63:ca:17:a1:df:42:14:a5:
-         6d:75:63:a8:ba:b5:94:b1:59:0b:5c:18:a7:e2:8f:a7:8b:40:
-         f0:0f:cf:4d:8d:87:a0:77:44:b3:0a:b6:b2:a2:aa:25:0e:a5:
-         cf:4b:6b:77:6e:e1:e2:06:19:0d:97:d9:a9:95:72:26:24:07:
-         e5:cd:8c:c8:e1:c5:1f:6c:8e:42:dd:93:da:4c:6e:07:e5:6e:
-         b2:e0:e6:c2:04:1d:1f:e0:4f:f0:5d:00:63:2c:ea:35:e3:dc:
-         c3:14:6d:8f:86:23:ab:a8:d1:29:81:98:1e:b7:fb:34:4c:65:
-         18:27:fa:f5:5e:54:e6:3e:1e:b9:24:4c:86:cd:94:81:8d:60:
-         49:d7:a7:a7:de:a5:4d:30:32:88:0a:95:a9:36:01:51:20:1e:
-         2f:e2:1f:b8:fb:fb:14:77:9a:37:c3:96:21:e5:8b:96:a9:a0:
-         97:24:b8:1c:f5:dd:a2:1b:bb:04:c4:f3:b0:22:56:38:cc:20:
-         e1:5b:51:90:7c:14:5c:5e:ce:df:b1:a9:57:a2:3b:d6:0f:56:
-         3b:96:94:7e:c5:c7:a8:6e:eb:77:fe:50:1e:21:c8:0b:c2:3f:
-         6f:48:d0:dd:d4:f5:29:39:3f:e1:a7:bd:c8:ba:35:d3:28:72:
-         92:d4:e6:33
+         68:eb:42:c8:db:99:8c:4c:b5:c1:23:7b:f6:a4:e9:44:09:30:
+         4d:82:fd:38:e7:83:7c:54:ba:98:e6:28:78:ac:7a:75:d1:13:
+         fc:ad:35:5d:4e:a9:ad:03:f1:3c:d9:8a:45:6d:a1:5d:7a:79:
+         39:1a:e8:5f:61:db:b1:9d:0e:32:13:69:4a:20:d5:86:ed:51:
+         12:3c:b1:ec:a8:38:d1:71:72:34:c3:fa:44:7c:ee:a5:43:1b:
+         e5:b0:4f:96:20:6b:47:96:70:e8:99:7d:a7:d3:e7:0c:49:23:
+         4d:7f:98:15:2f:57:ab:df:7e:d6:e8:2f:1c:b1:75:e7:8e:e9:
+         5c:91:d8:54:53:33:1a:a7:69:b2:cc:ef:a2:93:18:92:3a:9b:
+         61:85:ea:b1:15:39:c8:df:ef:02:b5:17:85:87:72:26:34:df:
+         c6:d8:a3:14:9a:c9:86:49:b7:e7:62:81:74:4e:00:86:9a:c5:
+         5e:a9:43:81:0c:fd:64:04:b0:ba:98:53:32:32:50:46:e8:52:
+         f0:58:2d:c8:60:ae:6e:59:db:15:59:07:b5:38:85:e3:c6:86:
+         d3:69:65:46:84:7f:4f:3e:8f:f8:f4:34:f4:11:d9:2d:6d:5b:
+         74:44:c4:8d:f3:af:c1:0a:f8:d2:e4:2b:d4:f6:57:28:43:8e:
+         73:cd:b6:4c
 -----BEGIN CERTIFICATE-----
 MIIDejCCAmKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlLDUtmMg
-eW/XXz4KMrF5Cr7b1IYjjfgXDT64Se3Tajnb5BZr9skD1g9goK5shhgtUAZwSF+b
-FBdNK9Xk6YwZC3gZDtmCOY+S+Lx/zHpuBnx1435+JHF+GbpkL3tg5avAGppEnaTb
-69VbaTGrn4ac7JAvwinqGRX7hVCJcWcocEb35B5t5oFJFX7pLp8U1vkCyZGP0all
-iswpV3vlqAjbGaYnL4lL4co+HsT2ZU+wJsQpE0Q/bEm6t5kscAxUe8KaBs6VUWIW
-owyeLDTQBGUyQdfbbjjpEoyRpQ3+ssa3dPQjZdmuiK8PEmoo8HvbK+RtG3Tek+n2
-cvEcKI+KMjeiZQIDAQABo4HYMIHVMB0GA1UdDgQWBBTVFgJ/T9N/IRqdzFUJMM/v
-bAgfUzAfBgNVHSMEGDAWgBSZOKze3RcZ5J2SAv0BTUDFLE63SjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Sv/1j4
+5hc9TXuvlxVid6fijJGfv26WcFEhd0K8vGf1YkuYYOwWFCe/M4e1p9sY/5nEnZXR
++wYxERUr2me7fy8RkjVii7/chvJM5XMtzdyBYRcXr54sLCNTCYR5T1WcZpHk46oj
+yC4vRjbtbVP1hGxBzrZigZwmj03GKQzfKOn2bqQXx7QG+tgI2pSqo5c4ay3nfz9l
+6CmuLFxuqnC88i6S41dvuUNXTmW8Yd/MfjamJ8ueFhY5ZmSQEywHP5j+IJMqcWK9
+v9AHw6RMbS1wj+cbUgm0+OvnvtAyzNVcAzXHYeOW5R4cghlAIIpFV3NrxoeQrYa9
+AVm2U3N1+VVvGwIDAQABo4HYMIHVMB0GA1UdDgQWBBR0ALTS0vcTezWrsSAMyktK
+m9AyUzAfBgNVHSMEGDAWgBRUWMI87L1zFX1pZ6y14CPOpRrxlTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wCwYDKgMEBAQBAgMEMA0GCSqG
-SIb3DQEBCwUAA4IBAQALHgg2Jdkbl6MHY8oXod9CFKVtdWOourWUsVkLXBin4o+n
-i0DwD89NjYegd0SzCrayoqolDqXPS2t3buHiBhkNl9mplXImJAflzYzI4cUfbI5C
-3ZPaTG4H5W6y4ObCBB0f4E/wXQBjLOo149zDFG2PhiOrqNEpgZget/s0TGUYJ/r1
-XlTmPh65JEyGzZSBjWBJ16en3qVNMDKICpWpNgFRIB4v4h+4+/sUd5o3w5Yh5YuW
-qaCXJLgc9d2iG7sExPOwIlY4zCDhW1GQfBRcXs7fsalXojvWD1Y7lpR+xceobut3
-/lAeIcgLwj9vSNDd1PUpOT/hp73IujXTKHKS1OYz
+SIb3DQEBCwUAA4IBAQBo60LI25mMTLXBI3v2pOlECTBNgv0454N8VLqY5ih4rHp1
+0RP8rTVdTqmtA/E82YpFbaFdenk5GuhfYduxnQ4yE2lKINWG7VESPLHsqDjRcXI0
+w/pEfO6lQxvlsE+WIGtHlnDomX2n0+cMSSNNf5gVL1er337W6C8csXXnjulckdhU
+UzMap2myzO+ikxiSOpthheqxFTnI3+8CtReFh3ImNN/G2KMUmsmGSbfnYoF0TgCG
+msVeqUOBDP1kBLC6mFMyMlBG6FLwWC3IYK5uWdsVWQe1OIXjxobTaWVGhH9PPo/4
+9DT0EdktbVt0RMSN86/BCvjS5CvU9lcoQ45zzbZM
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a3:83:87:29:55:0b:8e:0a:7e:d7:d3:74:4f:6c:
-                    58:a6:8c:5c:09:8d:13:65:8b:94:04:8e:52:13:93:
-                    9e:8c:75:2b:37:f7:9f:ca:64:92:f2:42:e9:8d:d6:
-                    36:19:ab:14:e4:f3:76:16:65:68:3d:3b:51:eb:e5:
-                    d0:33:af:8e:26:5b:f2:5c:4e:3d:7e:11:46:b6:2a:
-                    6d:fd:3a:54:57:91:8b:6c:e1:fb:8b:08:b8:80:d3:
-                    0d:2d:d0:b8:2e:1e:f0:b3:33:c5:15:0b:b0:ad:de:
-                    27:68:a4:3d:3b:6c:8d:4c:a6:d0:5c:7e:58:52:01:
-                    8f:fe:fb:86:5e:ce:ea:fc:33:77:28:c5:4c:ee:d0:
-                    0b:cb:a7:97:7f:05:70:53:a3:61:06:fa:b3:9d:7e:
-                    d5:dd:3f:ef:58:04:f8:3c:91:fc:8d:fa:ca:cd:97:
-                    a4:3b:44:ac:dd:64:a7:32:08:87:0f:73:36:d7:14:
-                    e0:1d:b8:29:11:97:cb:9d:79:1f:bc:c8:cc:28:ae:
-                    8e:9a:2f:39:62:1f:28:aa:b9:c7:81:7c:34:96:44:
-                    39:e6:00:4b:5b:0e:4b:7a:fd:ca:bf:5d:67:50:91:
-                    3a:59:89:1b:3a:12:7c:7e:b9:58:54:e5:4f:97:00:
-                    35:c8:a7:b9:fd:3f:5e:08:5e:ac:0c:ba:61:e8:42:
-                    34:33
+                    00:e3:8f:54:4c:fa:f9:2a:e4:69:c6:ca:90:31:93:
+                    5f:6f:66:05:43:e5:86:4f:dd:78:dd:aa:85:74:58:
+                    a5:d1:60:06:32:cc:35:3f:56:6b:fe:a8:82:45:7c:
+                    bb:b9:cf:b2:f2:de:a9:61:82:25:49:bd:98:b3:71:
+                    8d:35:fa:86:94:15:48:f8:48:bd:02:bd:42:ee:a4:
+                    88:e1:f1:cc:25:4a:da:b2:d3:5b:77:d8:09:b6:c0:
+                    c9:a1:32:96:6c:55:5e:8a:db:be:52:b2:25:cd:e3:
+                    4d:4d:61:6e:3e:43:40:52:9a:37:7f:b0:7b:22:f4:
+                    b5:79:7f:13:5b:dc:c3:2e:aa:1b:00:21:80:27:3f:
+                    d4:ea:57:2c:46:b5:cd:be:4a:e5:2a:5d:b7:85:10:
+                    20:c2:11:81:c4:e7:99:5a:4e:83:53:e6:88:ff:bd:
+                    69:32:9e:d6:5c:43:f5:79:52:fc:c9:3f:d3:17:cc:
+                    76:bb:42:93:2f:3a:df:21:89:a2:0a:1a:22:f9:d3:
+                    01:f7:c4:99:91:07:c3:46:17:03:7a:3c:a8:36:32:
+                    05:62:23:66:0d:95:22:87:46:23:a7:bb:21:10:dc:
+                    54:bb:29:bb:7a:44:28:8c:fb:38:8f:41:3a:d0:0c:
+                    60:fe:26:ae:e0:70:71:32:e7:ac:5b:29:25:0c:a7:
+                    83:9b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
             X509v3 Authority Key Identifier: 
-                keyid:99:38:AC:DE:DD:17:19:E4:9D:92:02:FD:01:4D:40:C5:2C:4E:B7:4A
+                keyid:54:58:C2:3C:EC:BD:73:15:7D:69:67:AC:B5:E0:23:CE:A5:1A:F1:95
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         47:a7:24:e7:1f:29:34:d7:8e:3a:e1:af:aa:d3:3b:32:f4:d6:
-         7d:ec:ab:7c:34:59:0b:b1:33:80:6a:d4:36:4a:78:d3:3a:d6:
-         97:0d:8b:81:54:09:91:b5:30:79:78:e7:52:11:ba:e8:57:af:
-         f3:f8:f0:ff:17:9a:e3:d0:a0:89:81:50:e8:67:47:9b:b5:68:
-         ed:99:10:1b:d6:31:58:24:dd:74:3c:8b:76:77:46:a3:b9:ca:
-         b6:4b:3d:ca:b9:5b:ac:e7:92:8c:d3:f2:4a:ba:4b:2f:c6:11:
-         cf:38:15:59:5a:fa:2d:d2:72:31:8f:54:a4:7e:44:a7:26:9d:
-         1b:38:e0:ac:75:72:9c:71:4c:78:54:80:8f:74:b7:11:b0:5c:
-         c7:69:a5:03:1e:cd:5e:c5:cd:60:0e:80:32:19:02:e0:8c:b4:
-         76:e7:00:a1:e5:bc:29:31:61:a6:55:f0:72:92:78:69:6f:26:
-         08:96:71:b9:42:a9:eb:cc:54:8e:d6:55:1a:26:2c:a0:b5:a6:
-         df:52:86:a1:df:26:da:26:86:d5:17:5b:c9:9b:90:c0:6c:ab:
-         23:1a:82:2d:ff:b6:83:ae:3c:c1:c3:85:5e:49:aa:d6:ef:fd:
-         f4:4a:22:7c:90:b8:46:2e:15:63:93:0c:c5:2d:9e:f6:32:03:
-         53:10:30:36
+         d9:5c:a3:8f:f8:a8:3b:83:04:3d:4c:5e:33:16:78:2a:a5:a6:
+         c9:b1:9f:3a:ac:cb:36:70:a4:3f:69:7d:2a:91:d0:dd:00:45:
+         f4:a3:d0:25:fb:dd:a8:82:98:54:d5:14:2d:c3:62:1d:c6:47:
+         ce:d1:c2:5d:1f:b3:07:d5:90:b3:98:e5:5f:32:cf:84:08:e1:
+         92:8b:6a:5e:3a:3c:e8:05:8c:c2:11:c7:eb:0a:65:be:16:d0:
+         f7:33:a1:5f:0b:ac:ac:cf:f7:cd:dd:07:9c:d3:ec:d7:90:2d:
+         94:f6:04:bd:be:9a:13:de:9e:98:d1:d8:7d:6d:13:2d:55:e0:
+         a8:00:80:16:df:b1:87:2d:12:32:d1:9f:ac:96:69:4c:9c:ba:
+         ec:58:1f:2b:af:fc:50:63:e8:1a:ae:56:ab:cc:a9:8b:03:95:
+         1f:38:13:09:4c:4d:d9:4b:22:05:88:fc:6d:ab:e4:eb:bd:ff:
+         5f:ed:44:22:ca:ea:d8:aa:a8:e4:1c:78:9f:be:bb:84:05:6e:
+         9d:22:3c:25:ab:f8:32:cd:69:93:b9:de:c6:d9:39:0c:0f:9a:
+         de:ee:c7:3c:d7:9f:6d:ee:ef:e9:69:4c:1e:de:92:e3:e8:59:
+         86:19:00:98:7e:b1:c2:5b:e2:a9:bc:a0:60:82:7d:ca:17:11:
+         ac:f3:3b:24
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKODhylVC44KftfTdE9s
-WKaMXAmNE2WLlASOUhOTnox1Kzf3n8pkkvJC6Y3WNhmrFOTzdhZlaD07Uevl0DOv
-jiZb8lxOPX4RRrYqbf06VFeRi2zh+4sIuIDTDS3QuC4e8LMzxRULsK3eJ2ikPTts
-jUym0Fx+WFIBj/77hl7O6vwzdyjFTO7QC8unl38FcFOjYQb6s51+1d0/71gE+DyR
-/I36ys2XpDtErN1kpzIIhw9zNtcU4B24KRGXy515H7zIzCiujpovOWIfKKq5x4F8
-NJZEOeYAS1sOS3r9yr9dZ1CROlmJGzoSfH65WFTlT5cANcinuf0/XgherAy6YehC
-NDMCAwEAAaOByzCByDAdBgNVHQ4EFgQUmTis3t0XGeSdkgL9AU1AxSxOt0owHwYD
-VR0jBBgwFoAUmTis3t0XGeSdkgL9AU1AxSxOt0owNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOOPVEz6+SrkacbKkDGT
+X29mBUPlhk/deN2qhXRYpdFgBjLMNT9Wa/6ogkV8u7nPsvLeqWGCJUm9mLNxjTX6
+hpQVSPhIvQK9Qu6kiOHxzCVK2rLTW3fYCbbAyaEylmxVXorbvlKyJc3jTU1hbj5D
+QFKaN3+weyL0tXl/E1vcwy6qGwAhgCc/1OpXLEa1zb5K5Spdt4UQIMIRgcTnmVpO
+g1PmiP+9aTKe1lxD9XlS/Mk/0xfMdrtCky863yGJogoaIvnTAffEmZEHw0YXA3o8
+qDYyBWIjZg2VIodGI6e7IRDcVLspu3pEKIz7OI9BOtAMYP4mruBwcTLnrFspJQyn
+g5sCAwEAAaOByzCByDAdBgNVHQ4EFgQUVFjCPOy9cxV9aWesteAjzqUa8ZUwHwYD
+VR0jBBgwFoAUVFjCPOy9cxV9aWesteAjzqUa8ZUwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBHpyTnHyk0
-14464a+q0zsy9NZ97Kt8NFkLsTOAatQ2SnjTOtaXDYuBVAmRtTB5eOdSEbroV6/z
-+PD/F5rj0KCJgVDoZ0ebtWjtmRAb1jFYJN10PIt2d0ajucq2Sz3KuVus55KM0/JK
-uksvxhHPOBVZWvot0nIxj1SkfkSnJp0bOOCsdXKccUx4VICPdLcRsFzHaaUDHs1e
-xc1gDoAyGQLgjLR25wCh5bwpMWGmVfByknhpbyYIlnG5QqnrzFSO1lUaJiygtabf
-Uoah3ybaJobVF1vJm5DAbKsjGoIt/7aDrjzBw4VeSarW7/30SiJ8kLhGLhVjkwzF
-LZ72MgNTEDA2
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDZXKOP+Kg7
+gwQ9TF4zFngqpabJsZ86rMs2cKQ/aX0qkdDdAEX0o9Al+92ogphU1RQtw2IdxkfO
+0cJdH7MH1ZCzmOVfMs+ECOGSi2peOjzoBYzCEcfrCmW+FtD3M6FfC6ysz/fN3Qec
+0+zXkC2U9gS9vpoT3p6Y0dh9bRMtVeCoAIAW37GHLRIy0Z+slmlMnLrsWB8rr/xQ
+Y+garlarzKmLA5UfOBMJTE3ZSyIFiPxtq+Trvf9f7UQiyurYqqjkHHifvruEBW6d
+Ijwlq/gyzWmTud7G2TkMD5re7sc8159t7u/paUwe3pLj6FmGGQCYfrHCW+KpvKBg
+gn3KFxGs8zsk
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -284,3 +284,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
index 6ecd8bb..2e3e137 100644
--- a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
@@ -281,4 +281,7 @@
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
 
-
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
index 1611b2f..d423277 100644
--- a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
@@ -461,4 +461,7 @@
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
 
-
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
index 7446d9f..eecd9b6 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         77:d8:b1:3b:e5:c4:ce:c7:37:c6:fa:d7:a7:a1:cf:66:0e:19:
-         49:ea:06:f2:ec:8d:92:7d:e2:de:43:32:22:55:b4:84:f5:30:
-         bb:44:91:c1:81:2a:aa:ae:e1:3c:86:17:20:28:15:a1:d0:dc:
-         ce:7c:62:67:4e:d5:a8:e0:e3:44:91:af:96:24:58:0d:eb:26:
-         1f:42:37:82:de:d6:84:40:36:c7:78:7d:6c:f7:fa:54:a0:70:
-         d0:b9:41:a8:f2:3b:19:f1:cc:36:97:69:78:66:3c:ad:03:1e:
-         70:e7:81:23:11:d6:98:d7:ba:e5:98:d8:12:c7:4b:1d:5b:b1:
-         cd:91:5c:49:f0:d3:99:dd:9e:ab:db:7b:32:f6:8c:be:fe:0b:
-         2b:1e:96:8d:6e:7e:4a:69:71:f3:b6:f7:44:5f:a1:2f:62:67:
-         f0:55:b0:a2:d1:db:7f:58:3b:10:05:4f:e1:00:9d:45:4f:5d:
-         1e:b8:a8:83:bd:33:bd:14:07:34:23:5e:99:bb:16:3e:ee:de:
-         84:96:53:bf:29:e7:a5:52:a9:b6:6a:76:db:a6:ee:45:34:3f:
-         f7:48:d8:8a:12:46:c6:6c:ba:31:85:e8:45:07:85:23:37:85:
-         ff:15:de:0b:a8:97:40:60:11:9d:20:a8:fc:53:38:66:ea:9e:
-         d4:1b:9f:34
+         34:f8:20:57:dc:54:76:40:33:a6:fc:a3:e6:3c:e1:e0:53:7e:
+         47:58:59:c1:b4:3e:2c:81:46:98:bd:f7:84:98:2e:cc:b0:62:
+         48:11:aa:b9:db:9f:6e:56:b2:cc:f2:f0:8e:c9:82:c4:69:34:
+         72:3f:4b:34:0d:26:dd:77:8e:2a:04:c9:54:7d:97:a5:b8:e9:
+         98:94:c8:e0:d7:86:b9:8d:6f:bd:c0:74:67:e7:10:11:22:f0:
+         b3:1c:83:f2:66:a4:cf:c6:9e:8e:66:66:dd:b8:c3:14:b9:ab:
+         f3:1e:b3:e6:4b:f4:04:4a:c5:e3:4c:54:a5:2c:56:8f:9d:7f:
+         f1:9d:6b:d9:2f:36:63:f1:8e:55:91:de:10:67:1d:8c:1b:6a:
+         ed:31:72:46:f6:de:41:71:53:df:96:5f:44:b2:58:3b:c0:19:
+         30:ef:9f:ce:e2:a1:6b:a5:ba:cb:10:f0:10:d1:a3:a7:39:a4:
+         db:46:dc:33:1b:8a:b8:d2:a6:ad:fe:cc:00:cd:da:94:be:d9:
+         f0:8d:3e:e0:61:91:e4:1b:fc:6c:bd:86:1c:73:e7:c2:eb:68:
+         35:f2:5e:62:fc:77:37:20:63:0c:a2:bb:37:82:64:19:0f:70:
+         d0:ce:d3:17:7d:02:e9:3a:56:95:56:7a:aa:41:ab:79:2b:a0:
+         ca:28:42:69
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUZJCTzazHNzZNaxTWZ9BUOllFOvwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUYUk1Ma420hj+YGeHOv+Q1e1evcAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB32LE75cTO
-xzfG+tenoc9mDhlJ6gby7I2SfeLeQzIiVbSE9TC7RJHBgSqqruE8hhcgKBWh0NzO
-fGJnTtWo4ONEka+WJFgN6yYfQjeC3taEQDbHeH1s9/pUoHDQuUGo8jsZ8cw2l2l4
-ZjytAx5w54EjEdaY17rlmNgSx0sdW7HNkVxJ8NOZ3Z6r23sy9oy+/gsrHpaNbn5K
-aXHztvdEX6EvYmfwVbCi0dt/WDsQBU/hAJ1FT10euKiDvTO9FAc0I16ZuxY+7t6E
-llO/KeelUqm2anbbpu5FND/3SNiKEkbGbLoxhehFB4UjN4X/Fd4LqJdAYBGdIKj8
-Uzhm6p7UG580
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0+CBX3FR2
+QDOm/KPmPOHgU35HWFnBtD4sgUaYvfeEmC7MsGJIEaq5259uVrLM8vCOyYLEaTRy
+P0s0DSbdd44qBMlUfZeluOmYlMjg14a5jW+9wHRn5xARIvCzHIPyZqTPxp6OZmbd
+uMMUuavzHrPmS/QESsXjTFSlLFaPnX/xnWvZLzZj8Y5Vkd4QZx2MG2rtMXJG9t5B
+cVPfll9Eslg7wBkw75/O4qFrpbrLEPAQ0aOnOaTbRtwzG4q40qat/swAzdqUvtnw
+jT7gYZHkG/xsvYYcc+fC62g18l5i/Hc3IGMMors3gmQZD3DQztMXfQLpOlaVVnqq
+Qat5K6DKKEJp
 -----END CERTIFICATE-----
 
 Certificate:
@@ -316,30 +316,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -354,41 +354,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         08:18:04:78:4e:5e:99:54:0e:de:99:06:87:4d:3f:7b:98:bc:
-         ac:92:ec:e2:60:54:35:c8:65:68:09:3d:8d:d9:23:ed:c3:f3:
-         7b:fd:8a:60:fb:8b:dc:66:96:3f:69:81:5b:7c:cd:1d:cd:44:
-         8d:3a:93:e4:18:94:c4:a8:56:6a:fd:ea:07:ce:b1:a0:05:b2:
-         cd:fd:bf:05:e6:52:2b:26:36:9d:e2:f2:25:f2:c8:27:5b:52:
-         13:c6:3e:55:5b:72:58:34:a1:1c:5b:17:15:69:b1:82:78:a8:
-         6b:80:81:cc:73:40:5b:c0:ad:de:a8:ec:53:4f:72:f0:1b:a6:
-         d4:ea:e6:c0:35:96:df:ef:38:15:c5:0e:e9:92:22:c4:97:0d:
-         d5:37:6f:7e:af:1f:6e:53:45:1e:3e:21:8c:25:d3:4c:aa:0d:
-         5b:08:e1:5f:aa:dc:49:1c:84:b3:30:21:ea:b6:9c:95:d4:16:
-         1c:9a:0b:17:47:a1:8c:7d:04:a0:e5:df:7d:e7:69:b7:81:2d:
-         31:09:9b:ae:da:b2:1d:13:36:ad:f1:19:7e:92:6a:1b:70:01:
-         8b:ee:88:5e:54:56:d6:dd:6e:78:b1:53:06:89:3b:e3:7e:45:
-         2c:b5:9c:c9:92:5a:0d:c2:85:d0:e1:89:20:94:c7:ef:3c:01:
-         ab:25:5c:4b
+         3e:21:b0:9f:e1:0c:4c:62:3f:0a:d8:0b:97:bc:98:de:4d:18:
+         b6:88:51:bd:db:59:dc:63:ed:13:fa:52:76:59:13:b3:aa:c6:
+         42:3a:7e:e9:3c:cd:12:68:c0:54:55:32:8a:13:17:a4:f6:64:
+         b1:22:f7:01:29:80:a6:94:c6:06:4c:e8:97:81:16:9c:ce:cf:
+         ed:fc:a3:2a:19:70:8f:10:0e:32:15:dc:25:fb:45:41:87:96:
+         1a:ef:7f:be:65:24:a7:0d:cf:77:f0:ce:b1:27:21:9d:c4:a1:
+         24:ae:f0:9e:54:f2:f3:04:ac:fe:43:f1:c0:b5:f1:48:3c:57:
+         39:fb:7e:b6:c9:b8:29:57:f5:82:2e:4f:43:60:ff:d7:3a:54:
+         64:15:a4:11:c3:5f:ea:21:84:6b:ef:e6:2d:29:8c:e5:ab:d2:
+         aa:9f:d4:b3:c2:ea:5f:76:e7:c8:9b:a4:76:4c:99:2b:05:96:
+         60:e2:1e:f9:44:d7:c5:3a:80:e0:a4:7c:f8:ca:f8:5a:c6:63:
+         2b:9c:71:5a:7d:a4:03:69:b4:e3:dd:be:1b:e4:01:b3:53:b4:
+         46:5c:c2:8b:85:62:3e:f5:87:bd:5f:73:36:a0:c4:e6:a8:bc:
+         58:c4:bf:84:67:e3:00:f6:98:64:30:66:ba:8b:92:b5:b2:7f:
+         5d:e9:75:a7
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAIGAR4Tl6Z
-VA7emQaHTT97mLyskuziYFQ1yGVoCT2N2SPtw/N7/Ypg+4vcZpY/aYFbfM0dzUSN
-OpPkGJTEqFZq/eoHzrGgBbLN/b8F5lIrJjad4vIl8sgnW1ITxj5VW3JYNKEcWxcV
-abGCeKhrgIHMc0BbwK3eqOxTT3LwG6bU6ubANZbf7zgVxQ7pkiLElw3VN29+rx9u
-U0UePiGMJdNMqg1bCOFfqtxJHISzMCHqtpyV1BYcmgsXR6GMfQSg5d9952m3gS0x
-CZuu2rIdEzat8Rl+kmobcAGL7oheVFbW3W54sVMGiTvjfkUstZzJkloNwoXQ4Ykg
-lMfvPAGrJVxL
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA+IbCf4QxM
+Yj8K2AuXvJjeTRi2iFG921ncY+0T+lJ2WROzqsZCOn7pPM0SaMBUVTKKExek9mSx
+IvcBKYCmlMYGTOiXgRaczs/t/KMqGXCPEA4yFdwl+0VBh5Ya73++ZSSnDc938M6x
+JyGdxKEkrvCeVPLzBKz+Q/HAtfFIPFc5+362ybgpV/WCLk9DYP/XOlRkFaQRw1/q
+IYRr7+YtKYzlq9Kqn9SzwupfdufIm6R2TJkrBZZg4h75RNfFOoDgpHz4yvhaxmMr
+nHFafaQDabTj3b4b5AGzU7RGXMKLhWI+9Ye9X3M2oMTmqLxYxL+EZ+MA9phkMGa6
+i5K1sn9d6XWn
 -----END CERTIFICATE-----
 
 Certificate:
@@ -405,30 +405,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -443,41 +443,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -489,3 +489,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
index 7afc4c8..fc7d9a5 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         77:d8:b1:3b:e5:c4:ce:c7:37:c6:fa:d7:a7:a1:cf:66:0e:19:
-         49:ea:06:f2:ec:8d:92:7d:e2:de:43:32:22:55:b4:84:f5:30:
-         bb:44:91:c1:81:2a:aa:ae:e1:3c:86:17:20:28:15:a1:d0:dc:
-         ce:7c:62:67:4e:d5:a8:e0:e3:44:91:af:96:24:58:0d:eb:26:
-         1f:42:37:82:de:d6:84:40:36:c7:78:7d:6c:f7:fa:54:a0:70:
-         d0:b9:41:a8:f2:3b:19:f1:cc:36:97:69:78:66:3c:ad:03:1e:
-         70:e7:81:23:11:d6:98:d7:ba:e5:98:d8:12:c7:4b:1d:5b:b1:
-         cd:91:5c:49:f0:d3:99:dd:9e:ab:db:7b:32:f6:8c:be:fe:0b:
-         2b:1e:96:8d:6e:7e:4a:69:71:f3:b6:f7:44:5f:a1:2f:62:67:
-         f0:55:b0:a2:d1:db:7f:58:3b:10:05:4f:e1:00:9d:45:4f:5d:
-         1e:b8:a8:83:bd:33:bd:14:07:34:23:5e:99:bb:16:3e:ee:de:
-         84:96:53:bf:29:e7:a5:52:a9:b6:6a:76:db:a6:ee:45:34:3f:
-         f7:48:d8:8a:12:46:c6:6c:ba:31:85:e8:45:07:85:23:37:85:
-         ff:15:de:0b:a8:97:40:60:11:9d:20:a8:fc:53:38:66:ea:9e:
-         d4:1b:9f:34
+         34:f8:20:57:dc:54:76:40:33:a6:fc:a3:e6:3c:e1:e0:53:7e:
+         47:58:59:c1:b4:3e:2c:81:46:98:bd:f7:84:98:2e:cc:b0:62:
+         48:11:aa:b9:db:9f:6e:56:b2:cc:f2:f0:8e:c9:82:c4:69:34:
+         72:3f:4b:34:0d:26:dd:77:8e:2a:04:c9:54:7d:97:a5:b8:e9:
+         98:94:c8:e0:d7:86:b9:8d:6f:bd:c0:74:67:e7:10:11:22:f0:
+         b3:1c:83:f2:66:a4:cf:c6:9e:8e:66:66:dd:b8:c3:14:b9:ab:
+         f3:1e:b3:e6:4b:f4:04:4a:c5:e3:4c:54:a5:2c:56:8f:9d:7f:
+         f1:9d:6b:d9:2f:36:63:f1:8e:55:91:de:10:67:1d:8c:1b:6a:
+         ed:31:72:46:f6:de:41:71:53:df:96:5f:44:b2:58:3b:c0:19:
+         30:ef:9f:ce:e2:a1:6b:a5:ba:cb:10:f0:10:d1:a3:a7:39:a4:
+         db:46:dc:33:1b:8a:b8:d2:a6:ad:fe:cc:00:cd:da:94:be:d9:
+         f0:8d:3e:e0:61:91:e4:1b:fc:6c:bd:86:1c:73:e7:c2:eb:68:
+         35:f2:5e:62:fc:77:37:20:63:0c:a2:bb:37:82:64:19:0f:70:
+         d0:ce:d3:17:7d:02:e9:3a:56:95:56:7a:aa:41:ab:79:2b:a0:
+         ca:28:42:69
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUZJCTzazHNzZNaxTWZ9BUOllFOvwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUYUk1Ma420hj+YGeHOv+Q1e1evcAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB32LE75cTO
-xzfG+tenoc9mDhlJ6gby7I2SfeLeQzIiVbSE9TC7RJHBgSqqruE8hhcgKBWh0NzO
-fGJnTtWo4ONEka+WJFgN6yYfQjeC3taEQDbHeH1s9/pUoHDQuUGo8jsZ8cw2l2l4
-ZjytAx5w54EjEdaY17rlmNgSx0sdW7HNkVxJ8NOZ3Z6r23sy9oy+/gsrHpaNbn5K
-aXHztvdEX6EvYmfwVbCi0dt/WDsQBU/hAJ1FT10euKiDvTO9FAc0I16ZuxY+7t6E
-llO/KeelUqm2anbbpu5FND/3SNiKEkbGbLoxhehFB4UjN4X/Fd4LqJdAYBGdIKj8
-Uzhm6p7UG580
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA0+CBX3FR2
+QDOm/KPmPOHgU35HWFnBtD4sgUaYvfeEmC7MsGJIEaq5259uVrLM8vCOyYLEaTRy
+P0s0DSbdd44qBMlUfZeluOmYlMjg14a5jW+9wHRn5xARIvCzHIPyZqTPxp6OZmbd
+uMMUuavzHrPmS/QESsXjTFSlLFaPnX/xnWvZLzZj8Y5Vkd4QZx2MG2rtMXJG9t5B
+cVPfll9Eslg7wBkw75/O4qFrpbrLEPAQ0aOnOaTbRtwzG4q40qat/swAzdqUvtnw
+jT7gYZHkG/xsvYYcc+fC62g18l5i/Hc3IGMMors3gmQZD3DQztMXfQLpOlaVVnqq
+Qat5K6DKKEJp
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -311,3 +311,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
index b9f9182..f0e8c5b 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         9f:f2:71:1d:88:6c:57:db:19:12:ed:da:7c:5e:ef:81:90:30:
-         2f:f8:9a:df:de:90:bc:9d:6b:26:64:10:87:b8:45:78:8d:8d:
-         37:fe:c8:86:75:d0:a2:c5:88:78:b6:8d:30:f7:8c:63:5e:3f:
-         8d:7d:54:81:68:80:34:dd:cf:37:73:24:91:ef:42:7a:5c:ed:
-         94:9a:b9:6f:a6:13:1d:04:9d:0a:e6:53:eb:6c:2d:7b:24:06:
-         b3:d4:3a:79:94:17:68:9e:c2:36:91:b7:30:f2:cf:c3:6c:22:
-         2d:73:2c:e6:ca:d0:97:db:a1:f6:7e:2e:e2:5b:27:d5:86:a9:
-         ec:92:3b:f9:5d:ae:bd:f9:a7:d6:a9:dd:f9:93:49:2d:f1:99:
-         a6:98:10:43:0e:2f:98:97:e0:17:36:86:57:75:22:63:65:39:
-         eb:69:e9:cc:4d:9c:9b:35:63:5b:1b:04:fb:7a:b4:91:30:a2:
-         5c:4e:c0:a8:7c:94:ce:4c:d8:eb:f2:fe:34:be:e6:76:bc:fe:
-         8c:9e:d3:3b:6d:ae:62:92:8b:0f:41:9c:d7:65:0d:7b:1b:c5:
-         e9:5f:11:a2:f1:18:22:5e:0d:e7:9b:b7:b7:c5:34:77:ef:32:
-         b5:94:ef:dd:a6:6e:a7:07:43:c9:7f:b8:04:2a:88:53:44:93:
-         a2:db:05:93
+         9d:2d:bc:6c:2b:e6:50:3e:c8:99:d1:18:ea:8d:f2:6b:34:7e:
+         21:bb:9d:c5:a5:f6:ee:e9:64:af:46:68:2d:d0:a3:58:55:b2:
+         92:e7:8f:20:00:59:08:d4:71:43:40:09:d2:e1:30:36:c2:26:
+         9f:5a:69:95:5b:c4:d5:4d:46:fa:a9:2e:ad:12:0b:46:03:09:
+         5d:e3:8f:64:76:c4:a0:85:b5:9b:3e:7f:e8:5c:6f:97:e0:62:
+         45:b4:69:7c:24:f4:be:b7:14:e7:42:a7:9c:d7:fc:f9:39:2a:
+         76:25:3d:f5:f8:81:9a:0e:e2:ff:da:2f:3c:4f:c7:8f:2f:ba:
+         de:0a:11:25:8f:ce:01:37:95:2b:23:53:d1:cb:fc:6a:a7:61:
+         b1:a7:0e:8c:42:74:c6:78:b5:9a:2e:a4:af:94:f0:93:41:e9:
+         8e:7e:fa:52:a3:25:b2:ef:c7:7b:61:e9:9b:fd:87:6d:95:cd:
+         c3:36:2a:58:90:3b:8a:eb:82:2d:79:77:36:af:9f:b1:84:fa:
+         93:00:0e:37:54:ce:bc:c9:ef:7e:16:c0:1f:62:05:70:2e:b5:
+         91:d4:3f:1e:cd:a1:91:d5:16:50:a8:ed:63:61:16:83:e5:b3:
+         b1:94:32:7e:11:50:90:63:49:dc:a8:f2:4f:68:42:bf:3f:c1:
+         45:1a:08:42
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRdoQM9jxP5CK8eg2y83m+jtcIa6jA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBS/MbkVuOQBbrEkrNrXS3DA0RaP/DA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJ/ycR2IbFfbGRLt2nxe74GQMC/4mt/ekLydayZkEIe4RXiNjTf+yIZ10KLFiHi2
-jTD3jGNeP419VIFogDTdzzdzJJHvQnpc7ZSauW+mEx0EnQrmU+tsLXskBrPUOnmU
-F2iewjaRtzDyz8NsIi1zLObK0JfbofZ+LuJbJ9WGqeySO/ldrr35p9ap3fmTSS3x
-maaYEEMOL5iX4Bc2hld1ImNlOetp6cxNnJs1Y1sbBPt6tJEwolxOwKh8lM5M2Ovy
-/jS+5na8/oye0zttrmKSiw9BnNdlDXsbxelfEaLxGCJeDeebt7fFNHfvMrWU792m
-bqcHQ8l/uAQqiFNEk6LbBZM=
+AJ0tvGwr5lA+yJnRGOqN8ms0fiG7ncWl9u7pZK9GaC3Qo1hVspLnjyAAWQjUcUNA
+CdLhMDbCJp9aaZVbxNVNRvqpLq0SC0YDCV3jj2R2xKCFtZs+f+hcb5fgYkW0aXwk
+9L63FOdCp5zX/Pk5KnYlPfX4gZoO4v/aLzxPx48vut4KESWPzgE3lSsjU9HL/Gqn
+YbGnDoxCdMZ4tZoupK+U8JNB6Y5++lKjJbLvx3th6Zv9h22VzcM2KliQO4rrgi15
+dzavn7GE+pMADjdUzrzJ734WwB9iBXAutZHUPx7NoZHVFlCo7WNhFoPls7GUMn4R
+UJBjSdyo8k9oQr8/wUUaCEI=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -311,3 +311,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
index 2ae242e..e5d0c8c 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
@@ -48,30 +48,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:14:31:90:c4:c6:d0:b9:10:9e:e4:7a:e2:bc:
-                    16:ab:d2:5e:d7:3d:00:11:bf:25:0b:32:17:57:c4:
-                    fb:f6:60:0d:5a:7c:43:08:88:e6:35:f7:39:0f:dc:
-                    d7:ef:22:18:52:5b:de:27:35:10:93:ab:c0:ae:98:
-                    1b:e1:c7:40:a8:be:84:2a:e6:69:7c:c4:68:1e:c4:
-                    0d:29:97:55:12:fb:30:86:a3:8f:03:0c:d4:4b:22:
-                    76:ac:a8:db:fd:20:4c:46:ea:21:9b:59:4f:ea:9c:
-                    20:6f:ff:e1:7c:7d:64:5c:4b:91:4d:ac:56:1d:19:
-                    12:6c:af:f2:99:40:21:9d:06:b9:a2:90:2c:7b:bc:
-                    af:fe:c0:40:a1:06:89:62:f3:f3:fd:a0:07:61:aa:
-                    c2:f9:e1:0e:13:96:92:ac:53:ba:ed:a5:36:c9:b9:
-                    04:e7:13:67:bc:0e:63:dc:22:29:53:e2:e3:59:ab:
-                    5c:25:cd:d9:fb:46:4e:91:70:dd:41:4b:35:87:a4:
-                    fd:2c:66:be:75:7e:03:e9:12:61:66:cb:19:88:a1:
-                    61:b7:13:b4:ab:51:a6:d5:58:9c:db:8c:a2:1a:da:
-                    c3:6f:cb:b6:b1:65:d8:a3:a3:d1:87:d8:b9:bb:b8:
-                    c1:83:f1:83:38:2a:fd:a3:f6:a6:59:f2:27:f1:e3:
-                    50:29
+                    00:c4:05:bc:50:38:65:d6:ab:9b:ee:36:82:c0:43:
+                    3b:8d:75:18:05:05:2d:64:d7:f2:67:41:db:8b:2a:
+                    1a:31:8d:25:b5:54:f3:80:f8:47:13:0e:b3:04:93:
+                    a8:f2:d2:12:12:0d:1f:fa:fc:01:56:60:61:77:7b:
+                    99:56:da:27:06:70:cc:39:22:01:a5:bd:fe:2a:aa:
+                    70:52:90:cd:c6:2f:f9:81:1f:5d:6f:bb:b5:0e:3f:
+                    7c:03:cf:b4:47:83:06:db:f7:29:a0:da:a9:2b:72:
+                    85:74:40:a8:28:f6:09:cf:54:71:ac:48:0b:8f:1f:
+                    5a:e2:ca:4e:6c:c2:ee:21:b8:24:1e:b0:4c:fa:27:
+                    84:fa:87:bb:eb:48:c5:84:98:51:cc:f1:ae:93:7b:
+                    92:1e:10:d9:0e:4e:1c:20:29:ef:9d:ec:a1:74:2b:
+                    c4:3c:9e:42:45:ad:33:c3:6d:fa:41:55:0b:27:d1:
+                    fc:6a:e3:07:ee:b7:c1:75:9f:63:34:33:97:5c:d0:
+                    49:37:20:1e:fb:0e:ae:bc:2f:cb:48:c8:0d:cf:bf:
+                    a3:3c:5d:63:2d:1f:d5:65:04:25:ba:84:a6:9b:14:
+                    7e:7f:df:1e:b1:6f:0a:91:b4:d6:8a:a0:fd:75:8b:
+                    85:cf:bd:af:27:fa:12:dc:cf:19:05:78:6f:75:50:
+                    88:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:D0:19:F4:6B:86:BC:17:3B:FB:74:95:0F:53:BD:BD:4E:CA:10:D6
+                46:A2:E0:16:9E:F7:65:A3:9D:F8:F6:34:A0:DC:33:8A:7A:AE:2E:89
             X509v3 Authority Key Identifier: 
-                keyid:D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                keyid:0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -86,42 +86,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         0e:b6:ad:85:34:3d:cf:9c:2f:8c:e7:90:80:33:f6:12:99:40:
-         6d:89:7b:5c:08:c9:a9:fc:40:24:1e:14:ac:6c:6a:11:aa:3e:
-         ea:c1:19:32:75:67:26:fe:c0:f9:55:e9:b6:04:74:c9:e3:22:
-         59:3a:06:5a:5f:25:6d:1d:df:48:62:a4:ee:d0:87:df:20:9d:
-         9c:95:aa:4e:77:05:28:e6:66:ac:ae:23:e4:74:df:5a:b4:21:
-         e7:3d:0f:95:61:84:11:7e:d8:72:66:dd:85:c7:41:fe:44:12:
-         da:4c:c7:1b:ab:7d:4b:3d:c4:38:2d:b9:54:8a:26:1e:76:1b:
-         f6:0b:8a:e9:fa:9f:0a:e6:cc:6d:c5:55:f1:a5:29:20:42:05:
-         d4:5a:4f:27:ab:b6:e4:c4:ea:4d:8b:97:53:67:03:75:32:1f:
-         9d:1e:b8:72:e1:c4:5a:09:15:d7:ce:a3:59:ed:cc:4d:0f:ea:
-         c0:1d:57:1a:43:d7:7a:63:86:b0:b8:5c:4f:34:29:a4:be:90:
-         c4:6b:39:20:c9:25:96:7d:a1:cc:ee:f7:57:04:69:d7:21:66:
-         1d:cc:4e:6c:10:1a:6e:87:11:f3:e3:ae:9e:5b:64:04:ee:ac:
-         c6:0a:24:80:e4:0a:0e:89:49:9d:0f:1d:74:b2:f6:db:7e:25:
-         a1:d0:6e:7e
+         6c:41:15:1d:16:82:4b:09:00:30:69:b4:64:34:6b:a9:f3:97:
+         1e:6d:4c:6d:d8:77:91:21:ae:4f:50:b0:eb:f9:24:39:0d:0e:
+         da:4b:dd:6a:2f:80:61:65:e1:4e:27:50:9e:1e:91:05:23:26:
+         e7:b6:49:52:f1:4b:19:25:2e:f0:c7:6e:53:f3:13:33:63:97:
+         6e:91:97:0d:9d:60:08:9b:dd:9f:40:28:ed:14:57:43:d8:bf:
+         f6:16:65:d8:b3:b7:42:61:aa:87:75:e1:c1:93:17:ae:a2:6d:
+         f6:ac:48:04:ce:88:ee:61:81:52:a3:45:e7:c3:19:bb:15:e6:
+         a9:7e:e3:21:2d:44:67:34:58:63:02:f3:3f:16:63:51:fa:d8:
+         8b:21:9e:8d:7a:55:98:4f:a5:cc:be:1b:75:31:37:17:79:e5:
+         dc:1a:4b:5f:fa:88:61:64:8c:e6:a4:4d:33:b5:14:e2:0a:51:
+         6e:d3:70:25:6f:3c:56:c3:d2:fd:c3:0a:47:f9:17:34:60:f3:
+         2b:5a:76:49:fb:2c:0a:e1:94:65:74:75:b5:58:a5:90:99:2d:
+         da:7e:7a:9e:a7:67:17:d2:a6:8d:a6:b3:c6:46:1c:ad:9b:73:
+         ce:a7:b3:f0:f2:44:38:1e:7e:30:ab:aa:ac:64:e2:06:b4:6b:
+         39:a6:7c:52
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQFDGQ
-xMbQuRCe5HrivBar0l7XPQARvyULMhdXxPv2YA1afEMIiOY19zkP3NfvIhhSW94n
-NRCTq8CumBvhx0CovoQq5ml8xGgexA0pl1US+zCGo48DDNRLInasqNv9IExG6iGb
-WU/qnCBv/+F8fWRcS5FNrFYdGRJsr/KZQCGdBrmikCx7vK/+wEChBoli8/P9oAdh
-qsL54Q4TlpKsU7rtpTbJuQTnE2e8DmPcIilT4uNZq1wlzdn7Rk6RcN1BSzWHpP0s
-Zr51fgPpEmFmyxmIoWG3E7SrUabVWJzbjKIa2sNvy7axZdijo9GH2Lm7uMGD8YM4
-Kv2j9qZZ8ifx41ApAgMBAAGjgekwgeYwHQYDVR0OBBYEFAHQGfRrhrwXO/t0lQ9T
-vb1OyhDWMB8GA1UdIwQYMBaAFNOXxve55RdpbXg5dzoKrTItQKwHMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEBbxQ
+OGXWq5vuNoLAQzuNdRgFBS1k1/JnQduLKhoxjSW1VPOA+EcTDrMEk6jy0hISDR/6
+/AFWYGF3e5lW2icGcMw5IgGlvf4qqnBSkM3GL/mBH11vu7UOP3wDz7RHgwbb9ymg
+2qkrcoV0QKgo9gnPVHGsSAuPH1riyk5swu4huCQesEz6J4T6h7vrSMWEmFHM8a6T
+e5IeENkOThwgKe+d7KF0K8Q8nkJFrTPDbfpBVQsn0fxq4wfut8F1n2M0M5dc0Ek3
+IB77Dq68L8tIyA3Pv6M8XWMtH9VlBCW6hKabFH5/3x6xbwqRtNaKoP11i4XPva8n
++hLczxkFeG91UIhnAgMBAAGjgekwgeYwHQYDVR0OBBYEFEai4Bae92Wjnfj2NKDc
+M4p6ri6JMB8GA1UdIwQYMBaAFAyOXh6mlqUAz/eeFJS63F4G1jftMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEADrathTQ9z5wvjOeQgDP2
-EplAbYl7XAjJqfxAJB4UrGxqEao+6sEZMnVnJv7A+VXptgR0yeMiWToGWl8lbR3f
-SGKk7tCH3yCdnJWqTncFKOZmrK4j5HTfWrQh5z0PlWGEEX7YcmbdhcdB/kQS2kzH
-G6t9Sz3EOC25VIomHnYb9guK6fqfCubMbcVV8aUpIEIF1FpPJ6u25MTqTYuXU2cD
-dTIfnR64cuHEWgkV186jWe3MTQ/qwB1XGkPXemOGsLhcTzQppL6QxGs5IMklln2h
-zO73VwRp1yFmHcxObBAabocR8+OunltkBO6sxgokgOQKDolJnQ8ddLL2234lodBu
-fg==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbEEVHRaCSwkAMGm0ZDRr
+qfOXHm1Mbdh3kSGuT1Cw6/kkOQ0O2kvdai+AYWXhTidQnh6RBSMm57ZJUvFLGSUu
+8MduU/MTM2OXbpGXDZ1gCJvdn0Ao7RRXQ9i/9hZl2LO3QmGqh3XhwZMXrqJt9qxI
+BM6I7mGBUqNF58MZuxXmqX7jIS1EZzRYYwLzPxZjUfrYiyGejXpVmE+lzL4bdTE3
+F3nl3BpLX/qIYWSM5qRNM7UU4gpRbtNwJW88VsPS/cMKR/kXNGDzK1p2SfssCuGU
+ZXR1tVilkJkt2n56nqdnF9KmjaazxkYcrZtzzqez8PJEOB5+MKuqrGTiBrRrOaZ8
+Ug==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -138,30 +138,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bf:ca:00:55:10:61:e4:0e:a3:f8:57:b8:7b:19:
-                    34:5a:77:b8:06:39:88:07:0c:ec:d0:3b:4a:53:02:
-                    3c:d1:d3:da:48:ae:8a:1a:1c:3d:30:bb:b3:36:80:
-                    a1:6f:cd:32:fd:54:26:b9:77:d7:1e:11:30:6c:eb:
-                    d7:11:9a:d9:af:54:7e:0e:37:c3:8d:f3:0a:5d:ec:
-                    82:d6:6e:f3:46:f4:2a:82:24:e4:28:38:c2:fa:6a:
-                    a6:f7:38:cd:94:50:20:bd:ee:50:9e:3a:a3:40:1a:
-                    49:77:eb:b2:05:8c:01:46:e6:ef:8f:55:91:0a:7a:
-                    44:10:62:b8:9f:3e:81:31:ae:08:95:29:37:47:53:
-                    ec:f3:c7:9c:f0:be:64:70:b3:81:f0:04:f4:a4:aa:
-                    41:ad:16:8f:13:31:af:9b:eb:55:dc:93:6d:56:cf:
-                    d6:f0:0a:fb:11:9e:32:59:d4:07:28:e1:fe:60:73:
-                    bf:43:bf:ff:c9:dc:f2:ca:3a:e1:0c:bd:90:0b:c2:
-                    ab:91:d5:2e:72:5d:5e:f0:f8:45:7b:3d:37:89:d1:
-                    16:bd:9b:4f:c9:c4:34:c7:c4:23:a4:04:4b:13:db:
-                    1a:b5:82:d0:f6:cd:99:fe:f3:0d:98:81:65:5e:2f:
-                    9e:a4:c1:5b:2b:67:b5:07:2a:24:a6:e7:06:5f:49:
-                    d6:d5
+                    00:a6:d5:5d:39:25:98:e5:a1:89:9e:75:b4:1a:98:
+                    af:76:f0:08:ba:4d:5e:41:cd:92:91:25:ac:99:c4:
+                    f6:43:5b:b5:d8:43:97:7c:98:9f:0b:a5:c4:9e:88:
+                    7f:67:14:f3:48:4f:d4:90:0f:ca:05:31:83:28:8b:
+                    0d:9b:e8:51:b9:eb:dd:d7:fc:04:2c:8c:39:b9:a5:
+                    1f:68:70:23:74:40:11:f9:97:c7:6a:05:65:4a:8e:
+                    26:72:cf:e1:e7:da:d2:40:d5:d9:75:5d:85:c2:4d:
+                    3e:96:01:6e:65:52:bf:70:9c:68:84:69:2c:3d:42:
+                    28:64:c8:3f:c9:d5:b5:3f:80:98:e1:83:8a:f5:fc:
+                    79:f9:6b:08:7a:72:3a:2e:e4:48:9d:02:bd:96:4e:
+                    45:74:7a:58:43:bd:7c:0c:64:96:b9:8a:4d:9f:b3:
+                    94:b7:ac:7e:50:65:b3:d0:df:dd:d9:ac:98:26:7c:
+                    89:fe:b1:a9:a8:52:f4:94:b7:83:8b:25:53:88:61:
+                    25:f1:dd:9f:06:6d:cc:3c:79:c8:6e:a2:67:c8:b6:
+                    23:20:8b:43:fc:00:f7:58:9b:78:cb:0b:a6:b9:06:
+                    6f:9d:78:45:b1:b9:d1:d0:6b:d8:38:b9:78:4a:c5:
+                    18:86:96:07:76:08:27:9c:a6:97:e9:5c:ae:b2:f3:
+                    e7:55
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D3:97:C6:F7:B9:E5:17:69:6D:78:39:77:3A:0A:AD:32:2D:40:AC:07
+                0C:8E:5E:1E:A6:96:A5:00:CF:F7:9E:14:94:BA:DC:5E:06:D6:37:ED
             X509v3 Authority Key Identifier: 
-                keyid:64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                keyid:61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -176,41 +176,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:35:f4:84:23:56:e3:2f:d1:54:fa:eb:85:02:e1:b7:aa:94:
-         a9:73:95:1d:29:9a:35:64:ac:4a:28:a3:87:24:e1:cd:3e:9f:
-         53:14:92:ce:86:d6:ae:d5:3f:1d:97:59:ae:c4:1c:ae:78:29:
-         d7:45:a5:14:58:b6:ac:28:3e:20:e6:27:56:22:b2:bf:80:24:
-         8d:bd:ef:17:67:8f:59:74:8b:7e:41:f1:fc:4d:a8:7b:d4:cf:
-         0c:ec:41:c6:7a:2b:fc:c3:c2:92:dc:49:f6:7a:3d:bd:b0:41:
-         0c:d3:0c:dd:58:1a:42:62:80:10:ad:95:ec:a0:8a:cb:b4:b8:
-         8e:5d:45:c7:d2:82:4b:eb:cb:1a:0e:f5:40:46:0d:dd:35:a3:
-         9b:d1:3e:55:95:b1:ab:96:63:31:ac:01:b4:ef:20:bc:0d:86:
-         88:b2:e5:94:64:6b:f1:1a:73:3e:09:b0:4c:57:87:3a:65:5a:
-         84:17:af:1c:cd:a5:4e:72:8e:19:8b:50:0a:97:4b:df:69:2c:
-         4c:21:d4:d1:7e:81:74:94:60:5b:b0:5e:56:53:14:b4:52:3d:
-         c9:45:a5:47:10:74:15:86:a0:52:ba:ff:b5:32:01:ef:dd:0e:
-         17:d6:73:35:aa:1e:ca:9a:8b:2e:28:cf:fa:1b:79:be:a7:87:
-         4b:b4:0a:26
+         5f:b7:f2:f0:06:94:30:f6:09:86:d6:b2:dc:c6:d2:35:4d:07:
+         bf:b3:45:f8:0a:44:fe:fd:80:90:a0:93:73:19:19:2c:9e:21:
+         90:76:64:0c:fc:f6:26:ef:8d:e6:13:30:10:fe:7f:9f:98:9e:
+         9c:9f:a1:d2:9b:ab:99:90:df:d3:96:e3:78:ae:e5:6a:a7:2e:
+         81:b7:89:f2:a0:85:be:57:7f:7f:a0:30:e1:ce:02:e3:1c:31:
+         1f:d5:9f:e2:db:6c:9b:ab:90:ba:0c:0c:a3:92:6b:3d:f3:88:
+         4f:75:5f:42:c1:66:fe:16:93:29:3c:1f:23:f5:19:63:2d:62:
+         4a:6e:05:02:82:6e:6a:38:c0:8b:27:45:80:d3:a2:34:47:ce:
+         83:ed:00:7f:31:de:4e:8c:01:1f:63:d7:61:bc:ac:f9:45:dc:
+         12:09:fc:4c:75:d3:46:b8:2f:95:c7:ff:21:64:37:e4:79:7e:
+         2d:de:26:ef:d3:9f:2f:8f:0c:78:2f:e0:ac:10:e9:04:52:69:
+         a4:78:b5:08:1a:a2:75:38:26:62:c0:74:e6:38:d1:50:44:5b:
+         a2:40:8c:68:8e:6a:1f:fa:48:51:2b:db:d2:6b:98:1e:3f:b3:
+         67:c6:0b:a4:a9:54:54:f1:37:40:1c:53:a3:57:a1:fa:0f:da:
+         b3:aa:4d:79
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8oAVRBh
-5A6j+Fe4exk0Wne4BjmIBwzs0DtKUwI80dPaSK6KGhw9MLuzNoChb80y/VQmuXfX
-HhEwbOvXEZrZr1R+DjfDjfMKXeyC1m7zRvQqgiTkKDjC+mqm9zjNlFAgve5Qnjqj
-QBpJd+uyBYwBRubvj1WRCnpEEGK4nz6BMa4IlSk3R1Ps88ec8L5kcLOB8AT0pKpB
-rRaPEzGvm+tV3JNtVs/W8Ar7EZ4yWdQHKOH+YHO/Q7//ydzyyjrhDL2QC8KrkdUu
-cl1e8PhFez03idEWvZtPycQ0x8QjpARLE9satYLQ9s2Z/vMNmIFlXi+epMFbK2e1
-ByokpucGX0nW1QIDAQABo4HLMIHIMB0GA1UdDgQWBBTTl8b3ueUXaW14OXc6Cq0y
-LUCsBzAfBgNVHSMEGDAWgBRkkJPNrMc3Nk1rFNZn0FQ6WUU6/DA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptVdOSWY
+5aGJnnW0GpivdvAIuk1eQc2SkSWsmcT2Q1u12EOXfJifC6XEnoh/ZxTzSE/UkA/K
+BTGDKIsNm+hRuevd1/wELIw5uaUfaHAjdEAR+ZfHagVlSo4mcs/h59rSQNXZdV2F
+wk0+lgFuZVK/cJxohGksPUIoZMg/ydW1P4CY4YOK9fx5+WsIenI6LuRInQK9lk5F
+dHpYQ718DGSWuYpNn7OUt6x+UGWz0N/d2ayYJnyJ/rGpqFL0lLeDiyVTiGEl8d2f
+Bm3MPHnIbqJnyLYjIItD/AD3WJt4ywumuQZvnXhFsbnR0GvYOLl4SsUYhpYHdggn
+nKaX6VyusvPnVQIDAQABo4HLMIHIMB0GA1UdDgQWBBQMjl4eppalAM/3nhSUutxe
+BtY37TAfBgNVHSMEGDAWgBRhSTUxrjbSGP5gZ4c6/5DV7V69wDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ANI19IQjVuMv0VT664UC4beqlKlzlR0pmjVkrEooo4ck4c0+n1MUks6G1q7VPx2X
-Wa7EHK54KddFpRRYtqwoPiDmJ1Yisr+AJI297xdnj1l0i35B8fxNqHvUzwzsQcZ6
-K/zDwpLcSfZ6Pb2wQQzTDN1YGkJigBCtleygisu0uI5dRcfSgkvryxoO9UBGDd01
-o5vRPlWVsauWYzGsAbTvILwNhoiy5ZRka/Eacz4JsExXhzplWoQXrxzNpU5yjhmL
-UAqXS99pLEwh1NF+gXSUYFuwXlZTFLRSPclFpUcQdBWGoFK6/7UyAe/dDhfWczWq
-Hsqaiy4oz/obeb6nh0u0CiY=
+AF+38vAGlDD2CYbWstzG0jVNB7+zRfgKRP79gJCgk3MZGSyeIZB2ZAz89ibvjeYT
+MBD+f5+YnpyfodKbq5mQ39OW43iu5WqnLoG3ifKghb5Xf3+gMOHOAuMcMR/Vn+Lb
+bJurkLoMDKOSaz3ziE91X0LBZv4Wkyk8HyP1GWMtYkpuBQKCbmo4wIsnRYDTojRH
+zoPtAH8x3k6MAR9j12G8rPlF3BIJ/Ex100a4L5XH/yFkN+R5fi3eJu/Tny+PDHgv
+4KwQ6QRSaaR4tQgaonU4JmLAdOY40VBEW6JAjGiOah/6SFEr29JrmB4/s2fGC6Sp
+VFTxN0AcU6NXofoP2rOqTXk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -227,30 +227,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ea:cc:2d:c4:88:54:07:90:da:62:ef:77:23:b2:
-                    83:c9:54:06:25:70:65:43:f2:29:a3:f3:22:f2:09:
-                    92:31:25:77:79:63:4a:7f:d8:e5:1f:16:1a:25:bc:
-                    d4:4b:9a:b3:a0:61:7e:c3:a5:90:32:97:5a:5b:59:
-                    cf:97:d6:ac:2c:86:a7:70:ed:2d:e0:bf:e8:44:6f:
-                    41:29:55:b0:40:a8:10:d6:4d:67:2b:01:1f:7a:33:
-                    2b:ce:8f:c8:fb:54:99:e2:11:2d:75:7d:ff:f5:fb:
-                    53:e5:6b:7e:ca:b8:fc:1f:bc:8f:32:29:6d:d2:6b:
-                    a1:9b:d9:7f:b2:f6:e9:18:72:fe:45:a2:23:dc:bf:
-                    5d:1e:43:5d:2b:80:2a:71:b4:cb:67:30:cc:aa:54:
-                    76:fc:4b:a3:2b:ab:99:31:66:bf:5c:09:44:e6:c9:
-                    27:42:3a:58:b5:fd:db:06:0f:11:04:0d:2d:36:4a:
-                    02:d5:50:4d:4d:7c:ed:a4:51:49:e3:fe:44:54:30:
-                    84:b6:1f:54:28:1f:9e:41:b2:20:23:75:e5:d4:e4:
-                    bf:79:a6:ab:84:aa:dc:56:38:cf:2c:d3:8e:13:48:
-                    43:5a:eb:eb:3b:a0:36:d5:89:0c:68:e2:fb:8f:3a:
-                    82:ad:01:4b:f8:bb:b0:2e:3d:b7:6e:91:a3:70:9a:
-                    d0:41
+                    00:bd:06:64:9c:f5:b5:d8:7e:e0:68:ea:1b:31:ba:
+                    6f:f5:00:3e:52:b3:d6:b1:1a:2c:13:37:ec:31:55:
+                    ec:0e:e1:c0:52:ba:cf:2a:0a:05:e5:a2:55:c4:0b:
+                    9c:00:c7:cc:63:83:4b:d0:4c:8c:f0:74:ac:73:d5:
+                    a0:59:39:d4:f2:a5:07:6f:39:ed:6c:6f:36:cc:18:
+                    76:59:49:06:87:94:a5:a2:bd:92:65:95:f4:55:3e:
+                    45:e0:dc:52:2f:ca:a8:01:bb:7a:ba:00:f1:ba:2d:
+                    5f:4d:c2:d2:56:b0:d6:23:eb:99:7a:f5:67:ae:d3:
+                    07:75:07:4d:70:5f:75:c7:c3:fd:b5:f9:26:23:7c:
+                    08:8a:1b:58:09:59:9a:64:91:f5:c6:51:54:c8:27:
+                    e6:53:9b:73:34:11:1e:42:6b:9c:85:e7:6e:c1:1c:
+                    88:0e:cf:ca:2f:e0:fc:aa:d4:fc:24:e1:e6:4a:f4:
+                    ad:02:56:08:79:aa:0d:a6:99:03:63:a7:e0:68:51:
+                    6a:cb:d4:de:35:e3:7e:d0:1a:e1:eb:d9:ba:21:91:
+                    b9:77:66:2d:4c:55:2f:73:c8:e7:49:a0:f1:bd:22:
+                    0f:0f:ac:31:4a:76:c4:e3:2f:dc:fc:09:00:b8:a1:
+                    dd:dd:d8:36:86:66:ec:63:ae:2e:4e:27:bc:0b:46:
+                    be:e9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                64:90:93:CD:AC:C7:37:36:4D:6B:14:D6:67:D0:54:3A:59:45:3A:FC
+                61:49:35:31:AE:36:D2:18:FE:60:67:87:3A:FF:90:D5:ED:5E:BD:C0
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -265,41 +265,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         08:18:04:78:4e:5e:99:54:0e:de:99:06:87:4d:3f:7b:98:bc:
-         ac:92:ec:e2:60:54:35:c8:65:68:09:3d:8d:d9:23:ed:c3:f3:
-         7b:fd:8a:60:fb:8b:dc:66:96:3f:69:81:5b:7c:cd:1d:cd:44:
-         8d:3a:93:e4:18:94:c4:a8:56:6a:fd:ea:07:ce:b1:a0:05:b2:
-         cd:fd:bf:05:e6:52:2b:26:36:9d:e2:f2:25:f2:c8:27:5b:52:
-         13:c6:3e:55:5b:72:58:34:a1:1c:5b:17:15:69:b1:82:78:a8:
-         6b:80:81:cc:73:40:5b:c0:ad:de:a8:ec:53:4f:72:f0:1b:a6:
-         d4:ea:e6:c0:35:96:df:ef:38:15:c5:0e:e9:92:22:c4:97:0d:
-         d5:37:6f:7e:af:1f:6e:53:45:1e:3e:21:8c:25:d3:4c:aa:0d:
-         5b:08:e1:5f:aa:dc:49:1c:84:b3:30:21:ea:b6:9c:95:d4:16:
-         1c:9a:0b:17:47:a1:8c:7d:04:a0:e5:df:7d:e7:69:b7:81:2d:
-         31:09:9b:ae:da:b2:1d:13:36:ad:f1:19:7e:92:6a:1b:70:01:
-         8b:ee:88:5e:54:56:d6:dd:6e:78:b1:53:06:89:3b:e3:7e:45:
-         2c:b5:9c:c9:92:5a:0d:c2:85:d0:e1:89:20:94:c7:ef:3c:01:
-         ab:25:5c:4b
+         3e:21:b0:9f:e1:0c:4c:62:3f:0a:d8:0b:97:bc:98:de:4d:18:
+         b6:88:51:bd:db:59:dc:63:ed:13:fa:52:76:59:13:b3:aa:c6:
+         42:3a:7e:e9:3c:cd:12:68:c0:54:55:32:8a:13:17:a4:f6:64:
+         b1:22:f7:01:29:80:a6:94:c6:06:4c:e8:97:81:16:9c:ce:cf:
+         ed:fc:a3:2a:19:70:8f:10:0e:32:15:dc:25:fb:45:41:87:96:
+         1a:ef:7f:be:65:24:a7:0d:cf:77:f0:ce:b1:27:21:9d:c4:a1:
+         24:ae:f0:9e:54:f2:f3:04:ac:fe:43:f1:c0:b5:f1:48:3c:57:
+         39:fb:7e:b6:c9:b8:29:57:f5:82:2e:4f:43:60:ff:d7:3a:54:
+         64:15:a4:11:c3:5f:ea:21:84:6b:ef:e6:2d:29:8c:e5:ab:d2:
+         aa:9f:d4:b3:c2:ea:5f:76:e7:c8:9b:a4:76:4c:99:2b:05:96:
+         60:e2:1e:f9:44:d7:c5:3a:80:e0:a4:7c:f8:ca:f8:5a:c6:63:
+         2b:9c:71:5a:7d:a4:03:69:b4:e3:dd:be:1b:e4:01:b3:53:b4:
+         46:5c:c2:8b:85:62:3e:f5:87:bd:5f:73:36:a0:c4:e6:a8:bc:
+         58:c4:bf:84:67:e3:00:f6:98:64:30:66:ba:8b:92:b5:b2:7f:
+         5d:e9:75:a7
 -----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOrMLcSIVAeQ2mLvdyOy
-g8lUBiVwZUPyKaPzIvIJkjEld3ljSn/Y5R8WGiW81Euas6BhfsOlkDKXWltZz5fW
-rCyGp3DtLeC/6ERvQSlVsECoENZNZysBH3ozK86PyPtUmeIRLXV9//X7U+Vrfsq4
-/B+8jzIpbdJroZvZf7L26Rhy/kWiI9y/XR5DXSuAKnG0y2cwzKpUdvxLoyurmTFm
-v1wJRObJJ0I6WLX92wYPEQQNLTZKAtVQTU187aRRSeP+RFQwhLYfVCgfnkGyICN1
-5dTkv3mmq4Sq3FY4zyzTjhNIQ1rr6zugNtWJDGji+486gq0BS/i7sC49t26Ro3Ca
-0EECAwEAAaOByzCByDAdBgNVHQ4EFgQUZJCTzazHNzZNaxTWZ9BUOllFOvwwHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0GZJz1tdh+4GjqGzG6
+b/UAPlKz1rEaLBM37DFV7A7hwFK6zyoKBeWiVcQLnADHzGODS9BMjPB0rHPVoFk5
+1PKlB2857WxvNswYdllJBoeUpaK9kmWV9FU+ReDcUi/KqAG7eroA8botX03C0law
+1iPrmXr1Z67TB3UHTXBfdcfD/bX5JiN8CIobWAlZmmSR9cZRVMgn5lObczQRHkJr
+nIXnbsEciA7Pyi/g/KrU/CTh5kr0rQJWCHmqDaaZA2On4GhRasvU3jXjftAa4evZ
+uiGRuXdmLUxVL3PI50mg8b0iDw+sMUp2xOMv3PwJALih3d3YNoZm7GOuLk4nvAtG
+vukCAwEAAaOByzCByDAdBgNVHQ4EFgQUYUk1Ma420hj+YGeHOv+Q1e1evcAwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAIGAR4Tl6Z
-VA7emQaHTT97mLyskuziYFQ1yGVoCT2N2SPtw/N7/Ypg+4vcZpY/aYFbfM0dzUSN
-OpPkGJTEqFZq/eoHzrGgBbLN/b8F5lIrJjad4vIl8sgnW1ITxj5VW3JYNKEcWxcV
-abGCeKhrgIHMc0BbwK3eqOxTT3LwG6bU6ubANZbf7zgVxQ7pkiLElw3VN29+rx9u
-U0UePiGMJdNMqg1bCOFfqtxJHISzMCHqtpyV1BYcmgsXR6GMfQSg5d9952m3gS0x
-CZuu2rIdEzat8Rl+kmobcAGL7oheVFbW3W54sVMGiTvjfkUstZzJkloNwoXQ4Ykg
-lMfvPAGrJVxL
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA+IbCf4QxM
+Yj8K2AuXvJjeTRi2iFG921ncY+0T+lJ2WROzqsZCOn7pPM0SaMBUVTKKExek9mSx
+IvcBKYCmlMYGTOiXgRaczs/t/KMqGXCPEA4yFdwl+0VBh5Ya73++ZSSnDc938M6x
+JyGdxKEkrvCeVPLzBKz+Q/HAtfFIPFc5+362ybgpV/WCLk9DYP/XOlRkFaQRw1/q
+IYRr7+YtKYzlq9Kqn9SzwupfdufIm6R2TJkrBZZg4h75RNfFOoDgpHz4yvhaxmMr
+nHFafaQDabTj3b4b5AGzU7RGXMKLhWI+9Ye9X3M2oMTmqLxYxL+EZ+MA9phkMGa6
+i5K1sn9d6XWn
 -----END CERTIFICATE-----
 
 Certificate:
@@ -316,30 +316,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:67:cf:1d:f5:54:e9:96:54:bc:65:8c:b7:9e:
-                    72:39:05:68:3d:44:e5:93:d8:4b:61:b1:a4:b4:b4:
-                    4c:c6:a0:92:b6:4d:06:3a:5b:b2:0a:8a:27:cb:b1:
-                    e7:c3:35:47:ef:ac:2d:a7:d0:9c:b2:50:6a:58:3d:
-                    12:a4:85:dc:77:a9:08:e5:f4:1f:c0:ef:00:51:cd:
-                    68:62:d5:e5:cc:01:be:be:42:8b:35:fb:00:9c:30:
-                    84:0c:d7:35:7d:88:d1:1b:43:78:19:79:aa:06:b3:
-                    ac:5c:69:a0:23:f0:69:dc:89:59:97:05:df:01:ae:
-                    5b:8f:01:a0:78:4f:05:4e:36:ac:00:b4:8d:e8:79:
-                    05:07:f2:76:a4:63:3f:95:21:06:57:61:a9:f0:43:
-                    04:d1:92:d3:9d:bb:b3:8f:5b:ef:ab:81:a0:23:11:
-                    38:b5:02:b2:95:1d:ac:da:b8:36:60:d7:d7:01:6d:
-                    e8:ed:32:21:b4:84:97:33:7c:67:88:0e:44:c7:12:
-                    87:85:6a:49:80:82:cb:1e:16:2b:2f:6d:98:82:a0:
-                    a0:30:cc:55:df:93:65:e0:9a:08:24:8a:47:cc:69:
-                    53:3c:b7:62:fa:df:11:64:d0:3f:52:43:80:f8:cf:
-                    7b:6f:d0:65:20:fb:22:d0:43:ca:fc:fc:0f:bd:1c:
-                    42:b9
+                    00:e9:9e:ac:cf:f1:ea:0e:19:26:bc:7a:38:a4:5f:
+                    0d:33:c4:69:32:3e:0d:ca:46:55:b5:e4:cc:63:0d:
+                    b1:c7:50:99:9e:39:72:a5:05:37:22:3a:04:e0:ff:
+                    9b:3e:1f:d6:b6:b5:f1:a9:38:58:a0:a2:a6:b7:7b:
+                    48:6f:dc:8f:f4:32:7d:ca:a5:4f:bd:fa:26:9c:8b:
+                    c1:01:ed:7f:ed:d5:f1:ef:b1:42:df:36:bd:06:8a:
+                    b0:2f:49:74:65:5f:f4:01:c6:b8:3d:bf:25:fd:cb:
+                    49:ce:e2:c6:a5:3e:7e:18:92:27:5f:60:82:b3:78:
+                    77:39:bb:ea:05:b1:e0:c2:74:b6:7f:f4:42:7b:ae:
+                    24:1b:e5:f9:ef:24:48:13:af:05:75:6c:4f:da:e3:
+                    59:c4:ad:2f:46:6c:8c:dc:5a:2e:75:57:31:b7:1e:
+                    8c:57:43:c7:68:4b:b9:e7:73:41:6f:45:09:79:e0:
+                    cc:69:98:80:c2:9d:e0:7a:e1:e0:57:d2:6f:0f:af:
+                    27:70:01:0f:2a:c1:f2:83:64:09:c7:3b:ad:80:12:
+                    19:6a:b0:b1:3c:39:e3:fa:8a:a8:23:3f:f0:1f:6c:
+                    8c:63:e8:9a:7c:8a:a6:fd:9b:a6:ca:46:7c:de:39:
+                    5d:ba:0b:5e:17:5c:e1:0b:8f:5c:fa:79:66:96:d9:
+                    d2:41
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
             X509v3 Authority Key Identifier: 
-                keyid:5D:A1:03:3D:8F:13:F9:08:AF:1E:83:6C:BC:DE:6F:A3:B5:C2:1A:EA
+                keyid:BF:31:B9:15:B8:E4:01:6E:B1:24:AC:DA:D7:4B:70:C0:D1:16:8F:FC
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -354,41 +354,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7f:ec:13:f0:46:53:d5:75:08:a5:37:44:9c:47:19:9e:05:ef:
-         d6:30:68:1e:0b:c8:3c:84:93:51:36:25:48:60:56:d4:79:1f:
-         b6:2c:91:e3:6f:61:f9:e7:7d:c8:b6:7b:70:7f:27:6d:2c:38:
-         ec:73:e4:8c:86:f4:48:8e:1b:09:0d:9f:f8:5a:1f:95:ed:f1:
-         03:ea:99:64:d6:2d:46:4e:b8:0b:67:10:98:8e:19:2e:31:e1:
-         e3:d6:fe:7c:97:e9:a3:7a:18:25:9c:d4:4f:ce:a9:11:1d:f0:
-         53:32:8a:e8:8e:8d:80:fb:f1:c1:c1:6a:c1:cf:d2:36:a2:b1:
-         f9:32:9e:05:fd:73:1a:b9:37:e5:55:b2:1e:78:84:a5:04:45:
-         4a:d5:24:ad:20:39:fe:ab:ce:38:dd:c0:1e:2f:dd:ce:b4:5c:
-         49:1d:ab:7a:e1:bd:e9:a6:d2:02:64:8a:a9:97:36:89:42:c2:
-         82:14:ec:aa:dd:77:be:b1:d6:d2:4f:8b:a4:fe:5b:06:28:1c:
-         2f:4e:83:15:1f:10:a9:c6:ce:8e:a6:ca:bb:2c:01:6a:ae:99:
-         59:44:05:fc:a5:7e:fe:73:5f:df:b5:0b:48:b5:43:b6:10:9f:
-         42:2e:8b:65:f6:47:25:27:66:ef:a6:a0:ca:d3:cc:9c:ac:2d:
-         22:5b:87:5c
+         d3:ff:ab:16:f3:f5:25:e8:4f:77:fb:d2:98:0f:62:60:29:66:
+         71:d3:f9:e9:7d:06:03:1f:1e:59:0f:dc:12:39:13:47:a7:ab:
+         85:a2:38:8e:bf:f4:20:e9:de:b7:61:39:cc:b3:dc:97:1d:7d:
+         2d:5f:22:14:48:aa:13:6f:1f:a2:d4:c4:cb:1e:88:d5:b0:1d:
+         38:7a:8d:4c:c8:14:59:58:ba:64:83:1c:80:94:0a:9a:04:e1:
+         f8:b6:3f:fb:cb:3f:d5:d8:52:ea:83:d9:07:d3:6f:d0:81:ff:
+         05:d0:7b:3c:ab:8c:72:86:95:9d:21:d6:9d:41:3d:47:57:8b:
+         ae:fb:b2:91:0a:2a:9d:57:85:73:e5:f5:6d:cb:22:18:03:aa:
+         b0:89:e4:ac:e7:5f:32:46:1e:52:3d:e2:fc:75:04:77:43:a7:
+         db:85:c4:19:3a:ba:a9:a3:98:1b:c4:b5:b5:6a:ee:5a:b1:d8:
+         12:da:46:5f:3e:82:90:74:8a:19:e7:84:1a:f2:10:98:67:2d:
+         75:7e:eb:85:9a:ad:af:e3:e5:ee:5a:f8:61:19:1f:e6:df:e9:
+         8d:a8:50:90:7e:87:25:d4:b5:5b:2f:d5:98:b7:40:1f:41:1a:
+         62:48:b7:ac:c0:c0:85:7d:8c:20:8b:54:53:d2:b6:ad:a1:6d:
+         fa:7d:d6:a8
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdnzx31VOmWVLxljLee
-cjkFaD1E5ZPYS2GxpLS0TMagkrZNBjpbsgqKJ8ux58M1R++sLafQnLJQalg9EqSF
-3HepCOX0H8DvAFHNaGLV5cwBvr5CizX7AJwwhAzXNX2I0RtDeBl5qgazrFxpoCPw
-adyJWZcF3wGuW48BoHhPBU42rAC0jeh5BQfydqRjP5UhBldhqfBDBNGS0527s49b
-76uBoCMROLUCspUdrNq4NmDX1wFt6O0yIbSElzN8Z4gORMcSh4VqSYCCyx4WKy9t
-mIKgoDDMVd+TZeCaCCSKR8xpUzy3YvrfEWTQP1JDgPjPe2/QZSD7ItBDyvz8D70c
-QrkCAwEAAaOByzCByDAdBgNVHQ4EFgQUXaEDPY8T+QivHoNsvN5vo7XCGuowHwYD
-VR0jBBgwFoAUXaEDPY8T+QivHoNsvN5vo7XCGuowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmerM/x6g4ZJrx6OKRf
+DTPEaTI+DcpGVbXkzGMNscdQmZ45cqUFNyI6BOD/mz4f1ra18ak4WKCiprd7SG/c
+j/QyfcqlT736JpyLwQHtf+3V8e+xQt82vQaKsC9JdGVf9AHGuD2/Jf3LSc7ixqU+
+fhiSJ19ggrN4dzm76gWx4MJ0tn/0QnuuJBvl+e8kSBOvBXVsT9rjWcStL0ZsjNxa
+LnVXMbcejFdDx2hLuedzQW9FCXngzGmYgMKd4Hrh4FfSbw+vJ3ABDyrB8oNkCcc7
+rYASGWqwsTw54/qKqCM/8B9sjGPomnyKpv2bpspGfN45XboLXhdc4QuPXPp5ZpbZ
+0kECAwEAAaOByzCByDAdBgNVHQ4EFgQUvzG5FbjkAW6xJKza10twwNEWj/wwHwYD
+VR0jBBgwFoAUvzG5FbjkAW6xJKza10twwNEWj/wwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/7BPwRlPV
-dQilN0ScRxmeBe/WMGgeC8g8hJNRNiVIYFbUeR+2LJHjb2H5533ItntwfydtLDjs
-c+SMhvRIjhsJDZ/4Wh+V7fED6plk1i1GTrgLZxCYjhkuMeHj1v58l+mjehglnNRP
-zqkRHfBTMorojo2A+/HBwWrBz9I2orH5Mp4F/XMauTflVbIeeISlBEVK1SStIDn+
-q8443cAeL93OtFxJHat64b3pptICZIqplzaJQsKCFOyq3Xe+sdbST4uk/lsGKBwv
-ToMVHxCpxs6Opsq7LAFqrplZRAX8pX7+c1/ftQtItUO2EJ9CLotl9kclJ2bvpqDK
-08ycrC0iW4dc
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDT/6sW8/Ul
+6E93+9KYD2JgKWZx0/npfQYDHx5ZD9wSORNHp6uFojiOv/Qg6d63YTnMs9yXHX0t
+XyIUSKoTbx+i1MTLHojVsB04eo1MyBRZWLpkgxyAlAqaBOH4tj/7yz/V2FLqg9kH
+02/Qgf8F0Hs8q4xyhpWdIdadQT1HV4uu+7KRCiqdV4Vz5fVtyyIYA6qwieSs518y
+Rh5SPeL8dQR3Q6fbhcQZOrqpo5gbxLW1au5asdgS2kZfPoKQdIoZ54Qa8hCYZy11
+fuuFmq2v4+XuWvhhGR/m3+mNqFCQfocl1LVbL9WYt0AfQRpiSLeswMCFfYwgi1RT
+0ratoW36fdao
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -400,3 +400,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
index bc2fec4..4271d15 100644
--- a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a5:fd:12:f2:87:40:5c:07:a7:7c:a8:7a:2c:2c:
-                    9e:de:bc:e5:8e:c6:55:90:ce:5d:a9:e6:c8:7d:5a:
-                    9f:b1:f7:32:b4:90:9c:80:12:a2:43:fa:71:95:54:
-                    76:45:b3:28:cc:93:05:f1:f4:e9:5d:1d:4e:5d:1a:
-                    a1:ad:a5:4b:4f:50:7a:c2:cd:63:2c:de:5d:54:74:
-                    09:8b:d2:5b:1f:0e:49:b4:ce:cc:24:f4:9d:f7:ca:
-                    65:6e:58:02:c0:8d:06:35:81:01:b1:2d:37:07:1e:
-                    9b:07:fa:a3:12:6b:32:bb:98:f1:41:03:2f:17:b5:
-                    5a:d3:bd:b0:2a:0c:be:2f:34:29:ba:87:44:a5:d9:
-                    b7:1c:c0:ff:c5:dd:bf:21:78:38:71:ce:7a:54:d1:
-                    97:d9:aa:86:84:eb:2c:17:bf:61:1b:4b:10:54:a2:
-                    a1:a6:ec:01:04:f8:f3:c8:6c:2f:30:15:e0:da:94:
-                    49:98:01:de:e6:c4:04:57:bb:f5:6d:09:53:e1:ff:
-                    76:94:cc:ba:2c:74:70:b7:f9:d4:10:35:8a:b0:8c:
-                    4c:5b:5f:5c:db:e3:a5:b6:c9:d5:b4:13:7c:17:77:
-                    fd:ac:0d:65:fb:0a:a4:d4:0e:a5:2e:8f:ef:0d:5c:
-                    c1:9b:00:c1:dd:0d:4f:c3:7e:3b:3b:a7:4a:d2:99:
-                    f0:e3
+                    00:d0:1d:d2:c0:02:fe:ab:1e:5f:11:a8:41:9e:1a:
+                    70:00:73:89:d1:39:d7:64:fe:52:f4:ed:7a:1d:e5:
+                    7a:5f:d5:0c:23:91:19:0e:c3:2d:33:b7:10:a1:ab:
+                    7b:69:4f:80:d4:1d:23:3c:aa:eb:9b:85:a7:92:3a:
+                    fd:e4:7e:43:0d:66:b0:f1:ae:86:21:10:f1:15:02:
+                    db:57:fc:8d:f4:f4:84:ce:7a:ac:93:7e:9a:2b:96:
+                    c2:b6:4f:4b:6b:d3:b6:a6:b3:af:7c:8e:91:e4:95:
+                    fe:33:35:e0:25:01:5b:2d:be:23:a6:db:21:69:24:
+                    2e:5c:2d:c1:88:93:c3:c2:95:03:aa:18:f3:d8:0f:
+                    b0:3c:7d:86:fc:c0:e4:58:17:78:61:6f:17:52:f1:
+                    a7:5f:33:31:9d:f1:75:6d:2c:0d:fd:c0:55:1d:c7:
+                    d3:f4:c6:dc:9c:2a:5f:20:dd:81:6c:a6:73:53:25:
+                    2f:f1:55:a9:ae:74:e7:15:bb:5f:75:f1:b1:d1:69:
+                    76:36:01:b0:bb:b1:b2:84:ad:60:49:8d:6c:9e:d5:
+                    3c:69:ae:da:0a:a6:1e:51:02:11:21:8e:eb:d8:8c:
+                    2e:e2:49:4b:67:06:98:2d:47:9d:01:49:87:3a:35:
+                    36:22:cd:91:87:16:78:50:71:b3:86:41:9e:28:27:
+                    b7:91
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                8E:F7:4C:4C:A6:3A:4A:DA:FB:BE:DE:D3:24:D2:56:B5:3D:55:43:18
+                AF:0E:FD:05:79:FF:C7:96:E2:6B:65:4D:31:83:3A:53:42:4E:AC:25
             X509v3 Authority Key Identifier: 
-                keyid:25:1D:DB:44:41:CD:DE:76:AA:96:3B:9B:5B:17:24:39:86:B7:DD:E0
+                keyid:C7:39:7C:24:26:48:4A:25:80:EC:86:32:6E:24:B7:AF:2D:3C:8C:64
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6e:29:ba:73:d2:ce:13:e8:a8:61:cc:1c:c9:63:c3:e5:62:72:
-         3d:bd:19:d9:10:ce:04:5c:b4:1a:0c:52:c6:57:4d:d0:a7:2d:
-         a7:11:90:78:72:8c:1c:56:4f:e4:be:4e:de:6e:f3:e1:eb:7e:
-         9c:05:86:e4:f2:22:69:7b:7d:43:df:4e:a9:11:4d:8a:68:33:
-         a3:7d:9b:b1:04:9c:c2:bf:d4:9f:78:d9:8f:a5:51:9a:20:8a:
-         79:c8:40:49:e4:30:d1:b9:9b:09:5e:3d:5e:93:f5:84:e5:2b:
-         9f:1e:56:1c:2d:ef:09:34:8c:db:a0:b6:f0:91:88:91:6b:1f:
-         4e:86:11:b6:62:33:63:8b:03:b2:40:d2:b8:28:33:e1:33:5d:
-         ae:e4:0c:08:4b:ab:05:08:6c:4a:b2:b7:cd:cd:28:7f:4a:5c:
-         4c:9d:fa:93:c7:00:fa:47:4e:00:ca:2d:2b:c9:ed:da:e8:33:
-         23:b6:98:f1:e5:6f:1b:cc:8b:e2:27:b2:1d:46:53:39:29:45:
-         46:1a:50:94:c0:e7:5e:a4:ef:a3:ee:13:7a:81:89:e2:4e:f9:
-         5e:1c:e3:ee:fe:d9:6d:7b:85:c6:99:ed:b0:30:d4:ef:16:65:
-         1f:37:d9:f9:c1:54:c2:d9:18:3f:e9:89:a3:28:6a:ad:fc:a2:
-         01:b8:82:d3
+         38:9c:d0:a9:cd:d2:c4:1a:a1:77:b6:2f:22:12:2d:e4:1f:f3:
+         7f:05:68:0c:34:22:2b:bc:4c:4a:58:ce:9a:4b:20:e5:b0:b2:
+         c7:81:a3:cc:b0:a4:d2:ce:96:ed:56:2e:bb:33:d6:a4:81:53:
+         52:3a:5d:35:b1:3d:74:70:a4:f6:85:a8:60:e2:e7:79:d6:48:
+         2c:3e:05:63:4b:42:10:1c:cc:5c:e8:13:ac:97:e1:7c:17:c1:
+         4c:bc:6b:66:0e:e9:56:0a:92:05:94:dc:ad:3a:49:8c:f2:e6:
+         31:23:33:d3:ad:ac:63:5e:18:ce:9e:85:78:c2:99:d3:7d:19:
+         bd:a3:a3:83:7e:6b:2d:ed:33:df:88:2f:e4:66:77:2f:6a:4f:
+         22:48:68:c8:73:58:2d:cf:8c:f1:e7:cd:e4:16:7d:5b:0d:f6:
+         7a:30:43:be:1d:17:83:43:6e:13:c3:8a:8b:0b:cc:20:e8:f2:
+         d6:9c:da:09:eb:1b:c1:20:69:70:29:fb:bf:96:ec:3b:c9:ae:
+         e2:27:f2:6e:22:bf:04:9e:1c:6a:1a:11:b9:1e:52:b7:01:c4:
+         ae:93:91:14:b4:c9:52:9f:b4:bb:34:38:5f:87:ba:c6:5a:b4:
+         3c:6f:ad:f3:a9:05:40:c9:98:1b:e0:5e:a5:ff:13:9b:db:c6:
+         19:df:0a:11
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCl/RLy
-h0BcB6d8qHosLJ7evOWOxlWQzl2p5sh9Wp+x9zK0kJyAEqJD+nGVVHZFsyjMkwXx
-9OldHU5dGqGtpUtPUHrCzWMs3l1UdAmL0lsfDkm0zswk9J33ymVuWALAjQY1gQGx
-LTcHHpsH+qMSazK7mPFBAy8XtVrTvbAqDL4vNCm6h0Sl2bccwP/F3b8heDhxznpU
-0ZfZqoaE6ywXv2EbSxBUoqGm7AEE+PPIbC8wFeDalEmYAd7mxARXu/VtCVPh/3aU
-zLosdHC3+dQQNYqwjExbX1zb46W2ydW0E3wXd/2sDWX7CqTUDqUuj+8NXMGbAMHd
-DU/Dfjs7p0rSmfDjAgMBAAGjgekwgeYwHQYDVR0OBBYEFI73TEymOkra+77e0yTS
-VrU9VUMYMB8GA1UdIwQYMBaAFCUd20RBzd52qpY7m1sXJDmGt93gMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQHdLA
+Av6rHl8RqEGeGnAAc4nROddk/lL07Xod5Xpf1QwjkRkOwy0ztxChq3tpT4DUHSM8
+quubhaeSOv3kfkMNZrDxroYhEPEVAttX/I309ITOeqyTfporlsK2T0tr07ams698
+jpHklf4zNeAlAVstviOm2yFpJC5cLcGIk8PClQOqGPPYD7A8fYb8wORYF3hhbxdS
+8adfMzGd8XVtLA39wFUdx9P0xtycKl8g3YFspnNTJS/xVamudOcVu1918bHRaXY2
+AbC7sbKErWBJjWye1TxprtoKph5RAhEhjuvYjC7iSUtnBpgtR50BSYc6NTYizZGH
+FnhQcbOGQZ4oJ7eRAgMBAAGjgekwgeYwHQYDVR0OBBYEFK8O/QV5/8eW4mtlTTGD
+OlNCTqwlMB8GA1UdIwQYMBaAFMc5fCQmSEolgOyGMm4kt68tPIxkMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAbim6c9LOE+ioYcwcyWPD
-5WJyPb0Z2RDOBFy0GgxSxldN0KctpxGQeHKMHFZP5L5O3m7z4et+nAWG5PIiaXt9
-Q99OqRFNimgzo32bsQScwr/Un3jZj6VRmiCKechASeQw0bmbCV49XpP1hOUrnx5W
-HC3vCTSM26C28JGIkWsfToYRtmIzY4sDskDSuCgz4TNdruQMCEurBQhsSrK3zc0o
-f0pcTJ36k8cA+kdOAMotK8nt2ugzI7aY8eVvG8yL4ieyHUZTOSlFRhpQlMDnXqTv
-o+4TeoGJ4k75Xhzj7v7ZbXuFxpntsDDU7xZlHzfZ+cFUwtkYP+mJoyhqrfyiAbiC
-0w==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOJzQqc3SxBqhd7YvIhIt
+5B/zfwVoDDQiK7xMSljOmksg5bCyx4GjzLCk0s6W7VYuuzPWpIFTUjpdNbE9dHCk
+9oWoYOLnedZILD4FY0tCEBzMXOgTrJfhfBfBTLxrZg7pVgqSBZTcrTpJjPLmMSMz
+062sY14Yzp6FeMKZ030ZvaOjg35rLe0z34gv5GZ3L2pPIkhoyHNYLc+M8efN5BZ9
+Ww32ejBDvh0Xg0NuE8OKiwvMIOjy1pzaCesbwSBpcCn7v5bsO8mu4ifybiK/BJ4c
+ahoRuR5StwHErpORFLTJUp+0uzQ4X4e6xlq0PG+t86kFQMmYG+Bepf8Tm9vGGd8K
+EQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:dd:9f:7d:91:ef:30:35:17:fe:58:20:b0:99:23:
-                    d3:ce:e4:f6:b2:05:82:69:5b:4c:e4:94:40:41:ad:
-                    d6:6b:b3:44:08:50:be:9f:b3:f4:26:d6:10:50:52:
-                    e3:a4:71:bd:3d:ed:f0:a8:30:da:21:06:aa:d9:ae:
-                    62:51:ed:06:c1:6e:f5:e2:23:a8:62:db:04:b7:0f:
-                    69:84:39:1f:3d:46:28:ae:a0:56:fe:aa:9b:68:0e:
-                    30:65:6a:38:f8:a6:66:12:78:99:cc:8e:c9:80:15:
-                    ab:5a:66:75:71:42:4d:8c:32:2c:15:a7:6d:c9:51:
-                    c8:d8:88:28:56:03:e4:ab:98:3b:52:d9:01:f0:4d:
-                    18:71:cf:d3:82:cb:62:af:6c:12:8a:a2:4b:44:c7:
-                    a7:61:fd:d6:34:89:c6:f0:6e:2c:77:fd:cc:93:a9:
-                    90:5b:85:e7:46:1c:04:41:3d:df:02:79:c3:e6:98:
-                    66:28:b0:39:9b:59:ce:5e:8c:d1:63:b1:28:a3:05:
-                    a3:79:93:3a:dd:92:8b:d2:07:15:96:61:27:98:ae:
-                    53:78:3f:da:79:09:01:e7:dc:03:c4:05:8f:e5:52:
-                    b3:bc:d8:8f:6d:0a:89:21:a6:cf:b5:db:1c:65:67:
-                    4c:5f:5e:33:24:d7:3c:3e:61:ce:9a:4e:6e:e7:a5:
-                    30:9f
+                    00:be:b9:02:79:50:20:a3:e5:6d:2e:79:97:1a:94:
+                    82:1d:25:8f:a5:f8:66:c3:13:91:aa:35:ec:99:d2:
+                    da:75:c8:80:bc:05:2d:6c:c6:53:f2:a8:78:ed:60:
+                    f4:f3:56:40:65:3d:d6:ea:fa:62:87:16:ed:eb:c7:
+                    54:8e:d3:0b:61:63:bb:6d:3d:a7:7b:9e:ac:9b:dc:
+                    2e:8a:68:2a:79:81:52:79:fb:d7:b7:24:29:e5:c3:
+                    36:57:bd:02:20:9e:e2:73:20:82:6d:7f:7e:8f:9a:
+                    0a:4e:3d:a0:1f:b3:ca:20:82:70:a6:bc:08:b7:97:
+                    b3:b7:cf:04:2c:e1:96:e6:7a:6f:bf:b0:47:6a:fc:
+                    fb:03:75:1a:7f:27:03:a0:5c:62:23:5c:59:94:28:
+                    71:c2:a7:15:6a:87:9a:22:63:5d:a3:dd:49:b6:c2:
+                    57:1b:89:d1:4a:75:dd:b8:a7:87:29:32:37:da:69:
+                    15:2e:fb:37:e8:aa:db:12:7c:13:9e:44:49:b6:67:
+                    eb:fa:87:36:3c:93:62:fc:f5:f7:2b:42:56:4f:3e:
+                    4f:a7:3a:18:ee:45:aa:9c:ab:dc:0d:8b:74:47:e3:
+                    a4:ed:69:71:7f:49:72:46:b4:d2:b5:00:eb:e0:8c:
+                    32:e0:d2:35:9c:f2:34:e7:4d:a3:56:c0:1b:fd:d8:
+                    f8:7f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                25:1D:DB:44:41:CD:DE:76:AA:96:3B:9B:5B:17:24:39:86:B7:DD:E0
+                C7:39:7C:24:26:48:4A:25:80:EC:86:32:6E:24:B7:AF:2D:3C:8C:64
             X509v3 Authority Key Identifier: 
-                keyid:63:A2:D5:4E:83:BA:38:5F:50:C5:93:E5:5C:93:9D:DE:55:08:73:A9
+                keyid:EA:EB:56:0E:30:42:FC:D3:45:B9:0B:D8:88:4C:F0:E9:B8:D6:F4:3C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         c5:e9:f1:a5:8e:03:ae:78:a2:51:87:0b:ee:26:02:97:5e:31:
-         41:72:f2:7c:00:46:1b:45:51:02:03:4e:16:d0:69:61:e9:7e:
-         aa:fc:5f:5e:6b:63:99:98:c0:cf:36:96:ae:82:56:70:13:33:
-         8d:f2:00:7a:b3:50:c7:15:ad:56:1b:ab:1a:6f:27:a4:e1:65:
-         da:22:4c:11:32:02:23:30:f8:7c:63:4d:c6:3b:5f:5b:55:37:
-         82:29:0d:74:ff:49:4c:10:25:60:4b:3f:e8:06:1f:47:67:38:
-         26:df:c4:92:d8:c4:9a:c8:bd:e6:1f:b9:52:2e:70:f7:21:48:
-         43:6b:f5:40:07:c7:fd:15:51:80:54:c6:c8:74:14:a9:56:bd:
-         ad:b4:d4:da:a3:1d:b4:c4:91:73:0a:3d:1e:71:e0:97:e2:d4:
-         79:8d:00:42:a7:8a:28:a2:2c:49:94:3f:23:e6:66:75:42:88:
-         66:e5:98:14:b0:8d:76:d3:80:32:60:e9:05:18:65:ff:c8:4d:
-         3b:ea:b3:d1:77:1b:7f:d1:99:c9:b5:58:72:ea:49:d4:31:68:
-         28:2d:04:3c:49:99:f0:3a:74:11:91:0e:82:46:84:c7:54:7c:
-         0b:9b:1a:64:ea:e3:9c:d4:c2:b9:90:e8:0e:2c:82:8b:2a:e1:
-         d1:03:32:77
+         1c:c7:a3:8a:bf:92:37:da:ef:79:5f:53:60:f5:ce:90:9c:51:
+         4e:20:61:4c:c2:bf:8c:9a:ed:2a:c7:aa:3f:c4:9b:b3:28:db:
+         7f:2c:95:18:34:d0:c0:0d:98:50:24:d0:31:de:3e:b5:ca:5f:
+         2f:34:44:3c:5c:24:d3:a8:48:d1:52:68:74:20:f4:f9:7f:8b:
+         40:80:b4:b6:c7:a5:95:4c:64:e1:6b:20:48:57:29:58:70:a1:
+         16:3a:b7:f5:5e:25:c5:77:96:10:1c:67:03:95:fc:d0:d0:42:
+         ce:26:5a:a0:6f:40:c4:83:30:96:36:f5:b9:9e:17:20:3b:a5:
+         96:9f:49:cf:9b:9f:86:5e:be:13:17:1b:7e:54:0f:02:01:68:
+         b7:fb:49:81:48:59:bc:ea:d3:fb:47:49:65:68:bd:2e:97:0c:
+         4f:f6:3c:34:77:07:16:8b:68:66:d4:a8:68:09:57:40:6d:5d:
+         bf:d2:7b:94:e3:a6:73:be:73:30:13:e9:47:71:25:17:7a:78:
+         ca:7e:ef:68:ac:a5:2d:80:60:56:7e:3d:89:d5:76:3f:5f:ac:
+         7f:95:65:b0:34:f3:50:9c:e8:d3:f2:23:14:50:3d:0d:fe:3a:
+         73:a7:f5:13:8f:72:bb:38:04:a2:d2:6e:fa:c3:b9:f8:bc:5d:
+         4a:ee:c0:34
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Z99ke8w
-NRf+WCCwmSPTzuT2sgWCaVtM5JRAQa3Wa7NECFC+n7P0JtYQUFLjpHG9Pe3wqDDa
-IQaq2a5iUe0GwW714iOoYtsEtw9phDkfPUYorqBW/qqbaA4wZWo4+KZmEniZzI7J
-gBWrWmZ1cUJNjDIsFadtyVHI2IgoVgPkq5g7UtkB8E0Ycc/Tgstir2wSiqJLRMen
-Yf3WNInG8G4sd/3Mk6mQW4XnRhwEQT3fAnnD5phmKLA5m1nOXozRY7EoowWjeZM6
-3ZKL0gcVlmEnmK5TeD/aeQkB59wDxAWP5VKzvNiPbQqJIabPtdscZWdMX14zJNc8
-PmHOmk5u56UwnwIDAQABo4HLMIHIMB0GA1UdDgQWBBQlHdtEQc3edqqWO5tbFyQ5
-hrfd4DAfBgNVHSMEGDAWgBRjotVOg7o4X1DFk+Vck53eVQhzqTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvrkCeVAg
+o+VtLnmXGpSCHSWPpfhmwxORqjXsmdLadciAvAUtbMZT8qh47WD081ZAZT3W6vpi
+hxbt68dUjtMLYWO7bT2ne56sm9wuimgqeYFSefvXtyQp5cM2V70CIJ7icyCCbX9+
+j5oKTj2gH7PKIIJwprwIt5ezt88ELOGW5npvv7BHavz7A3UafycDoFxiI1xZlChx
+wqcVaoeaImNdo91JtsJXG4nRSnXduKeHKTI32mkVLvs36KrbEnwTnkRJtmfr+oc2
+PJNi/PX3K0JWTz5PpzoY7kWqnKvcDYt0R+Ok7Wlxf0lyRrTStQDr4Iwy4NI1nPI0
+502jVsAb/dj4fwIDAQABo4HLMIHIMB0GA1UdDgQWBBTHOXwkJkhKJYDshjJuJLev
+LTyMZDAfBgNVHSMEGDAWgBTq61YOMEL800W5C9iITPDpuNb0PDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AMXp8aWOA654olGHC+4mApdeMUFy8nwARhtFUQIDThbQaWHpfqr8X15rY5mYwM82
-lq6CVnATM43yAHqzUMcVrVYbqxpvJ6ThZdoiTBEyAiMw+HxjTcY7X1tVN4IpDXT/
-SUwQJWBLP+gGH0dnOCbfxJLYxJrIveYfuVIucPchSENr9UAHx/0VUYBUxsh0FKlW
-va201NqjHbTEkXMKPR5x4Jfi1HmNAEKniiiiLEmUPyPmZnVCiGblmBSwjXbTgDJg
-6QUYZf/ITTvqs9F3G3/Rmcm1WHLqSdQxaCgtBDxJmfA6dBGRDoJGhMdUfAubGmTq
-45zUwrmQ6A4sgosq4dEDMnc=
+ABzHo4q/kjfa73lfU2D1zpCcUU4gYUzCv4ya7SrHqj/Em7Mo238slRg00MANmFAk
+0DHePrXKXy80RDxcJNOoSNFSaHQg9Pl/i0CAtLbHpZVMZOFrIEhXKVhwoRY6t/Ve
+JcV3lhAcZwOV/NDQQs4mWqBvQMSDMJY29bmeFyA7pZafSc+bn4ZevhMXG35UDwIB
+aLf7SYFIWbzq0/tHSWVovS6XDE/2PDR3BxaLaGbUqGgJV0BtXb/Se5TjpnO+czAT
+6UdxJRd6eMp+72ispS2AYFZ+PYnVdj9frH+VZbA081Cc6NPyIxRQPQ3+OnOn9ROP
+crs4BKLSbvrDufi8XUruwDQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d4:fa:c0:4f:fa:75:57:2e:07:a4:26:6d:43:48:
-                    a2:47:06:03:dd:a3:f2:10:d1:66:21:4f:fa:28:42:
-                    b9:4f:c1:f5:4c:fa:dc:ad:92:30:50:2a:ce:ac:db:
-                    05:cd:c2:19:26:b8:de:46:0e:ec:14:9b:27:92:71:
-                    bd:e9:a5:28:55:eb:27:71:dc:ff:d7:2b:ea:ed:f0:
-                    5b:e3:38:bc:35:f8:7b:ec:5d:ba:67:8d:d8:8a:95:
-                    bb:a2:01:32:3e:a6:d2:d3:a2:c7:70:f5:7c:fb:53:
-                    6f:b8:11:48:af:0c:a0:60:87:98:43:87:ff:d2:c2:
-                    18:b5:50:67:18:ee:06:8f:80:ff:4b:02:c6:c3:01:
-                    34:e2:7e:fa:60:62:23:2c:8a:68:ae:5a:0f:ad:1a:
-                    52:1f:7f:58:ae:9a:50:6e:fb:c7:53:1a:b6:b7:92:
-                    5d:ba:65:53:4c:73:b4:ed:c5:b5:b4:3a:f6:cb:79:
-                    b3:87:f9:69:ac:29:e5:e4:bb:54:89:bf:45:bf:0c:
-                    b9:83:6c:31:3e:a5:6e:7d:50:f1:68:f8:3d:ca:c2:
-                    3f:9f:5c:61:35:21:bc:6a:a2:77:2c:53:22:71:2e:
-                    96:70:f9:c2:c3:f6:3a:8c:3a:a4:00:f9:55:d4:01:
-                    6e:be:fc:f9:9a:2b:78:7e:3c:25:e9:09:87:47:5e:
-                    a5:4d
+                    00:b6:a5:77:05:c8:3c:ec:e8:01:e4:a7:d9:ea:ae:
+                    3a:b2:0f:ba:09:36:36:9e:e1:20:68:4c:c3:35:48:
+                    92:ff:a1:3d:0b:0f:ba:57:dd:8a:fe:a3:6c:24:5a:
+                    4d:45:64:fe:c7:6d:60:7b:eb:6a:69:f3:24:a4:4c:
+                    43:34:2b:c8:f5:dd:f8:50:bb:3e:3a:71:d7:d4:7a:
+                    63:43:46:c3:0d:54:0f:ba:0d:d4:47:b6:25:98:13:
+                    84:c5:6a:cd:1b:57:57:6c:c1:f6:08:e8:77:e7:71:
+                    5e:c3:76:56:18:7a:78:fa:e1:c9:89:17:f8:3d:c4:
+                    d7:55:c0:85:5b:32:ee:db:a8:08:b2:31:87:b3:cd:
+                    dd:c4:e2:06:17:39:5c:9c:45:74:c8:ce:4d:58:37:
+                    de:f1:8a:a5:c9:8d:21:45:69:9c:46:3e:bf:f8:68:
+                    69:20:fa:e4:14:ca:2f:94:da:ad:30:de:69:35:43:
+                    32:9e:6d:b3:d9:e9:a3:21:41:75:f0:26:19:84:32:
+                    33:21:c6:05:b5:6b:39:2f:3c:f9:1f:ec:52:8b:9d:
+                    29:8d:c7:94:de:a3:0e:72:2b:92:e9:9d:aa:21:33:
+                    d1:34:e9:4d:1d:82:4e:b0:2e:9f:c6:65:be:b6:7f:
+                    f1:57:92:e5:f3:b0:ef:52:74:04:28:a2:c1:16:f4:
+                    53:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                63:A2:D5:4E:83:BA:38:5F:50:C5:93:E5:5C:93:9D:DE:55:08:73:A9
+                EA:EB:56:0E:30:42:FC:D3:45:B9:0B:D8:88:4C:F0:E9:B8:D6:F4:3C
             X509v3 Authority Key Identifier: 
-                keyid:F9:8A:EA:DF:3D:59:DD:70:5F:B5:B8:D5:24:99:76:02:DC:6E:30:8F
+                keyid:58:23:6F:FD:7A:05:9C:E1:4D:0D:C5:7D:77:B3:D7:75:B1:11:F8:E1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/ShadowRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         ce:fc:9e:82:80:f8:42:20:0d:93:e5:35:7d:8b:44:89:7b:dd:
-         a6:2b:dd:69:ee:16:da:2c:98:76:31:ae:7e:b3:c2:30:e5:9d:
-         6b:be:11:48:70:d8:bd:d6:01:22:93:c7:14:da:0f:46:2f:98:
-         e7:b1:0b:33:10:75:77:3e:3a:e4:ba:ee:10:98:bd:b3:0a:34:
-         f7:85:09:d2:73:d4:7f:61:e1:5d:e4:eb:d6:7b:c6:f3:a9:a0:
-         4d:15:46:f9:de:c5:31:10:5b:87:c4:58:99:51:64:7e:0b:31:
-         22:73:ca:54:34:bd:e6:30:44:0a:59:01:ba:1a:7a:e6:83:76:
-         3c:5e:8b:d4:06:72:b6:a8:62:07:eb:01:97:02:2d:69:95:4a:
-         2b:77:27:a3:30:e5:22:7d:96:81:c9:ba:90:22:f4:fe:6c:bc:
-         a2:eb:96:81:4c:1a:83:4f:af:9e:21:77:5e:68:87:f3:eb:f8:
-         10:7d:38:00:9b:83:0c:2d:9f:7f:b8:93:23:c4:f4:b2:77:c7:
-         cf:1d:bb:12:e4:30:f3:bb:5c:ec:82:1c:47:bf:31:93:93:b2:
-         a0:6f:f8:d2:ec:67:7e:95:4e:f5:eb:d4:64:c5:32:2c:0f:b4:
-         6c:e4:64:ef:b5:a5:07:cf:f8:b2:f1:c9:67:10:e6:1a:0d:a3:
-         9c:44:65:6e
+         87:93:6b:06:54:ca:38:9a:c9:34:e0:7a:50:cb:4e:1a:c2:43:
+         21:02:48:fb:c1:2e:79:1c:75:06:c4:bf:c7:6d:a5:69:1b:42:
+         ba:b8:7e:03:24:42:0c:81:e7:e0:77:32:82:81:df:d8:64:7d:
+         0a:57:33:44:b1:e6:b9:c8:68:f8:11:bb:45:e6:42:85:27:d4:
+         09:78:7e:86:a3:8b:10:16:0c:3c:e7:1e:50:33:38:47:28:37:
+         ef:35:d9:66:c8:bd:f4:4f:de:13:79:f6:a2:b3:73:6e:3b:88:
+         14:d4:a9:0c:91:72:85:a3:3b:ab:ff:7a:87:26:51:69:8f:fe:
+         fe:53:44:42:22:e0:2e:74:25:22:f2:07:b5:50:27:a5:68:6a:
+         26:16:4a:4c:7f:bd:e4:2e:1e:0d:ea:a8:f3:de:99:cf:3a:99:
+         b4:48:34:2c:e7:cc:c4:1c:28:1e:65:22:33:8c:2d:7f:fd:94:
+         99:f2:3e:08:e0:96:e0:22:ce:2c:f3:e3:06:ee:2e:8b:0f:6e:
+         b9:ae:76:15:5d:1c:66:7f:f8:16:25:80:09:c6:b4:fb:cc:bc:
+         9a:96:03:57:b4:fd:4f:e8:40:2d:46:74:84:f9:47:9e:7b:5b:
+         22:1c:5e:43:53:56:c9:84:da:29:e8:f9:b6:72:3f:dc:a3:12:
+         b2:34:56:4d
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDdzCCAl+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApTaGFk
 b3dSb290MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UE
-AwwEUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANT6wE/6dVcu
-B6QmbUNIokcGA92j8hDRZiFP+ihCuU/B9Uz63K2SMFAqzqzbBc3CGSa43kYO7BSb
-J5JxvemlKFXrJ3Hc/9cr6u3wW+M4vDX4e+xdumeN2IqVu6IBMj6m0tOix3D1fPtT
-b7gRSK8MoGCHmEOH/9LCGLVQZxjuBo+A/0sCxsMBNOJ++mBiIyyKaK5aD60aUh9/
-WK6aUG77x1MatreSXbplU0xztO3FtbQ69st5s4f5aawp5eS7VIm/Rb8MuYNsMT6l
-bn1Q8Wj4PcrCP59cYTUhvGqidyxTInEulnD5wsP2Oow6pAD5VdQBbr78+ZoreH48
-JekJh0depU0CAwEAAaOB1zCB1DAdBgNVHQ4EFgQUY6LVToO6OF9QxZPlXJOd3lUI
-c6kwHwYDVR0jBBgwFoAU+Yrq3z1Z3XBftbjVJJl2AtxuMI8wPQYIKwYBBQUHAQEE
+AwwEUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALaldwXIPOzo
+AeSn2equOrIPugk2Np7hIGhMwzVIkv+hPQsPulfdiv6jbCRaTUVk/sdtYHvramnz
+JKRMQzQryPXd+FC7Pjpx19R6Y0NGww1UD7oN1Ee2JZgThMVqzRtXV2zB9gjod+dx
+XsN2Vhh6ePrhyYkX+D3E11XAhVsy7tuoCLIxh7PN3cTiBhc5XJxFdMjOTVg33vGK
+pcmNIUVpnEY+v/hoaSD65BTKL5TarTDeaTVDMp5ts9npoyFBdfAmGYQyMyHGBbVr
+OS88+R/sUoudKY3HlN6jDnIrkumdqiEz0TTpTR2CTrAun8ZlvrZ/8VeS5fOw71J0
+BCiiwRb0U/cCAwEAAaOB1zCB1DAdBgNVHQ4EFgQU6utWDjBC/NNFuQvYiEzw6bjW
+9DwwHwYDVR0jBBgwFoAUWCNv/XoFnOFNDcV9d7PXdbER+OEwPQYIKwYBBQUHAQEE
 MTAvMC0GCCsGAQUFBzAChiFodHRwOi8vdXJsLWZvci1haWEvU2hhZG93Um9vdC5j
 ZXIwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL3VybC1mb3ItY3JsL1NoYWRvd1Jv
 b3QuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQDO/J6CgPhCIA2T5TV9i0SJe92mK91p7hbaLJh2Ma5+s8Iw5Z1r
-vhFIcNi91gEik8cU2g9GL5jnsQszEHV3Pjrkuu4QmL2zCjT3hQnSc9R/YeFd5OvW
-e8bzqaBNFUb53sUxEFuHxFiZUWR+CzEic8pUNL3mMEQKWQG6Gnrmg3Y8XovUBnK2
-qGIH6wGXAi1plUordyejMOUifZaBybqQIvT+bLyi65aBTBqDT6+eIXdeaIfz6/gQ
-fTgAm4MMLZ9/uJMjxPSyd8fPHbsS5DDzu1zsghxHvzGTk7Kgb/jS7Gd+lU7169Rk
-xTIsD7Rs5GTvtaUHz/iy8clnEOYaDaOcRGVu
+DQEBCwUAA4IBAQCHk2sGVMo4msk04HpQy04awkMhAkj7wS55HHUGxL/HbaVpG0K6
+uH4DJEIMgefgdzKCgd/YZH0KVzNEsea5yGj4EbtF5kKFJ9QJeH6Go4sQFgw85x5Q
+MzhHKDfvNdlmyL30T94Tefais3NuO4gU1KkMkXKFozur/3qHJlFpj/7+U0RCIuAu
+dCUi8ge1UCelaGomFkpMf73kLh4N6qjz3pnPOpm0SDQs58zEHCgeZSIzjC1//ZSZ
+8j4I4JbgIs4s8+MG7i6LD265rnYVXRxmf/gWJYAJxrT7zLyalgNXtP1P6EAtRnSE
++Ueee1siHF5DU1bJhNop6Pm2cj/coxKyNFZN
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/rebase-errors.py b/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
index 9237575..8640e18 100755
--- a/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
+++ b/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
@@ -33,7 +33,7 @@
 #  * Group 2 of the match is file path (relative to //src) where the expected
 #    errors were read from.
 failed_test_regex = re.compile(r"""
-Value of: errors.ToDebugString\((?:chain)?\)
+Value of: errors.ToDebugString\((?:test.chain)?\)
   Actual: "(.*)"
 (?:.|\n)+?
 Test file: (.*)
diff --git a/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
index 5fbfbcc..46a1f9b 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:99:a4:c0:d4:dd:a9:aa:60:8b:ae:df:d6:20:ae:
-                    b9:f2:f2:ae:44:0e:1f:13:9c:cc:bb:03:81:36:91:
-                    75:72:b4:f8:36:61:2b:7d:70:a9:da:e5:35:7e:e5:
-                    39:a6:fa:da:45:37:fd:77:04:af:21:c3:43:c4:15:
-                    9e:07:a1:4e:19:04:66:e7:bf:ae:76:b1:95:8a:9b:
-                    b8:79:12:b7:ca:d3:ec:72:16:4b:47:08:89:1f:d5:
-                    5d:cf:e2:a6:1e:c3:c9:28:54:41:f6:68:e4:01:a9:
-                    df:4a:f1:ab:d5:45:26:1a:4e:f9:f7:11:1e:c2:43:
-                    52:d9:2e:95:52:35:71:dc:6a:eb:56:ee:81:73:6a:
-                    86:5b:bd:4f:a6:8f:4b:b3:4e:35:06:d5:35:8a:aa:
-                    d5:f7:bd:6a:e1:79:6a:61:37:dc:a8:06:d9:5a:31:
-                    ea:3b:2e:8c:8f:de:1e:47:02:c7:ca:27:00:b9:49:
-                    7b:29:c4:f4:82:f2:bc:58:52:bb:f2:36:1c:10:4f:
-                    a7:93:fa:46:d0:92:80:15:e7:b9:da:1d:70:21:2b:
-                    9c:47:9c:17:5a:26:2d:94:8a:ce:ae:ba:ac:cb:31:
-                    96:a9:e8:9e:51:73:4f:8c:bf:8c:57:d8:c8:61:0e:
-                    c0:45:09:e4:56:a0:47:f9:df:97:af:9c:76:63:54:
-                    c6:9b
+                    00:ab:d6:f2:11:cf:09:be:ed:79:b0:d0:72:db:88:
+                    4e:d1:b4:17:e0:3a:01:ea:42:9f:a8:53:87:96:30:
+                    df:64:be:82:ef:ec:06:45:d9:e0:9d:9f:56:3d:b9:
+                    a2:bd:48:5e:c2:85:0b:41:2c:6c:8c:c2:f6:16:b0:
+                    0a:ff:f8:89:8f:75:72:90:90:c2:59:58:ea:c7:89:
+                    64:2d:0a:bc:24:8b:2e:de:0e:63:53:6a:fb:90:09:
+                    fc:a6:59:0f:48:39:52:21:98:70:da:20:f8:81:f0:
+                    c0:13:f2:b0:0a:40:be:6c:ec:ec:8a:d6:e5:5c:ce:
+                    b2:f9:bf:02:7e:be:07:ff:b4:da:ef:24:af:a0:1d:
+                    e4:bb:5f:cc:2f:e5:81:d0:63:e5:2f:2a:c3:a2:fb:
+                    86:a6:4b:e9:86:8b:5a:37:7c:a8:ba:7a:cd:13:dd:
+                    db:fb:e9:e4:fa:64:38:4f:a7:65:85:21:b8:dc:6c:
+                    f3:d2:43:bf:0f:fd:46:87:e4:7d:34:99:ec:ce:86:
+                    7a:49:f3:6b:c9:ba:ed:02:86:ff:b0:15:1e:d3:b2:
+                    d0:7b:b0:0c:b9:88:ba:24:c2:bd:21:bb:ce:43:7b:
+                    1b:b2:df:a1:72:6b:d5:62:bf:79:89:21:c1:65:1d:
+                    6c:6b:a2:43:21:08:67:2f:ca:96:96:02:b0:66:77:
+                    f3:23
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                05:BE:F6:16:F8:E7:6A:1B:E6:6D:6D:5A:A4:AF:01:89:8B:98:88:E3
+                16:59:9F:7A:88:28:97:0E:C5:B2:2C:7F:4C:A2:FC:23:C4:3F:AD:47
             X509v3 Authority Key Identifier: 
-                keyid:6E:35:75:BC:3A:85:BC:B6:F7:B8:01:75:BD:9E:A8:36:8D:1E:C7:D9
+                keyid:FD:99:CF:DC:B9:A6:39:F7:33:FC:A3:D6:1F:F5:5B:4E:6A:69:62:E7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a4:7d:30:26:06:98:4b:33:c7:b7:84:04:cb:1b:1f:29:1c:b4:
-         44:6e:6f:b2:5e:40:ce:e9:5d:e5:3d:ed:5c:a4:34:67:08:c0:
-         10:55:f3:c8:90:43:65:d9:fc:b9:64:43:1a:fc:cb:6c:3f:fc:
-         2a:48:87:60:6b:95:a6:4f:d6:6f:ac:e3:39:19:54:5d:96:6b:
-         80:15:db:e3:9f:84:90:4d:23:b1:74:f2:f8:d1:4e:8e:6b:05:
-         2c:28:94:05:03:90:04:98:08:e3:73:34:b6:05:1e:8e:b0:52:
-         33:cf:41:ff:99:cd:26:70:12:b1:0a:5c:c7:ed:d3:87:be:fa:
-         f1:24:34:42:22:35:a0:e5:7c:ef:18:b8:61:ce:a1:0a:99:7a:
-         2d:3f:b9:48:36:a2:3c:5e:70:e4:36:32:a2:9d:1d:3a:37:fa:
-         bf:e4:b4:89:0d:48:e7:9d:f5:9f:48:13:ec:6a:8b:e6:b3:3f:
-         23:f7:94:b1:2d:cf:b4:26:f4:1b:b5:01:3b:92:bb:63:4e:d6:
-         ee:ed:c0:2e:77:53:5b:3e:a5:8c:c6:b9:40:67:bb:cd:67:65:
-         6b:41:46:7e:90:f9:2a:a7:5f:09:92:37:13:23:19:2d:66:cb:
-         73:7e:a3:42:dd:da:ed:f6:08:8a:8a:97:ef:4b:f7:5d:22:81:
-         82:95:87:7c
+         61:b6:09:72:f2:1a:e9:29:93:bd:df:88:02:a5:5f:f5:63:43:
+         7e:17:da:da:eb:55:f5:b8:9f:03:d8:37:18:9f:98:1f:a7:26:
+         92:cf:f5:39:6b:b6:b2:ce:ba:4f:67:a1:5e:02:07:0b:8b:95:
+         59:49:63:a1:7e:ff:c5:e2:83:5d:e5:c0:a9:e6:1e:7e:09:ce:
+         8d:2d:00:82:58:d6:2e:31:5c:7f:29:b3:a4:5e:d9:e9:a2:a6:
+         2b:df:5a:a3:b5:38:cb:42:d9:ca:24:f3:0e:17:85:62:88:53:
+         c0:d1:82:f1:e0:7b:78:29:93:d7:3a:3a:56:b4:91:98:4b:8f:
+         7f:33:08:65:e5:2e:8e:52:a2:ab:8f:3a:ff:59:0e:47:cb:e1:
+         27:b4:c8:74:c9:69:ab:9a:f5:8a:b0:a4:7d:cd:79:51:83:fb:
+         2b:fa:1f:a1:e6:a3:f2:13:90:11:5a:25:5b:6e:30:9f:a2:94:
+         60:7e:df:55:0a:42:20:84:fa:ba:ae:5b:1c:74:42:47:8e:f1:
+         c8:bf:2c:07:58:b8:92:50:fd:74:3f:5e:19:ce:b3:9f:3f:dd:
+         75:c3:f3:d6:f0:4b:60:e2:7c:d4:c7:70:14:4c:fd:6a:02:c8:
+         f5:45:f7:d3:c2:c9:d8:be:e7:e7:1b:92:fd:cc:5a:b0:1b:2a:
+         f8:a7:e3:41
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZpMDU
-3amqYIuu39Ygrrny8q5EDh8TnMy7A4E2kXVytPg2YSt9cKna5TV+5Tmm+tpFN/13
-BK8hw0PEFZ4HoU4ZBGbnv652sZWKm7h5ErfK0+xyFktHCIkf1V3P4qYew8koVEH2
-aOQBqd9K8avVRSYaTvn3ER7CQ1LZLpVSNXHcautW7oFzaoZbvU+mj0uzTjUG1TWK
-qtX3vWrheWphN9yoBtlaMeo7LoyP3h5HAsfKJwC5SXspxPSC8rxYUrvyNhwQT6eT
-+kbQkoAV57naHXAhK5xHnBdaJi2Uis6uuqzLMZap6J5Rc0+Mv4xX2MhhDsBFCeRW
-oEf535evnHZjVMabAgMBAAGjgekwgeYwHQYDVR0OBBYEFAW+9hb452ob5m1tWqSv
-AYmLmIjjMB8GA1UdIwQYMBaAFG41dbw6hby297gBdb2eqDaNHsfZMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCr1vIR
+zwm+7Xmw0HLbiE7RtBfgOgHqQp+oU4eWMN9kvoLv7AZF2eCdn1Y9uaK9SF7ChQtB
+LGyMwvYWsAr/+ImPdXKQkMJZWOrHiWQtCrwkiy7eDmNTavuQCfymWQ9IOVIhmHDa
+IPiB8MAT8rAKQL5s7OyK1uVczrL5vwJ+vgf/tNrvJK+gHeS7X8wv5YHQY+UvKsOi
++4amS+mGi1o3fKi6es0T3dv76eT6ZDhPp2WFIbjcbPPSQ78P/UaH5H00mezOhnpJ
+82vJuu0Chv+wFR7TstB7sAy5iLokwr0hu85Dexuy36Fya9Viv3mJIcFlHWxrokMh
+CGcvypaWArBmd/MjAgMBAAGjgekwgeYwHQYDVR0OBBYEFBZZn3qIKJcOxbIsf0yi
+/CPEP61HMB8GA1UdIwQYMBaAFP2Zz9y5pjn3M/yj1h/1W05qaWLnMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEApH0wJgaYSzPHt4QEyxsf
-KRy0RG5vsl5Azuld5T3tXKQ0ZwjAEFXzyJBDZdn8uWRDGvzLbD/8KkiHYGuVpk/W
-b6zjORlUXZZrgBXb45+EkE0jsXTy+NFOjmsFLCiUBQOQBJgI43M0tgUejrBSM89B
-/5nNJnASsQpcx+3Th7768SQ0QiI1oOV87xi4Yc6hCpl6LT+5SDaiPF5w5DYyop0d
-Ojf6v+S0iQ1I5531n0gT7GqL5rM/I/eUsS3PtCb0G7UBO5K7Y07W7u3ALndTWz6l
-jMa5QGe7zWdla0FGfpD5KqdfCZI3EyMZLWbLc36jQt3a7fYIioqX70v3XSKBgpWH
-fA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAYbYJcvIa6SmTvd+IAqVf
+9WNDfhfa2utV9bifA9g3GJ+YH6cmks/1OWu2ss66T2ehXgIHC4uVWUljoX7/xeKD
+XeXAqeYefgnOjS0AgljWLjFcfymzpF7Z6aKmK99ao7U4y0LZyiTzDheFYohTwNGC
+8eB7eCmT1zo6VrSRmEuPfzMIZeUujlKiq486/1kOR8vhJ7TIdMlpq5r1irCkfc15
+UYP7K/ofoeaj8hOQEVolW24wn6KUYH7fVQpCIIT6uq5bHHRCR47xyL8sB1i4klD9
+dD9eGc6znz/ddcPz1vBLYOJ81MdwFEz9agLI9UX308LJ2L7n5xuS/cxasBsq+Kfj
+QQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d2:ee:b5:26:40:84:3d:98:ee:bc:3e:62:1a:09:
-                    5e:53:b1:72:28:f6:70:c0:a1:08:65:6f:54:24:4c:
-                    fc:bf:fe:14:25:fa:5d:a5:17:f1:00:64:b3:33:6f:
-                    09:3a:0f:cc:25:87:f6:20:e4:f4:49:f3:5a:5d:a4:
-                    d5:02:e7:db:20:c9:66:b4:cf:44:4d:58:4b:48:13:
-                    7b:83:60:14:28:f7:5a:5b:f8:f5:34:40:81:32:bd:
-                    d2:8c:34:4f:d6:5d:5f:65:dd:74:56:7a:07:7a:82:
-                    c3:0b:42:d5:cb:09:30:76:41:6e:08:28:ad:0c:27:
-                    51:9c:86:e1:fe:e8:85:68:aa:59:d0:f8:39:c2:59:
-                    6e:95:90:de:c9:f8:df:77:5e:56:3f:d5:9d:f8:09:
-                    29:ed:7c:cc:92:e7:c3:40:27:76:fc:08:4f:ae:98:
-                    c9:7c:95:43:05:cc:1f:f5:b2:0b:51:ec:09:cd:22:
-                    3d:7e:e4:5a:b9:4f:86:62:76:d7:c0:42:23:bb:97:
-                    e1:b3:ae:af:9d:56:89:00:68:01:b0:cb:11:cc:f4:
-                    ea:cd:1e:7d:32:81:d9:93:20:00:22:ed:31:78:3c:
-                    62:de:73:3f:1d:38:17:4e:04:a2:58:45:36:26:95:
-                    93:ab:36:f1:54:01:81:b1:c2:70:f5:06:17:47:40:
-                    0e:fb
+                    00:c2:39:8e:c5:e5:05:17:ac:b8:b7:d1:f5:91:ec:
+                    59:62:15:67:d4:d2:4c:e8:32:9b:99:b0:28:11:44:
+                    68:ef:35:96:63:9c:f7:f8:f2:7f:0e:15:a9:d3:bf:
+                    34:9f:37:95:b8:59:90:53:0b:62:36:11:ac:08:cd:
+                    0f:67:1f:62:91:c2:9b:5c:7e:3e:eb:83:e3:5d:27:
+                    ed:11:f2:92:0b:4a:1d:96:4c:12:7c:8c:c0:b2:ed:
+                    6e:46:b2:e8:c2:0d:a6:33:b2:7f:46:9c:fc:e7:b0:
+                    34:80:45:c5:0d:f0:88:82:af:7f:3b:a1:e7:f7:98:
+                    3b:f6:69:d3:b7:47:8b:99:bb:21:ab:d4:1c:37:62:
+                    35:06:5f:dc:58:5d:f0:f3:01:b1:e9:e1:75:f1:3f:
+                    5c:6a:d3:b1:16:f2:d0:5d:25:10:fc:89:48:a8:a1:
+                    ce:ce:3a:97:28:0b:76:e6:8d:84:8b:0c:13:44:27:
+                    61:05:c3:35:ec:06:1e:7e:2e:e0:e8:17:4b:2d:02:
+                    2e:2d:45:ce:ff:8c:c0:6e:8e:7e:ef:d6:7a:e0:9c:
+                    8e:54:99:15:65:af:fa:a9:ce:e8:1c:ef:59:78:eb:
+                    9f:a4:c4:cb:5c:5d:31:0e:79:8f:ee:df:bf:20:9c:
+                    f3:6d:1a:8f:2b:70:ed:64:03:c8:6a:17:74:44:98:
+                    6b:8d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                6E:35:75:BC:3A:85:BC:B6:F7:B8:01:75:BD:9E:A8:36:8D:1E:C7:D9
+                FD:99:CF:DC:B9:A6:39:F7:33:FC:A3:D6:1F:F5:5B:4E:6A:69:62:E7
             X509v3 Authority Key Identifier: 
-                keyid:4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                keyid:36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         10:e4:01:2e:8b:a4:ea:e0:cc:ac:c2:57:68:b7:97:98:e2:57:
-         d6:ff:e2:70:d9:de:bd:7e:44:59:da:3c:cc:1e:62:5d:a8:77:
-         70:b5:fc:4c:21:50:b1:5f:4d:d8:dc:18:bf:d7:1e:40:fa:11:
-         8e:40:e6:b8:38:87:a3:10:ed:97:93:ae:a6:7f:6c:cf:75:43:
-         e1:88:b9:84:b3:f3:73:05:fb:24:de:2b:f1:20:65:3f:70:25:
-         87:4d:e0:66:73:ca:29:52:60:88:e9:e3:5f:cc:2b:83:1c:b3:
-         8c:4d:12:7b:35:70:fd:d1:1a:08:85:94:77:39:3c:b0:c5:d7:
-         7e:a5:71:f3:ca:a7:98:30:69:62:f6:96:d4:f9:30:07:aa:56:
-         da:ba:16:fc:1b:57:24:a0:f1:84:e2:4a:a2:97:a4:a1:82:05:
-         1a:02:c7:41:2f:98:c8:e5:27:b4:85:98:72:d0:a0:e1:b5:c1:
-         57:ab:aa:6b:71:79:d0:4d:91:68:18:25:f8:b4:b7:cb:1d:0c:
-         74:6a:77:66:48:3f:24:b0:92:d9:22:6f:6e:54:b7:f8:8c:21:
-         57:0e:a9:cc:52:ff:56:2e:42:fa:08:2e:fe:29:3c:f1:86:8b:
-         74:88:68:82:3f:16:2d:06:12:57:a6:e2:b1:b7:1b:5d:3a:a1:
-         75:c7:24:d7
+         28:62:d2:74:c7:a9:05:0d:f3:89:d9:43:7b:f4:85:32:19:73:
+         47:df:c6:d5:6f:44:e6:9e:0c:b3:c2:5b:90:68:48:7e:d2:30:
+         2e:53:23:5f:e4:cc:4c:92:5e:b0:51:95:47:69:0f:41:c7:21:
+         f3:8c:96:2b:1b:ab:1f:04:f8:d1:5c:65:5f:e2:d5:31:2a:ff:
+         74:82:c3:f5:59:04:e7:76:65:dc:df:e5:77:98:5e:cc:81:65:
+         ac:21:aa:2b:c7:95:2c:1e:bf:aa:17:92:2a:38:a5:d5:b3:8b:
+         41:60:78:1b:cf:a3:43:22:e6:3e:15:47:04:d3:1a:0b:26:b4:
+         78:15:5f:df:ec:62:ac:24:4f:3d:3f:a7:59:a5:46:82:2d:30:
+         91:23:23:47:fd:ba:6e:de:b8:0c:f0:34:d8:34:63:8a:a4:0c:
+         c9:fa:3a:bc:38:99:cf:ad:ed:17:87:b1:b4:fa:c8:ed:55:cb:
+         f4:46:35:4a:62:d1:32:bc:c3:3b:4d:53:29:2e:88:48:ec:59:
+         46:c4:d3:4f:0f:11:13:ba:ee:c9:89:78:95:70:18:8c:30:6f:
+         f4:03:dc:00:a7:79:0e:6e:a4:a1:99:fa:73:fb:90:5f:bd:1c:
+         b8:9d:25:36:02:82:03:b9:ca:90:6e:9d:ce:0f:6e:00:3f:c0:
+         32:3d:50:f4
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0u61JkCE
-PZjuvD5iGgleU7FyKPZwwKEIZW9UJEz8v/4UJfpdpRfxAGSzM28JOg/MJYf2IOT0
-SfNaXaTVAufbIMlmtM9ETVhLSBN7g2AUKPdaW/j1NECBMr3SjDRP1l1fZd10VnoH
-eoLDC0LVywkwdkFuCCitDCdRnIbh/uiFaKpZ0Pg5wllulZDeyfjfd15WP9Wd+Akp
-7XzMkufDQCd2/AhPrpjJfJVDBcwf9bILUewJzSI9fuRauU+GYnbXwEIju5fhs66v
-nVaJAGgBsMsRzPTqzR59MoHZkyAAIu0xeDxi3nM/HTgXTgSiWEU2JpWTqzbxVAGB
-scJw9QYXR0AO+wIDAQABo4HLMIHIMB0GA1UdDgQWBBRuNXW8OoW8tve4AXW9nqg2
-jR7H2TAfBgNVHSMEGDAWgBRP3vPlXvWYDco6ICvpyLRd0B2GvzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjmOxeUF
+F6y4t9H1kexZYhVn1NJM6DKbmbAoEURo7zWWY5z3+PJ/DhWp0780nzeVuFmQUwti
+NhGsCM0PZx9ikcKbXH4+64PjXSftEfKSC0odlkwSfIzAsu1uRrLowg2mM7J/Rpz8
+57A0gEXFDfCIgq9/O6Hn95g79mnTt0eLmbshq9QcN2I1Bl/cWF3w8wGx6eF18T9c
+atOxFvLQXSUQ/IlIqKHOzjqXKAt25o2EiwwTRCdhBcM17AYefi7g6BdLLQIuLUXO
+/4zAbo5+79Z64JyOVJkVZa/6qc7oHO9ZeOufpMTLXF0xDnmP7t+/IJzzbRqPK3Dt
+ZAPIahd0RJhrjQIDAQABo4HLMIHIMB0GA1UdDgQWBBT9mc/cuaY59zP8o9Yf9VtO
+amli5zAfBgNVHSMEGDAWgBQ2cYDmunBtvUQRdb6dkcjlaobb9TA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABDkAS6LpOrgzKzCV2i3l5jiV9b/4nDZ3r1+RFnaPMweYl2od3C1/EwhULFfTdjc
-GL/XHkD6EY5A5rg4h6MQ7ZeTrqZ/bM91Q+GIuYSz83MF+yTeK/EgZT9wJYdN4GZz
-yilSYIjp41/MK4Mcs4xNEns1cP3RGgiFlHc5PLDF136lcfPKp5gwaWL2ltT5MAeq
-Vtq6FvwbVySg8YTiSqKXpKGCBRoCx0EvmMjlJ7SFmHLQoOG1wVerqmtxedBNkWgY
-Jfi0t8sdDHRqd2ZIPySwktkib25Ut/iMIVcOqcxS/1YuQvoILv4pPPGGi3SIaII/
-Fi0GElem4rG3G106oXXHJNc=
+AChi0nTHqQUN84nZQ3v0hTIZc0ffxtVvROaeDLPCW5BoSH7SMC5TI1/kzEySXrBR
+lUdpD0HHIfOMlisbqx8E+NFcZV/i1TEq/3SCw/VZBOd2Zdzf5XeYXsyBZawhqivH
+lSwev6oXkio4pdWzi0FgeBvPo0Mi5j4VRwTTGgsmtHgVX9/sYqwkTz0/p1mlRoIt
+MJEjI0f9um7euAzwNNg0Y4qkDMn6Orw4mc+t7ReHsbT6yO1Vy/RGNUpi0TK8wztN
+UykuiEjsWUbE008PERO67smJeJVwGIwwb/QD3ACneQ5upKGZ+nP7kF+9HLidJTYC
+ggO5ypBunc4PbgA/wDI9UPQ=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:0d:d2:51:af:0c:48:94:37:cf:ea:83:8f:d6:
-                    39:b5:c9:58:fe:59:5b:e5:61:b6:21:98:86:16:a0:
-                    85:e6:cd:c8:21:81:65:4c:65:97:55:72:76:2f:c6:
-                    0d:25:f8:c8:28:9f:20:d1:56:4c:06:99:ff:6d:0f:
-                    24:d3:92:f1:31:25:5a:13:6c:be:4b:19:6a:65:af:
-                    2f:32:be:a9:0f:f8:9b:6d:6f:10:7c:e9:24:61:4d:
-                    fe:ba:e9:b5:b4:54:5e:82:f7:02:7a:e2:e2:d7:53:
-                    6a:69:f4:9a:41:27:0f:50:dc:64:a1:47:84:53:3f:
-                    f1:38:cd:80:a3:5a:2b:dd:96:81:8a:ea:e3:94:72:
-                    f7:aa:f8:2f:cc:a9:d0:9e:36:9f:56:0c:45:ec:dd:
-                    6a:05:52:85:60:99:d7:94:9f:76:7e:1d:8f:3f:50:
-                    fb:33:bc:ca:f8:10:2e:db:15:b2:49:57:d8:f4:59:
-                    fa:73:3b:03:32:86:a7:f1:46:a1:62:ac:67:10:73:
-                    70:51:07:ff:d2:04:33:d8:7c:e2:a8:ff:8e:53:24:
-                    e8:e4:96:da:fb:d1:ea:2f:9c:a9:b5:8f:c5:50:fb:
-                    90:67:b1:8c:5b:8d:f7:5f:af:da:a4:fa:3c:fb:4f:
-                    05:bf:56:4c:dd:d6:6e:43:54:fd:f4:a0:c9:13:93:
-                    55:07
+                    00:c0:d2:20:95:59:77:a4:3d:24:64:e8:47:fb:b2:
+                    4a:c5:da:b8:22:bd:0e:d2:21:41:09:43:e9:85:da:
+                    07:04:11:c4:7c:7a:27:45:14:21:a2:69:44:10:76:
+                    fc:95:d0:03:57:f4:a7:39:8c:ea:06:ae:1d:fd:c0:
+                    71:6f:49:94:1b:5d:58:de:a7:11:6d:f9:d1:9e:88:
+                    f9:93:ad:93:28:6c:4b:15:62:f0:cf:ff:de:a5:84:
+                    d2:9a:f4:27:76:e6:fa:68:a7:29:c8:11:40:31:5a:
+                    2f:42:f1:65:ca:a9:18:e4:e2:8b:f4:5f:6f:63:81:
+                    46:14:24:81:c6:5e:98:f2:01:93:8b:c5:f9:12:c5:
+                    56:45:b9:85:3b:4d:cf:7b:b0:3f:77:e1:2d:d1:4f:
+                    7a:0b:64:a8:66:bb:a2:89:3f:fc:2f:35:82:64:c7:
+                    1e:97:01:cc:bf:8f:26:dc:6a:7d:d9:b2:e6:63:b7:
+                    d3:49:86:2e:11:08:86:ae:56:e4:79:ec:91:5f:95:
+                    26:d8:57:74:7e:be:be:95:f8:4d:34:31:23:91:76:
+                    b2:2d:77:64:a6:73:d4:33:0b:23:9b:65:89:4e:af:
+                    15:37:3a:10:a8:ff:f5:9c:4c:26:a7:37:a5:6a:ec:
+                    56:cd:de:3a:ce:c8:6b:d6:2e:09:bd:5f:83:bd:87:
+                    22:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
             X509v3 Authority Key Identifier: 
-                keyid:4F:DE:F3:E5:5E:F5:98:0D:CA:3A:20:2B:E9:C8:B4:5D:D0:1D:86:BF
+                keyid:36:71:80:E6:BA:70:6D:BD:44:11:75:BE:9D:91:C8:E5:6A:86:DB:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         75:4e:86:e1:25:9e:a8:7b:0e:65:db:bb:ca:49:e3:0c:70:df:
-         07:bd:1a:83:d8:48:e1:b7:0b:39:ed:da:61:a0:98:1d:de:9b:
-         5f:66:a6:33:79:43:46:1b:7d:bf:b4:e4:37:8c:96:5e:89:a8:
-         8f:92:04:0f:c5:e4:0d:81:a3:76:98:c1:b0:b2:70:70:11:f6:
-         8e:34:3a:82:ae:6b:7d:e9:ff:b4:58:85:20:b0:85:fc:86:89:
-         40:08:62:e5:0f:34:83:82:90:da:2a:59:e4:53:53:ee:61:ac:
-         46:51:ab:cb:81:1d:c1:f7:f0:c2:64:55:b9:fd:2a:67:44:3a:
-         6a:af:f9:c2:55:c8:35:e6:8b:3a:d1:06:82:8f:14:ee:f1:11:
-         25:db:a2:98:cc:be:bd:63:21:65:77:6e:6a:f8:d1:7e:a1:c6:
-         df:48:0e:74:0d:e3:03:51:ff:f9:98:92:3c:f8:36:75:90:5e:
-         09:6c:7f:3f:c1:5e:40:03:72:de:ab:ed:6f:bb:fe:f7:9d:14:
-         92:5c:69:13:ba:cf:7a:d8:4b:f1:29:04:6e:bc:5f:c9:8e:52:
-         b6:db:58:41:bb:8d:32:e7:5b:4b:74:bf:4c:8d:ec:07:0b:7d:
-         3c:d6:2f:4d:27:11:31:15:6f:38:0d:ba:2a:53:76:2a:47:e6:
-         32:52:df:ea
+         31:81:95:51:bc:3e:b5:15:21:85:3c:07:d0:95:b1:86:87:e2:
+         70:f1:01:c5:22:2d:7e:16:73:89:db:56:fd:1a:42:f6:5e:ad:
+         fd:1e:ad:8b:01:ae:d9:15:9f:80:c3:d8:62:4a:f9:0d:65:bf:
+         05:00:8a:5c:61:1a:62:8c:a0:f6:9c:72:e1:e6:e9:56:6b:68:
+         1c:74:8c:2d:2e:8f:4f:46:65:15:4c:2e:2b:e4:a0:92:da:27:
+         84:f8:89:54:70:fc:95:ba:52:1d:6b:08:14:55:6b:76:c9:05:
+         59:3e:c4:54:b7:76:79:34:f7:e8:af:01:79:08:96:9f:ec:7e:
+         0a:39:42:b9:e2:90:1f:3b:4c:00:f1:8f:a2:04:68:a3:75:c1:
+         96:9c:9b:6c:68:5b:35:95:d8:d8:a1:dd:dd:96:9b:05:88:ba:
+         31:ac:f6:5b:f0:8f:7f:70:40:8a:1c:68:0e:a5:a6:e6:67:cd:
+         5c:91:2b:e7:c4:5a:f7:f7:f0:20:df:bd:12:92:ae:8b:d3:5f:
+         31:1a:44:44:3f:29:15:39:c0:fd:4e:31:ec:0a:cb:78:a0:02:
+         1b:66:ef:20:d7:ab:cd:19:89:3f:86:24:24:f5:ed:14:5f:40:
+         d4:96:d6:51:38:78:52:6c:42:00:a1:1a:22:7b:25:0d:43:77:
+         0b:1b:d2:76
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoN0lGvDEiUN8/qg4/W
-ObXJWP5ZW+VhtiGYhhaghebNyCGBZUxll1Vydi/GDSX4yCifINFWTAaZ/20PJNOS
-8TElWhNsvksZamWvLzK+qQ/4m21vEHzpJGFN/rrptbRUXoL3Anri4tdTamn0mkEn
-D1DcZKFHhFM/8TjNgKNaK92WgYrq45Ry96r4L8yp0J42n1YMRezdagVShWCZ15Sf
-dn4djz9Q+zO8yvgQLtsVsklX2PRZ+nM7AzKGp/FGoWKsZxBzcFEH/9IEM9h84qj/
-jlMk6OSW2vvR6i+cqbWPxVD7kGexjFuN91+v2qT6PPtPBb9WTN3WbkNU/fSgyROT
-VQcCAwEAAaOByzCByDAdBgNVHQ4EFgQUT97z5V71mA3KOiAr6ci0XdAdhr8wHwYD
-VR0jBBgwFoAUT97z5V71mA3KOiAr6ci0XdAdhr8wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDSIJVZd6Q9JGToR/uy
+SsXauCK9DtIhQQlD6YXaBwQRxHx6J0UUIaJpRBB2/JXQA1f0pzmM6gauHf3AcW9J
+lBtdWN6nEW350Z6I+ZOtkyhsSxVi8M//3qWE0pr0J3bm+minKcgRQDFaL0LxZcqp
+GOTii/Rfb2OBRhQkgcZemPIBk4vF+RLFVkW5hTtNz3uwP3fhLdFPegtkqGa7ook/
+/C81gmTHHpcBzL+PJtxqfdmy5mO300mGLhEIhq5W5HnskV+VJthXdH6+vpX4TTQx
+I5F2si13ZKZz1DMLI5tliU6vFTc6EKj/9ZxMJqc3pWrsVs3eOs7Ia9YuCb1fg72H
+It8CAwEAAaOByzCByDAdBgNVHQ4EFgQUNnGA5rpwbb1EEXW+nZHI5WqG2/UwHwYD
+VR0jBBgwFoAUNnGA5rpwbb1EEXW+nZHI5WqG2/UwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB1TobhJZ6o
-ew5l27vKSeMMcN8HvRqD2Ejhtws57dphoJgd3ptfZqYzeUNGG32/tOQ3jJZeiaiP
-kgQPxeQNgaN2mMGwsnBwEfaONDqCrmt96f+0WIUgsIX8holACGLlDzSDgpDaKlnk
-U1PuYaxGUavLgR3B9/DCZFW5/SpnRDpqr/nCVcg15os60QaCjxTu8REl26KYzL69
-YyFld25q+NF+ocbfSA50DeMDUf/5mJI8+DZ1kF4JbH8/wV5AA3Leq+1vu/73nRSS
-XGkTus962EvxKQRuvF/JjlK221hBu40y51tLdL9MjewHC3081i9NJxExFW84Dboq
-U3YqR+YyUt/q
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAxgZVRvD61
+FSGFPAfQlbGGh+Jw8QHFIi1+FnOJ21b9GkL2Xq39Hq2LAa7ZFZ+Aw9hiSvkNZb8F
+AIpcYRpijKD2nHLh5ulWa2gcdIwtLo9PRmUVTC4r5KCS2ieE+IlUcPyVulIdawgU
+VWt2yQVZPsRUt3Z5NPforwF5CJaf7H4KOUK54pAfO0wA8Y+iBGijdcGWnJtsaFs1
+ldjYod3dlpsFiLoxrPZb8I9/cECKHGgOpabmZ81ckSvnxFr39/Ag370Skq6L018x
+GkREPykVOcD9TjHsCst4oAIbZu8g16vNGYk/hiQk9e0UX0DUltZROHhSbEIAoRoi
+eyUNQ3cLG9J2
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -280,3 +280,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
index 56de07f..edd7193 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:aa:e6:1b:b4:96:49:1d:88:99:c3:be:30:44:ed:
-                    2a:6e:80:18:66:5a:66:26:44:14:8f:1a:1d:69:81:
-                    8b:44:fb:ee:76:a1:c6:6d:e1:c1:ad:50:aa:99:a2:
-                    d5:ce:ac:f4:86:04:93:02:d9:33:aa:24:ef:36:ef:
-                    5c:93:9a:69:00:45:95:c3:82:37:67:df:25:3e:ea:
-                    dc:d0:fb:08:7f:89:aa:ad:df:a6:b6:c8:09:a3:74:
-                    dc:17:12:b4:03:7d:7d:86:7d:57:1e:ff:d2:16:f7:
-                    9f:85:79:6e:5c:01:e3:cf:64:9d:55:e1:77:2c:43:
-                    89:30:d1:eb:d0:2e:68:e6:d1:c1:2a:92:58:c8:e2:
-                    9b:95:be:f6:d0:42:2d:38:fe:c8:17:a3:cf:37:76:
-                    af:b1:0e:32:a5:6d:58:c9:de:4b:f4:2f:fa:8c:e4:
-                    9c:c6:1c:88:7c:55:01:4b:48:81:b0:0f:4f:19:f7:
-                    fa:12:e7:9e:27:27:85:47:e6:b8:07:d9:59:a3:9a:
-                    ac:3f:7d:a6:14:16:c8:8b:8d:70:d7:7b:fa:46:d4:
-                    32:fc:50:c7:83:82:e3:18:69:a5:a4:56:df:24:a3:
-                    c5:7d:d5:f3:24:a4:67:22:4c:c8:b6:93:c2:05:fc:
-                    01:1b:ae:9d:a4:76:f4:bb:d6:b6:a9:32:2c:3a:fe:
-                    91:93
+                    00:cd:a3:3d:e1:b1:b2:0a:1c:aa:96:29:01:cd:5a:
+                    89:00:99:56:69:3b:d0:c1:28:b1:d1:52:18:30:21:
+                    d0:28:da:7a:f0:b0:94:cb:0f:8c:ec:5f:d3:7f:45:
+                    6a:db:ea:c8:10:8c:c4:42:3e:d3:7a:0b:50:61:38:
+                    e6:11:c5:c8:ac:d9:8d:da:47:b1:2c:15:79:48:49:
+                    19:d1:5e:31:9d:5f:27:e2:46:a1:0b:01:ce:2b:14:
+                    8a:b1:d4:31:05:be:33:79:12:e7:dc:91:9b:f0:b6:
+                    bf:91:bd:73:f8:75:a2:83:53:1e:94:54:70:32:fa:
+                    35:1a:0a:21:56:aa:a4:f5:db:36:ae:b7:22:07:c5:
+                    43:c5:c9:8e:78:d0:87:5e:29:95:c5:09:76:1b:16:
+                    03:66:b7:7f:20:15:33:e1:1a:10:e5:cf:2c:83:58:
+                    2c:25:76:72:de:30:50:a7:24:89:04:0f:17:ee:e9:
+                    a8:74:67:43:16:89:7c:7f:7f:3d:11:ba:95:bd:69:
+                    51:75:c7:9e:35:c6:c6:16:d9:fb:92:39:9d:c2:c4:
+                    02:09:cc:83:e5:4c:30:58:9b:fd:0b:eb:94:f0:e4:
+                    f5:a0:25:d3:ad:f6:50:86:4a:eb:5b:2f:11:62:7c:
+                    39:ac:35:e1:45:06:10:d6:1c:4a:44:49:7c:df:9b:
+                    6b:73
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                55:B5:67:E4:CD:8D:51:AD:5E:A2:25:B0:94:40:72:52:F4:17:24:4E
+                7A:4D:BD:3C:FF:7D:AB:F5:27:F9:22:43:5F:94:4B:64:19:8C:FC:3D
             X509v3 Authority Key Identifier: 
-                keyid:71:AE:42:1C:8C:C1:FB:35:F7:C0:9F:63:95:A7:7B:4F:9D:8E:D2:7A
+                keyid:1D:C8:D6:28:C1:89:4C:16:F8:7E:CF:73:C3:0B:64:07:BF:A5:1E:78
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         25:e8:87:e7:07:ba:bd:47:c3:dd:5a:3c:29:bc:af:cb:fb:cd:
-         c6:55:e6:9c:7b:cd:0e:8f:1a:0a:e4:cb:06:db:42:44:02:e5:
-         37:6e:1a:a3:7d:23:96:c6:b2:67:cb:5a:1e:71:a1:e3:4f:15:
-         80:7f:a1:0d:59:60:b0:6f:c9:ab:0f:ef:20:d3:c2:45:e0:99:
-         aa:7e:e1:b7:31:dc:4b:b2:16:78:c5:06:27:a8:5e:c5:7b:3b:
-         dc:81:81:0d:eb:31:13:d5:4b:23:2e:4e:2c:86:fd:ce:58:96:
-         b5:cc:33:80:5c:7b:8a:ce:74:97:aa:df:fc:7c:1e:42:7d:12:
-         58:bb:84:0f:2d:30:7c:a9:0c:1e:5c:c4:c6:ce:2b:c0:9d:bb:
-         7d:c2:51:04:5d:70:c3:63:43:59:57:40:e4:69:52:be:72:79:
-         b4:c5:74:51:30:af:9c:30:8e:33:89:be:69:69:4a:01:03:07:
-         d9:df:8b:0c:69:ff:cc:57:45:7c:c6:23:e5:4a:1f:19:94:19:
-         25:9d:eb:87:04:51:06:ba:9c:6b:72:da:2b:05:ef:72:21:e9:
-         95:5e:61:83:6a:7a:b6:30:f8:97:a1:99:dd:12:ea:47:50:ee:
-         26:02:3b:81:94:a8:19:29:a7:ad:b6:7c:28:10:53:09:53:a4:
-         61:74:57:ed
+         b0:14:85:d7:ca:ca:c2:88:ba:d8:44:6b:08:4b:fc:3a:7c:ec:
+         e1:5b:65:84:47:51:71:67:c2:b2:19:a0:5c:88:21:88:e4:e1:
+         82:bc:19:f4:1f:0d:32:0e:e0:98:29:e2:30:1e:25:24:6c:20:
+         ea:75:b6:45:c7:b1:b6:26:5c:fe:fd:da:22:0a:ac:3d:ad:7f:
+         0d:ae:5b:9d:a8:de:72:c6:8a:00:b5:60:85:aa:a2:98:4a:fa:
+         f5:0f:66:17:3b:5e:32:81:b3:ab:20:f1:98:40:62:d3:39:a1:
+         85:cd:a8:f9:57:2f:7e:80:a2:82:b4:5c:8e:c4:41:c2:cb:d7:
+         46:30:9b:ec:7e:09:b4:97:47:a5:5a:65:3d:1a:f7:44:8b:58:
+         ca:4a:55:15:e6:62:96:2f:11:3d:93:00:a0:44:25:2e:75:36:
+         8e:6f:57:3b:a4:7b:4d:a5:07:63:13:bb:6b:52:e9:43:e4:34:
+         31:3f:c1:71:ef:70:02:b5:40:e1:38:7b:80:ef:1b:86:8d:a8:
+         50:3f:87:76:16:38:fb:4d:4c:03:af:8f:45:a9:54:31:a1:a1:
+         1d:8c:f5:e9:ad:5d:de:5c:cf:1d:8c:20:65:b6:c6:b0:f7:71:
+         2f:2b:b5:3d:5c:b3:32:d4:40:91:6a:bf:67:33:3e:d8:90:af:
+         0d:41:43:7d
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq5hu0
-lkkdiJnDvjBE7SpugBhmWmYmRBSPGh1pgYtE++52ocZt4cGtUKqZotXOrPSGBJMC
-2TOqJO8271yTmmkARZXDgjdn3yU+6tzQ+wh/iaqt36a2yAmjdNwXErQDfX2GfVce
-/9IW95+FeW5cAePPZJ1V4XcsQ4kw0evQLmjm0cEqkljI4puVvvbQQi04/sgXo883
-dq+xDjKlbVjJ3kv0L/qM5JzGHIh8VQFLSIGwD08Z9/oS554nJ4VH5rgH2Vmjmqw/
-faYUFsiLjXDXe/pG1DL8UMeDguMYaaWkVt8ko8V91fMkpGciTMi2k8IF/AEbrp2k
-dvS71rapMiw6/pGTAgMBAAGjgekwgeYwHQYDVR0OBBYEFFW1Z+TNjVGtXqIlsJRA
-clL0FyROMB8GA1UdIwQYMBaAFHGuQhyMwfs198CfY5Wne0+djtJ6MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNoz3h
+sbIKHKqWKQHNWokAmVZpO9DBKLHRUhgwIdAo2nrwsJTLD4zsX9N/RWrb6sgQjMRC
+PtN6C1BhOOYRxcis2Y3aR7EsFXlISRnRXjGdXyfiRqELAc4rFIqx1DEFvjN5Eufc
+kZvwtr+RvXP4daKDUx6UVHAy+jUaCiFWqqT12zautyIHxUPFyY540IdeKZXFCXYb
+FgNmt38gFTPhGhDlzyyDWCwldnLeMFCnJIkEDxfu6ah0Z0MWiXx/fz0RupW9aVF1
+x541xsYW2fuSOZ3CxAIJzIPlTDBYm/0L65Tw5PWgJdOt9lCGSutbLxFifDmsNeFF
+BhDWHEpESXzfm2tzAgMBAAGjgekwgeYwHQYDVR0OBBYEFHpNvTz/fav1J/kiQ1+U
+S2QZjPw9MB8GA1UdIwQYMBaAFB3I1ijBiUwW+H7Pc8MLZAe/pR54MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgKkMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAJeiH5we6vUfD3Vo8Kbyv
-y/vNxlXmnHvNDo8aCuTLBttCRALlN24ao30jlsayZ8taHnGh408VgH+hDVlgsG/J
-qw/vINPCReCZqn7htzHcS7IWeMUGJ6hexXs73IGBDesxE9VLIy5OLIb9zliWtcwz
-gFx7is50l6rf/HweQn0SWLuEDy0wfKkMHlzExs4rwJ27fcJRBF1ww2NDWVdA5GlS
-vnJ5tMV0UTCvnDCOM4m+aWlKAQMH2d+LDGn/zFdFfMYj5UofGZQZJZ3rhwRRBrqc
-a3LaKwXvciHplV5hg2p6tjD4l6GZ3RLqR1DuJgI7gZSoGSmnrbZ8KBBTCVOkYXRX
-7Q==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAsBSF18rKwoi62ERrCEv8
+Onzs4VtlhEdRcWfCshmgXIghiOThgrwZ9B8NMg7gmCniMB4lJGwg6nW2RcextiZc
+/v3aIgqsPa1/Da5bnajecsaKALVghaqimEr69Q9mFzteMoGzqyDxmEBi0zmhhc2o
++VcvfoCigrRcjsRBwsvXRjCb7H4JtJdHpVplPRr3RItYykpVFeZili8RPZMAoEQl
+LnU2jm9XO6R7TaUHYxO7a1LpQ+Q0MT/Bce9wArVA4Th7gO8bho2oUD+HdhY4+01M
+A6+PRalUMaGhHYz16a1d3lzPHYwgZbbGsPdxLyu1PVyzMtRAkWq/ZzM+2JCvDUFD
+fQ==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:8f:d1:37:69:c5:65:2a:c8:df:6e:82:4d:1a:
-                    ea:2c:59:9d:43:07:8b:d1:c3:01:3a:1d:7a:9f:81:
-                    ad:b8:fb:10:35:ae:84:80:07:69:5b:47:eb:af:1c:
-                    7b:43:21:f3:3c:13:8a:3b:62:c0:20:fa:96:06:9b:
-                    50:04:82:05:c2:7a:e3:53:d1:34:ab:2e:94:a9:6b:
-                    5f:6c:a9:66:0d:df:d0:73:79:f0:bd:ac:9c:99:68:
-                    e7:1c:25:6f:c6:68:36:07:99:57:23:17:a8:8e:4e:
-                    8c:b9:41:ef:25:7e:92:3d:08:8a:82:c2:de:fe:a3:
-                    cc:05:ed:b5:8b:b8:2f:09:eb:87:29:4d:55:f1:4e:
-                    ee:3a:91:54:dc:6f:6a:9e:d8:17:2a:3a:46:00:65:
-                    f4:4d:ae:26:35:72:97:06:41:ef:4e:bd:af:83:ec:
-                    9b:e2:96:24:61:2b:88:71:77:a7:e8:cf:2e:3e:79:
-                    5b:a2:33:11:94:aa:e7:65:6b:06:a2:4e:94:c8:d7:
-                    56:0f:cc:12:b9:9c:c1:b5:f6:bf:2a:a0:f8:b1:74:
-                    34:54:0e:cb:f0:87:87:f6:93:3f:f4:5f:10:81:90:
-                    78:51:ae:41:19:6e:c9:89:8c:9d:d9:85:64:18:de:
-                    e5:d6:8c:a8:5a:4b:60:b0:44:5f:7a:1e:f4:d1:5b:
-                    94:97
+                    00:f2:b6:c9:a7:02:57:38:c5:5f:78:1c:51:80:aa:
+                    71:61:a7:55:85:4f:03:7c:19:ce:d5:cb:24:ae:e1:
+                    8f:3e:b9:4a:ad:8e:bd:7f:84:fb:98:ae:08:7c:c6:
+                    6a:69:7c:24:fa:72:ae:90:ea:04:5a:01:3b:4e:f2:
+                    a2:c1:92:0e:ac:f2:0f:11:de:ea:53:94:e2:49:61:
+                    6c:b2:e5:71:0c:cb:47:10:b2:f4:d4:ae:b5:9e:03:
+                    d9:ec:3c:da:9e:f7:ef:4b:69:29:57:52:e7:3c:dc:
+                    8a:97:69:79:16:47:85:38:0e:5d:77:90:ff:59:c7:
+                    4d:a3:4c:6b:3f:31:a9:97:51:00:1e:94:91:86:3d:
+                    45:ba:84:f1:2d:1a:2e:49:0f:5e:fa:de:bf:db:d9:
+                    b7:0e:31:86:04:63:bf:0e:6c:de:8a:78:d9:a1:0c:
+                    9a:6d:3c:5e:00:c3:cf:f6:21:87:b9:d0:28:7c:c6:
+                    c1:3c:ab:60:2d:38:02:84:ad:3d:b6:e1:77:80:b6:
+                    93:d6:8a:30:ca:8f:7c:b8:71:04:af:4c:a8:f8:20:
+                    a2:1e:7b:00:38:e4:8d:fc:ab:67:28:6c:2a:69:b3:
+                    b0:d3:c9:48:2a:b8:ac:eb:13:94:1c:26:2c:ff:8c:
+                    9c:47:94:0d:b7:32:00:1f:70:6e:c9:90:f5:3e:2e:
+                    ed:49
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:AE:42:1C:8C:C1:FB:35:F7:C0:9F:63:95:A7:7B:4F:9D:8E:D2:7A
+                1D:C8:D6:28:C1:89:4C:16:F8:7E:CF:73:C3:0B:64:07:BF:A5:1E:78
             X509v3 Authority Key Identifier: 
-                keyid:F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                keyid:14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         7b:29:bd:b8:c7:76:7f:09:90:d3:5d:e7:20:9e:f6:a0:bd:dc:
-         a1:cb:7c:c8:c8:17:d5:80:81:79:6a:88:e5:e8:c8:e3:56:37:
-         60:3f:9c:2a:14:86:fe:e0:79:2f:d6:ec:67:51:d4:d8:65:9d:
-         ce:3b:59:b6:42:06:7b:c8:2a:79:7f:40:2f:ed:fb:50:d3:78:
-         9e:99:fe:1d:fe:a1:4f:1d:58:c9:2d:b4:75:72:3f:6a:7a:db:
-         2e:7b:81:3b:00:3f:e4:95:47:63:42:90:fd:25:ba:db:53:0a:
-         01:37:28:78:7d:c6:cf:54:5e:2b:94:88:79:bb:4c:f7:06:e3:
-         7a:be:44:29:c3:2e:17:ea:61:c4:8f:16:f0:b6:e0:60:fe:19:
-         08:48:fd:a8:bf:95:ef:e5:32:1c:cf:e5:59:6b:04:1d:4c:6d:
-         ea:9b:4d:b4:f9:14:c2:00:a3:32:d6:1b:54:00:5a:17:29:8f:
-         85:0c:eb:ed:41:70:6f:52:f8:37:92:ed:2b:ae:8c:b8:e4:51:
-         aa:68:62:12:9b:97:62:1a:5b:27:46:b5:5f:8c:0e:c9:93:15:
-         d7:d8:85:99:67:56:ef:31:4a:55:1f:67:7c:09:fc:03:c9:a0:
-         67:b8:ed:32:d7:c0:0b:bd:b6:47:b9:50:78:f2:0a:ec:1d:bd:
-         d5:e9:06:b3
+         60:93:90:eb:55:18:92:93:6e:e2:6e:e8:6d:93:9b:47:c7:00:
+         9d:25:b9:54:e9:23:41:37:5c:89:0b:18:dd:f5:ce:17:a5:1d:
+         fb:11:7e:e1:cf:b4:e0:27:68:06:14:68:9c:40:68:44:72:00:
+         95:c4:db:10:4d:ca:ad:a2:4a:d2:b0:b8:86:79:33:75:7c:c7:
+         83:68:7b:6f:12:aa:06:3c:3c:82:c4:d6:cd:35:18:9d:24:78:
+         b9:b4:69:67:e8:62:27:ed:ab:2f:b2:2d:26:d2:ad:bf:d6:d6:
+         ef:71:eb:48:46:0d:fd:ee:9e:ad:5f:02:fa:4b:bf:f1:09:c2:
+         6b:8b:8e:4b:ca:a1:52:12:df:24:82:94:cf:da:5c:36:04:d8:
+         3e:f8:e0:c9:6d:f4:03:2f:f1:56:c4:d0:aa:0c:ea:21:32:29:
+         da:09:e0:ac:9d:14:f1:db:53:77:f1:cc:14:09:f7:31:00:7e:
+         86:55:a9:91:dc:c7:bf:ba:5f:2e:b8:22:a4:73:e7:89:1a:ef:
+         9d:58:ac:a4:8c:b1:77:38:2c:0b:b6:70:89:93:bf:5f:b0:17:
+         4f:d7:0f:c7:4f:e7:58:8b:1e:e9:92:40:05:20:fd:05:a8:71:
+         9a:f0:1d:1d:38:96:b3:01:ae:d0:8d:1a:12:9d:33:54:31:79:
+         a7:b1:85:0f
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxI/RN2nF
-ZSrI326CTRrqLFmdQweL0cMBOh16n4GtuPsQNa6EgAdpW0frrxx7QyHzPBOKO2LA
-IPqWBptQBIIFwnrjU9E0qy6UqWtfbKlmDd/Qc3nwvaycmWjnHCVvxmg2B5lXIxeo
-jk6MuUHvJX6SPQiKgsLe/qPMBe21i7gvCeuHKU1V8U7uOpFU3G9qntgXKjpGAGX0
-Ta4mNXKXBkHvTr2vg+yb4pYkYSuIcXen6M8uPnlbojMRlKrnZWsGok6UyNdWD8wS
-uZzBtfa/KqD4sXQ0VA7L8IeH9pM/9F8QgZB4Ua5BGW7JiYyd2YVkGN7l1oyoWktg
-sERfeh700VuUlwIDAQABo4HLMIHIMB0GA1UdDgQWBBRxrkIcjMH7NffAn2OVp3tP
-nY7SejAfBgNVHSMEGDAWgBT3pEzKu4F7EGNrzLxz7cYcVlVAHDA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8rbJpwJX
+OMVfeBxRgKpxYadVhU8DfBnO1cskruGPPrlKrY69f4T7mK4IfMZqaXwk+nKukOoE
+WgE7TvKiwZIOrPIPEd7qU5TiSWFssuVxDMtHELL01K61ngPZ7DzanvfvS2kpV1Ln
+PNyKl2l5FkeFOA5dd5D/WcdNo0xrPzGpl1EAHpSRhj1FuoTxLRouSQ9e+t6/29m3
+DjGGBGO/DmzeinjZoQyabTxeAMPP9iGHudAofMbBPKtgLTgChK09tuF3gLaT1oow
+yo98uHEEr0yo+CCiHnsAOOSN/KtnKGwqabOw08lIKris6xOUHCYs/4ycR5QNtzIA
+H3BuyZD1Pi7tSQIDAQABo4HLMIHIMB0GA1UdDgQWBBQdyNYowYlMFvh+z3PDC2QH
+v6UeeDAfBgNVHSMEGDAWgBQUq/46t6pm9J/kWSVED9M61ntZXDA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AHspvbjHdn8JkNNd5yCe9qC93KHLfMjIF9WAgXlqiOXoyONWN2A/nCoUhv7geS/W
-7GdR1Nhlnc47WbZCBnvIKnl/QC/t+1DTeJ6Z/h3+oU8dWMkttHVyP2p62y57gTsA
-P+SVR2NCkP0luttTCgE3KHh9xs9UXiuUiHm7TPcG43q+RCnDLhfqYcSPFvC24GD+
-GQhI/ai/le/lMhzP5VlrBB1MbeqbTbT5FMIAozLWG1QAWhcpj4UM6+1BcG9S+DeS
-7SuujLjkUapoYhKbl2IaWydGtV+MDsmTFdfYhZlnVu8xSlUfZ3wJ/APJoGe47TLX
-wAu9tke5UHjyCuwdvdXpBrM=
+AGCTkOtVGJKTbuJu6G2Tm0fHAJ0luVTpI0E3XIkLGN31zhelHfsRfuHPtOAnaAYU
+aJxAaERyAJXE2xBNyq2iStKwuIZ5M3V8x4Noe28SqgY8PILE1s01GJ0keLm0aWfo
+Yiftqy+yLSbSrb/W1u9x60hGDf3unq1fAvpLv/EJwmuLjkvKoVIS3ySClM/aXDYE
+2D744Mlt9AMv8VbE0KoM6iEyKdoJ4KydFPHbU3fxzBQJ9zEAfoZVqZHcx7+6Xy64
+IqRz54ka751YrKSMsXc4LAu2cImTv1+wF0/XD8dP51iLHumSQAUg/QWocZrwHR04
+lrMBrtCNGhKdM1QxeaexhQ8=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cd:6b:8f:1c:b6:4c:54:b3:0d:f7:e0:b8:5a:a6:
-                    d3:cc:0b:63:89:cb:3a:5a:87:3c:39:65:aa:63:32:
-                    79:fe:5c:67:f6:00:8c:32:b6:75:01:2f:7b:45:d3:
-                    a4:53:f4:7a:47:7e:2d:ca:5a:d2:22:eb:22:8c:02:
-                    e3:c1:91:ad:71:f8:67:43:62:8f:f1:60:17:77:ea:
-                    a3:d6:78:64:b2:58:c2:fd:20:e0:a2:06:d5:18:a8:
-                    36:9e:2e:b0:97:20:c7:72:a4:51:0d:d5:f0:f0:1f:
-                    b2:05:8e:82:98:9e:b5:67:dd:55:bb:c1:03:e1:9f:
-                    45:73:74:d7:11:aa:5b:de:c1:5d:5e:f2:29:85:29:
-                    03:e3:14:fa:e8:91:f5:29:a3:8c:c0:78:1c:4c:18:
-                    2b:49:2b:20:31:1e:bf:e1:55:7f:ed:76:25:4d:95:
-                    a5:40:4c:cc:f4:8e:de:85:d3:88:0a:86:27:95:f4:
-                    c8:4b:00:8d:16:b7:33:e9:76:12:aa:85:43:1e:89:
-                    bb:ae:16:f2:f1:26:c4:a7:b9:44:89:76:1b:1a:2c:
-                    34:50:4b:e0:68:bc:f1:fb:be:22:14:b0:2b:67:78:
-                    22:f0:71:07:43:21:a3:24:d7:4e:28:a0:7d:04:16:
-                    b1:a2:d8:35:2a:2b:2e:13:8e:6b:e9:c9:7f:78:7e:
-                    98:df
+                    00:c1:49:cb:88:de:c9:13:63:49:6b:e4:12:db:c5:
+                    2e:d2:00:04:fc:c0:22:3f:24:fe:ed:2d:ce:98:69:
+                    c6:2d:9c:10:87:7a:ab:2b:75:30:50:0f:b9:11:43:
+                    ad:35:a5:d1:f4:ce:fa:9b:cf:53:d7:51:91:b4:68:
+                    7c:6c:66:f4:0b:87:06:7f:48:c2:ed:20:ce:04:42:
+                    ad:d4:05:eb:48:c2:c0:38:4b:d4:a6:a4:7f:f9:6c:
+                    2a:cb:d3:9a:38:a2:c5:80:35:38:53:9a:2a:f6:4d:
+                    0c:04:34:57:ee:03:5b:92:7f:77:af:5a:0c:ae:cf:
+                    44:f7:ce:15:5b:53:b2:4c:dd:54:cc:52:97:44:19:
+                    e2:1a:d7:9d:7d:69:f9:86:6c:1a:da:d5:01:43:33:
+                    1d:8d:4c:9c:6b:60:9d:a8:05:91:3e:e8:09:d0:57:
+                    04:5a:b7:29:f5:bd:af:d8:20:de:ae:28:98:cb:df:
+                    0d:41:89:d1:bf:b3:20:03:3c:8a:66:23:16:bf:10:
+                    af:ba:cc:19:67:42:a7:45:0b:e6:68:13:55:d6:1b:
+                    c5:7b:56:b2:a4:0a:28:eb:f4:1b:9b:6c:67:82:58:
+                    bd:d7:a4:d5:1c:8e:e5:20:44:7d:14:00:52:5c:ea:
+                    b8:ab:a2:00:bc:78:31:e3:09:be:d5:da:c4:fd:9e:
+                    6f:6b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
             X509v3 Authority Key Identifier: 
-                keyid:F7:A4:4C:CA:BB:81:7B:10:63:6B:CC:BC:73:ED:C6:1C:56:55:40:1C
+                keyid:14:AB:FE:3A:B7:AA:66:F4:9F:E4:59:25:44:0F:D3:3A:D6:7B:59:5C
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         50:5f:b0:32:ec:41:85:3d:75:ff:8d:05:17:be:20:98:81:da:
-         48:39:17:20:24:a7:31:cf:63:35:90:29:26:d0:60:29:e1:68:
-         fe:35:fd:6c:61:c0:3a:cd:08:92:9b:cc:ad:73:d4:dd:a5:51:
-         0e:a9:65:04:7d:16:77:8b:b8:b4:9d:fb:c4:7a:4a:ab:8a:9e:
-         d0:70:47:45:74:a4:57:ab:c2:cd:b3:c5:44:6b:7e:3b:78:8f:
-         5b:7f:f0:f7:c3:ef:24:a2:40:fe:c6:71:cd:a8:a6:ac:63:22:
-         57:39:f5:98:c3:91:79:bf:47:6a:0b:c6:b1:61:c6:35:1b:1c:
-         10:cc:e7:bc:20:83:f6:48:26:4a:80:47:e0:22:fa:04:1f:b0:
-         06:9c:54:fa:46:45:9b:d5:20:a2:f0:ee:be:b5:a2:83:92:86:
-         5d:f5:40:f5:32:d0:85:35:eb:af:5d:9b:04:5d:21:b3:35:90:
-         e8:5f:0a:6c:90:85:eb:86:31:e4:89:81:c6:aa:73:4d:1e:3e:
-         af:40:07:f1:38:ae:30:ab:2d:aa:6d:2f:b2:1d:ff:d8:18:2e:
-         f3:d0:74:8e:ff:6d:24:97:30:cb:b6:e5:6f:cb:6b:c2:27:5e:
-         a5:f1:63:c0:d9:0d:c5:08:7f:86:8c:47:c4:9b:cb:e2:d9:da:
-         17:51:5b:12
+         85:11:4e:e7:d7:8d:db:f0:78:1e:04:2e:43:17:0a:f6:24:42:
+         75:ec:e9:59:37:46:3b:ee:f6:1b:8b:d1:62:49:cc:fe:dd:74:
+         ac:78:08:0f:75:12:d3:5f:5b:77:7e:f7:49:09:db:18:d4:c4:
+         4b:9f:d3:ef:6e:7f:ab:a7:02:c9:c4:fa:98:40:cf:37:96:dd:
+         0f:53:5a:23:60:e5:29:3c:0a:74:9d:3d:8b:7b:73:43:0f:c1:
+         fe:25:73:03:a1:15:83:9f:48:fa:7b:78:f9:a2:0d:52:69:17:
+         eb:bb:41:66:64:16:c3:a0:cf:00:ae:4f:45:e0:e4:da:5c:2e:
+         81:8d:41:11:86:f0:57:c3:27:3f:62:af:39:94:85:17:58:66:
+         39:fa:cf:5f:78:af:d2:00:b9:1e:62:42:6f:b6:1f:40:85:c4:
+         1e:30:01:0e:8a:99:49:53:bb:35:b0:83:dc:a9:c7:14:ff:43:
+         f5:2a:da:06:06:70:81:db:b9:39:57:1d:17:37:57:ea:e5:1a:
+         a8:7c:92:73:42:44:02:fb:73:1b:34:ac:ec:65:9e:22:0e:55:
+         1d:61:2c:4c:50:e3:67:76:2d:90:ab:3e:d9:a9:64:dd:f7:53:
+         09:36:a9:a4:56:89:d0:c6:c1:0f:03:07:c7:7f:0e:71:95:02:
+         69:a7:01:73
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1rjxy2TFSzDffguFqm
-08wLY4nLOlqHPDllqmMyef5cZ/YAjDK2dQEve0XTpFP0ekd+Lcpa0iLrIowC48GR
-rXH4Z0Nij/FgF3fqo9Z4ZLJYwv0g4KIG1RioNp4usJcgx3KkUQ3V8PAfsgWOgpie
-tWfdVbvBA+GfRXN01xGqW97BXV7yKYUpA+MU+uiR9SmjjMB4HEwYK0krIDEev+FV
-f+12JU2VpUBMzPSO3oXTiAqGJ5X0yEsAjRa3M+l2EqqFQx6Ju64W8vEmxKe5RIl2
-GxosNFBL4Gi88fu+IhSwK2d4IvBxB0MhoyTXTiigfQQWsaLYNSorLhOOa+nJf3h+
-mN8CAwEAAaOByzCByDAdBgNVHQ4EFgQU96RMyruBexBja8y8c+3GHFZVQBwwHwYD
-VR0jBBgwFoAU96RMyruBexBja8y8c+3GHFZVQBwwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFJy4jeyRNjSWvkEtvF
+LtIABPzAIj8k/u0tzphpxi2cEId6qyt1MFAPuRFDrTWl0fTO+pvPU9dRkbRofGxm
+9AuHBn9Iwu0gzgRCrdQF60jCwDhL1Kakf/lsKsvTmjiixYA1OFOaKvZNDAQ0V+4D
+W5J/d69aDK7PRPfOFVtTskzdVMxSl0QZ4hrXnX1p+YZsGtrVAUMzHY1MnGtgnagF
+kT7oCdBXBFq3KfW9r9gg3q4omMvfDUGJ0b+zIAM8imYjFr8Qr7rMGWdCp0UL5mgT
+VdYbxXtWsqQKKOv0G5tsZ4JYvdek1RyO5SBEfRQAUlzquKuiALx4MeMJvtXaxP2e
+b2sCAwEAAaOByzCByDAdBgNVHQ4EFgQUFKv+OreqZvSf5FklRA/TOtZ7WVwwHwYD
+VR0jBBgwFoAUFKv+OreqZvSf5FklRA/TOtZ7WVwwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBQX7Ay7EGF
-PXX/jQUXviCYgdpIORcgJKcxz2M1kCkm0GAp4Wj+Nf1sYcA6zQiSm8ytc9TdpVEO
-qWUEfRZ3i7i0nfvEekqrip7QcEdFdKRXq8LNs8VEa347eI9bf/D3w+8kokD+xnHN
-qKasYyJXOfWYw5F5v0dqC8axYcY1GxwQzOe8IIP2SCZKgEfgIvoEH7AGnFT6RkWb
-1SCi8O6+taKDkoZd9UD1MtCFNeuvXZsEXSGzNZDoXwpskIXrhjHkiYHGqnNNHj6v
-QAfxOK4wqy2qbS+yHf/YGC7z0HSO/20klzDLtuVvy2vCJ16l8WPA2Q3FCH+GjEfE
-m8vi2doXUVsS
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCFEU7n143b
+8HgeBC5DFwr2JEJ17OlZN0Y77vYbi9FiScz+3XSseAgPdRLTX1t3fvdJCdsY1MRL
+n9Pvbn+rpwLJxPqYQM83lt0PU1ojYOUpPAp0nT2Le3NDD8H+JXMDoRWDn0j6e3j5
+og1SaRfru0FmZBbDoM8Ark9F4OTaXC6BjUERhvBXwyc/Yq85lIUXWGY5+s9feK/S
+ALkeYkJvth9AhcQeMAEOiplJU7s1sIPcqccU/0P1KtoGBnCB27k5Vx0XN1fq5Rqo
+fJJzQkQC+3MbNKzsZZ4iDlUdYSxMUONndi2Qqz7ZqWTd91MJNqmkVonQxsEPAwfH
+fw5xlQJppwFz
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -283,6 +283,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
index 1ca13ee..8906285 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:73:f9:c5:cb:c6:2c:26:07:85:8f:4b:a4:ac:
-                    52:18:84:42:ca:cb:34:59:92:5a:d8:f7:1f:df:51:
-                    ed:6a:d5:e2:e1:dc:06:fb:72:0d:f3:e7:9f:38:0d:
-                    46:f4:19:77:31:33:4c:5b:ac:dd:6c:8c:06:68:4c:
-                    48:84:e2:c7:17:28:a9:0b:4e:07:07:b6:7b:cc:a9:
-                    ef:6c:ae:22:6e:03:d6:d4:5b:f1:d9:aa:9e:61:54:
-                    c7:14:79:cb:d6:c2:8f:da:87:e8:ae:d2:b3:66:4f:
-                    d3:4c:56:b8:e0:80:f8:45:b7:11:35:53:ec:d4:49:
-                    f8:05:70:f3:5b:56:b2:05:6d:3e:46:f8:be:67:71:
-                    48:a6:65:dd:55:62:a3:23:b0:94:e1:f2:3b:17:54:
-                    40:cc:37:90:d9:78:5a:d8:29:99:3f:02:16:a8:5b:
-                    5e:64:f4:f2:84:ad:25:c6:cf:2c:5b:e7:6c:bf:88:
-                    63:0c:8a:9b:fb:d9:b1:30:5a:21:74:1f:e4:5a:54:
-                    23:3a:a1:02:34:97:2c:a2:af:08:05:f0:db:52:58:
-                    7f:86:80:12:a3:f9:78:c0:ad:d6:8b:12:53:72:55:
-                    24:ca:3e:70:f2:7f:78:8f:b7:a1:32:f1:2c:7f:23:
-                    db:7b:ce:79:cf:cc:6d:d8:f7:14:54:5c:e0:db:7d:
-                    60:b3
+                    00:c8:bd:cf:49:54:fa:f7:4c:6b:1d:c4:0e:2a:3d:
+                    4f:ed:1a:80:d5:f9:bc:ea:64:89:fa:c7:c7:39:32:
+                    dd:7a:8f:4b:b8:11:85:9b:ef:bb:8f:71:93:69:59:
+                    e3:b5:5c:69:2f:d9:fa:04:e1:df:31:9e:f8:cc:17:
+                    4e:8b:c4:3d:f5:2f:02:23:c7:4c:e6:31:d5:bd:ef:
+                    06:af:f3:cd:81:f4:5d:f3:b9:0a:bf:7e:71:c0:5a:
+                    ea:9b:46:cf:ff:04:ed:11:a3:6f:6c:c6:84:d7:48:
+                    31:3a:ce:d6:ff:c8:95:7c:db:95:bd:cc:3f:3f:0e:
+                    e9:3b:1c:46:91:c2:3a:cc:5b:31:9b:66:16:4b:ac:
+                    a0:be:8c:98:9b:26:27:4a:50:08:20:d8:01:6e:cc:
+                    83:b0:1f:69:0a:d6:22:80:43:63:25:6b:fb:e3:76:
+                    b6:fd:e0:fc:13:38:6d:5b:3e:93:04:0d:0d:93:20:
+                    a8:d2:01:3c:e6:21:f7:0d:ac:9d:8e:aa:b7:69:fe:
+                    e0:f8:15:98:95:a1:2c:58:35:de:4d:d5:eb:7f:fe:
+                    72:d8:14:18:dc:46:34:5c:4d:42:33:71:ea:39:71:
+                    8b:8b:e4:7f:0f:4d:22:d3:cf:30:ce:d0:cd:3b:fb:
+                    a2:dd:39:0e:bb:71:19:d5:93:2e:9c:2b:d1:d0:2b:
+                    2f:05
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                99:D8:C1:91:A6:13:EB:0F:B4:6F:F2:B0:C4:0C:D9:0A:25:8E:53:10
+                01:F7:E1:07:3C:38:BF:84:61:21:DB:33:07:81:43:0E:50:9C:D5:5C
             X509v3 Authority Key Identifier: 
-                keyid:5B:9F:DF:D5:C6:FF:4F:39:52:EA:EF:97:5B:C1:ED:E1:CC:44:4E:B6
+                keyid:33:20:9D:8B:1C:46:DB:58:8D:CB:59:57:17:C8:F8:9F:35:AB:BE:99
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -58,42 +58,42 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         70:43:96:4c:98:6f:28:18:8a:59:39:82:cc:24:47:f8:58:f8:
-         f8:43:04:09:1e:a6:51:59:bc:60:36:ff:a1:41:51:e1:4c:40:
-         6b:5e:8b:73:3c:c4:37:65:f4:b0:57:01:8f:c6:ba:0c:5b:97:
-         a1:6b:3a:ea:53:79:8f:9a:99:f8:ca:01:a5:15:ac:60:4c:a7:
-         a7:68:07:72:3c:ed:06:70:d8:a4:d0:c0:5f:88:f2:6a:c0:a1:
-         2b:e7:58:68:23:d3:7e:f0:98:99:7d:3d:91:25:e3:84:4f:ef:
-         55:a4:ee:f7:1f:dc:f2:af:a8:74:96:6c:26:c4:d8:b6:84:dc:
-         b7:e7:7d:9d:2b:7b:3b:e6:e4:ad:76:e0:aa:ea:a4:26:97:4b:
-         20:cd:b1:bd:a8:6e:b3:08:47:31:a2:01:7b:b5:6c:72:d0:f0:
-         12:ac:bd:4f:be:de:23:cb:34:14:d2:11:42:3f:d5:70:76:4c:
-         99:db:ce:bc:0e:d5:2e:4b:6f:c3:1b:5d:c6:58:89:74:5f:1d:
-         62:cf:df:1e:4c:13:08:88:cb:66:6f:00:c2:c5:6f:bb:b4:9e:
-         1f:8a:7d:9d:0b:a6:11:6f:28:bb:5e:46:ab:71:d4:eb:00:8c:
-         71:6b:32:85:3d:17:ca:d0:15:90:66:7a:b2:96:0c:c1:9d:2e:
-         53:36:97:5b
+         3e:03:4f:21:11:cc:df:a5:0d:c1:00:85:8f:5b:47:06:b0:e6:
+         58:c3:31:64:93:70:86:5a:a3:d2:f7:24:e6:75:8e:15:cd:f6:
+         7b:46:b1:44:70:06:7c:4d:ef:e6:38:cc:28:d2:c5:9a:36:d2:
+         77:ea:fc:b5:c0:7b:cd:37:ca:99:07:dc:fb:45:f5:42:2f:31:
+         64:99:da:c2:76:d8:43:c2:f5:8d:0b:64:53:bb:bb:4f:73:3b:
+         b8:ac:e3:1e:21:75:99:dc:7c:69:8e:46:a7:38:54:7b:32:98:
+         bd:6a:87:4e:47:47:04:90:ff:02:63:81:1c:14:3b:73:b4:89:
+         ee:20:3e:72:79:68:33:a1:a2:34:be:5f:a4:74:4c:59:ea:e3:
+         2d:b8:f4:f5:f3:57:51:30:86:b5:2e:d6:53:01:04:78:37:1c:
+         23:45:59:95:f5:0f:55:b4:38:6f:1c:82:a7:20:03:c4:b0:5c:
+         bd:df:57:bb:3e:a7:9b:c4:92:b4:58:5a:e7:94:98:69:b9:00:
+         82:93:f2:89:a0:c1:b6:79:6b:0b:f5:81:b7:14:8d:70:1b:ef:
+         a2:a9:6f:ea:ed:a3:76:12:2b:09:7a:c9:0a:b4:8a:42:03:12:
+         df:a7:38:ee:38:10:49:04:d5:e6:6a:59:bf:60:a1:d3:4a:f7:
+         7f:9a:4c:f9
 -----BEGIN CERTIFICATE-----
 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKc/nF
-y8YsJgeFj0ukrFIYhELKyzRZklrY9x/fUe1q1eLh3Ab7cg3z5584DUb0GXcxM0xb
-rN1sjAZoTEiE4scXKKkLTgcHtnvMqe9sriJuA9bUW/HZqp5hVMcUecvWwo/ah+iu
-0rNmT9NMVrjggPhFtxE1U+zUSfgFcPNbVrIFbT5G+L5ncUimZd1VYqMjsJTh8jsX
-VEDMN5DZeFrYKZk/AhaoW15k9PKErSXGzyxb52y/iGMMipv72bEwWiF0H+RaVCM6
-oQI0lyyirwgF8NtSWH+GgBKj+XjArdaLElNyVSTKPnDyf3iPt6Ey8Sx/I9t7znnP
-zG3Y9xRUXODbfWCzAgMBAAGjgfowgfcwHQYDVR0OBBYEFJnYwZGmE+sPtG/ysMQM
-2QoljlMQMB8GA1UdIwQYMBaAFFuf39XG/085Uurvl1vB7eHMRE62MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIvc9J
+VPr3TGsdxA4qPU/tGoDV+bzqZIn6x8c5Mt16j0u4EYWb77uPcZNpWeO1XGkv2foE
+4d8xnvjMF06LxD31LwIjx0zmMdW97wav882B9F3zuQq/fnHAWuqbRs//BO0Ro29s
+xoTXSDE6ztb/yJV825W9zD8/Duk7HEaRwjrMWzGbZhZLrKC+jJibJidKUAgg2AFu
+zIOwH2kK1iKAQ2Mla/vjdrb94PwTOG1bPpMEDQ2TIKjSATzmIfcNrJ2Oqrdp/uD4
+FZiVoSxYNd5N1et//nLYFBjcRjRcTUIzceo5cYuL5H8PTSLTzzDO0M07+6LdOQ67
+cRnVky6cK9HQKy8FAgMBAAGjgfowgfcwHQYDVR0OBBYEFAH34Qc8OL+EYSHbMweB
+Qw5QnNVcMB8GA1UdIwQYMBaAFDMgnYscRttYjctZVxfI+J81q76ZMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
 BwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAgEBMA0GCSqGSIb3DQEBCwUAA4IB
-AQBwQ5ZMmG8oGIpZOYLMJEf4WPj4QwQJHqZRWbxgNv+hQVHhTEBrXotzPMQ3ZfSw
-VwGPxroMW5ehazrqU3mPmpn4ygGlFaxgTKenaAdyPO0GcNik0MBfiPJqwKEr51ho
-I9N+8JiZfT2RJeOET+9VpO73H9zyr6h0lmwmxNi2hNy3532dK3s75uStduCq6qQm
-l0sgzbG9qG6zCEcxogF7tWxy0PASrL1Pvt4jyzQU0hFCP9VwdkyZ2868DtUuS2/D
-G13GWIl0Xx1iz98eTBMIiMtmbwDCxW+7tJ4fin2dC6YRbyi7XkarcdTrAIxxazKF
-PRfK0BWQZnqylgzBnS5TNpdb
+AQA+A08hEczfpQ3BAIWPW0cGsOZYwzFkk3CGWqPS9yTmdY4VzfZ7RrFEcAZ8Te/m
+OMwo0sWaNtJ36vy1wHvNN8qZB9z7RfVCLzFkmdrCdthDwvWNC2RTu7tPczu4rOMe
+IXWZ3HxpjkanOFR7Mpi9aodOR0cEkP8CY4EcFDtztInuID5yeWgzoaI0vl+kdExZ
+6uMtuPT181dRMIa1LtZTAQR4NxwjRVmV9Q9VtDhvHIKnIAPEsFy931e7PqebxJK0
+WFrnlJhpuQCCk/KJoMG2eWsL9YG3FI1wG++iqW/q7aN2EisJeskKtIpCAxLfpzju
+OBBJBNXmalm/YKHTSvd/mkz5
 -----END CERTIFICATE-----
 
 Certificate:
@@ -110,30 +110,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:43:a7:fe:04:ff:78:d4:be:60:bd:16:7d:46:
-                    a2:cf:a8:74:42:6b:2b:49:13:61:2e:78:e7:7c:49:
-                    52:0b:df:bf:b0:e1:5e:dd:f5:39:99:11:ff:d2:14:
-                    8f:db:de:10:55:90:29:05:b3:49:db:80:87:d1:82:
-                    6b:15:97:4b:da:5e:d7:da:11:0c:84:1e:db:d9:57:
-                    4d:52:cf:31:a0:1f:bd:4f:79:22:7a:ee:5a:ae:9d:
-                    22:df:71:d3:20:12:e5:c8:7e:1e:76:d3:6f:07:6e:
-                    5c:c3:89:11:a2:35:50:05:4d:6f:30:d8:3c:ef:38:
-                    80:51:e3:ee:7d:66:81:7f:7c:c4:e7:d0:d4:53:1d:
-                    00:3d:03:cb:87:f4:3d:b9:13:cd:16:ef:b2:51:3f:
-                    1c:96:0a:71:90:ca:25:c4:10:71:aa:ba:27:c8:67:
-                    94:af:63:7c:29:2a:2e:a8:4e:03:7e:6c:5c:2f:96:
-                    8d:9d:ca:c5:6f:f1:e7:8d:92:a9:ed:aa:87:3a:74:
-                    12:c7:ea:3f:ad:a2:6a:76:d8:f6:c9:96:27:6e:8b:
-                    a3:b8:cc:d4:2b:9b:61:be:2b:11:c5:bb:da:ef:14:
-                    23:5d:5d:96:69:c0:a7:7a:16:db:3a:4e:e4:22:84:
-                    55:02:26:7b:a5:8e:84:12:e4:36:fc:c5:07:d9:ee:
-                    c5:19
+                    00:b6:71:f4:27:39:eb:53:1f:5a:56:ca:0b:d1:43:
+                    c5:55:d1:c2:7a:28:b8:34:d9:7e:4e:16:01:77:90:
+                    ba:ae:85:ca:22:43:c4:d9:ca:5b:86:87:c0:f5:b6:
+                    c6:41:75:ae:97:3f:f6:4d:24:7d:0c:b4:ac:e7:a0:
+                    89:61:b9:08:c8:81:3d:b3:d1:3a:8c:44:35:fb:b1:
+                    c3:73:89:39:cc:7b:b7:a7:c2:31:cb:12:a0:52:59:
+                    91:0e:c5:83:ad:5a:0c:fa:1c:64:39:e0:ce:b4:cf:
+                    31:db:e0:36:bd:11:88:ae:56:36:e0:fa:70:ba:ad:
+                    53:34:2c:4d:7d:f0:74:f9:7d:82:2c:46:4a:39:1b:
+                    d3:8f:8b:85:b9:3d:53:36:8f:d6:5a:2f:57:bd:e5:
+                    10:76:ec:90:26:79:cd:f2:9f:cb:9d:e5:d7:10:46:
+                    63:f2:b7:58:7f:10:3b:ed:02:9c:2a:dd:38:87:7a:
+                    32:de:d5:9b:96:e2:54:5a:9c:ac:97:07:96:9b:eb:
+                    21:40:96:b4:bf:bb:91:77:db:8d:40:66:2d:81:d1:
+                    90:30:42:86:55:e9:f1:51:bc:ce:9e:27:71:9a:07:
+                    e6:ce:b0:43:82:b9:4e:81:2b:40:79:35:a8:99:80:
+                    27:af:30:e7:85:fb:ba:6c:3a:f5:94:c0:09:85:08:
+                    26:cf
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5B:9F:DF:D5:C6:FF:4F:39:52:EA:EF:97:5B:C1:ED:E1:CC:44:4E:B6
+                33:20:9D:8B:1C:46:DB:58:8D:CB:59:57:17:C8:F8:9F:35:AB:BE:99
             X509v3 Authority Key Identifier: 
-                keyid:8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                keyid:B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -148,41 +148,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         14:37:73:58:3c:37:40:b3:ff:a3:e4:f3:2d:f1:26:6b:c9:82:
-         17:c5:97:4d:bd:84:6a:19:25:08:20:a9:7d:38:fb:3d:a4:7f:
-         06:80:7e:fb:6e:7e:bf:26:90:4b:96:ab:a7:f9:49:a5:d6:77:
-         67:b5:ab:bb:ad:ea:84:5a:43:13:f9:b3:1a:80:b1:59:cc:d4:
-         1d:33:e8:0d:b0:af:9a:80:44:0e:a6:01:f3:a4:e2:87:2b:db:
-         47:be:0f:28:08:d9:ab:7c:d9:4c:86:d0:ba:bc:1b:dc:99:9b:
-         33:ea:a7:3e:ef:52:b8:70:a8:27:e7:83:59:cd:57:38:7f:a1:
-         36:53:4f:a0:1b:69:7d:e4:fa:9f:2b:52:50:09:23:62:c6:c0:
-         01:a6:85:76:45:80:6a:b6:54:bd:60:5d:5a:3a:04:92:ab:e3:
-         bd:0c:94:7f:5f:79:9c:3f:6e:12:c3:96:b0:78:44:9b:03:1e:
-         79:11:fb:8d:a5:1d:55:c9:b3:e5:a0:26:18:10:68:92:b8:54:
-         68:d0:2d:e1:99:0c:08:9c:cc:40:50:34:69:9f:13:e6:d7:87:
-         85:e7:57:63:3e:17:0f:ce:02:7b:78:e5:18:ef:1a:55:b1:6a:
-         55:f8:44:3e:92:1d:08:a1:7d:bb:fc:00:be:e3:1b:83:aa:b8:
-         75:f0:05:45
+         cf:16:2a:e7:82:dd:17:0f:54:74:e5:31:4e:d7:d1:52:1f:b2:
+         97:17:4f:f7:0e:68:07:a5:74:93:dc:45:c8:81:60:e9:6a:d8:
+         16:dd:99:65:66:09:48:1c:93:45:8c:ed:48:a3:16:63:50:0c:
+         6c:0f:dc:ad:7a:50:20:05:64:68:fa:70:37:af:7e:0b:88:e5:
+         61:8f:8d:93:88:9e:45:09:95:75:21:42:af:6a:79:40:56:c9:
+         f8:9b:5a:b5:c3:77:44:d5:1b:28:cb:3f:2f:59:84:21:ae:c2:
+         34:25:48:6d:ed:3e:7d:40:9c:eb:bd:3f:3e:5e:34:de:f7:eb:
+         b6:66:26:4e:05:49:00:13:a1:93:ad:fa:5f:8b:77:86:d7:1b:
+         27:da:49:83:b4:3e:df:dc:d0:0d:bb:75:a3:ff:f5:2a:f4:62:
+         f8:da:8a:ab:f0:38:ce:a4:34:f0:9a:9e:2e:de:aa:9a:db:cf:
+         47:ec:ec:12:00:3d:57:bf:d3:17:c6:f9:b4:52:4e:22:45:3f:
+         64:15:c8:f3:ad:74:58:a1:7f:b4:e0:0e:d7:6a:7f:c4:e8:ff:
+         51:5b:b4:e8:81:e7:21:63:cd:57:f1:0d:39:58:ea:17:9e:3e:
+         2e:91:94:c8:df:44:57:77:7e:a5:83:e2:d4:2e:80:42:89:c8:
+         33:37:04:f9
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyEOn/gT/
-eNS+YL0WfUaiz6h0QmsrSRNhLnjnfElSC9+/sOFe3fU5mRH/0hSP294QVZApBbNJ
-24CH0YJrFZdL2l7X2hEMhB7b2VdNUs8xoB+9T3kieu5arp0i33HTIBLlyH4edtNv
-B25cw4kRojVQBU1vMNg87ziAUePufWaBf3zE59DUUx0APQPLh/Q9uRPNFu+yUT8c
-lgpxkMolxBBxqronyGeUr2N8KSouqE4DfmxcL5aNncrFb/HnjZKp7aqHOnQSx+o/
-raJqdtj2yZYnboujuMzUK5thvisRxbva7xQjXV2WacCnehbbOk7kIoRVAiZ7pY6E
-EuQ2/MUH2e7FGQIDAQABo4HLMIHIMB0GA1UdDgQWBBRbn9/Vxv9POVLq75dbwe3h
-zEROtjAfBgNVHSMEGDAWgBSKhc5+3K8VtwHCXIE/PRRJ0jgIqzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtnH0Jznr
+Ux9aVsoL0UPFVdHCeii4NNl+ThYBd5C6roXKIkPE2cpbhofA9bbGQXWulz/2TSR9
+DLSs56CJYbkIyIE9s9E6jEQ1+7HDc4k5zHu3p8IxyxKgUlmRDsWDrVoM+hxkOeDO
+tM8x2+A2vRGIrlY24Ppwuq1TNCxNffB0+X2CLEZKORvTj4uFuT1TNo/WWi9XveUQ
+duyQJnnN8p/LneXXEEZj8rdYfxA77QKcKt04h3oy3tWbluJUWpyslweWm+shQJa0
+v7uRd9uNQGYtgdGQMEKGVenxUbzOnidxmgfmzrBDgrlOgStAeTWomYAnrzDnhfu6
+bDr1lMAJhQgmzwIDAQABo4HLMIHIMB0GA1UdDgQWBBQzIJ2LHEbbWI3LWVcXyPif
+Nau+mTAfBgNVHSMEGDAWgBS2pwGgDkGzuxpng3HxahfQZJxovzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABQ3c1g8N0Cz/6Pk8y3xJmvJghfFl029hGoZJQggqX04+z2kfwaAfvtufr8mkEuW
-q6f5SaXWd2e1q7ut6oRaQxP5sxqAsVnM1B0z6A2wr5qARA6mAfOk4ocr20e+DygI
-2at82UyG0Lq8G9yZmzPqpz7vUrhwqCfng1nNVzh/oTZTT6AbaX3k+p8rUlAJI2LG
-wAGmhXZFgGq2VL1gXVo6BJKr470MlH9feZw/bhLDlrB4RJsDHnkR+42lHVXJs+Wg
-JhgQaJK4VGjQLeGZDAiczEBQNGmfE+bXh4XnV2M+Fw/OAnt45RjvGlWxalX4RD6S
-HQihfbv8AL7jG4OquHXwBUU=
+AM8WKueC3RcPVHTlMU7X0VIfspcXT/cOaAeldJPcRciBYOlq2BbdmWVmCUgck0WM
+7UijFmNQDGwP3K16UCAFZGj6cDevfguI5WGPjZOInkUJlXUhQq9qeUBWyfibWrXD
+d0TVGyjLPy9ZhCGuwjQlSG3tPn1AnOu9Pz5eNN7367ZmJk4FSQAToZOt+l+Ld4bX
+GyfaSYO0Pt/c0A27daP/9Sr0YvjaiqvwOM6kNPCani7eqprbz0fs7BIAPVe/0xfG
++bRSTiJFP2QVyPOtdFihf7TgDtdqf8To/1FbtOiB5yFjzVfxDTlY6heePi6RlMjf
+RFd3fqWD4tQugEKJyDM3BPk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -199,30 +199,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d3:fa:b1:7f:2b:e4:ff:ad:10:e9:54:54:ef:6a:
-                    81:02:0b:b6:83:70:89:ae:d9:4d:54:ea:95:99:88:
-                    3d:59:7d:97:1e:fd:b9:9b:53:8b:14:1e:a4:68:07:
-                    ed:68:65:68:7d:4f:ba:28:38:ff:87:33:98:2c:32:
-                    d0:e5:00:78:0f:6a:20:32:7d:9e:7d:9b:af:e9:39:
-                    fe:5c:bc:04:1c:06:1a:11:1a:46:24:34:f7:e3:af:
-                    56:6d:38:8f:46:39:a6:01:fa:56:f9:d7:9e:73:35:
-                    1a:23:94:12:0f:0d:d3:ec:fe:09:57:f6:a0:9c:18:
-                    a7:ba:4b:c9:37:a3:0c:60:77:4b:77:5f:c8:9c:7e:
-                    b1:5c:b3:43:72:da:c9:6c:c8:71:24:ab:2f:c4:83:
-                    bd:b0:4f:60:af:46:0d:7b:34:8f:e9:70:a2:85:ed:
-                    6e:05:df:e3:c1:40:3d:17:b1:f0:a3:7d:e2:17:6f:
-                    3d:fe:11:81:90:1f:c2:f8:bc:2c:d5:9c:fc:04:47:
-                    24:c4:5e:cf:20:0f:31:e8:7d:ea:b5:69:b8:0f:35:
-                    19:5d:13:08:db:d6:a2:dc:7a:33:92:b3:9c:fc:35:
-                    de:cf:55:96:f7:52:6e:a9:e2:93:b0:52:07:8d:0f:
-                    95:9c:0e:0d:1b:48:0e:b8:41:4f:eb:68:da:e5:6d:
-                    a1:63
+                    00:f9:ba:6f:a7:d8:e8:a7:e1:04:56:72:f9:21:45:
+                    73:22:1e:f9:fc:2e:33:d8:ef:57:7b:23:fe:3f:61:
+                    c7:c9:b8:16:67:dd:1c:78:f1:d0:64:df:a7:88:af:
+                    f6:ab:f7:a7:38:84:3f:20:e5:37:42:6f:f5:37:c4:
+                    63:cf:68:4a:35:e0:05:da:8c:95:83:a9:98:f9:e5:
+                    7f:03:45:5c:e5:39:70:61:d6:ee:09:da:30:24:6d:
+                    7f:3c:c9:ff:d1:65:c9:20:06:77:7d:91:e0:4a:00:
+                    8d:c4:2d:23:f6:03:c5:8c:c7:b6:af:3f:8b:fd:3f:
+                    12:e3:36:1b:81:eb:61:8f:ab:20:19:c1:52:f4:8e:
+                    83:97:06:29:35:be:ab:cc:a6:bd:10:fb:35:aa:70:
+                    09:bb:a9:4b:91:ab:5b:e7:c2:84:73:05:6f:c6:c8:
+                    e6:8b:aa:95:0a:ed:3c:42:84:24:11:23:c0:85:1b:
+                    be:2c:37:61:01:62:65:d8:3f:6f:06:b2:06:e7:c0:
+                    57:10:46:42:2e:4b:70:a1:43:95:85:54:48:40:0d:
+                    08:0b:0d:b9:3d:db:0b:45:af:88:60:2c:e5:a7:e5:
+                    7d:8a:b3:a8:3a:8e:c0:22:05:ae:fb:99:e5:47:72:
+                    10:ca:7e:5d:de:75:b1:fd:25:b0:2d:c4:42:c5:b7:
+                    2c:c7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
             X509v3 Authority Key Identifier: 
-                keyid:8A:85:CE:7E:DC:AF:15:B7:01:C2:5C:81:3F:3D:14:49:D2:38:08:AB
+                keyid:B6:A7:01:A0:0E:41:B3:BB:1A:67:83:71:F1:6A:17:D0:64:9C:68:BF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -237,41 +237,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3b:f2:cd:03:ef:d9:61:67:ea:7b:dd:e9:88:13:07:8d:94:51:
-         62:bb:56:d6:c1:be:8a:d0:a0:81:fe:1d:90:6d:85:94:2c:ac:
-         33:fb:5d:f6:c9:74:72:7b:f7:5a:b8:e4:b6:dd:30:bb:93:3b:
-         74:22:e9:fe:e9:5c:b2:8b:d4:a1:21:0c:e6:3c:ee:86:ae:9e:
-         8a:fd:88:bb:a7:fd:20:bb:9c:ff:d4:ca:6f:66:60:19:14:d1:
-         d1:f2:d6:f3:b2:58:c8:4d:15:30:e1:e0:fc:40:ad:55:25:ba:
-         8d:25:68:26:c4:64:68:7e:94:e6:f4:96:5a:c4:e6:ba:85:5b:
-         b2:32:d1:82:32:8b:f4:3f:6f:4e:d5:de:2e:d7:09:3c:1f:7e:
-         93:3a:22:d8:ef:40:41:47:28:80:03:77:0d:f9:51:28:28:b6:
-         53:24:66:f7:3b:56:6c:53:58:55:b2:49:7c:c4:1a:3d:a1:37:
-         29:19:8a:9a:99:84:7f:63:ac:21:85:f5:02:5a:5a:1c:7c:0a:
-         8b:bc:83:ff:80:57:2e:ce:62:c5:79:58:24:12:e8:af:a4:6c:
-         ce:a8:92:2b:25:c4:e3:b6:27:f7:d5:dd:e6:fa:cc:91:6c:59:
-         5e:f5:a4:e2:4f:0b:18:fa:4e:9c:88:66:20:25:af:87:14:01:
-         27:08:89:6a
+         47:75:3e:74:30:6f:a8:e6:a2:f7:15:42:c3:8a:00:e4:68:a8:
+         86:bf:7d:22:18:e7:1c:cb:a6:b1:94:46:50:85:c8:e5:aa:99:
+         7e:03:96:56:4a:44:99:18:e1:c4:a9:3a:b0:1e:7b:46:e1:8d:
+         91:e4:f7:b2:2c:a3:dd:26:00:eb:f5:cf:cd:b6:65:54:c1:fd:
+         22:b0:66:80:d0:7d:bc:bd:b7:7a:c2:5b:df:ce:00:a3:94:b2:
+         c0:ed:73:28:5e:41:c7:1c:25:2b:a0:98:ec:62:fc:46:f9:f0:
+         19:d7:2f:7b:d5:12:f6:a4:97:b2:97:c1:e3:27:6a:9b:f9:91:
+         52:c7:0b:0f:a6:68:e4:62:90:c9:e2:82:49:e3:44:cf:e6:14:
+         ca:b7:ae:79:5a:b1:03:bc:68:fc:65:4d:28:a8:91:41:89:53:
+         85:ef:66:b8:5c:4b:68:10:1d:0c:07:9f:21:3c:93:19:97:72:
+         78:7f:53:7d:b7:68:c1:2a:cf:d2:a7:c8:63:08:27:ec:23:81:
+         9d:b9:d3:1a:2b:68:86:36:dc:1a:96:c1:c9:bf:4e:e0:3c:de:
+         84:9c:ae:5b:9b:ac:5c:fd:41:b2:cb:07:bc:29:4b:49:8e:da:
+         40:bc:71:4d:b4:50:94:d2:db:09:4f:28:ba:d8:5e:52:93:a1:
+         33:e1:ae:0c
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANP6sX8r5P+tEOlUVO9q
-gQILtoNwia7ZTVTqlZmIPVl9lx79uZtTixQepGgH7WhlaH1Puig4/4czmCwy0OUA
-eA9qIDJ9nn2br+k5/ly8BBwGGhEaRiQ09+OvVm04j0Y5pgH6VvnXnnM1GiOUEg8N
-0+z+CVf2oJwYp7pLyTejDGB3S3dfyJx+sVyzQ3LayWzIcSSrL8SDvbBPYK9GDXs0
-j+lwooXtbgXf48FAPRex8KN94hdvPf4RgZAfwvi8LNWc/ARHJMRezyAPMeh96rVp
-uA81GV0TCNvWotx6M5KznPw13s9VlvdSbqnik7BSB40PlZwODRtIDrhBT+to2uVt
-oWMCAwEAAaOByzCByDAdBgNVHQ4EFgQUioXOftyvFbcBwlyBPz0USdI4CKswHwYD
-VR0jBBgwFoAUioXOftyvFbcBwlyBPz0USdI4CKswNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPm6b6fY6KfhBFZy+SFF
+cyIe+fwuM9jvV3sj/j9hx8m4FmfdHHjx0GTfp4iv9qv3pziEPyDlN0Jv9TfEY89o
+SjXgBdqMlYOpmPnlfwNFXOU5cGHW7gnaMCRtfzzJ/9FlySAGd32R4EoAjcQtI/YD
+xYzHtq8/i/0/EuM2G4HrYY+rIBnBUvSOg5cGKTW+q8ymvRD7NapwCbupS5GrW+fC
+hHMFb8bI5ouqlQrtPEKEJBEjwIUbviw3YQFiZdg/bwayBufAVxBGQi5LcKFDlYVU
+SEANCAsNuT3bC0WviGAs5aflfYqzqDqOwCIFrvuZ5UdyEMp+Xd51sf0lsC3EQsW3
+LMcCAwEAAaOByzCByDAdBgNVHQ4EFgQUtqcBoA5Bs7saZ4Nx8WoX0GScaL8wHwYD
+VR0jBBgwFoAUtqcBoA5Bs7saZ4Nx8WoX0GScaL8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA78s0D79lh
-Z+p73emIEweNlFFiu1bWwb6K0KCB/h2QbYWULKwz+132yXRye/dauOS23TC7kzt0
-Iun+6Vyyi9ShIQzmPO6Grp6K/Yi7p/0gu5z/1MpvZmAZFNHR8tbzsljITRUw4eD8
-QK1VJbqNJWgmxGRofpTm9JZaxOa6hVuyMtGCMov0P29O1d4u1wk8H36TOiLY70BB
-RyiAA3cN+VEoKLZTJGb3O1ZsU1hVskl8xBo9oTcpGYqamYR/Y6whhfUCWlocfAqL
-vIP/gFcuzmLFeVgkEuivpGzOqJIrJcTjtif31d3m+syRbFle9aTiTwsY+k6ciGYg
-Ja+HFAEnCIlq
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBHdT50MG+o
+5qL3FULDigDkaKiGv30iGOccy6axlEZQhcjlqpl+A5ZWSkSZGOHEqTqwHntG4Y2R
+5PeyLKPdJgDr9c/NtmVUwf0isGaA0H28vbd6wlvfzgCjlLLA7XMoXkHHHCUroJjs
+YvxG+fAZ1y971RL2pJeyl8HjJ2qb+ZFSxwsPpmjkYpDJ4oJJ40TP5hTKt655WrED
+vGj8ZU0oqJFBiVOF72a4XEtoEB0MB58hPJMZl3J4f1N9t2jBKs/Sp8hjCCfsI4Gd
+udMaK2iGNtwalsHJv07gPN6EnK5bm6xc/UGyywe8KUtJjtpAvHFNtFCU0tsJTyi6
+2F5Sk6Ez4a4M
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -284,6 +284,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Target certificate looks like a CA but does not set all CA properties
 
diff --git a/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
index 4cb7258..8915cc8 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:f5:cd:3c:3f:41:74:34:24:e9:1d:74:42:a1:a8:
-                    16:8e:38:0b:ef:74:5b:38:0c:fb:18:b5:f6:08:f3:
-                    7e:d6:03:ac:02:7c:38:07:dc:c2:3e:78:bd:a7:2d:
-                    44:3d:6b:b4:74:42:71:c4:0c:93:c7:9a:ba:83:e9:
-                    6a:12:39:ab:fd:63:f5:e9:d7:97:33:93:7c:1b:77:
-                    78:c6:7a:7b:32:31:c3:68:aa:b0:b9:78:7b:c2:5a:
-                    85:0b:04:b4:c1:2b:fd:ce:71:02:6a:b1:0c:f6:1a:
-                    65:99:58:29:6e:95:21:69:7c:2a:c0:ff:18:90:28:
-                    92:ad:40:f5:83:67:63:04:14:21:aa:d2:29:35:22:
-                    03:f8:28:27:8a:69:82:de:aa:f4:1e:5e:93:19:27:
-                    74:4a:6b:d5:82:d3:2e:66:cb:23:e9:34:d1:70:0f:
-                    84:cb:1d:87:55:9e:1c:f2:b9:5a:e8:d0:43:dc:89:
-                    a3:5c:28:61:fc:89:97:ab:ff:4a:2c:bc:c0:58:f2:
-                    68:f8:d7:9f:3e:e8:b1:8c:70:5a:d0:f7:1a:d3:dd:
-                    d1:24:ba:fe:15:f8:bd:ea:16:8d:ee:9e:7e:99:30:
-                    22:6c:24:21:67:d1:fa:50:61:ce:65:48:5f:0e:79:
-                    02:0d:e9:b1:69:d3:4c:e7:2d:5d:57:8b:d5:e8:42:
-                    d4:e7
+                    00:b4:59:94:09:11:c2:ed:91:34:ab:18:16:c4:2e:
+                    1d:29:52:fc:6e:92:3c:93:7d:9d:fb:d8:99:a0:72:
+                    93:43:d6:62:47:53:ff:23:f7:77:44:17:d0:0d:c5:
+                    21:c4:d5:bd:5d:e6:29:d5:b9:46:b0:15:16:59:5b:
+                    61:77:74:95:3f:32:a1:1b:6b:d2:42:22:4f:91:7c:
+                    fe:92:60:53:b3:92:88:d9:82:98:a2:7e:cb:ad:24:
+                    b6:43:f0:c3:dd:bf:05:62:5d:86:10:f1:15:90:bd:
+                    e2:43:54:85:30:6d:ee:5d:17:62:fc:67:ae:3e:da:
+                    78:58:84:e9:f1:9e:f5:ad:d5:67:22:51:05:6c:b6:
+                    c3:0b:5e:1c:a8:95:27:be:26:e6:ef:63:55:3c:05:
+                    69:64:bf:c8:98:b2:86:f6:57:c0:2e:83:4d:2e:56:
+                    59:87:45:a6:bb:3b:94:7d:97:9b:8c:37:b1:d8:d6:
+                    25:f2:66:49:6c:dc:3c:9c:dc:08:51:64:2b:1d:53:
+                    ae:83:69:75:87:9c:46:b5:93:57:c0:2f:ff:ba:91:
+                    8d:a6:8d:53:cb:37:5d:13:09:ac:22:94:65:08:c6:
+                    93:75:d6:f6:ff:b6:36:19:da:e4:9a:fb:a8:b4:fa:
+                    eb:5b:3f:0d:e6:f8:dc:25:f8:5d:30:b3:5a:c9:8b:
+                    57:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B4:44:21:DE:96:81:AA:7F:9A:5B:79:CB:57:AA:3D:13:A5:4B:6A:93
+                77:17:9D:DC:51:C4:B1:95:4B:96:56:2B:A0:13:EF:2D:9C:19:7A:38
             X509v3 Authority Key Identifier: 
-                keyid:01:CB:1D:FC:13:00:C9:67:B2:D6:76:F2:0A:4F:9D:6A:D4:E2:9D:3D
+                keyid:33:DF:16:E8:65:99:B1:A4:A5:43:E7:13:B8:00:2A:1E:77:8B:75:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,41 +56,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         0e:8f:41:87:a8:42:bd:13:c8:62:be:1d:f6:ad:a4:cd:00:5d:
-         21:61:73:5f:75:27:67:16:98:11:ca:0f:cd:9d:bf:96:2a:75:
-         62:35:68:e0:af:f7:6f:c4:75:69:f2:a7:89:27:96:64:4f:0e:
-         7e:f0:82:89:65:1e:a2:08:cd:8b:f1:e5:a0:32:c5:93:2a:62:
-         4c:3c:d2:9f:95:55:5d:87:a8:fe:ef:fa:92:aa:08:76:38:67:
-         0a:d3:f9:0a:b9:93:69:e6:d3:78:ab:9f:eb:ef:35:a7:24:ae:
-         10:d7:3d:17:bd:86:07:c0:64:0f:d6:fc:55:c1:54:70:6c:22:
-         4f:ae:c1:64:ca:fc:dc:97:eb:8b:d2:22:52:d8:52:2c:4d:d4:
-         5c:df:10:52:ab:ab:b2:89:10:e8:ed:00:19:8a:65:e8:4e:8c:
-         e2:5d:5b:cd:35:4c:55:24:30:be:57:f7:f0:51:ef:52:9d:34:
-         60:0d:1e:f5:ba:8a:33:83:ac:db:dc:d9:2b:0b:f3:46:1c:98:
-         3a:5e:5c:c7:36:7e:62:62:a4:13:68:2e:35:32:a1:bd:9d:e9:
-         67:bb:58:85:3b:ea:94:1f:c7:91:35:b0:2c:ce:25:2b:9c:9f:
-         60:7a:09:fa:32:1c:9d:4e:ca:ef:20:9d:ca:e1:ad:20:cd:63:
-         20:ce:48:fd
+         53:8b:42:95:c7:8b:3a:b4:97:9e:56:2b:51:99:4e:77:ea:5a:
+         b2:77:7b:60:ea:fd:72:08:3d:8d:2a:02:ac:26:a3:78:3e:cd:
+         93:39:6c:1a:55:39:f1:cc:c2:eb:ab:13:25:b5:a5:7a:0a:6a:
+         08:d8:32:ab:88:b3:af:8e:ec:c0:c5:a8:33:ad:45:a5:b7:00:
+         23:32:fa:5b:b7:9f:cd:0a:08:0a:a1:0f:00:5f:66:30:d1:ac:
+         4d:7f:34:ed:95:e2:15:f2:00:dc:45:30:77:1f:ab:f0:3c:65:
+         de:7f:56:a4:fe:f7:d4:c8:86:2e:dd:37:41:05:a8:05:1e:b1:
+         5a:90:ef:6e:12:2d:ff:f6:75:e7:f1:b0:39:da:54:b0:30:df:
+         85:32:4c:d1:27:47:a8:f8:94:a4:4a:00:63:5f:10:d8:07:88:
+         ff:5d:ae:1e:22:e0:f3:58:85:18:d2:05:74:d6:4e:e4:4b:4f:
+         80:83:f1:18:92:6d:1f:c5:b6:12:08:15:55:d7:f9:62:86:3d:
+         d2:23:9e:38:c6:8d:2b:5a:76:ee:9f:51:4f:56:a1:42:bf:e0:
+         a1:65:30:dc:f5:37:c6:49:5f:e5:82:f5:8b:16:1d:d3:bd:e2:
+         82:d8:69:35:9b:b8:cb:f3:92:6d:d7:cd:19:f5:77:41:2c:c7:
+         74:75:31:c7
 -----BEGIN CERTIFICATE-----
 MIIDfzCCAmegAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD1zTw/
-QXQ0JOkddEKhqBaOOAvvdFs4DPsYtfYI837WA6wCfDgH3MI+eL2nLUQ9a7R0QnHE
-DJPHmrqD6WoSOav9Y/Xp15czk3wbd3jGensyMcNoqrC5eHvCWoULBLTBK/3OcQJq
-sQz2GmWZWClulSFpfCrA/xiQKJKtQPWDZ2MEFCGq0ik1IgP4KCeKaYLeqvQeXpMZ
-J3RKa9WC0y5myyPpNNFwD4TLHYdVnhzyuVro0EPciaNcKGH8iZer/0osvMBY8mj4
-158+6LGMcFrQ9xrT3dEkuv4V+L3qFo3unn6ZMCJsJCFn0fpQYc5lSF8OeQIN6bFp
-00znLV1Xi9XoQtTnAgMBAAGjgdswgdgwHQYDVR0OBBYEFLREId6Wgap/mlt5y1eq
-PROlS2qTMB8GA1UdIwQYMBaAFAHLHfwTAMlnstZ28gpPnWrU4p09MD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0WZQJ
+EcLtkTSrGBbELh0pUvxukjyTfZ372JmgcpND1mJHU/8j93dEF9ANxSHE1b1d5inV
+uUawFRZZW2F3dJU/MqEba9JCIk+RfP6SYFOzkojZgpiifsutJLZD8MPdvwViXYYQ
+8RWQveJDVIUwbe5dF2L8Z64+2nhYhOnxnvWt1WciUQVstsMLXhyolSe+JubvY1U8
+BWlkv8iYsob2V8Aug00uVlmHRaa7O5R9l5uMN7HY1iXyZkls3Dyc3AhRZCsdU66D
+aXWHnEa1k1fAL/+6kY2mjVPLN10TCawilGUIxpN11vb/tjYZ2uSa+6i0+utbPw3m
++Nwl+F0ws1rJi1c3AgMBAAGjgdswgdgwHQYDVR0OBBYEFHcXndxRxLGVS5ZWK6AT
+7y2cGXo4MB8GA1UdIwQYMBaAFDPfFuhlmbGkpUPnE7gAKh53i3VnMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQELBQADggEBAA6PQYeoQr0TyGK+HfatpM0AXSFhc191J2cWmBHK
-D82dv5YqdWI1aOCv92/EdWnyp4knlmRPDn7wgollHqIIzYvx5aAyxZMqYkw80p+V
-VV2HqP7v+pKqCHY4ZwrT+Qq5k2nm03irn+vvNackrhDXPRe9hgfAZA/W/FXBVHBs
-Ik+uwWTK/NyX64vSIlLYUixN1FzfEFKrq7KJEOjtABmKZehOjOJdW801TFUkML5X
-9/BR71KdNGANHvW6ijODrNvc2SsL80YcmDpeXMc2fmJipBNoLjUyob2d6We7WIU7
-6pQfx5E1sCzOJSucn2B6CfoyHJ1Oyu8gncrhrSDNYyDOSP0=
+DQYJKoZIhvcNAQELBQADggEBAFOLQpXHizq0l55WK1GZTnfqWrJ3e2Dq/XIIPY0q
+Aqwmo3g+zZM5bBpVOfHMwuurEyW1pXoKagjYMquIs6+O7MDFqDOtRaW3ACMy+lu3
+n80KCAqhDwBfZjDRrE1/NO2V4hXyANxFMHcfq/A8Zd5/VqT+99TIhi7dN0EFqAUe
+sVqQ724SLf/2defxsDnaVLAw34UyTNEnR6j4lKRKAGNfENgHiP9drh4i4PNYhRjS
+BXTWTuRLT4CD8RiSbR/FthIIFVXX+WKGPdIjnjjGjStadu6fUU9WoUK/4KFlMNz1
+N8ZJX+WC9YsWHdO94oLYaTWbuMvzkm3XzRn1d0Esx3R1Mcc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:8e:2e:ba:a1:8d:d9:60:16:cd:17:31:c9:08:
-                    43:93:94:76:48:55:a2:78:19:17:70:8e:95:25:ac:
-                    f9:b9:81:33:66:8c:2c:79:b7:d9:f5:89:92:1b:d2:
-                    4e:01:e9:69:e6:61:b4:d7:96:78:6d:a0:23:cf:67:
-                    11:cd:fb:fe:3d:d6:b8:ad:64:3f:f6:b9:f5:17:05:
-                    89:1c:fb:3d:94:c3:18:43:e4:1e:15:0f:8d:26:25:
-                    de:db:f0:c0:d6:67:cc:90:f8:33:1c:d1:81:4b:63:
-                    3e:c9:76:61:65:80:b4:13:97:9d:2e:99:ca:a2:6b:
-                    cc:10:a6:3b:2f:20:90:ee:a5:6c:cf:f6:a0:7a:7b:
-                    ce:59:c6:19:42:3f:9f:69:ab:f3:c1:2f:26:8d:fe:
-                    ac:b8:ec:33:d2:d6:bb:4e:3f:80:c0:d9:12:33:35:
-                    05:2d:30:ce:6b:1c:12:ea:89:6f:8a:93:15:0e:0c:
-                    c0:10:7a:99:1e:3f:fb:85:88:09:82:16:f0:62:ed:
-                    fb:26:63:93:71:72:9b:15:11:19:c3:36:5b:10:c1:
-                    b1:12:51:2e:6a:af:c1:d1:9d:fd:8b:7f:13:19:5d:
-                    ce:00:49:3d:33:32:d1:6b:c5:14:4e:10:92:4d:1f:
-                    28:07:01:29:8f:fe:5d:ff:98:b8:2f:99:fc:68:21:
-                    1d:1f
+                    00:cd:90:16:22:ef:fa:93:b4:76:dc:f5:2d:17:6a:
+                    9f:b5:15:0a:dc:bd:3b:f9:d5:3d:34:da:20:b8:bf:
+                    f5:8d:a4:70:4d:36:3b:78:4d:13:bd:45:30:b2:06:
+                    ee:f1:44:7b:a2:b7:e1:01:42:7e:8a:c0:65:f0:a1:
+                    93:15:89:36:02:c8:a9:57:ca:e5:00:f5:12:b4:e6:
+                    50:3f:53:a7:a1:6b:db:ba:30:b5:ee:ab:2b:e4:1b:
+                    03:79:a9:bf:6e:1f:48:8c:f9:b4:57:77:64:ef:59:
+                    30:6d:7d:44:e6:8e:c4:ba:08:27:1f:34:5c:ef:ca:
+                    3e:d8:05:13:62:08:63:04:18:42:73:ea:d2:c1:87:
+                    8c:cd:e6:3e:76:48:8b:ce:e2:f9:c1:af:8c:42:ab:
+                    1e:c1:c1:13:f0:4b:eb:c2:06:5c:00:b8:5c:6f:f6:
+                    31:26:84:1d:b5:49:27:a1:15:25:7d:46:b7:66:e7:
+                    f8:17:50:2b:25:3f:a5:2a:a0:0e:7d:49:c1:cf:7b:
+                    ff:af:61:0d:97:5c:0e:1f:d6:13:10:31:e1:fc:2c:
+                    6e:8b:ec:e2:4d:6d:f0:9a:cb:5c:cd:e6:86:cd:6b:
+                    e1:eb:1a:d8:fd:7d:61:ab:36:61:4d:59:65:cc:51:
+                    42:e5:ca:7b:50:97:b6:90:6c:5f:ce:71:51:c6:ec:
+                    10:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                01:CB:1D:FC:13:00:C9:67:B2:D6:76:F2:0A:4F:9D:6A:D4:E2:9D:3D
+                33:DF:16:E8:65:99:B1:A4:A5:43:E7:13:B8:00:2A:1E:77:8B:75:67
             X509v3 Authority Key Identifier: 
-                keyid:2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                keyid:88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         11:b8:7a:ac:f4:c5:c5:cc:bc:46:f9:9e:03:6d:69:f7:3c:15:
-         71:be:be:15:0d:a4:b9:23:cd:e0:15:a4:51:36:86:2a:65:7e:
-         7e:29:bc:58:d1:9d:11:2d:0e:22:61:65:ca:a4:9e:61:3f:16:
-         23:ca:ff:91:62:34:55:56:1c:b8:83:b7:62:cb:9a:07:46:53:
-         35:53:8a:04:7e:fa:12:72:af:af:04:1d:18:a4:c1:ba:5b:c7:
-         db:01:97:58:01:d1:73:e9:85:fb:16:27:0f:d2:eb:ce:35:7e:
-         e1:a1:91:52:d7:91:03:59:ab:c0:ed:a6:bc:7b:70:bc:af:73:
-         20:10:a6:a8:f4:45:28:0e:8b:a8:f7:e8:03:64:c6:f1:3d:12:
-         dc:f2:30:75:85:a9:68:44:ad:fb:ab:36:ed:8f:84:25:79:d3:
-         d6:f1:c8:10:1a:ac:c4:fc:65:6b:0c:77:ef:d3:61:de:91:74:
-         df:da:f3:f2:f1:07:93:5f:e0:c9:6a:6d:58:29:e1:ef:98:93:
-         3a:13:82:09:ec:90:82:5a:d7:ef:1d:d4:50:b8:e6:ff:ef:8f:
-         8f:9e:38:72:e5:f3:58:f9:04:90:b3:a9:a3:fd:dc:82:ab:44:
-         be:bc:47:f7:79:15:31:91:1c:c1:3c:5c:86:d1:78:bc:1e:0c:
-         9e:af:18:60
+         24:46:a0:6d:f1:89:52:ca:1f:3d:45:8b:f0:b6:d1:49:4c:c0:
+         62:f9:b1:80:59:2e:37:50:45:de:85:ee:67:e9:cb:ad:03:c0:
+         a6:a7:e2:df:65:30:0f:21:c4:5c:3a:d1:00:ff:99:40:56:bf:
+         7e:93:85:08:e7:1b:f5:bc:91:7b:a7:ef:27:b0:76:f4:1c:5f:
+         81:21:aa:f1:05:05:02:7d:c8:f7:86:6c:b5:3b:44:71:db:1d:
+         07:76:9c:57:5c:29:6f:e7:a9:c9:74:3c:3d:fa:44:52:66:d1:
+         24:70:a2:ca:1d:d7:fa:d2:a9:25:91:56:94:f0:60:12:2a:9e:
+         66:de:18:cc:b4:37:c6:96:9e:a1:bb:5d:22:6a:45:7e:d9:f3:
+         2a:1d:c3:94:cf:5e:aa:ce:14:16:fe:8d:06:6a:bc:ce:22:22:
+         da:1a:b4:5d:d6:25:05:6b:e2:3d:7a:60:10:66:c5:71:3c:74:
+         f4:c4:a2:86:a0:ac:8d:d9:54:b0:6c:25:64:75:68:f4:27:e5:
+         7c:69:b6:7c:19:93:31:45:39:b4:c8:a0:84:60:e9:ca:39:30:
+         c2:7f:e1:e0:99:40:2c:1e:a7:33:a4:27:c7:a6:ab:64:4c:b7:
+         60:bb:e6:82:94:ce:92:c5:97:9a:6f:9a:20:16:66:7a:9f:11:
+         06:51:89:20
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0I4uuqGN
-2WAWzRcxyQhDk5R2SFWieBkXcI6VJaz5uYEzZowsebfZ9YmSG9JOAelp5mG015Z4
-baAjz2cRzfv+Pda4rWQ/9rn1FwWJHPs9lMMYQ+QeFQ+NJiXe2/DA1mfMkPgzHNGB
-S2M+yXZhZYC0E5edLpnKomvMEKY7LyCQ7qVsz/agenvOWcYZQj+faavzwS8mjf6s
-uOwz0ta7Tj+AwNkSMzUFLTDOaxwS6olvipMVDgzAEHqZHj/7hYgJghbwYu37JmOT
-cXKbFREZwzZbEMGxElEuaq/B0Z39i38TGV3OAEk9MzLRa8UUThCSTR8oBwEpj/5d
-/5i4L5n8aCEdHwIDAQABo4HLMIHIMB0GA1UdDgQWBBQByx38EwDJZ7LWdvIKT51q
-1OKdPTAfBgNVHSMEGDAWgBQtOHLTIcoqOa0ttJoQXMtYVoLEqjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZAWIu/6
+k7R23PUtF2qftRUK3L07+dU9NNoguL/1jaRwTTY7eE0TvUUwsgbu8UR7orfhAUJ+
+isBl8KGTFYk2AsipV8rlAPUStOZQP1OnoWvbujC17qsr5BsDeam/bh9IjPm0V3dk
+71kwbX1E5o7EuggnHzRc78o+2AUTYghjBBhCc+rSwYeMzeY+dkiLzuL5wa+MQqse
+wcET8EvrwgZcALhcb/YxJoQdtUknoRUlfUa3Zuf4F1ArJT+lKqAOfUnBz3v/r2EN
+l1wOH9YTEDHh/Cxui+ziTW3wmstczeaGzWvh6xrY/X1hqzZhTVllzFFC5cp7UJe2
+kGxfznFRxuwQQwIDAQABo4HLMIHIMB0GA1UdDgQWBBQz3xboZZmxpKVD5xO4ACoe
+d4t1ZzAfBgNVHSMEGDAWgBSIIdCO5Zfux975CZvTWDsvHAPWZzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABG4eqz0xcXMvEb5ngNtafc8FXG+vhUNpLkjzeAVpFE2hiplfn4pvFjRnREtDiJh
-ZcqknmE/FiPK/5FiNFVWHLiDt2LLmgdGUzVTigR++hJyr68EHRikwbpbx9sBl1gB
-0XPphfsWJw/S6841fuGhkVLXkQNZq8Dtprx7cLyvcyAQpqj0RSgOi6j36ANkxvE9
-EtzyMHWFqWhErfurNu2PhCV509bxyBAarMT8ZWsMd+/TYd6RdN/a8/LxB5Nf4Mlq
-bVgp4e+YkzoTggnskIJa1+8d1FC45v/vj4+eOHLl81j5BJCzqaP93IKrRL68R/d5
-FTGRHME8XIbReLweDJ6vGGA=
+ACRGoG3xiVLKHz1Fi/C20UlMwGL5sYBZLjdQRd6F7mfpy60DwKan4t9lMA8hxFw6
+0QD/mUBWv36ThQjnG/W8kXun7yewdvQcX4EhqvEFBQJ9yPeGbLU7RHHbHQd2nFdc
+KW/nqcl0PD36RFJm0SRwosod1/rSqSWRVpTwYBIqnmbeGMy0N8aWnqG7XSJqRX7Z
+8yodw5TPXqrOFBb+jQZqvM4iItoatF3WJQVr4j16YBBmxXE8dPTEooagrI3ZVLBs
+JWR1aPQn5XxptnwZkzFFObTIoIRg6co5MMJ/4eCZQCwepzOkJ8emq2RMt2C75oKU
+zpLFl5pvmiAWZnqfEQZRiSA=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c4:68:12:a9:88:50:04:f4:70:9b:0a:1e:d1:83:
-                    30:a0:36:08:fe:20:f5:bc:b4:a5:32:74:dd:4c:ab:
-                    cc:73:a4:ce:25:ab:04:38:71:2d:5c:06:de:3b:c3:
-                    2f:b8:d9:91:f3:28:9a:70:f4:7f:be:d5:0e:4e:00:
-                    db:ce:d7:c6:9f:b2:aa:0b:5e:3a:b5:e3:ad:80:78:
-                    53:f1:38:61:05:7f:00:19:e4:ec:77:b5:1d:b6:c9:
-                    35:10:ca:18:c2:71:ae:c8:34:77:dc:46:26:a1:60:
-                    a4:f0:dc:49:5a:fe:af:91:98:41:1c:90:50:7d:be:
-                    94:61:0e:58:b6:21:48:83:2e:5f:c1:a6:0c:a6:72:
-                    95:4a:a5:c5:a1:d9:bd:14:dd:7c:f4:1a:db:b1:1c:
-                    09:0c:2b:60:e7:28:c0:fc:e1:36:0a:f4:68:dc:ee:
-                    89:d8:0f:47:9c:e4:7b:ca:fe:65:57:2c:3b:3b:e5:
-                    b4:89:c5:04:52:55:02:dc:09:44:fd:6a:19:fc:e4:
-                    52:6f:78:96:41:79:3f:b8:85:5a:fe:7f:8f:5d:fc:
-                    ee:ba:35:1d:eb:64:2d:e0:7b:f2:8c:17:d3:33:21:
-                    9c:2d:e6:85:d2:e3:2c:0f:5b:57:2c:c5:c6:de:93:
-                    24:a2:6e:1b:72:49:f5:c8:05:e2:0e:ae:68:7a:f6:
-                    b5:09
+                    00:bc:6f:14:16:0e:80:d7:63:ef:ea:2b:04:49:cd:
+                    0b:04:3a:84:e6:48:31:d4:4d:9a:bb:42:df:68:02:
+                    9f:ca:ae:1a:67:ce:23:d7:2a:f4:c9:30:6b:55:60:
+                    4b:9f:f5:d7:61:22:48:6b:e7:a6:79:af:f1:22:9a:
+                    88:ec:ae:0c:fa:e9:9b:84:43:06:fd:03:96:0b:bc:
+                    bd:e6:d8:63:8c:ed:f1:bd:83:9a:49:7d:a8:cc:54:
+                    90:70:e9:72:ec:d6:ec:9f:11:73:58:bc:db:6c:d6:
+                    e3:7c:9d:34:53:97:6f:10:66:64:43:65:d4:e8:c6:
+                    50:f2:de:42:aa:ae:b4:fb:4a:f4:c8:a2:7f:51:6e:
+                    fd:1c:76:a3:15:f8:7a:0a:36:c2:64:15:66:f5:43:
+                    9d:06:1a:ed:41:c3:a0:3e:6c:c0:29:1c:5e:91:32:
+                    ea:35:7e:a1:90:c8:fd:35:e4:05:0f:ef:7f:5d:6b:
+                    d7:3f:77:8e:07:d8:d5:93:a8:b0:4a:ed:89:5c:1f:
+                    d0:61:28:a6:88:2a:d0:5f:b9:bd:d6:f2:ca:c6:f9:
+                    8f:74:7e:04:b1:a3:ba:b4:78:a9:71:c7:d2:90:01:
+                    80:b3:8f:d0:d8:7c:3f:35:83:2c:f6:80:83:1f:63:
+                    85:11:99:22:13:d1:1d:5d:28:55:2f:26:d2:4f:a2:
+                    86:13
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
             X509v3 Authority Key Identifier: 
-                keyid:2D:38:72:D3:21:CA:2A:39:AD:2D:B4:9A:10:5C:CB:58:56:82:C4:AA
+                keyid:88:21:D0:8E:E5:97:EE:C7:DE:F9:09:9B:D3:58:3B:2F:1C:03:D6:67
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         09:ee:80:43:2f:77:6c:2b:2f:51:79:35:59:ad:f0:a5:51:45:
-         22:6a:0a:20:c7:eb:d1:98:c2:43:06:5a:5c:92:cb:44:24:7b:
-         97:8e:18:b8:23:3c:8b:31:6d:54:0e:73:11:90:9e:8b:2c:a4:
-         78:53:e6:8e:55:93:64:cc:14:04:54:a1:b6:ec:28:59:67:3a:
-         64:0f:9d:51:ec:ba:35:06:af:5f:96:b5:3c:fe:62:0e:13:5a:
-         ee:29:af:55:d9:22:71:b3:c8:61:1a:36:4c:c8:f9:39:80:c2:
-         06:c2:54:93:fb:2f:1b:f7:01:66:42:2a:e2:08:7b:ee:3e:0d:
-         e0:c6:07:fd:f1:cf:5e:d1:77:b2:46:21:c6:c5:9f:db:15:75:
-         7e:ea:ec:5d:da:02:2a:42:35:7a:b5:a2:2e:86:08:8b:29:ea:
-         e9:f3:b5:cd:9d:46:96:86:c7:82:ed:64:ab:74:29:53:1c:3e:
-         f5:69:51:5b:11:1c:0d:c4:f0:01:31:a6:32:d2:68:af:1d:52:
-         c1:c4:d9:a2:9e:da:a2:bd:19:71:fa:26:f5:28:43:6a:fd:5c:
-         97:d2:bb:e0:cd:56:0e:b8:0e:f9:4d:d5:dd:a0:4e:ae:46:68:
-         00:93:d6:fd:ec:85:78:f4:c9:93:96:34:65:cc:f0:72:e7:0e:
-         00:3d:d0:6b
+         56:fc:d3:72:6b:c3:32:0f:62:ed:b7:15:91:f6:72:5f:7f:94:
+         01:93:45:32:69:b3:97:7d:df:4f:6b:03:2b:cf:25:73:e0:13:
+         2b:3d:91:33:aa:cc:62:ad:6d:3f:85:de:eb:a9:13:5d:6b:6b:
+         21:c5:bf:50:70:95:c9:0f:64:e5:c0:5c:60:ff:fd:52:88:fc:
+         40:28:be:a3:85:75:e8:3f:12:f5:aa:65:57:8a:05:7a:dc:8b:
+         cf:ac:45:6b:0e:f7:4d:3f:15:d5:43:d0:78:93:4b:6e:d9:9d:
+         2c:db:38:bc:cc:eb:04:cc:89:98:cf:29:4f:67:e0:8c:e2:aa:
+         f2:23:96:fa:a1:20:d8:0f:9b:4d:a5:2f:c0:52:ba:1a:13:a0:
+         ce:3f:2e:d8:9f:3f:37:17:21:62:e9:a0:60:c8:c3:ca:53:60:
+         42:43:af:66:0b:12:1e:65:7b:39:19:6e:11:cd:92:35:16:bc:
+         36:4e:a0:05:3b:e8:9b:35:d8:8b:6d:e1:0d:2e:b7:c5:4f:83:
+         b8:c8:8b:e3:15:0b:71:eb:39:e2:3b:c7:11:a5:de:4b:d9:8c:
+         87:c8:69:12:63:06:f3:64:82:24:f3:8e:64:df:34:39:77:2a:
+         c7:1c:c4:81:4b:79:3d:81:6e:d8:0b:47:b6:d2:cf:a2:f8:14:
+         6f:3e:49:89
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMRoEqmIUAT0cJsKHtGD
-MKA2CP4g9by0pTJ03UyrzHOkziWrBDhxLVwG3jvDL7jZkfMomnD0f77VDk4A287X
-xp+yqgteOrXjrYB4U/E4YQV/ABnk7He1HbbJNRDKGMJxrsg0d9xGJqFgpPDcSVr+
-r5GYQRyQUH2+lGEOWLYhSIMuX8GmDKZylUqlxaHZvRTdfPQa27EcCQwrYOcowPzh
-Ngr0aNzuidgPR5zke8r+ZVcsOzvltInFBFJVAtwJRP1qGfzkUm94lkF5P7iFWv5/
-j1387ro1HetkLeB78owX0zMhnC3mhdLjLA9bVyzFxt6TJKJuG3JJ9cgF4g6uaHr2
-tQkCAwEAAaOByzCByDAdBgNVHQ4EFgQULThy0yHKKjmtLbSaEFzLWFaCxKowHwYD
-VR0jBBgwFoAULThy0yHKKjmtLbSaEFzLWFaCxKowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxvFBYOgNdj7+orBEnN
+CwQ6hOZIMdRNmrtC32gCn8quGmfOI9cq9Mkwa1VgS5/112EiSGvnpnmv8SKaiOyu
+DPrpm4RDBv0Dlgu8vebYY4zt8b2Dmkl9qMxUkHDpcuzW7J8Rc1i822zW43ydNFOX
+bxBmZENl1OjGUPLeQqqutPtK9Miif1Fu/Rx2oxX4ego2wmQVZvVDnQYa7UHDoD5s
+wCkcXpEy6jV+oZDI/TXkBQ/vf11r1z93jgfY1ZOosErtiVwf0GEopogq0F+5vdby
+ysb5j3R+BLGjurR4qXHH0pABgLOP0Nh8PzWDLPaAgx9jhRGZIhPRHV0oVS8m0k+i
+hhMCAwEAAaOByzCByDAdBgNVHQ4EFgQUiCHQjuWX7sfe+Qmb01g7LxwD1mcwHwYD
+VR0jBBgwFoAUiCHQjuWX7sfe+Qmb01g7LxwD1mcwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAJ7oBDL3ds
-Ky9ReTVZrfClUUUiagogx+vRmMJDBlpckstEJHuXjhi4IzyLMW1UDnMRkJ6LLKR4
-U+aOVZNkzBQEVKG27ChZZzpkD51R7Lo1Bq9flrU8/mIOE1ruKa9V2SJxs8hhGjZM
-yPk5gMIGwlST+y8b9wFmQiriCHvuPg3gxgf98c9e0XeyRiHGxZ/bFXV+6uxd2gIq
-QjV6taIuhgiLKerp87XNnUaWhseC7WSrdClTHD71aVFbERwNxPABMaYy0mivHVLB
-xNmintqivRlx+ib1KENq/VyX0rvgzVYOuA75TdXdoE6uRmgAk9b97IV49MmTljRl
-zPBy5w4APdBr
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBW/NNya8My
+D2LttxWR9nJff5QBk0UyabOXfd9PawMrzyVz4BMrPZEzqsxirW0/hd7rqRNda2sh
+xb9QcJXJD2TlwFxg//1SiPxAKL6jhXXoPxL1qmVXigV63IvPrEVrDvdNPxXVQ9B4
+k0tu2Z0s2zi8zOsEzImYzylPZ+CM4qryI5b6oSDYD5tNpS/AUroaE6DOPy7Ynz83
+FyFi6aBgyMPKU2BCQ69mCxIeZXs5GW4RzZI1Frw2TqAFO+ibNdiLbeENLrfFT4O4
+yIvjFQtx6zniO8cRpd5L2YyHyGkSYwbzZIIk845k3zQ5dyrHHMSBS3k9gW7YC0e2
+0s+i+BRvPkmJ
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -280,3 +280,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
index f42bb72..85d7a3d 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b8:8a:4e:71:4c:e6:58:02:9d:bc:08:20:2d:8d:
-                    74:e3:04:2f:59:9e:43:73:e0:ca:83:1b:3a:e2:30:
-                    78:de:f8:07:a1:17:62:5d:4e:35:e8:03:40:2a:1e:
-                    2e:8e:91:a4:96:bf:a7:34:45:13:19:b2:d7:b0:72:
-                    d0:10:e2:ad:ab:a8:f8:41:c5:ec:ee:1c:14:cb:cf:
-                    4f:cd:37:71:bd:2d:11:8d:95:e4:fa:2b:16:8c:bf:
-                    82:1c:22:85:25:4a:88:01:af:1e:fe:e7:53:d5:03:
-                    d4:36:14:ae:81:d2:3d:73:6c:96:e0:e7:d2:a4:fb:
-                    17:1d:df:6a:93:68:b5:f8:a8:70:df:d0:b6:9d:fb:
-                    e5:80:a3:a8:85:df:82:f3:05:23:9f:b6:62:89:b7:
-                    72:0c:99:49:5b:07:bd:c5:fb:4c:f4:32:83:a5:3c:
-                    c6:8c:6b:c1:a1:c0:ab:73:68:fb:91:14:12:3a:c5:
-                    31:89:ac:a2:4b:b6:20:3b:03:1f:50:48:ff:7b:3b:
-                    be:53:e5:46:e2:ad:18:7a:d3:3e:f9:bb:d0:0b:ac:
-                    0c:23:d8:9c:92:07:6c:ee:a6:64:0d:77:ef:aa:f4:
-                    64:5a:aa:ed:52:cb:20:9a:57:d5:ab:be:8c:07:71:
-                    b3:a4:43:8b:d9:7e:6f:46:2c:70:9f:c0:e3:68:89:
-                    e5:2b
+                    00:e6:5f:a8:d2:f3:bc:ce:7c:a1:a7:97:8a:a5:bb:
+                    3a:24:dd:5b:87:a1:3c:71:b1:e3:14:2e:72:39:ec:
+                    7b:1b:b6:a4:05:b5:4b:82:29:40:ef:1e:5a:2b:b5:
+                    f0:62:b2:2e:f2:2d:cd:a4:fe:2f:a4:5a:b6:6a:8c:
+                    b0:2f:46:f7:bc:f0:6e:71:1f:56:2f:6e:0d:5f:7d:
+                    15:24:76:d7:8a:b7:66:8f:b8:25:70:ba:3f:fa:ac:
+                    2b:81:99:85:49:53:ae:a5:4c:27:d9:63:d3:67:6d:
+                    6a:dc:c0:84:01:5f:35:49:3c:6a:21:76:7c:1e:e0:
+                    f0:f4:8d:ed:31:a8:e8:f8:0b:a1:ae:e4:d6:79:18:
+                    21:51:3a:08:98:30:6b:94:54:fe:e5:92:98:2d:e8:
+                    ee:12:05:53:96:21:9a:d3:cb:fc:8b:dd:0b:10:63:
+                    c2:e3:de:69:f8:3a:04:db:dc:ee:07:95:19:3b:32:
+                    fb:a7:5a:39:60:71:63:af:78:1d:dd:f5:5a:77:99:
+                    23:76:a8:e9:1e:6f:e2:50:3c:4c:b8:fa:58:83:26:
+                    1a:ee:63:7e:cb:2d:93:2c:f6:19:aa:b3:4a:57:81:
+                    6a:db:d7:59:44:29:a4:e0:71:5d:07:00:6b:83:99:
+                    49:3b:bc:f8:ab:d8:fe:7d:5d:ba:b4:02:f5:95:e9:
+                    90:65
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3D:5B:07:9A:2F:A5:14:87:32:C3:F8:54:71:62:3F:A1:E6:60:7F:D0
+                4A:CE:67:BF:3B:63:C0:09:D1:FF:FF:E6:FE:83:5A:03:0F:C3:43:10
             X509v3 Authority Key Identifier: 
-                keyid:7C:0E:01:A5:04:38:CE:0F:6A:AB:34:B2:CD:77:19:DB:84:C1:EC:44
+                keyid:77:0D:A9:84:E8:2A:53:B8:C9:BB:D7:0F:D7:D0:85:E8:98:1A:E3:68
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,26 +56,26 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         6a:f4:be:75:7e:66:b3:42:6e:fb:64:ed:d2:a1:d8:3d:08:04:
-         bf:93:17:0b:9b:79:df:ca:73:95:b4:5a:78:e3:96:d0:7f:5e:
-         3c:2c:df:00:da:37:fc:61:22:9a:81:d1:bb:5d:13:6a:e4:21:
-         18:bf:dc:49:36:4e:7a:aa:b8:6f
+         65:fb:6d:6c:1a:df:48:9c:d1:36:07:e3:94:7b:d9:ea:36:84:
+         37:f2:c2:03:53:74:4b:f9:a3:91:75:f4:bf:11:14:86:b5:34:
+         8e:24:3d:9a:37:25:c2:27:19:48:f3:f0:a3:a6:51:e6:61:4a:
+         77:db:7a:1e:ae:f1:94:ad:de:93
 -----BEGIN CERTIFICATE-----
 MIICyzCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4ik5x
-TOZYAp28CCAtjXTjBC9ZnkNz4MqDGzriMHje+AehF2JdTjXoA0AqHi6OkaSWv6c0
-RRMZstewctAQ4q2rqPhBxezuHBTLz0/NN3G9LRGNleT6KxaMv4IcIoUlSogBrx7+
-51PVA9Q2FK6B0j1zbJbg59Kk+xcd32qTaLX4qHDf0Lad++WAo6iF34LzBSOftmKJ
-t3IMmUlbB73F+0z0MoOlPMaMa8GhwKtzaPuRFBI6xTGJrKJLtiA7Ax9QSP97O75T
-5UbirRh60z75u9ALrAwj2JySB2zupmQNd++q9GRaqu1SyyCaV9WrvowHcbOkQ4vZ
-fm9GLHCfwONoieUrAgMBAAGjgekwgeYwHQYDVR0OBBYEFD1bB5ovpRSHMsP4VHFi
-P6HmYH/QMB8GA1UdIwQYMBaAFHwOAaUEOM4Paqs0ss13GduEwexEMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmX6jS
+87zOfKGnl4qluzok3VuHoTxxseMULnI57HsbtqQFtUuCKUDvHlortfBisi7yLc2k
+/i+kWrZqjLAvRve88G5xH1Yvbg1ffRUkdteKt2aPuCVwuj/6rCuBmYVJU66lTCfZ
+Y9NnbWrcwIQBXzVJPGohdnwe4PD0je0xqOj4C6Gu5NZ5GCFROgiYMGuUVP7lkpgt
+6O4SBVOWIZrTy/yL3QsQY8Lj3mn4OgTb3O4HlRk7MvunWjlgcWOveB3d9Vp3mSN2
+qOkeb+JQPEy4+liDJhruY37LLZMs9hmqs0pXgWrb11lEKaTgcV0HAGuDmUk7vPir
+2P59Xbq0AvWV6ZBlAgMBAAGjgekwgeYwHQYDVR0OBBYEFErOZ787Y8AJ0f//5v6D
+WgMPw0MQMB8GA1UdIwQYMBaAFHcNqYToKlO4ybvXD9fQheiYGuNoMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAANBAGr0vnV+ZrNCbvtk7dKh2D0I
-BL+TFwubed/Kc5W0WnjjltB/Xjws3wDaN/xhIpqB0btdE2rkIRi/3Ek2TnqquG8=
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAANBAGX7bWwa30ic0TYH45R72eo2
+hDfywgNTdEv5o5F19L8RFIa1NI4kPZo3JcInGUjz8KOmUeZhSnfbeh6u8ZSt3pM=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -92,17 +92,17 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (512 bit)
                 Modulus:
-                    00:ba:89:53:56:03:c7:9f:d6:cc:d0:48:7d:3b:52:
-                    02:ee:7e:58:eb:d8:9c:8e:3c:d6:65:b2:8d:94:0d:
-                    87:48:e1:65:65:56:91:5b:1a:52:3a:84:96:46:2a:
-                    8b:1b:7d:0c:43:57:04:0d:38:55:21:5b:0b:45:06:
-                    a6:1e:67:ca:5b
+                    00:9e:57:91:28:65:2e:3a:22:df:b6:61:df:cb:09:
+                    a2:92:53:3b:bc:7a:20:99:41:d7:1e:fd:da:08:98:
+                    2d:dd:12:82:3c:c5:29:51:95:eb:cb:50:c0:ca:5c:
+                    76:06:df:b1:b6:48:bd:87:d2:71:6f:ee:21:78:0d:
+                    ca:4e:2b:f6:c7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7C:0E:01:A5:04:38:CE:0F:6A:AB:34:B2:CD:77:19:DB:84:C1:EC:44
+                77:0D:A9:84:E8:2A:53:B8:C9:BB:D7:0F:D7:D0:85:E8:98:1A:E3:68
             X509v3 Authority Key Identifier: 
-                keyid:71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                keyid:68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -117,37 +117,37 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         8e:cc:d3:f3:5a:fb:ca:83:4e:55:e3:ae:2a:b7:b7:ac:9e:87:
-         f0:62:58:23:29:3d:63:7e:8d:42:60:ea:dc:3e:ec:66:19:4b:
-         e6:d6:a7:b7:e1:ea:33:88:3c:ea:8b:87:b9:e7:64:0d:35:b3:
-         0e:ab:81:71:0c:1c:0a:f3:0a:49:23:4e:d6:21:de:7f:e5:fd:
-         6d:8b:7a:33:2f:a6:ab:4e:b8:02:cc:01:1e:18:9a:90:f3:56:
-         f8:8a:b5:2f:68:12:c6:83:b2:91:59:00:51:86:75:68:45:3b:
-         27:c4:e0:0d:ed:e7:51:2d:47:60:26:19:02:fd:43:27:81:ad:
-         33:cb:eb:98:9a:a1:2e:81:d3:81:52:4a:1d:19:e9:30:f9:fc:
-         6b:e7:26:c8:c1:6c:65:e4:66:d4:cc:82:16:0a:a6:b9:68:3a:
-         eb:ee:cd:86:aa:a7:80:ed:4f:77:47:d2:c6:1b:eb:53:de:f3:
-         eb:24:60:41:ac:77:08:43:1b:76:ce:a6:4b:f1:4e:1d:32:2b:
-         31:bd:59:52:f1:60:e7:f5:db:6d:bf:be:af:55:9b:11:63:f7:
-         6e:19:2c:17:4b:db:fe:40:27:ae:02:f5:c2:17:62:21:7b:ac:
-         38:d6:17:3e:5c:80:61:6d:95:63:e4:64:d3:07:23:9f:14:bb:
-         df:b2:eb:c2
+         ad:f2:3c:b7:fe:59:a6:08:95:6f:a2:3a:b8:84:05:b2:5b:94:
+         1a:c0:36:8f:c2:9e:31:92:16:1a:de:e8:0b:d8:77:6a:5e:39:
+         93:91:77:20:e0:93:75:be:09:65:ea:03:3c:02:f3:5f:be:14:
+         40:c9:8f:e6:17:9d:bd:bd:2d:91:c2:cd:cd:f3:fe:06:a0:21:
+         e5:19:a3:95:d5:77:a1:b7:c3:0b:c8:a1:b9:0e:3c:77:e0:fc:
+         1c:66:dd:48:49:fd:41:74:b8:55:e3:51:16:13:3b:7c:c6:d7:
+         48:65:ea:1d:6c:5d:a8:02:fb:f9:dc:74:a5:79:ee:e0:20:8a:
+         14:84:d6:af:18:b5:5e:32:2d:f7:8d:e9:17:3c:50:af:cf:1c:
+         3e:0c:b1:71:d4:4c:67:fe:b9:75:8a:65:72:95:0a:36:06:19:
+         46:15:3c:90:a0:8e:8c:b1:cd:25:9d:06:04:98:8a:c6:f3:38:
+         5e:f9:ac:45:ee:ca:1b:84:c5:59:9f:55:58:7a:01:c3:9e:ca:
+         33:68:fd:bc:a3:94:46:85:d9:5a:6b:60:d9:d7:cb:47:c9:61:
+         7f:dd:97:11:75:55:b9:72:3a:61:3d:dc:52:fb:29:04:f3:22:
+         86:40:b8:fc:1f:cb:7b:35:3f:56:11:e7:7d:91:01:9a:13:89:
+         bc:3a:2e:b9
 -----BEGIN CERTIFICATE-----
 MIICpTCCAY2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALqJU1YDx5/WzNBIfTtS
-Au5+WOvYnI481mWyjZQNh0jhZWVWkVsaUjqElkYqixt9DENXBA04VSFbC0UGph5n
-ylsCAwEAAaOByzCByDAdBgNVHQ4EFgQUfA4BpQQ4zg9qqzSyzXcZ24TB7EQwHwYD
-VR0jBBgwFoAUcVlJTaVDScUO5HjpXLdOgKiju14wNwYIKwYBBQUHAQEEKzApMCcG
+ZXJtZWRpYXRlMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ5XkShlLjoi37Zh38sJ
+opJTO7x6IJlB1x792giYLd0SgjzFKVGV68tQwMpcdgbfsbZIvYfScW/uIXgNyk4r
+9scCAwEAAaOByzCByDAdBgNVHQ4EFgQUdw2phOgqU7jJu9cP19CF6Jga42gwHwYD
+VR0jBBgwFoAUaAFyfjW9gKCuWVzSHiFScgQxTOAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCOzNPzWvvK
-g05V464qt7esnofwYlgjKT1jfo1CYOrcPuxmGUvm1qe34eoziDzqi4e552QNNbMO
-q4FxDBwK8wpJI07WId5/5f1ti3ozL6arTrgCzAEeGJqQ81b4irUvaBLGg7KRWQBR
-hnVoRTsnxOAN7edRLUdgJhkC/UMnga0zy+uYmqEugdOBUkodGekw+fxr5ybIwWxl
-5GbUzIIWCqa5aDrr7s2GqqeA7U93R9LGG+tT3vPrJGBBrHcIQxt2zqZL8U4dMisx
-vVlS8WDn9dttv76vVZsRY/duGSwXS9v+QCeuAvXCF2Ihe6w41hc+XIBhbZVj5GTT
-ByOfFLvfsuvC
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCt8jy3/lmm
+CJVvojq4hAWyW5QawDaPwp4xkhYa3ugL2HdqXjmTkXcg4JN1vgll6gM8AvNfvhRA
+yY/mF529vS2Rws3N8/4GoCHlGaOV1Xeht8MLyKG5Djx34PwcZt1ISf1BdLhV41EW
+Ezt8xtdIZeodbF2oAvv53HSlee7gIIoUhNavGLVeMi33jekXPFCvzxw+DLFx1Exn
+/rl1imVylQo2BhlGFTyQoI6Msc0lnQYEmIrG8zhe+axF7sobhMVZn1VYegHDnsoz
+aP28o5RGhdlaa2DZ18tHyWF/3ZcRdVW5cjphPdxS+ykE8yKGQLj8H8t7NT9WEed9
+kQGaE4m8Oi65
 -----END CERTIFICATE-----
 
 Certificate:
@@ -164,30 +164,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:5e:08:17:b7:7c:c4:55:39:a2:1c:7f:97:49:
-                    b0:bb:88:3e:9e:ed:46:36:41:c2:a7:5e:2b:ce:bb:
-                    7b:d2:d2:a8:3b:a3:53:27:39:ac:3a:76:48:a2:85:
-                    97:3f:ba:98:9f:14:f9:b9:31:64:e5:27:a8:9a:23:
-                    ae:7d:12:39:65:c0:10:f3:6d:2d:a3:45:3d:c3:69:
-                    e6:cf:3e:4d:8a:5c:37:a5:6c:32:17:7c:ab:8f:62:
-                    0e:e4:57:6b:e1:64:22:8d:3b:ad:c6:93:60:4a:c4:
-                    32:6d:be:c4:6b:06:e1:4b:e0:89:3c:ef:ad:78:94:
-                    bd:3d:d1:bb:19:1a:86:98:43:0e:84:bb:68:11:47:
-                    9a:06:49:33:e9:48:e6:f2:00:0e:ef:e7:4d:2a:1b:
-                    b2:aa:5b:a8:8d:59:ac:b7:c8:77:5d:c9:9f:d3:e8:
-                    c7:f2:88:0a:ce:6e:34:b5:8f:5a:63:24:68:42:2f:
-                    60:2c:a5:82:44:e9:12:1f:c3:7a:01:c3:e7:e3:24:
-                    97:0b:bc:5e:48:e1:33:4b:a0:cd:fa:ce:75:90:97:
-                    20:f4:0b:4c:8e:69:c5:8b:cd:1c:ac:8a:7f:d4:18:
-                    22:c7:10:09:52:dc:3a:17:3d:3a:5c:03:99:ee:f8:
-                    9d:a0:bf:ef:72:33:df:43:8d:9f:1b:1c:e3:22:24:
-                    73:99
+                    00:c4:1c:75:6c:84:a2:59:08:8c:30:5b:1f:63:1a:
+                    b7:80:76:db:e1:82:28:60:f8:b5:dc:6b:b0:92:43:
+                    d4:c9:3c:ee:8d:0c:e1:04:14:9e:2a:03:24:02:fb:
+                    3c:7a:cb:d2:42:4a:9f:36:5c:a7:7e:e4:c8:3d:2c:
+                    34:0a:9e:0b:43:07:87:69:0a:9d:dc:40:39:66:31:
+                    71:f0:51:b8:d2:24:2e:ad:8d:3d:f6:72:40:ba:a3:
+                    d8:12:fd:f6:2d:ab:23:41:3d:32:76:1d:e2:77:e2:
+                    2e:0b:5d:f8:05:12:d9:08:aa:49:18:52:41:01:43:
+                    f4:da:b1:a5:c9:06:2f:d7:52:b3:1b:dd:ee:16:46:
+                    8b:e4:ef:f8:12:52:7d:05:29:cf:a2:b2:4b:33:66:
+                    18:27:18:3a:ba:16:0f:62:7b:c2:d3:d5:19:62:1d:
+                    da:6a:84:a0:2e:e3:d1:71:91:3c:91:68:c0:40:22:
+                    4b:fb:0d:b6:68:80:d8:b8:f8:a0:11:f4:d9:6f:f9:
+                    50:cc:76:ff:af:1c:bf:4e:12:76:d1:ea:3c:96:85:
+                    76:c2:30:07:03:92:53:35:fd:26:66:7c:ea:48:ad:
+                    97:e7:25:16:83:6d:84:01:cf:9f:06:0b:d7:37:79:
+                    8e:68:25:44:88:72:a7:9d:2b:7c:57:24:6b:72:15:
+                    a5:ed
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
             X509v3 Authority Key Identifier: 
-                keyid:71:59:49:4D:A5:43:49:C5:0E:E4:78:E9:5C:B7:4E:80:A8:A3:BB:5E
+                keyid:68:01:72:7E:35:BD:80:A0:AE:59:5C:D2:1E:21:52:72:04:31:4C:E0
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -202,41 +202,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         20:51:cc:39:0f:3c:0c:67:47:0c:73:f0:00:0d:57:fb:6f:fe:
-         4c:e3:c1:d1:a6:f7:40:54:4c:91:0f:ca:e1:eb:b3:7a:44:0e:
-         57:f5:81:1f:9a:4f:81:57:d8:91:01:7b:09:6a:61:19:04:8f:
-         00:7a:d1:5b:3f:cb:1b:c0:53:a4:da:dc:40:a5:ef:9b:59:1a:
-         fc:99:b2:0d:66:22:ee:d7:da:69:72:4d:b1:44:e9:2d:57:84:
-         52:d5:2b:c5:77:ac:a7:d0:f2:27:12:6b:5c:42:7a:3d:fc:e8:
-         04:91:98:aa:1d:3f:40:9d:9b:e2:43:24:47:7b:b8:24:23:a3:
-         47:24:cd:9a:44:87:f8:a7:c4:07:90:9a:73:60:e1:0e:7b:82:
-         a1:ef:73:4e:02:46:6d:06:e2:58:8f:79:47:79:a6:59:75:cf:
-         ac:5d:e2:37:6c:88:3f:bf:57:00:f5:fb:09:53:f4:5f:06:42:
-         58:5e:75:48:96:7d:4f:dd:3b:45:d3:7c:61:8f:75:20:17:a0:
-         2e:1c:08:4b:22:3f:37:be:d7:43:89:da:59:ac:79:87:1e:6a:
-         cc:53:4d:5b:e9:0a:d6:40:a5:a0:28:99:57:44:5d:d2:7b:bf:
-         02:38:a3:c4:df:14:a9:c1:b2:ec:15:21:7b:84:a1:a1:56:f8:
-         b9:45:42:cd
+         3b:71:85:c5:bf:83:55:c7:84:5e:51:cc:4b:00:35:82:f5:90:
+         c0:7b:95:f5:c4:f0:ff:5b:8a:ba:83:8a:42:3a:bb:0b:5d:e6:
+         0a:3a:91:2c:99:28:40:d3:49:6e:34:57:7b:de:1f:bd:d9:2c:
+         b4:95:69:eb:e7:79:01:6c:ec:a9:e0:78:82:8e:68:33:56:a7:
+         58:99:d4:4a:97:73:b1:bd:d7:ee:bd:07:18:a8:47:d3:28:5d:
+         23:07:59:21:2a:b1:e0:3a:f0:21:24:1d:44:66:dd:29:ea:02:
+         f8:17:7d:2b:b3:f8:15:3a:0d:60:42:d3:7d:f0:1d:59:30:99:
+         ae:36:24:bc:c7:d1:97:4f:44:67:19:b9:ea:33:0d:e7:57:81:
+         88:6e:35:3d:47:84:43:f7:f7:43:1a:dc:67:21:2e:a3:97:78:
+         bc:06:46:69:04:20:8b:e8:94:4b:a8:82:c3:2a:a4:ac:59:60:
+         4e:59:46:e4:7f:cc:59:21:b4:73:9e:29:51:a9:48:71:e6:f6:
+         5e:ec:25:f0:8e:87:4c:b4:4d:62:12:14:65:49:a3:4c:fd:59:
+         80:39:97:2a:57:f0:6f:9a:fa:cd:d0:a7:db:35:60:81:23:13:
+         be:a4:29:00:bd:58:e8:e2:e1:90:24:fd:f7:4e:fe:4d:fb:c7:
+         a9:2a:e8:24
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMpeCBe3fMRVOaIcf5dJ
-sLuIPp7tRjZBwqdeK867e9LSqDujUyc5rDp2SKKFlz+6mJ8U+bkxZOUnqJojrn0S
-OWXAEPNtLaNFPcNp5s8+TYpcN6VsMhd8q49iDuRXa+FkIo07rcaTYErEMm2+xGsG
-4UvgiTzvrXiUvT3RuxkahphDDoS7aBFHmgZJM+lI5vIADu/nTSobsqpbqI1ZrLfI
-d13Jn9Pox/KICs5uNLWPWmMkaEIvYCylgkTpEh/DegHD5+Mklwu8XkjhM0ugzfrO
-dZCXIPQLTI5pxYvNHKyKf9QYIscQCVLcOhc9OlwDme74naC/73Iz30ONnxsc4yIk
-c5kCAwEAAaOByzCByDAdBgNVHQ4EFgQUcVlJTaVDScUO5HjpXLdOgKiju14wHwYD
-VR0jBBgwFoAUcVlJTaVDScUO5HjpXLdOgKiju14wNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMQcdWyEolkIjDBbH2Ma
+t4B22+GCKGD4tdxrsJJD1Mk87o0M4QQUnioDJAL7PHrL0kJKnzZcp37kyD0sNAqe
+C0MHh2kKndxAOWYxcfBRuNIkLq2NPfZyQLqj2BL99i2rI0E9MnYd4nfiLgtd+AUS
+2QiqSRhSQQFD9NqxpckGL9dSsxvd7hZGi+Tv+BJSfQUpz6KySzNmGCcYOroWD2J7
+wtPVGWId2mqEoC7j0XGRPJFowEAiS/sNtmiA2Lj4oBH02W/5UMx2/68cv04SdtHq
+PJaFdsIwBwOSUzX9JmZ86kitl+clFoNthAHPnwYL1zd5jmglRIhyp50rfFcka3IV
+pe0CAwEAAaOByzCByDAdBgNVHQ4EFgQUaAFyfjW9gKCuWVzSHiFScgQxTOAwHwYD
+VR0jBBgwFoAUaAFyfjW9gKCuWVzSHiFScgQxTOAwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAgUcw5DzwM
-Z0cMc/AADVf7b/5M48HRpvdAVEyRD8rh67N6RA5X9YEfmk+BV9iRAXsJamEZBI8A
-etFbP8sbwFOk2txApe+bWRr8mbINZiLu19ppck2xROktV4RS1SvFd6yn0PInEmtc
-Qno9/OgEkZiqHT9AnZviQyRHe7gkI6NHJM2aRIf4p8QHkJpzYOEOe4Kh73NOAkZt
-BuJYj3lHeaZZdc+sXeI3bIg/v1cA9fsJU/RfBkJYXnVIln1P3TtF03xhj3UgF6Au
-HAhLIj83vtdDidpZrHmHHmrMU01b6QrWQKWgKJlXRF3Se78COKPE3xSpwbLsFSF7
-hKGhVvi5RULN
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA7cYXFv4NV
+x4ReUcxLADWC9ZDAe5X1xPD/W4q6g4pCOrsLXeYKOpEsmShA00luNFd73h+92Sy0
+lWnr53kBbOyp4HiCjmgzVqdYmdRKl3OxvdfuvQcYqEfTKF0jB1khKrHgOvAhJB1E
+Zt0p6gL4F30rs/gVOg1gQtN98B1ZMJmuNiS8x9GXT0RnGbnqMw3nV4GIbjU9R4RD
+9/dDGtxnIS6jl3i8BkZpBCCL6JRLqILDKqSsWWBOWUbkf8xZIbRznilRqUhx5vZe
+7CXwjodMtE1iEhRlSaNM/VmAOZcqV/BvmvrN0KfbNWCBIxO+pCkAvVjo4uGQJP33
+Tv5N+8epKugk
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -249,6 +249,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: RSA modulus too small
   actual: 512
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
index 95a19b1..a4f8249 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c1:2c:42:ca:d9:bd:0d:55:79:40:9a:cf:f4:1b:
-                    de:4e:e7:8b:77:40:55:83:bf:2c:27:72:58:db:62:
-                    24:12:e2:e5:4e:36:09:95:e0:0d:5b:09:d9:f8:bf:
-                    e5:f8:3a:d4:9a:c9:5a:ff:16:44:16:21:15:bc:cf:
-                    f6:99:ad:5c:bf:74:9a:02:3e:91:99:28:2b:76:eb:
-                    fe:14:8c:24:a2:f9:41:b3:7a:86:b2:15:34:a4:fc:
-                    93:49:42:b6:ee:20:70:61:f8:8e:ae:8b:55:aa:4f:
-                    3f:ec:1e:63:45:24:c4:01:c1:68:c2:cf:a7:c5:29:
-                    58:a7:c2:cc:89:00:25:b0:1a:b1:a0:dd:52:e4:3c:
-                    41:ff:2a:3b:97:07:63:70:13:01:3d:eb:1d:a1:12:
-                    f2:27:0a:c0:47:8a:96:f4:c9:f0:2f:b1:2a:7a:fa:
-                    57:f8:60:98:c5:b8:03:ce:36:fc:32:73:39:13:46:
-                    5b:71:02:42:22:45:4c:11:1d:3d:e1:77:53:9c:8d:
-                    0b:a0:bf:68:67:b4:b2:2b:6a:9a:1f:da:dd:dd:c2:
-                    0d:0c:12:00:ff:d9:d2:36:77:52:72:32:30:ea:68:
-                    bb:62:55:37:24:aa:13:92:a4:b5:8c:9d:71:19:6b:
-                    4a:1a:38:b0:21:79:14:70:d3:e9:7e:92:91:fc:8a:
-                    c7:35
+                    00:cd:72:19:2b:f3:f4:0b:d9:86:07:ec:81:9e:63:
+                    51:5c:dd:32:6c:6c:77:2a:01:c9:de:cf:01:50:b9:
+                    c7:a9:6e:83:a8:72:d5:83:b9:32:ce:a8:e2:ba:f8:
+                    32:41:4d:0f:ab:41:03:3b:4d:fa:19:43:07:85:f1:
+                    1a:c8:f7:46:47:c6:0f:5a:0d:d1:f3:1d:2f:f1:12:
+                    3b:cb:59:12:d8:06:fd:93:6f:95:99:63:97:0f:88:
+                    47:07:82:8f:58:32:62:76:dd:55:8a:0c:61:c9:ba:
+                    21:92:6f:e8:d4:2d:22:cb:cc:cc:d9:72:74:cd:38:
+                    0f:ef:30:96:88:b7:a8:24:3b:03:4b:e5:23:91:c2:
+                    40:98:59:b9:f7:7c:08:7b:04:b2:4f:e5:7c:e1:5d:
+                    98:ed:43:67:f0:23:f0:1b:24:69:e9:48:c5:05:5b:
+                    60:8e:b2:d7:54:9a:34:97:05:07:4f:e9:d4:6f:06:
+                    ea:b8:26:7b:99:e1:9a:12:04:eb:a2:73:4e:17:73:
+                    dc:68:4b:36:be:f0:42:d2:92:b2:3e:99:ca:b6:11:
+                    d9:ea:4a:10:c8:68:c7:27:c5:7c:9b:f2:18:c7:98:
+                    c8:46:c0:75:ee:dd:80:47:4f:2a:6c:3c:bc:5d:2d:
+                    86:01:72:19:80:95:89:28:d8:c7:3e:36:96:69:30:
+                    1b:95
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E2:9C:21:ED:AF:F9:55:73:3F:68:B8:CD:03:B2:45:FB:C8:4F:35:8C
+                46:75:48:47:EF:3B:5F:4D:A8:17:46:94:F8:D2:FD:FD:59:0F:65:82
             X509v3 Authority Key Identifier: 
-                keyid:71:4E:D7:4E:A8:0A:43:13:41:FE:F4:50:09:92:D0:56:1D:44:8A:3F
+                keyid:6F:70:17:EA:DE:B7:B8:63:CC:DA:8C:DF:5F:22:65:D4:BA:16:37:C8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,29 +55,29 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: ecdsa-with-SHA256
-         30:65:02:30:16:0c:16:b2:2c:2e:68:f7:e6:c9:e6:fc:25:67:
-         ab:1b:cd:65:0b:30:ca:d4:92:0b:0a:26:40:cd:7b:47:b5:37:
-         8b:84:12:b2:51:53:3e:a9:b8:d0:fa:0b:e5:ec:54:2e:02:31:
-         00:e5:d7:43:9b:58:f1:7e:90:79:de:63:49:7f:5b:fe:7a:34:
-         2e:5a:d1:92:13:66:3a:e0:1c:ea:77:e1:98:1c:a9:38:d5:ce:
-         98:7b:1f:5b:8a:d4:01:cb:35:7a:d5:74:8a
+         30:66:02:31:00:94:3c:e5:44:e7:b4:c2:82:ff:18:f6:1d:a3:
+         25:59:f8:50:9b:ff:20:60:87:d3:e9:47:ef:cb:8f:54:5e:ab:
+         ce:81:df:1d:35:a1:77:b0:24:9b:18:78:45:a6:d4:e6:88:02:
+         31:00:f4:e1:e1:f3:9f:83:b7:e6:19:21:b9:ce:8b:44:5a:eb:
+         dd:1c:5d:fe:64:77:f1:8f:35:bb:0f:09:87:ac:3d:2f:28:a3:
+         aa:3b:59:f0:2e:e1:ce:e0:5a:cc:b2:1a:3e:b2
 -----BEGIN CERTIFICATE-----
-MIIC7DCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
+MIIC7TCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
 ZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYDVQQD
-DAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBLELK2b0N
-VXlAms/0G95O54t3QFWDvywncljbYiQS4uVONgmV4A1bCdn4v+X4OtSayVr/FkQW
-IRW8z/aZrVy/dJoCPpGZKCt26/4UjCSi+UGzeoayFTSk/JNJQrbuIHBh+I6ui1Wq
-Tz/sHmNFJMQBwWjCz6fFKVinwsyJACWwGrGg3VLkPEH/KjuXB2NwEwE96x2hEvIn
-CsBHipb0yfAvsSp6+lf4YJjFuAPONvwyczkTRltxAkIiRUwRHT3hd1OcjQugv2hn
-tLIrapof2t3dwg0MEgD/2dI2d1JyMjDqaLtiVTckqhOSpLWMnXEZa0oaOLAheRRw
-0+l+kpH8isc1AgMBAAGjgekwgeYwHQYDVR0OBBYEFOKcIe2v+VVzP2i4zQOyRfvI
-TzWMMB8GA1UdIwQYMBaAFHFO106oCkMTQf70UAmS0FYdRIo/MD8GCCsGAQUFBwEB
+DAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNchkr8/QL
+2YYH7IGeY1Fc3TJsbHcqAcnezwFQucepboOoctWDuTLOqOK6+DJBTQ+rQQM7TfoZ
+QweF8RrI90ZHxg9aDdHzHS/xEjvLWRLYBv2Tb5WZY5cPiEcHgo9YMmJ23VWKDGHJ
+uiGSb+jULSLLzMzZcnTNOA/vMJaIt6gkOwNL5SORwkCYWbn3fAh7BLJP5XzhXZjt
+Q2fwI/AbJGnpSMUFW2COstdUmjSXBQdP6dRvBuq4JnuZ4ZoSBOuic04Xc9xoSza+
+8ELSkrI+mcq2EdnqShDIaMcnxXyb8hjHmMhGwHXu3YBHTypsPLxdLYYBchmAlYko
+2Mc+NpZpMBuVAgMBAAGjgekwgeYwHQYDVR0OBBYEFEZ1SEfvO19NqBdGlPjS/f1Z
+D2WCMB8GA1UdIwQYMBaAFG9wF+ret7hjzNqM318iZdS6FjfIMD8GCCsGAQUFBwEB
 BDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVkaWF0
 ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0ludGVy
 bWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB
-BggrBgEFBQcDAjAKBggqhkjOPQQDAgNoADBlAjAWDBayLC5o9+bJ5vwlZ6sbzWUL
-MMrUkgsKJkDNe0e1N4uEErJRUz6puND6C+XsVC4CMQDl10ObWPF+kHneY0l/W/56
-NC5a0ZITZjrgHOp34ZgcqTjVzph7H1uK1AHLNXrVdIo=
+BggrBgEFBQcDAjAKBggqhkjOPQQDAgNpADBmAjEAlDzlROe0woL/GPYdoyVZ+FCb
+/yBgh9PpR+/Lj1Req86B3x01oXewJJsYeEWm1OaIAjEA9OHh85+Dt+YZIbnOi0Ra
+690cXf5kd/GPNbsPCYesPS8oo6o7WfAu4c7gWsyyGj6y
 -----END CERTIFICATE-----
 
 Certificate:
@@ -94,19 +94,19 @@
             Public Key Algorithm: id-ecPublicKey
                 Public-Key: (384 bit)
                 pub: 
-                    04:ff:41:5f:16:8c:e0:75:59:3b:4a:9c:84:3e:79:
-                    93:48:a5:98:7e:93:58:58:d5:c9:ca:60:b8:6d:0c:
-                    84:81:40:de:22:95:f1:6e:56:49:8f:02:45:ce:fe:
-                    e8:71:71:02:25:a7:47:5f:63:0e:4a:46:4d:e0:b3:
-                    73:9e:d8:91:2a:ad:51:47:80:b0:f5:4a:5e:0d:93:
-                    a6:78:93:a7:f9:1d:ad:b6:23:78:2e:23:e0:62:f6:
-                    77:f8:1c:db:31:82:c1
+                    04:58:a6:cc:26:37:62:38:1e:61:3b:d7:6b:ee:13:
+                    74:3c:a3:53:83:b6:43:50:a1:28:6b:02:3a:7d:9e:
+                    a1:7b:8f:3e:f7:d3:33:bc:0a:f7:92:8d:24:cc:55:
+                    af:e6:3c:c3:ee:88:cd:9d:80:4d:ce:2c:a7:41:b7:
+                    d0:26:41:bb:80:d6:0c:8b:23:9a:c3:5b:87:0c:eb:
+                    db:cf:86:5a:8a:17:2b:1d:f5:96:07:bc:ac:09:a2:
+                    dc:7b:ee:99:70:fc:17
                 ASN1 OID: secp384r1
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                71:4E:D7:4E:A8:0A:43:13:41:FE:F4:50:09:92:D0:56:1D:44:8A:3F
+                6F:70:17:EA:DE:B7:B8:63:CC:DA:8C:DF:5F:22:65:D4:BA:16:37:C8
             X509v3 Authority Key Identifier: 
-                keyid:39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                keyid:44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -121,37 +121,37 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         d2:53:ac:75:a8:06:52:55:48:4f:d0:a3:92:51:d4:23:06:f7:
-         98:2b:b4:15:2e:65:26:44:c0:75:64:c5:df:73:cd:dc:a3:5a:
-         7f:86:f6:e8:6b:bd:8f:3a:7e:20:6e:b9:df:4c:07:78:f5:1d:
-         b4:4c:d0:8b:0b:71:ad:74:6d:f7:48:fb:a8:45:e6:2f:87:d8:
-         89:e3:de:b4:15:fa:71:47:19:c6:88:a2:9c:66:cd:44:05:22:
-         f8:d8:0b:1f:72:4d:ef:98:76:15:7d:41:20:53:2b:ef:e1:35:
-         31:7c:b7:8e:70:c0:23:5a:ab:9a:58:5e:0b:02:d6:9c:7c:6e:
-         d0:29:ad:19:95:e2:1f:e8:18:c7:c3:25:cf:21:30:52:28:32:
-         fa:cf:07:4a:19:f2:39:bd:bb:05:96:4e:11:91:9f:b4:ae:5c:
-         9e:bc:ac:f4:4a:b8:9a:73:40:4b:88:05:6d:3c:9e:c7:7d:0a:
-         16:4f:d1:96:67:17:fa:e6:43:8c:0e:4c:26:2e:4c:51:8b:18:
-         ee:8d:e4:69:09:ca:7f:ea:8d:33:38:fa:45:e5:d7:06:74:1d:
-         bd:05:32:c7:1f:fd:84:9e:42:f7:7d:f2:24:ab:54:50:ba:69:
-         3e:84:15:fe:f9:20:5a:77:8a:20:af:f3:97:35:1e:16:ee:92:
-         ef:9d:c7:5d
+         51:54:a1:f5:c1:21:d7:7b:04:b5:c7:e9:4a:49:f7:2a:f0:66:
+         e3:f5:26:2c:1a:c2:48:bb:fc:d0:cd:3b:5f:d1:4c:ad:5c:59:
+         5d:de:98:9d:56:bc:bb:6b:54:24:b1:64:7d:92:dc:2b:9f:46:
+         b9:d4:4d:3b:15:40:2c:7d:b0:a6:4d:d7:cd:98:ef:89:3d:95:
+         c7:b4:c0:f8:ea:7d:08:3f:cd:e6:bf:44:20:1e:6c:82:db:1d:
+         53:9c:b1:3d:55:1b:5c:c4:99:35:dc:8c:ce:b3:f4:d3:e6:09:
+         e0:36:07:40:59:49:74:91:ab:37:92:aa:c5:0f:34:78:9e:1a:
+         02:52:fe:67:c6:13:ca:98:2e:6e:a6:f7:0b:84:af:43:1a:b9:
+         da:29:e9:e1:b5:7f:73:2f:f2:65:38:b2:1d:05:5f:51:1b:31:
+         8c:59:39:73:6b:14:df:72:79:31:c7:17:9c:55:37:0f:70:cf:
+         96:8d:dd:26:d8:fa:fd:e8:bf:f3:43:7a:bb:26:47:14:31:28:
+         4b:36:c2:91:24:cb:50:c3:30:51:5f:77:3f:ed:ef:40:b2:a7:
+         72:57:27:83:30:17:6c:83:5e:b8:d2:6f:0b:39:72:eb:6c:d3:
+         5b:22:9e:35:e9:fb:68:56:20:e6:35:a9:18:8d:20:99:7f:8b:
+         2a:2a:51:01
 -----BEGIN CERTIFICATE-----
 MIICvzCCAaegAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/0FfFozgdVk7SpyEPnmT
-SKWYfpNYWNXJymC4bQyEgUDeIpXxblZJjwJFzv7ocXECJadHX2MOSkZN4LNzntiR
-Kq1RR4Cw9UpeDZOmeJOn+R2ttiN4LiPgYvZ3+BzbMYLBo4HLMIHIMB0GA1UdDgQW
-BBRxTtdOqApDE0H+9FAJktBWHUSKPzAfBgNVHSMEGDAWgBQ5v1N+tHuXXXrlEm36
-i3nFZz4e5DA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwt
+ZXJtZWRpYXRlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWKbMJjdiOB5hO9dr7hN0
+PKNTg7ZDUKEoawI6fZ6he48+99MzvAr3ko0kzFWv5jzD7ojNnYBNziynQbfQJkG7
+gNYMiyOaw1uHDOvbz4ZaihcrHfWWB7ysCaLce+6ZcPwXo4HLMIHIMB0GA1UdDgQW
+BBRvcBfq3re4Y8zajN9fImXUuhY3yDAfBgNVHSMEGDAWgBRETsN+nT2t7Kn3616k
+koZxKtyc/jA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwt
 Zm9yLWFpYS9Sb290LmNlcjAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZv
 ci1jcmwvUm9vdC5jcmwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQELBQADggEBANJTrHWoBlJVSE/Qo5JR1CMG95grtBUuZSZEwHVk
-xd9zzdyjWn+G9uhrvY86fiBuud9MB3j1HbRM0IsLca10bfdI+6hF5i+H2Inj3rQV
-+nFHGcaIopxmzUQFIvjYCx9yTe+YdhV9QSBTK+/hNTF8t45wwCNaq5pYXgsC1px8
-btAprRmV4h/oGMfDJc8hMFIoMvrPB0oZ8jm9uwWWThGRn7SuXJ68rPRKuJpzQEuI
-BW08nsd9ChZP0ZZnF/rmQ4wOTCYuTFGLGO6N5GkJyn/qjTM4+kXl1wZ0Hb0FMscf
-/YSeQvd98iSrVFC6aT6EFf75IFp3iiCv85c1Hhbuku+dx10=
+DQYJKoZIhvcNAQELBQADggEBAFFUofXBIdd7BLXH6UpJ9yrwZuP1Jiwawki7/NDN
+O1/RTK1cWV3emJ1WvLtrVCSxZH2S3CufRrnUTTsVQCx9sKZN182Y74k9lce0wPjq
+fQg/zea/RCAebILbHVOcsT1VG1zEmTXcjM6z9NPmCeA2B0BZSXSRqzeSqsUPNHie
+GgJS/mfGE8qYLm6m9wuEr0Maudop6eG1f3Mv8mU4sh0FX1EbMYxZOXNrFN9yeTHH
+F5xVNw9wz5aN3SbY+v3ov/NDersmRxQxKEs2wpEky1DDMFFfdz/t70Cyp3JXJ4Mw
+F2yDXrjSbws5cuts01sinjXp+2hWIOY1qRiNIJl/iyoqUQE=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -168,30 +168,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:dd:a5:d8:2e:59:ed:a6:74:62:3b:71:d5:2f:0c:
-                    b5:e6:a8:d6:d3:d2:f3:38:d5:6a:14:e4:ec:7e:d0:
-                    46:81:35:0e:27:96:4e:25:0c:9f:81:85:18:03:d2:
-                    22:1b:14:cc:54:4b:96:0e:35:0c:4c:0f:20:69:3d:
-                    ff:48:26:b4:28:6c:6a:1f:95:87:df:09:9e:ab:60:
-                    43:97:3c:3a:7b:4a:d3:c6:66:ba:1a:79:71:58:29:
-                    cb:78:38:19:de:12:c6:09:fa:f9:fd:13:a0:e1:0e:
-                    d5:e6:c2:36:d9:dc:c5:f4:ef:08:42:e8:bf:43:d1:
-                    b5:8a:c9:81:b1:9c:16:8f:8d:b2:aa:9e:61:30:ed:
-                    fc:12:f0:a6:f5:9e:6a:1e:6e:d7:7c:3f:ff:76:fa:
-                    6f:53:8b:49:08:84:9a:69:37:bc:f5:ee:e7:ba:ee:
-                    39:5b:31:28:05:5a:39:d3:75:5a:1a:b2:5a:ef:48:
-                    d4:f5:5c:ab:99:b0:41:cd:50:cd:f4:36:c3:4d:e9:
-                    42:2c:9d:2c:86:ea:a8:e4:d0:c9:1f:d0:c3:92:1b:
-                    ef:c0:2c:a2:ed:2a:23:2f:ba:c0:27:a5:13:98:1d:
-                    d3:ba:71:91:29:ae:2c:85:44:ff:bd:b5:c2:bc:e3:
-                    fc:ff:c1:78:51:57:e9:5e:ee:1e:c2:29:d1:8c:91:
-                    60:9d
+                    00:de:88:c0:64:47:79:b2:3c:ad:8a:e2:ec:86:38:
+                    86:cf:f6:c1:83:5f:68:b8:8d:28:12:8b:b1:29:d1:
+                    33:b9:d4:44:22:03:65:86:27:ea:f4:5e:fc:14:50:
+                    0b:35:36:18:c5:80:ce:b5:c2:a4:1a:10:a4:79:37:
+                    ea:1c:c1:14:08:14:1c:3a:72:ec:60:3f:72:47:ea:
+                    a5:ca:af:06:60:c7:6a:53:21:c7:f9:d6:0a:1e:58:
+                    55:37:79:e3:e1:e4:11:69:40:76:75:40:e3:51:20:
+                    c9:55:ab:67:4f:ea:ab:0f:ad:cd:0a:bf:54:cd:12:
+                    d2:a8:b8:11:79:8f:f2:94:54:6f:74:6c:b3:b7:64:
+                    5e:a7:c4:ec:bd:fe:0a:b2:dc:72:25:45:32:b9:33:
+                    02:b4:e0:6f:4f:65:a5:eb:2b:31:b3:24:58:61:5f:
+                    11:ef:83:b3:2c:98:86:d1:6d:8e:11:fa:fa:22:e4:
+                    6e:16:64:15:3a:71:7c:30:36:f5:85:51:c7:b9:aa:
+                    a4:dd:70:8b:41:fe:45:b3:42:40:fc:8d:31:6b:11:
+                    4c:20:b3:14:eb:33:f9:62:13:30:8c:ba:12:10:a2:
+                    1e:a6:18:63:80:80:6f:fe:03:01:61:a4:4e:2c:78:
+                    f0:cd:a3:db:d2:6c:99:1d:f6:4f:e2:1d:42:cd:c7:
+                    31:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
             X509v3 Authority Key Identifier: 
-                keyid:39:BF:53:7E:B4:7B:97:5D:7A:E5:12:6D:FA:8B:79:C5:67:3E:1E:E4
+                keyid:44:4E:C3:7E:9D:3D:AD:EC:A9:F7:EB:5E:A4:92:86:71:2A:DC:9C:FE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -206,41 +206,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         0d:d6:63:36:cb:eb:0f:98:6d:d8:0a:17:d2:6e:77:43:17:e8:
-         e6:36:c6:2a:40:2c:1e:64:f3:84:13:31:b9:fd:b7:6f:1d:b0:
-         d3:49:55:4b:76:ac:9d:6b:9c:3e:2b:fd:c6:d2:0c:df:9b:ef:
-         4a:cf:2b:9c:61:5e:6b:2a:7d:b4:08:8e:a7:2a:aa:a9:a5:0d:
-         8e:e1:0a:99:fc:f7:fa:f2:34:50:6a:aa:3b:30:ac:7c:93:b1:
-         dc:56:9e:2c:98:12:05:26:51:ff:c5:bf:06:44:24:7e:98:21:
-         aa:32:5e:f6:25:74:6d:31:f4:6b:f6:b0:70:30:87:04:b6:89:
-         3d:a0:0f:cc:a6:d4:bd:93:df:98:bc:a9:92:ca:3f:ff:ef:29:
-         4b:f1:3a:6a:c8:69:89:a6:93:01:54:49:af:20:4f:4d:4d:df:
-         8a:4e:4a:ba:4b:a8:5e:85:46:96:a2:64:6f:78:f9:d7:6b:e5:
-         db:fb:39:42:3a:18:c7:08:ce:93:41:e3:3c:78:01:64:36:8b:
-         de:78:9e:13:42:52:72:13:f6:81:df:5e:7a:45:08:4f:0d:99:
-         f8:af:1e:71:d6:55:85:3a:2c:79:17:e3:df:8e:46:8d:39:13:
-         a4:c9:e7:3d:f2:9d:ef:e7:b9:12:6e:e3:76:3f:e7:c6:5c:fe:
-         1e:af:1b:50
+         58:da:b3:6f:d4:de:ab:8c:36:f6:53:8d:23:b6:d8:7d:3d:fb:
+         b7:08:25:07:aa:cd:f4:45:4d:df:1f:52:ed:eb:ef:ce:0b:c1:
+         96:d0:4c:6a:0b:d4:99:a0:82:1a:d5:4f:0c:4c:c9:bb:e8:4c:
+         84:14:c4:4a:f4:7d:f2:1d:4c:79:8f:e4:8f:9b:94:5d:b6:69:
+         b5:7e:83:4c:78:47:cb:c0:41:21:7e:d6:41:59:1c:1a:b4:e4:
+         5c:16:10:2a:fb:1c:f8:31:76:18:42:a1:2c:20:61:0e:b2:3a:
+         f3:3b:fb:87:e3:cc:ab:57:4a:1d:e7:aa:9a:b5:21:42:f6:e8:
+         4c:2b:65:84:fc:01:02:ef:79:d1:77:7e:da:8b:6b:8e:83:fd:
+         71:a2:bd:4b:1b:3f:bd:da:30:a4:01:0a:8d:bc:6d:bb:1b:f0:
+         39:ea:51:02:7f:af:a3:bf:75:e6:93:9a:79:26:18:14:bd:9e:
+         cd:c1:8d:a1:4f:f4:df:53:4e:78:8b:ef:31:5b:75:f5:78:8a:
+         0e:2f:fd:74:cb:48:2a:8e:3f:23:9d:7e:98:63:1f:37:6c:1b:
+         2b:93:12:39:4f:31:17:2c:68:3f:e7:86:44:0d:38:e0:2f:47:
+         ae:05:a0:ec:fe:36:39:f4:2a:21:16:67:1a:4c:22:b2:35:76:
+         99:ad:17:ea
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2l2C5Z7aZ0Yjtx1S8M
-teao1tPS8zjVahTk7H7QRoE1DieWTiUMn4GFGAPSIhsUzFRLlg41DEwPIGk9/0gm
-tChsah+Vh98JnqtgQ5c8OntK08Zmuhp5cVgpy3g4Gd4Sxgn6+f0ToOEO1ebCNtnc
-xfTvCELov0PRtYrJgbGcFo+NsqqeYTDt/BLwpvWeah5u13w//3b6b1OLSQiEmmk3
-vPXu57ruOVsxKAVaOdN1WhqyWu9I1PVcq5mwQc1QzfQ2w03pQiydLIbqqOTQyR/Q
-w5Ib78Asou0qIy+6wCelE5gd07pxkSmuLIVE/721wrzj/P/BeFFX6V7uHsIp0YyR
-YJ0CAwEAAaOByzCByDAdBgNVHQ4EFgQUOb9TfrR7l1165RJt+ot5xWc+HuQwHwYD
-VR0jBBgwFoAUOb9TfrR7l1165RJt+ot5xWc+HuQwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6IwGRHebI8rYri7IY4
+hs/2wYNfaLiNKBKLsSnRM7nURCIDZYYn6vRe/BRQCzU2GMWAzrXCpBoQpHk36hzB
+FAgUHDpy7GA/ckfqpcqvBmDHalMhx/nWCh5YVTd54+HkEWlAdnVA41EgyVWrZ0/q
+qw+tzQq/VM0S0qi4EXmP8pRUb3Rss7dkXqfE7L3+CrLcciVFMrkzArTgb09lpesr
+MbMkWGFfEe+DsyyYhtFtjhH6+iLkbhZkFTpxfDA29YVRx7mqpN1wi0H+RbNCQPyN
+MWsRTCCzFOsz+WITMIy6EhCiHqYYY4CAb/4DAWGkTix48M2j29JsmR32T+IdQs3H
+MeECAwEAAaOByzCByDAdBgNVHQ4EFgQURE7Dfp09reyp9+tepJKGcSrcnP4wHwYD
+VR0jBBgwFoAURE7Dfp09reyp9+tepJKGcSrcnP4wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAN1mM2y+sP
-mG3YChfSbndDF+jmNsYqQCweZPOEEzG5/bdvHbDTSVVLdqyda5w+K/3G0gzfm+9K
-zyucYV5rKn20CI6nKqqppQ2O4QqZ/Pf68jRQaqo7MKx8k7HcVp4smBIFJlH/xb8G
-RCR+mCGqMl72JXRtMfRr9rBwMIcEtok9oA/MptS9k9+YvKmSyj//7ylL8TpqyGmJ
-ppMBVEmvIE9NTd+KTkq6S6hehUaWomRvePnXa+Xb+zlCOhjHCM6TQeM8eAFkNove
-eJ4TQlJyE/aB3156RQhPDZn4rx5x1lWFOix5F+PfjkaNOROkyec98p3v57kSbuN2
-P+fGXP4erxtQ
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBY2rNv1N6r
+jDb2U40jtth9Pfu3CCUHqs30RU3fH1Lt6+/OC8GW0ExqC9SZoIIa1U8MTMm76EyE
+FMRK9H3yHUx5j+SPm5Rdtmm1foNMeEfLwEEhftZBWRwatORcFhAq+xz4MXYYQqEs
+IGEOsjrzO/uH48yrV0od56qatSFC9uhMK2WE/AEC73nRd37ai2uOg/1xor1LGz+9
+2jCkAQqNvG27G/A56lECf6+jv3Xmk5p5JhgUvZ7NwY2hT/TfU054i+8xW3X1eIoO
+L/10y0gqjj8jnX6YYx83bBsrkxI5TzEXLGg/54ZEDTjgL0euBaDs/jY59CohFmca
+TCKyNXaZrRfq
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -252,3 +252,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
index c7f8254..f588590 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
@@ -17,30 +17,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:8a:b8:3e:5c:f9:f0:cc:33:10:6f:ab:ec:81:
-                    53:1c:4f:d3:c7:e2:c6:ac:57:9b:b0:a1:37:3d:2a:
-                    b8:4f:eb:23:8b:64:6d:2f:5b:f5:02:dc:5b:d5:11:
-                    ea:29:38:4c:76:40:f4:b0:b0:47:9f:6c:8d:89:91:
-                    f4:0d:e5:cb:bb:c2:2a:cc:c1:9b:3a:56:f6:26:8e:
-                    4a:df:2c:b3:7c:35:3f:71:a9:37:49:3c:1a:40:fd:
-                    5e:6f:1b:5e:a0:61:64:d1:40:80:d7:dd:2b:d4:32:
-                    4c:80:f8:5a:8c:b2:ff:b6:ea:91:73:59:00:5e:02:
-                    a8:49:1b:2b:fa:c2:9b:35:44:79:74:7b:02:8e:68:
-                    47:76:43:8d:23:d0:d0:f9:c4:8c:a1:aa:99:cb:55:
-                    24:a1:11:1c:88:0d:8a:5c:d9:46:a6:8f:ac:3f:83:
-                    e3:4e:35:90:03:fe:0e:2d:d7:c6:9b:a3:36:d7:7f:
-                    af:32:89:83:94:40:e7:87:1b:fe:f5:1b:1e:75:ba:
-                    f2:b5:70:f3:75:f8:85:b3:58:9d:5f:56:6b:60:0f:
-                    53:12:82:dc:01:67:28:66:2c:3e:f6:df:08:fb:b9:
-                    da:ce:00:60:b3:b4:65:fd:1d:1e:14:7c:90:9b:0b:
-                    d4:ca:ff:96:12:c0:2c:cd:fb:c3:4f:62:d0:67:59:
-                    bc:71
+                    00:cf:73:ae:ac:92:70:4c:27:dc:ab:a3:09:0d:3d:
+                    8c:39:aa:5f:85:f5:1d:6d:9b:86:9f:8a:bb:a4:81:
+                    d9:6b:9a:49:8e:28:b9:d2:c2:cb:7a:4b:c2:d6:11:
+                    91:b3:d0:81:e2:aa:e0:9c:ae:65:c1:11:8b:ea:d2:
+                    fc:9b:1b:98:80:b2:1e:71:65:94:5c:fa:44:de:e7:
+                    ac:12:61:05:97:e4:3d:f3:d8:e9:dc:7a:f8:41:91:
+                    47:57:1e:c7:c1:a4:59:68:a1:a2:d6:2e:b4:5d:6c:
+                    64:34:f3:92:68:3c:3e:b5:ee:50:6e:f9:ef:39:98:
+                    0c:6b:da:f8:a8:b0:6a:82:16:13:a3:06:8a:1e:3c:
+                    d3:ba:73:f9:bd:83:55:3e:76:d0:87:3c:8e:79:b0:
+                    b6:6b:f3:da:11:6d:0f:d0:1d:2f:0b:62:48:e6:e5:
+                    33:90:1d:b0:33:ed:1e:89:34:d8:a7:45:8b:c9:e4:
+                    1f:8d:33:9e:7b:cb:c8:09:1d:21:2d:a9:f4:b1:bf:
+                    2b:40:e2:c1:61:8b:b5:fc:3a:38:59:2c:75:16:65:
+                    d9:64:be:af:45:9b:22:77:b2:27:1c:fe:47:43:da:
+                    50:e6:14:26:f1:1e:63:c9:7c:7c:a5:01:db:41:36:
+                    fb:09:c3:a1:b8:3e:a5:fc:7a:37:57:7a:07:13:ae:
+                    44:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2F:67:2E:92:9E:39:55:C4:47:23:6A:10:A9:37:87:97:74:0F:55:57
+                06:54:FE:69:6A:11:82:52:60:8B:E6:B1:29:65:C1:1E:67:0E:B7:DB
             X509v3 Authority Key Identifier: 
-                keyid:A7:A7:7E:EF:32:C8:D1:7C:DF:CA:EE:F4:4F:7A:EA:67:43:53:57:CF
+                keyid:E4:28:CA:C3:E7:10:CE:D3:40:BC:EB:CE:2F:95:4A:39:B8:8F:2E:F5
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -55,42 +55,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: md5WithRSAEncryption
-         30:9f:40:ac:31:10:78:0f:06:4b:ed:6d:de:05:20:c6:29:64:
-         66:a8:2a:4d:ac:b3:3d:40:d5:70:80:24:08:13:00:73:0b:90:
-         32:c3:fe:35:b3:8c:77:bb:d6:79:a9:84:e3:76:89:d9:0f:19:
-         2e:68:6a:ec:09:ef:9c:57:32:ee:9f:e5:0e:5e:4c:6b:87:eb:
-         e0:7b:e9:ed:b0:db:ef:34:7a:41:aa:7b:0d:b7:37:89:17:99:
-         b8:43:db:93:19:30:91:7c:25:fe:1d:cd:69:02:b8:6d:c6:08:
-         fa:7f:d8:3c:e5:9a:9d:fd:af:13:53:5a:54:a7:5d:d1:e3:46:
-         3a:c9:8b:ac:e3:cb:e8:67:a8:e0:cf:bb:ab:45:5c:d6:d5:51:
-         d2:2a:d2:b2:f8:3f:05:d2:20:e8:95:17:7d:43:fe:af:cd:1c:
-         fa:d2:8f:8f:3b:b1:2b:3d:22:06:d8:c7:0d:00:64:8a:35:40:
-         32:6e:2c:07:be:5f:e7:9d:06:4f:b1:99:a9:fb:2e:03:80:79:
-         5e:19:60:a9:7f:e5:12:bb:ba:a8:f2:34:d7:00:29:11:ab:8d:
-         51:52:67:33:99:5c:08:de:85:a6:ea:42:9d:08:76:d1:f1:23:
-         fa:c0:4c:ff:38:5a:de:1b:7a:16:e7:79:cf:a0:d0:2f:b7:e5:
-         d4:8e:92:4f
+         92:96:10:89:32:53:f5:5c:99:56:a9:2d:f3:f6:c2:a4:29:a5:
+         a1:ee:21:e8:c2:65:ed:4d:ac:6e:c0:b4:36:8e:87:9b:96:91:
+         6f:7c:10:13:51:f4:1e:98:f1:9f:17:ce:e8:bd:e5:b0:c4:38:
+         e3:40:b9:93:6d:1a:27:fe:ba:8f:44:0f:24:04:4b:36:a4:5c:
+         30:40:bb:05:27:8f:76:9b:b8:1f:bd:4d:aa:19:ed:7c:81:0c:
+         96:9b:28:c5:f4:82:ab:cd:a8:be:4c:34:fc:71:3f:af:4d:6f:
+         55:48:ae:a9:76:fa:2e:2b:51:97:89:2f:44:b6:2b:b0:c8:bb:
+         66:a6:ea:db:c2:36:81:07:5d:fb:dc:f3:58:66:77:bd:71:21:
+         67:d6:af:da:e1:e1:c0:c5:cc:15:63:e3:06:e3:e1:a6:5d:ce:
+         aa:07:7e:a5:ed:9c:75:d8:4e:99:b4:4c:e6:54:47:1e:db:60:
+         e4:36:ab:51:31:11:a2:61:c9:e8:27:d4:9a:dd:72:6b:e7:a8:
+         cc:9c:89:cb:7d:d3:01:38:8b:59:a3:54:59:e0:ab:fa:7d:5e:
+         69:3d:1b:85:30:ee:6f:fc:a6:fe:e4:bd:ea:43:cc:a5:c0:d1:
+         27:fb:e9:cd:17:1a:e2:5a:04:bc:d9:4c:ce:2f:a5:33:af:02:
+         36:20:23:e5
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQQFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8irg+
-XPnwzDMQb6vsgVMcT9PH4sasV5uwoTc9KrhP6yOLZG0vW/UC3FvVEeopOEx2QPSw
-sEefbI2JkfQN5cu7wirMwZs6VvYmjkrfLLN8NT9xqTdJPBpA/V5vG16gYWTRQIDX
-3SvUMkyA+FqMsv+26pFzWQBeAqhJGyv6wps1RHl0ewKOaEd2Q40j0ND5xIyhqpnL
-VSShERyIDYpc2Uamj6w/g+NONZAD/g4t18abozbXf68yiYOUQOeHG/71Gx51uvK1
-cPN1+IWzWJ1fVmtgD1MSgtwBZyhmLD723wj7udrOAGCztGX9HR4UfJCbC9TK/5YS
-wCzN+8NPYtBnWbxxAgMBAAGjgekwgeYwHQYDVR0OBBYEFC9nLpKeOVXERyNqEKk3
-h5d0D1VXMB8GA1UdIwQYMBaAFKenfu8yyNF838ru9E966mdDU1fPMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPc66s
+knBMJ9yrowkNPYw5ql+F9R1tm4afirukgdlrmkmOKLnSwst6S8LWEZGz0IHiquCc
+rmXBEYvq0vybG5iAsh5xZZRc+kTe56wSYQWX5D3z2OncevhBkUdXHsfBpFlooaLW
+LrRdbGQ085JoPD617lBu+e85mAxr2viosGqCFhOjBooePNO6c/m9g1U+dtCHPI55
+sLZr89oRbQ/QHS8LYkjm5TOQHbAz7R6JNNinRYvJ5B+NM557y8gJHSEtqfSxvytA
+4sFhi7X8OjhZLHUWZdlkvq9FmyJ3sicc/kdD2lDmFCbxHmPJfHylAdtBNvsJw6G4
+PqX8ejdXegcTrkRDAgMBAAGjgekwgeYwHQYDVR0OBBYEFAZU/mlqEYJSYIvmsSll
+wR5nDrfbMB8GA1UdIwQYMBaAFOQoysPnEM7TQLzrzi+VSjm4jy71MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOCAQEAMJ9ArDEQeA8GS+1t3gUg
-xilkZqgqTayzPUDVcIAkCBMAcwuQMsP+NbOMd7vWeamE43aJ2Q8ZLmhq7AnvnFcy
-7p/lDl5Ma4fr4Hvp7bDb7zR6Qap7Dbc3iReZuEPbkxkwkXwl/h3NaQK4bcYI+n/Y
-POWanf2vE1NaVKdd0eNGOsmLrOPL6Geo4M+7q0Vc1tVR0irSsvg/BdIg6JUXfUP+
-r80c+tKPjzuxKz0iBtjHDQBkijVAMm4sB75f550GT7GZqfsuA4B5XhlgqX/lEru6
-qPI01wApEauNUVJnM5lcCN6FpupCnQh20fEj+sBM/zha3ht6Fud5z6DQL7fl1I6S
-Tw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOCAQEAkpYQiTJT9VyZVqkt8/bC
+pCmloe4h6MJl7U2sbsC0No6Hm5aRb3wQE1H0HpjxnxfO6L3lsMQ440C5k20aJ/66
+j0QPJARLNqRcMEC7BSePdpu4H71NqhntfIEMlpsoxfSCq82ovkw0/HE/r01vVUiu
+qXb6LitRl4kvRLYrsMi7Zqbq28I2gQdd+9zzWGZ3vXEhZ9av2uHhwMXMFWPjBuPh
+pl3Oqgd+pe2cddhOmbRM5lRHHttg5DarUTERomHJ6CfUmt1ya+eozJyJy33TATiL
+WaNUWeCr+n1eaT0bhTDub/ym/uS96kPMpcDRJ/vpzRca4loEvNlMzi+lM68CNiAj
+5Q==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -107,30 +107,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b1:0a:34:0b:b1:d9:65:b5:ea:7a:ac:f5:96:11:
-                    68:ba:f0:c9:6b:57:c7:97:7e:f4:bb:5d:31:4e:43:
-                    9b:04:7f:a7:2e:fd:4c:e0:03:c7:0d:ac:70:24:0e:
-                    bc:26:a2:5d:48:71:04:9b:43:8c:97:e4:2c:df:7c:
-                    59:39:eb:a3:94:b3:5b:87:d5:11:b6:c1:4a:e9:7b:
-                    e8:f8:c5:31:3b:2c:4d:f0:47:34:75:a8:88:6d:22:
-                    a9:24:dc:00:1f:a0:36:1e:e3:a7:92:b1:00:9d:f8:
-                    ef:27:46:63:60:23:67:48:e6:5d:66:b3:3d:b6:84:
-                    04:3f:b1:1b:2f:b7:8e:71:26:28:32:ff:de:fa:b0:
-                    cb:e2:90:5a:72:9a:83:1d:de:c7:ad:b1:5d:68:11:
-                    9e:6a:ac:44:6b:06:cc:93:6c:a9:13:af:a4:72:e2:
-                    34:4d:c4:d7:8f:ee:99:f4:e4:db:d1:19:45:bf:97:
-                    76:59:7d:b9:32:63:07:a0:1c:e3:19:98:f6:aa:d8:
-                    ba:44:f6:ec:5f:eb:46:d1:63:70:56:00:a1:f1:ce:
-                    18:c3:a5:77:27:81:e6:18:65:78:9a:c4:87:f9:36:
-                    2e:b6:fc:5c:75:a9:a9:59:6a:df:99:26:07:c9:1d:
-                    1a:a8:4f:6e:b6:10:92:4f:96:c1:74:30:4a:5c:8b:
-                    bd:7b
+                    00:cd:f5:47:0a:01:75:30:e1:50:a9:cb:dd:cc:5d:
+                    b6:f5:d1:d9:cb:eb:d1:0a:51:01:38:0a:a3:22:ff:
+                    e7:05:a9:ee:dc:0f:36:2c:81:ba:04:8a:b7:ce:6e:
+                    1f:51:d8:d3:3e:65:fc:1d:d0:d6:02:d8:f0:56:0a:
+                    3e:6e:9b:cb:55:59:6f:1e:2c:2f:ce:94:c9:d8:db:
+                    e5:a9:08:d0:55:36:9e:da:68:e8:16:e2:c1:df:07:
+                    c6:99:a1:e8:0c:19:69:2f:03:fe:13:af:eb:b9:7f:
+                    16:87:4d:00:56:3a:e0:66:00:f2:50:45:a1:94:88:
+                    60:a4:95:ae:33:fa:fb:52:a5:29:29:2d:74:55:71:
+                    e3:08:11:dc:45:6b:84:e2:00:96:67:34:d9:bc:8d:
+                    f9:7c:32:9b:95:07:41:76:bb:f2:ab:47:f7:c6:03:
+                    bc:d1:eb:a7:47:53:dd:e6:2d:6f:84:df:86:9e:32:
+                    79:02:0b:9c:3a:f7:9c:dd:20:35:fa:6a:0e:23:f9:
+                    11:9a:2e:37:f9:0c:f1:d0:7e:ee:80:4c:4b:59:9a:
+                    6d:ef:ab:3d:68:9f:0d:f1:25:74:ee:b1:cb:63:92:
+                    25:83:3e:d3:e4:d7:5b:77:cd:fa:ed:3a:38:82:a3:
+                    e9:66:2b:fe:4c:53:58:68:4b:b5:16:7c:e0:3d:36:
+                    55:85
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A7:A7:7E:EF:32:C8:D1:7C:DF:CA:EE:F4:4F:7A:EA:67:43:53:57:CF
+                E4:28:CA:C3:E7:10:CE:D3:40:BC:EB:CE:2F:95:4A:39:B8:8F:2E:F5
             X509v3 Authority Key Identifier: 
-                keyid:7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                keyid:1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -145,41 +145,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         96:e8:cf:14:ab:83:41:2e:62:24:7e:03:ad:0e:ae:8e:6a:93:
-         ed:3d:86:68:84:b5:76:2b:88:c3:67:b6:15:b6:38:b2:27:f3:
-         2a:1b:83:42:60:11:ee:94:ba:d8:d8:35:74:92:c1:5f:b4:b3:
-         f0:fc:5e:eb:51:93:be:00:11:79:db:94:86:0f:19:26:bb:f6:
-         b1:ec:93:66:34:df:3e:7e:6e:80:17:3e:4a:9b:53:04:05:22:
-         88:de:65:e3:50:c1:81:fa:1d:fc:76:09:f6:25:89:9d:4f:d3:
-         ff:76:b0:3e:81:d3:79:8f:05:48:68:36:93:43:ac:b8:41:37:
-         98:54:bc:71:90:ed:12:c0:1f:f7:b4:a7:7b:56:34:e3:97:01:
-         41:56:9a:c6:37:3f:8e:34:9b:51:37:77:4f:67:d6:72:66:d1:
-         89:64:10:80:5f:13:15:34:03:a9:c5:6e:07:6c:77:78:99:27:
-         f4:e0:44:0e:5f:a0:67:dd:f7:4d:4a:93:b3:71:d2:8e:1b:d6:
-         29:5a:8f:f1:f7:c8:9c:33:ae:28:15:7b:10:ee:92:bd:d5:3c:
-         b3:81:5a:52:5d:96:43:ae:bd:03:83:36:e8:c5:f8:23:03:26:
-         eb:2f:70:4a:bb:d8:e1:6a:a0:7d:23:b1:4f:32:28:65:23:84:
-         02:95:8e:2d
+         7b:07:07:55:e0:50:c4:5a:26:7a:8c:ae:8f:20:a1:94:9f:0c:
+         d9:ca:0a:31:0d:fe:2e:6e:ad:72:1d:bd:e4:34:e9:71:bf:d4:
+         83:b8:59:13:d4:03:ae:8e:50:83:26:7f:a4:b9:ee:0e:0d:81:
+         22:9c:46:41:8f:51:6c:b6:e7:83:d5:66:0f:43:2a:b4:ed:27:
+         f3:bc:d1:fa:87:48:86:9e:94:6d:89:8f:08:ed:38:b5:4f:4c:
+         63:c1:82:d6:06:a7:40:7c:78:6c:bd:52:de:07:f1:56:c0:23:
+         d1:cd:6d:d5:dd:5f:93:de:cf:68:28:f5:46:8d:34:72:03:a0:
+         58:bf:7f:0e:95:f4:0d:02:ac:5e:76:e6:b3:2e:86:14:92:44:
+         4b:94:bb:16:28:fb:2a:4b:eb:29:1e:62:fc:47:4d:61:11:a2:
+         b1:84:aa:81:4a:29:b4:35:3e:08:22:80:37:d2:60:08:93:97:
+         0c:5d:ac:24:0f:dc:60:df:84:0b:55:43:7e:fd:6f:5f:e1:dc:
+         be:d4:a6:65:03:a9:72:15:18:05:3a:f3:ab:30:06:c2:53:ce:
+         63:4f:fa:09:7b:e4:b8:e2:78:14:6e:1b:45:5e:ef:8d:40:c2:
+         b0:6a:0d:35:8d:bf:31:6c:9c:8e:27:40:32:39:e8:d1:73:cc:
+         e8:0f:99:90
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQo0C7HZ
-ZbXqeqz1lhFouvDJa1fHl370u10xTkObBH+nLv1M4APHDaxwJA68JqJdSHEEm0OM
-l+Qs33xZOeujlLNbh9URtsFK6Xvo+MUxOyxN8Ec0daiIbSKpJNwAH6A2HuOnkrEA
-nfjvJ0ZjYCNnSOZdZrM9toQEP7EbL7eOcSYoMv/e+rDL4pBacpqDHd7HrbFdaBGe
-aqxEawbMk2ypE6+kcuI0TcTXj+6Z9OTb0RlFv5d2WX25MmMHoBzjGZj2qti6RPbs
-X+tG0WNwVgCh8c4Yw6V3J4HmGGV4msSH+TYutvxcdampWWrfmSYHyR0aqE9uthCS
-T5bBdDBKXIu9ewIDAQABo4HLMIHIMB0GA1UdDgQWBBSnp37vMsjRfN/K7vRPeupn
-Q1NXzzAfBgNVHSMEGDAWgBR/es2yWLi1YhrC3rRrtXTpuNx3hzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzfVHCgF1
+MOFQqcvdzF229dHZy+vRClEBOAqjIv/nBanu3A82LIG6BIq3zm4fUdjTPmX8HdDW
+AtjwVgo+bpvLVVlvHiwvzpTJ2NvlqQjQVTae2mjoFuLB3wfGmaHoDBlpLwP+E6/r
+uX8Wh00AVjrgZgDyUEWhlIhgpJWuM/r7UqUpKS10VXHjCBHcRWuE4gCWZzTZvI35
+fDKblQdBdrvyq0f3xgO80eunR1Pd5i1vhN+GnjJ5AgucOvec3SA1+moOI/kRmi43
++Qzx0H7ugExLWZpt76s9aJ8N8SV07rHLY5Ilgz7T5Ndbd8367To4gqPpZiv+TFNY
+aEu1FnzgPTZVhQIDAQABo4HLMIHIMB0GA1UdDgQWBBTkKMrD5xDO00C8684vlUo5
+uI8u9TAfBgNVHSMEGDAWgBQe4CXo9NwoFbFatjSWEuQvuOh8sTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AJbozxSrg0EuYiR+A60Oro5qk+09hmiEtXYriMNnthW2OLIn8yobg0JgEe6UutjY
-NXSSwV+0s/D8XutRk74AEXnblIYPGSa79rHsk2Y03z5+boAXPkqbUwQFIojeZeNQ
-wYH6Hfx2CfYliZ1P0/92sD6B03mPBUhoNpNDrLhBN5hUvHGQ7RLAH/e0p3tWNOOX
-AUFWmsY3P440m1E3d09n1nJm0YlkEIBfExU0A6nFbgdsd3iZJ/TgRA5foGfd901K
-k7Nx0o4b1ilaj/H3yJwzrigVexDukr3VPLOBWlJdlkOuvQODNujF+CMDJusvcEq7
-2OFqoH0jsU8yKGUjhAKVji0=
+AHsHB1XgUMRaJnqMro8goZSfDNnKCjEN/i5urXIdveQ06XG/1IO4WRPUA66OUIMm
+f6S57g4NgSKcRkGPUWy254PVZg9DKrTtJ/O80fqHSIaelG2JjwjtOLVPTGPBgtYG
+p0B8eGy9Ut4H8VbAI9HNbdXdX5Pez2go9UaNNHIDoFi/fw6V9A0CrF525rMuhhSS
+REuUuxYo+ypL6ykeYvxHTWERorGEqoFKKbQ1PggigDfSYAiTlwxdrCQP3GDfhAtV
+Q379b1/h3L7UpmUDqXIVGAU686swBsJTzmNP+gl75LjieBRuG0Ve741AwrBqDTWN
+vzFsnI4nQDI56NFzzOgPmZA=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -196,30 +196,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a7:f5:bd:ee:ad:ff:30:37:e6:5a:68:20:1a:22:
-                    b1:f5:bb:5e:24:38:bd:b7:c1:34:d4:97:8b:16:97:
-                    34:17:bc:61:df:ff:ff:6b:9c:b6:34:79:7d:5a:e7:
-                    3b:cf:07:73:b8:2d:03:59:56:68:4a:85:25:58:f4:
-                    68:01:61:84:52:99:2f:6a:7e:cb:13:61:8b:6e:3b:
-                    f5:8e:c2:48:cc:1e:50:28:4f:5f:4b:6b:32:d3:f3:
-                    76:c9:6f:a3:aa:40:1b:06:59:19:cd:42:70:f4:85:
-                    fe:86:38:ca:84:42:5f:bb:d3:a7:41:42:46:59:14:
-                    3f:11:1d:62:d9:e1:16:3f:06:a7:59:f3:ff:ba:f1:
-                    88:7b:0c:68:10:49:ac:8d:75:87:08:94:f6:ec:ce:
-                    4c:6d:e6:77:85:25:c8:8f:42:0a:1d:d3:00:cc:89:
-                    31:dc:32:07:d7:2e:62:16:73:8b:5d:c4:c9:1b:87:
-                    7c:46:64:2d:cc:e0:fb:69:d2:e1:bd:23:2b:d9:15:
-                    62:22:a4:cd:75:64:f1:78:76:cc:07:11:59:08:60:
-                    03:dd:cb:67:3e:a7:b8:12:fa:96:54:6f:6d:9f:05:
-                    11:89:71:13:50:94:bb:bb:17:7e:80:ed:40:b1:ba:
-                    f2:36:2d:45:bb:73:78:5e:b7:5e:2f:e7:f8:66:ec:
-                    1f:17
+                    00:aa:99:af:33:b7:92:98:e2:ad:0f:2b:70:46:83:
+                    a0:ea:af:9a:9a:e1:ac:18:43:3a:12:7f:d8:2e:85:
+                    3f:bc:84:77:3d:b3:60:00:fb:db:47:ec:79:b4:76:
+                    cc:1c:5a:22:1e:2d:6c:19:d6:e1:ae:4d:2d:46:72:
+                    42:18:fd:5e:05:36:45:34:1a:b1:63:7c:99:79:2f:
+                    94:81:93:b8:cb:2b:dc:5b:ca:08:80:47:20:12:7b:
+                    7e:d5:7e:3d:0b:84:28:4b:4c:7f:0d:4a:bc:59:bb:
+                    5e:4e:6a:9d:20:0a:ec:22:66:a8:f4:05:4e:d5:eb:
+                    68:6a:3a:98:00:9e:c8:52:eb:02:82:6f:42:c9:45:
+                    8f:8b:06:73:45:4b:24:f4:c6:19:d6:20:78:4a:c2:
+                    2d:ab:33:78:1e:cd:d6:6b:ed:59:72:96:da:1a:12:
+                    23:7d:ec:31:25:45:1c:34:f5:cc:d5:20:1b:c3:26:
+                    24:9f:1a:21:31:a1:ce:90:52:78:5d:9a:42:8c:d5:
+                    96:20:d2:02:a3:21:12:88:3e:30:2e:c3:1f:24:8f:
+                    26:7c:35:08:c4:71:81:bc:ca:2a:f8:1d:27:af:93:
+                    38:ed:d7:ad:7d:f9:0e:dc:6f:65:ce:7d:36:09:8d:
+                    c0:05:42:80:ee:18:74:f3:e1:89:0f:1a:b7:f0:0b:
+                    7b:21
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
             X509v3 Authority Key Identifier: 
-                keyid:7F:7A:CD:B2:58:B8:B5:62:1A:C2:DE:B4:6B:B5:74:E9:B8:DC:77:87
+                keyid:1E:E0:25:E8:F4:DC:28:15:B1:5A:B6:34:96:12:E4:2F:B8:E8:7C:B1
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -234,41 +234,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a6:5d:56:c1:c7:29:8f:3a:1d:86:2c:5f:1e:ff:83:7a:c0:44:
-         81:81:f7:16:9d:84:70:66:f8:1a:f4:8e:50:a7:dd:d2:1a:2e:
-         f9:6e:cc:e6:39:7c:fb:7e:29:54:24:3d:4a:82:e1:a5:d6:7e:
-         4c:c8:58:b8:d6:f7:d2:90:ca:d9:8f:e9:c8:59:bc:73:1c:37:
-         19:7c:a4:2b:ec:68:de:e9:04:fa:14:f0:07:bd:2f:3f:16:a4:
-         50:8f:e8:89:ea:c1:31:d1:ce:6e:b1:21:11:5b:69:dc:28:e7:
-         8a:33:8d:40:52:f8:86:8e:b0:a1:7a:a5:46:f2:8d:d7:d1:2e:
-         c8:2f:0f:ac:20:38:25:d6:4e:b2:72:fc:88:f3:47:93:bc:ec:
-         47:0c:1c:cf:22:65:40:04:70:15:fa:79:ec:09:a2:69:a9:09:
-         78:f7:3e:84:f3:7f:fa:a2:11:ad:45:72:5d:9d:55:58:fa:b1:
-         c6:67:4e:41:b4:bd:88:a0:e2:55:ae:26:3a:72:78:3d:e4:ab:
-         ad:f7:83:69:24:cd:22:4f:2e:23:a1:05:19:bd:57:d3:e8:b3:
-         3d:9f:bd:ed:0b:95:bf:e5:47:8f:da:dd:9d:6b:27:61:bd:49:
-         15:9c:9d:6b:40:2b:54:5f:3f:56:d5:08:29:6c:46:49:2d:3f:
-         d1:91:ff:f8
+         2d:14:c9:b5:95:04:19:aa:75:5a:11:bd:f9:41:a0:44:e0:19:
+         a8:1c:18:de:b7:a8:2f:1a:6f:82:cd:05:d4:f6:55:97:23:1a:
+         22:55:a0:c2:02:94:5b:62:88:81:67:ff:7b:e2:fc:98:90:23:
+         2b:79:3a:54:3a:da:94:b8:e9:e0:b6:cd:44:4d:a8:2d:6b:73:
+         2c:a2:81:e8:93:9f:6b:f0:92:ba:3b:eb:61:c9:c2:04:19:f5:
+         fd:86:11:30:e2:63:1f:3b:ee:10:bf:a5:ca:35:c5:10:81:05:
+         2c:8a:3f:ea:65:a4:17:69:5f:7d:24:61:77:5d:eb:70:69:38:
+         58:7e:29:61:54:ee:e1:78:9b:8e:2c:2d:f3:2f:da:db:c5:89:
+         c5:a8:46:54:ee:b0:14:e5:04:49:d2:f9:96:71:98:f9:7b:c8:
+         82:21:18:3d:1e:80:f1:20:39:b1:a8:04:24:e7:03:7f:aa:56:
+         90:9d:3c:b7:f3:4b:bd:da:6d:8c:a9:d7:b0:06:d8:77:b3:91:
+         f6:0e:85:08:51:f1:45:ff:6e:ba:04:72:35:3b:4f:fd:49:d8:
+         0c:c9:45:1c:99:68:ec:ce:d3:88:17:75:e2:20:db:42:7f:65:
+         94:40:66:c7:51:cb:19:dd:50:89:c5:41:8d:04:df:7e:2c:8d:
+         61:26:33:45
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf1ve6t/zA35lpoIBoi
-sfW7XiQ4vbfBNNSXixaXNBe8Yd///2uctjR5fVrnO88Hc7gtA1lWaEqFJVj0aAFh
-hFKZL2p+yxNhi2479Y7CSMweUChPX0trMtPzdslvo6pAGwZZGc1CcPSF/oY4yoRC
-X7vTp0FCRlkUPxEdYtnhFj8Gp1nz/7rxiHsMaBBJrI11hwiU9uzOTG3md4UlyI9C
-Ch3TAMyJMdwyB9cuYhZzi13EyRuHfEZkLczg+2nS4b0jK9kVYiKkzXVk8Xh2zAcR
-WQhgA93LZz6nuBL6llRvbZ8FEYlxE1CUu7sXfoDtQLG68jYtRbtzeF63Xi/n+Gbs
-HxcCAwEAAaOByzCByDAdBgNVHQ4EFgQUf3rNsli4tWIawt60a7V06bjcd4cwHwYD
-VR0jBBgwFoAUf3rNsli4tWIawt60a7V06bjcd4cwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqZrzO3kpjirQ8rcEaD
+oOqvmprhrBhDOhJ/2C6FP7yEdz2zYAD720fsebR2zBxaIh4tbBnW4a5NLUZyQhj9
+XgU2RTQasWN8mXkvlIGTuMsr3FvKCIBHIBJ7ftV+PQuEKEtMfw1KvFm7Xk5qnSAK
+7CJmqPQFTtXraGo6mACeyFLrAoJvQslFj4sGc0VLJPTGGdYgeErCLaszeB7N1mvt
+WXKW2hoSI33sMSVFHDT1zNUgG8MmJJ8aITGhzpBSeF2aQozVliDSAqMhEog+MC7D
+HySPJnw1CMRxgbzKKvgdJ6+TOO3XrX35DtxvZc59NgmNwAVCgO4YdPPhiQ8at/AL
+eyECAwEAAaOByzCByDAdBgNVHQ4EFgQUHuAl6PTcKBWxWrY0lhLkL7jofLEwHwYD
+VR0jBBgwFoAUHuAl6PTcKBWxWrY0lhLkL7jofLEwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCmXVbBxymP
-Oh2GLF8e/4N6wESBgfcWnYRwZvga9I5Qp93SGi75bszmOXz7filUJD1KguGl1n5M
-yFi41vfSkMrZj+nIWbxzHDcZfKQr7Gje6QT6FPAHvS8/FqRQj+iJ6sEx0c5usSER
-W2ncKOeKM41AUviGjrCheqVG8o3X0S7ILw+sIDgl1k6ycvyI80eTvOxHDBzPImVA
-BHAV+nnsCaJpqQl49z6E83/6ohGtRXJdnVVY+rHGZ05BtL2IoOJVriY6cng95Kut
-94NpJM0iTy4joQUZvVfT6LM9n73tC5W/5UeP2t2daydhvUkVnJ1rQCtUXz9W1Qgp
-bEZJLT/Rkf/4
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAtFMm1lQQZ
+qnVaEb35QaBE4BmoHBjet6gvGm+CzQXU9lWXIxoiVaDCApRbYoiBZ/974vyYkCMr
+eTpUOtqUuOngts1ETagta3MsooHok59r8JK6O+thycIEGfX9hhEw4mMfO+4Qv6XK
+NcUQgQUsij/qZaQXaV99JGF3XetwaThYfilhVO7heJuOLC3zL9rbxYnFqEZU7rAU
+5QRJ0vmWcZj5e8iCIRg9HoDxIDmxqAQk5wN/qlaQnTy380u92m2MqdewBth3s5H2
+DoUIUfFF/266BHI1O0/9SdgMyUUcmWjsztOIF3XiINtCf2WUQGbHUcsZ3VCJxUGN
+BN9+LI1hJjNF
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,6 +281,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Unacceptable signature algorithm
 ERROR: VerifySignedData failed
diff --git a/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
index af172e2..da99868 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d5:9d:3b:85:e5:81:69:52:70:67:33:4a:2b:76:
-                    6a:e5:61:db:af:e5:32:74:85:dd:54:d2:c7:76:5a:
-                    5c:38:d8:46:fc:b4:33:f5:9d:8e:80:83:ab:31:96:
-                    41:c4:c2:52:af:8c:4d:0e:5c:69:c5:5d:cc:b4:1b:
-                    ef:de:61:58:88:e2:c4:bf:6a:cb:74:bd:f5:bd:61:
-                    57:1c:22:9f:6d:e8:38:c6:70:b8:1e:a5:2b:4f:35:
-                    9f:65:fc:c1:36:17:3e:d7:fa:33:21:70:fb:e0:ce:
-                    ab:23:41:3f:fc:7b:74:1d:6b:ba:21:b7:5b:fd:a1:
-                    77:11:1a:8d:5b:2a:be:38:2e:79:a0:b7:2d:45:5c:
-                    d7:32:fd:4c:70:f1:95:1c:38:a3:15:4f:57:f3:75:
-                    59:fe:75:14:39:ea:44:16:b9:2e:06:df:67:30:dd:
-                    5a:b1:7e:95:09:fd:12:cc:87:b1:66:fa:7e:b9:e5:
-                    b5:38:0a:46:73:53:1a:b2:aa:12:e3:6d:99:56:e8:
-                    c7:cc:eb:6b:00:9b:c1:ba:02:23:2b:32:be:9b:f8:
-                    ab:b2:b5:be:50:f6:7f:95:b6:6b:1c:e6:ad:f1:69:
-                    5a:e0:41:1e:85:64:91:37:7b:9a:28:43:a5:ee:33:
-                    25:ab:82:97:03:07:94:b8:d3:34:95:bf:33:d2:14:
-                    b1:61
+                    00:dd:69:8a:f3:e3:97:bd:3b:1b:fc:95:d2:0f:29:
+                    bb:4b:ab:e6:66:cf:66:d9:fd:68:55:d8:22:d5:d9:
+                    ce:bf:d9:fa:b0:23:0a:e8:bb:c1:fa:0b:aa:6a:18:
+                    2a:a5:5c:a3:57:c4:d5:4c:29:bb:64:ee:51:f7:41:
+                    fd:26:93:b7:e3:21:12:8e:a3:76:18:2b:f3:40:7d:
+                    bc:c7:56:52:0a:42:a6:42:dc:ea:93:b6:b0:09:44:
+                    e7:52:ce:ce:41:da:24:fa:fb:35:57:77:7a:2e:d8:
+                    72:7b:26:f7:e7:e8:17:db:52:bf:7a:83:30:15:d0:
+                    28:44:5f:87:76:7e:19:32:b3:5a:7d:ff:88:3a:d5:
+                    cd:4f:19:45:20:9d:66:73:d9:4a:70:b0:cf:0b:d6:
+                    8c:d3:4b:52:a4:ef:eb:12:47:dc:e6:18:8c:af:54:
+                    74:67:f4:54:c7:5a:65:3d:4d:a0:31:0d:d6:70:52:
+                    d4:df:e8:35:d7:60:ca:ce:0b:d7:b9:e2:01:36:36:
+                    ad:b1:8b:30:67:cb:f6:0b:ad:0e:0d:a9:c7:ee:96:
+                    5e:8d:01:44:d4:85:22:1b:94:bb:62:ca:c1:9d:c3:
+                    05:fe:87:81:cb:f7:4f:96:e9:06:cc:81:3a:3d:4d:
+                    54:b3:59:2c:fc:07:11:9c:89:0a:ad:af:15:f4:74:
+                    ce:39
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B3:FD:B6:08:AB:82:83:50:E7:F0:85:51:1C:CC:78:E5:22:50:91:60
+                83:C0:D7:EE:36:B8:BA:F9:1D:4E:73:EF:5D:E5:24:D7:9D:2D:61:F8
             X509v3 Authority Key Identifier: 
-                keyid:5B:B2:D8:DC:1B:60:39:B5:6B:10:A5:70:37:93:E7:3C:F5:52:46:C8
+                keyid:2A:B8:2E:F5:10:55:C6:E6:3E:CD:B1:E3:17:07:C7:B1:24:01:62:BD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -59,42 +59,42 @@
             1.2.3.4: critical
                 ....
     Signature Algorithm: sha256WithRSAEncryption
-         39:19:04:31:e9:20:03:1b:e9:d3:91:25:94:68:4f:8d:07:16:
-         08:e8:7f:99:01:37:56:8d:f4:15:6b:a8:7c:e4:3d:32:ad:3d:
-         62:0f:5e:93:6f:b9:21:ba:e8:c3:48:13:e5:eb:ad:26:f0:9b:
-         4c:fe:76:8e:73:a2:be:01:b5:48:7c:11:7e:cc:47:4b:0c:0c:
-         17:65:54:ab:0e:79:6c:e5:75:67:52:ab:f7:26:97:36:3d:71:
-         6d:88:54:b9:ef:b1:00:42:56:64:88:db:0f:9c:be:25:e0:6e:
-         2b:df:c6:55:3a:89:af:92:1c:21:71:6e:22:ab:5a:b8:de:53:
-         a1:8d:84:0f:0e:55:43:08:45:0b:fd:4a:6f:fa:e4:89:55:a0:
-         8d:10:c0:3a:06:42:7c:f1:b8:7a:19:a7:61:cc:c0:b1:e2:f1:
-         14:d5:bd:ff:41:a5:50:f6:ac:a4:3f:ec:6a:6a:3e:7b:60:29:
-         f4:9d:c8:57:81:12:59:7b:0f:b2:2a:43:29:03:a5:eb:e7:e8:
-         cd:15:fe:53:07:e0:12:0a:35:29:e8:fe:7f:51:ae:19:98:d5:
-         89:9c:05:0a:ba:51:89:0f:1f:3c:8e:2a:eb:e7:93:0a:fd:c1:
-         f3:0e:ce:67:5b:f2:73:dc:e6:2e:db:2b:88:11:3b:07:d8:ff:
-         79:0c:6a:e1
+         16:87:37:58:5d:aa:0e:d8:d7:5a:cd:b0:8a:89:85:f2:2e:f3:
+         ca:04:e9:e0:df:09:0c:48:89:21:a8:72:1f:95:9d:6b:d2:65:
+         28:5f:41:9b:e2:4f:1e:19:e9:b9:a1:76:69:93:bb:a0:56:85:
+         b5:4c:b1:ff:35:66:81:fe:21:db:4d:b1:6b:ba:eb:d4:4c:7d:
+         25:64:58:bc:82:26:8b:06:1f:7f:e6:d1:44:67:7d:ff:92:bc:
+         12:13:aa:42:53:7d:08:58:e6:c9:af:02:ba:1c:d3:cc:9f:04:
+         ba:36:14:13:a5:34:de:62:10:62:70:3c:3b:3f:4b:4b:ed:cc:
+         1c:33:21:a0:05:f0:a0:06:0b:5b:1f:c9:6e:ba:00:b6:c6:b9:
+         64:6d:99:35:c9:fb:3e:12:aa:b4:67:32:d7:e2:c4:62:6d:54:
+         65:67:17:e1:70:52:10:11:14:0d:a5:6e:0b:ec:9f:68:9f:1d:
+         62:13:3b:38:4c:09:73:bb:45:3c:d6:ce:20:9d:17:96:38:e1:
+         8a:ba:14:4b:ed:35:55:d6:03:a1:6a:7f:f3:00:c3:44:7d:03:
+         64:ef:25:04:ac:66:a2:01:9f:ba:e1:d4:80:37:ac:1f:a3:7c:
+         85:be:4e:da:90:06:e9:c2:d3:6f:77:ae:43:73:b8:83:0a:e1:
+         7e:b9:e0:f9
 -----BEGIN CERTIFICATE-----
 MIIDnTCCAoWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVnTuF
-5YFpUnBnM0ordmrlYduv5TJ0hd1U0sd2Wlw42Eb8tDP1nY6Ag6sxlkHEwlKvjE0O
-XGnFXcy0G+/eYViI4sS/ast0vfW9YVccIp9t6DjGcLgepStPNZ9l/ME2Fz7X+jMh
-cPvgzqsjQT/8e3Qda7oht1v9oXcRGo1bKr44Lnmgty1FXNcy/Uxw8ZUcOKMVT1fz
-dVn+dRQ56kQWuS4G32cw3VqxfpUJ/RLMh7Fm+n655bU4CkZzUxqyqhLjbZlW6MfM
-62sAm8G6AiMrMr6b+Kuytb5Q9n+Vtmsc5q3xaVrgQR6FZJE3e5ooQ6XuMyWrgpcD
-B5S40zSVvzPSFLFhAgMBAAGjgfkwgfYwHQYDVR0OBBYEFLP9tgirgoNQ5/CFURzM
-eOUiUJFgMB8GA1UdIwQYMBaAFFuy2NwbYDm1axClcDeT5zz1UkbIMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdaYrz
+45e9Oxv8ldIPKbtLq+Zmz2bZ/WhV2CLV2c6/2fqwIwrou8H6C6pqGCqlXKNXxNVM
+Kbtk7lH3Qf0mk7fjIRKOo3YYK/NAfbzHVlIKQqZC3OqTtrAJROdSzs5B2iT6+zVX
+d3ou2HJ7Jvfn6BfbUr96gzAV0ChEX4d2fhkys1p9/4g61c1PGUUgnWZz2UpwsM8L
+1ozTS1Kk7+sSR9zmGIyvVHRn9FTHWmU9TaAxDdZwUtTf6DXXYMrOC9e54gE2Nq2x
+izBny/YLrQ4Nqcfull6NAUTUhSIblLtiysGdwwX+h4HL90+W6QbMgTo9TVSzWSz8
+BxGciQqtrxX0dM45AgMBAAGjgfkwgfYwHQYDVR0OBBYEFIPA1+42uLr5HU5z713l
+JNedLWH4MB8GA1UdIwQYMBaAFCq4LvUQVcbmPs2x4xcHx7EkAWK9MD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
 BwMBBggrBgEFBQcDAjAOBgMqAwQBAf8EBAECAwQwDQYJKoZIhvcNAQELBQADggEB
-ADkZBDHpIAMb6dORJZRoT40HFgjof5kBN1aN9BVrqHzkPTKtPWIPXpNvuSG66MNI
-E+XrrSbwm0z+do5zor4BtUh8EX7MR0sMDBdlVKsOeWzldWdSq/cmlzY9cW2IVLnv
-sQBCVmSI2w+cviXgbivfxlU6ia+SHCFxbiKrWrjeU6GNhA8OVUMIRQv9Sm/65IlV
-oI0QwDoGQnzxuHoZp2HMwLHi8RTVvf9BpVD2rKQ/7GpqPntgKfSdyFeBEll7D7Iq
-QykDpevn6M0V/lMH4BIKNSno/n9RrhmY1YmcBQq6UYkPHzyOKuvnkwr9wfMOzmdb
-8nPc5i7bK4gROwfY/3kMauE=
+ABaHN1hdqg7Y11rNsIqJhfIu88oE6eDfCQxIiSGoch+VnWvSZShfQZviTx4Z6bmh
+dmmTu6BWhbVMsf81ZoH+IdtNsWu669RMfSVkWLyCJosGH3/m0URnff+SvBITqkJT
+fQhY5smvAroc08yfBLo2FBOlNN5iEGJwPDs/S0vtzBwzIaAF8KAGC1sfyW66ALbG
+uWRtmTXJ+z4SqrRnMtfixGJtVGVnF+FwUhARFA2lbgvsn2ifHWITOzhMCXO7RTzW
+ziCdF5Y44Yq6FEvtNVXWA6Fqf/MAw0R9A2TvJQSsZqIBn7rh1IA3rB+jfIW+TtqQ
+BunC0293rkNzuIMK4X654Pk=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -111,30 +111,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b9:ec:7c:da:f2:c7:b4:02:ee:82:a9:58:98:60:
-                    67:07:a2:c2:9d:2c:a1:76:50:f7:4a:0a:04:80:45:
-                    7b:3d:f6:31:fe:1d:e9:45:40:76:1d:38:df:c9:e1:
-                    42:df:13:7e:16:26:2b:41:14:6b:6e:5e:f3:39:4e:
-                    61:9d:fd:5f:bf:2a:f9:b7:cf:3f:af:34:b1:17:ef:
-                    97:1f:bf:3d:4c:0a:93:91:bd:ee:11:7a:64:ee:69:
-                    22:75:60:8b:c3:10:cd:9e:91:8a:d8:54:c7:43:f4:
-                    fb:88:db:09:7a:22:5d:26:58:ab:7d:d0:41:11:47:
-                    10:62:ed:cc:e6:bb:d2:da:a4:7c:e9:0a:39:5b:9f:
-                    93:b0:06:27:50:38:ea:63:e2:6b:a0:eb:c5:d3:7f:
-                    87:71:d8:08:64:d5:87:0a:6e:59:99:d7:74:7c:da:
-                    eb:30:68:9d:f8:09:31:c7:66:5f:9a:fb:2d:9b:f1:
-                    c1:ff:cb:57:67:46:03:99:a3:4b:e0:bc:2b:17:f4:
-                    0b:7b:61:3f:5e:cf:c9:41:9b:15:ee:f9:90:46:ad:
-                    b4:a2:86:3f:87:3c:dd:7e:97:6f:97:30:88:f8:e6:
-                    88:83:15:ad:77:6a:fd:1e:f1:ae:88:a2:f5:52:6d:
-                    6e:d9:5d:5d:c1:1b:0a:49:10:f4:5a:e8:42:53:67:
-                    d1:cd
+                    00:b5:92:c1:f9:71:4d:e8:71:f3:2c:f7:fa:6c:c6:
+                    aa:34:f3:ce:ed:86:32:24:d6:51:c9:3f:e4:19:3e:
+                    06:49:6f:fc:ae:ab:9e:73:54:33:95:78:3e:f3:56:
+                    56:15:a5:1a:62:bc:97:af:41:f2:b7:fd:fd:a9:4e:
+                    b0:a5:db:18:1e:65:ee:9d:15:71:3e:45:d5:47:fe:
+                    75:d5:4e:4d:8e:72:ea:b3:bc:b7:77:6c:0b:75:72:
+                    86:d2:49:ed:4a:ea:89:da:da:35:bd:2d:8c:dd:53:
+                    29:a9:46:be:43:57:59:4f:63:34:08:c2:cf:a3:76:
+                    86:d2:79:2f:8c:01:97:12:d0:6b:b6:3f:aa:dd:e5:
+                    c9:17:9d:94:16:a1:46:ec:63:02:fd:e2:96:dc:85:
+                    ce:95:e6:64:37:f7:d0:96:5e:b1:ba:96:f0:18:11:
+                    cd:01:13:57:96:ce:a4:2a:54:93:7d:9d:c9:6a:98:
+                    6b:39:0f:cc:e6:29:0f:8d:8d:cc:ea:5e:49:74:45:
+                    89:1b:72:15:d4:7e:1f:9d:3f:e2:91:04:ec:88:55:
+                    da:62:1a:49:bf:11:71:55:94:7b:a5:15:31:60:d3:
+                    53:b7:f0:81:c1:1d:ec:11:00:d6:5a:97:e6:5b:cb:
+                    e7:9d:6c:8f:28:77:10:7d:ac:d7:e7:6f:6d:b2:e7:
+                    8e:4b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5B:B2:D8:DC:1B:60:39:B5:6B:10:A5:70:37:93:E7:3C:F5:52:46:C8
+                2A:B8:2E:F5:10:55:C6:E6:3E:CD:B1:E3:17:07:C7:B1:24:01:62:BD
             X509v3 Authority Key Identifier: 
-                keyid:50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                keyid:46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -149,41 +149,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         12:72:ee:b6:62:1b:0d:70:52:a6:02:3c:13:2a:88:cf:cb:9a:
-         e2:07:5f:cf:3e:be:75:d3:f9:a6:23:47:ca:fb:88:87:bd:e1:
-         52:8e:8b:fe:e9:c1:7a:8c:30:91:c5:0c:fe:9d:31:fa:fc:c0:
-         d7:fe:7a:7a:18:6f:3c:67:50:b0:22:b2:09:48:ca:dc:d7:d3:
-         29:86:eb:f4:cf:e0:3e:6e:d1:88:fa:20:93:b3:05:4c:c6:29:
-         06:df:4a:8b:72:3e:c8:3c:2b:33:56:26:de:91:1a:11:bc:21:
-         7b:b8:b5:b6:7c:ca:0d:f7:d6:e8:b0:a8:99:e8:7a:2b:f0:c4:
-         78:e5:54:9e:3f:73:dc:85:41:97:11:36:45:73:b9:f2:49:8d:
-         d7:83:cf:b4:1a:ed:33:dc:0b:cd:7e:83:77:ce:aa:2f:0e:1f:
-         4d:e0:19:96:cd:74:79:de:18:8b:ad:9f:0c:96:20:14:63:5e:
-         e2:58:8e:4a:d8:fd:59:0d:a6:a4:02:85:ac:23:d4:43:b2:da:
-         2d:6b:87:79:9e:2e:1e:f4:d3:95:ef:3d:91:7a:f7:17:16:c7:
-         9f:1f:b7:42:7e:f4:fa:d9:81:18:26:23:03:1e:86:99:7d:28:
-         ef:a3:ac:be:bb:55:fa:38:62:3c:e6:6e:47:4b:f1:45:ef:de:
-         38:ea:c3:a3
+         a0:5d:d6:8e:13:70:92:0a:04:7b:e6:b5:5c:e2:b5:79:ed:60:
+         83:4c:60:ea:8c:d3:3c:0a:c2:cb:e7:ca:82:e2:6c:51:6e:98:
+         91:fd:99:00:36:91:a7:99:61:52:dd:a7:d2:ec:6b:c9:cc:99:
+         77:3a:8a:d0:ed:f3:4c:e7:dc:99:54:f3:d7:ba:73:13:39:f5:
+         bd:8c:8f:80:97:0e:23:8b:c1:51:e5:7d:d0:80:4f:2c:50:e1:
+         2a:d8:cb:cb:44:4f:a2:e2:8c:61:09:f0:27:44:ad:81:0b:31:
+         42:c4:4f:69:02:41:a7:e0:56:06:3f:c3:87:5e:29:d8:c4:ba:
+         32:5f:ad:2f:65:c6:34:77:77:3f:1a:99:a3:ee:27:a9:b9:bc:
+         37:9f:6a:f0:81:f5:35:06:eb:79:60:b1:8d:a8:64:e7:54:0f:
+         0c:aa:b1:bb:31:5c:03:0b:c4:1a:00:eb:dc:d4:d5:ed:fe:60:
+         10:b1:c4:ef:a4:dc:79:61:41:69:3f:eb:e0:21:57:06:b7:61:
+         de:15:f1:1c:06:b5:2a:91:fd:cb:5d:b4:e4:c2:60:0a:8f:7f:
+         0a:17:6a:ee:aa:26:76:b1:dd:60:13:df:78:d1:65:4f:0a:77:
+         cd:e5:41:8a:7b:72:d2:14:ad:c3:54:b0:64:2f:b7:5d:9a:23:
+         97:31:ad:67
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuex82vLH
-tALugqlYmGBnB6LCnSyhdlD3SgoEgEV7PfYx/h3pRUB2HTjfyeFC3xN+FiYrQRRr
-bl7zOU5hnf1fvyr5t88/rzSxF++XH789TAqTkb3uEXpk7mkidWCLwxDNnpGK2FTH
-Q/T7iNsJeiJdJlirfdBBEUcQYu3M5rvS2qR86Qo5W5+TsAYnUDjqY+JroOvF03+H
-cdgIZNWHCm5Zmdd0fNrrMGid+Akxx2Zfmvstm/HB/8tXZ0YDmaNL4LwrF/QLe2E/
-Xs/JQZsV7vmQRq20ooY/hzzdfpdvlzCI+OaIgxWtd2r9HvGuiKL1Um1u2V1dwRsK
-SRD0WuhCU2fRzQIDAQABo4HLMIHIMB0GA1UdDgQWBBRbstjcG2A5tWsQpXA3k+c8
-9VJGyDAfBgNVHSMEGDAWgBRQJQe+EsiiGC8yIVnMK1qnThldVTA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZLB+XFN
+6HHzLPf6bMaqNPPO7YYyJNZRyT/kGT4GSW/8rquec1QzlXg+81ZWFaUaYryXr0Hy
+t/39qU6wpdsYHmXunRVxPkXVR/511U5NjnLqs7y3d2wLdXKG0kntSuqJ2to1vS2M
+3VMpqUa+Q1dZT2M0CMLPo3aG0nkvjAGXEtBrtj+q3eXJF52UFqFG7GMC/eKW3IXO
+leZkN/fQll6xupbwGBHNARNXls6kKlSTfZ3JaphrOQ/M5ikPjY3M6l5JdEWJG3IV
+1H4fnT/ikQTsiFXaYhpJvxFxVZR7pRUxYNNTt/CBwR3sEQDWWpfmW8vnnWyPKHcQ
+fazX529tsueOSwIDAQABo4HLMIHIMB0GA1UdDgQWBBQquC71EFXG5j7NseMXB8ex
+JAFivTAfBgNVHSMEGDAWgBRGGjL0MshIUTEEUMhiihCBpcVQDzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABJy7rZiGw1wUqYCPBMqiM/LmuIHX88+vnXT+aYjR8r7iIe94VKOi/7pwXqMMJHF
-DP6dMfr8wNf+enoYbzxnULAisglIytzX0ymG6/TP4D5u0Yj6IJOzBUzGKQbfSoty
-Psg8KzNWJt6RGhG8IXu4tbZ8yg331uiwqJnoeivwxHjlVJ4/c9yFQZcRNkVzufJJ
-jdeDz7Qa7TPcC81+g3fOqi8OH03gGZbNdHneGIutnwyWIBRjXuJYjkrY/VkNpqQC
-hawj1EOy2i1rh3meLh7005XvPZF69xcWx58ft0J+9PrZgRgmIwMehpl9KO+jrL67
-Vfo4YjzmbkdL8UXv3jjqw6M=
+AKBd1o4TcJIKBHvmtVzitXntYINMYOqM0zwKwsvnyoLibFFumJH9mQA2kaeZYVLd
+p9Lsa8nMmXc6itDt80zn3JlU89e6cxM59b2Mj4CXDiOLwVHlfdCATyxQ4SrYy8tE
+T6LijGEJ8CdErYELMULET2kCQafgVgY/w4deKdjEujJfrS9lxjR3dz8amaPuJ6m5
+vDefavCB9TUG63lgsY2oZOdUDwyqsbsxXAMLxBoA69zU1e3+YBCxxO+k3HlhQWk/
+6+AhVwa3Yd4V8RwGtSqR/ctdtOTCYAqPfwoXau6qJnax3WAT33jRZU8Kd83lQYp7
+ctIUrcNUsGQvt12aI5cxrWc=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -200,30 +200,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a9:09:72:27:8b:f5:e4:bb:33:ee:14:1d:da:11:
-                    7c:b1:f1:53:3a:a3:77:3f:b2:f5:1f:b6:23:a3:69:
-                    f8:9d:52:97:4c:92:af:07:46:c5:82:3f:97:a5:b2:
-                    fc:e0:b3:3e:29:53:e5:75:07:04:30:7b:bb:55:a3:
-                    af:ec:c3:bd:a0:c5:f1:58:4b:a8:5a:77:49:c7:fc:
-                    a2:13:97:5c:3a:95:58:9b:95:4c:a0:18:b3:3a:18:
-                    1d:fe:5f:c1:c7:9b:d3:9a:0d:f3:4c:a6:3d:28:21:
-                    50:9d:ae:90:ae:aa:96:23:d6:4f:9b:ec:ff:59:67:
-                    0a:ff:8a:89:df:bc:99:ff:f6:75:b5:da:c7:79:d8:
-                    54:c8:f3:96:3a:c6:e9:60:0c:ee:9e:52:e1:e9:5f:
-                    58:1e:29:a3:1a:c3:4f:91:8c:2e:85:33:87:f0:c7:
-                    c6:74:91:cc:fb:dd:ca:1e:71:6f:e2:c1:41:bc:ef:
-                    e8:7f:48:07:a9:5c:aa:21:60:43:fd:3e:98:8b:4c:
-                    8d:95:55:48:3b:35:1a:2a:f4:e3:ef:85:01:11:c4:
-                    f4:a3:15:e3:68:df:bb:94:f9:26:10:35:83:96:83:
-                    00:ce:cf:71:d4:e9:01:18:80:c2:dd:f0:9d:52:f6:
-                    fa:11:de:a1:7f:79:d9:13:a6:eb:33:3e:04:57:b6:
-                    75:b9
+                    00:d8:21:ff:fb:05:2b:4b:26:71:df:17:ad:e2:0a:
+                    91:07:9e:26:8b:20:f8:6a:92:11:14:f0:85:25:d2:
+                    30:1f:6a:9b:e5:3f:6a:c7:59:5f:b6:02:e2:f5:4f:
+                    cc:db:a6:da:db:9d:e0:76:c7:2b:a1:ad:c6:5e:ad:
+                    b6:4b:b0:01:e6:e3:7a:8e:7f:01:7f:96:4c:80:61:
+                    c3:30:42:6a:c5:85:20:17:be:4e:59:9b:73:6d:7a:
+                    2b:80:f8:8a:78:f5:de:ac:05:cd:7e:e8:bd:c6:8f:
+                    fc:9f:48:66:9a:c1:0f:41:bc:7f:e3:aa:b3:33:a1:
+                    8b:b1:cb:db:f9:04:04:14:9b:80:c2:cb:76:67:f8:
+                    21:09:84:b5:f5:43:a6:f1:50:2f:34:df:a3:bc:96:
+                    a6:23:d7:ba:83:a0:6e:c2:c7:b5:c8:8d:2a:ea:86:
+                    69:18:72:3f:1d:41:be:54:ff:25:ba:5d:42:99:ae:
+                    3a:38:50:45:7a:be:20:56:6a:03:f8:e6:d0:df:bc:
+                    05:b8:7f:3b:5b:af:71:f0:36:7d:dd:f4:f0:35:b1:
+                    1a:31:52:e4:62:a1:0a:64:cf:af:47:80:26:58:db:
+                    5f:65:79:a3:37:17:42:b7:ce:c4:d2:2c:d4:df:06:
+                    da:be:8b:73:f6:59:d2:2a:2a:90:08:24:01:40:5d:
+                    4a:f3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
             X509v3 Authority Key Identifier: 
-                keyid:50:25:07:BE:12:C8:A2:18:2F:32:21:59:CC:2B:5A:A7:4E:19:5D:55
+                keyid:46:1A:32:F4:32:C8:48:51:31:04:50:C8:62:8A:10:81:A5:C5:50:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -238,41 +238,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         3d:e1:85:32:4c:43:1e:f2:0d:ff:d3:ec:90:97:7d:8f:9c:16:
-         b1:6e:cb:55:f1:4f:d9:46:1c:c8:d7:3c:3e:8c:2c:8a:21:b8:
-         38:a4:a9:a8:ac:69:51:32:3c:99:57:f8:73:2a:56:4a:ba:6e:
-         6a:a8:89:f0:03:14:d2:7f:d2:22:55:84:47:e7:05:9c:3b:72:
-         5d:39:02:b0:fc:68:90:14:02:12:d8:9b:85:1c:cf:77:92:c7:
-         73:80:38:e4:f4:f9:72:b7:dd:ca:0f:3d:f2:1c:6a:82:1f:21:
-         90:d3:e3:77:e5:ee:e9:0e:23:9e:69:f6:29:38:51:4f:e9:73:
-         7d:3d:32:54:b2:96:04:9b:62:36:99:8b:ea:9c:3f:87:7f:5e:
-         e8:ed:28:c8:15:ac:59:f8:f5:d9:3b:b3:fd:d4:a9:e4:55:1b:
-         07:ee:d9:18:77:d4:68:8d:b0:ce:a3:60:fe:60:2c:ca:b4:2f:
-         08:8a:19:1a:fc:a3:6b:1b:b4:72:28:7a:63:cc:cc:cd:18:ae:
-         99:86:4d:67:12:48:a6:33:f3:19:ce:fa:5a:a5:d7:0d:4d:50:
-         c6:1f:f2:d9:e6:41:d6:29:4a:a6:3c:ff:80:4f:e6:e8:90:f5:
-         ab:cb:bf:93:3b:90:da:e6:fb:d5:59:c3:9f:ec:91:bf:3e:0a:
-         a3:23:ef:ee
+         73:94:b4:6a:84:52:2d:22:d3:93:bf:69:87:be:34:56:5f:7c:
+         21:54:08:3c:38:54:5e:90:1a:76:da:8c:9d:3f:5a:64:6a:5e:
+         96:0e:bc:a6:6c:22:13:22:7d:64:a5:12:a9:eb:15:53:70:74:
+         f6:7e:60:84:3e:60:4c:b5:04:8f:ba:36:69:87:7b:55:c6:52:
+         48:62:9a:aa:0b:c5:1e:17:6b:ca:b2:46:04:34:e7:be:71:f5:
+         50:a3:70:e9:2d:f3:d6:3d:b0:49:3e:aa:d6:3b:10:4e:95:e1:
+         a6:dc:99:b6:bc:c2:d9:d0:93:60:99:d1:82:6b:2d:88:3b:1f:
+         7c:f4:32:2a:47:02:4c:2b:18:e6:62:e4:6e:ba:cc:37:24:61:
+         2e:8a:44:17:3d:f6:22:62:ce:c1:1c:e8:98:82:3a:e5:32:9f:
+         56:69:1b:4c:cf:bd:0d:4c:cc:ed:46:2f:72:1b:cd:c9:40:94:
+         86:91:ee:ff:64:5e:79:d7:c4:32:2a:84:ff:31:ec:c4:c9:ef:
+         0e:93:23:f7:ce:e5:bb:97:c1:9f:88:c8:c2:95:3f:1b:bf:29:
+         d9:92:76:aa:5e:ed:2c:aa:d4:f7:c5:32:70:ee:2c:2d:f8:46:
+         36:ed:40:43:51:fb:18:10:bf:8f:cd:c4:d0:b2:10:66:08:78:
+         71:b0:dd:41
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkJcieL9eS7M+4UHdoR
-fLHxUzqjdz+y9R+2I6Np+J1Sl0ySrwdGxYI/l6Wy/OCzPilT5XUHBDB7u1Wjr+zD
-vaDF8VhLqFp3Scf8ohOXXDqVWJuVTKAYszoYHf5fwceb05oN80ymPSghUJ2ukK6q
-liPWT5vs/1lnCv+Kid+8mf/2dbXax3nYVMjzljrG6WAM7p5S4elfWB4poxrDT5GM
-LoUzh/DHxnSRzPvdyh5xb+LBQbzv6H9IB6lcqiFgQ/0+mItMjZVVSDs1Gir04++F
-ARHE9KMV42jfu5T5JhA1g5aDAM7PcdTpARiAwt3wnVL2+hHeoX952ROm6zM+BFe2
-dbkCAwEAAaOByzCByDAdBgNVHQ4EFgQUUCUHvhLIohgvMiFZzCtap04ZXVUwHwYD
-VR0jBBgwFoAUUCUHvhLIohgvMiFZzCtap04ZXVUwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANgh//sFK0smcd8XreIK
+kQeeJosg+GqSERTwhSXSMB9qm+U/asdZX7YC4vVPzNum2tud4HbHK6Gtxl6ttkuw
+Aebjeo5/AX+WTIBhwzBCasWFIBe+Tlmbc216K4D4inj13qwFzX7ovcaP/J9IZprB
+D0G8f+OqszOhi7HL2/kEBBSbgMLLdmf4IQmEtfVDpvFQLzTfo7yWpiPXuoOgbsLH
+tciNKuqGaRhyPx1BvlT/JbpdQpmuOjhQRXq+IFZqA/jm0N+8Bbh/O1uvcfA2fd30
+8DWxGjFS5GKhCmTPr0eAJljbX2V5ozcXQrfOxNIs1N8G2r6Lc/ZZ0ioqkAgkAUBd
+SvMCAwEAAaOByzCByDAdBgNVHQ4EFgQURhoy9DLISFExBFDIYooQgaXFUA8wHwYD
+VR0jBBgwFoAURhoy9DLISFExBFDIYooQgaXFUA8wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA94YUyTEMe
-8g3/0+yQl32PnBaxbstV8U/ZRhzI1zw+jCyKIbg4pKmorGlRMjyZV/hzKlZKum5q
-qInwAxTSf9IiVYRH5wWcO3JdOQKw/GiQFAIS2JuFHM93ksdzgDjk9Plyt93KDz3y
-HGqCHyGQ0+N35e7pDiOeafYpOFFP6XN9PTJUspYEm2I2mYvqnD+Hf17o7SjIFaxZ
-+PXZO7P91KnkVRsH7tkYd9RojbDOo2D+YCzKtC8Iihka/KNrG7RyKHpjzMzNGK6Z
-hk1nEkimM/MZzvpapdcNTVDGH/LZ5kHWKUqmPP+AT+bokPWry7+TO5Da5vvVWcOf
-7JG/PgqjI+/u
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBzlLRqhFIt
+ItOTv2mHvjRWX3whVAg8OFRekBp22oydP1pkal6WDrymbCITIn1kpRKp6xVTcHT2
+fmCEPmBMtQSPujZph3tVxlJIYpqqC8UeF2vKskYENOe+cfVQo3DpLfPWPbBJPqrW
+OxBOleGm3Jm2vMLZ0JNgmdGCay2IOx989DIqRwJMKxjmYuRuusw3JGEuikQXPfYi
+Ys7BHOiYgjrlMp9WaRtMz70NTMztRi9yG83JQJSGke7/ZF5518QyKoT/MezEye8O
+kyP3zuW7l8GfiMjClT8bvynZknaqXu0sqtT3xTJw7iwt+EY27UBDUfsYEL+PzcTQ
+shBmCHhxsN1B
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -285,6 +285,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Unconsumed critical extension
   oid: 2A0304
diff --git a/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
index 2c6305a..e79ca30 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:95:c5:73:7e:a9:8f:9f:25:a3:b1:9f:29:c6:2e:
-                    d6:b2:3d:5b:a4:10:08:53:40:f7:91:79:45:96:d0:
-                    66:85:85:ea:56:e6:db:07:fd:82:1d:e3:e6:11:f2:
-                    da:13:64:45:bf:c6:e1:a7:4c:da:29:e7:ba:2f:27:
-                    d8:cd:59:3d:69:a3:af:d6:64:4b:3e:a4:12:07:5d:
-                    d4:7d:07:85:6d:9c:9d:fe:fd:8f:ff:74:b3:c9:c9:
-                    86:64:7c:ee:ca:74:1b:2f:3f:7c:37:8b:d9:fa:05:
-                    0a:3a:9b:93:45:d0:8d:16:3e:7a:ce:0b:bb:8f:1b:
-                    cc:15:4b:a2:76:08:f5:fb:e0:98:cc:1d:a4:1a:c1:
-                    f5:23:b0:28:1c:fe:5f:a4:24:68:59:fc:1d:63:bc:
-                    60:9a:a6:16:2c:db:0d:66:9d:d7:6e:13:6a:53:8c:
-                    5b:61:a7:3f:9f:be:c8:2a:f9:ce:ea:47:d2:d2:1b:
-                    95:de:af:5d:b0:39:3d:71:f5:be:5f:80:bd:3b:3e:
-                    2e:79:e8:a2:de:9c:2b:da:e5:88:cd:4e:9c:cf:cd:
-                    bc:88:2e:cc:9e:3b:e4:52:2b:49:0f:31:90:3f:15:
-                    0d:b5:68:ea:5e:7e:6e:f9:6c:ba:57:bd:41:33:51:
-                    27:66:f9:2b:3f:ae:7c:87:07:a1:19:a5:0f:ba:bd:
-                    f8:b7
+                    00:e6:63:99:f7:24:74:3f:2a:36:c1:12:e3:e8:68:
+                    f8:aa:38:39:76:ef:ed:66:05:c3:99:d9:2d:7b:72:
+                    d0:57:a2:52:fb:77:c1:29:d7:53:14:e8:a4:74:7c:
+                    2a:21:0b:5d:20:be:18:e5:7f:75:70:73:f3:89:d4:
+                    e7:3c:54:f6:25:41:ae:59:48:88:c5:10:c8:a9:a2:
+                    75:e0:43:b5:e2:bb:55:72:89:aa:52:db:d5:4b:88:
+                    e5:7d:b6:80:4b:fb:2c:bd:57:f4:65:57:72:3a:1c:
+                    2f:93:a4:de:06:74:77:cc:e2:21:bd:0a:b3:12:c2:
+                    2c:3c:2a:84:27:ae:3f:4a:23:a3:39:3f:b1:cc:d8:
+                    e1:84:dd:b0:91:aa:ba:58:c2:ed:62:c8:8c:b4:b5:
+                    ff:82:92:93:90:5b:68:ed:7f:30:52:db:0e:88:17:
+                    8e:eb:37:21:b8:2a:37:1c:7f:13:8a:be:40:56:ac:
+                    cc:1f:a4:0d:d7:47:ab:b9:76:0f:16:c4:70:b3:e3:
+                    4f:9a:8d:80:dc:88:b1:e3:be:c1:0e:62:01:db:6b:
+                    f4:8f:d9:42:84:01:85:1a:7d:0c:c5:09:05:3e:ed:
+                    d9:0a:45:a6:0a:34:7e:a1:88:48:f3:ff:cc:85:eb:
+                    d4:c2:29:70:b7:81:31:f7:07:28:e1:fe:47:92:5b:
+                    d1:67
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5E:72:8E:7C:0B:A6:A7:E8:2C:3E:36:CA:37:EF:8E:4E:46:CB:97:34
+                18:BB:48:9D:7A:DD:AC:7C:1C:48:E6:9F:2F:6C:71:70:9A:AC:88:E0
             X509v3 Authority Key Identifier: 
-                keyid:DF:46:5C:25:13:E9:22:B2:C9:E4:1A:32:22:C4:97:1F:E6:0C:55:AA
+                keyid:AE:58:4F:6B:06:2B:1C:F3:4E:53:E9:9C:0B:DC:72:ED:3F:F5:55:CF
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         15:7a:35:37:ba:ff:11:3b:c0:ad:82:51:d0:e9:23:50:77:06:
-         56:e0:84:94:2d:e4:76:94:d5:af:65:26:26:06:77:f2:6c:03:
-         f4:77:6c:a3:ba:92:26:c7:a0:ea:24:06:98:78:18:24:70:44:
-         08:03:d0:ef:0b:db:d9:f2:3d:35:38:17:41:69:46:62:1a:af:
-         a7:44:be:1d:27:02:b3:79:1a:30:ab:06:79:6a:bd:3f:72:21:
-         f2:34:47:07:ef:08:69:ae:40:1f:61:68:a7:a8:a8:5c:85:6e:
-         39:61:39:ad:8a:3a:a5:d8:64:94:bd:e2:dc:1f:68:45:f0:2c:
-         bf:08:d0:74:75:1c:80:30:86:87:b0:f4:eb:69:e8:16:52:45:
-         bc:c3:3b:08:c9:90:9f:f8:c9:01:9b:2f:29:2b:dc:2c:af:59:
-         cb:3e:07:8a:e7:e0:ca:64:2a:43:39:bf:a5:0e:d6:14:08:e9:
-         9a:c1:76:7d:fb:a1:39:05:a6:43:0a:ba:ed:70:5b:f5:b8:ac:
-         15:91:a4:37:24:c7:1e:d2:69:41:08:e2:2f:76:bb:e1:f8:b9:
-         0d:7a:a9:57:af:25:8c:5c:73:f2:d8:2b:a6:23:c8:42:b4:28:
-         ed:fe:79:2b:11:4a:2e:3c:ef:3f:13:e6:51:68:d8:1a:c3:3b:
-         b3:22:62:c9
+         8c:84:99:c3:fd:20:b8:c9:71:c6:9e:45:cd:e5:4f:2c:7d:6e:
+         a4:1e:c3:43:82:86:09:09:ab:a6:14:50:76:2a:31:46:70:91:
+         f0:5d:a9:88:c9:e2:d9:c5:29:05:54:f5:60:1c:f2:43:b8:b3:
+         b1:d5:ec:64:44:08:7a:d5:df:88:db:4b:bc:9f:eb:d1:02:fe:
+         98:8c:d0:a6:4d:1b:4d:5e:a0:3a:81:c2:87:79:51:5a:50:c2:
+         a8:c4:38:64:76:ec:e5:14:29:98:18:33:8a:ea:e9:2c:23:f0:
+         c3:c3:d5:f6:96:e4:e2:b5:3d:c7:0d:a5:36:32:a7:49:88:52:
+         22:6a:dc:2a:28:5c:98:67:c4:b3:e6:b3:37:e9:71:98:bf:09:
+         15:50:00:e0:f5:cb:27:b1:ce:d6:e4:9f:24:61:a0:90:48:84:
+         17:97:72:0e:07:0e:4b:37:d4:36:3a:53:78:2d:44:7b:98:bd:
+         28:fd:72:a4:6e:01:23:0e:26:06:c2:dd:72:a7:76:fe:95:61:
+         18:44:d9:95:40:d0:f2:73:61:fe:43:30:33:52:3d:04:62:4c:
+         1d:fe:48:45:0e:e6:23:c8:a3:74:b0:05:c4:94:3d:3a:e3:f4:
+         a8:53:c8:66:85:c8:69:c3:7a:37:5d:4d:fd:92:c5:b6:18:8a:
+         77:94:3e:f7
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVxXN+
-qY+fJaOxnynGLtayPVukEAhTQPeReUWW0GaFhepW5tsH/YId4+YR8toTZEW/xuGn
-TNop57ovJ9jNWT1po6/WZEs+pBIHXdR9B4VtnJ3+/Y//dLPJyYZkfO7KdBsvP3w3
-i9n6BQo6m5NF0I0WPnrOC7uPG8wVS6J2CPX74JjMHaQawfUjsCgc/l+kJGhZ/B1j
-vGCaphYs2w1mndduE2pTjFthpz+fvsgq+c7qR9LSG5Xer12wOT1x9b5fgL07Pi55
-6KLenCva5YjNTpzPzbyILsyeO+RSK0kPMZA/FQ21aOpefm75bLpXvUEzUSdm+Ss/
-rnyHB6EZpQ+6vfi3AgMBAAGjgekwgeYwHQYDVR0OBBYEFF5yjnwLpqfoLD42yjfv
-jk5Gy5c0MB8GA1UdIwQYMBaAFN9GXCUT6SKyyeQaMiLElx/mDFWqMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmY5n3
+JHQ/KjbBEuPoaPiqODl27+1mBcOZ2S17ctBXolL7d8Ep11MU6KR0fCohC10gvhjl
+f3Vwc/OJ1Oc8VPYlQa5ZSIjFEMiponXgQ7Xiu1VyiapS29VLiOV9toBL+yy9V/Rl
+V3I6HC+TpN4GdHfM4iG9CrMSwiw8KoQnrj9KI6M5P7HM2OGE3bCRqrpYwu1iyIy0
+tf+CkpOQW2jtfzBS2w6IF47rNyG4KjccfxOKvkBWrMwfpA3XR6u5dg8WxHCz40+a
+jYDciLHjvsEOYgHba/SP2UKEAYUafQzFCQU+7dkKRaYKNH6hiEjz/8yF69TCKXC3
+gTH3Byjh/keSW9FnAgMBAAGjgekwgeYwHQYDVR0OBBYEFBi7SJ163ax8HEjmny9s
+cXCarIjgMB8GA1UdIwQYMBaAFK5YT2sGKxzzTlPpnAvccu0/9VXPMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAFXo1N7r/ETvArYJR0Okj
-UHcGVuCElC3kdpTVr2UmJgZ38mwD9Hdso7qSJseg6iQGmHgYJHBECAPQ7wvb2fI9
-NTgXQWlGYhqvp0S+HScCs3kaMKsGeWq9P3Ih8jRHB+8Iaa5AH2Fop6ioXIVuOWE5
-rYo6pdhklL3i3B9oRfAsvwjQdHUcgDCGh7D062noFlJFvMM7CMmQn/jJAZsvKSvc
-LK9Zyz4HiufgymQqQzm/pQ7WFAjpmsF2ffuhOQWmQwq67XBb9bisFZGkNyTHHtJp
-QQjiL3a74fi5DXqpV68ljFxz8tgrpiPIQrQo7f55KxFKLjzvPxPmUWjYGsM7syJi
-yQ==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjISZw/0guMlxxp5FzeVP
+LH1upB7DQ4KGCQmrphRQdioxRnCR8F2piMni2cUpBVT1YBzyQ7izsdXsZEQIetXf
+iNtLvJ/r0QL+mIzQpk0bTV6gOoHCh3lRWlDCqMQ4ZHbs5RQpmBgziurpLCPww8PV
+9pbk4rU9xw2lNjKnSYhSImrcKihcmGfEs+azN+lxmL8JFVAA4PXLJ7HO1uSfJGGg
+kEiEF5dyDgcOSzfUNjpTeC1Ee5i9KP1ypG4BIw4mBsLdcqd2/pVhGETZlUDQ8nNh
+/kMwM1I9BGJMHf5IRQ7mI8ijdLAFxJQ9OuP0qFPIZoXIacN6N11N/ZLFthiKd5Q+
+9w==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ba:c2:3e:70:32:82:15:bd:6f:24:c3:e0:9f:a9:
-                    af:46:01:cb:23:03:07:17:d8:73:73:d0:8d:46:88:
-                    3f:9b:40:30:ea:cb:76:d1:dc:e5:79:c6:ed:5e:94:
-                    68:49:fe:8e:be:ff:74:b4:b1:a0:fd:ec:3f:4c:f5:
-                    26:40:97:d8:b2:fd:a8:e1:9a:1e:47:48:58:8a:39:
-                    0f:a8:53:76:1d:d8:55:b7:ff:15:7a:1a:28:70:a7:
-                    50:6f:f7:2f:d8:dd:22:bf:08:32:82:66:33:fd:7d:
-                    df:55:7f:71:5b:bd:c0:c6:f4:cd:a4:52:30:a9:bd:
-                    a1:a3:61:e3:7a:93:40:a7:41:b3:10:43:0f:79:12:
-                    50:34:0a:a4:ad:07:53:e6:7a:b6:8c:a5:00:82:0c:
-                    9f:eb:c9:f8:51:68:2c:4e:3a:da:7e:7d:6d:15:b1:
-                    ff:37:dd:e6:25:cf:5e:8f:fe:b1:09:7e:f8:60:3b:
-                    20:3e:99:64:e1:9a:58:ee:01:28:71:cf:ac:dd:66:
-                    40:0d:d9:7b:85:8f:f2:35:90:2a:75:26:96:b4:3a:
-                    f2:ef:5c:06:f1:2c:ec:07:83:d6:23:a4:ab:f4:28:
-                    ad:1f:8d:cf:e2:d8:b9:1f:48:76:6f:7c:e7:8a:17:
-                    5b:b5:9b:ff:17:13:6e:f4:05:47:78:91:c7:7a:03:
-                    33:15
+                    00:c4:17:53:d2:54:6b:7a:03:d0:42:2c:6e:be:36:
+                    5d:2a:70:5e:60:ae:99:07:4f:2e:46:05:3e:c1:59:
+                    10:36:f4:30:2d:76:6d:3e:93:f1:f9:4a:c4:fe:07:
+                    5d:c5:54:0f:1f:80:ce:f2:3f:3c:d1:65:94:aa:6e:
+                    4d:f7:be:65:58:20:7d:26:c6:27:d6:26:65:15:66:
+                    8f:98:5b:e8:1e:d4:36:84:98:5d:4d:9d:42:52:cf:
+                    43:4b:bd:f9:f8:c2:b0:ff:17:1d:a5:24:73:03:16:
+                    2b:29:60:b7:66:7b:57:37:80:ab:11:9a:28:23:11:
+                    48:e5:e0:3a:d3:82:1a:22:7c:3c:60:0a:ed:e2:5a:
+                    27:7e:a7:15:76:5b:09:ad:39:5c:14:93:35:a2:da:
+                    3a:45:f7:9c:74:ac:24:64:ac:b8:5b:75:5e:5b:a8:
+                    12:f9:59:cb:73:6e:12:ac:c5:19:0b:f9:74:0b:62:
+                    e6:b5:b3:f6:9d:8a:3d:a1:a1:4b:39:f9:43:da:c7:
+                    a4:39:eb:82:89:ff:9d:d4:14:ed:54:cb:db:e1:9a:
+                    a3:40:dd:fc:85:af:c8:85:d7:95:c0:10:93:89:b0:
+                    15:e9:9f:3d:b9:e7:ff:65:5d:01:5d:1f:7b:a4:28:
+                    77:f1:0b:90:30:3c:19:63:b8:4e:b8:be:63:e0:dc:
+                    c0:47
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D0:3F:2D:C4:6A:01:B8:7A:61:4F:B0:35:18:E6:D0:F9:55:5D:7B:B7
+                75:F1:E7:70:61:AA:A2:4B:6E:22:4E:88:EF:F1:65:B6:BF:D8:6E:9F
             X509v3 Authority Key Identifier: 
-                keyid:D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                keyid:24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         44:69:05:6c:d0:10:da:90:f7:62:5f:8a:80:93:39:f0:ee:6f:
-         c5:18:df:47:40:d0:b4:73:8a:d6:68:7f:99:92:e4:34:bd:ef:
-         d7:c8:8c:d9:09:b1:24:06:86:ab:9f:58:1a:d3:38:73:9b:80:
-         f3:9b:a9:8c:db:ef:0d:94:54:91:45:04:42:9b:98:3c:fc:39:
-         53:85:36:1d:06:59:c5:1e:50:7c:1e:e0:ec:ad:d8:44:98:13:
-         a2:6b:bc:10:39:3e:3e:5b:3a:30:de:2a:a0:08:05:21:cd:d1:
-         57:50:05:c2:84:c3:e8:0d:69:59:76:3d:32:aa:9a:82:0d:59:
-         c6:1a:8e:fa:08:3c:18:08:b2:8b:f2:39:05:02:0e:af:7c:28:
-         7e:16:44:d8:b2:e0:32:19:d7:c5:54:4c:e9:87:e0:1f:30:73:
-         6a:2b:ef:9f:9d:5e:31:a6:02:39:9d:5b:e1:c5:b6:d1:cd:95:
-         ba:ee:5c:3a:97:58:49:ef:26:cf:e6:eb:72:47:5b:6e:f4:cc:
-         3b:1c:08:c7:2e:89:f6:91:ef:94:e3:33:83:7c:9b:d8:10:01:
-         d7:ac:0f:4c:c6:01:c7:0d:84:48:bd:a7:e8:4d:09:40:a8:b2:
-         f3:0a:21:71:74:0f:ab:ca:23:aa:99:80:6d:0c:42:73:14:00:
-         31:1e:67:51
+         93:6f:7e:73:91:01:cb:3b:1a:0e:6d:b7:25:f5:03:5d:49:76:
+         1f:46:68:c7:40:5e:c6:37:47:c5:27:2c:9a:c3:47:5c:f3:77:
+         7d:a1:d3:f2:db:7b:93:e4:de:92:ea:3b:1b:97:c7:f0:44:a1:
+         5a:0a:24:7f:a2:44:ac:39:52:55:01:12:f8:4e:85:a3:64:dd:
+         75:c0:4a:84:21:74:60:d4:97:d7:14:99:de:ca:c2:ce:b6:f4:
+         be:3d:ca:80:e7:fb:13:4e:b7:a2:9e:ff:2c:25:70:84:af:7d:
+         31:a9:6c:54:6f:a1:5a:3b:3b:67:8d:d9:f4:ff:47:b1:2c:e4:
+         9a:ca:b6:66:d1:df:71:ac:15:90:fd:f4:70:63:02:4a:ad:ee:
+         1b:65:55:df:60:4f:d6:68:1e:44:a3:ab:99:1c:39:fc:be:c6:
+         65:6a:7d:99:44:18:88:0d:34:1f:a0:fd:70:f1:ae:d4:9c:e7:
+         28:12:a7:bc:d5:6a:d8:b2:7a:5b:f5:e9:13:a0:08:6d:b6:85:
+         b3:9a:cd:f7:48:d3:56:1a:26:32:ac:5f:c0:75:4e:93:76:a3:
+         14:d7:31:5c:55:b2:4a:c4:f8:cf:ea:d2:38:18:fd:4b:57:f2:
+         f6:4b:66:90:28:6e:4d:4b:35:3b:bb:91:36:65:9f:24:19:74:
+         7e:f5:66:8e
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAusI+cDKC
-Fb1vJMPgn6mvRgHLIwMHF9hzc9CNRog/m0Aw6st20dzlecbtXpRoSf6Ovv90tLGg
-/ew/TPUmQJfYsv2o4ZoeR0hYijkPqFN2HdhVt/8VehoocKdQb/cv2N0ivwgygmYz
-/X3fVX9xW73AxvTNpFIwqb2ho2HjepNAp0GzEEMPeRJQNAqkrQdT5nq2jKUAggyf
-68n4UWgsTjrafn1tFbH/N93mJc9ej/6xCX74YDsgPplk4ZpY7gEocc+s3WZADdl7
-hY/yNZAqdSaWtDry71wG8SzsB4PWI6Sr9CitH43P4ti5H0h2b3znihdbtZv/FxNu
-9AVHeJHHegMzFQIDAQABo4HLMIHIMB0GA1UdDgQWBBTQPy3EagG4emFPsDUY5tD5
-VV17tzAfBgNVHSMEGDAWgBTU/4DdhtJTGFRls2KaB2e7IX0ZdzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxBdT0lRr
+egPQQixuvjZdKnBeYK6ZB08uRgU+wVkQNvQwLXZtPpPx+UrE/gddxVQPH4DO8j88
+0WWUqm5N975lWCB9JsYn1iZlFWaPmFvoHtQ2hJhdTZ1CUs9DS735+MKw/xcdpSRz
+AxYrKWC3ZntXN4CrEZooIxFI5eA604IaInw8YArt4lonfqcVdlsJrTlcFJM1oto6
+RfecdKwkZKy4W3VeW6gS+VnLc24SrMUZC/l0C2LmtbP2nYo9oaFLOflD2sekOeuC
+if+d1BTtVMvb4ZqjQN38ha/IhdeVwBCTibAV6Z89uef/ZV0BXR97pCh38QuQMDwZ
+Y7hOuL5j4NzARwIDAQABo4HLMIHIMB0GA1UdDgQWBBR18edwYaqiS24iTojv8WW2
+v9hunzAfBgNVHSMEGDAWgBQkiTik3pnBVtHBoSLDndxNbRrN8zA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AERpBWzQENqQ92JfioCTOfDub8UY30dA0LRzitZof5mS5DS979fIjNkJsSQGhquf
-WBrTOHObgPObqYzb7w2UVJFFBEKbmDz8OVOFNh0GWcUeUHwe4Oyt2ESYE6JrvBA5
-Pj5bOjDeKqAIBSHN0VdQBcKEw+gNaVl2PTKqmoINWcYajvoIPBgIsovyOQUCDq98
-KH4WRNiy4DIZ18VUTOmH4B8wc2or75+dXjGmAjmdW+HFttHNlbruXDqXWEnvJs/m
-63JHW270zDscCMcuifaR75TjM4N8m9gQAdesD0zGAccNhEi9p+hNCUCosvMKIXF0
-D6vKI6qZgG0MQnMUADEeZ1E=
+AJNvfnORAcs7Gg5ttyX1A11Jdh9GaMdAXsY3R8UnLJrDR1zzd32h0/Lbe5Pk3pLq
+OxuXx/BEoVoKJH+iRKw5UlUBEvhOhaNk3XXASoQhdGDUl9cUmd7Kws629L49yoDn
++xNOt6Ke/ywlcISvfTGpbFRvoVo7O2eN2fT/R7Es5JrKtmbR33GsFZD99HBjAkqt
+7htlVd9gT9ZoHkSjq5kcOfy+xmVqfZlEGIgNNB+g/XDxrtSc5ygSp7zVatiyelv1
+6ROgCG22hbOazfdI01YaJjKsX8B1TpN2oxTXMVxVskrE+M/q0jgY/UtX8vZLZpAo
+bk1LNTu7kTZlnyQZdH71Zo4=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:51:b0:c3:f3:b1:5d:6e:4a:c2:41:9e:b7:88:
-                    48:d3:62:d1:49:3a:0b:ab:c9:26:f3:8a:bb:ee:1e:
-                    b8:4a:cb:9a:47:3f:8c:87:a2:81:f5:91:05:7c:47:
-                    45:d6:5f:a1:7d:e7:dd:cd:33:eb:4e:90:65:be:31:
-                    d7:2d:98:03:45:48:03:03:72:8f:0f:43:3d:3a:ad:
-                    cf:bc:f5:f5:bb:7d:1d:94:1d:d4:2c:b6:3b:4a:68:
-                    9e:30:54:c2:c1:69:10:f8:7c:d5:73:ae:2f:22:65:
-                    94:5c:17:1e:41:eb:5a:10:80:6c:eb:04:1d:09:0e:
-                    79:51:71:ce:e7:4f:90:23:4f:84:b5:4e:97:70:79:
-                    eb:28:47:0a:8c:b8:43:a6:f5:df:4d:fd:44:46:18:
-                    06:97:6c:52:65:4a:89:25:af:73:6e:43:6a:93:b0:
-                    ec:29:97:63:a4:36:95:db:71:b6:61:c3:25:0d:3f:
-                    53:2f:de:d0:b4:16:c2:b6:70:3a:34:53:02:3d:50:
-                    eb:32:4a:22:62:3c:9a:74:da:b2:60:af:37:41:4c:
-                    c1:df:90:74:5a:ae:5d:a4:48:dd:1b:86:06:0f:cb:
-                    3e:e5:4d:ec:62:86:04:1a:cb:0f:2a:04:a0:45:d5:
-                    c1:79:9e:07:df:5d:2d:c3:0c:c4:57:0a:be:7e:41:
-                    43:3d
+                    00:d1:40:a2:a7:c5:41:34:03:46:71:64:b9:5d:aa:
+                    87:a9:1e:3a:0d:b2:48:77:25:11:e3:f0:78:f6:37:
+                    94:60:2e:05:90:8d:90:49:0a:c5:c8:c2:5e:3f:5f:
+                    46:e8:cd:f9:aa:6e:ae:64:cb:ea:16:b8:79:16:16:
+                    96:7e:7f:13:2a:6e:ce:90:58:00:ff:9f:ae:ba:23:
+                    d5:b7:8b:c3:93:55:bc:cc:af:8a:ff:96:a3:ee:25:
+                    44:77:11:91:ae:b5:0e:ab:66:b4:d6:99:ea:b6:f3:
+                    05:1d:a7:eb:e0:d9:55:66:dd:ac:00:a8:ae:63:24:
+                    a5:d3:4d:24:35:89:93:fb:34:73:69:0c:33:14:3a:
+                    45:5e:17:3a:81:7c:3b:02:b9:48:87:fc:c8:e6:36:
+                    5b:2f:c7:df:d5:c8:eb:b2:82:8b:c4:2f:b1:ce:b5:
+                    f4:1f:55:a0:54:cb:2d:26:b0:92:1e:3c:55:03:9a:
+                    54:83:95:91:39:1c:f5:6b:60:7b:63:ad:44:63:9a:
+                    46:27:87:c2:9a:7a:ca:78:dc:31:af:14:ef:a5:15:
+                    58:2f:6f:ce:e6:2d:8a:4b:af:98:cc:4d:4c:52:dc:
+                    c3:0f:39:a0:39:5e:24:33:e0:58:94:79:9d:48:f4:
+                    f5:7f:bb:d4:15:32:00:5f:64:4e:62:33:29:cc:50:
+                    6e:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
             X509v3 Authority Key Identifier: 
-                keyid:D4:FF:80:DD:86:D2:53:18:54:65:B3:62:9A:07:67:BB:21:7D:19:77
+                keyid:24:89:38:A4:DE:99:C1:56:D1:C1:A1:22:C3:9D:DC:4D:6D:1A:CD:F3
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         46:ee:68:7d:1f:94:16:70:57:11:6b:6b:18:96:45:c3:d7:17:
-         50:9b:f1:e6:b1:bf:ad:97:3f:ca:3e:75:37:4e:c6:b6:d3:68:
-         57:f5:59:a6:44:b4:3f:e5:fe:a3:05:65:02:f5:7c:dc:da:8e:
-         1f:2d:fb:9c:23:f0:c0:a6:fc:f5:f3:a9:80:f9:eb:64:f0:8b:
-         2a:f1:f5:68:8d:8c:c2:37:c4:8e:d5:bb:5b:e6:fb:ec:06:f9:
-         80:28:56:c2:de:9c:16:78:3f:a8:16:15:e9:26:72:8f:45:c3:
-         e7:d4:78:84:3c:b4:a0:72:5e:5d:09:d8:d1:7f:66:ca:74:d6:
-         26:c0:72:c0:2a:89:fa:b4:5f:fe:92:4f:01:97:0e:81:88:01:
-         6b:2e:ed:af:36:30:c7:62:fd:42:63:10:3f:c4:ad:eb:ee:c5:
-         fd:bc:57:08:0f:a3:0c:e5:8c:de:ab:05:b5:b4:e9:c9:d1:c8:
-         66:e2:ea:4a:b0:33:e5:a4:47:22:67:7c:70:e9:02:e0:22:75:
-         35:4a:39:0e:2c:27:e5:29:d6:d2:f5:39:c9:03:39:7a:35:f5:
-         ff:1d:88:8d:e1:be:6b:6b:c7:4c:0c:6d:02:d4:33:7a:f5:ea:
-         29:55:a9:79:94:bc:a3:01:64:4a:99:99:fc:c6:e5:38:a2:8f:
-         18:cc:e7:1f
+         2a:e0:34:e1:7b:4b:20:9b:64:ae:3a:e8:55:16:b4:a5:38:16:
+         a8:1a:77:4e:38:75:1f:0d:c0:09:9e:6a:33:69:5b:14:84:a8:
+         8d:04:35:e9:6c:47:c3:6f:8d:a2:99:93:bc:6e:c1:53:63:2f:
+         30:18:c4:57:1d:8f:b6:bf:5e:2f:24:b2:03:cb:c0:0d:bb:ec:
+         1b:80:c8:36:59:14:48:53:98:92:fb:77:7c:d8:c6:81:b2:28:
+         92:10:de:f3:a4:9e:73:d2:7c:fa:34:7a:f6:1a:22:5b:5d:c2:
+         e4:d1:8a:97:6b:2d:0e:88:85:3b:c6:8a:0a:87:84:76:9c:f9:
+         68:fe:bd:06:13:08:f8:34:8f:af:41:c2:2e:30:3a:1f:ba:dc:
+         32:99:a5:84:e0:07:5d:1c:b6:20:90:79:a5:6e:28:06:d9:9b:
+         ee:86:c0:55:2b:a1:f4:6b:1f:ac:8c:d5:98:58:47:2a:cf:0e:
+         9e:29:62:73:c8:1c:df:cc:02:69:0c:21:0d:cb:61:54:2d:c7:
+         88:51:70:9c:67:0b:0d:64:a0:6e:e0:a9:21:5a:cf:cc:c1:53:
+         0c:f7:39:bc:4a:a6:9c:f2:dc:cc:70:b7:88:be:53:14:0d:6a:
+         0f:51:b8:63:0d:c8:57:16:2f:07:41:11:7c:b0:6a:cf:9b:ef:
+         8a:bc:ea:e6
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhRsMPzsV1uSsJBnreI
-SNNi0Uk6C6vJJvOKu+4euErLmkc/jIeigfWRBXxHRdZfoX3n3c0z606QZb4x1y2Y
-A0VIAwNyjw9DPTqtz7z19bt9HZQd1Cy2O0ponjBUwsFpEPh81XOuLyJllFwXHkHr
-WhCAbOsEHQkOeVFxzudPkCNPhLVOl3B56yhHCoy4Q6b13039REYYBpdsUmVKiSWv
-c25DapOw7CmXY6Q2ldtxtmHDJQ0/Uy/e0LQWwrZwOjRTAj1Q6zJKImI8mnTasmCv
-N0FMwd+QdFquXaRI3RuGBg/LPuVN7GKGBBrLDyoEoEXVwXmeB99dLcMMxFcKvn5B
-Qz0CAwEAAaOByzCByDAdBgNVHQ4EFgQU1P+A3YbSUxhUZbNimgdnuyF9GXcwHwYD
-VR0jBBgwFoAU1P+A3YbSUxhUZbNimgdnuyF9GXcwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFAoqfFQTQDRnFkuV2q
+h6keOg2ySHclEePwePY3lGAuBZCNkEkKxcjCXj9fRujN+apurmTL6ha4eRYWln5/
+EypuzpBYAP+frroj1beLw5NVvMyviv+Wo+4lRHcRka61DqtmtNaZ6rbzBR2n6+DZ
+VWbdrACormMkpdNNJDWJk/s0c2kMMxQ6RV4XOoF8OwK5SIf8yOY2Wy/H39XI67KC
+i8Qvsc619B9VoFTLLSawkh48VQOaVIOVkTkc9Wtge2OtRGOaRieHwpp6ynjcMa8U
+76UVWC9vzuYtikuvmMxNTFLcww85oDleJDPgWJR5nUj09X+71BUyAF9kTmIzKcxQ
+bqECAwEAAaOByzCByDAdBgNVHQ4EFgQUJIk4pN6ZwVbRwaEiw53cTW0azfMwHwYD
+VR0jBBgwFoAUJIk4pN6ZwVbRwaEiw53cTW0azfMwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBG7mh9H5QW
-cFcRa2sYlkXD1xdQm/Hmsb+tlz/KPnU3Tsa202hX9VmmRLQ/5f6jBWUC9Xzc2o4f
-LfucI/DApvz186mA+etk8Isq8fVojYzCN8SO1btb5vvsBvmAKFbC3pwWeD+oFhXp
-JnKPRcPn1HiEPLSgcl5dCdjRf2bKdNYmwHLAKon6tF/+kk8Blw6BiAFrLu2vNjDH
-Yv1CYxA/xK3r7sX9vFcID6MM5YzeqwW1tOnJ0chm4upKsDPlpEciZ3xw6QLgInU1
-SjkOLCflKdbS9TnJAzl6NfX/HYiN4b5ra8dMDG0C1DN69eopVal5lLyjAWRKmZn8
-xuU4oo8YzOcf
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAq4DThe0sg
+m2SuOuhVFrSlOBaoGndOOHUfDcAJnmozaVsUhKiNBDXpbEfDb42imZO8bsFTYy8w
+GMRXHY+2v14vJLIDy8ANu+wbgMg2WRRIU5iS+3d82MaBsiiSEN7zpJ5z0nz6NHr2
+GiJbXcLk0YqXay0OiIU7xooKh4R2nPlo/r0GEwj4NI+vQcIuMDofutwymaWE4Add
+HLYgkHmlbigG2ZvuhsBVK6H0ax+sjNWYWEcqzw6eKWJzyBzfzAJpDCENy2FULceI
+UXCcZwsNZKBu4KkhWs/MwVMM9zm8Sqac8tzMcLeIvlMUDWoPUbhjDchXFi8HQRF8
+sGrPm++KvOrm
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,6 +282,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=0 (CN=Target) -----
 ERROR: Signature verification failed
 ERROR: VerifySignedData failed
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
index e6fccf5..aa70aef 100644
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e2:dd:d4:9d:10:ff:0e:87:2d:ba:eb:b5:34:02:
-                    80:b9:83:16:1c:74:27:2b:f1:71:fe:5a:15:ad:26:
-                    7c:80:a6:06:a3:5c:81:30:5f:63:4b:7b:41:c4:2f:
-                    ad:6b:31:21:5f:23:1e:a3:6b:41:36:88:6e:cc:97:
-                    5d:ad:67:8e:c5:1c:8f:e4:d0:e5:2b:02:da:e6:7d:
-                    65:6b:a8:fd:90:78:aa:0a:85:31:7c:4e:92:0e:af:
-                    45:00:bb:48:20:22:0e:24:d4:a3:2a:fd:d7:3f:05:
-                    21:70:18:1e:a0:7b:24:25:d9:e5:63:20:dd:59:73:
-                    27:24:9c:a4:4e:8f:93:5d:3c:27:b2:93:7d:1d:15:
-                    09:28:59:f3:70:55:8b:7f:f8:5d:69:0e:3a:0c:a4:
-                    54:7c:32:d4:0e:d4:0b:58:c1:12:74:8a:b6:38:b0:
-                    1d:0e:b2:8e:18:29:ae:8f:75:7b:f3:48:c5:2e:aa:
-                    af:e4:0a:a0:fd:c8:8e:fb:a6:17:28:21:36:2e:5d:
-                    20:b4:21:83:a2:6d:7a:ec:7a:14:24:eb:99:90:0e:
-                    a0:af:4f:8d:f9:11:36:01:3a:8f:18:4e:15:d4:fe:
-                    12:65:f4:af:11:00:f0:4f:86:11:f3:7c:f6:5d:7b:
-                    28:5c:4f:b1:49:68:3b:de:17:2d:6a:5a:09:5e:1d:
-                    8d:29
+                    00:b9:2c:8d:95:c6:27:02:ce:a2:d2:00:96:04:7e:
+                    f5:b9:10:03:36:01:4a:9a:29:ba:7a:0d:8b:45:c8:
+                    e8:2a:11:ad:c5:05:30:37:88:5e:94:90:04:71:cd:
+                    e0:9a:f0:4d:35:36:94:81:e5:26:fa:d1:8b:90:4b:
+                    8f:95:39:7d:05:be:98:c4:08:a6:41:8b:9b:05:7a:
+                    8f:d1:a3:fe:94:de:0b:21:39:67:eb:fd:ea:49:9e:
+                    ed:07:61:1c:67:d3:7b:7b:56:5c:e3:c8:4d:04:ee:
+                    55:ee:bd:32:c7:00:47:cf:58:f2:30:07:a7:16:28:
+                    8e:42:b1:4d:60:5f:bf:bf:dc:f7:fe:c7:f5:e1:62:
+                    3c:e7:2b:03:c0:06:c4:7a:f6:cd:18:ad:77:f9:20:
+                    dc:8f:6f:d8:01:96:9f:9d:a5:4c:f7:a4:9d:e8:f2:
+                    0d:0b:65:90:b2:b6:70:d5:c7:59:79:7c:a3:9a:f4:
+                    3a:9f:6c:be:f8:80:7c:1b:f7:3e:2f:87:9a:0a:88:
+                    0c:97:18:ec:9b:b8:c2:58:7e:69:ca:3b:15:15:05:
+                    8e:53:9d:57:dc:b2:c3:a6:6d:ee:6e:ac:c6:b7:bf:
+                    90:e1:d9:a9:ba:d6:e6:cd:b7:16:7e:71:1f:cb:17:
+                    50:8d:fb:07:9d:de:a4:85:18:ad:e4:bf:5d:61:99:
+                    5b:d7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CF:A5:99:53:C2:5B:C6:BD:10:84:1E:39:95:94:A2:01:79:D4:DA:DD
+                8F:4D:BE:5B:BD:9D:C2:F2:F1:42:C8:5C:BF:6F:CE:06:D5:DD:54:53
             X509v3 Authority Key Identifier: 
-                keyid:A3:6A:AF:46:74:A6:CD:26:44:76:D1:81:2A:03:CE:B7:51:58:33:29
+                keyid:32:22:10:47:EB:DD:97:C7:8C:D2:2A:73:D0:4A:18:4D:A4:0A:B2:A6
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         1c:9c:e2:fa:bd:20:4e:a4:91:63:8d:46:7e:10:1c:d1:ce:5a:
-         c0:dc:cb:8f:c9:fa:54:69:3d:e8:4b:45:a8:34:3d:fb:1b:fe:
-         8a:08:ce:1c:d3:37:cd:d3:c6:76:41:f4:88:9d:4a:cc:72:45:
-         00:bf:5f:11:02:49:a5:e7:f4:69:17:ea:ac:8c:9d:75:cb:2e:
-         35:c7:77:2a:b5:ee:13:aa:ad:84:48:24:77:7d:8b:0b:98:22:
-         7b:2e:36:2f:41:de:ec:4c:37:96:b2:5d:ce:f1:bc:d9:62:ec:
-         5c:07:1c:10:8d:65:1a:09:74:a4:f9:d5:5e:c1:06:f7:7c:b2:
-         ae:86:74:04:8f:43:b5:7f:de:9e:9c:10:5e:78:5b:a4:05:de:
-         d8:9a:33:8d:62:23:a9:3c:e8:6a:ad:5d:d9:f1:5b:9f:34:d8:
-         4a:56:c3:76:1d:9e:d8:05:95:a8:65:00:7a:ad:bd:3d:18:94:
-         f8:07:50:cc:11:39:05:e1:13:a0:9c:8d:17:41:79:76:77:85:
-         b7:6a:c3:bd:db:ee:fe:7e:46:1b:08:e0:05:e4:c5:78:77:f2:
-         49:b1:02:2c:df:d0:f5:ce:76:f6:63:14:65:f8:df:22:2c:fc:
-         fa:9c:2b:91:32:39:92:8b:31:a7:cf:2a:23:e1:43:ea:fd:ff:
-         f2:d7:b1:f7
+         a9:e1:1a:0f:10:f0:2d:fa:8b:06:ae:a5:5e:0f:af:4d:3f:76:
+         e9:74:6b:7b:85:ff:c6:bc:ba:b0:82:15:a3:05:b1:f5:78:16:
+         c9:12:88:88:27:54:1a:f9:ee:8d:29:2b:17:86:2f:62:8b:ba:
+         8b:73:3b:fa:36:5e:71:fd:c6:9a:9a:52:85:2c:0e:4e:b5:ee:
+         79:75:6e:d0:55:79:ea:8b:72:6f:89:db:98:4a:f8:74:3a:a9:
+         b3:3a:48:d7:59:df:bc:2c:e5:08:1d:a7:1b:ae:5e:11:a4:42:
+         ec:42:c7:e7:b1:8d:52:1e:d9:d3:e5:be:e2:33:b0:df:a4:eb:
+         d4:77:bc:95:0e:ac:9b:f4:39:0c:28:e6:55:86:8a:6d:f6:c9:
+         54:97:59:63:22:d3:0e:02:fc:15:c8:94:e2:61:4f:bc:5f:2f:
+         04:fb:e6:91:5d:ed:7b:e5:29:d2:d7:56:2b:5c:2e:87:6a:3f:
+         ac:af:7e:a6:d0:f4:2d:fe:73:cd:b0:af:ce:93:8b:75:93:07:
+         d8:e9:0d:f2:34:fe:37:75:b7:c2:30:6b:20:5f:e3:5c:92:73:
+         03:8b:38:fe:6a:b8:df:20:86:54:14:0c:de:75:18:cb:87:ce:
+         64:06:10:6b:09:83:0a:8d:59:e3:9b:fb:09:51:ea:08:88:d2:
+         61:9e:c9:90
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDi3dSd
-EP8Ohy2667U0AoC5gxYcdCcr8XH+WhWtJnyApgajXIEwX2NLe0HEL61rMSFfIx6j
-a0E2iG7Ml12tZ47FHI/k0OUrAtrmfWVrqP2QeKoKhTF8TpIOr0UAu0ggIg4k1KMq
-/dc/BSFwGB6geyQl2eVjIN1ZcycknKROj5NdPCeyk30dFQkoWfNwVYt/+F1pDjoM
-pFR8MtQO1AtYwRJ0irY4sB0Oso4YKa6PdXvzSMUuqq/kCqD9yI77phcoITYuXSC0
-IYOibXrsehQk65mQDqCvT435ETYBOo8YThXU/hJl9K8RAPBPhhHzfPZdeyhcT7FJ
-aDveFy1qWgleHY0pAgMBAAGjgekwgeYwHQYDVR0OBBYEFM+lmVPCW8a9EIQeOZWU
-ogF51NrdMB8GA1UdIwQYMBaAFKNqr0Z0ps0mRHbRgSoDzrdRWDMpMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5LI2V
+xicCzqLSAJYEfvW5EAM2AUqaKbp6DYtFyOgqEa3FBTA3iF6UkARxzeCa8E01NpSB
+5Sb60YuQS4+VOX0FvpjECKZBi5sFeo/Ro/6U3gshOWfr/epJnu0HYRxn03t7Vlzj
+yE0E7lXuvTLHAEfPWPIwB6cWKI5CsU1gX7+/3Pf+x/XhYjznKwPABsR69s0YrXf5
+INyPb9gBlp+dpUz3pJ3o8g0LZZCytnDVx1l5fKOa9DqfbL74gHwb9z4vh5oKiAyX
+GOybuMJYfmnKOxUVBY5TnVfcssOmbe5urMa3v5Dh2am61ubNtxZ+cR/LF1CN+wed
+3qSFGK3kv11hmVvXAgMBAAGjgekwgeYwHQYDVR0OBBYEFI9Nvlu9ncLy8ULIXL9v
+zgbV3VRTMB8GA1UdIwQYMBaAFDIiEEfr3ZfHjNIqc9BKGE2kCrKmMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAHJzi+r0gTqSRY41GfhAc
-0c5awNzLj8n6VGk96EtFqDQ9+xv+igjOHNM3zdPGdkH0iJ1KzHJFAL9fEQJJpef0
-aRfqrIyddcsuNcd3KrXuE6qthEgkd32LC5giey42L0He7Ew3lrJdzvG82WLsXAcc
-EI1lGgl0pPnVXsEG93yyroZ0BI9DtX/enpwQXnhbpAXe2JozjWIjqTzoaq1d2fFb
-nzTYSlbDdh2e2AWVqGUAeq29PRiU+AdQzBE5BeEToJyNF0F5dneFt2rDvdvu/n5G
-GwjgBeTFeHfySbECLN/Q9c529mMUZfjfIiz8+pwrkTI5kosxp88qI+FD6v3/8tex
-9w==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAqeEaDxDwLfqLBq6lXg+v
+TT926XRre4X/xry6sIIVowWx9XgWyRKIiCdUGvnujSkrF4YvYou6i3M7+jZecf3G
+mppShSwOTrXueXVu0FV56otyb4nbmEr4dDqpszpI11nfvCzlCB2nG65eEaRC7ELH
+57GNUh7Z0+W+4jOw36Tr1He8lQ6sm/Q5DCjmVYaKbfbJVJdZYyLTDgL8FciU4mFP
+vF8vBPvmkV3te+Up0tdWK1wuh2o/rK9+ptD0Lf5zzbCvzpOLdZMH2OkN8jT+N3W3
+wjBrIF/jXJJzA4s4/mq43yCGVBQM3nUYy4fOZAYQawmDCo1Z45v7CVHqCIjSYZ7J
+kA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cc:28:1f:e1:1a:a3:da:34:65:45:b7:bb:c1:3b:
-                    c8:3b:92:22:e1:fb:0a:82:86:f8:0c:41:c4:8b:33:
-                    cd:b7:17:55:25:9c:b6:09:98:cb:ed:6d:81:99:88:
-                    76:c7:ba:11:ec:af:61:b6:73:cf:7c:5a:5c:5f:08:
-                    2e:e4:6f:d8:74:b0:8f:11:8f:6d:56:cd:03:2e:70:
-                    f7:59:59:c9:a7:0c:aa:06:d2:f3:a2:99:a1:1a:a2:
-                    56:b8:88:17:13:d5:de:ee:e8:f8:b5:82:23:15:62:
-                    18:c9:68:02:70:3d:d2:b4:90:4b:28:87:31:ad:b7:
-                    4a:9c:07:b5:ea:52:fd:66:dd:15:64:d7:88:25:e1:
-                    92:0b:77:86:af:73:d8:3b:34:aa:02:bf:8d:a5:06:
-                    50:55:2d:55:bc:bb:ca:01:1b:c3:5d:8d:62:35:b2:
-                    64:cd:4b:70:61:cc:cd:85:6f:50:4a:a2:41:d4:5a:
-                    a5:30:aa:32:3e:50:02:67:aa:99:ee:24:c7:7b:f8:
-                    fd:54:23:3a:4a:b7:67:67:2d:f7:30:4f:b4:d0:28:
-                    a7:f9:64:5b:d8:d9:20:c2:a9:75:ed:0b:ff:b6:f1:
-                    75:bc:3b:be:58:da:f6:93:6c:4d:ba:15:cd:ce:4c:
-                    de:8f:22:89:d2:ac:15:6d:60:da:b3:8b:5a:ea:e6:
-                    ba:75
+                    00:e8:a1:9b:a4:11:54:c2:c3:be:56:99:ba:f9:e9:
+                    65:30:d5:35:55:27:f8:16:41:41:e1:8f:fb:f5:d8:
+                    31:65:4e:a0:30:f0:51:d5:fb:5f:cd:6d:b5:e6:e6:
+                    2c:b5:35:1d:d4:c9:06:93:cb:85:6d:f8:f9:e2:a3:
+                    07:74:e5:97:7a:e6:49:dc:6c:26:1f:2d:67:7c:e3:
+                    77:e8:fd:3b:91:ab:64:ef:6c:8a:64:90:dd:72:c7:
+                    76:35:64:ab:66:0b:03:83:bc:23:80:a4:04:ea:8d:
+                    b7:23:f1:f6:ca:f2:46:f1:bf:da:ce:58:06:d4:08:
+                    a9:de:12:57:cc:68:99:0f:d4:0a:8b:ea:61:ce:f3:
+                    7c:6a:4e:3d:95:92:ef:9c:be:43:57:ae:a3:3c:9f:
+                    6c:a7:4a:16:c4:3e:6a:05:e2:e0:a4:b9:05:a9:ce:
+                    e5:cf:cd:d1:e5:7b:fe:e9:89:3d:49:9e:b2:85:00:
+                    18:5b:58:54:bd:4c:3e:b8:54:f0:13:27:e4:2a:e4:
+                    22:41:63:a7:4c:47:d6:e0:80:38:09:50:8d:97:b4:
+                    d6:f9:35:67:1f:e1:ee:26:12:a9:8a:77:bc:92:96:
+                    d3:71:a0:c4:eb:94:2a:9b:a2:8b:e6:08:8d:e1:58:
+                    e6:ba:48:6b:6b:d6:b5:e5:31:67:7c:1d:7b:3d:92:
+                    a2:5d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A3:6A:AF:46:74:A6:CD:26:44:76:D1:81:2A:03:CE:B7:51:58:33:29
+                32:22:10:47:EB:DD:97:C7:8C:D2:2A:73:D0:4A:18:4D:A4:0A:B2:A6
             X509v3 Authority Key Identifier: 
-                keyid:1E:88:21:E6:C7:6E:DC:76:90:45:43:56:DD:DA:B3:5F:50:3D:CA:BB
+                keyid:EE:56:5C:40:82:7C:4B:4F:83:C7:A6:2E:07:25:AB:45:D4:09:A7:B7
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         76:a9:bf:ab:a6:23:d0:73:52:0f:ac:fb:15:27:2a:ac:cb:2a:
-         99:80:f2:d7:29:ca:e7:5b:68:72:53:df:ea:c7:fb:f6:cb:c4:
-         56:af:e1:95:ec:d7:19:b1:94:42:19:d3:71:6f:8b:19:08:46:
-         0b:ac:05:e3:b2:cb:81:d5:78:37:92:0b:77:75:73:b0:78:0b:
-         2f:b0:ae:a9:39:80:fa:f1:26:62:28:73:18:c9:33:f8:db:1b:
-         90:20:54:a8:18:fd:50:4f:63:3c:4f:a7:6e:aa:11:7c:07:f4:
-         7c:ad:84:fd:a0:f2:d8:63:84:be:c9:ed:b6:c1:2d:2e:23:8f:
-         7e:5f:e3:63:46:89:1f:56:a4:ea:e4:af:85:62:77:29:d6:ce:
-         3b:27:69:7b:2f:be:ef:ec:56:59:a8:ea:cf:b9:a0:1d:07:43:
-         01:84:0e:37:fd:6b:95:39:7e:be:57:9d:33:89:ed:5d:5d:6a:
-         f8:32:3d:59:1b:9a:0c:1c:46:70:80:57:ba:30:6d:a6:b0:70:
-         de:aa:9a:33:bf:5b:ae:33:f3:ee:4d:92:b9:23:22:99:f4:81:
-         08:7f:ef:4f:8b:37:ae:27:4c:9b:6d:b5:ac:62:8d:7d:b2:7e:
-         2b:89:dc:eb:5d:14:c9:f6:64:b0:cd:5b:4b:38:f1:b3:58:b5:
-         07:5d:1a:d9
+         29:cf:6e:f8:a7:1a:6f:71:a2:fe:a7:cd:2d:41:31:73:68:df:
+         08:3e:72:3e:45:67:8b:b2:4c:4c:dd:45:3b:4e:64:78:e8:84:
+         54:ac:e7:0b:c6:87:66:ad:cf:b5:83:7d:c0:3b:7c:b7:05:8d:
+         08:23:1e:7c:a5:f9:49:6e:f5:b3:2d:1c:db:79:cc:9c:da:6a:
+         b4:dc:74:92:32:87:8b:04:6e:f2:81:87:dc:12:a3:bc:5c:1c:
+         0d:5d:3c:52:75:44:b1:fc:b0:d2:d4:0e:50:3e:41:e7:a4:0b:
+         bd:4f:f4:55:bb:56:f3:43:6d:e7:55:28:86:41:4d:aa:69:7e:
+         ea:39:1e:0e:6c:85:b3:2b:36:29:de:db:59:fd:70:19:7c:af:
+         80:20:9c:dd:d3:f0:21:f0:a9:66:5e:f0:b8:6e:9a:24:7f:17:
+         53:68:a1:24:b9:40:24:5a:c4:71:b2:a9:02:c8:c8:43:98:5f:
+         57:dd:a0:e5:de:3d:93:3d:71:76:a8:a4:09:da:7f:d2:31:49:
+         16:c5:55:f7:42:73:fd:57:1d:1f:b9:72:4c:0e:ec:8d:f2:92:
+         74:35:dd:28:a6:18:2c:b0:30:6d:5f:c7:32:7f:f4:fa:40:da:
+         e0:5a:56:f0:7e:af:ea:e3:6a:d5:1c:10:b4:1b:ed:ee:d0:6e:
+         86:ac:e7:1f
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzCgf4Rqj
-2jRlRbe7wTvIO5Ii4fsKgob4DEHEizPNtxdVJZy2CZjL7W2BmYh2x7oR7K9htnPP
-fFpcXwgu5G/YdLCPEY9tVs0DLnD3WVnJpwyqBtLzopmhGqJWuIgXE9Xe7uj4tYIj
-FWIYyWgCcD3StJBLKIcxrbdKnAe16lL9Zt0VZNeIJeGSC3eGr3PYOzSqAr+NpQZQ
-VS1VvLvKARvDXY1iNbJkzUtwYczNhW9QSqJB1FqlMKoyPlACZ6qZ7iTHe/j9VCM6
-SrdnZy33ME+00Cin+WRb2Nkgwql17Qv/tvF1vDu+WNr2k2xNuhXNzkzejyKJ0qwV
-bWDas4ta6ua6dQIDAQABo4HLMIHIMB0GA1UdDgQWBBSjaq9GdKbNJkR20YEqA863
-UVgzKTAfBgNVHSMEGDAWgBQeiCHmx27cdpBFQ1bd2rNfUD3KuzA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6KGbpBFU
+wsO+Vpm6+ellMNU1VSf4FkFB4Y/79dgxZU6gMPBR1ftfzW215uYstTUd1MkGk8uF
+bfj54qMHdOWXeuZJ3GwmHy1nfON36P07katk72yKZJDdcsd2NWSrZgsDg7wjgKQE
+6o23I/H2yvJG8b/azlgG1Aip3hJXzGiZD9QKi+phzvN8ak49lZLvnL5DV66jPJ9s
+p0oWxD5qBeLgpLkFqc7lz83R5Xv+6Yk9SZ6yhQAYW1hUvUw+uFTwEyfkKuQiQWOn
+TEfW4IA4CVCNl7TW+TVnH+HuJhKpine8kpbTcaDE65Qqm6KL5giN4Vjmukhra9a1
+5TFnfB17PZKiXQIDAQABo4HLMIHIMB0GA1UdDgQWBBQyIhBH692Xx4zSKnPQShhN
+pAqypjAfBgNVHSMEGDAWgBTuVlxAgnxLT4PHpi4HJatF1AmntzA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AHapv6umI9BzUg+s+xUnKqzLKpmA8tcpyudbaHJT3+rH+/bLxFav4ZXs1xmxlEIZ
-03FvixkIRgusBeOyy4HVeDeSC3d1c7B4Cy+wrqk5gPrxJmIocxjJM/jbG5AgVKgY
-/VBPYzxPp26qEXwH9HythP2g8thjhL7J7bbBLS4jj35f42NGiR9WpOrkr4VidynW
-zjsnaXsvvu/sVlmo6s+5oB0HQwGEDjf9a5U5fr5XnTOJ7V1davgyPVkbmgwcRnCA
-V7owbaawcN6qmjO/W64z8+5NkrkjIpn0gQh/70+LN64nTJtttaxijX2yfiuJ3Otd
-FMn2ZLDNW0s48bNYtQddGtk=
+ACnPbvinGm9xov6nzS1BMXNo3wg+cj5FZ4uyTEzdRTtOZHjohFSs5wvGh2atz7WD
+fcA7fLcFjQgjHnyl+Ulu9bMtHNt5zJzaarTcdJIyh4sEbvKBh9wSo7xcHA1dPFJ1
+RLH8sNLUDlA+QeekC71P9FW7VvNDbedVKIZBTappfuo5Hg5shbMrNine21n9cBl8
+r4AgnN3T8CHwqWZe8LhumiR/F1NooSS5QCRaxHGyqQLIyEOYX1fdoOXePZM9cXao
+pAnaf9IxSRbFVfdCc/1XHR+5ckwO7I3yknQ13SimGCywMG1fxzJ/9PpA2uBaVvB+
+r+rjatUcELQb7e7Qboas5x8=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d2:ee:04:1f:69:cf:1f:13:bf:0c:7f:3b:65:1c:
-                    e6:e3:c6:3d:be:86:27:a6:1a:98:44:9e:76:a7:c7:
-                    d0:fd:bc:0e:92:3e:f8:a1:6e:6a:ac:19:80:26:f8:
-                    96:2b:27:fb:c1:4f:10:24:6e:9f:53:0f:6e:52:0f:
-                    59:d1:af:cb:1f:bf:fa:92:6b:d8:bb:9d:5b:48:66:
-                    4f:8c:5b:72:98:f1:eb:62:59:23:d6:12:dc:de:2b:
-                    e2:78:61:23:2f:21:e5:f5:0b:5c:98:69:f5:15:73:
-                    3d:a6:9c:f5:c2:77:3b:a0:70:af:48:39:5c:21:ff:
-                    e2:19:34:82:a0:c4:77:6e:45:11:c6:0d:f3:74:a0:
-                    53:bc:d6:37:6e:17:62:83:43:0c:c8:6e:6a:a3:8f:
-                    83:b4:85:4f:8b:ce:12:55:f5:f1:80:7b:b3:6c:a1:
-                    3a:20:0a:7a:9d:7d:ef:35:e7:15:b4:7a:90:04:54:
-                    68:2d:7a:2d:72:88:99:e7:03:09:55:42:13:9c:55:
-                    e7:f4:3f:3c:66:ab:7c:3d:8b:50:c1:d2:2c:eb:d4:
-                    b8:f4:13:d1:a7:92:b2:97:29:76:94:a6:49:57:d2:
-                    55:17:86:f1:20:7c:a9:a5:7d:ba:48:cc:87:7e:b4:
-                    14:27:48:d1:72:c5:18:c2:f8:80:4c:ca:1b:92:94:
-                    5f:f3
+                    00:b6:17:f4:d1:20:ce:f9:54:24:bd:cd:af:13:01:
+                    3f:74:de:17:b7:c4:3f:40:1c:c9:3e:c5:df:41:ff:
+                    18:03:8f:0d:44:39:95:56:a6:07:3a:7b:8d:9d:a1:
+                    d5:d5:dc:bd:20:20:24:61:d0:22:93:bb:c0:ee:eb:
+                    09:79:8e:75:46:5d:92:32:17:32:97:90:eb:00:a0:
+                    49:da:30:00:b4:28:3e:ba:3a:60:2d:ee:78:55:e6:
+                    ed:dd:e7:2e:57:36:45:2e:fa:65:28:07:bd:bd:a4:
+                    17:4f:c5:44:4a:ea:68:2b:28:94:08:f9:7a:76:d6:
+                    51:82:f6:64:97:cf:4b:bc:a8:6c:d8:8b:ab:c7:7e:
+                    01:3c:11:f7:81:53:01:0d:65:e0:4b:68:5e:21:7b:
+                    46:c3:59:19:da:e5:fe:2c:ff:76:f9:bf:c3:99:8c:
+                    2e:d2:80:af:a5:06:2c:43:bb:c7:d1:34:0c:f5:d9:
+                    a7:7b:72:f2:d7:04:2d:8b:cc:8f:cf:3f:01:9e:89:
+                    ac:53:9b:87:e8:c3:1c:67:c5:c8:8b:26:65:51:3c:
+                    55:28:6a:77:c6:ca:60:27:81:40:5b:3d:a5:54:45:
+                    5d:cb:0e:e2:a7:21:21:97:ab:f7:ec:8d:1d:89:67:
+                    0f:cd:f4:50:18:44:66:2b:37:aa:17:11:73:23:f1:
+                    fd:61
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                1E:88:21:E6:C7:6E:DC:76:90:45:43:56:DD:DA:B3:5F:50:3D:CA:BB
+                EE:56:5C:40:82:7C:4B:4F:83:C7:A6:2E:07:25:AB:45:D4:09:A7:B7
             X509v3 Authority Key Identifier: 
-                keyid:EA:25:A5:9F:40:47:93:DB:8C:A0:6D:18:4A:47:09:4E:05:93:5F:34
+                keyid:2F:C9:20:3A:1C:39:32:BD:9D:54:DA:95:E2:B9:EA:9F:BA:2A:4B:08
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/UberRoot.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         6f:ff:d2:4d:45:07:b2:52:cf:4b:79:b4:37:b8:08:47:37:0e:
-         6d:db:82:92:14:fe:68:31:c1:cc:4a:6f:55:98:8d:8a:47:32:
-         d5:e4:08:16:eb:68:d2:44:06:55:ec:b7:8b:24:b5:91:c4:a8:
-         8d:5b:f5:b2:a3:55:a8:01:a7:ae:bc:a9:71:88:53:c9:81:93:
-         d8:73:42:4a:eb:fd:07:5a:ee:89:1f:2f:40:c7:45:24:46:1c:
-         70:58:12:48:e0:7c:8e:aa:fc:9e:4b:92:83:a0:2f:9a:7e:af:
-         18:67:38:18:16:d8:4f:69:11:2e:ee:11:30:a6:4f:41:65:a1:
-         1b:a1:0f:04:bd:ec:7a:e4:a5:d1:a3:fe:3c:6f:9a:f1:cd:85:
-         f3:f5:2d:05:20:08:ff:61:80:14:47:95:b9:00:39:df:dd:61:
-         55:2b:12:99:60:2a:d1:f4:54:c8:57:77:b3:0d:32:c3:b0:e3:
-         6b:fd:b4:12:91:bc:e7:a1:55:e3:9c:52:a5:7a:e5:a4:66:d0:
-         f9:a8:23:54:06:fd:73:53:0e:1a:3d:80:0b:6b:71:a0:da:e5:
-         c9:fc:6f:77:ca:87:c0:3b:24:0b:af:24:46:e6:5a:78:05:1b:
-         4f:c6:c2:bc:e3:b0:6f:6e:5a:7e:c3:d0:a5:7c:6d:48:66:bc:
-         69:7b:97:d2
+         52:11:69:e4:26:6d:c7:40:67:4c:58:ab:08:b3:a8:24:bc:f5:
+         f8:6e:0c:7f:b8:5d:19:18:82:48:1a:c9:7a:ae:39:04:9a:ae:
+         64:98:96:f8:d8:20:88:7b:bc:ba:fa:fe:cc:57:ce:84:9c:2e:
+         53:3c:59:af:61:94:26:a4:79:f1:4f:fe:9b:68:27:7e:f9:e3:
+         95:2a:60:f3:f2:54:47:c4:6e:20:97:f9:93:09:09:40:ed:73:
+         c1:b3:20:3b:9a:c4:85:bf:5b:08:fa:02:f6:fa:7e:fd:ef:5d:
+         24:4a:4d:24:c2:6a:25:5c:c8:5a:e1:e8:2e:5b:85:f7:f2:81:
+         85:6b:35:a7:b9:36:ce:62:4f:e9:82:5c:c0:e0:b9:1a:cc:e7:
+         6c:b0:ed:19:31:ff:de:e2:bd:d0:48:ab:d7:03:22:e4:ee:23:
+         b9:37:51:d3:9d:e6:f2:89:24:d1:07:5c:da:66:49:0b:e0:e8:
+         8d:62:ee:18:f3:01:9a:b0:a8:50:c4:2a:5d:71:56:5e:0e:3e:
+         74:24:8a:6e:19:0f:6e:f4:9a:9f:3e:f3:ee:8b:e6:28:85:f9:
+         cf:c6:b0:22:74:85:ed:64:db:a4:da:c2:ca:c9:44:13:04:7f:
+         ff:56:b4:bb:de:75:82:2e:d3:14:c3:99:32:c0:d7:c5:78:c3:
+         66:53:e4:80
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
 Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDS7gQfac8fE78M
-fztlHObjxj2+hiemGphEnnanx9D9vA6SPvihbmqsGYAm+JYrJ/vBTxAkbp9TD25S
-D1nRr8sfv/qSa9i7nVtIZk+MW3KY8etiWSPWEtzeK+J4YSMvIeX1C1yYafUVcz2m
-nPXCdzugcK9IOVwh/+IZNIKgxHduRRHGDfN0oFO81jduF2KDQwzIbmqjj4O0hU+L
-zhJV9fGAe7NsoTogCnqdfe815xW0epAEVGgtei1yiJnnAwlVQhOcVef0Pzxmq3w9
-i1DB0izr1Lj0E9GnkrKXKXaUpklX0lUXhvEgfKmlfbpIzId+tBQnSNFyxRjC+IBM
-yhuSlF/zAgMBAAGjgdMwgdAwHQYDVR0OBBYEFB6IIebHbtx2kEVDVt3as19QPcq7
-MB8GA1UdIwQYMBaAFOolpZ9AR5PbjKBtGEpHCU4Fk180MDsGCCsGAQUFBwEBBC8w
+BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2F/TRIM75VCS9
+za8TAT903he3xD9AHMk+xd9B/xgDjw1EOZVWpgc6e42dodXV3L0gICRh0CKTu8Du
+6wl5jnVGXZIyFzKXkOsAoEnaMAC0KD66OmAt7nhV5u3d5y5XNkUu+mUoB729pBdP
+xURK6mgrKJQI+Xp21lGC9mSXz0u8qGzYi6vHfgE8EfeBUwENZeBLaF4he0bDWRna
+5f4s/3b5v8OZjC7SgK+lBixDu8fRNAz12ad7cvLXBC2LzI/PPwGeiaxTm4fowxxn
+xciLJmVRPFUoanfGymAngUBbPaVURV3LDuKnISGXq/fsjR2JZw/N9FAYRGYrN6oX
+EXMj8f1hAgMBAAGjgdMwgdAwHQYDVR0OBBYEFO5WXECCfEtPg8emLgclq0XUCae3
+MB8GA1UdIwQYMBaAFC/JIDocOTK9nVTaleK56p+6KksIMDsGCCsGAQUFBwEBBC8w
 LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
 BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
 MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQBv/9JNRQeyUs9LebQ3uAhHNw5t24KSFP5oMcHMSm9VmI2KRzLV5AgW62jS
-RAZV7LeLJLWRxKiNW/Wyo1WoAaeuvKlxiFPJgZPYc0JK6/0HWu6JHy9Ax0UkRhxw
-WBJI4HyOqvyeS5KDoC+afq8YZzgYFthPaREu7hEwpk9BZaEboQ8Evex65KXRo/48
-b5rxzYXz9S0FIAj/YYAUR5W5ADnf3WFVKxKZYCrR9FTIV3ezDTLDsONr/bQSkbzn
-oVXjnFKleuWkZtD5qCNUBv1zUw4aPYALa3Gg2uXJ/G93yofAOyQLryRG5lp4BRtP
-xsK847Bvblp+w9ClfG1IZrxpe5fS
+A4IBAQBSEWnkJm3HQGdMWKsIs6gkvPX4bgx/uF0ZGIJIGsl6rjkEmq5kmJb42CCI
+e7y6+v7MV86EnC5TPFmvYZQmpHnxT/6baCd++eOVKmDz8lRHxG4gl/mTCQlA7XPB
+syA7msSFv1sI+gL2+n79710kSk0kwmolXMha4eguW4X38oGFazWnuTbOYk/pglzA
+4LkazOdssO0ZMf/e4r3QSKvXAyLk7iO5N1HTnebyiSTRB1zaZkkL4OiNYu4Y8wGa
+sKhQxCpdcVZeDj50JIpuGQ9u9JqfPvPui+YohfnPxrAidIXtZNuk2sLKyUQTBH//
+VrS73nWCLtMUw5kywNfFeMNmU+SA
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -281,3 +281,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
index 65bdb9c..8a0a8af 100644
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
+++ b/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
@@ -19,30 +19,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c8:04:f4:49:c8:99:48:ae:4b:8a:66:a6:19:29:
-                    b8:4f:52:af:29:88:34:6c:07:db:a9:a7:99:7e:09:
-                    bb:07:7a:7b:35:11:39:a5:4d:f9:54:e3:b7:8e:9c:
-                    66:37:62:bc:5f:2d:f4:1f:ba:b0:fd:4b:0b:a6:59:
-                    0c:94:d6:53:aa:7b:97:fc:bd:7f:72:e6:99:a7:04:
-                    a5:b2:02:67:3d:9f:cb:c1:2c:48:f7:a4:a3:d4:30:
-                    b6:8b:96:a9:ad:78:9c:1d:19:2a:28:ac:89:46:81:
-                    eb:32:f1:11:bc:44:32:f0:3b:70:8d:53:4b:5e:ed:
-                    9b:e2:f8:2d:a5:e0:69:cf:11:6b:0b:3e:33:02:f9:
-                    66:e8:2e:93:15:d9:42:81:04:71:17:10:c8:04:81:
-                    cb:11:6b:20:7c:f8:ef:71:8c:04:3a:51:ae:e7:69:
-                    7a:66:3b:fc:52:53:19:97:39:51:38:d3:5c:9b:93:
-                    48:09:e8:5d:18:3a:45:66:70:b1:f2:05:3d:15:ef:
-                    fd:8e:c7:b2:37:da:97:15:04:ec:02:f6:9d:40:b2:
-                    22:02:bc:09:68:70:e8:4d:85:7a:c9:dd:d0:9b:85:
-                    a8:06:2c:ce:15:e7:53:df:79:c6:ad:57:83:c4:8a:
-                    a1:eb:ef:ac:d0:b8:54:93:54:f3:24:91:41:a9:b2:
-                    92:0d
+                    00:f6:57:b7:c7:60:77:e7:d3:31:b6:9a:6f:bc:20:
+                    fa:28:9d:71:b6:65:b8:c9:01:9f:06:9e:4d:ed:a4:
+                    60:b4:1c:2e:53:f1:a0:18:c5:10:02:12:d5:72:6c:
+                    b5:a7:07:7b:dd:fa:83:b1:c0:4b:27:c8:86:c8:d7:
+                    00:e3:dd:53:58:be:82:2d:55:61:c4:aa:15:44:de:
+                    5e:ad:8f:38:a2:b5:2b:94:b9:12:3f:9d:32:5a:ed:
+                    4e:43:f4:c1:62:10:eb:ed:fe:d0:e6:25:d9:83:57:
+                    c2:01:a3:ad:80:3a:61:8e:75:61:e0:24:81:af:0c:
+                    80:64:7c:b5:e6:f5:b5:b1:85:b1:e4:d9:2a:31:f1:
+                    a7:ab:07:64:68:bc:cc:3d:c4:a3:8b:15:f6:10:bf:
+                    10:fd:cb:f1:fd:f3:f4:3c:a6:e3:9e:c8:bc:e7:f3:
+                    64:28:1f:23:89:c0:6f:ed:50:0a:92:ac:e7:63:95:
+                    51:be:a7:4b:6b:2b:98:1f:d4:9a:37:d7:4d:42:c9:
+                    b4:57:71:0a:12:3f:fd:f3:a6:67:9c:73:cd:7a:76:
+                    f7:7c:3f:1d:01:d2:e6:d5:cb:24:cc:28:16:d5:aa:
+                    82:3d:2e:78:c7:cd:60:7e:e1:a9:39:0b:25:b8:62:
+                    8e:79:af:cb:32:4e:69:47:68:d4:d5:25:9a:c0:e2:
+                    dc:25
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                58:5A:D4:08:69:E1:A6:80:04:B2:43:1E:B5:EA:25:03:CC:A6:5A:EF
+                7B:A0:85:96:01:2A:1E:EC:98:29:1C:FC:3F:FF:52:48:92:B1:8B:46
             X509v3 Authority Key Identifier: 
-                keyid:24:F8:6B:40:18:23:4E:B7:94:1D:E3:CA:38:B3:BF:9D:67:F2:7E:16
+                keyid:24:91:0A:B9:A7:1F:7D:0A:B4:1D:65:01:D2:68:05:26:C7:86:43:1E
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -57,42 +57,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         8c:66:31:d0:85:64:e5:17:c7:fa:55:f9:9d:b9:1b:b2:07:b6:
-         c4:7a:ca:9b:94:12:46:af:4e:07:5a:60:26:07:e5:a8:c7:c2:
-         e1:8d:e3:cc:79:b4:f0:f5:c5:7f:6f:35:5b:be:94:6a:b0:51:
-         66:ce:b6:46:69:66:2b:f5:46:92:10:18:2d:28:8d:5b:eb:61:
-         ad:37:2e:03:b0:46:03:e0:b3:2e:28:3f:b6:c7:94:fc:a1:c4:
-         57:97:23:4c:51:39:d6:66:83:aa:1e:57:37:70:b5:89:c9:33:
-         ad:d4:be:97:95:57:89:3a:32:e3:dc:83:ef:5d:78:f8:fa:e0:
-         26:12:6e:b2:f4:00:f1:ac:af:e4:be:7c:e7:8e:60:53:b6:e2:
-         e1:99:bb:ba:35:ff:8d:08:52:a1:7d:2d:0b:46:56:4e:6b:9a:
-         9e:f4:0e:eb:95:a4:95:e7:7b:08:d3:55:3f:95:c8:76:34:12:
-         c3:27:9a:f0:bb:0d:8c:0f:c7:56:b1:2c:c9:34:94:22:b6:c6:
-         a9:df:72:57:88:9e:06:01:e6:52:45:16:e6:aa:1d:ac:93:6e:
-         c0:5c:eb:b4:91:d7:01:8e:27:8c:00:7f:17:0a:f5:84:42:12:
-         d3:54:01:b5:bd:7e:0d:29:24:ee:2a:03:07:76:86:42:10:e1:
-         5c:ac:32:9c
+         d3:07:91:f0:5f:dc:37:4e:93:3a:4f:06:b6:44:5b:d6:26:e9:
+         fa:76:68:a0:22:29:de:58:d1:3f:57:59:59:b4:30:86:36:a4:
+         9d:88:7f:2b:c5:4a:9f:b9:a5:59:2f:21:74:ba:17:0b:55:73:
+         64:f5:2c:e8:41:3a:b3:0c:dd:83:84:0b:2f:12:41:ef:f7:34:
+         fa:98:99:67:2e:9a:fe:ea:cb:a7:95:b7:9a:0d:b6:c3:a8:94:
+         d1:6e:0f:a4:98:06:c1:98:d2:fe:70:68:c7:d9:49:32:d3:ba:
+         4e:03:ee:70:e2:b4:a1:9c:b8:fe:92:b4:bc:6e:78:c8:2a:c3:
+         37:e8:c7:cd:bc:41:a6:96:21:7e:07:a1:dd:90:00:fd:0d:72:
+         e4:98:29:c5:b7:85:76:6e:1e:65:f3:eb:86:7f:40:c7:8c:98:
+         f9:10:30:79:83:11:31:31:92:f6:d6:92:20:eb:3c:64:a6:df:
+         7d:ec:a4:e8:7a:62:91:6c:a0:04:60:74:aa:76:1e:ee:e8:05:
+         fa:0f:5b:ae:50:48:c0:6d:22:5d:f0:01:44:27:df:15:99:b3:
+         19:bd:b3:28:cd:49:f9:1f:69:fc:62:81:cf:77:d4:9f:c7:3b:
+         ba:9e:a6:9f:16:c3:b1:dd:bc:9e:31:85:f8:a6:c1:7c:d2:ea:
+         e9:a7:6b:9b
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIBPRJ
-yJlIrkuKZqYZKbhPUq8piDRsB9upp5l+CbsHens1ETmlTflU47eOnGY3YrxfLfQf
-urD9SwumWQyU1lOqe5f8vX9y5pmnBKWyAmc9n8vBLEj3pKPUMLaLlqmteJwdGSoo
-rIlGgesy8RG8RDLwO3CNU0te7Zvi+C2l4GnPEWsLPjMC+WboLpMV2UKBBHEXEMgE
-gcsRayB8+O9xjAQ6Ua7naXpmO/xSUxmXOVE401ybk0gJ6F0YOkVmcLHyBT0V7/2O
-x7I32pcVBOwC9p1AsiICvAlocOhNhXrJ3dCbhagGLM4V51PfecatV4PEiqHr76zQ
-uFSTVPMkkUGpspINAgMBAAGjgekwgeYwHQYDVR0OBBYEFFha1Ahp4aaABLJDHrXq
-JQPMplrvMB8GA1UdIwQYMBaAFCT4a0AYI063lB3jyjizv51n8n4WMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD2V7fH
+YHfn0zG2mm+8IPoonXG2ZbjJAZ8Gnk3tpGC0HC5T8aAYxRACEtVybLWnB3vd+oOx
+wEsnyIbI1wDj3VNYvoItVWHEqhVE3l6tjziitSuUuRI/nTJa7U5D9MFiEOvt/tDm
+JdmDV8IBo62AOmGOdWHgJIGvDIBkfLXm9bWxhbHk2Sox8aerB2RovMw9xKOLFfYQ
+vxD9y/H98/Q8puOeyLzn82QoHyOJwG/tUAqSrOdjlVG+p0trK5gf1Jo3101CybRX
+cQoSP/3zpmecc816dvd8Px0B0ubVyyTMKBbVqoI9LnjHzWB+4ak5CyW4Yo55r8sy
+TmlHaNTVJZrA4twlAgMBAAGjgekwgeYwHQYDVR0OBBYEFHughZYBKh7smCkc/D//
+UkiSsYtGMB8GA1UdIwQYMBaAFCSRCrmnH30KtB1lAdJoBSbHhkMeMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAjGYx0IVk5RfH+lX5nbkb
-sge2xHrKm5QSRq9OB1pgJgflqMfC4Y3jzHm08PXFf281W76UarBRZs62RmlmK/VG
-khAYLSiNW+thrTcuA7BGA+CzLig/tseU/KHEV5cjTFE51maDqh5XN3C1ickzrdS+
-l5VXiToy49yD7114+PrgJhJusvQA8ayv5L58545gU7bi4Zm7ujX/jQhSoX0tC0ZW
-TmuanvQO65Wkled7CNNVP5XIdjQSwyea8LsNjA/HVrEsyTSUIrbGqd9yV4ieBgHm
-UkUW5qodrJNuwFzrtJHXAY4njAB/Fwr1hEIS01QBtb1+DSkk7ioDB3aGQhDhXKwy
-nA==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEA0weR8F/cN06TOk8GtkRb
+1ibp+nZooCIp3ljRP1dZWbQwhjaknYh/K8VKn7mlWS8hdLoXC1VzZPUs6EE6swzd
+g4QLLxJB7/c0+piZZy6a/urLp5W3mg22w6iU0W4PpJgGwZjS/nBox9lJMtO6TgPu
+cOK0oZy4/pK0vG54yCrDN+jHzbxBppYhfgeh3ZAA/Q1y5JgpxbeFdm4eZfPrhn9A
+x4yY+RAweYMRMTGS9taSIOs8ZKbffeyk6HpikWygBGB0qnYe7ugF+g9brlBIwG0i
+XfABRCffFZmzGb2zKM1J+R9p/GKBz3fUn8c7up6mnxbDsd28njGF+KbBfNLq6adr
+mw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -109,30 +109,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b4:44:74:3c:31:93:a2:8c:74:39:b1:50:1d:1c:
-                    86:f8:ac:e7:45:73:11:9a:9c:8e:31:4a:84:81:0b:
-                    6a:4b:38:13:eb:63:47:85:e7:2f:81:98:d2:f9:73:
-                    a7:3b:3f:33:6e:21:51:7e:d1:36:4a:84:6f:b5:ce:
-                    26:c5:1c:b6:fd:75:77:e4:8f:73:1a:3f:f9:e5:88:
-                    d2:74:a8:6c:6e:50:f0:56:a5:58:ad:5a:69:0f:4a:
-                    d1:fd:58:53:0a:e3:86:17:ff:37:48:7a:3b:a7:6d:
-                    f5:c2:eb:f5:c7:60:17:d1:36:69:99:34:b8:a3:f7:
-                    4b:a2:02:b1:0e:b9:81:2a:80:e9:da:e4:d8:40:82:
-                    a3:e8:da:00:53:8e:89:32:e8:71:61:a0:1b:ee:a2:
-                    f2:c7:fc:bb:0c:6b:71:d6:90:dc:a7:dd:bd:6f:97:
-                    5f:5c:d5:bb:1a:d3:6f:d2:6b:30:32:6d:b0:eb:9f:
-                    92:17:6d:b9:7f:e3:20:a0:16:43:6b:a2:4c:7f:37:
-                    4e:26:04:8e:5c:1a:cc:2b:e3:37:8e:90:75:1b:b9:
-                    b7:45:e2:41:1f:b0:af:b3:d1:85:56:a2:b0:b1:ad:
-                    73:07:de:64:60:56:c4:8c:9f:48:d8:50:63:f8:c1:
-                    6b:c5:f1:f3:11:9e:5e:1d:56:55:60:12:82:9c:93:
-                    61:91
+                    00:d5:ec:2b:26:4f:75:ee:1c:3f:35:43:b5:18:42:
+                    59:f6:82:95:02:b9:f8:66:97:9c:61:ad:eb:c8:d7:
+                    06:be:2d:df:46:dc:21:be:69:f0:a1:fd:6b:e1:0e:
+                    58:ae:ca:a9:e4:f4:51:96:51:20:b3:a0:59:85:30:
+                    aa:eb:27:64:40:bf:53:83:d0:ec:3a:45:ab:3d:b5:
+                    27:b5:b1:bc:26:24:b8:b0:85:6d:a5:c2:33:f7:1c:
+                    ba:bb:77:47:90:91:46:bf:dc:65:7d:59:51:ae:15:
+                    03:71:f8:3f:3a:db:92:0e:ad:25:fd:48:d5:0e:04:
+                    73:bc:5c:9f:15:dd:da:53:dd:58:76:14:18:49:d1:
+                    75:f9:5c:11:f0:77:6d:fb:64:62:08:27:77:0b:04:
+                    d6:0c:21:23:20:f3:7c:b9:d6:52:61:0e:5e:ee:61:
+                    56:ea:36:97:98:49:5a:fc:44:5d:22:c2:2d:22:4b:
+                    95:a5:e7:f9:65:5b:00:ff:53:9f:36:d6:9b:66:83:
+                    8c:79:f2:e4:84:ad:00:2a:fd:02:21:9a:95:02:13:
+                    55:60:e8:70:c5:ad:a4:7c:d3:eb:da:31:2f:cd:5d:
+                    19:64:56:95:ce:0f:e4:b5:33:76:e3:6c:dd:8d:cb:
+                    9f:cf:f2:8c:a0:33:54:c4:ba:33:5e:62:76:47:4f:
+                    8d:fd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                24:F8:6B:40:18:23:4E:B7:94:1D:E3:CA:38:B3:BF:9D:67:F2:7E:16
+                24:91:0A:B9:A7:1F:7D:0A:B4:1D:65:01:D2:68:05:26:C7:86:43:1E
             X509v3 Authority Key Identifier: 
-                keyid:3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                keyid:64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -147,41 +147,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         a2:28:e4:cb:e5:d2:31:bd:7a:6c:60:60:75:59:27:9a:3a:11:
-         52:17:37:53:82:12:4d:f6:0c:d5:bf:45:51:4d:eb:8e:8a:c7:
-         01:c3:55:3e:9f:16:48:69:84:f2:e7:ad:7a:a4:32:66:c4:19:
-         39:1e:7c:31:01:42:59:3c:92:b9:aa:59:a5:b9:40:56:e5:4d:
-         0f:49:de:79:a9:72:77:95:5b:c3:de:b0:36:84:08:60:ea:21:
-         b9:d5:b4:bc:bf:f7:f0:f7:ea:5f:5f:fe:c8:3e:dc:b0:54:0e:
-         16:dd:c0:c2:d4:9f:c4:a0:e1:b3:52:0c:ee:43:0e:e7:a0:2f:
-         5e:25:92:51:6c:e7:a1:70:f8:f1:7e:83:e3:ea:a4:5d:a9:fb:
-         3a:c0:64:43:06:b5:a5:7e:48:e8:d3:20:52:df:06:4c:15:2e:
-         bb:54:49:7e:26:e5:eb:5b:82:80:8f:27:d3:e0:d0:28:5f:e8:
-         c0:7d:40:e5:e3:81:bf:2d:83:8f:7f:c4:7c:9b:24:f1:e7:1c:
-         81:90:bf:15:5a:db:4c:e8:09:f8:9b:9a:ba:f4:ad:b0:d7:66:
-         d5:b8:af:15:02:a1:e0:84:12:8c:68:24:9e:47:3c:4d:b8:da:
-         60:44:a1:fb:1d:d1:4b:b6:3a:22:a4:b9:6c:27:65:24:a6:6e:
-         57:c6:62:b9
+         3a:c3:68:18:0f:c4:0a:a1:ef:6b:f2:e1:4f:d1:21:9c:db:b6:
+         f3:bf:34:3a:f7:5f:61:69:59:69:a7:0c:05:c2:fd:f4:d3:f2:
+         32:7c:7e:e7:44:3c:4c:82:14:70:90:19:72:ae:27:e9:96:a6:
+         e1:dd:50:db:ca:07:b9:3d:c2:67:f0:f8:d5:76:ba:2d:8c:37:
+         89:7f:e5:68:a2:22:84:75:fe:fc:df:f8:90:41:04:a9:2f:8c:
+         1a:a6:d1:36:8b:cb:83:9c:95:e0:a2:1a:a9:19:17:b8:35:3f:
+         38:c7:0d:7a:0e:e2:79:fe:00:83:9a:ca:8d:ec:a6:f0:f1:60:
+         e8:e8:3c:5c:c6:14:af:5a:ca:7a:a9:28:c1:a9:dd:bc:29:58:
+         ad:02:ff:8d:d5:d6:52:18:0a:59:57:b2:19:1a:84:3b:a4:1d:
+         75:6b:e6:9f:54:1c:40:a6:d2:8c:45:78:0b:8b:3f:43:7f:f4:
+         bf:39:87:4b:81:c2:de:77:d3:e2:9b:5b:71:52:b5:8a:b9:b5:
+         b0:9d:bb:ca:63:13:51:a2:c8:14:ce:fe:86:48:21:72:e9:44:
+         29:c9:c9:f8:e6:b4:97:3e:78:a0:ab:66:0d:9d:b2:db:47:5e:
+         a8:e6:08:b7:52:6b:52:48:34:68:bc:e0:70:65:ef:3d:5b:06:
+         32:f1:02:48
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtER0PDGT
-oox0ObFQHRyG+KznRXMRmpyOMUqEgQtqSzgT62NHhecvgZjS+XOnOz8zbiFRftE2
-SoRvtc4mxRy2/XV35I9zGj/55YjSdKhsblDwVqVYrVppD0rR/VhTCuOGF/83SHo7
-p231wuv1x2AX0TZpmTS4o/dLogKxDrmBKoDp2uTYQIKj6NoAU46JMuhxYaAb7qLy
-x/y7DGtx1pDcp929b5dfXNW7GtNv0mswMm2w65+SF225f+MgoBZDa6JMfzdOJgSO
-XBrMK+M3jpB1G7m3ReJBH7Cvs9GFVqKwsa1zB95kYFbEjJ9I2FBj+MFrxfHzEZ5e
-HVZVYBKCnJNhkQIDAQABo4HLMIHIMB0GA1UdDgQWBBQk+GtAGCNOt5Qd48o4s7+d
-Z/J+FjAfBgNVHSMEGDAWgBQ+bGffq+4gDsaY9poerb6vrXLYhjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ewrJk91
+7hw/NUO1GEJZ9oKVArn4ZpecYa3ryNcGvi3fRtwhvmnwof1r4Q5Yrsqp5PRRllEg
+s6BZhTCq6ydkQL9Tg9DsOkWrPbUntbG8JiS4sIVtpcIz9xy6u3dHkJFGv9xlfVlR
+rhUDcfg/OtuSDq0l/UjVDgRzvFyfFd3aU91YdhQYSdF1+VwR8Hdt+2RiCCd3CwTW
+DCEjIPN8udZSYQ5e7mFW6jaXmEla/ERdIsItIkuVpef5ZVsA/1OfNtabZoOMefLk
+hK0AKv0CIZqVAhNVYOhwxa2kfNPr2jEvzV0ZZFaVzg/ktTN242zdjcufz/KMoDNU
+xLozXmJ2R0+N/QIDAQABo4HLMIHIMB0GA1UdDgQWBBQkkQq5px99CrQdZQHSaAUm
+x4ZDHjAfBgNVHSMEGDAWgBRkBWhNW83p/Bk+YvxBmWyGpsiQTTA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AKIo5Mvl0jG9emxgYHVZJ5o6EVIXN1OCEk32DNW/RVFN646KxwHDVT6fFkhphPLn
-rXqkMmbEGTkefDEBQlk8krmqWaW5QFblTQ9J3nmpcneVW8PesDaECGDqIbnVtLy/
-9/D36l9f/sg+3LBUDhbdwMLUn8Sg4bNSDO5DDuegL14lklFs56Fw+PF+g+PqpF2p
-+zrAZEMGtaV+SOjTIFLfBkwVLrtUSX4m5etbgoCPJ9Pg0Chf6MB9QOXjgb8tg49/
-xHybJPHnHIGQvxVa20zoCfibmrr0rbDXZtW4rxUCoeCEEoxoJJ5HPE242mBEofsd
-0Uu2OiKkuWwnZSSmblfGYrk=
+ADrDaBgPxAqh72vy4U/RIZzbtvO/NDr3X2FpWWmnDAXC/fTT8jJ8fudEPEyCFHCQ
+GXKuJ+mWpuHdUNvKB7k9wmfw+NV2ui2MN4l/5WiiIoR1/vzf+JBBBKkvjBqm0TaL
+y4OcleCiGqkZF7g1PzjHDXoO4nn+AIOayo3spvDxYOjoPFzGFK9aynqpKMGp3bwp
+WK0C/43V1lIYCllXshkahDukHXVr5p9UHECm0oxFeAuLP0N/9L85h0uBwt530+Kb
+W3FStYq5tbCdu8pjE1GiyBTO/oZIIXLpRCnJyfjmtJc+eKCrZg2dsttHXqjmCLdS
+a1JINGi84HBl7z1bBjLxAkg=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -198,30 +198,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:d0:70:df:1f:ab:c3:a1:05:6d:4c:e7:9b:5b:c7:
-                    c7:b4:36:f5:e7:c7:00:14:94:c6:8d:6c:a9:3d:0d:
-                    bb:44:8b:d7:50:29:90:e5:58:b5:6f:71:47:54:52:
-                    85:46:7a:c6:36:9c:57:39:dc:75:d3:1b:f8:69:db:
-                    da:21:11:db:8b:c1:e7:ac:86:7b:20:10:e7:3f:6e:
-                    0b:c8:33:71:00:bb:4c:a9:7b:41:a8:54:4a:c7:48:
-                    cb:6a:aa:cd:d9:a3:dd:5d:f9:80:df:c3:6d:4b:55:
-                    4d:7c:c5:d3:de:bc:c1:c9:4e:50:fa:98:70:e0:84:
-                    4b:fc:fc:9b:eb:fa:e3:7c:4b:0a:94:e6:5f:41:0c:
-                    35:e1:d7:2c:54:27:24:22:9e:f7:c6:6d:72:d2:43:
-                    06:52:d4:fb:94:ac:79:51:0b:da:1d:83:bf:a1:bc:
-                    04:a5:a7:4c:a8:03:d0:01:7f:42:43:31:d9:7e:46:
-                    74:2b:46:5a:a4:0d:ff:7a:e0:69:d1:dd:d7:29:0d:
-                    b8:12:3d:99:ac:f5:ce:97:d7:3f:2e:15:5c:51:47:
-                    1d:d4:da:f5:ce:a3:12:46:43:74:da:70:bb:a2:83:
-                    e3:b8:ac:e1:b0:8c:88:cd:d8:d9:42:fa:e8:57:a3:
-                    5b:d8:4d:72:a8:7f:be:22:8a:d3:cf:1a:75:53:fc:
-                    32:c9
+                    00:a5:77:64:fa:4a:30:51:54:db:ed:11:09:28:66:
+                    1e:43:58:6c:17:64:8e:ae:f2:05:f0:a3:a4:b6:50:
+                    44:05:9d:59:67:6b:32:80:6f:1e:90:bf:b2:15:07:
+                    ef:61:7b:28:f6:08:3c:1a:2a:91:d0:11:42:b8:4b:
+                    a2:33:16:7c:76:d9:fb:6b:19:4c:ad:6e:d1:2f:22:
+                    39:92:fa:5f:48:6c:62:66:91:91:02:84:19:49:18:
+                    06:89:c5:39:cb:cb:05:fb:6d:ab:fd:e6:da:78:05:
+                    34:5d:1c:c8:9e:4a:78:49:ed:93:07:af:8b:70:99:
+                    cf:80:0d:7e:bd:b0:94:03:a4:11:a2:07:34:e1:b7:
+                    0e:5c:60:14:75:ff:c3:dc:60:bc:b9:03:f5:41:fd:
+                    0e:82:81:44:ff:14:5d:2a:85:16:b3:07:74:70:9f:
+                    b7:a6:93:2e:2e:75:17:5a:55:62:3f:de:af:fb:2c:
+                    0e:a7:ab:44:c2:b2:e3:cb:fd:5a:01:32:a0:c4:fe:
+                    b8:e0:32:93:1c:dc:97:cd:70:74:67:67:00:f6:aa:
+                    2c:63:9c:e7:90:5d:09:a4:89:09:49:7c:86:58:21:
+                    6c:18:c1:75:0c:4f:c5:08:7f:20:cf:96:20:a3:79:
+                    56:dd:e8:90:e2:b8:c9:bc:59:87:18:ee:26:db:50:
+                    0a:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
             X509v3 Authority Key Identifier: 
-                keyid:3E:6C:67:DF:AB:EE:20:0E:C6:98:F6:9A:1E:AD:BE:AF:AD:72:D8:86
+                keyid:64:05:68:4D:5B:CD:E9:FC:19:3E:62:FC:41:99:6C:86:A6:C8:90:4D
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -236,41 +236,41 @@
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-         27:dc:b7:a3:09:a6:ab:07:74:62:e6:57:46:5a:75:a7:8d:c7:
-         77:47:a4:5e:9b:9b:85:69:5c:a7:92:b6:30:de:b6:c5:e5:c2:
-         57:c2:05:ec:dd:7b:76:8f:20:dc:89:75:b9:6a:6e:d8:5f:4b:
-         b9:85:f1:b1:1e:33:33:18:ff:c6:bc:1d:0a:29:ac:46:c1:77:
-         36:ae:8f:ae:81:fa:c3:5d:b9:de:4a:4f:8e:fc:b6:ed:c4:93:
-         1f:87:34:39:ba:c3:76:fa:03:38:c6:57:c4:1d:41:cb:4b:8c:
-         26:9d:60:b3:e9:0f:5a:7d:22:0f:58:4d:60:72:a4:23:77:bf:
-         58:b4:f4:8e:dc:8c:42:2e:46:f9:67:0a:b5:b9:a6:60:06:16:
-         8b:28:e2:e7:95:ff:c8:e2:d9:50:17:88:45:1e:13:20:bd:20:
-         03:f8:46:17:21:5d:ba:1a:3c:fd:ec:25:cf:04:2e:90:db:b6:
-         0f:0f:db:d5:ff:5a:8b:fd:4f:85:ab:7e:fc:a7:a3:10:b1:84:
-         6e:e4:20:11:bf:d4:b1:3c:a3:58:2a:f5:56:45:e2:86:f0:ae:
-         67:05:d9:b6:57:79:3c:e2:03:26:70:27:fb:e6:0f:96:a7:40:
-         9c:a6:cb:fa:de:bd:8b:f9:e2:ad:7d:9d:b5:ac:27:bf:83:9b:
-         10:94:f2:71
+         14:46:e0:df:45:14:f3:33:e1:72:a9:d8:ec:37:4e:ee:98:02:
+         a6:7d:33:97:c1:d7:bb:8b:bf:40:ac:1e:be:74:d8:e0:b3:aa:
+         ce:5e:f6:59:b7:0d:56:f6:45:6d:18:c9:ed:c4:0c:47:78:10:
+         2b:e5:d9:0b:cb:76:37:ab:de:9f:0b:4f:54:2d:43:3f:f2:3e:
+         e0:84:30:2a:99:47:3d:bc:89:e9:e3:46:7a:ff:7e:13:6c:ea:
+         dc:d2:59:24:b5:4a:7e:9f:3b:a9:2a:fa:d6:fc:48:0f:71:3b:
+         fd:d6:ab:4e:f7:85:9f:26:97:97:a6:60:6c:9f:1d:09:a2:f0:
+         52:73:12:bf:dc:7a:a8:71:a3:ae:27:26:78:08:ab:1d:96:3c:
+         92:1e:19:eb:8a:2d:9a:b5:1e:75:32:5f:42:80:b4:26:ed:7e:
+         5a:3f:3e:7f:dc:ff:04:33:bd:04:f4:d7:cb:da:f3:69:a7:77:
+         cc:2f:e8:0d:b1:e8:b0:d7:ba:f3:12:13:32:6f:87:c1:0a:5f:
+         b4:3d:d3:3f:a0:da:1a:f4:42:ab:5c:2d:ef:a8:dc:37:8d:75:
+         e9:ad:de:22:01:24:5a:1b:97:8d:d0:3e:ae:87:8c:8d:63:f2:
+         40:4d:09:0d:58:d8:38:1a:a1:a7:43:fe:ad:d9:f4:7a:be:2f:
+         48:bb:71:d1
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBw3x+rw6EFbUznm1vH
-x7Q29efHABSUxo1sqT0Nu0SL11ApkOVYtW9xR1RShUZ6xjacVzncddMb+Gnb2iER
-24vB56yGeyAQ5z9uC8gzcQC7TKl7QahUSsdIy2qqzdmj3V35gN/DbUtVTXzF0968
-wclOUPqYcOCES/z8m+v643xLCpTmX0EMNeHXLFQnJCKe98ZtctJDBlLU+5SseVEL
-2h2Dv6G8BKWnTKgD0AF/QkMx2X5GdCtGWqQN/3rgadHd1ykNuBI9maz1zpfXPy4V
-XFFHHdTa9c6jEkZDdNpwu6KD47is4bCMiM3Y2UL66FejW9hNcqh/viKK088adVP8
-MskCAwEAAaOByDCBxTAdBgNVHQ4EFgQUPmxn36vuIA7GmPaaHq2+r61y2IYwHwYD
-VR0jBBgwFoAUPmxn36vuIA7GmPaaHq2+r61y2IYwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKV3ZPpKMFFU2+0RCShm
+HkNYbBdkjq7yBfCjpLZQRAWdWWdrMoBvHpC/shUH72F7KPYIPBoqkdARQrhLojMW
+fHbZ+2sZTK1u0S8iOZL6X0hsYmaRkQKEGUkYBonFOcvLBfttq/3m2ngFNF0cyJ5K
+eEntkwevi3CZz4ANfr2wlAOkEaIHNOG3DlxgFHX/w9xgvLkD9UH9DoKBRP8UXSqF
+FrMHdHCft6aTLi51F1pVYj/er/ssDqerRMKy48v9WgEyoMT+uOAykxzcl81wdGdn
+APaqLGOc55BdCaSJCUl8hlghbBjBdQxPxQh/IM+WIKN5Vt3okOK4ybxZhxjuJttQ
+CoECAwEAAaOByDCBxTAdBgNVHQ4EFgQUZAVoTVvN6fwZPmL8QZlshqbIkE0wHwYD
+VR0jBBgwFoAUZAVoTVvN6fwZPmL8QZlshqbIkE0wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAn3LejCaarB3Ri
-5ldGWnWnjcd3R6Rem5uFaVynkrYw3rbF5cJXwgXs3Xt2jyDciXW5am7YX0u5hfGx
-HjMzGP/GvB0KKaxGwXc2ro+ugfrDXbneSk+O/LbtxJMfhzQ5usN2+gM4xlfEHUHL
-S4wmnWCz6Q9afSIPWE1gcqQjd79YtPSO3IxCLkb5Zwq1uaZgBhaLKOLnlf/I4tlQ
-F4hFHhMgvSAD+EYXIV26Gjz97CXPBC6Q27YPD9vV/1qL/U+Fq378p6MQsYRu5CAR
-v9SxPKNYKvVWReKG8K5nBdm2V3k84gMmcCf75g+Wp0Ccpsv63r2L+eKtfZ21rCe/
-g5sQlPJx
+AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAURuDfRRTzM+Fy
+qdjsN07umAKmfTOXwde7i79ArB6+dNjgs6rOXvZZtw1W9kVtGMntxAxHeBAr5dkL
+y3Y3q96fC09ULUM/8j7ghDAqmUc9vInp40Z6/34TbOrc0lkktUp+nzupKvrW/EgP
+cTv91qtO94WfJpeXpmBsnx0JovBScxK/3HqocaOuJyZ4CKsdljySHhnrii2atR51
+Ml9CgLQm7X5aPz5/3P8EM70E9NfL2vNpp3fML+gNseiw17rzEhMyb4fBCl+0PdM/
+oNoa9EKrXC3vqNw3jXXprd4iASRaG5eN0D6uh4yNY/JATQkNWNg4GqGnQ/6t2fR6
+vi9Iu3HR
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -282,3 +282,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
index 24d08c5..da1f39b 100644
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
+++ b/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bc:1b:31:ef:84:8e:64:39:4e:02:f3:81:fc:75:
-                    0b:07:af:5b:57:53:6b:df:27:87:03:1c:3d:ea:b3:
-                    6a:b5:14:e9:98:1d:13:16:fc:51:5b:04:c5:72:81:
-                    3e:26:05:54:9b:19:f8:7e:c0:ee:c8:49:eb:e2:9d:
-                    78:82:c8:e9:c5:af:eb:fc:10:85:e2:5f:e6:6a:8e:
-                    51:19:69:69:10:5e:aa:99:31:64:c4:3d:0f:3e:f0:
-                    5a:2a:cd:dd:b7:27:ff:5a:ee:91:c3:ad:92:9e:da:
-                    91:df:7d:7f:77:f1:79:d8:6e:60:48:ad:57:f1:2d:
-                    6e:67:5b:fe:20:5c:b9:56:a7:70:8d:63:80:5a:99:
-                    cf:3d:6e:14:f5:d8:29:b9:25:81:61:c7:bb:be:3b:
-                    08:38:c5:5d:40:aa:e7:15:51:8a:84:d3:78:64:f5:
-                    3b:09:7b:a9:f2:ed:a5:05:ed:3a:67:21:45:f1:78:
-                    78:e2:92:74:20:e0:41:10:f7:ab:9e:0e:fd:22:af:
-                    ad:8f:b4:81:cb:d9:28:b1:49:90:05:fa:f7:96:a8:
-                    b7:96:3d:5b:87:d9:6b:cc:82:7a:85:26:ba:e6:86:
-                    40:53:44:09:38:27:4d:8a:98:5d:ce:56:a1:93:38:
-                    08:fd:02:92:ef:9b:0c:d5:c0:9d:12:e8:21:08:9d:
-                    ba:e1
+                    00:bb:bb:40:cb:96:84:ca:5e:59:69:8d:3f:2b:c5:
+                    01:1a:7a:f1:49:0a:d7:0a:13:27:7d:42:6f:f2:b5:
+                    e6:17:51:a7:49:16:d0:c3:66:9d:de:eb:07:8a:a9:
+                    29:7b:17:9b:00:b7:45:54:48:76:84:95:84:c6:f8:
+                    e3:ad:79:08:2b:5d:02:fd:22:bf:52:b4:07:64:65:
+                    cc:8b:87:71:08:ed:78:aa:6f:87:67:12:87:db:e5:
+                    b1:9a:27:0b:09:20:16:97:4f:9d:b6:22:2b:9f:55:
+                    f6:da:0f:73:86:aa:f4:6f:bc:92:47:91:77:37:30:
+                    64:d4:e1:1c:09:bb:3b:5b:c8:47:00:5e:a2:c4:b8:
+                    29:8f:d8:47:27:fe:0b:bf:5b:02:7f:63:37:b9:34:
+                    b4:7d:c3:a4:9c:4f:7c:bc:fd:49:75:d9:fd:24:69:
+                    29:a3:ef:7a:24:ba:2d:d2:bc:27:21:3e:ac:26:91:
+                    b2:7c:c2:9b:ea:2b:2b:94:25:dd:ec:59:88:2c:ad:
+                    af:5a:d7:6e:f1:d8:c8:ab:93:1f:f2:43:f7:d9:fb:
+                    d2:f0:3c:93:2d:ba:02:df:bf:ff:66:88:8b:3b:27:
+                    78:53:7d:69:b7:e6:5b:32:5e:46:7f:4e:05:71:ba:
+                    6d:b4:b9:48:30:44:39:e4:1d:2c:79:14:56:46:5f:
+                    ed:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A4:68:89:3F:A2:F7:48:BC:C6:C4:9C:7E:78:B9:E6:06:A7:37:2E:A2
+                2D:E9:1E:78:5E:76:51:B5:46:65:64:61:7E:25:A3:F9:AF:B5:01:F7
             X509v3 Authority Key Identifier: 
-                keyid:A0:FF:6A:B0:DB:6D:76:3D:1F:D2:A3:83:33:02:BE:32:A2:71:34:85
+                keyid:0B:2C:E6:E6:4E:05:04:08:49:15:5D:4C:A0:1D:95:20:39:3B:56:31
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         2b:b6:4e:ac:b6:8d:bb:7c:cc:0b:6f:77:9c:54:ed:88:25:34:
-         c7:42:88:7c:35:23:74:c7:e7:7d:86:7d:fd:f0:0b:40:e2:64:
-         5b:a3:1b:a2:34:77:09:b4:7d:5e:7b:a4:85:7f:23:b5:2f:43:
-         f8:0f:33:6c:86:9c:7a:ee:0d:54:45:fb:1c:57:c8:01:91:60:
-         27:0b:bb:ac:8c:23:c4:5f:18:42:2e:df:24:cb:12:77:2c:0c:
-         6c:d1:8f:34:ee:a8:06:e3:8a:fe:34:e6:ca:bc:25:e5:33:a4:
-         23:df:00:4f:f4:e4:af:d9:7f:08:1a:78:a5:ba:80:81:49:bf:
-         8f:7c:ee:ee:27:ac:fc:d8:91:69:36:2b:dc:33:ae:d6:ad:47:
-         8d:5d:4c:c0:a5:a2:61:b8:db:b0:7b:92:79:b5:61:64:78:92:
-         02:05:68:16:2b:9f:81:66:5a:8e:e6:82:55:5b:83:87:26:e2:
-         da:d0:95:91:06:6d:f9:dc:b6:04:fe:ed:ae:f7:3e:db:a7:38:
-         31:af:a4:c5:79:f7:d0:3b:b9:2c:79:60:0a:1d:ec:68:8d:3f:
-         7b:d7:e9:1a:79:de:da:97:42:04:c7:b1:f2:fe:72:68:00:fa:
-         30:41:0e:1c:26:65:f5:eb:2e:7d:fe:19:05:99:5b:6f:3d:51:
-         4c:57:c3:cb
+         30:d4:32:a0:3c:e2:a6:37:88:a6:2d:58:f9:26:46:e7:12:ab:
+         02:f2:a1:ca:82:85:8b:23:40:10:dc:d1:6d:0b:ba:98:cf:f0:
+         d1:95:f3:88:69:62:a5:3c:e4:37:f3:93:b1:64:50:26:2b:1d:
+         c4:29:f0:e4:df:63:a7:1d:73:a7:cc:bf:63:08:2a:88:24:41:
+         d4:b0:a5:a7:c8:72:da:75:f7:18:7d:bf:29:ce:a4:b5:92:b1:
+         e9:cd:3b:a4:ba:68:8f:8e:37:85:20:73:c4:f6:3f:42:a3:d2:
+         cb:44:40:1b:f3:a6:aa:70:d6:20:71:f8:33:19:41:0e:41:35:
+         15:03:3d:d6:d6:de:1f:5d:3c:71:a4:8c:43:3b:30:80:44:df:
+         04:35:f3:7c:6b:6f:3f:2e:2f:32:93:e8:6d:36:22:dc:21:d3:
+         59:11:5c:2d:a5:0a:22:fb:9e:27:e2:72:f0:1c:92:b6:a7:10:
+         52:46:fc:f9:4b:90:df:e6:5b:0b:b6:94:8b:97:05:71:1b:b2:
+         92:a7:50:4f:6d:b9:52:09:ad:00:c8:df:05:31:57:6c:a8:53:
+         72:c9:49:9a:d5:c1:9e:70:8f:b0:15:bc:b6:88:63:57:9e:3e:
+         35:c9:27:23:9e:73:25:ed:15:d8:cc:ea:36:2c:72:98:b2:ca:
+         41:7c:4f:56
 -----BEGIN CERTIFICATE-----
 MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
 cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8GzHv
-hI5kOU4C84H8dQsHr1tXU2vfJ4cDHD3qs2q1FOmYHRMW/FFbBMVygT4mBVSbGfh+
-wO7ISevinXiCyOnFr+v8EIXiX+ZqjlEZaWkQXqqZMWTEPQ8+8Foqzd23J/9a7pHD
-rZKe2pHffX938XnYbmBIrVfxLW5nW/4gXLlWp3CNY4Bamc89bhT12Cm5JYFhx7u+
-Owg4xV1AqucVUYqE03hk9TsJe6ny7aUF7TpnIUXxeHjiknQg4EEQ96ueDv0ir62P
-tIHL2SixSZAF+veWqLeWPVuH2WvMgnqFJrrmhkBTRAk4J02KmF3OVqGTOAj9ApLv
-mwzVwJ0S6CEInbrhAgMBAAGjgekwgeYwHQYDVR0OBBYEFKRoiT+i90i8xsScfni5
-5ganNy6iMB8GA1UdIwQYMBaAFKD/arDbbXY9H9KjgzMCvjKicTSFMD8GCCsGAQUF
+VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7u0DL
+loTKXllpjT8rxQEaevFJCtcKEyd9Qm/yteYXUadJFtDDZp3e6weKqSl7F5sAt0VU
+SHaElYTG+OOteQgrXQL9Ir9StAdkZcyLh3EI7Xiqb4dnEofb5bGaJwsJIBaXT522
+IiufVfbaD3OGqvRvvJJHkXc3MGTU4RwJuztbyEcAXqLEuCmP2Ecn/gu/WwJ/Yze5
+NLR9w6ScT3y8/Ul12f0kaSmj73okui3SvCchPqwmkbJ8wpvqKyuUJd3sWYgsra9a
+127x2Mirkx/yQ/fZ+9LwPJMtugLfv/9miIs7J3hTfWm35lsyXkZ/TgVxum20uUgw
+RDnkHSx5FFZGX+19AgMBAAGjgekwgeYwHQYDVR0OBBYEFC3pHnhedlG1RmVkYX4l
+o/mvtQH3MB8GA1UdIwQYMBaAFAss5uZOBQQISRVdTKAdlSA5O1YxMD8GCCsGAQUF
 BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
 aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
 dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAK7ZOrLaNu3zMC293nFTt
-iCU0x0KIfDUjdMfnfYZ9/fALQOJkW6MbojR3CbR9XnukhX8jtS9D+A8zbIaceu4N
-VEX7HFfIAZFgJwu7rIwjxF8YQi7fJMsSdywMbNGPNO6oBuOK/jTmyrwl5TOkI98A
-T/Tkr9l/CBp4pbqAgUm/j3zu7ies/NiRaTYr3DOu1q1HjV1MwKWiYbjbsHuSebVh
-ZHiSAgVoFiufgWZajuaCVVuDhybi2tCVkQZt+dy2BP7trvc+26c4Ma+kxXn30Du5
-LHlgCh3saI0/e9fpGnne2pdCBMex8v5yaAD6MEEOHCZl9esuff4ZBZlbbz1RTFfD
-yw==
+BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAMNQyoDzipjeIpi1Y+SZG
+5xKrAvKhyoKFiyNAENzRbQu6mM/w0ZXziGlipTzkN/OTsWRQJisdxCnw5N9jpx1z
+p8y/YwgqiCRB1LClp8hy2nX3GH2/Kc6ktZKx6c07pLpoj443hSBzxPY/QqPSy0RA
+G/OmqnDWIHH4MxlBDkE1FQM91tbeH108caSMQzswgETfBDXzfGtvPy4vMpPobTYi
+3CHTWRFcLaUKIvueJ+Jy8ByStqcQUkb8+UuQ3+ZbC7aUi5cFcRuykqdQT225Ugmt
+AMjfBTFXbKhTcslJmtXBnnCPsBW8tohjV54+NcknI55zJe0V2MzqNixymLLKQXxP
+Vg==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:bd:4b:25:64:f8:46:3e:e8:fc:85:3a:e2:4a:dc:
-                    9a:58:70:6f:65:27:93:14:2f:5d:08:b3:ba:dc:2d:
-                    b0:8c:0e:98:f6:21:26:8d:ff:bb:59:2d:db:72:bc:
-                    07:38:8f:11:34:cc:e8:07:0f:07:ed:82:1e:60:be:
-                    d8:67:17:98:cb:81:55:40:5e:d9:a0:bd:a5:98:88:
-                    71:17:8e:65:70:3e:8a:9f:b3:23:56:9f:98:a8:db:
-                    64:6a:1b:e1:1a:2c:b1:94:6d:d3:4b:28:fd:e4:1c:
-                    d3:7d:93:91:53:5c:3d:89:67:13:04:58:21:64:c9:
-                    89:c7:12:58:91:dc:2f:0f:56:ec:a7:00:4f:60:89:
-                    0a:b9:af:52:8e:20:bc:b3:16:e8:a6:06:ca:3b:07:
-                    a5:76:59:7e:4b:17:33:b2:db:8e:d8:31:29:d8:ba:
-                    08:06:51:e1:a1:43:6d:cd:2d:61:e1:03:54:62:1d:
-                    43:28:b9:48:b6:3b:bb:24:47:d0:56:df:ce:ac:d3:
-                    ac:a9:0c:13:a5:c8:76:a3:ee:67:0c:79:35:92:5d:
-                    49:8f:a5:4f:8f:ae:79:09:6c:11:15:3f:3a:01:a3:
-                    4d:54:df:93:50:b5:fe:ed:be:53:87:be:b7:65:55:
-                    96:4c:7c:5b:a0:e3:1e:18:e8:9e:8c:95:d1:4a:ea:
-                    5a:4f
+                    00:a9:f6:c4:18:fe:58:e4:42:e8:65:0e:7f:f4:6b:
+                    db:25:fc:46:b4:7b:20:f5:96:ec:45:cc:c4:8e:08:
+                    1c:9b:dc:29:9c:86:e2:b0:cc:ae:5a:55:87:97:c9:
+                    1a:d7:18:32:6f:7c:73:bb:37:c1:6b:9f:cb:c2:43:
+                    a0:63:b5:ad:33:02:e8:4a:de:03:27:6a:33:30:83:
+                    a7:2d:c6:98:21:0b:b2:47:84:36:d5:c2:4e:8b:00:
+                    ec:02:3d:ba:b6:11:8f:83:76:94:40:76:4c:fa:e7:
+                    47:21:de:f8:47:91:8b:44:c7:c5:97:ed:cc:1e:1d:
+                    aa:5a:b1:cf:c0:b2:1e:9d:29:f8:2e:ec:26:37:12:
+                    88:43:ad:68:98:82:6a:dd:b7:2d:5a:87:0d:62:c2:
+                    57:ce:08:3f:66:9c:d1:09:2a:aa:d9:07:3e:1c:8d:
+                    9e:5d:60:38:f5:e4:a4:8c:99:53:e6:07:b6:0f:8d:
+                    04:49:08:f1:b9:dc:ab:96:5d:ad:2b:8d:b0:14:f2:
+                    b9:ec:2d:53:42:ef:5f:3d:28:c3:8a:e3:9d:4c:c5:
+                    e9:a2:63:78:79:08:4d:25:ab:b5:37:4d:3f:fe:75:
+                    3f:84:12:17:14:78:a1:a7:18:49:e6:7f:aa:be:b3:
+                    58:54:4f:fb:da:66:22:ba:a7:c9:17:ba:7b:38:d5:
+                    5f:bb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A0:FF:6A:B0:DB:6D:76:3D:1F:D2:A3:83:33:02:BE:32:A2:71:34:85
+                0B:2C:E6:E6:4E:05:04:08:49:15:5D:4C:A0:1D:95:20:39:3B:56:31
             X509v3 Authority Key Identifier: 
-                keyid:0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                keyid:DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         13:0e:3c:0e:69:c2:bf:7d:aa:a4:8f:47:a6:90:69:0e:d8:b7:
-         50:2a:c7:95:78:1d:7f:71:41:51:8d:a4:a9:cf:f2:d2:c6:c0:
-         8f:dd:56:c4:53:94:34:3f:07:e3:b0:4c:71:55:5b:14:a2:de:
-         8f:1e:3b:15:73:e2:9a:49:df:c8:0e:04:dc:76:76:61:0d:c5:
-         29:35:12:c4:71:d3:2d:6d:ac:b6:62:53:75:57:44:cf:0b:d2:
-         1d:66:0a:be:01:b5:a6:58:a0:42:f5:ce:62:3c:d8:21:fd:c6:
-         c7:27:66:b1:2f:d4:04:c2:29:44:32:3a:3b:b2:3c:08:a5:66:
-         3e:4c:27:c2:36:71:c5:31:05:e7:e9:f8:47:b4:81:33:57:7d:
-         c2:ce:ac:de:c4:15:11:1a:f2:c9:59:72:cd:a4:a8:54:41:ef:
-         d5:d5:67:cf:6e:e3:a0:07:62:ba:83:f7:46:fa:4b:10:7c:91:
-         9f:ff:aa:1a:c9:46:f9:26:14:c4:01:58:9d:35:75:f0:78:0e:
-         75:4e:7f:03:e8:83:1b:87:82:99:e0:52:b3:9f:34:a7:26:34:
-         76:9c:e7:3e:69:d5:9b:e6:9a:45:06:34:19:03:05:b0:15:ca:
-         a2:59:7c:ac:fe:9c:c4:29:54:e2:c8:9c:e1:98:7e:16:7a:b9:
-         f3:9e:aa:d1
+         60:12:61:3d:32:a4:b3:2a:74:9f:e6:97:ae:cc:c6:a2:4d:aa:
+         68:c1:c9:6f:77:c2:96:69:5b:89:69:9c:a4:d6:4a:7f:f2:82:
+         60:fc:33:e4:71:0e:da:b4:7e:da:1c:e7:04:b5:0b:58:56:b2:
+         94:0d:fb:aa:38:fc:aa:59:19:44:4a:e5:08:c4:b0:52:c5:77:
+         fe:52:f4:cc:a7:4c:72:3b:7a:9d:65:66:e6:d2:5b:a7:68:2c:
+         09:79:82:fc:33:37:59:c8:4b:03:1f:29:d7:ba:4d:bc:f4:a7:
+         be:ed:ba:be:66:a7:b0:89:fc:3b:93:73:97:f5:80:b6:53:26:
+         8b:1d:58:88:4e:06:47:06:63:02:9e:be:59:aa:9d:fe:70:0b:
+         3e:44:cc:dc:74:b1:79:85:fc:94:5e:ac:53:a1:31:99:30:c8:
+         bf:47:87:6e:f2:f6:3a:95:b7:bf:3b:5c:65:0c:04:38:60:6a:
+         c2:02:8e:22:6c:6d:dc:a7:ba:f2:0e:61:3c:2f:a3:31:f7:5b:
+         36:4a:2e:ee:87:00:3f:9b:50:56:8a:e1:b8:b8:77:e7:00:fd:
+         74:65:3e:d5:9b:69:c0:58:51:8a:6a:93:18:cb:8d:57:83:c9:
+         90:6c:b4:2f:90:bd:ec:6a:69:9d:27:95:6e:25:38:0d:7e:e2:
+         12:15:7c:d6
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUslZPhG
-Puj8hTriStyaWHBvZSeTFC9dCLO63C2wjA6Y9iEmjf+7WS3bcrwHOI8RNMzoBw8H
-7YIeYL7YZxeYy4FVQF7ZoL2lmIhxF45lcD6Kn7MjVp+YqNtkahvhGiyxlG3TSyj9
-5BzTfZORU1w9iWcTBFghZMmJxxJYkdwvD1bspwBPYIkKua9SjiC8sxbopgbKOwel
-dll+SxczstuO2DEp2LoIBlHhoUNtzS1h4QNUYh1DKLlItju7JEfQVt/OrNOsqQwT
-pch2o+5nDHk1kl1Jj6VPj655CWwRFT86AaNNVN+TULX+7b5Th763ZVWWTHxboOMe
-GOiejJXRSupaTwIDAQABo4HLMIHIMB0GA1UdDgQWBBSg/2qw2212PR/So4MzAr4y
-onE0hTAfBgNVHSMEGDAWgBQK4XEV3+0NmOt1qDe88e7jZXmrwjA3BggrBgEFBQcB
+ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqfbEGP5Y
+5ELoZQ5/9GvbJfxGtHsg9ZbsRczEjggcm9wpnIbisMyuWlWHl8ka1xgyb3xzuzfB
+a5/LwkOgY7WtMwLoSt4DJ2ozMIOnLcaYIQuyR4Q21cJOiwDsAj26thGPg3aUQHZM
++udHId74R5GLRMfFl+3MHh2qWrHPwLIenSn4LuwmNxKIQ61omIJq3bctWocNYsJX
+zgg/ZpzRCSqq2Qc+HI2eXWA49eSkjJlT5ge2D40ESQjxudyrll2tK42wFPK57C1T
+Qu9fPSjDiuOdTMXpomN4eQhNJau1N00//nU/hBIXFHihpxhJ5n+qvrNYVE/72mYi
+uqfJF7p7ONVfuwIDAQABo4HLMIHIMB0GA1UdDgQWBBQLLObmTgUECEkVXUygHZUg
+OTtWMTAfBgNVHSMEGDAWgBTdL+ly1G8+Ithfso50muMmhCMo6DA3BggrBgEFBQcB
 AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
 BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
 VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ABMOPA5pwr99qqSPR6aQaQ7Yt1Aqx5V4HX9xQVGNpKnP8tLGwI/dVsRTlDQ/B+Ow
-THFVWxSi3o8eOxVz4ppJ38gOBNx2dmENxSk1EsRx0y1trLZiU3VXRM8L0h1mCr4B
-taZYoEL1zmI82CH9xscnZrEv1ATCKUQyOjuyPAilZj5MJ8I2ccUxBefp+Ee0gTNX
-fcLOrN7EFREa8slZcs2kqFRB79XVZ89u46AHYrqD90b6SxB8kZ//qhrJRvkmFMQB
-WJ01dfB4DnVOfwPogxuHgpngUrOfNKcmNHac5z5p1ZvmmkUGNBkDBbAVyqJZfKz+
-nMQpVOLInOGYfhZ6ufOeqtE=
+AGASYT0ypLMqdJ/ml67MxqJNqmjByW93wpZpW4lpnKTWSn/ygmD8M+RxDtq0ftoc
+5wS1C1hWspQN+6o4/KpZGURK5QjEsFLFd/5S9MynTHI7ep1lZubSW6doLAl5gvwz
+N1nISwMfKde6Tbz0p77tur5mp7CJ/DuTc5f1gLZTJosdWIhOBkcGYwKevlmqnf5w
+Cz5EzNx0sXmF/JRerFOhMZkwyL9Hh27y9jqVt787XGUMBDhgasICjiJsbdynuvIO
+YTwvozH3WzZKLu6HAD+bUFaK4bi4d+cA/XRlPtWbacBYUYpqkxjLjVeDyZBstC+Q
+vexqaZ0nlW4lOA1+4hIVfNY=
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:99:74:ca:c8:3e:26:66:b5:bc:e5:cc:0b:41:30:
-                    7b:cb:99:a5:31:5f:e6:3f:44:81:d3:c5:16:0e:ac:
-                    db:2e:cf:5a:08:79:5a:44:c4:f1:bc:e5:74:06:42:
-                    57:35:4b:e7:90:88:ef:dd:59:b7:82:40:b5:ff:c2:
-                    03:32:1b:4d:1c:6d:ee:34:60:a8:c5:24:ab:b0:0f:
-                    a6:19:22:86:ae:e3:12:dd:3e:99:3a:36:65:6a:ea:
-                    5d:aa:b0:2d:e9:db:9a:22:83:cb:50:8b:1a:04:cb:
-                    4b:83:83:46:95:e1:45:a7:17:d3:16:ab:70:e6:62:
-                    85:79:ff:73:35:3e:7e:4d:1d:3b:6d:e1:60:0e:15:
-                    3c:12:cf:7a:d7:eb:af:04:0a:43:3b:5f:78:de:df:
-                    ba:51:60:4d:20:61:32:2c:f4:61:d3:e2:48:02:8d:
-                    a1:d5:05:ec:f4:d0:7d:3d:2e:f8:5f:3b:57:76:21:
-                    d8:55:1a:61:34:53:af:2f:de:32:ff:27:7e:12:41:
-                    96:56:0a:9d:d2:e5:3f:38:14:9e:20:50:58:4c:00:
-                    7d:16:4d:2d:b8:f3:75:c5:c4:b3:80:a7:d9:e4:60:
-                    e1:8f:b5:b8:a4:82:db:72:b2:7c:0b:a2:ef:5e:98:
-                    22:48:b2:f9:7c:4a:82:e5:59:fa:0d:93:34:34:88:
-                    93:a7
+                    00:cf:b2:a3:87:b8:35:43:42:14:5f:34:f8:0d:ce:
+                    a2:e7:e4:de:53:f5:48:43:6c:95:76:27:ea:df:29:
+                    13:0c:6d:b1:59:67:2f:60:38:51:9d:c1:c8:e6:bc:
+                    8e:fb:40:48:aa:b5:ec:5f:7b:ed:5e:29:48:70:7e:
+                    23:bd:c2:5b:8d:ec:09:f7:97:1d:be:8f:66:e4:ca:
+                    d2:0f:71:7d:a7:cf:f2:1b:43:0c:cc:12:51:fb:56:
+                    bb:22:91:c6:1f:e7:f1:8f:18:25:f9:e2:16:c5:78:
+                    5c:c6:35:9b:21:7c:84:ca:51:57:81:6c:4f:65:ce:
+                    70:59:40:f2:a4:be:38:68:89:93:39:77:42:4d:81:
+                    7a:7c:61:ce:b8:25:37:87:e1:26:62:e7:cc:47:64:
+                    6a:97:6c:af:99:ae:0c:9f:2c:08:7c:48:66:bb:20:
+                    08:3c:da:1a:eb:78:f0:0f:cf:b6:e4:03:83:55:ff:
+                    11:39:4b:2b:32:b9:d6:87:72:85:dd:6b:c7:5d:07:
+                    68:bc:41:38:f0:d7:91:6b:bc:36:5e:3d:ab:d5:83:
+                    d6:03:86:22:29:62:de:51:b8:5a:ea:08:38:79:db:
+                    95:79:b8:90:40:5d:1c:86:2f:71:cc:be:46:c8:b3:
+                    9b:79:fb:db:d0:de:af:3c:7a:62:2f:7a:2f:fd:25:
+                    39:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
             X509v3 Authority Key Identifier: 
-                keyid:0A:E1:71:15:DF:ED:0D:98:EB:75:A8:37:BC:F1:EE:E3:65:79:AB:C2
+                keyid:DD:2F:E9:72:D4:6F:3E:22:D8:5F:B2:8E:74:9A:E3:26:84:23:28:E8
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -233,40 +233,40 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-         6d:66:a8:f5:13:4c:3a:8d:26:f2:30:1a:59:72:f3:dd:7a:17:
-         cf:8d:6e:76:cf:23:db:be:a3:85:e9:78:63:1d:4c:d8:78:93:
-         9e:57:61:0d:78:2a:5a:67:c3:d8:73:d1:69:72:24:66:e6:9b:
-         b3:fb:b8:31:7e:c0:4b:8c:03:48:fb:36:b7:ac:42:39:66:94:
-         26:22:d7:fb:d3:11:67:29:d6:32:9c:c3:9e:bd:b1:43:2e:6f:
-         a1:a5:4c:ec:5d:df:5e:b6:49:0c:81:9c:2f:09:81:03:97:16:
-         80:5a:da:c1:25:d6:c8:3e:d9:11:ed:1a:1d:8d:ac:46:90:e9:
-         1c:e1:23:70:95:2d:b3:19:a5:ba:97:7b:47:4f:af:cc:ed:80:
-         4e:46:26:8e:39:86:5a:6d:f4:94:56:42:05:49:fc:ef:48:2e:
-         fa:04:78:34:0f:5a:c9:56:dc:eb:88:3a:fc:d6:8b:73:d7:81:
-         27:57:e3:27:6f:6b:74:af:6e:42:16:c9:30:a8:3d:8f:24:43:
-         55:40:9b:fc:39:43:3a:b5:50:6b:11:c3:b8:a1:06:f4:63:3e:
-         45:01:db:7c:db:b7:35:df:38:c1:eb:83:e8:4e:78:3b:99:66:
-         e9:d1:14:68:b2:f6:7e:2d:80:eb:f7:e0:87:6a:43:c1:3a:23:
-         8f:aa:05:5d
+         12:01:cf:21:e6:74:8d:36:91:f8:c1:c1:ce:71:03:26:13:7b:
+         dc:92:46:3f:b4:7b:b1:7f:51:7a:7c:b0:56:4a:fc:e0:2b:1d:
+         0e:3b:08:c8:e4:d0:cf:4a:88:04:b5:62:82:5f:87:b9:11:6b:
+         89:80:c9:1a:cf:64:81:21:e2:d2:4f:9a:aa:d7:23:a6:2a:46:
+         a8:5d:3f:bf:60:c0:4c:c1:97:cd:44:05:d2:e0:78:8f:96:9b:
+         1f:c5:a5:5d:4e:7f:ab:1e:3e:01:2e:9a:2c:76:b2:08:c5:76:
+         22:72:cc:d4:86:6f:dc:d0:9f:de:3c:83:e6:eb:2c:1a:54:9c:
+         9e:af:4a:3c:60:3e:c9:15:ef:d2:50:1a:05:a5:c2:90:45:50:
+         fc:9f:1e:71:3e:f9:ab:3d:61:b5:65:6e:c0:7d:6e:52:1a:57:
+         9e:57:71:a7:1c:09:55:65:40:52:88:b3:04:50:6f:09:ec:85:
+         2f:ca:36:79:23:a6:35:b2:ab:df:aa:3a:c3:5a:1d:e3:a0:7f:
+         72:70:22:3a:f6:6a:6e:68:da:6e:67:b5:db:f7:aa:63:83:29:
+         a4:36:35:cb:86:c4:da:79:64:81:c0:e6:ae:c0:d7:6d:34:5b:
+         4d:ab:04:25:e8:1f:ec:f8:62:91:81:63:7e:64:06:a9:40:97:
+         68:9f:0c:70
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJl0ysg+Jma1vOXMC0Ew
-e8uZpTFf5j9EgdPFFg6s2y7PWgh5WkTE8bzldAZCVzVL55CI791Zt4JAtf/CAzIb
-TRxt7jRgqMUkq7APphkihq7jEt0+mTo2ZWrqXaqwLenbmiKDy1CLGgTLS4ODRpXh
-RacX0xarcOZihXn/czU+fk0dO23hYA4VPBLPetfrrwQKQztfeN7fulFgTSBhMiz0
-YdPiSAKNodUF7PTQfT0u+F87V3Yh2FUaYTRTry/eMv8nfhJBllYKndLlPzgUniBQ
-WEwAfRZNLbjzdcXEs4Cn2eRg4Y+1uKSC23KyfAui716YIkiy+XxKguVZ+g2TNDSI
-k6cCAwEAAaOBujCBtzAdBgNVHQ4EFgQUCuFxFd/tDZjrdag3vPHu42V5q8IwHwYD
-VR0jBBgwFoAUCuFxFd/tDZjrdag3vPHu42V5q8IwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+yo4e4NUNCFF80+A3O
+oufk3lP1SENslXYn6t8pEwxtsVlnL2A4UZ3ByOa8jvtASKq17F977V4pSHB+I73C
+W43sCfeXHb6PZuTK0g9xfafP8htDDMwSUftWuyKRxh/n8Y8YJfniFsV4XMY1myF8
+hMpRV4FsT2XOcFlA8qS+OGiJkzl3Qk2BenxhzrglN4fhJmLnzEdkapdsr5muDJ8s
+CHxIZrsgCDzaGut48A/PtuQDg1X/ETlLKzK51odyhd1rx10HaLxBOPDXkWu8Nl49
+q9WD1gOGIili3lG4WuoIOHnblXm4kEBdHIYvccy+Rsizm3n729Derzx6Yi96L/0l
+Od8CAwEAAaOBujCBtzAdBgNVHQ4EFgQU3S/pctRvPiLYX7KOdJrjJoQjKOgwHwYD
+VR0jBBgwFoAU3S/pctRvPiLYX7KOdJrjJoQjKOgwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAbWao9RNMOo0m8jAaWXLz3XoXz41uds8j
-276jhel4Yx1M2HiTnldhDXgqWmfD2HPRaXIkZuabs/u4MX7AS4wDSPs2t6xCOWaU
-JiLX+9MRZynWMpzDnr2xQy5voaVM7F3fXrZJDIGcLwmBA5cWgFrawSXWyD7ZEe0a
-HY2sRpDpHOEjcJUtsxmlupd7R0+vzO2ATkYmjjmGWm30lFZCBUn870gu+gR4NA9a
-yVbc64g6/NaLc9eBJ1fjJ29rdK9uQhbJMKg9jyRDVUCb/DlDOrVQaxHDuKEG9GM+
-RQHbfNu3Nd84weuD6E54O5lm6dEUaLL2fi2A6/fgh2pDwTojj6oFXQ==
+AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAEgHPIeZ0jTaR+MHBznEDJhN73JJGP7R7
+sX9RenywVkr84CsdDjsIyOTQz0qIBLVigl+HuRFriYDJGs9kgSHi0k+aqtcjpipG
+qF0/v2DATMGXzUQF0uB4j5abH8WlXU5/qx4+AS6aLHayCMV2InLM1IZv3NCf3jyD
+5ussGlScnq9KPGA+yRXv0lAaBaXCkEVQ/J8ecT75qz1htWVuwH1uUhpXnldxpxwJ
+VWVAUoizBFBvCeyFL8o2eSOmNbKr36o6w1od46B/cnAiOvZqbmjabme12/eqY4Mp
+pDY1y4bE2nlkgcDmrsDXbTRbTasEJegf7PhikYFjfmQGqUCXaJ8McA==
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -278,3 +278,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
index ac92a72..6311951 100644
--- a/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
+++ b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c3:d8:cf:ca:eb:7a:63:bc:cd:53:50:a0:a5:e7:
-                    24:1c:5e:ab:ee:eb:48:d3:60:73:ab:a5:c3:b5:e0:
-                    ea:b2:71:0b:99:48:4c:0c:78:6f:67:a8:98:13:f7:
-                    99:59:a0:fc:78:d8:7e:05:cc:1c:4c:4d:ff:c0:a7:
-                    85:8f:c0:f8:c2:10:51:a2:a6:9b:38:a1:a8:7f:e3:
-                    7c:df:be:f7:8c:62:9a:83:c6:a5:ab:63:26:9e:71:
-                    25:26:7d:dc:05:09:b3:76:e8:de:90:07:6d:6d:d1:
-                    33:a5:3a:64:90:c0:50:2e:d6:a9:84:2e:f2:7c:11:
-                    49:4c:c5:e2:50:c3:b9:9c:0f:ac:8f:07:19:74:63:
-                    00:12:8a:ec:6f:4f:86:8a:9b:af:2a:c2:21:f1:98:
-                    88:eb:4a:23:2c:7d:25:9f:fd:2a:3e:b0:3d:f5:66:
-                    bf:a7:07:42:7d:04:70:62:d3:4b:88:92:af:74:6e:
-                    20:4c:55:5e:9e:de:29:a6:58:66:1a:8d:c4:af:b5:
-                    22:44:29:ee:b6:03:66:8e:4b:a6:ca:77:3d:91:08:
-                    c0:b2:e0:70:c8:e6:d1:fb:db:09:86:7c:ad:f5:20:
-                    76:10:1d:fc:bf:98:05:0b:b1:6e:47:d8:ce:4b:aa:
-                    02:7c:ec:3e:8a:b0:22:f9:3d:fc:8e:60:45:1b:cc:
-                    c9:a5
+                    00:c0:09:a1:9e:ee:82:f0:68:53:6a:73:07:41:90:
+                    99:39:c7:19:b8:07:c4:f7:45:b5:fb:f0:f5:72:6c:
+                    8c:c1:5a:27:85:70:1a:3b:9a:62:50:99:00:2e:fa:
+                    64:08:19:34:03:67:27:b6:c8:9c:81:5a:94:2a:85:
+                    1c:ce:a9:b1:79:6a:15:df:81:64:72:0e:f7:a8:72:
+                    74:13:01:e2:22:cf:c1:08:a8:e2:32:a3:30:8b:e5:
+                    74:b8:83:fe:41:34:d1:c4:04:99:22:5c:ba:1b:11:
+                    d9:fe:2a:76:b4:7c:6a:67:d7:9e:a6:b7:28:33:96:
+                    a9:45:61:c0:3f:a6:57:9e:59:ea:dd:7b:2a:fe:9a:
+                    b5:ea:2f:e1:55:30:9a:04:76:42:a1:38:a2:91:83:
+                    99:d3:f6:71:2c:06:b4:f7:9c:dd:49:91:2d:82:2f:
+                    64:1e:91:aa:bf:b2:38:6d:ab:56:39:32:63:de:bd:
+                    3c:f1:10:d0:f4:e7:51:4e:03:58:64:c4:13:33:3e:
+                    28:e7:d8:b5:23:49:e7:10:e9:88:da:c7:df:79:17:
+                    db:03:30:49:a1:8a:3c:a2:67:19:ec:f4:db:3e:48:
+                    c0:c9:a5:cd:57:53:5d:51:59:db:43:48:b3:18:cb:
+                    f2:4f:d3:41:7f:7e:92:1c:33:54:49:92:8b:1a:79:
+                    6f:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4C:E1:88:56:8D:23:98:7B:19:E1:6E:D8:1C:E5:06:73:6B:D5:1E:03
+                7E:03:28:0D:3F:DA:96:9C:EC:43:82:73:63:37:03:5A:62:8E:C9:6C
             X509v3 Authority Key Identifier: 
-                keyid:CB:CE:B8:91:FA:EC:E9:A4:15:CA:75:30:F1:C6:9A:B8:19:35:FA:29
+                keyid:AA:28:24:5E:DC:D0:46:7D:F0:CC:7B:98:E4:87:CC:65:73:75:10:DD
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         a6:96:6f:71:a0:4e:f8:17:93:ad:30:1f:2e:e5:6e:bc:4e:83:
-         32:07:95:9f:f6:02:e8:06:5e:a6:51:0a:23:f6:46:06:3c:3d:
-         e6:4d:cc:ac:8c:29:e8:ce:0e:a4:db:11:7d:4f:6e:b7:78:e2:
-         40:1e:0e:74:83:d5:16:7c:c5:6e:3e:41:59:be:d5:0c:ab:05:
-         9f:2f:22:8c:3b:58:ed:72:49:11:b0:0b:21:b9:5d:e0:b8:3f:
-         cd:a0:a0:95:64:c6:8e:45:7d:aa:1b:67:69:13:54:40:0d:99:
-         74:da:b1:9f:5b:9f:ba:e3:b6:aa:5b:e4:b6:d9:6c:46:d3:50:
-         1a:d9:5a:54:b9:2d:a1:da:97:00:7a:6a:71:2a:8e:45:9c:6d:
-         e8:3d:a2:cb:29:44:45:11:5c:a9:64:60:81:88:e4:93:a2:61:
-         ec:87:74:69:bc:9c:61:92:94:eb:42:33:12:29:82:5d:fe:30:
-         9b:9c:bf:47:50:a9:f6:ae:ea:d4:97:39:87:d5:02:c4:45:09:
-         a8:f3:f3:bf:e0:35:45:89:a9:bc:57:34:bf:d4:81:a0:09:4e:
-         2d:15:61:39:0c:43:53:2e:50:fb:31:ab:91:0d:ce:9c:cb:c1:
-         e2:39:e2:76:60:ab:6b:5d:33:b6:0f:a7:c8:f0:61:ed:37:81:
-         83:3a:2b:b4
+         7f:9a:b7:85:57:9c:5e:69:5b:3f:9e:97:11:c1:d6:49:7a:f8:
+         96:83:5d:81:ef:86:fa:75:7a:9e:f1:37:fc:a7:6b:d7:fa:e2:
+         92:d5:05:a8:31:83:48:c2:e1:d9:35:a9:0b:73:77:d5:c7:89:
+         78:e9:48:01:3e:d3:51:eb:34:2e:01:9b:d9:94:c2:e7:31:54:
+         56:f9:7b:2d:12:95:b8:8f:d8:d6:dd:a7:6b:02:6c:3e:9e:37:
+         63:49:8f:e1:be:05:ec:43:6c:53:ff:72:76:73:44:f9:bf:dc:
+         28:79:32:d1:87:06:e1:27:00:9c:80:49:17:4b:ad:79:ab:66:
+         a9:0e:32:34:62:f7:d5:d4:d1:e8:2a:55:c0:3b:7e:4c:c3:cb:
+         a7:67:58:51:97:85:d1:a5:04:ad:53:49:e9:7a:f2:f6:eb:a4:
+         a0:66:e7:8d:9a:83:75:14:cf:29:43:19:56:8b:15:b9:3c:ab:
+         e2:bc:ac:63:f8:6f:6b:2b:f7:26:3e:f5:6c:66:97:ff:10:04:
+         7a:70:4d:a0:af:02:e7:d8:9b:18:de:f4:85:66:3d:08:22:18:
+         4d:12:54:1c:75:9c:55:29:45:93:af:65:39:66:fb:69:74:a2:
+         e0:ab:49:c7:28:08:5e:6a:55:6e:19:51:0b:d2:5a:d9:c4:32:
+         49:e1:8f:1f
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw9jP
-yut6Y7zNU1CgpeckHF6r7utI02Bzq6XDteDqsnELmUhMDHhvZ6iYE/eZWaD8eNh+
-BcwcTE3/wKeFj8D4whBRoqabOKGof+N83773jGKag8alq2MmnnElJn3cBQmzduje
-kAdtbdEzpTpkkMBQLtaphC7yfBFJTMXiUMO5nA+sjwcZdGMAEorsb0+GipuvKsIh
-8ZiI60ojLH0ln/0qPrA99Wa/pwdCfQRwYtNLiJKvdG4gTFVent4pplhmGo3Er7Ui
-RCnutgNmjkumync9kQjAsuBwyObR+9sJhnyt9SB2EB38v5gFC7FuR9jOS6oCfOw+
-irAi+T38jmBFG8zJpQIDAQABo4HrMIHoMB0GA1UdDgQWBBRM4YhWjSOYexnhbtgc
-5QZza9UeAzAfBgNVHSMEGDAWgBTLzriR+uzppBXKdTDxxpq4GTX6KTBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAmh
+nu6C8GhTanMHQZCZOccZuAfE90W1+/D1cmyMwVonhXAaO5piUJkALvpkCBk0A2cn
+tsicgVqUKoUczqmxeWoV34Fkcg73qHJ0EwHiIs/BCKjiMqMwi+V0uIP+QTTRxASZ
+Ily6GxHZ/ip2tHxqZ9eeprcoM5apRWHAP6ZXnlnq3Xsq/pq16i/hVTCaBHZCoTii
+kYOZ0/ZxLAa095zdSZEtgi9kHpGqv7I4batWOTJj3r088RDQ9OdRTgNYZMQTMz4o
+59i1I0nnEOmI2sffeRfbAzBJoYo8omcZ7PTbPkjAyaXNV1NdUVnbQ0izGMvyT9NB
+f36SHDNUSZKLGnlvowIDAQABo4HrMIHoMB0GA1UdDgQWBBR+AygNP9qWnOxDgnNj
+NwNaYo7JbDAfBgNVHSMEGDAWgBSqKCRe3NBGffDMe5jkh8xlc3UQ3TBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAppZvcaBO+BeTrTAf
-LuVuvE6DMgeVn/YC6AZeplEKI/ZGBjw95k3MrIwp6M4OpNsRfU9ut3jiQB4OdIPV
-FnzFbj5BWb7VDKsFny8ijDtY7XJJEbALIbld4Lg/zaCglWTGjkV9qhtnaRNUQA2Z
-dNqxn1ufuuO2qlvkttlsRtNQGtlaVLktodqXAHpqcSqORZxt6D2iyylERRFcqWRg
-gYjkk6Jh7Id0abycYZKU60IzEimCXf4wm5y/R1Cp9q7q1Jc5h9UCxEUJqPPzv+A1
-RYmpvFc0v9SBoAlOLRVhOQxDUy5Q+zGrkQ3OnMvB4jnidmCra10ztg+nyPBh7TeB
-gzortA==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAf5q3hVecXmlbP56X
+EcHWSXr4loNdge+G+nV6nvE3/Kdr1/riktUFqDGDSMLh2TWpC3N31ceJeOlIAT7T
+Ues0LgGb2ZTC5zFUVvl7LRKVuI/Y1t2nawJsPp43Y0mP4b4F7ENsU/9ydnNE+b/c
+KHky0YcG4ScAnIBJF0uteatmqQ4yNGL31dTR6CpVwDt+TMPLp2dYUZeF0aUErVNJ
+6Xry9uukoGbnjZqDdRTPKUMZVosVuTyr4rysY/hvayv3Jj71bGaX/xAEenBNoK8C
+59ibGN70hWY9CCIYTRJUHHWcVSlFk69lOWb7aXSi4KtJxygIXmpVbhlRC9Ja2cQy
+SeGPHw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ad:d8:fa:e5:f4:8b:41:38:13:dc:61:ad:db:db:
-                    3d:f6:be:e2:fd:9d:63:a2:eb:4a:8d:c8:03:6b:d2:
-                    c3:18:29:e6:93:92:5f:d0:c5:b2:3c:05:cd:79:c9:
-                    25:dd:e8:fc:68:83:f1:d9:95:15:22:8f:27:eb:bf:
-                    1f:ed:78:ce:34:b7:60:66:ee:4a:40:9f:e3:95:d0:
-                    32:47:67:80:6c:37:1c:3d:3a:e8:3e:14:2d:5b:97:
-                    b3:40:85:28:a9:10:f0:fb:c9:eb:51:be:b6:c6:8a:
-                    ca:60:cd:31:b7:b0:d3:bd:eb:5c:8a:14:89:38:47:
-                    cb:18:2b:11:f7:a7:9e:9d:f3:76:82:97:c4:78:61:
-                    8c:ec:90:ac:f2:a8:2e:bf:d8:30:48:52:94:7f:48:
-                    f6:fb:4b:e6:0a:63:89:ad:8a:4d:8d:3e:dc:45:06:
-                    89:e9:94:24:5b:d4:94:50:de:05:cf:87:59:66:fb:
-                    70:62:84:3c:fe:d9:1b:02:92:30:80:cb:45:43:e4:
-                    55:47:97:2e:99:59:22:86:6f:51:3a:24:13:26:e8:
-                    10:c9:92:35:13:6f:4a:39:c5:71:d2:c3:63:a5:11:
-                    f8:6e:dc:fa:75:5c:4b:29:24:04:9f:e3:f4:f0:49:
-                    55:7e:0a:8c:6c:44:b4:a4:35:c7:b0:54:10:a4:b1:
-                    6f:95
+                    00:9f:83:f1:81:a2:07:a9:04:bd:e2:cb:3a:33:b1:
+                    6d:77:ba:76:14:81:ef:3d:9f:ec:c3:67:f4:33:65:
+                    43:4c:1a:0d:ca:d7:3c:4d:20:19:62:1c:a2:2c:61:
+                    85:84:45:b1:e0:6d:85:13:36:06:5a:78:44:b4:c9:
+                    13:ee:b6:d3:c2:0d:a9:3f:c7:4e:01:e8:85:a8:36:
+                    96:a3:76:30:e5:90:2f:32:0d:f7:53:33:80:95:84:
+                    41:23:ff:1c:3b:ea:ae:fa:89:59:fc:ed:ba:f5:e5:
+                    60:c3:e8:c3:09:62:d2:9c:b8:20:e0:fb:09:f9:d7:
+                    1f:f7:9a:a2:c4:8c:0e:2c:d1:84:eb:25:ee:63:e9:
+                    ed:20:1a:69:11:7f:25:07:05:73:92:78:11:f0:65:
+                    99:3e:dd:98:0f:b4:5b:a5:d9:8e:89:d2:80:8c:57:
+                    b9:96:cf:bc:55:93:67:37:6f:42:e9:ff:a3:18:ff:
+                    a1:5c:6c:91:53:92:f2:9b:14:74:4c:83:fd:c2:77:
+                    bc:f1:6a:1d:c6:e8:eb:78:1b:b2:78:31:b0:5f:40:
+                    d8:48:29:1e:8f:1d:f2:61:ff:8f:50:95:23:1f:bf:
+                    67:f7:2f:bb:2e:4c:bd:82:1a:c2:2f:6f:fc:e9:86:
+                    d7:a7:96:ff:af:4d:56:74:c6:6a:61:89:5d:c5:70:
+                    fa:97
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CB:CE:B8:91:FA:EC:E9:A4:15:CA:75:30:F1:C6:9A:B8:19:35:FA:29
+                AA:28:24:5E:DC:D0:46:7D:F0:CC:7B:98:E4:87:CC:65:73:75:10:DD
             X509v3 Authority Key Identifier: 
-                keyid:58:20:BB:27:E1:6D:B0:95:1A:D3:40:A1:81:79:89:63:34:21:9F:13
+                keyid:C9:4B:55:76:1D:36:AA:D3:17:AF:7B:4E:7D:9B:4A:B3:1B:CC:98:0F
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         5c:fb:a9:0c:98:92:b4:e2:3c:b1:57:ae:7d:4c:17:b3:44:0e:
-         df:f8:c5:96:e3:1c:10:c2:1b:cf:26:b8:b8:45:3b:e2:3a:54:
-         d9:2a:ce:2d:70:ef:7d:e7:0a:f8:c4:3e:c2:11:65:58:c2:9c:
-         57:0f:82:6f:ad:d5:c3:75:fe:7a:eb:3e:51:13:a9:04:18:37:
-         6a:e1:86:11:7f:3b:9d:5a:eb:29:ec:ef:d1:3b:df:13:f4:66:
-         87:31:2e:b7:75:b0:31:02:b6:47:98:d6:f5:3d:35:7e:18:ac:
-         53:86:4e:d2:d4:93:ac:7a:20:04:8f:58:9b:15:58:ad:7a:b3:
-         3e:a0:11:57:92:96:2a:d4:b9:16:e9:f0:8b:70:67:4b:21:58:
-         80:8e:43:21:ba:62:22:46:96:d2:f0:48:82:69:c5:51:ba:22:
-         32:a0:50:cf:48:1f:1a:35:05:41:23:4e:93:a2:43:e6:83:d9:
-         ae:32:1e:95:72:24:61:79:09:4c:62:d0:1c:42:60:c5:8c:0c:
-         6f:a1:8c:29:8c:68:e3:b8:da:44:83:f6:04:ab:e2:85:e4:6a:
-         f6:ca:ed:95:e3:a0:81:4e:79:1e:cb:46:a1:83:4b:19:23:52:
-         ae:b3:80:d7:7c:4f:05:8c:78:55:e2:fc:ec:80:74:5b:3e:7d:
-         16:e3:71:5a
+         93:36:2f:99:80:bd:df:c6:46:2e:d2:42:5b:f1:bd:08:4c:de:
+         13:db:16:29:99:58:b2:35:ea:10:35:23:29:db:45:fe:a9:bb:
+         00:16:4a:57:77:84:74:05:1f:c1:9d:6d:43:bc:09:38:52:21:
+         1a:af:8f:fa:0b:a6:02:ad:fa:0f:b5:49:bc:48:c6:20:88:73:
+         a1:0f:3f:33:c1:fa:0c:5c:80:c0:e9:c5:cd:0f:8f:20:b0:45:
+         f0:90:0d:4e:89:21:46:2a:77:a3:72:7f:0c:73:7d:44:f3:da:
+         4a:8a:68:92:33:85:94:8e:26:a7:c2:d8:33:86:48:0d:67:94:
+         dc:16:fc:5c:00:e7:9e:5a:e7:46:1d:3c:77:99:11:9f:65:fb:
+         ce:55:87:57:12:3a:f0:c3:fc:43:d0:33:58:e5:74:0d:db:bd:
+         a3:4c:f8:7e:73:16:fd:dc:87:4b:1c:21:a1:35:04:7a:ec:2b:
+         44:2f:b5:c7:22:d6:a3:c3:a8:cf:0d:72:f5:b4:3e:30:2d:6e:
+         f3:0e:77:b0:6d:7c:06:01:b1:94:b4:c8:99:84:04:17:e8:e8:
+         0a:4e:b0:c0:82:17:8c:b2:f2:b5:f5:ed:51:af:19:52:89:4b:
+         f6:76:41:b8:77:a0:42:23:21:18:87:4a:0b:21:3d:de:19:0d:
+         47:81:c6:14
 -----BEGIN CERTIFICATE-----
 MIIDjDCCAnSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3Y+uX0i0E4E9xhrdvbPfa+4v2dY6LrSo3IA2vSwxgp5pOSX9DFsjwFzXnJ
-Jd3o/GiD8dmVFSKPJ+u/H+14zjS3YGbuSkCf45XQMkdngGw3HD066D4ULVuXs0CF
-KKkQ8PvJ61G+tsaKymDNMbew073rXIoUiThHyxgrEfennp3zdoKXxHhhjOyQrPKo
-Lr/YMEhSlH9I9vtL5gpjia2KTY0+3EUGiemUJFvUlFDeBc+HWWb7cGKEPP7ZGwKS
-MIDLRUPkVUeXLplZIoZvUTokEyboEMmSNRNvSjnFcdLDY6UR+G7c+nVcSykkBJ/j
-9PBJVX4KjGxEtKQ1x7BUEKSxb5UCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUy864kfrs
-6aQVynUw8caauBk1+ikwHwYDVR0jBBgwFoAUWCC7J+FtsJUa00ChgXmJYzQhnxMw
+ggEBAJ+D8YGiB6kEveLLOjOxbXe6dhSB7z2f7MNn9DNlQ0waDcrXPE0gGWIcoixh
+hYRFseBthRM2Blp4RLTJE+6208INqT/HTgHohag2lqN2MOWQLzIN91MzgJWEQSP/
+HDvqrvqJWfztuvXlYMPowwli0py4IOD7CfnXH/eaosSMDizRhOsl7mPp7SAaaRF/
+JQcFc5J4EfBlmT7dmA+0W6XZjonSgIxXuZbPvFWTZzdvQun/oxj/oVxskVOS8psU
+dEyD/cJ3vPFqHcbo63gbsngxsF9A2EgpHo8d8mH/j1CVIx+/Z/cvuy5MvYIawi9v
+/OmG16eW/69NVnTGamGJXcVw+pcCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUqigkXtzQ
+Rn3wzHuY5IfMZXN1EN0wHwYDVR0jBBgwFoAUyUtVdh02qtMXr3tOfZtKsxvMmA8w
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB
-Af8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUAA4IBAQBc+6kMmJK04jyxV659TBez
-RA7f+MWW4xwQwhvPJri4RTviOlTZKs4tcO995wr4xD7CEWVYwpxXD4JvrdXDdf56
-6z5RE6kEGDdq4YYRfzudWusp7O/RO98T9GaHMS63dbAxArZHmNb1PTV+GKxThk7S
-1JOseiAEj1ibFViterM+oBFXkpYq1LkW6fCLcGdLIViAjkMhumIiRpbS8EiCacVR
-uiIyoFDPSB8aNQVBI06TokPmg9muMh6VciRheQlMYtAcQmDFjAxvoYwpjGjjuNpE
-g/YEq+KF5Gr2yu2V46CBTnkey0ahg0sZI1Kus4DXfE8FjHhV4vzsgHRbPn0W43Fa
+Af8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUAA4IBAQCTNi+ZgL3fxkYu0kJb8b0I
+TN4T2xYpmViyNeoQNSMp20X+qbsAFkpXd4R0BR/BnW1DvAk4UiEar4/6C6YCrfoP
+tUm8SMYgiHOhDz8zwfoMXIDA6cXND48gsEXwkA1OiSFGKnejcn8Mc31E89pKimiS
+M4WUjianwtgzhkgNZ5TcFvxcAOeeWudGHTx3mRGfZfvOVYdXEjrww/xD0DNY5XQN
+272jTPh+cxb93IdLHCGhNQR67CtEL7XHItajw6jPDXL1tD4wLW7zDnewbXwGAbGU
+tMiZhAQX6OgKTrDAgheMsvK19e1RrxlSiUv2dkG4d6BCIyEYh0oLIT3eGQ1HgcYU
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e6:65:53:d1:2e:4e:ad:28:ff:05:13:1b:64:08:
-                    aa:e6:b7:44:64:94:4c:0e:a4:68:80:12:7d:07:ce:
-                    6a:ec:c8:4b:cc:a1:3f:af:f4:c8:45:0e:b2:66:46:
-                    b3:fd:ef:68:5d:04:c0:95:e9:71:45:b2:26:12:16:
-                    78:b1:75:15:39:a1:da:2a:b0:d7:7c:52:11:8b:1a:
-                    b0:46:19:fb:71:d0:8f:13:3d:2e:ee:bc:75:97:4d:
-                    b1:b6:7b:d5:b6:36:44:5b:75:d1:00:b3:a3:60:9f:
-                    92:34:c1:50:52:30:89:54:35:24:fa:7d:ea:5a:32:
-                    ca:11:aa:12:1c:55:74:fd:5b:98:ad:0d:04:d3:b3:
-                    12:cd:a4:f9:7c:54:e1:1f:01:cd:ad:c6:0e:cc:ae:
-                    8c:89:d3:ff:a6:f7:2b:9f:67:d8:55:c2:a9:4a:5f:
-                    e8:d6:96:0d:14:68:79:23:84:d0:5f:59:99:f6:8e:
-                    9c:34:da:b6:d2:37:cc:de:8d:44:ba:e4:bb:f0:6f:
-                    f1:60:d2:0d:22:28:41:98:e8:9a:dd:18:b5:30:45:
-                    fd:3b:7a:27:0f:16:08:07:02:83:aa:e0:68:ba:47:
-                    44:48:84:ea:da:51:c1:ec:7b:cb:1e:25:11:3d:fd:
-                    ce:53:1a:39:0a:fc:42:82:3d:cc:a5:93:00:c6:27:
-                    62:75
+                    00:b8:f5:de:e4:4c:28:1d:c6:b4:b3:0f:0e:88:9b:
+                    b1:3b:70:28:5e:69:4d:e6:fe:cf:16:d7:84:88:bf:
+                    da:b4:85:b8:90:cc:be:bf:b4:88:7d:e9:31:b3:a1:
+                    69:fc:59:7f:8c:e2:aa:2e:94:d2:4e:4f:cf:1e:03:
+                    ac:c3:c2:de:8b:d5:20:f5:5b:13:91:f5:3f:39:c7:
+                    47:d0:4b:31:7b:bc:4e:1d:a6:ba:84:96:a0:b5:73:
+                    cb:c3:8d:9e:3e:b8:2f:70:60:bf:c4:39:f1:d6:61:
+                    68:5c:8a:38:35:14:5e:ea:fd:8b:cf:ef:6e:a3:e6:
+                    0b:bf:1f:3e:2c:4b:1e:fd:5a:56:11:19:23:05:27:
+                    cf:0b:27:b3:f6:7a:da:0a:f6:df:98:7e:b7:66:64:
+                    f8:0f:89:95:f4:c0:d9:83:45:87:3e:72:38:ce:60:
+                    cb:56:4b:07:7b:2c:9e:12:1f:19:1d:fe:c2:a8:bc:
+                    e0:1b:15:b5:9d:24:29:d9:39:c3:2d:9a:ac:0e:92:
+                    56:15:85:69:60:2b:ca:2e:f6:95:e7:65:91:a4:15:
+                    09:0c:48:8b:b1:5a:37:52:b7:0a:45:41:64:2e:27:
+                    92:96:12:69:b7:4a:c6:f0:bf:b4:65:53:17:de:1d:
+                    b2:a5:19:31:18:76:8f:84:1d:33:4a:18:e0:b6:3f:
+                    61:a7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                58:20:BB:27:E1:6D:B0:95:1A:D3:40:A1:81:79:89:63:34:21:9F:13
+                C9:4B:55:76:1D:36:AA:D3:17:AF:7B:4E:7D:9B:4A:B3:1B:CC:98:0F
             X509v3 Authority Key Identifier: 
-                keyid:7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                keyid:8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:0
     Signature Algorithm: sha256WithRSAEncryption
-         37:db:eb:ca:f7:4c:e8:8d:30:46:40:83:77:7b:84:85:66:06:
-         20:10:22:e9:f3:f0:5e:41:27:7d:dd:01:2a:c0:20:74:a6:f5:
-         d3:30:01:40:4a:4c:60:b0:9d:da:2f:71:90:c5:19:97:cc:af:
-         a2:e3:cc:fe:6e:e6:fa:5d:11:50:e6:ef:a9:b0:15:f8:da:26:
-         51:b9:2e:1e:82:44:ec:13:e5:8d:27:2d:b1:31:97:cd:43:04:
-         8a:70:ca:51:e3:2c:9e:93:9a:48:36:a1:46:56:08:e1:43:1c:
-         d7:96:aa:44:c2:3a:a2:e7:91:ac:91:28:fb:03:9c:e7:13:d1:
-         eb:c0:33:7b:3b:ff:c2:fc:af:68:36:54:57:f4:b8:2a:9d:de:
-         78:3c:8e:ad:0d:d8:dd:4b:e7:50:41:0a:ae:7a:08:d7:5e:3b:
-         2a:71:d5:88:ec:99:02:b3:cd:5a:31:26:41:79:e2:3a:49:55:
-         40:7f:26:7f:34:f6:7a:76:28:5e:3d:e9:20:1e:a2:f4:6b:d5:
-         e0:6d:bd:2e:30:1a:69:70:ae:03:d3:ce:b3:76:04:2f:ef:86:
-         4f:77:44:19:6f:94:6a:09:86:60:28:75:63:22:3a:13:5a:d5:
-         13:af:23:08:9c:1f:0d:dc:0f:62:b4:97:85:05:5a:ea:c5:60:
-         8a:02:4d:51
+         a7:ca:29:b4:a5:e7:44:4a:3c:eb:44:9e:9a:f6:14:80:9d:d0:
+         36:71:d3:d7:39:66:e0:65:94:fa:dc:09:14:2e:5a:13:82:66:
+         c5:cf:95:fe:76:f1:7e:18:76:b6:0f:02:13:52:e2:72:c2:cf:
+         5c:42:31:81:dc:9b:93:9e:8c:e9:ac:cf:5c:eb:ff:db:37:4a:
+         5c:39:74:51:87:3b:42:26:17:06:d2:0e:bc:ba:3a:9c:7b:3c:
+         8c:5d:d3:9e:d3:6f:5f:88:3a:2f:da:9f:ad:bb:b8:4a:5f:df:
+         94:aa:ad:4c:8f:c0:7c:d6:c8:d8:9b:93:c9:71:fd:fa:7f:20:
+         9b:f3:3a:16:54:02:8a:81:7b:b3:2f:05:55:ca:34:dc:6a:f8:
+         d9:f9:70:d4:c4:cc:44:8b:a6:e0:45:89:da:21:10:96:e8:2c:
+         84:63:47:f1:a4:7b:da:cb:10:23:f7:45:bd:45:65:6a:03:8c:
+         42:23:15:e9:bf:5b:f7:4c:df:2a:8b:c5:82:3a:7a:4c:9f:85:
+         db:a1:02:ba:60:07:2e:fc:fa:22:b5:8e:b1:db:1b:b7:cb:5e:
+         e2:f1:5b:33:88:cd:82:61:d5:dc:7e:7e:68:29:7e:b0:20:b0:
+         72:e8:f4:4b:74:26:76:cf:3e:b3:98:18:37:de:05:3d:11:d3:
+         8a:5d:4e:d1
 -----BEGIN CERTIFICATE-----
 MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOZlU9Eu
-Tq0o/wUTG2QIqua3RGSUTA6kaIASfQfOauzIS8yhP6/0yEUOsmZGs/3vaF0EwJXp
-cUWyJhIWeLF1FTmh2iqw13xSEYsasEYZ+3HQjxM9Lu68dZdNsbZ71bY2RFt10QCz
-o2CfkjTBUFIwiVQ1JPp96loyyhGqEhxVdP1bmK0NBNOzEs2k+XxU4R8Bza3GDsyu
-jInT/6b3K59n2FXCqUpf6NaWDRRoeSOE0F9ZmfaOnDTattI3zN6NRLrku/Bv8WDS
-DSIoQZjomt0YtTBF/Tt6Jw8WCAcCg6rgaLpHREiE6tpRwex7yx4lET39zlMaOQr8
-QoI9zKWTAMYnYnUCAwEAAaOBzjCByzAdBgNVHQ4EFgQUWCC7J+FtsJUa00ChgXmJ
-YzQhnxMwHwYDVR0jBBgwFoAUej1tryI/ZMpcyLM91eU7MqACzykwNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALj13uRM
+KB3GtLMPDoibsTtwKF5pTeb+zxbXhIi/2rSFuJDMvr+0iH3pMbOhafxZf4ziqi6U
+0k5Pzx4DrMPC3ovVIPVbE5H1PznHR9BLMXu8Th2muoSWoLVzy8ONnj64L3Bgv8Q5
+8dZhaFyKODUUXur9i8/vbqPmC78fPixLHv1aVhEZIwUnzwsns/Z62gr235h+t2Zk
++A+JlfTA2YNFhz5yOM5gy1ZLB3ssnhIfGR3+wqi84BsVtZ0kKdk5wy2arA6SVhWF
+aWAryi72ledlkaQVCQxIi7FaN1K3CkVBZC4nkpYSabdKxvC/tGVTF94dsqUZMRh2
+j4QdM0oY4LY/YacCAwEAAaOBzjCByzAdBgNVHQ4EFgQUyUtVdh02qtMXr3tOfZtK
+sxvMmA8wHwYDVR0jBBgwFoAUjbFttJVwiNqVi4gAmBnVk+MD/wQwNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUA
-A4IBAQA32+vK90zojTBGQIN3e4SFZgYgECLp8/BeQSd93QEqwCB0pvXTMAFASkxg
-sJ3aL3GQxRmXzK+i48z+bub6XRFQ5u+psBX42iZRuS4egkTsE+WNJy2xMZfNQwSK
-cMpR4yyek5pINqFGVgjhQxzXlqpEwjqi55GskSj7A5znE9HrwDN7O//C/K9oNlRX
-9Lgqnd54PI6tDdjdS+dQQQquegjXXjsqcdWI7JkCs81aMSZBeeI6SVVAfyZ/NPZ6
-dihePekgHqL0a9Xgbb0uMBppcK4D086zdgQv74ZPd0QZb5RqCYZgKHVjIjoTWtUT
-ryMInB8N3A9itJeFBVrqxWCKAk1R
+A4IBAQCnyim0pedESjzrRJ6a9hSAndA2cdPXOWbgZZT63AkULloTgmbFz5X+dvF+
+GHa2DwITUuJyws9cQjGB3JuTnozprM9c6//bN0pcOXRRhztCJhcG0g68ujqcezyM
+XdOe029fiDov2p+tu7hKX9+Uqq1Mj8B81sjYm5PJcf36fyCb8zoWVAKKgXuzLwVV
+yjTcavjZ+XDUxMxEi6bgRYnaIRCW6CyEY0fxpHvayxAj90W9RWVqA4xCIxXpv1v3
+TN8qi8WCOnpMn4XboQK6YAcu/PoitY6x2xu3y17i8VsziM2CYdXcfn5oKX6wILBy
+6PRLdCZ2zz6zmBg33gU9EdOKXU7R
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cd:87:9d:f4:66:f8:77:5c:e3:56:6d:cb:12:dc:
-                    a9:36:79:d5:1b:11:9f:92:20:8d:e6:d7:7d:41:8e:
-                    90:90:2a:a8:63:3d:59:25:a6:7a:86:73:7f:10:da:
-                    9f:c1:a5:69:4d:a3:67:61:b8:f8:9b:9b:ec:4a:3a:
-                    f1:73:f1:83:c4:ab:34:1f:0b:ed:05:f3:6d:c5:ee:
-                    64:18:34:69:5f:09:1f:48:e5:d2:2d:12:4c:17:a3:
-                    7e:74:9f:93:04:ea:00:15:e3:b9:0d:ef:c5:ed:19:
-                    97:2b:12:05:7f:5c:32:2d:c5:30:46:7c:a7:02:27:
-                    29:b2:99:e1:43:95:f6:67:1c:ee:ad:9b:8e:fb:f8:
-                    57:1a:47:13:5a:1a:2f:27:e8:d5:03:2a:e5:f9:92:
-                    53:1d:03:5f:d6:2f:18:65:ce:3a:6e:ab:bf:b6:c5:
-                    72:e1:c9:a0:d6:3c:a2:8e:4f:3e:8f:06:52:19:a8:
-                    1a:f0:06:55:d2:f9:be:23:27:0a:de:33:26:ec:a0:
-                    41:d3:6b:56:25:70:09:ac:28:45:82:33:cb:db:85:
-                    59:50:61:9c:12:e0:04:cc:c5:81:3c:77:d7:9d:8e:
-                    59:d3:70:4d:4e:47:0a:f7:ef:6c:33:54:db:61:ee:
-                    31:cb:8d:43:59:ec:a1:3d:a4:c6:06:6e:05:b2:14:
-                    d6:ad
+                    00:bd:94:f6:d9:65:c1:00:59:e4:7b:96:d6:5a:cb:
+                    f4:ea:23:2b:5d:cf:e1:4e:51:c3:20:eb:4b:90:8e:
+                    4a:e2:22:e7:68:55:51:33:a9:5a:4d:ee:cd:d2:e0:
+                    32:d7:41:7f:c8:59:78:19:1c:d1:e8:ef:58:70:11:
+                    3c:ef:1a:a9:c6:ef:33:33:ee:e1:6b:f5:e1:3c:a7:
+                    64:2b:66:8b:04:05:9d:98:63:34:03:68:50:98:6c:
+                    7d:f3:f3:92:68:08:54:61:5a:fe:bc:8b:b5:c1:35:
+                    98:32:5f:93:59:6f:40:b4:99:b9:d8:82:b9:4f:f0:
+                    72:0a:9c:55:89:40:d1:b9:35:81:1e:39:d1:fd:32:
+                    fe:1d:64:02:82:97:14:c1:ee:77:0f:2d:9b:3a:86:
+                    38:46:2c:e9:b0:0f:98:45:04:f5:10:5b:58:34:c7:
+                    a1:92:69:f4:26:cf:1a:2d:fb:78:2a:81:3c:56:90:
+                    e3:6b:44:16:a0:75:44:41:a7:ef:75:a4:19:5a:f4:
+                    d9:14:93:bc:98:a9:f7:04:e0:e6:69:67:a1:70:c0:
+                    c0:43:67:ef:dd:6c:e2:ea:8c:7d:00:b3:51:5c:9f:
+                    50:11:93:2b:cb:c5:af:f6:32:d3:47:eb:09:1b:e6:
+                    8a:12:0e:9a:6e:48:34:30:91:d4:87:a1:71:1d:1e:
+                    11:a9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
             X509v3 Authority Key Identifier: 
-                keyid:7A:3D:6D:AF:22:3F:64:CA:5C:C8:B3:3D:D5:E5:3B:32:A0:02:CF:29
+                keyid:8D:B1:6D:B4:95:70:88:DA:95:8B:88:00:98:19:D5:93:E3:03:FF:04
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         20:3e:c4:b6:78:84:bd:36:33:6b:38:8e:f2:1f:1a:46:a7:d9:
-         02:86:39:d2:3f:14:bd:a9:82:21:b0:9d:da:a9:4f:0a:e8:65:
-         0b:7f:b7:cd:d9:3c:de:7f:08:d6:d9:60:ba:b2:be:4d:8a:77:
-         e4:4d:fe:8c:5d:27:e6:8a:0c:6c:e1:3c:7b:e2:d2:4c:ac:34:
-         fe:1e:b1:28:e6:b7:49:a8:09:bf:67:80:0f:8f:02:49:d4:52:
-         6e:bf:d1:a7:b8:b4:22:90:f8:83:d5:85:7f:46:99:2d:df:cb:
-         56:31:0c:0e:92:9b:eb:28:6e:c2:7c:ba:37:5d:3f:f0:f8:b5:
-         e2:0a:02:ea:78:c3:5c:8d:24:92:95:52:bf:68:3e:2b:fc:17:
-         bc:bb:3c:7c:38:f8:6e:5f:d3:1d:9e:4c:c5:3a:47:93:4d:a6:
-         c2:00:f2:2a:7a:a1:f0:76:48:5a:ef:77:1c:47:10:40:d8:d5:
-         84:45:13:f6:5e:7c:d2:0e:bd:e3:e3:b1:3d:d5:93:e1:c4:95:
-         a1:ba:84:0d:a0:1c:b0:cd:b6:b4:a2:52:2e:37:c2:f3:30:3e:
-         91:0b:24:9d:3d:77:02:ce:83:b0:73:21:ba:3f:f6:b9:c7:5d:
-         08:5c:f0:33:8d:de:1e:56:e8:82:2f:5d:e6:8c:0c:ac:77:c7:
-         bf:91:2a:25
+         59:52:44:8b:cc:9b:f4:2f:79:36:ae:25:5c:f0:38:bf:aa:35:
+         02:ac:eb:76:02:3a:bd:5f:8f:36:d0:26:3e:c1:a4:00:79:19:
+         70:fb:97:0e:47:79:94:2b:ac:93:72:95:de:bb:a2:27:4a:f6:
+         6a:4c:af:ff:e8:df:93:7b:f6:ab:14:b5:0f:fe:b3:33:7a:73:
+         f0:29:66:01:21:b6:ea:ed:c6:d4:ae:94:41:4c:8d:07:e6:61:
+         fc:ea:88:88:d0:cc:52:7e:9a:3a:db:b9:2a:30:67:5a:00:4d:
+         a0:fa:ec:a2:a2:f2:cd:ae:a2:ca:84:c5:44:f4:26:12:17:49:
+         4b:bb:ee:cb:ca:b2:38:2d:08:54:6b:e9:9a:34:ad:d8:f3:70:
+         bc:12:88:f1:06:2b:f4:28:ca:12:e4:02:76:29:b0:8f:6e:4e:
+         7f:5b:ca:d1:a1:53:fa:7b:7b:97:a3:6d:a0:8d:48:36:7f:3b:
+         cf:e2:7a:f6:ea:86:dc:a3:6d:8f:21:81:24:32:15:23:9f:85:
+         9b:af:dc:75:19:22:28:9e:47:83:2e:04:37:f6:45:56:25:bf:
+         1b:92:9a:39:ee:06:10:80:c1:7f:61:43:bb:51:aa:fc:0e:0c:
+         50:09:2b:b8:c9:7e:ce:19:02:60:b2:65:db:84:9b:b5:4f:1b:
+         0b:b8:fe:0c
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM2HnfRm+Hdc41ZtyxLc
-qTZ51RsRn5IgjebXfUGOkJAqqGM9WSWmeoZzfxDan8GlaU2jZ2G4+Jub7Eo68XPx
-g8SrNB8L7QXzbcXuZBg0aV8JH0jl0i0STBejfnSfkwTqABXjuQ3vxe0ZlysSBX9c
-Mi3FMEZ8pwInKbKZ4UOV9mcc7q2bjvv4VxpHE1oaLyfo1QMq5fmSUx0DX9YvGGXO
-Om6rv7bFcuHJoNY8oo5PPo8GUhmoGvAGVdL5viMnCt4zJuygQdNrViVwCawoRYIz
-y9uFWVBhnBLgBMzFgTx3152OWdNwTU5HCvfvbDNU22HuMcuNQ1nsoT2kxgZuBbIU
-1q0CAwEAAaOByzCByDAdBgNVHQ4EFgQUej1tryI/ZMpcyLM91eU7MqACzykwHwYD
-VR0jBBgwFoAUej1tryI/ZMpcyLM91eU7MqACzykwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2U9tllwQBZ5HuW1lrL
+9OojK13P4U5RwyDrS5COSuIi52hVUTOpWk3uzdLgMtdBf8hZeBkc0ejvWHARPO8a
+qcbvMzPu4Wv14TynZCtmiwQFnZhjNANoUJhsffPzkmgIVGFa/ryLtcE1mDJfk1lv
+QLSZudiCuU/wcgqcVYlA0bk1gR450f0y/h1kAoKXFMHudw8tmzqGOEYs6bAPmEUE
+9RBbWDTHoZJp9CbPGi37eCqBPFaQ42tEFqB1REGn73WkGVr02RSTvJip9wTg5mln
+oXDAwENn791s4uqMfQCzUVyfUBGTK8vFr/Yy00frCRvmihIOmm5INDCR1IehcR0e
+EakCAwEAAaOByzCByDAdBgNVHQ4EFgQUjbFttJVwiNqVi4gAmBnVk+MD/wQwHwYD
+VR0jBBgwFoAUjbFttJVwiNqVi4gAmBnVk+MD/wQwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAgPsS2eIS9
-NjNrOI7yHxpGp9kChjnSPxS9qYIhsJ3aqU8K6GULf7fN2TzefwjW2WC6sr5Ninfk
-Tf6MXSfmigxs4Tx74tJMrDT+HrEo5rdJqAm/Z4APjwJJ1FJuv9GnuLQikPiD1YV/
-Rpkt38tWMQwOkpvrKG7CfLo3XT/w+LXiCgLqeMNcjSSSlVK/aD4r/Be8uzx8OPhu
-X9MdnkzFOkeTTabCAPIqeqHwdkha73ccRxBA2NWERRP2XnzSDr3j47E91ZPhxJWh
-uoQNoBywzba0olIuN8LzMD6RCySdPXcCzoOwcyG6P/a5x10IXPAzjd4eVuiCL13m
-jAysd8e/kSol
+AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBZUkSLzJv0
+L3k2riVc8Di/qjUCrOt2Ajq9X4820CY+waQAeRlw+5cOR3mUK6yTcpXeu6InSvZq
+TK//6N+Te/arFLUP/rMzenPwKWYBIbbq7cbUrpRBTI0H5mH86oiI0MxSfpo627kq
+MGdaAE2g+uyiovLNrqLKhMVE9CYSF0lLu+7LyrI4LQhUa+maNK3Y83C8EojxBiv0
+KMoS5AJ2KbCPbk5/W8rRoVP6e3uXo22gjUg2fzvP4nr26obco22PIYEkMhUjn4Wb
+r9x1GSIonkeDLgQ39kVWJb8bkpo57gYQgMF/YUO7Uar8DgxQCSu4yX7OGQJgsmXb
+hJu1TxsLuP4M
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -371,6 +371,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
index 0e1f8e4..2b7afd4 100644
--- a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:b3:a3:d6:09:6c:d5:c4:2b:7b:c6:2d:9f:d3:91:
-                    39:f1:53:f0:93:49:96:8d:97:0c:d5:36:1d:7c:86:
-                    4f:2c:12:2c:5a:c9:32:b8:ff:21:71:f4:47:06:6f:
-                    30:08:2e:76:71:04:ec:f1:9d:f1:b0:59:36:03:64:
-                    1f:35:b0:a4:e6:ef:e6:aa:94:4e:d8:6e:aa:9f:92:
-                    63:a6:9a:42:47:fc:30:99:a5:c5:90:11:bb:b5:9d:
-                    b1:b0:ec:12:c2:1f:29:42:57:d7:90:97:78:5f:5c:
-                    28:ab:49:7f:24:f3:2a:0f:68:a2:0a:e5:2a:54:8e:
-                    90:04:71:e2:13:9e:52:2e:c7:e6:ff:35:36:e7:01:
-                    d7:2b:7f:5b:54:c0:20:e6:b3:09:16:e7:13:bb:96:
-                    3e:b7:45:3d:8d:5e:3b:6a:fe:c2:cb:5b:0d:bf:ed:
-                    92:98:74:9e:f1:7b:94:71:d0:b1:50:ec:81:06:3d:
-                    12:39:f2:00:d3:60:9c:3c:9c:5a:a1:58:cc:56:b1:
-                    4f:a7:a1:ec:c7:c5:52:70:81:99:99:a4:ef:de:f4:
-                    0d:c1:c5:ff:c6:83:c6:e8:d4:bd:f8:27:f9:86:e0:
-                    3c:d4:7b:31:17:4d:49:c8:ce:c0:27:6a:4f:0a:fb:
-                    79:75:93:47:b0:05:f8:2e:10:f4:0b:39:ce:f6:43:
-                    87:07
+                    00:d5:ba:49:72:77:98:7a:9b:08:60:5f:15:2d:03:
+                    7a:30:b5:f4:24:b6:0e:7d:31:d6:f5:49:c0:43:c6:
+                    e0:f9:31:65:fc:59:6f:79:77:57:c1:cf:96:e9:db:
+                    ee:56:9a:87:67:be:1c:8b:89:c4:3a:3f:9a:0a:c3:
+                    68:e1:8d:d3:02:be:ca:47:7d:e6:e0:95:db:1c:49:
+                    2a:ef:ad:de:90:b7:b2:20:7c:7e:94:b8:29:4d:8d:
+                    3e:5d:71:35:d2:02:ee:8e:30:ad:83:5a:dd:3f:92:
+                    bc:ba:38:a5:c0:0b:e7:aa:26:fc:b2:56:c9:f7:22:
+                    70:90:a1:3e:b1:36:9a:38:85:93:48:f4:cc:f7:41:
+                    2d:a8:8e:b9:ca:25:a6:af:cd:94:8c:c3:cd:c9:1c:
+                    ea:d7:31:57:3b:e6:01:0e:22:66:10:f0:6f:5c:f9:
+                    c5:0b:24:e3:50:af:97:84:f4:14:fd:94:b3:49:54:
+                    e6:a8:36:3b:e9:be:c6:91:da:87:af:1c:3d:f1:fe:
+                    7c:09:d9:32:95:41:6f:15:c9:9c:53:be:b4:53:78:
+                    34:fa:2e:6e:e6:e3:6a:65:89:d2:97:14:4a:01:d0:
+                    fe:95:7e:36:b4:11:ac:9a:0d:71:27:3b:48:d2:12:
+                    1c:93:e6:f5:87:83:56:cc:e1:01:07:c3:ac:91:6e:
+                    47:53
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                FD:9F:2A:24:CC:3C:CE:DA:6D:41:F0:3B:79:09:11:71:B2:29:31:17
+                A1:89:B4:92:F7:E8:5E:99:00:E0:73:95:EC:15:CF:C9:DC:EF:5A:63
             X509v3 Authority Key Identifier: 
-                keyid:4D:F0:7D:C0:A0:7D:84:3E:38:63:E2:76:18:78:25:8C:09:DD:12:36
+                keyid:F8:CA:7C:B6:29:EB:F9:FB:32:FC:E9:07:44:D0:27:BA:72:2C:E3:CB
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         2b:4d:3f:19:05:a2:6b:66:7e:85:21:18:9a:0c:f0:81:cd:f7:
-         81:71:50:38:95:f4:d0:68:d6:e2:02:9b:f3:08:1e:8c:4a:57:
-         b6:2b:e3:57:7c:ca:70:74:48:ee:d6:5f:2e:f7:b5:fc:95:75:
-         fa:c3:1d:5c:e1:aa:dc:85:cc:4c:2f:a7:05:b6:4f:38:a7:50:
-         44:8c:4a:1f:2c:fc:37:f4:96:a9:03:77:65:b0:5d:a4:36:f9:
-         29:ab:6e:1e:64:47:9b:cd:89:45:85:84:d3:4a:0f:97:87:99:
-         83:15:67:cb:42:80:69:8d:17:89:d0:1a:c5:e5:48:60:86:b3:
-         20:2e:9a:40:7b:ec:90:53:fd:b4:6e:6b:d2:82:2b:5a:5c:e4:
-         fe:ee:16:ec:15:20:f8:4d:07:b6:f0:9a:95:6c:08:d4:d0:b2:
-         09:3d:67:40:13:a6:5b:21:5f:03:4b:d7:c5:83:a9:2d:a1:1b:
-         93:c6:5b:6d:36:85:f7:4c:9c:65:33:ab:e1:8f:e1:18:c1:6b:
-         ec:4c:c7:a4:de:8a:b8:a1:66:a3:94:e3:40:5e:8c:cd:42:e5:
-         f2:8a:e0:5b:19:01:5b:ba:74:eb:11:3b:ac:56:04:6b:a7:22:
-         35:9b:ac:3e:da:12:3f:42:39:3d:7e:7d:ac:1e:3c:c6:7b:09:
-         8f:97:f2:f2
+         e3:49:d6:9b:d3:e2:57:a8:04:4b:37:e5:bc:30:8d:56:33:1c:
+         b6:2e:06:44:9c:1e:14:95:65:64:1c:35:e4:f6:9a:1c:22:c8:
+         7b:84:13:a2:e3:d9:b8:39:56:c8:ad:b1:2a:a1:fa:98:64:f9:
+         ca:c4:bf:ec:0b:eb:2d:85:03:8a:e0:a8:c3:53:88:4a:07:8d:
+         27:36:cc:de:78:51:ae:7e:eb:40:ba:f6:5a:cd:cf:72:7e:56:
+         b3:f1:4a:16:85:04:c2:11:1c:1f:13:4f:f0:93:ec:d4:50:76:
+         30:98:80:db:14:38:2c:b8:bd:ae:28:91:cf:61:ff:d9:22:a0:
+         ea:e0:e9:98:87:93:ea:b3:a0:37:6f:43:ae:dd:85:08:ff:cd:
+         2f:6c:25:71:2b:dc:60:1c:a8:51:bf:ea:a6:95:d7:7b:8c:87:
+         c8:5d:28:14:5e:40:f6:2e:25:a5:7b:e6:a2:3a:a8:58:bc:78:
+         d4:59:67:38:01:6e:2b:8a:8e:19:1c:ac:0b:3d:da:47:60:a7:
+         25:34:9a:4c:69:9a:26:a3:73:ec:04:71:e4:23:ea:08:ea:78:
+         74:80:f3:58:cb:d4:ec:af:8d:b1:a9:00:10:40:25:ed:ee:8c:
+         21:52:cd:e1:3f:f3:b0:4f:2e:4a:51:df:87:74:4e:06:3d:cb:
+         96:7c:29:58
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs6PW
-CWzVxCt7xi2f05E58VPwk0mWjZcM1TYdfIZPLBIsWskyuP8hcfRHBm8wCC52cQTs
-8Z3xsFk2A2QfNbCk5u/mqpRO2G6qn5JjpppCR/wwmaXFkBG7tZ2xsOwSwh8pQlfX
-kJd4X1woq0l/JPMqD2iiCuUqVI6QBHHiE55SLsfm/zU25wHXK39bVMAg5rMJFucT
-u5Y+t0U9jV47av7Cy1sNv+2SmHSe8XuUcdCxUOyBBj0SOfIA02CcPJxaoVjMVrFP
-p6Hsx8VScIGZmaTv3vQNwcX/xoPG6NS9+Cf5huA81HsxF01JyM7AJ2pPCvt5dZNH
-sAX4LhD0CznO9kOHBwIDAQABo4HrMIHoMB0GA1UdDgQWBBT9nyokzDzO2m1B8Dt5
-CRFxsikxFzAfBgNVHSMEGDAWgBRN8H3AoH2EPjhj4nYYeCWMCd0SNjBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1bpJ
+cneYepsIYF8VLQN6MLX0JLYOfTHW9UnAQ8bg+TFl/FlveXdXwc+W6dvuVpqHZ74c
+i4nEOj+aCsNo4Y3TAr7KR33m4JXbHEkq763ekLeyIHx+lLgpTY0+XXE10gLujjCt
+g1rdP5K8ujilwAvnqib8slbJ9yJwkKE+sTaaOIWTSPTM90EtqI65yiWmr82UjMPN
+yRzq1zFXO+YBDiJmEPBvXPnFCyTjUK+XhPQU/ZSzSVTmqDY76b7GkdqHrxw98f58
+CdkylUFvFcmcU760U3g0+i5u5uNqZYnSlxRKAdD+lX42tBGsmg1xJztI0hIck+b1
+h4NWzOEBB8OskW5HUwIDAQABo4HrMIHoMB0GA1UdDgQWBBShibSS9+hemQDgc5Xs
+Fc/J3O9aYzAfBgNVHSMEGDAWgBT4yny2Kev5+zL86QdE0Ce6cizjyzBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAK00/GQWia2Z+hSEY
-mgzwgc33gXFQOJX00GjW4gKb8wgejEpXtivjV3zKcHRI7tZfLve1/JV1+sMdXOGq
-3IXMTC+nBbZPOKdQRIxKHyz8N/SWqQN3ZbBdpDb5KatuHmRHm82JRYWE00oPl4eZ
-gxVny0KAaY0XidAaxeVIYIazIC6aQHvskFP9tG5r0oIrWlzk/u4W7BUg+E0HtvCa
-lWwI1NCyCT1nQBOmWyFfA0vXxYOpLaEbk8ZbbTaF90ycZTOr4Y/hGMFr7EzHpN6K
-uKFmo5TjQF6MzULl8orgWxkBW7p06xE7rFYEa6ciNZusPtoSP0I5PX59rB48xnsJ
-j5fy8g==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEA40nWm9PiV6gESzfl
+vDCNVjMcti4GRJweFJVlZBw15PaaHCLIe4QTouPZuDlWyK2xKqH6mGT5ysS/7Avr
+LYUDiuCow1OISgeNJzbM3nhRrn7rQLr2Ws3Pcn5Ws/FKFoUEwhEcHxNP8JPs1FB2
+MJiA2xQ4LLi9riiRz2H/2SKg6uDpmIeT6rOgN29Drt2FCP/NL2wlcSvcYByoUb/q
+ppXXe4yHyF0oFF5A9i4lpXvmojqoWLx41FlnOAFuK4qOGRysCz3aR2CnJTSaTGma
+JqNz7ARx5CPqCOp4dIDzWMvU7K+NsakAEEAl7e6MIVLN4T/zsE8uSlHfh3ROBj3L
+lnwpWA==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c9:f0:db:40:19:44:5e:67:d4:e7:dd:4f:67:12:
-                    71:af:2a:42:76:de:6a:c0:ce:e6:9f:78:4e:90:f9:
-                    62:6a:14:9d:5e:63:3a:55:8e:88:a4:83:34:f6:f1:
-                    35:19:d1:fe:94:61:b6:9a:c6:b0:47:81:95:69:21:
-                    ff:ca:c9:c9:79:4c:ac:ee:f6:08:ba:eb:ae:fe:96:
-                    8a:dc:97:11:c1:2f:8b:55:9f:58:cb:b1:8f:c3:2a:
-                    36:0b:4b:d2:17:36:45:0d:33:64:b0:58:27:45:a1:
-                    71:f1:db:2c:d7:de:6f:6d:f5:bc:38:62:c3:5a:9d:
-                    f5:95:58:1d:ef:c2:00:6a:e5:c2:97:84:f7:ac:cc:
-                    19:18:f0:f8:cb:1a:b0:7b:b4:63:cc:35:5d:8c:cf:
-                    f0:0c:a6:7e:fa:19:96:a9:dd:8a:26:ef:31:e9:38:
-                    44:11:62:ff:30:35:fe:86:2a:5f:52:20:93:2a:a8:
-                    5c:a9:c6:16:08:3e:c1:da:34:4e:83:28:a1:d4:6c:
-                    78:58:06:a0:ef:65:69:4c:19:65:0a:82:98:d4:cf:
-                    56:22:d2:47:b1:82:40:8f:fc:50:5d:52:c5:12:a8:
-                    0f:17:0c:18:3b:ef:9b:8c:3c:da:c4:c2:2d:63:44:
-                    59:08:8e:54:4a:5d:1d:e7:ba:2f:7a:d7:92:40:8d:
-                    f4:9f
+                    00:eb:27:bb:a7:3b:d4:cb:75:c7:da:66:38:d8:36:
+                    92:a4:64:86:f5:29:16:a7:60:e5:0e:0c:12:22:22:
+                    29:e4:84:ad:34:74:8f:29:fd:d4:55:d1:31:ee:c4:
+                    21:d2:9a:9f:e6:72:60:6a:aa:8c:5e:8e:dd:24:b7:
+                    89:59:2a:cc:ef:27:ad:7b:e4:71:47:eb:a8:ea:25:
+                    4e:30:2c:49:74:06:04:b6:0a:05:78:59:ba:34:20:
+                    52:54:1a:45:fd:e5:2c:f7:db:38:66:8b:8a:ba:6e:
+                    dc:8e:f9:e1:e4:e6:38:d1:33:ed:7c:89:52:f7:1a:
+                    5d:a5:a3:fa:2c:ac:21:36:be:3b:01:b8:c9:4c:bb:
+                    44:97:a5:3e:ed:34:de:98:d4:7c:25:40:db:d8:f8:
+                    7e:c8:9c:08:5f:c7:7c:92:c1:b3:8b:7c:4b:0c:fb:
+                    a0:18:fc:9e:95:d3:d9:23:25:94:0a:1c:27:29:95:
+                    2c:85:99:fe:e8:cc:4d:91:02:05:70:f0:6a:fe:80:
+                    3c:58:5a:c9:d2:4f:ae:54:b2:f8:28:96:1c:88:d7:
+                    eb:d5:51:1a:d4:4e:2f:46:c8:b5:11:b2:d9:33:36:
+                    84:ee:63:ac:cc:e8:52:20:e8:db:5c:d3:f5:de:ca:
+                    a8:c2:41:82:4a:02:53:ff:10:f6:ee:40:3e:90:02:
+                    2d:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4D:F0:7D:C0:A0:7D:84:3E:38:63:E2:76:18:78:25:8C:09:DD:12:36
+                F8:CA:7C:B6:29:EB:F9:FB:32:FC:E9:07:44:D0:27:BA:72:2C:E3:CB
             X509v3 Authority Key Identifier: 
-                keyid:C5:16:E8:6A:00:06:4F:0B:E0:6E:86:89:50:32:72:E0:22:08:AE:60
+                keyid:69:78:9C:E4:B3:1F:B8:FA:9A:A8:D8:10:CA:29:F1:C8:CF:46:98:EB
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         52:00:7b:6d:93:e0:12:f4:bd:3e:1e:67:ac:a2:a2:46:dd:68:
-         7f:41:c5:7e:a4:04:07:d2:5b:1a:d3:26:b7:9d:6a:62:9c:51:
-         a5:19:55:7d:1d:42:4d:88:12:39:21:a5:fe:59:27:94:92:7c:
-         4c:54:f6:85:f7:7d:3b:ac:23:51:63:67:05:66:b3:5e:4e:c2:
-         db:e9:33:e6:5a:7c:08:96:16:b9:33:af:83:02:15:d0:eb:2f:
-         02:98:18:5a:53:ca:f5:ee:a8:3c:95:44:bd:c7:bf:47:f4:7b:
-         22:e5:b2:df:ee:e1:e2:eb:50:89:a9:ad:72:e2:03:74:f7:82:
-         90:2a:6e:36:39:f6:06:95:81:52:56:e1:7e:35:32:43:90:78:
-         57:54:00:fc:df:39:e6:f6:92:d6:57:5d:01:ee:69:a0:fb:8c:
-         df:75:9b:8c:0e:e7:af:27:d4:11:01:c3:9d:56:7b:52:0b:06:
-         57:1f:40:13:12:76:2a:40:b1:97:47:5f:6d:c4:5a:45:99:cd:
-         96:61:ce:52:47:5f:8d:66:14:6d:a2:3c:bb:6e:0f:9c:3c:ba:
-         9e:fb:75:92:32:eb:f3:71:16:d5:c6:84:e4:7d:c5:79:3f:ce:
-         08:57:96:5b:56:c5:28:d5:96:41:f0:bc:a7:72:a1:18:6f:ab:
-         d9:e5:47:93
+         84:62:43:5c:06:b9:f3:39:ce:ab:d5:52:71:5e:c7:ea:1c:fe:
+         75:1c:e3:1a:b9:61:31:22:21:6e:40:01:50:78:bc:2d:f2:aa:
+         22:97:01:97:00:f6:34:a8:22:b4:46:29:26:ad:42:a7:80:af:
+         eb:1b:df:a0:e6:6c:00:c2:07:9e:f5:f6:f9:24:7a:d4:df:ed:
+         c7:b0:f7:19:2a:8e:4e:69:9f:8b:90:1b:05:82:e4:c3:1e:82:
+         db:98:98:26:9a:b6:77:34:b1:91:40:dc:2e:63:ce:2a:bd:d1:
+         5e:c6:ff:4d:ec:97:ad:9c:c6:a6:bb:36:2d:42:f4:37:02:a6:
+         8a:b1:c9:c6:e6:86:20:d8:30:f0:b7:34:dd:15:45:fb:35:b1:
+         05:15:c2:3e:9e:c3:6d:e6:c5:3e:3c:94:65:e9:ab:46:5b:7a:
+         dc:e8:37:31:c3:5c:96:b4:b0:88:7e:ed:3f:84:cd:63:39:a3:
+         11:06:f2:90:77:22:60:27:98:6b:0d:76:1f:c4:e5:5b:1e:72:
+         c1:9b:a3:10:9a:05:3e:21:97:0e:04:8d:de:21:db:34:ae:89:
+         33:26:e6:fc:3e:0c:72:4e:e5:56:d0:e3:58:a4:a9:ed:15:34:
+         05:8f:f7:f1:1d:ad:8e:b2:df:0c:37:61:f8:60:ec:db:9a:9d:
+         6d:8f:11:a0
 -----BEGIN CERTIFICATE-----
 MIIDiTCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMnw20AZRF5n1OfdT2cSca8qQnbeasDO5p94TpD5YmoUnV5jOlWOiKSDNPbx
-NRnR/pRhtprGsEeBlWkh/8rJyXlMrO72CLrrrv6WityXEcEvi1WfWMuxj8MqNgtL
-0hc2RQ0zZLBYJ0WhcfHbLNfeb231vDhiw1qd9ZVYHe/CAGrlwpeE96zMGRjw+Msa
-sHu0Y8w1XYzP8AymfvoZlqndiibvMek4RBFi/zA1/oYqX1IgkyqoXKnGFgg+wdo0
-ToMoodRseFgGoO9laUwZZQqCmNTPViLSR7GCQI/8UF1SxRKoDxcMGDvvm4w82sTC
-LWNEWQiOVEpdHee6L3rXkkCN9J8CAwEAAaOB3TCB2jAdBgNVHQ4EFgQUTfB9wKB9
-hD44Y+J2GHgljAndEjYwHwYDVR0jBBgwFoAUxRboagAGTwvgboaJUDJy4CIIrmAw
+ggEBAOsnu6c71Mt1x9pmONg2kqRkhvUpFqdg5Q4MEiIiKeSErTR0jyn91FXRMe7E
+IdKan+ZyYGqqjF6O3SS3iVkqzO8nrXvkcUfrqOolTjAsSXQGBLYKBXhZujQgUlQa
+Rf3lLPfbOGaLirpu3I754eTmONEz7XyJUvcaXaWj+iysITa+OwG4yUy7RJelPu00
+3pjUfCVA29j4fsicCF/HfJLBs4t8Swz7oBj8npXT2SMllAocJymVLIWZ/ujMTZEC
+BXDwav6APFhaydJPrlSy+CiWHIjX69VRGtROL0bItRGy2TM2hO5jrMzoUiDo21zT
+9d7KqMJBgkoCU/8Q9u5APpACLdECAwEAAaOB3TCB2jAdBgNVHQ4EFgQU+Mp8tinr
++fsy/OkHRNAnunIs48swHwYDVR0jBBgwFoAUaXic5LMfuPqaqNgQyinxyM9GmOsw
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
-Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBSAHttk+AS9L0+HmesoqJG3Wh/
-QcV+pAQH0lsa0ya3nWpinFGlGVV9HUJNiBI5IaX+WSeUknxMVPaF9307rCNRY2cF
-ZrNeTsLb6TPmWnwIlha5M6+DAhXQ6y8CmBhaU8r17qg8lUS9x79H9Hsi5bLf7uHi
-61CJqa1y4gN094KQKm42OfYGlYFSVuF+NTJDkHhXVAD83znm9pLWV10B7mmg+4zf
-dZuMDuevJ9QRAcOdVntSCwZXH0ATEnYqQLGXR19txFpFmc2WYc5SR1+NZhRtojy7
-bg+cPLqe+3WSMuvzcRbVxoTkfcV5P84IV5ZbVsUo1ZZB8LyncqEYb6vZ5UeT
+Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCEYkNcBrnzOc6r1VJxXsfqHP51
+HOMauWExIiFuQAFQeLwt8qoilwGXAPY0qCK0RikmrUKngK/rG9+g5mwAwgee9fb5
+JHrU3+3HsPcZKo5OaZ+LkBsFguTDHoLbmJgmmrZ3NLGRQNwuY84qvdFexv9N7Jet
+nMamuzYtQvQ3AqaKscnG5oYg2DDwtzTdFUX7NbEFFcI+nsNt5sU+PJRl6atGW3rc
+6Dcxw1yWtLCIfu0/hM1jOaMRBvKQdyJgJ5hrDXYfxOVbHnLBm6MQmgU+IZcOBI3e
+Ids0rokzJub8PgxyTuVW0ONYpKntFTQFj/fxHa2Ost8MN2H4YOzbmp1tjxGg
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e9:9a:81:41:08:cf:b0:5d:90:15:7b:33:d8:14:
-                    e0:04:05:c4:86:6c:65:6d:fa:9c:cb:68:e8:d3:3f:
-                    1f:02:00:4c:b0:8d:21:ab:fb:f4:ea:e4:d5:10:84:
-                    73:99:ed:ac:1a:d8:96:66:21:0b:8a:40:56:54:37:
-                    1e:49:b4:96:d8:be:63:8a:b2:5c:16:a1:c6:79:d0:
-                    30:3d:ee:83:da:58:e3:cf:7b:fd:37:d6:29:74:6a:
-                    69:8a:62:9f:1a:6f:22:7b:2b:68:51:b8:af:91:d3:
-                    48:7a:a1:d1:cb:ea:d7:c2:54:f7:09:55:a4:7f:cf:
-                    33:87:43:80:bb:04:2d:be:77:ea:db:e4:59:a6:4b:
-                    c4:9e:d4:6a:54:b6:45:4d:4e:28:c0:13:33:d2:0a:
-                    12:49:4a:d7:e0:60:a7:88:0b:3d:54:61:5a:e1:e5:
-                    f3:56:56:42:f0:3c:4e:65:dc:b9:c3:07:7f:56:da:
-                    4a:45:c4:e4:ba:e7:66:e2:09:e3:4d:84:5d:24:af:
-                    bc:d2:2b:24:39:e3:04:bd:7c:1d:cf:71:5b:60:64:
-                    dc:f3:75:e3:18:44:3b:8f:b1:70:72:20:ab:da:30:
-                    bb:18:0d:d1:ed:fd:e8:87:5c:58:2d:de:11:e6:e8:
-                    0a:99:66:fd:a3:c3:b9:6b:02:ac:07:0c:35:c1:90:
-                    66:2d
+                    00:d1:c2:6a:7a:d7:28:b1:49:61:5c:d1:75:a5:99:
+                    6c:ca:b6:82:d2:d3:01:03:ee:a5:83:4f:45:47:b7:
+                    b5:88:e9:c4:0d:74:04:c2:57:dc:3e:58:2d:65:3c:
+                    5c:06:f1:5b:c3:13:38:a9:28:2f:c7:b9:5b:9f:9e:
+                    fb:c1:d8:cb:12:ed:c8:1d:31:45:68:fe:48:b6:f3:
+                    65:2e:28:dc:68:26:57:de:0b:71:c6:a4:5f:27:7f:
+                    7b:30:22:70:98:1d:a2:96:85:f3:6a:0c:41:03:5e:
+                    79:91:b1:d6:1b:89:13:d1:7c:64:7d:19:43:66:eb:
+                    5d:bb:e8:f7:01:30:b9:85:4d:7a:6d:06:06:29:6a:
+                    b2:a3:45:a6:c9:d1:e3:14:4f:ec:a4:21:29:28:27:
+                    ac:3e:52:86:74:f2:b1:d5:4b:ee:f6:b2:07:32:be:
+                    a5:31:57:4e:15:c4:e0:22:d9:64:08:55:88:6e:50:
+                    4e:26:07:c7:f0:93:e4:ab:6e:b4:be:e2:76:21:46:
+                    64:44:de:ba:fa:8c:c4:0a:5d:40:e2:10:ee:f7:22:
+                    5b:6d:01:b4:a8:41:c8:ef:8f:67:b9:1a:ad:da:27:
+                    53:b6:02:0f:a4:b4:17:66:a6:4b:91:3a:37:0b:6e:
+                    f6:c1:34:23:62:9e:86:47:f3:bb:2e:ec:b4:a1:4c:
+                    87:17
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C5:16:E8:6A:00:06:4F:0B:E0:6E:86:89:50:32:72:E0:22:08:AE:60
+                69:78:9C:E4:B3:1F:B8:FA:9A:A8:D8:10:CA:29:F1:C8:CF:46:98:EB
             X509v3 Authority Key Identifier: 
-                keyid:E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                keyid:B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         68:ca:ff:4f:17:59:d1:14:01:ad:bd:21:09:39:d3:de:3f:9e:
-         12:71:16:9c:49:f6:e1:2d:d2:d3:4f:93:d3:60:a0:6f:9e:ac:
-         49:99:a2:2c:ad:fc:29:1a:e1:5a:6e:07:e8:83:67:67:e1:23:
-         c4:01:e2:b5:c3:c1:28:f3:71:3e:49:e7:1e:dc:ee:66:fb:eb:
-         64:3d:5c:2f:e2:1d:fd:55:f6:98:ff:fc:af:82:aa:45:d0:be:
-         89:bd:73:4b:87:fb:a8:9e:c7:03:75:77:7c:d1:8c:50:f0:03:
-         e2:7a:2e:f5:f8:dd:53:33:9f:86:d3:f3:32:83:d2:2a:70:67:
-         ca:8a:f1:df:15:b0:fd:38:bf:67:4e:22:e2:6f:73:6c:a6:b9:
-         27:c9:89:ce:a3:9e:00:7c:82:55:44:d5:e6:2a:3d:1c:80:e1:
-         ef:37:f5:ab:e0:ea:25:b4:45:4c:28:50:2d:cb:ed:bb:6b:1d:
-         06:3e:16:e4:f0:b8:15:16:6e:7a:91:cd:f3:1c:39:2c:ec:d3:
-         7e:0b:e0:de:2a:f1:d5:27:78:a6:9c:3a:3f:b8:cc:b2:f6:9c:
-         8f:f1:9b:ce:c6:67:eb:9f:f5:4b:39:87:89:ef:d2:2f:ba:73:
-         d8:af:cc:90:95:9d:95:e4:1c:a5:fb:3a:85:f6:f8:cc:69:ae:
-         2e:6a:fc:6e
+         76:48:7b:d1:f1:e7:f4:cd:ea:0a:20:a1:3d:dd:53:a1:5d:5b:
+         b8:4c:1f:a0:a1:29:8f:54:27:4f:05:94:e0:84:6c:8b:aa:23:
+         b1:55:dd:c9:2c:70:8c:8d:be:44:44:64:d4:2e:9c:ed:b2:b1:
+         5f:ab:97:83:16:ad:2e:27:21:22:cc:a3:2b:fc:a3:55:e4:58:
+         86:6d:6b:78:36:aa:a0:32:d4:4e:59:99:75:68:81:23:99:41:
+         64:28:e0:0a:bc:0b:db:56:34:c3:c8:b8:08:7f:d5:4e:1f:16:
+         d8:c0:3f:a2:17:42:64:4d:37:89:4f:06:3b:7a:1e:97:82:92:
+         7c:a3:e1:9e:4d:46:2e:a0:6a:cd:71:77:e1:77:e3:43:98:18:
+         21:c1:f3:23:f9:69:18:d5:1b:56:00:2a:97:54:e7:ca:65:97:
+         14:8b:d6:77:5c:a5:df:4b:4b:9f:75:b8:cf:79:cd:5b:10:42:
+         a2:d2:90:3e:77:79:92:46:e0:ca:34:3d:bd:4a:d2:2a:10:50:
+         79:0a:8a:78:2b:ce:ea:0c:83:ca:22:c2:9b:8f:ae:4c:67:25:
+         9b:2b:e6:09:87:c2:8f:4d:46:6b:85:7d:94:b9:00:f9:3a:55:
+         bc:2d:06:3e:27:19:49:af:c7:a5:a2:23:d0:ac:cf:62:24:4a:
+         11:90:81:37
 -----BEGIN CERTIFICATE-----
 MIIDbjCCAlagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOmagUEI
-z7BdkBV7M9gU4AQFxIZsZW36nMto6NM/HwIATLCNIav79Ork1RCEc5ntrBrYlmYh
-C4pAVlQ3Hkm0lti+Y4qyXBahxnnQMD3ug9pY4897/TfWKXRqaYpinxpvInsraFG4
-r5HTSHqh0cvq18JU9wlVpH/PM4dDgLsELb536tvkWaZLxJ7UalS2RU1OKMATM9IK
-EklK1+Bgp4gLPVRhWuHl81ZWQvA8TmXcucMHf1baSkXE5LrnZuIJ402EXSSvvNIr
-JDnjBL18Hc9xW2Bk3PN14xhEO4+xcHIgq9owuxgN0e396IdcWC3eEeboCplm/aPD
-uWsCrAcMNcGQZi0CAwEAAaOByzCByDAdBgNVHQ4EFgQUxRboagAGTwvgboaJUDJy
-4CIIrmAwHwYDVR0jBBgwFoAU6N2yYdH8Ah/NaPE0nW5V55e1OiMwNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHCanrX
+KLFJYVzRdaWZbMq2gtLTAQPupYNPRUe3tYjpxA10BMJX3D5YLWU8XAbxW8MTOKko
+L8e5W5+e+8HYyxLtyB0xRWj+SLbzZS4o3GgmV94LccakXyd/ezAicJgdopaF82oM
+QQNeeZGx1huJE9F8ZH0ZQ2brXbvo9wEwuYVNem0GBilqsqNFpsnR4xRP7KQhKSgn
+rD5ShnTysdVL7vayBzK+pTFXThXE4CLZZAhViG5QTiYHx/CT5KtutL7idiFGZETe
+uvqMxApdQOIQ7vciW20BtKhByO+PZ7kardonU7YCD6S0F2amS5E6Nwtu9sE0I2Ke
+hkfzuy7stKFMhxcCAwEAAaOByzCByDAdBgNVHQ4EFgQUaXic5LMfuPqaqNgQyinx
+yM9GmOswHwYDVR0jBBgwFoAUtLzr7nzYgU22hQUwzqMBUHWSdcQwNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQBoyv9PF1nRFAGtvSEJOdPeP54ScRacSfbhLdLTT5PTYKBvnqxJmaIsrfwpGuFa
-bgfog2dn4SPEAeK1w8Eo83E+Sece3O5m++tkPVwv4h39VfaY//yvgqpF0L6JvXNL
-h/uonscDdXd80YxQ8APiei71+N1TM5+G0/Myg9IqcGfKivHfFbD9OL9nTiLib3Ns
-prknyYnOo54AfIJVRNXmKj0cgOHvN/Wr4OoltEVMKFAty+27ax0GPhbk8LgVFm56
-kc3zHDks7NN+C+DeKvHVJ3imnDo/uMyy9pyP8ZvOxmfrn/VLOYeJ79IvunPYr8yQ
-lZ2V5Byl+zqF9vjMaa4uavxu
+AQB2SHvR8ef0zeoKIKE93VOhXVu4TB+goSmPVCdPBZTghGyLqiOxVd3JLHCMjb5E
+RGTULpztsrFfq5eDFq0uJyEizKMr/KNV5FiGbWt4NqqgMtROWZl1aIEjmUFkKOAK
+vAvbVjTDyLgIf9VOHxbYwD+iF0JkTTeJTwY7eh6XgpJ8o+GeTUYuoGrNcXfhd+ND
+mBghwfMj+WkY1RtWACqXVOfKZZcUi9Z3XKXfS0ufdbjPec1bEEKi0pA+d3mSRuDK
+ND29StIqEFB5Cop4K87qDIPKIsKbj65MZyWbK+YJh8KPTUZrhX2UuQD5OlW8LQY+
+JxlJr8eloiPQrM9iJEoRkIE3
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:ca:b8:37:0e:d3:aa:65:77:fd:8d:e5:02:89:2e:
-                    62:d3:50:7d:1b:05:5b:f1:d5:5d:b2:94:57:c2:c2:
-                    70:a5:fa:cb:02:e0:02:c0:d7:de:1b:2d:2d:b0:46:
-                    2e:d8:8e:69:7b:51:a7:cf:47:cf:bb:25:1e:ed:ed:
-                    67:ba:e8:a5:f7:85:59:d7:a2:fb:4f:55:00:22:05:
-                    84:e3:31:20:2b:e0:ff:72:9e:99:de:be:67:48:60:
-                    ac:86:35:3a:da:85:06:5b:92:29:7c:da:50:1c:e0:
-                    34:d8:5e:81:26:18:7e:de:07:20:c2:59:3b:43:f1:
-                    bd:02:29:d4:ae:29:6e:bb:dc:be:48:2c:9a:15:18:
-                    33:86:6f:c3:26:2e:88:46:35:ce:92:b1:c2:a6:96:
-                    cc:2c:e0:60:87:1f:9b:e2:a0:ce:7f:af:53:04:d8:
-                    24:cb:da:19:ca:3b:fe:02:f1:11:05:e7:40:af:2d:
-                    eb:df:c4:53:1e:64:5a:73:b5:93:42:46:64:72:a5:
-                    d9:d4:e0:70:65:f5:89:c3:07:83:17:0d:83:a8:aa:
-                    69:b5:56:57:20:1b:38:49:72:16:fb:a0:b4:d9:55:
-                    32:0a:e7:1c:1f:ec:3d:fc:7a:b9:81:02:d8:9e:57:
-                    cd:97:18:16:6e:de:36:fe:d2:63:73:b3:8a:6e:57:
-                    93:a9
+                    00:ba:0b:93:f2:44:8e:7e:00:d8:9b:6d:f4:bc:4b:
+                    e1:b9:5f:3d:fc:ad:65:9c:5d:d0:b0:0c:95:4a:69:
+                    e9:93:39:f5:67:34:44:9c:ed:de:47:6b:87:a1:5f:
+                    81:e3:fa:a7:d3:fb:d7:66:dc:32:ab:11:a3:02:eb:
+                    b9:7f:6d:60:c7:8d:8e:ae:a8:c4:22:45:7f:23:10:
+                    c7:a4:30:b1:46:5b:1a:dc:8b:14:b8:76:e9:6d:fc:
+                    0e:07:40:fb:36:8e:e0:a4:61:71:29:c8:ac:99:08:
+                    73:f1:e1:7a:55:2d:f1:95:ca:b9:17:c3:d3:8d:ac:
+                    a9:0a:8c:b4:97:36:8d:5e:b7:01:75:60:b2:8a:e5:
+                    2e:bc:25:e9:66:b5:ce:07:ea:14:51:4e:c3:5d:80:
+                    df:0c:4b:6a:29:98:78:e5:dc:27:8b:7d:8f:fe:2b:
+                    4b:95:98:b1:f9:55:5d:44:55:3f:b9:b3:75:db:e8:
+                    b9:85:1e:7e:2b:3e:36:65:d7:7f:d1:f5:6d:2f:e5:
+                    72:de:e2:ae:4d:f7:26:30:57:79:98:c7:ed:48:47:
+                    15:7c:8b:ca:6a:ea:2a:9e:8b:c1:b3:e4:9d:f4:00:
+                    9b:f7:58:ce:47:18:2e:0b:2e:2a:ef:31:bc:2a:b5:
+                    24:4b:77:52:a1:71:c3:3c:3c:fc:af:db:52:7b:0d:
+                    c1:43
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
             X509v3 Authority Key Identifier: 
-                keyid:E8:DD:B2:61:D1:FC:02:1F:CD:68:F1:34:9D:6E:55:E7:97:B5:3A:23
+                keyid:B4:BC:EB:EE:7C:D8:81:4D:B6:85:05:30:CE:A3:01:50:75:92:75:C4
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         a5:51:20:51:70:47:97:be:a8:b8:d8:76:64:ac:f1:47:36:3c:
-         4d:c2:d1:b1:23:81:dc:2e:c0:36:d1:83:97:af:94:c3:46:fd:
-         bb:5e:9b:ca:e2:42:06:bb:ff:d4:68:f0:53:7f:96:43:cb:6f:
-         24:09:53:a0:fb:d2:79:10:0f:f9:f8:3d:04:cb:23:40:50:37:
-         5a:29:67:da:8a:b7:30:5b:62:b2:62:ce:70:43:81:29:c1:79:
-         91:c8:b6:80:76:cf:93:45:70:ee:6b:22:a1:69:29:a6:e3:62:
-         d0:3d:27:67:86:26:dc:71:49:e3:1a:98:05:63:26:d8:e5:80:
-         b7:d9:38:db:1b:97:fc:0b:97:1f:5a:59:24:ea:6c:f6:c2:f6:
-         c1:ee:b8:02:48:1a:23:97:1d:3f:24:45:9c:f4:37:6f:ee:73:
-         1b:bf:d3:c1:ed:a1:50:37:48:28:2f:ee:68:bc:d6:a8:35:a5:
-         1c:00:a1:52:29:b5:a4:2a:79:f4:f9:a0:a5:30:6f:3f:01:ca:
-         47:f0:08:8a:3f:3e:a9:bf:3e:4c:ef:e3:c3:ec:35:c5:5b:f3:
-         58:18:80:be:08:e9:c2:77:a6:17:5c:62:3c:77:fe:a6:69:0e:
-         de:ca:96:dd:ed:13:01:ef:20:85:2f:94:a2:7d:30:df:c5:4d:
-         84:e2:4d:1c
+         01:aa:4a:78:d6:dc:8b:22:9b:45:59:f4:de:57:b8:3e:91:2f:
+         68:f0:33:e9:a2:df:dd:fe:88:6a:76:9f:8e:94:36:fc:53:58:
+         0c:f5:ba:31:9e:50:d7:da:91:dd:61:0c:c2:62:8c:20:00:c7:
+         be:3e:23:6c:79:83:de:80:38:df:d8:66:c6:ef:26:08:5a:ae:
+         5d:ff:82:3f:fe:59:04:60:df:7e:13:d1:48:8e:f4:cf:7d:87:
+         12:28:c9:b4:27:28:1c:f6:58:70:00:cc:31:35:66:58:7c:3b:
+         1e:c4:f9:d0:0f:7d:bd:0f:17:c3:ff:da:06:d6:77:8e:68:77:
+         f7:35:e4:b2:23:88:e9:1f:29:90:a2:10:4e:2b:69:e9:9e:35:
+         2b:36:70:72:b9:1f:7c:2b:b3:2b:9c:87:85:92:4b:5f:d6:c2:
+         98:cf:03:2c:fa:31:c4:99:14:be:88:81:5b:ec:cc:1a:00:79:
+         f0:ba:cc:fe:aa:f5:05:1a:67:ef:ff:cf:d1:ba:32:a1:b5:f5:
+         d8:4b:71:99:52:18:95:65:d4:25:e2:15:d1:26:81:4f:67:9a:
+         07:45:20:1e:68:e5:d2:f0:aa:09:90:cf:e8:e3:87:d0:24:67:
+         b1:08:24:0b:f1:0f:be:c5:0c:50:f1:7c:d8:4f:c4:f0:ee:74:
+         c0:8e:bd:5e
 -----BEGIN TRUST_ANCHOR_CONSTRAINED-----
 MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMq4Nw7TqmV3/Y3lAoku
-YtNQfRsFW/HVXbKUV8LCcKX6ywLgAsDX3hstLbBGLtiOaXtRp89Hz7slHu3tZ7ro
-pfeFWdei+09VACIFhOMxICvg/3Kemd6+Z0hgrIY1OtqFBluSKXzaUBzgNNhegSYY
-ft4HIMJZO0PxvQIp1K4pbrvcvkgsmhUYM4ZvwyYuiEY1zpKxwqaWzCzgYIcfm+Kg
-zn+vUwTYJMvaGco7/gLxEQXnQK8t69/EUx5kWnO1k0JGZHKl2dTgcGX1icMHgxcN
-g6iqabVWVyAbOElyFvugtNlVMgrnHB/sPfx6uYEC2J5XzZcYFm7eNv7SY3Ozim5X
-k6kCAwEAAaOBzjCByzAdBgNVHQ4EFgQU6N2yYdH8Ah/NaPE0nW5V55e1OiMwHwYD
-VR0jBBgwFoAU6N2yYdH8Ah/NaPE0nW5V55e1OiMwNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoLk/JEjn4A2Jtt9LxL
+4blfPfytZZxd0LAMlUpp6ZM59Wc0RJzt3kdrh6FfgeP6p9P712bcMqsRowLruX9t
+YMeNjq6oxCJFfyMQx6QwsUZbGtyLFLh26W38DgdA+zaO4KRhcSnIrJkIc/HhelUt
+8ZXKuRfD042sqQqMtJc2jV63AXVgsorlLrwl6Wa1zgfqFFFOw12A3wxLaimYeOXc
+J4t9j/4rS5WYsflVXURVP7mzddvouYUefis+NmXXf9H1bS/lct7irk33JjBXeZjH
+7UhHFXyLymrqKp6LwbPknfQAm/dYzkcYLgsuKu8xvCq1JEt3UqFxwzw8/K/bUnsN
+wUMCAwEAAaOBzjCByzAdBgNVHQ4EFgQUtLzr7nzYgU22hQUwzqMBUHWSdcQwHwYD
+VR0jBBgwFoAUtLzr7nzYgU22hQUwzqMBUHWSdcQwNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQClUSBR
-cEeXvqi42HZkrPFHNjxNwtGxI4HcLsA20YOXr5TDRv27XpvK4kIGu//UaPBTf5ZD
-y28kCVOg+9J5EA/5+D0EyyNAUDdaKWfaircwW2KyYs5wQ4EpwXmRyLaAds+TRXDu
-ayKhaSmm42LQPSdnhibccUnjGpgFYybY5YC32TjbG5f8C5cfWlkk6mz2wvbB7rgC
-SBojlx0/JEWc9Ddv7nMbv9PB7aFQN0goL+5ovNaoNaUcAKFSKbWkKnn0+aClMG8/
-AcpH8AiKPz6pvz5M7+PD7DXFW/NYGIC+COnCd6YXXGI8d/6maQ7eypbd7RMB7yCF
-L5SifTDfxU2E4k0c
+AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQABqkp4
+1tyLIptFWfTeV7g+kS9o8DPpot/d/ohqdp+OlDb8U1gM9boxnlDX2pHdYQzCYowg
+AMe+PiNseYPegDjf2GbG7yYIWq5d/4I//lkEYN9+E9FIjvTPfYcSKMm0Jygc9lhw
+AMwxNWZYfDsexPnQD329DxfD/9oG1neOaHf3NeSyI4jpHymQohBOK2npnjUrNnBy
+uR98K7MrnIeFkktf1sKYzwMs+jHEmRS+iIFb7MwaAHnwusz+qvUFGmfv/8/RujKh
+tfXYS3GZUhiVZdQl4hXRJoFPZ5oHRSAeaOXS8KoJkM/o44fQJGexCCQL8Q++xQxQ
+8XzYT8Tw7nTAjr1e
 -----END TRUST_ANCHOR_CONSTRAINED-----
 
 150302120000Z
@@ -371,6 +371,11 @@
 RkFJTA==
 -----END VERIFY_RESULT-----
 
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
+
 ----- Certificate i=1 (CN=Intermediate2) -----
 ERROR: max_path_length reached
 
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
index a9f4c30..e99337a 100644
--- a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
@@ -18,30 +18,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:02:89:18:09:bc:9f:9c:9a:41:35:a9:5f:f7:
-                    c2:22:3e:b2:39:fe:ba:57:1d:95:2e:dd:65:23:45:
-                    ce:33:77:99:dd:f1:d7:69:0b:fb:a7:0e:89:98:02:
-                    7a:94:58:7b:61:e6:10:98:69:1a:09:2b:9f:73:3a:
-                    d8:70:18:64:e2:8a:85:87:c5:69:f3:45:1e:70:d8:
-                    c0:5e:23:6c:a6:7d:8f:77:23:8a:5d:74:a0:0b:d5:
-                    7f:a7:dd:f5:21:2d:02:c2:0f:e0:c8:f8:29:20:f5:
-                    5e:33:58:2a:38:c8:41:a6:25:66:ac:cf:c4:03:cb:
-                    03:25:db:e6:65:3d:bd:ab:da:fb:8f:b5:0e:d8:ba:
-                    3d:14:2b:9b:07:62:13:d4:1c:ea:b1:d5:7d:4d:54:
-                    04:c0:13:fb:d1:df:c2:36:e3:00:cf:fa:49:0b:44:
-                    9c:05:80:19:75:02:25:41:3d:e0:e6:cd:87:d8:63:
-                    d7:84:3d:0c:3a:c8:ec:e8:58:22:62:2f:18:e9:ad:
-                    45:ce:b8:a6:63:c2:65:29:69:1e:21:08:8d:3a:da:
-                    96:e0:89:27:09:cc:35:e9:f1:f0:d8:f3:61:c5:05:
-                    3e:b1:d0:00:3c:7e:25:4a:36:e3:1d:b4:95:37:2d:
-                    44:ac:9e:79:38:67:e7:c7:ac:0c:71:d3:d1:60:86:
-                    44:09
+                    00:a5:83:a6:86:f4:e7:3f:71:41:1a:68:61:f0:c7:
+                    b0:df:0c:2d:70:47:fd:dc:d1:60:fe:dd:3c:60:bd:
+                    bb:a0:b0:b3:bf:28:6e:46:df:30:40:73:46:92:6e:
+                    3d:6b:9d:7c:cc:24:f8:62:87:98:3d:f5:94:23:aa:
+                    67:97:e7:24:36:8f:eb:da:fc:a2:4c:4c:07:ff:3c:
+                    26:d6:fa:c6:e4:5e:02:f1:65:f7:d8:80:90:7c:fc:
+                    c2:ff:e7:75:33:76:10:0f:4b:6f:cd:87:ba:df:2b:
+                    75:3f:f2:85:12:d3:67:f5:f0:10:1a:00:d0:b6:cd:
+                    b4:04:93:62:15:0f:3d:4d:0e:2f:fa:35:aa:e5:e5:
+                    d0:78:db:10:74:fa:e6:ea:d9:e2:12:e1:95:1e:09:
+                    18:1f:c3:f4:bb:d2:0f:1e:c1:07:0f:3b:11:fd:6d:
+                    c5:dd:a4:7e:85:82:a9:fd:fb:0f:95:60:ad:12:1d:
+                    78:d1:80:b2:b8:37:da:d4:ab:22:52:b4:b6:d0:67:
+                    6d:8c:62:9d:15:48:99:11:51:e7:b6:7f:f8:c5:83:
+                    4c:c1:49:76:59:4f:f1:8a:40:f7:d3:b2:6e:1e:e7:
+                    97:fe:2a:ca:75:26:91:85:10:ab:71:86:a1:6b:e5:
+                    ad:5e:3a:95:c8:b0:7a:dd:97:ca:5d:b4:65:c1:3e:
+                    fa:75
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C6:CC:7E:B5:7C:7A:51:EC:1C:35:E1:CD:3C:A7:FC:06:31:53:CA:06
+                A1:58:30:09:2D:5A:FE:78:44:6C:F8:12:93:53:52:CF:1F:0B:CC:98
             X509v3 Authority Key Identifier: 
-                keyid:48:BF:34:63:E8:E4:FB:87:49:F2:0E:A0:23:38:D2:BE:6A:3D:45:3C
+                keyid:40:CA:3F:05:69:4A:60:4B:35:9B:F1:C0:57:88:0B:41:0F:BA:92:00
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate2.cer
@@ -56,42 +56,42 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: sha256WithRSAEncryption
-         51:8c:f9:c8:cb:cc:14:e3:54:cd:63:1a:f0:1e:0b:a3:6e:60:
-         99:68:06:fe:e6:97:f5:68:e7:d8:7a:e1:b1:78:48:3e:03:57:
-         e4:84:5a:24:08:47:9f:fb:73:1a:7f:76:66:40:5d:ac:2f:f4:
-         f0:9e:b1:21:b0:15:5f:d1:68:4a:b6:fe:84:23:05:51:7d:d3:
-         22:95:81:d0:76:87:29:9c:24:e8:3f:e0:41:a0:bb:57:96:1d:
-         7e:92:2d:22:b3:98:67:4c:87:5e:42:f5:c9:08:fb:b9:05:25:
-         73:b8:f0:9a:45:62:96:c6:48:b6:fe:ac:6c:42:a4:9e:41:aa:
-         fd:55:86:8e:4f:85:9e:b7:26:75:e3:79:28:ed:09:8d:63:35:
-         b5:55:78:13:46:43:17:3d:e8:12:c8:c3:c6:2f:88:f9:ce:b5:
-         df:af:6d:70:6f:6b:f6:1e:ff:1a:44:84:b6:51:7a:b1:7c:4f:
-         b4:7a:19:83:4c:85:b8:d0:e7:65:2e:0e:e2:ed:92:33:c4:f9:
-         cd:35:78:96:d6:8e:06:2c:17:18:0e:bf:be:f0:c5:7f:d3:85:
-         71:62:94:83:d8:1b:51:c4:77:37:d3:6a:fd:43:b4:54:44:fe:
-         f9:da:01:3e:59:d4:7b:a4:26:32:e4:ba:9a:bf:f3:2b:6c:71:
-         d2:1e:2c:c4
+         16:c7:97:e8:62:8d:aa:ed:04:69:41:bb:c3:e1:79:77:19:47:
+         3f:31:60:53:78:51:80:1c:2b:b5:d6:9f:6d:77:3c:06:49:f6:
+         d8:44:66:cc:d6:af:10:6b:55:40:f7:0a:37:e2:58:e9:9c:ec:
+         28:11:f6:31:28:36:1b:09:61:4e:a8:72:7f:c1:0c:06:27:88:
+         70:44:1c:ef:fd:9f:e0:bb:d9:0e:87:55:ed:ba:4a:e8:fe:f7:
+         aa:48:72:d2:33:83:2c:30:3d:57:a5:d5:04:d4:05:3a:ba:28:
+         e1:cb:00:8b:0d:86:29:fa:ab:99:5c:7c:91:72:fe:af:e7:59:
+         ea:eb:9a:34:d2:41:37:5a:f1:b4:f7:83:9a:ed:c8:2a:c4:48:
+         96:58:8b:3b:4c:49:e4:e0:a1:43:d9:5e:97:34:3c:5a:ca:d1:
+         01:12:ad:94:91:59:17:76:99:63:fb:f3:51:06:26:f2:6e:1e:
+         ba:5c:0f:c9:08:e1:1f:46:23:93:27:de:ed:38:8e:e6:e8:af:
+         a2:1b:e4:55:c9:be:eb:b5:f3:aa:8e:db:43:f3:a5:9f:c3:2e:
+         dd:c2:f6:32:a1:32:1c:8e:b4:4b:95:9e:23:fe:c7:fc:49:fd:
+         ce:67:07:1a:15:5a:03:8f:a8:5b:9b:56:ae:41:67:d4:15:75:
+         e3:73:77:83
 -----BEGIN CERTIFICATE-----
 MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwKJ
-GAm8n5yaQTWpX/fCIj6yOf66Vx2VLt1lI0XOM3eZ3fHXaQv7pw6JmAJ6lFh7YeYQ
-mGkaCSufczrYcBhk4oqFh8Vp80UecNjAXiNspn2PdyOKXXSgC9V/p931IS0Cwg/g
-yPgpIPVeM1gqOMhBpiVmrM/EA8sDJdvmZT29q9r7j7UO2Lo9FCubB2IT1BzqsdV9
-TVQEwBP70d/CNuMAz/pJC0ScBYAZdQIlQT3g5s2H2GPXhD0MOsjs6FgiYi8Y6a1F
-zrimY8JlKWkeIQiNOtqW4IknCcw16fHw2PNhxQU+sdAAPH4lSjbjHbSVNy1ErJ55
-OGfnx6wMcdPRYIZECQIDAQABo4HrMIHoMB0GA1UdDgQWBBTGzH61fHpR7Bw14c08
-p/wGMVPKBjAfBgNVHSMEGDAWgBRIvzRj6OT7h0nyDqAjONK+aj1FPDBABggrBgEF
+A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApYOm
+hvTnP3FBGmhh8Mew3wwtcEf93NFg/t08YL27oLCzvyhuRt8wQHNGkm49a518zCT4
+YoeYPfWUI6pnl+ckNo/r2vyiTEwH/zwm1vrG5F4C8WX32ICQfPzC/+d1M3YQD0tv
+zYe63yt1P/KFEtNn9fAQGgDQts20BJNiFQ89TQ4v+jWq5eXQeNsQdPrm6tniEuGV
+HgkYH8P0u9IPHsEHDzsR/W3F3aR+hYKp/fsPlWCtEh140YCyuDfa1KsiUrS20Gdt
+jGKdFUiZEVHntn/4xYNMwUl2WU/xikD307JuHueX/irKdSaRhRCrcYaha+WtXjqV
+yLB63ZfKXbRlwT76dQIDAQABo4HrMIHoMB0GA1UdDgQWBBShWDAJLVr+eERs+BKT
+U1LPHwvMmDAfBgNVHSMEGDAWgBRAyj8FaUpgSzWb8cBXiAtBD7qSADBABggrBgEF
 BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
 ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
 SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAUYz5yMvMFONUzWMa
-8B4Lo25gmWgG/uaX9Wjn2HrhsXhIPgNX5IRaJAhHn/tzGn92ZkBdrC/08J6xIbAV
-X9FoSrb+hCMFUX3TIpWB0HaHKZwk6D/gQaC7V5YdfpItIrOYZ0yHXkL1yQj7uQUl
-c7jwmkVilsZItv6sbEKknkGq/VWGjk+FnrcmdeN5KO0JjWM1tVV4E0ZDFz3oEsjD
-xi+I+c61369tcG9r9h7/GkSEtlF6sXxPtHoZg0yFuNDnZS4O4u2SM8T5zTV4ltaO
-BiwXGA6/vvDFf9OFcWKUg9gbUcR3N9Nq/UO0VET++doBPlnUe6QmMuS6mr/zK2xx
-0h4sxA==
+AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAFseX6GKNqu0EaUG7
+w+F5dxlHPzFgU3hRgBwrtdafbXc8Bkn22ERmzNavEGtVQPcKN+JY6ZzsKBH2MSg2
+GwlhTqhyf8EMBieIcEQc7/2f4LvZDodV7bpK6P73qkhy0jODLDA9V6XVBNQFOroo
+4csAiw2GKfqrmVx8kXL+r+dZ6uuaNNJBN1rxtPeDmu3IKsRIlliLO0xJ5OChQ9le
+lzQ8WsrRARKtlJFZF3aZY/vzUQYm8m4eulwPyQjhH0Yjkyfe7TiO5uivohvkVcm+
+67Xzqo7bQ/Oln8Mu3cL2MqEyHI60S5WeI/7H/En9zmcHGhVaA4+oW5tWrkFn1BV1
+43N3gw==
 -----END CERTIFICATE-----
 
 Certificate:
@@ -108,30 +108,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:9b:46:28:e2:70:56:b6:e1:f2:57:56:40:07:c9:
-                    66:0f:15:6f:6a:e9:b6:35:a4:f1:a7:17:4c:86:a4:
-                    8c:b7:74:55:0f:f2:cb:b0:43:11:4a:61:e0:9f:ea:
-                    8a:2b:c2:75:0f:b6:50:49:bc:ad:5c:3f:6c:92:4c:
-                    64:dc:50:2e:4d:66:65:eb:ba:9f:17:b7:d1:7e:ff:
-                    5d:d2:41:1f:9d:37:94:97:e1:f6:22:88:26:e2:8a:
-                    65:0f:0d:16:1d:b1:cc:df:e4:b1:78:87:f0:c6:f5:
-                    f0:21:c9:f6:69:34:64:4c:cd:5b:27:ad:ee:0b:3d:
-                    e3:ee:7a:6b:35:21:23:2b:6d:a4:82:c1:e0:37:f1:
-                    46:3c:16:c4:b9:20:29:16:13:14:26:05:41:c7:1e:
-                    21:e9:57:69:a4:3a:7b:b1:fe:92:c4:72:75:f7:bc:
-                    c0:ef:ba:4a:0c:73:37:c1:48:e2:4d:07:c4:14:da:
-                    ae:26:31:39:06:b8:43:6b:ec:2a:df:c8:db:02:af:
-                    24:9a:f2:af:28:98:1b:f3:0f:0d:57:2c:a5:c5:80:
-                    ef:71:41:9f:99:16:20:d1:e2:f7:1d:59:1d:84:e2:
-                    0b:2d:23:f7:2f:05:9e:51:c3:c9:65:84:ba:db:23:
-                    2e:7e:43:b4:c1:eb:12:63:f4:3c:32:2e:18:dd:4c:
-                    ad:8b
+                    00:b2:66:27:9d:a9:7e:4e:62:69:a3:dd:21:21:37:
+                    34:7d:95:a5:35:8b:c0:18:31:4c:f6:fe:2a:f9:08:
+                    e4:cf:20:97:49:f8:7c:c5:be:35:bb:6c:e9:7e:82:
+                    88:12:13:2d:72:c8:f3:57:8c:3f:4f:b7:98:12:77:
+                    c2:29:5f:cb:11:a5:e7:1c:a1:e1:68:e7:0d:36:ee:
+                    14:b2:e8:85:10:99:a2:a6:b5:37:37:6e:c4:dd:b1:
+                    c1:61:a3:62:6b:60:86:f1:e3:08:34:98:7b:ce:00:
+                    05:4f:67:eb:65:a1:c2:aa:93:1d:d0:57:dd:30:f5:
+                    31:ef:17:1f:27:9f:80:b3:bc:2e:6b:3d:a1:24:0b:
+                    ec:17:01:38:2a:75:5b:d6:d7:d6:7e:b9:6c:96:8f:
+                    12:d8:c6:09:1e:02:8e:a5:44:00:7e:d1:1c:22:20:
+                    4b:15:ab:52:2f:04:d8:36:05:86:44:db:83:9d:6a:
+                    b9:57:0a:e9:a7:07:2f:e0:df:35:af:8d:ce:7e:d6:
+                    52:ef:13:db:aa:95:76:58:de:10:e1:79:35:6a:cd:
+                    bd:c1:5c:da:69:93:57:f0:21:b6:06:0b:9f:d4:6d:
+                    0d:1d:8d:24:ba:b4:fe:5d:61:36:9b:27:ee:f9:3a:
+                    72:d5:fb:e7:d4:96:1e:87:42:b9:14:ad:42:1f:ad:
+                    cf:2b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                48:BF:34:63:E8:E4:FB:87:49:F2:0E:A0:23:38:D2:BE:6A:3D:45:3C
+                40:CA:3F:05:69:4A:60:4B:35:9B:F1:C0:57:88:0B:41:0F:BA:92:00
             X509v3 Authority Key Identifier: 
-                keyid:87:09:94:1A:5F:B2:4B:AE:02:70:24:A9:73:76:78:FD:C0:0E:DC:56
+                keyid:BB:83:13:E6:FB:7E:18:D3:D2:CD:9D:33:9A:67:B7:B5:93:B6:A2:20
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Intermediate1.cer
@@ -146,41 +146,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         be:14:33:c3:9f:0f:7b:fa:15:2f:1d:2c:29:52:bc:27:de:b3:
-         7a:f5:d2:e4:3a:51:38:97:8f:90:b2:ce:5d:50:88:77:5c:e8:
-         ae:35:01:68:13:3a:ca:5b:6c:ab:a2:ac:f0:e0:97:37:6f:ff:
-         15:d2:4a:f7:ff:80:7c:64:c8:6a:11:c1:02:f0:4b:0e:97:24:
-         81:7e:90:a4:38:41:af:8d:0b:eb:0b:24:2b:dc:89:4d:32:d1:
-         0b:b1:7c:67:6e:4f:43:bf:e0:63:9b:e8:f4:42:9c:3b:db:7e:
-         ec:f7:64:82:28:73:8c:a0:2e:73:d2:45:dd:3a:ad:6a:6a:5e:
-         ae:6d:f3:cd:be:4a:95:5c:d0:0d:87:54:b6:83:40:ed:14:e5:
-         d7:9d:23:e2:04:d1:6c:a0:2c:0a:ca:42:57:cc:f7:0b:66:4e:
-         35:ef:e3:93:5f:87:e9:0e:64:c7:52:c9:22:16:61:f9:ec:f7:
-         f0:4a:7a:b8:ef:d6:34:d4:6c:3d:b5:a9:6c:0b:f4:19:a8:9b:
-         04:d5:04:9f:fc:04:fe:60:7a:14:70:6f:38:92:80:be:8a:a6:
-         c4:57:a2:40:5d:bc:06:53:83:6d:f3:5f:f5:22:4a:22:10:a2:
-         82:00:87:35:77:07:f1:34:81:2f:86:0b:1a:3b:8f:3d:88:0c:
-         3a:a0:15:25
+         4a:96:55:c9:c0:d5:21:f4:ac:92:66:ba:83:a9:74:b0:c8:2b:
+         ab:be:3a:7d:85:59:0c:ca:7a:32:e6:64:e0:34:1c:1e:9a:e9:
+         f0:50:3e:ed:16:ca:a4:7a:f8:ef:b6:15:7e:7b:72:68:f1:dd:
+         63:1b:29:de:1c:ee:39:31:f5:7d:e0:7d:44:2c:8d:60:5e:cd:
+         f9:ca:d9:db:cb:b4:e5:d9:1a:e5:64:cb:01:49:20:55:db:42:
+         88:04:67:52:04:26:7d:b6:f9:23:9d:bd:ae:63:24:79:f8:20:
+         99:35:13:d0:db:84:ab:1d:ee:3a:1f:d6:cc:85:de:02:d7:c1:
+         60:c4:4a:6e:6c:a9:bc:a6:a7:e3:58:b5:f5:f1:a6:63:b6:80:
+         82:64:1e:00:38:5c:df:75:39:1d:8b:6a:48:a6:64:4f:20:b8:
+         2f:ed:4f:23:79:a8:3c:3c:ad:ca:33:6d:90:aa:f9:f4:7d:e1:
+         0c:b6:4b:8b:e9:84:4b:60:ea:2b:b1:be:ed:8f:4a:ad:36:f0:
+         cb:b2:1d:cc:e2:0e:75:e3:52:0f:bb:81:ac:7a:f1:8b:bf:4b:
+         29:60:ed:72:46:27:92:93:8e:c5:a1:24:79:34:21:a6:bd:3f:
+         fc:20:76:f4:e0:ba:84:d6:ed:e6:22:a7:03:87:e1:56:b8:7f:
+         b0:dc:b2:7e
 -----BEGIN CERTIFICATE-----
 MIIDiTCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
 cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
 A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAJtGKOJwVrbh8ldWQAfJZg8Vb2rptjWk8acXTIakjLd0VQ/yy7BDEUph4J/q
-iivCdQ+2UEm8rVw/bJJMZNxQLk1mZeu6nxe30X7/XdJBH503lJfh9iKIJuKKZQ8N
-Fh2xzN/ksXiH8Mb18CHJ9mk0ZEzNWyet7gs94+56azUhIyttpILB4DfxRjwWxLkg
-KRYTFCYFQcceIelXaaQ6e7H+ksRydfe8wO+6SgxzN8FI4k0HxBTariYxOQa4Q2vs
-Kt/I2wKvJJryryiYG/MPDVcspcWA73FBn5kWINHi9x1ZHYTiCy0j9y8FnlHDyWWE
-utsjLn5DtMHrEmP0PDIuGN1MrYsCAwEAAaOB3TCB2jAdBgNVHQ4EFgQUSL80Y+jk
-+4dJ8g6gIzjSvmo9RTwwHwYDVR0jBBgwFoAUhwmUGl+yS64CcCSpc3Z4/cAO3FYw
+ggEBALJmJ52pfk5iaaPdISE3NH2VpTWLwBgxTPb+KvkI5M8gl0n4fMW+Nbts6X6C
+iBITLXLI81eMP0+3mBJ3wilfyxGl5xyh4WjnDTbuFLLohRCZoqa1NzduxN2xwWGj
+YmtghvHjCDSYe84ABU9n62WhwqqTHdBX3TD1Me8XHyefgLO8Lms9oSQL7BcBOCp1
+W9bX1n65bJaPEtjGCR4CjqVEAH7RHCIgSxWrUi8E2DYFhkTbg51quVcK6acHL+Df
+Na+Nzn7WUu8T26qVdljeEOF5NWrNvcFc2mmTV/AhtgYLn9RtDR2NJLq0/l1hNpsn
+7vk6ctX759SWHodCuRStQh+tzysCAwEAAaOB3TCB2jAdBgNVHQ4EFgQUQMo/BWlK
+YEs1m/HAV4gLQQ+6kgAwHwYDVR0jBBgwFoAUu4MT5vt+GNPSzZ0zmme3tZO2oiAw
 QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
 SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
 b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
-Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC+FDPDnw97+hUvHSwpUrwn3rN6
-9dLkOlE4l4+Qss5dUIh3XOiuNQFoEzrKW2yroqzw4Jc3b/8V0kr3/4B8ZMhqEcEC
-8EsOlySBfpCkOEGvjQvrCyQr3IlNMtELsXxnbk9Dv+Bjm+j0Qpw7237s92SCKHOM
-oC5z0kXdOq1qal6ubfPNvkqVXNANh1S2g0DtFOXXnSPiBNFsoCwKykJXzPcLZk41
-7+OTX4fpDmTHUskiFmH57PfwSnq479Y01Gw9talsC/QZqJsE1QSf/AT+YHoUcG84
-koC+iqbEV6JAXbwGU4Nt81/1IkoiEKKCAIc1dwfxNIEvhgsaO489iAw6oBUl
+Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBKllXJwNUh9KySZrqDqXSwyCur
+vjp9hVkMynoy5mTgNBwemunwUD7tFsqkevjvthV+e3Jo8d1jGyneHO45MfV94H1E
+LI1gXs35ytnby7Tl2RrlZMsBSSBV20KIBGdSBCZ9tvkjnb2uYyR5+CCZNRPQ24Sr
+He46H9bMhd4C18FgxEpubKm8pqfjWLX18aZjtoCCZB4AOFzfdTkdi2pIpmRPILgv
+7U8jeag8PK3KM22Qqvn0feEMtkuL6YRLYOorsb7tj0qtNvDLsh3M4g5141IPu4Gs
+evGLv0spYO1yRieSk47FoSR5NCGmvT/8IHb04LqE1u3mIqcDh+FWuH+w3LJ+
 -----END CERTIFICATE-----
 
 Certificate:
@@ -197,30 +197,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:cc:c9:7a:84:dc:8e:0c:4b:60:fc:fb:35:ff:5c:
-                    72:00:1d:25:df:87:50:fa:65:2e:fa:40:a2:c7:9a:
-                    cb:b5:2e:b6:0d:d8:80:6c:54:ef:44:c9:2f:a4:20:
-                    60:07:c7:0a:f9:0f:62:0c:30:9e:ff:9b:3f:a7:35:
-                    6a:ab:a3:56:ca:1b:ea:62:90:0f:ef:e3:29:52:dc:
-                    88:06:a5:65:1f:29:ba:73:11:b5:98:70:dd:88:7f:
-                    83:a6:0b:4c:da:42:92:e6:08:45:da:f4:54:e0:8d:
-                    67:6c:97:0b:fd:8c:13:65:81:6a:1b:49:1b:4e:c7:
-                    de:dc:b5:68:1d:14:57:23:98:33:7b:43:a2:bf:da:
-                    bf:ef:e7:58:43:27:d3:d6:a9:45:d0:8d:e7:d7:48:
-                    b1:dc:f1:00:9b:85:8a:66:3e:20:f3:fc:e1:0f:89:
-                    9f:28:a6:2d:2c:f7:a2:44:e8:47:5a:0a:fa:cd:8e:
-                    40:2a:75:06:6d:ca:38:89:b6:9d:1f:15:d9:42:36:
-                    14:7e:2b:c4:e3:d7:03:a6:cf:4c:cb:34:c0:ce:e9:
-                    ad:05:da:8c:73:91:25:d3:23:3e:70:ab:16:e7:fe:
-                    8b:95:69:f6:4f:98:68:86:04:d6:70:bd:0f:9a:37:
-                    0b:35:b9:ad:18:27:aa:15:b7:08:d0:54:1e:94:af:
-                    ed:f9
+                    00:db:12:25:1e:c2:74:00:10:b7:40:b3:21:09:69:
+                    e4:b3:3b:09:89:40:d6:f6:84:20:b2:b5:6a:3a:c8:
+                    68:dc:b3:3a:a5:0c:2c:11:46:35:cf:dd:b3:83:9d:
+                    93:90:c7:b0:7d:fd:6a:aa:8f:b2:e5:c0:73:25:21:
+                    87:13:1b:da:8b:92:65:3f:62:10:d5:95:42:32:65:
+                    4c:0d:a9:4d:92:fc:95:72:84:bf:cc:6f:3c:dc:02:
+                    ad:28:95:b4:e2:9e:da:0b:2f:30:e2:41:bf:01:b7:
+                    c0:8b:d1:4b:56:ed:19:b8:7b:de:f4:99:00:77:24:
+                    3a:0d:45:7f:ff:0c:75:33:8c:95:e5:76:b8:94:8f:
+                    84:ad:4a:6f:44:46:e7:ee:4b:ee:71:e3:fd:20:9d:
+                    58:90:0f:e9:f0:22:74:36:ca:c4:8f:9a:60:85:12:
+                    99:c2:26:62:29:80:9b:00:d7:ce:ed:98:7a:2d:10:
+                    1f:56:b9:a3:a5:b9:63:c3:9b:1d:84:f7:40:67:eb:
+                    c8:aa:46:04:38:59:95:5b:ab:05:20:3a:88:ad:2e:
+                    d6:f8:61:22:2d:40:df:95:2f:a4:8f:5a:7a:ce:22:
+                    ba:be:d3:76:96:42:0e:5e:a6:1e:ff:02:27:04:48:
+                    b6:c7:29:6d:57:81:3f:69:3a:f0:b3:0b:35:99:94:
+                    95:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                87:09:94:1A:5F:B2:4B:AE:02:70:24:A9:73:76:78:FD:C0:0E:DC:56
+                BB:83:13:E6:FB:7E:18:D3:D2:CD:9D:33:9A:67:B7:B5:93:B6:A2:20
             X509v3 Authority Key Identifier: 
-                keyid:0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                keyid:B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -235,41 +235,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-         db:01:1b:5b:f9:4f:9a:03:74:cb:a6:84:16:ab:ba:bb:63:7d:
-         22:94:f5:70:03:dd:6d:fa:53:f2:23:c6:7b:a2:d2:62:96:ba:
-         5a:95:f8:c8:a0:1f:f5:37:01:ce:a5:56:ef:19:5e:da:30:3a:
-         81:ac:13:37:74:dd:5d:1b:b0:4a:cc:c0:b5:8f:d0:ce:6e:06:
-         2b:74:c0:c4:70:fa:3b:90:d1:7b:c3:10:b3:8f:e1:69:42:ec:
-         82:5c:09:ad:5b:0e:8d:4a:18:83:ec:f8:82:dc:e9:d8:5c:fa:
-         cc:f9:c9:6d:cc:b4:db:b0:d8:99:b9:fb:30:d2:28:a0:46:b8:
-         77:fc:c2:12:eb:75:52:20:81:85:da:a6:ed:71:49:db:5c:4f:
-         a5:31:0f:59:c2:73:8d:da:10:be:ec:0c:4a:f8:d4:35:c7:13:
-         5c:eb:f3:c8:42:19:d7:22:07:13:ac:71:46:9f:12:73:9e:0d:
-         2e:c6:75:2d:fc:00:b4:99:13:e4:35:be:7f:7a:2f:2c:7b:44:
-         57:3f:0f:2b:bb:06:25:45:94:2c:2d:af:c0:9f:e2:29:14:61:
-         53:9d:ac:89:d2:04:c6:b9:52:a0:21:70:6f:b1:c0:9c:c9:6d:
-         07:ab:14:d3:d3:49:05:bb:1e:4d:47:b6:62:6d:a2:35:3c:47:
-         3e:32:1c:11
+         30:2b:92:92:fd:bd:5a:2b:5a:15:05:79:b9:f1:a3:ef:bb:bf:
+         56:46:1c:9d:49:15:0d:c4:e8:00:45:38:e0:48:6d:3b:b7:75:
+         fd:e3:1d:df:7c:25:06:07:c4:fe:fc:fb:c3:e5:d2:af:1f:29:
+         89:6f:5e:55:11:90:a2:47:26:b0:61:c8:d8:f0:77:97:3a:a6:
+         74:1b:69:b4:18:c7:59:43:43:da:46:4d:56:28:cf:78:dd:f7:
+         1f:2b:52:04:e8:70:0d:9d:c6:ab:a0:4a:0e:74:57:8b:d9:b7:
+         7e:9e:15:4c:bd:81:64:41:3b:66:88:e4:10:57:a7:2a:8d:21:
+         da:30:ae:3a:c1:d7:82:2b:b6:20:26:d4:32:2e:65:a4:c9:61:
+         84:6e:a5:3b:45:da:8c:b9:3b:b6:76:b1:10:f4:fa:1f:e3:3e:
+         59:7f:91:f6:a9:74:8c:a6:5e:cb:ef:92:5d:2b:ca:93:2a:54:
+         e8:5c:d7:ce:f0:48:72:53:05:80:45:02:fa:b9:fe:f5:1d:a9:
+         a6:cf:04:cf:1e:40:9e:7a:ca:4e:52:42:f3:8f:9d:ae:83:f0:
+         92:1c:74:e0:cc:a2:72:e7:88:94:f0:f0:2f:ae:cc:31:17:58:
+         0f:0f:73:fa:c8:70:46:54:af:04:9a:43:e8:2c:6e:13:68:f8:
+         b6:b9:a5:a5
 -----BEGIN CERTIFICATE-----
 MIIDbjCCAlagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMzJeoTc
-jgxLYPz7Nf9ccgAdJd+HUPplLvpAoseay7Uutg3YgGxU70TJL6QgYAfHCvkPYgww
-nv+bP6c1aqujVsob6mKQD+/jKVLciAalZR8punMRtZhw3Yh/g6YLTNpCkuYIRdr0
-VOCNZ2yXC/2ME2WBahtJG07H3ty1aB0UVyOYM3tDor/av+/nWEMn09apRdCN59dI
-sdzxAJuFimY+IPP84Q+JnyimLSz3okToR1oK+s2OQCp1Bm3KOIm2nR8V2UI2FH4r
-xOPXA6bPTMs0wM7prQXajHORJdMjPnCrFuf+i5Vp9k+YaIYE1nC9D5o3CzW5rRgn
-qhW3CNBUHpSv7fkCAwEAAaOByzCByDAdBgNVHQ4EFgQUhwmUGl+yS64CcCSpc3Z4
-/cAO3FYwHwYDVR0jBBgwFoAUDw9q+nTStkndtS4ll5fj4FH3HiowNwYIKwYBBQUH
+ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANsSJR7C
+dAAQt0CzIQlp5LM7CYlA1vaEILK1ajrIaNyzOqUMLBFGNc/ds4Odk5DHsH39aqqP
+suXAcyUhhxMb2ouSZT9iENWVQjJlTA2pTZL8lXKEv8xvPNwCrSiVtOKe2gsvMOJB
+vwG3wIvRS1btGbh73vSZAHckOg1Ff/8MdTOMleV2uJSPhK1Kb0RG5+5L7nHj/SCd
+WJAP6fAidDbKxI+aYIUSmcImYimAmwDXzu2Yei0QH1a5o6W5Y8ObHYT3QGfryKpG
+BDhZlVurBSA6iK0u1vhhIi1A35UvpI9aes4iur7TdpZCDl6mHv8CJwRItscpbVeB
+P2k68LMLNZmUlYECAwEAAaOByzCByDAdBgNVHQ4EFgQUu4MT5vt+GNPSzZ0zmme3
+tZO2oiAwHwYDVR0jBBgwFoAUsj3aGB6TN/yjsTFMjsKMPLdX1d4wNwYIKwYBBQUH
 AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
 LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
 A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQDbARtb+U+aA3TLpoQWq7q7Y30ilPVwA91t+lPyI8Z7otJilrpalfjIoB/1NwHO
-pVbvGV7aMDqBrBM3dN1dG7BKzMC1j9DObgYrdMDEcPo7kNF7wxCzj+FpQuyCXAmt
-Ww6NShiD7PiC3OnYXPrM+cltzLTbsNiZufsw0iigRrh3/MIS63VSIIGF2qbtcUnb
-XE+lMQ9ZwnON2hC+7AxK+NQ1xxNc6/PIQhnXIgcTrHFGnxJzng0uxnUt/AC0mRPk
-Nb5/ei8se0RXPw8ruwYlRZQsLa/An+IpFGFTnayJ0gTGuVKgIXBvscCcyW0HqxTT
-00kFux5NR7ZibaI1PEc+MhwR
+AQAwK5KS/b1aK1oVBXm58aPvu79WRhydSRUNxOgARTjgSG07t3X94x3ffCUGB8T+
+/PvD5dKvHymJb15VEZCiRyawYcjY8HeXOqZ0G2m0GMdZQ0PaRk1WKM943fcfK1IE
+6HANncaroEoOdFeL2bd+nhVMvYFkQTtmiOQQV6cqjSHaMK46wdeCK7YgJtQyLmWk
+yWGEbqU7RdqMuTu2drEQ9Pof4z5Zf5H2qXSMpl7L75JdK8qTKlToXNfO8EhyUwWA
+RQL6uf71HammzwTPHkCeespOUkLzj52ug/CSHHTgzKJy54iU8PAvrswxF1gPD3P6
+yHBGVK8EmkPoLG4TaPi2uaWl
 -----END CERTIFICATE-----
 
 Certificate:
@@ -286,30 +286,30 @@
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:f1:6d:df:8a:62:88:18:33:0e:b6:95:4d:a7:53:
-                    82:ad:ec:81:5e:c7:e1:d8:b9:38:a5:eb:3f:8e:d8:
-                    97:bb:ed:29:77:b2:d6:ac:34:96:a0:cd:a2:33:d8:
-                    88:49:88:6b:ce:aa:91:02:b9:33:51:52:d5:e7:b6:
-                    ef:55:d3:d6:6a:f3:3f:87:d9:1b:60:b2:e3:b3:78:
-                    be:e2:8c:b4:30:f3:60:75:eb:30:c5:71:51:49:90:
-                    b9:99:5c:2c:78:9e:72:0d:02:3f:16:bb:6d:f7:f7:
-                    9e:07:d2:b4:47:85:ea:b0:92:3e:b6:8a:41:71:6a:
-                    4c:f6:ba:6d:60:4f:7c:29:b3:82:1d:04:07:76:32:
-                    bc:25:38:2c:e4:be:29:2d:80:c3:20:62:a3:65:31:
-                    f2:14:93:2d:92:9d:54:8b:96:4e:4d:df:4e:f7:80:
-                    b2:e7:88:fd:06:32:30:3e:64:9d:e4:96:e0:0e:3a:
-                    ea:c3:4f:ca:df:4a:46:22:1f:df:92:bd:24:82:59:
-                    20:36:95:62:82:92:2e:d9:d7:a7:93:1e:a7:75:fb:
-                    a9:22:a6:98:4d:e6:f2:b4:12:d0:76:0c:b8:a2:fc:
-                    c3:5e:e7:df:fb:c0:b5:90:5b:a8:1a:1d:33:ae:ab:
-                    e3:25:3d:87:b5:58:c6:bc:e4:fa:db:e9:50:67:3f:
-                    ad:ad
+                    00:a2:6b:26:e4:40:38:b0:6e:2a:70:34:7b:4a:b1:
+                    09:16:cb:fb:b2:35:ba:cf:71:2a:55:c7:8c:cf:77:
+                    6e:23:05:2b:dd:cf:a6:bb:93:e7:f1:a6:47:9e:fe:
+                    9f:40:da:97:de:1a:a0:82:96:25:18:6d:f4:d9:21:
+                    73:b3:14:e2:16:c8:75:7f:be:fb:c8:0d:b5:96:12:
+                    cc:e0:6f:0e:e3:5a:95:ce:57:f1:4b:39:2e:a0:2f:
+                    a0:04:80:6b:26:25:0e:4d:01:61:d6:a6:98:ba:f3:
+                    85:e1:77:94:a8:8a:b7:19:7a:a8:c1:c4:21:ce:fd:
+                    6a:a4:6d:f7:86:b2:4f:05:4a:34:51:7a:67:dc:cc:
+                    f2:14:2a:45:a4:54:ff:e7:a1:39:47:7e:ba:65:a8:
+                    28:79:bb:19:20:ba:54:93:81:42:c5:71:43:12:7d:
+                    6a:46:db:3a:d0:8e:b9:b2:46:91:32:1f:99:83:da:
+                    2d:c4:ef:69:3e:0b:11:a5:ba:8d:b3:dd:be:3c:ce:
+                    0c:da:06:d9:9a:a6:27:57:5e:e6:ea:db:89:ea:f6:
+                    38:af:a4:9c:41:1c:84:9f:08:1b:2e:5a:7d:46:83:
+                    f6:74:f0:5a:0c:d1:02:6d:0c:65:1a:8f:a1:3c:a9:
+                    19:92:2f:fc:45:92:b4:c4:97:e8:cb:71:95:72:d3:
+                    aa:2d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
             X509v3 Authority Key Identifier: 
-                keyid:0F:0F:6A:FA:74:D2:B6:49:DD:B5:2E:25:97:97:E3:E0:51:F7:1E:2A
+                keyid:B2:3D:DA:18:1E:93:37:FC:A3:B1:31:4C:8E:C2:8C:3C:B7:57:D5:DE
 
             Authority Information Access: 
                 CA Issuers - URI:http://url-for-aia/Root.cer
@@ -324,41 +324,41 @@
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:1
     Signature Algorithm: sha256WithRSAEncryption
-         38:cf:2c:95:d8:1b:14:a6:43:13:ed:9b:a2:9f:54:eb:33:64:
-         2b:a6:c0:04:81:23:52:27:f1:17:12:a1:9a:f0:d2:77:dd:06:
-         95:90:a5:bb:be:e1:98:f7:f0:11:a3:fc:71:80:c7:d0:72:f3:
-         d4:dc:3f:36:51:52:66:5f:92:a8:fa:ca:4f:8f:8f:2a:3d:93:
-         12:8a:4f:94:69:99:6f:60:0b:86:81:91:00:98:cd:00:37:a7:
-         c7:60:e9:f4:07:85:5b:db:35:9b:61:bb:b6:aa:ca:a2:af:1c:
-         a4:e2:f8:0d:2b:84:2a:9f:7f:53:b6:25:31:ff:31:b8:e6:03:
-         3c:f3:a1:5c:1a:51:4b:3e:d6:82:c9:24:d2:e8:3c:06:6b:b7:
-         f9:f5:77:55:67:fd:75:93:1a:d4:07:5d:6c:7c:6a:ed:12:9c:
-         b5:d6:f2:df:0c:39:a9:05:b9:11:b9:ca:21:31:26:5c:63:ac:
-         c3:bb:a7:e7:87:82:80:10:3a:32:fb:3a:9a:a8:0d:cf:af:94:
-         a4:a2:8a:0e:1c:1d:89:05:82:53:b6:86:1d:80:b4:00:de:31:
-         f1:20:4e:77:65:16:28:70:95:78:6b:d3:2e:e5:30:40:32:d2:
-         f6:b6:5c:30:de:07:70:5f:87:6b:51:31:85:4b:cf:8c:d9:0e:
-         01:9a:12:6c
+         5d:99:4c:1c:89:4d:3b:8a:05:20:3f:73:69:a1:6c:a2:db:89:
+         9e:f7:0d:96:e6:36:fd:17:b0:9c:ad:3d:4a:8a:6b:3f:45:7b:
+         0a:13:67:67:97:cf:a2:25:87:ed:4f:e7:4a:68:e6:a0:83:82:
+         c6:c0:bd:74:65:30:ef:e0:33:3d:78:bd:2c:8c:67:90:8a:06:
+         56:b8:f2:e1:d2:4d:2a:92:37:14:47:b9:23:0d:bc:72:77:e3:
+         d4:fe:6c:fb:f7:0d:f3:eb:4f:32:53:d6:0a:8d:af:56:cf:b3:
+         2c:a5:ac:e9:42:8e:93:e7:7d:52:02:a4:95:bd:ae:8a:cb:8f:
+         d6:d6:03:82:a7:fd:d2:aa:be:ca:2f:ca:4e:fe:87:65:a5:a4:
+         c3:13:04:89:72:22:21:2f:28:7d:37:1d:13:76:d8:bb:ed:f0:
+         86:e6:0a:8e:37:79:7b:d1:1f:b8:de:76:e6:a1:bf:d4:72:c2:
+         d4:85:70:23:03:53:bb:f9:92:ee:ee:e5:39:16:78:d4:79:ea:
+         85:5e:b0:42:ab:74:2b:7a:f8:45:89:e4:5f:b6:4b:05:4b:f9:
+         72:ce:e1:63:10:7b:7d:8d:c4:0e:a5:ca:3f:7a:53:19:63:da:
+         32:d8:5b:c6:c1:ff:71:01:60:65:a9:95:06:af:85:4e:01:bb:
+         37:1d:b4:2f
 -----BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
 MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPFt34piiBgzDraVTadT
-gq3sgV7H4di5OKXrP47Yl7vtKXey1qw0lqDNojPYiEmIa86qkQK5M1FS1ee271XT
-1mrzP4fZG2Cy47N4vuKMtDDzYHXrMMVxUUmQuZlcLHiecg0CPxa7bff3ngfStEeF
-6rCSPraKQXFqTPa6bWBPfCmzgh0EB3YyvCU4LOS+KS2AwyBio2Ux8hSTLZKdVIuW
-Tk3fTveAsueI/QYyMD5kneSW4A466sNPyt9KRiIf35K9JIJZIDaVYoKSLtnXp5Me
-p3X7qSKmmE3m8rQS0HYMuKL8w17n3/vAtZBbqBodM66r4yU9h7VYxrzk+tvpUGc/
-ra0CAwEAAaOBzjCByzAdBgNVHQ4EFgQUDw9q+nTStkndtS4ll5fj4FH3HiowHwYD
-VR0jBBgwFoAUDw9q+nTStkndtS4ll5fj4FH3HiowNwYIKwYBBQUHAQEEKzApMCcG
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKJrJuRAOLBuKnA0e0qx
+CRbL+7I1us9xKlXHjM93biMFK93PpruT5/GmR57+n0Dal94aoIKWJRht9Nkhc7MU
+4hbIdX+++8gNtZYSzOBvDuNalc5X8Us5LqAvoASAayYlDk0BYdammLrzheF3lKiK
+txl6qMHEIc79aqRt94ayTwVKNFF6Z9zM8hQqRaRU/+ehOUd+umWoKHm7GSC6VJOB
+QsVxQxJ9akbbOtCOubJGkTIfmYPaLcTvaT4LEaW6jbPdvjzODNoG2ZqmJ1de5urb
+ier2OK+knEEchJ8IGy5afUaD9nTwWgzRAm0MZRqPoTypGZIv/EWStMSX6MtxlXLT
+qi0CAwEAAaOBzjCByzAdBgNVHQ4EFgQUsj3aGB6TN/yjsTFMjsKMPLdX1d4wHwYD
+VR0jBBgwFoAUsj3aGB6TN/yjsTFMjsKMPLdX1d4wNwYIKwYBBQUHAQEEKzApMCcG
 CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
 IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQA4zyyV
-2BsUpkMT7Zuin1TrM2QrpsAEgSNSJ/EXEqGa8NJ33QaVkKW7vuGY9/ARo/xxgMfQ
-cvPU3D82UVJmX5Ko+spPj48qPZMSik+UaZlvYAuGgZEAmM0AN6fHYOn0B4Vb2zWb
-Ybu2qsqirxyk4vgNK4Qqn39TtiUx/zG45gM886FcGlFLPtaCySTS6DwGa7f59XdV
-Z/11kxrUB11sfGrtEpy11vLfDDmpBbkRucohMSZcY6zDu6fnh4KAEDoy+zqaqA3P
-r5SkoooOHB2JBYJTtoYdgLQA3jHxIE53ZRYocJV4a9Mu5TBAMtL2tlww3gdwX4dr
-UTGFS8+M2Q4BmhJs
+AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQBdmUwc
+iU07igUgP3NpoWyi24me9w2W5jb9F7CcrT1Kims/RXsKE2dnl8+iJYftT+dKaOag
+g4LGwL10ZTDv4DM9eL0sjGeQigZWuPLh0k0qkjcUR7kjDbxyd+PU/mz79w3z608y
+U9YKja9Wz7MspazpQo6T531SAqSVva6Ky4/W1gOCp/3Sqr7KL8pO/odlpaTDEwSJ
+ciIhLyh9Nx0Tdti77fCG5gqON3l70R+43nbmob/UcsLUhXAjA1O7+ZLu7uU5FnjU
+eeqFXrBCq3QrevhFieRftksFS/lyzuFjEHt9jcQOpco/elMZY9oy2FvGwf9xAWBl
+qZUGr4VOAbs3HbQv
 -----END TRUST_ANCHOR_UNCONSTRAINED-----
 
 150302120000Z
@@ -370,3 +370,8 @@
 -----BEGIN VERIFY_RESULT-----
 U1VDQ0VTUw==
 -----END VERIFY_RESULT-----
+
+serverAuth
+-----BEGIN KEY_PURPOSE-----
+c2VydmVyQXV0aA==
+-----END KEY_PURPOSE-----
diff --git a/src/net/disk_cache/disk_cache_perftest.cc b/src/net/disk_cache/disk_cache_perftest.cc
index eeef3b7..e16cccb 100644
--- a/src/net/disk_cache/disk_cache_perftest.cc
+++ b/src/net/disk_cache/disk_cache_perftest.cc
@@ -27,6 +27,8 @@
 #include "net/disk_cache/disk_cache_test_base.h"
 #include "net/disk_cache/disk_cache_test_util.h"
 #include "net/disk_cache/simple/simple_backend_impl.h"
+#include "net/disk_cache/simple/simple_index.h"
+#include "net/disk_cache/simple/simple_index_file.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 
@@ -305,4 +307,42 @@
   base::RunLoop().RunUntilIdle();
 }
 
+// Measures how quickly SimpleIndex can compute which entries to evict.
+TEST(SimpleIndexPerfTest, EvictionPerformance) {
+  const int kEntries = 10000;
+
+  class NoOpDelegate : public disk_cache::SimpleIndexDelegate {
+    void DoomEntries(std::vector<uint64_t>* entry_hashes,
+                     const net::CompletionCallback& callback) override {}
+  };
+
+  NoOpDelegate delegate;
+  base::Time start(base::Time::Now());
+
+  double evict_elapsed_ms = 0;
+  int iterations = 0;
+  while (iterations < 61000) {
+    ++iterations;
+    disk_cache::SimpleIndex index(nullptr, &delegate, net::DISK_CACHE, nullptr);
+
+    // Make sure large enough to not evict on insertion.
+    index.SetMaxSize(kEntries * 2);
+
+    for (int i = 0; i < kEntries; ++i) {
+      index.InsertEntryForTesting(
+          i, disk_cache::EntryMetadata(start + base::TimeDelta::FromSeconds(i),
+                                       1u));
+    }
+
+    // Trigger an eviction.
+    base::ElapsedTimer timer;
+    index.SetMaxSize(kEntries);
+    index.UpdateEntrySize(0, 1u);
+    evict_elapsed_ms += timer.Elapsed().InMillisecondsF();
+  }
+
+  LOG(ERROR) << "Average time to evict:" << (evict_elapsed_ms / iterations)
+             << "ms";
+}
+
 }  // namespace
diff --git a/src/net/disk_cache/simple/simple_index.cc b/src/net/disk_cache/simple/simple_index.cc
index 57f9603..4e5c833 100644
--- a/src/net/disk_cache/simple/simple_index.cc
+++ b/src/net/disk_cache/simple/simple_index.cc
@@ -50,31 +50,6 @@
 
 const uint32_t kBytesInKb = 1024;
 
-// Utility class used for timestamp comparisons in entry metadata while sorting.
-class CompareHashesForTimestamp {
-  typedef disk_cache::SimpleIndex SimpleIndex;
-  typedef disk_cache::SimpleIndex::EntrySet EntrySet;
- public:
-  explicit CompareHashesForTimestamp(const EntrySet& set);
-
-  bool operator()(uint64_t hash1, uint64_t hash2);
-
- private:
-  const EntrySet& entry_set_;
-};
-
-CompareHashesForTimestamp::CompareHashesForTimestamp(const EntrySet& set)
-  : entry_set_(set) {
-}
-
-bool CompareHashesForTimestamp::operator()(uint64_t hash1, uint64_t hash2) {
-  EntrySet::const_iterator it1 = entry_set_.find(hash1);
-  DCHECK(it1 != entry_set_.end());
-  EntrySet::const_iterator it2 = entry_set_.find(hash2);
-  DCHECK(it2 != entry_set_.end());
-  return it1->second.GetLastUsedTime() < it2->second.GetLastUsedTime();
-}
-
 }  // namespace
 
 namespace disk_cache {
@@ -331,28 +306,35 @@
   SIMPLE_CACHE_UMA(
       MEMORY_KB, "Eviction.MaxCacheSizeOnStart2", cache_type_,
       static_cast<base::HistogramBase::Sample>(max_size_ / kBytesInKb));
-  std::vector<uint64_t> entry_hashes;
-  entry_hashes.reserve(entries_set_.size());
-  for (EntrySet::const_iterator it = entries_set_.begin(),
-       end = entries_set_.end(); it != end; ++it) {
-    entry_hashes.push_back(it->first);
-  }
-  std::sort(entry_hashes.begin(), entry_hashes.end(),
-            CompareHashesForTimestamp(entries_set_));
 
-  // Remove as many entries from the index to get below |low_watermark_|.
-  std::vector<uint64_t>::iterator it = entry_hashes.begin();
+  // Flatten for sorting.
+  std::vector<const std::pair<const uint64_t, EntryMetadata>*> entries;
+  entries.reserve(entries_set_.size());
+  for (EntrySet::const_iterator i = entries_set_.begin();
+       i != entries_set_.end(); ++i) {
+    entries.push_back(&*i);
+  }
+
+  std::sort(entries.begin(), entries.end(),
+            [](const std::pair<const uint64_t, EntryMetadata>* a,
+               const std::pair<const uint64_t, EntryMetadata>* b) -> bool {
+              return a->second.RawTimeForSorting() <
+                     b->second.RawTimeForSorting();
+            });
+
+  // Remove as many entries from the index to get below |low_watermark_|,
+  // collecting least recently used hashes into |entry_hashes|.
+  std::vector<uint64_t> entry_hashes;
+  std::vector<const std::pair<const uint64_t, EntryMetadata>*>::iterator it =
+      entries.begin();
   uint64_t evicted_so_far_size = 0;
   while (evicted_so_far_size < cache_size_ - low_watermark_) {
-    DCHECK(it != entry_hashes.end());
-    EntrySet::iterator found_meta = entries_set_.find(*it);
-    DCHECK(found_meta != entries_set_.end());
-    evicted_so_far_size += found_meta->second.GetEntrySize();
+    DCHECK(it != entries.end());
+    entry_hashes.push_back((*it)->first);
+    evicted_so_far_size += (*it)->second.GetEntrySize();
     ++it;
   }
 
-  // Take out the rest of hashes from the eviction list.
-  entry_hashes.erase(it, entry_hashes.end());
   SIMPLE_CACHE_UMA(COUNTS,
                    "Eviction.EntryCount", cache_type_, entry_hashes.size());
   SIMPLE_CACHE_UMA(TIMES,
@@ -403,6 +385,13 @@
   entry_set->insert(std::make_pair(entry_hash, entry_metadata));
 }
 
+void SimpleIndex::InsertEntryForTesting(uint64_t entry_hash,
+                                        const EntryMetadata& entry_metadata) {
+  DCHECK(entries_set_.find(entry_hash) == entries_set_.end());
+  InsertInEntrySet(entry_hash, entry_metadata, &entries_set_);
+  cache_size_ += entry_metadata.GetEntrySize();
+}
+
 void SimpleIndex::PostponeWritingToDisk() {
   if (!initialized_)
     return;
diff --git a/src/net/disk_cache/simple/simple_index.h b/src/net/disk_cache/simple/simple_index.h
index 7758d91..2fd3e1f 100644
--- a/src/net/disk_cache/simple/simple_index.h
+++ b/src/net/disk_cache/simple/simple_index.h
@@ -51,6 +51,10 @@
   base::Time GetLastUsedTime() const;
   void SetLastUsedTime(const base::Time& last_used_time);
 
+  uint32_t RawTimeForSorting() const {
+    return last_used_time_seconds_since_epoch_;
+  }
+
   uint32_t GetEntrySize() const;
   void SetEntrySize(base::StrictNumeric<uint32_t> entry_size);
 
@@ -135,6 +139,11 @@
                                const EntryMetadata& entry_metadata,
                                EntrySet* entry_set);
 
+  // For use in tests only. Updates cache_size_, but will not start evictions
+  // or adjust index writing time. Requires entry to not already be in the set.
+  void InsertEntryForTesting(uint64_t entry_hash,
+                             const EntryMetadata& entry_metadata);
+
   // Executes the |callback| when the index is ready. Allows multiple callbacks.
   int ExecuteWhenReady(const net::CompletionCallback& callback);
 
diff --git a/src/net/dns/dns_query.cc b/src/net/dns/dns_query.cc
index aa9bc70..ac74ca4 100644
--- a/src/net/dns/dns_query.cc
+++ b/src/net/dns/dns_query.cc
@@ -13,14 +13,19 @@
 
 namespace net {
 
+namespace {
+
+const size_t kHeaderSize = sizeof(dns_protocol::Header);
+
+}  // namespace
+
 // DNS query consists of a 12-byte header followed by a question section.
 // For details, see RFC 1035 section 4.1.1.  This header template sets RD
 // bit, which directs the name server to pursue query recursively, and sets
 // the QDCOUNT to 1, meaning the question section has a single entry.
 DnsQuery::DnsQuery(uint16_t id, const base::StringPiece& qname, uint16_t qtype)
     : qname_size_(qname.size()),
-      io_buffer_(
-          new IOBufferWithSize(sizeof(dns_protocol::Header) + question_size())),
+      io_buffer_(new IOBufferWithSize(kHeaderSize + question_size())),
       header_(reinterpret_cast<dns_protocol::Header*>(io_buffer_->data())) {
   DCHECK(!DNSDomainToString(qname).empty());
   *header_ = {};
@@ -29,8 +34,8 @@
   header_->qdcount = base::HostToNet16(1);
 
   // Write question section after the header.
-  base::BigEndianWriter writer(
-      io_buffer_->data() + sizeof(dns_protocol::Header), question_size());
+  base::BigEndianWriter writer(io_buffer_->data() + kHeaderSize,
+                               question_size());
   writer.WriteBytes(qname.data(), qname.size());
   writer.WriteU16(qtype);
   writer.WriteU16(dns_protocol::kClassIN);
@@ -48,20 +53,18 @@
 }
 
 base::StringPiece DnsQuery::qname() const {
-  return base::StringPiece(io_buffer_->data() + sizeof(dns_protocol::Header),
-                           qname_size_);
+  return base::StringPiece(io_buffer_->data() + kHeaderSize, qname_size_);
 }
 
 uint16_t DnsQuery::qtype() const {
   uint16_t type;
-  base::ReadBigEndian<uint16_t>(
-      io_buffer_->data() + sizeof(dns_protocol::Header) + qname_size_, &type);
+  base::ReadBigEndian<uint16_t>(io_buffer_->data() + kHeaderSize + qname_size_,
+                                &type);
   return type;
 }
 
 base::StringPiece DnsQuery::question() const {
-  return base::StringPiece(io_buffer_->data() + sizeof(dns_protocol::Header),
-                           question_size());
+  return base::StringPiece(io_buffer_->data() + kHeaderSize, question_size());
 }
 
 void DnsQuery::set_flags(uint16_t flags) {
diff --git a/src/net/dns/dns_response.cc b/src/net/dns/dns_response.cc
index f168a25..5d23424 100644
--- a/src/net/dns/dns_response.cc
+++ b/src/net/dns/dns_response.cc
@@ -21,6 +21,8 @@
 
 namespace {
 
+const size_t kHeaderSize = sizeof(dns_protocol::Header);
+
 const uint8_t kRcodeMask = 0xf;
 
 }  // namespace
@@ -185,30 +187,25 @@
     return false;
 
   // Match the question section.
-  const size_t hdr_size = sizeof(dns_protocol::Header);
   const base::StringPiece question = query.question();
-  if (question != base::StringPiece(io_buffer_->data() + hdr_size,
-                                    question.size())) {
+  if (question !=
+      base::StringPiece(io_buffer_->data() + kHeaderSize, question.size())) {
     return false;
   }
 
   // Construct the parser.
-  parser_ = DnsRecordParser(io_buffer_->data(),
-                            nbytes,
-                            hdr_size + question.size());
+  parser_ = DnsRecordParser(io_buffer_->data(), nbytes,
+                            kHeaderSize + question.size());
   return true;
 }
 
 bool DnsResponse::InitParseWithoutQuery(int nbytes) {
   DCHECK_GE(nbytes, 0);
 
-  size_t hdr_size = sizeof(dns_protocol::Header);
-
-  if (nbytes < static_cast<int>(hdr_size) || nbytes >= io_buffer_->size())
+  if (nbytes < static_cast<int>(kHeaderSize) || nbytes >= io_buffer_->size())
     return false;
 
-  parser_ = DnsRecordParser(
-      io_buffer_->data(), nbytes, hdr_size);
+  parser_ = DnsRecordParser(io_buffer_->data(), nbytes, kHeaderSize);
 
   unsigned qdcount = base::NetToHost16(header()->qdcount);
   for (unsigned i = 0; i < qdcount; ++i) {
@@ -250,10 +247,9 @@
   // The response is HEADER QNAME QTYPE QCLASS ANSWER.
   // |parser_| is positioned at the beginning of ANSWER, so the end of QNAME is
   // two uint16_ts before it.
-  const size_t hdr_size = sizeof(dns_protocol::Header);
   const size_t qname_size =
-      parser_.GetOffset() - 2 * sizeof(uint16_t) - hdr_size;
-  return base::StringPiece(io_buffer_->data() + hdr_size, qname_size);
+      parser_.GetOffset() - 2 * sizeof(uint16_t) - kHeaderSize;
+  return base::StringPiece(io_buffer_->data() + kHeaderSize, qname_size);
 }
 
 uint16_t DnsResponse::qtype() const {
diff --git a/src/net/extras/sqlite/sqlite_channel_id_store.cc b/src/net/extras/sqlite/sqlite_channel_id_store.cc
index ebcf7ec..fa2d263 100644
--- a/src/net/extras/sqlite/sqlite_channel_id_store.cc
+++ b/src/net/extras/sqlite/sqlite_channel_id_store.cc
@@ -33,8 +33,8 @@
 namespace {
 
 // Version number of the database.
-const int kCurrentVersionNumber = 5;
-const int kCompatibleVersionNumber = 5;
+const int kCurrentVersionNumber = 6;
+const int kCompatibleVersionNumber = 6;
 
 }  // namespace
 
@@ -179,10 +179,6 @@
   if (!base::PathExists(dir) && !base::CreateDirectory(dir))
     return;
 
-  int64_t db_size = 0;
-  if (base::GetFileSize(path_, &db_size))
-    UMA_HISTOGRAM_COUNTS("DomainBoundCerts.DBSizeInKB", db_size / 1024);
-
   db_.reset(new sql::Connection);
   db_->set_histogram_tag("DomainBoundCerts");
 
@@ -212,7 +208,7 @@
 
   // Slurp all the certs into the out-vector.
   sql::Statement smt(db_->GetUniqueStatement(
-      "SELECT host, private_key, public_key, creation_time FROM channel_id"));
+      "SELECT host, private_key, creation_time FROM channel_id"));
   if (!smt.is_valid()) {
     if (corruption_detected_)
       KillDatabase();
@@ -222,18 +218,16 @@
   }
 
   while (smt.Step()) {
-    std::vector<uint8_t> private_key_from_db, public_key_from_db;
+    std::vector<uint8_t> private_key_from_db;
     smt.ColumnBlobAsVector(1, &private_key_from_db);
-    smt.ColumnBlobAsVector(2, &public_key_from_db);
     std::unique_ptr<crypto::ECPrivateKey> key(
-        crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo(
-            private_key_from_db, public_key_from_db));
+        crypto::ECPrivateKey::CreateFromPrivateKeyInfo(private_key_from_db));
     if (!key)
       continue;
     std::unique_ptr<DefaultChannelIDStore::ChannelID> channel_id(
         new DefaultChannelIDStore::ChannelID(
             smt.ColumnString(0),  // host
-            base::Time::FromInternalValue(smt.ColumnInt64(3)), std::move(key)));
+            base::Time::FromInternalValue(smt.ColumnInt64(2)), std::move(key)));
     channel_ids->push_back(std::move(channel_id));
   }
 
@@ -286,10 +280,10 @@
         "SELECT origin, cert, private_key, cert_type FROM origin_bound_certs"));
     sql::Statement insert_statement(db_->GetUniqueStatement(
         "INSERT INTO channel_id (host, private_key, public_key, creation_time) "
-        "VALUES (?, ?, ?, ?)"));
+        "VALUES (?, ?, \"\", ?)"));
     if (!statement.is_valid() || !insert_statement.is_valid()) {
       LOG(WARNING) << "Unable to update server bound cert database to "
-                   << "version 5.";
+                   << "version 6.";
       return false;
     }
 
@@ -299,8 +293,16 @@
       std::string origin = statement.ColumnString(0);
       std::string cert_from_db;
       statement.ColumnBlobAsString(1, &cert_from_db);
-      std::string private_key;
-      statement.ColumnBlobAsString(2, &private_key);
+      std::vector<uint8_t> encrypted_private_key, private_key;
+      statement.ColumnBlobAsVector(2, &encrypted_private_key);
+      std::unique_ptr<crypto::ECPrivateKey> key(
+          crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo(
+              encrypted_private_key, std::vector<uint8_t>()));
+      if (!key || !key->ExportPrivateKey(&private_key)) {
+        LOG(WARNING) << "Unable to parse encrypted private key when migrating "
+                        "Channel ID database to version 6.";
+        continue;
+      }
       // Parse the cert and extract the real value and then update the DB.
       scoped_refptr<X509Certificate> cert(X509Certificate::CreateFromBytes(
           cert_from_db.data(), static_cast<int>(cert_from_db.size())));
@@ -309,18 +311,10 @@
         insert_statement.BindString(0, origin);
         insert_statement.BindBlob(1, private_key.data(),
                                   static_cast<int>(private_key.size()));
-        base::StringPiece spki;
-        if (!asn1::ExtractSPKIFromDERCert(cert_from_db, &spki)) {
-          LOG(WARNING) << "Unable to extract SPKI from cert when migrating "
-                          "channel id database to version 5.";
-          return false;
-        }
-        insert_statement.BindBlob(2, spki.data(),
-                                  static_cast<int>(spki.size()));
-        insert_statement.BindInt64(3, cert->valid_start().ToInternalValue());
+        insert_statement.BindInt64(2, cert->valid_start().ToInternalValue());
         if (!insert_statement.Run()) {
           LOG(WARNING) << "Unable to update channel id database to "
-                       << "version 5.";
+                       << "version 6.";
           return false;
         }
       } else {
@@ -330,14 +324,50 @@
                      << statement.ColumnString(0);
       }
     }
+  } else if (cur_version == 5) {
+    sql::Statement select(
+        db_->GetUniqueStatement("SELECT host, private_key FROM channel_id"));
+    sql::Statement update(
+        db_->GetUniqueStatement("UPDATE channel_id SET private_key = ?, "
+                                "public_key = \"\" WHERE host = ?"));
+    if (!select.is_valid() || !update.is_valid()) {
+      LOG(WARNING) << "Invalid SQL statements to update Channel ID database to "
+                      "version 6.";
+      return false;
+    }
+
+    while (select.Step()) {
+      std::string host = select.ColumnString(0);
+      std::vector<uint8_t> encrypted_private_key, private_key;
+      select.ColumnBlobAsVector(1, &encrypted_private_key);
+      std::unique_ptr<crypto::ECPrivateKey> key(
+          crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo(
+              encrypted_private_key, std::vector<uint8_t>()));
+      if (!key || !key->ExportPrivateKey(&private_key)) {
+        LOG(WARNING) << "Unable to parse encrypted private key when migrating "
+                        "Channel ID database to version 6.";
+        continue;
+      }
+      update.Reset(true);
+      update.BindBlob(0, private_key.data(),
+                      static_cast<int>(private_key.size()));
+      update.BindString(1, host);
+      if (!update.Run()) {
+        LOG(WARNING) << "UPDATE statement failed when updating Channel ID "
+                        "database to version 6.";
+        return false;
+      }
+    }
   }
 
   if (cur_version < kCurrentVersionNumber) {
-    sql::Statement statement(
-        db_->GetUniqueStatement("DROP TABLE origin_bound_certs"));
-    if (!statement.Run()) {
-      LOG(WARNING) << "Error dropping old origin_bound_certs table";
-      return false;
+    if (cur_version <= 4) {
+      sql::Statement statement(
+          db_->GetUniqueStatement("DROP TABLE origin_bound_certs"));
+      if (!statement.Run()) {
+        LOG(WARNING) << "Error dropping old origin_bound_certs table";
+        return false;
+      }
     }
     meta_table_.SetVersionNumber(kCurrentVersionNumber);
     meta_table_.SetCompatibleVersionNumber(kCompatibleVersionNumber);
@@ -408,10 +438,17 @@
 void SQLiteChannelIDStore::Backend::BatchOperation(
     PendingOperation::OperationType op,
     const DefaultChannelIDStore::ChannelID& channel_id) {
-  // Commit every 30 seconds.
-  static const int kCommitIntervalMs = 30 * 1000;
-  // Commit right away if we have more than 512 outstanding operations.
-  static const size_t kCommitAfterBatchSize = 512;
+  // These thresholds used to be 30 seconds or 512 outstanding operations (the
+  // same values used in CookieMonster). Since cookies can be bound to Channel
+  // IDs, it's possible for a cookie to get committed to the cookie database
+  // before the Channel ID it is bound to gets committed. Decreasing these
+  // thresholds increases the chance that the Channel ID will be committed
+  // before or at the same time as the cookie.
+
+  // Commit every 2 seconds.
+  static const int kCommitIntervalMs = 2 * 1000;
+  // Commit right away if we have more than 3 outstanding operations.
+  static const size_t kCommitAfterBatchSize = 3;
 
   // We do a full copy of the cert here, and hopefully just here.
   std::unique_ptr<PendingOperation> po(new PendingOperation(op, channel_id));
@@ -474,8 +511,8 @@
 
   sql::Statement add_statement(db_->GetCachedStatement(
       SQL_FROM_HERE,
-      "INSERT INTO channel_id (host, private_key, public_key, "
-      "creation_time) VALUES (?,?,?,?)"));
+      "INSERT INTO channel_id (host, private_key, public_key, creation_time) "
+      "VALUES (?,?,\"\",?)"));
   if (!add_statement.is_valid())
     return;
 
@@ -496,17 +533,13 @@
       case PendingOperation::CHANNEL_ID_ADD: {
         add_statement.Reset(true);
         add_statement.BindString(0, po->channel_id().server_identifier());
-        std::vector<uint8_t> private_key, public_key;
-        if (!po->channel_id().key()->ExportEncryptedPrivateKey(&private_key))
-          continue;
-        if (!po->channel_id().key()->ExportPublicKey(&public_key))
+        std::vector<uint8_t> private_key;
+        if (!po->channel_id().key()->ExportPrivateKey(&private_key))
           continue;
         add_statement.BindBlob(
             1, private_key.data(), static_cast<int>(private_key.size()));
-        add_statement.BindBlob(2, public_key.data(),
-                               static_cast<int>(public_key.size()));
         add_statement.BindInt64(
-            3, po->channel_id().creation_time().ToInternalValue());
+            2, po->channel_id().creation_time().ToInternalValue());
         if (!add_statement.Run())
           NOTREACHED() << "Could not add a server bound cert to the DB.";
         break;
diff --git a/src/net/extras/sqlite/sqlite_channel_id_store_unittest.cc b/src/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
index 7c9b223..87f6083 100644
--- a/src/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
+++ b/src/net/extras/sqlite/sqlite_channel_id_store_unittest.cc
@@ -288,7 +288,7 @@
       sql::Statement smt(db.GetUniqueStatement(
           "SELECT value FROM meta WHERE key = \"version\""));
       ASSERT_TRUE(smt.Step());
-      EXPECT_EQ(5, smt.ColumnInt(0));
+      EXPECT_EQ(6, smt.ColumnInt(0));
       EXPECT_FALSE(smt.Step());
     }
   }
@@ -364,7 +364,7 @@
       sql::Statement smt(db.GetUniqueStatement(
           "SELECT value FROM meta WHERE key = \"version\""));
       ASSERT_TRUE(smt.Step());
-      EXPECT_EQ(5, smt.ColumnInt(0));
+      EXPECT_EQ(6, smt.ColumnInt(0));
       EXPECT_FALSE(smt.Step());
     }
   }
@@ -442,7 +442,7 @@
       sql::Statement smt(db.GetUniqueStatement(
           "SELECT value FROM meta WHERE key = \"version\""));
       ASSERT_TRUE(smt.Step());
-      EXPECT_EQ(5, smt.ColumnInt(0));
+      EXPECT_EQ(6, smt.ColumnInt(0));
       EXPECT_FALSE(smt.Step());
     }
   }
@@ -536,7 +536,83 @@
       sql::Statement smt(db.GetUniqueStatement(
           "SELECT value FROM meta WHERE key = \"version\""));
       ASSERT_TRUE(smt.Step());
-      EXPECT_EQ(5, smt.ColumnInt(0));
+      EXPECT_EQ(6, smt.ColumnInt(0));
+      EXPECT_FALSE(smt.Step());
+    }
+  }
+}
+
+TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV5) {
+  // Reset the store.  We'll be using a different database for this test.
+  store_ = NULL;
+
+  base::FilePath v5_db_path(temp_dir_.GetPath().AppendASCII("v5db"));
+
+  std::string key_data;
+  std::string cert_data;
+  std::unique_ptr<crypto::ECPrivateKey> key;
+  ASSERT_NO_FATAL_FAILURE(ReadTestKeyAndCert(&key_data, &cert_data, &key));
+
+  // Create a version 5 database.
+  {
+    sql::Connection db;
+    ASSERT_TRUE(db.Open(v5_db_path));
+    ASSERT_TRUE(db.Execute(
+        "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY,"
+        "value LONGVARCHAR);"
+        "INSERT INTO \"meta\" VALUES('version','5');"
+        "INSERT INTO \"meta\" VALUES('last_compatible_version','5');"
+        "CREATE TABLE channel_id ("
+        "host TEXT NOT NULL UNIQUE PRIMARY KEY,"
+        "private_key BLOB NOT NULL,"
+        "public_key BLOB NOT NULL,"
+        "creation_time INTEGER);"));
+
+    sql::Statement add_smt(db.GetUniqueStatement(
+        "INSERT INTO channel_id (host, private_key, public_key, creation_time) "
+        "VALUES (?,?,?,?)"));
+    add_smt.BindString(0, "google.com");
+    add_smt.BindBlob(1, key_data.data(), key_data.size());
+    add_smt.BindBlob(2, "", 0);
+    add_smt.BindInt64(3, GetTestCertCreationTime().ToInternalValue());
+    ASSERT_TRUE(add_smt.Run());
+
+    // Malformed keys will be ignored and not migrated.
+    ASSERT_TRUE(
+        db.Execute("INSERT INTO \"channel_id\" VALUES("
+                   "'bar.com',X'AA',X'BB',3000);"));
+  }
+
+  // Load and test the DB contents twice.  First time ensures that we can use
+  // the updated values immediately.  Second time ensures that the updated
+  // values are saved and read correctly on next load.
+  for (int i = 0; i < 2; ++i) {
+    SCOPED_TRACE(i);
+
+    std::vector<std::unique_ptr<DefaultChannelIDStore::ChannelID>> channel_ids;
+    store_ = new SQLiteChannelIDStore(v5_db_path,
+                                      base::ThreadTaskRunnerHandle::Get());
+
+    // Load the database and ensure the certs can be read.
+    Load(&channel_ids);
+    ASSERT_EQ(1U, channel_ids.size());
+
+    ASSERT_EQ("google.com", channel_ids[0]->server_identifier());
+    ASSERT_EQ(GetTestCertCreationTime(), channel_ids[0]->creation_time());
+    EXPECT_TRUE(KeysEqual(key.get(), channel_ids[0]->key()));
+
+    store_ = NULL;
+    // Make sure we wait until the destructor has run.
+    base::RunLoop().RunUntilIdle();
+
+    // Verify the database version is updated.
+    {
+      sql::Connection db;
+      ASSERT_TRUE(db.Open(v5_db_path));
+      sql::Statement smt(db.GetUniqueStatement(
+          "SELECT value FROM meta WHERE key = \"version\""));
+      ASSERT_TRUE(smt.Step());
+      EXPECT_EQ(6, smt.ColumnInt(0));
       EXPECT_FALSE(smt.Step());
     }
   }
diff --git a/src/net/filter/filter_source_stream.cc b/src/net/filter/filter_source_stream.cc
index 603bd70..688d692 100644
--- a/src/net/filter/filter_source_stream.cc
+++ b/src/net/filter/filter_source_stream.cc
@@ -17,6 +17,12 @@
 
 namespace {
 
+const char kDeflate[] = "deflate";
+const char kGZip[] = "gzip";
+const char kSdch[] = "sdch";
+const char kXGZip[] = "x-gzip";
+const char kBrotli[] = "br";
+
 const size_t kBufferSize = 32 * 1024;
 
 }  // namespace
@@ -67,6 +73,28 @@
   return next_type_string + "," + GetTypeAsString();
 }
 
+FilterSourceStream::SourceType FilterSourceStream::ParseEncodingType(
+    const std::string& encoding) {
+  if (encoding.empty()) {
+    return TYPE_NONE;
+  } else if (base::LowerCaseEqualsASCII(encoding, kBrotli)) {
+    return TYPE_BROTLI;
+  } else if (base::LowerCaseEqualsASCII(encoding, kDeflate)) {
+    return TYPE_DEFLATE;
+  } else if (base::LowerCaseEqualsASCII(encoding, kGZip) ||
+             base::LowerCaseEqualsASCII(encoding, kXGZip)) {
+    return TYPE_GZIP;
+  } else if (base::LowerCaseEqualsASCII(encoding, kSdch)) {
+    return TYPE_SDCH;
+  } else {
+    return TYPE_UNKNOWN;
+  }
+}
+
+void FilterSourceStream::ReportContentDecodingFailed(SourceType type) {
+  UMA_HISTOGRAM_ENUMERATION("Net.ContentDecodingFailed2", type, TYPE_MAX);
+}
+
 int FilterSourceStream::DoLoop(int result) {
   DCHECK_NE(STATE_NONE, next_state_);
 
@@ -136,8 +164,7 @@
          consumed_bytes == drainable_input_buffer_->BytesRemaining());
 
   if (bytes_output == ERR_CONTENT_DECODING_FAILED) {
-    UMA_HISTOGRAM_ENUMERATION("Net.ContentDecodingFailed2.FilterType", type(),
-                              TYPE_MAX);
+    ReportContentDecodingFailed(type());
   }
   // FilterData() is not allowed to return ERR_IO_PENDING.
   DCHECK_NE(ERR_IO_PENDING, bytes_output);
diff --git a/src/net/filter/filter_source_stream.h b/src/net/filter/filter_source_stream.h
index 3d24bd1..4855dfc 100644
--- a/src/net/filter/filter_source_stream.h
+++ b/src/net/filter/filter_source_stream.h
@@ -38,6 +38,10 @@
 
   std::string Description() const override;
 
+  static SourceType ParseEncodingType(const std::string& encoding);
+
+  static void ReportContentDecodingFailed(SourceType type);
+
  private:
   enum State {
     STATE_NONE,
diff --git a/src/net/filter/filter_unittest.cc b/src/net/filter/filter_unittest.cc
deleted file mode 100644
index d2b6afc..0000000
--- a/src/net/filter/filter_unittest.cc
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/filter/filter.h"
-
-#include <utility>
-
-#include "base/macros.h"
-#include "net/base/io_buffer.h"
-#include "net/filter/mock_filter_context.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-
-namespace {
-
-class PassThroughFilter : public Filter {
- public:
-  PassThroughFilter() : Filter(FILTER_TYPE_UNSUPPORTED) {}
-
-  FilterStatus ReadFilteredData(char* dest_buffer, int* dest_len) override {
-    return CopyOut(dest_buffer, dest_len);
-  }
-
-  DISALLOW_COPY_AND_ASSIGN(PassThroughFilter);
-};
-
-}  // namespace
-
-TEST(FilterTest, ContentTypeId) {
-  // Check for basic translation of Content-Encoding, including case variations.
-  EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE,
-            Filter::ConvertEncodingToType("deflate"));
-  EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE,
-            Filter::ConvertEncodingToType("deflAte"));
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP,
-            Filter::ConvertEncodingToType("gzip"));
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP,
-            Filter::ConvertEncodingToType("GzIp"));
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP,
-            Filter::ConvertEncodingToType("x-gzip"));
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP,
-            Filter::ConvertEncodingToType("X-GzIp"));
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH,
-            Filter::ConvertEncodingToType("sdch"));
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH,
-            Filter::ConvertEncodingToType("sDcH"));
-  EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED,
-            Filter::ConvertEncodingToType("weird"));
-  EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED,
-            Filter::ConvertEncodingToType("strange"));
-}
-
-TEST(FilterTest, SdchEncoding) {
-  // Handle content encodings including SDCH.
-  const std::string kTextHtmlMime("text/html");
-  MockFilterContext filter_context;
-  // Empty handle indicates to filter that SDCH is active.
-  filter_context.SetSdchResponse(
-      SdchManager::CreateEmptyDictionarySetForTesting());
-
-  std::vector<Filter::FilterType> encoding_types;
-
-  // Check for most common encoding, and verify it survives unchanged.
-  encoding_types.clear();
-  encoding_types.push_back(Filter::FILTER_TYPE_SDCH);
-  encoding_types.push_back(Filter::FILTER_TYPE_GZIP);
-  filter_context.SetMimeType(kTextHtmlMime);
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types[1]);
-
-  // Unchanged even with other mime types.
-  encoding_types.clear();
-  encoding_types.push_back(Filter::FILTER_TYPE_SDCH);
-  encoding_types.push_back(Filter::FILTER_TYPE_GZIP);
-  filter_context.SetMimeType("other/type");
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types[1]);
-
-  // Solo SDCH is extended to include optional gunzip.
-  encoding_types.clear();
-  encoding_types.push_back(Filter::FILTER_TYPE_SDCH);
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-}
-
-TEST(FilterTest, MissingSdchEncoding) {
-  // Handle interesting case where entire SDCH encoding assertion "got lost."
-  const std::string kTextHtmlMime("text/html");
-  MockFilterContext filter_context;
-  filter_context.SetSdchResponse(
-      SdchManager::CreateEmptyDictionarySetForTesting());
-
-  std::vector<Filter::FilterType> encoding_types;
-
-  // Loss of encoding, but it was an SDCH response with html type.
-  encoding_types.clear();
-  filter_context.SetMimeType(kTextHtmlMime);
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-
-  // Loss of encoding, but it was an SDCH response with a prefix that says it
-  // was an html type. Note that it *should* be the case that a precise match
-  // with "text/html" we be collected by GetMimeType() and passed in, but we
-  // coded the fixup defensively (scanning for a prefix of "text/html", so this
-  // is an example which could survive such confusion in the caller).
-  encoding_types.clear();
-  filter_context.SetMimeType("text/html; charset=UTF-8");
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-
-  // No encoding, but it was an SDCH response with non-html type.
-  encoding_types.clear();
-  filter_context.SetMimeType("other/mime");
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(2U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]);
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-}
-
-// FixupEncodingTypes() should leave gzip encoding intact.
-TEST(FilterTest, Gzip) {
-  const std::string kUrl("http://example.com/foo");
-  MockFilterContext filter_context;
-  std::vector<Filter::FilterType> encoding_types;
-  filter_context.SetURL(GURL(kUrl));
-
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  EXPECT_EQ(0U, encoding_types.size());
-
-  encoding_types.clear();
-  encoding_types.push_back(Filter::FILTER_TYPE_GZIP);
-  Filter::FixupEncodingTypes(filter_context, &encoding_types);
-  ASSERT_EQ(1U, encoding_types.size());
-  EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front());
-}
-
-// Make sure a series of three pass-through filters copies the data cleanly.
-// Regression test for http://crbug.com/418975.
-TEST(FilterTest, ThreeFilterChain) {
-  std::unique_ptr<PassThroughFilter> filter1(new PassThroughFilter);
-  std::unique_ptr<PassThroughFilter> filter2(new PassThroughFilter);
-  std::unique_ptr<PassThroughFilter> filter3(new PassThroughFilter);
-
-  filter1->InitBuffer(32 * 1024);
-  filter2->InitBuffer(32 * 1024);
-  filter3->InitBuffer(32 * 1024);
-
-  filter2->next_filter_ = std::move(filter3);
-  filter1->next_filter_ = std::move(filter2);
-
-  // Initialize the input array with a varying byte sequence.
-  const size_t input_array_size = 64 * 1024;
-  char input_array[input_array_size];
-  size_t read_array_index = 0;
-  for (size_t i = 0; i < input_array_size; i++) {
-    input_array[i] = i % 113;
-  }
-
-  const size_t output_array_size = 4 * 1024;
-  char output_array[output_array_size];
-
-  size_t compare_array_index = 0;
-
-  do {
-    // Read data from the filter chain.
-    int amount_read = output_array_size;
-    Filter::FilterStatus status = filter1->ReadData(output_array, &amount_read);
-    EXPECT_NE(Filter::FILTER_ERROR, status);
-    EXPECT_EQ(0, memcmp(output_array, input_array + compare_array_index,
-                        amount_read));
-    compare_array_index += amount_read;
-
-    // Detect the various indications that data transfer along the chain is
-    // complete.
-    if (Filter::FILTER_DONE == status || Filter::FILTER_ERROR == status ||
-        (Filter::FILTER_OK == status && amount_read == 0) ||
-        (Filter::FILTER_NEED_MORE_DATA == status &&
-         read_array_index == input_array_size))
-      break;
-
-    if (Filter::FILTER_OK == status)
-      continue;
-
-    // Write needed data into the filter chain.
-    ASSERT_EQ(Filter::FILTER_NEED_MORE_DATA, status);
-    ASSERT_NE(0, filter1->stream_buffer_size());
-    size_t amount_to_copy = std::min(
-        static_cast<size_t>(filter1->stream_buffer_size()),
-        input_array_size - read_array_index);
-    memcpy(filter1->stream_buffer()->data(),
-           input_array + read_array_index,
-           amount_to_copy);
-    filter1->FlushStreamBuffer(amount_to_copy);
-    read_array_index += amount_to_copy;
-  } while (true);
-
-  EXPECT_EQ(read_array_index, input_array_size);
-  EXPECT_EQ(compare_array_index, input_array_size);
-}
-
-}  // Namespace net
diff --git a/src/net/filter/source_stream_type_list.h b/src/net/filter/source_stream_type_list.h
index 2b020ee..70975a8 100644
--- a/src/net/filter/source_stream_type_list.h
+++ b/src/net/filter/source_stream_type_list.h
@@ -12,3 +12,5 @@
 SOURCE_STREAM_TYPE(SDCH_POSSIBLE)
 SOURCE_STREAM_TYPE(INVALID)
 SOURCE_STREAM_TYPE(NONE)
+SOURCE_STREAM_TYPE(REJECTED)
+SOURCE_STREAM_TYPE(UNKNOWN)
diff --git a/src/net/http/BUILD.gn b/src/net/http/BUILD.gn
index 72f6d69..e510619 100644
--- a/src/net/http/BUILD.gn
+++ b/src/net/http/BUILD.gn
@@ -4,6 +4,22 @@
 
 import("//build/compiled_action.gni")
 
+compiled_action("generate_transport_security_state") {
+  tool = "//net/tools/transport_security_state_generator"
+
+  # Inputs in order expected by the command line of the tool.
+  inputs = [
+    "transport_security_state_static.json",
+    "transport_security_state_static.pins",
+    "transport_security_state_static.template",
+  ]
+  outputs = [
+    "$target_gen_dir/transport_security_state_static.h",
+  ]
+  args =
+      rebase_path(inputs, root_build_dir) + rebase_path(outputs, root_build_dir)
+}
+
 compiled_action_foreach("transport_security_state_unittest_data") {
   tool = "//net/tools/transport_security_state_generator"
   sources = [
diff --git a/src/net/http/bidirectional_stream.cc b/src/net/http/bidirectional_stream.cc
index ea65dca..a8fe3ad 100644
--- a/src/net/http/bidirectional_stream.cc
+++ b/src/net/http/bidirectional_stream.cc
@@ -124,7 +124,8 @@
       session->http_stream_factory()->RequestBidirectionalStreamImpl(
           http_request_info, request_info_->priority, server_ssl_config,
           server_ssl_config, this,
-          /* enable_ip_based_pooling = */ true, net_log_));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, net_log_));
   // Check that this call cannot fail to set a non-NULL |stream_request_|.
   DCHECK(stream_request_);
   // Check that HttpStreamFactory does not invoke OnBidirectionalStreamImplReady
diff --git a/src/net/http/http_auth_filter_win.h b/src/net/http/http_auth_filter_win.h
deleted file mode 100644
index d2c0af4..0000000
--- a/src/net/http/http_auth_filter_win.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_HTTP_HTTP_AUTH_FILTER_WIN_H_
-#define NET_HTTP_HTTP_AUTH_FILTER_WIN_H_
-
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include "base/strings/string16.h"
-
-namespace net {
-
-enum RegistryHiveType {
-  CURRENT_USER,
-  LOCAL_MACHINE
-};
-
-namespace http_auth {
-
-// The common path to all the registry keys containing domain zone information.
-extern const base::char16 kRegistryInternetSettings[];
-extern const base::char16 kSettingsMachineOnly[];
-extern const base::char16* kRegistryEntries[3];  // L"http", L"https", and L"*"
-
-extern const base::char16* GetRegistryWhitelistKey();
-// Override the whitelist key.  Passing in NULL restores the default value.
-extern void SetRegistryWhitelistKey(const base::char16* new_whitelist_key);
-extern bool UseOnlyMachineSettings();
-
-}  // namespace http_auth
-
-}  // namespace net
-#endif  // OS_WIN
-
-#endif  // NET_HTTP_HTTP_AUTH_FILTER_WIN_H_
diff --git a/src/net/http/http_network_session.cc b/src/net/http/http_network_session.cc
index b57653a..022e746 100644
--- a/src/net/http/http_network_session.cc
+++ b/src/net/http/http_network_session.cc
@@ -126,7 +126,7 @@
       enable_http2_alternative_service_with_different_host(false),
       enable_quic_alternative_service_with_different_host(true),
       enable_quic(false),
-      disable_quic_on_timeout_with_open_streams(false),
+      mark_quic_broken_when_network_blackholes(false),
       quic_always_require_handshake_confirmation(false),
       quic_disable_connection_pooling(false),
       quic_load_server_info_timeout_srtt_multiplier(0.25f),
@@ -210,7 +210,7 @@
           params.quic_delay_tcp_race,
           params.quic_max_server_configs_stored_in_properties,
           params.quic_close_sessions_on_ip_change,
-          params.disable_quic_on_timeout_with_open_streams,
+          params.mark_quic_broken_when_network_blackholes,
           params.quic_idle_connection_timeout_seconds,
           params.quic_reduced_ping_timeout_seconds,
           params.quic_packet_reader_yield_after_duration_milliseconds,
@@ -358,9 +358,6 @@
       params_.quic_packet_reader_yield_after_duration_milliseconds);
   dict->SetBoolean("disable_preconnect_if_0rtt",
                    params_.quic_disable_preconnect_if_0rtt);
-  dict->SetBoolean("disable_quic_on_timeout_with_open_streams",
-                   params_.disable_quic_on_timeout_with_open_streams);
-  dict->SetBoolean("is_quic_disabled", quic_stream_factory_.IsQuicDisabled());
   dict->SetBoolean("force_hol_blocking", params_.quic_force_hol_blocking);
   dict->SetBoolean("race_cert_verification",
                    params_.quic_race_cert_verification);
diff --git a/src/net/http/http_network_session.h b/src/net/http/http_network_session.h
index b0ed8c0..ca0a761 100644
--- a/src/net/http/http_network_session.h
+++ b/src/net/http/http_network_session.h
@@ -119,8 +119,9 @@
 
     // Enables QUIC support.
     bool enable_quic;
-    // Disable QUIC if a connection times out with open streams.
-    bool disable_quic_on_timeout_with_open_streams;
+    // Marks a QUIC server broken when a connection blackholes after the
+    // handshake is confirmed.
+    bool mark_quic_broken_when_network_blackholes;
     // Disables QUIC's 0-RTT behavior.
     bool quic_always_require_handshake_confirmation;
     // Disables QUIC connection pooling.
diff --git a/src/net/http/http_network_transaction.cc b/src/net/http/http_network_transaction.cc
index e0105c6..4a669e2 100644
--- a/src/net/http/http_network_transaction.cc
+++ b/src/net/http/http_network_transaction.cc
@@ -32,6 +32,7 @@
 #include "net/base/net_errors.h"
 #include "net/base/upload_data_stream.h"
 #include "net/base/url_util.h"
+#include "net/filter/filter_source_stream.h"
 #include "net/http/http_auth.h"
 #include "net/http/http_auth_handler.h"
 #include "net/http/http_auth_handler_factory.h"
@@ -101,6 +102,7 @@
       next_state_(STATE_NONE),
       establishing_tunnel_(false),
       enable_ip_based_pooling_(true),
+      enable_alternative_services_(true),
       websocket_handshake_stream_base_create_helper_(NULL),
       net_error_details_() {}
 
@@ -545,6 +547,12 @@
   establishing_tunnel_ = true;
   response_.headers = proxy_response.headers;
   response_.auth_challenge = proxy_response.auth_challenge;
+
+  if (response_.headers.get() && !ContentEncodingsValid()) {
+    DoCallback(ERR_CONTENT_DECODING_FAILED);
+    return;
+  }
+
   headers_valid_ = true;
   server_ssl_config_ = used_ssl_config;
   proxy_info_ = used_proxy_info;
@@ -843,17 +851,21 @@
   response_.network_accessed = true;
 
   next_state_ = STATE_CREATE_STREAM_COMPLETE;
+  // IP based pooling and Alternative Services are disabled under the same
+  // circumstances: on a retry after 421 Misdirected Request is received.
+  DCHECK(enable_ip_based_pooling_ == enable_alternative_services_);
   if (ForWebSocketHandshake()) {
     stream_request_.reset(
         session_->http_stream_factory_for_websocket()
             ->RequestWebSocketHandshakeStream(
                 *request_, priority_, server_ssl_config_, proxy_ssl_config_,
                 this, websocket_handshake_stream_base_create_helper_,
-                enable_ip_based_pooling_, net_log_));
+                enable_ip_based_pooling_, enable_alternative_services_,
+                net_log_));
   } else {
     stream_request_.reset(session_->http_stream_factory()->RequestStream(
         *request_, priority_, server_ssl_config_, proxy_ssl_config_, this,
-        enable_ip_based_pooling_, net_log_));
+        enable_ip_based_pooling_, enable_alternative_services_, net_log_));
   }
   DCHECK(stream_request_.get());
   return ERR_IO_PENDING;
@@ -1237,6 +1249,9 @@
 
   DCHECK(response_.headers.get());
 
+  if (response_.headers.get() && !ContentEncodingsValid())
+    return ERR_CONTENT_DECODING_FAILED;
+
   // On a 408 response from the server ("Request Timeout") on a stale socket,
   // retry the request.
   // Headers can be NULL because of http://crbug.com/384554.
@@ -1533,6 +1548,13 @@
         error = OK;
       }
       break;
+    case ERR_QUIC_BROKEN_ERROR:
+      DCHECK(GetResponseHeaders() == nullptr);
+      net_log_.AddEventWithNetErrorCode(
+          NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error);
+      ResetConnectionAndRequestForResend();
+      error = OK;
+      break;
     case ERR_SPDY_PING_FAILED:
     case ERR_SPDY_SERVER_REFUSED_STREAM:
     case ERR_QUIC_HANDSHAKE_FAILED:
@@ -1543,11 +1565,12 @@
       break;
     case ERR_MISDIRECTED_REQUEST:
       // If this is the second try, just give up.
-      if (!enable_ip_based_pooling_)
+      if (!enable_ip_based_pooling_ && !enable_alternative_services_)
         return OK;
-      // Otherwise, since the response status was 421 Misdirected Request,
-      // retry the request with IP based pooling disabled.
+      // Otherwise retry the request with both IP based pooling
+      // and Alternative Services disabled.
       enable_ip_based_pooling_ = false;
+      enable_alternative_services_ = false;
       net_log_.AddEventWithNetErrorCode(
           NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error);
       ResetConnectionAndRequestForResend();
@@ -1718,4 +1741,45 @@
     connection_attempts_.push_back(attempt);
 }
 
+bool HttpNetworkTransaction::ContentEncodingsValid() const {
+  HttpResponseHeaders* headers = GetResponseHeaders();
+  DCHECK(headers);
+
+  std::string accept_encoding;
+  request_headers_.GetHeader(HttpRequestHeaders::kAcceptEncoding,
+                             &accept_encoding);
+  std::set<std::string> allowed_encodings;
+  if (!HttpUtil::ParseAcceptEncoding(accept_encoding, &allowed_encodings)) {
+    FilterSourceStream::ReportContentDecodingFailed(SourceStream::TYPE_INVALID);
+    return false;
+  }
+
+  std::string content_encoding;
+  headers->GetNormalizedHeader("Content-Encoding", &content_encoding);
+  std::set<std::string> used_encodings;
+  if (!HttpUtil::ParseContentEncoding(content_encoding, &used_encodings)) {
+    FilterSourceStream::ReportContentDecodingFailed(SourceStream::TYPE_INVALID);
+    return false;
+  }
+
+  // When "Accept-Encoding" is not specified, it is parsed as "*".
+  // If "*" encoding is advertised, then any encoding should be "accepted".
+  // This does not mean, that it will be successfully decoded.
+  if (allowed_encodings.find("*") != allowed_encodings.end())
+    return true;
+
+  for (auto const& encoding : used_encodings) {
+    SourceStream::SourceType source_type =
+        FilterSourceStream::ParseEncodingType(encoding);
+    // We don't reject encodings we are not aware. They just will not decode.
+    if (source_type == SourceStream::TYPE_UNKNOWN)
+      continue;
+    if (allowed_encodings.find(encoding) == allowed_encodings.end()) {
+      FilterSourceStream::ReportContentDecodingFailed(source_type);
+      return false;
+    }
+  }
+  return true;
+}
+
 }  // namespace net
diff --git a/src/net/http/http_network_transaction.h b/src/net/http/http_network_transaction.h
index 17c03bc..550b24b 100644
--- a/src/net/http/http_network_transaction.h
+++ b/src/net/http/http_network_transaction.h
@@ -296,6 +296,10 @@
 
   void CopyConnectionAttemptsFromStreamRequest();
 
+  // Returns true if response "Content-Encoding" headers respect
+  // "Accept-Encoding".
+  bool ContentEncodingsValid() const;
+
   scoped_refptr<HttpAuthController>
       auth_controllers_[HttpAuth::AUTH_NUM_TARGETS];
 
@@ -373,6 +377,9 @@
   // even if the SpdySessionKey is different.
   bool enable_ip_based_pooling_;
 
+  // Enable using alternative services for the request.
+  bool enable_alternative_services_;
+
   // The helper object to use to create WebSocketHandshakeStreamBase
   // objects. Only relevant when establishing a WebSocket connection.
   WebSocketHandshakeStreamBase::CreateHelper*
diff --git a/src/net/http/http_network_transaction_unittest.cc b/src/net/http/http_network_transaction_unittest.cc
index 11766c4..0314f62 100644
--- a/src/net/http/http_network_transaction_unittest.cc
+++ b/src/net/http/http_network_transaction_unittest.cc
@@ -15085,6 +15085,7 @@
                                    const SSLConfig& proxy_ssl_config,
                                    HttpStreamRequest::Delegate* delegate,
                                    bool enable_ip_based_pooling,
+                                   bool enable_alternative_services,
                                    const NetLogWithSource& net_log) override {
     FakeStreamRequest* fake_request = new FakeStreamRequest(priority, delegate);
     last_stream_request_ = fake_request->AsWeakPtr();
@@ -15098,6 +15099,7 @@
       const SSLConfig& proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) override {
     NOTREACHED();
     return nullptr;
@@ -15111,6 +15113,7 @@
       HttpStreamRequest::Delegate* delegate,
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) override {
     FakeStreamRequest* fake_request =
         new FakeStreamRequest(priority, delegate, create_helper);
@@ -16659,4 +16662,60 @@
 }
 #endif  // !defined(OS_IOS)
 
+void CheckContentEncodingMatching(SpdySessionDependencies* session_deps,
+                                  const std::string& accept_encoding,
+                                  const std::string& content_encoding,
+                                  bool should_match) {
+  HttpRequestInfo request;
+  request.method = "GET";
+  request.url = GURL("http://www.foo.com/");
+  request.extra_headers.SetHeader(HttpRequestHeaders::kAcceptEncoding,
+                                  accept_encoding);
+
+  std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps));
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+      MockWrite("GET / HTTP/1.1\r\n"
+                "Host: www.foo.com\r\n"
+                "Connection: keep-alive\r\n"
+                "Accept-Encoding: "),
+      MockWrite(accept_encoding.data()), MockWrite("\r\n\r\n"),
+  };
+
+  MockRead data_reads[] = {
+      MockRead("HTTP/1.0 200 OK\r\n"),   MockRead("Content-Encoding: "),
+      MockRead(content_encoding.data()), MockRead("\r\n\r\n"),
+      MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps->socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans.Start(&request, callback.callback(), NetLogWithSource());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  rv = callback.WaitForResult();
+  if (should_match) {
+    EXPECT_THAT(rv, IsOk());
+  } else {
+    EXPECT_THAT(rv, IsError(ERR_CONTENT_DECODING_FAILED));
+  }
+}
+
+TEST_F(HttpNetworkTransactionTest, MatchContentEncoding1) {
+  CheckContentEncodingMatching(&session_deps_, "gzip,sdch", "br", false);
+}
+
+TEST_F(HttpNetworkTransactionTest, MatchContentEncoding2) {
+  CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "", true);
+}
+
+TEST_F(HttpNetworkTransactionTest, MatchContentEncoding3) {
+  CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip",
+                               false);
+}
+
 }  // namespace net
diff --git a/src/net/http/http_server_properties.h b/src/net/http/http_server_properties.h
index f6b71c3..eef795b 100644
--- a/src/net/http/http_server_properties.h
+++ b/src/net/http/http_server_properties.h
@@ -59,6 +59,7 @@
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT = 2,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN = 3,
+  BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4,
   BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX,
 };
 
@@ -175,6 +176,9 @@
 typedef std::vector<AlternativeServiceInfo> AlternativeServiceInfoVector;
 typedef base::MRUCache<url::SchemeHostPort, AlternativeServiceInfoVector>
     AlternativeServiceMap;
+// Map to the number of times each alternative service has been marked broken.
+typedef base::MRUCache<AlternativeService, int>
+    RecentlyBrokenAlternativeServices;
 typedef base::MRUCache<url::SchemeHostPort, ServerNetworkStats>
     ServerNetworkStatsMap;
 typedef base::MRUCache<QuicServerId, std::string> QuicServerInfoMap;
diff --git a/src/net/http/http_server_properties_impl.cc b/src/net/http/http_server_properties_impl.cc
index b1b5cec..6ea3b86 100644
--- a/src/net/http/http_server_properties_impl.cc
+++ b/src/net/http/http_server_properties_impl.cc
@@ -33,6 +33,8 @@
 HttpServerPropertiesImpl::HttpServerPropertiesImpl()
     : spdy_servers_map_(SpdyServersMap::NO_AUTO_EVICT),
       alternative_service_map_(AlternativeServiceMap::NO_AUTO_EVICT),
+      recently_broken_alternative_services_(
+          RecentlyBrokenAlternativeServices::NO_AUTO_EVICT),
       server_network_stats_map_(ServerNetworkStatsMap::NO_AUTO_EVICT),
       quic_server_info_map_(QuicServerInfoMap::NO_AUTO_EVICT),
       max_server_configs_stored_in_properties_(kMaxQuicServersToPersist),
@@ -454,8 +456,13 @@
     LOG(DFATAL) << "Trying to mark unknown alternate protocol broken.";
     return;
   }
-  ++recently_broken_alternative_services_[alternative_service];
-  int shift = recently_broken_alternative_services_[alternative_service] - 1;
+  auto it = recently_broken_alternative_services_.Get(alternative_service);
+  int shift = 0;
+  if (it == recently_broken_alternative_services_.end()) {
+    recently_broken_alternative_services_.Put(alternative_service, 1);
+  } else {
+    shift = it->second++;
+  }
   if (shift > kBrokenDelayMaxShift)
     shift = kBrokenDelayMaxShift;
   base::TimeDelta delay =
@@ -477,9 +484,10 @@
 
 void HttpServerPropertiesImpl::MarkAlternativeServiceRecentlyBroken(
     const AlternativeService& alternative_service) {
-  if (!base::ContainsKey(recently_broken_alternative_services_,
-                         alternative_service))
-    recently_broken_alternative_services_[alternative_service] = 1;
+  if (recently_broken_alternative_services_.Get(alternative_service) ==
+      recently_broken_alternative_services_.end()) {
+    recently_broken_alternative_services_.Put(alternative_service, 1);
+  }
 }
 
 bool HttpServerPropertiesImpl::IsAlternativeServiceBroken(
@@ -493,8 +501,9 @@
     const AlternativeService& alternative_service) {
   if (alternative_service.protocol == kProtoUnknown)
     return false;
-  return base::ContainsKey(recently_broken_alternative_services_,
-                           alternative_service);
+
+  return recently_broken_alternative_services_.Get(alternative_service) !=
+         recently_broken_alternative_services_.end();
 }
 
 void HttpServerPropertiesImpl::ConfirmAlternativeService(
@@ -502,7 +511,10 @@
   if (alternative_service.protocol == kProtoUnknown)
     return;
   broken_alternative_services_.erase(alternative_service);
-  recently_broken_alternative_services_.erase(alternative_service);
+  auto it = recently_broken_alternative_services_.Get(alternative_service);
+  if (it != recently_broken_alternative_services_.end()) {
+    recently_broken_alternative_services_.Erase(it);
+  }
 }
 
 const AlternativeServiceMap& HttpServerPropertiesImpl::alternative_service_map()
diff --git a/src/net/http/http_server_properties_impl.h b/src/net/http/http_server_properties_impl.h
index 549dbc0..b483bb2 100644
--- a/src/net/http/http_server_properties_impl.h
+++ b/src/net/http/http_server_properties_impl.h
@@ -139,8 +139,6 @@
                           base::TimeTicks,
                           AlternativeServiceHash>
       BrokenAlternativeServices;
-  // Map to the number of times each alternative service has been marked broken.
-  typedef std::map<AlternativeService, int> RecentlyBrokenAlternativeServices;
 
   // Return the iterator for |server|, or for its canonical host, or end.
   AlternativeServiceMap::const_iterator GetAlternateProtocolIterator(
diff --git a/src/net/http/http_server_properties_impl_unittest.cc b/src/net/http/http_server_properties_impl_unittest.cc
index be611bf..d6283c4 100644
--- a/src/net/http/http_server_properties_impl_unittest.cc
+++ b/src/net/http/http_server_properties_impl_unittest.cc
@@ -29,7 +29,13 @@
       base::TimeTicks when) {
     impl.broken_alternative_services_.insert(
         std::make_pair(alternative_service, when));
-    ++impl.recently_broken_alternative_services_[alternative_service];
+    auto it =
+        impl.recently_broken_alternative_services_.Get(alternative_service);
+    if (it == impl.recently_broken_alternative_services_.end()) {
+      impl.recently_broken_alternative_services_.Put(alternative_service, 1);
+    } else {
+      it->second++;
+    }
   }
 
   static void ExpireBrokenAlternateProtocolMappings(
diff --git a/src/net/http/http_stream_factory.h b/src/net/http/http_stream_factory.h
index 4dd1540..95aca6b 100644
--- a/src/net/http/http_stream_factory.h
+++ b/src/net/http/http_stream_factory.h
@@ -209,6 +209,7 @@
       const SSLConfig& proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) = 0;
 
   // Request a WebSocket handshake stream.
@@ -222,6 +223,7 @@
       HttpStreamRequest::Delegate* delegate,
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) = 0;
 
   // Request a BidirectionalStreamImpl.
@@ -234,6 +236,7 @@
       const SSLConfig& proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) = 0;
 
   // Requests that enough connections for |num_streams| be opened.
diff --git a/src/net/http/http_stream_factory_impl.cc b/src/net/http/http_stream_factory_impl.cc
index 973c536..13948e4 100644
--- a/src/net/http/http_stream_factory_impl.cc
+++ b/src/net/http/http_stream_factory_impl.cc
@@ -138,12 +138,13 @@
     const SSLConfig& proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     bool enable_ip_based_pooling,
+    bool enable_alternative_services,
     const NetLogWithSource& net_log) {
   DCHECK(!for_websockets_);
-  return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               proxy_ssl_config, delegate, nullptr,
-                               HttpStreamRequest::HTTP_STREAM,
-                               enable_ip_based_pooling, net_log);
+  return RequestStreamInternal(
+      request_info, priority, server_ssl_config, proxy_ssl_config, delegate,
+      nullptr, HttpStreamRequest::HTTP_STREAM, enable_ip_based_pooling,
+      enable_alternative_services, net_log);
 }
 
 HttpStreamRequest* HttpStreamFactoryImpl::RequestWebSocketHandshakeStream(
@@ -154,13 +155,14 @@
     HttpStreamRequest::Delegate* delegate,
     WebSocketHandshakeStreamBase::CreateHelper* create_helper,
     bool enable_ip_based_pooling,
+    bool enable_alternative_services,
     const NetLogWithSource& net_log) {
   DCHECK(for_websockets_);
   DCHECK(create_helper);
-  return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               proxy_ssl_config, delegate, create_helper,
-                               HttpStreamRequest::HTTP_STREAM,
-                               enable_ip_based_pooling, net_log);
+  return RequestStreamInternal(
+      request_info, priority, server_ssl_config, proxy_ssl_config, delegate,
+      create_helper, HttpStreamRequest::HTTP_STREAM, enable_ip_based_pooling,
+      enable_alternative_services, net_log);
 }
 
 HttpStreamRequest* HttpStreamFactoryImpl::RequestBidirectionalStreamImpl(
@@ -170,14 +172,15 @@
     const SSLConfig& proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     bool enable_ip_based_pooling,
+    bool enable_alternative_services,
     const NetLogWithSource& net_log) {
   DCHECK(!for_websockets_);
   DCHECK(request_info.url.SchemeIs(url::kHttpsScheme));
 
-  return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               proxy_ssl_config, delegate, nullptr,
-                               HttpStreamRequest::BIDIRECTIONAL_STREAM,
-                               enable_ip_based_pooling, net_log);
+  return RequestStreamInternal(
+      request_info, priority, server_ssl_config, proxy_ssl_config, delegate,
+      nullptr, HttpStreamRequest::BIDIRECTIONAL_STREAM, enable_ip_based_pooling,
+      enable_alternative_services, net_log);
 }
 
 HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal(
@@ -190,10 +193,12 @@
         websocket_handshake_stream_create_helper,
     HttpStreamRequest::StreamType stream_type,
     bool enable_ip_based_pooling,
+    bool enable_alternative_services,
     const NetLogWithSource& net_log) {
   auto job_controller = base::MakeUnique<JobController>(
       this, delegate, session_, job_factory_.get(), request_info,
-      /* is_preconnect = */ false, enable_ip_based_pooling);
+      /* is_preconnect = */ false, enable_ip_based_pooling,
+      enable_alternative_services);
   JobController* job_controller_raw_ptr = job_controller.get();
   job_controller_set_.insert(std::move(job_controller));
   Request* request = job_controller_raw_ptr->Start(
@@ -218,7 +223,8 @@
   auto job_controller = base::MakeUnique<JobController>(
       this, nullptr, session_, job_factory_.get(), request_info,
       /* is_preconnect = */ true,
-      /* enable_ip_based_pooling = */ true);
+      /* enable_ip_based_pooling = */ true,
+      /* enable_alternative_services = */ true);
   JobController* job_controller_raw_ptr = job_controller.get();
   job_controller_set_.insert(std::move(job_controller));
   job_controller_raw_ptr->Preconnect(num_streams, request_info,
diff --git a/src/net/http/http_stream_factory_impl.h b/src/net/http/http_stream_factory_impl.h
index 6fd07a9..ce29d1f 100644
--- a/src/net/http/http_stream_factory_impl.h
+++ b/src/net/http/http_stream_factory_impl.h
@@ -50,6 +50,7 @@
                                    const SSLConfig& proxy_ssl_config,
                                    HttpStreamRequest::Delegate* delegate,
                                    bool enable_ip_based_pooling,
+                                   bool enable_alternative_services,
                                    const NetLogWithSource& net_log) override;
 
   HttpStreamRequest* RequestWebSocketHandshakeStream(
@@ -60,6 +61,7 @@
       HttpStreamRequest::Delegate* delegate,
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) override;
 
   HttpStreamRequest* RequestBidirectionalStreamImpl(
@@ -69,6 +71,7 @@
       const SSLConfig& proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log) override;
 
   void PreconnectStreams(int num_streams, const HttpRequestInfo& info) override;
@@ -126,6 +129,7 @@
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       HttpStreamRequest::StreamType stream_type,
       bool enable_ip_based_pooling,
+      bool enable_alternative_services,
       const NetLogWithSource& net_log);
 
   // Called when a SpdySession is ready. It will find appropriate Requests and
diff --git a/src/net/http/http_stream_factory_impl_job.cc b/src/net/http/http_stream_factory_impl_job.cc
index 8273a5a..398f84e 100644
--- a/src/net/http/http_stream_factory_impl_job.cc
+++ b/src/net/http/http_stream_factory_impl_job.cc
@@ -217,7 +217,8 @@
       enable_ip_based_pooling_(enable_ip_based_pooling),
       delegate_(delegate),
       job_type_(job_type),
-      using_ssl_(false),
+      using_ssl_(origin_url_.SchemeIs(url::kHttpsScheme) ||
+                 origin_url_.SchemeIs(url::kWssScheme)),
       using_spdy_(false),
       using_quic_(false),
       quic_request_(session_->quic_stream_factory(),
@@ -333,17 +334,6 @@
 
 void HttpStreamFactoryImpl::Job::Orphan() {
   net_log_.AddEvent(NetLogEventType::HTTP_STREAM_JOB_ORPHANED);
-
-  if (delegate_->for_websockets()) {
-    // We cancel this job because a WebSocketHandshakeStream can't be created
-    // without a WebSocketHandshakeStreamBase::CreateHelper which is stored in
-    // the Request class and isn't retrievable by this job.
-    if (connection_ && connection_->socket()) {
-      connection_->socket()->Disconnect();
-    }
-    delegate_->OnOrphanedJobComplete(this);
-  }
-  // |this| may be deleted after this call.
 }
 
 void HttpStreamFactoryImpl::Job::SetPriority(RequestPriority priority) {
@@ -731,7 +721,7 @@
 }
 
 int HttpStreamFactoryImpl::Job::DoStart() {
-  const NetLogWithSource* net_log = delegate_->GetNetLog(this);
+  const NetLogWithSource* net_log = delegate_->GetNetLog();
 
   if (net_log) {
     net_log_.BeginEvent(
@@ -849,6 +839,7 @@
 }
 
 int HttpStreamFactoryImpl::Job::DoInitConnection() {
+  net_log_.BeginEvent(NetLogEventType::HTTP_STREAM_JOB_INIT_CONNECTION);
   int result = DoInitConnectionImpl();
   if (result != ERR_SPDY_SESSION_ALREADY_EXISTS)
     delegate_->OnConnectionInitialized(this, result);
@@ -870,8 +861,6 @@
     return OK;
   }
 
-  using_ssl_ = origin_url_.SchemeIs(url::kHttpsScheme) ||
-               origin_url_.SchemeIs(url::kWssScheme);
   using_spdy_ = false;
 
   if (ShouldForceQuic())
@@ -919,9 +908,6 @@
       replacements.ClearQuery();
       replacements.ClearRef();
       url = url.ReplaceComponents(replacements);
-
-      if (session_->quic_stream_factory()->IsQuicDisabled())
-        return ERR_QUIC_PROTOCOL_ERROR;
     } else {
       DCHECK(using_ssl_);
       // The certificate of a QUIC alternative server is expected to be valid
@@ -1023,6 +1009,7 @@
 }
 
 int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) {
+  net_log_.EndEvent(NetLogEventType::HTTP_STREAM_JOB_INIT_CONNECTION);
   if (job_type_ == PRECONNECT) {
     if (using_quic_)
       return result;
@@ -1047,16 +1034,6 @@
     return OK;
   }
 
-  if (proxy_info_.is_quic()) {
-    DCHECK(using_quic_);
-    // Mark QUIC proxy as bad if QUIC got disabled.
-    // Underlying QUIC layer would have closed the connection.
-    if (session_->quic_stream_factory()->IsQuicDisabled()) {
-      using_quic_ = false;
-      return ReconsiderProxyAfterError(ERR_QUIC_PROTOCOL_ERROR);
-    }
-  }
-
   // |result| may be the result of any of the stacked pools. The following
   // logic is used when determining how to interpret an error.
   // If |result| < 0:
diff --git a/src/net/http/http_stream_factory_impl_job.h b/src/net/http/http_stream_factory_impl_job.h
index 0ae7222..f73587a 100644
--- a/src/net/http/http_stream_factory_impl_job.h
+++ b/src/net/http/http_stream_factory_impl_job.h
@@ -119,9 +119,6 @@
         const base::WeakPtr<SpdySession>& spdy_session,
         bool direct) = 0;
 
-    // Invoked when the orphaned |job| finishes.
-    virtual void OnOrphanedJobComplete(const Job* job) = 0;
-
     // Invoked when the |job| finishes pre-connecting sockets.
     virtual void OnPreconnectsComplete(Job* job) = 0;
 
@@ -148,7 +145,7 @@
     // Remove session from the SpdySessionRequestMap.
     virtual void RemoveRequestFromSpdySessionRequestMapForJob(Job* job) = 0;
 
-    virtual const NetLogWithSource* GetNetLog(Job* job) const = 0;
+    virtual const NetLogWithSource* GetNetLog() const = 0;
 
     virtual WebSocketHandshakeStreamBase::CreateHelper*
     websocket_handshake_stream_create_helper() = 0;
@@ -436,8 +433,8 @@
 
   const JobType job_type_;
 
-  // True if handling a HTTPS request, or using SPDY with SSL
-  bool using_ssl_;
+  // True if handling a HTTPS request.
+  const bool using_ssl_;
 
   // True if this network transaction is using SPDY instead of HTTP.
   bool using_spdy_;
@@ -449,12 +446,6 @@
   // True if this job used an existing QUIC session.
   bool using_existing_quic_session_;
 
-  // Force quic for a specific port.
-  int force_quic_port_;
-
-  scoped_refptr<HttpAuthController>
-      auth_controllers_[HttpAuth::AUTH_NUM_TARGETS];
-
   // True when the tunnel is in the process of being established - we can't
   // read from the socket until the tunnel is done.
   bool establishing_tunnel_;
diff --git a/src/net/http/http_stream_factory_impl_job_controller.cc b/src/net/http/http_stream_factory_impl_job_controller.cc
index 9b368f1..ec38277 100644
--- a/src/net/http/http_stream_factory_impl_job_controller.cc
+++ b/src/net/http/http_stream_factory_impl_job_controller.cc
@@ -13,6 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "base/trace_event/memory_usage_estimator.h"
 #include "base/values.h"
 #include "net/base/host_mapping_rules.h"
 #include "net/base/proxy_delegate.h"
@@ -49,7 +50,8 @@
     JobFactory* job_factory,
     const HttpRequestInfo& request_info,
     bool is_preconnect,
-    bool enable_ip_based_pooling)
+    bool enable_ip_based_pooling,
+    bool enable_alternative_services)
     : factory_(factory),
       session_(session),
       job_factory_(job_factory),
@@ -57,6 +59,7 @@
       delegate_(delegate),
       is_preconnect_(is_preconnect),
       enable_ip_based_pooling_(enable_ip_based_pooling),
+      enable_alternative_services_(enable_alternative_services),
       alternative_job_net_error_(OK),
       job_bound_(false),
       main_job_is_blocked_(false),
@@ -657,8 +660,8 @@
   }
 }
 
-const NetLogWithSource* HttpStreamFactoryImpl::JobController::GetNetLog(
-    Job* job) const {
+const NetLogWithSource* HttpStreamFactoryImpl::JobController::GetNetLog()
+    const {
   return &net_log_;
 }
 
@@ -679,12 +682,8 @@
 }
 
 size_t HttpStreamFactoryImpl::JobController::EstimateMemoryUsage() const {
-  size_t estimated_size = 0;
-  if (main_job_)
-    estimated_size += main_job_->EstimateMemoryUsage();
-  if (alternative_job_)
-    estimated_size += alternative_job_->EstimateMemoryUsage();
-  return estimated_size;
+  return base::trace_event::EstimateMemoryUsage(main_job_) +
+         base::trace_event::EstimateMemoryUsage(alternative_job_);
 }
 
 WebSocketHandshakeStreamBase::CreateHelper* HttpStreamFactoryImpl::
@@ -774,10 +773,11 @@
 
 void HttpStreamFactoryImpl::JobController::OrphanUnboundJob() {
   DCHECK(request_);
+  DCHECK(bound_job_);
   RemoveRequestFromSpdySessionRequestMap();
 
-  DCHECK(bound_job_);
   if (bound_job_->job_type() == MAIN && alternative_job_) {
+    DCHECK(!for_websockets());
     alternative_job_->Orphan();
   } else if (bound_job_->job_type() == ALTERNATIVE && main_job_) {
     // Orphan main job.
@@ -790,6 +790,7 @@
       DCHECK(alternative_job_);
       main_job_.reset();
     } else {
+      DCHECK(!for_websockets());
       main_job_->Orphan();
     }
   }
@@ -883,7 +884,6 @@
     session_->http_server_properties()->MarkAlternativeServiceBroken(
         failed_alternative_service_);
   }
-  session_->quic_stream_factory()->OnTcpJobCompleted(true);
 }
 
 void HttpStreamFactoryImpl::JobController::MaybeNotifyFactoryOfCompletion() {
@@ -927,6 +927,9 @@
     const HttpRequestInfo& request_info,
     HttpStreamRequest::Delegate* delegate,
     HttpStreamRequest::StreamType stream_type) {
+  if (!enable_alternative_services_)
+    return AlternativeService();
+
   AlternativeService alternative_service =
       GetAlternativeServiceForInternal(request_info, delegate, stream_type);
   AlternativeServiceType type;
@@ -1030,9 +1033,6 @@
       continue;
     }
 
-    if (session_->quic_stream_factory()->IsQuicDisabled())
-      continue;
-
     if (!original_url.SchemeIs(url::kHttpsScheme))
       continue;
 
@@ -1068,6 +1068,10 @@
         const GURL& url,
         ProxyServer* alternative_proxy_server) const {
   DCHECK(!alternative_proxy_server->is_valid());
+
+  if (!enable_alternative_services_)
+    return false;
+
   if (!can_start_alternative_proxy_job_) {
     // Either an alternative service job or an alternative proxy server job has
     // already been started.
@@ -1118,11 +1122,9 @@
   }
 
   if (alternative_proxy_server->is_quic()) {
-    // Check that QUIC is enabled globally, and it is not disabled.
-    if (!session_->IsQuicEnabled() ||
-        session_->quic_stream_factory()->IsQuicDisabled()) {
+    // Check that QUIC is enabled globally.
+    if (!session_->IsQuicEnabled())
       return false;
-    }
   }
 
   return true;
diff --git a/src/net/http/http_stream_factory_impl_job_controller.h b/src/net/http/http_stream_factory_impl_job_controller.h
index a0b0da7..9a43bfb 100644
--- a/src/net/http/http_stream_factory_impl_job_controller.h
+++ b/src/net/http/http_stream_factory_impl_job_controller.h
@@ -25,7 +25,8 @@
                 JobFactory* job_factory,
                 const HttpRequestInfo& request_info,
                 bool is_preconnect,
-                bool enable_ip_based_pooling);
+                bool enable_ip_based_pooling,
+                bool enable_alternative_services);
 
   ~JobController() override;
 
@@ -135,9 +136,6 @@
                              const base::WeakPtr<SpdySession>& spdy_session,
                              bool direct) override;
 
-  // Invoked when the orphaned |job| finishes.
-  void OnOrphanedJobComplete(const Job* job) override;
-
   // Invoked when the |job| finishes pre-connecting sockets.
   void OnPreconnectsComplete(Job* job) override;
 
@@ -165,7 +163,7 @@
   // Remove session from the SpdySessionRequestMap.
   void RemoveRequestFromSpdySessionRequestMapForJob(Job* job) override;
 
-  const NetLogWithSource* GetNetLog(Job* job) const override;
+  const NetLogWithSource* GetNetLog() const override;
 
   void MaybeSetWaitTimeForMainJob(const base::TimeDelta& delay) override;
 
@@ -207,6 +205,9 @@
   // completion.
   void OrphanUnboundJob();
 
+  // Invoked when the orphaned |job| finishes.
+  void OnOrphanedJobComplete(const Job* job);
+
   // Called when a Job succeeds.
   void OnJobSucceeded(Job* job);
 
@@ -290,6 +291,9 @@
   // the SpdySessionKey is different.
   const bool enable_ip_based_pooling_;
 
+  // Enable using alternative services for the request.
+  const bool enable_alternative_services_;
+
   // |main_job_| is a job waiting to see if |alternative_job_| can reuse a
   // connection. If |alternative_job_| is unable to do so, |this| will notify
   // |main_job_| to proceed and then race the two jobs.
diff --git a/src/net/http/http_stream_factory_impl_job_controller_unittest.cc b/src/net/http/http_stream_factory_impl_job_controller_unittest.cc
index d3d0934..1c00041 100644
--- a/src/net/http/http_stream_factory_impl_job_controller_unittest.cc
+++ b/src/net/http/http_stream_factory_impl_job_controller_unittest.cc
@@ -72,6 +72,8 @@
   }
 };
 
+// TODO(xunjieli): This should just use HangingHostResolver from
+// mock_host_resolver.h
 class HangingResolver : public MockHostResolverBase {
  public:
   HangingResolver() : MockHostResolverBase(false /*use_caching*/) {}
@@ -127,6 +129,8 @@
       : session_deps_(ProxyService::CreateDirect()),
         use_alternative_proxy_(false),
         is_preconnect_(false),
+        enable_ip_based_pooling_(true),
+        enable_alternative_services_(true),
         test_proxy_delegate_(nullptr) {
     session_deps_.enable_quic = true;
   }
@@ -141,6 +145,16 @@
     is_preconnect_ = true;
   }
 
+  void DisableIPBasedPooling() {
+    ASSERT_FALSE(test_proxy_delegate_);
+    enable_ip_based_pooling_ = false;
+  }
+
+  void DisableAlternativeServices() {
+    ASSERT_FALSE(test_proxy_delegate_);
+    enable_alternative_services_ = false;
+  }
+
   void Initialize(const HttpRequestInfo& request_info) {
     ASSERT_FALSE(test_proxy_delegate_);
     std::unique_ptr<TestProxyDelegate> test_proxy_delegate(
@@ -162,7 +176,8 @@
         static_cast<HttpStreamFactoryImpl*>(session_->http_stream_factory());
     job_controller_ = new HttpStreamFactoryImpl::JobController(
         factory_, &request_delegate_, session_.get(), &job_factory_,
-        request_info, is_preconnect_, /* enable_ip_based_pooling = */ true);
+        request_info, is_preconnect_, enable_ip_based_pooling_,
+        enable_alternative_services_);
     HttpStreamFactoryImplPeer::AddJobController(factory_, job_controller_);
   }
 
@@ -203,6 +218,8 @@
  private:
   bool use_alternative_proxy_;
   bool is_preconnect_;
+  bool enable_ip_based_pooling_;
+  bool enable_alternative_services_;
 
   // Not owned by |this|.
   TestProxyDelegate* test_proxy_delegate_;
@@ -899,8 +916,10 @@
 
 TEST_F(HttpStreamFactoryImplJobControllerTest, DelayedTCP) {
   base::ScopedMockTimeMessageLoopTaskRunner test_task_runner;
-  HangingResolver* resolver = new HangingResolver();
-  session_deps_.host_resolver.reset(resolver);
+  auto failing_resolver = base::MakeUnique<MockHostResolver>();
+  failing_resolver->set_ondemand_mode(true);
+  failing_resolver->rules()->AddSimulatedFailure("*google.com");
+  session_deps_.host_resolver = std::move(failing_resolver);
 
   HttpRequestInfo request_info;
   request_info.method = "GET";
@@ -948,10 +967,12 @@
   // OnStreamFailed will post a task to resume the main job immediately but
   // won't call Resume() on the main job since it's been resumed already.
   EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0);
-  job_controller_->OnStreamFailed(job_factory_.alternative_job(),
-                                  ERR_NETWORK_CHANGED, SSLConfig());
+  // Now unblock Resolver so that alternate job (and QuicStreamFactory::Job) can
+  // be cleaned up.
+  session_deps_.host_resolver->ResolveAllPending();
   EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
   test_task_runner->FastForwardUntilNoTasksRemain();
+  EXPECT_FALSE(job_controller_->alternative_job());
 }
 
 // Test that main job is blocked for kMaxDelayTimeForMainJob(3s) if
@@ -964,8 +985,10 @@
   base::ScopedMockTimeMessageLoopTaskRunner test_task_runner;
   // The max delay time should be in sync with .cc file.
   base::TimeDelta kMaxDelayTimeForMainJob = base::TimeDelta::FromSeconds(3);
-  HangingResolver* resolver = new HangingResolver();
-  session_deps_.host_resolver.reset(resolver);
+  auto failing_resolver = base::MakeUnique<MockHostResolver>();
+  failing_resolver->set_ondemand_mode(true);
+  failing_resolver->rules()->AddSimulatedFailure("*google.com");
+  session_deps_.host_resolver = std::move(failing_resolver);
 
   HttpRequestInfo request_info;
   request_info.method = "GET";
@@ -1005,6 +1028,13 @@
   // main job is resumed.
   test_task_runner->FastForwardBy(kMaxDelayTimeForMainJob);
   EXPECT_FALSE(test_task_runner->HasPendingTask());
+
+  // Now unblock Resolver so that alternate job (and QuicStreamFactory::Job) can
+  // be cleaned up.
+  session_deps_.host_resolver->ResolveAllPending();
+  EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
+  test_task_runner->FastForwardUntilNoTasksRemain();
+  EXPECT_FALSE(job_controller_->alternative_job());
 }
 
 TEST_F(HttpStreamFactoryImplJobControllerTest,
@@ -1013,8 +1043,10 @@
   // could verify the main job is resumed with appropriate delay.
   base::ScopedMockTimeMessageLoopTaskRunner test_task_runner;
 
-  HangingResolver* resolver = new HangingResolver();
-  session_deps_.host_resolver.reset(resolver);
+  auto failing_resolver = base::MakeUnique<MockHostResolver>();
+  failing_resolver->set_ondemand_mode(true);
+  failing_resolver->rules()->AddSimulatedFailure("*google.com");
+  session_deps_.host_resolver = std::move(failing_resolver);
 
   HttpRequestInfo request_info;
   request_info.method = "GET";
@@ -1052,8 +1084,8 @@
 
   // |alternative_job| fails but should not report status to Request.
   EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
-  job_controller_->OnStreamFailed(job_factory_.alternative_job(),
-                                  ERR_NETWORK_CHANGED, SSLConfig());
+  // Now unblock Resolver to fail the alternate job.
+  session_deps_.host_resolver->ResolveAllPending();
   EXPECT_EQ(2u, test_task_runner->GetPendingTaskCount());
 
   // Verify the main job will be resumed immediately.
@@ -1069,6 +1101,7 @@
   EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0);
   test_task_runner->FastForwardBy(base::TimeDelta::FromMicroseconds(15));
   EXPECT_FALSE(test_task_runner->HasPendingTask());
+  EXPECT_FALSE(job_controller_->alternative_job());
 }
 
 // Verifies that the alternative proxy server job is not created if the URL
@@ -1132,9 +1165,10 @@
   // could verify the main job is resumed with appropriate delay.
   base::ScopedMockTimeMessageLoopTaskRunner test_task_runner;
 
-  // Using hanging resolver will cause the alternative job to hang indefinitely.
-  HangingResolver* resolver = new HangingResolver();
-  session_deps_.host_resolver.reset(resolver);
+  auto failing_resolver = base::MakeUnique<MockHostResolver>();
+  failing_resolver->set_ondemand_mode(true);
+  failing_resolver->rules()->AddSimulatedFailure("*myproxy.org");
+  session_deps_.host_resolver = std::move(failing_resolver);
 
   UseAlternativeProxy();
 
@@ -1183,6 +1217,13 @@
   EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_valid());
   EXPECT_EQ(1, test_proxy_delegate()->get_alternative_proxy_invocations());
   EXPECT_FALSE(test_task_runner->HasPendingTask());
+
+  // Now unblock Resolver so that alternate job (and QuicStreamFactory::Job) can
+  // be cleaned up.
+  session_deps_.host_resolver->ResolveAllPending();
+  EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
+  test_task_runner->FastForwardUntilNoTasksRemain();
+  EXPECT_FALSE(job_controller_->alternative_job());
 }
 
 // Verifies that the alternative proxy server job fails immediately, and the
@@ -1316,6 +1357,64 @@
   EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
 }
 
+class HttpStreamFactoryImplJobControllerMisdirectedRequestRetry
+    : public HttpStreamFactoryImplJobControllerTest,
+      public ::testing::WithParamInterface<::testing::tuple<bool, bool>> {};
+
+INSTANTIATE_TEST_CASE_P(
+    /* no prefix */,
+    HttpStreamFactoryImplJobControllerMisdirectedRequestRetry,
+    ::testing::Combine(::testing::Bool(), ::testing::Bool()));
+
+TEST_P(HttpStreamFactoryImplJobControllerMisdirectedRequestRetry,
+       DisableIPBasedPoolingAndAlternativeServices) {
+  const bool enable_ip_based_pooling = ::testing::get<0>(GetParam());
+  const bool enable_alternative_services = ::testing::get<1>(GetParam());
+
+  ProxyConfig proxy_config;
+  proxy_config.set_auto_detect(true);
+  // Use asynchronous proxy resolver.
+  MockAsyncProxyResolverFactory* proxy_resolver_factory =
+      new MockAsyncProxyResolverFactory(false);
+  session_deps_.proxy_service.reset(
+      new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config),
+                       base::WrapUnique(proxy_resolver_factory), nullptr));
+  HttpRequestInfo request_info;
+  request_info.method = "GET";
+  request_info.url = GURL("https://www.google.com");
+
+  if (!enable_ip_based_pooling)
+    DisableIPBasedPooling();
+  if (!enable_alternative_services)
+    DisableAlternativeServices();
+
+  Initialize(request_info);
+
+  url::SchemeHostPort server(request_info.url);
+  AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
+  SetAlternativeService(request_info, alternative_service);
+
+  request_.reset(
+      job_controller_->Start(request_info, &request_delegate_, nullptr,
+                             NetLogWithSource(), HttpStreamRequest::HTTP_STREAM,
+                             DEFAULT_PRIORITY, SSLConfig(), SSLConfig()));
+  EXPECT_TRUE(job_controller_->main_job());
+  if (enable_alternative_services) {
+    EXPECT_TRUE(job_controller_->alternative_job());
+  } else {
+    EXPECT_FALSE(job_controller_->alternative_job());
+  }
+
+  // |main_job| succeeds and should report status to Request.
+  HttpStream* http_stream =
+      new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
+  job_factory_.main_job()->SetStream(http_stream);
+
+  EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
+      .WillOnce(Invoke(DeleteHttpStreamPointer));
+  job_controller_->OnStreamReady(job_factory_.main_job(), SSLConfig());
+}
+
 class HttpStreamFactoryImplJobControllerPreconnectTest
     : public HttpStreamFactoryImplJobControllerTest,
       public ::testing::WithParamInterface<bool> {
@@ -1338,7 +1437,8 @@
     job_controller_ = new HttpStreamFactoryImpl::JobController(
         factory_, &request_delegate_, session_.get(), &job_factory_,
         request_info_, /* is_preconnect = */ true,
-        /* enable_ip_based_pooling = */ true);
+        /* enable_ip_based_pooling = */ true,
+        /* enable_alternative_services = */ true);
     HttpStreamFactoryImplPeer::AddJobController(factory_, job_controller_);
   }
 
diff --git a/src/net/http/http_stream_factory_impl_request_unittest.cc b/src/net/http/http_stream_factory_impl_request_unittest.cc
index 5dab0cc..b2bff0e 100644
--- a/src/net/http/http_stream_factory_impl_request_unittest.cc
+++ b/src/net/http/http_stream_factory_impl_request_unittest.cc
@@ -36,7 +36,8 @@
   auto job_controller = base::MakeUnique<HttpStreamFactoryImpl::JobController>(
       factory, &request_delegate, session.get(), &job_factory, request_info,
       /* is_preconnect = */ false,
-      /* enable_ip_based_pooling = */ true);
+      /* enable_ip_based_pooling = */ true,
+      /* enable_alternative_services = */ true);
   HttpStreamFactoryImpl::JobController* job_controller_raw_ptr =
       job_controller.get();
   factory->job_controller_set_.insert(std::move(job_controller));
diff --git a/src/net/http/http_stream_factory_impl_unittest.cc b/src/net/http/http_stream_factory_impl_unittest.cc
index d26f9fb..2ac222b 100644
--- a/src/net/http/http_stream_factory_impl_unittest.cc
+++ b/src/net/http/http_stream_factory_impl_unittest.cc
@@ -693,7 +693,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
 
   // The proxy that failed should now be known to the proxy_service as bad.
@@ -777,7 +778,8 @@
     std::unique_ptr<HttpStreamRequest> request(
         session->http_stream_factory()->RequestStream(
             request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-            /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+            /* enable_ip_based_pooling = */ true,
+            /* enable_alternative_services = */ true, NetLogWithSource()));
     waiter.WaitForStream();
 
     // The proxy that failed should now be known to the proxy_service as bad.
@@ -980,7 +982,8 @@
         std::unique_ptr<HttpStreamRequest> request(
             session->http_stream_factory()->RequestStream(
                 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-                /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+                /* enable_ip_based_pooling = */ true,
+                /* enable_alternative_services = */ true, NetLogWithSource()));
         waiter.WaitForStream();
 
         // The proxy that failed should now be known to the proxy_service as
@@ -1083,7 +1086,8 @@
       std::unique_ptr<HttpStreamRequest> request(
           session->http_stream_factory()->RequestStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
       waiter.WaitForStream();
 
       // The proxy that failed should now be known to the proxy_service as
@@ -1427,7 +1431,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
 
   // The stream shouldn't come from spdy as we are using different privacy mode
@@ -1503,7 +1508,8 @@
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
 
   EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1);
@@ -1511,7 +1517,8 @@
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
 
   EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1);
@@ -1520,7 +1527,8 @@
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
 
   EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2);
@@ -1549,7 +1557,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
 
   EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState());
 
@@ -1578,7 +1587,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   ASSERT_TRUE(nullptr != waiter.stream());
@@ -1627,7 +1637,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, LOWEST, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   EXPECT_FALSE(waiter.stream_done());
 
   // Confirm a stream has been created by asserting that a new session
@@ -1670,7 +1681,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   ASSERT_TRUE(nullptr != waiter.stream());
@@ -1712,7 +1724,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   ASSERT_TRUE(nullptr != waiter.stream());
@@ -1794,7 +1807,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   ASSERT_TRUE(nullptr != waiter.stream());
@@ -1844,7 +1858,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.stream());
@@ -1888,7 +1903,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.stream());
@@ -1930,7 +1946,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.stream());
@@ -1984,7 +2001,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.websocket_stream());
@@ -2038,7 +2056,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.websocket_stream());
@@ -2124,11 +2143,13 @@
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
   waiter2.WaitForStream();
   EXPECT_TRUE(waiter1.stream_done());
@@ -2170,7 +2191,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestBidirectionalStreamImpl(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_FALSE(waiter.websocket_stream());
@@ -2343,7 +2365,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session()->http_stream_factory()->RequestBidirectionalStreamImpl(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
 
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
@@ -2408,7 +2431,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session()->http_stream_factory()->RequestBidirectionalStreamImpl(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
 
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
@@ -2470,7 +2494,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session()->http_stream_factory()->RequestBidirectionalStreamImpl(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
 
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
@@ -2537,7 +2562,8 @@
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestBidirectionalStreamImpl(
           request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+          /* enable_ip_based_pooling = */ true,
+          /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   ASSERT_THAT(waiter.error_status(), IsError(ERR_FAILED));
@@ -2586,7 +2612,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
   EXPECT_TRUE(waiter1.stream_done());
   ASSERT_TRUE(nullptr != waiter1.websocket_stream());
@@ -2634,7 +2661,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
   EXPECT_TRUE(waiter1.stream_done());
   ASSERT_TRUE(nullptr != waiter1.websocket_stream());
@@ -2648,7 +2676,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
   EXPECT_TRUE(waiter2.stream_done());
   ASSERT_TRUE(nullptr != waiter2.websocket_stream());
@@ -2715,7 +2744,8 @@
           ->RequestWebSocketHandshakeStream(
               request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
               &create_helper,
-              /* enable_ip_based_pooling = */ true, NetLogWithSource()));
+              /* enable_ip_based_pooling = */ true,
+              /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
   EXPECT_TRUE(waiter.stream_done());
   EXPECT_TRUE(nullptr == waiter.stream());
diff --git a/src/net/http/http_util.cc b/src/net/http/http_util.cc
index 24f49e7..b1ff944 100644
--- a/src/net/http/http_util.cc
+++ b/src/net/http/http_util.cc
@@ -1049,4 +1049,108 @@
   return HttpUtil::IsQuote(c);
 }
 
+bool HttpUtil::ParseAcceptEncoding(const std::string& accept_encoding,
+                                   std::set<std::string>* allowed_encodings) {
+  DCHECK(allowed_encodings);
+  if (accept_encoding.find_first_of("\"") != std::string::npos)
+    return false;
+  allowed_encodings->clear();
+
+  base::StringTokenizer tokenizer(accept_encoding.begin(),
+                                  accept_encoding.end(), ",");
+  while (tokenizer.GetNext()) {
+    base::StringPiece entry = tokenizer.token_piece();
+    entry = TrimLWS(entry);
+    size_t semicolon_pos = entry.find(';');
+    if (semicolon_pos == base::StringPiece::npos) {
+      if (entry.find_first_of(HTTP_LWS) != base::StringPiece::npos)
+        return false;
+      allowed_encodings->insert(base::ToLowerASCII(entry));
+      continue;
+    }
+    base::StringPiece encoding = entry.substr(0, semicolon_pos);
+    encoding = TrimLWS(encoding);
+    if (encoding.find_first_of(HTTP_LWS) != base::StringPiece::npos)
+      return false;
+    base::StringPiece params = entry.substr(semicolon_pos + 1);
+    params = TrimLWS(params);
+    size_t equals_pos = params.find('=');
+    if (equals_pos == base::StringPiece::npos)
+      return false;
+    base::StringPiece param_name = params.substr(0, equals_pos);
+    param_name = TrimLWS(param_name);
+    if (!base::LowerCaseEqualsASCII(param_name, "q"))
+      return false;
+    base::StringPiece qvalue = params.substr(equals_pos + 1);
+    qvalue = TrimLWS(qvalue);
+    if (qvalue.empty())
+      return false;
+    if (qvalue[0] == '1') {
+      if (base::StringPiece("1.000").starts_with(qvalue)) {
+        allowed_encodings->insert(base::ToLowerASCII(encoding));
+        continue;
+      }
+      return false;
+    }
+    if (qvalue[0] != '0')
+      return false;
+    if (qvalue.length() == 1)
+      continue;
+    if (qvalue.length() <= 2 || qvalue.length() > 5)
+      return false;
+    if (qvalue[1] != '.')
+      return false;
+    bool nonzero_number = false;
+    for (size_t i = 2; i < qvalue.length(); ++i) {
+      if (!base::IsAsciiDigit(qvalue[i]))
+        return false;
+      if (qvalue[i] != '0')
+        nonzero_number = true;
+    }
+    if (nonzero_number)
+      allowed_encodings->insert(base::ToLowerASCII(encoding));
+  }
+
+  // RFC 7231 5.3.4 "A request without an Accept-Encoding header field implies
+  // that the user agent has no preferences regarding content-codings."
+  if (allowed_encodings->empty()) {
+    allowed_encodings->insert("*");
+    return true;
+  }
+
+  // Any browser must support "identity".
+  allowed_encodings->insert("identity");
+
+  // RFC says gzip == x-gzip; mirror it here for easier matching.
+  if (allowed_encodings->find("gzip") != allowed_encodings->end())
+    allowed_encodings->insert("x-gzip");
+  if (allowed_encodings->find("x-gzip") != allowed_encodings->end())
+    allowed_encodings->insert("gzip");
+
+  // RFC says compress == x-compress; mirror it here for easier matching.
+  if (allowed_encodings->find("compress") != allowed_encodings->end())
+    allowed_encodings->insert("x-compress");
+  if (allowed_encodings->find("x-compress") != allowed_encodings->end())
+    allowed_encodings->insert("compress");
+  return true;
+}
+
+bool HttpUtil::ParseContentEncoding(const std::string& content_encoding,
+                                    std::set<std::string>* used_encodings) {
+  DCHECK(used_encodings);
+  if (content_encoding.find_first_of("\"=;*") != std::string::npos)
+    return false;
+  used_encodings->clear();
+
+  base::StringTokenizer encoding_tokenizer(content_encoding.begin(),
+                                           content_encoding.end(), ",");
+  while (encoding_tokenizer.GetNext()) {
+    base::StringPiece encoding = TrimLWS(encoding_tokenizer.token_piece());
+    if (encoding.find_first_of(HTTP_LWS) != base::StringPiece::npos)
+      return false;
+    used_encodings->insert(base::ToLowerASCII(encoding));
+  }
+  return true;
+}
+
 }  // namespace net
diff --git a/src/net/http/http_util.h b/src/net/http/http_util.h
index 267b964..cb3de35 100644
--- a/src/net/http/http_util.h
+++ b/src/net/http/http_util.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <set>
 #include <string>
 #include <vector>
 
@@ -230,6 +231,21 @@
   // returned by GetStatusCodesForHistogram.
   static int MapStatusCodeForHistogram(int code);
 
+  // Returns true if |accept_encoding| is well-formed.  Parsed encodings turned
+  // to lower case, are placed to provided string-set. Resulting set is
+  // augmented to fulfill the RFC 2616 and RFC 7231 recommendations, e.g. if
+  // there is no encodings specified, then {"*"} is returned to denote that
+  // client has to encoding preferences (but it does not imply that the
+  // user agent will be able to correctly process all encodings).
+  static bool ParseAcceptEncoding(const std::string& accept_encoding,
+                                  std::set<std::string>* allowed_encodings);
+
+  // Returns true if |content_encoding| is well-formed.  Parsed encodings turned
+  // to lower case, are placed to provided string-set. See sections 14.11 and
+  // 3.5 of RFC 2616.
+  static bool ParseContentEncoding(const std::string& content_encoding,
+                                   std::set<std::string>* used_encodings);
+
   // Used to iterate over the name/value pairs of HTTP headers.  To iterate
   // over the values in a multi-value header, use ValuesIterator.
   // See AssembleRawHeaders for joining line continuations (this iterator
diff --git a/src/net/http/http_util_unittest.cc b/src/net/http/http_util_unittest.cc
index 3560e2f..f56f48e 100644
--- a/src/net/http/http_util_unittest.cc
+++ b/src/net/http/http_util_unittest.cc
@@ -1322,4 +1322,84 @@
   EXPECT_TRUE(HttpUtil::IsLWS(' '));
 }
 
+TEST(HttpUtilTest, ParseAcceptEncoding) {
+  const struct {
+    const char* const value;
+    const char* const expected;
+  } tests[] = {
+      {"", "*"},
+      {"identity;q=1, *;q=0", "identity"},
+      {"identity", "identity"},
+      {"FOO, Bar", "bar|foo|identity"},
+      {"foo; q=1", "foo|identity"},
+      {"abc, foo; Q=1.0", "abc|foo|identity"},
+      {"abc, foo;q= 1.00 , bar", "abc|bar|foo|identity"},
+      {"abc, foo; q=1.000, bar", "abc|bar|foo|identity"},
+      {"abc, foo ; q = 0 , bar", "abc|bar|identity"},
+      {"abc, foo; q=0.0, bar", "abc|bar|identity"},
+      {"abc, foo; q=0.00, bar", "abc|bar|identity"},
+      {"abc, foo; q=0.000, bar", "abc|bar|identity"},
+      {"abc, foo; q=0.001, bar", "abc|bar|foo|identity"},
+      {"gzip", "gzip|identity|x-gzip"},
+      {"x-gzip", "gzip|identity|x-gzip"},
+      {"compress", "compress|identity|x-compress"},
+      {"x-compress", "compress|identity|x-compress"},
+      {"x-compress", "compress|identity|x-compress"},
+      {"foo bar", "INVALID"},
+      {"foo;", "INVALID"},
+      {"foo;w=1", "INVALID"},
+      {"foo;q+1", "INVALID"},
+      {"foo;q=2", "INVALID"},
+      {"foo;q=1.001", "INVALID"},
+      {"foo;q=0.", "INVALID"},
+      {"foo,\"bar\"", "INVALID"},
+  };
+
+  for (size_t i = 0; i < arraysize(tests); ++i) {
+    std::string value(tests[i].value);
+    std::string reformatted;
+    std::set<std::string> allowed_encodings;
+    if (!HttpUtil::ParseAcceptEncoding(value, &allowed_encodings)) {
+      reformatted = "INVALID";
+    } else {
+      std::vector<std::string> encodings_list;
+      for (auto const& encoding : allowed_encodings)
+        encodings_list.push_back(encoding);
+      reformatted = base::JoinString(encodings_list, "|");
+    }
+    EXPECT_STREQ(tests[i].expected, reformatted.c_str())
+        << "value=\"" << value << "\"";
+  }
+}
+
+TEST(HttpUtilTest, ParseContentEncoding) {
+  const struct {
+    const char* const value;
+    const char* const expected;
+  } tests[] = {
+      {"", ""},
+      {"identity;q=1, *;q=0", "INVALID"},
+      {"identity", "identity"},
+      {"FOO, zergli , Bar", "bar|foo|zergli"},
+      {"foo, *", "INVALID"},
+      {"foo,\"bar\"", "INVALID"},
+  };
+
+  for (size_t i = 0; i < arraysize(tests); ++i) {
+    std::string value(tests[i].value);
+    std::string reformatted;
+    std::set<std::string> used_encodings;
+    if (!HttpUtil::ParseContentEncoding(value, &used_encodings)) {
+      reformatted = "INVALID";
+    } else {
+      std::vector<std::string> encodings_list;
+      for (auto const& encoding : used_encodings)
+        encodings_list.push_back(encoding);
+      reformatted = base::JoinString(encodings_list, "|");
+    }
+    EXPECT_STREQ(tests[i].expected, reformatted.c_str())
+        << "value=\"" << value << "\"";
+  }
+}
+
 }  // namespace net
diff --git a/src/net/http/transport_security_state_static.h b/src/net/http/transport_security_state_static.h
deleted file mode 100644
index 3ba7f71..0000000
--- a/src/net/http/transport_security_state_static.h
+++ /dev/null
@@ -1,18432 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file is generated by net/tools/transport_security_state_generator/.
-
-#ifndef NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
-#define NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
-
-#include <stdint.h>
-
-#include "net/http/transport_security_state_source.h"
-
-enum SecondLevelDomainName {
-  DOMAIN_NOT_PINNED,
-  DOMAIN_GOOGLE_COM,
-  DOMAIN_ANDROID_COM,
-  DOMAIN_GOOGLE_ANALYTICS_COM,
-  DOMAIN_GOOGLEPLEX_COM,
-  DOMAIN_YTIMG_COM,
-  DOMAIN_GOOGLEUSERCONTENT_COM,
-  DOMAIN_YOUTUBE_COM,
-  DOMAIN_GOOGLEAPIS_COM,
-  DOMAIN_GOOGLEADSERVICES_COM,
-  DOMAIN_GOOGLECODE_COM,
-  DOMAIN_APPSPOT_COM,
-  DOMAIN_GOOGLESYNDICATION_COM,
-  DOMAIN_DOUBLECLICK_NET,
-  DOMAIN_GSTATIC_COM,
-  DOMAIN_GMAIL_COM,
-  DOMAIN_GOOGLEMAIL_COM,
-  DOMAIN_GOOGLEGROUPS_COM,
-  DOMAIN_TORPROJECT_ORG,
-  DOMAIN_TWITTER_COM,
-  DOMAIN_TWIMG_COM,
-  DOMAIN_AKAMAIHD_NET,
-  DOMAIN_TOR2WEB_ORG,
-  DOMAIN_YOUTU_BE,
-  DOMAIN_GOOGLECOMMERCE_COM,
-  DOMAIN_URCHIN_COM,
-  DOMAIN_GOO_GL,
-  DOMAIN_G_CO,
-  DOMAIN_GOOGLE_AC,
-  DOMAIN_GOOGLE_AD,
-  DOMAIN_GOOGLE_AE,
-  DOMAIN_GOOGLE_AF,
-  DOMAIN_GOOGLE_AG,
-  DOMAIN_GOOGLE_AM,
-  DOMAIN_GOOGLE_AS,
-  DOMAIN_GOOGLE_AT,
-  DOMAIN_GOOGLE_AZ,
-  DOMAIN_GOOGLE_BA,
-  DOMAIN_GOOGLE_BE,
-  DOMAIN_GOOGLE_BF,
-  DOMAIN_GOOGLE_BG,
-  DOMAIN_GOOGLE_BI,
-  DOMAIN_GOOGLE_BJ,
-  DOMAIN_GOOGLE_BS,
-  DOMAIN_GOOGLE_BY,
-  DOMAIN_GOOGLE_CA,
-  DOMAIN_GOOGLE_CAT,
-  DOMAIN_GOOGLE_CC,
-  DOMAIN_GOOGLE_CD,
-  DOMAIN_GOOGLE_CF,
-  DOMAIN_GOOGLE_CG,
-  DOMAIN_GOOGLE_CH,
-  DOMAIN_GOOGLE_CI,
-  DOMAIN_GOOGLE_CL,
-  DOMAIN_GOOGLE_CM,
-  DOMAIN_GOOGLE_CN,
-  DOMAIN_CO_AO,
-  DOMAIN_CO_BW,
-  DOMAIN_CO_CK,
-  DOMAIN_CO_CR,
-  DOMAIN_CO_HU,
-  DOMAIN_CO_ID,
-  DOMAIN_CO_IL,
-  DOMAIN_CO_IM,
-  DOMAIN_CO_IN,
-  DOMAIN_CO_JE,
-  DOMAIN_CO_JP,
-  DOMAIN_CO_KE,
-  DOMAIN_CO_KR,
-  DOMAIN_CO_LS,
-  DOMAIN_CO_MA,
-  DOMAIN_CO_MZ,
-  DOMAIN_CO_NZ,
-  DOMAIN_CO_TH,
-  DOMAIN_CO_TZ,
-  DOMAIN_CO_UG,
-  DOMAIN_CO_UK,
-  DOMAIN_CO_UZ,
-  DOMAIN_CO_VE,
-  DOMAIN_CO_VI,
-  DOMAIN_CO_ZA,
-  DOMAIN_CO_ZM,
-  DOMAIN_CO_ZW,
-  DOMAIN_COM_AF,
-  DOMAIN_COM_AG,
-  DOMAIN_COM_AI,
-  DOMAIN_COM_AR,
-  DOMAIN_COM_AU,
-  DOMAIN_COM_BD,
-  DOMAIN_COM_BH,
-  DOMAIN_COM_BN,
-  DOMAIN_COM_BO,
-  DOMAIN_COM_BR,
-  DOMAIN_COM_BY,
-  DOMAIN_COM_BZ,
-  DOMAIN_COM_CN,
-  DOMAIN_COM_CO,
-  DOMAIN_COM_CU,
-  DOMAIN_COM_CY,
-  DOMAIN_COM_DO,
-  DOMAIN_COM_EC,
-  DOMAIN_COM_EG,
-  DOMAIN_COM_ET,
-  DOMAIN_COM_FJ,
-  DOMAIN_COM_GE,
-  DOMAIN_COM_GH,
-  DOMAIN_COM_GI,
-  DOMAIN_COM_GR,
-  DOMAIN_COM_GT,
-  DOMAIN_COM_HK,
-  DOMAIN_COM_IQ,
-  DOMAIN_COM_JM,
-  DOMAIN_COM_JO,
-  DOMAIN_COM_KH,
-  DOMAIN_COM_KW,
-  DOMAIN_COM_LB,
-  DOMAIN_COM_LY,
-  DOMAIN_COM_MT,
-  DOMAIN_COM_MX,
-  DOMAIN_COM_MY,
-  DOMAIN_COM_NA,
-  DOMAIN_COM_NF,
-  DOMAIN_COM_NG,
-  DOMAIN_COM_NI,
-  DOMAIN_COM_NP,
-  DOMAIN_COM_NR,
-  DOMAIN_COM_OM,
-  DOMAIN_COM_PA,
-  DOMAIN_COM_PE,
-  DOMAIN_COM_PH,
-  DOMAIN_COM_PK,
-  DOMAIN_COM_PL,
-  DOMAIN_COM_PR,
-  DOMAIN_COM_PY,
-  DOMAIN_COM_QA,
-  DOMAIN_COM_RU,
-  DOMAIN_COM_SA,
-  DOMAIN_COM_SB,
-  DOMAIN_COM_SG,
-  DOMAIN_COM_SL,
-  DOMAIN_COM_SV,
-  DOMAIN_COM_TJ,
-  DOMAIN_COM_TN,
-  DOMAIN_COM_TR,
-  DOMAIN_COM_TW,
-  DOMAIN_COM_UA,
-  DOMAIN_COM_UY,
-  DOMAIN_COM_VC,
-  DOMAIN_COM_VE,
-  DOMAIN_COM_VN,
-  DOMAIN_GOOGLE_CV,
-  DOMAIN_GOOGLE_CZ,
-  DOMAIN_GOOGLE_DE,
-  DOMAIN_GOOGLE_DJ,
-  DOMAIN_GOOGLE_DK,
-  DOMAIN_GOOGLE_DM,
-  DOMAIN_GOOGLE_DZ,
-  DOMAIN_GOOGLE_EE,
-  DOMAIN_GOOGLE_ES,
-  DOMAIN_GOOGLE_FI,
-  DOMAIN_GOOGLE_FM,
-  DOMAIN_GOOGLE_FR,
-  DOMAIN_GOOGLE_GA,
-  DOMAIN_GOOGLE_GE,
-  DOMAIN_GOOGLE_GG,
-  DOMAIN_GOOGLE_GL,
-  DOMAIN_GOOGLE_GM,
-  DOMAIN_GOOGLE_GP,
-  DOMAIN_GOOGLE_GR,
-  DOMAIN_GOOGLE_GY,
-  DOMAIN_GOOGLE_HK,
-  DOMAIN_GOOGLE_HN,
-  DOMAIN_GOOGLE_HR,
-  DOMAIN_GOOGLE_HT,
-  DOMAIN_GOOGLE_HU,
-  DOMAIN_GOOGLE_IE,
-  DOMAIN_GOOGLE_IM,
-  DOMAIN_GOOGLE_INFO,
-  DOMAIN_GOOGLE_IQ,
-  DOMAIN_GOOGLE_IS,
-  DOMAIN_GOOGLE_IT,
-  DOMAIN_IT_AO,
-  DOMAIN_GOOGLE_JE,
-  DOMAIN_GOOGLE_JO,
-  DOMAIN_GOOGLE_JOBS,
-  DOMAIN_GOOGLE_JP,
-  DOMAIN_GOOGLE_KG,
-  DOMAIN_GOOGLE_KI,
-  DOMAIN_GOOGLE_KZ,
-  DOMAIN_GOOGLE_LA,
-  DOMAIN_GOOGLE_LI,
-  DOMAIN_GOOGLE_LK,
-  DOMAIN_GOOGLE_LT,
-  DOMAIN_GOOGLE_LU,
-  DOMAIN_GOOGLE_LV,
-  DOMAIN_GOOGLE_MD,
-  DOMAIN_GOOGLE_ME,
-  DOMAIN_GOOGLE_MG,
-  DOMAIN_GOOGLE_MK,
-  DOMAIN_GOOGLE_ML,
-  DOMAIN_GOOGLE_MN,
-  DOMAIN_GOOGLE_MS,
-  DOMAIN_GOOGLE_MU,
-  DOMAIN_GOOGLE_MV,
-  DOMAIN_GOOGLE_MW,
-  DOMAIN_GOOGLE_NE,
-  DOMAIN_NE_JP,
-  DOMAIN_GOOGLE_NET,
-  DOMAIN_GOOGLE_NL,
-  DOMAIN_GOOGLE_NO,
-  DOMAIN_GOOGLE_NR,
-  DOMAIN_GOOGLE_NU,
-  DOMAIN_OFF_AI,
-  DOMAIN_GOOGLE_PK,
-  DOMAIN_GOOGLE_PL,
-  DOMAIN_GOOGLE_PN,
-  DOMAIN_GOOGLE_PS,
-  DOMAIN_GOOGLE_PT,
-  DOMAIN_GOOGLE_RO,
-  DOMAIN_GOOGLE_RS,
-  DOMAIN_GOOGLE_RU,
-  DOMAIN_GOOGLE_RW,
-  DOMAIN_GOOGLE_SC,
-  DOMAIN_GOOGLE_SE,
-  DOMAIN_GOOGLE_SH,
-  DOMAIN_GOOGLE_SI,
-  DOMAIN_GOOGLE_SK,
-  DOMAIN_GOOGLE_SM,
-  DOMAIN_GOOGLE_SN,
-  DOMAIN_GOOGLE_SO,
-  DOMAIN_GOOGLE_ST,
-  DOMAIN_GOOGLE_TD,
-  DOMAIN_GOOGLE_TG,
-  DOMAIN_GOOGLE_TK,
-  DOMAIN_GOOGLE_TL,
-  DOMAIN_GOOGLE_TM,
-  DOMAIN_GOOGLE_TN,
-  DOMAIN_GOOGLE_TO,
-  DOMAIN_GOOGLE_TP,
-  DOMAIN_GOOGLE_TT,
-  DOMAIN_GOOGLE_US,
-  DOMAIN_GOOGLE_UZ,
-  DOMAIN_GOOGLE_VG,
-  DOMAIN_GOOGLE_VU,
-  DOMAIN_GOOGLE_WS,
-  DOMAIN_CHROMIUM_ORG,
-  DOMAIN_CRYPTO_CAT,
-  DOMAIN_LAVABIT_COM,
-  DOMAIN_GOOGLETAGMANAGER_COM,
-  DOMAIN_GOOGLETAGSERVICES_COM,
-  DOMAIN_DROPBOX_COM,
-  DOMAIN_YOUTUBE_NOCOOKIE_COM,
-  DOMAIN_2MDN_NET,
-  DOMAIN_FACEBOOK_COM,
-  DOMAIN_SPIDEROAK_COM,
-  DOMAIN_BLOGGER_COM,
-  DOMAIN_CHROME_COM,
-  DOMAIN_GVT3_COM,
-  DOMAIN_GVT2_COM,
-  DOMAIN_GOOGLE,
-  DOMAIN_GGPHT_COM,
-  DOMAIN_BLOGSPOT_COM,
-  DOMAIN_DROPBOXSTATIC_COM,
-  DOMAIN_DROPBOXUSERCONTENT_COM,
-  DOMAIN_WITHYOUTUBE_COM,
-  DOMAIN_WITHGOOGLE_COM,
-  DOMAIN_G4W_CO,
-  DOMAIN_BADSSL_COM,
-  DOMAIN_YAHOO_COM,
-  DOMAIN_GOOGLEVIDEO_COM,
-  DOMAIN_GOOGLEWEBLIGHT_COM,
-  DOMAIN_GOOGLEADSSERVING_CN,
-  DOMAIN_SWEHACK_ORG,
-  DOMAIN_GOOGLESOURCE_COM,
-  DOMAIN_NIGHTX_UK,
-  DOMAIN_FIREBASEIO_COM,
-  DOMAIN_CRBUG_COM,
-  DOMAIN_CROSBUG_COM,
-  DOMAIN_CRREV_COM,
-  DOMAIN_ME_UK,
-  DOMAIN_THEMATHEMATICIAN_UK,
-  // Boundary value for UMA_HISTOGRAM_ENUMERATION.
-  DOMAIN_NUM_EVENTS,
-};
-
-// These are SubjectPublicKeyInfo hashes for public key pinning. The
-// hashes are SHA256 digests.
-static const char kSPKIHash_AAACertificateServices[] =
-    "\xbd\x15\x3e\xd7\xb0\x43\x4f\x68\x86\xb1\x7b\xce\x8b\xbe\x84\xed"
-    "\x34\x0c\x71\x32\xd7\x02\xa8\xf4\xfa\x31\x8f\x75\x6e\xcb\xd6\xf3";
-
-static const char kSPKIHash_AddTrustClass1CARoot[] =
-    "\x05\x2b\x68\x71\x07\xec\x84\xe8\x73\x03\x82\x45\x2e\xc2\xa2\x74"
-    "\x51\x74\x5d\x74\x85\xa5\x7d\x6f\x46\x4e\x0d\xa7\xa1\xb6\xaf\x2a";
-
-static const char kSPKIHash_AddTrustExternalCARoot[] =
-    "\x94\x2a\x69\x16\xa6\xe4\xae\x52\x77\x11\xc5\x45\x02\x47\xa2\xa7"
-    "\x4f\xb8\xe1\x56\xa8\x25\x4c\xa6\x6e\x73\x9a\x11\x49\x3b\xb4\x45";
-
-static const char kSPKIHash_AddTrustPublicCARoot[] =
-    "\x38\x61\xd7\xb6\x96\x1f\xcd\xb2\x12\x04\x56\xff\x6f\xc2\xeb\x77"
-    "\x04\xb1\xa7\x41\xb4\xbd\x93\x3a\x83\x76\xf5\xe1\x91\x5c\xa6\x98";
-
-static const char kSPKIHash_AddTrustQualifiedCARoot[] =
-    "\xc7\x3a\xfc\x2e\xba\x77\x0d\x0c\xbc\x1e\xe4\x1f\x25\x2b\x52\xe8"
-    "\xa9\x3d\x12\xb7\x2d\xcc\xec\x03\x1d\x8d\x83\x9c\xbf\x81\x8a\x79";
-
-static const char kSPKIHash_BaltimoreCyberTrustRoot[] =
-    "\x63\xd9\xaf\x9b\x47\xb1\x06\x4d\x49\xa1\x0e\x7b\x7f\xd5\x66\xdb"
-    "\xc8\xca\xa3\x99\x45\x9b\xfc\x28\x29\xc5\x71\xad\x8c\x6e\xf3\x4a";
-
-static const char kSPKIHash_COMODOCertificationAuthority[] =
-    "\x00\x6d\x7b\xe7\x55\x5d\xd8\x20\x26\x44\x2c\x4f\x1a\x27\xa8\x0e"
-    "\x89\xa1\x98\x9c\xb8\x7b\x34\x44\x8e\xd2\x19\x4c\x18\x19\x6d\x5e";
-
-static const char kSPKIHash_COMODORSADomainValidationSecureServerCA[] =
-    "\x92\x53\xb6\xde\x74\xf6\x7a\x11\x43\x5c\x27\xf1\xdd\xe1\xd3\x0d"
-    "\x11\x12\x33\x3d\xda\xb2\x3d\x66\xb8\xef\xb8\x68\x87\x63\x8a\xe6";
-
-static const char kSPKIHash_DSTRootCAX3[] =
-    "\x56\x3b\x3c\xaf\x8c\xfe\xf3\x4c\x23\x35\xca\xf5\x60\xa7\xa9\x59"
-    "\x06\xe8\x48\x84\x62\xeb\x75\xac\x59\x78\x48\x30\xdf\x9e\x5b\x2b";
-
-static const char kSPKIHash_DigiCertAssuredIDRoot[] =
-    "\x23\xf2\xed\xff\x3e\xde\x90\x25\x9a\x9e\x30\xf4\x0a\xf8\xf9\x12"
-    "\xa5\xe5\xb3\x69\x4e\x69\x38\x44\x03\x41\xf6\x06\x0e\x01\x4f\xfa";
-
-static const char kSPKIHash_DigiCertECCSecureServerCA[] =
-    "\x3d\x95\xcd\xde\x54\x40\xcb\xef\x2d\x04\xa9\x36\x3b\x1e\x85\xee"
-    "\x32\x25\x9f\x3a\xf6\x63\x39\xb0\xa9\xcd\xc9\x9f\x27\xd7\xa0\x2c";
-
-static const char kSPKIHash_DigiCertEVRoot[] =
-    "\x5a\x88\x96\x47\x22\x0e\x54\xd6\xbd\x8a\x16\x81\x72\x24\x52\x0b"
-    "\xb5\xc7\x8e\x58\x98\x4b\xd5\x70\x50\x63\x88\xb9\xde\x0f\x07\x5f";
-
-static const char kSPKIHash_DigiCertGlobalRoot[] =
-    "\xaf\xf9\x88\x90\x6d\xde\x12\x95\x5d\x9b\xeb\xbf\x92\x8f\xdc\xc3"
-    "\x1c\xce\x32\x8d\x5b\x93\x84\xf2\x1c\x89\x41\xca\x26\xe2\x03\x91";
-
-static const char kSPKIHash_EntrustRootEC1[] =
-    "\xfe\xa2\xb7\xd6\x45\xfb\xa7\x3d\x75\x3c\x1e\xc9\xa7\x87\x0c\x40"
-    "\xe1\xf7\xb0\xc5\x61\xe9\x27\xb9\x85\xbf\x71\x18\x66\xe3\x6f\x22";
-
-static const char kSPKIHash_Entrust_2048[] =
-    "\x1e\xa3\xc5\xe4\x3e\xd6\x6c\x2d\xa2\x98\x3a\x42\xa4\xa7\x9b\x1e"
-    "\x90\x67\x86\xce\x9f\x1b\x58\x62\x14\x19\xa0\x04\x63\xa8\x7d\x38";
-
-static const char kSPKIHash_Entrust_EV[] =
-    "\x6d\xbf\xae\x00\xd3\x7b\x9c\xd7\x3f\x8f\xb4\x7d\xe6\x59\x17\xaf"
-    "\x00\xe0\xdd\xdf\x42\xdb\xce\xac\x20\xc1\x7c\x02\x75\xee\x20\x95";
-
-static const char kSPKIHash_Entrust_G2[] =
-    "\x76\xee\x85\x90\x37\x4c\x71\x54\x37\xbb\xca\x6b\xba\x60\x28\xea"
-    "\xdd\xe2\xdc\x6d\xbb\xb8\xc3\xf6\x10\xe8\x51\xf1\x1d\x1a\xb7\xf5";
-
-static const char kSPKIHash_Entrust_SSL[] =
-    "\x9e\xcc\x51\x36\x8e\x86\xe3\x46\x0f\x66\xc2\x95\xe4\x94\x2d\xd5"
-    "\x30\x80\xf2\x7b\x1e\x41\x0a\xff\x2d\x1a\xa9\xd4\xe6\xbc\x7e\x7c";
-
-static const char kSPKIHash_FacebookBackup[] =
-    "\xab\x83\xce\xd8\x6d\x9c\x6e\x46\x61\x67\xcd\xbe\x26\x09\x91\x53"
-    "\x21\x8c\xa0\x07\xa8\xcc\x0f\x81\x49\x75\x57\x41\x60\x7c\x5d\x64";
-
-static const char kSPKIHash_GTECyberTrustGlobalRoot[] =
-    "\x10\x69\xfa\x47\xa0\xaa\x4f\x8c\xf7\x11\x1b\x1c\xae\xa3\x65\xee"
-    "\xae\xd1\x0b\xff\xf3\x26\x60\xde\xf6\xe0\x61\x4b\xfa\xe7\x08\x75";
-
-static const char kSPKIHash_GeoTrustGlobal[] =
-    "\x87\xaf\x34\xd6\x6f\xb3\xf2\xfd\xf3\x6e\x09\x11\x1e\x9a\xba\x2f"
-    "\x6f\x44\xb2\x07\xf3\x86\x3f\x3d\x0b\x54\xb2\x50\x23\x90\x9a\xa5";
-
-static const char kSPKIHash_GeoTrustGlobal2[] =
-    "\x17\x75\x5a\x5c\x29\x5f\x3d\x2d\x72\xe6\xf0\x31\xa1\xf0\x7f\x40"
-    "\x0c\x58\x8b\x9e\x58\x2b\x22\xf1\x7e\xae\x31\xa1\x59\x0d\x11\x85";
-
-static const char kSPKIHash_GeoTrustPrimary[] =
-    "\x49\x05\x46\x66\x23\xab\x41\x78\xbe\x92\xac\x5c\xbd\x65\x84\xf7"
-    "\xa1\xe1\x7f\x27\x65\x2d\x5a\x85\xaf\x89\x50\x4e\xa2\x39\xaa\xaa";
-
-static const char kSPKIHash_GeoTrustPrimary_G2[] =
-    "\xbc\xfb\x44\xaa\xb9\xad\x02\x10\x15\x70\x6b\x41\x21\xea\x76\x1c"
-    "\x81\xc9\xe8\x89\x67\x59\x0f\x6f\x94\xae\x74\x4d\xc8\x8b\x78\xfb";
-
-static const char kSPKIHash_GeoTrustPrimary_G3[] =
-    "\xab\x98\x49\x52\x76\xad\xf1\xec\xaf\xf2\x8f\x35\xc5\x30\x48\x78"
-    "\x1e\x5c\x17\x18\xda\xb9\xc8\xe6\x7a\x50\x4f\x4f\x6a\x51\x32\x8f";
-
-static const char kSPKIHash_GeoTrustUniversal[] =
-    "\x96\x99\x22\x5c\x5d\xe5\x2e\x56\xcd\xd3\x2d\xf2\xe9\x6d\x1c\xfe"
-    "\xa5\xaa\x3c\xa0\xbb\x52\xcd\x89\x33\xc2\x3b\x5c\x27\x44\x38\x20";
-
-static const char kSPKIHash_GeoTrustUniversal2[] =
-    "\x7c\xaa\x03\x46\x51\x24\x59\x0c\x60\x1e\x56\x7e\x52\x14\x8e\x95"
-    "\x2c\x0c\xff\xe8\x90\x00\x53\x0f\xe0\xd9\x5b\x6d\x50\xea\xae\x41";
-
-static const char kSPKIHash_GlobalSignRootCA[] =
-    "\x2b\xce\xe8\x58\x15\x8c\xf5\x46\x5f\xc9\xd7\x6f\x0d\xfa\x31\x2f"
-    "\xef\x25\xa4\xdc\xa8\x50\x1d\xa9\xb4\x6b\x67\xd1\xfb\xfa\x1b\x64";
-
-static const char kSPKIHash_GlobalSignRootCA_R2[] =
-    "\x8a\x27\xb5\x55\x7b\x4b\xec\x7c\xc0\x30\x5f\xbf\x3d\x53\xd1\xf7"
-    "\x1c\xd3\xf3\x49\x10\xc5\xd6\x5e\x27\xec\xdd\xb8\x20\x77\xba\x3d";
-
-static const char kSPKIHash_GlobalSignRootCA_R3[] =
-    "\x70\x6b\xb1\x01\x7c\x85\x5c\x59\x16\x9b\xad\x5c\x17\x81\xcf\x59"
-    "\x7f\x12\xd2\xca\xd2\xf6\x3d\x1a\x4a\xa3\x74\x93\x80\x0f\xfb\x80";
-
-static const char kSPKIHash_GoDaddyRoot_G2[] =
-    "\x2a\x8f\x2d\x8a\xf0\xeb\x12\x38\x98\xf7\x4c\x86\x6a\xc3\xfa\x66"
-    "\x90\x54\xe2\x3c\x17\xbc\x7a\x95\xbd\x02\x34\x19\x2d\xc6\x35\xd0";
-
-static const char kSPKIHash_GoDaddySecure[] =
-    "\x32\xb6\x4b\x66\x72\x7a\x20\x63\xe4\x06\x6f\x3b\x95\x8c\xb0\xaa"
-    "\xee\x57\x6a\x5e\xce\xfd\x95\x33\x99\xbb\x88\x74\x73\x1d\x95\x87";
-
-static const char kSPKIHash_GoogleBackup2048[] =
-    "\x20\xf3\x1b\x0c\x08\xcb\x55\x21\xa7\xb4\x63\xb7\x58\xfe\x77\x5f"
-    "\xfc\xe2\x94\x25\x67\x75\xec\xf9\x60\x9d\xbe\xbc\x9b\xe1\x26\xc0";
-
-static const char kSPKIHash_GoogleG2[] =
-    "\xec\x72\x29\x69\xcb\x64\x20\x0a\xb6\x63\x8f\x68\xac\x53\x8e\x40"
-    "\xab\xab\x5b\x19\xa6\x48\x56\x61\x04\x2a\x10\x61\xc4\x61\x27\x76";
-
-static const char kSPKIHash_LetsEncryptAuthorityBackup_X2_X4[] =
-    "\xb1\x11\xdd\x8a\x1c\x20\x91\xa8\x9b\xd4\xfd\x60\xc5\x7f\x07\x16"
-    "\xcc\xe5\x0f\xee\xff\x81\x37\xcd\xbe\xe0\x32\x6e\x02\xcf\x36\x2b";
-
-static const char kSPKIHash_LetsEncryptAuthorityPrimary_X1_X3[] =
-    "\x60\xb8\x75\x75\x44\x7d\xcb\xa2\xa3\x6b\x7d\x11\xac\x09\xfb\x24"
-    "\xa9\xdb\x40\x6f\xee\x12\xd2\xcc\x90\x18\x05\x17\x61\x6e\x8a\x18";
-
-static const char kSPKIHash_RapidSSL[] =
-    "\x95\x3d\x3d\x80\xf5\x1e\x41\xf6\xd8\xae\x5c\x51\xb6\x9b\x07\xae"
-    "\x30\xdb\x96\x3f\x51\xa7\x3f\xae\xed\xa8\xdf\x0a\xb8\x38\xa8\x33";
-
-static const char kSPKIHash_SecureCertificateServices[] =
-    "\x46\x91\xcb\xfd\xe8\x4a\x6b\x60\x52\xdd\xbe\x15\x2b\xb0\xc2\x16"
-    "\xae\x25\xa8\x6e\x57\x47\x81\x3d\xbc\x0f\x14\x7f\x33\x85\x70\xbe";
-
-static const char kSPKIHash_SpiderOak2[] =
-    "\xed\x8d\xd4\x9f\x16\xdf\x7c\xbf\x1a\x14\xf5\xec\x38\x90\x69\x19"
-    "\xab\x20\xa4\x39\xa7\x82\x92\x21\x03\x11\x8a\x75\x04\x64\x95\x04";
-
-static const char kSPKIHash_SpiderOak3[] =
-    "\x2e\x41\x11\xe7\x8b\xce\x76\x5c\xa0\xa5\x3b\x1b\x62\xf9\x69\x32"
-    "\xad\x42\x13\xf9\x43\x00\x6d\x40\x3f\xdc\x66\x76\xdc\x2f\x57\x60";
-
-static const char kSPKIHash_Swehack[] =
-    "\x15\xd6\x9f\x7c\x4e\xfd\xf6\xb5\x5b\xde\x8c\x80\xba\x12\x76\x98"
-    "\x15\xbf\x5c\x9c\x03\xd3\xb5\x1a\x8d\xbd\x86\xe9\x8c\x12\x00\x4c";
-
-static const char kSPKIHash_SwehackBackup[] =
-    "\xcf\xa7\x2e\xb3\x00\x3a\x13\x5b\xe0\x16\x40\xa3\x52\xc6\xc4\x62"
-    "\x8d\x0b\x7f\x76\x8f\xf0\xcf\x18\x3a\xfc\x24\xa2\x21\xb3\x0c\x2a";
-
-static const char kSPKIHash_SymantecClass3EVG3[] =
-    "\x80\xcc\x56\x3a\xb5\xf8\x3c\xc4\x1e\xb0\xaf\x6a\x14\xd6\xd8\x07"
-    "\x18\xc1\x7e\x35\x2f\x96\x49\xff\xbc\xdd\x67\xf8\xbf\x65\x13\x91";
-
-static const char kSPKIHash_TestSPKI[] =
-    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
-
-static const char kSPKIHash_ThawtePremiumServer[] =
-    "\xf5\x3c\x22\x05\x98\x17\xdd\x96\xf4\x00\x65\x16\x39\xd2\xf8\x57"
-    "\xe2\x10\x70\xa5\x9a\xbe\xd9\x07\x94\x00\xd9\xf6\x95\x50\x69\x00";
-
-static const char kSPKIHash_ThawtePrimaryRootCA[] =
-    "\x1d\x75\xd0\x83\x1b\x9e\x08\x85\x39\x4d\x32\xc7\xa1\xbf\xdb\x3d"
-    "\xbc\x1c\x28\xe2\xb0\xe8\x39\x1f\xb1\x35\x98\x1d\xbc\x5b\xa9\x36";
-
-static const char kSPKIHash_ThawtePrimaryRootCA_G2[] =
-    "\x67\xdc\x4f\x32\xfa\x10\xe7\xd0\x1a\x79\xa0\x73\xaa\x0c\x9e\x02"
-    "\x12\xec\x2f\xfc\x3d\x77\x9e\x0a\xa7\xf9\xc0\xf0\xe1\xc2\xc8\x93";
-
-static const char kSPKIHash_ThawtePrimaryRootCA_G3[] =
-    "\x19\x06\xc6\x12\x4d\xbb\x43\x85\x78\xd0\x0e\x06\x6d\x50\x54\xc6"
-    "\xc3\x7f\x0f\xa6\x02\x8c\x05\x54\x5e\x09\x94\xed\xda\xec\x86\x29";
-
-static const char kSPKIHash_TheGoDaddyGroupClass2[] =
-    "\x56\x32\xd9\x7b\xfa\x77\x5b\xf3\xc9\x9d\xde\xa5\x2f\xc2\x55\x34"
-    "\x10\x86\x40\x16\x72\x9c\x52\xdd\x65\x24\xc8\xa9\xc3\xb4\x48\x9f";
-
-static const char kSPKIHash_Tor1[] =
-    "\x6d\x8c\xfd\x25\x30\xe4\xf3\xd5\xf7\xaa\xed\xdf\x82\xcc\x06\xfa"
-    "\x50\x50\xb2\x8e\x6f\x23\x43\x75\x7f\x44\x71\xe2\x0a\x38\x9c\xba";
-
-static const char kSPKIHash_Tor2[] =
-    "\xc5\x70\xb1\x85\x37\x67\xee\xec\x57\x9d\xe2\x52\x6d\x00\xaa\xa0"
-    "\x0b\xee\x5b\x76\x6d\x42\x5d\xa9\x0d\x54\xdf\xda\xc7\xb0\x4b\xcc";
-
-static const char kSPKIHash_Tor3[] =
-    "\x0a\x57\x82\xd6\xac\x14\x47\xc2\x4f\x80\x7d\x67\x5e\xf4\x9e\xd9"
-    "\x51\xf1\x0d\xee\x7f\x29\xf3\x6c\xf7\xa1\x2e\xb1\xb7\xd2\x39\xfa";
-
-static const char kSPKIHash_TrustedCertificateServices[] =
-    "\xe2\xd8\x91\xef\xb7\x38\x66\x91\x05\xd5\x30\xde\x5e\xd7\x2e\x2b"
-    "\x2a\xc3\xf4\xa6\x70\x78\xb5\x34\x9b\x3f\xda\xca\x49\x6f\x5e\xb8";
-
-static const char kSPKIHash_Twitter1[] =
-    "\xbd\x4f\x4c\xe3\xc2\xf3\x0f\xf0\x85\xdf\x8c\x04\xe4\xf3\xdf\xe2"
-    "\x70\x70\x47\x2a\x2c\xcb\x4e\x97\xdb\x52\x74\x6a\x9f\x32\x4b\x9b";
-
-static const char kSPKIHash_UTNDATACorpSGC[] =
-    "\x40\x02\xfc\xd3\x11\xd0\x73\x31\x56\x7e\x71\xbc\xd9\x71\xe4\x60"
-    "\x48\xc8\xdc\xe8\xd1\x65\x97\x11\x75\x3b\x3d\xaa\x2a\x26\x9a\xfa";
-
-static const char kSPKIHash_UTNUSERFirstClientAuthenticationandEmail[] =
-    "\x2d\xa8\xf9\xea\x34\x54\xd2\x11\x46\x46\x4a\x3f\x9d\x02\x8d\xc4"
-    "\xc7\xfb\xb5\x7b\x1c\x52\xc7\x3c\x2b\x05\x72\xa2\xf5\x99\xa2\xd3";
-
-static const char kSPKIHash_UTNUSERFirstHardware[] =
-    "\x4d\x40\xe7\xaf\x43\x04\xa0\x9d\xe8\x7f\xbf\x98\x96\x20\x4c\x05"
-    "\x51\x41\xe3\xf8\x09\xb2\xfe\x73\x3b\xb2\x31\x0f\xdf\x98\xa1\x62";
-
-static const char kSPKIHash_UTNUSERFirstObject[] =
-    "\x0f\xe1\x4c\x26\x4b\x17\xbb\x6f\x0d\x65\x3e\x7a\x70\xeb\x36\x3d"
-    "\xbf\x54\xbe\x15\x80\x39\xed\xda\xe5\xc2\x57\x11\xdf\x48\xc1\x03";
-
-static const char kSPKIHash_VeriSignClass1[] =
-    "\x2d\xc9\x47\x0b\xe6\x3e\xf4\xac\xf1\xbd\x82\x86\x09\x40\x2b\xb7"
-    "\xb8\x7b\xd9\x96\x38\xa6\x43\x93\x4e\x88\x68\x2d\x1b\xe8\xc3\x08";
-
-static const char kSPKIHash_VeriSignClass1_G3[] =
-    "\x22\x07\x6e\x5a\xef\x44\xbb\x9a\x41\x6a\x28\xb7\xd1\xc4\x43\x22"
-    "\xd7\x05\x9f\x60\xfe\xff\xa5\xca\xf6\xc5\xbe\x84\x47\x89\x13\x03";
-
-static const char kSPKIHash_VeriSignClass2_G2[] =
-    "\xda\x80\x0b\x80\xb2\xa8\x7d\x39\x9e\x66\xfa\x19\xd7\x2f\xdf\x49"
-    "\x98\x3b\x47\xd8\xcf\x32\x2c\x7c\x79\x50\x3a\x0c\x7e\x28\xfe\xaf";
-
-static const char kSPKIHash_VeriSignClass2_G3[] =
-    "\x70\x06\xa3\x83\x11\xe5\x8f\xb1\x93\x48\x42\x33\x21\x82\x10\xc6"
-    "\x61\x25\xa0\xe4\xa8\x26\xae\xd5\x39\xac\x56\x1d\xfb\xfb\xd9\x03";
-
-static const char kSPKIHash_VeriSignClass3_G2[] =
-    "\x02\x3c\x81\xcc\xe8\xe7\xc6\x4f\xa9\x42\xd3\xc1\x50\x48\x70\x7d"
-    "\x35\xd9\xbb\x5b\x87\xf4\xf5\x44\xc5\xbf\x1b\xc5\x64\x3a\xf2\xfa";
-
-static const char kSPKIHash_VeriSignClass3_G3[] =
-    "\x49\x5a\x96\xba\x6b\xad\x78\x24\x07\xbd\x52\x1a\x00\xba\xce\x65"
-    "\x7b\xb3\x55\x55\x5e\x4b\xb7\xf8\x14\x6c\x71\xbb\xa5\x7e\x7a\xce";
-
-static const char kSPKIHash_VeriSignClass3_G4[] =
-    "\x51\x92\x43\x8e\xc3\x69\xd7\xee\x0c\xe7\x1f\x5c\x6d\xb7\x5f\x94"
-    "\x1e\xfb\xf7\x2e\x58\x44\x17\x15\xe9\x9e\xab\x04\xc2\xc8\xac\xee";
-
-static const char kSPKIHash_VeriSignClass3_G5[] =
-    "\x25\xb4\x1b\x50\x6e\x49\x30\x95\x28\x23\xa6\xeb\x9f\x1d\x31\xde"
-    "\xf6\x45\xea\x38\xa5\xc6\xc6\xa9\x6d\x71\x95\x7e\x38\x4d\xf0\x58";
-
-static const char kSPKIHash_VeriSignClass4_G3[] =
-    "\x56\x7b\x82\x11\xfd\x20\xd3\xd2\x83\xee\x0c\xd7\xce\x06\x72\xcb"
-    "\x9d\x99\xbc\x5b\x48\x7a\x58\xc9\xd5\x4e\xc6\x7f\x77\xd4\xa8\xf5";
-
-static const char kSPKIHash_VeriSignUniversal[] =
-    "\x96\x7b\x0c\xd9\x3f\xce\xf7\xf2\x7c\xe2\xc2\x45\x76\x7a\xe9\xb0"
-    "\x5a\x77\x6b\x06\x49\xf9\x96\x5b\x62\x90\x96\x84\x69\x68\x68\x72";
-
-static const char kSPKIHash_YahooBackup1[] =
-    "\xd9\xf4\x40\x51\x7c\xb1\x97\x80\x35\xfd\x71\xeb\x28\xd0\x66\x73"
-    "\xc6\xd3\x93\x30\x3b\xcb\x81\x41\xfc\x62\xc9\xb8\xd0\x33\x0a\xa6";
-
-static const char kSPKIHash_YahooBackup2[] =
-    "\x76\x89\x67\x6e\xdc\xc4\x06\x71\x0b\xc7\xff\x65\x38\x44\x36\xd9"
-    "\xee\x8e\x64\xef\xd0\x35\xbe\x95\x49\x25\xf6\x5c\x70\x37\x13\xb0";
-
-static const char* const kExpectCTReportURIs[] = {
-    "https://clients3.google.com/ct_upload",
-    "https://log.getdropbox.com/log/expectct",
-    nullptr,
-};
-
-static const char* const kExpectStapleReportURIs[] = {
-    "https://report.badssl.com/expect-staple",
-    "https://log.getdropbox.com/log/ocsp_expect_staple",
-    "https://reporting.caddyserver.com/expect-staple",
-    "https://asac.casa/expectstaple.jsp",
-    "https://scotthelme.report-uri.io/r/default/staple/reportOnly",
-    nullptr,
-};
-
-// kNoRejectedPublicKeys is a placeholder for when no public keys are rejected.
-static const char* const kNoRejectedPublicKeys[] = {
-    nullptr,
-};
-
-// kNoReportURI is a placeholder for when a pinset does not have a report URI.
-static const char kNoReportURI[] = "";
-
-static const char* const kDropboxAcceptableCerts[] = {
-    kSPKIHash_DigiCertAssuredIDRoot,
-    kSPKIHash_DigiCertGlobalRoot,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_EntrustRootEC1,
-    kSPKIHash_Entrust_G2,
-    kSPKIHash_Entrust_EV,
-    kSPKIHash_Entrust_2048,
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_GeoTrustPrimary_G2,
-    kSPKIHash_GeoTrustPrimary_G3,
-    kSPKIHash_GeoTrustPrimary,
-    kSPKIHash_TheGoDaddyGroupClass2,
-    kSPKIHash_GoDaddyRoot_G2,
-    kSPKIHash_GoDaddySecure,
-    kSPKIHash_ThawtePremiumServer,
-    kSPKIHash_ThawtePrimaryRootCA_G2,
-    kSPKIHash_ThawtePrimaryRootCA_G3,
-    kSPKIHash_ThawtePrimaryRootCA,
-    nullptr,
-};
-static const char kDropboxReportURI[] = "https://log.getdropbox.com/hpkp";
-
-static const char* const kFacebookAcceptableCerts[] = {
-    kSPKIHash_SymantecClass3EVG3,
-    kSPKIHash_DigiCertECCSecureServerCA,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_FacebookBackup,
-    nullptr,
-};
-
-static const char* const kGoogleAcceptableCerts[] = {
-    kSPKIHash_GoogleBackup2048,
-    kSPKIHash_GoogleG2,
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_GlobalSignRootCA_R2,
-    nullptr,
-};
-static const char kGoogleReportURI[] = "http://clients3.google.com/cert_upload_json";
-
-static const char* const kNightxAcceptableCerts[] = {
-    kSPKIHash_LetsEncryptAuthorityPrimary_X1_X3,
-    kSPKIHash_LetsEncryptAuthorityBackup_X2_X4,
-    kSPKIHash_VeriSignClass3_G4,
-    kSPKIHash_VeriSignClass3_G5,
-    kSPKIHash_VeriSignUniversal,
-    kSPKIHash_DigiCertGlobalRoot,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_DigiCertAssuredIDRoot,
-    kSPKIHash_COMODOCertificationAuthority,
-    kSPKIHash_AddTrustExternalCARoot,
-    nullptr,
-};
-static const char kNightxReportURI[] = "http://l.nightx.uk/report/hpkp";
-
-static const char* const kSpideroakAcceptableCerts[] = {
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_SpiderOak2,
-    kSPKIHash_SpiderOak3,
-    nullptr,
-};
-
-static const char* const kSwehackComAcceptableCerts[] = {
-    kSPKIHash_Swehack,
-    kSPKIHash_LetsEncryptAuthorityPrimary_X1_X3,
-    kSPKIHash_LetsEncryptAuthorityBackup_X2_X4,
-    kSPKIHash_DSTRootCAX3,
-    kSPKIHash_SwehackBackup,
-    kSPKIHash_COMODORSADomainValidationSecureServerCA,
-    nullptr,
-};
-
-static const char* const kTestAcceptableCerts[] = {
-    kSPKIHash_TestSPKI,
-    nullptr,
-};
-
-static const char* const kTorAcceptableCerts[] = {
-    kSPKIHash_RapidSSL,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_Tor1,
-    kSPKIHash_Tor2,
-    kSPKIHash_Tor3,
-    kSPKIHash_LetsEncryptAuthorityPrimary_X1_X3,
-    kSPKIHash_LetsEncryptAuthorityBackup_X2_X4,
-    nullptr,
-};
-
-static const char* const kTwitterCDNAcceptableCerts[] = {
-    kSPKIHash_VeriSignClass1,
-    kSPKIHash_VeriSignClass3_G4,
-    kSPKIHash_VeriSignClass4_G3,
-    kSPKIHash_VeriSignClass3_G3,
-    kSPKIHash_VeriSignClass1_G3,
-    kSPKIHash_VeriSignClass2_G3,
-    kSPKIHash_VeriSignClass3_G2,
-    kSPKIHash_VeriSignClass2_G2,
-    kSPKIHash_VeriSignClass3_G5,
-    kSPKIHash_VeriSignUniversal,
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_GeoTrustGlobal2,
-    kSPKIHash_GeoTrustUniversal,
-    kSPKIHash_GeoTrustUniversal2,
-    kSPKIHash_GeoTrustPrimary,
-    kSPKIHash_GeoTrustPrimary_G2,
-    kSPKIHash_GeoTrustPrimary_G3,
-    kSPKIHash_DigiCertGlobalRoot,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_DigiCertAssuredIDRoot,
-    kSPKIHash_Twitter1,
-    kSPKIHash_Entrust_2048,
-    kSPKIHash_Entrust_EV,
-    kSPKIHash_Entrust_G2,
-    kSPKIHash_Entrust_SSL,
-    kSPKIHash_AAACertificateServices,
-    kSPKIHash_AddTrustClass1CARoot,
-    kSPKIHash_AddTrustExternalCARoot,
-    kSPKIHash_AddTrustPublicCARoot,
-    kSPKIHash_AddTrustQualifiedCARoot,
-    kSPKIHash_COMODOCertificationAuthority,
-    kSPKIHash_SecureCertificateServices,
-    kSPKIHash_TrustedCertificateServices,
-    kSPKIHash_UTNDATACorpSGC,
-    kSPKIHash_UTNUSERFirstClientAuthenticationandEmail,
-    kSPKIHash_UTNUSERFirstHardware,
-    kSPKIHash_UTNUSERFirstObject,
-    kSPKIHash_GTECyberTrustGlobalRoot,
-    kSPKIHash_BaltimoreCyberTrustRoot,
-    kSPKIHash_GlobalSignRootCA,
-    kSPKIHash_GlobalSignRootCA_R2,
-    kSPKIHash_GlobalSignRootCA_R3,
-    nullptr,
-};
-static const char kTwitterCDNReportURI[] = "http://l.twimg.com/i/hpkp_report";
-
-static const char* const kTwitterComAcceptableCerts[] = {
-    kSPKIHash_VeriSignClass1,
-    kSPKIHash_VeriSignClass3_G4,
-    kSPKIHash_VeriSignClass4_G3,
-    kSPKIHash_VeriSignClass3_G3,
-    kSPKIHash_VeriSignClass1_G3,
-    kSPKIHash_VeriSignClass2_G3,
-    kSPKIHash_VeriSignClass3_G2,
-    kSPKIHash_VeriSignClass2_G2,
-    kSPKIHash_VeriSignClass3_G5,
-    kSPKIHash_VeriSignUniversal,
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_GeoTrustGlobal2,
-    kSPKIHash_GeoTrustUniversal,
-    kSPKIHash_GeoTrustUniversal2,
-    kSPKIHash_GeoTrustPrimary,
-    kSPKIHash_GeoTrustPrimary_G2,
-    kSPKIHash_GeoTrustPrimary_G3,
-    kSPKIHash_DigiCertGlobalRoot,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_DigiCertAssuredIDRoot,
-    kSPKIHash_Twitter1,
-    nullptr,
-};
-static const char kTwitterComReportURI[] = "http://l.twimg.com/i/hpkp_report";
-
-static const char* const kYahooAcceptableCerts[] = {
-    kSPKIHash_VeriSignClass2_G2,
-    kSPKIHash_VeriSignClass2_G3,
-    kSPKIHash_VeriSignClass3_G3,
-    kSPKIHash_VeriSignClass3_G4,
-    kSPKIHash_VeriSignClass3_G5,
-    kSPKIHash_VeriSignUniversal,
-    kSPKIHash_GeoTrustGlobal,
-    kSPKIHash_GeoTrustPrimary,
-    kSPKIHash_GeoTrustPrimary_G2,
-    kSPKIHash_GeoTrustPrimary_G3,
-    kSPKIHash_GeoTrustUniversal,
-    kSPKIHash_DigiCertGlobalRoot,
-    kSPKIHash_DigiCertEVRoot,
-    kSPKIHash_YahooBackup1,
-    kSPKIHash_YahooBackup2,
-    nullptr,
-};
-
-static const net::TransportSecurityStateSource::Pinset kPinsets[] = {
-    {kDropboxAcceptableCerts, kNoRejectedPublicKeys, kDropboxReportURI},
-    {kFacebookAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-    {kGoogleAcceptableCerts, kNoRejectedPublicKeys, kGoogleReportURI},
-    {kNightxAcceptableCerts, kNoRejectedPublicKeys, kNightxReportURI},
-    {kSpideroakAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-    {kSwehackComAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-    {kTestAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-    {kTorAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-    {kTwitterCDNAcceptableCerts, kNoRejectedPublicKeys, kTwitterCDNReportURI},
-    {kTwitterComAcceptableCerts, kNoRejectedPublicKeys, kTwitterComReportURI},
-    {kYahooAcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
-};
-
-// kHSTSHuffmanTree describes a Huffman tree. The nodes of the tree are pairs
-// of uint8s. The last node in the array is the root of the tree. Each pair is
-// two uint8_t values, the first is "left" and the second is "right". If a
-// uint8_t value has the MSB set then it represents a literal leaf value.
-// Otherwise it's a pointer to the n'th element of the array.
-static const uint8_t kHSTSHuffmanTree[] = {
-    0xf7, 0xf9, 0xf0, 0x00, 0xf5, 0xe4, 0x01, 0x02, 0xad, 0xe6, 0x04, 0xed,
-    0xf2, 0x05, 0x03, 0x06, 0xef, 0xe9, 0x80, 0x08, 0x07, 0x09, 0xb8, 0xb9,
-    0xb3, 0x0b, 0xb4, 0xb0, 0x0c, 0x0d, 0xae, 0x0e, 0xf8, 0xea, 0x0f, 0x10,
-    0xeb, 0x11, 0xe3, 0x12, 0x13, 0xe1, 0x14, 0xff, 0xe2, 0xe7, 0xec, 0x16,
-    0xe5, 0x17, 0xb1, 0xb2, 0xc1, 0xb7, 0x1a, 0xb5, 0xb6, 0x1b, 0x1c, 0xf1,
-    0x19, 0x1d, 0xfa, 0x1e, 0xf6, 0x1f, 0x20, 0xe8, 0xf3, 0x21, 0xf4, 0xee,
-    0x22, 0x23, 0x18, 0x24, 0x15, 0x25, 0x0a, 0x26,
-};
-
-static const uint8_t kPreloadedHSTSData[] = {
-    0xf6, 0xec, 0xdb, 0xaa, 0x42, 0x52, 0xf3, 0x77, 0xf5, 0x8a, 0xd1, 0xe7,
-    0x9c, 0xc6, 0xf7, 0xdf, 0x4b, 0x17, 0xfe, 0x6e, 0x63, 0xea, 0x47, 0xbc,
-    0xac, 0x5f, 0xb5, 0x9e, 0xef, 0x65, 0x8b, 0x9a, 0x11, 0x87, 0xd3, 0x87,
-    0xd7, 0xfe, 0xc7, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x7f, 0x10, 0xa2, 0xfb,
-    0x44, 0xb1, 0x7f, 0xce, 0x3c, 0x28, 0x3f, 0xc4, 0xb1, 0x68, 0xcc, 0x4d,
-    0xee, 0x22, 0x23, 0xc2, 0x18, 0x8b, 0xf8, 0x79, 0xe3, 0x0b, 0xa3, 0x73,
-    0x56, 0x2e, 0x00, 0x96, 0x2f, 0x40, 0xa3, 0xd6, 0x2e, 0xef, 0xcb, 0x17,
-    0xff, 0xd3, 0xf9, 0x81, 0x31, 0xbd, 0xc2, 0x73, 0xcb, 0x17, 0xfd, 0x87,
-    0xef, 0xcf, 0xfc, 0xea, 0x58, 0xb7, 0x16, 0x28, 0x67, 0x9e, 0xc7, 0xb7,
-    0xc2, 0xea, 0x1c, 0xac, 0x5f, 0xfc, 0x59, 0xb6, 0xa4, 0x9d, 0xbb, 0x82,
-    0xc5, 0x41, 0x34, 0x31, 0x8c, 0xbc, 0x27, 0xfe, 0x43, 0xe2, 0x6b, 0x9f,
-    0xcb, 0x17, 0xd3, 0xef, 0xba, 0xc5, 0x82, 0x39, 0xb9, 0x21, 0x7b, 0xc5,
-    0xdf, 0x16, 0x2b, 0x0f, 0x14, 0x44, 0xf7, 0x78, 0x35, 0x8b, 0x99, 0xd6,
-    0x2f, 0xf4, 0x66, 0x6c, 0xf2, 0x26, 0x58, 0xac, 0x3e, 0x5f, 0x8c, 0xf5,
-    0xe2, 0xd7, 0xff, 0x85, 0xd7, 0xf3, 0x7f, 0xbf, 0xe7, 0x35, 0x05, 0x8b,
-    0xff, 0xb8, 0xfd, 0x0b, 0x00, 0x2e, 0x7c, 0x4b, 0x17, 0xfc, 0xc0, 0x62,
-    0xef, 0xdf, 0x95, 0x8b, 0xff, 0xef, 0xb8, 0x9b, 0xb8, 0x6b, 0x3b, 0x83,
-    0x9d, 0x62, 0xff, 0x7c, 0x38, 0xb8, 0xfd, 0x84, 0xb1, 0x6e, 0xd6, 0x2a,
-    0x51, 0x3d, 0x8a, 0x4c, 0x73, 0x52, 0x9c, 0xe6, 0x28, 0xba, 0x39, 0x43,
-    0x5e, 0xff, 0x81, 0xc1, 0xfd, 0xa1, 0x9c, 0x58, 0xbf, 0xf9, 0xba, 0x10,
-    0x98, 0x31, 0xfd, 0xcd, 0x58, 0xbf, 0x9e, 0x4e, 0x53, 0x12, 0xc5, 0xfd,
-    0x32, 0x72, 0x98, 0x96, 0x2f, 0xa4, 0x85, 0xcf, 0x9e, 0xd7, 0x0b, 0x6a,
-    0x53, 0x14, 0x73, 0xaf, 0xc2, 0x8a, 0xc4, 0xb1, 0x7f, 0xa0, 0x59, 0xd0,
-    0xb3, 0x8b, 0x15, 0x87, 0x8a, 0xc2, 0x37, 0xff, 0x08, 0xff, 0x2c, 0xef,
-    0xc4, 0xdf, 0x58, 0xbf, 0xff, 0x40, 0x9b, 0xcc, 0x7e, 0x48, 0xe7, 0xf3,
-    0x05, 0x8a, 0xe2, 0x26, 0x43, 0x45, 0xbb, 0x38, 0xb1, 0x79, 0x9b, 0x75,
-    0x48, 0x5a, 0x5f, 0xf1, 0xdf, 0x9e, 0x60, 0x1d, 0xd6, 0x2a, 0x08, 0x9e,
-    0xc2, 0x4d, 0xc5, 0xc0, 0x55, 0x7f, 0xff, 0x7d, 0xb0, 0x9b, 0xdc, 0xe6,
-    0xff, 0x7e, 0x93, 0xc5, 0x8b, 0xef, 0x13, 0x1a, 0xb1, 0x7e, 0x9d, 0x67,
-    0x7e, 0x58, 0xb3, 0xe9, 0x15, 0x3f, 0x5d, 0x01, 0x1d, 0xe8, 0xf2, 0x1a,
-    0xc5, 0xf9, 0xcd, 0xf6, 0xa5, 0x62, 0xdc, 0x58, 0xbf, 0x31, 0xfd, 0x30,
-    0x58, 0xbc, 0x6e, 0x0d, 0x62, 0xb4, 0x7b, 0x0c, 0x24, 0x22, 0x8b, 0xff,
-    0xfe, 0xfe, 0x6a, 0x7a, 0x07, 0xa6, 0x06, 0x6b, 0x4e, 0x6c, 0xe9, 0x62,
-    0xfc, 0x14, 0xf4, 0x6f, 0xac, 0x5f, 0xef, 0x31, 0xda, 0x0d, 0xa5, 0x8a,
-    0x93, 0xde, 0x72, 0xbb, 0xdc, 0x0f, 0xcb, 0x15, 0x05, 0xcc, 0x11, 0xbc,
-    0xea, 0x35, 0x7f, 0xc3, 0x99, 0x8d, 0x48, 0x83, 0x90, 0x81, 0xf1, 0x77,
-    0x48, 0x64, 0x06, 0x41, 0x7f, 0xfe, 0x17, 0x5c, 0x33, 0x0e, 0x4d, 0xdf,
-    0x8c, 0x33, 0xf1, 0xcb, 0x17, 0x7b, 0xcb, 0x17, 0xff, 0xc2, 0xf7, 0x07,
-    0xf9, 0xe4, 0xfc, 0x53, 0xc5, 0x8b, 0xff, 0xe6, 0xfe, 0x16, 0xb5, 0x9d,
-    0xc3, 0xce, 0x75, 0x8a, 0x94, 0xc7, 0x60, 0xc8, 0x68, 0xc0, 0x94, 0x6e,
-    0xde, 0x56, 0x2e, 0xfe, 0x2c, 0x5f, 0x1d, 0xc2, 0xe2, 0xc5, 0xff, 0xff,
-    0xec, 0xc8, 0xa2, 0x66, 0xdb, 0x9f, 0xce, 0x98, 0x3f, 0xcf, 0x06, 0x36,
-    0x58, 0xbf, 0xfc, 0x6b, 0xeb, 0xdd, 0xee, 0xf8, 0x14, 0x36, 0x58, 0xa3,
-    0xa3, 0xbc, 0x04, 0x9e, 0x7b, 0xbf, 0xe6, 0x0c, 0xb2, 0x2d, 0x48, 0x4b,
-    0x14, 0xe7, 0xd6, 0x23, 0x0b, 0x88, 0x25, 0x8a, 0xc4, 0xf0, 0xb7, 0x18,
-    0xfc, 0x6e, 0x21, 0x10, 0xdf, 0xc7, 0x7e, 0xf9, 0x3d, 0xac, 0x5f, 0xfb,
-    0x0b, 0xc2, 0x61, 0xf2, 0x4d, 0x58, 0xbf, 0xd2, 0x17, 0x01, 0xef, 0x76,
-    0xb1, 0x52, 0x7e, 0xde, 0x3f, 0xbf, 0xa4, 0x7d, 0xf2, 0x62, 0x58, 0xa9,
-    0x47, 0xbc, 0x21, 0x4d, 0xc2, 0x1b, 0x9b, 0xa2, 0xc5, 0xf4, 0xee, 0x71,
-    0x2c, 0x53, 0x9b, 0xd2, 0x19, 0xb9, 0xfe, 0xb1, 0x43, 0x36, 0xdd, 0x07,
-    0xef, 0xbc, 0x77, 0xf2, 0xc5, 0xfb, 0xb1, 0xe9, 0xa0, 0xb1, 0x7e, 0xd0,
-    0xf2, 0x40, 0xb1, 0x7f, 0x00, 0xb3, 0x60, 0xe0, 0xb1, 0x4e, 0x7b, 0x02,
-    0x28, 0xbc, 0x29, 0xd9, 0x62, 0xf9, 0xf4, 0xd0, 0x58, 0xbd, 0x3e, 0xe1,
-    0xcf, 0x03, 0xe3, 0xd5, 0x29, 0x8b, 0x7e, 0x10, 0x44, 0xc3, 0x7f, 0xe2,
-    0xf7, 0xf2, 0x01, 0x4f, 0x7c, 0x58, 0xbf, 0xee, 0xf9, 0xe7, 0xdb, 0x67,
-    0xf2, 0xc5, 0xff, 0x11, 0x49, 0xba, 0xd3, 0x84, 0xb1, 0x7f, 0xfb, 0x61,
-    0xe9, 0xb7, 0x2c, 0xe9, 0xa7, 0xe2, 0xc5, 0x4a, 0x31, 0x70, 0xf4, 0x47,
-    0x57, 0xff, 0x17, 0xbe, 0xd0, 0x35, 0xbc, 0x26, 0x58, 0xb8, 0x72, 0xb1,
-    0x52, 0x9c, 0x86, 0xa3, 0x06, 0x62, 0xe2, 0x45, 0xb8, 0x0c, 0xb1, 0x78,
-    0x9a, 0x0b, 0x17, 0xed, 0x64, 0x23, 0xb1, 0x62, 0xb0, 0xf1, 0xf7, 0x1c,
-    0xa7, 0x44, 0x00, 0x97, 0xaf, 0xf3, 0xf4, 0x7e, 0x87, 0x7f, 0x2c, 0x58,
-    0x6b, 0x17, 0x6e, 0xcb, 0x17, 0xfb, 0x93, 0xa8, 0xa2, 0x7f, 0xac, 0x5f,
-    0xb3, 0x42, 0x90, 0x2c, 0x50, 0xd1, 0x11, 0xa1, 0x2e, 0x0c, 0x04, 0x6d,
-    0x7f, 0x6a, 0x4f, 0x84, 0x75, 0x8b, 0xfc, 0x4f, 0xc7, 0x2e, 0xe0, 0xb1,
-    0x5a, 0x3e, 0x00, 0x8b, 0x6e, 0x7d, 0x96, 0x2f, 0xdf, 0xc0, 0x06, 0x75,
-    0x8b, 0xc7, 0x03, 0xac, 0x5f, 0xda, 0x6e, 0x36, 0x7d, 0x62, 0x98, 0xf2,
-    0x84, 0x3b, 0x5c, 0x44, 0xaf, 0x9d, 0x2e, 0x98, 0xf5, 0x8b, 0xfd, 0x9c,
-    0x8b, 0xee, 0x17, 0x96, 0x2f, 0xfe, 0x22, 0x9e, 0xfe, 0xfe, 0xe0, 0xa3,
-    0xd6, 0x2f, 0xfd, 0xdb, 0x47, 0xc8, 0xbb, 0xe3, 0x47, 0xac, 0x5c, 0xda,
-    0x58, 0xa9, 0x46, 0xe3, 0x9b, 0x7d, 0x20, 0x24, 0x7b, 0xf8, 0xf3, 0x18,
-    0x10, 0x41, 0x2c, 0x5b, 0x8b, 0x15, 0x27, 0x8e, 0xc6, 0xb4, 0x35, 0x4d,
-    0x2f, 0x0a, 0xd3, 0x91, 0xf2, 0x1e, 0xdd, 0x50, 0x83, 0xbd, 0xd3, 0x06,
-    0xb1, 0x52, 0xb8, 0xcb, 0x90, 0xbf, 0x78, 0x4f, 0x34, 0xa8, 0xc0, 0xd7,
-    0x6f, 0xf8, 0xf9, 0xad, 0x3f, 0x46, 0xdd, 0x62, 0xfe, 0xcc, 0x1f, 0x49,
-    0xfa, 0xc5, 0xfe, 0x7f, 0xe6, 0xec, 0xfb, 0x2c, 0x5f, 0xfd, 0xbe, 0xa4,
-    0xd9, 0x2f, 0x46, 0xa8, 0xd5, 0xd6, 0x2c, 0x5b, 0xa9, 0x62, 0xf7, 0x5a,
-    0x43, 0x58, 0xbf, 0x8e, 0x2f, 0x8c, 0x6c, 0xb1, 0x7f, 0x6b, 0x3e, 0xfd,
-    0x92, 0xc5, 0xf1, 0xa0, 0x9f, 0x2c, 0x5b, 0xf2, 0x7a, 0x4e, 0x5d, 0x7f,
-    0xe2, 0xcd, 0xbf, 0x9d, 0x5e, 0x7d, 0x2c, 0x5f, 0xdf, 0x21, 0x31, 0xbb,
-    0xac, 0x5f, 0xf6, 0x67, 0x3d, 0xfc, 0xde, 0x56, 0x2f, 0xff, 0xe9, 0x0b,
-    0x37, 0x1b, 0x96, 0xc6, 0xb7, 0xc2, 0x6f, 0x2c, 0x5f, 0xfb, 0x3c, 0x6b,
-    0xef, 0xee, 0x66, 0xcb, 0x17, 0xf4, 0xeb, 0x06, 0xd0, 0x58, 0xad, 0x95,
-    0x10, 0x0e, 0x10, 0x3b, 0x93, 0x3a, 0x14, 0x46, 0x1e, 0x39, 0xe8, 0xbe,
-    0x1a, 0x15, 0xc5, 0xc5, 0x8b, 0xfb, 0x1b, 0xaf, 0xfb, 0x6c, 0xb1, 0x52,
-    0xad, 0xda, 0x0b, 0x03, 0x15, 0xc9, 0x48, 0x44, 0xfa, 0x21, 0x7b, 0xfe,
-    0xdc, 0x3f, 0x3c, 0x02, 0xcf, 0xac, 0x5f, 0xff, 0xf9, 0xfd, 0x27, 0x26,
-    0x37, 0xef, 0xe9, 0x84, 0x50, 0x9d, 0x6c, 0xb1, 0x7f, 0x66, 0xde, 0xe6,
-    0x6c, 0xb1, 0x7f, 0xfa, 0x18, 0x46, 0x1d, 0xf3, 0xbd, 0x4f, 0x96, 0x2c,
-    0x52, 0x7f, 0x6c, 0x61, 0x7f, 0xf7, 0x1c, 0x2f, 0x73, 0x0e, 0x52, 0x12,
-    0xc5, 0xff, 0xe6, 0x29, 0x04, 0xfd, 0xf4, 0x26, 0x3a, 0xc5, 0xff, 0xe7,
-    0x06, 0xa6, 0x0f, 0xce, 0x4e, 0xa0, 0xb1, 0x7f, 0xf7, 0x32, 0x22, 0x93,
-    0xeb, 0x53, 0xda, 0xc5, 0x69, 0x12, 0x1e, 0x4a, 0xbf, 0xe1, 0x75, 0xe3,
-    0xcf, 0x73, 0x3e, 0xb1, 0x52, 0x7c, 0x4c, 0x47, 0x5d, 0xa7, 0x41, 0xa4,
-    0x6f, 0x46, 0x75, 0x7f, 0xb0, 0xb3, 0x6d, 0x84, 0x4b, 0x16, 0x25, 0x8a,
-    0xdc, 0xf1, 0x44, 0x69, 0x68, 0xf5, 0x8b, 0xed, 0x73, 0x02, 0x58, 0xbf,
-    0x11, 0x4f, 0x61, 0xc9, 0xb9, 0xc1, 0x5b, 0xfc, 0x4c, 0x17, 0xe7, 0x36,
-    0x58, 0xbf, 0xfb, 0x52, 0x6c, 0x94, 0xef, 0x2f, 0xf5, 0x8b, 0xff, 0x74,
-    0xc1, 0xfe, 0x78, 0x31, 0xb2, 0xc5, 0xfc, 0xfc, 0xd6, 0xa6, 0x0b, 0x17,
-    0x89, 0xa0, 0xb1, 0x7e, 0x78, 0xec, 0x04, 0xac, 0x5f, 0xbc, 0x2d, 0x37,
-    0x30, 0xf1, 0xbc, 0x39, 0x4b, 0x0e, 0x6f, 0xab, 0x13, 0x0e, 0xdd, 0x05,
-    0xa1, 0x65, 0x7f, 0xbf, 0x9e, 0xe1, 0x3c, 0x4b, 0x17, 0xff, 0x3c, 0xc3,
-    0x07, 0xc7, 0x2e, 0xe0, 0xb1, 0x5b, 0x1f, 0xc1, 0x1a, 0x5f, 0xcf, 0x85,
-    0xdc, 0x38, 0xb1, 0x7d, 0xb1, 0xc4, 0x6a, 0xc5, 0xff, 0xee, 0x3f, 0x61,
-    0x66, 0xf2, 0x42, 0x68, 0x2c, 0x5f, 0xb8, 0x03, 0xe0, 0xd6, 0x2d, 0x9b,
-    0x23, 0x27, 0x45, 0xc0, 0x26, 0xf2, 0x65, 0xff, 0xfe, 0xc2, 0x18, 0xe4,
-    0x0e, 0x19, 0xf8, 0xfe, 0x9e, 0xc2, 0x58, 0xbf, 0xe2, 0xf7, 0x3d, 0x98,
-    0x17, 0x16, 0x2e, 0x6f, 0xac, 0x56, 0x1e, 0x8f, 0x67, 0x57, 0xff, 0x7d,
-    0xfd, 0xcf, 0xbe, 0x08, 0xbc, 0xb1, 0x7f, 0xfe, 0x8a, 0x12, 0x0d, 0x66,
-    0xf3, 0x07, 0xd3, 0xf1, 0x62, 0xfc, 0xc0, 0xe4, 0x25, 0x62, 0xa5, 0x1c,
-    0xb0, 0x22, 0xc4, 0x42, 0x57, 0xbf, 0xa7, 0xb6, 0x1f, 0xf1, 0x62, 0xff,
-    0xf6, 0xbc, 0x26, 0x0c, 0xbd, 0xf1, 0x34, 0x16, 0x2f, 0xbf, 0x1b, 0xf5,
-    0xc8, 0xd6, 0xb1, 0x52, 0x88, 0x1c, 0x4c, 0xa9, 0x65, 0x02, 0x40, 0xf4,
-    0x70, 0xe9, 0xc8, 0xf1, 0x77, 0x7d, 0x75, 0xc8, 0x8f, 0x34, 0x69, 0xf8,
-    0xd4, 0x9a, 0x15, 0xa5, 0x0e, 0xbe, 0x21, 0xfa, 0x39, 0x91, 0x1d, 0x05,
-    0x0a, 0xfb, 0xf4, 0x50, 0x9d, 0x6c, 0xb1, 0x7a, 0x34, 0xce, 0x8b, 0x15,
-    0x03, 0xcf, 0x62, 0xbb, 0xff, 0x67, 0x98, 0x80, 0xc7, 0x3b, 0xac, 0x5f,
-    0xd2, 0x50, 0x07, 0x40, 0x2c, 0x5e, 0xdd, 0xf6, 0x58, 0xbf, 0xff, 0xf0,
-    0xbf, 0x83, 0xf7, 0xf0, 0xf9, 0xff, 0xb3, 0xfa, 0x7d, 0xc5, 0x8b, 0xfe,
-    0x9f, 0x3c, 0x1f, 0x5a, 0x75, 0x8b, 0xff, 0x11, 0x31, 0xa1, 0xeb, 0x4d,
-    0xda, 0xc5, 0xee, 0x61, 0x2c, 0x5f, 0xee, 0xff, 0x83, 0xd3, 0x6e, 0xb1,
-    0x58, 0x89, 0x37, 0x41, 0x61, 0xca, 0x95, 0x42, 0x30, 0x21, 0x34, 0xf7,
-    0xb3, 0x07, 0x1f, 0x26, 0xce, 0x43, 0x2e, 0xff, 0xf6, 0x0f, 0xf8, 0xe4,
-    0x59, 0xbb, 0x12, 0xc5, 0xd9, 0xd4, 0xb1, 0x7e, 0x0c, 0x8b, 0x23, 0xd6,
-    0x2a, 0x51, 0x18, 0x6a, 0x38, 0x63, 0x57, 0xfb, 0x44, 0x2e, 0xfc, 0x52,
-    0xb1, 0x6e, 0xb1, 0x62, 0xdd, 0x4b, 0x15, 0x27, 0xc0, 0x03, 0x4e, 0xa1,
-    0x7b, 0xfd, 0xec, 0xd0, 0x0e, 0xfc, 0x58, 0xb8, 0xe3, 0x58, 0xbf, 0xff,
-    0x6f, 0xf6, 0x2f, 0x73, 0x52, 0x2f, 0x13, 0xf4, 0x58, 0xbf, 0x7d, 0xfa,
-    0x64, 0x4b, 0x15, 0xb2, 0x20, 0xe0, 0xb1, 0x52, 0x8f, 0x37, 0x34, 0x68,
-    0x4d, 0xdf, 0xd0, 0x72, 0xf4, 0x81, 0x62, 0x96, 0x2f, 0x0c, 0x53, 0x11,
-    0xb9, 0x01, 0x6d, 0xf1, 0x4f, 0x7c, 0x58, 0xad, 0x1e, 0xb7, 0x43, 0x3b,
-    0xff, 0xff, 0xe9, 0x2d, 0xdb, 0xcd, 0xd8, 0x3d, 0xcc, 0x22, 0x63, 0x43,
-    0xd6, 0x9b, 0xb5, 0x8b, 0xe9, 0x01, 0xf1, 0x62, 0x80, 0x8a, 0x2f, 0x42,
-    0x02, 0xff, 0x87, 0xce, 0x66, 0x87, 0xfc, 0x58, 0xbf, 0xfd, 0xd5, 0xe9,
-    0x0a, 0x79, 0xf6, 0xe9, 0x83, 0x58, 0xbd, 0x27, 0x75, 0x8b, 0x79, 0x62,
-    0xef, 0xbe, 0xe6, 0xb8, 0x87, 0x2f, 0xf6, 0x1d, 0xbb, 0x36, 0x1d, 0xac,
-    0x5f, 0xf6, 0x0d, 0xf8, 0x36, 0x60, 0x96, 0x2f, 0x7b, 0xcd, 0xa3, 0xf0,
-    0x01, 0xbd, 0xfe, 0x90, 0x6c, 0xd0, 0x98, 0xf5, 0x8b, 0xff, 0xfb, 0x8f,
-    0xef, 0xe0, 0xf3, 0x79, 0xf3, 0x96, 0x76, 0xb1, 0x52, 0x9b, 0x0e, 0x42,
-    0x70, 0x8c, 0xfc, 0x6f, 0x7f, 0xfe, 0x2c, 0x03, 0x10, 0x03, 0x3f, 0x84,
-    0xdb, 0x4a, 0xc5, 0x62, 0xb9, 0xde, 0xe1, 0x8c, 0xe5, 0x11, 0x1d, 0x14,
-    0x7b, 0xfe, 0x40, 0xbd, 0xe7, 0xd2, 0xc5, 0xa3, 0x23, 0x77, 0x65, 0x13,
-    0xd6, 0x0f, 0x46, 0xb1, 0x89, 0x8d, 0x8f, 0x68, 0x66, 0xc2, 0x10, 0xc3,
-    0x8f, 0x3f, 0x27, 0x85, 0x0d, 0x8f, 0x07, 0x79, 0x40, 0x1d, 0xc6, 0x78,
-    0xf0, 0xa7, 0x8f, 0x23, 0x8a, 0x33, 0x9d, 0x47, 0x88, 0x78, 0x60, 0xfe,
-    0x72, 0x1d, 0x96, 0xc0, 0x79, 0xd7, 0x97, 0x94, 0xba, 0xae, 0x52, 0x98,
-    0x7d, 0x2d, 0x50, 0x50, 0xf6, 0x0a, 0x12, 0x31, 0xd1, 0x92, 0x07, 0x38,
-    0xbd, 0xd4, 0xc7, 0x7f, 0xff, 0xf3, 0x1e, 0x31, 0xf5, 0xa1, 0x6b, 0x52,
-    0x58, 0x6b, 0xff, 0xf8, 0x1a, 0xc5, 0xe1, 0x7b, 0x16, 0x2f, 0xfc, 0x59,
-    0xde, 0xf3, 0xfc, 0xd6, 0x2c, 0x56, 0x8f, 0x73, 0xc3, 0xb7, 0xf8, 0x5d,
-    0xc6, 0xdc, 0x3b, 0xf1, 0x62, 0xff, 0xe3, 0x42, 0x8f, 0xd8, 0x71, 0xb1,
-    0x86, 0x7e, 0x39, 0x62, 0xfd, 0x3b, 0x36, 0xb7, 0x58, 0xb9, 0xfa, 0x2c,
-    0x5e, 0x9f, 0x71, 0x62, 0xf7, 0x04, 0x7d, 0x1f, 0x00, 0x0a, 0x88, 0x66,
-    0xa3, 0x52, 0x3e, 0x1e, 0x17, 0x17, 0xf0, 0x39, 0x9b, 0xb0, 0xd6, 0x2e,
-    0x9f, 0xac, 0x56, 0x1e, 0x31, 0xcb, 0xef, 0xc4, 0xc1, 0x73, 0x8b, 0x15,
-    0x87, 0x95, 0xa2, 0x1b, 0xe1, 0x7b, 0x09, 0x62, 0xfb, 0x76, 0x6d, 0xd5,
-    0x25, 0x11, 0x78, 0xd9, 0xe2, 0xc5, 0xfd, 0xf9, 0xf4, 0xf6, 0x12, 0xc5,
-    0x9d, 0x62, 0xf8, 0xa0, 0xe7, 0x58, 0xbf, 0x43, 0x09, 0xc6, 0xb1, 0x58,
-    0x8a, 0x87, 0x1e, 0xf9, 0x83, 0x08, 0xf8, 0x8a, 0xff, 0x10, 0x9a, 0x02,
-    0x1e, 0x2c, 0x5f, 0x9c, 0x86, 0xdb, 0xac, 0x56, 0xc9, 0xce, 0xe8, 0x88,
-    0xf0, 0xd9, 0xe2, 0x3f, 0x43, 0x3b, 0xef, 0xe6, 0xb1, 0x62, 0xdd, 0x4b,
-    0x17, 0xff, 0x4e, 0xe5, 0x9b, 0xff, 0x3a, 0x49, 0x2c, 0x59, 0xe2, 0x3d,
-    0xb3, 0x8a, 0xdf, 0x66, 0xc7, 0xf2, 0xc5, 0x4a, 0x32, 0x7e, 0xfa, 0x45,
-    0x17, 0xa4, 0xb7, 0x58, 0xbe, 0x6f, 0xcf, 0xd6, 0x2f, 0x3e, 0x04, 0xb1,
-    0x78, 0xfc, 0x95, 0x8a, 0xd8, 0xfe, 0x77, 0x1d, 0x8f, 0x22, 0x10, 0xed,
-    0xfc, 0xfd, 0x0b, 0x3b, 0xe2, 0xc5, 0xb6, 0x58, 0xbf, 0xbe, 0xc4, 0x30,
-    0xfb, 0x58, 0xbf, 0xfe, 0x63, 0x4c, 0xf1, 0xb2, 0x50, 0xcf, 0xb9, 0xd6,
-    0x2c, 0x29, 0x44, 0xab, 0x89, 0x91, 0x85, 0xc2, 0x0d, 0x62, 0xf0, 0xe4,
-    0xeb, 0x17, 0xc6, 0x86, 0x5b, 0xac, 0x50, 0xcf, 0x0c, 0xd1, 0xdb, 0xed,
-    0x3c, 0x9d, 0x62, 0xff, 0xfa, 0x1b, 0x46, 0xa9, 0x8d, 0x36, 0xdf, 0x46,
-    0x19, 0xf8, 0xe5, 0x8b, 0xf9, 0x9b, 0xbf, 0xe6, 0x2c, 0x54, 0xa6, 0x68,
-    0xeb, 0x8c, 0x46, 0x02, 0x22, 0x66, 0xbf, 0xff, 0x86, 0x2f, 0x70, 0xce,
-    0x3e, 0x98, 0x19, 0xf7, 0x89, 0x62, 0xf9, 0xf7, 0x7e, 0x8b, 0x14, 0xe8,
-    0x83, 0xd2, 0xf5, 0xe9, 0xc2, 0x58, 0xbf, 0x1c, 0x7a, 0x6d, 0xd6, 0x2e,
-    0x3b, 0xac, 0x53, 0x9e, 0x0b, 0x15, 0x50, 0xcf, 0xf3, 0xeb, 0x97, 0xe6,
-    0x37, 0x3e, 0xcb, 0x15, 0x87, 0x94, 0x22, 0x2b, 0xff, 0xf8, 0x44, 0xc6,
-    0x99, 0xe3, 0x64, 0xa1, 0x9f, 0x73, 0xac, 0x5f, 0x9e, 0x20, 0x30, 0x16,
-    0x2f, 0xb5, 0xac, 0x8e, 0x58, 0xa3, 0xa2, 0xb3, 0xeb, 0xac, 0x53, 0x7f,
-    0xa4, 0xa0, 0x3f, 0xb9, 0xd6, 0x2f, 0xff, 0xfb, 0xd9, 0xec, 0xd0, 0x0e,
-    0xd0, 0x9e, 0x3f, 0x1f, 0xbf, 0x2c, 0x5e, 0xd9, 0x89, 0x62, 0xb1, 0x10,
-    0x82, 0x67, 0xa3, 0x51, 0xb3, 0xc8, 0x5b, 0xdf, 0xf6, 0x77, 0xb9, 0x36,
-    0x77, 0xba, 0xc5, 0xfe, 0xef, 0x72, 0x6c, 0xef, 0x75, 0x8b, 0xf3, 0x40,
-    0xa7, 0x86, 0x1f, 0x9e, 0x1e, 0x5e, 0xd8, 0x5e, 0x58, 0xbb, 0x61, 0xac,
-    0x56, 0x1b, 0x86, 0x1f, 0xbe, 0x0b, 0x3e, 0xcb, 0x17, 0xc5, 0x39, 0xda,
-    0xc5, 0x49, 0xe2, 0xf8, 0x8e, 0xf0, 0xdf, 0xa2, 0xc5, 0xa3, 0x25, 0x9a,
-    0x79, 0xb1, 0x14, 0x23, 0x33, 0x1c, 0x2f, 0x72, 0x3b, 0xed, 0xe3, 0x1c,
-    0x78, 0x53, 0xc4, 0x82, 0x78, 0x62, 0xfe, 0x36, 0x76, 0x86, 0x51, 0x43,
-    0xa3, 0x90, 0xcd, 0xf4, 0x61, 0x1d, 0x21, 0x39, 0x1c, 0xea, 0x1b, 0x27,
-    0x51, 0x0d, 0xed, 0xe0, 0x75, 0x8b, 0xdf, 0x98, 0xf5, 0x8b, 0xe2, 0x60,
-    0xbe, 0xb1, 0x7e, 0xe0, 0x98, 0x80, 0xb1, 0x7d, 0x84, 0xfe, 0x58, 0xbd,
-    0xfc, 0x02, 0xc5, 0xec, 0x3c, 0x64, 0xa3, 0x21, 0xc7, 0xe2, 0x20, 0xf1,
-    0x1c, 0x71, 0x47, 0x51, 0x0d, 0xff, 0x9f, 0x5a, 0xcf, 0xfe, 0x7b, 0x82,
-    0xc5, 0xfe, 0x7d, 0x7d, 0xb9, 0x81, 0xac, 0x51, 0xa7, 0xe9, 0xf4, 0x0b,
-    0xff, 0xec, 0x72, 0xd8, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0x86, 0x4b,
-    0x17, 0xf4, 0x07, 0xa7, 0x16, 0xcb, 0x17, 0xff, 0xfb, 0xff, 0x9e, 0xe1,
-    0x9c, 0x72, 0x01, 0x67, 0xbf, 0x8b, 0x17, 0xd9, 0xcc, 0x09, 0x62, 0xb1,
-    0x10, 0x7a, 0x60, 0xbf, 0xd3, 0xe6, 0xf9, 0x83, 0x95, 0x8b, 0xf4, 0x53,
-    0xf1, 0x6c, 0xb1, 0x7e, 0x68, 0x79, 0xf6, 0x58, 0xac, 0x3d, 0x47, 0x2b,
-    0xbb, 0xce, 0xb1, 0x7f, 0xfd, 0x9f, 0x2c, 0xf7, 0xf2, 0x13, 0xe9, 0x1a,
-    0xc5, 0x31, 0xf2, 0x84, 0x2f, 0x74, 0xc6, 0x62, 0xa8, 0xe3, 0x48, 0xfb,
-    0x50, 0x71, 0x7d, 0x42, 0xcc, 0xe4, 0x5f, 0x84, 0x47, 0x21, 0x0b, 0x43,
-    0x5c, 0x02, 0xe4, 0xb7, 0x2b, 0xd8, 0x16, 0x2c, 0x5f, 0x31, 0xca, 0x56,
-    0x2f, 0xfe, 0x72, 0x9f, 0x3e, 0x9c, 0xf8, 0x35, 0x8a, 0x23, 0xe3, 0xea,
-    0x21, 0xb1, 0xd6, 0x2e, 0x9d, 0x96, 0x2b, 0x0f, 0x38, 0x89, 0x04, 0x25,
-    0x70, 0xbe, 0xb1, 0x7f, 0x34, 0x3b, 0xe4, 0xec, 0xb1, 0x7b, 0x66, 0x09,
-    0x62, 0xfb, 0x9f, 0x68, 0x2c, 0x56, 0xc7, 0x84, 0xc3, 0xf7, 0xfc, 0xdd,
-    0x96, 0x74, 0xd3, 0xf1, 0x62, 0xfc, 0xf3, 0x06, 0x82, 0xc5, 0x6c, 0x98,
-    0x70, 0xc6, 0x34, 0xe4, 0x72, 0x2f, 0x9d, 0xdf, 0xd9, 0xb0, 0xe7, 0x06,
-    0xb1, 0x7f, 0x9b, 0xed, 0x87, 0x7e, 0x2c, 0x5f, 0x0f, 0xef, 0x12, 0xc5,
-    0x82, 0x58, 0xac, 0x44, 0xb9, 0xa5, 0xcc, 0x65, 0xe2, 0x4b, 0xf1, 0x37,
-    0x56, 0x6c, 0xb1, 0x7f, 0xc0, 0x92, 0xcf, 0x72, 0x4e, 0xb1, 0x78, 0x26,
-    0xfa, 0xc5, 0xd2, 0x35, 0x8a, 0x93, 0x6b, 0xf1, 0xeb, 0xc5, 0x31, 0xeb,
-    0x17, 0xfd, 0x9e, 0xfb, 0x6f, 0x24, 0x35, 0x8b, 0xfc, 0x5e, 0xe6, 0xb2,
-    0x4e, 0xb1, 0x52, 0x7d, 0x8c, 0x73, 0x7e, 0x72, 0x21, 0x47, 0xac, 0x5f,
-    0xf7, 0x30, 0x79, 0xa8, 0x4e, 0x96, 0x2a, 0x4f, 0x8f, 0x45, 0x54, 0xb1,
-    0x7c, 0x4d, 0xdf, 0x16, 0x2b, 0x63, 0x5f, 0xe0, 0xca, 0x93, 0xf2, 0xc5,
-    0x0b, 0xb7, 0x12, 0xc5, 0xfd, 0x9f, 0xf8, 0x8b, 0x65, 0x8b, 0xd3, 0xa3,
-    0x56, 0x2e, 0xcd, 0x2c, 0x56, 0xe6, 0xd7, 0xc3, 0xd7, 0xe8, 0x37, 0xa0,
-    0xcb, 0x17, 0xd2, 0x00, 0x4a, 0xc5, 0xfe, 0x9d, 0x6d, 0x87, 0xc3, 0xac,
-    0x54, 0x9f, 0xf1, 0x14, 0x70, 0x8a, 0xff, 0x88, 0x79, 0xa1, 0xb3, 0x0d,
-    0x62, 0xc2, 0x58, 0xa9, 0x3c, 0xa6, 0x38, 0xa5, 0x8b, 0x12, 0xc6, 0xc4,
-    0xcb, 0xf6, 0xda, 0x66, 0xf2, 0xc5, 0x39, 0xe4, 0xb1, 0x05, 0xc7, 0x1a,
-    0xc5, 0xf7, 0xdf, 0xf1, 0x9d, 0x6a, 0xfe, 0x08, 0xe1, 0x9d, 0x91, 0x9d,
-    0x9b, 0x0e, 0x3d, 0xcf, 0x1c, 0xae, 0x26, 0xdd, 0x10, 0x1e, 0x11, 0x7f,
-    0x87, 0xab, 0x10, 0x10, 0xcf, 0x19, 0x3d, 0x0a, 0x00, 0x9d, 0xe3, 0x9d,
-    0x7a, 0x88, 0x2f, 0x73, 0x09, 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x25, 0xe9,
-    0x7f, 0xf4, 0x80, 0x7f, 0x9e, 0x61, 0xe6, 0x3d, 0x62, 0xb4, 0x7f, 0x07,
-    0x31, 0xbf, 0x3f, 0x56, 0xe2, 0xd9, 0x62, 0xd0, 0x58, 0xb1, 0xd6, 0x2f,
-    0x14, 0xc1, 0x62, 0xa4, 0xf0, 0x18, 0x4b, 0xc2, 0x57, 0x48, 0x16, 0x2f,
-    0x7e, 0x7b, 0x58, 0xba, 0x7b, 0x58, 0xbd, 0xc7, 0x35, 0x62, 0x8d, 0x3d,
-    0x4f, 0x8f, 0x78, 0x62, 0xfb, 0x3c, 0xfb, 0x2c, 0x5f, 0xdb, 0x07, 0x1c,
-    0xc4, 0x05, 0x8b, 0xff, 0x31, 0x03, 0x3d, 0x24, 0xe0, 0x58, 0xa9, 0x3e,
-    0xf8, 0xe3, 0x3b, 0x46, 0x41, 0x55, 0x16, 0x42, 0x53, 0x44, 0x4c, 0xdc,
-    0x02, 0xd1, 0x35, 0xc7, 0x18, 0x07, 0x09, 0x2b, 0xf1, 0xfd, 0xc6, 0xed,
-    0x62, 0xfb, 0xae, 0xbd, 0xc3, 0x65, 0x8b, 0xfd, 0x27, 0x83, 0x14, 0x9d,
-    0x62, 0xa4, 0xf8, 0x1c, 0xba, 0xfe, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x46,
-    0x2f, 0xff, 0xcc, 0x4c, 0x7d, 0xfe, 0xe3, 0x92, 0xf1, 0xfc, 0xb1, 0x68,
-    0x46, 0x22, 0x46, 0x07, 0x97, 0xfd, 0xe2, 0x60, 0x61, 0x66, 0x96, 0x2f,
-    0xff, 0xff, 0xff, 0xb0, 0x36, 0xe9, 0xf6, 0x80, 0x87, 0x9f, 0x79, 0x83,
-    0x14, 0x9f, 0x05, 0xd7, 0xbf, 0x84, 0xdb, 0x4e, 0x96, 0x2b, 0x11, 0xce,
-    0x23, 0x7b, 0xff, 0xcf, 0x9c, 0xfb, 0x43, 0x87, 0xce, 0xf8, 0xb1, 0x7f,
-    0xfb, 0xbd, 0xdf, 0x46, 0x6a, 0x76, 0x6d, 0x6e, 0xb1, 0x5a, 0x44, 0xdf,
-    0x92, 0xed, 0x19, 0x2a, 0xcb, 0xb5, 0x08, 0xa6, 0x85, 0x89, 0x46, 0x27,
-    0xc8, 0x5e, 0xdf, 0xfe, 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea,
-    0x91, 0xe0, 0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x23, 0xf9, 0x77, 0x47, 0x58,
-    0xbf, 0x46, 0x1d, 0xa1, 0x19, 0x87, 0xa0, 0xe6, 0xf7, 0xff, 0xa3, 0x0e,
-    0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x86, 0x2f, 0xff, 0xec, 0x3c,
-    0xc2, 0x30, 0x32, 0x91, 0xff, 0x37, 0xcd, 0x2c, 0x5f, 0xb5, 0xbb, 0x36,
-    0xea, 0x92, 0x20, 0xbe, 0x92, 0x9e, 0xd6, 0x2f, 0x34, 0x23, 0x30, 0xf6,
-    0x63, 0xcd, 0xef, 0xe6, 0xde, 0x30, 0x0f, 0xb2, 0xc5, 0x1c, 0xfa, 0xfa,
-    0x1c, 0x5f, 0xfa, 0x11, 0x82, 0xe1, 0x93, 0xc9, 0x82, 0xc5, 0x46, 0x1f,
-    0x44, 0x92, 0x5f, 0xfa, 0x27, 0xff, 0x79, 0xe1, 0xe1, 0xd6, 0x2f, 0xff,
-    0x34, 0x60, 0xd8, 0x9b, 0x73, 0x03, 0x63, 0xac, 0x5f, 0xcf, 0xe7, 0xd3,
-    0x01, 0x62, 0xff, 0x0b, 0xdf, 0x92, 0x9f, 0x2c, 0x5f, 0x67, 0xb0, 0x0b,
-    0x17, 0xe2, 0x13, 0x43, 0x8b, 0x16, 0x3a, 0xc5, 0xff, 0x74, 0xce, 0xe1,
-    0xa6, 0x68, 0x2c, 0x5e, 0x26, 0x8c, 0x82, 0x3e, 0x34, 0x5a, 0x46, 0x7e,
-    0x22, 0x8e, 0x28, 0x0c, 0x4a, 0xfe, 0x8a, 0x33, 0x85, 0x3b, 0x2c, 0x5f,
-    0x49, 0x4f, 0xd6, 0x2f, 0xb3, 0x52, 0x75, 0x8a, 0x19, 0xe1, 0xfc, 0x86,
-    0xff, 0x14, 0x86, 0xc5, 0xbc, 0xac, 0x5f, 0xc6, 0x9a, 0xda, 0xd4, 0xac,
-    0x5f, 0xff, 0x61, 0x61, 0xbf, 0x68, 0x7c, 0x26, 0x0c, 0xeb, 0x14, 0xe8,
-    0x82, 0xf9, 0x85, 0xe6, 0x6d, 0xd5, 0x24, 0x89, 0x7d, 0x0c, 0x2d, 0x96,
-    0x2b, 0x73, 0xcd, 0x88, 0xaa, 0xa0, 0x89, 0x3d, 0x37, 0xdf, 0x85, 0xe2,
-    0x9f, 0xac, 0x5f, 0xfb, 0xa3, 0x6b, 0x8d, 0xfe, 0x4e, 0xcb, 0x17, 0xe9,
-    0x8b, 0x52, 0x75, 0x8a, 0xf9, 0xf5, 0xf1, 0x0a, 0xff, 0xe6, 0xef, 0x9f,
-    0x0a, 0x40, 0x60, 0x67, 0x58, 0xbf, 0xd0, 0x9d, 0x6d, 0x3a, 0xd9, 0x62,
-    0xff, 0xef, 0x72, 0x4e, 0x58, 0x3f, 0xe7, 0x96, 0x2f, 0xfa, 0x7a, 0x66,
-    0x9b, 0x66, 0xe2, 0xc5, 0x2c, 0x51, 0x87, 0x8e, 0x23, 0xba, 0x94, 0x72,
-    0x61, 0xb0, 0x21, 0x17, 0x7e, 0xcf, 0xc9, 0x41, 0x62, 0xff, 0xec, 0xff,
-    0x8a, 0x41, 0x84, 0xd0, 0x58, 0xa3, 0x9f, 0x49, 0x13, 0xdf, 0xff, 0x7e,
-    0x7d, 0xc3, 0x03, 0x6f, 0x36, 0x9b, 0xa9, 0x62, 0xfb, 0x80, 0xf3, 0x2c,
-    0x5c, 0x52, 0x33, 0xf8, 0x3a, 0xad, 0xff, 0x7f, 0x37, 0x93, 0x39, 0xa8,
-    0x96, 0x2f, 0xef, 0x1d, 0xfd, 0xf7, 0x58, 0xa8, 0x1f, 0x5b, 0x1e, 0xda,
-    0x32, 0x57, 0x57, 0x46, 0x45, 0x91, 0xa4, 0x44, 0x46, 0xd0, 0x93, 0x01,
-    0x11, 0x46, 0x5d, 0xc8, 0x4e, 0x7a, 0x13, 0x21, 0xc2, 0x5e, 0xff, 0x78,
-    0x98, 0xd3, 0xb4, 0x16, 0x2f, 0x89, 0xbd, 0xc5, 0x8b, 0xfb, 0x60, 0xc6,
-    0x37, 0x89, 0x62, 0xcd, 0x04, 0xcf, 0x47, 0x0b, 0x5d, 0xcd, 0x18, 0x8a,
-    0xff, 0xd1, 0x93, 0xfc, 0xd7, 0x46, 0xfb, 0x2c, 0x5d, 0x1b, 0xee, 0xb1,
-    0x76, 0x1d, 0x62, 0xfa, 0x1a, 0x16, 0xeb, 0x17, 0xfa, 0x5f, 0x6c, 0x18,
-    0x67, 0x58, 0xb9, 0xc6, 0xb1, 0x68, 0xce, 0xb1, 0x14, 0xd2, 0x3d, 0xd8,
-    0xbf, 0xc9, 0x7a, 0x8d, 0x6e, 0xce, 0x8b, 0x17, 0xff, 0xb7, 0xcf, 0x49,
-    0x7b, 0x8c, 0x42, 0xc5, 0x8b, 0x46, 0x70, 0xf8, 0x83, 0x19, 0xa1, 0xa7,
-    0xa4, 0xf0, 0xe9, 0xe9, 0x0b, 0xdb, 0xff, 0xa3, 0x34, 0xc0, 0x6f, 0x3e,
-    0xb0, 0xeb, 0x17, 0x81, 0xe7, 0x58, 0xa8, 0x1f, 0x21, 0x23, 0xdf, 0xfb,
-    0xbe, 0x41, 0xf9, 0xc9, 0xd4, 0x16, 0x2f, 0xee, 0xb7, 0xae, 0xe3, 0x5b,
-    0xf4, 0x95, 0x8b, 0xe7, 0x3b, 0x75, 0x2c, 0x5f, 0xed, 0xe4, 0xfc, 0xf4,
-    0xc1, 0x62, 0xa4, 0xf6, 0x9c, 0x96, 0xef, 0xe2, 0xc5, 0xd2, 0x12, 0xc5,
-    0xfc, 0x2d, 0x00, 0xc1, 0xc4, 0xb1, 0x68, 0xce, 0xb8, 0x98, 0xec, 0x21,
-    0x38, 0x32, 0x0f, 0x8b, 0xf0, 0x62, 0x99, 0x3b, 0xd0, 0x46, 0xbd, 0x7f,
-    0xec, 0x70, 0x48, 0x18, 0x85, 0x8b, 0x17, 0xf4, 0x33, 0xff, 0x68, 0x2c,
-    0x5f, 0xe9, 0xd1, 0x66, 0xc1, 0xc1, 0x62, 0xfe, 0x3b, 0xfb, 0xe2, 0x35,
-    0x62, 0xff, 0xbe, 0xec, 0x09, 0x17, 0x5f, 0x2b, 0x17, 0x9e, 0x28, 0xcd,
-    0x91, 0x45, 0x86, 0xbe, 0x30, 0xbf, 0xf6, 0xf1, 0x83, 0x73, 0x18, 0xb7,
-    0x95, 0x8a, 0xc4, 0x44, 0xb2, 0x2d, 0xff, 0xfd, 0x83, 0xfc, 0x87, 0x19,
-    0xe2, 0x60, 0x73, 0x92, 0x04, 0x8b, 0x46, 0x4b, 0x3f, 0x6c, 0x68, 0x3b,
-    0xc6, 0x8f, 0xdb, 0x69, 0xe7, 0xc4, 0x3f, 0x28, 0x69, 0xa1, 0x40, 0x08,
-    0xf7, 0x88, 0xa7, 0xc7, 0x9d, 0x23, 0x59, 0x8e, 0x21, 0xbf, 0xe9, 0x8c,
-    0xc2, 0x73, 0x67, 0x8b, 0x17, 0xf9, 0xbf, 0x19, 0x91, 0x4c, 0x7a, 0xc5,
-    0xff, 0xee, 0xb6, 0x36, 0x33, 0x07, 0x25, 0xe7, 0xf8, 0x96, 0x2f, 0xf0,
-    0x3f, 0x9d, 0x80, 0x3e, 0xd6, 0x2f, 0xff, 0x36, 0xfd, 0xc9, 0xaf, 0x3d,
-    0x8c, 0x5d, 0xac, 0x5e, 0xe6, 0x71, 0x62, 0xfb, 0x93, 0xdc, 0x16, 0x2f,
-    0x85, 0xd4, 0x39, 0x58, 0xbf, 0xfd, 0xc1, 0xe3, 0x9a, 0xfc, 0xe4, 0xea,
-    0x0b, 0x14, 0x34, 0xce, 0x77, 0x38, 0xed, 0x3e, 0x21, 0xdf, 0x92, 0x70,
-    0x9a, 0xff, 0xff, 0x85, 0xdf, 0x39, 0x9f, 0xd6, 0xb0, 0x2c, 0xe8, 0xe5,
-    0xdf, 0x96, 0x2f, 0xfd, 0x90, 0xfc, 0xeb, 0x30, 0x8d, 0x58, 0xbf, 0xfe,
-    0xd0, 0x3d, 0x91, 0x14, 0x9f, 0x53, 0x3d, 0x16, 0x2f, 0xff, 0x4f, 0xdc,
-    0xde, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x52, 0x89, 0xff, 0xa9, 0x5e, 0x20,
-    0x71, 0x62, 0xfa, 0x78, 0x37, 0x58, 0xbf, 0xfe, 0xd1, 0x4f, 0x70, 0xfb,
-    0x3f, 0xa7, 0xdc, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0xa0, 0x5f, 0xe3,
-    0xb4, 0x3f, 0x2d, 0xa5, 0x8b, 0xfe, 0x19, 0x4f, 0x66, 0x73, 0x52, 0xb1,
-    0x40, 0x3e, 0xe0, 0x8c, 0xef, 0xd0, 0x78, 0xe9, 0x3a, 0xc5, 0x49, 0xe7,
-    0x31, 0x1d, 0x41, 0x3b, 0xec, 0x22, 0x34, 0x75, 0xc8, 0xb4, 0xa0, 0x50,
-    0xed, 0xbf, 0xfd, 0xf7, 0xd8, 0xe2, 0xd0, 0x39, 0xc6, 0x1a, 0xc5, 0xff,
-    0x7e, 0x75, 0x13, 0xfe, 0x62, 0x58, 0xbf, 0xe6, 0xd6, 0xda, 0x98, 0x36,
-    0x96, 0x2f, 0xf3, 0x04, 0x58, 0x09, 0x02, 0xc5, 0xfe, 0xc1, 0xe0, 0xe4,
-    0xbc, 0xb1, 0x50, 0x44, 0xf9, 0x1d, 0x70, 0xce, 0xff, 0xd3, 0xb1, 0x67,
-    0x60, 0x6e, 0xf8, 0xb1, 0x7f, 0x34, 0x09, 0xe4, 0xd5, 0x8b, 0xfb, 0x40,
-    0x1b, 0x37, 0xd6, 0x2f, 0x00, 0x3e, 0xd6, 0x2f, 0x8e, 0xd0, 0xc5, 0x8a,
-    0xec, 0xf0, 0x80, 0x41, 0x7f, 0x6d, 0x9e, 0xe4, 0x81, 0x62, 0xff, 0x80,
-    0x26, 0x80, 0x1b, 0xbe, 0x2c, 0x54, 0xa3, 0xf7, 0x1c, 0x1c, 0x8d, 0x8b,
-    0xef, 0xef, 0x72, 0x78, 0x7e, 0xa5, 0x8b, 0x3a, 0xc5, 0x11, 0xe1, 0xf4,
-    0x32, 0xbf, 0xf9, 0xbb, 0xe6, 0xd8, 0x10, 0x8a, 0x78, 0xb1, 0x7c, 0x5a,
-    0x62, 0x58, 0xbf, 0xe9, 0xd8, 0xef, 0xae, 0x08, 0xeb, 0x17, 0xfa, 0x4f,
-    0x9e, 0x61, 0x75, 0xeb, 0x15, 0xf3, 0xf3, 0xe1, 0xdd, 0xfe, 0x9e, 0x0f,
-    0x4e, 0x2d, 0x96, 0x2f, 0xf9, 0x81, 0x39, 0xe6, 0x20, 0x2c, 0x5b, 0x19,
-    0x32, 0x2f, 0x42, 0x53, 0xa1, 0x10, 0x46, 0xb7, 0x6a, 0x56, 0x2f, 0xf4,
-    0x03, 0x86, 0x02, 0x60, 0xb1, 0x43, 0x3c, 0xcd, 0x0b, 0xdf, 0xfd, 0xdf,
-    0x8b, 0x36, 0x3e, 0x1f, 0x09, 0x62, 0xfa, 0x0f, 0xa8, 0x2c, 0x5f, 0xf9,
-    0x9b, 0xd0, 0xcf, 0x47, 0x39, 0xab, 0x17, 0x98, 0x78, 0xb1, 0x7f, 0xdc,
-    0x6e, 0xcb, 0x3d, 0xf7, 0x58, 0xbf, 0xc5, 0x9c, 0xd6, 0xb3, 0x8b, 0x15,
-    0x89, 0xaa, 0x39, 0x14, 0x48, 0xba, 0x23, 0xe2, 0x17, 0x87, 0x3a, 0x1c,
-    0xdf, 0xec, 0xf9, 0x67, 0xbe, 0xeb, 0x17, 0xe8, 0x4f, 0xe7, 0xa2, 0xc5,
-    0xff, 0x87, 0xf7, 0x37, 0xf3, 0x0c, 0x09, 0x62, 0xff, 0x4f, 0xcb, 0x3d,
-    0xf7, 0x58, 0xa8, 0x23, 0x3f, 0xb3, 0x27, 0x2a, 0x12, 0x0d, 0xff, 0x9f,
-    0x5a, 0x7e, 0xe1, 0xe6, 0xed, 0x62, 0xfd, 0xb3, 0x8c, 0x52, 0xb1, 0x66,
-    0xd8, 0xfa, 0xb4, 0x83, 0x7f, 0x82, 0xce, 0xfc, 0x18, 0xb6, 0x58, 0xbf,
-    0x9c, 0x7a, 0x71, 0x6c, 0xb1, 0x7f, 0x39, 0xb2, 0x4c, 0x6a, 0xc5, 0xff,
-    0xff, 0xc4, 0x28, 0x67, 0x0b, 0x36, 0x0e, 0x1e, 0x35, 0xfb, 0xe0, 0xf0,
-    0x96, 0x2f, 0xe9, 0xc2, 0xd6, 0xa5, 0x62, 0x8d, 0x46, 0x7b, 0x97, 0x69,
-    0xd6, 0xa5, 0x36, 0x73, 0x4e, 0x7d, 0x0f, 0xeb, 0xdf, 0xf1, 0xd6, 0x2e,
-    0x84, 0x67, 0x5d, 0xb3, 0xef, 0x66, 0x38, 0xed, 0x96, 0xc6, 0xd9, 0x92,
-    0xa6, 0xf7, 0x5b, 0x74, 0xd8, 0xa1, 0xb5, 0xa2, 0xf3, 0xa0, 0xfe, 0x32,
-    0xa6, 0x7c, 0x01, 0x19, 0x46, 0xd3, 0xc8, 0xfa, 0xbd, 0x19, 0xac, 0x74,
-    0x29, 0xc3, 0x8e, 0x3f, 0xa8, 0xda, 0xff, 0xfd, 0x9f, 0x8c, 0xee, 0x1e,
-    0x90, 0xb0, 0xee, 0x50, 0x58, 0xb4, 0x64, 0x1b, 0x1e, 0x03, 0x9d, 0xb5,
-    0x3f, 0xdf, 0xd1, 0xaa, 0x56, 0xcf, 0xfd, 0xf5, 0x0b, 0x65, 0xdc, 0x39,
-    0x44, 0x5b, 0xd3, 0x83, 0x9e, 0x78, 0x4a, 0x3e, 0x7f, 0xbb, 0x52, 0xf3,
-    0xcf, 0x2e, 0xdb, 0xec, 0xe0, 0x85, 0x7f, 0x5e, 0x86, 0x4b, 0xfc, 0x8e,
-    0x2c, 0x54, 0xff, 0xfe, 0xaa, 0xca, 0xf2, 0xfd, 0x08, 0xcd, 0x10, 0x96,
-    0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x73, 0x2e, 0xcd,
-    0x2c, 0x5f, 0xee, 0x67, 0xe7, 0x6c, 0xd2, 0xc5, 0xfe, 0x6d, 0xe3, 0x03,
-    0x39, 0x4e, 0xc7, 0x97, 0x82, 0xf6, 0x8c, 0x3a, 0x3a, 0x7a, 0x42, 0x6e,
-    0xdc, 0x58, 0xba, 0x12, 0xb1, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d,
-    0xd5, 0x24, 0x49, 0x70, 0x41, 0x2c, 0x5a, 0x33, 0x64, 0x49, 0xee, 0x24,
-    0x71, 0x70, 0x94, 0x2e, 0xff, 0x96, 0x2e, 0xeb, 0x9b, 0x2c, 0x5f, 0xe7,
-    0x03, 0x7b, 0xf2, 0x6a, 0xc5, 0xff, 0xcf, 0xa6, 0xee, 0x4f, 0x38, 0x43,
-    0x58, 0xbf, 0xb9, 0xc9, 0x00, 0x7b, 0x2c, 0x5f, 0xe6, 0xd4, 0x3a, 0xe7,
-    0x40, 0x3a, 0xc5, 0x61, 0xf6, 0x88, 0xc6, 0xf3, 0xf7, 0xc5, 0x8b, 0xc5,
-    0x27, 0x58, 0xbf, 0xe2, 0x6e, 0xfc, 0xde, 0x83, 0x2c, 0x5f, 0xdf, 0xcc,
-    0xf7, 0xf1, 0x62, 0xb6, 0x45, 0x03, 0x8f, 0x00, 0x73, 0xc7, 0x37, 0x89,
-    0xb7, 0x58, 0xbf, 0xed, 0x6f, 0xf7, 0x8f, 0x7c, 0xd9, 0x62, 0xd2, 0xb1,
-    0x42, 0x3c, 0xfe, 0x87, 0xd7, 0xee, 0x3e, 0x68, 0xd5, 0x8b, 0xe9, 0x38,
-    0xfe, 0xb1, 0x50, 0x3c, 0xcf, 0x14, 0xdf, 0xb5, 0x3d, 0x1f, 0xa2, 0xc5,
-    0xe8, 0x9c, 0xeb, 0x17, 0xe6, 0xf7, 0xb3, 0x4b, 0x14, 0x33, 0xf2, 0x72,
-    0xc2, 0x1e, 0xbf, 0xbc, 0xd0, 0xe3, 0x8d, 0x62, 0xff, 0x3e, 0x86, 0x26,
-    0xd4, 0x16, 0x2b, 0x0f, 0x8b, 0xe5, 0xd7, 0xdb, 0xbb, 0x75, 0x2c, 0x5f,
-    0x70, 0xf3, 0xc5, 0x8b, 0xfe, 0x7e, 0x60, 0xe1, 0x0f, 0x89, 0x62, 0xfd,
-    0xc8, 0xa0, 0xe0, 0x58, 0xbd, 0xd7, 0xcf, 0x96, 0x2b, 0x11, 0x53, 0xb9,
-    0x1b, 0x9d, 0x08, 0xaa, 0xf1, 0xd8, 0x0b, 0x17, 0xfd, 0xbb, 0x6b, 0x61,
-    0xb3, 0x1a, 0xb1, 0x7e, 0xf7, 0xa7, 0x40, 0x58, 0xad, 0xcf, 0x97, 0xe7,
-    0x95, 0x28, 0xa5, 0xc8, 0x41, 0x5f, 0xf1, 0x64, 0x52, 0xe0, 0x7f, 0x2c,
-    0x5f, 0xfb, 0xbc, 0xf3, 0xf6, 0x16, 0x77, 0xe5, 0x8b, 0xf1, 0x37, 0x49,
-    0x35, 0x62, 0xa4, 0xfb, 0x5d, 0x0e, 0xfe, 0xc1, 0x86, 0x36, 0x3a, 0xc5,
-    0xff, 0xfb, 0x0a, 0x06, 0x60, 0xdf, 0x9d, 0xf8, 0x4d, 0xc5, 0x8b, 0xdc,
-    0x10, 0x4b, 0x17, 0xfa, 0x76, 0x0e, 0x39, 0x88, 0x0b, 0x17, 0x42, 0x32,
-    0x37, 0x5f, 0xb1, 0x8d, 0x86, 0x24, 0x7e, 0x06, 0x83, 0x85, 0x86, 0x43,
-    0x04, 0xd3, 0xdd, 0xdb, 0x3b, 0x70, 0x78, 0x4a, 0x45, 0x08, 0xfd, 0x10,
-    0xfe, 0x19, 0xe5, 0x0e, 0x1e, 0x13, 0x7a, 0x14, 0xbd, 0x08, 0x02, 0x2f,
-    0x8e, 0x57, 0x0c, 0x7e, 0xf4, 0x6f, 0xd7, 0x71, 0xcb, 0x17, 0xf7, 0x08,
-    0xc8, 0xdc, 0x6e, 0xb1, 0x7e, 0x9c, 0x2f, 0x71, 0x62, 0xfe, 0x97, 0xf7,
-    0xe7, 0x4b, 0x17, 0xfe, 0x2c, 0x04, 0x83, 0x5a, 0x90, 0x96, 0x2f, 0x88,
-    0xb3, 0xcb, 0x16, 0x8c, 0x8d, 0x69, 0x8a, 0xc9, 0x69, 0xcd, 0x3e, 0x4f,
-    0xc2, 0xd0, 0xcf, 0xeb, 0x4a, 0xb3, 0xc1, 0x29, 0xa2, 0xa5, 0x99, 0xa1,
-    0xa8, 0xc5, 0x79, 0x0c, 0x61, 0x52, 0xb2, 0x6f, 0xfe, 0x8d, 0x51, 0xb7,
-    0x59, 0x1f, 0x1a, 0x83, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xef, 0x39, 0x0a,
-    0x19, 0xc5, 0x8b, 0xff, 0xb6, 0x0e, 0x3e, 0x35, 0xf5, 0xe6, 0x19, 0xf8,
-    0xe8, 0xc2, 0x44, 0xd0, 0x6c, 0xf7, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x1c,
-    0x2f, 0xe1, 0x6f, 0xa7, 0x92, 0x58, 0xbf, 0x39, 0x7a, 0x4e, 0xb1, 0x68,
-    0xcc, 0x44, 0x67, 0xcd, 0xe3, 0x8b, 0xaf, 0xec, 0x0f, 0xf2, 0xfa, 0x58,
-    0xbf, 0x07, 0xf9, 0x7d, 0x2c, 0x5c, 0xe1, 0xac, 0x56, 0x1e, 0x0b, 0x94,
-    0xdf, 0xd8, 0x1f, 0xe5, 0xf4, 0xb1, 0x7f, 0x60, 0x7f, 0x97, 0xd2, 0xc5,
-    0xfd, 0x81, 0xfe, 0x5f, 0x4b, 0x17, 0xf6, 0x07, 0xf9, 0x7d, 0x2c, 0x5f,
-    0xfd, 0xd7, 0x3a, 0xcf, 0xc8, 0xba, 0xb7, 0xfc, 0x84, 0xb1, 0x7a, 0x28,
-    0xa5, 0x62, 0xfe, 0x39, 0x67, 0x7e, 0x65, 0x8b, 0x9c, 0x72, 0x79, 0xb8,
-    0x3f, 0x7f, 0xb5, 0x9b, 0xfe, 0x7b, 0x82, 0xc5, 0xe0, 0x02, 0x56, 0x2c,
-    0x12, 0xc5, 0x49, 0xf3, 0x0c, 0xdb, 0x07, 0x69, 0x62, 0xfe, 0xe7, 0x24,
-    0x01, 0xec, 0xb1, 0x7f, 0xe6, 0x37, 0x7f, 0xbe, 0xb5, 0x21, 0x2c, 0x5f,
-    0xe6, 0xd4, 0x03, 0xea, 0x68, 0x2c, 0x56, 0x22, 0xac, 0x8c, 0x44, 0x85,
-    0x7d, 0xb0, 0xe7, 0x65, 0x8b, 0xc2, 0xe4, 0xac, 0x5f, 0xfd, 0xbf, 0xe4,
-    0xd7, 0xe7, 0x5d, 0x7a, 0xc6, 0xfa, 0xc5, 0x84, 0xb1, 0x7f, 0x4f, 0xbf,
-    0x3d, 0x81, 0x62, 0xa3, 0xd1, 0x2a, 0x75, 0x4e, 0x09, 0x5e, 0xc6, 0x3a,
-    0xc5, 0x2c, 0x58, 0xbb, 0x35, 0x04, 0x39, 0x7d, 0xbb, 0x36, 0xea, 0x90,
-    0xbc, 0xbf, 0xd9, 0xd8, 0x38, 0xcf, 0xb2, 0xc5, 0xf8, 0x98, 0x0d, 0xc5,
-    0x8b, 0xf6, 0x45, 0x06, 0xe2, 0xc5, 0x62, 0xa0, 0xee, 0xc9, 0x5e, 0x16,
-    0x51, 0x2d, 0xe8, 0x98, 0x8c, 0x7c, 0x6a, 0x19, 0x3d, 0x86, 0xb1, 0x7f,
-    0xb6, 0xfe, 0x7f, 0x1f, 0x65, 0x8b, 0xd2, 0x17, 0x96, 0x2b, 0x47, 0xa6,
-    0x46, 0xb5, 0x1b, 0xa2, 0x19, 0x99, 0x6e, 0x14, 0x7a, 0xc5, 0xfd, 0xcf,
-    0xb1, 0xdf, 0x8b, 0x17, 0x0b, 0x4b, 0x15, 0x03, 0xe1, 0x38, 0xdb, 0x17,
-    0x5c, 0xfa, 0x58, 0xb7, 0x96, 0x2b, 0xe6, 0xa5, 0x85, 0xef, 0x8a, 0x63,
-    0xe2, 0x58, 0xbf, 0x4b, 0x79, 0xfb, 0x58, 0xb8, 0xd9, 0x58, 0xa3, 0xa2,
-    0x1b, 0xe4, 0x00, 0x26, 0x22, 0x8b, 0xfe, 0x6d, 0x42, 0x28, 0x3e, 0xa0,
-    0xb1, 0x7d, 0xd4, 0xe5, 0x12, 0xc5, 0xc1, 0x44, 0xb1, 0x7f, 0x60, 0xff,
-    0x80, 0x65, 0x8b, 0xe9, 0x17, 0x5f, 0xc5, 0x8a, 0x82, 0x34, 0x30, 0xed,
-    0x89, 0xb8, 0x34, 0x11, 0x6d, 0xff, 0x79, 0xc1, 0xc6, 0xee, 0x00, 0x58,
-    0xbf, 0xce, 0x0e, 0x00, 0x0f, 0xe5, 0x8b, 0xb7, 0x02, 0xc5, 0xcf, 0x2b,
-    0x17, 0x49, 0xc0, 0x6b, 0xc8, 0x66, 0xa5, 0x19, 0x38, 0x76, 0xec, 0x77,
-    0x07, 0xc5, 0x8b, 0xf6, 0x9b, 0x9b, 0x4a, 0xc5, 0xa0, 0xb1, 0x52, 0x7a,
-    0x98, 0x32, 0xc5, 0x37, 0xf8, 0x1e, 0xe7, 0xf1, 0xc6, 0xb1, 0x6d, 0x96,
-    0x2b, 0x47, 0x8e, 0x46, 0x96, 0x09, 0x62, 0xfd, 0x3a, 0xd4, 0xec, 0xb1,
-    0x7f, 0x8a, 0x4e, 0x18, 0xff, 0x2b, 0x15, 0x87, 0xe0, 0x42, 0x7e, 0x29,
-    0xbf, 0x34, 0x0f, 0x30, 0x58, 0xb1, 0xd6, 0x2a, 0x51, 0xf0, 0xf0, 0x91,
-    0xf9, 0x6f, 0x8a, 0x2f, 0x9c, 0x6d, 0xc5, 0x8b, 0xe3, 0x3d, 0x9a, 0x58,
-    0xa9, 0x3c, 0x6d, 0xc8, 0xaf, 0x81, 0x9d, 0xf9, 0x62, 0xf3, 0x43, 0x16,
-    0x2f, 0xe6, 0x2d, 0xf5, 0x0e, 0x2c, 0x57, 0x67, 0xde, 0x44, 0x82, 0x1c,
-    0xbf, 0xd8, 0x7c, 0xdf, 0x77, 0xfa, 0xc5, 0xe8, 0x34, 0x16, 0x2f, 0xdf,
-    0xc8, 0x0f, 0xb5, 0x8a, 0x73, 0xfc, 0x88, 0xd7, 0xc3, 0xb7, 0x73, 0xb5,
-    0x8b, 0xef, 0x42, 0x4d, 0x48, 0xbe, 0xc1, 0xfb, 0x8b, 0x15, 0x88, 0x8f,
-    0x39, 0x7b, 0x0c, 0x91, 0x25, 0xff, 0xf3, 0x37, 0x86, 0xec, 0x43, 0xfc,
-    0x86, 0x75, 0x8b, 0xd8, 0x1f, 0x58, 0xb1, 0x7e, 0xee, 0x1c, 0x73, 0x56,
-    0x2a, 0x4f, 0x3b, 0x08, 0xef, 0xff, 0x61, 0x02, 0x3b, 0x3d, 0x9f, 0x9d,
-    0x01, 0x62, 0xb4, 0x98, 0x49, 0x42, 0x77, 0x84, 0x17, 0xd1, 0x74, 0xc1,
-    0xac, 0x5f, 0x80, 0x09, 0x23, 0x56, 0x2f, 0x6e, 0xd0, 0x58, 0xa9, 0x3c,
-    0x7c, 0x29, 0xbe, 0x0c, 0xa2, 0xea, 0x58, 0xa7, 0x45, 0xaf, 0xdb, 0x40,
-    0x41, 0x7f, 0xfb, 0x98, 0xfd, 0x18, 0xfb, 0x1e, 0x37, 0x8d, 0xe3, 0x45,
-    0x8b, 0xee, 0xc4, 0xde, 0x58, 0xa8, 0xd9, 0x10, 0x2c, 0xbb, 0x7a, 0x38,
-    0xd3, 0x56, 0x2c, 0x4b, 0x14, 0xe6, 0xd2, 0x38, 0x8e, 0xfe, 0x3b, 0x96,
-    0x1e, 0x56, 0x2f, 0xb6, 0xf6, 0x7d, 0x62, 0xb0, 0xf4, 0x18, 0xb2, 0xfe,
-    0x06, 0x10, 0xb9, 0x2b, 0x17, 0xfe, 0x2c, 0xd8, 0xb3, 0xdf, 0x98, 0x2c,
-    0x5f, 0xf3, 0xc1, 0xfe, 0x23, 0x9d, 0xd6, 0x2a, 0x51, 0x48, 0x45, 0xbe,
-    0x3e, 0xb4, 0x67, 0x58, 0xd9, 0x7b, 0x75, 0xad, 0xf1, 0xa1, 0x04, 0x6c,
-    0x5d, 0xd7, 0x65, 0xdd, 0x70, 0xba, 0x35, 0x17, 0x4c, 0x28, 0xf6, 0x84,
-    0x8c, 0x0b, 0x47, 0x0b, 0x7c, 0x94, 0x79, 0xbc, 0x3f, 0xbb, 0x84, 0x43,
-    0xc3, 0x76, 0x28, 0xc3, 0x35, 0x18, 0x91, 0xe1, 0x03, 0xf8, 0xda, 0xda,
-    0x10, 0xc0, 0x84, 0x89, 0x46, 0x75, 0xc8, 0xd0, 0xfd, 0x0e, 0xa1, 0x42,
-    0xc3, 0xa2, 0xdc, 0x73, 0x98, 0x70, 0xc4, 0xbf, 0xff, 0xf7, 0xe5, 0xc9,
-    0xbd, 0x22, 0x86, 0x18, 0xd8, 0x2e, 0xbc, 0xa5, 0x62, 0xff, 0x9b, 0x78,
-    0xc8, 0x66, 0xb2, 0x0b, 0x17, 0x67, 0x16, 0x2f, 0xff, 0xff, 0x89, 0xa3,
-    0x30, 0x5d, 0x7b, 0x9a, 0xfe, 0xfe, 0x3c, 0x38, 0x66, 0x1b, 0x30, 0x58,
-    0xbf, 0x67, 0x0e, 0x39, 0x58, 0xbf, 0xfe, 0x6d, 0xb5, 0x3b, 0x71, 0x88,
-    0x5b, 0xe7, 0x16, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0xc8, 0x5e, 0x68,
-    0x46, 0x4a, 0x22, 0x71, 0x4a, 0xe7, 0xe2, 0xc5, 0xa3, 0x25, 0x52, 0x2e,
-    0xcd, 0xd0, 0x3d, 0xdc, 0x5f, 0x50, 0x86, 0x3c, 0x2c, 0x7c, 0x6b, 0x7f,
-    0xf7, 0xdf, 0x50, 0x8c, 0x1e, 0x1c, 0x67, 0x58, 0xb8, 0xf1, 0xeb, 0x17,
-    0x1f, 0x8b, 0x17, 0x99, 0x8e, 0xb1, 0x68, 0xcd, 0x8f, 0x3f, 0x43, 0x7f,
-    0x18, 0xbd, 0xec, 0x3a, 0xc5, 0xdf, 0x3a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e,
-    0xa9, 0x37, 0x8b, 0x46, 0x49, 0xf6, 0x0c, 0x77, 0x06, 0x2d, 0x1c, 0xb1,
-    0x76, 0x12, 0xc5, 0xa3, 0x18, 0xd5, 0xc7, 0x0a, 0xdc, 0xdd, 0x4b, 0x17,
-    0xf8, 0x12, 0x31, 0x36, 0xa0, 0xb1, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76,
-    0x6d, 0xd5, 0x24, 0x99, 0x68, 0xcc, 0x44, 0xf3, 0x8d, 0x1c, 0xd2, 0xe8,
-    0xde, 0x34, 0x58, 0xbf, 0xf6, 0x16, 0x7b, 0x4e, 0x6f, 0xc4, 0xb1, 0x63,
-    0xac, 0x5f, 0xf0, 0x9b, 0xbd, 0x68, 0x51, 0x71, 0x62, 0xa0, 0x79, 0xfc,
-    0x12, 0xbf, 0xef, 0x13, 0x05, 0xe7, 0xec, 0x25, 0x8b, 0x8f, 0xda, 0xc5,
-    0xfd, 0x9e, 0x29, 0x93, 0xac, 0x5f, 0xdd, 0x80, 0x3d, 0x30, 0x16, 0x2f,
-    0xfd, 0x14, 0x05, 0xc6, 0xc3, 0xbf, 0x45, 0x8b, 0xbf, 0x19, 0xd6, 0xa7,
-    0x8c, 0x32, 0x2c, 0x84, 0x77, 0x64, 0x47, 0x3c, 0xf8, 0xcb, 0x16, 0x70,
-    0xc6, 0xa3, 0x66, 0xf7, 0xca, 0x63, 0x03, 0x85, 0x66, 0x63, 0x93, 0x8a,
-    0xae, 0xf5, 0xa8, 0x4c, 0x72, 0x14, 0xbe, 0x61, 0xe9, 0x0c, 0xa0, 0xe3,
-    0xfd, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x07, 0x4b, 0xff, 0xdd, 0x26,
-    0x3c, 0xc6, 0xf4, 0xee, 0xe5, 0x2b, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b,
-    0x2c, 0x5f, 0xd0, 0x6d, 0x13, 0x79, 0x62, 0xff, 0xdf, 0xc2, 0x26, 0xf7,
-    0xe0, 0xeb, 0x17, 0xf6, 0xbe, 0x13, 0x0e, 0x32, 0x51, 0xde, 0x34, 0xf8,
-    0x8d, 0xbc, 0x5b, 0x51, 0x89, 0xc7, 0xb4, 0x65, 0x77, 0xed, 0x6e, 0xcd,
-    0xba, 0xa4, 0x58, 0x2f, 0xb0, 0x07, 0x75, 0x8b, 0xf4, 0x61, 0xda, 0x11,
-    0x98, 0x7b, 0x31, 0xc6, 0xf7, 0xfc, 0xe3, 0xc3, 0xbe, 0xee, 0x35, 0x8b,
-    0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x18, 0x16, 0x8c, 0x93, 0xf0, 0xc3, 0x9b,
-    0xc1, 0x49, 0xd6, 0x2e, 0x2d, 0xd6, 0x2f, 0xf3, 0x0f, 0x3a, 0x9a, 0x4e,
-    0xb1, 0x58, 0x79, 0xbf, 0x18, 0xbd, 0x07, 0x1a, 0xc5, 0xd3, 0xda, 0xc5,
-    0xfc, 0xff, 0x63, 0xfc, 0x4b, 0x15, 0xa3, 0xc6, 0xf0, 0xc5, 0xfe, 0x04,
-    0xe1, 0x4b, 0x9a, 0xb1, 0x7e, 0xcd, 0x66, 0x76, 0xb1, 0x7e, 0x86, 0x71,
-    0xb8, 0xb1, 0x7b, 0x08, 0x6b, 0x17, 0xff, 0x47, 0x31, 0x03, 0x3d, 0x24,
-    0xe0, 0x58, 0xb4, 0x66, 0x27, 0xe9, 0xbb, 0x5c, 0x44, 0x2c, 0xc6, 0x02,
-    0x22, 0x32, 0x11, 0x40, 0x45, 0x01, 0x8e, 0x5f, 0xff, 0x98, 0x11, 0xd9,
-    0x18, 0x4d, 0xe8, 0x67, 0xb0, 0x6b, 0x17, 0xff, 0xe7, 0x3b, 0xea, 0x33,
-    0xd1, 0xd9, 0xff, 0x4f, 0x61, 0x2c, 0x51, 0x26, 0x83, 0xc8, 0x44, 0xf9,
-    0x6a, 0xec, 0xe2, 0xc5, 0xba, 0x96, 0x2c, 0x35, 0x8b, 0x46, 0x40, 0xdf,
-    0x44, 0x2e, 0xc2, 0xb7, 0xbc, 0xf1, 0x2c, 0x5f, 0xff, 0xff, 0xf4, 0x90,
-    0x8f, 0xa9, 0xf3, 0xee, 0xe3, 0xfc, 0xef, 0xf9, 0xd8, 0xef, 0xe6, 0x89,
-    0xbc, 0xb1, 0x7c, 0xe4, 0xc0, 0x58, 0xbd, 0x81, 0x46, 0x76, 0x8b, 0x7e,
-    0x42, 0x5a, 0xfe, 0xe6, 0xdf, 0xc0, 0x32, 0xc5, 0xff, 0xff, 0x43, 0x91,
-    0x9b, 0xfd, 0xa2, 0xdf, 0xf9, 0xae, 0xb3, 0xf1, 0x1f, 0x8b, 0x17, 0xd3,
-    0xf1, 0x79, 0x62, 0xfe, 0xdd, 0xbf, 0x16, 0x79, 0x62, 0xf0, 0x27, 0x75,
-    0x8b, 0x66, 0x1e, 0x77, 0x8c, 0x2f, 0xfe, 0xf3, 0x82, 0x60, 0x3f, 0xc9,
-    0x6e, 0xb1, 0x7d, 0xc8, 0xa6, 0x3d, 0x62, 0xa4, 0xfb, 0x31, 0x16, 0xfb,
-    0xb8, 0x31, 0x2c, 0x5e, 0x3b, 0xf1, 0x62, 0xd2, 0x73, 0xc0, 0x01, 0x1d,
-    0xfd, 0x13, 0xfd, 0xf5, 0x12, 0xc5, 0xff, 0x6b, 0x61, 0x03, 0x08, 0x33,
-    0xac, 0x5b, 0xa2, 0xc5, 0x4a, 0x20, 0x1c, 0xc0, 0xe7, 0x97, 0xce, 0x40,
-    0x75, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x87, 0xa5, 0x40, 0xf4, 0xb4, 0x43,
-    0x7f, 0xfa, 0x3c, 0xa5, 0x86, 0xfc, 0x3c, 0x8c, 0x0b, 0x17, 0xdc, 0x6e,
-    0xfa, 0x2c, 0x5a, 0x32, 0x09, 0x8a, 0x64, 0x20, 0x18, 0x8b, 0xc9, 0x97,
-    0xff, 0xfe, 0x8c, 0xda, 0x62, 0x72, 0x7d, 0xdb, 0xec, 0x11, 0x83, 0x20,
-    0x0d, 0x62, 0xa0, 0x8b, 0xdd, 0xd2, 0xaf, 0xde, 0xe0, 0xb5, 0x05, 0x8b,
-    0xfe, 0xdd, 0xb4, 0xdf, 0x8b, 0x3c, 0xb1, 0x7f, 0xf8, 0x59, 0xfc, 0x20,
-    0x61, 0x7b, 0xf8, 0xb1, 0x7a, 0x75, 0x12, 0xc5, 0xa3, 0x1d, 0x14, 0x24,
-    0x77, 0xc4, 0x8a, 0xc4, 0xc0, 0x9a, 0x19, 0x77, 0xfe, 0xe6, 0x68, 0xb3,
-    0xa3, 0x90, 0xd6, 0x2f, 0xbc, 0xfd, 0x84, 0xb1, 0x7f, 0xe8, 0x4e, 0xb6,
-    0xd6, 0x9f, 0xdc, 0x58, 0xba, 0x7b, 0xc3, 0xe6, 0x88, 0x96, 0xf8, 0x65,
-    0x9b, 0x2c, 0x5f, 0xff, 0xe3, 0xc6, 0x30, 0x4d, 0xb3, 0x84, 0xc1, 0xb9,
-    0x7a, 0x78, 0xb1, 0x52, 0xc8, 0x3c, 0xda, 0x1a, 0xa3, 0x3e, 0xec, 0xbd,
-    0xdd, 0xa2, 0x71, 0xd4, 0x24, 0xbe, 0xc0, 0xd2, 0x9e, 0x0a, 0x32, 0x6e,
-    0x13, 0xfa, 0x14, 0xa2, 0x2e, 0x0c, 0x8e, 0xff, 0x67, 0x39, 0x20, 0x0f,
-    0x65, 0x8b, 0xf4, 0x93, 0xcf, 0x16, 0x2f, 0xcc, 0x67, 0xb3, 0x75, 0x8b,
-    0xff, 0xfc, 0x39, 0x6d, 0x7c, 0x26, 0x1f, 0xbf, 0x84, 0x4d, 0xe5, 0x8b,
-    0x46, 0x0d, 0x1c, 0xce, 0x6d, 0xf2, 0x6e, 0x15, 0x54, 0x62, 0xa0, 0xad,
-    0xa3, 0xc5, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e,
-    0xcb, 0x16, 0xc8, 0x8f, 0x6f, 0x86, 0x17, 0x39, 0xd6, 0x2f, 0xf8, 0x4c,
-    0x38, 0xe7, 0xe6, 0x6c, 0xb1, 0x5f, 0x3d, 0x4e, 0xa1, 0x7b, 0xff, 0x7d,
-    0xf5, 0x00, 0xe1, 0x9f, 0x65, 0x8b, 0xdc, 0x10, 0x16, 0x2f, 0x79, 0xb7,
-    0x58, 0xb8, 0x12, 0xb1, 0x7f, 0xc5, 0x26, 0x00, 0xe1, 0xe9, 0x96, 0x29,
-    0xcf, 0x4b, 0xc2, 0xf7, 0xf8, 0x85, 0xb9, 0xe7, 0x5b, 0xac, 0x5f, 0xfb,
-    0xcf, 0x07, 0xf8, 0x8e, 0x77, 0x58, 0xbe, 0x26, 0x0a, 0x30, 0x6a, 0x81,
-    0x71, 0xf3, 0x72, 0x5e, 0xd0, 0x18, 0x7b, 0x8e, 0x02, 0x21, 0x0c, 0xda,
-    0x96, 0x2f, 0xf3, 0x7e, 0x7d, 0x2e, 0x05, 0x8a, 0x8f, 0x37, 0xc2, 0x0c,
-    0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x26, 0x19, 0x7f, 0xa0, 0x53, 0x9c, 0xc2,
-    0x58, 0xbb, 0x9c, 0x58, 0xbd, 0xec, 0x3a, 0xc5, 0x8e, 0xb1, 0x58, 0x6b,
-    0xfc, 0x3b, 0x68, 0xc9, 0x47, 0x9e, 0x12, 0x76, 0x6f, 0xa3, 0x12, 0x47,
-    0xbe, 0x8c, 0x01, 0x62, 0xc5, 0xe6, 0xff, 0x16, 0x2e, 0xef, 0xcb, 0x17,
-    0xf0, 0xb6, 0x72, 0x11, 0xd6, 0x2a, 0x4f, 0x20, 0x86, 0x6f, 0xa6, 0x3e,
-    0x62, 0x58, 0xbd, 0x25, 0xb2, 0xc5, 0xa5, 0x62, 0xfa, 0x41, 0x03, 0xac,
-    0x57, 0xcd, 0xa1, 0x08, 0xd0, 0xd3, 0x1c, 0x76, 0x58, 0x88, 0x3e, 0x4d,
-    0xe5, 0x1b, 0xda, 0xc3, 0x56, 0x2f, 0x9c, 0x22, 0xc5, 0x8b, 0xff, 0xc3,
-    0x73, 0xf7, 0x0e, 0x77, 0x0c, 0xd6, 0xcb, 0x17, 0xd3, 0x3c, 0x8c, 0x1a,
-    0x23, 0xfe, 0x3d, 0xe2, 0x2a, 0x8c, 0x4c, 0x8c, 0xa1, 0xb5, 0x5b, 0x2a,
-    0x8f, 0xd4, 0xa6, 0x4b, 0xff, 0xfc, 0x6c, 0x67, 0x3d, 0xde, 0xee, 0x5a,
-    0x9f, 0x3e, 0xee, 0x35, 0x8a, 0x94, 0x4a, 0x88, 0xb6, 0xff, 0x46, 0x66,
-    0xb7, 0x66, 0xdd, 0x52, 0x73, 0x97, 0xfd, 0xcc, 0x20, 0x1f, 0x05, 0xc5,
-    0x8b, 0xbf, 0xd1, 0x62, 0xd2, 0xb1, 0x78, 0x39, 0x09, 0x62, 0xff, 0xb3,
-    0xb0, 0x83, 0x2c, 0xe9, 0x8b, 0x17, 0xf0, 0x9b, 0xbf, 0x7d, 0xd6, 0x2b,
-    0x64, 0x4e, 0x7c, 0x44, 0x87, 0xf8, 0x7b, 0x7a, 0x02, 0x1a, 0xc5, 0xff,
-    0x41, 0xf5, 0x0f, 0x1b, 0x9a, 0x58, 0xbb, 0x6e, 0x2c, 0x5f, 0x0b, 0xab,
-    0x09, 0x62, 0xf3, 0xc8, 0x16, 0x2f, 0xfb, 0x3b, 0x3b, 0x0f, 0xf2, 0x4b,
-    0x15, 0xf3, 0xd5, 0x21, 0xcb, 0x98, 0xeb, 0x17, 0xcf, 0xad, 0x32, 0xc5,
-    0xff, 0xd8, 0x40, 0x8e, 0xcf, 0x7d, 0xc8, 0x0b, 0x17, 0xdc, 0x92, 0x35,
-    0x62, 0xb1, 0x11, 0x7c, 0x22, 0x0d, 0x1a, 0xff, 0xb3, 0xdf, 0x68, 0x7a,
-    0x60, 0xb1, 0x7a, 0x4b, 0xcb, 0x15, 0xf3, 0xd5, 0x11, 0xcd, 0x80, 0xb1,
-    0x76, 0x1d, 0x62, 0xa4, 0xd4, 0xb0, 0x95, 0xff, 0xfb, 0x4e, 0x79, 0x37,
-    0xed, 0xc0, 0x1d, 0xbb, 0xf2, 0xc5, 0xe2, 0x9e, 0xd6, 0x2f, 0x9b, 0x50,
-    0x8c, 0x95, 0xc3, 0xf1, 0x9c, 0xe4, 0x2d, 0xbb, 0x3d, 0x88, 0x78, 0xe7,
-    0x7f, 0x19, 0x67, 0xa2, 0x21, 0xe4, 0x28, 0xbd, 0x08, 0x50, 0x92, 0xc3,
-    0x1f, 0xea, 0x58, 0xbf, 0xff, 0xff, 0xfa, 0x7a, 0xee, 0x1b, 0x6f, 0xf3,
-    0x0c, 0xfc, 0x74, 0x66, 0xc2, 0x36, 0x35, 0xcf, 0x5b, 0xde, 0xdb, 0x6e,
-    0x73, 0x0c, 0xfc, 0x72, 0xc5, 0x4b, 0x7b, 0x5d, 0xb4, 0x21, 0x61, 0x0b,
-    0x7c, 0x96, 0xbd, 0xbb, 0x9b, 0xd2, 0x9f, 0x75, 0x2a, 0x3c, 0xf1, 0xdf,
-    0xfe, 0x5b, 0xaf, 0x88, 0x85, 0x39, 0x09, 0xd5, 0x0e, 0xeb, 0xfe, 0xe1,
-    0xf0, 0xc8, 0x60, 0xe5, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x83, 0xc5,
-    0xf7, 0x22, 0x3f, 0x6b, 0x17, 0xff, 0xbe, 0xf2, 0x76, 0x18, 0x7d, 0x52,
-    0x50, 0x58, 0xbf, 0xff, 0xfd, 0xfc, 0x3f, 0xcb, 0x3a, 0x36, 0xf1, 0x9c,
-    0xe4, 0x83, 0xc5, 0x27, 0xe2, 0xc5, 0xa3, 0x25, 0x36, 0x1c, 0x3a, 0xeb,
-    0xcd, 0xf8, 0x4d, 0xe4, 0xdb, 0xba, 0xee, 0x35, 0x2c, 0x5f, 0xfd, 0xe9,
-    0x39, 0x4b, 0x11, 0x4c, 0x16, 0x2b, 0xae, 0x1f, 0x33, 0x12, 0xdd, 0xd6,
-    0xc6, 0xb5, 0x8b, 0xfd, 0xd6, 0xff, 0x00, 0x79, 0xd2, 0xc5, 0xf8, 0x72,
-    0x79, 0x3a, 0xc5, 0xc2, 0x82, 0xc5, 0xa2, 0x58, 0xaf, 0x9a, 0xb6, 0x18,
-    0xbf, 0xe9, 0xfc, 0xed, 0xa9, 0xc1, 0xac, 0x5f, 0xfe, 0xe6, 0x14, 0xc3,
-    0xf9, 0xf7, 0xc2, 0x58, 0xbf, 0xf6, 0x9f, 0x92, 0x36, 0x27, 0x3a, 0xc5,
-    0x62, 0x66, 0x1d, 0xa9, 0xfc, 0x83, 0x87, 0x3d, 0x11, 0xef, 0x7b, 0x70,
-    0x2c, 0x5f, 0xd2, 0xfe, 0x29, 0x3a, 0xc5, 0xe0, 0xf9, 0x2b, 0x15, 0xa3,
-    0xca, 0xf9, 0x65, 0xe6, 0xec, 0x0b, 0x17, 0xf4, 0xeb, 0x52, 0x64, 0xac,
-    0x5f, 0xdc, 0x30, 0x64, 0xdf, 0x58, 0xa6, 0x3f, 0xb2, 0x1e, 0x11, 0x75,
-    0xff, 0xfd, 0x83, 0x7e, 0x61, 0x73, 0x7f, 0xb9, 0x16, 0x76, 0xb1, 0x7f,
-    0xff, 0x98, 0xd8, 0xb9, 0x3e, 0x30, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8a,
-    0xfa, 0x2f, 0xc9, 0x6a, 0xff, 0xf8, 0x5e, 0x7f, 0x7a, 0x4c, 0xfe, 0x61,
-    0x6e, 0xb1, 0x7e, 0x7d, 0x37, 0xa3, 0x5a, 0xc5, 0xfc, 0x0c, 0x84, 0x83,
-    0x8b, 0x17, 0xff, 0xff, 0xb3, 0x5a, 0x9e, 0xe0, 0x1f, 0x9c, 0x85, 0x0c,
-    0xe1, 0x66, 0xc1, 0xc1, 0x62, 0xa5, 0x15, 0x3f, 0x2e, 0xbf, 0xff, 0x16,
-    0x71, 0xdb, 0x6c, 0x19, 0xde, 0x3a, 0x4e, 0xb1, 0x7d, 0xbb, 0x36, 0xea,
-    0x90, 0x98, 0xbf, 0x63, 0xfb, 0x42, 0x58, 0xbf, 0xfe, 0x7d, 0x7d, 0xb8,
-    0x59, 0xef, 0xb9, 0x01, 0x62, 0xfa, 0x3f, 0xf2, 0x6a, 0xc5, 0xff, 0xfe,
-    0xd1, 0x66, 0xd8, 0x3c, 0x08, 0x5a, 0xcd, 0xff, 0x3d, 0x16, 0x2e, 0xcd,
-    0x96, 0x29, 0x62, 0xf8, 0x47, 0xc1, 0xac, 0x74, 0x26, 0x54, 0xa2, 0xf3,
-    0xb6, 0x5e, 0xa2, 0x4b, 0xff, 0xfe, 0x6f, 0x4f, 0x42, 0xce, 0x6c, 0xd9,
-    0xce, 0x31, 0xb3, 0xa5, 0x8b, 0xf7, 0xb9, 0xb6, 0x04, 0xb1, 0x7f, 0xde,
-    0x11, 0xa6, 0x7f, 0x00, 0xcb, 0x15, 0x89, 0x81, 0x39, 0x9b, 0x34, 0x08,
-    0xae, 0xff, 0xee, 0xf0, 0x6f, 0xcd, 0x4f, 0xe6, 0x0b, 0x16, 0x12, 0xc3,
-    0x1e, 0x2d, 0xfe, 0xf0, 0x9b, 0xbf, 0xcf, 0x45, 0x8b, 0xf6, 0x6d, 0x8f,
-    0xc5, 0x8a, 0x82, 0xea, 0x80, 0xc8, 0x8d, 0x51, 0xde, 0x1a, 0xee, 0x45,
-    0xa5, 0x73, 0x98, 0xfc, 0xa1, 0x93, 0x8a, 0x3e, 0x5e, 0x42, 0x03, 0xc4,
-    0x5d, 0x0d, 0xef, 0xf9, 0x98, 0x81, 0xa7, 0x93, 0x56, 0x2f, 0xfd, 0x09,
-    0x68, 0x19, 0x87, 0x6e, 0xd6, 0x2f, 0xec, 0xe8, 0xd0, 0x88, 0xd5, 0x8b,
-    0xff, 0xa7, 0x34, 0x59, 0xef, 0xb9, 0x01, 0x62, 0xef, 0xbf, 0x68, 0xb4,
-    0x24, 0x0e, 0x19, 0x5e, 0x27, 0xea, 0x58, 0xbf, 0xff, 0xff, 0xfd, 0x9c,
-    0x68, 0xf3, 0x3d, 0xf7, 0x9e, 0x19, 0x9a, 0xd6, 0x7c, 0xb3, 0xd2, 0x73,
-    0x33, 0x4d, 0x0c, 0x58, 0xa6, 0x46, 0x38, 0x07, 0xee, 0x16, 0xcb, 0x16,
-    0xc5, 0x8b, 0x9f, 0xaf, 0x58, 0xa2, 0x3c, 0x6e, 0x83, 0x21, 0x08, 0xdf,
-    0xfe, 0xf8, 0x65, 0x3d, 0xff, 0x06, 0x26, 0xdd, 0x62, 0xfe, 0x38, 0x64,
-    0x59, 0xb2, 0xc5, 0xf8, 0x2d, 0x67, 0xf8, 0xb1, 0x52, 0x7b, 0x38, 0x5f,
-    0x50, 0x46, 0x31, 0x42, 0x9a, 0xfe, 0xf1, 0x4e, 0xee, 0x4b, 0x17, 0xe2,
-    0x9d, 0xdc, 0x96, 0x2f, 0xbb, 0x83, 0x9c, 0xc3, 0xd4, 0xf1, 0x6d, 0xe3,
-    0xbf, 0x16, 0x2a, 0x4f, 0x60, 0x07, 0x77, 0xe0, 0x70, 0xcc, 0x1a, 0xc5,
-    0xfe, 0x70, 0xb0, 0xb3, 0xbf, 0x2c, 0x5c, 0xdb, 0x2c, 0x56, 0x22, 0x5d,
-    0xc8, 0x74, 0x54, 0xc6, 0x97, 0x67, 0x52, 0xc5, 0xed, 0xdc, 0x6b, 0x17,
-    0x10, 0xf0, 0xdc, 0x38, 0xd5, 0xee, 0x60, 0xd6, 0x29, 0x8f, 0x1f, 0xc5,
-    0x57, 0xe7, 0x30, 0xfb, 0xc4, 0xb1, 0x4c, 0x79, 0xa4, 0x43, 0x7f, 0xe3,
-    0xfc, 0x5b, 0x99, 0x9f, 0x6d, 0x2c, 0x5f, 0xfd, 0xee, 0x72, 0x5f, 0xbf,
-    0x7a, 0x4e, 0xb1, 0x7f, 0xd3, 0xf9, 0xe8, 0x79, 0x2d, 0x96, 0x2f, 0xff,
-    0xec, 0x07, 0x0b, 0x22, 0x60, 0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xff, 0x85,
-    0xee, 0x10, 0x85, 0xe8, 0x49, 0xab, 0x17, 0xb8, 0xc4, 0xb1, 0x7f, 0xfe,
-    0x9d, 0x03, 0xf3, 0xd2, 0x29, 0x93, 0xf3, 0x06, 0xb1, 0x7f, 0xdf, 0xfc,
-    0xf4, 0x86, 0x6a, 0x56, 0x2f, 0xf4, 0xcc, 0x59, 0xd1, 0xf4, 0xb1, 0x5f,
-    0x46, 0x43, 0x2c, 0x11, 0xdd, 0xff, 0xc2, 0x6d, 0x8b, 0x0e, 0x77, 0xd7,
-    0x16, 0x2b, 0x15, 0x3c, 0xc4, 0x8d, 0xa3, 0xb2, 0x5a, 0xe2, 0x3f, 0xa1,
-    0xc8, 0x11, 0x75, 0xfe, 0x26, 0x01, 0x34, 0x09, 0x62, 0xfd, 0xec, 0x04,
-    0xe9, 0x62, 0xe7, 0xf4, 0x9e, 0xcb, 0x98, 0xdf, 0x6d, 0xf1, 0x6c, 0xb1,
-    0x7f, 0x82, 0xce, 0x06, 0x77, 0xf2, 0xc5, 0x4a, 0xe0, 0x36, 0x4a, 0xbb,
-    0x68, 0x62, 0x08, 0xac, 0x32, 0x6b, 0xdd, 0x8f, 0xa2, 0xc5, 0xf6, 0xc7,
-    0x9d, 0x2c, 0x5f, 0x6e, 0x22, 0x35, 0x62, 0xfd, 0xfc, 0x26, 0x35, 0x62,
-    0xe6, 0x65, 0x8a, 0x82, 0x2a, 0x18, 0x84, 0x89, 0x3c, 0x4a, 0x19, 0x45,
-    0xf6, 0x86, 0xfa, 0x58, 0xbf, 0x47, 0xb9, 0x7b, 0x8b, 0x17, 0x9b, 0xbe,
-    0x18, 0x79, 0xd1, 0x11, 0xdf, 0xfe, 0xd4, 0xc5, 0xcd, 0xfe, 0xfe, 0xf3,
-    0xf5, 0x2c, 0x5c, 0x3f, 0xac, 0x61, 0xe8, 0x5f, 0xfe, 0xf4, 0x33, 0x5a,
-    0x68, 0x61, 0xe7, 0x75, 0x8b, 0xff, 0xfe, 0x2c, 0xf7, 0xdc, 0xcc, 0xf4,
-    0x33, 0xcf, 0xdc, 0x0a, 0x56, 0x2f, 0xfd, 0x01, 0x0f, 0x1d, 0xba, 0x4e,
-    0x96, 0x2f, 0xfd, 0x3d, 0x3b, 0xe4, 0x84, 0x53, 0x05, 0x8b, 0x63, 0xa3,
-    0xa1, 0x99, 0x80, 0x81, 0x58, 0x9c, 0x73, 0x14, 0x0a, 0x33, 0x3b, 0xfa,
-    0x7e, 0xc3, 0x81, 0xd6, 0x2f, 0xf4, 0xc3, 0xc6, 0xbe, 0xf8, 0xb1, 0x5a,
-    0x3e, 0x32, 0x2e, 0xbf, 0xef, 0x0b, 0xf2, 0x3f, 0xb8, 0x16, 0x2f, 0xfa,
-    0x61, 0x8e, 0x59, 0x26, 0xac, 0x5f, 0xff, 0xbf, 0x3a, 0x07, 0x30, 0x7e,
-    0x13, 0x6f, 0x9a, 0x58, 0xa8, 0xf4, 0x64, 0x44, 0x75, 0xe3, 0x7b, 0xbc,
-    0x75, 0x8b, 0xd1, 0xcd, 0xa5, 0x8b, 0xfe, 0xd4, 0xf8, 0x7f, 0x13, 0x71,
-    0x62, 0xff, 0xb3, 0x9c, 0x11, 0x6c, 0x6c, 0x4b, 0x17, 0xec, 0x39, 0xe4,
-    0x6b, 0x17, 0xfe, 0x0f, 0x6e, 0x4b, 0xf7, 0xe9, 0x3a, 0xc5, 0xff, 0xdc,
-    0x66, 0xdf, 0x37, 0x92, 0x9d, 0xd6, 0x2a, 0x24, 0x57, 0xfc, 0xa3, 0x88,
-    0x57, 0xff, 0xf7, 0x26, 0x10, 0x63, 0x0b, 0x1f, 0xbf, 0x0a, 0x76, 0x58,
-    0xbf, 0xfb, 0x99, 0x0f, 0xc9, 0x0b, 0x9c, 0x95, 0x8a, 0x74, 0x50, 0x9d,
-    0x76, 0xb1, 0x1e, 0x8d, 0x0d, 0x2b, 0xd3, 0xae, 0x2c, 0x5f, 0xff, 0xff,
-    0xa0, 0x3c, 0xe0, 0x8c, 0x00, 0x98, 0xb7, 0xce, 0x8f, 0xe6, 0x3b, 0x78,
-    0x52, 0xb1, 0x7f, 0xa1, 0x3f, 0xcc, 0xf7, 0x16, 0x2f, 0xfe, 0xc7, 0x01,
-    0x63, 0xf4, 0x7d, 0x32, 0xc5, 0xff, 0x8b, 0x39, 0xbf, 0xdf, 0xa9, 0xf8,
-    0xb1, 0x51, 0x22, 0xe3, 0xc6, 0x7d, 0x10, 0xef, 0x98, 0x3c, 0xd9, 0x62,
-    0xa5, 0x39, 0x5c, 0x8c, 0xf8, 0x46, 0x77, 0xf6, 0xc1, 0xe9, 0xe4, 0x6b,
-    0x17, 0xff, 0xd9, 0xd3, 0x07, 0xf1, 0x37, 0x03, 0x9d, 0x01, 0x62, 0x9d,
-    0x10, 0x7f, 0x30, 0xbf, 0xe9, 0x80, 0x79, 0xae, 0x60, 0x4b, 0x17, 0xfa,
-    0x12, 0x6b, 0xfd, 0xb6, 0x58, 0xbf, 0xe0, 0x0c, 0xa6, 0x1f, 0xe0, 0x16,
-    0x2e, 0x63, 0x56, 0x2b, 0x64, 0x61, 0x39, 0xde, 0x8d, 0x48, 0xea, 0xff,
-    0xb3, 0xfe, 0x86, 0x13, 0x8d, 0x62, 0xff, 0xb7, 0x33, 0xd9, 0xad, 0x30,
-    0x16, 0x2e, 0x10, 0xd6, 0x2b, 0xb3, 0xd4, 0x23, 0xca, 0x1a, 0xfe, 0x6e,
-    0x43, 0xa7, 0xb3, 0x47, 0x18, 0x88, 0x83, 0x47, 0x5f, 0x8f, 0x80, 0x04,
-    0xc5, 0x1d, 0x97, 0xa1, 0x70, 0x28, 0x72, 0x04, 0x78, 0x1c, 0x23, 0x2f,
-    0xfb, 0x0b, 0xdc, 0xfc, 0xb6, 0x96, 0x2f, 0xf4, 0x94, 0x0b, 0x30, 0x0b,
-    0x17, 0xfa, 0x0f, 0xad, 0x33, 0x01, 0x62, 0xfc, 0x4c, 0xe4, 0x05, 0x8b,
-    0xf0, 0x42, 0x9d, 0x6c, 0xb1, 0x46, 0x1e, 0x88, 0x44, 0xd7, 0xff, 0x3b,
-    0x03, 0x52, 0x5e, 0xfe, 0x41, 0x62, 0xff, 0x6b, 0x27, 0xb8, 0x39, 0xd6,
-    0x2f, 0xec, 0x9e, 0xe0, 0xe7, 0x58, 0xbd, 0xbb, 0x91, 0x87, 0xc5, 0xa3,
-    0x4b, 0xfe, 0x8f, 0xe1, 0xf3, 0x5a, 0x70, 0x96, 0x2a, 0x4f, 0xc9, 0x8d,
-    0x2f, 0x99, 0xf5, 0x8b, 0x17, 0xfb, 0xee, 0x7f, 0x71, 0xf4, 0xb1, 0x58,
-    0xaa, 0x74, 0xd3, 0x8e, 0xcc, 0x5e, 0x10, 0x9f, 0x24, 0x28, 0xc5, 0xfc,
-    0x40, 0x22, 0x1b, 0x9c, 0xeb, 0x17, 0xe0, 0xf0, 0xa4, 0x6b, 0x17, 0xd0,
-    0xf8, 0x7c, 0x58, 0xbe, 0xcd, 0x83, 0x82, 0xc5, 0xcc, 0x1a, 0xa4, 0x17,
-    0x2b, 0xb3, 0xef, 0x22, 0x51, 0x12, 0xd4, 0x48, 0xdd, 0x61, 0x7f, 0x42,
-    0x5e, 0xfd, 0xfc, 0xd8, 0x44, 0xb1, 0x7c, 0xda, 0x9e, 0x8b, 0x14, 0x33,
-    0xcd, 0x01, 0x4d, 0xfc, 0x39, 0x71, 0xe1, 0xd6, 0x2f, 0xef, 0xb1, 0x7b,
-    0x3e, 0xb1, 0x7d, 0x0c, 0x62, 0x58, 0xbf, 0xdb, 0x64, 0x08, 0x4d, 0xc5,
-    0x8b, 0xde, 0xfb, 0xac, 0x56, 0x23, 0x31, 0xcb, 0x62, 0x2d, 0x62, 0x11,
-    0x1a, 0x5e, 0x93, 0xc1, 0x62, 0xff, 0xf9, 0xcf, 0x26, 0x99, 0xc1, 0x16,
-    0x0c, 0x5b, 0x2c, 0x5e, 0x21, 0x1a, 0xb1, 0x7d, 0xf0, 0x9b, 0x65, 0x8a,
-    0xed, 0x16, 0x7a, 0x1d, 0x25, 0x3f, 0x0f, 0x5f, 0xed, 0x98, 0x3f, 0xff,
-    0x34, 0xb1, 0x79, 0xe6, 0x25, 0x8a, 0xc3, 0xd3, 0xf9, 0xb5, 0xa3, 0x23,
-    0x77, 0x4f, 0xc7, 0xd6, 0x93, 0xc6, 0xc4, 0x73, 0x1b, 0x4e, 0xc9, 0xb0,
-    0x69, 0x1c, 0x27, 0x72, 0x78, 0xf0, 0xd8, 0x63, 0x6f, 0x0e, 0xce, 0xe3,
-    0x02, 0x76, 0x88, 0xa1, 0xef, 0xa8, 0xda, 0x8f, 0x18, 0x37, 0xe7, 0x09,
-    0x9a, 0x1f, 0xe0, 0x84, 0xb9, 0x4a, 0x14, 0xe5, 0x21, 0x97, 0xd2, 0xdc,
-    0xc5, 0x1a, 0xd7, 0x48, 0x41, 0x47, 0x43, 0xb8, 0x38, 0x7d, 0xf5, 0x42,
-    0x42, 0xff, 0xdf, 0x7e, 0xfc, 0x19, 0x67, 0x4c, 0x58, 0xbf, 0xec, 0x88,
-    0xa4, 0xfe, 0x1f, 0xd6, 0x2e, 0x04, 0x66, 0xe7, 0xf9, 0xe4, 0x2b, 0xf6,
-    0x6b, 0x8f, 0x2b, 0x17, 0xba, 0xeb, 0xd7, 0x23, 0x65, 0x8b, 0xff, 0x68,
-    0x5b, 0x67, 0xe2, 0x29, 0x1a, 0xc5, 0xfb, 0x38, 0x13, 0x69, 0x62, 0xff,
-    0x6f, 0x3f, 0x93, 0xfc, 0x4b, 0x17, 0xa7, 0x0d, 0x58, 0xac, 0x3d, 0x22,
-    0x35, 0xbe, 0x68, 0x7f, 0x16, 0x2f, 0xef, 0xe6, 0x7b, 0xf8, 0xb1, 0x43,
-    0x3c, 0xff, 0x11, 0x5f, 0x37, 0x63, 0xed, 0x62, 0xfd, 0xcf, 0xcf, 0x7c,
-    0x58, 0xb7, 0xe4, 0xf3, 0xdc, 0x96, 0xf6, 0xc1, 0xc1, 0x62, 0xed, 0x76,
-    0xb1, 0x5b, 0x1b, 0x93, 0x48, 0x2f, 0x07, 0x3d, 0xac, 0x5e, 0x38, 0x8e,
-    0xb1, 0x52, 0x6f, 0x70, 0x7e, 0xf9, 0xfa, 0x0b, 0xa9, 0x62, 0xfe, 0x92,
-    0xc1, 0x8e, 0x56, 0x2b, 0x0f, 0x53, 0x45, 0x17, 0xfe, 0x62, 0x35, 0xbd,
-    0x3e, 0x60, 0x2c, 0x5e, 0x0e, 0x49, 0x62, 0xd0, 0x58, 0xa1, 0x9a, 0xf3,
-    0x47, 0x6f, 0x0b, 0x50, 0x58, 0xbf, 0xff, 0x78, 0x5a, 0x6e, 0x61, 0x7f,
-    0x30, 0xa1, 0xc5, 0x8a, 0xd8, 0xfc, 0x9c, 0x7a, 0xa5, 0x16, 0xcd, 0x09,
-    0x4b, 0xb0, 0x6b, 0x17, 0x3c, 0x4b, 0x14, 0x03, 0x5e, 0x18, 0xbd, 0x2c,
-    0x5f, 0x9b, 0x3d, 0x87, 0x58, 0xb8, 0x13, 0x26, 0xcc, 0x83, 0x2f, 0xff,
-    0xdd, 0x0b, 0x39, 0x87, 0x92, 0x37, 0xef, 0x27, 0x58, 0xbf, 0xda, 0x04,
-    0x73, 0x69, 0xbb, 0x58, 0xac, 0x44, 0x73, 0x2b, 0x5f, 0x38, 0xba, 0xfe,
-    0x2c, 0x5f, 0x68, 0x06, 0x4a, 0xc5, 0x0c, 0xf3, 0x04, 0x51, 0x77, 0xd9,
-    0x62, 0xff, 0xfb, 0x6d, 0xa4, 0xb3, 0xcf, 0xd8, 0x59, 0xdf, 0x96, 0x2e,
-    0x73, 0x56, 0x2c, 0x25, 0x8a, 0xc4, 0x4a, 0xb8, 0xbc, 0x4a, 0x9c, 0x18,
-    0xbe, 0xe7, 0xe4, 0x0b, 0x17, 0xfb, 0x40, 0x3b, 0x40, 0xcf, 0x2c, 0x5a,
-    0x3d, 0x62, 0xb0, 0xf2, 0xcd, 0x36, 0xbf, 0x68, 0x1e, 0x7d, 0x96, 0x2f,
-    0xbd, 0x25, 0xd1, 0x62, 0xff, 0xf8, 0x50, 0x2c, 0x3f, 0xa1, 0x91, 0xec,
-    0x40, 0x58, 0xbd, 0x39, 0xda, 0xc5, 0x2c, 0x51, 0x1a, 0x9f, 0x0e, 0xdf,
-    0xfd, 0x3a, 0x9d, 0xe5, 0xc0, 0xde, 0x12, 0xc5, 0x4a, 0x65, 0xbf, 0x2a,
-    0x22, 0x4f, 0x3d, 0xc7, 0x10, 0x5f, 0xee, 0xf5, 0x86, 0xb6, 0x7d, 0x62,
-    0xee, 0x46, 0x46, 0x8c, 0x96, 0xa8, 0xd6, 0x4f, 0x26, 0x30, 0x41, 0x1b,
-    0xde, 0x37, 0xee, 0xe3, 0xda, 0xfb, 0xb0, 0x69, 0xcc, 0xe4, 0x3f, 0x8c,
-    0x8d, 0x95, 0x40, 0xaa, 0x50, 0xb8, 0xe3, 0x6f, 0xa1, 0x6e, 0x23, 0xc8,
-    0xe6, 0xe0, 0xe3, 0x4f, 0xea, 0x4c, 0xad, 0x32, 0xbb, 0x81, 0x49, 0x9c,
-    0xb4, 0x7a, 0xc5, 0xfe, 0x60, 0x77, 0xe2, 0x6f, 0xac, 0x5f, 0xcf, 0xd8,
-    0x35, 0x83, 0x58, 0xa7, 0x3f, 0x8d, 0x0a, 0xfc, 0xd2, 0xf3, 0xb4, 0x16,
-    0x2e, 0x1c, 0x66, 0x1e, 0x57, 0xcb, 0xaf, 0xee, 0xe0, 0xdb, 0x07, 0xba,
-    0xc5, 0xff, 0xff, 0xf6, 0x39, 0x37, 0xa4, 0x9b, 0x69, 0xd1, 0x98, 0x42,
-    0xf1, 0x60, 0x25, 0x62, 0xf9, 0xe1, 0xc8, 0xcc, 0x45, 0x67, 0x0c, 0xea,
-    0x53, 0x18, 0xc8, 0x6e, 0x54, 0xaa, 0x31, 0xfc, 0xa0, 0xab, 0xfb, 0x59,
-    0xe7, 0xf8, 0x96, 0x2f, 0xff, 0xff, 0xf8, 0xc2, 0xcf, 0x4e, 0x77, 0xe3,
-    0x32, 0x1f, 0xc7, 0x87, 0x0c, 0x0c, 0xb3, 0xdc, 0x0c, 0xeb, 0x16, 0x8d,
-    0xfa, 0xd4, 0x63, 0xc6, 0x85, 0xd7, 0xdc, 0x7d, 0xba, 0xd5, 0x8b, 0xfd,
-    0x1a, 0xba, 0xc8, 0xec, 0xf3, 0x12, 0xc5, 0xfd, 0x1a, 0x6d, 0x81, 0x06,
-    0x75, 0x8b, 0xb3, 0xa9, 0x62, 0xfc, 0x22, 0x27, 0x82, 0xc5, 0x46, 0xe9,
-    0x8d, 0x75, 0x87, 0x11, 0xb1, 0x4f, 0x5c, 0x41, 0x23, 0x7e, 0x0d, 0x5f,
-    0xfa, 0x37, 0xeb, 0x5f, 0x69, 0x33, 0x7e, 0x62, 0xc5, 0xfd, 0xd6, 0xf2,
-    0x62, 0x16, 0x96, 0x2c, 0x4b, 0x15, 0xd7, 0x67, 0x8d, 0x1a, 0x8d, 0x6d,
-    0x1e, 0xb1, 0x76, 0x69, 0x62, 0xfb, 0xac, 0xfb, 0x75, 0x8b, 0x15, 0xf3,
-    0xc4, 0x61, 0x7b, 0x81, 0x12, 0xc5, 0x46, 0xe9, 0xaa, 0x75, 0x90, 0x92,
-    0x19, 0x7f, 0xd6, 0x63, 0x88, 0x6f, 0xfd, 0x90, 0x26, 0x36, 0x2e, 0x4f,
-    0x96, 0x2f, 0xbc, 0xfa, 0xc5, 0x8a, 0xeb, 0xb3, 0xe2, 0xc4, 0x0b, 0xfe,
-    0xcf, 0x07, 0xb3, 0x69, 0xe2, 0x58, 0xbf, 0xa1, 0x1a, 0xb6, 0xeb, 0x63,
-    0x5f, 0x5c, 0x58, 0xbc, 0x59, 0xf5, 0x8b, 0xf9, 0xcf, 0x93, 0xa3, 0x56,
-    0x28, 0x67, 0x95, 0xb8, 0xe5, 0xee, 0xba, 0xf5, 0xdc, 0x68, 0xb1, 0x68,
-    0xe5, 0x8b, 0xfd, 0x9c, 0xe6, 0x39, 0x6e, 0xb1, 0x5d, 0x62, 0x72, 0x7d,
-    0x69, 0x44, 0x68, 0x79, 0x1b, 0x42, 0x4a, 0x35, 0x91, 0x80, 0xc8, 0x85,
-    0x6f, 0x69, 0xb8, 0xb1, 0x7f, 0x46, 0xe1, 0xff, 0xf9, 0xb2, 0xc5, 0xd1,
-    0xdd, 0xac, 0x5f, 0xf6, 0x74, 0x2c, 0xe1, 0x9e, 0x09, 0x62, 0xdf, 0x58,
-    0xa3, 0x11, 0x7d, 0x1b, 0x8e, 0xf5, 0xd9, 0xb1, 0x0e, 0x08, 0xf6, 0xff,
-    0xba, 0xde, 0x61, 0x16, 0x36, 0xeb, 0x16, 0x65, 0x8a, 0x8d, 0xcf, 0x3b,
-    0xb3, 0xdb, 0x8d, 0x95, 0x8b, 0xd1, 0x72, 0x56, 0x2f, 0x87, 0x85, 0x12,
-    0xc5, 0xcf, 0xe5, 0x8a, 0x73, 0x75, 0xf2, 0x3b, 0xff, 0x7b, 0x3f, 0xd5,
-    0xe1, 0x77, 0x0e, 0x2c, 0x51, 0xd1, 0x7b, 0xe5, 0x8e, 0xa2, 0x0b, 0xfd,
-    0xdf, 0xbb, 0x80, 0x88, 0xd5, 0x8b, 0xff, 0x4c, 0x45, 0x9d, 0x18, 0xe7,
-    0x75, 0x8a, 0x63, 0xf8, 0x11, 0xc5, 0xf8, 0x00, 0x6e, 0xf8, 0xb1, 0x7f,
-    0xff, 0xc3, 0x7c, 0xd4, 0x45, 0x9d, 0x3f, 0x83, 0x9e, 0x72, 0x4d, 0x58,
-    0xb7, 0xdd, 0x12, 0x62, 0x2a, 0xbf, 0xfc, 0xf1, 0x43, 0x3b, 0x81, 0x87,
-    0x66, 0x25, 0x8b, 0x9b, 0xa9, 0x62, 0xfd, 0xff, 0x03, 0x3b, 0x58, 0xbf,
-    0x48, 0x0c, 0x14, 0xac, 0x56, 0x1e, 0x9b, 0x95, 0x5f, 0xff, 0xee, 0x67,
-    0x8c, 0xfe, 0x6f, 0x21, 0x16, 0x0f, 0xef, 0x12, 0xc5, 0xfb, 0xc2, 0x9c,
-    0xd9, 0x62, 0xb6, 0x57, 0x85, 0x90, 0xd5, 0x36, 0x15, 0x7b, 0xc2, 0xd3,
-    0xe5, 0x0c, 0x98, 0x4d, 0xbe, 0x20, 0x0d, 0x92, 0xff, 0xff, 0xff, 0xff,
-    0xff, 0xff, 0x0e, 0x35, 0x99, 0xd7, 0x58, 0xd8, 0xde, 0xb4, 0xce, 0xbb,
-    0x8d, 0x50, 0x93, 0x33, 0xae, 0xfa, 0xeb, 0x86, 0x46, 0xb8, 0xd6, 0x31,
-    0x99, 0xd7, 0x58, 0xd3, 0xad, 0x8d, 0x8c, 0x8d, 0x63, 0x8d, 0xf0, 0xce,
-    0xb2, 0x7a, 0xde, 0xb4, 0xce, 0xb2, 0x7a, 0xeb, 0xd6, 0x99, 0x1a, 0xe3,
-    0x68, 0xda, 0x35, 0xac, 0x5e, 0x8d, 0x5d, 0x64, 0x6c, 0xb1, 0x7f, 0x46,
-    0xae, 0xb0, 0xce, 0x9c, 0xf2, 0xc5, 0x75, 0x8b, 0xd5, 0x3d, 0x6c, 0xbe,
-    0xa8, 0xd2, 0x12, 0x11, 0xb4, 0x78, 0x71, 0xac, 0xba, 0xf7, 0x58, 0x44,
-    0xb1, 0x7e, 0x8d, 0xfa, 0xd1, 0x79, 0xd6, 0x2f, 0xf7, 0x73, 0xec, 0xce,
-    0xe0, 0xb1, 0x7f, 0x63, 0xf8, 0xa7, 0xb5, 0x8b, 0x47, 0x2c, 0x58, 0xd5,
-    0x8a, 0x8d, 0xd1, 0xbd, 0xd6, 0x10, 0xc6, 0xa3, 0x38, 0xd6, 0x6b, 0xf2,
-    0xd8, 0xe1, 0x5b, 0xdc, 0x0b, 0x65, 0x8b, 0x7d, 0x62, 0xe2, 0xd9, 0x62,
-    0xba, 0xc3, 0xca, 0xd8, 0x80, 0x42, 0x57, 0x47, 0x46, 0xeb, 0x17, 0xb5,
-    0xce, 0x2c, 0x5c, 0x5c, 0x58, 0xae, 0xb4, 0xda, 0xf4, 0x1e, 0xb0, 0xd6,
-    0x2c, 0x35, 0x8a, 0x63, 0x49, 0xc1, 0x2b, 0xc7, 0x9d, 0xd6, 0x2b, 0xac,
-    0x46, 0xfc, 0x6c, 0xab, 0xd7, 0x13, 0x30, 0x82, 0xfe, 0x8d, 0x24, 0x26,
-    0xde, 0x56, 0x2f, 0xe8, 0xd7, 0xd6, 0x14, 0x74, 0x9d, 0x62, 0xa3, 0x43,
-    0xf0, 0x8d, 0x66, 0x97, 0xa3, 0x5c, 0x5b, 0x2c, 0x5f, 0xff, 0x86, 0x66,
-    0x70, 0xb6, 0xd9, 0xa3, 0xcc, 0x33, 0xf1, 0xcb, 0x17, 0xff, 0xfe, 0x63,
-    0x0b, 0x22, 0x7d, 0x8c, 0x16, 0xfa, 0xd4, 0x98, 0x67, 0xe3, 0x96, 0x2f,
-    0xfe, 0x73, 0xc9, 0x64, 0x0c, 0x0b, 0x7c, 0x58, 0xbf, 0x98, 0xb6, 0xfc,
-    0xc7, 0xac, 0x5e, 0x38, 0x7c, 0x58, 0xbd, 0x09, 0x02, 0xc5, 0xa3, 0x75,
-    0x8a, 0x1a, 0x21, 0x30, 0xc5, 0x87, 0xe3, 0x87, 0x6f, 0xdf, 0x6f, 0x34,
-    0x16, 0x2f, 0xe3, 0x38, 0x03, 0xe7, 0x16, 0x2f, 0xe3, 0x44, 0x31, 0x31,
-    0xab, 0x15, 0xd6, 0x9f, 0x0c, 0x98, 0x5e, 0x3f, 0x09, 0x62, 0xf6, 0x66,
-    0x96, 0x28, 0xc3, 0x72, 0x43, 0xb7, 0x7d, 0x96, 0x2b, 0x46, 0xe3, 0xa1,
-    0x0d, 0xfe, 0x0c, 0xc9, 0x29, 0x84, 0xac, 0x53, 0x9e, 0xbb, 0x11, 0xde,
-    0xdf, 0x6f, 0xac, 0x5f, 0xf0, 0x0c, 0xe4, 0xbe, 0xcd, 0xe5, 0x8b, 0xf4,
-    0xf3, 0xae, 0xb1, 0xbc, 0x6e, 0xb1, 0x71, 0xce, 0xb1, 0x4e, 0x88, 0xee,
-    0x1d, 0x88, 0xee, 0xfd, 0x3c, 0x17, 0xdd, 0x62, 0x8c, 0x4c, 0x16, 0x10,
-    0xae, 0xe1, 0x7d, 0x2c, 0x5f, 0x9c, 0x62, 0x2c, 0x58, 0xbf, 0x41, 0xb4,
-    0xdb, 0xac, 0x5c, 0xf1, 0x2c, 0x54, 0x9e, 0x0e, 0x14, 0xdd, 0x17, 0xd6,
-    0x2f, 0xf1, 0x67, 0x70, 0x26, 0xd9, 0x62, 0xb4, 0x7d, 0xa0, 0x20, 0xe0,
-    0xcd, 0xf6, 0xe2, 0xd4, 0x4b, 0x17, 0xd8, 0x1e, 0x1a, 0xb1, 0x7e, 0xe0,
-    0x98, 0x80, 0xb1, 0x46, 0x22, 0x87, 0x0b, 0xc8, 0x9b, 0xc4, 0x97, 0xf1,
-    0x67, 0x42, 0xce, 0x2c, 0x51, 0xcf, 0xa8, 0x07, 0x97, 0xb8, 0xe0, 0x58,
-    0xbe, 0x72, 0x9e, 0x2c, 0x56, 0x1f, 0x03, 0x91, 0x7c, 0x76, 0xff, 0x49,
-    0xff, 0xac, 0x68, 0x96, 0x2f, 0xfd, 0x9b, 0x1a, 0xc3, 0xd1, 0x30, 0x4b,
-    0x17, 0xdc, 0x16, 0x80, 0xb1, 0x73, 0x79, 0x62, 0xe9, 0x3f, 0x66, 0xec,
-    0x32, 0x4b, 0xc1, 0x04, 0x12, 0x45, 0xef, 0x7f, 0x12, 0x23, 0x0d, 0x0d,
-    0xf9, 0xcd, 0x62, 0x02, 0xc5, 0x98, 0x8f, 0x63, 0xc6, 0x17, 0xff, 0xff,
-    0x4e, 0xc6, 0x70, 0x53, 0xdf, 0xbf, 0x87, 0xcf, 0x14, 0x80, 0x12, 0xb1,
-    0x7f, 0xfb, 0xee, 0x61, 0xac, 0x67, 0x33, 0x53, 0xe5, 0x8b, 0x62, 0xc5,
-    0x78, 0xf7, 0xa3, 0x93, 0x6f, 0xbd, 0x16, 0x79, 0x62, 0xc3, 0x58, 0xb7,
-    0x52, 0xc5, 0x0d, 0x34, 0x2c, 0x86, 0x93, 0x12, 0x88, 0x90, 0x31, 0x2a,
-    0x95, 0xd8, 0x78, 0x06, 0x0e, 0x52, 0x01, 0xa5, 0xba, 0x34, 0xfb, 0xe0,
-    0x21, 0x4e, 0x51, 0xb4, 0x5f, 0xbe, 0x5d, 0x72, 0x3b, 0xa9, 0x62, 0xe6,
-    0x65, 0x8b, 0x7d, 0xcf, 0x2d, 0x8d, 0x6f, 0xcf, 0xd3, 0x05, 0xc5, 0x8b,
-    0xff, 0xc2, 0x9e, 0xff, 0x9b, 0x48, 0x5d, 0xc3, 0x8b, 0x15, 0x27, 0xf3,
-    0xc2, 0xab, 0xff, 0xf8, 0x1a, 0x93, 0x35, 0x3e, 0xee, 0x12, 0x6e, 0x98,
-    0x25, 0x8b, 0xff, 0xa6, 0x23, 0x33, 0x79, 0xf7, 0xd8, 0xeb, 0x17, 0xc1,
-    0xf1, 0x80, 0xb1, 0x74, 0x5f, 0x58, 0xbf, 0xf1, 0xcc, 0xc7, 0xd3, 0x9e,
-    0x4d, 0x58, 0xa7, 0x3d, 0x96, 0x19, 0xbf, 0xf3, 0xc4, 0x67, 0xe5, 0xf4,
-    0x28, 0xf5, 0x8b, 0xf9, 0x87, 0x02, 0x93, 0xac, 0x51, 0x89, 0xeb, 0x49,
-    0x0b, 0xb0, 0x69, 0x1f, 0xef, 0xa0, 0x20, 0x24, 0x4b, 0xff, 0xef, 0x90,
-    0xbc, 0x61, 0x67, 0x57, 0x9f, 0x3a, 0x96, 0x2e, 0x70, 0x2c, 0x56, 0xe7,
-    0xdb, 0xd4, 0xad, 0x70, 0xbe, 0xb1, 0x7f, 0xf7, 0x7c, 0x33, 0x82, 0x9e,
-    0xf3, 0x3c, 0xb1, 0x7b, 0xc2, 0x8f, 0x58, 0xbe, 0xea, 0xd7, 0x38, 0xb1,
-    0x58, 0x79, 0x0e, 0x43, 0x7b, 0x99, 0xb2, 0xc5, 0xf7, 0x8a, 0x76, 0x58,
-    0xa9, 0x4c, 0xbc, 0xd2, 0x67, 0x18, 0xd4, 0x24, 0x18, 0x80, 0x43, 0xd7,
-    0xf1, 0x67, 0xcb, 0x02, 0x58, 0xbf, 0xf1, 0x77, 0xe3, 0x38, 0x03, 0xe7,
-    0x16, 0x28, 0xc3, 0xef, 0xc2, 0xdb, 0xf4, 0xeb, 0xb8, 0x71, 0x62, 0xff,
-    0xfc, 0xe5, 0xbf, 0x3c, 0x32, 0x9e, 0xfe, 0xf8, 0x4b, 0x17, 0xe1, 0x79,
-    0xf6, 0x95, 0x8a, 0xc4, 0x65, 0x6e, 0x44, 0x72, 0xa2, 0x55, 0xbf, 0xdf,
-    0x9d, 0xb5, 0x38, 0x35, 0x8b, 0xf4, 0x7c, 0x6c, 0x09, 0x3a, 0xc5, 0xf9,
-    0xf9, 0xec, 0xfa, 0xc5, 0xfe, 0x92, 0x9e, 0x4b, 0x9d, 0x62, 0xf3, 0x7b,
-    0x8b, 0x14, 0x69, 0xe7, 0x68, 0xc6, 0xf7, 0x50, 0xe5, 0x62, 0xa5, 0x31,
-    0xec, 0x34, 0xdc, 0xc5, 0xdd, 0x84, 0x47, 0x7f, 0xf9, 0x88, 0x59, 0xe2,
-    0x6f, 0x96, 0x69, 0x62, 0xf7, 0xdb, 0xaf, 0x58, 0xbf, 0x74, 0x14, 0x33,
-    0x8b, 0x17, 0xff, 0xb3, 0xe6, 0x49, 0x36, 0x8d, 0x32, 0x74, 0xb1, 0x7f,
-    0xe7, 0x88, 0xc9, 0xc2, 0x1f, 0xe5, 0x62, 0xf7, 0x30, 0x6b, 0x17, 0x0b,
-    0x16, 0x2a, 0x4f, 0xcc, 0x07, 0xe4, 0x3b, 0x7c, 0x07, 0x21, 0x2c, 0x56,
-    0x26, 0x73, 0xb9, 0x5b, 0x42, 0xfc, 0x45, 0xb7, 0x87, 0x9b, 0x2c, 0x5e,
-    0xe9, 0x3a, 0x58, 0xbc, 0xdc, 0x75, 0x8b, 0xf9, 0xa2, 0x7f, 0x88, 0x0b,
-    0x15, 0x88, 0x88, 0x71, 0xed, 0x0f, 0xfc, 0x72, 0xf1, 0x93, 0xd6, 0x2c,
-    0x5f, 0xdf, 0xe0, 0xa0, 0x52, 0xb1, 0x51, 0xe7, 0xa2, 0xc4, 0x77, 0xc4,
-    0x66, 0x0d, 0x62, 0xff, 0x14, 0xc7, 0x61, 0x39, 0xab, 0x17, 0xfb, 0xcd,
-    0xdf, 0x1b, 0xb0, 0x96, 0x2f, 0xc0, 0x98, 0x73, 0x16, 0x2f, 0xb3, 0x93,
-    0xa5, 0x8b, 0xb4, 0x0c, 0x3c, 0xa2, 0x28, 0xb4, 0xac, 0x5e, 0x79, 0x25,
-    0x8a, 0x93, 0xd8, 0xd1, 0x67, 0x84, 0x6b, 0xac, 0x6d, 0xcc, 0x63, 0x53,
-    0x14, 0x1d, 0xc7, 0x0c, 0xac, 0x3e, 0x36, 0x11, 0x3b, 0xc3, 0xbb, 0xb8,
-    0xc9, 0x5e, 0x76, 0xfa, 0x3e, 0x1a, 0x11, 0x4a, 0x75, 0xd4, 0x7f, 0xe7,
-    0x8e, 0x53, 0xf1, 0xad, 0x01, 0x27, 0xaf, 0x47, 0x28, 0xd6, 0xfd, 0x0c,
-    0xae, 0x90, 0x8c, 0x08, 0x92, 0x38, 0x8c, 0x33, 0x5e, 0xa8, 0x6c, 0xde,
-    0x3b, 0xc1, 0x62, 0xc2, 0x58, 0xbf, 0x6b, 0x3a, 0x4f, 0x6b, 0x17, 0x8b,
-    0x3c, 0xb1, 0x7f, 0xfb, 0xb8, 0x73, 0x92, 0xfd, 0xfb, 0xd2, 0x75, 0x8a,
-    0xd2, 0x25, 0x08, 0xac, 0x21, 0xcb, 0xd9, 0x9e, 0x58, 0xbf, 0xf6, 0xd8,
-    0x52, 0x17, 0x8d, 0x6e, 0x2c, 0x5f, 0xec, 0xe8, 0xcf, 0xbe, 0x12, 0xc5,
-    0xc5, 0xec, 0x3f, 0x52, 0x41, 0xbf, 0xdf, 0x97, 0xf0, 0x26, 0x0b, 0x17,
-    0xbc, 0xf8, 0xb1, 0x7b, 0x06, 0xeb, 0x17, 0xdd, 0xc2, 0x4e, 0xb1, 0x46,
-    0x1e, 0xe4, 0x8e, 0x78, 0x72, 0x9d, 0x1d, 0x3c, 0x2b, 0x0a, 0x11, 0xf7,
-    0x85, 0xee, 0x2c, 0x5f, 0xff, 0xff, 0x1a, 0x61, 0x61, 0xa6, 0xf7, 0x0e,
-    0x18, 0x59, 0xf2, 0xc0, 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0xfd, 0x1e, 0xde,
-    0x8a, 0x0f, 0xa8, 0x96, 0x2f, 0xc6, 0x6f, 0x21, 0x76, 0xb1, 0x7f, 0xd3,
-    0x00, 0x9b, 0x5e, 0x9c, 0x58, 0xbf, 0xff, 0xff, 0xee, 0x19, 0xfc, 0xda,
-    0x42, 0xee, 0x1c, 0x30, 0x5b, 0xeb, 0x52, 0x64, 0x46, 0xf6, 0x61, 0x9f,
-    0x8e, 0x58, 0xbf, 0xbb, 0x32, 0x2c, 0xcd, 0xd6, 0x2f, 0xff, 0xff, 0xdd,
-    0x46, 0x7f, 0xf2, 0x7d, 0x76, 0x28, 0x8c, 0x2c, 0xdd, 0xc6, 0x46, 0x19,
-    0xf8, 0xe5, 0x8a, 0xeb, 0x57, 0x56, 0xfa, 0xec, 0x76, 0x61, 0x4c, 0x33,
-    0x0c, 0x8d, 0xeb, 0x73, 0x57, 0x1e, 0x68, 0x45, 0x00, 0xfc, 0x8b, 0x7c,
-    0x72, 0x28, 0x54, 0x74, 0x32, 0xbf, 0xff, 0xff, 0xff, 0xf9, 0xcc, 0xfe,
-    0x70, 0x53, 0xd9, 0x67, 0xb9, 0xf3, 0x99, 0xf7, 0xc2, 0xce, 0x8f, 0x85,
-    0x9d, 0xc3, 0x8e, 0x69, 0x86, 0x7e, 0x39, 0x62, 0xfd, 0xf9, 0x04, 0xc7,
-    0xac, 0x5c, 0x77, 0x58, 0xa5, 0x8a, 0x01, 0xa3, 0x08, 0x5e, 0xfe, 0x84,
-    0x0f, 0x14, 0xf5, 0x2c, 0x58, 0x0b, 0x14, 0xe8, 0xb5, 0x02, 0x71, 0x11,
-    0x08, 0xce, 0xe8, 0xe9, 0x58, 0xbd, 0x26, 0xba, 0xc5, 0xfa, 0x62, 0x33,
-    0x36, 0x58, 0xbe, 0x1c, 0xf2, 0x56, 0x2e, 0x93, 0xac, 0x5d, 0x3d, 0xac,
-    0x5f, 0xdc, 0xc3, 0xf4, 0x1e, 0x2c, 0x5f, 0x6d, 0xb0, 0xbc, 0xb1, 0x46,
-    0x23, 0x4a, 0x4a, 0xc6, 0x45, 0x10, 0xbf, 0x06, 0x04, 0x61, 0x44, 0x9b,
-    0x0f, 0x06, 0xbd, 0x0e, 0xfb, 0xa3, 0xa3, 0x75, 0x8b, 0xff, 0xc0, 0x92,
-    0xdc, 0xcc, 0x21, 0x43, 0x38, 0xb1, 0x7e, 0x06, 0x9f, 0xb0, 0x2c, 0x5f,
-    0xbc, 0xd0, 0x70, 0x2c, 0x5f, 0xc6, 0x77, 0xe2, 0x91, 0xac, 0x59, 0xbb,
-    0x44, 0x11, 0x15, 0x70, 0xa2, 0xff, 0xef, 0x43, 0x35, 0x86, 0x30, 0x53,
-    0xd4, 0xb1, 0x7d, 0x9f, 0x78, 0x2c, 0x5f, 0xd9, 0xc2, 0xce, 0x8c, 0xb1,
-    0x70, 0x8e, 0x61, 0xe8, 0x49, 0x15, 0xfc, 0xc5, 0x9b, 0x07, 0x05, 0x8b,
-    0xf4, 0xc4, 0xcd, 0xa5, 0x8a, 0x01, 0xeb, 0xf0, 0xbe, 0xbb, 0x54, 0x85,
-    0xf8, 0x66, 0x91, 0xaf, 0x21, 0x33, 0xe8, 0x42, 0xde, 0x32, 0x1b, 0xac,
-    0x5f, 0xc6, 0x71, 0xa7, 0xb8, 0x2c, 0x5c, 0x0e, 0x2c, 0x53, 0x9e, 0x43,
-    0x18, 0x5f, 0xff, 0x18, 0x59, 0xe7, 0xcd, 0x8a, 0x7c, 0xe7, 0x58, 0xbf,
-    0xee, 0x19, 0x85, 0x22, 0xeb, 0xf8, 0xb1, 0x78, 0xce, 0xe0, 0xb1, 0x7f,
-    0x8f, 0xf7, 0xf1, 0x49, 0xd6, 0x2f, 0x8f, 0x20, 0xe2, 0xc5, 0x75, 0xd5,
-    0x7e, 0x96, 0x63, 0x8b, 0xc8, 0xe7, 0x0d, 0x35, 0x79, 0x4c, 0x47, 0x5b,
-    0xfb, 0x40, 0x08, 0x09, 0x3f, 0x87, 0xe2, 0x20, 0x08, 0xce, 0xe8, 0x46,
-    0x8b, 0x17, 0xe8, 0xdc, 0xd1, 0xce, 0xcb, 0x17, 0xff, 0xf6, 0x8c, 0x2c,
-    0xe9, 0x9a, 0x81, 0x92, 0x36, 0x8b, 0x8b, 0x16, 0x65, 0x8b, 0xff, 0xda,
-    0xf8, 0x4c, 0x33, 0x03, 0x00, 0x1f, 0xa9, 0x62, 0xff, 0xec, 0x0b, 0xa8,
-    0xe2, 0x73, 0xe1, 0x01, 0x62, 0xff, 0xff, 0xdd, 0xc9, 0xa5, 0x83, 0xfb,
-    0xc4, 0x67, 0x33, 0xb8, 0x6b, 0x02, 0x58, 0xa7, 0x45, 0xd1, 0x24, 0x5f,
-    0xee, 0xbf, 0x86, 0x1b, 0xa6, 0x09, 0x62, 0xb1, 0x3d, 0xb8, 0x98, 0x18,
-    0x44, 0xa3, 0x0c, 0x11, 0x0d, 0xfd, 0x26, 0xe0, 0xe3, 0xa3, 0x75, 0x8b,
-    0xef, 0x0a, 0x76, 0x58, 0xbf, 0x36, 0xb8, 0xe3, 0x58, 0xbf, 0x0c, 0x3e,
-    0xf0, 0x6b, 0x15, 0x03, 0xd3, 0x22, 0x8b, 0xfb, 0x3f, 0x87, 0x9d, 0xd6,
-    0x2e, 0x1e, 0x2c, 0x54, 0x9f, 0x34, 0x08, 0x5c, 0xba, 0xfc, 0xfa, 0x7e,
-    0x98, 0xb1, 0x50, 0x4d, 0xa9, 0xcd, 0xfd, 0x0d, 0xde, 0xa2, 0xdb, 0xe8,
-    0xec, 0xd4, 0xac, 0x5f, 0xd3, 0xcf, 0xc9, 0x79, 0x62, 0xff, 0xec, 0x23,
-    0x3a, 0x9f, 0xfb, 0x3e, 0x69, 0x62, 0xff, 0xfb, 0x3d, 0xe9, 0x08, 0xcc,
-    0xfe, 0x08, 0xb7, 0x58, 0xbd, 0xdc, 0x38, 0x74, 0x4d, 0x7d, 0x22, 0xd1,
-    0xeb, 0x16, 0x0d, 0x62, 0xf7, 0xb3, 0x8b, 0x15, 0x04, 0xd0, 0xb2, 0x18,
-    0xfb, 0x9b, 0x00, 0x54, 0x42, 0x77, 0xff, 0xf8, 0xb3, 0x7f, 0xb9, 0x60,
-    0xbb, 0xf1, 0x8c, 0x16, 0x1a, 0xb1, 0x79, 0xf6, 0xe2, 0xc5, 0xff, 0xb3,
-    0x76, 0xdb, 0xf9, 0xbe, 0x12, 0xc5, 0xec, 0xd8, 0x4b, 0x16, 0x08, 0xc4,
-    0x70, 0x63, 0x27, 0xc7, 0x89, 0x02, 0xfc, 0x29, 0xf9, 0x4a, 0xc5, 0xff,
-    0xed, 0x63, 0xec, 0x67, 0x25, 0xf6, 0x6f, 0x2c, 0x58, 0xd1, 0x9f, 0x9e,
-    0x13, 0xdf, 0xd0, 0xe1, 0xa2, 0x9e, 0xd6, 0x2f, 0xb0, 0x6d, 0x05, 0x8a,
-    0xec, 0xf4, 0xc2, 0x31, 0xbe, 0xd4, 0xce, 0xcb, 0x17, 0xd1, 0x4f, 0x99,
-    0x62, 0xff, 0x4e, 0xdc, 0x98, 0x9f, 0xa2, 0xc5, 0xe8, 0x87, 0x05, 0x8a,
-    0xd8, 0xf5, 0xb0, 0xde, 0xe6, 0x0b, 0x88, 0xbe, 0x11, 0x18, 0x6f, 0x37,
-    0xba, 0x78, 0x35, 0x8a, 0x95, 0x4e, 0x39, 0x0b, 0x67, 0x7b, 0x28, 0x71,
-    0x04, 0x7b, 0x74, 0xf1, 0x62, 0xe9, 0x25, 0x8a, 0xf1, 0xad, 0x0c, 0x5e,
-    0xff, 0x9f, 0x5b, 0x08, 0x18, 0x58, 0xb1, 0x74, 0x47, 0x58, 0xbf, 0xd0,
-    0xe7, 0x85, 0x83, 0x32, 0x23, 0xd2, 0x01, 0xcd, 0xff, 0xdf, 0x10, 0x5c,
-    0x7f, 0x7d, 0xd8, 0x0b, 0x17, 0xff, 0xd8, 0xfc, 0x30, 0x7a, 0x7d, 0xbc,
-    0x68, 0xb4, 0xb1, 0x6c, 0x1a, 0x26, 0xb7, 0x46, 0xbf, 0xf1, 0xb2, 0x50,
-    0x0f, 0xaa, 0x4a, 0x0b, 0x15, 0xda, 0x6a, 0x65, 0x0e, 0x7f, 0x14, 0xdc,
-    0x78, 0x2c, 0x5f, 0xfe, 0x9d, 0x6e, 0x68, 0x31, 0x8b, 0xb8, 0x71, 0x62,
-    0xa0, 0x7c, 0xbc, 0x18, 0xbe, 0xcd, 0x49, 0xd6, 0x2f, 0x16, 0x74, 0x30,
-    0xf1, 0x08, 0x8a, 0xff, 0xff, 0xb8, 0x58, 0x37, 0x08, 0xc2, 0xce, 0xaf,
-    0x3f, 0x05, 0x3a, 0x58, 0xad, 0x26, 0xfb, 0xc8, 0x6f, 0xf8, 0xd2, 0xff,
-    0xff, 0x45, 0xcc, 0xdb, 0x1f, 0x46, 0x31, 0x7a, 0x2c, 0xd6, 0x2c, 0x5f,
-    0xff, 0x16, 0x74, 0x33, 0x52, 0x4d, 0xee, 0x48, 0x16, 0x2f, 0xf1, 0x1a,
-    0x58, 0xfd, 0xf9, 0x62, 0xdd, 0x16, 0x2b, 0x64, 0x4c, 0xe2, 0x8f, 0x0d,
-    0x2a, 0x53, 0x62, 0x73, 0x61, 0x43, 0xf2, 0xdb, 0xac, 0x5f, 0xe0, 0xb5,
-    0x87, 0x3b, 0x12, 0xc5, 0xf4, 0xe7, 0xf8, 0xb1, 0x73, 0xec, 0xb1, 0x51,
-    0x1b, 0xaf, 0x11, 0x51, 0xd1, 0x46, 0xc2, 0x60, 0x6e, 0xbf, 0xdb, 0x96,
-    0x0f, 0xed, 0xc5, 0x8b, 0xf8, 0x18, 0x43, 0xfc, 0xac, 0x5f, 0xdf, 0x72,
-    0x00, 0x67, 0x58, 0xa7, 0x3d, 0xcf, 0x16, 0xdc, 0x37, 0x58, 0xbf, 0xff,
-    0xbe, 0xf8, 0x58, 0xe3, 0xc9, 0x03, 0x6e, 0xda, 0x58, 0xbf, 0xdb, 0x49,
-    0xca, 0x7b, 0x02, 0xc5, 0xfc, 0x66, 0x6b, 0x79, 0xc5, 0x8a, 0x94, 0xe1,
-    0x21, 0x09, 0x0d, 0xc8, 0x7b, 0x17, 0x65, 0x80, 0xcd, 0x6f, 0x80, 0x2d,
-    0x4a, 0xc5, 0xe6, 0xce, 0x2c, 0x5e, 0x7e, 0x98, 0xb1, 0x46, 0x1b, 0xad,
-    0x0e, 0x51, 0xa7, 0xff, 0xf5, 0xda, 0x94, 0xc0, 0x32, 0x1b, 0xb6, 0x12,
-    0xc5, 0xff, 0x34, 0x79, 0x60, 0xe4, 0xbc, 0xb1, 0x7f, 0xa6, 0x78, 0xfb,
-    0x31, 0xd6, 0x2f, 0xec, 0xee, 0x0f, 0x84, 0xb1, 0x7d, 0x30, 0xcf, 0x2c,
-    0x56, 0x8f, 0x3c, 0x8b, 0x6b, 0x11, 0xba, 0x47, 0x5e, 0x84, 0x15, 0xd9,
-    0xb2, 0xc5, 0xf1, 0x16, 0x79, 0x62, 0xed, 0x84, 0xb1, 0x74, 0x9a, 0xb1,
-    0x4b, 0x17, 0x37, 0x16, 0x28, 0xe6, 0x8c, 0x20, 0xcb, 0x8a, 0x56, 0x2f,
-    0xb0, 0x3c, 0x3a, 0xc5, 0xf1, 0xa2, 0xd1, 0xab, 0x17, 0xc0, 0x3b, 0xf1,
-    0x62, 0x8d, 0x3c, 0x9d, 0x13, 0x5e, 0x6d, 0x40, 0xc4, 0xe1, 0xfa, 0xd3,
-    0x39, 0x18, 0x72, 0x13, 0x8c, 0xfc, 0xed, 0x88, 0x88, 0x58, 0x36, 0xca,
-    0x31, 0xb5, 0x0e, 0x8d, 0xc7, 0x66, 0x50, 0x5e, 0x47, 0x73, 0xda, 0x2b,
-    0xc6, 0xcf, 0xa9, 0x74, 0x27, 0x84, 0x07, 0xe7, 0x29, 0x9a, 0x1a, 0xe5,
-    0x2a, 0xcf, 0x84, 0xe2, 0x94, 0xed, 0x7f, 0xed, 0x3e, 0xcc, 0x72, 0xec,
-    0x44, 0xb1, 0x68, 0xf5, 0x8b, 0x79, 0x62, 0xe9, 0x02, 0xc5, 0xff, 0xe7,
-    0x17, 0x5f, 0x26, 0x70, 0x40, 0x3e, 0x79, 0x62, 0xbb, 0x3e, 0x8d, 0x0b,
-    0xdf, 0xfd, 0xbf, 0xe7, 0x9e, 0xd4, 0xf7, 0xf7, 0x58, 0xbf, 0xa1, 0xcc,
-    0x16, 0x80, 0xb1, 0x7e, 0xce, 0x63, 0x92, 0xc5, 0xf1, 0x44, 0xe7, 0xec,
-    0xf5, 0x7e, 0x5f, 0x7f, 0xe9, 0xdf, 0x92, 0xfd, 0xfa, 0x4e, 0xb1, 0x4b,
-    0x17, 0x0a, 0x3d, 0x62, 0xfe, 0xdb, 0x02, 0xc7, 0x1a, 0xc5, 0x68, 0xf2,
-    0xb8, 0x37, 0x50, 0x3f, 0x8f, 0x2b, 0x5c, 0x69, 0xd6, 0x2a, 0x53, 0xc9,
-    0x68, 0x4e, 0x11, 0xd0, 0xa1, 0x71, 0x1c, 0x45, 0x7c, 0x0e, 0x6d, 0xe5,
-    0x8b, 0xf9, 0xbf, 0x25, 0x30, 0x58, 0xbf, 0xff, 0xf7, 0xb2, 0x4b, 0x37,
-    0x26, 0xda, 0x75, 0xa9, 0xf7, 0xf0, 0x6b, 0x17, 0xdd, 0x0b, 0x38, 0x62,
-    0x25, 0xf0, 0xb2, 0xff, 0x0c, 0xb3, 0xde, 0xcd, 0x2c, 0x5f, 0xfe, 0x2c,
-    0x37, 0xed, 0x0f, 0x84, 0xc1, 0x9d, 0x62, 0xa5, 0x10, 0x18, 0x67, 0x7f,
-    0xe6, 0x34, 0xcf, 0x33, 0x11, 0x9b, 0x2c, 0x54, 0xa7, 0xb4, 0xf0, 0xbc,
-    0xfc, 0x2e, 0xc8, 0x86, 0xfc, 0x0c, 0x3c, 0xee, 0xb1, 0x79, 0xbd, 0xc5,
-    0x8b, 0x85, 0xb2, 0xc5, 0x40, 0xdb, 0x68, 0x76, 0xfd, 0x90, 0xfb, 0x41,
-    0x62, 0xa2, 0x3c, 0x9f, 0x90, 0xd8, 0xa5, 0x19, 0x7e, 0x85, 0x45, 0xdf,
-    0x8f, 0x58, 0xbf, 0xff, 0xff, 0xfb, 0xdc, 0x92, 0x33, 0x72, 0x16, 0xdf,
-    0xc1, 0xe9, 0x8c, 0xf7, 0x3f, 0x8e, 0x3f, 0x37, 0xe0, 0x05, 0x8b, 0xfc,
-    0xc4, 0x1f, 0xff, 0x23, 0x58, 0xbf, 0xe8, 0xa7, 0x5e, 0x9c, 0x2d, 0xd6,
-    0x2f, 0xff, 0x72, 0x70, 0xcd, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0x62, 0x21,
-    0x7c, 0x75, 0x77, 0x61, 0x2c, 0x58, 0x25, 0x8b, 0xb7, 0x30, 0x66, 0xb7,
-    0xb1, 0xaa, 0xe1, 0xff, 0x89, 0x3e, 0xfe, 0xfe, 0x0f, 0x59, 0xda, 0xc5,
-    0xee, 0xe4, 0xd5, 0x8b, 0xff, 0xff, 0xb5, 0x26, 0x7f, 0x3a, 0xbd, 0x3a,
-    0xdc, 0xb3, 0xda, 0x17, 0x70, 0xe2, 0xc5, 0xdf, 0xc2, 0x44, 0xc7, 0x87,
-    0xeb, 0xb4, 0x7a, 0x05, 0x0c, 0x7b, 0xe1, 0x44, 0xc3, 0x58, 0xbf, 0x67,
-    0xb5, 0x81, 0x2c, 0x5b, 0x73, 0x0f, 0x37, 0xe4, 0x95, 0x28, 0xa1, 0x77,
-    0x7b, 0xb5, 0x05, 0x8b, 0xff, 0x85, 0x84, 0x69, 0x9f, 0x2c, 0xf7, 0x16,
-    0x2f, 0xff, 0xc1, 0xc8, 0x5b, 0xfd, 0xcf, 0x9d, 0x99, 0x9d, 0xf9, 0x62,
-    0xfe, 0x6e, 0x67, 0x83, 0xd9, 0x62, 0x8c, 0x44, 0x61, 0xab, 0x97, 0xc6,
-    0x6e, 0x14, 0xac, 0x54, 0x0f, 0x2c, 0xe4, 0xb5, 0x2b, 0xaa, 0x50, 0x2c,
-    0xc1, 0xbe, 0xe1, 0x48, 0xf1, 0x9c, 0x6a, 0x3b, 0x73, 0x90, 0xfc, 0x61,
-    0xa3, 0x1d, 0xbf, 0xfd, 0xa6, 0x81, 0x8c, 0x5e, 0x8b, 0x35, 0x8b, 0x17,
-    0xe8, 0xdb, 0x4f, 0x26, 0xac, 0x5f, 0xbd, 0xf9, 0x7d, 0xd6, 0x28, 0xd3,
-    0xd7, 0xf1, 0x75, 0xf1, 0x33, 0x7d, 0x62, 0xff, 0xff, 0x61, 0xf5, 0xa7,
-    0x30, 0xbb, 0xc0, 0x8b, 0x05, 0x86, 0xac, 0x50, 0xd1, 0x09, 0xf2, 0x1a,
-    0xd2, 0x6d, 0x85, 0x0a, 0x2e, 0x42, 0x9e, 0xfd, 0x9c, 0xf3, 0x69, 0x62,
-    0xff, 0xf7, 0x31, 0x88, 0xce, 0x77, 0x25, 0x3c, 0x58, 0xb4, 0x3e, 0x7e,
-    0x5e, 0x28, 0xbf, 0xa4, 0x73, 0xf9, 0x82, 0xc5, 0xfe, 0x9f, 0x18, 0xdb,
-    0xbf, 0x45, 0x8a, 0xd1, 0xf2, 0x11, 0x6d, 0xff, 0xff, 0x9f, 0xbf, 0x37,
-    0xcb, 0x07, 0xf7, 0x8b, 0x9b, 0xe3, 0x94, 0x4b, 0x17, 0xff, 0xd3, 0xe3,
-    0x08, 0x5d, 0x46, 0x67, 0xa3, 0xb3, 0xcb, 0x15, 0x29, 0xb9, 0xbc, 0x23,
-    0x34, 0x42, 0x26, 0xeb, 0xf7, 0xe4, 0x0d, 0xe5, 0x8b, 0x9b, 0xcb, 0x17,
-    0xf8, 0xcf, 0x13, 0x7a, 0x7c, 0xb1, 0x7f, 0xd0, 0x32, 0x4c, 0xf7, 0x05,
-    0x1e, 0xb1, 0x77, 0xe4, 0xd3, 0xf4, 0xd1, 0xa5, 0xfd, 0xdc, 0x1f, 0xe2,
-    0x3a, 0xc5, 0xff, 0x6e, 0x67, 0xf0, 0xe2, 0xd6, 0xcb, 0x17, 0x3e, 0xcb,
-    0x14, 0x62, 0x21, 0xa4, 0xc3, 0xc7, 0xd5, 0xa4, 0xe5, 0xfe, 0x50, 0x08,
-    0x45, 0x94, 0x2d, 0x2f, 0xc1, 0x37, 0xe2, 0x8d, 0xd6, 0x2f, 0xfb, 0x06,
-    0x67, 0x8d, 0x70, 0xb8, 0xb1, 0x6c, 0xd1, 0xf6, 0xf4, 0x30, 0xb8, 0xd0,
-    0x2c, 0x5f, 0xfc, 0x3f, 0xce, 0xbe, 0xf8, 0x59, 0xd1, 0x62, 0xb4, 0x7b,
-    0xc1, 0x0c, 0xdf, 0xfc, 0x4c, 0x67, 0xd9, 0xf9, 0xc7, 0x3a, 0xc5, 0xfe,
-    0x6d, 0x16, 0x0c, 0x99, 0x62, 0xa4, 0xfd, 0x44, 0x89, 0x7f, 0xf6, 0xa5,
-    0xc7, 0x9f, 0xc3, 0x4d, 0x65, 0x8b, 0xf9, 0xbe, 0x6c, 0xe9, 0x96, 0x2f,
-    0xb5, 0x82, 0xd9, 0x62, 0xff, 0x6b, 0x1c, 0xb6, 0x9d, 0xd6, 0x2f, 0xd2,
-    0xfb, 0x37, 0x96, 0x2f, 0x6a, 0x23, 0x30, 0xf7, 0x38, 0x69, 0x52, 0xac,
-    0x70, 0x70, 0xb4, 0xc8, 0x43, 0xfe, 0x13, 0x0c, 0x42, 0x48, 0xbe, 0x2e,
-    0x14, 0x20, 0x2f, 0xff, 0x08, 0x81, 0xc3, 0x38, 0x2f, 0x4f, 0xb8, 0xb1,
-    0x7f, 0xdc, 0xd6, 0xb3, 0xfd, 0xc3, 0x8b, 0x15, 0x88, 0x89, 0x12, 0x6d,
-    0xcc, 0x05, 0x8b, 0xff, 0xe3, 0x0a, 0x79, 0x3b, 0x16, 0x0f, 0xef, 0x12,
-    0xc5, 0xff, 0xff, 0xdc, 0xd1, 0x4c, 0x46, 0x07, 0xe7, 0x86, 0x77, 0xec,
-    0xe8, 0x59, 0xc5, 0x8a, 0xd2, 0x32, 0x09, 0x46, 0xa0, 0x99, 0x1f, 0x88,
-    0x85, 0x0d, 0xfa, 0x58, 0xbb, 0xf1, 0xeb, 0x17, 0xff, 0xc4, 0xc0, 0x33,
-    0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0xff, 0xf3, 0x1a, 0x67, 0x57, 0x9c,
-    0x8d, 0xe4, 0xe1, 0x0f, 0xf2, 0xb1, 0x7d, 0x25, 0xbb, 0x7d, 0x16, 0x9e,
-    0x4f, 0xbf, 0xfe, 0x6d, 0x37, 0xfb, 0x86, 0x79, 0x88, 0x30, 0x2c, 0x52,
-    0xc5, 0xfd, 0x2e, 0x4d, 0xa3, 0x56, 0x2e, 0xf1, 0x86, 0x9b, 0x9f, 0x86,
-    0x5e, 0x34, 0xd9, 0x58, 0xb4, 0x16, 0x29, 0xcd, 0x8c, 0x43, 0xf7, 0xff,
-    0x67, 0x70, 0x33, 0x22, 0xfc, 0x91, 0xab, 0x15, 0x2a, 0x99, 0xe0, 0x18,
-    0x6c, 0x33, 0xf7, 0x39, 0xee, 0x11, 0x5a, 0x60, 0x39, 0x0d, 0xfe, 0xd1,
-    0x66, 0xf9, 0x31, 0xeb, 0x17, 0xff, 0xfd, 0xfc, 0xec, 0xcd, 0xb1, 0xcb,
-    0xd9, 0xb7, 0xb8, 0x4c, 0x6a, 0xc5, 0xff, 0xbd, 0xce, 0x8f, 0xe9, 0xc2,
-    0x89, 0x62, 0xbe, 0x8a, 0xb2, 0x6a, 0xbf, 0xf6, 0xb6, 0xcc, 0xe0, 0xc9,
-    0xbe, 0xb1, 0x7e, 0xd3, 0xf2, 0x7b, 0x58, 0xa9, 0x4d, 0xaf, 0x21, 0xc2,
-    0xe4, 0x4c, 0x7f, 0x7f, 0xf8, 0xed, 0x11, 0x93, 0xff, 0xcf, 0x05, 0xc5,
-    0x8b, 0xff, 0x85, 0x11, 0x98, 0xfa, 0x73, 0xc9, 0xab, 0x17, 0x43, 0x8e,
-    0x89, 0x40, 0x26, 0xdf, 0xdd, 0x6c, 0x50, 0x7f, 0x71, 0x62, 0xf7, 0x03,
-    0xe2, 0xc5, 0x6c, 0x7a, 0x87, 0x35, 0xba, 0x40, 0xb1, 0x7e, 0x2f, 0x7f,
-    0x3a, 0x96, 0x2f, 0xd1, 0x71, 0xb4, 0x6a, 0xc5, 0xe6, 0x0b, 0x52, 0x7a,
-    0xd8, 0x57, 0x7f, 0xf6, 0x11, 0x98, 0xfa, 0x73, 0xc9, 0xab, 0x17, 0xe8,
-    0x9c, 0xa4, 0xeb, 0x17, 0xe9, 0x7d, 0xa4, 0xd5, 0x8b, 0x1b, 0x27, 0xa3,
-    0xf2, 0x8b, 0xe3, 0x3b, 0x83, 0xac, 0x51, 0x1e, 0x6f, 0x8a, 0x2f, 0xe7,
-    0xea, 0x68, 0x39, 0x2c, 0x5e, 0x29, 0x3a, 0xc5, 0xfb, 0xd1, 0x66, 0xb1,
-    0x62, 0xe3, 0x5a, 0x07, 0x8a, 0x43, 0x95, 0x28, 0xc2, 0xc2, 0x17, 0x74,
-    0xbf, 0x8f, 0xe3, 0x7e, 0x2e, 0xa5, 0x8b, 0xf1, 0xf8, 0x53, 0xa5, 0x8b,
-    0xfe, 0x8f, 0x18, 0x8b, 0xc7, 0x27, 0x58, 0xa9, 0x44, 0xc6, 0x1a, 0x08,
-    0xa2, 0xff, 0xde, 0x7d, 0x31, 0x0f, 0xf3, 0xc5, 0x8a, 0x82, 0xe7, 0x67,
-    0x70, 0xd3, 0x78, 0x41, 0x44, 0x47, 0xa6, 0xd3, 0x99, 0x7e, 0x3a, 0x42,
-    0x86, 0x2f, 0x8b, 0xaf, 0x9f, 0x76, 0xd2, 0xc5, 0xe3, 0xb0, 0x4b, 0x16,
-    0xe4, 0x0f, 0x05, 0x88, 0xef, 0xb3, 0xa3, 0x69, 0x62, 0xfe, 0x1e, 0x14,
-    0x3f, 0x8b, 0x15, 0x27, 0xa2, 0xe4, 0x97, 0xff, 0xb1, 0xc2, 0x30, 0xb0,
-    0x05, 0x8d, 0x12, 0xc5, 0xf3, 0xeb, 0x0d, 0x58, 0xb7, 0x0c, 0x3e, 0xd8,
-    0xe4, 0xab, 0xfe, 0xfb, 0xea, 0x2f, 0xb6, 0x69, 0x62, 0xff, 0xff, 0xfe,
-    0x07, 0x0b, 0x1b, 0xb3, 0x07, 0xf1, 0x18, 0x59, 0xdc, 0x30, 0x5b, 0x16,
-    0x37, 0x6b, 0x15, 0x88, 0xf3, 0xdc, 0xb1, 0xce, 0xaf, 0xff, 0xb5, 0x8c,
-    0x11, 0x83, 0x29, 0xdc, 0xe4, 0xeb, 0x17, 0xb3, 0x90, 0x58, 0xb9, 0xb7,
-    0x54, 0x93, 0x05, 0x8d, 0x58, 0xaf, 0x9e, 0xab, 0x0e, 0x88, 0x96, 0xfd,
-    0xb3, 0x1f, 0x91, 0xcb, 0x17, 0xfb, 0x86, 0x45, 0xcf, 0xc8, 0xd6, 0x2f,
-    0xf4, 0x82, 0x7a, 0xbf, 0x9c, 0x58, 0xa8, 0x8f, 0xb4, 0x8d, 0xef, 0xff,
-    0xf7, 0xb9, 0x86, 0xbe, 0x8c, 0x0f, 0xcf, 0xf7, 0x37, 0xee, 0xb1, 0x52,
-    0xb8, 0x39, 0xb3, 0xc6, 0x47, 0x00, 0x69, 0x7e, 0xf0, 0xa6, 0x72, 0xe6,
-    0x84, 0xd0, 0x64, 0x57, 0xf6, 0x13, 0x1c, 0x8e, 0xb1, 0x71, 0xbb, 0xac,
-    0x56, 0xe7, 0x8d, 0xa2, 0xcb, 0xff, 0xfd, 0xee, 0x07, 0xc3, 0x32, 0x1f,
-    0x97, 0xd0, 0x0e, 0xd0, 0x58, 0xbf, 0xe2, 0xee, 0x1c, 0xf4, 0xea, 0x25,
-    0x8b, 0xc5, 0x9f, 0x58, 0xbc, 0x4e, 0x12, 0xc5, 0xff, 0x6e, 0x26, 0xfe,
-    0x79, 0xbe, 0xb1, 0x43, 0x3f, 0x3c, 0x1c, 0xec, 0x76, 0xb1, 0x1b, 0xde,
-    0x85, 0x7d, 0xff, 0x9b, 0xbc, 0x7d, 0x39, 0xe4, 0xd5, 0x8b, 0xc1, 0xc9,
-    0x2c, 0x5e, 0xc7, 0x02, 0xc5, 0xb1, 0x62, 0xd8, 0x03, 0x5b, 0xd0, 0x72,
-    0xe7, 0xd9, 0x62, 0x96, 0x18, 0xb8, 0xbb, 0x58, 0xb1, 0x6e, 0xcc, 0x45,
-    0xd9, 0x25, 0x71, 0x00, 0x43, 0x57, 0xb3, 0xbf, 0x2c, 0x54, 0xaa, 0xe8,
-    0xc2, 0x37, 0x8d, 0x0b, 0x44, 0xed, 0x0f, 0xa8, 0xe4, 0x4b, 0xd8, 0x2d,
-    0x2c, 0x5e, 0x92, 0xf2, 0xc5, 0xa2, 0x58, 0xbf, 0xc0, 0x78, 0x7d, 0xc8,
-    0x0b, 0x17, 0xc2, 0xce, 0xc9, 0x62, 0xb6, 0x3e, 0x97, 0x13, 0x39, 0x9d,
-    0x82, 0x58, 0xb9, 0xc6, 0xb1, 0x51, 0xe6, 0xab, 0x82, 0x77, 0xfb, 0xb9,
-    0x0b, 0x84, 0x28, 0x96, 0x2e, 0x1c, 0x4b, 0x17, 0xfd, 0xac, 0x1f, 0xe4,
-    0x23, 0x89, 0x62, 0xfe, 0xfe, 0x0d, 0xcb, 0xcb, 0x16, 0xd9, 0x62, 0xef,
-    0xf1, 0x62, 0x8d, 0x35, 0x6c, 0x27, 0x7f, 0x13, 0x05, 0xec, 0xfa, 0xc5,
-    0xf4, 0x74, 0xeb, 0x16, 0x2a, 0x53, 0xd4, 0xc5, 0x9d, 0x12, 0x1c, 0xdf,
-    0xe3, 0x3e, 0x3b, 0x09, 0x62, 0x38, 0x84, 0x32, 0xeb, 0xf7, 0xc4, 0x6e,
-    0x6c, 0xb1, 0x7e, 0xc3, 0x9d, 0x8e, 0xb1, 0x71, 0xc0, 0xb1, 0x46, 0x23,
-    0xb4, 0x70, 0x82, 0xd1, 0x58, 0x0a, 0x2d, 0xf7, 0x57, 0x12, 0xd2, 0xd1,
-    0xaf, 0xed, 0x4f, 0x89, 0x80, 0xb1, 0x5a, 0x3d, 0xde, 0xa3, 0x0b, 0xfb,
-    0xb8, 0x14, 0xe7, 0x16, 0x2f, 0xfc, 0xd9, 0xf6, 0xfb, 0x67, 0xd9, 0x62,
-    0xff, 0x45, 0x98, 0x69, 0xb3, 0x12, 0xc5, 0xff, 0xb1, 0xf7, 0xcf, 0x49,
-    0x7b, 0x8b, 0x17, 0xfe, 0xe0, 0xba, 0x8c, 0xe1, 0xba, 0x92, 0x58, 0xa3,
-    0x11, 0x06, 0xe7, 0xd4, 0x62, 0x68, 0xff, 0x2e, 0x23, 0xce, 0xa8, 0x5d,
-    0x57, 0x6b, 0xb6, 0xaf, 0x38, 0x06, 0xd1, 0xb6, 0x5f, 0xde, 0xcd, 0xb3,
-    0x51, 0x2c, 0x5f, 0xbe, 0x60, 0x26, 0x3d, 0x62, 0xff, 0xf9, 0xf8, 0x67,
-    0xdb, 0x9e, 0x98, 0xb9, 0xfc, 0x58, 0xa9, 0x45, 0x7b, 0x18, 0x00, 0xb6,
-    0x96, 0x2f, 0xe1, 0x38, 0xdc, 0x9d, 0x62, 0xc6, 0xb9, 0xb8, 0x38, 0x65,
-    0xf9, 0xb9, 0xf6, 0x82, 0xc5, 0xf3, 0x41, 0xce, 0xb1, 0x7e, 0xdd, 0xb5,
-    0x9b, 0xac, 0x5f, 0xf0, 0xbb, 0x87, 0x0c, 0xe7, 0xb7, 0x58, 0xbf, 0x8b,
-    0xd0, 0xc0, 0x71, 0x62, 0xf1, 0xad, 0xc3, 0x11, 0x2f, 0xa2, 0xa6, 0x3f,
-    0xaf, 0xa3, 0xef, 0xd0, 0xb9, 0xad, 0x26, 0xe5, 0xf2, 0x70, 0xa3, 0x23,
-    0xbf, 0x7d, 0x9f, 0x69, 0x58, 0xbe, 0x6f, 0xb7, 0x6b, 0x14, 0xe7, 0x97,
-    0xd0, 0xa2, 0xf4, 0x27, 0xb5, 0x8b, 0xf8, 0xdd, 0x6b, 0x3b, 0xe2, 0xc5,
-    0xff, 0xf8, 0xb3, 0xbf, 0x19, 0xf6, 0xe8, 0x60, 0xfe, 0x2d, 0x96, 0x2f,
-    0xdf, 0x9d, 0xb0, 0x25, 0x8b, 0xf3, 0xe7, 0x46, 0xd2, 0xc5, 0x4a, 0x2c,
-    0x06, 0xbb, 0xc2, 0xab, 0xfb, 0x90, 0x7e, 0x08, 0xeb, 0x14, 0x73, 0xde,
-    0xf1, 0x7d, 0xfd, 0x9c, 0x83, 0x83, 0x16, 0x2f, 0x43, 0x3c, 0xb1, 0x50,
-    0x3c, 0xaf, 0x16, 0xd4, 0xaa, 0x91, 0xc8, 0x41, 0xf6, 0x46, 0xe3, 0xcd,
-    0x19, 0xf8, 0x9b, 0x2f, 0xf8, 0xb3, 0xc2, 0x01, 0xda, 0x0b, 0x17, 0xff,
-    0x86, 0xf8, 0x11, 0x9c, 0x97, 0xd9, 0xbc, 0xb1, 0x7f, 0xfd, 0xb1, 0x67,
-    0xb4, 0xe6, 0xe7, 0xdf, 0x22, 0x58, 0xbe, 0x7e, 0x4f, 0x6b, 0x17, 0xf6,
-    0xc6, 0x34, 0x1c, 0x96, 0x2b, 0x64, 0xca, 0x3b, 0x39, 0xd2, 0x67, 0xd4,
-    0x48, 0x8e, 0xfd, 0xde, 0xe5, 0x3d, 0x16, 0x2f, 0xe0, 0x8c, 0x88, 0x9c,
-    0x6b, 0x17, 0xff, 0x00, 0x85, 0xc2, 0xcf, 0x71, 0xf8, 0xb1, 0x58, 0x7e,
-    0xa4, 0x63, 0x7e, 0x33, 0x85, 0x3a, 0x58, 0xbe, 0x7f, 0x14, 0xac, 0x5b,
-    0x0e, 0x79, 0x5c, 0x29, 0xbf, 0x9b, 0x51, 0x41, 0xfe, 0xb1, 0x7f, 0x85,
-    0xb7, 0xdf, 0xa6, 0x44, 0xb1, 0x7f, 0x07, 0xff, 0xc9, 0x6e, 0xb1, 0x7c,
-    0x52, 0x7e, 0x2c, 0x5f, 0x67, 0xd8, 0xeb, 0x17, 0x37, 0x7c, 0x3f, 0x4f,
-    0x18, 0x06, 0x45, 0x52, 0xaa, 0x57, 0x13, 0x1e, 0x14, 0x3f, 0x6a, 0x62,
-    0x7e, 0x17, 0x8a, 0x15, 0x97, 0xec, 0x20, 0x60, 0xd6, 0x2f, 0xf0, 0xff,
-    0x3a, 0x1b, 0x9d, 0x62, 0xee, 0x71, 0x62, 0xd8, 0xb1, 0x7f, 0xce, 0x6b,
-    0xf8, 0xb3, 0xa8, 0xcd, 0x1a, 0x9e, 0x83, 0x17, 0xff, 0xb3, 0x9f, 0x7f,
-    0xe6, 0xb5, 0x9e, 0xe2, 0xc5, 0xfc, 0x40, 0xc3, 0xb7, 0x6b, 0x17, 0xdf,
-    0xfb, 0xf1, 0x62, 0x9c, 0xf4, 0x58, 0xba, 0xa0, 0x9c, 0x9e, 0xe4, 0xf1,
-    0x2e, 0x92, 0xa7, 0x48, 0x4d, 0xdf, 0xff, 0xe2, 0xcd, 0xfd, 0xe9, 0xf7,
-    0x22, 0x2c, 0x08, 0xc9, 0xeb, 0x16, 0x2f, 0xfd, 0xbc, 0x9f, 0xf9, 0xcc,
-    0x72, 0x58, 0xa9, 0x45, 0x3f, 0xda, 0x6f, 0xff, 0xfd, 0x09, 0xd7, 0x70,
-    0xe1, 0x9c, 0x14, 0xf6, 0x4d, 0xef, 0xb4, 0x4b, 0x17, 0xed, 0x4f, 0x49,
-    0xd2, 0xc5, 0xff, 0xff, 0xec, 0x2f, 0xbe, 0x6f, 0xf9, 0xd3, 0x73, 0xed,
-    0xdc, 0x39, 0xee, 0x3a, 0xc5, 0xff, 0xff, 0xd3, 0xec, 0xf0, 0xb7, 0xcf,
-    0xbe, 0x6f, 0x3e, 0xfe, 0x0f, 0x23, 0xd6, 0x2f, 0xbc, 0x71, 0x12, 0xc5,
-    0xed, 0xf0, 0xeb, 0x17, 0xd9, 0xb8, 0xa2, 0x58, 0xa9, 0x3c, 0x3d, 0x0f,
-    0x5f, 0xe3, 0x33, 0x9c, 0x7c, 0x09, 0x62, 0xa2, 0x3d, 0x6d, 0x10, 0xdf,
-    0xff, 0xff, 0x63, 0x8c, 0xcc, 0xfb, 0xeb, 0xec, 0x67, 0xf0, 0x65, 0x8d,
-    0xde, 0x6c, 0xb1, 0x52, 0x9a, 0xeb, 0xc2, 0xf3, 0xe4, 0x77, 0xff, 0xfd,
-    0x82, 0xec, 0xd0, 0x34, 0x5c, 0xcd, 0x60, 0xff, 0x82, 0xed, 0x62, 0xfe,
-    0x62, 0x30, 0x72, 0x4b, 0x17, 0xb6, 0xdf, 0xcb, 0x15, 0x2b, 0x9d, 0xb9,
-    0x0f, 0xae, 0xc8, 0x9d, 0xc7, 0xe5, 0x44, 0xf1, 0xc8, 0xf4, 0xbc, 0x68,
-    0x26, 0xb0, 0xcb, 0x6f, 0xff, 0x3f, 0x84, 0xdb, 0x6f, 0xf7, 0x1b, 0x92,
-    0xc5, 0xef, 0x1a, 0xeb, 0x15, 0xd7, 0x9f, 0x49, 0x25, 0xdf, 0x61, 0xe7,
-    0x75, 0x8b, 0xfb, 0x77, 0xdb, 0x3b, 0xf2, 0xc5, 0x40, 0xf5, 0x02, 0x23,
-    0xb4, 0x72, 0xc5, 0xfc, 0x03, 0x27, 0x76, 0x0d, 0x62, 0xff, 0xa7, 0x0a,
-    0x06, 0x4f, 0x49, 0x58, 0xa3, 0x51, 0x00, 0x42, 0xbe, 0x31, 0xbf, 0x6b,
-    0x06, 0xd0, 0x58, 0xa9, 0x47, 0xdb, 0xc2, 0x8d, 0x8c, 0x2f, 0x4e, 0xa0,
-    0xb1, 0x7f, 0xff, 0x0b, 0xb8, 0x70, 0xc9, 0x21, 0xfe, 0x63, 0xb3, 0x52,
-    0xb1, 0x7f, 0x0a, 0x23, 0x0e, 0xde, 0x58, 0xad, 0x22, 0x47, 0xec, 0x14,
-    0x63, 0xe1, 0x46, 0x46, 0x88, 0x1d, 0x75, 0x15, 0x97, 0xad, 0xa3, 0xec,
-    0x84, 0xa2, 0xf1, 0xcf, 0x31, 0x64, 0xa0, 0x13, 0x65, 0x0f, 0xef, 0x39,
-    0xe9, 0xdc, 0xa2, 0xf7, 0x95, 0x3b, 0x14, 0xf6, 0x4e, 0xa7, 0x3c, 0xcf,
-    0x2e, 0xcb, 0xf3, 0xc3, 0x00, 0x87, 0x79, 0x4e, 0x34, 0xf2, 0x70, 0x7b,
-    0xd3, 0xdd, 0x82, 0x8c, 0x03, 0xa4, 0x6e, 0xa1, 0x19, 0x75, 0x42, 0xba,
-    0xff, 0xfc, 0x5b, 0x99, 0xf9, 0x7d, 0x39, 0xde, 0x3a, 0x4e, 0xb1, 0x7b,
-    0x93, 0xda, 0xc5, 0xed, 0xb3, 0x65, 0x8b, 0xf8, 0xbc, 0x02, 0x9d, 0x2c,
-    0x5f, 0xe6, 0x08, 0xc6, 0x1b, 0x6c, 0xb1, 0x7f, 0xff, 0x60, 0xcb, 0x18,
-    0x23, 0x18, 0xbd, 0x16, 0x6b, 0x16, 0x2f, 0xff, 0xff, 0x73, 0x67, 0xc2,
-    0xf1, 0xc5, 0x25, 0xec, 0xe3, 0xe1, 0x0e, 0x49, 0x62, 0xbb, 0x46, 0x7f,
-    0x96, 0xef, 0xff, 0x98, 0x7c, 0x62, 0xf1, 0x91, 0x3f, 0x80, 0xcb, 0x17,
-    0xff, 0x7b, 0x83, 0xfc, 0xc7, 0x0b, 0xef, 0xa5, 0x8a, 0xc4, 0xfc, 0x34,
-    0x5a, 0xd1, 0x82, 0x91, 0x20, 0x94, 0x6f, 0x43, 0xbd, 0xd6, 0x2f, 0xfc,
-    0x7d, 0x67, 0x63, 0xc7, 0x23, 0x56, 0x2f, 0x13, 0x8d, 0x62, 0xe6, 0x08,
-    0xc3, 0xdc, 0x89, 0x02, 0xe8, 0x01, 0x62, 0xed, 0x8e, 0xb1, 0x46, 0x1b,
-    0x17, 0x18, 0xbf, 0xff, 0x13, 0xec, 0x63, 0xe1, 0x66, 0xfd, 0x5e, 0xc3,
-    0xac, 0x5e, 0x3c, 0xee, 0xb1, 0x7b, 0xbf, 0xe4, 0x47, 0xee, 0x05, 0x9b,
-    0xff, 0xf8, 0xef, 0xdc, 0x38, 0x58, 0x3f, 0xcc, 0x76, 0x6a, 0x56, 0x2f,
-    0xff, 0xec, 0xd9, 0x8b, 0xdc, 0x9d, 0xcc, 0x39, 0xdc, 0xb7, 0x58, 0xbf,
-    0xa1, 0xc8, 0xa1, 0x31, 0x2c, 0x50, 0xd1, 0x1f, 0xda, 0xf5, 0xff, 0xec,
-    0x1f, 0xde, 0x23, 0x1f, 0xf2, 0x79, 0x58, 0xbe, 0x69, 0xee, 0x0b, 0x16,
-    0x19, 0x1f, 0x77, 0x12, 0xea, 0x51, 0x72, 0xd0, 0x92, 0xbe, 0x81, 0x49,
-    0xd6, 0x2f, 0x14, 0x9d, 0x62, 0xff, 0xbf, 0x9b, 0xce, 0xbb, 0x87, 0x0c,
-    0x37, 0xd0, 0x22, 0xbf, 0xf8, 0xc2, 0xce, 0xf3, 0x9f, 0x2c, 0x35, 0x62,
-    0xbb, 0x44, 0xc4, 0x4a, 0x57, 0xf8, 0xcd, 0x63, 0xfe, 0x46, 0xb1, 0x52,
-    0x7b, 0x24, 0x4b, 0x4b, 0x16, 0xfa, 0xc5, 0x46, 0xc5, 0xf6, 0xe1, 0x97,
-    0x4c, 0x7a, 0xc5, 0x4a, 0xff, 0xb8, 0xd6, 0x70, 0x78, 0xd9, 0x41, 0xee,
-    0x9d, 0xa7, 0xcf, 0xb0, 0xb4, 0x26, 0x00, 0x6a, 0x51, 0xd3, 0x0a, 0x35,
-    0x5e, 0x87, 0xc1, 0x93, 0x5f, 0xff, 0x16, 0x74, 0x33, 0xb8, 0x4e, 0xc5,
-    0x82, 0x95, 0x8b, 0xec, 0x23, 0x63, 0xd6, 0x2f, 0xff, 0xff, 0xdf, 0x7f,
-    0x7f, 0x35, 0x3d, 0x0c, 0x38, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71,
-    0x62, 0x9d, 0x16, 0x5c, 0x26, 0xad, 0x26, 0x4f, 0xe8, 0xc1, 0x6f, 0xff,
-    0x8a, 0x2f, 0xcb, 0xe9, 0xce, 0xf1, 0xd2, 0x75, 0x8b, 0x9c, 0xeb, 0x17,
-    0x9e, 0x77, 0x58, 0xbf, 0xfe, 0xee, 0x04, 0xf1, 0x18, 0x59, 0xee, 0x3e,
-    0x96, 0x29, 0xd1, 0xb1, 0x12, 0x91, 0x0b, 0x84, 0x3b, 0x7f, 0x98, 0xb0,
-    0x78, 0xff, 0x58, 0xbf, 0xcf, 0x17, 0xd8, 0xa6, 0x56, 0x2b, 0xb3, 0xe3,
-    0x39, 0x8d, 0xff, 0xfe, 0xd6, 0xb0, 0x66, 0x77, 0x09, 0xdb, 0x59, 0xce,
-    0x4f, 0x6b, 0x17, 0xfe, 0x03, 0xe6, 0x8c, 0xe9, 0x23, 0x8f, 0x58, 0xa3,
-    0xa3, 0x38, 0x22, 0x3e, 0xa6, 0x6b, 0xbf, 0x05, 0x8b, 0x81, 0xc5, 0x8b,
-    0x87, 0x8b, 0x17, 0xe2, 0xef, 0x34, 0x64, 0x0f, 0x1f, 0x83, 0x1d, 0x06,
-    0x2c, 0x6a, 0xc5, 0x6e, 0x7c, 0x5e, 0x4f, 0xbf, 0xfc, 0x29, 0x2f, 0x70,
-    0xc9, 0xe6, 0xa7, 0x8b, 0x17, 0xf8, 0xbc, 0x67, 0x30, 0xa5, 0x62, 0xfe,
-    0x84, 0x5f, 0x7e, 0xfc, 0xb1, 0x52, 0x7c, 0x8c, 0x67, 0x7f, 0xa1, 0xc9,
-    0x37, 0xcf, 0xb2, 0xc5, 0xfe, 0x11, 0x7a, 0x7a, 0x37, 0xd6, 0x2f, 0xfc,
-    0xc1, 0x7b, 0x3f, 0x84, 0xd0, 0x58, 0xa8, 0x1f, 0x99, 0x1a, 0xdf, 0xec,
-    0x34, 0xc9, 0xdf, 0x0e, 0xb1, 0x7f, 0xfb, 0x04, 0x46, 0xfb, 0x53, 0xd8,
-    0x39, 0x2b, 0x17, 0x38, 0xd6, 0x2b, 0x11, 0x33, 0xd9, 0xb0, 0x13, 0x2f,
-    0xe3, 0xe1, 0x7a, 0x3b, 0x16, 0x2f, 0xcd, 0xc3, 0xc9, 0x2c, 0x5f, 0x1e,
-    0x73, 0xcb, 0x17, 0xa7, 0x73, 0x30, 0xfe, 0x48, 0xc2, 0x38, 0x9e, 0xfd,
-    0x25, 0xe3, 0x06, 0xb1, 0x7f, 0x49, 0xf3, 0x08, 0xd5, 0x8b, 0xf7, 0x8c,
-    0x07, 0x60, 0x58, 0xa7, 0x44, 0x17, 0xca, 0x44, 0x5b, 0x7f, 0xfb, 0xef,
-    0xbf, 0xf0, 0xce, 0x0b, 0xf3, 0x1e, 0xb1, 0x7f, 0x14, 0xf7, 0x07, 0x25,
-    0x8a, 0x58, 0xbf, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x28, 0x67, 0xd6, 0x45,
-    0xbe, 0x0c, 0xbf, 0xef, 0x4c, 0x39, 0x14, 0x27, 0x65, 0x8b, 0x66, 0x26,
-    0x4b, 0xdc, 0x2e, 0xfc, 0x5d, 0x7f, 0xff, 0xed, 0xc6, 0x2d, 0x83, 0x26,
-    0xf4, 0x81, 0xe0, 0xfe, 0x29, 0x02, 0xc5, 0xff, 0xff, 0x0b, 0x9f, 0x68,
-    0x19, 0xe7, 0x30, 0xb0, 0xf9, 0x25, 0xb2, 0xc5, 0xff, 0xf7, 0xbf, 0x80,
-    0x30, 0xf3, 0x9e, 0x1e, 0x12, 0xc5, 0xb4, 0xb1, 0x60, 0x96, 0x2f, 0xe6,
-    0x1e, 0xb4, 0x2d, 0x96, 0x2f, 0xd3, 0x85, 0xe8, 0xe5, 0x8b, 0x46, 0x8b,
-    0x15, 0x88, 0x96, 0x34, 0x4b, 0x71, 0x33, 0x98, 0x70, 0xaa, 0xfb, 0xcf,
-    0xac, 0x58, 0xb7, 0x66, 0x1f, 0x6e, 0x25, 0xd6, 0x26, 0xf8, 0xd1, 0xa9,
-    0xd6, 0x2a, 0x7a, 0xd3, 0x77, 0x23, 0xe4, 0xbf, 0xff, 0xff, 0xef, 0x8b,
-    0x85, 0x83, 0xc7, 0xf9, 0x9b, 0xfd, 0xfa, 0xbe, 0x2e, 0x16, 0x6c, 0xc6,
-    0x1a, 0x6a, 0xc5, 0x6c, 0xc8, 0x7d, 0x1c, 0x2b, 0xfb, 0x20, 0x8a, 0x15,
-    0x3a, 0x85, 0xd1, 0xe1, 0x53, 0xf8, 0x62, 0x94, 0x6a, 0x9e, 0x95, 0x6b,
-    0xd4, 0x6f, 0x7f, 0xff, 0x16, 0x05, 0x9b, 0x19, 0x1f, 0x8c, 0x69, 0x9a,
-    0x0b, 0x4b, 0x17, 0xff, 0x6b, 0x0f, 0xf9, 0x33, 0xa0, 0xe3, 0xf1, 0x62,
-    0xff, 0xff, 0x60, 0x59, 0xb0, 0xfe, 0x22, 0xdc, 0xb3, 0xdf, 0x7e, 0xd6,
-    0x2f, 0xff, 0xff, 0xa1, 0xc2, 0x63, 0x7f, 0x9f, 0xee, 0x4c, 0x2c, 0x16,
-    0x7b, 0xf9, 0xb4, 0xac, 0x5f, 0xff, 0xf8, 0x5d, 0xc3, 0x86, 0x63, 0x82,
-    0x4b, 0x3b, 0xf0, 0xfe, 0x20, 0x96, 0x2f, 0xff, 0xff, 0x3e, 0x1f, 0x3e,
-    0xf8, 0x73, 0x0b, 0x3d, 0xfc, 0x87, 0xdf, 0x0e, 0xb1, 0x7f, 0xff, 0xf3,
-    0xe7, 0xb8, 0x59, 0xd3, 0x9b, 0xfe, 0x42, 0xea, 0xcf, 0xbe, 0x1d, 0x62,
-    0xff, 0xff, 0xe8, 0x3f, 0x0b, 0x3a, 0x7f, 0x22, 0xfc, 0x94, 0x46, 0x36,
-    0xef, 0xd1, 0x62, 0xff, 0xff, 0xba, 0xbf, 0x3f, 0x73, 0x58, 0xe7, 0x73,
-    0x33, 0xef, 0x87, 0x58, 0xbf, 0xfc, 0x17, 0x70, 0xe1, 0x67, 0x4f, 0x6b,
-    0x02, 0x58, 0xbf, 0xfc, 0xf8, 0x11, 0x67, 0x33, 0xff, 0x7e, 0x2c, 0x5b,
-    0x37, 0x4f, 0xcb, 0xb7, 0x77, 0x78, 0x66, 0xaf, 0x28, 0x5f, 0xff, 0xcf,
-    0x81, 0x16, 0x6d, 0x82, 0xf1, 0x31, 0xad, 0xc5, 0x8b, 0xff, 0x66, 0xbf,
-    0x26, 0x37, 0x85, 0x2b, 0x17, 0xff, 0x73, 0x37, 0x33, 0xb8, 0x70, 0x9e,
-    0x25, 0x8b, 0xff, 0xda, 0xcf, 0x73, 0xab, 0xd3, 0xcf, 0xbe, 0x2c, 0x5f,
-    0xf9, 0xb5, 0xcf, 0x3e, 0x6c, 0x52, 0xb1, 0x7e, 0x2c, 0xe9, 0xfc, 0xd2,
-    0x22, 0xf8, 0x9b, 0x69, 0xf2, 0x62, 0x81, 0x43, 0x52, 0x9d, 0x38, 0x2d,
-    0x46, 0xa7, 0x7f, 0xff, 0xd8, 0x46, 0x99, 0xa9, 0xe8, 0xfe, 0xe6, 0x1a,
-    0xfa, 0x6e, 0xd6, 0x2f, 0xff, 0xff, 0xef, 0x67, 0xcb, 0x3a, 0x19, 0x9a,
-    0x9f, 0x3e, 0xee, 0x33, 0x27, 0xc5, 0x3d, 0xc1, 0x62, 0xb6, 0x5f, 0xb7,
-    0x1b, 0x26, 0xe9, 0x7d, 0xb2, 0x69, 0xff, 0xee, 0x25, 0x29, 0x9f, 0x8a,
-    0x1e, 0x8f, 0x74, 0x32, 0x9e, 0xa6, 0xba, 0x96, 0xc6, 0xfd, 0xe9, 0x14,
-    0x02, 0xa4, 0x38, 0xdf, 0x9b, 0x9a, 0x6e, 0x2c, 0x5f, 0xfe, 0x71, 0x98,
-    0x77, 0x32, 0x46, 0xd1, 0x71, 0x62, 0xff, 0x7e, 0x76, 0x30, 0xb0, 0x6b,
-    0x17, 0xef, 0x64, 0x42, 0x89, 0x62, 0xa2, 0x3e, 0x0e, 0xa3, 0x5b, 0xf7,
-    0xdf, 0xd8, 0x75, 0x8b, 0x41, 0x62, 0xff, 0xef, 0xb9, 0x0c, 0x3d, 0xcb,
-    0x3f, 0x8b, 0x17, 0xfe, 0x87, 0xa6, 0x07, 0x9c, 0x21, 0xac, 0x5f, 0xed,
-    0xb8, 0xff, 0xfc, 0xec, 0xb1, 0x6c, 0xec, 0xfd, 0x1c, 0xfa, 0xfe, 0xf7,
-    0x7b, 0xbf, 0xe2, 0x58, 0xa3, 0x13, 0x72, 0xeb, 0x49, 0xa0, 0x51, 0x10,
-    0x91, 0x42, 0xe7, 0x84, 0xf5, 0x2a, 0xa0, 0xb6, 0x94, 0x3f, 0x7f, 0x8d,
-    0x2c, 0xe8, 0x59, 0xc5, 0x8a, 0x82, 0xb0, 0xbd, 0x4a, 0xaa, 0x22, 0xcb,
-    0xf7, 0x39, 0x25, 0xba, 0xc5, 0xff, 0xf1, 0x44, 0x67, 0xf7, 0x7e, 0x60,
-    0xf6, 0xc0, 0x96, 0x2f, 0xff, 0xff, 0xb0, 0x5f, 0x33, 0xde, 0x9f, 0x72,
-    0x22, 0xc0, 0x8c, 0xdf, 0xef, 0xf1, 0x79, 0x62, 0xb1, 0x30, 0x26, 0x29,
-    0x25, 0x5b, 0xde, 0xce, 0x2c, 0x5b, 0x6f, 0x9e, 0x5f, 0x8b, 0xaf, 0xd0,
-    0x9e, 0xe1, 0xc5, 0x8b, 0xff, 0xff, 0xff, 0x61, 0x1a, 0x63, 0xfc, 0x51,
-    0x91, 0x3f, 0xa4, 0xe4, 0xc6, 0xfd, 0xe3, 0x33, 0xfd, 0x82, 0x46, 0x91,
-    0x7f, 0xff, 0x9f, 0x5f, 0xce, 0xdb, 0xb3, 0x0e, 0x42, 0xf1, 0x9d, 0x38,
-    0xb1, 0x7f, 0xff, 0xe7, 0x08, 0x62, 0xd1, 0x82, 0x9d, 0xb9, 0xbf, 0xc5,
-    0xfe, 0xd8, 0x25, 0x8b, 0xff, 0xfb, 0x3a, 0x49, 0x19, 0xc7, 0xd3, 0x01,
-    0x8a, 0x29, 0x58, 0xad, 0xd1, 0xa3, 0xf7, 0x5b, 0xfe, 0x2c, 0x10, 0x46,
-    0x4f, 0x48, 0xf5, 0x8b, 0x6d, 0xda, 0xa6, 0xa7, 0x2a, 0x3c, 0x28, 0xf9,
-    0x19, 0xcf, 0x51, 0x25, 0x62, 0xaf, 0x41, 0x4a, 0x93, 0xbf, 0xff, 0xb1,
-    0xc1, 0xc3, 0x03, 0xf3, 0xf0, 0xb3, 0xa3, 0x8d, 0x62, 0xff, 0xd9, 0x17,
-    0x70, 0xe3, 0x9d, 0xa2, 0x58, 0xb7, 0x56, 0x91, 0x41, 0xc5, 0xeb, 0xf1,
-    0x67, 0xbe, 0xeb, 0x17, 0xfe, 0xfb, 0xe6, 0xf3, 0xef, 0xbe, 0x2c, 0x56,
-    0x22, 0x44, 0xd2, 0xce, 0xa2, 0x7b, 0x87, 0x8b, 0x15, 0x2d, 0xf3, 0xde,
-    0x46, 0x04, 0xf1, 0xb7, 0x7e, 0xb2, 0x9c, 0x69, 0x6a, 0x05, 0x38, 0xf2,
-    0x28, 0xd7, 0x23, 0x8c, 0xee, 0xcd, 0x2c, 0x5b, 0xa9, 0x62, 0xd1, 0xa2,
-    0xc5, 0xe9, 0xfe, 0x2c, 0x58, 0xeb, 0x17, 0xff, 0xe9, 0x39, 0xad, 0xd9,
-    0x8c, 0x5e, 0x8b, 0x35, 0x8b, 0x17, 0xf4, 0x30, 0xec, 0x40, 0x58, 0xaf,
-    0xa2, 0x15, 0x96, 0x2f, 0xb3, 0xf3, 0x12, 0xc5, 0x46, 0x88, 0xdc, 0xfc,
-    0x25, 0xd8, 0x8a, 0xee, 0x62, 0xc5, 0xc7, 0xdc, 0xc3, 0xd0, 0x73, 0x9b,
-    0xf6, 0x9f, 0xb8, 0x71, 0x62, 0xff, 0xfe, 0x1f, 0xdf, 0x0f, 0x9b, 0xff,
-    0x3b, 0x81, 0x3c, 0x4b, 0x17, 0xfd, 0x2f, 0xa7, 0x88, 0xcf, 0x71, 0x62,
-    0xff, 0xc5, 0x86, 0x7a, 0x22, 0x93, 0x99, 0x88, 0x98, 0xfa, 0xed, 0xff,
-    0xf6, 0x0f, 0x0e, 0x67, 0x5c, 0xeb, 0x91, 0xaf, 0xac, 0x33, 0xa7, 0x16,
-    0x2f, 0xff, 0x71, 0x88, 0xc6, 0x2f, 0x45, 0x9a, 0xc5, 0x8b, 0x6c, 0x34,
-    0xf4, 0x35, 0x0c, 0x2f, 0xab, 0xf1, 0xb6, 0xd1, 0xeb, 0x17, 0xef, 0xb9,
-    0xca, 0x56, 0x2f, 0x84, 0x40, 0xe2, 0xc5, 0x00, 0xf2, 0xbc, 0x4f, 0x7f,
-    0xfe, 0xe3, 0xe1, 0x00, 0xc2, 0xce, 0x85, 0x9c, 0xe8, 0xb1, 0x7f, 0xcf,
-    0x84, 0x03, 0x3a, 0xeb, 0x1b, 0xc6, 0xeb, 0x17, 0xdb, 0x96, 0x74, 0x31,
-    0x14, 0x9c, 0x58, 0xbf, 0xe3, 0x5b, 0xdc, 0x88, 0x9c, 0x25, 0x8b, 0xd9,
-    0xa8, 0x96, 0x2f, 0x1d, 0xf8, 0xb1, 0x4e, 0x6e, 0xd8, 0x7a, 0xfd, 0xf6,
-    0x3b, 0xf1, 0x62, 0x8d, 0x45, 0xf7, 0xdd, 0xf8, 0x3f, 0x5a, 0x4c, 0xb0,
-    0xa1, 0xf7, 0x7f, 0xfb, 0xe2, 0xc2, 0x34, 0xcf, 0x77, 0x0c, 0x25, 0x8b,
-    0xfd, 0x8c, 0x73, 0x23, 0xa4, 0xeb, 0x17, 0xff, 0xa1, 0x3c, 0xf8, 0xb5,
-    0x9e, 0xf3, 0x9d, 0x62, 0x86, 0x8c, 0xfd, 0xd3, 0x7b, 0x37, 0xbf, 0xf1,
-    0x60, 0x8d, 0xd3, 0xc9, 0xf1, 0x62, 0xfe, 0x11, 0x66, 0xc2, 0xed, 0x62,
-    0xff, 0xf6, 0x38, 0xfe, 0xe7, 0x98, 0xff, 0xe6, 0xcb, 0x17, 0xff, 0xd2,
-    0x61, 0x60, 0xfe, 0xe6, 0x8e, 0x4d, 0x02, 0xc5, 0x69, 0x19, 0xfe, 0x30,
-    0x12, 0x6d, 0x62, 0xa6, 0x6d, 0x43, 0xdc, 0xe6, 0x45, 0x18, 0x6d, 0xff,
-    0xd3, 0x9c, 0xf7, 0x24, 0xd3, 0x00, 0x12, 0xc5, 0xfe, 0xd1, 0xbe, 0x36,
-    0x4a, 0x25, 0x8b, 0xff, 0xde, 0xfe, 0x75, 0x7a, 0x2c, 0x8f, 0x62, 0x02,
-    0xc5, 0xfe, 0x93, 0xb1, 0x77, 0x09, 0x58, 0xac, 0x45, 0xd9, 0x1b, 0xf9,
-    0x46, 0xff, 0xfb, 0x27, 0xb3, 0x3a, 0x78, 0xcd, 0x4f, 0xe6, 0x25, 0x8b,
-    0x86, 0x75, 0x8b, 0xff, 0x38, 0x0c, 0x2c, 0xe8, 0xfa, 0x65, 0x8b, 0x7d,
-    0x62, 0xff, 0xe3, 0x3f, 0x2f, 0xee, 0x4e, 0xd9, 0xc5, 0x8a, 0x93, 0xd8,
-    0xd0, 0x95, 0x62, 0x2e, 0x45, 0x09, 0x8b, 0xff, 0x7e, 0x5f, 0xdc, 0x72,
-    0xee, 0x0b, 0x17, 0xfe, 0x70, 0x8c, 0xfc, 0xbe, 0x85, 0x1e, 0xb1, 0x40,
-    0x44, 0x1f, 0x8f, 0xe9, 0xd5, 0x11, 0x7c, 0xb9, 0x95, 0xbd, 0x0d, 0x11,
-    0x42, 0xaa, 0xf8, 0x23, 0x39, 0x12, 0xc5, 0xbc, 0xb1, 0x52, 0x6e, 0x58,
-    0x9e, 0xff, 0xc5, 0xb1, 0x67, 0x4e, 0x0a, 0x7b, 0x58, 0xbf, 0xef, 0xcf,
-    0x66, 0x75, 0xce, 0x80, 0x75, 0x8b, 0xec, 0xe9, 0x24, 0xb1, 0x7d, 0xdc,
-    0x1e, 0x39, 0x62, 0xbe, 0x79, 0x5e, 0x23, 0xa1, 0xa2, 0xc3, 0x90, 0x8e,
-    0xa9, 0x4c, 0x6b, 0x68, 0x79, 0x54, 0xb2, 0x97, 0x60, 0x95, 0x8b, 0xef,
-    0x38, 0xb0, 0x49, 0x1c, 0x96, 0x4b, 0xe8, 0x46, 0x8a, 0x33, 0x9b, 0xf7,
-    0x4e, 0xaf, 0x67, 0xd6, 0x2c, 0x4b, 0x17, 0xff, 0x7d, 0xf2, 0x2f, 0xbe,
-    0xdd, 0xc1, 0xd6, 0x2d, 0xba, 0xc5, 0xff, 0xb3, 0x82, 0x93, 0x79, 0x3a,
-    0x89, 0x62, 0x9d, 0x1b, 0x5a, 0x2e, 0x21, 0x1e, 0x88, 0xe1, 0x09, 0xdf,
-    0xff, 0x09, 0x88, 0xcf, 0x7e, 0x7d, 0xcf, 0xb4, 0x16, 0x2e, 0x61, 0xac,
-    0x5f, 0xc5, 0x91, 0x40, 0x5d, 0x4b, 0x17, 0xd0, 0x16, 0xde, 0x58, 0xb6,
-    0xa0, 0x7d, 0xc6, 0x8b, 0xf6, 0x65, 0x7f, 0xff, 0xff, 0xfe, 0xf7, 0x3f,
-    0x8e, 0x3f, 0xe6, 0xef, 0xad, 0x38, 0x4f, 0x84, 0x6f, 0x30, 0x7f, 0x16,
-    0xc6, 0x34, 0x58, 0xcb, 0x17, 0x36, 0xeb, 0x17, 0xed, 0x64, 0x73, 0x81,
-    0x62, 0xff, 0x6f, 0xf7, 0xf9, 0x0b, 0x65, 0x8b, 0xf4, 0xf6, 0x0d, 0x4a,
-    0xc5, 0x40, 0xf7, 0xfc, 0x6d, 0x5b, 0x22, 0xb0, 0xa1, 0x15, 0x7b, 0xd9,
-    0xd7, 0xac, 0x5f, 0x40, 0xa4, 0xeb, 0x14, 0x62, 0x7c, 0x9d, 0x6c, 0x2d,
-    0x26, 0x18, 0x98, 0x50, 0x22, 0x2b, 0x7d, 0x62, 0xff, 0xc4, 0xdd, 0xf2,
-    0x5f, 0x66, 0xf2, 0xc5, 0x00, 0xf4, 0x7a, 0x09, 0x52, 0xc5, 0xe7, 0x2c,
-    0x58, 0xb7, 0x30, 0xd3, 0xc4, 0x19, 0x79, 0xe7, 0x8b, 0x17, 0xef, 0x00,
-    0x32, 0x82, 0xc5, 0xe0, 0xf3, 0x8b, 0x16, 0x9c, 0x3c, 0x83, 0x4a, 0xaf,
-    0xfe, 0x39, 0x85, 0x9f, 0xf1, 0x63, 0x44, 0xb1, 0x76, 0x7d, 0x62, 0xa5,
-    0x35, 0x9c, 0x4b, 0xf9, 0x39, 0x32, 0x08, 0x9e, 0x39, 0x16, 0xd2, 0xb1,
-    0x7f, 0xf7, 0x70, 0xd3, 0x9d, 0xa6, 0x29, 0x89, 0x62, 0xff, 0xfe, 0xe6,
-    0x0f, 0x52, 0x11, 0x9f, 0x67, 0xe7, 0xf0, 0x0b, 0x14, 0x6a, 0x2d, 0x62,
-    0x11, 0x24, 0x7b, 0xb0, 0x6b, 0x14, 0x63, 0x6b, 0x93, 0xd6, 0x0b, 0xf5,
-    0xa2, 0xb2, 0x2f, 0xb4, 0x69, 0x10, 0xa6, 0x2e, 0x64, 0x6c, 0xbb, 0xa5,
-    0xb4, 0x2f, 0xf9, 0x28, 0x6f, 0xd2, 0x80, 0xc5, 0x18, 0x6f, 0x43, 0x1b,
-    0xee, 0x16, 0x74, 0x58, 0xbe, 0x14, 0x33, 0x8b, 0x17, 0x9e, 0x46, 0xb1,
-    0x40, 0x3e, 0x32, 0x24, 0x08, 0x8e, 0xf0, 0xbd, 0xc5, 0x8b, 0xf7, 0x57,
-    0xf0, 0x47, 0x58, 0xa2, 0x3c, 0xa1, 0x0f, 0x5f, 0x9f, 0xdc, 0xc0, 0x2c,
-    0x5e, 0xe8, 0xfd, 0x16, 0x2f, 0x8f, 0xc6, 0x82, 0xc5, 0xbf, 0x87, 0x88,
-    0x22, 0x1b, 0xff, 0xec, 0xd7, 0x6d, 0x11, 0x9f, 0x7d, 0x16, 0x6c, 0xb1,
-    0x7f, 0xff, 0xbd, 0xf9, 0x88, 0xc2, 0xcf, 0xbf, 0xb8, 0x2d, 0xc5, 0x2b,
-    0x14, 0x6a, 0x2d, 0xd9, 0x4e, 0xe1, 0x47, 0x2c, 0x51, 0x1b, 0xe0, 0x88,
-    0xec, 0x05, 0x8b, 0xec, 0x89, 0xf4, 0xb1, 0x58, 0x6d, 0x7b, 0x12, 0xbf,
-    0xf8, 0x80, 0x58, 0xf1, 0x7e, 0x48, 0xd5, 0x8a, 0x73, 0xe5, 0x62, 0x1b,
-    0xc4, 0x23, 0xac, 0x5f, 0xb9, 0xe7, 0x9e, 0xd6, 0x2f, 0xfa, 0x7f, 0x83,
-    0x14, 0x4c, 0x4b, 0x15, 0x03, 0xe2, 0xe1, 0x4d, 0xd9, 0xd1, 0x62, 0xff,
-    0xff, 0x9a, 0x23, 0x39, 0xcc, 0xfe, 0xb5, 0x81, 0x16, 0x04, 0xc0, 0x58,
-    0xbf, 0x49, 0x7d, 0xa0, 0xb1, 0x7f, 0xde, 0xcd, 0xa7, 0x8f, 0xac, 0x58,
-    0xbd, 0x23, 0x95, 0x8a, 0x19, 0xfe, 0x76, 0x4e, 0x73, 0x9a, 0x58, 0xa5,
-    0x8b, 0xfe, 0xf6, 0x6d, 0x3c, 0x7d, 0x62, 0xc5, 0xe9, 0x1c, 0xac, 0x5e,
-    0xe3, 0x44, 0x62, 0x27, 0x64, 0xc3, 0x03, 0x3b, 0x0c, 0x39, 0xcd, 0xb0,
-    0x93, 0xdf, 0xf4, 0x70, 0x77, 0xd1, 0xa7, 0x5d, 0x63, 0x68, 0xd1, 0x62,
-    0xf9, 0xd8, 0x86, 0xb1, 0x60, 0x8c, 0x3d, 0xc1, 0x9d, 0xdf, 0xb1, 0xbb,
-    0x87, 0x16, 0x2f, 0xff, 0x68, 0x61, 0x91, 0x9e, 0x7d, 0xc9, 0xf6, 0x58,
-    0xbf, 0x45, 0xec, 0x2f, 0x2c, 0x56, 0x1f, 0xbb, 0x27, 0x50, 0x11, 0x80,
-    0x14, 0x28, 0x2a, 0x09, 0xce, 0xbc, 0x22, 0xb9, 0x0e, 0xab, 0xed, 0xfe,
-    0xfb, 0xac, 0x5f, 0x0b, 0xf2, 0x75, 0x8b, 0xff, 0xe1, 0x6b, 0x52, 0x58,
-    0x6b, 0xff, 0xf8, 0x1a, 0xc5, 0xff, 0xd0, 0x83, 0x16, 0xd0, 0x7d, 0xe4,
-    0xeb, 0x17, 0xff, 0x3f, 0xdc, 0xe6, 0x7d, 0xb5, 0x3c, 0x58, 0xa9, 0x4c,
-    0x93, 0x09, 0x74, 0x46, 0xca, 0x20, 0x46, 0xbd, 0xd5, 0xce, 0xd6, 0x2f,
-    0x48, 0x89, 0x62, 0xb0, 0xdf, 0x7c, 0x8a, 0xfd, 0xd1, 0x87, 0x20, 0x58,
-    0xbc, 0xdd, 0xf9, 0x62, 0xa4, 0xf2, 0x04, 0x55, 0x7f, 0xa7, 0x7c, 0x3e,
-    0x9b, 0x4b, 0x14, 0xb1, 0x62, 0x34, 0xf0, 0x3c, 0x69, 0x7d, 0x98, 0x17,
-    0x5e, 0xb1, 0x7f, 0xff, 0xf1, 0xb9, 0xad, 0x39, 0xcc, 0x8a, 0x02, 0x3f,
-    0x70, 0xe7, 0x27, 0x5b, 0xac, 0x5d, 0xf6, 0x58, 0xb3, 0x3a, 0x24, 0x7a,
-    0x3d, 0x5f, 0x39, 0xb2, 0x75, 0x8b, 0xfa, 0x4b, 0xdf, 0xc1, 0xac, 0x54,
-    0x9e, 0x87, 0x08, 0xef, 0x81, 0x23, 0x95, 0x8b, 0xc2, 0x1c, 0xac, 0x5f,
-    0x31, 0xdf, 0xcb, 0x17, 0xff, 0xce, 0x37, 0x6f, 0x3b, 0x78, 0xce, 0x3c,
-    0x4b, 0x15, 0x2c, 0xc0, 0xcd, 0x9e, 0x60, 0x42, 0x36, 0xcc, 0x8c, 0x70,
-    0xd8, 0x5d, 0xee, 0x41, 0xdb, 0xfb, 0x91, 0x45, 0x2e, 0x57, 0x51, 0xaf,
-    0x1e, 0x10, 0xdf, 0x68, 0x66, 0x10, 0x14, 0x14, 0x2e, 0x78, 0xf3, 0xe2,
-    0x1e, 0x84, 0x41, 0x0e, 0xc7, 0x11, 0x5b, 0xa9, 0x62, 0xc1, 0x2c, 0x5e,
-    0xda, 0x76, 0x58, 0xa5, 0x8b, 0xfb, 0x0e, 0x3f, 0xe7, 0x16, 0x2f, 0xdb,
-    0x19, 0xbb, 0xec, 0xb1, 0x7f, 0xef, 0x96, 0x77, 0xef, 0xe0, 0xb7, 0x58,
-    0xbf, 0xb9, 0xbe, 0xec, 0x46, 0xac, 0x54, 0x6a, 0x46, 0xce, 0xc1, 0x9a,
-    0x2e, 0x62, 0xdf, 0x20, 0xdf, 0xe2, 0x33, 0xa7, 0x70, 0xe4, 0x4b, 0x17,
-    0xff, 0x74, 0x6d, 0x19, 0xc7, 0xf4, 0x96, 0xeb, 0x17, 0xbe, 0xf1, 0x2c,
-    0x5f, 0xdf, 0x7c, 0x2c, 0xe8, 0xb1, 0x68, 0x62, 0x25, 0x19, 0x23, 0x83,
-    0xd7, 0xff, 0xf8, 0x7f, 0xcf, 0x79, 0x8b, 0x7c, 0x7d, 0x39, 0xe4, 0xd5,
-    0x8b, 0x76, 0xb1, 0x6e, 0x8b, 0x15, 0xb1, 0xa7, 0xd0, 0x9d, 0xfb, 0xed,
-    0x1f, 0x20, 0x58, 0xa1, 0xa7, 0xaf, 0xdc, 0x33, 0x9c, 0xd1, 0xa1, 0x11,
-    0xd4, 0x45, 0x7e, 0x30, 0x3d, 0xa7, 0x65, 0x8b, 0xf1, 0x67, 0xdb, 0xcb,
-    0x15, 0x03, 0xd4, 0x88, 0xb6, 0xfe, 0x35, 0xfb, 0xe0, 0xb8, 0xb1, 0x7b,
-    0xaf, 0x8e, 0x75, 0x8a, 0xd1, 0xfc, 0x91, 0x18, 0x8c, 0x6f, 0xf7, 0xd9,
-    0xfb, 0xe4, 0x9a, 0xb1, 0x7f, 0xee, 0x18, 0xc5, 0xe8, 0xb3, 0x58, 0xb1,
-    0x43, 0x3f, 0x5f, 0x1a, 0xdf, 0xff, 0x7c, 0x5d, 0x5e, 0x9e, 0x78, 0x4c,
-    0x1c, 0xe9, 0x62, 0xfc, 0x59, 0xb6, 0xa5, 0x62, 0xe2, 0x18, 0xcf, 0xf7,
-    0x8a, 0xb7, 0xc3, 0x32, 0x63, 0xd6, 0x2a, 0x57, 0x38, 0x72, 0x51, 0x3b,
-    0xc6, 0x48, 0xd0, 0xa3, 0x14, 0x27, 0xc3, 0x2d, 0xbf, 0xff, 0x43, 0x9e,
-    0x9d, 0x85, 0xdf, 0x04, 0xe5, 0x27, 0x58, 0xbe, 0x33, 0xa6, 0x0d, 0x62,
-    0xbb, 0x3f, 0xef, 0x2c, 0x5f, 0xe9, 0x30, 0xb3, 0xa6, 0x7d, 0x62, 0xce,
-    0xb1, 0x4b, 0x17, 0xfc, 0x22, 0x32, 0x27, 0xd8, 0x51, 0x2c, 0x5f, 0xd8,
-    0x38, 0xa1, 0x31, 0xeb, 0x17, 0xfc, 0x73, 0x09, 0xbd, 0x13, 0xf4, 0x58,
-    0xbf, 0xff, 0xde, 0x2c, 0xf7, 0x3f, 0x86, 0x98, 0x58, 0x68, 0x18, 0x6b,
-    0x16, 0x84, 0xa2, 0x83, 0x0f, 0x6e, 0xcd, 0x96, 0x2b, 0xb3, 0x7f, 0xc2,
-    0x7b, 0xff, 0xbc, 0x6c, 0xf7, 0x0e, 0x77, 0x09, 0x35, 0x62, 0xc7, 0x58,
-    0xbf, 0x8e, 0x4c, 0x6f, 0xdc, 0xc3, 0xdc, 0xd9, 0x2a, 0xff, 0x8f, 0xc6,
-    0x8b, 0xab, 0xf9, 0xb2, 0xc5, 0x4a, 0x21, 0x71, 0x1a, 0xf6, 0x42, 0x56,
-    0x2a, 0x37, 0x55, 0x37, 0xb0, 0x66, 0x8f, 0xbf, 0x18, 0x8f, 0xa3, 0x03,
-    0xe8, 0x43, 0x7f, 0xc6, 0x16, 0x7b, 0x9f, 0xc3, 0x56, 0x2f, 0xa2, 0xfb,
-    0xf1, 0x62, 0xb6, 0x3d, 0xff, 0x1d, 0xdd, 0x84, 0xb1, 0x7a, 0x12, 0x05,
-    0x8a, 0x19, 0xb3, 0xc1, 0x6b, 0xee, 0x0d, 0x80, 0xb1, 0x7f, 0x3e, 0x9c,
-    0xf2, 0x6a, 0xc5, 0xfe, 0xcf, 0xfe, 0x7b, 0x68, 0xf5, 0x8b, 0xb8, 0x66,
-    0x1f, 0x2f, 0x0b, 0xab, 0xb4, 0x5b, 0x02, 0x11, 0x15, 0xa4, 0x7f, 0x94,
-    0x35, 0xaf, 0xff, 0xce, 0x52, 0x73, 0x38, 0x29, 0xef, 0x06, 0xc7, 0x58,
-    0xbe, 0x07, 0x23, 0xf7, 0x58, 0xa9, 0x4f, 0xe9, 0xe3, 0x55, 0x62, 0x71,
-    0x2b, 0x5f, 0xb7, 0xfc, 0xea, 0x25, 0x8b, 0xfb, 0x59, 0xc6, 0x63, 0xac,
-    0x5d, 0xe7, 0x58, 0xaf, 0x9f, 0x7b, 0x15, 0xf0, 0xb6, 0xfc, 0x0c, 0xf0,
-    0x7b, 0x2c, 0x5f, 0xe3, 0x3f, 0xf9, 0xe0, 0xb8, 0xb1, 0x7f, 0xff, 0x7e,
-    0x7b, 0x32, 0x27, 0xf4, 0x9c, 0x98, 0xdf, 0xba, 0xc5, 0xfe, 0x2c, 0x0b,
-    0xab, 0xd9, 0xf5, 0x8b, 0xff, 0xff, 0xfe, 0x7c, 0xf6, 0xef, 0xe2, 0xc3,
-    0x7e, 0xde, 0xcd, 0x8c, 0xc8, 0xbb, 0x87, 0x3d, 0xfc, 0xed, 0x62, 0xfe,
-    0xe6, 0x7f, 0xce, 0x6a, 0xc5, 0xff, 0x73, 0xe2, 0x88, 0xc0, 0xa3, 0xfb,
-    0x58, 0xb8, 0x46, 0xac, 0x5f, 0xff, 0x85, 0xdc, 0x39, 0xdc, 0x1b, 0xb3,
-    0x07, 0xf7, 0x3a, 0xc5, 0xfb, 0x1c, 0xb0, 0xd5, 0x8b, 0xef, 0x67, 0xcc,
-    0xd2, 0x20, 0xfe, 0xb9, 0x43, 0x54, 0xf1, 0x12, 0xf6, 0x8d, 0xf9, 0x09,
-    0xaf, 0x17, 0xc7, 0x21, 0xf5, 0x42, 0x72, 0xa2, 0x56, 0x4a, 0x14, 0xaa,
-    0xeb, 0xf7, 0x33, 0xc1, 0xec, 0xb1, 0x6f, 0x2c, 0x5b, 0x8b, 0x14, 0x69,
-    0xa4, 0xec, 0x4a, 0xff, 0xbf, 0x3a, 0x2c, 0x00, 0xb8, 0xb1, 0x6f, 0x98,
-    0x7b, 0x83, 0x23, 0xb8, 0x2f, 0x4a, 0x35, 0x32, 0x15, 0x77, 0xb6, 0x81,
-    0xab, 0x15, 0x2b, 0x94, 0xb9, 0x2d, 0x41, 0xa3, 0x02, 0x11, 0x9d, 0x46,
-    0xcd, 0x94, 0x27, 0x5d, 0x45, 0x64, 0x4e, 0x13, 0xbb, 0x39, 0x0e, 0xc3,
-    0x48, 0xf7, 0x35, 0x79, 0x55, 0x9f, 0x95, 0x8c, 0xd0, 0xb0, 0x29, 0xcd,
-    0x3b, 0xfb, 0xb8, 0x70, 0xc9, 0x25, 0x8b, 0xf0, 0x88, 0x79, 0xc5, 0x8b,
-    0xff, 0x37, 0x33, 0x66, 0xf6, 0xd8, 0x12, 0xc5, 0xfd, 0x9b, 0x98, 0x09,
-    0x89, 0x62, 0xa0, 0x7e, 0x5f, 0x41, 0xbf, 0xff, 0x88, 0x4d, 0x1e, 0x64,
-    0xb8, 0x1e, 0x1f, 0x72, 0x02, 0xc5, 0xff, 0x67, 0xcc, 0x0d, 0xa3, 0xff,
-    0x8b, 0x17, 0xf7, 0xf3, 0x78, 0x49, 0xd6, 0x2f, 0xf7, 0xf2, 0x0c, 0x59,
-    0xda, 0xc5, 0x61, 0xf1, 0x78, 0xbe, 0xff, 0xff, 0xd0, 0x9d, 0xbb, 0x87,
-    0x1c, 0xd3, 0x39, 0x9b, 0xb9, 0xc5, 0xad, 0x96, 0x2f, 0xfd, 0xbb, 0x8c,
-    0xcc, 0xf1, 0x3f, 0x6b, 0x17, 0xbd, 0xb8, 0xd6, 0x2f, 0xba, 0xd2, 0x98,
-    0x2c, 0x5f, 0xec, 0x08, 0xcf, 0xbe, 0x1d, 0x62, 0xff, 0xfb, 0x6c, 0x72,
-    0xf1, 0x67, 0x43, 0x38, 0x11, 0x2c, 0x5f, 0xff, 0xfb, 0xcf, 0xa7, 0xda,
-    0x7e, 0xf3, 0xee, 0x0b, 0x9f, 0xfb, 0x6c, 0xb1, 0x73, 0x00, 0xc4, 0xcf,
-    0x23, 0x61, 0xfd, 0x89, 0xf8, 0x6a, 0x1a, 0x9d, 0x76, 0xa9, 0x3d, 0xdd,
-    0x0a, 0x37, 0xdb, 0xff, 0xdb, 0xbf, 0xfe, 0xdc, 0x2c, 0x00, 0xb8, 0xb1,
-    0x7f, 0xf3, 0xff, 0xed, 0xc2, 0xc0, 0x0b, 0x8b, 0x17, 0xfc, 0x44, 0x26,
-    0x07, 0x98, 0x0b, 0x17, 0xe7, 0xf7, 0x30, 0xd3, 0x11, 0x8f, 0xba, 0x5b,
-    0xa2, 0x5f, 0xdf, 0xc2, 0xee, 0x4d, 0x58, 0xbf, 0x98, 0xbc, 0x2d, 0x6c,
-    0xb1, 0x52, 0xbc, 0x07, 0xb1, 0x83, 0xc2, 0x6b, 0xe4, 0x40, 0x5d, 0x28,
-    0x50, 0x7a, 0x53, 0x87, 0x48, 0x7f, 0x04, 0x9c, 0x19, 0x7d, 0xdd, 0xf9,
-    0x62, 0xdd, 0x4b, 0x14, 0x61, 0xae, 0x18, 0xcd, 0xa2, 0x58, 0xbf, 0xe3,
-    0xf8, 0xa7, 0x4f, 0xee, 0x2c, 0x53, 0x9e, 0x63, 0x09, 0xdf, 0xfe, 0x37,
-    0x9b, 0xfc, 0x5b, 0x16, 0x05, 0x9b, 0x2c, 0x56, 0x1f, 0x83, 0x90, 0x5f,
-    0xf6, 0x44, 0x67, 0x27, 0xed, 0x1e, 0xb1, 0x7f, 0xff, 0xfd, 0x3d, 0xeb,
-    0x3d, 0xe7, 0x3f, 0x3f, 0x9b, 0x66, 0xbf, 0x23, 0x79, 0xea, 0x58, 0xa7,
-    0x45, 0xff, 0xcf, 0xaf, 0xff, 0xfb, 0xc6, 0x16, 0x7f, 0xe2, 0x2d, 0xb9,
-    0xbb, 0xff, 0x1a, 0x25, 0x8b, 0xfc, 0xdd, 0xff, 0x3c, 0x06, 0x58, 0xbb,
-    0x22, 0x58, 0xbf, 0xff, 0xb3, 0xc6, 0x7f, 0x3f, 0x82, 0x2d, 0xcc, 0xc7,
-    0x1a, 0xc5, 0x4a, 0x62, 0x78, 0xd4, 0xe6, 0x82, 0x18, 0xbf, 0xf4, 0xfc,
-    0xcd, 0x66, 0xd8, 0xc7, 0x58, 0xbc, 0xe5, 0x12, 0xc5, 0xff, 0x14, 0x83,
-    0xb8, 0x72, 0x42, 0x58, 0xb8, 0xd8, 0x96, 0x2f, 0xbf, 0x3d, 0x99, 0x11,
-    0xea, 0xf5, 0x1d, 0xdf, 0xfb, 0x08, 0xc2, 0xcf, 0xfd, 0x86, 0xb1, 0x5e,
-    0x3f, 0xd1, 0x1f, 0xd6, 0x26, 0x23, 0xc8, 0x77, 0xdf, 0xec, 0xd8, 0xc8,
-    0xb6, 0x06, 0x96, 0x2a, 0x07, 0xc3, 0xe2, 0x8b, 0xdd, 0x0d, 0x89, 0x62,
-    0xff, 0x8d, 0x92, 0x88, 0xd1, 0x4c, 0x4b, 0x14, 0x61, 0xef, 0xf8, 0x8a,
-    0xfa, 0x35, 0x46, 0xd1, 0xbf, 0x5a, 0xb1, 0x7f, 0xf7, 0xdc, 0x2c, 0xdc,
-    0xcd, 0x0d, 0xf4, 0xb1, 0x6e, 0x18, 0x88, 0x1f, 0x9c, 0xdd, 0xa9, 0x58,
-    0xbd, 0xa7, 0x3a, 0xc5, 0x49, 0xb4, 0x10, 0xbd, 0x44, 0x99, 0x10, 0x21,
-    0x48, 0x4b, 0xd7, 0xff, 0x9a, 0x3c, 0xc1, 0xfe, 0x4c, 0x88, 0x98, 0x25,
-    0x8b, 0xff, 0xf8, 0x66, 0x71, 0xe3, 0xa4, 0x81, 0xfc, 0x2c, 0x7f, 0xac,
-    0x5f, 0xfe, 0x78, 0xe9, 0x20, 0x7f, 0x0b, 0x1f, 0xeb, 0x17, 0xb0, 0xe6,
-    0x12, 0x29, 0xf8, 0xbb, 0x50, 0x4c, 0xb0, 0xa1, 0xf1, 0x6e, 0x2c, 0x5f,
-    0xe6, 0x37, 0x07, 0xf1, 0x76, 0xb1, 0x52, 0x79, 0x04, 0x25, 0x7f, 0xe9,
-    0xec, 0xce, 0x4b, 0xec, 0xde, 0x58, 0xbf, 0xd9, 0x3d, 0xc4, 0x52, 0x75,
-    0x8a, 0xc3, 0xf5, 0xed, 0x06, 0xe1, 0x1a, 0xb1, 0x7c, 0x58, 0x2d, 0x96,
-    0x2b, 0xe6, 0xf1, 0x86, 0x6e, 0x9d, 0xd6, 0x2e, 0x11, 0xab, 0x17, 0xdc,
-    0x90, 0x71, 0x62, 0xe1, 0x47, 0xac, 0x5f, 0x8b, 0x3b, 0x87, 0x16, 0x2f,
-    0x8f, 0x9e, 0xe1, 0x88, 0xb8, 0xdc, 0x83, 0xe3, 0x1c, 0x19, 0x8e, 0x23,
-    0xea, 0x1b, 0xbf, 0xfd, 0x83, 0x30, 0xed, 0x0d, 0x3e, 0xcc, 0x75, 0x8b,
-    0x9b, 0x4b, 0x15, 0xb1, 0xf1, 0xee, 0x99, 0x7f, 0x77, 0xcf, 0xe3, 0x69,
-    0x62, 0xff, 0xff, 0xfd, 0x8f, 0xd3, 0x39, 0xf9, 0xec, 0xc3, 0xb9, 0x85,
-    0x9c, 0x93, 0x79, 0x3a, 0xdd, 0x62, 0xff, 0xfe, 0x7c, 0xec, 0x85, 0xe9,
-    0xf9, 0x9d, 0x1f, 0xd1, 0x4a, 0xc5, 0xfe, 0xfe, 0x45, 0xf9, 0x23, 0x56,
-    0x2f, 0xec, 0x8b, 0xf2, 0x46, 0xac, 0x5e, 0xef, 0x34, 0x61, 0xf2, 0x7c,
-    0xd6, 0xe7, 0x3e, 0x91, 0xf0, 0x50, 0xc3, 0xa7, 0x54, 0x0a, 0xc4, 0x84,
-    0x5f, 0xe8, 0xe0, 0x2f, 0xfd, 0x25, 0xe9, 0x83, 0x91, 0xb2, 0xb1, 0x7e,
-    0xdd, 0xf9, 0x83, 0x58, 0xbf, 0xfe, 0x14, 0x7f, 0xd8, 0xa2, 0x33, 0x59,
-    0xe6, 0xed, 0x63, 0xe6, 0xa6, 0xb6, 0x66, 0x86, 0x8e, 0x1b, 0xe6, 0xc6,
-    0x6b, 0xb9, 0xdf, 0x71, 0xd9, 0x3c, 0x74, 0x71, 0x46, 0xc4, 0x77, 0x0f,
-    0xc2, 0x54, 0x11, 0x8b, 0x7a, 0x56, 0xf7, 0x44, 0x20, 0x99, 0xaf, 0xff,
-    0x36, 0xdf, 0x97, 0xf7, 0x27, 0x6c, 0xe2, 0xc5, 0xf1, 0x9b, 0x67, 0x16,
-    0x2b, 0x0f, 0xc0, 0xe9, 0x77, 0xff, 0xb1, 0xa2, 0x31, 0x8b, 0xd1, 0x66,
-    0xb1, 0x62, 0xff, 0x6b, 0x69, 0x7d, 0x61, 0x2c, 0x5e, 0x37, 0x91, 0x2c,
-    0x56, 0x1e, 0x9f, 0x66, 0x76, 0x3a, 0xc1, 0x86, 0x8a, 0xff, 0xff, 0x31,
-    0xd8, 0xbd, 0x16, 0x6b, 0x0c, 0xf7, 0x57, 0xb2, 0x3d, 0x62, 0xfa, 0x27,
-    0xcd, 0x96, 0x2f, 0x16, 0x0d, 0x62, 0xfc, 0x0c, 0x16, 0xb6, 0x58, 0xb8,
-    0x3e, 0x2c, 0x5e, 0x1f, 0xe5, 0x60, 0xc2, 0xe6, 0xb0, 0xfc, 0x04, 0x87,
-    0x7c, 0x67, 0xda, 0x25, 0x8a, 0x94, 0xe0, 0x76, 0x23, 0xc6, 0x8e, 0xc9,
-    0x0a, 0x11, 0x9c, 0x21, 0xbf, 0x6f, 0x3f, 0x93, 0xac, 0x5f, 0x4e, 0x05,
-    0xb2, 0xc5, 0x61, 0xe6, 0x91, 0x4d, 0xe8, 0xe1, 0x79, 0x62, 0xfd, 0xbc,
-    0xfe, 0x4e, 0xb1, 0x7e, 0xf7, 0x09, 0xcd, 0x58, 0xbf, 0xe6, 0x37, 0x37,
-    0x9f, 0xc9, 0xd6, 0x2f, 0x87, 0xad, 0x4a, 0xc5, 0xf1, 0xbf, 0x68, 0x2c,
-    0x56, 0x1e, 0x3b, 0x91, 0xd4, 0x6c, 0x99, 0xa4, 0x08, 0x30, 0x84, 0xe5,
-    0x24, 0x52, 0x14, 0x20, 0x6f, 0xdc, 0xcc, 0x23, 0x56, 0x2f, 0xff, 0x77,
-    0x0e, 0x44, 0xe5, 0x83, 0xc2, 0x35, 0x62, 0xf0, 0xd8, 0xeb, 0x17, 0xff,
-    0x78, 0x5d, 0xc3, 0x9f, 0xcf, 0x48, 0xd6, 0x2f, 0xf8, 0x6f, 0xd1, 0xc7,
-    0xf7, 0x33, 0x0f, 0x93, 0xa8, 0x76, 0xff, 0xff, 0xfc, 0x6e, 0x98, 0x72,
-    0x46, 0x6c, 0x2d, 0x43, 0xdd, 0xc2, 0x43, 0x26, 0xf3, 0x1d, 0x62, 0xbb,
-    0x4e, 0xd1, 0x8a, 0x05, 0x0b, 0x0e, 0xa5, 0x4b, 0xc1, 0xc8, 0x16, 0x2f,
-    0xf6, 0xfb, 0xb8, 0x43, 0x16, 0x96, 0x28, 0xe7, 0xac, 0x43, 0xd7, 0xe0,
-    0x49, 0xe7, 0x4b, 0x17, 0xff, 0xb6, 0x1e, 0x9b, 0x72, 0xce, 0x9a, 0x7e,
-    0x2c, 0x54, 0xab, 0x48, 0xc9, 0x42, 0xaf, 0x09, 0xc6, 0x21, 0x11, 0x45,
-    0xde, 0xe2, 0xc5, 0xff, 0x9b, 0x86, 0x4c, 0x4f, 0xf6, 0x3a, 0xc5, 0xfd,
-    0xef, 0xb4, 0x41, 0x9d, 0x62, 0x96, 0x2d, 0xf5, 0x8a, 0xf9, 0x7c, 0xc1,
-    0x97, 0x67, 0x16, 0x2e, 0x6d, 0x2c, 0x58, 0x10, 0x35, 0xda, 0x17, 0xb9,
-    0xc0, 0xb1, 0x61, 0xac, 0x5c, 0xd0, 0x30, 0xd4, 0x86, 0x2f, 0x6f, 0x49,
-    0xff, 0x7d, 0x42, 0xa2, 0x4e, 0x05, 0x90, 0x00, 0x9e, 0x50, 0xcb, 0xbf,
-    0xfb, 0xbf, 0xcb, 0xfb, 0x93, 0xb6, 0x71, 0x62, 0x96, 0x2c, 0x79, 0x3d,
-    0x20, 0xd1, 0xae, 0x91, 0xac, 0x5d, 0xc7, 0x58, 0xbb, 0xb0, 0x2c, 0x57,
-    0xcf, 0x1f, 0xaf, 0x17, 0x10, 0xbd, 0xce, 0x12, 0xc5, 0xff, 0xa2, 0x7e,
-    0x07, 0xd8, 0x19, 0xf6, 0x58, 0xbe, 0xec, 0x1a, 0x95, 0x8a, 0x30, 0xf9,
-    0xe5, 0x0e, 0x86, 0x8a, 0x1e, 0x3f, 0xdf, 0xa4, 0x05, 0xdc, 0x16, 0x2e,
-    0x1b, 0xac, 0x54, 0xb7, 0x79, 0x5b, 0x43, 0x53, 0x29, 0xbd, 0x7b, 0xc6,
-    0xb9, 0xd9, 0x0b, 0xca, 0x41, 0xd4, 0xe9, 0x2f, 0xd5, 0x1a, 0x39, 0x90,
-    0x42, 0x50, 0x9b, 0xf9, 0x0d, 0x51, 0x11, 0xf4, 0x29, 0xbf, 0xe3, 0x3f,
-    0x9d, 0x4f, 0xe7, 0x82, 0xc5, 0xf4, 0xfa, 0x46, 0xb1, 0x7e, 0x18, 0x9b,
-    0x50, 0x58, 0xad, 0x8f, 0x2f, 0xc4, 0x57, 0xba, 0x7f, 0x16, 0x2f, 0x9c,
-    0xf3, 0xf5, 0x8b, 0xf3, 0x7c, 0xc1, 0xca, 0xc5, 0x41, 0x31, 0x5c, 0x84,
-    0x43, 0x91, 0xfc, 0x7f, 0xc4, 0x57, 0x9a, 0x2e, 0x2c, 0x5e, 0x86, 0x71,
-    0x62, 0xfe, 0xf1, 0x4c, 0x33, 0xcb, 0x17, 0xd8, 0x4d, 0x05, 0x8b, 0x83,
-    0xe1, 0x87, 0x9d, 0x1b, 0x16, 0xd3, 0xa2, 0x83, 0x8d, 0x75, 0xa4, 0x70,
-    0x7a, 0x17, 0xd7, 0xa7, 0xdc, 0x58, 0xbf, 0x9f, 0x6c, 0xf8, 0xbc, 0xb1,
-    0x44, 0x79, 0x9e, 0x1d, 0xbf, 0xfd, 0x8e, 0x33, 0x18, 0xbd, 0x16, 0x6b,
-    0x16, 0x2d, 0x8b, 0x17, 0xb9, 0x26, 0xac, 0x57, 0xcd, 0x7f, 0x84, 0x6d,
-    0x12, 0xc5, 0xfd, 0x82, 0xcf, 0xef, 0xb2, 0xc5, 0xff, 0xe9, 0xf9, 0x83,
-    0x9d, 0x8c, 0x16, 0xd3, 0xf5, 0x8a, 0x94, 0x49, 0x70, 0x4c, 0x46, 0x17,
-    0xe3, 0x30, 0x78, 0x4b, 0x15, 0xd9, 0xeb, 0x91, 0x7d, 0xef, 0xc8, 0xd6,
-    0x2f, 0xef, 0xb9, 0x9e, 0xe3, 0xac, 0x54, 0xa6, 0xf1, 0x91, 0x85, 0x44,
-    0x45, 0xe1, 0xdb, 0xff, 0xc6, 0x96, 0x6f, 0xf7, 0xea, 0xf7, 0xde, 0x25,
-    0x8b, 0xff, 0xf1, 0x9b, 0xfd, 0xc6, 0x52, 0xdb, 0x6f, 0xf6, 0xd2, 0xc5,
-    0x3a, 0x2a, 0x44, 0xa1, 0x7f, 0x66, 0x80, 0xe5, 0xe5, 0x8b, 0xbb, 0xed,
-    0x62, 0xc7, 0x30, 0xf1, 0xce, 0x5b, 0x7e, 0xf3, 0xec, 0x4c, 0xb1, 0x7f,
-    0xfe, 0xcc, 0x23, 0x4c, 0x0f, 0xcf, 0xf7, 0x37, 0xee, 0xb1, 0x7c, 0xfc,
-    0x7e, 0x8b, 0x17, 0xff, 0xdb, 0x7d, 0xb8, 0x67, 0xd9, 0xfc, 0xe3, 0xc5,
-    0x8b, 0xec, 0xf4, 0xfd, 0x62, 0xf1, 0xb3, 0x12, 0xc5, 0xf3, 0x6b, 0x0e,
-    0xb1, 0x7f, 0xee, 0x19, 0xd5, 0xec, 0xff, 0x9c, 0xeb, 0x14, 0x33, 0xe6,
-    0xf1, 0x15, 0xa5, 0x62, 0xff, 0xa7, 0xb0, 0x45, 0x09, 0xd6, 0xcb, 0x15,
-    0xb1, 0xe7, 0x7c, 0x46, 0xa0, 0xa8, 0xbc, 0x65, 0x11, 0x2c, 0x68, 0x93,
-    0xea, 0x2c, 0x44, 0x50, 0x85, 0xf3, 0x85, 0xfd, 0xf6, 0x81, 0xf4, 0xeb,
-    0x17, 0xfe, 0x35, 0xbd, 0xcf, 0x14, 0xf7, 0x05, 0x8b, 0xb9, 0xa5, 0x8b,
-    0xfd, 0x01, 0x10, 0xc7, 0x9a, 0x58, 0xb4, 0x16, 0x2d, 0x26, 0x1e, 0xf4,
-    0x43, 0x04, 0x69, 0x46, 0xa3, 0x53, 0x50, 0x9f, 0xbf, 0xb3, 0x18, 0xbd,
-    0xc5, 0x8b, 0xf1, 0x4c, 0x33, 0xcb, 0x14, 0x47, 0xa7, 0xe2, 0xcb, 0xff,
-    0x8d, 0xf7, 0xa7, 0x40, 0x33, 0x6f, 0xf9, 0x62, 0xcc, 0xb1, 0x52, 0x8f,
-    0x88, 0x3e, 0x31, 0x0f, 0x92, 0xaf, 0xc4, 0x28, 0x98, 0x6b, 0x17, 0xf9,
-    0xfc, 0x1e, 0xa7, 0xf2, 0xb1, 0x7f, 0xff, 0xd3, 0xa7, 0xd8, 0x51, 0xe6,
-    0x17, 0x73, 0x1e, 0x63, 0x45, 0x8c, 0xb1, 0x7f, 0x41, 0xb6, 0x32, 0x3f,
-    0x75, 0x8b, 0xc7, 0x1c, 0x68, 0xb1, 0x6e, 0x2c, 0x56, 0x1b, 0x57, 0x23,
-    0xb1, 0xd6, 0x2f, 0x6b, 0x3b, 0x58, 0xbd, 0x8f, 0xb2, 0xc5, 0xf4, 0x9c,
-    0xee, 0xb1, 0x6c, 0xd8, 0xdf, 0xf8, 0x76, 0xff, 0xff, 0xa7, 0xe7, 0x0f,
-    0x73, 0x0d, 0x92, 0xdc, 0xc7, 0xd6, 0x9c, 0x25, 0x8a, 0x1a, 0x64, 0x7f,
-    0x1f, 0x00, 0x91, 0x2e, 0xf0, 0x9e, 0xfb, 0x0e, 0x2f, 0x2c, 0x5f, 0xff,
-    0x67, 0x53, 0xe9, 0x81, 0xcc, 0x1f, 0xc5, 0xb2, 0xc5, 0xe6, 0x06, 0xcb,
-    0x17, 0xfe, 0x9d, 0xcb, 0x3a, 0x75, 0x69, 0xbb, 0x58, 0xbf, 0xcf, 0x9d,
-    0xf5, 0x69, 0xbb, 0x58, 0xb6, 0x70, 0xff, 0x7a, 0x91, 0x69, 0xd3, 0x19,
-    0xd2, 0xa1, 0x42, 0x6e, 0xf9, 0xcd, 0x93, 0xac, 0x5f, 0x6c, 0x2d, 0x6e,
-    0xb1, 0x7f, 0xfb, 0x3c, 0x53, 0xb9, 0x85, 0x9c, 0xf8, 0x96, 0x2f, 0xf3,
-    0x96, 0x79, 0xb9, 0x8b, 0x17, 0xff, 0x45, 0x07, 0x0b, 0xdf, 0xc8, 0xee,
-    0x32, 0xc5, 0xfe, 0x7c, 0xef, 0xab, 0x4d, 0xda, 0xc5, 0xb2, 0x24, 0x59,
-    0xe8, 0xc7, 0xa9, 0x2a, 0xff, 0x8d, 0x92, 0x86, 0x7d, 0xce, 0xb1, 0x73,
-    0x1a, 0x62, 0x7d, 0xb2, 0x69, 0xb1, 0x1f, 0xc9, 0x8a, 0x1f, 0xde, 0x39,
-    0xbe, 0xe7, 0x24, 0xeb, 0x17, 0xdf, 0x9e, 0x92, 0xb1, 0x4e, 0x78, 0xec,
-    0x47, 0x52, 0xbd, 0x3b, 0x02, 0x9c, 0x34, 0xed, 0xc1, 0xe3, 0x8d, 0xd2,
-    0x51, 0x4b, 0x29, 0xe9, 0x0b, 0x0a, 0x96, 0xc4, 0xbf, 0x23, 0x2e, 0x35,
-    0xd3, 0xb2, 0x17, 0x8f, 0xc7, 0x50, 0xec, 0x3b, 0x4b, 0x4a, 0x58, 0x03,
-    0xb9, 0x47, 0xf4, 0x29, 0xed, 0x8b, 0x04, 0xb1, 0x6d, 0x96, 0x2b, 0xa1,
-    0xa6, 0x8e, 0x13, 0xba, 0x7a, 0x96, 0x2f, 0xf4, 0xea, 0x4e, 0xdd, 0xf9,
-    0x62, 0x9c, 0xf3, 0x84, 0x35, 0x68, 0x2c, 0x5f, 0xff, 0xec, 0xf7, 0x0c,
-    0xfe, 0x6f, 0x9b, 0x99, 0xc1, 0x96, 0x7d, 0x62, 0xff, 0xe9, 0xf9, 0x87,
-    0xd6, 0x77, 0xa7, 0x09, 0x62, 0x80, 0x8a, 0xdf, 0x32, 0xdf, 0x39, 0x30,
-    0xd6, 0x2f, 0xff, 0xee, 0x39, 0x77, 0x01, 0xfc, 0x53, 0x1f, 0xfc, 0xe9,
-    0xc5, 0x8a, 0x1a, 0x20, 0xfc, 0x43, 0x7b, 0x83, 0xed, 0x62, 0xf7, 0xe3,
-    0x6d, 0x2c, 0x5c, 0x0d, 0xd6, 0x2f, 0xff, 0x64, 0x5f, 0x92, 0x34, 0xb3,
-    0xdf, 0x12, 0xc5, 0x18, 0x88, 0x73, 0x48, 0xfe, 0x33, 0x7d, 0xb8, 0x9a,
-    0x0b, 0x14, 0x62, 0x3f, 0x21, 0x0a, 0x6e, 0xcc, 0xaf, 0xd3, 0xb1, 0x90,
-    0xc5, 0x8a, 0x1a, 0xb0, 0x6d, 0xc8, 0x7b, 0x85, 0xfb, 0xc2, 0x9b, 0x51,
-    0x8f, 0x91, 0xbd, 0xd1, 0xc4, 0xb1, 0x7d, 0x03, 0x03, 0x3a, 0xc5, 0xfd,
-    0xaf, 0xe6, 0x85, 0x8b, 0x17, 0xff, 0xf6, 0x77, 0x0e, 0x7b, 0xf2, 0x79,
-    0x71, 0x99, 0x3d, 0x62, 0xc5, 0xfd, 0x0e, 0x60, 0xb4, 0x05, 0x8b, 0xfb,
-    0x3b, 0x87, 0x05, 0x12, 0xc5, 0xfb, 0x39, 0x8e, 0x4b, 0x17, 0xc5, 0x13,
-    0x9f, 0xb4, 0x43, 0x68, 0xbf, 0xe6, 0x37, 0xff, 0x8b, 0x7f, 0xb7, 0x8c,
-    0xd6, 0x79, 0xbb, 0x58, 0xac, 0x4e, 0xad, 0xcb, 0x9a, 0x1d, 0x02, 0x48,
-    0xbf, 0x99, 0x86, 0xcd, 0xd1, 0x62, 0xf7, 0x78, 0x6a, 0xc5, 0xf9, 0x86,
-    0xcd, 0xd1, 0x62, 0xfe, 0xcd, 0xb6, 0x16, 0xb6, 0x58, 0xb6, 0x8c, 0x45,
-    0x47, 0xcb, 0x98, 0x7c, 0x8a, 0x6f, 0xf9, 0xc8, 0xdf, 0x0c, 0xa7, 0xb5,
-    0x8b, 0xf6, 0x88, 0x9b, 0xeb, 0x17, 0xff, 0xc4, 0xdd, 0xc3, 0xf9, 0xf1,
-    0x4f, 0x18, 0x0b, 0x17, 0xfb, 0xad, 0x91, 0xff, 0x37, 0x95, 0x8b, 0xb3,
-    0x86, 0x22, 0x27, 0xac, 0x50, 0xbf, 0x88, 0xcd, 0xf8, 0x01, 0xac, 0x54,
-    0xa7, 0x23, 0x88, 0x4e, 0x75, 0xf8, 0x58, 0x31, 0xa5, 0xff, 0xfc, 0xfc,
-    0xfe, 0x6b, 0x53, 0xb1, 0x98, 0x43, 0xfc, 0xac, 0x5f, 0xf8, 0x5c, 0x30,
-    0xe1, 0xfd, 0xbf, 0x2b, 0x17, 0xec, 0xf0, 0xb3, 0xb5, 0x8b, 0xc6, 0xe7,
-    0x6b, 0x17, 0x4c, 0x46, 0x1e, 0x47, 0x8a, 0x6b, 0x13, 0x15, 0x25, 0xc1,
-    0x42, 0x2a, 0xff, 0xc6, 0xfe, 0x73, 0xef, 0x9a, 0x89, 0x62, 0xff, 0xfd,
-    0xec, 0x73, 0x98, 0x59, 0xbb, 0xeb, 0x4f, 0xb2, 0xc5, 0x12, 0x25, 0xc2,
-    0x40, 0xbf, 0xff, 0xff, 0x08, 0x8c, 0x09, 0xbb, 0x86, 0x98, 0x06, 0x70,
-    0x53, 0xdf, 0xf1, 0xcb, 0x0d, 0x58, 0xbf, 0xff, 0xff, 0xdb, 0xe6, 0xe5,
-    0x9e, 0xf8, 0xbe, 0xdd, 0xc3, 0x9e, 0xd6, 0x05, 0x8e, 0x3f, 0x71, 0xd6,
-    0x2f, 0xe7, 0x19, 0x90, 0xe6, 0x96, 0x2f, 0xfd, 0x9e, 0x29, 0x01, 0x98,
-    0xe3, 0x58, 0xbf, 0xff, 0xd8, 0x73, 0xcc, 0x59, 0xc7, 0xc0, 0x70, 0xcc,
-    0x71, 0xac, 0x5f, 0x0b, 0x08, 0xc7, 0x44, 0xf9, 0x1f, 0x56, 0x93, 0x07,
-    0xf4, 0x33, 0xef, 0xf8, 0xf8, 0x73, 0x0f, 0x1f, 0xd2, 0x0b, 0x17, 0xff,
-    0xff, 0xb0, 0xcd, 0x07, 0xc9, 0x33, 0x8f, 0x85, 0x17, 0x3c, 0xf9, 0xb1,
-    0x4a, 0xc5, 0xff, 0xff, 0xef, 0xe0, 0x8e, 0x66, 0x45, 0x9d, 0xf9, 0x81,
-    0x26, 0x78, 0x73, 0xee, 0x2c, 0x56, 0x93, 0x60, 0x39, 0x4f, 0xd0, 0x78,
-    0xf5, 0x7f, 0xfd, 0xad, 0x67, 0xb9, 0xf7, 0xc3, 0x3e, 0x09, 0x58, 0xa9,
-    0x57, 0x10, 0xf2, 0xbe, 0x44, 0x7d, 0x7f, 0xff, 0x4f, 0xf0, 0x66, 0x8a,
-    0x7f, 0x9e, 0x93, 0xb7, 0x96, 0x2a, 0x57, 0x31, 0x70, 0x8f, 0xf3, 0x82,
-    0x02, 0x37, 0xbe, 0x9e, 0x9c, 0x25, 0x8b, 0xff, 0xc0, 0xc6, 0x88, 0xce,
-    0x66, 0xb5, 0x9d, 0xac, 0x5f, 0xfd, 0x84, 0x59, 0xfc, 0x1f, 0xc5, 0x12,
-    0xc5, 0xff, 0x64, 0x96, 0xf9, 0xef, 0xba, 0xc5, 0xef, 0xcc, 0x4b, 0x17,
-    0xff, 0x81, 0x3f, 0xee, 0x1c, 0x2c, 0x00, 0xb8, 0xb1, 0x7f, 0xff, 0xfc,
-    0xf1, 0x7f, 0x39, 0xac, 0xdc, 0xcf, 0xbe, 0x16, 0x74, 0x2c, 0x18, 0x89,
-    0x62, 0xff, 0xf1, 0x49, 0xfb, 0xf3, 0x8c, 0xcd, 0x67, 0x96, 0x2f, 0xd8,
-    0x5b, 0x86, 0x75, 0x8b, 0xff, 0xbf, 0x92, 0x51, 0x16, 0x7b, 0x8c, 0xb1,
-    0x68, 0x4a, 0xa8, 0xf3, 0x49, 0x1d, 0x37, 0x48, 0x9f, 0x38, 0x00, 0xf1,
-    0x26, 0x71, 0xff, 0xc9, 0x9d, 0x45, 0x57, 0xd3, 0xbe, 0xb1, 0x62, 0xff,
-    0xdd, 0x5e, 0x9e, 0x45, 0x06, 0xd6, 0xcb, 0x17, 0xbc, 0xe6, 0xac, 0x58,
-    0xe6, 0x1f, 0x1c, 0x6c, 0x8b, 0x7f, 0xde, 0xe4, 0x81, 0x88, 0x58, 0xb1,
-    0x58, 0x7c, 0xc2, 0x2e, 0xbf, 0xf9, 0xf6, 0x63, 0x9d, 0xcc, 0x1b, 0xf4,
-    0x58, 0xa8, 0x26, 0xaa, 0x38, 0x76, 0x68, 0x86, 0xff, 0xc2, 0xdf, 0xf2,
-    0x67, 0x70, 0x16, 0xcb, 0x17, 0xfc, 0x28, 0x8b, 0x37, 0xf8, 0xa2, 0x58,
-    0xb9, 0xe3, 0xd6, 0x2a, 0x08, 0x9c, 0xc4, 0x58, 0x8f, 0x6f, 0xe0, 0xf4,
-    0x03, 0xbf, 0x16, 0x2f, 0xfc, 0x0e, 0x19, 0xfc, 0x1e, 0xb3, 0xb5, 0x8a,
-    0xec, 0xfc, 0x9c, 0xc2, 0xff, 0xd1, 0x18, 0xc5, 0xe8, 0xb3, 0x58, 0xb1,
-    0x7f, 0xff, 0x79, 0xf6, 0xc1, 0x98, 0x76, 0x86, 0x9f, 0x66, 0x3a, 0xc5,
-    0xfe, 0xd9, 0x8e, 0x53, 0xa8, 0x96, 0x2f, 0xe3, 0x40, 0x7c, 0x33, 0x58,
-    0x89, 0x37, 0x5e, 0xa9, 0x4c, 0x6b, 0x21, 0xa9, 0x7f, 0xff, 0x8d, 0x38,
-    0x8e, 0x2e, 0xae, 0x3e, 0xdf, 0xc8, 0xa0, 0xdd, 0x4b, 0x17, 0xff, 0x8b,
-    0x7f, 0xe0, 0x00, 0x20, 0xbb, 0x87, 0x16, 0x2a, 0x51, 0x76, 0xed, 0x95,
-    0x8a, 0x8f, 0xfb, 0x8c, 0xf3, 0x50, 0xe2, 0xbe, 0x03, 0x34, 0x4b, 0x16,
-    0x95, 0x8b, 0xd8, 0x5b, 0x18, 0x6d, 0x37, 0x23, 0xbe, 0xdc, 0xce, 0x62,
-    0xc5, 0xff, 0xda, 0x32, 0x2f, 0x88, 0xd7, 0xc2, 0x35, 0x62, 0xd9, 0x87,
-    0xdc, 0x22, 0x5b, 0xfc, 0x5e, 0xf1, 0x30, 0x38, 0xb1, 0x7c, 0x03, 0x0f,
-    0xa5, 0x8a, 0x93, 0xd8, 0x11, 0x9d, 0xf8, 0xc6, 0xdc, 0xb1, 0x62, 0xff,
-    0xec, 0x68, 0x8c, 0xfc, 0xbe, 0xd2, 0x6a, 0xc5, 0x1d, 0x12, 0x2c, 0x42,
-    0x02, 0x9b, 0xff, 0xfc, 0x16, 0xb1, 0xc1, 0xc3, 0x3b, 0x83, 0x97, 0xb1,
-    0xc6, 0xb1, 0x7f, 0x43, 0x98, 0x2d, 0x01, 0x62, 0xfe, 0xce, 0xe1, 0xc1,
-    0x44, 0xb1, 0x7e, 0xce, 0x63, 0x92, 0xc5, 0xba, 0x76, 0x88, 0x6d, 0x17,
-    0xfc, 0xc6, 0xff, 0xf7, 0xa7, 0x42, 0x3b, 0xf0, 0xce, 0x43, 0x8b, 0x17,
-    0xfe, 0xd8, 0xd1, 0x4c, 0x46, 0x42, 0x18, 0xb1, 0x7f, 0xee, 0x7b, 0xf8,
-    0x7d, 0xe4, 0x8d, 0x58, 0xac, 0x44, 0x28, 0x11, 0x2a, 0x55, 0x0b, 0x3c,
-    0x3a, 0x58, 0xe4, 0x50, 0xd2, 0xbf, 0xed, 0x6d, 0x3b, 0x6c, 0x2d, 0x6c,
-    0xb1, 0x7f, 0xff, 0x3f, 0x7e, 0xf4, 0x9c, 0xcf, 0xcf, 0x60, 0xcf, 0x71,
-    0x62, 0xff, 0xfc, 0x52, 0x69, 0x87, 0x13, 0xf2, 0x7e, 0x70, 0xf7, 0x58,
-    0xbf, 0x61, 0x0f, 0xf2, 0xb1, 0x7f, 0xef, 0x71, 0xcb, 0xb8, 0x19, 0xc1,
-    0xac, 0x5a, 0x7b, 0x3e, 0x97, 0x27, 0xbf, 0xed, 0x7d, 0xf8, 0x66, 0x38,
-    0xd6, 0x2f, 0xfc, 0x64, 0x5f, 0x11, 0xaf, 0x84, 0x6a, 0xc5, 0xff, 0xfa,
-    0x63, 0xcc, 0xee, 0x13, 0xb7, 0x70, 0xe1, 0x31, 0xab, 0x17, 0xf8, 0x8c,
-    0xe0, 0xa3, 0x85, 0xa5, 0x8a, 0xc4, 0x6d, 0x7d, 0x0c, 0x4b, 0xd7, 0xff,
-    0xff, 0xb3, 0x76, 0xd8, 0xce, 0x3c, 0x74, 0x90, 0x3d, 0xd4, 0x52, 0x58,
-    0xfe, 0x58, 0xbf, 0xff, 0xbd, 0x25, 0x9b, 0x19, 0xb0, 0xb5, 0x0f, 0x4c,
-    0x5c, 0x58, 0xba, 0x7b, 0xfa, 0x37, 0x7a, 0x9f, 0x6a, 0x55, 0xed, 0x61,
-    0xf9, 0xd7, 0xff, 0x0c, 0x36, 0x27, 0xe4, 0x62, 0x82, 0x8c, 0x32, 0xfe,
-    0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xd8, 0xe1, 0x2c, 0x5c, 0xc4, 0xb1, 0x5b,
-    0x9b, 0x3e, 0xc7, 0x68, 0xc4, 0x42, 0x63, 0x0d, 0xfe, 0x70, 0x18, 0xff,
-    0x73, 0xac, 0x50, 0xcf, 0x5c, 0x88, 0xef, 0xfe, 0x33, 0x9f, 0x11, 0x9e,
-    0xe7, 0x27, 0x4b, 0x17, 0xff, 0xf4, 0xe8, 0x06, 0x4f, 0x46, 0xfc, 0xeb,
-    0x59, 0xee, 0x2c, 0x56, 0xc8, 0xa7, 0xfa, 0x4d, 0xff, 0xa1, 0x3e, 0x16,
-    0xe6, 0x73, 0xce, 0xb1, 0x7f, 0xfd, 0xf9, 0xd8, 0xc2, 0xce, 0x8d, 0xff,
-    0xcf, 0x6b, 0x17, 0xff, 0xfd, 0xdf, 0x1f, 0x02, 0x33, 0xf9, 0xee, 0x66,
-    0xc6, 0x63, 0x8d, 0x62, 0x86, 0x8b, 0xfc, 0x54, 0xbf, 0xf7, 0x9f, 0xb8,
-    0x14, 0x99, 0xd5, 0xba, 0xc5, 0xff, 0xe9, 0x39, 0x67, 0x42, 0xce, 0x99,
-    0xa8, 0x2c, 0x56, 0x22, 0x44, 0x91, 0x6f, 0xfd, 0xcf, 0xbe, 0x7b, 0xb8,
-    0x3f, 0xd6, 0x2f, 0xff, 0xfe, 0xe7, 0x30, 0x8d, 0xc7, 0x1e, 0xa4, 0xfd,
-    0xc2, 0x4d, 0xfb, 0xe2, 0xc5, 0xbb, 0x82, 0x2c, 0xf1, 0x02, 0xfe, 0x83,
-    0xfb, 0x81, 0x9d, 0x62, 0xff, 0xf6, 0xff, 0x11, 0xfb, 0xcf, 0x97, 0x72,
-    0x12, 0xc5, 0x82, 0x30, 0xff, 0xf8, 0x61, 0x52, 0x8d, 0x2c, 0x85, 0x45,
-    0xff, 0x16, 0x6b, 0x37, 0xc7, 0x1a, 0xc5, 0xfd, 0xb7, 0xa2, 0x29, 0x3a,
-    0xc5, 0xf7, 0xfb, 0xc3, 0x56, 0x2f, 0xcd, 0x31, 0x4c, 0x4b, 0x17, 0xec,
-    0x1f, 0xc4, 0x12, 0xc5, 0x18, 0x7a, 0x64, 0x53, 0x5b, 0xa2, 0x6a, 0x27,
-    0x8b, 0xff, 0xde, 0xcf, 0xf7, 0x3c, 0x2c, 0x00, 0xb8, 0xb1, 0x52, 0x7e,
-    0x0c, 0x4b, 0x7f, 0xfe, 0xdb, 0x1c, 0x64, 0x2f, 0x99, 0x23, 0x68, 0xb8,
-    0xb1, 0x7f, 0x6a, 0x46, 0x2c, 0x35, 0x62, 0xb1, 0x10, 0xee, 0xb1, 0x7f,
-    0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xf7, 0xdf, 0x5f, 0x65, 0x8b, 0xb0, 0x23,
-    0x0f, 0x57, 0x0b, 0x6a, 0x57, 0xca, 0x72, 0x19, 0x1d, 0x92, 0x3c, 0x60,
-    0x31, 0x42, 0xcf, 0x51, 0xd3, 0x7c, 0x99, 0x8e, 0x0a, 0x33, 0xae, 0x42,
-    0x9f, 0xce, 0xd7, 0x08, 0x96, 0x2f, 0x66, 0x0d, 0x62, 0xbe, 0x6c, 0xfc,
-    0x2f, 0x5b, 0x3a, 0x3e, 0x71, 0xca, 0x79, 0x36, 0x36, 0x1d, 0xe7, 0x64,
-    0x3b, 0x95, 0xaa, 0xf1, 0xf4, 0xc5, 0x0d, 0x2d, 0x4a, 0xe1, 0x3b, 0x8f,
-    0xe1, 0x44, 0x08, 0xc3, 0xca, 0x52, 0x2f, 0x27, 0x08, 0x3d, 0x48, 0x78,
-    0xea, 0x87, 0x65, 0xff, 0xf3, 0xe9, 0xa2, 0x7f, 0x99, 0x31, 0xfe, 0x98,
-    0x96, 0x2f, 0x3e, 0x44, 0xb1, 0x7f, 0x7f, 0x3d, 0xf6, 0x82, 0xc5, 0x41,
-    0x14, 0x1f, 0x55, 0xf0, 0xed, 0xfe, 0xc0, 0x8c, 0x22, 0xce, 0xd6, 0x2f,
-    0x9f, 0x98, 0x33, 0x0f, 0x97, 0x63, 0x0b, 0xd8, 0x5f, 0x58, 0xbf, 0xee,
-    0x19, 0xac, 0x8b, 0xef, 0xda, 0xc5, 0x40, 0xf6, 0x58, 0x72, 0xff, 0x78,
-    0xb3, 0xdf, 0xcd, 0x96, 0x2f, 0x85, 0x01, 0x4a, 0xc5, 0xf4, 0xc7, 0x8a,
-    0x25, 0x8b, 0xff, 0xfa, 0x1c, 0xf0, 0xb7, 0x33, 0x9c, 0xcf, 0xeb, 0x58,
-    0x12, 0xc5, 0xda, 0xc5, 0x8b, 0xd9, 0xee, 0x2c, 0x5f, 0xdd, 0x5e, 0x72,
-    0x63, 0xac, 0x52, 0xc5, 0xf7, 0x32, 0x76, 0x30, 0xde, 0x1c, 0xc2, 0xb6,
-    0x45, 0x4c, 0x42, 0xfe, 0x59, 0xbd, 0xf6, 0x35, 0x62, 0xff, 0x19, 0xac,
-    0xee, 0x0e, 0x75, 0x8a, 0xed, 0x39, 0x0d, 0x46, 0x15, 0xe3, 0x20, 0x87,
-    0xaf, 0xfc, 0xda, 0xfe, 0x7a, 0x49, 0xc0, 0xb1, 0x6e, 0xa5, 0x8b, 0xdb,
-    0x1f, 0x75, 0x8b, 0xf3, 0xe1, 0x67, 0x45, 0x8b, 0xec, 0x78, 0x8c, 0xec,
-    0xf2, 0x3e, 0x41, 0x77, 0xa5, 0x62, 0xfe, 0xf8, 0xb6, 0x32, 0x2d, 0x96,
-    0x2e, 0x9d, 0x2c, 0x5f, 0xe1, 0x7b, 0x30, 0xe0, 0x09, 0x62, 0xf6, 0x6c,
-    0x60, 0xd1, 0x01, 0x11, 0xa0, 0x05, 0xeb, 0xb4, 0x6d, 0x94, 0x25, 0xef,
-    0x79, 0xf6, 0x58, 0xb4, 0x72, 0xc5, 0x40, 0xd9, 0xc7, 0x8f, 0x5f, 0xed,
-    0xdf, 0x98, 0x33, 0x06, 0xb1, 0x7b, 0x76, 0x0d, 0x62, 0xce, 0xb1, 0x7d,
-    0xdc, 0x38, 0x64, 0x9b, 0x0f, 0x0f, 0xdb, 0x3e, 0x8a, 0x00, 0x99, 0xaf,
-    0xff, 0xc5, 0x27, 0x30, 0x7f, 0x11, 0x93, 0x1f, 0xf9, 0x3a, 0xc5, 0xff,
-    0x38, 0x1e, 0x1f, 0x72, 0x02, 0xc5, 0xff, 0xa1, 0x38, 0x0f, 0xe6, 0x16,
-    0xeb, 0x17, 0xff, 0xbe, 0xe4, 0x33, 0x03, 0xdc, 0xb3, 0xf8, 0xb1, 0x7f,
-    0xcd, 0xee, 0x45, 0x01, 0x17, 0x96, 0x2a, 0x51, 0xfb, 0x87, 0x11, 0x1f,
-    0x01, 0x32, 0xff, 0xbe, 0xe7, 0x9c, 0x2f, 0x71, 0x62, 0xff, 0xff, 0x0b,
-    0xda, 0x14, 0x46, 0x7a, 0x2f, 0x88, 0x1e, 0x7c, 0xea, 0x58, 0xbe, 0x9d,
-    0xe4, 0xe6, 0x23, 0x7b, 0x73, 0xc2, 0x38, 0xa9, 0x5f, 0xca, 0xd8, 0xd0,
-    0x64, 0x79, 0x1d, 0xbe, 0xe8, 0xce, 0x7b, 0x12, 0xee, 0xa3, 0x16, 0x65,
-    0xb2, 0x86, 0x27, 0x8a, 0x7a, 0xa5, 0x1b, 0x5f, 0xfe, 0x68, 0x8c, 0x62,
-    0x83, 0x9c, 0xc9, 0x25, 0x8b, 0xff, 0xf6, 0x31, 0xcc, 0x35, 0xbb, 0xfe,
-    0x7f, 0xf3, 0xe5, 0x8a, 0xc4, 0x51, 0xe9, 0x2e, 0xf6, 0x03, 0x8b, 0x17,
-    0xf4, 0x84, 0x67, 0x0f, 0xda, 0xc5, 0x61, 0xe7, 0xe8, 0x76, 0xe7, 0x09,
-    0x62, 0xf6, 0xa2, 0x82, 0xc5, 0xff, 0xb3, 0xbf, 0x19, 0xc9, 0xfb, 0x47,
-    0xac, 0x50, 0xcf, 0xef, 0x06, 0x34, 0x3f, 0x7f, 0xf3, 0xf7, 0x0e, 0x18,
-    0x37, 0xe9, 0x23, 0x58, 0xbd, 0xdc, 0xc7, 0xac, 0x5f, 0xfe, 0x98, 0xb9,
-    0xee, 0xe0, 0xff, 0xee, 0x0e, 0xb1, 0x46, 0xa2, 0xe1, 0x92, 0x44, 0x43,
-    0x7d, 0x9f, 0x6e, 0x8b, 0x17, 0xf4, 0x33, 0xf9, 0xd3, 0x8b, 0x17, 0xf0,
-    0x33, 0xb3, 0x3b, 0xe2, 0xc5, 0xb0, 0x68, 0x86, 0x88, 0x90, 0x06, 0x17,
-    0xff, 0xdf, 0x17, 0x0c, 0xfb, 0xfb, 0xf9, 0xa9, 0xe8, 0xb1, 0x7e, 0xe4,
-    0xc4, 0x2d, 0x2c, 0x5f, 0x4c, 0x42, 0xd2, 0xc5, 0xc0, 0x63, 0x0f, 0x3b,
-    0x85, 0x57, 0xee, 0x3e, 0x76, 0x75, 0x8b, 0xd9, 0xae, 0x2c, 0x50, 0xd3,
-    0x16, 0x04, 0x28, 0xbc, 0x5d, 0xd0, 0xa6, 0xfe, 0xd6, 0x0b, 0xf2, 0x75,
-    0x8b, 0xd9, 0x80, 0x58, 0xbb, 0x3b, 0x30, 0xf2, 0x88, 0xba, 0xb1, 0x17,
-    0xa5, 0x08, 0xfb, 0xf4, 0xf7, 0xfc, 0xd9, 0x62, 0xff, 0xce, 0x11, 0x9a,
-    0x98, 0x72, 0x40, 0xb1, 0x44, 0x7d, 0x7e, 0x2a, 0xbf, 0x67, 0xcc, 0xe9,
-    0xba, 0xc5, 0x8e, 0x35, 0xd2, 0x0c, 0x84, 0xe1, 0xb0, 0xe6, 0xd4, 0x2d,
-    0x8a, 0x50, 0x4f, 0xa1, 0x22, 0x22, 0x1b, 0xff, 0x68, 0xd3, 0x3c, 0x59,
-    0xb3, 0x12, 0xc5, 0x4a, 0x32, 0x03, 0x84, 0x3d, 0xda, 0xc5, 0x8b, 0xff,
-    0xb5, 0x21, 0x75, 0x14, 0x85, 0xdc, 0x38, 0xb1, 0x69, 0x58, 0xbe, 0x7d,
-    0x37, 0x6b, 0x16, 0xf3, 0x9b, 0x4e, 0x08, 0xd0, 0xd1, 0x4a, 0xef, 0xf7,
-    0xfc, 0xc5, 0xbf, 0xdc, 0xe5, 0x2b, 0x17, 0xff, 0x0c, 0x9a, 0x28, 0xa7,
-    0xc0, 0xce, 0x2c, 0x5f, 0xff, 0x14, 0xed, 0xf9, 0x7f, 0x71, 0xcb, 0xb8,
-    0x2c, 0x5c, 0x70, 0xd6, 0x2d, 0x12, 0xc5, 0x2c, 0x54, 0x97, 0xfa, 0x13,
-    0xa9, 0x3d, 0x77, 0x38, 0xbd, 0xb6, 0x04, 0xb1, 0x7f, 0x86, 0x64, 0xc4,
-    0x36, 0x09, 0x62, 0xdd, 0x0c, 0x3d, 0x67, 0x1f, 0xbf, 0xfb, 0x40, 0x8e,
-    0xcf, 0x7f, 0x34, 0xfc, 0x58, 0xbf, 0xf6, 0x70, 0xb3, 0x7d, 0xd8, 0x80,
-    0xb1, 0x4e, 0x8b, 0x16, 0x2a, 0xe2, 0x45, 0xff, 0xde, 0x14, 0x99, 0xc1,
-    0x10, 0xa4, 0xeb, 0x17, 0xff, 0xff, 0x39, 0xbf, 0x68, 0x8c, 0x21, 0x75,
-    0x19, 0x9d, 0xc3, 0x04, 0x40, 0xe2, 0xc5, 0x32, 0x30, 0x09, 0x1a, 0xff,
-    0xf9, 0xe1, 0xee, 0x67, 0x4d, 0x60, 0x38, 0xdb, 0xac, 0x5f, 0xec, 0x63,
-    0x4c, 0x09, 0x82, 0x58, 0xbf, 0xff, 0xd9, 0xb9, 0x85, 0x9f, 0x7c, 0xe1,
-    0x98, 0xff, 0xcd, 0xd6, 0x2d, 0x83, 0x44, 0xcf, 0xcd, 0xef, 0xdc, 0x9e,
-    0x8e, 0x4b, 0x17, 0xfd, 0xed, 0x0a, 0x1d, 0xc3, 0x3c, 0xb1, 0x7c, 0xf2,
-    0x5b, 0x2c, 0x53, 0x9e, 0xf7, 0xcf, 0x28, 0xe9, 0xee, 0xfc, 0x84, 0xa1,
-    0xd9, 0xe2, 0x8e, 0x90, 0x87, 0xbf, 0xff, 0x84, 0x36, 0x20, 0x19, 0xec,
-    0xfc, 0xfb, 0x58, 0x35, 0x8b, 0xe3, 0xbb, 0x84, 0xb1, 0x7f, 0xb4, 0xdc,
-    0x30, 0x2e, 0x6c, 0xb1, 0x52, 0x98, 0x6c, 0x15, 0x99, 0x70, 0x44, 0x74,
-    0x4b, 0xa7, 0x7c, 0x8c, 0x9f, 0xd2, 0xf6, 0x2f, 0xfc, 0xfe, 0xe4, 0xfb,
-    0xf3, 0xd8, 0x16, 0x2f, 0x16, 0x4a, 0xc5, 0xfd, 0x3b, 0x7d, 0xf0, 0x6b,
-    0x15, 0x87, 0x93, 0xa1, 0xbb, 0xff, 0xdc, 0x30, 0x7f, 0x11, 0x92, 0xe3,
-    0x0f, 0x4b, 0x17, 0xff, 0x86, 0x42, 0x6f, 0x0a, 0x74, 0xf9, 0xa5, 0x8a,
-    0x74, 0x4c, 0x09, 0x3e, 0xff, 0xf1, 0xcb, 0x01, 0x20, 0x8a, 0x13, 0xad,
-    0x96, 0x2f, 0x45, 0xc7, 0x58, 0xbd, 0x1d, 0x92, 0xb1, 0x52, 0x6f, 0x7c,
-    0x3d, 0x7f, 0xfd, 0xa1, 0x17, 0x8c, 0x00, 0x1f, 0x4f, 0xd8, 0x16, 0x2f,
-    0xf4, 0x9e, 0x63, 0x02, 0x08, 0x25, 0x8a, 0x96, 0x50, 0xbc, 0x21, 0x78,
-    0x32, 0x2c, 0x38, 0xdd, 0x19, 0xe7, 0x78, 0xa2, 0x3f, 0xd4, 0x22, 0x4f,
-    0x0b, 0x96, 0x22, 0x28, 0x44, 0xf0, 0x83, 0xa9, 0x4e, 0xff, 0xfb, 0xe2,
-    0xe1, 0x9f, 0x73, 0x3c, 0x4c, 0x0e, 0x2c, 0x5f, 0xff, 0xd0, 0x9d, 0x1a,
-    0x72, 0x7e, 0xe1, 0xc1, 0xe9, 0xf6, 0x58, 0xbf, 0xff, 0xdc, 0x71, 0x0c,
-    0xc3, 0x49, 0x86, 0x2c, 0xf9, 0x91, 0x44, 0xb1, 0x6c, 0x1a, 0x63, 0x31,
-    0x29, 0xf1, 0x7e, 0xf4, 0xc5, 0xc5, 0x8b, 0x7d, 0x62, 0xe1, 0x0d, 0x62,
-    0xe9, 0xf2, 0xc5, 0xe8, 0x49, 0xd6, 0x2f, 0xee, 0x11, 0x60, 0x38, 0xb1,
-    0x46, 0x22, 0x2e, 0x21, 0x2d, 0x0c, 0x30, 0xbf, 0x87, 0x6f, 0xff, 0xe2,
-    0x6f, 0x73, 0x34, 0x00, 0x4e, 0x77, 0xee, 0x3a, 0xc5, 0xf4, 0x27, 0x5b,
-    0x2c, 0x5c, 0xc3, 0xc3, 0xff, 0x89, 0x6e, 0xd1, 0xba, 0xc5, 0x18, 0xf9,
-    0x47, 0x73, 0x2d, 0xeb, 0x66, 0x91, 0x8d, 0x65, 0xa5, 0xb8, 0xde, 0x51,
-    0x9f, 0x70, 0x93, 0x79, 0xfe, 0xbd, 0x46, 0xc9, 0xf9, 0xe5, 0x96, 0xa5,
-    0x1f, 0x94, 0x7d, 0x7e, 0x37, 0x14, 0x2a, 0x42, 0x86, 0x54, 0x71, 0x6d,
-    0xef, 0x67, 0xd6, 0x2f, 0x73, 0x37, 0x58, 0xbf, 0x41, 0xc7, 0x84, 0xb1,
-    0x73, 0xf6, 0xb1, 0x46, 0x1e, 0xec, 0x8f, 0x0c, 0x9e, 0xfe, 0xce, 0xe1,
-    0x82, 0x89, 0x62, 0xf7, 0x1f, 0x4b, 0x17, 0xff, 0x33, 0xfa, 0x12, 0x5e,
-    0xe3, 0x8d, 0x62, 0x8c, 0x44, 0x84, 0x98, 0x7c, 0x76, 0xed, 0x62, 0xc5,
-    0xef, 0x3f, 0x45, 0x8a, 0x01, 0xb6, 0x21, 0x7b, 0xe8, 0x09, 0xbc, 0xb1,
-    0x74, 0xc7, 0xac, 0x5c, 0x28, 0xf5, 0x8b, 0xd2, 0x52, 0xb1, 0x5b, 0x9e,
-    0x86, 0x86, 0x8e, 0x37, 0x7f, 0xf6, 0x75, 0x0f, 0x52, 0x10, 0xc9, 0xbe,
-    0xb1, 0x52, 0x98, 0x5e, 0x10, 0x3b, 0x9f, 0xcc, 0x2f, 0xbd, 0xc6, 0x02,
-    0xc5, 0xff, 0xf0, 0xb6, 0x32, 0x5f, 0xfb, 0xc8, 0x0e, 0xd0, 0x58, 0xbf,
-    0xf3, 0x98, 0xfa, 0x16, 0xcd, 0xad, 0xd6, 0x28, 0xd4, 0x4a, 0xfd, 0x4e,
-    0xf9, 0xfe, 0xdb, 0x2c, 0x5f, 0x3e, 0xed, 0xa5, 0x8b, 0xf4, 0x91, 0xcd,
-    0x35, 0x62, 0xff, 0x3f, 0x1c, 0x5d, 0x78, 0xe5, 0x62, 0xf4, 0xfa, 0x56,
-    0x2a, 0x08, 0xa1, 0x19, 0x1f, 0x8a, 0xba, 0x1c, 0x5f, 0xc6, 0x16, 0x0e,
-    0x40, 0xb1, 0x7c, 0x77, 0x2d, 0xd6, 0x28, 0x67, 0xa3, 0xf2, 0xeb, 0xec,
-    0xf3, 0xf1, 0x62, 0xb0, 0xf1, 0x38, 0x45, 0x7a, 0x3b, 0x06, 0xb1, 0x77,
-    0x9d, 0x62, 0xa4, 0xdb, 0xb9, 0x05, 0xe8, 0x49, 0xd6, 0x2e, 0x60, 0xd6,
-    0x2b, 0xe6, 0xd7, 0x83, 0xb7, 0xfe, 0xf7, 0xdf, 0x30, 0x65, 0x81, 0x2c,
-    0x56, 0x1e, 0xfb, 0x90, 0xdf, 0x69, 0xfb, 0x82, 0xc5, 0xff, 0xb9, 0x31,
-    0x67, 0xdf, 0x5f, 0x65, 0x8b, 0xfb, 0x59, 0xfe, 0xe1, 0xc5, 0x8b, 0xb3,
-    0xeb, 0x17, 0x73, 0x16, 0x28, 0x68, 0xc1, 0x72, 0x4d, 0x1f, 0x9c, 0xc1,
-    0x85, 0xef, 0x69, 0xcd, 0x58, 0xbf, 0xf1, 0xf1, 0xfc, 0xde, 0xfc, 0xf9,
-    0x62, 0xe7, 0xfa, 0xc5, 0xb1, 0x62, 0xff, 0xf8, 0x58, 0xff, 0xcd, 0xfe,
-    0xe6, 0x04, 0x7d, 0xd6, 0x2f, 0x7b, 0x02, 0x58, 0xb6, 0xc4, 0x7e, 0x5e,
-    0x54, 0xa3, 0xa2, 0xac, 0x50, 0x83, 0xbd, 0xb0, 0xbc, 0xb1, 0x7d, 0xf7,
-    0x60, 0x2c, 0x56, 0x1e, 0x0f, 0x87, 0xed, 0x2b, 0x16, 0xfa, 0xc5, 0x6c,
-    0x68, 0xcd, 0x11, 0xbf, 0x1a, 0x2c, 0x34, 0x0b, 0x17, 0xbe, 0xe1, 0x2c,
-    0x5b, 0x0d, 0x3c, 0x9f, 0x15, 0xdf, 0x77, 0x09, 0x3a, 0xc5, 0x62, 0x2e,
-    0x09, 0xb3, 0xc5, 0x17, 0xa1, 0x9d, 0xac, 0x58, 0x25, 0x8a, 0x30, 0xf7,
-    0xe2, 0x2e, 0xe0, 0xf5, 0xb6, 0x58, 0xbd, 0x16, 0x6b, 0x0f, 0x11, 0x8c,
-    0x6d, 0xc5, 0x8b, 0xa7, 0xeb, 0x15, 0xd9, 0xa9, 0x88, 0x4a, 0x86, 0xad,
-    0x23, 0x21, 0x84, 0x06, 0x9f, 0x47, 0x3e, 0x25, 0xbb, 0xff, 0xc2, 0x23,
-    0x33, 0x5b, 0x1f, 0x39, 0xfc, 0x58, 0xbe, 0xeb, 0xc9, 0xbc, 0xb1, 0x5b,
-    0x1f, 0x98, 0x93, 0x2f, 0xf8, 0xc3, 0xb9, 0x67, 0xbe, 0xeb, 0x17, 0xed,
-    0x98, 0xbd, 0xc5, 0x8b, 0xb9, 0x2b, 0x17, 0xe6, 0xd8, 0xc8, 0x79, 0x62,
-    0xb6, 0x3c, 0x2f, 0x8b, 0xdf, 0x88, 0x12, 0xfd, 0x16, 0x2f, 0xd1, 0x07,
-    0xc9, 0xc5, 0x8a, 0x73, 0xd3, 0x62, 0x9b, 0x47, 0xac, 0x5f, 0x9b, 0x45,
-    0xdb, 0xac, 0x5f, 0x18, 0x11, 0x81, 0x2c, 0x5d, 0x3e, 0x58, 0xa9, 0x37,
-    0xf1, 0x14, 0x54, 0xa7, 0xf5, 0x02, 0x3c, 0x39, 0x76, 0xbf, 0xbb, 0x31,
-    0x07, 0x85, 0x44, 0xcf, 0x68, 0x2c, 0x5c, 0xe3, 0x58, 0xa8, 0xd0, 0xd4,
-    0xc8, 0x95, 0xef, 0xb1, 0x2c, 0x57, 0x5a, 0xce, 0xcc, 0xd9, 0xea, 0x10,
-    0xbf, 0x1c, 0x6e, 0x38, 0x76, 0x6c, 0x2e, 0x37, 0x24, 0x78, 0x62, 0x45,
-    0x0d, 0x4d, 0x2c, 0x1e, 0x16, 0x7f, 0x87, 0x0b, 0x24, 0x00, 0x78, 0xa5,
-    0xc3, 0x7a, 0x56, 0x1f, 0x48, 0x4b, 0x84, 0x4b, 0x78, 0x53, 0xb2, 0xc5,
-    0xfb, 0x9a, 0xd3, 0x9d, 0x62, 0xb8, 0x78, 0xfe, 0x1e, 0xb9, 0xfb, 0x58,
-    0xb7, 0x5a, 0xb1, 0x79, 0xf5, 0x2b, 0x17, 0x7e, 0x3d, 0x62, 0xfe, 0x33,
-    0x8f, 0xf7, 0x3a, 0xc5, 0xef, 0x49, 0xd6, 0x2a, 0x36, 0x44, 0xd6, 0xc2,
-    0xf0, 0x1c, 0xec, 0x6c, 0x8b, 0xef, 0xff, 0xec, 0x70, 0x49, 0x67, 0x7e,
-    0x6e, 0xe0, 0x1f, 0x00, 0xb1, 0x6d, 0x96, 0x28, 0xc3, 0xf0, 0x82, 0xed,
-    0xdd, 0x9a, 0xb1, 0x7f, 0x1d, 0xa1, 0xac, 0x09, 0x62, 0xdd, 0x8c, 0xf2,
-    0x70, 0x6a, 0xff, 0x7b, 0x86, 0x67, 0xf0, 0x96, 0x2b, 0x0f, 0x71, 0x8a,
-    0x2f, 0x73, 0xd8, 0xb1, 0x7f, 0xfa, 0x05, 0x87, 0x3b, 0x70, 0xce, 0x48,
-    0xd6, 0x2f, 0xbd, 0x8d, 0xba, 0xc5, 0x75, 0xa8, 0x8b, 0x91, 0xdc, 0x4b,
-    0xbf, 0xdf, 0x73, 0xff, 0x00, 0xcb, 0x17, 0xfe, 0xc2, 0xcd, 0x6f, 0xfc,
-    0x07, 0x16, 0x2f, 0x45, 0x23, 0x58, 0xbe, 0xdf, 0x08, 0x0b, 0x17, 0xfe,
-    0xfc, 0x94, 0xef, 0xa9, 0xc2, 0x58, 0xa1, 0xa3, 0xc1, 0xcc, 0xf4, 0x7e,
-    0xc3, 0xde, 0x23, 0xbc, 0x79, 0x82, 0xc5, 0xfd, 0x9b, 0x49, 0xad, 0xc5,
-    0x8b, 0xff, 0xef, 0xbe, 0xbe, 0xc6, 0x67, 0x70, 0xcd, 0x6c, 0xb1, 0x7f,
-    0x7d, 0xc6, 0xfa, 0xdd, 0x62, 0xfb, 0x37, 0xce, 0xd6, 0x2f, 0xff, 0xd9,
-    0xee, 0x7d, 0x8f, 0xac, 0xee, 0x1c, 0x14, 0x4b, 0x17, 0xff, 0xe6, 0xec,
-    0x7a, 0x26, 0x08, 0xb0, 0x00, 0xc0, 0x2c, 0x5d, 0xdf, 0x0c, 0x4f, 0xa6,
-    0x52, 0x06, 0x3b, 0x85, 0xfb, 0xa9, 0xfc, 0xbc, 0x89, 0x3c, 0xb3, 0x7a,
-    0x29, 0x09, 0x62, 0xfd, 0xe2, 0xcc, 0xd2, 0xc5, 0xff, 0xd1, 0x0f, 0xe2,
-    0x2c, 0x8a, 0x19, 0xda, 0xc5, 0xfe, 0xfc, 0xb9, 0x36, 0x8d, 0x58, 0xbf,
-    0xa5, 0xc9, 0xb4, 0x6a, 0xc5, 0xf6, 0xb4, 0xfa, 0x30, 0xf8, 0x3e, 0x67,
-    0x7f, 0x16, 0x45, 0xa6, 0xe8, 0xb1, 0x7e, 0xc8, 0xb4, 0xdd, 0x16, 0x29,
-    0x62, 0xdb, 0x98, 0x7c, 0xe4, 0x61, 0xd0, 0xae, 0xbe, 0x9c, 0x08, 0x21,
-    0x50, 0x50, 0xa1, 0xa9, 0x54, 0x02, 0xe3, 0xed, 0x1d, 0x45, 0xff, 0xbb,
-    0xf3, 0x77, 0xc1, 0xce, 0x76, 0xb1, 0x78, 0xb0, 0xeb, 0x16, 0xed, 0x62,
-    0xd0, 0x81, 0xaf, 0xe0, 0xe5, 0x4a, 0x26, 0x19, 0xc6, 0xff, 0xff, 0xf1,
-    0x87, 0x9c, 0xf1, 0x99, 0x07, 0xe8, 0x59, 0xc3, 0x24, 0x6d, 0x17, 0x16,
-    0x2f, 0x05, 0xc0, 0x2c, 0x5f, 0xd8, 0x71, 0xb3, 0x6e, 0xb1, 0x71, 0x6e,
-    0x61, 0xe6, 0xfc, 0x7e, 0xa0, 0x8f, 0x86, 0x86, 0x4d, 0xff, 0x19, 0xcc,
-    0xfe, 0x08, 0xb7, 0x58, 0xb6, 0x2c, 0x56, 0x32, 0xba, 0xf7, 0x22, 0x78,
-    0x59, 0x45, 0x0c, 0x0d, 0x43, 0x20, 0xf0, 0xab, 0x69, 0x61, 0x80, 0x94,
-    0xfe, 0x50, 0xcd, 0x14, 0x63, 0x21, 0x13, 0xc7, 0x1d, 0xde, 0xe7, 0x9d,
-    0x62, 0xf4, 0x40, 0xed, 0x62, 0xff, 0xb2, 0x1f, 0x97, 0xd6, 0xa5, 0x62,
-    0xe3, 0x4c, 0xdc, 0xfd, 0x40, 0x3b, 0xc2, 0x0b, 0xdc, 0xeb, 0xf8, 0xb1,
-    0x52, 0x7c, 0x3d, 0x9f, 0x5f, 0x00, 0x02, 0x8f, 0x58, 0xb0, 0x16, 0x2f,
-    0x7b, 0x92, 0xb1, 0x7c, 0x2e, 0xe1, 0xc5, 0x8b, 0x19, 0x27, 0x85, 0xa1,
-    0xdb, 0xf6, 0xb6, 0x9d, 0x6c, 0xb1, 0x7e, 0x72, 0xf0, 0x67, 0x58, 0xa9,
-    0x3d, 0x40, 0x15, 0xde, 0x87, 0x31, 0x62, 0xfd, 0xd6, 0x94, 0xe0, 0x16,
-    0x2b, 0x47, 0x92, 0x01, 0xdb, 0xcc, 0xe4, 0xb1, 0x7e, 0x14, 0x45, 0x27,
-    0x58, 0xbb, 0x02, 0x30, 0xf1, 0x38, 0x37, 0x7c, 0x2e, 0xe1, 0xc5, 0x8a,
-    0x73, 0xd4, 0x39, 0x7d, 0xff, 0xe7, 0x3e, 0x70, 0xc2, 0xcd, 0x03, 0x22,
-    0x58, 0xbf, 0xdd, 0xc0, 0x45, 0xb6, 0xd2, 0xb1, 0x7e, 0x6d, 0xde, 0x78,
-    0xb1, 0x7d, 0x99, 0xae, 0x2c, 0x5b, 0x86, 0x22, 0x07, 0xe6, 0xe0, 0x28,
-    0xbc, 0x26, 0xe2, 0xc5, 0x6c, 0xab, 0x86, 0x0f, 0x98, 0xd4, 0x78, 0x5d,
-    0x7c, 0x87, 0xd0, 0xcc, 0x0c, 0xde, 0xff, 0x04, 0x79, 0x7d, 0x0a, 0x3d,
-    0x62, 0xe2, 0x12, 0xc5, 0x2c, 0x5b, 0x46, 0x1a, 0x3e, 0x0b, 0xdf, 0x8c,
-    0xee, 0x02, 0xd9, 0x62, 0xff, 0xb7, 0xc7, 0xfc, 0xeb, 0x0e, 0xb1, 0x52,
-    0x88, 0xe8, 0x14, 0x11, 0x6d, 0x62, 0x62, 0xe2, 0x87, 0x4d, 0xff, 0xfc,
-    0xfa, 0x33, 0x1f, 0x08, 0xdf, 0xbe, 0x1f, 0x37, 0x58, 0xbf, 0xec, 0xee,
-    0x1c, 0xee, 0x02, 0xd2, 0xc5, 0xff, 0xff, 0x8f, 0xcd, 0xff, 0x3b, 0xf7,
-    0x02, 0x10, 0xcc, 0x73, 0x58, 0x80, 0xb1, 0x7f, 0xff, 0xb6, 0xd4, 0x9f,
-    0x82, 0x93, 0x27, 0x52, 0x3f, 0xc9, 0xd6, 0x2b, 0x11, 0xaa, 0xee, 0x57,
-    0xff, 0x9c, 0xd1, 0xc9, 0xa0, 0xea, 0x16, 0x14, 0x4b, 0x17, 0xfd, 0x03,
-    0x24, 0xcf, 0x7f, 0x09, 0x62, 0xb1, 0x50, 0xcb, 0xad, 0xea, 0x31, 0x2f,
-    0x90, 0xb2, 0x85, 0xf8, 0x1c, 0x7e, 0xc2, 0x58, 0xbf, 0xc2, 0x2e, 0xe1,
-    0xc2, 0x1a, 0xc5, 0xff, 0xd3, 0xdc, 0x38, 0x59, 0xf2, 0xc0, 0x96, 0x2f,
-    0xff, 0x61, 0xa0, 0x31, 0x8b, 0xd1, 0x66, 0xb1, 0x62, 0xb1, 0x12, 0x2e,
-    0x8b, 0x7e, 0xee, 0x4f, 0xb4, 0xac, 0x5f, 0x77, 0x07, 0xfa, 0xc5, 0xd9,
-    0xdf, 0xcf, 0x3b, 0xc5, 0x57, 0xe8, 0xa1, 0x25, 0x05, 0x8b, 0xfd, 0xd9,
-    0x9d, 0x5e, 0xc2, 0xd9, 0x62, 0xb1, 0x3c, 0x63, 0x61, 0x8d, 0xa6, 0xf0,
-    0x17, 0x08, 0xa6, 0xfe, 0xed, 0xa0, 0x52, 0x75, 0x8b, 0xff, 0xa3, 0xce,
-    0x42, 0x0b, 0x58, 0xe4, 0x05, 0x8b, 0xff, 0xfe, 0x28, 0xbf, 0x9d, 0xc2,
-    0x48, 0x66, 0x16, 0x74, 0xd3, 0xf1, 0x62, 0x96, 0x2f, 0xc5, 0x9b, 0x31,
-    0x2c, 0x5c, 0x51, 0x75, 0xa6, 0xcf, 0xc1, 0x95, 0x29, 0x8b, 0xba, 0x40,
-    0xa1, 0x3b, 0x7e, 0xdc, 0xc3, 0xb7, 0x96, 0x2f, 0xff, 0xfe, 0xd3, 0xec,
-    0x67, 0xf3, 0xc5, 0x31, 0x7f, 0x36, 0x9e, 0xfc, 0x2d, 0xd6, 0x2b, 0x11,
-    0x47, 0xa2, 0xbb, 0xff, 0xff, 0xa4, 0xdf, 0xc9, 0x85, 0x82, 0x34, 0xce,
-    0xe1, 0xc7, 0x20, 0xe7, 0x65, 0x8b, 0xf1, 0x03, 0x84, 0x25, 0x8b, 0xf6,
-    0x0a, 0x75, 0xb2, 0xc5, 0xe7, 0xc2, 0x58, 0xb7, 0x64, 0x78, 0x9c, 0x29,
-    0xac, 0x4c, 0x31, 0xde, 0x04, 0xd9, 0x7f, 0xff, 0xfb, 0x36, 0xfe, 0x75,
-    0x7e, 0x48, 0xc2, 0xc8, 0xa1, 0x83, 0xee, 0x12, 0x35, 0x8b, 0xff, 0xec,
-    0xea, 0x2c, 0x3b, 0x17, 0xb8, 0x64, 0x84, 0xb1, 0x52, 0xb8, 0x93, 0x91,
-    0xa2, 0xbc, 0x35, 0xff, 0x19, 0x71, 0x17, 0x89, 0xf6, 0xff, 0xde, 0x39,
-    0xda, 0x23, 0x0b, 0x02, 0x58, 0xbf, 0xfc, 0x0e, 0x0c, 0x4d, 0xa8, 0x7d,
-    0xf0, 0xeb, 0x17, 0xfe, 0x2e, 0xf3, 0x82, 0x88, 0xa4, 0xeb, 0x15, 0x88,
-    0x8b, 0xd2, 0x5d, 0xfe, 0x37, 0xf2, 0xfb, 0x49, 0xab, 0x17, 0xf9, 0xfb,
-    0xfb, 0x1d, 0xf8, 0xb1, 0x7f, 0xff, 0xd3, 0xec, 0x39, 0x64, 0x84, 0x32,
-    0xc3, 0x33, 0x4d, 0xc5, 0x8a, 0x74, 0x67, 0x91, 0xb0, 0x8d, 0x29, 0xd3,
-    0x1f, 0xe4, 0x3c, 0x68, 0xc5, 0x42, 0x90, 0x8f, 0xb2, 0xff, 0xdc, 0xce,
-    0xe0, 0xfa, 0x2e, 0xf1, 0x62, 0xff, 0xd1, 0x7b, 0x05, 0xa3, 0x18, 0x62,
-    0x58, 0xbf, 0x1c, 0xb3, 0xb8, 0xf5, 0x8b, 0x1f, 0x0f, 0xbb, 0x88, 0x57,
-    0xf8, 0x51, 0x16, 0x7d, 0xbc, 0xb1, 0x5b, 0x26, 0x13, 0x90, 0xae, 0x22,
-    0x7b, 0xff, 0x08, 0x1c, 0x2c, 0xe7, 0x24, 0x25, 0x8b, 0xf8, 0xb6, 0x8e,
-    0xf8, 0x7a, 0x58, 0xa8, 0x1f, 0xa3, 0x20, 0x5f, 0x04, 0x66, 0xce, 0xb1,
-    0x7e, 0x08, 0x7f, 0x63, 0xac, 0x5f, 0xee, 0xe1, 0xc3, 0x39, 0xe7, 0x58,
-    0xa9, 0x3e, 0x17, 0x2a, 0xac, 0x45, 0x3f, 0xe1, 0x0f, 0x7b, 0x24, 0xd5,
-    0x8b, 0xff, 0x60, 0x5e, 0x1b, 0xe7, 0x70, 0xe2, 0xc5, 0xfe, 0xfc, 0xb9,
-    0x36, 0x8d, 0x58, 0xbf, 0x8f, 0xc9, 0xfb, 0x47, 0xac, 0x5f, 0xfe, 0x39,
-    0x98, 0x2e, 0xbd, 0xfe, 0xe7, 0x61, 0xac, 0x54, 0x48, 0xb4, 0x63, 0x31,
-    0x18, 0xdf, 0xd1, 0x7c, 0x98, 0x1c, 0x58, 0xac, 0x3d, 0xf1, 0x18, 0x5f,
-    0xf1, 0xf3, 0x86, 0x44, 0x52, 0x75, 0x8b, 0xff, 0x30, 0xcc, 0x19, 0x48,
-    0x87, 0x8b, 0x17, 0xdb, 0x18, 0x38, 0xd1, 0x62, 0xff, 0xf3, 0x18, 0x3f,
-    0xce, 0xb5, 0x9d, 0x27, 0xb5, 0x8b, 0x72, 0x4f, 0xe7, 0x62, 0xbb, 0xff,
-    0x49, 0x40, 0xc0, 0xfa, 0xa4, 0xa0, 0xb1, 0x43, 0x56, 0x2f, 0xd9, 0x3b,
-    0x8e, 0xea, 0x35, 0x43, 0x90, 0x80, 0xef, 0xd0, 0xb8, 0x08, 0xa2, 0xff,
-    0xfb, 0x36, 0x30, 0x7a, 0x7d, 0xbc, 0xf8, 0x5b, 0x2c, 0x5f, 0xfb, 0xdc,
-    0x33, 0xee, 0x13, 0x11, 0xab, 0x17, 0xff, 0x11, 0xa0, 0xd6, 0x4f, 0x70,
-    0x73, 0xac, 0x56, 0x22, 0x21, 0x90, 0xaf, 0xfd, 0x92, 0x5e, 0xf7, 0x70,
-    0x7d, 0x2c, 0x54, 0xa6, 0x76, 0x78, 0x6d, 0x88, 0x86, 0xfe, 0xf0, 0x33,
-    0xab, 0x09, 0x62, 0xff, 0x85, 0x24, 0x63, 0xfa, 0x62, 0x58, 0xbb, 0x40,
-    0x30, 0xfa, 0x8e, 0x61, 0x7d, 0xd3, 0x05, 0xba, 0xc5, 0xfe, 0xce, 0xe3,
-    0x9f, 0x58, 0x6a, 0xc5, 0xff, 0xff, 0x36, 0xbf, 0x9e, 0x7c, 0x2d, 0xb9,
-    0x38, 0x43, 0xfc, 0xac, 0x5b, 0x4b, 0x17, 0xf6, 0x75, 0x79, 0xcb, 0x65,
-    0x8b, 0xbc, 0x66, 0xc7, 0x86, 0x42, 0x57, 0xff, 0xfc, 0x0c, 0x88, 0xcf,
-    0xb3, 0xfa, 0x4a, 0x41, 0x92, 0x40, 0x58, 0xbf, 0xfe, 0xcd, 0x77, 0x06,
-    0xef, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xe9, 0x04, 0x9d, 0xf5, 0x12, 0xc5,
-    0x3a, 0x21, 0x49, 0x46, 0xff, 0xfd, 0xfc, 0x11, 0xcc, 0xe4, 0xbf, 0x7e,
-    0xf4, 0x9d, 0x62, 0xa5, 0x56, 0x36, 0x17, 0x9a, 0x4d, 0xd9, 0xc3, 0x42,
-    0x9c, 0x05, 0xfe, 0x87, 0x57, 0x51, 0x0d, 0xff, 0xff, 0xbb, 0xcd, 0x85,
-    0xd4, 0x67, 0x70, 0xf4, 0x84, 0x66, 0x68, 0x00, 0x95, 0x8b, 0xfe, 0xc8,
-    0xa3, 0x85, 0xec, 0xef, 0xcb, 0x17, 0xb3, 0x43, 0x58, 0xba, 0x60, 0xb1,
-    0x7f, 0xfd, 0xc3, 0x35, 0x3b, 0xe1, 0x45, 0x0c, 0xf7, 0x16, 0x2b, 0x11,
-    0x8c, 0x73, 0xf0, 0x0e, 0x88, 0x5e, 0xff, 0xcc, 0x59, 0xfc, 0xf6, 0xb0,
-    0x25, 0x8b, 0xff, 0xfd, 0xcc, 0x16, 0x8d, 0x33, 0xef, 0x9e, 0xe1, 0x85,
-    0x83, 0x58, 0xad, 0x91, 0x45, 0xe3, 0xeb, 0xf1, 0xa6, 0x74, 0x87, 0x5a,
-    0xb1, 0x7f, 0xff, 0xfc, 0x23, 0x48, 0x5e, 0x8b, 0x3c, 0xfd, 0xc0, 0xa4,
-    0xb3, 0xef, 0x9a, 0x89, 0x62, 0xa5, 0x16, 0x58, 0x67, 0x58, 0x8f, 0x7e,
-    0xe1, 0xad, 0x7c, 0x13, 0x10, 0x16, 0x2f, 0xfb, 0x02, 0xfc, 0x9b, 0x9e,
-    0xe2, 0xc5, 0xfe, 0x2d, 0xe7, 0x72, 0x93, 0xac, 0x5f, 0xfe, 0x1f, 0xe7,
-    0x59, 0xef, 0x66, 0xd3, 0xb2, 0xc5, 0xb1, 0xd1, 0x00, 0x73, 0x4b, 0xff,
-    0x98, 0xb6, 0x38, 0x9c, 0x6e, 0x4e, 0xb1, 0x58, 0x9a, 0x43, 0x91, 0xf2,
-    0x17, 0x61, 0x13, 0xdf, 0x77, 0xef, 0xba, 0xc5, 0xfb, 0xb8, 0x0a, 0x7c,
-    0xb1, 0x58, 0x79, 0xd1, 0x12, 0x5f, 0xfd, 0xf7, 0x8b, 0x91, 0x43, 0x05,
-    0xad, 0xd6, 0x2f, 0xfb, 0x6f, 0xc9, 0x9c, 0xf8, 0xc6, 0xb1, 0x7f, 0xbb,
-    0xfe, 0x7b, 0x58, 0x12, 0xc5, 0x39, 0xf9, 0x88, 0xf6, 0xff, 0xfe, 0x84,
-    0xeb, 0xb8, 0x70, 0xcf, 0xcb, 0x93, 0x68, 0xd5, 0x8b, 0xd3, 0x13, 0x2c,
-    0x5f, 0xff, 0x41, 0xfa, 0x16, 0x70, 0xcc, 0xfb, 0x76, 0x05, 0x8a, 0x19,
-    0xf8, 0x60, 0xed, 0xe2, 0xc8, 0x2c, 0x5a, 0x06, 0x1b, 0xdf, 0x10, 0xdf,
-    0xfb, 0xb1, 0xfc, 0x4d, 0xc2, 0xc1, 0xac, 0x56, 0x1f, 0x40, 0x8a, 0x2f,
-    0xfe, 0xd9, 0x88, 0xcd, 0x69, 0xcd, 0xc2, 0x58, 0xbf, 0xe6, 0xf7, 0xb2,
-    0x28, 0x3f, 0x96, 0x2f, 0xec, 0x34, 0xd6, 0xf7, 0x16, 0x2f, 0xec, 0xee,
-    0x1c, 0x14, 0x4b, 0x17, 0xd9, 0xf6, 0xf2, 0xc5, 0xcc, 0x73, 0x11, 0x07,
-    0xa3, 0x02, 0x31, 0xa9, 0x47, 0xc7, 0xe1, 0x7b, 0x70, 0x02, 0x58, 0xbe,
-    0x8e, 0xcd, 0x4a, 0xc5, 0x68, 0xdf, 0x74, 0x19, 0xbf, 0xfe, 0x3f, 0x3f,
-    0x25, 0xed, 0x4f, 0xf7, 0x7e, 0x2c, 0x5e, 0x79, 0x3a, 0xc5, 0x9d, 0x62,
-    0xb4, 0x6b, 0x7c, 0x39, 0x78, 0x52, 0x05, 0x8b, 0x11, 0x86, 0xfb, 0x44,
-    0x35, 0x89, 0x83, 0x39, 0x1b, 0x42, 0xf2, 0xec, 0x25, 0x8a, 0x95, 0xd8,
-    0x51, 0x91, 0x64, 0x2f, 0x3b, 0x21, 0xfc, 0x6e, 0x6c, 0x43, 0xc8, 0xcf,
-    0xbd, 0x1b, 0x58, 0x8c, 0xef, 0xff, 0x19, 0xee, 0xe0, 0x2e, 0x18, 0x29,
-    0x23, 0x56, 0x2f, 0xfa, 0x1c, 0x33, 0x93, 0x10, 0xb4, 0xb1, 0x5b, 0x22,
-    0x37, 0xb5, 0x0b, 0xff, 0x7b, 0x86, 0x6b, 0x1f, 0xf2, 0x35, 0x8a, 0x93,
-    0xe5, 0xc2, 0x5b, 0xfe, 0xff, 0xe7, 0xb3, 0x02, 0x3e, 0xeb, 0x17, 0xb7,
-    0x68, 0xf5, 0x8b, 0xfb, 0x3d, 0xad, 0x64, 0x16, 0x29, 0x62, 0xfd, 0x9f,
-    0x2c, 0xdd, 0x62, 0x80, 0x6d, 0x08, 0x32, 0x9d, 0x14, 0x71, 0x10, 0xf9,
-    0x8a, 0xf6, 0x77, 0xe5, 0x8b, 0xfd, 0x83, 0x7e, 0x9e, 0x7d, 0x2c, 0x5d,
-    0x9c, 0x31, 0x10, 0x71, 0xe6, 0x0c, 0x3d, 0x4c, 0x9d, 0x19, 0x46, 0xcb,
-    0x7f, 0x1c, 0xc7, 0xd9, 0xbc, 0xb1, 0x7b, 0x1c, 0x25, 0x8b, 0xf4, 0xbe,
-    0x85, 0x1e, 0xb1, 0x63, 0x8c, 0xf2, 0x3e, 0x3b, 0x52, 0x8a, 0x0c, 0x78,
-    0xbf, 0x6e, 0x53, 0xee, 0x2c, 0x5f, 0xfb, 0x24, 0x2f, 0xe7, 0x9f, 0x38,
-    0xb1, 0x7e, 0x7d, 0x89, 0x8e, 0xb1, 0x73, 0x0d, 0x62, 0xa5, 0x14, 0xda,
-    0x29, 0xf1, 0xf0, 0x8a, 0x2b, 0x67, 0x4d, 0x3a, 0x39, 0x48, 0x38, 0x9e,
-    0x6c, 0x7e, 0x3b, 0xce, 0x4c, 0xf7, 0x29, 0xed, 0xe3, 0x35, 0x8a, 0x15,
-    0x3a, 0x97, 0xbe, 0x78, 0xee, 0xbf, 0x2d, 0x95, 0x9f, 0xc1, 0x19, 0xe9,
-    0x47, 0xab, 0xc8, 0xdc, 0x3d, 0x3c, 0x2a, 0x28, 0xe2, 0x3a, 0x47, 0x86,
-    0x1c, 0x32, 0x3a, 0xa1, 0x8f, 0x7c, 0x29, 0x21, 0xac, 0x5f, 0xd1, 0xe6,
-    0x34, 0x58, 0xcb, 0x17, 0xfd, 0x27, 0x2c, 0x1e, 0x9f, 0x65, 0x8b, 0xff,
-    0xfc, 0x17, 0xc5, 0x3d, 0x99, 0xad, 0x4e, 0xc4, 0xcd, 0xa3, 0x56, 0x2f,
-    0xf1, 0x60, 0xb0, 0xd8, 0x01, 0x62, 0x99, 0x13, 0x41, 0x33, 0x54, 0xa6,
-    0x51, 0x03, 0x2c, 0x86, 0x9d, 0xff, 0xf4, 0xec, 0x67, 0xe5, 0xfd, 0xc9,
-    0xdb, 0x38, 0xb1, 0x7f, 0xf4, 0xeb, 0xcf, 0x9d, 0x47, 0x14, 0x92, 0xc5,
-    0xe3, 0x67, 0x4b, 0x17, 0xff, 0xd2, 0x67, 0xdb, 0xa1, 0x98, 0x73, 0xce,
-    0x8d, 0x58, 0xbf, 0x00, 0xf9, 0x9e, 0x58, 0xbf, 0xc6, 0x6b, 0x3e, 0x59,
-    0x12, 0xc5, 0xfe, 0x39, 0x9e, 0x29, 0x3f, 0x16, 0x2b, 0x0f, 0xa9, 0xcd,
-    0x6b, 0x11, 0x64, 0x50, 0x92, 0xbf, 0xff, 0xdf, 0x60, 0x70, 0xc2, 0xce,
-    0x85, 0x9c, 0xc3, 0xce, 0xeb, 0x17, 0xff, 0xff, 0xda, 0x11, 0xdf, 0x86,
-    0x45, 0x01, 0x17, 0x8c, 0xfc, 0xc1, 0xcb, 0x0f, 0x2b, 0x17, 0xfd, 0x9c,
-    0xcd, 0x3e, 0xcc, 0x75, 0x8b, 0x71, 0x62, 0xfd, 0xe3, 0x37, 0xf1, 0xd6,
-    0x2a, 0x51, 0xef, 0x08, 0x40, 0x31, 0xc8, 0x84, 0xab, 0x65, 0x65, 0x71,
-    0x23, 0x7c, 0x78, 0xa3, 0x07, 0xe1, 0x37, 0xa3, 0x5a, 0xbe, 0xc3, 0x66,
-    0x0b, 0x17, 0xa4, 0xb7, 0x58, 0xb8, 0x47, 0x30, 0xf0, 0x0d, 0x23, 0xb8,
-    0xd7, 0x58, 0xbf, 0xff, 0xc5, 0x83, 0x9f, 0x70, 0xcf, 0x75, 0x14, 0xf0,
-    0x53, 0xda, 0xc5, 0xd8, 0x6a, 0xc5, 0xb8, 0x61, 0xfe, 0xcb, 0x2d, 0xff,
-    0xcf, 0xfc, 0xdf, 0xee, 0x29, 0x2d, 0x96, 0x2f, 0xfb, 0x04, 0x33, 0x27,
-    0x93, 0x05, 0x8b, 0xe2, 0xf3, 0xfd, 0x62, 0x8c, 0x3d, 0xc6, 0x3a, 0xbf,
-    0xbe, 0x67, 0x3f, 0x3d, 0xac, 0x5f, 0xff, 0xf4, 0x9a, 0x2f, 0xc9, 0xf9,
-    0x11, 0x60, 0x45, 0x82, 0xc3, 0x56, 0x2f, 0xec, 0xde, 0x4c, 0xc8, 0x2c,
-    0x54, 0xa3, 0x26, 0x23, 0x1f, 0xb4, 0xd6, 0x27, 0x78, 0x08, 0x50, 0xfa,
-    0x1d, 0x77, 0xec, 0x08, 0xed, 0xc5, 0x8a, 0x8d, 0xdd, 0xad, 0x9c, 0x6a,
-    0x27, 0x99, 0x66, 0xb9, 0x6a, 0x09, 0x77, 0x8e, 0x17, 0xb8, 0xd2, 0x9c,
-    0xd1, 0xa5, 0xbe, 0x94, 0x29, 0xb8, 0x61, 0xe8, 0x4a, 0x8a, 0x3e, 0x40,
-    0xce, 0xaf, 0x6d, 0x31, 0x2c, 0x5e, 0x62, 0x02, 0xc5, 0xfb, 0xe1, 0x97,
-    0x60, 0x58, 0xbf, 0xe3, 0x3a, 0xbd, 0x9f, 0xf3, 0x9d, 0x62, 0xff, 0xed,
-    0x9b, 0xda, 0xcd, 0x98, 0xbd, 0xc5, 0x8a, 0xd9, 0x19, 0x78, 0x39, 0xb9,
-    0x5b, 0x9f, 0x5f, 0xed, 0x67, 0xfb, 0xc1, 0x44, 0xb1, 0x7f, 0xff, 0x43,
-    0xf8, 0xf0, 0xe6, 0x10, 0xbc, 0x58, 0x09, 0x58, 0xbd, 0xcc, 0xfa, 0xc5,
-    0x9d, 0x62, 0xda, 0xc4, 0x43, 0xb2, 0xc8, 0x07, 0x6f, 0xf8, 0xcf, 0xb6,
-    0x6f, 0xf1, 0x0d, 0x62, 0xff, 0xfb, 0x3d, 0xfc, 0x18, 0xbd, 0xc9, 0xe0,
-    0xb8, 0xb1, 0x7f, 0x4e, 0x16, 0xe1, 0x9d, 0x62, 0xff, 0x78, 0x53, 0x9b,
-    0x06, 0x75, 0x8b, 0xff, 0x7e, 0x48, 0x51, 0x67, 0x39, 0x2b, 0x16, 0x8f,
-    0xfa, 0x3d, 0x7c, 0xa2, 0x19, 0x7f, 0x51, 0xb5, 0xff, 0x73, 0xdf, 0x9f,
-    0x73, 0xee, 0xb1, 0x46, 0x2a, 0xa6, 0x98, 0x5e, 0xec, 0x68, 0xd1, 0x98,
-    0x89, 0x2a, 0xe3, 0x8d, 0x62, 0xff, 0xd8, 0x46, 0x4f, 0xdf, 0x59, 0x05,
-    0x8b, 0xff, 0xe2, 0x34, 0xce, 0x0f, 0x44, 0xc1, 0x66, 0x79, 0x62, 0xf7,
-    0x80, 0x25, 0x8b, 0x63, 0x9f, 0x81, 0x29, 0x5f, 0xfe, 0x3c, 0xef, 0xee,
-    0x60, 0x27, 0x3b, 0x82, 0xc5, 0xf1, 0xaf, 0xbb, 0xac, 0x5a, 0x18, 0x7e,
-    0x1e, 0x4c, 0xb9, 0xf7, 0x58, 0xa9, 0x37, 0xf8, 0x4f, 0x7f, 0xf9, 0xb5,
-    0x0d, 0xfe, 0xe3, 0xd3, 0x8b, 0x65, 0x8a, 0xeb, 0xaa, 0xa0, 0x69, 0x18,
-    0xfc, 0x2b, 0x8a, 0x1a, 0x82, 0x1f, 0xbd, 0x8d, 0x12, 0xc5, 0xff, 0x8a,
-    0x0e, 0x7f, 0x7e, 0x5f, 0x75, 0x8a, 0xd8, 0xf7, 0x18, 0x76, 0xff, 0xff,
-    0xcf, 0xd0, 0xb3, 0x86, 0x79, 0xcc, 0xcf, 0x4e, 0xef, 0xd2, 0x7e, 0xb1,
-    0x7f, 0xff, 0xf7, 0xf0, 0xb6, 0x33, 0x7f, 0x8b, 0xf3, 0xa0, 0x7f, 0x3c,
-    0x53, 0xba, 0xc5, 0xf8, 0x1e, 0x8e, 0xcf, 0xac, 0x5f, 0xfa, 0x62, 0x62,
-    0xf4, 0x59, 0xac, 0x58, 0xa9, 0x3e, 0xb2, 0x2c, 0xbf, 0xc3, 0x90, 0x19,
-    0x9d, 0xf9, 0x62, 0xff, 0xf9, 0xb4, 0xdf, 0xee, 0x19, 0xe3, 0x37, 0xe4,
-    0x7a, 0xc5, 0xff, 0xfb, 0xcc, 0xc7, 0xe1, 0x98, 0x3f, 0x8b, 0x99, 0xba,
-    0xc5, 0xff, 0x99, 0xa0, 0x61, 0x60, 0x4c, 0x05, 0x8b, 0xff, 0x73, 0xf8,
-    0xc4, 0x67, 0xe6, 0x3d, 0x62, 0xff, 0x37, 0xb9, 0x14, 0x1f, 0xeb, 0x17,
-    0xf3, 0xc1, 0xbd, 0xf7, 0x58, 0xbf, 0xf7, 0xe7, 0x45, 0x83, 0xfb, 0x04,
-    0xb1, 0x7a, 0x27, 0xd2, 0xc5, 0xcc, 0x71, 0x9e, 0xee, 0x1f, 0xd0, 0xd5,
-    0x28, 0xee, 0x6d, 0xda, 0xbf, 0xd6, 0x00, 0x7e, 0x48, 0x5e, 0x35, 0xe9,
-    0x08, 0xab, 0xec, 0xee, 0x1c, 0x58, 0xbf, 0x47, 0x8c, 0xb3, 0xeb, 0x15,
-    0xf3, 0xcf, 0x62, 0x4b, 0xe3, 0x7e, 0xe7, 0x58, 0xbf, 0x44, 0xe4, 0x29,
-    0x58, 0xbd, 0x3b, 0x99, 0x1a, 0x1e, 0x63, 0x12, 0x5f, 0x11, 0xdf, 0xcb,
-    0x17, 0x1f, 0x8b, 0x17, 0x9b, 0x8e, 0xb1, 0x7f, 0x7b, 0xf9, 0xd0, 0x72,
-    0xb1, 0x52, 0x7c, 0x80, 0x18, 0x10, 0xe5, 0xff, 0x07, 0xb6, 0x13, 0x1d,
-    0xbe, 0xb1, 0x7c, 0xfa, 0x26, 0x58, 0xad, 0x97, 0x99, 0x20, 0x44, 0x37,
-    0x1d, 0xe1, 0xc2, 0xf2, 0x9c, 0x62, 0x86, 0x51, 0xdb, 0x58, 0xe4, 0xa1,
-    0x0d, 0xe2, 0xee, 0x87, 0x57, 0x30, 0x4b, 0x17, 0xed, 0xf4, 0xcd, 0x05,
-    0x8a, 0x34, 0xf0, 0x5c, 0x62, 0xff, 0x9f, 0xbf, 0x6a, 0x7c, 0xfd, 0x16,
-    0x2f, 0xf1, 0x1b, 0x3e, 0x06, 0x76, 0xb1, 0x5f, 0x3f, 0x16, 0x3c, 0xbf,
-    0xdc, 0xe4, 0xbe, 0xcd, 0xe5, 0x8b, 0xfe, 0xe3, 0x05, 0xd4, 0xf8, 0x43,
-    0x58, 0xbf, 0xb3, 0xd8, 0xc5, 0x12, 0xc5, 0xf6, 0x72, 0x74, 0xb1, 0x63,
-    0x7e, 0x79, 0xe4, 0x5b, 0x68, 0x4a, 0x39, 0xf0, 0xd0, 0x50, 0x8b, 0xb4,
-    0x16, 0x2f, 0x0c, 0x40, 0x58, 0xbf, 0xff, 0xa6, 0x3c, 0xc7, 0xc2, 0xcf,
-    0xbe, 0x17, 0x70, 0xe2, 0xc5, 0xfe, 0xea, 0x7c, 0xef, 0xef, 0x8b, 0x16,
-    0x2e, 0xd1, 0x26, 0x05, 0xdb, 0xfc, 0xc4, 0x03, 0xbe, 0x76, 0xb1, 0x7f,
-    0x67, 0xb9, 0xf7, 0x35, 0x62, 0xfb, 0x9f, 0x73, 0x56, 0x2f, 0xdb, 0x66,
-    0x8b, 0x08, 0xf4, 0xfc, 0x5f, 0x78, 0xec, 0x35, 0x8b, 0xfa, 0x10, 0x7e,
-    0x08, 0xeb, 0x15, 0x27, 0x99, 0xd8, 0xed, 0xfe, 0x21, 0x43, 0x22, 0x98,
-    0xf5, 0x8a, 0x95, 0x4a, 0x83, 0x12, 0xc8, 0x58, 0x9a, 0x53, 0xf8, 0x43,
-    0x14, 0x22, 0x7c, 0x45, 0x6e, 0xb1, 0x62, 0xff, 0x8f, 0x3b, 0x8c, 0xa5,
-    0xb6, 0x58, 0xb1, 0xd6, 0x2e, 0x9d, 0xd6, 0x2d, 0xbe, 0x1f, 0x23, 0x9d,
-    0x06, 0x25, 0x7e, 0xfe, 0x7a, 0x46, 0xb1, 0x73, 0x69, 0x62, 0xb0, 0xfd,
-    0x22, 0x35, 0xf1, 0x45, 0xe0, 0xe4, 0x96, 0x2f, 0x13, 0x41, 0x62, 0xfd,
-    0x91, 0x7c, 0x46, 0xac, 0x5f, 0xb0, 0xdc, 0x78, 0x96, 0x2f, 0x67, 0xcc,
-    0xc3, 0xf0, 0xf8, 0xe1, 0x15, 0xdd, 0x24, 0xb1, 0x73, 0x04, 0x62, 0x38,
-    0xbd, 0x08, 0xd0, 0xcf, 0xeb, 0x13, 0x54, 0x28, 0xc4, 0x6f, 0xff, 0x60,
-    0xcc, 0x13, 0x07, 0xe1, 0x36, 0xd2, 0xb1, 0x7d, 0x27, 0xe1, 0xd6, 0x2f,
-    0xcd, 0xe3, 0x37, 0x09, 0x62, 0xff, 0xd8, 0x6f, 0xf3, 0xdc, 0x29, 0x82,
-    0xc5, 0x4a, 0x36, 0xdd, 0x35, 0x88, 0xc4, 0x59, 0x7f, 0xbb, 0x32, 0x62,
-    0x79, 0x89, 0x62, 0xfb, 0x6f, 0x3e, 0xcb, 0x17, 0xfa, 0x7b, 0x87, 0x0c,
-    0xf3, 0xac, 0x5f, 0xbc, 0xc7, 0x7f, 0x2c, 0x56, 0x22, 0x0c, 0xe4, 0xa4,
-    0x6d, 0x71, 0x76, 0xb1, 0x78, 0x6e, 0x35, 0x8b, 0xff, 0xff, 0x0a, 0x74,
-    0x64, 0xfe, 0x46, 0x67, 0x9f, 0x3a, 0xbb, 0x83, 0x76, 0xb1, 0x78, 0x0d,
-    0x1e, 0xb1, 0x7e, 0xe1, 0x4c, 0x5e, 0x58, 0xa1, 0xa3, 0x64, 0x87, 0x78,
-    0xe7, 0xe2, 0x0b, 0xff, 0xfb, 0xc2, 0xd3, 0x73, 0xce, 0x67, 0xf3, 0x66,
-    0x2d, 0xd6, 0x29, 0x62, 0xd8, 0xb1, 0x5d, 0x75, 0x2f, 0x7e, 0x19, 0x4e,
-    0x8a, 0x3e, 0x3d, 0xda, 0x0b, 0x17, 0xff, 0xc6, 0x3e, 0x6c, 0x64, 0x4f,
-    0xe7, 0xd3, 0x01, 0x62, 0xa5, 0x54, 0x28, 0xcb, 0xb2, 0x1e, 0x2d, 0x0d,
-    0xff, 0x11, 0x08, 0x4a, 0xff, 0xe3, 0x64, 0xb7, 0x31, 0xf5, 0xa7, 0x09,
-    0x62, 0xff, 0xdd, 0xc3, 0xf9, 0xdc, 0x3c, 0xf1, 0x2c, 0x5e, 0x92, 0x95,
-    0x8b, 0xef, 0xb8, 0x02, 0x58, 0xbc, 0x5b, 0xca, 0xc5, 0xfb, 0xf3, 0xac,
-    0xd9, 0x62, 0xff, 0xf1, 0x4f, 0x7c, 0x6d, 0x1e, 0x7b, 0x87, 0x16, 0x2f,
-    0xff, 0xff, 0x67, 0xb8, 0xd1, 0x18, 0x59, 0xdc, 0x30, 0x5b, 0x16, 0x0f,
-    0xef, 0x12, 0xc5, 0x6e, 0x8f, 0x03, 0x94, 0xfd, 0x32, 0xe2, 0xf2, 0xc5,
-    0xff, 0xee, 0x4c, 0x3d, 0x9f, 0x2c, 0xf7, 0xdd, 0x62, 0xa4, 0xf8, 0x1c,
-    0x5e, 0xe1, 0x1a, 0xb1, 0x46, 0x2a, 0xa1, 0x94, 0x81, 0xa1, 0x9a, 0x36,
-    0xe4, 0x9a, 0x8c, 0x37, 0xf0, 0x91, 0xf1, 0x05, 0xe3, 0xfd, 0x96, 0x2f,
-    0x18, 0x19, 0xd6, 0x2f, 0xd2, 0x3e, 0xa9, 0x3a, 0xc5, 0xc2, 0x35, 0x62,
-    0xfb, 0xff, 0x11, 0xab, 0x15, 0xf3, 0x7c, 0x18, 0xcd, 0xc2, 0x35, 0x62,
-    0xfb, 0xff, 0x11, 0xab, 0x17, 0x7b, 0x86, 0x1f, 0x07, 0xc8, 0x83, 0x19,
-    0xbf, 0xf0, 0x22, 0xfb, 0x80, 0x9b, 0xb8, 0x2c, 0x52, 0xc5, 0x31, 0xe6,
-    0xf1, 0x06, 0x8c, 0x4d, 0xd2, 0x61, 0x93, 0x90, 0x8a, 0xb8, 0xdf, 0x2c,
-    0x5d, 0x9f, 0x58, 0xaf, 0x9b, 0x0f, 0x0c, 0xdf, 0xbd, 0xef, 0x60, 0x4b,
-    0x15, 0x27, 0x96, 0xe4, 0x35, 0x2a, 0xa1, 0xbb, 0x1d, 0x3c, 0x72, 0x80,
-    0x85, 0xad, 0xe3, 0xce, 0xeb, 0x17, 0x6b, 0x16, 0x2f, 0xfb, 0x67, 0xea,
-    0xf4, 0xf7, 0x0e, 0x2c, 0x5e, 0xc7, 0x1a, 0xc5, 0xb8, 0xb1, 0x71, 0x66,
-    0xe6, 0xbb, 0xb1, 0xcb, 0xff, 0x7e, 0x48, 0xcd, 0x48, 0x6c, 0x4b, 0x17,
-    0xff, 0xb4, 0xc5, 0xef, 0xb4, 0x30, 0x6d, 0x05, 0x8b, 0xcf, 0x84, 0xb1,
-    0x74, 0xc4, 0xb1, 0x7e, 0x9d, 0x69, 0xa3, 0xd6, 0x29, 0xcf, 0x0c, 0x43,
-    0x17, 0xfe, 0x01, 0x9f, 0x7f, 0x70, 0x9e, 0x25, 0x8b, 0xfd, 0x9a, 0x33,
-    0xf8, 0x06, 0x58, 0xac, 0x3f, 0x5f, 0x20, 0xd8, 0x6b, 0x17, 0xc0, 0x3e,
-    0x71, 0x62, 0xf8, 0xb3, 0x86, 0x61, 0xb5, 0xe0, 0x95, 0x4a, 0xaa, 0x3d,
-    0x9b, 0x77, 0x2d, 0xd1, 0xf9, 0xd2, 0x78, 0xbd, 0xe8, 0x4b, 0x74, 0x56,
-    0xb3, 0x2c, 0x5f, 0xfd, 0x17, 0x57, 0xf3, 0xd8, 0x03, 0xb4, 0x4b, 0x15,
-    0x1a, 0x2b, 0xae, 0x91, 0xec, 0x95, 0x74, 0x4f, 0x62, 0x11, 0xbf, 0xff,
-    0x19, 0xdc, 0x27, 0xe6, 0x7f, 0x3d, 0xe9, 0xd0, 0x16, 0x2e, 0x0c, 0xeb,
-    0x17, 0xfd, 0xfc, 0xda, 0x7b, 0x27, 0x09, 0x62, 0xb0, 0xf5, 0x38, 0x33,
-    0x47, 0x46, 0x78, 0x21, 0x5d, 0x7f, 0x98, 0x80, 0x60, 0x59, 0xf5, 0x8b,
-    0xff, 0x02, 0x3b, 0x3e, 0xf2, 0x76, 0x1a, 0xc5, 0xff, 0x7d, 0xcf, 0x31,
-    0xff, 0xcd, 0x96, 0x29, 0x62, 0xdc, 0x30, 0xf2, 0x76, 0x3d, 0xa8, 0x23,
-    0xa4, 0x8d, 0x45, 0x08, 0xab, 0xff, 0xff, 0xfe, 0x08, 0xcf, 0xb6, 0xf8,
-    0x61, 0x67, 0xb8, 0xf8, 0x72, 0xc8, 0xa1, 0x83, 0xee, 0x12, 0x35, 0x8b,
-    0xa2, 0x1a, 0xc5, 0x62, 0x2c, 0x7f, 0x09, 0x8b, 0xfb, 0x59, 0x02, 0x93,
-    0xac, 0x5f, 0xb2, 0x05, 0x27, 0x58, 0xb8, 0x80, 0x61, 0xea, 0x68, 0xb6,
-    0xff, 0xff, 0xfd, 0x0e, 0x70, 0x53, 0xe7, 0x1e, 0x14, 0x46, 0x16, 0x6a,
-    0x4b, 0xdf, 0xce, 0xa5, 0x8b, 0xff, 0x4e, 0x3f, 0xbf, 0x25, 0x3b, 0xac,
-    0x5f, 0xc7, 0xee, 0x7f, 0xf9, 0x58, 0xbd, 0xdc, 0x39, 0xb1, 0xf6, 0x61,
-    0xed, 0x62, 0x6a, 0xbd, 0x97, 0x6a, 0x1e, 0x56, 0xe2, 0xc5, 0x4a, 0xe0,
-    0x76, 0x46, 0x22, 0xf0, 0xe5, 0x14, 0x7a, 0x01, 0x9b, 0x5f, 0xe8, 0x18,
-    0xdb, 0xfe, 0x7c, 0xb1, 0x7e, 0xce, 0x7d, 0xe0, 0xb1, 0x6d, 0x96, 0x2f,
-    0xa7, 0xd8, 0x05, 0x8a, 0x58, 0xad, 0x8d, 0x77, 0x5e, 0x45, 0x7f, 0xff,
-    0x7d, 0xe7, 0xc5, 0x9e, 0xfe, 0x19, 0x3a, 0x68, 0x96, 0x2f, 0xff, 0xec,
-    0x33, 0xec, 0xfe, 0x63, 0xe1, 0x83, 0xd3, 0x84, 0xb1, 0x6c, 0x3a, 0x2e,
-    0x3a, 0x2d, 0xdf, 0xc3, 0x62, 0x83, 0x9d, 0x62, 0xff, 0xec, 0x87, 0xda,
-    0x13, 0xed, 0x60, 0xd6, 0x2f, 0xda, 0xce, 0xe1, 0xc5, 0x8b, 0xf7, 0xda,
-    0x1f, 0x75, 0x8b, 0xdb, 0xff, 0x16, 0x2b, 0x63, 0xf0, 0x81, 0x56, 0x8a,
-    0x2f, 0xe0, 0x70, 0xc0, 0x73, 0x4b, 0x15, 0x87, 0xc2, 0xc6, 0x17, 0xfd,
-    0xdc, 0xeb, 0x63, 0x31, 0xc6, 0xb1, 0x74, 0x4e, 0xb1, 0x7f, 0xf6, 0x78,
-    0xcc, 0x87, 0xf1, 0xe1, 0xc5, 0x8a, 0x95, 0x74, 0x70, 0x36, 0xc2, 0x87,
-    0x41, 0xfc, 0x37, 0xd8, 0xa8, 0x05, 0xa5, 0x18, 0xa8, 0x88, 0x3a, 0x1e,
-    0x47, 0x0c, 0x5f, 0x7e, 0x34, 0xde, 0x39, 0x62, 0xff, 0xf6, 0x6a, 0x5c,
-    0x78, 0x73, 0x39, 0x23, 0x58, 0xbf, 0x77, 0x09, 0x04, 0xac, 0x5f, 0xfb,
-    0x3d, 0xec, 0x7e, 0x85, 0x9c, 0x58, 0xa3, 0x11, 0x65, 0x89, 0x5f, 0x29,
-    0xbf, 0xd1, 0x73, 0x8c, 0x5b, 0x9d, 0x62, 0xfc, 0x59, 0xf6, 0xf2, 0xc5,
-    0x76, 0x88, 0xdd, 0x18, 0x1c, 0xda, 0xf4, 0xf7, 0x1c, 0xb1, 0x7b, 0x22,
-    0x95, 0x8b, 0xe9, 0xfe, 0x71, 0x62, 0x86, 0x7c, 0x1a, 0x21, 0x21, 0xdb,
-    0xfe, 0x78, 0xe9, 0x3f, 0x3f, 0x87, 0x58, 0xbe, 0x7e, 0x99, 0xa5, 0x8b,
-    0xfe, 0xe9, 0xdc, 0x39, 0x82, 0xd0, 0x16, 0x2f, 0xb9, 0xf6, 0x3a, 0xc5,
-    0x39, 0xf0, 0xf8, 0xfa, 0xff, 0x7b, 0x85, 0x9b, 0x07, 0x05, 0x8b, 0xc0,
-    0xcf, 0x2c, 0x54, 0x9e, 0x9b, 0x9b, 0x57, 0x58, 0xae, 0x02, 0x63, 0x6c,
-    0x78, 0x48, 0x9c, 0xbb, 0xe7, 0x85, 0x08, 0x5f, 0x3a, 0x5f, 0x19, 0xbe,
-    0xc1, 0x2c, 0x5f, 0xb3, 0xe6, 0x7b, 0x8b, 0x17, 0xb3, 0x52, 0xb1, 0x7f,
-    0x16, 0x00, 0xf3, 0x05, 0x8b, 0xf1, 0x67, 0xbe, 0xeb, 0x14, 0x33, 0xd4,
-    0x08, 0xb6, 0xf7, 0x85, 0x05, 0x8b, 0xf6, 0xc6, 0x0a, 0x62, 0x58, 0xbb,
-    0x87, 0x58, 0xbf, 0xff, 0xe2, 0x90, 0x77, 0x0e, 0x0a, 0x7c, 0x58, 0x37,
-    0xcd, 0x44, 0xb1, 0x52, 0x8e, 0xcc, 0x23, 0x61, 0xee, 0x16, 0x78, 0x62,
-    0x8c, 0x76, 0x6a, 0x93, 0x0e, 0xad, 0xa5, 0x71, 0x8e, 0x52, 0xee, 0x4f,
-    0x8e, 0x1b, 0x0f, 0x4d, 0xe1, 0x27, 0xdc, 0x61, 0x0f, 0x2a, 0x36, 0x3d,
-    0xce, 0x29, 0x48, 0x7a, 0x8c, 0x0c, 0xe7, 0x5f, 0x96, 0x7e, 0xd2, 0xc0,
-    0x41, 0x2c, 0x10, 0xa5, 0xfc, 0x72, 0x74, 0xcb, 0xd2, 0xff, 0xc5, 0x38,
-    0x4b, 0xd1, 0xe0, 0x22, 0x88, 0xe2, 0xa0, 0xe3, 0x5c, 0xbe, 0xc8, 0x84,
-    0x35, 0x8b, 0xf4, 0x1f, 0x59, 0xda, 0xc5, 0xee, 0x7f, 0x16, 0x2f, 0xd9,
-    0xcd, 0xb0, 0x25, 0x8b, 0xff, 0xbe, 0x21, 0xfc, 0x5e, 0xe7, 0xc5, 0x12,
-    0xc5, 0xf7, 0x05, 0x3a, 0x58, 0xad, 0xd3, 0x00, 0xec, 0x92, 0x22, 0x9f,
-    0x8e, 0x91, 0x57, 0x12, 0x69, 0x62, 0xef, 0x71, 0x62, 0xa4, 0xd2, 0x10,
-    0x65, 0xff, 0xe7, 0xd3, 0xe7, 0x66, 0x7a, 0x22, 0x93, 0xac, 0x5f, 0xfd,
-    0x8d, 0xd9, 0x83, 0x9d, 0x8c, 0x34, 0xd5, 0x8a, 0xdd, 0x12, 0xfd, 0xa6,
-    0x5f, 0xd2, 0x72, 0xcd, 0xb1, 0x62, 0xf7, 0xb9, 0xfc, 0x3d, 0x2f, 0x92,
-    0xdf, 0xf4, 0xfb, 0x87, 0xee, 0x4b, 0x65, 0x8b, 0xff, 0xf1, 0xfb, 0x87,
-    0x35, 0xdc, 0xfb, 0x93, 0xf7, 0xf2, 0xc5, 0xff, 0x61, 0xa5, 0x9e, 0xfb,
-    0x84, 0xb1, 0x7e, 0xc0, 0xb0, 0x67, 0x58, 0xbf, 0xbf, 0x9c, 0x9d, 0x6e,
-    0xb1, 0x7f, 0x43, 0x0c, 0x7d, 0x09, 0x62, 0xff, 0x9f, 0x08, 0x6f, 0xd2,
-    0x46, 0xb1, 0x74, 0xc4, 0xb1, 0x74, 0xf6, 0x62, 0x2b, 0xe2, 0x2f, 0xf9,
-    0x7f, 0x8e, 0x6a, 0x55, 0x12, 0x61, 0x9b, 0x9d, 0xe9, 0x67, 0xe7, 0x45,
-    0x0d, 0x8b, 0xa3, 0xc6, 0xb1, 0x7f, 0xf7, 0x9f, 0x53, 0x85, 0xee, 0x61,
-    0x2c, 0x5f, 0xff, 0x6d, 0x9b, 0x8f, 0xef, 0x86, 0x98, 0x68, 0xa5, 0x62,
-    0xfe, 0xcd, 0x6b, 0x3d, 0xc5, 0x8b, 0xf8, 0x98, 0xd3, 0xb4, 0x16, 0x2f,
-    0x41, 0xfd, 0xf3, 0xdc, 0xf1, 0x75, 0xb6, 0x58, 0xba, 0x4e, 0xb1, 0x78,
-    0xb3, 0xb5, 0x8b, 0x64, 0x0d, 0xa1, 0xc5, 0xef, 0xef, 0x3f, 0x49, 0x2d,
-    0xd6, 0x2b, 0x87, 0xac, 0x19, 0x35, 0xdf, 0xc5, 0x8b, 0xf8, 0xf3, 0xb9,
-    0x9c, 0x35, 0x62, 0xfd, 0x07, 0x20, 0x71, 0x62, 0xfd, 0x27, 0x7f, 0xca,
-    0xc5, 0xe2, 0x0f, 0xeb, 0x17, 0xfb, 0x3d, 0xf7, 0xf6, 0x6e, 0xb1, 0x73,
-    0xf6, 0xb1, 0x7b, 0x0b, 0x75, 0x8b, 0xcd, 0x0e, 0x2c, 0x54, 0x9b, 0xa1,
-    0x0e, 0xd1, 0x89, 0xbf, 0xc0, 0x8f, 0x05, 0xe2, 0x32, 0xd1, 0x43, 0x13,
-    0x90, 0xf7, 0x0d, 0x3c, 0xa5, 0x7e, 0x06, 0x0d, 0xa0, 0xb1, 0x7f, 0xf4,
-    0x9c, 0xc1, 0xfe, 0x4c, 0xfc, 0xc7, 0xac, 0x5c, 0x2e, 0xa5, 0x8a, 0x93,
-    0xe5, 0x24, 0xaa, 0x8d, 0x97, 0x22, 0x24, 0x6d, 0xd0, 0xa2, 0x85, 0x89,
-    0xcc, 0xff, 0x28, 0x71, 0x9f, 0x8a, 0x11, 0xb7, 0xff, 0xfb, 0x59, 0xcc,
-    0xdf, 0x35, 0x3e, 0x7d, 0xdc, 0x71, 0x4a, 0xc5, 0xfc, 0xdb, 0x75, 0x16,
-    0x76, 0xb1, 0x74, 0x39, 0xa4, 0x4a, 0x79, 0x8a, 0xfd, 0x30, 0x13, 0x06,
-    0xb1, 0x7b, 0x30, 0x0b, 0x15, 0xf3, 0xc5, 0x22, 0x9b, 0xf0, 0xff, 0x85,
-    0xe5, 0x8a, 0x81, 0xe4, 0xc4, 0x43, 0x5d, 0xa3, 0x80, 0xa1, 0x7b, 0x7f,
-    0xda, 0x7c, 0x0b, 0xde, 0x62, 0x58, 0xbb, 0xb3, 0x56, 0x2e, 0x7e, 0xcc,
-    0x3d, 0x31, 0x9c, 0xde, 0x70, 0x62, 0xc5, 0xf4, 0x4c, 0xd0, 0x58, 0xb9,
-    0x86, 0xb1, 0x4e, 0x6e, 0x80, 0x47, 0x6e, 0x40, 0xfd, 0xb1, 0x5a, 0xff,
-    0xf6, 0x05, 0xd5, 0xfc, 0xf6, 0x00, 0xed, 0x12, 0xc5, 0xfb, 0x27, 0x50,
-    0x02, 0xc5, 0x4a, 0x77, 0xda, 0x7b, 0x68, 0x52, 0x91, 0x38, 0x93, 0xef,
-    0xfc, 0xdd, 0x0b, 0x3d, 0x80, 0x21, 0xac, 0x58, 0x0b, 0x14, 0xe7, 0xa3,
-    0x11, 0xfd, 0xff, 0x7f, 0x67, 0xc2, 0xee, 0x1c, 0x58, 0xbf, 0xef, 0xc5,
-    0xfc, 0xee, 0x18, 0x4b, 0x17, 0xfb, 0xf9, 0xb9, 0x60, 0xa3, 0xd6, 0x2a,
-    0x4f, 0xcb, 0xb3, 0xbb, 0xfc, 0x67, 0x30, 0xa7, 0x51, 0x2c, 0x5e, 0xef,
-    0x37, 0x58, 0xbf, 0xfd, 0x9b, 0xf3, 0x3d, 0x16, 0x1a, 0x58, 0x05, 0x8a,
-    0xd2, 0x28, 0x38, 0x6a, 0x10, 0xfd, 0xff, 0xf1, 0xba, 0x7e, 0xcb, 0x3c,
-    0x20, 0x1d, 0xa0, 0xb1, 0x7f, 0xff, 0xfb, 0x00, 0x0c, 0x68, 0x8c, 0xf6,
-    0xa4, 0x2f, 0xcf, 0x3d, 0xdc, 0x30, 0x96, 0x2f, 0x61, 0xa6, 0x62, 0x33,
-    0x7e, 0xa5, 0x52, 0xaa, 0x8b, 0x21, 0x5a, 0xf0, 0xc2, 0x14, 0x3f, 0xaf,
-    0xf3, 0xe8, 0x6f, 0x01, 0x69, 0x62, 0xa0, 0x7f, 0xfb, 0xa5, 0xd2, 0xc5,
-    0xfd, 0x3a, 0xf3, 0xe7, 0x6b, 0x17, 0xfd, 0x22, 0xdf, 0xbf, 0x3e, 0x12,
-    0xc5, 0x7c, 0xfa, 0x08, 0xba, 0xfa, 0x12, 0x0e, 0x2c, 0x5f, 0xcf, 0xd8,
-    0x34, 0xc3, 0x58, 0xbd, 0x9a, 0x02, 0xc5, 0xfb, 0x8f, 0x84, 0x05, 0x8b,
-    0x63, 0x9e, 0x27, 0x07, 0x6f, 0xce, 0x00, 0x66, 0x96, 0x2f, 0x87, 0xf9,
-    0x82, 0xc5, 0x46, 0xc9, 0xce, 0x0d, 0xd3, 0x08, 0x7e, 0x46, 0x4e, 0x7c,
-    0x26, 0x0c, 0xa2, 0xdd, 0x62, 0xc5, 0xe8, 0xd7, 0x1b, 0xc6, 0xcb, 0x17,
-    0xe6, 0xc2, 0x73, 0x56, 0x2f, 0x7b, 0x3e, 0xb1, 0x5d, 0x70, 0xfc, 0x88,
-    0xbb, 0xa8, 0x9e, 0xfb, 0x33, 0xfc, 0x58, 0xbf, 0xff, 0xff, 0xe7, 0xdf,
-    0xf9, 0x3d, 0xed, 0x38, 0xfd, 0x82, 0x4b, 0x76, 0xf9, 0x30, 0x0c, 0xdf,
-    0xbe, 0x2c, 0x5f, 0xff, 0x4e, 0xde, 0xee, 0x02, 0x23, 0x4c, 0x7e, 0x8e,
-    0xb1, 0x5b, 0xa3, 0xbc, 0xa1, 0x33, 0x73, 0x9d, 0x62, 0xf8, 0xce, 0xc4,
-    0x4b, 0x17, 0xfb, 0x02, 0x32, 0x41, 0x20, 0x58, 0xbf, 0xff, 0xe8, 0x37,
-    0x66, 0x10, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71, 0x62, 0xf1, 0xd8,
-    0xeb, 0x15, 0xb2, 0x30, 0x3b, 0x35, 0x66, 0xea, 0x89, 0x35, 0x53, 0x94,
-    0x74, 0x17, 0xea, 0x87, 0x2d, 0xff, 0x46, 0xde, 0xf3, 0x97, 0x70, 0xe2,
-    0xc5, 0xf4, 0x7f, 0xf2, 0x3d, 0x62, 0xfa, 0x0d, 0xad, 0x96, 0x2e, 0x7e,
-    0xbd, 0x62, 0xa2, 0x3c, 0x08, 0xe2, 0x4a, 0x31, 0x72, 0x9e, 0x36, 0x69,
-    0xda, 0x11, 0x23, 0x37, 0xc9, 0x4c, 0xc6, 0xa4, 0xb2, 0x04, 0x73, 0x4d,
-    0xff, 0xf4, 0xed, 0xcc, 0xd8, 0x53, 0xad, 0xfb, 0x83, 0xac, 0x5f, 0xfd,
-    0x27, 0x33, 0xf9, 0xdf, 0xb1, 0xa2, 0x58, 0xa8, 0x22, 0x6c, 0x95, 0x2f,
-    0xff, 0xff, 0xbb, 0xe0, 0xa7, 0xb3, 0x3f, 0x83, 0x30, 0xb0, 0x46, 0x99,
-    0xc0, 0x01, 0xfc, 0xb1, 0x7f, 0xe1, 0x4f, 0x56, 0xb3, 0xdc, 0x9d, 0x96,
-    0x2f, 0xff, 0xf1, 0xcf, 0x3e, 0xe6, 0x7b, 0x9a, 0x7c, 0xdc, 0xb0, 0x6b,
-    0x16, 0xcd, 0x91, 0x48, 0x34, 0x3b, 0xff, 0xdb, 0xfc, 0x47, 0xef, 0x3e,
-    0x5d, 0xc8, 0x4b, 0x17, 0xff, 0xbc, 0x29, 0xcd, 0x8c, 0xe3, 0x93, 0xe9,
-    0x62, 0xc1, 0x12, 0x30, 0xf8, 0x52, 0x1a, 0x7d, 0x4a, 0xa2, 0x3c, 0x8f,
-    0xb2, 0xfd, 0x25, 0xdb, 0x6c, 0xb1, 0x7f, 0x3e, 0xb3, 0xcd, 0xda, 0xc5,
-    0xfd, 0x13, 0x8f, 0x0e, 0xeb, 0x17, 0xff, 0xff, 0x67, 0x39, 0x3a, 0xd4,
-    0x96, 0x6d, 0x82, 0xe0, 0xa2, 0x29, 0x3a, 0xc5, 0xff, 0xfb, 0xcf, 0xa7,
-    0x84, 0x9a, 0x64, 0xc4, 0xf3, 0x12, 0xc5, 0xfb, 0x79, 0xfc, 0x9f, 0xc8,
-    0xca, 0x0d, 0xca, 0xff, 0xff, 0xcf, 0x3e, 0x2c, 0xf7, 0xf0, 0xce, 0xf8,
-    0xe6, 0xe7, 0xc5, 0xe5, 0x8a, 0x94, 0xe9, 0xf2, 0x1f, 0x1f, 0x41, 0xbc,
-    0x2d, 0x1a, 0xb1, 0x43, 0x54, 0x50, 0x78, 0xf5, 0x63, 0x8d, 0x2f, 0xcc,
-    0x00, 0xdb, 0x65, 0x8b, 0xff, 0xff, 0xb6, 0x33, 0xdb, 0x3e, 0x6b, 0x63,
-    0x22, 0x83, 0xff, 0x07, 0xde, 0x75, 0x2c, 0x56, 0x23, 0x89, 0xce, 0xc4,
-    0x55, 0x79, 0xc1, 0x2b, 0x17, 0xee, 0x31, 0x0b, 0x16, 0x2f, 0xf1, 0x85,
-    0x9a, 0x79, 0x3a, 0xc5, 0xff, 0xb4, 0xde, 0xd6, 0x3f, 0xe4, 0x6b, 0x17,
-    0xf0, 0xcb, 0x3e, 0xde, 0x58, 0xbf, 0x7b, 0xb8, 0x3e, 0x96, 0x2b, 0x0f,
-    0x5f, 0x85, 0xb5, 0xb2, 0x65, 0x90, 0x1c, 0x19, 0x3e, 0x8c, 0xc1, 0x09,
-    0x5b, 0x87, 0x2b, 0x17, 0xff, 0x75, 0x7d, 0xa2, 0x30, 0xb3, 0x60, 0xe0,
-    0xb1, 0x52, 0x7c, 0x78, 0x2f, 0x7f, 0x05, 0x14, 0x0a, 0x40, 0xb1, 0x7b,
-    0x4c, 0x1a, 0xc5, 0xfa, 0x7c, 0x77, 0xf2, 0xc5, 0x31, 0xe3, 0x08, 0x7a,
-    0xff, 0xc2, 0x9d, 0x8c, 0x92, 0x9d, 0x41, 0x62, 0xf8, 0xbb, 0xc3, 0xac,
-    0x56, 0xc8, 0x84, 0x39, 0x08, 0x48, 0x17, 0xfe, 0x93, 0x7a, 0x85, 0x85,
-    0x10, 0x67, 0x58, 0xbf, 0xe0, 0xb3, 0x43, 0x7c, 0xf7, 0x16, 0x2f, 0xff,
-    0x0b, 0x86, 0x7d, 0x9c, 0x9f, 0x50, 0x8e, 0x58, 0xbd, 0xe9, 0x25, 0x8b,
-    0xbc, 0x75, 0x8a, 0xc3, 0x69, 0xb8, 0xe5, 0xff, 0xdf, 0xee, 0x1c, 0x30,
-    0xb0, 0xfa, 0x12, 0xc5, 0xb0, 0xc3, 0xe9, 0xc2, 0x1b, 0x00, 0x09, 0x89,
-    0x72, 0x1d, 0x77, 0xfd, 0xf1, 0x1f, 0x37, 0xc7, 0xe2, 0xc5, 0xff, 0xfd,
-    0xf1, 0x75, 0x3e, 0x76, 0x61, 0x66, 0xb7, 0xc7, 0xea, 0x58, 0xbf, 0x7e,
-    0x48, 0xd3, 0x06, 0x89, 0xdd, 0xce, 0xaf, 0xff, 0xff, 0x3e, 0x13, 0x7b,
-    0xf3, 0x11, 0x85, 0x9f, 0x7f, 0x70, 0x5b, 0x8a, 0x56, 0x2f, 0x02, 0x4e,
-    0xb1, 0x6c, 0x31, 0x12, 0xb1, 0xb3, 0xc5, 0x8d, 0x89, 0x30, 0x52, 0x86,
-    0xbd, 0x4a, 0xe5, 0xf6, 0x43, 0xeb, 0xb3, 0x27, 0x45, 0x68, 0xd3, 0x05,
-    0x1e, 0x8d, 0xfb, 0xf9, 0xe9, 0x1a, 0xc5, 0xff, 0xee, 0xbc, 0xc9, 0xfb,
-    0xfb, 0x8e, 0x5d, 0xc1, 0x62, 0xb4, 0x7f, 0x22, 0x28, 0xbf, 0xfc, 0xc6,
-    0xe1, 0x0b, 0xdf, 0xce, 0x83, 0x95, 0x8b, 0xff, 0x7b, 0x1f, 0x6c, 0xdd,
-    0xe2, 0xe2, 0xc5, 0xff, 0xd9, 0xe2, 0x9d, 0xcc, 0xe0, 0xa7, 0xb5, 0x8a,
-    0xc4, 0x44, 0x7d, 0x06, 0xee, 0xb7, 0xac, 0x58, 0xbf, 0xf6, 0x60, 0x38,
-    0x66, 0xb8, 0x3e, 0x2c, 0x5f, 0xed, 0x66, 0xff, 0x7d, 0x44, 0xb1, 0x7f,
-    0x67, 0x32, 0x48, 0xd5, 0x8a, 0x31, 0x1d, 0x11, 0xa1, 0x10, 0xc8, 0xb1,
-    0x07, 0xe6, 0xd7, 0xff, 0xdf, 0x73, 0x32, 0x2e, 0xe1, 0xcf, 0x7f, 0x3b,
-    0x58, 0xbf, 0xff, 0x86, 0x4d, 0xff, 0xf7, 0x3d, 0x45, 0x27, 0x30, 0xfd,
-    0x7a, 0xc5, 0x12, 0xac, 0x5f, 0x47, 0x79, 0xd1, 0x3c, 0x25, 0x5b, 0xef,
-    0x68, 0x47, 0x58, 0xbf, 0xff, 0xd8, 0x73, 0xbf, 0x66, 0x1a, 0x6e, 0x17,
-    0x8d, 0x14, 0xe9, 0x62, 0xdb, 0xba, 0x22, 0xb4, 0x49, 0x70, 0x89, 0x62,
-    0xff, 0x34, 0x79, 0x9d, 0xc2, 0x4d, 0x58, 0xbd, 0x3f, 0x2e, 0xcf, 0x44,
-    0x42, 0xf5, 0x88, 0xad, 0xd3, 0xd5, 0xff, 0xef, 0x8a, 0x23, 0x0b, 0x3b,
-    0x87, 0x1c, 0xd5, 0x8b, 0xff, 0xff, 0xe7, 0xd6, 0x9c, 0x27, 0xc2, 0x37,
-    0x98, 0x3f, 0x8b, 0x63, 0x1a, 0x2c, 0x65, 0x8b, 0xe7, 0x1f, 0xf0, 0x68,
-    0xcf, 0xdd, 0x3e, 0xff, 0xa2, 0x33, 0xdc, 0x73, 0x24, 0x6b, 0x15, 0x87,
-    0xee, 0x23, 0xab, 0xd2, 0x0e, 0x2c, 0x5d, 0x21, 0x2c, 0x54, 0x0d, 0xa9,
-    0x0e, 0xdd, 0x91, 0xcb, 0x17, 0xf8, 0xcf, 0xcb, 0xed, 0x83, 0x58, 0xb7,
-    0x78, 0x7d, 0xe4, 0x41, 0xd0, 0x6a, 0xff, 0x08, 0x2e, 0x45, 0xa6, 0xe8,
-    0xb1, 0x52, 0xbe, 0x03, 0x92, 0xb9, 0xde, 0x37, 0xef, 0xc6, 0xd0, 0xd0,
-    0xc5, 0x23, 0x6b, 0xf9, 0xfe, 0xe7, 0x61, 0xac, 0x52, 0xc5, 0x81, 0x03,
-    0x72, 0x32, 0xdb, 0xff, 0xee, 0x44, 0x58, 0x17, 0xf3, 0xab, 0xd2, 0x0e,
-    0x2c, 0x51, 0x1f, 0xe7, 0x89, 0xef, 0x9b, 0xa3, 0xe9, 0x62, 0xf4, 0x09,
-    0xd6, 0x2b, 0x47, 0x80, 0x72, 0x4a, 0x94, 0x41, 0xe3, 0x0d, 0xfd, 0xf6,
-    0x2f, 0x61, 0xd6, 0x2f, 0x39, 0x79, 0x62, 0xfe, 0x87, 0x18, 0xe2, 0xe2,
-    0xc5, 0xc0, 0x65, 0x8b, 0xff, 0xff, 0x7b, 0x9f, 0x73, 0x0b, 0x05, 0x3d,
-    0xff, 0x00, 0xdd, 0xc3, 0x8b, 0x15, 0x28, 0x86, 0x71, 0x7a, 0x94, 0xc7,
-    0xf6, 0x2d, 0x61, 0xcf, 0x42, 0xd6, 0xe6, 0x82, 0xc5, 0x9d, 0x62, 0xec,
-    0xff, 0xcd, 0x44, 0x70, 0xbd, 0xe9, 0x23, 0x56, 0x2f, 0xf4, 0x79, 0x99,
-    0xd5, 0xf9, 0xf2, 0xc5, 0xf6, 0xb6, 0xcd, 0xd6, 0x2b, 0x0f, 0x81, 0xce,
-    0xeb, 0xe8, 0x9d, 0xf3, 0xed, 0x4b, 0xb0, 0x5d, 0xd9, 0xf8, 0x72, 0xcb,
-    0x32, 0x73, 0x88, 0xd9, 0x77, 0x3b, 0xc2, 0x7b, 0xb9, 0x68, 0x6f, 0x3c,
-    0xcd, 0x14, 0x64, 0x9a, 0x94, 0x8a, 0x72, 0x9f, 0xcb, 0x33, 0x68, 0xd6,
-    0x81, 0x0b, 0x42, 0x9c, 0xde, 0xe4, 0xff, 0x17, 0xa3, 0xa5, 0x14, 0x68,
-    0x11, 0xcd, 0x5d, 0x50, 0xcc, 0xbf, 0x67, 0xb8, 0xdd, 0xac, 0x5f, 0xd2,
-    0x73, 0x75, 0x9c, 0x58, 0xbf, 0xfa, 0x42, 0x19, 0x4f, 0x71, 0xb6, 0xb5,
-    0x2b, 0x14, 0x33, 0xfa, 0x22, 0xfb, 0xfe, 0x2c, 0x0b, 0xab, 0xab, 0xd9,
-    0xf5, 0x8b, 0xfc, 0x4c, 0x6e, 0x61, 0x1a, 0xb1, 0x76, 0xf8, 0xb1, 0x43,
-    0x4d, 0x3f, 0x21, 0x47, 0xb9, 0x09, 0xd0, 0x18, 0xce, 0x96, 0x2f, 0xfe,
-    0x33, 0x22, 0xee, 0x1c, 0xf7, 0xf3, 0xb5, 0x8b, 0xfe, 0x7c, 0xec, 0x8c,
-    0xe6, 0x12, 0xc5, 0xef, 0xbe, 0x96, 0x2b, 0xe7, 0xad, 0xd4, 0x73, 0x7f,
-    0xa1, 0x23, 0x30, 0x6f, 0x12, 0xc5, 0xff, 0x19, 0xe2, 0xc0, 0xb1, 0xf8,
-    0xb1, 0x7f, 0xa4, 0xb7, 0x33, 0xa7, 0x02, 0x58, 0xbf, 0xfe, 0xd3, 0x99,
-    0xf9, 0xd0, 0x3c, 0x39, 0xf7, 0x16, 0x2d, 0x86, 0xa2, 0x2c, 0xe7, 0x37,
-    0xff, 0xfe, 0xf3, 0x44, 0x59, 0xb3, 0x18, 0x5d, 0xe0, 0x45, 0x82, 0xc3,
-    0x56, 0x2a, 0x37, 0x54, 0xc9, 0xb0, 0x66, 0xf0, 0xa0, 0xec, 0x96, 0x23,
-    0x6f, 0xc3, 0x17, 0xa8, 0xa6, 0xff, 0xc6, 0xb7, 0x65, 0x9e, 0xfb, 0xf6,
-    0xb1, 0x6f, 0x2c, 0x5e, 0x10, 0xe5, 0x62, 0xa4, 0xd7, 0xe0, 0x95, 0xef,
-    0xc8, 0x16, 0x2f, 0xf7, 0xdc, 0x13, 0xe7, 0xe8, 0xb1, 0x7e, 0x87, 0x3d,
-    0x3b, 0x2c, 0x5f, 0x43, 0x82, 0x89, 0x62, 0xfc, 0xf2, 0x14, 0xc4, 0xb1,
-    0x5d, 0x9e, 0x73, 0x92, 0xdf, 0xec, 0x3b, 0x6d, 0xf1, 0x6c, 0xb1, 0x78,
-    0xa4, 0x0b, 0x17, 0xde, 0x62, 0x02, 0xc5, 0xff, 0xf9, 0x8d, 0x34, 0x0d,
-    0x17, 0x51, 0x48, 0x5d, 0xc3, 0x8b, 0x14, 0xc8, 0x80, 0x22, 0x2a, 0xf2,
-    0x2f, 0x43, 0x84, 0xe5, 0xe8, 0x19, 0xd6, 0xac, 0x5e, 0x37, 0x38, 0xb1,
-    0x78, 0x58, 0x35, 0x8b, 0x8a, 0x25, 0x8b, 0xe6, 0x8f, 0x90, 0x2c, 0x54,
-    0x6c, 0xbc, 0xc5, 0x32, 0xac, 0xf6, 0x7c, 0x1b, 0x86, 0x0f, 0xee, 0x3b,
-    0xd9, 0xac, 0x4f, 0x1f, 0x22, 0x68, 0x79, 0x80, 0xa4, 0x89, 0x38, 0x3c,
-    0x21, 0xd0, 0x86, 0x2f, 0x73, 0xce, 0xb1, 0x4b, 0x17, 0xfa, 0x13, 0xb7,
-    0x3e, 0xc3, 0x58, 0xbf, 0xc5, 0x81, 0x78, 0xd6, 0xe2, 0xc5, 0xd8, 0x67,
-    0x67, 0xd5, 0x11, 0xad, 0xe9, 0x6d, 0x2c, 0x5f, 0x8f, 0x3f, 0x6f, 0xac,
-    0x5e, 0x68, 0x62, 0xc5, 0x0c, 0xf8, 0x30, 0x73, 0x85, 0x16, 0xd2, 0xc5,
-    0xf7, 0x27, 0x5c, 0x58, 0xa5, 0x8b, 0xfb, 0xcf, 0xd2, 0x4b, 0x75, 0x8a,
-    0xc3, 0xf1, 0xec, 0x4a, 0x22, 0x30, 0xc3, 0x2d, 0x05, 0x8b, 0x98, 0xd5,
-    0x8b, 0xd3, 0x9a, 0x58, 0xa3, 0x11, 0x09, 0xb1, 0xf3, 0x09, 0x10, 0xc5,
-    0xef, 0xb9, 0xab, 0x17, 0x4e, 0x2c, 0x51, 0x89, 0xca, 0x0e, 0x32, 0x33,
-    0x4f, 0x74, 0x3d, 0x7f, 0xfa, 0x05, 0x26, 0x1c, 0xa4, 0xdf, 0x3e, 0xcb,
-    0x17, 0xfe, 0xf9, 0x67, 0xb5, 0x26, 0x70, 0xeb, 0x17, 0xf4, 0x99, 0x1f,
-    0x8c, 0x6a, 0xc5, 0x49, 0xf9, 0x44, 0x81, 0x5d, 0xa3, 0x83, 0xd0, 0xbe,
-    0xbe, 0x32, 0x61, 0xa5, 0x8b, 0xf7, 0x06, 0x59, 0xda, 0xc5, 0xda, 0x3a,
-    0xc5, 0x61, 0xe0, 0xf0, 0xa6, 0xff, 0xe3, 0x3d, 0xac, 0x0b, 0x36, 0x2c,
-    0x09, 0x62, 0x8c, 0x5c, 0xd4, 0x91, 0xd1, 0xbb, 0x64, 0xa2, 0x47, 0x8c,
-    0x98, 0x05, 0x24, 0xcb, 0xe2, 0x1b, 0xa4, 0x0b, 0x17, 0xed, 0x18, 0x5d,
-    0x02, 0x58, 0xbf, 0xff, 0x1a, 0x08, 0xb8, 0x67, 0x8f, 0x3f, 0xc2, 0xef,
-    0x16, 0x2e, 0x8b, 0x4b, 0x17, 0xc6, 0xc7, 0x0b, 0xcb, 0x16, 0xe2, 0xc5,
-    0xe6, 0x04, 0xac, 0x56, 0x8f, 0x58, 0xe5, 0x1f, 0x12, 0xb9, 0xb4, 0xb1,
-    0x79, 0xa2, 0x95, 0x8b, 0xdf, 0xcd, 0x2c, 0x51, 0x89, 0xc6, 0xc8, 0xbc,
-    0x0b, 0x7e, 0xb4, 0xcd, 0xfe, 0x2f, 0x08, 0x5f, 0xa8, 0x76, 0xfe, 0xda,
-    0x28, 0x46, 0xda, 0xd9, 0x62, 0xf8, 0x32, 0xce, 0x8b, 0x17, 0xce, 0x3c,
-    0x1a, 0xc5, 0x76, 0x78, 0xe7, 0x25, 0xb4, 0x4b, 0x17, 0xc0, 0xf3, 0x0d,
-    0x62, 0xe9, 0x3a, 0xc5, 0xbc, 0xb1, 0x5a, 0x35, 0x2c, 0x2f, 0x43, 0x3f,
-    0xfd, 0x09, 0xfd, 0x32, 0xfa, 0x46, 0xd0, 0x58, 0xbf, 0x8b, 0x69, 0x3b,
-    0x79, 0x62, 0xec, 0xe2, 0xc5, 0x49, 0xe2, 0xf8, 0xba, 0xf3, 0x11, 0xab,
-    0x17, 0xfe, 0xc6, 0xec, 0x11, 0x42, 0x75, 0xb2, 0xc5, 0xed, 0x4c, 0x4b,
-    0x17, 0x08, 0x25, 0x8b, 0x9b, 0xb5, 0x8a, 0xc3, 0x63, 0xc1, 0x9a, 0xd9,
-    0x35, 0x63, 0x59, 0xce, 0x43, 0xf1, 0xd6, 0x42, 0xf2, 0x7d, 0xf4, 0x18,
-    0xa3, 0x96, 0x2f, 0x67, 0x60, 0x58, 0xbe, 0xfe, 0x01, 0x96, 0x2c, 0xcb,
-    0x14, 0x61, 0xb3, 0x88, 0x8a, 0xe8, 0x6c, 0xb1, 0x7b, 0xd3, 0x05, 0x8b,
-    0xec, 0x89, 0xf4, 0xb1, 0x7f, 0x7d, 0xbb, 0x00, 0x67, 0x58, 0xbe, 0xcf,
-    0x61, 0xd6, 0x2d, 0x2b, 0x17, 0xfb, 0x8c, 0x0c, 0x16, 0xb6, 0x58, 0xbe,
-    0x8a, 0x7c, 0xcb, 0x14, 0x62, 0x3f, 0x24, 0x77, 0x08, 0xd8, 0xc4, 0x04,
-    0x5e, 0x11, 0x11, 0xad, 0xff, 0xf6, 0x49, 0x02, 0x5f, 0xdf, 0xc3, 0xe0,
-    0xd6, 0x2e, 0x9d, 0x2c, 0x5e, 0xf4, 0x19, 0x62, 0xe1, 0x6c, 0xb1, 0x5b,
-    0x1e, 0x6b, 0x0b, 0x86, 0x3b, 0x76, 0x71, 0x62, 0xe9, 0x35, 0x62, 0xb6,
-    0x4d, 0x6e, 0x0c, 0x46, 0xc2, 0x68, 0xe6, 0x1e, 0x17, 0xbd, 0xec, 0xd9,
-    0x62, 0xfc, 0xe5, 0xb0, 0x7d, 0xac, 0x5c, 0xc1, 0x49, 0xe4, 0x8c, 0x7a,
-    0xfd, 0xfc, 0x2e, 0xc4, 0xb1, 0x7e, 0xe0, 0x8c, 0xc0, 0x96, 0x2f, 0xc2,
-    0x23, 0x30, 0x25, 0x8a, 0xc3, 0xd5, 0xf9, 0x5d, 0xe8, 0x14, 0xac, 0x5c,
-    0xfa, 0x30, 0xde, 0xf6, 0x43, 0x7e, 0x9f, 0x41, 0xfc, 0xb1, 0x7f, 0x7e,
-    0x7b, 0x86, 0x79, 0x62, 0xa0, 0x7a, 0xe3, 0x28, 0xad, 0x26, 0xc5, 0xf8,
-    0x5d, 0xfa, 0x10, 0xb7, 0xfd, 0xb6, 0xb2, 0x28, 0x39, 0x1a, 0xb1, 0x7f,
-    0xd2, 0x5e, 0xd3, 0xf4, 0xc1, 0xac, 0x53, 0x1f, 0xb4, 0x71, 0xe5, 0xcd,
-    0xe5, 0x8b, 0xb3, 0xcb, 0x16, 0x89, 0x62, 0xb6, 0x3c, 0x1f, 0x8b, 0x90,
-    0xbd, 0x46, 0xec, 0x97, 0x79, 0x7f, 0xc8, 0x51, 0x3c, 0x70, 0xb1, 0x2c,
-    0xe8, 0x94, 0xea, 0x3f, 0x23, 0x69, 0x4e, 0x05, 0x09, 0xb1, 0x47, 0x1f,
-    0x1d, 0x0b, 0x10, 0xd9, 0x6f, 0xff, 0xfb, 0x7f, 0xbf, 0xc5, 0xe3, 0x30,
-    0x6f, 0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xf8, 0x4d, 0xe0, 0x32, 0xc5, 0x18,
-    0x89, 0x3f, 0x35, 0xdf, 0xf8, 0x19, 0xa6, 0x23, 0x00, 0x46, 0xac, 0x5c,
-    0x2c, 0x58, 0xbf, 0xb2, 0x04, 0x26, 0xe2, 0xc5, 0x0d, 0x15, 0x1a, 0x24,
-    0x02, 0x00, 0x42, 0xf7, 0xfb, 0x6f, 0xbe, 0x7b, 0x8e, 0xb1, 0x4b, 0x15,
-    0x27, 0x81, 0xc3, 0x4b, 0xc6, 0x4c, 0x16, 0x2f, 0x7d, 0xf4, 0xb1, 0x7f,
-    0x10, 0xb9, 0xae, 0x71, 0x62, 0xf6, 0x77, 0x05, 0x8a, 0x89, 0x11, 0x1a,
-    0x1e, 0xe8, 0x3a, 0x11, 0x7d, 0xef, 0x70, 0xd5, 0x8b, 0xf9, 0xb5, 0x22,
-    0xeb, 0xe5, 0x62, 0xfd, 0xd8, 0x4c, 0x40, 0x58, 0xbf, 0xf3, 0x96, 0x0f,
-    0x42, 0xee, 0x1c, 0x58, 0xb8, 0x8d, 0x58, 0xbf, 0xfc, 0xc5, 0x13, 0x03,
-    0x5a, 0x72, 0x78, 0x96, 0x2f, 0xff, 0xff, 0x9b, 0x44, 0xc6, 0x71, 0xe3,
-    0xa4, 0x81, 0xa7, 0xce, 0xc8, 0x5e, 0x9f, 0xac, 0x5b, 0x8e, 0x9a, 0x5f,
-    0xca, 0x84, 0x81, 0xd0, 0x60, 0x24, 0xab, 0x9b, 0xeb, 0x17, 0xfe, 0x3c,
-    0x9b, 0xef, 0xe7, 0xa4, 0x0b, 0x17, 0xe6, 0x1c, 0xe1, 0x2c, 0x5c, 0x09,
-    0x58, 0xb1, 0xab, 0x15, 0xb2, 0x29, 0xdc, 0x5f, 0xe8, 0x0c, 0x4c, 0x42,
-    0xf7, 0x67, 0x16, 0x2e, 0x73, 0xac, 0x59, 0xfc, 0x6b, 0x84, 0x2f, 0x7f,
-    0xde, 0x26, 0xf9, 0xe7, 0x3c, 0xb1, 0x7c, 0x72, 0xcd, 0xcc, 0x3d, 0xee,
-    0xc9, 0xaf, 0xff, 0xb3, 0x66, 0x2d, 0xcc, 0xe4, 0x9d, 0xbb, 0xf2, 0xc5,
-    0xc5, 0x12, 0xc5, 0x4a, 0x29, 0xb4, 0x76, 0xca, 0x77, 0xfa, 0x3f, 0xf9,
-    0xb6, 0xb5, 0x2b, 0x14, 0xb1, 0x7f, 0x70, 0x33, 0xeb, 0x52, 0xb1, 0x7f,
-    0xf3, 0x43, 0x08, 0x65, 0x30, 0x1f, 0x16, 0x2d, 0x98, 0x7f, 0xfe, 0x0c,
-    0xe8, 0x61, 0x7f, 0xb8, 0x29, 0xec, 0x59, 0xf5, 0x8b, 0xf9, 0xa2, 0xdf,
-    0xf3, 0xb2, 0xc5, 0x18, 0x7c, 0xd1, 0x1a, 0xdd, 0xce, 0xb1, 0x62, 0xff,
-    0xf1, 0x61, 0xe7, 0x73, 0x03, 0xdb, 0x66, 0xed, 0x62, 0xfe, 0x11, 0xce,
-    0xd0, 0x33, 0xc7, 0xdb, 0xd4, 0x3b, 0x7f, 0xdc, 0x33, 0xab, 0xd9, 0x10,
-    0xa2, 0x58, 0xbb, 0x5c, 0x58, 0xb8, 0x50, 0xc3, 0xd9, 0x0d, 0x06, 0xa0,
-    0x9b, 0x0f, 0xe1, 0x22, 0x50, 0xa2, 0xbc, 0x13, 0x6c, 0xb1, 0x67, 0x58,
-    0xa7, 0x3e, 0xaf, 0x9d, 0x00, 0x7e, 0xfc, 0x3c, 0x8b, 0xee, 0xb1, 0x7d,
-    0x91, 0x7d, 0xd6, 0x2d, 0xb9, 0x87, 0x98, 0x32, 0x9b, 0xff, 0xf4, 0xea,
-    0x77, 0xc3, 0xce, 0xf0, 0x7e, 0x08, 0xeb, 0x15, 0x2c, 0x9b, 0xed, 0x9f,
-    0xb2, 0x15, 0x26, 0xa0, 0xee, 0x3f, 0x14, 0x6f, 0xba, 0x87, 0xd7, 0xe3,
-    0x7a, 0x62, 0xe2, 0x85, 0xbf, 0xa5, 0x33, 0x09, 0xea, 0x38, 0xaa, 0xe8,
-    0x99, 0x62, 0xfe, 0xd6, 0x49, 0xb2, 0x4b, 0x17, 0xff, 0xfb, 0xa1, 0x9b,
-    0xfc, 0x43, 0xd3, 0xec, 0x59, 0xe7, 0xc0, 0x96, 0x2d, 0xf5, 0x8b, 0xdd,
-    0x4c, 0x75, 0x8a, 0x63, 0x65, 0xd4, 0x25, 0x74, 0x6f, 0xd6, 0x2c, 0x5f,
-    0xfd, 0xbf, 0xdf, 0x3b, 0x87, 0x3c, 0x2d, 0xd6, 0x2e, 0x63, 0xac, 0x56,
-    0x1f, 0x01, 0x24, 0xdf, 0xf9, 0xbb, 0xee, 0x02, 0xd8, 0xcf, 0x62, 0xc5,
-    0xfc, 0x6b, 0x44, 0x4e, 0x75, 0x8b, 0x1d, 0x62, 0xff, 0xff, 0xec, 0xea,
-    0x8a, 0x7f, 0x9e, 0x29, 0x88, 0xcc, 0x2c, 0xee, 0x0f, 0xc5, 0x8b, 0xff,
-    0xfb, 0xed, 0x11, 0xc4, 0x4c, 0x6f, 0x33, 0x7f, 0x8a, 0x3d, 0x62, 0xa5,
-    0x1d, 0x40, 0x12, 0xe3, 0xb5, 0x12, 0x69, 0x1e, 0x8c, 0x66, 0xff, 0xc4,
-    0xda, 0x30, 0xb0, 0x3c, 0xfa, 0xc5, 0xff, 0xf8, 0xbd, 0xc3, 0x3b, 0xf6,
-    0x6d, 0x3c, 0x7d, 0x62, 0xc5, 0x4a, 0x30, 0x30, 0xa4, 0x47, 0xf7, 0xa1,
-    0xb4, 0xac, 0x5f, 0x7b, 0x9d, 0xc1, 0x62, 0xd2, 0xb1, 0x46, 0x1e, 0xa6,
-    0x0f, 0x00, 0x96, 0xff, 0xf6, 0x81, 0xac, 0x70, 0x73, 0xab, 0xd9, 0xf5,
-    0x8b, 0xfc, 0xc5, 0xe8, 0xb3, 0x58, 0xb1, 0x68, 0x96, 0x2f, 0x8d, 0x62,
-    0x02, 0xc5, 0xf7, 0xdf, 0x51, 0x2c, 0x5f, 0xfc, 0xdd, 0x98, 0xc5, 0xe8,
-    0xb3, 0x58, 0xb1, 0x46, 0x22, 0x81, 0xc4, 0xe2, 0x23, 0x22, 0x4b, 0xf8,
-    0xb0, 0x78, 0xff, 0x58, 0xa3, 0xa6, 0x79, 0xf8, 0x69, 0xf0, 0xf6, 0xec,
-    0xe2, 0xc5, 0xe1, 0x61, 0x2c, 0x5f, 0xff, 0xbb, 0x87, 0x0c, 0xc1, 0x75,
-    0xef, 0xf6, 0x2c, 0xe8, 0xb1, 0x7f, 0xd9, 0xdc, 0x38, 0xd3, 0xdc, 0x16,
-    0x2f, 0xff, 0xb9, 0x8d, 0xa3, 0x27, 0xe2, 0xf1, 0x31, 0xab, 0x14, 0x74,
-    0x46, 0x70, 0xee, 0xff, 0xff, 0x1a, 0x66, 0x41, 0xfa, 0x16, 0x73, 0xf8,
-    0xe3, 0xc3, 0xac, 0x56, 0xe9, 0xd1, 0xe8, 0x5c, 0xe3, 0x9f, 0x87, 0x51,
-    0x11, 0xdf, 0x8d, 0xce, 0x34, 0x7a, 0xc5, 0xfe, 0xe4, 0xe9, 0xa0, 0xff,
-    0x58, 0xb6, 0x8c, 0x3d, 0xf8, 0x8b, 0x2f, 0xe6, 0xde, 0x05, 0x27, 0x58,
-    0xb6, 0xcb, 0x15, 0x87, 0x82, 0x19, 0x75, 0x4a, 0xe4, 0xfe, 0x47, 0x14,
-    0xf1, 0xec, 0xb4, 0x2b, 0xc9, 0xae, 0xf4, 0x96, 0xcb, 0x15, 0x2c, 0x9b,
-    0x58, 0x0c, 0x0c, 0xb7, 0x21, 0x33, 0xd9, 0x1b, 0xc2, 0x0b, 0x44, 0x1f,
-    0x94, 0x98, 0x50, 0x82, 0xf4, 0xe6, 0x77, 0x45, 0x9a, 0x8d, 0xe5, 0x30,
-    0x7b, 0xf5, 0x91, 0xe0, 0x75, 0xb2, 0x94, 0xa3, 0x48, 0xd0, 0x63, 0x69,
-    0xf4, 0xde, 0xbb, 0x8d, 0x5f, 0xae, 0x42, 0xeb, 0xae, 0xb1, 0x8a, 0x46,
-    0xa8, 0x5e, 0x46, 0xb2, 0xd9, 0xad, 0xd5, 0xf6, 0x9f, 0x02, 0x85, 0x21,
-    0xe4, 0x75, 0xae, 0x7e, 0x5e, 0x1b, 0xf9, 0xb4, 0x9d, 0xad, 0xed, 0x03,
-    0x77, 0x75, 0xb3, 0x43, 0xd3, 0x58, 0x22, 0xac, 0xf2, 0xb5, 0x68, 0xa7,
-    0x0f, 0x59, 0x9d, 0xfe, 0xf2, 0xc8, 0x5a, 0x9f, 0xf8, 0x0a, 0x63, 0x47,
-    0x5f, 0x1d, 0x71, 0x5b, 0x5d, 0x5e, 0x5b, 0x44, 0xaf, 0x5b, 0x32, 0x71,
-    0x52, 0x4d, 0x3a, 0x4e, 0xda, 0x85, 0x28, 0x2e, 0x3a, 0x93, 0xd8, 0x1d,
-    0x2f, 0x5b, 0xaa, 0x95, 0x21, 0x7e, 0xf4, 0x93, 0x81, 0x62, 0xfd, 0x83,
-    0x29, 0xdd, 0x62, 0xf1, 0x7a, 0x33, 0x0f, 0x3f, 0xe4, 0xf7, 0xd3, 0xf9,
-    0x89, 0x62, 0xff, 0x8b, 0x3a, 0x38, 0xf5, 0x27, 0x58, 0xbe, 0x8b, 0x8c,
-    0x75, 0x8a, 0x1a, 0x20, 0x7e, 0x47, 0xd0, 0xea, 0xff, 0x7e, 0x75, 0x16,
-    0x16, 0xeb, 0x17, 0xf1, 0x67, 0x40, 0x4c, 0x4b, 0x17, 0xd9, 0xfc, 0xdd,
-    0x62, 0x86, 0x7a, 0x7d, 0x0c, 0x2f, 0xfe, 0xf6, 0xa7, 0x3b, 0x8d, 0x86,
-    0xcc, 0x6a, 0xc5, 0xff, 0x3f, 0x49, 0x8f, 0x88, 0x3c, 0x25, 0x8b, 0xda,
-    0xcd, 0x96, 0x2f, 0xa1, 0x91, 0xfe, 0x58, 0xad, 0xcf, 0x12, 0x21, 0xeb,
-    0x98, 0x0b, 0x16, 0xc7, 0x37, 0x7a, 0x24, 0xbc, 0x2d, 0xe3, 0x25, 0x50,
-    0x60, 0xcc, 0xb2, 0x11, 0x1d, 0x92, 0x44, 0x97, 0xf8, 0x5f, 0x54, 0x62,
-    0xf6, 0x6c, 0xcb, 0x92, 0x79, 0x58, 0x57, 0xf9, 0xdb, 0xb9, 0x8f, 0x93,
-    0xac, 0x5f, 0x9f, 0xdc, 0x72, 0x58, 0xa1, 0x9e, 0xeb, 0x1b, 0x5f, 0x69,
-    0xb8, 0xeb, 0x15, 0x1e, 0x78, 0x7e, 0x21, 0xbf, 0xc2, 0x68, 0xfc, 0x00,
-    0x19, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x93, 0xa5, 0xd9, 0xda, 0xc5,
-    0xfd, 0x13, 0x84, 0x2f, 0x79, 0x62, 0xfd, 0x85, 0xbe, 0x4a, 0xc5, 0xbe,
-    0xb1, 0x7f, 0xf0, 0x89, 0xca, 0x7e, 0xe7, 0xce, 0x2c, 0x57, 0x0f, 0x50,
-    0x42, 0x57, 0x68, 0xeb, 0x17, 0xff, 0x10, 0xc4, 0x3d, 0x4f, 0xdf, 0x09,
-    0x62, 0xff, 0x9b, 0x9c, 0xc3, 0x58, 0x80, 0xb1, 0x52, 0x7f, 0x84, 0x87,
-    0x78, 0x98, 0xd5, 0x8b, 0x3a, 0xc5, 0x61, 0xae, 0x34, 0x76, 0xff, 0xff,
-    0xda, 0x73, 0xc9, 0xbc, 0x92, 0x18, 0x87, 0xa9, 0xfb, 0xe1, 0x2c, 0x54,
-    0xaa, 0xe6, 0x19, 0x2e, 0x1b, 0x76, 0x6e, 0xe3, 0x1a, 0x31, 0x3b, 0xd8,
-    0x08, 0xb9, 0x09, 0x48, 0xe4, 0xe0, 0xc8, 0x6f, 0xb3, 0x3e, 0xeb, 0x17,
-    0xff, 0x8e, 0xdc, 0xce, 0x93, 0xdb, 0xfe, 0x60, 0xb1, 0x79, 0xb5, 0xb2,
-    0xc5, 0xfb, 0xbf, 0x7a, 0x4e, 0xb1, 0x7e, 0x18, 0xb3, 0x80, 0x58, 0xba,
-    0x26, 0x58, 0xbe, 0xf3, 0x11, 0xab, 0x15, 0x26, 0xef, 0xb1, 0x8b, 0xe3,
-    0x5a, 0x11, 0x83, 0x4c, 0xeb, 0x08, 0x77, 0x4c, 0x71, 0xe6, 0x2a, 0x0d,
-    0x92, 0xa3, 0x15, 0x26, 0x9b, 0x1e, 0xdd, 0xff, 0xd0, 0xfe, 0x3c, 0x39,
-    0x3e, 0x91, 0xac, 0x5f, 0x1a, 0x76, 0x82, 0xc5, 0xd0, 0x8c, 0xc3, 0xe8,
-    0x0d, 0x12, 0xf4, 0x05, 0xa5, 0x8b, 0xcf, 0x9a, 0x58, 0xbf, 0x69, 0x86,
-    0x22, 0x58, 0xbe, 0x17, 0xe4, 0xeb, 0x15, 0xb9, 0xf3, 0x80, 0x73, 0xc5,
-    0x17, 0xf4, 0xe1, 0x19, 0x9b, 0x2c, 0x5e, 0xed, 0xb6, 0x58, 0xbb, 0x38,
-    0xb1, 0x52, 0x6d, 0xb0, 0x7e, 0xfb, 0x6d, 0xa7, 0xb5, 0x8b, 0xf9, 0xb6,
-    0xf7, 0x18, 0x0b, 0x17, 0x6a, 0x33, 0x13, 0x8d, 0xee, 0x10, 0xba, 0x30,
-    0xfb, 0x23, 0x0f, 0xc7, 0x13, 0x54, 0xaa, 0x2c, 0x78, 0xef, 0xaf, 0xdd,
-    0x27, 0xa3, 0xf5, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x92, 0x8c, 0xbf,
-    0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0xa0, 0xbf, 0xfc, 0x59,
-    0x14, 0x1b, 0x50, 0x2c, 0xe8, 0xcb, 0x17, 0xa7, 0x3b, 0x58, 0xbc, 0xdb,
-    0x4a, 0xc5, 0x11, 0xba, 0x10, 0xed, 0x4a, 0x6b, 0x78, 0x5e, 0x73, 0x7e,
-    0x28, 0x7a, 0x10, 0xb7, 0xf8, 0x36, 0xe9, 0x19, 0xe7, 0xd9, 0x62, 0xa3,
-    0x11, 0x13, 0x29, 0xd6, 0xdd, 0x62, 0xf6, 0xd0, 0x95, 0x8b, 0xff, 0xf6,
-    0x7f, 0xed, 0x00, 0xb1, 0xfa, 0x13, 0x4f, 0x16, 0x2f, 0xfd, 0xf1, 0x7d,
-    0x9f, 0xbe, 0x49, 0xab, 0x16, 0xf4, 0x11, 0x2e, 0xea, 0xd7, 0xfa, 0x74,
-    0x19, 0x37, 0xb8, 0xb1, 0x58, 0x7b, 0x9f, 0x28, 0xbf, 0x0b, 0xcc, 0x17,
-    0x96, 0x2f, 0xdb, 0x07, 0xb4, 0xec, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92,
-    0xbc, 0xbf, 0xff, 0x85, 0xe7, 0xf9, 0x08, 0xd2, 0x66, 0x1f, 0x84, 0xcb,
-    0x15, 0xb2, 0x38, 0xf0, 0xab, 0x45, 0xa4, 0x63, 0x7f, 0xed, 0xe7, 0xd0,
-    0x93, 0x93, 0x41, 0x62, 0xff, 0xb9, 0x30, 0xfc, 0x84, 0xc4, 0xb1, 0x67,
-    0xdc, 0xfe, 0x3c, 0x7f, 0x7f, 0xed, 0x6d, 0xc9, 0xdc, 0x98, 0xfc, 0x58,
-    0xaf, 0x9f, 0x4b, 0x14, 0x5f, 0xfd, 0xe0, 0x60, 0xff, 0x83, 0x1b, 0xf6,
-    0xb1, 0x7e, 0xe9, 0x25, 0xf1, 0x2c, 0x5f, 0xf9, 0xbb, 0x87, 0x33, 0x71,
-    0xe7, 0x6b, 0x15, 0x87, 0xd8, 0xc5, 0x56, 0x35, 0x62, 0xfe, 0x71, 0x8e,
-    0x75, 0x2b, 0x17, 0x31, 0x2c, 0x5d, 0x26, 0xac, 0x5f, 0x47, 0xe7, 0x89,
-    0x62, 0xfd, 0xc2, 0x69, 0xe2, 0xc5, 0xff, 0xef, 0xb4, 0x02, 0xc7, 0xe8,
-    0x4d, 0x3c, 0x58, 0xbf, 0xff, 0xce, 0x33, 0xb3, 0x16, 0xe3, 0xfc, 0xe0,
-    0xdc, 0xb6, 0x58, 0xb6, 0x7d, 0x15, 0x64, 0x97, 0x52, 0x8f, 0x98, 0x43,
-    0x4a, 0xff, 0xbd, 0x9d, 0xfb, 0x30, 0x8d, 0x58, 0xbf, 0xfc, 0xfd, 0x07,
-    0x39, 0xdf, 0xdf, 0x52, 0x75, 0x8b, 0xff, 0x7e, 0x26, 0xf7, 0xbb, 0xdd,
-    0xc9, 0x62, 0xb1, 0x11, 0xcc, 0x99, 0x7e, 0xcf, 0xff, 0x22, 0x58, 0xbf,
-    0xff, 0x00, 0x84, 0x70, 0xc6, 0x39, 0x01, 0xe7, 0x3c, 0xb1, 0x7f, 0x37,
-    0xb9, 0x9d, 0xf9, 0x62, 0x86, 0x8a, 0xfe, 0xca, 0x49, 0x5e, 0xd1, 0x9d,
-    0x62, 0xfd, 0x9c, 0x04, 0xc7, 0x18, 0x8e, 0x46, 0x09, 0xbc, 0x63, 0xbd,
-    0x90, 0xea, 0x16, 0x47, 0x20, 0xf8, 0x9b, 0x16, 0xf5, 0xe2, 0xc4, 0x31,
-    0xe8, 0xc7, 0xba, 0x13, 0x85, 0x0c, 0x80, 0xe1, 0xa1, 0x7e, 0xd6, 0xec,
-    0xdb, 0xaa, 0x4b, 0x62, 0xff, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48,
-    0x82, 0x5f, 0x61, 0xe6, 0x3d, 0x62, 0xd1, 0x98, 0x8a, 0x76, 0x37, 0xe2,
-    0x5d, 0xf1, 0xdc, 0xa5, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x88, 0x65,
-    0xfd, 0xa1, 0x74, 0x90, 0x8e, 0xb1, 0x7f, 0x16, 0x73, 0xd0, 0x95, 0x8b,
-    0xcd, 0x08, 0xc9, 0x45, 0xbe, 0x10, 0xb9, 0xbf, 0x43, 0x2b, 0xff, 0xba,
-    0x3f, 0xa7, 0xe5, 0x9e, 0xd4, 0xac, 0x5f, 0xe3, 0x99, 0x9a, 0x6f, 0x71,
-    0x62, 0xed, 0xa3, 0x30, 0xfe, 0x83, 0x45, 0xa8, 0xc4, 0x7e, 0x3c, 0x32,
-    0xaf, 0xef, 0x38, 0xf0, 0xa2, 0x58, 0xbd, 0x9d, 0x31, 0x62, 0xb0, 0xf3,
-    0x08, 0xba, 0xff, 0x10, 0xb9, 0x39, 0xa0, 0x2c, 0x5e, 0x37, 0x23, 0xd6,
-    0x2f, 0x31, 0xb1, 0x98, 0x7a, 0x86, 0x99, 0xdb, 0x91, 0x88, 0xab, 0x27,
-    0x4b, 0xcc, 0xdb, 0xae, 0x50, 0x32, 0xa4, 0xf5, 0x77, 0x2b, 0xbf, 0x46,
-    0xbe, 0xb3, 0x6d, 0xb6, 0x58, 0xb6, 0xeb, 0x17, 0xe3, 0xf7, 0x0c, 0x3a,
-    0xc5, 0xa3, 0xd6, 0x2a, 0x35, 0xa2, 0x2b, 0x0e, 0x22, 0x13, 0xf9, 0x55,
-    0xc1, 0x79, 0x62, 0xf7, 0x1c, 0xd5, 0x8a, 0x19, 0xb7, 0xec, 0x66, 0xe8,
-    0xd3, 0x65, 0x8b, 0x1a, 0xb1, 0x7f, 0xdf, 0x9f, 0x73, 0xac, 0xe4, 0x68,
-    0x4b, 0x15, 0x1b, 0x9f, 0xac, 0x6c, 0x3d, 0x01, 0x3b, 0xfa, 0x4b, 0xdf,
-    0xc8, 0x2c, 0x5f, 0xf7, 0x70, 0xc2, 0x14, 0x33, 0x8b, 0x17, 0x67, 0x52,
-    0xc5, 0x49, 0xea, 0x78, 0xea, 0xb4, 0x8a, 0x2f, 0x42, 0x06, 0xc4, 0xb1,
-    0x7b, 0xae, 0x91, 0xd1, 0xba, 0xc5, 0xe9, 0x8e, 0x8d, 0xd6, 0x2b, 0xae,
-    0x87, 0xa7, 0x25, 0xd6, 0x75, 0x8a, 0xeb, 0x11, 0x3d, 0xd7, 0x6c, 0x91,
-    0xac, 0xa6, 0xff, 0xf4, 0x6b, 0x8d, 0x7d, 0x67, 0xe4, 0xe4, 0xdf, 0x7d,
-    0x2c, 0x5b, 0xb5, 0x8b, 0x8a, 0x0b, 0x17, 0xbd, 0x80, 0x58, 0xb1, 0x2c,
-    0x5f, 0x08, 0x6d, 0x1e, 0xb1, 0x4e, 0x6d, 0xf8, 0x23, 0x78, 0x5e, 0xc5,
-    0x8b, 0xa6, 0x25, 0x8b, 0xf8, 0xf9, 0xb9, 0x34, 0x7a, 0xc5, 0xec, 0x7d,
-    0x96, 0x2c, 0x1a, 0xc5, 0x61, 0xf0, 0xe8, 0xc4, 0x43, 0xb6, 0x1a, 0xc5,
-    0xe1, 0xcf, 0x96, 0x18, 0xb2, 0xbf, 0xfa, 0x02, 0x8b, 0x59, 0x3d, 0xc1,
-    0xce, 0xb1, 0x63, 0xac, 0x5b, 0xa2, 0xc5, 0xe2, 0xf7, 0x16, 0x29, 0xcd,
-    0x88, 0x85, 0x2a, 0x51, 0xab, 0xd9, 0x5b, 0xa3, 0xf9, 0x0e, 0xf7, 0x41,
-    0x41, 0x62, 0xf7, 0xf3, 0x8b, 0x16, 0x65, 0x8a, 0x19, 0xae, 0xf0, 0xed,
-    0xec, 0x3c, 0xac, 0x50, 0xd5, 0x88, 0x60, 0x9c, 0x78, 0xbc, 0x4a, 0x9a,
-    0x20, 0xf8, 0xef, 0x1e, 0x7d, 0x18, 0xaf, 0x43, 0xc0, 0xd3, 0xba, 0x88,
-    0x6f, 0xb3, 0xb8, 0x79, 0x62, 0xfe, 0x29, 0xee, 0x0e, 0x4b, 0x17, 0xf6,
-    0x77, 0xe3, 0xcb, 0xac, 0x5f, 0x39, 0x77, 0x05, 0x8b, 0xdc, 0x7e, 0x8b,
-    0x15, 0xb2, 0x30, 0x46, 0x48, 0xe5, 0xbc, 0x2e, 0xf1, 0x1d, 0x89, 0x62,
-    0xfb, 0x0e, 0xc3, 0x58, 0xbf, 0x0e, 0x4b, 0x68, 0xf5, 0x8b, 0xfd, 0x26,
-    0x86, 0x00, 0x4f, 0x6b, 0x15, 0x27, 0xc7, 0xb1, 0x65, 0xf9, 0xbe, 0xe7,
-    0xc5, 0x8a, 0xc4, 0x6f, 0xfc, 0x44, 0xa1, 0x0b, 0xd0, 0x8a, 0xfe, 0x0f,
-    0x22, 0x70, 0x71, 0x62, 0xfe, 0xcd, 0xff, 0x33, 0x12, 0xc5, 0xfb, 0x5a,
-    0x9c, 0x25, 0x8b, 0xed, 0x33, 0x41, 0x62, 0xd1, 0xcb, 0x14, 0xe8, 0xff,
-    0x89, 0x0b, 0xe6, 0x0c, 0x5e, 0x44, 0xe2, 0x22, 0xbc, 0x16, 0x04, 0xb1,
-    0x78, 0x79, 0xf5, 0x8a, 0xd1, 0xbc, 0xea, 0x1f, 0xbc, 0x40, 0xe2, 0xc5,
-    0xf9, 0xb6, 0x0f, 0x22, 0x58, 0xbc, 0x00, 0xf6, 0x58, 0xbe, 0x3e, 0x77,
-    0xc5, 0x8b, 0x72, 0x4f, 0x11, 0xc8, 0x2f, 0x6b, 0x0e, 0xb1, 0x58, 0x8c,
-    0xf2, 0x1d, 0xe3, 0x7f, 0x89, 0xa9, 0x62, 0xec, 0xed, 0x62, 0xba, 0x1a,
-    0x48, 0xe0, 0xcb, 0x82, 0x1a, 0xc5, 0xed, 0xca, 0x3d, 0x62, 0xfa, 0x77,
-    0x90, 0x2c, 0x5f, 0xce, 0xd0, 0xf3, 0xec, 0xb1, 0x60, 0xb4, 0x7a, 0x3f,
-    0x23, 0xb4, 0x16, 0x29, 0x8d, 0xdf, 0x8a, 0x6b, 0xe8, 0xe6, 0x61, 0x92,
-    0x85, 0x6d, 0xf7, 0xb8, 0x1f, 0x16, 0x2d, 0xa5, 0x8a, 0xc3, 0x6e, 0x22,
-    0x5b, 0xd8, 0x46, 0xac, 0x5f, 0x8d, 0xc3, 0xce, 0xeb, 0x15, 0x87, 0x8e,
-    0x21, 0xdb, 0xee, 0x93, 0x3d, 0xac, 0x5f, 0xf8, 0x19, 0xdf, 0x03, 0xd3,
-    0x9f, 0x16, 0x2e, 0x78, 0x96, 0x2b, 0xb3, 0xd9, 0xd2, 0x0d, 0xfb, 0x6d,
-    0xfe, 0xf1, 0x2c, 0x54, 0xa3, 0x37, 0x1f, 0x9c, 0x8e, 0xfb, 0x6e, 0x76,
-    0xeb, 0x17, 0xff, 0xa7, 0xb8, 0x39, 0xc2, 0xc2, 0x1f, 0xe5, 0x62, 0xa5,
-    0x72, 0xeb, 0x21, 0xe6, 0xeb, 0xfa, 0x8c, 0x30, 0xed, 0x5f, 0x67, 0x28,
-    0x77, 0x70, 0xb4, 0x44, 0xb7, 0xe6, 0x18, 0x72, 0x4b, 0x17, 0xf9, 0xc5,
-    0x1f, 0xf9, 0xcd, 0x96, 0x2f, 0xfd, 0xaf, 0x06, 0x4d, 0xbe, 0x16, 0xeb,
-    0x17, 0x37, 0x96, 0x2e, 0x78, 0xe5, 0x8a, 0x88, 0xd8, 0x9c, 0x5e, 0xfb,
-    0xf8, 0x6b, 0xac, 0x5f, 0xec, 0xe9, 0x85, 0x9d, 0xf9, 0x62, 0xa4, 0xfe,
-    0xb7, 0x22, 0xf9, 0x1d, 0xd3, 0xd4, 0xb1, 0x7f, 0xe0, 0x9a, 0x1a, 0xc7,
-    0xfc, 0x8d, 0x62, 0xdd, 0xac, 0x5e, 0x2e, 0xf8, 0xb1, 0x7c, 0xe3, 0xc2,
-    0x58, 0xa9, 0x3d, 0x27, 0x13, 0xe0, 0xf5, 0xfd, 0xdf, 0x30, 0xf3, 0x1e,
-    0xb1, 0x7a, 0x13, 0xda, 0xc5, 0xef, 0xb0, 0xd6, 0x2f, 0x6c, 0x2d, 0xa2,
-    0x37, 0x7e, 0x1e, 0xbc, 0xcd, 0xba, 0xa4, 0xc4, 0x2f, 0xdd, 0x3e, 0xf2,
-    0x4b, 0x17, 0x7b, 0x8b, 0x14, 0xe7, 0x82, 0x19, 0x4d, 0x4a, 0x66, 0x1b,
-    0x36, 0xee, 0x6d, 0xa6, 0xbb, 0xf7, 0x9f, 0xa4, 0xfd, 0x62, 0xfb, 0x4c,
-    0x5e, 0x58, 0xb0, 0x16, 0x29, 0xcf, 0x7b, 0x45, 0x5d, 0x44, 0x57, 0xdf,
-    0x26, 0x8f, 0x58, 0xbf, 0x8e, 0xc0, 0xd6, 0x1d, 0x62, 0xfe, 0xd7, 0xdb,
-    0x98, 0x1a, 0xc5, 0xdf, 0x12, 0xc5, 0xf7, 0x03, 0x28, 0x2c, 0x50, 0xcd,
-    0xe7, 0x86, 0x2f, 0x4e, 0xb6, 0x58, 0xa9, 0x47, 0xee, 0x12, 0xb9, 0x73,
-    0x35, 0x86, 0x43, 0x7e, 0xfb, 0x72, 0x63, 0xd6, 0x2d, 0xa5, 0x8a, 0x23,
-    0x7a, 0x22, 0xbb, 0x9c, 0x25, 0x8b, 0xff, 0xbe, 0xd0, 0xfe, 0x16, 0x79,
-    0xf8, 0xb1, 0x7f, 0xe8, 0x67, 0x3d, 0xfc, 0x7d, 0x41, 0x62, 0x9d, 0x13,
-    0x5e, 0x18, 0x12, 0x1d, 0xfd, 0x33, 0xd9, 0xd8, 0x6b, 0x17, 0xf8, 0x60,
-    0x17, 0xb8, 0x28, 0xf5, 0x8b, 0xa7, 0x75, 0x8b, 0xa7, 0xa2, 0xc5, 0xfd,
-    0x84, 0x2c, 0xd1, 0xab, 0x17, 0x14, 0x16, 0x2a, 0x51, 0x5e, 0xe7, 0x3f,
-    0x18, 0xf0, 0xc8, 0x8b, 0xaf, 0xee, 0x61, 0x19, 0x00, 0x2c, 0x5f, 0xd3,
-    0x9a, 0x00, 0x3c, 0xb1, 0x50, 0x3d, 0xdd, 0xcb, 0xef, 0xf1, 0x0f, 0x53,
-    0x06, 0xd2, 0xc5, 0xed, 0x6d, 0xb2, 0xc5, 0x39, 0xe9, 0xb1, 0x9d, 0xf4,
-    0xf7, 0x0e, 0x2c, 0x56, 0xcc, 0x8f, 0x68, 0x14, 0x61, 0xbe, 0xf0, 0xec,
-    0xec, 0xbd, 0xc6, 0xa2, 0x84, 0x8e, 0xa3, 0x5d, 0x3c, 0x27, 0x7f, 0x19,
-    0x73, 0x42, 0x10, 0xa1, 0x75, 0xc2, 0xff, 0x43, 0x74, 0x50, 0xa5, 0xe8,
-    0xec, 0x11, 0x05, 0xdc, 0x75, 0x8b, 0xed, 0x49, 0x1a, 0xb1, 0x7d, 0xe7,
-    0x20, 0x96, 0x2f, 0xa2, 0x27, 0xd9, 0x62, 0xcd, 0x87, 0x8f, 0xd9, 0x1d,
-    0xe8, 0x4c, 0x7a, 0xc5, 0x0d, 0x19, 0x18, 0x2e, 0x6b, 0x54, 0x44, 0xf7,
-    0xcf, 0xc9, 0x89, 0x62, 0xff, 0xef, 0x66, 0xdc, 0x9d, 0x34, 0x1f, 0xeb,
-    0x15, 0xa3, 0xe8, 0xf1, 0x1d, 0x9d, 0x62, 0xce, 0xb1, 0x68, 0x1a, 0x68,
-    0x80, 0x23, 0x77, 0x71, 0xeb, 0x17, 0xd1, 0xd9, 0xa9, 0x58, 0xa1, 0x1e,
-    0x08, 0x63, 0x97, 0xa2, 0x16, 0x96, 0x2e, 0x9e, 0x2c, 0x5f, 0xe1, 0x94,
-    0xfb, 0x82, 0x3a, 0xc5, 0xe7, 0x11, 0x2c, 0x58, 0x96, 0x2e, 0x92, 0x58,
-    0xbf, 0xa7, 0x81, 0xed, 0x3b, 0x2c, 0x51, 0xa8, 0xbf, 0x88, 0x5c, 0xe6,
-    0x84, 0x39, 0xc1, 0x10, 0xc5, 0xae, 0x7d, 0x2c, 0x5f, 0x84, 0x6f, 0xc5,
-    0xc5, 0x8b, 0xcf, 0x80, 0x58, 0xa1, 0x9e, 0xf6, 0x85, 0xc8, 0xae, 0xfa,
-    0x3f, 0xe2, 0x8f, 0x58, 0xa9, 0x54, 0x21, 0x84, 0x6f, 0x0d, 0xe6, 0x85,
-    0xb8, 0x8b, 0xaf, 0xf8, 0x5b, 0x16, 0x0f, 0xe2, 0x35, 0x62, 0xa5, 0x5a,
-    0x59, 0xa8, 0x9f, 0x94, 0xf2, 0x4a, 0x57, 0xdf, 0xe0, 0xa5, 0x62, 0xdc,
-    0x58, 0xbf, 0xfb, 0xbe, 0xc0, 0xde, 0xe3, 0x97, 0x70, 0x58, 0xbe, 0x1e,
-    0x38, 0xd6, 0x2b, 0x0f, 0xa8, 0x92, 0x2f, 0xf0, 0xb6, 0xee, 0x1f, 0x16,
-    0x96, 0x2f, 0xfe, 0x9c, 0xe6, 0x10, 0xdc, 0x12, 0x4b, 0x17, 0x8a, 0x76,
-    0x58, 0xac, 0x4c, 0xc9, 0xdf, 0x3e, 0x40, 0x47, 0x02, 0x41, 0xbe, 0xff,
-    0x6d, 0x1e, 0xb1, 0x70, 0xb4, 0xb1, 0x7b, 0x52, 0x75, 0x8b, 0x83, 0x95,
-    0x8a, 0x93, 0x6b, 0x83, 0xb7, 0xfa, 0x41, 0xad, 0x49, 0xf8, 0xb1, 0x52,
-    0xa9, 0x92, 0x11, 0xaa, 0x9d, 0x21, 0x89, 0xf8, 0x9b, 0xe1, 0xfb, 0xe1,
-    0x87, 0xd6, 0x41, 0x62, 0xfc, 0x0d, 0xfe, 0xfd, 0x7a, 0xc5, 0xef, 0xe0,
-    0x16, 0x2f, 0x41, 0xe3, 0xd6, 0x2f, 0xee, 0xf9, 0xf9, 0x7f, 0x2c, 0x5c,
-    0xde, 0x58, 0xa7, 0x3c, 0x63, 0x97, 0xde, 0x6c, 0xfa, 0xc5, 0xd2, 0x05,
-    0x8b, 0xe7, 0x29, 0x1a, 0xc5, 0x49, 0xea, 0x7c, 0x73, 0x82, 0xf7, 0xf8,
-    0x0f, 0xad, 0x3f, 0x60, 0x58, 0xb8, 0x51, 0xcb, 0x17, 0x8a, 0x76, 0x58,
-    0xba, 0x7e, 0xb1, 0x4e, 0x6d, 0x38, 0x3b, 0x62, 0x58, 0xbe, 0x90, 0x01,
-    0x96, 0x2f, 0xff, 0x67, 0x70, 0x21, 0x79, 0x9c, 0xa4, 0x6b, 0x15, 0xb1,
-    0xfe, 0x38, 0x8f, 0x88, 0xaf, 0xee, 0x08, 0xbc, 0xf0, 0x58, 0xbf, 0x8e,
-    0x59, 0x31, 0xf1, 0x2c, 0x58, 0x0b, 0x15, 0x27, 0x86, 0xe6, 0x37, 0x7a,
-    0x0b, 0x17, 0x9a, 0x7b, 0x58, 0xa8, 0xd1, 0x5c, 0xa6, 0x15, 0x6e, 0x5f,
-    0xd8, 0xee, 0x99, 0xbe, 0xea, 0x02, 0xe2, 0x35, 0xe2, 0x7f, 0xa1, 0x38,
-    0x22, 0xf8, 0xe7, 0x10, 0xc8, 0x3a, 0x86, 0x2f, 0xb5, 0x9d, 0xf1, 0x62,
-    0xfb, 0x0f, 0x31, 0xeb, 0x15, 0xa3, 0xc9, 0xe1, 0x25, 0xe6, 0xf7, 0x16,
-    0x2f, 0x88, 0x5e, 0xe2, 0xc5, 0xff, 0xe8, 0x1c, 0xa7, 0x52, 0x3c, 0x8a,
-    0x7e, 0xb1, 0x5b, 0x1f, 0x6e, 0x88, 0xed, 0x12, 0xc5, 0xb6, 0x58, 0xad,
-    0x1a, 0x62, 0x13, 0xa7, 0x47, 0x9b, 0x42, 0x28, 0x49, 0x37, 0xb7, 0x6e,
-    0x2c, 0x5c, 0x1f, 0x6b, 0x15, 0x86, 0xe3, 0xe3, 0xd7, 0x4f, 0x45, 0x8b,
-    0xc2, 0x6e, 0x2c, 0x50, 0xcd, 0xb7, 0x41, 0x9b, 0x3a, 0xc5, 0xff, 0x4f,
-    0xb9, 0xcf, 0x4f, 0x61, 0x2c, 0x5e, 0x70, 0xba, 0xf5, 0x8b, 0xdf, 0xcd,
-    0x96, 0x2c, 0xfa, 0x3c, 0x1f, 0x91, 0xdf, 0xf3, 0x05, 0xf6, 0xe7, 0xa4,
-    0x25, 0x8b, 0x76, 0xb1, 0x50, 0x4f, 0x9f, 0x1a, 0xdd, 0x5a, 0x22, 0x3d,
-    0x08, 0xfd, 0xf4, 0x89, 0xc3, 0x3b, 0xbf, 0xf3, 0xff, 0xb8, 0x67, 0xb3,
-    0xbf, 0x2c, 0x5f, 0xef, 0xe1, 0xf1, 0xb5, 0xb2, 0xc5, 0xfe, 0xfe, 0x1f,
-    0x35, 0xac, 0x58, 0xa8, 0x22, 0xa0, 0x68, 0x3e, 0x34, 0xba, 0x34, 0x25,
-    0x8b, 0xdf, 0x9f, 0x2c, 0x5f, 0xbd, 0xe6, 0x87, 0x16, 0x2f, 0x66, 0xa5,
-    0x62, 0xf1, 0x61, 0xd6, 0x23, 0x8b, 0xcb, 0xd2, 0x52, 0xb1, 0x7e, 0x1e,
-    0x44, 0xc0, 0x58, 0xbf, 0xf0, 0xb3, 0xb1, 0xf4, 0xfe, 0x34, 0x4b, 0x15,
-    0xba, 0x62, 0xfd, 0x8e, 0xc4, 0x8b, 0xf2, 0xe1, 0x0d, 0xf4, 0x29, 0xbf,
-    0xd9, 0xdf, 0x57, 0xf3, 0xb8, 0x2c, 0x52, 0xc5, 0xe8, 0x67, 0x16, 0x2a,
-    0x06, 0xa4, 0x20, 0xcb, 0xff, 0x00, 0xf3, 0x0f, 0xbe, 0x9a, 0x0b, 0x17,
-    0x71, 0x96, 0x2b, 0x63, 0xd6, 0xec, 0xfe, 0xfb, 0x30, 0x2e, 0x2c, 0x54,
-    0xa2, 0xff, 0x1e, 0x3c, 0x49, 0x6e, 0x8b, 0x17, 0x08, 0x96, 0x2d, 0xd7,
-    0xac, 0x5b, 0xa2, 0xc5, 0x4a, 0xb6, 0x5d, 0x8c, 0x32, 0x33, 0x38, 0x97,
-    0x75, 0x19, 0x08, 0x0b, 0xb8, 0x29, 0xe1, 0x7e, 0x82, 0xf7, 0xde, 0xfe,
-    0x01, 0x62, 0xfd, 0xf6, 0x2e, 0xe0, 0xb1, 0x7a, 0x7d, 0xc5, 0x8b, 0x6f,
-    0x27, 0xd2, 0xc4, 0x7e, 0x29, 0xbf, 0x83, 0xcd, 0x66, 0x44, 0xb1, 0x44,
-    0x7c, 0x7c, 0x34, 0xbf, 0x9f, 0xa4, 0x8d, 0xf4, 0xb1, 0x7e, 0xef, 0x93,
-    0xae, 0x2c, 0x5f, 0xee, 0xfd, 0x9f, 0xfe, 0x44, 0xb1, 0x6c, 0x58, 0xad,
-    0x1e, 0x3f, 0x5e, 0x6d, 0x7b, 0x9d, 0x46, 0xac, 0x5b, 0x75, 0x8b, 0x12,
-    0xc5, 0x7c, 0xd2, 0x10, 0x9d, 0xf0, 0x38, 0x1c, 0x7a, 0xc5, 0xfe, 0xf7,
-    0x06, 0x26, 0xd4, 0x16, 0x2b, 0x0f, 0x75, 0x8a, 0x2f, 0xf6, 0xdd, 0xc3,
-    0x84, 0xf1, 0x2c, 0x5f, 0xdf, 0x62, 0x18, 0x7d, 0xac, 0x5f, 0x78, 0x85,
-    0xb2, 0xc5, 0x4a, 0x22, 0xdc, 0xdc, 0x8c, 0x2a, 0x55, 0x41, 0x8c, 0x87,
-    0x0b, 0xdd, 0xc7, 0x44, 0xec, 0x8c, 0x4f, 0xa2, 0x85, 0x5d, 0xfd, 0xa8,
-    0x03, 0x32, 0x25, 0x8b, 0x84, 0x1a, 0xc5, 0xff, 0x61, 0x05, 0x84, 0x3f,
-    0xca, 0xc5, 0xcf, 0x1c, 0xb1, 0x6e, 0xa5, 0x8b, 0x34, 0x9a, 0xf1, 0x0d,
-    0x5f, 0xbe, 0xfd, 0x24, 0x96, 0x2e, 0x60, 0xd6, 0x28, 0x67, 0x82, 0x22,
-    0x9b, 0xb9, 0x12, 0xc5, 0xed, 0x07, 0xc5, 0x8a, 0xc4, 0xdb, 0xcd, 0x2f,
-    0xdc, 0x67, 0x4c, 0xe4, 0xcd, 0xe2, 0x2e, 0x83, 0x37, 0x61, 0xab, 0x17,
-    0x3e, 0x96, 0x2a, 0x4d, 0x7f, 0xc6, 0x2f, 0x98, 0xdf, 0xba, 0xc5, 0x2c,
-    0x5e, 0x28, 0x70, 0xc3, 0x5e, 0xc4, 0x77, 0xf4, 0x22, 0xd6, 0x30, 0x4b,
-    0x17, 0xf8, 0xdd, 0x48, 0xff, 0x3d, 0x16, 0x2f, 0x7a, 0x62, 0x58, 0xa1,
-    0xa6, 0x0d, 0x89, 0xfd, 0x99, 0x70, 0xc3, 0xa8, 0xde, 0xff, 0x3f, 0x30,
-    0x6d, 0x07, 0x58, 0xbf, 0xff, 0x17, 0x8b, 0x38, 0x13, 0x16, 0xde, 0xfe,
-    0x12, 0xc5, 0xf0, 0xa2, 0x9e, 0xd6, 0x2f, 0xa0, 0x1f, 0xe5, 0x62, 0xfe,
-    0x78, 0x9c, 0x84, 0x1a, 0xc5, 0xff, 0x8a, 0x4f, 0x2f, 0x02, 0x9d, 0xd6,
-    0x2e, 0x98, 0x2c, 0x5f, 0x3f, 0x49, 0x89, 0x62, 0xb4, 0x6f, 0x3e, 0x2f,
-    0x52, 0x9b, 0x3e, 0xea, 0xac, 0x4a, 0x44, 0x9e, 0x2f, 0xe8, 0xf3, 0x79,
-    0xf5, 0x12, 0xc5, 0xef, 0x3e, 0xcb, 0x16, 0x3e, 0x1b, 0xcf, 0x0f, 0x5a,
-    0x3d, 0x62, 0xa4, 0xdd, 0xb1, 0x35, 0xf0, 0x73, 0xd5, 0xc5, 0x8b, 0x71,
-    0x62, 0xff, 0x14, 0xf7, 0xdf, 0x1a, 0x3d, 0x62, 0xfb, 0xee, 0x17, 0x16,
-    0x2f, 0xf8, 0x98, 0xfc, 0xc3, 0xcc, 0x7a, 0xc5, 0xfa, 0x47, 0x8d, 0x1e,
-    0xb1, 0x44, 0x7c, 0xbd, 0x0e, 0xef, 0xfc, 0xfb, 0x31, 0x7d, 0xb9, 0x31,
-    0xeb, 0x17, 0xfd, 0x80, 0x26, 0xd0, 0x73, 0xe5, 0x8b, 0xc6, 0xe4, 0x7a,
-    0xc5, 0x2c, 0x5d, 0xf9, 0x34, 0xd6, 0xfc, 0x86, 0x96, 0x28, 0x66, 0xe4,
-    0xe5, 0xb5, 0x28, 0xc0, 0xc8, 0x4f, 0xde, 0x70, 0xa3, 0xd6, 0x2e, 0xc0,
-    0x2c, 0x56, 0x8d, 0xc1, 0x10, 0xd6, 0x2a, 0x2b, 0x78, 0x44, 0xfc, 0x8c,
-    0xa3, 0x01, 0xe2, 0xf5, 0xff, 0xed, 0x39, 0xe7, 0xbf, 0xc8, 0xc9, 0xa3,
-    0xd6, 0x2e, 0x72, 0x58, 0xa1, 0xab, 0x53, 0xc2, 0x73, 0x89, 0x72, 0x53,
-    0x1f, 0x95, 0x3a, 0x93, 0x6f, 0xff, 0x9a, 0x00, 0x60, 0x67, 0x7e, 0xe7,
-    0x24, 0x0b, 0x17, 0xdb, 0xfe, 0x74, 0xb1, 0x7d, 0xbf, 0xe4, 0x25, 0x8b,
-    0xcf, 0x9a, 0x58, 0xae, 0xcf, 0x96, 0x3c, 0x90, 0x32, 0x5b, 0xfc, 0x01,
-    0x30, 0x7f, 0x98, 0x2c, 0x5f, 0xff, 0x6b, 0x58, 0x16, 0x6b, 0x5c, 0x70,
-    0xb3, 0x4b, 0x15, 0x2c, 0x99, 0x7c, 0x8e, 0x73, 0x74, 0xe7, 0x8e, 0x67,
-    0xf0, 0xcf, 0x69, 0x6e, 0x44, 0xc4, 0x28, 0x5b, 0x04, 0x68, 0x19, 0xad,
-    0xa0, 0xb1, 0x69, 0x58, 0xa9, 0x34, 0x64, 0x25, 0x7d, 0xf9, 0xef, 0xa9,
-    0x62, 0xdd, 0x4b, 0x15, 0xb9, 0xbc, 0x72, 0x7a, 0x19, 0xfe, 0x76, 0xb7,
-    0x61, 0xac, 0x5f, 0x89, 0x8f, 0x3f, 0x58, 0xac, 0x37, 0x2e, 0x25, 0x7f,
-    0xfa, 0x4f, 0x30, 0x19, 0x4f, 0xdb, 0x34, 0xb1, 0x71, 0xe5, 0x62, 0xf7,
-    0xe6, 0x3d, 0x62, 0xe1, 0x62, 0xc5, 0x89, 0x62, 0x96, 0x2a, 0x08, 0xb3,
-    0xc4, 0x8d, 0xc5, 0xc0, 0x41, 0xe1, 0x78, 0xe1, 0x1b, 0xe1, 0x7b, 0x80,
-    0x58, 0xbe, 0x9f, 0xcc, 0x7a, 0xc5, 0xf7, 0x53, 0x97, 0xd6, 0x28, 0x67,
-    0xdc, 0x44, 0x9d, 0x44, 0xb7, 0xbd, 0x80, 0x58, 0xbf, 0x8e, 0xfc, 0xe3,
-    0x8d, 0x62, 0xf3, 0x68, 0xd5, 0x8a, 0x11, 0xe6, 0x04, 0x5d, 0x7f, 0x16,
-    0x74, 0x2c, 0xe2, 0xc5, 0xcf, 0xa5, 0x8a, 0xdc, 0xf1, 0x7e, 0x5d, 0x6e,
-    0x2c, 0x5f, 0xe8, 0xf3, 0x03, 0x92, 0x63, 0x56, 0x2f, 0xf4, 0x1b, 0x0b,
-    0x3d, 0xc5, 0x8b, 0xfb, 0x8c, 0x1c, 0xf6, 0xcb, 0x17, 0xec, 0xc2, 0xef,
-    0xcb, 0x17, 0xfb, 0x3e, 0x59, 0xef, 0xba, 0xc5, 0x0c, 0xf6, 0xbc, 0x51,
-    0x52, 0x99, 0x46, 0x09, 0x76, 0x72, 0xc6, 0x40, 0x84, 0x4d, 0xe9, 0x6d,
-    0x2c, 0x5f, 0xf0, 0x53, 0xc7, 0x83, 0x96, 0x2c, 0x5f, 0x61, 0x03, 0x8b,
-    0x14, 0x33, 0xf6, 0xc1, 0xce, 0x1c, 0x5e, 0x3f, 0x38, 0xb1, 0x4b, 0x17,
-    0xbe, 0xf1, 0x2c, 0x58, 0xee, 0x6a, 0x98, 0x32, 0xa4, 0xfb, 0x59, 0x22,
-    0xff, 0xd9, 0xdc, 0x3f, 0x3c, 0x37, 0xf2, 0xb1, 0x52, 0xbc, 0x07, 0x05,
-    0xce, 0xe1, 0xa4, 0xf0, 0xc8, 0x88, 0xc7, 0x4d, 0x3f, 0x68, 0x28, 0xd2,
-    0xf9, 0x0c, 0x4f, 0x42, 0x6f, 0xa8, 0x82, 0xfa, 0x22, 0x93, 0xac, 0x5f,
-    0xf4, 0x3e, 0xd0, 0x7d, 0x3f, 0x16, 0x2f, 0xfc, 0x3f, 0xce, 0xce, 0x73,
-    0x8b, 0x75, 0x8b, 0xff, 0xa2, 0x33, 0x8f, 0xef, 0xce, 0xbd, 0x2b, 0x17,
-    0xc0, 0x9f, 0xc4, 0xb1, 0x77, 0xe3, 0x31, 0x15, 0xbd, 0xa1, 0x01, 0x1e,
-    0xbb, 0x4c, 0x95, 0xa1, 0xcd, 0x7d, 0xe6, 0x6d, 0x96, 0x2d, 0x1c, 0xb1,
-    0x74, 0x38, 0xb1, 0x66, 0x81, 0xad, 0xec, 0x56, 0xfb, 0xce, 0x41, 0x24,
-    0x58, 0x4b, 0x16, 0x9c, 0x36, 0xbf, 0x23, 0xbb, 0x34, 0xb1, 0x7f, 0x8b,
-    0xdc, 0xef, 0x8d, 0x1e, 0xb1, 0x7f, 0x60, 0xe3, 0xf3, 0xb8, 0xf5, 0x8a,
-    0x58, 0xa6, 0x3f, 0x92, 0x38, 0xea, 0x35, 0xa8, 0x2b, 0x02, 0x78, 0xd2,
-    0x23, 0xca, 0x59, 0x40, 0x0b, 0x84, 0x4a, 0x28, 0x48, 0x5e, 0x0f, 0xe2,
-    0x58, 0xbf, 0x77, 0xc9, 0x2d, 0x96, 0x2f, 0xf8, 0x51, 0x77, 0xc9, 0x89,
-    0xfa, 0x2c, 0x56, 0x1f, 0x49, 0xca, 0xaf, 0x70, 0xc8, 0x96, 0x2f, 0xfa,
-    0x63, 0xf0, 0x85, 0x0c, 0xe2, 0xc5, 0xfe, 0x7e, 0x7d, 0x8a, 0x65, 0x62,
-    0xe1, 0x7d, 0x62, 0xff, 0x16, 0xfe, 0xf3, 0x43, 0x8b, 0x15, 0xb2, 0x2e,
-    0x74, 0x76, 0x73, 0x11, 0x0c, 0x5f, 0xff, 0x67, 0xfb, 0x87, 0x22, 0x83,
-    0x97, 0xa4, 0x0b, 0x17, 0xf4, 0x9c, 0xa7, 0xb8, 0x2c, 0x53, 0xa2, 0x03,
-    0xea, 0x57, 0x16, 0xeb, 0x17, 0xb5, 0xac, 0x58, 0xbd, 0xdc, 0x38, 0xb1,
-    0x67, 0xe1, 0xbc, 0x08, 0x76, 0xb0, 0xfe, 0xfe, 0xa9, 0x7f, 0xbd, 0xfc,
-    0x22, 0x6f, 0x2c, 0x5f, 0xe2, 0xcf, 0x6b, 0x42, 0xd9, 0x62, 0x80, 0x7c,
-    0xe4, 0x65, 0x73, 0x01, 0x62, 0xfb, 0x63, 0xb7, 0x96, 0x2f, 0xfd, 0x21,
-    0x7d, 0x87, 0xf9, 0x2d, 0x96, 0x2a, 0x4f, 0x93, 0x44, 0x97, 0xda, 0xc6,
-    0xea, 0x58, 0xbc, 0xf1, 0xd2, 0xb1, 0x7d, 0x82, 0xf7, 0x16, 0x29, 0x8f,
-    0x08, 0x87, 0xef, 0x48, 0x50, 0x58, 0xbf, 0xde, 0xe6, 0xb3, 0x93, 0xda,
-    0xc5, 0xb1, 0x62, 0xb0, 0xf1, 0x88, 0xd6, 0xf6, 0xa4, 0xeb, 0x17, 0xb1,
-    0xb7, 0x58, 0xad, 0xd1, 0x7c, 0xec, 0x9a, 0x20, 0x21, 0xdb, 0xd8, 0xe3,
-    0x58, 0xbf, 0xf4, 0x84, 0x1e, 0xdc, 0xc3, 0xcc, 0x7a, 0xc5, 0x6c, 0xb9,
-    0x04, 0x38, 0x5f, 0x6f, 0x09, 0xd7, 0x84, 0x44, 0x79, 0x0c, 0x4f, 0x7a,
-    0x21, 0x3b, 0x3f, 0xe1, 0xbd, 0xc3, 0xcf, 0x0e, 0x5d, 0xce, 0xd6, 0x2e,
-    0x0a, 0x25, 0x8b, 0x47, 0xac, 0x5f, 0xed, 0x49, 0x7b, 0xf9, 0x05, 0x8a,
-    0x81, 0xe4, 0x1a, 0x2b, 0x76, 0x71, 0x62, 0xee, 0xad, 0x2c, 0x54, 0xaf,
-    0x80, 0x40, 0x87, 0x27, 0x56, 0xde, 0x16, 0x87, 0x19, 0x66, 0x20, 0xc8,
-    0xfa, 0x85, 0xee, 0xf8, 0xd6, 0x2f, 0xfd, 0xb8, 0x98, 0x78, 0x43, 0xfb,
-    0xac, 0x5e, 0xe3, 0xec, 0xb1, 0x5a, 0x3d, 0xd0, 0x8f, 0xee, 0xee, 0x0b,
-    0x17, 0xec, 0xff, 0x70, 0xe2, 0xc5, 0xff, 0x09, 0xb8, 0x3f, 0x89, 0x8d,
-    0x58, 0xbf, 0x1e, 0x33, 0x7e, 0x81, 0x2c, 0x53, 0xa2, 0x5b, 0xe5, 0x41,
-    0x9d, 0xdc, 0x79, 0x58, 0xbe, 0x18, 0xa7, 0xeb, 0x17, 0xe6, 0x8f, 0x08,
-    0x5d, 0xac, 0x5e, 0x7e, 0x98, 0xb1, 0x7f, 0xdb, 0x93, 0x73, 0x82, 0x9d,
-    0xd6, 0x2b, 0x11, 0x83, 0xa1, 0x7f, 0x91, 0xf8, 0xb8, 0x43, 0xd7, 0xde,
-    0xd6, 0xa5, 0x62, 0xff, 0xf4, 0x9c, 0x32, 0x9f, 0xbe, 0xf2, 0x77, 0x58,
-    0xbb, 0xef, 0xd9, 0xf6, 0xc4, 0x47, 0x70, 0x7b, 0xac, 0x58, 0xd5, 0x8b,
-    0xfb, 0xec, 0x4e, 0x2e, 0xd6, 0x2f, 0xfc, 0xcf, 0xe8, 0x61, 0xa5, 0x80,
-    0x58, 0xbf, 0x77, 0x02, 0xc1, 0xac, 0x5f, 0xcf, 0xe8, 0xa1, 0x3d, 0xac,
-    0x54, 0x11, 0xe4, 0x68, 0xd6, 0xe2, 0x7f, 0x2e, 0x23, 0xee, 0x85, 0x37,
-    0x60, 0x4b, 0x14, 0xb1, 0x5f, 0x34, 0x9e, 0x18, 0xbf, 0xd0, 0x9e, 0xf0,
-    0xf3, 0xba, 0xc5, 0xfd, 0x81, 0x47, 0xc8, 0xe5, 0x62, 0xc7, 0x58, 0xad,
-    0x1e, 0x1b, 0x18, 0xdf, 0xcf, 0xcf, 0xbc, 0xba, 0xc5, 0xff, 0xf8, 0xb3,
-    0x37, 0xfc, 0xc7, 0x96, 0x7b, 0x1c, 0x0b, 0x14, 0x74, 0x41, 0x31, 0x65,
-    0xcf, 0x1c, 0xb1, 0x7e, 0xee, 0x78, 0xd1, 0xeb, 0x16, 0xc3, 0x9e, 0x31,
-    0x0d, 0x5f, 0xd3, 0xd8, 0x33, 0xdc, 0x58, 0xbe, 0x8a, 0x7f, 0x2b, 0x15,
-    0xf3, 0xd2, 0x22, 0xfb, 0xfb, 0x46, 0xfb, 0xe2, 0x82, 0xc5, 0x2c, 0x5d,
-    0x83, 0x58, 0xb3, 0x76, 0x68, 0xfa, 0x06, 0x54, 0x9f, 0xe8, 0x15, 0x2f,
-    0xef, 0x73, 0xe4, 0xc0, 0x58, 0xbd, 0xdb, 0x47, 0xac, 0x5f, 0xe6, 0xdb,
-    0xef, 0xd3, 0x22, 0x58, 0xaf, 0x9e, 0xc0, 0x44, 0x35, 0x28, 0xa9, 0xc8,
-    0x43, 0x5e, 0xd6, 0x79, 0x62, 0xe9, 0x25, 0x8b, 0x03, 0x0d, 0x9f, 0x07,
-    0x6f, 0xef, 0xb3, 0xf1, 0xfa, 0x2c, 0x5d, 0xc3, 0xac, 0x56, 0x8f, 0x1c,
-    0x45, 0xf7, 0x1a, 0xeb, 0x15, 0x28, 0xa7, 0xc6, 0xd6, 0x22, 0xbf, 0xf6,
-    0x11, 0x37, 0x8c, 0x84, 0x9d, 0x62, 0xdb, 0xac, 0x57, 0xcf, 0x44, 0x47,
-    0xd7, 0xde, 0x13, 0x06, 0xb1, 0x76, 0x79, 0x62, 0x98, 0xdd, 0xc7, 0x12,
-    0x5f, 0xff, 0xf0, 0x8a, 0x18, 0x3f, 0xcf, 0x4f, 0x16, 0x4f, 0xdf, 0x09,
-    0x62, 0xa3, 0x46, 0x53, 0xa4, 0xba, 0xec, 0x46, 0x38, 0x57, 0xe4, 0x3c,
-    0x77, 0x85, 0xb3, 0xc6, 0x43, 0x1e, 0xfd, 0x11, 0x0e, 0x9e, 0x0f, 0x0a,
-    0x3f, 0xb4, 0x33, 0xc0, 0x21, 0x3c, 0x50, 0xca, 0xe4, 0x60, 0x1e, 0x7e,
-    0x12, 0xe8, 0x64, 0x77, 0xf0, 0x53, 0xad, 0x34, 0x4b, 0x17, 0xfc, 0x39,
-    0xdc, 0x30, 0x02, 0x7b, 0x58, 0xbd, 0x01, 0x76, 0xb1, 0x7b, 0x8d, 0xda,
-    0xc5, 0xf4, 0x30, 0xa0, 0xb1, 0x7b, 0x8c, 0x4b, 0x17, 0xfc, 0xda, 0xc3,
-    0xbc, 0x74, 0x9d, 0x62, 0xb7, 0x47, 0x9f, 0x67, 0xae, 0x3f, 0x10, 0xf7,
-    0x08, 0x84, 0x39, 0x7c, 0xdc, 0x8f, 0x0d, 0x62, 0xfd, 0xc7, 0x29, 0xed,
-    0x62, 0xfd, 0xd8, 0xc6, 0xfc, 0x58, 0xbd, 0xac, 0xe2, 0xc5, 0xf1, 0xc3,
-    0x83, 0xac, 0x54, 0x9f, 0x5e, 0x15, 0x38, 0xed, 0xf7, 0xa7, 0xb8, 0x2c,
-    0x5f, 0xce, 0x08, 0xe2, 0x70, 0x2c, 0x5d, 0x80, 0x58, 0xad, 0x8f, 0xaf,
-    0x44, 0x84, 0x61, 0x78, 0x9e, 0x56, 0x2f, 0xdc, 0x8e, 0xcd, 0x1a, 0xb1,
-    0x69, 0xec, 0xf2, 0x3c, 0x37, 0x78, 0x51, 0x3a, 0xc5, 0xff, 0x99, 0xfd,
-    0x9a, 0x01, 0xda, 0x0b, 0x17, 0xf6, 0x7b, 0xec, 0x37, 0x58, 0xad, 0x22,
-    0x27, 0xe3, 0xd1, 0xc7, 0xd7, 0x88, 0xdf, 0xac, 0x5e, 0x1f, 0xdd, 0x62,
-    0x9c, 0xfb, 0x98, 0xcc, 0x43, 0xd7, 0xd3, 0xad, 0x4a, 0xc5, 0xfc, 0x4c,
-    0x16, 0x10, 0x16, 0x2b, 0x63, 0xcf, 0x88, 0x8a, 0xf1, 0x4e, 0xcb, 0x14,
-    0xc7, 0x82, 0x44, 0x97, 0xf6, 0x7b, 0x0d, 0x9e, 0x2c, 0x5e, 0xf6, 0x06,
-    0xb1, 0x52, 0xbb, 0x19, 0x91, 0x91, 0x9a, 0xb3, 0xd9, 0x3f, 0xe1, 0x26,
-    0xd0, 0x97, 0x27, 0x7e, 0x46, 0x3e, 0x28, 0x5e, 0xc7, 0x10, 0x75, 0x17,
-    0x58, 0x4b, 0x17, 0xdd, 0x4d, 0x3a, 0x58, 0xbf, 0x8a, 0x61, 0x3d, 0x25,
-    0x62, 0xc0, 0x58, 0xbf, 0x1a, 0xc4, 0x28, 0x96, 0x2a, 0x4d, 0xe0, 0x84,
-    0xaf, 0x84, 0xfd, 0x47, 0x58, 0xbf, 0xba, 0x69, 0xa5, 0xe3, 0x96, 0x2f,
-    0xe8, 0x16, 0x7f, 0x69, 0x58, 0xb6, 0xcb, 0x15, 0xd9, 0xe0, 0xb9, 0x75,
-    0x2c, 0x5f, 0x6e, 0xe2, 0xfa, 0xc5, 0x61, 0xb0, 0x10, 0x65, 0x62, 0x79,
-    0x9d, 0x89, 0x39, 0x2c, 0x4d, 0x5a, 0x20, 0x39, 0x33, 0x39, 0x92, 0x95,
-    0xf7, 0x7b, 0x0c, 0x4b, 0x16, 0xdd, 0x62, 0xe8, 0xed, 0x96, 0x2f, 0x74,
-    0x7d, 0x2c, 0x50, 0xcd, 0xdf, 0xc7, 0x2f, 0x38, 0xb4, 0xb1, 0x71, 0x41,
-    0x62, 0xa5, 0x19, 0x23, 0x26, 0xc4, 0xee, 0x10, 0xf4, 0x1d, 0xbd, 0x2d,
-    0xa5, 0x8b, 0x32, 0xc5, 0x0c, 0xd6, 0x9a, 0x39, 0x7f, 0x43, 0xef, 0xd3,
-    0x06, 0xb1, 0x5a, 0x3d, 0x22, 0x22, 0xb4, 0xac, 0x58, 0x4b, 0x16, 0x75,
-    0x8b, 0x46, 0xb5, 0x8a, 0x63, 0xed, 0x22, 0x1f, 0x08, 0x84, 0x24, 0x18,
-    0x8d, 0xf7, 0x7d, 0x5a, 0x02, 0xc5, 0xec, 0xd4, 0xac, 0x5f, 0x44, 0x14,
-    0x9a, 0xb1, 0x7c, 0x68, 0x71, 0x71, 0x62, 0xdf, 0x58, 0xb4, 0xac, 0x5b,
-    0xce, 0x68, 0xfa, 0x84, 0xab, 0x47, 0xe6, 0x49, 0x56, 0x8e, 0x58, 0xbb,
-    0x37, 0x58, 0xa6, 0x35, 0xbe, 0x15, 0xbd, 0x1d, 0x27, 0x58, 0xad, 0x8f,
-    0x00, 0xd2, 0x0b, 0xfc, 0xc6, 0x87, 0xff, 0xcc, 0x16, 0x2a, 0x36, 0x4f,
-    0x16, 0x4a, 0x30, 0x71, 0xe1, 0x32, 0xd0, 0x8e, 0x8e, 0x24, 0xbf, 0xf7,
-    0xf0, 0x63, 0x7e, 0xf3, 0xbf, 0x2c, 0x5f, 0xc6, 0x0c, 0x36, 0xd6, 0x96,
-    0x2d, 0x2b, 0x15, 0xb2, 0x20, 0xc6, 0x83, 0x11, 0x8d, 0xfe, 0x1e, 0x7b,
-    0xf2, 0x5b, 0xac, 0x5e, 0x97, 0x8e, 0x58, 0xbe, 0xf7, 0x03, 0x3a, 0xc5,
-    0x31, 0xe2, 0x08, 0x7e, 0xff, 0xe3, 0x73, 0xbe, 0x7f, 0x3a, 0x67, 0xb8,
-    0xb1, 0x68, 0x2c, 0x5f, 0xf9, 0xe4, 0xe7, 0x97, 0xe6, 0x06, 0xb1, 0x7f,
-    0xe2, 0x9e, 0xf9, 0x27, 0x6e, 0xfc, 0xb1, 0x46, 0xa3, 0x66, 0x3d, 0x27,
-    0x82, 0x5d, 0x0f, 0xaf, 0xff, 0xf8, 0x12, 0x5b, 0xb7, 0xc9, 0x81, 0xa9,
-    0xdf, 0x35, 0xa7, 0x58, 0xbf, 0x37, 0x24, 0xa2, 0x58, 0xbd, 0x85, 0xba,
-    0xc5, 0xb9, 0xd0, 0xf1, 0x43, 0x28, 0xbf, 0x8d, 0xf3, 0xfb, 0x34, 0xb1,
-    0x68, 0x96, 0x2f, 0xf8, 0x66, 0x67, 0x27, 0x34, 0x05, 0x8b, 0xdf, 0x0f,
-    0x8b, 0x15, 0x27, 0xd9, 0x82, 0x6c, 0x75, 0x7d, 0xce, 0x39, 0xd6, 0x2f,
-    0x73, 0xee, 0xb1, 0x7f, 0x0f, 0xc4, 0xdd, 0xf1, 0x62, 0x96, 0x29, 0xcd,
-    0xdf, 0x51, 0x7d, 0x2c, 0x5f, 0xdc, 0x7e, 0xf3, 0xbf, 0x2c, 0x57, 0x66,
-    0xf3, 0xc1, 0x97, 0x1c, 0x6b, 0x17, 0x6d, 0x2b, 0x15, 0x28, 0xb1, 0x65,
-    0xff, 0x11, 0x08, 0x62, 0xe7, 0x82, 0xc5, 0xf8, 0x26, 0xd3, 0x76, 0xb1,
-    0x7a, 0x73, 0xb5, 0x8a, 0x93, 0xc7, 0x22, 0xab, 0x75, 0x2c, 0x5f, 0x67,
-    0x1c, 0x0b, 0x14, 0xb1, 0x68, 0x96, 0x22, 0x26, 0x54, 0xae, 0xe7, 0x6c,
-    0x64, 0x37, 0x8c, 0x87, 0xd7, 0x68, 0x71, 0x42, 0xaf, 0x45, 0x7f, 0x84,
-    0xdb, 0x16, 0x00, 0x8c, 0xa3, 0x09, 0xe1, 0xdf, 0x97, 0x82, 0x20, 0x8e,
-    0x15, 0x0c, 0xba, 0xff, 0x9c, 0x64, 0xde, 0x83, 0xf4, 0x58, 0xbe, 0x87,
-    0xf0, 0xeb, 0x17, 0xfe, 0x6d, 0xfe, 0xc3, 0xfc, 0x96, 0xcb, 0x15, 0xd9,
-    0xf1, 0x9c, 0x8e, 0xff, 0xa0, 0xfe, 0x04, 0xfc, 0x3e, 0x2c, 0x5f, 0xa1,
-    0xf9, 0x23, 0x56, 0x2e, 0x10, 0x16, 0x2a, 0x53, 0x3c, 0xc8, 0x4e, 0xc4,
-    0x46, 0xc7, 0x7d, 0x45, 0x35, 0xd6, 0x3f, 0x90, 0x4f, 0x5a, 0xf5, 0x1a,
-    0x42, 0x5e, 0x36, 0x86, 0xdf, 0x5d, 0xc3, 0x1b, 0xae, 0xa8, 0x53, 0x2d,
-    0xaf, 0x68, 0xda, 0xa1, 0x28, 0xa0, 0x73, 0xa9, 0x79, 0x49, 0x83, 0x36,
-    0x3e, 0x4d, 0xe5, 0xf8, 0xf7, 0x2a, 0xa5, 0xe5, 0xf8, 0xc7, 0xc6, 0x37,
-    0x14, 0xaf, 0xcd, 0x4e, 0x3f, 0x1e, 0x5e, 0xef, 0xe9, 0x6f, 0x2d, 0x3e,
-    0x98, 0x09, 0x77, 0x3d, 0x7b, 0x89, 0x4f, 0xc4, 0x72, 0x95, 0xeb, 0xe9,
-    0xec, 0x11, 0x4a, 0x86, 0xe9, 0x19, 0xc8, 0x51, 0x9b, 0x47, 0x4a, 0x0e,
-    0x0e, 0x7a, 0xdf, 0xaa, 0x51, 0x8d, 0xfe, 0xeb, 0xbe, 0xb5, 0xbd, 0xf9,
-    0xf2, 0xc5, 0xdb, 0xca, 0xc5, 0xf3, 0x6f, 0x3a, 0x58, 0xa0, 0x8d, 0xdf,
-    0x50, 0xc5, 0xfa, 0x7b, 0xc7, 0xfa, 0xc5, 0xc1, 0x62, 0xc5, 0xfc, 0x09,
-    0xff, 0x70, 0xe2, 0xc5, 0xfe, 0x7e, 0xc0, 0xdf, 0xc8, 0xe5, 0x8b, 0xff,
-    0x3c, 0xfb, 0xec, 0x6e, 0x10, 0x16, 0x2f, 0xff, 0x36, 0x8c, 0x6f, 0x19,
-    0xee, 0xf7, 0x72, 0x58, 0xad, 0xd3, 0x33, 0x72, 0x88, 0x86, 0x34, 0x61,
-    0xf3, 0x7e, 0x87, 0xd7, 0xee, 0x45, 0x9a, 0x65, 0x8b, 0xe6, 0x29, 0x82,
-    0xc5, 0xf4, 0xee, 0xcc, 0xb1, 0x7b, 0x59, 0x05, 0x8b, 0x9c, 0xeb, 0x14,
-    0xe8, 0xa0, 0xd1, 0x49, 0xc8, 0x7c, 0x45, 0xd4, 0x3b, 0x7e, 0xf4, 0xb9,
-    0xf8, 0xb1, 0x7f, 0xf4, 0x8e, 0x32, 0x28, 0x39, 0x7a, 0x40, 0xb1, 0x58,
-    0x7e, 0x04, 0x51, 0x7a, 0x40, 0xeb, 0x17, 0xf4, 0xc3, 0x35, 0x9c, 0x58,
-    0xbf, 0x7f, 0x3d, 0x3f, 0x58, 0xbf, 0x17, 0x88, 0x5b, 0x2c, 0x50, 0xcf,
-    0xf9, 0x8b, 0x44, 0x51, 0x7f, 0xfb, 0x5a, 0x14, 0x35, 0x93, 0xdc, 0x1c,
-    0xeb, 0x17, 0xc6, 0xf9, 0xf4, 0xb1, 0x74, 0x4e, 0xb1, 0x58, 0x88, 0x87,
-    0x4c, 0x62, 0x4b, 0xdc, 0x0f, 0x8b, 0x17, 0xff, 0xec, 0x9e, 0xe1, 0xcf,
-    0xe7, 0xb8, 0x4d, 0xdf, 0x96, 0x2f, 0xe3, 0xeb, 0x59, 0xee, 0x2c, 0x5f,
-    0xf0, 0xb6, 0x8c, 0xfb, 0x1d, 0xf8, 0xb1, 0x68, 0x49, 0xf6, 0xf8, 0xbe,
-    0xf6, 0xed, 0xd1, 0x62, 0xff, 0x8f, 0x3e, 0xe6, 0xb4, 0xe1, 0x2c, 0x5f,
-    0xfb, 0xe2, 0xef, 0x92, 0x76, 0xef, 0xcb, 0x16, 0xc3, 0x53, 0x88, 0xee,
-    0x18, 0x9a, 0x27, 0x01, 0x07, 0x8e, 0xef, 0xfd, 0xe9, 0x3f, 0x25, 0xf6,
-    0x6f, 0x2c, 0x5f, 0xcd, 0x1e, 0xd9, 0xdf, 0x96, 0x2b, 0xb3, 0xf0, 0xf9,
-    0xfd, 0xfd, 0x83, 0x7e, 0xc9, 0x96, 0x2f, 0x9c, 0xd9, 0xea, 0x58, 0xa6,
-    0x3d, 0x32, 0x2d, 0xac, 0x44, 0xb0, 0x9d, 0xaf, 0xf8, 0x9c, 0x1d, 0xc3,
-    0x35, 0xb2, 0xc5, 0x8d, 0x58, 0xbf, 0x67, 0x8a, 0x76, 0x58, 0xa9, 0x3f,
-    0x61, 0x9d, 0xe8, 0x4e, 0xff, 0xfc, 0xcf, 0xa9, 0xe7, 0xe5, 0xcb, 0x35,
-    0x3d, 0x16, 0x2f, 0xa7, 0xd0, 0x65, 0x8b, 0xed, 0x75, 0x49, 0x2c, 0x58,
-    0x96, 0x2a, 0x4d, 0xb0, 0x44, 0xb7, 0xfd, 0xce, 0x8d, 0x13, 0x8c, 0x5a,
-    0x58, 0xbf, 0xff, 0xe9, 0x01, 0xda, 0x05, 0x9d, 0xf9, 0xbf, 0x3e, 0xe0,
-    0xa3, 0xd6, 0x2e, 0x29, 0x58, 0xa8, 0x91, 0x7b, 0xf3, 0xdf, 0x35, 0x5d,
-    0xf8, 0xc8, 0xd6, 0xca, 0xac, 0x97, 0xbc, 0x8d, 0x61, 0xe1, 0xf7, 0x14,
-    0x2f, 0x34, 0x40, 0x78, 0x4d, 0x7e, 0x16, 0xcc, 0x5a, 0x51, 0xd3, 0xf2,
-    0x35, 0xdf, 0x42, 0x60, 0x45, 0xdd, 0x15, 0x02, 0x58, 0x0e, 0x1b, 0xd5,
-    0x18, 0xce, 0x78, 0x9a, 0x6a, 0xb5, 0xfd, 0x9a, 0xdd, 0x9b, 0x75, 0x49,
-    0x9a, 0x5f, 0xff, 0x9b, 0x4d, 0x08, 0xcd, 0xcb, 0x36, 0xd7, 0x72, 0x35,
-    0x8b, 0xb0, 0xeb, 0x17, 0xe2, 0x9f, 0x40, 0x4b, 0x17, 0xde, 0xd4, 0xf1,
-    0x62, 0xb7, 0x3e, 0x2f, 0x8b, 0x91, 0x45, 0xfe, 0xce, 0x72, 0x40, 0x1e,
-    0xcb, 0x17, 0xff, 0xd0, 0x9e, 0x45, 0x09, 0x3f, 0x70, 0xe6, 0x6e, 0xb1,
-    0x7e, 0x7d, 0x05, 0x9f, 0x58, 0xbe, 0x21, 0x34, 0x4b, 0x17, 0xdf, 0x76,
-    0x25, 0x8a, 0xed, 0x18, 0x3f, 0x54, 0x01, 0x4f, 0x88, 0xef, 0xff, 0xbe,
-    0xfc, 0x7f, 0x16, 0x74, 0x1c, 0xc5, 0xf5, 0x8b, 0xff, 0xee, 0x4f, 0x66,
-    0x07, 0xe7, 0xf7, 0xf0, 0x6e, 0xb1, 0x7f, 0x81, 0x3c, 0x76, 0xec, 0x25,
-    0x8b, 0xf6, 0x1e, 0x47, 0x2b, 0x17, 0xed, 0x3e, 0xc2, 0x8f, 0x58, 0xbd,
-    0xf7, 0x1a, 0xc5, 0x85, 0x87, 0x95, 0x11, 0x6d, 0xe8, 0x98, 0x6b, 0x17,
-    0xfe, 0xc6, 0x8b, 0xbf, 0x18, 0x13, 0xca, 0xc5, 0x49, 0xf0, 0x68, 0x7a,
-    0xf3, 0x97, 0x96, 0x2f, 0xf6, 0x61, 0xa3, 0x27, 0xd9, 0x62, 0xff, 0xe3,
-    0x8b, 0xff, 0x63, 0x73, 0x59, 0xe5, 0x8a, 0x19, 0xfd, 0x1c, 0xd2, 0xff,
-    0xe9, 0xdf, 0x99, 0x31, 0x66, 0xd8, 0x4b, 0x17, 0xfb, 0x39, 0x3a, 0xd3,
-    0xf4, 0x58, 0xad, 0x8f, 0xeb, 0xe8, 0xb5, 0x88, 0xbf, 0x68, 0x4e, 0x5b,
-    0xcb, 0x17, 0xf7, 0x47, 0xd1, 0x66, 0x96, 0x2c, 0xd8, 0x78, 0x24, 0x25,
-    0x7f, 0xee, 0x3e, 0xb3, 0xd2, 0x4e, 0x05, 0x8b, 0xff, 0x81, 0x25, 0xbb,
-    0x41, 0xe3, 0xb3, 0x4b, 0x17, 0xfc, 0xf0, 0x7f, 0x88, 0xe7, 0x75, 0x8b,
-    0xf9, 0x88, 0x1e, 0x98, 0x96, 0x2b, 0xb4, 0x57, 0x79, 0x1e, 0x38, 0xe6,
-    0xfb, 0x5f, 0x68, 0xc9, 0x5e, 0x58, 0x19, 0x7e, 0x43, 0xdf, 0x73, 0xee,
-    0xd4, 0x9d, 0x4e, 0x23, 0x53, 0xb8, 0xfe, 0x11, 0x0c, 0x42, 0x51, 0xaa,
-    0xf1, 0x9f, 0xc4, 0xa1, 0xc3, 0xae, 0xe1, 0x06, 0xb1, 0x7b, 0xed, 0xb2,
-    0xc5, 0x44, 0x6d, 0xfc, 0x33, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, 0x4b,
-    0x17, 0xfb, 0xdf, 0xc7, 0xd8, 0xf2, 0xb1, 0x7d, 0x9d, 0x1b, 0x4b, 0x17,
-    0xe2, 0x9c, 0xfb, 0x2c, 0x50, 0x0f, 0x2b, 0xc4, 0x97, 0xfe, 0x9d, 0x03,
-    0xdc, 0xfe, 0x38, 0xd6, 0x2c, 0xcb, 0x17, 0x3f, 0xd6, 0x2a, 0x37, 0x35,
-    0x10, 0x11, 0xb6, 0xcb, 0x17, 0x13, 0x2c, 0x5e, 0x84, 0xf6, 0xb1, 0x6c,
-    0x93, 0xc7, 0x18, 0x9c, 0x42, 0xd7, 0xce, 0x4d, 0xb2, 0xc5, 0xff, 0x7d,
-    0xd8, 0x18, 0x2d, 0x6c, 0xb1, 0x7f, 0x6c, 0x1c, 0x73, 0x10, 0x16, 0x2f,
-    0xfc, 0xc4, 0x0c, 0xf4, 0x93, 0x81, 0x62, 0xa4, 0xfb, 0xe3, 0x8c, 0xea,
-    0x55, 0x7a, 0x8c, 0x8b, 0x0f, 0x3b, 0x7e, 0xf9, 0x13, 0x33, 0x93, 0x6f,
-    0x0d, 0x3c, 0x44, 0x1c, 0x2a, 0x6f, 0x88, 0x61, 0xf6, 0xb1, 0x6f, 0xac,
-    0x5f, 0x4f, 0x3e, 0xeb, 0x16, 0x95, 0x8a, 0xf9, 0xb3, 0xe8, 0x45, 0x7f,
-    0xe7, 0xf4, 0x9c, 0x98, 0xdf, 0xba, 0xc5, 0xd3, 0xf5, 0x8b, 0xfc, 0xde,
-    0x84, 0x9b, 0x84, 0xb1, 0x7f, 0x16, 0x74, 0xfb, 0x41, 0x62, 0xf3, 0x6b,
-    0x8b, 0x16, 0x8c, 0x94, 0xd8, 0x76, 0x25, 0xc4, 0x58, 0x88, 0xfe, 0x7c,
-    0x42, 0xfe, 0x33, 0x08, 0xbe, 0xa3, 0x15, 0x36, 0x75, 0x47, 0xe3, 0x7b,
-    0x62, 0x12, 0xc5, 0xf9, 0xa0, 0xff, 0x12, 0xc5, 0x49, 0xe3, 0x10, 0xf5,
-    0xff, 0xfe, 0xcf, 0x3f, 0x3d, 0xfc, 0x38, 0x1b, 0x59, 0xd3, 0x06, 0xb1,
-    0x7f, 0x84, 0xdb, 0x6b, 0x0f, 0x19, 0xf4, 0x41, 0x70, 0x82, 0xa3, 0x19,
-    0xe4, 0x3b, 0x9e, 0x3c, 0xf8, 0xab, 0x4f, 0x44, 0x14, 0x3e, 0x6e, 0xeb,
-    0x3b, 0x58, 0xbf, 0xa3, 0x68, 0xd1, 0x88, 0x51, 0x2c, 0x5e, 0x38, 0x7a,
-    0x58, 0xb1, 0xd6, 0x2f, 0x1d, 0x8e, 0xb1, 0x4e, 0x6b, 0xd8, 0x4a, 0xc7,
-    0x58, 0xbf, 0x84, 0x6c, 0x84, 0x23, 0x56, 0x29, 0xd1, 0x63, 0x12, 0x73,
-    0x0f, 0x84, 0x25, 0x73, 0x84, 0xb1, 0x70, 0x67, 0x58, 0xbe, 0xcf, 0x72,
-    0x3d, 0x62, 0xd3, 0x03, 0x7e, 0x10, 0xcd, 0x7c, 0xff, 0x89, 0x5e, 0xe9,
-    0xe2, 0xc5, 0x9d, 0x62, 0xfd, 0x3e, 0x8e, 0x73, 0xac, 0x51, 0xa7, 0xa6,
-    0x71, 0x70, 0x08, 0xdd, 0xc3, 0x56, 0x2f, 0xb8, 0x52, 0x12, 0xc5, 0xed,
-    0xf3, 0xeb, 0x17, 0x72, 0x56, 0x2f, 0xc2, 0xe7, 0xa7, 0x8b, 0x15, 0x03,
-    0xc0, 0x88, 0x5e, 0xe1, 0x71, 0x62, 0xfb, 0xb7, 0x17, 0x6b, 0x15, 0x28,
-    0xbe, 0x75, 0xe8, 0x88, 0xc4, 0x31, 0x7f, 0x14, 0x9f, 0x8f, 0xb2, 0xc5,
-    0xe2, 0xd0, 0x96, 0x2a, 0x07, 0x96, 0xe5, 0xd6, 0xd2, 0xc5, 0xe2, 0x91,
-    0xac, 0x50, 0x46, 0xb8, 0x31, 0x2b, 0xf0, 0x9f, 0xae, 0x75, 0xbd, 0x62,
-    0xc5, 0xe7, 0xc3, 0xac, 0x5e, 0x17, 0x7c, 0x58, 0xbf, 0x07, 0xe2, 0x90,
-    0x2c, 0x54, 0x47, 0xc9, 0xa1, 0xce, 0x83, 0xf7, 0xed, 0x85, 0x01, 0x4a,
-    0xc5, 0x49, 0xee, 0x39, 0x95, 0xf3, 0x9d, 0xfa, 0x96, 0x2e, 0xc3, 0x56,
-    0x2e, 0x10, 0x6b, 0x17, 0x8b, 0x38, 0xb1, 0x52, 0x7e, 0x43, 0x25, 0x88,
-    0x60, 0x31, 0x9b, 0xee, 0x73, 0x34, 0xb1, 0x7e, 0x6d, 0xe4, 0x86, 0xb1,
-    0x6d, 0xd6, 0x29, 0xcf, 0x7b, 0xe4, 0x62, 0x28, 0xbf, 0xbb, 0x84, 0x59,
-    0xfe, 0x2c, 0x5d, 0x21, 0x2c, 0x54, 0x9e, 0x4b, 0x98, 0xdf, 0x7d, 0xfb,
-    0xe2, 0xc5, 0xd3, 0xda, 0xc5, 0xd3, 0xf5, 0x8b, 0xf0, 0x8a, 0x7b, 0x82,
-    0xc5, 0xf7, 0x9d, 0x83, 0x58, 0xb4, 0x72, 0xc5, 0x8d, 0x58, 0xa7, 0x35,
-    0x02, 0x15, 0xa8, 0xf4, 0x73, 0xc4, 0x48, 0x71, 0x82, 0x17, 0xe1, 0x48,
-    0x69, 0x77, 0xcf, 0x1c, 0xe0, 0x58, 0xb8, 0x29, 0x58, 0xbf, 0x9b, 0x6c,
-    0xd3, 0x9a, 0xb1, 0x7b, 0xcd, 0xf5, 0x8b, 0x9a, 0x0b, 0x14, 0xe6, 0xd0,
-    0xe3, 0xb6, 0x35, 0x62, 0x8d, 0x36, 0x7a, 0x20, 0xb8, 0xf1, 0x9d, 0x63,
-    0x25, 0x3b, 0xae, 0x0f, 0x4c, 0x3a, 0x87, 0x0b, 0xbc, 0x74, 0x34, 0xc3,
-    0xb1, 0x97, 0x87, 0x0c, 0x50, 0x87, 0xd2, 0x79, 0xc8, 0xff, 0x0f, 0x96,
-    0x84, 0x97, 0x21, 0x37, 0xe7, 0x71, 0x46, 0x0f, 0xd1, 0x6c, 0x22, 0x58,
-    0xe1, 0x80, 0xe1, 0x2d, 0x76, 0x3a, 0xc5, 0x86, 0xb1, 0x63, 0xac, 0x56,
-    0x1a, 0x46, 0x12, 0xb1, 0x2c, 0x5f, 0xf4, 0x23, 0x33, 0x5b, 0xb3, 0x6e,
-    0xa9, 0x20, 0x0a, 0xc3, 0xdc, 0x61, 0x1b, 0xfc, 0xe7, 0x98, 0xff, 0xe6,
-    0xcb, 0x17, 0xed, 0xe4, 0x02, 0xea, 0x58, 0xbc, 0xda, 0x35, 0x62, 0xff,
-    0xe8, 0xe6, 0x20, 0x67, 0xa4, 0x9c, 0x0b, 0x16, 0x8c, 0x82, 0x73, 0x98,
-    0x74, 0x77, 0xbf, 0x90, 0x31, 0xb8, 0x45, 0xa1, 0x8f, 0x5b, 0xa2, 0xc5,
-    0xf6, 0x78, 0x3d, 0x96, 0x2f, 0xde, 0xe4, 0x8e, 0x56, 0x2b, 0x0f, 0x84,
-    0xe2, 0x84, 0x4b, 0x74, 0x0e, 0xb1, 0x78, 0xb0, 0x0b, 0x17, 0xf3, 0xf2,
-    0x22, 0x91, 0xac, 0x52, 0xc5, 0xdd, 0xc1, 0x62, 0xbb, 0x34, 0xba, 0x0c,
-    0xa1, 0x9f, 0xab, 0x29, 0xde, 0x92, 0xdd, 0x62, 0xf7, 0x9b, 0x4b, 0x17,
-    0xc2, 0x3e, 0x7d, 0x62, 0xd3, 0xd9, 0xe0, 0x7c, 0x76, 0xe8, 0x0d, 0x62,
-    0xff, 0xd3, 0x85, 0xee, 0x4f, 0xa4, 0x6b, 0x17, 0xe9, 0x2c, 0xef, 0xcb,
-    0x17, 0xc3, 0xfc, 0xec, 0xb1, 0x7a, 0x0e, 0x05, 0x8a, 0x73, 0xc1, 0xe1,
-    0x25, 0x1d, 0x11, 0x5e, 0x69, 0xb7, 0x45, 0x8b, 0x79, 0x62, 0xa0, 0x69,
-    0xb7, 0x14, 0xbf, 0x9f, 0xf2, 0x53, 0xe5, 0x8b, 0x47, 0x2c, 0x58, 0x0b,
-    0x15, 0x26, 0x9c, 0x42, 0xb7, 0x86, 0xce, 0xb1, 0x52, 0xad, 0x56, 0x05,
-    0xa3, 0x18, 0xc8, 0x48, 0x9a, 0x42, 0xeb, 0xba, 0x28, 0x38, 0xc3, 0x43,
-    0x1c, 0x92, 0x78, 0x45, 0xe5, 0x31, 0x10, 0x5e, 0x8a, 0x60, 0xb1, 0x73,
-    0x1a, 0xb1, 0x7f, 0x9f, 0xec, 0x5e, 0xcd, 0xd6, 0x2d, 0xe5, 0x8a, 0x81,
-    0xe2, 0xe8, 0xce, 0xd1, 0x98, 0x89, 0xd2, 0x1e, 0xe2, 0xed, 0xfe, 0xeb,
-    0x3e, 0xdb, 0x14, 0xc1, 0x62, 0xff, 0x7f, 0x3b, 0x04, 0x96, 0xeb, 0x17,
-    0xfd, 0x3e, 0xfe, 0x1f, 0x35, 0x8b, 0x17, 0xf3, 0xff, 0x3a, 0x7d, 0xd6,
-    0x2f, 0xa2, 0xcc, 0xdd, 0x62, 0xfd, 0xe3, 0x5b, 0x91, 0x9d, 0x6a, 0x3e,
-    0x70, 0xe7, 0x46, 0xac, 0x70, 0x19, 0x7d, 0x41, 0x39, 0xf0, 0xa3, 0x30,
-    0xbf, 0xa3, 0x57, 0x5b, 0x1a, 0x81, 0xcc, 0x58, 0xbf, 0xf4, 0xe7, 0x70,
-    0xce, 0xfd, 0xf6, 0x58, 0xbf, 0x9b, 0xdd, 0xc3, 0x3c, 0xb1, 0x7b, 0xdc,
-    0x8c, 0xeb, 0xb4, 0x57, 0x81, 0x00, 0x34, 0x0b, 0xff, 0x73, 0xef, 0x19,
-    0x3d, 0x3a, 0x0a, 0x0b, 0x15, 0x18, 0xb8, 0xc9, 0x32, 0xbd, 0x9a, 0x1b,
-    0x42, 0x4d, 0xbe, 0xf9, 0x37, 0x96, 0x2e, 0xe7, 0x96, 0x2d, 0x2b, 0x16,
-    0xfa, 0xc5, 0x1c, 0xd1, 0x88, 0x46, 0xfb, 0xad, 0xe9, 0xdf, 0x16, 0x2f,
-    0x0f, 0x0e, 0xb1, 0x7f, 0xf7, 0x9c, 0x5c, 0x0c, 0xfa, 0xd3, 0x9a, 0xb1,
-    0x7e, 0x71, 0x88, 0xb1, 0x62, 0xff, 0xfa, 0x7e, 0xe3, 0xfc, 0xc3, 0x8d,
-    0xf7, 0xe2, 0xc5, 0x40, 0xfd, 0xba, 0x13, 0xdf, 0xfd, 0x3e, 0x63, 0xcf,
-    0x98, 0x36, 0xf2, 0xc5, 0xff, 0xc7, 0x6d, 0x6d, 0xfc, 0x89, 0x88, 0xd5,
-    0x8b, 0xfe, 0x9f, 0xce, 0xda, 0x9c, 0x1a, 0xc5, 0xfd, 0xc9, 0x39, 0x4c,
-    0x4b, 0x16, 0xfa, 0xc5, 0xe0, 0xca, 0x25, 0x8b, 0x7b, 0x0d, 0x88, 0x04,
-    0xae, 0xcd, 0x96, 0x2b, 0x0d, 0xf1, 0x13, 0x5f, 0x69, 0xb8, 0xeb, 0x17,
-    0xff, 0xce, 0x60, 0x00, 0x29, 0xe6, 0x8c, 0x33, 0xf1, 0xcb, 0x17, 0xce,
-    0x79, 0x89, 0x62, 0xb6, 0x56, 0x39, 0x01, 0xd7, 0x85, 0xf6, 0x89, 0x0e,
-    0x89, 0xf4, 0x70, 0x1c, 0x94, 0x27, 0x7c, 0x3e, 0x22, 0x28, 0xe5, 0x8b,
-    0xed, 0x41, 0xfa, 0x2c, 0x5f, 0xfd, 0xa8, 0x67, 0x1c, 0x5d, 0x79, 0x49,
-    0xd6, 0x2a, 0x4f, 0xb8, 0x44, 0xb6, 0xe2, 0xc5, 0xfb, 0x93, 0xf7, 0xe8,
-    0xb1, 0x7f, 0x7d, 0x9b, 0xf3, 0x05, 0x8b, 0xce, 0x40, 0x58, 0xb6, 0xeb,
-    0x14, 0x33, 0x5f, 0xc1, 0xca, 0x31, 0x17, 0x38, 0x24, 0xe5, 0x4c, 0xb9,
-    0x7f, 0xfd, 0xad, 0x87, 0xf7, 0xd7, 0x27, 0x51, 0x3f, 0xd6, 0x2f, 0xfc,
-    0x0e, 0x13, 0x1b, 0x9d, 0x1f, 0x4b, 0x17, 0xff, 0x3f, 0xc5, 0xf6, 0x7e,
-    0xf9, 0x26, 0xac, 0x56, 0x22, 0x1f, 0xc8, 0x37, 0x84, 0x3c, 0x58, 0xbf,
-    0xb5, 0xe2, 0x93, 0xf1, 0x62, 0xff, 0xfd, 0xa1, 0xb1, 0x1b, 0xfc, 0x8f,
-    0xd3, 0x9e, 0x4d, 0x58, 0xac, 0x44, 0x40, 0x8b, 0xad, 0x1c, 0xb1, 0x52,
-    0x9e, 0xc6, 0x43, 0x69, 0xc8, 0xbf, 0x0a, 0x50, 0x11, 0x5e, 0x6d, 0x62,
-    0xc5, 0xc2, 0x02, 0xc5, 0xee, 0x48, 0x16, 0x2f, 0xa0, 0xe5, 0x8b, 0x15,
-    0xe3, 0x7c, 0x10, 0xed, 0xf6, 0xec, 0xdb, 0xaa, 0x4d, 0xf2, 0xf4, 0x73,
-    0x79, 0x62, 0xf8, 0x3c, 0x2d, 0xd6, 0x2f, 0xd2, 0x70, 0x37, 0x96, 0x2f,
-    0xfa, 0x77, 0x93, 0xe0, 0x03, 0x09, 0x62, 0xcf, 0xa4, 0x44, 0x11, 0x27,
-    0x51, 0x45, 0xe8, 0xb0, 0x0b, 0x17, 0xe0, 0xf6, 0xfc, 0xe9, 0x62, 0xb7,
-    0x4f, 0xb7, 0xb1, 0xc7, 0x56, 0xd1, 0x11, 0xcc, 0x7f, 0x0a, 0x86, 0x37,
-    0xf0, 0xf5, 0xff, 0x3f, 0xe7, 0xb9, 0x8f, 0xce, 0xd6, 0x2f, 0xf0, 0x7b,
-    0x30, 0xff, 0x3c, 0x58, 0xbf, 0xa6, 0x0c, 0x42, 0xc5, 0x8b, 0xff, 0xfd,
-    0x10, 0xdf, 0x5f, 0xc1, 0x94, 0xee, 0xdb, 0x14, 0x9d, 0x62, 0x8e, 0x88,
-    0xe6, 0x2c, 0xbf, 0xed, 0x0b, 0x9f, 0x68, 0x01, 0xd6, 0x2c, 0xe0, 0x3d,
-    0xcf, 0x11, 0x5f, 0x7b, 0x8d, 0xe5, 0x8b, 0xff, 0x6b, 0x23, 0xe2, 0xfb,
-    0x1d, 0xf8, 0xb1, 0x76, 0x6d, 0x87, 0xcd, 0xa2, 0x3a, 0xdd, 0x3d, 0xaf,
-    0xc6, 0x40, 0x50, 0x8d, 0xbf, 0x7a, 0x76, 0xc1, 0xac, 0x58, 0x25, 0x8b,
-    0xfe, 0x62, 0xdf, 0x93, 0xf6, 0x8f, 0x58, 0xa8, 0x1f, 0xc1, 0xa5, 0x3e,
-    0x13, 0xbc, 0x4f, 0x12, 0xc5, 0xcc, 0x35, 0x8b, 0xfb, 0x22, 0x22, 0x6f,
-    0xac, 0x56, 0x1f, 0x0e, 0x87, 0x4e, 0x2f, 0x7c, 0xf9, 0xae, 0x8b, 0x17,
-    0xdd, 0xc3, 0x69, 0x58, 0xbd, 0x21, 0x47, 0x2c, 0x56, 0x1e, 0x36, 0x89,
-    0x6f, 0xb7, 0xf6, 0x6e, 0xb1, 0x7a, 0x38, 0x52, 0xb1, 0x4b, 0x15, 0x86,
-    0xb0, 0x88, 0x2b, 0x0f, 0xc3, 0xca, 0x37, 0xbf, 0x3a, 0x58, 0xbf, 0x7d,
-    0xf5, 0xf6, 0x58, 0xbf, 0xfd, 0xf9, 0xdb, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6,
-    0x2f, 0x1f, 0x06, 0xb1, 0x63, 0xac, 0x5f, 0xe9, 0xd8, 0x78, 0x17, 0x23,
-    0x25, 0x17, 0xd8, 0x3b, 0x11, 0x43, 0x25, 0x06, 0x3b, 0x50, 0x4f, 0x9b,
-    0x21, 0x23, 0xf8, 0x6f, 0xdd, 0x9a, 0x58, 0xbc, 0x7c, 0xed, 0x62, 0xff,
-    0xe2, 0x60, 0x70, 0x73, 0xee, 0x36, 0xcb, 0x15, 0xb1, 0xfd, 0x0c, 0x5f,
-    0xc3, 0xd7, 0x9f, 0xdc, 0x58, 0xbd, 0xa1, 0x44, 0xb1, 0x7b, 0x66, 0x3e,
-    0x8d, 0xe7, 0x87, 0x6f, 0xa1, 0xc0, 0xf8, 0xb1, 0x52, 0x8c, 0x47, 0x6c,
-    0xf1, 0x9d, 0xf6, 0x7b, 0x98, 0xb1, 0x7f, 0x37, 0x63, 0x72, 0xd9, 0x62,
-    0xff, 0x64, 0x7e, 0x9c, 0xf2, 0x6a, 0xc5, 0x4a, 0x22, 0x34, 0x45, 0xf2,
-    0xfb, 0xdc, 0xf8, 0xd6, 0x2f, 0xc1, 0xf8, 0xa4, 0x0b, 0x14, 0x73, 0xc7,
-    0xe8, 0x3d, 0x7f, 0xb7, 0x6d, 0x6d, 0xd3, 0xc2, 0x58, 0xb8, 0xa5, 0x62,
-    0xff, 0xef, 0x71, 0xf9, 0x25, 0x9e, 0xfb, 0xac, 0x52, 0xc5, 0xff, 0xe6,
-    0xd3, 0x7e, 0x2c, 0xf4, 0xfa, 0x46, 0xb1, 0x7d, 0xe8, 0xb3, 0x83, 0x3d,
-    0x6d, 0xc3, 0x2f, 0xf6, 0x9c, 0xdc, 0xfb, 0xc1, 0x62, 0xcc, 0xe7, 0xdf,
-    0xd4, 0x77, 0x7f, 0x4c, 0x7f, 0x67, 0x7f, 0x2c, 0x5f, 0xf0, 0x8b, 0x76,
-    0x1f, 0xe7, 0x8b, 0x15, 0xa3, 0xec, 0x01, 0x95, 0xc2, 0xc5, 0x8b, 0xfe,
-    0x03, 0xf8, 0x9b, 0xd2, 0x35, 0x8b, 0xc5, 0x9f, 0x58, 0xad, 0xd5, 0x3c,
-    0xe8, 0xe4, 0xe2, 0xdf, 0x8c, 0x20, 0x10, 0x95, 0x22, 0x2e, 0x0b, 0xf4,
-    0x38, 0xbf, 0xe7, 0xe6, 0x0e, 0x62, 0x73, 0xac, 0x5f, 0x87, 0x31, 0xe2,
-    0x3a, 0xc5, 0xff, 0xb3, 0x6d, 0x84, 0x39, 0xd4, 0x8d, 0x62, 0xfd, 0xe7,
-    0xd4, 0xf4, 0x58, 0xbf, 0xe6, 0xe4, 0xe1, 0x0f, 0xf2, 0xb1, 0x7e, 0x68,
-    0xf3, 0xb7, 0x96, 0x2f, 0xf7, 0xe4, 0x6f, 0xd2, 0x46, 0xb1, 0x7f, 0xda,
-    0xce, 0xfe, 0x4d, 0x1f, 0xb2, 0xc5, 0xb0, 0x67, 0xe6, 0x73, 0x5b, 0x73,
-    0x48, 0xfc, 0xf9, 0xb9, 0x42, 0x7a, 0x89, 0x36, 0x0e, 0x46, 0x4d, 0x52,
-    0xba, 0x99, 0x92, 0xa7, 0x77, 0x84, 0x03, 0x9c, 0xe8, 0xb1, 0xa3, 0xa1,
-    0xbf, 0xd3, 0xee, 0x68, 0xa6, 0x25, 0x8b, 0xf0, 0x79, 0xf6, 0x3a, 0xc5,
-    0xc2, 0x35, 0x62, 0xf7, 0xdc, 0xeb, 0x17, 0x48, 0x6b, 0x16, 0x3b, 0x9b,
-    0x58, 0x87, 0x6e, 0x9f, 0xac, 0x5f, 0xfb, 0xa9, 0x8e, 0x1e, 0x80, 0x77,
-    0xe2, 0xc5, 0x6c, 0x99, 0x6e, 0xe6, 0x87, 0x29, 0x64, 0xe2, 0x27, 0xea,
-    0x17, 0xbf, 0x84, 0x07, 0x21, 0x69, 0x62, 0xf3, 0x97, 0x96, 0x2e, 0x17,
-    0x6b, 0x17, 0xfc, 0xd0, 0xf7, 0x30, 0x2f, 0xba, 0xc5, 0xee, 0xdb, 0xeb,
-    0x14, 0x74, 0x5d, 0xb1, 0x70, 0x07, 0x08, 0x64, 0x47, 0x57, 0xf7, 0x30,
-    0x7f, 0x7d, 0x2c, 0x5f, 0xe9, 0xe6, 0x77, 0xe7, 0xd2, 0xc5, 0xfc, 0xdb,
-    0x74, 0xc2, 0xd9, 0x62, 0xa2, 0x44, 0x9e, 0x8b, 0xa3, 0x8d, 0x2f, 0xf7,
-    0xc4, 0x43, 0xfb, 0x84, 0xb1, 0x7f, 0xf4, 0x42, 0x1b, 0x10, 0x0c, 0x73,
-    0xf9, 0x62, 0xbe, 0x7f, 0x9e, 0x35, 0xbf, 0xfa, 0x40, 0x29, 0x0f, 0x72,
-    0xcf, 0xe2, 0xc5, 0xed, 0x4f, 0x96, 0x2f, 0xfd, 0x3e, 0x13, 0x6d, 0x3f,
-    0x93, 0xac, 0x5f, 0xd1, 0x30, 0xfe, 0xe7, 0x58, 0xbf, 0xbc, 0xf8, 0x39,
-    0x3a, 0xc5, 0x76, 0x89, 0xbf, 0x1f, 0x84, 0x5f, 0x7c, 0xdb, 0x08, 0x96,
-    0x2e, 0xe1, 0x2c, 0x5f, 0xdd, 0xf2, 0x77, 0xc3, 0xac, 0x5f, 0x1f, 0x7c,
-    0x25, 0x8a, 0x95, 0x51, 0xd9, 0x0b, 0x07, 0x22, 0xd2, 0x2b, 0x42, 0xe0,
-    0x8c, 0xb8, 0x46, 0x21, 0x70, 0xcc, 0x29, 0x62, 0xff, 0x4e, 0x89, 0x86,
-    0x52, 0xb1, 0x7f, 0xfb, 0x1c, 0xdf, 0xe6, 0x16, 0xf9, 0xdf, 0x96, 0x2f,
-    0xff, 0xe9, 0x86, 0x1e, 0x77, 0xf7, 0x30, 0x13, 0x9d, 0xc1, 0x62, 0xb4,
-    0x8a, 0x72, 0x4b, 0xbb, 0x9b, 0xac, 0x5f, 0x49, 0x14, 0xac, 0x5f, 0x37,
-    0xdc, 0xeb, 0x15, 0x11, 0xe1, 0x11, 0x05, 0xfe, 0x83, 0x82, 0x28, 0x36,
-    0x96, 0x2f, 0xba, 0x67, 0xb8, 0xb1, 0x7f, 0xfe, 0x7f, 0x4c, 0x1f, 0x40,
-    0x04, 0xc7, 0x66, 0x8d, 0x58, 0xac, 0x3f, 0xe6, 0x25, 0xb6, 0x96, 0x2f,
-    0xe6, 0x07, 0x9f, 0xbe, 0x2c, 0x56, 0xe7, 0x83, 0xc1, 0x2b, 0xfe, 0x00,
-    0xca, 0x61, 0xfe, 0x01, 0x62, 0xc4, 0xb1, 0x5a, 0x3c, 0xb6, 0x3a, 0xa9,
-    0x56, 0x4d, 0xb0, 0x60, 0xe1, 0xb1, 0xb9, 0x13, 0xad, 0xc4, 0x45, 0xf8,
-    0x59, 0xf9, 0x84, 0x4d, 0xd7, 0xe6, 0xda, 0x7e, 0xcb, 0x17, 0xf6, 0x9b,
-    0x6f, 0x37, 0xd6, 0x2f, 0x14, 0x9a, 0xb1, 0x7d, 0x91, 0xed, 0xf5, 0x8b,
-    0x9b, 0xdb, 0x9e, 0x17, 0x07, 0x6a, 0x51, 0x3e, 0x4e, 0x37, 0xfc, 0x59,
-    0xef, 0x64, 0x4d, 0x12, 0xc5, 0xfd, 0x9e, 0x6d, 0xde, 0x0b, 0x17, 0xa2,
-    0x17, 0xd6, 0x2e, 0x19, 0xd6, 0x29, 0x62, 0xfd, 0x91, 0x42, 0x7b, 0x58,
-    0xac, 0x3e, 0xd3, 0x47, 0xdc, 0x60, 0x83, 0x2f, 0xe1, 0x77, 0xb6, 0xd8,
-    0x12, 0xc5, 0xff, 0xfe, 0x78, 0x8a, 0x79, 0xbf, 0xdc, 0xa2, 0x9e, 0x13,
-    0x1a, 0xb1, 0x74, 0x92, 0xc5, 0x6e, 0x9e, 0xdb, 0x90, 0xc4, 0x75, 0xf8,
-    0x4d, 0xf0, 0xeb, 0xa1, 0x98, 0x4c, 0x57, 0xfa, 0x4a, 0x05, 0x98, 0x05,
-    0x8b, 0xdf, 0x09, 0x96, 0x2f, 0xfe, 0x17, 0x3e, 0xd1, 0x16, 0x00, 0x5c,
-    0x58, 0xbf, 0x61, 0x7a, 0x78, 0xb1, 0x68, 0x2c, 0x5f, 0x67, 0x47, 0xd2,
-    0xc5, 0xfc, 0x01, 0x72, 0x3f, 0x3b, 0x58, 0xa8, 0x8f, 0x5c, 0x04, 0x95,
-    0x88, 0x8c, 0x66, 0x9b, 0xff, 0x37, 0x7d, 0xf1, 0xc7, 0x81, 0x71, 0x62,
-    0xa5, 0x72, 0xef, 0x25, 0x51, 0x1a, 0xdc, 0xe6, 0x3a, 0x1e, 0xfa, 0x31,
-    0x42, 0xcf, 0x84, 0x37, 0xff, 0xcd, 0xde, 0xb3, 0x3b, 0x0b, 0xe2, 0x9e,
-    0xf8, 0xb1, 0x7d, 0xb6, 0xec, 0x35, 0x8b, 0xf7, 0x4c, 0x89, 0xf8, 0xb1,
-    0x4c, 0x7a, 0x02, 0x25, 0xbf, 0xfa, 0x7c, 0xe0, 0xe3, 0x76, 0x07, 0xe8,
-    0xb1, 0x7c, 0xdb, 0xb6, 0xcb, 0x17, 0x79, 0xf4, 0x7d, 0x7c, 0x47, 0xbf,
-    0x31, 0x0f, 0xf2, 0xb1, 0x7c, 0x07, 0x23, 0x56, 0x29, 0x8f, 0x28, 0x04,
-    0xf5, 0xd6, 0x3a, 0x99, 0x3e, 0xb4, 0x8a, 0x34, 0x3b, 0xeb, 0xb2, 0x19,
-    0x96, 0x91, 0xb4, 0x62, 0x90, 0x86, 0xd0, 0xe5, 0x09, 0xe4, 0xa3, 0xf3,
-    0x5d, 0xf7, 0x94, 0x2f, 0xdc, 0x2d, 0x1e, 0x12, 0x31, 0xe5, 0xd1, 0x4a,
-    0x50, 0xd4, 0x6f, 0x07, 0x85, 0xb7, 0xe7, 0x70, 0x9a, 0x39, 0x60, 0x46,
-    0x2c, 0x52, 0xda, 0x79, 0x2e, 0xb3, 0xd3, 0xa8, 0xc2, 0x7d, 0x8e, 0x85,
-    0x20, 0x70, 0x8c, 0xea, 0x77, 0xba, 0x76, 0x58, 0xb9, 0xbc, 0xb1, 0x7f,
-    0x43, 0x08, 0x9a, 0x0b, 0x17, 0x9b, 0xb8, 0xc1, 0x9e, 0xd9, 0xc6, 0x3c,
-    0x2f, 0x7e, 0x11, 0xa1, 0xb4, 0x7a, 0xc5, 0xff, 0x60, 0x65, 0x3b, 0x94,
-    0xf9, 0x62, 0xfd, 0x00, 0xf6, 0x9d, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x79,
-    0xbb, 0x8c, 0xd2, 0x2c, 0x3e, 0x5d, 0xc3, 0x90, 0xcb, 0x2a, 0x31, 0x5d,
-    0x39, 0x4a, 0x60, 0x14, 0x3d, 0x2f, 0x40, 0x50, 0x58, 0xbf, 0xa0, 0xda,
-    0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, 0xcb, 0x16, 0xc8, 0x8f, 0x6f,
-    0x86, 0x17, 0xcf, 0x1c, 0x40, 0x58, 0xbd, 0xee, 0x76, 0xb1, 0x7f, 0xef,
-    0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, 0xe1, 0xc6, 0x41, 0x32, 0x41, 0xbc,
-    0xb1, 0x47, 0x09, 0x43, 0x1f, 0xbc, 0x7c, 0x25, 0x8b, 0xfd, 0x9c, 0xe4,
-    0x80, 0x3d, 0x96, 0x2f, 0xc7, 0x92, 0x9e, 0xd6, 0x2e, 0x6d, 0xd6, 0x2f,
-    0xfb, 0xd1, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7f, 0x9c, 0x5c, 0x01, 0x0b,
-    0x65, 0x8a, 0xd9, 0x16, 0x5b, 0x94, 0x76, 0x31, 0xe3, 0xdb, 0xff, 0x71,
-    0xc7, 0x98, 0x46, 0x8c, 0x6b, 0x17, 0xb7, 0x78, 0x2c, 0x5f, 0xc5, 0x17,
-    0xd8, 0x12, 0xb1, 0x7f, 0xf4, 0x8f, 0x22, 0x83, 0x6b, 0x6f, 0x89, 0x62,
-    0xa4, 0xfd, 0x74, 0x5d, 0x7f, 0xf0, 0x7b, 0x99, 0x3a, 0xd3, 0x93, 0x6e,
-    0xb1, 0x7a, 0x38, 0x80, 0xb1, 0x73, 0x92, 0xc5, 0xc2, 0xdd, 0x62, 0xff,
-    0x45, 0x1b, 0x63, 0xf4, 0x63, 0xac, 0x53, 0xa2, 0x28, 0xe4, 0x1c, 0x16,
-    0xf0, 0xcd, 0xe7, 0xf8, 0x96, 0x2f, 0xe7, 0x1b, 0x96, 0xf2, 0xb1, 0x7f,
-    0x3e, 0xff, 0x7e, 0xfc, 0xb1, 0x7f, 0x30, 0xff, 0x25, 0xb2, 0xc5, 0x61,
-    0xef, 0x7c, 0xc2, 0xf9, 0xfd, 0x80, 0x58, 0xbf, 0xe3, 0x3d, 0x26, 0x44,
-    0xcd, 0xa5, 0x8b, 0xfe, 0xc8, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xba, 0x62,
-    0x58, 0xbf, 0xe3, 0xc5, 0x06, 0xd6, 0xdf, 0x12, 0xc5, 0xe6, 0x20, 0x12,
-    0x24, 0x7c, 0x78, 0x18, 0xc5, 0x1d, 0x30, 0xd8, 0xe8, 0x66, 0xd4, 0xae,
-    0xb4, 0x8c, 0x73, 0x21, 0xd1, 0xda, 0x03, 0x9f, 0xea, 0x12, 0x67, 0x21,
-    0x68, 0x69, 0x75, 0xe7, 0x84, 0x3b, 0xc8, 0x45, 0xf8, 0x84, 0x38, 0xcb,
-    0xee, 0x8d, 0xe3, 0x45, 0x8b, 0xc7, 0x6e, 0xd6, 0x2f, 0xe7, 0xd9, 0x8e,
-    0xe7, 0x58, 0xb9, 0xbe, 0xb1, 0x5a, 0x3c, 0x50, 0x17, 0x5f, 0xff, 0xf7,
-    0xde, 0x28, 0x08, 0xd2, 0xce, 0xfc, 0xc7, 0xf7, 0x33, 0x65, 0x8b, 0xfe,
-    0xf3, 0x9f, 0x9f, 0xc0, 0x99, 0x62, 0xee, 0x8e, 0xb1, 0x7b, 0x06, 0x35,
-    0x8b, 0xda, 0xc0, 0xd6, 0x2f, 0xd8, 0x33, 0x94, 0x16, 0x2b, 0x47, 0x8c,
-    0x71, 0xeb, 0xfe, 0x98, 0x04, 0xda, 0xd6, 0x06, 0xb1, 0x7e, 0xcf, 0x6a,
-    0x4e, 0xb1, 0x7e, 0x3f, 0xb8, 0x28, 0xf5, 0x8b, 0xfd, 0xef, 0xe1, 0x13,
-    0x79, 0x62, 0xf6, 0x05, 0x19, 0xd6, 0x2a, 0xac, 0x92, 0x2c, 0x63, 0xdc,
-    0x8b, 0xb6, 0xb8, 0x8e, 0xbe, 0x32, 0xcc, 0x64, 0x45, 0xc3, 0xb0, 0xca,
-    0x3a, 0x8b, 0x6d, 0xc8, 0xc5, 0xc4, 0x1d, 0xa5, 0xbe, 0xde, 0x3e, 0x1d,
-    0x62, 0xff, 0x3b, 0x03, 0x05, 0xad, 0x96, 0x2f, 0xf4, 0xe6, 0xde, 0x7e,
-    0xf8, 0xb1, 0x5f, 0x3e, 0x9e, 0x1a, 0x5f, 0xef, 0x3f, 0xb9, 0xf7, 0x8c,
-    0xc4, 0x54, 0x7a, 0x10, 0xd5, 0x2c, 0xb3, 0x57, 0xa5, 0x02, 0x0a, 0x1b,
-    0xf7, 0xe7, 0x17, 0x85, 0xba, 0xc5, 0xfa, 0x41, 0xf1, 0x06, 0xb1, 0x70,
-    0xbb, 0x58, 0xbf, 0x66, 0xb3, 0x3b, 0x58, 0xbb, 0x68, 0xc9, 0x44, 0xaf,
-    0xca, 0x80, 0x54, 0x43, 0x37, 0xff, 0xf9, 0xfc, 0x26, 0xda, 0x33, 0x21,
-    0xf9, 0xd6, 0x61, 0x1a, 0xb1, 0x5a, 0x45, 0x7f, 0x5e, 0x97, 0x7f, 0xff,
-    0xf6, 0xed, 0xa6, 0xfc, 0x33, 0xd8, 0x3e, 0x31, 0xf3, 0x5b, 0x4f, 0x6b,
-    0x17, 0xf6, 0x0d, 0x8f, 0x84, 0xb1, 0x7f, 0xfd, 0x82, 0xeb, 0xf0, 0x99,
-    0xfe, 0xde, 0xfc, 0xac, 0x53, 0xa3, 0xcb, 0x4e, 0x9f, 0x2c, 0xbf, 0x6b,
-    0x76, 0x6d, 0xd5, 0x24, 0xa1, 0x7f, 0xfc, 0xde, 0x2c, 0xdb, 0x53, 0xf7,
-    0xfe, 0x69, 0x62, 0xff, 0xf9, 0x87, 0x83, 0xfe, 0x10, 0x0f, 0x9a, 0xc5,
-    0x8b, 0xb8, 0x12, 0xc5, 0xff, 0xbf, 0x20, 0x3b, 0x43, 0x9c, 0x09, 0x62,
-    0xf3, 0x42, 0x32, 0x53, 0x5d, 0xc2, 0xf0, 0x1b, 0x92, 0x7f, 0x13, 0x83,
-    0x19, 0xbf, 0xf3, 0xee, 0xda, 0x68, 0x3f, 0x00, 0xb1, 0x7e, 0xd6, 0xec,
-    0xdb, 0xaa, 0x44, 0xe2, 0xe8, 0x46, 0x49, 0xfb, 0x61, 0xfd, 0x1d, 0x30,
-    0xf6, 0x87, 0x05, 0xff, 0x64, 0x50, 0x6d, 0x6d, 0xf1, 0x2c, 0x5f, 0xfe,
-    0xce, 0xfd, 0x38, 0x16, 0x42, 0x41, 0xc5, 0x8b, 0xf7, 0xf3, 0x4f, 0xc5,
-    0x8b, 0xfd, 0x9c, 0x0c, 0x7f, 0x9e, 0xd6, 0x2e, 0xd4, 0x60, 0xd1, 0xca,
-    0x47, 0x9e, 0x4b, 0x8e, 0x28, 0xbf, 0xe6, 0x86, 0x40, 0x84, 0xdc, 0x58,
-    0xbd, 0x31, 0x32, 0xc5, 0xfd, 0xe6, 0x39, 0x49, 0xd6, 0x2f, 0x9c, 0xb2,
-    0x0b, 0x14, 0x34, 0x51, 0xfc, 0xe3, 0xc3, 0xbd, 0x45, 0xb7, 0xdb, 0x90,
-    0x8d, 0x58, 0xbf, 0xde, 0x72, 0x14, 0x33, 0x8b, 0x17, 0x6a, 0x33, 0x11,
-    0x30, 0xc8, 0x01, 0x92, 0xd4, 0x62, 0xad, 0x47, 0x8c, 0x35, 0xa3, 0x89,
-    0xa9, 0x97, 0x43, 0xa7, 0xb5, 0xa8, 0xa0, 0x85, 0x3e, 0x50, 0x7a, 0x9a,
-    0x74, 0x32, 0x78, 0x54, 0xd9, 0x58, 0x7b, 0xca, 0x0d, 0x79, 0xfd, 0x88,
-    0xf8, 0xf0, 0x22, 0x8f, 0xab, 0x51, 0xbb, 0x1f, 0x10, 0x25, 0xbf, 0xa7,
-    0xa9, 0xb5, 0x26, 0xc8, 0x12, 0xbe, 0xca, 0x91, 0x11, 0xcb, 0x5b, 0x0f,
-    0xea, 0x64, 0xc8, 0xa3, 0x84, 0xe9, 0x3c, 0xb5, 0x6e, 0x2c, 0x5f, 0xb5,
-    0xbb, 0x36, 0xea, 0x90, 0x7c, 0xbf, 0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36,
-    0xea, 0x91, 0x4c, 0xb4, 0x60, 0xd1, 0x33, 0x82, 0x47, 0x37, 0xbf, 0xd1,
-    0x99, 0xad, 0xd9, 0xb7, 0x54, 0x84, 0xe5, 0xe8, 0xd3, 0xae, 0xfa, 0xc5,
-    0x8b, 0xe8, 0xd7, 0x1b, 0xc6, 0xff, 0x58, 0xbf, 0x3f, 0xb8, 0x23, 0xac,
-    0x5f, 0x84, 0x72, 0x63, 0x56, 0x2f, 0x7e, 0x62, 0x58, 0xbb, 0xb8, 0x2c,
-    0x54, 0x48, 0x89, 0xd1, 0x4f, 0xca, 0x44, 0x3d, 0x7f, 0x85, 0xd8, 0x63,
-    0x17, 0xb8, 0xb1, 0x7f, 0xfa, 0x35, 0x1a, 0x14, 0x7e, 0xc3, 0x8d, 0x8c,
-    0x33, 0xf1, 0xcb, 0x17, 0xd9, 0xb8, 0x83, 0x58, 0xbe, 0xdd, 0x9b, 0x75,
-    0x48, 0x62, 0x5f, 0xff, 0x34, 0x38, 0x53, 0x9b, 0x8f, 0x4e, 0x2d, 0xd6,
-    0x2f, 0xf8, 0x4c, 0x76, 0xd6, 0xb3, 0xb5, 0x8a, 0xdd, 0x1c, 0x3a, 0x25,
-    0x23, 0x1e, 0x28, 0xdf, 0xe0, 0xb9, 0x14, 0x1f, 0xdc, 0x58, 0xbf, 0x71,
-    0xfa, 0x49, 0xd6, 0x2f, 0x77, 0x0d, 0x96, 0x2a, 0x4f, 0x2b, 0x0a, 0xaf,
-    0xb3, 0x63, 0xf9, 0x62, 0xa5, 0x18, 0xbf, 0x84, 0x09, 0x10, 0x5f, 0xe8,
-    0xd5, 0xd3, 0xae, 0xa6, 0x19, 0xf8, 0xe5, 0x8b, 0xf7, 0x46, 0xe4, 0xc1,
-    0x62, 0xfe, 0x73, 0x83, 0x59, 0xda, 0xc5, 0xfd, 0xcf, 0x77, 0xbb, 0xfd,
-    0x62, 0xf7, 0xdc, 0x25, 0x8b, 0xa1, 0x3f, 0x3c, 0xf0, 0x18, 0xdf, 0xdf,
-    0x62, 0x18, 0x7d, 0xac, 0x5f, 0xff, 0x31, 0xa6, 0x78, 0xd9, 0x28, 0x67,
-    0xdc, 0xeb, 0x16, 0x13, 0xa2, 0x08, 0x8c, 0x2f, 0xec, 0xd8, 0x3e, 0x81,
-    0xf4, 0x58, 0xb7, 0xd6, 0x2f, 0xa7, 0xb8, 0x32, 0xc5, 0x39, 0xb5, 0x88,
-    0x4a, 0xfa, 0x4f, 0xb8, 0x16, 0x2f, 0x07, 0x31, 0x2c, 0x5f, 0xff, 0x43,
-    0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, 0xc3, 0x3f, 0x1c, 0xb1, 0x52, 0x99,
-    0xae, 0x35, 0xfc, 0x85, 0x89, 0x00, 0x3f, 0x7e, 0xd3, 0xee, 0xfd, 0x16,
-    0x2f, 0xc2, 0xf4, 0xf7, 0x05, 0x8b, 0xd9, 0xdf, 0x96, 0x2f, 0xf6, 0x17,
-    0xf3, 0xd2, 0x35, 0x8b, 0xb3, 0xd2, 0x7a, 0x0e, 0x3d, 0x7f, 0xe8, 0x4f,
-    0x39, 0x2f, 0xb3, 0x79, 0x62, 0xff, 0xde, 0x36, 0x4a, 0x19, 0xf7, 0x3a,
-    0xc5, 0xff, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xf8, 0x44, 0xc6, 0x98,
-    0x7f, 0x1e, 0x3f, 0xbf, 0x3c, 0x40, 0x60, 0x2c, 0x5d, 0xbe, 0xeb, 0x17,
-    0xb8, 0xdd, 0xac, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x57, 0x69, 0xbd, 0x1e,
-    0x16, 0xff, 0x3a, 0xe1, 0x4f, 0x86, 0x84, 0x3d, 0x7b, 0xb8, 0x46, 0x8b,
-    0x17, 0xf7, 0xfd, 0xcc, 0xee, 0x0b, 0x14, 0xe7, 0xa8, 0x22, 0x4b, 0xcf,
-    0xa8, 0xe5, 0x8b, 0xf1, 0x91, 0x14, 0x8d, 0x62, 0xf0, 0x70, 0x8f, 0x58,
-    0xae, 0xb8, 0xca, 0xab, 0x8d, 0x65, 0xf3, 0x0b, 0xdd, 0x8f, 0xa0, 0x71,
-    0x91, 0xa2, 0xef, 0x18, 0x17, 0x66, 0x6e, 0x97, 0x1e, 0x55, 0x13, 0xf1,
-    0xe1, 0x5f, 0xf8, 0xd7, 0x19, 0x20, 0x05, 0x64, 0xf5, 0xc8, 0xe9, 0x7d,
-    0x0b, 0x21, 0x10, 0xc7, 0x10, 0x75, 0x15, 0x5f, 0xff, 0xff, 0xff, 0xba,
-    0xc0, 0x18, 0x67, 0xe3, 0xa3, 0x27, 0xae, 0xbb, 0x6d, 0x08, 0x87, 0xad,
-    0xba, 0xe4, 0xed, 0xbc, 0x21, 0x31, 0xbc, 0x6b, 0x30, 0xcf, 0xc7, 0x2c,
-    0x54, 0x62, 0xa4, 0x19, 0x8d, 0x66, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99,
-    0xad, 0xd9, 0xb7, 0x54, 0x8f, 0x25, 0xee, 0x93, 0xf5, 0x8b, 0x4a, 0xc5,
-    0x49, 0xb0, 0xd0, 0xfd, 0xf4, 0x94, 0x38, 0xb1, 0x76, 0x71, 0x62, 0xff,
-    0xcd, 0xe9, 0xd0, 0xa1, 0xa9, 0x82, 0xc5, 0xc1, 0xf1, 0x62, 0xf7, 0xa4,
-    0xeb, 0x17, 0xce, 0x59, 0xd1, 0x62, 0xfd, 0xe9, 0x27, 0x02, 0xc5, 0xff,
-    0x4e, 0xd9, 0xe9, 0x27, 0x02, 0xc5, 0xe6, 0x20, 0x61, 0xef, 0x86, 0x4f,
-    0x5f, 0x45, 0xa4, 0x74, 0x20, 0xab, 0x49, 0xd6, 0x80, 0x83, 0xaf, 0x22,
-    0x21, 0x7e, 0x1f, 0xf8, 0x64, 0x38, 0x68, 0xd2, 0xc5, 0xfe, 0x8d, 0xff,
-    0x10, 0x3a, 0xcd, 0x71, 0x62, 0x96, 0x2f, 0x0f, 0x0e, 0xb1, 0x6e, 0x7c,
-    0xd4, 0x88, 0x32, 0xe8, 0x06, 0xb1, 0x7c, 0x26, 0xd4, 0x16, 0x2f, 0x78,
-    0x3d, 0x96, 0x2f, 0xf9, 0x8b, 0xd2, 0x0d, 0x36, 0x96, 0x2f, 0xff, 0x13,
-    0x41, 0xfe, 0x28, 0xa1, 0x3a, 0xd9, 0x62, 0xf1, 0xc5, 0x1e, 0xb1, 0x7b,
-    0xb8, 0x6e, 0xb1, 0x7e, 0x61, 0xfe, 0x78, 0xb1, 0x7f, 0x7f, 0xf3, 0xdb,
-    0x47, 0xac, 0x52, 0xc5, 0x61, 0xbe, 0xe1, 0x95, 0xa3, 0x3a, 0xd5, 0x48,
-    0x9d, 0x75, 0x0c, 0x96, 0xa8, 0x13, 0x8c, 0x67, 0x08, 0xf4, 0x41, 0xf3,
-    0x80, 0x26, 0x75, 0xe4, 0x24, 0x41, 0xc6, 0x6a, 0x8c, 0x56, 0xe4, 0x14,
-    0xab, 0x3b, 0xff, 0xa3, 0x39, 0xe2, 0x90, 0x37, 0x85, 0x2b, 0x15, 0x2d,
-    0x9d, 0xde, 0xc7, 0x10, 0xa6, 0x98, 0xfc, 0xb7, 0xd3, 0xb5, 0xc1, 0x18,
-    0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x90, 0x80, 0xbf, 0xf3, 0x42, 0x33, 0x35,
-    0xbb, 0x36, 0xea, 0x91, 0x50, 0xbf, 0xb4, 0x2f, 0xc9, 0x6e, 0xb1, 0x7f,
-    0x6e, 0xf9, 0xd5, 0xf9, 0x58, 0xa9, 0x3e, 0x0c, 0x2f, 0xbf, 0xbd, 0x84,
-    0x53, 0xb2, 0xc5, 0xa3, 0x31, 0x33, 0x43, 0x9b, 0x94, 0x2c, 0x3c, 0x41,
-    0x7f, 0x66, 0x9a, 0x2d, 0xf6, 0x58, 0xbd, 0x25, 0xb2, 0xc5, 0x0c, 0xf3,
-    0xba, 0x18, 0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x90, 0xa0, 0xbf, 0x6a, 0x4f,
-    0x3d, 0xac, 0x5f, 0xda, 0x93, 0xfb, 0x00, 0xb1, 0x78, 0xe2, 0x1a, 0xc5,
-    0xff, 0x9f, 0xd1, 0x4b, 0xe7, 0x47, 0x8f, 0x58, 0xb7, 0xdc, 0xf8, 0x7a,
-    0x0f, 0x5e, 0x38, 0xa3, 0xd6, 0x2f, 0xde, 0xe7, 0xc5, 0xc5, 0x8b, 0xfe,
-    0x70, 0x48, 0x18, 0x85, 0x8b, 0x17, 0xfa, 0x18, 0x32, 0x66, 0x1a, 0xc5,
-    0xfd, 0x9a, 0x01, 0x08, 0x0b, 0x15, 0x28, 0xc1, 0xc2, 0xa6, 0x37, 0x01,
-    0x95, 0xff, 0x84, 0xda, 0x68, 0x79, 0xf8, 0x25, 0x8b, 0xf4, 0x83, 0x03,
-    0x3a, 0xc5, 0xff, 0x4f, 0x65, 0x9e, 0xe4, 0x9d, 0x62, 0x89, 0x14, 0x3c,
-    0x3f, 0x11, 0x4d, 0xff, 0x7f, 0x06, 0xfc, 0xc2, 0x02, 0xc5, 0xe9, 0x06,
-    0x2c, 0x5a, 0x32, 0x55, 0xbe, 0x61, 0x23, 0x9b, 0xe8, 0xa5, 0xa1, 0x1e,
-    0x02, 0x92, 0x87, 0x17, 0x21, 0xb7, 0xe2, 0xf0, 0xce, 0x2f, 0xf4, 0x66,
-    0x6b, 0x76, 0x6d, 0xd5, 0x21, 0x91, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x46,
-    0x52, 0xfd, 0x0c, 0xf3, 0x6e, 0xb1, 0x7e, 0x8c, 0x3b, 0x42, 0x33, 0x0f,
-    0x83, 0xb3, 0x7b, 0xba, 0xde, 0xb1, 0x62, 0xee, 0xc4, 0xb1, 0x7e, 0xd6,
-    0xec, 0xdb, 0xaa, 0x4a, 0x42, 0xed, 0x84, 0xb1, 0x62, 0x58, 0xba, 0x07,
-    0x58, 0xb7, 0x52, 0xc5, 0xec, 0xcf, 0x2c, 0x51, 0xa6, 0xc4, 0xe2, 0xb7,
-    0x75, 0xfd, 0x7a, 0xc5, 0xfd, 0x07, 0x19, 0x67, 0x45, 0x8b, 0x06, 0xb1,
-    0x7c, 0x5f, 0xce, 0xd6, 0x2f, 0x75, 0x08, 0x0b, 0x16, 0x8c, 0x8d, 0x13,
-    0xaf, 0x81, 0x16, 0x0c, 0xb9, 0xbc, 0x78, 0xce, 0x84, 0x59, 0x27, 0xaf,
-    0x22, 0xf1, 0x10, 0x8b, 0xc3, 0x13, 0xea, 0x23, 0xbf, 0x6b, 0x76, 0x6d,
-    0xd5, 0x25, 0xd1, 0x7f, 0x7d, 0xf5, 0xa6, 0x82, 0xc5, 0xa3, 0x30, 0xf9,
-    0x78, 0x6f, 0x78, 0x39, 0x3a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x31,
-    0x4b, 0x46, 0x49, 0xea, 0xe0, 0xf5, 0xfe, 0x26, 0xf3, 0xfd, 0x8e, 0xb1,
-    0x7f, 0xd3, 0xce, 0x49, 0xfd, 0x9b, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xa4,
-    0x7a, 0x2f, 0x9a, 0x11, 0x99, 0xb9, 0xf5, 0xe8, 0xea, 0x9d, 0x1b, 0x27,
-    0x84, 0xed, 0xe0, 0x9b, 0x75, 0x8b, 0xfb, 0xf2, 0xfa, 0x7e, 0xbd, 0x62,
-    0xf7, 0x5e, 0xfc, 0x58, 0xbf, 0x9f, 0x66, 0x9e, 0xf8, 0xb1, 0x7e, 0x97,
-    0x8e, 0x7e, 0xa5, 0x8b, 0xe9, 0xed, 0xba, 0x96, 0x2e, 0x0a, 0x33, 0x11,
-    0xeb, 0xb8, 0xfb, 0x99, 0x7c, 0x89, 0x8b, 0xc8, 0xb6, 0xff, 0xf4, 0x94,
-    0x66, 0x7d, 0x8c, 0x3c, 0xe7, 0x96, 0x2f, 0xfb, 0xa3, 0x7e, 0x75, 0xa7,
-    0x3a, 0xc5, 0xff, 0xfd, 0x86, 0x9a, 0xde, 0xe3, 0x94, 0x53, 0xbe, 0xb3,
-    0xb5, 0x8b, 0xe1, 0xe0, 0x51, 0x92, 0x89, 0xa2, 0x3b, 0xbf, 0xff, 0xff,
-    0x79, 0xb5, 0x08, 0xcc, 0xe0, 0x9b, 0xbc, 0x29, 0x08, 0x3f, 0x3c, 0x33,
-    0xbf, 0x2c, 0x5f, 0xff, 0xe7, 0x92, 0xf4, 0x67, 0xde, 0x4b, 0x6f, 0x77,
-    0xbb, 0x92, 0xc5, 0xfb, 0x3d, 0xf7, 0x09, 0x62, 0xff, 0xdc, 0xc2, 0x63,
-    0x7e, 0xf2, 0x4b, 0x17, 0xfd, 0x99, 0xf7, 0xdf, 0xf9, 0x18, 0x47, 0xcd,
-    0xe2, 0x9b, 0xe7, 0x23, 0x65, 0x62, 0xf1, 0x34, 0x4b, 0x14, 0xb1, 0x70,
-    0x89, 0x62, 0xa4, 0xd1, 0xf0, 0x32, 0xff, 0xa7, 0xee, 0x3f, 0xcc, 0x38,
-    0xb1, 0x5c, 0x3d, 0x9e, 0x84, 0x17, 0xe2, 0x98, 0xa6, 0x3d, 0x62, 0xa0,
-    0x98, 0x56, 0x11, 0x3c, 0x26, 0x7c, 0x49, 0x7a, 0x4a, 0x56, 0x2f, 0x79,
-    0xb7, 0x58, 0xbf, 0x48, 0x38, 0xfd, 0xac, 0x59, 0xfb, 0x3c, 0x7f, 0x8f,
-    0x5f, 0xec, 0xd6, 0xd3, 0xc7, 0x1a, 0xc5, 0xcc, 0x4b, 0x17, 0xf8, 0x84,
-    0xdb, 0x6b, 0x0e, 0xb1, 0x7f, 0x4f, 0xfd, 0x8f, 0xd1, 0x62, 0xf9, 0xf5,
-    0x3b, 0x2c, 0x5b, 0x0e, 0x7a, 0x5f, 0x2f, 0xbf, 0xa4, 0xfa, 0x13, 0x71,
-    0x62, 0x8e, 0x8f, 0x1f, 0x8b, 0x72, 0x10, 0xde, 0x27, 0xbd, 0x38, 0x35,
-    0x8b, 0xcf, 0x9b, 0x2c, 0x58, 0xd5, 0x8b, 0xbe, 0xf1, 0xe6, 0xc3, 0x43,
-    0xb7, 0x88, 0x5e, 0x58, 0xb3, 0xac, 0x5d, 0xc7, 0x88, 0xd7, 0x10, 0xed,
-    0xdd, 0xf9, 0x62, 0xfd, 0x09, 0x29, 0x89, 0x62, 0xfe, 0xfb, 0xf3, 0x59,
-    0xda, 0xc5, 0xfe, 0x9f, 0x71, 0xe2, 0x90, 0x2c, 0x54, 0xa2, 0x93, 0xb1,
-    0x98, 0x8a, 0x3e, 0x5f, 0x7a, 0x75, 0xb2, 0xc5, 0xec, 0x2d, 0xd6, 0x2f,
-    0xd1, 0x6f, 0xf9, 0xd9, 0x62, 0x96, 0x2a, 0x07, 0xe7, 0x83, 0xcc, 0x3a,
-    0x22, 0xcb, 0xfe, 0x84, 0x91, 0x67, 0xbe, 0xeb, 0x17, 0xf7, 0x9c, 0x9c,
-    0x1c, 0x58, 0xa7, 0x3e, 0x41, 0x1b, 0xde, 0x6c, 0xe2, 0xc5, 0x49, 0xbd,
-    0x11, 0x0d, 0xf7, 0x84, 0xdc, 0x58, 0xb8, 0xf2, 0xb1, 0xd9, 0xa3, 0xbf,
-    0xa7, 0xbf, 0x09, 0xb8, 0xb1, 0x58, 0x7a, 0xe6, 0x94, 0x5d, 0x87, 0x58,
-    0xb3, 0x91, 0xb9, 0x8e, 0x22, 0xbf, 0xb6, 0xd9, 0xca, 0x60, 0xb1, 0x7b,
-    0x73, 0x65, 0x62, 0xfc, 0x76, 0xd3, 0x41, 0x62, 0xf9, 0xf8, 0x23, 0xac,
-    0x5e, 0xfc, 0xc1, 0x62, 0xfb, 0x63, 0xcc, 0x16, 0x2a, 0x4f, 0x05, 0x87,
-    0x6f, 0xbd, 0xc1, 0x4a, 0xc5, 0x9d, 0x62, 0x88, 0xda, 0x78, 0x8e, 0xfb,
-    0xaa, 0x4b, 0x65, 0x8a, 0x93, 0xc6, 0x72, 0x0b, 0xf3, 0x3f, 0x7e, 0xc5,
-    0x8b, 0xf0, 0x73, 0xa9, 0x3a, 0xc5, 0x6c, 0x9c, 0xbc, 0x0a, 0x06, 0xc9,
-    0xa8, 0x4d, 0x00, 0x83, 0x85, 0x17, 0x9e, 0x7c, 0xb1, 0x50, 0x55, 0x0f,
-    0x85, 0x1d, 0x97, 0xbc, 0x76, 0xc1, 0x2f, 0x5f, 0x68, 0xb3, 0x65, 0x8b,
-    0xe1, 0xfd, 0xb4, 0xb1, 0x52, 0x89, 0x87, 0x52, 0x62, 0x3b, 0xe7, 0xf4,
-    0xe9, 0x62, 0xfb, 0xde, 0x9f, 0x2c, 0x5e, 0x89, 0xbc, 0xb1, 0x5f, 0x3e,
-    0x36, 0x22, 0x0c, 0x8e, 0xfb, 0x71, 0x34, 0x16, 0x2f, 0xe9, 0x04, 0x50,
-    0x9d, 0x96, 0x2d, 0xb2, 0xc5, 0x40, 0xf0, 0xdc, 0xc2, 0xf1, 0x49, 0xab,
-    0x15, 0x11, 0xbe, 0x39, 0x0d, 0xf7, 0xa0, 0xc3, 0x58, 0xa9, 0x47, 0x56,
-    0x42, 0x95, 0x88, 0xaf, 0xf3, 0xe9, 0xbb, 0xf4, 0xc1, 0x62, 0xfb, 0x84,
-    0x2f, 0xac, 0x5f, 0xf4, 0xbf, 0xb8, 0xe5, 0xdc, 0x16, 0x2e, 0x9d, 0x2c,
-    0x5f, 0xda, 0xce, 0x92, 0x5e, 0x58, 0xbf, 0xee, 0xf7, 0x73, 0x70, 0x9c,
-    0xd5, 0x8b, 0x66, 0x8f, 0xaf, 0xc5, 0xf7, 0xc4, 0xc0, 0xe2, 0xc5, 0x41,
-    0x35, 0xbc, 0x34, 0xf9, 0x1b, 0x1c, 0x94, 0x20, 0xbc, 0x4f, 0x7f, 0x43,
-    0x3f, 0xf6, 0x82, 0xc5, 0xb6, 0x58, 0xbe, 0x87, 0x18, 0xeb, 0x15, 0xb1,
-    0xb6, 0x61, 0x3b, 0xf6, 0x7c, 0x61, 0xf1, 0x62, 0xe1, 0xc6, 0x4b, 0x35,
-    0xa3, 0x64, 0x18, 0x31, 0x0c, 0xa3, 0x23, 0x25, 0x35, 0x0b, 0x74, 0xce,
-    0xd7, 0x5e, 0x1a, 0x11, 0x42, 0xc7, 0x50, 0xdb, 0xfc, 0xbf, 0x26, 0x84,
-    0x81, 0x46, 0x33, 0xc8, 0xe3, 0x7c, 0xb4, 0x13, 0x20, 0x64, 0x37, 0xcf,
-    0xaf, 0xb2, 0xc5, 0xfc, 0xe1, 0x0d, 0x98, 0xd5, 0x8b, 0xfa, 0x22, 0x93,
-    0xc6, 0x67, 0xcf, 0x47, 0x84, 0x57, 0xfb, 0x77, 0xd4, 0x61, 0xdc, 0x6b,
-    0x17, 0x73, 0xcb, 0x17, 0xf8, 0x98, 0x2e, 0x72, 0x40, 0xb1, 0x7f, 0x7d,
-    0xf9, 0xcc, 0xd2, 0xc5, 0xff, 0xa4, 0xfd, 0xc3, 0x9e, 0xc2, 0x89, 0x62,
-    0xff, 0xcf, 0xe7, 0x2f, 0x0b, 0xf1, 0xe4, 0xb1, 0x5f, 0x44, 0x13, 0x20,
-    0xdd, 0x9c, 0x58, 0xbf, 0xa4, 0xff, 0x6c, 0xd2, 0xc5, 0xff, 0x63, 0x1f,
-    0x93, 0xf6, 0x8f, 0x58, 0xbb, 0x35, 0xd9, 0xf4, 0x68, 0xb6, 0xee, 0x01,
-    0x62, 0xfc, 0x4c, 0x72, 0x95, 0x8b, 0xf8, 0x5c, 0xfb, 0x42, 0x32, 0x34,
-    0x54, 0x12, 0x31, 0x8d, 0xcd, 0x3f, 0x0b, 0x06, 0x22, 0x27, 0xf0, 0x8b,
-    0x83, 0x18, 0xbd, 0xb4, 0xc7, 0xac, 0x5f, 0x9f, 0xd3, 0xee, 0x2c, 0x5f,
-    0xda, 0xda, 0x47, 0x84, 0xb1, 0x76, 0xbc, 0xb1, 0x7e, 0xcf, 0x71, 0xce,
-    0xb1, 0x7d, 0x03, 0xf6, 0x12, 0xc5, 0xff, 0xe9, 0xef, 0xd9, 0x13, 0xeb,
-    0xdc, 0x14, 0x7a, 0xc5, 0xe6, 0xee, 0x32, 0x53, 0x2d, 0x81, 0x0e, 0x14,
-    0x31, 0x71, 0x0c, 0x70, 0xa3, 0xc4, 0xd5, 0x2b, 0xca, 0xb9, 0x1c, 0x37,
-    0x68, 0xfa, 0x94, 0x83, 0xc8, 0xf4, 0x6a, 0x0d, 0xbf, 0x60, 0xe1, 0xcd,
-    0xd9, 0xe7, 0xe1, 0x12, 0x50, 0xca, 0xf5, 0x6a, 0x31, 0x51, 0x8d, 0xcf,
-    0x0c, 0xc6, 0x38, 0xf5, 0xc2, 0x85, 0xff, 0xfe, 0xd7, 0xbd, 0x30, 0xfc,
-    0xbe, 0xa4, 0xbd, 0xc1, 0x4a, 0xc5, 0xfd, 0x9e, 0x66, 0xef, 0x8b, 0x17,
-    0xfd, 0xe1, 0x6c, 0x1c, 0x5c, 0x17, 0x6b, 0x17, 0x9b, 0xfc, 0x58, 0xb4,
-    0x66, 0x23, 0xac, 0x98, 0x3c, 0x5c, 0x12, 0x05, 0xf6, 0x8e, 0xde, 0x58,
-    0xba, 0x3e, 0x3d, 0x62, 0xfa, 0x0e, 0x58, 0xb1, 0x78, 0xbd, 0x05, 0x8b,
-    0xfc, 0xe5, 0xe1, 0xe9, 0xc2, 0x58, 0xbf, 0xb9, 0x9e, 0xfe, 0x01, 0x62,
-    0xfd, 0xe2, 0x9c, 0xed, 0x62, 0xed, 0xa3, 0x1d, 0x30, 0x98, 0xf2, 0x38,
-    0x87, 0xb4, 0x42, 0x01, 0xdf, 0x1a, 0x06, 0x5d, 0x43, 0x4f, 0x1f, 0x51,
-    0xa7, 0x5e, 0x91, 0x75, 0xeb, 0x17, 0xed, 0x6f, 0xf7, 0xe2, 0xc5, 0x39,
-    0xe6, 0x08, 0x8a, 0xef, 0x4a, 0xc5, 0x75, 0x86, 0xe3, 0xb2, 0x1b, 0xf4,
-    0x6d, 0xdf, 0x05, 0xb2, 0xc5, 0xed, 0xa3, 0xa3, 0x75, 0x8b, 0xf3, 0x6c,
-    0x53, 0x05, 0x8b, 0xfd, 0x9d, 0x0b, 0x38, 0x03, 0xac, 0x57, 0x5c, 0x44,
-    0x27, 0xc9, 0xc8, 0xa2, 0xfc, 0xff, 0x26, 0x89, 0x62, 0xfc, 0x23, 0x9d,
-    0xa2, 0x58, 0xbf, 0x3f, 0x79, 0x9b, 0x2c, 0x5b, 0x3e, 0x7a, 0x7d, 0x0a,
-    0xae, 0x8e, 0x8d, 0xd6, 0x2f, 0x75, 0xdc, 0x06, 0xb1, 0x7e, 0x86, 0x0c,
-    0xcc, 0x58, 0xbf, 0x33, 0xed, 0xa9, 0x58, 0xbe, 0xef, 0x77, 0x25, 0x8b,
-    0xf7, 0x88, 0x4d, 0x1b, 0x2c, 0x57, 0x58, 0x9e, 0x07, 0x5a, 0x6b, 0x1b,
-    0x3d, 0xf5, 0xd9, 0x4f, 0x5c, 0x20, 0x92, 0x5f, 0x94, 0xf8, 0xa0, 0x32,
-    0x4b, 0x8e, 0x05, 0x8b, 0xfe, 0xeb, 0x42, 0x37, 0x78, 0xa0, 0x23, 0x56,
-    0x2f, 0xd9, 0xe7, 0x17, 0x16, 0x2e, 0xeb, 0x3a, 0xea, 0xb1, 0x7e, 0x8d,
-    0x23, 0x4f, 0x6a, 0x56, 0x2b, 0xac, 0x46, 0xf4, 0x68, 0x31, 0xd7, 0x54,
-    0x68, 0xd4, 0x51, 0x02, 0x5b, 0xf4, 0x6b, 0xeb, 0x39, 0xaf, 0x2c, 0x5f,
-    0xe0, 0xcb, 0x35, 0xa9, 0xdd, 0x62, 0xba, 0xc3, 0xea, 0x8d, 0x8d, 0x6f,
-    0xee, 0xb7, 0xdd, 0xee, 0xe6, 0xac, 0x5e, 0x3f, 0xbb, 0x58, 0xae, 0xb0,
-    0xf5, 0xb4, 0x6f, 0x7e, 0x8d, 0xfa, 0xd3, 0xf0, 0xd5, 0x8b, 0x9f, 0x8b,
-    0x16, 0x09, 0x62, 0xba, 0xc3, 0xdf, 0xdc, 0xd4, 0x31, 0x7b, 0xf4, 0x6f,
-    0xd6, 0xcc, 0x0e, 0xb1, 0x74, 0xc7, 0xac, 0x58, 0x6b, 0x15, 0xf3, 0x59,
-    0xe1, 0xab, 0xff, 0xec, 0x8e, 0x34, 0x33, 0x99, 0x07, 0xf4, 0xfb, 0x8b,
-    0x17, 0xff, 0xe1, 0x34, 0x71, 0xa1, 0x9c, 0xc8, 0x3f, 0xa7, 0xdc, 0x58,
-    0xbf, 0xff, 0x4b, 0x47, 0x1a, 0x19, 0xcc, 0x83, 0xfa, 0x7d, 0xc5, 0x8b,
-    0xfd, 0xd7, 0x71, 0xaf, 0xae, 0xb1, 0xaa, 0x37, 0x8d, 0x46, 0x62, 0x62,
-    0x11, 0x2b, 0x89, 0x76, 0xff, 0xd1, 0xaa, 0x34, 0x8d, 0xba, 0xd8, 0xda,
-    0x36, 0xeb, 0x91, 0xb7, 0x58, 0xb1, 0x7f, 0xd1, 0xaf, 0xac, 0x8d, 0x71,
-    0xbc, 0x6d, 0x1b, 0x75, 0xce, 0xb1, 0x62, 0xff, 0xa3, 0x6e, 0xb9, 0x1a,
-    0xe3, 0x5f, 0x5b, 0xd6, 0xc6, 0xfd, 0x62, 0xc5, 0x46, 0x88, 0xce, 0x8d,
-    0x6c, 0xf7, 0xfd, 0x1a, 0xa3, 0x5f, 0x5c, 0x8d, 0x7d, 0x6f, 0x5d, 0x63,
-    0x5f, 0x58, 0xb1, 0x7f, 0xd1, 0xb4, 0x69, 0xd7, 0x3a, 0xde, 0xb2, 0x36,
-    0x8d, 0xfa, 0xc5, 0x8a, 0xeb, 0x88, 0xd1, 0x8d, 0x6d, 0x97, 0xfe, 0x8d,
-    0x23, 0x5f, 0x5c, 0xeb, 0x63, 0x54, 0x6b, 0xeb, 0xb8, 0xd3, 0xac, 0x58,
-    0xb8, 0xa3, 0x3a, 0xd5, 0x5c, 0x51, 0xa4, 0x67, 0xfd, 0x75, 0x87, 0xfc,
-    0x6a, 0x2f, 0xbf, 0x7c, 0x70, 0x8c, 0x84, 0x62, 0xbd, 0x4e, 0x4b, 0x64,
-    0xae, 0xb1, 0x76, 0xd3, 0xad, 0x5f, 0xeb, 0xac, 0xe8, 0x2d, 0xfb, 0xad,
-    0x3b, 0x31, 0x2c, 0x5f, 0xd1, 0xbf, 0x5a, 0x03, 0xc1, 0xd6, 0x2f, 0xe9,
-    0x7f, 0x7a, 0x4e, 0xb1, 0x70, 0xe3, 0xd6, 0x2a, 0x37, 0x45, 0x6f, 0x58,
-    0x59, 0x1a, 0xce, 0x7b, 0x2d, 0xbd, 0xbe, 0x7d, 0x22, 0xee, 0x69, 0x62,
-    0xe9, 0xe2, 0xc5, 0xb4, 0xb1, 0x63, 0xac, 0x51, 0xcd, 0xdf, 0x85, 0xc2,
-    0x12, 0xbf, 0xfc, 0x72, 0xce, 0xcf, 0x9b, 0xc9, 0x4e, 0xeb, 0x17, 0xfc,
-    0xd3, 0xec, 0xfc, 0xb8, 0x16, 0x2f, 0xff, 0xda, 0x9f, 0xce, 0x6e, 0x37,
-    0x2d, 0x8f, 0x30, 0x58, 0xb7, 0xb1, 0x1b, 0x1e, 0x4b, 0x0c, 0xde, 0xed,
-    0x4a, 0xc5, 0x39, 0xe6, 0x80, 0xda, 0xf6, 0x9a, 0x0b, 0x17, 0xf4, 0xc0,
-    0x07, 0x98, 0x2c, 0x56, 0x8f, 0x2f, 0xe3, 0xb7, 0xfb, 0x37, 0x93, 0x3e,
-    0xc7, 0x58, 0xa9, 0x3d, 0x7f, 0x91, 0x5f, 0xfc, 0x42, 0x93, 0x19, 0xfd,
-    0x0c, 0xe2, 0xc5, 0xff, 0xdf, 0x9e, 0x30, 0x7f, 0xfb, 0xf7, 0xc5, 0x8b,
-    0xfe, 0x79, 0x2c, 0xe9, 0xa9, 0xe2, 0xc5, 0x6e, 0x88, 0x0f, 0xa3, 0xde,
-    0x89, 0xc2, 0x58, 0xbf, 0x00, 0x50, 0x83, 0x2c, 0x53, 0x9e, 0x40, 0x63,
-    0xf7, 0xa2, 0x70, 0x96, 0x2e, 0xc8, 0x2c, 0x53, 0x9b, 0x66, 0x1f, 0xa3,
-    0x9f, 0xb8, 0x16, 0x2f, 0xfc, 0xe6, 0x7d, 0xda, 0x1e, 0x7d, 0x96, 0x2f,
-    0x36, 0xa0, 0xb1, 0x58, 0x7f, 0xff, 0x22, 0x12, 0x05, 0xfb, 0xc0, 0x0c,
-    0xa2, 0x58, 0xbf, 0x41, 0xf5, 0x86, 0xac, 0x5f, 0xf7, 0x0c, 0xe7, 0x32,
-    0x10, 0x95, 0x8a, 0x73, 0xe4, 0x62, 0x9b, 0x71, 0x62, 0xfe, 0x9d, 0xdf,
-    0x66, 0x25, 0x8b, 0xff, 0xf1, 0x31, 0xaf, 0xa9, 0x84, 0x33, 0x80, 0x04,
-    0xac, 0x5d, 0x23, 0x58, 0xbf, 0x0b, 0x30, 0x8d, 0x58, 0xb3, 0x11, 0xbf,
-    0xf0, 0xbd, 0x0d, 0x3d, 0x6c, 0x2e, 0x36, 0x11, 0xf1, 0x10, 0x68, 0x4b,
-    0xe5, 0xc0, 0x84, 0xa5, 0xf8, 0xa4, 0x62, 0xe2, 0xc5, 0x84, 0xb1, 0x7d,
-    0x25, 0x31, 0x2c, 0x51, 0x1b, 0x4f, 0x09, 0x5d, 0x3a, 0x58, 0xb7, 0x5e,
-    0xb1, 0x7a, 0x7f, 0x2b, 0x15, 0x28, 0xc6, 0xc5, 0xc3, 0x48, 0x22, 0x17,
-    0x21, 0x7b, 0xff, 0x16, 0x0b, 0x72, 0xcd, 0x83, 0x82, 0xc5, 0xfd, 0x9a,
-    0x03, 0x60, 0x16, 0x2f, 0xfa, 0x75, 0xa7, 0xea, 0xdc, 0x5b, 0x2c, 0x5c,
-    0xc7, 0x30, 0xfb, 0x23, 0x0b, 0x6e, 0xd3, 0x92, 0x37, 0xba, 0xa1, 0x5b,
-    0x7c, 0xff, 0x0c, 0xeb, 0x16, 0x75, 0x8b, 0xb6, 0x65, 0x8a, 0xf9, 0xa9,
-    0xf0, 0x8d, 0xff, 0xee, 0xe7, 0x51, 0x36, 0xff, 0x7e, 0x8c, 0x75, 0x8b,
-    0xff, 0xce, 0x69, 0x98, 0x4d, 0xdf, 0x0d, 0x35, 0x96, 0x2b, 0x74, 0xc2,
-    0xdd, 0x35, 0x88, 0x49, 0x3e, 0xfb, 0xb6, 0xfc, 0xac, 0x5f, 0xf0, 0xb3,
-    0x45, 0x9e, 0xfb, 0xac, 0x5f, 0xd0, 0x30, 0xed, 0xe9, 0x58, 0xa8, 0x1f,
-    0x3f, 0x67, 0x17, 0xff, 0x70, 0xb0, 0x11, 0x9f, 0x7d, 0xdb, 0x4b, 0x17,
-    0x66, 0x2c, 0x54, 0xa6, 0x16, 0xf0, 0x8a, 0x62, 0x30, 0x92, 0x2e, 0x20,
-    0x96, 0x2f, 0xf3, 0xe8, 0xcf, 0x4f, 0x70, 0x58, 0xbe, 0x21, 0x34, 0x16,
-    0x2b, 0x63, 0xd8, 0xe1, 0xb5, 0xff, 0xee, 0x39, 0xfb, 0xe3, 0x78, 0x5d,
-    0xf2, 0x56, 0x2f, 0xef, 0x45, 0x06, 0xd1, 0xab, 0x17, 0x66, 0xeb, 0x17,
-    0x87, 0x86, 0xb1, 0xe4, 0xf8, 0xc6, 0xfb, 0xf2, 0x7d, 0xd6, 0x2a, 0x53,
-    0x80, 0xc7, 0x0e, 0xc8, 0xda, 0x12, 0xde, 0x33, 0xb8, 0x40, 0x58, 0xbf,
-    0x7b, 0xee, 0x2e, 0xbd, 0x62, 0xa0, 0x78, 0xd8, 0x31, 0x7d, 0x98, 0x46,
-    0xac, 0x5f, 0x43, 0x66, 0x35, 0x62, 0xff, 0xe2, 0x9f, 0x73, 0x08, 0x5e,
-    0x11, 0xab, 0x14, 0x61, 0xf5, 0x70, 0x96, 0xb8, 0x8d, 0x0f, 0x10, 0x8a,
-    0x11, 0x97, 0x87, 0x9f, 0x58, 0xbd, 0x13, 0x84, 0xb1, 0x61, 0xc0, 0xde,
-    0x38, 0xed, 0xf1, 0x0b, 0xbe, 0x2c, 0x5f, 0xfe, 0xcd, 0xc6, 0xe4, 0x1e,
-    0x6b, 0x53, 0xd1, 0x62, 0xff, 0xe3, 0x26, 0x4a, 0x4e, 0x61, 0x9f, 0x8e,
-    0x58, 0xbf, 0xff, 0xe7, 0xd4, 0xf0, 0xb3, 0xa3, 0xfc, 0x5a, 0x9f, 0x13,
-    0x01, 0x62, 0xfa, 0x7b, 0x86, 0x2c, 0x54, 0xa6, 0xd4, 0xe4, 0xc0, 0x24,
-    0x24, 0xde, 0x25, 0x79, 0x9a, 0xff, 0xc6, 0x0f, 0x09, 0xc1, 0xcf, 0xba,
-    0xc5, 0xfe, 0x84, 0xe1, 0x0e, 0x4e, 0xb1, 0x5a, 0x3f, 0x1e, 0xbc, 0xfe,
-    0xfb, 0xda, 0xc1, 0xac, 0x5f, 0x69, 0x88, 0xd5, 0x8b, 0x85, 0x05, 0x8a,
-    0x93, 0xde, 0x62, 0x3e, 0x84, 0x77, 0xfe, 0xe3, 0x18, 0x3c, 0xf7, 0x1b,
-    0xb5, 0x8b, 0xff, 0x7f, 0x22, 0xfb, 0xfe, 0x75, 0x2b, 0x17, 0xd8, 0x4e,
-    0x6a, 0xc5, 0xcd, 0xda, 0xc5, 0xe2, 0x98, 0xf5, 0x8b, 0xfc, 0xdc, 0x6f,
-    0x88, 0xb6, 0x58, 0xaf, 0xa2, 0x34, 0x88, 0xbc, 0x30, 0x21, 0xfa, 0x31,
-    0xb3, 0x2e, 0xd9, 0x4e, 0x11, 0xaa, 0x0e, 0x18, 0x78, 0x43, 0xdc, 0x31,
-    0x1e, 0x59, 0xc4, 0x51, 0x9b, 0x6a, 0x32, 0x73, 0xc6, 0x81, 0xf8, 0xd1,
-    0xca, 0x3c, 0x1e, 0x46, 0xc9, 0xe8, 0xf6, 0xc5, 0x0c, 0x6e, 0x90, 0x85,
-    0x08, 0xbc, 0x34, 0x1e, 0xa8, 0x66, 0x5d, 0xc1, 0x2c, 0x5e, 0x98, 0xe8,
-    0xdd, 0x62, 0xda, 0x58, 0xbf, 0x3c, 0x1f, 0x52, 0xb1, 0x74, 0xe9, 0x62,
-    0xf1, 0x67, 0x52, 0xc5, 0xfd, 0x80, 0xe3, 0xf6, 0x12, 0xc5, 0xf3, 0x4f,
-    0x70, 0x58, 0xbb, 0x3e, 0xb1, 0x7e, 0xd7, 0x70, 0xf4, 0xac, 0x5e, 0xce,
-    0x98, 0xb1, 0x58, 0x79, 0x04, 0x55, 0x46, 0x26, 0x83, 0x22, 0x5b, 0x93,
-    0xb0, 0xb9, 0x0f, 0xf0, 0xc2, 0x38, 0x8c, 0x35, 0xfb, 0xec, 0x3b, 0xf9,
-    0x62, 0xa5, 0x50, 0xac, 0x06, 0x35, 0x1b, 0x37, 0x9d, 0x6e, 0x16, 0x96,
-    0x2c, 0x75, 0x8a, 0xdc, 0xd5, 0x1c, 0x62, 0xfb, 0x22, 0x73, 0xac, 0x5d,
-    0xa0, 0x2c, 0x5c, 0xd8, 0xb1, 0x5d, 0x9a, 0xed, 0x0c, 0x5e, 0x26, 0xf2,
-    0xc5, 0xe2, 0x7e, 0x2c, 0x5e, 0x2c, 0xed, 0x62, 0xec, 0xed, 0x62, 0xc1,
-    0x75, 0xa7, 0xdb, 0x23, 0x9b, 0x0e, 0x0c, 0x76, 0xe9, 0xfa, 0xc5, 0xe6,
-    0x20, 0x2c, 0x5d, 0x9c, 0x58, 0xb9, 0x8e, 0xb1, 0x6d, 0x40, 0xf2, 0x98,
-    0x73, 0xa0, 0xbd, 0xfd, 0xb9, 0xca, 0x7b, 0x02, 0xc5, 0xcc, 0x75, 0x8b,
-    0xdc, 0x84, 0xac, 0x5f, 0xb9, 0x99, 0x8e, 0xb1, 0x58, 0x78, 0x60, 0x1d,
-    0xbf, 0xfc, 0xe6, 0x4c, 0x4f, 0xed, 0x4e, 0xe2, 0xdd, 0x62, 0xf0, 0x1b,
-    0xb5, 0x8b, 0xec, 0xf4, 0x84, 0xb1, 0x58, 0x78, 0x24, 0x3d, 0x7f, 0xf9,
-    0xcc, 0xfe, 0x44, 0xfd, 0xf3, 0xf9, 0xba, 0xc5, 0xc5, 0xc5, 0x8b, 0xfe,
-    0x86, 0x7b, 0x05, 0xbb, 0x12, 0xc5, 0xf1, 0x37, 0xb8, 0xb1, 0x50, 0x3f,
-    0x2e, 0xc5, 0xce, 0x73, 0x7a, 0x73, 0x4b, 0x17, 0xff, 0xb7, 0x6d, 0x37,
-    0x9f, 0x92, 0x52, 0x05, 0x8b, 0x43, 0xe7, 0xca, 0x18, 0xe5, 0xfb, 0x3a,
-    0xd2, 0x71, 0xac, 0x57, 0x68, 0xea, 0xd4, 0x25, 0x40, 0x53, 0x52, 0xbb,
-    0x13, 0xb3, 0x74, 0x08, 0x86, 0xa3, 0x90, 0x8f, 0xdd, 0x21, 0xd8, 0x62,
-    0x36, 0xd1, 0x81, 0xd6, 0x80, 0x43, 0xc8, 0x47, 0xf8, 0x80, 0x51, 0xd5,
-    0x5f, 0x0c, 0xe1, 0x71, 0x62, 0xff, 0x6f, 0xf7, 0xd3, 0xe4, 0x16, 0x2e,
-    0x35, 0xd6, 0x2f, 0xe2, 0xc2, 0xd9, 0xf4, 0xb1, 0x7f, 0x16, 0x6d, 0xb4,
-    0xc7, 0xac, 0x50, 0x11, 0x57, 0xc3, 0x4e, 0x83, 0x1d, 0x45, 0xb7, 0xc5,
-    0x38, 0x35, 0x8b, 0xdb, 0x06, 0x75, 0x8b, 0xce, 0x19, 0xd6, 0x2c, 0x75,
-    0x8b, 0x9c, 0x6b, 0x14, 0x6a, 0x22, 0x1c, 0x85, 0x88, 0x38, 0x3c, 0x18,
-    0x95, 0xff, 0xbd, 0xc9, 0xce, 0xfc, 0x4d, 0xf5, 0x8b, 0xbe, 0x75, 0x8b,
-    0xa4, 0x96, 0x2a, 0x07, 0xdb, 0x87, 0xff, 0x18, 0xbb, 0xab, 0xa9, 0x62,
-    0xf6, 0x37, 0xd6, 0x2b, 0x86, 0xea, 0x38, 0x7a, 0xf8, 0xc8, 0x00, 0xeb,
-    0x17, 0xb5, 0x83, 0x58, 0xbf, 0x8c, 0x2c, 0x04, 0x81, 0x62, 0xf1, 0x67,
-    0x16, 0x2f, 0xb6, 0x10, 0x30, 0x8f, 0x2b, 0xa1, 0x75, 0xff, 0xfd, 0xdc,
-    0x30, 0xf9, 0xd1, 0xfc, 0xc7, 0x6f, 0x0a, 0x56, 0x2f, 0xef, 0x4c, 0x5c,
-    0x73, 0xac, 0x54, 0xa2, 0x31, 0x97, 0x6f, 0xc2, 0x3f, 0xb6, 0x8e, 0x58,
-    0xa3, 0x53, 0x7d, 0xd3, 0x3f, 0xe1, 0x8f, 0xc2, 0x1b, 0xfd, 0x30, 0x2c,
-    0xef, 0xd8, 0xb1, 0x7e, 0xdd, 0xfb, 0xd8, 0x96, 0x2f, 0xfe, 0x6d, 0xe4,
-    0x87, 0x14, 0x27, 0x5b, 0x2c, 0x57, 0x67, 0xe5, 0xf2, 0xbb, 0x71, 0x62,
-    0x9c, 0xda, 0xf0, 0x8e, 0xf1, 0xf0, 0xeb, 0x17, 0xc7, 0x3c, 0x9d, 0x62,
-    0xfd, 0xa6, 0x66, 0xf2, 0xc5, 0x0c, 0xf9, 0xd8, 0x74, 0x88, 0xef, 0xff,
-    0xbd, 0xc1, 0xeb, 0x1c, 0xdf, 0x84, 0xc5, 0xb2, 0xc5, 0xb6, 0x58, 0xbc,
-    0x3c, 0x35, 0x62, 0xb4, 0x6c, 0x48, 0x4e, 0xf7, 0xc4, 0x75, 0x8b, 0xba,
-    0x0d, 0x62, 0xba, 0xed, 0x7c, 0xb6, 0x61, 0xa1, 0x08, 0x65, 0x0e, 0x16,
-    0xf8, 0xd1, 0xd9, 0x23, 0xc7, 0x45, 0xa4, 0x4f, 0xc3, 0x69, 0xa1, 0x0f,
-    0xc2, 0xdf, 0x42, 0x10, 0x44, 0x01, 0x0f, 0x5f, 0xb0, 0x8a, 0x76, 0x58,
-    0xb7, 0x6b, 0x1a, 0x34, 0xf4, 0xb1, 0x71, 0x41, 0x62, 0x9c, 0xd1, 0x88,
-    0x32, 0xff, 0xb5, 0x84, 0x0e, 0x7b, 0x9d, 0xac, 0x5f, 0xb9, 0x14, 0x96,
-    0xcb, 0x15, 0x88, 0xcb, 0x35, 0x19, 0x88, 0x3c, 0x77, 0x78, 0xc8, 0x6c,
-    0xb1, 0x7f, 0xc4, 0xfa, 0x9c, 0x2f, 0x89, 0x62, 0xf1, 0xdf, 0x8b, 0x17,
-    0xe2, 0x35, 0xf3, 0x8b, 0x17, 0xfe, 0x83, 0x6b, 0x6f, 0x8b, 0x60, 0x79,
-    0x62, 0xff, 0x38, 0x0e, 0xd0, 0xc2, 0x58, 0xbf, 0xff, 0xec, 0xc1, 0xe1,
-    0x67, 0x7e, 0xdf, 0xef, 0xd1, 0xfa, 0x61, 0x2c, 0x5f, 0xbe, 0xfc, 0x71,
-    0xac, 0x5e, 0x79, 0x3a, 0xc5, 0xb5, 0x03, 0xc4, 0xf9, 0x45, 0xf3, 0x79,
-    0xb7, 0x58, 0xa7, 0x3c, 0xb0, 0x8a, 0x2f, 0x85, 0xd7, 0xf3, 0x65, 0x8b,
-    0xf6, 0xff, 0x60, 0x71, 0x62, 0xfe, 0xce, 0xe1, 0x39, 0xe5, 0x8b, 0xc1,
-    0x30, 0x30, 0xf6, 0x08, 0xaa, 0xa5, 0x16, 0x99, 0x08, 0x2b, 0xf7, 0x24,
-    0x01, 0xec, 0xb1, 0x7f, 0xff, 0x84, 0x45, 0x9e, 0xfb, 0xe4, 0x3f, 0x9a,
-    0x67, 0xe8, 0xb1, 0x7f, 0xcd, 0xdc, 0x93, 0x0f, 0x0d, 0x58, 0xa0, 0x22,
-    0x67, 0x8c, 0x14, 0x6a, 0xb9, 0x57, 0x1d, 0x88, 0xa3, 0x48, 0x67, 0x32,
-    0xfc, 0x3e, 0x0a, 0x1a, 0xdc, 0x26, 0xf4, 0x31, 0x2f, 0xff, 0xcf, 0xdf,
-    0x3e, 0x13, 0x7a, 0x49, 0x88, 0x52, 0xb1, 0x7f, 0xfe, 0x33, 0xf8, 0x37,
-    0x2c, 0x3f, 0x7e, 0x13, 0x71, 0x62, 0x80, 0x8a, 0xce, 0x8a, 0xb7, 0x04,
-    0x35, 0x8b, 0xff, 0xde, 0xfe, 0x1c, 0x0d, 0xac, 0xe9, 0x83, 0x58, 0xba,
-    0x7e, 0xb1, 0x61, 0xac, 0x51, 0xcd, 0x49, 0x0b, 0xd8, 0xd5, 0x8b, 0xc4,
-    0x09, 0x58, 0xb8, 0x86, 0x61, 0xaf, 0xe0, 0x9d, 0xd9, 0xe5, 0x8b, 0xf7,
-    0x02, 0x62, 0xd9, 0x62, 0xfa, 0x4f, 0x80, 0x58, 0xac, 0x3c, 0xcd, 0xca,
-    0xaa, 0x53, 0x76, 0xc7, 0x56, 0x4f, 0x01, 0x69, 0x31, 0xde, 0x6d, 0xf1,
-    0x62, 0xff, 0xfc, 0x26, 0x0f, 0x3d, 0x25, 0x9a, 0xc8, 0x42, 0x56, 0x2c,
-    0x11, 0x87, 0xe2, 0x43, 0xb6, 0x25, 0x86, 0x35, 0x37, 0xc4, 0xd1, 0xfd,
-    0xac, 0x5e, 0xe3, 0x6e, 0xb1, 0x5e, 0x3c, 0x41, 0x13, 0x5f, 0xf8, 0x43,
-    0xfb, 0xcf, 0x4d, 0x07, 0xc5, 0x8a, 0xd1, 0xf2, 0x91, 0x15, 0xf7, 0xa3,
-    0xb3, 0xeb, 0x17, 0xb8, 0x39, 0x58, 0xbf, 0xd9, 0xbc, 0x90, 0x9a, 0x0b,
-    0x17, 0xff, 0xf6, 0xf9, 0xdf, 0xbe, 0xfa, 0x96, 0x80, 0x33, 0x22, 0x58,
-    0xa3, 0x51, 0x20, 0x46, 0x74, 0x6a, 0x34, 0x1a, 0x15, 0xb5, 0x29, 0x9f,
-    0xe1, 0x08, 0xa1, 0xed, 0x7b, 0x8d, 0xd1, 0x62, 0xdc, 0x58, 0xb6, 0x2c,
-    0x53, 0x9a, 0x3e, 0xa1, 0x2b, 0xe6, 0xf0, 0x04, 0xb1, 0x63, 0x56, 0x2f,
-    0xf8, 0xa4, 0x1f, 0x9d, 0xdb, 0x4b, 0x17, 0xfd, 0x39, 0xf7, 0xf7, 0x9b,
-    0x65, 0x8b, 0xfb, 0x6e, 0xf7, 0x7c, 0xfc, 0x47, 0xe4, 0x23, 0x9b, 0x14,
-    0xa3, 0x35, 0xa1, 0x0b, 0x7f, 0xf7, 0xb9, 0x81, 0x06, 0xc5, 0xa7, 0xdd,
-    0x62, 0xb7, 0x4d, 0x8b, 0xb8, 0x78, 0x04, 0x57, 0x7f, 0x06, 0x7c, 0xc2,
-    0x35, 0x62, 0xe9, 0x02, 0xc5, 0x39, 0xe3, 0x06, 0x5f, 0x5d, 0xaa, 0x68,
-    0x3a, 0x13, 0x47, 0x0a, 0x07, 0xfb, 0xfc, 0x4d, 0x0e, 0x40, 0x2d, 0x96,
-    0x2f, 0xff, 0xfe, 0x26, 0x06, 0x16, 0xd8, 0x16, 0x6b, 0x67, 0xe7, 0xf3,
-    0xd1, 0xd8, 0xb1, 0x58, 0x8a, 0xbf, 0x1b, 0x5f, 0x43, 0x8e, 0x4b, 0x17,
-    0xdf, 0xde, 0x77, 0x58, 0xbf, 0xdb, 0x49, 0xca, 0x7b, 0x02, 0xc5, 0xff,
-    0xb7, 0x26, 0xfb, 0x77, 0x9d, 0xf9, 0x62, 0xff, 0x13, 0x1b, 0xa7, 0x93,
-    0x56, 0x2a, 0x09, 0x89, 0xf6, 0x44, 0xe4, 0x4c, 0x4a, 0x23, 0x50, 0x90,
-    0x6c, 0x1a, 0xc5, 0xf6, 0xc1, 0x34, 0x16, 0x2f, 0xfd, 0xa1, 0x1c, 0x98,
-    0xd1, 0xeb, 0xaf, 0x58, 0xbf, 0xf4, 0x97, 0xb8, 0x1f, 0xdb, 0xdc, 0x58,
-    0xa9, 0x44, 0x37, 0x91, 0xaf, 0x63, 0x1d, 0x62, 0x8d, 0x37, 0xda, 0x22,
-    0xa9, 0x4d, 0xdb, 0xb5, 0x87, 0x13, 0x68, 0x74, 0xdf, 0x17, 0x9c, 0xeb,
-    0x17, 0xa6, 0x60, 0xb1, 0x86, 0x8a, 0xfe, 0x9e, 0x4f, 0xe7, 0x8b, 0x17,
-    0xb7, 0x7d, 0xd6, 0x2f, 0x3f, 0xd9, 0x62, 0xfc, 0xd0, 0x7f, 0x89, 0x62,
-    0x98, 0xf1, 0x08, 0x72, 0xf4, 0x76, 0x7d, 0x62, 0xed, 0x42, 0x51, 0x47,
-    0xf6, 0x3f, 0x10, 0x56, 0x93, 0x0b, 0x68, 0x68, 0x5d, 0xec, 0x58, 0xa9,
-    0x6c, 0x7b, 0x76, 0x3c, 0x81, 0x06, 0x4b, 0xcc, 0x36, 0x33, 0xbe, 0xc9,
-    0x5e, 0x38, 0xfd, 0x43, 0x87, 0xf2, 0x82, 0x1a, 0x54, 0xe1, 0x4b, 0x79,
-    0xe3, 0x18, 0xa3, 0x36, 0x0c, 0xa2, 0xfc, 0xfc, 0x21, 0x79, 0x62, 0xf8,
-    0x1c, 0x0c, 0x0b, 0x17, 0x33, 0xac, 0x5f, 0xfe, 0x35, 0xb3, 0xbf, 0x7a,
-    0x73, 0xa3, 0xee, 0xb1, 0x79, 0xc8, 0x0b, 0x17, 0xfe, 0x87, 0x24, 0xa7,
-    0x79, 0x7f, 0xac, 0x5f, 0xd2, 0x5e, 0xfe, 0x41, 0x62, 0xed, 0x71, 0x62,
-    0xb4, 0x78, 0xac, 0x5b, 0x5d, 0xa2, 0x93, 0xa4, 0x20, 0xef, 0xf1, 0x67,
-    0x3c, 0xcc, 0x4b, 0x14, 0x34, 0xe0, 0x0d, 0x16, 0xfa, 0x73, 0x43, 0x03,
-    0xa1, 0x5d, 0xf7, 0x57, 0x54, 0xc7, 0xac, 0x5f, 0xff, 0x79, 0xc8, 0x50,
-    0xce, 0x0c, 0x4d, 0xa8, 0x2c, 0x5a, 0x4c, 0x3f, 0xc0, 0xcb, 0x2f, 0xfc,
-    0x76, 0x86, 0x7d, 0xf5, 0xf6, 0x58, 0xb6, 0xb4, 0x7c, 0xe0, 0x29, 0xbf,
-    0xff, 0x69, 0xf3, 0xa1, 0x0b, 0x9e, 0xef, 0x77, 0x35, 0xd6, 0x2f, 0xdc,
-    0x88, 0xa4, 0x6b, 0x14, 0xe8, 0xab, 0xd1, 0x47, 0x96, 0xaf, 0xf7, 0x0b,
-    0x3d, 0xec, 0xd9, 0x62, 0xff, 0x3f, 0x30, 0xbd, 0x9b, 0xac, 0x54, 0x0f,
-    0x9f, 0x46, 0x97, 0xff, 0xec, 0x37, 0x08, 0xce, 0x7b, 0xf8, 0x70, 0xe4,
-    0x0b, 0x14, 0xe7, 0xf4, 0x44, 0x55, 0x29, 0x98, 0x64, 0x62, 0x17, 0xf8,
-    0x4d, 0xc7, 0x89, 0xc2, 0x58, 0xa9, 0x5d, 0x12, 0x78, 0xe9, 0x7f, 0x2c,
-    0x40, 0x8a, 0x2f, 0xf8, 0x22, 0x63, 0x70, 0x6e, 0x4b, 0x17, 0xbf, 0x24,
-    0xb1, 0x7d, 0xef, 0x36, 0xeb, 0x17, 0x78, 0xeb, 0x16, 0x8e, 0x58, 0xa8,
-    0x1e, 0x8f, 0x64, 0x9f, 0x18, 0xa9, 0x46, 0xb6, 0xe7, 0x2c, 0xdb, 0x7c,
-    0x3d, 0x38, 0x4b, 0x17, 0xf6, 0x66, 0xd9, 0x9e, 0x58, 0xb8, 0xde, 0x8b,
-    0x17, 0xb0, 0x43, 0x58, 0xad, 0x91, 0x12, 0x32, 0x42, 0x2d, 0xe0, 0xdd,
-    0xfb, 0x21, 0x20, 0xe2, 0xc5, 0xff, 0xfd, 0xf9, 0xe6, 0x43, 0xf2, 0x72,
-    0x63, 0x4b, 0x00, 0xb1, 0x50, 0x44, 0x17, 0x8a, 0x2f, 0xfb, 0x46, 0x7f,
-    0x06, 0x53, 0xba, 0xc5, 0x49, 0xef, 0x39, 0x1d, 0xe7, 0x2f, 0x2c, 0x5e,
-    0xdf, 0x34, 0xb1, 0x7b, 0xa3, 0x6e, 0xb1, 0x52, 0x6f, 0xb0, 0x7a, 0xfb,
-    0xf3, 0xd3, 0x16, 0x2f, 0xe6, 0xe8, 0xf1, 0x38, 0x4b, 0x14, 0x74, 0x67,
-    0x12, 0xd7, 0x87, 0xc3, 0x24, 0xbf, 0xc2, 0xd6, 0xc7, 0x9c, 0xf2, 0xc5,
-    0xff, 0x72, 0x4e, 0x3f, 0xc9, 0x6e, 0xb1, 0x73, 0x96, 0x1f, 0x79, 0xa6,
-    0xb7, 0x16, 0xcb, 0x15, 0x28, 0xf0, 0x1c, 0x2b, 0x30, 0xb2, 0xff, 0xb6,
-    0xcd, 0xe4, 0x5f, 0xcd, 0x2c, 0x52, 0xc5, 0x85, 0x27, 0x8f, 0xc3, 0xbb,
-    0xef, 0xb7, 0x70, 0x58, 0xa8, 0x1e, 0x5e, 0xe4, 0xf7, 0xe6, 0xd0, 0x23,
-    0xb1, 0x62, 0xf7, 0x5b, 0xd3, 0xcb, 0x14, 0x33, 0xd0, 0xe8, 0x57, 0x7b,
-    0xe1, 0xf4, 0x58, 0xb9, 0xf6, 0x58, 0xbf, 0xe9, 0x39, 0x66, 0xfa, 0x70,
-    0x2c, 0x58, 0x6b, 0x17, 0xb9, 0xcc, 0x58, 0xb0, 0xe4, 0xd7, 0xb0, 0x95,
-    0x41, 0x18, 0xda, 0x21, 0xe0, 0xc0, 0x9a, 0x2f, 0xcc, 0xfb, 0xe1, 0x2c,
-    0x5f, 0xfd, 0x98, 0x46, 0xe9, 0xf9, 0xc6, 0x35, 0x62, 0xbe, 0x7d, 0x81,
-    0x93, 0xdf, 0xd8, 0xfc, 0xe0, 0xa5, 0x62, 0xf8, 0x0f, 0xa3, 0x56, 0x2a,
-    0x07, 0xa3, 0xe2, 0xdb, 0xf8, 0x78, 0x50, 0xfe, 0x2c, 0x5f, 0xff, 0xfe,
-    0xce, 0x7f, 0x35, 0x24, 0xdd, 0xc3, 0xf3, 0xef, 0x4f, 0x7f, 0x93, 0xac,
-    0x54, 0xa3, 0x1d, 0xc8, 0x8e, 0x5b, 0x7f, 0xbe, 0xfd, 0x1f, 0x70, 0xce,
-    0xb1, 0x7f, 0xef, 0x49, 0xfb, 0xdd, 0xfb, 0xcd, 0x2c, 0x5f, 0xbf, 0x9a,
-    0x7e, 0x2c, 0x5e, 0x27, 0x86, 0xe8, 0xa2, 0xec, 0xe3, 0xc8, 0x57, 0xfb,
-    0xe2, 0xda, 0x2c, 0xcd, 0xd6, 0x2e, 0xef, 0xcb, 0x17, 0xee, 0xfc, 0x53,
-    0x8b, 0x17, 0xe2, 0x61, 0xe1, 0xab, 0x17, 0xd0, 0x9c, 0xf2, 0xc5, 0xd8,
-    0x03, 0x0f, 0xca, 0x4a, 0x3b, 0x28, 0xbf, 0xa7, 0xd8, 0xe2, 0xeb, 0xd6,
-    0x29, 0x8f, 0xb4, 0x07, 0x77, 0xfd, 0x9b, 0x60, 0xf0, 0xa6, 0x3d, 0x62,
-    0xff, 0xff, 0xdc, 0x98, 0x05, 0x9f, 0x0f, 0xc5, 0x20, 0x6f, 0x00, 0x32,
-    0x82, 0xc5, 0x4a, 0xe2, 0x3e, 0xd1, 0x9d, 0xc2, 0x1a, 0x03, 0x42, 0x63,
-    0x70, 0x43, 0xe0, 0x88, 0x7c, 0x77, 0x7f, 0xf8, 0xbd, 0x1d, 0x91, 0x41,
-    0xb5, 0xb0, 0xe5, 0x62, 0xff, 0xfd, 0x09, 0xf3, 0x7f, 0x8e, 0xde, 0x00,
-    0x65, 0x05, 0x8b, 0xcc, 0xdd, 0x4b, 0x14, 0x47, 0xeb, 0xe5, 0x6b, 0xfc,
-    0xe3, 0xc3, 0x86, 0xe3, 0x58, 0xa5, 0x8b, 0xde, 0xc8, 0xf5, 0x8a, 0x73,
-    0x59, 0xe0, 0xcb, 0xfe, 0x9c, 0x87, 0xf1, 0xe1, 0xc5, 0x8a, 0x94, 0x5c,
-    0x71, 0x83, 0xc4, 0x17, 0xe1, 0xc5, 0xf1, 0x47, 0xac, 0x57, 0x67, 0xba,
-    0x45, 0xf5, 0x8a, 0x87, 0x1e, 0x18, 0x8d, 0x19, 0xb5, 0x82, 0x58, 0xbc,
-    0xf8, 0x6a, 0xc5, 0xb4, 0xe6, 0xc0, 0x84, 0xef, 0xd3, 0xf7, 0xee, 0x0b,
-    0x17, 0x1e, 0x0b, 0x17, 0xfb, 0x3b, 0xf1, 0x91, 0xce, 0x6a, 0xc5, 0xfb,
-    0xbf, 0x47, 0x39, 0xab, 0x17, 0x8e, 0xfe, 0x30, 0xfa, 0x30, 0xea, 0xf6,
-    0x3f, 0x96, 0x2f, 0xed, 0xc7, 0x9a, 0x03, 0xac, 0x59, 0x8c, 0x3c, 0xbc,
-    0x1c, 0xa3, 0x13, 0x4e, 0x19, 0x4e, 0x42, 0x03, 0xef, 0xd7, 0xfb, 0xbe,
-    0x06, 0x4f, 0x23, 0x58, 0xbf, 0xfa, 0x77, 0x93, 0xc9, 0x30, 0xf0, 0xd5,
-    0x8a, 0xd2, 0x2f, 0x09, 0x0f, 0xa8, 0xd6, 0xfe, 0xef, 0x9f, 0x66, 0x3a,
-    0xc5, 0x4a, 0xa9, 0x07, 0x94, 0x5e, 0x19, 0x95, 0xfb, 0xbe, 0x06, 0x2d,
-    0x96, 0x2f, 0xf4, 0x38, 0x52, 0x06, 0x3a, 0xc5, 0xf9, 0xbb, 0xf6, 0xd2,
-    0xb1, 0x52, 0x7b, 0xa4, 0x67, 0x7e, 0x37, 0x05, 0xad, 0x96, 0x2f, 0x6e,
-    0x29, 0x58, 0xbf, 0xfe, 0x35, 0xb9, 0xa9, 0xf7, 0xf0, 0xf9, 0xac, 0x58,
-    0xa9, 0x3e, 0xef, 0x0f, 0x56, 0x91, 0x74, 0x14, 0x26, 0x6f, 0xe7, 0xd6,
-    0xc2, 0x06, 0x2c, 0x5f, 0xba, 0x84, 0x7c, 0x1a, 0xc5, 0xed, 0x30, 0x16,
-    0x2f, 0xfb, 0x3b, 0xf6, 0x1d, 0x88, 0x0b, 0x17, 0x61, 0x2c, 0x54, 0x9e,
-    0x7f, 0xce, 0x6f, 0xa7, 0x0b, 0x75, 0x8a, 0xf9, 0xe1, 0xf8, 0x86, 0xfb,
-    0xbf, 0x49, 0xd6, 0x2a, 0x51, 0xea, 0x6c, 0x2b, 0xfb, 0x22, 0xb1, 0x2c,
-    0x5f, 0xce, 0xd0, 0xf3, 0xec, 0xb1, 0x7f, 0x79, 0xfe, 0xe5, 0xe5, 0x8a,
-    0x30, 0xfb, 0x3e, 0x22, 0x19, 0x75, 0xfd, 0xc7, 0xce, 0x8d, 0xa5, 0x8b,
-    0xff, 0x14, 0x8f, 0xf3, 0xee, 0x19, 0x8b, 0x17, 0xfb, 0x03, 0x6d, 0x00,
-    0xf8, 0xb1, 0x6e, 0x0c, 0xfc, 0xf0, 0xfe, 0xa0, 0x8f, 0xa3, 0x98, 0xfa,
-    0x14, 0x57, 0xfe, 0xc8, 0xf1, 0xfe, 0x7f, 0x3e, 0xe2, 0xc5, 0xff, 0xe9,
-    0xce, 0xfd, 0xf9, 0xf1, 0x48, 0x38, 0xb1, 0x7f, 0xfd, 0x9c, 0x30, 0x07,
-    0x10, 0xf5, 0xd7, 0xf0, 0x33, 0xac, 0x5d, 0x20, 0x58, 0xbb, 0x06, 0xb1,
-    0x77, 0xce, 0xb1, 0x7f, 0xfe, 0x11, 0x7b, 0x92, 0x46, 0xfd, 0xf0, 0x9a,
-    0x0b, 0x17, 0xff, 0xf0, 0xa0, 0xe5, 0x82, 0x01, 0x99, 0xc2, 0x13, 0x6c,
-    0xb1, 0x50, 0x45, 0x86, 0x95, 0x2a, 0x09, 0xb9, 0xee, 0xb5, 0x1e, 0x2f,
-    0xc1, 0x7f, 0x43, 0x22, 0xa5, 0x76, 0x77, 0x62, 0x9c, 0x2f, 0x78, 0xc8,
-    0x5a, 0x39, 0xc2, 0x35, 0xf2, 0x10, 0xa3, 0xbd, 0xbf, 0x6c, 0x76, 0xf4,
-    0xac, 0x5f, 0x86, 0xc4, 0x23, 0xac, 0x5f, 0xff, 0xe2, 0x01, 0x67, 0xbf,
-    0x90, 0x73, 0xe0, 0xe6, 0x12, 0xb1, 0x7f, 0xe1, 0x03, 0x37, 0xcd, 0x69,
-    0xa0, 0xb1, 0x62, 0x58, 0xbf, 0xf0, 0x7e, 0xfc, 0x83, 0x53, 0xf9, 0x58,
-    0xad, 0x8f, 0x47, 0xb1, 0x1b, 0xff, 0x84, 0xd0, 0x38, 0xbd, 0xf9, 0x17,
-    0x5e, 0xb1, 0x74, 0x9d, 0x62, 0xa5, 0x3c, 0x6c, 0x29, 0x72, 0x8d, 0x2f,
-    0x34, 0x24, 0x48, 0x93, 0x89, 0x77, 0xff, 0xfe, 0x6e, 0x83, 0x9e, 0x7b,
-    0xbd, 0xdc, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff, 0xcd, 0x14, 0xf6,
-    0x4c, 0x6e, 0x0d, 0xa0, 0xb1, 0x7b, 0x6c, 0x09, 0x62, 0xff, 0xff, 0xfc,
-    0xcf, 0xe2, 0x60, 0x31, 0x00, 0x7f, 0x90, 0xca, 0x79, 0xcc, 0x86, 0x7d,
-    0x62, 0xff, 0xfe, 0xce, 0x4b, 0x8c, 0x9a, 0x0e, 0x59, 0xc7, 0x3a, 0xc5,
-    0xe0, 0x44, 0x25, 0x8a, 0xdc, 0xfd, 0x9d, 0x5e, 0xa0, 0x9f, 0x98, 0xdc,
-    0x74, 0x97, 0xf1, 0xf2, 0x87, 0xb5, 0xed, 0x9f, 0x4b, 0x17, 0xfc, 0x16,
-    0xb2, 0x7b, 0x83, 0x9d, 0x62, 0xff, 0xb8, 0xfd, 0xfa, 0x28, 0x4f, 0x6b,
-    0x17, 0xee, 0x7b, 0x99, 0xe5, 0x8a, 0x94, 0x50, 0xf0, 0xec, 0x47, 0xb7,
-    0xee, 0xbd, 0xe2, 0x70, 0x96, 0x2f, 0xe2, 0x98, 0x84, 0xc1, 0xac, 0x50,
-    0x8f, 0x78, 0x32, 0xfb, 0xb3, 0xeb, 0x17, 0xff, 0xef, 0x13, 0x03, 0x9f,
-    0x98, 0x39, 0x61, 0xe5, 0x62, 0xf0, 0x41, 0x04, 0x91, 0x7c, 0x1e, 0xa6,
-    0x09, 0x11, 0x86, 0x86, 0xfe, 0xf3, 0xfb, 0x9f, 0x7e, 0x22, 0xae, 0x39,
-    0xd2, 0xa5, 0x56, 0x41, 0xa9, 0xef, 0x0b, 0xf6, 0x84, 0x6f, 0x88, 0xc5,
-    0x0c, 0x2b, 0xff, 0xd3, 0x9a, 0xe7, 0xf3, 0xa9, 0xfc, 0xf0, 0x58, 0xbb,
-    0xdd, 0xac, 0x5f, 0xe7, 0xd6, 0xc2, 0x06, 0x12, 0xc5, 0xef, 0xc9, 0xd6,
-    0x2b, 0x74, 0x5b, 0x1d, 0x33, 0xaf, 0x19, 0x0c, 0xd2, 0xfb, 0xbe, 0x4f,
-    0x6b, 0x17, 0x67, 0x16, 0x2f, 0x40, 0xa4, 0xc3, 0x78, 0xc4, 0xb7, 0x44,
-    0xeb, 0x17, 0xff, 0xf4, 0x24, 0xb3, 0xdf, 0x7c, 0xf4, 0x9d, 0xf5, 0x05,
-    0x8a, 0xed, 0x14, 0x5a, 0x31, 0xf0, 0xc5, 0x89, 0x62, 0xfc, 0x19, 0x67,
-    0x4c, 0x58, 0xad, 0x1b, 0xb3, 0x88, 0xdf, 0xb3, 0x82, 0x2f, 0x2c, 0x53,
-    0xa2, 0xd5, 0x9b, 0x08, 0x86, 0xff, 0xfb, 0x5b, 0x4f, 0xd9, 0xf5, 0xa7,
-    0x3c, 0x6f, 0xd7, 0x6b, 0x17, 0xee, 0xe4, 0x9c, 0xeb, 0x17, 0xf6, 0x7c,
-    0xef, 0x9d, 0xac, 0x54, 0xa2, 0xcf, 0x17, 0x7c, 0x51, 0x52, 0xea, 0x56,
-    0x61, 0x3a, 0x74, 0x38, 0xc8, 0x32, 0x17, 0x06, 0xc6, 0x3b, 0xbc, 0x7b,
-    0xdd, 0xc3, 0x15, 0xdc, 0xe2, 0x87, 0x56, 0xa7, 0x3c, 0x0f, 0x2a, 0x7b,
-    0xf2, 0xbe, 0x98, 0xe0, 0x10, 0x8a, 0x29, 0xe7, 0x7e, 0x4a, 0x48, 0xf4,
-    0xe9, 0x00, 0xa3, 0x1c, 0xe9, 0x1e, 0xbf, 0x54, 0x38, 0x2f, 0xfb, 0xb8,
-    0x73, 0x98, 0x36, 0xf2, 0xc5, 0xc4, 0xcb, 0x17, 0x80, 0xfb, 0xac, 0x5e,
-    0x29, 0x82, 0xc1, 0x85, 0xf5, 0xc6, 0x1b, 0x87, 0xc0, 0xe6, 0x97, 0xef,
-    0x48, 0xba, 0xfe, 0x2c, 0x53, 0x9e, 0xe6, 0x8b, 0xae, 0x78, 0xe5, 0x8b,
-    0xa2, 0x3a, 0xc5, 0xfb, 0x35, 0xe1, 0x7d, 0x62, 0xb4, 0x7b, 0x80, 0x1a,
-    0x0c, 0x66, 0xd8, 0xb1, 0x6c, 0x58, 0x8f, 0x2c, 0x6f, 0xb4, 0x4d, 0xd1,
-    0x62, 0xfd, 0xc3, 0xb3, 0x6c, 0xb1, 0x62, 0x58, 0xb6, 0x76, 0x6e, 0x98,
-    0xa6, 0xc1, 0x2c, 0x5c, 0x66, 0x2c, 0x53, 0x1a, 0xbf, 0x09, 0xd4, 0xaa,
-    0xa7, 0x1c, 0x3d, 0xf1, 0xf4, 0xd4, 0x17, 0x23, 0xd2, 0xf1, 0xd4, 0x6f,
-    0xdf, 0x79, 0x2d, 0x96, 0x2e, 0x8d, 0x02, 0x58, 0xbe, 0xf3, 0x76, 0x05,
-    0x8b, 0xff, 0xbc, 0x2e, 0xe1, 0xcf, 0xe7, 0xa4, 0x6b, 0x15, 0x04, 0x44,
-    0xb0, 0xf7, 0x51, 0x25, 0x69, 0x1c, 0x7e, 0x85, 0x8d, 0xdc, 0x82, 0xc5,
-    0xa5, 0x62, 0xa4, 0xd4, 0x88, 0x62, 0x96, 0x2f, 0x8d, 0x03, 0x44, 0xb1,
-    0x62, 0xdc, 0xd8, 0xc4, 0x19, 0x7f, 0xfe, 0xcf, 0x7f, 0x21, 0xa9, 0xfb,
-    0x3f, 0xa7, 0xeb, 0x14, 0xe7, 0xf8, 0x45, 0x17, 0x81, 0xcc, 0x58, 0xbe,
-    0xea, 0x69, 0xed, 0x62, 0xff, 0x69, 0xfa, 0xfd, 0xff, 0x21, 0x2c, 0x5e,
-    0x11, 0x6e, 0xb1, 0x7e, 0xd6, 0xdb, 0x30, 0x4b, 0x15, 0x87, 0x94, 0x18,
-    0xf5, 0x76, 0x8c, 0xd7, 0x26, 0xd4, 0x21, 0x6f, 0xf3, 0x42, 0x2f, 0xbf,
-    0x7e, 0x58, 0xbf, 0xed, 0xdb, 0x5b, 0x4e, 0xf8, 0x75, 0x8b, 0x04, 0xb1,
-    0x7a, 0x4a, 0x0b, 0x17, 0xff, 0x98, 0x2f, 0x67, 0xcc, 0x2c, 0x36, 0x78,
-    0xb1, 0x50, 0x3e, 0x82, 0x1c, 0xb3, 0x2c, 0x5e, 0x9f, 0xf1, 0x62, 0xbb,
-    0x35, 0xce, 0x23, 0x7f, 0xe9, 0xdc, 0xcc, 0x29, 0x17, 0x5f, 0xc5, 0x8b,
-    0xfd, 0x80, 0x04, 0x9a, 0x19, 0xd6, 0x2f, 0xee, 0x4e, 0x6b, 0x09, 0x62,
-    0xf9, 0xa1, 0x3b, 0x2c, 0x5f, 0xe6, 0xf3, 0xfd, 0x8e, 0x66, 0x1e, 0x7f,
-    0xcb, 0x2f, 0xfd, 0xcc, 0x21, 0x99, 0x83, 0x7e, 0x8b, 0x17, 0xff, 0x71,
-    0xbb, 0xe7, 0x30, 0x81, 0x1d, 0x8b, 0x17, 0xfe, 0xe4, 0xc7, 0x67, 0xa1,
-    0x0c, 0xe2, 0xc5, 0xff, 0xf8, 0x79, 0xee, 0x3f, 0x39, 0x3e, 0x13, 0x6d,
-    0x2b, 0x15, 0xba, 0x26, 0x34, 0x85, 0x7f, 0xfc, 0xdd, 0x33, 0xec, 0xfe,
-    0x98, 0x08, 0x78, 0xb1, 0x4e, 0x7e, 0x9a, 0x24, 0xbf, 0xff, 0x81, 0xcf,
-    0x73, 0xef, 0x3b, 0xc8, 0xff, 0x3e, 0xe2, 0xc5, 0xf3, 0xf9, 0xe0, 0xb1,
-    0x43, 0x5c, 0xa5, 0xdc, 0xdb, 0xb3, 0xc8, 0x9e, 0xf4, 0x9e, 0x72, 0x1f,
-    0xa2, 0x94, 0x21, 0x78, 0x93, 0xe4, 0x1e, 0x91, 0xaa, 0x06, 0x43, 0xd4,
-    0xbb, 0x7b, 0xf8, 0x4b, 0x17, 0xdb, 0xff, 0x06, 0xb1, 0x5a, 0x3c, 0x00,
-    0xc7, 0x2f, 0xff, 0xc5, 0x8f, 0xc7, 0xd4, 0x8b, 0xd1, 0x4e, 0x0d, 0x62,
-    0xa5, 0x79, 0x65, 0xe7, 0x36, 0x9a, 0x30, 0x81, 0x11, 0xdf, 0x83, 0x83,
-    0x83, 0x8b, 0x17, 0xb2, 0x65, 0x62, 0xf8, 0xa0, 0xe7, 0x58, 0xbf, 0x07,
-    0xc0, 0xb3, 0xeb, 0x15, 0xb1, 0xf4, 0x30, 0xdf, 0x08, 0xaf, 0xe0, 0x75,
-    0x79, 0xf5, 0xb2, 0xc5, 0x0d, 0x1e, 0x9a, 0x84, 0x91, 0x17, 0xdf, 0xc4,
-    0x60, 0x7c, 0x9c, 0x58, 0xbf, 0xbf, 0xe3, 0x5f, 0xbe, 0x2c, 0x5f, 0x4f,
-    0x9b, 0xeb, 0x17, 0x73, 0x65, 0x8b, 0xcc, 0x77, 0x58, 0xad, 0x8f, 0x5c,
-    0x64, 0x5a, 0x19, 0xbe, 0xf4, 0xf6, 0x12, 0xc5, 0x4b, 0x2c, 0x03, 0x65,
-    0x1c, 0x86, 0x6e, 0xe4, 0x1f, 0x9f, 0x43, 0x68, 0xcf, 0xc0, 0x68, 0x45,
-    0xe2, 0x84, 0x40, 0x46, 0x17, 0xe7, 0xe7, 0x32, 0x3d, 0x62, 0xff, 0xc3,
-    0x99, 0x3e, 0x70, 0x4d, 0xda, 0xc5, 0xff, 0xf0, 0x83, 0xf1, 0x48, 0x1b,
-    0xc0, 0x0c, 0xa0, 0xb1, 0x50, 0x45, 0xe3, 0x95, 0xf8, 0xfe, 0xfd, 0xb1,
-    0x80, 0xec, 0x0b, 0x17, 0xfb, 0xdc, 0x14, 0x27, 0x69, 0x58, 0xbf, 0x7b,
-    0xd8, 0x47, 0x58, 0xbf, 0xf9, 0x81, 0x3f, 0xc1, 0xcf, 0x24, 0x0b, 0x17,
-    0xff, 0xf6, 0x73, 0x0b, 0x53, 0x07, 0x3e, 0x77, 0x08, 0x84, 0xb1, 0x7f,
-    0xf7, 0x70, 0xf7, 0xd8, 0xf9, 0xbc, 0xf1, 0x62, 0xa5, 0x14, 0x62, 0x5c,
-    0xbf, 0xf7, 0xbb, 0xdd, 0xc8, 0x30, 0x34, 0x16, 0x2f, 0xbc, 0xf2, 0x6a,
-    0xc5, 0xd2, 0x11, 0x87, 0xcb, 0xda, 0x15, 0x4a, 0xa2, 0x7c, 0x2d, 0x73,
-    0x56, 0x28, 0x28, 0x73, 0x7a, 0x10, 0xf7, 0xff, 0x0b, 0x6f, 0xb8, 0xf2,
-    0x37, 0x8d, 0xfa, 0xe7, 0x5a, 0xb1, 0x6f, 0xac, 0x51, 0x1f, 0x70, 0x4b,
-    0x97, 0xff, 0x16, 0xe1, 0xe9, 0x80, 0xfe, 0xfc, 0xac, 0x5f, 0xb8, 0xc6,
-    0xfd, 0xd6, 0x2a, 0x4f, 0xbd, 0x91, 0xaf, 0x9b, 0x66, 0x25, 0x8b, 0xf7,
-    0xbf, 0x80, 0x65, 0x8a, 0xec, 0xf2, 0x88, 0x8a, 0xfe, 0x39, 0x9f, 0xc0,
-    0x32, 0xc5, 0xff, 0xc3, 0xd3, 0x6e, 0x1f, 0x46, 0x62, 0xdd, 0x62, 0xfd,
-    0xcc, 0xc2, 0xd9, 0x62, 0x8d, 0x3f, 0x10, 0x92, 0x6f, 0x83, 0xfb, 0xf9,
-    0x62, 0xa5, 0x30, 0xac, 0x22, 0x78, 0x50, 0x70, 0x92, 0xfe, 0xd6, 0x10,
-    0xa7, 0x4b, 0x17, 0xff, 0x0f, 0xf3, 0xbf, 0xdc, 0x73, 0x84, 0xb1, 0x71,
-    0x90, 0x58, 0xa3, 0x9e, 0xe8, 0x11, 0x2f, 0xf9, 0xb9, 0x8e, 0x4d, 0xee,
-    0x2c, 0x5f, 0xe1, 0x30, 0x7c, 0x09, 0xbb, 0x58, 0xbd, 0x39, 0xd9, 0xa7,
-    0xdc, 0x46, 0xf7, 0xd3, 0xc9, 0xe8, 0xb1, 0x7f, 0xff, 0xa7, 0x37, 0xfb,
-    0xf4, 0x9e, 0x13, 0x1b, 0xc1, 0xbc, 0x4b, 0x17, 0xfe, 0x26, 0xf4, 0x24,
-    0xd6, 0x0b, 0xcb, 0x17, 0xff, 0xf8, 0x30, 0xe2, 0xfb, 0xc5, 0x3e, 0x6e,
-    0x67, 0xfe, 0xe7, 0x58, 0xa9, 0x45, 0x2b, 0x20, 0x54, 0x6c, 0xaa, 0x6e,
-    0x61, 0x15, 0xa8, 0x48, 0x7c, 0xcc, 0x89, 0x05, 0x18, 0x4d, 0xe3, 0x1b,
-    0x75, 0x8a, 0x96, 0x44, 0x6c, 0x25, 0x2b, 0x6f, 0x0c, 0xc0, 0x42, 0x47,
-    0x91, 0xba, 0x7a, 0x56, 0xdf, 0x53, 0x65, 0xf8, 0x33, 0x9d, 0xe3, 0xd6,
-    0x2f, 0xd8, 0x5e, 0x73, 0xac, 0x54, 0x0f, 0x50, 0xe5, 0xb6, 0xe2, 0xc5,
-    0xcd, 0xc5, 0x8a, 0xc3, 0x52, 0xc2, 0x57, 0xb9, 0x30, 0x58, 0xbe, 0x9d,
-    0x4e, 0xeb, 0x15, 0x87, 0x80, 0x43, 0xb7, 0xbe, 0xe1, 0xac, 0x58, 0x35,
-    0x8a, 0x58, 0xa1, 0x17, 0xe1, 0x89, 0xd6, 0x8f, 0x78, 0x23, 0xdb, 0xdf,
-    0x10, 0xd6, 0x2f, 0xe8, 0x73, 0xcf, 0x3d, 0xac, 0x5f, 0x1c, 0x39, 0x25,
-    0x8b, 0xfb, 0x8c, 0x4f, 0xdf, 0x16, 0x2f, 0x9c, 0x78, 0x75, 0x8b, 0xe6,
-    0x62, 0x02, 0xc5, 0xf6, 0xdf, 0x78, 0xf5, 0x8b, 0xbd, 0xe5, 0x8b, 0x05,
-    0x28, 0x82, 0x34, 0x89, 0x88, 0x44, 0x4f, 0x4b, 0x17, 0x08, 0xeb, 0x17,
-    0xf8, 0x26, 0x8b, 0x21, 0x31, 0xeb, 0x17, 0xee, 0xa1, 0x44, 0xf1, 0x2c,
-    0x54, 0xa6, 0xfa, 0xf0, 0xb0, 0x89, 0x0f, 0xe1, 0x9c, 0x18, 0x11, 0xc5,
-    0xff, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7f, 0x8a, 0x7d, 0xe9, 0x23,
-    0x56, 0x2b, 0x0f, 0xb5, 0x8e, 0xaf, 0xf9, 0xcf, 0xfe, 0xda, 0x3f, 0xdc,
-    0x58, 0xbf, 0xb7, 0x6f, 0xff, 0x06, 0xb1, 0x52, 0x7d, 0xa2, 0x3e, 0xbf,
-    0xa1, 0x25, 0xb1, 0xf1, 0x62, 0xe0, 0xbc, 0xb1, 0x58, 0x78, 0xe2, 0x2e,
-    0xbc, 0x13, 0x04, 0xb1, 0x60, 0x2c, 0x54, 0x9b, 0x10, 0xc7, 0xef, 0xbd,
-    0xc1, 0x0d, 0x62, 0xfc, 0xfd, 0xc3, 0xdb, 0xac, 0x5f, 0xe9, 0x6d, 0x7c,
-    0x26, 0x1a, 0x45, 0xc1, 0x04, 0x91, 0x43, 0x3c, 0xe0, 0x8d, 0x2e, 0x78,
-    0xf4, 0x88, 0xc3, 0x47, 0x40, 0x46, 0x4f, 0xa1, 0x39, 0x7e, 0xdd, 0xf9,
-    0xf7, 0x58, 0xbf, 0xe9, 0x07, 0xe7, 0x84, 0xd1, 0x2c, 0x5f, 0xd3, 0x25,
-    0x20, 0x95, 0x8a, 0xed, 0x11, 0xa4, 0x53, 0xe3, 0x9b, 0xc7, 0x93, 0xac,
-    0x5e, 0x80, 0xbc, 0xb1, 0x52, 0x6e, 0xc4, 0x3b, 0x52, 0xbf, 0x2d, 0xb2,
-    0x58, 0xd7, 0xf1, 0xfb, 0x72, 0x3e, 0xc7, 0x9c, 0xbe, 0x28, 0xe8, 0x35,
-    0x0c, 0x93, 0xc2, 0x37, 0xed, 0x00, 0x52, 0x22, 0x1e, 0x43, 0xb7, 0xd0,
-    0xb5, 0x8e, 0x6b, 0xbf, 0xff, 0xfb, 0xae, 0xfa, 0x6d, 0xc8, 0xd7, 0xb4,
-    0x69, 0xd6, 0x6a, 0x22, 0xf6, 0x0c, 0xc3, 0x3f, 0x1c, 0xb1, 0x7c, 0x43,
-    0xfb, 0x2c, 0x5d, 0x07, 0x58, 0xbd, 0x8d, 0x1e, 0xb1, 0x7b, 0x58, 0x35,
-    0x8b, 0xcd, 0x3e, 0x58, 0xa8, 0xd1, 0x32, 0x8c, 0x84, 0xbb, 0x91, 0x68,
-    0x5f, 0xa0, 0xff, 0x50, 0xed, 0xef, 0xce, 0x96, 0x2e, 0xf7, 0x16, 0x2f,
-    0xc7, 0xd6, 0xa7, 0x65, 0x8b, 0x80, 0x52, 0x78, 0x58, 0x31, 0x7f, 0x8b,
-    0x3c, 0x53, 0xdc, 0x16, 0x2f, 0xa4, 0x85, 0xc5, 0x8a, 0xc4, 0x40, 0x31,
-    0x5f, 0x0c, 0xef, 0xdd, 0xf2, 0x74, 0x6a, 0xc5, 0xc1, 0x71, 0x75, 0x88,
-    0x16, 0xc5, 0x8b, 0xe8, 0xb3, 0x37, 0x58, 0xac, 0x3d, 0xbf, 0x13, 0x04,
-    0x23, 0x5b, 0x22, 0xd7, 0xb8, 0x43, 0x5f, 0x77, 0x0e, 0xb7, 0xb5, 0x8b,
-    0xdc, 0x32, 0x0b, 0x17, 0xff, 0xe1, 0x89, 0xb7, 0xfb, 0x72, 0x63, 0xf3,
-    0x08, 0xd5, 0x8a, 0xec, 0xfe, 0x34, 0x3f, 0x6f, 0xac, 0x5f, 0xfb, 0x83,
-    0x29, 0x1f, 0xe7, 0xdc, 0x58, 0xa9, 0x3d, 0x1e, 0x09, 0x54, 0xa6, 0xc5,
-    0x85, 0x4d, 0x0a, 0x31, 0x3a, 0x5e, 0xff, 0x50, 0xd6, 0x2f, 0xff, 0xfb,
-    0x02, 0xc8, 0x7f, 0x1e, 0x1c, 0xef, 0x8f, 0xe7, 0x2d, 0x96, 0x2e, 0xfc,
-    0x4b, 0x17, 0xfb, 0xee, 0xd0, 0xf3, 0xec, 0xb1, 0x7c, 0xe5, 0xe9, 0x58,
-    0xbf, 0xe7, 0xd3, 0x03, 0xab, 0xd9, 0xf5, 0x8a, 0xf9, 0xee, 0xf8, 0x86,
-    0xff, 0x9c, 0x22, 0xcf, 0x38, 0x80, 0xb1, 0x7c, 0xe4, 0x1f, 0x16, 0x2f,
-    0x8a, 0x0e, 0x75, 0x8b, 0x7a, 0x4f, 0x15, 0x88, 0xef, 0xc7, 0x78, 0x9c,
-    0x25, 0x8a, 0x93, 0xd0, 0x72, 0x6b, 0xed, 0x0e, 0x76, 0x58, 0xb8, 0xf1,
-    0xcb, 0x14, 0xe6, 0xfd, 0x89, 0x2f, 0xe2, 0xcf, 0x72, 0x40, 0xb1, 0x7e,
-    0xfb, 0x1d, 0xf8, 0xb1, 0x7e, 0xf7, 0x09, 0xcd, 0x58, 0xba, 0x76, 0x58,
-    0xa8, 0x1f, 0x4e, 0x8a, 0x3c, 0x53, 0x5f, 0x46, 0x2b, 0x42, 0x5a, 0xe7,
-    0x09, 0x62, 0xe0, 0xf6, 0x58, 0xbd, 0xdf, 0x30, 0x8d, 0x97, 0x86, 0x2f,
-    0xc1, 0x6b, 0x4c, 0x12, 0xc5, 0xfb, 0xef, 0x25, 0xb2, 0xc5, 0xf6, 0x67,
-    0x61, 0x2c, 0x5d, 0x27, 0x58, 0xbf, 0xff, 0xfd, 0xc0, 0xf5, 0x3f, 0x9c,
-    0x3b, 0x94, 0x25, 0xfe, 0xfb, 0x93, 0xf4, 0x58, 0xbf, 0xff, 0xdf, 0xc2,
-    0x90, 0x70, 0x4d, 0x9b, 0xc9, 0x09, 0xa0, 0xb1, 0x4e, 0x8d, 0x7f, 0x3c,
-    0x5d, 0x9f, 0x1a, 0x62, 0x1c, 0x87, 0x75, 0x69, 0x36, 0x8f, 0x46, 0x69,
-    0x46, 0xa7, 0x74, 0x14, 0x72, 0x17, 0xba, 0xbd, 0xf5, 0x8a, 0x95, 0x4c,
-    0x98, 0x64, 0xd1, 0xf2, 0x84, 0x59, 0x7e, 0x37, 0x35, 0x9e, 0x58, 0xbf,
-    0xcd, 0xe2, 0xcd, 0x83, 0x82, 0xc5, 0xff, 0xd8, 0x6e, 0x0b, 0x4c, 0x39,
-    0xfc, 0xac, 0x53, 0xa2, 0x88, 0x8a, 0x78, 0x6b, 0x70, 0x38, 0xb1, 0x7f,
-    0xe2, 0x60, 0xb7, 0xfb, 0xf4, 0x7d, 0x2c, 0x5e, 0x1f, 0xe5, 0x62, 0x86,
-    0x7b, 0xe1, 0xa1, 0x57, 0x5a, 0xcb, 0x34, 0x98, 0x6f, 0xc2, 0x52, 0x28,
-    0xd0, 0x30, 0x87, 0x76, 0x8e, 0xc6, 0x5e, 0x12, 0x31, 0xe4, 0x5a, 0x86,
-    0x77, 0xd7, 0xda, 0x1c, 0x85, 0x2a, 0xf7, 0x90, 0xe5, 0xf1, 0x70, 0x9d,
-    0xee, 0xe9, 0x1a, 0x2c, 0x5e, 0x89, 0xb4, 0xb1, 0x7f, 0xde, 0xfe, 0x00,
-    0x53, 0xd8, 0x6b, 0x17, 0xff, 0xfe, 0x67, 0xf4, 0xfc, 0xb3, 0xdf, 0x70,
-    0xe1, 0x3d, 0x1c, 0x80, 0xb1, 0x7e, 0xdf, 0x0f, 0x3c, 0x58, 0xbc, 0x22,
-    0x1a, 0xc5, 0xff, 0xd8, 0xfb, 0x1e, 0x59, 0xe0, 0xdc, 0x58, 0xbf, 0xcc,
-    0x00, 0xe3, 0x98, 0x80, 0xb1, 0x5f, 0x3f, 0xa2, 0x43, 0xbf, 0x9f, 0xdc,
-    0x1e, 0x12, 0xc5, 0xe9, 0xee, 0x0b, 0x17, 0xf3, 0xfb, 0x98, 0x6c, 0x50,
-    0x3c, 0xbd, 0x16, 0xdf, 0xfe, 0xcf, 0xe1, 0x7b, 0x99, 0xd0, 0xa7, 0xb5,
-    0x8a, 0x95, 0x50, 0x7d, 0x8f, 0x7c, 0xf1, 0x9b, 0x00, 0x53, 0xe8, 0x4b,
-    0xf4, 0x6c, 0x09, 0x1a, 0xe7, 0xed, 0x62, 0xf4, 0x97, 0x96, 0x2e, 0x7d,
-    0x2c, 0x56, 0xc6, 0xcf, 0x07, 0x2f, 0xdf, 0xef, 0x05, 0x12, 0xc5, 0xfe,
-    0x83, 0x9f, 0xfd, 0xb4, 0x7a, 0xc5, 0xfd, 0x23, 0x8e, 0xcd, 0x4a, 0xc5,
-    0xfc, 0x58, 0x3f, 0xcf, 0x45, 0x8a, 0xf9, 0xef, 0xf5, 0x18, 0x5f, 0x36,
-    0xa6, 0x0b, 0x17, 0xdd, 0xe0, 0xa2, 0x58, 0xbf, 0xf0, 0xa7, 0x46, 0xb0,
-    0x7e, 0x78, 0x2c, 0x5f, 0xf3, 0x76, 0x67, 0x7c, 0xc2, 0x35, 0x62, 0xf6,
-    0xed, 0xba, 0xc5, 0x6c, 0x9f, 0x60, 0xc8, 0x7b, 0x2b, 0x78, 0x4b, 0x9c,
-    0x97, 0xe4, 0x44, 0x4b, 0xe4, 0x11, 0x1e, 0xdf, 0x7e, 0x3d, 0xce, 0xb1,
-    0x78, 0xa4, 0x0b, 0x14, 0x61, 0xe1, 0x70, 0x9a, 0xfe, 0xf3, 0x1c, 0xf2,
-    0x75, 0x8b, 0x1f, 0x0f, 0x47, 0xb2, 0x3b, 0xfd, 0xdf, 0xf2, 0x2f, 0xbe,
-    0x96, 0x2f, 0xff, 0xe2, 0x6f, 0x31, 0xe0, 0xfe, 0xce, 0xfd, 0xf0, 0xf8,
-    0xb1, 0x52, 0x8b, 0xbc, 0x28, 0x63, 0x6b, 0xf3, 0x16, 0x77, 0x2b, 0x17,
-    0xfb, 0xf2, 0x7d, 0xfe, 0xf1, 0x2c, 0x5a, 0x63, 0x63, 0xdd, 0xec, 0x9e,
-    0xf9, 0xb9, 0xdb, 0x2c, 0x5f, 0xf4, 0x39, 0xf6, 0xde, 0x48, 0x6b, 0x16,
-    0xf2, 0xc5, 0xe0, 0x7b, 0xeb, 0x17, 0xe3, 0x3c, 0x6b, 0xf1, 0x62, 0xa0,
-    0x8b, 0x8e, 0xc8, 0xd8, 0xe8, 0x02, 0x5e, 0x1e, 0xbf, 0xff, 0xf6, 0xb0,
-    0x7c, 0x68, 0xf7, 0xef, 0xec, 0xf0, 0x91, 0xfc, 0x46, 0xac, 0x58, 0x0b,
-    0x14, 0xc8, 0xcd, 0xe2, 0x50, 0x6e, 0x37, 0x01, 0x96, 0x2f, 0xb7, 0xc6,
-    0x3a, 0xc5, 0x49, 0xba, 0x71, 0x7b, 0x04, 0xb1, 0x7b, 0x00, 0xcb, 0x16,
-    0xe3, 0x9a, 0xff, 0x89, 0xd4, 0x6c, 0xca, 0x3f, 0x99, 0x54, 0x50, 0x7a,
-    0xc9, 0x46, 0xef, 0x1e, 0x96, 0xa1, 0x14, 0xd1, 0xd9, 0x13, 0x57, 0x13,
-    0xaf, 0x71, 0xf7, 0x58, 0xbe, 0xc9, 0x17, 0x5e, 0xb1, 0x7b, 0x47, 0x8e,
-    0x58, 0xbf, 0x0f, 0x9c, 0x73, 0xac, 0x56, 0xc7, 0x94, 0x44, 0x37, 0xef,
-    0x36, 0xcc, 0x4b, 0x17, 0xed, 0xdb, 0x6c, 0x09, 0x62, 0xfd, 0x3a, 0x1e,
-    0x12, 0xc5, 0x0d, 0x30, 0xdc, 0x71, 0xec, 0x88, 0x8a, 0x3c, 0x57, 0x7e,
-    0x98, 0xe7, 0xf8, 0x96, 0x2e, 0xcd, 0xd6, 0x2e, 0x1e, 0xeb, 0x17, 0xc4,
-    0x58, 0x6a, 0xc5, 0x61, 0xbb, 0x10, 0xcd, 0x80, 0xb1, 0x7b, 0x4f, 0xf5,
-    0x8a, 0x82, 0x28, 0xb7, 0x53, 0x72, 0x02, 0x12, 0xbe, 0xfe, 0x01, 0x96,
-    0x2f, 0xba, 0xbc, 0xe6, 0xac, 0x5d, 0x21, 0xac, 0x54, 0x47, 0xc3, 0xc2,
-    0x28, 0xe2, 0x7b, 0xff, 0xa4, 0x13, 0xf3, 0x93, 0x1b, 0xf7, 0x58, 0xb4,
-    0x6c, 0xb1, 0x7f, 0xec, 0xd6, 0x78, 0x3c, 0xfb, 0x01, 0x62, 0xff, 0xfb,
-    0x08, 0xdc, 0xd6, 0xd2, 0x16, 0x7f, 0x09, 0x62, 0xfd, 0x24, 0x13, 0x76,
-    0xb1, 0x58, 0x7f, 0x3f, 0x50, 0xb0, 0x4b, 0x17, 0xfe, 0x28, 0xa7, 0x0b,
-    0x6c, 0xef, 0xcb, 0x17, 0xfe, 0x26, 0xf8, 0x7e, 0xf3, 0x43, 0x8b, 0x17,
-    0x6a, 0x56, 0x2d, 0xc1, 0x9e, 0xb9, 0xd0, 0x2f, 0xf8, 0xb3, 0xa3, 0x43,
-    0x8e, 0x35, 0x8a, 0xf1, 0xf1, 0x06, 0x51, 0x50, 0x54, 0x10, 0x38, 0x5c,
-    0x6e, 0x42, 0xc2, 0x65, 0x0f, 0x9b, 0xfd, 0xaf, 0x36, 0x9a, 0x3a, 0x56,
-    0x2f, 0x31, 0x01, 0x62, 0x8d, 0x3d, 0x2d, 0xcd, 0xaf, 0xde, 0xe7, 0x9f,
-    0x65, 0x8a, 0x93, 0xce, 0x62, 0x4b, 0xfe, 0xfc, 0xef, 0x20, 0x62, 0x02,
-    0xc5, 0xff, 0xd2, 0xe5, 0x3e, 0x7d, 0x3f, 0x84, 0xb1, 0x7f, 0x00, 0xcc,
-    0xe3, 0x12, 0xc5, 0xff, 0xc2, 0x92, 0x63, 0x62, 0x29, 0x07, 0x16, 0x28,
-    0x68, 0xee, 0xf9, 0xc9, 0x21, 0x78, 0xba, 0xfd, 0xd6, 0x8d, 0xcb, 0x75,
-    0x8a, 0x73, 0xea, 0x63, 0xcb, 0xe0, 0x9a, 0x4e, 0xb1, 0x7f, 0x70, 0x47,
-    0x9c, 0x1a, 0xc5, 0xf9, 0xb9, 0xb3, 0xe9, 0x62, 0xfb, 0x4e, 0x2d, 0x97,
-    0x27, 0xa9, 0x7b, 0x71, 0x6c, 0xb9, 0x3d, 0x4b, 0xff, 0x63, 0xf4, 0xc2,
-    0xc1, 0xb4, 0x17, 0x27, 0xa9, 0x7e, 0x62, 0xee, 0x11, 0x83, 0x45, 0x4f,
-    0x0c, 0x42, 0x2d, 0xb9, 0xba, 0x96, 0x28, 0x69, 0x9e, 0x9e, 0x1a, 0x44,
-    0xa3, 0x79, 0xcf, 0x2b, 0x17, 0xfb, 0x68, 0xce, 0x69, 0xe7, 0xcb, 0x17,
-    0x71, 0xd6, 0x2f, 0x33, 0x12, 0xc5, 0xe7, 0xf8, 0x96, 0x2c, 0x6f, 0x0f,
-    0x3f, 0xc2, 0xf1, 0xc3, 0x77, 0x88, 0x5b, 0x2c, 0x53, 0x1e, 0xbf, 0x8e,
-    0x6b, 0x15, 0x5d, 0xbc, 0x6d, 0x7a, 0x35, 0x61, 0xc2, 0x86, 0xf5, 0x46,
-    0x8c, 0xb3, 0x39, 0x8c, 0xac, 0x69, 0x59, 0x0c, 0xd7, 0x84, 0xee, 0x8c,
-    0xce, 0x88, 0xd2, 0x87, 0xca, 0x1e, 0xbc, 0x8d, 0xe3, 0xc4, 0x02, 0x95,
-    0xbd, 0x60, 0x96, 0x2f, 0xdc, 0xfe, 0x85, 0xd1, 0x62, 0xff, 0xe2, 0xfb,
-    0x70, 0xb0, 0xd3, 0x72, 0x3d, 0x62, 0xfe, 0x63, 0xfe, 0x70, 0x6b, 0x15,
-    0x87, 0xea, 0x49, 0x17, 0x75, 0x91, 0xa2, 0xc5, 0xfa, 0x70, 0xbd, 0xc5,
-    0x8b, 0xcf, 0x3a, 0x58, 0xb7, 0x96, 0x2a, 0x36, 0x3f, 0x73, 0x91, 0x7c,
-    0x9f, 0xc3, 0x97, 0xff, 0x69, 0xcf, 0x31, 0xe5, 0x87, 0xee, 0x56, 0x2a,
-    0x08, 0x88, 0x89, 0x06, 0xf9, 0xa1, 0x31, 0xeb, 0x17, 0x89, 0x86, 0xb1,
-    0x7b, 0x9b, 0x32, 0xc5, 0x39, 0xba, 0x0c, 0x72, 0xff, 0x79, 0xf5, 0x3b,
-    0xe7, 0x45, 0x8b, 0x8e, 0xeb, 0x17, 0xf4, 0x8d, 0xfa, 0x48, 0xd6, 0x2f,
-    0xde, 0x92, 0x98, 0x96, 0x2a, 0x51, 0x49, 0xb1, 0xb0, 0xc5, 0xd8, 0xbe,
-    0xfd, 0x87, 0xd3, 0x76, 0xb1, 0x5b, 0x27, 0x12, 0x35, 0xf2, 0x86, 0x2f,
-    0x0f, 0x2f, 0xd0, 0xce, 0x93, 0x05, 0x8b, 0xed, 0x77, 0x21, 0x2c, 0x5e,
-    0xcd, 0x4a, 0xc5, 0xfd, 0xa1, 0xe1, 0xa1, 0x9d, 0x62, 0xe6, 0x8f, 0x58,
-    0xbd, 0xd3, 0x06, 0xb1, 0x7f, 0x3c, 0xfa, 0x06, 0x8d, 0x62, 0xfe, 0xf9,
-    0x8d, 0x16, 0x7d, 0x62, 0xf1, 0x3e, 0xcb, 0x15, 0x05, 0xd0, 0x1d, 0xe1,
-    0x43, 0xdc, 0x63, 0xef, 0x1d, 0x6e, 0x90, 0xce, 0x55, 0xf2, 0x56, 0x1c,
-    0x23, 0x11, 0x0d, 0x04, 0x3e, 0x19, 0x7f, 0x51, 0x85, 0x82, 0x58, 0xbf,
-    0xce, 0x14, 0xb8, 0xf0, 0xeb, 0x16, 0x7c, 0x3c, 0x68, 0x84, 0xed, 0xd1,
-    0x62, 0xf3, 0xf7, 0x05, 0x8a, 0x73, 0x65, 0xf1, 0x4b, 0xc4, 0xd0, 0x58,
-    0xb4, 0x24, 0xde, 0x61, 0x05, 0xff, 0x8a, 0x77, 0xfc, 0xf4, 0xd0, 0x7c,
-    0x58, 0xbc, 0xda, 0xd9, 0x62, 0x96, 0x2c, 0x5b, 0x9a, 0xa8, 0x87, 0xaf,
-    0xf4, 0x39, 0xdc, 0x30, 0x46, 0xac, 0x5f, 0xc2, 0x6f, 0xe3, 0xec, 0xb1,
-    0x7d, 0x16, 0xa7, 0x65, 0x8a, 0x58, 0x63, 0x4b, 0x5b, 0x1f, 0x77, 0xd4,
-    0xef, 0xe7, 0xef, 0x9f, 0xcd, 0xd6, 0x2f, 0xbf, 0x8f, 0x12, 0xc5, 0xec,
-    0x91, 0xac, 0x5f, 0xd3, 0xd3, 0x3f, 0xf9, 0x58, 0xbf, 0x67, 0xb9, 0x91,
-    0x2c, 0x7c, 0xd7, 0xdf, 0xff, 0xff, 0x67, 0x7c, 0x7c, 0x08, 0xcc, 0xee,
-    0x1c, 0x7f, 0x71, 0xfb, 0x18, 0xc5, 0xb2, 0xc5, 0xff, 0xa7, 0x72, 0xc8,
-    0xbe, 0x2d, 0x44, 0xb1, 0x7f, 0xfe, 0x7d, 0x73, 0xc6, 0xcf, 0x70, 0xe7,
-    0x70, 0x93, 0x56, 0x29, 0x62, 0x9d, 0x32, 0xd2, 0x84, 0x27, 0x10, 0xba,
-    0x96, 0xef, 0xf4, 0x91, 0xbd, 0x5e, 0xcf, 0xac, 0x5f, 0xfb, 0x3b, 0x35,
-    0xb9, 0x84, 0xe6, 0xac, 0x5f, 0xff, 0x10, 0xcc, 0x0f, 0xcf, 0xc6, 0x72,
-    0x14, 0x16, 0x2a, 0x51, 0x22, 0xe8, 0x17, 0xcd, 0xb7, 0xdd, 0x62, 0x86,
-    0xb9, 0x63, 0x8d, 0xbd, 0x94, 0x3c, 0x29, 0x62, 0x23, 0xd1, 0x81, 0xc8,
-    0xc9, 0x2f, 0xd1, 0xb3, 0x09, 0x13, 0xa4, 0x32, 0x23, 0x88, 0x6f, 0x0b,
-    0x50, 0x58, 0xbf, 0xf1, 0xd8, 0x7a, 0x9f, 0x7f, 0x06, 0xb1, 0x7f, 0x37,
-    0x80, 0x19, 0x41, 0x62, 0xfc, 0xde, 0x0e, 0x39, 0x96, 0x2f, 0xdb, 0x6f,
-    0xf9, 0xd2, 0xc5, 0xfe, 0x66, 0x08, 0x0d, 0xee, 0x2c, 0x5c, 0x1f, 0x16,
-    0x28, 0x67, 0x9b, 0xf3, 0x4b, 0xe1, 0x45, 0x3d, 0xac, 0x5e, 0xc7, 0x89,
-    0x62, 0xff, 0xc3, 0x9f, 0x34, 0x33, 0xa3, 0x0d, 0x62, 0xe7, 0xd2, 0xc5,
-    0xcf, 0xb2, 0xc6, 0xc5, 0xbd, 0xfa, 0x48, 0x84, 0x75, 0x8b, 0x43, 0xc7,
-    0x9e, 0x19, 0x45, 0x18, 0xa9, 0x8e, 0x47, 0xb6, 0x3f, 0x81, 0x7e, 0x16,
-    0x1a, 0xf1, 0xb9, 0x14, 0x44, 0xa7, 0x1d, 0x68, 0x53, 0x5d, 0xcc, 0x58,
-    0xbf, 0xda, 0xd9, 0xf9, 0xfc, 0xe2, 0xc5, 0xdd, 0x7b, 0xac, 0x56, 0x1e,
-    0x8f, 0x0d, 0x6f, 0xcf, 0x18, 0x10, 0x41, 0x24, 0x5f, 0xf8, 0xd6, 0xec,
-    0xcf, 0xb1, 0xdf, 0x8b, 0x16, 0x98, 0x1f, 0x89, 0xcb, 0xee, 0xcf, 0xac,
-    0x5d, 0x9d, 0x7a, 0xc5, 0xd8, 0x35, 0x8b, 0xf7, 0x80, 0x19, 0x41, 0x62,
-    0x86, 0x7b, 0xa6, 0x8e, 0x30, 0xbd, 0xf9, 0xb5, 0xbc, 0xf9, 0x62, 0xe7,
-    0xd2, 0xc5, 0x7c, 0xf0, 0x04, 0x53, 0x6d, 0xd6, 0x2e, 0x61, 0xac, 0x5f,
-    0xda, 0x6e, 0x7d, 0xa0, 0xb1, 0x6e, 0xd6, 0x2e, 0x70, 0x96, 0x2e, 0x0c,
-    0x0b, 0x15, 0x11, 0xb1, 0x00, 0xc5, 0xe8, 0x30, 0xd6, 0x2e, 0x08, 0x25,
-    0x8a, 0x82, 0x38, 0xb0, 0x5f, 0x72, 0xe7, 0x44, 0xe1, 0x10, 0x43, 0xb7,
-    0x06, 0x04, 0x88, 0xc3, 0xd7, 0xa6, 0x4d, 0xe7, 0xd1, 0xa6, 0x5f, 0xc2,
-    0xee, 0x1e, 0x7e, 0xd6, 0x2f, 0xf6, 0x1d, 0xc7, 0xb0, 0xb8, 0xb1, 0x7f,
-    0xff, 0x02, 0x3b, 0x35, 0x3e, 0x7d, 0xdc, 0x7b, 0x49, 0x4a, 0xc5, 0xec,
-    0xef, 0xcb, 0x16, 0xc2, 0x3f, 0xce, 0x2f, 0x57, 0xd1, 0xaf, 0xc8, 0x58,
-    0xdf, 0xf3, 0x8f, 0x0e, 0xf1, 0x38, 0x4b, 0x17, 0xff, 0xd2, 0xfd, 0x83,
-    0x58, 0x39, 0xd3, 0xf6, 0x05, 0x8b, 0xe3, 0x7e, 0xd0, 0x58, 0xbd, 0x0f,
-    0xc8, 0xcf, 0xd5, 0xd4, 0x6f, 0xff, 0xf7, 0xd9, 0xfd, 0x30, 0x10, 0xf0,
-    0x3c, 0xd7, 0x85, 0xf5, 0x8b, 0x32, 0xc5, 0x49, 0xf9, 0xf1, 0x8a, 0xff,
-    0xf3, 0x0f, 0x30, 0x8d, 0xe7, 0x30, 0x80, 0xb1, 0x7d, 0xf1, 0x31, 0xb2,
-    0x9d, 0xf6, 0x42, 0xbf, 0x50, 0xa5, 0x39, 0x0d, 0xe2, 0x9f, 0xac, 0x5f,
-    0xff, 0xd0, 0x6e, 0x72, 0x73, 0x61, 0x40, 0x7a, 0x26, 0x09, 0x62, 0xff,
-    0xfc, 0xf0, 0x7f, 0x14, 0x80, 0x64, 0xdc, 0x84, 0x4b, 0x17, 0xfd, 0xed,
-    0x0a, 0x1d, 0xc3, 0x3c, 0xb1, 0x7f, 0xef, 0xfd, 0xc7, 0xfc, 0x37, 0x06,
-    0xb1, 0x7f, 0xd9, 0xcf, 0xb4, 0x07, 0xae, 0xbd, 0x62, 0x9d, 0x17, 0x6c,
-    0x78, 0x48, 0x14, 0x35, 0x42, 0x86, 0xaf, 0x38, 0xe0, 0x17, 0x7a, 0x46,
-    0x21, 0x7f, 0xbe, 0x7c, 0xe8, 0x59, 0xc5, 0x8b, 0xfb, 0x4d, 0x09, 0xd0,
-    0x16, 0x2f, 0xff, 0xf7, 0xda, 0x1f, 0x96, 0xd7, 0x39, 0x9f, 0x7e, 0x0b,
-    0x65, 0x8a, 0xd2, 0x24, 0x3e, 0x5d, 0x52, 0x8e, 0x8c, 0x86, 0x2d, 0xff,
-    0xf6, 0xa5, 0xa1, 0xa9, 0xfb, 0x3e, 0xf8, 0x4b, 0x15, 0x29, 0xd8, 0x42,
-    0x33, 0xc7, 0x26, 0xaf, 0xaf, 0x73, 0xf2, 0x30, 0x8f, 0x4e, 0xd5, 0x5f,
-    0xc7, 0x68, 0x6d, 0x14, 0x72, 0xc5, 0xf1, 0xf7, 0x84, 0xac, 0x58, 0x6b,
-    0x17, 0x47, 0xc1, 0x62, 0xb6, 0x35, 0xb0, 0x12, 0xbd, 0xf7, 0xe2, 0xc5,
-    0xd9, 0x2b, 0x17, 0x49, 0x2c, 0x54, 0x71, 0xac, 0x0c, 0x5a, 0xa5, 0x12,
-    0x10, 0x22, 0xf2, 0x4d, 0xfe, 0xce, 0x45, 0xf7, 0x0b, 0xcb, 0x17, 0xed,
-    0xb3, 0x08, 0xd5, 0x8a, 0x93, 0xdf, 0x63, 0x6b, 0xf9, 0xcf, 0xbe, 0x16,
-    0xeb, 0x17, 0xcd, 0xb7, 0x3e, 0xb1, 0x5a, 0x3d, 0x3e, 0x17, 0xd1, 0x8c,
-    0xc0, 0x78, 0x3a, 0x0d, 0xbf, 0xb8, 0xe6, 0xde, 0x7c, 0x40, 0xe8, 0x2c,
-    0x68, 0x50, 0xe1, 0xe4, 0x23, 0xbc, 0xe7, 0x6e, 0xb1, 0x62, 0xf3, 0x31,
-    0xd6, 0x2f, 0x7d, 0xfc, 0xb1, 0x6e, 0x9d, 0x69, 0xe8, 0x7c, 0x5c, 0x31,
-    0xcb, 0xfc, 0xc7, 0x79, 0x3e, 0x12, 0xc5, 0xfd, 0xf9, 0xd7, 0xb3, 0x75,
-    0x8a, 0x19, 0xf0, 0x78, 0xc6, 0xfd, 0x08, 0xe7, 0xf8, 0x96, 0x2b, 0x0f,
-    0x39, 0x88, 0xac, 0xcb, 0x17, 0x4f, 0x16, 0x28, 0xd3, 0x50, 0xc2, 0x37,
-    0xd8, 0x42, 0x89, 0x62, 0xf9, 0xfa, 0x48, 0xd6, 0x2f, 0xff, 0xdc, 0x6f,
-    0x70, 0xb3, 0x93, 0xd8, 0x3d, 0x9c, 0x58, 0xae, 0xd1, 0x3a, 0x72, 0x3f,
-    0x12, 0x5f, 0xf6, 0xff, 0x76, 0xdf, 0x9e, 0x75, 0x8b, 0xdc, 0x0c, 0xeb,
-    0x16, 0x61, 0x9e, 0xd7, 0x8e, 0xee, 0xd4, 0x4b, 0x16, 0x3a, 0xc5, 0xda,
-    0x95, 0x8a, 0x93, 0xc2, 0x18, 0xce, 0x09, 0x54, 0x68, 0xe8, 0x1c, 0xa6,
-    0x74, 0x52, 0x11, 0x88, 0x0e, 0x12, 0xb9, 0x39, 0xac, 0xf2, 0xc7, 0xf5,
-    0x09, 0x43, 0xb4, 0x7e, 0x12, 0x4d, 0x4c, 0x2e, 0x04, 0x3d, 0x8a, 0x1d,
-    0x7e, 0x48, 0x14, 0x2f, 0x82, 0x84, 0x5c, 0x73, 0x4d, 0xe8, 0xf6, 0x95,
-    0x8b, 0xe6, 0x86, 0xa5, 0x62, 0xcc, 0xb1, 0x4e, 0x7a, 0x44, 0x3f, 0xc2,
-    0x2b, 0xff, 0xff, 0xff, 0xfd, 0x1d, 0x87, 0x68, 0x3f, 0x01, 0x80, 0xfb,
-    0x3c, 0x24, 0x7f, 0x11, 0xb2, 0xe4, 0xde, 0x98, 0x37, 0x4f, 0xb4, 0x16,
-    0x2f, 0xdf, 0x7e, 0x99, 0xb2, 0xc5, 0x3a, 0x3a, 0x79, 0x0b, 0xeb, 0xff,
-    0xe8, 0x9e, 0x4c, 0x10, 0x64, 0xc3, 0xfe, 0x79, 0x62, 0xff, 0x0b, 0xdf,
-    0xcd, 0x3f, 0x16, 0x29, 0xd1, 0x0d, 0xf5, 0x2b, 0xfb, 0xee, 0x61, 0x00,
-    0x4b, 0x17, 0xd9, 0x87, 0x95, 0x8b, 0x71, 0x62, 0xe6, 0x89, 0x62, 0xfd,
-    0x87, 0x72, 0x02, 0xc5, 0x0c, 0xf4, 0x78, 0x24, 0x10, 0xc5, 0xc2, 0x95,
-    0x8b, 0xfe, 0x92, 0x88, 0x5f, 0x6f, 0xca, 0xc5, 0xf9, 0x9e, 0x0e, 0x35,
-    0x8b, 0xff, 0xe7, 0xe1, 0x67, 0x47, 0xf8, 0x8d, 0xc3, 0xba, 0xc5, 0xa7,
-    0xe7, 0xf1, 0xe2, 0x7a, 0xd9, 0x1d, 0xe3, 0x17, 0x28, 0x58, 0xdf, 0x1e,
-    0x7b, 0x82, 0xc5, 0xff, 0xb3, 0xa4, 0x8c, 0xb3, 0xd8, 0x05, 0x8b, 0xb0,
-    0x96, 0x2d, 0x9d, 0x9e, 0xaf, 0x43, 0xfb, 0xf7, 0xfd, 0x30, 0x3a, 0xc5,
-    0xc1, 0x81, 0x62, 0x9d, 0x1c, 0xba, 0x79, 0xf9, 0x50, 0x0a, 0x6e, 0xda,
-    0x0b, 0x16, 0x89, 0x62, 0xa4, 0xd6, 0x06, 0x33, 0x79, 0xc8, 0x6b, 0x17,
-    0xd3, 0xad, 0x84, 0xb1, 0x76, 0x0d, 0x62, 0xb6, 0x37, 0x64, 0x49, 0x7f,
-    0xc7, 0xcf, 0x48, 0x04, 0xc0, 0x58, 0xbf, 0xf9, 0xc6, 0xde, 0x7e, 0x64,
-    0x33, 0xeb, 0x17, 0x37, 0x52, 0xc5, 0xdd, 0xf9, 0x62, 0xfd, 0x9b, 0x1c,
-    0x5f, 0x58, 0xac, 0x3c, 0x32, 0x19, 0xaf, 0xa3, 0x03, 0xc8, 0x7d, 0x4b,
-    0xb7, 0xf6, 0x6a, 0x7d, 0xcc, 0x58, 0xbf, 0xfe, 0x6e, 0xe1, 0x30, 0xc1,
-    0xf2, 0x61, 0x24, 0xb1, 0x7f, 0xf7, 0x26, 0x18, 0x3e, 0xac, 0x2c, 0x02,
-    0xc5, 0x62, 0x3d, 0x5c, 0xcc, 0x8b, 0x7c, 0x9f, 0x7f, 0x71, 0xbe, 0xf2,
-    0x05, 0x8b, 0xf1, 0x7b, 0x98, 0x4b, 0x17, 0xff, 0x76, 0x0d, 0x33, 0x77,
-    0x0e, 0x06, 0x75, 0x8b, 0xf6, 0x7b, 0xd9, 0xb2, 0xc5, 0x80, 0xb1, 0x78,
-    0x32, 0x81, 0x1b, 0xb0, 0xca, 0x6f, 0xff, 0xff, 0x61, 0xaf, 0xf9, 0x3e,
-    0xd8, 0x16, 0x6b, 0x67, 0xe7, 0xf3, 0xd1, 0xd8, 0xb1, 0x7e, 0x62, 0xdc,
-    0x33, 0xac, 0x53, 0xa7, 0x0a, 0xc4, 0xe0, 0x84, 0x27, 0x0c, 0xfc, 0xfb,
-    0x7e, 0xd3, 0x74, 0xea, 0x65, 0x8a, 0x96, 0x50, 0xac, 0x23, 0x16, 0x1c,
-    0x2b, 0x4d, 0x22, 0xdc, 0xbf, 0xb7, 0x27, 0x8c, 0x7f, 0x51, 0x8d, 0x1d,
-    0xa3, 0xe4, 0x2c, 0xae, 0x02, 0x12, 0x8f, 0xbb, 0x87, 0x5e, 0x8e, 0xcb,
-    0xa2, 0x75, 0xfb, 0xac, 0x8d, 0xa3, 0x78, 0xef, 0x2c, 0x5f, 0xed, 0xbc,
-    0x7f, 0xe0, 0x19, 0x62, 0xfb, 0x09, 0xcd, 0x58, 0xa8, 0x22, 0x4c, 0xe7,
-    0x9d, 0x0d, 0x6d, 0xd4, 0xb1, 0x7f, 0xc6, 0x48, 0xdc, 0x9b, 0x46, 0xac,
-    0x56, 0xe7, 0x9e, 0x01, 0x5b, 0xdc, 0x87, 0xd6, 0x28, 0x8f, 0x07, 0xc4,
-    0x77, 0xfe, 0x6f, 0xc6, 0x61, 0xd9, 0x8a, 0x0b, 0x17, 0xff, 0xee, 0x13,
-    0x73, 0xf9, 0x0c, 0xfb, 0xeb, 0xec, 0xb1, 0x7f, 0x8d, 0x2c, 0xff, 0xe7,
-    0xcb, 0x17, 0x31, 0xab, 0x14, 0xe7, 0x98, 0xc6, 0x97, 0xd9, 0xe7, 0xe2,
-    0xc5, 0x18, 0x99, 0x17, 0x68, 0x1a, 0x85, 0x01, 0x10, 0x5f, 0x67, 0x7b,
-    0x74, 0x58, 0xbf, 0x82, 0xe4, 0xfa, 0x46, 0xb1, 0x7b, 0xd1, 0x1d, 0x62,
-    0xa4, 0xf3, 0xb0, 0xbe, 0xff, 0x70, 0x6c, 0x79, 0xf6, 0xeb, 0x17, 0xf8,
-    0x78, 0x42, 0x86, 0x71, 0x62, 0xbb, 0x3e, 0x82, 0x35, 0xbd, 0xc1, 0x01,
-    0x62, 0xd8, 0xb1, 0x5d, 0x9a, 0xfe, 0x83, 0xd7, 0x16, 0xeb, 0x15, 0x26,
-    0xf1, 0x89, 0x2f, 0xf0, 0x7e, 0x2c, 0xd9, 0xf4, 0xb1, 0x7a, 0x5c, 0x6b,
-    0x17, 0xdf, 0x90, 0x04, 0xb1, 0x7f, 0xfd, 0xb8, 0xdc, 0xb6, 0xe7, 0xbb,
-    0xdd, 0xff, 0x12, 0xc5, 0xc3, 0xed, 0x62, 0xe2, 0xdf, 0x0f, 0xbc, 0xd5,
-    0x6b, 0xe6, 0xea, 0xc2, 0x58, 0xbc, 0xfc, 0x75, 0x8a, 0x1a, 0x60, 0x2d,
-    0x09, 0x3e, 0x17, 0x78, 0x92, 0xfe, 0xcd, 0xe7, 0xf2, 0x75, 0x8a, 0x95,
-    0xdb, 0x4c, 0x86, 0x13, 0xc6, 0x87, 0xa4, 0x43, 0xba, 0xb4, 0x22, 0x01,
-    0x08, 0xd2, 0x1f, 0xe1, 0xa8, 0xa3, 0x1d, 0x09, 0x0a, 0xff, 0xd2, 0x18,
-    0x05, 0x08, 0x37, 0xc4, 0xb1, 0x7b, 0x30, 0xd5, 0x8b, 0xe8, 0x48, 0x38,
-    0xb1, 0x43, 0x3c, 0x0c, 0x1d, 0xad, 0x91, 0x45, 0xdc, 0x20, 0x6f, 0xbc,
-    0x26, 0x25, 0x8b, 0xff, 0xf1, 0xe2, 0xd4, 0xff, 0x3d, 0x30, 0x6e, 0x83,
-    0x95, 0x8b, 0xb3, 0x4b, 0x17, 0xee, 0x3b, 0x31, 0xab, 0x14, 0x61, 0xbf,
-    0xec, 0x5e, 0xff, 0xff, 0xd8, 0x37, 0xe6, 0x77, 0xe3, 0xb1, 0x1b, 0xfc,
-    0xce, 0x72, 0x56, 0x2f, 0xf4, 0x91, 0x8f, 0xef, 0xca, 0xc5, 0xf8, 0x7f,
-    0x90, 0x09, 0x62, 0xe9, 0x82, 0xc5, 0xb5, 0x03, 0xc0, 0xd1, 0x4d, 0xef,
-    0xb4, 0x4b, 0x17, 0xff, 0xe6, 0xe7, 0x31, 0xb7, 0xf7, 0xd8, 0xfa, 0xcd,
-    0x96, 0x2f, 0xf3, 0x8d, 0xfa, 0xf9, 0x27, 0x58, 0xbf, 0xee, 0x7b, 0x99,
-    0x11, 0x48, 0xd6, 0x2a, 0x55, 0x53, 0x6d, 0x09, 0x78, 0x11, 0x8d, 0xb3,
-    0x1c, 0xf7, 0x28, 0xd0, 0xf7, 0xd5, 0xfc, 0x6d, 0x7f, 0xfc, 0xe6, 0xe3,
-    0x9f, 0x52, 0x2e, 0xbd, 0xbf, 0xc5, 0x8b, 0xfc, 0xd0, 0xc1, 0xeb, 0x9c,
-    0x58, 0xbd, 0x81, 0x8d, 0x62, 0xff, 0xd3, 0xb0, 0x70, 0x9e, 0x8e, 0x40,
-    0x58, 0xbf, 0xec, 0xdb, 0xf9, 0x17, 0xdc, 0xd5, 0x8b, 0xfb, 0x3b, 0x06,
-    0x7b, 0x8b, 0x17, 0xe9, 0x2e, 0xe1, 0xc5, 0x8f, 0x9a, 0xfa, 0x94, 0xc1,
-    0x06, 0x3c, 0x48, 0x42, 0x6b, 0xbf, 0xfe, 0x9c, 0xe6, 0x17, 0xbf, 0x83,
-    0x17, 0xb8, 0xb1, 0x74, 0xfd, 0x62, 0x88, 0xf9, 0xb8, 0x9f, 0x7f, 0xfe,
-    0xcd, 0xdb, 0xc6, 0x66, 0xb6, 0x3e, 0x73, 0x92, 0xb1, 0x50, 0x3f, 0x9f,
-    0x10, 0xde, 0x3c, 0xc1, 0x62, 0xf6, 0xbb, 0x65, 0x8b, 0xef, 0xfe, 0x49,
-    0x62, 0x8e, 0x78, 0x1c, 0x1e, 0xbf, 0x9f, 0xcd, 0xf0, 0xa3, 0xd6, 0x2f,
-    0xff, 0xff, 0xfe, 0xd6, 0x03, 0xdf, 0x63, 0x99, 0xc1, 0x3c, 0x04, 0x6f,
-    0xda, 0x06, 0x78, 0x5e, 0x7f, 0x73, 0xee, 0xb1, 0x7c, 0xe6, 0xe0, 0xd6,
-    0x2f, 0x1b, 0x83, 0x58, 0xbb, 0x0e, 0x61, 0xe0, 0xb9, 0x1d, 0x6c, 0x9e,
-    0x26, 0x2e, 0x9a, 0x45, 0xa3, 0x2f, 0x43, 0x9a, 0xfd, 0xb4, 0x76, 0x6a,
-    0x56, 0x2f, 0xfe, 0x6d, 0x6d, 0xf7, 0xd6, 0x17, 0x7b, 0xac, 0x54, 0x9f,
-    0x9c, 0x0b, 0x2f, 0xe8, 0xbf, 0x9c, 0x62, 0x58, 0xbf, 0xbb, 0x80, 0x7c,
-    0x9c, 0x58, 0xac, 0x3d, 0xe7, 0x2e, 0xbc, 0x07, 0xfa, 0xc5, 0xff, 0x87,
-    0x9d, 0xc3, 0x9e, 0xe3, 0x01, 0x62, 0xb4, 0x7f, 0xc0, 0x20, 0x10, 0xed,
-    0xe7, 0x8e, 0x95, 0x8b, 0xfb, 0x9f, 0x68, 0x43, 0xeb, 0x14, 0xc7, 0x9c,
-    0x21, 0xfb, 0xee, 0x73, 0x02, 0x58, 0xbf, 0xf0, 0x7d, 0x99, 0xf6, 0xef,
-    0xc1, 0x81, 0x62, 0xff, 0x04, 0x3f, 0xe7, 0x4c, 0xd2, 0xc5, 0xfe, 0xc2,
-    0xfe, 0x7a, 0x46, 0xb1, 0x7f, 0xf3, 0x9c, 0xcd, 0xfe, 0xff, 0xdd, 0xf8,
-    0xb1, 0x7f, 0xb2, 0x18, 0x2e, 0xbd, 0x89, 0x62, 0xff, 0xe9, 0x87, 0xe7,
-    0xbf, 0x4f, 0xda, 0x3d, 0x62, 0xff, 0xb7, 0xc2, 0x33, 0x9c, 0x78, 0x96,
-    0x2f, 0xdd, 0xe7, 0x9f, 0x8b, 0x14, 0xe7, 0xca, 0xc7, 0x97, 0xff, 0xfd,
-    0xb6, 0x74, 0x2c, 0xe6, 0x0f, 0xf8, 0x43, 0xd3, 0xf7, 0x05, 0x8b, 0xf8,
-    0x1c, 0xf1, 0x64, 0x16, 0x2b, 0x11, 0x2e, 0xcd, 0x35, 0x2a, 0x9b, 0x5c,
-    0xdf, 0x46, 0x5f, 0x48, 0x23, 0x7e, 0x42, 0xb7, 0xd0, 0xb7, 0xbf, 0xff,
-    0xce, 0x59, 0xdf, 0x8d, 0x6f, 0x7e, 0x7f, 0x9d, 0x1a, 0x0b, 0x17, 0xcc,
-    0x0f, 0x75, 0xeb, 0x17, 0xfb, 0x0f, 0x14, 0x18, 0xb6, 0x58, 0xbd, 0x98,
-    0x4b, 0x15, 0xb3, 0x2c, 0x30, 0x6a, 0xbb, 0xc6, 0x71, 0xdc, 0x63, 0x6f,
-    0x1f, 0x34, 0x50, 0xc4, 0xd4, 0x3f, 0x4e, 0xfb, 0xf2, 0x10, 0x12, 0x7a,
-    0x55, 0x9f, 0x46, 0xd0, 0x98, 0xc3, 0x28, 0xea, 0x35, 0xbf, 0x8b, 0x36,
-    0xda, 0x63, 0xd6, 0x2f, 0xc7, 0xf1, 0x64, 0x16, 0x2f, 0xfa, 0x47, 0xfc,
-    0xde, 0x5b, 0xeb, 0x17, 0xfd, 0x3a, 0xe1, 0x61, 0xe7, 0x75, 0x8b, 0xb7,
-    0xfa, 0xc5, 0xec, 0x1c, 0x6c, 0xb1, 0x71, 0x4a, 0xc5, 0xfb, 0x9f, 0x90,
-    0xb8, 0xb1, 0x7f, 0x1b, 0xdf, 0xbe, 0xff, 0x58, 0xa1, 0x9e, 0xde, 0x8a,
-    0xaf, 0xf3, 0xea, 0x7a, 0x03, 0x90, 0x58, 0xbf, 0xff, 0xc2, 0x3b, 0xf0,
-    0xb3, 0x5a, 0xc8, 0xbf, 0x9a, 0xce, 0xd6, 0x28, 0x68, 0x98, 0xd1, 0xb5,
-    0xd2, 0x75, 0x8a, 0x93, 0x75, 0xf2, 0x3a, 0x82, 0x74, 0xff, 0x22, 0x67,
-    0x1f, 0x43, 0xd2, 0xff, 0xb8, 0xdf, 0x71, 0xee, 0xfb, 0x2c, 0x5f, 0xe6,
-    0x86, 0x0f, 0x9c, 0x95, 0x8b, 0xfb, 0xdf, 0x93, 0xc4, 0x4b, 0x15, 0x28,
-    0x9d, 0xc3, 0xb0, 0x19, 0xd4, 0x6e, 0xd9, 0x77, 0xcc, 0xac, 0x8c, 0xa5,
-    0xc8, 0x9b, 0x0f, 0xdd, 0xcc, 0xbb, 0x28, 0x73, 0x9d, 0x1c, 0xb4, 0x78,
-    0x02, 0x86, 0xfd, 0xc5, 0xe5, 0x8b, 0xc2, 0xd6, 0xcb, 0x17, 0xff, 0xfa,
-    0x79, 0x80, 0xe4, 0xb9, 0x4f, 0xdc, 0x5d, 0x7c, 0x9d, 0x62, 0xfd, 0x22,
-    0xe3, 0xf4, 0x58, 0xb8, 0x46, 0xac, 0x5c, 0x37, 0xd1, 0xe1, 0xfc, 0xaa,
-    0xf6, 0xe2, 0x95, 0x8b, 0xc1, 0x37, 0xd6, 0x2f, 0x60, 0x19, 0x62, 0xa5,
-    0x36, 0x18, 0x0b, 0x8c, 0x7f, 0x21, 0x4c, 0xe5, 0xba, 0x1e, 0xf8, 0xf5,
-    0xf6, 0x0b, 0x5b, 0x2c, 0x5f, 0xfb, 0xa3, 0xf8, 0x02, 0x2e, 0x38, 0xd6,
-    0x2f, 0xd2, 0xe3, 0x68, 0x96, 0x2f, 0xd3, 0xdf, 0xa7, 0x4b, 0x17, 0xec,
-    0xe7, 0xc5, 0xb2, 0xc5, 0xb4, 0x62, 0x38, 0x30, 0x92, 0x24, 0x13, 0x94,
-    0x7c, 0xa6, 0xff, 0xff, 0x34, 0x03, 0x87, 0xf0, 0x5d, 0x7e, 0x11, 0xa4,
-    0x59, 0x12, 0xc5, 0x4a, 0x2e, 0x0e, 0xa3, 0x71, 0xdd, 0x62, 0xff, 0x8c,
-    0x19, 0x31, 0xa6, 0xb0, 0x4b, 0x17, 0xfd, 0x83, 0xce, 0xe0, 0x1f, 0x00,
-    0xb1, 0x7e, 0x7d, 0x42, 0x29, 0x58, 0xbf, 0xfb, 0xf8, 0x4c, 0x6f, 0xdf,
-    0xd0, 0x75, 0x8a, 0xd2, 0x2a, 0x7e, 0x79, 0xc2, 0x9a, 0x94, 0xcb, 0x70,
-    0x5d, 0xe1, 0xcd, 0x7f, 0xc4, 0x68, 0x7a, 0xce, 0x8d, 0xa5, 0x8b, 0xdb,
-    0x3e, 0x96, 0x29, 0xcf, 0x6c, 0x8f, 0x6f, 0xf9, 0xb9, 0xe2, 0xce, 0x60,
-    0xd6, 0x2b, 0x0f, 0x60, 0x44, 0x16, 0x75, 0x8a, 0xf9, 0xb2, 0x8e, 0x21,
-    0xbf, 0xfe, 0x16, 0xe1, 0xf6, 0x06, 0xe3, 0x69, 0xfb, 0x02, 0xc5, 0xfa,
-    0x7e, 0x58, 0x6a, 0xc5, 0x39, 0xfe, 0xfd, 0x56, 0xfd, 0x31, 0x7d, 0xf4,
-    0xb1, 0x7f, 0xb5, 0xbf, 0xdc, 0xa6, 0x0b, 0x17, 0xef, 0x72, 0x41, 0xb2,
-    0xc5, 0x49, 0xef, 0x08, 0xd2, 0xff, 0xf6, 0x0e, 0x61, 0x3c, 0xe6, 0x42,
-    0x12, 0xb1, 0x7c, 0xda, 0x98, 0x2c, 0x5e, 0x6c, 0xfa, 0xc5, 0xff, 0xf3,
-    0x39, 0x03, 0x53, 0xf6, 0x7f, 0x4f, 0xd6, 0x2c, 0xf0, 0x3e, 0x92, 0x1c,
-    0xbf, 0xfc, 0xc4, 0x03, 0x39, 0xc9, 0x8a, 0x0f, 0x12, 0xc5, 0x0d, 0x36,
-    0x83, 0x90, 0x92, 0x4f, 0xa1, 0x17, 0x1c, 0x4d, 0x7f, 0xff, 0xe9, 0xef,
-    0x83, 0xfc, 0xf6, 0x32, 0x90, 0xa2, 0x90, 0x37, 0xb8, 0xb1, 0x7f, 0xff,
-    0x4f, 0x9f, 0x77, 0x1f, 0x1b, 0xb8, 0x61, 0x60, 0xd6, 0x2f, 0xcf, 0xee,
-    0x0b, 0x65, 0x8b, 0xff, 0x39, 0xe7, 0xd9, 0xd8, 0x0f, 0x2b, 0x17, 0xfe,
-    0x80, 0x63, 0x6d, 0xb0, 0xed, 0xc5, 0x8b, 0xfe, 0x84, 0xfe, 0x7d, 0xf6,
-    0x3a, 0xc5, 0x49, 0xfd, 0x09, 0x06, 0xff, 0xf1, 0x38, 0x3d, 0xde, 0xef,
-    0xa0, 0xe4, 0x6b, 0x17, 0xf8, 0x9f, 0x37, 0x9f, 0x71, 0x62, 0xff, 0xbe,
-    0x18, 0xc5, 0xee, 0x02, 0x56, 0x2a, 0x51, 0x78, 0xe9, 0xac, 0x67, 0x7f,
-    0xfe, 0x7e, 0xe0, 0x53, 0xfc, 0xe9, 0x3d, 0xff, 0x36, 0x58, 0xbd, 0xe7,
-    0xd9, 0x62, 0x86, 0xbb, 0x23, 0xb9, 0x0b, 0xc7, 0xdf, 0x12, 0x96, 0x9c,
-    0x0e, 0xb7, 0xf2, 0xa2, 0x85, 0xcf, 0xa1, 0xbb, 0xd0, 0xb4, 0x35, 0x9b,
-    0xfc, 0xc3, 0xdf, 0xe2, 0x60, 0xd6, 0x2f, 0x7d, 0xfe, 0xb1, 0x7a, 0x0d,
-    0xa5, 0x8b, 0xf0, 0xa4, 0xbd, 0xc5, 0x8b, 0xc7, 0xc1, 0xac, 0x5f, 0xff,
-    0x00, 0xf8, 0x7c, 0x26, 0x3c, 0xc0, 0x3e, 0x2c, 0x5c, 0x39, 0x58, 0xbf,
-    0x01, 0x9c, 0x6e, 0xb1, 0x52, 0x6f, 0x98, 0x5e, 0xfe, 0xee, 0x0d, 0x9d,
-    0xf9, 0x62, 0xf1, 0xb9, 0xd4, 0xb1, 0x7e, 0x9e, 0xf0, 0x2e, 0x2c, 0x54,
-    0x9f, 0xdb, 0x98, 0x11, 0x0d, 0xf3, 0x1f, 0x8c, 0xb1, 0x7f, 0xe9, 0x2d,
-    0xcc, 0xf7, 0xa7, 0xb8, 0x2c, 0x5e, 0x93, 0xca, 0xc5, 0xfe, 0x67, 0xdc,
-    0x9b, 0x37, 0x58, 0xbf, 0x4f, 0xbe, 0xd1, 0x2c, 0x70, 0xd9, 0xd4, 0xaa,
-    0xa2, 0xd8, 0x74, 0x65, 0x1d, 0x8e, 0xea, 0x11, 0xc5, 0x09, 0xae, 0x16,
-    0x78, 0x8b, 0xa2, 0x14, 0x72, 0x7d, 0xfb, 0x42, 0xdf, 0xf2, 0xb1, 0x7f,
-    0x6a, 0x28, 0x3f, 0xb8, 0xb1, 0x52, 0x7b, 0x58, 0x55, 0x73, 0x04, 0xb1,
-    0x44, 0x6e, 0x02, 0x20, 0xb7, 0x16, 0x2f, 0x44, 0xe1, 0x2c, 0x5d, 0x9a,
-    0x93, 0x62, 0xe2, 0x57, 0xfa, 0x26, 0x89, 0xbb, 0x87, 0x16, 0x2f, 0xe6,
-    0xd9, 0xe2, 0x70, 0x96, 0x2f, 0xfc, 0xf2, 0x69, 0x8f, 0xe6, 0x0e, 0x3d,
-    0x62, 0xff, 0xfb, 0x3e, 0x60, 0xf2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2e,
-    0x60, 0x89, 0x13, 0x1e, 0x44, 0xa9, 0x4d, 0x5f, 0x0a, 0x98, 0xdc, 0xa1,
-    0x91, 0x7e, 0xc2, 0xdb, 0x02, 0x58, 0xbf, 0x31, 0xfe, 0xe1, 0x2c, 0x56,
-    0xc7, 0xa4, 0x32, 0x9b, 0xff, 0xa7, 0xd8, 0x4e, 0x68, 0x0f, 0x30, 0x58,
-    0xbf, 0xe9, 0xd8, 0x38, 0x7c, 0x4d, 0xb2, 0xc5, 0xfe, 0x6f, 0x73, 0x7d,
-    0xdf, 0xb5, 0x8b, 0xfe, 0x7d, 0xf2, 0x26, 0x2d, 0xba, 0xd5, 0x8a, 0xc4,
-    0xc6, 0xdc, 0x8f, 0x48, 0x8c, 0x7a, 0x46, 0xf6, 0x8d, 0x96, 0x2f, 0xd3,
-    0xad, 0x67, 0xd6, 0x2f, 0xfe, 0x9c, 0x2f, 0xcb, 0x81, 0xbc, 0x25, 0x8b,
-    0xcd, 0x0f, 0x2c, 0x5f, 0xff, 0x49, 0xa1, 0x63, 0xf4, 0x09, 0x87, 0x38,
-    0x75, 0x8b, 0xf8, 0x98, 0xd9, 0x3c, 0xac, 0x57, 0x5a, 0x98, 0xf4, 0x05,
-    0xf4, 0x50, 0x74, 0x22, 0x1d, 0x12, 0x9d, 0xc6, 0x9a, 0xb1, 0x7f, 0xd0,
-    0x6c, 0x21, 0x78, 0x46, 0xac, 0x5f, 0xc4, 0xdb, 0xe1, 0x6e, 0xb1, 0x7f,
-    0xff, 0xd9, 0xec, 0xe9, 0xfc, 0x3b, 0x04, 0x79, 0xff, 0xb1, 0xfa, 0x2c,
-    0x56, 0xc8, 0xec, 0xc1, 0xa7, 0x3a, 0x22, 0xeb, 0xd1, 0xaa, 0x3c, 0x0b,
-    0x17, 0xff, 0xf0, 0x9b, 0x50, 0x33, 0xf9, 0x14, 0xfb, 0x0f, 0x3f, 0x58,
-    0xbf, 0xee, 0x9d, 0xe3, 0xfb, 0xb8, 0x71, 0x62, 0xfa, 0x2e, 0x92, 0x4b,
-    0x17, 0xf4, 0x9d, 0xc8, 0x04, 0xb1, 0x7f, 0x71, 0x98, 0x36, 0x0d, 0x62,
-    0xf7, 0xe4, 0x96, 0x2f, 0xa0, 0x21, 0xc6, 0x46, 0x89, 0xaf, 0x0c, 0x9f,
-    0x17, 0x48, 0xfb, 0x84, 0xbe, 0x2c, 0x0c, 0xbe, 0xfc, 0xf3, 0x11, 0x4a,
-    0xc5, 0xd9, 0xf5, 0x8b, 0xc6, 0xb1, 0xd6, 0x2f, 0x1d, 0xbb, 0xeb, 0x0d,
-    0xab, 0x0b, 0xde, 0x09, 0xb8, 0xb1, 0x7f, 0x1e, 0x70, 0xbd, 0xc5, 0x8b,
-    0xf4, 0xed, 0x90, 0x75, 0x8b, 0xfd, 0x25, 0x8f, 0xb3, 0x71, 0x62, 0xf0,
-    0x63, 0x8c, 0x82, 0x67, 0x18, 0xb9, 0xf3, 0x7e, 0x0f, 0x78, 0xb4, 0x32,
-    0x8b, 0xe9, 0xce, 0xe0, 0xb1, 0x51, 0x2a, 0x4d, 0xfc, 0x77, 0x80, 0x6e,
-    0xbf, 0xdb, 0x3e, 0xfd, 0xc2, 0x7a, 0x96, 0x2f, 0xbc, 0x16, 0xdb, 0x2c,
-    0x56, 0xc7, 0xc3, 0x87, 0x57, 0xdf, 0xfe, 0x76, 0xb1, 0x7f, 0x30, 0xe4,
-    0xa4, 0x0b, 0x17, 0xcf, 0xcc, 0x1c, 0x9e, 0x84, 0x71, 0x25, 0xf9, 0xb9,
-    0xec, 0xfa, 0xc5, 0xbe, 0xb1, 0x7f, 0xe1, 0x0d, 0x88, 0x1e, 0x7e, 0xf8,
-    0xb1, 0x7f, 0xfb, 0x05, 0xd7, 0x99, 0x90, 0xfe, 0x3c, 0x38, 0xb1, 0x7f,
-    0xff, 0xb4, 0xdc, 0x0f, 0xc5, 0x9d, 0x18, 0x03, 0xd1, 0x30, 0x4b, 0x16,
-    0xf4, 0x11, 0xe9, 0xc4, 0x01, 0x28, 0x5e, 0xfb, 0x0d, 0x62, 0xff, 0x9e,
-    0x4e, 0x66, 0x0d, 0xfa, 0x2c, 0x56, 0x27, 0x28, 0xf1, 0x83, 0x7c, 0xdb,
-    0x83, 0xb7, 0xc6, 0x79, 0xce, 0xb1, 0x52, 0xbe, 0x9c, 0x39, 0x7c, 0xd9,
-    0x09, 0xad, 0xdc, 0x9c, 0xe9, 0xa3, 0xbc, 0x12, 0x15, 0xf0, 0xa1, 0xf7,
-    0x58, 0xbf, 0xff, 0x3e, 0xf2, 0x7e, 0x36, 0xb0, 0xe2, 0xdd, 0xa0, 0xb1,
-    0x7f, 0xcd, 0xa6, 0xf3, 0xe9, 0x80, 0xb1, 0x73, 0xf4, 0x58, 0xbf, 0xd2,
-    0x4d, 0xf1, 0x16, 0xcb, 0x17, 0xfe, 0x73, 0x64, 0x6e, 0x4d, 0xa3, 0x56,
-    0x2f, 0xff, 0x67, 0x7e, 0xef, 0xce, 0x16, 0x0d, 0xa0, 0xb1, 0x58, 0x88,
-    0xc0, 0x1f, 0xdb, 0xeb, 0x17, 0xf3, 0xe8, 0x07, 0x7e, 0x2c, 0x56, 0xc9,
-    0xf6, 0x40, 0x8f, 0x75, 0x78, 0xf3, 0x83, 0x8c, 0x94, 0x2f, 0xc4, 0x45,
-    0x1c, 0x25, 0x78, 0xfc, 0x25, 0x8b, 0xff, 0xff, 0xbb, 0xe6, 0x41, 0xfd,
-    0xfc, 0x20, 0x02, 0x7e, 0x58, 0x36, 0x3a, 0xc5, 0xff, 0xfe, 0xfb, 0x8e,
-    0x70, 0xa7, 0xcd, 0xcc, 0xff, 0xdc, 0xeb, 0x17, 0xff, 0xde, 0x93, 0xcf,
-    0x9b, 0x99, 0xff, 0xb9, 0xd6, 0x2f, 0xfe, 0xf3, 0xfc, 0x5e, 0x26, 0x00,
-    0x19, 0x62, 0xe6, 0x86, 0xe8, 0xf1, 0xed, 0x78, 0x34, 0xfb, 0xef, 0x76,
-    0xdf, 0x58, 0xa9, 0x4f, 0x85, 0xc7, 0x4a, 0x36, 0x2f, 0x1f, 0x5d, 0x27,
-    0x58, 0xbf, 0xfb, 0x99, 0xdf, 0x9b, 0xd1, 0x33, 0x69, 0x62, 0x86, 0x7b,
-    0xbe, 0x17, 0xbf, 0xff, 0xf8, 0x9b, 0x6f, 0x09, 0xbb, 0xf3, 0x84, 0x1f,
-    0x9c, 0x85, 0x0c, 0xe2, 0xc5, 0xfc, 0x0c, 0x8a, 0x7b, 0xe2, 0xc5, 0xff,
-    0xed, 0xdb, 0x5b, 0x7b, 0x98, 0x10, 0xdc, 0xeb, 0x17, 0xfd, 0x85, 0xb9,
-    0x98, 0x37, 0xe8, 0xb1, 0x7f, 0xb0, 0xe6, 0x39, 0xb8, 0x35, 0x8a, 0xf9,
-    0xf8, 0xf8, 0xf2, 0xec, 0x09, 0x62, 0xff, 0xfe, 0x60, 0xbf, 0x87, 0x60,
-    0xbd, 0xcc, 0x08, 0x6e, 0x75, 0x8a, 0xd1, 0xfb, 0x10, 0xc5, 0xef, 0xe4,
-    0x4b, 0x17, 0xfc, 0x2d, 0x33, 0x43, 0xd9, 0xf5, 0x8b, 0xf0, 0x3b, 0x84,
-    0xf5, 0x2c, 0x5f, 0xd9, 0xac, 0x8a, 0x4d, 0x58, 0xac, 0x3d, 0xcf, 0x16,
-    0xdf, 0xff, 0xfd, 0xcf, 0xcf, 0xe5, 0xfb, 0x06, 0xb0, 0x73, 0xee, 0x39,
-    0x77, 0x05, 0x8a, 0x1a, 0xb6, 0x4c, 0x75, 0xdc, 0xc1, 0xe1, 0x7f, 0x14,
-    0x26, 0x3e, 0x43, 0xc1, 0xef, 0x42, 0x54, 0x22, 0x1b, 0xc3, 0x73, 0xac,
-    0x5f, 0xee, 0xf7, 0x7c, 0xfe, 0xb8, 0xb1, 0x7f, 0xc4, 0xe7, 0x31, 0xc0,
-    0x18, 0x16, 0x2b, 0x63, 0xf1, 0x23, 0x6b, 0xfc, 0x69, 0x66, 0xdb, 0x08,
-    0x96, 0x2a, 0x57, 0x3f, 0x32, 0x5c, 0x33, 0xc2, 0x41, 0xa1, 0x1c, 0x22,
-    0x2b, 0xc0, 0xf7, 0x5e, 0xb1, 0x7a, 0x0f, 0xa5, 0x8b, 0xfe, 0xc2, 0x70,
-    0xbf, 0x80, 0x65, 0x8b, 0xff, 0x87, 0x27, 0xe1, 0x37, 0xf3, 0x58, 0xb1,
-    0x7f, 0x7d, 0xa1, 0x3c, 0x82, 0xc5, 0xfe, 0xfb, 0xf7, 0xcf, 0x8b, 0x8b,
-    0x17, 0xec, 0xef, 0x77, 0xed, 0x62, 0xb0, 0xf8, 0x48, 0xda, 0xb7, 0x45,
-    0x78, 0x21, 0x1f, 0x5d, 0xa6, 0xe1, 0xa1, 0xdf, 0x9c, 0x14, 0x3c, 0xaa,
-    0x53, 0xd6, 0xc8, 0xe4, 0xef, 0xfe, 0x03, 0xff, 0x8d, 0xbf, 0xe6, 0x3c,
-    0x6b, 0x17, 0xff, 0xe6, 0x8f, 0x32, 0x38, 0x52, 0x66, 0x70, 0x84, 0xdb,
-    0x2c, 0x50, 0x11, 0x4e, 0x24, 0x9b, 0xff, 0xfb, 0x71, 0x37, 0x7e, 0x30,
-    0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xee, 0x33, 0xec, 0xb1, 0x7b, 0x9b,
-    0x4a, 0xc5, 0x6c, 0x78, 0x38, 0x47, 0x77, 0x5b, 0x12, 0xc5, 0xff, 0xfd,
-    0xec, 0xe8, 0x64, 0x70, 0xa4, 0xcc, 0xe1, 0x09, 0xb6, 0x58, 0xbf, 0xe8,
-    0x4f, 0xbd, 0x2c, 0x7d, 0x96, 0x2f, 0xfc, 0xe2, 0xeb, 0xf0, 0x3e, 0x93,
-    0x9d, 0xac, 0x56, 0x23, 0x93, 0xb6, 0x30, 0x1d, 0x5f, 0xfe, 0xcf, 0xb3,
-    0x1c, 0x9b, 0x4f, 0x3c, 0x58, 0xb6, 0x1c, 0xfd, 0xfa, 0x18, 0x5f, 0xb6,
-    0xea, 0x9e, 0xf8, 0xb1, 0x7f, 0xf0, 0x3d, 0xc6, 0x39, 0x67, 0xfe, 0xeb,
-    0x17, 0xc0, 0x1e, 0x12, 0xc5, 0x49, 0xf3, 0x32, 0x25, 0x62, 0xb3, 0xce,
-    0xc8, 0xde, 0x14, 0x27, 0x22, 0xfc, 0x6f, 0x2c, 0x52, 0x50, 0x94, 0xb4,
-    0x4b, 0x17, 0xb0, 0x8d, 0x58, 0xa9, 0x36, 0x18, 0x27, 0x7f, 0xb7, 0x98,
-    0x7b, 0xec, 0x35, 0x8b, 0xf6, 0xe5, 0x38, 0x6a, 0xc5, 0xff, 0xfc, 0x0f,
-    0xb3, 0xfa, 0x4b, 0x3f, 0x9b, 0x85, 0x9f, 0x58, 0xbf, 0x3c, 0x76, 0x68,
-    0xd5, 0x8b, 0xee, 0x85, 0x9c, 0x58, 0xbf, 0x89, 0x8d, 0x2c, 0x02, 0xc5,
-    0x39, 0xe8, 0x9c, 0x92, 0xff, 0xec, 0x87, 0xb3, 0xe5, 0x9e, 0xfb, 0xac,
-    0x5a, 0x56, 0x2b, 0xe7, 0xa8, 0xc8, 0x77, 0x80, 0x18, 0x16, 0x2d, 0x05,
-    0x8b, 0xe9, 0xf7, 0x0c, 0x73, 0x63, 0xe1, 0xfb, 0x8d, 0x82, 0xc5, 0xfb,
-    0xef, 0xd1, 0xf7, 0x58, 0xbb, 0x3f, 0x03, 0xc4, 0xdc, 0x66, 0xb6, 0x55,
-    0x8d, 0x83, 0xfd, 0x9a, 0xe8, 0xa4, 0xeb, 0x6c, 0xfb, 0xc7, 0x5f, 0x29,
-    0x47, 0x3e, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xfd, 0xa2, 0x13, 0x07, 0x91,
-    0x49, 0xd6, 0x23, 0x0d, 0x0d, 0xe8, 0x9c, 0x25, 0x8b, 0xdf, 0x10, 0x16,
-    0x2d, 0xf7, 0x37, 0xb1, 0x0f, 0xdb, 0x75, 0x8a, 0x94, 0x65, 0x64, 0x24,
-    0x34, 0x4f, 0x7e, 0xc8, 0x49, 0x6e, 0xb1, 0x7f, 0xfb, 0xbf, 0x48, 0x34,
-    0xde, 0x70, 0x4c, 0x16, 0x2d, 0x23, 0x3f, 0x30, 0x8a, 0x2a, 0x5d, 0x97,
-    0xa6, 0xd1, 0xff, 0xc2, 0x34, 0xf1, 0xc6, 0x31, 0x93, 0xc6, 0x5b, 0xc2,
-    0xbb, 0xb3, 0x67, 0x95, 0x7f, 0x1f, 0x19, 0x74, 0x51, 0xd4, 0xea, 0x3a,
-    0xc3, 0xc6, 0xcb, 0xfa, 0x44, 0xb3, 0x4a, 0x62, 0x04, 0xa5, 0xf2, 0x9d,
-    0x9a, 0xe4, 0xa3, 0x0f, 0x4e, 0x05, 0x8a, 0x5b, 0x48, 0x51, 0xb7, 0x07,
-    0x0a, 0x6b, 0xe7, 0xd3, 0x01, 0x62, 0xff, 0x0f, 0xf3, 0xb1, 0x67, 0x6b,
-    0x17, 0x87, 0xf9, 0x58, 0xa3, 0x9f, 0xa0, 0x08, 0xb8, 0x6b, 0x7f, 0x60,
-    0xc2, 0x6f, 0xc4, 0xb1, 0x7d, 0xad, 0x67, 0xd6, 0x2f, 0xef, 0xbf, 0x57,
-    0x50, 0x8d, 0x58, 0xbf, 0x9b, 0x4f, 0xc0, 0x3a, 0xc5, 0x4a, 0x21, 0xb7,
-    0x23, 0xf9, 0xb5, 0xba, 0xf5, 0x8b, 0x8b, 0x8b, 0x16, 0x75, 0x8b, 0xfb,
-    0x5c, 0xfc, 0x97, 0x96, 0x2e, 0x90, 0x2c, 0x5b, 0xd2, 0x78, 0xbc, 0x2e,
-    0xbf, 0xfd, 0xad, 0x83, 0xf3, 0xfc, 0x47, 0x3b, 0x41, 0x62, 0xdd, 0x7a,
-    0xc5, 0xff, 0x7a, 0x75, 0xcf, 0xc9, 0x79, 0x62, 0xee, 0x4a, 0xc5, 0xe3,
-    0x8e, 0x56, 0x2f, 0xf1, 0x79, 0xa2, 0xe4, 0xf9, 0x62, 0x9c, 0xf4, 0x58,
-    0x76, 0xf9, 0xdb, 0x37, 0x58, 0xbf, 0xf6, 0x74, 0x2c, 0xe4, 0x45, 0x23,
-    0x58, 0xbe, 0xdc, 0x73, 0xb2, 0xc5, 0xc0, 0x95, 0x8b, 0xdc, 0x7d, 0x2c,
-    0x56, 0x1e, 0xc8, 0x09, 0x7c, 0x2f, 0x7f, 0xa1, 0x84, 0xe3, 0xc2, 0x58,
-    0xbb, 0x91, 0x92, 0x9f, 0x96, 0x0b, 0xc4, 0x73, 0xf6, 0x80, 0x10, 0x11,
-    0x17, 0x21, 0x33, 0xe2, 0xea, 0x65, 0x58, 0x9e, 0x94, 0x81, 0x7d, 0xd8,
-    0xdb, 0x65, 0x8b, 0xb9, 0x2b, 0x17, 0x8e, 0x39, 0x58, 0xbf, 0xc5, 0xe6,
-    0x8b, 0x93, 0xe5, 0x8a, 0x73, 0xd1, 0x61, 0xdb, 0xe7, 0x6c, 0xdd, 0x62,
-    0xff, 0xd9, 0xd0, 0xb3, 0x91, 0x14, 0x8d, 0x62, 0xfb, 0x71, 0xce, 0xcb,
-    0x17, 0xf4, 0x40, 0x78, 0xf6, 0x89, 0x62, 0xf3, 0x83, 0x8b, 0x17, 0x02,
-    0x56, 0x2f, 0x71, 0xf4, 0xb1, 0x76, 0x44, 0xb1, 0x58, 0x8c, 0x1d, 0xc9,
-    0x7e, 0x66, 0x01, 0xdf, 0x0b, 0x86, 0x3b, 0x7f, 0x61, 0x38, 0xf0, 0x96,
-    0x2f, 0xd8, 0x44, 0xde, 0x58, 0xbf, 0x6d, 0xec, 0xc3, 0xac, 0x54, 0x0f,
-    0xeb, 0xe5, 0x6c, 0x4d, 0x7f, 0x13, 0x0f, 0x0d, 0x8c, 0x95, 0xe6, 0xa8,
-    0x0b, 0x8c, 0x5f, 0x15, 0xb7, 0x95, 0xd6, 0xe5, 0x71, 0x12, 0xfd, 0xa0,
-    0x04, 0x04, 0x45, 0xc8, 0xc0, 0x7d, 0x0d, 0x2b, 0xff, 0xb5, 0x3d, 0xf0,
-    0xa4, 0xf9, 0xdf, 0x96, 0x2f, 0xff, 0xcc, 0x3c, 0xc2, 0x34, 0x32, 0x92,
-    0xd9, 0xf4, 0xb1, 0x79, 0xb5, 0xb2, 0xee, 0x12, 0x2f, 0xa1, 0x9d, 0xc1,
-    0x77, 0x09, 0x17, 0xb8, 0xe3, 0x5d, 0xc2, 0x45, 0xc1, 0x04, 0xbb, 0x84,
-    0x8a, 0xdd, 0x15, 0xb1, 0x15, 0xf8, 0xc4, 0x22, 0xab, 0x9b, 0xc9, 0xb8,
-    0x48, 0x46, 0x1e, 0x05, 0xff, 0xff, 0xc3, 0x29, 0x1f, 0xe7, 0xdc, 0x9f,
-    0x48, 0xe7, 0xd8, 0x70, 0x04, 0xb1, 0x7f, 0x67, 0xf3, 0x08, 0xd5, 0x8b,
-    0xcc, 0x40, 0x31, 0x93, 0xaf, 0x33, 0xd3, 0x5a, 0x86, 0xe9, 0xd1, 0x8a,
-    0x34, 0x2e, 0x1c, 0xf9, 0xca, 0xfd, 0xf6, 0x84, 0xc1, 0x62, 0xfa, 0x3b,
-    0x1b, 0xeb, 0x17, 0xfc, 0xc4, 0x0c, 0xe8, 0x42, 0x82, 0xc5, 0x47, 0xa6,
-    0x23, 0xf8, 0x45, 0x00, 0xa3, 0xc4, 0xb7, 0xfa, 0x20, 0xa7, 0xb1, 0xcf,
-    0x16, 0x2b, 0x0f, 0xf5, 0xd1, 0xad, 0x05, 0x8b, 0x88, 0xd5, 0x8b, 0xde,
-    0x0f, 0x65, 0x8b, 0x9f, 0x64, 0x8b, 0xd0, 0x16, 0xd8, 0x6e, 0x3c, 0x41,
-    0x7f, 0x16, 0x7b, 0x92, 0x75, 0x8b, 0x9f, 0xcb, 0x16, 0xf2, 0xc5, 0xda,
-    0x01, 0x86, 0xa5, 0xc5, 0xef, 0x74, 0x9e, 0x2c, 0x5f, 0x30, 0xff, 0x8b,
-    0x17, 0x86, 0xe7, 0x58, 0xbf, 0xf7, 0xe7, 0xce, 0x52, 0x79, 0xe2, 0xc5,
-    0xdf, 0xdd, 0x62, 0xd1, 0xeb, 0x14, 0x62, 0x69, 0x92, 0xad, 0x85, 0xa6,
-    0x8f, 0xb1, 0x17, 0x07, 0x44, 0x7b, 0xd4, 0x33, 0x4e, 0xa9, 0x0e, 0x25,
-    0x0f, 0xc6, 0xff, 0x78, 0x0c, 0x75, 0x8b, 0xb0, 0x0b, 0x17, 0xd2, 0x50,
-    0x29, 0x36, 0x98, 0x3b, 0x7f, 0xd1, 0x3b, 0x94, 0xe9, 0xb8, 0xb1, 0x7f,
-    0xfc, 0x18, 0x1a, 0x1b, 0xfd, 0xfb, 0x84, 0xe7, 0x96, 0x2f, 0x7b, 0x3e,
-    0xb1, 0x4b, 0x17, 0x6e, 0xff, 0x45, 0xa1, 0x1c, 0x71, 0x4e, 0x38, 0x76,
-    0xfb, 0xda, 0x11, 0xd6, 0x2e, 0x7d, 0x96, 0x29, 0xcd, 0xe7, 0x89, 0x2f,
-    0x6e, 0xe3, 0x58, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0xff, 0xfc, 0x71, 0x73,
-    0x6c, 0x0b, 0x35, 0xb3, 0xf3, 0xf9, 0xe8, 0xec, 0x58, 0xbe, 0xee, 0x05,
-    0x2b, 0x17, 0xbe, 0xde, 0x58, 0xad, 0x93, 0x0e, 0x81, 0x04, 0x43, 0xc7,
-    0x23, 0x66, 0xde, 0x11, 0xdd, 0x3f, 0x58, 0xb4, 0xac, 0x78, 0xb7, 0xbf,
-    0xa0, 0x26, 0xe7, 0xdd, 0x62, 0xff, 0xa7, 0x63, 0xb4, 0x3e, 0xdf, 0x58,
-    0xa7, 0x3e, 0x8f, 0x17, 0x5f, 0xf3, 0xf4, 0xc3, 0x0d, 0xd6, 0x71, 0x62,
-    0xec, 0xe8, 0xb1, 0x7e, 0xe8, 0xc7, 0xcf, 0xac, 0x5f, 0xf6, 0x7b, 0xbd,
-    0xdf, 0x5f, 0xc5, 0x8a, 0xc3, 0xe5, 0xf9, 0x55, 0xa0, 0x91, 0x79, 0xb5,
-    0xb2, 0x45, 0x24, 0x54, 0x9b, 0xcd, 0xc4, 0x8e, 0x3d, 0x7a, 0x41, 0xba,
-    0x44, 0x61, 0xae, 0xbf, 0xfb, 0xed, 0x02, 0xce, 0x08, 0xd3, 0x84, 0xb1,
-    0x43, 0x4e, 0xfb, 0xb3, 0xd3, 0xbf, 0x14, 0x22, 0xfc, 0x63, 0x78, 0xa1,
-    0xf5, 0x8b, 0xdd, 0xc3, 0x8b, 0x15, 0x2a, 0x9a, 0xf2, 0x3d, 0xf3, 0xa8,
-    0x30, 0xed, 0xfb, 0x0b, 0x67, 0xd2, 0xc5, 0xa3, 0x96, 0x2c, 0xdb, 0x1b,
-    0xd2, 0x28, 0xbf, 0x68, 0x07, 0x7e, 0x2c, 0x5f, 0xc1, 0x94, 0x39, 0xf1,
-    0xac, 0x61, 0xa9, 0xbf, 0xbd, 0xc0, 0x33, 0x69, 0x62, 0xfa, 0x77, 0x7e,
-    0x2c, 0x5f, 0x09, 0xb5, 0x05, 0x8b, 0x1d, 0x62, 0xce, 0xb1, 0x68, 0x0c,
-    0xf1, 0xa2, 0x23, 0xe0, 0x95, 0xff, 0xff, 0xde, 0xf4, 0x33, 0xff, 0x68,
-    0x47, 0x67, 0x38, 0x2e, 0x7b, 0x98, 0x12, 0xc5, 0xd9, 0x12, 0xc5, 0xf0,
-    0x00, 0x2e, 0x32, 0x24, 0x03, 0x78, 0xa9, 0x4e, 0x63, 0x62, 0xec, 0x69,
-    0x68, 0x63, 0x5f, 0xfd, 0x9d, 0xfb, 0x8e, 0x52, 0x06, 0x3a, 0xc5, 0xfd,
-    0x9a, 0x8b, 0xee, 0x05, 0x8b, 0xff, 0xfb, 0x3d, 0xf7, 0x0a, 0x74, 0xd0,
-    0x9e, 0x7f, 0x00, 0xb1, 0x50, 0x44, 0x51, 0x17, 0xdd, 0x01, 0xac, 0x5e,
-    0x84, 0xf6, 0xb1, 0x76, 0x0d, 0x62, 0xfb, 0x22, 0x73, 0xac, 0x56, 0xc9,
-    0xb0, 0x1b, 0x0c, 0xee, 0xc8, 0xa2, 0x18, 0xf0, 0xf0, 0x42, 0xf7, 0xe9,
-    0x8a, 0x12, 0x04, 0x8b, 0x88, 0x0b, 0x17, 0xef, 0xbc, 0x97, 0x96, 0x2d,
-    0x1e, 0xb1, 0x6f, 0xb9, 0xbc, 0x11, 0x3d, 0xfd, 0xe7, 0xd3, 0xed, 0x2b,
-    0x15, 0x88, 0xa7, 0xdd, 0x4c, 0x32, 0x6b, 0xff, 0xf7, 0xf1, 0xe1, 0xc3,
-    0x3d, 0xfc, 0x18, 0xbd, 0xc5, 0x8a, 0xdd, 0x35, 0x9d, 0x43, 0x43, 0xc6,
-    0x37, 0x8f, 0x31, 0xeb, 0x17, 0x3c, 0x4b, 0x17, 0xf1, 0x7a, 0x2c, 0xd6,
-    0x2c, 0x51, 0xcf, 0x19, 0x86, 0x2b, 0xb4, 0x43, 0x81, 0x9a, 0xd1, 0xad,
-    0x62, 0xff, 0xde, 0xfe, 0x0c, 0x5e, 0xe4, 0x52, 0xb1, 0x67, 0x58, 0xbf,
-    0xed, 0x85, 0x01, 0xfc, 0x4c, 0x4b, 0x17, 0xf3, 0xc9, 0xf6, 0xc0, 0x96,
-    0x2f, 0xd9, 0xb1, 0xf0, 0xeb, 0x17, 0xb8, 0xfa, 0x58, 0xa2, 0x3c, 0x6f,
-    0x14, 0xdf, 0xc4, 0xc0, 0x00, 0xb8, 0xb1, 0x7a, 0x4f, 0x18, 0x34, 0xc4,
-    0x30, 0x47, 0x47, 0x7c, 0x75, 0xf1, 0x0d, 0x8d, 0xe2, 0x75, 0xe1, 0xc6,
-    0xa3, 0x51, 0xad, 0x3f, 0x97, 0x8f, 0x1e, 0xdd, 0x16, 0x2b, 0x17, 0x36,
-    0x5e, 0x3b, 0xb6, 0x85, 0xf1, 0x4a, 0x1d, 0x8e, 0x2f, 0xbf, 0xe0, 0x39,
-    0x7b, 0xbe, 0x34, 0x7a, 0xc5, 0xfb, 0xf9, 0xb7, 0xb8, 0xb1, 0x5a, 0x3e,
-    0x7f, 0x9e, 0xdf, 0xff, 0x73, 0x98, 0x79, 0x8f, 0xd6, 0x3f, 0xe4, 0x6b,
-    0x17, 0xa7, 0xbe, 0x2c, 0x54, 0x0f, 0xc3, 0x4a, 0x57, 0xb3, 0x61, 0x2c,
-    0x56, 0x23, 0x49, 0xa1, 0x24, 0x44, 0x57, 0x31, 0xd6, 0x2f, 0xfe, 0x88,
-    0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x47, 0x3d, 0xc6, 0x17, 0xbf, 0x16,
-    0x00, 0x3e, 0xd6, 0x2f, 0xfe, 0x79, 0xd0, 0x3f, 0x9c, 0x6e, 0xe0, 0xb1,
-    0x6f, 0x18, 0x7d, 0xff, 0x2a, 0xbf, 0xdc, 0x2c, 0x8a, 0x13, 0xda, 0xc5,
-    0x61, 0xef, 0x78, 0xa6, 0xa5, 0xd0, 0xaf, 0x6c, 0x5f, 0x0a, 0x60, 0xd8,
-    0xc8, 0x32, 0x52, 0xa9, 0xad, 0x9d, 0xc3, 0xa1, 0xe3, 0x95, 0xd3, 0x87,
-    0xe5, 0x79, 0xb3, 0xf8, 0x13, 0xca, 0x3d, 0x7e, 0x4f, 0x3d, 0x7a, 0x39,
-    0x71, 0x42, 0x3a, 0x3a, 0x1d, 0xd7, 0xff, 0xda, 0xd6, 0x0d, 0x8f, 0xf6,
-    0xf1, 0x4c, 0x4b, 0x17, 0xc4, 0xc7, 0x02, 0xc5, 0x6c, 0x7e, 0x58, 0xa1,
-    0x7f, 0xff, 0xf8, 0x5a, 0x14, 0x44, 0xc0, 0xe7, 0x30, 0xdc, 0x16, 0x98,
-    0x73, 0xf9, 0x58, 0xbf, 0xfd, 0xe9, 0xf7, 0x35, 0x25, 0xef, 0xe4, 0x16,
-    0x2f, 0xfb, 0x85, 0x9f, 0xf1, 0x48, 0x16, 0x2d, 0xc5, 0x8a, 0xc4, 0x4a,
-    0x1a, 0x95, 0xe3, 0x8b, 0xf9, 0xc3, 0x9e, 0xe7, 0xb5, 0x8b, 0xff, 0xfe,
-    0x8d, 0x46, 0x42, 0x13, 0xef, 0x19, 0xc2, 0xc7, 0xf3, 0xb0, 0x16, 0x2f,
-    0xff, 0xa7, 0x46, 0x61, 0xdb, 0xed, 0xf7, 0xef, 0x8b, 0x17, 0xfa, 0x7e,
-    0xfd, 0x43, 0x62, 0x58, 0xbf, 0x63, 0x80, 0x51, 0x2c, 0x18, 0x6d, 0x6f,
-    0xe1, 0x4e, 0xb4, 0xfb, 0x2c, 0x5f, 0xfc, 0x23, 0x70, 0xbf, 0x83, 0x1b,
-    0xf6, 0xb1, 0x7f, 0x46, 0x3f, 0xb5, 0x90, 0x58, 0xba, 0x63, 0xd6, 0x2b,
-    0x74, 0x48, 0xba, 0x34, 0x46, 0x37, 0x60, 0xd6, 0x2f, 0xcf, 0xd0, 0x40,
-    0x82, 0xc5, 0x49, 0xe1, 0x7c, 0x5e, 0xff, 0x72, 0x5f, 0x5a, 0xcd, 0x96,
-    0x2f, 0xd1, 0x33, 0x6d, 0x8b, 0x17, 0xf4, 0x24, 0x1f, 0x70, 0x96, 0x2f,
-    0xb9, 0xc1, 0x76, 0xb1, 0x7e, 0x1f, 0xe4, 0x84, 0xb1, 0x77, 0xf1, 0x62,
-    0xa4, 0xf9, 0x18, 0x94, 0x45, 0x17, 0xf8, 0xe5, 0x83, 0x7f, 0xf1, 0x62,
-    0xdf, 0x58, 0xbd, 0xe9, 0xd9, 0x62, 0x9c, 0xd8, 0x78, 0x4a, 0xfe, 0x68,
-    0x7d, 0xda, 0x0b, 0x15, 0x28, 0xb0, 0xc6, 0x37, 0x20, 0xbd, 0x8e, 0x05,
-    0x8b, 0xfc, 0x6b, 0x76, 0x41, 0xc9, 0xd6, 0x2f, 0xfa, 0x33, 0xec, 0x32,
-    0x13, 0x6c, 0xb1, 0x78, 0xdd, 0x01, 0x62, 0xb1, 0x12, 0x46, 0x9b, 0x6e,
-    0x7b, 0x7e, 0x17, 0x42, 0x68, 0x2c, 0x5f, 0xfe, 0xfc, 0x64, 0xfb, 0x58,
-    0x33, 0x33, 0xbf, 0x2c, 0x5c, 0xc4, 0xb1, 0x58, 0x7c, 0xcc, 0xa1, 0x7f,
-    0xa7, 0x60, 0xe3, 0x98, 0x80, 0xb1, 0x7f, 0x42, 0x62, 0xc7, 0x02, 0xc5,
-    0xa3, 0x3a, 0xe2, 0xf3, 0x8e, 0xcd, 0xd0, 0x84, 0x30, 0xce, 0xb2, 0x18,
-    0x06, 0xb9, 0xf6, 0x42, 0xe6, 0x91, 0x14, 0x9e, 0x12, 0x7f, 0x86, 0xef,
-    0x5e, 0x5a, 0x50, 0xae, 0xe1, 0x8f, 0xa1, 0x20, 0x19, 0x07, 0x51, 0xc5,
-    0xc2, 0x09, 0x62, 0xfa, 0x63, 0xc7, 0x2b, 0x17, 0xde, 0xe3, 0xe9, 0x62,
-    0xf7, 0xc4, 0x1a, 0xc5, 0x49, 0xe1, 0x75, 0x11, 0xdf, 0xc2, 0x0f, 0x8f,
-    0x84, 0xb1, 0x76, 0x44, 0xb1, 0x70, 0x71, 0x2c, 0x53, 0x9b, 0x26, 0x18,
-    0xb4, 0xc4, 0x7f, 0xfc, 0x60, 0xbc, 0x10, 0x41, 0x24, 0x5a, 0x52, 0x23,
-    0x0d, 0x0d, 0xd0, 0xd9, 0x62, 0xa0, 0x6f, 0x4e, 0x49, 0x7b, 0xf2, 0x05,
-    0x8b, 0xfa, 0x36, 0xfc, 0x82, 0x63, 0xd6, 0x2b, 0xc7, 0xa6, 0x18, 0xed,
-    0xf3, 0x4f, 0x47, 0x58, 0xba, 0x23, 0xac, 0x5d, 0x83, 0x58, 0xa9, 0x36,
-    0x02, 0x19, 0xbb, 0xfa, 0x58, 0xb8, 0x00, 0x58, 0xbd, 0xf8, 0xd8, 0x25,
-    0x8b, 0xe8, 0xb3, 0x37, 0x58, 0xa9, 0x66, 0x25, 0xec, 0x45, 0x08, 0xc3,
-    0x46, 0x61, 0x93, 0xd4, 0x26, 0xc6, 0x41, 0xb8, 0xcf, 0x6c, 0xf1, 0x42,
-    0x8f, 0x50, 0x86, 0x67, 0x42, 0x23, 0xe2, 0x9f, 0x88, 0x04, 0x31, 0xd0,
-    0x60, 0x22, 0x4b, 0xdb, 0xbc, 0xac, 0x5c, 0x2e, 0x2c, 0x5d, 0x9a, 0x58,
-    0xad, 0x8d, 0x7e, 0x0c, 0x54, 0x0f, 0xb4, 0x69, 0x97, 0xe6, 0x7d, 0xf3,
-    0x4b, 0x17, 0xff, 0x45, 0x9a, 0xd3, 0x45, 0x9a, 0xcf, 0x2c, 0x57, 0xcf,
-    0xbb, 0xc5, 0x17, 0xf6, 0xb0, 0x85, 0x3a, 0x58, 0xac, 0x46, 0xfb, 0xc2,
-    0x43, 0xc4, 0x57, 0xf8, 0x8e, 0x27, 0x1e, 0x1d, 0x62, 0xff, 0xa0, 0xfe,
-    0x84, 0xea, 0x77, 0x58, 0xb4, 0x7a, 0xc5, 0xc5, 0x03, 0x0f, 0x3e, 0x07,
-    0x57, 0xe9, 0xd6, 0xb3, 0xeb, 0x17, 0xf7, 0xf8, 0x0f, 0x7b, 0xb5, 0x8a,
-    0x94, 0xc2, 0x72, 0x10, 0x46, 0x97, 0x31, 0x45, 0xfd, 0xb4, 0x50, 0x8d,
-    0xb5, 0xb2, 0xc5, 0xbc, 0xb1, 0x7f, 0xe8, 0xd7, 0xd6, 0x14, 0xe0, 0x79,
-    0xdf, 0x96, 0x2f, 0x7e, 0x7e, 0xb1, 0x7f, 0xf8, 0x07, 0x68, 0x19, 0x23,
-    0xd8, 0xf3, 0xa5, 0x8b, 0xe7, 0x92, 0xf2, 0xc5, 0xed, 0x98, 0x96, 0x2e,
-    0xd6, 0xcb, 0x16, 0xc5, 0x8a, 0x1a, 0x34, 0xb4, 0x3b, 0xf4, 0xdf, 0x10,
-    0x88, 0x74, 0x21, 0x9b, 0xff, 0x1a, 0x2e, 0x41, 0xf5, 0xb0, 0x80, 0xb1,
-    0x71, 0x62, 0xc5, 0xe0, 0xfb, 0x25, 0x8b, 0xf3, 0x80, 0xed, 0x05, 0x8b,
-    0xec, 0xec, 0x1c, 0x58, 0xad, 0x1e, 0x61, 0x14, 0x5d, 0xd8, 0x4b, 0x17,
-    0xd9, 0x1f, 0x27, 0x58, 0xac, 0x3e, 0x06, 0x21, 0xe0, 0xd5, 0xff, 0xbd,
-    0x27, 0x30, 0xb0, 0x01, 0xf6, 0xb1, 0x7f, 0xb8, 0xdf, 0xde, 0x5c, 0x6b,
-    0x14, 0x6a, 0x78, 0xee, 0x86, 0x71, 0x6f, 0xc3, 0x2c, 0x8b, 0x7c, 0x85,
-    0x79, 0xcf, 0x2b, 0x17, 0xa7, 0x78, 0x2c, 0x5d, 0x3c, 0x58, 0xbc, 0xf2,
-    0x75, 0x8b, 0x98, 0x6b, 0x14, 0x33, 0xca, 0xd0, 0xbf, 0x87, 0x2f, 0xf6,
-    0x9c, 0x23, 0xc8, 0xe5, 0x62, 0xf3, 0x66, 0xeb, 0x17, 0xed, 0xbf, 0x80,
-    0x65, 0x8a, 0xd9, 0x15, 0x30, 0x2f, 0x34, 0xd3, 0x43, 0xb7, 0xfc, 0xc1,
-    0x0d, 0xcb, 0x60, 0xfb, 0x58, 0xa5, 0x8b, 0xc3, 0xc2, 0x58, 0xa3, 0x9a,
-    0x8f, 0x86, 0x5f, 0xfe, 0x0f, 0xc5, 0x20, 0x6f, 0x00, 0x32, 0x82, 0xc5,
-    0xdd, 0x06, 0xb1, 0x52, 0x7c, 0xcc, 0x99, 0x7f, 0xee, 0x92, 0x5e, 0xe3,
-    0xf4, 0xc1, 0xac, 0x5f, 0xf7, 0x39, 0x85, 0xbb, 0x10, 0x16, 0x2f, 0x40,
-    0xa5, 0x62, 0xfb, 0x8e, 0x17, 0x16, 0x2e, 0x7d, 0x18, 0x7f, 0x3d, 0x9c,
-    0xf0, 0x72, 0xa5, 0x1e, 0xff, 0x85, 0xdd, 0x2c, 0x5c, 0xfa, 0x58, 0xa8,
-    0xd6, 0x68, 0xfe, 0x19, 0x7b, 0x66, 0xf2, 0xc5, 0x46, 0xeb, 0xfc, 0x11,
-    0xb1, 0xc4, 0x6b, 0x12, 0xc8, 0xc7, 0x5e, 0x50, 0xfe, 0x97, 0x3e, 0x38,
-    0xd1, 0x88, 0x91, 0xff, 0x19, 0x7d, 0x08, 0x71, 0x46, 0x2f, 0xd1, 0x28,
-    0x32, 0x7b, 0xff, 0xf7, 0xa4, 0x9c, 0x19, 0xdf, 0xb4, 0xe1, 0x44, 0xeb,
-    0x17, 0xe6, 0xc3, 0xce, 0xeb, 0x17, 0x89, 0x80, 0xb1, 0x7f, 0x36, 0xdf,
-    0x79, 0x25, 0x8b, 0xc3, 0xfb, 0xac, 0x56, 0x23, 0x94, 0xd5, 0x7f, 0x94,
-    0x04, 0x38, 0x19, 0x6d, 0xff, 0x9b, 0xdc, 0x0b, 0x3e, 0x06, 0xf2, 0xc5,
-    0xf8, 0x18, 0x36, 0x82, 0xc5, 0xcd, 0xd1, 0x62, 0xdd, 0x16, 0x2c, 0x37,
-    0x35, 0xac, 0x33, 0x7d, 0xd0, 0x4c, 0x4b, 0x17, 0xda, 0x3c, 0xf1, 0x62,
-    0xff, 0xfb, 0x30, 0xa6, 0x1e, 0xfb, 0x1c, 0xb3, 0xa2, 0xc5, 0xf6, 0x7a,
-    0x77, 0x30, 0xfc, 0x88, 0x8e, 0xb6, 0x4f, 0x54, 0x69, 0x9a, 0x40, 0x02,
-    0xa9, 0x12, 0x85, 0x09, 0x6b, 0x0d, 0x62, 0xe1, 0xc4, 0xb1, 0x5b, 0x9a,
-    0xb0, 0xc4, 0xaf, 0xfd, 0xd1, 0xc8, 0x18, 0xf1, 0x37, 0x6b, 0x17, 0x39,
-    0x2c, 0x5f, 0xff, 0x69, 0x80, 0x4c, 0x69, 0x67, 0xbf, 0x90, 0x58, 0xbf,
-    0xfe, 0xcd, 0xe4, 0xcf, 0xce, 0x01, 0x88, 0x58, 0xb1, 0x52, 0x8f, 0x58,
-    0x20, 0xb8, 0xb7, 0xd3, 0xef, 0x86, 0x29, 0x02, 0xc5, 0xec, 0xee, 0x0b,
-    0x15, 0xa3, 0xc1, 0x08, 0x8e, 0xff, 0xe7, 0x39, 0x31, 0xbc, 0xfc, 0x97,
-    0x96, 0x2f, 0xf3, 0x69, 0xb2, 0x27, 0x3a, 0xc5, 0xfb, 0x8d, 0xf7, 0xe2,
-    0xc5, 0xfd, 0xe7, 0xf4, 0xf7, 0x05, 0x8b, 0xa6, 0x0b, 0x16, 0x82, 0xc5,
-    0x7c, 0xd4, 0x86, 0x2f, 0x7f, 0x04, 0x58, 0x01, 0x71, 0x62, 0xff, 0xd8,
-    0x4d, 0xfc, 0x73, 0xc8, 0xd6, 0x2a, 0x4f, 0xad, 0xcb, 0xee, 0x9d, 0x2c,
-    0x54, 0xa6, 0x38, 0x6a, 0xc6, 0xa1, 0x1a, 0x11, 0x05, 0xff, 0xe9, 0xeb,
-    0xe4, 0xbf, 0x9e, 0x90, 0x84, 0x75, 0x8b, 0xff, 0xff, 0xb9, 0xf6, 0x7f,
-    0x0b, 0x4d, 0xcc, 0x29, 0x80, 0xf4, 0xfd, 0xc1, 0x62, 0xff, 0xff, 0x1c,
-    0xa7, 0xb3, 0x00, 0xdd, 0xf0, 0xb3, 0x62, 0x9d, 0x96, 0x2a, 0x08, 0xd6,
-    0x67, 0x2b, 0xc1, 0xf5, 0x04, 0xb1, 0x7f, 0xfc, 0x0c, 0x1f, 0xb8, 0xfe,
-    0xfe, 0x74, 0x1c, 0xac, 0x5c, 0xfd, 0xac, 0x56, 0xc8, 0x8d, 0xd1, 0x1f,
-    0x94, 0xad, 0xb2, 0xc5, 0xf9, 0xfd, 0x13, 0x84, 0xb1, 0x58, 0x6f, 0x58,
-    0x4e, 0xfe, 0x1f, 0xe4, 0x26, 0xf2, 0xc5, 0xff, 0xb0, 0x8d, 0xcd, 0x7b,
-    0xcf, 0xa5, 0x8b, 0xdf, 0x63, 0x56, 0x2f, 0x6c, 0xfa, 0x94, 0x46, 0x61,
-    0x7f, 0x8f, 0xeb, 0xe8, 0xeb, 0x28, 0x55, 0xdf, 0xc1, 0x9c, 0xcc, 0xef,
-    0xcb, 0x17, 0xff, 0xf3, 0x6b, 0x0e, 0xdd, 0xea, 0x7c, 0xe0, 0xe3, 0x76,
-    0xb1, 0x6f, 0x71, 0x11, 0xde, 0x32, 0xbf, 0xfd, 0xe8, 0x61, 0x38, 0xf2,
-    0x12, 0x0e, 0x2c, 0x5f, 0xe1, 0x1a, 0x64, 0x99, 0xc7, 0x58, 0xa9, 0x4d,
-    0x7b, 0x21, 0x6a, 0xc5, 0x24, 0x93, 0x7f, 0xe0, 0x66, 0x9c, 0x18, 0x0d,
-    0x1d, 0x62, 0xff, 0xe9, 0xe6, 0xa7, 0xe5, 0x9e, 0x93, 0xac, 0x5f, 0xf7,
-    0xa4, 0x9c, 0x19, 0xdf, 0x96, 0x2f, 0x8b, 0x69, 0x35, 0x62, 0xf4, 0x1b,
-    0x98, 0x7b, 0xa1, 0x9c, 0xd1, 0xa8, 0xd3, 0x78, 0x50, 0x5e, 0x30, 0xba,
-    0xf5, 0x8b, 0xff, 0xa4, 0x5d, 0x7c, 0x1c, 0xd3, 0x64, 0xbc, 0xb1, 0x7f,
-    0x1d, 0xa1, 0xc1, 0x3a, 0xc5, 0x2c, 0x58, 0x47, 0x37, 0x41, 0x97, 0x5f,
-    0xfd, 0x9e, 0xfb, 0xc1, 0xf5, 0xb0, 0x80, 0xb1, 0x7f, 0xa1, 0x9c, 0x0f,
-    0x61, 0x12, 0xc5, 0x6e, 0x7f, 0x82, 0x46, 0xb9, 0xc2, 0x58, 0xbe, 0x13,
-    0x67, 0x16, 0x2f, 0x8b, 0x3a, 0x3c, 0x46, 0xeb, 0xe3, 0x17, 0xff, 0xfe,
-    0xfe, 0x0d, 0xfd, 0x85, 0x0c, 0xe7, 0xa1, 0x91, 0xec, 0x40, 0x58, 0xa8,
-    0x2a, 0x4f, 0xd1, 0x1f, 0xe1, 0x0a, 0x50, 0xa4, 0xe2, 0xef, 0x8e, 0x6f,
-    0xff, 0xe1, 0x36, 0xdb, 0x8b, 0x6f, 0x67, 0xcb, 0x3d, 0xf7, 0x58, 0xbf,
-    0x4c, 0x44, 0x2e, 0x2c, 0x56, 0x2b, 0x60, 0x79, 0x4e, 0xff, 0x62, 0xf2,
-    0xf5, 0xce, 0x4b, 0x17, 0x78, 0xd5, 0x8b, 0xed, 0x3c, 0x5c, 0x58, 0xbc,
-    0xc4, 0x0c, 0x37, 0xba, 0x19, 0xa9, 0x67, 0x21, 0x6d, 0x08, 0x98, 0x46,
-    0x31, 0x8f, 0x86, 0x91, 0xee, 0x89, 0x11, 0x9e, 0xa3, 0x44, 0x3a, 0x27,
-    0xe3, 0x25, 0x68, 0x57, 0x94, 0xab, 0x7e, 0x1f, 0xfa, 0x71, 0xcb, 0xa2,
-    0x24, 0x72, 0x9d, 0xf1, 0x7a, 0x63, 0x96, 0x2f, 0x4f, 0x49, 0x58, 0xbd,
-    0x25, 0xe5, 0x8b, 0xff, 0xfd, 0xe6, 0x3b, 0x78, 0x52, 0xd0, 0x7f, 0xcc,
-    0x30, 0xeb, 0x17, 0xd3, 0xa6, 0xfa, 0xc5, 0x0d, 0x13, 0xa4, 0x39, 0xd1,
-    0x7e, 0xec, 0x89, 0x62, 0xff, 0x66, 0xe5, 0x9d, 0x1c, 0x6b, 0x17, 0xdf,
-    0x11, 0xe5, 0x62, 0x96, 0x29, 0x62, 0xcc, 0x72, 0xe3, 0x81, 0x97, 0xf4,
-    0xc4, 0x18, 0x1a, 0x25, 0x8b, 0x85, 0xd7, 0xac, 0x5f, 0x7f, 0x00, 0xcb,
-    0x17, 0xde, 0x7f, 0x89, 0x62, 0xfe, 0xcd, 0x77, 0x0f, 0x4a, 0xc5, 0xd3,
-    0x1f, 0xd7, 0x53, 0xd2, 0x0c, 0x8e, 0xa3, 0x75, 0x57, 0x32, 0x4a, 0xf0,
-    0xbb, 0x88, 0xc7, 0xe3, 0x0c, 0x6a, 0x47, 0x7e, 0x25, 0x11, 0x8f, 0x41,
-    0xde, 0xa7, 0x4b, 0x46, 0x46, 0xf1, 0xc4, 0x13, 0xf5, 0x84, 0xfd, 0x6c,
-    0xa7, 0x58, 0xd2, 0x37, 0x98, 0xda, 0x19, 0x9d, 0x77, 0x08, 0x2e, 0xb9,
-    0x08, 0x6e, 0xba, 0xce, 0xf5, 0x46, 0xa8, 0x7d, 0x46, 0xb4, 0xe9, 0xac,
-    0xd3, 0x36, 0xa4, 0x7d, 0xc2, 0x7f, 0xfc, 0x75, 0x9e, 0x56, 0x5a, 0xa4,
-    0xf3, 0x67, 0x0a, 0xb7, 0xa6, 0x26, 0x77, 0x49, 0xef, 0x7a, 0x43, 0x9c,
-    0x7c, 0xa2, 0x18, 0xa9, 0x73, 0x3a, 0xa5, 0xa4, 0x1e, 0x97, 0xa9, 0xfb,
-    0x42, 0x88, 0xd4, 0xb9, 0x30, 0x4f, 0xa4, 0x75, 0xf1, 0xaa, 0x15, 0x66,
-    0x33, 0xcb, 0x6a, 0x13, 0xeb, 0x46, 0xe8, 0x2a, 0x6f, 0x57, 0x49, 0x4b,
-    0x01, 0x46, 0x79, 0x1d, 0x48, 0x21, 0x0e, 0xb1, 0xeb, 0xea, 0x97, 0x8d,
-    0x7e, 0x8d, 0x5e, 0x26, 0x02, 0xc5, 0xfd, 0x1b, 0x46, 0xde, 0x26, 0x02,
-    0xc5, 0xf3, 0xf4, 0x68, 0xf5, 0x8b, 0x98, 0xd5, 0x8b, 0xec, 0x1f, 0xe5,
-    0x62, 0xf4, 0xe8, 0x0b, 0x14, 0x46, 0xff, 0x84, 0x57, 0xed, 0x8f, 0x3d,
-    0xc6, 0x46, 0xe9, 0x82, 0x46, 0x85, 0xd0, 0x38, 0x62, 0x7e, 0x2b, 0xd3,
-    0x2e, 0x62, 0x8a, 0x71, 0x3e, 0xf9, 0xc8, 0x0e, 0xb1, 0x79, 0x8f, 0xc5,
-    0x8a, 0x81, 0xbe, 0xe8, 0x43, 0x7e, 0x3e, 0x3b, 0x01, 0x62, 0xfb, 0x76,
-    0x6d, 0xd5, 0x24, 0x51, 0x7f, 0xfe, 0x60, 0x4e, 0xff, 0x7e, 0x7d, 0xfd,
-    0xfc, 0x25, 0x8a, 0xd2, 0x21, 0x88, 0xc6, 0xff, 0xd3, 0xe7, 0x04, 0xc3,
-    0xdc, 0xeb, 0x16, 0x2f, 0xdb, 0xc9, 0x48, 0x16, 0x2f, 0xbc, 0x6b, 0xee,
-    0xb1, 0x4c, 0x79, 0xbc, 0x28, 0xbf, 0xb0, 0x01, 0xe9, 0x80, 0xb1, 0x79,
-    0xa1, 0x19, 0x29, 0xd8, 0x64, 0x2b, 0x74, 0x45, 0xf8, 0x48, 0xf8, 0x86,
-    0xff, 0xe9, 0x6d, 0x10, 0x9b, 0xbc, 0xfb, 0x2c, 0x5f, 0xce, 0x06, 0x37,
-    0xee, 0xb1, 0x7f, 0xfd, 0xe6, 0x38, 0xff, 0x90, 0xe7, 0xe4, 0xbc, 0xb1,
-    0x58, 0x7f, 0xcc, 0x5d, 0x7f, 0xfc, 0xf1, 0x14, 0xfb, 0x9e, 0xef, 0x77,
-    0x2d, 0x96, 0x2f, 0xff, 0xb3, 0xfe, 0x70, 0x9f, 0x20, 0xfa, 0x60, 0x2c,
-    0x50, 0xd1, 0x45, 0xc5, 0x3b, 0x46, 0x62, 0xbe, 0x03, 0xc7, 0xa7, 0xf6,
-    0x72, 0x86, 0x0f, 0x21, 0x85, 0x7f, 0xa3, 0x33, 0x5b, 0xb3, 0x6e, 0xa9,
-    0x3a, 0x0b, 0xff, 0xa3, 0x1a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x89,
-    0x65, 0xfd, 0x20, 0xc3, 0xce, 0xeb, 0x17, 0xed, 0x6e, 0xcd, 0xba, 0xa4,
-    0xf2, 0x2f, 0xd9, 0xef, 0x39, 0x21, 0x08, 0xee, 0x6e, 0x8b, 0x16, 0x8c,
-    0x1a, 0x2b, 0xb0, 0xb8, 0x8d, 0xe3, 0x8c, 0x2a, 0x63, 0xba, 0xa5, 0xda,
-    0x70, 0x52, 0x10, 0xa1, 0xc8, 0x52, 0xef, 0x1f, 0xa4, 0x51, 0x91, 0x1d,
-    0xff, 0xf5, 0xd7, 0x1b, 0x4a, 0xf8, 0x2c, 0xe3, 0x66, 0xb9, 0x38, 0x97,
-    0xe6, 0x31, 0x22, 0xf4, 0x8c, 0x1e, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99,
-    0xad, 0xd9, 0xb7, 0x54, 0x8b, 0x25, 0xf4, 0x6e, 0x6c, 0x74, 0x6e, 0xb1,
-    0x7d, 0xd6, 0xfd, 0x8e, 0xb1, 0x68, 0xd9, 0x62, 0xdd, 0x4b, 0x16, 0xfa,
-    0xc5, 0x46, 0xe6, 0xfa, 0x34, 0x17, 0x10, 0xad, 0xee, 0xba, 0xc6, 0x91,
-    0xcb, 0x17, 0xff, 0xf7, 0x5c, 0x33, 0x09, 0xf5, 0x9c, 0x62, 0x30, 0xcf,
-    0xc7, 0x2c, 0x5f, 0xef, 0xe7, 0x70, 0xd3, 0xf6, 0xb1, 0x7f, 0x9c, 0x7f,
-    0xc7, 0x23, 0x56, 0x2f, 0x7d, 0x8d, 0x58, 0xbe, 0xfb, 0xe1, 0xd6, 0x2c,
-    0x75, 0x8b, 0xfa, 0x1f, 0x9d, 0x00, 0xcc, 0x36, 0x81, 0x91, 0x5f, 0x7d,
-    0xbc, 0x25, 0x8b, 0xef, 0xcc, 0x79, 0xd6, 0x2f, 0x01, 0xce, 0xb1, 0x7f,
-    0xec, 0xfb, 0xc0, 0xb3, 0x05, 0xd7, 0xac, 0x5c, 0x50, 0x58, 0xbc, 0xda,
-    0xc5, 0x8b, 0xd9, 0xd4, 0x35, 0x8a, 0xc3, 0xd3, 0xec, 0x5d, 0xc7, 0x2f,
-    0xf9, 0xfa, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0x80, 0xeb, 0x15, 0x87, 0xa2,
-    0x23, 0xab, 0xfc, 0x33, 0x27, 0xda, 0xc1, 0xac, 0x5c, 0x1c, 0x72, 0xc5,
-    0x49, 0xe8, 0xfc, 0xd6, 0xf0, 0xb7, 0x65, 0x8b, 0xff, 0xfa, 0x37, 0x30,
-    0xbb, 0x11, 0x67, 0xcb, 0x63, 0x0c, 0xfc, 0x72, 0xc5, 0x46, 0xea, 0xfe,
-    0xb6, 0x66, 0x81, 0xb6, 0xe6, 0x7d, 0xa9, 0x3a, 0x2c, 0x79, 0x1e, 0x89,
-    0x8e, 0x3b, 0xf8, 0x4a, 0x93, 0xff, 0x9c, 0x83, 0x21, 0xea, 0x1e, 0xbe,
-    0xd7, 0xa7, 0x65, 0x8b, 0xf7, 0x84, 0xd0, 0xe2, 0xc5, 0xf6, 0x04, 0xc0,
-    0x58, 0xa9, 0x3f, 0x01, 0x92, 0x11, 0x4d, 0xff, 0x00, 0xc7, 0xf7, 0x27,
-    0x40, 0x58, 0xbf, 0xb9, 0x9a, 0x68, 0x62, 0xc5, 0xf3, 0x1b, 0xf7, 0x58,
-    0xa2, 0x3d, 0x0e, 0x16, 0xdd, 0x3b, 0x2c, 0x5f, 0xf9, 0x8b, 0xd8, 0x42,
-    0x86, 0x71, 0x62, 0xff, 0xd8, 0x7e, 0x34, 0x03, 0xe4, 0xe2, 0xc5, 0x47,
-    0xa2, 0x53, 0xe3, 0x1e, 0x3d, 0xbf, 0x87, 0x3d, 0x5d, 0x4e, 0x05, 0x8b,
-    0xcf, 0xb7, 0x96, 0x2f, 0xff, 0xff, 0xff, 0xf0, 0x8c, 0x2c, 0x89, 0xf8,
-    0x23, 0x98, 0x46, 0x99, 0xbf, 0xdf, 0xef, 0x25, 0xed, 0x4f, 0xbf, 0x87,
-    0x30, 0xcf, 0xc7, 0x2c, 0x54, 0xaa, 0x8c, 0xc8, 0x45, 0xbc, 0x2d, 0x58,
-    0xcf, 0xc6, 0x81, 0x0f, 0x5e, 0xf8, 0x4c, 0xb1, 0x7f, 0x1e, 0x48, 0xdc,
-    0xd9, 0x62, 0xff, 0xf1, 0xbf, 0xce, 0xe0, 0x4f, 0x11, 0xc3, 0xdd, 0x62,
-    0xff, 0xe6, 0x08, 0xcc, 0xef, 0xc6, 0x7a, 0x71, 0x62, 0xb1, 0x13, 0x04,
-    0xa1, 0x73, 0x1d, 0x62, 0xff, 0xcd, 0xa8, 0x4f, 0xbf, 0x22, 0xeb, 0xd6,
-    0x2a, 0x34, 0x4d, 0x87, 0x07, 0xb5, 0x0c, 0x7f, 0x10, 0x88, 0x5e, 0xf1,
-    0xf7, 0x75, 0x8b, 0xef, 0x3f, 0xe5, 0x62, 0x8c, 0x3c, 0x01, 0x0f, 0x5f,
-    0xf1, 0xa6, 0xb6, 0x14, 0xf7, 0xc5, 0x8b, 0xfe, 0x9f, 0xb9, 0xbe, 0xe3,
-    0x01, 0x62, 0x9c, 0xfd, 0x7e, 0x77, 0x7f, 0xcd, 0x0e, 0x0b, 0xd3, 0xee,
-    0x2c, 0x5f, 0xbd, 0xa9, 0x6d, 0xd6, 0x2f, 0xf8, 0xb0, 0xb3, 0xda, 0x98,
-    0x96, 0x28, 0x8f, 0x87, 0x85, 0x37, 0xf3, 0xea, 0x28, 0x08, 0xd5, 0x8b,
-    0xe0, 0xbc, 0xd0, 0x58, 0xbb, 0xf2, 0xb1, 0x58, 0x6e, 0xf8, 0x49, 0x6e,
-    0x8b, 0x17, 0xec, 0x3f, 0x9f, 0x65, 0x8b, 0x71, 0xcd, 0xef, 0x05, 0x28,
-    0xc4, 0x41, 0xca, 0xed, 0xcd, 0xc5, 0x8b, 0xff, 0xf3, 0x34, 0x1b, 0xe6,
-    0x66, 0xc2, 0xf3, 0xfe, 0x56, 0x2f, 0xff, 0xb0, 0x78, 0x58, 0xe7, 0x27,
-    0x37, 0xee, 0xb1, 0x5b, 0x22, 0xea, 0x21, 0x7e, 0x8a, 0xd7, 0x0b, 0x4b,
-    0x17, 0xe8, 0x71, 0xa3, 0xb1, 0x62, 0xfd, 0x26, 0x48, 0xe0, 0xb1, 0x73,
-    0x6e, 0xa9, 0x0c, 0xca, 0x73, 0xce, 0x62, 0x9b, 0xfe, 0x84, 0xfe, 0x5f,
-    0x69, 0x35, 0x62, 0xff, 0x4f, 0x70, 0x9d, 0x1e, 0x0b, 0x17, 0xff, 0xfd,
-    0xcf, 0x79, 0xff, 0xdc, 0x38, 0x42, 0xc3, 0x4d, 0x76, 0x82, 0xc5, 0xb0,
-    0x08, 0x9f, 0xf1, 0xad, 0xff, 0xff, 0x43, 0x0c, 0x6f, 0x0a, 0x4c, 0x19,
-    0x4e, 0xb4, 0xf8, 0x75, 0x8b, 0xe9, 0x3e, 0x0d, 0x62, 0xa5, 0x51, 0x1e,
-    0xef, 0x31, 0x10, 0x6a, 0x1b, 0x2c, 0x50, 0x4c, 0xf7, 0xf3, 0xc9, 0xf6,
-    0xc0, 0x96, 0x2e, 0x28, 0x2c, 0x58, 0xeb, 0x17, 0xda, 0xfb, 0x46, 0x68,
-    0xf6, 0x0e, 0x5e, 0x18, 0xbd, 0xff, 0xbb, 0x33, 0xd2, 0x67, 0x06, 0xf1,
-    0x2c, 0x53, 0xa2, 0x39, 0x92, 0xaf, 0xb8, 0x4f, 0xe5, 0x8b, 0x7d, 0x62,
-    0xe9, 0xd2, 0xc5, 0x6e, 0x6a, 0x7a, 0x09, 0x5f, 0xf7, 0x60, 0x0c, 0xfd,
-    0xf2, 0x60, 0xb1, 0x51, 0xb2, 0x2b, 0x5d, 0x2d, 0x89, 0x2f, 0xff, 0xe1,
-    0xe6, 0xf3, 0xf9, 0x39, 0x84, 0x26, 0xf4, 0xe9, 0x62, 0xee, 0x09, 0x62,
-    0xa0, 0x7e, 0x9d, 0xae, 0x5f, 0xc0, 0xe3, 0xf8, 0xa5, 0x62, 0xfd, 0xac,
-    0xe3, 0x12, 0xc5, 0xe6, 0x83, 0x2c, 0x57, 0x67, 0xe0, 0xe5, 0xba, 0x27,
-    0xbf, 0xff, 0xff, 0x4f, 0xdc, 0x64, 0xd8, 0xfd, 0x27, 0x58, 0x3e, 0x67,
-    0x47, 0xee, 0x05, 0x2b, 0x17, 0xcf, 0xa6, 0xd2, 0xc5, 0xdc, 0x8f, 0x58,
-    0xa8, 0x1b, 0xdf, 0x11, 0x5f, 0xff, 0xd0, 0xce, 0x78, 0x5b, 0x6f, 0xf7,
-    0x8b, 0xf3, 0xb6, 0x2c, 0x5f, 0xfd, 0x9d, 0xc3, 0xef, 0xef, 0xe0, 0xba,
-    0xf5, 0x8a, 0x95, 0x49, 0xd9, 0x09, 0x37, 0x2f, 0x68, 0x60, 0x08, 0x87,
-    0xa3, 0x05, 0xff, 0xe3, 0x33, 0xdf, 0xc2, 0x90, 0x02, 0x74, 0xb1, 0x71,
-    0x3a, 0xc5, 0xff, 0xfe, 0x2f, 0x7f, 0x0c, 0xc8, 0x48, 0x39, 0x86, 0x43,
-    0x3b, 0x58, 0xbf, 0xfd, 0x9e, 0xfe, 0x18, 0x1c, 0x90, 0x9b, 0xcb, 0x16,
-    0x06, 0x22, 0xb8, 0x98, 0xea, 0x53, 0x35, 0x64, 0xa2, 0x86, 0x25, 0xff,
-    0x9c, 0x5c, 0xc2, 0x14, 0x33, 0x8b, 0x14, 0xe7, 0xe3, 0xc3, 0x3b, 0xff,
-    0xff, 0xe2, 0x14, 0x33, 0x99, 0xe1, 0x37, 0xbf, 0x9b, 0xfd, 0xe2, 0xfc,
-    0xed, 0x8b, 0x17, 0x4f, 0x6b, 0x17, 0xec, 0x8f, 0x62, 0x02, 0xc5, 0xc5,
-    0xba, 0xc5, 0x40, 0xf0, 0x9c, 0xaa, 0x9d, 0x1f, 0x5c, 0x7f, 0xf2, 0xd5,
-    0xf6, 0xa1, 0x3a, 0x58, 0xbf, 0xfb, 0xdc, 0x7f, 0x14, 0x89, 0xb4, 0x6a,
-    0xc5, 0xce, 0x75, 0x8b, 0x75, 0xf2, 0x7f, 0xee, 0x47, 0xd4, 0x8b, 0x7f,
-    0xfd, 0xfc, 0xdc, 0xcc, 0xdc, 0x4c, 0x5d, 0x59, 0xf5, 0x8b, 0xf6, 0x9f,
-    0xd0, 0x95, 0x8a, 0xc3, 0xfd, 0x65, 0x5b, 0xfa, 0x7b, 0x09, 0xbf, 0xc5,
-    0x8a, 0xd9, 0x9f, 0x1d, 0x08, 0x4c, 0x0c, 0x87, 0x21, 0x36, 0x69, 0x0e,
-    0xf0, 0xef, 0x78, 0x6e, 0xc4, 0x69, 0xa9, 0x47, 0x67, 0x8d, 0x0f, 0xf0,
-    0xce, 0x29, 0x5e, 0xbc, 0x94, 0x0f, 0xe8, 0xc6, 0xc5, 0x0a, 0xee, 0x90,
-    0xb8, 0xea, 0x20, 0xb8, 0x12, 0xb1, 0x7f, 0x98, 0x2f, 0xbc, 0xea, 0x56,
-    0x2e, 0xf9, 0xab, 0x17, 0xff, 0xff, 0xe6, 0x1f, 0x3f, 0x87, 0x27, 0xd8,
-    0xc3, 0x88, 0x98, 0xdf, 0x96, 0x7b, 0x58, 0xb1, 0x58, 0x8e, 0x7d, 0x0b,
-    0xb1, 0x99, 0x0c, 0xdf, 0xc6, 0x71, 0xbc, 0xda, 0x58, 0xbf, 0xfc, 0xfc,
-    0x0f, 0x69, 0xd8, 0xb0, 0x02, 0xe2, 0xc5, 0xff, 0xe0, 0x1d, 0xa1, 0xfc,
-    0x03, 0x07, 0xd8, 0x4b, 0x16, 0xf7, 0x91, 0x36, 0x24, 0xdb, 0xff, 0xff,
-    0x85, 0x85, 0xec, 0xd8, 0xcc, 0x72, 0xf4, 0xbf, 0x70, 0x0f, 0x80, 0x58,
-    0xa7, 0x44, 0xe8, 0x8a, 0x6f, 0xda, 0xd8, 0xc1, 0xba, 0xc5, 0xf7, 0x30,
-    0x3c, 0x58, 0xbf, 0xfd, 0xe7, 0xe1, 0x9f, 0xcf, 0x96, 0x7b, 0x8b, 0x17,
-    0x66, 0xc6, 0x1f, 0x77, 0x51, 0x1d, 0x4a, 0xa5, 0x4f, 0xc6, 0xce, 0xc4,
-    0x45, 0x09, 0x9b, 0xc7, 0x98, 0x96, 0x2f, 0xa4, 0x36, 0xd2, 0xc5, 0xbc,
-    0xe7, 0x83, 0xa1, 0xeb, 0xff, 0xff, 0xfc, 0x42, 0xea, 0x33, 0x7f, 0x8b,
-    0xd2, 0x59, 0xb7, 0x37, 0xf8, 0x8b, 0xbc, 0x9f, 0x96, 0x2c, 0x5f, 0xd9,
-    0x26, 0x4f, 0x0e, 0xb1, 0x58, 0x8e, 0xa7, 0x27, 0xe4, 0x25, 0x6c, 0x4b,
-    0x17, 0xf3, 0x05, 0xe2, 0x63, 0x56, 0x2b, 0x0f, 0x00, 0x84, 0x6a, 0x08,
-    0x93, 0xf3, 0x9d, 0xf6, 0xb4, 0xdc, 0x58, 0xbf, 0x7f, 0x09, 0x8e, 0xb1,
-    0x7d, 0xdf, 0xe7, 0x8b, 0x17, 0xa2, 0x62, 0x58, 0xbe, 0xd6, 0x34, 0x4b,
-    0x17, 0xf8, 0x8d, 0xcf, 0xcb, 0x8d, 0x62, 0xfe, 0xea, 0xf6, 0x0b, 0xdc,
-    0x58, 0xb6, 0x39, 0xf2, 0x91, 0x9d, 0xfb, 0xde, 0x72, 0x35, 0x62, 0xff,
-    0xfb, 0x77, 0x0b, 0xec, 0xfe, 0x91, 0xfd, 0x8d, 0x58, 0xad, 0x93, 0x28,
-    0x1c, 0x22, 0x30, 0x97, 0x72, 0x9b, 0xed, 0xe4, 0xbc, 0xb1, 0x7f, 0x31,
-    0xf0, 0x9f, 0xcb, 0x17, 0xdb, 0x7e, 0x4d, 0x58, 0xbd, 0x3e, 0xe2, 0xc5,
-    0xff, 0xb0, 0xde, 0x4e, 0x10, 0xff, 0x2b, 0x15, 0xc3, 0xdb, 0x10, 0xed,
-    0xff, 0xf8, 0x4d, 0xe3, 0x33, 0xde, 0x6d, 0x14, 0xf7, 0x05, 0x8b, 0xe3,
-    0x35, 0x08, 0x2c, 0x5f, 0xff, 0x66, 0xc7, 0x9e, 0xae, 0x4e, 0x9a, 0x0f,
-    0xf5, 0x8a, 0x94, 0x67, 0xf1, 0x5f, 0xc4, 0xb7, 0xd2, 0x06, 0xf2, 0xc5,
-    0x18, 0xb8, 0x11, 0x02, 0x3c, 0x27, 0x88, 0x93, 0x51, 0xa2, 0x9d, 0x13,
-    0xe4, 0x6c, 0x59, 0xc8, 0x40, 0x7a, 0x1e, 0x31, 0xc5, 0xf7, 0xee, 0xa2,
-    0x60, 0x86, 0xb1, 0x7f, 0x6b, 0x6d, 0x60, 0xf1, 0x62, 0xfe, 0x62, 0xdb,
-    0x58, 0x35, 0x8a, 0x93, 0xdd, 0x11, 0x7d, 0xff, 0xde, 0x7d, 0x30, 0x0c,
-    0xee, 0x12, 0x75, 0x8b, 0xff, 0xa4, 0xe6, 0xb6, 0xb0, 0x1c, 0x6d, 0xd6,
-    0x2f, 0xc5, 0x30, 0xe3, 0x2c, 0x54, 0xa6, 0xbd, 0x08, 0x44, 0xb9, 0x09,
-    0x23, 0xf4, 0x46, 0xbf, 0xa2, 0xe1, 0x9b, 0x45, 0xb2, 0xc5, 0xe2, 0x9f,
-    0xac, 0x5b, 0xf2, 0x7a, 0x2e, 0x6b, 0x7d, 0x21, 0xb1, 0x2c, 0x5f, 0xfb,
-    0xf2, 0x42, 0x9f, 0x73, 0x09, 0x62, 0xf6, 0x34, 0x4b, 0x15, 0xa3, 0xfc,
-    0xf1, 0x17, 0x51, 0xed, 0xff, 0xbf, 0x24, 0x29, 0xf7, 0x30, 0x96, 0x2f,
-    0x63, 0x44, 0xb1, 0x7b, 0xf2, 0x73, 0x11, 0x19, 0xe3, 0x2e, 0xa3, 0xdb,
-    0xec, 0x3b, 0xf1, 0x62, 0x86, 0x9c, 0xae, 0xf1, 0x97, 0x79, 0x16, 0xe2,
-    0x35, 0x62, 0xdf, 0x58, 0xbf, 0xfb, 0xf2, 0x33, 0x0b, 0x39, 0xc9, 0xdd,
-    0x62, 0xff, 0xff, 0xef, 0x39, 0xf4, 0xf9, 0xd9, 0x0b, 0xd3, 0xf3, 0x3a,
-    0x3f, 0xa2, 0x95, 0x8a, 0xc4, 0x67, 0x38, 0x97, 0x91, 0xaf, 0xff, 0xf0,
-    0xb6, 0xfe, 0x6f, 0xb8, 0xb7, 0xd4, 0xfb, 0xf3, 0xdc, 0x16, 0x2f, 0xf1,
-    0xfe, 0xde, 0x62, 0x02, 0xc5, 0xff, 0x6e, 0x66, 0xef, 0xc1, 0x16, 0xeb,
-    0x17, 0xff, 0xff, 0xff, 0xb8, 0x58, 0x00, 0x49, 0x19, 0xbf, 0xc5, 0xe9,
-    0x2c, 0xdb, 0x9b, 0xfc, 0x45, 0xde, 0x4f, 0xcb, 0x16, 0x2a, 0x53, 0x18,
-    0xc3, 0x30, 0x8f, 0xaf, 0x07, 0x20, 0x58, 0xbf, 0x8b, 0x07, 0xf9, 0x09,
-    0x62, 0xcc, 0x47, 0x99, 0xd0, 0x7a, 0xec, 0x82, 0xc5, 0xf8, 0x03, 0x2c,
-    0xfa, 0xc5, 0x4a, 0xba, 0xf1, 0x9c, 0x64, 0x39, 0xbb, 0x2e, 0x78, 0xe0,
-    0x34, 0xf8, 0x72, 0x86, 0x17, 0xbf, 0xbc, 0xdf, 0x30, 0x72, 0xb1, 0x7e,
-    0xcf, 0x3f, 0x61, 0x2c, 0x5e, 0xf3, 0x92, 0xc5, 0xf3, 0xfb, 0x4e, 0xb1,
-    0x7f, 0x73, 0x37, 0xdc, 0x5c, 0x58, 0xae, 0x1e, 0x9f, 0x88, 0xae, 0xce,
-    0x2c, 0x5f, 0x71, 0x8a, 0x0b, 0x16, 0x84, 0x0d, 0xcf, 0x05, 0xef, 0x6d,
-    0xce, 0x2c, 0x5c, 0x10, 0xd6, 0x2f, 0xbe, 0xc2, 0x3a, 0xc5, 0xff, 0xd9,
-    0xd5, 0xee, 0xa2, 0x9f, 0x0a, 0x7b, 0x58, 0xb8, 0x5a, 0x58, 0xb7, 0xbe,
-    0x7c, 0x7c, 0x4b, 0xa7, 0x45, 0x71, 0x42, 0x1a, 0xa5, 0x52, 0xb1, 0xa5,
-    0xfd, 0x95, 0x3b, 0x7b, 0x2d, 0x91, 0x3f, 0x87, 0xc5, 0x0c, 0x7b, 0x98,
-    0x6b, 0x17, 0xe8, 0x31, 0x0b, 0x75, 0x8b, 0xff, 0xe6, 0x73, 0xe0, 0xf3,
-    0xef, 0x27, 0x61, 0xac, 0x56, 0xe8, 0x8d, 0xec, 0x5f, 0x45, 0x37, 0x36,
-    0xeb, 0x17, 0x4c, 0x7a, 0xc5, 0xfc, 0x53, 0xbe, 0xd8, 0x12, 0xc5, 0xff,
-    0xfa, 0x73, 0xb2, 0xcf, 0xbc, 0xfb, 0xef, 0x27, 0x58, 0xad, 0x91, 0x6b,
-    0xd7, 0x8c, 0x78, 0x6b, 0xa1, 0x85, 0xfc, 0xfc, 0xc1, 0x8f, 0x16, 0x2f,
-    0xfd, 0xe6, 0x20, 0x18, 0x1e, 0x76, 0x12, 0xc5, 0xf7, 0xbd, 0x27, 0x58,
-    0xbe, 0x87, 0x9f, 0x65, 0x8b, 0xff, 0xf4, 0x94, 0xf0, 0xc7, 0xfe, 0xf2,
-    0x45, 0x9e, 0x58, 0xac, 0x46, 0xf1, 0xa8, 0x6c, 0x47, 0xc2, 0x4b, 0xff,
-    0xe9, 0x38, 0xa7, 0x63, 0x35, 0x8f, 0xf9, 0x1a, 0xc5, 0xf3, 0x10, 0x7c,
-    0x58, 0xbc, 0x59, 0xba, 0xc5, 0xff, 0x3f, 0x9c, 0xf1, 0x71, 0xc9, 0x62,
-    0xff, 0xfe, 0xd6, 0x7b, 0x9f, 0x68, 0x0a, 0x73, 0xd3, 0xdc, 0x16, 0x2b,
-    0x74, 0x4a, 0xe8, 0xe6, 0xff, 0xd2, 0xfa, 0xf7, 0xb2, 0x74, 0x05, 0x8b,
-    0x7a, 0x4f, 0x8a, 0x22, 0x4b, 0xf6, 0xef, 0xa3, 0xc1, 0x62, 0xff, 0x1f,
-    0x34, 0x02, 0x10, 0x16, 0x2f, 0xb3, 0xa1, 0x4a, 0xc5, 0xff, 0x16, 0x6c,
-    0xc6, 0x40, 0x5a, 0x58, 0xbf, 0xfa, 0x78, 0x42, 0xc7, 0xe7, 0xd8, 0xeb,
-    0x16, 0x82, 0xc5, 0x41, 0x53, 0x86, 0x11, 0xbc, 0x62, 0x9f, 0x28, 0x62,
-    0xa2, 0x34, 0xe1, 0x1f, 0x43, 0xb0, 0xd0, 0xef, 0xf7, 0x50, 0xb4, 0x66,
-    0xb7, 0xdd, 0x62, 0xdb, 0xac, 0x56, 0x1e, 0x7b, 0x1e, 0x5f, 0x81, 0x3e,
-    0x91, 0xac, 0x54, 0xaf, 0x28, 0x64, 0x39, 0xf7, 0x45, 0x78, 0xc2, 0xfe,
-    0x78, 0xd2, 0xb0, 0x4a, 0x1a, 0x82, 0x20, 0xbf, 0xe1, 0xfe, 0x78, 0x59,
-    0x9b, 0x2c, 0x58, 0xeb, 0x17, 0x9c, 0x5b, 0xac, 0x56, 0xc6, 0xc0, 0x62,
-    0x57, 0xec, 0xd6, 0x9c, 0x25, 0x8b, 0xfb, 0xcf, 0x00, 0xb3, 0xeb, 0x17,
-    0x7d, 0xce, 0x7b, 0x01, 0x94, 0xdf, 0xef, 0x13, 0x19, 0xbe, 0xf8, 0xb1,
-    0x7c, 0xfb, 0xb6, 0x96, 0x2f, 0xfa, 0x12, 0x40, 0xe1, 0x82, 0x25, 0x8b,
-    0xfb, 0xcf, 0x00, 0xb3, 0xeb, 0x17, 0x85, 0xee, 0x76, 0x7d, 0x21, 0x9d,
-    0x5f, 0xa7, 0xdf, 0x98, 0x2c, 0x5e, 0x9f, 0x4a, 0xc5, 0x41, 0x30, 0x61,
-    0xc2, 0x33, 0xc6, 0xdd, 0x0a, 0x2f, 0xe9, 0xf8, 0xbb, 0x87, 0x16, 0x2f,
-    0xfc, 0x77, 0x2c, 0xd7, 0x39, 0x9c, 0x58, 0xbc, 0xe2, 0xeb, 0xd6, 0x2f,
-    0xf4, 0xe9, 0x88, 0xb0, 0xd5, 0x8a, 0x23, 0xd4, 0xf1, 0x15, 0xe1, 0x78,
-    0x4b, 0x14, 0xe6, 0xfc, 0xe4, 0x37, 0xff, 0xf0, 0xa0, 0xfc, 0x93, 0xef,
-    0xf7, 0x8b, 0xf3, 0xb6, 0x2c, 0x5f, 0xd2, 0x72, 0x9e, 0xc0, 0xb1, 0x7f,
-    0x81, 0x27, 0x29, 0xec, 0x0b, 0x16, 0x63, 0x4f, 0x8b, 0xb2, 0xeb, 0xdf,
-    0xc2, 0x58, 0xa8, 0x2e, 0x5c, 0x63, 0x49, 0xaf, 0x5d, 0x97, 0x3c, 0x67,
-    0x91, 0x22, 0x9c, 0xc3, 0xf0, 0xd1, 0x22, 0x0f, 0x43, 0x00, 0x45, 0x37,
-    0x7e, 0x25, 0x8b, 0xec, 0x8b, 0x22, 0x58, 0xbf, 0x68, 0x5e, 0xcd, 0x96,
-    0x2f, 0xb3, 0x43, 0x95, 0x8b, 0x70, 0xc3, 0xf0, 0x92, 0x42, 0x2a, 0xbe,
-    0x86, 0x67, 0x16, 0x29, 0x62, 0xe7, 0xe2, 0xc5, 0x7c, 0xd1, 0x90, 0x65,
-    0x76, 0x89, 0x9d, 0x1a, 0x32, 0x2d, 0xf1, 0x09, 0x83, 0x58, 0xbb, 0x09,
-    0x62, 0xd3, 0xb1, 0xb9, 0x81, 0x1d, 0xa0, 0xb1, 0x7e, 0xed, 0xf7, 0x71,
-    0xac, 0x53, 0xa7, 0xdc, 0xd1, 0x91, 0x01, 0xa7, 0x84, 0xe1, 0x89, 0x5e,
-    0xcc, 0xdd, 0x62, 0xff, 0xb8, 0x19, 0x67, 0xb8, 0x19, 0xd6, 0x2f, 0xf7,
-    0x33, 0x40, 0x21, 0x01, 0x62, 0xb0, 0xfc, 0x3c, 0x79, 0x7e, 0x17, 0x06,
-    0xff, 0x58, 0xbf, 0xfa, 0x7d, 0xcf, 0xcb, 0xfb, 0x93, 0xb2, 0xc5, 0xfb,
-    0x35, 0x31, 0x71, 0x62, 0xb4, 0x7d, 0xdf, 0x45, 0xbf, 0xff, 0x9f, 0x85,
-    0x9b, 0x4e, 0xff, 0x78, 0xbf, 0x3b, 0x62, 0xc5, 0xe6, 0xfc, 0xac, 0x54,
-    0x0f, 0xe7, 0xcb, 0xb7, 0xde, 0xf8, 0xa3, 0x96, 0x2f, 0xf6, 0x84, 0x7e,
-    0x70, 0x30, 0x96, 0x2f, 0xf6, 0x4e, 0x9a, 0x0f, 0xf5, 0x8b, 0xfc, 0xe1,
-    0x72, 0x7e, 0xd1, 0xeb, 0x15, 0xa3, 0xe9, 0xf1, 0x95, 0xfb, 0xdf, 0xef,
-    0x3a, 0x96, 0x2f, 0x63, 0xec, 0xb1, 0x7f, 0xbf, 0x90, 0xf1, 0x64, 0x16,
-    0x2b, 0x65, 0x57, 0x63, 0x84, 0xbf, 0x70, 0x9b, 0x72, 0x2d, 0x13, 0x9e,
-    0x14, 0x3f, 0x22, 0xe1, 0x6f, 0x87, 0x6f, 0x4f, 0xb8, 0xb1, 0x7e, 0xe3,
-    0x1b, 0xf7, 0x58, 0xbf, 0xe8, 0xf1, 0xfc, 0x5c, 0xee, 0x0c, 0xb1, 0x73,
-    0xff, 0x0f, 0xa0, 0x45, 0x37, 0xbc, 0xfb, 0xac, 0x54, 0xae, 0x1d, 0xe4,
-    0xad, 0xc7, 0x84, 0x83, 0x42, 0x17, 0xc5, 0x96, 0xc5, 0x8b, 0xfa, 0x13,
-    0x09, 0x3c, 0x16, 0x2b, 0x63, 0x7e, 0xe2, 0x37, 0x7e, 0x0b, 0x16, 0x25,
-    0x8b, 0xff, 0xcd, 0xa8, 0x6f, 0xf7, 0x1e, 0x9c, 0x5b, 0x2c, 0x56, 0x8f,
-    0x78, 0x42, 0x37, 0xf3, 0x9a, 0x1f, 0x27, 0x16, 0x2f, 0xff, 0xfd, 0x1d,
-    0x9d, 0xc0, 0xcf, 0x66, 0x9b, 0xdc, 0x70, 0x18, 0x4f, 0xe5, 0x8b, 0xfe,
-    0xf4, 0x1c, 0x1f, 0xc0, 0x32, 0xc5, 0x6c, 0x8a, 0xb1, 0x39, 0x5f, 0xf3,
-    0x17, 0x3d, 0x90, 0x9d, 0x2c, 0x5d, 0x91, 0xb2, 0xc5, 0x69, 0x35, 0x22,
-    0x86, 0xd7, 0x09, 0x03, 0x38, 0xbf, 0xfb, 0x52, 0x0f, 0xbc, 0xe8, 0x07,
-    0x82, 0xc5, 0xf4, 0x5f, 0x70, 0x2c, 0x5f, 0x4f, 0xe4, 0x0b, 0x15, 0x28,
-    0x8b, 0x35, 0x16, 0x38, 0x92, 0xff, 0xfc, 0x4c, 0x17, 0xb3, 0xe6, 0x75,
-    0x9d, 0x64, 0x6f, 0xd7, 0x5e, 0xb7, 0xac, 0x58, 0xbb, 0x3e, 0xb1, 0x7f,
-    0xd9, 0xcf, 0xb4, 0x00, 0xdd, 0xac, 0x5f, 0xfc, 0x03, 0xb9, 0x60, 0x0b,
-    0x1a, 0x25, 0x8a, 0xc4, 0x4a, 0x38, 0xb8, 0x8e, 0xaf, 0xf3, 0xfd, 0xe4,
-    0xa2, 0x12, 0xc5, 0xff, 0xed, 0x4f, 0xbd, 0x26, 0x66, 0x9a, 0x18, 0xb1,
-    0x7a, 0x7f, 0xd6, 0xac, 0x5f, 0xb3, 0x0b, 0xbf, 0x2c, 0x5f, 0xf0, 0xb4,
-    0xdc, 0x33, 0xdb, 0x04, 0xb1, 0x67, 0xd1, 0xf3, 0x78, 0xa2, 0xa5, 0x32,
-    0xcc, 0x33, 0x74, 0xa6, 0x84, 0x45, 0xf6, 0xdf, 0xcf, 0x2c, 0x5f, 0x8f,
-    0x9e, 0xcd, 0x2c, 0x5f, 0xe6, 0x20, 0x18, 0x16, 0x7d, 0x62, 0xfc, 0x64,
-    0xf4, 0x6f, 0xac, 0x54, 0x0f, 0x80, 0x66, 0xb7, 0xe8, 0xb9, 0xc7, 0x89,
-    0x62, 0xff, 0x87, 0xac, 0x17, 0xe4, 0xf8, 0xb1, 0x58, 0x88, 0x67, 0x22,
-    0x11, 0x5d, 0xff, 0xf7, 0xd9, 0xf8, 0xfd, 0x35, 0x3b, 0x36, 0xb7, 0x58,
-    0xbf, 0xde, 0x7d, 0x3e, 0xcc, 0x75, 0x8b, 0xdd, 0x30, 0xce, 0x22, 0x1c,
-    0x35, 0x3b, 0xfc, 0x40, 0x0f, 0xff, 0x6d, 0x96, 0x2b, 0x0f, 0xb9, 0xce,
-    0x2f, 0xa3, 0xb3, 0x52, 0xb1, 0x7f, 0xff, 0x47, 0x61, 0x85, 0x9b, 0x07,
-    0x03, 0x39, 0xc7, 0x0b, 0x8b, 0x16, 0xcd, 0x91, 0x12, 0x02, 0x5a, 0xfa,
-    0x34, 0x8a, 0x15, 0x35, 0x2c, 0x90, 0x1d, 0x88, 0x46, 0xed, 0x91, 0xba,
-    0x3c, 0x33, 0xa2, 0x33, 0xd4, 0x61, 0xdf, 0x8d, 0x69, 0x8f, 0xc0, 0x49,
-    0xc8, 0xc3, 0xbd, 0x1f, 0xad, 0xbc, 0xb1, 0x7f, 0xff, 0xe2, 0xcf, 0x93,
-    0x6e, 0x61, 0xc4, 0xe5, 0x3a, 0xd6, 0x7b, 0x8b, 0x17, 0xff, 0x4f, 0xd9,
-    0xfd, 0x3f, 0x2e, 0xdd, 0x62, 0xb7, 0x45, 0x7e, 0x9b, 0x2a, 0x24, 0x72,
-    0x94, 0x30, 0x6f, 0xf4, 0x80, 0xef, 0xe2, 0x95, 0x8b, 0xfc, 0x42, 0x6e,
-    0xc6, 0xe6, 0xac, 0x5f, 0xf4, 0xe8, 0x1a, 0xd4, 0x9f, 0x8b, 0x14, 0xe7,
-    0xdf, 0xf3, 0x5b, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf, 0xe9, 0xee, 0x1c,
-    0xff, 0xe4, 0xeb, 0x17, 0xdc, 0x27, 0x95, 0x8a, 0x94, 0x44, 0x1a, 0x58,
-    0xc7, 0x77, 0x16, 0xcb, 0x17, 0xfe, 0xd0, 0xfe, 0x2d, 0x66, 0xff, 0xc5,
-    0x8a, 0xc3, 0xd9, 0x71, 0x8b, 0xf3, 0xe9, 0xba, 0x9d, 0x62, 0xa0, 0x79,
-    0x5b, 0x90, 0x5f, 0xdb, 0x36, 0xc4, 0x2f, 0x2c, 0x5f, 0xf6, 0x05, 0xfc,
-    0x01, 0xe7, 0x4b, 0x17, 0xfc, 0xe0, 0xfe, 0xef, 0xcc, 0x1a, 0xc5, 0x80,
-    0xb1, 0x5a, 0x3c, 0xc2, 0x3a, 0xbe, 0xf0, 0x9b, 0xcb, 0x17, 0xe9, 0xf6,
-    0xb0, 0x6b, 0x17, 0xde, 0xd6, 0x0d, 0x62, 0xdc, 0x30, 0xf2, 0xe4, 0xa2,
-    0xf0, 0x9b, 0xcb, 0x14, 0x62, 0x2c, 0xce, 0xdd, 0xe2, 0x8b, 0xdd, 0x33,
-    0x4b, 0x17, 0xc3, 0xf8, 0x8d, 0x58, 0xa9, 0x3f, 0x5c, 0x31, 0x61, 0xfb,
-    0xf6, 0x6f, 0xcc, 0x1a, 0xc5, 0xf8, 0x13, 0xd3, 0x09, 0x62, 0xf3, 0x10,
-    0x16, 0x2b, 0xe7, 0xdc, 0xc5, 0x22, 0x29, 0xa9, 0x5d, 0x2e, 0x81, 0x46,
-    0x42, 0x84, 0xd8, 0x54, 0xf7, 0x0d, 0x27, 0x23, 0xd1, 0x83, 0x42, 0x18,
-    0xa3, 0x49, 0xe4, 0x26, 0xaf, 0xb8, 0xfe, 0x75, 0x8b, 0x9c, 0x6b, 0x17,
-    0x08, 0x6b, 0x15, 0x1b, 0x1e, 0x8c, 0x79, 0x10, 0x85, 0xef, 0xe8, 0x9f,
-    0xfa, 0xc3, 0xac, 0x5f, 0x07, 0xc9, 0xc5, 0x8b, 0x9c, 0x25, 0x8b, 0xba,
-    0xb1, 0x62, 0x99, 0x10, 0x80, 0x2f, 0xe1, 0x1f, 0x86, 0x2f, 0xf3, 0x77,
-    0xcc, 0xf1, 0x4a, 0xc5, 0xfe, 0x3e, 0x13, 0x6a, 0x7a, 0x2c, 0x5f, 0xd8,
-    0x4d, 0xa9, 0xe8, 0xb1, 0x6f, 0x18, 0x7c, 0x47, 0x34, 0xbe, 0x9d, 0x88,
-    0x4b, 0x17, 0xe9, 0xf7, 0x3e, 0xeb, 0x15, 0xa3, 0xcb, 0xe1, 0x1d, 0xf8,
-    0xb0, 0xfa, 0xc5, 0x8b, 0xe1, 0xfd, 0xce, 0xb1, 0x73, 0x0d, 0x62, 0xdb,
-    0x18, 0x6e, 0xa0, 0x47, 0x7b, 0xa6, 0x0d, 0x62, 0xe7, 0xfa, 0xc5, 0x68,
-    0xdb, 0x7c, 0x7e, 0xa5, 0x37, 0x7c, 0x74, 0x39, 0x13, 0x30, 0x89, 0x7e,
-    0xff, 0x6f, 0xfc, 0xef, 0xc1, 0x9d, 0x62, 0xfd, 0xf9, 0xd1, 0xe0, 0xb1,
-    0x6f, 0x2c, 0x5f, 0xb6, 0x1b, 0x31, 0xab, 0x16, 0x1e, 0x1b, 0xc1, 0x09,
-    0x5f, 0xff, 0xfb, 0xd2, 0x5e, 0xe6, 0xa5, 0xe1, 0xf9, 0xfb, 0x9b, 0xde,
-    0xfa, 0x58, 0xbe, 0xcf, 0xbf, 0x16, 0x2b, 0x11, 0x22, 0x4d, 0xf7, 0xfc,
-    0x13, 0x16, 0xdf, 0xed, 0xa3, 0xd6, 0x2f, 0xff, 0xb3, 0x5d, 0xc3, 0x27,
-    0x6f, 0xbc, 0xea, 0x56, 0x2f, 0xf1, 0x6e, 0xde, 0x6e, 0xc1, 0xf4, 0x47,
-    0x91, 0xfd, 0xff, 0xe1, 0x1c, 0x31, 0x8e, 0x40, 0x79, 0xcf, 0x2c, 0x58,
-    0x12, 0x89, 0x72, 0x4b, 0xbe, 0xef, 0xd9, 0xda, 0xc5, 0xff, 0xc7, 0x93,
-    0x4c, 0x2c, 0xe3, 0xe6, 0xeb, 0x15, 0x87, 0xd6, 0xe4, 0xb7, 0xc7, 0xe6,
-    0x69, 0x62, 0xfe, 0x23, 0x3f, 0x39, 0x1e, 0xb1, 0x52, 0x7a, 0x98, 0x47,
-    0x7f, 0x00, 0xed, 0x0d, 0xba, 0xd5, 0x8b, 0xfe, 0xf7, 0x30, 0x71, 0x14,
-    0x8d, 0x62, 0xa4, 0xfb, 0xdc, 0xd6, 0xf8, 0x0f, 0xdc, 0x16, 0x2f, 0xf4,
-    0x97, 0x9f, 0x62, 0x95, 0x8b, 0xff, 0xcf, 0xa7, 0xda, 0x4b, 0x3f, 0xa1,
-    0x74, 0x58, 0xa9, 0x5c, 0xf2, 0x81, 0xc0, 0xd9, 0x77, 0x85, 0xbf, 0x71,
-    0xa3, 0xea, 0x12, 0x47, 0x74, 0xfc, 0x23, 0xc0, 0x40, 0x44, 0x9e, 0x32,
-    0xbf, 0xfd, 0xfc, 0xe6, 0x74, 0x67, 0xe0, 0x7d, 0x81, 0x62, 0xff, 0xf4,
-    0x96, 0xed, 0xe6, 0x34, 0x3d, 0xa7, 0x65, 0x8b, 0xff, 0x38, 0xc5, 0xee,
-    0x37, 0x98, 0xd5, 0x8b, 0xfb, 0x02, 0xee, 0x1c, 0x30, 0xd4, 0x47, 0x32,
-    0x75, 0xff, 0xfd, 0x85, 0x86, 0xfd, 0xa2, 0xfb, 0x1b, 0x9a, 0xcf, 0x2c,
-    0x5f, 0xfc, 0x1c, 0xf6, 0x19, 0x16, 0x3f, 0x7e, 0x58, 0xa9, 0x4f, 0x21,
-    0xe1, 0xb9, 0xf4, 0x96, 0x5c, 0xa8, 0xdd, 0xf8, 0x46, 0xfa, 0xd3, 0x28,
-    0xd1, 0x9a, 0x35, 0x1c, 0x4c, 0xe1, 0x46, 0xd1, 0xa1, 0xc2, 0x55, 0xc8,
-    0xe3, 0xc1, 0xca, 0xc0, 0x88, 0xd9, 0x43, 0x7b, 0xca, 0x8e, 0xee, 0x50,
-    0x2b, 0xce, 0x15, 0xc5, 0x28, 0x33, 0x53, 0xbc, 0x87, 0x95, 0xa3, 0xf9,
-    0xf5, 0x36, 0x9d, 0x3f, 0x04, 0xa9, 0x9e, 0xbd, 0x40, 0xa7, 0x32, 0x39,
-    0x49, 0x9a, 0xf4, 0xf6, 0xe8, 0xa1, 0xf7, 0xd2, 0x17, 0x61, 0x1e, 0x47,
-    0x4a, 0x0c, 0x0e, 0x74, 0xeb, 0xaa, 0x53, 0xc5, 0xfb, 0xac, 0xdb, 0x67,
-    0xfa, 0xc5, 0xff, 0x7a, 0x47, 0xad, 0x49, 0xf8, 0xb1, 0x7f, 0x4b, 0x68,
-    0x39, 0x02, 0xc5, 0xfe, 0x86, 0x10, 0x33, 0x06, 0xb1, 0x7f, 0xa4, 0xbc,
-    0x52, 0x7e, 0x2c, 0x5f, 0xe1, 0xb9, 0x78, 0xa4, 0x0b, 0x17, 0x16, 0xcb,
-    0x17, 0xff, 0x08, 0x8c, 0xf4, 0x32, 0x3d, 0x88, 0x0b, 0x15, 0x04, 0x7b,
-    0x0c, 0xcb, 0x73, 0x27, 0x32, 0xf8, 0xc5, 0xfd, 0xf9, 0x88, 0x4f, 0xa5,
-    0x8b, 0x8d, 0xdd, 0x62, 0xfd, 0x09, 0x9e, 0x3a, 0xc5, 0xa5, 0x62, 0x8e,
-    0x6e, 0x02, 0x27, 0xbd, 0xb0, 0xb6, 0x58, 0xbf, 0x1b, 0x25, 0x9c, 0x58,
-    0xb8, 0x70, 0x58, 0xb0, 0x16, 0x28, 0xe6, 0xa9, 0x86, 0x2a, 0x51, 0x69,
-    0x84, 0x4e, 0x40, 0xca, 0x57, 0xc3, 0x66, 0xed, 0x62, 0xfe, 0x7e, 0xdf,
-    0x79, 0x0d, 0x62, 0xe1, 0x6e, 0xb1, 0x4c, 0x7d, 0x84, 0x47, 0xc3, 0x0b,
-    0xce, 0x19, 0xd6, 0x2f, 0x8b, 0x81, 0xf1, 0x62, 0xfd, 0x99, 0xff, 0x3a,
-    0xc5, 0xfe, 0x22, 0x9e, 0xce, 0xde, 0x58, 0xbf, 0xf4, 0x1c, 0x61, 0xfb,
-    0xbd, 0xdc, 0xeb, 0x17, 0xff, 0x33, 0xf8, 0x5a, 0x6e, 0x18, 0x11, 0x2c,
-    0x5f, 0xfe, 0xfe, 0x11, 0x37, 0xa4, 0xbd, 0x1d, 0x8b, 0x14, 0x34, 0xcb,
-    0x5c, 0x9e, 0x23, 0x3f, 0xa1, 0xf9, 0x1a, 0xe6, 0xe8, 0xb1, 0x7f, 0xb6,
-    0xcf, 0x49, 0x38, 0x16, 0x2b, 0x73, 0xcc, 0x71, 0x9b, 0xfc, 0xdb, 0x0f,
-    0xf3, 0xce, 0xd6, 0x2f, 0xfe, 0xdb, 0x3d, 0x24, 0xe0, 0xce, 0xfc, 0xb1,
-    0x7f, 0xa2, 0x83, 0x6b, 0x6f, 0x89, 0x62, 0xd1, 0x2c, 0x52, 0xc5, 0xf3,
-    0x10, 0x3d, 0x25, 0xfe, 0x09, 0xd4, 0xa3, 0x3c, 0xe8, 0xb1, 0xca, 0xd7,
-    0x7a, 0x32, 0x34, 0x5f, 0x3e, 0x93, 0x01, 0x9d, 0x64, 0x64, 0x9b, 0xa5,
-    0x1c, 0xbf, 0xf1, 0x83, 0x34, 0x29, 0x40, 0x5b, 0xd7, 0x8f, 0x72, 0x35,
-    0x1f, 0x42, 0x5e, 0x38, 0x88, 0x38, 0xc1, 0x6f, 0xff, 0xfe, 0x17, 0x70,
-    0x8c, 0x62, 0xf6, 0x1f, 0x83, 0xfc, 0xe8, 0x6c, 0xc1, 0x2c, 0x5e, 0xe8,
-    0x07, 0x58, 0xbf, 0xd2, 0x6f, 0x70, 0xf4, 0x84, 0xb1, 0x7e, 0x90, 0xb5,
-    0x27, 0x58, 0xa8, 0x1f, 0x01, 0x1b, 0xde, 0x90, 0xa3, 0x3a, 0xe2, 0x28,
-    0x31, 0xfe, 0xa3, 0x19, 0x7c, 0xd9, 0x49, 0x93, 0x28, 0x7f, 0xfa, 0x31,
-    0x7b, 0xff, 0xd1, 0x87, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x34,
-    0x97, 0xff, 0xa3, 0x0e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x71,
-    0x2f, 0x00, 0xa5, 0x62, 0xfd, 0x07, 0x20, 0x3a, 0xc5, 0xfa, 0x19, 0xe8,
-    0x41, 0x62, 0xff, 0x74, 0x9f, 0x98, 0x53, 0x05, 0x8b, 0xff, 0xdb, 0xed,
-    0x9f, 0x6c, 0x29, 0x17, 0x5f, 0xc5, 0x8b, 0xf6, 0xb7, 0x66, 0xdd, 0x52,
-    0x40, 0x97, 0xf8, 0x4c, 0x5b, 0xc0, 0x71, 0xeb, 0x17, 0xff, 0xec, 0xd4,
-    0xf3, 0xd0, 0xc2, 0x71, 0xc0, 0x71, 0xeb, 0x17, 0x9a, 0x11, 0x90, 0x4c,
-    0x5f, 0x14, 0x00, 0x6f, 0xc3, 0x8b, 0xff, 0xcf, 0x27, 0x61, 0xea, 0x7d,
-    0xfc, 0x1a, 0xc5, 0xfe, 0xc3, 0xb7, 0x7a, 0x73, 0x56, 0x2f, 0xb8, 0x5d,
-    0xc1, 0x62, 0xd1, 0x92, 0xaa, 0xb3, 0x07, 0x3b, 0x27, 0x72, 0x93, 0xc6,
-    0x9b, 0xf5, 0x1e, 0x24, 0xf8, 0xd6, 0xe8, 0xde, 0x36, 0x58, 0xbd, 0xf7,
-    0x3a, 0xc5, 0xf6, 0xec, 0xdb, 0xaa, 0x4e, 0x02, 0xff, 0x0f, 0xf3, 0x1d,
-    0x9a, 0x95, 0x8a, 0xd1, 0xf3, 0x91, 0x8d, 0xdd, 0xf1, 0x62, 0xf8, 0xdd,
-    0xd8, 0x6b, 0x17, 0x48, 0x6b, 0x17, 0xf1, 0x67, 0xb7, 0x7e, 0x2c, 0x5d,
-    0x2e, 0xb1, 0x70, 0xc4, 0xb1, 0x7e, 0xcf, 0xee, 0xdb, 0x2c, 0x58, 0x96,
-    0x2f, 0xf1, 0x48, 0x1b, 0xc2, 0x95, 0x8a, 0xe1, 0xe1, 0xf8, 0x46, 0xf0,
-    0x9a, 0x0b, 0x16, 0x82, 0xd0, 0x57, 0xcd, 0x99, 0x0e, 0xdf, 0xe2, 0x84,
-    0xb8, 0xf0, 0xeb, 0x17, 0x00, 0x0b, 0x17, 0x4f, 0x16, 0x2a, 0x36, 0x55,
-    0x78, 0x32, 0x2c, 0x84, 0x27, 0x64, 0x2e, 0x33, 0xa2, 0x53, 0x8c, 0x7c,
-    0xb8, 0x02, 0xc4, 0x31, 0xc6, 0xdf, 0x2a, 0x88, 0x80, 0x33, 0x2e, 0xa1,
-    0x8b, 0xf4, 0x23, 0x0d, 0xeb, 0x4d, 0x58, 0xbf, 0x30, 0xfe, 0xc0, 0x58,
-    0xbf, 0x38, 0xfe, 0xe6, 0xac, 0x5d, 0x9d, 0x16, 0x2b, 0x73, 0xc2, 0xf1,
-    0x4d, 0xc6, 0xc6, 0x1a, 0x88, 0xd6, 0x6a, 0xa8, 0xc4, 0xf3, 0xa6, 0x1b,
-    0x4f, 0x0c, 0x1b, 0xfd, 0xd6, 0x46, 0xfd, 0x6c, 0x01, 0x07, 0x58, 0xbf,
-    0x8f, 0x3e, 0x14, 0x4c, 0xb1, 0x7d, 0xe6, 0x6d, 0x96, 0x2f, 0x77, 0x0e,
-    0x2c, 0x52, 0xc5, 0x99, 0x8d, 0x58, 0x07, 0xef, 0xd1, 0x42, 0x4a, 0x0b,
-    0x14, 0xb1, 0x58, 0x6d, 0x48, 0xa6, 0xfd, 0x86, 0x96, 0x01, 0x62, 0xc0,
-    0x58, 0xa8, 0x1b, 0xa2, 0x28, 0xbc, 0x0c, 0x09, 0x62, 0xf8, 0xa7, 0x3e,
-    0xb1, 0x52, 0x6f, 0xf6, 0x1e, 0xb9, 0xe3, 0x3a, 0xe2, 0x7e, 0x92, 0x89,
-    0xd9, 0x7e, 0x93, 0x89, 0x6b, 0xcb, 0x21, 0xaf, 0xde, 0xfb, 0xee, 0xb1,
-    0x7f, 0xbd, 0xde, 0xef, 0xcf, 0xba, 0xc5, 0xe3, 0x7e, 0xeb, 0x15, 0x87,
-    0xa8, 0x23, 0x6a, 0x8f, 0x44, 0x99, 0x39, 0x5f, 0xb5, 0xbb, 0x36, 0xea,
-    0x91, 0x24, 0xba, 0x11, 0x92, 0x7b, 0x98, 0x4b, 0x5f, 0x4e, 0x5d, 0xa3,
-    0x68, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72, 0x40, 0x1e, 0xcb,
-    0x17, 0xe9, 0x36, 0x30, 0x79, 0x11, 0xed, 0xf0, 0xc2, 0xff, 0x4e, 0x46,
-    0x1d, 0x9b, 0xa9, 0x62, 0xa3, 0x11, 0xfe, 0xf0, 0x84, 0x24, 0x3b, 0xf6,
-    0x04, 0x01, 0x71, 0x62, 0xe0, 0x80, 0xb1, 0x7f, 0xdf, 0x9d, 0x67, 0x8a,
-    0x4e, 0xb1, 0x7c, 0x6e, 0x98, 0x25, 0x8b, 0xf9, 0xf9, 0xf8, 0xf7, 0x3a,
-    0xc5, 0x6e, 0x88, 0xe7, 0x38, 0xf1, 0x2d, 0xfe, 0x6f, 0x16, 0x6c, 0xc4,
-    0xb1, 0x7e, 0x98, 0x8a, 0x46, 0xb1, 0x7b, 0xac, 0x3f, 0x6b, 0x16, 0x09,
-    0x62, 0xa0, 0x6d, 0xcd, 0x24, 0xbe, 0x72, 0xd3, 0xac, 0x5d, 0xdc, 0xac,
-    0x57, 0xcd, 0xc9, 0x10, 0xdf, 0xcf, 0xb0, 0xa2, 0xee, 0x56, 0x2f, 0xcd,
-    0xad, 0x87, 0x2b, 0x15, 0x27, 0xb5, 0x03, 0x1a, 0x58, 0xbe, 0x6e, 0xe1,
-    0xc5, 0x8b, 0x66, 0x8d, 0x81, 0x06, 0x5f, 0xff, 0x84, 0x4c, 0x6f, 0x8d,
-    0x92, 0x86, 0x7d, 0xce, 0xb1, 0x73, 0x76, 0xb1, 0x77, 0x78, 0xb1, 0x7e,
-    0x3b, 0x7d, 0xe2, 0x58, 0xa7, 0x3c, 0x16, 0x18, 0xad, 0x1f, 0xcf, 0x96,
-    0x6e, 0xd4, 0x16, 0x2f, 0xa2, 0x62, 0x02, 0xc5, 0x39, 0xbb, 0x61, 0x8b,
-    0xff, 0xc5, 0x8c, 0x3e, 0x1f, 0x0b, 0xdc, 0xfa, 0xc5, 0xff, 0xe9, 0xfc,
-    0x9f, 0x7f, 0xbf, 0xb3, 0x0e, 0xb1, 0x6c, 0x35, 0x12, 0x7b, 0xa4, 0xdf,
-    0x8f, 0xac, 0x1f, 0x96, 0x2f, 0xf3, 0x0e, 0x7a, 0x39, 0x6c, 0xb1, 0x7c,
-    0x09, 0x78, 0x96, 0x2f, 0xee, 0xc3, 0xf1, 0x48, 0x16, 0x2f, 0xee, 0xfd,
-    0x25, 0x9c, 0x58, 0xa9, 0x3d, 0xe7, 0x30, 0xa9, 0x47, 0xfb, 0x94, 0x80,
-    0xd4, 0x50, 0x81, 0xbf, 0xb5, 0xa7, 0xf4, 0x9d, 0x62, 0xfe, 0xdb, 0xee,
-    0x01, 0x71, 0x62, 0xf6, 0x04, 0x6a, 0xc5, 0xf7, 0xe4, 0x8d, 0x58, 0xa9,
-    0x45, 0x03, 0x17, 0x70, 0xc3, 0xa8, 0x7e, 0xfc, 0xc4, 0x42, 0xd9, 0x62,
-    0xc3, 0x58, 0xa5, 0x8b, 0xec, 0xe8, 0x29, 0x58, 0xb6, 0xce, 0x6c, 0x08,
-    0x32, 0xb6, 0x3e, 0x86, 0x42, 0xbf, 0xed, 0x73, 0x3a, 0x05, 0x24, 0x35,
-    0x8b, 0x9a, 0x33, 0x65, 0xff, 0x01, 0x95, 0x64, 0x29, 0xcd, 0x30, 0xdc,
-    0xcb, 0xb5, 0xf7, 0x5b, 0x89, 0xeb, 0x4a, 0x27, 0x25, 0x68, 0x67, 0x81,
-    0x74, 0xa1, 0x65, 0xc8, 0xca, 0x7d, 0x0e, 0x00, 0x8f, 0xa3, 0xa1, 0x20,
-    0x19, 0x15, 0xff, 0xdb, 0x46, 0x77, 0xd5, 0x85, 0x9f, 0x6e, 0x2c, 0x56,
-    0xd0, 0x84, 0x8b, 0x85, 0xf6, 0xb0, 0x6e, 0xad, 0x12, 0xf8, 0x25, 0x85,
-    0xf2, 0x74, 0x2b, 0xd3, 0x98, 0xdd, 0x29, 0x04, 0xdd, 0x51, 0x94, 0xdf,
-    0x47, 0xfd, 0xe3, 0xd6, 0x2f, 0xda, 0xf1, 0x0b, 0xcb, 0x17, 0xfe, 0x35,
-    0xa3, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x35, 0x0b, 0xee, 0x4f, 0xb8, 0xb1,
-    0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0xa9, 0x60, 0x96,
-    0x2f, 0x3f, 0x70, 0x58, 0xa7, 0x36, 0x3f, 0x13, 0xa5, 0x8a, 0x94, 0xdc,
-    0xf0, 0xa4, 0xd2, 0x9e, 0xd4, 0x4e, 0x47, 0xe8, 0x40, 0xf5, 0x10, 0x5f,
-    0xfd, 0xac, 0xea, 0x98, 0xde, 0x35, 0x18, 0x67, 0xe3, 0x96, 0x2f, 0xff,
-    0xd8, 0x6f, 0x37, 0x83, 0x4c, 0x6f, 0x1a, 0x8c, 0x33, 0xf1, 0xcb, 0x17,
-    0xff, 0xff, 0xf7, 0x5c, 0x16, 0xdb, 0x34, 0x7c, 0x7e, 0x4c, 0x3f, 0xd7,
-    0xf6, 0xf3, 0x31, 0xbc, 0x6a, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xc0, 0x30,
-    0xcf, 0xc7, 0x46, 0x6c, 0x9b, 0x83, 0xac, 0xf4, 0x69, 0xa8, 0xc5, 0x47,
-    0x9d, 0x64, 0x7b, 0xb7, 0xf6, 0x6b, 0x76, 0x6d, 0xd5, 0x21, 0x49, 0x7f,
-    0xe6, 0x63, 0xe6, 0x80, 0x42, 0x02, 0xc5, 0xff, 0x7b, 0x99, 0xa0, 0x10,
-    0x80, 0xb1, 0x71, 0x32, 0xc5, 0x49, 0xe8, 0x0c, 0xea, 0xff, 0x3f, 0x7e,
-    0x66, 0x3f, 0x16, 0x2e, 0xe3, 0x2c, 0x5e, 0xe4, 0xb2, 0xc5, 0x40, 0xf9,
-    0xf0, 0xd1, 0xc5, 0xef, 0x8b, 0x69, 0xd2, 0xc5, 0xf8, 0xa2, 0xfb, 0x41,
-    0x62, 0xfe, 0x60, 0x73, 0xd9, 0xba, 0xc5, 0x49, 0xfd, 0xe1, 0x19, 0x14,
-    0xdf, 0xb0, 0x7b, 0x60, 0x4b, 0x17, 0x1e, 0x33, 0xea, 0x85, 0x0a, 0x11,
-    0xdc, 0x84, 0x47, 0xa1, 0x51, 0xd0, 0xb2, 0xa3, 0x15, 0x5d, 0xb4, 0xa5,
-    0x0b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x1a, 0x17, 0xf1, 0x38, 0xf4, 0xfb,
-    0x2c, 0x5a, 0x33, 0x0f, 0x95, 0xcd, 0xef, 0xfc, 0x07, 0x9f, 0x46, 0x7f,
-    0x1f, 0xeb, 0x17, 0xa3, 0x5c, 0x74, 0x6e, 0xb1, 0x7d, 0xd6, 0x75, 0xdc,
-    0x6b, 0x8d, 0x6b, 0x17, 0xcf, 0xf7, 0x3a, 0xc5, 0xc2, 0xfa, 0xc5, 0xf4,
-    0x6b, 0xeb, 0xb8, 0xd7, 0x1a, 0xd6, 0x2f, 0x6a, 0x62, 0x58, 0xbf, 0x7d,
-    0xa2, 0x73, 0xac, 0x53, 0x9e, 0x39, 0xc7, 0xaf, 0xfb, 0x0e, 0xfa, 0xce,
-    0x45, 0x2b, 0x17, 0xbd, 0x9f, 0x58, 0xa1, 0x9e, 0xb7, 0x8e, 0x6f, 0xf7,
-    0xbc, 0xed, 0xd2, 0x7c, 0xb1, 0x7f, 0xff, 0x85, 0xcf, 0xe0, 0xc3, 0x0f,
-    0x8e, 0x1f, 0x9f, 0x91, 0x06, 0xb1, 0x52, 0x89, 0xd6, 0x35, 0xbd, 0xe9,
-    0x1a, 0xc5, 0xfe, 0xf7, 0xbe, 0xc7, 0xc2, 0x58, 0xbf, 0xd1, 0x3b, 0xfe,
-    0x2c, 0xf4, 0x9e, 0x83, 0x8e, 0xd9, 0xd6, 0x2e, 0x60, 0x92, 0x2f, 0x64,
-    0xf4, 0x58, 0xa7, 0x36, 0xda, 0x18, 0xbf, 0xe9, 0xfc, 0xed, 0xa9, 0xc1,
-    0xac, 0x5f, 0xfa, 0x67, 0xa4, 0x94, 0xc5, 0x31, 0x2c, 0x5f, 0xa2, 0xe3,
-    0x67, 0x96, 0x2f, 0xf6, 0xb5, 0x3d, 0xf3, 0xe3, 0x58, 0xb7, 0xe4, 0xf7,
-    0xdc, 0xa6, 0xff, 0xfa, 0x7f, 0x31, 0x70, 0x5e, 0x10, 0xa2, 0x9e, 0x8b,
-    0x15, 0x2a, 0xea, 0x9d, 0xde, 0x3e, 0x17, 0xf1, 0x38, 0xe9, 0x24, 0xe8,
-    0xff, 0x20, 0x23, 0x9f, 0x42, 0x7f, 0xa1, 0x35, 0xfc, 0xfc, 0x8b, 0x35,
-    0x2b, 0x16, 0xd9, 0x62, 0xff, 0xf7, 0x9f, 0xe2, 0xfb, 0x3f, 0x7c, 0x93,
-    0x56, 0x28, 0x67, 0xbf, 0x82, 0x77, 0xdb, 0xb3, 0x6e, 0xa9, 0x27, 0xcb,
-    0xff, 0x7d, 0xbd, 0xc6, 0xed, 0x88, 0x0b, 0x17, 0xf7, 0x03, 0x90, 0xb5,
-    0x2b, 0x16, 0x7d, 0x1f, 0x79, 0xcf, 0xee, 0xf4, 0xac, 0x5f, 0xcf, 0xe1,
-    0x69, 0xb8, 0xb1, 0x5a, 0x4c, 0x33, 0xf0, 0xa0, 0xf1, 0x3f, 0x41, 0x7b,
-    0xe0, 0xb7, 0x8b, 0xad, 0x58, 0xbf, 0xfc, 0x2e, 0x7d, 0xa1, 0x3e, 0x29,
-    0x07, 0x16, 0x2f, 0xfb, 0x3a, 0x7d, 0xe3, 0xb3, 0x46, 0xac, 0x5e, 0xfb,
-    0xfb, 0x48, 0x89, 0xe2, 0x55, 0xff, 0xa3, 0x3f, 0x9f, 0x6e, 0x8f, 0xce,
-    0xd6, 0x2f, 0xf7, 0xdf, 0x4f, 0xe6, 0x89, 0x62, 0x9c, 0xfe, 0x62, 0x45,
-    0xbf, 0xcf, 0xe7, 0xf7, 0xc5, 0xe5, 0x8b, 0xff, 0xf0, 0xb6, 0xd4, 0x99,
-    0x3d, 0x05, 0x13, 0x6a, 0x7a, 0x2c, 0x5f, 0x00, 0x42, 0xd2, 0xc5, 0xf4,
-    0x9f, 0x4c, 0xb1, 0x7f, 0xa7, 0xdf, 0x68, 0x8c, 0xc5, 0x8b, 0xfb, 0x3c,
-    0xfe, 0x68, 0x96, 0x2f, 0xfe, 0x99, 0xd4, 0xf1, 0xf5, 0xa7, 0xe2, 0xc5,
-    0x44, 0x8a, 0x6e, 0x1a, 0xf8, 0xba, 0xa2, 0x4f, 0x43, 0x44, 0x47, 0x34,
-    0x02, 0xe9, 0x12, 0x7a, 0x19, 0x17, 0xf6, 0x66, 0xfe, 0xcd, 0xd6, 0x2e,
-    0xd7, 0xd6, 0x2f, 0xf9, 0xa0, 0xe3, 0xfc, 0xc3, 0x8b, 0x17, 0xe1, 0x7b,
-    0xd3, 0xd1, 0x62, 0xff, 0xe9, 0x8a, 0x27, 0x04, 0xc5, 0x16, 0x01, 0x62,
-    0xd3, 0xa3, 0xf3, 0x22, 0xbb, 0xee, 0x8f, 0xce, 0xd6, 0x2d, 0xf7, 0x3c,
-    0xc6, 0x26, 0xbb, 0xe2, 0x58, 0xac, 0x37, 0xc2, 0x26, 0xb7, 0x52, 0xc5,
-    0xfb, 0x3e, 0xe5, 0xe5, 0x8b, 0x9a, 0x25, 0x8b, 0x9b, 0xcb, 0x17, 0xfe,
-    0x21, 0x7d, 0xf5, 0x9c, 0x8a, 0x56, 0x2a, 0x23, 0xd6, 0x38, 0xbd, 0xfd,
-    0xc2, 0x6d, 0xb6, 0x95, 0x8b, 0xff, 0xff, 0xf4, 0xf9, 0xc9, 0xb9, 0xcc,
-    0xf7, 0xd8, 0xff, 0xc2, 0x99, 0xe3, 0x0b, 0xa2, 0xc5, 0xf3, 0x44, 0xff,
-    0x58, 0xbf, 0xfd, 0xac, 0x78, 0xb8, 0x29, 0xec, 0xa7, 0xcb, 0x17, 0xee,
-    0x82, 0x8f, 0x90, 0x2c, 0x54, 0xaa, 0x19, 0x80, 0xaf, 0x64, 0xee, 0xdd,
-    0x1e, 0x47, 0xa2, 0xf3, 0xc2, 0x07, 0xc4, 0x62, 0x4b, 0xbd, 0xe1, 0x69,
-    0x62, 0xfe, 0x11, 0x60, 0x05, 0xc5, 0x8a, 0xec, 0xf3, 0x38, 0x3d, 0x7f,
-    0xef, 0x68, 0x51, 0x73, 0x76, 0x8b, 0x8b, 0x15, 0x87, 0xce, 0x22, 0x3b,
-    0x80, 0x1a, 0xc5, 0xff, 0x45, 0x30, 0x0c, 0x00, 0x14, 0x16, 0x2f, 0xe2,
-    0x9f, 0x14, 0xf9, 0x62, 0xa0, 0x88, 0x2c, 0x19, 0x63, 0xdb, 0xd1, 0x3f,
-    0x16, 0x2f, 0x9e, 0x75, 0x8b, 0x17, 0xe9, 0xf7, 0x79, 0xe9, 0x37, 0xff,
-    0x1e, 0xbf, 0xf4, 0x42, 0x2d, 0xb9, 0xbb, 0x45, 0xc5, 0x8a, 0x94, 0x40,
-    0xe1, 0xed, 0xcd, 0xc5, 0x8b, 0xf0, 0xa2, 0x89, 0x8d, 0x58, 0xbf, 0xef,
-    0x4f, 0x6d, 0x16, 0xa7, 0xa2, 0xc5, 0x47, 0xa2, 0x03, 0x82, 0xfe, 0x2c,
-    0xa5, 0x8b, 0xfb, 0x42, 0x81, 0x67, 0x6b, 0x17, 0xbe, 0xfa, 0x58, 0xa8,
-    0xd8, 0xf6, 0x30, 0x30, 0x45, 0xf6, 0xc5, 0x8b, 0x46, 0x46, 0xed, 0x97,
-    0x4f, 0x58, 0x59, 0xd6, 0x9e, 0x46, 0x84, 0x51, 0xac, 0x62, 0x67, 0x0b,
-    0xb6, 0x84, 0xd0, 0xe1, 0x1b, 0x91, 0x96, 0x9a, 0x8b, 0xbc, 0x2d, 0x5e,
-    0x53, 0xec, 0x4b, 0xba, 0x2f, 0x38, 0xc7, 0xe3, 0x36, 0x69, 0x47, 0x25,
-    0x19, 0xd7, 0x21, 0x47, 0xe8, 0x77, 0x0a, 0x14, 0x31, 0xd0, 0x8b, 0xea,
-    0x33, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23,
-    0x51, 0x7f, 0xf4, 0x0a, 0x63, 0x26, 0x2c, 0x21, 0x62, 0xc5, 0xfb, 0x5b,
-    0xb3, 0x6e, 0xa9, 0x2e, 0xcb, 0xb0, 0x96, 0x2b, 0x0f, 0x35, 0xcd, 0xee,
-    0x8f, 0xf2, 0xc5, 0xff, 0x3f, 0xdc, 0xd9, 0x1b, 0x1d, 0x62, 0xff, 0xf6,
-    0x75, 0x3f, 0x9e, 0x06, 0x14, 0xfb, 0x8b, 0x17, 0xff, 0x49, 0xc3, 0xf3,
-    0x90, 0xa1, 0x9c, 0x58, 0xbc, 0x44, 0x35, 0x8b, 0xc7, 0x9f, 0xac, 0x52,
-    0xc5, 0xc1, 0x46, 0x41, 0x32, 0xbd, 0x0d, 0xfc, 0xe4, 0x09, 0xa4, 0x8a,
-    0x21, 0xc0, 0x87, 0x6f, 0xfa, 0x33, 0x3e, 0xfa, 0xf0, 0x99, 0x62, 0xa3,
-    0x13, 0xfc, 0x78, 0xd2, 0xf8, 0xeb, 0x77, 0x7d, 0x4b, 0x17, 0x01, 0xd6,
-    0x2c, 0x35, 0x8b, 0xa4, 0xeb, 0x15, 0xf3, 0x53, 0xc1, 0x2b, 0x47, 0x2c,
-    0x58, 0x96, 0x2b, 0x63, 0x4c, 0x71, 0x5b, 0xb6, 0x95, 0x8b, 0xed, 0xd9,
-    0xb7, 0x54, 0x97, 0xc5, 0xe0, 0x82, 0x09, 0x22, 0xc4, 0x91, 0x18, 0x68,
-    0x6f, 0xcc, 0x2e, 0xbf, 0xe2, 0x58, 0xad, 0x22, 0x90, 0xea, 0x5e, 0x24,
-    0xbf, 0xdf, 0xc3, 0x5a, 0x7b, 0xea, 0x58, 0xbd, 0x09, 0xed, 0x62, 0xfb,
-    0xb0, 0x49, 0x2c, 0x5d, 0xf7, 0x58, 0xb6, 0x49, 0xba, 0xf1, 0x1d, 0xc0,
-    0xfa, 0xc5, 0xc2, 0xe2, 0xc5, 0xd9, 0xf5, 0x8a, 0x19, 0xaf, 0x88, 0x62,
-    0xe6, 0xe8, 0xb1, 0x7d, 0x01, 0x16, 0xcb, 0x17, 0xf3, 0x7b, 0x93, 0x9b,
-    0x2c, 0x54, 0x47, 0xa4, 0x11, 0x25, 0xee, 0x48, 0x16, 0x2b, 0xe7, 0x83,
-    0xe2, 0x4b, 0x4a, 0xc5, 0xf1, 0x37, 0x7c, 0x58, 0xac, 0x3d, 0x6e, 0x11,
-    0x78, 0x46, 0xf0, 0x59, 0xa5, 0x8b, 0x79, 0x62, 0xf6, 0x4f, 0x6b, 0x17,
-    0xfc, 0xfa, 0xcd, 0x9e, 0x18, 0x35, 0x8b, 0xfd, 0xa0, 0x7b, 0x8c, 0x0c,
-    0x58, 0xa7, 0x45, 0xd6, 0x87, 0xbe, 0x24, 0xc3, 0xa2, 0x39, 0xbf, 0xf4,
-    0x18, 0x0d, 0xa7, 0xdd, 0xfb, 0x58, 0xb8, 0x80, 0xb1, 0x5d, 0x9e, 0xbf,
-    0xd0, 0x2f, 0xba, 0xbe, 0x20, 0xd6, 0x2f, 0x45, 0x91, 0x2c, 0x59, 0xd6,
-    0x2b, 0xb3, 0xd8, 0x88, 0xa0, 0xe3, 0xf6, 0xd2, 0xc5, 0x2c, 0x53, 0x97,
-    0xda, 0x12, 0xa5, 0x8b, 0x3a, 0xc5, 0xb6, 0x34, 0xbd, 0xf8, 0x65, 0xba,
-    0x2c, 0x57, 0xcf, 0xe1, 0x8f, 0x04, 0x51, 0x7d, 0x85, 0x30, 0x58, 0xb4,
-    0x67, 0x58, 0xbd, 0xd3, 0xd7, 0x07, 0x25, 0x03, 0x64, 0x78, 0x11, 0x64,
-    0x2f, 0x37, 0x30, 0x88, 0xe3, 0x4b, 0x07, 0x25, 0x64, 0x70, 0x11, 0x14,
-    0x60, 0x5c, 0x87, 0x47, 0xa1, 0x3e, 0x27, 0xb8, 0xe8, 0x63, 0x86, 0x5d,
-    0x7f, 0xfa, 0x30, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x47, 0xb2,
-    0xdd, 0x7a, 0xc5, 0xff, 0x0d, 0xb7, 0x9d, 0xc4, 0x43, 0x58, 0xbf, 0xfe,
-    0x78, 0x72, 0x3f, 0xe2, 0xdf, 0x36, 0x30, 0x7a, 0x58, 0xbf, 0xff, 0xb3,
-    0xc4, 0x2d, 0xda, 0x3e, 0x7a, 0x36, 0x86, 0xfa, 0x58, 0xbf, 0xe1, 0xb4,
-    0x7c, 0xe8, 0x6d, 0x1e, 0xb1, 0x7b, 0xa9, 0xbb, 0x58, 0xbf, 0xff, 0xe2,
-    0x01, 0x8d, 0xd3, 0xdc, 0x1b, 0x74, 0x6f, 0x8a, 0x12, 0x4b, 0x15, 0x28,
-    0x8c, 0x72, 0x1b, 0xce, 0x40, 0x58, 0xad, 0x93, 0xfb, 0x81, 0xdc, 0x4b,
-    0x1a, 0x60, 0xfc, 0x32, 0xfa, 0x10, 0xdf, 0xfc, 0x2d, 0x45, 0xa7, 0xd9,
-    0x8e, 0xfc, 0x58, 0xbf, 0x38, 0xe7, 0x5c, 0x58, 0xbf, 0xfb, 0x3f, 0x9e,
-    0xef, 0x77, 0xd7, 0xf1, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x9c, 0x25,
-    0xf1, 0xc5, 0xee, 0x2c, 0x5e, 0xd0, 0x86, 0xb1, 0x7f, 0x3c, 0x04, 0x09,
-    0x89, 0x62, 0xb0, 0xf3, 0x7e, 0x3d, 0x7f, 0xe7, 0xe8, 0xd1, 0x71, 0xf5,
-    0x27, 0x58, 0xbf, 0xa5, 0xf5, 0xa7, 0x09, 0x62, 0xff, 0xd8, 0xe0, 0x90,
-    0x31, 0x0b, 0x16, 0x2f, 0x7f, 0x22, 0x58, 0xb7, 0xd6, 0x28, 0x66, 0xc1,
-    0x87, 0xad, 0x19, 0xd6, 0xae, 0x76, 0x4c, 0xa1, 0x2d, 0x98, 0x60, 0x8e,
-    0x32, 0x8c, 0x46, 0x34, 0xdd, 0xdc, 0x62, 0x21, 0x3a, 0x09, 0x17, 0x09,
-    0xb2, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x22, 0x79,
-    0x7f, 0xe7, 0x8a, 0x32, 0x45, 0x3e, 0x90, 0x2c, 0x5f, 0x7e, 0x48, 0xd5,
-    0x8b, 0xf6, 0xa2, 0xcc, 0x09, 0x62, 0xe3, 0x63, 0x22, 0x3c, 0xd0, 0xc8,
-    0xea, 0x5d, 0x56, 0xd6, 0xd2, 0xbb, 0xa1, 0x09, 0x3c, 0x29, 0x36, 0xb3,
-    0x2a, 0xde, 0x3a, 0xce, 0xd7, 0xe2, 0x95, 0x1f, 0xa9, 0xf2, 0x2f, 0xc6,
-    0x4f, 0xc9, 0xd4, 0xbe, 0x90, 0xbc, 0x09, 0x64, 0x38, 0x47, 0xdf, 0xe8,
-    0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x42, 0xa2, 0xfd, 0xad, 0xd9, 0xb7, 0x54,
-    0x93, 0x25, 0xfc, 0xff, 0xc6, 0xec, 0x0b, 0x16, 0x8c, 0xc3, 0xe5, 0x8e,
-    0x37, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x23,
-    0x39, 0x7f, 0xe6, 0x84, 0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x24, 0x69, 0x7e,
-    0x63, 0x87, 0x20, 0x58, 0xb4, 0x61, 0xcf, 0xe7, 0xea, 0x15, 0xb2, 0x7b,
-    0x43, 0x85, 0x51, 0xa5, 0xbe, 0x86, 0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad,
-    0xd9, 0xb7, 0x54, 0x87, 0x45, 0xc0, 0xe8, 0xb1, 0x7e, 0xd6, 0xd3, 0xbe,
-    0x2c, 0x5f, 0xc5, 0x9e, 0xe4, 0x9d, 0x62, 0xf6, 0xb3, 0x65, 0x8b, 0xd3,
-    0xee, 0x2c, 0x5e, 0xd6, 0xd1, 0x9f, 0x45, 0x63, 0x0d, 0x70, 0xab, 0xc5,
-    0xa1, 0x8f, 0x5f, 0xfe, 0x21, 0x78, 0x46, 0xfb, 0xbd, 0xdf, 0x5c, 0x58,
-    0xbf, 0xfc, 0x26, 0x78, 0x38, 0x38, 0x2e, 0x7c, 0x4b, 0x17, 0xd9, 0xa2,
-    0x95, 0x8b, 0xda, 0x84, 0x66, 0x22, 0xef, 0x89, 0xfe, 0x4b, 0xa8, 0xc5,
-    0x4b, 0x73, 0x0f, 0xc7, 0x8c, 0x6e, 0xf6, 0xf9, 0xa5, 0x8b, 0x7d, 0x62,
-    0xa4, 0xd8, 0x08, 0x7a, 0xfd, 0x1b, 0x75, 0xba, 0xe7, 0x16, 0x2f, 0xff,
-    0xee, 0xbb, 0x30, 0x7f, 0x70, 0x7f, 0x0b, 0x86, 0x19, 0xf8, 0xe5, 0x8b,
-    0xdb, 0x8b, 0x75, 0x8b, 0x84, 0x4b, 0x17, 0xfd, 0x87, 0xe3, 0xc7, 0x66,
-    0xa5, 0x62, 0xa3, 0x64, 0x6e, 0x6e, 0xd5, 0x1e, 0x41, 0xd4, 0x2f, 0x7e,
-    0xf1, 0xfe, 0xe3, 0x58, 0xbe, 0xe0, 0x8e, 0xeb, 0x17, 0xa4, 0xe3, 0x58,
-    0xb8, 0x2f, 0xac, 0x53, 0x9e, 0xc9, 0x11, 0x84, 0x3b, 0x7e, 0xc2, 0x1e,
-    0x6c, 0xb1, 0x7f, 0xcf, 0xae, 0x16, 0x0f, 0xf2, 0xb1, 0x7b, 0x3b, 0x1a,
-    0xc5, 0xda, 0xc5, 0x8b, 0xe9, 0x9d, 0xf0, 0x66, 0xd7, 0x43, 0xd4, 0xe8,
-    0xcc, 0xf9, 0x41, 0x36, 0xdf, 0xb3, 0x5b, 0x88, 0xd5, 0x8b, 0xfe, 0xde,
-    0x4f, 0x8e, 0x79, 0x8f, 0x58, 0xbe, 0x7d, 0x33, 0xac, 0x5f, 0xf8, 0xb0,
-    0xd6, 0x8b, 0x9f, 0x91, 0xac, 0x5e, 0x89, 0xbc, 0xb1, 0x7d, 0xbb, 0x36,
-    0xea, 0x92, 0x68, 0xbc, 0x13, 0x7d, 0x62, 0xfe, 0x9d, 0xf3, 0x7f, 0x89,
-    0x62, 0xd9, 0xd9, 0xe7, 0x1c, 0x7a, 0xff, 0xd8, 0x43, 0x93, 0x3a, 0xe7,
-    0x40, 0x3a, 0xc5, 0xd2, 0x4b, 0x15, 0xc3, 0xdd, 0xe8, 0x8f, 0x7e, 0x7e,
-    0x7b, 0x3e, 0xb1, 0x7f, 0x9f, 0x59, 0x14, 0x8b, 0xaf, 0x58, 0xa1, 0xaa,
-    0x6f, 0xc2, 0xb3, 0x4f, 0x1c, 0x86, 0x24, 0x0d, 0x0f, 0x13, 0xff, 0x21,
-    0x0b, 0xe2, 0x4e, 0x85, 0x17, 0xda, 0x61, 0xba, 0xc5, 0xff, 0xed, 0xdb,
-    0x5c, 0xfb, 0x3f, 0x39, 0x9c, 0x58, 0xbf, 0xff, 0xec, 0x2f, 0x71, 0xf7,
-    0xc2, 0xe6, 0xff, 0x7f, 0xee, 0x1e, 0xcb, 0x17, 0xfd, 0xc6, 0xef, 0x22,
-    0x9f, 0xf1, 0x62, 0xcf, 0xf4, 0x78, 0x92, 0x5f, 0x9a, 0xef, 0xf6, 0xb6,
-    0xe6, 0xb5, 0x21, 0x2c, 0x5f, 0xd9, 0xb6, 0x6f, 0x83, 0x58, 0xbf, 0xf8,
-    0xcd, 0xfe, 0xff, 0xdd, 0xb9, 0xf9, 0x58, 0xaf, 0xa3, 0x89, 0x8d, 0x08,
-    0xdf, 0x85, 0xf7, 0xfe, 0xfb, 0x96, 0xdc, 0x14, 0xea, 0x25, 0x8b, 0xff,
-    0xf6, 0x6d, 0x3c, 0x7d, 0x61, 0x98, 0xe5, 0x27, 0x58, 0xa8, 0x22, 0x57,
-    0xc8, 0x37, 0xbd, 0x3c, 0x58, 0xb8, 0xf0, 0x58, 0xa9, 0x36, 0xb0, 0x1d,
-    0xbf, 0xec, 0xe9, 0xac, 0x8a, 0x27, 0x3a, 0xc5, 0xfd, 0x84, 0x68, 0xf9,
-    0xb2, 0xc5, 0xfb, 0x37, 0xf6, 0x6e, 0xb1, 0x61, 0x2c, 0x5f, 0xff, 0xe9,
-    0xdb, 0xd9, 0xf3, 0x0b, 0x07, 0xf9, 0xd7, 0x85, 0x1e, 0xb1, 0x52, 0x8d,
-    0x2c, 0x30, 0x88, 0xab, 0xe2, 0x57, 0xde, 0xe3, 0x01, 0x62, 0xfd, 0xd5,
-    0xfc, 0x23, 0x56, 0x2e, 0x6e, 0xd6, 0x2f, 0xf4, 0xfb, 0x9a, 0x73, 0xe2,
-    0xc5, 0xe0, 0x79, 0xd6, 0x2f, 0xf7, 0x37, 0x7d, 0x69, 0xf6, 0x58, 0xa9,
-    0x47, 0x6e, 0x11, 0xee, 0x59, 0xd8, 0xc3, 0x19, 0xf0, 0x76, 0xfe, 0xc2,
-    0x1f, 0x01, 0xd1, 0x62, 0xff, 0x86, 0xc7, 0x67, 0x1c, 0x92, 0xc5, 0x49,
-    0xf3, 0xe1, 0x85, 0xff, 0xfd, 0xb0, 0xb5, 0x17, 0x36, 0x98, 0xb9, 0xfc,
-    0x1b, 0xf4, 0x58, 0xbf, 0xff, 0xdf, 0x63, 0x4b, 0x21, 0xf9, 0x86, 0x7c,
-    0xb1, 0xb6, 0x58, 0xbe, 0x36, 0x4b, 0x75, 0x8b, 0xfe, 0xcd, 0x34, 0xb9,
-    0x49, 0xd6, 0x2f, 0xfb, 0x77, 0xdf, 0x00, 0x79, 0xd2, 0xc5, 0xff, 0xed,
-    0x0b, 0x9f, 0x68, 0xb1, 0xf4, 0xc6, 0xac, 0x5b, 0xf2, 0x88, 0x7c, 0x3b,
-    0xbf, 0xff, 0xfe, 0x9e, 0xf7, 0xfe, 0x19, 0xfc, 0xdf, 0xef, 0xfc, 0x26,
-    0x37, 0x3a, 0x4f, 0x6b, 0x17, 0xed, 0x8c, 0xf8, 0x3a, 0x2c, 0x56, 0xca,
-    0x9f, 0x06, 0xc6, 0x6b, 0x07, 0x09, 0x3d, 0x0b, 0xde, 0x84, 0xe1, 0xc2,
-    0x0e, 0xff, 0x72, 0x63, 0xf3, 0xa3, 0xe9, 0x62, 0xff, 0x6f, 0xf7, 0x07,
-    0xdc, 0xeb, 0x14, 0x73, 0xed, 0xe8, 0x71, 0x7f, 0x19, 0x24, 0x6f, 0xdd,
-    0x62, 0xfb, 0x0a, 0x42, 0x58, 0xbe, 0x7e, 0x03, 0x16, 0x2f, 0xa3, 0xf4,
-    0xc6, 0xac, 0x5e, 0xdb, 0x06, 0xb1, 0x58, 0x78, 0xae, 0x4f, 0x50, 0x46,
-    0xc4, 0x45, 0xfa, 0x22, 0xf3, 0x3d, 0x62, 0xa1, 0xc7, 0x87, 0x13, 0x43,
-    0xf2, 0xed, 0x09, 0x62, 0xfb, 0x3e, 0x1e, 0x96, 0x28, 0xe6, 0xf0, 0x86,
-    0x2e, 0xda, 0x3d, 0x62, 0xfe, 0xe1, 0x60, 0xff, 0x2b, 0x17, 0x0b, 0xb5,
-    0x8b, 0x8f, 0x1c, 0xb1, 0x7f, 0x31, 0x6e, 0x66, 0xdc, 0x58, 0xa3, 0x51,
-    0x5d, 0x10, 0xe1, 0xcb, 0x40, 0x32, 0x21, 0xbb, 0xfd, 0xbe, 0xe2, 0xd0,
-    0x3e, 0x25, 0x8b, 0xfa, 0x4b, 0xd1, 0xd9, 0xe5, 0x8b, 0xfb, 0xf3, 0xaf,
-    0x0a, 0x3d, 0x62, 0xff, 0x98, 0x1b, 0xbe, 0xb4, 0xfb, 0x2c, 0x5f, 0xe6,
-    0x03, 0x7b, 0xd9, 0xf5, 0x8a, 0x82, 0x34, 0x06, 0x61, 0x11, 0x90, 0x47,
-    0x77, 0xdf, 0x7c, 0xd2, 0xc5, 0xdf, 0x12, 0xc5, 0xa0, 0xb1, 0x7f, 0xb6,
-    0xcd, 0xfc, 0x4d, 0x12, 0xc5, 0x46, 0x89, 0xe4, 0xe4, 0x61, 0x0e, 0x7e,
-    0x02, 0x2e, 0x83, 0x01, 0x89, 0x5e, 0xf8, 0x40, 0x58, 0xb7, 0x96, 0x29,
-    0xcd, 0x8f, 0xc7, 0xee, 0x1c, 0xac, 0x5f, 0xff, 0xbd, 0xc0, 0xf9, 0xa9,
-    0x1e, 0x7f, 0x7c, 0x2d, 0x96, 0x2a, 0x4f, 0xc3, 0x05, 0xef, 0xe9, 0x70,
-    0x37, 0x84, 0xb1, 0x7f, 0xec, 0x06, 0x64, 0x51, 0x14, 0x8d, 0x62, 0xff,
-    0xda, 0x00, 0xca, 0x61, 0xfe, 0x01, 0x62, 0xb1, 0x35, 0xc3, 0xc2, 0x43,
-    0xe4, 0x04, 0x5a, 0x23, 0xfb, 0xde, 0x98, 0x2c, 0x5f, 0xf0, 0xbd, 0xfc,
-    0x8a, 0x13, 0xda, 0xc5, 0xff, 0xe2, 0x6f, 0x67, 0xb9, 0x9f, 0xc8, 0xff,
-    0x2c, 0x57, 0xd1, 0x4a, 0x43, 0xbd, 0x0f, 0x2f, 0xf4, 0x94, 0x0b, 0x30,
-    0x0b, 0x17, 0xfe, 0x7d, 0x69, 0xf6, 0xe3, 0x83, 0x8b, 0x16, 0x89, 0x62,
-    0xe6, 0xfa, 0xc5, 0xf7, 0xd8, 0x86, 0xb1, 0x74, 0xc4, 0xb1, 0x58, 0x6e,
-    0x80, 0x45, 0x5b, 0x22, 0x12, 0x02, 0x60, 0x51, 0xbf, 0xff, 0xb2, 0x3d,
-    0x88, 0x1c, 0xdf, 0xef, 0xfc, 0x92, 0xf2, 0xc5, 0xd2, 0x6a, 0xc5, 0xee,
-    0x8f, 0xa5, 0x8b, 0x12, 0xc5, 0x61, 0xb0, 0x61, 0xfb, 0xe1, 0x71, 0xce,
-    0xb1, 0x7a, 0x35, 0x46, 0xa8, 0xd4, 0xb1, 0x40, 0x3d, 0x3e, 0x11, 0xd9,
-    0xa2, 0x44, 0xa0, 0x1c, 0xaf, 0xe7, 0x93, 0xed, 0x81, 0x2c, 0x5f, 0xff,
-    0x67, 0xbf, 0x90, 0xd3, 0x17, 0xbe, 0xd0, 0x58, 0xba, 0x40, 0xb1, 0x7f,
-    0x9b, 0xb9, 0xdd, 0xf7, 0x8c, 0xd2, 0x25, 0x48, 0xbc, 0x34, 0xfa, 0xc5,
-    0x75, 0x66, 0x98, 0xee, 0x62, 0xf0, 0xc4, 0x88, 0xc7, 0xeb, 0xa5, 0x0d,
-    0xce, 0x42, 0xfa, 0xf3, 0x45, 0xc5, 0x8b, 0xf1, 0x73, 0xf9, 0x1e, 0xb1,
-    0x6d, 0x2c, 0x56, 0x1b, 0xd0, 0xca, 0xef, 0xc0, 0xfc, 0xc3, 0x8b, 0x17,
-    0xdf, 0x71, 0xba, 0xc5, 0xfe, 0x1c, 0x8c, 0x84, 0xc1, 0xac, 0x5f, 0xa2,
-    0x27, 0x93, 0x56, 0x2f, 0x10, 0x8d, 0x58, 0xbc, 0x13, 0x6c, 0xb1, 0x7f,
-    0xd2, 0x06, 0xf0, 0x03, 0x28, 0x2c, 0x57, 0xcf, 0x64, 0x87, 0xea, 0x53,
-    0x40, 0xd8, 0xa4, 0x64, 0x58, 0x68, 0x45, 0x3e, 0x77, 0xb4, 0x64, 0x68,
-    0xde, 0xc5, 0x75, 0xd4, 0x82, 0x63, 0x10, 0xd9, 0x26, 0x10, 0x82, 0x1c,
-    0x3e, 0xb2, 0x54, 0xe9, 0xb0, 0x93, 0xde, 0x3f, 0x5e, 0xe1, 0xa0, 0xeb,
-    0x11, 0xe4, 0x11, 0x46, 0x1f, 0xa8, 0xca, 0x4f, 0x0b, 0xdf, 0xce, 0x5c,
-    0x33, 0xa8, 0x21, 0x9c, 0x52, 0x85, 0x79, 0x1f, 0x8f, 0xa7, 0x27, 0x85,
-    0x08, 0x28, 0xe5, 0xb0, 0xe3, 0x61, 0xb4, 0x16, 0x2e, 0xda, 0x39, 0x62,
-    0xff, 0xfb, 0x3c, 0xff, 0x17, 0xd9, 0xfb, 0xe4, 0x9a, 0xb1, 0x7c, 0xe4,
-    0x07, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x54, 0x54, 0x0f, 0x4b, 0x44,
-    0x37, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x6d, 0x2f, 0xfe, 0x8a, 0x0d, 0xc0,
-    0x98, 0x73, 0xdf, 0x16, 0x2f, 0x34, 0x23, 0x30, 0xff, 0xf8, 0x6f, 0x7d,
-    0xad, 0x34, 0x16, 0x2f, 0xd3, 0x87, 0x7f, 0x2c, 0x5f, 0x33, 0xfa, 0x12,
-    0x79, 0x42, 0x23, 0xb4, 0x64, 0x6c, 0xa8, 0xa3, 0x61, 0x21, 0x8e, 0x64,
-    0x28, 0xcf, 0x0a, 0x1f, 0xbf, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa,
-    0x4b, 0xf2, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x98, 0xc5, 0xdd, 0x50, 0x58,
-    0xb4, 0x66, 0x1e, 0x94, 0x46, 0xf7, 0xff, 0xbf, 0x3b, 0x64, 0x3f, 0x2f,
-    0xac, 0x25, 0x8b, 0xf3, 0xe4, 0x26, 0x0b, 0x17, 0x6d, 0x19, 0x11, 0xf8,
-    0x71, 0x26, 0xff, 0xb2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2f, 0x08, 0xbc,
-    0xb1, 0x7e, 0x0f, 0x41, 0xcc, 0x4b, 0x17, 0x01, 0xd6, 0x2f, 0x7e, 0x4d,
-    0x58, 0xa3, 0x4d, 0xae, 0xe2, 0xf7, 0x7b, 0x8b, 0x17, 0x39, 0xd6, 0x2a,
-    0x4d, 0x7f, 0x06, 0x2f, 0xde, 0x29, 0xce, 0xd6, 0x28, 0x69, 0xaa, 0x61,
-    0xe7, 0xc7, 0x78, 0xc3, 0xe5, 0x20, 0xc8, 0x2f, 0x8c, 0xf3, 0x7d, 0x62,
-    0xe2, 0x89, 0x62, 0xff, 0x43, 0x08, 0x19, 0x83, 0x58, 0xbf, 0xed, 0xa7,
-    0x8c, 0x0e, 0x38, 0xd6, 0x2f, 0xcf, 0xa0, 0xe2, 0xe2, 0xc5, 0xbc, 0xb1,
-    0x7c, 0x28, 0x67, 0x16, 0x18, 0xb2, 0xbf, 0xc2, 0xcd, 0x6f, 0xf7, 0xe2,
-    0xc5, 0x41, 0x30, 0xfd, 0x19, 0x7c, 0xe8, 0x8f, 0x78, 0x63, 0x7f, 0xe3,
-    0x45, 0xee, 0x7b, 0xbd, 0xdc, 0x96, 0x2f, 0xf7, 0xde, 0x2f, 0xbe, 0xb6,
-    0x58, 0xbf, 0x4f, 0xff, 0x3d, 0xac, 0x5f, 0xce, 0xf2, 0x14, 0xc4, 0xb1,
-    0x7f, 0x9c, 0xb3, 0xcd, 0xcc, 0x58, 0xbf, 0xa4, 0x28, 0xe0, 0xfe, 0xcb,
-    0x16, 0xeb, 0xd6, 0x2b, 0x47, 0x94, 0x23, 0x3b, 0xf0, 0xe3, 0x48, 0xd0,
-    0x8d, 0x58, 0xbe, 0xf7, 0x1b, 0xb5, 0x8a, 0x8d, 0xcf, 0x62, 0x4d, 0x2f,
-    0xe8, 0xbb, 0xe3, 0xf7, 0xc5, 0x8b, 0xfc, 0x2d, 0xa2, 0x84, 0xeb, 0x65,
-    0x8a, 0x73, 0xea, 0x23, 0x2b, 0xb5, 0xe5, 0x8b, 0xcc, 0xe2, 0x58, 0xbd,
-    0xdb, 0x75, 0x2c, 0x5f, 0x34, 0x30, 0x6b, 0x17, 0xf7, 0xb3, 0x43, 0xc2,
-    0x58, 0xa1, 0x9e, 0x7f, 0x88, 0xaa, 0x51, 0x25, 0x8e, 0x17, 0x43, 0x16,
-    0x2f, 0xe6, 0x6f, 0x7b, 0x3e, 0xb1, 0x7f, 0xfb, 0x0e, 0x4c, 0x69, 0x60,
-    0x0c, 0x0a, 0x36, 0x58, 0xa3, 0x51, 0x2b, 0xa1, 0x72, 0x2d, 0xbf, 0xfb,
-    0x09, 0xc7, 0x85, 0x86, 0xcf, 0x16, 0x2f, 0xfc, 0xdd, 0xf0, 0xed, 0xee,
-    0x0a, 0x0b, 0x15, 0x04, 0x41, 0x92, 0x15, 0xff, 0xb1, 0xfa, 0x61, 0x77,
-    0x0c, 0xf2, 0xc5, 0xfe, 0x0a, 0x42, 0x62, 0xef, 0xcb, 0x17, 0xed, 0x7b,
-    0xf9, 0xb2, 0xc5, 0xbc, 0xb1, 0x52, 0x7e, 0x58, 0x6d, 0xf2, 0xab, 0xfb,
-    0xce, 0x7e, 0xe1, 0xc5, 0x8b, 0x46, 0x4a, 0xfb, 0x54, 0x09, 0x32, 0x32,
-    0x73, 0x52, 0xb7, 0x43, 0xec, 0xd9, 0xca, 0x62, 0x2e, 0xd3, 0xd9, 0xde,
-    0xbf, 0x09, 0x06, 0x20, 0x00, 0xc1, 0x42, 0xbb, 0x90, 0xb6, 0xf4, 0x2c,
-    0xc2, 0x22, 0x0e, 0x16, 0x5d, 0x45, 0xb7, 0xb4, 0xfa, 0x58, 0xbf, 0xce,
-    0x67, 0xbe, 0xf2, 0x05, 0x8b, 0x46, 0x49, 0xe8, 0xf8, 0x76, 0xa3, 0x19,
-    0x2d, 0x9a, 0x9f, 0xc2, 0x04, 0x70, 0x15, 0x2c, 0xb3, 0x87, 0xa5, 0x79,
-    0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x93, 0x54, 0xbf, 0x6b, 0x76, 0x6d, 0xd5,
-    0x24, 0x11, 0x76, 0xdf, 0x58, 0xbf, 0xe2, 0x9f, 0x72, 0x28, 0x3c, 0x4b,
-    0x17, 0x9a, 0x11, 0x98, 0x88, 0xb0, 0x1b, 0xf8, 0x66, 0xfd, 0x21, 0x47,
-    0x66, 0x96, 0x2d, 0x19, 0x89, 0x98, 0x9e, 0x18, 0x41, 0xa1, 0xde, 0xd3,
-    0x7d, 0x62, 0xff, 0xcf, 0xce, 0x61, 0x6e, 0xc4, 0x05, 0x8a, 0xf1, 0xed,
-    0xf4, 0x1d, 0xbf, 0xbe, 0xfb, 0x6c, 0x2e, 0x2c, 0x5f, 0x43, 0x3d, 0xba,
-    0xc5, 0xed, 0xf4, 0xeb, 0x17, 0xd9, 0x13, 0x9d, 0x62, 0xf3, 0x87, 0xe5,
-    0x8b, 0xff, 0x08, 0xbd, 0xfc, 0xea, 0x70, 0x62, 0xc5, 0xfe, 0xdd, 0xf9,
-    0x83, 0xdb, 0xb5, 0x8b, 0xed, 0x4f, 0xb8, 0xb1, 0x78, 0xb3, 0x65, 0x8b,
-    0xfb, 0xf9, 0x07, 0x06, 0x2c, 0x5b, 0x06, 0x7d, 0xbb, 0x91, 0xf8, 0x76,
-    0xfe, 0x93, 0xb7, 0x7e, 0x82, 0xc5, 0xf1, 0x80, 0x04, 0xac, 0x5f, 0xdf,
-    0xe6, 0x89, 0xf7, 0x58, 0xa9, 0x3d, 0x3c, 0x24, 0xac, 0x55, 0x29, 0xb9,
-    0x27, 0x66, 0x2e, 0x49, 0x10, 0xf6, 0x88, 0xce, 0x3d, 0xf4, 0x12, 0x85,
-    0x27, 0x0d, 0x7d, 0x08, 0x2b, 0xd1, 0x4e, 0xcb, 0x17, 0xcf, 0xf6, 0xe2,
-    0xc5, 0xff, 0xb0, 0xcf, 0x43, 0x3f, 0xf6, 0x82, 0xc5, 0xef, 0xbf, 0x96,
-    0x2e, 0xd7, 0x96, 0x2f, 0xec, 0x8b, 0x8f, 0xd8, 0x4b, 0x17, 0xbd, 0x27,
-    0x58, 0xbf, 0xa3, 0xa7, 0xdf, 0x68, 0x96, 0x2b, 0xb3, 0xcf, 0x71, 0xdb,
-    0xf7, 0xb5, 0x8d, 0xda, 0xc5, 0xec, 0xfc, 0x64, 0xa7, 0x03, 0x01, 0xf1,
-    0x91, 0x44, 0x80, 0xc3, 0xa4, 0x31, 0xc8, 0x40, 0x06, 0x45, 0x73, 0x05,
-    0x18, 0xaa, 0xbf, 0xd2, 0x89, 0x6f, 0xee, 0xba, 0xf5, 0x9e, 0x8e, 0xcf,
-    0xac, 0x5f, 0xc4, 0x09, 0x8f, 0x63, 0xac, 0x5f, 0xe3, 0x61, 0x8f, 0xf6,
-    0x89, 0x62, 0xa4, 0xf9, 0x5c, 0xc2, 0xfd, 0xfc, 0xde, 0x4e, 0xb1, 0x7a,
-    0x4a, 0x25, 0x8b, 0xff, 0xd1, 0x4f, 0x46, 0xd7, 0x38, 0xfa, 0xc3, 0x56,
-    0x2f, 0x36, 0x69, 0x62, 0xff, 0x3c, 0x53, 0xd1, 0xb5, 0xc5, 0x8b, 0x71,
-    0x62, 0xa4, 0xf2, 0x08, 0xda, 0xff, 0xe9, 0x00, 0xbd, 0xc2, 0x9e, 0xa9,
-    0xd9, 0x62, 0xed, 0x4a, 0xc5, 0x41, 0x39, 0x71, 0x90, 0x6e, 0x52, 0xe3,
-    0xba, 0x4e, 0xfb, 0x27, 0x42, 0x0e, 0xa4, 0x8b, 0xdf, 0x6e, 0x2c, 0x5c,
-    0xfc, 0x58, 0xbf, 0x39, 0x0a, 0x74, 0xb1, 0x4e, 0x7b, 0x7e, 0x1d, 0x10,
-    0xbd, 0xfe, 0xce, 0x9e, 0xe1, 0x64, 0x16, 0x2f, 0xee, 0x9e, 0xe1, 0x64,
-    0x16, 0x2f, 0xdf, 0xc2, 0x68, 0x8c, 0x3e, 0x5c, 0x35, 0xbc, 0xcd, 0xba,
-    0xa4, 0xe2, 0x2f, 0xf9, 0xfa, 0x7f, 0x77, 0xe6, 0x0d, 0x62, 0xb7, 0x3e,
-    0x6d, 0x15, 0x5f, 0xf3, 0x1f, 0x8f, 0x9d, 0x1b, 0x4b, 0x17, 0xf0, 0x9b,
-    0xb1, 0xe6, 0x96, 0x29, 0xd3, 0x30, 0xd4, 0x29, 0x08, 0x8f, 0x87, 0x57,
-    0xff, 0xfb, 0xee, 0x32, 0x96, 0xd8, 0x26, 0xff, 0x0c, 0xe4, 0xf1, 0x62,
-    0xff, 0xfd, 0x00, 0xff, 0x06, 0xf3, 0x00, 0x44, 0xdd, 0x06, 0xb1, 0x70,
-    0x71, 0x2c, 0x5f, 0xf7, 0x31, 0xc0, 0x1f, 0x9b, 0xeb, 0x17, 0xcd, 0x13,
-    0x9d, 0x62, 0xfd, 0xbb, 0xf3, 0xee, 0xb1, 0x7f, 0xfd, 0x80, 0x8e, 0xc7,
-    0xfc, 0x3f, 0x3f, 0x73, 0x56, 0x2b, 0xb3, 0xfc, 0x22, 0x9a, 0xd9, 0x31,
-    0x5f, 0x8d, 0x11, 0xd7, 0xa1, 0x3f, 0x7f, 0xfd, 0x09, 0xf0, 0x0c, 0xcf,
-    0xeb, 0x00, 0x28, 0x96, 0x2c, 0x6a, 0xc5, 0xd1, 0x3a, 0xc5, 0x61, 0xab,
-    0x61, 0x3b, 0xfd, 0xd3, 0x3d, 0xce, 0x93, 0xf5, 0x8a, 0x81, 0xeb, 0xfc,
-    0x7e, 0xff, 0x7e, 0x41, 0xcc, 0x20, 0x2c, 0x56, 0x26, 0x54, 0xf0, 0xd5,
-    0x62, 0x2b, 0xfc, 0x5e, 0x86, 0x13, 0x8d, 0x62, 0xff, 0x89, 0x81, 0xcf,
-    0xc9, 0x79, 0x62, 0xb0, 0xfa, 0xbc, 0x65, 0x7e, 0xc3, 0xbf, 0x50, 0xd6,
-    0x2e, 0x93, 0xac, 0x54, 0x9f, 0x1c, 0x79, 0x0e, 0x8a, 0xef, 0xe1, 0x13,
-    0x1b, 0x00, 0x2c, 0x5b, 0xb5, 0x8b, 0xd1, 0xd9, 0xf5, 0x8b, 0x6f, 0x86,
-    0xcf, 0xc2, 0x77, 0xba, 0x9f, 0x65, 0x8a, 0xc3, 0xc8, 0x62, 0x7b, 0xf7,
-    0xc4, 0x6e, 0x12, 0xc5, 0xf9, 0xb5, 0xe2, 0x95, 0x8b, 0xbc, 0xeb, 0x17,
-    0x07, 0xb2, 0xc5, 0x40, 0xd8, 0x90, 0xbd, 0xf8, 0x79, 0x1f, 0x3f, 0x58,
-    0xbf, 0x6f, 0x3f, 0x7e, 0x8b, 0x17, 0xba, 0x9f, 0x75, 0x8a, 0x1a, 0x63,
-    0x1b, 0x94, 0xc4, 0xb1, 0xa2, 0x02, 0x2b, 0xea, 0x2b, 0xbf, 0xc7, 0x68,
-    0x71, 0xc7, 0x8b, 0x17, 0x8d, 0x9e, 0x2c, 0x5f, 0xd3, 0x13, 0x7e, 0x63,
-    0xd6, 0x2f, 0xff, 0x40, 0x4d, 0xd0, 0x3f, 0xf0, 0x51, 0xc2, 0xd2, 0xc5,
-    0xfe, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x50, 0x45, 0xb7, 0x66, 0x2e, 0xa7,
-    0x7f, 0x07, 0xd2, 0x7e, 0xdd, 0x16, 0x2f, 0xdd, 0x27, 0xed, 0xd1, 0x62,
-    0xf4, 0x42, 0x81, 0x87, 0xbe, 0x19, 0x9d, 0x4a, 0x73, 0x59, 0x0d, 0x46,
-    0x84, 0x7d, 0xfe, 0x27, 0xdb, 0xdc, 0xcf, 0x2c, 0x5f, 0xc2, 0x8f, 0x6f,
-    0x0a, 0x56, 0x29, 0x62, 0xe9, 0xd9, 0x62, 0xbb, 0x3d, 0x5e, 0x18, 0xf5,
-    0x06, 0x5f, 0xf6, 0x7f, 0xc5, 0x20, 0x31, 0xd6, 0x2f, 0xc5, 0xe2, 0x63,
-    0x56, 0x29, 0x62, 0xb0, 0xda, 0x47, 0x14, 0x5f, 0xf8, 0x5f, 0xfb, 0xe7,
-    0x98, 0x80, 0xb1, 0x43, 0x4e, 0x29, 0xa1, 0x12, 0x46, 0x7c, 0x6d, 0xf1,
-    0x1d, 0xfc, 0x76, 0xe9, 0x3a, 0xea, 0x58, 0xbf, 0xf3, 0x8f, 0x3a, 0x1f,
-    0x21, 0xdc, 0x16, 0x2f, 0xcd, 0xc6, 0x20, 0x2c, 0x5f, 0xcf, 0xd2, 0x07,
-    0x98, 0x96, 0x2f, 0xfd, 0x38, 0x47, 0x9f, 0xf5, 0x37, 0x52, 0xc5, 0x40,
-    0xfd, 0x34, 0x63, 0x7f, 0xd8, 0x7c, 0xd6, 0x6d, 0x81, 0x2c, 0x5f, 0xfe,
-    0xfc, 0xf4, 0xf7, 0x1f, 0xdf, 0xce, 0xae, 0x2c, 0x54, 0xa7, 0x79, 0x86,
-    0x66, 0xa1, 0x3c, 0x26, 0xfe, 0x44, 0x03, 0xaa, 0x58, 0xbf, 0xb6, 0x6c,
-    0xf6, 0x1d, 0x62, 0xa3, 0x73, 0x74, 0xc1, 0x97, 0xe1, 0xb1, 0x67, 0x52,
-    0xc5, 0xff, 0xec, 0x2f, 0x30, 0x0c, 0xf1, 0x30, 0x38, 0xb1, 0x7f, 0x66,
-    0x9b, 0xc2, 0x95, 0x8b, 0xff, 0xe6, 0x29, 0x7e, 0xae, 0x3f, 0x33, 0xf9,
-    0x1c, 0xb1, 0x43, 0x44, 0x07, 0x42, 0xdb, 0xff, 0xf9, 0xc6, 0xdd, 0x99,
-    0x8f, 0x09, 0x29, 0xe9, 0xe6, 0x58, 0xbf, 0xf9, 0xc8, 0x50, 0xce, 0x71,
-    0xc7, 0x8b, 0x15, 0x29, 0xdc, 0x6c, 0x55, 0x14, 0x32, 0xbe, 0x4b, 0xe5,
-    0xcb, 0xda, 0xee, 0x56, 0x2d, 0x19, 0xd7, 0x1b, 0x43, 0x89, 0x94, 0x77,
-    0x08, 0x69, 0x64, 0x78, 0x7b, 0xa0, 0xf6, 0xc6, 0xf1, 0xb7, 0x45, 0x1b,
-    0x6e, 0xa3, 0x00, 0x39, 0x8f, 0xe1, 0x54, 0xd1, 0x9c, 0x01, 0x70, 0xa3,
-    0xcd, 0xe4, 0x78, 0x5e, 0x94, 0x15, 0x1d, 0x09, 0x50, 0xe3, 0xdd, 0xea,
-    0x51, 0xbf, 0xba, 0xce, 0xb3, 0x4c, 0xd0, 0x58, 0xbf, 0xd1, 0xb9, 0x46,
-    0x9e, 0x8e, 0x8d, 0x06, 0xb1, 0x7d, 0x0c, 0x8e, 0x75, 0x8b, 0xfd, 0xd6,
-    0x60, 0x83, 0xfc, 0x9a, 0xb1, 0x73, 0x75, 0xab, 0x17, 0xf1, 0x7f, 0x3b,
-    0x16, 0xeb, 0x15, 0xd6, 0xa2, 0x1c, 0x8e, 0xc3, 0x1c, 0xbf, 0x75, 0xdf,
-    0x5a, 0x39, 0x1a, 0xc5, 0xff, 0xff, 0x46, 0xfd, 0x77, 0xf9, 0x71, 0x94,
-    0x8b, 0x70, 0x98, 0x73, 0xdf, 0x16, 0x2f, 0xba, 0xec, 0x06, 0xca, 0xc5,
-    0xc5, 0xda, 0xc5, 0xf6, 0x07, 0x3a, 0x58, 0xa8, 0xd8, 0xf9, 0xa3, 0x59,
-    0x59, 0x0c, 0x5f, 0xf9, 0xfb, 0x8d, 0x5c, 0xd1, 0x86, 0x7e, 0x39, 0x62,
-    0xf8, 0xc3, 0x3f, 0x1c, 0xb1, 0x7c, 0x61, 0x9f, 0x8e, 0x58, 0xbd, 0x3e,
-    0xdd, 0x62, 0xa3, 0xcf, 0xc2, 0x22, 0x9f, 0x94, 0xdf, 0xff, 0x3e, 0x47,
-    0x3e, 0x7b, 0x8d, 0x02, 0x93, 0xac, 0x57, 0x5d, 0x53, 0x40, 0x1c, 0x2f,
-    0x48, 0xce, 0xfb, 0x47, 0xf7, 0x6b, 0x17, 0xef, 0x00, 0x32, 0x82, 0xc5,
-    0xd3, 0xa3, 0x0f, 0x3d, 0x89, 0x6f, 0xfe, 0x34, 0x28, 0xfd, 0x87, 0x1b,
-    0x18, 0x67, 0xe3, 0x96, 0x2f, 0x85, 0xb6, 0xa5, 0x62, 0xfa, 0x73, 0x50,
-    0x58, 0xa8, 0xd4, 0x89, 0xe7, 0x58, 0x22, 0x4b, 0x86, 0xeb, 0x17, 0xbd,
-    0x06, 0x58, 0xbd, 0xce, 0xdd, 0x62, 0xf3, 0x74, 0xc5, 0x8a, 0xd8, 0xde,
-    0x70, 0x7a, 0x9d, 0x12, 0x4c, 0x2f, 0xc5, 0x9b, 0xe7, 0x2f, 0x71, 0x62,
-    0xf6, 0x79, 0xd6, 0x2f, 0xb7, 0x66, 0xdd, 0x52, 0x74, 0x97, 0xe2, 0x17,
-    0xa7, 0x8b, 0x17, 0xff, 0xf4, 0x85, 0xe3, 0x5b, 0x86, 0x4b, 0x96, 0x77,
-    0xec, 0x58, 0xbf, 0x72, 0x41, 0x1b, 0xfd, 0x62, 0x8d, 0x4c, 0x8a, 0x22,
-    0x2d, 0x0e, 0x7c, 0xc4, 0x8a, 0x3c, 0xbb, 0x7f, 0xc6, 0x8b, 0xdc, 0x33,
-    0xcf, 0xba, 0xc5, 0xf0, 0x7f, 0x9d, 0x2c, 0x5e, 0x14, 0x0e, 0xb1, 0x52,
-    0x78, 0x4c, 0x49, 0x7e, 0x0e, 0x0e, 0x0e, 0x2c, 0x5f, 0x19, 0xee, 0x91,
-    0xcb, 0x17, 0xdc, 0x9c, 0xd9, 0x62, 0xb6, 0x3c, 0xdf, 0x15, 0x50, 0xd1,
-    0x35, 0xa7, 0x7b, 0xec, 0xd8, 0xfe, 0x58, 0xaf, 0xa6, 0x02, 0xd0, 0xba,
-    0x22, 0x3b, 0xe2, 0x61, 0xca, 0xc5, 0xff, 0xe2, 0x68, 0xf3, 0x1c, 0xd1,
-    0x70, 0xef, 0x12, 0xc5, 0xc1, 0x1a, 0xb1, 0x7f, 0xf4, 0x4f, 0xfe, 0xfc,
-    0xf3, 0xd0, 0x72, 0xb1, 0x7f, 0x07, 0x1d, 0xf7, 0xdf, 0xeb, 0x17, 0xfa,
-    0x7a, 0x31, 0x4f, 0x4e, 0x2c, 0x5f, 0xdf, 0x90, 0xfe, 0x2e, 0x2c, 0x54,
-    0xa6, 0xda, 0x32, 0x1c, 0x50, 0xec, 0x69, 0xd2, 0x3e, 0x69, 0xd4, 0x6d,
-    0x7f, 0xee, 0x72, 0x28, 0x75, 0xe6, 0x19, 0xf8, 0xe5, 0x8b, 0xd0, 0x93,
-    0xac, 0x54, 0x6e, 0x7d, 0x43, 0x4d, 0xbf, 0x4f, 0x6d, 0xc8, 0x2c, 0x5f,
-    0xc7, 0xd4, 0x84, 0xd1, 0x2c, 0x54, 0x0f, 0x65, 0xca, 0x6f, 0xff, 0xfd,
-    0xe2, 0x60, 0x73, 0x7f, 0xbc, 0x45, 0x81, 0x7f, 0x0f, 0x3c, 0x58, 0xbf,
-    0xd1, 0x6a, 0x7b, 0x83, 0x9d, 0x62, 0xa5, 0x14, 0x84, 0xdd, 0x7f, 0xee,
-    0x92, 0x5e, 0xe0, 0xbd, 0x9a, 0x58, 0xbf, 0xf3, 0x45, 0xee, 0x3e, 0xbb,
-    0x68, 0x96, 0x2f, 0xff, 0xff, 0x39, 0x9d, 0x75, 0x8d, 0xfa, 0xef, 0xf2,
-    0xe3, 0x29, 0x16, 0xe1, 0x30, 0xe7, 0xbe, 0x2c, 0x54, 0xa6, 0x67, 0x84,
-    0x2c, 0x82, 0x48, 0x57, 0xd0, 0xea, 0xcf, 0x2c, 0x5f, 0xe7, 0xfb, 0x10,
-    0xc3, 0xed, 0x62, 0xfb, 0x93, 0xd5, 0xc5, 0x8a, 0x94, 0x40, 0x88, 0x9b,
-    0xa8, 0xd6, 0xef, 0x75, 0x2c, 0x5b, 0xeb, 0x17, 0xfe, 0xf4, 0xc5, 0xc2,
-    0xc1, 0xfc, 0x4b, 0x14, 0xe7, 0xa5, 0xe1, 0x2b, 0xf1, 0xa6, 0x86, 0x5b,
-    0xac, 0x5f, 0xff, 0xe7, 0xf3, 0xfb, 0x00, 0x64, 0xf7, 0xc9, 0x0c, 0x5f,
-    0x75, 0x8a, 0x94, 0xc7, 0xb1, 0xb5, 0xc8, 0x58, 0xb6, 0xfb, 0x73, 0xbc,
-    0x7a, 0xc5, 0xcc, 0x35, 0x8b, 0xf4, 0x1e, 0x61, 0x1e, 0xb1, 0x46, 0x1e,
-    0x16, 0x0b, 0xde, 0x1e, 0x0d, 0x62, 0xed, 0x6c, 0xb1, 0x52, 0x8c, 0x11,
-    0xb4, 0xe1, 0x13, 0x8e, 0xde, 0x14, 0x86, 0xb1, 0x7f, 0xff, 0xf7, 0xf3,
-    0xa6, 0xb3, 0x99, 0xad, 0xe7, 0x3c, 0x59, 0xce, 0x60, 0xd6, 0x2f, 0xf6,
-    0xd2, 0x5b, 0x8c, 0x3e, 0x2c, 0x5f, 0x39, 0xb8, 0x35, 0x8b, 0xff, 0x80,
-    0xe4, 0x19, 0xaf, 0xe6, 0x07, 0x16, 0x2f, 0xf9, 0xf0, 0xbf, 0x9e, 0x91,
-    0xac, 0x5f, 0xf9, 0xcb, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x5b, 0x26, 0x2b,
-    0xa3, 0x70, 0x11, 0xf9, 0x1b, 0xa1, 0xbd, 0xe1, 0x1a, 0x05, 0x8b, 0xfa,
-    0x7d, 0xc1, 0x6f, 0xd7, 0xac, 0x50, 0xcf, 0x53, 0xa0, 0xfd, 0xf6, 0xff,
-    0x90, 0x96, 0x2a, 0x55, 0x39, 0xe4, 0x71, 0x0d, 0x0a, 0x2e, 0xbc, 0x92,
-    0xfd, 0x83, 0x78, 0x1d, 0x62, 0xff, 0xbe, 0xe1, 0x7b, 0xbd, 0xdf, 0xeb,
-    0x17, 0xa2, 0x73, 0xac, 0x5d, 0xd7, 0xf5, 0x2c, 0x5f, 0x84, 0x08, 0x8b,
-    0xcb, 0x17, 0xe7, 0x88, 0x0c, 0x05, 0x8b, 0xbb, 0x95, 0x8b, 0xff, 0xe6,
-    0x03, 0x7b, 0xf3, 0xee, 0x7d, 0xa2, 0xf2, 0xc5, 0xb5, 0x87, 0xd2, 0x21,
-    0x8b, 0xfb, 0xef, 0xe8, 0x37, 0xd6, 0x2f, 0xee, 0x18, 0xc6, 0xfd, 0xd6,
-    0x2a, 0x53, 0xe4, 0x19, 0x46, 0x1e, 0xc7, 0x8f, 0x68, 0x83, 0xe5, 0x4d,
-    0x09, 0x21, 0x13, 0x86, 0x5d, 0x7f, 0xa2, 0x83, 0x6b, 0x6f, 0x89, 0x62,
-    0xf4, 0x05, 0xb2, 0xc5, 0xf3, 0x90, 0xe5, 0x62, 0xa2, 0x3c, 0x0f, 0x8f,
-    0xdf, 0xc5, 0xb7, 0xbd, 0x86, 0xac, 0x5c, 0xc1, 0xac, 0x5f, 0xfb, 0xc6,
-    0x71, 0x8b, 0x7f, 0xbe, 0x96, 0x2b, 0x63, 0xd9, 0xc1, 0x8a, 0x94, 0xd1,
-    0x71, 0xdd, 0x88, 0xf9, 0x08, 0x9b, 0xda, 0x7e, 0xd6, 0x2f, 0xf4, 0xf9,
-    0xb6, 0x13, 0xc1, 0x62, 0xfe, 0xfb, 0xb4, 0xfb, 0x16, 0x2e, 0x0f, 0xeb,
-    0x17, 0x08, 0x35, 0x8a, 0xfa, 0x2c, 0x08, 0x78, 0x23, 0x40, 0xcb, 0x3a,
-    0x86, 0x6f, 0xff, 0xcd, 0x02, 0x9e, 0x67, 0x7b, 0x93, 0x67, 0x7b, 0xac,
-    0x5f, 0xff, 0x31, 0x36, 0xc5, 0x3d, 0xb8, 0xca, 0x76, 0x58, 0xbf, 0xe7,
-    0xfe, 0x76, 0x08, 0x0f, 0x16, 0x2f, 0xef, 0x67, 0xc3, 0x8b, 0x8b, 0x16,
-    0x8c, 0x8d, 0xdb, 0xa3, 0x3e, 0xb0, 0xe3, 0xad, 0x47, 0x8d, 0x21, 0x59,
-    0xd7, 0x0d, 0x7a, 0xea, 0x6b, 0x1a, 0xa1, 0xb7, 0x31, 0xbc, 0xed, 0x08,
-    0xc8, 0x43, 0x2c, 0x70, 0xc6, 0xc8, 0xd4, 0x0d, 0x59, 0xde, 0x38, 0x17,
-    0x8e, 0x86, 0x3e, 0x1a, 0x11, 0x42, 0x03, 0x51, 0xfc, 0x1e, 0x17, 0x7f,
-    0x8d, 0x41, 0xa1, 0xf6, 0x03, 0xa2, 0x95, 0x23, 0xc9, 0x46, 0x1e, 0x8f,
-    0x28, 0x50, 0xf0, 0xe8, 0x9c, 0x12, 0xbc, 0x72, 0x7f, 0x51, 0xd5, 0xfa,
-    0x37, 0xeb, 0x3b, 0xe1, 0xd6, 0x2e, 0x98, 0xe5, 0x8b, 0xdd, 0x6c, 0x71,
-    0xab, 0x17, 0xfa, 0x0f, 0xee, 0x4e, 0xb1, 0x62, 0xfe, 0x8d, 0x47, 0xfc,
-    0x85, 0x8b, 0x17, 0xff, 0x8b, 0xce, 0x7f, 0xcb, 0x93, 0x68, 0xd5, 0x8b,
-    0xfa, 0x0e, 0x31, 0x16, 0x2c, 0x5f, 0xcd, 0xe9, 0x3c, 0x92, 0xc5, 0xee,
-    0x82, 0x82, 0xc5, 0x62, 0x30, 0x9d, 0x27, 0x45, 0xbd, 0x0b, 0x2f, 0xfe,
-    0x34, 0xd9, 0x2f, 0x78, 0xa7, 0xdc, 0x58, 0xbf, 0xee, 0x0b, 0xd0, 0x7e,
-    0x9f, 0x75, 0x8a, 0x74, 0x41, 0x1d, 0x1a, 0xfd, 0x9c, 0xdf, 0xd2, 0xb1,
-    0x7f, 0x45, 0xcc, 0x3c, 0xc7, 0xac, 0x56, 0x1e, 0xdf, 0xca, 0x6f, 0xde,
-    0xcf, 0x4f, 0x6b, 0x17, 0xf6, 0xd3, 0xe6, 0x34, 0x4b, 0x14, 0xb9, 0xc5,
-    0xcb, 0xfc, 0x59, 0x9d, 0xef, 0x3b, 0x2c, 0x5f, 0xfd, 0x3a, 0x01, 0x9c,
-    0xfc, 0x9d, 0x89, 0x62, 0xff, 0x85, 0xe7, 0xfb, 0x9b, 0xf7, 0x58, 0xbf,
-    0xa4, 0x19, 0xd2, 0x46, 0xb1, 0x7f, 0xf6, 0xb9, 0xf7, 0x9f, 0x79, 0xa1,
-    0xc5, 0x8b, 0xfd, 0x3a, 0x0f, 0xff, 0xc0, 0x2c, 0x54, 0x13, 0x28, 0x1a,
-    0x2e, 0xe7, 0x4e, 0x5f, 0xf4, 0x5b, 0xfb, 0x8f, 0xe2, 0x14, 0x16, 0x2f,
-    0x1e, 0x63, 0xd6, 0x2f, 0xbc, 0x42, 0x82, 0xc5, 0x61, 0xe1, 0xb9, 0x05,
-    0xf7, 0x9c, 0xfc, 0x31, 0x12, 0x3c, 0x71, 0xbf, 0xa0, 0xd0, 0x62, 0xdd,
-    0x62, 0x96, 0x2d, 0x2b, 0x14, 0x32, 0xf4, 0x83, 0x2d, 0xc5, 0x8a, 0x93,
-    0x63, 0xe1, 0xfb, 0xff, 0xd9, 0xe9, 0x08, 0x3d, 0xb9, 0x87, 0x98, 0xf5,
-    0x8b, 0xf8, 0x65, 0x21, 0x0f, 0x16, 0x29, 0x62, 0xfc, 0xdb, 0xee, 0xe0,
-    0x58, 0xa3, 0x9b, 0x6f, 0x06, 0x5f, 0xcd, 0x0d, 0x38, 0x4e, 0xb1, 0x7c,
-    0x52, 0x3d, 0x2c, 0x5e, 0xde, 0x76, 0x58, 0xbf, 0xf3, 0xc1, 0xf5, 0xdc,
-    0x94, 0xf1, 0x62, 0xb6, 0x3f, 0xfd, 0xc8, 0xbc, 0x3f, 0x68, 0xc8, 0xdd,
-    0x73, 0x72, 0x46, 0x72, 0x35, 0xde, 0xe1, 0xb9, 0x11, 0xdf, 0xdf, 0x08,
-    0x83, 0x8a, 0x1e, 0x64, 0x8e, 0x21, 0x0e, 0x15, 0xb5, 0xda, 0xef, 0x8e,
-    0x8a, 0x4f, 0x3a, 0x19, 0x7d, 0x81, 0x46, 0xe7, 0x58, 0xbf, 0xec, 0x2d,
-    0xc6, 0xfd, 0x24, 0x6b, 0x17, 0xf1, 0x4f, 0x67, 0x6f, 0x2c, 0x5f, 0xfe,
-    0x09, 0x87, 0xf9, 0xef, 0xd3, 0xf6, 0x8f, 0x58, 0xb3, 0xe8, 0xff, 0x7e,
-    0x5d, 0x7f, 0xff, 0xc2, 0xd4, 0x39, 0xf6, 0x7d, 0x6b, 0x42, 0xed, 0xf4,
-    0xdc, 0x58, 0xbf, 0x60, 0x5c, 0xcf, 0xac, 0x5f, 0xfb, 0x79, 0xcf, 0xcf,
-    0x8a, 0x7c, 0xb1, 0x7f, 0x31, 0x7e, 0x75, 0x05, 0x8a, 0xd1, 0xf5, 0xf0,
-    0xfa, 0xfa, 0x03, 0xcf, 0xac, 0x52, 0xc5, 0xe9, 0x28, 0x96, 0x2f, 0xda,
-    0xe7, 0x18, 0x96, 0x2a, 0x37, 0x3d, 0x1f, 0x86, 0x08, 0x76, 0xff, 0xf8,
-    0x85, 0xdc, 0x22, 0x27, 0x8b, 0xcf, 0xd8, 0x4b, 0x17, 0x85, 0xfe, 0x2c,
-    0x5f, 0xf9, 0x8d, 0xdf, 0xef, 0x16, 0xa4, 0x25, 0x8b, 0xd3, 0x9d, 0xee,
-    0x7c, 0x24, 0x3d, 0x7f, 0xf3, 0x1f, 0x9e, 0x26, 0x07, 0x7e, 0x8d, 0x4b,
-    0x15, 0xa3, 0xff, 0x11, 0x9d, 0x41, 0x35, 0x7f, 0x46, 0x6b, 0x7f, 0xe2,
-    0x60, 0xbd, 0x9f, 0x68, 0x99, 0x62, 0xff, 0xfc, 0x00, 0x49, 0x9f, 0x9f,
-    0x0b, 0x7f, 0xc9, 0x32, 0xc5, 0xff, 0xf8, 0x84, 0xd1, 0xf9, 0x0f, 0xe1,
-    0xb8, 0x38, 0x84, 0xb1, 0x58, 0x8b, 0x1f, 0xab, 0xdd, 0xbe, 0x2c, 0x5f,
-    0xff, 0xff, 0x43, 0xe2, 0x68, 0x77, 0xc7, 0x29, 0x06, 0x7c, 0xb3, 0xa6,
-    0x45, 0xee, 0x2c, 0x5f, 0xd3, 0x07, 0xef, 0xd8, 0xb1, 0x7f, 0xfc, 0xdd,
-    0xc3, 0x9d, 0xf8, 0x9b, 0xf9, 0xdf, 0x96, 0x2a, 0x53, 0x3b, 0x34, 0x89,
-    0xc6, 0x35, 0x08, 0x06, 0x2e, 0xbf, 0xe1, 0x13, 0x1a, 0x61, 0xfb, 0xe2,
-    0xc5, 0xf6, 0xb8, 0xfa, 0x58, 0xbf, 0xd8, 0x2e, 0xbf, 0x7f, 0xbc, 0x4b,
-    0x17, 0xf8, 0x46, 0xe7, 0xdb, 0xdc, 0x58, 0xbf, 0xff, 0xf9, 0xe0, 0xdc,
-    0xe4, 0xf3, 0x3e, 0xe5, 0x27, 0xd4, 0x86, 0xc4, 0xb1, 0x7f, 0xff, 0xf6,
-    0x70, 0x3f, 0x3f, 0x47, 0xf4, 0x27, 0xef, 0x3e, 0xf8, 0x98, 0xeb, 0x15,
-    0x28, 0xe3, 0x83, 0x7d, 0x71, 0x33, 0xaf, 0x46, 0x31, 0x7e, 0xe4, 0xfc,
-    0x38, 0x96, 0x29, 0xcf, 0x57, 0xc5, 0x55, 0x2a, 0x83, 0xb0, 0x8d, 0xa3,
-    0xca, 0xbd, 0x09, 0x3a, 0xc5, 0xf4, 0x0b, 0x3e, 0xb1, 0x4b, 0x17, 0xf6,
-    0x0f, 0x58, 0xf1, 0x2c, 0x5f, 0xed, 0x8b, 0x3b, 0xf6, 0x04, 0xb1, 0x7e,
-    0xef, 0xd3, 0x81, 0x11, 0xf2, 0x06, 0x5d, 0x51, 0xa2, 0x2c, 0x31, 0xc2,
-    0xfe, 0x3b, 0xfb, 0x82, 0xd9, 0x62, 0xee, 0x41, 0x62, 0xfa, 0x77, 0xc3,
-    0x56, 0x2f, 0xff, 0xb0, 0x62, 0xf7, 0x37, 0xfb, 0xf0, 0x4d, 0xda, 0xc5,
-    0xff, 0xff, 0xf8, 0x98, 0xdc, 0xd0, 0x27, 0xdc, 0x1f, 0xe7, 0x83, 0x26,
-    0x37, 0x59, 0xdf, 0x16, 0x2f, 0xf8, 0x85, 0xb7, 0xb9, 0x84, 0x05, 0x8b,
-    0xcd, 0x0e, 0x0d, 0x17, 0xe1, 0xc2, 0x16, 0xbe, 0x9a, 0x60, 0xa3, 0x12,
-    0xac, 0x4f, 0x88, 0xd3, 0x0f, 0x8c, 0x7a, 0x37, 0x0b, 0xf9, 0x88, 0x04,
-    0xde, 0x58, 0xbf, 0xb4, 0xd0, 0xdb, 0x02, 0x58, 0xa8, 0xf3, 0xdc, 0xd1,
-    0x65, 0x2c, 0x5d, 0x10, 0x96, 0x2b, 0x0f, 0x2b, 0xe4, 0xa1, 0x06, 0x5f,
-    0xf7, 0xc3, 0xf3, 0xe9, 0xf6, 0x95, 0x8b, 0xff, 0xf8, 0x50, 0x27, 0x81,
-    0x67, 0xb9, 0x30, 0x1c, 0xf9, 0x62, 0xff, 0xd3, 0xde, 0xff, 0x7d, 0x69,
-    0xa0, 0xb1, 0x7f, 0xb6, 0x2c, 0xef, 0xd8, 0x12, 0xc5, 0xfc, 0x36, 0xef,
-    0xd8, 0x73, 0x9f, 0xb8, 0x68, 0x37, 0xda, 0x90, 0xb8, 0xb1, 0x7b, 0xf9,
-    0x12, 0xc5, 0xff, 0xe2, 0xf7, 0x31, 0xcf, 0x83, 0x98, 0x4e, 0x1e, 0x17,
-    0x89, 0x29, 0xd1, 0xca, 0x28, 0x44, 0x54, 0x15, 0x23, 0xe1, 0x7b, 0x9d,
-    0xf2, 0x3b, 0x6b, 0xff, 0xb0, 0x73, 0x09, 0xd4, 0x86, 0xc4, 0xb1, 0x7f,
-    0xee, 0x99, 0x03, 0x8d, 0xfa, 0x48, 0xd6, 0x2f, 0xff, 0x9f, 0xe2, 0x39,
-    0xda, 0x1f, 0x63, 0xbf, 0x16, 0x28, 0xe8, 0xd6, 0x64, 0x3f, 0x21, 0xdc,
-    0xd1, 0x9b, 0x33, 0xec, 0xa0, 0xd3, 0x90, 0x94, 0x34, 0x8b, 0x77, 0x4e,
-    0xe3, 0x8b, 0x88, 0xab, 0x52, 0x8a, 0xce, 0x9d, 0xf9, 0x49, 0x6c, 0x6a,
-    0x01, 0xd2, 0x86, 0x97, 0x25, 0x04, 0xfa, 0x59, 0x88, 0x71, 0x8c, 0xd3,
-    0xb6, 0x36, 0x3f, 0x85, 0xc1, 0x53, 0xf6, 0x6f, 0xee, 0x3f, 0x88, 0x50,
-    0x58, 0xbf, 0x3f, 0x88, 0x50, 0x58, 0xb8, 0xfc, 0x30, 0xf5, 0xb8, 0x5d,
-    0x7f, 0x4e, 0x03, 0x30, 0x6b, 0x16, 0xf3, 0x9e, 0xd9, 0x17, 0xdf, 0x85,
-    0xbf, 0xf0, 0x0b, 0x17, 0xee, 0x1e, 0x4a, 0x25, 0x8b, 0xf8, 0xbc, 0x79,
-    0xcf, 0x2c, 0x5f, 0xbd, 0xf9, 0x0c, 0x96, 0x2d, 0x09, 0x3d, 0x6c, 0x2d,
-    0xbf, 0xf7, 0x9f, 0x77, 0x1b, 0x11, 0xb2, 0xb1, 0x73, 0x9a, 0xb1, 0x7f,
-    0xd2, 0x5e, 0x6f, 0x37, 0x60, 0x58, 0xa1, 0x9e, 0x8f, 0x41, 0x8b, 0xfe,
-    0x9e, 0xfe, 0xdc, 0xf4, 0x84, 0xb1, 0x52, 0x8e, 0xfc, 0x84, 0x86, 0x89,
-    0x2f, 0xff, 0xe7, 0x83, 0xfa, 0x4f, 0x9d, 0xfa, 0x4f, 0x9d, 0xf9, 0x73,
-    0x8c, 0x17, 0xb4, 0x00, 0x96, 0x2f, 0xfb, 0x05, 0xd7, 0xbc, 0x4f, 0x84,
-    0xb1, 0x7f, 0xed, 0xc8, 0x5e, 0xe6, 0x9f, 0xb0, 0x2c, 0x5f, 0x88, 0x5b,
-    0x77, 0x1e, 0xb1, 0x58, 0x7e, 0x1e, 0x42, 0xa9, 0x4d, 0x58, 0x6d, 0x38,
-    0x3e, 0xd0, 0xad, 0xb7, 0x5a, 0xb1, 0x70, 0xbe, 0xb1, 0x7e, 0x2c, 0xfb,
-    0x79, 0x62, 0xfe, 0x83, 0x67, 0x49, 0x1a, 0xc5, 0x75, 0xa7, 0xad, 0xd7,
-    0x09, 0xef, 0xd1, 0xb7, 0x5b, 0xae, 0x71, 0x62, 0xfe, 0x8d, 0x47, 0xfc,
-    0x85, 0x8b, 0x17, 0xce, 0x28, 0x4a, 0xc5, 0xf6, 0x77, 0x27, 0x58, 0xbe,
-    0x72, 0x90, 0x2c, 0x5f, 0xff, 0x0f, 0x0f, 0xc1, 0x33, 0xc1, 0xf5, 0x83,
-    0x58, 0xbc, 0x2e, 0xbe, 0x56, 0x2f, 0xff, 0xf9, 0xfa, 0x48, 0xdc, 0x9b,
-    0x46, 0x99, 0xf6, 0xe0, 0x52, 0x35, 0x8a, 0x74, 0x46, 0x68, 0x8a, 0xff,
-    0x7e, 0x76, 0xd4, 0xe0, 0xd6, 0x2f, 0xd3, 0xd1, 0xb3, 0x4b, 0x17, 0x66,
-    0xcb, 0x17, 0x0e, 0x56, 0x28, 0x33, 0x5f, 0xd4, 0x31, 0x52, 0x8b, 0x1f,
-    0x9a, 0x09, 0x62, 0xfc, 0xd1, 0x41, 0xfc, 0xb1, 0x78, 0x6d, 0x05, 0x8b,
-    0xfb, 0xa9, 0xfa, 0x7b, 0x3e, 0xb1, 0x58, 0x7a, 0x02, 0x1d, 0xbf, 0xb3,
-    0xce, 0x77, 0xd2, 0xc5, 0xfd, 0x30, 0x7e, 0xfd, 0x8b, 0x16, 0x18, 0xcf,
-    0x6f, 0x45, 0xb7, 0xff, 0xed, 0xb2, 0x04, 0x26, 0xe7, 0xb2, 0x28, 0x3f,
-    0x96, 0x2f, 0xb0, 0xa6, 0x0b, 0x15, 0x28, 0xa0, 0xc2, 0x8f, 0x2b, 0xdf,
-    0xfe, 0xfc, 0xc0, 0x7f, 0x9e, 0xfc, 0xe7, 0xe2, 0xc5, 0xc2, 0x82, 0xc5,
-    0x31, 0xf2, 0x74, 0x4c, 0xb8, 0xf2, 0xb1, 0x69, 0x58, 0xac, 0x35, 0x1a,
-    0x17, 0xa8, 0x2e, 0x6a, 0x9a, 0x45, 0xb9, 0x1b, 0x90, 0xea, 0x1b, 0x7f,
-    0x86, 0x98, 0x0b, 0xc9, 0xe7, 0xd1, 0x8e, 0x74, 0x84, 0x97, 0x52, 0x5d,
-    0xff, 0x6b, 0x9f, 0x7d, 0xf7, 0x16, 0xcb, 0x17, 0xdd, 0x08, 0x50, 0x58,
-    0xb8, 0xa5, 0x62, 0xc1, 0x61, 0xbb, 0x8f, 0x25, 0xbf, 0x84, 0x6e, 0x17,
-    0x56, 0x2c, 0x5e, 0xeb, 0xdf, 0xb5, 0x8b, 0xff, 0xfd, 0xf7, 0x39, 0xdc,
-    0x2e, 0x77, 0xbb, 0xe6, 0x87, 0x3d, 0xac, 0x5f, 0xff, 0x4c, 0x33, 0x8e,
-    0x40, 0x2c, 0xf7, 0xf1, 0x62, 0xd0, 0xdd, 0x16, 0x44, 0xcb, 0x5d, 0xa3,
-    0xfb, 0x50, 0xd5, 0xa9, 0x4f, 0xef, 0x1e, 0x48, 0xa8, 0x51, 0x97, 0xdf,
-    0x9f, 0xc5, 0x27, 0x58, 0xbe, 0x2c, 0xfe, 0x2c, 0x57, 0xcf, 0x23, 0x84,
-    0xf7, 0xff, 0xfd, 0x23, 0xfe, 0x77, 0xe2, 0x6f, 0x81, 0xb9, 0xc6, 0xd6,
-    0xeb, 0x17, 0xfc, 0xde, 0x6f, 0xf7, 0x0c, 0xf2, 0xc5, 0xe3, 0x8b, 0xeb,
-    0x17, 0xe9, 0x89, 0x9b, 0x4b, 0x17, 0xfd, 0x3c, 0xfe, 0x74, 0x9c, 0xed,
-    0x62, 0xa5, 0x10, 0x3c, 0x1e, 0xf1, 0x45, 0x7d, 0x1d, 0x5e, 0x85, 0xdd,
-    0xf6, 0xd1, 0xcc, 0x6a, 0xc5, 0xfe, 0xcc, 0xc3, 0x4d, 0x68, 0x2c, 0x56,
-    0x27, 0xf0, 0x69, 0x13, 0xc6, 0xa5, 0xf2, 0x8f, 0x14, 0x5f, 0x73, 0x7f,
-    0x4a, 0xc5, 0xff, 0x3c, 0xe8, 0x11, 0xd9, 0xd3, 0x65, 0x8b, 0xfc, 0xe7,
-    0x7d, 0x72, 0x12, 0xb1, 0x58, 0x89, 0x6f, 0x92, 0x78, 0xfe, 0xfc, 0xdb,
-    0x61, 0x6e, 0xb1, 0x7f, 0xf0, 0x5c, 0xdf, 0xef, 0xdf, 0xb5, 0xa9, 0x58,
-    0xb4, 0x16, 0x2f, 0xe2, 0xcf, 0xb3, 0x6e, 0xb1, 0x73, 0x04, 0x61, 0xbf,
-    0xe0, 0x95, 0x3a, 0x2d, 0x8a, 0x11, 0x17, 0xff, 0x7b, 0x30, 0xbd, 0xce,
-    0xf9, 0x3b, 0x2c, 0x5f, 0xf7, 0x9a, 0x1c, 0xe8, 0x2d, 0x3a, 0xc5, 0x6c,
-    0x88, 0x2d, 0x23, 0x5f, 0xfc, 0xdc, 0x26, 0x34, 0x7f, 0x13, 0x71, 0x62,
-    0xa4, 0xfa, 0x44, 0x49, 0x7e, 0x31, 0xe2, 0x7f, 0x2c, 0x5f, 0xff, 0xe0,
-    0x83, 0xcd, 0x13, 0x77, 0x0d, 0xe7, 0xdc, 0xce, 0xfc, 0xb1, 0x5b, 0xa2,
-    0x41, 0x8a, 0xaf, 0xc5, 0x80, 0x90, 0x2c, 0x5f, 0xdb, 0x07, 0x9f, 0x6e,
-    0xd6, 0x2f, 0xff, 0xfa, 0x1e, 0x72, 0x01, 0x67, 0x60, 0x6f, 0x71, 0xcb,
-    0xb8, 0x2c, 0x5f, 0xe8, 0x39, 0x45, 0x07, 0xfa, 0xc5, 0xee, 0x08, 0xeb,
-    0x17, 0xff, 0xda, 0xd6, 0x73, 0x82, 0x2e, 0x61, 0xe6, 0x3d, 0x62, 0xd3,
-    0x04, 0xd9, 0x30, 0x9f, 0xb3, 0x18, 0x99, 0xfc, 0x68, 0x10, 0xf5, 0x62,
-    0xe5, 0xb3, 0x97, 0xea, 0x1b, 0xff, 0x8c, 0x45, 0xa1, 0x62, 0x51, 0xc3,
-    0xdf, 0xba, 0x3e, 0xb0, 0x6b, 0x17, 0xff, 0xdc, 0xfb, 0xf3, 0xdf, 0xc1,
-    0xbf, 0x30, 0x96, 0x2c, 0x58, 0x7f, 0x22, 0x2a, 0xbf, 0xc4, 0xda, 0x37,
-    0xd9, 0xba, 0xc5, 0x49, 0xed, 0xe1, 0x35, 0xff, 0x09, 0xb8, 0x66, 0x84,
-    0xdc, 0x58, 0xaf, 0x9e, 0xd9, 0x10, 0x5f, 0x9b, 0xf0, 0x2d, 0xd6, 0x2f,
-    0xf4, 0x9f, 0x1c, 0xf3, 0x1e, 0xb1, 0x7f, 0xa0, 0x7e, 0x39, 0x77, 0x05,
-    0x8a, 0xdc, 0xfa, 0xa2, 0x35, 0xbf, 0xcf, 0xa6, 0x20, 0x61, 0x2c, 0x5f,
-    0xef, 0x39, 0x67, 0x70, 0x95, 0x8b, 0xff, 0xb5, 0xa6, 0x87, 0x0b, 0x0e,
-    0x1f, 0x6b, 0x15, 0x27, 0xf5, 0x86, 0x77, 0xff, 0xf0, 0xd9, 0x8d, 0xcf,
-    0x4f, 0xd9, 0xf9, 0xc9, 0x02, 0xc5, 0xff, 0x3c, 0x0b, 0x3e, 0x4d, 0x05,
-    0x8b, 0xff, 0xf4, 0x30, 0x87, 0xf9, 0xc2, 0x90, 0x1d, 0xa0, 0xb1, 0x44,
-    0x88, 0xa0, 0xcd, 0xef, 0x33, 0x6e, 0xa9, 0x13, 0x0b, 0xf6, 0xcc, 0x71,
-    0xba, 0xc5, 0xff, 0xcd, 0x80, 0x00, 0xbc, 0x53, 0xee, 0x2c, 0x5e, 0xea,
-    0x7e, 0x2c, 0x54, 0x11, 0xb5, 0xb9, 0x1b, 0x95, 0x00, 0xa7, 0xa9, 0x12,
-    0xf4, 0x6d, 0x1b, 0xf5, 0xab, 0x17, 0xfe, 0x67, 0xf4, 0xfd, 0xce, 0xc3,
-    0x58, 0xa8, 0xd4, 0x7d, 0x5f, 0x2d, 0xbf, 0xfd, 0xc1, 0xfe, 0x7f, 0x27,
-    0xd6, 0x9f, 0x75, 0x8a, 0xdc, 0xfd, 0x18, 0xa2, 0xff, 0xff, 0xf6, 0x6f,
-    0x22, 0xdf, 0xf3, 0xa3, 0x30, 0x9f, 0xbe, 0x07, 0xb1, 0x60, 0xd6, 0x2f,
-    0xf7, 0x46, 0x3e, 0x1b, 0x3c, 0x58, 0xbd, 0xdc, 0x38, 0x62, 0x2c, 0xb1,
-    0xf2, 0xff, 0x67, 0x7e, 0xf3, 0x43, 0x8b, 0x34, 0xbf, 0xbb, 0xe7, 0xbc,
-    0xc0, 0x58, 0xa9, 0x4d, 0xd3, 0x21, 0xa9, 0xa3, 0x66, 0x3a, 0xbf, 0xc4,
-    0xde, 0xe6, 0xe2, 0x25, 0x8b, 0xff, 0xe0, 0x38, 0x02, 0xc7, 0xe8, 0x59,
-    0xef, 0xba, 0xc5, 0xed, 0xbc, 0xeb, 0x17, 0xff, 0x13, 0x05, 0xc0, 0x98,
-    0x73, 0xdf, 0x16, 0x2d, 0x8b, 0x15, 0xa3, 0xd8, 0xf2, 0x3d, 0xfb, 0x8c,
-    0xd0, 0xe2, 0xc5, 0xf7, 0xc4, 0x5b, 0x2c, 0x5c, 0xfd, 0xac, 0x5f, 0xcd,
-    0x0e, 0x61, 0x01, 0x62, 0xcc, 0x62, 0x65, 0x23, 0x76, 0xec, 0x89, 0x8a,
-    0x3a, 0xf2, 0x4f, 0x0c, 0x5b, 0x58, 0x9e, 0xef, 0xe3, 0x7a, 0xbf, 0xff,
-    0x9b, 0x62, 0x9e, 0xfb, 0xdc, 0x4d, 0xa0, 0x67, 0x7e, 0x58, 0xac, 0x55,
-    0x40, 0xf2, 0x84, 0x48, 0xbe, 0xff, 0x9a, 0x1c, 0xc2, 0x9e, 0xf8, 0xb1,
-    0x7f, 0xf8, 0xed, 0xd8, 0xf5, 0x8e, 0x68, 0xe4, 0x96, 0x2f, 0x41, 0xc0,
-    0xb1, 0x58, 0x7d, 0x1c, 0x4b, 0xbf, 0xfc, 0x6b, 0x73, 0x5a, 0xcd, 0x80,
-    0x79, 0x82, 0xc5, 0xf7, 0xbd, 0x3a, 0x58, 0xaf, 0x1f, 0x80, 0x69, 0xb5,
-    0x04, 0x5a, 0x05, 0x09, 0x1b, 0xff, 0xff, 0x7f, 0x21, 0xfc, 0x19, 0x4e,
-    0xe1, 0xc8, 0x59, 0xce, 0x31, 0xab, 0x17, 0xff, 0xbc, 0x0d, 0x0a, 0x1c,
-    0xd4, 0xfb, 0x0e, 0xb1, 0x52, 0x8e, 0x4f, 0x14, 0x89, 0xbe, 0xff, 0xa1,
-    0xf9, 0x23, 0x7a, 0xf7, 0xed, 0x62, 0xff, 0xb0, 0x6d, 0x0f, 0x71, 0x80,
-    0xb1, 0x5d, 0x9f, 0xc8, 0x48, 0x17, 0xff, 0x8a, 0x42, 0x0f, 0xc5, 0x20,
-    0xce, 0xfc, 0xb1, 0x7f, 0xb3, 0x5f, 0x29, 0xee, 0x0b, 0x17, 0x37, 0x78,
-    0x88, 0x00, 0xd3, 0x2f, 0xed, 0x4f, 0xe5, 0xb7, 0x58, 0xa7, 0x4c, 0x04,
-    0x50, 0xa4, 0x0c, 0xbe, 0xff, 0xff, 0xcc, 0x45, 0x3d, 0xc4, 0x53, 0xb4,
-    0x1f, 0x9c, 0x92, 0x14, 0x7a, 0xc5, 0xff, 0x87, 0x87, 0x2c, 0xf7, 0xdf,
-    0xad, 0x58, 0xad, 0xd1, 0x64, 0xed, 0xf7, 0xfe, 0xec, 0x2f, 0x7d, 0xe4,
-    0xb3, 0x75, 0x8a, 0x93, 0xe4, 0x72, 0x3b, 0xff, 0x13, 0x1c, 0x0f, 0xa7,
-    0xec, 0x0b, 0x17, 0xd8, 0xfa, 0xd9, 0x62, 0x86, 0x7c, 0x5d, 0x79, 0xfd,
-    0xfd, 0x23, 0xd8, 0xf3, 0xa5, 0x8b, 0x81, 0x2b, 0x16, 0x73, 0x4f, 0x1b,
-    0xc5, 0xf5, 0x06, 0x7a, 0xd8, 0xc8, 0x72, 0x12, 0x66, 0x92, 0x6f, 0x0a,
-    0xb7, 0x20, 0xd4, 0x77, 0xc7, 0x95, 0x3f, 0xf9, 0x5c, 0x00, 0x36, 0x29,
-    0x47, 0x3c, 0x8e, 0xa7, 0xd1, 0xa6, 0x0a, 0x10, 0x5d, 0x1b, 0x6f, 0xe1,
-    0x83, 0xad, 0xe0, 0x23, 0x96, 0x2f, 0x75, 0x75, 0x4a, 0xc5, 0xff, 0xd8,
-    0x17, 0xdb, 0xdc, 0x9f, 0x87, 0x12, 0xc5, 0xff, 0xff, 0x31, 0xa6, 0xcc,
-    0x38, 0x61, 0xc4, 0xff, 0x73, 0x8b, 0x52, 0xb1, 0x7f, 0xf6, 0xbe, 0xcf,
-    0xe1, 0x69, 0xba, 0x62, 0xc5, 0xff, 0xe3, 0x62, 0xfb, 0xeb, 0xd0, 0xc2,
-    0x71, 0xac, 0x56, 0x22, 0x48, 0x48, 0xd4, 0x34, 0xd9, 0xb4, 0x91, 0xf8,
-    0x7e, 0x5f, 0xf4, 0xc5, 0x09, 0x06, 0x81, 0x2b, 0x17, 0xe9, 0x07, 0xba,
-    0x41, 0x62, 0xe7, 0x1a, 0xc5, 0x11, 0xe1, 0x70, 0xae, 0xfe, 0x29, 0xec,
-    0xed, 0xe5, 0x8b, 0xfd, 0xbf, 0x85, 0xfd, 0x48, 0x4b, 0x17, 0xff, 0x67,
-    0x7f, 0xc1, 0xff, 0x22, 0x83, 0x2c, 0x54, 0x9f, 0xe9, 0xcd, 0xef, 0xff,
-    0xff, 0x3c, 0x97, 0xb7, 0xfb, 0xfb, 0x22, 0x29, 0x3e, 0x7d, 0xf5, 0xf6,
-    0x58, 0xbf, 0xe7, 0xc0, 0xb7, 0xfc, 0xbc, 0x72, 0xc5, 0xff, 0xff, 0xfe,
-    0x7e, 0xe1, 0xf9, 0x23, 0x70, 0xa6, 0x18, 0x76, 0xec, 0x7a, 0xc7, 0x34,
-    0x72, 0x4b, 0x17, 0xff, 0xa4, 0xa1, 0x82, 0xd6, 0xc0, 0xcc, 0x1a, 0xc5,
-    0xfe, 0xdd, 0xf5, 0xc8, 0xa5, 0x96, 0x2f, 0xf3, 0xf8, 0x13, 0xf0, 0xf8,
-    0xb1, 0x7c, 0xd0, 0x92, 0x58, 0xbf, 0x0b, 0x9f, 0x68, 0x40, 0xf5, 0xbe,
-    0x6b, 0x7f, 0x30, 0x30, 0x87, 0x05, 0x8b, 0xfe, 0x70, 0xb9, 0xfc, 0xe9,
-    0x3d, 0xac, 0x5f, 0xd3, 0x0c, 0xd8, 0x50, 0x58, 0xb7, 0x8d, 0x3e, 0xc2,
-    0x3d, 0xbf, 0xdf, 0xc7, 0x1c, 0x96, 0xeb, 0x17, 0x37, 0x66, 0x1e, 0xdf,
-    0x8a, 0x28, 0xd5, 0x46, 0xfd, 0xa5, 0x6a, 0x11, 0x64, 0x7f, 0xc8, 0x7a,
-    0x59, 0xc6, 0xba, 0xdd, 0xb9, 0xb4, 0x4f, 0x9a, 0x21, 0x3c, 0x2a, 0xfe,
-    0x43, 0xd7, 0xbb, 0x70, 0xf7, 0xd2, 0xb1, 0x6f, 0xc3, 0x9e, 0x79, 0xd6,
-    0x2f, 0xd9, 0xb1, 0xde, 0x25, 0x8a, 0x95, 0xfe, 0x2f, 0xcf, 0x7b, 0xb4,
-    0x26, 0x48, 0xa2, 0xff, 0xf3, 0x10, 0x01, 0x39, 0xd1, 0xcb, 0xbf, 0x2c,
-    0x5f, 0x79, 0xce, 0xcb, 0x17, 0xc1, 0x7c, 0x5b, 0xac, 0x58, 0xd5, 0x8b,
-    0xfb, 0xfc, 0x9f, 0x48, 0xd6, 0x2a, 0x4f, 0x9f, 0x09, 0x9c, 0x4e, 0xa5,
-    0x30, 0x0c, 0x4b, 0xf4, 0x22, 0x6f, 0xff, 0x85, 0xb7, 0xdc, 0x79, 0xcc,
-    0x04, 0xf7, 0xc5, 0x8b, 0xff, 0x9b, 0xec, 0x38, 0x1f, 0xf2, 0x19, 0x2c,
-    0x51, 0x22, 0x5c, 0x4a, 0x57, 0x8a, 0x4e, 0xb1, 0x7e, 0x7e, 0x7e, 0x74,
-    0xb1, 0x51, 0x1e, 0x27, 0xc7, 0x2e, 0x7f, 0x2c, 0x5f, 0x9f, 0x63, 0xce,
-    0xeb, 0x16, 0xf9, 0xcf, 0x07, 0xc2, 0xf7, 0xff, 0xfd, 0xad, 0x84, 0x03,
-    0x3d, 0xcc, 0xf1, 0x99, 0xe9, 0xc2, 0x82, 0xc5, 0x4a, 0x24, 0x9c, 0xa2,
-    0xff, 0xc7, 0xe7, 0xdb, 0x81, 0xc9, 0x6e, 0xb1, 0x7f, 0xfd, 0xbe, 0xa7,
-    0xe5, 0x9e, 0xc8, 0xc0, 0x82, 0x09, 0x22, 0xff, 0xfa, 0x77, 0x6e, 0xf3,
-    0x5a, 0xcd, 0xa7, 0x8e, 0xb1, 0x4e, 0x8e, 0x96, 0x41, 0x25, 0x7a, 0x82,
-    0xb5, 0xed, 0xe1, 0x96, 0xcc, 0xdc, 0x87, 0xb7, 0xa3, 0x0a, 0xbd, 0x87,
-    0x75, 0x8b, 0xf6, 0xe2, 0xdc, 0xa5, 0x62, 0xe9, 0xfa, 0xc5, 0xf8, 0x3d,
-    0x69, 0x86, 0xb1, 0x5f, 0x3c, 0x10, 0x85, 0xef, 0xa2, 0xfc, 0xf9, 0x62,
-    0x9c, 0xf1, 0xf8, 0x47, 0x43, 0x47, 0x7e, 0xe3, 0x91, 0x42, 0xca, 0xfe,
-    0x8d, 0x51, 0xaf, 0xdd, 0x77, 0xd6, 0x47, 0xac, 0x5f, 0x7b, 0x71, 0x6c,
-    0xb1, 0x7f, 0x70, 0xe2, 0x28, 0x71, 0x62, 0x88, 0xf5, 0x7c, 0x4d, 0x7f,
-    0xf7, 0x70, 0x29, 0x86, 0xa7, 0xcd, 0xe5, 0x8b, 0xe1, 0x75, 0xf1, 0xce,
-    0xb1, 0x7f, 0xb4, 0xfc, 0x0b, 0x08, 0x6b, 0x17, 0xf8, 0x39, 0xee, 0x3b,
-    0x35, 0x2b, 0x15, 0x03, 0xec, 0x19, 0xa5, 0xd3, 0x05, 0x8a, 0x94, 0xcd,
-    0xb0, 0x85, 0xd1, 0x5a, 0x12, 0xe4, 0x45, 0x7c, 0x7d, 0x37, 0x16, 0x2f,
-    0xfb, 0x6c, 0xde, 0x4e, 0xfc, 0xdd, 0x62, 0xff, 0xda, 0xfb, 0x3f, 0x80,
-    0xc3, 0x95, 0x8a, 0x93, 0xfa, 0x73, 0xcb, 0xe1, 0x47, 0xcc, 0x16, 0x2f,
-    0xfc, 0xde, 0x9d, 0x73, 0xf2, 0x5e, 0x58, 0xbc, 0xed, 0xd1, 0x62, 0xff,
-    0xff, 0x98, 0x5d, 0x7e, 0xa7, 0xec, 0xfe, 0x92, 0x70, 0x73, 0xee, 0xb1,
-    0x6c, 0x82, 0x21, 0xfc, 0x3d, 0x5f, 0x4c, 0x4c, 0x89, 0xb9, 0x0c, 0x5a,
-    0x82, 0xa5, 0x0c, 0x4b, 0xfc, 0x27, 0x45, 0x19, 0x9d, 0xcf, 0x2b, 0x17,
-    0x37, 0xd6, 0x2a, 0x06, 0xb4, 0xe2, 0xd7, 0xf9, 0xf7, 0x71, 0xf5, 0x9f,
-    0xd9, 0x62, 0xff, 0xf1, 0x4c, 0x35, 0xa1, 0x76, 0xfa, 0x6e, 0x2c, 0x5f,
-    0xff, 0x73, 0x0d, 0x2c, 0xf7, 0x32, 0x04, 0xc1, 0x2c, 0x59, 0xfe, 0x89,
-    0xbf, 0x25, 0xd3, 0xa6, 0x3f, 0xe2, 0x1e, 0x90, 0xd6, 0xbf, 0xd2, 0x5e,
-    0xc2, 0x93, 0x56, 0x2f, 0x4f, 0xf8, 0xb1, 0x5d, 0x0f, 0x3f, 0xa8, 0xca,
-    0xff, 0xa4, 0xfe, 0xfe, 0x14, 0x81, 0x62, 0xfc, 0x79, 0x84, 0x7e, 0xeb,
-    0x17, 0xe2, 0x91, 0x7b, 0x8b, 0x14, 0x03, 0xd5, 0xf1, 0x6d, 0xff, 0x72,
-    0x0f, 0xe0, 0x06, 0x50, 0x58, 0xad, 0x8f, 0x77, 0xb2, 0x2b, 0xf8, 0xb3,
-    0xdf, 0x0c, 0x25, 0x8b, 0xf8, 0x3c, 0xe8, 0x42, 0xe2, 0xc5, 0x76, 0x7c,
-    0x27, 0x30, 0xac, 0x45, 0x43, 0xc2, 0x16, 0xff, 0xa0, 0xff, 0xf7, 0x9a,
-    0x1c, 0x58, 0xa9, 0x55, 0x3f, 0x90, 0x86, 0x72, 0x7d, 0x47, 0x24, 0xc4,
-    0xd7, 0xff, 0xfb, 0x7f, 0xb9, 0xc9, 0xf6, 0x9f, 0x70, 0x3f, 0x7f, 0x06,
-    0xb1, 0x7e, 0x6f, 0x98, 0x39, 0x58, 0xae, 0xd1, 0x1b, 0xe6, 0x4b, 0xfe,
-    0xf7, 0x0b, 0x07, 0xfc, 0xf2, 0xc5, 0xff, 0x1a, 0x60, 0x79, 0xa8, 0xe6,
-    0x35, 0x62, 0xdd, 0x7a, 0xc5, 0x49, 0xec, 0x32, 0x0d, 0xff, 0xf9, 0x8d,
-    0xfc, 0xbc, 0x1c, 0xbd, 0x0c, 0xd6, 0x2c, 0x5f, 0xff, 0xf7, 0xf0, 0xf8,
-    0x50, 0xfb, 0x9c, 0x4f, 0xa7, 0x8e, 0x14, 0xac, 0x51, 0x22, 0xf3, 0xca,
-    0x95, 0x29, 0xd9, 0xe1, 0x21, 0x42, 0x44, 0x50, 0xdc, 0xbf, 0xfd, 0x85,
-    0xf6, 0xe1, 0x61, 0xa6, 0xe4, 0x7a, 0xc5, 0xff, 0xf6, 0x7d, 0x87, 0x9a,
-    0xd6, 0x77, 0x07, 0x3a, 0xc5, 0xff, 0x4f, 0x70, 0x16, 0xc3, 0x7e, 0x8b,
-    0x15, 0xba, 0x36, 0xf4, 0x9b, 0xf5, 0x0b, 0xb3, 0x75, 0x8b, 0xff, 0x77,
-    0xec, 0x21, 0x78, 0x13, 0x05, 0x8b, 0xa3, 0x8d, 0x58, 0xac, 0x3d, 0xc6,
-    0x40, 0xbf, 0xe9, 0x2f, 0x66, 0x99, 0xfa, 0x2c, 0x50, 0x0f, 0x67, 0xa1,
-    0x05, 0xff, 0xcf, 0xcc, 0x1e, 0xf3, 0xb4, 0xe7, 0x96, 0x2f, 0xf6, 0xc2,
-    0xc2, 0x3c, 0xba, 0xc5, 0xf8, 0x5f, 0xf4, 0xc4, 0xb1, 0x7f, 0xff, 0x7d,
-    0xb5, 0xf7, 0x2c, 0x1e, 0x9c, 0x5b, 0x06, 0x75, 0x8b, 0xff, 0xcf, 0x0c,
-    0x20, 0x1d, 0x87, 0xf9, 0x25, 0x8b, 0xff, 0xb7, 0x7f, 0x39, 0xcc, 0xe3,
-    0x0c, 0x6b, 0x17, 0xfd, 0x9a, 0xce, 0x19, 0xc0, 0x47, 0xac, 0x54, 0xa2,
-    0x16, 0x08, 0xf5, 0xc4, 0x77, 0xfa, 0x19, 0xb7, 0xfb, 0x39, 0x17, 0xdc,
-    0x2f, 0x2c, 0x5f, 0xef, 0xb1, 0xc7, 0x86, 0x1d, 0x62, 0xff, 0xb5, 0xa9,
-    0xc6, 0xd7, 0x70, 0x58, 0xbf, 0x9e, 0x2d, 0x38, 0x5b, 0x2c, 0x5c, 0x09,
-    0x58, 0xa9, 0x47, 0x68, 0xcd, 0x9c, 0xd7, 0xe7, 0x40, 0x31, 0xbf, 0xf7,
-    0xdf, 0xa6, 0x47, 0x8c, 0x9b, 0x4b, 0x17, 0xc2, 0xdb, 0xb8, 0xf5, 0x8a,
-    0xdc, 0xfb, 0x09, 0x0e, 0xfe, 0x71, 0x9e, 0x47, 0x2b, 0x17, 0xfa, 0x4f,
-    0x31, 0x81, 0x04, 0x12, 0xc5, 0x0d, 0x5c, 0xf3, 0xc6, 0x99, 0xc8, 0xc5,
-    0x7d, 0x0b, 0x48, 0xe2, 0x2e, 0xa2, 0xdb, 0xff, 0xd3, 0xb1, 0x66, 0x6d,
-    0xe3, 0x64, 0xa0, 0xb1, 0x7f, 0xb6, 0xfb, 0x1d, 0xf8, 0xeb, 0x17, 0xf8,
-    0x6c, 0xc1, 0x07, 0x9d, 0xac, 0x59, 0x88, 0xfa, 0xbc, 0x69, 0x52, 0xbd,
-    0x59, 0xb1, 0x8e, 0x43, 0x37, 0x72, 0x47, 0x45, 0xf9, 0x9b, 0x4b, 0xc8,
-    0x26, 0xf0, 0xa1, 0x6b, 0x7f, 0xc3, 0xfc, 0xe0, 0xcb, 0x3a, 0x2c, 0x5f,
-    0x98, 0xfe, 0xcd, 0xd6, 0x2f, 0xfd, 0x1f, 0xfc, 0xc1, 0x96, 0x6d, 0x2b,
-    0x15, 0xf3, 0xea, 0x11, 0x4d, 0xff, 0xfb, 0xee, 0x59, 0xb1, 0xc5, 0xfc,
-    0xfb, 0x76, 0x05, 0x8b, 0xff, 0x0b, 0xdc, 0x0f, 0x6e, 0x00, 0x12, 0xb1,
-    0x7f, 0x9f, 0x8e, 0x2e, 0xbc, 0x72, 0xb1, 0x43, 0x3f, 0xbf, 0x21, 0xdc,
-    0x28, 0x96, 0x2f, 0x04, 0x10, 0x49, 0x17, 0xdb, 0x1d, 0xf8, 0x91, 0x18,
-    0x68, 0x6e, 0x91, 0xac, 0x54, 0xa2, 0x21, 0x8e, 0x88, 0xde, 0xff, 0xe1,
-    0x99, 0xe2, 0x98, 0x66, 0xc2, 0x82, 0xc5, 0xf7, 0xdb, 0xf2, 0xb1, 0x58,
-    0x7d, 0x21, 0xa3, 0xdf, 0xf3, 0xf2, 0x61, 0x17, 0xdc, 0x0b, 0x17, 0xfb,
-    0x3b, 0xd6, 0x47, 0x38, 0x16, 0x2a, 0x0a, 0xda, 0xc7, 0x0a, 0x43, 0x48,
-    0x9e, 0x1a, 0x5a, 0x85, 0x51, 0xe1, 0x2d, 0xf2, 0x22, 0x3a, 0xbf, 0xff,
-    0x70, 0xb3, 0xfe, 0x29, 0x04, 0x26, 0x78, 0xeb, 0x16, 0xfa, 0xc5, 0x76,
-    0x7c, 0xa1, 0xa9, 0xda, 0x0b, 0x17, 0xf8, 0xa1, 0xfc, 0xd6, 0x76, 0xb1,
-    0x52, 0x78, 0xc2, 0x12, 0xbf, 0xdc, 0xe4, 0xef, 0x9d, 0xf9, 0x62, 0xfb,
-    0x9e, 0xe7, 0x58, 0xb1, 0x5d, 0x9e, 0xff, 0x8d, 0xaf, 0xd3, 0x84, 0xc7,
-    0x58, 0xbf, 0xf3, 0x43, 0xef, 0xd8, 0x34, 0xc3, 0x58, 0xb8, 0x71, 0xeb,
-    0x17, 0xbd, 0xac, 0x58, 0xb8, 0x61, 0x2c, 0x5f, 0xff, 0xb3, 0xa4, 0x97,
-    0x8f, 0x38, 0x43, 0xce, 0xfc, 0xb1, 0x79, 0x8b, 0x73, 0x11, 0x4f, 0x23,
-    0x7b, 0x0e, 0xe8, 0x66, 0x9d, 0x53, 0x49, 0xda, 0x9a, 0x10, 0x00, 0x23,
-    0x22, 0x61, 0x43, 0x9e, 0xfb, 0x69, 0xd6, 0xcb, 0x17, 0x3f, 0x6b, 0x15,
-    0xa3, 0x7a, 0x19, 0x2d, 0xf9, 0xcb, 0xc1, 0x9d, 0x62, 0xa4, 0xf2, 0xc0,
-    0x45, 0x7b, 0xcf, 0x12, 0xc5, 0xf6, 0x66, 0xb8, 0xb1, 0x6e, 0x61, 0xe0,
-    0x00, 0x7a, 0xa0, 0x88, 0x8f, 0x30, 0xdf, 0xfc, 0x71, 0x7c, 0xd6, 0xce,
-    0x7f, 0x38, 0xb1, 0x7a, 0x42, 0x75, 0x8b, 0xff, 0xf7, 0xdf, 0x7f, 0xe7,
-    0xbe, 0xec, 0x0f, 0xb8, 0x16, 0x2f, 0xff, 0x1a, 0xc4, 0x26, 0x0f, 0x9e,
-    0x9e, 0xc2, 0x58, 0xbf, 0xfd, 0xfc, 0xe7, 0x30, 0xe3, 0x7e, 0x92, 0x35,
-    0x8b, 0xfa, 0x4f, 0x17, 0xdf, 0x4b, 0x17, 0xee, 0x61, 0xdb, 0xb5, 0x8b,
-    0xf1, 0xa6, 0x66, 0x69, 0x62, 0xb0, 0xf4, 0xc4, 0x53, 0x7e, 0xe3, 0xe1,
-    0x01, 0x62, 0xb4, 0x79, 0x1c, 0x21, 0xbd, 0xac, 0x8f, 0x58, 0xbf, 0xfc,
-    0x2e, 0x7d, 0xf2, 0x27, 0xdb, 0x3b, 0xf2, 0xc5, 0xff, 0x04, 0x1e, 0xdc,
-    0xc3, 0xcc, 0x7a, 0xc5, 0xfa, 0x1e, 0x2c, 0x82, 0xc5, 0xfe, 0x0f, 0xdc,
-    0xc3, 0x5f, 0x4b, 0x17, 0x89, 0xbb, 0x58, 0xbb, 0xbc, 0xd1, 0xe9, 0xf0,
-    0xda, 0xb1, 0x15, 0x22, 0x7b, 0xbf, 0xfb, 0x7c, 0x21, 0xe9, 0xb7, 0xce,
-    0xfc, 0xb1, 0x7f, 0xe6, 0x3e, 0x43, 0xf8, 0xf0, 0xe2, 0xc5, 0x3a, 0x21,
-    0x7e, 0x8f, 0x52, 0x9d, 0x97, 0xe1, 0xd3, 0xc8, 0x53, 0xdf, 0x30, 0x3d,
-    0xd7, 0xac, 0x56, 0xcb, 0x98, 0x03, 0x46, 0xc1, 0xd3, 0x55, 0xb7, 0x4e,
-    0x89, 0x33, 0x50, 0xca, 0x39, 0x11, 0x10, 0x7a, 0x3f, 0xf0, 0x8e, 0xaf,
-    0xd9, 0xdf, 0xbf, 0x2b, 0x17, 0xfe, 0x1e, 0x41, 0xff, 0x3c, 0xf3, 0xac,
-    0x5f, 0x9f, 0xa7, 0xa7, 0x16, 0x2f, 0xf3, 0xf4, 0xee, 0x4a, 0x78, 0xb1,
-    0x7f, 0x49, 0x7d, 0x98, 0xeb, 0x17, 0xff, 0x98, 0x07, 0x7d, 0x4f, 0x9f,
-    0x77, 0x1a, 0xc5, 0x41, 0x15, 0x60, 0x35, 0xe1, 0x65, 0x7d, 0x36, 0xb6,
-    0x29, 0xe1, 0xf7, 0xa1, 0xa9, 0x52, 0xbe, 0x73, 0x93, 0x9c, 0x6d, 0x28,
-    0x52, 0xfe, 0x9f, 0x70, 0x32, 0x82, 0xc5, 0xf4, 0xef, 0x84, 0xb1, 0x7e,
-    0xe7, 0x27, 0x50, 0xd1, 0xe8, 0xfc, 0xbe, 0xed, 0xb6, 0x58, 0xa7, 0x3d,
-    0x90, 0x8f, 0xef, 0xe0, 0xf3, 0x51, 0xcc, 0x6a, 0xc5, 0xfb, 0x35, 0x1c,
-    0xc6, 0xac, 0x5d, 0x9c, 0x30, 0xf7, 0xc3, 0x33, 0xbf, 0xfd, 0x11, 0x4f,
-    0xb9, 0xee, 0xf7, 0x72, 0xd9, 0x62, 0xff, 0x8b, 0xda, 0x66, 0xee, 0x1c,
-    0x58, 0xbf, 0xe3, 0x70, 0x83, 0x9d, 0x60, 0xd6, 0x2b, 0x0f, 0xd0, 0x47,
-    0x57, 0xfc, 0xc6, 0x99, 0xf9, 0x04, 0xc7, 0xac, 0x5f, 0xa1, 0x9d, 0x1f,
-    0x4b, 0x17, 0xf8, 0x20, 0xf2, 0x2e, 0x1f, 0x8b, 0x15, 0x27, 0xc4, 0xc5,
-    0x55, 0x89, 0xe9, 0x39, 0x7f, 0xe1, 0x84, 0xc4, 0x25, 0x0a, 0x0b, 0xff,
-    0xff, 0x00, 0x32, 0xcd, 0x6b, 0x02, 0xc8, 0xfc, 0x29, 0x01, 0xda, 0x0b,
-    0x17, 0xff, 0xfa, 0x4e, 0x18, 0xff, 0x3d, 0xeb, 0x59, 0xdc, 0x3c, 0xe7,
-    0x58, 0xbf, 0xff, 0xfe, 0xdf, 0x09, 0xfb, 0xe1, 0x67, 0xb9, 0x90, 0x26,
-    0x0b, 0xbf, 0x09, 0xb8, 0xb1, 0x7d, 0xef, 0x49, 0xd6, 0x2f, 0x16, 0x73,
-    0xe9, 0x83, 0x81, 0x94, 0x27, 0xfb, 0x39, 0x27, 0x71, 0xd2, 0x37, 0x6b,
-    0xf6, 0xc0, 0x87, 0x7e, 0x58, 0xbf, 0xff, 0xbd, 0xc1, 0x0f, 0xef, 0x91,
-    0x33, 0xc7, 0xbf, 0x70, 0x58, 0xbf, 0xff, 0x8b, 0x00, 0xc4, 0x0d, 0x6b,
-    0x02, 0xc0, 0x37, 0x6b, 0x14, 0x48, 0xbb, 0xf3, 0x05, 0xf7, 0xb6, 0xc0,
-    0x96, 0x2f, 0xfe, 0x04, 0x86, 0x39, 0xd4, 0x5f, 0x70, 0x2c, 0x53, 0x9f,
-    0x60, 0x09, 0x6f, 0xfe, 0x72, 0xd8, 0xe2, 0xef, 0xc4, 0xdf, 0x58, 0xbf,
-    0x10, 0xbd, 0x3c, 0x58, 0xba, 0x77, 0x93, 0xee, 0xfa, 0x35, 0xfa, 0x28,
-    0x3e, 0xb8, 0xb1, 0x7f, 0xd3, 0xbc, 0x9f, 0x06, 0xc7, 0x58, 0xad, 0x1f,
-    0x1f, 0x51, 0x55, 0xff, 0xda, 0xd4, 0x9f, 0x81, 0x91, 0x4f, 0x6b, 0x17,
-    0xd0, 0x08, 0x5d, 0xac, 0x5e, 0x29, 0xdd, 0x62, 0xb6, 0x3c, 0x30, 0xc9,
-    0xab, 0x64, 0x56, 0xc7, 0xc2, 0x26, 0x9d, 0x1f, 0xcd, 0x0d, 0x2b, 0xff,
-    0xa1, 0xcc, 0x91, 0xb9, 0x36, 0x8d, 0x58, 0xbf, 0xff, 0xa1, 0x84, 0x66,
-    0x40, 0x53, 0xc3, 0x3f, 0x80, 0x65, 0x8b, 0xf6, 0xa7, 0x06, 0xeb, 0x17,
-    0xf7, 0xdc, 0x63, 0xc0, 0x96, 0x2f, 0xda, 0xce, 0x9f, 0xc3, 0x0f, 0x5b,
-    0x72, 0x7a, 0x94, 0xce, 0x1d, 0x11, 0xa1, 0x65, 0x7f, 0xff, 0xfc, 0x0e,
-    0x64, 0x3f, 0x2f, 0xa0, 0x02, 0x75, 0x82, 0x34, 0x6f, 0xa6, 0xe2, 0xc5,
-    0xff, 0xf7, 0xf2, 0x06, 0x6f, 0xf7, 0xf7, 0x7b, 0xbe, 0x96, 0x2a, 0x51,
-    0xa7, 0xe7, 0xeb, 0xfb, 0x6d, 0xde, 0x4a, 0x0b, 0x17, 0xa2, 0xcf, 0x2c,
-    0x5f, 0xe7, 0xf7, 0xe4, 0xec, 0x4b, 0x17, 0xfe, 0x7e, 0xf8, 0x3f, 0xe3,
-    0x91, 0xab, 0x17, 0x75, 0xe6, 0x40, 0xfc, 0x80, 0x65, 0x5f, 0x46, 0x20,
-    0xa1, 0x21, 0x52, 0x98, 0xdb, 0x43, 0xce, 0xff, 0xfe, 0xeb, 0xdf, 0xdf,
-    0x9d, 0x69, 0xfb, 0xfe, 0x61, 0x6e, 0xb1, 0x50, 0x5f, 0xeb, 0xc3, 0x07,
-    0x87, 0x3e, 0xa1, 0x1c, 0x78, 0x47, 0xfe, 0x38, 0xe0, 0x46, 0xbc, 0x51,
-    0x83, 0x7a, 0x33, 0xd1, 0x13, 0xdf, 0xe9, 0xce, 0x6b, 0x3b, 0x82, 0xc5,
-    0xff, 0xef, 0x49, 0xf7, 0x61, 0xe0, 0x41, 0xea, 0x0b, 0x17, 0xfe, 0xfc,
-    0x91, 0xbb, 0xbc, 0x94, 0x16, 0x2f, 0x6d, 0xd0, 0x6b, 0x15, 0x03, 0xe0,
-    0x23, 0xfb, 0xc1, 0x30, 0x4b, 0x17, 0xfe, 0x6d, 0x18, 0x4d, 0xe8, 0x30,
-    0xd6, 0x2f, 0xff, 0xe7, 0x21, 0xeb, 0x37, 0xfc, 0xff, 0x35, 0xa9, 0x35,
-    0x62, 0xff, 0x98, 0x2f, 0x67, 0xf5, 0x1e, 0x35, 0x8a, 0x82, 0x36, 0x7e,
-    0x7e, 0x4b, 0x97, 0xfd, 0x83, 0xf7, 0x33, 0xd3, 0xa5, 0x8b, 0xff, 0x6f,
-    0xf9, 0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xf3, 0x7a, 0x39, 0xf7, 0x58, 0xa9,
-    0x45, 0x2e, 0x1c, 0xb2, 0x05, 0xff, 0xd9, 0xf6, 0xf7, 0x3b, 0x80, 0x9b,
-    0xcb, 0x17, 0xff, 0xf3, 0x14, 0xe7, 0xa2, 0xfc, 0xec, 0x59, 0xd1, 0xc9,
-    0x62, 0x8d, 0x45, 0x0b, 0x23, 0x5e, 0x26, 0x8f, 0x58, 0xbe, 0xd3, 0xe7,
-    0xd6, 0x2f, 0xec, 0x0f, 0x34, 0xe4, 0xb1, 0x43, 0x3e, 0xed, 0x0f, 0xf4,
-    0x22, 0xbf, 0xff, 0xff, 0xb9, 0xc9, 0xd6, 0xfb, 0xfd, 0xe2, 0x66, 0xd6,
-    0x77, 0xee, 0xf7, 0x13, 0x17, 0x7e, 0x58, 0xbf, 0xbc, 0xf1, 0x7b, 0x23,
-    0xd6, 0x2b, 0x48, 0xc2, 0xf4, 0x24, 0x2f, 0xf8, 0xec, 0x30, 0xfa, 0xa4,
-    0xa0, 0xb1, 0x7f, 0xdb, 0x8a, 0x3f, 0x8e, 0x16, 0x69, 0x62, 0xa4, 0xff,
-    0x37, 0x3d, 0xbf, 0xff, 0xdc, 0x93, 0x73, 0x8c, 0x5e, 0xc2, 0x9d, 0xca,
-    0x4e, 0xb1, 0x7f, 0xfe, 0x14, 0x87, 0xe2, 0xc0, 0x31, 0x03, 0x77, 0xc5,
-    0x8b, 0xff, 0xbe, 0xf1, 0x13, 0x05, 0xec, 0xf9, 0xd6, 0x2f, 0x7e, 0x4e,
-    0xb1, 0x7e, 0x7c, 0xe3, 0x12, 0xc5, 0xed, 0x37, 0x37, 0x44, 0x4f, 0xd1,
-    0xbc, 0x3b, 0x50, 0x4c, 0x80, 0x50, 0xde, 0xae, 0xd3, 0xa8, 0xf4, 0x6f,
-    0xf7, 0xff, 0xb9, 0x9a, 0x33, 0x7f, 0xbf, 0x47, 0x21, 0xac, 0x5f, 0xf7,
-    0x7b, 0xb9, 0x6d, 0x9d, 0xf9, 0x62, 0x9d, 0x16, 0xdc, 0x2b, 0xf2, 0x75,
-    0xff, 0xf9, 0x8b, 0x61, 0xfe, 0x75, 0xac, 0xe7, 0x04, 0x4b, 0x15, 0x2b,
-    0x93, 0x99, 0x0f, 0x37, 0x85, 0x23, 0x4a, 0x80, 0x08, 0xbe, 0xff, 0xce,
-    0x31, 0x7b, 0x92, 0x4f, 0x8b, 0x17, 0xfc, 0x79, 0xd7, 0x4c, 0xd4, 0xc4,
-    0xb1, 0x7f, 0xfe, 0xd3, 0x8b, 0x6f, 0x7e, 0x5f, 0x5a, 0x72, 0xd9, 0x62,
-    0xfc, 0x53, 0x0e, 0xb5, 0x96, 0x2f, 0xfc, 0x6b, 0x7b, 0x36, 0xcc, 0x23,
-    0x56, 0x2f, 0xe7, 0xd1, 0x4f, 0x70, 0x58, 0xbf, 0xb3, 0x45, 0x3d, 0xc1,
-    0x62, 0xe6, 0x2c, 0x3d, 0xce, 0x17, 0x5f, 0xff, 0xa4, 0xf1, 0x33, 0x6d,
-    0xdf, 0x1f, 0xce, 0x5b, 0x2c, 0x5f, 0xfd, 0x39, 0xa8, 0x37, 0xbe, 0xc4,
-    0x05, 0x8b, 0xff, 0xf7, 0xc5, 0xdf, 0xb8, 0xdd, 0xef, 0x1d, 0x9c, 0xe6,
-    0x2c, 0x5f, 0xf3, 0x1d, 0xbd, 0xf6, 0x20, 0x2c, 0x5f, 0xfe, 0x6d, 0x1a,
-    0x1c, 0x85, 0x9c, 0xe3, 0x1a, 0xb1, 0x43, 0x55, 0x91, 0x8a, 0xe6, 0x96,
-    0x6f, 0x09, 0xc8, 0x8a, 0xfe, 0xb1, 0xe4, 0x3e, 0x8b, 0xa1, 0x1c, 0x5f,
-    0xfc, 0x45, 0x21, 0x7b, 0x36, 0x8d, 0x51, 0xab, 0xac, 0x58, 0xbf, 0xff,
-    0xfa, 0x0e, 0x3c, 0x20, 0x18, 0x07, 0xef, 0x85, 0x8e, 0x7c, 0x20, 0x2c,
-    0x53, 0xa3, 0x23, 0xca, 0xf5, 0x89, 0xba, 0x34, 0x6a, 0x57, 0xfe, 0xd6,
-    0xe7, 0x9e, 0xf9, 0x9d, 0x31, 0x62, 0xe6, 0x8f, 0x58, 0xbc, 0xda, 0x35,
-    0x62, 0xff, 0xfe, 0x88, 0xa4, 0x79, 0xdf, 0xb2, 0x12, 0x5b, 0x1f, 0x16,
-    0x2e, 0xc3, 0xac, 0x5f, 0xf8, 0xb0, 0x6e, 0xc5, 0xb1, 0xf1, 0x62, 0xf0,
-    0x23, 0xb0, 0x67, 0xa8, 0x18, 0xbd, 0x69, 0x30, 0x5f, 0x8f, 0x14, 0x2c,
-    0x2f, 0xbc, 0xda, 0xe2, 0xc5, 0xf8, 0xc8, 0xec, 0xd4, 0xac, 0x56, 0xc7,
-    0x9e, 0x44, 0x75, 0x2a, 0x82, 0x36, 0x43, 0xc8, 0xc7, 0xda, 0x10, 0x97,
-    0xe1, 0xe4, 0x53, 0xf5, 0x8b, 0xff, 0xff, 0xf7, 0xbe, 0xd0, 0xcd, 0x41,
-    0xfb, 0xce, 0x98, 0x37, 0x0b, 0xec, 0xfe, 0x9f, 0xac, 0x51, 0xa8, 0xae,
-    0x22, 0x9b, 0xff, 0xfe, 0x1b, 0x10, 0x0b, 0x36, 0x3b, 0xfb, 0xf9, 0xa2,
-    0x9e, 0xd6, 0x2a, 0x51, 0x12, 0x22, 0x3b, 0xfe, 0x83, 0xfb, 0x9b, 0xcf,
-    0xb8, 0xb1, 0x7f, 0x00, 0xcc, 0x1b, 0x41, 0x62, 0xa2, 0x3e, 0xa6, 0x3b,
-    0xbf, 0xff, 0x3e, 0xfe, 0x26, 0x06, 0x6f, 0x3e, 0xfb, 0xf4, 0x58, 0xbd,
-    0xbb, 0xe9, 0x62, 0xc6, 0xac, 0x5f, 0xfd, 0x9b, 0xfe, 0x7f, 0x9a, 0xd4,
-    0x9a, 0xb1, 0x7e, 0xcd, 0x6a, 0x4d, 0x58, 0xbe, 0x27, 0x07, 0x25, 0x10,
-    0x5a, 0x13, 0xfa, 0x35, 0xff, 0x7d, 0x80, 0x76, 0x83, 0x71, 0x62, 0xff,
-    0x34, 0x21, 0x30, 0xdf, 0x8b, 0x15, 0x87, 0xdc, 0x23, 0x9b, 0xfe, 0xc8,
-    0x7d, 0xa1, 0xe7, 0xd9, 0x62, 0xf0, 0x50, 0x95, 0x8b, 0xfd, 0x1d, 0x9f,
-    0x9c, 0xd4, 0x16, 0x2d, 0x90, 0x3d, 0x40, 0x0f, 0x5f, 0xff, 0xfc, 0xfe,
-    0xfe, 0x0e, 0x0f, 0xec, 0x3f, 0x1a, 0x11, 0xd9, 0xce, 0x62, 0xc5, 0x41,
-    0x5d, 0x1e, 0x42, 0x30, 0xd2, 0x2e, 0xd6, 0x1e, 0x14, 0x1f, 0x85, 0x98,
-    0x08, 0x4a, 0x11, 0xdc, 0x27, 0xbf, 0xfc, 0xdb, 0x7d, 0xe4, 0xb2, 0x27,
-    0xd3, 0xac, 0x5f, 0xff, 0xb3, 0xa1, 0x0b, 0x9a, 0x98, 0x3f, 0x9c, 0xa0,
-    0xb1, 0x50, 0x74, 0x6a, 0xe3, 0x94, 0xa7, 0x94, 0x9f, 0x43, 0x61, 0x65,
-    0xd9, 0xa3, 0xc2, 0xba, 0x3c, 0x86, 0x28, 0x7c, 0x6a, 0x1a, 0x87, 0x86,
-    0x77, 0xe7, 0x4b, 0x59, 0x6c, 0x07, 0xa5, 0x38, 0xf1, 0xc9, 0x46, 0x1e,
-    0x9d, 0x22, 0x0a, 0x12, 0x61, 0xa4, 0xdf, 0xf7, 0xdb, 0x8e, 0x45, 0x3d,
-    0xac, 0x5f, 0xe7, 0xfc, 0xf7, 0x0c, 0x3a, 0xc5, 0xf6, 0x13, 0x8f, 0x87,
-    0xd9, 0x1c, 0x71, 0x7c, 0x6f, 0x5e, 0xfd, 0xac, 0x5f, 0xfb, 0xdc, 0x0f,
-    0xce, 0x53, 0xdc, 0x16, 0x2b, 0x47, 0xd6, 0x45, 0x57, 0xe2, 0xcf, 0xb7,
-    0x96, 0x2f, 0xfd, 0x09, 0x2d, 0x83, 0xd1, 0x0a, 0x0b, 0x17, 0xb9, 0x9a,
-    0x58, 0xbf, 0x89, 0x86, 0x0e, 0xc0, 0xb1, 0x58, 0x8d, 0x58, 0xf2, 0x18,
-    0x89, 0xfe, 0x83, 0xc1, 0xdb, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf, 0xfb,
-    0x40, 0x16, 0x6a, 0x0f, 0xde, 0x74, 0x58, 0xbf, 0xf1, 0x43, 0x4d, 0xdf,
-    0xe7, 0x38, 0xb1, 0x52, 0x8b, 0x37, 0x2c, 0x64, 0x8b, 0xff, 0xb7, 0x7d,
-    0x7f, 0x22, 0xfb, 0xeb, 0x65, 0x8b, 0xec, 0x8e, 0x16, 0x96, 0x2f, 0xff,
-    0x16, 0x04, 0xc0, 0x33, 0xdf, 0x97, 0xdd, 0x62, 0xfb, 0xdb, 0x60, 0xd6,
-    0x2f, 0xf9, 0xcd, 0x0f, 0x40, 0x3b, 0xf1, 0x62, 0x8c, 0x46, 0x91, 0xa4,
-    0xd1, 0x26, 0x47, 0x12, 0x5e, 0xe9, 0xfc, 0x58, 0xbf, 0xf8, 0xb0, 0x19,
-    0xd1, 0xcd, 0x03, 0x79, 0x62, 0xff, 0xcf, 0xdf, 0x00, 0xc4, 0x38, 0x84,
-    0xb1, 0x78, 0x20, 0x82, 0x58, 0xbf, 0xf8, 0xa4, 0x18, 0x3e, 0x61, 0xe7,
-    0x74, 0x88, 0xc3, 0x43, 0x40, 0x45, 0xcf, 0x98, 0xaf, 0xf7, 0xdf, 0x07,
-    0x25, 0xe5, 0x8a, 0x82, 0x6a, 0x87, 0x87, 0xff, 0x42, 0x3b, 0xff, 0x30,
-    0x37, 0xfb, 0xc4, 0x52, 0x05, 0x8a, 0x94, 0xfa, 0xf2, 0x37, 0x37, 0x38,
-    0xbf, 0xb5, 0x9d, 0x5f, 0x61, 0xac, 0x5f, 0xff, 0xd9, 0x0f, 0xb4, 0x30,
-    0x85, 0xe7, 0xf9, 0x08, 0xd5, 0x8b, 0xfe, 0xec, 0xc2, 0xce, 0x9a, 0x7e,
-    0x2c, 0x5f, 0xdc, 0x2c, 0xd8, 0x38, 0x2c, 0x56, 0x1f, 0x69, 0xcf, 0x6f,
-    0xed, 0xfe, 0xf2, 0x5b, 0xac, 0x54, 0x9e, 0x86, 0x10, 0xdf, 0xed, 0x4f,
-    0x9f, 0x77, 0x1a, 0xc5, 0xfa, 0x11, 0x66, 0x6e, 0xb1, 0x7f, 0x85, 0xb4,
-    0xb8, 0xf0, 0xeb, 0x16, 0xd2, 0xc5, 0x75, 0x88, 0xa4, 0x93, 0x42, 0x2a,
-    0x0c, 0xd2, 0xfc, 0x16, 0x1d, 0xbb, 0x58, 0xbe, 0x06, 0x34, 0x7a, 0xc5,
-    0x49, 0xe7, 0xb9, 0x55, 0x41, 0x91, 0xc1, 0x91, 0xbd, 0x1b, 0x18, 0x07,
-    0x65, 0xaf, 0x18, 0xd7, 0xe5, 0x17, 0x31, 0xa0, 0x0c, 0x4a, 0x31, 0x8e,
-    0x43, 0x13, 0xd0, 0x90, 0xbd, 0xc3, 0x0d, 0x58, 0xbd, 0xb4, 0xfd, 0x62,
-    0x8c, 0x37, 0xc4, 0x41, 0x7e, 0xff, 0xb8, 0x28, 0xf5, 0x8b, 0x82, 0xeb,
-    0x16, 0x2a, 0x4f, 0x2f, 0xb2, 0xdb, 0xfe, 0x26, 0x37, 0xdc, 0x27, 0x35,
-    0x62, 0xf4, 0x4c, 0x4b, 0x17, 0x9c, 0xfc, 0x58, 0xb7, 0xb0, 0xdd, 0x78,
-    0x76, 0xe6, 0x75, 0x8b, 0xf7, 0x7e, 0xe9, 0x84, 0xb1, 0x7e, 0x6f, 0x41,
-    0x86, 0xb1, 0x63, 0x70, 0xf4, 0xc8, 0xae, 0xdf, 0x58, 0xbb, 0x3e, 0xb1,
-    0x50, 0x35, 0x3e, 0x12, 0xac, 0x4d, 0xd1, 0xdd, 0x3e, 0x4c, 0xcd, 0x3e,
-    0x50, 0xb3, 0xac, 0x5f, 0xf0, 0x1b, 0x36, 0x3c, 0xe7, 0x96, 0x2f, 0x47,
-    0x31, 0xab, 0x17, 0xff, 0xf4, 0x94, 0x9a, 0x52, 0x68, 0x71, 0xd3, 0xa9,
-    0xde, 0x56, 0x2b, 0x48, 0xb9, 0x39, 0xc8, 0x44, 0x37, 0xfd, 0x3b, 0x39,
-    0xfd, 0x98, 0x75, 0x8b, 0xff, 0xe9, 0x39, 0x4f, 0x60, 0x1e, 0x1f, 0x6c,
-    0x09, 0x62, 0xfe, 0xfc, 0x99, 0xbb, 0xec, 0xb1, 0x7f, 0xe6, 0x3e, 0x68,
-    0xd3, 0x44, 0x5e, 0x58, 0xbf, 0xd3, 0xee, 0x71, 0xca, 0x25, 0x8a, 0xf9,
-    0xfa, 0x92, 0x0d, 0x8d, 0x58, 0xbe, 0x26, 0xee, 0x0b, 0x17, 0xfc, 0xc5,
-    0x0f, 0x8a, 0x7b, 0xe2, 0xc5, 0x39, 0xf8, 0x44, 0x26, 0x11, 0x1d, 0xff,
-    0xfc, 0xc7, 0xd6, 0x74, 0x92, 0xf6, 0x7d, 0xf5, 0xf6, 0x58, 0xbf, 0xe6,
-    0xf7, 0x3d, 0xe6, 0x87, 0x16, 0x2a, 0x24, 0xd5, 0xb5, 0x09, 0x1f, 0x98,
-    0x12, 0xdd, 0xff, 0xcd, 0xa6, 0x86, 0x71, 0xbd, 0x91, 0x2c, 0x5f, 0xf7,
-    0xb5, 0x39, 0xd9, 0x8d, 0xc5, 0x8b, 0xfb, 0xed, 0xbc, 0x90, 0xd6, 0x2f,
-    0xcd, 0xa2, 0x98, 0x2c, 0x5f, 0xb0, 0x7f, 0x78, 0x96, 0x28, 0xd3, 0xfe,
-    0xd1, 0x71, 0x13, 0xdf, 0xec, 0x1c, 0xc2, 0x61, 0xe5, 0x8b, 0xff, 0xfe,
-    0x01, 0xda, 0x19, 0xb8, 0xc4, 0x6f, 0x7c, 0x60, 0x67, 0x7e, 0x58, 0xbf,
-    0xf6, 0x44, 0x16, 0x77, 0xef, 0x49, 0xd6, 0x2a, 0x51, 0x5d, 0xf6, 0xcb,
-    0xf8, 0xb6, 0x7d, 0x74, 0x82, 0xc5, 0xff, 0xf7, 0xc5, 0x3a, 0xce, 0x8f,
-    0xcc, 0xec, 0x72, 0xb1, 0x7f, 0xff, 0xbd, 0xe9, 0x81, 0x37, 0xe4, 0xff,
-    0xc1, 0xb7, 0x64, 0xb1, 0x7e, 0xce, 0xf1, 0xa3, 0xd6, 0x2f, 0xff, 0x7b,
-    0xf9, 0xd3, 0xee, 0x67, 0x38, 0xe7, 0x58, 0xa9, 0x4d, 0x70, 0x66, 0x38,
-    0xa5, 0xf6, 0x06, 0x2b, 0xbf, 0xe8, 0x3e, 0xbb, 0x92, 0x9e, 0x2c, 0x5e,
-    0x09, 0xb6, 0x58, 0xbf, 0x9e, 0x28, 0x38, 0x31, 0x62, 0xff, 0xa7, 0x36,
-    0xd4, 0xf9, 0xbc, 0xb1, 0x4e, 0x8b, 0xff, 0x9c, 0xf8, 0x7c, 0x45, 0xd5,
-    0xd7, 0x6c, 0x89, 0x39, 0x86, 0x56, 0xc6, 0x30, 0x39, 0x1a, 0x96, 0x47,
-    0xf9, 0xba, 0x1f, 0x68, 0x9a, 0x85, 0xc9, 0xcb, 0xff, 0x0e, 0x12, 0x8d,
-    0xfb, 0xd1, 0x83, 0xdf, 0xd0, 0x98, 0xb1, 0xc0, 0xb1, 0x68, 0xce, 0xb2,
-    0x11, 0xed, 0xf1, 0xa0, 0xbc, 0x6c, 0xdd, 0xd7, 0x52, 0xd8, 0xd6, 0x69,
-    0x33, 0xa1, 0x5b, 0x4a, 0xb0, 0x84, 0xa8, 0x11, 0xce, 0xce, 0x65, 0x61,
-    0xec, 0x6c, 0x60, 0xfb, 0xd2, 0x06, 0xbb, 0x9c, 0xa8, 0x78, 0xd2, 0xe3,
-    0xcd, 0xe2, 0x9c, 0x26, 0xd4, 0xe1, 0xa1, 0xe5, 0x49, 0xfe, 0x7f, 0x31,
-    0xa5, 0xfd, 0x82, 0x5a, 0xa1, 0x52, 0x2a, 0x79, 0x69, 0x10, 0x3d, 0x4a,
-    0x96, 0x14, 0x60, 0x21, 0x36, 0x47, 0x47, 0x2c, 0x1d, 0x23, 0x6f, 0xaa,
-    0x1b, 0xd7, 0xfd, 0xf7, 0x30, 0xb3, 0xcd, 0xd1, 0x62, 0xfc, 0x1f, 0xdb,
-    0xf2, 0xb1, 0x7e, 0x87, 0x72, 0x43, 0x58, 0xa8, 0x2a, 0xf1, 0x36, 0x53,
-    0x21, 0xce, 0xc8, 0xa6, 0xff, 0xf6, 0xb0, 0x21, 0xff, 0x22, 0x2c, 0xd4,
-    0x16, 0x2f, 0x6b, 0x23, 0xd6, 0x2f, 0xef, 0x0a, 0x11, 0x4f, 0x52, 0xc5,
-    0xff, 0xa4, 0x20, 0xf6, 0xe6, 0x1e, 0x63, 0xd6, 0x2b, 0x48, 0xe4, 0x3a,
-    0x67, 0xc8, 0x3c, 0x67, 0x7f, 0xfc, 0xc7, 0x9d, 0x6f, 0xa1, 0x1b, 0xa1,
-    0x37, 0x16, 0x2b, 0x11, 0x20, 0x23, 0xdb, 0x0d, 0x62, 0xff, 0x6b, 0x71,
-    0x30, 0xcf, 0x2b, 0x17, 0xff, 0x4e, 0x83, 0xf3, 0xfb, 0xf8, 0x37, 0x58,
-    0xbf, 0xc5, 0xd8, 0x33, 0x8d, 0x1e, 0xb1, 0x7f, 0xc5, 0x3b, 0x07, 0xff,
-    0xb4, 0x7a, 0xc5, 0xf4, 0xe0, 0xfb, 0x58, 0xac, 0x44, 0xc7, 0xcd, 0xfa,
-    0x1f, 0x5f, 0xff, 0x7e, 0x32, 0x7d, 0x23, 0x2c, 0x87, 0xe6, 0x0b, 0x17,
-    0x82, 0x60, 0x96, 0x2f, 0xe6, 0x6f, 0x47, 0x3e, 0xeb, 0x17, 0x74, 0xea,
-    0x58, 0xbf, 0xfa, 0x4b, 0x62, 0xcf, 0x73, 0x3b, 0x82, 0xc5, 0xff, 0xfe,
-    0x27, 0x07, 0x35, 0x9b, 0xfe, 0x7f, 0x9a, 0xd4, 0x9a, 0xb1, 0x7f, 0xec,
-    0xdb, 0x67, 0xf6, 0x85, 0x20, 0x58, 0xa7, 0x45, 0x1f, 0x98, 0xaf, 0xef,
-    0xc8, 0xdc, 0xb1, 0x62, 0xba, 0xd5, 0x69, 0x52, 0x25, 0xb1, 0xae, 0x43,
-    0x77, 0xb3, 0x18, 0xf5, 0x2d, 0x0f, 0x80, 0xc7, 0x83, 0xbe, 0x87, 0x40,
-    0x88, 0xaf, 0x75, 0xce, 0xb2, 0x0b, 0x17, 0x89, 0xb8, 0xb1, 0x7f, 0xe9,
-    0xf6, 0x6a, 0x0f, 0xde, 0x74, 0x58, 0xbf, 0xff, 0x13, 0x8b, 0xaf, 0xfe,
-    0x66, 0xa0, 0xfd, 0xe7, 0x45, 0x8a, 0xfa, 0x2e, 0x63, 0x87, 0x03, 0x41,
-    0xbf, 0x3f, 0x42, 0xce, 0x2c, 0x46, 0x1b, 0x4b, 0xd2, 0x5e, 0x58, 0xa8,
-    0x1e, 0xc0, 0xcf, 0x2f, 0x36, 0xb6, 0x58, 0xbf, 0xdb, 0xbc, 0x80, 0xf3,
-    0x05, 0x8b, 0xfd, 0x9e, 0xe3, 0xef, 0x84, 0xb1, 0x70, 0x41, 0x2c, 0x5f,
-    0xf8, 0x5b, 0x37, 0xbd, 0xde, 0xee, 0x4b, 0x17, 0x9b, 0x78, 0xcc, 0x4c,
-    0x0f, 0x72, 0x2f, 0x8f, 0x11, 0xa0, 0x46, 0x61, 0x8d, 0x5f, 0xb4, 0xd0,
-    0x7f, 0xac, 0x5f, 0xfd, 0xae, 0x7d, 0xc2, 0xfb, 0xec, 0xc4, 0xb1, 0x52,
-    0x7d, 0xcc, 0x51, 0x7e, 0xf7, 0x7b, 0xbf, 0xd7, 0x38, 0x91, 0x7e, 0x88,
-    0x9b, 0xb8, 0x2c, 0x5f, 0xfe, 0xec, 0x07, 0x17, 0x7f, 0xce, 0x99, 0xee,
-    0x2c, 0x56, 0x8f, 0xe8, 0x8a, 0xaf, 0xd9, 0x9b, 0x66, 0xcb, 0x17, 0xe8,
-    0xa1, 0x3a, 0xd9, 0x62, 0xff, 0xc7, 0x10, 0x79, 0xad, 0x84, 0xc3, 0x58,
-    0xbf, 0x75, 0x66, 0xb3, 0xa9, 0x62, 0xb1, 0x1c, 0xa6, 0x90, 0xe8, 0xa4,
-    0xe5, 0x7f, 0x42, 0xbe, 0x3f, 0xd8, 0x6b, 0x17, 0xb1, 0xc0, 0xb1, 0x58,
-    0x6f, 0xfc, 0x47, 0x68, 0xc8, 0xde, 0x17, 0xb0, 0x5d, 0x61, 0xac, 0x6c,
-    0x35, 0xd7, 0x52, 0x78, 0xd6, 0x67, 0x30, 0xf7, 0x84, 0x2f, 0xc6, 0xfb,
-    0x93, 0xc2, 0x46, 0x9e, 0x6f, 0x58, 0xed, 0x77, 0x0f, 0x27, 0x26, 0x8f,
-    0x2a, 0x89, 0xff, 0x51, 0x8a, 0xfe, 0x38, 0x96, 0xc4, 0x95, 0x01, 0x47,
-    0x75, 0xc9, 0x6d, 0x9e, 0x85, 0x67, 0x49, 0x4e, 0x21, 0x43, 0x72, 0x38,
-    0x80, 0x38, 0xe5, 0xfa, 0xa1, 0x13, 0x50, 0x8c, 0x9e, 0xfc, 0x75, 0xef,
-    0xc7, 0x72, 0xfc, 0x34, 0xe2, 0x78, 0x4b, 0xfe, 0x97, 0xa6, 0x08, 0xd7,
-    0xca, 0x77, 0x77, 0x95, 0xa3, 0x9f, 0xab, 0xb9, 0x91, 0x62, 0xfe, 0xf2,
-    0xe1, 0x41, 0x62, 0x96, 0x2f, 0x87, 0xf9, 0x09, 0x62, 0xa4, 0xd8, 0x60,
-    0x65, 0xfd, 0xc9, 0x8a, 0x0f, 0x12, 0xc5, 0xa2, 0x58, 0xbf, 0x30, 0x1b,
-    0x37, 0x58, 0xbd, 0x2d, 0xe5, 0x8a, 0x93, 0xd7, 0x21, 0x3e, 0x14, 0x5f,
-    0xf7, 0xa4, 0x9c, 0x19, 0xdf, 0x96, 0x2f, 0xa3, 0x98, 0x80, 0xb1, 0x6d,
-    0xb0, 0xf7, 0x83, 0x39, 0xbf, 0x98, 0x81, 0xe9, 0x89, 0x62, 0xa4, 0xf5,
-    0xe3, 0x8a, 0x68, 0x09, 0xfa, 0x12, 0x47, 0x07, 0xfd, 0x08, 0x70, 0xe1,
-    0xc5, 0x76, 0x76, 0xb1, 0x7f, 0xba, 0x4e, 0xa1, 0xf6, 0x82, 0xc5, 0xe3,
-    0xb8, 0x16, 0x2f, 0x7d, 0xc2, 0x58, 0xbe, 0x6d, 0x6f, 0x19, 0x04, 0x44,
-    0xe0, 0xc7, 0x0d, 0xbc, 0x3b, 0x7f, 0xfa, 0x0d, 0xc8, 0xc2, 0x9c, 0xf4,
-    0xf7, 0x05, 0x8b, 0xc6, 0xbe, 0x96, 0x2e, 0x90, 0x2c, 0x5f, 0xf0, 0x01,
-    0x23, 0x13, 0x6a, 0x0b, 0x16, 0x02, 0xc5, 0xfb, 0x1c, 0x85, 0x05, 0x8a,
-    0xc3, 0x72, 0x21, 0x2b, 0xef, 0x7a, 0x4e, 0xb1, 0x79, 0xc7, 0x18, 0xe8,
-    0xeb, 0xf8, 0xf7, 0x05, 0xe3, 0x9c, 0xc3, 0x20, 0xbf, 0xf4, 0xc2, 0x30,
-    0x39, 0x08, 0x38, 0xb8, 0xb1, 0x67, 0xdd, 0x15, 0x00, 0x61, 0xa8, 0xc5,
-    0x67, 0xdb, 0x43, 0x79, 0xd5, 0xfd, 0x1f, 0x05, 0xba, 0x2c, 0x5f, 0xf9,
-    0xb7, 0x8c, 0x10, 0x1e, 0x19, 0x05, 0x8b, 0xff, 0xec, 0xf3, 0xfc, 0x5f,
-    0x67, 0xef, 0x92, 0x6a, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x0d, 0x4b,
-    0xff, 0xef, 0xb8, 0x4c, 0x5b, 0xea, 0x5e, 0x0d, 0xc5, 0x8b, 0xf0, 0xbc,
-    0x28, 0xa5, 0x62, 0xfc, 0x23, 0x7e, 0xd0, 0x58, 0xbc, 0xd9, 0xe5, 0x8b,
-    0x3c, 0x0f, 0x18, 0x65, 0x57, 0xdf, 0x7e, 0x8e, 0xb1, 0x77, 0x7c, 0x58,
-    0xac, 0x37, 0xa6, 0x92, 0x5a, 0x33, 0xae, 0xaa, 0x89, 0x36, 0x14, 0x1a,
-    0x1e, 0x28, 0xee, 0x6f, 0xf5, 0x06, 0x70, 0xf3, 0x25, 0xff, 0xfe, 0xe9,
-    0x25, 0xe8, 0xc6, 0xe8, 0xc3, 0xc1, 0xb1, 0xd8, 0x6b, 0x17, 0xed, 0x6e,
-    0xcd, 0xba, 0xa4, 0xa5, 0x2f, 0x60, 0x19, 0x62, 0xdb, 0xae, 0x41, 0xa2,
-    0x96, 0x29, 0x8d, 0x60, 0x08, 0x2e, 0x63, 0xac, 0x5a, 0x33, 0x11, 0x6d,
-    0xf3, 0x76, 0x48, 0x22, 0x0b, 0xef, 0x37, 0x60, 0x58, 0xbf, 0xfd, 0x9f,
-    0x70, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x2f, 0xf6, 0x7c, 0x9b, 0xde, 0x95,
-    0x8b, 0xc4, 0xd1, 0x8c, 0x8a, 0x0f, 0x12, 0x06, 0x95, 0x7a, 0x37, 0xeb,
-    0xb8, 0xd9, 0x62, 0xfc, 0xc7, 0xd9, 0xa3, 0xd6, 0x2f, 0xb7, 0x66, 0xdd,
-    0x52, 0x1f, 0x17, 0xed, 0xc8, 0x4c, 0x1a, 0xc5, 0xa5, 0x62, 0xa4, 0xdd,
-    0x8c, 0xaa, 0xfe, 0x73, 0x40, 0x79, 0x82, 0xc5, 0x69, 0x17, 0x67, 0x6c,
-    0x22, 0x0b, 0x88, 0xd5, 0x8b, 0xf7, 0xc2, 0x6d, 0x41, 0x62, 0xdc, 0xc3,
-    0xc2, 0x71, 0x8b, 0xfc, 0xfa, 0x31, 0xc7, 0x87, 0x58, 0xb9, 0xb4, 0xb1,
-    0x5f, 0x3c, 0xb6, 0x34, 0xbe, 0xcf, 0x3f, 0x58, 0xb1, 0x77, 0xc4, 0xb1,
-    0x7f, 0xc3, 0x17, 0xb9, 0x90, 0x7f, 0xac, 0x50, 0xcf, 0x49, 0xc6, 0x2e,
-    0xef, 0x8b, 0x16, 0x35, 0x62, 0xb0, 0xd6, 0x47, 0x0c, 0xdf, 0xf6, 0x74,
-    0x2c, 0xe0, 0x7a, 0x35, 0x62, 0xfe, 0x66, 0xdb, 0xd9, 0xba, 0xc5, 0xff,
-    0xb4, 0x0d, 0xfe, 0xf1, 0x14, 0x81, 0x62, 0xa2, 0x3f, 0x01, 0x17, 0xdf,
-    0xe8, 0x64, 0x7b, 0x10, 0x23, 0x65, 0x8b, 0xfc, 0x42, 0xdc, 0xf3, 0xad,
-    0xd6, 0x2f, 0x7a, 0x71, 0x62, 0xff, 0xef, 0x42, 0x4d, 0x32, 0x7d, 0xc9,
-    0x02, 0xc5, 0x8b, 0x0f, 0x8d, 0x87, 0x2e, 0x84, 0x64, 0x6e, 0xb9, 0x97,
-    0xb1, 0x7e, 0x43, 0x9f, 0xb7, 0x18, 0x9c, 0x4e, 0x42, 0xcf, 0x20, 0x4d,
-    0x22, 0x3e, 0x42, 0xb7, 0xc4, 0x62, 0x3b, 0x0e, 0x13, 0x35, 0xba, 0xef,
-    0x3b, 0x4e, 0x87, 0x5f, 0xff, 0xf7, 0x47, 0xe7, 0xf0, 0xd3, 0x5b, 0xd9,
-    0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0x9a, 0x7b, 0x82, 0xc5, 0xa3, 0x31, 0x11,
-    0x9c, 0x69, 0xbf, 0xb6, 0x9d, 0x69, 0xa0, 0xb1, 0x7d, 0xf9, 0x23, 0x56,
-    0x28, 0x8f, 0x4b, 0xc5, 0xf7, 0xf6, 0x98, 0x0d, 0x9a, 0x58, 0xbc, 0xde,
-    0x8e, 0x58, 0xbe, 0xd0, 0xb3, 0x65, 0x8b, 0xf8, 0xf9, 0xcc, 0x62, 0x58,
-    0xb8, 0xb6, 0x58, 0xa9, 0x3c, 0x41, 0x16, 0x5e, 0x62, 0x89, 0x62, 0xb1,
-    0x14, 0xdf, 0x68, 0x62, 0x1b, 0xfd, 0x30, 0x63, 0xb1, 0x01, 0x62, 0xfe,
-    0xcd, 0x78, 0xa7, 0xb5, 0x8b, 0xfb, 0xf2, 0xfd, 0x30, 0x6b, 0x17, 0xfe,
-    0x6d, 0xa7, 0xef, 0xa7, 0x93, 0xac, 0x5f, 0xe9, 0xd6, 0x17, 0xb3, 0xeb,
-    0x17, 0x64, 0x64, 0xaa, 0x41, 0x19, 0x09, 0xcb, 0x7f, 0x0c, 0x66, 0x2e,
-    0x01, 0x97, 0x8b, 0xa3, 0x8b, 0xc3, 0x3e, 0xa3, 0x55, 0xa9, 0x9e, 0x55,
-    0xf5, 0xf4, 0x67, 0x06, 0x35, 0x8a, 0x8c, 0x5c, 0x61, 0x99, 0xc0, 0xd3,
-    0x96, 0xdf, 0xff, 0xe1, 0x68, 0xd6, 0xe6, 0x0e, 0x7b, 0xe0, 0x7e, 0x35,
-    0xcd, 0x58, 0xbd, 0xc6, 0xe2, 0xc5, 0xf6, 0x68, 0x99, 0x62, 0xa4, 0xdf,
-    0x38, 0xed, 0x41, 0x18, 0x91, 0x42, 0x96, 0xfe, 0xd4, 0x5e, 0x7f, 0xca,
-    0xc5, 0xde, 0xd9, 0x62, 0xf0, 0x46, 0xee, 0xb1, 0x7e, 0xef, 0xb8, 0x67,
-    0x96, 0x29, 0xd1, 0x28, 0x45, 0xfc, 0x19, 0x11, 0x0d, 0xff, 0xe8, 0xd4,
-    0x68, 0x51, 0xfb, 0x0e, 0x36, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xf8, 0x4d,
-    0xa8, 0x16, 0x72, 0x74, 0xb1, 0x76, 0x0d, 0x62, 0xd1, 0xeb, 0x17, 0x79,
-    0xd6, 0x2a, 0x4d, 0x66, 0x0a, 0xdf, 0x6e, 0xcd, 0xba, 0xa4, 0xc7, 0x2f,
-    0xd3, 0xf2, 0x60, 0xd6, 0x2e, 0x16, 0x96, 0x28, 0x68, 0xd3, 0x89, 0x0f,
-    0x43, 0xe7, 0x31, 0x62, 0x8b, 0xfd, 0x8e, 0x5b, 0x7b, 0x3e, 0xb1, 0x73,
-    0xc7, 0x2c, 0x5f, 0x66, 0xc7, 0xf2, 0xc5, 0x7c, 0xdf, 0x10, 0xd5, 0xcd,
-    0xc5, 0x8b, 0xff, 0xa2, 0x7f, 0xf7, 0xe7, 0x9e, 0x83, 0x95, 0x8b, 0xfb,
-    0x60, 0xf5, 0xac, 0xd2, 0xc5, 0xde, 0x35, 0x62, 0xf1, 0xf9, 0x2b, 0x15,
-    0x04, 0x63, 0x76, 0x2e, 0xc9, 0x00, 0x31, 0x10, 0xcd, 0xff, 0x13, 0x1b,
-    0xf7, 0x92, 0xd9, 0x62, 0xff, 0xff, 0x61, 0x7b, 0x86, 0x70, 0x39, 0xd0,
-    0x23, 0x9f, 0xf9, 0xd1, 0x62, 0xfe, 0x2f, 0x68, 0x52, 0x75, 0x8b, 0xfb,
-    0xec, 0x43, 0x0f, 0xb5, 0x8b, 0xff, 0xe6, 0x34, 0xcf, 0x1b, 0x25, 0x0c,
-    0xfb, 0x9d, 0x62, 0x9d, 0x10, 0x44, 0x61, 0x52, 0x99, 0xcb, 0x34, 0x0a,
-    0x16, 0x17, 0xf0, 0x1b, 0xdc, 0x93, 0x56, 0x2f, 0x8d, 0x0c, 0xb7, 0x58,
-    0xb6, 0x2c, 0x51, 0xa6, 0xdf, 0xa1, 0x35, 0xfe, 0x7f, 0x4e, 0x8d, 0xfb,
-    0xac, 0x5f, 0xff, 0x43, 0x68, 0xd5, 0x31, 0xa6, 0xdb, 0xe8, 0xc3, 0x3f,
-    0x1c, 0xb1, 0x7f, 0xd9, 0xd2, 0x61, 0xdc, 0x33, 0xcb, 0x15, 0x89, 0xb0,
-    0x3b, 0x33, 0x12, 0x00, 0xd0, 0x99, 0xaf, 0xba, 0x07, 0x17, 0x16, 0x2e,
-    0x16, 0xeb, 0x15, 0x87, 0x83, 0xc2, 0x8b, 0x9e, 0x0b, 0x17, 0xfc, 0xda,
-    0x04, 0x76, 0x0d, 0xa2, 0x58, 0xbf, 0xd8, 0x5f, 0xcf, 0x48, 0xd6, 0x2f,
-    0xd9, 0xd3, 0xed, 0x05, 0x8a, 0x73, 0xdc, 0x23, 0x2a, 0x24, 0x5c, 0xfa,
-    0x13, 0x37, 0xf0, 0xfe, 0xfb, 0x86, 0x25, 0x8a, 0x1a, 0x65, 0x19, 0x0d,
-    0x07, 0x27, 0xbf, 0xe8, 0x3f, 0x83, 0xd4, 0xfe, 0x56, 0x2f, 0xff, 0xcf,
-    0xc0, 0xfb, 0x06, 0x74, 0x7f, 0x4e, 0x14, 0x16, 0x2f, 0xcf, 0xef, 0x3f,
-    0x96, 0x2f, 0xff, 0xc2, 0x26, 0x37, 0xc6, 0xc9, 0x43, 0x3e, 0xe7, 0x58,
-    0xbf, 0x3c, 0x40, 0x60, 0x2c, 0x5f, 0x6b, 0x59, 0x1c, 0xb1, 0x76, 0xfb,
-    0xac, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x51, 0x89, 0xd0, 0xc0, 0xeb, 0x16,
-    0x0e, 0x51, 0xf5, 0x66, 0x29, 0xe1, 0x30, 0x86, 0xaf, 0xc7, 0x79, 0xd4,
-    0x16, 0x2f, 0xd9, 0xe8, 0x67, 0x16, 0x29, 0xcf, 0x43, 0x85, 0x17, 0xf0,
-    0xf0, 0xef, 0xf9, 0x58, 0xbe, 0xd6, 0x64, 0x4b, 0x15, 0x27, 0xa1, 0x85,
-    0xb6, 0x8c, 0x96, 0x62, 0xb6, 0xd0, 0xbd, 0x81, 0xd8, 0xd9, 0x32, 0x31,
-    0x13, 0x52, 0xb7, 0x71, 0x78, 0x73, 0x44, 0x94, 0x78, 0xdc, 0xbf, 0x1c,
-    0xa3, 0x42, 0x20, 0xa3, 0x49, 0xe4, 0x7a, 0xbe, 0x86, 0x08, 0x6e, 0x37,
-    0xfe, 0x8d, 0x3f, 0x2e, 0x32, 0x91, 0x6e, 0xb1, 0x77, 0xb1, 0x62, 0xd1,
-    0xba, 0xc5, 0x75, 0xc3, 0xf2, 0xed, 0x11, 0xc5, 0xef, 0x3e, 0xa2, 0x58,
-    0xbe, 0x87, 0x84, 0x35, 0x8a, 0x34, 0xf0, 0xbb, 0x1e, 0xbf, 0xd9, 0xd1,
-    0xfb, 0xcc, 0xd9, 0x62, 0xff, 0xff, 0x60, 0x42, 0x62, 0xe9, 0xc0, 0xdb,
-    0x68, 0xa0, 0xe2, 0xeb, 0xd6, 0x2a, 0x36, 0x45, 0x17, 0xcd, 0xaf, 0xff,
-    0xff, 0xdf, 0xc6, 0x7e, 0x7f, 0x00, 0x67, 0x30, 0x78, 0x77, 0xee, 0x05,
-    0x26, 0x81, 0x62, 0xfe, 0x26, 0x0b, 0xd9, 0xf5, 0x8a, 0xeb, 0x11, 0x65,
-    0x14, 0x21, 0x2e, 0x39, 0xab, 0x15, 0xd6, 0x9e, 0x3c, 0x6a, 0x2e, 0xbd,
-    0xac, 0xdd, 0x62, 0xfb, 0x3e, 0xde, 0x58, 0xa1, 0x9e, 0x01, 0x0f, 0x5e,
-    0x8d, 0x7d, 0x60, 0x16, 0x2b, 0xad, 0x3c, 0xa8, 0xd4, 0x43, 0x7f, 0xd1,
-    0xbf, 0x5a, 0x2c, 0xd1, 0x48, 0x16, 0x2c, 0x35, 0x8a, 0xeb, 0x0f, 0x57,
-    0xae, 0x21, 0xdf, 0xee, 0xb3, 0xf8, 0x09, 0xd7, 0x16, 0x2f, 0xfb, 0xae,
-    0xc0, 0x09, 0x1f, 0xc5, 0xd4, 0xb1, 0x6e, 0xb1, 0x62, 0xba, 0xd3, 0xdc,
-    0xc4, 0x5b, 0xed, 0x6c, 0x20, 0x2c, 0x5f, 0xb7, 0x9f, 0x3f, 0x45, 0x8a,
-    0x93, 0xd0, 0xc2, 0x5b, 0xff, 0x60, 0x5c, 0xc7, 0xe7, 0xb2, 0x3d, 0x62,
-    0xbe, 0x7c, 0x44, 0x41, 0x7b, 0xe2, 0x1a, 0xc5, 0xcf, 0xba, 0xc5, 0xff,
-    0x9b, 0xb0, 0x37, 0x80, 0x19, 0x41, 0x62, 0xfc, 0xe3, 0x11, 0x62, 0xc5,
-    0xff, 0x70, 0xa6, 0x63, 0xf5, 0x27, 0x58, 0xbb, 0xae, 0xe3, 0x75, 0x8b,
-    0xff, 0x1f, 0x85, 0x33, 0xd9, 0xdc, 0x0b, 0x17, 0xec, 0x8b, 0xed, 0x1e,
-    0xb1, 0x7f, 0xc5, 0x3f, 0x67, 0xe3, 0xf4, 0x58, 0xb1, 0xcc, 0x4c, 0x0e,
-    0x37, 0x3b, 0x92, 0x42, 0x3f, 0x0c, 0xb2, 0xf9, 0xf9, 0xc9, 0x58, 0xac,
-    0x3f, 0x8f, 0xab, 0x5f, 0xe9, 0x3b, 0x7a, 0x74, 0x05, 0x8b, 0xfb, 0x21,
-    0x0d, 0x0b, 0xad, 0x58, 0xad, 0x95, 0x35, 0xc1, 0x04, 0x71, 0xd1, 0x7c,
-    0x84, 0x8c, 0xef, 0xf4, 0x4f, 0xee, 0x39, 0x44, 0xb1, 0x74, 0x8d, 0x62,
-    0xa4, 0xf3, 0x3e, 0x6b, 0x7f, 0x8a, 0x67, 0xb3, 0xb8, 0x16, 0x2f, 0xcc,
-    0x33, 0xc9, 0xab, 0x15, 0xc3, 0xdc, 0x11, 0x9d, 0xff, 0xd2, 0x0f, 0xc7,
-    0xb9, 0xfd, 0xc6, 0xed, 0x62, 0xff, 0xa7, 0x4c, 0x72, 0xce, 0xfc, 0xb1,
-    0x5b, 0xa2, 0x08, 0xe9, 0x37, 0x66, 0xcb, 0x17, 0x0e, 0x56, 0x28, 0x33,
-    0x5f, 0xd4, 0x31, 0x4e, 0x7f, 0x02, 0x53, 0xbf, 0xf9, 0x88, 0x59, 0xf7,
-    0x6d, 0x8a, 0x56, 0x2f, 0xfd, 0xf7, 0x30, 0x3d, 0xcb, 0x3f, 0x8b, 0x17,
-    0xf0, 0x38, 0xde, 0xf3, 0x2c, 0x51, 0xa7, 0xde, 0xc8, 0x37, 0xfb, 0x93,
-    0x11, 0xe7, 0xdc, 0x58, 0xb6, 0xeb, 0x17, 0xb3, 0xee, 0xb1, 0x47, 0x35,
-    0xfc, 0x13, 0xbf, 0xe6, 0x1b, 0xf7, 0x0f, 0x3e, 0x96, 0x2f, 0xfb, 0x40,
-    0x2c, 0x8a, 0x0f, 0x12, 0xc5, 0xfe, 0x3f, 0x1e, 0x3b, 0x35, 0x2b, 0x17,
-    0xfe, 0xd9, 0xf7, 0xfb, 0x8c, 0x78, 0x12, 0xc5, 0x4a, 0x2c, 0xf0, 0xed,
-    0xcd, 0xa8, 0x6b, 0xf1, 0x98, 0x43, 0xb8, 0xf3, 0xca, 0x83, 0xd4, 0x27,
-    0x8e, 0xfb, 0xf8, 0xc7, 0x00, 0x42, 0x50, 0xb1, 0xe1, 0x17, 0x99, 0x3a,
-    0x10, 0xf5, 0x43, 0xb6, 0xfd, 0xf7, 0x92, 0xf2, 0xc5, 0xa3, 0xd6, 0x2f,
-    0xec, 0x26, 0xee, 0x1c, 0x58, 0xbd, 0xb6, 0xa5, 0x62, 0xfa, 0x3f, 0x8d,
-    0xd1, 0x62, 0xff, 0xd8, 0x40, 0x8e, 0xc8, 0xe7, 0x2f, 0x2c, 0x56, 0x1f,
-    0x5f, 0x0a, 0x2b, 0x48, 0xd8, 0x62, 0xee, 0x42, 0x26, 0x89, 0x32, 0x10,
-    0xa1, 0xdb, 0x71, 0x1a, 0xb1, 0x7e, 0xfb, 0xc9, 0x6c, 0xb1, 0x7f, 0x42,
-    0x4e, 0xc5, 0x2b, 0x15, 0xd9, 0xea, 0x68, 0xa2, 0xc1, 0x2c, 0x58, 0x6b,
-    0x15, 0xb1, 0xa5, 0xc1, 0x3a, 0x1a, 0xa4, 0x6c, 0x8d, 0x21, 0x8a, 0x44,
-    0xd9, 0xd1, 0x22, 0xfd, 0xf6, 0x3c, 0x92, 0xc5, 0xf7, 0x3e, 0xe1, 0x2c,
-    0x5f, 0xfd, 0x14, 0x7b, 0xed, 0xfc, 0x88, 0xb0, 0x25, 0x8b, 0xf3, 0x6a,
-    0x39, 0xbe, 0xb1, 0x7b, 0xe2, 0x35, 0x62, 0xfa, 0x7c, 0xfd, 0x16, 0x2a,
-    0x4f, 0x0f, 0x83, 0xf5, 0xba, 0x23, 0xfc, 0xdd, 0x77, 0xfe, 0xb1, 0x7e,
-    0x90, 0xbd, 0x9f, 0x58, 0xb8, 0x3c, 0x58, 0xba, 0x3c, 0xeb, 0x17, 0xc3,
-    0xce, 0xfc, 0xb1, 0x52, 0x7a, 0xfd, 0x8c, 0x38, 0xdd, 0x18, 0xa8, 0x3f,
-    0x09, 0xcd, 0x24, 0x78, 0x6d, 0x75, 0xe4, 0x84, 0x31, 0xc8, 0x40, 0x5f,
-    0xf4, 0x69, 0xad, 0xbc, 0x53, 0x1a, 0x76, 0xb1, 0x7f, 0x14, 0x82, 0x1b,
-    0xec, 0xb1, 0x7f, 0xf4, 0xcf, 0x57, 0xf1, 0x87, 0x98, 0x75, 0x8b, 0xbd,
-    0xc8, 0x8f, 0xd7, 0xe6, 0x16, 0xdd, 0x62, 0xf0, 0x23, 0x7f, 0xac, 0x57,
-    0x5d, 0x9b, 0x6e, 0x09, 0xdf, 0xda, 0xdb, 0x7f, 0xb4, 0x7a, 0xc5, 0xf0,
-    0xb9, 0xfc, 0x58, 0xbf, 0xdf, 0x9d, 0xfe, 0x26, 0x0d, 0x62, 0xfe, 0x67,
-    0xef, 0x92, 0x6a, 0xc5, 0xe7, 0xf8, 0x86, 0x7c, 0xbf, 0x36, 0xad, 0x26,
-    0x2e, 0xc5, 0x04, 0x69, 0xe8, 0x44, 0x5f, 0xfe, 0xce, 0xac, 0xdf, 0xdd,
-    0xc3, 0x08, 0x0c, 0xb1, 0x7f, 0xff, 0xf3, 0x97, 0x4c, 0x19, 0x33, 0x74,
-    0xc8, 0xff, 0x47, 0xbf, 0x8a, 0x40, 0xb1, 0x79, 0xc4, 0x05, 0x8b, 0xff,
-    0xd9, 0xd1, 0xb3, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x6e, 0xe3, 0xd1, 0xc1,
-    0x13, 0xc1, 0x0e, 0xde, 0x3b, 0xe9, 0x62, 0xb0, 0xf5, 0xc0, 0x75, 0x7b,
-    0x18, 0x96, 0x2f, 0x7e, 0x62, 0x58, 0xb9, 0xfc, 0xe6, 0xe5, 0x86, 0xee,
-    0x80, 0xd6, 0x2f, 0xf6, 0xc2, 0x1f, 0xf3, 0xa7, 0x16, 0x2f, 0xfe, 0xc0,
-    0xb8, 0x59, 0x14, 0x04, 0x5e, 0x58, 0xbe, 0x84, 0x7b, 0x9d, 0x62, 0xfb,
-    0x8c, 0xd1, 0xeb, 0x17, 0xdf, 0xfc, 0xc7, 0xac, 0x5f, 0xb3, 0xf1, 0xee,
-    0x4c, 0x7e, 0x3e, 0x26, 0x0c, 0x96, 0xb6, 0x4c, 0xf0, 0x8e, 0x3a, 0x42,
-    0xde, 0xff, 0xfd, 0xbe, 0x74, 0x7d, 0x47, 0x36, 0xd1, 0xda, 0xcf, 0xf1,
-    0x62, 0xb1, 0x13, 0x0c, 0x71, 0x7e, 0x88, 0xef, 0xae, 0x2c, 0x5f, 0xf7,
-    0xdf, 0xdd, 0xc1, 0xfd, 0xc5, 0x8b, 0xff, 0xff, 0xba, 0x8b, 0x1b, 0xa1,
-    0x67, 0x4f, 0xe1, 0x63, 0xe9, 0xbb, 0x87, 0x16, 0x37, 0x37, 0x77, 0xfb,
-    0x36, 0x67, 0xdf, 0x09, 0x62, 0xb1, 0x17, 0x5d, 0x21, 0x0f, 0x7f, 0xd3,
-    0xdf, 0xb6, 0x9e, 0xf0, 0x96, 0x2f, 0xcc, 0xfb, 0xe1, 0x2c, 0x5f, 0x3e,
-    0xf8, 0x4b, 0x16, 0xe1, 0x87, 0x92, 0xc4, 0xf7, 0xff, 0xfd, 0xdf, 0xe7,
-    0xa4, 0x58, 0xdd, 0xf3, 0x1c, 0xb6, 0xcc, 0xea, 0x58, 0xa9, 0x44, 0xab,
-    0x14, 0x5f, 0xfe, 0xfc, 0xf7, 0x9b, 0x10, 0x85, 0xe9, 0xfa, 0xc5, 0xff,
-    0x3e, 0xff, 0x7f, 0x71, 0xbb, 0x58, 0xbe, 0xc1, 0xe7, 0xf7, 0x44, 0x3f,
-    0xd3, 0x2b, 0x15, 0x12, 0x39, 0x4e, 0xa3, 0x19, 0x28, 0x54, 0x5f, 0xed,
-    0xdc, 0x2c, 0x89, 0xa3, 0xd6, 0x2b, 0x48, 0x80, 0xfa, 0x3d, 0xff, 0xff,
-    0x8b, 0x0e, 0x42, 0x01, 0xb1, 0xee, 0x43, 0xcd, 0x82, 0x13, 0x6c, 0xb1,
-    0x5d, 0x62, 0xe2, 0xc4, 0xcb, 0xc3, 0xc2, 0x3b, 0xff, 0xfd, 0x21, 0x7f,
-    0x34, 0xc7, 0xcf, 0x7f, 0x30, 0xf9, 0xba, 0xc5, 0xff, 0xee, 0x6e, 0xcd,
-    0xd3, 0x58, 0xff, 0x91, 0xac, 0x5f, 0xfe, 0xce, 0xa2, 0xce, 0x85, 0x80,
-    0x3c, 0xc1, 0x62, 0xb7, 0x44, 0xcc, 0x49, 0x95, 0x29, 0x8f, 0xe4, 0x3e,
-    0xaf, 0xe2, 0xcf, 0x73, 0x02, 0x58, 0xbf, 0x04, 0xc4, 0x52, 0xb1, 0x61,
-    0x2c, 0x5a, 0x06, 0x1b, 0x9e, 0x13, 0xd9, 0xbb, 0x44, 0x7e, 0x99, 0xea,
-    0x34, 0x66, 0x90, 0xcc, 0x2e, 0xf2, 0x37, 0xcd, 0xd0, 0x5e, 0x38, 0x58,
-    0xf5, 0xa8, 0x8a, 0xb5, 0x1f, 0x67, 0xe7, 0x1e, 0x4a, 0x35, 0xc1, 0x42,
-    0xda, 0xee, 0xf8, 0xb1, 0x7b, 0x42, 0x82, 0xc5, 0xbf, 0x26, 0xdd, 0xc6,
-    0x6f, 0xfb, 0x67, 0xfc, 0x4d, 0x07, 0xfa, 0xc5, 0xfc, 0x02, 0xcd, 0x83,
-    0x82, 0xc5, 0xf0, 0x23, 0x85, 0xe5, 0x8a, 0xc3, 0xd7, 0xd1, 0x85, 0xc1,
-    0x9d, 0x62, 0xfc, 0xe3, 0xfe, 0x71, 0x62, 0xdd, 0x0c, 0x3c, 0x1f, 0x8c,
-    0xdf, 0xff, 0xf0, 0x85, 0xd9, 0x67, 0x43, 0x07, 0x9e, 0x86, 0x7f, 0xed,
-    0x05, 0x8b, 0xfe, 0x3f, 0x3f, 0x9e, 0x29, 0x3a, 0xc5, 0xe2, 0xce, 0x12,
-    0x29, 0x23, 0x9a, 0xe9, 0x93, 0x04, 0xe9, 0x0c, 0xfb, 0xff, 0xda, 0xd4,
-    0xed, 0x81, 0x77, 0x0f, 0x08, 0x6b, 0x17, 0xd9, 0x84, 0x6a, 0xc5, 0xff,
-    0x9c, 0xdc, 0x83, 0xb7, 0x4f, 0xba, 0xc5, 0x3a, 0x2c, 0x74, 0x9f, 0xf2,
-    0x2b, 0xff, 0x6e, 0xfa, 0xd6, 0x7a, 0x19, 0xc5, 0x8a, 0x93, 0xef, 0xc2,
-    0xfb, 0xf3, 0x1b, 0x1c, 0xe6, 0xac, 0x54, 0xaa, 0xfd, 0x78, 0xd9, 0xbf,
-    0x1a, 0x51, 0x10, 0x5f, 0xe2, 0xf4, 0x6c, 0xde, 0x14, 0xac, 0x5f, 0xff,
-    0xd9, 0xd0, 0xb0, 0x7f, 0x9e, 0x93, 0xa7, 0xf7, 0xa5, 0x62, 0xfb, 0x98,
-    0x46, 0xac, 0x5f, 0x67, 0x7e, 0x65, 0x8b, 0x43, 0xb3, 0xc6, 0x22, 0x3b,
-    0xf8, 0x7e, 0x35, 0xc8, 0x6b, 0x15, 0x29, 0x99, 0x68, 0xe1, 0xa1, 0x46,
-    0x22, 0x8b, 0xe3, 0xb8, 0x5c, 0x58, 0xbf, 0xcd, 0xb7, 0xb8, 0xcd, 0x1e,
-    0xb1, 0x5b, 0x1e, 0xdf, 0x42, 0x4b, 0xfb, 0xef, 0x13, 0x34, 0x16, 0x2e,
-    0x3c, 0x16, 0x2e, 0x7d, 0x6e, 0x78, 0xc1, 0x97, 0x5f, 0xfa, 0x4f, 0xbf,
-    0xdf, 0xd9, 0x87, 0x58, 0xbe, 0xe1, 0xdc, 0x0b, 0x15, 0xf3, 0xe2, 0x01,
-    0xfd, 0xff, 0xce, 0x5b, 0x66, 0xf3, 0xd0, 0x53, 0xc5, 0x8b, 0xed, 0x6d,
-    0x26, 0xac, 0x59, 0xd6, 0x2e, 0x63, 0x70, 0xdb, 0x78, 0x96, 0xa5, 0x19,
-    0x63, 0x22, 0x27, 0xdb, 0xfd, 0x9b, 0xcc, 0x7e, 0xcc, 0x4b, 0x17, 0xf8,
-    0xa6, 0x63, 0xf5, 0x27, 0x58, 0xbf, 0xc5, 0xbb, 0x79, 0x8d, 0x30, 0x8f,
-    0xb3, 0x86, 0xf7, 0xff, 0xb3, 0x80, 0x92, 0xf0, 0xff, 0x25, 0xb2, 0xc5,
-    0x4a, 0x25, 0x74, 0x97, 0x7f, 0xf8, 0xb3, 0xe1, 0xf3, 0x82, 0x3f, 0x1b,
-    0xb5, 0x8b, 0xe0, 0x63, 0xb2, 0xc5, 0xe0, 0x38, 0x6b, 0x17, 0xf6, 0x16,
-    0x74, 0x7d, 0x2c, 0x5f, 0xff, 0x9c, 0xe3, 0x9f, 0xe7, 0x48, 0xf7, 0x21,
-    0xe6, 0xcb, 0x17, 0xe9, 0x2f, 0x71, 0xf7, 0x44, 0x47, 0xcb, 0xaf, 0xba,
-    0xa7, 0xfc, 0x58, 0xa3, 0x53, 0x9b, 0xdc, 0x89, 0x93, 0x40, 0x43, 0xe8,
-    0x53, 0x75, 0x1f, 0xdf, 0xf3, 0x6b, 0x6f, 0xbe, 0x6a, 0x25, 0x8b, 0xff,
-    0x99, 0x88, 0x1c, 0xc8, 0xf8, 0x99, 0x96, 0x2f, 0xa6, 0x19, 0xc5, 0x8b,
-    0xff, 0xff, 0xf9, 0xff, 0x1e, 0xe5, 0x9e, 0xf4, 0xec, 0x32, 0x99, 0x07,
-    0xa1, 0x84, 0x4d, 0x05, 0x8b, 0xfe, 0xcf, 0x61, 0xdb, 0x4f, 0x12, 0xc5,
-    0x62, 0x30, 0x4a, 0x11, 0x15, 0xba, 0x71, 0x51, 0x1d, 0xfd, 0x1b, 0xd0,
-    0xe3, 0xbf, 0x85, 0xd7, 0x94, 0xfb, 0x8b, 0x17, 0xe1, 0xeb, 0x4e, 0x75,
-    0x8a, 0x93, 0xdc, 0x0c, 0xce, 0xfd, 0x0e, 0x6d, 0x81, 0x2c, 0x58, 0x96,
-    0x2f, 0xfe, 0x39, 0x31, 0xbc, 0x71, 0x73, 0x23, 0xd6, 0x2b, 0x0f, 0x65,
-    0xc4, 0x6f, 0xdd, 0xc0, 0x4d, 0xe5, 0x8b, 0x48, 0xcf, 0x2b, 0xc4, 0x17,
-    0xb3, 0x5b, 0x2c, 0x5e, 0x62, 0x89, 0x62, 0xbe, 0x6e, 0xd8, 0x7a, 0xf3,
-    0x36, 0xea, 0x93, 0x40, 0xbf, 0xff, 0xd8, 0x39, 0xdd, 0xcb, 0x6e, 0x6f,
-    0xf7, 0x18, 0xf0, 0x96, 0x2f, 0xcd, 0xad, 0xb0, 0x25, 0x8b, 0xcc, 0x17,
-    0x51, 0x88, 0x8c, 0xdd, 0x8a, 0xfe, 0x04, 0x94, 0xfb, 0x8b, 0x17, 0xb5,
-    0x3e, 0x58, 0xbf, 0xa4, 0x5e, 0x27, 0xe8, 0xb1, 0x7f, 0x7b, 0x98, 0x6b,
-    0xea, 0x23, 0xcc, 0xd0, 0xed, 0x4a, 0xaf, 0xfd, 0xa1, 0x9c, 0x36, 0x2d,
-    0xc8, 0x35, 0x0b, 0x60, 0x1d, 0x06, 0xf3, 0x7e, 0xdf, 0x9e, 0xcd, 0x2c,
-    0x5f, 0xde, 0x33, 0x0d, 0x7d, 0x2c, 0x5e, 0x83, 0x81, 0x62, 0xfe, 0x9e,
-    0xe0, 0x3d, 0x32, 0xc5, 0xfd, 0x26, 0xc7, 0xb8, 0x86, 0xb1, 0x6e, 0xc0,
-    0x7c, 0x3e, 0x2f, 0xbf, 0x9f, 0xdf, 0x62, 0x35, 0x62, 0xa5, 0x32, 0xf7,
-    0x2a, 0x88, 0xc1, 0x9f, 0xb8, 0x53, 0x7d, 0xf2, 0x68, 0xf5, 0x8b, 0xc2,
-    0x16, 0x96, 0x2f, 0x14, 0xe9, 0x62, 0xed, 0x45, 0x11, 0xba, 0xe0, 0xf5,
-    0xff, 0xfe, 0xe3, 0x17, 0xe7, 0xa7, 0xf3, 0xd8, 0xc5, 0xbe, 0x0d, 0x62,
-    0xfd, 0x99, 0xec, 0x3a, 0xc5, 0xff, 0xfe, 0x79, 0xf3, 0xfe, 0x79, 0xfc,
-    0xe6, 0xb3, 0x7c, 0xf2, 0xc5, 0xff, 0xd2, 0x0e, 0x16, 0x47, 0x8e, 0x7d,
-    0xc5, 0x8b, 0x37, 0xd1, 0x9c, 0x44, 0xfc, 0x60, 0xa9, 0x4d, 0x8f, 0xf1,
-    0x97, 0xdf, 0xfd, 0x3b, 0xc9, 0xf3, 0x5a, 0x60, 0xba, 0x96, 0x2b, 0x47,
-    0xe5, 0xd4, 0x53, 0x7f, 0x6c, 0x64, 0x50, 0x9d, 0x96, 0x2f, 0xec, 0xe9,
-    0x30, 0x9d, 0x2c, 0x5f, 0xbc, 0xc6, 0xfd, 0xd6, 0x2a, 0x55, 0x89, 0xe2,
-    0xfb, 0xca, 0x04, 0x62, 0x52, 0x33, 0x11, 0x7d, 0xf8, 0x73, 0x13, 0x9d,
-    0x62, 0xff, 0x40, 0xcf, 0xe6, 0x16, 0xeb, 0x17, 0xf0, 0x45, 0x9b, 0x07,
-    0x05, 0x8b, 0xe0, 0xe3, 0xb3, 0x8b, 0x17, 0xf0, 0x85, 0xee, 0x34, 0x4b,
-    0x17, 0xff, 0x73, 0x0d, 0x2c, 0xd9, 0xbd, 0x13, 0x2c, 0x5d, 0xee, 0x18,
-    0x89, 0xd3, 0x93, 0xf8, 0xc2, 0xfd, 0x9c, 0xf6, 0x6e, 0xb1, 0x7e, 0x1e,
-    0x01, 0xa5, 0x62, 0xff, 0xff, 0xcd, 0xa8, 0x71, 0xc7, 0x9a, 0xd9, 0xf9,
-    0xf6, 0x07, 0x30, 0x96, 0x2a, 0x08, 0xbc, 0xc2, 0x9e, 0x13, 0xd4, 0xaa,
-    0x2b, 0x73, 0x56, 0x86, 0x70, 0xa1, 0xf3, 0x7e, 0xd8, 0xec, 0xc4, 0xb1,
-    0x7f, 0xdd, 0xfe, 0x7a, 0x7f, 0xb6, 0x8f, 0x58, 0xbf, 0xff, 0xfe, 0x34,
-    0x98, 0xf3, 0xec, 0x3e, 0x0f, 0x23, 0xfc, 0x58, 0x00, 0x4c, 0x5e, 0x58,
-    0xbf, 0xdd, 0x3f, 0x85, 0xb3, 0xf1, 0x62, 0xff, 0x03, 0x1f, 0x9c, 0x90,
-    0x2c, 0x54, 0x9f, 0x4b, 0x1b, 0x54, 0xa6, 0xe5, 0x85, 0x0c, 0x83, 0xc8,
-    0x74, 0xdf, 0xf8, 0x71, 0xd9, 0xc1, 0xfd, 0xf5, 0xb2, 0xc5, 0xff, 0xf6,
-    0x05, 0xe3, 0xce, 0x7b, 0xf9, 0x85, 0xba, 0xc5, 0xff, 0x74, 0x3b, 0x0f,
-    0x30, 0x8d, 0x58, 0xa9, 0x46, 0x7f, 0xd1, 0x19, 0x42, 0xfe, 0xe9, 0xac,
-    0xf3, 0x76, 0xb1, 0x7f, 0xbb, 0xfe, 0x6e, 0x59, 0xb2, 0xc5, 0xee, 0xb3,
-    0xad, 0x8d, 0x16, 0x2f, 0xb0, 0xa0, 0xeb, 0x17, 0xff, 0x66, 0xb4, 0xd0,
-    0x0c, 0x9b, 0xdc, 0x58, 0xa9, 0x3e, 0x68, 0x10, 0xd6, 0x91, 0x69, 0xe8,
-    0x49, 0xdf, 0xed, 0x00, 0x59, 0x14, 0x9d, 0x62, 0xa5, 0x34, 0x77, 0x87,
-    0x53, 0x14, 0x5f, 0xfe, 0x16, 0xb3, 0xa1, 0x8f, 0x9a, 0xd4, 0xf4, 0x58,
-    0xbf, 0xfb, 0x7f, 0xbc, 0x44, 0xc1, 0x67, 0x7e, 0x58, 0xbf, 0xbf, 0x3e,
-    0xfc, 0xc4, 0xb1, 0x58, 0x7e, 0xf1, 0x24, 0x54, 0xb7, 0xa7, 0x9b, 0x12,
-    0xc2, 0x5c, 0x78, 0xe3, 0x7a, 0xc8, 0x4e, 0x1a, 0xd7, 0xbc, 0x6b, 0x8f,
-    0x2b, 0x2a, 0x3e, 0x3e, 0xb8, 0xa1, 0x43, 0xa9, 0x64, 0x27, 0x8e, 0x87,
-    0xf2, 0xd7, 0x19, 0x6c, 0xa5, 0x2a, 0x72, 0x3b, 0x8f, 0x46, 0x1e, 0x22,
-    0xee, 0x91, 0xbc, 0x04, 0x66, 0x1c, 0x31, 0xaf, 0xff, 0x49, 0x6e, 0x3f,
-    0xcf, 0x7f, 0x9e, 0x98, 0xb1, 0x7f, 0xff, 0xf9, 0xfe, 0x22, 0x66, 0xe9,
-    0xbf, 0xdf, 0xd8, 0x7e, 0x3e, 0x10, 0x19, 0x62, 0xff, 0x88, 0x7c, 0x61,
-    0xb7, 0x64, 0xb1, 0x7f, 0xfd, 0xdc, 0x0a, 0x58, 0x6f, 0xbe, 0x7d, 0xbc,
-    0xb1, 0x50, 0x4c, 0x03, 0x1d, 0xdc, 0xe6, 0xff, 0xe6, 0xd6, 0x0f, 0xec,
-    0x70, 0xe4, 0x96, 0x2c, 0x05, 0x8b, 0xc3, 0xfc, 0xac, 0x5f, 0x67, 0x7e,
-    0x65, 0x8b, 0x70, 0xc3, 0xc0, 0x21, 0xda, 0xd1, 0xfd, 0x79, 0x4a, 0x99,
-    0x1c, 0x02, 0x85, 0xf5, 0xb1, 0x62, 0xff, 0xf0, 0xff, 0x32, 0xfe, 0xe3,
-    0x97, 0x70, 0x58, 0xb0, 0x86, 0x7b, 0x64, 0x23, 0x76, 0x1d, 0x62, 0xff,
-    0xf8, 0xd7, 0xd6, 0x77, 0xef, 0xb8, 0x72, 0x39, 0x58, 0xb9, 0x89, 0x62,
-    0xf3, 0x96, 0x2c, 0x5f, 0xfb, 0x9f, 0x93, 0xfb, 0x84, 0xdd, 0xec, 0x6c,
-    0x60, 0x2d, 0x7f, 0xee, 0xfa, 0x7e, 0x3d, 0xfc, 0x52, 0x75, 0x8a, 0xc4,
-    0xc7, 0xbb, 0x84, 0x1b, 0x2b, 0x5d, 0xb3, 0xac, 0x5f, 0xc1, 0x6d, 0x81,
-    0x60, 0xd6, 0x2a, 0x4f, 0x27, 0x06, 0x2a, 0x57, 0x36, 0x32, 0x34, 0xd3,
-    0x63, 0x0f, 0x78, 0x41, 0x68, 0x9d, 0xa3, 0x35, 0x27, 0xeb, 0xfa, 0x2f,
-    0xc8, 0x4c, 0x4b, 0x17, 0xe8, 0xa1, 0x3a, 0xd9, 0x62, 0xfe, 0xcd, 0x69,
-    0x82, 0xea, 0x58, 0xa9, 0x44, 0x66, 0xc5, 0xe7, 0x2b, 0xbf, 0xff, 0x05,
-    0xf2, 0x66, 0xef, 0xc2, 0x6f, 0xbe, 0x12, 0xc5, 0xff, 0xff, 0x6b, 0x06,
-    0x4c, 0xdd, 0x39, 0x91, 0xfe, 0x2c, 0xcd, 0x44, 0xb1, 0x7e, 0x2f, 0x18,
-    0x7d, 0x96, 0x2f, 0x84, 0x76, 0xf2, 0xc5, 0xff, 0xf9, 0xf6, 0x2c, 0xe9,
-    0xf7, 0xf7, 0x70, 0x92, 0x89, 0x62, 0xa5, 0x14, 0xe3, 0x2b, 0xf9, 0x1d,
-    0xff, 0xff, 0x9f, 0x4f, 0x9d, 0x33, 0x6c, 0x7f, 0x49, 0xc9, 0x8d, 0xfb,
-    0xac, 0x5f, 0xfd, 0x09, 0x68, 0x18, 0xf1, 0x3e, 0x12, 0xc5, 0xf7, 0x8d,
-    0x7d, 0xd6, 0x2f, 0xff, 0xf6, 0xa7, 0xdc, 0x8a, 0x3d, 0xc7, 0xfc, 0xf1,
-    0x48, 0x5d, 0x4b, 0x17, 0xff, 0xf9, 0xe4, 0xbd, 0xa9, 0xfb, 0x70, 0xb0,
-    0x1c, 0xf3, 0xac, 0x5f, 0xf3, 0xfa, 0x4e, 0xfe, 0x14, 0xac, 0x5f, 0xe9,
-    0x81, 0x91, 0x47, 0xb9, 0x2c, 0x5b, 0x38, 0x7e, 0x1e, 0x38, 0xbf, 0xf0,
-    0x9b, 0xbe, 0x16, 0x74, 0x68, 0x2c, 0x5f, 0xf4, 0x45, 0x27, 0xfc, 0xf4,
-    0x3a, 0xc5, 0xff, 0xe8, 0x3e, 0x80, 0xde, 0xc8, 0xa0, 0xfe, 0x58, 0xbf,
-    0x79, 0xe3, 0xb3, 0x65, 0x8b, 0xdd, 0x64, 0x6f, 0xd6, 0x2c, 0x5f, 0xfd,
-    0x81, 0x18, 0xde, 0x2c, 0xd9, 0x89, 0x62, 0xd2, 0xb1, 0x7f, 0xb9, 0x9f,
-    0x7e, 0x0b, 0x65, 0x8b, 0xe7, 0x8e, 0xcd, 0x96, 0x2e, 0x6e, 0xcc, 0x4c,
-    0x2a, 0x35, 0x16, 0x6c, 0x5a, 0x34, 0x5e, 0x08, 0xf8, 0xd6, 0xe6, 0xed,
-    0x62, 0xb1, 0x50, 0xaf, 0x67, 0x9c, 0x8d, 0x57, 0xcd, 0x96, 0x71, 0xae,
-    0x7e, 0xee, 0x5f, 0xdb, 0x64, 0x48, 0x9a, 0x25, 0xfb, 0x49, 0x43, 0x3b,
-    0x84, 0xfe, 0x94, 0xad, 0x7f, 0xdf, 0x7f, 0x71, 0xbb, 0x00, 0x4b, 0x17,
-    0x86, 0xdb, 0x2c, 0x56, 0xe7, 0xb4, 0x19, 0xe5, 0xd8, 0x05, 0x8b, 0x6b,
-    0x63, 0x76, 0x02, 0x4b, 0xff, 0xee, 0xa3, 0xcc, 0x94, 0x46, 0x14, 0x9f,
-    0x58, 0xb1, 0x7f, 0xfb, 0x6d, 0x3f, 0xb6, 0x16, 0xa1, 0xc8, 0xf7, 0x58,
-    0xa6, 0x45, 0x20, 0x94, 0xea, 0x59, 0x15, 0x58, 0x60, 0xea, 0xbf, 0x9e,
-    0x0e, 0x68, 0xca, 0x4a, 0x19, 0x97, 0xfd, 0x81, 0xb3, 0x76, 0xcc, 0x12,
-    0xc5, 0xfb, 0xd8, 0x4d, 0x12, 0xc5, 0xff, 0xe6, 0xdb, 0xf8, 0x3f, 0xbb,
-    0xc7, 0x4f, 0x96, 0x2b, 0x0f, 0xd7, 0x85, 0x17, 0xf6, 0x9f, 0x72, 0x9f,
-    0xac, 0x5f, 0xf0, 0x9b, 0xcd, 0x06, 0xee, 0x0b, 0x17, 0xff, 0x19, 0xcd,
-    0xfe, 0xe1, 0x61, 0xb3, 0xc5, 0x8b, 0xfa, 0x11, 0x7d, 0xfb, 0xf2, 0xc5,
-    0xf0, 0x79, 0xdf, 0x96, 0x2a, 0x4f, 0x59, 0x8c, 0x6e, 0xd7, 0x16, 0x2a,
-    0x55, 0x07, 0xc2, 0x15, 0xf8, 0x43, 0xb9, 0x77, 0xce, 0xb9, 0x09, 0xf8,
-    0xe2, 0x0b, 0xfc, 0xe3, 0xc3, 0x99, 0x83, 0x58, 0xbf, 0x14, 0x3f, 0x3e,
-    0x58, 0xb7, 0x16, 0x2b, 0x0d, 0xd3, 0x14, 0x5f, 0xe0, 0xb9, 0xe2, 0xcc,
-    0xdd, 0x62, 0xfc, 0xe1, 0x46, 0xfd, 0x6c, 0x6e, 0xb1, 0x7f, 0xfc, 0x2d,
-    0x6a, 0x4b, 0x0d, 0x7f, 0xff, 0x03, 0x58, 0xb7, 0x5e, 0xb1, 0x5a, 0x3e,
-    0x81, 0x28, 0xdf, 0x4e, 0xa6, 0x25, 0x8b, 0xfd, 0x26, 0x04, 0xc4, 0x52,
-    0xb1, 0x78, 0xa4, 0xeb, 0x16, 0x95, 0x8a, 0x88, 0xd6, 0x9c, 0x72, 0xff,
-    0x1c, 0x45, 0xee, 0x0b, 0x4b, 0x15, 0x05, 0x4b, 0xe3, 0x6e, 0xc1, 0xf3,
-    0x4d, 0x75, 0x0a, 0x13, 0x91, 0x00, 0x8c, 0x98, 0x23, 0x88, 0xaf, 0xdf,
-    0x63, 0xc9, 0x2c, 0x5f, 0x75, 0x7e, 0x49, 0x62, 0xda, 0x58, 0xbd, 0xac,
-    0xc5, 0x8a, 0xd8, 0xf4, 0xc0, 0x4b, 0xd4, 0x25, 0x7f, 0xff, 0x77, 0xc9,
-    0x86, 0xb3, 0x69, 0xd6, 0x79, 0xfb, 0x09, 0x62, 0xc6, 0xac, 0x56, 0xc7,
-    0xe4, 0x4b, 0xf7, 0x73, 0x8b, 0x17, 0xff, 0xb0, 0x64, 0xcc, 0x17, 0xbb,
-    0x84, 0x84, 0xb1, 0x77, 0x70, 0xd1, 0xf2, 0x7c, 0x62, 0xfa, 0x28, 0x36,
-    0x96, 0x2f, 0x75, 0xf1, 0xce, 0xb1, 0x40, 0x3c, 0x91, 0x12, 0x5f, 0x0f,
-    0x6c, 0x09, 0x62, 0xa5, 0x34, 0x5c, 0x84, 0x33, 0xbc, 0x08, 0x8a, 0xfb,
-    0x76, 0xce, 0x2c, 0x5f, 0xfb, 0x69, 0x37, 0xf8, 0x42, 0xc1, 0xac, 0x5f,
-    0xf8, 0x47, 0xfc, 0x9e, 0x28, 0xf7, 0x1a, 0xc5, 0x12, 0x21, 0x3a, 0x90,
-    0x2f, 0xfb, 0x0f, 0x9b, 0xcf, 0xe4, 0xeb, 0x17, 0xff, 0x31, 0x6f, 0xc2,
-    0xce, 0x71, 0xfa, 0x2c, 0x5b, 0xdf, 0x3f, 0xf6, 0x39, 0xbf, 0x64, 0x51,
-    0x37, 0x16, 0x2f, 0xff, 0xb3, 0xdd, 0xc2, 0x40, 0x09, 0x1f, 0xc5, 0xd4,
-    0xb1, 0x5f, 0x3f, 0xf2, 0x2a, 0xad, 0x91, 0x8f, 0xdc, 0x29, 0xab, 0x15,
-    0x1e, 0x3c, 0x29, 0xda, 0x36, 0xbb, 0xfb, 0x23, 0xf7, 0xfb, 0xf5, 0x2c,
-    0x5f, 0xf1, 0x45, 0x83, 0x8a, 0x0f, 0xf5, 0x8b, 0x39, 0x1f, 0x80, 0x8d,
-    0x6f, 0xf3, 0x0c, 0xa6, 0x0e, 0x4b, 0x17, 0xe6, 0xdb, 0x69, 0xed, 0x62,
-    0xb6, 0x3d, 0xcf, 0x18, 0xdf, 0x05, 0xe7, 0xd9, 0x62, 0xa4, 0xf2, 0x18,
-    0x8e, 0xfe, 0x2e, 0xe1, 0xe1, 0x0d, 0x62, 0xfc, 0x10, 0x9b, 0x43, 0x58,
-    0xbf, 0xdc, 0x7f, 0x44, 0x52, 0x75, 0x8a, 0x23, 0xde, 0xe1, 0x55, 0xfa,
-    0x3f, 0x08, 0xee, 0xb1, 0x52, 0x8d, 0x97, 0x84, 0x73, 0x10, 0xdf, 0x14,
-    0xe0, 0x4b, 0x17, 0x8b, 0x00, 0xb1, 0x7f, 0xfc, 0xe6, 0x47, 0xbe, 0xc6,
-    0x7f, 0x22, 0x2c, 0x09, 0x62, 0xfa, 0x2c, 0xcd, 0x96, 0x2f, 0xdc, 0x7f,
-    0x14, 0xac, 0x5d, 0x9f, 0xe1, 0xe5, 0xf8, 0x92, 0xc1, 0x75, 0xa9, 0x86,
-    0xe8, 0x8b, 0xe3, 0x9e, 0x85, 0x15, 0xfc, 0x17, 0x8a, 0x4f, 0xc5, 0x8a,
-    0x63, 0xfe, 0x12, 0x7d, 0xfa, 0x2f, 0xe0, 0x19, 0x62, 0xa5, 0x91, 0xb5,
-    0x08, 0xfa, 0xb2, 0x53, 0xe4, 0x7c, 0x2a, 0xb5, 0x0c, 0xaf, 0xc3, 0xe4,
-    0xa3, 0xbd, 0xe8, 0x43, 0x7f, 0xff, 0xdf, 0xcf, 0x79, 0xb6, 0xcf, 0x1d,
-    0xc4, 0x51, 0x16, 0x04, 0xb1, 0x78, 0x6c, 0x75, 0x8b, 0xfe, 0x2c, 0x0b,
-    0xf8, 0x79, 0xe2, 0xc5, 0xff, 0x63, 0xc3, 0xf3, 0xf7, 0x35, 0x62, 0xf6,
-    0xff, 0x78, 0x8f, 0xc8, 0x8e, 0x6f, 0x13, 0x03, 0x11, 0x87, 0xc8, 0x47,
-    0xd0, 0xd3, 0x62, 0xf4, 0x65, 0x77, 0xfb, 0xdd, 0xc3, 0x3a, 0x0b, 0xeb,
-    0x17, 0x87, 0xfc, 0x58, 0xbf, 0xbd, 0xfc, 0x84, 0x00, 0xb1, 0x7f, 0x99,
-    0xb6, 0x3c, 0xfb, 0x8b, 0x17, 0xec, 0x62, 0xc8, 0xf5, 0x8b, 0xf8, 0xb0,
-    0x7f, 0x9e, 0x87, 0x3d, 0xdf, 0x9a, 0x54, 0xa6, 0xa0, 0x32, 0xac, 0x38,
-    0x21, 0xd0, 0xa1, 0x19, 0x7f, 0x89, 0x9b, 0xa4, 0x3a, 0x01, 0x62, 0xff,
-    0xfb, 0x93, 0x17, 0xe7, 0xa1, 0x60, 0xff, 0x3c, 0x58, 0xa1, 0xa2, 0x27,
-    0xc6, 0xf7, 0xdb, 0xc8, 0x38, 0xb1, 0x7f, 0xd9, 0xbe, 0x7b, 0xec, 0xc1,
-    0x2c, 0x5d, 0x20, 0x58, 0xbd, 0xf7, 0x0b, 0x47, 0xa3, 0x1c, 0x75, 0x7f,
-    0xf8, 0xef, 0xdc, 0x38, 0x59, 0xbf, 0x84, 0x4b, 0x17, 0xfb, 0x99, 0x1e,
-    0x06, 0x68, 0x96, 0x2f, 0xff, 0xdc, 0x8f, 0x72, 0xce, 0x8d, 0xc0, 0x85,
-    0x8f, 0xf5, 0x8b, 0xff, 0xd9, 0xee, 0x3e, 0x6a, 0x41, 0xc7, 0xe8, 0xb1,
-    0x58, 0x9f, 0xbe, 0xe4, 0x71, 0x3a, 0x9c, 0xdf, 0xe9, 0x9c, 0x37, 0x8e,
-    0x5a, 0xbe, 0x38, 0xe6, 0x0b, 0x17, 0xfe, 0xfe, 0x74, 0x8f, 0x71, 0x0f,
-    0x06, 0xb1, 0x6f, 0x2c, 0x54, 0x9f, 0xcf, 0x88, 0xc3, 0x44, 0xbe, 0x98,
-    0xdb, 0x80, 0x58, 0xbf, 0xff, 0xe8, 0x70, 0x0d, 0xe6, 0xd7, 0x0b, 0x3c,
-    0x20, 0x1d, 0xa0, 0xb1, 0x6f, 0x2c, 0x5e, 0xfe, 0x79, 0x62, 0xff, 0xb8,
-    0x2d, 0x43, 0x72, 0x6e, 0xa5, 0x8b, 0x8b, 0x06, 0x7b, 0x7e, 0x1d, 0xb3,
-    0x76, 0x98, 0x03, 0x33, 0xf9, 0xb6, 0xfa, 0x1c, 0x71, 0xac, 0x5c, 0xfc,
-    0x58, 0xb0, 0x1c, 0xdd, 0x1c, 0x8e, 0xa5, 0x76, 0x77, 0x25, 0x67, 0x3c,
-    0x38, 0xb4, 0x5e, 0xd1, 0x94, 0x09, 0xc2, 0xe7, 0x89, 0x62, 0xce, 0xb1,
-    0x78, 0xb7, 0x6d, 0x1a, 0x9e, 0x0c, 0x5f, 0xff, 0xda, 0x29, 0x9e, 0xcc,
-    0xe7, 0x8a, 0x47, 0xf9, 0xf2, 0xc5, 0xcf, 0xf5, 0x8b, 0xff, 0xf3, 0x9b,
-    0x83, 0x3b, 0x36, 0xda, 0xc0, 0x02, 0x56, 0x2e, 0xf8, 0x4b, 0x17, 0xd0,
-    0x26, 0x0d, 0x62, 0xfe, 0x6f, 0x73, 0xcf, 0xb2, 0xc5, 0xfe, 0x1b, 0x03,
-    0x5a, 0x60, 0x2c, 0x5f, 0x6b, 0x78, 0xf0, 0x96, 0x2e, 0x60, 0x96, 0x2e,
-    0xf6, 0xeb, 0x16, 0x37, 0xad, 0x36, 0x32, 0x31, 0x7f, 0x7f, 0x21, 0xd1,
-    0xa5, 0x62, 0xb1, 0x16, 0xac, 0xb5, 0xe2, 0xcb, 0xff, 0xfe, 0xe3, 0x16,
-    0x38, 0x24, 0xb3, 0xbf, 0x33, 0xf0, 0x33, 0x56, 0x29, 0xd3, 0x7d, 0x28,
-    0x74, 0xf0, 0xba, 0xa5, 0x58, 0xbe, 0x19, 0x47, 0xae, 0x68, 0x5c, 0xea,
-    0xcc, 0x32, 0x44, 0x62, 0x8e, 0xb2, 0xff, 0xbf, 0x3d, 0x3d, 0xc6, 0x68,
-    0xf5, 0x8b, 0xf6, 0x3f, 0xe4, 0x6b, 0x17, 0x4c, 0x7a, 0xc5, 0x68, 0xf0,
-    0x7e, 0x4f, 0x7b, 0x45, 0x83, 0x45, 0x0f, 0x47, 0xfb, 0xe6, 0x0a, 0x11,
-    0xeb, 0x17, 0x9a, 0x3d, 0xd6, 0x2f, 0xfc, 0x1f, 0x8d, 0x73, 0x67, 0x0a,
-    0x56, 0x2d, 0xda, 0xc5, 0xff, 0x9c, 0x2f, 0xe7, 0x39, 0xf9, 0x8f, 0x58,
-    0xbf, 0xfc, 0xec, 0xd1, 0x7b, 0xf9, 0x0f, 0xbf, 0x45, 0x8b, 0xff, 0xec,
-    0xf7, 0x30, 0x2c, 0xfb, 0xe8, 0x52, 0x05, 0x8b, 0xff, 0xe2, 0xcf, 0x71,
-    0x8f, 0xac, 0x7f, 0xc8, 0xd6, 0x2a, 0x53, 0x40, 0xdc, 0x4e, 0x3d, 0x0c,
-    0x93, 0x3c, 0xa1, 0x7f, 0xd9, 0xff, 0xcb, 0x94, 0x9d, 0x62, 0xfc, 0x1f,
-    0x8a, 0x40, 0xb1, 0x52, 0xaa, 0xa0, 0x66, 0xbd, 0x93, 0xe8, 0x7c, 0xf1,
-    0xc0, 0x7d, 0x37, 0xa1, 0xbd, 0xfa, 0x7d, 0x9f, 0x95, 0x8b, 0xfc, 0xda,
-    0x00, 0xb7, 0x3b, 0xac, 0x5f, 0xff, 0xee, 0xc7, 0xbb, 0x8d, 0xbf, 0x9b,
-    0x16, 0x74, 0x8f, 0x7e, 0x8b, 0x17, 0xed, 0x19, 0xbe, 0x74, 0x58, 0xbf,
-    0xe2, 0x8b, 0xf8, 0x58, 0xe3, 0x58, 0xac, 0x3e, 0x51, 0x16, 0xdf, 0xfe,
-    0x72, 0x26, 0xf3, 0x1c, 0xb3, 0x34, 0xb1, 0x7b, 0x68, 0xb1, 0x62, 0xff,
-    0xfb, 0xa6, 0x6f, 0xa6, 0x6e, 0xe1, 0xc8, 0xf7, 0x25, 0x8a, 0x93, 0xf5,
-    0x61, 0xfb, 0xff, 0xa3, 0xdf, 0x3f, 0x3d, 0x39, 0xf9, 0xed, 0x62, 0xa5,
-    0x52, 0x56, 0x1a, 0xbc, 0x33, 0xe3, 0xc8, 0x7f, 0x0b, 0xbe, 0x10, 0x5f,
-    0x4f, 0xb0, 0xeb, 0x17, 0xfe, 0xe7, 0xf0, 0x2f, 0xb8, 0x45, 0x8b, 0x14,
-    0x03, 0xe2, 0xe8, 0x45, 0x7e, 0xee, 0x05, 0x27, 0x58, 0xbf, 0xff, 0xff,
-    0xc7, 0x8f, 0x7f, 0x83, 0x18, 0xb7, 0xce, 0xe1, 0xc7, 0xf7, 0x1f, 0xb8,
-    0x14, 0xfe, 0x56, 0x2f, 0xf4, 0xeb, 0xa6, 0x0d, 0x89, 0x62, 0xfe, 0xcf,
-    0xbe, 0x6a, 0x25, 0x8b, 0xff, 0x67, 0x70, 0xe3, 0xf9, 0x8b, 0x16, 0x2f,
-    0xf6, 0x1f, 0xf9, 0x13, 0x44, 0xb1, 0x7e, 0x7d, 0xbf, 0x32, 0x61, 0xf9,
-    0xf8, 0xfa, 0x8c, 0x47, 0x06, 0x42, 0x86, 0xfa, 0x79, 0xd0, 0x96, 0x2f,
-    0xa7, 0x9d, 0x09, 0x62, 0xee, 0x84, 0xb1, 0x7f, 0x9f, 0xdc, 0xce, 0x99,
-    0xb7, 0x5a, 0x7c, 0x31, 0xb1, 0x27, 0x09, 0x2f, 0xff, 0x7e, 0x7b, 0xcd,
-    0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0xe1, 0x6a, 0x25, 0x8b, 0xd1, 0x67, 0x86,
-    0x7d, 0x5c, 0x4b, 0xbf, 0xff, 0xf1, 0x6e, 0x66, 0xa7, 0x6f, 0x63, 0x74,
-    0x32, 0x70, 0xbd, 0xc9, 0x58, 0xac, 0x45, 0x23, 0x1a, 0x50, 0xd5, 0x0d,
-    0xef, 0x08, 0x9f, 0xc6, 0xe3, 0x7e, 0x28, 0xa0, 0xe4, 0xb1, 0x4e, 0x7c,
-    0xcc, 0x7d, 0x52, 0xb8, 0xe1, 0x85, 0x3b, 0xc2, 0x4b, 0xf2, 0xe5, 0x6f,
-    0xe7, 0xda, 0x4a, 0x62, 0x58, 0xbf, 0xbd, 0x91, 0x70, 0x47, 0x58, 0xbb,
-    0xbf, 0xc7, 0x9e, 0xf3, 0x17, 0x5f, 0x36, 0xbe, 0x25, 0x8b, 0xff, 0xe7,
-    0xf7, 0x1f, 0xd3, 0xee, 0x16, 0x60, 0x4b, 0x17, 0xfe, 0xc2, 0xdf, 0xee,
-    0x3c, 0xd4, 0x4b, 0x15, 0x28, 0xe3, 0x81, 0x8e, 0x11, 0xc4, 0x9f, 0x7f,
-    0xff, 0xe7, 0x2c, 0xf4, 0x9c, 0x21, 0x36, 0xc6, 0x67, 0xdf, 0x5f, 0x65,
-    0x8b, 0xf1, 0xa6, 0xb7, 0xb8, 0xb1, 0x7f, 0xfd, 0x9b, 0x30, 0xdc, 0x5b,
-    0xe9, 0xc2, 0x89, 0xd6, 0x2a, 0x51, 0xd7, 0x8d, 0xba, 0x2b, 0xbf, 0x8e,
-    0xc3, 0xfb, 0x12, 0xc5, 0xcd, 0xd4, 0xb1, 0x7b, 0xee, 0x12, 0xc5, 0xfb,
-    0xb8, 0x70, 0xb0, 0xe6, 0xe3, 0xc3, 0x57, 0xfd, 0xdc, 0x39, 0x16, 0x9b,
-    0xdc, 0x58, 0xbf, 0xff, 0xf8, 0x13, 0x11, 0x9f, 0xcc, 0x30, 0xb0, 0x7f,
-    0x63, 0x33, 0x02, 0xf2, 0xc5, 0xff, 0x7d, 0xfa, 0xb3, 0x7f, 0xe6, 0x2c,
-    0x5f, 0xbe, 0xff, 0x60, 0x8c, 0x45, 0x8f, 0x1d, 0x6f, 0xf9, 0xc5, 0xd9,
-    0xd9, 0x88, 0x6b, 0x17, 0xfe, 0xd6, 0x45, 0x80, 0x33, 0xee, 0x66, 0xe7,
-    0xf5, 0xc4, 0x1b, 0xff, 0xfb, 0xef, 0xf6, 0x0b, 0x9f, 0x7e, 0xac, 0xdf,
-    0xf9, 0x8b, 0x17, 0xfe, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xf9,
-    0x98, 0x86, 0xb1, 0x79, 0xc5, 0xd8, 0xcf, 0x90, 0xe8, 0x77, 0xf6, 0x75,
-    0x19, 0xf7, 0x33, 0x74, 0x7b, 0xf2, 0x18, 0x77, 0xff, 0xf7, 0xdf, 0xec,
-    0x17, 0x3e, 0xfd, 0x59, 0xbf, 0xf3, 0x16, 0x2f, 0xfd, 0xf9, 0x9f, 0x72,
-    0x3d, 0xcb, 0xa2, 0xc5, 0xf3, 0x31, 0x0d, 0x62, 0xf3, 0x8b, 0xb1, 0x9f,
-    0x21, 0xd0, 0xef, 0xff, 0x37, 0x66, 0x0d, 0xc5, 0xd4, 0x67, 0xdc, 0xcd,
-    0xd1, 0xef, 0xc8, 0x61, 0xdf, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18,
-    0x58, 0x3f, 0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf,
-    0xf3, 0x16, 0x2f, 0xdf, 0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff,
-    0xe7, 0x17, 0x63, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xfe,
-    0xcf, 0x48, 0x59, 0xe2, 0x90, 0xba, 0x8c, 0xfb, 0x99, 0xba, 0x27, 0x38,
-    0x83, 0x7f, 0xff, 0x7d, 0xfe, 0xc1, 0x73, 0xef, 0xd5, 0x9b, 0xff, 0x31,
-    0x62, 0xff, 0xdf, 0x99, 0xf7, 0x23, 0xdc, 0xba, 0x2c, 0x5f, 0x33, 0x10,
-    0xd6, 0x2f, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e, 0xff, 0xb1, 0xc8, 0xd3,
-    0x3e, 0xe6, 0x6e, 0x8f, 0x7e, 0x43, 0x0e, 0xf7, 0xe7, 0x58, 0xb9, 0x97,
-    0xa8, 0xd1, 0xca, 0x3b, 0xce, 0x46, 0xe1, 0x7f, 0xff, 0xff, 0xdf, 0x7f,
-    0xb0, 0x46, 0x02, 0x62, 0x33, 0xf9, 0x86, 0x16, 0x0f, 0xec, 0x66, 0x60,
-    0x5e, 0x58, 0xbf, 0xf7, 0xe6, 0x7d, 0xc8, 0xf7, 0x2e, 0x8b, 0x17, 0xcc,
-    0xc4, 0x35, 0x8b, 0xce, 0x2e, 0xc6, 0x7c, 0x87, 0x43, 0xbf, 0xfb, 0x5a,
-    0xc7, 0x2d, 0x8c, 0xfb, 0x99, 0xba, 0x66, 0x3c, 0x87, 0xed, 0xff, 0xff,
-    0xff, 0x7d, 0xfe, 0xc1, 0x18, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f,
-    0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xdf, 0x99, 0xf7, 0x23, 0xdc, 0xba,
-    0x2c, 0x5f, 0x33, 0x10, 0xd6, 0x2f, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e,
-    0xff, 0xf4, 0x7b, 0xf5, 0x1b, 0xac, 0x19, 0x9f, 0x73, 0x37, 0x4c, 0xc7,
-    0x90, 0xfd, 0xbf, 0xff, 0xff, 0xef, 0xbf, 0xd8, 0x23, 0x01, 0x31, 0x19,
-    0xfc, 0xc3, 0x0b, 0x07, 0xf6, 0x33, 0x30, 0x2f, 0x2c, 0x5f, 0xfb, 0xf3,
-    0x3e, 0xe4, 0x7b, 0x97, 0x45, 0x8b, 0xe6, 0x62, 0x1a, 0xc5, 0xe7, 0x17,
-    0x63, 0x3e, 0x43, 0xa1, 0xdf, 0xfd, 0x23, 0xfe, 0x67, 0x43, 0x3e, 0xe6,
-    0x6e, 0x99, 0x8f, 0x21, 0xfb, 0x7f, 0xff, 0xf0, 0x26, 0x23, 0x3f, 0x98,
-    0x61, 0x60, 0xfe, 0xc6, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf5, 0x66,
-    0xff, 0xcc, 0x58, 0xbf, 0x7d, 0xfe, 0xc1, 0x18, 0x8b, 0x1e, 0x3a, 0xdf,
-    0xf3, 0x8b, 0xb3, 0xb3, 0x10, 0xd6, 0x2f, 0xff, 0xfd, 0xae, 0x06, 0x46,
-    0x99, 0xee, 0x60, 0x43, 0x17, 0x0c, 0xfb, 0x99, 0xb9, 0xfd, 0x71, 0x06,
-    0xff, 0xff, 0xe0, 0x4c, 0x46, 0x7f, 0x30, 0xc2, 0xc1, 0xfd, 0x8c, 0xcc,
-    0x0b, 0xcb, 0x17, 0xfd, 0xf7, 0xea, 0xcd, 0xff, 0x98, 0xb1, 0x7e, 0xfb,
-    0xfd, 0x82, 0x31, 0x16, 0x3c, 0x75, 0xbf, 0xe7, 0x17, 0x67, 0x66, 0x21,
-    0xac, 0x5f, 0xf8, 0x2f, 0xc7, 0xb9, 0x19, 0xf7, 0x33, 0x73, 0xfa, 0xe2,
-    0x0d, 0xff, 0xff, 0xc0, 0x98, 0x8c, 0xfe, 0x61, 0x85, 0x83, 0xfb, 0x19,
-    0x98, 0x17, 0x96, 0x2f, 0xfb, 0xef, 0xd5, 0x9b, 0xff, 0x31, 0x62, 0xfd,
-    0xf7, 0xfb, 0x04, 0x62, 0x2c, 0x78, 0xeb, 0x7f, 0xfe, 0x71, 0x76, 0x3f,
-    0xcc, 0xfb, 0x91, 0xee, 0x5d, 0x16, 0x2f, 0xf8, 0x59, 0x9a, 0x33, 0xee,
-    0x66, 0xe8, 0x9c, 0xe2, 0x0d, 0xc5, 0x32, 0x9f, 0xe0, 0x51, 0xd4, 0xdf,
-    0xfb, 0xf3, 0x3e, 0xe4, 0x7b, 0x97, 0x45, 0x8b, 0xe6, 0x62, 0x1a, 0xc5,
-    0xff, 0xb4, 0x67, 0xdc, 0xce, 0x38, 0xbb, 0x19, 0xf2, 0x1d, 0x0e, 0xff,
-    0xff, 0xe0, 0x4c, 0x46, 0x7f, 0x30, 0xc2, 0xc1, 0xfd, 0x8c, 0xcc, 0x0b,
-    0xcb, 0x17, 0xfd, 0xf7, 0xea, 0xcd, 0xff, 0x98, 0xb1, 0x7e, 0xfb, 0xfd,
-    0x82, 0x31, 0x16, 0x3c, 0x75, 0xbf, 0xe7, 0x17, 0x67, 0x66, 0x21, 0xac,
-    0x5f, 0xff, 0xe3, 0x99, 0x9c, 0xc7, 0x23, 0x4c, 0xc1, 0x99, 0xf7, 0x33,
-    0x73, 0xfa, 0xe2, 0x0d, 0x4a, 0xa0, 0x0c, 0x8e, 0x12, 0x86, 0xab, 0x04,
-    0xa5, 0x4c, 0x5f, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f,
-    0xb1, 0x99, 0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf, 0xf3, 0x16,
-    0x2f, 0xdf, 0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff, 0xe7, 0x17,
-    0x63, 0xfc, 0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xff, 0xfc, 0xe4,
-    0x67, 0xf0, 0x66, 0x7e, 0x64, 0xcf, 0xe7, 0x60, 0xd4, 0x99, 0xf7, 0x33,
-    0x74, 0x4e, 0x71, 0x06, 0xa5, 0x91, 0x19, 0x93, 0xce, 0x91, 0xf1, 0xbc,
-    0x5f, 0xff, 0xfc, 0x09, 0x88, 0xcf, 0xe6, 0x18, 0x58, 0x3f, 0xb1, 0x99,
-    0x81, 0x79, 0x62, 0xff, 0xbe, 0xfd, 0x59, 0xbf, 0xf3, 0x16, 0x2f, 0xdf,
-    0x7f, 0xb0, 0x46, 0x22, 0xc7, 0x8e, 0xb7, 0xff, 0xe7, 0x17, 0x63, 0xfc,
-    0xcf, 0xb9, 0x1e, 0xe5, 0xd1, 0x62, 0xff, 0xf4, 0xe8, 0x03, 0x71, 0x75,
-    0x19, 0xf7, 0x33, 0x74, 0x4e, 0x71, 0x06, 0xa5, 0xb6, 0xfb, 0x1c, 0xf0,
-    0xde, 0x47, 0x25, 0xa8, 0xe5, 0x8f, 0x1d, 0x1f, 0xe9, 0x43, 0xbc, 0x8e,
-    0x42, 0xff, 0xff, 0x7b, 0x98, 0x3f, 0xbf, 0x1c, 0x5d, 0x9d, 0x98, 0x86,
-    0xb1, 0x7f, 0x36, 0xe3, 0xfc, 0xe9, 0x62, 0xff, 0xff, 0xfb, 0x3d, 0xe9,
-    0xd0, 0x3d, 0x9d, 0x81, 0xb8, 0xe2, 0xec, 0xec, 0xc4, 0x35, 0x8b, 0xfe,
-    0xfe, 0x7b, 0xb8, 0x49, 0x6e, 0xb1, 0x69, 0xd2, 0x2e, 0x40, 0xfd, 0x52,
-    0x9b, 0x8e, 0x30, 0xfe, 0x1d, 0x17, 0xb1, 0xbb, 0x58, 0xbf, 0xfe, 0xcd,
-    0xf3, 0x59, 0xbf, 0xf3, 0x9c, 0x17, 0x96, 0x2f, 0xff, 0xe9, 0x8b, 0xf9,
-    0x85, 0x83, 0xfb, 0x66, 0x05, 0xe5, 0x8b, 0xfe, 0xfb, 0xf5, 0x66, 0xff,
-    0xcc, 0x58, 0xbf, 0x7d, 0xfe, 0xc1, 0x44, 0x98, 0x2f, 0xc7, 0x40, 0xa5,
-    0xc5, 0xab, 0xff, 0xfa, 0x62, 0xfe, 0x61, 0x60, 0xfe, 0xd9, 0x81, 0x79,
-    0x62, 0xfe, 0xf7, 0x23, 0xdc, 0xba, 0x2c, 0x52, 0xc5, 0xfc, 0xe2, 0xec,
-    0x7f, 0x99, 0x37, 0xfa, 0x33, 0xbb, 0x3a, 0x0d, 0x53, 0x8e, 0xf1, 0x9c,
-    0x81, 0x73, 0x90, 0x99, 0xb4, 0x46, 0x2e, 0x65, 0x14, 0xe3, 0x95, 0xfb,
-    0x3f, 0xf7, 0xdd, 0x62, 0xfd, 0xc2, 0xce, 0x8c, 0xb1, 0x69, 0xdc, 0xf4,
-    0xbc, 0x53, 0x58, 0xde, 0xee, 0x35, 0x7a, 0x5a, 0x08, 0x43, 0xdf, 0x8a,
-    0x77, 0x81, 0xd6, 0x2f, 0xff, 0x64, 0x7f, 0xc5, 0x17, 0xf2, 0x28, 0x4f,
-    0x6b, 0x17, 0xf3, 0x73, 0xa1, 0xe4, 0xd5, 0x8b, 0xff, 0xb9, 0x91, 0x7e,
-    0x7a, 0x67, 0xff, 0x2b, 0x14, 0x34, 0x79, 0x68, 0xa4, 0xea, 0x3e, 0x31,
-    0xbf, 0xcc, 0x0e, 0x1d, 0xbb, 0xf2, 0xc5, 0x2c, 0x5f, 0xf7, 0x08, 0x42,
-    0xf4, 0x24, 0xd5, 0x8a, 0xec, 0xf1, 0xfc, 0x19, 0x58, 0x8d, 0xc6, 0x3d,
-    0x13, 0xe5, 0xff, 0xb3, 0x6d, 0x4c, 0xf9, 0xff, 0x2b, 0x17, 0xfe, 0x78,
-    0xb8, 0x4c, 0xc3, 0xfb, 0xac, 0x5f, 0xc5, 0x9c, 0xfc, 0x8d, 0x62, 0xff,
-    0x9f, 0xbf, 0x19, 0xc1, 0x0b, 0x75, 0x8b, 0xf4, 0xc7, 0x82, 0x3f, 0xeb,
-    0x15, 0x28, 0xd8, 0xc3, 0xe8, 0xf2, 0xdf, 0x9f, 0x5f, 0xff, 0xff, 0x14,
-    0xff, 0x0b, 0x1c, 0x60, 0x9e, 0xe1, 0xc3, 0x66, 0x4b, 0x7c, 0x1a, 0xc5,
-    0x12, 0x7a, 0x1c, 0x8c, 0x5b, 0xc7, 0xd7, 0xfe, 0x35, 0xfc, 0x59, 0x0d,
-    0x73, 0x8b, 0x17, 0xfd, 0xd0, 0x73, 0xc1, 0x6c, 0x28, 0x96, 0x2d, 0x07,
-    0x3f, 0xf6, 0x40, 0xbd, 0xb0, 0xbc, 0xb1, 0x7f, 0xe3, 0x8a, 0x0c, 0x33,
-    0x3c, 0x70, 0x2c, 0x54, 0x9f, 0x0e, 0x0f, 0xdf, 0xd3, 0x16, 0x74, 0x7d,
-    0x2c, 0x5f, 0xfe, 0x87, 0xda, 0x1b, 0x93, 0x75, 0x75, 0x75, 0x3a, 0xc5,
-    0x4a, 0x21, 0x30, 0xc2, 0xf6, 0xb0, 0x96, 0x2f, 0xe7, 0xd7, 0x99, 0xb7,
-    0x58, 0xbf, 0xd9, 0xe3, 0x71, 0x88, 0x0b, 0x14, 0xe7, 0xfb, 0x1e, 0x39,
-    0x11, 0x75, 0x4a, 0x7f, 0x7f, 0x84, 0x39, 0x42, 0x93, 0x90, 0x9e, 0xbf,
-    0x76, 0x3f, 0xb8, 0x4b, 0x17, 0xff, 0x08, 0x78, 0x42, 0x83, 0x8f, 0x00,
-    0xb1, 0x52, 0x7d, 0xee, 0x57, 0x7f, 0xf0, 0x98, 0xfe, 0x2c, 0xd8, 0xb3,
-    0xb5, 0x8b, 0xfe, 0xcd, 0xe7, 0xef, 0x24, 0x35, 0x8b, 0xff, 0xbf, 0x81,
-    0x0b, 0x1f, 0xfc, 0x9d, 0x96, 0x2e, 0x71, 0x6c, 0x7f, 0xdd, 0x9c, 0x56,
-    0xce, 0xc6, 0xd0, 0x72, 0x9c, 0x72, 0x18, 0xbb, 0xce, 0x4a, 0x45, 0x1c,
-    0x66, 0xa3, 0x27, 0x39, 0x73, 0x32, 0x82, 0xbe, 0x1a, 0x29, 0x42, 0x1c,
-    0x8f, 0xfb, 0xd2, 0xac, 0x3a, 0x42, 0xe8, 0x22, 0x0e, 0xa8, 0x61, 0xdf,
-    0x45, 0x07, 0x89, 0x62, 0xe2, 0xd9, 0x62, 0xf8, 0x1a, 0x68, 0xe5, 0x8a,
-    0x30, 0xf8, 0xe3, 0x42, 0x5e, 0xc6, 0x2f, 0xf1, 0x6d, 0x83, 0x3b, 0xf9,
-    0x62, 0xff, 0x47, 0xbe, 0xdc, 0x99, 0x89, 0x62, 0xce, 0x23, 0xec, 0x08,
-    0xd2, 0xf3, 0x99, 0xd7, 0xac, 0x5b, 0xa9, 0x62, 0xef, 0xf5, 0x2c, 0x5f,
-    0xfe, 0xce, 0x9f, 0x68, 0x01, 0xbb, 0x03, 0xf6, 0xb1, 0x52, 0x7d, 0x3f,
-    0x1b, 0xb6, 0x2c, 0x57, 0x8d, 0x97, 0x42, 0x1b, 0xff, 0xf4, 0xf0, 0xee,
-    0x5e, 0xe6, 0x3f, 0x8a, 0x4e, 0xb1, 0x7f, 0xd0, 0xe7, 0xf0, 0xf1, 0xef,
-    0xc5, 0x8b, 0xff, 0xdb, 0x4c, 0x7f, 0x0b, 0x3d, 0xe7, 0xd6, 0xeb, 0x15,
-    0xda, 0x23, 0x34, 0x7b, 0x7d, 0xb1, 0xda, 0x0b, 0x17, 0x3f, 0x16, 0x2f,
-    0x16, 0x74, 0x58, 0xbb, 0x36, 0x39, 0xb5, 0xe0, 0xbd, 0xfe, 0x93, 0xcc,
-    0x60, 0x41, 0x04, 0xb1, 0x50, 0x55, 0x2c, 0xf0, 0xb0, 0xd1, 0x1b, 0x43,
-    0x7c, 0x89, 0x3c, 0xb3, 0xd4, 0x5b, 0x7f, 0xfe, 0x66, 0x1f, 0xe7, 0xa7,
-    0xe4, 0xf1, 0x47, 0xb8, 0xd6, 0x2e, 0xf8, 0x6b, 0x17, 0xfc, 0x6c, 0x6d,
-    0xf7, 0xd3, 0x3f, 0x45, 0x8b, 0x1a, 0xb1, 0x52, 0xee, 0x18, 0x32, 0xd9,
-    0x11, 0x3c, 0x70, 0x71, 0xf0, 0xa2, 0xf9, 0x43, 0x4a, 0xb9, 0x27, 0x0e,
-    0x2d, 0x88, 0x64, 0x34, 0x1b, 0xc7, 0x70, 0x96, 0x2f, 0xff, 0xd0, 0xce,
-    0x31, 0x03, 0xf9, 0x3e, 0xe4, 0x81, 0x62, 0xf9, 0x8e, 0xd0, 0x58, 0xbf,
-    0xd8, 0x58, 0xfa, 0x6e, 0x8b, 0x17, 0xff, 0xec, 0x39, 0xc5, 0xff, 0xb3,
-    0x1b, 0x9a, 0xcf, 0x2c, 0x5d, 0xf7, 0x31, 0x11, 0x24, 0x67, 0x7b, 0x0f,
-    0x2b, 0x17, 0xfe, 0x26, 0x19, 0x60, 0xff, 0x3c, 0x58, 0xac, 0x3d, 0x97,
-    0x1c, 0xbf, 0xdb, 0xe1, 0x67, 0x56, 0x0d, 0x62, 0xf0, 0x73, 0xa5, 0x8b,
-    0xfd, 0x87, 0x6f, 0xe7, 0x60, 0x58, 0xbf, 0xc7, 0x9d, 0x78, 0xa7, 0x65,
-    0x8b, 0xfb, 0x8e, 0x4d, 0xa3, 0x56, 0x2b, 0x63, 0xe2, 0x39, 0xa5, 0xfc,
-    0xfc, 0x6f, 0x0a, 0x56, 0x2f, 0xb7, 0xec, 0xdd, 0xd6, 0x2f, 0x07, 0x20,
-    0x58, 0xbd, 0xa9, 0xe2, 0xc5, 0x62, 0x24, 0x1c, 0xb4, 0x05, 0x1e, 0x1e,
-    0xbe, 0xe9, 0x25, 0xba, 0xc5, 0xff, 0xfd, 0x25, 0x80, 0xe6, 0x0f, 0xf3,
-    0xb1, 0xc4, 0x43, 0x58, 0xbf, 0x76, 0x0e, 0xa0, 0xc2, 0x58, 0xbf, 0xfc,
-    0xc0, 0x6f, 0xe1, 0xdb, 0xf9, 0xd8, 0x16, 0x2f, 0xff, 0xfe, 0x9c, 0x03,
-    0x44, 0x3c, 0x6d, 0xff, 0x99, 0x16, 0x37, 0x54, 0x4e, 0xb1, 0x4e, 0x9b,
-    0x7f, 0xc9, 0x59, 0x6c, 0x8c, 0x04, 0x95, 0x7e, 0x7f, 0x7a, 0x60, 0xb1,
-    0x74, 0xf6, 0xb1, 0x7c, 0xd0, 0xce, 0x8b, 0x15, 0xb2, 0xed, 0xbc, 0x07,
-    0x86, 0xa8, 0x6c, 0x2a, 0xf7, 0x84, 0x3b, 0x90, 0x68, 0xdb, 0xe3, 0xcd,
-    0x09, 0x62, 0x85, 0x9f, 0xa3, 0xaa, 0xe8, 0x91, 0x1c, 0x51, 0xd4, 0x31,
-    0x7f, 0x17, 0xa7, 0x9e, 0x75, 0x8b, 0xff, 0xf3, 0x16, 0xfe, 0xe6, 0x6d,
-    0xc9, 0x32, 0x7a, 0x12, 0xc5, 0xff, 0xba, 0x18, 0x37, 0x90, 0x61, 0x01,
-    0x62, 0xf7, 0x1c, 0xeb, 0x14, 0xc7, 0xbd, 0xc4, 0x1b, 0xff, 0xf0, 0xbb,
-    0x1e, 0xe2, 0xc8, 0xf8, 0xb1, 0xba, 0xa2, 0x75, 0x8b, 0x9f, 0xcb, 0x17,
-    0xf6, 0x78, 0xa6, 0x4e, 0xb1, 0x7c, 0x3f, 0xcf, 0x43, 0x9e, 0x1f, 0xc5,
-    0xef, 0xff, 0x60, 0xff, 0x3d, 0x3e, 0xe1, 0x16, 0x6e, 0xb1, 0x74, 0xc5,
-    0x88, 0x88, 0x23, 0xbb, 0xfc, 0x53, 0x0c, 0x3c, 0xee, 0xb1, 0x78, 0x6f,
-    0xa5, 0x8a, 0x19, 0xe8, 0x68, 0xce, 0xfe, 0xec, 0x63, 0xc6, 0xd9, 0x62,
-    0xfe, 0xc0, 0xb5, 0x9f, 0xe2, 0xc5, 0xff, 0xed, 0x36, 0xf9, 0xd1, 0xf5,
-    0x1c, 0xdb, 0x47, 0x2c, 0x5f, 0xff, 0xbe, 0xfd, 0x0b, 0x02, 0xc7, 0xf3,
-    0xe9, 0x80, 0xb1, 0x78, 0x44, 0x05, 0x8b, 0xa4, 0x6b, 0x14, 0xe6, 0xd0,
-    0x87, 0x6f, 0xa1, 0x9f, 0xc5, 0x8b, 0xdb, 0x08, 0x96, 0x2d, 0xc3, 0x13,
-    0xbe, 0x92, 0x2d, 0x8c, 0x06, 0x5f, 0xba, 0xa4, 0x50, 0x8a, 0x61, 0xf0,
-    0xc8, 0xaf, 0xff, 0x86, 0x4c, 0xdf, 0xfe, 0x30, 0xf3, 0x0e, 0xb1, 0x7f,
-    0xfe, 0x1e, 0xb3, 0x7f, 0xe7, 0xd8, 0x22, 0x10, 0x80, 0xb1, 0x5d, 0xa6,
-    0x4b, 0x14, 0x20, 0x09, 0x36, 0xee, 0xb3, 0xac, 0x58, 0xbe, 0x76, 0x21,
-    0xac, 0x5e, 0xea, 0x62, 0x58, 0xbf, 0xbe, 0xf1, 0x33, 0x6c, 0xb1, 0x7a,
-    0x70, 0x0b, 0x16, 0x9e, 0xb5, 0x15, 0xa3, 0x22, 0xc2, 0x1d, 0xc7, 0xe2,
-    0x2f, 0xa9, 0x5e, 0xc9, 0xc2, 0xd7, 0x85, 0xbe, 0x88, 0x4f, 0x19, 0x5b,
-    0x4b, 0x60, 0x04, 0x39, 0x2f, 0x1b, 0xe7, 0x58, 0xbd, 0xb1, 0xe5, 0x62,
-    0xa4, 0xde, 0x38, 0xf5, 0xfd, 0x3a, 0xda, 0x75, 0xb2, 0xc5, 0xfd, 0x24,
-    0x67, 0xa0, 0xeb, 0x17, 0xff, 0x89, 0x82, 0xfc, 0xc1, 0xcb, 0x0f, 0x2b,
-    0x17, 0xff, 0x67, 0x7e, 0x9c, 0xd6, 0xa6, 0x7a, 0x96, 0x2c, 0x14, 0x48,
-    0x8f, 0x24, 0x8b, 0x44, 0xb1, 0x7f, 0xb6, 0xc0, 0xa7, 0xe2, 0x25, 0x8a,
-    0x93, 0xc8, 0x71, 0x3a, 0x82, 0x6f, 0xe3, 0x30, 0xc8, 0x5e, 0xfd, 0xca,
-    0xfd, 0xfc, 0xdf, 0x02, 0x58, 0xbf, 0xee, 0x8c, 0x40, 0xfe, 0x01, 0x96,
-    0x2f, 0xce, 0x6f, 0x9f, 0x65, 0x8b, 0xff, 0xd9, 0x80, 0x3c, 0xc5, 0xc1,
-    0xfd, 0xb6, 0x58, 0xa7, 0x45, 0x87, 0xce, 0x88, 0xaa, 0xff, 0xef, 0xc9,
-    0xe2, 0x2c, 0x0b, 0xd9, 0xf5, 0x8b, 0x85, 0xb2, 0xc5, 0x49, 0xef, 0x8d,
-    0x1a, 0xfa, 0x2c, 0xcd, 0x96, 0x2f, 0xff, 0xff, 0xfb, 0x8c, 0x3e, 0xe1,
-    0xc7, 0x1e, 0x1f, 0xd9, 0xdf, 0xe7, 0xa1, 0xb3, 0xfc, 0x1f, 0xe7, 0xb5,
-    0x8a, 0xd9, 0x17, 0xdc, 0x24, 0xbf, 0x8f, 0xf7, 0xe9, 0x91, 0x2c, 0x5f,
-    0xcd, 0xdf, 0xdb, 0x34, 0xb1, 0x67, 0xc3, 0xdf, 0x63, 0x1b, 0xff, 0xd1,
-    0xef, 0xac, 0xdc, 0xb3, 0xa4, 0x73, 0x6c, 0xb1, 0x7f, 0xfb, 0x42, 0x39,
-    0xd9, 0xb6, 0x3c, 0xfb, 0x8b, 0x17, 0xfe, 0x2c, 0xee, 0x1c, 0xd4, 0xfb,
-    0x8b, 0x17, 0xfd, 0xc7, 0xc2, 0x1f, 0xd8, 0x96, 0x2f, 0xda, 0xc2, 0xc0,
-    0x96, 0x2e, 0xd0, 0x0c, 0x3d, 0xf1, 0x9b, 0xde, 0xdf, 0x36, 0x58, 0xb7,
-    0xe4, 0xf3, 0x9c, 0xbe, 0xfe, 0x2f, 0xe0, 0x24, 0x96, 0x29, 0x62, 0xfd,
-    0x0d, 0x4e, 0x0d, 0x62, 0xc2, 0xec, 0xda, 0x10, 0x65, 0xfe, 0xcf, 0x66,
-    0x71, 0xa3, 0xd6, 0x29, 0xcf, 0x73, 0x84, 0xf7, 0xfc, 0x2d, 0x71, 0x88,
-    0x78, 0x05, 0x8b, 0xff, 0xfd, 0x90, 0xdf, 0xef, 0xf9, 0xcd, 0x43, 0xc5,
-    0x27, 0xe2, 0xc5, 0xff, 0x61, 0xf9, 0x27, 0x6e, 0xfc, 0xb1, 0x7f, 0xcd,
-    0xb0, 0xa7, 0x08, 0x5b, 0x2c, 0x5f, 0xe8, 0xb5, 0x8f, 0xf9, 0x1a, 0xc5,
-    0x62, 0x2a, 0x34, 0x74, 0xc7, 0x54, 0xe9, 0xb8, 0x7c, 0xe7, 0x91, 0x84,
-    0xdf, 0xfd, 0x3c, 0x2c, 0x35, 0xff, 0xfc, 0x8f, 0x58, 0xbf, 0xe1, 0x7a,
-    0x3f, 0x98, 0xe4, 0x35, 0x8b, 0xe1, 0x4f, 0x63, 0x58, 0xbf, 0xd8, 0x7c,
-    0x8a, 0x0f, 0x8b, 0x15, 0x2b, 0xff, 0xa3, 0x86, 0xd6, 0xf0, 0x8d, 0x78,
-    0x6f, 0xc7, 0xc2, 0x0e, 0x22, 0x5d, 0x29, 0x9d, 0x33, 0xf0, 0xed, 0x62,
-    0x6e, 0x42, 0xf3, 0xd1, 0xc8, 0x88, 0xdb, 0xa2, 0x38, 0x47, 0x81, 0x92,
-    0x5c, 0x33, 0xac, 0x5e, 0x8e, 0xc3, 0xac, 0x5f, 0x31, 0xc3, 0x3a, 0xc5,
-    0xe9, 0xd6, 0xcb, 0x14, 0xe7, 0xc5, 0xe2, 0x0e, 0xa2, 0x4b, 0xf4, 0x9c,
-    0xb0, 0x6b, 0x16, 0xe2, 0xc5, 0x84, 0x03, 0x73, 0xe2, 0x7b, 0xdd, 0x4e,
-    0x12, 0xc5, 0x4b, 0x29, 0xc7, 0x29, 0x07, 0xf1, 0x46, 0x0c, 0xcf, 0x42,
-    0x6a, 0xea, 0x27, 0xb7, 0x5a, 0xb1, 0x7d, 0x8f, 0xf1, 0x2c, 0x5f, 0xa4,
-    0xb3, 0xa3, 0x2c, 0x5b, 0x78, 0x8f, 0x2b, 0x44, 0x56, 0xdd, 0x62, 0xb6,
-    0x44, 0xf6, 0x98, 0x43, 0x2a, 0xbf, 0xf9, 0xf7, 0x6d, 0x6f, 0xf7, 0xe8,
-    0xc7, 0x58, 0xbf, 0xfb, 0x53, 0xf9, 0x30, 0x26, 0x22, 0x95, 0x8b, 0x9f,
-    0xdc, 0x44, 0x60, 0x69, 0x17, 0xf1, 0x4e, 0x7f, 0x09, 0x62, 0xff, 0xff,
-    0x1b, 0xc1, 0xbe, 0x77, 0xbb, 0x93, 0x76, 0x79, 0x9e, 0x2c, 0x56, 0x22,
-    0x39, 0x8a, 0xef, 0xff, 0x1e, 0x77, 0xf7, 0x30, 0x13, 0x9d, 0xc1, 0x62,
-    0xf8, 0xd7, 0xdd, 0xd6, 0x2e, 0x98, 0x61, 0xf8, 0x79, 0x32, 0xbe, 0x8b,
-    0xd2, 0x84, 0x8d, 0xe1, 0xe4, 0x16, 0x2f, 0x47, 0xb8, 0x4b, 0x17, 0x8d,
-    0x7d, 0xd6, 0x2f, 0xcf, 0xd0, 0xb3, 0x86, 0x1e, 0xef, 0xc7, 0x7c, 0x43,
-    0x77, 0x64, 0xb1, 0x7f, 0xdd, 0x30, 0x71, 0x66, 0x11, 0xab, 0x17, 0xff,
-    0xa1, 0x3c, 0xfc, 0x97, 0xbf, 0x1e, 0xe7, 0x58, 0xa2, 0x44, 0x4f, 0x8f,
-    0x2f, 0xfa, 0x67, 0xdc, 0x2c, 0x62, 0x58, 0xbf, 0xf4, 0x9f, 0x8f, 0xa9,
-    0xf3, 0xf4, 0x58, 0xbf, 0xff, 0xec, 0xdf, 0xf9, 0xbf, 0xe7, 0xa0, 0x18,
-    0xb0, 0x7f, 0x78, 0x96, 0x2f, 0xd1, 0xef, 0xf6, 0x89, 0x62, 0xa5, 0x1a,
-    0xda, 0x40, 0xfb, 0x55, 0x1a, 0x99, 0xdf, 0xa3, 0x0c, 0xbf, 0xfe, 0xc1,
-    0xfd, 0xc1, 0x30, 0x71, 0xfe, 0x7b, 0x58, 0xbf, 0xa7, 0x72, 0x6e, 0xfc,
-    0xb1, 0x7c, 0x42, 0x68, 0x2c, 0x5f, 0xfc, 0x58, 0x67, 0x05, 0x9e, 0x62,
-    0x02, 0xc5, 0xfe, 0xe6, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0xdb, 0x47, 0x49,
-    0xd6, 0x2b, 0x11, 0x42, 0xe8, 0x81, 0x9b, 0x5f, 0xfa, 0x7b, 0xf7, 0x04,
-    0x7c, 0xef, 0xcb, 0x17, 0xf6, 0x1a, 0xde, 0x29, 0x58, 0xa8, 0x2e, 0x2b,
-    0x62, 0x6b, 0xc2, 0x86, 0x3e, 0x35, 0xdd, 0x15, 0x9d, 0x43, 0x85, 0xfe,
-    0x86, 0x1f, 0x42, 0xf0, 0xd0, 0xaf, 0xd3, 0xed, 0xb0, 0x25, 0x8b, 0x74,
-    0x58, 0xbf, 0xcd, 0x1e, 0x67, 0xbe, 0xfc, 0x58, 0xbf, 0xbf, 0x3a, 0xf1,
-    0x4a, 0xc5, 0xfe, 0x26, 0xd9, 0xa0, 0xff, 0x58, 0xbf, 0xff, 0x6e, 0xfa,
-    0x7c, 0xe9, 0xfc, 0xc2, 0x66, 0xe8, 0xb1, 0x6e, 0xf7, 0x44, 0x57, 0x8c,
-    0xeb, 0x49, 0xac, 0x1c, 0xa8, 0x85, 0x3c, 0x70, 0x28, 0x5b, 0xdf, 0xce,
-    0x2d, 0xb9, 0x30, 0x58, 0xbf, 0x89, 0x82, 0x33, 0x61, 0xac, 0x5e, 0x70,
-    0x71, 0x62, 0xfb, 0x36, 0xe9, 0xe5, 0x8a, 0xc3, 0xc3, 0x10, 0xed, 0xff,
-    0xdc, 0x6e, 0xfd, 0xec, 0xdc, 0x62, 0xd9, 0x62, 0xd9, 0xb9, 0xf5, 0x78,
-    0x86, 0xff, 0xf1, 0x99, 0x02, 0x13, 0x73, 0xf8, 0x06, 0x58, 0xbf, 0xf7,
-    0xb8, 0x1f, 0x24, 0xb6, 0x68, 0x2c, 0x54, 0x11, 0x17, 0x89, 0x57, 0xe1,
-    0xee, 0x2c, 0x8f, 0x58, 0xbf, 0xdd, 0xfe, 0x5c, 0x98, 0x6b, 0x17, 0x76,
-    0x75, 0x8b, 0x14, 0x9e, 0x66, 0x19, 0xd4, 0x48, 0x9e, 0x3b, 0xcd, 0xf7,
-    0x30, 0x8d, 0x58, 0xbe, 0x9c, 0x83, 0x2c, 0x57, 0x67, 0x89, 0xf2, 0x3b,
-    0xff, 0xfb, 0x7f, 0xb4, 0x79, 0x98, 0x33, 0x71, 0xf4, 0x59, 0xd1, 0x62,
-    0xf8, 0x1f, 0x68, 0x2c, 0x5f, 0xff, 0xef, 0xe7, 0xa3, 0xb0, 0x9e, 0x7b,
-    0x2c, 0xe9, 0x38, 0x12, 0xc5, 0xff, 0xf8, 0x5a, 0x6e, 0x48, 0xba, 0xf9,
-    0xfe, 0x31, 0x6e, 0xb1, 0x5c, 0x45, 0xf7, 0x99, 0x2f, 0x81, 0x1a, 0x75,
-    0xbd, 0x62, 0xc5, 0x39, 0xeb, 0x68, 0x8e, 0xa5, 0x52, 0x28, 0xda, 0x30,
-    0x8d, 0xd8, 0x9a, 0x33, 0x7b, 0xfc, 0x3e, 0x92, 0x5e, 0xc0, 0x2c, 0x5f,
-    0xa7, 0xdf, 0x9f, 0x2c, 0x5c, 0x40, 0x58, 0xad, 0x8f, 0xd3, 0x46, 0xac,
-    0x51, 0x7f, 0x9b, 0xbe, 0x6b, 0x3f, 0xc5, 0x8a, 0x58, 0xbf, 0x85, 0xdc,
-    0x4e, 0x58, 0xb1, 0x7f, 0xff, 0xf6, 0xbf, 0x91, 0x44, 0xda, 0x8b, 0xdf,
-    0x10, 0x39, 0x8f, 0xd0, 0x72, 0xb1, 0x7f, 0xff, 0x31, 0x03, 0x35, 0x8f,
-    0xb3, 0x1f, 0x35, 0xa9, 0x58, 0xa1, 0x23, 0x47, 0xa3, 0xc5, 0xff, 0x3f,
-    0xf9, 0xa7, 0x29, 0x3a, 0xc5, 0xfb, 0x91, 0x16, 0x44, 0xb1, 0x7f, 0xcd,
-    0x11, 0x60, 0xff, 0x3c, 0x58, 0xa9, 0x3e, 0x3c, 0x2a, 0xa7, 0x47, 0x04,
-    0x79, 0x2f, 0xe1, 0x37, 0x7e, 0xf7, 0xd8, 0x8d, 0x58, 0xbf, 0xdd, 0x44,
-    0x21, 0x6e, 0xe6, 0xac, 0x5b, 0xcb, 0x14, 0xb1, 0x7c, 0xe1, 0x1d, 0xbb,
-    0x2f, 0xbc, 0x25, 0x7f, 0x85, 0xb0, 0xff, 0x85, 0x2b, 0x15, 0x28, 0xc3,
-    0xdd, 0x5c, 0x8e, 0x2f, 0xf3, 0xe0, 0x51, 0x41, 0xc9, 0x62, 0xff, 0xfa,
-    0x4f, 0x1e, 0xf3, 0x25, 0xac, 0x73, 0xe2, 0xc5, 0xff, 0xd8, 0x3f, 0xc8,
-    0x5d, 0xc3, 0xc2, 0x1a, 0xc5, 0xfc, 0x0c, 0x73, 0xcc, 0x7a, 0xc5, 0xf8,
-    0x2c, 0x3b, 0xf9, 0x62, 0xff, 0xe0, 0x7d, 0xc5, 0xee, 0x7c, 0x59, 0xe5,
-    0x8b, 0xb3, 0x8b, 0x17, 0x37, 0x96, 0x2d, 0x0d, 0x1a, 0xef, 0x8b, 0xd4,
-    0xa3, 0x11, 0x8a, 0x44, 0xe9, 0x58, 0x99, 0x17, 0x21, 0xe9, 0x5b, 0x2e,
-    0xa3, 0x8e, 0x3e, 0x0c, 0x37, 0xde, 0x1d, 0x91, 0xe5, 0xf1, 0x1a, 0x12,
-    0x7f, 0xa3, 0x6a, 0xbf, 0xe6, 0xf0, 0x79, 0xf6, 0x62, 0x58, 0xae, 0xb1,
-    0x78, 0x53, 0x27, 0x54, 0xc5, 0x08, 0x9b, 0xff, 0xd9, 0xa8, 0xdb, 0x9e,
-    0x27, 0xef, 0x86, 0x79, 0x62, 0xff, 0xfd, 0x91, 0xec, 0x40, 0xdb, 0x02,
-    0x09, 0x88, 0xa5, 0x62, 0xff, 0xf6, 0x49, 0x66, 0xe5, 0x9e, 0x13, 0x04,
-    0xb1, 0x7f, 0xf1, 0x7f, 0x27, 0xb6, 0x7e, 0x06, 0x6a, 0xc5, 0xff, 0x87,
-    0xf9, 0xd1, 0x67, 0x46, 0xf2, 0xc5, 0xf7, 0xe3, 0xdc, 0xeb, 0x17, 0xa0,
-    0xfe, 0x30, 0xf9, 0xb1, 0x02, 0xa5, 0x1b, 0xf1, 0x42, 0xb2, 0xff, 0xfb,
-    0x66, 0x2f, 0x70, 0x45, 0xef, 0x7d, 0x86, 0xb1, 0x7f, 0xd8, 0x08, 0xec,
-    0x61, 0xe7, 0x16, 0x2f, 0xfe, 0x7f, 0x7f, 0x1e, 0x1c, 0xce, 0xfc, 0xb1,
-    0x50, 0x54, 0xf2, 0x35, 0x8c, 0x8c, 0xa1, 0x8a, 0x09, 0x47, 0x87, 0x77,
-    0xf1, 0x4c, 0x3f, 0xc0, 0x2c, 0x5f, 0xf0, 0x0b, 0x3d, 0xc6, 0x62, 0x58,
-    0xbf, 0xf8, 0x59, 0x16, 0x3e, 0xe5, 0x9f, 0xc5, 0x8b, 0x00, 0x68, 0xa9,
-    0xdc, 0xb8, 0x8d, 0xef, 0x1d, 0xbb, 0x58, 0xbf, 0xff, 0xa0, 0xe3, 0xcf,
-    0xe6, 0xd3, 0x07, 0xe7, 0x32, 0x3d, 0x62, 0xb4, 0x8b, 0x20, 0x1b, 0x78,
-    0x7a, 0xff, 0x85, 0x8f, 0xfe, 0x1d, 0xf8, 0xb1, 0x70, 0x8d, 0x58, 0xbf,
-    0xd9, 0xf1, 0xfe, 0x4b, 0x65, 0x8b, 0x0f, 0xe7, 0x9a, 0x10, 0xcd, 0xf7,
-    0xf0, 0x6e, 0xb1, 0x52, 0x79, 0x7c, 0x29, 0xa9, 0x6e, 0xd0, 0xa1, 0x0b,
-    0xe1, 0xc6, 0xf5, 0x93, 0x9b, 0x4f, 0x1f, 0xd4, 0x7a, 0x7c, 0x45, 0xfa,
-    0x86, 0xf1, 0xe1, 0x67, 0xf9, 0x60, 0xad, 0x0c, 0x20, 0x17, 0x94, 0xf2,
-    0x4f, 0x11, 0x3d, 0x2b, 0x2c, 0x51, 0xdb, 0x84, 0x60, 0x1c, 0x34, 0x6f,
-    0xf6, 0x0f, 0x6d, 0x0a, 0x40, 0xb1, 0x7f, 0xfc, 0x06, 0xfe, 0x00, 0x0d,
-    0xac, 0xe9, 0xfc, 0x58, 0xbf, 0xff, 0x7b, 0x84, 0x21, 0x77, 0x0e, 0x0f,
-    0xf8, 0xfe, 0x58, 0xbf, 0xff, 0x73, 0x07, 0x3d, 0xc3, 0x99, 0xf7, 0xd7,
-    0xd9, 0x62, 0xb4, 0x99, 0xa1, 0xcd, 0x49, 0x47, 0xcb, 0x17, 0xf4, 0x35,
-    0xa9, 0x3f, 0x16, 0x2a, 0x4f, 0xb3, 0xb3, 0xdb, 0xfd, 0x3e, 0xe0, 0xff,
-    0x24, 0xb1, 0x7f, 0xd0, 0xcf, 0x3f, 0x70, 0x29, 0x58, 0xbc, 0x4e, 0x31,
-    0x9f, 0x67, 0x8c, 0xec, 0x75, 0x8b, 0xf0, 0x1c, 0xa1, 0xc5, 0x8a, 0xec,
-    0xdd, 0x78, 0x4a, 0xb1, 0x11, 0xce, 0xd9, 0x7e, 0x89, 0xfe, 0xe7, 0x58,
-    0xbf, 0xbd, 0xcf, 0xcb, 0x69, 0x62, 0xbe, 0x7a, 0xe4, 0x53, 0x70, 0x38,
-    0xb1, 0x78, 0x85, 0xc5, 0x8b, 0xfb, 0xdf, 0x98, 0xa7, 0xa2, 0xc5, 0x6e,
-    0x79, 0xce, 0x3b, 0x7f, 0xc3, 0xc3, 0x96, 0x7b, 0xee, 0xb1, 0x7b, 0x52,
-    0x35, 0x8b, 0xf1, 0x4e, 0xec, 0xcb, 0x17, 0x67, 0x0d, 0x3c, 0x4f, 0x0e,
-    0xdf, 0x05, 0x9e, 0xe2, 0xc5, 0xe3, 0x5f, 0xeb, 0x17, 0xe1, 0x68, 0x11,
-    0xbf, 0x5d, 0xac, 0x56, 0x26, 0x88, 0xe4, 0x5f, 0x7c, 0x62, 0xe0, 0x12,
-    0x70, 0x7a, 0xb1, 0x51, 0x03, 0x90, 0xfe, 0x3a, 0xab, 0xf8, 0xa0, 0x59,
-    0x80, 0x58, 0xbf, 0xb0, 0x66, 0x73, 0xf2, 0xb1, 0x52, 0x7b, 0x7a, 0x2c,
-    0xbe, 0xe1, 0x4e, 0xcb, 0x17, 0xfd, 0xe1, 0x19, 0x99, 0xbe, 0x4a, 0xc5,
-    0x68, 0xf7, 0x48, 0x8e, 0xff, 0xfd, 0xd4, 0x59, 0xd1, 0xb8, 0xf8, 0x5f,
-    0x8f, 0x73, 0xac, 0x5a, 0x18, 0x7f, 0x8e, 0x43, 0x7a, 0x70, 0x96, 0x2e,
-    0x92, 0x58, 0xad, 0x1b, 0x13, 0x8d, 0xdf, 0x1b, 0xa9, 0x3a, 0xc5, 0xfa,
-    0x62, 0xcc, 0xdd, 0x62, 0xf4, 0x6f, 0x1b, 0x46, 0xeb, 0x17, 0x60, 0x4b,
-    0x17, 0xf8, 0x6c, 0xe3, 0x17, 0xb8, 0xb1, 0x5b, 0x1e, 0x66, 0x0c, 0x5d,
-    0x9b, 0x2c, 0x51, 0x89, 0x90, 0xc9, 0x0e, 0xc4, 0x86, 0x94, 0x84, 0xf3,
-    0x1c, 0x45, 0x7f, 0xce, 0x45, 0x83, 0xfc, 0xf4, 0x58, 0xbf, 0xc2, 0xe7,
-    0xda, 0x03, 0x75, 0x8b, 0xff, 0xff, 0xf4, 0x96, 0xde, 0xe6, 0x05, 0xf9,
-    0xe9, 0xe2, 0x9e, 0xff, 0x8c, 0x3c, 0xc3, 0xac, 0x5f, 0xe7, 0x2f, 0x43,
-    0x35, 0x8b, 0x17, 0xf8, 0x6d, 0x0f, 0x71, 0x80, 0xb1, 0x79, 0xe4, 0xeb,
-    0x17, 0xfd, 0x8d, 0xae, 0x9e, 0xc7, 0xdd, 0x62, 0xe9, 0xdf, 0x11, 0x17,
-    0xa3, 0x42, 0x1c, 0xad, 0x93, 0x7c, 0x84, 0x21, 0x4a, 0x17, 0xb7, 0xff,
-    0x8f, 0x83, 0xf7, 0xc4, 0x03, 0x70, 0xbc, 0xb1, 0x7f, 0x99, 0x8d, 0xcd,
-    0x67, 0x96, 0x2f, 0xed, 0x7d, 0x8e, 0xfc, 0x58, 0xbf, 0x7f, 0xed, 0xb4,
-    0xfc, 0xf8, 0x43, 0x33, 0xbf, 0xf3, 0x6b, 0x3a, 0x63, 0x8f, 0xee, 0xb1,
-    0x58, 0x7f, 0xe0, 0x40, 0xbf, 0xff, 0xb8, 0xfc, 0xe4, 0x99, 0x83, 0x68,
-    0x0f, 0x58, 0x75, 0x8a, 0xc4, 0xea, 0x4f, 0x19, 0x67, 0x88, 0x6f, 0xfc,
-    0xc0, 0xd4, 0x97, 0xbf, 0x90, 0x58, 0xbf, 0xfc, 0x0c, 0x72, 0xf6, 0x1d,
-    0xbc, 0x06, 0x58, 0xa9, 0x55, 0x41, 0x91, 0xf2, 0x39, 0xb0, 0x8f, 0xaf,
-    0xef, 0xb1, 0x6d, 0x83, 0x58, 0xbd, 0x9f, 0x65, 0x8b, 0xff, 0x70, 0x7f,
-    0x98, 0xa0, 0xfa, 0x82, 0xc5, 0xe1, 0x08, 0x96, 0x2f, 0xcf, 0xff, 0xe0,
-    0xd6, 0x29, 0x60, 0x67, 0x8b, 0xc1, 0xda, 0xed, 0x16, 0x11, 0x42, 0x1a,
-    0xff, 0xe2, 0x99, 0x07, 0x32, 0x3f, 0x42, 0xe8, 0xb1, 0x46, 0x26, 0xda,
-    0x32, 0xe6, 0x86, 0x60, 0x0a, 0xaf, 0xfd, 0x90, 0xfb, 0x40, 0xcf, 0x41,
-    0xd6, 0x2f, 0xff, 0x45, 0xf7, 0xfe, 0x6e, 0xc7, 0x2c, 0xe8, 0xb1, 0x7e,
-    0x2c, 0x00, 0xb8, 0xb1, 0x7f, 0xa7, 0xdf, 0xc7, 0x26, 0x58, 0xa9, 0x45,
-    0x36, 0xc9, 0xba, 0x28, 0xbe, 0x61, 0xe7, 0x16, 0x2f, 0xb3, 0x60, 0xe0,
-    0xb1, 0x70, 0x23, 0xb0, 0xf1, 0xc8, 0x8a, 0xf4, 0x7b, 0x9d, 0x62, 0xff,
-    0x81, 0xec, 0x71, 0xe1, 0x44, 0xb1, 0xf3, 0x41, 0x7c, 0x4d, 0xa3, 0x56,
-    0x2f, 0x30, 0x39, 0x27, 0xd8, 0xe9, 0x35, 0x29, 0xb1, 0xe3, 0xbb, 0x42,
-    0xee, 0xff, 0x43, 0xdf, 0xcd, 0x4f, 0x96, 0x2f, 0xe0, 0xb3, 0x7d, 0xf0,
-    0x25, 0x8b, 0xba, 0xde, 0xb1, 0x62, 0xed, 0xfa, 0x2c, 0x58, 0x0b, 0x17,
-    0xff, 0xa1, 0xcc, 0xd4, 0xf0, 0xb0, 0x02, 0xe2, 0xc5, 0x61, 0xee, 0x30,
-    0x95, 0x46, 0x88, 0xb9, 0x92, 0x2f, 0xbb, 0xd6, 0x26, 0x3f, 0xe8, 0x75,
-    0xdf, 0xff, 0xb2, 0x7f, 0x3d, 0x3f, 0x31, 0xe6, 0x37, 0x98, 0xd5, 0x8b,
-    0xff, 0xd9, 0xd4, 0x03, 0xcc, 0x5e, 0x71, 0x6b, 0x8b, 0x17, 0xff, 0x3e,
-    0x8b, 0x06, 0xfd, 0x18, 0x80, 0xb1, 0x7f, 0x66, 0x17, 0xa3, 0xb1, 0x62,
-    0xf7, 0xdf, 0x4b, 0x14, 0x73, 0xcc, 0xeb, 0xcb, 0xef, 0xfe, 0xe7, 0xa6,
-    0x74, 0x08, 0x8b, 0x02, 0x58, 0xbe, 0x00, 0x18, 0x6b, 0x17, 0x67, 0x6b,
-    0x16, 0xfe, 0x1b, 0xb7, 0x23, 0xae, 0xd1, 0x9a, 0xc4, 0xe0, 0x84, 0x0d,
-    0xe3, 0x60, 0x25, 0x8b, 0x1d, 0x62, 0xe6, 0xf2, 0xc5, 0xef, 0xce, 0xb6,
-    0x35, 0x27, 0x12, 0xbf, 0xc2, 0x62, 0xfe, 0x34, 0x4b, 0x16, 0xee, 0x23,
-    0xe6, 0x08, 0xce, 0x9d, 0x1b, 0x2d, 0x0a, 0xea, 0x95, 0xcb, 0x6c, 0x8d,
-    0x4c, 0xd2, 0x87, 0x5b, 0x8f, 0x4f, 0x68, 0xd7, 0x4a, 0x30, 0xeb, 0xfe,
-    0x6e, 0xad, 0x61, 0x13, 0x44, 0xb1, 0x77, 0xce, 0xb1, 0x52, 0xda, 0xc6,
-    0xc2, 0x31, 0xcc, 0x95, 0x30, 0x6c, 0x24, 0x7b, 0x87, 0xd3, 0xc6, 0xf1,
-    0x1e, 0xbd, 0xa3, 0x9f, 0xce, 0x28, 0x34, 0x75, 0xe0, 0x43, 0x29, 0x49,
-    0x3c, 0x9c, 0xe9, 0x13, 0xc0, 0x47, 0x77, 0xda, 0xcf, 0xf1, 0x62, 0xff,
-    0xfb, 0x08, 0x5b, 0x1f, 0x3d, 0xcf, 0xc7, 0xb9, 0xd6, 0x2f, 0xdf, 0x93,
-    0xc8, 0x16, 0x2c, 0x4b, 0x14, 0xe6, 0xe4, 0x45, 0x17, 0xdd, 0xf2, 0x7b,
-    0x58, 0xa8, 0xd9, 0x1e, 0xb2, 0x47, 0xd7, 0xc2, 0x34, 0x88, 0x2f, 0x73,
-    0x5e, 0x58, 0xbf, 0xfd, 0xf7, 0x11, 0x6d, 0x83, 0x88, 0x42, 0xd2, 0xc5,
-    0xe8, 0xdf, 0xac, 0x8d, 0xd6, 0x2e, 0xe9, 0x1e, 0xb1, 0x61, 0xc6, 0xe7,
-    0x94, 0x11, 0x6d, 0xfa, 0x27, 0xdb, 0x3b, 0x58, 0xbd, 0xa1, 0x41, 0x62,
-    0xbb, 0x3c, 0x9f, 0x15, 0xdf, 0xc6, 0x78, 0xa4, 0xfc, 0x58, 0xbe, 0xce,
-    0x60, 0x4b, 0x17, 0xf6, 0x39, 0x10, 0xa2, 0x58, 0xad, 0x93, 0xce, 0x80,
-    0xf6, 0x42, 0x5d, 0xdd, 0xd8, 0x8c, 0x8b, 0xfc, 0x47, 0x4b, 0x17, 0xd8,
-    0x36, 0x82, 0xc5, 0xf3, 0x6b, 0x59, 0x1e, 0x6b, 0x83, 0x0c, 0xbc, 0x58,
-    0x05, 0x8b, 0x4a, 0xc5, 0x00, 0xd6, 0xf8, 0x72, 0xe6, 0xf2, 0xc5, 0x68,
-    0xdc, 0x7c, 0x86, 0xf4, 0xeb, 0x8b, 0x17, 0x81, 0x3d, 0xac, 0x51, 0xcd,
-    0xd8, 0x07, 0x6e, 0x0f, 0x4b, 0x17, 0xcf, 0xc7, 0xe8, 0xb1, 0x7f, 0x8b,
-    0x07, 0xf1, 0x77, 0xe5, 0x8a, 0xd8, 0xf6, 0x4d, 0x24, 0xbf, 0xd2, 0x72,
-    0xc0, 0x0b, 0x8b, 0x17, 0xfd, 0xac, 0xfe, 0x6c, 0x63, 0xf1, 0x62, 0xb1,
-    0x38, 0x17, 0x5c, 0xf9, 0x0b, 0x39, 0x11, 0x20, 0x8c, 0xef, 0xf4, 0x1f,
-    0x9c, 0x9d, 0x41, 0x62, 0xf9, 0x8f, 0x2e, 0xb1, 0x7f, 0x0f, 0xed, 0x0c,
-    0xe2, 0xc5, 0xef, 0x38, 0x4b, 0x14, 0x34, 0x50, 0xc4, 0x68, 0x02, 0x10,
-    0x8b, 0xaf, 0xff, 0xe9, 0xe8, 0xe4, 0x00, 0xcf, 0xe8, 0x60, 0x39, 0x84,
-    0xb1, 0x7f, 0x86, 0x2d, 0x8c, 0xdb, 0xfb, 0x2c, 0x5f, 0xfb, 0xec, 0x72,
-    0xce, 0x85, 0x9c, 0x58, 0xbf, 0x7a, 0x73, 0xb0, 0x96, 0x2a, 0x23, 0xe9,
-    0xd1, 0xfd, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x2f, 0x43, 0xce, 0xb1, 0x7f,
-    0xfe, 0x83, 0xfb, 0x9b, 0xfd, 0xfd, 0xdc, 0x1f, 0xdc, 0x58, 0xbf, 0xd8,
-    0x39, 0xee, 0x19, 0xe5, 0x8b, 0xdc, 0x87, 0x6b, 0x17, 0x66, 0xcb, 0x17,
-    0xe9, 0x01, 0xda, 0x06, 0x1b, 0x7d, 0x0f, 0xde, 0xdb, 0x3a, 0x96, 0x2f,
-    0xe9, 0xcf, 0x71, 0xbb, 0x58, 0xbf, 0x7c, 0x50, 0xce, 0x2c, 0x5f, 0xf7,
-    0xa7, 0xb0, 0x37, 0xfe, 0xeb, 0x17, 0xcf, 0x1d, 0x9b, 0x2c, 0x56, 0x1f,
-    0x07, 0x8e, 0xac, 0x75, 0x8b, 0xe1, 0x43, 0x38, 0x61, 0xb3, 0xe8, 0x43,
-    0x43, 0x47, 0xb9, 0x42, 0xf2, 0xf0, 0x4d, 0xb2, 0xc5, 0xd2, 0x75, 0x8a,
-    0x73, 0xdd, 0xf9, 0x3f, 0x07, 0xea, 0x57, 0x1f, 0xe0, 0x7e, 0x35, 0xdc,
-    0x85, 0x19, 0xa4, 0x7d, 0x96, 0xc4, 0x3a, 0x75, 0x9f, 0xb5, 0x91, 0xf7,
-    0x08, 0x7d, 0x1c, 0x15, 0xf7, 0xc5, 0x9e, 0x58, 0xbf, 0xf0, 0xbb, 0x87,
-    0x3f, 0x9b, 0x08, 0x96, 0x2f, 0xf1, 0x9a, 0x8f, 0x70, 0x60, 0xd6, 0x2e,
-    0xc1, 0xac, 0x5f, 0xef, 0xf7, 0x0e, 0x14, 0xf6, 0xb1, 0x58, 0x79, 0xae,
-    0x2f, 0x73, 0x6e, 0xb1, 0x7e, 0x37, 0x05, 0xad, 0x96, 0x29, 0x8f, 0x0c,
-    0x43, 0x14, 0xe9, 0xb7, 0x68, 0x8c, 0xe8, 0x5e, 0x84, 0x2f, 0x53, 0x1d,
-    0xa3, 0x23, 0x78, 0xc1, 0x0c, 0x3a, 0xc7, 0x7e, 0xb6, 0x18, 0xd1, 0xa4,
-    0x64, 0x31, 0xb4, 0x2d, 0xfa, 0xe4, 0x20, 0xba, 0xea, 0x5b, 0x1a, 0xe1,
-    0x2b, 0x34, 0x86, 0x4d, 0xa5, 0x8d, 0x42, 0x53, 0x08, 0xe9, 0xb2, 0xb9,
-    0x5f, 0x1f, 0x9b, 0x3c, 0xb3, 0xbd, 0x26, 0xc3, 0xb9, 0x4f, 0x0f, 0x2b,
-    0x46, 0x3e, 0x10, 0xf1, 0x52, 0x55, 0x35, 0x48, 0xe8, 0x3c, 0xba, 0x8f,
-    0xdb, 0xc2, 0x16, 0x9e, 0x64, 0x04, 0xfd, 0x6f, 0x5f, 0x0b, 0x62, 0xa6,
-    0x07, 0xf2, 0xbc, 0x4b, 0xf5, 0x70, 0xde, 0x29, 0x40, 0x3d, 0x25, 0x0c,
-    0x05, 0x09, 0x58, 0xe9, 0x44, 0x21, 0xce, 0xba, 0x75, 0x4a, 0x21, 0xbb,
-    0x9f, 0x58, 0xbd, 0xd1, 0xe5, 0x62, 0xd1, 0x92, 0x6d, 0x86, 0x31, 0x7f,
-    0xd1, 0x9c, 0xd4, 0x8b, 0xc2, 0x3a, 0xc5, 0xff, 0xe8, 0x72, 0x30, 0x3c,
-    0xd7, 0xde, 0x28, 0x1d, 0x62, 0xa0, 0x88, 0xfe, 0xcf, 0xab, 0x48, 0xdc,
-    0x68, 0x5c, 0x5f, 0xdd, 0x4e, 0x32, 0x98, 0x96, 0x2f, 0x4b, 0x12, 0xc5,
-    0xf6, 0x7d, 0xbc, 0xb1, 0x6e, 0xb7, 0x0f, 0xbb, 0xe6, 0x24, 0x37, 0x7f,
-    0x75, 0xc8, 0xd1, 0xbd, 0x9d, 0x4b, 0x17, 0x75, 0xff, 0x58, 0xbf, 0xfa,
-    0x4e, 0x52, 0x64, 0x50, 0x9d, 0x6c, 0xb1, 0x7f, 0xfa, 0x74, 0x28, 0xa2,
-    0x7f, 0xb9, 0xd8, 0x6b, 0x17, 0xf6, 0x1c, 0xc8, 0x8a, 0x25, 0x8b, 0xfa,
-    0x41, 0xc9, 0xd0, 0xd6, 0x2f, 0xcd, 0xee, 0x4c, 0x7a, 0xc5, 0x0d, 0x11,
-    0x5f, 0x31, 0x22, 0xeb, 0xfd, 0xc7, 0x3c, 0xef, 0x87, 0x58, 0xbf, 0x07,
-    0xd5, 0x24, 0x05, 0x8b, 0xfb, 0x4c, 0x0e, 0x6a, 0x56, 0x2b, 0xe7, 0xb5,
-    0xc2, 0xcb, 0xe8, 0x06, 0x16, 0x2c, 0x5f, 0xff, 0xf8, 0xbd, 0xc9, 0x78,
-    0x67, 0x51, 0x7a, 0x7f, 0x26, 0x8a, 0x7a, 0x96, 0x2f, 0x75, 0x0e, 0x56,
-    0x2b, 0x11, 0x6c, 0xc4, 0xa2, 0x71, 0xbf, 0x0b, 0xd1, 0x49, 0xab, 0x17,
-    0xfd, 0x3b, 0x72, 0x27, 0x3b, 0x44, 0xb1, 0x43, 0x56, 0x8f, 0xba, 0x3b,
-    0xc3, 0x5a, 0x3c, 0xbe, 0x28, 0x47, 0x7e, 0x1b, 0x04, 0x5d, 0xd4, 0x57,
-    0x7f, 0xff, 0xf6, 0x75, 0x13, 0x6f, 0xd5, 0x19, 0xc7, 0x08, 0xb3, 0x86,
-    0x37, 0x85, 0x2b, 0x16, 0xfa, 0xc5, 0x9d, 0x62, 0x8d, 0x34, 0x60, 0x12,
-    0xad, 0x23, 0x07, 0x90, 0x9f, 0xbf, 0xff, 0xfc, 0x19, 0x92, 0xff, 0x9e,
-    0xa9, 0x3c, 0x7b, 0xff, 0x01, 0xc3, 0x0c, 0xfc, 0x72, 0xc5, 0xfd, 0xbb,
-    0x6b, 0x6c, 0x09, 0x62, 0xb1, 0x1b, 0xdd, 0x94, 0x3c, 0x21, 0x6f, 0xa2,
-    0xf3, 0x0d, 0x62, 0xfe, 0x96, 0xdb, 0x60, 0xce, 0xb1, 0x4c, 0x7a, 0xa4,
-    0x49, 0x7f, 0xfe, 0xfe, 0x16, 0x1b, 0xf6, 0x87, 0xc2, 0x60, 0xce, 0xb1,
-    0x6e, 0xd6, 0x2f, 0xfa, 0x5f, 0x98, 0xff, 0x9f, 0x2c, 0x54, 0x0f, 0x2b,
-    0xe2, 0x77, 0xf4, 0x3f, 0x9e, 0xfb, 0xac, 0x5f, 0x6e, 0xcd, 0xba, 0xa4,
-    0xd6, 0x2f, 0xf3, 0xef, 0x9a, 0x83, 0x7d, 0x62, 0xff, 0xd1, 0xfc, 0x73,
-    0xf3, 0xf2, 0x5e, 0x58, 0xbf, 0x37, 0x89, 0x80, 0xb1, 0x7c, 0xfa, 0xfb,
-    0x18, 0x89, 0xdc, 0x34, 0xe2, 0x15, 0xff, 0x31, 0xf8, 0xf9, 0xd1, 0xb4,
-    0xb1, 0x7c, 0xfa, 0x8f, 0x1a, 0xc5, 0x41, 0x53, 0x33, 0xc2, 0x8a, 0x3c,
-    0x8b, 0x45, 0xdf, 0x86, 0x71, 0x23, 0x74, 0x3a, 0xbf, 0x64, 0x1f, 0xe2,
-    0x58, 0xbf, 0x9a, 0x31, 0xf6, 0xf0, 0x16, 0x2e, 0x3f, 0x45, 0x8a, 0x23,
-    0xcc, 0x11, 0x95, 0xf0, 0xc4, 0xdb, 0x2c, 0x5f, 0xe1, 0x3f, 0xf6, 0x62,
-    0x1a, 0xc5, 0x49, 0xec, 0x40, 0x92, 0xef, 0x4a, 0xc5, 0xff, 0x89, 0xb5,
-    0x31, 0x19, 0x9a, 0x75, 0x8b, 0xe7, 0xd9, 0xb8, 0xb1, 0x7f, 0xfa, 0x62,
-    0xd3, 0x82, 0x5f, 0xa8, 0x79, 0xc5, 0x8b, 0x73, 0xe7, 0xe0, 0x44, 0x77,
-    0xf3, 0x9d, 0xa2, 0xcf, 0xac, 0x5f, 0xf8, 0x26, 0x26, 0xe7, 0xd8, 0x1c,
-    0x58, 0xbe, 0xe7, 0x24, 0xeb, 0x15, 0x27, 0xc4, 0xc7, 0xf5, 0xda, 0x73,
-    0xae, 0x2f, 0x14, 0x2b, 0xce, 0x4f, 0xf8, 0x48, 0x5f, 0x67, 0x51, 0x79,
-    0x62, 0xe9, 0x09, 0x62, 0x80, 0x6f, 0x42, 0x25, 0xbf, 0xc2, 0x2c, 0xea,
-    0x70, 0x9d, 0x62, 0xfb, 0x8c, 0x5b, 0xac, 0x57, 0xcf, 0x67, 0xa8, 0xda,
-    0xff, 0x17, 0x9c, 0xd2, 0x63, 0xac, 0x5f, 0xd2, 0x40, 0xea, 0xcd, 0x96,
-    0x29, 0x8f, 0x90, 0x23, 0x3b, 0xe6, 0xea, 0x9d, 0x2c, 0x57, 0xcf, 0x1c,
-    0x22, 0x2b, 0xa7, 0xcb, 0x17, 0xff, 0x4f, 0x83, 0xf3, 0x90, 0xa1, 0x9c,
-    0x58, 0xa9, 0x4f, 0x2b, 0x1e, 0xde, 0x1a, 0x11, 0x11, 0xe8, 0x5e, 0xff,
-    0xba, 0x49, 0x7a, 0x30, 0x2c, 0xfa, 0xc5, 0xd2, 0x75, 0x8a, 0xc3, 0xd6,
-    0xd1, 0xfd, 0xfd, 0xfc, 0xe4, 0xed, 0xd4, 0xb1, 0x7f, 0xf8, 0x72, 0x72,
-    0x93, 0x22, 0x84, 0xeb, 0x65, 0x8b, 0x80, 0x35, 0x8b, 0xed, 0xd9, 0xb7,
-    0x54, 0x90, 0x65, 0xff, 0xef, 0xcf, 0xdc, 0xdc, 0xdf, 0xf2, 0x4c, 0xb1,
-    0x5a, 0x3f, 0xbe, 0x18, 0xdf, 0x66, 0xf9, 0xda, 0xc5, 0xa3, 0x25, 0x32,
-    0x61, 0xa6, 0xe4, 0x24, 0xfe, 0x45, 0x7e, 0xd8, 0x3d, 0xa7, 0x65, 0x8a,
-    0x81, 0xfb, 0xb2, 0x55, 0xff, 0x7b, 0xf9, 0x0f, 0xb1, 0x0d, 0x62, 0xff,
-    0x45, 0x26, 0xc7, 0xb0, 0x5e, 0x58, 0xa2, 0x3f, 0x3f, 0x1c, 0xd6, 0x2a,
-    0x84, 0x68, 0xf3, 0xc5, 0x09, 0x4b, 0xe7, 0xdb, 0x34, 0xb1, 0x7f, 0xf0,
-    0x03, 0xf8, 0x41, 0xf8, 0x3e, 0xa6, 0x02, 0xc5, 0xfe, 0xea, 0x60, 0x46,
-    0x4f, 0x02, 0x58, 0xae, 0xd1, 0x59, 0xa2, 0x3f, 0xa7, 0x5e, 0x8a, 0x7c,
-    0xb1, 0x7c, 0xfe, 0x9e, 0x2c, 0x5f, 0x0b, 0xd3, 0xc5, 0x8b, 0xba, 0xa5,
-    0x62, 0xa5, 0x15, 0xd8, 0x63, 0xf1, 0xe2, 0x22, 0x11, 0x1d, 0xb7, 0x58,
-    0xbf, 0xbc, 0xe3, 0xc2, 0x82, 0xc5, 0xff, 0x0e, 0x75, 0xb0, 0x8c, 0xe4,
-    0x16, 0x2f, 0x87, 0xfc, 0x09, 0x62, 0xb0, 0xf8, 0x5c, 0xf6, 0xf6, 0xb3,
-    0xcb, 0x17, 0xfb, 0x3f, 0x9e, 0xfb, 0x1d, 0x62, 0xfe, 0xc2, 0xdd, 0x88,
-    0x0b, 0x14, 0x62, 0x67, 0xd8, 0x27, 0xbc, 0x23, 0x98, 0x80, 0x87, 0x78,
-    0x67, 0x70, 0x1d, 0x62, 0xf1, 0xb3, 0xc5, 0x8b, 0xfd, 0xe2, 0xc0, 0x31,
-    0x01, 0x62, 0xf3, 0x16, 0xf8, 0x7a, 0x01, 0x8f, 0x51, 0xa8, 0x9a, 0x13,
-    0x3d, 0xfe, 0x84, 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xfb, 0xb8, 0x4e, 0x78,
-    0xcc, 0x58, 0xbd, 0xbc, 0xee, 0xb1, 0x52, 0x88, 0xac, 0x36, 0x63, 0x5b,
-    0xdc, 0x9d, 0x2c, 0x5f, 0x67, 0x51, 0x01, 0x62, 0xa2, 0x3c, 0x23, 0x8e,
-    0xde, 0xc3, 0xba, 0xc5, 0xff, 0xe7, 0xe6, 0xc1, 0xf9, 0xc8, 0x50, 0xce,
-    0x2c, 0x5e, 0x73, 0x4e, 0xb1, 0x7f, 0xa7, 0x7f, 0x14, 0xe7, 0x6b, 0x14,
-    0x34, 0x4f, 0x69, 0x30, 0xe3, 0xd7, 0xbd, 0x9f, 0x58, 0xbf, 0x8b, 0xd3,
-    0xa7, 0x3a, 0xc5, 0xff, 0x9f, 0xc2, 0xd3, 0x70, 0xfe, 0xe2, 0xc5, 0x49,
-    0xf6, 0xb1, 0x6d, 0xde, 0x75, 0x8b, 0xff, 0xec, 0x03, 0x6b, 0x3a, 0x60,
-    0xf0, 0xf3, 0xba, 0xc5, 0xdb, 0x75, 0xeb, 0x15, 0x2a, 0x8f, 0x46, 0x47,
-    0x90, 0xba, 0x34, 0xc3, 0xf0, 0x8a, 0x62, 0x02, 0x17, 0x12, 0x8d, 0xc7,
-    0x89, 0x62, 0xf8, 0x02, 0x28, 0x96, 0x2e, 0x7d, 0xd6, 0x2a, 0x4d, 0xe4,
-    0x71, 0x25, 0xbe, 0x61, 0xfc, 0x46, 0x2a, 0xdf, 0xc5, 0x02, 0xcc, 0x02,
-    0xc5, 0xfd, 0xae, 0x66, 0xa7, 0x8b, 0x16, 0x02, 0xc5, 0xb6, 0x58, 0xa9,
-    0x34, 0xb8, 0x25, 0x6f, 0x2c, 0x5b, 0x87, 0x36, 0x3e, 0x1f, 0xa9, 0x46,
-    0xbb, 0x96, 0x34, 0x21, 0x2f, 0xd1, 0x01, 0x8a, 0x25, 0x8b, 0x89, 0xd6,
-    0x2a, 0x4f, 0x03, 0x72, 0xab, 0xfe, 0x29, 0x3c, 0xb8, 0xf0, 0xeb, 0x17,
-    0xcc, 0x0c, 0xd2, 0xc5, 0xfe, 0x07, 0x35, 0x30, 0x6d, 0x2c, 0x5f, 0x4c,
-    0x60, 0xc6, 0xb1, 0x7f, 0xb0, 0x5b, 0xfe, 0x75, 0x8b, 0x17, 0xfd, 0xa9,
-    0x08, 0xb0, 0x6f, 0xa5, 0x8b, 0xff, 0xec, 0xff, 0xd9, 0xfd, 0x25, 0x9f,
-    0xcd, 0xd6, 0x2b, 0x15, 0x82, 0x9b, 0x18, 0x1b, 0xb9, 0x44, 0x45, 0xf3,
-    0x76, 0x22, 0x23, 0x4e, 0x13, 0x08, 0xd2, 0x38, 0xe6, 0xff, 0xfd, 0x91,
-    0x85, 0x8e, 0x53, 0x13, 0x10, 0x9f, 0x65, 0x8b, 0xf9, 0xfc, 0x28, 0x9f,
-    0xcb, 0x14, 0x34, 0x42, 0xc4, 0xad, 0x7f, 0xf3, 0x75, 0x73, 0x3a, 0x89,
-    0xbd, 0x9d, 0x4b, 0x17, 0xf9, 0xb6, 0x6c, 0xf6, 0x1d, 0x62, 0xff, 0xff,
-    0xed, 0x01, 0x87, 0x3a, 0xea, 0xe6, 0x75, 0x10, 0x26, 0x20, 0xfa, 0x84,
-    0x75, 0x8b, 0xff, 0xf9, 0xbd, 0x87, 0xc7, 0x8a, 0x1f, 0xc1, 0x8b, 0xdc,
-    0x58, 0xbf, 0xfe, 0xf3, 0x04, 0x58, 0xe0, 0x8b, 0x3e, 0x19, 0x2c, 0x5f,
-    0xff, 0x71, 0xf6, 0x6e, 0x31, 0x37, 0xbf, 0x31, 0x2c, 0x5f, 0xf9, 0x88,
-    0x19, 0xe9, 0x27, 0x02, 0xc5, 0x4a, 0x76, 0xe3, 0x7e, 0xfa, 0xe7, 0x94,
-    0x63, 0x94, 0x2f, 0xff, 0xfa, 0x0e, 0x13, 0x7e, 0x47, 0xbb, 0x6d, 0xe2,
-    0xcd, 0xb5, 0x2b, 0x16, 0x8c, 0x8d, 0x9d, 0x0a, 0xe7, 0x5d, 0x9c, 0x75,
-    0xd4, 0xf2, 0x65, 0xb2, 0x42, 0x51, 0x38, 0xe1, 0x13, 0x92, 0xa1, 0x8d,
-    0x73, 0xdd, 0xd3, 0xb7, 0x97, 0x8e, 0xfa, 0x29, 0x4b, 0xba, 0x85, 0x21,
-    0xe5, 0x52, 0xfe, 0x39, 0x56, 0x8e, 0x14, 0x10, 0xf6, 0x28, 0x57, 0x72,
-    0x55, 0x67, 0xa5, 0xfb, 0x8a, 0x31, 0x90, 0x89, 0x23, 0x93, 0x03, 0x8f,
-    0xab, 0xa9, 0x36, 0xfb, 0xff, 0xcd, 0x96, 0x2f, 0xff, 0x64, 0x7b, 0xe1,
-    0xf3, 0xf8, 0xc5, 0xba, 0xc5, 0xc6, 0xc6, 0x31, 0xf7, 0x91, 0x25, 0xff,
-    0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x91, 0x65, 0xfe, 0x13, 0xc1,
-    0xfe, 0xfd, 0x16, 0x2d, 0x18, 0x74, 0x42, 0xf1, 0x42, 0xff, 0x46, 0x66,
-    0xb7, 0x66, 0xdd, 0x52, 0x75, 0x17, 0xff, 0xff, 0xfe, 0x8d, 0x36, 0xeb,
-    0x91, 0xaa, 0x35, 0xf5, 0xfd, 0x7f, 0x5c, 0x30, 0xcf, 0xc7, 0x46, 0x6d,
-    0xd7, 0x58, 0xd3, 0xae, 0x4f, 0x59, 0xd7, 0x80, 0xc3, 0x3f, 0x1c, 0xb1,
-    0x53, 0x1a, 0x65, 0x7c, 0x25, 0x38, 0xe4, 0x21, 0x37, 0x8c, 0x71, 0xe9,
-    0x65, 0x67, 0xa6, 0xab, 0xff, 0x30, 0x5b, 0xa6, 0x9c, 0x0d, 0x05, 0xa1,
-    0xf1, 0x29, 0x49, 0x5c, 0x85, 0xaf, 0x8b, 0x23, 0x91, 0x6f, 0xb7, 0x66,
-    0xdd, 0x52, 0x10, 0x97, 0x4e, 0x96, 0x2b, 0x47, 0x91, 0xe3, 0x1b, 0x6c,
-    0xb1, 0x7f, 0xa4, 0xf2, 0xe3, 0xc3, 0xac, 0x5e, 0xfb, 0x92, 0xc5, 0xd8,
-    0x35, 0x8b, 0x6e, 0xb1, 0x5b, 0x9e, 0x37, 0xc7, 0x08, 0x5e, 0xfb, 0x3a,
-    0x3e, 0x96, 0x2f, 0xb3, 0x61, 0x12, 0xc5, 0xf3, 0x7c, 0x72, 0xb1, 0x7c,
-    0xfa, 0xce, 0xd6, 0x2b, 0x13, 0x68, 0x34, 0x8b, 0x71, 0x3e, 0xde, 0x23,
-    0xcb, 0xfe, 0x49, 0xe2, 0x38, 0xe2, 0x2b, 0xff, 0xb6, 0xc0, 0xa3, 0x38,
-    0x31, 0x36, 0xa0, 0xb1, 0x7f, 0xff, 0x8b, 0x3d, 0xc3, 0xcc, 0x63, 0x78,
-    0xb2, 0x1f, 0x68, 0x2c, 0x5f, 0x14, 0x83, 0x8b, 0x17, 0xf6, 0x85, 0xfe,
-    0x98, 0x35, 0x8b, 0xd9, 0x83, 0x58, 0xbf, 0xff, 0xfd, 0xe7, 0x21, 0x43,
-    0x38, 0x59, 0xb0, 0x70, 0x33, 0x82, 0x01, 0xe6, 0x0b, 0x17, 0x7a, 0x32,
-    0x24, 0x75, 0x68, 0x88, 0x8c, 0x43, 0x1c, 0xa8, 0xc5, 0x4b, 0xd0, 0x7a,
-    0x1a, 0x5e, 0x46, 0x99, 0x7f, 0xf4, 0x67, 0x5f, 0x25, 0xe0, 0xce, 0x59,
-    0xb2, 0xc5, 0xa3, 0x96, 0x2f, 0xa7, 0xf2, 0x75, 0x8b, 0xed, 0xd9, 0xb7,
-    0x54, 0x86, 0xc5, 0x6e, 0x7a, 0x7a, 0x22, 0xbf, 0xf7, 0x33, 0xef, 0xc1,
-    0x6c, 0x19, 0xd6, 0x2f, 0x69, 0xb6, 0x58, 0xb4, 0x60, 0xd1, 0xd7, 0x8d,
-    0x1c, 0x23, 0xf2, 0x15, 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x9b,
-    0x2e, 0x68, 0x2c, 0x5f, 0x4f, 0x49, 0x25, 0x8b, 0xed, 0xd9, 0xb7, 0x54,
-    0x94, 0x05, 0x0c, 0xfa, 0xf7, 0x17, 0xd1, 0x1d, 0xfa, 0x40, 0xf3, 0x05,
-    0x8b, 0x04, 0xb1, 0x4b, 0x16, 0xce, 0xcb, 0xf8, 0x84, 0xef, 0xbf, 0xf9,
-    0x1a, 0xc5, 0xa3, 0x31, 0x18, 0x0e, 0x61, 0xf4, 0x60, 0xc9, 0xef, 0xf4,
-    0x66, 0x6b, 0x76, 0x6d, 0xd5, 0x25, 0x31, 0x70, 0x1d, 0x62, 0xfc, 0x2e,
-    0xd8, 0x5a, 0x58, 0xb7, 0x16, 0x2f, 0x09, 0xf4, 0xb1, 0x7f, 0x7f, 0x3a,
-    0x9f, 0x02, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0x60, 0x5f, 0x7a, 0x7b,
-    0x82, 0xc5, 0x44, 0x88, 0x6d, 0x18, 0x9c, 0xc6, 0xf8, 0x21, 0x8b, 0x4b,
-    0x16, 0x1a, 0xc5, 0x39, 0xb7, 0xd1, 0x2d, 0xb6, 0x58, 0xb8, 0x38, 0x2c,
-    0x5e, 0x62, 0xdd, 0x62, 0xa4, 0xf2, 0x40, 0x27, 0xe1, 0x9b, 0xb8, 0x4b,
-    0x17, 0x0c, 0xd5, 0x8b, 0xd2, 0x07, 0x58, 0xb8, 0xfc, 0x58, 0xbf, 0x34,
-    0x3c, 0xfb, 0x2c, 0x5f, 0xb9, 0xc2, 0xc0, 0x2c, 0x58, 0x6b, 0x14, 0xe7,
-    0xc6, 0xc5, 0x21, 0x94, 0x5c, 0xf1, 0xcb, 0x16, 0xd2, 0xc5, 0xe7, 0x8e,
-    0x69, 0x35, 0x82, 0x1a, 0xbf, 0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x87,
-    0xe5, 0xc2, 0xe2, 0xc5, 0xe2, 0x91, 0xac, 0x5f, 0x4c, 0x1b, 0xcb, 0x15,
-    0x28, 0xce, 0x81, 0x98, 0xd1, 0x5c, 0x60, 0x87, 0x2f, 0x61, 0x41, 0x62,
-    0xf3, 0x94, 0x16, 0x2b, 0x0d, 0xc7, 0x07, 0x2d, 0x2b, 0x16, 0xd9, 0x62,
-    0xfc, 0xfc, 0xf0, 0x99, 0x62, 0xf7, 0xc5, 0xda, 0xc5, 0xed, 0x48, 0x16,
-    0x2e, 0x36, 0x56, 0x2f, 0x37, 0x7c, 0x58, 0xa9, 0x45, 0x68, 0xc4, 0xf7,
-    0x28, 0x38, 0xff, 0x87, 0x42, 0x18, 0xb4, 0x7a, 0xc5, 0x41, 0x32, 0xbc,
-    0x85, 0xf1, 0xab, 0x17, 0xa2, 0x16, 0x96, 0x2c, 0x4b, 0x17, 0xde, 0x29,
-    0x3a, 0xc5, 0x0c, 0xd9, 0xb8, 0x8d, 0xfe, 0x29, 0x03, 0x78, 0x52, 0xb1,
-    0x52, 0x8a, 0x4f, 0xa9, 0x78, 0x82, 0xfb, 0xe5, 0x9b, 0x2c, 0x5f, 0xdd,
-    0xc1, 0xa0, 0xe4, 0xb1, 0x7a, 0x4a, 0x25, 0x8b, 0xd0, 0x9e, 0xd6, 0x2e,
-    0x60, 0x2c, 0x54, 0x46, 0xd7, 0x43, 0xd7, 0xd3, 0xc7, 0x89, 0x62, 0xfd,
-    0x9d, 0x3e, 0xd0, 0x58, 0xa9, 0x4c, 0x4b, 0x08, 0xcd, 0x2e, 0x75, 0x2d,
-    0x11, 0x11, 0x1d, 0xe3, 0x5b, 0xcb, 0x17, 0x66, 0x96, 0x2f, 0x0b, 0x5b,
-    0x2c, 0x5b, 0xcb, 0x16, 0xea, 0x58, 0xac, 0x3c, 0x66, 0x1f, 0x0c, 0x4a,
-    0xe7, 0xf2, 0xc5, 0x2c, 0x51, 0xcd, 0x1f, 0x50, 0xbd, 0xb8, 0xb1, 0x47,
-    0x36, 0xc1, 0x92, 0x5d, 0xef, 0x2c, 0x5a, 0x33, 0xae, 0x32, 0x56, 0xa4,
-    0x5f, 0x62, 0xa1, 0x89, 0x64, 0x28, 0xf7, 0x68, 0xed, 0xa5, 0xcb, 0xa3,
-    0xc5, 0xf4, 0x32, 0x71, 0xcf, 0xbd, 0xb4, 0x65, 0x00, 0x7f, 0x28, 0xd2,
-    0xf9, 0x0d, 0xaf, 0x46, 0x82, 0x25, 0x50, 0x87, 0xa3, 0x97, 0x43, 0x84,
-    0x3f, 0x51, 0x15, 0xff, 0xe8, 0xc3, 0xb4, 0x23, 0x33, 0x5b, 0xb3, 0x6e,
-    0xa9, 0x1b, 0xcb, 0xff, 0x8e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4,
-    0x7e, 0x2f, 0xba, 0xd8, 0xbd, 0x8b, 0x17, 0xff, 0x70, 0x5a, 0x01, 0x8c,
-    0x42, 0xcf, 0xac, 0x5e, 0xeb, 0x23, 0x7e, 0xb1, 0x62, 0xff, 0xff, 0xbe,
-    0x2f, 0x13, 0x1b, 0xdf, 0xb5, 0x39, 0xdb, 0x3f, 0x6c, 0xb1, 0x46, 0x23,
-    0x73, 0xac, 0x46, 0xc2, 0xda, 0x8d, 0xd3, 0x3a, 0xeb, 0x23, 0x05, 0xbb,
-    0xae, 0xfa, 0xc5, 0x8b, 0xfb, 0xf9, 0x14, 0xf7, 0xc5, 0x8b, 0xf1, 0xe4,
-    0xf2, 0x1a, 0xc5, 0xf6, 0x66, 0xb8, 0xb1, 0x46, 0x22, 0x7f, 0xac, 0x24,
-    0x63, 0x00, 0x14, 0xdf, 0xf7, 0x5a, 0xd0, 0xfb, 0xf4, 0xcd, 0x96, 0x2f,
-    0xe0, 0xc3, 0xef, 0xab, 0x9d, 0xac, 0x54, 0x6e, 0x7f, 0x1d, 0x62, 0x0d,
-    0xe8, 0x4f, 0x6b, 0x17, 0xff, 0xfd, 0xbf, 0xde, 0x2f, 0xc9, 0x19, 0x9f,
-    0x6f, 0xbe, 0xb5, 0x2b, 0x16, 0x82, 0xc5, 0x75, 0x87, 0xf4, 0xcd, 0x17,
-    0xf4, 0x69, 0x2f, 0xbc, 0x9d, 0x62, 0xff, 0xf7, 0x05, 0xa0, 0x18, 0x19,
-    0x31, 0xf0, 0xeb, 0x16, 0xc5, 0x8a, 0x30, 0xf7, 0xbc, 0x9b, 0x63, 0xac,
-    0x57, 0x58, 0x6d, 0x5c, 0x8e, 0xe7, 0x3a, 0xc5, 0x46, 0xea, 0xde, 0x7a,
-    0xc8, 0x69, 0xf5, 0xb0, 0xba, 0x8d, 0x0b, 0x3a, 0xee, 0x13, 0x1d, 0x70,
-    0x9a, 0x35, 0x43, 0x1b, 0x44, 0xb7, 0xd2, 0x68, 0xe5, 0x62, 0xff, 0x0f,
-    0x3a, 0x10, 0x83, 0x95, 0x8b, 0xec, 0xdd, 0x89, 0x62, 0xf9, 0xbb, 0x84,
-    0xac, 0x5b, 0xac, 0x93, 0xfb, 0x23, 0x60, 0x88, 0xaf, 0xf8, 0xb0, 0x36,
-    0xd0, 0x0f, 0x8b, 0x17, 0xdd, 0x66, 0xdc, 0x02, 0xc5, 0xf9, 0xb6, 0xf0,
-    0x8d, 0x58, 0xbf, 0x6f, 0xa2, 0x98, 0x2c, 0x54, 0x6c, 0x8b, 0x78, 0xd6,
-    0x73, 0xa2, 0xa6, 0x2b, 0xbf, 0xf6, 0x43, 0xf2, 0x42, 0xe7, 0xdd, 0x62,
-    0xe0, 0xce, 0xb1, 0x7f, 0xf3, 0x3f, 0xa1, 0x25, 0xee, 0x6d, 0x2b, 0x17,
-    0xf6, 0x1a, 0xfe, 0x29, 0x58, 0xa8, 0xd1, 0x19, 0x1b, 0x9f, 0x7c, 0x66,
-    0x39, 0x12, 0xfa, 0x61, 0xa9, 0x58, 0xbc, 0x3c, 0x35, 0x62, 0xe8, 0x1d,
-    0x62, 0xf4, 0x6b, 0x8d, 0x23, 0x65, 0x8b, 0xf3, 0x1f, 0x53, 0xc5, 0x8a,
-    0xeb, 0x0f, 0x5b, 0x85, 0xd7, 0xc2, 0xef, 0xec, 0xb1, 0x7f, 0xdd, 0x1f,
-    0x7e, 0xb3, 0x22, 0x9f, 0x2c, 0x5f, 0xb5, 0x3f, 0x14, 0xac, 0x5c, 0x17,
-    0xd6, 0x2f, 0xba, 0xc8, 0x75, 0x9b, 0x2c, 0x5f, 0xbf, 0x9e, 0x91, 0xac,
-    0x5f, 0xb2, 0x28, 0x4f, 0x6b, 0x17, 0xfb, 0x35, 0xf7, 0x8a, 0x07, 0x58,
-    0xa3, 0x17, 0x45, 0x63, 0x78, 0x4f, 0x75, 0x90, 0xf0, 0xeb, 0x63, 0x0f,
-    0x8d, 0x11, 0xba, 0xec, 0x8a, 0x35, 0x0f, 0x46, 0xb6, 0xed, 0x89, 0xf0,
-    0x91, 0xd0, 0xa2, 0x28, 0xd0, 0xcb, 0x17, 0x91, 0x40, 0x65, 0x57, 0x05,
-    0xa5, 0x8b, 0xf7, 0xbf, 0x9d, 0x31, 0x62, 0xb4, 0x78, 0x7c, 0x19, 0xbe,
-    0xc3, 0xbf, 0x96, 0x2f, 0xee, 0x8f, 0xde, 0x66, 0xcb, 0x17, 0x61, 0x2c,
-    0x56, 0x1e, 0x3f, 0x0c, 0x6f, 0xe8, 0xda, 0x34, 0x3c, 0xe7, 0x96, 0x2f,
-    0xee, 0xb1, 0xe3, 0xbe, 0xfd, 0x7a, 0xc5, 0xfd, 0x9a, 0x7f, 0x70, 0xeb,
-    0x15, 0x1a, 0xcf, 0xa7, 0x87, 0x77, 0x16, 0xeb, 0x17, 0x8f, 0x21, 0xac,
-    0x5d, 0x21, 0xac, 0x5e, 0x88, 0xfc, 0x58, 0xad, 0xcd, 0xbf, 0x06, 0x2f,
-    0xc5, 0xef, 0xb9, 0xd6, 0x2f, 0xa2, 0x13, 0x06, 0xb1, 0x52, 0x79, 0xac,
-    0x51, 0x78, 0xf3, 0xc5, 0x8b, 0xc4, 0xdd, 0x16, 0x2f, 0x3c, 0x81, 0x62,
-    0xed, 0xf7, 0x58, 0xbf, 0xf6, 0x0f, 0xee, 0x7c, 0xe0, 0x8e, 0xb1, 0x7f,
-    0xb7, 0xfb, 0xfb, 0x30, 0xeb, 0x17, 0x66, 0x96, 0x2d, 0xba, 0xe5, 0x02,
-    0x2b, 0x0d, 0xbf, 0x41, 0x7a, 0xeb, 0x15, 0xd7, 0x75, 0xa4, 0x51, 0xb3,
-    0x4c, 0x6a, 0x21, 0x8d, 0x70, 0xa1, 0x92, 0x8c, 0x18, 0x75, 0x58, 0x9b,
-    0xf4, 0x40, 0x71, 0xd6, 0x1e, 0x00, 0xe1, 0x0d, 0x70, 0xff, 0xcd, 0x77,
-    0xfb, 0x99, 0xde, 0xe2, 0xee, 0x56, 0x2f, 0xba, 0xd8, 0xec, 0xed, 0x62,
-    0xfe, 0xfc, 0xbe, 0x9f, 0x4b, 0x15, 0x1b, 0x9e, 0xce, 0xe5, 0x97, 0xfc,
-    0x7f, 0x13, 0x00, 0x02, 0xe2, 0xc5, 0xfc, 0x42, 0x89, 0x8e, 0xeb, 0x17,
-    0xdb, 0x7d, 0xe3, 0xd6, 0x2d, 0xd6, 0x62, 0x23, 0xdc, 0xe9, 0x8b, 0xaf,
-    0xd1, 0xbf, 0x5b, 0xb6, 0x04, 0xb1, 0x7f, 0xc6, 0x7b, 0xf8, 0x7c, 0xd6,
-    0x2c, 0x5f, 0xdd, 0x75, 0x8d, 0xe3, 0x7e, 0xb7, 0x92, 0xb1, 0x7e, 0x8d,
-    0x0d, 0x37, 0x23, 0xd6, 0x2f, 0xef, 0x39, 0x05, 0x84, 0xb1, 0x77, 0x04,
-    0xb1, 0x78, 0x01, 0xf9, 0x63, 0x0b, 0x8b, 0xfc, 0x73, 0x23, 0xb0, 0x7f,
-    0x75, 0x8b, 0x41, 0x62, 0xfb, 0xad, 0xce, 0x75, 0x8b, 0x15, 0xa3, 0x7e,
-    0xc2, 0x57, 0x74, 0xdd, 0x72, 0x80, 0x96, 0xfa, 0xc5, 0xc0, 0x02, 0xc5,
-    0x46, 0xea, 0xf0, 0xba, 0xc8, 0x48, 0x75, 0xb0, 0xb7, 0x8d, 0x0e, 0x23,
-    0x63, 0x5e, 0xbb, 0x3a, 0x8d, 0x68, 0xd8, 0x66, 0xc8, 0xa0, 0x2d, 0x27,
-    0x7f, 0x10, 0x08, 0xa0, 0x31, 0x2b, 0xd1, 0xb1, 0xce, 0xb1, 0x7d, 0x1b,
-    0x75, 0xbe, 0x3a, 0xc5, 0xfe, 0xfc, 0x9e, 0x70, 0x6e, 0xb1, 0x79, 0x86,
-    0xeb, 0x17, 0xff, 0x13, 0x7b, 0x85, 0x3a, 0xd3, 0x0d, 0x62, 0xff, 0xd8,
-    0xe5, 0x9c, 0x7d, 0x60, 0x16, 0x2a, 0x35, 0xa3, 0x36, 0x06, 0x58, 0x39,
-    0xc4, 0x3b, 0xfb, 0xef, 0xe2, 0x98, 0x96, 0x2e, 0x6c, 0x58, 0xad, 0xcf,
-    0x13, 0x45, 0xd7, 0xcc, 0x3c, 0x3a, 0xc5, 0xfa, 0x35, 0xf5, 0x90, 0xd7,
-    0x52, 0xc5, 0xd2, 0x4b, 0x17, 0xd1, 0x33, 0x41, 0x62, 0xb7, 0x37, 0x2e,
-    0x2d, 0x7f, 0xee, 0x93, 0xf7, 0x98, 0xa2, 0x9d, 0xd6, 0x2f, 0x16, 0x01,
-    0x62, 0xfe, 0x71, 0x8a, 0x75, 0x05, 0x8b, 0xc5, 0x1a, 0x6e, 0xb1, 0x51,
-    0xba, 0xb2, 0xbe, 0xb0, 0x8f, 0xad, 0x87, 0xdc, 0x69, 0x08, 0x6e, 0xb8,
-    0x47, 0x1a, 0xc8, 0xb1, 0xc5, 0xc8, 0x4e, 0x86, 0xc3, 0x9d, 0x0b, 0xaf,
-    0xb8, 0x2d, 0x01, 0x62, 0xfe, 0xeb, 0x7d, 0xde, 0xee, 0x6a, 0xc5, 0xf8,
-    0xcc, 0x1b, 0x41, 0x62, 0xfa, 0x36, 0xd8, 0xfc, 0x58, 0xbf, 0xda, 0xfb,
-    0x71, 0xc7, 0x8b, 0x17, 0xd2, 0x4f, 0xda, 0xc5, 0xb3, 0x0f, 0x56, 0x23,
-    0x3b, 0xa7, 0xcb, 0x17, 0x68, 0xd5, 0x8b, 0xba, 0xe4, 0x68, 0xb0, 0x11,
-    0x73, 0x7f, 0x13, 0x9b, 0xf6, 0x82, 0xc5, 0xff, 0xf3, 0x7a, 0x4b, 0x77,
-    0x38, 0xc4, 0xda, 0x82, 0xc5, 0x75, 0xda, 0x2c, 0x4e, 0x66, 0x45, 0xd6,
-    0xf2, 0xc5, 0xf8, 0x2f, 0x7a, 0x4e, 0xb1, 0x46, 0x26, 0xa7, 0x1a, 0x43,
-    0x86, 0x4d, 0xb6, 0x12, 0xbf, 0xe6, 0xfb, 0xf4, 0x8c, 0x08, 0x20, 0x92,
-    0x2f, 0xf7, 0xdb, 0xde, 0x66, 0x09, 0x62, 0xfb, 0x40, 0x93, 0xac, 0x5d,
-    0x23, 0x58, 0xbf, 0x66, 0xed, 0xc7, 0x58, 0xbf, 0xdf, 0xc0, 0x01, 0xbb,
-    0xe2, 0xc5, 0xff, 0xd9, 0xa7, 0xd9, 0x8e, 0xde, 0x14, 0xac, 0x5f, 0x3e,
-    0xcc, 0x75, 0x8a, 0x31, 0x70, 0xeb, 0xac, 0x24, 0x8d, 0x0d, 0xe3, 0x62,
-    0x9e, 0xbb, 0x7f, 0xeb, 0x91, 0xbd, 0x75, 0xd5, 0x26, 0x35, 0xa1, 0x61,
-    0xa7, 0x64, 0x7f, 0x17, 0x62, 0x8e, 0x1a, 0xc7, 0x22, 0x5d, 0x06, 0x58,
-    0xbf, 0xe8, 0x3b, 0x77, 0x02, 0x13, 0x2c, 0x5f, 0xff, 0xef, 0xbf, 0x26,
-    0x19, 0xf7, 0xd7, 0xdb, 0x05, 0x9f, 0x58, 0xbf, 0xfe, 0xd4, 0xbf, 0xbf,
-    0x83, 0x7e, 0x61, 0x01, 0x62, 0xdd, 0x68, 0xd1, 0xfb, 0x82, 0xec, 0x73,
-    0xc5, 0xfb, 0xb9, 0x2b, 0x17, 0xfd, 0xc7, 0x2e, 0xfc, 0x53, 0x8b, 0x15,
-    0x1b, 0xa2, 0x56, 0x08, 0xd8, 0x2f, 0x60, 0xd6, 0x2f, 0xba, 0xce, 0xb9,
-    0xd7, 0x3a, 0xc5, 0x82, 0x2c, 0xef, 0xe8, 0xf9, 0xd3, 0x34, 0x16, 0x2f,
-    0xdf, 0x76, 0x04, 0x6b, 0x58, 0xbd, 0x3d, 0xc1, 0x62, 0xba, 0xc4, 0xc2,
-    0xfa, 0xe2, 0x3c, 0x6a, 0x48, 0xf1, 0x87, 0x51, 0x75, 0xfe, 0x8d, 0xca,
-    0x46, 0x18, 0x38, 0xb1, 0x7f, 0xe8, 0xd3, 0xac, 0x88, 0xa4, 0x79, 0xdf,
-    0x96, 0x2f, 0xd3, 0x1d, 0xd5, 0x14, 0x4b, 0x17, 0xa3, 0xb3, 0xeb, 0x15,
-    0x11, 0xe8, 0xf8, 0xc6, 0xfb, 0x06, 0xd0, 0x58, 0xbf, 0x83, 0x3e, 0x16,
-    0x47, 0xac, 0x5f, 0xd1, 0x42, 0x63, 0xe0, 0x75, 0x8a, 0xc3, 0xe4, 0x88,
-    0xc6, 0xf4, 0x6f, 0xdf, 0x5d, 0xac, 0x5e, 0xe9, 0xa8, 0x2c, 0x5e, 0xd0,
-    0xba, 0x96, 0x2f, 0x04, 0x11, 0xab, 0x15, 0x1b, 0xaa, 0x2e, 0x8d, 0x0e,
-    0xa3, 0x68, 0x4e, 0x75, 0xc2, 0x3e, 0xba, 0xc2, 0x18, 0x88, 0xb8, 0x56,
-    0x22, 0x00, 0x88, 0x6f, 0xff, 0xdd, 0x61, 0x37, 0xa7, 0x0a, 0x07, 0x9c,
-    0x21, 0xac, 0x5f, 0xdd, 0x64, 0x1f, 0xde, 0x95, 0x8b, 0xe9, 0xd9, 0x83,
-    0x58, 0xbd, 0x8e, 0x05, 0x8a, 0x73, 0xc0, 0x22, 0x4b, 0xfe, 0xeb, 0x20,
-    0xfe, 0xfc, 0x91, 0xab, 0x17, 0x80, 0x6c, 0xac, 0x54, 0x6e, 0x7b, 0xbd,
-    0x76, 0x7f, 0x7d, 0xd6, 0x05, 0xbf, 0x6b, 0x17, 0xb6, 0xcc, 0x58, 0xbc,
-    0xdf, 0x75, 0x8b, 0xf3, 0xe8, 0x00, 0x95, 0x8b, 0xfd, 0xe8, 0x08, 0x6c,
-    0x40, 0x58, 0xb9, 0xf6, 0x58, 0xbd, 0xd7, 0xb6, 0x96, 0x2a, 0x37, 0x54,
-    0xe1, 0xd6, 0x2b, 0xf5, 0xae, 0x71, 0xb3, 0xef, 0x5c, 0x2e, 0x8d, 0x65,
-    0x92, 0x3b, 0x01, 0xc6, 0x28, 0xf1, 0xa0, 0x86, 0x2f, 0x36, 0x7d, 0x62,
-    0xff, 0x75, 0xbc, 0xfc, 0x94, 0xec, 0xb1, 0x74, 0x6d, 0x05, 0x8a, 0xeb,
-    0x4f, 0x5b, 0xae, 0xce, 0x6f, 0xc5, 0x80, 0x0f, 0xb5, 0x8b, 0xf1, 0xff,
-    0x21, 0x62, 0xc5, 0xff, 0x37, 0xbb, 0x87, 0xb3, 0x46, 0xac, 0x5f, 0xef,
-    0x37, 0xf0, 0x5a, 0xd9, 0x62, 0xfd, 0x16, 0xf3, 0xdf, 0x96, 0x2f, 0xfc,
-    0xfd, 0xf0, 0xb0, 0x73, 0x9a, 0x58, 0xb9, 0xc0, 0xb1, 0x5d, 0x62, 0x7c,
-    0xb1, 0xa3, 0x97, 0x5c, 0x2e, 0x8d, 0x45, 0x51, 0xac, 0xa7, 0x0f, 0x1c,
-    0xd4, 0x05, 0x84, 0x7d, 0x7f, 0xff, 0x75, 0xc3, 0x30, 0x9f, 0x59, 0xc6,
-    0x23, 0x0c, 0xfc, 0x72, 0xc5, 0xfd, 0xfd, 0xfa, 0xce, 0x7d, 0xd6, 0x2f,
-    0x46, 0x9d, 0x7f, 0x58, 0xb1, 0x7f, 0xfa, 0x37, 0x8b, 0xad, 0xeb, 0xb2,
-    0x04, 0x6b, 0x30, 0xcf, 0xc7, 0x2c, 0x57, 0x5c, 0x44, 0xb8, 0x0b, 0x6f,
-    0xff, 0xf0, 0x8c, 0x2c, 0xd6, 0x8f, 0xf9, 0x11, 0x18, 0x67, 0xe3, 0x96,
-    0x2f, 0xfd, 0x33, 0x33, 0x33, 0x3d, 0xf1, 0x62, 0xf4, 0x53, 0xe5, 0x8b,
-    0xa6, 0x64, 0xf6, 0xa2, 0x3c, 0xb8, 0xee, 0xb1, 0x7f, 0xfb, 0xf3, 0x17,
-    0x7c, 0xce, 0xe3, 0xe6, 0x49, 0x62, 0xf3, 0xf7, 0x8b, 0x17, 0xed, 0x3e,
-    0xcc, 0x74, 0x8b, 0x82, 0x09, 0x22, 0xb0, 0xf0, 0xc2, 0x29, 0xb0, 0x92,
-    0x23, 0x0d, 0x15, 0xef, 0xe6, 0xeb, 0x15, 0x29, 0xab, 0xee, 0x59, 0xf1,
-    0x70, 0x27, 0xf2, 0x10, 0x41, 0x92, 0xdf, 0x85, 0x1d, 0x22, 0xed, 0x62,
-    0xe1, 0x41, 0x62, 0xff, 0xd3, 0xfc, 0x06, 0x0f, 0xed, 0x05, 0x8b, 0xc5,
-    0x3d, 0x4b, 0x17, 0x8a, 0x63, 0xd6, 0x29, 0x8d, 0xf1, 0x0f, 0xdf, 0xe6,
-    0xdb, 0x3a, 0x67, 0xb8, 0xb1, 0x7f, 0x42, 0x4f, 0x3a, 0xd2, 0xc5, 0x62,
-    0x68, 0x91, 0xe5, 0xba, 0x18, 0x67, 0xc2, 0x1f, 0x11, 0xb5, 0xff, 0xfd,
-    0xe7, 0x3e, 0x17, 0xb9, 0x26, 0xf0, 0x43, 0xfb, 0xac, 0x5f, 0x86, 0xe1,
-    0x49, 0xd6, 0x2f, 0xf9, 0xe2, 0x67, 0x18, 0xbd, 0xc5, 0x8b, 0xfa, 0x06,
-    0x71, 0xc5, 0xa5, 0x8b, 0xfe, 0x9e, 0x36, 0x9f, 0xdc, 0xc5, 0x8b, 0xff,
-    0xfe, 0xfb, 0x1b, 0x23, 0x30, 0x07, 0x92, 0xf1, 0x60, 0x05, 0xc5, 0x8a,
-    0xed, 0x1a, 0x00, 0x30, 0xe1, 0xc5, 0xff, 0xe6, 0x72, 0xc0, 0x19, 0x3a,
-    0xda, 0x7c, 0xb1, 0x7f, 0xee, 0xa7, 0x8f, 0xfc, 0x53, 0x1e, 0xc7, 0x58,
-    0xbf, 0xde, 0xfc, 0x96, 0xcf, 0xd1, 0x62, 0xfd, 0xcc, 0x84, 0x76, 0x2c,
-    0x5c, 0x79, 0x30, 0xf8, 0x78, 0x6d, 0x7e, 0x9e, 0x48, 0x09, 0x62, 0xb0,
-    0xf5, 0x4d, 0x2e, 0xbf, 0xff, 0x9e, 0x1c, 0x0c, 0xf8, 0x42, 0x83, 0x78,
-    0x26, 0xed, 0x62, 0xff, 0x69, 0x81, 0x23, 0x6f, 0x2c, 0x5f, 0xe7, 0x29,
-    0xdf, 0xf2, 0x75, 0x8b, 0xfe, 0x69, 0xf6, 0x7e, 0x5c, 0x0b, 0x15, 0x28,
-    0xfb, 0x75, 0xee, 0x19, 0xf8, 0xce, 0x86, 0xaa, 0x87, 0xe9, 0x45, 0x0f,
-    0xff, 0x46, 0x3b, 0x7e, 0x3b, 0x1f, 0x06, 0xb1, 0x7e, 0x2c, 0x35, 0xc6,
-    0xb1, 0x7f, 0xde, 0xdf, 0xee, 0x45, 0x3d, 0xac, 0x54, 0xa2, 0x2b, 0x0a,
-    0x18, 0xa2, 0xff, 0xfe, 0x81, 0x87, 0x16, 0x83, 0x8e, 0x62, 0xef, 0xc1,
-    0x96, 0x2c, 0x5f, 0xf6, 0xd3, 0xc7, 0x8e, 0xcd, 0x4a, 0xc5, 0xff, 0xf6,
-    0xb5, 0x27, 0xe0, 0xa7, 0xb3, 0x74, 0xdb, 0xac, 0x54, 0xa2, 0x41, 0x8f,
-    0x2f, 0xe1, 0xe1, 0x6c, 0xfa, 0x58, 0xba, 0x7a, 0x96, 0x28, 0xc5, 0xeb,
-    0xd9, 0x5c, 0x81, 0x4e, 0x46, 0x14, 0xf2, 0xb4, 0xbf, 0x0d, 0x36, 0x2d,
-    0x28, 0x79, 0x88, 0x87, 0xa1, 0x75, 0xff, 0x14, 0x99, 0x14, 0x27, 0x5b,
-    0x2c, 0x5f, 0xec, 0x1b, 0xf4, 0xe0, 0x37, 0x58, 0xbf, 0xff, 0xf6, 0x74,
-    0x7f, 0x43, 0x01, 0xc2, 0xc0, 0x6a, 0x76, 0x6d, 0x6e, 0xb1, 0x74, 0xc1,
-    0x91, 0x4d, 0xc3, 0x7b, 0xd9, 0xb4, 0xac, 0x5f, 0xff, 0x60, 0x33, 0xdc,
-    0x7e, 0x85, 0x9e, 0xfb, 0xac, 0x5d, 0xee, 0x61, 0xf6, 0x90, 0xed, 0xff,
-    0xfc, 0xe7, 0x7d, 0x0e, 0x47, 0x8f, 0x06, 0xe6, 0x09, 0x62, 0x8e, 0xa8,
-    0x07, 0xf0, 0xe2, 0x28, 0x4d, 0x78, 0xb2, 0xfb, 0x83, 0xf0, 0x96, 0x2f,
-    0xfc, 0xda, 0x34, 0xc8, 0xe1, 0x7d, 0xf4, 0xb1, 0x7f, 0xff, 0xe9, 0xd6,
-    0x0c, 0x9b, 0x46, 0xb7, 0x85, 0xe7, 0xf7, 0x3e, 0xeb, 0x14, 0x48, 0xb1,
-    0xe8, 0x8b, 0x7f, 0xe1, 0x73, 0x99, 0xdc, 0x3c, 0x21, 0xac, 0x5d, 0x20,
-    0x58, 0xbf, 0x84, 0x42, 0xf0, 0xbc, 0xb1, 0x43, 0x3c, 0x6d, 0x0b, 0xdf,
-    0xb5, 0x9d, 0x24, 0x0b, 0x17, 0x73, 0x8b, 0x17, 0xbf, 0x24, 0xb1, 0x5b,
-    0xa6, 0x10, 0xf0, 0x88, 0x8f, 0x22, 0x01, 0x57, 0x86, 0x2f, 0x07, 0xee,
-    0x2c, 0x5f, 0x0b, 0xc2, 0x35, 0x62, 0xb4, 0x78, 0x84, 0x3f, 0x52, 0x8b,
-    0x8c, 0x84, 0xbd, 0x9d, 0x62, 0xff, 0x4c, 0x45, 0x27, 0x16, 0xcb, 0x17,
-    0xe6, 0xe3, 0x9c, 0x4b, 0x15, 0x1e, 0x7d, 0xc7, 0x11, 0xf9, 0xad, 0xff,
-    0xa6, 0x2c, 0xff, 0x1c, 0xbb, 0x82, 0xc5, 0xc6, 0x84, 0xb1, 0x7f, 0xfd,
-    0x24, 0x53, 0xb0, 0x4d, 0xb7, 0xde, 0x49, 0x62, 0xf1, 0x60, 0x16, 0x2a,
-    0x07, 0xd7, 0x89, 0xf5, 0x2b, 0x95, 0xbb, 0xa4, 0x3c, 0x35, 0x7f, 0x1f,
-    0x23, 0x42, 0x50, 0x8c, 0xbc, 0x80, 0x28, 0x42, 0xdf, 0x3e, 0xcc, 0x75,
-    0x8b, 0xfd, 0x21, 0x0f, 0xf2, 0x5b, 0xac, 0x5c, 0xf2, 0xb1, 0x4e, 0x79,
-    0x64, 0x6b, 0x7d, 0xcf, 0xcf, 0x16, 0x2e, 0x3f, 0x16, 0x2b, 0x0d, 0xdb,
-    0x91, 0xdf, 0xfe, 0x7d, 0x7f, 0x30, 0x85, 0xe8, 0x49, 0xab, 0x17, 0xc1,
-    0x9f, 0xee, 0xb1, 0x7f, 0x44, 0xde, 0x16, 0x80, 0xb1, 0x52, 0x7a, 0x8c,
-    0x49, 0x7f, 0xdd, 0xf8, 0x3d, 0xbd, 0xa9, 0xe2, 0xc5, 0xec, 0x7e, 0x8b,
-    0x15, 0x87, 0xb8, 0x11, 0xf5, 0x0d, 0x51, 0x26, 0x9b, 0x8e, 0xb7, 0xf1,
-    0xf2, 0x84, 0xf7, 0x1f, 0x2f, 0xfd, 0xf9, 0xee, 0x18, 0x77, 0x98, 0xf5,
-    0x8b, 0xfe, 0x06, 0x33, 0xeb, 0x79, 0xf2, 0xc5, 0xe8, 0x1e, 0x56, 0x29,
-    0xcf, 0x5b, 0xa1, 0xcd, 0xfe, 0xd6, 0x1c, 0xf8, 0x2e, 0xbd, 0x62, 0xf4,
-    0xb6, 0xeb, 0x17, 0xfd, 0x31, 0x7d, 0xfa, 0x14, 0xe2, 0xc5, 0x9b, 0x63,
-    0xd7, 0x0c, 0x76, 0xfa, 0x79, 0x27, 0x58, 0xbf, 0xfd, 0xd2, 0x49, 0xe7,
-    0xbd, 0xa4, 0xa4, 0x0b, 0x17, 0xfa, 0x76, 0x21, 0x67, 0x7e, 0x58, 0xb0,
-    0x66, 0x22, 0x8a, 0x48, 0xbe, 0x97, 0x7f, 0x4f, 0x4d, 0x39, 0xf1, 0x62,
-    0xa5, 0x53, 0xe6, 0x42, 0x61, 0xc8, 0xff, 0x09, 0x06, 0x86, 0x59, 0x1b,
-    0xdf, 0xee, 0x74, 0x92, 0x13, 0x71, 0x62, 0xfd, 0xcf, 0x61, 0x1a, 0xb1,
-    0x79, 0x8a, 0x56, 0x2f, 0xed, 0x48, 0xf3, 0x38, 0xb1, 0x7f, 0x9b, 0xbe,
-    0x33, 0x77, 0xc5, 0x8a, 0x94, 0x6d, 0xc0, 0xd6, 0x22, 0x90, 0x0d, 0xf0,
-    0xb6, 0xf8, 0x62, 0x2c, 0x58, 0xbf, 0xd9, 0xcc, 0xd0, 0x01, 0x2b, 0x17,
-    0x9a, 0x11, 0xeb, 0x14, 0xe7, 0xeb, 0xf2, 0x2e, 0x19, 0xdf, 0xfa, 0x1c,
-    0x98, 0x48, 0x39, 0x9d, 0x16, 0x2e, 0xc3, 0xac, 0x5e, 0x91, 0xba, 0xc5,
-    0xfe, 0x66, 0x08, 0x7f, 0x70, 0x96, 0x2e, 0x93, 0xac, 0x5f, 0xc1, 0xfb,
-    0x9b, 0x60, 0x4b, 0x17, 0xf3, 0xeb, 0xbe, 0x39, 0xab, 0x15, 0x1e, 0x7f,
-    0x3a, 0x17, 0xf9, 0x95, 0xdb, 0xca, 0xc5, 0xa3, 0xd6, 0x2f, 0xe7, 0xd3,
-    0x6f, 0x84, 0xb1, 0x5a, 0x3c, 0x2f, 0x0a, 0xdf, 0xe6, 0xd6, 0xf8, 0x2d,
-    0x6c, 0xb1, 0x7f, 0xd9, 0xac, 0xfb, 0xeb, 0xec, 0xb1, 0x69, 0xd8, 0xfb,
-    0xb7, 0x36, 0xbf, 0xfb, 0xde, 0x17, 0x65, 0x80, 0xe4, 0xc7, 0xac, 0x5f,
-    0xfe, 0x7e, 0x60, 0xf5, 0x22, 0xf1, 0x3f, 0x45, 0x8b, 0xfa, 0x01, 0xe7,
-    0xd8, 0xeb, 0x14, 0xb1, 0x66, 0x23, 0x76, 0x11, 0x7d, 0x62, 0x3d, 0x77,
-    0x49, 0x0a, 0x10, 0xd7, 0xd3, 0xa7, 0xd2, 0xc5, 0xff, 0xd3, 0xa8, 0x6f,
-    0xf7, 0x88, 0x98, 0x25, 0x8b, 0xff, 0xb4, 0xdb, 0x0f, 0xf3, 0xcf, 0x0b,
-    0xeb, 0x15, 0xc4, 0x47, 0x79, 0x1e, 0xf7, 0x9e, 0x25, 0x8b, 0xfa, 0x2e,
-    0x07, 0x85, 0xba, 0xc5, 0x41, 0x71, 0x70, 0x63, 0x99, 0x0a, 0xe3, 0x4c,
-    0xbb, 0x5a, 0xd4, 0x24, 0x3f, 0x18, 0xf0, 0x0d, 0xb9, 0x0b, 0x0f, 0x11,
-    0x86, 0x3d, 0x5a, 0x5d, 0x25, 0x3c, 0xe3, 0x9d, 0xf1, 0x60, 0x23, 0x96,
-    0x2f, 0xa4, 0xf3, 0xf5, 0x8b, 0xa7, 0x8b, 0x16, 0x78, 0x1b, 0x92, 0x22,
-    0xa9, 0x5e, 0x17, 0xc9, 0xd6, 0x67, 0x2e, 0xfa, 0xf5, 0xfc, 0xc0, 0x6d,
-    0xdb, 0x4b, 0x17, 0xc0, 0xcc, 0x8f, 0x58, 0xbf, 0x6e, 0xcf, 0xb6, 0x2c,
-    0x5a, 0x4e, 0x79, 0xc4, 0x4b, 0x7f, 0xfe, 0x3c, 0xc0, 0xc3, 0x25, 0xfe,
-    0xf0, 0x29, 0xdd, 0x62, 0xff, 0xe6, 0xfc, 0x33, 0xdc, 0x6d, 0x85, 0x05,
-    0x8a, 0xd9, 0x13, 0xba, 0x57, 0xbf, 0xff, 0x9b, 0x37, 0xe7, 0xd9, 0xfd,
-    0x01, 0x49, 0x4c, 0x16, 0x2f, 0xff, 0x11, 0x49, 0xa7, 0xfc, 0xf7, 0xe9,
-    0xfa, 0xc5, 0x32, 0x32, 0x48, 0x90, 0x4b, 0x57, 0xf3, 0xcc, 0x3f, 0x84,
-    0xb1, 0x73, 0x41, 0x62, 0xff, 0xfd, 0xee, 0x0a, 0x7f, 0x27, 0x2c, 0x01,
-    0xe6, 0x0b, 0x17, 0xfe, 0x70, 0x37, 0x7c, 0xc8, 0x9f, 0x65, 0x8a, 0x3a,
-    0x2b, 0x48, 0x5f, 0xca, 0xb7, 0xee, 0xe0, 0x1f, 0x00, 0xb1, 0x6f, 0xac,
-    0x58, 0x78, 0x6f, 0x98, 0xb2, 0xff, 0xa7, 0xf3, 0xdc, 0x21, 0x3b, 0x2c,
-    0x5a, 0x56, 0x2e, 0x7d, 0x2c, 0x5b, 0x7d, 0x1a, 0x8f, 0x88, 0xdf, 0xd1,
-    0xe5, 0x9b, 0x60, 0x4b, 0x15, 0x29, 0xa7, 0xe3, 0x6e, 0x89, 0x59, 0x8c,
-    0x45, 0x17, 0xfe, 0x3b, 0x02, 0x46, 0x2d, 0x0b, 0x4b, 0x17, 0xba, 0x37,
-    0xd6, 0x2c, 0x58, 0x7b, 0xe2, 0x40, 0xbf, 0xff, 0xed, 0xc9, 0xfa, 0x73,
-    0xec, 0xfe, 0x80, 0xa5, 0xbc, 0x29, 0x58, 0xbf, 0xff, 0xfd, 0xa9, 0x37,
-    0x22, 0xdf, 0xef, 0x14, 0x58, 0x5e, 0x0f, 0x22, 0xfb, 0x0d, 0x62, 0xff,
-    0xf7, 0xdc, 0xe3, 0x93, 0x23, 0x85, 0xf7, 0xd2, 0xc5, 0xfd, 0xe9, 0xf9,
-    0x4c, 0x16, 0x2f, 0xff, 0xfb, 0xec, 0xfe, 0x80, 0xa4, 0xa6, 0x10, 0x7d,
-    0x6c, 0x20, 0x2c, 0x51, 0x88, 0xe3, 0x74, 0xfe, 0x16, 0xd2, 0xc5, 0xf9,
-    0x8d, 0x7d, 0x4c, 0x0d, 0xe7, 0xcc, 0x2a, 0x55, 0x34, 0x39, 0x33, 0x34,
-    0x14, 0x73, 0xb7, 0xde, 0xdb, 0x02, 0x58, 0xbb, 0x52, 0xb1, 0x66, 0x23,
-    0x79, 0xe2, 0x5b, 0xff, 0xf6, 0xc7, 0x16, 0x9a, 0x06, 0xb7, 0x71, 0x41,
-    0xf1, 0x62, 0xfd, 0x3a, 0xd3, 0x44, 0xb1, 0x7f, 0xfb, 0x67, 0xe0, 0x7a,
-    0x1f, 0xf1, 0xc8, 0xd5, 0x8b, 0x9f, 0xb5, 0x8b, 0xfc, 0x01, 0x60, 0x0e,
-    0xd0, 0x58, 0xbb, 0x25, 0x62, 0xa0, 0x7c, 0x5d, 0x8c, 0x1c, 0xd2, 0xa5,
-    0x36, 0x2d, 0x96, 0xb0, 0xa5, 0xa1, 0x5f, 0x7f, 0xf7, 0x70, 0x72, 0xf6,
-    0x38, 0xf0, 0x6b, 0x17, 0xff, 0xf3, 0xf7, 0x25, 0x3c, 0x1f, 0xe7, 0x8e,
-    0x5d, 0xc1, 0x62, 0x8c, 0x44, 0xff, 0xd1, 0x2f, 0xff, 0xef, 0x73, 0x27,
-    0xf2, 0x66, 0xa4, 0xb3, 0xf9, 0xba, 0xc5, 0xff, 0xfe, 0x61, 0xfd, 0xc9,
-    0xbd, 0x31, 0x39, 0xae, 0x59, 0xd1, 0x62, 0xbb, 0x45, 0xe7, 0xd6, 0xef,
-    0xf9, 0xfd, 0x9a, 0xd0, 0xb6, 0xe8, 0xb1, 0x7f, 0xdc, 0xcf, 0x0f, 0x30,
-    0x1c, 0x58, 0xaf, 0x9f, 0xb7, 0x8f, 0x6f, 0xf9, 0xfd, 0x9a, 0xd0, 0xb6,
-    0xe8, 0xb1, 0x70, 0x88, 0xc3, 0xdf, 0xf9, 0x15, 0x4a, 0xa0, 0x7c, 0x87,
-    0x07, 0x21, 0xf3, 0x7f, 0xb7, 0xce, 0x7f, 0xb6, 0x8f, 0x58, 0xbc, 0x2c,
-    0x1a, 0xc5, 0x31, 0xeb, 0x47, 0x1c, 0xd4, 0x1b, 0x39, 0x61, 0xcf, 0x22,
-    0xe2, 0x29, 0xaf, 0x9b, 0xc7, 0x19, 0x1e, 0x5d, 0xa9, 0x45, 0x1f, 0x96,
-    0x1e, 0x07, 0xd2, 0x8e, 0x1f, 0x92, 0xb9, 0xfa, 0x42, 0x42, 0xff, 0x4b,
-    0x6b, 0xe1, 0x30, 0xd6, 0x2e, 0xc8, 0x2c, 0x5e, 0x71, 0xca, 0xc5, 0x0c,
-    0xf9, 0xe2, 0x34, 0x38, 0xbd, 0xff, 0xd0, 0x93, 0xea, 0x46, 0xde, 0x14,
-    0xac, 0x5f, 0xcf, 0xfd, 0x69, 0xf6, 0x58, 0xa9, 0x45, 0x1b, 0x98, 0x7d,
-    0x12, 0xfc, 0x20, 0xcc, 0x68, 0x2c, 0x5b, 0xcb, 0x15, 0xe3, 0x7a, 0x11,
-    0x5d, 0xf3, 0xf3, 0x0e, 0xb1, 0x7f, 0xf1, 0x0b, 0x38, 0xfc, 0xcf, 0xe6,
-    0xeb, 0x17, 0xed, 0x1d, 0x98, 0x6b, 0x17, 0xff, 0xe6, 0x39, 0x9c, 0x14,
-    0xf7, 0x9e, 0xe6, 0x4e, 0xeb, 0x17, 0xa7, 0x51, 0x2c, 0x56, 0x22, 0x7b,
-    0xe5, 0x04, 0xb1, 0x7f, 0xf3, 0xbf, 0xe2, 0xcf, 0x4f, 0xa4, 0x6b, 0x17,
-    0x8d, 0x6e, 0x2c, 0x5e, 0x9d, 0x01, 0x62, 0xd3, 0xe3, 0x76, 0x18, 0xf5,
-    0xf7, 0xbd, 0x20, 0x58, 0xbe, 0x0c, 0xd0, 0xcd, 0x58, 0xb4, 0xac, 0x5f,
-    0xff, 0x4f, 0x70, 0x62, 0x01, 0x80, 0x7d, 0x39, 0xab, 0x15, 0x2a, 0xaa,
-    0x20, 0x45, 0x84, 0x4f, 0x0e, 0x28, 0x8b, 0xbe, 0xfe, 0x22, 0x70, 0x88,
-    0xe3, 0x8a, 0x3a, 0x84, 0x6f, 0xd9, 0xe7, 0x29, 0x58, 0xbc, 0x14, 0xf6,
-    0xb1, 0x50, 0x3c, 0x58, 0x89, 0xaf, 0xee, 0xe2, 0xfc, 0x91, 0xab, 0x17,
-    0xff, 0xa7, 0x5a, 0xce, 0xfd, 0x27, 0x9e, 0xe0, 0xb1, 0x52, 0x7f, 0xa1,
-    0x18, 0xdc, 0x51, 0x2c, 0x5e, 0xe7, 0xdd, 0x62, 0x8e, 0x6d, 0x7c, 0x31,
-    0x77, 0x6c, 0xb1, 0x7f, 0xf6, 0x0e, 0x7e, 0xf0, 0x68, 0x4e, 0x96, 0x2b,
-    0x0f, 0x6f, 0x43, 0x17, 0xff, 0x30, 0xff, 0x3a, 0xce, 0x99, 0xa8, 0x2c,
-    0x5f, 0x6c, 0x77, 0x82, 0xc5, 0xff, 0x8a, 0x4e, 0xce, 0x31, 0x7b, 0x8b,
-    0x17, 0xd2, 0x00, 0xce, 0xb1, 0x7f, 0xe9, 0xf7, 0xe7, 0x93, 0x01, 0x69,
-    0x62, 0xf8, 0x84, 0xd0, 0x58, 0xb9, 0x8d, 0x58, 0xa8, 0x23, 0x6f, 0x73,
-    0xe2, 0x24, 0xe1, 0xff, 0x88, 0xaf, 0xe9, 0x16, 0xff, 0x7d, 0x2c, 0x5f,
-    0xd2, 0x78, 0xc0, 0x02, 0x56, 0x2f, 0x75, 0xf3, 0xe5, 0x8b, 0xf9, 0xb7,
-    0x32, 0x73, 0x8b, 0x17, 0xe9, 0xc2, 0xf7, 0x16, 0x28, 0x67, 0xac, 0x72,
-    0xfa, 0x3a, 0x3e, 0xbe, 0x5e, 0x23, 0x1e, 0xa7, 0x8b, 0xc0, 0x9d, 0x2c,
-    0x54, 0xaa, 0xa0, 0xc8, 0x7f, 0xbc, 0x68, 0x8c, 0x81, 0x7d, 0xe7, 0x28,
-    0x2c, 0x5f, 0x9f, 0xfe, 0xcd, 0xd6, 0x2f, 0xf3, 0xc9, 0x4b, 0xf7, 0x05,
-    0x8b, 0xd8, 0x40, 0x58, 0xa8, 0x22, 0x66, 0x22, 0x21, 0x14, 0xf5, 0x19,
-    0x5e, 0xe0, 0x8e, 0xb1, 0x7f, 0xfb, 0xf2, 0x79, 0x17, 0x72, 0xe5, 0x86,
-    0xac, 0x5f, 0xa6, 0x2e, 0x79, 0xd6, 0x28, 0xc5, 0xe2, 0xb9, 0x85, 0x06,
-    0x2b, 0xbb, 0xe4, 0x44, 0x3a, 0x95, 0xcc, 0xd0, 0xdf, 0x02, 0x0f, 0x87,
-    0x83, 0x4a, 0xbf, 0xff, 0xa7, 0x53, 0xcf, 0xb3, 0xfa, 0x02, 0x92, 0x98,
-    0x2c, 0x5f, 0xe1, 0x87, 0x31, 0xff, 0x17, 0x16, 0x2f, 0xa7, 0xbf, 0x3a,
-    0xc5, 0xfb, 0xa9, 0xcf, 0x9e, 0x58, 0xbf, 0x7b, 0x3c, 0x52, 0xb1, 0x7f,
-    0x3c, 0xf0, 0xc2, 0x75, 0x8a, 0xd9, 0x33, 0x4e, 0xd6, 0x62, 0x39, 0x39,
-    0x19, 0x15, 0xf8, 0x9e, 0xf0, 0x9b, 0x8b, 0x17, 0xff, 0xf3, 0xc3, 0xed,
-    0xcf, 0x3c, 0x9b, 0x1c, 0xdb, 0x4e, 0x96, 0x2e, 0x90, 0x96, 0x2b, 0x48,
-    0x94, 0xf8, 0xef, 0x17, 0xef, 0xfe, 0x7e, 0x30, 0x5e, 0x33, 0x90, 0x73,
-    0x56, 0x2f, 0xf4, 0x96, 0xd8, 0x36, 0x82, 0xc5, 0xfe, 0xfe, 0x67, 0xbe,
-    0xc0, 0x58, 0xbf, 0xf7, 0x3b, 0x6f, 0x13, 0x73, 0x09, 0x62, 0xdf, 0x58,
-    0xbf, 0xd3, 0xec, 0xfb, 0xf2, 0x56, 0x2a, 0x08, 0xb5, 0xec, 0xcd, 0x8f,
-    0xb8, 0x25, 0x79, 0xf6, 0x95, 0x8b, 0xa2, 0x95, 0x8b, 0xa7, 0xcb, 0x17,
-    0xef, 0xb8, 0xdc, 0x96, 0x2f, 0xf9, 0x98, 0x1e, 0x66, 0xef, 0x8b, 0x17,
-    0xd3, 0xa8, 0x9b, 0x73, 0xe0, 0xd1, 0x3d, 0xfe, 0x7d, 0x6b, 0x36, 0x3e,
-    0x2c, 0x5d, 0x17, 0x16, 0x2e, 0x93, 0x08, 0xf3, 0x43, 0x34, 0xbc, 0xdd,
-    0x25, 0x62, 0xa5, 0x36, 0x23, 0x46, 0x3b, 0x77, 0x28, 0x43, 0xf8, 0xba,
-    0xf8, 0x78, 0x50, 0x58, 0xbf, 0x63, 0xc3, 0xf2, 0xb1, 0x74, 0x5e, 0x73,
-    0xc9, 0xf9, 0x15, 0xff, 0xf8, 0x7f, 0x9d, 0x38, 0x24, 0x39, 0x88, 0xa4,
-    0xeb, 0x17, 0xf8, 0xd9, 0x2f, 0x71, 0xbe, 0xb1, 0x52, 0x8b, 0x87, 0x2e,
-    0x65, 0x6b, 0xf1, 0x63, 0x16, 0xcb, 0x17, 0xff, 0x9b, 0xcf, 0xd9, 0x80,
-    0x13, 0x16, 0xfc, 0x58, 0xbf, 0x71, 0xa5, 0xf4, 0xb1, 0x77, 0x67, 0x58,
-    0xa1, 0xa2, 0x37, 0xb4, 0xd8, 0xf2, 0x7a, 0x95, 0xe7, 0x0c, 0x87, 0x76,
-    0xe6, 0x1d, 0xa4, 0x3c, 0x3a, 0x34, 0x7a, 0xd1, 0xbf, 0x94, 0x6a, 0x3c,
-    0x2d, 0x14, 0x2d, 0x29, 0x62, 0xec, 0xd2, 0xc5, 0x1a, 0x68, 0xd8, 0x32,
-    0xff, 0xb3, 0x92, 0x3e, 0x4b, 0x8d, 0x62, 0xfe, 0x9d, 0xb5, 0x38, 0x35,
-    0x8b, 0x6e, 0xb1, 0x7f, 0xec, 0x3f, 0x3f, 0x3d, 0xfa, 0x7e, 0xb1, 0x7f,
-    0xff, 0x47, 0xb9, 0x49, 0xcc, 0xe3, 0xed, 0x3f, 0xfc, 0xc1, 0x62, 0xf3,
-    0x45, 0x2b, 0x17, 0xf7, 0xe7, 0xde, 0x93, 0xac, 0x5f, 0xff, 0xda, 0xc1,
-    0xf0, 0x85, 0x90, 0x13, 0x0f, 0x99, 0xa5, 0x8a, 0x1a, 0x22, 0x5c, 0xba,
-    0xb4, 0xa8, 0x04, 0xe4, 0x3f, 0x38, 0x22, 0xef, 0x09, 0x89, 0x03, 0xa2,
-    0xf8, 0x70, 0xa6, 0xbe, 0x29, 0x3f, 0x16, 0x2f, 0x1d, 0xbb, 0x58, 0xf1,
-    0xa2, 0xbb, 0xdb, 0xac, 0x5f, 0x3e, 0x81, 0xc5, 0x8a, 0xc3, 0xea, 0xd1,
-    0x77, 0x86, 0x6f, 0xe2, 0x93, 0x00, 0x09, 0x58, 0xbe, 0x60, 0x4c, 0x16,
-    0x2f, 0x81, 0xd3, 0xad, 0xeb, 0x16, 0x2f, 0xf8, 0xf9, 0x09, 0xd0, 0x30,
-    0x96, 0x2d, 0x0f, 0x9f, 0x40, 0x66, 0x17, 0xf3, 0x14, 0xff, 0xf2, 0xb1,
-    0x7f, 0x69, 0xa6, 0x13, 0x05, 0x8b, 0xff, 0xf4, 0xc3, 0x9f, 0x67, 0xf4,
-    0x05, 0x25, 0x30, 0x58, 0xbf, 0xa7, 0x7e, 0x3c, 0x9d, 0x62, 0x89, 0x10,
-    0x5c, 0x54, 0xa9, 0x46, 0x8b, 0x42, 0xbe, 0xe1, 0x12, 0xc5, 0xd9, 0xba,
-    0xc5, 0xd3, 0x0f, 0x9a, 0xff, 0x0b, 0xd7, 0x69, 0xd3, 0xc4, 0x53, 0xa8,
-    0x7e, 0x92, 0xad, 0xf4, 0x94, 0xc4, 0xb1, 0x7f, 0xff, 0xec, 0x7e, 0x93,
-    0x9f, 0x97, 0xd4, 0xf9, 0xf0, 0xe7, 0x93, 0xac, 0x5f, 0xff, 0xff, 0xb2,
-    0x05, 0x3b, 0x67, 0x3f, 0x84, 0xc6, 0xb6, 0xed, 0xa6, 0x83, 0xf0, 0x0b,
-    0x17, 0xff, 0xb3, 0xa6, 0xed, 0xad, 0x9b, 0xcd, 0xd8, 0x16, 0x2f, 0x8b,
-    0x00, 0x6a, 0xc5, 0x69, 0x1e, 0x85, 0x08, 0x2e, 0x27, 0xdf, 0xfe, 0xc1,
-    0xb1, 0x3e, 0x0e, 0x5d, 0xb6, 0x58, 0xa5, 0x8b, 0x66, 0xc7, 0xa6, 0xe8,
-    0xf7, 0xfb, 0x06, 0xfc, 0x09, 0xb4, 0xb1, 0x52, 0xbc, 0x72, 0x38, 0xc1,
-    0xb0, 0xbb, 0x72, 0xe7, 0x94, 0x62, 0x74, 0x4f, 0x91, 0x34, 0x6b, 0xc5,
-    0x08, 0x7f, 0x13, 0xdf, 0xe2, 0x6d, 0xbb, 0x84, 0xf5, 0x2c, 0x5f, 0x81,
-    0x39, 0xdc, 0x16, 0x2f, 0xf7, 0x3e, 0xc1, 0xfe, 0x60, 0xb1, 0x5b, 0x22,
-    0x5b, 0x73, 0x8e, 0xca, 0x6f, 0xf7, 0xe4, 0xfe, 0x29, 0xed, 0x62, 0xec,
-    0x89, 0x62, 0xfc, 0x4d, 0x0c, 0x25, 0x8b, 0xf8, 0x9b, 0xe5, 0x9a, 0x58,
-    0xbc, 0x42, 0xc1, 0x9e, 0x97, 0x89, 0xaf, 0xfb, 0x0f, 0x9d, 0x05, 0x1f,
-    0x84, 0xb1, 0x7d, 0x3d, 0xc7, 0x62, 0xc5, 0xff, 0x9b, 0xbf, 0xcb, 0x81,
-    0xbc, 0x25, 0x8b, 0xff, 0xfd, 0x2f, 0x06, 0xe7, 0x27, 0x0a, 0x61, 0x87,
-    0x6e, 0xd6, 0x2b, 0x48, 0xc3, 0x39, 0x37, 0x8f, 0xef, 0xfd, 0x80, 0xe6,
-    0x6b, 0x6d, 0x85, 0xb2, 0xc5, 0x0d, 0x37, 0x3c, 0x8c, 0x03, 0xc6, 0x15,
-    0x05, 0x4f, 0x38, 0x68, 0xcd, 0x5c, 0x8e, 0x96, 0xff, 0xf8, 0xed, 0xa6,
-    0x84, 0xbe, 0x9e, 0x19, 0x05, 0x8b, 0xf7, 0xe6, 0x27, 0xfa, 0xc5, 0xcf,
-    0x05, 0x8a, 0x19, 0xe0, 0x11, 0x4d, 0xee, 0x4c, 0x4b, 0x17, 0xdb, 0x67,
-    0x70, 0x58, 0xb4, 0x4b, 0x15, 0x27, 0xad, 0x83, 0xc1, 0x92, 0xdf, 0xe3,
-    0xb1, 0x66, 0x83, 0xf2, 0xc5, 0xfc, 0xd9, 0xb0, 0xb5, 0x05, 0x8b, 0xff,
-    0xef, 0xc9, 0xdf, 0x4f, 0xd5, 0x21, 0xed, 0x81, 0x2c, 0x5f, 0xa6, 0x07,
-    0x7f, 0x2c, 0x5f, 0xf0, 0xe4, 0x33, 0x94, 0xf7, 0x05, 0x8a, 0x58, 0xac,
-    0x3c, 0x77, 0x3b, 0xbf, 0xb0, 0x5b, 0x87, 0x9d, 0xac, 0x56, 0xca, 0xaa,
-    0xe1, 0x08, 0xe1, 0xbb, 0xe1, 0x77, 0x66, 0x91, 0x17, 0x9d, 0x57, 0x8d,
-    0xfd, 0x08, 0x2f, 0xfb, 0x53, 0xc0, 0xc8, 0xa7, 0x4b, 0x17, 0x34, 0x72,
-    0xc5, 0x39, 0xe9, 0x9c, 0xe6, 0xfe, 0xfc, 0xfb, 0xf8, 0x05, 0x8b, 0xff,
-    0xfe, 0x29, 0xdb, 0x07, 0x30, 0xfe, 0x7d, 0xa3, 0xde, 0x3e, 0x74, 0xb1,
-    0x7f, 0xed, 0xfe, 0xe3, 0x6d, 0x02, 0x3b, 0x16, 0x2f, 0xc2, 0xec, 0xa6,
-    0x25, 0x8a, 0x81, 0xf6, 0xc4, 0x87, 0x7e, 0xcd, 0x69, 0x80, 0xb1, 0x52,
-    0x79, 0x7e, 0x23, 0xbf, 0xe9, 0x81, 0x37, 0xa0, 0xfd, 0x16, 0x2f, 0x07,
-    0x20, 0x58, 0xbd, 0xd4, 0xfb, 0x2c, 0x56, 0xc9, 0xde, 0x9e, 0x32, 0x3f,
-    0x90, 0xf0, 0xeb, 0xc3, 0xd7, 0xde, 0xfc, 0xf5, 0x2c, 0x52, 0xc5, 0xcf,
-    0x12, 0xc5, 0x47, 0x9a, 0x40, 0x06, 0x5e, 0x9e, 0xa9, 0x58, 0xbf, 0xe3,
-    0x64, 0x98, 0x7f, 0x90, 0x2c, 0x5f, 0xf6, 0x44, 0x53, 0xb7, 0x27, 0x75,
-    0x8b, 0xa1, 0x8b, 0x15, 0xa4, 0x45, 0xfc, 0xe7, 0xc7, 0x77, 0x73, 0x16,
-    0x2f, 0xa2, 0x79, 0xe2, 0xc5, 0xff, 0xff, 0xe7, 0xf4, 0xf4, 0xd4, 0xf0,
-    0xc9, 0x22, 0xc7, 0xf3, 0x1f, 0x53, 0xc5, 0x8b, 0x87, 0x2b, 0x15, 0x28,
-    0xb1, 0xc2, 0x31, 0x3b, 0xdf, 0xd2, 0x1e, 0x1d, 0xbb, 0x58, 0xbf, 0xf4,
-    0xeb, 0x7f, 0x16, 0x6c, 0xc4, 0xb1, 0x7c, 0x07, 0x9e, 0x2c, 0x5d, 0xcc,
-    0x58, 0xbf, 0xfd, 0xee, 0x4c, 0x06, 0xc0, 0xc1, 0xbf, 0x16, 0x2a, 0x07,
-    0xc3, 0x82, 0xf5, 0xf4, 0xc4, 0xb8, 0x5e, 0x23, 0xf8, 0xe8, 0x41, 0xdf,
-    0xf4, 0xf1, 0xb7, 0x71, 0xfd, 0xd6, 0x2f, 0xf0, 0xf5, 0x82, 0xdd, 0xce,
-    0xb1, 0x7e, 0xc1, 0x6e, 0xe7, 0x58, 0xbd, 0xf1, 0x7d, 0x62, 0xc7, 0xc3,
-    0xfc, 0xd1, 0xab, 0x14, 0xdf, 0xe1, 0x40, 0xb0, 0x0f, 0xda, 0xc5, 0xfe,
-    0xce, 0x8c, 0x43, 0xc0, 0x2c, 0x56, 0x8f, 0xa3, 0xe6, 0x95, 0x12, 0x6e,
-    0x4d, 0x0b, 0x5f, 0x42, 0x6e, 0xdf, 0x58, 0xa9, 0x64, 0x47, 0xed, 0x0d,
-    0xc1, 0x90, 0xe4, 0x7d, 0x7d, 0xa9, 0x3a, 0x51, 0xc9, 0x1a, 0x15, 0x40,
-    0x30, 0x28, 0x64, 0x7a, 0x34, 0x01, 0x47, 0x70, 0x11, 0xdd, 0xf9, 0xf4,
-    0xfd, 0x81, 0x62, 0x96, 0x2a, 0x4d, 0xae, 0x14, 0xdf, 0xf4, 0x5c, 0x9c,
-    0x21, 0xfe, 0x56, 0x2c, 0x75, 0x8a, 0x23, 0xcb, 0xf1, 0xcd, 0xfc, 0x2f,
-    0x7b, 0x98, 0x12, 0xc5, 0xfc, 0xe6, 0x71, 0xc9, 0xd6, 0x2f, 0xe6, 0xcd,
-    0x00, 0x12, 0xb1, 0x7d, 0xf7, 0x68, 0x2c, 0x5f, 0xff, 0xff, 0x16, 0x40,
-    0x5a, 0x9d, 0x6b, 0x07, 0x2e, 0x6c, 0x96, 0xed, 0xe6, 0x35, 0x62, 0xb1,
-    0x13, 0xec, 0x45, 0x77, 0x5f, 0xc5, 0x8b, 0xdd, 0x96, 0x96, 0x2b, 0x0d,
-    0xdf, 0x07, 0x6f, 0xf6, 0xb3, 0xee, 0x52, 0x75, 0x8b, 0xff, 0xa6, 0x3f,
-    0xe5, 0x9d, 0xf8, 0x4d, 0xc5, 0x8b, 0xfa, 0x5b, 0x5e, 0xcf, 0xac, 0x5f,
-    0xfc, 0x59, 0x14, 0xec, 0xdb, 0x1d, 0xf6, 0x58, 0xbf, 0x61, 0xba, 0x60,
-    0x96, 0x2d, 0x8e, 0x7e, 0x21, 0xa3, 0xdf, 0xfe, 0x3e, 0x0e, 0x61, 0x3c,
-    0x03, 0x37, 0x6b, 0x15, 0x29, 0xc4, 0x9c, 0xcb, 0xe9, 0x1c, 0x84, 0xf0,
-    0x64, 0xf4, 0x62, 0xe0, 0x4c, 0xb5, 0x68, 0x87, 0xe6, 0x0c, 0x5b, 0xc8,
-    0x66, 0x79, 0x70, 0x51, 0xd4, 0xdf, 0xf7, 0x9b, 0x99, 0xff, 0xb9, 0xd6,
-    0x2e, 0xff, 0x16, 0x2f, 0xb3, 0xa6, 0x12, 0xc5, 0xfe, 0xe6, 0x38, 0xd9,
-    0xf6, 0x58, 0xa9, 0x3d, 0x6c, 0x23, 0xbf, 0xf1, 0x30, 0x30, 0xbd, 0xc6,
-    0x82, 0xc5, 0x4a, 0x60, 0x86, 0x9c, 0xe9, 0xbb, 0xc4, 0x17, 0xe2, 0x9d,
-    0xa7, 0x65, 0x8b, 0xff, 0xbd, 0xc0, 0xfc, 0xe4, 0x28, 0x67, 0x16, 0x28,
-    0x68, 0xad, 0x88, 0xf8, 0x8a, 0x6f, 0xc7, 0xf4, 0x76, 0x7d, 0x62, 0xfe,
-    0x1c, 0xb6, 0x80, 0x25, 0x8b, 0xfa, 0x48, 0x07, 0x68, 0x2c, 0x5b, 0xeb,
-    0x17, 0x8b, 0xbf, 0x2c, 0x56, 0x1b, 0x07, 0x12, 0xad, 0x91, 0x55, 0xf2,
-    0xee, 0x8b, 0xb7, 0xcc, 0xfa, 0xc5, 0x8b, 0xfc, 0xcf, 0xc7, 0xe9, 0xf7,
-    0x58, 0xad, 0x1e, 0xaf, 0xc8, 0x6f, 0xc3, 0x03, 0x97, 0x96, 0x2e, 0xe3,
-    0xac, 0x56, 0x1b, 0xf6, 0x28, 0xbf, 0x7e, 0x73, 0x50, 0x58, 0xbf, 0xf8,
-    0xee, 0x06, 0xf1, 0x66, 0xda, 0x95, 0x8a, 0x58, 0xb6, 0x39, 0xe8, 0x79,
-    0x12, 0xf7, 0xfc, 0xeb, 0x17, 0xff, 0xd9, 0xb6, 0xa4, 0x31, 0xb6, 0xd8,
-    0x76, 0xed, 0x62, 0xfb, 0x9e, 0xc3, 0xac, 0x5f, 0xb3, 0xa1, 0x64, 0x16,
-    0x2e, 0x17, 0xd6, 0x2a, 0x3c, 0xf0, 0x4e, 0x53, 0x7e, 0x80, 0x7f, 0xce,
-    0xa5, 0x8b, 0x9e, 0x25, 0x8a, 0x94, 0x67, 0x3b, 0x23, 0x12, 0xf8, 0xb6,
-    0xf7, 0xff, 0x2b, 0x17, 0xf1, 0xad, 0x0e, 0x38, 0xd6, 0x2b, 0x0f, 0x31,
-    0xc7, 0x6a, 0x57, 0x24, 0x36, 0x30, 0xc8, 0x6b, 0x3c, 0x22, 0x34, 0xc2,
-    0x71, 0xff, 0xbc, 0x31, 0x31, 0x0e, 0xf2, 0x32, 0x1f, 0x42, 0x1a, 0xe1,
-    0x41, 0x62, 0xfe, 0xfb, 0xeb, 0x59, 0xe5, 0x8b, 0xff, 0xf7, 0x1a, 0x3c,
-    0x7f, 0x9c, 0x7d, 0x4f, 0xa7, 0xeb, 0x15, 0xb2, 0x27, 0x77, 0x18, 0xec,
-    0xba, 0xf9, 0x8f, 0x31, 0xeb, 0x17, 0x87, 0x30, 0x58, 0xb9, 0xf9, 0xf3,
-    0xc2, 0x11, 0x2d, 0xd3, 0x05, 0x8b, 0xff, 0xa0, 0xfd, 0x27, 0x58, 0xf0,
-    0x16, 0x96, 0x2f, 0xa4, 0x1c, 0xc5, 0x8b, 0xf3, 0xf5, 0x47, 0xb1, 0xd6,
-    0x2a, 0x24, 0x4b, 0x7d, 0x1b, 0x84, 0x57, 0x0a, 0x0b, 0x15, 0xa4, 0xc8,
-    0xfe, 0x5a, 0xd0, 0xad, 0xe8, 0x63, 0x78, 0xf3, 0x2b, 0x17, 0xe3, 0xb1,
-    0x77, 0x05, 0x8b, 0x9a, 0x0b, 0x17, 0xe2, 0xf4, 0x74, 0x9d, 0x62, 0xa4,
-    0xfa, 0xd8, 0xa4, 0x42, 0xf7, 0x9c, 0x2d, 0xd6, 0x2f, 0x75, 0xdf, 0x5c,
-    0x8d, 0x16, 0x2f, 0x60, 0xf1, 0x62, 0xf7, 0x9c, 0x0b, 0x15, 0x1e, 0x88,
-    0x83, 0x8f, 0xfc, 0xc3, 0xc3, 0x97, 0xed, 0x0f, 0x08, 0xd5, 0x8b, 0x41,
-    0x62, 0xff, 0xd3, 0xf1, 0x30, 0x79, 0xd1, 0xb4, 0xb1, 0x4e, 0x7a, 0x7c,
-    0x12, 0xbc, 0xe4, 0x35, 0x8a, 0x94, 0x7c, 0xb2, 0x07, 0x9f, 0x3a, 0x10,
-    0xdf, 0xfe, 0x07, 0xc2, 0x6f, 0x3f, 0x3f, 0x25, 0xe5, 0x8b, 0x44, 0xb1,
-    0x7a, 0x4a, 0x56, 0x2b, 0x47, 0xf2, 0x24, 0xb0, 0x84, 0xef, 0xf1, 0xf8,
-    0xf1, 0xd9, 0xa9, 0x58, 0xb8, 0xfa, 0x58, 0xbc, 0x69, 0xdd, 0x62, 0xb0,
-    0xdb, 0x30, 0xc5, 0xe7, 0x3b, 0xac, 0x54, 0xa3, 0x5f, 0x0c, 0x09, 0xb3,
-    0xc3, 0xf5, 0x1b, 0xbf, 0x71, 0x67, 0x58, 0xcd, 0xd7, 0x70, 0xcc, 0x8d,
-    0x65, 0x33, 0x28, 0x67, 0x68, 0xe8, 0xa1, 0x3e, 0x2a, 0x39, 0xf5, 0x1c,
-    0x95, 0x55, 0xbc, 0xad, 0x9e, 0xe3, 0x3e, 0x7a, 0xd1, 0x56, 0x3e, 0x3e,
-    0x78, 0xa5, 0x89, 0xea, 0x7c, 0x1c, 0xf4, 0x84, 0x2f, 0xd2, 0x40, 0xda,
-    0x33, 0x80, 0x4a, 0xac, 0x2a, 0x5b, 0xef, 0x27, 0x44, 0xfd, 0x3d, 0x7e,
-    0x28, 0xd2, 0x7a, 0x47, 0x30, 0x12, 0x24, 0x74, 0x21, 0xc3, 0x8e, 0xbb,
-    0xaa, 0x38, 0xdb, 0x3a, 0xc5, 0xc6, 0x01, 0x62, 0x8c, 0x35, 0x5c, 0x11,
-    0xb8, 0xdf, 0x2c, 0x5f, 0xff, 0xe8, 0xda, 0x73, 0xae, 0xba, 0x8d, 0xa3,
-    0x57, 0x48, 0xf8, 0xd6, 0x23, 0x0c, 0xfc, 0x72, 0xc5, 0xba, 0xc5, 0x8a,
-    0xeb, 0x88, 0xa3, 0x8a, 0x11, 0x97, 0xed, 0x38, 0xba, 0xf9, 0x58, 0xb9,
-    0xcd, 0x58, 0xbf, 0x81, 0xc8, 0x8a, 0x46, 0xb1, 0x7f, 0xdd, 0x30, 0x7d,
-    0xf8, 0xb0, 0x0b, 0x15, 0x27, 0xd6, 0xe5, 0xf7, 0xfe, 0x7d, 0x1e, 0x70,
-    0x86, 0x19, 0xd6, 0x2a, 0x07, 0xbe, 0x69, 0x05, 0xef, 0x30, 0x6b, 0x17,
-    0x06, 0x75, 0x8b, 0xdf, 0xcf, 0x2c, 0x54, 0x46, 0xd8, 0x03, 0x37, 0xfd,
-    0x9e, 0xe6, 0x7b, 0xf8, 0x05, 0x8b, 0xfc, 0x64, 0x98, 0x77, 0x2f, 0x2c,
-    0x5f, 0xe7, 0x35, 0x8b, 0xd8, 0x4b, 0x17, 0xf9, 0x8d, 0x7e, 0x71, 0x9d,
-    0x62, 0xa5, 0x53, 0xdc, 0x0b, 0x72, 0x1c, 0x4e, 0x46, 0xca, 0x84, 0x45,
-    0xc3, 0x9f, 0x1a, 0xf4, 0x32, 0xb9, 0x89, 0x62, 0xf6, 0x7d, 0x96, 0x2f,
-    0xfb, 0x79, 0x04, 0x97, 0xa3, 0xb1, 0x62, 0xec, 0xdd, 0x62, 0x8c, 0x3f,
-    0x0c, 0x1c, 0x63, 0xca, 0xd2, 0x66, 0xc7, 0x84, 0x17, 0xa1, 0x0d, 0x76,
-    0x04, 0xb1, 0x7e, 0xc2, 0x9e, 0xf8, 0xb1, 0x63, 0xac, 0x51, 0x87, 0xa4,
-    0x10, 0xc0, 0x65, 0x17, 0xd9, 0xf6, 0xea, 0x58, 0xbd, 0xec, 0x3a, 0xc5,
-    0xe9, 0xc2, 0x58, 0xbf, 0x36, 0x81, 0x1d, 0x8b, 0x15, 0x03, 0xc6, 0x71,
-    0xba, 0x94, 0x42, 0x79, 0x8e, 0xfd, 0xe9, 0x27, 0x02, 0xc5, 0xdd, 0xf6,
-    0xb1, 0x71, 0x9c, 0x58, 0xbf, 0x68, 0x5d, 0x00, 0x12, 0xc5, 0xc5, 0xc5,
-    0x8b, 0xf0, 0x4c, 0x03, 0xe2, 0xc5, 0xb8, 0xb1, 0x58, 0x6e, 0xc8, 0xa6,
-    0xd0, 0x58, 0xba, 0x06, 0xac, 0x5d, 0x3d, 0x16, 0x2d, 0xba, 0xc5, 0xe2,
-    0x90, 0x49, 0xe2, 0xee, 0x32, 0x71, 0x9a, 0xc4, 0x4b, 0x79, 0x5e, 0xfe,
-    0x2c, 0xf0, 0x98, 0x25, 0x8a, 0x31, 0x50, 0x06, 0x11, 0x76, 0x4e, 0x71,
-    0xaf, 0x8c, 0x80, 0xb4, 0x94, 0xb9, 0x0b, 0x5e, 0x84, 0x57, 0xef, 0x71,
-    0xfb, 0x09, 0x62, 0xff, 0xd2, 0x77, 0xef, 0x82, 0x88, 0x46, 0xac, 0x5f,
-    0x8b, 0xdf, 0xc8, 0x2c, 0x5d, 0xcc, 0x58, 0xa7, 0x37, 0xec, 0x51, 0x6e,
-    0xd6, 0x2f, 0xe6, 0x08, 0x7f, 0x70, 0x96, 0x2f, 0xe9, 0x0a, 0x3b, 0x35,
-    0x2b, 0x15, 0x87, 0xe8, 0xc2, 0x64, 0x61, 0x7f, 0xfd, 0xd1, 0xf5, 0x80,
-    0x68, 0x71, 0xcb, 0x00, 0xb1, 0x7e, 0x6c, 0x00, 0x7e, 0x58, 0xbf, 0xbe,
-    0xc3, 0x61, 0x76, 0xb1, 0x76, 0xa5, 0x62, 0xff, 0xc2, 0x7f, 0xff, 0x35,
-    0xa7, 0x3a, 0xc5, 0xe1, 0xcf, 0x52, 0xc5, 0xf7, 0xdd, 0xa3, 0xd6, 0x28,
-    0x8f, 0x17, 0xc4, 0x14, 0x62, 0xaa, 0x58, 0x42, 0x08, 0x70, 0x93, 0xc2,
-    0xc3, 0x54, 0x37, 0x29, 0x8f, 0x2f, 0x38, 0xbb, 0x42, 0x12, 0xb4, 0xad,
-    0x8c, 0x29, 0x5a, 0x17, 0xed, 0xdc, 0x11, 0xc6, 0xac, 0x5f, 0x6d, 0x3e,
-    0xe2, 0xc5, 0xe9, 0x07, 0x16, 0x2b, 0x47, 0x82, 0x44, 0x97, 0xcd, 0xa6,
-    0x82, 0xc5, 0x61, 0xe1, 0x91, 0x0d, 0xbc, 0xb1, 0x7b, 0x92, 0x05, 0x8b,
-    0x67, 0x66, 0xbf, 0xc2, 0x54, 0x62, 0x65, 0x1a, 0x85, 0x97, 0xd3, 0xef,
-    0xfd, 0x21, 0x77, 0x0e, 0x37, 0xf2, 0x25, 0x8b, 0xdd, 0x35, 0xb2, 0xc5,
-    0xff, 0xfc, 0x3c, 0xea, 0x73, 0xbf, 0x80, 0xc3, 0x13, 0x6a, 0x0b, 0x14,
-    0x33, 0xff, 0xe1, 0x0d, 0xe0, 0x82, 0x09, 0x62, 0xf1, 0x3c, 0xa4, 0x46,
-    0x1a, 0x1b, 0xc7, 0x71, 0xac, 0x5f, 0xff, 0xfe, 0x33, 0xf0, 0xdb, 0x92,
-    0x2e, 0x39, 0xd8, 0xf2, 0xc1, 0x98, 0x67, 0xe3, 0x96, 0x2b, 0x64, 0x66,
-    0x31, 0x70, 0x63, 0xb7, 0xf7, 0xe7, 0xe5, 0x86, 0xac, 0x5f, 0xbf, 0x3d,
-    0x82, 0x3d, 0x62, 0xf0, 0x8b, 0xcb, 0x17, 0xf3, 0x14, 0x07, 0x3b, 0x2c,
-    0x50, 0xcf, 0xe3, 0x0b, 0x7e, 0x3b, 0x7f, 0xcc, 0xdf, 0x66, 0x66, 0x1a,
-    0xc5, 0x0d, 0x30, 0xa8, 0xf8, 0x53, 0x31, 0x75, 0xec, 0x84, 0xac, 0x5f,
-    0xff, 0x41, 0xfd, 0x09, 0x20, 0x31, 0x3f, 0x70, 0x58, 0xad, 0x1f, 0x58,
-    0x43, 0x97, 0xcd, 0xe9, 0x1a, 0xc5, 0xec, 0x2d, 0xd6, 0x2f, 0x44, 0xff,
-    0x58, 0xbb, 0xb8, 0x2c, 0x5f, 0xed, 0x6d, 0x39, 0x13, 0xe9, 0x62, 0xff,
-    0x1b, 0x3e, 0xe7, 0xd8, 0x4b, 0x17, 0x1e, 0x56, 0x2f, 0xdf, 0x72, 0xef,
-    0x8b, 0x17, 0xe9, 0x78, 0x37, 0x16, 0x2f, 0xb6, 0xce, 0xfc, 0xb1, 0x7c,
-    0xe6, 0xb7, 0x96, 0x29, 0xcf, 0x23, 0x44, 0xb6, 0x89, 0x62, 0xf6, 0x03,
-    0x8b, 0x15, 0x26, 0xc0, 0x84, 0xef, 0xf3, 0x7c, 0xb3, 0xa3, 0x6e, 0xb1,
-    0x73, 0x79, 0x62, 0xf6, 0xa4, 0x25, 0x8a, 0x58, 0xad, 0x1a, 0xa0, 0x0f,
-    0x5b, 0x75, 0x8b, 0xf0, 0x7a, 0xc1, 0x0d, 0x62, 0xb0, 0xf7, 0x9c, 0x87,
-    0x82, 0x75, 0x2a, 0xa8, 0xf0, 0x64, 0xd3, 0x57, 0x35, 0x88, 0x5f, 0x45,
-    0x27, 0x6f, 0x65, 0x12, 0x1f, 0xe1, 0xaf, 0xa1, 0x3f, 0x7c, 0xff, 0x14,
-    0x16, 0x2e, 0xfc, 0xac, 0x5f, 0x3f, 0xc5, 0x03, 0x0d, 0xd6, 0x11, 0xdf,
-    0xdc, 0x7d, 0x6f, 0xfc, 0x58, 0xbe, 0xc1, 0xbc, 0x16, 0x2f, 0xef, 0xff,
-    0x3c, 0xfc, 0x58, 0xbf, 0xfa, 0x4f, 0x39, 0xc7, 0x8b, 0xf3, 0xf5, 0x8a,
-    0x73, 0xf2, 0xf9, 0x75, 0xf1, 0xf9, 0x80, 0x58, 0xb4, 0x0c, 0x4c, 0xff,
-    0xb3, 0x82, 0x2f, 0xe4, 0x25, 0x03, 0x21, 0xbf, 0x67, 0x5a, 0x4e, 0x35,
-    0x8b, 0xe6, 0xe7, 0x48, 0x2c, 0x5d, 0x83, 0x58, 0xa3, 0x4d, 0xe7, 0x42,
-    0x5a, 0x82, 0xed, 0xd7, 0x72, 0xb0, 0x75, 0x28, 0x54, 0x0b, 0x1e, 0x68,
-    0xbf, 0x31, 0x41, 0xce, 0xb1, 0x7b, 0x05, 0x1c, 0xb1, 0x46, 0x37, 0x01,
-    0x3d, 0x69, 0x14, 0x6a, 0x85, 0xe4, 0xcb, 0xe0, 0xda, 0x11, 0xb0, 0x32,
-    0x1c, 0xaa, 0x9c, 0x97, 0xd4, 0xf1, 0xaa, 0xe8, 0xdc, 0xf0, 0xc1, 0xfc,
-    0x61, 0xed, 0x19, 0xd8, 0x21, 0x46, 0x44, 0x7c, 0x22, 0x14, 0xee, 0xbf,
-    0x45, 0xc8, 0xe2, 0x7b, 0xdd, 0x67, 0x5d, 0xc6, 0xeb, 0x17, 0xfd, 0xf6,
-    0x88, 0xa7, 0x35, 0x05, 0x8b, 0xfc, 0x19, 0xf0, 0x72, 0x5b, 0xac, 0x5f,
-    0xf9, 0x88, 0x38, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xfc, 0x16, 0x70, 0x9e,
-    0x75, 0x9b, 0x2c, 0x54, 0x7a, 0x3b, 0x8e, 0x72, 0x23, 0x5e, 0x88, 0x37,
-    0xc2, 0xda, 0x62, 0x58, 0xbf, 0xff, 0xff, 0xe3, 0x3f, 0x9d, 0xc3, 0xe7,
-    0x33, 0x7f, 0x8b, 0xde, 0xc2, 0xfe, 0x7a, 0x46, 0x61, 0x9f, 0x8e, 0x58,
-    0xa9, 0x46, 0x2c, 0x79, 0x2d, 0xff, 0xa7, 0x69, 0x8a, 0x49, 0xfb, 0xe2,
-    0xc5, 0xee, 0xbb, 0x8d, 0x5d, 0x6a, 0xc5, 0xfd, 0xbf, 0xd8, 0x2e, 0xf8,
-    0xb1, 0x7c, 0x53, 0x83, 0x58, 0xbd, 0xf7, 0x1a, 0xc5, 0xf8, 0x6f, 0xec,
-    0xdd, 0x62, 0x8c, 0x4c, 0x26, 0x35, 0xa0, 0x49, 0x81, 0xa6, 0x5b, 0x90,
-    0x9c, 0x76, 0xe8, 0xb1, 0x62, 0xff, 0x19, 0xec, 0x88, 0x5d, 0x81, 0x62,
-    0xb0, 0xf4, 0x1c, 0x62, 0xfc, 0x53, 0xa6, 0xe2, 0xc5, 0xff, 0x0f, 0x05,
-    0xd7, 0xbf, 0xd8, 0xeb, 0x17, 0xc7, 0x2c, 0x89, 0x63, 0x0d, 0xf5, 0xfa,
-    0x18, 0x4d, 0x05, 0x8a, 0x93, 0xd9, 0x63, 0x2b, 0xfe, 0x1f, 0xe7, 0x30,
-    0xef, 0x2b, 0x17, 0x9f, 0x69, 0x58, 0xbc, 0x0c, 0xe2, 0xc5, 0xf3, 0x76,
-    0x7e, 0xd6, 0x28, 0xe7, 0xbe, 0x01, 0xdf, 0x0e, 0xd4, 0xa3, 0x17, 0x21,
-    0x2d, 0x78, 0x73, 0x12, 0xc5, 0xfc, 0xfc, 0x14, 0x4e, 0x75, 0x8b, 0xdf,
-    0x7f, 0xac, 0x5c, 0x13, 0x2c, 0x5b, 0x98, 0x6d, 0x7e, 0x3b, 0x7c, 0xcf,
-    0x20, 0x58, 0xbb, 0xf2, 0xb1, 0x7b, 0xe2, 0x82, 0xc6, 0x16, 0xf7, 0xe1,
-    0x31, 0x6f, 0xc5, 0x8b, 0xfd, 0xe7, 0x14, 0x38, 0xfb, 0x2c, 0x58, 0xce,
-    0xb5, 0x18, 0x4e, 0x70, 0x02, 0xce, 0x14, 0xde, 0xd4, 0xf4, 0x58, 0xbe,
-    0xe4, 0x94, 0x16, 0x2f, 0xf1, 0x30, 0x5e, 0xc2, 0x35, 0x62, 0xf7, 0x4c,
-    0x1a, 0xc5, 0xfd, 0xf7, 0x92, 0x14, 0xac, 0x5f, 0xe9, 0x8f, 0x37, 0x38,
-    0xd1, 0xeb, 0x17, 0xc0, 0x72, 0x89, 0x62, 0x8d, 0x44, 0x4f, 0xcb, 0x3c,
-    0x75, 0x7e, 0xc1, 0x86, 0x0e, 0x2c, 0x5f, 0x71, 0x8a, 0x0b, 0x17, 0xff,
-    0xff, 0xfd, 0xa1, 0x6b, 0x37, 0xcd, 0x69, 0xa1, 0x9e, 0x9f, 0x73, 0x82,
-    0x63, 0x87, 0xf6, 0xfc, 0xac, 0x51, 0x8a, 0x8c, 0x3b, 0x1f, 0x88, 0x8b,
-    0xe6, 0x8d, 0x0a, 0x82, 0x31, 0xe1, 0x57, 0x51, 0x15, 0xf7, 0x46, 0xfb,
-    0xac, 0x5f, 0xec, 0xe3, 0x37, 0x70, 0x75, 0x8b, 0xf4, 0x08, 0x4d, 0xc5,
-    0x8b, 0x83, 0xfa, 0xc5, 0xe8, 0x84, 0x1a, 0xc5, 0x49, 0xb9, 0x61, 0x9b,
-    0x8b, 0xcb, 0x17, 0x4c, 0x4b, 0x17, 0x16, 0xcb, 0x15, 0x29, 0x8f, 0x6c,
-    0x48, 0xe6, 0x7f, 0x61, 0x61, 0xf2, 0x17, 0xea, 0x18, 0xbf, 0x34, 0x5c,
-    0x9e, 0xd6, 0x28, 0xc5, 0xfd, 0x41, 0xc2, 0xfb, 0x50, 0xe5, 0x39, 0x37,
-    0xc7, 0x80, 0xc8, 0x50, 0xe8, 0xe4, 0xa7, 0x8f, 0x47, 0x35, 0xd1, 0x96,
-    0xfe, 0x98, 0x7e, 0x7a, 0x3a, 0xc5, 0xcd, 0x1e, 0xb1, 0x7f, 0xf7, 0xdc,
-    0x13, 0x0e, 0x0f, 0xf3, 0xa5, 0x8b, 0x1f, 0x63, 0xdf, 0xdc, 0x6a, 0xf4,
-    0x9e, 0x56, 0x2b, 0x0f, 0x1b, 0x72, 0xab, 0xdf, 0x0f, 0x8b, 0x17, 0xf8,
-    0xbd, 0xe2, 0x9f, 0x71, 0x62, 0xf1, 0x08, 0xd5, 0x8a, 0x93, 0xd1, 0x73,
-    0x3b, 0xfa, 0x12, 0x0f, 0xc2, 0x56, 0x28, 0xd3, 0xce, 0x72, 0x0b, 0xfe,
-    0xfc, 0xe8, 0xf3, 0x84, 0x35, 0x8b, 0xc5, 0x27, 0x58, 0xa1, 0x9e, 0xa0,
-    0x8e, 0x2f, 0x33, 0x1d, 0x62, 0x8e, 0x6f, 0xbe, 0x45, 0x7b, 0xc1, 0x9d,
-    0x62, 0xc3, 0x58, 0xbb, 0x3a, 0x96, 0x2e, 0x6e, 0x2c, 0x5b, 0x5d, 0x9f,
-    0x11, 0xc7, 0xfe, 0x24, 0x21, 0xaa, 0x94, 0x63, 0x34, 0x20, 0xee, 0x87,
-    0x96, 0x2f, 0xa2, 0x9f, 0x32, 0xc5, 0x6e, 0x6e, 0xc4, 0x31, 0x78, 0xb3,
-    0x8b, 0x17, 0x84, 0x0c, 0x23, 0x7d, 0xd0, 0x8a, 0xd0, 0x58, 0xad, 0x8f,
-    0x17, 0xe6, 0x77, 0xfe, 0xf8, 0x63, 0xf3, 0xe4, 0x52, 0x75, 0x8b, 0xa6,
-    0x25, 0x8b, 0xe1, 0xfe, 0x40, 0xb1, 0x52, 0x7f, 0x84, 0x82, 0x18, 0xc5,
-    0xff, 0x89, 0xbd, 0x38, 0x13, 0x13, 0x2c, 0x5f, 0xe3, 0x19, 0xc6, 0x2f,
-    0x71, 0x62, 0xb7, 0x3f, 0x10, 0x1e, 0x5e, 0x92, 0x35, 0x62, 0xff, 0xde,
-    0x70, 0xb7, 0xfb, 0xf4, 0x71, 0xac, 0x5f, 0xed, 0x43, 0xf9, 0xd2, 0x4e,
-    0xb1, 0x4b, 0x17, 0x73, 0x16, 0x2a, 0x06, 0x8f, 0xaf, 0x0c, 0xbb, 0x36,
-    0x58, 0xa1, 0x1b, 0xe0, 0xc9, 0xaf, 0x3f, 0x61, 0x2c, 0x5e, 0x10, 0xf7,
-    0x58, 0xa9, 0x4d, 0xeb, 0x72, 0x3e, 0xc7, 0x5d, 0x0d, 0xa1, 0x2e, 0x02,
-    0x2f, 0x0f, 0xde, 0xee, 0x1b, 0xac, 0x5d, 0x06, 0x58, 0xb8, 0x84, 0xb1,
-    0x7b, 0x8f, 0xd1, 0x62, 0xfb, 0xcc, 0xdf, 0x58, 0xa8, 0x1e, 0x09, 0x0f,
-    0xd4, 0xa2, 0x43, 0x61, 0x76, 0x58, 0xbe, 0xcd, 0x48, 0xd6, 0x2f, 0xa2,
-    0xfe, 0x44, 0xb1, 0x7f, 0x85, 0xb7, 0x8a, 0x4f, 0xc5, 0x8b, 0xd9, 0xac,
-    0x30, 0xff, 0x18, 0x88, 0x32, 0x5b, 0xc7, 0x17, 0x45, 0x8b, 0xfb, 0x21,
-    0xdc, 0x33, 0xcb, 0x16, 0xf4, 0x11, 0x1f, 0x88, 0x1f, 0x20, 0xb9, 0xf7,
-    0x58, 0xb3, 0x2c, 0x5d, 0xa8, 0x2c, 0x5a, 0x18, 0x6a, 0x5c, 0x46, 0xf7,
-    0x54, 0x78, 0xd6, 0x2f, 0xcf, 0xb1, 0xda, 0x39, 0x62, 0xc7, 0x30, 0xfd,
-    0x63, 0x62, 0x5f, 0x12, 0x50, 0x11, 0xe2, 0x28, 0x5b, 0x52, 0xc5, 0xf0,
-    0xe3, 0xa4, 0x25, 0x8b, 0x84, 0x75, 0x8a, 0x23, 0x7f, 0xe2, 0x7b, 0xee,
-    0xe1, 0xf7, 0x58, 0xa9, 0x3c, 0x46, 0x20, 0xbf, 0xa4, 0xdf, 0x70, 0x44,
-    0xb1, 0x7f, 0x7a, 0x7a, 0x39, 0x01, 0x62, 0x95, 0x20, 0x71, 0x7f, 0xde,
-    0x83, 0x9e, 0x7e, 0x18, 0xd6, 0x2c, 0x05, 0x8b, 0xf9, 0xb6, 0x03, 0x10,
-    0xd1, 0x08, 0x36, 0x2b, 0x73, 0x11, 0xab, 0xb9, 0x7b, 0x0c, 0x91, 0xdc,
-    0x70, 0x95, 0x75, 0x8a, 0x81, 0x0f, 0x08, 0xff, 0x90, 0x7a, 0x30, 0x4b,
-    0x47, 0xac, 0x5f, 0xf3, 0xe7, 0xb9, 0xac, 0x1e, 0x2c, 0x5f, 0xdf, 0x63,
-    0x94, 0xf6, 0xb1, 0x7c, 0x7e, 0x34, 0x3e, 0x7c, 0xc1, 0x9c, 0x5e, 0x66,
-    0xd2, 0xc5, 0xfc, 0x0f, 0x96, 0x7b, 0x8b, 0x17, 0xf1, 0x67, 0x42, 0xce,
-    0x2c, 0x5a, 0x62, 0x3f, 0x8d, 0x0e, 0x78, 0xba, 0xfd, 0x31, 0xcf, 0xf1,
-    0x2c, 0x54, 0xa7, 0xb8, 0x34, 0xfc, 0x7b, 0xe4, 0x2c, 0xbc, 0x6b, 0x6e,
-    0x2c, 0x5f, 0xbf, 0x31, 0xe2, 0x82, 0xc5, 0x49, 0xbe, 0x61, 0x2b, 0xe6,
-    0xf6, 0x04, 0xb1, 0x7f, 0xc3, 0x9e, 0xfe, 0xe3, 0xd6, 0x2c, 0x54, 0x19,
-    0xea, 0x63, 0x86, 0xa6, 0x11, 0x1b, 0x0b, 0xed, 0xe3, 0x7a, 0xd4, 0x39,
-    0x0f, 0x09, 0xff, 0xca, 0x19, 0x66, 0x90, 0x42, 0xc0, 0xa3, 0x3a, 0xe4,
-    0x64, 0xde, 0x9c, 0x08, 0xe9, 0x08, 0xc8, 0xe1, 0xfe, 0xa2, 0x3b, 0xff,
-    0xe3, 0x5a, 0x2f, 0xce, 0xde, 0x73, 0x9c, 0x5c, 0x58, 0xbc, 0xe5, 0xba,
-    0xc5, 0xf6, 0x77, 0xec, 0x58, 0xb4, 0x0e, 0x78, 0x04, 0x3b, 0x7a, 0x1e,
-    0xd9, 0x62, 0xff, 0xf1, 0x67, 0xf1, 0xb7, 0xfc, 0x90, 0x86, 0xb1, 0x7f,
-    0xf8, 0x13, 0xde, 0x6c, 0x36, 0x6d, 0xd8, 0x6b, 0x16, 0x0f, 0x74, 0x4a,
-    0x81, 0x26, 0xa5, 0x30, 0x61, 0x93, 0xea, 0x16, 0x97, 0xf1, 0x7a, 0x19,
-    0xac, 0x58, 0xbf, 0x33, 0x6d, 0x84, 0xb1, 0x74, 0x73, 0x2c, 0x53, 0x1f,
-    0x77, 0x8b, 0x43, 0x27, 0xbf, 0xda, 0xdb, 0x8d, 0xbe, 0xb1, 0x62, 0xff,
-    0xfa, 0x26, 0x3f, 0x03, 0xd7, 0xf3, 0xa4, 0xe7, 0x6b, 0x17, 0xfb, 0xf3,
-    0xf7, 0x37, 0x02, 0x58, 0xbf, 0xb3, 0x76, 0xfc, 0xfd, 0x62, 0xa0, 0x7c,
-    0x7f, 0x35, 0xbf, 0x8b, 0x7c, 0xf7, 0xdd, 0x62, 0xff, 0xf6, 0x98, 0xf8,
-    0x32, 0xcf, 0x72, 0x4e, 0xb1, 0x79, 0x9f, 0xd2, 0x7e, 0xee, 0x5d, 0x6e,
-    0x2c, 0x5f, 0x9c, 0x1c, 0xfb, 0xac, 0x56, 0x1b, 0xa2, 0x12, 0xbf, 0x9b,
-    0xdc, 0xf1, 0x4a, 0xc5, 0xda, 0x1a, 0xc5, 0xc1, 0x04, 0xb1, 0x50, 0x36,
-    0x41, 0x0c, 0x5e, 0x97, 0xe8, 0x91, 0x18, 0x68, 0xaf, 0xf9, 0xc9, 0xc1,
-    0xcc, 0xfb, 0x2c, 0x5f, 0xc5, 0x81, 0x61, 0x0d, 0x62, 0xb1, 0x51, 0xc7,
-    0xe1, 0x32, 0xcd, 0x40, 0x1f, 0xe4, 0x20, 0x7c, 0x62, 0x19, 0xbd, 0xee,
-    0x75, 0x9d, 0x6a, 0xc5, 0xfd, 0x25, 0xef, 0xe4, 0x16, 0x2e, 0xd4, 0xac,
-    0x5c, 0x0e, 0x2c, 0x5f, 0xcf, 0xf7, 0x34, 0xd9, 0x58, 0xa1, 0x9e, 0x3f,
-    0x86, 0x29, 0xd1, 0x00, 0x1a, 0xf5, 0x69, 0x1a, 0x1c, 0x85, 0x6d, 0xf1,
-    0x09, 0x83, 0x58, 0xa9, 0x5c, 0xd8, 0xc3, 0x67, 0x95, 0xe1, 0xe6, 0xf0,
-    0xe1, 0xf1, 0xd4, 0x51, 0x79, 0xcb, 0x16, 0x2f, 0x9c, 0xed, 0x12, 0xc5,
-    0xdc, 0xf2, 0xc5, 0xe7, 0x26, 0x58, 0xb6, 0xcb, 0x16, 0xc8, 0x1a, 0xe2,
-    0x1b, 0xbe, 0xd6, 0xcf, 0xb2, 0xc5, 0xdc, 0xfa, 0xc5, 0xe9, 0x39, 0x98,
-    0x6f, 0x7c, 0x4b, 0x50, 0x4c, 0x60, 0x63, 0x7b, 0x91, 0xc7, 0xa3, 0x13,
-    0x15, 0xff, 0x88, 0x4c, 0x19, 0x99, 0x84, 0x6a, 0xc5, 0xe1, 0xf5, 0xa4,
-    0xb1, 0x7e, 0x01, 0x67, 0x4c, 0x58, 0xbd, 0xf9, 0x95, 0x8b, 0xfd, 0xee,
-    0x7c, 0x52, 0x5b, 0x2c, 0x5e, 0x72, 0x65, 0x8b, 0x3e, 0x1e, 0x86, 0xe6,
-    0xb7, 0xf1, 0xf0, 0x72, 0x5b, 0xac, 0x51, 0x89, 0xa6, 0x75, 0xa8, 0x10,
-    0x22, 0x39, 0x4f, 0xdb, 0x03, 0x27, 0xbc, 0x10, 0x41, 0x24, 0x52, 0x44,
-    0x61, 0xa1, 0xbe, 0x70, 0x9e, 0x24, 0x8a, 0xdc, 0xf0, 0xdc, 0x7e, 0xdd,
-    0x16, 0x2f, 0x4f, 0x4c, 0x58, 0xa1, 0x9b, 0x2d, 0x0a, 0x5e, 0x8b, 0x3e,
-    0xb1, 0x58, 0x6f, 0xd8, 0x86, 0xf7, 0x84, 0xcb, 0x16, 0xd9, 0x62, 0xfb,
-    0xda, 0x6e, 0x8b, 0x15, 0x87, 0xab, 0xa1, 0xd6, 0x13, 0xbf, 0x1d, 0xfe,
-    0xe7, 0x58, 0xbb, 0x3a, 0xf5, 0x8b, 0xfb, 0xe6, 0x69, 0xe7, 0x8b, 0x15,
-    0x1a, 0x3a, 0x9d, 0xf9, 0x8c, 0x77, 0x68, 0xc1, 0xe1, 0x19, 0x70, 0xe1,
-    0x61, 0x93, 0xfe, 0x8f, 0x4f, 0xff, 0x8a, 0x32, 0x3d, 0x47, 0x34, 0x78,
-    0x51, 0xfe, 0x74, 0x1d, 0xa3, 0x7f, 0x04, 0x73, 0x45, 0x0c, 0x3e, 0x42,
-    0x4f, 0xce, 0x9d, 0x0b, 0x42, 0x28, 0x0c, 0x72, 0xfc, 0x4d, 0x0c, 0x1a,
-    0xc5, 0xe8, 0x0b, 0x16, 0x2f, 0xfd, 0x9e, 0xe0, 0x7b, 0x03, 0x3d, 0xc5,
-    0x8b, 0xd1, 0x34, 0xac, 0x5f, 0xb3, 0xbe, 0x4c, 0x16, 0x2b, 0x48, 0xa5,
-    0x00, 0xe8, 0x90, 0x82, 0x1d, 0xbf, 0xef, 0xee, 0xf2, 0x03, 0xcc, 0x16,
-    0x2f, 0xff, 0xfb, 0x99, 0xf9, 0xd0, 0x06, 0xcd, 0xbf, 0x3e, 0xf2, 0x5e,
-    0x58, 0xbf, 0xfb, 0xc0, 0x72, 0x87, 0x36, 0xe9, 0xc7, 0x58, 0xbd, 0xfc,
-    0xd9, 0x62, 0xfd, 0x80, 0x06, 0x01, 0x62, 0x98, 0xf1, 0x88, 0x7a, 0xfc,
-    0x39, 0xfc, 0xc1, 0x62, 0xfe, 0xcd, 0x49, 0x4f, 0x16, 0x2f, 0xf8, 0xed,
-    0xcc, 0xd3, 0x76, 0x12, 0xc5, 0xfd, 0x84, 0x2f, 0x4f, 0xd6, 0x2f, 0xee,
-    0x67, 0x42, 0x9e, 0xf0, 0xfa, 0x38, 0x77, 0x52, 0x98, 0x0e, 0x14, 0x7a,
-    0x12, 0x97, 0xed, 0x3e, 0xcc, 0x75, 0x8b, 0xf7, 0x83, 0xfb, 0x01, 0x62,
-    0xb6, 0x44, 0x3e, 0x1a, 0x76, 0x53, 0x43, 0x54, 0xcf, 0xdc, 0x23, 0x8a,
-    0x3a, 0x8b, 0xc4, 0xfc, 0x58, 0xbc, 0xd9, 0xba, 0xc5, 0xe7, 0xcd, 0x96,
-    0x2f, 0xe2, 0x07, 0x3d, 0xce, 0xd6, 0x2f, 0xfc, 0x13, 0x0c, 0xc0, 0xc0,
-    0x07, 0xea, 0x58, 0xbf, 0x0b, 0xcc, 0x0e, 0x2c, 0x56, 0x22, 0x7f, 0xe6,
-    0x00, 0x46, 0xbf, 0xed, 0xa5, 0xb7, 0x06, 0xb3, 0xb5, 0x8a, 0xd1, 0xf5,
-    0x91, 0x7d, 0xe6, 0x20, 0x2c, 0x5f, 0xde, 0x6f, 0x81, 0xbc, 0xb1, 0x7b,
-    0x33, 0x75, 0x8a, 0x19, 0xf3, 0xe0, 0xe4, 0x45, 0xd7, 0xfc, 0xc7, 0x7f,
-    0xf7, 0xc9, 0x1a, 0xc5, 0xff, 0x88, 0x05, 0x3d, 0xc5, 0x24, 0x05, 0x8b,
-    0xf4, 0x5c, 0xf6, 0x0d, 0x62, 0xa4, 0xfa, 0x43, 0x3f, 0xbf, 0xe9, 0xe1,
-    0xe4, 0xe7, 0x9e, 0xd6, 0x28, 0xc5, 0xe5, 0xad, 0x8e, 0xb2, 0x56, 0x6b,
-    0x9e, 0xe8, 0x73, 0xe3, 0xad, 0x19, 0x38, 0x21, 0x10, 0x45, 0xfc, 0x85,
-    0x18, 0x64, 0x57, 0xe3, 0x0f, 0x39, 0xe5, 0x8b, 0xfe, 0xd4, 0xf3, 0x34,
-    0xdd, 0x84, 0xb1, 0x74, 0x09, 0x62, 0xb0, 0xf4, 0x80, 0x77, 0x5b, 0x22,
-    0x72, 0x0f, 0x77, 0xe8, 0xa3, 0x81, 0x1d, 0x8b, 0x17, 0xbc, 0xdf, 0x58,
-    0xbf, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0x71, 0xbb, 0xc3, 0xac, 0x54, 0x9f,
-    0x77, 0x63, 0xbe, 0x28, 0xbc, 0xf8, 0x6a, 0xc5, 0xfd, 0x0d, 0x64, 0x73,
-    0x81, 0x62, 0xb8, 0x79, 0xc2, 0x1d, 0xbe, 0x6e, 0x9f, 0x75, 0x8b, 0xff,
-    0xe9, 0xef, 0xf9, 0xc1, 0x36, 0x85, 0xb6, 0x7d, 0x62, 0x9c, 0xfd, 0xbe,
-    0x49, 0x7e, 0x2f, 0x71, 0xce, 0xb1, 0x7f, 0xda, 0xe7, 0xdf, 0x71, 0x68,
-    0x0b, 0x15, 0x87, 0xc8, 0xc5, 0x17, 0xfd, 0x9b, 0x1f, 0x3b, 0xf4, 0x9d,
-    0x62, 0xa4, 0xf6, 0xc6, 0x41, 0x7e, 0xd6, 0x74, 0x6f, 0xac, 0x59, 0xd6,
-    0x2f, 0xf9, 0x8d, 0xdf, 0xee, 0x36, 0x82, 0xc5, 0xf6, 0xdb, 0x37, 0x6b,
-    0x16, 0xe3, 0x9f, 0x91, 0x08, 0x86, 0x77, 0x7f, 0xc3, 0xfc, 0xea, 0x41,
-    0x9c, 0x58, 0xbf, 0xff, 0xdf, 0x92, 0x91, 0x6f, 0xe6, 0xfe, 0x1d, 0xfc,
-    0x01, 0x2c, 0x51, 0xa9, 0xb5, 0x02, 0x13, 0x9c, 0x34, 0xf1, 0xcd, 0xf8,
-    0x53, 0xb8, 0x04, 0xb1, 0x7f, 0xb9, 0x27, 0xe6, 0xe2, 0xd9, 0x62, 0xff,
-    0xf1, 0xaf, 0xe2, 0xc8, 0x19, 0xb9, 0xc1, 0x2b, 0x17, 0xd9, 0xaf, 0xba,
-    0xc5, 0xff, 0xff, 0xf3, 0x6b, 0x6f, 0x8b, 0x9a, 0xcc, 0xec, 0x20, 0xc0,
-    0x09, 0xec, 0x39, 0xd0, 0x16, 0x2f, 0xcf, 0x17, 0xdc, 0x0b, 0x17, 0xff,
-    0x9a, 0x05, 0x9d, 0x1a, 0x29, 0xcf, 0x71, 0x62, 0xa5, 0x31, 0xb8, 0x11,
-    0x7e, 0x10, 0xac, 0x53, 0x68, 0xe5, 0x8b, 0xa4, 0xd5, 0x8b, 0xe1, 0xb3,
-    0x8d, 0x62, 0xa3, 0x43, 0xcf, 0xd8, 0x57, 0x06, 0x2f, 0x74, 0xc2, 0x58,
-    0xbb, 0xee, 0xb1, 0x7b, 0xc0, 0x12, 0xc5, 0xff, 0x38, 0x51, 0x19, 0x3a,
-    0xd6, 0x2c, 0x5f, 0xf8, 0x3e, 0xc1, 0x9d, 0x1c, 0xbd, 0xc5, 0x8a, 0x94,
-    0x69, 0x1a, 0x3c, 0xe2, 0xf1, 0x0f, 0x70, 0xf2, 0xff, 0x66, 0xc1, 0xff,
-    0xf9, 0x1e, 0xb1, 0x7f, 0x9f, 0x86, 0x1b, 0xac, 0xe2, 0xc5, 0xf0, 0x39,
-    0xe7, 0x58, 0xbf, 0xf7, 0xf3, 0x36, 0x7c, 0xe9, 0x3d, 0xac, 0x54, 0x9f,
-    0x20, 0x08, 0xea, 0x51, 0xe9, 0xb9, 0xc8, 0x50, 0x9a, 0xbf, 0xfa, 0x4f,
-    0xad, 0x4e, 0xde, 0x66, 0x35, 0x62, 0xe9, 0x09, 0x62, 0x80, 0x7b, 0xc4,
-    0x8d, 0x7f, 0xfc, 0x2e, 0xbf, 0x9c, 0xdf, 0xef, 0xdf, 0xb5, 0xa9, 0x58,
-    0xbf, 0xba, 0x3e, 0xb0, 0x71, 0xa2, 0xc5, 0xf3, 0xfa, 0x74, 0xb1, 0x7f,
-    0xd9, 0xcc, 0x7d, 0x8e, 0xdd, 0x4b, 0x17, 0x7f, 0x16, 0x2a, 0x07, 0xa7,
-    0xc3, 0xca, 0x94, 0xc9, 0x71, 0x67, 0xe6, 0xa2, 0x75, 0xbc, 0x79, 0xdd,
-    0x62, 0xff, 0x9a, 0x1c, 0x03, 0x74, 0xc1, 0xac, 0x5d, 0x9f, 0xc3, 0xd9,
-    0xf8, 0xf5, 0xff, 0x33, 0xfa, 0x60, 0x21, 0xe2, 0xc5, 0xf6, 0x78, 0x3d,
-    0x96, 0x2f, 0x9f, 0x5f, 0x17, 0xcf, 0x77, 0x87, 0x17, 0xed, 0x3e, 0xcc,
-    0x75, 0x8b, 0x82, 0x09, 0x62, 0xb0, 0xf0, 0xc2, 0x29, 0xbf, 0x99, 0xfb,
-    0xe4, 0x9a, 0xb1, 0x61, 0x24, 0x46, 0x1e, 0x8f, 0xc8, 0xa8, 0xe9, 0x80,
-    0x7e, 0x19, 0xb7, 0xff, 0xba, 0x7d, 0xf0, 0xb7, 0xfb, 0x9e, 0x77, 0x58,
-    0xbf, 0x98, 0x1d, 0xc3, 0x3c, 0xb1, 0x58, 0x7f, 0x8e, 0x9b, 0x7a, 0x01,
-    0x9d, 0x62, 0xfd, 0xaf, 0xe6, 0xfb, 0x2c, 0x5e, 0xec, 0x63, 0x58, 0xa7,
-    0x3c, 0xa6, 0x2b, 0xbd, 0x20, 0xe2, 0xc5, 0x41, 0x57, 0xa3, 0xc7, 0x13,
-    0xf8, 0x52, 0xb1, 0x07, 0x1a, 0x44, 0x41, 0x7b, 0x0f, 0x1e, 0xb1, 0x7f,
-    0xe6, 0xe9, 0x81, 0x94, 0xfd, 0xf6, 0x58, 0xbf, 0xd9, 0xc2, 0xcf, 0x7d,
-    0xd6, 0x28, 0x68, 0x93, 0xd1, 0x01, 0x20, 0xdf, 0xf8, 0xb7, 0x1f, 0xe7,
-    0xe4, 0xdb, 0x2c, 0x5f, 0xbe, 0xc4, 0xe7, 0x58, 0xa9, 0x3e, 0x77, 0x40,
-    0xad, 0x99, 0xde, 0x50, 0x84, 0xc0, 0xe1, 0xc1, 0x91, 0xc5, 0xee, 0x89,
-    0xd9, 0x53, 0x9b, 0xc5, 0x1b, 0x46, 0xa1, 0x20, 0x78, 0xc1, 0xbf, 0x19,
-    0xf0, 0x21, 0x28, 0x51, 0xa3, 0x7a, 0x5c, 0x4f, 0x48, 0x7a, 0xf5, 0x42,
-    0x5a, 0xff, 0xcc, 0xdb, 0xfc, 0x43, 0x13, 0x06, 0xb1, 0x7f, 0xc3, 0xc0,
-    0x01, 0xc8, 0xc8, 0xe5, 0x8a, 0x58, 0xbf, 0xb0, 0x00, 0x72, 0x8e, 0x58,
-    0xbf, 0xa7, 0x8f, 0xe2, 0x95, 0x8a, 0x31, 0x14, 0xb2, 0x7a, 0x30, 0xcf,
-    0x98, 0x5f, 0xc1, 0xfb, 0xbd, 0xdf, 0x16, 0x2f, 0xce, 0x5e, 0xc3, 0xac,
-    0x5f, 0x34, 0x30, 0x6b, 0x14, 0x61, 0xfd, 0x40, 0xc4, 0x89, 0xef, 0xb3,
-    0xee, 0x12, 0xc5, 0xfe, 0xf6, 0x68, 0x07, 0x68, 0x2c, 0x5f, 0x40, 0x18,
-    0x05, 0x8b, 0xe6, 0xc0, 0xf1, 0x62, 0xf6, 0x16, 0xeb, 0x17, 0xf7, 0xb2,
-    0x22, 0x93, 0xae, 0x40, 0x22, 0xee, 0xa1, 0x2c, 0x5e, 0x1f, 0xe5, 0x52,
-    0x01, 0x11, 0x87, 0xac, 0x73, 0xbb, 0xc2, 0xd1, 0xab, 0x15, 0xb2, 0x37,
-    0x49, 0xce, 0x39, 0x2e, 0xfe, 0x92, 0x33, 0xcf, 0xb2, 0xc5, 0xff, 0xff,
-    0xe1, 0xc9, 0xf3, 0x9f, 0xc2, 0x63, 0x5b, 0x76, 0xd3, 0x41, 0xf8, 0x05,
-    0x8b, 0xff, 0xdd, 0x7b, 0xeb, 0x3a, 0x3f, 0xa7, 0x0a, 0x0b, 0x17, 0x14,
-    0xac, 0x54, 0xaa, 0xe6, 0xd8, 0xbf, 0x08, 0xfb, 0x34, 0xf9, 0x1b, 0x43,
-    0xfc, 0x06, 0x64, 0x5e, 0x27, 0x7e, 0xa4, 0xfb, 0xfb, 0xbe, 0x61, 0xe6,
-    0x3d, 0x62, 0xfe, 0xc3, 0x38, 0x53, 0xa5, 0x8a, 0xc3, 0xe0, 0x08, 0xca,
-    0xff, 0xa2, 0x90, 0xb5, 0x9b, 0xbf, 0xd6, 0x2f, 0xe7, 0xdb, 0xcd, 0x0e,
-    0x2c, 0x5f, 0xf3, 0xeb, 0xed, 0xc7, 0xd4, 0xac, 0x5a, 0x04, 0x7c, 0xfe,
-    0x2f, 0xbf, 0xef, 0x66, 0xd3, 0xd4, 0xfa, 0xc5, 0x8b, 0xec, 0x3c, 0xc7,
-    0xac, 0x5e, 0xc2, 0xdf, 0xb3, 0xe1, 0xe1, 0xe5, 0xb8, 0xb1, 0x58, 0x78,
-    0xce, 0x69, 0x7f, 0xde, 0x9f, 0x16, 0x6c, 0xc4, 0xb1, 0x58, 0x9e, 0x4f,
-    0x70, 0xa3, 0xfc, 0x33, 0xbc, 0x41, 0x7e, 0x29, 0x21, 0x4a, 0xc5, 0xed,
-    0x37, 0x16, 0x2f, 0xd2, 0x53, 0xee, 0x2c, 0x56, 0x1f, 0x53, 0x93, 0x7c,
-    0x76, 0xee, 0x81, 0xac, 0x5b, 0x83, 0x3c, 0x8c, 0x2d, 0xb3, 0x9a, 0x99,
-    0x0f, 0x70, 0xfa, 0xbf, 0xff, 0xbf, 0x3f, 0xdd, 0xf9, 0x83, 0x2c, 0x8a,
-    0x29, 0xd9, 0x62, 0xfc, 0x70, 0x6b, 0x3b, 0x58, 0xa1, 0xa2, 0x23, 0x17,
-    0xaf, 0xda, 0x71, 0x75, 0xf2, 0xb1, 0x7f, 0xb5, 0x9d, 0xf0, 0x0d, 0xe5,
-    0x8b, 0xfc, 0xe5, 0xe9, 0x07, 0xb8, 0xb1, 0x74, 0xf6, 0xb1, 0x50, 0x3c,
-    0xb0, 0x8c, 0xef, 0xfe, 0x29, 0x88, 0x9e, 0x2f, 0x3f, 0x61, 0x2c, 0x54,
-    0x47, 0xd5, 0xe2, 0x3a, 0x94, 0xce, 0x8d, 0x2d, 0xe4, 0x3a, 0xac, 0x2d,
-    0x93, 0x92, 0xde, 0x35, 0xcb, 0xe8, 0x37, 0x61, 0x2c, 0x52, 0xc5, 0x49,
-    0xb1, 0x19, 0x2d, 0xfe, 0xd6, 0xb3, 0xfd, 0xc3, 0x8b, 0x17, 0xe6, 0xdb,
-    0x8f, 0xa5, 0x8a, 0x30, 0xf7, 0xfe, 0x6d, 0x7f, 0xff, 0xb3, 0x82, 0x6e,
-    0xf3, 0x08, 0xde, 0x73, 0x0b, 0xdc, 0x58, 0xbf, 0xe8, 0x39, 0x7b, 0xf9,
-    0x08, 0xe5, 0x8a, 0xdd, 0x18, 0x1d, 0x91, 0x9d, 0x86, 0xfd, 0x07, 0x1e,
-    0x1d, 0x62, 0xe3, 0x7a, 0x2c, 0x5f, 0xfd, 0xf7, 0xf9, 0x0b, 0x6d, 0xe7,
-    0x46, 0xac, 0x5f, 0xf7, 0xb5, 0x39, 0xdf, 0x5d, 0xf5, 0xc8, 0xd1, 0x62,
-    0xf8, 0xec, 0xc3, 0x58, 0xbf, 0xef, 0x0a, 0x73, 0x6e, 0xbb, 0xeb, 0x91,
-    0xa2, 0xc5, 0xcc, 0x11, 0x89, 0xa3, 0x8c, 0xa3, 0x71, 0xbe, 0xd2, 0x38,
-    0x9a, 0x19, 0x15, 0xd0, 0x82, 0xc5, 0x4b, 0x23, 0xc7, 0x25, 0x86, 0x3c,
-    0xa4, 0xad, 0x31, 0xb4, 0x67, 0xe5, 0x1b, 0xcf, 0x9a, 0x2f, 0xfe, 0xfb,
-    0x6b, 0x52, 0x7f, 0xf6, 0xd1, 0xeb, 0x17, 0xee, 0xae, 0xa9, 0xef, 0x8b,
-    0x15, 0x87, 0xf3, 0xa4, 0x9b, 0xef, 0x70, 0x50, 0x58, 0xbf, 0xf4, 0xf6,
-    0x0c, 0x76, 0xe9, 0x3a, 0x58, 0xbf, 0x0a, 0x3b, 0x34, 0x05, 0x8b, 0xf6,
-    0x80, 0x76, 0x82, 0xc5, 0x62, 0x36, 0x98, 0x84, 0x89, 0x38, 0x80, 0x19,
-    0x65, 0xb6, 0x58, 0xbf, 0xb7, 0xe4, 0xc0, 0x5a, 0x58, 0xbf, 0x19, 0x91,
-    0x39, 0xd6, 0x2f, 0xe0, 0x34, 0x36, 0x6d, 0x96, 0x2f, 0xa7, 0xbc, 0x25,
-    0x8b, 0xf4, 0x1c, 0x80, 0xeb, 0x17, 0x77, 0xed, 0x8f, 0x27, 0x08, 0xaf,
-    0xe1, 0x6c, 0xe4, 0x23, 0xac, 0x54, 0x9e, 0xf1, 0x17, 0xdf, 0x1f, 0xf3,
-    0xd1, 0x62, 0xff, 0x37, 0x3c, 0x4f, 0xdf, 0x16, 0x2f, 0xf3, 0x7a, 0x2f,
-    0xce, 0x80, 0xb1, 0x6e, 0xcd, 0x3e, 0x9f, 0x9a, 0x54, 0xa2, 0xe1, 0xa1,
-    0x1d, 0x7f, 0xff, 0x33, 0xfa, 0x7e, 0xfe, 0xe4, 0x94, 0x18, 0x80, 0xb1,
-    0x7f, 0x98, 0xb3, 0xc5, 0x30, 0x58, 0xbf, 0xfc, 0x29, 0x33, 0xab, 0xcf,
-    0xcf, 0xf6, 0xc1, 0x2c, 0x5f, 0xee, 0xfe, 0xde, 0xd3, 0xf6, 0xb1, 0x52,
-    0xac, 0xff, 0x63, 0x0c, 0x2a, 0x78, 0x6b, 0xea, 0x1b, 0x1f, 0x26, 0x25,
-    0x8e, 0x18, 0x86, 0xa3, 0x7f, 0xec, 0x1f, 0xda, 0x32, 0x7f, 0x3d, 0xac,
-    0x5f, 0xf7, 0xdb, 0x8e, 0x45, 0x3d, 0xac, 0x5e, 0xfb, 0x1d, 0x62, 0x96,
-    0x3a, 0xd5, 0xc7, 0x1d, 0x4b, 0x52, 0x3c, 0x22, 0x38, 0x85, 0xe3, 0x8b,
-    0xfe, 0x23, 0x74, 0x4f, 0xb8, 0x89, 0x62, 0xf0, 0x98, 0x35, 0x8b, 0xf7,
-    0xa7, 0x0a, 0x56, 0x29, 0xcf, 0xfb, 0x47, 0x44, 0x3d, 0x78, 0x32, 0xf2,
-    0xc5, 0xc7, 0x65, 0x8b, 0x9f, 0x65, 0x8a, 0x73, 0x5f, 0xf1, 0x7b, 0xff,
-    0xdf, 0x78, 0xf7, 0xda, 0x7d, 0x31, 0x4f, 0x6b, 0x17, 0xfb, 0x1c, 0xd7,
-    0x1b, 0x1d, 0x62, 0xfe, 0xd7, 0x7c, 0xc2, 0x35, 0x62, 0x8c, 0x45, 0x90,
-    0xd3, 0xc3, 0x33, 0xbd, 0x20, 0x75, 0x8a, 0xd9, 0x36, 0xd3, 0x53, 0x4f,
-    0x0d, 0x20, 0x8c, 0xaf, 0xfd, 0x2f, 0xc9, 0xf7, 0x27, 0xf2, 0xb1, 0x7f,
-    0xc6, 0x72, 0x74, 0xd0, 0x7f, 0xac, 0x5f, 0xf6, 0xe2, 0xc7, 0xef, 0xd2,
-    0x75, 0x8b, 0x3f, 0x0f, 0xd4, 0x47, 0x57, 0xfd, 0x9b, 0x14, 0x9b, 0x9d,
-    0xf9, 0x62, 0x8d, 0x4c, 0x50, 0xf0, 0xb2, 0x0c, 0x9e, 0xfd, 0xbe, 0x3f,
-    0x0e, 0xb1, 0x7f, 0xf7, 0x24, 0xbc, 0x1c, 0x5f, 0x7f, 0x71, 0x62, 0xfb,
-    0x35, 0x3d, 0x16, 0x2b, 0xb3, 0xeb, 0xf2, 0x3d, 0xfd, 0x09, 0xda, 0x78,
-    0x25, 0x8b, 0xff, 0xf1, 0xe6, 0x19, 0xb8, 0xdc, 0xb3, 0x5b, 0xce, 0x2c,
-    0x5f, 0xf4, 0xe8, 0x01, 0x96, 0x0b, 0xaf, 0x58, 0xb6, 0xf1, 0x23, 0x0c,
-    0x05, 0xe1, 0xaa, 0xdf, 0x46, 0xcd, 0xe9, 0x58, 0xae, 0xd3, 0x46, 0x28,
-    0x73, 0x70, 0xe6, 0x8e, 0xa8, 0x41, 0xa3, 0xda, 0xa9, 0x5e, 0x4a, 0xc8,
-    0x72, 0x3c, 0x73, 0x4d, 0x1a, 0xd0, 0xa5, 0x24, 0x5e, 0xea, 0x9e, 0xd6,
-    0x2f, 0xf1, 0x60, 0x38, 0x1b, 0x79, 0x62, 0xf7, 0x98, 0x6b, 0x17, 0x61,
-    0xd6, 0x2f, 0xb5, 0xb4, 0xc1, 0x62, 0xa4, 0xdd, 0xe0, 0xbd, 0xfd, 0xe2,
-    0x93, 0xf3, 0xad, 0x58, 0xb9, 0xf1, 0x62, 0xfd, 0x23, 0x79, 0xea, 0x58,
-    0xbf, 0x66, 0xb4, 0xd0, 0x58, 0xbf, 0x6b, 0x4f, 0x17, 0x16, 0x2a, 0x07,
-    0xa5, 0x85, 0x15, 0x1b, 0x23, 0x9a, 0x06, 0x7f, 0x16, 0xf3, 0xe5, 0xdb,
-    0x4a, 0xc5, 0xff, 0x3e, 0x1a, 0xfa, 0xf1, 0x4a, 0xc5, 0x1c, 0xf4, 0x38,
-    0x31, 0x7f, 0xb0, 0xa7, 0xbe, 0x36, 0xeb, 0x14, 0x6a, 0x3a, 0x37, 0x84,
-    0x90, 0x44, 0x57, 0xb9, 0x0d, 0xd6, 0x2f, 0xa6, 0x3f, 0x52, 0xb1, 0x58,
-    0x78, 0x9c, 0x1f, 0xbc, 0x03, 0xf9, 0x62, 0xfb, 0xe3, 0x16, 0xcb, 0x15,
-    0x05, 0x6f, 0x4e, 0x43, 0x11, 0xa1, 0xd6, 0x1a, 0x3e, 0xd0, 0x3e, 0x11,
-    0x0f, 0x87, 0xaf, 0x6f, 0x06, 0x58, 0xbf, 0xe3, 0xce, 0xef, 0xed, 0x08,
-    0xeb, 0x17, 0xed, 0x38, 0x03, 0x3a, 0xc5, 0xe6, 0x07, 0x16, 0x28, 0xc4,
-    0x50, 0x60, 0xf6, 0x8e, 0xc8, 0xaa, 0xfd, 0xf6, 0xd8, 0x7d, 0x16, 0x2f,
-    0x07, 0x3b, 0x2c, 0x5f, 0xd8, 0x3f, 0xb6, 0x69, 0x62, 0xfe, 0xd4, 0xbc,
-    0x1b, 0x8b, 0x16, 0xea, 0x58, 0xbb, 0x4f, 0xb1, 0xe1, 0x44, 0x5b, 0x7f,
-    0xe6, 0xcc, 0x23, 0x43, 0xf0, 0x86, 0xb1, 0x7f, 0x99, 0xc6, 0xf9, 0xdf,
-    0x96, 0x2f, 0x44, 0xc3, 0x58, 0xbd, 0xd4, 0xfd, 0x16, 0x2d, 0xb6, 0x91,
-    0xc5, 0xf2, 0xff, 0x20, 0x08, 0xcf, 0xa8, 0x7a, 0xf3, 0xf7, 0xc5, 0x8b,
-    0xff, 0xb9, 0x3b, 0x66, 0xa2, 0x29, 0x07, 0x16, 0x2f, 0xfe, 0xeb, 0xca,
-    0x4f, 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xf3, 0xff, 0x35, 0xac, 0xed, 0x62,
-    0xfd, 0x11, 0x4e, 0xa0, 0xb1, 0x50, 0x3d, 0xdc, 0x34, 0xbf, 0xcc, 0x6f,
-    0x33, 0xcf, 0xc5, 0x8a, 0x93, 0xd5, 0x22, 0x1b, 0xff, 0x88, 0x5b, 0xb9,
-    0xbc, 0xfc, 0x97, 0x96, 0x2f, 0x61, 0x6e, 0xb1, 0x73, 0x85, 0x87, 0xc6,
-    0x1a, 0x35, 0x41, 0x70, 0xef, 0x73, 0xc3, 0x96, 0x7c, 0x7d, 0xa3, 0x51,
-    0x02, 0xa7, 0x87, 0x84, 0x8c, 0x14, 0x3e, 0xba, 0xa1, 0x07, 0x79, 0xa1,
-    0x12, 0xc5, 0xef, 0xc9, 0xd6, 0x2b, 0x46, 0xef, 0xe3, 0xd7, 0xfe, 0xef,
-    0xd8, 0x52, 0x0c, 0x20, 0x2c, 0x5f, 0xfd, 0xdf, 0xdf, 0x53, 0xd1, 0xfa,
-    0x61, 0x2c, 0x5e, 0x90, 0x75, 0x8b, 0x14, 0xe7, 0xd5, 0xc4, 0x8a, 0xc4,
-    0x64, 0xf2, 0x15, 0x14, 0x6a, 0x62, 0x21, 0x43, 0xaa, 0xfb, 0xf8, 0x06,
-    0x58, 0xa9, 0x54, 0x76, 0xd1, 0xf7, 0x70, 0xae, 0xff, 0xee, 0x10, 0xb3,
-    0x72, 0xcd, 0xb3, 0xb5, 0x8b, 0xf7, 0x04, 0xf3, 0x12, 0xc5, 0xfb, 0x8e,
-    0x5e, 0x75, 0x8b, 0xfd, 0xdb, 0x47, 0xc1, 0xcb, 0x16, 0x2f, 0xde, 0x7d,
-    0xda, 0x0b, 0x17, 0x1b, 0xc5, 0x8a, 0x94, 0x64, 0x44, 0x53, 0xf2, 0x76,
-    0x36, 0xe1, 0x4d, 0xd3, 0xc5, 0x8a, 0xd1, 0xf0, 0x71, 0x26, 0xff, 0xd0,
-    0x73, 0x85, 0x84, 0x3f, 0xca, 0xc5, 0xff, 0xc5, 0x3e, 0xcc, 0xd6, 0xb2,
-    0x77, 0x58, 0xbf, 0xc6, 0xe6, 0x80, 0x77, 0xe2, 0xc5, 0x76, 0x8b, 0x7f,
-    0x9f, 0x92, 0x1d, 0xcd, 0xe5, 0x8b, 0xdb, 0x0a, 0x0b, 0x17, 0xf3, 0xf6,
-    0x0d, 0x30, 0xd6, 0x2b, 0x0f, 0x3b, 0xe3, 0xf6, 0x89, 0x62, 0xfb, 0xb0,
-    0x6a, 0x52, 0x2e, 0x08, 0x24, 0x8a, 0x93, 0x7c, 0x11, 0x25, 0x9d, 0x22,
-    0x30, 0xd0, 0xd7, 0xd1, 0x2c, 0x4e, 0x57, 0xfe, 0x18, 0xbc, 0xff, 0x73,
-    0x7e, 0xeb, 0x17, 0xff, 0xfc, 0xf1, 0xf2, 0x33, 0x1a, 0x7b, 0xdf, 0xf3,
-    0xdf, 0x1a, 0x7a, 0x96, 0x2f, 0xff, 0xf6, 0x75, 0x4c, 0x4e, 0x79, 0x88,
-    0xc2, 0xee, 0x1f, 0x10, 0x16, 0x2e, 0x28, 0xc9, 0x46, 0xbe, 0x37, 0xde,
-    0x26, 0x82, 0xc5, 0xcd, 0x12, 0xc5, 0x6e, 0x6d, 0x0e, 0x39, 0x6d, 0xd6,
-    0x2d, 0x2b, 0x14, 0xe6, 0x93, 0x42, 0x77, 0xf8, 0x02, 0xf1, 0x4f, 0xb8,
-    0xb1, 0x6e, 0xa5, 0x8b, 0xe6, 0x30, 0x33, 0xac, 0x53, 0x1f, 0x77, 0x43,
-    0x40, 0x85, 0x6f, 0xe1, 0xbf, 0x4f, 0xe7, 0x52, 0xc5, 0xa2, 0x58, 0xb9,
-    0xfa, 0x2c, 0x56, 0x1e, 0xfb, 0x99, 0xf4, 0x13, 0xa5, 0x8b, 0xb6, 0x25,
-    0x8b, 0xdc, 0xcd, 0x2c, 0x5e, 0xdd, 0xf4, 0xb1, 0x76, 0x7d, 0x62, 0xbb,
-    0x36, 0xb1, 0xc3, 0xd7, 0x6a, 0x06, 0x2e, 0x40, 0xc2, 0x16, 0xf8, 0x45,
-    0xdc, 0x62, 0xee, 0xc7, 0xa4, 0x6f, 0xc2, 0x39, 0xa1, 0x20, 0x02, 0xfe,
-    0xbc, 0x33, 0x83, 0x1e, 0x52, 0xbd, 0xcf, 0xb2, 0xc5, 0x4a, 0xf0, 0x06,
-    0x8c, 0x1a, 0x73, 0x9b, 0xd0, 0xcd, 0xbe, 0xf7, 0x98, 0xeb, 0x17, 0xe2,
-    0x86, 0xe2, 0xd9, 0x62, 0xf4, 0x69, 0xd7, 0x3a, 0xc5, 0x8b, 0xd3, 0xa8,
-    0x96, 0x29, 0x8f, 0xdc, 0x05, 0x62, 0x2e, 0xbf, 0xfd, 0xaf, 0x16, 0x6c,
-    0xc5, 0xa1, 0x48, 0x16, 0x2f, 0xff, 0xef, 0x4e, 0xe4, 0x23, 0xe4, 0x3f,
-    0x84, 0x14, 0xe9, 0x62, 0xb4, 0x8a, 0x62, 0x4a, 0xbf, 0x1c, 0x9b, 0xdc,
-    0x58, 0xa6, 0x3c, 0xa0, 0xc8, 0xa8, 0xc7, 0xcb, 0x4c, 0x8d, 0x21, 0x99,
-    0x33, 0xd3, 0x1b, 0x46, 0x9b, 0x02, 0x41, 0xc2, 0x7b, 0x29, 0xed, 0xe6,
-    0xc6, 0x4d, 0xdc, 0x39, 0x9e, 0x5c, 0xee, 0xa9, 0x3c, 0x87, 0x8f, 0x43,
-    0xf4, 0xb0, 0x36, 0x97, 0xb6, 0x53, 0xf1, 0xbc, 0x36, 0xf4, 0x6d, 0xc2,
-    0x9e, 0xd9, 0xe8, 0x96, 0x14, 0x26, 0x83, 0x8c, 0x7a, 0xef, 0x6c, 0xb1,
-    0x7f, 0x36, 0xf3, 0x1d, 0x9d, 0xac, 0x54, 0x0f, 0x2f, 0xe3, 0x37, 0xf3,
-    0xfe, 0x77, 0x26, 0x58, 0xb9, 0xc2, 0x58, 0xa8, 0x1e, 0x2f, 0x8b, 0x6c,
-    0x6a, 0xc5, 0xfa, 0x38, 0x5f, 0x7d, 0x2c, 0x5f, 0xd2, 0x16, 0x85, 0x20,
-    0x58, 0xad, 0x8f, 0x6f, 0xc5, 0x97, 0xf8, 0xa1, 0xc1, 0xfd, 0xc2, 0x58,
-    0xbd, 0xb3, 0x1d, 0x62, 0xfb, 0x06, 0xc7, 0x58, 0xbb, 0xb2, 0x58, 0xbf,
-    0x77, 0x0f, 0x87, 0xc5, 0x8a, 0xc3, 0xc4, 0x21, 0x8b, 0x4a, 0xc5, 0xfb,
-    0x06, 0x42, 0x3a, 0xc5, 0x69, 0x17, 0xec, 0xcc, 0x02, 0x02, 0x11, 0xb9,
-    0xc6, 0xb1, 0x7e, 0x29, 0xfb, 0x71, 0x62, 0xd1, 0x2c, 0x5c, 0x79, 0x58,
-    0xbd, 0xe7, 0x09, 0x72, 0x84, 0x17, 0x30, 0x6a, 0x90, 0x1c, 0xec, 0xd5,
-    0xd1, 0x88, 0x8b, 0x71, 0x31, 0x21, 0x54, 0x13, 0x34, 0xf9, 0xdf, 0x5e,
-    0x2f, 0xe8, 0x59, 0x51, 0x8a, 0xc7, 0xe5, 0xb9, 0xc8, 0xd8, 0xd4, 0x52,
-    0x84, 0x6f, 0x4e, 0xd2, 0xb1, 0x7f, 0xf4, 0xc3, 0x3e, 0xdd, 0x83, 0x3b,
-    0xf2, 0xc5, 0xc0, 0xc2, 0x3e, 0x3e, 0x0e, 0xdf, 0xc2, 0x6e, 0xaf, 0xe6,
-    0xcb, 0x17, 0xf8, 0x5f, 0x7d, 0x67, 0x7e, 0x58, 0xbf, 0xbd, 0x8f, 0x1d,
-    0xf9, 0x58, 0xb7, 0x0c, 0x44, 0xbc, 0x71, 0x90, 0x66, 0xb7, 0x6b, 0xaf,
-    0x58, 0xad, 0x26, 0x36, 0x08, 0x61, 0x91, 0xdd, 0xfd, 0x84, 0x0c, 0xc1,
-    0xac, 0x5f, 0xce, 0x0c, 0x3c, 0xee, 0xb1, 0x73, 0x04, 0xb1, 0x78, 0xd8,
-    0x47, 0xac, 0x5f, 0x77, 0xc7, 0x65, 0x8b, 0x31, 0x87, 0x8a, 0xe4, 0x57,
-    0xff, 0xbc, 0x53, 0x9d, 0x1f, 0xd3, 0x85, 0x05, 0x8a, 0x34, 0xfc, 0x1c,
-    0x9e, 0xff, 0xec, 0xe9, 0xa9, 0x68, 0x14, 0xf7, 0x05, 0x8b, 0xff, 0xff,
-    0x43, 0x7f, 0xbe, 0xb6, 0x3c, 0xef, 0xf9, 0x71, 0xcf, 0xe6, 0x0b, 0x17,
-    0xbf, 0x26, 0xac, 0x57, 0x68, 0x8d, 0xe8, 0xdf, 0x7f, 0x03, 0x5a, 0x7e,
-    0xc0, 0xb1, 0x7f, 0xf4, 0x24, 0x81, 0x9a, 0x01, 0xdf, 0x8b, 0x17, 0xfb,
-    0x37, 0x9d, 0x8a, 0x77, 0x58, 0xbf, 0x6e, 0x53, 0xdc, 0x16, 0x2c, 0x05,
-    0x8b, 0x47, 0x98, 0x7e, 0x38, 0x6a, 0xe5, 0x56, 0x95, 0x8b, 0xdc, 0x6e,
-    0xd6, 0x2d, 0x27, 0x35, 0xfe, 0x11, 0xbf, 0x67, 0xb8, 0xdd, 0xac, 0x5f,
-    0xfe, 0xe6, 0x7d, 0xf8, 0x2d, 0x8c, 0x8a, 0x49, 0x62, 0xe9, 0x12, 0xc5,
-    0xf8, 0x44, 0x00, 0xe0, 0xb1, 0x7f, 0xbf, 0x20, 0x3b, 0x40, 0xcc, 0x3c,
-    0x1e, 0x0b, 0xd0, 0xd3, 0x01, 0xe1, 0x48, 0x70, 0x8e, 0xbf, 0xff, 0x14,
-    0xc3, 0x3e, 0xda, 0x9f, 0x38, 0x26, 0x0b, 0x17, 0xf6, 0x08, 0xd9, 0xe0,
-    0x96, 0x2f, 0xc5, 0x80, 0x32, 0x39, 0x62, 0xff, 0x48, 0x22, 0x83, 0x8b,
-    0xaf, 0x58, 0xbb, 0x38, 0x62, 0x63, 0xe3, 0x37, 0xd2, 0x9f, 0x8b, 0xc3,
-    0x2c, 0xa1, 0xaa, 0x9e, 0x29, 0x48, 0xd4, 0x35, 0xdf, 0xc3, 0x61, 0x9b,
-    0xf2, 0x26, 0x86, 0x99, 0x13, 0x78, 0xc0, 0x50, 0xb5, 0xe9, 0x2c, 0x12,
-    0xff, 0xed, 0x3f, 0x61, 0xfb, 0x1e, 0x0d, 0xc5, 0x8b, 0xfe, 0x16, 0xd2,
-    0x64, 0xfa, 0x46, 0xb1, 0x5a, 0x44, 0x0f, 0xd1, 0xaf, 0xba, 0xba, 0xa6,
-    0x3d, 0x62, 0xff, 0xec, 0xd7, 0xe5, 0xca, 0x7f, 0x30, 0x58, 0xbf, 0xfd,
-    0xfc, 0x1f, 0xb3, 0xe5, 0x9e, 0xfb, 0xac, 0x5a, 0x77, 0x44, 0x5f, 0x90,
-    0xad, 0x26, 0x23, 0x83, 0x50, 0xb7, 0xbe, 0x68, 0x00, 0xeb, 0x17, 0xff,
-    0xf4, 0x87, 0xa7, 0x3c, 0x9b, 0xcf, 0xbf, 0x8a, 0x4e, 0xb1, 0x47, 0x3f,
-    0xf0, 0x11, 0xdb, 0x5a, 0x46, 0x78, 0x21, 0x5b, 0x7f, 0xc1, 0xf9, 0xc8,
-    0x50, 0xce, 0x2c, 0x5f, 0xf0, 0xb9, 0xee, 0xf7, 0x73, 0x5d, 0x62, 0xf3,
-    0x6b, 0x65, 0x8b, 0x82, 0x09, 0x62, 0xe8, 0x46, 0x6e, 0x6e, 0x02, 0x1e,
-    0xbc, 0xf9, 0xd0, 0x91, 0x4e, 0x1b, 0xad, 0x6e, 0x98, 0xb6, 0xa1, 0xc3,
-    0x7f, 0xff, 0xc5, 0x80, 0xf1, 0x30, 0x39, 0x9e, 0xcd, 0x00, 0xed, 0x05,
-    0x8b, 0x01, 0x62, 0xe2, 0x63, 0x4f, 0xdf, 0xb6, 0x5b, 0xfd, 0xe2, 0x98,
-    0x73, 0x06, 0xb1, 0x7c, 0x03, 0xcc, 0x16, 0x2d, 0xcc, 0x3d, 0x61, 0x19,
-    0xdf, 0xd0, 0x76, 0xe9, 0xf7, 0x58, 0xbd, 0x3f, 0xe2, 0xc5, 0xce, 0x69,
-    0x87, 0xe7, 0x84, 0xe0, 0x2f, 0xbf, 0xe1, 0x99, 0xf6, 0x38, 0xa7, 0x8b,
-    0x17, 0xe6, 0x38, 0xa7, 0x8b, 0x15, 0x87, 0xc7, 0xf3, 0xbb, 0x01, 0x62,
-    0xc6, 0x98, 0x6c, 0xc2, 0x21, 0xbf, 0x79, 0x8f, 0x84, 0xb1, 0x7c, 0x3c,
-    0xef, 0xcb, 0x16, 0xe6, 0x1e, 0x58, 0x64, 0xf4, 0x35, 0xe1, 0xc7, 0x8f,
-    0x4b, 0x51, 0xa2, 0x1e, 0x14, 0x3f, 0x87, 0xb9, 0x43, 0x47, 0xce, 0xb7,
-    0xfe, 0xe6, 0x16, 0x7f, 0x37, 0xc2, 0x58, 0xbf, 0xfc, 0xfc, 0xc2, 0x30,
-    0x3d, 0x45, 0x98, 0x12, 0xc5, 0xf6, 0x9e, 0x4e, 0xb1, 0x7f, 0xb9, 0xef,
-    0xe1, 0xf2, 0x0b, 0x17, 0xff, 0x85, 0x23, 0xcf, 0x00, 0x32, 0x87, 0xf1,
-    0x62, 0xe9, 0xe2, 0xc5, 0xa5, 0x62, 0xff, 0xd1, 0xa4, 0xf3, 0x99, 0xef,
-    0xb4, 0x16, 0x2f, 0xff, 0xbd, 0xc9, 0xf7, 0x73, 0xff, 0xcf, 0x49, 0xe2,
-    0xc5, 0x75, 0xa8, 0x97, 0xc4, 0x4b, 0xd8, 0x08, 0xe1, 0xa3, 0x3f, 0x21,
-    0x51, 0x50, 0x4e, 0x80, 0x66, 0x80, 0x4b, 0x28, 0x73, 0x5f, 0xff, 0xda,
-    0xc8, 0x47, 0x66, 0xff, 0x71, 0x94, 0x85, 0x84, 0xb1, 0x7c, 0x13, 0x06,
-    0x75, 0x8b, 0xcd, 0xdc, 0xac, 0x5f, 0xb0, 0xdf, 0xb4, 0x3e, 0x78, 0x41,
-    0x92, 0xdf, 0xff, 0x31, 0x00, 0xcf, 0xe1, 0x98, 0xe5, 0x27, 0x58, 0xa8,
-    0x2b, 0xbd, 0x19, 0xe9, 0xa9, 0xaf, 0x1e, 0x16, 0x90, 0x8a, 0x14, 0x1d,
-    0x10, 0x2a, 0x57, 0x2b, 0xf2, 0x70, 0xf6, 0xff, 0x74, 0x0b, 0x08, 0x7f,
-    0x95, 0x8b, 0xf0, 0xdf, 0xa4, 0x8d, 0x62, 0xf9, 0xfa, 0x48, 0xd6, 0x2e,
-    0xc0, 0x18, 0x79, 0xc3, 0x2a, 0xbf, 0x9c, 0x7a, 0xc3, 0xe2, 0xc5, 0xff,
-    0x7b, 0x81, 0xea, 0x7d, 0x30, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0x30,
-    0x5f, 0xe7, 0x9d, 0x40, 0x53, 0x8b, 0x14, 0x62, 0x27, 0xb4, 0x76, 0x46,
-    0x37, 0xc6, 0xc9, 0x41, 0x62, 0xf8, 0xe7, 0x68, 0x18, 0x98, 0xf6, 0x43,
-    0x2f, 0xc6, 0x17, 0xfd, 0xa7, 0xd9, 0x8f, 0x90, 0x95, 0x8b, 0xfe, 0xcd,
-    0xb4, 0xe1, 0x1e, 0x78, 0xb1, 0x58, 0x7e, 0x84, 0x73, 0x7f, 0xff, 0x38,
-    0xfa, 0xa7, 0x35, 0xb4, 0x8c, 0x98, 0xd3, 0x65, 0x62, 0x8d, 0x3f, 0xfe,
-    0x84, 0x17, 0xfc, 0xe0, 0x62, 0xf3, 0x37, 0xd6, 0x2f, 0xb7, 0x66, 0xdd,
-    0x72, 0x88, 0x97, 0xff, 0xfb, 0x37, 0xfc, 0xf7, 0x08, 0xec, 0xfe, 0xef,
-    0x84, 0xc6, 0xac, 0x56, 0x91, 0x2e, 0x46, 0x37, 0x6e, 0x05, 0x8b, 0x87,
-    0xda, 0xc5, 0xcd, 0xc8, 0x26, 0x45, 0x90, 0xce, 0x39, 0x11, 0x0c, 0xd4,
-    0xae, 0x0f, 0xe4, 0x69, 0x8d, 0x1a, 0x00, 0xa3, 0x47, 0xa5, 0x8a, 0x58,
-    0xb6, 0xc2, 0x2e, 0x23, 0x83, 0x2f, 0xf7, 0x3c, 0xdd, 0xc7, 0x39, 0xab,
-    0x17, 0xec, 0x8a, 0x48, 0x6b, 0x15, 0x27, 0xc3, 0xa3, 0x9a, 0x96, 0xe1,
-    0x12, 0x06, 0xb8, 0x58, 0xf3, 0xc5, 0x5f, 0xa5, 0xeb, 0xb1, 0x61, 0x4e,
-    0x51, 0xf9, 0x9c, 0x50, 0x8b, 0xbf, 0x14, 0x83, 0xb0, 0x2c, 0x5f, 0xb2,
-    0x13, 0xa0, 0x2c, 0x5f, 0xf4, 0xbf, 0xb9, 0x3b, 0x67, 0x16, 0x2e, 0xc8,
-    0xe5, 0x8b, 0x6d, 0xf3, 0xd3, 0x23, 0x9b, 0xa4, 0x35, 0x8b, 0xf3, 0x6c,
-    0x53, 0x04, 0x8a, 0x88, 0xf0, 0x3e, 0x31, 0x7f, 0xe9, 0xd0, 0x39, 0x91,
-    0xbc, 0x6f, 0xd7, 0x3a, 0xc5, 0x8b, 0xfa, 0x7c, 0x52, 0x0e, 0x2c, 0x5f,
-    0xe6, 0x7f, 0x4e, 0xa4, 0x0b, 0x17, 0xef, 0x61, 0xdf, 0xcb, 0x17, 0xfe,
-    0xf1, 0x48, 0x06, 0x4f, 0xdf, 0x96, 0x2d, 0xe3, 0x11, 0x8d, 0xf2, 0xd6,
-    0x32, 0x0c, 0xa2, 0xf9, 0x88, 0x3d, 0x96, 0x2f, 0xe6, 0x37, 0x06, 0xe4,
-    0xb1, 0x5f, 0x3d, 0x12, 0x24, 0xa8, 0x2b, 0x00, 0x34, 0xa7, 0x4f, 0x67,
-    0x68, 0xf9, 0x19, 0x46, 0x36, 0x14, 0x25, 0x6f, 0xfc, 0xfb, 0xcf, 0x1b,
-    0x5a, 0x70, 0x96, 0x2f, 0xfe, 0xec, 0x0c, 0x3d, 0x60, 0xbf, 0x27, 0x58,
-    0xbe, 0x21, 0xfe, 0x56, 0x2f, 0xfb, 0x68, 0x1e, 0x7e, 0xce, 0x6a, 0xc5,
-    0xff, 0xb3, 0x93, 0xf6, 0xf0, 0x72, 0x35, 0x8b, 0xfe, 0x66, 0x0b, 0xec,
-    0x77, 0xe2, 0xc5, 0xff, 0xbc, 0xe5, 0xb6, 0x77, 0xef, 0xb2, 0xc5, 0xff,
-    0xcf, 0xa3, 0x77, 0xfb, 0xfc, 0x85, 0xb2, 0xc5, 0x4a, 0x60, 0x03, 0x3f,
-    0xc3, 0x90, 0x20, 0x5f, 0xff, 0xd2, 0x13, 0xcc, 0x4f, 0x86, 0x67, 0xdf,
-    0x5f, 0x65, 0x8b, 0xfe, 0xd6, 0x73, 0x9c, 0x62, 0x82, 0xc5, 0xd0, 0xd9,
-    0x62, 0xff, 0x4e, 0x6e, 0x18, 0xdb, 0x65, 0x8b, 0x6e, 0x62, 0x38, 0xf4,
-    0xb6, 0x73, 0x92, 0x19, 0xbf, 0xff, 0x87, 0xa2, 0x60, 0x8c, 0x7d, 0x49,
-    0x67, 0xf3, 0x75, 0x8a, 0xc5, 0x6c, 0x4c, 0x8c, 0x44, 0x5c, 0x8c, 0xec,
-    0x51, 0x8f, 0x84, 0x89, 0x7c, 0x2c, 0xe3, 0xac, 0x5d, 0xc1, 0x2c, 0x5f,
-    0xd0, 0xfb, 0x31, 0x4a, 0xc5, 0x6e, 0x78, 0x9d, 0x8c, 0x5f, 0xf6, 0x8b,
-    0x3a, 0x45, 0xfc, 0xed, 0x62, 0xa4, 0xf8, 0x5c, 0x92, 0xf7, 0xb2, 0x3d,
-    0x62, 0xfc, 0x2f, 0x68, 0x50, 0x58, 0xbf, 0xe9, 0xfb, 0xe1, 0xa6, 0xcc,
-    0x16, 0x2d, 0x84, 0x7c, 0x9e, 0x2a, 0xbe, 0xdd, 0x9b, 0x75, 0x48, 0x14,
-    0x5b, 0x4b, 0x15, 0xa3, 0xc3, 0xf1, 0x8d, 0xef, 0xc9, 0xd6, 0x2f, 0x99,
-    0xa1, 0xc5, 0x8b, 0xff, 0x4e, 0xcd, 0xed, 0x64, 0x23, 0xb1, 0x62, 0xe7,
-    0xd2, 0xc5, 0xfe, 0xf4, 0x9f, 0xdc, 0x60, 0x2c, 0x56, 0xc7, 0x97, 0x82,
-    0xf4, 0x62, 0x7f, 0xa3, 0x84, 0x26, 0x34, 0xb9, 0x16, 0x87, 0x48, 0x8b,
-    0x90, 0x8d, 0xbf, 0x7e, 0x4e, 0x2e, 0xd6, 0x2f, 0x72, 0x7b, 0x58, 0xbe,
-    0xf7, 0x24, 0x09, 0x17, 0x9b, 0x5b, 0x24, 0x5f, 0x08, 0x98, 0xd4, 0x8b,
-    0xfc, 0xfb, 0x67, 0xb9, 0x20, 0x48, 0xa4, 0x8b, 0xfb, 0x37, 0x9f, 0xc9,
-    0xd2, 0x2e, 0x08, 0x24, 0x8b, 0xf8, 0xa4, 0xb6, 0x7d, 0x24, 0x56, 0x26,
-    0x33, 0xb9, 0x19, 0xc7, 0xbe, 0x46, 0x03, 0x42, 0x0c, 0x08, 0xb8, 0x31,
-    0xaa, 0x58, 0xb6, 0x92, 0x23, 0x0f, 0xfe, 0x5c, 0xef, 0x41, 0xfe, 0xb1,
-    0x4b, 0x15, 0xda, 0xa1, 0x17, 0x8e, 0xd9, 0x8c, 0x83, 0x1d, 0xa8, 0x2a,
-    0xed, 0x89, 0xb7, 0xf2, 0x8e, 0xef, 0xff, 0x82, 0xe1, 0x67, 0x7e, 0x62,
-    0xdb, 0x3b, 0xf2, 0xc5, 0xfd, 0xd0, 0xc6, 0x84, 0x31, 0x62, 0xa5, 0x10,
-    0x98, 0xa7, 0x7f, 0xfe, 0x2c, 0xf0, 0x80, 0x76, 0x80, 0x67, 0x8e, 0x73,
-    0x56, 0x2e, 0x6d, 0x2c, 0x5f, 0xb6, 0xc1, 0xc9, 0xd6, 0x2f, 0x6f, 0x27,
-    0x08, 0xf0, 0x03, 0x17, 0xb4, 0xac, 0x59, 0xfe, 0x78, 0xfe, 0x36, 0xa1,
-    0xa6, 0x13, 0xe8, 0x71, 0x54, 0xb3, 0x16, 0x71, 0xc9, 0xe5, 0xd1, 0x69,
-    0x8f, 0xf0, 0xc7, 0x69, 0xd0, 0xa2, 0x85, 0xf0, 0xa3, 0x2a, 0xbf, 0x66,
-    0x9e, 0x76, 0x58, 0xbd, 0x84, 0x05, 0x8a, 0xc3, 0xc4, 0xe1, 0x45, 0xff,
-    0xc7, 0x7d, 0x70, 0xc2, 0xc0, 0x0b, 0x8b, 0x17, 0xff, 0x8a, 0x73, 0xbc,
-    0xde, 0x7d, 0xf7, 0xe8, 0xb1, 0x73, 0x40, 0xc4, 0x49, 0x79, 0x1a, 0xe6,
-    0x1a, 0xc5, 0x1a, 0x78, 0xc7, 0x2f, 0xb1, 0xd6, 0x2e, 0x11, 0xab, 0x14,
-    0x46, 0xaf, 0x82, 0x57, 0xff, 0xfc, 0x59, 0xef, 0x4f, 0x70, 0x33, 0xf2,
-    0x71, 0x77, 0xcf, 0xca, 0xc5, 0xfd, 0xf7, 0x34, 0xd9, 0xd9, 0x62, 0xfe,
-    0xc2, 0xe3, 0x96, 0x2c, 0x5f, 0xc7, 0xc1, 0xff, 0x36, 0x58, 0xbf, 0xfc,
-    0x4c, 0x6f, 0x01, 0xef, 0x77, 0xec, 0xdd, 0x62, 0xfd, 0xe3, 0x3d, 0xa9,
-    0x58, 0xa9, 0x45, 0x39, 0xa5, 0xfd, 0xa7, 0x5e, 0xf8, 0x8e, 0xb1, 0x5b,
-    0x2b, 0x23, 0x36, 0x1f, 0x3d, 0xa7, 0x47, 0x90, 0x69, 0xab, 0xe6, 0x25,
-    0x0d, 0x2e, 0xa3, 0x1b, 0xff, 0xa2, 0x83, 0x83, 0xf9, 0xd3, 0x18, 0xeb,
-    0x17, 0xf1, 0x67, 0x35, 0x3c, 0x58, 0xbc, 0x28, 0x62, 0xc5, 0x18, 0x89,
-    0x16, 0x47, 0x01, 0x6d, 0xfb, 0x09, 0xbd, 0xc5, 0x8b, 0xef, 0xc9, 0x41,
-    0x62, 0xfd, 0x9f, 0x26, 0x89, 0x62, 0x86, 0x7e, 0x38, 0x4e, 0x44, 0x55,
-    0x04, 0x67, 0x72, 0x14, 0x37, 0xe8, 0x73, 0xed, 0x1e, 0xb1, 0x7b, 0x42,
-    0xfa, 0xc5, 0xd9, 0xf5, 0x8b, 0xe8, 0xbe, 0x2d, 0x96, 0x2a, 0x23, 0x7a,
-    0x18, 0xbd, 0xe2, 0x93, 0xac, 0x56, 0x91, 0x34, 0xcb, 0x62, 0x23, 0xbd,
-    0xf9, 0x89, 0x62, 0xfa, 0x13, 0x13, 0xac, 0x5f, 0xb0, 0xe1, 0x67, 0xd6,
-    0x28, 0x67, 0xd5, 0xd8, 0xf6, 0x88, 0xef, 0xee, 0x8f, 0xa6, 0x0b, 0xcb,
-    0x17, 0xef, 0xbf, 0x9b, 0xeb, 0x17, 0xf3, 0xce, 0xb3, 0xbf, 0x2c, 0x5f,
-    0xda, 0x73, 0xe7, 0x7e, 0x58, 0xb9, 0x86, 0xb1, 0x52, 0x78, 0xdb, 0x97,
-    0xdf, 0xcc, 0x6e, 0x6c, 0xc7, 0x58, 0xbf, 0xce, 0x4d, 0xe8, 0x9c, 0x25,
-    0x8b, 0xf3, 0xc5, 0x07, 0x1a, 0xc5, 0x49, 0xee, 0xe1, 0xa5, 0xff, 0xb3,
-    0x02, 0xe7, 0x72, 0x53, 0xc5, 0x8b, 0xfa, 0x26, 0xdf, 0xf9, 0xc5, 0x8a,
-    0x31, 0x56, 0x9c, 0xc2, 0x67, 0x0c, 0x37, 0x31, 0x39, 0x47, 0xdd, 0x08,
-    0x8b, 0x90, 0x8c, 0xf1, 0x00, 0x8f, 0xea, 0x57, 0x0b, 0xf5, 0x2e, 0x66,
-    0xa5, 0x72, 0x0d, 0xe7, 0x15, 0xef, 0x71, 0xa3, 0xd6, 0x2f, 0xcc, 0x3f,
-    0xc9, 0x2c, 0x56, 0x1e, 0x39, 0xc8, 0x2f, 0xef, 0x13, 0x1e, 0x2e, 0xbd,
-    0x62, 0xec, 0xfa, 0xc5, 0xff, 0xf8, 0x22, 0xcf, 0x7b, 0x36, 0xee, 0x02,
-    0x3b, 0x71, 0x62, 0xff, 0xf4, 0xe7, 0x65, 0x9d, 0x1a, 0x1c, 0x71, 0xac,
-    0x53, 0xa2, 0x93, 0x4b, 0x35, 0xa4, 0x6e, 0xfa, 0x17, 0x77, 0xde, 0x17,
-    0xb8, 0xb1, 0x7a, 0x19, 0xe5, 0x8b, 0xee, 0x8f, 0x0e, 0x2c, 0x57, 0x67,
-    0x84, 0xe3, 0xb5, 0x88, 0x88, 0xd3, 0x35, 0xfe, 0x76, 0xf6, 0x6f, 0x20,
-    0x58, 0xbd, 0x07, 0xe8, 0xb1, 0x7f, 0xf9, 0xc1, 0xcc, 0x35, 0x8f, 0xa9,
-    0xc2, 0x58, 0xac, 0x3e, 0x86, 0x1f, 0xbf, 0xf8, 0xed, 0xd9, 0x82, 0x8a,
-    0x78, 0xf1, 0xeb, 0x17, 0xfd, 0xdf, 0x82, 0x6d, 0x69, 0x8d, 0x58, 0xbd,
-    0x3e, 0xe2, 0xc5, 0x49, 0xed, 0x11, 0xed, 0x62, 0x31, 0x7d, 0x0a, 0x5b,
-    0xdb, 0x86, 0x05, 0x8b, 0xf1, 0xc5, 0x8e, 0x35, 0x8b, 0xfd, 0xad, 0xa7,
-    0xa3, 0x31, 0xd6, 0x2f, 0xff, 0x67, 0x53, 0x11, 0xa3, 0xc7, 0xd6, 0xa5,
-    0x62, 0xef, 0x73, 0x11, 0x05, 0xf3, 0x6a, 0x94, 0x7c, 0x1a, 0x40, 0xd0,
-    0xaa, 0xbe, 0xfc, 0xf7, 0xc5, 0x8b, 0xe7, 0xce, 0xfc, 0xb1, 0x58, 0x78,
-    0xfe, 0x24, 0xbf, 0xff, 0xef, 0xbe, 0xb0, 0x6c, 0x7c, 0x2f, 0x14, 0x85,
-    0x9e, 0xe2, 0xc5, 0xa5, 0x62, 0xfa, 0x7a, 0x0e, 0x77, 0x3f, 0x60, 0x32,
-    0xdf, 0xcd, 0xee, 0x61, 0x41, 0x62, 0xff, 0xbe, 0xec, 0x0d, 0x4b, 0x41,
-    0x62, 0xe6, 0x87, 0xcf, 0x97, 0xc5, 0xb5, 0xf4, 0x66, 0xfa, 0x14, 0x17,
-    0xff, 0xfb, 0xaf, 0x92, 0xdb, 0x9f, 0x67, 0xf3, 0x8f, 0x39, 0x9a, 0x58,
-    0xa5, 0x8b, 0x41, 0x62, 0xa0, 0x5f, 0x7c, 0x32, 0xa0, 0xbe, 0x9b, 0xb9,
-    0x0f, 0x71, 0x88, 0xea, 0x16, 0x07, 0x22, 0xfc, 0x26, 0xc1, 0x0e, 0x52,
-    0x8c, 0x7f, 0x8f, 0x7e, 0x8d, 0x90, 0x45, 0x01, 0x42, 0x0e, 0xfe, 0x1f,
-    0xd8, 0x3c, 0xd9, 0x62, 0xff, 0xbd, 0xac, 0xdb, 0xd3, 0x9c, 0x58, 0xbf,
-    0x9b, 0xf1, 0x73, 0xe3, 0x58, 0xa0, 0x1f, 0x50, 0x47, 0x54, 0x62, 0x2f,
-    0x75, 0x09, 0xab, 0xf0, 0x70, 0xfc, 0x9a, 0xb1, 0x7d, 0xcf, 0xe7, 0x16,
-    0x2f, 0xc4, 0x42, 0xd1, 0xab, 0x17, 0x16, 0xc6, 0x1f, 0xbe, 0x15, 0x86,
-    0x47, 0x58, 0x8d, 0xc7, 0x85, 0x05, 0x2c, 0x5d, 0xae, 0x8b, 0x15, 0x86,
-    0x99, 0x83, 0x2f, 0xff, 0xa4, 0x01, 0xe7, 0xfc, 0xfd, 0x85, 0x9d, 0xf9,
-    0x62, 0xff, 0xfc, 0xc6, 0x87, 0xd8, 0x24, 0xb7, 0x6f, 0x37, 0x60, 0x58,
-    0xbd, 0xbe, 0x1d, 0x62, 0xfd, 0x3d, 0x94, 0x9a, 0xb1, 0x7f, 0xfe, 0xde,
-    0x45, 0xbf, 0xe7, 0x5f, 0x61, 0xfd, 0xb4, 0xb1, 0x7f, 0xb3, 0x0b, 0x7d,
-    0xdf, 0x65, 0x8a, 0x1a, 0x2d, 0xb0, 0xa7, 0xeb, 0x17, 0xf0, 0xdb, 0xdc,
-    0x14, 0x16, 0x2a, 0x53, 0x32, 0xc8, 0x6a, 0x06, 0x5f, 0x68, 0x12, 0x78,
-    0x31, 0xd1, 0xc6, 0x5a, 0x39, 0x62, 0xfe, 0x6d, 0x4f, 0x9f, 0xa2, 0xc5,
-    0xff, 0xdc, 0x98, 0xdb, 0x20, 0xfe, 0xe0, 0xa3, 0xd6, 0x2b, 0xb4, 0x61,
-    0xe8, 0xc8, 0x85, 0x78, 0x5f, 0x7f, 0xff, 0xed, 0x6a, 0x7b, 0x87, 0x7c,
-    0x7d, 0x6f, 0xfc, 0x0f, 0x4f, 0x23, 0x58, 0xbf, 0x11, 0xa1, 0xe7, 0x6b,
-    0x17, 0xfc, 0xda, 0xce, 0xe1, 0x20, 0x95, 0x8a, 0x94, 0xc4, 0xb0, 0xf5,
-    0xdc, 0x44, 0x57, 0x7f, 0xdd, 0xc3, 0xd9, 0xcf, 0x64, 0x7a, 0xc5, 0xf0,
-    0x7d, 0x1f, 0x8b, 0x17, 0xff, 0xed, 0xcd, 0x6e, 0x66, 0xa0, 0xff, 0x62,
-    0xee, 0x0b, 0x17, 0xfd, 0x3e, 0xe6, 0x79, 0xfb, 0x09, 0x62, 0xf0, 0xb4,
-    0x6a, 0xc5, 0x6e, 0x7b, 0x51, 0xc7, 0x75, 0x88, 0xd8, 0x36, 0x16, 0x55,
-    0x29, 0xb2, 0x61, 0xf3, 0x43, 0xfa, 0xa5, 0x91, 0x20, 0x39, 0x4d, 0x3b,
-    0xa6, 0x38, 0xff, 0xe5, 0xf5, 0x14, 0x73, 0xf7, 0xef, 0x61, 0xda, 0x0b,
-    0x17, 0xc4, 0x2e, 0x90, 0x58, 0xa8, 0x1e, 0x6f, 0x0a, 0x2f, 0xbe, 0x4d,
-    0x05, 0x8b, 0x9b, 0x8b, 0x17, 0xec, 0x2f, 0xe1, 0x2c, 0x5e, 0xd8, 0x3d,
-    0xd6, 0x2f, 0x3c, 0x51, 0xeb, 0x17, 0xde, 0xc7, 0xfa, 0xc5, 0x11, 0xe1,
-    0xf5, 0x10, 0xd4, 0xa6, 0x12, 0xe4, 0x51, 0x11, 0x7c, 0x5d, 0x89, 0xb8,
-    0xc9, 0x7f, 0xa4, 0xb7, 0x68, 0xe6, 0xe8, 0xb1, 0x7e, 0xc7, 0x8e, 0xce,
-    0xd6, 0x2e, 0x60, 0x2c, 0x54, 0x11, 0xa0, 0x05, 0x6e, 0x1c, 0x78, 0xae,
-    0xff, 0xff, 0xe1, 0x7b, 0x9c, 0xf3, 0xe4, 0x47, 0x9e, 0x44, 0x58, 0x73,
-    0x45, 0x2b, 0x17, 0xff, 0xc5, 0x9f, 0xc3, 0x3e, 0xcf, 0xc9, 0xe9, 0x8b,
-    0x17, 0xfd, 0x0c, 0xf1, 0xe7, 0x08, 0x6b, 0x17, 0xed, 0xff, 0x9d, 0xf5,
-    0x2c, 0x5f, 0xff, 0x99, 0xa0, 0xdf, 0x33, 0x36, 0x17, 0x84, 0xc1, 0xaa,
-    0x4f, 0xb2, 0xf7, 0x41, 0x79, 0x62, 0xe9, 0x1a, 0xc5, 0xff, 0xd3, 0xdc,
-    0x3e, 0xcf, 0xe9, 0xf7, 0x16, 0x2a, 0x4f, 0xf0, 0x04, 0x04, 0x2f, 0x7f,
-    0x37, 0xb8, 0xfc, 0x75, 0x8b, 0xf6, 0xfb, 0x68, 0x5b, 0x2c, 0x5f, 0xf4,
-    0x93, 0xfb, 0x99, 0xce, 0x8b, 0x17, 0xed, 0xe4, 0xa4, 0x0b, 0x15, 0x88,
-    0x8f, 0xd1, 0x6b, 0x1d, 0x5f, 0xe9, 0x1b, 0xee, 0xe5, 0xb2, 0xc5, 0xfb,
-    0xf2, 0x4d, 0xd1, 0x62, 0xfe, 0x90, 0x73, 0xcc, 0x35, 0x8a, 0xdc, 0xf5,
-    0xc0, 0x53, 0x52, 0x8a, 0xec, 0x84, 0x5d, 0xcf, 0xd4, 0xb1, 0x7f, 0xce,
-    0x5d, 0xc3, 0x42, 0x9e, 0x2c, 0x5f, 0xa4, 0x2f, 0xe6, 0xcb, 0x17, 0x67,
-    0x52, 0xc5, 0x01, 0x13, 0x1c, 0x1a, 0xf1, 0xd0, 0x45, 0x57, 0xda, 0xc1,
-    0xca, 0xc5, 0xfc, 0x73, 0x27, 0x77, 0xc5, 0x8a, 0xc3, 0xd1, 0x62, 0x2b,
-    0xdb, 0x8b, 0x65, 0x8b, 0x85, 0xe5, 0x8b, 0xf7, 0x56, 0x61, 0x01, 0x62,
-    0x86, 0xbb, 0x41, 0xbb, 0xaf, 0x6a, 0x11, 0xe7, 0x11, 0x17, 0x6a, 0x1c,
-    0x27, 0x2d, 0xfc, 0x2f, 0x0a, 0x1b, 0x9e, 0x85, 0xf7, 0x48, 0x47, 0x84,
-    0x41, 0x1c, 0x41, 0xd4, 0x31, 0x7c, 0x2d, 0x82, 0xe8, 0xb1, 0x7f, 0xfe,
-    0xd6, 0x37, 0xb9, 0x9e, 0x26, 0x6d, 0xb3, 0x75, 0x8a, 0xe1, 0xfe, 0xf8,
-    0xa2, 0xfd, 0xfc, 0x8a, 0x63, 0xd6, 0x2f, 0x7b, 0x37, 0x58, 0xbf, 0x0f,
-    0x5a, 0xc0, 0x96, 0x2f, 0xfd, 0xec, 0xfc, 0xe8, 0x04, 0xc6, 0xac, 0x5f,
-    0x75, 0xed, 0x9c, 0x58, 0xad, 0x91, 0xb4, 0x02, 0xc2, 0x1e, 0xe1, 0x50,
-    0x8f, 0xef, 0xe7, 0x2c, 0xf4, 0xc4, 0xb1, 0x7f, 0xbf, 0x22, 0xee, 0x0f,
-    0x1c, 0xb1, 0x7f, 0xf4, 0x39, 0x27, 0xcd, 0xc9, 0xb3, 0x75, 0x8b, 0xf6,
-    0xd1, 0x7d, 0xc0, 0xb1, 0x7d, 0x24, 0x68, 0xd6, 0x2f, 0xff, 0x98, 0xb6,
-    0x2c, 0xef, 0x8d, 0x9e, 0xc3, 0xac, 0x5f, 0xf1, 0xf3, 0x52, 0xe5, 0x27,
-    0x58, 0xbf, 0xb0, 0x63, 0xc3, 0x4e, 0xb1, 0x79, 0x81, 0x2b, 0x17, 0xff,
-    0x86, 0xe7, 0xee, 0x1c, 0x2c, 0xd0, 0x7e, 0x58, 0xbd, 0xa6, 0x89, 0x62,
-    0xfc, 0x3d, 0x69, 0xce, 0xb1, 0x52, 0xaa, 0x9e, 0x09, 0x5b, 0x96, 0xf6,
-    0x70, 0xe8, 0xbf, 0x2b, 0x62, 0x30, 0x27, 0x91, 0xbf, 0x0b, 0xfc, 0x38,
-    0x24, 0xd0, 0xc7, 0xae, 0x87, 0x16, 0x2f, 0xe0, 0xa7, 0xef, 0xdc, 0x16,
-    0x2f, 0x13, 0x9a, 0xb1, 0x7c, 0xfb, 0xb6, 0x96, 0x2f, 0xff, 0xff, 0x31,
-    0xa3, 0xfc, 0xea, 0x7f, 0x3e, 0xfb, 0x1c, 0x38, 0xb9, 0xbb, 0xec, 0xb1,
-    0x50, 0x45, 0x01, 0x11, 0xdf, 0xfc, 0xfb, 0xb8, 0xcb, 0x3d, 0xc9, 0x3a,
-    0xc5, 0xff, 0xe6, 0x2c, 0xf4, 0xbe, 0x9c, 0xd3, 0x65, 0x62, 0xbb, 0x4e,
-    0x70, 0xe6, 0x1c, 0x85, 0xef, 0x88, 0x83, 0x44, 0xbf, 0xff, 0x89, 0x8d,
-    0x36, 0x78, 0x3f, 0xb6, 0xda, 0x79, 0xd9, 0x62, 0xe3, 0xe2, 0xc5, 0xf3,
-    0xef, 0x27, 0x58, 0xb6, 0xeb, 0x17, 0xff, 0xf3, 0xe8, 0xdf, 0xc9, 0xe2,
-    0x83, 0x97, 0xe7, 0x52, 0xb1, 0x62, 0x58, 0xa0, 0x1f, 0x68, 0x97, 0x2a,
-    0x08, 0xc5, 0xc2, 0x3e, 0x42, 0x02, 0x86, 0x9b, 0x71, 0xd7, 0xbd, 0x0d,
-    0xcb, 0xff, 0xb0, 0x04, 0xc6, 0xf3, 0x3c, 0xdf, 0x58, 0xbc, 0xfa, 0xc5,
-    0x8b, 0xc5, 0x90, 0x58, 0xad, 0xcd, 0xc7, 0x87, 0x2e, 0x93, 0xac, 0x5e,
-    0x29, 0x3a, 0xc5, 0xf9, 0x87, 0x38, 0x4b, 0x15, 0x29, 0x96, 0xec, 0x6c,
-    0xef, 0x84, 0x45, 0xc1, 0x71, 0x0e, 0x5f, 0xfe, 0x2c, 0xda, 0x7d, 0xdc,
-    0xe8, 0x59, 0xb2, 0xc5, 0xf9, 0xbf, 0xbb, 0xf1, 0x62, 0xbe, 0x7e, 0xa4,
-    0x99, 0x7f, 0xcf, 0x0f, 0x7f, 0x34, 0xfc, 0x58, 0xbf, 0xff, 0x43, 0x08,
-    0x7f, 0x9c, 0x29, 0x01, 0xda, 0x0b, 0x15, 0x28, 0xad, 0x22, 0x10, 0xce,
-    0x6f, 0xee, 0xe1, 0xe7, 0xf7, 0x16, 0x2f, 0xc1, 0xfd, 0xb6, 0xc5, 0x8b,
-    0x39, 0xa7, 0xb4, 0x46, 0x17, 0xfb, 0x3f, 0xdc, 0x3d, 0x27, 0x58, 0xbf,
-    0x40, 0xb3, 0x36, 0x58, 0xbb, 0x5b, 0x2c, 0x5f, 0xf4, 0x5d, 0x6f, 0x9c,
-    0x63, 0xc2, 0x58, 0xbf, 0x6d, 0xad, 0x08, 0xd5, 0x8a, 0x94, 0x56, 0x61,
-    0x43, 0x8c, 0x88, 0xfe, 0xff, 0x30, 0xe4, 0x12, 0x17, 0x16, 0x28, 0x69,
-    0xbb, 0x61, 0x3f, 0xe1, 0xc2, 0xc7, 0x57, 0xde, 0x87, 0x8d, 0x58, 0xbf,
-    0xff, 0xf1, 0xb2, 0x5c, 0xfb, 0x3e, 0xb4, 0xe7, 0x0f, 0xdd, 0xee, 0xe7,
-    0x58, 0xbf, 0xff, 0x7b, 0xab, 0x0e, 0xdb, 0xcb, 0xc1, 0xfd, 0x9a, 0x58,
-    0xbf, 0xa3, 0xba, 0xea, 0x61, 0x9f, 0x8e, 0x5c, 0x80, 0x25, 0xfe, 0xf0,
-    0x03, 0x28, 0x7f, 0x17, 0x20, 0x09, 0x79, 0xb5, 0x05, 0xc8, 0x02, 0x56,
-    0x1f, 0x60, 0x90, 0xae, 0x68, 0x2e, 0x40, 0x12, 0xf9, 0x8b, 0xb8, 0x2e,
-    0x40, 0x12, 0xff, 0x3e, 0xff, 0xc0, 0x02, 0x57, 0x20, 0x09, 0x79, 0xc8,
-    0x6b, 0x90, 0x04, 0xa1, 0xa2, 0xf8, 0xe4, 0x9f, 0x30, 0xe8, 0x83, 0x63,
-    0x57, 0x20, 0x09, 0x7b, 0x53, 0xe5, 0xc8, 0x02, 0x52, 0xe4, 0x01, 0x2f,
-    0x47, 0x38, 0x17, 0x20, 0x09, 0x74, 0x9d, 0x72, 0x00, 0xc1, 0x43, 0x3e,
-    0xec, 0x19, 0x72, 0xdb, 0xe7, 0x38, 0xe5, 0x72, 0x00, 0x97, 0xbc, 0xdb,
-    0xae, 0x40, 0x12, 0xff, 0xc4, 0xd0, 0x8c, 0xfb, 0xee, 0xda, 0x5c, 0x80,
-    0x25, 0xff, 0xcd, 0xe1, 0x6c, 0xe5, 0xef, 0xb4, 0x17, 0x20, 0x09, 0x73,
-    0x0d, 0x72, 0x00, 0x97, 0xf8, 0x98, 0x2e, 0x72, 0x40, 0xb9, 0x00, 0x4b,
-    0xf3, 0x9a, 0xc4, 0x05, 0xc8, 0x02, 0x5c, 0xfc, 0x5c, 0x80, 0x25, 0x68,
-    0xf6, 0x7c, 0x6b, 0x7f, 0xfb, 0xef, 0xef, 0x67, 0x0c, 0xd3, 0xc9, 0xd7,
-    0x20, 0x09, 0x7e, 0xf1, 0x4f, 0x70, 0x54, 0x80, 0x25, 0xc0, 0x95, 0xc8,
-    0x02, 0x46, 0x1b, 0x6a, 0x5c, 0x80, 0x25, 0xf4, 0x9d, 0x86, 0xb9, 0x00,
-    0x4a, 0x19, 0xe4, 0x38, 0xcd, 0xf0, 0x98, 0xb7, 0x5c, 0x80, 0x25, 0xe9,
-    0xd6, 0xeb, 0x90, 0x04, 0xbf, 0xf6, 0x77, 0xc1, 0xce, 0x10, 0x38, 0xb9,
-    0x00, 0x4b, 0xe3, 0x87, 0x20, 0x5c, 0x80, 0x25, 0xf3, 0x42, 0x12, 0xb9,
-    0x00, 0x4a, 0xc3, 0xe0, 0x11, 0x8d, 0xf9, 0xb7, 0xfc, 0xf6, 0xb9, 0x00,
-    0x4a, 0xc4, 0xc1, 0x3f, 0x0a, 0xc1, 0x10, 0xdd, 0xa0, 0x2e, 0x40, 0x12,
-    0xa0, 0xaf, 0x1c, 0x64, 0x99, 0x09, 0xad, 0xc8, 0x9e, 0x11, 0xdf, 0x7f,
-    0x01, 0x0f, 0x0c, 0x3d, 0x19, 0x78, 0x8d, 0x6c, 0x75, 0xc8, 0x02, 0x5f,
-    0xb3, 0xdc, 0x6e, 0xd7, 0x20, 0x09, 0x7f, 0x87, 0x3b, 0xc5, 0xa9, 0xf2,
-    0xe4, 0x01, 0x06, 0x6d, 0xaf, 0x6a, 0x42, 0x5c, 0x80, 0x25, 0x62, 0x34,
-    0xf7, 0x55, 0xd2, 0x9d, 0xfe, 0x13, 0x42, 0x12, 0x19, 0xd7, 0x20, 0x09,
-    0x7c, 0xe5, 0x0e, 0x2e, 0x40, 0x12, 0xfe, 0x68, 0xa1, 0x9d, 0xc1, 0x72,
-    0x00, 0x95, 0x88, 0xde, 0xf9, 0x80, 0x10, 0x84, 0x5f, 0x7f, 0xdf, 0x9e,
-    0x46, 0x70, 0x5a, 0x02, 0xe4, 0x01, 0x82, 0xce, 0xb9, 0x00, 0x4b, 0x9b,
-    0x61, 0x9f, 0x6f, 0xd3, 0xee, 0xd0, 0x17, 0x20, 0x09, 0x7e, 0x6f, 0x71,
-    0xfb, 0x5c, 0x80, 0x25, 0xf0, 0xa1, 0x9c, 0x5c, 0x80, 0x25, 0xfc, 0xfe,
-    0x84, 0x86, 0x75, 0xc8, 0x02, 0x59, 0xc8, 0xfb, 0x3a, 0x18, 0x54, 0xa3,
-    0xbc, 0x89, 0x7d, 0x0a, 0x2a, 0x96, 0x5e, 0x20, 0xe1, 0x73, 0x90, 0xdf,
-    0x73, 0xf8, 0x88, 0x35, 0x09, 0x8f, 0x96, 0xb1, 0x78, 0x0a, 0xc9, 0x3f,
-    0x93, 0x83, 0x3e, 0x94, 0x9b, 0x1d, 0x0a, 0x90, 0xe3, 0x1d, 0xbd, 0xe7,
-    0x09, 0x72, 0x84, 0x97, 0x36, 0xea, 0x90, 0x04, 0x8c, 0x4c, 0x5f, 0xb8,
-    0x76, 0x54, 0xb3, 0x60, 0x5a, 0x9a, 0x67, 0x7f, 0xf9, 0x8e, 0xde, 0x14,
-    0x99, 0xc1, 0x74, 0x95, 0x8b, 0xd2, 0x17, 0x16, 0x2d, 0xe5, 0x8b, 0xc5,
-    0x9b, 0xee, 0x6c, 0x1c, 0x7a, 0xe1, 0x9d, 0x62, 0xf4, 0x1f, 0x8b, 0x17,
-    0xfe, 0xfe, 0x6f, 0x27, 0xe6, 0xd0, 0xd9, 0x62, 0xff, 0x1f, 0x59, 0x0f,
-    0xcc, 0x16, 0x2e, 0x20, 0x78, 0xfd, 0xc3, 0x43, 0xbf, 0xc2, 0xf6, 0x73,
-    0xd9, 0xba, 0xc5, 0xfe, 0x7e, 0xfc, 0x3f, 0xe7, 0x16, 0x2b, 0xae, 0xd3,
-    0x44, 0x88, 0x61, 0xa1, 0x28, 0x02, 0xee, 0x1a, 0xdd, 0xd2, 0x25, 0x8b,
-    0xcf, 0xdf, 0x16, 0x2f, 0xc5, 0x80, 0x8e, 0xc5, 0x8a, 0x01, 0xe4, 0x78,
-    0x7a, 0xf4, 0xed, 0xd1, 0x62, 0xb6, 0x55, 0xde, 0x37, 0xd3, 0x63, 0x76,
-    0xed, 0x5c, 0xec, 0x7d, 0x44, 0x57, 0xfa, 0x0f, 0xe3, 0x4d, 0xc8, 0xf5,
-    0x8b, 0xe9, 0xf4, 0x8d, 0x62, 0xdb, 0x2c, 0x54, 0x0d, 0xaf, 0x42, 0x2b,
-    0xf4, 0xeb, 0xed, 0x1e, 0xb1, 0x7f, 0x8a, 0x5b, 0xcd, 0xd8, 0x16, 0x2b,
-    0x63, 0xde, 0xf1, 0x5d, 0xf8, 0xf8, 0x36, 0x3a, 0xc5, 0xff, 0x70, 0xa4,
-    0xfc, 0xde, 0x78, 0xb1, 0x6e, 0x2c, 0x5f, 0xec, 0xe1, 0x37, 0x32, 0x3d,
-    0x62, 0xf4, 0x8f, 0xeb, 0x15, 0xf3, 0xd2, 0x23, 0x5a, 0x94, 0x73, 0xe1,
-    0x47, 0xce, 0xba, 0x32, 0x5f, 0x67, 0x49, 0xfa, 0xc5, 0x4a, 0x7d, 0x99,
-    0x08, 0x17, 0x8c, 0x2b, 0xe7, 0xb7, 0x42, 0x56, 0x2f, 0xfc, 0x59, 0xbf,
-    0xdc, 0x00, 0x14, 0x4b, 0x17, 0xde, 0x66, 0xd2, 0xc5, 0xff, 0x0f, 0x0d,
-    0x2c, 0xf4, 0x84, 0xb1, 0x7f, 0x66, 0xb2, 0x10, 0x95, 0x8b, 0xff, 0xc5,
-    0x9d, 0x81, 0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x50, 0x4c, 0x57, 0xb4, 0x10,
-    0x11, 0x11, 0xd7, 0x0b, 0x6f, 0x0d, 0xbe, 0xb1, 0x7e, 0xc8, 0xb9, 0x3b,
-    0x2c, 0x5b, 0xd8, 0x78, 0xfe, 0x1d, 0xb8, 0x12, 0x91, 0x63, 0x52, 0x2f,
-    0x7e, 0x76, 0x58, 0xb8, 0x20, 0x92, 0x29, 0xcf, 0x8a, 0x3c, 0x5e, 0x21,
-    0x30, 0x87, 0xaf, 0xfa, 0x0f, 0xec, 0x3f, 0x1a, 0x0b, 0x16, 0xe2, 0x44,
-    0x61, 0xfc, 0xca, 0x05, 0x62, 0x66, 0x8f, 0x18, 0x15, 0xfe, 0x7f, 0x49,
-    0xe4, 0x86, 0xb1, 0x7c, 0xfe, 0xcd, 0xd6, 0x2e, 0xc0, 0x40, 0xf5, 0x7c,
-    0x65, 0x7f, 0xd9, 0xf7, 0x03, 0x9a, 0xe1, 0x2c, 0x58, 0x96, 0x2a, 0x4f,
-    0x2d, 0xce, 0xa8, 0xe9, 0x8a, 0xb3, 0xe8, 0x1e, 0x2f, 0xec, 0x1f, 0xe4,
-    0x86, 0xb1, 0x7f, 0xfb, 0x36, 0xcc, 0xf9, 0x09, 0xbd, 0xfc, 0x58, 0xbf,
-    0xbd, 0xcc, 0x0b, 0xee, 0xb1, 0x6f, 0x2c, 0x57, 0x8f, 0x04, 0x45, 0xf7,
-    0xfb, 0x37, 0x33, 0x0f, 0x3b, 0xac, 0x5f, 0x6d, 0xc3, 0xc1, 0x62, 0xfc,
-    0xc5, 0xdc, 0x38, 0xb1, 0x52, 0x79, 0xd8, 0x4b, 0x58, 0x9a, 0x83, 0xc2,
-    0x2b, 0xe4, 0x5e, 0x84, 0x25, 0xf9, 0xff, 0x25, 0x05, 0x8b, 0xff, 0x77,
-    0x26, 0xf2, 0x7b, 0x83, 0x9d, 0x62, 0xff, 0x79, 0xca, 0x74, 0xc0, 0x58,
-    0xba, 0x1c, 0x64, 0x4d, 0x91, 0x38, 0x68, 0x57, 0xff, 0x73, 0xdd, 0xee,
-    0xfa, 0xf3, 0x03, 0x8b, 0x15, 0xda, 0x20, 0xc8, 0xee, 0xff, 0x8d, 0x7d,
-    0x06, 0x00, 0x4f, 0x6b, 0x17, 0xd0, 0xf4, 0x84, 0xb1, 0x77, 0xb9, 0x87,
-    0xc3, 0xd9, 0xed, 0x46, 0xce, 0x91, 0x6e, 0x63, 0xb4, 0xda, 0x57, 0x6c,
-    0x23, 0x78, 0x1c, 0x7f, 0xf8, 0x82, 0x69, 0x2e, 0xf4, 0xdf, 0x17, 0x96,
-    0x3b, 0x13, 0x2e, 0xa5, 0x2d, 0x1d, 0x19, 0xa3, 0x2c, 0x04, 0xad, 0xb2,
-    0x30, 0xf4, 0x6f, 0xa2, 0x8d, 0x90, 0x38, 0x42, 0x5f, 0x06, 0x3c, 0x3a,
-    0xc5, 0xfd, 0x9a, 0xf7, 0xa7, 0x65, 0x8b, 0xf0, 0xdb, 0x7e, 0x41, 0x62,
-    0xfe, 0x72, 0x06, 0x77, 0xe5, 0x8b, 0x41, 0xcf, 0x63, 0xe5, 0x57, 0xd3,
-    0xb8, 0x67, 0x58, 0xbf, 0xf3, 0x3f, 0xa4, 0xbd, 0xfc, 0x82, 0xc5, 0xf0,
-    0xce, 0xd0, 0x58, 0xb3, 0xac, 0x53, 0x1b, 0x4e, 0x11, 0xd1, 0x89, 0xb2,
-    0x64, 0x21, 0xf4, 0x4f, 0xf2, 0x5f, 0x38, 0xdf, 0xe7, 0x2d, 0xdf, 0x4e,
-    0x05, 0x8b, 0xd9, 0x80, 0x58, 0xbf, 0xe3, 0xef, 0xf7, 0x1f, 0xdc, 0xd5,
-    0x8a, 0x3a, 0x22, 0xc8, 0xcc, 0x31, 0xcb, 0xfc, 0x6f, 0xde, 0x4f, 0xc8,
-    0x2c, 0x56, 0xe9, 0xa0, 0x7e, 0x1b, 0x64, 0x61, 0x69, 0x58, 0xbe, 0xf8,
-    0x98, 0x96, 0x2d, 0xe3, 0x0d, 0x98, 0xc4, 0x6e, 0x73, 0xac, 0x5e, 0xf4,
-    0x8d, 0x62, 0xef, 0x92, 0xc5, 0xfd, 0x9d, 0xc0, 0xed, 0x05, 0x8a, 0xc3,
-    0xe3, 0xdc, 0x77, 0xa8, 0x5e, 0xff, 0xef, 0x47, 0x64, 0x50, 0x6d, 0x6c,
-    0x39, 0x58, 0xae, 0xd3, 0x1e, 0xd1, 0x41, 0xde, 0x88, 0xca, 0xff, 0xef,
-    0x38, 0x47, 0xe3, 0x90, 0x9b, 0xcb, 0x17, 0xc3, 0x60, 0x71, 0x62, 0xff,
-    0x18, 0xf9, 0xcf, 0xe7, 0x96, 0x2b, 0x0f, 0x5f, 0x84, 0x77, 0xff, 0x34,
-    0x0c, 0x27, 0x93, 0x1c, 0xf8, 0xb1, 0x77, 0x60, 0x58, 0xb0, 0x0e, 0x7b,
-    0xa0, 0x44, 0xbe, 0xcf, 0x07, 0xb2, 0xc5, 0xff, 0xef, 0xc9, 0xc9, 0x8d,
-    0xe7, 0xe4, 0xbc, 0xb1, 0x74, 0x84, 0xb1, 0x4e, 0x7c, 0x51, 0x25, 0x5f,
-    0xf1, 0xa6, 0xb4, 0x3c, 0xfc, 0x75, 0x8b, 0xc0, 0x93, 0xac, 0x56, 0x1e,
-    0xc6, 0x8e, 0xef, 0xe6, 0xe6, 0x74, 0x90, 0x96, 0x2f, 0xff, 0x7d, 0xfa,
-    0x3e, 0xfa, 0x9d, 0x9b, 0x5b, 0xac, 0x5f, 0xd3, 0xdc, 0x93, 0x79, 0x62,
-    0xe2, 0x02, 0xc5, 0xd3, 0xc5, 0x8a, 0x73, 0x5d, 0xd0, 0x5e, 0xbe, 0x7f,
-    0xbd, 0x16, 0xe8, 0xc5, 0x48, 0x53, 0x08, 0x7c, 0x7a, 0x34, 0x87, 0x73,
-    0x00, 0xe1, 0x99, 0x5a, 0x56, 0x9a, 0x4f, 0xde, 0x94, 0xd5, 0x7f, 0xff,
-    0xbe, 0xe4, 0x3c, 0x3f, 0xa7, 0x30, 0xe3, 0x9c, 0x25, 0x8b, 0xfd, 0x9d,
-    0xfb, 0xcd, 0x0e, 0x2c, 0x5f, 0xf3, 0x76, 0x60, 0x98, 0x37, 0xd9, 0x62,
-    0xff, 0x07, 0x21, 0x6a, 0x70, 0x96, 0x2e, 0xeb, 0xe0, 0xb1, 0x7e, 0x63,
-    0x4b, 0x22, 0x58, 0xbf, 0xd3, 0xa0, 0x66, 0x98, 0x96, 0x2a, 0x07, 0xf0,
-    0x43, 0xa1, 0x94, 0xdd, 0xdc, 0x17, 0x28, 0x01, 0x7f, 0xfb, 0x02, 0x9f,
-    0x64, 0x50, 0x7f, 0x71, 0x96, 0x2a, 0x09, 0xa6, 0x77, 0x0a, 0xc2, 0x2f,
-    0xe1, 0x35, 0xf0, 0x98, 0xb7, 0x58, 0xb8, 0x10, 0x58, 0xbf, 0xf1, 0x37,
-    0x85, 0xe1, 0xfd, 0xcd, 0x58, 0xbd, 0x39, 0xf2, 0x3d, 0x8e, 0x0c, 0x5f,
-    0x9e, 0x7d, 0x23, 0x58, 0xbf, 0xe7, 0xef, 0x9e, 0x29, 0x3f, 0x16, 0x2f,
-    0xff, 0xff, 0xff, 0xe1, 0x47, 0x93, 0x67, 0xd8, 0x32, 0xce, 0x98, 0x4c,
-    0x6c, 0x50, 0x17, 0x38, 0x13, 0x0f, 0xee, 0x17, 0x31, 0x86, 0xb1, 0x46,
-    0xa3, 0xdf, 0x87, 0x57, 0xbf, 0x9d, 0x4b, 0x17, 0xe2, 0x6e, 0x8d, 0xf5,
-    0x8b, 0xff, 0xb8, 0x60, 0x63, 0x9d, 0x69, 0xe4, 0xeb, 0x15, 0x87, 0xe0,
-    0x22, 0x9a, 0x31, 0x16, 0x3c, 0x84, 0x85, 0xfc, 0xdf, 0x89, 0x9f, 0x65,
-    0x8b, 0xff, 0xff, 0x6d, 0x83, 0x93, 0xe1, 0x0b, 0xc2, 0x37, 0xdd, 0xee,
-    0xe5, 0xb2, 0xc5, 0x18, 0xce, 0x74, 0x99, 0x59, 0x19, 0x1c, 0x3f, 0x67,
-    0xcf, 0x2f, 0xa6, 0x23, 0x8d, 0x2e, 0x9c, 0xd5, 0xa3, 0x89, 0x02, 0x19,
-    0x3d, 0xf0, 0xc7, 0xd1, 0x8f, 0x0a, 0x1a, 0xa1, 0x14, 0x86, 0x5f, 0x7f,
-    0x83, 0xf3, 0xea, 0x70, 0x96, 0x2f, 0xff, 0xc4, 0x42, 0xef, 0x3b, 0xf0,
-    0xf4, 0xdd, 0xe6, 0xcb, 0x17, 0xec, 0xf6, 0xa7, 0x8b, 0x14, 0xe8, 0x81,
-    0x25, 0x9b, 0xe7, 0x29, 0x3a, 0xc5, 0xd3, 0x05, 0x8a, 0xc3, 0x70, 0x02,
-    0x1b, 0xf8, 0x9b, 0xb9, 0x78, 0x96, 0x2d, 0xb2, 0xc5, 0x2c, 0x5d, 0x09,
-    0xd1, 0x7e, 0x01, 0x3b, 0xcd, 0x0c, 0x58, 0xa8, 0x8f, 0x1c, 0xe5, 0x77,
-    0xd2, 0x6c, 0x9d, 0x62, 0xf4, 0x06, 0xeb, 0x15, 0x04, 0xdc, 0x3b, 0x59,
-    0x72, 0x0d, 0x42, 0x50, 0xe4, 0x64, 0x47, 0x7f, 0x16, 0x1e, 0x74, 0x6a,
-    0xc5, 0xfb, 0xcf, 0xd3, 0xee, 0xb1, 0x6e, 0x18, 0x7b, 0x18, 0x5d, 0x7f,
-    0xff, 0xfc, 0x5b, 0xff, 0xb6, 0x8f, 0x0f, 0x3e, 0x4d, 0xef, 0x4f, 0xdf,
-    0xdc, 0xc1, 0xac, 0x54, 0x11, 0x55, 0x85, 0x17, 0xec, 0x61, 0xb7, 0x96,
-    0x2d, 0xda, 0xc5, 0x70, 0xdd, 0x04, 0x4f, 0x7f, 0xfb, 0xcc, 0x40, 0x33,
-    0x3f, 0x3b, 0xe7, 0x45, 0x8b, 0xff, 0xf7, 0xf3, 0xb8, 0x14, 0xe7, 0x3b,
-    0x04, 0x96, 0xeb, 0x17, 0xff, 0xf1, 0xc3, 0xcf, 0xb1, 0xf0, 0xef, 0xec,
-    0x35, 0xf4, 0xb1, 0x7f, 0xa4, 0xf9, 0xd5, 0xe7, 0x09, 0x62, 0xa5, 0x12,
-    0x7c, 0x5c, 0xbf, 0xfe, 0xcd, 0x44, 0x52, 0x0e, 0x6f, 0xf7, 0xd6, 0xcb,
-    0x15, 0x03, 0xf5, 0xe1, 0x15, 0xf8, 0xc3, 0x33, 0xec, 0xb1, 0x7b, 0x98,
-    0x75, 0x8b, 0xec, 0x21, 0xc6, 0x8b, 0x17, 0xf9, 0xc8, 0xcd, 0xdb, 0x5b,
-    0x2c, 0x54, 0x0f, 0xeb, 0xe3, 0xbe, 0x27, 0xbf, 0xd9, 0xdf, 0x8c, 0x8e,
-    0x73, 0x56, 0x2f, 0xdd, 0xfa, 0x39, 0xcd, 0x58, 0xbc, 0x77, 0xf1, 0x87,
-    0xd1, 0x87, 0x57, 0xb9, 0x24, 0xb1, 0x7b, 0x59, 0xc5, 0x8b, 0x6f, 0x26,
-    0xe7, 0x07, 0x2f, 0xf6, 0x73, 0xf8, 0x4d, 0xc5, 0x8b, 0xfe, 0xef, 0x8f,
-    0xdc, 0x3e, 0xff, 0x58, 0xbf, 0xef, 0xb3, 0xfa, 0x1f, 0x11, 0xab, 0x17,
-    0x9b, 0xfc, 0x58, 0xaf, 0xa3, 0x19, 0x8c, 0xb8, 0x78, 0x11, 0xdd, 0xf9,
-    0xf9, 0x23, 0x82, 0xc5, 0xfd, 0x09, 0xd0, 0x03, 0x3a, 0xc5, 0xfe, 0x9e,
-    0x30, 0x18, 0x80, 0xb1, 0x7d, 0x17, 0xde, 0x25, 0x8b, 0xff, 0x1a, 0x6b,
-    0x96, 0xe6, 0x6d, 0xf3, 0x56, 0x2b, 0x0f, 0xad, 0xc9, 0x6f, 0xff, 0xff,
-    0x7d, 0xfd, 0x3a, 0x67, 0x18, 0xa7, 0x93, 0xa1, 0x41, 0xf5, 0x80, 0x58,
-    0xbf, 0xfb, 0xa1, 0x67, 0x3d, 0x85, 0x0c, 0xe2, 0xc5, 0xf1, 0xe4, 0x5e,
-    0x58, 0xac, 0x3e, 0x86, 0x45, 0xbe, 0x86, 0x9c, 0xeb, 0x17, 0xbc, 0x23,
-    0x56, 0x2c, 0x4c, 0x78, 0x42, 0x23, 0xbf, 0xc4, 0x53, 0xd8, 0x67, 0x95,
-    0x8b, 0xf9, 0xfe, 0xdf, 0x7e, 0x2c, 0x5e, 0xf3, 0x69, 0x62, 0x8e, 0x79,
-    0x5e, 0x2d, 0xbf, 0x64, 0x5f, 0x9d, 0x96, 0x2f, 0xfe, 0xcf, 0xc8, 0x52,
-    0x53, 0xc9, 0xfa, 0xc5, 0x62, 0x66, 0x6e, 0x4c, 0xcf, 0xc4, 0x44, 0x11,
-    0x55, 0xff, 0xfd, 0x91, 0x72, 0x76, 0x2c, 0x09, 0xb4, 0x6e, 0x77, 0xe5,
-    0x8b, 0xde, 0xfb, 0xac, 0x5f, 0xf8, 0x9b, 0xdc, 0x7e, 0xca, 0x42, 0x58,
-    0xbd, 0xe6, 0x25, 0x8b, 0x31, 0x8b, 0x9c, 0x92, 0x7b, 0x85, 0x1a, 0x30,
-    0xfc, 0x27, 0x58, 0x80, 0xa1, 0xbd, 0xc8, 0xe5, 0x7c, 0x91, 0xd1, 0x7c,
-    0x31, 0xde, 0xa3, 0xfb, 0xe1, 0x7a, 0x7e, 0xb1, 0x7e, 0x13, 0x67, 0x7e,
-    0x58, 0xa3, 0x19, 0x10, 0x73, 0x0a, 0x4c, 0x84, 0xbb, 0xb6, 0x7e, 0x77,
-    0x40, 0xa1, 0x81, 0xe2, 0x3b, 0xfe, 0x98, 0xf1, 0xfe, 0x76, 0x62, 0x58,
-    0xbf, 0x61, 0x4f, 0x7c, 0x58, 0xbe, 0xc1, 0xb1, 0xd6, 0x2f, 0xfc, 0x5e,
-    0xf8, 0x9a, 0x1f, 0x17, 0x16, 0x2e, 0x93, 0x98, 0x7c, 0x41, 0x91, 0x5c,
-    0xfe, 0x58, 0xb8, 0xf2, 0xb1, 0x78, 0x19, 0xf9, 0x35, 0xce, 0x2f, 0x7f,
-    0x73, 0xdd, 0xc2, 0x43, 0x58, 0xbf, 0xdb, 0x96, 0x74, 0xfb, 0x41, 0x62,
-    0xf1, 0xc0, 0xeb, 0x17, 0xd3, 0xbc, 0x9c, 0xc4, 0x42, 0x61, 0x8b, 0x9b,
-    0x54, 0x19, 0xa1, 0x98, 0x45, 0xba, 0x6f, 0x71, 0xaf, 0xea, 0x91, 0x4b,
-    0xf7, 0xc6, 0x3c, 0x28, 0x45, 0x79, 0x77, 0xaa, 0x16, 0x97, 0xf0, 0x61,
-    0x69, 0xf3, 0xe9, 0x17, 0xf9, 0xbd, 0x30, 0x10, 0xf1, 0x62, 0xfb, 0xf3,
-    0x9b, 0x2c, 0x51, 0x1e, 0xb7, 0x0c, 0xef, 0xb8, 0xf2, 0x05, 0x8b, 0xfe,
-    0xf4, 0xf7, 0xec, 0x3c, 0xfd, 0x62, 0xfa, 0x2c, 0xc0, 0x96, 0x2f, 0xa0,
-    0xfa, 0xe2, 0xc5, 0xff, 0xc1, 0x9f, 0x3d, 0x3d, 0x1f, 0xd0, 0x95, 0x8b,
-    0xe7, 0xf4, 0xe9, 0x62, 0xff, 0x9f, 0x3b, 0xf4, 0x50, 0x6d, 0x2c, 0x58,
-    0x0e, 0x8a, 0x4f, 0xa3, 0x91, 0x15, 0xff, 0xa0, 0x52, 0x7f, 0xce, 0xed,
-    0xa5, 0x8b, 0x9f, 0x16, 0x2b, 0xb3, 0xd5, 0x01, 0xfd, 0xf4, 0x5f, 0x68,
-    0x96, 0x2f, 0xb7, 0x6d, 0x6c, 0xb1, 0x7a, 0x26, 0xf2, 0xc5, 0xfb, 0x22,
-    0x84, 0xf6, 0xb1, 0x7f, 0xdf, 0x9e, 0x7d, 0xb9, 0x31, 0xeb, 0x17, 0x3c,
-    0x4b, 0x17, 0x9e, 0x49, 0x62, 0xfd, 0xf7, 0x8a, 0x76, 0x58, 0xbf, 0x66,
-    0x87, 0xfc, 0x58, 0xa1, 0x9f, 0x6e, 0xe3, 0x7c, 0x2a, 0xaf, 0xa2, 0xd7,
-    0x90, 0x85, 0xbc, 0xc4, 0x05, 0x8b, 0xfb, 0xf9, 0xee, 0x60, 0x4b, 0x17,
-    0x8a, 0x60, 0x91, 0x7f, 0xe2, 0x03, 0xf5, 0x75, 0x0a, 0x13, 0x1e, 0xb1,
-    0x63, 0xac, 0x51, 0x88, 0xc1, 0x18, 0xe6, 0x17, 0xb0, 0xe0, 0x69, 0x14,
-    0x62, 0xe6, 0x54, 0x90, 0xec, 0x44, 0x33, 0xac, 0x24, 0xee, 0x18, 0xef,
-    0x08, 0x9d, 0x11, 0xfc, 0x95, 0x89, 0x48, 0x7b, 0x85, 0x5e, 0x87, 0x8f,
-    0x54, 0x3a, 0x6f, 0xfe, 0xcf, 0x48, 0x3f, 0x8f, 0xa1, 0x47, 0xac, 0x5f,
-    0xd1, 0xf9, 0xad, 0x4e, 0xcb, 0x17, 0xe0, 0x67, 0xfa, 0xde, 0xbb, 0x58,
-    0xa9, 0x3e, 0x7f, 0x19, 0x54, 0x6e, 0xdc, 0x45, 0x4c, 0xa2, 0x4c, 0x8d,
-    0x79, 0xe9, 0xad, 0x1f, 0x85, 0x53, 0x4e, 0xa8, 0x14, 0x35, 0xc5, 0x0a,
-    0xeb, 0xda, 0x6f, 0x2c, 0x5f, 0xb9, 0xad, 0x4f, 0x96, 0x2f, 0xef, 0xb6,
-    0x00, 0x3f, 0x2c, 0x5f, 0x71, 0xf5, 0xb2, 0xc5, 0x61, 0xe9, 0xf0, 0xbe,
-    0xf7, 0x9f, 0x65, 0x8a, 0xd9, 0x1b, 0x1d, 0x8e, 0xc7, 0xbe, 0x1c, 0x86,
-    0xf6, 0x7d, 0x96, 0x2f, 0x69, 0xb7, 0x58, 0xbf, 0x4e, 0xb3, 0xbf, 0x2c,
-    0x5b, 0x86, 0x9e, 0x3f, 0xc7, 0xaf, 0xf4, 0x45, 0x83, 0xfc, 0xf1, 0x62,
-    0xff, 0x66, 0xbf, 0x21, 0x16, 0x2c, 0x5f, 0xfd, 0x80, 0x03, 0x77, 0xce,
-    0x49, 0x6e, 0xb1, 0x68, 0x2c, 0x51, 0x1e, 0xc7, 0x11, 0xaa, 0x09, 0x84,
-    0xfc, 0xa4, 0x06, 0x9d, 0x21, 0x17, 0x7f, 0xd8, 0x5b, 0xfd, 0xfa, 0x4f,
-    0x16, 0x2e, 0xf7, 0x16, 0x2a, 0x07, 0xa6, 0x47, 0x77, 0xff, 0x67, 0xba,
-    0xc8, 0xdf, 0xac, 0x7e, 0xf8, 0x2e, 0x2c, 0x5f, 0xed, 0xfe, 0xe3, 0x92,
-    0xf2, 0xc5, 0xcf, 0x05, 0x8a, 0xec, 0xf2, 0xc8, 0xd2, 0xfe, 0x11, 0x6f,
-    0x1b, 0xc6, 0x98, 0xb1, 0x71, 0x01, 0x62, 0xfd, 0xaf, 0xb3, 0x1d, 0x62,
-    0xf8, 0x44, 0x2d, 0xd6, 0x29, 0x8f, 0x33, 0x85, 0x17, 0xf7, 0xa2, 0x86,
-    0x77, 0x05, 0x8a, 0x31, 0x5e, 0xb4, 0xc6, 0xd8, 0xf0, 0x98, 0x39, 0x0b,
-    0x42, 0x84, 0x04, 0x5e, 0x39, 0x13, 0x18, 0x64, 0x37, 0xff, 0x17, 0x87,
-    0x9d, 0x18, 0x80, 0x09, 0x58, 0xbf, 0xd9, 0x82, 0xfe, 0x74, 0x95, 0x8a,
-    0xc3, 0xf9, 0x0d, 0x16, 0xff, 0xff, 0x45, 0xce, 0xf9, 0x84, 0x69, 0xca,
-    0x4d, 0x0f, 0x4f, 0xa5, 0x8b, 0xfe, 0x9d, 0x73, 0x02, 0x6d, 0x1a, 0xb1,
-    0x4e, 0x8a, 0x10, 0x99, 0xae, 0xdd, 0x96, 0x2e, 0xe0, 0x96, 0x2e, 0xd8,
-    0x4b, 0x15, 0x86, 0xc5, 0x86, 0x2f, 0xff, 0xdf, 0xcd, 0xc8, 0x43, 0x29,
-    0x0f, 0x4f, 0x24, 0xb1, 0x58, 0x9d, 0x1f, 0xe1, 0x86, 0xc4, 0x64, 0x93,
-    0xe1, 0xfb, 0xe7, 0xdb, 0x06, 0xb1, 0x7f, 0x82, 0xce, 0xfd, 0xe9, 0x3a,
-    0xc5, 0xf8, 0xb0, 0x02, 0xe2, 0xc5, 0xff, 0x6e, 0xf8, 0x59, 0xd1, 0xb8,
-    0xb1, 0x5b, 0x1f, 0x17, 0xca, 0x29, 0x91, 0x77, 0xc8, 0x4c, 0x5f, 0x0c,
-    0x78, 0x75, 0x8b, 0x81, 0x29, 0x17, 0x04, 0x12, 0x45, 0x39, 0xb1, 0x08,
-    0x5e, 0xf8, 0x4d, 0xa8, 0x24, 0x46, 0x1a, 0x1b, 0xec, 0xd4, 0xf1, 0x62,
-    0x86, 0x7b, 0x1c, 0x36, 0xac, 0x47, 0x79, 0xb0, 0xcd, 0xbf, 0xfd, 0xee,
-    0xf7, 0x7f, 0xc7, 0x4f, 0xbe, 0x1f, 0x16, 0x2f, 0xb5, 0x38, 0x4b, 0x17,
-    0xb4, 0x2d, 0x96, 0x2f, 0x1d, 0xa0, 0x61, 0xe0, 0x6c, 0x43, 0x6e, 0xb8,
-    0xb1, 0x7f, 0xa6, 0x0f, 0xe8, 0x4f, 0x96, 0x2f, 0x9c, 0x62, 0x95, 0x8b,
-    0xba, 0xfe, 0x2c, 0x46, 0xb3, 0xed, 0xd0, 0xc7, 0x8c, 0xee, 0x6f, 0x2c,
-    0x5f, 0x45, 0x09, 0x02, 0xc5, 0xff, 0x7d, 0xbd, 0xcd, 0xcb, 0x36, 0x58,
-    0xbc, 0x71, 0x1a, 0xb1, 0x7b, 0xae, 0xe3, 0x68, 0xd9, 0x62, 0xff, 0xda,
-    0x26, 0x09, 0xfd, 0xa1, 0x1d, 0x62, 0xed, 0xdd, 0x62, 0xff, 0xd3, 0x1e,
-    0x2d, 0x66, 0xb5, 0x3d, 0xac, 0x5f, 0x13, 0xf7, 0x05, 0x8b, 0xfe, 0x7e,
-    0xff, 0x83, 0xd3, 0x6e, 0xb1, 0x52, 0x7b, 0xda, 0x23, 0xbe, 0xce, 0x98,
-    0x4b, 0x17, 0x60, 0xd6, 0x2f, 0xcc, 0x7c, 0x2f, 0x2c, 0x5c, 0xf2, 0xb1,
-    0x50, 0x3d, 0x4d, 0x0b, 0xf8, 0x9e, 0xff, 0x73, 0x1f, 0xc6, 0xbf, 0xd6,
-    0x2f, 0xfb, 0xf3, 0xa9, 0xdd, 0xcb, 0x75, 0x8b, 0xc6, 0xb7, 0x3a, 0xed,
-    0x52, 0xe8, 0xcb, 0xf7, 0x40, 0xec, 0x63, 0x50, 0xa1, 0xf9, 0x0b, 0x3b,
-    0xf8, 0xbf, 0xa8, 0xd2, 0xfb, 0xde, 0x9d, 0x2c, 0x54, 0xab, 0xa0, 0xc2,
-    0x47, 0x3b, 0xf4, 0xa7, 0xc0, 0xe1, 0x45, 0x50, 0x5f, 0xf8, 0xdd, 0x37,
-    0xb8, 0x6f, 0x6a, 0x31, 0x63, 0x94, 0x02, 0x12, 0x42, 0x85, 0x17, 0x44,
-    0xe0, 0xa5, 0xdb, 0xdf, 0xf3, 0xea, 0x7c, 0xe0, 0x98, 0x2c, 0x5f, 0xbe,
-    0xfc, 0x16, 0xcb, 0x17, 0xff, 0x38, 0xdf, 0xd3, 0xd8, 0x59, 0x9c, 0x58,
-    0xbf, 0xb9, 0x3d, 0x1c, 0x80, 0xb1, 0x68, 0xd9, 0x62, 0x96, 0x2d, 0xd6,
-    0x18, 0x68, 0xe3, 0x61, 0x7b, 0x46, 0xcb, 0x17, 0xcd, 0xe2, 0x95, 0x8b,
-    0xff, 0xf1, 0x67, 0x4c, 0xdf, 0xee, 0x79, 0xc2, 0xf7, 0x16, 0x28, 0xc4,
-    0x60, 0x75, 0x86, 0x46, 0x8b, 0x86, 0x43, 0x43, 0x4e, 0x70, 0x08, 0xa1,
-    0x46, 0x25, 0x7f, 0xff, 0xbf, 0x3f, 0x73, 0x70, 0x5d, 0x7b, 0xfd, 0xf5,
-    0x09, 0xd2, 0xc5, 0xf6, 0x71, 0x89, 0x62, 0xe1, 0x69, 0x62, 0xa0, 0x89,
-    0xfd, 0x33, 0x1c, 0x86, 0xf6, 0xef, 0xc5, 0x8b, 0xe1, 0x1f, 0x06, 0xb1,
-    0x5d, 0xa6, 0x90, 0xf0, 0xd7, 0xf9, 0x87, 0x50, 0xf5, 0xff, 0xfd, 0xa8,
-    0x0a, 0x73, 0xfb, 0xbf, 0x30, 0x7b, 0x60, 0x4b, 0x17, 0xfd, 0x9d, 0x4c,
-    0x46, 0xe7, 0x7e, 0x58, 0xbf, 0x68, 0x7f, 0x78, 0x96, 0x2b, 0xe7, 0xce,
-    0x19, 0xed, 0xf0, 0xa4, 0x8d, 0x58, 0xbf, 0xbe, 0xe3, 0xf8, 0x8d, 0x58,
-    0xbf, 0x14, 0xc4, 0xfd, 0xac, 0x5b, 0x06, 0x7f, 0x9b, 0x91, 0xb9, 0x85,
-    0xef, 0x66, 0xeb, 0x14, 0x73, 0xd2, 0xe1, 0xa5, 0xc7, 0x02, 0xc5, 0xff,
-    0x48, 0x65, 0xef, 0x89, 0xa0, 0xb1, 0x50, 0x3d, 0x2f, 0x0c, 0x5f, 0xbc,
-    0x59, 0xa9, 0x58, 0xa9, 0x54, 0xe6, 0x6c, 0x31, 0x41, 0x0f, 0x1f, 0x3a,
-    0x04, 0x45, 0x78, 0x6d, 0xc5, 0x8b, 0xc4, 0xe6, 0xac, 0x5f, 0xf8, 0x3e,
-    0x4e, 0x73, 0x5a, 0x7f, 0x2c, 0x54, 0x9f, 0xd6, 0x0e, 0xf0, 0x76, 0xec,
-    0x35, 0x62, 0xfd, 0x27, 0x27, 0x35, 0x62, 0xe1, 0xfd, 0x62, 0xe3, 0x58,
-    0xc3, 0xc0, 0xc2, 0x8b, 0xff, 0x37, 0x0f, 0x2f, 0xad, 0x38, 0x4b, 0x17,
-    0xed, 0xb0, 0x72, 0x75, 0x8b, 0x70, 0xd4, 0x4b, 0x7c, 0xb8, 0x33, 0xfb,
-    0x9f, 0xa9, 0x62, 0xff, 0xff, 0xef, 0xcf, 0x30, 0x13, 0xee, 0x6b, 0x36,
-    0x9d, 0x73, 0xfb, 0xbf, 0x16, 0x2f, 0xb5, 0xa6, 0x1a, 0xc5, 0xff, 0x78,
-    0x98, 0xf3, 0xc7, 0xd2, 0xc5, 0xe8, 0x36, 0x96, 0x28, 0x68, 0xec, 0xc7,
-    0x47, 0x23, 0x63, 0x8b, 0xf8, 0xfa, 0xd3, 0xf6, 0x05, 0x8b, 0xc1, 0xb9,
-    0xd6, 0x2f, 0xcf, 0xa9, 0xf3, 0xac, 0x5e, 0x6f, 0xc4, 0xb1, 0x52, 0x78,
-    0xbe, 0x27, 0xbf, 0x8a, 0x77, 0xfb, 0xf5, 0x2c, 0x5e, 0x36, 0x78, 0xb1,
-    0x7f, 0xd9, 0xef, 0x39, 0xbe, 0xcd, 0xd6, 0x2f, 0xe9, 0xef, 0x99, 0xdf,
-    0x96, 0x2e, 0xd4, 0xac, 0x50, 0xcf, 0x1f, 0xc6, 0x17, 0xe1, 0x10, 0xe3,
-    0x48, 0xd1, 0x62, 0xf1, 0x31, 0xd6, 0x2f, 0xff, 0x6a, 0x73, 0xb8, 0xe2,
-    0x38, 0xbc, 0x06, 0x58, 0xa8, 0x1f, 0x57, 0x87, 0x2f, 0xf7, 0x9f, 0x77,
-    0x1c, 0xf9, 0x62, 0xfd, 0xc9, 0xdf, 0x0e, 0xb1, 0x52, 0x7b, 0xbc, 0x34,
-    0xbe, 0x7e, 0xe1, 0x8b, 0x17, 0xfa, 0x4a, 0x19, 0xb0, 0xa0, 0xb1, 0x7d,
-    0xbb, 0xe9, 0x96, 0x28, 0xd3, 0xd7, 0xec, 0xd2, 0xff, 0x87, 0xf9, 0x84,
-    0x5a, 0x16, 0xcb, 0x14, 0x62, 0xb2, 0xc9, 0x21, 0x81, 0x88, 0xc7, 0xb2,
-    0x10, 0x5b, 0x91, 0x77, 0x09, 0xdd, 0x3f, 0x80, 0x87, 0xcf, 0x41, 0x92,
-    0x54, 0xae, 0x1a, 0xf2, 0x5c, 0x7d, 0x41, 0x7c, 0x90, 0xd2, 0xde, 0xe1,
-    0xdd, 0xa3, 0x83, 0xc6, 0x0c, 0xc7, 0x5e, 0x9c, 0x65, 0xbc, 0x76, 0x0d,
-    0x62, 0xf7, 0x78, 0x35, 0x8a, 0xc3, 0x78, 0xc3, 0xd7, 0xfb, 0xf9, 0x0f,
-    0x3b, 0xf6, 0xb1, 0x7e, 0x3c, 0x39, 0x84, 0xb1, 0x7f, 0x9f, 0x69, 0xec,
-    0x1a, 0x95, 0x8a, 0xe1, 0xee, 0xf8, 0xa2, 0xef, 0xec, 0xb1, 0x77, 0x8d,
-    0x58, 0xbd, 0xcf, 0x62, 0xc5, 0xb8, 0x61, 0xf8, 0xee, 0x44, 0x43, 0x21,
-    0x8c, 0xdf, 0xf6, 0xcd, 0x84, 0x28, 0x67, 0x16, 0x2b, 0x0f, 0xf7, 0x88,
-    0x97, 0xe6, 0x04, 0x73, 0x9d, 0x62, 0xfe, 0xdd, 0xf8, 0x28, 0x3a, 0xc5,
-    0xe2, 0x17, 0x16, 0x2b, 0xe7, 0x99, 0xd0, 0xbe, 0xee, 0xb9, 0x1c, 0xb1,
-    0x7e, 0x8b, 0x08, 0x58, 0xb1, 0x7f, 0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0xfd,
-    0xe7, 0xee, 0x05, 0x31, 0xb1, 0xfb, 0xc9, 0x0e, 0x8a, 0x2f, 0xbb, 0xf7,
-    0xdd, 0x62, 0xf9, 0xf6, 0xeb, 0x0d, 0x58, 0xb0, 0x30, 0xf3, 0xb7, 0x24,
-    0xac, 0x46, 0x5b, 0xc2, 0x8e, 0xf8, 0xb3, 0xb8, 0x2c, 0x5f, 0xf3, 0x9c,
-    0xb0, 0x1f, 0x63, 0xac, 0x5c, 0xdd, 0x30, 0xf6, 0xf8, 0x47, 0x7b, 0x98,
-    0x35, 0x8b, 0xfe, 0x67, 0xf3, 0x97, 0x85, 0xf5, 0x8b, 0xdf, 0x7e, 0x8b,
-    0x17, 0x0a, 0x1f, 0x3d, 0x70, 0xce, 0x2f, 0xfe, 0x61, 0xfd, 0xf5, 0x9d,
-    0x24, 0xa2, 0x58, 0xbf, 0xfb, 0x82, 0xd1, 0x60, 0xff, 0x21, 0x4a, 0xc5,
-    0xa4, 0xc4, 0x45, 0xf9, 0x1a, 0xe1, 0xee, 0xb1, 0x76, 0x74, 0x19, 0xe1,
-    0x00, 0xa6, 0xff, 0x1b, 0xee, 0xf7, 0x7d, 0x71, 0x62, 0xfd, 0x9e, 0x03,
-    0x79, 0x62, 0xa5, 0x70, 0x52, 0x11, 0xb3, 0x3c, 0x20, 0x62, 0x2e, 0xd3,
-    0xa7, 0xe1, 0xf8, 0x22, 0xf8, 0xe3, 0x8b, 0xff, 0xf4, 0xfd, 0xb0, 0xa7,
-    0x46, 0x8c, 0x4d, 0xa8, 0x2c, 0x54, 0x17, 0x61, 0xf8, 0x43, 0xe9, 0xc8,
-    0xbe, 0xa8, 0x43, 0x54, 0xb6, 0xd8, 0x5b, 0x42, 0x88, 0x67, 0x19, 0x2c,
-    0x39, 0xe5, 0x5c, 0xb4, 0xff, 0xa8, 0x21, 0x6f, 0xe1, 0xf1, 0x4f, 0x83,
-    0x5f, 0x83, 0xd6, 0xa4, 0x96, 0x2f, 0xff, 0xde, 0x91, 0x81, 0xbb, 0x03,
-    0xf6, 0x1e, 0x9b, 0xb5, 0x8b, 0x9c, 0xeb, 0x14, 0xb1, 0x7a, 0x02, 0x1a,
-    0xc5, 0xcd, 0x05, 0x8b, 0xb5, 0x8b, 0x14, 0xe6, 0xb9, 0x85, 0xed, 0x1c,
-    0xb1, 0x46, 0x26, 0x4d, 0x25, 0x30, 0x5a, 0x71, 0x78, 0x83, 0x3e, 0x99,
-    0x1c, 0x3f, 0x7f, 0x14, 0x33, 0x81, 0x9d, 0x62, 0xf0, 0x8b, 0xcb, 0x15,
-    0x87, 0x99, 0xc2, 0xfb, 0xf1, 0xf8, 0x06, 0x65, 0x8a, 0xf1, 0xe4, 0x86,
-    0x43, 0x7f, 0x11, 0x9f, 0xce, 0xc2, 0x58, 0xbf, 0xd8, 0x7e, 0xe1, 0x39,
-    0xe5, 0x8a, 0xc3, 0xe5, 0x01, 0x8d, 0xfd, 0x3f, 0x7e, 0x99, 0x12, 0xc5,
-    0x68, 0xf4, 0x40, 0x43, 0x7e, 0x89, 0x98, 0xb6, 0x58, 0xbf, 0x84, 0x03,
-    0x37, 0x38, 0x16, 0x2d, 0x0c, 0x3d, 0xb2, 0x29, 0xbf, 0x16, 0x00, 0x5c,
-    0x58, 0xbf, 0xf9, 0xfb, 0xe4, 0xc5, 0x24, 0x29, 0xd2, 0xc5, 0x6c, 0xab,
-    0x9a, 0x10, 0xfd, 0xc8, 0x6c, 0xf6, 0xfa, 0x02, 0x60, 0x8a, 0x2f, 0xf7,
-    0x70, 0xff, 0x57, 0x54, 0xc7, 0xac, 0x5f, 0xf3, 0xf7, 0x0d, 0xb6, 0x07,
-    0x60, 0x58, 0xac, 0x3f, 0xef, 0x9f, 0xdf, 0x07, 0xa6, 0x02, 0xc5, 0xff,
-    0x71, 0xe0, 0xfe, 0x9f, 0x71, 0x62, 0xa0, 0x7b, 0xbf, 0x24, 0xbf, 0xfc,
-    0x02, 0x17, 0x3d, 0xc9, 0xd6, 0x77, 0xe5, 0x8b, 0xff, 0xc1, 0x94, 0xf0,
-    0xb3, 0xa3, 0xff, 0xf2, 0xb1, 0x7f, 0xfe, 0x21, 0x7a, 0x7f, 0xbb, 0xf3,
-    0x52, 0x1b, 0x12, 0xc5, 0xc5, 0x03, 0x11, 0x43, 0x89, 0x77, 0xfb, 0x99,
-    0xa2, 0x9e, 0xe0, 0xb1, 0x71, 0x01, 0x62, 0xb6, 0x3c, 0xb6, 0x34, 0xa6,
-    0x4e, 0xa8, 0x88, 0x85, 0x0e, 0xd0, 0x9e, 0x6c, 0x75, 0x8b, 0xfd, 0x9d,
-    0x33, 0x40, 0x00, 0x96, 0x2f, 0xfe, 0x7d, 0x18, 0xd3, 0x09, 0x21, 0x41,
-    0x62, 0xf0, 0xc5, 0x2b, 0x17, 0xb5, 0x9d, 0x16, 0x2f, 0x69, 0xcd, 0x58,
-    0xa9, 0x37, 0xb8, 0x3f, 0x7e, 0xfb, 0xc7, 0x36, 0xcb, 0x15, 0x04, 0x74,
-    0xba, 0x27, 0x16, 0xbc, 0x3f, 0x7f, 0x81, 0xcc, 0x2c, 0xe0, 0x96, 0x2b,
-    0x0f, 0xbd, 0x8f, 0x2f, 0xf4, 0xc4, 0x2e, 0x79, 0xce, 0xb1, 0x7f, 0xff,
-    0xc1, 0xfb, 0xf2, 0x0d, 0x48, 0xa3, 0xb3, 0x9c, 0xfc, 0x97, 0x96, 0x2f,
-    0xb6, 0x38, 0x7c, 0x58, 0xb4, 0x16, 0x2f, 0xf4, 0xe7, 0x7e, 0xcd, 0x4a,
-    0xc5, 0x6c, 0x98, 0x5f, 0x66, 0xae, 0xd7, 0xa2, 0x62, 0x12, 0xbf, 0xf4,
-    0xfc, 0x3e, 0x16, 0x7b, 0xf8, 0xb1, 0x7e, 0xfb, 0x39, 0x32, 0xc5, 0xfe,
-    0xe4, 0xeb, 0x7c, 0x0f, 0x16, 0x2c, 0x23, 0x0f, 0x6f, 0x84, 0xd7, 0xcf,
-    0xd3, 0xee, 0xb1, 0x5f, 0x3c, 0xde, 0x14, 0xde, 0xc0, 0x32, 0xc5, 0xf9,
-    0xfb, 0xf0, 0x7b, 0x2c, 0x5b, 0xa3, 0x9f, 0x57, 0xc8, 0xb8, 0x39, 0x7a,
-    0x41, 0x8b, 0x17, 0xfc, 0xc1, 0xf9, 0xf5, 0x22, 0xeb, 0xd6, 0x2f, 0xfe,
-    0xfb, 0x9d, 0x98, 0xb7, 0xdd, 0x86, 0xb1, 0x68, 0x1a, 0x88, 0x4d, 0xcf,
-    0xeb, 0xe8, 0xcb, 0x68, 0x50, 0x56, 0x26, 0x50, 0x28, 0xc0, 0x6f, 0xfb,
-    0x3b, 0xfb, 0xec, 0x4d, 0x05, 0x8b, 0xdf, 0x9e, 0xd6, 0x2f, 0xfd, 0xa8,
-    0x07, 0x9f, 0xf3, 0x96, 0xcb, 0x17, 0xff, 0xfb, 0xde, 0x72, 0x34, 0xcf,
-    0x1a, 0x2d, 0x73, 0x8f, 0x9d, 0xac, 0x5f, 0xec, 0xef, 0xdf, 0xc1, 0x6e,
-    0xb1, 0x7e, 0xd6, 0x74, 0x6f, 0xac, 0x5f, 0xb6, 0x92, 0x9e, 0xd6, 0x28,
-    0x91, 0x13, 0xc3, 0x61, 0x15, 0x5f, 0xb7, 0x79, 0x28, 0x2c, 0x57, 0x67,
-    0xae, 0x45, 0xf5, 0x29, 0xd4, 0xe2, 0x0b, 0x46, 0x8d, 0x7d, 0xa3, 0xfb,
-    0xb5, 0x8a, 0x96, 0x5a, 0xfe, 0x43, 0x8d, 0xe5, 0x14, 0x44, 0x85, 0xa1,
-    0x2f, 0xc7, 0x1c, 0xd1, 0x95, 0x81, 0x2c, 0xa5, 0x3c, 0xf0, 0xa7, 0xc7,
-    0x42, 0x8f, 0x1c, 0x33, 0x4b, 0xff, 0xf1, 0xaf, 0xe2, 0xc8, 0x77, 0xe2,
-    0x7d, 0xb8, 0x25, 0x8b, 0xf7, 0x24, 0xb3, 0x65, 0x8b, 0x87, 0x2b, 0x16,
-    0xe9, 0x26, 0xfc, 0x65, 0x17, 0xff, 0x66, 0x8c, 0xcf, 0xb1, 0xa4, 0x2e,
-    0x2c, 0x53, 0xa6, 0x0a, 0xd0, 0x97, 0x11, 0x45, 0xff, 0x8d, 0x6d, 0xfe,
-    0xf1, 0x67, 0x7e, 0x58, 0xbf, 0x34, 0xc2, 0x60, 0xb1, 0x68, 0xf5, 0x8b,
-    0xbb, 0x81, 0x86, 0xf2, 0x22, 0x7b, 0xb0, 0x0b, 0x17, 0x34, 0x18, 0xf1,
-    0xc8, 0xc2, 0xe7, 0xfa, 0xc5, 0xff, 0xfd, 0xa8, 0x18, 0x3f, 0xc9, 0x85,
-    0x9d, 0xfa, 0x70, 0x25, 0x8b, 0xb9, 0xc5, 0x8b, 0xf4, 0xe7, 0xb8, 0xcb,
-    0x17, 0xe6, 0x7e, 0x08, 0xd5, 0x8b, 0xc1, 0x04, 0x12, 0xc5, 0xc0, 0x64,
-    0x88, 0xc3, 0x43, 0x7f, 0xb5, 0x3d, 0x33, 0x0e, 0x35, 0x8a, 0x31, 0x35,
-    0xe7, 0x17, 0xd2, 0xf9, 0xc6, 0x3e, 0x4f, 0xc4, 0xa1, 0x15, 0x5f, 0x41,
-    0xc8, 0xd5, 0x8b, 0xfc, 0x4c, 0x6c, 0x44, 0xf1, 0x2c, 0x54, 0x47, 0xb1,
-    0xc2, 0x3b, 0xe1, 0x78, 0x4c, 0xb1, 0x58, 0x78, 0xc4, 0x47, 0x7f, 0x02,
-    0x61, 0xf0, 0xf8, 0xb1, 0x7b, 0xaf, 0xeb, 0xe5, 0x62, 0xff, 0xdd, 0x46,
-    0x66, 0xef, 0xee, 0x0b, 0x4b, 0x17, 0xa2, 0x91, 0xac, 0x5f, 0xb8, 0x22,
-    0x98, 0x2c, 0x5f, 0xe7, 0xfb, 0x71, 0xf5, 0x2b, 0x17, 0xda, 0x9c, 0x2c,
-    0x3f, 0x86, 0x1e, 0xe1, 0x45, 0xe0, 0x61, 0x2c, 0x56, 0x1e, 0xf0, 0x90,
-    0xa9, 0xd3, 0x3c, 0xe4, 0x63, 0x77, 0xf3, 0x90, 0x37, 0xdd, 0xd6, 0x2f,
-    0x30, 0x31, 0x22, 0xa0, 0xbb, 0x5b, 0xd9, 0xa6, 0xa1, 0x8c, 0x78, 0xe2,
-    0x7f, 0x18, 0x18, 0x08, 0x08, 0xc3, 0xd1, 0xb1, 0xf4, 0x29, 0x8e, 0x2f,
-    0xbe, 0x91, 0xb8, 0xd6, 0x2f, 0xdd, 0x33, 0x3a, 0x1a, 0xb1, 0x7f, 0xfd,
-    0xdf, 0xa4, 0x78, 0x45, 0x86, 0xe1, 0x01, 0x62, 0xa4, 0xff, 0x34, 0x5b,
-    0x7f, 0x73, 0xef, 0xbb, 0x69, 0x62, 0xfc, 0x3d, 0x38, 0xb6, 0x58, 0xbe,
-    0xf7, 0x1b, 0xb5, 0x8b, 0x79, 0x62, 0xb0, 0xdb, 0x1a, 0x49, 0x7f, 0xf9,
-    0xcd, 0xfb, 0x87, 0xaf, 0x42, 0x63, 0xb1, 0x62, 0xff, 0x05, 0x85, 0x9d,
-    0x1f, 0x4b, 0x17, 0xfe, 0xce, 0x4e, 0xc3, 0x13, 0x6a, 0x0b, 0x17, 0x9e,
-    0x12, 0xb1, 0x7b, 0x70, 0xce, 0xb1, 0x78, 0x01, 0x9d, 0x62, 0xf0, 0x73,
-    0xba, 0xc5, 0x0d, 0x17, 0x51, 0x20, 0x00, 0x73, 0xc4, 0x11, 0xc3, 0xf7,
-    0xf1, 0x67, 0x60, 0x0e, 0x0b, 0x17, 0x67, 0x16, 0x2f, 0xb0, 0xef, 0xe5,
-    0x8b, 0xff, 0xb3, 0xe1, 0x9f, 0x37, 0x9f, 0xc9, 0xd6, 0x2d, 0xcc, 0x3f,
-    0xf2, 0x17, 0xf1, 0x15, 0xb8, 0xb1, 0x58, 0xac, 0xc2, 0x22, 0xfd, 0x30,
-    0x7c, 0x84, 0x93, 0xf9, 0x0e, 0xff, 0x27, 0x0a, 0x15, 0xe1, 0x19, 0xdf,
-    0xbf, 0xf6, 0x1c, 0xac, 0x5e, 0xf7, 0xf1, 0x62, 0xff, 0xfd, 0x3d, 0x03,
-    0xd3, 0x03, 0x35, 0xa7, 0x36, 0x74, 0xb1, 0x58, 0x7e, 0xda, 0x1d, 0xbe,
-    0x93, 0x99, 0xc5, 0x8a, 0x94, 0x71, 0xe4, 0x27, 0x9c, 0x86, 0xe6, 0x3a,
-    0xc5, 0xff, 0xf8, 0x8a, 0x61, 0xa9, 0xe1, 0x67, 0x47, 0xf8, 0x96, 0x2f,
-    0x39, 0x3a, 0xc5, 0x61, 0xf8, 0x32, 0xad, 0xfc, 0xcf, 0xcf, 0xc9, 0xd6,
-    0x2f, 0xf7, 0x3d, 0x31, 0x0b, 0xbe, 0x2c, 0x57, 0xcf, 0x90, 0x45, 0xb7,
-    0xcf, 0xad, 0x4a, 0xc5, 0xfe, 0xce, 0x99, 0x18, 0x10, 0x41, 0x24, 0x5e,
-    0x0b, 0x3e, 0xb1, 0x7e, 0x8a, 0x73, 0xfc, 0x58, 0xa3, 0x11, 0x8f, 0xf2,
-    0x22, 0x22, 0xf1, 0xe0, 0x63, 0xd7, 0xfb, 0xaf, 0x91, 0x6f, 0xf7, 0xd2,
-    0xc5, 0xcd, 0xe5, 0x8b, 0xff, 0x08, 0x3d, 0x3c, 0x8f, 0x3b, 0xf2, 0xc5,
-    0x1c, 0xf6, 0x00, 0x2f, 0x60, 0x2c, 0x5f, 0xa6, 0x21, 0x30, 0x6b, 0x15,
-    0x86, 0xf0, 0x84, 0xaa, 0x25, 0x65, 0x87, 0x84, 0x3f, 0xe3, 0x4b, 0x12,
-    0x5f, 0x48, 0x49, 0x06, 0xbd, 0x78, 0xef, 0xc5, 0x8b, 0xfe, 0x97, 0x26,
-    0xf7, 0x1f, 0xb5, 0x8b, 0xff, 0xc3, 0x67, 0x26, 0xf3, 0x94, 0x39, 0x8b,
-    0x17, 0xf1, 0x9c, 0x98, 0x0b, 0x4b, 0x14, 0x62, 0x2b, 0xf0, 0xe3, 0x74,
-    0x7b, 0xfb, 0xed, 0xa7, 0xcd, 0x2c, 0x5f, 0xf4, 0xc1, 0xcb, 0x38, 0xd1,
-    0xeb, 0x15, 0x28, 0x98, 0x63, 0x11, 0x16, 0xd2, 0xc5, 0xf7, 0x7b, 0xbe,
-    0x96, 0x2a, 0x37, 0x36, 0x3e, 0x0c, 0xbc, 0x71, 0x12, 0xc5, 0x00, 0xf0,
-    0xfc, 0x4d, 0x7f, 0xba, 0x7d, 0xf2, 0x0d, 0xd1, 0x62, 0xfd, 0xd1, 0x8e,
-    0xe7, 0x58, 0xa9, 0x44, 0x1e, 0x11, 0x11, 0xbd, 0xed, 0x7f, 0x16, 0x2f,
-    0x42, 0x60, 0xb1, 0x7f, 0xa7, 0x73, 0x25, 0xf9, 0x2b, 0x15, 0x11, 0xe8,
-    0xf5, 0x0e, 0xd4, 0xa2, 0x53, 0x1b, 0xaf, 0xa4, 0x37, 0x02, 0xc5, 0xc2,
-    0xfa, 0xc5, 0xf3, 0x9f, 0xac, 0x35, 0x62, 0xfc, 0x5a, 0xd0, 0xbe, 0xb1,
-    0x7f, 0x1f, 0xc5, 0x39, 0xda, 0xc5, 0xff, 0xfd, 0xcc, 0xfb, 0xf0, 0x5b,
-    0x7e, 0x4f, 0xee, 0x4e, 0x2c, 0x5f, 0xff, 0xef, 0x63, 0x96, 0xcd, 0xcc,
-    0xe8, 0xfe, 0x7e, 0x30, 0x16, 0x2f, 0xcf, 0xee, 0x7d, 0xc6, 0x8e, 0xbe,
-    0x17, 0x06, 0xb9, 0x5b, 0x27, 0x8b, 0x11, 0x1f, 0xc6, 0x18, 0xa7, 0xd1,
-    0x8a, 0x5e, 0xc2, 0x1a, 0xc5, 0xfa, 0x28, 0x4e, 0xb6, 0x58, 0xa9, 0x3c,
-    0x7c, 0x1c, 0xb7, 0x96, 0x2d, 0xb0, 0xcd, 0x96, 0xe4, 0x15, 0x2c, 0xff,
-    0x58, 0x42, 0xab, 0x21, 0x3c, 0xf2, 0xd4, 0x7f, 0x1b, 0x6b, 0x4b, 0x5e,
-    0x03, 0x69, 0x46, 0xc9, 0xc8, 0xc9, 0x7d, 0x0c, 0x11, 0x47, 0xcc, 0x1c,
-    0x32, 0xef, 0xc6, 0x4f, 0x26, 0x0b, 0x17, 0xff, 0x6d, 0x9e, 0xcf, 0xce,
-    0x81, 0x3a, 0x58, 0xbf, 0xba, 0xff, 0x1a, 0xe1, 0x71, 0x62, 0xb4, 0x7f,
-    0x62, 0x45, 0xbf, 0xef, 0xb7, 0x83, 0x1c, 0xe1, 0x2c, 0x5f, 0x39, 0x0a,
-    0x56, 0x2f, 0xf4, 0x96, 0xf9, 0xef, 0xba, 0xc5, 0x40, 0xf5, 0x34, 0x43,
-    0x7d, 0x90, 0x72, 0x58, 0xad, 0x8f, 0x0f, 0x72, 0x2b, 0xcc, 0x07, 0x58,
-    0xbf, 0xf6, 0x74, 0x99, 0xfc, 0xed, 0x3d, 0xac, 0x5f, 0xf0, 0xc8, 0x5c,
-    0xcd, 0xb3, 0x65, 0x8b, 0xd3, 0xa2, 0x58, 0xbf, 0xfb, 0x3b, 0xf0, 0xa4,
-    0xce, 0x16, 0x6e, 0xb1, 0x7f, 0xf8, 0x12, 0x59, 0xdf, 0x9b, 0x9c, 0x93,
-    0xac, 0x5f, 0xfe, 0x26, 0x1c, 0x8f, 0xf3, 0x9d, 0x1b, 0x4b, 0x17, 0xa1,
-    0x83, 0x58, 0xbf, 0xd8, 0x32, 0x6e, 0x38, 0xd6, 0x2d, 0xf5, 0x8b, 0x6d,
-    0x88, 0xab, 0x64, 0xa2, 0x1d, 0xe1, 0x95, 0x62, 0x66, 0xcd, 0x0f, 0x5a,
-    0xfa, 0x74, 0x82, 0x8d, 0xf6, 0xb4, 0x9f, 0x57, 0xa3, 0xc0, 0xbe, 0x3f,
-    0x30, 0xeb, 0x14, 0xe7, 0x9a, 0xc5, 0x57, 0xf4, 0xeb, 0xde, 0xc8, 0xf5,
-    0x8b, 0xfb, 0x8f, 0xf9, 0xee, 0x0b, 0x17, 0x6b, 0xb5, 0x8b, 0xa7, 0xa2,
-    0xc5, 0x0d, 0x74, 0xef, 0x21, 0x49, 0xb9, 0x16, 0xa1, 0xa0, 0x72, 0x4f,
-    0x8e, 0x32, 0x0f, 0x5f, 0x29, 0xc8, 0x88, 0x38, 0x62, 0x19, 0x7f, 0x50,
-    0xcd, 0xfc, 0x18, 0xca, 0x73, 0x65, 0x8b, 0xfd, 0xc2, 0xc0, 0x31, 0x01,
-    0x62, 0xff, 0xd0, 0x6f, 0x0a, 0x75, 0x22, 0x8f, 0x58, 0xb1, 0x2c, 0x5e,
-    0xda, 0x60, 0xb1, 0x4b, 0x15, 0x26, 0xab, 0x61, 0xeb, 0xfb, 0x3d, 0xc7,
-    0x0b, 0xcb, 0x17, 0xd0, 0x26, 0x35, 0x62, 0x86, 0x7a, 0x58, 0x5f, 0x43,
-    0x4d, 0xcb, 0xb2, 0xfd, 0x19, 0x32, 0x11, 0x1d, 0x84, 0xe7, 0x7f, 0x7d,
-    0xfc, 0x52, 0x75, 0x8b, 0xff, 0x83, 0xf4, 0x73, 0xf3, 0xdf, 0x76, 0x02,
-    0xc5, 0xff, 0xfd, 0x02, 0x97, 0xd6, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1,
-    0x7f, 0xfb, 0x06, 0xc7, 0xce, 0xe1, 0x80, 0xc1, 0xac, 0x5d, 0xf6, 0x58,
-    0xba, 0x2e, 0x2c, 0x5f, 0xb3, 0xa3, 0x90, 0xf0, 0xd8, 0x06, 0x2f, 0x7f,
-    0x19, 0xec, 0xe7, 0x25, 0x62, 0xfb, 0x3b, 0xf4, 0xac, 0x5f, 0xfc, 0xda,
-    0xc3, 0x5f, 0x59, 0xd1, 0xb4, 0xb1, 0x5f, 0x3e, 0x9e, 0x84, 0x77, 0xff,
-    0xb3, 0xbf, 0x4e, 0x05, 0x90, 0x90, 0x71, 0x62, 0xff, 0xc5, 0x9a, 0xd3,
-    0x9f, 0x3b, 0xf2, 0xc5, 0xff, 0xdc, 0xc1, 0x75, 0xf8, 0x76, 0xfe, 0x6e,
-    0xb1, 0x7e, 0xea, 0x6d, 0x83, 0x82, 0xc5, 0x18, 0xa9, 0xda, 0x31, 0xea,
-    0x4f, 0xb2, 0x13, 0x04, 0x49, 0xc4, 0xbf, 0x1f, 0x89, 0x2a, 0xfb, 0x3f,
-    0x9b, 0xac, 0x5d, 0xf6, 0x58, 0xbf, 0xf7, 0xdd, 0x81, 0x85, 0x3d, 0xf1,
-    0x62, 0xc3, 0x30, 0xfe, 0x30, 0x8f, 0xc2, 0xf7, 0xfd, 0xfc, 0xf7, 0xde,
-    0x4b, 0x65, 0x8b, 0xe2, 0x29, 0x09, 0x62, 0xf4, 0x74, 0xf1, 0x62, 0xb0,
-    0xf0, 0x98, 0x8a, 0xff, 0x16, 0x75, 0x67, 0x47, 0x35, 0x62, 0xe2, 0x87,
-    0xcf, 0x61, 0x88, 0x2f, 0xff, 0xe0, 0x1d, 0xcc, 0x83, 0xfb, 0x8f, 0xf6,
-    0x1e, 0x76, 0xb1, 0x7f, 0xf6, 0xd3, 0xad, 0x34, 0x0c, 0x00, 0xf1, 0x62,
-    0xb1, 0x14, 0x8c, 0xbb, 0x58, 0x8f, 0x12, 0x86, 0x85, 0x2c, 0x5d, 0xc0,
-    0x2c, 0x5d, 0xdc, 0x30, 0xd2, 0x06, 0x19, 0x7a, 0x3c, 0xf8, 0xb1, 0x7f,
-    0xbc, 0xfa, 0x6f, 0xb1, 0xd6, 0x2f, 0xfa, 0x0f, 0x17, 0x70, 0xf8, 0x80,
-    0xb1, 0x7d, 0x9e, 0xfb, 0xca, 0x24, 0x3b, 0x20, 0x88, 0xce, 0x99, 0x30,
-    0x52, 0x85, 0xf5, 0xff, 0x6b, 0x4d, 0x03, 0x3a, 0x4c, 0x7a, 0xc5, 0x49,
-    0xf3, 0xe1, 0x3d, 0xe3, 0xbc, 0xac, 0x54, 0xa7, 0xe5, 0x08, 0xed, 0x98,
-    0x82, 0x8d, 0x64, 0x15, 0x76, 0x93, 0xa9, 0x5a, 0x05, 0x0f, 0x1e, 0x1a,
-    0xfa, 0x5d, 0xb5, 0xfe, 0xc0, 0xbc, 0x52, 0x7e, 0x2c, 0x5f, 0xb0, 0x9b,
-    0xdc, 0x58, 0xba, 0x1d, 0x16, 0x2f, 0xee, 0x7f, 0x09, 0xf8, 0xb1, 0x7f,
-    0x8b, 0x70, 0xfd, 0xc1, 0x0d, 0x62, 0xfe, 0xdc, 0x26, 0x22, 0x95, 0x8a,
-    0x82, 0x34, 0xc6, 0x4f, 0xa1, 0xa6, 0x2d, 0x23, 0x7b, 0xba, 0xfc, 0x58,
-    0xbe, 0x8b, 0xef, 0xa5, 0x8b, 0xe6, 0x18, 0x67, 0x58, 0xbb, 0x38, 0x61,
-    0xf2, 0x75, 0xa3, 0x90, 0x24, 0xa9, 0x65, 0x88, 0xe2, 0xc3, 0xd2, 0x15,
-    0xf4, 0xde, 0xd1, 0x83, 0x94, 0x2b, 0x2f, 0x89, 0x87, 0x2b, 0x16, 0xf2,
-    0xc5, 0x61, 0xb3, 0xea, 0x21, 0xbf, 0xfe, 0x16, 0xb0, 0x7f, 0x97, 0xf7,
-    0x1c, 0xa0, 0xb1, 0x7f, 0x61, 0x49, 0x0a, 0x56, 0x2f, 0xdf, 0x68, 0xb0,
-    0xeb, 0x16, 0xc1, 0x9e, 0xa6, 0xe5, 0x77, 0xc1, 0x37, 0xf8, 0xb1, 0x77,
-    0xc6, 0xb1, 0x4b, 0x15, 0xd9, 0xe4, 0x1c, 0x90, 0x21, 0x8b, 0xf6, 0x0c,
-    0xa7, 0xb5, 0x8b, 0xff, 0x77, 0xe9, 0xee, 0x1e, 0x04, 0xc1, 0x62, 0xfd,
-    0x2f, 0x06, 0xe2, 0xc5, 0x81, 0x87, 0xd3, 0xa4, 0x2b, 0xfd, 0xe2, 0x7e,
-    0xf8, 0x19, 0xd6, 0x2f, 0xd9, 0x14, 0x1b, 0x8b, 0x15, 0xf4, 0xc5, 0xca,
-    0x12, 0x3c, 0x27, 0xf1, 0xb5, 0xf9, 0x9b, 0xb8, 0x71, 0x62, 0xff, 0xf3,
-    0x85, 0x9e, 0xee, 0x19, 0xae, 0xe1, 0xc5, 0x8a, 0x95, 0x40, 0x2f, 0x1a,
-    0x46, 0x90, 0xbc, 0x53, 0x46, 0x46, 0x14, 0x5d, 0x2c, 0xfb, 0x4b, 0x41,
-    0x85, 0x74, 0x26, 0x3a, 0x7f, 0xae, 0x4b, 0xf6, 0x36, 0x79, 0x9f, 0x7a,
-    0xc1, 0x43, 0xb9, 0x52, 0x6f, 0x3b, 0xbb, 0x1f, 0x1b, 0x34, 0x52, 0xe8,
-    0xf5, 0x69, 0x43, 0x8f, 0x4f, 0xc0, 0xfd, 0x73, 0x18, 0xd1, 0xbd, 0x82,
-    0x70, 0x60, 0xad, 0x0b, 0x2f, 0x2b, 0x01, 0x3f, 0x56, 0xef, 0xe2, 0x9e,
-    0x1a, 0xe9, 0x4d, 0x43, 0x0a, 0x13, 0xb1, 0xc4, 0x61, 0xc2, 0x8f, 0xaa,
-    0x53, 0x8d, 0xf4, 0xf9, 0xfc, 0xb1, 0x7e, 0x9f, 0x43, 0x3e, 0xb1, 0x6d,
-    0x7c, 0xf2, 0x88, 0x8a, 0xf7, 0x24, 0x0b, 0x15, 0x87, 0x89, 0xe2, 0x7b,
-    0xa3, 0x6e, 0xbb, 0x58, 0xbf, 0xa7, 0xa3, 0x1b, 0xf7, 0x58, 0xbd, 0x84,
-    0xcb, 0x16, 0x33, 0x0f, 0x2c, 0xd3, 0x0b, 0xfc, 0x1f, 0x9f, 0xa4, 0x96,
-    0xeb, 0x14, 0xe7, 0xc0, 0x02, 0x9b, 0xff, 0x7f, 0x07, 0xfc, 0x62, 0xc8,
-    0xf5, 0x8b, 0x9f, 0xcb, 0x17, 0xde, 0x6f, 0xca, 0xc5, 0xe8, 0x16, 0x6e,
-    0x6e, 0x7b, 0x17, 0xbf, 0xf8, 0xb7, 0x35, 0xb9, 0x90, 0x92, 0xdd, 0x62,
-    0xfb, 0x06, 0xd0, 0x58, 0xb9, 0xf6, 0x58, 0xa0, 0x1b, 0xaf, 0x11, 0x56,
-    0x26, 0x9b, 0xdb, 0xcb, 0x99, 0x94, 0x20, 0x2f, 0xcf, 0x27, 0x61, 0xac,
-    0x5f, 0xec, 0xf9, 0x67, 0xbe, 0xeb, 0x17, 0x7b, 0x9f, 0x3d, 0x9f, 0x13,
-    0xdb, 0xa2, 0xc5, 0xfe, 0xf7, 0xf3, 0xda, 0xc0, 0x96, 0x2a, 0x3c, 0xf2,
-    0x48, 0x52, 0xf8, 0x7a, 0x68, 0x2c, 0x5b, 0xa9, 0x62, 0xff, 0xcf, 0x26,
-    0x96, 0x74, 0x7d, 0x32, 0xc5, 0xfe, 0x92, 0xfb, 0xf4, 0xc8, 0x96, 0x28,
-    0x8f, 0xd3, 0xc7, 0xf5, 0x1a, 0x22, 0xaa, 0x10, 0x89, 0xbd, 0xb6, 0x76,
-    0xb1, 0x5a, 0x3c, 0xc2, 0x2d, 0xbf, 0xcc, 0x17, 0xdf, 0x4d, 0x05, 0x8b,
-    0xf7, 0x32, 0x26, 0x8f, 0x58, 0xba, 0x7b, 0x58, 0xbf, 0x7e, 0x63, 0xf0,
-    0x6b, 0x14, 0xb1, 0x69, 0x19, 0xb7, 0x01, 0x5d, 0x41, 0x14, 0x31, 0xc5,
-    0x81, 0xa7, 0xdf, 0xd2, 0x42, 0x8a, 0x78, 0xb1, 0x7d, 0xf1, 0x4f, 0x16,
-    0x2f, 0x33, 0x01, 0x62, 0xe9, 0xe4, 0x9b, 0xfd, 0x11, 0xdf, 0xb7, 0xf4,
-    0xf7, 0xe5, 0x8a, 0xf9, 0xeb, 0x08, 0xae, 0xff, 0xdf, 0x72, 0x9e, 0xf8,
-    0xe7, 0x95, 0x8b, 0xdc, 0x9d, 0x2c, 0x5f, 0xff, 0xd9, 0xdf, 0x98, 0x7f,
-    0x9e, 0x63, 0xed, 0xb3, 0x76, 0xb1, 0x6e, 0x0d, 0x1b, 0x7b, 0x91, 0x76,
-    0x7c, 0x43, 0xb5, 0xb2, 0x7c, 0x5e, 0x8e, 0x7a, 0xa5, 0x73, 0xaf, 0x1d,
-    0xcd, 0x24, 0x78, 0xc6, 0x74, 0x42, 0xd0, 0xd5, 0x14, 0xa1, 0x6b, 0xd0,
-    0xf1, 0xd6, 0x2f, 0xe2, 0xc8, 0x41, 0xb8, 0xb1, 0x7f, 0x48, 0x7c, 0x1f,
-    0x67, 0x58, 0xad, 0xcf, 0x78, 0x8b, 0x6f, 0xdc, 0x3b, 0x36, 0xcb, 0x17,
-    0xc3, 0x90, 0xce, 0xb1, 0x5d, 0x9e, 0x6f, 0x0a, 0x6f, 0x6e, 0x6b, 0x2c,
-    0x5e, 0x00, 0x7e, 0x58, 0xbb, 0x19, 0x62, 0xfb, 0x3e, 0xda, 0x58, 0xac,
-    0x3d, 0x73, 0x8f, 0x90, 0xb5, 0x6e, 0x8a, 0x30, 0x9d, 0xae, 0xfe, 0xeb,
-    0x15, 0x89, 0x82, 0x34, 0x31, 0x83, 0x25, 0xb8, 0x6e, 0xb1, 0x7d, 0xdf,
-    0x27, 0xb5, 0x8b, 0x9a, 0x06, 0x1b, 0xc7, 0x17, 0xbc, 0x6f, 0xdd, 0x62,
-    0xff, 0xda, 0x9e, 0x9f, 0x97, 0xd3, 0xc4, 0xb1, 0x7e, 0xcd, 0x0a, 0x40,
-    0xb1, 0x51, 0x1f, 0x49, 0x20, 0xdb, 0x65, 0x8b, 0xc0, 0xd3, 0xac, 0x54,
-    0x11, 0xb3, 0xdc, 0x21, 0xd8, 0x88, 0x84, 0xef, 0xa3, 0x9b, 0x3e, 0xb1,
-    0x7f, 0xff, 0xa4, 0x2f, 0xb7, 0xb9, 0x9a, 0x29, 0xee, 0x19, 0xdf, 0x96,
-    0x2f, 0xb3, 0xdc, 0x65, 0x8b, 0x0f, 0x48, 0x85, 0xfb, 0x1d, 0xfe, 0xe1,
-    0x61, 0xd9, 0xb6, 0x58, 0xa8, 0x26, 0x0c, 0xd0, 0xaa, 0x11, 0x4d, 0xfd,
-    0xcc, 0x1b, 0xf3, 0x65, 0x8b, 0xd0, 0x90, 0x2c, 0x5e, 0xfb, 0x81, 0x62,
-    0xfa, 0x28, 0x4c, 0x7a, 0x45, 0x44, 0x78, 0x81, 0x8e, 0xd4, 0xb3, 0x7b,
-    0xb6, 0x21, 0x1c, 0x33, 0xf2, 0x36, 0xe3, 0x67, 0x61, 0x77, 0x76, 0x77,
-    0xcd, 0x46, 0xe7, 0xf7, 0x16, 0x8c, 0x14, 0xa3, 0x47, 0xe1, 0xaf, 0x8b,
-    0xc3, 0x61, 0xbf, 0x87, 0xa6, 0xdd, 0xb7, 0x58, 0xbf, 0xff, 0xee, 0xba,
-    0xed, 0x31, 0xa1, 0xe7, 0xae, 0xb1, 0xb4, 0x6b, 0xf6, 0xc0, 0x30, 0xcf,
-    0xc7, 0x2c, 0x5b, 0x75, 0x8b, 0xff, 0x10, 0x98, 0x3c, 0xe3, 0xc9, 0x2c,
-    0x5f, 0xa1, 0xcf, 0x74, 0x02, 0xc5, 0x1a, 0x7d, 0x3d, 0x9e, 0xdf, 0x00,
-    0xed, 0x05, 0x8b, 0x9c, 0x6b, 0x15, 0xc3, 0x75, 0x1c, 0x47, 0x7f, 0x8d,
-    0xfb, 0x43, 0x52, 0x6a, 0xc5, 0x69, 0x17, 0x07, 0x5e, 0x22, 0x4b, 0xf1,
-    0x67, 0x46, 0xd2, 0xc5, 0xff, 0x41, 0xfe, 0xce, 0x39, 0x25, 0x8a, 0x30,
-    0xf8, 0x24, 0xa6, 0xf4, 0xb6, 0x96, 0x2f, 0x8d, 0xce, 0x3a, 0xc5, 0xc5,
-    0xba, 0xc5, 0xff, 0xba, 0x9f, 0x6d, 0x64, 0x97, 0x1d, 0x62, 0xfc, 0x1f,
-    0xbc, 0x2f, 0xac, 0x51, 0x88, 0xa7, 0x72, 0x32, 0x18, 0xe8, 0x83, 0x7f,
-    0x1f, 0xdf, 0x9e, 0x92, 0xb1, 0x7f, 0xe8, 0xf3, 0x37, 0xfb, 0xe9, 0xe4,
-    0xeb, 0x17, 0x8b, 0x70, 0x2c, 0x5f, 0x0c, 0x12, 0x4b, 0x17, 0xb3, 0xbf,
-    0x2c, 0x56, 0xc8, 0xa2, 0xc4, 0x46, 0x1e, 0xe8, 0x45, 0x7d, 0x9d, 0x80,
-    0x96, 0x2f, 0xe8, 0x4f, 0xbe, 0xd0, 0x58, 0xa2, 0x3d, 0x1f, 0x11, 0xdf,
-    0xfb, 0xc2, 0x3f, 0xe5, 0xc9, 0x86, 0xb1, 0x7f, 0xfd, 0x81, 0x18, 0x37,
-    0xce, 0xe1, 0xc2, 0x6d, 0x96, 0x2f, 0xa1, 0x06, 0xf2, 0xc5, 0x6c, 0x8d,
-    0x5e, 0xc8, 0x7e, 0x7c, 0xca, 0x77, 0x81, 0xf1, 0x2c, 0x5f, 0x1b, 0xa6,
-    0x09, 0x62, 0xed, 0xbe, 0xb1, 0x76, 0xfd, 0x16, 0x2c, 0x1a, 0xa4, 0x05,
-    0x2d, 0xe5, 0x60, 0x28, 0x54, 0x9f, 0x9e, 0x86, 0x7c, 0x36, 0x11, 0x05,
-    0x62, 0x35, 0x1e, 0x13, 0x17, 0xdb, 0x79, 0x86, 0xb1, 0x7d, 0x3b, 0x82,
-    0x3d, 0x62, 0xdb, 0xb9, 0xe5, 0xfc, 0x92, 0xfe, 0xfc, 0xff, 0x3b, 0xf2,
-    0xc5, 0xe6, 0x9e, 0xd6, 0x2f, 0xf0, 0xb8, 0x19, 0x67, 0x70, 0x58, 0xb7,
-    0x51, 0x87, 0xa7, 0xf1, 0xdb, 0xf9, 0xfa, 0xfd, 0xff, 0x21, 0x2c, 0x5f,
-    0xef, 0xb8, 0x71, 0x80, 0x04, 0xa4, 0x56, 0x8f, 0xb6, 0x38, 0xd6, 0xf7,
-    0x27, 0x65, 0x8b, 0xff, 0xe3, 0x5b, 0xd0, 0x71, 0xf3, 0xf9, 0x85, 0xba,
-    0xc5, 0x61, 0xf7, 0xf0, 0x7a, 0xfe, 0xce, 0x3f, 0xa7, 0xb5, 0x8b, 0x9b,
-    0x65, 0x8b, 0xa4, 0x0b, 0x17, 0x61, 0xd8, 0xd7, 0x86, 0x31, 0x7e, 0x9d,
-    0xff, 0x3a, 0x58, 0xbf, 0x34, 0xea, 0x4d, 0x58, 0xbf, 0x7d, 0xb9, 0x38,
-    0xb1, 0x7b, 0xe2, 0x35, 0x62, 0xf7, 0x57, 0x5f, 0xc5, 0x8b, 0xcc, 0x77,
-    0x58, 0xa3, 0x11, 0x11, 0xf2, 0x72, 0x1f, 0x11, 0x35, 0xe0, 0xe4, 0x0b,
-    0x15, 0xb2, 0xbb, 0x53, 0x4a, 0x3b, 0x84, 0x13, 0xc2, 0x67, 0x50, 0x94,
-    0xf9, 0x09, 0x2e, 0xf8, 0xb0, 0x22, 0x90, 0xe1, 0x61, 0xd4, 0x7b, 0x76,
-    0x09, 0x62, 0xff, 0xd0, 0xf8, 0x7a, 0x91, 0xff, 0x02, 0x58, 0xbf, 0x7e,
-    0x45, 0xdb, 0xac, 0x51, 0xa8, 0x82, 0xec, 0x5c, 0xe8, 0x57, 0xef, 0x1f,
-    0x91, 0xbc, 0x6b, 0x58, 0xbf, 0xfc, 0x77, 0xd4, 0x38, 0x26, 0x72, 0xce,
-    0x2c, 0x5f, 0xf1, 0x00, 0x7f, 0x60, 0xf3, 0x65, 0x8b, 0xf6, 0x0b, 0xaf,
-    0xce, 0x2c, 0x53, 0x9f, 0x47, 0xce, 0xef, 0xb0, 0x9c, 0x25, 0x8b, 0xff,
-    0x8d, 0x66, 0x20, 0x10, 0x9b, 0xbe, 0xb1, 0x62, 0xbb, 0x3e, 0xc2, 0x22,
-    0xbf, 0xef, 0x73, 0x3c, 0x52, 0x7e, 0x2c, 0x5f, 0xa4, 0x0c, 0x40, 0x58,
-    0xbf, 0x0b, 0xbf, 0x38, 0x4b, 0x16, 0xf1, 0x88, 0x8b, 0x81, 0xcf, 0x09,
-    0xeb, 0x11, 0xc8, 0x50, 0xad, 0xbf, 0xe2, 0xcd, 0x0f, 0xf3, 0xdc, 0x16,
-    0x2f, 0xff, 0x49, 0xc4, 0xc3, 0xf7, 0x7b, 0xb9, 0x04, 0xb1, 0x6c, 0x24,
-    0x43, 0x84, 0x75, 0x7f, 0xff, 0xd9, 0xa1, 0xfe, 0x7b, 0xe1, 0x64, 0x4e,
-    0x22, 0xdb, 0x37, 0x58, 0xbf, 0xfe, 0x16, 0xc1, 0x9f, 0x8f, 0xbb, 0xec,
-    0x13, 0x76, 0xb1, 0x7f, 0x7d, 0xf8, 0xda, 0x82, 0xc5, 0xf3, 0xe6, 0xa2,
-    0x58, 0xb7, 0x7b, 0x9e, 0x8f, 0xcb, 0xa9, 0xd1, 0xa4, 0xd0, 0xa8, 0xbf,
-    0xf7, 0x7e, 0xdf, 0xee, 0x3f, 0xe6, 0xcb, 0x17, 0xf3, 0xf7, 0xcf, 0xb8,
-    0x4b, 0x16, 0xeb, 0xd6, 0x28, 0x07, 0x8e, 0x46, 0x15, 0x88, 0xab, 0xd4,
-    0x22, 0xaf, 0xe6, 0xe6, 0x61, 0x1a, 0xb1, 0x58, 0x7a, 0x82, 0x27, 0xbc,
-    0xcc, 0x12, 0xc5, 0x4a, 0xb7, 0x31, 0xc2, 0xb5, 0xca, 0x35, 0x19, 0xdf,
-    0xe3, 0x25, 0x22, 0x1b, 0xff, 0xf3, 0x31, 0x00, 0xf3, 0xdc, 0x07, 0xf9,
-    0x2d, 0xd6, 0x2f, 0xff, 0xe7, 0x62, 0xc9, 0xfb, 0x3f, 0x1e, 0x18, 0x40,
-    0x58, 0xbe, 0xc3, 0xb8, 0xd6, 0x2f, 0xfd, 0xa0, 0xfd, 0xcf, 0xce, 0xc4,
-    0x25, 0x8b, 0xfc, 0xd1, 0xe6, 0x9b, 0x3e, 0xe2, 0xc5, 0xb8, 0x62, 0x27,
-    0x70, 0x88, 0x34, 0x2a, 0x3a, 0x65, 0x5e, 0x87, 0x9d, 0xff, 0x36, 0xa2,
-    0x29, 0x07, 0x04, 0xb1, 0x52, 0x7c, 0x63, 0x29, 0xbf, 0x7b, 0x04, 0x5e,
-    0x58, 0xbf, 0x43, 0x81, 0xcc, 0x7a, 0xc5, 0xa7, 0x0f, 0x55, 0x8a, 0x2f,
-    0xfc, 0x61, 0x31, 0xa6, 0x70, 0x00, 0x95, 0x8b, 0xff, 0xe0, 0x49, 0x6f,
-    0xbf, 0xdf, 0xbd, 0xc5, 0x3a, 0x58, 0xbf, 0xc2, 0x62, 0xde, 0x13, 0xb2,
-    0xc5, 0xfe, 0x83, 0xf3, 0x93, 0xa8, 0x2c, 0x5e, 0xd8, 0x40, 0xc4, 0x5e,
-    0x81, 0x53, 0x86, 0xb6, 0x73, 0x53, 0x41, 0xd4, 0x3f, 0xee, 0x17, 0x16,
-    0x2f, 0xf3, 0x6a, 0x79, 0x9d, 0xf9, 0x62, 0xd1, 0xb2, 0xc5, 0xff, 0xf0,
-    0xdf, 0x85, 0x9d, 0xee, 0xfd, 0xe7, 0x7e, 0x58, 0xb4, 0x20, 0x7d, 0x58,
-    0x2f, 0x7e, 0xef, 0x92, 0x5e, 0x58, 0xad, 0x1e, 0x87, 0xc9, 0xe8, 0xe9,
-    0x94, 0x7c, 0x61, 0xa1, 0xdd, 0x50, 0x55, 0xe5, 0xc8, 0xd9, 0xbd, 0x1a,
-    0xbd, 0xff, 0xb7, 0xfb, 0xc7, 0xef, 0xf9, 0x17, 0x6b, 0x17, 0xff, 0xf8,
-    0x7f, 0x9d, 0xfe, 0xf1, 0x33, 0x40, 0xd6, 0x0d, 0xa3, 0xd6, 0x2f, 0xff,
-    0xfd, 0xf6, 0x7e, 0x3c, 0x30, 0x7e, 0xfc, 0xbe, 0xb4, 0xe5, 0xb2, 0xc5,
-    0xf1, 0x67, 0x4c, 0x58, 0xad, 0x91, 0xea, 0x76, 0x70, 0x9a, 0xee, 0xda,
-    0x34, 0x58, 0xbf, 0x9e, 0x28, 0x49, 0x41, 0x62, 0x9c, 0xf3, 0x3e, 0x3d,
-    0x7f, 0xdb, 0x7c, 0x46, 0xe7, 0x49, 0xed, 0x62, 0xff, 0xfe, 0x9f, 0x70,
-    0x32, 0xf7, 0xc4, 0xd0, 0xf7, 0x30, 0x25, 0x8b, 0xff, 0x4e, 0xd9, 0xe8,
-    0x61, 0x38, 0xd6, 0x2f, 0xff, 0xb4, 0xcd, 0xdc, 0x39, 0xee, 0xf7, 0x7d,
-    0x1a, 0xb1, 0x7f, 0x41, 0x9c, 0xa6, 0x0b, 0x17, 0xf8, 0xed, 0xdb, 0xcf,
-    0x7e, 0x58, 0xa9, 0x3e, 0x1c, 0x2c, 0xb3, 0x6c, 0x8d, 0x68, 0x42, 0xda,
-    0xfc, 0x06, 0xf7, 0xdd, 0x62, 0xfe, 0x66, 0x0a, 0x37, 0xeb, 0x91, 0xa2,
-    0xc5, 0xfd, 0x9f, 0xf3, 0xcc, 0x7a, 0xc5, 0x82, 0x19, 0xf7, 0xf8, 0xfe,
-    0xa5, 0x18, 0x0d, 0x09, 0x7b, 0xff, 0x48, 0x5c, 0xeb, 0x5b, 0x7c, 0xef,
-    0xcb, 0x15, 0x2a, 0xea, 0xf7, 0x7e, 0x72, 0x1d, 0x1f, 0xfd, 0x79, 0xa3,
-    0x14, 0x28, 0x77, 0x78, 0x9a, 0xff, 0x6a, 0x7d, 0xcf, 0x66, 0x96, 0x2f,
-    0x66, 0x79, 0x62, 0xfd, 0xcf, 0x89, 0xa1, 0x11, 0xe8, 0x7c, 0xd2, 0xfa,
-    0x1f, 0xcd, 0x96, 0x2f, 0xf9, 0xcb, 0x0f, 0x1d, 0x8f, 0xda, 0xc5, 0xff,
-    0xfe, 0x63, 0x96, 0x77, 0x3a, 0xd3, 0xf4, 0xd6, 0x79, 0xbb, 0x58, 0xa1,
-    0xa2, 0x7b, 0x87, 0x77, 0xff, 0xf0, 0xe1, 0xcd, 0x67, 0x9b, 0xb8, 0x98,
-    0x39, 0xf7, 0x16, 0x2f, 0xff, 0xec, 0xf3, 0x77, 0xff, 0xbc, 0xfb, 0xf9,
-    0xd2, 0x74, 0xb1, 0x7f, 0xff, 0xec, 0xd6, 0x6f, 0xf9, 0xe3, 0x6b, 0x07,
-    0xf6, 0x7e, 0x39, 0xd6, 0x2f, 0xff, 0xf4, 0xb4, 0xb9, 0x37, 0xa0, 0xfd,
-    0x35, 0x9e, 0x6e, 0xd6, 0x2a, 0x53, 0xaa, 0x81, 0x1e, 0x97, 0xf8, 0xbb,
-    0x1c, 0xd7, 0x79, 0x9b, 0xa9, 0x62, 0xe9, 0x39, 0x87, 0xd8, 0x74, 0xdb,
-    0xe7, 0xdb, 0x78, 0x2c, 0x5f, 0xfc, 0x03, 0x22, 0x80, 0x8b, 0xcd, 0x0c,
-    0x58, 0xbb, 0x3a, 0x96, 0x29, 0x8f, 0x84, 0x91, 0xef, 0xfa, 0x7b, 0x3b,
-    0x7b, 0x3b, 0xf2, 0xc5, 0xff, 0x73, 0x08, 0x23, 0x02, 0xdb, 0x65, 0x8b,
-    0x9b, 0x65, 0x8a, 0xc5, 0xc7, 0xee, 0xd0, 0x1e, 0x56, 0xc6, 0x8b, 0x9a,
-    0x10, 0xc4, 0x41, 0xe3, 0xb0, 0x8f, 0xef, 0x7d, 0xb8, 0xb1, 0x6e, 0xd6,
-    0x2f, 0xef, 0x96, 0x7a, 0x40, 0xb1, 0x52, 0x7b, 0xa3, 0x1d, 0x61, 0x3b,
-    0xfc, 0x76, 0xe1, 0x4e, 0x1a, 0xb1, 0x61, 0x2c, 0x5f, 0xf0, 0x85, 0xf7,
-    0xf7, 0xda, 0x0b, 0x17, 0xa1, 0x9e, 0x58, 0xbe, 0x6f, 0xe6, 0x96, 0x2b,
-    0xe6, 0xff, 0xa0, 0xed, 0xf8, 0x5f, 0xd4, 0x84, 0xb1, 0x74, 0x73, 0x2c,
-    0x51, 0x89, 0xa9, 0x61, 0x69, 0xa6, 0x67, 0x12, 0x67, 0x9f, 0x11, 0x86,
-    0x55, 0x7f, 0xe3, 0x47, 0xf6, 0x39, 0xc4, 0x43, 0x58, 0xad, 0xd1, 0x4e,
-    0x4c, 0xd7, 0xbc, 0x52, 0xb1, 0x7f, 0xff, 0x49, 0x6e, 0xc4, 0x03, 0x33,
-    0xef, 0xbc, 0x9d, 0xd6, 0x2a, 0x51, 0x34, 0xe4, 0x67, 0x1c, 0xbf, 0xfd,
-    0x9a, 0x87, 0x18, 0xb0, 0x64, 0xd0, 0x58, 0xbb, 0xaf, 0xe2, 0xc5, 0xfb,
-    0x98, 0x3f, 0xba, 0xc5, 0xfc, 0xec, 0x0f, 0x37, 0x6b, 0x14, 0xe7, 0xad,
-    0xf2, 0x8a, 0x24, 0x4a, 0x79, 0xce, 0xfa, 0x1f, 0x7e, 0x8b, 0x17, 0xff,
-    0xb3, 0x82, 0xdf, 0xef, 0xdf, 0x1f, 0xb0, 0x2c, 0x5f, 0xfe, 0x1e, 0xb1,
-    0xcd, 0x2c, 0xf7, 0x85, 0xb2, 0xc5, 0xe9, 0x2f, 0x18, 0x8e, 0x17, 0x22,
-    0x22, 0x5e, 0x27, 0x5d, 0xa6, 0x58, 0xbf, 0xfb, 0xa3, 0xf3, 0x98, 0x5b,
-    0xb1, 0x01, 0x62, 0xff, 0x7d, 0xc6, 0x3c, 0x0a, 0x25, 0x8b, 0xcf, 0xdf,
-    0x16, 0x2f, 0xd9, 0xd3, 0x21, 0xd7, 0xac, 0x51, 0xa7, 0x9b, 0xf1, 0xeb,
-    0x03, 0x11, 0xd9, 0xba, 0x37, 0xa1, 0x07, 0x7c, 0x1f, 0xdb, 0xcb, 0x15,
-    0xa3, 0xdf, 0x39, 0xdd, 0xff, 0xf0, 0x39, 0xef, 0xe7, 0xbe, 0xd0, 0xdb,
-    0x02, 0x58, 0xa9, 0x3f, 0x57, 0x22, 0xbf, 0xda, 0xc3, 0x27, 0xa3, 0x7d,
-    0x62, 0xfd, 0xee, 0x31, 0x1a, 0xb1, 0x58, 0x7b, 0xe1, 0x1b, 0x52, 0xc5,
-    0x49, 0xae, 0x39, 0x15, 0xfe, 0x6c, 0xfb, 0xef, 0xfc, 0x58, 0xa9, 0x5c,
-    0xe0, 0x78, 0xef, 0x74, 0x99, 0xf8, 0xf5, 0xca, 0x15, 0xa1, 0x10, 0x5f,
-    0xff, 0x07, 0xaf, 0xb1, 0x9c, 0x2c, 0xd8, 0xf8, 0x75, 0x8b, 0xf7, 0x9c,
-    0xed, 0x05, 0x8b, 0xcd, 0xdf, 0x0c, 0x3f, 0xbc, 0x53, 0xbb, 0xee, 0xb1,
-    0x6f, 0x2c, 0x50, 0x0f, 0x77, 0x86, 0x81, 0x8b, 0xdf, 0xff, 0x13, 0x67,
-    0xdf, 0x5f, 0x61, 0x7f, 0x0e, 0xb1, 0x7f, 0xd9, 0xc7, 0x1c, 0x94, 0x81,
-    0x62, 0xff, 0xdb, 0xfd, 0x8b, 0xdc, 0x39, 0x4a, 0xc5, 0xc6, 0xc1, 0x62,
-    0xff, 0x4e, 0x80, 0x36, 0x63, 0x56, 0x2b, 0x0f, 0x37, 0xe3, 0x37, 0xef,
-    0xbe, 0xff, 0xc3, 0x11, 0xc9, 0xc3, 0x7f, 0x42, 0x32, 0xfe, 0xf4, 0xef,
-    0x0e, 0x4a, 0xc5, 0x0d, 0x3b, 0x4c, 0x8c, 0xcb, 0xb5, 0x3b, 0xfc, 0xc5,
-    0xe8, 0xb3, 0x58, 0xb1, 0x7f, 0xff, 0xda, 0x34, 0x7f, 0x9e, 0x7f, 0x3b,
-    0x87, 0x9e, 0x29, 0xe0, 0x96, 0x2f, 0xfe, 0x7f, 0xb1, 0xc3, 0x91, 0xeb,
-    0x52, 0xb1, 0x4c, 0x8b, 0x0f, 0x35, 0xd6, 0x26, 0x79, 0xf3, 0x76, 0x87,
-    0x1d, 0xf1, 0x7b, 0x3e, 0xb1, 0x7f, 0xf1, 0x64, 0x76, 0x6a, 0x5e, 0x12,
-    0x6a, 0xc5, 0xff, 0xfb, 0xf3, 0xdc, 0x0b, 0x0f, 0x9f, 0x7d, 0x3f, 0x6b,
-    0x17, 0xff, 0xc5, 0x9d, 0x07, 0x3a, 0x98, 0x3e, 0xed, 0xa5, 0x8a, 0x94,
-    0xc3, 0xe0, 0x44, 0x34, 0x6f, 0x2b, 0x5e, 0x9e, 0xf8, 0xb1, 0x7e, 0x61,
-    0xcf, 0x7c, 0x58, 0xa7, 0x44, 0x27, 0xcf, 0x42, 0x1e, 0xbf, 0x98, 0x78,
-    0x4f, 0xe5, 0x8b, 0xee, 0x63, 0x92, 0xc5, 0x1a, 0x79, 0xbd, 0x96, 0x5e,
-    0x33, 0x78, 0x96, 0x2b, 0x0f, 0x14, 0x89, 0x2f, 0xfe, 0x9d, 0xf3, 0x59,
-    0xf7, 0xd7, 0xd9, 0x62, 0xfe, 0x1b, 0xe6, 0xa6, 0x25, 0x8b, 0xef, 0x38,
-    0xb7, 0x58, 0xbf, 0xf9, 0x83, 0x2c, 0xcf, 0xbe, 0xff, 0xc5, 0x8a, 0x93,
-    0xe8, 0x11, 0x25, 0xd2, 0x7d, 0x23, 0xed, 0x91, 0x0a, 0x12, 0xd7, 0x6b,
-    0x65, 0x8b, 0x44, 0x47, 0xae, 0x23, 0xeb, 0xff, 0xda, 0x04, 0x76, 0x6a,
-    0x60, 0xfd, 0xfb, 0x16, 0x2f, 0xfc, 0x11, 0x60, 0xfe, 0x2d, 0x88, 0x25,
-    0x8a, 0x64, 0x48, 0x12, 0x75, 0xfe, 0xff, 0xdb, 0x6d, 0x4f, 0x45, 0x8b,
-    0xc3, 0xf3, 0xac, 0x56, 0x1e, 0xa7, 0x0d, 0xef, 0xec, 0xe8, 0xe4, 0x52,
-    0xb1, 0x7f, 0x8b, 0xdf, 0x68, 0x4e, 0xcb, 0x17, 0xfe, 0xf0, 0x70, 0xe4,
-    0x50, 0x9d, 0x6c, 0xb1, 0x58, 0x7f, 0x1d, 0x9a, 0x5f, 0xf6, 0xa7, 0xda,
-    0xd4, 0x9f, 0x8b, 0x17, 0xff, 0xd0, 0x7f, 0x07, 0xa9, 0xfc, 0xfb, 0x8d,
-    0xda, 0xc5, 0xff, 0xd2, 0x14, 0xea, 0x7f, 0x2e, 0x5b, 0x2c, 0x5f, 0x85,
-    0xcf, 0xb4, 0x0c, 0x4e, 0xe0, 0x64, 0x39, 0x0a, 0x58, 0x88, 0xb8, 0x74,
-    0x1a, 0x95, 0xfd, 0x09, 0x32, 0x4e, 0x75, 0x8b, 0xf6, 0x75, 0x3c, 0xc4,
-    0xb1, 0x68, 0xd1, 0x62, 0xf9, 0x81, 0x85, 0x27, 0xe3, 0xf2, 0xfe, 0x15,
-    0xdf, 0xe3, 0x71, 0xf7, 0xdf, 0x3a, 0x2c, 0x5f, 0xfe, 0xe9, 0xf7, 0x1e,
-    0x39, 0xae, 0x59, 0xd1, 0x62, 0xfb, 0x81, 0xce, 0xeb, 0x17, 0xff, 0xfc,
-    0x1f, 0x8b, 0x00, 0xc4, 0x01, 0xfe, 0x74, 0xf3, 0xdf, 0x96, 0x28, 0xd4,
-    0x46, 0x68, 0x96, 0xfd, 0x38, 0x5e, 0x8e, 0x58, 0xbf, 0x9f, 0xb0, 0x69,
-    0x86, 0xb1, 0x7f, 0xfb, 0xa1, 0x67, 0x0c, 0xc2, 0x14, 0x33, 0x8b, 0x14,
-    0xb1, 0x58, 0x7b, 0x07, 0x4c, 0xa3, 0xa3, 0x4b, 0xe5, 0x45, 0x08, 0x7b,
-    0xf7, 0xe7, 0x5c, 0x75, 0x8b, 0x47, 0xac, 0x5d, 0x84, 0xb1, 0x5a, 0x35,
-    0x7f, 0x15, 0xbc, 0xf3, 0x05, 0x8b, 0xd0, 0x10, 0xd6, 0x2d, 0xd9, 0x88,
-    0xe2, 0x19, 0xa4, 0x4a, 0x7f, 0x21, 0x61, 0xca, 0x95, 0x67, 0x78, 0x70,
-    0xf0, 0xd9, 0x68, 0xf6, 0x2f, 0xe2, 0x0d, 0xa1, 0x83, 0x58, 0xbf, 0xf8,
-    0xed, 0x0f, 0xe0, 0x18, 0x3e, 0xc2, 0x58, 0xa6, 0x3f, 0x60, 0x17, 0x54,
-    0xb2, 0x67, 0xf2, 0x37, 0x27, 0x85, 0xc6, 0xa5, 0x16, 0x94, 0x3b, 0x79,
-    0x2d, 0xf8, 0x50, 0xbc, 0xbf, 0x9f, 0x51, 0xb7, 0x3c, 0xeb, 0x17, 0x42,
-    0x56, 0x2f, 0xee, 0x9e, 0x29, 0x3f, 0x16, 0x2f, 0xc5, 0x3f, 0xc1, 0xac,
-    0x5f, 0xfd, 0xc9, 0x06, 0x7d, 0xf4, 0xc1, 0x79, 0x62, 0xdb, 0x0c, 0xfb,
-    0x38, 0x4f, 0x4e, 0x8c, 0x52, 0x84, 0xe5, 0x41, 0x30, 0x2c, 0x86, 0xe5,
-    0xfc, 0x3c, 0x23, 0x75, 0x2b, 0x17, 0xf9, 0x98, 0xf8, 0x2d, 0x6c, 0xb1,
-    0x7f, 0xff, 0x61, 0x0b, 0x93, 0x9a, 0x00, 0x7e, 0xd3, 0x8b, 0x75, 0x8b,
-    0xfb, 0x40, 0xcd, 0x31, 0x7d, 0x12, 0x3c, 0x34, 0xb7, 0x6b, 0x15, 0x27,
-    0xaf, 0x1c, 0x89, 0x7f, 0x9f, 0x67, 0xdf, 0xf3, 0xe5, 0x8b, 0xfe, 0x7d,
-    0xdc, 0x7e, 0xe4, 0x9a, 0xb1, 0x67, 0xd1, 0xf8, 0x78, 0xd6, 0xb6, 0x76,
-    0x4d, 0xd0, 0x85, 0x88, 0xe7, 0x39, 0x0d, 0x67, 0xde, 0x3e, 0x3e, 0xe5,
-    0xb4, 0x47, 0x9f, 0x45, 0x39, 0xcd, 0xa9, 0xd4, 0x93, 0xcb, 0x6e, 0xfc,
-    0xe8, 0x70, 0x23, 0x41, 0x29, 0x64, 0x1c, 0x8f, 0x1f, 0xd4, 0xa6, 0x1e,
-    0x90, 0x87, 0x0a, 0x33, 0x58, 0xe2, 0x80, 0xe3, 0x16, 0xea, 0x84, 0xa5,
-    0xed, 0xff, 0x12, 0xc5, 0xfb, 0xef, 0x1c, 0xfa, 0x58, 0xbd, 0xb0, 0x82,
-    0x58, 0xad, 0xcf, 0x2d, 0x8a, 0xef, 0xfd, 0xbf, 0xe7, 0xb8, 0x6f, 0xfc,
-    0x1a, 0xc5, 0xfd, 0xbf, 0xe7, 0xb8, 0x7d, 0x62, 0xee, 0xbf, 0xa9, 0x62,
-    0xce, 0xb1, 0x79, 0xcf, 0x8b, 0x17, 0x49, 0xab, 0x15, 0x04, 0x7d, 0x8c,
-    0x88, 0xd4, 0x3e, 0xcc, 0x5c, 0x83, 0x42, 0x21, 0x0e, 0x5f, 0xf1, 0x60,
-    0x5a, 0xcd, 0xff, 0x8b, 0x17, 0xff, 0xfe, 0x7d, 0xb8, 0x29, 0x30, 0xb3,
-    0xef, 0x25, 0xe3, 0x45, 0x3a, 0x58, 0xbf, 0xff, 0x4e, 0xde, 0x11, 0xf3,
-    0x9b, 0xfe, 0x4a, 0x78, 0xb1, 0x5a, 0x46, 0x27, 0xdb, 0x6f, 0xee, 0xe1,
-    0xbf, 0xdf, 0x65, 0x8b, 0x6e, 0xb1, 0x7f, 0xfd, 0x07, 0x0b, 0xdf, 0xcf,
-    0xe7, 0x70, 0x60, 0x96, 0x2f, 0xec, 0xf7, 0x36, 0xc0, 0x96, 0x2a, 0x24,
-    0x41, 0xe9, 0x4e, 0xf0, 0x7a, 0x95, 0x8b, 0xff, 0xfb, 0x07, 0xf9, 0x08,
-    0xb1, 0xf6, 0x8e, 0x17, 0xdf, 0x4b, 0x15, 0xb2, 0xa8, 0xa1, 0xc3, 0xfb,
-    0x08, 0xe3, 0xcc, 0xb5, 0x09, 0x66, 0x24, 0x21, 0xea, 0x97, 0x74, 0xc3,
-    0x91, 0x9b, 0x76, 0x64, 0xf6, 0xca, 0x8e, 0x28, 0xe3, 0xda, 0x36, 0x61,
-    0x4a, 0xf0, 0xb7, 0x6b, 0x17, 0xd3, 0xbb, 0xee, 0xb1, 0x7b, 0x4e, 0x12,
-    0xc5, 0xfe, 0xd0, 0xb6, 0x78, 0x1c, 0x6b, 0x17, 0xfb, 0x99, 0xa1, 0x93,
-    0x41, 0x62, 0x86, 0x88, 0x7d, 0x0f, 0x70, 0xda, 0xe1, 0x44, 0xb1, 0x7e,
-    0x97, 0x3e, 0x71, 0x62, 0xfd, 0x30, 0x8e, 0xd8, 0x96, 0x28, 0xe7, 0xd9,
-    0xf1, 0x9f, 0x13, 0xdf, 0xc4, 0x2e, 0x3e, 0x69, 0x62, 0xfc, 0x58, 0x01,
-    0x71, 0x62, 0xfa, 0x2f, 0xe1, 0xd6, 0x28, 0xc3, 0xcc, 0x0c, 0xa2, 0xb1,
-    0x13, 0xac, 0xf3, 0x7b, 0xf8, 0x05, 0x8b, 0x4a, 0xc5, 0xff, 0xf4, 0x4c,
-    0xd0, 0xe4, 0x9c, 0x7f, 0x92, 0xdd, 0x62, 0xfe, 0x83, 0xf8, 0xa7, 0x16,
-    0x2f, 0xff, 0xfa, 0x7d, 0xcc, 0xd4, 0xe1, 0x7c, 0x3d, 0x44, 0xcc, 0x5b,
-    0x2c, 0x54, 0xa3, 0xd5, 0xc4, 0x74, 0xa3, 0xe2, 0xcb, 0xfe, 0x16, 0xf9,
-    0xad, 0xb6, 0x16, 0xcb, 0x17, 0xfd, 0x91, 0x42, 0x7b, 0xce, 0xfc, 0xb1,
-    0x7f, 0xef, 0xc9, 0xf9, 0xe2, 0x60, 0x71, 0x62, 0xdf, 0x58, 0xbd, 0xf0,
-    0xce, 0xb1, 0x43, 0x36, 0x38, 0x25, 0x46, 0x2a, 0x79, 0x92, 0x1c, 0x8c,
-    0x48, 0xe7, 0x64, 0x7f, 0xc3, 0xcf, 0x38, 0x5f, 0xff, 0x6f, 0xf9, 0xee,
-    0x1c, 0x7e, 0x67, 0xf3, 0x75, 0x8b, 0xdb, 0x3f, 0x6b, 0x17, 0xa1, 0x3e,
-    0x58, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0x7c, 0x6b, 0x17, 0x31, 0x2c, 0x54,
-    0xae, 0x47, 0xed, 0x2d, 0x17, 0x1a, 0x9d, 0x4e, 0x21, 0xf2, 0x1d, 0xe1,
-    0x18, 0x43, 0x14, 0x62, 0xf3, 0x1c, 0x04, 0xc7, 0x0a, 0xbd, 0x4e, 0x95,
-    0xdf, 0x0f, 0xe2, 0xd9, 0x62, 0xfe, 0x68, 0x66, 0xc2, 0x25, 0x8b, 0xb0,
-    0x6b, 0x14, 0x33, 0xc5, 0xdc, 0xba, 0xff, 0xda, 0xc8, 0xf8, 0xbe, 0xc7,
-    0x7e, 0x2c, 0x5f, 0xda, 0x70, 0xbf, 0x23, 0x58, 0xbf, 0xbc, 0xe1, 0x1d,
-    0xfc, 0xb1, 0x7f, 0xcc, 0x5a, 0xc7, 0xfc, 0x8d, 0x62, 0xd9, 0xa4, 0x4a,
-    0xf8, 0xbf, 0xa8, 0xbe, 0xdb, 0x4a, 0x73, 0xb8, 0xd5, 0xa2, 0x3f, 0xc3,
-    0x62, 0xce, 0xb1, 0x77, 0x5f, 0x8b, 0x17, 0xff, 0x67, 0x60, 0x6f, 0x71,
-    0xcb, 0xb8, 0x2c, 0x5f, 0xbe, 0xcf, 0xf6, 0x58, 0xa2, 0x3e, 0xde, 0x23,
-    0x5f, 0xfd, 0xb1, 0xf2, 0x38, 0x5a, 0x30, 0xb5, 0x1e, 0xb1, 0x5b, 0x1f,
-    0x7b, 0x10, 0xd6, 0x26, 0xe7, 0xa4, 0x86, 0x11, 0x14, 0x3e, 0x2f, 0xfd,
-    0xd1, 0xfd, 0x09, 0x33, 0xd2, 0x25, 0x8b, 0x44, 0xb1, 0x7b, 0xa6, 0x0d,
-    0x62, 0xff, 0xf0, 0x98, 0xb7, 0xef, 0x8f, 0xe7, 0x2d, 0x96, 0x2f, 0xd1,
-    0xc2, 0xfe, 0x6e, 0xb1, 0x71, 0xf8, 0xb1, 0x58, 0x98, 0x2c, 0x48, 0x47,
-    0x13, 0x00, 0xff, 0x93, 0x04, 0x5b, 0x7f, 0x4f, 0x9c, 0x13, 0x05, 0x8b,
-    0xa0, 0xcb, 0x17, 0x36, 0x96, 0x2b, 0x47, 0xb6, 0xc5, 0xbc, 0x17, 0xbf,
-    0xbb, 0xd9, 0xa1, 0x31, 0xeb, 0x16, 0x82, 0xe5, 0x14, 0x2f, 0x31, 0x41,
-    0x72, 0x8a, 0x94, 0x47, 0x91, 0xc1, 0xfb, 0xe1, 0x9d, 0xfc, 0xb1, 0x52,
-    0x8b, 0xfd, 0x9e, 0xd8, 0x86, 0xe0, 0xa5, 0x62, 0x8c, 0x7d, 0x30, 0xee,
-    0xb0, 0xc3, 0xad, 0x84, 0x8c, 0xc6, 0x69, 0xb4, 0x23, 0xe0, 0x45, 0x90,
-    0xc3, 0x34, 0xfb, 0x78, 0x69, 0x3c, 0x6c, 0x91, 0x1f, 0x1e, 0x1e, 0x5f,
-    0xb7, 0xd0, 0xed, 0x3d, 0xde, 0x52, 0xd7, 0xb9, 0x1a, 0x37, 0xa1, 0x66,
-    0x28, 0x76, 0xc7, 0x17, 0xdf, 0xef, 0xb8, 0x00, 0xfd, 0xf1, 0x62, 0xff,
-    0x49, 0xf7, 0xfb, 0x76, 0x05, 0x8b, 0x75, 0xbb, 0x9f, 0x58, 0x66, 0xb7,
-    0xf4, 0x58, 0x4d, 0xfc, 0x58, 0xbc, 0xc7, 0x3a, 0xc5, 0xff, 0x8c, 0x73,
-    0xcc, 0x52, 0x42, 0x3a, 0xc5, 0xec, 0xc0, 0x2c, 0x54, 0x11, 0x4d, 0xb9,
-    0x6f, 0x07, 0x7c, 0x81, 0x78, 0xf3, 0x8b, 0x16, 0x89, 0x62, 0xe3, 0xee,
-    0x61, 0xaf, 0x71, 0xcb, 0xfc, 0xc5, 0x8f, 0x1e, 0xff, 0x58, 0xb8, 0xfd,
-    0xac, 0x5e, 0x84, 0x9d, 0x62, 0xfe, 0xcc, 0xe7, 0x32, 0x3d, 0x62, 0xbb,
-    0x3c, 0xd2, 0x1d, 0xbf, 0xe9, 0x2d, 0xb9, 0x87, 0x98, 0xf5, 0x8b, 0xff,
-    0xed, 0xbd, 0x9c, 0xf8, 0xb9, 0x3b, 0x08, 0xa5, 0x62, 0xff, 0xf4, 0xb8,
-    0xc3, 0xd7, 0xdf, 0x58, 0x39, 0x58, 0xbf, 0xff, 0xb4, 0xfe, 0xe7, 0xf1,
-    0xc8, 0xb3, 0xbf, 0x71, 0xd6, 0x2d, 0x03, 0x11, 0x49, 0xa4, 0xab, 0xa7,
-    0xeb, 0x17, 0xf7, 0x5f, 0xbf, 0xd8, 0x50, 0x58, 0xbf, 0x9a, 0x21, 0xc9,
-    0x6c, 0xb1, 0x5b, 0x27, 0xf2, 0x32, 0x2c, 0x3c, 0x68, 0x7b, 0x11, 0x50,
-    0x85, 0xfa, 0x1a, 0xdf, 0xcd, 0xe0, 0x06, 0x51, 0x2c, 0x5f, 0xef, 0xb7,
-    0xb8, 0x16, 0x7d, 0x62, 0xf4, 0x4f, 0xf5, 0x8b, 0x41, 0x62, 0x96, 0x29,
-    0x8b, 0xee, 0x09, 0x54, 0x9e, 0xde, 0x8f, 0x2f, 0xef, 0x16, 0x6c, 0xfa,
-    0x58, 0xbf, 0x67, 0x98, 0x80, 0xb1, 0x52, 0x7a, 0xa2, 0x2e, 0xbe, 0x60,
-    0xc5, 0xba, 0xc5, 0xee, 0xa9, 0x3a, 0xc5, 0x62, 0x6d, 0x8d, 0x09, 0x0e,
-    0x3b, 0x78, 0x87, 0xa8, 0x96, 0xf7, 0xdc, 0x35, 0x8b, 0xe1, 0xfe, 0x60,
-    0xb1, 0x5b, 0x9e, 0x09, 0x0f, 0x5e, 0x29, 0xdd, 0x62, 0xfd, 0x8e, 0x6b,
-    0x9a, 0xb1, 0x7d, 0x30, 0xce, 0x2c, 0x5f, 0xf3, 0x04, 0x19, 0x16, 0x77,
-    0x05, 0x8a, 0xc4, 0x51, 0xe8, 0x77, 0xe5, 0x2c, 0x45, 0x7a, 0x26, 0xe2,
-    0xc5, 0xf9, 0xbc, 0x1f, 0xe5, 0x62, 0xf4, 0x96, 0xeb, 0x14, 0xe7, 0xc9,
-    0xf1, 0xee, 0xa2, 0x9b, 0xf3, 0x67, 0x9f, 0x65, 0x8b, 0xf6, 0x1a, 0xd3,
-    0xb2, 0xc5, 0xef, 0x7a, 0x56, 0x2b, 0xe7, 0x8c, 0xc5, 0x37, 0xd3, 0x16,
-    0xa5, 0x62, 0xd2, 0xb1, 0x6c, 0x58, 0xad, 0x1a, 0x23, 0x88, 0xdb, 0x75,
-    0x8a, 0x39, 0xfc, 0xfd, 0x17, 0xa8, 0x86, 0xfa, 0x45, 0xd7, 0xba, 0xc5,
-    0xf7, 0x0a, 0x42, 0x58, 0xbe, 0xfe, 0x14, 0x16, 0x2e, 0xda, 0x56, 0x28,
-    0x66, 0xeb, 0x08, 0xab, 0x0f, 0xf5, 0x97, 0x6e, 0x70, 0x2c, 0x5f, 0x34,
-    0x4d, 0xe5, 0x8a, 0x81, 0xba, 0xf0, 0xbd, 0xf6, 0xc7, 0x10, 0xd6, 0x2f,
-    0x75, 0x3e, 0xcb, 0x15, 0x87, 0x8d, 0xd4, 0x4b, 0x7f, 0x7d, 0xf4, 0x1c,
-    0x5c, 0x58, 0xa9, 0x3d, 0x5c, 0x24, 0xbf, 0xff, 0xb3, 0xdc, 0x0f, 0x9e,
-    0xfb, 0x11, 0xb9, 0xd2, 0x42, 0x58, 0xbe, 0xe7, 0x9e, 0x25, 0x8a, 0x3a,
-    0x21, 0x19, 0x82, 0xff, 0x3e, 0xa7, 0x66, 0xd6, 0xeb, 0x17, 0x6f, 0x12,
-    0xc5, 0x18, 0xbc, 0x61, 0x30, 0x92, 0x1c, 0x31, 0x72, 0x13, 0xe6, 0x98,
-    0xee, 0xdc, 0xf0, 0x9a, 0xd1, 0x97, 0xe1, 0x48, 0xcb, 0x45, 0x0b, 0xce,
-    0x42, 0x93, 0xc4, 0x51, 0xc6, 0xb4, 0x76, 0x45, 0x97, 0xa7, 0xf3, 0x2f,
-    0xff, 0x6b, 0x72, 0xce, 0x85, 0x93, 0xa9, 0xe2, 0xc5, 0xff, 0x8e, 0xf9,
-    0xde, 0x38, 0xe7, 0xa9, 0x62, 0xff, 0xf6, 0x38, 0xfe, 0xe7, 0x98, 0xff,
-    0xe6, 0xcb, 0x17, 0xff, 0xfe, 0xea, 0xc8, 0x3f, 0x42, 0xce, 0x67, 0xdf,
-    0x82, 0x63, 0xbe, 0x96, 0x2b, 0xc8, 0xbc, 0x12, 0x6d, 0xf6, 0x1f, 0x38,
-    0xb1, 0x7f, 0x64, 0x7f, 0xe7, 0x06, 0xb1, 0x73, 0x45, 0xf3, 0xd2, 0x22,
-    0x2b, 0xff, 0x87, 0xf9, 0xe6, 0x68, 0x6c, 0xdf, 0x58, 0xac, 0x54, 0x5d,
-    0xa4, 0xb2, 0x87, 0xef, 0x47, 0x50, 0x8b, 0x69, 0x62, 0xff, 0x33, 0x05,
-    0x9c, 0x62, 0x58, 0xbf, 0xff, 0xcf, 0x3e, 0xf8, 0x98, 0xf9, 0xc2, 0x6e,
-    0xc7, 0x84, 0xb1, 0x43, 0x44, 0x8f, 0xcc, 0xab, 0xe8, 0xc0, 0x28, 0x4e,
-    0xde, 0xe8, 0xdf, 0x58, 0xba, 0x7c, 0xb1, 0x52, 0x6d, 0xa3, 0x87, 0xef,
-    0xa7, 0xa3, 0xf4, 0x58, 0xbb, 0x0e, 0xb1, 0x63, 0x4c, 0x37, 0xae, 0x4d,
-    0x5b, 0x22, 0x20, 0x98, 0x2f, 0xc6, 0xfb, 0x30, 0xeb, 0x17, 0xfe, 0x84,
-    0x1f, 0x79, 0x3c, 0x5c, 0x95, 0x8b, 0xff, 0xdb, 0x07, 0xf7, 0x92, 0xd8,
-    0x07, 0x98, 0x2c, 0x54, 0xa7, 0x7f, 0x90, 0xe5, 0x72, 0x36, 0x29, 0x12,
-    0x0d, 0xff, 0xc5, 0x86, 0x9a, 0xde, 0xe3, 0x94, 0x4b, 0x17, 0xb2, 0x0e,
-    0xb1, 0x7f, 0x6b, 0x1f, 0xf2, 0x35, 0x8b, 0x62, 0xc5, 0x44, 0x8a, 0x0d,
-    0x23, 0x1c, 0x70, 0x05, 0xb7, 0xb3, 0x62, 0x58, 0xbd, 0x82, 0xed, 0x62,
-    0xff, 0x49, 0x0f, 0xec, 0x14, 0x4b, 0x15, 0xf3, 0xf0, 0x21, 0xdf, 0x0f,
-    0x5f, 0xb0, 0x6f, 0xae, 0x2c, 0x5f, 0xfb, 0x9f, 0x6e, 0x16, 0x0f, 0xf2,
-    0xb1, 0x4b, 0x17, 0xd0, 0x70, 0x71, 0x62, 0xb8, 0x6b, 0xc3, 0x0c, 0xbc,
-    0x26, 0xd2, 0xc5, 0xf6, 0xf3, 0x9b, 0x2c, 0x53, 0x9e, 0x0e, 0x87, 0x6f,
-    0xd9, 0xff, 0x8b, 0xcb, 0x17, 0xbd, 0xee, 0xd6, 0x2f, 0xfe, 0xef, 0x77,
-    0xf9, 0x9d, 0x59, 0xf7, 0x3a, 0xc5, 0x00, 0xfa, 0xbc, 0x3f, 0x70, 0xb4,
-    0xb1, 0x7d, 0x3b, 0xc7, 0x62, 0xc5, 0x62, 0x62, 0x9a, 0x21, 0xe4, 0x24,
-    0xe3, 0x88, 0x83, 0x18, 0xad, 0x95, 0x2f, 0xf6, 0x50, 0x76, 0xd0, 0xa3,
-    0x77, 0xbe, 0x0f, 0xf9, 0xba, 0xc5, 0xe6, 0x62, 0x58, 0xa5, 0x8b, 0x73,
-    0xc6, 0x9c, 0x43, 0x75, 0xd9, 0xf9, 0x84, 0x99, 0x52, 0x8d, 0xf7, 0x85,
-    0xdd, 0xcf, 0xb2, 0xc5, 0xff, 0xc5, 0x20, 0xe6, 0x43, 0xee, 0x40, 0x58,
-    0xbf, 0x39, 0xa7, 0x68, 0x2c, 0x5b, 0xd1, 0x1f, 0x67, 0xd0, 0xeb, 0x64,
-    0x56, 0xb4, 0x21, 0x28, 0xc6, 0xdb, 0x7b, 0xac, 0x34, 0x99, 0x4b, 0xf9,
-    0x49, 0x1c, 0x79, 0x4b, 0xbf, 0x95, 0xa2, 0xd0, 0xec, 0xe4, 0x2b, 0xbd,
-    0x2d, 0xb0, 0x50, 0xd3, 0xbf, 0xd3, 0xf2, 0xcf, 0x7d, 0xd6, 0x2f, 0xf7,
-    0xbf, 0x83, 0x17, 0xb8, 0xb1, 0x5a, 0x3e, 0x72, 0x32, 0xbe, 0x8e, 0x6e,
-    0xc0, 0xb1, 0x7f, 0x6b, 0x1f, 0xf2, 0x35, 0x8b, 0xfb, 0xbc, 0xe9, 0xdc,
-    0x86, 0xb1, 0x67, 0x8f, 0x3e, 0x00, 0xcb, 0x68, 0xe8, 0xb2, 0x28, 0x43,
-    0xda, 0x0b, 0x17, 0xfe, 0xd0, 0xe4, 0x2c, 0xfc, 0xf7, 0xc5, 0x8b, 0xff,
-    0xee, 0x16, 0x79, 0xc8, 0x2f, 0x71, 0xbb, 0xdd, 0x62, 0xb1, 0x12, 0x7d,
-    0xa0, 0xde, 0x91, 0x76, 0xb1, 0x4e, 0x78, 0x3f, 0x23, 0xbf, 0xf3, 0xef,
-    0x31, 0x38, 0xca, 0x77, 0x58, 0xbf, 0x4e, 0x8b, 0x36, 0x58, 0xad, 0xcf,
-    0xa3, 0xc8, 0x17, 0xc1, 0xce, 0x80, 0xb1, 0x7b, 0x92, 0x12, 0xc5, 0xe7,
-    0x9d, 0xd6, 0x2f, 0xef, 0xce, 0xd2, 0x23, 0xac, 0x54, 0x0f, 0x33, 0xe3,
-    0xb7, 0xe9, 0x17, 0xba, 0x76, 0xb1, 0x69, 0xec, 0xf3, 0xbe, 0x45, 0x7f,
-    0xa2, 0xe0, 0xa0, 0x52, 0x75, 0x8b, 0x46, 0x8b, 0x16, 0xc5, 0x8b, 0xf3,
-    0x7b, 0x92, 0x6a, 0xc5, 0x8b, 0x63, 0x75, 0xb8, 0x8d, 0xf4, 0x94, 0xe9,
-    0x62, 0xfe, 0xce, 0xe1, 0x39, 0xe5, 0x8b, 0xff, 0xb5, 0xa6, 0x06, 0x7d,
-    0xf5, 0xf6, 0x58, 0xb4, 0x16, 0x2b, 0xad, 0x4c, 0x7a, 0x54, 0x70, 0xa0,
-    0x88, 0x78, 0x5c, 0x1a, 0x25, 0xf6, 0xc7, 0x9e, 0x2c, 0x5f, 0xf8, 0x98,
-    0xde, 0x30, 0xfe, 0xd0, 0x58, 0xbf, 0xe8, 0x73, 0xe2, 0x92, 0xd8, 0x0b,
-    0x17, 0x9c, 0x2e, 0xbd, 0x62, 0xff, 0x0b, 0xdf, 0xc3, 0xb1, 0xd6, 0x2e,
-    0xce, 0x2c, 0x5b, 0x4b, 0x15, 0xda, 0x2e, 0xe2, 0x3b, 0x39, 0x1f, 0xcd,
-    0x18, 0x5e, 0xff, 0xfc, 0x6e, 0x79, 0xf9, 0xf1, 0x67, 0x80, 0xc3, 0x95,
-    0x8b, 0xdf, 0x73, 0xac, 0x5f, 0x9f, 0x63, 0xce, 0xeb, 0x15, 0x87, 0x8f,
-    0xe1, 0xda, 0x95, 0x44, 0xf0, 0x24, 0x1c, 0x3e, 0xb4, 0x97, 0xf8, 0x4e,
-    0xdd, 0xd7, 0xfd, 0x62, 0xfc, 0xd0, 0xf6, 0xfc, 0x58, 0xbd, 0xec, 0xe8,
-    0xb1, 0x7f, 0xe1, 0xb3, 0x05, 0xdf, 0x89, 0xbe, 0xb1, 0x43, 0x44, 0x4b,
-    0x15, 0x70, 0x7e, 0xfa, 0x0f, 0xa8, 0x2c, 0x5f, 0xc0, 0x8a, 0x0f, 0xa8,
-    0x2c, 0x44, 0x68, 0xef, 0xb3, 0x76, 0xdd, 0x62, 0xfa, 0x4b, 0x34, 0xb1,
-    0x77, 0xf3, 0xe7, 0x8b, 0xc2, 0x4b, 0x9f, 0x65, 0x8a, 0xdc, 0xf1, 0x7c,
-    0x5b, 0x46, 0xa6, 0x81, 0xda, 0x96, 0xa1, 0x97, 0x7b, 0x6c, 0x09, 0x62,
-    0xff, 0x6f, 0x13, 0x9c, 0x4d, 0xc5, 0x8b, 0xec, 0x16, 0xb6, 0x58, 0xba,
-    0x63, 0xd6, 0x28, 0x68, 0x93, 0xec, 0x7c, 0xe6, 0xdf, 0x24, 0xbd, 0x22,
-    0x8f, 0x58, 0xbd, 0xf7, 0xf2, 0xc5, 0x68, 0xde, 0x86, 0x41, 0x7a, 0x46,
-    0x35, 0x8b, 0xb3, 0xa9, 0x62, 0xf8, 0x01, 0x94, 0x16, 0x2c, 0xc4, 0x6f,
-    0xbc, 0x35, 0x7e, 0xe7, 0x30, 0x80, 0xb1, 0x40, 0x3c, 0xd2, 0x25, 0xa9,
-    0x5c, 0x6c, 0xc5, 0x57, 0x8f, 0x99, 0xa1, 0x97, 0xc7, 0xbf, 0x11, 0x0a,
-    0x15, 0x16, 0x89, 0x62, 0xff, 0x84, 0xc1, 0xc5, 0x0c, 0xee, 0x0b, 0x15,
-    0xd9, 0xe8, 0x10, 0x9d, 0xf1, 0x37, 0x7c, 0x58, 0xbe, 0xf0, 0x0f, 0x8b,
-    0x15, 0xe3, 0xc6, 0x0c, 0x8e, 0xd8, 0xb1, 0x7f, 0xdf, 0x73, 0xcc, 0x7f,
-    0xf3, 0x65, 0x8b, 0xf4, 0xbe, 0xcd, 0xe5, 0x8b, 0xc4, 0xdd, 0x98, 0x7c,
-    0xbc, 0x3d, 0xa3, 0xa6, 0x6a, 0x06, 0x8f, 0x11, 0xf4, 0x76, 0xba, 0x78,
-    0xb1, 0x7f, 0x73, 0xcf, 0xf1, 0x01, 0x62, 0xfa, 0x7f, 0x23, 0x58, 0xbd,
-    0x3d, 0xc1, 0x62, 0xb7, 0x44, 0x37, 0x62, 0xf1, 0x17, 0x9c, 0x8a, 0xff,
-    0xfe, 0xfe, 0x17, 0xb8, 0x60, 0x70, 0xfe, 0x11, 0x0a, 0x0b, 0x17, 0xf7,
-    0xe7, 0x45, 0x30, 0x58, 0xbf, 0xe2, 0xef, 0xd9, 0x09, 0x2d, 0xd6, 0x2c,
-    0x68, 0xcf, 0x9c, 0x45, 0xb7, 0xef, 0xb9, 0x36, 0xcb, 0x17, 0xfd, 0x06,
-    0xd7, 0x8a, 0x4f, 0xc5, 0x8b, 0xfd, 0x23, 0x9d, 0x0a, 0x40, 0xb1, 0x7d,
-    0xd2, 0x73, 0x4b, 0x17, 0x67, 0x6b, 0x15, 0x86, 0xf0, 0x89, 0x2f, 0x63,
-    0x47, 0xac, 0x5b, 0x9b, 0xa6, 0x1d, 0x11, 0x41, 0xce, 0x49, 0xbc, 0x31,
-    0xfb, 0xff, 0xd3, 0x1e, 0x1e, 0xdc, 0xfe, 0xef, 0xcc, 0x1a, 0xc5, 0xfb,
-    0xda, 0x71, 0x6c, 0xb1, 0x52, 0xa8, 0x14, 0xf1, 0x9b, 0xfd, 0x4c, 0x25,
-    0x1b, 0x9b, 0xaf, 0x58, 0xbf, 0xfe, 0xfc, 0xf3, 0x3d, 0x3a, 0x68, 0x37,
-    0x70, 0x58, 0xbf, 0xef, 0xe3, 0xc1, 0xcd, 0x37, 0x16, 0x2f, 0xf9, 0x83,
-    0xc2, 0x17, 0x84, 0x6a, 0xc5, 0x41, 0x1c, 0x23, 0x1c, 0xf2, 0x80, 0x8e,
-    0xaf, 0x33, 0x1a, 0xb1, 0x7f, 0xcc, 0xfc, 0x2c, 0x39, 0xdd, 0x62, 0xb4,
-    0x7a, 0x9f, 0x1d, 0xba, 0x73, 0xb4, 0x59, 0x85, 0x09, 0x1b, 0xdd, 0x45,
-    0x2b, 0x17, 0x07, 0xf5, 0x8b, 0x14, 0x9b, 0x88, 0x0f, 0xdf, 0xd1, 0x73,
-    0x53, 0xdf, 0x96, 0x2f, 0xf6, 0xd8, 0x46, 0x42, 0x36, 0xf2, 0xc5, 0xff,
-    0xe6, 0x6d, 0x6d, 0xf6, 0xf7, 0xdf, 0x50, 0x58, 0xbf, 0x68, 0x7f, 0x78,
-    0x96, 0x2f, 0xe2, 0x9e, 0xe0, 0xe4, 0xb1, 0x7b, 0xf3, 0xa5, 0x81, 0x9a,
-    0xdb, 0xfb, 0x1c, 0x8a, 0x46, 0xb1, 0x60, 0x86, 0x8f, 0xac, 0x4b, 0xdd,
-    0x5f, 0xe5, 0xb5, 0x29, 0xd5, 0x39, 0x8b, 0x46, 0x6b, 0x7f, 0xcc, 0x59,
-    0xef, 0x38, 0x5e, 0x58, 0xbf, 0xe2, 0xcf, 0xf8, 0xb1, 0xa2, 0x58, 0xbf,
-    0xfe, 0xc3, 0x88, 0x66, 0x72, 0x74, 0xd0, 0x7f, 0xac, 0x51, 0x88, 0x89,
-    0x23, 0x8b, 0xff, 0xff, 0xa2, 0x83, 0x97, 0xa4, 0x1d, 0x5e, 0x73, 0x75,
-    0x93, 0xdc, 0x1c, 0xeb, 0x15, 0x29, 0xae, 0x1e, 0x18, 0x44, 0x47, 0x52,
-    0xc9, 0xa7, 0xc8, 0x63, 0x6e, 0x80, 0xf2, 0xb2, 0x75, 0x1e, 0xcb, 0x36,
-    0x14, 0x79, 0xe2, 0x8e, 0x42, 0xff, 0xe1, 0xe7, 0xbb, 0x98, 0xb7, 0xfc,
-    0xe9, 0x62, 0xa3, 0x67, 0x63, 0x85, 0x30, 0xd5, 0xd9, 0xb6, 0x15, 0xb8,
-    0x60, 0xe3, 0x2d, 0xc8, 0x69, 0x9a, 0x4f, 0xbc, 0x39, 0x9e, 0x11, 0x31,
-    0x11, 0xe8, 0x93, 0xf0, 0xb8, 0x62, 0x80, 0x46, 0xa7, 0xc9, 0xee, 0xef,
-    0x52, 0xe7, 0xc5, 0x08, 0xfb, 0xff, 0xff, 0xf1, 0xa1, 0x46, 0x92, 0x3e,
-    0xb3, 0x41, 0x6c, 0x6c, 0xc6, 0x93, 0x90, 0x8d, 0x18, 0xc3, 0x3f, 0x1c,
-    0xb1, 0x7e, 0xeb, 0xbe, 0xe1, 0x9e, 0x58, 0xbf, 0xbb, 0xc3, 0x9d, 0xe3,
-    0xd6, 0x2f, 0xe2, 0xc8, 0xa1, 0x3d, 0xac, 0x5f, 0xfb, 0xb8, 0x67, 0x9f,
-    0xa4, 0x96, 0xeb, 0x15, 0x03, 0xf1, 0xf1, 0x7d, 0xfd, 0x22, 0xed, 0xfb,
-    0xea, 0x58, 0xbf, 0x60, 0x59, 0xdf, 0x96, 0x28, 0xc3, 0xdd, 0x73, 0x3b,
-    0xff, 0xd2, 0x42, 0x33, 0x3d, 0x93, 0xf9, 0x89, 0x62, 0xff, 0xcd, 0x2e,
-    0x76, 0xd9, 0xf0, 0x25, 0x8b, 0xfd, 0xdc, 0x30, 0x7f, 0xcd, 0x96, 0x2f,
-    0xf3, 0x9f, 0x0a, 0x42, 0x95, 0x8b, 0xfd, 0x9d, 0xb7, 0x70, 0x11, 0xd6,
-    0x2f, 0xed, 0xff, 0x9b, 0x64, 0x7a, 0xc5, 0x18, 0x89, 0xbf, 0x99, 0x31,
-    0xb5, 0xfe, 0x92, 0x1c, 0xc7, 0xb7, 0x52, 0xc5, 0x41, 0x58, 0x2f, 0x70,
-    0xa3, 0xd3, 0xff, 0xc8, 0x80, 0x94, 0x47, 0xde, 0x86, 0x8f, 0x43, 0x0b,
-    0xd1, 0xbc, 0x6d, 0xda, 0xc5, 0xfb, 0xb3, 0x03, 0x9e, 0x2c, 0x5e, 0x98,
-    0x71, 0x62, 0xdc, 0x58, 0xb7, 0xe4, 0xf6, 0xfe, 0x58, 0x18, 0xed, 0xfa,
-    0x75, 0xdc, 0x38, 0xb1, 0x7f, 0xd3, 0xb1, 0x8d, 0xd5, 0xd4, 0xc0, 0x58,
-    0xbf, 0x9a, 0x00, 0x72, 0xf2, 0xc5, 0xfd, 0xf7, 0x89, 0xfb, 0xe2, 0xc5,
-    0xff, 0xff, 0x6a, 0x26, 0xfb, 0xf2, 0x62, 0x7f, 0x7b, 0x3e, 0x07, 0xe8,
-    0xb1, 0x51, 0xb2, 0x7d, 0x73, 0x08, 0x4d, 0x8d, 0x74, 0x54, 0x74, 0x16,
-    0x2d, 0x11, 0x85, 0xff, 0xc2, 0xd6, 0x6d, 0x3c, 0x98, 0x4e, 0x96, 0x2f,
-    0xfb, 0x5c, 0xcd, 0x60, 0xdc, 0xd5, 0x8b, 0xda, 0xce, 0x2c, 0x5f, 0x9c,
-    0xba, 0x64, 0x16, 0x2f, 0x63, 0xec, 0xb1, 0x7f, 0xd9, 0x17, 0xe7, 0xb8,
-    0x9b, 0x75, 0x8a, 0x94, 0x6d, 0x1a, 0x74, 0x71, 0xdf, 0x94, 0xf0, 0x76,
-    0xfe, 0x9d, 0xb3, 0xd8, 0x75, 0x8b, 0xff, 0x8f, 0x2e, 0x5e, 0xfb, 0x45,
-    0xf7, 0x58, 0xbf, 0x06, 0x67, 0xf9, 0x8b, 0x17, 0xfe, 0x21, 0x6f, 0xfc,
-    0x3c, 0x4d, 0xba, 0xc5, 0xc2, 0xd2, 0xc5, 0x61, 0xed, 0x47, 0x21, 0x54,
-    0x15, 0x42, 0x3c, 0x63, 0xfa, 0x4a, 0x62, 0xe0, 0x22, 0x72, 0x10, 0xb7,
-    0x9e, 0x46, 0xb1, 0x7f, 0xef, 0xb4, 0x39, 0x2f, 0xb3, 0x79, 0x62, 0x8e,
-    0x7b, 0x64, 0x39, 0x70, 0x23, 0xd6, 0x2f, 0x39, 0x79, 0x62, 0xff, 0x11,
-    0xbf, 0x93, 0x9c, 0x96, 0x2f, 0xe8, 0xf7, 0x9e, 0xa1, 0x79, 0x62, 0xfa,
-    0x2c, 0xcd, 0xd6, 0x2f, 0xdd, 0xf0, 0x0f, 0xe5, 0x8a, 0x93, 0xce, 0x72,
-    0x4b, 0xc5, 0x9d, 0x4b, 0x15, 0x29, 0xa6, 0xc0, 0x84, 0x63, 0x78, 0x38,
-    0xe6, 0x9f, 0x84, 0x10, 0x88, 0x2f, 0xf9, 0xfb, 0xe3, 0xcf, 0x6d, 0xb2,
-    0xc5, 0xff, 0x9b, 0x73, 0x24, 0x39, 0xd9, 0xb8, 0xb1, 0x7f, 0x7a, 0x40,
-    0xdd, 0xf1, 0x62, 0xff, 0xc5, 0x9a, 0xd4, 0xb7, 0x98, 0xd5, 0x8b, 0xc7,
-    0x6f, 0x2c, 0x5f, 0xb3, 0x4e, 0x7e, 0x2c, 0x5e, 0x69, 0xed, 0x62, 0xa4,
-    0xf1, 0x4e, 0x51, 0x5b, 0x26, 0xdb, 0xd9, 0xdc, 0x48, 0x5a, 0x2f, 0x23,
-    0xe0, 0x98, 0xaf, 0xf7, 0xb8, 0xfd, 0x34, 0xfc, 0x58, 0xb1, 0xd6, 0x29,
-    0x62, 0xb0, 0xbe, 0x61, 0x2b, 0xef, 0x7d, 0xe2, 0x58, 0xbf, 0x9f, 0x41,
-    0x94, 0x25, 0x62, 0xa4, 0xf4, 0xa0, 0x49, 0x43, 0x44, 0x88, 0x4e, 0x17,
-    0x3c, 0x16, 0x2b, 0x13, 0x20, 0x78, 0x72, 0x91, 0x25, 0xff, 0xee, 0x36,
-    0x74, 0x7f, 0x43, 0x0d, 0x37, 0x16, 0x2e, 0x9d, 0xd6, 0x2f, 0xfb, 0x92,
-    0x72, 0x9e, 0xe7, 0x8b, 0x14, 0x69, 0xe8, 0xf0, 0x62, 0xff, 0xb2, 0x27,
-    0x88, 0x5d, 0x42, 0xe2, 0xc5, 0x99, 0x62, 0xbe, 0x7a, 0x1e, 0x3f, 0xbf,
-    0xa6, 0x2c, 0x21, 0x62, 0xc5, 0xda, 0x35, 0x62, 0xa4, 0xf1, 0x9c, 0xb6,
-    0xfb, 0xcf, 0x3d, 0xac, 0x5f, 0x66, 0xd3, 0x12, 0xc5, 0x4a, 0x68, 0x4e,
-    0xe6, 0x4d, 0x1c, 0x20, 0x11, 0x1d, 0xff, 0x4c, 0x53, 0xef, 0xe6, 0xb7,
-    0x58, 0xbf, 0xfd, 0x3d, 0x98, 0x28, 0x9b, 0xbe, 0x7f, 0x3c, 0xb1, 0x7b,
-    0xf3, 0x12, 0xc5, 0x76, 0x8a, 0x8f, 0x9d, 0xf5, 0x27, 0xdf, 0xf7, 0xda,
-    0x47, 0xf9, 0x3c, 0xac, 0x5f, 0xec, 0x1b, 0xc9, 0x39, 0xd6, 0x2a, 0x51,
-    0x3a, 0xe6, 0x9f, 0x38, 0xa8, 0x27, 0x77, 0xc8, 0xe3, 0x6f, 0x0a, 0x27,
-    0x58, 0xbf, 0xb6, 0x10, 0x3d, 0x9b, 0xac, 0x5c, 0xee, 0xb1, 0x51, 0xe7,
-    0xcb, 0xa1, 0xe2, 0x31, 0xbf, 0xff, 0x1d, 0xc7, 0x83, 0x9e, 0xa1, 0x31,
-    0xbd, 0xc9, 0xd6, 0x2f, 0xdf, 0x6f, 0x7c, 0x35, 0x8b, 0x9b, 0x65, 0x8b,
-    0xf9, 0x8f, 0x9d, 0x1b, 0x4b, 0x15, 0xb1, 0xe3, 0x9c, 0x62, 0xff, 0xb3,
-    0x72, 0x63, 0x43, 0x9d, 0xd6, 0x2f, 0x10, 0xbb, 0x58, 0xbf, 0xf4, 0x4f,
-    0xf9, 0xee, 0x13, 0x14, 0xac, 0x56, 0x27, 0x13, 0xba, 0xd3, 0xb8, 0xfc,
-    0x8d, 0x8f, 0x04, 0x3d, 0x7a, 0x7c, 0x75, 0x8b, 0xff, 0x79, 0x8d, 0x29,
-    0xf7, 0xd8, 0xeb, 0x17, 0xfd, 0x3f, 0x2c, 0xe8, 0xfa, 0x65, 0x8b, 0xfb,
-    0xf8, 0x7c, 0x2d, 0x96, 0x2f, 0xff, 0x83, 0x73, 0x98, 0x69, 0x0b, 0x9d,
-    0xee, 0xfd, 0xac, 0x58, 0xeb, 0x15, 0x27, 0xd3, 0xc5, 0x7a, 0x3a, 0x69,
-    0xac, 0x3a, 0x47, 0xfc, 0x39, 0xea, 0x84, 0xbd, 0xf9, 0x9c, 0x85, 0x05,
-    0x8b, 0xfb, 0x69, 0x88, 0xc0, 0x79, 0x62, 0xdc, 0x30, 0xf6, 0x44, 0x4f,
-    0x7e, 0x1b, 0x14, 0xfd, 0x62, 0xff, 0x7a, 0x47, 0x3e, 0xc3, 0xac, 0x5f,
-    0xee, 0x8f, 0xac, 0xe8, 0xda, 0x58, 0xbf, 0xa1, 0x3d, 0xfb, 0x3e, 0xb1,
-    0x7f, 0xfb, 0xdc, 0x70, 0x4c, 0x39, 0x99, 0xdf, 0x96, 0x2a, 0x51, 0xc9,
-    0x86, 0x71, 0x1b, 0xf0, 0xbe, 0xbb, 0x4d, 0xc3, 0xe5, 0x21, 0x46, 0x17,
-    0x7f, 0xb3, 0x7c, 0x29, 0xc0, 0x96, 0x2f, 0xf8, 0x73, 0xf1, 0xbf, 0x49,
-    0x1a, 0xc5, 0xf7, 0x4c, 0xf7, 0x16, 0x2f, 0xe9, 0x88, 0xf2, 0x39, 0x58,
-    0xbf, 0xf9, 0xbe, 0xd1, 0x7e, 0x7b, 0xf4, 0xfd, 0x62, 0x8e, 0x7e, 0x80,
-    0x2e, 0xbf, 0x45, 0x8f, 0xd4, 0x35, 0x8a, 0xc4, 0x73, 0xbc, 0x26, 0x58,
-    0x8a, 0xff, 0xfc, 0xd1, 0x70, 0x45, 0xed, 0x64, 0xf7, 0x07, 0x3a, 0xc5,
-    0x4a, 0x75, 0x7f, 0x8c, 0x88, 0x23, 0x2b, 0xff, 0xf8, 0x36, 0x27, 0xed,
-    0xe2, 0x9e, 0xa1, 0x06, 0x2e, 0x79, 0x62, 0xff, 0xd3, 0xee, 0x33, 0x8c,
-    0x5e, 0xe2, 0xc5, 0x4a, 0xe8, 0x4b, 0xca, 0x1a, 0xf9, 0xcf, 0x23, 0xde,
-    0x11, 0xb8, 0x4c, 0x57, 0xec, 0xee, 0x1f, 0x75, 0x8b, 0xff, 0xf8, 0xcc,
-    0xd4, 0xf0, 0x98, 0xde, 0x4e, 0xb4, 0xfd, 0x16, 0x2f, 0xfe, 0x72, 0xcf,
-    0x49, 0xcc, 0xea, 0xe9, 0xe5, 0x8b, 0xee, 0xa2, 0x16, 0xcb, 0x14, 0x62,
-    0x3e, 0x36, 0x29, 0x8f, 0x5e, 0x3a, 0x55, 0xfb, 0xef, 0x13, 0xec, 0xb1,
-    0x76, 0xa0, 0xb1, 0x4e, 0x78, 0x4c, 0x55, 0x69, 0x58, 0xae, 0x1b, 0x1f,
-    0x10, 0x5f, 0xf3, 0xe9, 0xf6, 0x8a, 0x02, 0x35, 0x62, 0xc0, 0x58, 0xad,
-    0x8f, 0x3e, 0x3c, 0xf6, 0xfd, 0xe7, 0x28, 0x4a, 0xc5, 0xfd, 0xdc, 0x30,
-    0x5a, 0xd9, 0x62, 0xff, 0xf6, 0xb5, 0x25, 0x86, 0xbf, 0xff, 0x81, 0xac,
-    0x56, 0x22, 0x8d, 0xc9, 0xc4, 0x63, 0x7f, 0xfd, 0x84, 0x07, 0x1b, 0xeb,
-    0x58, 0x09, 0x82, 0xc5, 0xd3, 0x05, 0x8a, 0x39, 0xf2, 0x92, 0x75, 0x4a,
-    0xaa, 0x2c, 0x85, 0xab, 0xb8, 0x6a, 0x19, 0x2d, 0x09, 0x3b, 0xfc, 0xde,
-    0x63, 0xb9, 0xe5, 0x62, 0xfe, 0x73, 0x5f, 0xcd, 0xf5, 0x8b, 0xdb, 0xfe,
-    0x56, 0x2e, 0xd4, 0xac, 0x5f, 0xff, 0xce, 0x77, 0x8f, 0xc3, 0xbf, 0x66,
-    0x34, 0x35, 0x9c, 0x58, 0xa3, 0x11, 0xe9, 0x03, 0x2e, 0xcb, 0xa2, 0x1e,
-    0xf8, 0xbd, 0xfa, 0x5f, 0xdd, 0x64, 0x6b, 0x58, 0xbf, 0x33, 0x8e, 0x49,
-    0x62, 0xe9, 0x12, 0xc5, 0xfd, 0xc0, 0xfa, 0xba, 0xa6, 0x3d, 0x62, 0xa5,
-    0x1e, 0xdf, 0x4d, 0x23, 0x3e, 0x13, 0x08, 0x5e, 0xfc, 0x21, 0x06, 0xf1,
-    0xeb, 0x17, 0x75, 0x4a, 0xc5, 0xc5, 0xba, 0xc5, 0x49, 0xb2, 0x71, 0xab,
-    0xe8, 0x85, 0xcf, 0x2c, 0x5f, 0xe1, 0x39, 0x67, 0x39, 0x8b, 0x15, 0xb1,
-    0xfb, 0x76, 0x3e, 0x72, 0x5b, 0xb3, 0x75, 0x8b, 0xfe, 0x6f, 0x7e, 0x78,
-    0x21, 0xe2, 0xc5, 0xfb, 0x21, 0x25, 0xba, 0xc5, 0xf7, 0xc0, 0xde, 0x58,
-    0xb7, 0xd6, 0x29, 0x8d, 0xa8, 0x88, 0xef, 0xf1, 0x67, 0xa6, 0x02, 0xd2,
-    0xc5, 0x1d, 0x30, 0x12, 0x18, 0xf1, 0xcf, 0x45, 0xde, 0xa2, 0x0b, 0xf0,
-    0x18, 0xed, 0xda, 0xc5, 0xff, 0x8e, 0xfc, 0xfc, 0xbe, 0x85, 0x1e, 0xb1,
-    0x5d, 0x9f, 0x5b, 0x94, 0xd1, 0x8a, 0xb8, 0xe6, 0x1a, 0xaf, 0x19, 0x93,
-    0x42, 0xea, 0xf8, 0x45, 0x27, 0x58, 0xbf, 0xff, 0xd3, 0xd9, 0x09, 0xbd,
-    0x91, 0x3e, 0xc4, 0xde, 0x63, 0xac, 0x5f, 0xb8, 0xfd, 0x24, 0x6b, 0x15,
-    0xda, 0x2b, 0x7e, 0x44, 0x4c, 0x37, 0xfc, 0x07, 0x2f, 0x4f, 0x05, 0xf5,
-    0x8b, 0xf4, 0x87, 0xc9, 0xe2, 0xc5, 0xfe, 0xd6, 0xcf, 0xbb, 0xeb, 0x16,
-    0x2f, 0x13, 0x9a, 0xb1, 0x7e, 0x6d, 0x6a, 0x76, 0x58, 0xbb, 0x60, 0x2c,
-    0x5f, 0xde, 0x7d, 0x3f, 0x84, 0xb1, 0x69, 0x31, 0x32, 0x4d, 0x8e, 0x70,
-    0xa4, 0xe6, 0xbe, 0x1d, 0x8e, 0x29, 0x0c, 0x66, 0xfd, 0xf7, 0xd6, 0x76,
-    0xb1, 0x7e, 0x0f, 0xf9, 0xdf, 0x16, 0x2e, 0x68, 0xf5, 0x8a, 0xdc, 0xfb,
-    0x84, 0x52, 0x19, 0x5d, 0xbe, 0xb1, 0x7f, 0xff, 0x4f, 0x37, 0xfb, 0xff,
-    0x3a, 0x63, 0xce, 0xc2, 0x1a, 0xc5, 0xff, 0xff, 0xf4, 0xf8, 0x9b, 0x77,
-    0xe4, 0x4f, 0xad, 0xe7, 0x9e, 0x9e, 0xe4, 0x3c, 0xe2, 0xc5, 0xfe, 0xe6,
-    0x6a, 0x7a, 0x4c, 0x7a, 0xc5, 0xfb, 0x0a, 0x7b, 0xe2, 0xc5, 0xc1, 0x9d,
-    0x62, 0xb6, 0x4d, 0xa4, 0xd1, 0x2d, 0x2f, 0x7a, 0x10, 0x1d, 0x0e, 0x02,
-    0x28, 0xbf, 0xdf, 0xce, 0xe7, 0x4e, 0x75, 0x8b, 0xe2, 0x9e, 0xf8, 0xb1,
-    0x7f, 0xd3, 0xbe, 0xb3, 0x98, 0xe3, 0x58, 0xbf, 0xfc, 0xfa, 0xc8, 0x9f,
-    0x5d, 0x4e, 0x1e, 0x41, 0x62, 0xb4, 0x88, 0x7e, 0x1c, 0xde, 0x93, 0xca,
-    0xc5, 0x62, 0x3a, 0x75, 0x0a, 0xaf, 0x11, 0xde, 0x3b, 0xf1, 0x62, 0xff,
-    0x1c, 0x98, 0xd7, 0xf8, 0x96, 0x2f, 0xbe, 0xec, 0x05, 0x8b, 0x49, 0x87,
-    0xad, 0xe3, 0x4b, 0xff, 0x49, 0xba, 0x17, 0x50, 0xe7, 0x92, 0xb1, 0x7f,
-    0xff, 0xff, 0xdc, 0xcf, 0x7d, 0x8f, 0xcd, 0x69, 0xfb, 0xf3, 0x31, 0xb9,
-    0x91, 0x0b, 0xd2, 0x17, 0x72, 0xb1, 0x7f, 0x4f, 0xf7, 0x6e, 0x3a, 0xc5,
-    0xf4, 0x59, 0x1d, 0x8b, 0x15, 0xe3, 0xd4, 0x11, 0x75, 0xdf, 0x65, 0x8a,
-    0xe2, 0x64, 0xbe, 0x87, 0x67, 0x42, 0x2b, 0xfe, 0xef, 0x84, 0xe7, 0xf6,
-    0x47, 0xac, 0x5d, 0x9a, 0x58, 0xa9, 0x3d, 0x4f, 0x9e, 0xdf, 0xde, 0x26,
-    0x06, 0x12, 0xc5, 0xd2, 0x6a, 0xc5, 0xf3, 0x03, 0x09, 0x62, 0xa2, 0x37,
-    0x24, 0x31, 0x46, 0x22, 0x1b, 0xcc, 0xb7, 0xa4, 0xe1, 0x2c, 0x54, 0xae,
-    0x95, 0x8d, 0x8b, 0x23, 0x1d, 0x34, 0xd3, 0x77, 0x3e, 0xca, 0x1a, 0x36,
-    0x8f, 0x42, 0x30, 0x50, 0xa7, 0x08, 0x92, 0xff, 0x0b, 0x9f, 0x9e, 0xf4,
-    0xeb, 0x17, 0xf3, 0x76, 0xfd, 0x4e, 0x35, 0x8a, 0xd8, 0xf9, 0xa0, 0x6b,
-    0x7f, 0x08, 0x3d, 0xfe, 0xf1, 0xeb, 0x17, 0xfe, 0xfb, 0xf8, 0x31, 0x77,
-    0xe6, 0xd2, 0xc5, 0xf0, 0x1b, 0xbe, 0x2c, 0x5c, 0x10, 0x4b, 0x15, 0xc3,
-    0x7c, 0x11, 0x25, 0xf7, 0xdb, 0x3e, 0x91, 0x18, 0x68, 0xaf, 0xff, 0xc1,
-    0xb9, 0xc5, 0xc9, 0x0d, 0xcf, 0x31, 0x48, 0x4b, 0x17, 0x3e, 0xcb, 0x17,
-    0xfe, 0xdd, 0xb4, 0xdf, 0xee, 0x19, 0xe5, 0x8a, 0x94, 0xf8, 0x30, 0x8f,
-    0xb3, 0x47, 0x85, 0x13, 0x1a, 0xf4, 0x59, 0x0c, 0x62, 0xf4, 0x8b, 0xb5,
-    0x8b, 0xf8, 0x44, 0xfe, 0x6d, 0xd6, 0x2b, 0x73, 0xcc, 0x00, 0xf5, 0xf8,
-    0x3c, 0x3b, 0xe9, 0x62, 0xfc, 0xfa, 0xf6, 0x6e, 0xb1, 0x7e, 0xdd, 0xf9,
-    0xf7, 0x58, 0xbf, 0xbb, 0x7d, 0x8e, 0xfc, 0x58, 0xb8, 0xec, 0xb1, 0x7f,
-    0xbd, 0x25, 0xbc, 0x68, 0x03, 0xac, 0x54, 0xa2, 0x07, 0xe6, 0x02, 0x17,
-    0xbd, 0xf9, 0x02, 0xc5, 0xee, 0xae, 0xa9, 0x58, 0xbf, 0xe1, 0xfd, 0xf4,
-    0xfd, 0xc5, 0x2b, 0x14, 0xc7, 0xbc, 0x22, 0x3b, 0xff, 0xf9, 0xc5, 0xd7,
-    0xc2, 0x4c, 0x2c, 0xf0, 0x80, 0x76, 0x82, 0xc5, 0xba, 0x2c, 0x5f, 0xff,
-    0x6b, 0x58, 0x00, 0x4c, 0x34, 0xc5, 0x30, 0x58, 0xbf, 0x6c, 0xc5, 0xee,
-    0x2c, 0x5f, 0xde, 0x8e, 0xf4, 0xf7, 0x05, 0x8a, 0x8d, 0xd1, 0x7f, 0x82,
-    0x8c, 0x9e, 0x22, 0x9a, 0x95, 0x69, 0x58, 0x46, 0x69, 0x4f, 0x65, 0x2f,
-    0x0a, 0xa6, 0x2f, 0x27, 0xbe, 0x10, 0xfa, 0x32, 0x0b, 0xff, 0xfb, 0xf8,
-    0x6b, 0x4b, 0xc7, 0x4f, 0x7d, 0x5b, 0xfd, 0xbb, 0x58, 0xbe, 0xd3, 0xef,
-    0x2b, 0x17, 0xff, 0xff, 0xff, 0x17, 0x5e, 0x3c, 0x0f, 0xae, 0xb9, 0x1a,
-    0x8a, 0x63, 0x40, 0x9f, 0x6e, 0xa3, 0x41, 0x1a, 0x47, 0x78, 0x71, 0xc6,
-    0x19, 0xf8, 0xe5, 0x8b, 0xff, 0xfd, 0x3c, 0x33, 0x98, 0x76, 0xef, 0xed,
-    0xd4, 0xe4, 0xdd, 0xac, 0x5f, 0xe9, 0x14, 0x33, 0xcf, 0xc5, 0x8a, 0x1a,
-    0x7e, 0x18, 0xc9, 0xd9, 0x19, 0xe1, 0xa3, 0xe6, 0x5b, 0xdf, 0x32, 0x3d,
-    0x62, 0xf1, 0x6e, 0xeb, 0x17, 0x8b, 0x36, 0x58, 0xbe, 0xe6, 0x9c, 0x25,
-    0x8b, 0x7e, 0x4f, 0x05, 0x87, 0x6a, 0x51, 0x4c, 0xe4, 0x4c, 0xbd, 0x7f,
-    0xff, 0xf7, 0x89, 0x80, 0x4f, 0x26, 0x4f, 0x49, 0xd7, 0x1f, 0xd2, 0x5b,
-    0x2c, 0x5e, 0xdf, 0x34, 0xb1, 0x7d, 0xbf, 0xdf, 0x4b, 0x17, 0x4f, 0x8c,
-    0x45, 0xa3, 0xb9, 0x30, 0xf5, 0xfe, 0xfe, 0x1b, 0xfc, 0xee, 0x0b, 0x17,
-    0xdb, 0x30, 0x89, 0x62, 0xfd, 0x3d, 0xfd, 0xf4, 0xb1, 0x5b, 0xa2, 0x09,
-    0xcd, 0x98, 0x8e, 0xfd, 0xa1, 0x6c, 0x2d, 0x96, 0x2f, 0xde, 0x11, 0xc5,
-    0xe5, 0x8b, 0xdb, 0x3c, 0xac, 0x54, 0x9e, 0x3e, 0x15, 0x5f, 0x1e, 0x5e,
-    0x39, 0x62, 0xff, 0x49, 0x7d, 0x80, 0x28, 0x96, 0x2a, 0x51, 0xd9, 0xf7,
-    0x31, 0x10, 0x75, 0x12, 0xd4, 0x6e, 0xee, 0xff, 0x7a, 0xee, 0x14, 0x73,
-    0x2c, 0xdb, 0x69, 0x4d, 0x50, 0x95, 0xe4, 0x39, 0x41, 0x59, 0x1e, 0xa1,
-    0xb1, 0xbd, 0xee, 0x67, 0xdc, 0xb9, 0xb7, 0x84, 0x7c, 0x7c, 0x77, 0x51,
-    0x4f, 0x56, 0x6a, 0x70, 0x00, 0xf2, 0x90, 0x7f, 0x2c, 0xad, 0xa1, 0xf4,
-    0x08, 0xd5, 0x3a, 0xf8, 0x6e, 0x94, 0xf6, 0x2f, 0x25, 0x75, 0xfa, 0x70,
-    0x00, 0x52, 0x9e, 0x3a, 0x43, 0xda, 0x3a, 0x1c, 0x21, 0xc2, 0xf3, 0xaa,
-    0x31, 0xbb, 0xff, 0xff, 0x74, 0xdb, 0x91, 0xaf, 0x68, 0xd3, 0xac, 0xd4,
-    0x45, 0xec, 0x19, 0x86, 0x7e, 0x39, 0x62, 0xf1, 0x46, 0xf0, 0x58, 0xae,
-    0xbb, 0x45, 0x67, 0xe1, 0x15, 0x7d, 0xac, 0xf6, 0x2c, 0x5f, 0xed, 0xfe,
-    0xfe, 0xe3, 0x76, 0xb1, 0x7b, 0x35, 0xd1, 0x62, 0xe8, 0xda, 0x36, 0x58,
-    0xbe, 0xe1, 0x0b, 0xeb, 0x15, 0xd6, 0x1e, 0x2e, 0x11, 0x5f, 0xa4, 0x7f,
-    0x9e, 0x2c, 0x5e, 0x07, 0x82, 0x58, 0xbd, 0xa0, 0xe2, 0x58, 0xb8, 0xff,
-    0x58, 0xa7, 0x37, 0x1c, 0x20, 0xbf, 0xf1, 0x00, 0xed, 0x02, 0x9f, 0x71,
-    0x62, 0xec, 0xc5, 0x8b, 0xed, 0xfe, 0xe1, 0xac, 0x54, 0x68, 0xa8, 0xa7,
-    0x0b, 0xcd, 0x22, 0x73, 0x68, 0xf6, 0x4d, 0x13, 0x1c, 0xa3, 0xea, 0xec,
-    0x41, 0xd7, 0x9f, 0x06, 0x2d, 0x7e, 0x8a, 0x62, 0xfc, 0xac, 0x5f, 0xfe,
-    0x2f, 0x70, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xff, 0x63, 0x82, 0x41,
-    0x0c, 0xd4, 0xac, 0x5f, 0x98, 0xbd, 0xc0, 0x2c, 0x5b, 0xe4, 0x7c, 0xbd,
-    0x47, 0xb7, 0xfd, 0xd5, 0xc2, 0x68, 0x8a, 0x4e, 0xb1, 0x69, 0x58, 0xa1,
-    0x1e, 0x68, 0x67, 0x97, 0xd9, 0xa6, 0x82, 0xc5, 0xfe, 0xc0, 0xf4, 0x03,
-    0xbf, 0x16, 0x2f, 0xef, 0xe4, 0x4c, 0x5b, 0x2c, 0x5e, 0x08, 0x20, 0x92,
-    0x2f, 0xa1, 0xec, 0xdd, 0x22, 0x30, 0xd0, 0xdf, 0xb0, 0x6e, 0x0e, 0x2e,
-    0x8f, 0xe2, 0x8c, 0x45, 0xe6, 0x94, 0x08, 0xde, 0xee, 0x41, 0x62, 0xf7,
-    0x18, 0x0b, 0x15, 0x26, 0xd7, 0xb1, 0x8b, 0x74, 0x58, 0xb4, 0x72, 0xc5,
-    0x6e, 0x6a, 0x4e, 0x29, 0x7f, 0x3e, 0x9e, 0x12, 0x6a, 0xc5, 0x61, 0xe8,
-    0x78, 0x8a, 0xa5, 0x5d, 0x3e, 0x15, 0x3c, 0x2c, 0x34, 0xee, 0x72, 0x3f,
-    0x91, 0x34, 0x3c, 0x40, 0xca, 0x50, 0x9a, 0xbe, 0x38, 0xf0, 0x96, 0x2e,
-    0xf7, 0x16, 0x2f, 0xff, 0x0f, 0x30, 0xd3, 0x33, 0xcf, 0xcf, 0xba, 0xc5,
-    0xfe, 0xf7, 0xe7, 0xdc, 0xfb, 0xac, 0x5d, 0x0d, 0x96, 0x2f, 0x82, 0xe6,
-    0x06, 0xb1, 0x78, 0xd1, 0x6c, 0xb1, 0x73, 0x41, 0x62, 0xfc, 0x66, 0x44,
-    0xfb, 0x2c, 0x51, 0x88, 0xd4, 0x81, 0xa6, 0x0c, 0x9a, 0x4a, 0x72, 0x0e,
-    0x0b, 0xdf, 0xff, 0xbe, 0x59, 0xdc, 0x0b, 0x0d, 0x7f, 0xff, 0x23, 0xd6,
-    0x2f, 0xed, 0x61, 0x0a, 0x74, 0xb1, 0x4b, 0x15, 0xb1, 0xb9, 0xe1, 0x6d,
-    0xcc, 0x6a, 0xc5, 0xfa, 0x1f, 0x92, 0xd9, 0x22, 0xe9, 0x82, 0xc5, 0xe0,
-    0x34, 0x16, 0x2b, 0xb3, 0xdd, 0xf9, 0x48, 0x62, 0xf4, 0xc8, 0xa6, 0xf3,
-    0xad, 0xff, 0xb3, 0xb8, 0x3e, 0x11, 0x60, 0xd6, 0x2f, 0x8e, 0x2e, 0xfc,
-    0xb1, 0x7b, 0xf3, 0xd1, 0x62, 0xe9, 0x02, 0xc5, 0x61, 0xb6, 0x0c, 0x7e,
-    0xb6, 0x3f, 0xce, 0x2d, 0xde, 0xeb, 0xe7, 0x4b, 0x15, 0x2b, 0x81, 0x3b,
-    0x0c, 0x77, 0x18, 0xfb, 0xac, 0x6a, 0x12, 0x45, 0x0c, 0x8e, 0x11, 0x7a,
-    0x17, 0x22, 0x23, 0xbf, 0xbe, 0xe3, 0x96, 0xd2, 0xc5, 0xee, 0xa1, 0x6c,
-    0xb1, 0x5b, 0x9e, 0x7f, 0x51, 0x6d, 0xff, 0xd0, 0x72, 0x06, 0xb3, 0xa4,
-    0x97, 0x96, 0x2f, 0x3f, 0x1d, 0x62, 0xce, 0xb1, 0x7c, 0xc1, 0xb0, 0xd6,
-    0x2f, 0x4e, 0x8d, 0x58, 0xb4, 0x31, 0x16, 0x7f, 0x45, 0x61, 0xc1, 0x08,
-    0x84, 0x47, 0x7f, 0xff, 0x87, 0xfc, 0xf7, 0x98, 0xb7, 0xe4, 0xe9, 0xa2,
-    0x7f, 0xac, 0x5f, 0x83, 0xff, 0xf2, 0x25, 0x8b, 0xe0, 0xfe, 0xfe, 0x58,
-    0xa3, 0x0f, 0x3f, 0x85, 0x74, 0x34, 0xff, 0x3b, 0x86, 0xcb, 0xa7, 0x82,
-    0x16, 0x37, 0xc1, 0xce, 0x80, 0xb1, 0x7e, 0x9c, 0xe9, 0x23, 0x58, 0xa3,
-    0x4f, 0x37, 0x72, 0x4b, 0xff, 0xee, 0xfc, 0xe1, 0x07, 0xe7, 0x21, 0x43,
-    0x38, 0xb1, 0x7f, 0xc5, 0x21, 0x71, 0xcb, 0xb8, 0x2c, 0x5f, 0xfc, 0x1f,
-    0x60, 0x8a, 0x0f, 0xee, 0x06, 0x75, 0x8b, 0xff, 0xff, 0x70, 0x0f, 0xa1,
-    0xe1, 0x7d, 0xf7, 0xfb, 0xf8, 0xd9, 0x28, 0x2c, 0x5e, 0xeb, 0xe3, 0x9d,
-    0x62, 0xe9, 0xdd, 0x62, 0xb4, 0x9d, 0x37, 0xc9, 0x09, 0x4f, 0x87, 0x5e,
-    0x4b, 0x13, 0x6f, 0x42, 0x5b, 0xfe, 0x23, 0x78, 0xfd, 0x24, 0xbc, 0xb1,
-    0x7f, 0xf7, 0xda, 0x2c, 0x1f, 0xdf, 0xa6, 0x44, 0xb1, 0x52, 0x88, 0x37,
-    0x3b, 0xbc, 0x1c, 0xc7, 0xac, 0x5d, 0xf7, 0x58, 0xb0, 0x16, 0x28, 0xd3,
-    0x52, 0x42, 0xf5, 0xb1, 0xf5, 0xba, 0x55, 0xe2, 0x17, 0x96, 0x2f, 0xf7,
-    0xde, 0x41, 0xb7, 0x0d, 0x58, 0xa8, 0x8f, 0x4f, 0xc3, 0xb7, 0xe2, 0x90,
-    0xb0, 0x96, 0x2f, 0xfb, 0xfd, 0xc9, 0xb1, 0x42, 0x63, 0xd6, 0x2d, 0xc1,
-    0x9f, 0x3e, 0x13, 0xd6, 0x93, 0x26, 0x27, 0x5f, 0x42, 0x2a, 0x96, 0x2f,
-    0xf6, 0xff, 0x70, 0x1c, 0x51, 0xeb, 0x17, 0xef, 0x71, 0xf0, 0xd5, 0x8a,
-    0x30, 0xf8, 0x83, 0x39, 0xbf, 0x43, 0x4f, 0x27, 0x58, 0xbf, 0xdb, 0xf9,
-    0x9f, 0x5a, 0xc5, 0x8b, 0xde, 0xcd, 0xd6, 0x2f, 0x07, 0xd8, 0x4b, 0x15,
-    0xb2, 0x65, 0xa3, 0x6e, 0xec, 0x93, 0x45, 0x00, 0x34, 0xe0, 0xf5, 0x4b,
-    0x25, 0xcb, 0x25, 0x70, 0x3c, 0xa3, 0xbf, 0xc3, 0xa5, 0xa3, 0xb2, 0x14,
-    0x6c, 0x57, 0xbf, 0xd4, 0x35, 0x8b, 0xff, 0x48, 0x39, 0xa9, 0xee, 0x0e,
-    0x75, 0x8b, 0xce, 0x09, 0x58, 0xbe, 0x86, 0x79, 0xd6, 0x2f, 0xbc, 0x13,
-    0x76, 0xb1, 0x7d, 0x9a, 0x73, 0xac, 0x5e, 0x04, 0x81, 0x62, 0x8c, 0x45,
-    0x17, 0x63, 0x8c, 0x45, 0xc2, 0x50, 0xc8, 0xaf, 0xff, 0x43, 0xc2, 0xfe,
-    0xa4, 0x28, 0x38, 0x31, 0x62, 0xe6, 0x3a, 0xc5, 0x6e, 0x8a, 0xf2, 0x4c,
-    0xe8, 0x99, 0x7f, 0xfe, 0xf3, 0x6b, 0x1c, 0x1c, 0xcf, 0xbe, 0xbe, 0xcb,
-    0x17, 0xfd, 0xf7, 0xd4, 0x45, 0x33, 0xda, 0xc5, 0xfe, 0x7e, 0x33, 0x78,
-    0x52, 0xb1, 0x76, 0xf8, 0xb1, 0x7b, 0x4d, 0xc5, 0x8b, 0xd2, 0x43, 0x58,
-    0xbf, 0x77, 0xc8, 0xb3, 0xcb, 0x15, 0x05, 0x5f, 0xf9, 0x1c, 0x8f, 0x66,
-    0x4e, 0xa9, 0x1e, 0x75, 0xa3, 0x23, 0x8c, 0x7c, 0x74, 0x87, 0x2f, 0xdf,
-    0x7d, 0x48, 0xd6, 0x2f, 0x8c, 0xe0, 0x7f, 0x58, 0xbf, 0x9f, 0xc4, 0xc0,
-    0xe2, 0xc5, 0xfa, 0x4f, 0xec, 0xfa, 0xc5, 0xff, 0xe0, 0x49, 0x6e, 0x58,
-    0xfd, 0x5d, 0x53, 0xb2, 0xc5, 0xfe, 0x9e, 0xac, 0x21, 0xfe, 0x56, 0x2e,
-    0xcd, 0xd6, 0x2f, 0x80, 0x29, 0x3a, 0xc5, 0x61, 0xbb, 0x71, 0x8b, 0xd2,
-    0x5b, 0x2c, 0x5f, 0x84, 0x17, 0xe7, 0xa2, 0xc5, 0xff, 0xf1, 0x7a, 0x2c,
-    0xd6, 0x19, 0xe0, 0x48, 0xe5, 0x62, 0xf4, 0x94, 0x4b, 0x14, 0x34, 0xd1,
-    0xa2, 0x70, 0xd0, 0xff, 0xc7, 0x58, 0xb0, 0x35, 0x1b, 0xee, 0x3c, 0xee,
-    0xb1, 0x7d, 0x9d, 0xf9, 0xd6, 0x2f, 0xfe, 0x8b, 0x35, 0x8c, 0x79, 0xfb,
-    0x8d, 0x62, 0xb1, 0x11, 0x5f, 0x23, 0xf1, 0x1d, 0xb1, 0x62, 0xf9, 0x8b,
-    0x00, 0xb1, 0x7e, 0x3e, 0x7f, 0xb6, 0x58, 0xa8, 0x8f, 0x6c, 0xe2, 0x22,
-    0x21, 0xbf, 0x78, 0x51, 0x07, 0x2b, 0x17, 0x30, 0xd6, 0x2d, 0x90, 0x3c,
-    0x2d, 0x15, 0xd1, 0xaa, 0xfc, 0x77, 0x2d, 0xec, 0xa3, 0xf1, 0xcb, 0x14,
-    0x38, 0xf9, 0x08, 0xae, 0x8e, 0x57, 0xff, 0x9c, 0x64, 0xdd, 0x96, 0x7b,
-    0x1c, 0x0b, 0x17, 0xdb, 0x6c, 0xd1, 0xeb, 0x17, 0x86, 0x2d, 0x96, 0x2e,
-    0x98, 0x96, 0x2b, 0x73, 0x6f, 0x10, 0xfd, 0xff, 0x40, 0x45, 0xe7, 0xfb,
-    0x9d, 0x62, 0xf4, 0x38, 0x25, 0x8b, 0x9a, 0x0b, 0x17, 0xef, 0x3f, 0xe0,
-    0x4b, 0x14, 0x73, 0x7e, 0x42, 0xf7, 0xff, 0xff, 0xef, 0xce, 0x6d, 0x07,
-    0xf7, 0x27, 0x59, 0x18, 0xe0, 0x99, 0xe9, 0x32, 0x5b, 0xac, 0x5b, 0xd8,
-    0x9a, 0xfc, 0x44, 0x7f, 0x39, 0x65, 0xde, 0x10, 0x5e, 0xe9, 0x31, 0xeb,
-    0x17, 0x82, 0x08, 0x25, 0x8b, 0xff, 0xbb, 0xf1, 0x66, 0xc7, 0xc3, 0xe1,
-    0x24, 0x46, 0x1a, 0x1b, 0x1e, 0x51, 0x37, 0x88, 0x77, 0x04, 0x05, 0x8b,
-    0xee, 0xf9, 0x30, 0x58, 0xa9, 0x4d, 0x3d, 0xe1, 0xd6, 0xc4, 0xe0, 0x19,
-    0xbe, 0xdb, 0x3e, 0xcb, 0x17, 0xb6, 0x81, 0xd6, 0x2d, 0x05, 0x8b, 0xff,
-    0x3f, 0x00, 0x71, 0x73, 0x92, 0x05, 0x8b, 0xfd, 0xa2, 0x60, 0xb3, 0xec,
-    0xb1, 0x7c, 0xda, 0xfe, 0x2c, 0x5f, 0xf1, 0x36, 0xdc, 0xcf, 0xb4, 0x7a,
-    0xc5, 0xf7, 0xa7, 0xdc, 0xc3, 0xde, 0x62, 0x2b, 0xf7, 0xdb, 0x59, 0xa5,
-    0x8b, 0xfc, 0xfd, 0x42, 0x3e, 0xdd, 0x6e, 0xcb, 0x17, 0xfd, 0xe7, 0x04,
-    0xc3, 0x3b, 0xf2, 0xc5, 0xff, 0x3f, 0x65, 0x9e, 0xfb, 0x84, 0xb1, 0x52,
-    0x7e, 0x9a, 0x3a, 0xbf, 0xfb, 0x62, 0x16, 0xc2, 0xe7, 0xb9, 0x81, 0x2c,
-    0x5f, 0xbb, 0xdd, 0xcb, 0x65, 0x8b, 0xfd, 0xf9, 0x84, 0x50, 0x62, 0x58,
-    0xaf, 0x1e, 0xf8, 0x65, 0x75, 0x28, 0xcb, 0x68, 0x54, 0x5c, 0x26, 0x58,
-    0xbf, 0x67, 0xf6, 0xf4, 0x4b, 0x14, 0x62, 0xb6, 0x8d, 0x87, 0xe0, 0x24,
-    0x34, 0x0c, 0x84, 0x8e, 0xe6, 0xf1, 0x14, 0x6a, 0x16, 0x7f, 0x87, 0x61,
-    0x13, 0x78, 0x5e, 0xff, 0x80, 0x59, 0xbb, 0xe7, 0xb8, 0xb1, 0x7b, 0xd2,
-    0x35, 0x8b, 0xe8, 0x78, 0x43, 0x58, 0xbf, 0x4b, 0xc1, 0xb8, 0xb1, 0x7f,
-    0x30, 0x79, 0x14, 0x9d, 0x62, 0xa5, 0x12, 0xfd, 0x8e, 0xe8, 0x90, 0x44,
-    0xf7, 0xf6, 0x7b, 0xe2, 0x9e, 0xd6, 0x2f, 0xbc, 0xfa, 0xc5, 0x8b, 0xee,
-    0xf8, 0xe6, 0x8c, 0xf4, 0x70, 0xbe, 0xb6, 0x54, 0x87, 0xa8, 0x55, 0x94,
-    0x34, 0x3d, 0x08, 0xeb, 0xef, 0x3f, 0x61, 0x2c, 0x5f, 0x37, 0xdf, 0xeb,
-    0x17, 0xf7, 0x83, 0xff, 0xf3, 0x65, 0x8b, 0xfb, 0x85, 0x9d, 0x3e, 0xeb,
-    0x17, 0xff, 0xa1, 0x84, 0xe3, 0xc2, 0xc3, 0x67, 0x8b, 0x17, 0xb7, 0xce,
-    0x2c, 0x56, 0x22, 0x57, 0xc5, 0xe2, 0x48, 0xbf, 0xf1, 0xe7, 0xb2, 0xc0,
-    0x72, 0x63, 0xd6, 0x2f, 0xf7, 0xf3, 0x6c, 0xfb, 0xfd, 0x62, 0xb1, 0x3b,
-    0x23, 0x49, 0x7b, 0x22, 0xd4, 0x31, 0x8e, 0x5f, 0xf4, 0x2b, 0xfb, 0x40,
-    0x9d, 0xf0, 0xeb, 0x17, 0xf1, 0x67, 0x47, 0xd3, 0x2c, 0x5f, 0xc5, 0x9d,
-    0x80, 0x38, 0x2c, 0x50, 0xcf, 0x78, 0x05, 0xd5, 0x1b, 0x32, 0x36, 0xe6,
-    0x77, 0x39, 0xe5, 0x00, 0x32, 0xf0, 0xa1, 0x1b, 0x7d, 0x1e, 0xf9, 0xda,
-    0xc5, 0xcd, 0xba, 0xc5, 0x6c, 0x6f, 0x98, 0x9a, 0xfc, 0xfc, 0x9d, 0x8e,
-    0xb8, 0xbf, 0x4b, 0xf4, 0xb6, 0x80, 0x25, 0xc5, 0xfa, 0x5c, 0xd0, 0x5c,
-    0x5f, 0xa5, 0xf0, 0xa1, 0x9c, 0x5c, 0x5f, 0xa5, 0x0c, 0xf5, 0x08, 0x92,
-    0xfd, 0x39, 0xcc, 0x25, 0xc5, 0xfa, 0x52, 0xe2, 0xfd, 0x2e, 0x6f, 0x2e,
-    0x2f, 0xd0, 0xe5, 0xcd, 0xa0, 0x47, 0xfe, 0x24, 0xcb, 0xec, 0x8e, 0x70,
-    0x2e, 0x2f, 0xd2, 0x97, 0x17, 0xe9, 0x70, 0x25, 0x71, 0x7e, 0x97, 0xfd,
-    0x80, 0x6d, 0x67, 0x4c, 0x1a, 0xe2, 0xfd, 0x2f, 0xec, 0xfb, 0xf0, 0x5b,
-    0x2e, 0x2f, 0xd2, 0x80, 0x8a, 0x72, 0x24, 0xe2, 0x3d, 0xf6, 0xb6, 0x9f,
-    0x2e, 0x2f, 0xd2, 0x97, 0x17, 0xe9, 0x86, 0xc6, 0xe0, 0x82, 0x5c, 0x5f,
-    0xa5, 0x41, 0x59, 0x38, 0xcd, 0xb2, 0x11, 0x3d, 0xc2, 0x83, 0x44, 0xe7,
-    0x32, 0xe4, 0x30, 0x3c, 0xc0, 0x11, 0x45, 0xd2, 0x6a, 0x62, 0xfd, 0x11,
-    0x88, 0x90, 0xbf, 0xed, 0xa7, 0xa6, 0x3e, 0xb3, 0x65, 0x8b, 0xff, 0x9b,
-    0xfb, 0xfd, 0xc9, 0xb4, 0xd0, 0x58, 0xa8, 0x22, 0xef, 0x47, 0x7e, 0x3c,
-    0xbe, 0xf4, 0xf7, 0x05, 0x8b, 0xfa, 0x70, 0x39, 0x84, 0x16, 0x2f, 0xf7,
-    0x32, 0x10, 0x9f, 0x76, 0xb1, 0x7f, 0xd3, 0xa0, 0x79, 0xd8, 0xd8, 0x2c,
-    0x56, 0x23, 0xc7, 0xe6, 0x04, 0x49, 0xc2, 0xe0, 0xcd, 0x6f, 0xfd, 0x9b,
-    0x8f, 0x34, 0x13, 0x7e, 0x25, 0x8b, 0xa4, 0x35, 0x8a, 0x58, 0xbf, 0xf1,
-    0x64, 0x53, 0xb0, 0x1b, 0xbe, 0x2c, 0x54, 0x9e, 0x6f, 0x03, 0x29, 0x22,
-    0xfc, 0xf1, 0x33, 0x41, 0x62, 0xd0, 0xd8, 0xda, 0x60, 0x65, 0xf4, 0x4c,
-    0xda, 0x58, 0xad, 0x93, 0x8f, 0xed, 0x27, 0x48, 0x5f, 0x65, 0x25, 0x5e,
-    0xa2, 0x7b, 0x9f, 0x65, 0x8b, 0xfa, 0x7e, 0x4c, 0xfa, 0x58, 0xad, 0x2f,
-    0xd9, 0xb4, 0xf8, 0x9f, 0x97, 0x3a, 0x0c, 0x5e, 0xeb, 0xb8, 0x44, 0xb1,
-    0x7e, 0xe3, 0x77, 0xc0, 0x2c, 0x51, 0xcf, 0x43, 0xc4, 0xd7, 0xf6, 0x3e,
-    0xb3, 0xd2, 0xb1, 0x63, 0x56, 0x28, 0x8d, 0xfc, 0x71, 0x65, 0xf0, 0xc6,
-    0xc7, 0x58, 0xbf, 0xd9, 0xe3, 0x67, 0xa6, 0x0d, 0x62, 0xb0, 0xf6, 0x48,
-    0x8e, 0xfc, 0x53, 0xf1, 0x69, 0x62, 0xfe, 0x70, 0xa2, 0x29, 0x02, 0xc5,
-    0x70, 0xf5, 0xfc, 0x51, 0x7f, 0x70, 0xb3, 0xd8, 0x05, 0x8b, 0xf1, 0x48,
-    0x26, 0x3d, 0x62, 0xff, 0x66, 0xb5, 0x84, 0xc6, 0xac, 0x53, 0x9e, 0xef,
-    0xca, 0xa8, 0x69, 0xa2, 0x76, 0xee, 0x72, 0x20, 0x42, 0x2a, 0xff, 0x16,
-    0x74, 0xff, 0x6d, 0x1e, 0xb1, 0x7f, 0x75, 0x78, 0x5d, 0xc3, 0x8b, 0x15,
-    0x11, 0xf6, 0x84, 0x73, 0x7f, 0x7b, 0x3f, 0x3a, 0x02, 0xc5, 0xf6, 0x9f,
-    0x3a, 0x2c, 0x5f, 0xb3, 0x99, 0xdf, 0x96, 0x2f, 0x8f, 0x24, 0x69, 0x87,
-    0x9a, 0xc4, 0x97, 0xfd, 0xa7, 0x3f, 0x03, 0x9c, 0x89, 0x62, 0xff, 0xb7,
-    0x90, 0x0c, 0x4d, 0xa8, 0x2c, 0x5f, 0xf9, 0x9b, 0x6c, 0x3b, 0x17, 0x70,
-    0x58, 0xbc, 0xc6, 0xf3, 0x0f, 0xea, 0x23, 0xbb, 0xb9, 0xba, 0xc5, 0xfd,
-    0xfc, 0x38, 0x72, 0x05, 0x8a, 0x73, 0xc8, 0xf0, 0xcd, 0xfb, 0xac, 0x37,
-    0x4d, 0xba, 0xc5, 0xf7, 0x27, 0x3c, 0xb1, 0x7f, 0xe6, 0x7f, 0x40, 0x52,
-    0x53, 0x05, 0x8b, 0xcd, 0xdc, 0xac, 0x5b, 0xe6, 0x23, 0x36, 0x35, 0x10,
-    0xe1, 0x87, 0xc8, 0x83, 0x3d, 0xbf, 0xfd, 0x3c, 0xc3, 0xce, 0xed, 0x83,
-    0x7e, 0x8b, 0x15, 0x88, 0xa2, 0x25, 0x7b, 0xf6, 0x7f, 0x3b, 0xf2, 0xc5,
-    0x82, 0x31, 0x5c, 0xf6, 0x3d, 0xe8, 0xe4, 0xa1, 0x6b, 0xe8, 0xfa, 0xe3,
-    0x88, 0x68, 0xc5, 0xea, 0x09, 0x8f, 0x03, 0x21, 0x62, 0xd2, 0xf0, 0xaf,
-    0x9c, 0xd7, 0x09, 0x62, 0xfb, 0xdf, 0xcd, 0x96, 0x28, 0xe7, 0x90, 0x44,
-    0x97, 0xfd, 0xac, 0xec, 0xbb, 0x7d, 0xb4, 0xb1, 0x4b, 0x16, 0x18, 0x0f,
-    0x20, 0x23, 0xca, 0x58, 0xbe, 0x66, 0x2d, 0xd6, 0x2e, 0x18, 0x7b, 0x1a,
-    0xee, 0x81, 0x95, 0x28, 0xf1, 0xc6, 0x97, 0x57, 0xbc, 0x70, 0x69, 0x62,
-    0xe6, 0x25, 0x8b, 0xbc, 0x4b, 0x17, 0xe1, 0xb4, 0x3f, 0x8b, 0x17, 0x88,
-    0x1b, 0xac, 0x56, 0xc7, 0xe6, 0x31, 0x6c, 0x17, 0xe1, 0x45, 0xff, 0x9c,
-    0x78, 0x7c, 0xfb, 0x10, 0xd6, 0x2f, 0xff, 0x77, 0xef, 0xb8, 0x63, 0xcc,
-    0x2e, 0x3a, 0xc5, 0xff, 0xfa, 0x1a, 0x9e, 0x8d, 0x14, 0x8f, 0xf2, 0x76,
-    0x89, 0x62, 0xff, 0x75, 0x37, 0x1f, 0x91, 0x62, 0xc5, 0xfc, 0x4c, 0x0e,
-    0x1e, 0x56, 0x2f, 0xff, 0x4e, 0x81, 0x9d, 0x1f, 0xd3, 0x85, 0x05, 0x8a,
-    0x31, 0x52, 0xe4, 0x64, 0x24, 0x64, 0xf3, 0x0f, 0x7b, 0x4b, 0xd2, 0xcf,
-    0x8d, 0xc3, 0x2d, 0xb7, 0x96, 0x2f, 0xd9, 0xce, 0x1f, 0xb5, 0x8b, 0x76,
-    0x61, 0xbc, 0x91, 0x2b, 0xd2, 0x39, 0x58, 0xa9, 0x3c, 0x43, 0x94, 0x5e,
-    0x72, 0x82, 0xc5, 0x4b, 0xb8, 0xa7, 0xda, 0x11, 0x50, 0xa6, 0xce, 0x8d,
-    0xdb, 0x25, 0x90, 0x6f, 0x08, 0x7e, 0xca, 0x1e, 0x70, 0x5e, 0x3d, 0xea,
-    0x24, 0x8d, 0x4b, 0x0d, 0xfd, 0x24, 0x6d, 0xa9, 0x0a, 0xa0, 0x84, 0xc9,
-    0x4f, 0x80, 0xf2, 0x38, 0x91, 0x4a, 0x89, 0x0a, 0x1f, 0x9d, 0x44, 0x37,
-    0xef, 0x9e, 0x63, 0x4c, 0x58, 0xbd, 0xbe, 0xcc, 0xb1, 0x74, 0x9d, 0x62,
-    0xfe, 0x9f, 0x7e, 0x7a, 0x62, 0xc5, 0x0c, 0xf1, 0xb7, 0x17, 0xbb, 0x6c,
-    0x58, 0xbf, 0xb3, 0xdf, 0x13, 0x41, 0x62, 0xdb, 0x98, 0x8c, 0xec, 0x65,
-    0x01, 0x19, 0x0c, 0x52, 0xc5, 0x9b, 0x47, 0x9e, 0x74, 0x3b, 0xe6, 0xe1,
-    0xe0, 0xb1, 0x7f, 0x61, 0xe2, 0x66, 0x82, 0xc5, 0xfd, 0x27, 0x7d, 0xdc,
-    0x6b, 0x17, 0xff, 0xf3, 0x7e, 0x61, 0x19, 0x80, 0x98, 0x70, 0x7f, 0x9d,
-    0x2c, 0x50, 0xd1, 0x75, 0xb9, 0x77, 0xcb, 0xaf, 0xf1, 0xaf, 0xfe, 0xe1,
-    0x9e, 0x58, 0xa3, 0x13, 0x44, 0x78, 0x6e, 0xb1, 0x8d, 0xed, 0xf7, 0x12,
-    0xc5, 0xff, 0x4f, 0x65, 0x3f, 0xf8, 0xb7, 0x58, 0xac, 0x3d, 0xb3, 0x48,
-    0x2f, 0xfd, 0x38, 0x59, 0x07, 0xfe, 0x74, 0x58, 0xbf, 0xf8, 0x98, 0x1c,
-    0xd6, 0x6f, 0xfc, 0xed, 0x62, 0xb4, 0x88, 0x4f, 0x1f, 0x5f, 0x66, 0x9c,
-    0xd5, 0x8b, 0xf7, 0xdf, 0x93, 0x05, 0x8b, 0xff, 0xcc, 0x6f, 0x33, 0xa4,
-    0xf7, 0xee, 0x08, 0xeb, 0x14, 0xc7, 0xee, 0x45, 0x14, 0x34, 0x6e, 0x9c,
-    0x8c, 0xa1, 0x35, 0x78, 0xf1, 0xf2, 0xb1, 0x7f, 0xb9, 0x25, 0xef, 0xc8,
-    0x6b, 0x15, 0x27, 0xa9, 0xe2, 0x0a, 0x58, 0xbf, 0xc6, 0xb1, 0x9c, 0x1e,
-    0x75, 0x2c, 0x54, 0x9e, 0x29, 0xa1, 0x97, 0xfc, 0x6b, 0xe8, 0x3d, 0x3c,
-    0x8d, 0x62, 0xe2, 0xeb, 0xd6, 0x2f, 0xa7, 0xee, 0x6e, 0x1e, 0xbe, 0x8e,
-    0xef, 0xfd, 0x87, 0x68, 0x47, 0x08, 0x6f, 0xf5, 0x8a, 0x74, 0x79, 0xfd,
-    0xe4, 0x8e, 0x2f, 0xde, 0xf3, 0x43, 0x8b, 0x17, 0xf8, 0xa7, 0xdd, 0xc4,
-    0xc7, 0x58, 0xbc, 0x28, 0xb1, 0x62, 0xf7, 0xb0, 0x6b, 0x16, 0xf4, 0x9b,
-    0xb1, 0x0f, 0x5b, 0x16, 0x29, 0x8d, 0xbf, 0x42, 0x6b, 0xfc, 0xfc, 0xc2,
-    0xd8, 0x28, 0x96, 0x2f, 0xf7, 0x30, 0xce, 0xe1, 0x9e, 0x58, 0xbb, 0xf8,
-    0x33, 0xec, 0xe1, 0xb5, 0x41, 0x3b, 0x91, 0x97, 0x1c, 0xa4, 0xa1, 0x4f,
-    0xe8, 0x47, 0x5f, 0xb4, 0x06, 0xc0, 0x2c, 0x5f, 0xd9, 0xd4, 0xfe, 0x78,
-    0x2c, 0x5f, 0x7e, 0x76, 0xe6, 0x1e, 0xc7, 0xca, 0x2f, 0xfd, 0xf9, 0x67,
-    0xfb, 0x9d, 0x86, 0xb1, 0x7b, 0xed, 0x05, 0x8b, 0xfe, 0x0f, 0x5e, 0x83,
-    0x97, 0xb8, 0xb1, 0x66, 0x34, 0xf6, 0x3e, 0x3b, 0x4e, 0x8b, 0xd2, 0x84,
-    0xad, 0xf3, 0xf0, 0x33, 0xac, 0x5f, 0xd2, 0x2d, 0xff, 0x3a, 0x58, 0xbf,
-    0xfb, 0xdb, 0xfd, 0xcb, 0x3d, 0xc9, 0x3a, 0xc5, 0x6e, 0x7e, 0x9d, 0x97,
-    0xdf, 0x4e, 0xef, 0x05, 0x8b, 0xe3, 0x96, 0x7b, 0x0f, 0x1c, 0x89, 0x2f,
-    0xff, 0xd3, 0xf2, 0xcf, 0x7d, 0xcc, 0x3e, 0x79, 0xbc, 0xb1, 0x73, 0xf4,
-    0x58, 0xaf, 0x1f, 0x77, 0x52, 0xad, 0x2c, 0x5f, 0xf1, 0x60, 0x3f, 0x2d,
-    0xac, 0x58, 0xa7, 0x3e, 0x8d, 0x12, 0xf0, 0x32, 0xfd, 0xef, 0xbe, 0x83,
-    0x58, 0xbf, 0xe6, 0x8f, 0xe7, 0x8a, 0x43, 0x3a, 0xc5, 0x61, 0xf3, 0x88,
-    0xaa, 0xb7, 0x55, 0x42, 0xf0, 0xdf, 0x68, 0xc3, 0x0a, 0x12, 0xb7, 0xed,
-    0xf0, 0xf3, 0xc5, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xe0, 0xe4, 0x09, 0x11,
-    0x86, 0x86, 0xff, 0x74, 0x6c, 0x28, 0x61, 0x2c, 0x5f, 0xf3, 0x40, 0x3d,
-    0x67, 0x46, 0xd2, 0xc5, 0xff, 0xf0, 0xf0, 0xfa, 0x97, 0x83, 0x73, 0x3b,
-    0xf2, 0xc5, 0x2c, 0x53, 0x9e, 0xe6, 0x94, 0x2f, 0xf1, 0x4c, 0x0d, 0xd6,
-    0x71, 0x62, 0xff, 0xcf, 0x3a, 0x81, 0xaf, 0xc0, 0xfe, 0xb1, 0x7f, 0xe2,
-    0x2c, 0xda, 0x28, 0x4e, 0xb6, 0x58, 0xbd, 0xfc, 0x84, 0xa3, 0x5f, 0x08,
-    0x4e, 0x68, 0x1a, 0x0d, 0xff, 0xbd, 0xa1, 0x43, 0x93, 0xaf, 0x4a, 0xc5,
-    0x3a, 0xa2, 0xf2, 0x33, 0xf4, 0x6d, 0xe2, 0x4d, 0xbf, 0xff, 0x9e, 0x48,
-    0x00, 0x98, 0x3f, 0xb0, 0xfc, 0x68, 0x2c, 0x5f, 0xff, 0x1c, 0xa6, 0x28,
-    0x67, 0xfe, 0xf9, 0xd9, 0x2c, 0x5e, 0x0c, 0x1c, 0x58, 0xbf, 0xe9, 0x2c,
-    0xd9, 0xf5, 0x83, 0x58, 0xa8, 0x8f, 0x5f, 0xc3, 0xf7, 0xbe, 0xda, 0x58,
-    0xbf, 0xf3, 0x9d, 0xf4, 0x59, 0xe1, 0x32, 0xc5, 0x49, 0xed, 0x78, 0x76,
-    0xe7, 0x1e, 0x22, 0x7b, 0x8f, 0xb7, 0x70, 0x25, 0x8b, 0xfe, 0xfb, 0x83,
-    0xb8, 0x79, 0xc0, 0xb1, 0x7f, 0x8a, 0x0e, 0x7c, 0xef, 0xcb, 0x17, 0xec,
-    0xd0, 0x73, 0x05, 0x8b, 0xee, 0xf7, 0x72, 0x58, 0xa1, 0xa3, 0x57, 0x06,
-    0x58, 0xec, 0x8d, 0x3c, 0x53, 0x4b, 0x16, 0x98, 0x1e, 0x9f, 0x5e, 0x8f,
-    0x5b, 0xa7, 0x02, 0x08, 0xd5, 0x6f, 0xa7, 0x7c, 0xd2, 0xc5, 0xed, 0xf3,
-    0x4b, 0x17, 0xef, 0x31, 0xde, 0x25, 0x8a, 0x30, 0xfa, 0xa4, 0x8d, 0x87,
-    0xaf, 0xf6, 0x6b, 0x1b, 0x7e, 0x41, 0x62, 0xff, 0xff, 0x9f, 0xdf, 0x68,
-    0x46, 0x67, 0xdb, 0xb0, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0xf1, 0x92, 0x42,
-    0x3c, 0x85, 0x3c, 0x58, 0xb6, 0x0d, 0x30, 0xc3, 0x97, 0x7c, 0xd0, 0x9a,
-    0xaf, 0xfb, 0xcc, 0x59, 0xcd, 0x4f, 0x16, 0x2f, 0xa1, 0x20, 0xed, 0x62,
-    0xff, 0xf6, 0x05, 0x9d, 0x1f, 0x85, 0x87, 0x3b, 0xac, 0x5f, 0xff, 0xfd,
-    0xf9, 0x21, 0x73, 0xef, 0xef, 0xe1, 0x7b, 0xe5, 0x9d, 0x33, 0x8b, 0x17,
-    0x0c, 0x6b, 0x17, 0xe9, 0x83, 0xf8, 0xeb, 0x15, 0x04, 0x59, 0x1d, 0xc8,
-    0x86, 0x2f, 0xff, 0xf3, 0x3f, 0xa6, 0x0f, 0xad, 0x84, 0x08, 0xe8, 0xec,
-    0x1b, 0xac, 0x5f, 0xff, 0xf3, 0x74, 0x7e, 0x84, 0x2e, 0x06, 0x52, 0x3f,
-    0xb4, 0x33, 0x8b, 0x17, 0xf0, 0x24, 0xb3, 0xbf, 0x2c, 0x5c, 0xc0, 0x31,
-    0x52, 0x7e, 0xc4, 0x99, 0x0f, 0xdf, 0x97, 0x93, 0x38, 0x6d, 0x57, 0xff,
-    0x83, 0x28, 0x8d, 0x61, 0xff, 0x37, 0xcd, 0x2c, 0x56, 0x2f, 0xf4, 0x3c,
-    0xac, 0x6f, 0xc7, 0x42, 0xc8, 0x45, 0x2a, 0x1f, 0x8d, 0x57, 0xbd, 0x07,
-    0x58, 0xbf, 0xef, 0x94, 0xc3, 0xec, 0x4e, 0xb1, 0x74, 0xe9, 0x62, 0x9c,
-    0xf3, 0xba, 0x1b, 0xdf, 0xfb, 0xf9, 0xb7, 0x7c, 0xcd, 0xd8, 0x35, 0x8b,
-    0xb3, 0xeb, 0x14, 0xe7, 0xb4, 0x24, 0x3a, 0xd9, 0xb8, 0x6f, 0x84, 0x6d,
-    0x63, 0x84, 0x86, 0x47, 0x07, 0xdc, 0x22, 0x1e, 0x58, 0x94, 0x50, 0xac,
-    0x3c, 0x3d, 0xbf, 0x2b, 0x1d, 0x93, 0x40, 0x94, 0x52, 0x98, 0x38, 0x87,
-    0xea, 0x42, 0x08, 0x9a, 0xba, 0x35, 0x84, 0xfb, 0x73, 0xec, 0xb1, 0x7f,
-    0x8b, 0x71, 0xbf, 0x49, 0x1a, 0xc5, 0x0c, 0xf3, 0x84, 0x31, 0x7f, 0xb8,
-    0xe7, 0x6d, 0x37, 0x16, 0x2f, 0xde, 0xf6, 0x16, 0xcb, 0x17, 0xff, 0x9f,
-    0x5f, 0x97, 0xf7, 0x1c, 0xbb, 0x82, 0xc5, 0xff, 0x9c, 0x2d, 0x61, 0xce,
-    0xc5, 0xe5, 0x8a, 0x94, 0x59, 0x61, 0x49, 0x25, 0x5f, 0xd9, 0xbf, 0xa3,
-    0xb3, 0xeb, 0x14, 0xb1, 0x5f, 0x37, 0xc0, 0x32, 0xbe, 0xdd, 0xff, 0x12,
-    0xc5, 0xff, 0xbf, 0x3b, 0x07, 0xef, 0x89, 0xa0, 0xb1, 0x52, 0x7c, 0xf1,
-    0x12, 0xde, 0x3c, 0xfd, 0x62, 0xfa, 0x77, 0xc3, 0xac, 0x5f, 0x70, 0x01,
-    0xee, 0xb1, 0x58, 0x7c, 0xdf, 0x1d, 0x0c, 0x8e, 0x96, 0x28, 0x8d, 0xdf,
-    0x51, 0x7d, 0xf4, 0x31, 0x8e, 0xb1, 0x7e, 0x34, 0x50, 0x61, 0xac, 0x5f,
-    0xe9, 0x8f, 0x33, 0xed, 0x9a, 0x58, 0xbf, 0xfb, 0xc5, 0x3e, 0x7c, 0x23,
-    0x27, 0xa2, 0xc5, 0xcf, 0xba, 0xc5, 0xec, 0xd4, 0xac, 0x5f, 0x7f, 0xf9,
-    0xda, 0xc5, 0xd8, 0x78, 0xe3, 0xc0, 0x0c, 0x72, 0xb1, 0x30, 0x57, 0x37,
-    0xfa, 0x29, 0x2c, 0x5a, 0x3d, 0x62, 0xd1, 0x2c, 0x58, 0xeb, 0x14, 0xe6,
-    0x95, 0x84, 0xe8, 0xd3, 0xd9, 0x39, 0xd5, 0xff, 0xff, 0x18, 0x4c, 0x69,
-    0x9e, 0x00, 0x65, 0x0f, 0xe7, 0x3d, 0x9a, 0x58, 0xbf, 0x60, 0x39, 0x30,
-    0x58, 0xbf, 0x39, 0xc6, 0x3c, 0x58, 0xb0, 0x20, 0x8b, 0xb2, 0x6b, 0x8e,
-    0x28, 0xbf, 0xef, 0x7f, 0x38, 0x67, 0x9f, 0x65, 0x8b, 0xfb, 0x22, 0xcd,
-    0x0d, 0xd6, 0x2a, 0x51, 0x44, 0xe7, 0x04, 0x79, 0x7f, 0xe9, 0x2e, 0xe1,
-    0xc0, 0xf6, 0x6f, 0x2c, 0x5f, 0xf1, 0x38, 0xba, 0xfe, 0x47, 0x4f, 0x96,
-    0x2f, 0xf6, 0x05, 0xdc, 0x3d, 0x21, 0x2c, 0x5f, 0xd8, 0xd1, 0x7e, 0x63,
-    0xd6, 0x2a, 0x4f, 0xa0, 0x06, 0xf7, 0xf8, 0x1a, 0x7c, 0xf8, 0xb8, 0xb1,
-    0x7b, 0x3b, 0x3a, 0xc5, 0xfd, 0x80, 0xea, 0xf3, 0x9d, 0x62, 0xa5, 0x10,
-    0x64, 0x69, 0xe1, 0xeb, 0xe8, 0xec, 0xd4, 0xac, 0x5e, 0xf7, 0x67, 0x58,
-    0xbe, 0x1c, 0xf4, 0x95, 0x8b, 0xff, 0xfd, 0xf9, 0x21, 0x37, 0xa6, 0x0f,
-    0xf6, 0x3c, 0xfb, 0x8b, 0x17, 0x8d, 0x6d, 0x2c, 0x5b, 0xc6, 0x23, 0x02,
-    0x47, 0xc6, 0x49, 0xe5, 0xfa, 0x58, 0xb4, 0x81, 0x33, 0x42, 0x87, 0x2f,
-    0x44, 0x3b, 0xff, 0x9b, 0xda, 0x11, 0xb9, 0xe7, 0x07, 0x16, 0x2f, 0xe0,
-    0x67, 0x3f, 0x9c, 0x58, 0xbb, 0x40, 0x58, 0xa7, 0x3c, 0x66, 0x2e, 0xbd,
-    0x8e, 0x35, 0x8a, 0x96, 0x52, 0x2e, 0xd0, 0xe5, 0x83, 0x58, 0xe1, 0x11,
-    0x90, 0xc3, 0xec, 0x8d, 0xc8, 0xa2, 0x8c, 0xbc, 0xf0, 0x94, 0xfc, 0x70,
-    0x00, 0x2d, 0x24, 0x2e, 0x42, 0xa7, 0xd0, 0xa4, 0xe9, 0x1b, 0x10, 0x47,
-    0x91, 0xd0, 0x8c, 0xea, 0x20, 0xbf, 0xff, 0xc3, 0x7f, 0x7e, 0x78, 0xe6,
-    0x36, 0xf3, 0xc7, 0xee, 0x0b, 0x17, 0xdf, 0xce, 0xe0, 0xb1, 0x7d, 0x9e,
-    0x0f, 0x65, 0x8b, 0xf1, 0x4b, 0xf7, 0x05, 0x8b, 0xc1, 0x04, 0x12, 0x64,
-    0x10, 0x17, 0xdb, 0xb3, 0x6e, 0x99, 0x04, 0x04, 0x61, 0xaf, 0xbf, 0xd3,
-    0xb7, 0x70, 0x13, 0x79, 0x62, 0xfd, 0x9c, 0x6d, 0x41, 0x62, 0xf9, 0xb5,
-    0x81, 0x2c, 0x56, 0x91, 0x8d, 0xc4, 0x5f, 0x1b, 0x74, 0x28, 0xbc, 0x10,
-    0x41, 0x26, 0x40, 0xf1, 0x49, 0x90, 0x3c, 0x46, 0x1a, 0xfb, 0xfb, 0xcc,
-    0x73, 0xc9, 0xd6, 0x2f, 0xcd, 0xe6, 0x20, 0x2c, 0x5f, 0xd9, 0xef, 0x89,
-    0xa0, 0xb1, 0x78, 0x20, 0x82, 0x58, 0xbd, 0xc9, 0x35, 0x22, 0x30, 0xd0,
-    0xdf, 0xa4, 0x2c, 0xfb, 0x2c, 0x54, 0xaa, 0xb5, 0xc8, 0xc7, 0x77, 0x6e,
-    0xec, 0xb7, 0xe5, 0xc4, 0x4f, 0xe4, 0xf0, 0xcc, 0x6a, 0x3d, 0x5a, 0x99,
-    0xe5, 0x6d, 0x5f, 0xef, 0xcf, 0x49, 0x29, 0xf2, 0xc5, 0xfd, 0x9d, 0xc2,
-    0x12, 0x75, 0x8b, 0xff, 0xdc, 0xfb, 0x43, 0x3e, 0xe7, 0xe4, 0xc7, 0xac,
-    0x5f, 0xce, 0x6c, 0x8d, 0x8e, 0xb1, 0x78, 0x29, 0x25, 0x8b, 0xfb, 0x7f,
-    0xce, 0xb0, 0xeb, 0x17, 0xff, 0xf7, 0xd8, 0xe7, 0x68, 0x06, 0x5d, 0x30,
-    0x79, 0xdf, 0x96, 0x2f, 0x49, 0x6d, 0x88, 0x8e, 0xe1, 0x7d, 0xff, 0xdf,
-    0x98, 0x3f, 0xb3, 0xfb, 0xc9, 0xd6, 0x2a, 0x55, 0x18, 0x40, 0xbc, 0x66,
-    0x98, 0x5f, 0xf4, 0xd6, 0x2e, 0xe4, 0x2a, 0xfa, 0x19, 0xdf, 0xb7, 0x9f,
-    0xc9, 0xd6, 0x2f, 0xfd, 0xf7, 0x88, 0x98, 0x2f, 0x67, 0xd6, 0x2f, 0x88,
-    0x7f, 0x95, 0x8b, 0xa7, 0x8b, 0x15, 0x88, 0xa2, 0xdc, 0xa5, 0x90, 0x3c,
-    0x45, 0x7b, 0x93, 0x05, 0x8b, 0xc5, 0x0e, 0x2c, 0x56, 0x1b, 0xa0, 0xc7,
-    0x6f, 0xfd, 0xf7, 0x1c, 0x97, 0xb3, 0xbf, 0x2c, 0x5e, 0xe0, 0x89, 0x62,
-    0xfa, 0x05, 0x23, 0x58, 0xbc, 0x52, 0x7e, 0x1b, 0xf0, 0xc7, 0x6f, 0xf0,
-    0x9b, 0x91, 0x14, 0x9d, 0x62, 0xb7, 0x47, 0x27, 0x1f, 0xbc, 0x65, 0x7f,
-    0xe6, 0xfb, 0xf7, 0xc9, 0x21, 0x44, 0xb1, 0x7f, 0xf7, 0xdf, 0x5f, 0x6c,
-    0xe3, 0xb6, 0xcb, 0x17, 0xf8, 0x26, 0xf6, 0x1d, 0xbb, 0x58, 0xbf, 0xef,
-    0x66, 0xb3, 0x99, 0xdf, 0x96, 0x2f, 0xfa, 0x76, 0x91, 0xe1, 0xfb, 0x95,
-    0x8b, 0xdf, 0x10, 0x16, 0x2f, 0x82, 0x6d, 0x1a, 0x33, 0xd8, 0xc3, 0xaa,
-    0x94, 0x66, 0x64, 0x24, 0xa8, 0xc4, 0xea, 0xf1, 0x03, 0xe8, 0x85, 0x18,
-    0x0d, 0xff, 0x1f, 0x0f, 0x85, 0xec, 0xdd, 0x62, 0xff, 0x1b, 0x9b, 0xcf,
-    0xe4, 0xeb, 0x15, 0xb1, 0xf7, 0x31, 0xcd, 0xf4, 0xfa, 0x4e, 0xb1, 0x7f,
-    0x13, 0x9a, 0x66, 0xff, 0x58, 0xbf, 0xe2, 0x68, 0x7b, 0xd8, 0x5b, 0x2c,
-    0x5f, 0xfb, 0x00, 0x06, 0xe3, 0x97, 0x70, 0x58, 0xbc, 0x1f, 0xd9, 0x62,
-    0xb1, 0x18, 0xff, 0x31, 0x23, 0x98, 0xe3, 0xfa, 0x8d, 0x97, 0x54, 0x4d,
-    0x76, 0xee, 0x30, 0x53, 0xc7, 0xb8, 0x50, 0xb1, 0xf1, 0x10, 0x50, 0xe9,
-    0xbb, 0x58, 0xb1, 0x7b, 0xf3, 0xd4, 0xb1, 0x7f, 0xa4, 0xb7, 0xef, 0x8d,
-    0x1e, 0xb1, 0x46, 0x1f, 0x78, 0xc5, 0xfe, 0x41, 0x7f, 0xf3, 0x74, 0xcf,
-    0xe6, 0x8a, 0x7b, 0x82, 0xc5, 0xfd, 0x30, 0xff, 0x6d, 0x1e, 0xb1, 0x74,
-    0xec, 0xb1, 0x5f, 0x44, 0x81, 0x23, 0x75, 0x19, 0x5f, 0x10, 0xb6, 0x25,
-    0x8b, 0xf3, 0x70, 0x6d, 0xba, 0xc5, 0xe7, 0xee, 0x0b, 0x15, 0x03, 0xea,
-    0x34, 0x8c, 0x05, 0x37, 0xcf, 0xe1, 0x7d, 0x62, 0xfe, 0x1f, 0x30, 0xf3,
-    0x1e, 0xb1, 0x7f, 0xf7, 0x04, 0x5a, 0xc9, 0xee, 0x12, 0x4b, 0x17, 0xd8,
-    0x36, 0x82, 0xc5, 0xe1, 0x30, 0x6b, 0x17, 0xfb, 0x3e, 0xdc, 0xfc, 0xf1,
-    0x62, 0xed, 0xbb, 0x58, 0xa1, 0x9f, 0x5f, 0x63, 0xc0, 0x33, 0xbf, 0xa4,
-    0xe6, 0x1d, 0xbc, 0xb1, 0x46, 0x23, 0xb1, 0xa1, 0x1b, 0x1c, 0x61, 0x50,
-    0x56, 0x90, 0x38, 0x60, 0x77, 0x09, 0xc8, 0x8c, 0x18, 0x8f, 0x86, 0x21,
-    0x46, 0x61, 0x7f, 0xb9, 0xfc, 0xe7, 0xb3, 0x75, 0x8b, 0xf1, 0x7b, 0xf9,
-    0x05, 0x8b, 0xe1, 0xfd, 0x82, 0x58, 0xba, 0x4d, 0x58, 0xac, 0x37, 0x8e,
-    0x49, 0x4e, 0x8b, 0x86, 0x35, 0x26, 0x4b, 0xfe, 0xc2, 0x9f, 0xfe, 0x42,
-    0x75, 0x8b, 0xed, 0xfe, 0xe1, 0x2c, 0x5d, 0xd5, 0xa5, 0x8b, 0xc1, 0xc8,
-    0x16, 0x2f, 0xfb, 0x70, 0xb3, 0xbf, 0x7a, 0x4e, 0xb1, 0x7d, 0x11, 0x49,
-    0xd6, 0x2f, 0xff, 0xff, 0xf8, 0xc2, 0xc3, 0x5f, 0xff, 0xc8, 0xf3, 0x27,
-    0x76, 0x0c, 0xcc, 0x2d, 0x9f, 0x4e, 0x2e, 0xbf, 0x16, 0x2b, 0x64, 0xf0,
-    0xcd, 0x2d, 0xec, 0xe2, 0x22, 0x53, 0x8d, 0x90, 0xf7, 0x0f, 0x42, 0x23,
-    0xbd, 0xf9, 0xd2, 0xc5, 0xff, 0xfc, 0x67, 0xa3, 0xb0, 0xcc, 0xfb, 0x16,
-    0x45, 0x09, 0xed, 0x62, 0xe6, 0x8f, 0x58, 0xa9, 0x3f, 0xbc, 0x61, 0xbf,
-    0x88, 0x5e, 0xd0, 0xa0, 0xb1, 0x7e, 0xde, 0x7f, 0x27, 0x48, 0xbf, 0x13,
-    0x11, 0x62, 0x45, 0xd9, 0xba, 0x45, 0xc1, 0x04, 0x91, 0x58, 0x88, 0x0e,
-    0x14, 0xf8, 0x94, 0x21, 0x8b, 0xf4, 0x83, 0xf9, 0xd4, 0x91, 0x18, 0x6f,
-    0x68, 0x69, 0xa5, 0x61, 0x00, 0x70, 0xec, 0xad, 0x95, 0x0c, 0x14, 0x7c,
-    0x57, 0xff, 0x0f, 0x4d, 0xb9, 0x67, 0x4d, 0x3f, 0x16, 0x2f, 0xf1, 0x67,
-    0x8a, 0x45, 0xd7, 0xac, 0x5e, 0xd9, 0xf4, 0xb1, 0x5b, 0x22, 0x70, 0xd4,
-    0x7f, 0x9b, 0xd4, 0xb2, 0xad, 0x72, 0x70, 0xed, 0xe5, 0x79, 0xb4, 0xa8,
-    0xe1, 0x43, 0x1e, 0xf4, 0x73, 0x74, 0x58, 0xb8, 0x3d, 0x2c, 0x5c, 0xdf,
-    0x58, 0xa6, 0x36, 0x1e, 0x19, 0xbf, 0xfb, 0xf2, 0x0f, 0x7f, 0x21, 0xf7,
-    0xe8, 0xb1, 0x7d, 0x3e, 0xc8, 0x2c, 0x5f, 0xfd, 0x20, 0xe6, 0x60, 0xd8,
-    0x98, 0xd5, 0x8b, 0xfe, 0xf7, 0x1b, 0xb7, 0x9e, 0xfc, 0xb1, 0x7f, 0xc4,
-    0x0f, 0xb7, 0xbc, 0xe0, 0x58, 0xbf, 0xff, 0x7d, 0xfa, 0x39, 0x0f, 0x93,
-    0xa7, 0xce, 0xf8, 0xb1, 0x7f, 0xb3, 0xa4, 0x97, 0xa1, 0xd7, 0xac, 0x5f,
-    0xed, 0xdf, 0x98, 0x38, 0x75, 0xeb, 0x17, 0x86, 0x2e, 0x2c, 0x5f, 0xec,
-    0xc2, 0x98, 0x43, 0xaf, 0x58, 0xbf, 0x8a, 0x73, 0x4c, 0x05, 0x8b, 0xff,
-    0x4e, 0xbf, 0x2f, 0xf9, 0x27, 0x58, 0xba, 0x1c, 0xc4, 0xf0, 0x77, 0x39,
-    0xd2, 0xbf, 0xce, 0x98, 0xe8, 0x87, 0xbc, 0x6e, 0x11, 0x65, 0xf7, 0xd9,
-    0xbc, 0xb1, 0x7f, 0x16, 0x1d, 0xfb, 0x82, 0xc5, 0xff, 0xe6, 0x7f, 0x49,
-    0x6e, 0xe7, 0xe0, 0xfb, 0x58, 0xa9, 0x3f, 0x9f, 0x97, 0x5f, 0xef, 0xce,
-    0x42, 0x70, 0x0b, 0x17, 0xff, 0x8b, 0x3b, 0x03, 0x71, 0xb4, 0xfd, 0x81,
-    0x62, 0x86, 0x7f, 0xbc, 0x32, 0xa8, 0x2b, 0xd4, 0xee, 0x3f, 0xc0, 0x3e,
-    0xfa, 0x13, 0x61, 0x42, 0x7a, 0xfa, 0x77, 0xc3, 0xac, 0x5f, 0x1c, 0x45,
-    0x05, 0x8b, 0xe6, 0x8a, 0x7a, 0x96, 0x2e, 0x93, 0xac, 0x5e, 0xfb, 0x43,
-    0x63, 0xe0, 0xf9, 0x19, 0x13, 0x50, 0xd1, 0x87, 0xe8, 0x41, 0xdc, 0xe1,
-    0x2c, 0x5f, 0xbe, 0x79, 0xcf, 0x2c, 0x5c, 0x2e, 0x2c, 0x56, 0x1e, 0x07,
-    0x0a, 0x2f, 0x0b, 0x06, 0xb1, 0x44, 0x89, 0x6f, 0x2c, 0x47, 0x10, 0xd4,
-    0x17, 0xa4, 0x4e, 0x8f, 0xf2, 0x26, 0x9c, 0x17, 0x28, 0xc8, 0x79, 0x0b,
-    0xeb, 0xdd, 0x03, 0x3a, 0xc5, 0xf7, 0xf6, 0xc0, 0x96, 0x2f, 0x86, 0x22,
-    0x82, 0xc5, 0xb8, 0xc7, 0x90, 0x19, 0x2d, 0xff, 0xbb, 0x03, 0x7b, 0x8e,
-    0x5d, 0xc1, 0x62, 0xe6, 0x02, 0xc5, 0xfa, 0x41, 0x84, 0x05, 0x8a, 0xc3,
-    0x7c, 0xe2, 0xf7, 0x98, 0xfd, 0xac, 0x5b, 0x71, 0x9b, 0xdc, 0x1f, 0xbf,
-    0xbc, 0x4c, 0x0c, 0x25, 0x8b, 0x46, 0xb5, 0x8b, 0xc5, 0x30, 0x58, 0xbf,
-    0xf6, 0x73, 0xd0, 0xc3, 0x4b, 0x00, 0xb1, 0x7e, 0x26, 0x06, 0x12, 0xc5,
-    0xe1, 0xe1, 0x2c, 0x51, 0x88, 0xe1, 0xeb, 0x4b, 0x06, 0x30, 0xc3, 0x9e,
-    0x3f, 0xea, 0x26, 0xac, 0x54, 0x46, 0xf0, 0xbc, 0x14, 0x61, 0x17, 0xcf,
-    0xf3, 0xb2, 0xc5, 0xff, 0x82, 0x1e, 0xa7, 0xec, 0x38, 0x1d, 0x62, 0xff,
-    0xff, 0xfe, 0xd0, 0x27, 0xdc, 0x33, 0xd0, 0xc0, 0x47, 0x61, 0x83, 0xc1,
-    0xcb, 0x6b, 0x08, 0x08, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x93,
-    0xb0, 0xf6, 0x17, 0x0c, 0xc1, 0x8b, 0x50, 0xfb, 0x99, 0x9a, 0x04, 0xfb,
-    0x86, 0x7a, 0x18, 0x08, 0xec, 0x30, 0x78, 0x39, 0x6d, 0x61, 0x01, 0x06,
-    0x17, 0xff, 0xdc, 0xec, 0xc1, 0xe0, 0xe5, 0xb5, 0x84, 0x05, 0x8a, 0xfa,
-    0x69, 0x9e, 0x87, 0xdd, 0xff, 0xff, 0x8c, 0xf4, 0x30, 0x11, 0xd8, 0x60,
-    0xf0, 0x72, 0xda, 0xc2, 0x02, 0x10, 0x5f, 0xfd, 0x9e, 0x33, 0x7f, 0xbf,
-    0xfe, 0xe0, 0x55, 0xa1, 0x65, 0x41, 0x19, 0x1c, 0x74, 0xbd, 0x3b, 0x46,
-    0x62, 0xaf, 0x2e, 0x47, 0xbd, 0xe8, 0x78, 0xde, 0x04, 0xf6, 0xb1, 0x73,
-    0x79, 0x62, 0xf1, 0x67, 0x52, 0xc5, 0xda, 0x35, 0x62, 0xe6, 0xdd, 0x62,
-    0xd9, 0x86, 0xc7, 0x71, 0x9b, 0xf1, 0xf8, 0x13, 0x76, 0xb1, 0x43, 0x4c,
-    0x9d, 0xd4, 0x4e, 0x3c, 0xc2, 0xfe, 0x50, 0x0c, 0x9a, 0xa5, 0x73, 0x4f,
-    0xb2, 0x2e, 0x4e, 0x2d, 0x5f, 0xa2, 0x83, 0xeb, 0x8b, 0x17, 0x08, 0x96,
-    0x2b, 0x0f, 0x07, 0xe5, 0x57, 0xed, 0xa7, 0xcf, 0x12, 0xc5, 0xf0, 0x7c,
-    0x9c, 0x58, 0xbf, 0x07, 0xd5, 0x25, 0x05, 0x8a, 0xdc, 0xfe, 0x7b, 0x2a,
-    0x01, 0x1d, 0xff, 0xfe, 0xfc, 0xfb, 0x8f, 0xf7, 0xd1, 0x66, 0xc6, 0x64,
-    0x9d, 0x62, 0xfb, 0x86, 0x6b, 0x16, 0x2f, 0xbf, 0xbb, 0xf1, 0x62, 0xf6,
-    0xa7, 0xb5, 0x8a, 0x94, 0x7c, 0x6c, 0x62, 0xcc, 0x3e, 0x24, 0x0c, 0x92,
-    0xff, 0xff, 0x83, 0x1f, 0xe6, 0x1e, 0xcc, 0x0b, 0x85, 0x9e, 0xf3, 0xec,
-    0xb1, 0x7f, 0xc3, 0x76, 0xe9, 0x3d, 0x1b, 0xeb, 0x17, 0x37, 0x6b, 0x16,
-    0xc5, 0x8b, 0x36, 0xc8, 0xce, 0xed, 0xa5, 0x8f, 0x3a, 0x0c, 0x5e, 0x72,
-    0xc5, 0x8b, 0xf6, 0xb4, 0xc0, 0x95, 0x8a, 0x81, 0xe1, 0xb0, 0xdd, 0x75,
-    0xaf, 0xa2, 0xb5, 0x35, 0xcd, 0xc8, 0xe3, 0x79, 0xca, 0x53, 0x39, 0xb1,
-    0x9a, 0x6e, 0xc6, 0xf3, 0xb4, 0xfa, 0xac, 0x47, 0xce, 0xcb, 0xf5, 0x26,
-    0x9e, 0xb1, 0x03, 0x5f, 0x5e, 0xd2, 0x52, 0x92, 0xf9, 0x3a, 0x1d, 0xe7,
-    0xc1, 0x47, 0x24, 0x14, 0x63, 0x01, 0xc2, 0x22, 0xe8, 0xde, 0x34, 0x58,
-    0xbe, 0xc0, 0x6a, 0x56, 0x2f, 0x04, 0x10, 0x49, 0x17, 0x98, 0x86, 0x91,
-    0x18, 0x68, 0x6f, 0xb3, 0x59, 0xe5, 0x8a, 0xfa, 0x25, 0x00, 0x87, 0xc2,
-    0xfb, 0xff, 0x8d, 0x60, 0xca, 0x5c, 0x79, 0xdf, 0x96, 0x2f, 0x0b, 0xaf,
-    0xc5, 0x8b, 0xce, 0xd0, 0x58, 0xbf, 0xfd, 0x9e, 0xf3, 0x11, 0xad, 0xe2,
-    0x60, 0x2c, 0x54, 0xa3, 0x35, 0xd1, 0xbe, 0x44, 0x43, 0x97, 0xf8, 0xb3,
-    0xfe, 0x29, 0x02, 0xc5, 0xff, 0xe8, 0x39, 0x67, 0xa4, 0x21, 0xe9, 0xa0,
-    0xb1, 0x7f, 0x7a, 0x18, 0x4e, 0x35, 0x8b, 0xff, 0x84, 0xda, 0x16, 0xd2,
-    0x68, 0x65, 0xe5, 0x8b, 0xcf, 0x17, 0x3b, 0x3f, 0x5e, 0x16, 0xdf, 0xf8,
-    0xb3, 0x69, 0xee, 0x10, 0x93, 0xac, 0x5f, 0xff, 0x85, 0x39, 0xb6, 0xa5,
-    0xe1, 0x26, 0x85, 0x9f, 0x58, 0xa2, 0x44, 0xbf, 0x90, 0x2b, 0x13, 0xad,
-    0xfc, 0x2f, 0xc3, 0x86, 0x65, 0xe2, 0x98, 0x2c, 0x5f, 0x6b, 0x4e, 0x75,
-    0x8b, 0x70, 0x66, 0xfd, 0xc7, 0x2a, 0x08, 0xa0, 0xf3, 0xd5, 0xf7, 0x0d,
-    0xff, 0x45, 0x8b, 0xb6, 0x1a, 0xc5, 0xff, 0xfb, 0xd3, 0x9b, 0x37, 0xb7,
-    0xfb, 0x68, 0x26, 0xed, 0x62, 0x8c, 0x44, 0xc9, 0xc9, 0xf8, 0x33, 0x5b,
-    0x2b, 0x6c, 0x29, 0x4f, 0xfe, 0x85, 0xe5, 0xfb, 0x59, 0xbc, 0xfd, 0x62,
-    0xff, 0xc5, 0xbf, 0xbd, 0x84, 0x53, 0x1e, 0xb1, 0x7e, 0xf3, 0x1f, 0x09,
-    0x62, 0xff, 0xf7, 0xdf, 0x5a, 0x7d, 0xb9, 0x87, 0x98, 0xf5, 0x8a, 0x94,
-    0x5b, 0x62, 0x0e, 0xe4, 0xf7, 0x8c, 0x36, 0x39, 0x62, 0xf7, 0x98, 0x6b,
-    0x17, 0x34, 0x7a, 0xc5, 0x68, 0xf6, 0xb8, 0x47, 0xd0, 0x76, 0xfd, 0xf9,
-    0x2c, 0x89, 0x62, 0xfe, 0xf6, 0x11, 0x37, 0x96, 0x2b, 0x73, 0xd4, 0xea,
-    0x28, 0xbd, 0x07, 0xea, 0x58, 0xa9, 0x3c, 0x68, 0x89, 0xaf, 0xf1, 0xbd,
-    0xfb, 0x53, 0x9d, 0xac, 0x5f, 0x01, 0xf4, 0x6a, 0x45, 0xfe, 0x96, 0xd7,
-    0xc2, 0x61, 0xac, 0x5f, 0x6b, 0x4f, 0xb2, 0xc5, 0x49, 0xfe, 0x0c, 0x91,
-    0x8d, 0x2e, 0x16, 0x2c, 0x56, 0xe7, 0x89, 0xe2, 0xdb, 0xf6, 0xbf, 0x87,
-    0x12, 0xc5, 0xfb, 0x35, 0x99, 0x12, 0xc5, 0x39, 0xe8, 0x86, 0x53, 0x7b,
-    0x69, 0x09, 0x62, 0xfb, 0xe6, 0x0e, 0x56, 0x2a, 0x4f, 0x0d, 0x87, 0xea,
-    0x0c, 0x92, 0x61, 0xc3, 0xf7, 0x25, 0xd3, 0x1a, 0x7d, 0xdc, 0x37, 0xde,
-    0x11, 0x3a, 0x86, 0x5b, 0x11, 0x14, 0x3d, 0xf8, 0xe9, 0xe6, 0x5b, 0xf3,
-    0x6b, 0x59, 0xda, 0xc5, 0xff, 0xef, 0x7d, 0xd8, 0x19, 0xa1, 0xc9, 0x41,
-    0x62, 0xff, 0xf7, 0x66, 0x76, 0x09, 0x2d, 0xdb, 0x62, 0x65, 0x8a, 0x94,
-    0x60, 0x61, 0x49, 0x24, 0xdf, 0xa7, 0x81, 0x94, 0x16, 0x2f, 0x6e, 0xf0,
-    0x58, 0xbf, 0xd3, 0xe6, 0xd6, 0xb3, 0xb5, 0x8a, 0x30, 0xf4, 0xbe, 0x3d,
-    0x7f, 0xed, 0xf3, 0x58, 0xfc, 0xfc, 0xf4, 0x58, 0xbf, 0xf3, 0x76, 0xc3,
-    0x6e, 0xf4, 0xe6, 0xac, 0x5f, 0xa7, 0xab, 0x6c, 0x09, 0x62, 0xff, 0xe6,
-    0xce, 0xfd, 0x84, 0x28, 0x67, 0x16, 0x2f, 0xa6, 0x02, 0xd2, 0xc5, 0xff,
-    0xff, 0xcc, 0xfe, 0x7f, 0xee, 0xe6, 0x41, 0xfe, 0xc5, 0xe8, 0x66, 0xb1,
-    0x62, 0xec, 0xfa, 0xc5, 0xd9, 0xd4, 0xb1, 0x51, 0x1b, 0x1f, 0x8b, 0xd7,
-    0xd1, 0x88, 0xd0, 0xa2, 0xbf, 0x38, 0x18, 0x80, 0xb1, 0x7f, 0xa7, 0xbe,
-    0x4f, 0xa4, 0x6b, 0x14, 0x03, 0xdb, 0x22, 0x7b, 0xf6, 0x73, 0x3b, 0xf2,
-    0xc5, 0xff, 0xf7, 0xf1, 0xf5, 0x0f, 0xb8, 0xb7, 0xfe, 0x01, 0x62, 0xf7,
-    0x03, 0xe1, 0x89, 0x8e, 0xe4, 0x20, 0x98, 0x87, 0xc5, 0x34, 0x35, 0x6d,
-    0xfd, 0x91, 0x9d, 0x07, 0xe8, 0x24, 0x5b, 0xc4, 0x4f, 0x4a, 0x04, 0xbb,
-    0x90, 0x58, 0xbd, 0xb0, 0xb8, 0xb1, 0x74, 0xc4, 0xb1, 0x7f, 0x9c, 0x9b,
-    0xdf, 0xc3, 0xac, 0x53, 0x1f, 0x49, 0x0f, 0xf8, 0x62, 0xfe, 0x83, 0xf9,
-    0xca, 0x0b, 0x17, 0xf7, 0x1d, 0xf6, 0x7f, 0xac, 0x5b, 0x52, 0x7b, 0x70,
-    0x2d, 0xbf, 0x44, 0x53, 0xee, 0x2c, 0x5f, 0xff, 0xee, 0x4b, 0xfd, 0xe0,
-    0x53, 0xb9, 0x85, 0x80, 0x17, 0x16, 0x2f, 0xff, 0xff, 0xfa, 0x79, 0x3e,
-    0xdb, 0x02, 0xd6, 0x7d, 0x83, 0xe6, 0x1a, 0xc4, 0x09, 0x29, 0x8b, 0xf2,
-    0xb1, 0x7c, 0x26, 0xcd, 0x96, 0x2f, 0x1f, 0x36, 0x58, 0xbd, 0x07, 0xe8,
-    0x47, 0x82, 0x19, 0x1d, 0xfb, 0x9f, 0x6d, 0xe5, 0x62, 0xfc, 0xdb, 0x04,
-    0xd0, 0x58, 0xa9, 0x54, 0x1f, 0xb1, 0x3e, 0x8a, 0x49, 0x87, 0xd0, 0xd6,
-    0x08, 0xd4, 0x32, 0x9b, 0xfb, 0xbe, 0x61, 0xdf, 0xeb, 0x17, 0xfd, 0xcf,
-    0xcb, 0x6b, 0x59, 0xda, 0xc5, 0xf4, 0x9d, 0xbe, 0xb1, 0x7f, 0xff, 0xa1,
-    0xec, 0x2f, 0x70, 0xce, 0x73, 0x35, 0x84, 0xd0, 0x58, 0xb1, 0xa6, 0x22,
-    0x0f, 0xb2, 0x2a, 0xc4, 0x74, 0xbc, 0x2f, 0x6f, 0x81, 0xec, 0xd9, 0x62,
-    0x96, 0x2d, 0xd4, 0xb1, 0x47, 0x34, 0x21, 0x86, 0x54, 0x9f, 0x39, 0xd1,
-    0x6f, 0xff, 0xf0, 0x04, 0xc5, 0xb8, 0x53, 0xa2, 0xce, 0xe1, 0xe9, 0xed,
-    0x62, 0xff, 0xe8, 0xc1, 0x94, 0x8b, 0x7c, 0x35, 0xf4, 0xb1, 0x7b, 0x4d,
-    0xc5, 0x8b, 0xb0, 0x25, 0x8a, 0x93, 0xfe, 0x1a, 0x4f, 0x07, 0x6f, 0xa5,
-    0xb5, 0xc5, 0x8b, 0xde, 0xfc, 0xac, 0x5f, 0x67, 0xbe, 0xeb, 0x15, 0x88,
-    0x8f, 0xf9, 0x73, 0x11, 0x10, 0xed, 0xff, 0xf6, 0x11, 0xa6, 0x07, 0xe7,
-    0xfb, 0x9b, 0xf7, 0x58, 0xbf, 0x7d, 0x8b, 0xdc, 0x58, 0xb7, 0xd6, 0x29,
-    0x62, 0xe9, 0x2d, 0xcf, 0x19, 0x8a, 0x38, 0x25, 0x58, 0x8d, 0x2f, 0xc2,
-    0x66, 0xfe, 0x29, 0x8b, 0x33, 0x75, 0x8b, 0xfb, 0x6f, 0xb7, 0xb5, 0x2b,
-    0x17, 0xbd, 0x3f, 0x58, 0xbf, 0xa1, 0x91, 0xec, 0x40, 0x58, 0xac, 0x3c,
-    0xdf, 0x0e, 0xde, 0x86, 0x71, 0x62, 0xf4, 0xf7, 0xc5, 0x8b, 0xfc, 0x3f,
-    0xcc, 0x4c, 0xdd, 0xac, 0x5d, 0xee, 0x2c, 0x5f, 0xfc, 0xfe, 0xcc, 0x3c,
-    0xf3, 0x42, 0xf2, 0xc5, 0x39, 0xee, 0x7c, 0x62, 0xfb, 0x82, 0x28, 0x2c,
-    0x5f, 0x89, 0xbd, 0x09, 0x58, 0xbf, 0xc7, 0xee, 0x1e, 0xc8, 0xb8, 0xb1,
-    0x5b, 0xa2, 0x8b, 0xb2, 0x1e, 0x11, 0x86, 0x4f, 0x7b, 0xe0, 0xe8, 0xb1,
-    0x5b, 0x27, 0x9c, 0x31, 0xdd, 0x0f, 0x14, 0x66, 0x7d, 0x48, 0x17, 0xbb,
-    0x68, 0xf5, 0x8b, 0xfd, 0xef, 0xb1, 0xf5, 0x9b, 0x2c, 0x57, 0xcf, 0x58,
-    0x04, 0x37, 0xa3, 0x9c, 0xd5, 0x8b, 0xfb, 0xd3, 0xd0, 0x9b, 0xb5, 0x8a,
-    0x58, 0xa9, 0x3d, 0xde, 0xc8, 0x63, 0x8c, 0x2a, 0x0b, 0xa4, 0xe3, 0x8c,
-    0x31, 0xc9, 0xf4, 0x5d, 0xf7, 0xc6, 0x8f, 0xbc, 0xa1, 0x55, 0xe7, 0xfb,
-    0xd1, 0x30, 0x16, 0x2f, 0xc2, 0x21, 0xb6, 0xcb, 0x17, 0xff, 0xdf, 0x76,
-    0x06, 0x14, 0xf7, 0xcc, 0xef, 0xcb, 0x16, 0x37, 0x11, 0x2e, 0x71, 0xef,
-    0x14, 0xdf, 0xfb, 0x40, 0x3b, 0xf0, 0x3e, 0x4e, 0x2c, 0x5f, 0x75, 0x7f,
-    0x3a, 0x2c, 0x56, 0x1f, 0x43, 0x20, 0x5e, 0x9e, 0xe3, 0xd6, 0x2f, 0xb8,
-    0x4e, 0x6a, 0xc5, 0x68, 0xf1, 0x3c, 0x43, 0x7d, 0x83, 0x68, 0x2c, 0x50,
-    0xcf, 0x10, 0xd2, 0x2b, 0xf9, 0xa1, 0xee, 0x49, 0xab, 0x17, 0xe9, 0x76,
-    0xf7, 0x16, 0x2f, 0xa0, 0xfd, 0xc1, 0x62, 0xe9, 0xd7, 0xcf, 0x2d, 0x89,
-    0xec, 0x6f, 0xd1, 0x4c, 0x13, 0xd5, 0xff, 0xe2, 0x31, 0xe4, 0x7f, 0xc3,
-    0xff, 0x38, 0xb1, 0x7c, 0x72, 0x98, 0x96, 0x2e, 0x9e, 0x8b, 0x17, 0xff,
-    0xdf, 0x78, 0x3e, 0x98, 0x1e, 0x29, 0x3f, 0x16, 0x2f, 0x4e, 0x81, 0x28,
-    0x8b, 0xc2, 0x3d, 0xc6, 0x6b, 0x13, 0x15, 0xf4, 0x35, 0x6e, 0x8f, 0xe2,
-    0xc5, 0xff, 0x73, 0x7f, 0xb0, 0xe3, 0x7e, 0xb6, 0x36, 0x58, 0xa3, 0x51,
-    0x1c, 0xc5, 0x1e, 0x1b, 0xa9, 0x5c, 0x0d, 0x84, 0x27, 0xb2, 0x15, 0x0f,
-    0x0c, 0x96, 0x8f, 0x3a, 0xe2, 0x02, 0xc5, 0xfd, 0xdc, 0x30, 0xf3, 0xba,
-    0xc5, 0xf4, 0x69, 0x1d, 0x1d, 0x1c, 0xb1, 0x7d, 0x9a, 0x93, 0xac, 0x5b,
-    0x61, 0x9e, 0xa7, 0x0c, 0xaf, 0xd1, 0x48, 0xda, 0x25, 0x8b, 0xf9, 0xfc,
-    0x0c, 0x87, 0x16, 0x2f, 0xf4, 0x03, 0xe0, 0x3f, 0x20, 0x58, 0xbf, 0x3f,
-    0x03, 0xec, 0x0b, 0x17, 0xe2, 0xcf, 0x49, 0xd6, 0x2f, 0xcc, 0xfe, 0x92,
-    0x58, 0xbe, 0xe7, 0xf3, 0x8b, 0x16, 0x98, 0x22, 0x6d, 0xca, 0xfe, 0x4e,
-    0x22, 0x6b, 0xb3, 0xa2, 0xc5, 0xff, 0x14, 0xf9, 0xf4, 0xfe, 0x12, 0xc5,
-    0x6e, 0x7a, 0x2e, 0x33, 0x7f, 0x9f, 0xcf, 0xa6, 0xda, 0x56, 0x2a, 0x4f,
-    0x55, 0x88, 0xaf, 0x33, 0x76, 0xb1, 0x46, 0x2a, 0x4d, 0x81, 0x57, 0x65,
-    0xda, 0x86, 0x8f, 0xe1, 0xcf, 0xd0, 0x82, 0xfc, 0xc3, 0xea, 0xcd, 0x2c,
-    0x5f, 0xed, 0x66, 0xff, 0x9e, 0x98, 0xb1, 0x5d, 0x62, 0xbd, 0x99, 0x17,
-    0x1c, 0x21, 0x1e, 0x53, 0xb1, 0xd9, 0xd8, 0xae, 0xf1, 0xc5, 0xc5, 0x8b,
-    0xe7, 0x3e, 0x12, 0xc5, 0xa5, 0x8d, 0xff, 0x87, 0xaf, 0xf3, 0xf8, 0x3d,
-    0x4f, 0xe5, 0x62, 0xfd, 0x21, 0x93, 0x41, 0x62, 0xff, 0xf6, 0x98, 0xbd,
-    0x80, 0x8e, 0x91, 0x8e, 0x56, 0x2f, 0xfe, 0x29, 0x00, 0xc5, 0x3b, 0x4f,
-    0x70, 0x58, 0xbf, 0xa1, 0xa9, 0x83, 0x69, 0x62, 0xfd, 0xee, 0x75, 0xa6,
-    0xf9, 0x62, 0xc7, 0x58, 0xa9, 0x3c, 0x2c, 0x30, 0xbd, 0xe9, 0x09, 0x62,
-    0xf7, 0xc3, 0xd2, 0xc5, 0x40, 0xde, 0xf8, 0x7a, 0xf7, 0xb0, 0x6b, 0x17,
-    0xfc, 0x2d, 0x1a, 0xcf, 0xc7, 0xe8, 0xb1, 0x7e, 0xd0, 0x0e, 0xfc, 0x58,
-    0xb8, 0x06, 0x47, 0x1f, 0x28, 0x67, 0x96, 0xce, 0xd1, 0x6a, 0x50, 0x82,
-    0xbe, 0x6d, 0xcb, 0x16, 0x2e, 0x9e, 0xd6, 0x2f, 0x1e, 0x77, 0x58, 0xbf,
-    0x7d, 0xf3, 0xbf, 0x2c, 0x5f, 0xff, 0xff, 0xe6, 0xe7, 0xda, 0x1b, 0xfd,
-    0xfc, 0x20, 0x1d, 0xa1, 0x9d, 0x1f, 0xcf, 0xfd, 0xda, 0x0b, 0x15, 0xb2,
-    0x3c, 0x70, 0x61, 0xc7, 0x88, 0xa6, 0x86, 0xaa, 0xbb, 0xb5, 0xd3, 0xc3,
-    0x58, 0x8b, 0x7d, 0x18, 0x9d, 0x2c, 0x5e, 0xe9, 0x9a, 0x58, 0xbd, 0xec,
-    0x02, 0xc5, 0xfd, 0xc9, 0x8a, 0x02, 0x1a, 0xc5, 0x61, 0xf6, 0x00, 0x7c,
-    0x31, 0xdb, 0xee, 0x71, 0xfa, 0x2c, 0x5f, 0xff, 0xb0, 0x8d, 0x6e, 0x7d,
-    0x9c, 0x07, 0x9e, 0xe0, 0xb1, 0x7f, 0xf1, 0xc5, 0xa9, 0x33, 0x35, 0xbc,
-    0xe2, 0xc5, 0x4a, 0x30, 0x77, 0x25, 0x75, 0x6b, 0xf0, 0xba, 0xfd, 0x3f,
-    0x16, 0x2f, 0xff, 0xfc, 0x23, 0x7b, 0xf0, 0x98, 0x30, 0xf5, 0xc1, 0x36,
-    0x85, 0xb4, 0x9a, 0xb1, 0x79, 0xe2, 0xe6, 0x22, 0x8f, 0x45, 0xd7, 0xff,
-    0xb5, 0x17, 0xdc, 0x82, 0x6f, 0x86, 0x5e, 0x58, 0xbe, 0x83, 0x7b, 0x8b,
-    0x15, 0x87, 0xe1, 0x12, 0x6d, 0xff, 0xbb, 0xdd, 0xf4, 0x79, 0xc2, 0x1a,
-    0xc5, 0xc1, 0xe7, 0xd3, 0x06, 0xe4, 0x29, 0x3c, 0x45, 0x7f, 0xef, 0xbf,
-    0x7c, 0xc2, 0x37, 0x09, 0x62, 0xff, 0xfe, 0x78, 0xb9, 0xc1, 0x36, 0x85,
-    0xb4, 0x9a, 0x19, 0x79, 0x62, 0xdc, 0xc4, 0x70, 0xee, 0x85, 0xf3, 0xfb,
-    0xe3, 0x91, 0x4a, 0xc5, 0xff, 0x38, 0xff, 0x30, 0xce, 0xfc, 0xb1, 0x7e,
-    0x9e, 0x38, 0x3b, 0x58, 0xb9, 0xba, 0x2c, 0x5d, 0xbc, 0xf4, 0x3c, 0x20,
-    0xca, 0x6f, 0xff, 0x49, 0xbc, 0xec, 0x04, 0xc7, 0x7f, 0xca, 0xc5, 0x8d,
-    0x94, 0xc6, 0x46, 0x43, 0x8f, 0x9f, 0x31, 0xac, 0x4e, 0x49, 0xa3, 0x4f,
-    0xbf, 0x79, 0xbc, 0x29, 0x58, 0xbf, 0xbf, 0x22, 0xeb, 0xcc, 0x1a, 0xc5,
-    0xff, 0xfd, 0xf7, 0xf7, 0xda, 0x01, 0x8d, 0xb6, 0x1f, 0xdc, 0xeb, 0x17,
-    0xfe, 0x7f, 0x43, 0x01, 0xc2, 0xc0, 0x2c, 0x54, 0x19, 0x66, 0xe3, 0x34,
-    0xc2, 0x83, 0x53, 0x3b, 0x46, 0x79, 0x63, 0xd1, 0x2b, 0xe9, 0xe3, 0xf0,
-    0xf0, 0x29, 0xc4, 0xbe, 0x14, 0x78, 0xa0, 0x46, 0xbd, 0x17, 0xaf, 0x02,
-    0x7b, 0x58, 0xba, 0x7b, 0x58, 0xa7, 0x36, 0xc0, 0x1e, 0xbf, 0xc1, 0x82,
-    0x4b, 0x3b, 0xf2, 0xc5, 0xdd, 0xca, 0xc5, 0x70, 0xf3, 0x63, 0x8d, 0x6f,
-    0xf7, 0xca, 0x7b, 0x79, 0xfa, 0xc5, 0xfc, 0xde, 0x00, 0x65, 0x05, 0x8b,
-    0x09, 0x62, 0xb7, 0x3f, 0x4f, 0x99, 0x86, 0x5f, 0x7e, 0xdf, 0xf2, 0xf1,
-    0xeb, 0x15, 0x1b, 0xbb, 0x38, 0xd9, 0xa4, 0xee, 0x42, 0x37, 0xa1, 0x96,
-    0xe4, 0xbe, 0xa3, 0x5b, 0x7b, 0x84, 0x0b, 0xca, 0x97, 0x8f, 0x6c, 0xd4,
-    0x63, 0x07, 0x84, 0x6f, 0xc8, 0x5a, 0x7a, 0x60, 0xa7, 0x49, 0xb9, 0x38,
-    0x6f, 0xe8, 0x53, 0x0a, 0x96, 0xb9, 0xd2, 0x30, 0xf8, 0xe6, 0xd0, 0xe1,
-    0x33, 0xd4, 0x63, 0x7f, 0xe6, 0x71, 0x8b, 0xdc, 0xdb, 0x02, 0x58, 0xbb,
-    0xac, 0x25, 0x8b, 0xf7, 0x30, 0xd9, 0xe2, 0xc5, 0xfa, 0x3b, 0x09, 0x8d,
-    0x58, 0xbf, 0x76, 0x76, 0x20, 0x2c, 0x5f, 0xef, 0x38, 0x5e, 0xe3, 0x69,
-    0x62, 0xda, 0x58, 0xb4, 0x16, 0x2c, 0xdf, 0x34, 0x8c, 0x25, 0x7f, 0xdc,
-    0x30, 0x51, 0x37, 0x50, 0x8d, 0x58, 0xbf, 0xfc, 0xd1, 0xfb, 0xfd, 0xc8,
-    0x5e, 0x83, 0x81, 0x62, 0xff, 0xf7, 0x3c, 0x2d, 0x8c, 0x13, 0x0f, 0xed,
-    0x12, 0xc5, 0x18, 0x9d, 0x84, 0x95, 0xf6, 0x53, 0xa5, 0x96, 0x25, 0x24,
-    0x11, 0x27, 0x5f, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xd2, 0xff, 0x9d, 0x2c,
-    0x54, 0x79, 0xe8, 0x44, 0x53, 0x7f, 0x64, 0x4c, 0xc5, 0xb2, 0xc5, 0xfd,
-    0xd5, 0xbf, 0xe7, 0xbe, 0xa5, 0x8b, 0xe6, 0xe3, 0xe9, 0x62, 0x8c, 0x44,
-    0x3b, 0x97, 0x7c, 0xde, 0xff, 0x16, 0xb3, 0xb8, 0x49, 0x2c, 0x5f, 0x19,
-    0x8d, 0x1e, 0xb1, 0x58, 0x7b, 0x20, 0x33, 0xbf, 0xf8, 0xbe, 0xdc, 0x2c,
-    0x34, 0xdc, 0x8f, 0x58, 0xbf, 0xed, 0x47, 0x3f, 0xf1, 0xbb, 0x02, 0xc5,
-    0x4a, 0x29, 0xb0, 0x85, 0x92, 0x2f, 0xf4, 0xeb, 0x53, 0x06, 0xfa, 0xc5,
-    0xcf, 0x8b, 0x17, 0xe0, 0xcb, 0xf9, 0xda, 0xc5, 0x6e, 0x7e, 0x7a, 0x33,
-    0x00, 0xb5, 0xfb, 0x99, 0xa0, 0x47, 0xac, 0x5f, 0xff, 0x9f, 0xd2, 0x7c,
-    0xef, 0xd2, 0x70, 0xf4, 0xc0, 0x58, 0xbc, 0x4c, 0x35, 0x8b, 0xff, 0xa4,
-    0x5b, 0xe7, 0x7e, 0x8c, 0x08, 0x20, 0x96, 0x29, 0xcf, 0xa8, 0x87, 0x2f,
-    0xf7, 0xe7, 0xbe, 0xa9, 0x78, 0xe5, 0x8b, 0xfe, 0x7f, 0x71, 0xfd, 0x3e,
-    0xe2, 0xc5, 0xfe, 0xfe, 0x6d, 0xf9, 0x10, 0x6b, 0x17, 0xfd, 0x23, 0x2c,
-    0xf7, 0x0f, 0x2b, 0x17, 0xff, 0x67, 0xbf, 0x90, 0x2c, 0x00, 0xb8, 0xb1,
-    0x7d, 0xa7, 0xf0, 0x96, 0x2f, 0x69, 0x80, 0xb1, 0x4e, 0x78, 0x01, 0x91,
-    0xd7, 0xd1, 0x4d, 0xe8, 0x42, 0x5f, 0x44, 0x58, 0x05, 0x8b, 0xff, 0xf7,
-    0x30, 0x5d, 0x7e, 0x05, 0x8f, 0xd3, 0x21, 0x24, 0xb1, 0x52, 0x8a, 0x6d,
-    0x8a, 0x3c, 0x47, 0x7f, 0xdc, 0x9d, 0x7a, 0x63, 0x06, 0xeb, 0x17, 0x4b,
-    0xac, 0x5f, 0xa7, 0x5b, 0x4e, 0xeb, 0x15, 0xb2, 0xbe, 0x68, 0x16, 0x0e,
-    0x18, 0x31, 0xe4, 0x11, 0x1d, 0x68, 0xe4, 0xe6, 0xc5, 0x1c, 0x27, 0x0c,
-    0x3a, 0x1e, 0x47, 0x0b, 0x5e, 0xff, 0xe5, 0x62, 0xef, 0xca, 0xc5, 0x61,
-    0xb4, 0x61, 0xdb, 0xff, 0xfb, 0x3e, 0x66, 0x1d, 0xff, 0x26, 0x73, 0x98,
-    0x40, 0x58, 0xbf, 0xf9, 0xf5, 0x30, 0xfc, 0xc4, 0x42, 0x35, 0x62, 0xbe,
-    0x8a, 0x2e, 0x2e, 0x5f, 0xf4, 0xc4, 0x53, 0xcc, 0x98, 0x2c, 0x5f, 0xfb,
-    0x98, 0x2e, 0xbe, 0x13, 0x1e, 0x43, 0x58, 0xad, 0x8f, 0xfc, 0xe7, 0x17,
-    0x4c, 0x4b, 0x16, 0x8e, 0x58, 0xa3, 0x0d, 0x6e, 0xe3, 0x17, 0xf1, 0xbe,
-    0x9f, 0xcf, 0x16, 0x2f, 0xfb, 0x85, 0x9e, 0xe4, 0xeb, 0x65, 0x8b, 0xfd,
-    0x39, 0xf0, 0xe7, 0x5b, 0x2c, 0x5f, 0xe1, 0xf5, 0x72, 0x62, 0x16, 0x96,
-    0x2c, 0x75, 0x8b, 0xee, 0xfd, 0x9c, 0x58, 0xbf, 0x7e, 0x43, 0x2d, 0x96,
-    0x2a, 0x07, 0x9d, 0x11, 0x25, 0xfb, 0xf3, 0xb9, 0x32, 0xc5, 0xf9, 0xfb,
-    0xe3, 0x76, 0xb1, 0x7f, 0xfe, 0xcf, 0x72, 0x4f, 0xdf, 0x1c, 0x7f, 0xc7,
-    0x35, 0x62, 0xfb, 0x8f, 0xad, 0x96, 0x28, 0xc4, 0xd4, 0x25, 0x81, 0xc8,
-    0xfe, 0x50, 0x45, 0x5c, 0x57, 0xbf, 0xd8, 0x3c, 0xd4, 0x27, 0x4b, 0x17,
-    0xbe, 0xfe, 0x58, 0xa9, 0x56, 0x81, 0x05, 0x07, 0x23, 0x88, 0xbf, 0x47,
-    0x4c, 0x6a, 0x08, 0xe2, 0x78, 0xac, 0x19, 0x9d, 0xf9, 0xbf, 0x9d, 0xf9,
-    0x62, 0xff, 0xd9, 0x84, 0x69, 0x66, 0x83, 0xf2, 0xc5, 0xff, 0x9b, 0xdc,
-    0x9c, 0x21, 0xfe, 0x56, 0x2f, 0xb7, 0xfc, 0x89, 0x62, 0xbe, 0x7c, 0x3e,
-    0x3d, 0xbf, 0xe1, 0x4c, 0x59, 0xce, 0x64, 0x7a, 0xc5, 0xff, 0x98, 0xb6,
-    0x0b, 0x08, 0x7f, 0x95, 0x8b, 0x9f, 0x65, 0x8a, 0xc3, 0xd7, 0x23, 0xfb,
-    0xfb, 0xdc, 0x0c, 0xa7, 0x75, 0x8b, 0xf1, 0x64, 0x53, 0x1e, 0xb1, 0x52,
-    0x7b, 0x62, 0x30, 0xbf, 0xbb, 0x87, 0x03, 0x98, 0xf5, 0x8a, 0xd1, 0xea,
-    0x88, 0x86, 0xff, 0x82, 0x62, 0xdb, 0x8f, 0xdf, 0x96, 0x2f, 0x6f, 0x31,
-    0xeb, 0x17, 0xfa, 0x2f, 0xb6, 0xb4, 0xe3, 0x58, 0xac, 0x3d, 0x66, 0x21,
-    0xbf, 0xcd, 0xd8, 0x7a, 0x73, 0xe2, 0xc5, 0xfc, 0xc5, 0xb1, 0xdb, 0xcb,
-    0x14, 0x47, 0xc7, 0xc3, 0x5b, 0xfb, 0x09, 0xc7, 0x84, 0xb1, 0x7b, 0xec,
-    0x75, 0x8b, 0xff, 0xd9, 0xee, 0x31, 0xf5, 0x8f, 0xf9, 0x1a, 0xc5, 0x41,
-    0x12, 0x2e, 0x56, 0x43, 0xb7, 0xe0, 0xf5, 0x9d, 0x31, 0x62, 0xc7, 0x58,
-    0xb0, 0xfe, 0x6f, 0x48, 0xae, 0xff, 0x16, 0x6d, 0xef, 0x49, 0xd6, 0x2a,
-    0x4f, 0x68, 0x89, 0xaa, 0x0b, 0xa3, 0xa3, 0x29, 0xc8, 0x50, 0x1a, 0x45,
-    0x14, 0x25, 0x35, 0x0d, 0x0f, 0x91, 0x14, 0x24, 0xb9, 0x08, 0x3f, 0x42,
-    0xc8, 0x38, 0x62, 0xdf, 0x45, 0x09, 0x8f, 0x58, 0xbf, 0xa2, 0x83, 0xea,
-    0x11, 0xa2, 0xc5, 0xd1, 0xb7, 0x5a, 0xb1, 0x7b, 0x8e, 0x12, 0xc5, 0xfe,
-    0x35, 0x83, 0x90, 0x06, 0x75, 0x8b, 0xfd, 0x07, 0xd4, 0x33, 0xec, 0xb1,
-    0x7d, 0x91, 0x37, 0x96, 0x2f, 0xef, 0x72, 0x28, 0x31, 0x2c, 0x5f, 0x9b,
-    0xbc, 0xfb, 0x2c, 0x54, 0x9e, 0xb8, 0x8b, 0xe8, 0xc4, 0xde, 0xba, 0xea,
-    0x6b, 0x84, 0x46, 0x8f, 0x44, 0x6f, 0xf3, 0x32, 0x7a, 0xa1, 0xaa, 0x0f,
-    0xd4, 0x74, 0x36, 0x89, 0x62, 0xff, 0x6f, 0xf7, 0xf1, 0xb2, 0x4b, 0x17,
-    0x67, 0x6b, 0x17, 0xa7, 0x5c, 0x58, 0xa9, 0x36, 0xa7, 0x18, 0xbf, 0xd0,
-    0x72, 0x63, 0x7e, 0xeb, 0x17, 0xff, 0xa4, 0x7f, 0x11, 0xa1, 0xc8, 0xfe,
-    0x2e, 0x2c, 0x5a, 0x3c, 0xc4, 0xc2, 0xc6, 0xd5, 0xd9, 0x00, 0x66, 0x77,
-    0x66, 0xcb, 0x14, 0x62, 0x70, 0x13, 0x18, 0xf6, 0x25, 0x5f, 0xdb, 0x72,
-    0x62, 0x16, 0x96, 0x2f, 0xe9, 0xea, 0xdf, 0xf3, 0xb2, 0xc5, 0xef, 0x37,
-    0x16, 0x2f, 0xf8, 0x50, 0x07, 0xe5, 0xcb, 0x65, 0x8a, 0xc4, 0x5d, 0x9a,
-    0x62, 0xe6, 0x64, 0x3b, 0x77, 0x5c, 0x65, 0x8b, 0xff, 0xff, 0x8b, 0x7c,
-    0x29, 0x0b, 0xc6, 0xb7, 0x07, 0x2d, 0xaf, 0x84, 0xc3, 0x58, 0xb9, 0xbb,
-    0x58, 0xb7, 0xa5, 0x11, 0x9c, 0x74, 0xbe, 0xc3, 0xcc, 0x7a, 0xc5, 0xfb,
-    0x39, 0x25, 0x2b, 0x17, 0xfc, 0x18, 0x98, 0x38, 0x8c, 0x07, 0x96, 0x2f,
-    0x98, 0x62, 0x35, 0xcf, 0x94, 0x44, 0xd5, 0x29, 0xca, 0x3c, 0x2a, 0x78,
-    0x50, 0x28, 0x45, 0x5c, 0xfa, 0x58, 0xbe, 0x80, 0x82, 0xc5, 0x8b, 0xcc,
-    0x28, 0x96, 0x2f, 0xd2, 0x2d, 0xc4, 0x75, 0x8a, 0x1a, 0x20, 0xfb, 0x17,
-    0x22, 0x40, 0xc7, 0xae, 0xc1, 0x2c, 0x5c, 0xe4, 0xb1, 0x7d, 0x09, 0x2d,
-    0xd6, 0x28, 0x66, 0xe7, 0x05, 0xaf, 0xfc, 0xff, 0x21, 0x45, 0xf9, 0xe9,
-    0x8b, 0x16, 0x89, 0x62, 0xfb, 0xad, 0x69, 0xed, 0x62, 0xd2, 0x46, 0xef,
-    0xc2, 0x74, 0x62, 0x30, 0x64, 0x81, 0xdf, 0x2f, 0xa4, 0x18, 0x4b, 0x17,
-    0xc5, 0xcf, 0x3a, 0xc5, 0x41, 0xbe, 0x09, 0x1c, 0x7b, 0x39, 0x0b, 0x43,
-    0x61, 0x5b, 0xbc, 0x65, 0xfd, 0xc2, 0x81, 0xe7, 0x05, 0xa3, 0xe1, 0xc5,
-    0x14, 0x30, 0x75, 0x2f, 0x88, 0xf3, 0xb4, 0x4d, 0x2b, 0x38, 0x11, 0xd5,
-    0x94, 0x3c, 0x79, 0x1e, 0x78, 0xa1, 0x93, 0xd0, 0xf8, 0x28, 0xc4, 0x63,
-    0x8b, 0xc3, 0x21, 0xbe, 0x3c, 0x6a, 0xeb, 0x91, 0xa2, 0xc5, 0xde, 0xe2,
-    0xc5, 0x39, 0xe6, 0xc4, 0x6b, 0x7c, 0x1c, 0x85, 0xc5, 0x8b, 0x81, 0xe5,
-    0x8b, 0xfb, 0x43, 0xfe, 0x6b, 0x65, 0x8b, 0x09, 0x62, 0xe0, 0x7d, 0x62,
-    0xfb, 0x5a, 0xce, 0x2c, 0x5d, 0x91, 0x2c, 0x5a, 0x06, 0x23, 0x4b, 0x62,
-    0x5c, 0x18, 0xdc, 0xc0, 0xe2, 0x4c, 0x30, 0x19, 0x1d, 0xff, 0x70, 0x5a,
-    0x03, 0x8f, 0xf2, 0xb1, 0x7d, 0xe6, 0x2c, 0x58, 0xbe, 0xea, 0x92, 0x82,
-    0xc5, 0x39, 0xe3, 0x06, 0x43, 0x7c, 0x4d, 0xee, 0x2c, 0x5e, 0xd3, 0x74,
-    0x58, 0xbf, 0xec, 0xea, 0x67, 0x18, 0xbd, 0xc5, 0x8b, 0xf6, 0x87, 0x98,
-    0x4b, 0x17, 0xff, 0xa7, 0x73, 0x39, 0xcc, 0xfb, 0xf0, 0x5b, 0x2c, 0x5f,
-    0x1b, 0xa6, 0x09, 0x62, 0xff, 0xcf, 0x9f, 0x9e, 0x9c, 0xfc, 0xf6, 0xb1,
-    0x58, 0x7c, 0xd1, 0xe4, 0xb7, 0xf7, 0x7a, 0x17, 0x7e, 0x82, 0xc5, 0xfc,
-    0x16, 0x10, 0xff, 0x2b, 0x17, 0xfb, 0x83, 0x29, 0x08, 0x78, 0xb1, 0x66,
-    0xec, 0xf8, 0xbe, 0x5d, 0x74, 0xec, 0xb1, 0x58, 0xa9, 0x42, 0x22, 0x2d,
-    0x0f, 0xb1, 0xe1, 0x13, 0xf2, 0x16, 0x82, 0x24, 0x0a, 0x12, 0x81, 0x94,
-    0x5f, 0xf6, 0xfd, 0xf1, 0xe2, 0x29, 0x1a, 0xc5, 0xff, 0xdc, 0xd6, 0x6f,
-    0xf9, 0xd4, 0xfe, 0x56, 0x2f, 0xbd, 0xec, 0xd9, 0x62, 0x89, 0x14, 0xbe,
-    0x3c, 0x09, 0x16, 0xfe, 0x69, 0x06, 0x77, 0x05, 0x8a, 0x58, 0xbf, 0xc5,
-    0xac, 0xe6, 0x3f, 0xd6, 0x2f, 0xc2, 0x88, 0xfc, 0xdd, 0x62, 0xff, 0xbe,
-    0xf0, 0x16, 0xb5, 0x3d, 0xac, 0x5f, 0x47, 0x36, 0xbc, 0xb1, 0x5d, 0x6a,
-    0x32, 0xf0, 0x33, 0xe6, 0x4c, 0x58, 0x19, 0xdd, 0xf7, 0xf3, 0xbe, 0xa5,
-    0x8b, 0x75, 0x2c, 0x5f, 0xfd, 0x84, 0x59, 0xfc, 0x1f, 0xc5, 0x12, 0xc5,
-    0xf3, 0x7b, 0xf2, 0xb1, 0x7f, 0xf4, 0x4d, 0xf7, 0xd3, 0x7b, 0xd9, 0xb2,
-    0xc5, 0xff, 0xb1, 0xbc, 0x59, 0xef, 0x60, 0x4b, 0x14, 0xe8, 0x84, 0x24,
-    0x6b, 0x40, 0xc4, 0xd1, 0xf6, 0x27, 0x71, 0x5f, 0xa2, 0x7a, 0x14, 0xd7,
-    0xff, 0xf8, 0xbd, 0xc1, 0x49, 0x9f, 0x73, 0x1c, 0xd3, 0x73, 0xdc, 0x58,
-    0xbf, 0x3f, 0xbf, 0x90, 0x58, 0xa9, 0x44, 0x6e, 0x99, 0x6f, 0x67, 0x70,
-    0x58, 0xa5, 0x8f, 0x97, 0xd7, 0xf6, 0x72, 0x37, 0x8d, 0xe3, 0x7e, 0xb1,
-    0x62, 0xe9, 0xe8, 0xb1, 0x7f, 0xa7, 0x62, 0xcd, 0xd8, 0x96, 0x2b, 0xe7,
-    0x99, 0xc1, 0x9a, 0xd2, 0x61, 0x9f, 0x40, 0x21, 0xbf, 0x42, 0x3e, 0xdd,
-    0x4b, 0x16, 0xed, 0x62, 0x98, 0xd4, 0x06, 0x2b, 0x7f, 0xbf, 0x99, 0xa9,
-    0x29, 0x58, 0xbf, 0xfa, 0x47, 0x9b, 0x96, 0x7b, 0xef, 0xda, 0xc5, 0xfe,
-    0xf6, 0x6b, 0x69, 0xf7, 0x16, 0x2a, 0x08, 0xcc, 0x72, 0x1f, 0x98, 0xb2,
-    0x2d, 0xff, 0xf6, 0x0d, 0xfd, 0x87, 0xfc, 0xce, 0xe7, 0x65, 0x8b, 0xb3,
-    0xa2, 0xc5, 0xff, 0x6f, 0xfc, 0x19, 0xdf, 0x58, 0xb1, 0x7e, 0xe7, 0xe4,
-    0x8d, 0x58, 0xbe, 0xf6, 0x9f, 0x65, 0x8a, 0x93, 0xcd, 0x11, 0x4d, 0x4a,
-    0x62, 0x1b, 0x27, 0xe0, 0xce, 0xa1, 0x0f, 0x7f, 0xff, 0xe8, 0xec, 0xd6,
-    0x7f, 0x24, 0xbd, 0xfc, 0x6f, 0xb7, 0xb9, 0x8b, 0x17, 0x61, 0xab, 0x15,
-    0x28, 0x84, 0x8e, 0x6c, 0xbf, 0x4e, 0xbf, 0x3d, 0x16, 0x2f, 0xba, 0x3f,
-    0x3b, 0x58, 0xa9, 0x3d, 0x06, 0x2a, 0xbf, 0x7f, 0x62, 0x79, 0x58, 0xbf,
-    0x07, 0x91, 0x0e, 0x0b, 0x16, 0x35, 0x62, 0xb6, 0x3e, 0x68, 0x8a, 0x23,
-    0x8a, 0xef, 0x9c, 0xa2, 0x8f, 0x58, 0xbe, 0x29, 0xee, 0x0b, 0x14, 0xc7,
-    0xfa, 0x03, 0x4f, 0x13, 0x5f, 0x7b, 0x99, 0xe5, 0x8b, 0xff, 0xfc, 0xfd,
-    0xc3, 0xbf, 0x38, 0x5b, 0xfd, 0xf7, 0xdd, 0xb5, 0xb2, 0xc5, 0x4a, 0x23,
-    0x34, 0x47, 0x7f, 0x4f, 0x4c, 0xff, 0xe5, 0x62, 0xfb, 0xdc, 0xc8, 0x96,
-    0x3e, 0x6b, 0xef, 0xef, 0x8d, 0xfa, 0x48, 0xd6, 0x28, 0x68, 0xb5, 0xc5,
-    0x16, 0x34, 0xbe, 0xd3, 0xb6, 0xcb, 0x17, 0xff, 0x36, 0x98, 0x06, 0x34,
-    0x0a, 0x4e, 0xb1, 0x7f, 0xff, 0xc2, 0x9d, 0x19, 0x85, 0x3f, 0x73, 0xe7,
-    0x0d, 0x14, 0xe9, 0x62, 0xec, 0x23, 0x11, 0x56, 0x6a, 0x25, 0xfa, 0x75,
-    0x11, 0xc0, 0xb1, 0x60, 0x2c, 0x5f, 0xf8, 0x59, 0x1f, 0xc6, 0xd1, 0x4c,
-    0x16, 0x2b, 0x0f, 0x4c, 0x84, 0xaf, 0x44, 0x03, 0xac, 0x54, 0xa2, 0xf1,
-    0xdf, 0x58, 0x82, 0xb1, 0x3e, 0x67, 0x86, 0x77, 0x21, 0xd7, 0x7f, 0x49,
-    0x6c, 0x77, 0x8f, 0x58, 0xbf, 0xf4, 0x1b, 0xa7, 0x24, 0xed, 0xdf, 0x96,
-    0x2f, 0xff, 0xff, 0x85, 0xae, 0x1b, 0x3b, 0xfd, 0xcb, 0x22, 0xce, 0xa2,
-    0xce, 0x8d, 0xe1, 0x4a, 0xc5, 0xfe, 0x71, 0x6b, 0xf9, 0xd3, 0x8b, 0x17,
-    0xff, 0xf7, 0x9f, 0xb8, 0x14, 0x99, 0xe7, 0xce, 0xa1, 0xff, 0x16, 0x2f,
-    0xff, 0x49, 0xcb, 0x3a, 0x16, 0x74, 0xcd, 0x41, 0x62, 0xb1, 0x15, 0x64,
-    0xbf, 0x7f, 0xbd, 0xc0, 0xff, 0xf6, 0x8f, 0x58, 0xbf, 0xd9, 0xdb, 0x40,
-    0xa4, 0xeb, 0x17, 0xd9, 0xe7, 0xe2, 0xc5, 0xfa, 0x22, 0x8d, 0x36, 0x12,
-    0xc5, 0xff, 0xfa, 0x28, 0xa4, 0x1e, 0xe1, 0x64, 0x5d, 0x64, 0x6f, 0x1b,
-    0xf5, 0x8b, 0x17, 0x7b, 0xeb, 0x15, 0xd6, 0x22, 0xdb, 0x0c, 0x19, 0xba,
-    0xff, 0xbd, 0xfc, 0x0b, 0xd1, 0xcf, 0xc5, 0x8a, 0x95, 0x75, 0xbd, 0x98,
-    0xba, 0x14, 0x7c, 0x20, 0xe2, 0x87, 0x0b, 0x10, 0x91, 0xcf, 0x0c, 0xfd,
-    0x0d, 0x80, 0xcc, 0xef, 0xfc, 0x26, 0x3f, 0x1c, 0x9b, 0x46, 0xac, 0x5f,
-    0x37, 0x98, 0x96, 0x2b, 0x66, 0xd7, 0xd6, 0x10, 0x80, 0x1c, 0xa7, 0x2c,
-    0x8c, 0xbc, 0xd3, 0x0d, 0xe1, 0xf3, 0xdc, 0x72, 0xaf, 0x1f, 0x84, 0x51,
-    0x9b, 0x6a, 0x34, 0xb3, 0xc3, 0x1b, 0xee, 0xa0, 0x8c, 0x0c, 0xa3, 0x6f,
-    0xe4, 0xa1, 0x4f, 0x4b, 0xe6, 0x0a, 0x13, 0xdd, 0x47, 0xf7, 0xef, 0x7d,
-    0xc8, 0x0b, 0x17, 0x99, 0xf7, 0x58, 0xbd, 0xe7, 0x82, 0xc5, 0x6e, 0x6e,
-    0xbc, 0x3b, 0x76, 0x6c, 0xb1, 0x74, 0x52, 0xb1, 0x7b, 0xa6, 0xa0, 0xb1,
-    0x76, 0x04, 0x61, 0xe8, 0x00, 0x60, 0x86, 0x2f, 0xf7, 0x42, 0xce, 0x08,
-    0x0e, 0xb1, 0x7f, 0xc2, 0x6e, 0x61, 0x7b, 0x3e, 0xb1, 0x4e, 0x7d, 0xa4,
-    0x6b, 0x7c, 0xd0, 0xfb, 0x2c, 0x5f, 0xfb, 0xf3, 0xdc, 0x0b, 0x3d, 0xf7,
-    0x58, 0xbf, 0x4e, 0x98, 0x2f, 0x2c, 0x5f, 0xff, 0x3f, 0x36, 0xc0, 0xb8,
-    0xfb, 0x13, 0x77, 0xe5, 0x8a, 0x82, 0x3f, 0x46, 0x41, 0xb9, 0x17, 0xcf,
-    0xfc, 0x53, 0x7f, 0xd0, 0xcf, 0x60, 0xdc, 0x80, 0xb1, 0x7d, 0x0c, 0x9e,
-    0xd6, 0x2f, 0xd3, 0xac, 0x27, 0x58, 0xbe, 0x10, 0x26, 0x0b, 0x17, 0x67,
-    0xd6, 0x2b, 0xc6, 0xe8, 0x22, 0x3b, 0xfb, 0x35, 0xa1, 0x1b, 0xa5, 0x8b,
-    0xf8, 0xa0, 0x13, 0x7f, 0x8b, 0x17, 0xe3, 0x7e, 0xc4, 0xeb, 0x16, 0xe6,
-    0x1e, 0xbb, 0x97, 0xdc, 0x6c, 0x16, 0x2f, 0xb4, 0x1c, 0x84, 0xb1, 0x7c,
-    0x32, 0x63, 0x56, 0x2f, 0xfe, 0x78, 0x36, 0xb3, 0xa7, 0x7b, 0xbf, 0x6b,
-    0x15, 0x28, 0x91, 0xd8, 0x97, 0xc4, 0x76, 0x1c, 0xae, 0x63, 0x6c, 0xe5,
-    0x91, 0xd2, 0xf6, 0x97, 0x11, 0xc7, 0xc8, 0xd9, 0x80, 0x88, 0xbd, 0x08,
-    0x78, 0xe2, 0x60, 0xe1, 0x55, 0x73, 0x9d, 0x62, 0xb1, 0x19, 0x7e, 0x85,
-    0xa5, 0xf6, 0x0f, 0x81, 0x2c, 0x59, 0xf8, 0x79, 0x7d, 0x44, 0xf7, 0xf8,
-    0x02, 0xe3, 0x97, 0x70, 0x58, 0xbf, 0x80, 0xfa, 0x7e, 0xc0, 0xb1, 0x66,
-    0x8f, 0x3e, 0x48, 0x8d, 0x6c, 0x05, 0x8b, 0xfa, 0x70, 0xf9, 0x9c, 0x58,
-    0xbf, 0xff, 0xf9, 0x86, 0x1c, 0x3f, 0x26, 0xe1, 0x0a, 0x19, 0xc2, 0xc0,
-    0x0b, 0x8b, 0x17, 0xf8, 0x78, 0x4e, 0x17, 0xc4, 0xb1, 0x7e, 0xef, 0x71,
-    0x31, 0x2c, 0x5f, 0xff, 0x7d, 0xe7, 0xce, 0x09, 0x84, 0x60, 0x41, 0x04,
-    0x91, 0x7f, 0xf3, 0xcf, 0x81, 0x30, 0x8c, 0x08, 0x20, 0x92, 0x2b, 0x11,
-    0x43, 0xf5, 0x6a, 0xd9, 0x32, 0x1d, 0xcd, 0x3d, 0x0c, 0xbb, 0xfd, 0xf1,
-    0x31, 0xc6, 0xc7, 0x58, 0xad, 0xd5, 0x16, 0x1c, 0xb0, 0xa3, 0x94, 0xf1,
-    0xc5, 0xe9, 0x21, 0xac, 0x5e, 0xcc, 0x35, 0x22, 0xf3, 0x37, 0x6b, 0x16,
-    0x02, 0xc5, 0xf3, 0xfe, 0x4e, 0xb1, 0x77, 0x32, 0x4d, 0xa1, 0xa2, 0x55,
-    0xb2, 0x2d, 0x86, 0x39, 0x10, 0xef, 0x94, 0x6f, 0xce, 0x45, 0x30, 0x58,
-    0xbc, 0x06, 0xf2, 0xc5, 0xff, 0xa6, 0x3f, 0x07, 0x84, 0x53, 0x05, 0x8b,
-    0xef, 0x70, 0x51, 0xeb, 0x17, 0xd3, 0xa7, 0xe8, 0xb1, 0x58, 0x8c, 0xd6,
-    0x26, 0x21, 0xd1, 0x1f, 0x86, 0x4f, 0x7f, 0x67, 0xb8, 0xe5, 0xb2, 0xc5,
-    0xff, 0x69, 0xb7, 0x33, 0xf2, 0x19, 0x2c, 0x5e, 0x14, 0xe9, 0x62, 0xff,
-    0x36, 0xf2, 0xe3, 0x0f, 0x4b, 0x16, 0xe0, 0xd1, 0x1d, 0x11, 0xe1, 0x0e,
-    0xd6, 0xc8, 0xf2, 0xf4, 0x2f, 0x2f, 0x8d, 0x10, 0x38, 0xb1, 0x71, 0x09,
-    0x52, 0x0c, 0x97, 0xf4, 0x9e, 0x79, 0xac, 0x58, 0xa8, 0x1e, 0x8c, 0x44,
-    0x97, 0xff, 0x48, 0xcc, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x5f, 0xfe, 0x0e,
-    0x23, 0x09, 0xf5, 0xac, 0xd8, 0xf8, 0xb1, 0x4e, 0x89, 0x41, 0x23, 0x5d,
-    0x3b, 0x2c, 0x5f, 0xff, 0x7e, 0x5c, 0x72, 0x46, 0x16, 0x00, 0x5c, 0x58,
-    0xbf, 0xfe, 0x6d, 0x6e, 0x66, 0x7a, 0x4e, 0xfe, 0xd0, 0x96, 0x2b, 0xc8,
-    0xa1, 0x09, 0x3e, 0xff, 0xff, 0xc2, 0x37, 0xbf, 0x09, 0x83, 0x0f, 0x5c,
-    0x13, 0x68, 0x5b, 0x49, 0xab, 0x14, 0x62, 0x26, 0x74, 0x49, 0x5f, 0x4d,
-    0xdb, 0x91, 0xa9, 0x5f, 0xbd, 0x30, 0x34, 0xeb, 0x17, 0xc2, 0x18, 0x02,
-    0x58, 0xbf, 0xf9, 0xb7, 0xc1, 0xc9, 0xc7, 0xf9, 0xed, 0x62, 0xfc, 0xdb,
-    0xe3, 0x8d, 0x62, 0xb6, 0x3e, 0xed, 0xd1, 0xaf, 0xf0, 0x8b, 0x7f, 0xcf,
-    0x7d, 0x4b, 0x17, 0xf3, 0xf4, 0x72, 0x93, 0xac, 0x5e, 0x08, 0x20, 0x92,
-    0x2f, 0x61, 0x6e, 0x91, 0x18, 0x68, 0x6f, 0xfd, 0x9b, 0x60, 0xda, 0x05,
-    0x3b, 0x2c, 0x54, 0xa7, 0xb1, 0xb1, 0x56, 0x42, 0x4d, 0xc9, 0x18, 0xe4,
-    0x09, 0xe4, 0x61, 0x7f, 0xfb, 0x35, 0xef, 0x67, 0x0a, 0x73, 0x50, 0x58,
-    0xbe, 0xff, 0xf3, 0xcb, 0x17, 0xfd, 0xc0, 0xfb, 0x80, 0x98, 0xb7, 0x58,
-    0xa7, 0x3e, 0x00, 0xc8, 0xed, 0x26, 0x23, 0x2f, 0x90, 0xa9, 0xbf, 0x7f,
-    0x3b, 0x10, 0x4b, 0x17, 0xdf, 0x62, 0x35, 0x62, 0x86, 0x7f, 0x9b, 0x97,
-    0x78, 0xae, 0xfe, 0xee, 0x1c, 0x26, 0xdd, 0x62, 0xf9, 0xa3, 0xfd, 0xc5,
-    0x8b, 0xed, 0x0f, 0x3e, 0xb1, 0x78, 0xba, 0xeb, 0x1b, 0x2c, 0x56, 0x22,
-    0x8f, 0xb3, 0x07, 0x26, 0x62, 0x3b, 0xba, 0xeb, 0xd7, 0x55, 0x8b, 0xf4,
-    0x37, 0xce, 0xfc, 0xb1, 0x7e, 0xcf, 0x78, 0x5b, 0x2c, 0x5f, 0xce, 0xd0,
-    0xf3, 0xec, 0xb1, 0x7f, 0xb9, 0x9b, 0x7b, 0x99, 0xb2, 0xc5, 0xcf, 0xb2,
-    0xc7, 0xcf, 0x93, 0xc5, 0xd6, 0x87, 0x5d, 0x53, 0x17, 0x81, 0x41, 0x15,
-    0xfa, 0x11, 0xd7, 0xba, 0x31, 0xd6, 0x2f, 0xb0, 0x6d, 0xf5, 0x8a, 0xc3,
-    0xc1, 0xe0, 0xfd, 0xfe, 0xea, 0x62, 0x9f, 0xc8, 0xd6, 0x2f, 0xfc, 0x53,
-    0xef, 0xe3, 0xe8, 0x51, 0xeb, 0x14, 0x73, 0xf6, 0xf1, 0xad, 0xef, 0xe6,
-    0xeb, 0x17, 0xde, 0x9e, 0xf8, 0xb1, 0x52, 0x7c, 0x83, 0x22, 0x61, 0xeb,
-    0xff, 0xf7, 0xf0, 0x03, 0xcd, 0x0c, 0x62, 0x37, 0xed, 0x05, 0x8b, 0xa3,
-    0xe5, 0x62, 0xb7, 0x3f, 0x26, 0x58, 0xbf, 0x60, 0xfe, 0xd1, 0xeb, 0x17,
-    0x87, 0x27, 0x58, 0xbf, 0x4c, 0x1c, 0xb1, 0x62, 0xc5, 0x87, 0x86, 0xe3,
-    0xb7, 0xf7, 0x56, 0xff, 0xce, 0xfa, 0x96, 0x2f, 0xdf, 0x78, 0xe1, 0x06,
-    0xb1, 0x58, 0x7c, 0x9b, 0x9b, 0xd4, 0x68, 0xd8, 0xd3, 0xcc, 0xa3, 0xed,
-    0xa1, 0xf6, 0x38, 0xc3, 0x32, 0x33, 0xa3, 0x4a, 0x7b, 0x76, 0x8f, 0x85,
-    0xbc, 0x51, 0xcc, 0x6a, 0x50, 0x11, 0xe3, 0xad, 0xfc, 0x34, 0xda, 0x35,
-    0x20, 0x42, 0x44, 0xa1, 0xf6, 0x28, 0x4f, 0xf4, 0x22, 0x09, 0xba, 0x3a,
-    0x11, 0x37, 0xa7, 0x06, 0xb1, 0x7c, 0xfa, 0x8a, 0x0b, 0x17, 0xfe, 0xc0,
-    0x01, 0xb9, 0x31, 0x0b, 0x4b, 0x16, 0x38, 0xd1, 0x01, 0x83, 0x84, 0x49,
-    0x7f, 0xc4, 0x2f, 0x7f, 0x3a, 0x0e, 0x56, 0x29, 0x62, 0xf6, 0x9f, 0x4b,
-    0x15, 0x87, 0xc9, 0xd7, 0x9d, 0x86, 0x19, 0x7f, 0x7c, 0x9b, 0x6e, 0x32,
-    0xc5, 0xff, 0xe0, 0xd8, 0xbe, 0xd0, 0xe6, 0x1e, 0x63, 0xd6, 0x28, 0xc4,
-    0x57, 0xe1, 0xa1, 0xa5, 0xd7, 0xfe, 0xd1, 0xba, 0xd6, 0x05, 0x1d, 0x27,
-    0x58, 0xa9, 0x4e, 0xf5, 0xe3, 0x47, 0x0c, 0xc6, 0xfc, 0xfa, 0xd9, 0xf6,
-    0x58, 0xbd, 0xf7, 0x82, 0xc5, 0xc2, 0x0d, 0x62, 0xd3, 0xf3, 0x6d, 0xe1,
-    0xdb, 0xf6, 0x73, 0x5e, 0x95, 0x8b, 0xde, 0x79, 0x58, 0xbf, 0x3c, 0xec,
-    0xc7, 0x58, 0xbf, 0xdf, 0x92, 0xf1, 0x0f, 0xb5, 0x8b, 0x12, 0xc5, 0xce,
-    0x75, 0x8a, 0xc3, 0x50, 0x42, 0x35, 0x04, 0x73, 0xb9, 0x41, 0x0e, 0x70,
-    0xa0, 0x4b, 0x97, 0xfe, 0x2c, 0x1e, 0x00, 0xf3, 0xee, 0x2c, 0x5f, 0xfb,
-    0x50, 0x81, 0xf8, 0xe5, 0xdc, 0x16, 0x2f, 0xc5, 0x3d, 0xcf, 0x16, 0x2f,
-    0xfd, 0x8e, 0x4d, 0xee, 0x05, 0x24, 0xb1, 0x6d, 0x49, 0xf2, 0xf0, 0xa2,
-    0xb1, 0x19, 0xad, 0x0a, 0x6b, 0xf7, 0x1b, 0x82, 0xe2, 0xc5, 0x4a, 0x6b,
-    0x5f, 0x8c, 0x2c, 0x44, 0xd7, 0xcf, 0xa9, 0xf2, 0xc5, 0xff, 0xf8, 0xa7,
-    0x5a, 0x79, 0xdb, 0x00, 0x26, 0x2d, 0xd6, 0x2f, 0x64, 0xc1, 0x62, 0xfd,
-    0x1c, 0x22, 0xf7, 0x16, 0x2b, 0x87, 0x90, 0x21, 0xca, 0x1a, 0x38, 0x77,
-    0x22, 0x28, 0x4e, 0xde, 0xfe, 0x76, 0xb1, 0x7f, 0xbf, 0x39, 0x14, 0x90,
-    0xd6, 0x2f, 0x3c, 0x9d, 0x62, 0xc3, 0x19, 0xe7, 0xe8, 0xce, 0xd3, 0x04,
-    0x4a, 0x93, 0x6d, 0xe7, 0x9d, 0xd6, 0x2f, 0x61, 0x62, 0xc5, 0x40, 0xdc,
-    0x78, 0x76, 0xee, 0xc0, 0xb1, 0x7f, 0x1e, 0x78, 0x07, 0xdd, 0x62, 0xf7,
-    0x24, 0xd0, 0x1e, 0x47, 0x06, 0x6f, 0xfe, 0xd6, 0x6d, 0x85, 0xf6, 0x72,
-    0x65, 0x8b, 0xe8, 0x4e, 0xb6, 0x58, 0xbf, 0x67, 0x53, 0xcc, 0x4b, 0x15,
-    0x11, 0xe7, 0x91, 0x25, 0xee, 0x72, 0x0b, 0x17, 0xed, 0x00, 0x0e, 0x4b,
-    0x15, 0x27, 0x8d, 0x83, 0xd4, 0xc8, 0x88, 0x13, 0x45, 0xfc, 0x5e, 0x7d,
-    0x8a, 0x56, 0x2d, 0xc5, 0x8b, 0xa3, 0x4d, 0x96, 0x2a, 0x4f, 0x76, 0x05,
-    0xac, 0x25, 0x7b, 0xa7, 0xdd, 0x62, 0xf6, 0xa6, 0x0b, 0x17, 0xe9, 0x1f,
-    0xe7, 0xaf, 0x58, 0xad, 0x1e, 0x57, 0x41, 0xdb, 0xfc, 0xe3, 0xd6, 0x0d,
-    0x8e, 0xb1, 0x7d, 0x17, 0x27, 0x8b, 0x17, 0xfe, 0x8e, 0xc0, 0xca, 0x4b,
-    0x67, 0xd2, 0xc5, 0xb0, 0xe8, 0x99, 0x01, 0x9f, 0x89, 0x2f, 0xff, 0xff,
-    0x02, 0x3b, 0x0c, 0xc8, 0x7f, 0x37, 0x7d, 0x6b, 0x3d, 0xf7, 0x67, 0xd9,
-    0x62, 0xf1, 0xae, 0x35, 0x8a, 0xd2, 0x26, 0x99, 0xf2, 0xfb, 0x0e, 0x18,
-    0xd6, 0x2f, 0xe7, 0x37, 0xdc, 0x6e, 0xd6, 0x2f, 0xa2, 0x92, 0xf2, 0xc5,
-    0xff, 0xfd, 0x0f, 0xb4, 0x0c, 0xf7, 0xe7, 0xfb, 0x88, 0x18, 0x4b, 0x14,
-    0x6a, 0x20, 0x74, 0x47, 0x52, 0xac, 0x41, 0xda, 0x7f, 0x0b, 0xd6, 0x86,
-    0x79, 0x11, 0x70, 0x90, 0x50, 0xb1, 0xbd, 0xd6, 0x7d, 0xd6, 0x2e, 0x17,
-    0xd6, 0x2f, 0xff, 0xfb, 0xa4, 0x8d, 0xc9, 0xb4, 0x69, 0x33, 0x96, 0x00,
-    0x5c, 0x58, 0xbf, 0xf7, 0xc3, 0xe6, 0x6b, 0x76, 0x6d, 0xd5, 0x20, 0x61,
-    0x7f, 0xf0, 0x8e, 0x76, 0x86, 0x6e, 0x52, 0x75, 0x8b, 0xff, 0xb6, 0x93,
-    0x73, 0x5e, 0xf4, 0xe7, 0x16, 0x28, 0x68, 0xda, 0xfa, 0x79, 0x22, 0xd4,
-    0xa6, 0xde, 0xf1, 0xa0, 0x5f, 0xf0, 0x98, 0xdc, 0xf7, 0xb3, 0xeb, 0x17,
-    0x74, 0xc5, 0x8a, 0xf9, 0xe9, 0xb1, 0xd5, 0xff, 0xf9, 0xb9, 0xc9, 0xda,
-    0x7b, 0xc2, 0x79, 0xef, 0xcb, 0x17, 0xf4, 0x96, 0x07, 0x87, 0x58, 0xa8,
-    0x22, 0x0f, 0xa2, 0xb5, 0xfe, 0xfc, 0x97, 0x80, 0xde, 0x58, 0xbf, 0xfd,
-    0x0d, 0x4c, 0x37, 0xfb, 0xfc, 0x98, 0xeb, 0x15, 0xc3, 0xfe, 0x11, 0x9d,
-    0xff, 0xfa, 0x4b, 0x76, 0x20, 0x60, 0xf8, 0x42, 0x68, 0x2c, 0x5f, 0xfd,
-    0xe1, 0x4b, 0x6a, 0x4d, 0x34, 0x5b, 0x2c, 0x51, 0xd1, 0x38, 0xca, 0x97,
-    0xff, 0x1d, 0x87, 0xf7, 0xc1, 0xb9, 0x01, 0x62, 0xe1, 0x1a, 0xb1, 0x4e,
-    0x7b, 0x84, 0x87, 0x7f, 0xdb, 0xb9, 0xce, 0xe6, 0x70, 0x4b, 0x17, 0xf9,
-    0xbb, 0xe0, 0x7a, 0xfb, 0x2c, 0x5f, 0xfd, 0x81, 0x30, 0x0c, 0x60, 0xe2,
-    0x6f, 0x2c, 0x5b, 0x80, 0x3f, 0xe2, 0x36, 0xbf, 0x9b, 0xf8, 0x47, 0xc5,
-    0x8b, 0xe1, 0x7f, 0x37, 0x58, 0xbf, 0x9c, 0xa7, 0xef, 0xb2, 0xc5, 0x41,
-    0x71, 0xf0, 0x6f, 0x6f, 0x0a, 0x4d, 0x42, 0x8c, 0xf0, 0xbe, 0xfb, 0xf1,
-    0x10, 0x7a, 0x17, 0x5d, 0x09, 0xe3, 0x8b, 0x3a, 0x89, 0x2f, 0xfe, 0xf7,
-    0x36, 0x90, 0xca, 0x7e, 0xfb, 0x2c, 0x5f, 0xee, 0x4e, 0xa1, 0xbb, 0xec,
-    0xb1, 0x7d, 0xf7, 0x60, 0x2c, 0x51, 0x22, 0x7f, 0x88, 0xfe, 0x36, 0xbf,
-    0x70, 0xce, 0x02, 0x3d, 0x62, 0xff, 0x61, 0x79, 0xf4, 0x0e, 0x2c, 0x5c,
-    0xfe, 0x58, 0xbf, 0xfb, 0xf9, 0xbe, 0x6b, 0x9d, 0xf8, 0x33, 0xac, 0x5f,
-    0xb3, 0xa3, 0x90, 0xd6, 0x28, 0x67, 0xe4, 0x49, 0x37, 0x34, 0x25, 0x15,
-    0x5c, 0x84, 0x4d, 0xb5, 0x89, 0x9e, 0x9a, 0x5d, 0xa8, 0x6e, 0xde, 0xcd,
-    0x84, 0xb1, 0x7c, 0xc4, 0x52, 0xb1, 0x70, 0x8d, 0x23, 0x7c, 0x10, 0xf5,
-    0xfe, 0x9d, 0x9a, 0x3f, 0x3b, 0xf2, 0xc5, 0x4a, 0xa4, 0xcc, 0x8d, 0xb3,
-    0xef, 0x42, 0x2e, 0xbb, 0xfb, 0xac, 0x5f, 0x68, 0x0f, 0x05, 0x8b, 0xf3,
-    0x7b, 0x53, 0x05, 0x8b, 0xfe, 0xf3, 0x93, 0x77, 0xe1, 0x4a, 0xc5, 0xf1,
-    0x78, 0x5f, 0x94, 0x42, 0x7c, 0x8c, 0x32, 0x8b, 0xff, 0xe3, 0xfd, 0xf9,
-    0x07, 0xf0, 0x7a, 0x9f, 0xca, 0xc5, 0xff, 0xfc, 0x19, 0x43, 0xf9, 0x9e,
-    0x92, 0x60, 0x13, 0x41, 0x62, 0xf7, 0xc5, 0x1e, 0xb1, 0x7f, 0xf4, 0xed,
-    0xcf, 0xb0, 0x70, 0xd4, 0xf6, 0xb1, 0x7f, 0xe7, 0x2f, 0x71, 0xc6, 0x0e,
-    0xc0, 0xb1, 0x7f, 0xfd, 0xf7, 0xce, 0x99, 0xc6, 0x83, 0x94, 0xf4, 0x58,
-    0xbf, 0xed, 0xdf, 0x02, 0x0c, 0x6d, 0xb2, 0xc5, 0xb8, 0xb1, 0x5d, 0x9e,
-    0x7c, 0x47, 0xb5, 0xc4, 0x62, 0x7a, 0x14, 0x17, 0xff, 0xd9, 0xd1, 0xfd,
-    0x01, 0x0d, 0x88, 0x18, 0x4b, 0x17, 0xef, 0xb8, 0x03, 0xf2, 0xc5, 0xd8,
-    0x46, 0x1f, 0xd6, 0xea, 0x16, 0x6e, 0x23, 0x43, 0xa4, 0x28, 0xab, 0x65,
-    0x40, 0x7a, 0x8f, 0x52, 0xa3, 0x76, 0x71, 0x74, 0x68, 0x45, 0x33, 0xc0,
-    0x70, 0x97, 0x41, 0x88, 0x6f, 0x09, 0xd6, 0x47, 0x02, 0x8f, 0x5e, 0xb3,
-    0xc2, 0x11, 0x4a, 0x4b, 0xbd, 0x84, 0x6a, 0xc5, 0xfe, 0x61, 0xff, 0x33,
-    0xbf, 0x2c, 0x56, 0x1e, 0x89, 0xa3, 0xb5, 0xdb, 0x69, 0xbb, 0xa3, 0x4f,
-    0xc6, 0x32, 0x4f, 0xfc, 0x96, 0x7b, 0xea, 0x74, 0xff, 0x54, 0x62, 0x77,
-    0x40, 0xeb, 0x17, 0x82, 0xcf, 0xac, 0x5d, 0x25, 0x03, 0x6d, 0xe1, 0x8b,
-    0xc5, 0x21, 0x2c, 0x5f, 0x3e, 0xee, 0x35, 0x8b, 0xc1, 0xc0, 0xeb, 0x15,
-    0x04, 0x45, 0x61, 0x5f, 0x87, 0x44, 0x47, 0x7f, 0xff, 0xb9, 0xbf, 0xdf,
-    0xbf, 0x6f, 0xf9, 0xdb, 0x3b, 0xf3, 0x0d, 0x62, 0xff, 0xef, 0x4b, 0x97,
-    0xb5, 0x3e, 0x6f, 0x2c, 0x5f, 0xff, 0xfd, 0x07, 0x3e, 0x70, 0x1c, 0xdb,
-    0xe3, 0xfc, 0xf0, 0xb0, 0x07, 0x95, 0x8a, 0x94, 0xc7, 0x7b, 0x67, 0x64,
-    0x3b, 0xde, 0x78, 0x96, 0x2f, 0xe0, 0x7b, 0xd2, 0x40, 0x58, 0xa9, 0x3c,
-    0xc6, 0x1e, 0xb8, 0x12, 0xb1, 0x7e, 0x60, 0xc4, 0xc1, 0xac, 0x50, 0x0f,
-    0x04, 0x42, 0xf5, 0x12, 0x20, 0xf4, 0xc3, 0x79, 0xb2, 0x0b, 0x17, 0x31,
-    0x2c, 0x5b, 0x16, 0x2b, 0xe6, 0x9f, 0xa0, 0xb5, 0x62, 0x22, 0x9c, 0x91,
-    0x90, 0xef, 0xfe, 0x68, 0x19, 0x9e, 0xcf, 0xce, 0x80, 0xb1, 0x70, 0x7e,
-    0x58, 0xb8, 0x00, 0x58, 0xbf, 0xed, 0xfe, 0xfa, 0x27, 0xf7, 0x16, 0x2f,
-    0xb3, 0x61, 0x79, 0x62, 0xa0, 0x8d, 0x48, 0x91, 0x4e, 0x32, 0x01, 0x8f,
-    0x1d, 0x5f, 0xfc, 0x11, 0x09, 0xb8, 0xf9, 0xd1, 0xb4, 0xb1, 0x7f, 0xda,
-    0x9e, 0x8f, 0xee, 0x61, 0xab, 0x15, 0x88, 0x82, 0x8f, 0x46, 0xbf, 0x9f,
-    0xff, 0xc0, 0x32, 0xc5, 0xfd, 0xac, 0x19, 0x49, 0xd6, 0x2e, 0xff, 0x16,
-    0x2a, 0x07, 0x8a, 0xc5, 0xb5, 0x28, 0xb8, 0x01, 0x28, 0x9c, 0xae, 0xeb,
-    0xe5, 0x62, 0xff, 0xda, 0xc1, 0xcb, 0x8b, 0x79, 0xd2, 0xc5, 0x08, 0xf6,
-    0xfa, 0x0e, 0x5f, 0xa7, 0xdc, 0xcf, 0x2c, 0x5f, 0xff, 0xe1, 0xb9, 0x6f,
-    0x9d, 0xf8, 0xd6, 0xcd, 0x7b, 0xd3, 0xb2, 0xc5, 0xe8, 0xec, 0x95, 0x8a,
-    0x94, 0x67, 0x8c, 0x91, 0xca, 0x3c, 0xc9, 0x7f, 0x72, 0x2f, 0xb8, 0x5e,
-    0x58, 0xbf, 0xdc, 0x7c, 0x2c, 0xec, 0x25, 0x8b, 0xff, 0xfd, 0x9e, 0xf3,
-    0x68, 0xa7, 0xb8, 0x07, 0xa0, 0x1d, 0xf8, 0xb1, 0x58, 0x8c, 0x88, 0xf3,
-    0x13, 0x9a, 0x5f, 0x85, 0xde, 0xf8, 0x75, 0x8b, 0xfc, 0xe1, 0x61, 0x0f,
-    0xf2, 0xb1, 0x7c, 0xdd, 0x90, 0xd6, 0x28, 0xe7, 0xac, 0x03, 0x3b, 0xff,
-    0xd3, 0xee, 0x0b, 0x73, 0x3e, 0xc5, 0x32, 0xb1, 0x61, 0x2c, 0x5f, 0x80,
-    0x18, 0x1a, 0x0b, 0x15, 0xf3, 0x78, 0xc2, 0x57, 0xd1, 0xe6, 0x47, 0xc1,
-    0x62, 0xff, 0xf1, 0x0f, 0xf9, 0xd8, 0x6c, 0x5e, 0x21, 0xac, 0x5a, 0x12,
-    0x7e, 0xce, 0x57, 0x7f, 0xff, 0x38, 0x5f, 0x6d, 0xe4, 0x87, 0x9d, 0xfb,
-    0xec, 0x35, 0x8b, 0xfe, 0xdb, 0xd0, 0xc8, 0xf6, 0x20, 0x2c, 0x5f, 0xec,
-    0x8a, 0x63, 0xff, 0x9b, 0x2c, 0x5f, 0x1c, 0xf3, 0xc5, 0x8b, 0x9a, 0x3f,
-    0x87, 0xb6, 0x19, 0xc5, 0xf4, 0x5f, 0x6f, 0x2c, 0x56, 0x23, 0xb7, 0xb8,
-    0x4c, 0x39, 0x8d, 0xfa, 0x5b, 0xed, 0x1e, 0xb1, 0x7d, 0x9d, 0xe7, 0x16,
-    0x2e, 0xc1, 0xe8, 0xf3, 0x7e, 0x55, 0x79, 0xc2, 0x8f, 0x58, 0xbf, 0xd9,
-    0xd3, 0x9e, 0xf4, 0x9d, 0x62, 0xb4, 0x7a, 0xff, 0x21, 0xbf, 0xde, 0x19,
-    0x48, 0x4d, 0xda, 0xc5, 0x4a, 0xe5, 0xf0, 0xcc, 0xb2, 0x10, 0x26, 0x91,
-    0x3c, 0x21, 0xe2, 0x84, 0xb6, 0x89, 0xbf, 0x1a, 0x51, 0x42, 0x07, 0x90,
-    0x84, 0x0c, 0x8a, 0xf4, 0x90, 0xd6, 0x2f, 0xfd, 0x07, 0x28, 0x07, 0xff,
-    0xc8, 0xd6, 0x2e, 0x09, 0xd6, 0x2f, 0x61, 0x6e, 0xb1, 0x74, 0x9d, 0x62,
-    0xc7, 0xdc, 0xda, 0x47, 0x0e, 0xd4, 0x9f, 0xbb, 0xa6, 0x5e, 0xcf, 0x3a,
-    0xc5, 0xff, 0x60, 0xcd, 0x68, 0xbf, 0x3b, 0x2c, 0x5f, 0x85, 0xed, 0xb8,
-    0x6a, 0xc5, 0xff, 0xcd, 0xb7, 0x18, 0x73, 0xb4, 0xc2, 0x56, 0x2f, 0xf3,
-    0x96, 0xdf, 0x90, 0xc9, 0x62, 0xfe, 0xce, 0x47, 0x66, 0xa5, 0x62, 0x8d,
-    0x54, 0x41, 0xd8, 0xe6, 0xa1, 0x6e, 0x72, 0x0f, 0x8e, 0x11, 0xe7, 0x0b,
-    0x3c, 0x8b, 0x1c, 0x69, 0x7f, 0xd2, 0x1f, 0xdb, 0xbf, 0x7e, 0x56, 0x2f,
-    0x9e, 0x4a, 0x25, 0x8b, 0xf7, 0xbf, 0x80, 0x65, 0x8b, 0xa6, 0x3d, 0x62,
-    0xb0, 0xf0, 0x83, 0x28, 0xbe, 0x7e, 0x08, 0xeb, 0x17, 0x04, 0x12, 0xc5,
-    0xe3, 0xcc, 0x64, 0x0d, 0xe8, 0x44, 0x77, 0xfe, 0x9d, 0x18, 0x59, 0xef,
-    0x3f, 0x6b, 0x15, 0x27, 0xec, 0x23, 0x6a, 0x97, 0x5a, 0xad, 0xb3, 0x04,
-    0x23, 0x0d, 0x1c, 0x74, 0x59, 0x18, 0xbe, 0xf0, 0xca, 0xed, 0x7d, 0xeb,
-    0x54, 0x68, 0xa3, 0x48, 0xd4, 0x6b, 0x27, 0x8e, 0x25, 0xa3, 0x01, 0x04,
-    0x70, 0xa5, 0x1a, 0xcf, 0x27, 0x70, 0x7d, 0x2b, 0x67, 0xa4, 0x22, 0x42,
-    0x3b, 0x8e, 0x64, 0xea, 0x86, 0xad, 0xfe, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c,
-    0x5f, 0xee, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x7c, 0x4f, 0xd5, 0x2b, 0x16,
-    0x8e, 0x58, 0xb8, 0x12, 0xb1, 0x78, 0xb3, 0x8b, 0x14, 0x46, 0xcc, 0x31,
-    0x7b, 0x44, 0xb1, 0x7f, 0x73, 0x08, 0x11, 0xd8, 0xb1, 0x63, 0x56, 0x2f,
-    0x46, 0xd2, 0x4b, 0x14, 0x62, 0x67, 0x58, 0x6c, 0xe4, 0x8c, 0x90, 0x02,
-    0x1e, 0x09, 0x88, 0xc0, 0x21, 0x3b, 0xef, 0x33, 0x12, 0xc5, 0x47, 0xaa,
-    0x00, 0xe9, 0x1b, 0x70, 0x4e, 0x37, 0x7e, 0x0b, 0x17, 0xff, 0x0f, 0x58,
-    0xe6, 0xf7, 0xe2, 0x6f, 0xac, 0x50, 0x47, 0xbc, 0x18, 0xc5, 0xff, 0xbe,
-    0xd0, 0x2c, 0xf7, 0xa4, 0xeb, 0x17, 0xff, 0x87, 0xf9, 0x3b, 0x31, 0x77,
-    0xc1, 0x1d, 0x62, 0xff, 0xdb, 0xe6, 0xb5, 0x30, 0xe4, 0x81, 0x62, 0xff,
-    0xf7, 0x9b, 0x52, 0x69, 0xa2, 0xdb, 0x3b, 0xf2, 0xc5, 0xfe, 0xde, 0x07,
-    0xff, 0x6d, 0x1e, 0xb1, 0x52, 0x88, 0x96, 0x4f, 0xa8, 0x26, 0xe6, 0x69,
-    0xf0, 0x92, 0xfa, 0x43, 0x26, 0xfe, 0x98, 0x7a, 0x3b, 0x3e, 0xb1, 0x7f,
-    0x80, 0xc0, 0x98, 0xf9, 0x82, 0xc5, 0xfd, 0x93, 0xdc, 0x1c, 0xeb, 0x17,
-    0xf3, 0x7f, 0xf3, 0xdf, 0x16, 0x2f, 0x41, 0xf3, 0x47, 0xbb, 0xf2, 0xeb,
-    0xfb, 0x06, 0x53, 0x84, 0xb1, 0x7f, 0xf0, 0x6d, 0xb0, 0x63, 0x9d, 0x47,
-    0x47, 0x47, 0x2c, 0x5f, 0xf6, 0x61, 0xbf, 0x6d, 0x07, 0xf5, 0x8a, 0xfa,
-    0x2e, 0x38, 0x57, 0xe5, 0x2a, 0x82, 0x75, 0xbd, 0xc2, 0x4c, 0x10, 0xea,
-    0xbb, 0x09, 0x62, 0xf6, 0x9b, 0x75, 0x8b, 0xf9, 0xe4, 0xd8, 0x6c, 0x6a,
-    0xc5, 0x99, 0x62, 0x86, 0x7e, 0xc6, 0x8b, 0x10, 0xf7, 0x0c, 0x6f, 0xfe,
-    0xda, 0x28, 0x4e, 0xb6, 0xff, 0x6d, 0x1e, 0xb1, 0x7e, 0x11, 0xe7, 0x3c,
-    0xb1, 0x7d, 0x80, 0x90, 0x2c, 0x50, 0x0f, 0x28, 0x8a, 0x2b, 0x64, 0x7a,
-    0x31, 0xe7, 0xa1, 0x2f, 0x52, 0xbb, 0x2d, 0x91, 0xcb, 0xba, 0x33, 0x47,
-    0xbc, 0x28, 0xe9, 0xae, 0x23, 0x56, 0x2f, 0xff, 0x16, 0xc6, 0x44, 0xe5,
-    0x83, 0xc2, 0x35, 0x62, 0xff, 0x84, 0x20, 0xc9, 0xcc, 0x07, 0x96, 0x2f,
-    0xbd, 0xc6, 0xe2, 0xc5, 0xa3, 0x96, 0x2f, 0x7e, 0x61, 0x26, 0xe3, 0x84,
-    0x77, 0x02, 0x56, 0x2f, 0xf8, 0x39, 0x1c, 0x50, 0x92, 0xf2, 0xc5, 0x44,
-    0x7a, 0x5c, 0x17, 0xbf, 0xee, 0x93, 0xdc, 0x74, 0xeb, 0x09, 0x62, 0xf6,
-    0x3f, 0xd6, 0x2a, 0x36, 0x3f, 0xdc, 0x23, 0xf9, 0xf5, 0xfc, 0xfd, 0xf5,
-    0x7e, 0x7c, 0xb1, 0x7e, 0x9e, 0xf9, 0x3c, 0x58, 0xbe, 0xe3, 0xbf, 0x6b,
-    0x14, 0xc7, 0x98, 0x22, 0x9b, 0xfc, 0x2e, 0xfa, 0xb7, 0xfb, 0x71, 0x62,
-    0xfb, 0x3d, 0xf7, 0x58, 0xa6, 0x3d, 0xc2, 0x3a, 0xbc, 0x1e, 0x4a, 0xc5,
-    0xc2, 0x35, 0x62, 0xfd, 0x24, 0x42, 0x3a, 0xc5, 0x7c, 0xf0, 0x03, 0x19,
-    0xbd, 0xe9, 0x0d, 0x62, 0xff, 0x60, 0xf4, 0xdb, 0xf8, 0x0b, 0x17, 0x9d,
-    0xba, 0x2c, 0x5f, 0xb0, 0x87, 0xf9, 0x58, 0xac, 0x44, 0xc7, 0xc7, 0x80,
-    0x6a, 0x10, 0xf5, 0xd9, 0xc5, 0x8a, 0x58, 0xa5, 0x8b, 0x42, 0x22, 0xe3,
-    0xc1, 0x95, 0x03, 0xd6, 0x01, 0x7d, 0xfd, 0xbf, 0xe7, 0xc2, 0x0d, 0x62,
-    0xa5, 0x74, 0x33, 0x64, 0xc8, 0x3a, 0x1b, 0x18, 0x04, 0x79, 0x9c, 0x4f,
-    0xda, 0x7d, 0x62, 0x02, 0x5d, 0xe4, 0x2e, 0xfd, 0x09, 0x30, 0xc8, 0xaf,
-    0xdb, 0x60, 0x50, 0xf2, 0xc5, 0xf0, 0xf4, 0xd0, 0x58, 0xbf, 0xff, 0x89,
-    0xbd, 0xcc, 0xd0, 0x01, 0x39, 0xdf, 0xb8, 0xeb, 0x17, 0xff, 0xff, 0xf6,
-    0x7b, 0x81, 0xf3, 0x4c, 0x5e, 0xfb, 0x40, 0x7a, 0xc7, 0x37, 0x3b, 0xf7,
-    0x1d, 0x62, 0xb1, 0x1c, 0xc7, 0x5b, 0xba, 0x12, 0xb1, 0x68, 0xe5, 0x8a,
-    0x30, 0xd6, 0x60, 0xbd, 0x0c, 0xfb, 0xfc, 0x9d, 0x52, 0x9c, 0xd3, 0x46,
-    0xf1, 0x74, 0x92, 0xc5, 0xfb, 0x24, 0x61, 0xf6, 0xb1, 0x43, 0x3c, 0x0d,
-    0x0b, 0x51, 0x90, 0x94, 0xd2, 0x8d, 0xd0, 0x66, 0xbe, 0x25, 0xda, 0x3c,
-    0x81, 0xc3, 0xd3, 0x2b, 0x66, 0x13, 0x63, 0x51, 0xde, 0x78, 0xfb, 0xb8,
-    0x47, 0x3d, 0x63, 0xa5, 0xf9, 0x73, 0xed, 0x6b, 0x63, 0x01, 0x2d, 0xe4,
-    0xa7, 0x8c, 0xbc, 0xb6, 0x29, 0xd2, 0x4e, 0x90, 0xbc, 0x0a, 0x3c, 0x50,
-    0xda, 0x2f, 0x86, 0x31, 0x12, 0xc5, 0xdb, 0x74, 0x58, 0xbb, 0x3e, 0xb1,
-    0x5d, 0x9b, 0x2f, 0x0d, 0xdf, 0x84, 0x6b, 0xce, 0xcb, 0x17, 0xff, 0xa6,
-    0x02, 0x1e, 0x37, 0x39, 0x90, 0x95, 0x8b, 0xfd, 0xbf, 0xd8, 0xa4, 0x5d,
-    0xac, 0x5f, 0x84, 0x1b, 0x4f, 0x6b, 0x17, 0xed, 0xff, 0x3d, 0xf5, 0x2c,
-    0x5e, 0x97, 0x8f, 0x58, 0xb8, 0x5d, 0x7a, 0xc5, 0xfb, 0xed, 0xa3, 0xba,
-    0xc5, 0xe0, 0xe6, 0x3d, 0x62, 0xfe, 0x0f, 0x7f, 0xcf, 0x7d, 0x4b, 0x14,
-    0x62, 0x3a, 0x3a, 0xc2, 0xe8, 0x0f, 0xee, 0x3b, 0xc2, 0x81, 0x10, 0xde,
-    0x72, 0xc5, 0x8b, 0xfb, 0xef, 0xd7, 0xfe, 0x76, 0x58, 0xb0, 0xe0, 0x79,
-    0xfb, 0x8d, 0xdf, 0x49, 0xdb, 0x8b, 0x17, 0x00, 0x25, 0x8b, 0xfb, 0xf2,
-    0xf1, 0xe7, 0x75, 0x8b, 0xfd, 0x1e, 0x2d, 0x7e, 0x5c, 0x6b, 0x14, 0x62,
-    0x20, 0x37, 0x19, 0x73, 0x0a, 0xd9, 0x5b, 0x1c, 0x0a, 0x86, 0x93, 0xb9,
-    0xaf, 0x71, 0x89, 0x3c, 0x2b, 0x7e, 0x53, 0xe8, 0x51, 0x5f, 0xf7, 0x57,
-    0x07, 0xf9, 0xd3, 0x12, 0xc5, 0xc1, 0xf5, 0x2c, 0x5f, 0xd8, 0x16, 0x61,
-    0x1a, 0xb1, 0x7f, 0x99, 0xe1, 0xfc, 0xf4, 0xac, 0x5c, 0xfb, 0x2c, 0x7c,
-    0xd9, 0x5d, 0x21, 0xac, 0x5e, 0x6c, 0xe2, 0xc5, 0xf9, 0xb6, 0x71, 0x41,
-    0x62, 0xf0, 0x01, 0x2b, 0x15, 0x03, 0xfa, 0x38, 0xc7, 0xc7, 0x08, 0xa6,
-    0xfc, 0x6f, 0x5a, 0x13, 0x76, 0xb1, 0x7b, 0x08, 0xd5, 0x8a, 0x94, 0xf8,
-    0xf6, 0x3c, 0x71, 0xc3, 0xb0, 0x34, 0x28, 0xb8, 0x77, 0xd4, 0x63, 0x7f,
-    0xee, 0x6a, 0x7c, 0x4c, 0x73, 0xba, 0xc5, 0xff, 0xbf, 0x21, 0xe7, 0x38,
-    0x18, 0xd9, 0x62, 0xff, 0xf4, 0xf3, 0x92, 0x7c, 0xf3, 0xf3, 0xec, 0xb1,
-    0x79, 0xcb, 0xcb, 0x15, 0xb9, 0xf2, 0xfd, 0x26, 0xff, 0xd3, 0xbe, 0xa4,
-    0x98, 0xe7, 0x75, 0x8b, 0xfa, 0x73, 0x50, 0xd4, 0x16, 0x2e, 0xfb, 0x9c,
-    0xfb, 0x3e, 0x7d, 0x7f, 0xf1, 0xe7, 0xdc, 0x6c, 0xd0, 0x0f, 0x8b, 0x17,
-    0xf1, 0x4c, 0x0f, 0x2e, 0xb1, 0x7f, 0xb0, 0xf2, 0xd0, 0x68, 0x2c, 0x50,
-    0x11, 0x44, 0x48, 0x91, 0xc5, 0x97, 0xef, 0xce, 0xd3, 0xf5, 0x8b, 0xe9,
-    0xd9, 0xf4, 0xb1, 0x7e, 0xd3, 0x1e, 0x77, 0x58, 0xbf, 0xfe, 0xdb, 0x59,
-    0x2e, 0x58, 0x2d, 0xd8, 0x86, 0xb1, 0x7d, 0xd0, 0xb3, 0x8b, 0x15, 0x27,
-    0xe7, 0x89, 0xf7, 0xba, 0x60, 0xd6, 0x2f, 0xf7, 0x9f, 0xa3, 0xfa, 0x12,
-    0x91, 0x63, 0xac, 0x5f, 0x1b, 0xa9, 0x8c, 0x73, 0xc7, 0x0c, 0xd6, 0xd8,
-    0x34, 0x51, 0x93, 0x35, 0xd8, 0x6a, 0xc5, 0x18, 0xb8, 0xbc, 0x33, 0xec,
-    0x85, 0x36, 0xf0, 0x8f, 0x78, 0x67, 0xc4, 0x65, 0xf2, 0x96, 0x23, 0x28,
-    0x4e, 0x72, 0x18, 0x71, 0xc4, 0xf7, 0xff, 0x9b, 0xa4, 0xe0, 0xda, 0x19,
-    0xf7, 0x09, 0x62, 0xfb, 0x66, 0xd6, 0xeb, 0x17, 0x77, 0x05, 0x8a, 0x93,
-    0x7c, 0x22, 0x5b, 0xd2, 0x52, 0xb1, 0x7c, 0xc3, 0x98, 0xf5, 0x8b, 0xda,
-    0x6e, 0x8b, 0x17, 0xe1, 0xeb, 0x59, 0xc5, 0x8b, 0xb3, 0x4b, 0x15, 0x03,
-    0xdf, 0x61, 0xf0, 0x14, 0xd4, 0x13, 0x76, 0xd4, 0x22, 0x4e, 0x40, 0x01,
-    0xb2, 0x84, 0x25, 0xf3, 0xcc, 0x23, 0xd6, 0x2f, 0xe8, 0x16, 0x1e, 0x77,
-    0x58, 0xa8, 0x1e, 0x99, 0x12, 0xde, 0x89, 0xbc, 0xb1, 0x78, 0xa4, 0xeb,
-    0x15, 0x26, 0xea, 0x21, 0xeb, 0xf3, 0xfc, 0xa6, 0x0b, 0x16, 0xeb, 0x16,
-    0x2f, 0xc0, 0xfc, 0xe6, 0x96, 0x2a, 0x23, 0x7f, 0xa1, 0x7b, 0xed, 0x33,
-    0xec, 0xb1, 0x77, 0x1d, 0x62, 0xa4, 0xf7, 0x1c, 0x89, 0x88, 0xed, 0x8b,
-    0x17, 0xb3, 0x0d, 0x58, 0xa1, 0x9a, 0xee, 0xa1, 0x1b, 0xc4, 0xd0, 0x58,
-    0xa3, 0x9e, 0x07, 0xc9, 0x2f, 0xf8, 0x3d, 0x7a, 0x0e, 0x5e, 0xe2, 0xc5,
-    0xff, 0xa2, 0x31, 0xbb, 0x84, 0x9e, 0x7b, 0x58, 0xae, 0x1f, 0xf0, 0x67,
-    0x75, 0x2a, 0xd0, 0xb2, 0x14, 0xee, 0xb7, 0xa2, 0x1f, 0xc3, 0x09, 0xa1,
-    0x34, 0x28, 0x50, 0x5f, 0xb5, 0xbb, 0x36, 0xea, 0x94, 0x34, 0xbf, 0xb9,
-    0x9a, 0x1f, 0xf1, 0x62, 0xdd, 0x30, 0xf9, 0x78, 0x6f, 0x78, 0x4d, 0xc5,
-    0x8a, 0x73, 0xc6, 0xf9, 0x4d, 0xe8, 0xe1, 0x79, 0x62, 0xf3, 0x01, 0x96,
-    0x2e, 0x7e, 0x8b, 0x17, 0xff, 0xbd, 0x98, 0x5e, 0xe1, 0x9f, 0x79, 0x3a,
-    0xc5, 0xff, 0xb7, 0xfc, 0x93, 0x7b, 0x99, 0xb2, 0xc5, 0xf6, 0x9e, 0x2e,
-    0x2c, 0x5e, 0xd3, 0x06, 0xb1, 0x46, 0x23, 0x33, 0x12, 0xb4, 0x80, 0xc4,
-    0x97, 0x61, 0xab, 0x16, 0x75, 0x8b, 0xff, 0xa4, 0xee, 0x3c, 0x23, 0x7f,
-    0x27, 0x58, 0xaf, 0x9f, 0x6b, 0x0c, 0x78, 0x46, 0xfb, 0x0f, 0x21, 0xac,
-    0x50, 0xd5, 0x1e, 0xee, 0x43, 0xa2, 0x13, 0x8e, 0x72, 0x1c, 0xbe, 0x85,
-    0x4f, 0x42, 0xeb, 0x83, 0xfa, 0xc5, 0xff, 0xec, 0xf3, 0xc9, 0x7b, 0x08,
-    0xc9, 0xd2, 0xc5, 0xf8, 0x98, 0x20, 0xce, 0xb1, 0x7f, 0xff, 0x85, 0x9f,
-    0xc2, 0x06, 0x17, 0xbf, 0x8d, 0xe1, 0x4a, 0xc5, 0xf3, 0x77, 0xec, 0x58,
-    0xb7, 0x6b, 0x16, 0x73, 0x13, 0x06, 0x89, 0x20, 0x8a, 0xb8, 0xbc, 0x11,
-    0x1d, 0x1a, 0x9b, 0x8f, 0xe3, 0x1f, 0xbb, 0xad, 0xeb, 0xaa, 0xc5, 0xff,
-    0xef, 0x7e, 0x79, 0x3f, 0x97, 0xda, 0x4d, 0x58, 0xb8, 0x5d, 0x4b, 0x17,
-    0xf9, 0x8e, 0xd0, 0x97, 0xdd, 0x62, 0xff, 0xf9, 0xc5, 0xb7, 0x7e, 0xcd,
-    0xa7, 0xa9, 0xf5, 0x8b, 0x14, 0x34, 0x44, 0x78, 0xce, 0x9d, 0x31, 0x10,
-    0x25, 0x94, 0x28, 0xef, 0xe9, 0x8a, 0x0f, 0xa8, 0x2c, 0x5b, 0x75, 0x8a,
-    0xf9, 0xe1, 0x78, 0xbe, 0xe3, 0xca, 0xc5, 0xef, 0x14, 0xac, 0x5f, 0x44,
-    0x52, 0x75, 0x8a, 0xc3, 0xd6, 0xd0, 0xb9, 0x0e, 0x5f, 0xef, 0x38, 0x51,
-    0x13, 0x04, 0xb1, 0x77, 0xdd, 0x62, 0xff, 0xa5, 0xa1, 0xf9, 0xd9, 0xb6,
-    0x58, 0xbd, 0x9a, 0x02, 0xc5, 0xff, 0x67, 0x49, 0x1f, 0xf1, 0xfc, 0xb1,
-    0x7b, 0x8c, 0x05, 0x8a, 0x23, 0xd7, 0xf1, 0xd5, 0x47, 0xa3, 0x98, 0xe2,
-    0xff, 0x3a, 0xf3, 0xa5, 0xfc, 0x20, 0xc0, 0x09, 0xed, 0x62, 0xe7, 0xd9,
-    0x62, 0xf8, 0xfe, 0xcd, 0xd6, 0x2f, 0x69, 0xa0, 0xb1, 0x77, 0x72, 0xb1,
-    0x7f, 0xcc, 0xdd, 0xfd, 0xf6, 0x62, 0x58, 0xb6, 0xd2, 0x7a, 0x23, 0x18,
-    0xa9, 0x45, 0xd6, 0x12, 0x3b, 0x75, 0xc1, 0x79, 0x62, 0xfa, 0x00, 0x2c,
-    0x58, 0xbf, 0xfc, 0x02, 0x63, 0xeb, 0x27, 0xb8, 0x39, 0xd6, 0x2a, 0x4f,
-    0xb0, 0x44, 0x57, 0xf7, 0x89, 0x81, 0xc1, 0x2c, 0x5c, 0xfb, 0x2c, 0x5f,
-    0xee, 0xf8, 0xfc, 0x7e, 0xfc, 0xb1, 0x51, 0xb2, 0xef, 0xfc, 0xc6, 0x6c,
-    0x37, 0x6c, 0x78, 0xec, 0xb5, 0xe3, 0x1c, 0x89, 0x03, 0x46, 0x3f, 0x86,
-    0x93, 0x16, 0x94, 0x21, 0x78, 0x43, 0xe2, 0xe1, 0x0c, 0x5f, 0xff, 0xff,
-    0xcf, 0xef, 0xe1, 0xfe, 0x59, 0xd1, 0xb7, 0xfb, 0x87, 0xe7, 0x2d, 0xf3,
-    0xdf, 0x75, 0x8b, 0xa7, 0xeb, 0x17, 0xde, 0xd4, 0xf4, 0x58, 0xa1, 0xa3,
-    0x1c, 0xf0, 0x8b, 0x61, 0x7b, 0xef, 0x70, 0x51, 0xeb, 0x17, 0xee, 0xe0,
-    0x79, 0xf2, 0xc5, 0x39, 0xe8, 0x88, 0x9e, 0xfa, 0x7b, 0x14, 0x7a, 0xc5,
-    0xff, 0xfb, 0x71, 0x7c, 0xd7, 0x29, 0xfc, 0x85, 0x25, 0x8b, 0x15, 0x11,
-    0xfe, 0x91, 0x3d, 0xf3, 0x8f, 0xa9, 0xd6, 0x2a, 0x53, 0x6a, 0xfc, 0x21,
-    0x5a, 0x13, 0xc1, 0x11, 0x5f, 0xd0, 0x72, 0xc3, 0xca, 0xc5, 0xe7, 0xd4,
-    0x16, 0x2d, 0xf9, 0x3c, 0x98, 0x16, 0x5f, 0xbf, 0x20, 0x8e, 0xc5, 0x8b,
-    0xe6, 0x1c, 0x36, 0x58, 0xbd, 0xe3, 0x76, 0x58, 0xbf, 0xec, 0xf7, 0xf0,
-    0xe4, 0xde, 0x58, 0xbf, 0xba, 0x3e, 0xbb, 0x98, 0xf5, 0x8a, 0xd9, 0x11,
-    0x83, 0x20, 0xc3, 0x8a, 0xfa, 0x38, 0x0a, 0x16, 0x17, 0xb7, 0x84, 0xac,
-    0x5f, 0xe7, 0xf4, 0xfd, 0x8b, 0xcb, 0x17, 0xf7, 0x49, 0x33, 0xbf, 0x46,
-    0xcb, 0x15, 0x03, 0xea, 0xc3, 0x2b, 0x88, 0x0b, 0x17, 0xff, 0x3f, 0x04,
-    0x7e, 0x4f, 0xdf, 0x52, 0xb1, 0x7e, 0x3c, 0xef, 0xb0, 0xd6, 0x2f, 0xee,
-    0x3e, 0xb7, 0xfe, 0x2c, 0x5f, 0x42, 0x4e, 0xcb, 0x17, 0xf0, 0xdc, 0x5a,
-    0xcd, 0xd6, 0x2f, 0xda, 0x01, 0xdf, 0x8b, 0x16, 0xe1, 0x89, 0xa8, 0x75,
-    0xa4, 0x30, 0x17, 0xc4, 0x4e, 0xca, 0xd8, 0xbf, 0x84, 0x41, 0x97, 0xd4,
-    0xaa, 0x56, 0xf4, 0x7b, 0x15, 0x2a, 0xa9, 0xc5, 0x29, 0xf6, 0xdc, 0x58,
-    0xbf, 0xa7, 0x6c, 0x27, 0x35, 0x72, 0x89, 0x95, 0xa3, 0xcd, 0xe0, 0x95,
-    0xff, 0xf9, 0xb9, 0xf6, 0x7f, 0x40, 0x52, 0xde, 0x14, 0xac, 0x5e, 0xde,
-    0x4e, 0xb1, 0x7b, 0x3c, 0xcb, 0x14, 0xe6, 0xeb, 0x43, 0xd7, 0xfe, 0x26,
-    0xfc, 0x82, 0x33, 0x5c, 0xe2, 0x45, 0xef, 0xe0, 0xd6, 0x2a, 0x4f, 0x7d,
-    0xd0, 0xaf, 0x7a, 0x0c, 0xb1, 0x6c, 0x58, 0xa9, 0x35, 0xc1, 0x8e, 0xdc,
-    0x2d, 0x96, 0x2f, 0xf7, 0x33, 0xf3, 0xdb, 0x06, 0xb1, 0x7d, 0x85, 0x3a,
-    0x58, 0xb6, 0x2c, 0x5f, 0x49, 0xf3, 0x83, 0x36, 0x5a, 0x21, 0xad, 0x22,
-    0xdc, 0xe3, 0x3f, 0x67, 0xbc, 0x00, 0x4a, 0xc5, 0xff, 0xf7, 0xa7, 0x35,
-    0x26, 0x31, 0x61, 0xc5, 0xf5, 0x8a, 0x94, 0x4e, 0x61, 0x83, 0x0e, 0xdf,
-    0x70, 0x45, 0xe5, 0x8b, 0xf0, 0x65, 0x0f, 0xe2, 0xc5, 0x39, 0xe6, 0x00,
-    0x8e, 0xed, 0xb6, 0x58, 0xb0, 0x16, 0x2d, 0x2b, 0x16, 0xc1, 0x9a, 0x3d,
-    0xc4, 0xaf, 0xba, 0x9c, 0x8e, 0xb1, 0x5b, 0x32, 0x19, 0x60, 0x4e, 0x39,
-    0x76, 0x58, 0xf1, 0xd9, 0x16, 0xa1, 0x1c, 0x77, 0xff, 0xa7, 0x14, 0x6e,
-    0x9e, 0x79, 0x11, 0x0f, 0x43, 0xde, 0xa2, 0x7b, 0xc7, 0x9d, 0xd6, 0x2f,
-    0xfc, 0x0e, 0x61, 0x60, 0x39, 0x31, 0xeb, 0x17, 0xe6, 0x89, 0xf3, 0x8b,
-    0x17, 0xdc, 0x9d, 0x41, 0x62, 0x8c, 0x3c, 0xbe, 0x14, 0x5c, 0xfc, 0x58,
-    0xbd, 0xc9, 0x82, 0xc5, 0xc0, 0xe8, 0xb1, 0x52, 0x79, 0xdd, 0x8b, 0xf0,
-    0x76, 0x86, 0x8a, 0x03, 0xb8, 0xd4, 0xa6, 0xdb, 0x83, 0xcd, 0x19, 0x65,
-    0xe6, 0xfc, 0xac, 0x5f, 0xe1, 0xfe, 0x7d, 0xe9, 0x3a, 0xc5, 0x7c, 0xf4,
-    0x08, 0x72, 0xf3, 0xea, 0x0b, 0x17, 0xff, 0xe8, 0x98, 0x6d, 0xf6, 0x3b,
-    0x78, 0x5c, 0x90, 0xd6, 0x2d, 0xb2, 0xc5, 0x7d, 0x10, 0xec, 0x3a, 0x25,
-    0x7b, 0xe9, 0x0f, 0xa8, 0x6b, 0x17, 0xdc, 0x7f, 0x4a, 0xc5, 0xdd, 0xc3,
-    0x63, 0xc9, 0xec, 0x9e, 0xf3, 0xf7, 0xc5, 0x8a, 0xc3, 0xcf, 0x73, 0x1b,
-    0xfe, 0x86, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xb1, 0x3c, 0x97, 0x85, 0x47,
-    0xe1, 0x8e, 0x22, 0x0b, 0xdd, 0x42, 0x8f, 0x58, 0xb4, 0x4b, 0x16, 0x89,
-    0x62, 0xb7, 0x3c, 0xa7, 0x24, 0x10, 0x9d, 0xe9, 0x3f, 0x16, 0x2f, 0x33,
-    0x1d, 0x62, 0xfc, 0x2e, 0xfc, 0x52, 0xb1, 0x63, 0xfc, 0xf1, 0x48, 0x72,
-    0xfb, 0x5e, 0xcf, 0xac, 0x5e, 0x70, 0x32, 0xc5, 0xd9, 0xba, 0xc5, 0x2c,
-    0x78, 0xb8, 0xaf, 0x9e, 0x7f, 0x0d, 0x2f, 0xa4, 0xec, 0x35, 0x8b, 0xf0,
-    0xdf, 0xa4, 0x8d, 0x62, 0x86, 0x79, 0x9a, 0x22, 0xac, 0x44, 0x83, 0xb7,
-    0x5e, 0x84, 0x9d, 0x62, 0xf6, 0xcd, 0xb2, 0xc5, 0x6c, 0x6f, 0x18, 0x76,
-    0xf7, 0xb3, 0xeb, 0x17, 0x39, 0x2c, 0x5f, 0x6d, 0xe7, 0x35, 0x62, 0xa5,
-    0x54, 0x86, 0xc5, 0xf8, 0xc4, 0xe4, 0xfa, 0x8c, 0x09, 0x97, 0x44, 0x43,
-    0xd0, 0x74, 0x31, 0x6b, 0xf4, 0x4d, 0xf9, 0xfa, 0xc5, 0xff, 0xcc, 0xf9,
-    0xc9, 0xdb, 0x09, 0xcd, 0x58, 0xbf, 0xff, 0xf8, 0x85, 0xd5, 0x3e, 0xe6,
-    0x7a, 0x70, 0xb7, 0xe0, 0xf4, 0x4c, 0x12, 0xc5, 0xfd, 0x9a, 0xdb, 0x6c,
-    0x02, 0xc5, 0x18, 0x8e, 0x8c, 0x43, 0xe3, 0xad, 0xdd, 0x25, 0x62, 0xfe,
-    0x90, 0x1d, 0xa1, 0x8b, 0x14, 0x33, 0xf6, 0x39, 0x81, 0x0c, 0xdf, 0xc7,
-    0x9e, 0xfc, 0xdb, 0xac, 0x5c, 0xfb, 0x2c, 0x5f, 0x9e, 0x0f, 0xdc, 0x16,
-    0x2f, 0xa4, 0xe5, 0xc5, 0x8a, 0xd2, 0x24, 0xfe, 0x61, 0xc1, 0x88, 0xe2,
-    0x9b, 0xe7, 0x8e, 0x16, 0x96, 0x2f, 0xdd, 0xc8, 0xba, 0xf9, 0x58, 0xbf,
-    0xff, 0x8b, 0x3d, 0xfc, 0x86, 0x6f, 0x3b, 0xf8, 0x98, 0xeb, 0x15, 0x2a,
-    0xcd, 0xf2, 0x38, 0x77, 0x86, 0x0f, 0xd0, 0x18, 0x9b, 0x85, 0xd7, 0xff,
-    0xb8, 0xde, 0xfb, 0x70, 0xb3, 0xd8, 0x05, 0x8b, 0xfa, 0x40, 0xfc, 0xc8,
-    0x2c, 0x5f, 0xf3, 0xc1, 0xf9, 0xdc, 0x1c, 0x96, 0x2f, 0xf0, 0x1e, 0x1a,
-    0xd3, 0x84, 0xb1, 0x5a, 0x3e, 0xe2, 0x39, 0xbe, 0x73, 0xcc, 0x4b, 0x17,
-    0xff, 0x71, 0xfb, 0x2c, 0x8b, 0x53, 0xee, 0x2c, 0x5f, 0xbd, 0xcc, 0x93,
-    0xac, 0x5f, 0xfd, 0xbf, 0xe5, 0xfd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7f, 0xcf,
-    0xe3, 0xbf, 0xb9, 0x27, 0x58, 0xb6, 0x49, 0xff, 0xec, 0x8d, 0x7d, 0x9b,
-    0x0a, 0x0b, 0x17, 0xcf, 0xa9, 0xd9, 0x62, 0xa0, 0xaa, 0x0f, 0x74, 0x97,
-    0x84, 0xdc, 0x44, 0x20, 0x23, 0x24, 0x6f, 0x42, 0x9c, 0x22, 0x70, 0xc9,
-    0x2f, 0xba, 0xb3, 0x06, 0xb1, 0x7e, 0x7e, 0x0b, 0x0e, 0xb1, 0x7f, 0xf7,
-    0x1b, 0xb7, 0x38, 0xb9, 0xe9, 0xfa, 0xc5, 0xff, 0xe9, 0x8b, 0xef, 0x25,
-    0xf6, 0x8d, 0xe3, 0x7e, 0xb1, 0x62, 0xff, 0xd3, 0x09, 0x8b, 0x9f, 0xce,
-    0x9c, 0x58, 0xbf, 0xd3, 0xa6, 0x22, 0xc3, 0x56, 0x2f, 0xa6, 0x35, 0x46,
-    0xa8, 0xd4, 0xb1, 0x5d, 0xa6, 0x91, 0x1e, 0x8d, 0xc5, 0x9f, 0x21, 0x75,
-    0x19, 0x5f, 0xc2, 0x1b, 0xe9, 0xb4, 0xb1, 0x7c, 0xda, 0x6e, 0xd6, 0x2f,
-    0xe0, 0x6c, 0xd0, 0x98, 0xf5, 0x8b, 0xef, 0x14, 0x81, 0x62, 0xfc, 0x64,
-    0xc5, 0x21, 0x2c, 0x5c, 0x00, 0x96, 0x2f, 0x0c, 0x72, 0xb1, 0x73, 0x92,
-    0xc5, 0x1a, 0x8e, 0xee, 0xc8, 0xdc, 0xc8, 0xe4, 0x5c, 0x2b, 0x10, 0xc8,
-    0x63, 0xb7, 0xb3, 0xaa, 0x0b, 0x15, 0x2b, 0x82, 0xb9, 0x08, 0xcd, 0xc9,
-    0x5e, 0x37, 0x0f, 0xa9, 0x34, 0x63, 0x84, 0xcd, 0x74, 0xec, 0xb1, 0x7d,
-    0xa9, 0xc3, 0xac, 0x5d, 0x81, 0x2c, 0x52, 0x75, 0x0c, 0x17, 0xf7, 0x03,
-    0x9d, 0x49, 0xd3, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a,
-    0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa8, 0x22, 0xfd, 0xc6, 0x80, 0x7a,
-    0x21, 0xa8, 0xe1, 0xae, 0xa1, 0xab, 0xbf, 0x89, 0xd4, 0x30, 0x5f, 0xcc,
-    0xde, 0x8a, 0x4e, 0x9d, 0x43, 0x01, 0x86, 0x96, 0xdd, 0x7a, 0x75, 0x0c,
-    0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x50, 0x36, 0x8e, 0x35, 0x49,
-    0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1,
-    0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x15, 0xb2, 0x27, 0x06, 0x34, 0xe3,
-    0x40, 0x1a, 0xe0, 0xd7, 0x41, 0xaa, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60,
-    0xa8, 0x1b, 0x4e, 0x0d, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27,
-    0x50, 0xc1, 0x49, 0xd4, 0x30, 0x54, 0x0f, 0xa0, 0x03, 0x5e, 0x1a, 0xea,
-    0x1a, 0xa4, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93,
-    0xa8, 0x60, 0xad, 0x8f, 0xa0, 0xd1, 0xad, 0x0d, 0x7c, 0x6a, 0xc6, 0xa7,
-    0x50, 0xc1, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05,
-    0x27, 0x50, 0xc1, 0x43, 0x3e, 0x8e, 0xc6, 0x80, 0x34, 0x21, 0xaa, 0x4e,
-    0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2f, 0xdf, 0x90, 0x73,
-    0x13, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2a, 0x08, 0x9e, 0xdc, 0x6b, 0xe3,
-    0x4c, 0x34, 0x03, 0x6b, 0x6e, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49,
-    0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x40, 0xfa, 0x3b,
-    0x1a, 0x71, 0xae, 0x83, 0x54, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49,
-    0xd4, 0x30, 0x52, 0x75, 0x0c, 0x15, 0x03, 0xe8, 0x18, 0xd7, 0xc6, 0x88,
-    0x6a, 0xdf, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa4, 0xea, 0x18, 0x2d,
-    0x04, 0xea, 0x18, 0x29, 0x3a, 0x86, 0x0e, 0xcd, 0x05, 0x27, 0x50, 0xc1,
-    0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x6c, 0x8e,
-    0x78, 0x0d, 0x1a, 0x75, 0xb9, 0x5c, 0x43, 0x40, 0x1a, 0xf0, 0xd5, 0xb1,
-    0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xb4, 0x13, 0xa8,
-    0x60, 0xa4, 0xea, 0x18, 0x3b, 0x34, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50,
-    0xc1, 0x52, 0x8b, 0x38, 0x0d, 0x39, 0xd6, 0x8a, 0xce, 0x35, 0x49, 0xd4,
-    0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43, 0x05, 0x27, 0x50, 0xc1, 0x49,
-    0xd4, 0x30, 0x54, 0xa2, 0x0b, 0xb1, 0xad, 0x0d, 0x1c, 0x68, 0x86, 0xa9,
-    0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xad, 0x1e, 0x77,
-    0x06, 0xbc, 0x35, 0x49, 0xd4, 0x30, 0x52, 0x75, 0x0c, 0x14, 0x9d, 0x43,
-    0x05, 0x1c, 0xf3, 0x88, 0x6b, 0xc3, 0x56, 0x3a, 0x75, 0x0c, 0x14, 0x9d,
-    0x43, 0x05, 0x27, 0x50, 0xc1, 0x40, 0x36, 0x82, 0x1a, 0xa4, 0xea, 0x18,
-    0x29, 0x3a, 0x86, 0x0a, 0x4e, 0xa1, 0x82, 0x93, 0xa8, 0x60, 0xa9, 0x3e,
-    0x88, 0x86, 0xbe, 0x34, 0x21, 0xaa, 0x96, 0x62, 0xe6, 0xd0, 0x81, 0x82,
-    0x68, 0xd6, 0x72, 0x17, 0x9b, 0xc2, 0x37, 0xb8, 0x44, 0xbc, 0x29, 0xe3,
-    0xcf, 0xa2, 0x84, 0x4e, 0xa1, 0xb6, 0x74, 0xaf, 0xc2, 0x25, 0xa1, 0x4c,
-    0x03, 0xb2, 0x8c, 0x1f, 0x8d, 0x1e, 0x86, 0x90, 0xa1, 0x95, 0xd2, 0x12,
-    0xe1, 0x3e, 0xc7, 0x17, 0x06, 0xa9, 0xd5, 0x08, 0x9b, 0xf4, 0x0a, 0x73,
-    0x89, 0xd4, 0x30, 0x46, 0x27, 0x31, 0x79, 0xe4, 0xe9, 0xd4, 0x30, 0x5f,
-    0x3e, 0xed, 0xa5, 0xea, 0x18, 0x5e, 0x71, 0xe2, 0xf5, 0x0c, 0x2d, 0x19,
-    0xda, 0x33, 0xb4, 0x97, 0xf2, 0xaf, 0x18, 0x57, 0x46, 0x7f, 0x00, 0x74,
-    0xf9, 0x9b, 0xc1, 0xc8, 0x4b, 0x15, 0x27, 0xa4, 0xc6, 0x77, 0x9c, 0xb6,
-    0x58, 0xbf, 0x9c, 0x21, 0xea, 0x76, 0x58, 0xa8, 0x1e, 0x6f, 0xc7, 0x69,
-    0x62, 0x96, 0x2d, 0xd2, 0x4b, 0x8d, 0x06, 0x5c, 0xdd, 0xac, 0x5e, 0x7f,
-    0x89, 0x62, 0xee, 0xd9, 0x62, 0xa0, 0x6d, 0x43, 0x1d, 0xbe, 0x98, 0xe9,
-    0xf2, 0xc5, 0xe7, 0xe9, 0xd7, 0xac, 0x5e, 0x9c, 0x25, 0x8b, 0xf4, 0x9d,
-    0xbb, 0xf2, 0xc5, 0x68, 0xf1, 0x38, 0x37, 0x7d, 0xb8, 0x7a, 0x65, 0x8b,
-    0x75, 0x2c, 0x54, 0x9b, 0xa7, 0x25, 0xa1, 0xb6, 0x56, 0x3b, 0x8c, 0x77,
-    0x58, 0x2a, 0x44, 0xda, 0x73, 0xaf, 0x93, 0xb2, 0x69, 0x11, 0x78, 0x94,
-    0x26, 0x8e, 0xa5, 0xcb, 0x87, 0x05, 0x8b, 0xff, 0x66, 0xed, 0xe7, 0x3c,
-    0xf5, 0x71, 0x62, 0xbe, 0x7b, 0x40, 0x18, 0xbd, 0x13, 0x06, 0xb1, 0x7d,
-    0x90, 0x93, 0x56, 0x28, 0x67, 0xc9, 0x84, 0x44, 0x3f, 0x7f, 0xd8, 0x28,
-    0x39, 0x78, 0x5f, 0x58, 0xbf, 0x39, 0x09, 0xbc, 0xb1, 0x7f, 0xff, 0xec,
-    0xc2, 0x17, 0x9f, 0xe4, 0x23, 0x4b, 0x3b, 0xf4, 0xe6, 0x96, 0x2b, 0x11,
-    0xf0, 0x45, 0xbc, 0x39, 0x8e, 0x27, 0xbd, 0xf1, 0x6e, 0xb1, 0x7d, 0xfc,
-    0xe9, 0x8b, 0x15, 0xf3, 0xc3, 0xf0, 0xfd, 0xe0, 0x0b, 0x8b, 0x17, 0xf7,
-    0x9b, 0x5a, 0x9d, 0x96, 0x2f, 0xf6, 0x69, 0x8e, 0x52, 0x75, 0x8b, 0xe8,
-    0xa0, 0xe4, 0xb1, 0x73, 0x17, 0x0f, 0x54, 0x33, 0x2b, 0xff, 0xb8, 0xc4,
-    0x0f, 0xe4, 0x52, 0x43, 0x58, 0xb8, 0x12, 0xb1, 0x7f, 0x69, 0x88, 0x39,
-    0x02, 0xc5, 0xcd, 0xa5, 0x8b, 0x3a, 0xc6, 0xe5, 0xbd, 0xb7, 0x58, 0xb1,
-    0xd6, 0x2d, 0x18, 0xe8, 0xa2, 0xd0, 0xbf, 0xd1, 0x58, 0x84, 0x31, 0x3b,
-    0xfb, 0xb8, 0x7e, 0x4b, 0x65, 0x8a, 0xed, 0x50, 0xc9, 0xe1, 0x08, 0x02,
-    0xd8, 0xe8, 0x73, 0x75, 0x29, 0x5f, 0xa7, 0x8d, 0xd8, 0x16, 0x2f, 0xf7,
-    0xbf, 0x2f, 0x3d, 0xf9, 0x62, 0xff, 0xff, 0xa1, 0xf9, 0xfb, 0x9a, 0xce,
-    0x53, 0xf6, 0x78, 0x38, 0xd6, 0x2f, 0xef, 0xe3, 0xfc, 0xec, 0xb1, 0x58,
-    0x89, 0x1e, 0x8c, 0x97, 0x43, 0x16, 0x2f, 0xc5, 0x3f, 0xda, 0x56, 0x2f,
-    0x1a, 0xda, 0x58, 0xb1, 0xd6, 0x2f, 0xe7, 0xd6, 0xed, 0xad, 0x96, 0x2f,
-    0xbf, 0x22, 0xeb, 0xd6, 0x2f, 0xba, 0xa7, 0xbe, 0x2c, 0x56, 0xe7, 0x9f,
-    0xd4, 0x51, 0x7e, 0x17, 0xbf, 0x9d, 0x16, 0x2b, 0xad, 0x47, 0x14, 0x42,
-    0x5a, 0x7f, 0x22, 0x6b, 0xff, 0xfd, 0xf7, 0xf6, 0x44, 0x52, 0x78, 0x89,
-    0x82, 0xf6, 0x7d, 0x62, 0xdb, 0x2c, 0x5b, 0xeb, 0x16, 0xd3, 0x9a, 0x51,
-    0x09, 0xdf, 0xfc, 0xe6, 0x7d, 0x9f, 0x93, 0x08, 0x32, 0xc5, 0xfc, 0x7c,
-    0x8a, 0x4b, 0x65, 0x8b, 0xff, 0xa7, 0x34, 0x59, 0xee, 0x33, 0x6c, 0xb1,
-    0x52, 0x7e, 0x44, 0x5f, 0x4b, 0x17, 0x0f, 0xa2, 0xc5, 0xfe, 0x8a, 0x13,
-    0xde, 0xd8, 0x12, 0xc5, 0xda, 0x95, 0x8b, 0xe3, 0xe9, 0xa0, 0xb1, 0x51,
-    0xa1, 0xba, 0xc1, 0x7b, 0xe8, 0xe9, 0x98, 0xf5, 0x8a, 0xc5, 0x55, 0x5b,
-    0xa1, 0x6a, 0x10, 0xe7, 0x26, 0xfc, 0x2d, 0x80, 0x40, 0x41, 0x9c, 0x1a,
-    0x8e, 0x72, 0x0c, 0x96, 0xff, 0x7d, 0xbb, 0x07, 0xdc, 0x25, 0x8b, 0xa4,
-    0x0b, 0x16, 0x3e, 0x1e, 0x6f, 0xcd, 0xaf, 0xf7, 0xf5, 0x2f, 0x06, 0xe2,
-    0xc5, 0xff, 0xec, 0x1c, 0x76, 0xa7, 0xa3, 0xfb, 0x98, 0x6a, 0xc5, 0xfd,
-    0xb8, 0x60, 0x04, 0xf6, 0xb1, 0x7f, 0xed, 0xbc, 0xdb, 0x94, 0xc3, 0x98,
-    0xb1, 0x52, 0x7e, 0x4e, 0x65, 0x58, 0x99, 0xe3, 0x93, 0xfc, 0xcf, 0x90,
-    0xc2, 0xbf, 0xf3, 0x6e, 0x3f, 0xc8, 0x30, 0x80, 0xb1, 0x70, 0xb8, 0xb1,
-    0x46, 0x1e, 0xb8, 0x0f, 0xef, 0xfd, 0x9c, 0xc1, 0x75, 0xec, 0x6f, 0xf1,
-    0x62, 0xe0, 0x4a, 0xc5, 0x61, 0xff, 0x6e, 0x46, 0x04, 0x4a, 0x96, 0x58,
-    0xcc, 0x08, 0xb2, 0x51, 0xbe, 0xeb, 0xbd, 0x94, 0xbc, 0x31, 0x62, 0x24,
-    0xf8, 0xbb, 0x14, 0x02, 0x5d, 0x57, 0xa5, 0x11, 0x8a, 0x31, 0x6b, 0xf4,
-    0x30, 0x6c, 0x75, 0x8b, 0xf4, 0x08, 0x4c, 0x1a, 0xc5, 0xf4, 0xc3, 0x92,
-    0xb1, 0x7f, 0xf1, 0x14, 0xec, 0x58, 0xfd, 0x26, 0x39, 0x62, 0xf4, 0xf7,
-    0xc5, 0x8a, 0x94, 0x6c, 0x39, 0x41, 0xca, 0x58, 0x8b, 0x88, 0xf7, 0xf7,
-    0x89, 0x81, 0x84, 0xb1, 0x79, 0xb5, 0x2b, 0x17, 0xcd, 0xa6, 0x25, 0x8b,
-    0xff, 0x03, 0x52, 0x59, 0x09, 0xd0, 0x16, 0x2f, 0xa3, 0x98, 0x80, 0xb1,
-    0x7d, 0xee, 0x67, 0x96, 0x29, 0xcf, 0x21, 0x89, 0x6f, 0xcf, 0xdf, 0x1b,
-    0xb5, 0x8a, 0x82, 0x61, 0xa3, 0x1c, 0xd1, 0x09, 0xe1, 0x0d, 0xc2, 0x0a,
-    0x58, 0xbc, 0x79, 0x75, 0x8a, 0x23, 0x51, 0xd0, 0x32, 0xfd, 0x13, 0x9d,
-    0xa2, 0x58, 0xbf, 0xf7, 0xbe, 0xd0, 0x26, 0xfe, 0x71, 0x62, 0xe3, 0xb2,
-    0xc5, 0xff, 0xf8, 0x9b, 0xc5, 0x9e, 0xf8, 0xbb, 0xc3, 0xb7, 0x6b, 0x15,
-    0x88, 0xab, 0x73, 0xe6, 0x17, 0xbf, 0x10, 0x9b, 0xb8, 0x2c, 0x5f, 0x30,
-    0x6f, 0x8b, 0x16, 0xe3, 0x9e, 0x58, 0x8a, 0x6f, 0xe7, 0xda, 0x7b, 0xc2,
-    0x58, 0xbf, 0x3f, 0x7c, 0x31, 0xfb, 0x3d, 0x5d, 0x13, 0xdf, 0xf7, 0xe5,
-    0xfe, 0xdc, 0x98, 0xf5, 0x8b, 0xfe, 0x0d, 0x87, 0xcc, 0x3c, 0xc7, 0xac,
-    0x5e, 0xce, 0xc2, 0x58, 0xad, 0x1e, 0xe1, 0x1e, 0xdf, 0xec, 0xc2, 0x80,
-    0x64, 0x35, 0x8b, 0xb8, 0x6a, 0xc5, 0x86, 0xb1, 0x7e, 0x60, 0x72, 0x2e,
-    0x8b, 0x14, 0xc6, 0xf8, 0x84, 0xac, 0x03, 0x13, 0x61, 0xc8, 0x4b, 0xc4,
-    0x42, 0x03, 0x3f, 0x2b, 0xdf, 0xfd, 0x1e, 0x23, 0x5f, 0xbe, 0x64, 0x53,
-    0xe5, 0x8b, 0xfe, 0x73, 0x96, 0x03, 0xec, 0x75, 0x8b, 0xd1, 0x34, 0x4b,
-    0x14, 0xe8, 0xa2, 0xe2, 0x58, 0x8e, 0x2d, 0x1e, 0xb1, 0x7c, 0x02, 0x79,
-    0x58, 0xad, 0xd5, 0x80, 0x77, 0x1d, 0x11, 0xe1, 0xf2, 0xc5, 0xe4, 0x2b,
-    0x4b, 0x17, 0x7d, 0x96, 0x2f, 0xfc, 0xdf, 0xc3, 0xb7, 0xf3, 0xb0, 0x2c,
-    0x5f, 0xf7, 0xf0, 0xed, 0xfc, 0xec, 0x0b, 0x16, 0x01, 0x87, 0xf2, 0xc7,
-    0xf5, 0x28, 0xb8, 0x68, 0x48, 0x5f, 0xfc, 0x36, 0x3f, 0x4f, 0xcb, 0xe8,
-    0x51, 0xeb, 0x17, 0x0a, 0x56, 0x2f, 0x77, 0x0f, 0xac, 0x5e, 0xcd, 0x41,
-    0x62, 0x86, 0x7a, 0x64, 0x2f, 0xd0, 0x7e, 0xf0, 0xd8, 0x96, 0x2e, 0xde,
-    0x39, 0x62, 0xb1, 0x30, 0x57, 0x84, 0xeb, 0x18, 0x08, 0x72, 0xfb, 0x76,
-    0x23, 0x56, 0x2f, 0xc3, 0xef, 0xd9, 0xb2, 0xc5, 0xfb, 0x08, 0x7f, 0x95,
-    0x8b, 0xff, 0xfe, 0xf6, 0x14, 0xee, 0x52, 0x7e, 0x73, 0x21, 0xf7, 0x20,
-    0x2c, 0x51, 0x88, 0x8c, 0xd1, 0x3d, 0x4a, 0x3f, 0xdc, 0x91, 0xa1, 0x6f,
-    0x7f, 0xf3, 0x6b, 0x4c, 0x09, 0x8c, 0x08, 0x20, 0x96, 0x2f, 0x41, 0xc0,
-    0xb1, 0x7f, 0xe3, 0x73, 0xbf, 0x3f, 0xb4, 0x23, 0xac, 0x51, 0x88, 0xaa,
-    0x64, 0xbf, 0x0e, 0xdd, 0x30, 0x58, 0xbf, 0xa6, 0x23, 0x94, 0x9a, 0xb1,
-    0x52, 0x7e, 0xc0, 0x30, 0xea, 0x17, 0xbf, 0xe6, 0xec, 0xb0, 0x7f, 0x60,
-    0x96, 0x2f, 0xec, 0xfe, 0x1a, 0xfa, 0x58, 0xa3, 0x19, 0x7c, 0xb3, 0x19,
-    0xce, 0x3c, 0x39, 0x17, 0xe1, 0xaa, 0xd2, 0xf3, 0x7a, 0xf5, 0x72, 0x86,
-    0x27, 0x23, 0x2b, 0xf4, 0x67, 0xe2, 0x8d, 0x48, 0x23, 0x18, 0xe3, 0xab,
-    0xff, 0xf4, 0x96, 0x01, 0xa0, 0xe5, 0xe8, 0x66, 0xb1, 0x62, 0xfc, 0xc2,
-    0xdc, 0xee, 0xb1, 0x78, 0xdf, 0xba, 0xc5, 0x0d, 0x13, 0x3b, 0xa9, 0x68,
-    0xa6, 0xfb, 0x3d, 0xf7, 0x58, 0xbd, 0x38, 0x75, 0x8a, 0xd1, 0xbe, 0xf9,
-    0x15, 0xfd, 0x93, 0xdc, 0x1c, 0xeb, 0x17, 0xec, 0x8a, 0x0c, 0x4b, 0x17,
-    0x8a, 0x1c, 0xd1, 0xeb, 0x06, 0x5d, 0x7c, 0x53, 0x9a, 0x58, 0xa5, 0x8b,
-    0x87, 0x9f, 0x35, 0xbe, 0x21, 0xbc, 0x7f, 0xb2, 0xc5, 0x62, 0x64, 0x2e,
-    0xee, 0xcc, 0x22, 0x2c, 0xbd, 0xd3, 0x3e, 0xb1, 0x7f, 0xec, 0x7f, 0xcf,
-    0x60, 0xcf, 0x71, 0x62, 0x98, 0xf7, 0x88, 0x7e, 0xfd, 0xf7, 0x83, 0x41,
-    0x62, 0xff, 0xc1, 0xc4, 0x64, 0x86, 0xdb, 0xcf, 0xd6, 0x29, 0x8f, 0xb0,
-    0x45, 0x16, 0x35, 0x62, 0xf7, 0xf3, 0xa2, 0xc5, 0x11, 0xb2, 0xf0, 0x9d,
-    0xff, 0xd3, 0xd9, 0x31, 0xa1, 0xfc, 0x9b, 0xb5, 0x8b, 0xff, 0x80, 0xd0,
-    0xe6, 0x43, 0xf2, 0x46, 0xac, 0x5f, 0xc7, 0xe6, 0x1e, 0x63, 0xd6, 0x2a,
-    0x4f, 0xd9, 0xd1, 0x6f, 0xf3, 0x9b, 0xc7, 0x2e, 0xe0, 0xb1, 0x69, 0xd1,
-    0xea, 0xfc, 0x82, 0x9d, 0x35, 0x9f, 0x90, 0x75, 0x46, 0x25, 0x46, 0x3f,
-    0x7a, 0x2f, 0x5a, 0xab, 0x32, 0xe1, 0x76, 0x94, 0xd1, 0x09, 0xcc, 0x91,
-    0xce, 0xb7, 0x64, 0xb5, 0xe3, 0x63, 0xe4, 0xde, 0x78, 0xab, 0xb9, 0x61,
-    0x6f, 0x48, 0xf5, 0x8f, 0x94, 0x75, 0x14, 0xa4, 0xdd, 0x4b, 0x20, 0x3c,
-    0xbb, 0xdf, 0xcf, 0x7c, 0x35, 0x66, 0x4a, 0x09, 0x4c, 0x45, 0x4b, 0x9a,
-    0xe4, 0x74, 0x1e, 0xa6, 0x16, 0x0a, 0x37, 0xde, 0x91, 0xc8, 0x47, 0x42,
-    0x64, 0x38, 0x46, 0x75, 0x47, 0x59, 0x7f, 0xdc, 0xf7, 0xc4, 0xd0, 0x84,
-    0xac, 0x5e, 0xf6, 0x6e, 0xb1, 0x76, 0xd8, 0xb1, 0x4e, 0x6d, 0x80, 0x3d,
-    0x7f, 0xb5, 0x3e, 0x70, 0x4c, 0x16, 0x2f, 0xf7, 0x79, 0xe7, 0xfb, 0x9a,
-    0xb1, 0x7f, 0xbd, 0x01, 0x0d, 0x88, 0x0b, 0x17, 0x8f, 0xcd, 0xd6, 0x2f,
-    0x41, 0xc0, 0xb1, 0x69, 0x58, 0xbb, 0x9e, 0x58, 0xb1, 0x6e, 0x6a, 0x44,
-    0x23, 0x7d, 0x9e, 0x6e, 0xd6, 0x28, 0xc4, 0x57, 0xf5, 0xa3, 0xee, 0x8d,
-    0xa2, 0x7b, 0xff, 0xb9, 0x9b, 0x8f, 0x34, 0x13, 0x7e, 0x25, 0x8b, 0xfe,
-    0xe1, 0xac, 0x53, 0x9b, 0x4a, 0xc5, 0xf4, 0x33, 0x52, 0xb1, 0x7f, 0x04,
-    0xda, 0xd3, 0x76, 0xb1, 0x7c, 0x21, 0xfd, 0xd6, 0x2f, 0xe0, 0x4f, 0x89,
-    0xf8, 0xb1, 0x7f, 0xfe, 0xe6, 0xb4, 0xf1, 0x73, 0x53, 0xe7, 0xdd, 0xc6,
-    0xb1, 0x50, 0x56, 0x11, 0x86, 0x7b, 0x9a, 0x9e, 0x1c, 0x7f, 0x42, 0x64,
-    0x80, 0x1c, 0x91, 0x17, 0x0c, 0x3c, 0x46, 0x11, 0x6d, 0xfd, 0x23, 0x70,
-    0xa4, 0xeb, 0x17, 0x89, 0xe2, 0x58, 0xba, 0x1b, 0x2c, 0x5f, 0xa6, 0x3b,
-    0x82, 0x25, 0x8b, 0xde, 0x9e, 0x2c, 0x5f, 0x61, 0xe7, 0xeb, 0x16, 0x25,
-    0x8b, 0xf0, 0xf3, 0x01, 0xc5, 0x8a, 0x8e, 0x37, 0x21, 0x88, 0xd6, 0xe8,
-    0x80, 0x02, 0xdd, 0xff, 0xb8, 0x63, 0x6f, 0x31, 0x09, 0xbb, 0x58, 0xae,
-    0xd3, 0x48, 0x88, 0x64, 0xe5, 0x65, 0x09, 0xdf, 0x12, 0x5e, 0xd9, 0xc6,
-    0xb1, 0x7f, 0x33, 0x6b, 0x53, 0xb2, 0xc5, 0x84, 0xb1, 0x60, 0x39, 0xef,
-    0x7c, 0x78, 0x8b, 0xaf, 0x03, 0xdc, 0x58, 0xb7, 0x5a, 0xb1, 0x7f, 0x73,
-    0xf1, 0x48, 0x04, 0xb1, 0x77, 0x48, 0x2c, 0x5f, 0x01, 0xf5, 0x05, 0x8b,
-    0xce, 0x46, 0xac, 0x5f, 0x34, 0x42, 0x0d, 0x62, 0xa0, 0x7c, 0xba, 0x23,
-    0xf8, 0xed, 0xde, 0xe2, 0xc5, 0xfb, 0x0b, 0x3b, 0x09, 0x62, 0xfc, 0x2d,
-    0xfe, 0xfa, 0x58, 0xb9, 0xe2, 0x58, 0xbb, 0x0d, 0x58, 0xb7, 0xba, 0xd4,
-    0x41, 0xc9, 0x4f, 0xca, 0xb8, 0x31, 0x7e, 0xdf, 0xf3, 0xdc, 0x16, 0x2f,
-    0x0f, 0xee, 0xb1, 0x58, 0x79, 0x0e, 0x57, 0x7f, 0x1f, 0x8e, 0x6f, 0x82,
-    0x58, 0xbe, 0xef, 0xf3, 0x05, 0x8b, 0x8b, 0x75, 0x8a, 0x93, 0x78, 0xc4,
-    0x94, 0x62, 0xae, 0x98, 0xd8, 0x7b, 0xb1, 0x77, 0x30, 0xd3, 0xf8, 0x0b,
-    0xca, 0x13, 0x7e, 0x84, 0x78, 0x64, 0x1d, 0x4d, 0xb7, 0xff, 0xe7, 0x2d,
-    0xf7, 0xfb, 0x6f, 0xf9, 0x7d, 0x0a, 0x3d, 0x62, 0xfb, 0xde, 0xcd, 0x96,
-    0x2d, 0x2b, 0x15, 0x86, 0xd5, 0xc9, 0x2f, 0xfa, 0x79, 0xcc, 0xf7, 0x33,
-    0x65, 0x8b, 0x76, 0x47, 0xb2, 0x18, 0xfd, 0xff, 0xee, 0x7c, 0x26, 0x28,
-    0x66, 0x17, 0x7e, 0x58, 0xbf, 0xa7, 0xb8, 0x67, 0x54, 0x16, 0x2b, 0x11,
-    0x4d, 0xa2, 0x93, 0xa5, 0xdf, 0xfc, 0x7c, 0x1f, 0x7e, 0xd4, 0xe7, 0x67,
-    0x58, 0xbf, 0xe2, 0xc3, 0xce, 0xf9, 0xdf, 0x96, 0x29, 0x91, 0x03, 0xc4,
-    0x7b, 0xbb, 0xf2, 0xc5, 0xfb, 0x0b, 0x67, 0xd2, 0xc5, 0xfb, 0xcc, 0x42,
-    0xc5, 0x8b, 0xfd, 0xcc, 0x3b, 0xfb, 0xec, 0xb1, 0x50, 0x45, 0xee, 0x11,
-    0x68, 0x64, 0x8a, 0x3c, 0x4f, 0x7f, 0x77, 0x08, 0xb3, 0x37, 0x58, 0xbf,
-    0xa4, 0x5e, 0xfb, 0x01, 0x62, 0xf7, 0xe4, 0x6b, 0x15, 0xa3, 0xcb, 0xe1,
-    0x75, 0xf4, 0x34, 0x42, 0x58, 0xa8, 0x1e, 0x2f, 0x64, 0x57, 0xf8, 0xb2,
-    0x28, 0x08, 0xbc, 0xb1, 0x52, 0x9b, 0x03, 0xa4, 0x34, 0x30, 0x78, 0x47,
-    0x7b, 0x8f, 0xd1, 0x62, 0xf1, 0x87, 0x75, 0x8b, 0xed, 0x4f, 0xb8, 0xb1,
-    0x78, 0x58, 0x4b, 0x16, 0xc8, 0x8d, 0xff, 0x88, 0xef, 0xdf, 0x72, 0x93,
-    0xac, 0x58, 0xeb, 0x17, 0xf3, 0x8a, 0x1c, 0x7d, 0x96, 0x2b, 0x0f, 0xa0,
-    0x89, 0xfc, 0x25, 0x50, 0x4c, 0x64, 0x97, 0x79, 0x08, 0xfb, 0xdd, 0x5a,
-    0x95, 0x8b, 0xff, 0x14, 0xb6, 0xdc, 0xce, 0x92, 0x12, 0xc5, 0xff, 0x7d,
-    0xf5, 0xf6, 0xeb, 0x42, 0x09, 0x62, 0xff, 0xcf, 0xee, 0x16, 0x1a, 0x01,
-    0x44, 0xb1, 0x7f, 0xb5, 0x39, 0xdf, 0x5d, 0x63, 0x6e, 0xb5, 0x62, 0xa0,
-    0x88, 0x8f, 0x20, 0xdf, 0xfe, 0x26, 0x0b, 0x85, 0x9d, 0xc3, 0xc2, 0xd9,
-    0x62, 0xfe, 0x78, 0x8b, 0x3a, 0x32, 0xc5, 0xdc, 0x75, 0x8a, 0xd1, 0xe3,
-    0x70, 0xbe, 0xfb, 0x76, 0xdd, 0x96, 0x2f, 0xf6, 0x14, 0x33, 0x8d, 0xf5,
-    0x8b, 0xff, 0xda, 0x34, 0x26, 0xd8, 0xb3, 0xa6, 0x9f, 0x8b, 0x16, 0xe1,
-    0x8a, 0xb7, 0x24, 0xd4, 0x64, 0x18, 0x83, 0xdc, 0x32, 0x62, 0x23, 0xd4,
-    0x24, 0xd8, 0x8b, 0xc4, 0x81, 0x99, 0x5c, 0xdb, 0x2c, 0x5a, 0x56, 0x2f,
-    0x7f, 0xee, 0xb1, 0x7e, 0xc1, 0xff, 0x09, 0x62, 0xda, 0xd8, 0xf5, 0x58,
-    0x44, 0x87, 0x6f, 0x8f, 0xa7, 0x35, 0x62, 0xf1, 0x0b, 0x16, 0x29, 0xcf,
-    0x01, 0x89, 0x2f, 0x87, 0x1a, 0x75, 0xbd, 0x62, 0xc5, 0xee, 0x49, 0xd6,
-    0x2a, 0x3c, 0xf4, 0x38, 0x67, 0x7d, 0x31, 0x4e, 0x96, 0x28, 0x67, 0x91,
-    0xe2, 0x5b, 0xff, 0xfe, 0x8b, 0x98, 0x3c, 0xef, 0xdf, 0x68, 0x99, 0xb5,
-    0xe1, 0x32, 0xc5, 0x4a, 0xf6, 0xb7, 0x73, 0x82, 0x9f, 0x84, 0xf3, 0x36,
-    0x81, 0xd0, 0xa1, 0x71, 0xe2, 0x2b, 0xe1, 0xfc, 0x5d, 0x4b, 0x17, 0xfc,
-    0x23, 0x70, 0x85, 0xe1, 0x1a, 0xb1, 0x7f, 0x36, 0xdf, 0x9d, 0x01, 0x62,
-    0xfa, 0x1c, 0x71, 0xac, 0x54, 0x9e, 0x93, 0x17, 0xd7, 0xd1, 0x5c, 0x50,
-    0x8e, 0xbf, 0xcf, 0xa2, 0xf7, 0xb3, 0x65, 0x8b, 0xef, 0x6d, 0x81, 0x2c,
-    0x5e, 0x8e, 0xc0, 0x2c, 0x5c, 0xdd, 0x16, 0x2f, 0xe8, 0x13, 0xc3, 0xf8,
-    0xb1, 0x7e, 0xd9, 0xf5, 0x30, 0x58, 0xbf, 0xd3, 0xb6, 0x42, 0x41, 0xc5,
-    0x8a, 0x35, 0x31, 0xce, 0xcd, 0x1c, 0x96, 0x22, 0x0d, 0x0c, 0x91, 0x6f,
-    0x0a, 0x6f, 0xf8, 0xa7, 0x39, 0x84, 0x19, 0xd6, 0x2f, 0x13, 0x04, 0xb1,
-    0x50, 0x3d, 0x5e, 0x1c, 0x5e, 0xf3, 0x9a, 0xb1, 0x7f, 0xcd, 0xa8, 0x0f,
-    0x58, 0xe6, 0xac, 0x5f, 0xbf, 0x3d, 0xf0, 0x4b, 0x17, 0xa5, 0xb7, 0x58,
-    0xb9, 0xb6, 0x19, 0xe3, 0xe8, 0xaa, 0xa0, 0x8a, 0xf6, 0x84, 0x0d, 0xf8,
-    0x5e, 0x8e, 0xcf, 0x2c, 0x5e, 0x1b, 0x9a, 0xb1, 0x52, 0x79, 0x58, 0x59,
-    0x7f, 0x37, 0xc3, 0xd3, 0x01, 0x62, 0xf6, 0x80, 0x1a, 0xc5, 0xd3, 0x12,
-    0xc5, 0xe6, 0xd1, 0xab, 0x15, 0xb1, 0xb6, 0x21, 0x8b, 0xff, 0x9f, 0xd3,
-    0xee, 0x7d, 0x9f, 0xe2, 0x58, 0xa9, 0x45, 0xd3, 0xaa, 0xb1, 0x0d, 0xf1,
-    0x10, 0xa0, 0xb1, 0x7b, 0x8e, 0x12, 0xc5, 0xfe, 0x21, 0x73, 0x0f, 0x3b,
-    0xac, 0x5f, 0xfb, 0xf3, 0xa0, 0x16, 0x04, 0xc0, 0x58, 0xbd, 0x99, 0x12,
-    0xc5, 0xff, 0xbc, 0xc0, 0xe0, 0xc4, 0xda, 0x82, 0xc5, 0x1a, 0x8d, 0x0f,
-    0x9a, 0x00, 0xff, 0xc3, 0xb7, 0xde, 0x04, 0xc1, 0x62, 0xb0, 0xf8, 0x44,
-    0x7d, 0x7f, 0xef, 0x8b, 0xc1, 0xfb, 0xd8, 0x40, 0x58, 0xbd, 0x3d, 0x84,
-    0xb1, 0x7e, 0xd0, 0x8e, 0xc4, 0xb1, 0x58, 0x88, 0x8f, 0x20, 0x88, 0x7e,
-    0xfb, 0x85, 0x27, 0x58, 0xbf, 0xed, 0xdf, 0x46, 0xe7, 0x47, 0xd2, 0xc5,
-    0xf1, 0xe7, 0x36, 0x58, 0xbe, 0xe8, 0x53, 0xda, 0xc5, 0xc1, 0x79, 0x62,
-    0xb0, 0xdf, 0x39, 0x2d, 0x4a, 0x37, 0xfb, 0x22, 0x73, 0xde, 0x30, 0xdf,
-    0x49, 0x7b, 0x75, 0x8b, 0xe3, 0x76, 0x68, 0xf5, 0x8b, 0xe8, 0xa0, 0xc7,
-    0x58, 0xad, 0x1e, 0x61, 0xca, 0x28, 0xc6, 0x4a, 0xf0, 0xe1, 0xab, 0x91,
-    0xa1, 0xf7, 0x0b, 0xb7, 0x22, 0x8a, 0x19, 0xba, 0x71, 0x39, 0x07, 0xe1,
-    0xd2, 0xc5, 0xa0, 0x22, 0x28, 0xd3, 0xf9, 0x0a, 0x9f, 0x46, 0x1d, 0x1c,
-    0x78, 0x1b, 0x7d, 0xff, 0xcf, 0xd8, 0x0b, 0x3d, 0xdc, 0x1c, 0x96, 0x29,
-    0x62, 0xb4, 0x7a, 0x3d, 0x7a, 0x2d, 0xfa, 0x3b, 0xf8, 0x06, 0x58, 0xbf,
-    0xc0, 0x0f, 0x08, 0x7f, 0x95, 0x8a, 0x94, 0xf8, 0x9e, 0x35, 0xc3, 0x93,
-    0xb1, 0x5d, 0xd0, 0x25, 0x8b, 0xe3, 0xbf, 0xe5, 0x62, 0xf4, 0xe8, 0x0b,
-    0x16, 0xe6, 0x1b, 0xf0, 0xc8, 0xaf, 0x77, 0x0e, 0x2c, 0x5f, 0x9b, 0xc1,
-    0x67, 0xd6, 0x2f, 0xb0, 0xf3, 0x1e, 0xb1, 0x5f, 0x3c, 0xee, 0x14, 0xd7,
-    0x68, 0xb6, 0xd1, 0x38, 0x4d, 0xb7, 0xb8, 0x00, 0x96, 0x2f, 0x88, 0x47,
-    0xe2, 0xc5, 0xfc, 0x58, 0x73, 0xcf, 0x6b, 0x17, 0x8e, 0xfc, 0x58, 0xbe,
-    0xef, 0x93, 0xda, 0xc5, 0xfa, 0x1e, 0xe4, 0x9a, 0xb1, 0x7f, 0xf4, 0xea,
-    0x62, 0x26, 0x0b, 0xd9, 0xf5, 0x8a, 0x63, 0xef, 0x22, 0xab, 0xff, 0xbf,
-    0x85, 0x20, 0xe7, 0xe4, 0xbc, 0xb1, 0x68, 0x18, 0x9a, 0x14, 0x0b, 0x9c,
-    0x74, 0xf0, 0x94, 0xf1, 0x05, 0x18, 0xac, 0x62, 0x63, 0x0c, 0xc3, 0x23,
-    0x47, 0xda, 0x36, 0x5b, 0xfe, 0x08, 0xb3, 0x5c, 0xfe, 0x6e, 0xb1, 0x7f,
-    0xf1, 0x67, 0x30, 0x71, 0x42, 0x75, 0xb2, 0xc5, 0x3a, 0x20, 0x7c, 0x77,
-    0x7d, 0x07, 0x2d, 0x96, 0x2f, 0x8a, 0x4f, 0xc5, 0x8a, 0x88, 0xf1, 0x7c,
-    0x47, 0x7d, 0xde, 0xef, 0xa5, 0x8a, 0x34, 0xf2, 0x3c, 0x47, 0x7d, 0x83,
-    0x72, 0x58, 0xbc, 0x79, 0xe2, 0xc5, 0xfb, 0x3c, 0x4c, 0x05, 0x8a, 0x01,
-    0xe2, 0x10, 0xed, 0xf0, 0x8d, 0xcd, 0x96, 0x2f, 0x36, 0xa0, 0xb1, 0x5f,
-    0x3c, 0x21, 0x12, 0xdf, 0x48, 0xba, 0xfe, 0x24, 0x5f, 0xa1, 0x18, 0x10,
-    0x41, 0x2c, 0x51, 0x1e, 0xc0, 0x8a, 0x2f, 0xa1, 0xe7, 0x02, 0xc5, 0xd9,
-    0xda, 0xc5, 0xfc, 0xcf, 0xcf, 0xe7, 0x96, 0x2f, 0xd1, 0xcd, 0xb7, 0xdd,
-    0x62, 0xff, 0x0f, 0x0e, 0x3d, 0x36, 0xcb, 0x17, 0xcd, 0xb4, 0xf9, 0x62,
-    0x9c, 0xf6, 0x08, 0xd6, 0xff, 0x68, 0xb0, 0x64, 0xdb, 0x2c, 0x5f, 0x7b,
-    0x86, 0x79, 0x62, 0xdf, 0x73, 0xd8, 0x63, 0x3b, 0xff, 0xef, 0xb9, 0xa6,
-    0xcf, 0xb9, 0x24, 0x59, 0xe5, 0x8b, 0xe2, 0xc3, 0xca, 0xc5, 0xfe, 0x9f,
-    0x30, 0x1b, 0x34, 0xb1, 0x6f, 0x2c, 0x5f, 0xf9, 0xf8, 0xfd, 0x35, 0x21,
-    0xb1, 0x2c, 0x56, 0x1e, 0x93, 0x09, 0x5f, 0xb7, 0xcf, 0x7d, 0xd6, 0x2c,
-    0x4b, 0x17, 0xff, 0xa7, 0x3e, 0xfa, 0x3c, 0xe1, 0x7b, 0x8b, 0x15, 0x87,
-    0xb2, 0x21, 0x1a, 0x24, 0x51, 0xfa, 0x10, 0x57, 0xff, 0x1f, 0x37, 0x9f,
-    0xc9, 0xfb, 0x1f, 0x16, 0x2f, 0xc7, 0xf7, 0x27, 0x16, 0x2d, 0xfc, 0x3e,
-    0xf6, 0x47, 0xbf, 0xff, 0xe9, 0xd7, 0xd9, 0xfd, 0x09, 0x2c, 0x38, 0xb9,
-    0xf6, 0x82, 0xc5, 0xe7, 0xec, 0x0b, 0x17, 0xf1, 0x30, 0x02, 0xcf, 0xac,
-    0x5f, 0xef, 0x16, 0x01, 0x88, 0x1a, 0x3c, 0xcf, 0x0f, 0x5c, 0x5b, 0x98,
-    0xb9, 0x1f, 0x30, 0x84, 0xc7, 0x8d, 0xc9, 0x9d, 0x40, 0xe4, 0x3f, 0x84,
-    0x23, 0x43, 0x0f, 0xd0, 0x96, 0x08, 0x98, 0x38, 0x58, 0xde, 0xf1, 0xfc,
-    0xb1, 0x7e, 0x13, 0x93, 0xf1, 0x62, 0x98, 0xf1, 0x78, 0x3d, 0x7b, 0x93,
-    0xe5, 0x8b, 0xe7, 0xf0, 0x19, 0x62, 0xdb, 0xac, 0x5e, 0xe6, 0xa4, 0xe6,
-    0xd5, 0x88, 0xaf, 0xd2, 0x5b, 0xcf, 0x45, 0x8b, 0xe9, 0xf3, 0x76, 0xb1,
-    0x58, 0x7f, 0xdf, 0x31, 0x22, 0xaa, 0x31, 0x90, 0xfb, 0x06, 0x51, 0xb1,
-    0xe3, 0xd7, 0x64, 0x3a, 0x23, 0xf8, 0xc3, 0x4e, 0x5e, 0x02, 0x30, 0x5e,
-    0x10, 0xfa, 0x1a, 0x17, 0xf8, 0x05, 0x9d, 0x34, 0xfc, 0x58, 0xb9, 0xc6,
-    0xb1, 0x7f, 0xed, 0x69, 0x88, 0xa7, 0x98, 0x35, 0x8b, 0xf8, 0x89, 0x82,
-    0x6f, 0xac, 0x56, 0xe8, 0x81, 0x61, 0x70, 0xcf, 0x6f, 0xbd, 0x3d, 0xc1,
-    0x62, 0x8c, 0x76, 0x12, 0xfd, 0x6b, 0x84, 0xcb, 0x28, 0xda, 0x13, 0xd0,
-    0x2e, 0xc8, 0xd9, 0x7b, 0x85, 0x7b, 0xcb, 0x1c, 0x8f, 0x85, 0x06, 0xa3,
-    0x8f, 0x3c, 0xac, 0xd6, 0x9f, 0x16, 0x05, 0x2e, 0xdc, 0xa5, 0xac, 0xf2,
-    0x1b, 0x1e, 0x85, 0x78, 0xa9, 0x14, 0x1d, 0x21, 0x5e, 0x14, 0x2d, 0xa3,
-    0x8c, 0x6e, 0x37, 0xeb, 0x17, 0xc0, 0x0e, 0x40, 0xb1, 0x7f, 0xe1, 0xb4,
-    0x3e, 0xc0, 0x13, 0x41, 0x62, 0xff, 0xff, 0xed, 0xba, 0xc3, 0xc5, 0xf9,
-    0xeb, 0x7e, 0x38, 0x77, 0x1a, 0x8c, 0x30, 0xc3, 0x3f, 0x1c, 0xb1, 0x7a,
-    0x37, 0xeb, 0x9d, 0x6a, 0xc5, 0xe8, 0x13, 0x2c, 0x5f, 0xef, 0x49, 0xfb,
-    0x86, 0x79, 0x62, 0xf7, 0xdc, 0x0b, 0x17, 0xf7, 0xdf, 0x79, 0xf7, 0x16,
-    0x2f, 0x6c, 0xd1, 0xeb, 0x1b, 0x9a, 0xfa, 0x8d, 0xd1, 0xfb, 0x25, 0xd8,
-    0x39, 0x11, 0xaf, 0x13, 0x2f, 0xcd, 0x0f, 0x66, 0xeb, 0x15, 0x1a, 0xd5,
-    0x40, 0xc8, 0xce, 0x12, 0x1a, 0x7f, 0xdc, 0x71, 0xda, 0x4e, 0xbf, 0x07,
-    0xe0, 0x1f, 0x16, 0x2e, 0x7e, 0xa5, 0x8b, 0xff, 0xd1, 0xae, 0x3a, 0x63,
-    0x68, 0xa1, 0x03, 0x0c, 0xfc, 0x72, 0xc5, 0xf7, 0xbf, 0x1a, 0x12, 0xc5,
-    0xfb, 0xaa, 0x61, 0xa9, 0x58, 0xbf, 0xf7, 0x71, 0x7b, 0xf3, 0xee, 0x7d,
-    0xd6, 0x2f, 0x7d, 0xce, 0xb1, 0x73, 0x01, 0x62, 0xa4, 0xfd, 0x99, 0x0b,
-    0xc3, 0xb7, 0xed, 0x6d, 0x3a, 0xd9, 0x62, 0xfe, 0xcf, 0x70, 0x45, 0xe5,
-    0x8b, 0xf3, 0x97, 0x83, 0x3a, 0xc5, 0xe6, 0xd7, 0x16, 0x2a, 0x51, 0x3f,
-    0x85, 0x60, 0x2e, 0xf1, 0x4d, 0xef, 0x41, 0xd6, 0x2c, 0xeb, 0x17, 0xe1,
-    0x34, 0x21, 0x2b, 0x15, 0x03, 0x73, 0xf1, 0x1b, 0xa4, 0x8c, 0x3f, 0x7f,
-    0x2b, 0x5e, 0xd0, 0xa3, 0xd6, 0x2e, 0x78, 0x96, 0x2f, 0x10, 0x38, 0xb1,
-    0x4e, 0x7a, 0xc4, 0x42, 0x18, 0xc5, 0xb6, 0x58, 0xbf, 0xcf, 0xc1, 0x1d,
-    0xbb, 0xc5, 0x8b, 0xff, 0xf8, 0x63, 0x90, 0x16, 0x0f, 0xf2, 0x79, 0xd4,
-    0xf1, 0x62, 0xf3, 0xfa, 0x34, 0x58, 0xad, 0x1f, 0xe1, 0xd6, 0xaf, 0xa7,
-    0xee, 0x6a, 0xc5, 0x41, 0x1e, 0xb9, 0x0b, 0x0d, 0x11, 0x5f, 0xe0, 0xfc,
-    0xe5, 0x3d, 0xc1, 0x62, 0xd8, 0xb1, 0x50, 0x3c, 0x6e, 0x86, 0xb7, 0x99,
-    0x89, 0x62, 0xff, 0xd9, 0xdf, 0x8d, 0x6e, 0x07, 0x23, 0x58, 0xad, 0x95,
-    0x18, 0x9a, 0x5d, 0xbc, 0x61, 0x1a, 0x7a, 0xf1, 0x20, 0x63, 0x77, 0xfe,
-    0x19, 0x3e, 0xff, 0x9e, 0xf8, 0xeb, 0x17, 0xc2, 0x29, 0xe8, 0xb1, 0x7c,
-    0xce, 0x40, 0x58, 0xf9, 0xa4, 0xb9, 0xb7, 0x58, 0xb8, 0x31, 0xac, 0x56,
-    0x8f, 0x8b, 0xe6, 0x24, 0x31, 0x7f, 0xfc, 0x77, 0xe6, 0xff, 0x7e, 0xfd,
-    0x87, 0x6e, 0x2c, 0x5f, 0xf6, 0xa7, 0x99, 0xa6, 0xec, 0x25, 0x8b, 0xdc,
-    0x9f, 0xac, 0x5b, 0x98, 0x7b, 0x04, 0x77, 0x7f, 0xb5, 0x90, 0xf7, 0x33,
-    0x65, 0x8b, 0x8b, 0x75, 0x8b, 0x44, 0xb1, 0x58, 0x6a, 0xd8, 0x62, 0xb4,
-    0x7f, 0xe0, 0x60, 0xa7, 0x4d, 0xc5, 0xa1, 0x54, 0x28, 0x52, 0xdd, 0x31,
-    0x2c, 0x5f, 0xb0, 0xf3, 0xad, 0x96, 0x2b, 0x47, 0x82, 0xc3, 0x17, 0xfb,
-    0x02, 0xf8, 0x4c, 0x19, 0xd6, 0x2e, 0x68, 0x96, 0x2b, 0x63, 0xcf, 0x23,
-    0x7b, 0xf7, 0x02, 0x6e, 0xf8, 0xb1, 0x4e, 0x79, 0xac, 0x45, 0x7f, 0x8f,
-    0xa7, 0xe4, 0x96, 0xcb, 0x17, 0xfd, 0x26, 0xfd, 0xbc, 0x1e, 0x01, 0x62,
-    0x98, 0xfb, 0xc8, 0xd2, 0xff, 0xb9, 0x3f, 0x27, 0x3c, 0xf1, 0x62, 0xf7,
-    0x35, 0x8b, 0x17, 0x8b, 0x20, 0xb1, 0x7e, 0xd0, 0x08, 0x40, 0x58, 0xa9,
-    0x3c, 0x5c, 0x1c, 0xa7, 0x44, 0x17, 0x18, 0xad, 0x1e, 0xb1, 0x7f, 0x60,
-    0x73, 0x13, 0xf1, 0x62, 0x88, 0xf1, 0x3c, 0x2b, 0x52, 0xca, 0xc2, 0xda,
-    0x14, 0x30, 0x86, 0x60, 0xe1, 0x65, 0x92, 0xad, 0x3b, 0x63, 0x8a, 0x18,
-    0xda, 0x8e, 0x7c, 0xef, 0x5f, 0x85, 0xe9, 0x42, 0x3f, 0x84, 0x1e, 0x85,
-    0xd7, 0x46, 0x6b, 0xfe, 0x97, 0xfc, 0x9f, 0x6c, 0x09, 0x62, 0xff, 0xdc,
-    0x97, 0x19, 0x4c, 0x1c, 0x0b, 0x17, 0xef, 0xbe, 0xcc, 0x4b, 0x17, 0x0d,
-    0xd6, 0x2f, 0x7d, 0xe2, 0x58, 0xbb, 0x5b, 0x2c, 0x5f, 0x1a, 0xc4, 0x05,
-    0x8a, 0xc3, 0x78, 0x21, 0x9b, 0xbe, 0xeb, 0x15, 0x28, 0xd0, 0xc2, 0x88,
-    0x85, 0xfe, 0xb5, 0xd4, 0x41, 0x7f, 0xdb, 0x16, 0x43, 0xf8, 0x0e, 0x2c,
-    0x5f, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xbd, 0x99, 0xa5, 0x8a, 0x34, 0xf2,
-    0xf8, 0x53, 0x7c, 0x32, 0x60, 0x96, 0x2f, 0xff, 0xe7, 0x11, 0x1b, 0xbf,
-    0xdf, 0x7f, 0xcf, 0x61, 0x36, 0x96, 0x2f, 0x49, 0x6e, 0x62, 0x20, 0xfc,
-    0x47, 0x7f, 0xcf, 0xf9, 0xec, 0x19, 0xee, 0x2c, 0x5e, 0x14, 0x81, 0x62,
-    0xfd, 0x85, 0xdc, 0x39, 0x87, 0xaf, 0xa3, 0xab, 0xdc, 0xc3, 0x56, 0x2e,
-    0x63, 0xac, 0x57, 0x8d, 0xaf, 0x41, 0xeb, 0xff, 0x78, 0x5e, 0x88, 0x5b,
-    0x1d, 0xfc, 0xb1, 0x58, 0x7c, 0xce, 0x47, 0x7e, 0xef, 0x5a, 0x9e, 0xd6,
-    0x2f, 0xb7, 0x38, 0x25, 0x62, 0xfe, 0x86, 0x73, 0x8e, 0x35, 0x8b, 0x40,
-    0xc3, 0xd2, 0xf1, 0x25, 0x4a, 0xad, 0x1d, 0xa1, 0x4c, 0xf0, 0x8c, 0x3c,
-    0x36, 0x44, 0x40, 0x1b, 0xed, 0xff, 0xfe, 0xf8, 0x8b, 0xc5, 0x9d, 0x81,
-    0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7e, 0x20, 0x9b, 0x46, 0xac, 0x5f, 0xdb,
-    0x0b, 0xc2, 0x60, 0xd6, 0x2e, 0xcd, 0xd6, 0x29, 0x63, 0xc5, 0xc5, 0xfb,
-    0x5f, 0x09, 0x87, 0x87, 0xc9, 0xd1, 0x26, 0xfb, 0x0f, 0x3b, 0xac, 0x5f,
-    0x4f, 0xb0, 0xeb, 0x17, 0x99, 0xbb, 0x58, 0xbe, 0x83, 0x7b, 0x8b, 0x14,
-    0x33, 0xc0, 0x88, 0x76, 0xb7, 0x44, 0x2f, 0x98, 0xab, 0x13, 0x9b, 0x68,
-    0x47, 0x01, 0x04, 0xa1, 0x51, 0x78, 0x73, 0xd1, 0x62, 0xff, 0xfe, 0xd3,
-    0xe1, 0x45, 0xd8, 0x1b, 0xdc, 0x72, 0xee, 0x0b, 0x17, 0xff, 0xde, 0x36,
-    0x4a, 0x1c, 0x2c, 0xf7, 0x98, 0x0b, 0x17, 0xff, 0xf6, 0x9a, 0x1f, 0x62,
-    0x1c, 0xf7, 0xad, 0x49, 0xf8, 0xb1, 0x7f, 0xf7, 0xdf, 0x9c, 0xc2, 0xf7,
-    0xa4, 0xeb, 0x15, 0x04, 0x78, 0x69, 0x43, 0x8b, 0x97, 0xc6, 0xe1, 0x41,
-    0x62, 0xff, 0x0b, 0x63, 0x93, 0x1a, 0xeb, 0x15, 0x87, 0xb0, 0xe4, 0x77,
-    0xda, 0xf6, 0x6c, 0xb1, 0x7f, 0xfe, 0x35, 0x8c, 0xc3, 0xbf, 0x8c, 0xf7,
-    0x09, 0xcd, 0x58, 0xba, 0x62, 0x58, 0xbf, 0xf8, 0xa4, 0x21, 0x94, 0xf7,
-    0x07, 0x25, 0x8b, 0xdb, 0x31, 0xd6, 0x28, 0xd4, 0x69, 0xe9, 0x64, 0x86,
-    0x38, 0x89, 0x7e, 0x3e, 0x7d, 0xba, 0x96, 0x2a, 0x53, 0x5f, 0xc8, 0x7b,
-    0xb9, 0xed, 0xf3, 0x6e, 0x19, 0xd6, 0x2f, 0xdd, 0xee, 0xfe, 0xe2, 0xc5,
-    0xff, 0xa2, 0x84, 0xeb, 0x63, 0x02, 0xcf, 0xac, 0x5f, 0xef, 0xbf, 0xca,
-    0x73, 0x4b, 0x17, 0xe9, 0xe9, 0xa0, 0xf8, 0xb1, 0x46, 0x22, 0x8b, 0x74,
-    0x4f, 0x99, 0x54, 0xa3, 0xfd, 0xa1, 0x9b, 0x52, 0xba, 0x6a, 0x34, 0x5c,
-    0x1f, 0x78, 0xd3, 0x75, 0x08, 0x8f, 0xc6, 0xfe, 0xc6, 0x65, 0x19, 0x25,
-    0xfd, 0xd2, 0x2f, 0xb9, 0x0d, 0x62, 0xfe, 0x26, 0x00, 0x27, 0x8b, 0x15,
-    0x27, 0xbc, 0xc6, 0x37, 0xfb, 0xf9, 0xec, 0x16, 0xb6, 0x58, 0xbf, 0xfc,
-    0x67, 0xe4, 0xce, 0x3c, 0x64, 0xee, 0xc1, 0xac, 0x5a, 0x0b, 0x17, 0x9f,
-    0x7f, 0xe1, 0xf1, 0xb2, 0x8d, 0xf1, 0x09, 0xbc, 0xb1, 0x7d, 0xde, 0xef,
-    0xda, 0xc5, 0xff, 0xbd, 0x9d, 0x53, 0xb9, 0x66, 0x6c, 0xb1, 0x5b, 0x26,
-    0xe8, 0x72, 0x0f, 0xc2, 0x60, 0x06, 0x5c, 0x22, 0xf1, 0x35, 0xe9, 0x8a,
-    0x25, 0x8b, 0xfc, 0x53, 0x08, 0xbf, 0x3b, 0x2c, 0x5d, 0xbb, 0xac, 0x5f,
-    0xf3, 0x94, 0x53, 0xbe, 0xb3, 0xb5, 0x8a, 0x63, 0xd3, 0xe0, 0xc5, 0x0d,
-    0x15, 0x3e, 0x84, 0x45, 0xf8, 0x66, 0x9a, 0x2e, 0xd6, 0x29, 0x8f, 0x54,
-    0x45, 0x17, 0xfe, 0xec, 0x83, 0x93, 0xe7, 0xf0, 0x96, 0x2b, 0x13, 0x7d,
-    0x36, 0x31, 0xd6, 0x21, 0xbf, 0xe9, 0xf6, 0x6b, 0x76, 0x6d, 0xd5, 0x27,
-    0xc1, 0x7f, 0x33, 0x8e, 0x7d, 0xc5, 0x8b, 0xff, 0xfd, 0xe7, 0xce, 0xc7,
-    0xf1, 0x73, 0x37, 0x33, 0xef, 0x87, 0x58, 0xbe, 0xd4, 0xf7, 0x05, 0x8b,
-    0xff, 0xb0, 0xe2, 0x83, 0x0f, 0x37, 0x9e, 0x2c, 0x56, 0x1f, 0x4f, 0xc9,
-    0x2e, 0x93, 0xee, 0x9b, 0x17, 0xd1, 0xf8, 0x5b, 0xe8, 0x66, 0xdf, 0xf3,
-    0x1b, 0xc7, 0xe3, 0xf7, 0xe5, 0x8a, 0xfa, 0x22, 0x89, 0x3e, 0xff, 0xfb,
-    0x73, 0x3f, 0x2f, 0xa7, 0x3b, 0xc7, 0x49, 0xd6, 0x2f, 0xee, 0x77, 0x25,
-    0x3c, 0x58, 0xa2, 0x44, 0x10, 0x4a, 0x97, 0x9b, 0x5b, 0x2a, 0x4f, 0xf2,
-    0xfe, 0x2d, 0xf9, 0xcc, 0x8f, 0x58, 0xbf, 0xf1, 0x00, 0x2c, 0xef, 0xde,
-    0x93, 0xac, 0x5e, 0xf4, 0xec, 0xb1, 0x52, 0x89, 0x1c, 0x32, 0x64, 0x1b,
-    0xff, 0x17, 0xb5, 0x93, 0xdc, 0x1c, 0xeb, 0x17, 0x89, 0xf4, 0xb1, 0x4b,
-    0x17, 0x66, 0xdf, 0x35, 0x1d, 0x43, 0x97, 0xf6, 0x76, 0x0c, 0xf7, 0x16,
-    0x2f, 0xd2, 0x5d, 0xc3, 0x8b, 0x1f, 0x35, 0xf5, 0x2a, 0xab, 0xf2, 0x14,
-    0x9b, 0x91, 0xfe, 0x17, 0x8c, 0x5a, 0x4c, 0xe2, 0x5f, 0xbf, 0xf4, 0x83,
-    0x85, 0x9b, 0x60, 0x67, 0x58, 0xbf, 0xff, 0xff, 0xfe, 0xf6, 0x1f, 0x4c,
-    0x33, 0x3b, 0x87, 0x1f, 0x98, 0x79, 0xff, 0xb1, 0xfa, 0x19, 0xdc, 0x39,
-    0xe1, 0x60, 0xd6, 0x2f, 0x79, 0xc2, 0x58, 0xbf, 0x9b, 0x60, 0xc6, 0xd1,
-    0xeb, 0x15, 0x89, 0xa1, 0xf1, 0x03, 0xd0, 0xb2, 0x10, 0xf5, 0xfe, 0xd6,
-    0xb2, 0x23, 0xcf, 0x16, 0x2f, 0xf8, 0xb7, 0x2c, 0xff, 0xc4, 0x4b, 0x17,
-    0xfb, 0xdc, 0x72, 0xee, 0x07, 0x58, 0xa9, 0x3e, 0xe6, 0x39, 0xbf, 0xe7,
-    0xd6, 0xc2, 0x00, 0x27, 0xcb, 0x17, 0xfb, 0x34, 0x64, 0x1f, 0xb8, 0x2c,
-    0x5f, 0xfd, 0x20, 0xc8, 0x3f, 0xa1, 0x24, 0x05, 0x8a, 0x93, 0xf9, 0xf9,
-    0xb5, 0x41, 0x3d, 0xac, 0x42, 0x04, 0x28, 0xf8, 0x41, 0xe8, 0x5a, 0x5f,
-    0x1f, 0x5d, 0xb2, 0xc5, 0xff, 0xa7, 0x50, 0x72, 0xc3, 0x87, 0x2b, 0x17,
-    0x60, 0x16, 0x2d, 0x1e, 0xb1, 0x58, 0x6b, 0x38, 0x2f, 0x7a, 0x41, 0x1e,
-    0xb1, 0x7f, 0xf9, 0xa1, 0x3e, 0x7f, 0xc8, 0xa3, 0xc8, 0x6b, 0x17, 0xff,
-    0xe3, 0x93, 0x1a, 0x6c, 0x7b, 0x97, 0x70, 0xe7, 0xdd, 0x62, 0xb7, 0x46,
-    0x3e, 0x88, 0x04, 0x99, 0x7f, 0xff, 0xbe, 0xdc, 0x79, 0xe1, 0x9e, 0xfe,
-    0x1f, 0x37, 0x6d, 0x2c, 0x5f, 0x31, 0x0b, 0x16, 0x29, 0x62, 0xd2, 0x03,
-    0x5b, 0xd4, 0x43, 0x7f, 0x1c, 0xc7, 0x37, 0x06, 0xb1, 0x7f, 0xd3, 0xdc,
-    0x3e, 0xfa, 0x68, 0x2c, 0x5e, 0xe3, 0x1d, 0x62, 0xb1, 0x10, 0xe4, 0x61,
-    0xc3, 0xaa, 0xc5, 0x62, 0x7b, 0x92, 0x44, 0xd5, 0xa8, 0x73, 0xfc, 0xc4,
-    0x10, 0x8f, 0xf4, 0x2c, 0x2f, 0x8e, 0x53, 0x12, 0xc5, 0xfe, 0xef, 0xc1,
-    0xff, 0xf9, 0x1e, 0xb1, 0x7a, 0x73, 0x8b, 0x17, 0xec, 0x7d, 0xa4, 0xd5,
-    0x8a, 0x94, 0x51, 0x61, 0x1e, 0x8e, 0xbe, 0x39, 0x7e, 0x07, 0x23, 0xa7,
-    0xcb, 0x17, 0xd9, 0xa0, 0xe2, 0x58, 0xad, 0x91, 0x19, 0x87, 0x7a, 0x2c,
-    0xbc, 0x37, 0x89, 0x62, 0xfe, 0xcf, 0x94, 0xe6, 0x96, 0x2f, 0x7b, 0xdd,
-    0xac, 0x5f, 0xd3, 0xdf, 0x0a, 0x7a, 0x2c, 0x50, 0xcf, 0xec, 0x05, 0x9e,
-    0x1f, 0xb0, 0x16, 0x2f, 0xa1, 0x25, 0xe5, 0x8b, 0xf1, 0xce, 0xe1, 0x9d,
-    0x62, 0xde, 0xc3, 0xcc, 0x72, 0x2a, 0xd9, 0x34, 0xce, 0xe1, 0x33, 0xa2,
-    0xf2, 0x5e, 0xbf, 0xfb, 0x5d, 0xb4, 0x5f, 0xc7, 0x21, 0xca, 0xc5, 0xe8,
-    0x79, 0x96, 0x2b, 0x63, 0xe2, 0xed, 0x16, 0xff, 0xf6, 0xff, 0x72, 0xce,
-    0x8d, 0x0e, 0x38, 0xd6, 0x2f, 0xf4, 0x0b, 0x0e, 0x76, 0x82, 0xc5, 0xf3,
-    0xee, 0xe3, 0x58, 0xbb, 0x52, 0xe7, 0xad, 0xe3, 0x3a, 0x1a, 0x33, 0xb5,
-    0x0a, 0x2b, 0xfb, 0x9e, 0x29, 0xce, 0xd6, 0x2a, 0x53, 0xee, 0xc8, 0x53,
-    0x34, 0x3c, 0x84, 0x51, 0x7f, 0xfb, 0x39, 0xf6, 0x7f, 0x49, 0xc9, 0x8d,
-    0x58, 0xbc, 0xc5, 0xba, 0xc5, 0xfa, 0x42, 0xf6, 0x6c, 0xb1, 0x7f, 0x02,
-    0x3a, 0x4e, 0xc3, 0x58, 0xbf, 0x03, 0x9e, 0xcf, 0xac, 0x5f, 0x0f, 0xf3,
-    0xda, 0xc5, 0xf6, 0x7e, 0x18, 0xb1, 0x60, 0x9c, 0xf1, 0xbc, 0x49, 0x6c,
-    0x58, 0xa9, 0x45, 0x43, 0x37, 0xf8, 0xa2, 0xfa, 0x43, 0x8b, 0x8b, 0x15,
-    0x2b, 0xad, 0x70, 0x96, 0xd5, 0x88, 0xb1, 0x24, 0xe8, 0x75, 0x8a, 0x8a,
-    0x1b, 0x3c, 0x2e, 0xbf, 0xf0, 0x0e, 0xf9, 0xdf, 0x87, 0x23, 0x58, 0xbf,
-    0xdf, 0x9e, 0xe0, 0x73, 0x65, 0x62, 0xff, 0xfe, 0xe9, 0x25, 0xec, 0x87,
-    0xe7, 0xb8, 0x7b, 0x93, 0xa5, 0x8b, 0xfc, 0x78, 0xf0, 0xf0, 0x9a, 0x0b,
-    0x17, 0xe8, 0x98, 0x11, 0xd8, 0xb1, 0x52, 0x7c, 0x6c, 0x6f, 0x4b, 0x17,
-    0xf1, 0x83, 0xcc, 0x07, 0x16, 0x2f, 0xe2, 0xce, 0x4e, 0x79, 0x62, 0xff,
-    0xf6, 0xb6, 0x7e, 0x3f, 0x4f, 0xbe, 0x77, 0xe5, 0x8b, 0x78, 0xc3, 0xfa,
-    0xc2, 0xca, 0xed, 0x1b, 0xa7, 0x0c, 0x28, 0x54, 0xdf, 0xe2, 0xf7, 0x04,
-    0x3f, 0xba, 0xc5, 0x9d, 0x62, 0xe6, 0xf2, 0xc5, 0x4a, 0x24, 0x70, 0xd6,
-    0x23, 0x43, 0x88, 0xdc, 0xdd, 0xac, 0x5f, 0x18, 0x11, 0x79, 0x62, 0xee,
-    0x61, 0xcd, 0xe9, 0x0c, 0x5f, 0xd9, 0xf7, 0xd7, 0xd9, 0x62, 0xed, 0x6c,
-    0xb1, 0x5b, 0x1e, 0x31, 0xcb, 0x6b, 0x11, 0x28, 0xee, 0x37, 0xf3, 0x9e,
-    0x7c, 0xfd, 0x16, 0x2f, 0xfb, 0x0f, 0x9a, 0x00, 0x05, 0xc5, 0x8b, 0xfe,
-    0x9e, 0x72, 0x5f, 0x66, 0xf2, 0xc5, 0xf9, 0x8f, 0x23, 0x95, 0x8a, 0xfa,
-    0x26, 0xbc, 0x74, 0x23, 0x9b, 0xf8, 0xbe, 0x13, 0x14, 0x16, 0x2f, 0xf9,
-    0xf0, 0x86, 0x6b, 0xe6, 0x96, 0x2a, 0x57, 0x54, 0x86, 0x81, 0x86, 0xdd,
-    0xc3, 0x05, 0xe3, 0x8e, 0xd4, 0x61, 0xbf, 0x21, 0xf4, 0x32, 0x44, 0x61,
-    0xd4, 0x5d, 0x7f, 0x6c, 0x63, 0x1b, 0xf7, 0x58, 0xbf, 0x7a, 0x47, 0x9d,
-    0x16, 0x2f, 0xf0, 0xdd, 0x88, 0x7f, 0x95, 0x8a, 0xc4, 0x46, 0xc4, 0x63,
-    0xe2, 0xab, 0xfe, 0xe6, 0x6d, 0xc7, 0x26, 0xd9, 0x62, 0xff, 0xd9, 0xdc,
-    0x1c, 0x8f, 0x23, 0x95, 0x8b, 0xfe, 0xec, 0xcf, 0x49, 0x39, 0xbc, 0x58,
-    0xba, 0x3a, 0x56, 0x2a, 0x4f, 0x59, 0xcf, 0x2e, 0xce, 0xd6, 0x2f, 0xff,
-    0xfd, 0x3b, 0x77, 0x0e, 0x16, 0x44, 0x66, 0xff, 0x9d, 0xcd, 0xd3, 0x04,
-    0xb1, 0x52, 0x9d, 0x5e, 0x18, 0x39, 0xd3, 0x42, 0x53, 0xc4, 0x02, 0x18,
-    0xbf, 0x9b, 0x5d, 0xc3, 0x3c, 0xb1, 0x7f, 0x9b, 0x03, 0xcc, 0xef, 0xcb,
-    0x17, 0xfd, 0xc7, 0xd7, 0x88, 0x4d, 0x05, 0x8a, 0x01, 0xf6, 0xf8, 0xd2,
-    0xff, 0xfc, 0xfc, 0xc1, 0xff, 0x3c, 0xf9, 0xcd, 0xb0, 0x25, 0x8b, 0xff,
-    0xe2, 0xf6, 0xff, 0x70, 0xb8, 0x58, 0x01, 0x71, 0x62, 0xfd, 0x8f, 0x1c,
-    0xe3, 0x58, 0xbf, 0xfa, 0x63, 0xb0, 0x45, 0x99, 0xd2, 0x7b, 0x58, 0xa9,
-    0x46, 0x20, 0xd4, 0x8e, 0x55, 0x7f, 0xb4, 0x0f, 0x39, 0xb8, 0x4b, 0x17,
-    0x88, 0xee, 0xb1, 0x52, 0x7a, 0x02, 0x34, 0xbd, 0xcc, 0x25, 0x8b, 0xff,
-    0xfe, 0x72, 0x00, 0xf3, 0xbe, 0x38, 0xb7, 0xfb, 0xfb, 0x8e, 0x35, 0x8b,
-    0xee, 0x0f, 0x09, 0x62, 0x80, 0x8a, 0x6e, 0x0e, 0x79, 0xa2, 0xff, 0xd3,
-    0x9a, 0xcd, 0x00, 0xef, 0xc5, 0x8b, 0xde, 0xc8, 0x96, 0x2f, 0xbd, 0xc0,
-    0x6e, 0xb1, 0x79, 0xbb, 0xea, 0x58, 0xbf, 0x9b, 0xdc, 0x9c, 0xd9, 0x62,
-    0xa5, 0x70, 0x7b, 0x21, 0x39, 0xb9, 0x13, 0xc6, 0x35, 0xf7, 0xf6, 0x86,
-    0x39, 0x18, 0x78, 0xf8, 0x43, 0xdd, 0x09, 0x42, 0x21, 0xbf, 0x8b, 0xf8,
-    0x09, 0x25, 0x8b, 0xdd, 0xc3, 0x16, 0x2f, 0xe1, 0xbf, 0x70, 0x26, 0x58,
-    0xb0, 0x18, 0xf3, 0x38, 0x3d, 0x7f, 0xb0, 0xbd, 0x91, 0x4c, 0x7a, 0xc5,
-    0xff, 0xda, 0xce, 0x98, 0x3d, 0x4e, 0xed, 0xa5, 0x8b, 0xfd, 0x21, 0x36,
-    0xb4, 0xe0, 0x58, 0xbf, 0x9b, 0x7f, 0x9e, 0x46, 0xb1, 0x7b, 0x00, 0x3f,
-    0x9f, 0x1b, 0x1a, 0x5f, 0xe6, 0x87, 0xdb, 0x93, 0x1e, 0xb1, 0x52, 0x9b,
-    0x79, 0xc9, 0xd8, 0xd8, 0x10, 0xaa, 0xe1, 0x95, 0xff, 0xdd, 0xc3, 0x9f,
-    0x91, 0xff, 0x0b, 0x65, 0x8b, 0xff, 0xe1, 0x1b, 0xf7, 0x88, 0x07, 0x10,
-    0x0b, 0x06, 0xb1, 0x7f, 0xa4, 0xfc, 0xc3, 0xcc, 0x7a, 0xc5, 0x62, 0x34,
-    0x3b, 0x47, 0x12, 0x9d, 0xff, 0xb5, 0xb6, 0x0f, 0x3f, 0xfc, 0x8f, 0x58,
-    0xb1, 0xab, 0x17, 0x9e, 0x2e, 0x2c, 0x5f, 0x74, 0x9c, 0xed, 0x62, 0xef,
-    0x70, 0x67, 0x86, 0x18, 0xf5, 0x4a, 0x21, 0x49, 0x5a, 0xff, 0xda, 0xe1,
-    0xc3, 0xcd, 0x3c, 0xc4, 0xb1, 0x58, 0x7c, 0x42, 0x21, 0xbe, 0x92, 0xf7,
-    0x16, 0x2f, 0xbd, 0xfc, 0xf2, 0xc5, 0x86, 0xb1, 0x7b, 0xf8, 0x4b, 0x17,
-    0x98, 0xb6, 0x93, 0xd1, 0xe1, 0x1f, 0x84, 0xab, 0x13, 0xfd, 0xe4, 0x65,
-    0x42, 0x21, 0x09, 0xce, 0xfb, 0xdf, 0xc2, 0x58, 0xbf, 0xc5, 0x9e, 0xf6,
-    0x6a, 0x25, 0x8b, 0xfb, 0x8d, 0x02, 0x93, 0xac, 0x5e, 0x29, 0x8f, 0x58,
-    0xbf, 0xfe, 0x84, 0xeb, 0x6f, 0x39, 0xbc, 0xe3, 0x14, 0x16, 0x2f, 0xed,
-    0xb9, 0x87, 0x98, 0xf5, 0x8a, 0x89, 0x10, 0x81, 0xa9, 0x56, 0x26, 0x97,
-    0x11, 0x16, 0x8d, 0x38, 0x5a, 0x14, 0x28, 0xef, 0xf3, 0xf7, 0xc6, 0xdf,
-    0x90, 0x58, 0xbf, 0x89, 0xbb, 0x86, 0x79, 0x62, 0xef, 0xba, 0xc5, 0xfd,
-    0x80, 0x90, 0x06, 0x75, 0x8a, 0x58, 0xbf, 0xfe, 0xef, 0x77, 0xe7, 0xdf,
-    0x59, 0xd2, 0x4b, 0xcb, 0x15, 0x11, 0xef, 0xf8, 0x32, 0xc1, 0x12, 0x2c,
-    0x79, 0x08, 0xea, 0xd9, 0x32, 0x47, 0x2e, 0x28, 0x64, 0x5f, 0x81, 0xdf,
-    0x1a, 0x3d, 0x62, 0xff, 0x61, 0xd8, 0x87, 0xf9, 0x58, 0xbe, 0x1f, 0xb3,
-    0xa2, 0xc5, 0x0c, 0xf5, 0xfe, 0x65, 0x7f, 0xfc, 0x26, 0xd4, 0x23, 0xb0,
-    0xa4, 0x07, 0x68, 0x2c, 0x5f, 0xfd, 0x0f, 0xc8, 0xfd, 0x98, 0x5e, 0xe2,
-    0xc5, 0xc3, 0x82, 0xc5, 0xfb, 0x3d, 0xf7, 0xf2, 0xc5, 0xfe, 0xc1, 0x8b,
-    0xdc, 0x87, 0x5e, 0xb1, 0x76, 0x41, 0x62, 0xbe, 0x7a, 0x24, 0x75, 0x7f,
-    0xff, 0xf1, 0x67, 0x46, 0x86, 0x17, 0x70, 0x9c, 0xd8, 0x5b, 0x3e, 0xa4,
-    0xeb, 0x16, 0x84, 0xa7, 0xbc, 0x32, 0x2c, 0x52, 0xd2, 0x27, 0xc6, 0x3c,
-    0xf2, 0x19, 0x0d, 0xf1, 0xfc, 0xfb, 0x2c, 0x5f, 0x77, 0xf1, 0x6e, 0xb1,
-    0x52, 0xac, 0x5b, 0x25, 0x31, 0x3b, 0x50, 0x89, 0x2f, 0xfe, 0xe9, 0xe3,
-    0x64, 0xa1, 0x9f, 0x73, 0xac, 0x5b, 0xcb, 0x17, 0xfe, 0x80, 0x1b, 0xd3,
-    0xd4, 0xfb, 0x3a, 0xc5, 0xff, 0xee, 0x6a, 0x5c, 0xbd, 0xc1, 0x0f, 0xee,
-    0xb1, 0x5b, 0x22, 0x7b, 0xb1, 0x2f, 0x21, 0x5f, 0xee, 0x9f, 0x68, 0x4e,
-    0x12, 0xc5, 0xff, 0x16, 0xff, 0x78, 0x99, 0xa0, 0xb1, 0x4b, 0x16, 0x06,
-    0x1e, 0x37, 0x0e, 0xaa, 0x51, 0xa7, 0x86, 0x4c, 0xf5, 0x7d, 0x06, 0xd4,
-    0x16, 0x2f, 0xff, 0x4e, 0x9b, 0xc2, 0xf3, 0xfb, 0x9f, 0x75, 0x8b, 0x42,
-    0x23, 0xed, 0xf9, 0x1d, 0x2c, 0x5f, 0x07, 0xf6, 0xf2, 0xc5, 0xb3, 0x86,
-    0xc0, 0x20, 0xcb, 0xfa, 0x07, 0xf1, 0x0a, 0x25, 0x8b, 0xff, 0xe0, 0xe1,
-    0x3d, 0x1c, 0x81, 0xa7, 0x93, 0xe2, 0x45, 0x69, 0x10, 0x3e, 0x30, 0xbe,
-    0xf8, 0x7d, 0xf9, 0x62, 0xf8, 0xf8, 0xfd, 0x16, 0x2f, 0xde, 0x6d, 0xf9,
-    0x05, 0x8a, 0xc3, 0xce, 0x08, 0x92, 0xe8, 0xa3, 0xd6, 0x2f, 0xbb, 0xf6,
-    0x7d, 0x62, 0xb6, 0x3c, 0x02, 0x1c, 0xb0, 0x4b, 0x15, 0x2a, 0x8b, 0xf6,
-    0x59, 0xc8, 0x54, 0x6e, 0x46, 0xee, 0x82, 0x62, 0x8e, 0x22, 0xbe, 0x39,
-    0x31, 0xab, 0x17, 0x37, 0x96, 0x2b, 0x63, 0x75, 0xb9, 0x1d, 0xfd, 0xf6,
-    0xea, 0x14, 0xe9, 0x62, 0xd8, 0xb1, 0x46, 0x1e, 0x17, 0x8c, 0x6f, 0xf0,
-    0x39, 0x85, 0x3d, 0xf1, 0x62, 0xfd, 0xa7, 0xd9, 0x8e, 0xac, 0x84, 0xcb,
-    0xef, 0x0a, 0x59, 0x59, 0x09, 0x97, 0x02, 0x55, 0x80, 0x99, 0x7f, 0x89,
-    0x8d, 0xf4, 0xe8, 0x0a, 0xc0, 0x4c, 0xbf, 0xdc, 0xcf, 0xbf, 0x05, 0xb2,
-    0xb2, 0x13, 0x2e, 0xc1, 0xab, 0x21, 0x32, 0xe0, 0x82, 0x5e, 0x42, 0x65,
-    0x62, 0x6a, 0xfd, 0x9b, 0x39, 0x79, 0xc9, 0x38, 0x83, 0xd1, 0x08, 0x22,
-    0x4b, 0x79, 0x39, 0x09, 0x88, 0xc3, 0xe7, 0xae, 0xd5, 0x24, 0xe8, 0x8c,
-    0x28, 0xfc, 0xaf, 0x0c, 0x44, 0xb1, 0x6d, 0xd6, 0x2f, 0xdc, 0xf1, 0x64,
-    0x16, 0x2b, 0x0f, 0x63, 0x43, 0xa0, 0x13, 0xac, 0x56, 0xdc, 0xf2, 0xab,
-    0x9a, 0x12, 0x57, 0xff, 0xe0, 0x1d, 0xa1, 0xcf, 0xcf, 0x4c, 0x0c, 0x6d,
-    0x05, 0x8a, 0x96, 0x73, 0x19, 0xaa, 0x2f, 0x1a, 0xd7, 0xe5, 0xa5, 0xb2,
-    0x19, 0x47, 0x71, 0xc9, 0x59, 0x3e, 0x9c, 0x15, 0x11, 0xdd, 0xff, 0xf6,
-    0x05, 0xf6, 0x7f, 0x4f, 0x84, 0x0c, 0x25, 0x8b, 0xff, 0x40, 0x98, 0xd8,
-    0xa0, 0xfa, 0x82, 0xc5, 0xf6, 0x79, 0xbe, 0xb1, 0x7e, 0xc8, 0xa1, 0x3d,
-    0xac, 0x5c, 0xc6, 0xf5, 0xd4, 0xf3, 0x08, 0x8a, 0xb4, 0x8c, 0x22, 0x84,
-    0x6d, 0xf3, 0xe9, 0x80, 0xb1, 0x7f, 0xf4, 0x85, 0xe3, 0x5b, 0x99, 0x84,
-    0x6a, 0xc5, 0x40, 0xfa, 0x08, 0x8a, 0xfc, 0x7e, 0xe0, 0xe4, 0xb1, 0x71,
-    0x0f, 0x0f, 0x2b, 0xc4, 0x37, 0xcd, 0xd3, 0x02, 0x58, 0xb7, 0x58, 0xb1,
-    0x7f, 0xfc, 0xd0, 0xfc, 0xcb, 0xfb, 0x8e, 0x5d, 0xc1, 0x62, 0xf6, 0x6b,
-    0x16, 0x2a, 0x08, 0x82, 0xf8, 0xb8, 0x13, 0xef, 0x63, 0x71, 0x62, 0xf4,
-    0x53, 0xc5, 0x8b, 0xfb, 0x6d, 0x9c, 0xa1, 0xc5, 0x8b, 0x80, 0x75, 0x8a,
-    0xd1, 0xe4, 0x11, 0x85, 0xff, 0xa2, 0x70, 0xb3, 0x4f, 0xb3, 0x1d, 0x62,
-    0xff, 0xa4, 0x5e, 0x27, 0xe8, 0x19, 0xd6, 0x2f, 0xfb, 0x3c, 0xf9, 0xcd,
-    0xb0, 0x25, 0x8b, 0xdc, 0x6d, 0x2c, 0x58, 0xeb, 0x16, 0x02, 0xc5, 0x49,
-    0xa4, 0x80, 0x95, 0xf0, 0xc7, 0x30, 0x41, 0x15, 0xd9, 0xc3, 0x13, 0xe3,
-    0x91, 0xcc, 0x66, 0x72, 0x1d, 0x20, 0xfc, 0xf3, 0xc7, 0x51, 0xc8, 0x21,
-    0x90, 0x5f, 0xfe, 0x68, 0x7e, 0x7a, 0x06, 0x76, 0x6d, 0x6e, 0xb1, 0x52,
-    0xbb, 0x55, 0x91, 0x88, 0xbc, 0x36, 0x74, 0x58, 0xd0, 0xa7, 0x29, 0x42,
-    0x62, 0x84, 0x65, 0xf7, 0xdb, 0x91, 0xeb, 0x17, 0xdb, 0x94, 0xe9, 0x62,
-    0xe7, 0xe8, 0x61, 0xe4, 0xe1, 0x35, 0xff, 0xb4, 0xc6, 0xeb, 0x01, 0xc6,
-    0xdd, 0x62, 0xff, 0xf8, 0x78, 0x00, 0x39, 0x18, 0x58, 0x01, 0x71, 0x62,
-    0xfe, 0xf0, 0x9b, 0x9c, 0xf2, 0xc5, 0xfb, 0x93, 0x80, 0x95, 0x8b, 0x8b,
-    0x3b, 0x3d, 0x6f, 0x17, 0xdc, 0xda, 0x58, 0xa3, 0x11, 0xd5, 0xf8, 0x53,
-    0x31, 0x6d, 0x69, 0x36, 0x00, 0x46, 0x57, 0x7f, 0xdf, 0x90, 0xcf, 0x9d,
-    0x1f, 0x75, 0x8a, 0xc4, 0xfd, 0x9a, 0x38, 0xfe, 0x15, 0x5e, 0x7d, 0x1a,
-    0xb1, 0x76, 0x80, 0xb1, 0x58, 0x6d, 0x9c, 0x7a, 0xed, 0xb4, 0xb1, 0x70,
-    0x22, 0x58, 0xbf, 0xf8, 0xf1, 0x41, 0x8b, 0x61, 0xc9, 0x6c, 0xb1, 0x76,
-    0xd8, 0xb1, 0x52, 0x89, 0x11, 0x8c, 0xe0, 0xcb, 0x23, 0xdf, 0xb0, 0x8d,
-    0x18, 0x16, 0x2f, 0xa2, 0xfb, 0xe9, 0x62, 0xf7, 0xdf, 0x4b, 0x17, 0xcf,
-    0xf9, 0xe1, 0x87, 0x83, 0x11, 0x25, 0x71, 0x14, 0x9e, 0x6a, 0xbb, 0x90,
-    0x58, 0xb8, 0x44, 0xb1, 0x7f, 0xdc, 0xd6, 0x4f, 0x70, 0x73, 0xac, 0x56,
-    0x1f, 0x4e, 0x86, 0x04, 0x2f, 0x7c, 0xff, 0x63, 0xac, 0x5f, 0x6a, 0x79,
-    0xb2, 0xc5, 0xf8, 0x5b, 0x7d, 0xc2, 0x58, 0xa7, 0x4c, 0xaf, 0x50, 0x8c,
-    0xf1, 0x70, 0x64, 0x5d, 0x44, 0x95, 0x2f, 0xa2, 0xc9, 0xb4, 0xb5, 0x68,
-    0x34, 0x0e, 0x7c, 0xcb, 0x25, 0x2c, 0x1b, 0x1e, 0xde, 0xf3, 0x9a, 0x3d,
-    0xcb, 0x8a, 0x79, 0x6c, 0xf1, 0x4f, 0x87, 0xea, 0x77, 0x3c, 0xf2, 0xb7,
-    0x7f, 0x38, 0xee, 0xd0, 0xaa, 0x04, 0x7c, 0xe5, 0x18, 0xf7, 0x25, 0x16,
-    0xfa, 0x9f, 0xe5, 0xd2, 0x79, 0x2c, 0x29, 0x57, 0xb1, 0xcd, 0x61, 0xc2,
-    0xc3, 0xaa, 0x50, 0x4d, 0xff, 0xfc, 0x67, 0x33, 0x3a, 0x39, 0x03, 0x99,
-    0xef, 0xe7, 0x45, 0x8b, 0xf7, 0x9f, 0xb6, 0x25, 0x8b, 0xc7, 0xf7, 0x16,
-    0x2f, 0xb5, 0xd3, 0x06, 0xb1, 0x70, 0x7d, 0x4b, 0x15, 0x28, 0x87, 0xd8,
-    0xa1, 0x87, 0x80, 0x4b, 0x76, 0x12, 0xc5, 0xde, 0xe2, 0xc5, 0x49, 0xae,
-    0x21, 0x6b, 0xff, 0xb3, 0xf9, 0xee, 0xf7, 0x7d, 0x7f, 0x16, 0x2f, 0xe7,
-    0xd1, 0x4f, 0x70, 0x58, 0xbb, 0x38, 0xb1, 0x7f, 0xee, 0x66, 0xbc, 0x4c,
-    0x69, 0xb8, 0xb1, 0x50, 0x47, 0x50, 0xc7, 0xf1, 0x18, 0x05, 0xdc, 0x17,
-    0xbf, 0xf1, 0x60, 0x1b, 0x59, 0xd3, 0x06, 0xb1, 0x7e, 0x8a, 0x12, 0x5e,
-    0x58, 0xbf, 0xf6, 0xb3, 0x9c, 0x11, 0x06, 0x79, 0x58, 0xbe, 0x6f, 0x87,
-    0x05, 0x8a, 0x82, 0x23, 0x74, 0x53, 0xc4, 0x0b, 0xfb, 0x20, 0x42, 0x6e,
-    0x2c, 0x5f, 0x77, 0xc7, 0x95, 0x8b, 0xff, 0xf6, 0x78, 0x40, 0x3b, 0x43,
-    0x20, 0xff, 0xce, 0x8b, 0x17, 0xde, 0x72, 0x35, 0x62, 0xec, 0x22, 0x3f,
-    0xae, 0xa5, 0x7a, 0x35, 0x3f, 0x4e, 0xe1, 0x99, 0xa3, 0x0f, 0x96, 0x82,
-    0x13, 0xb7, 0xef, 0x71, 0xbb, 0xdd, 0x62, 0xfb, 0x34, 0xe6, 0xac, 0x5e,
-    0x0b, 0x63, 0xac, 0x5f, 0xb9, 0xa1, 0x48, 0x16, 0x2f, 0xfd, 0x3d, 0x5c,
-    0x7c, 0x2c, 0xec, 0x25, 0x8b, 0xec, 0x18, 0xf6, 0x58, 0xbf, 0xfe, 0xe9,
-    0xac, 0xd8, 0xc1, 0x4e, 0x7a, 0x7b, 0x82, 0xc5, 0xed, 0x08, 0x6b, 0x17,
-    0xfa, 0x4e, 0x4d, 0x0c, 0xfa, 0xc5, 0x68, 0xf4, 0x3e, 0x3d, 0x7f, 0xfa,
-    0x18, 0x42, 0xf7, 0xdf, 0x21, 0x27, 0x58, 0xa9, 0x54, 0xc9, 0x05, 0x71,
-    0x95, 0xe1, 0x1f, 0x64, 0x11, 0x14, 0x9d, 0x09, 0x89, 0x39, 0x0a, 0x51,
-    0x11, 0x5f, 0xa4, 0x32, 0xec, 0x0b, 0x17, 0xff, 0xa2, 0x66, 0x2d, 0x83,
-    0xcf, 0x8d, 0x89, 0x62, 0xff, 0x7e, 0x4d, 0x0f, 0xed, 0xe5, 0x8a, 0xfa,
-    0x2a, 0xf8, 0x55, 0xe4, 0xbb, 0xb3, 0xa9, 0x62, 0xe0, 0xf8, 0xb1, 0x7e,
-    0xf0, 0x58, 0x5b, 0x2c, 0x5a, 0x7e, 0x78, 0x64, 0x33, 0x51, 0xa2, 0x20,
-    0xe0, 0xbb, 0x60, 0x96, 0x29, 0x62, 0xd9, 0x85, 0xff, 0x41, 0x3b, 0x9c,
-    0xd5, 0x8b, 0xf8, 0x5b, 0x4f, 0xa4, 0x6b, 0x15, 0xb1, 0xf6, 0xb9, 0x37,
-    0x86, 0x2f, 0xd2, 0x5e, 0xfe, 0x2c, 0x5f, 0xa7, 0x34, 0xd0, 0x58, 0xa7,
-    0x3c, 0xe2, 0x27, 0xbf, 0x7b, 0x22, 0x73, 0xac, 0x5f, 0xa7, 0xb0, 0x02,
-    0x56, 0x2a, 0x4f, 0x48, 0x8a, 0x6f, 0xfd, 0xd3, 0x3d, 0xf9, 0x37, 0x35,
-    0x8b, 0x17, 0x73, 0x16, 0x2d, 0xe5, 0x8b, 0x4c, 0x0d, 0x49, 0x0b, 0xd3,
-    0x22, 0x3f, 0xa3, 0x55, 0xfb, 0xf2, 0xfc, 0x95, 0x8a, 0x93, 0xcb, 0x62,
-    0x4b, 0xdf, 0x70, 0xd6, 0x2f, 0xcf, 0xd3, 0xcf, 0xb2, 0xc5, 0xfb, 0xdf,
-    0x9d, 0x41, 0x62, 0xff, 0xd8, 0x79, 0x29, 0x01, 0xda, 0x0b, 0x17, 0xfc,
-    0x4e, 0x6c, 0xfb, 0x8f, 0xa5, 0x8b, 0xff, 0xdf, 0x13, 0x43, 0xbf, 0x6a,
-    0x73, 0xbc, 0x58, 0xa3, 0xa2, 0x17, 0x87, 0x37, 0xfb, 0x36, 0xdf, 0xf3,
-    0xae, 0x2c, 0x5f, 0x43, 0xd9, 0xba, 0xc5, 0x61, 0xfe, 0xe8, 0x8d, 0x8d,
-    0xad, 0x2b, 0x17, 0xff, 0xbb, 0xc1, 0xf2, 0x5e, 0x0f, 0xe6, 0xfa, 0xc5,
-    0x11, 0xed, 0x88, 0x46, 0xff, 0xbe, 0xd0, 0x98, 0x8a, 0x4e, 0xb1, 0x7f,
-    0xcc, 0xe3, 0x26, 0x84, 0x25, 0x62, 0xfb, 0xdf, 0x70, 0x96, 0x2c, 0x3f,
-    0x9e, 0xdb, 0x1b, 0xde, 0x0f, 0x22, 0x58, 0xbf, 0x8f, 0xd5, 0xe7, 0xd6,
-    0xeb, 0x17, 0xfd, 0xde, 0xff, 0x7e, 0x8e, 0x43, 0x58, 0xb1, 0x62, 0x23,
-    0xdc, 0x7d, 0x8c, 0xef, 0xfa, 0x1c, 0x91, 0x77, 0x21, 0xca, 0xc5, 0xff,
-    0x49, 0xf9, 0xe2, 0x60, 0x71, 0x62, 0xff, 0xfb, 0x3e, 0xf2, 0x5e, 0xe7,
-    0x89, 0x81, 0xc5, 0x8b, 0xdd, 0x07, 0x32, 0x8c, 0x2f, 0x9d, 0x91, 0xcd,
-    0xfe, 0xce, 0x18, 0x3c, 0xc2, 0x58, 0xa7, 0x3f, 0x4f, 0xa0, 0xdf, 0xff,
-    0x36, 0xbb, 0x87, 0xe4, 0xb6, 0x8b, 0xf3, 0xb2, 0xc5, 0xfd, 0x90, 0x89,
-    0x9b, 0x65, 0x8b, 0x1d, 0x62, 0xff, 0xe9, 0x3e, 0x79, 0xf9, 0x98, 0x46,
-    0xac, 0x5d, 0x9b, 0x98, 0x7a, 0xa0, 0x12, 0xbf, 0x8e, 0xf2, 0x76, 0x25,
-    0x8a, 0xd2, 0x37, 0xff, 0x08, 0x40, 0x17, 0xdf, 0xfc, 0xe7, 0x18, 0x9b,
-    0x50, 0xce, 0xfc, 0xb1, 0x58, 0x7f, 0x7b, 0x9a, 0xd4, 0x13, 0xd0, 0x28,
-    0xeb, 0xaf, 0xf1, 0xbf, 0x62, 0x16, 0x7d, 0x62, 0xff, 0xcc, 0x40, 0xef,
-    0xda, 0x9c, 0x09, 0x62, 0xff, 0xbe, 0xd0, 0xfb, 0x44, 0x20, 0xd6, 0x2f,
-    0xfd, 0xcf, 0xb9, 0x9d, 0xc2, 0x73, 0x65, 0x8b, 0xf3, 0x38, 0xc5, 0x2b,
-    0x17, 0xda, 0x78, 0xb8, 0xb1, 0x76, 0x0c, 0xc3, 0xcb, 0xd1, 0x3d, 0xc6,
-    0x75, 0x2c, 0x54, 0x7a, 0x6a, 0x7f, 0x40, 0x01, 0xe7, 0xa1, 0x1b, 0xd0,
-    0xba, 0xa5, 0x3d, 0xcc, 0x8e, 0x1e, 0xf6, 0x0e, 0x39, 0x62, 0xff, 0xd8,
-    0xd8, 0x37, 0xe8, 0x1b, 0x8d, 0x62, 0xff, 0xff, 0xde, 0x9c, 0x2e, 0xfc,
-    0x66, 0x71, 0xc8, 0x05, 0x9e, 0xfe, 0x2c, 0x5f, 0x3c, 0xf7, 0x05, 0x8b,
-    0x98, 0xe6, 0x22, 0x3b, 0xed, 0x74, 0x34, 0x7e, 0xfe, 0x19, 0xd7, 0x8b,
-    0x02, 0x58, 0xbf, 0xd8, 0x71, 0xb8, 0x05, 0x05, 0x8b, 0xef, 0xb3, 0x1d,
-    0x62, 0xf9, 0xbf, 0xf7, 0x58, 0xa2, 0x3c, 0x4e, 0x84, 0x57, 0xe2, 0x84,
-    0x73, 0x6c, 0xb1, 0x52, 0x79, 0xe1, 0x91, 0xdf, 0xfb, 0x3a, 0x7d, 0xf3,
-    0x82, 0x6e, 0xd6, 0x2a, 0x57, 0x2e, 0x61, 0x28, 0x14, 0xd2, 0x87, 0x8c,
-    0x76, 0x22, 0x8f, 0x8e, 0x82, 0x18, 0xfc, 0x22, 0xbf, 0xff, 0xdd, 0x7b,
-    0xe8, 0x7f, 0x9c, 0xfb, 0x85, 0x1a, 0xfc, 0xf1, 0xd8, 0xb1, 0x7f, 0xff,
-    0x9f, 0xa1, 0x0b, 0x86, 0x06, 0x52, 0x3f, 0xb4, 0x33, 0x8b, 0x17, 0x1a,
-    0xeb, 0x17, 0xf6, 0x9c, 0x5d, 0x7e, 0x79, 0x62, 0x96, 0x24, 0xd9, 0xd6,
-    0xcc, 0xe8, 0xf1, 0xc3, 0xe8, 0xd2, 0x0d, 0xc7, 0xbb, 0x2b, 0x8f, 0x29,
-    0xd4, 0x67, 0xe7, 0x84, 0x47, 0xc8, 0x5a, 0x12, 0x85, 0x0b, 0x6e, 0x46,
-    0xd1, 0xe9, 0xea, 0xa1, 0x42, 0x1b, 0xa3, 0x7c, 0x73, 0x27, 0x52, 0x5d,
-    0xfd, 0xc6, 0xc1, 0xbf, 0x45, 0x8b, 0xf7, 0xf3, 0x53, 0x05, 0x8b, 0xfb,
-    0xb8, 0x73, 0xf9, 0xb2, 0xc5, 0x0c, 0xf6, 0x7e, 0x51, 0x7f, 0xcd, 0xf8,
-    0x9c, 0xbf, 0x9d, 0xac, 0x54, 0x9e, 0xe6, 0x11, 0x5f, 0xfe, 0x7e, 0x67,
-    0xc5, 0xbf, 0x9f, 0xcf, 0xda, 0xc5, 0xdd, 0xec, 0xb1, 0x60, 0x2c, 0x50,
-    0x8d, 0x60, 0x43, 0x57, 0xfc, 0x0e, 0x7b, 0x30, 0xbd, 0xc5, 0x8b, 0xf4,
-    0x50, 0x9f, 0x71, 0x62, 0xfa, 0x74, 0x6c, 0xac, 0x5d, 0xc0, 0x2c, 0x51,
-    0x89, 0x9c, 0x7d, 0xe1, 0x88, 0x80, 0x73, 0xe2, 0xa8, 0xe2, 0x3b, 0xff,
-    0xff, 0xd8, 0x40, 0xc2, 0xf7, 0xf3, 0xf3, 0x91, 0x3e, 0xa2, 0xfb, 0xf7,
-    0xe5, 0x8b, 0xfe, 0xf3, 0x17, 0xb3, 0x6c, 0xd9, 0x62, 0xff, 0xff, 0xff,
-    0xe6, 0xe9, 0xf6, 0x80, 0x87, 0x9f, 0x79, 0x83, 0x14, 0x9f, 0x05, 0xd7,
-    0xbf, 0x84, 0xdb, 0x4e, 0x96, 0x2b, 0xe9, 0xab, 0x79, 0xe0, 0x33, 0xab,
-    0xfd, 0xb6, 0x16, 0x76, 0x0e, 0x2c, 0x5e, 0x04, 0xf4, 0x58, 0xb4, 0x16,
-    0x2b, 0x0d, 0x88, 0x63, 0xf7, 0xf6, 0x9f, 0x7f, 0xe4, 0x4b, 0x17, 0xff,
-    0xbe, 0xc6, 0x07, 0xef, 0x3c, 0x4f, 0xf1, 0x2c, 0x5e, 0x87, 0x31, 0x62,
-    0xff, 0xff, 0x48, 0x22, 0x84, 0xec, 0x1c, 0xed, 0xbf, 0xdb, 0x53, 0xda,
-    0xc5, 0xff, 0x03, 0x3d, 0x3d, 0x1c, 0x80, 0xb1, 0x76, 0x45, 0x04, 0x50,
-    0xb3, 0x3d, 0x18, 0x99, 0xd3, 0x27, 0x14, 0x2f, 0xaf, 0xf7, 0x9f, 0x67,
-    0xee, 0x3b, 0x16, 0x2b, 0xb4, 0xfe, 0x0e, 0x43, 0xe8, 0xda, 0x83, 0x35,
-    0xbf, 0xec, 0x10, 0xcc, 0x9e, 0x4c, 0x16, 0x2f, 0x8b, 0xcf, 0xf5, 0x8a,
-    0x30, 0xf7, 0x18, 0xea, 0xe6, 0x3a, 0xc5, 0xff, 0x0a, 0x2f, 0xbc, 0x5c,
-    0x93, 0xac, 0x53, 0x9e, 0x9e, 0x85, 0xeb, 0x15, 0xe4, 0x68, 0xc9, 0xa5,
-    0x2f, 0x02, 0x14, 0x5e, 0x75, 0xbd, 0x38, 0x12, 0xc5, 0xfe, 0x7e, 0x14,
-    0xfa, 0x60, 0xb1, 0x6e, 0xbd, 0x62, 0x88, 0xf9, 0xb8, 0x3b, 0xe3, 0x2b,
-    0xfb, 0x07, 0xf7, 0x1c, 0xac, 0x5f, 0x4f, 0x7c, 0x65, 0x8a, 0x32, 0x10,
-    0x8b, 0x91, 0xb9, 0x57, 0x58, 0x35, 0x1a, 0x30, 0xcd, 0x2b, 0xab, 0x68,
-    0x7a, 0xc0, 0xe8, 0x71, 0x86, 0xe5, 0xe8, 0xd8, 0x1b, 0x1e, 0x96, 0xf0,
-    0xe6, 0xee, 0x35, 0x47, 0x9c, 0xa1, 0x8f, 0x8c, 0xf2, 0x28, 0x59, 0xea,
-    0x16, 0x9f, 0x7d, 0x6a, 0x78, 0x0f, 0x5f, 0x19, 0x21, 0x43, 0x93, 0xd1,
-    0xac, 0x0a, 0x75, 0xe7, 0xa4, 0x2f, 0x23, 0x8b, 0x83, 0x2d, 0xbf, 0xd3,
-    0xf1, 0x78, 0x98, 0xd5, 0x8b, 0xd9, 0xd3, 0x16, 0x2f, 0x73, 0x9c, 0x58,
-    0xbb, 0xad, 0x75, 0x8b, 0xff, 0x8b, 0x7f, 0xe7, 0x3d, 0x98, 0x7e, 0x2c,
-    0x5f, 0xfc, 0x4e, 0x7c, 0x1f, 0xc5, 0xbc, 0x52, 0xb1, 0x7a, 0x11, 0x32,
-    0xc5, 0xff, 0xd8, 0x79, 0x0c, 0x85, 0x02, 0xc3, 0xac, 0x57, 0x67, 0xc4,
-    0x43, 0xd7, 0x7e, 0x56, 0x29, 0xcd, 0xcf, 0x88, 0xaf, 0xf8, 0xbd, 0xfc,
-    0x98, 0x4f, 0x16, 0x2f, 0xb0, 0xdc, 0x1a, 0xc5, 0xff, 0xfc, 0x3c, 0x1b,
-    0x39, 0x4f, 0xd9, 0xe1, 0x07, 0x1a, 0xc5, 0x4a, 0x2c, 0xfe, 0x70, 0x22,
-    0x3b, 0xf1, 0x0a, 0x19, 0xc5, 0x8b, 0xfe, 0xc1, 0xfe, 0x7d, 0xf9, 0xe2,
-    0xc5, 0xc3, 0x7c, 0x3e, 0x12, 0x28, 0xbf, 0xfc, 0xf3, 0xef, 0x89, 0x8f,
-    0x14, 0x27, 0x65, 0x8b, 0xf8, 0xb3, 0x5a, 0xce, 0xd6, 0x2b, 0xe7, 0xf5,
-    0xc4, 0xcb, 0xf7, 0x8b, 0x1a, 0x0b, 0x17, 0xfe, 0x6f, 0x13, 0x73, 0xec,
-    0x0e, 0x2c, 0x5f, 0xec, 0x39, 0x82, 0xf4, 0x25, 0x62, 0xf9, 0xff, 0x87,
-    0x58, 0xbf, 0xa7, 0x7f, 0xf6, 0xd1, 0xeb, 0x15, 0x87, 0xab, 0xa2, 0x2b,
-    0xff, 0xf9, 0xbf, 0x30, 0x83, 0x82, 0x7e, 0xff, 0x97, 0xd9, 0x62, 0xb6,
-    0x4d, 0x0c, 0x67, 0xda, 0x84, 0x57, 0x42, 0x1b, 0xc5, 0x3c, 0x58, 0xbe,
-    0xc2, 0xc3, 0xac, 0x5f, 0xf8, 0x53, 0x17, 0x24, 0x8f, 0x3c, 0x58, 0xa5,
-    0x8a, 0x94, 0x44, 0x40, 0x73, 0x84, 0x22, 0x3f, 0xbf, 0x09, 0x86, 0x79,
-    0x58, 0xbf, 0xb6, 0xc0, 0xb3, 0xbf, 0x2c, 0x5f, 0xdf, 0x90, 0x14, 0xc4,
-    0xb1, 0x46, 0x9e, 0xff, 0x66, 0x37, 0xff, 0x8a, 0x76, 0x61, 0xfe, 0x7e,
-    0x58, 0x6a, 0xc5, 0x61, 0xf7, 0x39, 0x25, 0xff, 0xfd, 0x07, 0xf1, 0x37,
-    0x7c, 0x6f, 0x16, 0x47, 0xfd, 0xd6, 0x2f, 0xf4, 0x87, 0xb9, 0x67, 0xf1,
-    0x62, 0xb7, 0x4e, 0x9b, 0x50, 0xf5, 0x62, 0x0f, 0x2e, 0xdf, 0xf7, 0xde,
-    0x1f, 0x68, 0x39, 0xd6, 0x2f, 0xf3, 0x3e, 0xb4, 0xe1, 0x79, 0x62, 0xff,
-    0x7b, 0x7f, 0x79, 0xa1, 0xc5, 0x8b, 0xd3, 0xd7, 0x5e, 0xbb, 0x58, 0xae,
-    0xcf, 0x88, 0x8d, 0xaf, 0xfd, 0xc7, 0x2e, 0xe1, 0xe7, 0xe3, 0xac, 0x56,
-    0x26, 0x61, 0xf3, 0x96, 0x84, 0xb7, 0x88, 0xaf, 0x13, 0xc4, 0xb1, 0x7f,
-    0xfb, 0x3d, 0xf9, 0x0e, 0x42, 0x90, 0xf4, 0x6a, 0xc5, 0x39, 0xf5, 0xfc,
-    0x76, 0xfc, 0x03, 0xce, 0x9d, 0x62, 0xff, 0xf1, 0xf5, 0x3f, 0xcc, 0x19,
-    0x66, 0xd2, 0xb1, 0x7e, 0xf7, 0xe4, 0x5d, 0x7a, 0xc5, 0xdf, 0x65, 0x8b,
-    0xed, 0x8a, 0x76, 0x58, 0xa9, 0x46, 0xd6, 0x14, 0x32, 0x4f, 0x8b, 0x84,
-    0x2f, 0x7f, 0xf3, 0xf4, 0x71, 0xc9, 0x49, 0xe6, 0x0b, 0x17, 0xff, 0xec,
-    0x23, 0x7e, 0xd9, 0xb9, 0x0b, 0xdc, 0x21, 0xac, 0x5f, 0xf9, 0xcf, 0x83,
-    0xfb, 0xf0, 0xb1, 0x62, 0xff, 0x00, 0x30, 0x66, 0x14, 0x16, 0x2f, 0x48,
-    0xe5, 0x62, 0xa4, 0xf4, 0x0e, 0x69, 0x4e, 0x98, 0x21, 0x2b, 0x72, 0x11,
-    0xb7, 0xff, 0xb8, 0xfb, 0x7e, 0x4e, 0x2e, 0xf9, 0xf9, 0x58, 0xbf, 0xff,
-    0xf6, 0x78, 0xd6, 0x0f, 0xda, 0x9c, 0x23, 0xb0, 0xf3, 0x08, 0xd5, 0x8a,
-    0x96, 0x68, 0x06, 0xc8, 0xb0, 0x87, 0x08, 0xe1, 0xa7, 0x90, 0x90, 0xde,
-    0x14, 0xbd, 0x91, 0x3c, 0x6d, 0x51, 0x43, 0x3b, 0x51, 0xf1, 0x1e, 0x37,
-    0x3f, 0xc2, 0xb0, 0xa1, 0xf7, 0xc4, 0x7f, 0x46, 0x90, 0x11, 0xa4, 0x72,
-    0x6d, 0xf7, 0xf0, 0x0c, 0xb1, 0x74, 0x6a, 0x3a, 0xc5, 0xf1, 0x4e, 0xa0,
-    0xb1, 0x7f, 0xdf, 0x98, 0x39, 0x10, 0xbb, 0x58, 0xbb, 0x77, 0x58, 0xbf,
-    0xc3, 0xfc, 0xc4, 0x22, 0x75, 0x8b, 0x06, 0xb1, 0x79, 0xca, 0x56, 0x29,
-    0x8d, 0x77, 0x04, 0xea, 0x3d, 0x10, 0x5e, 0x62, 0xbf, 0xe9, 0x83, 0xfa,
-    0x12, 0x40, 0x58, 0xbf, 0xbc, 0x18, 0x01, 0x3d, 0xac, 0x5e, 0xf4, 0xe9,
-    0x62, 0xd3, 0x87, 0x9d, 0xd9, 0x8d, 0xf7, 0xdc, 0x5d, 0x7a, 0xc5, 0xe3,
-    0x88, 0xeb, 0x17, 0xb0, 0x8d, 0x58, 0xbf, 0xfb, 0xed, 0xc2, 0x90, 0x07,
-    0x01, 0x69, 0x62, 0xfd, 0x9a, 0x66, 0x1a, 0xc5, 0x75, 0xaa, 0xad, 0xa4,
-    0x7b, 0x08, 0xb7, 0x39, 0x78, 0x4d, 0x68, 0x98, 0xf0, 0x86, 0xf9, 0x3b,
-    0x14, 0x75, 0xe3, 0xdc, 0x1d, 0x0d, 0x1a, 0xfd, 0x26, 0x4f, 0xb7, 0x58,
-    0xad, 0x23, 0x8c, 0xa1, 0x73, 0x7b, 0xd9, 0x1e, 0xb1, 0x7f, 0xb5, 0x90,
-    0x6d, 0x30, 0x6b, 0x17, 0xf4, 0x9e, 0x7f, 0x20, 0x58, 0xbf, 0xe7, 0xf9,
-    0x4e, 0x68, 0xcc, 0x58, 0xa3, 0x0f, 0x97, 0xe5, 0xb6, 0x25, 0x8b, 0xfe,
-    0x98, 0xf2, 0x6f, 0x41, 0xfa, 0x2c, 0x5e, 0xfc, 0x8d, 0x62, 0xfe, 0x29,
-    0xdf, 0x53, 0x05, 0x8b, 0xff, 0xcc, 0xfe, 0x80, 0x8b, 0xdc, 0xfb, 0x41,
-    0x60, 0x33, 0x5d, 0x7e, 0x1b, 0x8b, 0x46, 0xac, 0x5d, 0x3f, 0x58, 0xbf,
-    0xdb, 0x96, 0x7f, 0x1c, 0x25, 0x8a, 0x74, 0xc6, 0xfe, 0x96, 0xcb, 0x7d,
-    0x0a, 0x83, 0x17, 0xbf, 0xf7, 0x03, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xb8,
-    0x7c, 0x58, 0xa8, 0x27, 0xf9, 0x1f, 0x1a, 0xc7, 0xd3, 0x09, 0x02, 0xff,
-    0xfe, 0xce, 0xf3, 0x8c, 0x5f, 0x79, 0xf7, 0xc4, 0xc7, 0x58, 0xbf, 0x43,
-    0x9d, 0x96, 0x96, 0x2f, 0xff, 0xfd, 0xdf, 0xa7, 0x6f, 0xbc, 0x5a, 0x90,
-    0xb3, 0x5e, 0xf4, 0xe7, 0x16, 0x2b, 0x48, 0x9a, 0xf1, 0x55, 0x18, 0xc8,
-    0x28, 0x99, 0x77, 0x7b, 0x13, 0xe1, 0x06, 0xf0, 0x99, 0x72, 0x36, 0x94,
-    0x1a, 0x48, 0xc2, 0x87, 0xa5, 0xcf, 0x8b, 0x17, 0xfb, 0xdc, 0x14, 0x7f,
-    0x9b, 0xeb, 0x14, 0x73, 0xce, 0xe8, 0x2d, 0x7b, 0x8d, 0xba, 0xc5, 0xb1,
-    0x62, 0xfc, 0x23, 0xbf, 0xe5, 0x62, 0xfd, 0x9a, 0xde, 0x71, 0x62, 0xb6,
-    0x3e, 0x12, 0x11, 0x0c, 0xa2, 0xff, 0xb0, 0xf9, 0xa7, 0xd9, 0x8e, 0xb1,
-    0x7f, 0xef, 0xc9, 0xbe, 0x72, 0x70, 0x71, 0x62, 0xf7, 0x36, 0xd2, 0xc5,
-    0xe2, 0x9f, 0xac, 0x5c, 0xda, 0x30, 0xdd, 0xc8, 0xfd, 0xff, 0x49, 0x6e,
-    0x63, 0xeb, 0x37, 0x58, 0xbf, 0xfb, 0xdf, 0xc3, 0xe6, 0xf3, 0xf9, 0x3a,
-    0xc5, 0xf1, 0x0b, 0x3e, 0xb1, 0x46, 0x1f, 0x3b, 0x22, 0xde, 0x63, 0xf1,
-    0x62, 0xb0, 0xdf, 0xb1, 0x15, 0x01, 0x30, 0x0f, 0x43, 0x86, 0xec, 0xd9,
-    0x62, 0xfd, 0xac, 0xf7, 0xdd, 0x62, 0xff, 0xa1, 0x9a, 0xd6, 0x7b, 0xee,
-    0xb1, 0x7d, 0x3f, 0x0c, 0x7a, 0x3e, 0x1f, 0x14, 0x5f, 0x7e, 0x75, 0x8b,
-    0x17, 0xd9, 0x13, 0xca, 0xc5, 0xed, 0xc9, 0x8c, 0x3c, 0x4f, 0x91, 0x5f,
-    0xf1, 0x4f, 0x71, 0xc6, 0xfb, 0x3e, 0xb1, 0x7f, 0xf6, 0x6b, 0x27, 0x98,
-    0x3f, 0xb4, 0x16, 0x29, 0x62, 0xde, 0x81, 0xe7, 0xc7, 0x21, 0xd1, 0xd1,
-    0x70, 0x50, 0x8d, 0xa9, 0x4c, 0x4d, 0xa1, 0xd9, 0x76, 0x1d, 0x62, 0xf4,
-    0x73, 0x81, 0x62, 0xff, 0xf8, 0xbc, 0xcd, 0xf2, 0x9f, 0x70, 0x2c, 0xfa,
-    0xc5, 0xcd, 0x1e, 0xb1, 0x7f, 0x47, 0x47, 0x1f, 0x83, 0xd9, 0x62, 0x86,
-    0x8d, 0x77, 0x17, 0x62, 0x0f, 0x27, 0xc7, 0x0d, 0x5f, 0xfb, 0x0f, 0x9d,
-    0x59, 0x82, 0xeb, 0xf8, 0xb1, 0x7f, 0x06, 0x36, 0xd6, 0x1d, 0x62, 0xff,
-    0xd8, 0x36, 0x81, 0x36, 0x9a, 0x0b, 0x17, 0xdd, 0x24, 0xa0, 0xb1, 0x79,
-    0x9f, 0x4b, 0x16, 0xd1, 0x88, 0xac, 0x19, 0x7e, 0x1e, 0xfc, 0x92, 0xbc,
-    0x99, 0xa8, 0x70, 0xf2, 0xbf, 0xf7, 0x27, 0x50, 0xfc, 0xef, 0x84, 0xb1,
-    0x7f, 0xff, 0x1c, 0x98, 0xdf, 0xbf, 0xa6, 0x11, 0x42, 0x75, 0xb2, 0xc5,
-    0xff, 0xc7, 0xe3, 0x43, 0x53, 0xc9, 0x2d, 0x96, 0x2f, 0xfa, 0x7d, 0xfc,
-    0x3e, 0x6b, 0x16, 0x2f, 0xde, 0xfb, 0xcf, 0x16, 0x2e, 0x62, 0xd1, 0xf0,
-    0x70, 0xe2, 0xff, 0xfb, 0x07, 0xf9, 0xe4, 0x1f, 0x9c, 0x9d, 0x41, 0x62,
-    0xb6, 0x3f, 0xc8, 0xe2, 0xcb, 0xff, 0xf7, 0xa7, 0xdc, 0x2c, 0xfb, 0xcf,
-    0xbe, 0xd0, 0x58, 0xb3, 0xac, 0x53, 0x9f, 0x2f, 0xd5, 0x2f, 0xfa, 0x41,
-    0xc1, 0x89, 0xb5, 0x05, 0x8b, 0xed, 0xd9, 0xb7, 0x5c, 0x80, 0x65, 0xb2,
-    0x07, 0xd7, 0xa3, 0xab, 0xfe, 0x3b, 0x76, 0xd0, 0xe3, 0xc1, 0x62, 0xff,
-    0xa7, 0xfb, 0xbf, 0x19, 0xf6, 0x58, 0xa3, 0x11, 0x37, 0x84, 0xfa, 0x3a,
-    0xb7, 0x45, 0x8a, 0x93, 0xc4, 0xc3, 0x0b, 0x01, 0x62, 0xe6, 0x82, 0xc5,
-    0x49, 0xa9, 0x38, 0x95, 0x7c, 0xfa, 0x40, 0x93, 0x71, 0x62, 0xc5, 0xcc,
-    0x05, 0x8a, 0x93, 0xcf, 0x22, 0x2f, 0x0b, 0x5b, 0x75, 0x8a, 0xd1, 0xe0,
-    0x11, 0x6d, 0x4a, 0xe4, 0x76, 0x2f, 0x34, 0x64, 0x3c, 0x84, 0x58, 0x72,
-    0x98, 0xe8, 0x6c, 0xbe, 0x43, 0x4e, 0x77, 0x7a, 0xee, 0x32, 0xcd, 0x14,
-    0x9d, 0xe7, 0xf1, 0xc8, 0x82, 0x1f, 0xc5, 0x1c, 0x07, 0x0a, 0xbd, 0x39,
-    0x9b, 0x71, 0xb8, 0xb1, 0x74, 0xc7, 0x2c, 0x5f, 0xd0, 0xcd, 0x69, 0xa0,
-    0xb1, 0x61, 0x9a, 0x7c, 0x1f, 0x18, 0xf0, 0xd5, 0x86, 0xb1, 0x7f, 0xf3,
-    0x7b, 0x82, 0x87, 0xd9, 0xc9, 0x96, 0x2b, 0xb3, 0xd5, 0x38, 0x95, 0xff,
-    0xf8, 0x65, 0x9c, 0x9d, 0x19, 0xcf, 0xb0, 0xe4, 0x6b, 0x17, 0x4c, 0x4b,
-    0x14, 0xe7, 0xdc, 0x1a, 0xb5, 0xe7, 0x98, 0x2c, 0x5e, 0xe9, 0x3f, 0x58,
-    0xa9, 0x67, 0xa6, 0xc0, 0x93, 0x1f, 0xde, 0x98, 0x28, 0xd1, 0x8e, 0x82,
-    0x11, 0x7c, 0x84, 0x8f, 0x88, 0x83, 0x1c, 0xbf, 0x3f, 0x9a, 0x3b, 0x16,
-    0x2f, 0xd9, 0xa8, 0x07, 0x05, 0x8b, 0xc7, 0x29, 0x58, 0xbf, 0xdb, 0x72,
-    0x4e, 0xdd, 0xf9, 0x62, 0xff, 0xcf, 0xe8, 0x7d, 0xfd, 0xcf, 0xba, 0xc5,
-    0x6c, 0x8b, 0xbd, 0x15, 0x10, 0xe7, 0x43, 0x6b, 0x9b, 0xb5, 0x8b, 0xdf,
-    0x68, 0xf5, 0x8b, 0xe9, 0x04, 0x76, 0x2c, 0x5f, 0x1c, 0xed, 0xe5, 0x8a,
-    0x82, 0x74, 0x99, 0x0e, 0x53, 0x9f, 0x80, 0x63, 0xc4, 0x01, 0x92, 0xdf,
-    0xd9, 0xd4, 0xcd, 0xfe, 0x2c, 0x5f, 0xfd, 0x9c, 0xf3, 0x76, 0x1f, 0x54,
-    0x94, 0x16, 0x2d, 0x8b, 0x17, 0xff, 0x61, 0x34, 0x3e, 0xc7, 0x3b, 0x41,
-    0x62, 0xd1, 0x46, 0x87, 0xa9, 0x1b, 0x08, 0xdf, 0xff, 0xe7, 0x16, 0xd1,
-    0x33, 0x6d, 0xec, 0x88, 0xa4, 0xff, 0x65, 0x8b, 0xff, 0xff, 0xb8, 0xe3,
-    0xfc, 0xf0, 0x7f, 0x9d, 0x77, 0xbb, 0xf7, 0x16, 0xa4, 0x25, 0x8b, 0xe7,
-    0xd4, 0xf4, 0x58, 0xbf, 0xf8, 0xe2, 0x34, 0xb0, 0x1e, 0xe6, 0x6c, 0xb1,
-    0x6d, 0x86, 0x7d, 0x78, 0x49, 0x7f, 0xfe, 0xe1, 0x98, 0x33, 0x39, 0x9a,
-    0x01, 0xf2, 0x3b, 0x16, 0x2b, 0x49, 0xb3, 0x14, 0x38, 0xfc, 0x51, 0x7f,
-    0xff, 0xb3, 0x46, 0x6f, 0xf7, 0x1e, 0x9c, 0x5b, 0x06, 0x36, 0xd9, 0x62,
-    0xf4, 0x34, 0x75, 0x8b, 0xed, 0xfe, 0xfb, 0x2c, 0x5f, 0xf1, 0xf3, 0xa8,
-    0x3d, 0x4f, 0xe5, 0x62, 0xe2, 0x37, 0xe8, 0x80, 0x61, 0xe0, 0xc9, 0x6f,
-    0x78, 0x02, 0x58, 0xad, 0xd3, 0x41, 0x78, 0x73, 0x91, 0xe5, 0xf8, 0xf1,
-    0xbc, 0x6f, 0x1b, 0xf5, 0x8b, 0x17, 0xff, 0xf4, 0x33, 0x8f, 0xad, 0x39,
-    0xc3, 0xf7, 0xf0, 0x2f, 0x2c, 0x5f, 0xf9, 0x8b, 0x72, 0x6e, 0xe1, 0xf9,
-    0x58, 0xa9, 0x55, 0x0d, 0x91, 0xbb, 0x39, 0xab, 0x1f, 0x09, 0x7a, 0xff,
-    0x6a, 0x49, 0x8e, 0x77, 0x58, 0xbf, 0xfc, 0x79, 0xdc, 0x72, 0xda, 0xf8,
-    0x4c, 0x35, 0x8b, 0x99, 0xd6, 0x2b, 0x0f, 0x8b, 0x89, 0x97, 0x99, 0x8e,
-    0xb1, 0x7f, 0xd8, 0x01, 0x70, 0x1c, 0x70, 0x96, 0x28, 0x67, 0xae, 0x43,
-    0x97, 0xef, 0xc8, 0xde, 0x56, 0x28, 0xd3, 0xc8, 0x08, 0x86, 0xb7, 0x4d,
-    0xe0, 0xf0, 0x94, 0x68, 0x60, 0x5f, 0xed, 0x67, 0xff, 0x3d, 0xc1, 0x62,
-    0xff, 0xfb, 0xec, 0xfe, 0x97, 0x86, 0x10, 0x01, 0x2b, 0x17, 0x9b, 0xf2,
-    0xb1, 0x76, 0x01, 0x62, 0xdb, 0x7c, 0xd9, 0x84, 0x39, 0x7e, 0x0e, 0x75,
-    0x84, 0xb1, 0x7f, 0xdf, 0x9e, 0x7b, 0x98, 0x2e, 0xbd, 0x62, 0xff, 0xd2,
-    0xff, 0xfe, 0x7b, 0xf9, 0x05, 0x8b, 0xfd, 0x85, 0x0c, 0xe0, 0x67, 0x58,
-    0xb1, 0x0d, 0x16, 0x3a, 0x3f, 0xf1, 0xf5, 0x4a, 0x61, 0xd9, 0x0d, 0x9b,
-    0xff, 0xd9, 0xf7, 0xe9, 0x39, 0xad, 0x84, 0xc3, 0x58, 0xa8, 0x2a, 0x5f,
-    0x88, 0xd5, 0xa1, 0x00, 0x14, 0x66, 0xe1, 0x93, 0xdf, 0xa7, 0x6e, 0x11,
-    0xd6, 0x2f, 0xff, 0x43, 0x3b, 0x80, 0x72, 0x08, 0xc0, 0x82, 0x09, 0x22,
-    0xfa, 0x62, 0x3e, 0x2c, 0x5f, 0x8e, 0x16, 0x3f, 0x45, 0x8b, 0xb0, 0xa2,
-    0x45, 0x17, 0xd5, 0x03, 0x23, 0xbf, 0xfe, 0xe7, 0x3e, 0x2d, 0xe6, 0x0f,
-    0xa0, 0x61, 0x2c, 0x54, 0x11, 0x1a, 0x11, 0xe5, 0x4a, 0x7a, 0xae, 0xb2,
-    0xd1, 0xac, 0x5f, 0xff, 0x6a, 0x03, 0xfc, 0xf0, 0xb0, 0x26, 0xd1, 0xab,
-    0x17, 0x80, 0x2e, 0x2c, 0x5f, 0xb3, 0x0a, 0x60, 0xb1, 0x6e, 0x49, 0xe2,
-    0x10, 0xf5, 0x32, 0x2f, 0x3d, 0x09, 0x6a, 0x96, 0x67, 0xc0, 0xd7, 0x70,
-    0xc1, 0xe1, 0x3b, 0xa3, 0x3f, 0xce, 0x27, 0xb4, 0x78, 0xc5, 0x38, 0xde,
-    0x28, 0x78, 0x5e, 0xfb, 0x84, 0xb1, 0x7f, 0xc3, 0xc8, 0x7e, 0x7a, 0x0e,
-    0x56, 0x2f, 0x75, 0x91, 0xbf, 0x58, 0xb1, 0x7c, 0xe5, 0x0e, 0x18, 0x7d,
-    0x1d, 0x75, 0x3b, 0xbf, 0xf3, 0x83, 0x05, 0xd7, 0xb9, 0x7f, 0x16, 0x2e,
-    0xd1, 0xab, 0x14, 0x47, 0xb6, 0x1a, 0x15, 0xf4, 0x5c, 0xc8, 0x96, 0x2f,
-    0xc0, 0x9f, 0x64, 0x7a, 0xc5, 0xd1, 0x62, 0xc5, 0xf1, 0xaf, 0xdf, 0x16,
-    0x2f, 0xe7, 0x34, 0xd9, 0x2f, 0x2c, 0x58, 0x6c, 0x7d, 0x9e, 0x18, 0x8e,
-    0x25, 0xbf, 0xb9, 0xad, 0x3c, 0x5c, 0x58, 0xbf, 0xb3, 0xdb, 0xfd, 0xe2,
-    0x58, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x02, 0x4b, 0xff, 0x4c, 0x0b,
-    0x3f, 0xe2, 0x90, 0x2c, 0x54, 0x9f, 0xc9, 0x1e, 0x5f, 0xf1, 0x67, 0x60,
-    0xe3, 0x66, 0xeb, 0x17, 0xfb, 0xd9, 0xad, 0xd9, 0xb7, 0x54, 0x9f, 0x25,
-    0xfe, 0xd3, 0x97, 0xb8, 0xe3, 0x58, 0xa9, 0x3f, 0x56, 0x42, 0xbe, 0x1f,
-    0xe4, 0xd5, 0x8b, 0xec, 0x32, 0x12, 0xb1, 0x4c, 0x78, 0xe0, 0x24, 0xbf,
-    0xff, 0xb5, 0x83, 0xfc, 0xf7, 0x0d, 0x4f, 0xb8, 0x19, 0x41, 0x62, 0xff,
-    0xfc, 0x20, 0x1d, 0xa0, 0x36, 0x60, 0xb2, 0x29, 0xd2, 0xc5, 0xb1, 0xd1,
-    0x6b, 0xe5, 0xeb, 0xff, 0x16, 0x7b, 0xcf, 0xcf, 0x60, 0x16, 0x2f, 0xff,
-    0xb7, 0x2c, 0xfe, 0x13, 0xc8, 0xc5, 0x3b, 0x2c, 0x5d, 0x9c, 0xeb, 0x55,
-    0xcc, 0xc0, 0xc0, 0x70, 0xa9, 0xc2, 0x0d, 0xe1, 0x5e, 0x76, 0x72, 0x86,
-    0xb7, 0x09, 0xc3, 0x3e, 0xac, 0x5c, 0x6f, 0x29, 0x7a, 0x14, 0x4b, 0xa6,
-    0x3d, 0x27, 0x41, 0xaf, 0xfd, 0xf7, 0x37, 0x35, 0xb1, 0xc5, 0xda, 0xc5,
-    0xff, 0xbf, 0xf9, 0x92, 0x9f, 0xe1, 0xd6, 0x2a, 0x51, 0x00, 0xc8, 0x77,
-    0xfc, 0x3d, 0x61, 0xf2, 0x0c, 0x35, 0x8b, 0xff, 0xf0, 0x9b, 0x98, 0x5b,
-    0xfd, 0xc7, 0xfc, 0xef, 0xa9, 0x62, 0xa5, 0x7b, 0x6f, 0x08, 0x9e, 0x75,
-    0x5b, 0xf0, 0xaf, 0x62, 0x12, 0x39, 0xbf, 0xfb, 0xf8, 0x01, 0xc8, 0xf3,
-    0x4d, 0xc5, 0x8b, 0xf4, 0xeb, 0x07, 0x2b, 0x17, 0xe7, 0x2c, 0x04, 0x72,
-    0xc5, 0xe0, 0x07, 0xe5, 0x8b, 0xe9, 0x80, 0xb4, 0xb1, 0x68, 0x49, 0xf6,
-    0x61, 0x57, 0x07, 0xef, 0xef, 0xc7, 0x7d, 0xf7, 0xfa, 0xc5, 0x4a, 0x67,
-    0xae, 0x88, 0xd0, 0x93, 0x11, 0x9d, 0xff, 0x84, 0x6e, 0x17, 0xda, 0x21,
-    0x06, 0xb1, 0x7f, 0xf9, 0xe4, 0xbd, 0xbf, 0xe4, 0x2e, 0x69, 0x96, 0x2f,
-    0xa6, 0x1c, 0xc5, 0x8b, 0xdc, 0xc0, 0xd6, 0x2b, 0x74, 0x66, 0xfd, 0x08,
-    0x09, 0x7e, 0x22, 0xbf, 0xdf, 0x70, 0x6f, 0xf7, 0x89, 0x62, 0xfa, 0x0e,
-    0x0c, 0x58, 0xbf, 0xfd, 0xe6, 0x81, 0x99, 0xf9, 0xd7, 0x7c, 0x95, 0x8b,
-    0xff, 0xed, 0xff, 0x3a, 0xce, 0x10, 0x9a, 0x06, 0xb2, 0xc5, 0xff, 0xf9,
-    0xba, 0x19, 0xcf, 0xb3, 0xfa, 0x7d, 0xfc, 0xf2, 0xc5, 0x41, 0x34, 0xd0,
-    0x1b, 0x78, 0x88, 0x49, 0x81, 0xa8, 0xdf, 0xf9, 0xb6, 0xfc, 0xed, 0x9e,
-    0xe6, 0x2c, 0x54, 0xa2, 0x30, 0x93, 0x2f, 0xfb, 0xd2, 0x7f, 0xe7, 0x4c,
-    0xe2, 0xc5, 0xe7, 0x21, 0xac, 0x5f, 0xf4, 0x9f, 0x92, 0xfb, 0x37, 0x96,
-    0x2a, 0x08, 0x90, 0xdc, 0xef, 0xc3, 0x97, 0xfe, 0xd9, 0xbb, 0x8e, 0xcf,
-    0x13, 0x74, 0x58, 0xbf, 0xe1, 0x7b, 0x86, 0x03, 0x7e, 0x3a, 0xc5, 0xff,
-    0xef, 0x49, 0x7b, 0x99, 0x86, 0x9a, 0xd0, 0x58, 0xbf, 0xee, 0x73, 0x0b,
-    0x76, 0x20, 0x2c, 0x5f, 0x08, 0xa7, 0x8b, 0x17, 0xa1, 0x9e, 0x30, 0xf6,
-    0xce, 0x73, 0x7f, 0x67, 0xbe, 0xe4, 0x05, 0x8b, 0xda, 0x6f, 0xf6, 0x7c,
-    0x31, 0x1a, 0x56, 0x26, 0x78, 0xd1, 0x83, 0xdf, 0xfd, 0xfc, 0x23, 0x79,
-    0xe7, 0xf6, 0x01, 0x62, 0xff, 0x31, 0x7b, 0x04, 0x5e, 0x58, 0xa8, 0x1f,
-    0xb8, 0x11, 0x6f, 0xf7, 0x07, 0x9e, 0xd4, 0xf1, 0x62, 0xfd, 0x9e, 0xf6,
-    0x0d, 0x62, 0xff, 0x9f, 0xb0, 0x19, 0xa7, 0xec, 0x0b, 0x14, 0x69, 0xf2,
-    0xe8, 0xa2, 0xff, 0xd8, 0x39, 0x84, 0xff, 0x00, 0xcb, 0x17, 0xff, 0xf9,
-    0xbb, 0x01, 0xc3, 0xe1, 0x83, 0xc2, 0x17, 0x81, 0x30, 0x58, 0xbf, 0x9a,
-    0x02, 0x83, 0x0d, 0x62, 0xff, 0xff, 0xbe, 0x26, 0xdb, 0x53, 0xf6, 0x7e,
-    0x73, 0x0d, 0x62, 0x02, 0xc5, 0xf9, 0xf6, 0xe7, 0x19, 0x62, 0x86, 0x89,
-    0x0f, 0xb3, 0xdf, 0x6b, 0x1a, 0x3d, 0x62, 0xff, 0xd2, 0xc5, 0x9a, 0xf6,
-    0x66, 0xcb, 0x17, 0xfe, 0x9c, 0x21, 0xfe, 0x7f, 0x3c, 0x58, 0xbb, 0xdc,
-    0x19, 0xfd, 0x70, 0xf6, 0xf0, 0x41, 0x04, 0x91, 0x7d, 0x9b, 0xb6, 0x92,
-    0x23, 0x0d, 0x0d, 0xff, 0xc2, 0x1f, 0xdc, 0xcd, 0x7a, 0x5a, 0x0b, 0x15,
-    0xf3, 0xfc, 0xe1, 0xb5, 0xff, 0xfe, 0x8b, 0x53, 0xd0, 0xc3, 0x58, 0xc0,
-    0xe2, 0xe1, 0x99, 0xdf, 0x96, 0x2a, 0x55, 0x0e, 0x1a, 0x46, 0xd0, 0x9f,
-    0xf4, 0x32, 0xc3, 0x22, 0xbf, 0xdc, 0x7e, 0x18, 0x1c, 0xee, 0xb1, 0x7f,
-    0xdf, 0x70, 0xbd, 0x16, 0xa7, 0xcb, 0x17, 0xfe, 0x7f, 0x0b, 0x3c, 0xc7,
-    0xc2, 0x58, 0xbf, 0xff, 0xff, 0xe1, 0x1c, 0xed, 0x03, 0x74, 0xdb, 0xe6,
-    0xb4, 0xfd, 0x39, 0x9e, 0xf3, 0x68, 0xa7, 0xb8, 0x2c, 0x54, 0x13, 0x12,
-    0xd1, 0xe7, 0xcf, 0x6f, 0xfa, 0x41, 0xec, 0x28, 0x67, 0x16, 0x2e, 0x36,
-    0x0b, 0x17, 0xa5, 0xf7, 0x58, 0xbf, 0x60, 0x18, 0x81, 0x03, 0x6d, 0xf1,
-    0x9b, 0xf4, 0x0c, 0xea, 0xcd, 0x2c, 0x53, 0xa6, 0x11, 0xf3, 0x12, 0x6e,
-    0x11, 0xe5, 0x6c, 0xc9, 0x9a, 0x1a, 0x2e, 0xf1, 0xbc, 0xf7, 0x09, 0xf8,
-    0x88, 0xb5, 0x09, 0x93, 0x91, 0xfc, 0xf4, 0x0c, 0xa5, 0x2b, 0x6b, 0x8a,
-    0xde, 0x94, 0xa3, 0x73, 0x79, 0x62, 0xf7, 0x33, 0x65, 0x8b, 0x8b, 0x60,
-    0x1b, 0x5f, 0x0b, 0xd2, 0xc5, 0xfd, 0x26, 0x86, 0xc5, 0xe5, 0x8a, 0x93,
-    0xe8, 0x39, 0x68, 0x41, 0x94, 0xb1, 0x4b, 0x16, 0xe0, 0x45, 0xc7, 0x50,
-    0x65, 0xff, 0xfe, 0x17, 0xa7, 0xe6, 0x71, 0xa0, 0xfe, 0xc3, 0xf1, 0xa0,
-    0xb1, 0x66, 0x58, 0xb4, 0xac, 0x5e, 0x67, 0xd8, 0x8d, 0x10, 0x84, 0x6f,
-    0xff, 0x9f, 0x77, 0x1f, 0x27, 0xec, 0x42, 0xcf, 0xac, 0x54, 0x13, 0x2e,
-    0x22, 0xae, 0x42, 0x13, 0xc6, 0x37, 0xff, 0xde, 0xe7, 0xda, 0x1d, 0xc3,
-    0xd3, 0xc9, 0x09, 0x62, 0xfe, 0xe1, 0x66, 0xc1, 0xc1, 0x62, 0xfc, 0x1f,
-    0xb8, 0x22, 0x58, 0xb4, 0xf6, 0x7b, 0x44, 0x61, 0x7f, 0x8a, 0x79, 0xc7,
-    0x92, 0x58, 0xa9, 0x4c, 0x14, 0xf0, 0xad, 0x62, 0x7b, 0xff, 0xfb, 0xec,
-    0x5d, 0xc0, 0x38, 0x49, 0x41, 0x8f, 0x83, 0x58, 0xbf, 0xf4, 0x02, 0xc7,
-    0xe9, 0x90, 0x92, 0x58, 0xa7, 0x44, 0xe0, 0x6b, 0x97, 0xff, 0xb3, 0x3e,
-    0x3f, 0xcf, 0x33, 0xee, 0x05, 0x8b, 0xff, 0xf6, 0xff, 0x9e, 0x36, 0x98,
-    0xb3, 0xab, 0x61, 0x71, 0x62, 0xff, 0x08, 0xa3, 0xc3, 0x29, 0x3a, 0xc5,
-    0xff, 0x39, 0x67, 0xbe, 0xec, 0x05, 0x8a, 0xdc, 0xfb, 0xbe, 0x6f, 0x7e,
-    0x8a, 0x13, 0xae, 0x2c, 0x5f, 0xa0, 0xf1, 0xd9, 0xf5, 0x8b, 0xfd, 0x84,
-    0x28, 0x73, 0x66, 0x58, 0xbd, 0x24, 0x35, 0x8b, 0xfd, 0x87, 0x17, 0x3e,
-    0xd0, 0x58, 0xa3, 0x11, 0xb3, 0x25, 0x43, 0x2b, 0xdc, 0xd0, 0x87, 0x2f,
-    0x8c, 0x18, 0xf1, 0x62, 0x8d, 0x3e, 0xe3, 0xa5, 0x5f, 0xff, 0xff, 0x7d,
-    0xc8, 0x23, 0x3d, 0xf9, 0x71, 0xc9, 0x19, 0xe8, 0x61, 0xa5, 0x80, 0x58,
-    0xbf, 0xf0, 0x9a, 0x1f, 0x7e, 0x09, 0xa0, 0xb1, 0x7f, 0xe7, 0xf6, 0xc2,
-    0xe1, 0x9a, 0xd4, 0xac, 0x54, 0xae, 0xec, 0x6d, 0x1a, 0x3c, 0x21, 0xa0,
-    0x32, 0x3c, 0x49, 0xde, 0x19, 0x0f, 0x1b, 0x54, 0x44, 0x60, 0x7f, 0xf1,
-    0xfd, 0xe7, 0xf8, 0x96, 0x2f, 0xba, 0x9c, 0x5d, 0x7a, 0xc5, 0xfa, 0x4d,
-    0x09, 0xbb, 0x58, 0xbf, 0x87, 0x23, 0x60, 0xbc, 0xb1, 0x7e, 0x7d, 0x8e,
-    0xd1, 0xcb, 0x14, 0x62, 0x33, 0x98, 0x74, 0x8a, 0xf8, 0x57, 0xe2, 0xfb,
-    0xf6, 0x43, 0xf3, 0xa5, 0x8b, 0xe3, 0x4c, 0xfb, 0xac, 0x56, 0xe8, 0x96,
-    0x8f, 0x49, 0xd1, 0x45, 0xff, 0xc5, 0x21, 0x13, 0x1b, 0xee, 0x49, 0xab,
-    0x17, 0xe8, 0x10, 0xbb, 0x82, 0xc5, 0xdf, 0x75, 0x8b, 0x78, 0x68, 0x87,
-    0xed, 0x1a, 0x22, 0xab, 0xfb, 0x3b, 0xf7, 0xa4, 0xeb, 0x15, 0xd9, 0xf3,
-    0x84, 0x71, 0x7e, 0x7f, 0x9b, 0x3d, 0xac, 0x5f, 0xb0, 0x65, 0x3d, 0xac,
-    0x5b, 0xd2, 0x7a, 0x44, 0x55, 0x7f, 0xff, 0xed, 0x0b, 0x79, 0x1b, 0x93,
-    0x68, 0xdd, 0xfe, 0xfd, 0x52, 0x79, 0x58, 0xbf, 0x39, 0xfb, 0x87, 0x16,
-    0x2f, 0xff, 0xfe, 0x93, 0xf0, 0x7f, 0x9e, 0x64, 0x1c, 0xd3, 0x5b, 0xc5,
-    0x27, 0xe2, 0xc5, 0x0d, 0x13, 0xa4, 0x55, 0x6e, 0xcd, 0x4c, 0xc3, 0xd1,
-    0x87, 0x5f, 0xe0, 0x41, 0xfd, 0xc0, 0xce, 0xb1, 0x7f, 0xee, 0x34, 0x39,
-    0x9b, 0xc9, 0xdd, 0x62, 0xb4, 0x7e, 0xbe, 0x36, 0xbf, 0xed, 0xfe, 0xe0,
-    0x04, 0xea, 0x0b, 0x17, 0xda, 0xd9, 0xf6, 0x58, 0xbb, 0xb2, 0x30, 0xf8,
-    0x30, 0xee, 0xa5, 0x71, 0x17, 0x23, 0x22, 0x77, 0x66, 0x8d, 0x58, 0x50,
-    0xa7, 0x0e, 0x10, 0x57, 0xfd, 0xdc, 0xb9, 0xf0, 0xb2, 0x3d, 0x62, 0xf7,
-    0x9b, 0x75, 0x8b, 0xff, 0xd0, 0xe6, 0x0f, 0x3e, 0xed, 0xef, 0xca, 0xc5,
-    0x6c, 0x8a, 0x2d, 0xce, 0xfb, 0x1e, 0xbf, 0x6d, 0xf9, 0x16, 0x2c, 0x5f,
-    0xff, 0x42, 0x4f, 0xa9, 0x78, 0x37, 0x18, 0x80, 0xb1, 0x7f, 0x3f, 0x30,
-    0x61, 0xe2, 0xc5, 0xfb, 0xa9, 0xcb, 0x3a, 0x2c, 0x5f, 0xd8, 0x37, 0x16,
-    0xff, 0xdc, 0xf6, 0x98, 0xba, 0xfe, 0xe4, 0x1c, 0xed, 0x05, 0x8b, 0xff,
-    0xe1, 0xe4, 0x04, 0x36, 0x20, 0x6b, 0x58, 0x12, 0xc5, 0x4a, 0x72, 0xbd,
-    0x94, 0xea, 0x15, 0x00, 0x45, 0x08, 0xba, 0xff, 0xff, 0xfb, 0x3a, 0x64,
-    0x0c, 0xd4, 0x89, 0xb7, 0x79, 0x33, 0x3e, 0xf2, 0x76, 0x1a, 0xc5, 0xfe,
-    0xe1, 0x67, 0x4f, 0xb4, 0x16, 0x2f, 0x72, 0x1d, 0x16, 0x2f, 0xc3, 0xd4,
-    0xe7, 0x96, 0x29, 0xcf, 0xf6, 0x3c, 0xd4, 0x88, 0x2f, 0xff, 0x4e, 0xc1,
-    0xfe, 0x7b, 0xf6, 0x6c, 0x43, 0x58, 0xbc, 0xdb, 0xca, 0xc5, 0x62, 0xbb,
-    0x07, 0x8f, 0x23, 0xea, 0x2d, 0x0f, 0xc2, 0x30, 0xf2, 0x75, 0xfe, 0x01,
-    0xd8, 0x07, 0x60, 0x2c, 0x5f, 0xe7, 0x00, 0xc4, 0xda, 0x82, 0xc5, 0xc6,
-    0x8d, 0x62, 0xe6, 0x8f, 0x58, 0xad, 0x1b, 0x3e, 0x0c, 0xdf, 0xff, 0xbd,
-    0xde, 0xef, 0xfd, 0xfe, 0xe4, 0xcd, 0xa3, 0x56, 0x2a, 0x07, 0xf4, 0x72,
-    0x1b, 0xff, 0xcf, 0xa3, 0x39, 0xf9, 0xe3, 0xf8, 0xa5, 0x62, 0xff, 0xff,
-    0xe1, 0xe0, 0xff, 0x84, 0x03, 0xe1, 0xa6, 0x6f, 0xf7, 0xd3, 0xc9, 0xd6,
-    0x2f, 0xfe, 0x68, 0x60, 0xc9, 0xdb, 0xf2, 0x75, 0x8b, 0x9b, 0xeb, 0x15,
-    0xf3, 0xd9, 0xf2, 0x15, 0xc1, 0x6e, 0xb1, 0x7f, 0xc3, 0x60, 0xf4, 0x4f,
-    0x26, 0xac, 0x5f, 0x4e, 0x17, 0xba, 0xd3, 0xd4, 0x18, 0xd5, 0xff, 0xff,
-    0xf3, 0x83, 0xd3, 0x0e, 0x7d, 0x8e, 0x76, 0x86, 0x74, 0x7f, 0x4e, 0x14,
-    0x16, 0x2f, 0x72, 0x1b, 0xac, 0x5f, 0xfb, 0xda, 0x9c, 0xef, 0x35, 0x9e,
-    0x58, 0xbb, 0x3a, 0x18, 0x7b, 0xdd, 0x8f, 0xd4, 0x13, 0x0c, 0xfc, 0x36,
-    0xeb, 0x89, 0xb8, 0xfa, 0x34, 0x8a, 0x95, 0x69, 0x5b, 0x11, 0x32, 0x57,
-    0xa1, 0x9a, 0x28, 0xf9, 0xef, 0xff, 0x16, 0x79, 0xe0, 0xc5, 0x9e, 0xfb,
-    0xac, 0x5f, 0x00, 0x3e, 0xfa, 0xd5, 0x8b, 0xf8, 0x9b, 0xb8, 0x3e, 0x2c,
-    0x5f, 0xc0, 0x2c, 0xf7, 0xf0, 0xc4, 0x4f, 0xe2, 0x3f, 0xca, 0xef, 0xff,
-    0xe2, 0x80, 0x73, 0xb6, 0xff, 0x6d, 0x0b, 0xcf, 0x3b, 0x2c, 0x51, 0x22,
-    0xc0, 0x4a, 0x37, 0xf1, 0x18, 0x1e, 0xbe, 0xcb, 0x17, 0xed, 0x00, 0xef,
-    0xc5, 0x8b, 0xfe, 0x68, 0x19, 0x2e, 0x3c, 0x3a, 0xc5, 0x61, 0xf1, 0x08,
-    0xa6, 0xff, 0xfe, 0x6e, 0xe7, 0x9a, 0x17, 0x89, 0x8d, 0xef, 0x93, 0x05,
-    0x8a, 0x74, 0xcc, 0xd8, 0x88, 0xa1, 0x24, 0x22, 0x1b, 0xff, 0xa0, 0xdc,
-    0xe4, 0xbf, 0x05, 0x13, 0x2c, 0x5f, 0xf3, 0x83, 0x6f, 0xcf, 0x05, 0xc5,
-    0x8b, 0xce, 0x40, 0x58, 0xa7, 0x44, 0xe6, 0x91, 0x4e, 0x77, 0x7e, 0xcd,
-    0x37, 0x61, 0x2c, 0x5f, 0xcf, 0x9b, 0xcf, 0xb8, 0xb1, 0x68, 0x2c, 0x5f,
-    0xfe, 0xc1, 0xe9, 0xc5, 0xb0, 0xff, 0x25, 0xb2, 0xc5, 0xff, 0x7d, 0xb8,
-    0xe4, 0x53, 0xda, 0xc5, 0x82, 0x24, 0x42, 0x71, 0x32, 0xa5, 0x17, 0xf9,
-    0x09, 0x6b, 0xff, 0xe9, 0xff, 0x33, 0x71, 0xe6, 0x82, 0x6f, 0xc4, 0xb1,
-    0x5b, 0x1f, 0xc8, 0x09, 0xab, 0x64, 0xec, 0xc8, 0xab, 0x91, 0xb3, 0x5e,
-    0xe6, 0x1d, 0x62, 0xff, 0x44, 0x4c, 0x17, 0xb3, 0xeb, 0x17, 0xbf, 0x9b,
-    0xac, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xe0, 0x49, 0x67, 0x7e, 0x48, 0x8c,
-    0x34, 0x34, 0x62, 0x2d, 0x63, 0x8d, 0x43, 0x3f, 0xbe, 0x6d, 0x98, 0x96,
-    0x2f, 0xff, 0xee, 0xbc, 0xcd, 0xfe, 0xe3, 0x1e, 0x04, 0x67, 0xb9, 0x9b,
-    0x2c, 0x57, 0x69, 0xc8, 0x7e, 0x1a, 0x5e, 0x35, 0x11, 0x15, 0xfd, 0xf9,
-    0xdc, 0x98, 0xeb, 0x17, 0xf8, 0xba, 0x6d, 0x86, 0xe6, 0x96, 0x2b, 0x0f,
-    0x95, 0xcb, 0xa9, 0x62, 0xda, 0x58, 0xb6, 0xc0, 0x2f, 0xbc, 0x19, 0x52,
-    0xb9, 0x6e, 0xf1, 0xf1, 0x34, 0x78, 0xfc, 0x85, 0x48, 0x67, 0xd7, 0xff,
-    0xe6, 0xd4, 0xb8, 0xe4, 0x98, 0x1c, 0x97, 0x1a, 0xc5, 0xfd, 0x0e, 0x45,
-    0x09, 0xd9, 0x62, 0xf8, 0x6c, 0xc6, 0xac, 0x52, 0xc5, 0xec, 0xe9, 0x8e,
-    0x6b, 0xc2, 0x23, 0xbf, 0xfe, 0xf7, 0xe7, 0x98, 0xfe, 0xe3, 0x97, 0x70,
-    0x58, 0xbf, 0xd2, 0x77, 0xf6, 0x84, 0x75, 0x8a, 0x74, 0x42, 0x12, 0x85,
-    0x6e, 0x9c, 0x57, 0x6a, 0x5f, 0x60, 0xeb, 0xe1, 0x6f, 0x7f, 0xfb, 0x43,
-    0xfc, 0xe6, 0xbd, 0xc7, 0xef, 0xcb, 0x17, 0xfe, 0xe7, 0x3f, 0x2f, 0xb7,
-    0x33, 0x4b, 0x17, 0xb9, 0x3a, 0x58, 0xac, 0x45, 0x4e, 0x93, 0x3e, 0x81,
-    0x7f, 0xd0, 0x29, 0x32, 0x39, 0xb6, 0xe2, 0xc5, 0xff, 0xb7, 0xfb, 0x8d,
-    0xa0, 0x42, 0x65, 0x8b, 0xf8, 0x66, 0x67, 0xf3, 0x75, 0x8a, 0xed, 0x15,
-    0xba, 0x3e, 0x23, 0xfb, 0xff, 0x67, 0xf7, 0x79, 0x01, 0xe6, 0x0b, 0x17,
-    0xe3, 0xe7, 0xa7, 0x75, 0x8a, 0x94, 0xdd, 0x1e, 0x1b, 0x9a, 0x30, 0x63,
-    0xfb, 0xff, 0xe3, 0x03, 0x39, 0x9f, 0x73, 0x07, 0xa2, 0x60, 0x96, 0x2f,
-    0xf4, 0xf3, 0x02, 0x0c, 0xbc, 0xb1, 0x58, 0x88, 0xb0, 0xd5, 0xaa, 0x5d,
-    0xeb, 0x0e, 0xd0, 0x86, 0x84, 0xfb, 0xb8, 0xe3, 0x9f, 0xc8, 0xc3, 0x77,
-    0x94, 0x2f, 0xdc, 0x2c, 0x5e, 0x93, 0x97, 0x14, 0x6c, 0xfa, 0x9f, 0x4d,
-    0x3c, 0xf2, 0x6f, 0xe7, 0x2f, 0xd9, 0x80, 0x06, 0x85, 0x38, 0x57, 0xc9,
-    0x5b, 0x1e, 0x9d, 0x93, 0x14, 0x7c, 0xdd, 0x25, 0x33, 0x87, 0x0c, 0xbb,
-    0xfe, 0x72, 0xd9, 0x8b, 0xd8, 0x75, 0x8b, 0xdb, 0x8b, 0xb5, 0x8b, 0xa4,
-    0x0b, 0x15, 0x87, 0xde, 0xc7, 0x1e, 0x20, 0xbf, 0xf8, 0xd0, 0xfc, 0xfc,
-    0x2c, 0xe8, 0xe3, 0x58, 0xbf, 0x8b, 0x07, 0xf6, 0x09, 0x62, 0xb4, 0x7e,
-    0xc7, 0x48, 0xbf, 0xff, 0xf1, 0x63, 0x80, 0xcf, 0xb7, 0xbc, 0x2d, 0x8c,
-    0x0f, 0x5a, 0xcd, 0x96, 0x2f, 0x9c, 0x81, 0xc5, 0x8b, 0xc4, 0xc7, 0x58,
-    0xbf, 0x13, 0xfd, 0xa3, 0xd6, 0x2f, 0xdf, 0x7e, 0x4c, 0x16, 0x2f, 0xff,
-    0xf7, 0x33, 0xef, 0xc1, 0x6c, 0x1c, 0xed, 0x20, 0x3c, 0xf9, 0x62, 0xff,
-    0xff, 0x78, 0xb0, 0x0c, 0x40, 0x1f, 0xe7, 0x4f, 0x3d, 0xf9, 0x62, 0xf7,
-    0x1f, 0x4c, 0x8e, 0xce, 0x14, 0x06, 0xc9, 0x7b, 0x93, 0xb2, 0xc5, 0xe3,
-    0x5b, 0x8b, 0x17, 0xb5, 0x3b, 0x61, 0xbc, 0xf0, 0xf5, 0xfb, 0x21, 0x06,
-    0xe2, 0xc5, 0xd3, 0xcd, 0x1e, 0xd1, 0x19, 0x5f, 0xc3, 0xfe, 0x7a, 0x3b,
-    0x16, 0x2c, 0xf0, 0x55, 0xf5, 0xbb, 0x97, 0xc8, 0x88, 0x73, 0xd1, 0x8b,
-    0x74, 0x86, 0xb8, 0x45, 0x97, 0xf6, 0x86, 0xf0, 0x16, 0x96, 0x2f, 0xff,
-    0xbe, 0xcf, 0xe0, 0x39, 0x43, 0x98, 0x40, 0x58, 0xb4, 0xac, 0x58, 0x86,
-    0x7b, 0xe2, 0x4e, 0xa9, 0x5c, 0x4a, 0xfc, 0xb1, 0xc6, 0x79, 0x14, 0x23,
-    0xaf, 0xef, 0xce, 0xdf, 0x9d, 0x96, 0x2f, 0xff, 0x8f, 0xc8, 0xa0, 0xda,
-    0xdf, 0xee, 0x1e, 0x8d, 0x58, 0xbf, 0xff, 0xe6, 0xdb, 0xdf, 0x79, 0x07,
-    0x8d, 0x92, 0x18, 0xa1, 0x09, 0x58, 0xa7, 0x45, 0xf3, 0x2b, 0x54, 0x13,
-    0x0f, 0xf4, 0x3b, 0xaf, 0xf1, 0x1b, 0xc7, 0xd3, 0x41, 0x62, 0xf8, 0x9b,
-    0xbf, 0x2c, 0x5f, 0xf7, 0x9b, 0xbc, 0x87, 0xe7, 0x4b, 0x17, 0xb0, 0x80,
-    0xb1, 0x7f, 0x6f, 0x3d, 0x94, 0x84, 0xb1, 0x7f, 0xbc, 0x64, 0x50, 0x6d,
-    0x6c, 0xb1, 0x7f, 0xa0, 0x3f, 0x88, 0xe3, 0xc5, 0x8b, 0xff, 0xbb, 0x06,
-    0xe5, 0x9b, 0x0b, 0xb8, 0x71, 0x62, 0xff, 0xb3, 0xbe, 0x34, 0x79, 0xe5,
-    0xd6, 0x2f, 0x07, 0x1d, 0x8b, 0x15, 0x88, 0xdc, 0x73, 0x5d, 0x25, 0x00,
-    0xf2, 0xfd, 0x9a, 0x60, 0x79, 0x62, 0xfb, 0x3d, 0x14, 0x16, 0x2f, 0xfe,
-    0xea, 0x29, 0xea, 0xe3, 0x10, 0x60, 0xe2, 0xc5, 0xa5, 0x62, 0xbe, 0x88,
-    0x06, 0x24, 0xf2, 0x5d, 0xa5, 0x62, 0xe6, 0x89, 0x62, 0x9c, 0xd4, 0xf8,
-    0x46, 0xff, 0xd9, 0xe9, 0xd7, 0x3f, 0x25, 0xe5, 0xc8, 0x10, 0x5f, 0xd9,
-    0xad, 0xd9, 0xb7, 0x54, 0x81, 0x04, 0x61, 0xe5, 0xde, 0x91, 0xba, 0xc5,
-    0x49, 0xf6, 0x71, 0x42, 0xff, 0xc4, 0x58, 0x6b, 0x61, 0xd8, 0x96, 0x2e,
-    0xe8, 0x35, 0x8b, 0xdd, 0x24, 0xeb, 0x17, 0xe8, 0x4f, 0xb0, 0xeb, 0x17,
-    0x83, 0x92, 0x58, 0xbe, 0xef, 0x99, 0xa5, 0x8b, 0xf7, 0xa2, 0x84, 0xec,
-    0xb1, 0x7e, 0xdb, 0x35, 0x30, 0x58, 0xbe, 0xd6, 0x9c, 0x25, 0x8a, 0x39,
-    0xe6, 0xfc, 0xa6, 0xa5, 0x17, 0xd8, 0x48, 0xcf, 0x17, 0xf4, 0x78, 0xc2,
-    0x62, 0x82, 0xc5, 0x4a, 0x7a, 0xfb, 0x1e, 0x60, 0xd7, 0x63, 0xee, 0x50,
-    0x50, 0xdb, 0x11, 0x6d, 0xff, 0xdf, 0xdc, 0x79, 0xa7, 0xce, 0x9f, 0x12,
-    0xc5, 0xfd, 0xa9, 0xfc, 0xbf, 0x5e, 0xb1, 0x4c, 0x7f, 0x41, 0xa4, 0x5f,
-    0xff, 0xfe, 0x92, 0xdf, 0x92, 0x5e, 0xe6, 0x08, 0xe1, 0xf1, 0xb5, 0x3b,
-    0xe1, 0x2c, 0x5f, 0xdc, 0xcf, 0x87, 0x3d, 0xac, 0x5f, 0xfd, 0x07, 0x2f,
-    0x48, 0x22, 0x27, 0x89, 0x62, 0x8c, 0x3f, 0x58, 0x8c, 0x2e, 0x28, 0x96,
-    0x28, 0x66, 0xf3, 0x09, 0x2f, 0x75, 0xb1, 0xdd, 0x75, 0x58, 0xbf, 0xb3,
-    0xcc, 0xd0, 0xe2, 0xc5, 0xd9, 0xc8, 0xd8, 0xf6, 0xc8, 0xba, 0xa5, 0x15,
-    0x84, 0xf7, 0x7f, 0xfe, 0x9f, 0x7d, 0xa2, 0xe3, 0x3e, 0xe4, 0xd9, 0xba,
-    0xc5, 0xcc, 0x75, 0x8b, 0xf8, 0xf2, 0xfb, 0xc8, 0x16, 0x2a, 0x3c, 0xf1,
-    0x7c, 0x2f, 0x52, 0xc9, 0xb5, 0xd8, 0xd3, 0x08, 0xcd, 0x3a, 0xdc, 0x73,
-    0xb3, 0x0d, 0x46, 0x28, 0x73, 0xbf, 0xc2, 0xa1, 0x96, 0x01, 0x0d, 0x72,
-    0x8f, 0xe3, 0x90, 0xe2, 0xf1, 0x17, 0x48, 0xf5, 0x63, 0x88, 0x7a, 0xa1,
-    0x37, 0x7f, 0x88, 0x4d, 0x13, 0x36, 0xcb, 0x16, 0x82, 0xc5, 0xe9, 0xd0,
-    0x16, 0x28, 0x66, 0xbd, 0xc4, 0xaf, 0x36, 0xb6, 0x58, 0xa1, 0xa2, 0x87,
-    0xec, 0x61, 0x10, 0x5e, 0x89, 0xc2, 0x58, 0xbf, 0x3e, 0x8b, 0x36, 0x58,
-    0xa7, 0x3c, 0x7f, 0x8f, 0xdd, 0xcf, 0xac, 0x5f, 0xf6, 0xd1, 0x3f, 0xfd,
-    0x39, 0xb2, 0xc5, 0x68, 0xfd, 0x40, 0x42, 0x43, 0x17, 0xed, 0x4e, 0xf8,
-    0x4b, 0x15, 0x87, 0xac, 0xc5, 0xd7, 0xec, 0xf7, 0x9c, 0xeb, 0x17, 0xec,
-    0xdc, 0x73, 0xba, 0xc5, 0x7c, 0xf4, 0xbc, 0x51, 0x7f, 0xf7, 0x06, 0x4f,
-    0xb0, 0x7a, 0x29, 0xc5, 0x8b, 0xfb, 0xc1, 0xe7, 0xdb, 0xb5, 0x8b, 0xdc,
-    0x03, 0x2c, 0x57, 0x68, 0xb4, 0xf9, 0x11, 0x22, 0xf8, 0xc2, 0xff, 0x6d,
-    0x9a, 0x01, 0x08, 0x0b, 0x17, 0xf7, 0x0c, 0xf9, 0x0b, 0xcb, 0x14, 0x47,
-    0xcb, 0xe3, 0x5b, 0xfb, 0x3a, 0x6b, 0x02, 0xf2, 0xc5, 0xfc, 0x13, 0x0e,
-    0x7b, 0xe2, 0xc5, 0x11, 0xf0, 0xf0, 0xc6, 0xfe, 0xce, 0xfd, 0xad, 0x4a,
-    0xc5, 0xff, 0xdc, 0x26, 0xf3, 0x1c, 0x39, 0xdb, 0x16, 0x28, 0x67, 0xe9,
-    0xc2, 0xfa, 0x94, 0xf6, 0xde, 0x14, 0x4d, 0x08, 0x21, 0x42, 0x56, 0xf4,
-    0x4f, 0xa5, 0x8b, 0xfe, 0x67, 0xf3, 0x1d, 0x88, 0x0b, 0x17, 0xba, 0x7f,
-    0x16, 0x2d, 0xbe, 0x1f, 0xa7, 0xc7, 0x83, 0x37, 0xbe, 0x17, 0xa4, 0x96,
-    0x2b, 0x0f, 0x63, 0x86, 0xd7, 0xee, 0x83, 0xfc, 0xf1, 0x62, 0xc7, 0x58,
-    0xbf, 0xbc, 0x3f, 0x89, 0xb8, 0xb0, 0x19, 0x65, 0x6d, 0xd6, 0x2a, 0x4f,
-    0x4b, 0x73, 0xfb, 0xba, 0xdd, 0xd6, 0x2f, 0xfe, 0xcd, 0xff, 0x3f, 0xcd,
-    0x6a, 0x4d, 0x58, 0xb8, 0x12, 0xb1, 0x61, 0xe8, 0xf7, 0x40, 0x8d, 0x5a,
-    0x45, 0x19, 0x3d, 0xdf, 0x14, 0xf6, 0x05, 0x8a, 0x73, 0xc5, 0x0c, 0x8a,
-    0xff, 0x41, 0xc5, 0xd7, 0xf5, 0xd6, 0x36, 0xeb, 0x56, 0x2f, 0xf0, 0x98,
-    0x7f, 0x9f, 0x71, 0x62, 0xf8, 0xb3, 0xa6, 0x2c, 0x5c, 0xdb, 0x44, 0x8a,
-    0x3f, 0x26, 0x06, 0x69, 0x7e, 0x39, 0xa6, 0xbc, 0x4b, 0x17, 0xff, 0xe0,
-    0x9b, 0xc2, 0x98, 0x60, 0x38, 0xc4, 0x2c, 0x58, 0xbf, 0x69, 0xe4, 0xbc,
-    0xb1, 0x63, 0x56, 0x2e, 0xec, 0x0b, 0x17, 0xcd, 0xe9, 0xc5, 0x8a, 0x93,
-    0xcd, 0x71, 0x3f, 0x8c, 0xdf, 0xec, 0xd3, 0x80, 0xed, 0x05, 0x8b, 0x9c,
-    0x96, 0x2f, 0xfa, 0x48, 0xd1, 0xbc, 0x05, 0xa5, 0x8b, 0x04, 0xb1, 0x43,
-    0x3e, 0x33, 0x8b, 0x06, 0x75, 0x7e, 0x98, 0xa1, 0x31, 0xeb, 0x17, 0xfe,
-    0xd3, 0x9a, 0x76, 0xf7, 0x05, 0x05, 0x8b, 0xc4, 0x2d, 0x96, 0x2f, 0x6c,
-    0x52, 0xb1, 0x4b, 0x17, 0xe9, 0xd4, 0x18, 0x6b, 0x15, 0xf3, 0x69, 0xc0,
-    0xcb, 0xe9, 0x23, 0x63, 0x96, 0x2f, 0x9a, 0x18, 0x4b, 0x15, 0xb9, 0xe3,
-    0xfc, 0x9a, 0xfe, 0x7f, 0x16, 0x7d, 0xd6, 0x2e, 0x78, 0x96, 0x2f, 0xba,
-    0xa7, 0x46, 0xac, 0x5b, 0xe6, 0x22, 0x3a, 0x48, 0xd8, 0xb3, 0xa8, 0x62,
-    0xff, 0xa7, 0x9f, 0x7d, 0x69, 0xa0, 0xb1, 0x58, 0x7f, 0xc4, 0x8b, 0x46,
-    0x2b, 0x63, 0x19, 0x6e, 0x42, 0x5b, 0x46, 0x07, 0x2c, 0xfa, 0x0b, 0x0f,
-    0x71, 0x47, 0xd1, 0xba, 0x51, 0xab, 0x8c, 0x21, 0x4b, 0xd7, 0xa9, 0x5d,
-    0x11, 0xc2, 0xc6, 0x9c, 0xb6, 0xbf, 0xa7, 0x6f, 0x73, 0x3c, 0xb1, 0x52,
-    0xcc, 0x4c, 0x84, 0xb0, 0x1c, 0x8c, 0x59, 0xc8, 0x75, 0x08, 0xff, 0xc6,
-    0x14, 0xd0, 0xc5, 0x29, 0xd4, 0xf0, 0x8e, 0x2f, 0xd9, 0xac, 0x1c, 0xac,
-    0x5f, 0x33, 0xf4, 0x95, 0x8b, 0xff, 0x07, 0xad, 0x4e, 0x16, 0x77, 0xc5,
-    0x8b, 0xf3, 0x8c, 0x78, 0x4b, 0x15, 0xb2, 0x2c, 0x46, 0x4f, 0xd9, 0x1f,
-    0x10, 0x2f, 0xff, 0xfe, 0xcf, 0x49, 0xc7, 0x9e, 0x9c, 0x28, 0x16, 0x77,
-    0x09, 0xcf, 0x2c, 0x5f, 0xc5, 0x9d, 0x0b, 0x38, 0xb1, 0x7f, 0x85, 0xad,
-    0xb0, 0x45, 0xe5, 0x8b, 0xf7, 0xf3, 0x9c, 0xc3, 0x0f, 0x8f, 0x0b, 0xa8,
-    0x93, 0x10, 0xf4, 0x34, 0xaf, 0xf9, 0xce, 0x59, 0xe3, 0x33, 0x16, 0x2f,
-    0xfb, 0xf3, 0xaf, 0x14, 0xe7, 0x6b, 0x17, 0xff, 0xfc, 0xfb, 0x4c, 0x39,
-    0xad, 0x3f, 0x71, 0x41, 0xb4, 0x7c, 0xed, 0x62, 0xff, 0x4b, 0x6c, 0xda,
-    0x60, 0xd6, 0x2f, 0x7f, 0x08, 0x68, 0xd8, 0xf9, 0xcf, 0x9a, 0xee, 0x04,
-    0xac, 0x5f, 0xe7, 0xe9, 0xf9, 0xc8, 0x32, 0xc5, 0x00, 0xf2, 0xf8, 0x2f,
-    0x58, 0xac, 0xd1, 0xe3, 0x4f, 0xf9, 0x47, 0xa3, 0x10, 0x14, 0x22, 0xef,
-    0xd3, 0xa8, 0xb9, 0xb2, 0xc5, 0xff, 0x7e, 0x73, 0x50, 0xe0, 0x8e, 0xb1,
-    0x7f, 0xef, 0xc8, 0xcc, 0x98, 0xff, 0xb7, 0x16, 0x2f, 0xfd, 0x30, 0xef,
-    0x8f, 0xf2, 0x68, 0x2c, 0x5f, 0x87, 0x90, 0x71, 0xac, 0x5f, 0xf9, 0xc1,
-    0x9e, 0x9f, 0xc9, 0xf1, 0x62, 0xb6, 0x4d, 0x33, 0x72, 0xb7, 0x3a, 0x3a,
-    0x18, 0x8f, 0xe3, 0x8a, 0x2e, 0x7e, 0x2c, 0x5f, 0xe2, 0xfb, 0x77, 0x07,
-    0x25, 0x8b, 0xfd, 0xcf, 0xb4, 0x00, 0xdd, 0xac, 0x54, 0x9f, 0x46, 0x19,
-    0xde, 0x08, 0x5c, 0x58, 0xbf, 0xdb, 0x37, 0x80, 0x19, 0x41, 0x62, 0xff,
-    0xfc, 0x45, 0x3d, 0xe1, 0x0b, 0xc2, 0x37, 0x3b, 0xf2, 0xc5, 0xfa, 0x2e,
-    0x75, 0xdf, 0x5c, 0x8d, 0x16, 0x2a, 0x51, 0xd3, 0x83, 0xee, 0x6c, 0x25,
-    0x7b, 0xfd, 0xf7, 0xd6, 0x9c, 0xb7, 0x58, 0xbf, 0xf4, 0x39, 0x1b, 0x73,
-    0x09, 0xa1, 0xc5, 0x8b, 0xd3, 0x03, 0x56, 0x2f, 0xd9, 0xcd, 0xb0, 0x25,
-    0x8b, 0xfb, 0x71, 0x4e, 0xff, 0xc5, 0x8b, 0x9f, 0x75, 0x8a, 0x31, 0x12,
-    0x10, 0x1e, 0xc2, 0xa8, 0xe3, 0x0a, 0x35, 0x34, 0x8e, 0xcd, 0x3d, 0x0d,
-    0x4b, 0xff, 0x7b, 0xed, 0x07, 0x1f, 0xe6, 0x0b, 0x14, 0xc7, 0xee, 0x47,
-    0x17, 0xcf, 0xb9, 0xfa, 0x2c, 0x5f, 0xc1, 0x9f, 0x81, 0x37, 0x6b, 0x17,
-    0xe6, 0xcf, 0x07, 0xb2, 0xc5, 0x4a, 0xf1, 0x36, 0x47, 0x4e, 0x6a, 0xe3,
-    0xbf, 0xea, 0x30, 0x96, 0x8f, 0xe4, 0x88, 0x3c, 0x4c, 0x11, 0x95, 0xe0,
-    0xb3, 0xeb, 0x17, 0xff, 0xde, 0xd0, 0x87, 0x26, 0x6a, 0x76, 0x6d, 0x6e,
-    0xb1, 0x7f, 0xe2, 0xcd, 0x8b, 0x3d, 0xf7, 0x09, 0x62, 0xec, 0x08, 0xc4,
-    0x49, 0xee, 0xa9, 0x7d, 0x80, 0xd4, 0xac, 0x56, 0xc7, 0xa7, 0xf3, 0x1b,
-    0xff, 0xdf, 0x7d, 0xe5, 0xfd, 0xf9, 0x0b, 0x3e, 0xb1, 0x7f, 0xbc, 0xff,
-    0xc2, 0xce, 0x2c, 0x56, 0xe7, 0xfa, 0x1a, 0x5d, 0xff, 0xf7, 0x33, 0x3b,
-    0x80, 0xff, 0x3c, 0x84, 0x9d, 0x62, 0xf4, 0x21, 0x8b, 0x17, 0x48, 0x6b,
-    0x15, 0xd9, 0xb5, 0x61, 0xdb, 0xfd, 0x30, 0x0f, 0x80, 0x0f, 0x75, 0x8a,
-    0xc4, 0x6f, 0xbc, 0x21, 0xbc, 0x43, 0x62, 0x82, 0x66, 0xc3, 0x8c, 0x0e,
-    0xff, 0xec, 0xfc, 0xe6, 0xdb, 0x39, 0x4c, 0x16, 0x2a, 0x0a, 0x92, 0x72,
-    0x3d, 0x68, 0xe2, 0xfb, 0xda, 0xcf, 0xac, 0x5e, 0xe3, 0x9d, 0x62, 0xb4,
-    0x6e, 0xbc, 0x3b, 0x7f, 0x7d, 0xbd, 0xf6, 0x3a, 0xc5, 0xf1, 0xb2, 0x50,
-    0x58, 0xbb, 0x3b, 0x58, 0xb9, 0xf6, 0x58, 0xa9, 0x45, 0x13, 0x90, 0xf8,
-    0xb8, 0x32, 0x3e, 0xa1, 0x8b, 0xfd, 0xc2, 0xc3, 0x9d, 0xfc, 0xb1, 0x7d,
-    0xec, 0x14, 0x16, 0x2f, 0xfe, 0xfb, 0xc9, 0x18, 0xc5, 0x07, 0x3a, 0xc5,
-    0xfd, 0x02, 0x9f, 0xb1, 0xd6, 0x2f, 0x44, 0xe1, 0x2c, 0x5f, 0x4f, 0x53,
-    0xe9, 0x62, 0x9c, 0xf1, 0x08, 0x7e, 0xff, 0xcd, 0xd8, 0x7e, 0x7d, 0x48,
-    0xba, 0xf5, 0x8b, 0x83, 0xd9, 0x62, 0x8e, 0x7c, 0x1e, 0x46, 0xbf, 0x37,
-    0x0a, 0x62, 0x58, 0xbf, 0x7c, 0x45, 0x3b, 0x2c, 0x5d, 0xd3, 0x4b, 0x17,
-    0x16, 0x96, 0x2f, 0xff, 0xc2, 0xd8, 0xa7, 0x3f, 0x19, 0x3e, 0xcf, 0x8b,
-    0x4b, 0x17, 0xb8, 0x1f, 0x0c, 0x54, 0x63, 0x28, 0x63, 0x71, 0xc8, 0x40,
-    0x1a, 0x44, 0xe5, 0x04, 0x53, 0xc1, 0xa0, 0xc5, 0xeb, 0x75, 0x63, 0xcc,
-    0x67, 0xe9, 0x4a, 0x97, 0x10, 0x4b, 0x17, 0xee, 0x1f, 0x3d, 0xc5, 0x8b,
-    0xf8, 0x1a, 0x9d, 0xf0, 0x96, 0x2f, 0xfc, 0x6e, 0x79, 0xff, 0x9e, 0x9d,
-    0x2c, 0x54, 0x9f, 0x6b, 0x97, 0x5f, 0x9a, 0x04, 0xf2, 0xb1, 0x7f, 0x7d,
-    0xc7, 0x25, 0xe5, 0x8b, 0xff, 0x85, 0xa0, 0x70, 0x47, 0xe4, 0x96, 0x2c,
-    0x5c, 0xc5, 0xb9, 0xf9, 0x70, 0xb6, 0xf6, 0x72, 0x56, 0x2f, 0x9b, 0xce,
-    0x05, 0x8b, 0xe2, 0xf6, 0x12, 0xc5, 0x7c, 0xf0, 0xd8, 0x8a, 0xfe, 0xc3,
-    0xe6, 0x11, 0xab, 0x14, 0xb1, 0x7f, 0x7b, 0x99, 0xd3, 0xee, 0xb1, 0x46,
-    0x9b, 0xc6, 0x0c, 0xb1, 0xa3, 0x44, 0x51, 0x34, 0xd4, 0xa3, 0x51, 0xa1,
-    0x57, 0x7f, 0xc4, 0xc1, 0x45, 0x06, 0xd4, 0x16, 0x2f, 0xe7, 0xd6, 0x74,
-    0x98, 0xf5, 0x8a, 0x88, 0xfb, 0x7e, 0x77, 0x7f, 0x3e, 0xb5, 0x38, 0x4b,
-    0x17, 0xfd, 0x30, 0xe6, 0x6e, 0x53, 0xa5, 0x8a, 0x34, 0xf9, 0x74, 0x59,
-    0x67, 0x58, 0xbf, 0xb8, 0xfa, 0xdf, 0xf8, 0xb1, 0x7f, 0xc4, 0xdd, 0xfd,
-    0xe4, 0xbc, 0xb1, 0x7f, 0x60, 0x00, 0xdd, 0xc1, 0x62, 0xf1, 0x31, 0xb8,
-    0x8c, 0xad, 0xc8, 0xfb, 0x11, 0xf9, 0x79, 0x1c, 0x51, 0x8c, 0xd0, 0xc9,
-    0x96, 0x9b, 0x08, 0xc5, 0xb2, 0x5b, 0x56, 0xe7, 0x2e, 0x31, 0xa8, 0x4b,
-    0x1c, 0x81, 0xa1, 0x30, 0x02, 0xd2, 0x8c, 0xcf, 0x90, 0x93, 0x14, 0x6a,
-    0x57, 0xff, 0xdb, 0x66, 0xb6, 0x7f, 0x43, 0x35, 0xa6, 0x82, 0xc5, 0xc6,
-    0xf9, 0x62, 0xff, 0xf3, 0xfe, 0x7f, 0x9d, 0xf1, 0xff, 0x23, 0x58, 0xbd,
-    0xbb, 0x8d, 0x62, 0xff, 0xfb, 0x99, 0xad, 0xfe, 0x26, 0x0c, 0x32, 0xce,
-    0x8b, 0x17, 0xdb, 0x14, 0xec, 0xb1, 0x76, 0x6c, 0xb1, 0x52, 0x6f, 0x30,
-    0x92, 0xb6, 0x45, 0x81, 0x42, 0x46, 0xfb, 0x4f, 0x9f, 0x58, 0xbf, 0xe3,
-    0xb7, 0x7d, 0x53, 0xb9, 0xce, 0xb1, 0x7d, 0x38, 0x1c, 0x68, 0xb1, 0x7e,
-    0x91, 0xc6, 0xf1, 0xbf, 0x58, 0xb1, 0x6d, 0x62, 0x27, 0xc8, 0xfc, 0x32,
-    0x8b, 0xff, 0xfd, 0xc7, 0xe7, 0x27, 0x9b, 0x93, 0x6d, 0x25, 0x31, 0x71,
-    0x62, 0xb1, 0x58, 0x19, 0xaa, 0x5b, 0x8c, 0xf6, 0x94, 0xf0, 0xce, 0xd1,
-    0x43, 0x43, 0x07, 0xc6, 0xb7, 0xef, 0xbc, 0x73, 0x9a, 0xb1, 0x7d, 0x80,
-    0x7e, 0x8b, 0x17, 0xc0, 0x00, 0x80, 0xb1, 0x5b, 0x9f, 0xa1, 0x16, 0x06,
-    0x49, 0x7c, 0x2d, 0x79, 0xd6, 0x2f, 0xc5, 0x0e, 0x6c, 0x05, 0x8b, 0xff,
-    0xee, 0x7f, 0x0f, 0xc9, 0x1b, 0x0f, 0xe2, 0x3a, 0xc5, 0xf7, 0x7e, 0xfe,
-    0x2c, 0x5f, 0xa1, 0x3e, 0xfe, 0x2c, 0x56, 0x1e, 0x67, 0x89, 0x2a, 0x51,
-    0x7c, 0xd0, 0x9d, 0xbf, 0xf8, 0x13, 0xc3, 0xcb, 0xeb, 0x4e, 0x12, 0xc5,
-    0xe6, 0x68, 0x2c, 0x5f, 0xe7, 0xf3, 0xc3, 0x3b, 0xf2, 0xc5, 0x0d, 0x3c,
-    0x6c, 0x23, 0xde, 0x1d, 0x0e, 0x4c, 0x04, 0x5e, 0xa1, 0xcb, 0xfa, 0x5c,
-    0x6d, 0xd4, 0xeb, 0x17, 0xfa, 0x04, 0xf0, 0xef, 0xdd, 0x75, 0x58, 0xbf,
-    0xc2, 0x6e, 0xf9, 0xad, 0x4a, 0xc5, 0x68, 0xfc, 0xb8, 0x7b, 0x7f, 0x6f,
-    0x81, 0xf5, 0x34, 0x16, 0x2f, 0xc7, 0x7f, 0x7a, 0x56, 0x2f, 0x3e, 0x04,
-    0xb1, 0x61, 0xe2, 0x26, 0xb7, 0x22, 0x73, 0x32, 0x28, 0xb9, 0xf9, 0x04,
-    0xdf, 0x32, 0x33, 0xbb, 0xff, 0x03, 0xd3, 0x85, 0xbe, 0x77, 0xe5, 0x8b,
-    0xf7, 0x30, 0xf3, 0x1e, 0xb1, 0x5a, 0x3e, 0xb2, 0x40, 0xbf, 0xf4, 0xc0,
-    0x07, 0x90, 0xb9, 0x0d, 0x96, 0x2f, 0xfe, 0xce, 0xe1, 0x9f, 0x7d, 0x13,
-    0xca, 0xc5, 0xff, 0x4c, 0xf3, 0x8f, 0xac, 0x3a, 0xc5, 0x40, 0xfe, 0xc6,
-    0x87, 0x7f, 0xf3, 0x3f, 0x41, 0xfe, 0x75, 0xa6, 0x35, 0x62, 0xfa, 0x3f,
-    0xf9, 0xb2, 0xc5, 0xfe, 0x91, 0xe7, 0x9f, 0xe2, 0x58, 0xa9, 0x3d, 0xa1,
-    0x93, 0xdf, 0xf3, 0x70, 0xb0, 0x01, 0xe4, 0x4b, 0x17, 0xfe, 0x87, 0x9f,
-    0x6d, 0x4c, 0x1b, 0x4b, 0x17, 0xe2, 0xcd, 0x83, 0x82, 0xc5, 0xe7, 0xef,
-    0x8b, 0x17, 0x67, 0x96, 0x28, 0xd3, 0x6b, 0xf1, 0xea, 0x95, 0x57, 0xbb,
-    0x10, 0xc5, 0x0b, 0xdd, 0x11, 0x1e, 0x14, 0x3f, 0x21, 0x63, 0xae, 0x20,
-    0x79, 0x7e, 0xfe, 0x33, 0x9c, 0xc2, 0x1a, 0xc5, 0xff, 0xbc, 0x18, 0x24,
-    0x39, 0x04, 0x81, 0x62, 0xff, 0x9f, 0x5b, 0x08, 0x06, 0x4c, 0x7a, 0xc5,
-    0xff, 0xf1, 0x39, 0xa6, 0xc8, 0x7e, 0x7f, 0xb9, 0x79, 0x62, 0xff, 0xf3,
-    0x7f, 0xee, 0x58, 0x00, 0x3c, 0x5c, 0x58, 0xa8, 0x23, 0x68, 0xe7, 0xfd,
-    0x14, 0x6f, 0xe1, 0xbf, 0x3c, 0x26, 0x58, 0xbf, 0x09, 0x88, 0x1c, 0x58,
-    0xbd, 0xf6, 0x86, 0x1e, 0xb7, 0x8b, 0xaf, 0xff, 0xb9, 0xf7, 0xc3, 0xb7,
-    0x7c, 0xf7, 0xc5, 0xda, 0xc5, 0x7d, 0x10, 0xa0, 0x32, 0xbf, 0xfc, 0x23,
-    0x78, 0x18, 0xce, 0xc3, 0xfc, 0x92, 0xc5, 0xff, 0x7d, 0xf5, 0xee, 0xf7,
-    0x7f, 0x2c, 0x5f, 0x37, 0xbd, 0x2b, 0x17, 0xf3, 0x71, 0xca, 0x78, 0xb1,
-    0x77, 0xd9, 0x62, 0xf8, 0x6c, 0x40, 0xc4, 0x50, 0xee, 0x79, 0xf2, 0x2e,
-    0xbc, 0xb2, 0xb1, 0x36, 0x9f, 0x91, 0x8a, 0x1d, 0xd7, 0xff, 0xf0, 0xf0,
-    0x11, 0xd9, 0xf6, 0x7f, 0x0b, 0x4d, 0xd3, 0x16, 0x2f, 0xff, 0xfc, 0x76,
-    0x20, 0x41, 0xf8, 0x23, 0xfd, 0xe7, 0xdf, 0x13, 0x1d, 0x62, 0xff, 0xff,
-    0x13, 0x05, 0xec, 0xf9, 0x85, 0x9f, 0xe7, 0x31, 0x89, 0x62, 0xf4, 0x36,
-    0xc5, 0x8a, 0x88, 0xff, 0xb8, 0xc1, 0x7f, 0x3f, 0x46, 0x84, 0x31, 0x62,
-    0xff, 0xec, 0x0b, 0x52, 0xe5, 0x80, 0x3b, 0xac, 0x5f, 0xff, 0x9f, 0xd0,
-    0x92, 0x00, 0xc4, 0xda, 0x80, 0xce, 0xb1, 0x7e, 0x21, 0x43, 0x38, 0xb1,
-    0x71, 0x4a, 0xc5, 0xff, 0xe1, 0x7a, 0x0e, 0x0f, 0xb3, 0xf9, 0x8e, 0xb1,
-    0x50, 0x46, 0xf6, 0x2b, 0x7c, 0xa0, 0x85, 0xae, 0x0a, 0x56, 0x2e, 0x32,
-    0x3d, 0x62, 0xff, 0xfc, 0xcf, 0xe7, 0x1e, 0x0f, 0x3c, 0xe7, 0x7d, 0x2c,
-    0x5e, 0xe4, 0x9d, 0x62, 0xf7, 0x4f, 0xba, 0xc5, 0x40, 0xde, 0x38, 0xed,
-    0xff, 0xe9, 0xdc, 0x78, 0x1f, 0x9f, 0x52, 0x2e, 0xbd, 0x62, 0xf0, 0xb0,
-    0x6b, 0x17, 0xb4, 0xdc, 0x31, 0x57, 0xfc, 0x91, 0xec, 0x5f, 0x91, 0x90,
-    0xc4, 0x77, 0xa1, 0x8f, 0x8e, 0x34, 0x23, 0xc8, 0x82, 0x39, 0x46, 0xde,
-    0x95, 0xf9, 0xe8, 0x4a, 0x76, 0x73, 0x56, 0x5f, 0x14, 0xbe, 0x9b, 0xff,
-    0x4f, 0x37, 0xfb, 0x8e, 0x73, 0x4b, 0x17, 0xfc, 0x76, 0x87, 0x60, 0x92,
-    0xdd, 0x62, 0xa0, 0xc9, 0xc0, 0xec, 0xbd, 0xe9, 0x17, 0x3a, 0x5e, 0x39,
-    0xfd, 0xd0, 0x95, 0x8b, 0xff, 0x7e, 0x7f, 0x9d, 0x83, 0x3d, 0xc5, 0x8b,
-    0xd1, 0x39, 0xd6, 0x28, 0x67, 0xbd, 0x88, 0x17, 0xce, 0x6c, 0x9d, 0x62,
-    0xff, 0xec, 0x19, 0x36, 0xdc, 0xe3, 0x14, 0x16, 0x2e, 0xc2, 0x93, 0xe7,
-    0x22, 0x3a, 0xd9, 0x16, 0x5e, 0x84, 0x45, 0x32, 0x6a, 0x02, 0x8c, 0x9e,
-    0xff, 0xff, 0xe3, 0x22, 0xfc, 0xeb, 0x63, 0x38, 0x06, 0x20, 0x19, 0x9b,
-    0xcf, 0xb8, 0xb1, 0x7e, 0x6f, 0x73, 0x09, 0x62, 0xb7, 0x45, 0x01, 0x3c,
-    0xd4, 0xb6, 0x9f, 0x63, 0x87, 0x8e, 0x47, 0xed, 0xbc, 0x7b, 0x6f, 0x2d,
-    0x71, 0xa9, 0x49, 0x45, 0x1d, 0x38, 0xa1, 0x93, 0x63, 0xac, 0x5e, 0xd6,
-    0xa5, 0x62, 0xf7, 0xc5, 0x1e, 0xb1, 0x7f, 0xdb, 0x3e, 0xdc, 0xc3, 0xb7,
-    0xd6, 0x2f, 0xfa, 0x12, 0x37, 0x1e, 0x37, 0xd6, 0x2c, 0xfa, 0x3f, 0x3f,
-    0x1d, 0xdf, 0xff, 0x02, 0x48, 0xce, 0x37, 0x9c, 0x78, 0x50, 0x58, 0xbf,
-    0x4e, 0xce, 0x5e, 0x58, 0xbf, 0xe6, 0x84, 0xff, 0x3d, 0x30, 0x58, 0xa7,
-    0x45, 0x7e, 0x93, 0xfe, 0x51, 0x7f, 0xfb, 0xa1, 0x99, 0xe7, 0xd4, 0x8b,
-    0xd0, 0x95, 0x8b, 0x1d, 0x62, 0x9c, 0xf7, 0xc3, 0x4d, 0xbc, 0x06, 0xe2,
-    0xc5, 0xfe, 0x01, 0xf3, 0x61, 0x6a, 0x0b, 0x17, 0x46, 0xfd, 0x62, 0xc5,
-    0x0d, 0x12, 0xfd, 0x91, 0x68, 0x77, 0x86, 0xd7, 0xfa, 0x1e, 0xc3, 0x4a,
-    0x4d, 0x58, 0xbd, 0xd7, 0x7d, 0x75, 0xeb, 0x16, 0x2f, 0xc5, 0x23, 0xc8,
-    0x96, 0x2f, 0xe8, 0x38, 0x1b, 0xc2, 0x58, 0xbe, 0xe0, 0xb4, 0x6a, 0xc5,
-    0xff, 0xa0, 0x21, 0xe6, 0xbc, 0x42, 0xf2, 0xc5, 0xfc, 0x7c, 0xe3, 0x31,
-    0xd6, 0x2f, 0x13, 0x71, 0x62, 0xa4, 0xf2, 0x70, 0xb6, 0xfd, 0x3f, 0xf4,
-    0xc1, 0x62, 0xfa, 0x18, 0x08, 0xd4, 0xb1, 0x78, 0x5e, 0xe4, 0x6e, 0x9d,
-    0x3c, 0x99, 0x61, 0x47, 0x65, 0xd1, 0x12, 0xfe, 0x11, 0x20, 0x20, 0x8e,
-    0x28, 0xbf, 0xfe, 0x73, 0xb0, 0xf9, 0x84, 0xdd, 0xeb, 0x0e, 0xb1, 0x43,
-    0x47, 0x07, 0xe1, 0x23, 0x7b, 0xe1, 0xe9, 0x62, 0xff, 0x49, 0x37, 0xc4,
-    0x5b, 0x2c, 0x5f, 0xff, 0xbe, 0xfa, 0xfb, 0x49, 0x1a, 0xd1, 0x33, 0x6c,
-    0xb1, 0x7d, 0x8e, 0x0e, 0x2c, 0x5e, 0xe4, 0xc3, 0x0f, 0xe3, 0x4a, 0xd7,
-    0xfd, 0x10, 0x67, 0xd4, 0xe0, 0xdd, 0x62, 0x9c, 0xfb, 0x58, 0xca, 0xf6,
-    0xc3, 0x95, 0x8b, 0xf1, 0x9d, 0xf2, 0x60, 0xb1, 0x7f, 0xfb, 0x93, 0x17,
-    0x19, 0xc7, 0x87, 0xc2, 0x58, 0xbd, 0xa6, 0xdd, 0x62, 0xf1, 0xe7, 0xeb,
-    0x17, 0xa6, 0x1d, 0x6a, 0xc5, 0x0c, 0xf7, 0x70, 0x78, 0x87, 0x6b, 0x11,
-    0xa6, 0x08, 0x53, 0x5e, 0x21, 0x41, 0x62, 0xf0, 0xc5, 0x2b, 0x17, 0xef,
-    0x73, 0x0a, 0x0b, 0x17, 0xe7, 0xe8, 0xda, 0x82, 0xc5, 0xd3, 0xc9, 0x3d,
-    0x2e, 0x14, 0x5f, 0xf3, 0x83, 0xf8, 0x79, 0x8e, 0xc5, 0x8b, 0xf3, 0xfe,
-    0x19, 0xe5, 0x8a, 0xd1, 0xf1, 0x9c, 0xee, 0xf3, 0x10, 0xd6, 0x2f, 0xfc,
-    0xc6, 0xc9, 0x6e, 0xde, 0x63, 0x56, 0x2f, 0xb0, 0x11, 0xd9, 0xf3, 0xdc,
-    0xe0, 0xe5, 0xff, 0xff, 0xec, 0xdb, 0x92, 0x6b, 0x73, 0xd0, 0xc3, 0x4d,
-    0xce, 0xfd, 0xa9, 0xce, 0xd6, 0x2f, 0x68, 0xa0, 0xb1, 0x7f, 0xf8, 0x7f,
-    0xc1, 0xc7, 0xb9, 0x1b, 0xac, 0xea, 0x58, 0xbf, 0xe2, 0x07, 0x9c, 0x78,
-    0x50, 0x58, 0xb4, 0x98, 0x8a, 0x6c, 0x1d, 0x65, 0x1a, 0x75, 0x61, 0xdf,
-    0x6f, 0x68, 0x47, 0x93, 0xf7, 0x0e, 0xc5, 0x19, 0x1d, 0xee, 0xbf, 0xf8,
-    0xb1, 0x7e, 0x35, 0xcb, 0x3a, 0x2c, 0x57, 0x5a, 0xcc, 0x52, 0x8d, 0x84,
-    0xa4, 0x76, 0x10, 0x94, 0x1c, 0x35, 0xb2, 0x32, 0x5e, 0xcf, 0x9e, 0x55,
-    0xe4, 0x45, 0x07, 0x1f, 0xfc, 0x63, 0x0c, 0x40, 0x01, 0xe2, 0x87, 0xf7,
-    0x09, 0xfd, 0x2c, 0xac, 0x4c, 0x21, 0x91, 0x5f, 0x1b, 0x25, 0xba, 0xc5,
-    0xc1, 0xf1, 0x62, 0xff, 0xde, 0xe6, 0x44, 0xc0, 0xe6, 0x6c, 0xb1, 0x6e,
-    0xd6, 0x2a, 0x08, 0x91, 0xd1, 0x21, 0x0c, 0xf9, 0x06, 0xfe, 0x13, 0x6a,
-    0x03, 0x3a, 0xc5, 0xfb, 0x02, 0xf0, 0x67, 0x58, 0xbe, 0xee, 0x19, 0xe5,
-    0x8b, 0xff, 0xb2, 0x10, 0x6e, 0x0f, 0x44, 0xc1, 0x2c, 0x51, 0x87, 0xd2,
-    0x44, 0x97, 0xff, 0xf8, 0x39, 0x00, 0xff, 0x3a, 0xc2, 0x76, 0x87, 0x33,
-    0xcb, 0x15, 0x04, 0x41, 0x70, 0x8a, 0xe7, 0x1a, 0xc5, 0xdc, 0xd9, 0x62,
-    0xfe, 0x29, 0x0b, 0x52, 0x75, 0x8b, 0xff, 0xec, 0xf0, 0x80, 0x76, 0x87,
-    0x33, 0xa4, 0x8d, 0x62, 0x86, 0x89, 0x9c, 0x19, 0x22, 0xea, 0xd2, 0x60,
-    0x24, 0x47, 0xe8, 0x58, 0x5f, 0xfd, 0x38, 0x0e, 0x41, 0xf5, 0xb0, 0x80,
-    0xb1, 0x7f, 0x03, 0x9a, 0xd6, 0x04, 0xb1, 0x77, 0xde, 0x23, 0xf6, 0x24,
-    0x6b, 0xfe, 0xc3, 0x9c, 0x5c, 0x86, 0xdb, 0xac, 0x5f, 0xc2, 0xd0, 0x33,
-    0xec, 0xb1, 0x5b, 0xa2, 0x60, 0x8b, 0x78, 0x7b, 0x7d, 0xc3, 0xb3, 0xac,
-    0x54, 0x0f, 0x4b, 0xc6, 0x17, 0xff, 0xa0, 0x66, 0xa7, 0x8f, 0x24, 0x00,
-    0x4a, 0xc5, 0x49, 0xf6, 0x31, 0x15, 0xff, 0x73, 0x30, 0xd3, 0x5a, 0x12,
-    0xb1, 0x7f, 0x7d, 0x9f, 0xd2, 0x4b, 0x17, 0xff, 0xc0, 0x7d, 0x1a, 0x53,
-    0x81, 0x67, 0x04, 0x75, 0x8a, 0x93, 0xfd, 0x34, 0xb2, 0xfc, 0x3c, 0xe0,
-    0x8d, 0x58, 0xbe, 0x63, 0xe0, 0xd6, 0x2f, 0xc3, 0x62, 0x6e, 0x8b, 0x17,
-    0x37, 0x16, 0x2b, 0x0f, 0x03, 0x45, 0x35, 0xda, 0x70, 0xda, 0x85, 0xb9,
-    0x11, 0x78, 0xab, 0xa3, 0x15, 0xff, 0x7e, 0x7b, 0xf4, 0xfd, 0xa3, 0xd6,
-    0x29, 0x62, 0xff, 0xb4, 0xe2, 0xd8, 0x00, 0x9e, 0xa5, 0x8b, 0xfe, 0xd7,
-    0xbc, 0xfa, 0xf6, 0x6e, 0xb1, 0x7f, 0xf9, 0xb5, 0xa1, 0x1b, 0xec, 0x8a,
-    0x0c, 0x05, 0x8b, 0xfd, 0xe7, 0xd3, 0x7d, 0x8e, 0xb1, 0x70, 0x71, 0x2c,
-    0x5c, 0x2d, 0x2c, 0x5f, 0xd9, 0xae, 0x7f, 0x37, 0x58, 0xb7, 0x45, 0x8a,
-    0x31, 0x3b, 0x7e, 0xbb, 0x3d, 0x18, 0x66, 0x1f, 0x1a, 0x77, 0xda, 0x6e,
-    0x8c, 0xfe, 0x34, 0x43, 0x11, 0xc5, 0xf7, 0xd1, 0x14, 0x9d, 0x62, 0xdd,
-    0xac, 0x5d, 0x81, 0x2c, 0x5d, 0xef, 0x39, 0xab, 0xf0, 0x9d, 0x4a, 0x62,
-    0x39, 0x09, 0x77, 0x4e, 0xbd, 0xb1, 0x09, 0x62, 0xff, 0xc7, 0xd4, 0xfd,
-    0xf7, 0x72, 0x65, 0x8b, 0x42, 0x4f, 0x71, 0x87, 0xaf, 0x04, 0x10, 0x4a,
-    0x90, 0x46, 0x0b, 0xfe, 0x2d, 0xf3, 0x5b, 0xb3, 0x6e, 0xa9, 0x04, 0x60,
-    0x8c, 0x36, 0x55, 0x12, 0x2d, 0xd9, 0x62, 0xdb, 0x2c, 0x5e, 0x62, 0x02,
-    0xc5, 0xc2, 0x89, 0x62, 0x8d, 0x36, 0xba, 0x1c, 0xbc, 0xcf, 0xd4, 0xb1,
-    0x50, 0x44, 0x4b, 0xa4, 0x7c, 0x8a, 0xa5, 0x96, 0xc8, 0x33, 0xcc, 0x2f,
-    0x79, 0x42, 0xe7, 0x94, 0x02, 0xd1, 0xd3, 0x02, 0x58, 0xd0, 0xa3, 0x46,
-    0xe9, 0x0a, 0xcb, 0xff, 0xbd, 0xfc, 0xe9, 0x83, 0xd1, 0x30, 0x4b, 0x16,
-    0x1a, 0xc5, 0xfb, 0xf9, 0xa9, 0x87, 0x0f, 0x64, 0x48, 0xf7, 0xb8, 0x06,
-    0x58, 0xbb, 0x02, 0x58, 0xbf, 0x6e, 0xfc, 0xc1, 0xac, 0x56, 0xc7, 0x83,
-    0xf1, 0x8b, 0xdf, 0xce, 0xa5, 0x8a, 0xd9, 0x14, 0x3b, 0xaf, 0x04, 0x47,
-    0x7f, 0x98, 0x78, 0xfd, 0x18, 0xeb, 0x17, 0xff, 0xed, 0xf0, 0x89, 0xf3,
-    0x52, 0x3f, 0xb1, 0x3a, 0xc5, 0x69, 0x10, 0xc2, 0x34, 0xbf, 0xff, 0xff,
-    0x39, 0xf3, 0x98, 0x42, 0xf7, 0xf3, 0xa0, 0xe7, 0xef, 0x3e, 0xf8, 0x98,
-    0xeb, 0x17, 0xfe, 0x16, 0xf9, 0xad, 0xa7, 0xe2, 0x1a, 0xc5, 0xe0, 0x74,
-    0x3a, 0xc5, 0xf6, 0xff, 0x7d, 0x96, 0x28, 0xc3, 0xc5, 0x62, 0x0a, 0x74,
-    0x54, 0xf2, 0x10, 0xf7, 0xe1, 0xcb, 0x97, 0x96, 0x28, 0x6a, 0xcd, 0x72,
-    0x1b, 0xfa, 0x85, 0xcf, 0xc8, 0xfd, 0x19, 0x60, 0x44, 0xf7, 0xe7, 0xd4,
-    0x23, 0xbc, 0xb1, 0x7f, 0xf3, 0x73, 0x69, 0xfe, 0x6e, 0x1c, 0x73, 0x2c,
-    0x51, 0xcf, 0xd8, 0x8b, 0x2f, 0xff, 0xff, 0x7f, 0x05, 0xa3, 0x7e, 0xfd,
-    0xcf, 0x85, 0xf2, 0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xff, 0xd9, 0xd8, 0x7e,
-    0x72, 0x14, 0x33, 0x8b, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x2d,
-    0x89, 0x87, 0x25, 0xb4, 0xe8, 0x78, 0x59, 0xee, 0x3e, 0xf8, 0x41, 0xed,
-    0x9a, 0x9e, 0x13, 0x1b, 0xcc, 0x70, 0x00, 0x40, 0x26, 0x1c, 0x96, 0xd3,
-    0xa5, 0x8b, 0xff, 0xff, 0xbe, 0xfe, 0xfe, 0x1f, 0xc5, 0x20, 0x9f, 0xb7,
-    0xb8, 0x26, 0xed, 0x62, 0xff, 0xf9, 0x88, 0x1d, 0xc2, 0x5a, 0x18, 0x6b,
-    0xe9, 0x62, 0xb8, 0x8c, 0x2e, 0x8e, 0x57, 0xee, 0x1a, 0x6e, 0x47, 0xac,
-    0x5f, 0x75, 0x67, 0x7e, 0x58, 0xa9, 0x3d, 0x56, 0x2e, 0xbf, 0xa0, 0x59,
-    0x82, 0xeb, 0xd6, 0x2f, 0xf3, 0x7a, 0x19, 0xac, 0xe2, 0xc5, 0x4a, 0xb1,
-    0x0c, 0x46, 0x78, 0xf2, 0xfe, 0xf4, 0xc4, 0x04, 0x65, 0x7f, 0xe7, 0xdf,
-    0xf9, 0x1c, 0x1e, 0xa6, 0x0b, 0x17, 0xe6, 0x00, 0x1f, 0xeb, 0x17, 0xff,
-    0x67, 0x4f, 0x79, 0x9c, 0x8a, 0x4e, 0xb1, 0x74, 0xc3, 0xe7, 0xd9, 0xe2,
-    0x8a, 0xfa, 0x37, 0x4a, 0x16, 0x17, 0xed, 0xfc, 0x6b, 0xee, 0xb1, 0x7f,
-    0xfb, 0xf2, 0x5e, 0x33, 0xec, 0x3f, 0xb6, 0x96, 0x29, 0x8f, 0xdf, 0x85,
-    0x97, 0xfd, 0x9c, 0xfe, 0x31, 0x64, 0x7a, 0xc5, 0xd9, 0xb2, 0xc5, 0xfe,
-    0x0c, 0xd7, 0xea, 0x92, 0x82, 0xc5, 0xff, 0x16, 0x3e, 0x8a, 0x7b, 0x82,
-    0xc5, 0x62, 0x30, 0xb4, 0x75, 0xf1, 0x86, 0x38, 0xbf, 0xff, 0xc2, 0xdb,
-    0x3e, 0xfe, 0xfe, 0x1f, 0x35, 0x0c, 0xef, 0xcb, 0x17, 0xcd, 0xd2, 0x7a,
-    0x2c, 0x57, 0x91, 0x12, 0x26, 0x3b, 0xfe, 0x7d, 0x6c, 0x20, 0x19, 0xcf,
-    0x2c, 0x5f, 0xdf, 0x7f, 0xfe, 0x4e, 0xb1, 0x7e, 0x81, 0x4e, 0x71, 0x62,
-    0xf3, 0x16, 0xdb, 0x9e, 0xaf, 0x65, 0xd5, 0x04, 0x75, 0x70, 0x8f, 0xd0,
-    0x92, 0xbf, 0x8b, 0x0d, 0xe3, 0x7d, 0x62, 0xf9, 0xcd, 0xc1, 0xac, 0x5e,
-    0x37, 0x06, 0xb1, 0x76, 0x1c, 0xc3, 0xc1, 0x72, 0x3a, 0x3a, 0x27, 0x3c,
-    0xdf, 0x7f, 0xf8, 0xf8, 0x6b, 0xe8, 0xb3, 0xde, 0xcd, 0x96, 0x2f, 0xff,
-    0x45, 0x09, 0xd8, 0x98, 0xde, 0x14, 0xc1, 0x62, 0x96, 0x2d, 0x20, 0x3d,
-    0x8e, 0x26, 0x5f, 0xf8, 0x3c, 0xfb, 0x1e, 0x30, 0x20, 0x82, 0x58, 0xbf,
-    0xff, 0x66, 0xff, 0x92, 0x19, 0x3e, 0xd8, 0x4e, 0x6a, 0xc5, 0x6c, 0x89,
-    0xc8, 0x23, 0xdf, 0xfd, 0xb0, 0x1f, 0xbe, 0x6f, 0x8e, 0x5b, 0xac, 0x53,
-    0x1f, 0x61, 0x12, 0x54, 0xa7, 0xe5, 0x08, 0x51, 0xb4, 0x65, 0xf7, 0xff,
-    0xe2, 0x90, 0x73, 0x7f, 0xbe, 0xa2, 0x29, 0x07, 0x16, 0x2f, 0xfc, 0xf1,
-    0x61, 0x48, 0x5a, 0x93, 0xac, 0x5e, 0x3e, 0x71, 0x62, 0xa2, 0x45, 0x9e,
-    0x95, 0xce, 0x7f, 0x7f, 0x4e, 0xed, 0xbf, 0x20, 0xb1, 0x7f, 0xff, 0x7b,
-    0x92, 0x6c, 0x1f, 0xec, 0x5e, 0x86, 0x6b, 0x16, 0x2f, 0xfc, 0xfc, 0xc1,
-    0x98, 0xc0, 0x8e, 0xc5, 0x8b, 0x85, 0xd1, 0x62, 0xff, 0x49, 0xfb, 0xf4,
-    0xe7, 0x6b, 0x17, 0xfc, 0xfd, 0x3e, 0xd0, 0xd4, 0x9a, 0xb1, 0x7f, 0xf4,
-    0x83, 0x3d, 0x3b, 0x94, 0xfb, 0x8b, 0x15, 0xf4, 0x40, 0x11, 0xe5, 0x62,
-    0x71, 0xdb, 0xad, 0xe9, 0x0b, 0xe3, 0x5e, 0x85, 0xad, 0xf4, 0xc3, 0x91,
-    0xcb, 0x17, 0xf7, 0x8c, 0x3c, 0xe7, 0x96, 0x2f, 0xff, 0xbb, 0xf3, 0x85,
-    0xcf, 0xbf, 0x60, 0xd3, 0x0d, 0x62, 0xb1, 0x10, 0x7a, 0x2f, 0xbc, 0x22,
-    0x35, 0x62, 0xe6, 0x25, 0x8b, 0x79, 0xcd, 0xa3, 0x0f, 0x54, 0x9f, 0xd8,
-    0x95, 0xaf, 0xff, 0xa2, 0x29, 0x3f, 0x70, 0xf0, 0x87, 0x9d, 0xf9, 0x62,
-    0xff, 0xff, 0xa1, 0xdf, 0xb5, 0x39, 0xd8, 0xff, 0x87, 0x2c, 0xe8, 0xe4,
-    0xb1, 0x7f, 0xfc, 0xc0, 0x2c, 0xe4, 0xea, 0x37, 0x8d, 0xe3, 0x7e, 0xb7,
-    0xcb, 0x15, 0x88, 0xcd, 0x76, 0x9b, 0xf6, 0xdf, 0x26, 0xed, 0x62, 0xfe,
-    0xc0, 0xb0, 0x84, 0x05, 0x8b, 0xf4, 0x33, 0xd2, 0x05, 0x8b, 0xec, 0x04,
-    0x81, 0x62, 0xb6, 0x3f, 0x8e, 0xcb, 0x88, 0xa2, 0xb4, 0x8d, 0x23, 0xc2,
-    0x8a, 0xfd, 0xd9, 0xba, 0xce, 0x2c, 0x54, 0x9e, 0x9b, 0x14, 0x5f, 0xfc,
-    0xfc, 0x29, 0xf7, 0x33, 0xa3, 0x9a, 0xb1, 0x7f, 0xff, 0xf0, 0x0e, 0xd0,
-    0xfb, 0x3f, 0x9c, 0x78, 0x3c, 0xf3, 0x9d, 0xf4, 0xb1, 0x58, 0xac, 0xf7,
-    0xf1, 0x90, 0xf2, 0x34, 0x6f, 0x10, 0x09, 0x1a, 0xfd, 0xac, 0x1f, 0x49,
-    0x58, 0xbf, 0xff, 0x64, 0x1d, 0xba, 0x47, 0xff, 0x3b, 0x06, 0x7b, 0x8b,
-    0x17, 0xfe, 0xfb, 0x75, 0x6f, 0xf7, 0x3c, 0xee, 0xb1, 0x4b, 0x14, 0xb1,
-    0x5b, 0x97, 0x04, 0x19, 0x7f, 0xf4, 0xfd, 0x9f, 0xc0, 0xc8, 0x47, 0x62,
-    0xc5, 0xe2, 0x90, 0x96, 0x2e, 0xce, 0x62, 0x37, 0xf7, 0x5c, 0xd1, 0x01,
-    0xd1, 0xa9, 0xd3, 0xac, 0x62, 0xa2, 0x8c, 0xea, 0xff, 0xf3, 0x68, 0xd0,
-    0xe4, 0x2c, 0xe7, 0x18, 0xd5, 0x8b, 0xe3, 0xc8, 0xe5, 0x62, 0xff, 0x0f,
-    0xed, 0x0c, 0xef, 0xcb, 0x17, 0xff, 0xec, 0xd3, 0xc9, 0x7b, 0x37, 0x9f,
-    0x7d, 0xfa, 0x2c, 0x5b, 0x66, 0x44, 0x59, 0x1a, 0xd6, 0xc8, 0xd5, 0x14,
-    0x2b, 0x6b, 0x66, 0xd8, 0xa6, 0x04, 0x23, 0x97, 0x17, 0x91, 0x9b, 0x9b,
-    0x09, 0xed, 0xe1, 0xc7, 0xdc, 0x75, 0xcf, 0x0d, 0x18, 0xa5, 0x0a, 0xea,
-    0x1d, 0xa7, 0x31, 0xfc, 0x77, 0xc0, 0x50, 0xe4, 0x64, 0x9e, 0x96, 0xbd,
-    0xd2, 0x50, 0x18, 0x46, 0x81, 0xc6, 0x47, 0x7f, 0x8d, 0x92, 0xcf, 0x7d,
-    0xd6, 0x2f, 0xff, 0x70, 0x72, 0xc5, 0xb7, 0x9f, 0x8f, 0xd1, 0x62, 0xd2,
-    0x69, 0xff, 0xf8, 0xce, 0xff, 0xfb, 0x69, 0xd1, 0x83, 0xc2, 0xdb, 0x04,
-    0x5e, 0x58, 0xbf, 0x72, 0x76, 0xc0, 0x96, 0x2d, 0x24, 0x7f, 0x9c, 0x52,
-    0xbf, 0xfe, 0x1f, 0x84, 0xdd, 0xf8, 0x18, 0x33, 0x3e, 0xeb, 0x17, 0xff,
-    0xe6, 0x7f, 0x43, 0x3c, 0xc4, 0x09, 0xf4, 0x8d, 0x62, 0xff, 0x4f, 0xb9,
-    0x82, 0x2f, 0x2c, 0x5f, 0x3f, 0x41, 0xcf, 0xd1, 0x0c, 0x4a, 0x77, 0xff,
-    0xff, 0x3f, 0xb9, 0x86, 0x7b, 0x8d, 0x03, 0x37, 0xfb, 0x8f, 0x4e, 0x2d,
-    0x96, 0x2f, 0xff, 0xf6, 0x01, 0x8c, 0xf7, 0xf0, 0x7f, 0xc0, 0x60, 0xfe,
-    0xeb, 0x17, 0xff, 0x9b, 0xff, 0x71, 0xe7, 0xb8, 0x22, 0xf2, 0xc5, 0x1d,
-    0x32, 0x22, 0x77, 0xe8, 0xc3, 0x7f, 0x9f, 0xa6, 0x73, 0x99, 0x1e, 0xb1,
-    0x7d, 0xe2, 0x17, 0x96, 0x2e, 0x11, 0x2c, 0x5e, 0xc3, 0xe6, 0x8d, 0xd7,
-    0xc8, 0xef, 0xf8, 0xe6, 0x6b, 0x3a, 0xbf, 0x87, 0x58, 0xa9, 0x4c, 0x4e,
-    0x06, 0x5f, 0x72, 0x63, 0x1b, 0xfe, 0xeb, 0xdf, 0x5b, 0x8f, 0xf3, 0xba,
-    0xc5, 0x0d, 0x5f, 0x5b, 0x13, 0x72, 0x1b, 0x3e, 0x94, 0xde, 0x23, 0xcb,
-    0x8d, 0x75, 0x8b, 0xf9, 0xe4, 0xbc, 0x19, 0xd6, 0x2b, 0x47, 0x8d, 0xe1,
-    0x8b, 0xef, 0x90, 0x8d, 0x58, 0xbf, 0xbf, 0x3c, 0x83, 0x81, 0x62, 0xff,
-    0xb7, 0xcd, 0x69, 0xa0, 0x2c, 0x58, 0xbf, 0xff, 0xf7, 0x60, 0x92, 0xdd,
-    0xbc, 0xdd, 0x80, 0xf3, 0xff, 0x63, 0xf4, 0x58, 0xa1, 0xa3, 0x63, 0x0b,
-    0x83, 0x3a, 0xbf, 0x83, 0xd1, 0xca, 0x42, 0x58, 0xaf, 0x1f, 0x00, 0x66,
-    0x17, 0xe7, 0x17, 0x5f, 0x9c, 0x58, 0xac, 0x4f, 0x38, 0xd2, 0x26, 0x8d,
-    0x73, 0xc4, 0x75, 0x2e, 0x80, 0x47, 0x2b, 0x70, 0x87, 0x8f, 0x31, 0xa7,
-    0x23, 0xc5, 0x29, 0xae, 0xff, 0x8c, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x5f,
-    0xb3, 0x77, 0x90, 0x2c, 0x54, 0x0f, 0x8f, 0x73, 0xbb, 0xc1, 0x04, 0x12,
-    0x45, 0xff, 0x60, 0x1b, 0x59, 0xd3, 0x06, 0x91, 0x18, 0x68, 0x6e, 0x08,
-    0x24, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xfc, 0xdb, 0x0f, 0xf3, 0xc4, 0x88,
-    0xc3, 0x43, 0x44, 0x8c, 0xa0, 0x93, 0x63, 0x8e, 0xef, 0xdb, 0xb8, 0xc3,
-    0x3a, 0x44, 0x61, 0xb3, 0xbc, 0x10, 0x41, 0x24, 0x5e, 0xe4, 0xe9, 0x22,
-    0x30, 0xd0, 0xdf, 0x31, 0x77, 0xe5, 0x8a, 0x74, 0x59, 0x79, 0x7c, 0x23,
-    0x0a, 0xd2, 0xa2, 0x30, 0x47, 0xe7, 0x7f, 0xe9, 0xd6, 0xa5, 0x88, 0x0d,
-    0xba, 0xc5, 0xfc, 0x40, 0x30, 0x2c, 0xfa, 0xc5, 0xba, 0xc5, 0x8a, 0x82,
-    0x21, 0x58, 0xfa, 0x38, 0xc2, 0xff, 0x9c, 0xb7, 0x2c, 0x09, 0x80, 0xb1,
-    0x7f, 0x09, 0xb6, 0x21, 0xf6, 0xb1, 0x7d, 0x30, 0x6d, 0xd6, 0x2b, 0xe7,
-    0xa6, 0x46, 0x17, 0xff, 0xff, 0x31, 0xbc, 0xf1, 0x67, 0x3e, 0xfe, 0xfe,
-    0x1f, 0x3d, 0x3e, 0xe2, 0xc5, 0xfc, 0x2d, 0xf8, 0xfb, 0x89, 0x62, 0xf6,
-    0x44, 0xeb, 0x14, 0x34, 0x70, 0x91, 0x0f, 0x9c, 0x83, 0x31, 0xbf, 0xff,
-    0xe9, 0x38, 0xdd, 0x88, 0x3e, 0xfd, 0x9d, 0xf8, 0x0d, 0xee, 0x2c, 0x5f,
-    0xf0, 0x27, 0xb2, 0xc0, 0x0b, 0x8b, 0x17, 0xc2, 0xda, 0x38, 0x96, 0x28,
-    0x07, 0xc3, 0xc3, 0xab, 0xfd, 0xbc, 0x90, 0xc3, 0x8b, 0x8b, 0x17, 0xe1,
-    0xbf, 0x49, 0x1a, 0xc5, 0xf6, 0x16, 0x47, 0xac, 0x56, 0x8f, 0x38, 0xe5,
-    0x54, 0x34, 0xe4, 0xde, 0x19, 0x4c, 0x44, 0x1c, 0x21, 0x6f, 0xc6, 0x4f,
-    0xd8, 0xeb, 0x17, 0xfe, 0x68, 0x13, 0x1b, 0x11, 0x3c, 0x4b, 0x17, 0xfc,
-    0x40, 0xce, 0xfd, 0x99, 0xc5, 0x8b, 0x84, 0xcb, 0x15, 0xf4, 0x48, 0x32,
-    0x07, 0x8e, 0x6f, 0xe8, 0xd6, 0x58, 0x13, 0x01, 0x62, 0xf0, 0x41, 0x04,
-    0x91, 0x78, 0x98, 0x24, 0x88, 0xc3, 0x43, 0x7c, 0x3c, 0x21, 0xac, 0x5f,
-    0xf6, 0xd3, 0xdf, 0x1c, 0xb0, 0x0b, 0x17, 0xcd, 0x07, 0x02, 0xc5, 0xf9,
-    0xcd, 0xf6, 0x6e, 0xb1, 0x5b, 0xa2, 0xa3, 0x44, 0x5f, 0x3a, 0x22, 0x2b,
-    0xf6, 0x6c, 0x7c, 0x3a, 0xc5, 0xfd, 0x3b, 0x0f, 0xf3, 0xc5, 0x8b, 0xfd,
-    0x39, 0xbe, 0x74, 0x71, 0xac, 0x5f, 0xc2, 0xd8, 0x3f, 0x3c, 0x16, 0x2d,
-    0x9b, 0xa2, 0x54, 0x8b, 0xf8, 0x6b, 0x51, 0xad, 0x52, 0xe8, 0xd5, 0x72,
-    0x1b, 0x04, 0x7b, 0x1d, 0x0b, 0xeb, 0xfb, 0xf9, 0xd3, 0x3d, 0xc5, 0x8a,
-    0x1a, 0xbd, 0x2d, 0xe1, 0x72, 0x09, 0x51, 0x9e, 0x5d, 0xa8, 0x2f, 0xea,
-    0x0c, 0xcb, 0x51, 0xb6, 0xfe, 0x3d, 0x02, 0x9c, 0x19, 0xbf, 0xde, 0x86,
-    0x7f, 0xed, 0x05, 0x8b, 0x69, 0x62, 0xe7, 0x1a, 0xc5, 0x1a, 0x6a, 0x7e,
-    0x25, 0x7e, 0x8b, 0x5a, 0x7d, 0x96, 0x2f, 0x7a, 0x4e, 0xb1, 0x7c, 0x5f,
-    0xc2, 0x58, 0xb6, 0x96, 0x2b, 0x0d, 0x9b, 0x90, 0xdf, 0x3b, 0x10, 0xd6,
-    0x2f, 0xcf, 0xb0, 0x59, 0xf5, 0x8b, 0x84, 0x05, 0x8b, 0xf7, 0xf1, 0xf5,
-    0x05, 0x8a, 0x1a, 0x22, 0xf0, 0x84, 0x05, 0x5e, 0x18, 0xbf, 0xfb, 0xd3,
-    0xa6, 0x83, 0x77, 0x00, 0xce, 0xb1, 0x7e, 0x91, 0xc6, 0xfd, 0x6f, 0x58,
-    0xb1, 0x7f, 0x7b, 0xbd, 0xdf, 0x02, 0xc3, 0xff, 0x0d, 0x1e, 0xfb, 0x22,
-    0x7d, 0x2c, 0x5f, 0x8b, 0x06, 0xd0, 0x58, 0xa9, 0x3c, 0xa8, 0x11, 0xd6,
-    0xc9, 0xb6, 0xea, 0x17, 0x65, 0x09, 0x1b, 0x79, 0x62, 0xee, 0xb3, 0xac,
-    0x58, 0xad, 0x8d, 0xa0, 0x84, 0xaa, 0x59, 0x90, 0xd9, 0x48, 0x84, 0x35,
-    0x83, 0x75, 0xd7, 0x22, 0xd1, 0x5f, 0xd4, 0x1a, 0x50, 0xb9, 0x37, 0xdf,
-    0xff, 0x37, 0x49, 0xfb, 0x7f, 0x79, 0xf7, 0x26, 0x0b, 0x17, 0xd1, 0xdf,
-    0xcd, 0xd6, 0x2f, 0xfd, 0xee, 0x7c, 0x3d, 0x39, 0x49, 0xd6, 0x2f, 0x80,
-    0xe5, 0xe5, 0x8a, 0xd9, 0x11, 0x24, 0x4f, 0xc4, 0x0b, 0xba, 0xeb, 0xd6,
-    0x2c, 0x5e, 0x13, 0x0d, 0x62, 0xfb, 0xd2, 0x17, 0x16, 0x2f, 0x72, 0x7c,
-    0xb1, 0x70, 0x02, 0x58, 0xbf, 0x70, 0x44, 0x19, 0xd6, 0x2d, 0xc8, 0xd9,
-    0x10, 0x91, 0x12, 0x30, 0xef, 0x86, 0x6a, 0x0a, 0x86, 0x72, 0x1b, 0x7d,
-    0x98, 0x7c, 0x97, 0xd0, 0xa1, 0xbf, 0xfd, 0x3a, 0x96, 0x88, 0xec, 0x3f,
-    0xc9, 0x2c, 0x5f, 0xfb, 0xed, 0x0c, 0xd0, 0x0e, 0xfc, 0x58, 0xa3, 0x51,
-    0x11, 0xe4, 0x9b, 0xf6, 0x05, 0x9a, 0xd9, 0x62, 0xfd, 0xbc, 0xfe, 0x4e,
-    0xb1, 0x73, 0x0d, 0x62, 0xe6, 0xf2, 0xc5, 0xf4, 0x7b, 0x10, 0x36, 0x44,
-    0x0e, 0x15, 0x1c, 0xa4, 0x85, 0xef, 0xf6, 0x1a, 0x6b, 0x42, 0x03, 0x58,
-    0xbf, 0x99, 0x87, 0xe1, 0x32, 0xc5, 0xf0, 0xd8, 0x81, 0x87, 0xc6, 0x46,
-    0xd5, 0x29, 0xc9, 0xe4, 0x29, 0x45, 0x0b, 0x8b, 0xfe, 0x19, 0xdf, 0x5c,
-    0x62, 0x02, 0xc5, 0xba, 0xc5, 0x8b, 0xfe, 0xfc, 0xc2, 0x0f, 0xcc, 0x1a,
-    0xc5, 0x81, 0xd7, 0x0f, 0x43, 0xc2, 0xf7, 0xf8, 0xed, 0xdc, 0xea, 0x26,
-    0x58, 0xbf, 0xda, 0x9e, 0x9e, 0x26, 0x02, 0xc5, 0xbd, 0x27, 0xd5, 0x86,
-    0xb5, 0x28, 0xbe, 0x78, 0x4c, 0x5f, 0xfd, 0x27, 0xc7, 0x89, 0x9a, 0x1b,
-    0xc1, 0x62, 0xa0, 0x7d, 0x64, 0x4d, 0x7f, 0xf6, 0x85, 0xb1, 0x99, 0xf9,
-    0xe7, 0xdd, 0x62, 0xfb, 0xa8, 0x51, 0x1d, 0x62, 0x9d, 0x52, 0x14, 0x51,
-    0xd9, 0x68, 0x87, 0xe8, 0xf7, 0xff, 0xef, 0xcf, 0x3c, 0x53, 0x11, 0x48,
-    0xf3, 0xbf, 0x2c, 0x5f, 0x0f, 0xf3, 0xb2, 0xc5, 0xfb, 0x43, 0x18, 0xb6,
-    0x58, 0xb8, 0xa0, 0x34, 0x52, 0x92, 0xb0, 0x64, 0x97, 0xff, 0xb7, 0x1e,
-    0x16, 0x0d, 0xf9, 0xf6, 0x82, 0xc5, 0x4a, 0x21, 0x5c, 0xee, 0xfd, 0x9a,
-    0x8e, 0x38, 0xd6, 0x2f, 0xfd, 0xdf, 0x8d, 0x35, 0xbe, 0x42, 0xf2, 0xc5,
-    0x0c, 0xfb, 0xf0, 0xb2, 0xff, 0x19, 0xa9, 0x3b, 0xfe, 0x56, 0x2f, 0x7d,
-    0xe2, 0x48, 0xad, 0x1f, 0x99, 0x10, 0xf0, 0xd2, 0xff, 0x9b, 0xbf, 0x64,
-    0x42, 0xd1, 0xab, 0x16, 0xdd, 0xcf, 0xac, 0x45, 0xd7, 0xf8, 0xb3, 0xb8,
-    0x71, 0xcd, 0x58, 0xbc, 0xfb, 0xca, 0xc5, 0xf9, 0xf5, 0xb0, 0xb8, 0xb1,
-    0x73, 0xe9, 0x62, 0xb4, 0x7b, 0xc7, 0x1d, 0xf1, 0x55, 0xc1, 0xe9, 0x62,
-    0xf6, 0x85, 0xb2, 0xc5, 0xe6, 0xd1, 0xab, 0x16, 0x3a, 0xc5, 0x62, 0x25,
-    0xcd, 0x2f, 0xd0, 0xcb, 0x0f, 0xf4, 0x1e, 0xbf, 0xf0, 0xff, 0x3c, 0xcd,
-    0x6d, 0x30, 0x58, 0xbd, 0x33, 0x1e, 0xb1, 0x78, 0xd1, 0x6e, 0xb1, 0x63,
-    0x56, 0x2f, 0xfe, 0xcd, 0xff, 0x3f, 0xcd, 0x6a, 0x4d, 0x58, 0xb8, 0x1c,
-    0x93, 0xd9, 0xd0, 0x9d, 0x1a, 0x8a, 0x67, 0x79, 0xa3, 0x15, 0x4e, 0xed,
-    0x19, 0x54, 0x49, 0x7a, 0x40, 0x28, 0x62, 0xdf, 0xec, 0xdc, 0x13, 0x9d,
-    0xc1, 0x62, 0xda, 0x58, 0xac, 0x3c, 0x73, 0x9a, 0xdf, 0xf8, 0x5c, 0xc2,
-    0x9f, 0x8c, 0x33, 0xac, 0x5f, 0xed, 0x48, 0x58, 0x4e, 0x6a, 0xc5, 0xce,
-    0x35, 0x8b, 0xfd, 0xed, 0x0b, 0x9f, 0x68, 0x68, 0xf2, 0xc0, 0x69, 0x7f,
-    0xb8, 0x20, 0x37, 0xa0, 0xcb, 0x17, 0x1f, 0xa2, 0x45, 0xa4, 0xc3, 0xce,
-    0x63, 0x4b, 0xe1, 0xc9, 0x6e, 0xb1, 0x7d, 0xd7, 0xfd, 0xe0, 0xb1, 0x4b,
-    0x16, 0xc3, 0x0d, 0xa4, 0x6c, 0x51, 0x7f, 0xff, 0x63, 0xf7, 0x09, 0x3c,
-    0xe7, 0xb9, 0x82, 0x2f, 0x2c, 0x56, 0x91, 0x0d, 0xd0, 0xb2, 0xff, 0x9c,
-    0xd0, 0xca, 0x7e, 0xfb, 0x2c, 0x5f, 0xff, 0x36, 0xb3, 0xa6, 0x0c, 0x29,
-    0xe6, 0xef, 0x1e, 0xb1, 0x7f, 0xf7, 0xdd, 0x80, 0x09, 0x04, 0xff, 0x8b,
-    0x17, 0xf7, 0xf0, 0xe7, 0x68, 0x2c, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xf1,
-    0x7b, 0xef, 0x25, 0xb2, 0x44, 0x61, 0xa1, 0xbf, 0x4f, 0x04, 0x19, 0xd6,
-    0x2f, 0xa7, 0x4d, 0xf5, 0x8a, 0x82, 0x38, 0x71, 0x3f, 0x74, 0x6f, 0x15,
-    0x5c, 0xe0, 0x58, 0xbf, 0xa4, 0x63, 0xce, 0xe0, 0xb1, 0x7f, 0x3e, 0xa0,
-    0x1c, 0x81, 0x62, 0xe9, 0x06, 0x22, 0xcb, 0xe7, 0xa4, 0x2f, 0x1c, 0x5f,
-    0x58, 0xab, 0x5b, 0x72, 0x50, 0x1d, 0xf9, 0x58, 0x38, 0xf5, 0xef, 0xed,
-    0x40, 0x38, 0x3e, 0xcb, 0x17, 0x98, 0x1c, 0x58, 0xbb, 0x0c, 0xc3, 0xce,
-    0xf1, 0x8d, 0x6e, 0xb9, 0x50, 0xe4, 0xe7, 0x97, 0x67, 0xd2, 0x14, 0x37,
-    0xfc, 0xc0, 0x2c, 0x8a, 0x13, 0xda, 0xc5, 0xff, 0xa7, 0xbf, 0xe7, 0x60,
-    0xcf, 0x71, 0x62, 0xa5, 0x78, 0x2b, 0x27, 0x50, 0x5d, 0x38, 0x47, 0x57,
-    0xef, 0xb8, 0xda, 0x0b, 0x17, 0xec, 0xd6, 0x9e, 0x25, 0x8b, 0x98, 0xb7,
-    0x3d, 0x12, 0x28, 0xbf, 0xe7, 0x04, 0x6d, 0xcc, 0xd3, 0x01, 0x62, 0xf6,
-    0x16, 0xeb, 0x17, 0xfb, 0x8d, 0xfe, 0xe1, 0x9e, 0x58, 0xbf, 0x07, 0xa2,
-    0x14, 0x16, 0x2a, 0x07, 0xbe, 0x46, 0xb7, 0xee, 0x1d, 0xf5, 0xc5, 0x8a,
-    0xd9, 0x33, 0x0d, 0x16, 0x1c, 0xf9, 0x9f, 0x00, 0x43, 0x7f, 0xff, 0x43,
-    0xed, 0x0d, 0xfe, 0xfe, 0x86, 0x7f, 0xed, 0x05, 0x8b, 0xf4, 0x82, 0x7f,
-    0xc5, 0x8a, 0xc4, 0x42, 0x81, 0x76, 0xff, 0xe0, 0xca, 0x5c, 0x7f, 0xc8,
-    0x7d, 0xd6, 0x2e, 0x0f, 0x16, 0x2f, 0xfa, 0x74, 0x0f, 0x7d, 0x86, 0xeb,
-    0x15, 0x87, 0xa2, 0x18, 0xc5, 0xff, 0x42, 0x28, 0x37, 0xb8, 0xf2, 0xb1,
-    0x7f, 0xfe, 0xfb, 0x94, 0x9f, 0x09, 0xbb, 0xe1, 0xa6, 0xb2, 0xc5, 0xff,
-    0xef, 0x0a, 0x5e, 0x7b, 0xdf, 0xf9, 0xdf, 0x16, 0x2b, 0x11, 0x46, 0xca,
-    0xd7, 0xed, 0x69, 0xfd, 0xc5, 0x8a, 0x31, 0x3d, 0xe1, 0xc2, 0x57, 0xb2,
-    0x20, 0x43, 0x74, 0x32, 0x1b, 0xff, 0xe0, 0x47, 0x64, 0xf3, 0xf3, 0xdf,
-    0x8d, 0x16, 0x96, 0x2f, 0xfe, 0x8a, 0x02, 0x2f, 0x43, 0x35, 0x9c, 0x58,
-    0xbf, 0xff, 0x16, 0xff, 0x78, 0xa1, 0x25, 0xed, 0x6a, 0x60, 0xb1, 0xc3,
-    0xc6, 0xbf, 0xff, 0x9f, 0x9a, 0x76, 0xd4, 0xbf, 0xbf, 0x9c, 0xe6, 0x2c,
-    0x5f, 0xfb, 0x53, 0x07, 0xf0, 0x32, 0x2e, 0x2c, 0x5f, 0xec, 0x98, 0x3f,
-    0x8a, 0x56, 0x2c, 0x0c, 0x4c, 0xc8, 0xed, 0x1c, 0x59, 0x8e, 0x40, 0xbf,
-    0x9a, 0x0d, 0x07, 0xfa, 0xc5, 0x4a, 0xa9, 0x9c, 0x58, 0x68, 0xf3, 0x84,
-    0x8d, 0x7f, 0xff, 0x30, 0x0b, 0x0e, 0x4d, 0xee, 0x07, 0xa7, 0x91, 0xac,
-    0x5d, 0x0e, 0x2c, 0x5a, 0x03, 0x3f, 0x27, 0x5a, 0xbf, 0xfc, 0x4d, 0xa3,
-    0x7a, 0xbd, 0xa1, 0x77, 0x0e, 0x2c, 0x54, 0x9f, 0xc3, 0x93, 0xdf, 0xf8,
-    0x3d, 0xf7, 0x63, 0x5f, 0x69, 0x09, 0x62, 0xff, 0x87, 0xf9, 0xed, 0xb7,
-    0xe4, 0x16, 0x2b, 0xe8, 0x81, 0x64, 0x5a, 0x96, 0xec, 0x0a, 0x12, 0x9c,
-    0x72, 0x53, 0xd9, 0xb1, 0xb7, 0xf7, 0x1b, 0x73, 0xca, 0xc5, 0x8a, 0x14,
-    0x1a, 0x21, 0xfc, 0xf4, 0xab, 0x47, 0x8c, 0x08, 0x68, 0x14, 0xe4, 0xcf,
-    0x23, 0x2c, 0x14, 0x28, 0x6f, 0xff, 0xef, 0x39, 0xf0, 0xbd, 0xc9, 0x37,
-    0x82, 0x1f, 0xdd, 0x62, 0xec, 0xed, 0x62, 0xf9, 0x98, 0x1c, 0x58, 0xbf,
-    0x37, 0x82, 0xcf, 0xac, 0x5e, 0x1f, 0xf1, 0x62, 0xfb, 0x1f, 0xe6, 0xac,
-    0x51, 0xa8, 0x8b, 0xf9, 0x13, 0x14, 0x80, 0x76, 0xfe, 0x9d, 0xb4, 0x29,
-    0x02, 0xc5, 0xff, 0xf6, 0x6f, 0x24, 0xde, 0xe0, 0xc4, 0xda, 0x82, 0xc5,
-    0x6c, 0x9a, 0xff, 0x70, 0xa3, 0x88, 0xf4, 0xe5, 0xf7, 0xdc, 0xfe, 0x71,
-    0x62, 0xf9, 0xfd, 0x3e, 0x58, 0xbf, 0xfe, 0x04, 0xc1, 0xb4, 0xde, 0x7e,
-    0x9f, 0x9e, 0x2c, 0x53, 0xa2, 0x5b, 0x44, 0x6c, 0x45, 0x7c, 0xe0, 0xc1,
-    0xac, 0x5f, 0x8b, 0x78, 0xdf, 0xae, 0x46, 0x8b, 0x17, 0xfd, 0x1d, 0x9b,
-    0xfd, 0xcf, 0x3b, 0xac, 0x54, 0x9f, 0xc3, 0x1d, 0x5a, 0x56, 0x2f, 0x79,
-    0xf6, 0x58, 0xad, 0x8d, 0x7f, 0x62, 0x37, 0xc7, 0xd4, 0xf4, 0x58, 0xbf,
-    0xfc, 0xc7, 0x9e, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x15, 0x27, 0xe1, 0xf2,
-    0x5b, 0xff, 0xde, 0x70, 0xb8, 0x53, 0xee, 0x6b, 0x52, 0xb1, 0x74, 0x92,
-    0xc5, 0xc7, 0x8e, 0x58, 0xbc, 0xc5, 0xba, 0xc5, 0x61, 0xb8, 0xf8, 0xdd,
-    0xf6, 0x10, 0x7e, 0x58, 0xa8, 0x22, 0x44, 0x69, 0xda, 0x20, 0xbc, 0x39,
-    0x35, 0x62, 0xff, 0xe9, 0xdf, 0xc5, 0x21, 0x67, 0xb9, 0xc5, 0x8b, 0xfe,
-    0x69, 0x0d, 0xff, 0xf7, 0x89, 0x62, 0xff, 0xff, 0xd2, 0xff, 0x78, 0x14,
-    0xee, 0x66, 0x7a, 0x4e, 0xfe, 0xd0, 0x96, 0x2f, 0xfb, 0x99, 0xc7, 0x3b,
-    0x10, 0x16, 0x2f, 0xe2, 0x98, 0x7f, 0x80, 0x58, 0xbf, 0xf3, 0x7f, 0x53,
-    0xe7, 0xdd, 0xc6, 0xb1, 0x7f, 0xfe, 0x21, 0x67, 0xcc, 0xcf, 0x49, 0xdf,
-    0xda, 0x12, 0xc5, 0xff, 0xf1, 0x0b, 0xdc, 0xcd, 0xfb, 0xf3, 0x31, 0xf8,
-    0xb1, 0x7f, 0xbf, 0x8f, 0xa8, 0x06, 0x75, 0x8a, 0xc4, 0x43, 0xf9, 0x4a,
-    0xc0, 0x58, 0xbf, 0xfd, 0x26, 0x7d, 0xb5, 0x3c, 0xd3, 0xcf, 0xd6, 0x2b,
-    0x0f, 0x73, 0xa8, 0x4a, 0xff, 0xfe, 0x26, 0x3e, 0x1c, 0xcc, 0xf4, 0x9d,
-    0xfd, 0xa1, 0x2c, 0x51, 0x8a, 0xba, 0xe5, 0xb0, 0x67, 0x1f, 0x2e, 0x63,
-    0xfe, 0x43, 0x77, 0xcf, 0xc1, 0x92, 0x53, 0xae, 0x00, 0xe8, 0x7b, 0xe8,
-    0xc0, 0x96, 0x4b, 0x7f, 0xde, 0x03, 0x0c, 0x4d, 0xa8, 0x2c, 0x5f, 0xcf,
-    0xac, 0x1b, 0x41, 0x62, 0x9c, 0xf9, 0xfc, 0x75, 0x7f, 0x8f, 0x91, 0x49,
-    0xf0, 0x25, 0x8b, 0xc4, 0xfd, 0x7a, 0xc5, 0xf1, 0xe5, 0xf8, 0xb1, 0x58,
-    0x7f, 0x0e, 0x6b, 0xc2, 0x1b, 0xff, 0xed, 0x42, 0x4b, 0x39, 0x38, 0x43,
-    0xfc, 0xac, 0x5f, 0xe7, 0xd0, 0x7e, 0xf3, 0xec, 0xb1, 0x7d, 0xa9, 0xce,
-    0xd6, 0x2a, 0x07, 0xb3, 0xe3, 0x6b, 0xe9, 0xf3, 0xf9, 0x62, 0xff, 0xff,
-    0xcc, 0x79, 0xd6, 0xe3, 0xfc, 0xf0, 0x4c, 0xf0, 0xe7, 0xda, 0x0b, 0x17,
-    0xe0, 0x09, 0x8b, 0x75, 0x8b, 0xfa, 0x7f, 0x90, 0xc3, 0xac, 0x5f, 0x72,
-    0x60, 0x66, 0x1e, 0xb7, 0x8a, 0x6b, 0x13, 0xe6, 0x78, 0x53, 0x7c, 0x88,
-    0x88, 0xb9, 0x0c, 0x3b, 0xfb, 0x1e, 0x2f, 0x88, 0xeb, 0x17, 0xe0, 0x9b,
-    0xf2, 0x75, 0x8b, 0xdb, 0xcf, 0x16, 0x2f, 0xa0, 0x3c, 0x25, 0x8b, 0xff,
-    0x83, 0x86, 0x7d, 0xbe, 0xfa, 0xd4, 0xac, 0x5f, 0xfb, 0x8d, 0xe8, 0x66,
-    0xb4, 0xd0, 0x58, 0xbf, 0xef, 0xb3, 0xfa, 0x7c, 0xf0, 0x58, 0xa9, 0x3f,
-    0x7d, 0xcf, 0xea, 0x53, 0x47, 0xc2, 0x96, 0x1e, 0x01, 0x10, 0xa1, 0x79,
-    0x7a, 0x18, 0x35, 0x8b, 0xe8, 0x31, 0x01, 0x62, 0xff, 0xf3, 0xf8, 0x5a,
-    0x6e, 0x41, 0xf9, 0x3b, 0x2c, 0x56, 0x1f, 0x6b, 0x11, 0x56, 0x22, 0xab,
-    0xf0, 0x8a, 0xbd, 0xce, 0x98, 0xb1, 0x74, 0xe9, 0x62, 0xbc, 0x6d, 0xa3,
-    0x87, 0xef, 0xee, 0x92, 0x5b, 0xc7, 0x62, 0xc5, 0xfd, 0x9b, 0x72, 0x3d,
-    0xf7, 0x58, 0xa9, 0x44, 0x53, 0x92, 0x11, 0x9d, 0xf8, 0x5a, 0x37, 0xee,
-    0xb1, 0x78, 0x07, 0x75, 0x8a, 0x31, 0xb0, 0xe2, 0x98, 0xee, 0xf6, 0x86,
-    0xe4, 0x0b, 0x87, 0x09, 0xac, 0x4f, 0xde, 0x12, 0x7d, 0x90, 0xbc, 0x37,
-    0x35, 0x38, 0x62, 0x78, 0x56, 0xfe, 0x13, 0x2d, 0x28, 0x4c, 0x0a, 0x45,
-    0x1b, 0xb7, 0x21, 0xef, 0xe8, 0x73, 0xc7, 0x16, 0x86, 0x55, 0x60, 0x96,
-    0x2f, 0xf8, 0x84, 0xc6, 0x80, 0xf3, 0x05, 0x8a, 0xd1, 0xe6, 0x80, 0x4e,
-    0xe1, 0x01, 0x62, 0xff, 0x13, 0x05, 0x84, 0xc6, 0xac, 0x5f, 0xfe, 0xfb,
-    0xeb, 0xed, 0x91, 0x49, 0xf0, 0x25, 0x8b, 0xfd, 0xed, 0x4e, 0x76, 0x19,
-    0xd6, 0x2f, 0xfe, 0xcf, 0x70, 0x3e, 0x1c, 0xa7, 0x52, 0xb1, 0x7f, 0xfb,
-    0x99, 0xb7, 0xe4, 0xe1, 0x8c, 0x9f, 0x65, 0x8b, 0x16, 0xc9, 0xaf, 0x0c,
-    0x63, 0x0c, 0xfb, 0x4b, 0x39, 0xb7, 0x91, 0x6f, 0xfc, 0xde, 0xdf, 0xef,
-    0xdf, 0x24, 0x25, 0x8b, 0x74, 0xc4, 0x50, 0x7d, 0x7a, 0xf8, 0x7a, 0x68,
-    0x96, 0x2f, 0xfa, 0x7d, 0xf7, 0xe9, 0x9d, 0xf9, 0x62, 0xfc, 0xfd, 0x43,
-    0xc3, 0xac, 0x56, 0xe7, 0xcf, 0xf3, 0xcb, 0xe1, 0xc9, 0x79, 0x62, 0xfc,
-    0xed, 0xd0, 0x33, 0xac, 0x5f, 0xfe, 0xc3, 0x9e, 0x4b, 0x79, 0xf7, 0x3e,
-    0xeb, 0x17, 0xfe, 0x9d, 0x13, 0x6d, 0x3a, 0x98, 0x2c, 0x5d, 0x03, 0xac,
-    0x54, 0xa7, 0x37, 0x90, 0x8b, 0x72, 0x30, 0x11, 0x11, 0x58, 0x49, 0x41,
-    0x9f, 0x5f, 0xe8, 0x06, 0x7c, 0x2c, 0x8f, 0x58, 0xa7, 0x54, 0xc9, 0xf8,
-    0xf1, 0x49, 0xa2, 0xff, 0xff, 0x7d, 0xc2, 0xce, 0xa7, 0x3b, 0x7b, 0x82,
-    0x86, 0x77, 0xe5, 0x8b, 0xff, 0xef, 0xcf, 0x3b, 0xdd, 0xfb, 0xce, 0x67,
-    0x7e, 0x58, 0xbf, 0xf3, 0x80, 0x3f, 0xc9, 0xd9, 0xbc, 0xb1, 0x43, 0x44,
-    0x9e, 0x95, 0x2f, 0xff, 0xed, 0x87, 0xf9, 0xe6, 0x77, 0xc9, 0xd7, 0xb9,
-    0x9b, 0x2c, 0x50, 0xd3, 0x7b, 0xd4, 0x3e, 0x48, 0x8e, 0xe9, 0x75, 0x8a,
-    0x95, 0xe8, 0x0c, 0x9c, 0x84, 0x68, 0xec, 0x40, 0x6b, 0x7e, 0x7e, 0xf9,
-    0x3d, 0xac, 0x5f, 0xfc, 0x39, 0x2d, 0x83, 0x3f, 0x9f, 0xbe, 0x2c, 0x50,
-    0xcf, 0xcb, 0x85, 0x57, 0xfd, 0x16, 0xff, 0x73, 0xce, 0x8d, 0x58, 0xbf,
-    0x3f, 0x60, 0x6e, 0x2c, 0x5e, 0xf4, 0xc4, 0xb1, 0x79, 0xf5, 0x14, 0x9e,
-    0x3e, 0x14, 0xdf, 0xd3, 0xf9, 0xf4, 0xfd, 0x62, 0xfb, 0xa9, 0xcb, 0x75,
-    0x8a, 0xc3, 0xd3, 0xea, 0x2d, 0xbc, 0x29, 0x89, 0x62, 0xfe, 0x1c, 0xeb,
-    0x5a, 0x95, 0x8b, 0x6c, 0x61, 0xe6, 0x06, 0x3d, 0x73, 0x44, 0xb1, 0x68,
-    0x2c, 0x5f, 0xa1, 0xe7, 0xd6, 0xeb, 0x17, 0x83, 0x28, 0x96, 0x28, 0xc3,
-    0xf3, 0x80, 0xc7, 0x62, 0x40, 0x2a, 0xa9, 0x54, 0xef, 0x84, 0x5b, 0xc2,
-    0x13, 0x50, 0x85, 0x67, 0x0e, 0x42, 0x7a, 0x8c, 0x8d, 0x3f, 0x9a, 0x37,
-    0x34, 0x8d, 0x07, 0xa3, 0x50, 0xf4, 0xd3, 0x47, 0x36, 0xa4, 0xa8, 0xc2,
-    0xb0, 0x33, 0x1d, 0x3c, 0xd3, 0x2d, 0xef, 0xf1, 0xb1, 0xfc, 0xef, 0x39,
-    0xdb, 0xdc, 0x6b, 0x2f, 0x49, 0xde, 0x8f, 0x8e, 0xe6, 0x2a, 0x6c, 0x7e,
-    0xa9, 0x55, 0xc7, 0xa6, 0xce, 0x7e, 0xb8, 0xe0, 0x6a, 0x67, 0x80, 0x29,
-    0xa3, 0xa5, 0x69, 0x11, 0x79, 0x4f, 0x77, 0xf5, 0x7b, 0x54, 0x2a, 0xc7,
-    0xc0, 0x2a, 0x40, 0xc0, 0x72, 0xcd, 0x2e, 0x93, 0xac, 0x5f, 0xf1, 0xd8,
-    0x20, 0xe0, 0xe0, 0xe2, 0xc5, 0xef, 0xe7, 0x16, 0x2e, 0x0f, 0x75, 0x8b,
-    0xa4, 0xeb, 0x16, 0xf0, 0x0d, 0x8f, 0x86, 0xaf, 0xf3, 0x9b, 0xee, 0xf7,
-    0x7f, 0xac, 0x57, 0x67, 0xbc, 0x44, 0xf7, 0xd1, 0x7d, 0xf4, 0xb1, 0x43,
-    0x47, 0x96, 0x42, 0xb0, 0x32, 0x2b, 0xdd, 0x4f, 0xd1, 0x62, 0xff, 0x7d,
-    0xfd, 0xf7, 0x90, 0x2c, 0x5c, 0xda, 0x58, 0xb9, 0xfe, 0xb1, 0x7d, 0x98,
-    0x5e, 0x58, 0xba, 0x49, 0x62, 0xa0, 0x7c, 0xbf, 0x17, 0xe0, 0xbf, 0x42,
-    0x1b, 0xff, 0xec, 0x28, 0xcf, 0x1a, 0xfd, 0xf3, 0xf8, 0x06, 0x58, 0xbf,
-    0x8c, 0x8a, 0x13, 0xad, 0x96, 0x2f, 0xff, 0x87, 0x2d, 0xaf, 0x84, 0xc3,
-    0x8e, 0x6d, 0xa3, 0x96, 0x2a, 0x09, 0x8e, 0x0c, 0xfa, 0x25, 0x4f, 0x19,
-    0x5e, 0x66, 0x09, 0x62, 0xfd, 0xbe, 0x7b, 0xee, 0xb1, 0x43, 0x3c, 0x62,
-    0x1d, 0xbf, 0xfd, 0xa8, 0xa4, 0xe6, 0x1f, 0x3d, 0xc7, 0xe2, 0xc5, 0x31,
-    0xf7, 0x08, 0x86, 0xff, 0x43, 0xcf, 0xef, 0x60, 0x16, 0x2f, 0x7d, 0xfa,
-    0xf5, 0x8b, 0xf9, 0xa1, 0x83, 0x6f, 0xac, 0x56, 0xe7, 0x9e, 0x72, 0x2b,
-    0xee, 0xe1, 0x9e, 0x58, 0xbf, 0x40, 0xcc, 0x0f, 0x16, 0x2f, 0x9b, 0x81,
-    0x9d, 0x62, 0xff, 0xd2, 0x2e, 0xbe, 0x47, 0x27, 0x29, 0x58, 0xa3, 0x11,
-    0x69, 0x24, 0x90, 0x2a, 0x19, 0x25, 0xed, 0xdb, 0x75, 0x8b, 0xcf, 0xa9,
-    0x58, 0xbf, 0x40, 0x3e, 0x4e, 0x2c, 0x56, 0x1e, 0x2b, 0x0e, 0x5f, 0xff,
-    0x8e, 0x59, 0xdf, 0x82, 0xc7, 0xe9, 0xa6, 0x68, 0x2c, 0x5b, 0x9f, 0x3f,
-    0x86, 0x20, 0xbf, 0xfb, 0xcd, 0xb3, 0x16, 0xa7, 0x7c, 0xd2, 0xc5, 0xf7,
-    0xb8, 0xc7, 0x58, 0xa3, 0x0f, 0xa0, 0x24, 0x5b, 0xff, 0xfe, 0xcf, 0xb0,
-    0x7c, 0xc3, 0x58, 0x81, 0x25, 0x31, 0x7e, 0x56, 0x2d, 0x2b, 0x17, 0xff,
-    0xe9, 0xd7, 0xe4, 0xfd, 0x42, 0x92, 0x98, 0xbf, 0x2b, 0x17, 0xe7, 0xd4,
-    0x53, 0xfd, 0x23, 0x3c, 0x0c, 0xc4, 0x23, 0x70, 0xb4, 0xb1, 0x5b, 0x32,
-    0x29, 0xa1, 0x19, 0x76, 0x1a, 0xee, 0x45, 0xdc, 0x76, 0x87, 0x87, 0x9b,
-    0x10, 0x82, 0x10, 0x65, 0x0d, 0x7e, 0x1e, 0xfa, 0x1b, 0x82, 0x84, 0x78,
-    0x70, 0xf3, 0xea, 0x4c, 0xbf, 0xfd, 0xbf, 0xdf, 0xdc, 0x16, 0xda, 0xd4,
-    0xec, 0xb1, 0x7d, 0xf9, 0xdb, 0x16, 0x28, 0xc3, 0xf2, 0x89, 0x3e, 0xdf,
-    0x58, 0xbb, 0x0e, 0xb1, 0x50, 0x3c, 0xd1, 0x92, 0x47, 0x09, 0x5b, 0xae,
-    0xd6, 0x2f, 0xef, 0x7d, 0xa1, 0xed, 0x96, 0x2e, 0x8e, 0x25, 0x8b, 0xe8,
-    0x8a, 0x4e, 0xb1, 0x7b, 0xed, 0x03, 0x0d, 0xef, 0x86, 0xa8, 0x91, 0x41,
-    0xe6, 0xdb, 0x87, 0x8b, 0x17, 0xa2, 0x73, 0xac, 0x53, 0x9b, 0x5d, 0x0b,
-    0xdf, 0xc6, 0xe0, 0x88, 0x5b, 0xac, 0x5f, 0x09, 0xb5, 0x05, 0x8b, 0xff,
-    0xed, 0x00, 0xf3, 0x1d, 0x86, 0x73, 0xcc, 0xc4, 0xb1, 0x7c, 0x2d, 0x37,
-    0x16, 0x28, 0x68, 0x99, 0xc2, 0x3e, 0x29, 0xdf, 0xb7, 0xfc, 0xc7, 0x8d,
-    0x62, 0xfb, 0x38, 0xfd, 0x16, 0x2e, 0xd9, 0x96, 0x2f, 0x31, 0x00, 0xc4,
-    0x4c, 0x31, 0x79, 0x16, 0xf0, 0x92, 0xf1, 0x6d, 0x2b, 0x17, 0x61, 0x2c,
-    0x53, 0x9b, 0x3e, 0x83, 0xb7, 0xfd, 0xf6, 0x86, 0x0d, 0xa0, 0xeb, 0x17,
-    0xf8, 0xcf, 0xb6, 0xf2, 0x43, 0x58, 0xbe, 0xcd, 0x83, 0x82, 0xc5, 0xb9,
-    0x27, 0xb4, 0x46, 0xb7, 0x67, 0x16, 0x2e, 0xd4, 0xac, 0x57, 0xcd, 0x77,
-    0x85, 0xef, 0xf8, 0xa4, 0xee, 0x58, 0x79, 0x58, 0xba, 0x77, 0x58, 0xbf,
-    0xcf, 0xe6, 0x21, 0xfe, 0x56, 0x2f, 0xfb, 0x4f, 0x17, 0x30, 0xd7, 0xd2,
-    0xc5, 0x40, 0xfb, 0x74, 0x65, 0x7b, 0xef, 0x05, 0x8b, 0x9e, 0x56, 0x2f,
-    0xf9, 0xf6, 0xcf, 0xbe, 0xbe, 0xcb, 0x16, 0x1e, 0x26, 0xd5, 0x11, 0x08,
-    0x0d, 0xb9, 0x08, 0x5f, 0x11, 0x04, 0x3b, 0xd4, 0x2d, 0x7f, 0xff, 0x9a,
-    0x01, 0xeb, 0x3d, 0x9a, 0x01, 0xda, 0x1e, 0x6f, 0xac, 0x53, 0xa3, 0x58,
-    0x9d, 0x2f, 0xf3, 0x10, 0x22, 0x84, 0xc6, 0xa5, 0x8a, 0x35, 0x76, 0x0e,
-    0x3e, 0x36, 0x1d, 0x3f, 0xfc, 0x88, 0x10, 0x92, 0x29, 0x52, 0x9e, 0x21,
-    0xbf, 0x0e, 0x62, 0xf6, 0x2c, 0x5e, 0xf4, 0x9d, 0x62, 0x86, 0x78, 0xc4,
-    0x53, 0x7f, 0xf1, 0x7b, 0x9f, 0x68, 0x19, 0x9d, 0xf9, 0x62, 0xba, 0xe2,
-    0xfe, 0xec, 0xc2, 0xe6, 0x0a, 0xf9, 0x3b, 0x46, 0xf0, 0xc2, 0x11, 0x0d,
-    0xff, 0x61, 0xa5, 0x9e, 0xe3, 0xec, 0xb1, 0x7f, 0xa3, 0xe2, 0xe4, 0xfd,
-    0xa3, 0xd6, 0x2f, 0xf6, 0x6e, 0xc7, 0xc7, 0x1a, 0xc5, 0xfe, 0xcf, 0xf7,
-    0xbb, 0xe6, 0x96, 0x2f, 0xec, 0xd4, 0x1c, 0xb1, 0x62, 0x9c, 0xf8, 0x44,
-    0x6b, 0x74, 0xf7, 0xb2, 0x2d, 0x7d, 0x09, 0x4a, 0xd2, 0x6b, 0xec, 0x74,
-    0x50, 0xf0, 0xb7, 0x6b, 0x17, 0xef, 0xff, 0xb6, 0x8f, 0x58, 0xad, 0xcf,
-    0x00, 0x31, 0x3b, 0xfe, 0x0e, 0x62, 0x0e, 0x74, 0xd1, 0x2c, 0x5f, 0xb9,
-    0x99, 0xec, 0x58, 0xb9, 0xfc, 0xb1, 0x7c, 0xcd, 0x0e, 0x2c, 0x58, 0xd8,
-    0x1b, 0x9f, 0x0b, 0xde, 0x92, 0xd9, 0x62, 0xf9, 0xfe, 0xe7, 0x58, 0xa7,
-    0x37, 0xf1, 0x0e, 0xd7, 0x68, 0xe8, 0xd3, 0x07, 0xd9, 0xef, 0x73, 0xce,
-    0xb1, 0x74, 0x42, 0x58, 0xb6, 0xf2, 0x6d, 0x88, 0x76, 0xff, 0xed, 0xa7,
-    0xbf, 0x38, 0x51, 0x66, 0x6e, 0xb1, 0x52, 0x7d, 0xe2, 0x26, 0xb0, 0x16,
-    0x2f, 0xfa, 0x7d, 0xf6, 0x03, 0x77, 0xc5, 0x8a, 0x19, 0xf6, 0xf6, 0x42,
-    0x42, 0x57, 0xfb, 0x1c, 0xe2, 0x3b, 0xf1, 0x62, 0xff, 0xf7, 0x04, 0xda,
-    0x16, 0xd2, 0x68, 0x65, 0xe5, 0x8b, 0xf8, 0x50, 0xdd, 0xb5, 0xb2, 0xc5,
-    0xcc, 0x12, 0xc5, 0x49, 0xe4, 0xb1, 0x8d, 0x0d, 0x16, 0xfd, 0x21, 0x2f,
-    0x7f, 0x8a, 0x18, 0x4c, 0x39, 0x58, 0xbe, 0xdb, 0xcf, 0xb2, 0xc5, 0xa0,
-    0xe7, 0xac, 0x23, 0x1b, 0xff, 0xf8, 0x61, 0xb6, 0x8d, 0xc7, 0x29, 0x3e,
-    0x71, 0x89, 0x62, 0xd1, 0x2c, 0x59, 0x96, 0x2f, 0xc7, 0xfb, 0xb4, 0x16,
-    0x28, 0xc3, 0xcc, 0x8d, 0x04, 0xf0, 0x46, 0xd3, 0xb2, 0x36, 0x82, 0x85,
-    0x35, 0xff, 0xf0, 0x98, 0x6f, 0x27, 0x2c, 0xdb, 0x61, 0x12, 0xc5, 0x68,
-    0xff, 0xfc, 0x5f, 0x7f, 0xf6, 0x6c, 0xd1, 0x19, 0xf9, 0xe7, 0x19, 0x62,
-    0xff, 0xe1, 0x33, 0xc2, 0x4b, 0x7c, 0xef, 0xcb, 0x17, 0xc4, 0x26, 0xdc,
-    0xc4, 0x46, 0x71, 0x1e, 0xe3, 0xba, 0xc5, 0xfd, 0xf7, 0xdc, 0x5a, 0x02,
-    0xc5, 0xfb, 0xee, 0x0d, 0x4a, 0xc5, 0xff, 0xe2, 0xce, 0x93, 0xcf, 0xe6,
-    0x14, 0x38, 0xb1, 0x60, 0x18, 0x8a, 0x2c, 0x30, 0xe1, 0x45, 0xfd, 0xef,
-    0xb9, 0x85, 0xda, 0xc5, 0xee, 0xa9, 0x8f, 0x58, 0xad, 0x22, 0x24, 0x8d,
-    0xba, 0x8c, 0x2f, 0xb0, 0x72, 0x6a, 0xc5, 0xff, 0xbd, 0xf7, 0x1f, 0xe7,
-    0x5c, 0x75, 0x8b, 0x85, 0xba, 0xc5, 0x76, 0x7b, 0x1a, 0x3f, 0xb9, 0xbb,
-    0x58, 0xbb, 0xa4, 0xac, 0x5d, 0xd5, 0x12, 0xc5, 0xc2, 0xd2, 0xc5, 0xf7,
-    0xb8, 0xdd, 0x16, 0x2c, 0x05, 0x8a, 0x88, 0xf3, 0xc8, 0x63, 0xc4, 0xb7,
-    0xf6, 0x7a, 0x5b, 0x46, 0xac, 0x5e, 0xc7, 0xf2, 0xc5, 0xe0, 0x82, 0x09,
-    0x62, 0xf9, 0xf5, 0x9d, 0xac, 0x46, 0x1a, 0x1a, 0xf9, 0xf9, 0xb1, 0xed,
-    0x9d, 0x62, 0xef, 0x81, 0x62, 0x8d, 0x35, 0x21, 0x88, 0xd7, 0x5a, 0xaf,
-    0xae, 0x63, 0x42, 0x19, 0x96, 0x3d, 0xf6, 0x46, 0xe3, 0x11, 0xe3, 0x2c,
-    0xd6, 0x45, 0xfc, 0x85, 0x0c, 0x72, 0x55, 0xff, 0xe9, 0x81, 0x81, 0xf9,
-    0xc8, 0x50, 0xce, 0x2c, 0x5e, 0x83, 0x0d, 0x62, 0x88, 0xfa, 0x44, 0x99,
-    0x7f, 0x0a, 0x21, 0x78, 0x51, 0x2c, 0x5f, 0xb0, 0x8d, 0x7e, 0x2c, 0x50,
-    0x0f, 0x68, 0x46, 0x57, 0xff, 0xc2, 0xe1, 0xe7, 0xbd, 0xfe, 0xe7, 0x27,
-    0xd9, 0x62, 0xf4, 0xe6, 0xeb, 0x15, 0xf3, 0xf0, 0x25, 0x3b, 0xff, 0xff,
-    0x34, 0x79, 0x63, 0x91, 0x60, 0x33, 0xd2, 0x77, 0xf7, 0xdd, 0x62, 0xee,
-    0x04, 0xb1, 0x7e, 0x9e, 0x14, 0x9d, 0x62, 0xb7, 0x3c, 0x0f, 0x8c, 0xdf,
-    0xff, 0xff, 0xe6, 0xe3, 0x90, 0x3e, 0xff, 0x6f, 0x7d, 0xf5, 0x00, 0xca,
-    0x75, 0xa7, 0xef, 0x8e, 0xb1, 0x7f, 0xfb, 0x3d, 0xcd, 0x84, 0x3c, 0x0b,
-    0x0a, 0x56, 0x2b, 0xe8, 0xd9, 0x04, 0x23, 0xab, 0x66, 0x74, 0x50, 0xc9,
-    0x32, 0x32, 0x5d, 0xe3, 0x43, 0xec, 0xbd, 0xe1, 0xd5, 0x14, 0x20, 0x35,
-    0x1c, 0x01, 0xe1, 0x5d, 0xf9, 0xc2, 0x60, 0x46, 0x2a, 0x4f, 0x7c, 0x84,
-    0x90, 0x88, 0x7a, 0x42, 0xa8, 0x38, 0x7e, 0x5d, 0xc1, 0x2c, 0x5f, 0xef,
-    0x79, 0xf5, 0x9d, 0xf9, 0x62, 0xe8, 0x32, 0xc5, 0xce, 0x35, 0x8b, 0x9c,
-    0xe6, 0x1a, 0xed, 0xc5, 0xee, 0xc0, 0x2c, 0x56, 0x91, 0x51, 0xf6, 0x32,
-    0x2e, 0xb7, 0x96, 0x2d, 0xe5, 0x8b, 0x6a, 0x4d, 0x23, 0x89, 0x5e, 0x03,
-    0x1d, 0x62, 0xc0, 0x58, 0xb0, 0x16, 0x29, 0x62, 0xb0, 0xd8, 0x38, 0x90,
-    0x04, 0xaa, 0x4f, 0xe7, 0x13, 0x6f, 0x36, 0x1d, 0x62, 0xb6, 0x4f, 0xb7,
-    0x21, 0x81, 0xa5, 0x32, 0x84, 0xf7, 0x51, 0x05, 0xf8, 0x72, 0x2e, 0xbf,
-    0x8b, 0x17, 0xff, 0x30, 0x7f, 0x98, 0x73, 0x5a, 0xce, 0xd6, 0x2c, 0x50,
-    0x46, 0x60, 0xd5, 0xfe, 0x5d, 0x7d, 0x3f, 0x16, 0x96, 0x2f, 0xee, 0x16,
-    0x0c, 0x99, 0x62, 0x88, 0xf3, 0xc2, 0x23, 0xbf, 0x9f, 0x53, 0xdf, 0xa5,
-    0x62, 0xf8, 0xa7, 0xbe, 0x2c, 0x5d, 0xbb, 0xac, 0x5e, 0x6e, 0xf6, 0x58,
-    0xbe, 0x9d, 0xa7, 0xb5, 0x8a, 0x19, 0xe1, 0x90, 0xfd, 0xe6, 0x8e, 0x95,
-    0x8b, 0xf9, 0xb4, 0x71, 0x68, 0x0b, 0x17, 0x68, 0x0b, 0x15, 0x03, 0xc7,
-    0x72, 0xfb, 0xe7, 0xd8, 0x99, 0x62, 0xfb, 0x86, 0x79, 0xd6, 0x2d, 0xc9,
-    0x4e, 0x68, 0x65, 0xdb, 0x91, 0xba, 0xde, 0x88, 0x59, 0x9b, 0xc4, 0x21,
-    0x91, 0x5f, 0xda, 0x13, 0x06, 0xc3, 0x58, 0xa9, 0x55, 0xcc, 0xf0, 0x84,
-    0x68, 0xef, 0x03, 0x77, 0xbe, 0xe1, 0x4e, 0xcb, 0x17, 0xfd, 0xb3, 0x7d,
-    0x86, 0x4d, 0xba, 0xc5, 0x68, 0xf7, 0x48, 0x8e, 0xff, 0xf8, 0x2c, 0xdf,
-    0x99, 0xe8, 0xb0, 0xd2, 0xc0, 0x2c, 0x56, 0x1f, 0xa3, 0x90, 0xdf, 0xf1,
-    0x1b, 0xf6, 0x7f, 0x31, 0xd6, 0x2f, 0xcd, 0xb7, 0x33, 0x4b, 0x17, 0x8e,
-    0xfa, 0x58, 0xbf, 0xec, 0x0b, 0x35, 0xbb, 0x36, 0xea, 0x94, 0x38, 0xbf,
-    0xf4, 0x24, 0x1c, 0x9f, 0xbf, 0x70, 0x58, 0xbe, 0x7d, 0x67, 0x6b, 0x15,
-    0x87, 0xc7, 0x1c, 0x81, 0x7f, 0xf0, 0xb8, 0x3f, 0xb1, 0xfb, 0x83, 0x92,
-    0xc5, 0xfb, 0xdf, 0x62, 0x02, 0xc5, 0x18, 0x9a, 0xd6, 0xc3, 0xa6, 0xc2,
-    0xaf, 0xe4, 0x8c, 0x8d, 0x7f, 0xfd, 0x11, 0x48, 0xcc, 0x89, 0xa2, 0xdf,
-    0xf3, 0xb2, 0xc5, 0xce, 0x75, 0x8b, 0xfe, 0xf6, 0x44, 0xd2, 0x53, 0x12,
-    0xc5, 0x18, 0x8a, 0x68, 0x95, 0x98, 0x5e, 0xf7, 0xdf, 0xa2, 0xc5, 0xff,
-    0xe0, 0x34, 0x37, 0xfb, 0xf7, 0x09, 0xcf, 0x2c, 0x56, 0x1f, 0x58, 0x63,
-    0xf7, 0xf0, 0x79, 0x10, 0x53, 0xda, 0xc5, 0xdf, 0xc5, 0x8a, 0xc3, 0xc9,
-    0xdc, 0xca, 0xfd, 0x91, 0x14, 0x9d, 0x62, 0xdf, 0x73, 0xca, 0xf1, 0x15,
-    0x9f, 0x17, 0x0b, 0x0d, 0x39, 0xd4, 0x70, 0x7f, 0x87, 0xc1, 0x42, 0x73,
-    0x90, 0xb5, 0xbb, 0x7d, 0xd5, 0x28, 0x21, 0x50, 0x5c, 0xe6, 0xde, 0x71,
-    0x30, 0x0e, 0x77, 0xde, 0xe3, 0xf4, 0x58, 0xb4, 0xac, 0x58, 0xa4, 0xdb,
-    0x68, 0x96, 0xfe, 0xe0, 0xcb, 0x3f, 0xd6, 0xac, 0x5c, 0x1f, 0x52, 0xc5,
-    0x75, 0x87, 0x9e, 0x73, 0x3b, 0xb0, 0x96, 0x2e, 0xff, 0x16, 0x29, 0x62,
-    0xff, 0xe9, 0x2d, 0xf3, 0xdf, 0x7d, 0x03, 0x75, 0x8a, 0xc3, 0xea, 0x21,
-    0x8f, 0x06, 0x5f, 0xff, 0xf8, 0x40, 0xd6, 0xa7, 0x6f, 0x33, 0x1a, 0x1f,
-    0x27, 0xdf, 0x93, 0x56, 0x2f, 0x9f, 0x9f, 0x75, 0x8b, 0xd9, 0xdf, 0x96,
-    0x28, 0x67, 0x80, 0x72, 0x2b, 0xf9, 0xcb, 0x3d, 0xf7, 0x58, 0xb4, 0xe1,
-    0xe7, 0x70, 0x8a, 0x86, 0x9e, 0x96, 0x42, 0x03, 0xe5, 0xa2, 0x87, 0xfd,
-    0xf9, 0xa1, 0xf7, 0x02, 0xc5, 0xff, 0xd1, 0x40, 0x5b, 0x07, 0x9c, 0xf6,
-    0x6c, 0xb1, 0x7c, 0x28, 0x64, 0x72, 0xc5, 0xfe, 0xd3, 0x73, 0x5a, 0xc0,
-    0x96, 0x28, 0x68, 0xcd, 0xec, 0xa0, 0x92, 0xba, 0x13, 0x5f, 0xfe, 0xfb,
-    0xc5, 0xf7, 0xef, 0xc5, 0x9d, 0x19, 0x62, 0xf7, 0xe7, 0xcb, 0x17, 0x86,
-    0xd1, 0x2c, 0x5f, 0xf3, 0xf4, 0xfe, 0x6b, 0x4f, 0xd1, 0x62, 0xee, 0x41,
-    0x62, 0xa4, 0xfc, 0xfe, 0x3d, 0xe3, 0xdb, 0xff, 0xe1, 0x6b, 0x59, 0x03,
-    0x3a, 0xa1, 0xa9, 0x0b, 0xa9, 0x62, 0xef, 0x71, 0x62, 0xe9, 0x02, 0xc5,
-    0xff, 0x72, 0x4d, 0xe0, 0x87, 0xf7, 0x58, 0xa8, 0x8f, 0x4b, 0xc2, 0xf5,
-    0x88, 0x8d, 0x26, 0xab, 0xff, 0xb3, 0xbc, 0xf6, 0x14, 0x3e, 0xd0, 0x58,
-    0xac, 0x3e, 0x52, 0x21, 0xbf, 0x8f, 0xce, 0x31, 0x6c, 0xb1, 0x63, 0xac,
-    0x5f, 0x88, 0xb3, 0xb8, 0x2c, 0x51, 0xcd, 0xd0, 0x62, 0x57, 0xff, 0xb7,
-    0xfb, 0xec, 0x77, 0xd4, 0x33, 0xbf, 0x2c, 0x54, 0xa3, 0x65, 0x9a, 0x44,
-    0x45, 0x7f, 0xbd, 0x8e, 0x5e, 0xe6, 0x2c, 0x5f, 0xd9, 0xf7, 0xdf, 0xf8,
-    0xb1, 0x7e, 0x7f, 0xb3, 0xec, 0xb1, 0x74, 0xc7, 0xac, 0x5c, 0x0e, 0x40,
-    0xf0, 0x9c, 0xa2, 0xfb, 0x98, 0x5e, 0x58, 0xbd, 0xd5, 0x3a, 0x58, 0xa7,
-    0x3e, 0xf6, 0x2d, 0x11, 0x15, 0xc2, 0xe2, 0xc5, 0xcd, 0xe5, 0x8b, 0xfc,
-    0x0c, 0x1e, 0x7a, 0x46, 0xb1, 0x51, 0x1f, 0x17, 0xc6, 0x18, 0x5e, 0xf7,
-    0x9a, 0x3d, 0x62, 0xfa, 0x02, 0x60, 0xd6, 0x2f, 0xd9, 0xd0, 0xb3, 0x8b,
-    0x17, 0xdd, 0x3a, 0x4f, 0x16, 0x28, 0x8f, 0x40, 0x32, 0x9b, 0xfb, 0xef,
-    0x18, 0x06, 0x75, 0x8a, 0x24, 0x63, 0x71, 0xd3, 0xc4, 0x57, 0xf8, 0xdf,
-    0xcc, 0x04, 0xda, 0x58, 0xb1, 0x2c, 0x53, 0x9e, 0x30, 0x8d, 0x6a, 0x59,
-    0x51, 0x3b, 0x3a, 0x0e, 0x3f, 0x9c, 0x8c, 0x53, 0x73, 0xfe, 0xd3, 0x62,
-    0x84, 0x86, 0x8b, 0x8f, 0x1a, 0x67, 0xe1, 0xf2, 0xc5, 0xc0, 0x32, 0x28,
-    0x6f, 0xf2, 0x11, 0xfe, 0x2f, 0x14, 0x39, 0xa3, 0x9d, 0x6f, 0xb0, 0x63,
-    0x95, 0x8b, 0xb2, 0x3d, 0x62, 0xb0, 0xde, 0x44, 0x45, 0x7f, 0xfd, 0xdf,
-    0x05, 0x3d, 0x96, 0x6e, 0x58, 0x2d, 0x96, 0x2f, 0xc6, 0x81, 0xe2, 0xe2,
-    0xc5, 0xf7, 0xdd, 0xa0, 0xb1, 0x78, 0x6d, 0x05, 0x8a, 0x93, 0x7f, 0x84,
-    0x57, 0xfb, 0xed, 0x11, 0x9b, 0xc8, 0xd6, 0x2a, 0x51, 0x80, 0x06, 0xae,
-    0x0f, 0xd4, 0xa6, 0x84, 0x28, 0xc4, 0xef, 0xef, 0xcc, 0x3e, 0x21, 0xac,
-    0x5e, 0x00, 0x7d, 0xac, 0x5d, 0xbb, 0xac, 0x5d, 0x9d, 0x16, 0x2f, 0x78,
-    0xa0, 0xb1, 0x63, 0xe1, 0xf7, 0x70, 0x83, 0xc3, 0x1d, 0x06, 0x6f, 0xff,
-    0x18, 0x4d, 0xe9, 0xd0, 0xa1, 0xa9, 0x82, 0xc5, 0xfa, 0x7d, 0xf9, 0x89,
-    0x62, 0xef, 0x71, 0x62, 0xfc, 0xc6, 0x85, 0x3a, 0x58, 0xa8, 0x27, 0x2d,
-    0xbc, 0x27, 0x5d, 0x0f, 0xe9, 0x6c, 0x52, 0x43, 0x17, 0xf9, 0xcb, 0xd0,
-    0xcd, 0x62, 0xc5, 0xff, 0xcf, 0xb9, 0x61, 0xe6, 0x21, 0xce, 0xcb, 0x17,
-    0xff, 0x40, 0xb0, 0xec, 0x59, 0xf6, 0x3a, 0xc5, 0xfe, 0xcf, 0x4f, 0x47,
-    0x20, 0x2c, 0x5f, 0xff, 0x00, 0xed, 0x08, 0x60, 0x03, 0xf6, 0xdc, 0x12,
-    0xc5, 0x6e, 0x88, 0x8d, 0x1a, 0x5f, 0xf8, 0x01, 0xb6, 0xc1, 0x8c, 0xa7,
-    0xb5, 0x8b, 0xff, 0x67, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff, 0x07,
-    0xd9, 0x92, 0x64, 0x45, 0x27, 0x58, 0xbf, 0xda, 0x97, 0x19, 0x34, 0x16,
-    0x2f, 0xfd, 0xa7, 0x2d, 0xcb, 0x36, 0xc0, 0x96, 0x2f, 0xfb, 0x3a, 0x4e,
-    0x77, 0xdf, 0xba, 0xea, 0xb1, 0x7e, 0x9f, 0x73, 0x08, 0xc4, 0x5b, 0xe8,
-    0xcb, 0xe8, 0x14, 0x34, 0xd1, 0xc5, 0x0f, 0xbb, 0xf6, 0xff, 0xed, 0xa3,
-    0xd6, 0x2f, 0xf7, 0x26, 0x06, 0x9b, 0x91, 0xeb, 0x17, 0xfe, 0x19, 0x0b,
-    0xdc, 0x92, 0x9e, 0x2c, 0x54, 0x9f, 0xbb, 0x9c, 0xdb, 0xaf, 0x58, 0xa8,
-    0x2e, 0x1a, 0xee, 0x65, 0xda, 0x33, 0xc3, 0x2b, 0x44, 0x9f, 0x43, 0x28,
-    0xe1, 0xc4, 0x53, 0xd2, 0x14, 0xa1, 0x10, 0x5f, 0xe2, 0xc0, 0x71, 0x88,
-    0x0b, 0x17, 0xe8, 0x7e, 0x75, 0xb2, 0xc5, 0x39, 0xee, 0x31, 0x95, 0xef,
-    0xb9, 0xab, 0x17, 0x9b, 0x50, 0x58, 0xbe, 0x90, 0x7d, 0x96, 0x2b, 0x86,
-    0xff, 0xc3, 0xb7, 0xe8, 0xb0, 0xb0, 0x6b, 0x17, 0xfc, 0x53, 0x0f, 0xe6,
-    0x16, 0xeb, 0x17, 0xff, 0xfc, 0x3f, 0x7d, 0xb9, 0x9a, 0x6e, 0x99, 0xfc,
-    0xdb, 0x8d, 0xf5, 0x8b, 0x78, 0x68, 0xa1, 0x11, 0xc5, 0xff, 0xfc, 0x76,
-    0x28, 0x77, 0xe7, 0x0b, 0x7f, 0xb9, 0xe7, 0x75, 0x8a, 0x94, 0x44, 0x08,
-    0xa6, 0xff, 0xff, 0xfd, 0x3f, 0x93, 0xf8, 0x98, 0x1c, 0xfc, 0x97, 0xbf,
-    0x38, 0x06, 0x21, 0x62, 0xc5, 0xff, 0xf0, 0x00, 0x2e, 0x69, 0xb8, 0xfe,
-    0x26, 0x82, 0xc5, 0xff, 0xcc, 0x79, 0xd6, 0xa7, 0xbd, 0x4f, 0x45, 0x8a,
-    0xdd, 0x31, 0x6d, 0x3f, 0xf4, 0x50, 0xbf, 0xfc, 0xf3, 0xe2, 0xcf, 0x7f,
-    0x1e, 0x1d, 0x16, 0x2f, 0xfb, 0xbe, 0x01, 0x88, 0x71, 0x09, 0x62, 0xe2,
-    0x09, 0x62, 0xff, 0xec, 0xd8, 0x38, 0x0f, 0x3c, 0xff, 0x12, 0xc5, 0xfb,
-    0x59, 0xd3, 0x07, 0xa3, 0xdf, 0x21, 0x8a, 0x74, 0x6d, 0x34, 0x26, 0xef,
-    0xff, 0xc2, 0x28, 0x61, 0x79, 0xe3, 0xb3, 0xc4, 0xd0, 0x58, 0xbf, 0xd2,
-    0x09, 0xfe, 0x77, 0x05, 0x8a, 0x74, 0x45, 0x12, 0xb5, 0xff, 0xf7, 0xd8,
-    0xf1, 0x14, 0x9f, 0xb8, 0x7f, 0x36, 0x58, 0xac, 0x54, 0xf9, 0xf3, 0x40,
-    0x46, 0x49, 0xe8, 0x58, 0x08, 0x86, 0xfa, 0x26, 0x89, 0x96, 0x2f, 0x6d,
-    0x81, 0x2c, 0x5a, 0x0b, 0x16, 0xf1, 0x86, 0xc4, 0x43, 0xf6, 0x82, 0xc5,
-    0x31, 0xba, 0x11, 0x45, 0xd3, 0xc5, 0x8a, 0x31, 0x18, 0xc5, 0x08, 0xff,
-    0x10, 0x5f, 0xf7, 0xd8, 0xb2, 0x28, 0x4f, 0x6b, 0x17, 0xff, 0x7d, 0xf5,
-    0x9c, 0x2c, 0xe9, 0xf7, 0x58, 0xbf, 0x16, 0x70, 0x46, 0x61, 0xff, 0xc4,
-    0x75, 0x7f, 0xa4, 0x03, 0xfc, 0x96, 0xeb, 0x17, 0xed, 0x6e, 0xcd, 0xba,
-    0xa4, 0x06, 0x2f, 0xe6, 0xd8, 0x0c, 0x43, 0x44, 0x20, 0xf2, 0xf6, 0x70,
-    0x43, 0x45, 0x3e, 0x1a, 0x47, 0x1b, 0xde, 0xfb, 0x40, 0xc4, 0xca, 0x4a,
-    0x1c, 0xd7, 0xfd, 0xf7, 0xc2, 0xcd, 0xc7, 0x8b, 0x14, 0x36, 0x48, 0x76,
-    0xe4, 0x0e, 0xbb, 0x11, 0x0e, 0xa3, 0x51, 0x3c, 0xbb, 0x42, 0x8c, 0x73,
-    0xd1, 0xee, 0xf4, 0x3a, 0xbf, 0xc0, 0x21, 0x37, 0x71, 0xb7, 0x5a, 0xb1,
-    0x7b, 0xc2, 0x95, 0x8b, 0xff, 0xdf, 0x7f, 0x66, 0x1f, 0x93, 0x83, 0x75,
-    0x8b, 0xb9, 0xc5, 0x8b, 0xe1, 0xfd, 0x8e, 0xb1, 0x7f, 0xd9, 0xb0, 0x70,
-    0x79, 0xef, 0xcb, 0x16, 0x06, 0xe8, 0xbf, 0xd2, 0x43, 0x0c, 0x11, 0x1d,
-    0xff, 0xfe, 0x16, 0xb6, 0x0f, 0x76, 0xd3, 0x41, 0xcd, 0x36, 0x4b, 0xcb,
-    0x17, 0xe7, 0xd8, 0xf3, 0xba, 0xc5, 0x81, 0x88, 0x90, 0xf3, 0x35, 0xf6,
-    0xb4, 0x23, 0x56, 0x2a, 0x55, 0x1d, 0x76, 0x7e, 0xd0, 0xdc, 0x28, 0x69,
-    0x06, 0x51, 0x7e, 0x1c, 0x68, 0xc3, 0x8d, 0x16, 0x2f, 0xed, 0xfb, 0xff,
-    0x6d, 0x1e, 0xb1, 0x7f, 0xbf, 0x3a, 0xcc, 0x23, 0x56, 0x2f, 0x68, 0x38,
-    0x96, 0x2d, 0x90, 0x3d, 0x37, 0x33, 0xbf, 0x36, 0xbd, 0x9b, 0xac, 0x5f,
-    0x0d, 0xe7, 0x65, 0x8b, 0x4e, 0x8f, 0x30, 0x45, 0x37, 0xfb, 0x33, 0xb0,
-    0x31, 0x79, 0x62, 0xfe, 0x1f, 0xe4, 0xe5, 0x2b, 0x17, 0xe9, 0xc1, 0xb9,
-    0x2c, 0x5e, 0x2c, 0xe2, 0xc5, 0xce, 0x33, 0x11, 0x45, 0xc3, 0x31, 0x16,
-    0xf4, 0x26, 0xb4, 0x20, 0x98, 0xa7, 0x21, 0x93, 0x52, 0xa8, 0xf7, 0xb8,
-    0x44, 0x34, 0x70, 0xd5, 0x2c, 0xfe, 0x3c, 0xa5, 0x05, 0xbc, 0xad, 0x76,
-    0x55, 0x14, 0xa7, 0x0b, 0x9e, 0x0b, 0x17, 0xb4, 0xfe, 0x58, 0xbf, 0x78,
-    0x79, 0x86, 0xac, 0x50, 0xcf, 0x1b, 0xb1, 0xdb, 0xfb, 0xef, 0xee, 0x67,
-    0x96, 0x2f, 0xe2, 0xd4, 0xef, 0x9a, 0x58, 0xbe, 0xc8, 0x9c, 0xeb, 0x14,
-    0x34, 0x7f, 0xe2, 0xee, 0xe4, 0x6c, 0x5c, 0x19, 0x75, 0xff, 0xf6, 0xa7,
-    0xb8, 0x1d, 0xf3, 0xbf, 0xe6, 0xb6, 0x58, 0xb4, 0xac, 0x5f, 0x49, 0x38,
-    0x16, 0x2b, 0xe6, 0xcb, 0xc2, 0x37, 0xa7, 0x63, 0xac, 0x56, 0x1b, 0xf2,
-    0x21, 0xbf, 0xda, 0x26, 0x08, 0x3e, 0xc2, 0x58, 0xb8, 0x1d, 0x16, 0x2f,
-    0xde, 0xf8, 0xb6, 0x12, 0xc5, 0x0c, 0xff, 0x7e, 0x70, 0x21, 0xab, 0xf1,
-    0x60, 0x30, 0x0b, 0x17, 0xfd, 0xf7, 0xf9, 0x4e, 0x6b, 0x16, 0x2f, 0xf4,
-    0x0b, 0x3a, 0x39, 0x0d, 0x62, 0xe7, 0x06, 0xe7, 0xd6, 0xc6, 0xf7, 0xe2,
-    0x6f, 0x37, 0x6b, 0x17, 0xbc, 0xdd, 0x16, 0x2f, 0xf0, 0xfb, 0x86, 0x61,
-    0x6c, 0xb1, 0x61, 0xac, 0x5f, 0xfa, 0x13, 0x1f, 0x9a, 0xf7, 0x26, 0x0b,
-    0x17, 0xfd, 0xd8, 0xe7, 0x8e, 0x3f, 0xca, 0xc5, 0xfd, 0xdf, 0xa2, 0xfc,
-    0x92, 0xc5, 0xfe, 0x7f, 0x71, 0xbb, 0x00, 0x4b, 0x17, 0x6b, 0x65, 0x4a,
-    0x0a, 0x57, 0xcf, 0x71, 0x8d, 0xaf, 0xfc, 0xda, 0xc2, 0x07, 0x3d, 0xce,
-    0xd6, 0x2f, 0xff, 0xb0, 0xd3, 0xce, 0x17, 0xb9, 0xc1, 0x68, 0x0b, 0x17,
-    0xff, 0xff, 0xf6, 0x7b, 0xec, 0x46, 0x99, 0xcd, 0x33, 0x7b, 0xa6, 0x0c,
-    0xcc, 0x3b, 0x17, 0x70, 0x5c, 0x81, 0x65, 0xff, 0x99, 0x8d, 0xdd, 0x86,
-    0x61, 0xa1, 0x2e, 0x40, 0xb2, 0xff, 0xef, 0xbf, 0xde, 0x4b, 0xc6, 0x1a,
-    0x12, 0xe4, 0x0b, 0x2f, 0xf4, 0xb9, 0x78, 0xc3, 0x42, 0x5c, 0x81, 0x65,
-    0xfc, 0x7c, 0x19, 0x86, 0x84, 0xb9, 0x02, 0xcb, 0xff, 0xfe, 0x62, 0x27,
-    0x39, 0x9c, 0xdf, 0xef, 0xa7, 0x37, 0x6c, 0x09, 0x72, 0x05, 0x97, 0x76,
-    0x60, 0xd3, 0x9e, 0xdd, 0x47, 0x4a, 0x8c, 0x86, 0x47, 0xf5, 0x2a, 0xc8,
-    0x71, 0x03, 0xea, 0x25, 0x28, 0xe2, 0xff, 0x3c, 0x9b, 0xcf, 0x73, 0xb5,
-    0x8b, 0xfc, 0xcd, 0xb6, 0x42, 0x4d, 0x58, 0xbf, 0xe9, 0x2d, 0xe7, 0xdc,
-    0xfb, 0xac, 0x5f, 0x37, 0xa4, 0xc8, 0x8f, 0xb4, 0xe6, 0x97, 0xff, 0x8f,
-    0x83, 0x30, 0x32, 0x9f, 0xc9, 0x6e, 0xb1, 0x7c, 0xda, 0x03, 0x2c, 0x5f,
-    0xfd, 0xf7, 0xfb, 0xc9, 0x78, 0xc3, 0x42, 0x5c, 0x81, 0x65, 0xff, 0x45,
-    0xcd, 0xdf, 0x63, 0x0d, 0x09, 0x72, 0x05, 0x97, 0xef, 0x72, 0x4e, 0x66,
-    0xe8, 0xa2, 0x0d, 0x52, 0xff, 0xf1, 0x9b, 0xfd, 0xf7, 0x9f, 0x70, 0xc3,
-    0x42, 0x5c, 0x81, 0x65, 0xff, 0xff, 0xc4, 0x4e, 0x73, 0x05, 0x86, 0x73,
-    0x7f, 0xbe, 0x9c, 0xdd, 0xb0, 0x25, 0xc8, 0x16, 0x56, 0x26, 0x4d, 0xda,
-    0x1b, 0x2f, 0xdf, 0xe7, 0xd3, 0x9b, 0xb6, 0x04, 0xb9, 0x02, 0xcb, 0xff,
-    0x6c, 0x71, 0x39, 0xd8, 0xbb, 0x82, 0xe4, 0x0b, 0x2b, 0xe8, 0x91, 0x12,
-    0x1d, 0xff, 0xf3, 0x37, 0x70, 0xe7, 0xdc, 0x63, 0x9d, 0x4a, 0x45, 0xff,
-    0xe7, 0x03, 0x10, 0xcc, 0xef, 0xc2, 0x96, 0x58, 0xbf, 0xf6, 0x42, 0x02,
-    0xe6, 0x8b, 0x68, 0xe5, 0xc8, 0x16, 0x56, 0xe9, 0x87, 0xe8, 0x8f, 0xea,
-    0x1c, 0x4b, 0xbf, 0xf6, 0xef, 0xaf, 0x30, 0x38, 0x60, 0x4b, 0x90, 0x2c,
-    0xbf, 0xbe, 0xff, 0xfb, 0x81, 0x56, 0x05, 0x97, 0xec, 0x01, 0x86, 0x84,
-    0xb9, 0x02, 0xcb, 0xb3, 0xdb, 0x9f, 0xa7, 0xce, 0xeb, 0xb4, 0x79, 0x72,
-    0x18, 0x97, 0xf1, 0xf0, 0x66, 0x1a, 0x12, 0xe4, 0x0b, 0x2f, 0xfd, 0xbf,
-    0xdf, 0x4e, 0x6e, 0xd8, 0x12, 0xe4, 0x0b, 0x2e, 0xc3, 0x19, 0x11, 0xfc,
-    0x3f, 0xbf, 0xc2, 0x73, 0xb1, 0x77, 0x05, 0xc8, 0x16, 0x5f, 0xfb, 0x1f,
-    0xa6, 0x16, 0x0d, 0xa0, 0xb9, 0x02, 0xc3, 0x9e, 0x0d, 0x0d, 0x7f, 0x6b,
-    0x48, 0x67, 0x85, 0x1b, 0x1d, 0x01, 0x30, 0xa3, 0xea, 0xe4, 0x7a, 0x1e,
-    0x8c, 0xc4, 0x50, 0xb8, 0x09, 0xbe, 0xe0, 0x4a, 0xa4, 0x0b, 0x23, 0x11,
-    0x53, 0x73, 0x6e, 0xb1, 0x43, 0x66, 0x6e, 0x61, 0xd6, 0xf0, 0x8c, 0x05,
-    0x2f, 0x17, 0xc7, 0x35, 0x8c, 0xdc, 0x1d, 0xcd, 0x62, 0x12, 0xe5, 0x34,
-    0x7a, 0xe8, 0x75, 0x2c, 0x5e, 0x98, 0x75, 0x2c, 0x54, 0x9b, 0xb2, 0x1b,
-    0xad, 0x9b, 0x14, 0x58, 0x25, 0x0e, 0x18, 0x9d, 0xc2, 0x71, 0xcb, 0xf5,
-    0x09, 0x2f, 0x96, 0xb1, 0x40, 0x29, 0xbc, 0x05, 0x08, 0x6b, 0xe0, 0xcb,
-    0x3a, 0x2c, 0x5f, 0xd2, 0x7d, 0xdf, 0xf8, 0xb1, 0x7f, 0xe6, 0x87, 0xe5,
-    0xc0, 0xde, 0x12, 0xc5, 0xfe, 0xcf, 0x7d, 0xf3, 0xbf, 0x2c, 0x5a, 0x1f,
-    0x3f, 0x22, 0x3e, 0xbf, 0x8a, 0x1c, 0xf7, 0xe5, 0x62, 0xff, 0xff, 0xd9,
-    0xef, 0xb4, 0x07, 0x9a, 0x7c, 0xe8, 0x1e, 0xbe, 0xfd, 0xf9, 0x62, 0xe7,
-    0x35, 0x62, 0xfb, 0xa1, 0x67, 0x16, 0x2f, 0xee, 0xf8, 0xde, 0x9e, 0x2c,
-    0x5f, 0x66, 0xe7, 0x75, 0x8b, 0x8a, 0x18, 0x7e, 0xce, 0x49, 0xf2, 0xfa,
-    0x95, 0x4a, 0x10, 0x25, 0xc8, 0x50, 0x39, 0x39, 0xcb, 0xbe, 0xe0, 0x1c,
-    0x23, 0xaf, 0x00, 0xe0, 0x58, 0xbf, 0xd3, 0xf7, 0x0b, 0xb8, 0x71, 0x62,
-    0xfd, 0x3e, 0xe7, 0xdd, 0x62, 0xff, 0xda, 0xc3, 0x7f, 0x87, 0x16, 0xb6,
-    0x58, 0xbf, 0xee, 0xcb, 0x1c, 0xf8, 0x40, 0x58, 0xbf, 0xff, 0xff, 0x34,
-    0x44, 0xc1, 0x67, 0x47, 0xe7, 0xf0, 0x11, 0xd9, 0xee, 0x31, 0xf3, 0xbf,
-    0x2c, 0x5f, 0xef, 0xb1, 0x0f, 0x3b, 0xf2, 0xc5, 0xff, 0x99, 0xb6, 0xc3,
-    0xb1, 0x77, 0x05, 0x8b, 0xdc, 0xc2, 0x58, 0xb4, 0x31, 0x11, 0xf1, 0x1a,
-    0x78, 0xfe, 0xfe, 0xde, 0x7a, 0xb7, 0x7e, 0xa5, 0x8b, 0xff, 0xcd, 0xbc,
-    0x90, 0xcb, 0x3a, 0x69, 0xf8, 0xb1, 0x7f, 0xee, 0x45, 0x01, 0x0e, 0x28,
-    0x08, 0x6b, 0x14, 0x62, 0xb0, 0x9d, 0x87, 0xa0, 0x6c, 0x32, 0x8c, 0x42,
-    0x34, 0xe3, 0xb8, 0xc6, 0x0e, 0x6d, 0xf3, 0x6f, 0x25, 0xdf, 0xf6, 0x78,
-    0x2c, 0x21, 0xfe, 0x56, 0x2f, 0x71, 0xc2, 0x58, 0xbf, 0xfa, 0x7b, 0x80,
-    0x67, 0xe7, 0xa7, 0xb0, 0x96, 0x2f, 0xd0, 0xea, 0xea, 0x16, 0xcb, 0x14,
-    0xe7, 0xf6, 0xc9, 0x55, 0xda, 0x2e, 0x7f, 0x09, 0x9b, 0xff, 0x9f, 0x38,
-    0x66, 0xb1, 0xff, 0x23, 0x58, 0xbf, 0xf6, 0x3f, 0x35, 0x90, 0x29, 0x3a,
-    0xc5, 0xf7, 0x8a, 0x4e, 0xb1, 0x76, 0xc2, 0x58, 0xbe, 0x9e, 0xe1, 0xc5,
-    0x8a, 0x93, 0x7b, 0xa1, 0x9b, 0xf4, 0x76, 0x75, 0x61, 0x2c, 0x56, 0xca,
-    0x92, 0x21, 0x0f, 0x23, 0x4a, 0x77, 0x44, 0x73, 0xdd, 0x2f, 0x80, 0x82,
-    0xff, 0xa4, 0xdf, 0xe1, 0x16, 0x76, 0xb1, 0x7f, 0xff, 0x77, 0xcf, 0x19,
-    0xef, 0xbb, 0x02, 0x28, 0x67, 0x70, 0x58, 0xbc, 0x76, 0xf2, 0xc5, 0xff,
-    0x34, 0x33, 0x43, 0x18, 0xa0, 0xb1, 0x6e, 0x2c, 0x51, 0xcf, 0x31, 0x8e,
-    0xae, 0xe6, 0xeb, 0x17, 0xa0, 0xfe, 0x58, 0xbf, 0xfd, 0xe7, 0x21, 0x43,
-    0x38, 0x0f, 0x7b, 0xb5, 0x8b, 0x14, 0x47, 0xd2, 0x18, 0xed, 0xf6, 0x44,
-    0xd1, 0x2c, 0x5f, 0xf7, 0x1b, 0xb8, 0xe1, 0x7d, 0xf4, 0xb1, 0x7f, 0x66,
-    0x80, 0x77, 0xe2, 0xc5, 0xc2, 0xe7, 0xd1, 0x21, 0xe2, 0x48, 0xe3, 0xeb,
-    0xff, 0x67, 0x7e, 0xcf, 0x4e, 0xb0, 0x96, 0x2f, 0x4b, 0x9d, 0x62, 0xc6,
-    0xac, 0x5b, 0x37, 0x35, 0xfa, 0x1c, 0xbf, 0xfb, 0xa7, 0x49, 0xe3, 0x7f,
-    0xb8, 0x67, 0x96, 0x2b, 0x13, 0xd6, 0x04, 0x2e, 0x78, 0x7f, 0x1c, 0xda,
-    0x19, 0x3d, 0xfc, 0x28, 0xa4, 0xb8, 0xeb, 0x17, 0xf8, 0x83, 0xcd, 0x14,
-    0x9d, 0x62, 0xfe, 0x17, 0x8a, 0x7d, 0xc5, 0x8a, 0xc3, 0xe1, 0x01, 0x9d,
-    0xa5, 0x62, 0xa0, 0xaf, 0xd8, 0xd6, 0x9f, 0x90, 0x82, 0x52, 0xc1, 0x29,
-    0xf2, 0x11, 0xfd, 0x44, 0x35, 0x2c, 0x85, 0x0c, 0x95, 0xbd, 0xdb, 0x6b,
-    0x9c, 0xb4, 0xe2, 0xbd, 0xe3, 0xbf, 0x16, 0x2f, 0xf0, 0xd8, 0x18, 0x37,
-    0xe2, 0xc5, 0xf8, 0xd1, 0xcb, 0x12, 0xc5, 0xff, 0xb9, 0x9f, 0x78, 0x38,
-    0xf0, 0xeb, 0x17, 0xe8, 0x4f, 0x46, 0xfa, 0xc5, 0x6c, 0x8e, 0x08, 0x0e,
-    0xe1, 0x99, 0xa5, 0x0c, 0x7d, 0x7f, 0xf6, 0x77, 0xee, 0x39, 0x48, 0x18,
-    0xeb, 0x17, 0xff, 0xf1, 0xa6, 0x7f, 0x35, 0xac, 0xea, 0xcd, 0xe3, 0xdc,
-    0xba, 0x2c, 0x5f, 0xf0, 0x41, 0x93, 0x6f, 0x85, 0xba, 0xc5, 0xf7, 0x56,
-    0x66, 0xcb, 0x17, 0xff, 0xde, 0xfb, 0x98, 0x6b, 0x18, 0x58, 0x13, 0x01,
-    0x62, 0xfe, 0x37, 0x53, 0x06, 0x35, 0x62, 0xb1, 0x10, 0x6c, 0xa7, 0x7c,
-    0x71, 0xe1, 0xd6, 0x2e, 0xeb, 0x7a, 0xc5, 0x8a, 0x58, 0xbf, 0xcf, 0xf2,
-    0xcf, 0x48, 0x16, 0x2f, 0x7c, 0x61, 0x9c, 0xdf, 0x78, 0x32, 0xff, 0xba,
-    0x39, 0x0c, 0x5f, 0xc3, 0xac, 0x5f, 0xcd, 0xf7, 0xe4, 0xc1, 0x62, 0x8c,
-    0x4c, 0x7e, 0x34, 0x23, 0x96, 0x0c, 0x34, 0xe1, 0xdd, 0xfe, 0x0c, 0xa4,
-    0xb6, 0x7d, 0x2c, 0x5f, 0xe2, 0x2c, 0x0e, 0x48, 0x0b, 0x16, 0xeb, 0xcc,
-    0x3e, 0x6c, 0x34, 0xbe, 0x3b, 0xb4, 0x16, 0x2f, 0xcf, 0xb1, 0x49, 0xd6,
-    0x28, 0xe7, 0x95, 0xf2, 0x2b, 0xfd, 0x9f, 0x7e, 0x38, 0xa0, 0xb1, 0x5b,
-    0x2e, 0x28, 0x62, 0x23, 0xb3, 0x7c, 0xf0, 0xa1, 0x53, 0xe8, 0xd0, 0x05,
-    0x0b, 0x5e, 0x8e, 0xfd, 0x44, 0x57, 0xb9, 0x3d, 0xac, 0x5f, 0xff, 0xff,
-    0xd9, 0xd0, 0xb3, 0x86, 0x78, 0xd9, 0x28, 0x67, 0xdc, 0xe6, 0x0f, 0x06,
-    0x36, 0x3a, 0xc5, 0x76, 0x8a, 0xa2, 0x1e, 0xbf, 0xa0, 0xfc, 0x0f, 0xb0,
-    0x2c, 0x5e, 0xe1, 0xae, 0xb1, 0x7f, 0xff, 0xef, 0xbe, 0x9e, 0x4f, 0x84,
-    0xf3, 0xf6, 0x7d, 0x69, 0xf6, 0x58, 0xbf, 0xf4, 0x33, 0xb8, 0x6a, 0x7c,
-    0xde, 0x58, 0xbc, 0x79, 0x82, 0xc5, 0xef, 0x88, 0x25, 0x8b, 0xc7, 0x98,
-    0x2c, 0x5b, 0x06, 0x6f, 0x00, 0x3f, 0x7f, 0xfe, 0x21, 0x47, 0xfd, 0xf5,
-    0x3f, 0x6e, 0x16, 0x01, 0x62, 0x8c, 0x4f, 0xc6, 0x48, 0xe0, 0x63, 0xb8,
-    0xf4, 0x4d, 0x2c, 0x80, 0x4b, 0x21, 0x93, 0x5f, 0xf6, 0xff, 0x71, 0xfe,
-    0x7d, 0xc5, 0x8b, 0xed, 0x4f, 0x60, 0x58, 0xbf, 0xbc, 0xfa, 0x6d, 0xa5,
-    0x62, 0xcd, 0x03, 0xd2, 0x72, 0x4b, 0xc3, 0x6f, 0x2c, 0x5f, 0xff, 0x16,
-    0x77, 0xed, 0x4c, 0x1f, 0x81, 0xf6, 0x05, 0x8b, 0xa7, 0xb5, 0x8b, 0xff,
-    0xf7, 0xbd, 0x91, 0x43, 0x36, 0x33, 0xb9, 0x29, 0xe2, 0xc5, 0xfe, 0x26,
-    0xef, 0xc1, 0x4f, 0x6b, 0x17, 0xff, 0xbd, 0x91, 0x43, 0x36, 0xee, 0x4a,
-    0x78, 0xb1, 0x74, 0xf6, 0x62, 0x36, 0xfe, 0xb3, 0xe3, 0x6a, 0x94, 0xe0,
-    0xc0, 0xa6, 0x50, 0xf3, 0xbf, 0x4b, 0x0f, 0x4c, 0xb1, 0x7f, 0x60, 0xff,
-    0x3a, 0x65, 0x8b, 0xff, 0x48, 0x5f, 0xd3, 0x43, 0xef, 0xa5, 0x8b, 0xcd,
-    0xa3, 0x62, 0x44, 0xa1, 0x13, 0x86, 0x5b, 0x7f, 0xc4, 0x63, 0xc7, 0xb7,
-    0x1c, 0xeb, 0x17, 0xfd, 0x25, 0x30, 0xf7, 0xf0, 0x96, 0x2b, 0x0f, 0xcf,
-    0x87, 0x95, 0xa5, 0xc6, 0x53, 0xb9, 0xfe, 0x11, 0xac, 0x4c, 0x08, 0xe8,
-    0x0a, 0x19, 0x1c, 0x85, 0xb5, 0xff, 0xcf, 0xa2, 0xc1, 0xbf, 0x46, 0x20,
-    0x2c, 0x5e, 0x78, 0xec, 0x58, 0xbc, 0xfd, 0xf9, 0x62, 0xf7, 0xf6, 0x75,
-    0x8b, 0xb0, 0x2e, 0x1b, 0xc1, 0x0f, 0x5f, 0xfb, 0x44, 0xc1, 0x36, 0xb5,
-    0x9d, 0xac, 0x5f, 0xe7, 0xd1, 0xe7, 0x08, 0x6b, 0x17, 0x39, 0xab, 0x15,
-    0xf3, 0xca, 0x23, 0x2b, 0xfb, 0x8e, 0x3c, 0x0b, 0x8b, 0x17, 0xf3, 0x69,
-    0x86, 0xf8, 0xb1, 0x7c, 0x44, 0xf0, 0x58, 0xbb, 0xb7, 0x58, 0xb4, 0x4b,
-    0x17, 0x68, 0x0b, 0x17, 0x60, 0x4b, 0x15, 0xf3, 0xc3, 0x61, 0x3f, 0x0c,
-    0x54, 0xaa, 0x38, 0xd9, 0x6c, 0x65, 0xb9, 0x08, 0xae, 0xc8, 0x7e, 0x5e,
-    0xc5, 0x84, 0x43, 0xe5, 0xbb, 0xfe, 0xce, 0x38, 0xe4, 0xa4, 0x0b, 0x17,
-    0x3e, 0x96, 0x2f, 0xcc, 0x5e, 0xe4, 0xac, 0x5f, 0xda, 0xe0, 0x8f, 0x9a,
-    0x58, 0xb3, 0xac, 0x53, 0x9e, 0x03, 0x17, 0xdf, 0x61, 0xb3, 0xc5, 0x8a,
-    0xd2, 0x2a, 0x8e, 0xce, 0x44, 0x15, 0xda, 0x75, 0x5a, 0x84, 0x1f, 0xcd,
-    0xc1, 0x0c, 0x1b, 0xe0, 0xb3, 0xec, 0xb1, 0x7c, 0x6e, 0x9c, 0x25, 0x8b,
-    0xf6, 0xcd, 0xf9, 0x8f, 0x58, 0xb8, 0xf2, 0xb1, 0x7f, 0x14, 0xc3, 0xd9,
-    0xba, 0xc5, 0x8d, 0x81, 0xe2, 0xe0, 0xbd, 0xee, 0x48, 0xd6, 0x2f, 0x47,
-    0x67, 0x96, 0x2d, 0xb7, 0x66, 0xf7, 0xc3, 0xb5, 0xd6, 0x26, 0x49, 0x84,
-    0xae, 0xe2, 0x26, 0x5b, 0xf8, 0xdf, 0xcf, 0x7e, 0xc5, 0x8b, 0xfc, 0x58,
-    0x3f, 0xc8, 0x44, 0xb1, 0x7b, 0x35, 0x2b, 0x17, 0xef, 0xb0, 0x79, 0xb2,
-    0xc5, 0xff, 0xff, 0xcc, 0xfe, 0x9e, 0x85, 0x9c, 0xfb, 0x40, 0x3c, 0xe7,
-    0x03, 0x1b, 0x2c, 0x50, 0xd1, 0x3d, 0xf2, 0xaa, 0x82, 0x37, 0x7d, 0x0b,
-    0xaa, 0x94, 0xda, 0x34, 0x60, 0x51, 0x88, 0x5f, 0xff, 0xed, 0x4f, 0xe7,
-    0x5a, 0x9d, 0xbc, 0xcc, 0x6e, 0x77, 0xe5, 0x8a, 0x96, 0xd2, 0x7f, 0x27,
-    0x26, 0x9e, 0x7e, 0x52, 0x3d, 0xe9, 0xa7, 0x09, 0x80, 0x92, 0x51, 0xa3,
-    0x8a, 0x3a, 0x90, 0xcd, 0x6f, 0xbe, 0x76, 0xf2, 0xc5, 0xf1, 0x45, 0xcc,
-    0x58, 0xbf, 0x43, 0x36, 0xf4, 0xac, 0x5f, 0xff, 0xd3, 0xe0, 0xf6, 0x1e,
-    0x7a, 0x7a, 0x3f, 0x81, 0x30, 0x58, 0xbf, 0xbe, 0xfa, 0xd3, 0x41, 0x62,
-    0xc0, 0x58, 0xb6, 0xc7, 0x3c, 0x0e, 0x17, 0x5f, 0xf0, 0xc6, 0x52, 0x10,
-    0xf2, 0x3d, 0x62, 0xa4, 0xf9, 0x84, 0x53, 0x5b, 0x26, 0x4c, 0x51, 0x82,
-    0xd2, 0xc5, 0x3a, 0x75, 0x11, 0x11, 0x94, 0x69, 0xf1, 0xc5, 0x57, 0xf6,
-    0xd2, 0x5d, 0xe7, 0x96, 0x2f, 0xb7, 0x62, 0x35, 0x62, 0xb6, 0x3d, 0x3d,
-    0xcb, 0xef, 0xff, 0xa1, 0xce, 0x4e, 0xb7, 0x13, 0x0f, 0xf2, 0xeb, 0x17,
-    0xe1, 0xe6, 0x16, 0xeb, 0x17, 0xee, 0xfc, 0x4d, 0xf5, 0x8b, 0xa6, 0x25,
-    0x8a, 0xd8, 0xfa, 0x60, 0x50, 0x02, 0x9a, 0x95, 0x6e, 0x59, 0x1e, 0x5b,
-    0xc2, 0x65, 0x89, 0x05, 0x0b, 0xab, 0xff, 0xfb, 0xec, 0x7e, 0x34, 0x30,
-    0xed, 0xcc, 0xfb, 0x69, 0x62, 0xff, 0xed, 0x10, 0xbb, 0xf1, 0x66, 0xcc,
-    0x4b, 0x17, 0xb7, 0x0c, 0xeb, 0x17, 0xff, 0xf0, 0xfe, 0x2d, 0x9f, 0x35,
-    0xac, 0x9e, 0xe0, 0xe7, 0x58, 0xbf, 0xcd, 0x11, 0x0b, 0xc5, 0x2b, 0x17,
-    0xa4, 0xbc, 0xb1, 0x7f, 0x0c, 0x3f, 0x79, 0xc2, 0x58, 0xb8, 0xa2, 0x58,
-    0xa7, 0x3e, 0x56, 0x1c, 0x11, 0x8d, 0xdf, 0x35, 0x62, 0xfd, 0xb8, 0xdc,
-    0xb6, 0x58, 0xbf, 0xef, 0xcf, 0x65, 0x83, 0x68, 0x2c, 0x5e, 0x6d, 0x6c,
-    0xb1, 0x70, 0x25, 0x62, 0xf9, 0xe4, 0xf8, 0xb1, 0x4b, 0x17, 0xf3, 0x1b,
-    0xe9, 0xd0, 0x16, 0x28, 0x66, 0xec, 0x83, 0x2f, 0xff, 0xf4, 0xb8, 0xca,
-    0x45, 0xbf, 0xb3, 0x71, 0xce, 0xe1, 0x9d, 0x62, 0xe0, 0x4a, 0xc5, 0xd2,
-    0x6a, 0xc5, 0xff, 0x67, 0xb9, 0x27, 0x0f, 0x22, 0x58, 0xbf, 0xdc, 0xcf,
-    0xbf, 0x05, 0xb2, 0xc5, 0xc1, 0x04, 0x91, 0x7f, 0xc5, 0x9d, 0x1a, 0x1c,
-    0x71, 0xac, 0x56, 0xea, 0x82, 0x1c, 0x7b, 0x42, 0xe7, 0x5c, 0xf9, 0x00,
-    0x19, 0x3a, 0xf1, 0x72, 0x18, 0xe1, 0xd8, 0x46, 0xa1, 0x8d, 0x5e, 0x08,
-    0x20, 0x92, 0x2c, 0x74, 0x88, 0xc3, 0x43, 0x73, 0x69, 0x22, 0x31, 0x1c,
-    0xc1, 0xc3, 0x06, 0xff, 0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x4c, 0x7f,
-    0x04, 0x7f, 0x7f, 0xff, 0x80, 0xdf, 0x67, 0xf8, 0xbf, 0x3b, 0xbf, 0x70,
-    0x73, 0xac, 0x5e, 0xfc, 0xc1, 0x62, 0x96, 0x06, 0x5e, 0xd0, 0xd7, 0x27,
-    0x30, 0x67, 0x72, 0xa8, 0xa5, 0xcf, 0xf8, 0x80, 0x37, 0xfa, 0x95, 0xee,
-    0x0d, 0x96, 0x86, 0x8b, 0xb9, 0x07, 0x6b, 0xbf, 0x84, 0xc3, 0x4e, 0x64,
-    0xdf, 0xff, 0xa1, 0x3a, 0x00, 0xf5, 0x8e, 0x6f, 0x3f, 0x27, 0x58, 0xbf,
-    0xbd, 0x39, 0xfc, 0xd9, 0x62, 0xec, 0x3a, 0xc5, 0x62, 0x27, 0x3b, 0x57,
-    0xe1, 0x75, 0xff, 0xbf, 0xf6, 0x7f, 0x4e, 0x14, 0x4b, 0x17, 0x6b, 0x16,
-    0x2b, 0x0f, 0x55, 0x8f, 0xaf, 0xf4, 0xed, 0xa9, 0xd4, 0xca, 0xc5, 0x75,
-    0xb0, 0x98, 0x63, 0x9a, 0x45, 0xee, 0xd1, 0xd8, 0x42, 0x90, 0x1e, 0x38,
-    0xf3, 0xb2, 0x9d, 0xfc, 0x6c, 0xf5, 0xf7, 0x73, 0xbf, 0xef, 0x4a, 0xfb,
-    0x8a, 0x35, 0x4d, 0x46, 0xc6, 0x78, 0xef, 0xff, 0x5a, 0x39, 0xb5, 0x65,
-    0x4a, 0x09, 0x5f, 0x85, 0x4b, 0xc7, 0xe5, 0x6b, 0xb3, 0xe9, 0xc1, 0x81,
-    0x4f, 0x9c, 0x74, 0x8c, 0x46, 0x3a, 0x10, 0xa1, 0x90, 0x5f, 0x85, 0xe9,
-    0xf7, 0x16, 0x2d, 0xe5, 0x8a, 0xe1, 0xbb, 0x0c, 0xa6, 0xfe, 0xc0, 0x01,
-    0xf5, 0x05, 0x8b, 0xdf, 0x11, 0xab, 0x17, 0x6f, 0x8b, 0x17, 0xec, 0x8a,
-    0x7b, 0xe2, 0xc5, 0x0d, 0x11, 0xee, 0x5c, 0xc3, 0xfc, 0x18, 0xbf, 0xf4,
-    0x9e, 0x39, 0xb6, 0xc1, 0xb8, 0x4b, 0x17, 0x60, 0x4b, 0x17, 0x4f, 0x96,
-    0x2f, 0xfe, 0x16, 0xc4, 0x2c, 0x7e, 0x7d, 0x8e, 0xb1, 0x7f, 0xfc, 0xe5,
-    0x20, 0xc1, 0x75, 0xef, 0xf7, 0xd4, 0x16, 0x2b, 0x64, 0x63, 0xee, 0x30,
-    0x42, 0xfc, 0x45, 0xbe, 0xe7, 0x1c, 0x0b, 0x17, 0xbe, 0xc0, 0x58, 0xad,
-    0x8f, 0x01, 0x88, 0xef, 0xe2, 0xc3, 0x4c, 0xf3, 0xac, 0x58, 0xeb, 0x15,
-    0x04, 0xfa, 0xf2, 0x30, 0xad, 0x3f, 0x7c, 0x8b, 0xc5, 0xf7, 0xf3, 0x80,
-    0x3d, 0xa7, 0x65, 0x8b, 0xfd, 0x07, 0x2c, 0x38, 0xbe, 0xb1, 0x7e, 0xfb,
-    0x39, 0x32, 0xc5, 0xff, 0x4b, 0xeb, 0x1f, 0xf2, 0x35, 0x8b, 0xff, 0x67,
-    0xb9, 0xf7, 0x3b, 0x66, 0x96, 0x2f, 0xff, 0x7c, 0x5c, 0xd4, 0x94, 0x5f,
-    0x60, 0x4a, 0xc5, 0xd8, 0x35, 0x8b, 0xe9, 0xcf, 0xb2, 0xc5, 0x4a, 0x6a,
-    0x26, 0x99, 0xfc, 0x98, 0x8d, 0xc4, 0x7d, 0xd1, 0x2f, 0xa8, 0x5e, 0xf6,
-    0x03, 0xcb, 0x17, 0xba, 0xd8, 0xdb, 0x65, 0x8b, 0xdd, 0x23, 0x6e, 0x8b,
-    0x14, 0x61, 0xf6, 0xf5, 0xa3, 0xb8, 0x53, 0x7a, 0x5e, 0x3d, 0x62, 0xfe,
-    0xe4, 0x50, 0x7d, 0x44, 0xb1, 0x58, 0x88, 0x47, 0x34, 0xf0, 0xfd, 0xff,
-    0xff, 0xcc, 0xfe, 0x92, 0xdd, 0xce, 0x77, 0xe7, 0x33, 0xef, 0xc1, 0x6c,
-    0xb1, 0x74, 0xf4, 0x58, 0xaf, 0xa2, 0x2f, 0xce, 0x57, 0xff, 0xd9, 0xf7,
-    0xd7, 0xd8, 0xcc, 0x3e, 0x9c, 0xd5, 0x8a, 0x30, 0xfd, 0x23, 0x08, 0xef,
-    0x86, 0x52, 0x1a, 0xc5, 0xf6, 0xf2, 0x77, 0x58, 0xbf, 0xff, 0xfb, 0xbe,
-    0xfc, 0xe1, 0x67, 0xa7, 0xdc, 0x62, 0x07, 0xa7, 0x0b, 0xcb, 0x14, 0x62,
-    0x2e, 0x70, 0x8d, 0xc8, 0xef, 0xfe, 0x26, 0xd6, 0x78, 0xa7, 0xef, 0x05,
-    0x8b, 0xef, 0xe6, 0xce, 0xb1, 0x7f, 0x49, 0xde, 0x3c, 0xf8, 0xb1, 0x78,
-    0xf9, 0xe5, 0x8b, 0xe0, 0x9e, 0x46, 0xb1, 0x6e, 0xb5, 0x62, 0xd1, 0xa2,
-    0xc5, 0xa3, 0x45, 0x8a, 0x8d, 0x8f, 0x16, 0x35, 0x0b, 0xc6, 0xb1, 0x7a,
-    0xc4, 0x54, 0x71, 0xa2, 0xff, 0xb3, 0x0e, 0x1f, 0x54, 0x94, 0x16, 0x2e,
-    0x70, 0xd6, 0x2a, 0x09, 0xc7, 0x0c, 0x8f, 0x0c, 0x1e, 0x18, 0xbc, 0x22,
-    0xea, 0x3c, 0xbf, 0xdb, 0xfe, 0x43, 0x79, 0xd9, 0x62, 0xf1, 0x30, 0xd6,
-    0x2e, 0x63, 0x56, 0x2f, 0xe6, 0x16, 0xff, 0x9e, 0x2c, 0x56, 0x91, 0x32,
-    0x73, 0x6f, 0x0e, 0x47, 0x0c, 0x5f, 0x31, 0xda, 0x25, 0x8b, 0xff, 0x9e,
-    0x23, 0x1f, 0xbe, 0x30, 0x6e, 0x75, 0x8b, 0xff, 0x3c, 0xf9, 0x83, 0x27,
-    0xee, 0x0b, 0x15, 0x12, 0x21, 0xf8, 0x91, 0x7d, 0xdf, 0xf3, 0xa9, 0x62,
-    0xf7, 0x50, 0x02, 0x58, 0xbe, 0x90, 0xa6, 0x25, 0x8a, 0x93, 0xed, 0xec,
-    0x9d, 0xc8, 0xaf, 0xef, 0xb0, 0x00, 0xff, 0x58, 0xba, 0x21, 0x2c, 0x51,
-    0x87, 0x8e, 0xc5, 0xd6, 0xd2, 0xc5, 0xef, 0x77, 0xc5, 0x8a, 0xc3, 0x62,
-    0xc2, 0x55, 0x29, 0xbc, 0x3c, 0x24, 0x59, 0xd4, 0x94, 0xef, 0xff, 0xfc,
-    0xd1, 0x0a, 0x02, 0xdc, 0xcf, 0xbf, 0xbd, 0x3d, 0xce, 0xd3, 0xc5, 0x8b,
-    0xff, 0xb9, 0xfc, 0xee, 0x19, 0xcf, 0xce, 0x96, 0x2f, 0xc4, 0xd1, 0xfb,
-    0x44, 0xb1, 0x7d, 0x3a, 0x7e, 0xd6, 0x2f, 0xa2, 0xe4, 0xf9, 0x62, 0xb7,
-    0x4c, 0xb1, 0xdc, 0xa2, 0x46, 0x62, 0xd1, 0x11, 0xde, 0x3e, 0x7d, 0x62,
-    0xfd, 0xa6, 0x97, 0x8e, 0x58, 0xa1, 0x1e, 0x3f, 0x41, 0xdb, 0x9f, 0xb5,
-    0x8b, 0xff, 0x89, 0xbc, 0xfa, 0xfc, 0x9f, 0x8c, 0xb1, 0x4b, 0x15, 0xa3,
-    0xe7, 0x10, 0xc0, 0x48, 0x77, 0xfc, 0x5b, 0xb3, 0x8c, 0x5e, 0xe2, 0xc5,
-    0xfc, 0xd1, 0x09, 0x83, 0x3a, 0xc5, 0xe1, 0x08, 0x35, 0x8b, 0xff, 0x9b,
-    0xb3, 0x30, 0xe2, 0xe0, 0xb8, 0xcb, 0x17, 0xfe, 0xdf, 0xf2, 0x6e, 0xff,
-    0x9e, 0xfa, 0x96, 0x2a, 0x08, 0xdd, 0xe1, 0x80, 0x87, 0xfa, 0x91, 0xef,
-    0xfe, 0x87, 0xe7, 0x5b, 0x4f, 0xb8, 0xd0, 0x58, 0xbe, 0x26, 0x6e, 0x8b,
-    0x12, 0x78, 0xd7, 0xf4, 0xef, 0xee, 0x37, 0x6b, 0x17, 0xdf, 0xc6, 0xd9,
-    0x62, 0xff, 0xff, 0x89, 0x8d, 0x33, 0xce, 0x3c, 0x1f, 0xe7, 0x3c, 0xe4,
-    0x12, 0xc5, 0xff, 0xb9, 0xe3, 0x5f, 0x7f, 0x73, 0x36, 0x58, 0xbc, 0x76,
-    0xed, 0x62, 0xff, 0x31, 0xb1, 0xc2, 0xfb, 0xe9, 0x62, 0x8c, 0x4c, 0x02,
-    0x36, 0x67, 0xc4, 0x32, 0x1e, 0xa9, 0x56, 0xcb, 0xdc, 0x62, 0xf1, 0xf0,
-    0x86, 0x23, 0x3e, 0x18, 0x07, 0x19, 0x1d, 0xe7, 0xee, 0x25, 0x8b, 0xe1,
-    0x75, 0xe7, 0x75, 0x8b, 0xf8, 0xf9, 0xc9, 0xdf, 0xeb, 0x17, 0xe7, 0x8b,
-    0xf3, 0x12, 0xc5, 0x6c, 0x7b, 0x27, 0x2f, 0xbf, 0x70, 0x4d, 0xdf, 0x52,
-    0xc5, 0xfc, 0xc4, 0x0d, 0xb0, 0x25, 0x8b, 0xfc, 0x66, 0x41, 0xcd, 0x35,
-    0x96, 0x2b, 0x73, 0xe5, 0x22, 0xfa, 0x94, 0x6b, 0xb9, 0x18, 0xa1, 0x25,
-    0x7d, 0x9b, 0x0b, 0x8b, 0x17, 0xfb, 0x66, 0x88, 0xc8, 0x84, 0x75, 0x8b,
-    0xfe, 0x8f, 0x14, 0x7f, 0xc5, 0xa1, 0x32, 0xc5, 0x61, 0xfd, 0x08, 0xe6,
-    0xb1, 0x17, 0xfe, 0x84, 0xf5, 0xf6, 0x89, 0xc0, 0xb1, 0x7f, 0xa0, 0x19,
-    0xf0, 0xb2, 0x3d, 0x62, 0xf9, 0xf7, 0x6d, 0x2c, 0x5d, 0x20, 0x58, 0xb4,
-    0x67, 0xcd, 0xd0, 0x64, 0x74, 0xb1, 0x6d, 0x84, 0x6d, 0xc2, 0x2b, 0xa9,
-    0x46, 0x88, 0xa1, 0x51, 0x7f, 0x98, 0x39, 0x8a, 0x76, 0x8d, 0x16, 0x29,
-    0xd3, 0x55, 0xfc, 0x3c, 0xfc, 0x4f, 0x60, 0x2c, 0x5d, 0x9b, 0xac, 0x5f,
-    0xb3, 0x5a, 0x7d, 0x2c, 0x54, 0x79, 0xe9, 0x7c, 0x48, 0x03, 0x17, 0xed,
-    0xfe, 0xc2, 0xd2, 0xc5, 0xf9, 0xf5, 0x2f, 0x1e, 0xb1, 0x7d, 0x3d, 0xe6,
-    0xeb, 0x17, 0xe0, 0xde, 0x78, 0xcb, 0x15, 0xf3, 0xf6, 0x62, 0xa1, 0x12,
-    0x5f, 0x6c, 0xf3, 0xda, 0xc5, 0xd3, 0x1e, 0xb1, 0x4c, 0x6f, 0x83, 0x24,
-    0xbf, 0xc3, 0x61, 0x69, 0x84, 0x35, 0x8b, 0xfc, 0xdc, 0xfb, 0xec, 0xc4,
-    0xb1, 0x58, 0x7c, 0xff, 0x34, 0xbe, 0x6d, 0x83, 0x82, 0xc5, 0x75, 0xad,
-    0xd3, 0x4c, 0x6d, 0x0b, 0x19, 0x94, 0x4d, 0xb2, 0x84, 0x23, 0x82, 0x1c,
-    0x6b, 0x59, 0x19, 0x69, 0xb0, 0xdf, 0xdc, 0xbf, 0xb8, 0xf4, 0x1e, 0x1e,
-    0xf1, 0xe8, 0x11, 0x4a, 0x22, 0xd4, 0x6d, 0x67, 0x84, 0x97, 0xe1, 0x16,
-    0xd2, 0xe5, 0x40, 0xdb, 0xd7, 0x8f, 0x94, 0x6b, 0x1c, 0x87, 0x97, 0xa3,
-    0x7c, 0x14, 0x21, 0xfa, 0x19, 0x05, 0x0a, 0x08, 0xe6, 0xc0, 0xe1, 0x11,
-    0xd4, 0x43, 0x78, 0x85, 0xc5, 0x8b, 0xfd, 0x84, 0xe0, 0xe7, 0xdd, 0x62,
-    0xe2, 0x02, 0xc5, 0xa3, 0xd6, 0x2f, 0x86, 0x76, 0x82, 0xc5, 0x39, 0xb8,
-    0x10, 0xad, 0xff, 0x61, 0x39, 0xbe, 0x70, 0x71, 0x62, 0xfd, 0xf6, 0x3e,
-    0x0d, 0x62, 0x8c, 0x4c, 0x0b, 0xe6, 0x44, 0x9e, 0x22, 0x00, 0x8e, 0x6f,
-    0x3e, 0xc2, 0x58, 0xbe, 0xe9, 0xf9, 0x82, 0xc5, 0xff, 0xba, 0x3e, 0x85,
-    0xd4, 0xdb, 0x07, 0x05, 0x8b, 0x4a, 0xc5, 0xf8, 0x51, 0x14, 0x9d, 0x62,
-    0xa5, 0x14, 0xd8, 0x4a, 0xc8, 0xfc, 0x11, 0xbd, 0x1b, 0xf5, 0x91, 0xba,
-    0xc5, 0xf0, 0x1f, 0xbc, 0x58, 0xb9, 0x8e, 0xb1, 0x52, 0x6e, 0xa2, 0x23,
-    0xbf, 0xed, 0x30, 0x5f, 0x63, 0xe0, 0xd6, 0x2e, 0x38, 0x96, 0x2f, 0xcd,
-    0xef, 0x88, 0x96, 0x2f, 0xde, 0x84, 0x90, 0x16, 0x2c, 0x35, 0x8b, 0x74,
-    0x58, 0xa8, 0x1a, 0x63, 0x89, 0x5d, 0x3c, 0x58, 0xbf, 0xcc, 0xe4, 0xde,
-    0x6f, 0xac, 0x57, 0xcf, 0x20, 0x42, 0xf4, 0x62, 0xa1, 0x58, 0xdc, 0xea,
-    0x59, 0xcd, 0x21, 0x73, 0xaf, 0x8c, 0x31, 0x41, 0x27, 0x71, 0xa6, 0xff,
-    0xdb, 0x93, 0x66, 0xf3, 0xd2, 0x78, 0xb1, 0x7f, 0xee, 0x38, 0x27, 0x4f,
-    0xf9, 0x1a, 0xc5, 0xf3, 0x0e, 0x2e, 0xd6, 0x2d, 0x05, 0xca, 0x2c, 0x54,
-    0xa2, 0x0b, 0x63, 0xe2, 0x25, 0xbc, 0xc2, 0xeb, 0xd6, 0x2f, 0xfd, 0x9b,
-    0x96, 0x72, 0x3b, 0x35, 0x2b, 0x14, 0x34, 0xf6, 0x1e, 0x10, 0x65, 0x0c,
-    0x3f, 0x17, 0x86, 0x45, 0x7f, 0xfa, 0x05, 0x26, 0x1c, 0xa4, 0xdf, 0x3e,
-    0xcb, 0x17, 0xd8, 0x2d, 0x6c, 0xb1, 0x7c, 0x7c, 0xf9, 0xd6, 0x2e, 0x9d,
-    0x96, 0x29, 0x8d, 0xdf, 0x08, 0xeb, 0xb4, 0x65, 0xe9, 0x33, 0xcb, 0xf6,
-    0x09, 0x62, 0xfe, 0x9e, 0xe0, 0xe5, 0x8b, 0x17, 0xbd, 0xa9, 0x58, 0xbd,
-    0xc6, 0xf2, 0xc5, 0xff, 0xdf, 0xea, 0xc2, 0x0f, 0x37, 0x2c, 0xe2, 0xc5,
-    0xf6, 0x6c, 0x1c, 0x16, 0x2f, 0x06, 0x40, 0x58, 0xae, 0xd1, 0x50, 0xe3,
-    0xa4, 0x91, 0xe2, 0x5b, 0xc2, 0x90, 0x2c, 0x5c, 0xfa, 0x58, 0xbc, 0x2d,
-    0xa5, 0x62, 0xff, 0xe6, 0x23, 0x3d, 0x31, 0x37, 0x41, 0xca, 0xc5, 0xf7,
-    0xa4, 0xb6, 0x58, 0xb4, 0x9a, 0x89, 0xfd, 0x0b, 0x9c, 0x7b, 0xa2, 0x3d,
-    0xff, 0x6d, 0x85, 0xac, 0xe9, 0x20, 0x58, 0xbf, 0xbd, 0xd3, 0x0b, 0x06,
-    0xb1, 0x51, 0x27, 0x4f, 0xa3, 0xcf, 0xc2, 0xf0, 0x91, 0x78, 0x77, 0x7e,
-    0xe6, 0x41, 0xf4, 0xb1, 0x7e, 0x8a, 0x0d, 0xdf, 0x16, 0x2b, 0x0f, 0x4f,
-    0x85, 0x17, 0x85, 0x1f, 0xd4, 0xb1, 0x6e, 0x8b, 0x17, 0xfd, 0xaf, 0xb0,
-    0x6d, 0xf7, 0x02, 0xc5, 0x49, 0xe7, 0x38, 0xa5, 0xfc, 0xe5, 0xb7, 0xc5,
-    0xc5, 0x8a, 0xf9, 0xe7, 0xf8, 0x82, 0xfb, 0xf8, 0x06, 0x58, 0xba, 0x3f,
-    0xa9, 0x62, 0xf7, 0x21, 0xb2, 0xc5, 0x6c, 0x9a, 0x16, 0x43, 0x04, 0x88,
-    0x84, 0x44, 0x18, 0xf5, 0x18, 0xcc, 0x6e, 0x98, 0xc7, 0xe0, 0x99, 0x93,
-    0x96, 0x2f, 0x18, 0xfc, 0x46, 0x3a, 0x13, 0x39, 0x6b, 0x4a, 0x6c, 0x28,
-    0x51, 0xfa, 0x36, 0x3b, 0xd2, 0xfa, 0x58, 0xb8, 0xc0, 0xd6, 0x28, 0xe6,
-    0xd9, 0x87, 0x2f, 0xdf, 0xe4, 0x6a, 0xed, 0xd6, 0x2e, 0x7e, 0x8b, 0x17,
-    0xa2, 0x7f, 0xac, 0x5f, 0xd3, 0xa6, 0x89, 0xfe, 0xb1, 0x7e, 0xe0, 0xe4,
-    0xb6, 0x63, 0xcc, 0xe0, 0xf5, 0xfd, 0xc0, 0xfd, 0xc9, 0xfa, 0xc5, 0xfe,
-    0x35, 0xa2, 0x71, 0xbc, 0xac, 0x5f, 0xfe, 0xf7, 0xa4, 0xa4, 0xd3, 0x66,
-    0x11, 0xe7, 0x58, 0xbf, 0xb3, 0x69, 0xff, 0xe5, 0x62, 0xfd, 0x91, 0x7f,
-    0x09, 0x62, 0xfd, 0x81, 0x90, 0x80, 0xb1, 0x7e, 0x03, 0x34, 0x0e, 0xb1,
-    0x52, 0x7a, 0x38, 0x53, 0x7c, 0xe1, 0x66, 0x96, 0x2f, 0xfe, 0xfe, 0x1f,
-    0x3a, 0x31, 0xf3, 0x50, 0x58, 0xa8, 0x27, 0xc6, 0x69, 0x83, 0x9a, 0x69,
-    0x3f, 0xe5, 0xc4, 0xf3, 0xc2, 0x0f, 0x11, 0xde, 0x3c, 0x9d, 0x62, 0xf4,
-    0xed, 0x8b, 0x15, 0x8a, 0xcc, 0x7b, 0x65, 0xd4, 0xa2, 0x13, 0xb8, 0xf8,
-    0x76, 0xfe, 0x3b, 0x0c, 0xf8, 0x6a, 0xc5, 0xed, 0x6a, 0x56, 0x2b, 0x63,
-    0xcc, 0x39, 0x7d, 0xff, 0xf7, 0xbd, 0x27, 0xcf, 0xfe, 0x5c, 0xa4, 0xeb,
-    0x17, 0xee, 0x71, 0x8a, 0x0b, 0x17, 0xff, 0x8b, 0x06, 0xd0, 0xf3, 0x91,
-    0x66, 0xeb, 0x17, 0xf3, 0xeb, 0x81, 0xc8, 0x16, 0x2f, 0xfd, 0xef, 0xbf,
-    0xbf, 0x85, 0x20, 0x58, 0xbf, 0x49, 0xaf, 0x17, 0x16, 0x2b, 0x0f, 0xa1,
-    0xcf, 0xae, 0x6d, 0x96, 0x2d, 0xd0, 0xc4, 0xcf, 0xf0, 0xa0, 0x09, 0x05,
-    0x09, 0x78, 0xe2, 0x0b, 0xf1, 0x85, 0x9c, 0x12, 0xc5, 0xff, 0xb0, 0x6f,
-    0xce, 0xfc, 0x26, 0xe2, 0xc5, 0xf8, 0xc6, 0x37, 0xee, 0xb1, 0x68, 0x18,
-    0x7d, 0x5c, 0x40, 0xbf, 0xee, 0x67, 0xa4, 0xef, 0xa8, 0x2c, 0x57, 0x6a,
-    0xb7, 0x1e, 0x38, 0xdf, 0xad, 0x14, 0x24, 0xfc, 0x53, 0x7b, 0x7c, 0x82,
-    0xc5, 0xfb, 0xe2, 0x29, 0xe8, 0xb1, 0x7e, 0xe3, 0x14, 0x25, 0x62, 0x96,
-    0x2f, 0xe2, 0x6f, 0x42, 0x4d, 0x58, 0xa9, 0x44, 0x5f, 0x0a, 0xbc, 0x4e,
-    0x18, 0x65, 0xfa, 0x36, 0x93, 0x64, 0x25, 0x8b, 0xe0, 0xa3, 0xc2, 0x8f,
-    0x58, 0xb8, 0xfc, 0x58, 0xbe, 0xd8, 0xce, 0xad, 0xd6, 0x2f, 0xce, 0x16,
-    0x77, 0xe5, 0x8b, 0xa4, 0x25, 0x8a, 0xf9, 0xe1, 0x11, 0x55, 0xfc, 0x70,
-    0xe4, 0x6d, 0xe5, 0x8b, 0xff, 0xde, 0x29, 0x03, 0x78, 0x52, 0x67, 0x59,
-    0x2b, 0x17, 0xf7, 0x1f, 0xdf, 0xc1, 0xac, 0x5f, 0x72, 0x75, 0xbf, 0x0f,
-    0xf7, 0xc9, 0xf7, 0xff, 0xfe, 0xe6, 0x1e, 0x77, 0xc2, 0x73, 0x43, 0xd0,
-    0xff, 0x8e, 0x46, 0xac, 0x5e, 0xda, 0x36, 0xeb, 0xb5, 0x8b, 0xd9, 0xdc,
-    0x16, 0x2e, 0x61, 0xac, 0x56, 0x1b, 0x56, 0x1e, 0xbd, 0xc7, 0x89, 0x62,
-    0x88, 0xde, 0xf0, 0x7e, 0xfc, 0xfd, 0x35, 0x87, 0x58, 0xac, 0x47, 0x39,
-    0xb0, 0x9d, 0xf9, 0x05, 0xb8, 0xb1, 0x78, 0xd7, 0x1a, 0xc5, 0xfc, 0xcd,
-    0xa0, 0xb3, 0xeb, 0x17, 0xf9, 0xe7, 0xd9, 0xd1, 0x86, 0xb1, 0x7f, 0xf6,
-    0x07, 0x3a, 0x03, 0xfb, 0x42, 0x3a, 0xc5, 0xef, 0x7b, 0xb5, 0x8b, 0xfd,
-    0x23, 0xfe, 0x6a, 0x60, 0xb1, 0x40, 0x3d, 0x22, 0x1f, 0xbf, 0xdf, 0x9d,
-    0x3e, 0xef, 0xd1, 0x62, 0x8d, 0x4d, 0xbe, 0x21, 0xed, 0x17, 0x11, 0xa7,
-    0x21, 0x31, 0xe2, 0x1b, 0xc4, 0xe7, 0x58, 0xb6, 0xeb, 0x15, 0x26, 0xbd,
-    0x87, 0x2f, 0xa0, 0xde, 0xe2, 0xc5, 0xff, 0xb6, 0x29, 0xed, 0xc6, 0x53,
-    0xb2, 0xc5, 0xfe, 0x07, 0x3c, 0x52, 0x7e, 0x2c, 0x5f, 0xe3, 0xcf, 0xdb,
-    0x93, 0x1e, 0xb1, 0x52, 0x7d, 0x4c, 0x69, 0x5b, 0xa6, 0x19, 0x10, 0xfb,
-    0x11, 0x94, 0x2a, 0xa8, 0x6b, 0xbd, 0xd8, 0x43, 0xbc, 0x2b, 0x3b, 0x3a,
-    0xd4, 0x6a, 0xa7, 0x35, 0xfc, 0x70, 0x25, 0x1c, 0xcd, 0xef, 0x39, 0xab,
-    0x17, 0xc6, 0x84, 0x33, 0xac, 0x5e, 0xd9, 0xc2, 0x58, 0xbf, 0x19, 0xf9,
-    0xd4, 0x16, 0x28, 0xc6, 0xc1, 0x02, 0x37, 0x20, 0x99, 0x6c, 0x3b, 0x42,
-    0x7f, 0x25, 0x7f, 0x9a, 0xad, 0xbc, 0x2a, 0x7b, 0x3d, 0x8f, 0x2f, 0x88,
-    0xb0, 0xe3, 0x0d, 0x3c, 0xb5, 0xc8, 0x45, 0xf8, 0x78, 0x44, 0xc1, 0x0f,
-    0xde, 0xfb, 0xf5, 0x2c, 0x5d, 0xc9, 0x58, 0xbe, 0xe3, 0x14, 0x16, 0x2a,
-    0x07, 0xb2, 0x72, 0x0e, 0x0b, 0xdf, 0xdb, 0x45, 0x08, 0xdb, 0x5b, 0x2c,
-    0x5d, 0x9b, 0xac, 0x5c, 0xfb, 0x2c, 0x57, 0x8d, 0x87, 0x50, 0xc5, 0xe2,
-    0x68, 0x2c, 0x52, 0xc5, 0xb8, 0xb1, 0x5b, 0x97, 0xdc, 0x0c, 0xbb, 0xe2,
-    0x58, 0xbd, 0x8d, 0xf5, 0x8b, 0xef, 0x03, 0x09, 0x62, 0xb6, 0x45, 0x88,
-    0xce, 0xb4, 0x42, 0x71, 0x82, 0x1c, 0xbe, 0x01, 0x3c, 0xac, 0x5b, 0x65,
-    0x8b, 0xfe, 0x1e, 0x1d, 0xfb, 0x81, 0x4a, 0xc5, 0xfb, 0xdf, 0x73, 0xe9,
-    0x62, 0xfc, 0xf0, 0xc2, 0x02, 0xc5, 0x41, 0x13, 0x8e, 0x27, 0xa3, 0x9e,
-    0x14, 0xde, 0xf8, 0xdd, 0x62, 0xdd, 0x16, 0x2f, 0xdf, 0xc7, 0x87, 0x16,
-    0x2f, 0xff, 0xbf, 0x21, 0xc6, 0x78, 0x98, 0x1c, 0xe4, 0x81, 0x22, 0xf1,
-    0xb3, 0xc5, 0x8b, 0xf6, 0x79, 0x85, 0xd7, 0xac, 0x5a, 0x3d, 0x62, 0xfd,
-    0xad, 0xd9, 0xb7, 0x5c, 0x80, 0x85, 0xee, 0x4f, 0x6b, 0x17, 0xb9, 0xa8,
-    0x2c, 0x5f, 0xff, 0xd0, 0x33, 0x3e, 0xc5, 0x9e, 0xe3, 0x7b, 0x99, 0xe5,
-    0x8a, 0x73, 0xf9, 0x61, 0xeb, 0x98, 0x6b, 0x16, 0x04, 0xa6, 0x35, 0x82,
-    0xbd, 0x9b, 0x9e, 0x12, 0xfe, 0x20, 0xbe, 0x2c, 0x0b, 0xa9, 0x62, 0xef,
-    0x71, 0x62, 0xe7, 0x02, 0xc5, 0x40, 0xd7, 0x8c, 0x62, 0xe7, 0xd9, 0x62,
-    0x9d, 0x11, 0xcc, 0xab, 0xe2, 0x1b, 0xc2, 0x2d, 0xd6, 0x2f, 0x99, 0x98,
-    0x35, 0x8b, 0xee, 0xc0, 0xf0, 0x58, 0xbf, 0xfe, 0xcf, 0xbe, 0xbe, 0xdc,
-    0x7f, 0x49, 0x6e, 0xb1, 0x7d, 0xb1, 0x31, 0xd6, 0x2e, 0x62, 0x58, 0xbf,
-    0x49, 0xbd, 0x42, 0xd2, 0xc5, 0x49, 0xf3, 0x6c, 0x47, 0xa1, 0x6a, 0xeb,
-    0x57, 0x13, 0xa0, 0x28, 0x32, 0x8c, 0x54, 0xec, 0x7b, 0x51, 0xa3, 0x9e,
-    0x1c, 0x7f, 0x2e, 0x61, 0xe2, 0x22, 0xe1, 0x27, 0xa1, 0x6b, 0x7d, 0x17,
-    0xf3, 0xcb, 0x17, 0xf3, 0x6b, 0x3a, 0x60, 0xd6, 0x2f, 0xdb, 0xb1, 0xbf,
-    0x75, 0x8a, 0x63, 0xfd, 0x01, 0x21, 0x17, 0xdf, 0x68, 0x6e, 0x75, 0x8b,
-    0xc3, 0x68, 0x2c, 0x5a, 0x0b, 0x15, 0x26, 0xbf, 0xa8, 0x76, 0xf1, 0x37,
-    0x16, 0x2f, 0xbd, 0xb3, 0x12, 0xc5, 0xe3, 0xce, 0xeb, 0x17, 0x31, 0xab,
-    0x15, 0x86, 0xd8, 0x87, 0xae, 0x6d, 0x2c, 0x5a, 0x0b, 0x17, 0xee, 0xf3,
-    0x82, 0x3a, 0xc5, 0xfb, 0x61, 0x7b, 0xa7, 0x96, 0x2e, 0x90, 0x2c, 0x56,
-    0x1e, 0x27, 0x8b, 0x6e, 0x3f, 0x16, 0x2a, 0x51, 0x73, 0x82, 0x46, 0xb7,
-    0x00, 0x86, 0xe0, 0x04, 0xb1, 0x6d, 0x2c, 0x5f, 0xe8, 0x6a, 0x76, 0x6d,
-    0x6e, 0xb1, 0x7f, 0xf6, 0x00, 0x5c, 0x6d, 0x9c, 0xa7, 0xb5, 0x8a, 0x31,
-    0x14, 0xce, 0x32, 0xc2, 0x44, 0x6d, 0x67, 0x58, 0xbf, 0xff, 0x37, 0x60,
-    0xdf, 0xef, 0x11, 0x30, 0x5e, 0xcf, 0xac, 0x5e, 0x35, 0xfc, 0xb1, 0x7b,
-    0x8d, 0xe5, 0x8b, 0xf9, 0xf6, 0x9f, 0x48, 0xd6, 0x2a, 0x51, 0xa7, 0x82,
-    0x26, 0xac, 0xf6, 0x3c, 0xc3, 0xb7, 0x19, 0xf5, 0x8b, 0xf7, 0x9c, 0x62,
-    0x95, 0x8b, 0xe6, 0x86, 0x0d, 0x62, 0x8e, 0x79, 0x44, 0x51, 0x62, 0x58,
-    0xb6, 0xeb, 0x16, 0x3c, 0x9a, 0x4f, 0x08, 0xdb, 0xd2, 0x7d, 0x78, 0x8b,
-    0x7f, 0x7b, 0x22, 0x83, 0x01, 0x62, 0xfe, 0x93, 0xe1, 0xb3, 0xc5, 0x8a,
-    0xd9, 0x74, 0x46, 0x04, 0x78, 0x39, 0xba, 0xcc, 0x78, 0xfe, 0xa1, 0xa0,
-    0x78, 0x71, 0x7e, 0x30, 0xe0, 0x24, 0x94, 0x33, 0xb8, 0x4d, 0xe2, 0xfb,
-    0xff, 0x16, 0x6a, 0x19, 0x00, 0xda, 0x3d, 0x62, 0xff, 0xd0, 0x7d, 0xe4,
-    0xf3, 0x1e, 0xda, 0x58, 0xbf, 0x75, 0x7b, 0x08, 0x0b, 0x17, 0x1e, 0x56,
-    0x2a, 0x51, 0x09, 0x88, 0x4e, 0x57, 0x7f, 0xd0, 0x33, 0x27, 0x7d, 0xf0,
-    0x96, 0x2f, 0x7d, 0xf4, 0xb1, 0x43, 0x3d, 0x8f, 0x1d, 0xdf, 0xbe, 0x58,
-    0xfe, 0x58, 0xba, 0x4e, 0xb1, 0x7b, 0x35, 0x8b, 0x15, 0xb9, 0xb3, 0x38,
-    0xbd, 0xff, 0x7d, 0xc5, 0xd7, 0x87, 0xb0, 0x89, 0x62, 0xff, 0x7f, 0x3b,
-    0x87, 0x9e, 0x25, 0x8a, 0x81, 0xfb, 0x81, 0x06, 0xa5, 0x31, 0x5c, 0x5a,
-    0x14, 0x26, 0x6e, 0xcd, 0x96, 0x2c, 0x25, 0x8a, 0x19, 0xaa, 0xd0, 0xc5,
-    0xfe, 0x9c, 0x2f, 0x72, 0x3b, 0xa2, 0xc5, 0xfd, 0x31, 0xff, 0x76, 0x82,
-    0xc5, 0xe9, 0xe1, 0x87, 0x3e, 0x82, 0x38, 0xbf, 0x98, 0x2e, 0x72, 0x40,
-    0xb1, 0x5f, 0x3e, 0x22, 0x33, 0xb9, 0xb4, 0xb1, 0x73, 0x04, 0xb1, 0x52,
-    0x6b, 0xc4, 0x2f, 0x7f, 0xef, 0xb1, 0x7b, 0x84, 0x26, 0x0d, 0x62, 0xff,
-    0xb5, 0xa7, 0xee, 0x1e, 0x6e, 0xd6, 0x2f, 0x47, 0x31, 0xab, 0x17, 0xfd,
-    0x27, 0x86, 0x6d, 0x82, 0xeb, 0xd6, 0x2f, 0xfa, 0x40, 0xf0, 0xfb, 0x90,
-    0x16, 0x2d, 0xb2, 0xc5, 0xcd, 0xed, 0x1e, 0x5f, 0x5e, 0x71, 0x58, 0x8d,
-    0xd7, 0x21, 0x68, 0x45, 0x5c, 0xdb, 0x2c, 0x5d, 0x21, 0xac, 0x53, 0x1b,
-    0x00, 0x86, 0x2f, 0xfe, 0x6e, 0x07, 0xe7, 0x21, 0x43, 0x38, 0xb1, 0x78,
-    0x20, 0x82, 0x5c, 0x1f, 0x4c, 0x6e, 0x21, 0xae, 0x0f, 0xa8, 0xa3, 0x0d,
-    0x9d, 0x4a, 0x2c, 0xd9, 0xe2, 0xe0, 0x32, 0xc5, 0xff, 0xd2, 0x6e, 0x78,
-    0x3d, 0xbd, 0x09, 0x35, 0x62, 0xfa, 0x02, 0x93, 0x56, 0x2f, 0xfb, 0x6d,
-    0x4f, 0x9f, 0x77, 0x1a, 0xc5, 0x80, 0xb1, 0x50, 0x45, 0xd6, 0x24, 0xb9,
-    0x23, 0x1d, 0xde, 0x26, 0x02, 0xc5, 0x4a, 0xe9, 0x88, 0xe1, 0xd6, 0x6a,
-    0x86, 0xe4, 0x0e, 0x7f, 0xa8, 0xc6, 0x7e, 0xc4, 0x08, 0x6a, 0x11, 0x0f,
-    0xa1, 0xa2, 0x19, 0xd5, 0xfe, 0x1f, 0xd8, 0xe1, 0xc9, 0x2c, 0x5f, 0xdf,
-    0xc8, 0x7d, 0xfa, 0x2c, 0x54, 0x79, 0xf2, 0x78, 0xd2, 0xc4, 0xb1, 0x7b,
-    0x42, 0xd9, 0x62, 0xa0, 0x6c, 0x0e, 0x23, 0x7f, 0xfc, 0x4e, 0x6c, 0x67,
-    0x3d, 0xf1, 0x34, 0x21, 0x2b, 0x17, 0xed, 0xde, 0x4a, 0x0b, 0x15, 0x28,
-    0x9d, 0xc2, 0x10, 0x95, 0x2f, 0xdf, 0xcf, 0x72, 0x56, 0x2d, 0xd1, 0x62,
-    0xfc, 0x5e, 0x16, 0x7d, 0x62, 0xc2, 0x58, 0xa5, 0x8a, 0x30, 0xbe, 0x10,
-    0x95, 0x49, 0xf3, 0xec, 0x8d, 0x77, 0x53, 0xac, 0x5d, 0xd2, 0x56, 0x2f,
-    0xfc, 0x33, 0x0b, 0x02, 0x60, 0x19, 0x1c, 0xb1, 0x7b, 0xd9, 0xa5, 0x8a,
-    0xc3, 0xe2, 0xe2, 0x2d, 0x6c, 0xae, 0xc2, 0x11, 0x8a, 0x1b, 0x0f, 0x2d,
-    0xcb, 0xe2, 0x28, 0xd3, 0xdb, 0x11, 0x70, 0x6b, 0xcf, 0x77, 0x86, 0xd0,
-    0x58, 0xb9, 0xf4, 0xb1, 0x58, 0x6d, 0x3e, 0x3b, 0x7f, 0x8b, 0x38, 0x6e,
-    0xb3, 0x8b, 0x17, 0xfb, 0xb9, 0xf6, 0x67, 0x70, 0x58, 0xae, 0x87, 0xd2,
-    0x11, 0xa5, 0xe2, 0x73, 0xac, 0x5f, 0xc3, 0x72, 0xd8, 0x3e, 0xd6, 0x28,
-    0x8f, 0x34, 0x21, 0xca, 0xc4, 0x4a, 0x33, 0x95, 0xec, 0xe8, 0x1a, 0xc5,
-    0xff, 0xff, 0xdb, 0x94, 0x9f, 0x07, 0x9a, 0xd6, 0x71, 0xd8, 0xf8, 0x39,
-    0x3a, 0xc5, 0xcf, 0xf5, 0x8b, 0x9f, 0xa2, 0xc5, 0xa0, 0xb1, 0x52, 0x6a,
-    0xd8, 0x66, 0xff, 0xc2, 0x63, 0xce, 0xb8, 0xe5, 0x12, 0xc5, 0x0c, 0xf7,
-    0x88, 0x7e, 0xf7, 0x4c, 0x1a, 0xc5, 0xfa, 0x4e, 0x53, 0x12, 0xc5, 0x61,
-    0xe3, 0x9a, 0x3f, 0x7c, 0xc7, 0xc3, 0xac, 0x5f, 0xce, 0x4d, 0xe1, 0x79,
-    0x62, 0xf9, 0xcf, 0x31, 0xeb, 0x17, 0x3e, 0x8c, 0x3f, 0x49, 0x22, 0xc2,
-    0xda, 0x95, 0x48, 0xe3, 0x70, 0xc8, 0x50, 0x69, 0xa3, 0xf0, 0x96, 0xba,
-    0x35, 0xc4, 0xb1, 0x7e, 0xce, 0x7c, 0x5c, 0x58, 0xae, 0x1e, 0x47, 0x87,
-    0xef, 0xcf, 0xb9, 0x36, 0xeb, 0x17, 0xd8, 0x76, 0xed, 0x62, 0xf8, 0xec,
-    0x58, 0xb1, 0x7e, 0xf1, 0x66, 0xa5, 0x62, 0xe0, 0x47, 0xac, 0x56, 0xc7,
-    0x84, 0x44, 0xf5, 0x28, 0xd1, 0xc2, 0x97, 0x23, 0x66, 0x3b, 0x8a, 0x25,
-    0x8b, 0x9b, 0xcb, 0x14, 0xb1, 0x4b, 0x16, 0x6f, 0x17, 0x1d, 0x41, 0x95,
-    0x27, 0xdf, 0xb0, 0xc0, 0x0b, 0xef, 0x3c, 0xc1, 0x62, 0x8c, 0x74, 0x29,
-    0x91, 0xb9, 0x7c, 0x6c, 0xd1, 0x30, 0xd5, 0xd9, 0x2a, 0x10, 0xbd, 0x19,
-    0xe6, 0x4e, 0x35, 0x9b, 0x19, 0xc6, 0xe5, 0xaf, 0x3a, 0xc7, 0x14, 0x30,
-    0x35, 0x0c, 0x63, 0xc2, 0x17, 0xf1, 0x9b, 0xb5, 0x24, 0xfc, 0x10, 0xc2,
-    0x28, 0xc7, 0x78, 0x42, 0x29, 0x4c, 0xe1, 0x42, 0x72, 0x3a, 0x1e, 0x61,
-    0xc2, 0xa3, 0xa8, 0xbe, 0xfc, 0x18, 0xc5, 0xee, 0x2c, 0x5e, 0x86, 0x79,
-    0x62, 0xff, 0x9f, 0xed, 0xa9, 0x37, 0x22, 0x58, 0xbe, 0x7f, 0xe0, 0xd6,
-    0x2f, 0xff, 0xbf, 0x2d, 0xae, 0x73, 0x3e, 0xfc, 0x16, 0xcb, 0x17, 0xd9,
-    0xf6, 0x3a, 0xc5, 0xbd, 0x28, 0xcf, 0x39, 0xd7, 0x08, 0x83, 0x51, 0xbf,
-    0xec, 0x17, 0x86, 0xfa, 0x6e, 0x2c, 0x5f, 0x87, 0x3f, 0x90, 0xd6, 0x2c,
-    0x12, 0xc5, 0x76, 0x9d, 0x23, 0x43, 0xb3, 0x88, 0x62, 0x39, 0x0c, 0xa6,
-    0xff, 0x9b, 0x85, 0x9d, 0x1f, 0xe2, 0x58, 0xbf, 0x7f, 0x37, 0x16, 0x2c,
-    0x5d, 0x9c, 0x58, 0xac, 0x3c, 0x06, 0x29, 0xbf, 0xe2, 0xcf, 0x4f, 0x47,
-    0x20, 0x2c, 0x5f, 0xef, 0x4f, 0x47, 0xf4, 0x25, 0x62, 0xff, 0xb7, 0x7e,
-    0x60, 0xf6, 0xc0, 0x96, 0x2f, 0xff, 0xec, 0x0e, 0x74, 0x07, 0xf6, 0x84,
-    0x7e, 0x7b, 0x34, 0xb1, 0x7e, 0x38, 0x73, 0xa0, 0x2c, 0x56, 0x23, 0xe3,
-    0xe6, 0xa4, 0x78, 0x1a, 0xed, 0xf3, 0x16, 0x47, 0xac, 0x5a, 0x3d, 0x62,
-    0x86, 0x6e, 0x7c, 0x49, 0x58, 0x9e, 0x38, 0x23, 0x31, 0xe3, 0xad, 0x2c,
-    0x5f, 0x9f, 0xdc, 0x14, 0x7a, 0xc5, 0xb4, 0x73, 0x71, 0xf0, 0xcb, 0xe7,
-    0xf4, 0xc1, 0x62, 0xff, 0x09, 0x9e, 0x12, 0x5b, 0xac, 0x56, 0x1f, 0xe7,
-    0xc9, 0xf8, 0x45, 0x7d, 0xee, 0xf9, 0x8b, 0x17, 0x37, 0x45, 0x8b, 0x74,
-    0x58, 0xa7, 0x35, 0xac, 0x33, 0x7b, 0xf8, 0x05, 0x8b, 0xff, 0x3e, 0xbe,
-    0xdc, 0x37, 0x5e, 0xdd, 0x62, 0xf8, 0x01, 0xcf, 0x16, 0x2f, 0xcf, 0xe9,
-    0xf7, 0x12, 0x2f, 0xb7, 0x9f, 0x71, 0x22, 0xe0, 0x82, 0x48, 0xa8, 0x1f,
-    0x36, 0x14, 0x04, 0x49, 0x49, 0x11, 0x86, 0xbe, 0xa0, 0x99, 0xbf, 0xc7,
-    0x49, 0x08, 0x28, 0x5c, 0xde, 0x62, 0x02, 0xc5, 0xa3, 0x52, 0xc5, 0xe6,
-    0xfb, 0x2c, 0x5f, 0x45, 0xf9, 0x25, 0x8b, 0xef, 0x07, 0x20, 0x58, 0xaf,
-    0x1e, 0x38, 0x44, 0x77, 0xec, 0xe7, 0xb2, 0x3d, 0x62, 0xa5, 0x56, 0x78,
-    0xd4, 0x72, 0x35, 0x63, 0x50, 0xce, 0x39, 0xf1, 0x86, 0x63, 0xf1, 0x1d,
-    0xe2, 0x60, 0x96, 0x2f, 0xee, 0x0f, 0xf2, 0x5b, 0x2c, 0x5f, 0xbe, 0xf3,
-    0xa0, 0x2c, 0x54, 0x47, 0xe8, 0x01, 0xdf, 0x17, 0xdd, 0xf7, 0x58, 0xbc,
-    0xfd, 0x31, 0x62, 0xa2, 0x36, 0xba, 0x17, 0xbe, 0x9e, 0x9f, 0x95, 0x8b,
-    0xfb, 0xad, 0xf7, 0x7b, 0xbf, 0xd6, 0x28, 0x8f, 0x6b, 0x84, 0x97, 0xfb,
-    0x53, 0xf9, 0x72, 0xd9, 0x62, 0xfe, 0x0f, 0x35, 0xdf, 0x25, 0x62, 0xff,
-    0xe7, 0xf8, 0xa3, 0x6e, 0x7b, 0xee, 0xc0, 0x58, 0xa3, 0x9f, 0xd7, 0x8c,
-    0x2e, 0xce, 0x2c, 0x56, 0x1b, 0x9f, 0x91, 0x5f, 0xf6, 0x17, 0xbe, 0xf2,
-    0x5b, 0x2c, 0x5f, 0xff, 0xef, 0xe1, 0xc3, 0x90, 0x6a, 0x78, 0x59, 0xd1,
-    0xfe, 0x25, 0x8b, 0xde, 0x9d, 0xf1, 0x13, 0x7e, 0x38, 0xbf, 0xfc, 0x13,
-    0x73, 0xcf, 0xf7, 0xc3, 0x5f, 0x4b, 0x14, 0xb1, 0x52, 0xa8, 0xb0, 0x70,
-    0xe6, 0xc8, 0x5d, 0xfc, 0xd3, 0x89, 0x75, 0xb3, 0x33, 0x54, 0x71, 0xe7,
-    0xee, 0xa3, 0x13, 0xd6, 0xa3, 0xe7, 0x3c, 0x3a, 0x81, 0x2b, 0xf4, 0xa1,
-    0xd7, 0xc6, 0x5f, 0x3e, 0x05, 0x29, 0x36, 0xfd, 0x3f, 0x98, 0xe6, 0x58,
-    0xbd, 0xf9, 0x1a, 0xc5, 0x6c, 0x78, 0xe7, 0x2a, 0xbf, 0x9f, 0x36, 0x3b,
-    0xf9, 0x62, 0xff, 0x42, 0x63, 0xdc, 0xb2, 0x25, 0x8b, 0xe1, 0xfd, 0xa3,
-    0xd6, 0x2f, 0xa1, 0xfc, 0xd9, 0x62, 0xa4, 0xf2, 0x98, 0x9a, 0xc1, 0x2c,
-    0x5f, 0x45, 0x1e, 0x40, 0x58, 0xb1, 0x00, 0xdd, 0x78, 0x4e, 0xec, 0xf2,
-    0xc5, 0x4a, 0x6d, 0x1a, 0x23, 0x62, 0xe2, 0x84, 0x00, 0x96, 0xa3, 0x89,
-    0xaf, 0xe2, 0x98, 0x6b, 0x52, 0xb1, 0x7f, 0xc3, 0x9f, 0xcc, 0x20, 0x14,
-    0xac, 0x58, 0x0b, 0x16, 0x97, 0x3c, 0xcd, 0x1d, 0x5f, 0x14, 0xf6, 0x0c,
-    0x44, 0xff, 0xde, 0x6f, 0xe8, 0x37, 0x9c, 0x5c, 0x58, 0xbf, 0xf7, 0xb9,
-    0x9b, 0xfd, 0x8b, 0xdc, 0x58, 0xbc, 0xe4, 0x05, 0x83, 0x0f, 0x02, 0x8e,
-    0x8d, 0x52, 0x39, 0xe8, 0xdd, 0x77, 0x3c, 0xb1, 0x7f, 0xe3, 0xbe, 0x1f,
-    0xdc, 0x11, 0x79, 0x62, 0xff, 0xfe, 0xd0, 0xb9, 0xf6, 0x86, 0xff, 0x7e,
-    0xe1, 0x2d, 0x05, 0x8a, 0x35, 0x13, 0xbe, 0x3f, 0xbf, 0xf7, 0x9f, 0x9b,
-    0x60, 0x59, 0xdf, 0x96, 0x2f, 0xff, 0xf7, 0xdc, 0x85, 0xe8, 0x49, 0xa2,
-    0xfc, 0x9f, 0x3b, 0xf2, 0xc5, 0xff, 0xd3, 0xbf, 0xdf, 0xd9, 0x11, 0x49,
-    0xf1, 0x14, 0xbb, 0xa1, 0x5f, 0xff, 0x31, 0xfd, 0xf6, 0x3e, 0x42, 0x41,
-    0xcc, 0x58, 0xad, 0xd1, 0x56, 0x4b, 0x95, 0x29, 0xcb, 0xe4, 0x6e, 0x97,
-    0xfd, 0x9a, 0x03, 0xfb, 0x42, 0x3a, 0xc5, 0x4a, 0xad, 0xfc, 0x31, 0xfc,
-    0xa4, 0xc8, 0xe2, 0x8b, 0x6c, 0xb1, 0x7f, 0x72, 0x42, 0xf6, 0x6e, 0xb1,
-    0x7f, 0xd9, 0xd1, 0xb4, 0xd0, 0x68, 0x2c, 0x58, 0x7b, 0x9f, 0xef, 0x62,
-    0x7c, 0x30, 0xbc, 0x45, 0xc5, 0x8b, 0xff, 0xdf, 0x78, 0x89, 0x82, 0xf6,
-    0x7c, 0x33, 0xac, 0x5f, 0xe8, 0x4e, 0x17, 0x84, 0xcb, 0x16, 0xdb, 0x73,
-    0xff, 0xed, 0x36, 0xa5, 0x1f, 0xac, 0x6e, 0x28, 0x4d, 0xdf, 0xd3, 0xf9,
-    0xfc, 0xec, 0xb1, 0x7b, 0xd2, 0x35, 0x8b, 0xff, 0x3b, 0x77, 0x0f, 0x70,
-    0x9c, 0xd5, 0x8b, 0xfb, 0x23, 0x85, 0xf7, 0xd2, 0xc5, 0x40, 0xfc, 0x43,
-    0x40, 0xa9, 0x45, 0x8e, 0x42, 0x3a, 0xb6, 0x4c, 0x16, 0x10, 0xdf, 0xb7,
-    0x16, 0x29, 0x62, 0x98, 0xbe, 0x08, 0x4a, 0xa4, 0xfa, 0x19, 0x22, 0xff,
-    0x61, 0xd8, 0xbd, 0xc9, 0x58, 0xb8, 0x72, 0xb1, 0x70, 0x1d, 0x62, 0xb4,
-    0x7c, 0x07, 0x32, 0x21, 0x7b, 0xff, 0xc2, 0x00, 0x7b, 0x0f, 0x0b, 0x02,
-    0x60, 0x2c, 0x50, 0xd5, 0x4d, 0xfe, 0x3a, 0x06, 0x84, 0x01, 0x17, 0x5f,
-    0x4f, 0x47, 0x1a, 0xc5, 0xfa, 0x1f, 0x14, 0xe9, 0x62, 0xfb, 0xee, 0x17,
-    0x16, 0x2f, 0xf4, 0xf4, 0x7e, 0x84, 0x2e, 0x2c, 0x5f, 0xcf, 0xc6, 0xee,
-    0x18, 0xb1, 0x73, 0x1f, 0x74, 0x44, 0xe8, 0x92, 0x38, 0xde, 0xf8, 0xbc,
-    0xff, 0x58, 0xbc, 0xfa, 0x35, 0x62, 0xff, 0x3c, 0xf8, 0xa4, 0xfc, 0x58,
-    0xae, 0xd3, 0x63, 0xfc, 0x2c, 0x98, 0xfc, 0x04, 0x44, 0x3d, 0x7f, 0x41,
-    0xcb, 0xd2, 0x05, 0x8a, 0x58, 0xb8, 0x53, 0x11, 0xb9, 0x01, 0x6d, 0xfb,
-    0x04, 0x79, 0xe2, 0xc5, 0x2c, 0x5d, 0x91, 0x68, 0xda, 0x70, 0xa2, 0xff,
-    0x9c, 0x5d, 0x7f, 0xe4, 0x32, 0xd9, 0x62, 0xfd, 0xdf, 0x8b, 0x36, 0x58,
-    0xbf, 0x9f, 0xdc, 0x72, 0x89, 0x62, 0xa4, 0xf6, 0x3e, 0x55, 0x7f, 0xc3,
-    0xfc, 0x8d, 0xfa, 0x48, 0xd6, 0x2d, 0x3b, 0x1e, 0xe4, 0x44, 0x37, 0xfd,
-    0x91, 0x36, 0x7e, 0x72, 0x25, 0x8b, 0xff, 0x3f, 0x7c, 0x1f, 0xe4, 0xed,
-    0xe5, 0x8b, 0xff, 0xe6, 0x3f, 0xfe, 0x1e, 0x8b, 0x3d, 0xa9, 0x09, 0x62,
-    0xf7, 0x53, 0x84, 0xb1, 0x43, 0x55, 0x2f, 0x8c, 0x3b, 0x96, 0xbc, 0x3d,
-    0x34, 0x52, 0x47, 0x3c, 0x40, 0xea, 0x52, 0xbe, 0xef, 0xf9, 0xb2, 0xc5,
-    0xff, 0xc1, 0xf1, 0xf9, 0x13, 0x8f, 0x08, 0x0b, 0x17, 0xa0, 0x4c, 0xb1,
-    0x7c, 0xde, 0xcd, 0x96, 0x2e, 0x9e, 0xd6, 0x2e, 0x29, 0x58, 0xb1, 0xe4,
-    0xfb, 0x7e, 0x38, 0x44, 0x7e, 0x18, 0xbf, 0x3e, 0xb9, 0x9a, 0x58, 0xbd,
-    0x21, 0x92, 0xc5, 0xd9, 0x16, 0x1e, 0x2f, 0xca, 0x2f, 0xed, 0x4b, 0xc1,
-    0xb8, 0xb1, 0x7e, 0xf0, 0x03, 0x28, 0x2c, 0x5f, 0xf8, 0xa7, 0xec, 0xfe,
-    0x9f, 0x71, 0x62, 0xe6, 0x8f, 0x31, 0x12, 0x8c, 0x5a, 0x19, 0x55, 0x4a,
-    0x60, 0x02, 0x86, 0x0d, 0xfc, 0x42, 0x63, 0xcc, 0x7a, 0xc5, 0x4a, 0xab,
-    0x51, 0x92, 0xb4, 0x2c, 0xca, 0x38, 0x5f, 0x14, 0x5f, 0xd0, 0xe3, 0x97,
-    0x70, 0x58, 0xbf, 0xf7, 0xdc, 0x2f, 0xcc, 0x3e, 0x21, 0xac, 0x5b, 0x16,
-    0x29, 0x62, 0xcf, 0xa2, 0xf7, 0xa0, 0x8d, 0xf6, 0x00, 0xfc, 0x58, 0xa9,
-    0x46, 0xb9, 0xa5, 0xfb, 0xaf, 0x78, 0x9e, 0xe7, 0xe8, 0xb1, 0x7f, 0xec,
-    0x8f, 0xd8, 0x5a, 0x86, 0x77, 0xe5, 0x8a, 0x63, 0xde, 0x21, 0x9b, 0xf3,
-    0xf3, 0x33, 0x4b, 0x17, 0xf7, 0x00, 0xdd, 0x30, 0x6b, 0x17, 0xff, 0xff,
-    0xfd, 0x0f, 0xe1, 0x61, 0xb8, 0x40, 0xcc, 0x0d, 0xb4, 0x03, 0xe3, 0x41,
-    0xf8, 0x0c, 0x02, 0xc5, 0xc2, 0xe1, 0x88, 0xc2, 0xc3, 0x0a, 0xd2, 0x63,
-    0x05, 0x0e, 0x9b, 0xff, 0xce, 0xdd, 0x99, 0xc9, 0xd3, 0x41, 0xfe, 0xb1,
-    0x46, 0x32, 0xd1, 0xa2, 0x8e, 0x1f, 0x52, 0xc7, 0xff, 0x2c, 0xb8, 0xa3,
-    0x2b, 0xe4, 0x27, 0x3a, 0x46, 0x71, 0xd4, 0x51, 0x71, 0x6c, 0xb1, 0x7b,
-    0xf9, 0xb2, 0xc5, 0xa3, 0x96, 0x2f, 0xfc, 0xc1, 0xef, 0x3a, 0x7f, 0x7a,
-    0x56, 0x2b, 0x0f, 0xcd, 0x87, 0x88, 0x56, 0xf4, 0x1b, 0x4b, 0x17, 0x4f,
-    0x96, 0x2f, 0xc7, 0x68, 0x60, 0xd6, 0x29, 0xcd, 0xf8, 0x05, 0xef, 0x0b,
-    0xf8, 0xb1, 0x7c, 0xdd, 0xf2, 0x0b, 0x16, 0x12, 0xc5, 0xe7, 0x68, 0x2c,
-    0x5f, 0x7e, 0x4b, 0xcb, 0x14, 0x61, 0xbe, 0xe0, 0xe5, 0xb3, 0x87, 0xe5,
-    0xd1, 0x42, 0xfb, 0x3d, 0x83, 0x48, 0xbf, 0xe6, 0x23, 0x70, 0x9b, 0xdc,
-    0x58, 0xbe, 0x63, 0x40, 0x12, 0xc5, 0xfb, 0x0d, 0xf6, 0x6e, 0xb1, 0x50,
-    0x45, 0x4f, 0xc8, 0x88, 0xe3, 0x84, 0xb7, 0xd2, 0x45, 0x2b, 0x15, 0x12,
-    0xa5, 0xdd, 0x2e, 0x1c, 0x80, 0x03, 0xa5, 0x09, 0x6f, 0x43, 0x48, 0x33,
-    0xcb, 0xf9, 0x82, 0x6f, 0x31, 0xab, 0x17, 0xb8, 0x7d, 0x2c, 0x5c, 0xfb,
-    0xac, 0x50, 0x0d, 0xb7, 0x07, 0xab, 0x17, 0x02, 0xcd, 0x84, 0x5b, 0xca,
-    0x89, 0xd3, 0x8f, 0x99, 0x6f, 0x38, 0x5c, 0x58, 0xbd, 0xc7, 0xe8, 0xb1,
-    0x7f, 0xfa, 0x4e, 0x53, 0xd8, 0x18, 0x85, 0x9f, 0x58, 0xbf, 0xfa, 0x01,
-    0xf0, 0x18, 0x2d, 0xe4, 0x80, 0xb1, 0x7f, 0x6c, 0xc4, 0x2c, 0xfa, 0xc5,
-    0xff, 0xa3, 0x6c, 0x18, 0xbc, 0xfe, 0x9d, 0x2c, 0x5f, 0x3e, 0x8c, 0xc5,
-    0x8b, 0xfc, 0xda, 0x9d, 0x9b, 0x5b, 0xac, 0x5f, 0xd2, 0x2e, 0xbf, 0x07,
-    0x2b, 0x14, 0x6a, 0x22, 0xbe, 0x47, 0xe3, 0x5b, 0xff, 0xec, 0xd9, 0xcd,
-    0xff, 0xe4, 0xe3, 0x7c, 0x09, 0x62, 0xfb, 0xb8, 0x67, 0xba, 0xd4, 0xd4,
-    0x72, 0x19, 0xc4, 0x63, 0x7f, 0x79, 0xf5, 0x22, 0xeb, 0xd6, 0x2a, 0x0a,
-    0xa4, 0xfb, 0x49, 0x74, 0x7f, 0xc6, 0xfe, 0x1a, 0x8d, 0xb5, 0x2a, 0xc1,
-    0x5a, 0x55, 0x95, 0xef, 0xe6, 0xcb, 0x17, 0xa1, 0x09, 0x58, 0xbd, 0x9f,
-    0xc3, 0x0d, 0xd8, 0x87, 0xab, 0x75, 0x78, 0x0d, 0x2c, 0x8c, 0x9a, 0xee,
-    0x71, 0x2c, 0x5f, 0xf9, 0xf6, 0xf7, 0x05, 0x1f, 0xe6, 0xfa, 0xc5, 0x40,
-    0xf6, 0xfc, 0x2f, 0x7f, 0xb6, 0x33, 0xc4, 0xdd, 0xf1, 0x62, 0xfe, 0x6f,
-    0x79, 0xcb, 0x65, 0x8b, 0xff, 0xd9, 0xe7, 0xc2, 0xfe, 0x7b, 0xef, 0xba,
-    0xc5, 0x7c, 0xfd, 0xc8, 0xba, 0xf7, 0x4d, 0x1d, 0x62, 0xfd, 0x3a, 0xf6,
-    0x47, 0xac, 0x5f, 0xf7, 0x9c, 0xfc, 0xfc, 0x86, 0x4b, 0x17, 0x8b, 0x3c,
-    0xb1, 0x7f, 0x3f, 0x39, 0x3f, 0x95, 0x8a, 0x73, 0xc9, 0x21, 0xcb, 0xff,
-    0x89, 0xf7, 0xe7, 0xe5, 0xfc, 0xfe, 0x58, 0xbc, 0xdd, 0x80, 0xc4, 0xd4,
-    0xf6, 0x21, 0xdc, 0x83, 0xb2, 0xb7, 0x84, 0x1e, 0x88, 0x2f, 0xa4, 0xb7,
-    0x67, 0x54, 0xe7, 0xe9, 0x40, 0x37, 0xf9, 0xc1, 0xc3, 0x3a, 0x87, 0xba,
-    0xc5, 0xff, 0xe8, 0xb0, 0x65, 0x8f, 0xac, 0xf4, 0xe9, 0x62, 0xff, 0xa7,
-    0x3b, 0xcd, 0x82, 0x6e, 0xd6, 0x2f, 0xf9, 0x82, 0xd6, 0x3f, 0xe4, 0x6b,
-    0x15, 0x28, 0xbe, 0xd2, 0x49, 0x1e, 0x54, 0x15, 0xfe, 0x02, 0x54, 0xaf,
-    0x10, 0x7d, 0x0f, 0x8b, 0xf8, 0x5d, 0x7b, 0xeb, 0x58, 0xb1, 0x7f, 0xfe,
-    0xce, 0xe1, 0xe7, 0xdb, 0x35, 0xef, 0x3e, 0xa5, 0x62, 0xf6, 0x77, 0x05,
-    0x8b, 0xcd, 0xe7, 0x58, 0xbf, 0xee, 0xfc, 0xde, 0x29, 0xcf, 0xac, 0x5f,
-    0xef, 0xe1, 0xad, 0x2f, 0x1c, 0xb1, 0x7f, 0xb3, 0x99, 0x1f, 0xf9, 0x1a,
-    0xc5, 0xcc, 0x05, 0x8b, 0xa7, 0x65, 0x8b, 0xdf, 0x98, 0x96, 0x2f, 0xf4,
-    0xb9, 0x66, 0xc1, 0xc1, 0x62, 0xdd, 0x8c, 0xfa, 0xb0, 0x63, 0xe3, 0xd7,
-    0xe6, 0x88, 0x9e, 0x25, 0x8a, 0xc4, 0xe1, 0x37, 0x39, 0xf9, 0xb7, 0x8d,
-    0x85, 0x08, 0x1e, 0x86, 0xb5, 0x8a, 0x9d, 0x3e, 0xae, 0xc3, 0xdc, 0x8e,
-    0x82, 0xf1, 0xa3, 0xc5, 0x8b, 0x9f, 0x4b, 0x15, 0x26, 0xd7, 0xa0, 0xf5,
-    0xf7, 0x8d, 0xcf, 0xac, 0x5e, 0x27, 0x95, 0x8b, 0xc7, 0xee, 0x56, 0x2d,
-    0x05, 0x8a, 0x93, 0x61, 0xa1, 0xeb, 0xff, 0x16, 0x7b, 0xc2, 0xdb, 0xd9,
-    0xba, 0xc5, 0xff, 0xf0, 0xfd, 0xc9, 0x80, 0xd8, 0x18, 0x37, 0xe2, 0xc5,
-    0xff, 0x3f, 0x27, 0xcf, 0xf9, 0x3a, 0xc5, 0xf0, 0x9b, 0x50, 0x58, 0xbf,
-    0x8b, 0xd3, 0xf7, 0xe2, 0xc5, 0xfb, 0x3d, 0xe7, 0xed, 0x62, 0xff, 0x16,
-    0x45, 0xf9, 0xd6, 0xcb, 0x17, 0xfc, 0x32, 0x9e, 0xfc, 0x2c, 0xd2, 0xc5,
-    0xd2, 0x6c, 0xa3, 0x14, 0x8b, 0x78, 0x53, 0xe3, 0x5a, 0x94, 0xed, 0xe0,
-    0xa0, 0x33, 0x83, 0xc3, 0xa2, 0xff, 0x88, 0x5e, 0xfe, 0x74, 0x1c, 0xac,
-    0x5f, 0xcd, 0xdf, 0x33, 0xbf, 0x2c, 0x5d, 0x81, 0x2c, 0x56, 0x22, 0x0c,
-    0x07, 0x64, 0x61, 0x7c, 0x7e, 0x06, 0x75, 0x8b, 0xfb, 0xd9, 0xf9, 0xef,
-    0x8b, 0x15, 0x28, 0x82, 0xc2, 0xe1, 0x12, 0xdb, 0x8b, 0x16, 0x09, 0x62,
-    0xc3, 0x58, 0xb9, 0xc0, 0xb1, 0x7c, 0x13, 0x14, 0x16, 0x2e, 0x1b, 0xac,
-    0x5d, 0xf7, 0x58, 0xbe, 0x87, 0x3f, 0x8b, 0x17, 0x85, 0xd7, 0xe2, 0xc5,
-    0xfd, 0xdf, 0x30, 0x13, 0xd1, 0x62, 0x9c, 0xf4, 0xd8, 0x8a, 0xdc, 0x31,
-    0x1f, 0xc3, 0x17, 0xdc, 0x8e, 0x21, 0x76, 0x17, 0x03, 0xb5, 0x3a, 0x70,
-    0x4c, 0x26, 0x28, 0xc4, 0x29, 0x93, 0xc9, 0x04, 0x72, 0x97, 0xf7, 0x46,
-    0xd4, 0x30, 0x6b, 0x17, 0x02, 0x56, 0x2e, 0x04, 0xac, 0x53, 0x9a, 0xe0,
-    0x0b, 0xde, 0x86, 0x12, 0xc4, 0x61, 0xa0, 0xac, 0x45, 0x68, 0x9f, 0xaf,
-    0xff, 0xfb, 0xf8, 0x2d, 0x1b, 0xdc, 0x3f, 0x84, 0x6f, 0xca, 0x73, 0x4b,
-    0x17, 0x89, 0xb8, 0xb1, 0x51, 0xa2, 0xfb, 0x24, 0x91, 0x6c, 0x48, 0x34,
-    0xb3, 0x48, 0x1e, 0x3f, 0x8d, 0x46, 0x8e, 0x08, 0xfd, 0xca, 0x1a, 0xde,
-    0x22, 0x13, 0x4d, 0xfd, 0x3f, 0x62, 0x68, 0x2c, 0x5f, 0xda, 0x0f, 0xdc,
-    0x87, 0x5e, 0xb1, 0x7f, 0xe6, 0xd6, 0xc1, 0xeb, 0x3a, 0x36, 0x96, 0x2f,
-    0xf0, 0xb2, 0x29, 0x3c, 0x3a, 0xf5, 0x8b, 0xf9, 0xcd, 0x62, 0x06, 0x2c,
-    0x5d, 0x09, 0x31, 0x30, 0xcc, 0x2c, 0xdc, 0xd8, 0x08, 0x7e, 0x3a, 0xbd,
-    0x06, 0x82, 0xc5, 0xd8, 0x39, 0x3f, 0x46, 0x57, 0xbe, 0xf0, 0xc7, 0x2b,
-    0x17, 0xff, 0x89, 0xbb, 0xe1, 0xa6, 0xb1, 0x9b, 0x9c, 0x0b, 0x17, 0xd3,
-    0xa9, 0xfa, 0xc5, 0xd0, 0xed, 0x62, 0xb1, 0x11, 0x6c, 0xa1, 0xc2, 0x2b,
-    0xff, 0x7a, 0x47, 0xbb, 0xed, 0x9d, 0xf9, 0x62, 0xff, 0xb1, 0xfb, 0xf6,
-    0xa7, 0x3b, 0x58, 0xbf, 0xfc, 0x4f, 0xdf, 0x22, 0x2c, 0xdb, 0x3b, 0xf2,
-    0xc5, 0xff, 0xbf, 0x87, 0x0e, 0x41, 0x9d, 0xf9, 0x62, 0xb1, 0x11, 0xde,
-    0x4d, 0xbf, 0xdd, 0xee, 0xfa, 0x0e, 0x46, 0xb1, 0x78, 0xed, 0x03, 0x13,
-    0x91, 0x92, 0xe2, 0x42, 0xe4, 0x32, 0x3c, 0x45, 0x4c, 0xaa, 0x7c, 0x12,
-    0x8f, 0xee, 0x17, 0x96, 0x2e, 0x8e, 0x95, 0x8b, 0xfb, 0x01, 0xa7, 0x93,
-    0xac, 0x5f, 0xc0, 0x38, 0x7c, 0x0f, 0x65, 0x8b, 0xff, 0x48, 0xff, 0x21,
-    0xeb, 0x59, 0x12, 0xc5, 0xf9, 0xc8, 0xa7, 0xb5, 0x8a, 0xf9, 0xf4, 0x71,
-    0x06, 0xec, 0xed, 0x62, 0xbb, 0x46, 0xaf, 0xa1, 0x37, 0x1c, 0x45, 0x7f,
-    0xf3, 0x44, 0xc0, 0x33, 0xec, 0x77, 0xe2, 0xc5, 0xff, 0xe0, 0xe4, 0x29,
-    0x8a, 0x0c, 0x59, 0xdf, 0x96, 0x2f, 0x69, 0xf4, 0xb1, 0x7f, 0xff, 0xec,
-    0xf4, 0xbc, 0x1b, 0x9c, 0x9d, 0x4c, 0x1f, 0x72, 0x17, 0x16, 0x28, 0x08,
-    0x88, 0xe0, 0xed, 0x4a, 0xad, 0x68, 0x15, 0xe0, 0xc7, 0xc6, 0x9a, 0x30,
-    0x22, 0x39, 0xe2, 0x30, 0x50, 0xd5, 0xbf, 0x8b, 0x3b, 0x03, 0xc1, 0x62,
-    0xf8, 0xd9, 0xf7, 0x16, 0x2f, 0xde, 0xd4, 0xe7, 0x6b, 0x14, 0x69, 0xe6,
-    0xf6, 0x49, 0x7f, 0x73, 0x93, 0x09, 0xd2, 0xc5, 0xff, 0x6a, 0x4e, 0xf1,
-    0x4b, 0x47, 0xac, 0x56, 0x1f, 0x56, 0xe5, 0xd7, 0x85, 0xdf, 0x96, 0x2f,
-    0xd3, 0x0d, 0xb0, 0x25, 0x8a, 0x58, 0xa3, 0x9b, 0x66, 0x2a, 0xba, 0x2e,
-    0x2c, 0x56, 0xc9, 0xdc, 0xc7, 0xbd, 0x94, 0x23, 0xb8, 0x45, 0xe5, 0x50,
-    0xc8, 0x2f, 0xef, 0xcb, 0x94, 0x9d, 0x62, 0xff, 0xff, 0xb3, 0xd2, 0x5b,
-    0xe7, 0xbe, 0xfd, 0xfa, 0x40, 0x16, 0x7d, 0x62, 0xff, 0xff, 0xf3, 0xf0,
-    0x3e, 0xc1, 0xf6, 0x7f, 0x31, 0xdb, 0xdf, 0x78, 0xa1, 0x3b, 0x2c, 0x5f,
-    0x16, 0x77, 0xe9, 0x4c, 0x3c, 0x65, 0x8c, 0xd1, 0x76, 0x04, 0xb1, 0x7f,
-    0xc2, 0x2d, 0xff, 0x9b, 0x71, 0xd6, 0x2f, 0xfa, 0x7b, 0xc0, 0x4f, 0x4c,
-    0xd9, 0x62, 0xfe, 0x2c, 0xf7, 0x18, 0x0b, 0x15, 0x29, 0x81, 0x69, 0x18,
-    0xe3, 0x00, 0x3b, 0xe1, 0xe5, 0xff, 0xb4, 0xc3, 0x26, 0x34, 0x39, 0xed,
-    0x62, 0xff, 0xff, 0x99, 0xfd, 0x07, 0x1e, 0x43, 0xf2, 0xfa, 0x01, 0xda,
-    0x0b, 0x17, 0xf6, 0xcf, 0xae, 0xff, 0xb2, 0xc5, 0xfa, 0x19, 0xac, 0xe2,
-    0xc5, 0x62, 0x60, 0x1f, 0x41, 0x26, 0x5f, 0x19, 0x5f, 0xef, 0x89, 0x8d,
-    0xf4, 0xec, 0xb1, 0x7f, 0x73, 0x59, 0xbc, 0xec, 0xb1, 0x7f, 0xfb, 0xcf,
-    0xb6, 0xd2, 0x59, 0xe7, 0xec, 0x25, 0x8a, 0xd8, 0xff, 0x60, 0x61, 0x7d,
-    0x3d, 0xfa, 0x3d, 0x62, 0xa4, 0xf2, 0xa0, 0x47, 0x7f, 0xff, 0x9c, 0xdc,
-    0x2f, 0x7f, 0x0e, 0x28, 0x30, 0xf3, 0xbf, 0x2c, 0x5d, 0x9d, 0x7a, 0xc5,
-    0xc5, 0xda, 0xc5, 0xfd, 0x87, 0xe7, 0xde, 0x25, 0x8b, 0xc7, 0x6e, 0xfa,
-    0xd3, 0xe3, 0x34, 0x73, 0xe3, 0x17, 0xf8, 0x72, 0x4d, 0xa6, 0x82, 0xc5,
-    0x61, 0xfc, 0xb2, 0x3d, 0xff, 0xef, 0xc9, 0xff, 0x98, 0x5b, 0xe7, 0x7e,
-    0x58, 0xbb, 0xcd, 0xa3, 0xeb, 0x01, 0x05, 0xfd, 0x3e, 0x7d, 0xdc, 0x6b,
-    0x16, 0xfa, 0xc5, 0xba, 0xfd, 0x1e, 0x00, 0x8b, 0xaf, 0xff, 0xe6, 0x86,
-    0x16, 0x69, 0xcd, 0x8e, 0xe3, 0x42, 0x4e, 0xb1, 0x7f, 0xb0, 0xb6, 0xc1,
-    0xb7, 0xd6, 0x2a, 0x25, 0x5e, 0x9f, 0x21, 0xf4, 0x75, 0x22, 0x6d, 0xe8,
-    0x5a, 0x12, 0xed, 0xc0, 0xc5, 0x8b, 0xff, 0xb0, 0x2c, 0x8f, 0x31, 0xbd,
-    0x3c, 0x95, 0x8b, 0xbb, 0x82, 0xc5, 0xfe, 0xfe, 0x76, 0x0c, 0xf7, 0x16,
-    0x29, 0xcf, 0x3b, 0x83, 0x37, 0xfb, 0x7f, 0xbf, 0xc9, 0x8e, 0xb1, 0x7e,
-    0x3e, 0x0d, 0xc2, 0x58, 0xbb, 0xdb, 0x2c, 0x5f, 0x77, 0xbb, 0xe9, 0x62,
-    0xd3, 0x03, 0x7d, 0xe1, 0x9a, 0xc4, 0x46, 0x93, 0x3d, 0xc7, 0x95, 0x8b,
-    0xff, 0xdb, 0xb6, 0xb6, 0xe1, 0x67, 0xbd, 0x9a, 0x58, 0xb9, 0x8e, 0xb1,
-    0x7e, 0xf6, 0xa7, 0x02, 0x58, 0xba, 0x4d, 0xc3, 0xc0, 0xec, 0x5e, 0xff,
-    0xd9, 0xd3, 0xef, 0xdc, 0x3d, 0x21, 0x2c, 0x5f, 0xb4, 0xc5, 0x0e, 0x2c,
-    0x5f, 0xe7, 0x38, 0xe7, 0x81, 0xf1, 0x62, 0xf8, 0x9f, 0xb8, 0x2c, 0x5f,
-    0xfb, 0x99, 0xb7, 0x07, 0xa2, 0x60, 0x96, 0x2b, 0x48, 0xc1, 0xf9, 0x40,
-    0x0d, 0x7c, 0x47, 0x52, 0x9f, 0xdc, 0x21, 0x19, 0xf2, 0xee, 0x46, 0x09,
-    0x51, 0x2b, 0x5d, 0xd1, 0x09, 0xe1, 0x82, 0xc4, 0x3e, 0x94, 0x25, 0x7d,
-    0xc0, 0xc8, 0x0b, 0x17, 0x7b, 0x8b, 0x17, 0xfb, 0x60, 0xb8, 0xe5, 0xdc,
-    0x16, 0x2f, 0xff, 0x4c, 0x50, 0x9f, 0x07, 0x9a, 0x66, 0x1a, 0xc5, 0xfb,
-    0x0b, 0x3b, 0x82, 0xc5, 0x6c, 0x7e, 0x71, 0x25, 0xdf, 0xe8, 0x18, 0x37,
-    0xe9, 0x23, 0x58, 0xa9, 0x4c, 0x17, 0x21, 0x54, 0xc4, 0x97, 0xfe, 0x7e,
-    0xe0, 0x1f, 0x00, 0xcf, 0xb2, 0xc5, 0xff, 0xc3, 0x9d, 0xfb, 0x86, 0x7b,
-    0x6c, 0x09, 0x62, 0xfd, 0x14, 0x1b, 0x5b, 0x2c, 0x56, 0xe7, 0xe8, 0x74,
-    0x9b, 0xf6, 0x45, 0xf7, 0xf2, 0xc5, 0xfe, 0xfc, 0xb7, 0x9b, 0xb0, 0x2c,
-    0x5f, 0xff, 0x31, 0xb1, 0x4e, 0x7a, 0x4f, 0x3f, 0x90, 0x2c, 0x54, 0x11,
-    0x08, 0x46, 0x97, 0x31, 0xd6, 0x2f, 0xff, 0xff, 0xe7, 0x3e, 0x43, 0xf3,
-    0xe7, 0x2c, 0xef, 0xee, 0x3c, 0x21, 0x72, 0x70, 0xbc, 0xb1, 0x7f, 0xff,
-    0x60, 0xc3, 0xd3, 0x9e, 0x4d, 0xe6, 0x1e, 0x7b, 0xf2, 0xc5, 0xff, 0xe9,
-    0xea, 0x7d, 0x67, 0x70, 0xf6, 0x16, 0xeb, 0x15, 0xf4, 0x56, 0x12, 0xf5,
-    0x0d, 0x36, 0xaf, 0x8b, 0xfa, 0x33, 0x1b, 0xff, 0xf8, 0x7f, 0x78, 0xd8,
-    0x3f, 0x3f, 0x0b, 0x3a, 0x3f, 0xc4, 0xb1, 0x58, 0xa8, 0x99, 0xe3, 0x8c,
-    0x11, 0xbd, 0x4a, 0xbe, 0x2c, 0x85, 0xb1, 0x11, 0xf2, 0x56, 0x9d, 0xf6,
-    0x67, 0xf8, 0xb1, 0x52, 0xce, 0xb2, 0x19, 0xe6, 0x4b, 0xf1, 0xed, 0x8f,
-    0x42, 0xed, 0x2f, 0xcc, 0x0b, 0x1d, 0x79, 0x21, 0x46, 0x3b, 0xe9, 0xc1,
-    0x5e, 0xa4, 0x8b, 0xc1, 0x04, 0x12, 0x45, 0xe2, 0x17, 0x12, 0x23, 0x0d,
-    0x0d, 0xed, 0xd8, 0x35, 0x8b, 0x61, 0xa7, 0x9e, 0xc6, 0x17, 0xa0, 0x23,
-    0x56, 0x2f, 0x1d, 0xbc, 0xb1, 0x7d, 0x18, 0x10, 0x41, 0x2c, 0x5d, 0x80,
-    0x58, 0xac, 0x3c, 0x1f, 0x15, 0x5e, 0x90, 0x71, 0x62, 0xa5, 0x1c, 0x5d,
-    0x93, 0x9c, 0x7f, 0xcb, 0xc1, 0x90, 0xdf, 0x6a, 0x4e, 0x05, 0x8b, 0xff,
-    0xef, 0x71, 0xfe, 0xcf, 0xe7, 0xd3, 0x6d, 0x2b, 0x17, 0xf8, 0xed, 0x06,
-    0x37, 0xee, 0xb1, 0x7f, 0xfb, 0x8f, 0xf6, 0x7f, 0x3e, 0x9b, 0x69, 0x58,
-    0xbd, 0x06, 0xe1, 0x88, 0xcc, 0x3a, 0x7f, 0x8d, 0x2f, 0xef, 0x31, 0x9d,
-    0x43, 0xdd, 0x62, 0x9c, 0xfd, 0xba, 0x21, 0x5f, 0x8e, 0xde, 0x14, 0xac,
-    0x5f, 0xfe, 0xce, 0x8f, 0xf1, 0x7d, 0xf8, 0x58, 0x75, 0x8a, 0x93, 0xf3,
-    0x22, 0x8b, 0xfb, 0x69, 0x3e, 0xc1, 0x84, 0xb1, 0x7c, 0xfa, 0x07, 0x16,
-    0x2f, 0xf3, 0x3f, 0xa6, 0x13, 0xd1, 0x62, 0xff, 0xba, 0xfc, 0x8e, 0x2c,
-    0x09, 0x80, 0xb1, 0x5f, 0x3f, 0x51, 0x1a, 0x5f, 0xff, 0x9e, 0x7a, 0x48,
-    0x67, 0xe7, 0xc2, 0x66, 0xec, 0x25, 0x8b, 0xfd, 0x30, 0x9d, 0x6b, 0x02,
-    0x58, 0xb4, 0xe9, 0x11, 0xe0, 0x5b, 0xbf, 0xfe, 0x9e, 0x0f, 0xee, 0x17,
-    0xce, 0x2f, 0x0a, 0x56, 0x2f, 0xf1, 0x61, 0xa6, 0x3f, 0x47, 0x58, 0xad,
-    0x91, 0x61, 0xb9, 0x47, 0x94, 0xaa, 0x53, 0x93, 0x78, 0xd8, 0x6f, 0x8b,
-    0x3b, 0xf2, 0xc5, 0xff, 0xfd, 0xee, 0x39, 0x77, 0x0f, 0xcb, 0x8e, 0x7f,
-    0x30, 0x58, 0xbb, 0x61, 0xac, 0x5f, 0xd2, 0x2f, 0x13, 0xf4, 0x58, 0xa3,
-    0x0f, 0x23, 0x43, 0x34, 0xe8, 0xc6, 0xe4, 0x28, 0xef, 0xfc, 0x59, 0xcd,
-    0xfe, 0xfb, 0xc9, 0x2c, 0x5f, 0xff, 0xe3, 0x42, 0x6d, 0x1b, 0x19, 0xcc,
-    0x81, 0x09, 0xb9, 0x84, 0xb1, 0x7f, 0xfb, 0xdf, 0x76, 0x06, 0x17, 0xbf,
-    0x90, 0x58, 0xbf, 0xfb, 0xef, 0xaf, 0xb6, 0xb3, 0x76, 0xf2, 0xc5, 0xff,
-    0xfd, 0xf7, 0x3c, 0xe1, 0x7b, 0x92, 0x79, 0x8a, 0x7e, 0xb1, 0x7f, 0xfb,
-    0xef, 0xc9, 0x84, 0x1c, 0x64, 0xdf, 0x58, 0xbf, 0xb5, 0x3c, 0x39, 0x6c,
-    0xb1, 0x7f, 0xf6, 0x7b, 0xc2, 0x86, 0x7d, 0xbd, 0xc5, 0x8a, 0xc3, 0xf4,
-    0x22, 0xfb, 0x9a, 0x06, 0x27, 0x8b, 0x89, 0x3b, 0xa2, 0xb2, 0xd7, 0x21,
-    0x7b, 0x73, 0xc4, 0xb1, 0x63, 0x9c, 0xfc, 0xfe, 0xb7, 0x52, 0xac, 0xb3,
-    0x09, 0xdc, 0xfc, 0x52, 0xa7, 0xaf, 0xed, 0x0b, 0x7f, 0xbf, 0x16, 0x2f,
-    0x82, 0x62, 0x82, 0xc5, 0xff, 0x7a, 0x7b, 0x03, 0x7f, 0xee, 0xb1, 0x6f,
-    0xac, 0x5e, 0xfe, 0x75, 0x2c, 0x56, 0x1f, 0x66, 0xe7, 0x51, 0x09, 0x5e,
-    0xd3, 0x6e, 0xb1, 0x7e, 0x7d, 0xff, 0x3e, 0x58, 0xba, 0x71, 0x62, 0xb6,
-    0x37, 0xfb, 0x94, 0xdf, 0x4e, 0xc4, 0x25, 0x8a, 0xd1, 0xe3, 0x7c, 0x8e,
-    0xe3, 0xca, 0xc5, 0x80, 0xb1, 0x6e, 0x39, 0xa9, 0x61, 0x7b, 0xff, 0x4e,
-    0x16, 0xd8, 0x4d, 0xdf, 0x16, 0x2f, 0xc5, 0x9e, 0x9d, 0x2c, 0x5e, 0x08,
-    0x20, 0x92, 0x2f, 0xcc, 0x6f, 0xdf, 0xc9, 0x11, 0x86, 0x86, 0xa5, 0x10,
-    0x8e, 0x91, 0x7f, 0xb5, 0x20, 0xc8, 0x49, 0xab, 0x17, 0xc7, 0xe4, 0xf9,
-    0x62, 0xf7, 0x49, 0x3a, 0xc5, 0xef, 0x38, 0x4b, 0x17, 0xb8, 0xda, 0x58,
-    0xae, 0xcd, 0xdf, 0x87, 0xaf, 0xff, 0xfe, 0xf4, 0xc1, 0xfe, 0x23, 0x9d,
-    0xa1, 0xa9, 0xfb, 0x70, 0xb0, 0x0b, 0x17, 0x48, 0xd6, 0x2f, 0xf6, 0xb5,
-    0x3b, 0x0f, 0x09, 0x62, 0x9d, 0x17, 0x9f, 0x71, 0x61, 0x7a, 0x94, 0xe2,
-    0x70, 0x8d, 0xd6, 0x9a, 0x1b, 0xd7, 0xff, 0x83, 0x81, 0x83, 0xcf, 0xee,
-    0xfc, 0xc1, 0xac, 0x5e, 0xcc, 0x89, 0x62, 0xb6, 0x3e, 0xb0, 0x27, 0x5f,
-    0x73, 0x0b, 0xcb, 0x15, 0x87, 0x8a, 0xc4, 0x77, 0xe0, 0xf8, 0xff, 0x12,
-    0xc5, 0xe1, 0xc9, 0xd6, 0x2e, 0xf9, 0xab, 0x16, 0xe1, 0x8b, 0xaa, 0x43,
-    0x30, 0xc8, 0x51, 0xf6, 0x97, 0x11, 0x2e, 0xa1, 0x84, 0x72, 0x1f, 0xc7,
-    0x7a, 0x50, 0xef, 0xe1, 0x00, 0x8a, 0xba, 0x0e, 0xde, 0x8e, 0xce, 0xd6,
-    0x2d, 0x01, 0xaf, 0x64, 0x64, 0xef, 0x0b, 0xc3, 0x1a, 0xa3, 0x65, 0xf3,
-    0xc1, 0x4f, 0x7c, 0x5f, 0xfe, 0x2c, 0xe8, 0xff, 0x17, 0xb9, 0x26, 0xba,
-    0xc5, 0xff, 0xff, 0xbf, 0x83, 0x7f, 0x61, 0x43, 0x39, 0xe8, 0x64, 0x7b,
-    0x10, 0x16, 0x2f, 0xfe, 0x7d, 0xff, 0x99, 0xbc, 0x94, 0xee, 0xb1, 0x7f,
-    0x49, 0xe7, 0xf2, 0x05, 0x8b, 0xd3, 0xb0, 0x96, 0x2b, 0x0f, 0x2f, 0xe5,
-    0xb5, 0xf4, 0x58, 0xf5, 0xf0, 0x90, 0xbf, 0xf9, 0xfd, 0x3a, 0xc2, 0xf3,
-    0x31, 0x2c, 0x54, 0x1b, 0x04, 0x57, 0x20, 0x88, 0xcf, 0x52, 0x8a, 0xce,
-    0x51, 0xf9, 0xc1, 0x52, 0x9f, 0x7f, 0xe1, 0x9f, 0x93, 0x05, 0x18, 0xf7,
-    0x42, 0xdb, 0xf8, 0x6d, 0x02, 0x9d, 0x96, 0x2f, 0xbe, 0xfd, 0xf9, 0x62,
-    0xff, 0xfe, 0x79, 0xf7, 0xc4, 0xc7, 0x2c, 0xf7, 0xdf, 0x68, 0x2c, 0x5e,
-    0x9c, 0x2c, 0x45, 0x6c, 0x45, 0xdf, 0x24, 0xbf, 0xc2, 0x6d, 0xb0, 0x9c,
-    0xd5, 0x8b, 0xed, 0xf5, 0x30, 0x58, 0xbc, 0xe7, 0xe2, 0xc5, 0xfb, 0xf3,
-    0xbe, 0x12, 0xc5, 0xa5, 0x62, 0x80, 0x6e, 0x7a, 0x14, 0x5f, 0xf9, 0xf5,
-    0xbf, 0xdf, 0x7f, 0xb9, 0x2c, 0x5f, 0xff, 0xfe, 0x62, 0x07, 0xbf, 0x87,
-    0xf7, 0x33, 0xa7, 0xdf, 0x7f, 0xb8, 0x62, 0xd9, 0x62, 0xfe, 0x93, 0x0f,
-    0x39, 0xe5, 0x8a, 0xd9, 0x1d, 0x60, 0x40, 0xea, 0x7d, 0xbf, 0xfc, 0x0e,
-    0x67, 0xdb, 0x7e, 0x68, 0x9f, 0x75, 0x8a, 0x94, 0xe3, 0xb2, 0x30, 0xe6,
-    0x34, 0xbf, 0xec, 0x8f, 0x93, 0xf7, 0x0c, 0xf2, 0xc5, 0x4b, 0x6d, 0x29,
-    0x91, 0xb2, 0xbd, 0x61, 0xb7, 0xa8, 0xda, 0x3e, 0x7e, 0xc6, 0x80, 0x24,
-    0x28, 0xf9, 0x38, 0x69, 0x7d, 0x9c, 0xf3, 0xac, 0x5f, 0xd9, 0xce, 0x66,
-    0xb6, 0x58, 0xb6, 0xf0, 0x3d, 0x11, 0x91, 0x5e, 0x29, 0xe8, 0xb1, 0x7f,
-    0xf6, 0xa7, 0x7f, 0x93, 0x78, 0xa4, 0x25, 0x8b, 0xba, 0xf7, 0x58, 0xa5,
-    0x8b, 0x7d, 0x62, 0xa0, 0x5f, 0x38, 0x65, 0xfe, 0x8a, 0x0e, 0x2e, 0xbe,
-    0x39, 0xd6, 0x2f, 0xb4, 0xf1, 0x71, 0x62, 0xc0, 0x30, 0xf8, 0x74, 0x7b,
-    0x5b, 0x23, 0x8f, 0x47, 0x45, 0x08, 0x0a, 0x94, 0xd7, 0x5a, 0x32, 0x8b,
-    0xd1, 0x36, 0xcb, 0x17, 0xb8, 0x28, 0xf5, 0x8a, 0xc3, 0xc0, 0xf0, 0xfd,
-    0xf0, 0xb6, 0x16, 0xcb, 0x17, 0xe8, 0x13, 0xcf, 0x6b, 0x16, 0x9d, 0x1e,
-    0x71, 0x13, 0x54, 0xbf, 0x40, 0xf6, 0xd2, 0x9c, 0xa1, 0x39, 0x60, 0x39,
-    0xc5, 0xcc, 0xa5, 0xc7, 0x1b, 0x39, 0x57, 0xbc, 0xe0, 0xc7, 0x73, 0x91,
-    0xee, 0x97, 0x14, 0xaa, 0x7d, 0x4f, 0xee, 0x1e, 0x51, 0xb7, 0xe7, 0x68,
-    0x1a, 0x51, 0xa0, 0x25, 0x39, 0x15, 0x3f, 0xf3, 0x92, 0x83, 0xfd, 0x5b,
-    0x6f, 0x8a, 0x1d, 0x7d, 0x0a, 0x63, 0xa3, 0x7b, 0x0d, 0xa3, 0xa9, 0xbe,
-    0xfc, 0xf1, 0x41, 0xc9, 0x62, 0xee, 0xb1, 0xd6, 0x2f, 0xe3, 0x88, 0xd2,
-    0xc0, 0x2c, 0x5e, 0xd3, 0xee, 0xb1, 0x7f, 0xf1, 0xac, 0x67, 0x07, 0xfc,
-    0x72, 0x35, 0x62, 0xf0, 0xd8, 0x25, 0x8a, 0x30, 0xf9, 0x5d, 0x1e, 0xb1,
-    0x1a, 0x9b, 0x97, 0xfe, 0x10, 0x77, 0xfd, 0x17, 0xba, 0xb9, 0x31, 0x0b,
-    0x4b, 0x17, 0xf8, 0x72, 0x47, 0x91, 0xca, 0xc5, 0x49, 0xf9, 0x32, 0x05,
-    0xff, 0x7e, 0x76, 0xd4, 0xc1, 0xb4, 0xb1, 0x7f, 0xfb, 0xf3, 0xf2, 0xc3,
-    0x47, 0x85, 0x31, 0xeb, 0x17, 0xe2, 0x34, 0x39, 0x02, 0xc5, 0xff, 0x03,
-    0x52, 0x2f, 0x13, 0xf4, 0x58, 0xbf, 0xe6, 0xef, 0xdf, 0x9d, 0xf2, 0x25,
-    0x8a, 0xc3, 0xf7, 0x23, 0xbb, 0xf3, 0x8f, 0xee, 0x6a, 0xc5, 0xe0, 0xd8,
-    0x96, 0x28, 0x69, 0xa9, 0xe2, 0x61, 0x42, 0x87, 0xc4, 0x1d, 0x45, 0x37,
-    0xe2, 0xd8, 0x7f, 0x95, 0x8b, 0xe2, 0x73, 0xe2, 0xc5, 0xef, 0x7b, 0x16,
-    0x2a, 0x4d, 0xf6, 0x10, 0xdf, 0x05, 0xec, 0x8f, 0x58, 0xbf, 0x98, 0xe1,
-    0x8d, 0xa0, 0xb1, 0x7f, 0x98, 0x6f, 0xaf, 0xcc, 0x16, 0x2d, 0x1c, 0xb1,
-    0x52, 0x99, 0x26, 0xcc, 0xfd, 0x8f, 0xfc, 0x9f, 0xa1, 0x7c, 0x71, 0x9d,
-    0xff, 0xf8, 0x98, 0x2d, 0x3c, 0xfc, 0x3f, 0x3f, 0xe7, 0xa2, 0xc5, 0xff,
-    0x9f, 0xf2, 0x3f, 0x8a, 0x7b, 0xe2, 0xc5, 0xff, 0xdf, 0x09, 0x8b, 0x62,
-    0xc0, 0xe4, 0xeb, 0x17, 0xfe, 0x1f, 0xdc, 0x2f, 0xb7, 0x26, 0x3d, 0x62,
-    0xe2, 0xc5, 0x8a, 0xec, 0xf6, 0x49, 0x0e, 0xb1, 0x30, 0x1d, 0x20, 0x34,
-    0x27, 0xef, 0x0c, 0xd0, 0x2c, 0x5a, 0x0b, 0x17, 0xda, 0xd3, 0x79, 0x62,
-    0xf9, 0xcd, 0x38, 0x4b, 0x17, 0xe8, 0xe7, 0xd6, 0x1a, 0xb1, 0x5d, 0xa2,
-    0x18, 0xe2, 0x5f, 0x23, 0xe1, 0x2d, 0xe3, 0x3a, 0xb7, 0x58, 0xbb, 0x3c,
-    0xb1, 0x5b, 0x1b, 0xaf, 0x91, 0xdf, 0xf8, 0xe3, 0x92, 0xce, 0x85, 0x9c,
-    0x58, 0xbd, 0xf2, 0x3a, 0xc5, 0xfe, 0x01, 0xad, 0x87, 0x9d, 0xd6, 0x28,
-    0xc4, 0xf4, 0x26, 0x14, 0xb8, 0xf0, 0xe4, 0x4c, 0x7e, 0x10, 0xed, 0xff,
-    0xd1, 0x36, 0xff, 0x98, 0x78, 0xb0, 0xeb, 0x17, 0xf6, 0xb0, 0x89, 0xb6,
-    0x58, 0xbc, 0x39, 0x82, 0xc5, 0xff, 0x83, 0x93, 0xe6, 0x8e, 0xc4, 0x6a,
-    0xc5, 0x6e, 0x8d, 0x07, 0x46, 0x62, 0xdf, 0x0e, 0xdf, 0xf8, 0x2e, 0xe1,
-    0xc3, 0x33, 0xf8, 0x4b, 0x17, 0xfd, 0x3d, 0xf3, 0x4f, 0xd3, 0x06, 0xb1,
-    0x7f, 0xfc, 0x59, 0xcf, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xa2, 0x44,
-    0x5f, 0x43, 0xca, 0x94, 0x79, 0xe4, 0x33, 0x6f, 0xcf, 0xa9, 0x39, 0xd6,
-    0x2d, 0xe5, 0x8b, 0xfb, 0x36, 0x34, 0xd1, 0x12, 0xc5, 0xfe, 0x17, 0x65,
-    0x9e, 0xc0, 0x2c, 0x5f, 0xfd, 0xdc, 0x38, 0x66, 0x11, 0x63, 0x81, 0x62,
-    0xff, 0xc5, 0x27, 0xd6, 0x40, 0xa4, 0xeb, 0x17, 0xff, 0x88, 0x5d, 0xf7,
-    0xe1, 0x17, 0xb3, 0xbf, 0x2c, 0x5f, 0xe2, 0xcd, 0xf2, 0x27, 0x3a, 0xc5,
-    0x1d, 0x30, 0x4f, 0xa2, 0xf4, 0x3d, 0x09, 0x3a, 0xff, 0xc2, 0xef, 0x91,
-    0x16, 0x7b, 0x00, 0xb1, 0x7f, 0x36, 0x85, 0x3d, 0xc1, 0x62, 0x8c, 0x54,
-    0x59, 0x22, 0x58, 0x62, 0xf1, 0x9c, 0x69, 0x05, 0x90, 0x6f, 0xfe, 0x91,
-    0x9f, 0x37, 0x9e, 0x7f, 0x0e, 0xb1, 0x7e, 0x6c, 0x1b, 0xf4, 0x58, 0xbd,
-    0xe9, 0x3a, 0xc5, 0xe2, 0x79, 0x58, 0xbc, 0xf8, 0x12, 0xc5, 0x69, 0x18,
-    0x67, 0x45, 0xe1, 0x4f, 0x41, 0xd0, 0xc6, 0xef, 0x3f, 0xc4, 0xb1, 0x7c,
-    0xc5, 0xb6, 0x2c, 0x5f, 0x89, 0xbc, 0xc7, 0x58, 0xbc, 0x1c, 0x81, 0x62,
-    0xfb, 0xcf, 0xf1, 0x2c, 0x5f, 0xd9, 0xae, 0xe1, 0xe9, 0x58, 0xae, 0xba,
-    0x9e, 0x90, 0x64, 0x74, 0x6a, 0x26, 0xe3, 0xdc, 0x2f, 0xc1, 0x66, 0xf2,
-    0x05, 0x8b, 0xd9, 0x83, 0x58, 0xbe, 0xdf, 0xf9, 0xa5, 0x8a, 0x94, 0x48,
-    0xb9, 0x38, 0x0a, 0xba, 0x87, 0x28, 0xc6, 0xc2, 0xb2, 0x37, 0x28, 0x98,
-    0x78, 0x42, 0x14, 0xe3, 0x20, 0xc8, 0xe3, 0x5e, 0x37, 0x58, 0x97, 0xb5,
-    0x1a, 0xcf, 0xe5, 0x02, 0x34, 0x65, 0x65, 0x19, 0x7f, 0x09, 0xbd, 0x29,
-    0x50, 0x51, 0x8f, 0xf4, 0x4d, 0x08, 0x74, 0x32, 0x2e, 0xa8, 0xd4, 0xed,
-    0x19, 0x1b, 0xd2, 0x1a, 0x3f, 0x7a, 0xc9, 0xdc, 0x3e, 0xb6, 0x74, 0x12,
-    0x34, 0x9c, 0xb9, 0x8d, 0xa7, 0x06, 0xba, 0xee, 0x73, 0xf7, 0xae, 0x4b,
-    0x92, 0xeb, 0xac, 0xa8, 0xd8, 0xd5, 0x2c, 0x5e, 0x35, 0xca, 0x9d, 0x9b,
-    0xee, 0xc4, 0xda, 0xba, 0x7c, 0x85, 0xab, 0x34, 0x1d, 0xe6, 0x57, 0xe6,
-    0x61, 0x82, 0xa6, 0xd6, 0x15, 0x5b, 0xde, 0x9f, 0xaf, 0x76, 0xce, 0x41,
-    0xed, 0xe9, 0x9c, 0x7c, 0xe8, 0x04, 0x56, 0xf3, 0xd3, 0x57, 0xa5, 0x80,
-    0x7b, 0x69, 0xed, 0xfc, 0x4b, 0x2f, 0x35, 0xf8, 0x63, 0x02, 0xd9, 0x5b,
-    0xf5, 0xf3, 0x80, 0xa5, 0x88, 0x4c, 0x1e, 0x66, 0xa3, 0x95, 0xec, 0x4d,
-    0x4f, 0x8a, 0xbc, 0x78, 0xe9, 0x4e, 0x70, 0x0a, 0xb1, 0x35, 0x8e, 0xb4,
-    0x56, 0x81, 0xdf, 0xb5, 0x5f, 0x55, 0x64, 0xf3, 0x51, 0x94, 0x87, 0x1a,
-    0xb8, 0x72, 0x1b, 0x81, 0xaf, 0x77, 0xec, 0x58, 0xbf, 0x8e, 0x39, 0xe0,
-    0x7c, 0x58, 0xa9, 0x3c, 0xe7, 0x1e, 0xbb, 0xb0, 0x96, 0x2f, 0x1f, 0x3c,
-    0xb1, 0x7f, 0x98, 0xf3, 0xe7, 0xe3, 0xac, 0x5f, 0xb3, 0x41, 0xfb, 0x8b,
-    0x17, 0x7e, 0x56, 0x2d, 0x19, 0xf4, 0x65, 0x31, 0x00, 0x06, 0x88, 0x77,
-    0x86, 0x41, 0x95, 0x5f, 0x6e, 0x53, 0x8b, 0x17, 0xed, 0x6e, 0xcd, 0xba,
-    0xa4, 0xe3, 0x2f, 0xe8, 0x31, 0x41, 0xce, 0xb1, 0x68, 0xc9, 0x44, 0x36,
-    0x11, 0x31, 0xbd, 0xfe, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xeb, 0x2f,
-    0xfe, 0x8c, 0x68, 0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x28, 0x95, 0x34,
-    0x88, 0x39, 0xbd, 0x91, 0xe1, 0x19, 0xc8, 0xd1, 0x4d, 0x8d, 0xc3, 0x74,
-    0x57, 0xa4, 0xcf, 0xc7, 0xc6, 0xc8, 0xdc, 0x87, 0x20, 0xa0, 0x46, 0xb7,
-    0xc8, 0x72, 0xf8, 0xdb, 0xa9, 0x16, 0xff, 0xf4, 0x61, 0xda, 0x11, 0x99,
-    0xad, 0xd9, 0xb7, 0x54, 0x8b, 0x45, 0xff, 0xba, 0xde, 0xb7, 0x5a, 0x69,
-    0x87, 0xba, 0x96, 0x2f, 0xfa, 0x35, 0xfd, 0xe3, 0xda, 0x7b, 0xea, 0x58,
-    0xbf, 0xfe, 0x0b, 0x7e, 0xb3, 0xad, 0x07, 0x5f, 0xa8, 0xd0, 0xc3, 0x3f,
-    0x1c, 0xb1, 0x7f, 0xff, 0xee, 0xaf, 0x46, 0xc3, 0x3c, 0x6c, 0x4f, 0xd7,
-    0x5f, 0x75, 0xfa, 0x8d, 0x0c, 0x33, 0xf1, 0xcb, 0x15, 0xf4, 0xc0, 0xc2,
-    0x6f, 0xbf, 0xda, 0xd3, 0xc3, 0xf8, 0x05, 0x8b, 0xf4, 0x7e, 0x9e, 0x49,
-    0x62, 0xfa, 0x11, 0xb0, 0x7b, 0x2c, 0x5f, 0x81, 0xec, 0xfb, 0xac, 0x54,
-    0xa2, 0xc5, 0x8d, 0x3a, 0xf2, 0xa1, 0x15, 0xde, 0x8f, 0x3b, 0xac, 0x5f,
-    0xf6, 0x10, 0xff, 0x3a, 0x62, 0x58, 0xbc, 0xf1, 0xd1, 0x2c, 0x54, 0x9f,
-    0xc6, 0x10, 0x7c, 0xde, 0xf9, 0xf4, 0x07, 0x58, 0xbf, 0x6f, 0xfc, 0x35,
-    0xd6, 0x2f, 0xc3, 0x11, 0xbf, 0x12, 0xc5, 0xe6, 0x6d, 0xd5, 0x21, 0xb9,
-    0x7e, 0xee, 0x22, 0x91, 0xac, 0x50, 0xcf, 0xff, 0x72, 0xb6, 0x2a, 0xbf,
-    0x0f, 0xf3, 0x9a, 0x58, 0xbf, 0xd3, 0xb4, 0x45, 0x20, 0xe2, 0xc5, 0x1a,
-    0x9a, 0xbe, 0xe4, 0x5a, 0x85, 0x49, 0x17, 0xf0, 0xa2, 0xff, 0x69, 0xfa,
-    0xfd, 0xff, 0x21, 0x2c, 0x5e, 0x14, 0x70, 0x4b, 0x17, 0xda, 0x14, 0x81,
-    0x62, 0x9d, 0x10, 0x11, 0x1d, 0x86, 0x45, 0x7d, 0xf9, 0xef, 0x8b, 0x17,
-    0xff, 0xff, 0x8b, 0x39, 0xc1, 0xce, 0x6b, 0x76, 0x6d, 0xe3, 0x20, 0xfe,
-    0x9f, 0x71, 0x52, 0x87, 0x95, 0xc4, 0x56, 0x74, 0x24, 0xa9, 0x4c, 0x09,
-    0xe1, 0xbb, 0x7f, 0x34, 0x64, 0x7b, 0x10, 0x16, 0x2f, 0xdb, 0x07, 0xf9,
-    0x09, 0x62, 0xbe, 0x88, 0x62, 0x27, 0x11, 0x9d, 0xff, 0x67, 0xb1, 0xf6,
-    0x0b, 0x3e, 0xb1, 0x7e, 0x8c, 0x0b, 0x91, 0xe1, 0xac, 0x54, 0x0f, 0xb3,
-    0x87, 0x57, 0xe7, 0xdb, 0xef, 0x1c, 0xb1, 0x7e, 0xce, 0x36, 0xa0, 0xb1,
-    0x7c, 0xf1, 0xef, 0xc5, 0x8a, 0x8f, 0x3f, 0x9d, 0x16, 0x1c, 0xa2, 0xfd,
-    0xd5, 0x19, 0xae, 0xbc, 0x25, 0x8b, 0xf6, 0x6f, 0xc0, 0xf8, 0xb1, 0x7d,
-    0x3e, 0x8e, 0x35, 0x62, 0xb0, 0xf4, 0xb4, 0x57, 0x7c, 0x32, 0xc0, 0x2c,
-    0x5f, 0x48, 0x47, 0x1a, 0xc5, 0xf6, 0xff, 0x90, 0x96, 0x2f, 0x7e, 0x4d,
-    0x58, 0xac, 0x44, 0x4e, 0x88, 0xba, 0xf2, 0x40, 0xc9, 0x6f, 0x34, 0x78,
-    0x96, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0xbe, 0x5f, 0xc2, 0xdf, 0x4f,
-    0x24, 0xb1, 0x79, 0xa1, 0x19, 0xb2, 0x21, 0x70, 0x83, 0xe6, 0xf6, 0xc5,
-    0x8b, 0xdf, 0x6f, 0x2c, 0x57, 0x0d, 0x70, 0x62, 0x37, 0xf8, 0x3d, 0xfe,
-    0xe3, 0x17, 0x6b, 0x15, 0xe3, 0xda, 0x11, 0x15, 0xf0, 0xba, 0xfe, 0x92,
-    0xb1, 0x7c, 0x13, 0x37, 0x6b, 0x17, 0xe7, 0x90, 0x85, 0x1e, 0xb1, 0x58,
-    0x7f, 0x5d, 0x95, 0x11, 0x25, 0xfc, 0x5e, 0xcf, 0x4e, 0x96, 0x2f, 0xcf,
-    0xdf, 0x56, 0x82, 0x58, 0xa9, 0x3d, 0xb0, 0xcb, 0x6f, 0xf6, 0xb4, 0xfe,
-    0x06, 0x71, 0x62, 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x3e,
-    0xee, 0xa3, 0x4a, 0x94, 0xf6, 0x72, 0x13, 0x8f, 0x08, 0x96, 0x84, 0x85,
-    0xfb, 0xb7, 0x0f, 0x22, 0x58, 0xbc, 0x79, 0x35, 0x62, 0xa4, 0xf2, 0x5c,
-    0xae, 0xfd, 0xc9, 0x0e, 0x2e, 0x2c, 0x5f, 0xd2, 0xf1, 0xf9, 0xdc, 0x16,
-    0x2f, 0xda, 0x37, 0xe2, 0xe2, 0xc5, 0x44, 0x88, 0x7f, 0x95, 0x86, 0x63,
-    0x7a, 0x75, 0x2b, 0x17, 0xdd, 0xf8, 0xa5, 0x62, 0xb0, 0xfc, 0x5c, 0xc8,
-    0x43, 0x97, 0x37, 0xd6, 0x2f, 0x07, 0xc8, 0xe5, 0x8b, 0xa3, 0x7e, 0xb5,
-    0x62, 0xf9, 0xc1, 0x3d, 0xac, 0x5f, 0x00, 0x7c, 0x95, 0x8b, 0xe6, 0xd6,
-    0xdb, 0x2c, 0x5b, 0x08, 0xf2, 0x3a, 0x11, 0xd4, 0x11, 0xdc, 0x31, 0x7e,
-    0xc8, 0xa3, 0xc8, 0xb8, 0xd7, 0x7d, 0x10, 0xde, 0x25, 0x8b, 0xfd, 0xf8,
-    0xcd, 0xfe, 0xff, 0xea, 0x58, 0xbf, 0xd2, 0x50, 0x2c, 0xc0, 0x2c, 0x5e,
-    0x04, 0x84, 0xb1, 0x7f, 0xb1, 0xf5, 0x0f, 0xb8, 0x4b, 0x17, 0xb6, 0x90,
-    0xd6, 0x2a, 0x53, 0x03, 0xc2, 0x53, 0x4f, 0x23, 0xcc, 0x7e, 0x3c, 0x46,
-    0x97, 0xf1, 0x9b, 0xfe, 0x7b, 0xe2, 0xc5, 0xce, 0x1a, 0xc5, 0xed, 0x83,
-    0x82, 0xc5, 0x44, 0x6e, 0x18, 0x62, 0x83, 0x44, 0x5f, 0x53, 0x55, 0xdd,
-    0x20, 0xb1, 0x7f, 0x1a, 0x1f, 0x1d, 0xbe, 0xb1, 0x7b, 0xef, 0xa5, 0x8a,
-    0x63, 0xcd, 0x11, 0x85, 0xf7, 0x3f, 0x3f, 0x58, 0xbf, 0xd3, 0xb4, 0x96,
-    0xd9, 0xd4, 0xb1, 0x73, 0x7d, 0x62, 0x96, 0x29, 0x62, 0xdc, 0x73, 0x5f,
-    0xa1, 0x7e, 0x06, 0x5f, 0x01, 0xcf, 0xc5, 0x8a, 0x94, 0x6f, 0xec, 0x47,
-    0x13, 0x37, 0x8c, 0xed, 0x19, 0xd6, 0xb6, 0x79, 0xbd, 0x75, 0x4d, 0x98,
-    0xd2, 0x76, 0x86, 0xb0, 0xe1, 0x71, 0x91, 0xc2, 0x6f, 0x29, 0x67, 0xb8,
-    0x4d, 0xbc, 0x26, 0xe3, 0xcc, 0xa2, 0x84, 0x46, 0xa1, 0x54, 0x78, 0x63,
-    0xfe, 0x55, 0x2b, 0x42, 0x48, 0xa3, 0x18, 0xe4, 0x63, 0x7e, 0x8d, 0x44,
-    0x50, 0xe4, 0xe8, 0x4f, 0x1c, 0xce, 0x1c, 0x60, 0x17, 0xdd, 0x64, 0x69,
-    0xd6, 0x3a, 0xc5, 0xe8, 0xa4, 0x6b, 0x17, 0x6f, 0x19, 0x1b, 0x1e, 0x80,
-    0x8c, 0xaf, 0xff, 0xc5, 0x3b, 0xc6, 0x7b, 0xbd, 0xdf, 0x85, 0x9d, 0x19,
-    0x62, 0xff, 0xe8, 0x79, 0xe2, 0x8c, 0x1b, 0xf4, 0x91, 0xac, 0x5c, 0x6e,
-    0xcb, 0x17, 0xfe, 0xc7, 0xe9, 0xec, 0xc2, 0xf7, 0x16, 0x2e, 0x0a, 0x31,
-    0xcf, 0x64, 0x21, 0xab, 0xff, 0xa3, 0x39, 0x91, 0x3e, 0xa6, 0x27, 0x3a,
-    0xc5, 0x0d, 0x37, 0xbe, 0xd7, 0x1e, 0x14, 0x87, 0x32, 0xbd, 0xa6, 0x89,
-    0x62, 0xf6, 0x4c, 0x4b, 0x15, 0xb1, 0xbb, 0xd0, 0xf5, 0xff, 0x0f, 0x53,
-    0xf6, 0x1c, 0x0e, 0xb1, 0x7e, 0x7e, 0x60, 0xe3, 0x24, 0xf7, 0x38, 0x45,
-    0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4a, 0xb2, 0xfd, 0x9c, 0xfc, 0xf6, 0xb1,
-    0x68, 0xcc, 0x3e, 0x0f, 0x9b, 0xde, 0x8d, 0x71, 0xd1, 0xba, 0xc5, 0xfb,
-    0xad, 0x1e, 0x9b, 0x75, 0x8b, 0x98, 0x6b, 0x17, 0xc2, 0xea, 0x1c, 0xac,
-    0x5f, 0xb9, 0xe7, 0xef, 0x8b, 0x16, 0x8d, 0xd6, 0x28, 0xe7, 0xfd, 0xf1,
-    0x7f, 0x13, 0x47, 0x15, 0x5f, 0xef, 0x72, 0x41, 0x9d, 0xf9, 0x62, 0xe7,
-    0xea, 0x58, 0xbb, 0x34, 0xb1, 0x7b, 0x3b, 0xf2, 0xc5, 0xf3, 0x9d, 0xba,
-    0x2c, 0x56, 0x22, 0xa0, 0xd3, 0x56, 0x1a, 0x00, 0xbf, 0x87, 0xaf, 0x40,
-    0x5c, 0x58, 0xbf, 0xe7, 0x8c, 0xe8, 0x66, 0x1d, 0xbb, 0x58, 0xbb, 0xa8,
-    0x25, 0x8a, 0xf9, 0xee, 0x12, 0x05, 0xfd, 0xf9, 0xe8, 0x21, 0xe2, 0xc5,
-    0xfb, 0xf1, 0x14, 0x8d, 0x62, 0xf3, 0x6a, 0x0b, 0x14, 0xc7, 0x8c, 0x11,
-    0x4d, 0xfb, 0xd1, 0x14, 0x8d, 0x62, 0xff, 0xf0, 0x0e, 0x21, 0xe6, 0x78,
-    0x07, 0x17, 0x6b, 0x14, 0x47, 0xed, 0xe2, 0x9b, 0xff, 0x3e, 0x8d, 0x6e,
-    0xe0, 0x26, 0xf2, 0xc5, 0xff, 0xde, 0xfc, 0xf0, 0x98, 0x5d, 0x7b, 0xe9,
-    0x62, 0xf4, 0xc3, 0x16, 0x2f, 0xe9, 0xe4, 0x6d, 0x8c, 0x75, 0x8b, 0xf9,
-    0xc5, 0xb9, 0x4c, 0x4b, 0x17, 0xff, 0x0b, 0x9f, 0x7f, 0x43, 0x09, 0xc6,
-    0xb1, 0x7b, 0x81, 0xb2, 0xc5, 0xf7, 0xe5, 0xf4, 0xb1, 0x50, 0x55, 0x74,
-    0x37, 0x6c, 0x84, 0xc1, 0xa4, 0x3d, 0xa0, 0xc4, 0x93, 0xa1, 0xcf, 0x99,
-    0x11, 0x7f, 0x91, 0x03, 0x1e, 0xbf, 0xd8, 0x59, 0xdf, 0x98, 0xeb, 0x17,
-    0xa7, 0xfc, 0x58, 0xa3, 0x4f, 0x40, 0x8c, 0xef, 0xff, 0xdf, 0x9e, 0xe0,
-    0x27, 0x8e, 0xc0, 0xff, 0x2f, 0xa5, 0x8b, 0x75, 0x2c, 0x58, 0x25, 0x8a,
-    0xec, 0xd4, 0x78, 0x56, 0xf7, 0x54, 0xf9, 0x62, 0xff, 0x67, 0x70, 0xf6,
-    0x6d, 0xd4, 0xb1, 0x7f, 0x17, 0x8a, 0x7d, 0xc5, 0x8b, 0xfa, 0x4e, 0x1c,
-    0x96, 0xeb, 0x17, 0x4e, 0x96, 0x2f, 0x98, 0x73, 0xda, 0xc5, 0x41, 0x19,
-    0xf8, 0x73, 0xa2, 0xde, 0x17, 0x88, 0x5e, 0xf8, 0xe7, 0x78, 0x96, 0x2f,
-    0xbf, 0x24, 0x6a, 0xc5, 0x61, 0xe3, 0xc4, 0x49, 0x73, 0x76, 0xb1, 0x7b,
-    0xbe, 0x44, 0xb1, 0x73, 0xf9, 0x62, 0xf0, 0x72, 0x05, 0x8b, 0x47, 0xac,
-    0x57, 0x68, 0x82, 0xd0, 0xc7, 0x08, 0x3c, 0x2f, 0x1c, 0x3d, 0x7d, 0x11,
-    0x0b, 0x75, 0x8b, 0xfb, 0x0f, 0x13, 0x36, 0xcb, 0x16, 0xe2, 0xc5, 0xf3,
-    0xfd, 0xcd, 0x58, 0xa0, 0x1b, 0x5e, 0x09, 0x5c, 0xdd, 0xac, 0x51, 0x1b,
-    0x9f, 0x10, 0xdf, 0xff, 0x43, 0xed, 0x03, 0x5b, 0x98, 0x2e, 0x71, 0xd6,
-    0x29, 0x62, 0xb0, 0xf7, 0x7a, 0x94, 0x6a, 0x53, 0x63, 0x72, 0x56, 0x84,
-    0xe9, 0x3e, 0xdc, 0x37, 0x58, 0xbf, 0xe2, 0x98, 0x79, 0xce, 0x39, 0x58,
-    0xbf, 0xc4, 0xf0, 0x8b, 0xf3, 0xb2, 0xc5, 0xe6, 0x6d, 0xd5, 0x22, 0x01,
-    0x6d, 0x40, 0xf7, 0xf7, 0x35, 0xbe, 0xd6, 0x17, 0x96, 0x2f, 0x87, 0x1b,
-    0xf5, 0xc8, 0xd1, 0x62, 0xff, 0xfd, 0xfc, 0x3f, 0x9c, 0x45, 0x0c, 0x27,
-    0xdb, 0x8b, 0x14, 0x34, 0xda, 0xf2, 0x12, 0xfa, 0x29, 0xe1, 0x17, 0x8d,
-    0x2f, 0x74, 0x6f, 0xac, 0x51, 0x89, 0xf8, 0x46, 0x47, 0x05, 0x29, 0xf7,
-    0xbf, 0x23, 0x58, 0xbf, 0x71, 0x89, 0xbb, 0x58, 0xbf, 0xef, 0x3f, 0x1c,
-    0x5d, 0x78, 0xe5, 0x62, 0xec, 0x25, 0x8b, 0x85, 0x12, 0xc5, 0xa5, 0x62,
-    0xa4, 0xd5, 0x08, 0x66, 0xf6, 0x0d, 0xd6, 0x2a, 0x09, 0x9c, 0xee, 0x75,
-    0xd8, 0xeb, 0x94, 0x47, 0x9f, 0x69, 0x00, 0xe4, 0x17, 0xf4, 0xeb, 0x69,
-    0xd6, 0xcb, 0x17, 0xce, 0x79, 0xe2, 0xc5, 0x40, 0xf4, 0x8d, 0x30, 0xbf,
-    0xda, 0xd8, 0xf2, 0x50, 0xe2, 0xc5, 0x49, 0xec, 0x61, 0x1d, 0xf7, 0xa7,
-    0xa6, 0xeb, 0x17, 0xff, 0x13, 0xed, 0x98, 0x46, 0xe7, 0x7e, 0x58, 0xbf,
-    0xfe, 0x3b, 0x90, 0x03, 0xf3, 0x90, 0xa1, 0x9c, 0x58, 0xbf, 0xf9, 0xe4,
-    0xec, 0x30, 0xfa, 0xa4, 0xa0, 0xb1, 0x7f, 0xff, 0xcf, 0xe2, 0xce, 0x85,
-    0x9c, 0xdb, 0x02, 0x8e, 0x17, 0xdf, 0x4b, 0x17, 0xfa, 0x3b, 0x34, 0x08,
-    0x30, 0xd6, 0x2a, 0x53, 0xa5, 0x19, 0x36, 0x22, 0xfd, 0x40, 0x08, 0xe2,
-    0x6c, 0xbf, 0x01, 0x80, 0x47, 0x58, 0xb9, 0x86, 0xb1, 0x7f, 0xd0, 0x7f,
-    0x02, 0x73, 0xb8, 0x2c, 0x5f, 0xf4, 0x67, 0x33, 0x5b, 0x6d, 0x80, 0x58,
-    0xad, 0x91, 0x21, 0x10, 0xbf, 0xce, 0xaf, 0xff, 0x76, 0xc4, 0x20, 0x6a,
-    0x7e, 0xe4, 0x75, 0x8b, 0xf9, 0xfa, 0x3f, 0xa2, 0x95, 0x8a, 0x94, 0xd9,
-    0x32, 0x17, 0x0e, 0x65, 0xc4, 0xab, 0xf8, 0x38, 0xdb, 0x4f, 0x27, 0x58,
-    0xbb, 0x90, 0x58, 0xa6, 0x3c, 0xce, 0x1a, 0x5f, 0xff, 0xd3, 0xbf, 0x9f,
-    0x5a, 0xc0, 0x73, 0xcd, 0xf6, 0x1a, 0xc5, 0xdd, 0x6f, 0xd6, 0x2f, 0xd9,
-    0x14, 0x1a, 0x0b, 0x17, 0xfe, 0xfb, 0x1f, 0xdf, 0x9f, 0x08, 0xeb, 0x14,
-    0x33, 0xe9, 0x88, 0xa6, 0xff, 0xf9, 0xb4, 0xdf, 0xee, 0x19, 0xec, 0xd6,
-    0x79, 0x62, 0xb0, 0xfc, 0xf7, 0x23, 0xbf, 0xfb, 0xee, 0x71, 0xe7, 0x9f,
-    0xfb, 0xba, 0xc5, 0xff, 0x66, 0xbd, 0xe6, 0x2e, 0xfc, 0xb1, 0x74, 0xf9,
-    0x62, 0x86, 0x89, 0x62, 0x45, 0xea, 0x3a, 0xa8, 0xdd, 0xb5, 0xcf, 0x8d,
-    0x8b, 0x26, 0x15, 0xbb, 0x43, 0x9e, 0x09, 0x23, 0x7a, 0xc9, 0x5b, 0x66,
-    0xc3, 0xc7, 0x72, 0x2e, 0xe1, 0x05, 0x1e, 0x45, 0x14, 0x3b, 0xf5, 0x09,
-    0x03, 0xc2, 0x93, 0xf1, 0xd8, 0xb4, 0xb6, 0x82, 0x8c, 0x4f, 0x91, 0xe2,
-    0xfa, 0x3b, 0xa1, 0x42, 0x33, 0xa1, 0x0c, 0x72, 0xe0, 0x70, 0xf9, 0xea,
-    0x85, 0xc5, 0xff, 0xa1, 0x38, 0x0f, 0xe6, 0x16, 0xeb, 0x17, 0xe9, 0x22,
-    0xcf, 0x2c, 0x5f, 0x6b, 0x4f, 0xba, 0xc5, 0xf1, 0x66, 0xd1, 0x98, 0x88,
-    0x88, 0xe3, 0xe0, 0xc9, 0xaf, 0xf7, 0x5b, 0xd6, 0x46, 0xfd, 0x86, 0x28,
-    0xe5, 0x8b, 0xed, 0xfe, 0xdb, 0xac, 0x5f, 0xe0, 0xf9, 0x9a, 0xdf, 0xf2,
-    0xb1, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xf7, 0xd8, 0xa5,
-    0xf4, 0xb1, 0x78, 0x5c, 0x95, 0x8b, 0xff, 0xcf, 0x3e, 0x7d, 0x37, 0x33,
-    0x08, 0xd5, 0x8a, 0x82, 0x24, 0x7b, 0x2c, 0x21, 0xdb, 0xfc, 0x6b, 0x16,
-    0x04, 0xc0, 0x58, 0xbf, 0xcf, 0xdc, 0x27, 0xa4, 0xc7, 0xac, 0x5f, 0x1b,
-    0x0f, 0xe2, 0xc5, 0xed, 0xba, 0xde, 0x8b, 0x17, 0x85, 0x21, 0xac, 0x5f,
-    0xf3, 0xc1, 0xfe, 0x23, 0x9d, 0xd6, 0x2a, 0x07, 0xaf, 0xe1, 0xeb, 0x46,
-    0x46, 0xea, 0xb4, 0xa3, 0x52, 0x54, 0x92, 0x8c, 0xdb, 0x21, 0x9a, 0x69,
-    0x80, 0x0d, 0x38, 0x73, 0xd0, 0x90, 0x37, 0xdb, 0xfd, 0x19, 0xf6, 0x3e,
-    0x48, 0xd6, 0x2a, 0x31, 0x78, 0xeb, 0x52, 0x8f, 0x42, 0x96, 0x3f, 0x1d,
-    0x0a, 0x8b, 0xff, 0x63, 0x45, 0x19, 0xf2, 0xcf, 0x71, 0x62, 0xfd, 0xad,
-    0xd9, 0xb7, 0x54, 0x99, 0x05, 0xc6, 0x8d, 0x62, 0xfe, 0xf6, 0x61, 0x7b,
-    0x8b, 0x17, 0xb8, 0x22, 0x58, 0xb4, 0x66, 0x22, 0x6b, 0x46, 0xfc, 0x19,
-    0xf1, 0x6d, 0xfe, 0x21, 0x78, 0xb3, 0xa3, 0x2c, 0x5f, 0xfc, 0xde, 0x21,
-    0x6d, 0xcc, 0x3c, 0xc7, 0xac, 0x5f, 0xb0, 0x87, 0xf9, 0x58, 0xbe, 0xfb,
-    0x6a, 0x33, 0x11, 0x47, 0xf3, 0x40, 0x92, 0x2e, 0x08, 0x0b, 0x17, 0x30,
-    0x4b, 0x17, 0x4f, 0x6b, 0x17, 0x9f, 0xa4, 0x66, 0x1e, 0x4b, 0x8c, 0xf0,
-    0x62, 0xff, 0xff, 0x08, 0x79, 0x18, 0x1e, 0x7c, 0x84, 0xd1, 0xf8, 0x6c,
-    0xf1, 0x62, 0xff, 0xfd, 0xbb, 0xf3, 0x07, 0x85, 0x21, 0x78, 0xd6, 0xe2,
-    0xc5, 0xff, 0x7d, 0xd8, 0x18, 0x2d, 0x6c, 0xb1, 0x7e, 0xf8, 0x98, 0xd8,
-    0xcf, 0xa2, 0x47, 0xca, 0xf6, 0x98, 0x26, 0x7a, 0x38, 0x7c, 0xd7, 0x13,
-    0xae, 0xf4, 0x70, 0x14, 0x35, 0x4d, 0x6f, 0x29, 0x06, 0xff, 0x46, 0x66,
-    0xb7, 0x66, 0xdd, 0x52, 0x6b, 0x97, 0xe8, 0xbc, 0x39, 0x25, 0x8b, 0xfc,
-    0x59, 0xb6, 0xb4, 0xe1, 0x2c, 0x5f, 0x7d, 0xe6, 0x25, 0x8b, 0xf6, 0x07,
-    0x3b, 0x46, 0x62, 0x20, 0x77, 0x29, 0xea, 0x35, 0xbf, 0xd1, 0x99, 0xad,
-    0xd9, 0xb7, 0x54, 0x9c, 0x85, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x3b, 0x0b,
-    0xe8, 0xe9, 0xf6, 0x2c, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75,
-    0x49, 0x1c, 0x5a, 0x33, 0x11, 0x58, 0xe6, 0xe7, 0x25, 0xbf, 0xe6, 0x7e,
-    0x7f, 0x21, 0xc9, 0x58, 0xbc, 0x7c, 0xfa, 0xc5, 0xff, 0x66, 0xe2, 0x92,
-    0xee, 0x1c, 0x58, 0xbf, 0xb5, 0xa9, 0xdf, 0xee, 0xb1, 0x71, 0x46, 0x7d,
-    0x17, 0xec, 0x70, 0x43, 0xbc, 0x3b, 0xbf, 0x75, 0xc8, 0xd0, 0x19, 0xb2,
-    0xc5, 0xff, 0xbd, 0xc7, 0x38, 0x8d, 0x2c, 0x02, 0xc5, 0xf1, 0x4c, 0x0e,
-    0xb1, 0x7c, 0xe4, 0x07, 0x58, 0xb9, 0xcd, 0x58, 0xa8, 0x1b, 0x9e, 0x84,
-    0x37, 0xfe, 0x8d, 0xba, 0xd3, 0xce, 0xa1, 0x8f, 0xd1, 0x62, 0xd0, 0x58,
-    0xbf, 0x6b, 0x76, 0x6d, 0xd5, 0x24, 0xa9, 0x7f, 0xdb, 0xfd, 0xe2, 0xfc,
-    0xed, 0x8b, 0x17, 0xff, 0xbf, 0x3b, 0x4f, 0xdf, 0xa3, 0x0f, 0xee, 0xb1,
-    0x18, 0x6f, 0x2f, 0xfc, 0xe7, 0x2c, 0x04, 0x44, 0xc1, 0x2c, 0x5d, 0x08,
-    0xcc, 0x4c, 0x46, 0x27, 0x3f, 0x2f, 0xd7, 0x69, 0xb1, 0xb4, 0x64, 0x77,
-    0xfc, 0xfe, 0x80, 0x86, 0xc4, 0x05, 0x8b, 0xf3, 0xb7, 0x79, 0x1c, 0xb1,
-    0x4c, 0x7c, 0x9d, 0x0e, 0x6e, 0xf8, 0x96, 0x2f, 0xfe, 0xe3, 0x76, 0x79,
-    0xff, 0xb1, 0xfa, 0x2c, 0x5f, 0xfe, 0x98, 0x7e, 0x5b, 0xc2, 0x2f, 0x38,
-    0xd6, 0x2d, 0x19, 0xd6, 0xab, 0xfa, 0x93, 0x51, 0xa0, 0x62, 0xdf, 0x64,
-    0x67, 0x8e, 0xbb, 0xf0, 0x8e, 0xe1, 0x1f, 0x86, 0x04, 0x8f, 0x7f, 0xff,
-    0xf3, 0x7b, 0x01, 0x30, 0x8c, 0x0c, 0xf8, 0x39, 0x84, 0x8d, 0x98, 0xd5,
-    0x8a, 0xd9, 0xf0, 0xa5, 0xa1, 0x5a, 0x16, 0x0e, 0x3f, 0x9c, 0x8e, 0xcb,
-    0x78, 0x6d, 0x77, 0x0a, 0x07, 0xaf, 0x0c, 0xf4, 0xb4, 0x78, 0x6e, 0x34,
-    0xb5, 0x30, 0x15, 0x94, 0x31, 0xb8, 0xa9, 0xe8, 0x78, 0x8a, 0x1e, 0xdd,
-    0x27, 0x10, 0xc2, 0x85, 0x2d, 0xff, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea,
-    0x90, 0xe0, 0xbf, 0xe7, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xb5, 0x2d,
-    0x18, 0xc8, 0x95, 0xf2, 0x5d, 0xff, 0xe8, 0xc3, 0xb4, 0x23, 0x33, 0x5b,
-    0xb3, 0x6e, 0xa9, 0x16, 0xcb, 0xa3, 0x6e, 0xbb, 0x58, 0xbd, 0xd6, 0xef,
-    0xa5, 0x8b, 0xd1, 0xbc, 0x6f, 0xc5, 0x8b, 0x6e, 0xb1, 0x78, 0x44, 0xeb,
-    0x17, 0x85, 0xa0, 0x2c, 0x5d, 0x9d, 0xac, 0x5f, 0x8e, 0x79, 0x7e, 0x2c,
-    0x5f, 0xd3, 0xa0, 0x37, 0x7c, 0x58, 0xb0, 0xf0, 0xf5, 0xfe, 0x51, 0x7e,
-    0xf4, 0xfc, 0x3e, 0x2c, 0x5f, 0xdc, 0x90, 0x66, 0x44, 0xb1, 0x7b, 0xa0,
-    0xa0, 0xb1, 0x5d, 0x6a, 0x6b, 0x70, 0x13, 0xdc, 0x73, 0xb1, 0xe7, 0x6f,
-    0x22, 0x7e, 0x15, 0x74, 0x2e, 0xbf, 0xe0, 0xa2, 0x83, 0x6b, 0x6f, 0x89,
-    0x62, 0xe1, 0xc1, 0x62, 0xff, 0xfb, 0x02, 0xcd, 0xbd, 0xec, 0x09, 0xbc,
-    0xc6, 0xac, 0x5f, 0xe8, 0x49, 0xf3, 0xef, 0x05, 0x8b, 0x0d, 0x62, 0xb4,
-    0x78, 0xbe, 0x33, 0xac, 0x4c, 0x43, 0xe7, 0xc4, 0x30, 0x28, 0x4c, 0x5a,
-    0x56, 0x2f, 0xba, 0x87, 0x3d, 0xac, 0x54, 0x6b, 0x37, 0x0e, 0x23, 0x7f,
-    0xd9, 0xd9, 0x60, 0x00, 0xd0, 0x58, 0xb8, 0xfb, 0xac, 0x5f, 0xb6, 0x14,
-    0x33, 0x65, 0x8b, 0xf9, 0xfb, 0xe0, 0xf0, 0x96, 0x2f, 0xee, 0xf2, 0x13,
-    0xa0, 0x2c, 0x56, 0x1e, 0xeb, 0x17, 0x5f, 0x72, 0x75, 0xc5, 0x8b, 0xff,
-    0xb6, 0xe0, 0x99, 0xe1, 0xcf, 0xb4, 0x16, 0x2d, 0x3d, 0x9f, 0x49, 0x11,
-    0xd4, 0xa7, 0x15, 0x03, 0x9c, 0x19, 0xd4, 0x22, 0x3f, 0x08, 0x9b, 0xf7,
-    0xde, 0x4b, 0x65, 0x8b, 0xff, 0xc5, 0x87, 0x3b, 0x40, 0x31, 0xfe, 0x7b,
-    0x58, 0xbb, 0xe1, 0xac, 0x5f, 0xfb, 0x47, 0x14, 0x27, 0xfb, 0xc9, 0xd6,
-    0x2d, 0xe5, 0x8a, 0x93, 0xd3, 0x1a, 0x0d, 0x32, 0x23, 0x44, 0xd9, 0x78,
-    0x02, 0x1a, 0xc5, 0xf3, 0x8b, 0xaf, 0xc5, 0x8a, 0x23, 0xc5, 0xf0, 0xf5,
-    0xe3, 0xb0, 0x16, 0x2f, 0x8a, 0x7b, 0x82, 0xc5, 0xc1, 0xec, 0xb1, 0x7f,
-    0xbd, 0xc1, 0x89, 0xb5, 0x05, 0x8a, 0x39, 0xe7, 0x90, 0xd5, 0xed, 0x34,
-    0x4b, 0x14, 0xe6, 0xfc, 0x44, 0x37, 0xdb, 0xb6, 0x80, 0xb1, 0x7e, 0x93,
-    0xe7, 0x7e, 0x58, 0xb6, 0xd2, 0x79, 0xa4, 0x49, 0x7f, 0x4e, 0xa4, 0xf3,
-    0x12, 0xc5, 0x82, 0x58, 0xbf, 0xf6, 0xbe, 0xd8, 0x42, 0x86, 0x71, 0x62,
-    0xff, 0xfb, 0xb0, 0x0f, 0xed, 0x0c, 0xe1, 0x09, 0x83, 0x58, 0xa9, 0x45,
-    0x1b, 0x89, 0xb1, 0xf5, 0xfa, 0x3f, 0xb8, 0x67, 0x96, 0x2f, 0x81, 0x9a,
-    0x89, 0x62, 0xff, 0x37, 0xb8, 0x1f, 0x27, 0x16, 0x2f, 0xff, 0x7b, 0x99,
-    0xa9, 0xc2, 0xfe, 0x01, 0x96, 0x2f, 0xbf, 0x21, 0xc4, 0xb1, 0x52, 0x7d,
-    0xae, 0x91, 0x7b, 0xd2, 0x75, 0x8a, 0x31, 0x74, 0x62, 0x05, 0x03, 0x86,
-    0xce, 0x33, 0x9a, 0x43, 0xb8, 0xec, 0x50, 0xb1, 0xd3, 0x69, 0xc9, 0xff,
-    0x0d, 0x16, 0x2d, 0x01, 0x69, 0x12, 0x7a, 0x14, 0x3d, 0x44, 0x17, 0xff,
-    0x1b, 0x25, 0xec, 0xd3, 0xec, 0xc7, 0x58, 0xbe, 0x68, 0x1a, 0xeb, 0x14,
-    0xb1, 0xf3, 0x47, 0x7f, 0x8c, 0x9c, 0xfb, 0x8b, 0x75, 0x8a, 0x34, 0xf4,
-    0x40, 0x39, 0x77, 0x59, 0xd6, 0xac, 0x5f, 0xf4, 0xc3, 0xec, 0x3f, 0xb6,
-    0x96, 0x2f, 0x3f, 0xb8, 0xb1, 0x5a, 0x3d, 0x62, 0x39, 0xbc, 0xf9, 0xa5,
-    0x8b, 0xbd, 0xc5, 0x8b, 0x9b, 0xb5, 0x8a, 0xc3, 0x60, 0x43, 0x16, 0x7d,
-    0x22, 0x30, 0xe4, 0x3f, 0x4c, 0xbf, 0x69, 0x8b, 0x25, 0x62, 0xff, 0xb3,
-    0x6f, 0xe7, 0x1f, 0x3b, 0x58, 0xa5, 0x48, 0x36, 0x3a, 0x77, 0x9a, 0x23,
-    0xfc, 0x60, 0x8c, 0x6a, 0x44, 0xd7, 0x49, 0x2c, 0x5e, 0xc7, 0x1a, 0xc5,
-    0xe1, 0xe1, 0xd6, 0x2c, 0x43, 0x37, 0x2e, 0x39, 0x7e, 0x92, 0xf6, 0x79,
-    0x62, 0xff, 0xfe, 0x6f, 0x0f, 0x3a, 0x9f, 0x53, 0xf6, 0xe1, 0x60, 0x16,
-    0x29, 0xd1, 0x50, 0x44, 0xa2, 0x27, 0xbf, 0xf1, 0x4e, 0x6f, 0xf7, 0xe8,
-    0xda, 0x58, 0xa9, 0x4d, 0x96, 0x10, 0xf7, 0xf1, 0x75, 0xc2, 0x0d, 0x62,
-    0xfe, 0xea, 0x9d, 0xff, 0x27, 0x58, 0xb1, 0xd6, 0x28, 0x47, 0x88, 0x19,
-    0x95, 0xc2, 0x82, 0xc5, 0xde, 0xe2, 0xc5, 0xb7, 0x58, 0xa9, 0x35, 0x6e,
-    0x31, 0x78, 0x52, 0x75, 0x8b, 0xfa, 0x05, 0x3e, 0xfc, 0xac, 0x5c, 0xfa,
-    0x58, 0xad, 0x93, 0x43, 0x89, 0x74, 0x04, 0x64, 0x87, 0xc1, 0xff, 0x0e,
-    0xf4, 0x2d, 0xbf, 0x7d, 0xf5, 0x23, 0x58, 0xbe, 0x3f, 0x53, 0x44, 0xb1,
-    0x7f, 0x85, 0x1f, 0x17, 0xc4, 0x5e, 0x58, 0xbf, 0xf3, 0x6c, 0x19, 0x67,
-    0x08, 0x5f, 0x58, 0xbe, 0x93, 0x87, 0xb2, 0xc5, 0x6e, 0x8e, 0xd7, 0x28,
-    0xf9, 0x3b, 0x1c, 0x92, 0x05, 0xff, 0x3c, 0x1b, 0x87, 0x9c, 0xf2, 0xc5,
-    0xd0, 0xc5, 0x8b, 0xfc, 0xcf, 0xe8, 0xbe, 0x23, 0x56, 0x2a, 0x23, 0xcd,
-    0xf8, 0xbd, 0xff, 0xc7, 0x8c, 0xe3, 0xf0, 0x62, 0xd4, 0xf1, 0x62, 0xfe,
-    0xda, 0x0f, 0xbc, 0x9d, 0x62, 0xff, 0xf1, 0xcb, 0x01, 0x20, 0xc2, 0x9c,
-    0x09, 0x62, 0xa4, 0xfe, 0x1c, 0xc2, 0xfd, 0xc8, 0xe1, 0x60, 0xd6, 0x2a,
-    0x53, 0xb5, 0xc8, 0x42, 0xb9, 0x1e, 0xa1, 0x82, 0xc4, 0x17, 0x34, 0x16,
-    0x2f, 0xce, 0x6c, 0xf2, 0x56, 0x2f, 0xfa, 0x11, 0x99, 0xad, 0xd9, 0xb7,
-    0x54, 0x8c, 0x05, 0x4a, 0x22, 0xb4, 0x2e, 0xc5, 0x17, 0xbe, 0xff, 0x58,
-    0xbe, 0x6f, 0x3f, 0x96, 0x2f, 0x0d, 0xc9, 0x62, 0xa3, 0xcf, 0x6c, 0x43,
-    0xa1, 0x11, 0x5c, 0x0e, 0xd6, 0x2e, 0xeb, 0xdd, 0x62, 0xf4, 0x34, 0x75,
-    0x8b, 0x9f, 0xeb, 0x17, 0x42, 0x0b, 0x17, 0x9e, 0x12, 0xb1, 0x7e, 0xf0,
-    0x03, 0x28, 0x2c, 0x5b, 0x61, 0x9e, 0x33, 0x0e, 0x5a, 0x56, 0x2f, 0xf7,
-    0xa1, 0x3a, 0xd4, 0xc1, 0x62, 0xed, 0x9d, 0x62, 0xff, 0xa7, 0x39, 0x17,
-    0xdc, 0x2f, 0x2c, 0x56, 0x22, 0x61, 0xc4, 0x48, 0xd3, 0x83, 0x16, 0x95,
-    0x8b, 0x8b, 0x65, 0x8a, 0xe1, 0xa9, 0x10, 0x8d, 0x4a, 0xa3, 0xfd, 0x8c,
-    0xe0, 0x32, 0x31, 0xcc, 0x1e, 0xdc, 0x5d, 0xd7, 0x9a, 0x18, 0x02, 0x63,
-    0xbc, 0x2f, 0x71, 0x62, 0xfe, 0x17, 0xb9, 0xc7, 0x89, 0x62, 0xfd, 0x91,
-    0x14, 0x9d, 0x62, 0x86, 0x7b, 0x1e, 0x30, 0xbc, 0x13, 0x81, 0x62, 0xfe,
-    0x3f, 0xdb, 0x53, 0xb2, 0xc5, 0xb1, 0x62, 0xa4, 0xf0, 0x23, 0x8b, 0xee,
-    0xcf, 0x2c, 0x5e, 0x62, 0x02, 0xc5, 0x1c, 0xd9, 0xf0, 0x5e, 0xf1, 0x4e,
-    0xcb, 0x17, 0xd9, 0x1e, 0xfa, 0x58, 0xbf, 0xf6, 0x77, 0x0f, 0xcf, 0x0d,
-    0xfc, 0xac, 0x54, 0x13, 0xf1, 0x77, 0x68, 0x88, 0xbe, 0xbc, 0x05, 0x7e,
-    0xbc, 0x84, 0x87, 0x7a, 0x89, 0x6f, 0xee, 0xf5, 0x21, 0xb1, 0x2c, 0x5f,
-    0xe9, 0xcd, 0x7b, 0xd9, 0xc5, 0x8a, 0x63, 0xe2, 0x01, 0x7d, 0xf8, 0xe1,
-    0xe9, 0xb8, 0xb1, 0x7f, 0xa0, 0xda, 0x8b, 0xef, 0xa5, 0x8b, 0xf3, 0xff,
-    0x90, 0x3a, 0xc5, 0xfe, 0x17, 0x7a, 0x79, 0x3e, 0x2c, 0x5f, 0xbe, 0xf2,
-    0x5b, 0x2c, 0x5f, 0xf4, 0xed, 0xe2, 0x91, 0x7b, 0x8b, 0x15, 0xf4, 0x4b,
-    0x70, 0xd2, 0x38, 0xa2, 0xf8, 0xb3, 0x92, 0xb1, 0x51, 0x26, 0x90, 0x03,
-    0x5f, 0x42, 0xff, 0xa1, 0x9d, 0xe9, 0xd1, 0xab, 0x17, 0xa0, 0xe0, 0x58,
-    0xbe, 0x2c, 0xf3, 0xac, 0x5f, 0xa4, 0xb7, 0x73, 0xac, 0x51, 0x1e, 0x4f,
-    0x88, 0x6e, 0x29, 0x58, 0xbe, 0xef, 0x77, 0x35, 0x62, 0xfc, 0xc6, 0xe7,
-    0xd9, 0x62, 0xa5, 0x56, 0x0e, 0x46, 0xe4, 0xe8, 0xd1, 0x0f, 0x33, 0x30,
-    0x08, 0x7c, 0x2c, 0x22, 0x6b, 0xda, 0xf4, 0xac, 0x5f, 0xfb, 0x02, 0x38,
-    0xbd, 0xf9, 0x17, 0x5e, 0xb1, 0x7f, 0xf6, 0x9b, 0xe1, 0xe1, 0x64, 0x53,
-    0x1e, 0xb1, 0x7f, 0xfa, 0x1f, 0xc2, 0x08, 0x3d, 0x7d, 0xe4, 0xeb, 0x17,
-    0xf3, 0xfb, 0x0f, 0x3f, 0x58, 0xbf, 0xa7, 0x7f, 0xbc, 0x5c, 0x58, 0xbf,
-    0xa6, 0x1f, 0x78, 0xb8, 0xb1, 0x7f, 0xce, 0x0d, 0xbf, 0x3c, 0x17, 0x16,
-    0x2f, 0xf4, 0x1b, 0xdc, 0x72, 0x95, 0x8b, 0x4e, 0x8f, 0xb4, 0x8e, 0xeb,
-    0xb4, 0xda, 0xf4, 0x98, 0x72, 0xde, 0x18, 0x7a, 0x13, 0x97, 0xff, 0x89,
-    0x82, 0xcd, 0xff, 0x3d, 0xc2, 0x3b, 0x16, 0x2e, 0x8f, 0x65, 0x8b, 0xff,
-    0xc2, 0x26, 0x37, 0x99, 0xe9, 0x27, 0x02, 0xc5, 0xfa, 0x2e, 0x79, 0xf6,
-    0x58, 0xbf, 0xa0, 0xf1, 0x33, 0x41, 0x62, 0x9c, 0xf6, 0x58, 0xae, 0xff,
-    0x61, 0x0c, 0x73, 0x3d, 0x16, 0x2f, 0xfd, 0x87, 0xcd, 0x67, 0x70, 0xcf,
-    0x2c, 0x5f, 0xcf, 0xf7, 0x3e, 0x1a, 0xb1, 0x5f, 0x3e, 0xde, 0x1f, 0xdf,
-    0xf3, 0x7f, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0xbf, 0x3d, 0xb0, 0xd6, 0x2f,
-    0xfe, 0xdb, 0xef, 0x25, 0x91, 0x3e, 0x9d, 0x62, 0xb0, 0xfb, 0x58, 0xa6,
-    0xa5, 0x74, 0x6b, 0x61, 0xd1, 0xa3, 0x64, 0x76, 0x71, 0x28, 0xe9, 0x3c,
-    0xe3, 0x5f, 0x85, 0x17, 0x08, 0x3d, 0x0a, 0x11, 0x11, 0x05, 0x0a, 0x5b,
-    0x12, 0xc5, 0xa3, 0x96, 0x2f, 0xf4, 0x97, 0x80, 0x19, 0x41, 0x62, 0xff,
-    0xa2, 0x29, 0x3f, 0xde, 0x2e, 0x2c, 0x5f, 0x6e, 0xf8, 0x35, 0x8a, 0x58,
-    0xb6, 0xeb, 0x18, 0x4c, 0xb8, 0x40, 0x48, 0xba, 0x03, 0x58, 0xbf, 0xfd,
-    0x90, 0xfb, 0x40, 0x3f, 0x0a, 0x73, 0x65, 0x8b, 0xfe, 0x6e, 0xc6, 0xe2,
-    0xeb, 0xdf, 0x4b, 0x15, 0x1b, 0xa7, 0x3f, 0xb0, 0x8c, 0x05, 0x70, 0xd3,
-    0xb3, 0xb7, 0x2f, 0xd1, 0x01, 0xc6, 0x00, 0x31, 0xc4, 0xcb, 0xe9, 0x86,
-    0x0d, 0x62, 0xe1, 0x12, 0xc5, 0x1a, 0x6e, 0x74, 0x45, 0x7d, 0x9e, 0xfe,
-    0x2c, 0x5c, 0xc6, 0xac, 0x5d, 0x83, 0x23, 0x75, 0x1c, 0x45, 0x74, 0x6d,
-    0xba, 0xe5, 0x0a, 0x2e, 0xf0, 0x16, 0x2f, 0x87, 0xec, 0xfa, 0xc5, 0xf0,
-    0xff, 0x9b, 0x2c, 0x5d, 0xd5, 0x05, 0x8b, 0xda, 0x68, 0x2c, 0x5f, 0x67,
-    0xb0, 0xeb, 0x15, 0xa3, 0x7e, 0xc3, 0xb7, 0xb3, 0xbf, 0x2c, 0x56, 0xc6,
-    0xf8, 0xd2, 0x0a, 0xd9, 0x31, 0xac, 0x18, 0x72, 0x3d, 0x12, 0x34, 0x26,
-    0x2f, 0xc1, 0xc7, 0x31, 0x01, 0x62, 0xfe, 0xcf, 0xb0, 0x65, 0xe5, 0x8a,
-    0xd8, 0xf6, 0x86, 0x59, 0x7f, 0xa2, 0xcd, 0x3e, 0xcc, 0x75, 0x8b, 0xf4,
-    0x69, 0x26, 0x8f, 0x16, 0x2f, 0xfb, 0x22, 0xd4, 0xe0, 0xda, 0x0b, 0x17,
-    0xf6, 0x7b, 0xd3, 0xae, 0x2c, 0x5f, 0xfe, 0x72, 0x14, 0x33, 0x86, 0x37,
-    0x70, 0xc5, 0x8b, 0xf1, 0x03, 0x60, 0x79, 0x62, 0xe7, 0x35, 0x62, 0x98,
-    0xf0, 0x84, 0x55, 0x7e, 0x0f, 0xdc, 0x9f, 0x2c, 0x54, 0xa7, 0x8b, 0x84,
-    0x7a, 0x35, 0x39, 0x71, 0x1c, 0xf8, 0xba, 0x3a, 0x11, 0xa1, 0x90, 0xda,
-    0x32, 0x37, 0x75, 0x82, 0xbd, 0x61, 0x27, 0x5d, 0x49, 0x26, 0x38, 0x3d,
-    0xa3, 0x89, 0x83, 0xc8, 0xe3, 0xb0, 0xc9, 0xd6, 0xb3, 0x61, 0xcf, 0xbc,
-    0xa7, 0x5e, 0xe3, 0xc8, 0x78, 0xde, 0x22, 0x8d, 0x57, 0x51, 0xfe, 0x9e,
-    0x1b, 0x7f, 0x95, 0x90, 0xd2, 0x9d, 0x01, 0x0d, 0xb2, 0x95, 0xc5, 0xc9,
-    0xd9, 0x0f, 0x4a, 0x5d, 0x14, 0x32, 0xba, 0x2e, 0x04, 0x5d, 0x1d, 0x1a,
-    0x28, 0x72, 0x9b, 0x6f, 0xe7, 0x83, 0xf9, 0xbe, 0xb1, 0x78, 0xe2, 0xd2,
-    0x45, 0xdc, 0xe2, 0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54,
-    0x8c, 0x65, 0xd3, 0xd4, 0xb1, 0x76, 0xb1, 0x62, 0xd3, 0xa3, 0x63, 0xf1,
-    0xab, 0xfd, 0x86, 0xf3, 0xf2, 0x5e, 0x58, 0xbe, 0xf4, 0x24, 0xd5, 0x8a,
-    0x23, 0xd8, 0x0c, 0xd2, 0xd1, 0x92, 0x9c, 0x23, 0x96, 0xe8, 0x78, 0xe3,
-    0x1f, 0x84, 0x0f, 0x1f, 0xaf, 0x00, 0x38, 0x2c, 0x5f, 0x6d, 0xb8, 0x89,
-    0x62, 0xf8, 0x6f, 0xd2, 0x33, 0xb3, 0xc4, 0x0c, 0x7e, 0xf3, 0x31, 0xab,
-    0x17, 0xfd, 0x1b, 0xc6, 0xff, 0x79, 0x3b, 0x0d, 0x62, 0xff, 0xba, 0xce,
-    0xa0, 0xe3, 0xb0, 0xf0, 0x95, 0x8b, 0x75, 0xab, 0x17, 0x04, 0x12, 0xc5,
-    0x75, 0xa7, 0xef, 0xd7, 0x11, 0x82, 0x17, 0xbf, 0x46, 0xf1, 0xb4, 0x6d,
-    0x1b, 0xc6, 0xcb, 0x17, 0xf7, 0x5b, 0x1b, 0xf5, 0xc8, 0x43, 0xeb, 0x16,
-    0xeb, 0xb5, 0x8b, 0xdd, 0x77, 0x01, 0xac, 0x54, 0x6e, 0x7f, 0xdd, 0x6a,
-    0x04, 0x6a, 0x19, 0xbf, 0xb5, 0xa1, 0x16, 0x7d, 0x62, 0xe8, 0xd7, 0x1a,
-    0x2c, 0x5f, 0xfe, 0x7f, 0x79, 0xa7, 0xd9, 0xf9, 0x70, 0x2c, 0x5f, 0x49,
-    0x3f, 0xd6, 0x2f, 0xa7, 0x69, 0xd2, 0xc5, 0xfe, 0xe4, 0x81, 0xbc, 0xc6,
-    0xac, 0x5e, 0xf4, 0xc4, 0xb1, 0x7d, 0x31, 0x39, 0xd6, 0x2f, 0xfc, 0x58,
-    0x2d, 0xcb, 0x36, 0x0e, 0x0b, 0x17, 0x0f, 0x16, 0x2c, 0xe4, 0x7b, 0x1d,
-    0x48, 0x35, 0x88, 0xa4, 0xd3, 0xdd, 0xdf, 0x95, 0x8b, 0xf4, 0x9e, 0x7b,
-    0xe2, 0xc5, 0xd3, 0xda, 0xc5, 0xe9, 0xd4, 0xac, 0x56, 0x8d, 0xa7, 0x06,
-    0x2f, 0xf3, 0x45, 0x09, 0x26, 0xed, 0x62, 0xfb, 0x61, 0x0e, 0x3d, 0x62,
-    0xf8, 0x29, 0x29, 0x58, 0xbf, 0xce, 0x03, 0x32, 0x29, 0x3a, 0xc5, 0x49,
-    0xeb, 0xf5, 0x11, 0x54, 0x15, 0x88, 0x0d, 0x21, 0xc8, 0x63, 0xc8, 0xe2,
-    0x34, 0xd4, 0x30, 0xbe, 0x44, 0x42, 0xfe, 0x5d, 0xe8, 0x42, 0x19, 0xa7,
-    0x53, 0xfd, 0xa0, 0xb1, 0x7e, 0x3c, 0xe7, 0xb8, 0xb1, 0x7e, 0xe3, 0x97,
-    0x70, 0x58, 0xbb, 0x22, 0x58, 0xb0, 0x46, 0x1e, 0x0e, 0x14, 0xd4, 0x68,
-    0x8a, 0x41, 0x89, 0x63, 0x4d, 0xfe, 0xfc, 0xeb, 0x60, 0xc4, 0x05, 0x8b,
-    0xf7, 0xe7, 0xa0, 0xe5, 0x62, 0xff, 0x6b, 0x61, 0x89, 0xb5, 0x05, 0x8b,
-    0xfd, 0x3b, 0x0c, 0x4d, 0xa8, 0x2c, 0x54, 0x11, 0x2b, 0x85, 0x5c, 0x36,
-    0xbd, 0xd0, 0xfc, 0x58, 0xbd, 0x1f, 0x27, 0x58, 0xbe, 0x70, 0xb3, 0xeb,
-    0x17, 0xb6, 0x62, 0x58, 0xac, 0x45, 0x79, 0xa5, 0xee, 0x41, 0xf2, 0x01,
-    0x11, 0xdf, 0xee, 0x83, 0x9c, 0x83, 0x92, 0xc5, 0xfd, 0x3c, 0xcf, 0xbf,
-    0x45, 0x8a, 0x73, 0xe3, 0x11, 0xa5, 0xff, 0xff, 0x0b, 0x7d, 0x67, 0x49,
-    0x2f, 0x68, 0x5b, 0x7e, 0x7d, 0xc7, 0x58, 0xbf, 0xf6, 0xdf, 0xc8, 0xbf,
-    0x23, 0xcd, 0xd6, 0x29, 0xd1, 0x5a, 0x26, 0xbb, 0x9b, 0x8b, 0x17, 0xc6,
-    0x7b, 0x3e, 0xb1, 0x5f, 0x37, 0x7c, 0x17, 0xbf, 0xff, 0x9f, 0xbf, 0x73,
-    0x6d, 0x67, 0x0c, 0xcd, 0xfe, 0x28, 0xf5, 0x8a, 0x94, 0x42, 0xe8, 0x86,
-    0xfd, 0xe2, 0x9f, 0x71, 0x62, 0xdb, 0x2c, 0x5a, 0x40, 0x6e, 0xc8, 0xa2,
-    0xff, 0xff, 0xfa, 0x1c, 0xfe, 0x08, 0x2e, 0x7f, 0x37, 0xce, 0x19, 0x9d,
-    0xc3, 0x8e, 0x4e, 0xb1, 0x78, 0xd7, 0xd2, 0xc5, 0xff, 0xa7, 0x84, 0xfc,
-    0xe0, 0xb0, 0x96, 0x2b, 0xc7, 0xb7, 0xd0, 0x7a, 0xff, 0xe2, 0x78, 0x18,
-    0x1c, 0x5c, 0x7e, 0xc2, 0x58, 0xbc, 0xcd, 0xba, 0xa4, 0xb1, 0x2f, 0x98,
-    0x39, 0x35, 0x62, 0xf8, 0xf3, 0xcc, 0x58, 0xa8, 0x22, 0xeb, 0x74, 0xad,
-    0x15, 0x00, 0x92, 0xfd, 0xf7, 0x3c, 0xe9, 0x62, 0xff, 0xf0, 0x9b, 0x6d,
-    0x61, 0xff, 0x3b, 0x10, 0x96, 0x29, 0xcf, 0xd0, 0x8a, 0x2f, 0xe6, 0x38,
-    0x63, 0xfc, 0xac, 0x5f, 0xd0, 0xce, 0x03, 0xb0, 0x2c, 0x53, 0x1e, 0xf8,
-    0x8b, 0xef, 0xdb, 0x7c, 0x98, 0x0b, 0x17, 0xf4, 0xff, 0x3e, 0xfd, 0x4b,
-    0x17, 0xff, 0xcd, 0xd8, 0x58, 0x5b, 0x0f, 0x4d, 0x9d, 0xf9, 0x62, 0xa5,
-    0x15, 0x80, 0x29, 0x11, 0x85, 0xff, 0xf4, 0xf0, 0xcc, 0x2f, 0x61, 0x9f,
-    0xc7, 0xd9, 0x62, 0xff, 0x67, 0x98, 0x81, 0x91, 0xeb, 0x17, 0xfd, 0x9e,
-    0x2c, 0x14, 0x97, 0x96, 0x2b, 0xe8, 0xbd, 0xe2, 0x8c, 0x71, 0xad, 0xfd,
-    0xad, 0xbd, 0xc6, 0x02, 0xc5, 0xff, 0x31, 0x6e, 0xc4, 0x2c, 0xfa, 0xc5,
-    0xfd, 0x9c, 0x06, 0x60, 0xd6, 0x29, 0x8f, 0x94, 0x8e, 0x2f, 0xd2, 0xfa,
-    0x7f, 0x2c, 0x54, 0x17, 0xf9, 0x47, 0x0c, 0xe3, 0x61, 0xc5, 0xba, 0xef,
-    0x64, 0xaf, 0x0d, 0xcd, 0x43, 0x7b, 0xf0, 0xb2, 0x27, 0xfe, 0x43, 0x37,
-    0xd0, 0xec, 0x11, 0x9f, 0x48, 0x4a, 0xf5, 0x10, 0x5f, 0xda, 0xea, 0xf6,
-    0x10, 0x16, 0x2f, 0xfb, 0xdc, 0x2c, 0xe8, 0x59, 0xc5, 0x8a, 0x93, 0xeb,
-    0x11, 0x8d, 0xf7, 0x8b, 0x3a, 0x96, 0x2f, 0x38, 0x86, 0xb1, 0x7f, 0xf4,
-    0xf7, 0xfc, 0xde, 0x75, 0xdc, 0x38, 0xb1, 0x46, 0xa2, 0xad, 0xc8, 0x63,
-    0xc9, 0x44, 0x3b, 0x7f, 0xf1, 0x78, 0xd1, 0x49, 0x66, 0xf3, 0xa5, 0x8b,
-    0xee, 0xbd, 0x85, 0xba, 0xc5, 0xf1, 0xb8, 0x5d, 0xac, 0x53, 0x9e, 0x6e,
-    0x8a, 0x6e, 0xdb, 0xaf, 0x58, 0xbf, 0xff, 0xfb, 0x37, 0x18, 0xb6, 0x0c,
-    0x9b, 0xd2, 0x07, 0x83, 0xf8, 0xa4, 0x0b, 0x15, 0x88, 0x91, 0xf0, 0xf5,
-    0xff, 0xff, 0x16, 0x0c, 0xb1, 0x8d, 0xe6, 0xff, 0x16, 0xd3, 0xbe, 0x6c,
-    0xb1, 0x52, 0x99, 0xf3, 0xc2, 0xc8, 0x44, 0x57, 0xef, 0x71, 0xbb, 0xdd,
-    0x62, 0xce, 0xb1, 0x6d, 0x6c, 0x6f, 0x00, 0x57, 0x7f, 0xfc, 0x7e, 0x99,
-    0xad, 0x3f, 0x4e, 0x38, 0x9b, 0x4b, 0x15, 0x2a, 0xaf, 0x3f, 0x1e, 0x83,
-    0x38, 0x08, 0xa2, 0xfe, 0xf6, 0x14, 0x85, 0x1c, 0xb1, 0x7f, 0xfd, 0x39,
-    0xcc, 0x23, 0x38, 0xf1, 0xd2, 0x40, 0x58, 0xac, 0x44, 0x11, 0x18, 0xdf,
-    0xf8, 0x98, 0xe1, 0x30, 0xe7, 0xbe, 0x2c, 0x5f, 0x3c, 0x4e, 0x12, 0xc5,
-    0xfb, 0xc4, 0xc0, 0xe2, 0xc5, 0xd3, 0xa8, 0x1e, 0x61, 0xa4, 0x97, 0xff,
-    0x39, 0xf8, 0x67, 0xdf, 0xc5, 0x27, 0x58, 0xa8, 0x26, 0x40, 0x02, 0x1e,
-    0x42, 0x33, 0xc5, 0xd7, 0xf7, 0x4c, 0xea, 0x72, 0x89, 0x62, 0xff, 0x73,
-    0xef, 0x1e, 0x26, 0x1a, 0xc5, 0xf3, 0x14, 0xc1, 0x62, 0xf9, 0xbc, 0xdb,
-    0xac, 0x5f, 0xf4, 0xf4, 0x6d, 0x6f, 0xf6, 0xea, 0x58, 0xbf, 0xdd, 0xf3,
-    0xdf, 0x9f, 0xca, 0xc5, 0xa5, 0x62, 0xf9, 0x8f, 0x84, 0xb1, 0x52, 0x6c,
-    0xbe, 0x23, 0x7f, 0xff, 0xff, 0xf7, 0x63, 0x21, 0x34, 0x78, 0xa4, 0x6c,
-    0x40, 0xfe, 0x7b, 0x0f, 0xf6, 0x17, 0x5f, 0x90, 0xf7, 0x31, 0x62, 0xff,
-    0x3c, 0xee, 0x58, 0xfb, 0x2c, 0x54, 0x15, 0x27, 0x76, 0x67, 0xa3, 0x73,
-    0x90, 0xfc, 0x8c, 0x8f, 0xfc, 0xce, 0x22, 0x0e, 0xa8, 0x53, 0xdf, 0xc5,
-    0xef, 0xe0, 0x19, 0x62, 0xf8, 0x5d, 0x7c, 0x73, 0xac, 0x54, 0x9e, 0xc3,
-    0x96, 0xdf, 0xf7, 0x50, 0x8f, 0xee, 0xe1, 0x3f, 0x58, 0xbf, 0x66, 0xc7,
-    0x6f, 0x2c, 0x53, 0x9f, 0x41, 0x1f, 0xdf, 0x37, 0xc3, 0x3a, 0xc5, 0xf4,
-    0x9d, 0xbc, 0xb1, 0x7c, 0x71, 0x02, 0x25, 0x8a, 0x82, 0x62, 0x79, 0x08,
-    0x86, 0x20, 0xe1, 0x20, 0x88, 0xaf, 0xe2, 0x2c, 0x00, 0x7d, 0xac, 0x5f,
-    0xe7, 0xdd, 0xc7, 0xe8, 0x8e, 0xb1, 0x7d, 0xec, 0xee, 0x25, 0x8a, 0xc4,
-    0x45, 0x78, 0xbf, 0xa8, 0xda, 0xed, 0x4a, 0xc5, 0xe8, 0x9c, 0xd5, 0x8a,
-    0x88, 0xdb, 0x70, 0x5e, 0xe8, 0xe1, 0xac, 0x5f, 0xa4, 0xfb, 0x60, 0x4b,
-    0x17, 0xec, 0x1f, 0x3f, 0x2b, 0x17, 0xff, 0x17, 0xbe, 0xd0, 0xd4, 0xef,
-    0x9a, 0x58, 0xbc, 0x79, 0xd2, 0xc5, 0xc3, 0x09, 0x62, 0xff, 0xff, 0xff,
-    0x37, 0xbd, 0x9f, 0xe3, 0x41, 0xcb, 0xd0, 0xcd, 0x67, 0x33, 0xed, 0xb1,
-    0x4c, 0x16, 0x2f, 0x7a, 0x62, 0x58, 0xa9, 0x54, 0x39, 0x8d, 0x1b, 0x91,
-    0x38, 0xde, 0x8a, 0x98, 0xa0, 0x08, 0xa4, 0x3b, 0xc1, 0x90, 0xe1, 0x19,
-    0x7f, 0xe8, 0xbb, 0xf3, 0x8f, 0x0b, 0x0e, 0xb1, 0x7f, 0xc0, 0xf7, 0x1b,
-    0xbd, 0xb0, 0x25, 0x8b, 0xf4, 0x76, 0xff, 0x7e, 0xbd, 0x62, 0xb4, 0x7d,
-    0xe2, 0x3d, 0xbe, 0xee, 0x13, 0xf5, 0x8b, 0xfd, 0xc1, 0xff, 0x37, 0x14,
-    0x7a, 0xc5, 0xb3, 0x87, 0xba, 0x22, 0x4b, 0xa7, 0xa2, 0xc5, 0x7c, 0xf0,
-    0x08, 0x9e, 0xfc, 0xe3, 0x2c, 0x12, 0xc5, 0xff, 0xf4, 0x99, 0x83, 0xfe,
-    0x6b, 0xb9, 0x2f, 0x71, 0x62, 0xbe, 0x7f, 0x02, 0x27, 0xbf, 0xd1, 0x36,
-    0x3c, 0x03, 0x3a, 0xc5, 0x0d, 0x1e, 0x1b, 0xc2, 0x65, 0xc8, 0xaf, 0xf7,
-    0x70, 0x8a, 0x0d, 0xad, 0x96, 0x2e, 0x62, 0x58, 0xbf, 0xb4, 0xe3, 0x7c,
-    0xed, 0x62, 0xfa, 0x1e, 0x7d, 0x96, 0x2a, 0x51, 0x41, 0xb1, 0xc6, 0x0b,
-    0x31, 0x75, 0xff, 0xfe, 0x93, 0x9a, 0x6b, 0x77, 0xf9, 0x7f, 0x71, 0xcb,
-    0xb8, 0x2c, 0x5f, 0xff, 0x7a, 0x77, 0x7f, 0x39, 0xcc, 0xe3, 0x0c, 0x6b,
-    0x17, 0xff, 0x1d, 0xbb, 0xf6, 0xb1, 0xff, 0x23, 0x58, 0xbf, 0xfa, 0x60,
-    0x60, 0x59, 0xdf, 0xbd, 0x27, 0x58, 0xa0, 0x22, 0x34, 0x91, 0x69, 0xd3,
-    0x01, 0xe4, 0x37, 0xea, 0x57, 0x13, 0x32, 0x3a, 0xf7, 0x86, 0xaf, 0xce,
-    0xda, 0x36, 0x5b, 0xa1, 0xe5, 0x8b, 0xe7, 0x3b, 0x41, 0x62, 0xfd, 0x21,
-    0xbb, 0x06, 0xb1, 0x7f, 0xef, 0xb8, 0x7e, 0x78, 0x05, 0x9f, 0x58, 0xbf,
-    0xa4, 0x07, 0x9e, 0x12, 0xc5, 0xfd, 0x9b, 0x61, 0x64, 0x16, 0x2e, 0x98,
-    0x96, 0x2f, 0xff, 0xe9, 0xea, 0xe4, 0xe9, 0xc3, 0xf9, 0x91, 0x4e, 0xb6,
-    0x95, 0x8a, 0x94, 0xde, 0x20, 0x30, 0x32, 0x23, 0x4a, 0x5d, 0x07, 0x45,
-    0xa0, 0x2d, 0x21, 0x8b, 0xff, 0xf9, 0xbf, 0x19, 0xf7, 0x93, 0xb0, 0xf8,
-    0xdb, 0x36, 0x96, 0x2f, 0xfe, 0xe7, 0xf3, 0xa9, 0xfc, 0xf0, 0xe0, 0x96,
-    0x2f, 0xe3, 0xf8, 0x4d, 0xb4, 0xac, 0x51, 0x88, 0xd5, 0xed, 0x78, 0x34,
-    0x8b, 0xfe, 0xf6, 0x60, 0x5e, 0x8b, 0x9b, 0x2c, 0x53, 0x9f, 0x80, 0x8c,
-    0xef, 0xe7, 0xf4, 0x27, 0xce, 0xb1, 0x68, 0x2c, 0x5e, 0x17, 0x78, 0xb1,
-    0x7f, 0xb4, 0xe2, 0xd8, 0x1c, 0x82, 0xc5, 0xfe, 0xfc, 0x9c, 0xce, 0x7c,
-    0x6b, 0x17, 0xf6, 0x76, 0x0c, 0xf7, 0x16, 0x2f, 0xd2, 0x5d, 0xc3, 0x8b,
-    0x1f, 0x35, 0xf5, 0x28, 0x9e, 0x13, 0x2d, 0xfc, 0x71, 0x77, 0x0e, 0x47,
-    0xac, 0x5f, 0x4f, 0xda, 0x3d, 0x62, 0xd0, 0x93, 0xd9, 0x23, 0x4b, 0xef,
-    0xff, 0x34, 0xb1, 0x7f, 0xf3, 0x6b, 0x6f, 0xbe, 0xb0, 0xbb, 0xdd, 0x62,
-    0xe9, 0xd9, 0x62, 0xa0, 0x7b, 0xee, 0x8f, 0x7f, 0xe9, 0xe4, 0xbf, 0x7e,
-    0xf4, 0x9d, 0x62, 0xe6, 0x89, 0x62, 0x86, 0x7a, 0xe6, 0x9f, 0xdf, 0xd2,
-    0x14, 0x45, 0x23, 0x58, 0xbf, 0xf8, 0xb3, 0x8e, 0x03, 0x27, 0x69, 0xe2,
-    0xc5, 0x6c, 0xac, 0x90, 0x63, 0xdb, 0xc3, 0x53, 0xb7, 0xb7, 0x26, 0x8a,
-    0x10, 0x5a, 0x78, 0xf1, 0x1f, 0x42, 0xfb, 0xf6, 0xff, 0x92, 0x35, 0x62,
-    0xff, 0x9b, 0xdf, 0x90, 0x9e, 0x7c, 0xb1, 0x52, 0xb8, 0x51, 0x92, 0xcd,
-    0x9a, 0x11, 0xe2, 0x2a, 0xbe, 0x3b, 0x77, 0xe5, 0x8b, 0xfb, 0x6f, 0x8b,
-    0xda, 0x95, 0x8b, 0xff, 0xf8, 0xed, 0xf6, 0x86, 0x73, 0x07, 0x84, 0xf2,
-    0x6a, 0xc5, 0xff, 0xfe, 0x7d, 0xbe, 0xf3, 0xef, 0x89, 0x8f, 0x1b, 0xf5,
-    0x80, 0x6f, 0x2c, 0x5f, 0xfd, 0xb4, 0xf8, 0xc0, 0xf7, 0x0f, 0xa8, 0x3e,
-    0x2c, 0x5f, 0xfc, 0xd1, 0xf8, 0x4c, 0x36, 0xce, 0xfc, 0xb1, 0x78, 0x3d,
-    0xb8, 0xb1, 0x7f, 0xda, 0x9e, 0x36, 0x8a, 0x60, 0xb1, 0x74, 0xc1, 0x62,
-    0x9d, 0x3c, 0xa8, 0x96, 0x74, 0xd9, 0xf5, 0x0f, 0x23, 0x74, 0x20, 0xea,
-    0x38, 0xbd, 0x06, 0xd9, 0x62, 0xf1, 0x9b, 0x1d, 0x62, 0xfc, 0xcc, 0x5b,
-    0x1d, 0x62, 0xff, 0x9b, 0xb8, 0x3f, 0xfe, 0xd1, 0xeb, 0x17, 0xfd, 0xf0,
-    0xc7, 0x19, 0x3b, 0xe7, 0x45, 0x8b, 0xf3, 0xe8, 0xa4, 0x25, 0x8a, 0x19,
-    0xf4, 0xb2, 0x0d, 0xf6, 0x0d, 0x80, 0xb1, 0x7e, 0x9d, 0x8a, 0x76, 0x58,
-    0xa3, 0x9e, 0x59, 0x11, 0x5b, 0xcb, 0x17, 0xf9, 0xb6, 0x2c, 0xf6, 0x01,
-    0x62, 0xff, 0xc6, 0xf3, 0x99, 0xf7, 0xe0, 0xb6, 0x58, 0xa1, 0xa2, 0x1f,
-    0x04, 0x84, 0x67, 0x7f, 0xfd, 0xf9, 0x37, 0xf9, 0xcc, 0xd1, 0x09, 0x80,
-    0xb1, 0x7f, 0xbe, 0xdb, 0x7b, 0xd8, 0x12, 0xc5, 0xff, 0xd2, 0x10, 0x7b,
-    0x41, 0xff, 0x90, 0xe2, 0xc5, 0x46, 0xcb, 0xb4, 0xb2, 0x49, 0x91, 0xfd,
-    0x76, 0xd4, 0xe3, 0xd1, 0x10, 0x68, 0xa3, 0xf0, 0xa6, 0x66, 0xc2, 0x85,
-    0x47, 0x8b, 0xc4, 0xa0, 0x19, 0xb5, 0xf4, 0x37, 0x6d, 0x2c, 0x5f, 0x4c,
-    0x53, 0xb2, 0xc5, 0xf0, 0xd8, 0x80, 0xb1, 0x7f, 0xe2, 0x61, 0xfe, 0x7a,
-    0x7d, 0x89, 0x62, 0xfe, 0x28, 0x16, 0x60, 0x16, 0x2f, 0x70, 0xcf, 0xac,
-    0x54, 0x9e, 0x5b, 0x16, 0x5f, 0xfe, 0x86, 0x17, 0x85, 0xf7, 0xea, 0xea,
-    0x98, 0xf5, 0x8b, 0xe2, 0x26, 0x8f, 0x58, 0xbf, 0xff, 0xfd, 0x87, 0xcd,
-    0x00, 0x02, 0xe7, 0xdf, 0xd0, 0xcf, 0xb0, 0x1c, 0x72, 0xb1, 0x68, 0xf5,
-    0x8b, 0xef, 0xbb, 0x01, 0x62, 0xa4, 0xdb, 0xf0, 0x56, 0xef, 0x89, 0x62,
-    0xff, 0xff, 0x66, 0xe6, 0x10, 0xba, 0x8c, 0xce, 0xe1, 0x82, 0x20, 0x71,
-    0x62, 0xe8, 0x71, 0x62, 0xb6, 0x44, 0x03, 0x34, 0x54, 0xa2, 0xec, 0x50,
-    0x98, 0xbd, 0x06, 0x95, 0x8b, 0xff, 0xdb, 0x67, 0x7e, 0xe3, 0x94, 0x81,
-    0x8e, 0xb1, 0x7f, 0xbb, 0x2c, 0x1f, 0xd8, 0x25, 0x8a, 0x94, 0x4e, 0x60,
-    0xe3, 0x25, 0xd4, 0xae, 0x02, 0x6c, 0x49, 0x02, 0x41, 0x91, 0x1b, 0x08,
-    0xae, 0xc8, 0x1d, 0x4f, 0xe4, 0x8d, 0x0a, 0xe2, 0x86, 0xdf, 0x21, 0x87,
-    0x7f, 0x09, 0xb5, 0x06, 0x1a, 0xc5, 0xe8, 0x4b, 0xac, 0x50, 0xcf, 0x2b,
-    0xc5, 0xd7, 0xf8, 0x7b, 0x60, 0x59, 0xf6, 0x58, 0xbc, 0x29, 0x02, 0xc5,
-    0xfc, 0x59, 0xdc, 0x23, 0xe2, 0x58, 0xad, 0x1e, 0x87, 0xc7, 0x6b, 0x11,
-    0x4e, 0xd0, 0x85, 0xbf, 0xff, 0xfc, 0xfd, 0xc2, 0x4f, 0xa9, 0x83, 0xf8,
-    0x0f, 0xad, 0x67, 0xb9, 0x9b, 0x2c, 0x5f, 0xd2, 0x50, 0xdd, 0x86, 0xb1,
-    0x5f, 0x45, 0x3f, 0x9e, 0x6f, 0xff, 0xf4, 0x3d, 0x21, 0x73, 0x99, 0xff,
-    0x39, 0xbe, 0xe6, 0x6c, 0xb1, 0x62, 0xc4, 0x44, 0x76, 0x47, 0x7b, 0xd0,
-    0x82, 0xc5, 0xec, 0x7e, 0x98, 0x78, 0xdd, 0x0a, 0x2f, 0xed, 0xa2, 0x84,
-    0x6d, 0xad, 0x96, 0x2f, 0x88, 0xb3, 0xcb, 0x17, 0x85, 0xad, 0x96, 0x2f,
-    0xcf, 0x1f, 0xad, 0x3a, 0xc5, 0xef, 0xb9, 0xd6, 0x2a, 0x37, 0x46, 0x04,
-    0x9c, 0x61, 0x0f, 0xc7, 0xc4, 0x57, 0x7f, 0xd9, 0x14, 0x1b, 0x5b, 0x7c,
-    0x4b, 0x17, 0xfd, 0x83, 0x1b, 0xf7, 0x9d, 0xf9, 0x62, 0xfa, 0x39, 0x88,
-    0x0b, 0x14, 0x34, 0x4e, 0x7c, 0xf0, 0x33, 0xbb, 0xba, 0xd8, 0xd9, 0x62,
-    0xb6, 0x3d, 0x31, 0x98, 0xde, 0x61, 0x69, 0x62, 0xfa, 0x3e, 0x78, 0x4b,
-    0x17, 0xfe, 0xfb, 0x1f, 0xdf, 0x9f, 0x08, 0xeb, 0x15, 0x87, 0xcb, 0x11,
-    0x2d, 0xff, 0xd9, 0x86, 0x9e, 0x5f, 0x5a, 0x70, 0x96, 0x2f, 0x33, 0x69,
-    0x62, 0xff, 0xbd, 0xf1, 0x34, 0x3a, 0xd0, 0x3a, 0xc5, 0xf0, 0x3a, 0x60,
-    0xd6, 0x2f, 0xf9, 0xe0, 0xff, 0x11, 0xce, 0xeb, 0x17, 0x67, 0x96, 0x2e,
-    0xe0, 0x4b, 0x15, 0x29, 0xfa, 0x8c, 0x8f, 0x21, 0x05, 0xa2, 0x2f, 0xa2,
-    0x90, 0xe7, 0x0f, 0xfc, 0x4b, 0x1c, 0x72, 0x18, 0xbd, 0xcd, 0xd4, 0xb1,
-    0x7b, 0xf8, 0x75, 0x8b, 0xff, 0xd3, 0x1e, 0x79, 0x19, 0x67, 0xbc, 0xc4,
-    0xb1, 0x44, 0x88, 0x2f, 0x0d, 0x75, 0x0e, 0xdc, 0xf1, 0x9d, 0x63, 0xe0,
-    0x2b, 0x46, 0x90, 0xba, 0x8d, 0x8e, 0xfa, 0xee, 0x18, 0x3d, 0x75, 0x3f,
-    0x8d, 0x45, 0xd3, 0x2c, 0xcf, 0x68, 0xd6, 0x20, 0x68, 0x38, 0xde, 0xf2,
-    0x91, 0x22, 0x6c, 0xa0, 0x6d, 0xe5, 0x7e, 0x77, 0x1f, 0x2b, 0xca, 0x91,
-    0x8a, 0x3f, 0x3d, 0x4a, 0xf4, 0x3c, 0x23, 0xff, 0x39, 0xf6, 0xd1, 0xe9,
-    0x02, 0x3b, 0x5e, 0xbc, 0x84, 0xa7, 0x15, 0x79, 0x3b, 0xdd, 0xe9, 0xcc,
-    0xc1, 0x43, 0xe3, 0xa4, 0x32, 0x42, 0x8e, 0x6e, 0x3a, 0x1e, 0xa1, 0xcb,
-    0x31, 0xea, 0x8c, 0x52, 0xa3, 0x1f, 0x0b, 0xe3, 0xf7, 0x80, 0xe7, 0x7a,
-    0x35, 0xc7, 0x46, 0xeb, 0x17, 0x75, 0x9d, 0xac, 0x5f, 0x7a, 0x3b, 0x3e,
-    0xb1, 0x62, 0x58, 0xae, 0xb4, 0xdb, 0xc0, 0x9a, 0xdd, 0x71, 0x62, 0xe8,
-    0xdf, 0xac, 0x58, 0xa8, 0xd8, 0xdd, 0x75, 0xc1, 0x8b, 0x69, 0x62, 0x96,
-    0x2b, 0xac, 0x2f, 0x86, 0x25, 0x77, 0x5d, 0xc7, 0x2c, 0x5f, 0x60, 0xd8,
-    0xeb, 0x15, 0x1b, 0x9e, 0x26, 0x88, 0xaf, 0x7a, 0x7e, 0xb1, 0x7d, 0x23,
-    0xc3, 0xac, 0x5b, 0x52, 0x6f, 0xf4, 0x3b, 0x68, 0xf5, 0x8b, 0x9f, 0xa9,
-    0x62, 0xf6, 0xa7, 0x75, 0x8b, 0xfb, 0xb8, 0x30, 0xfe, 0xeb, 0x16, 0xd2,
-    0xc5, 0x61, 0xef, 0xb8, 0xf3, 0x17, 0xdf, 0x6d, 0xa9, 0xd9, 0x62, 0xc4,
-    0xb1, 0x60, 0x2c, 0x53, 0x9a, 0x30, 0xc4, 0x6e, 0xcf, 0xac, 0x5e, 0xfe,
-    0x44, 0xb1, 0x7b, 0xee, 0x75, 0x8b, 0x44, 0xb1, 0x5b, 0x1f, 0x28, 0xc5,
-    0xd8, 0x78, 0x43, 0xb6, 0x89, 0x62, 0xf8, 0xb6, 0x17, 0x16, 0x29, 0xcd,
-    0xbb, 0x09, 0xdf, 0xb0, 0x7a, 0x6d, 0xd6, 0x2f, 0x9b, 0x69, 0xd2, 0xc5,
-    0xed, 0x36, 0xcb, 0x16, 0x1f, 0xcf, 0xa8, 0x8a, 0x7c, 0x47, 0x7b, 0x0b,
-    0xcb, 0x15, 0x27, 0xa1, 0xf3, 0x4b, 0xc3, 0x68, 0x2c, 0x5f, 0xdf, 0x8a,
-    0x13, 0xad, 0x96, 0x2e, 0x14, 0x16, 0x29, 0xcf, 0x99, 0x87, 0x7a, 0x18,
-    0xd8, 0x6b, 0x17, 0x39, 0xd6, 0x2f, 0x61, 0xe5, 0x62, 0x9d, 0x5f, 0xac,
-    0x44, 0xc7, 0x15, 0xfb, 0xcb, 0x16, 0x01, 0x20, 0xa1, 0x0d, 0xc7, 0x3f,
-    0x43, 0x67, 0xa4, 0x21, 0xe3, 0x8b, 0xc3, 0x12, 0xea, 0x17, 0xbd, 0xae,
-    0x09, 0x62, 0xdf, 0x58, 0xbf, 0x82, 0x9e, 0xf8, 0xdb, 0xac, 0x5c, 0x1f,
-    0x16, 0x2a, 0x23, 0xca, 0xe1, 0x8d, 0xc5, 0x12, 0xc5, 0x83, 0x58, 0xba,
-    0x4d, 0x58, 0xbd, 0xa9, 0x82, 0xc5, 0xf1, 0x60, 0x38, 0xb1, 0x6e, 0xf6,
-    0x3d, 0x7d, 0x0c, 0x30, 0xed, 0x4a, 0x6a, 0xbb, 0x0f, 0x0d, 0x73, 0x08,
-    0xfb, 0x18, 0x13, 0x55, 0xf6, 0xb6, 0xcd, 0x2c, 0x5f, 0x3e, 0x85, 0x1e,
-    0xb1, 0x52, 0x79, 0x58, 0x49, 0x7e, 0xee, 0x1e, 0x6e, 0xd6, 0x2e, 0xe6,
-    0xeb, 0x17, 0x34, 0xac, 0x5a, 0x56, 0x2b, 0xe8, 0x8b, 0x62, 0x02, 0x2b,
-    0xe0, 0xcf, 0x85, 0xad, 0x8b, 0x17, 0xcc, 0x77, 0x3a, 0xc5, 0xfe, 0xef,
-    0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0x61, 0x4c, 0x16, 0x2a, 0x07, 0xef, 0x84,
-    0x47, 0x34, 0xb4, 0x72, 0xc5, 0xfb, 0x99, 0xe7, 0xd2, 0xc5, 0xec, 0xef,
-    0xcb, 0x14, 0x03, 0xc6, 0xe1, 0x45, 0xef, 0xb8, 0x4b, 0x17, 0x30, 0xd6,
-    0x2f, 0xfe, 0x16, 0xee, 0x6f, 0xda, 0x1c, 0x73, 0xac, 0x56, 0x22, 0x7b,
-    0x72, 0x28, 0x87, 0x88, 0x5e, 0xe8, 0x71, 0x62, 0xe6, 0x1a, 0xc5, 0xef,
-    0x67, 0x16, 0x2e, 0x29, 0x58, 0xa8, 0x1e, 0x50, 0x85, 0xfa, 0x0e, 0xdf,
-    0xf3, 0x8b, 0x69, 0xec, 0x1a, 0x95, 0x8b, 0xd0, 0x9e, 0xd6, 0x2d, 0x1e,
-    0xb1, 0x51, 0x1b, 0x32, 0x1e, 0xbb, 0x3b, 0x58, 0xb1, 0x2c, 0x5b, 0x4e,
-    0x6a, 0x58, 0x62, 0xd1, 0xcb, 0x17, 0xf1, 0x67, 0x4d, 0x3f, 0x16, 0x2b,
-    0x63, 0xc4, 0x08, 0x56, 0xdd, 0xac, 0x54, 0xa2, 0x81, 0xda, 0x44, 0x49,
-    0x7d, 0xa8, 0x49, 0xd6, 0x2f, 0xdd, 0x9e, 0x73, 0xcb, 0x15, 0x87, 0x98,
-    0xc4, 0x77, 0xdf, 0x6c, 0xd2, 0xc5, 0xfb, 0x6c, 0x27, 0x35, 0x62, 0xa4,
-    0xf2, 0xdc, 0x8a, 0xfe, 0xd4, 0x00, 0xfd, 0xf1, 0x62, 0xff, 0x70, 0x32,
-    0x9f, 0xbe, 0xcb, 0x14, 0xc7, 0xcb, 0xe3, 0x0b, 0xa0, 0x4b, 0x17, 0xdc,
-    0xe4, 0x81, 0x62, 0x96, 0x2b, 0xae, 0xab, 0xb5, 0x13, 0x08, 0x81, 0x97,
-    0x64, 0x3e, 0x7b, 0x3d, 0x76, 0x2d, 0x18, 0x9d, 0xbb, 0xf0, 0xea, 0x67,
-    0xa2, 0x6b, 0x14, 0x21, 0x7a, 0x10, 0x84, 0x2e, 0x19, 0x1d, 0xe9, 0x8e,
-    0x8d, 0xd6, 0x2f, 0xfd, 0xd0, 0xb3, 0x83, 0x13, 0x6a, 0x0b, 0x17, 0xfc,
-    0x58, 0x69, 0x67, 0xbe, 0xeb, 0x17, 0xc3, 0xfe, 0x71, 0x62, 0xb0, 0xf6,
-    0xd8, 0xe2, 0xfe, 0x63, 0x70, 0x6d, 0x05, 0x8a, 0x74, 0x75, 0x7e, 0x13,
-    0x84, 0x41, 0x7e, 0x22, 0xce, 0x8c, 0xb1, 0x7e, 0x63, 0x9d, 0xa0, 0xb1,
-    0x7f, 0xe1, 0x33, 0x96, 0x7b, 0x81, 0x9d, 0x62, 0xbe, 0x7c, 0xfc, 0x28,
-    0xbe, 0xc1, 0xb4, 0x16, 0x2a, 0x07, 0x89, 0xf2, 0x2a, 0x74, 0x7a, 0xb4,
-    0x34, 0xed, 0x05, 0x8b, 0x83, 0xf2, 0xc5, 0xfd, 0xf7, 0xc8, 0x98, 0x0b,
-    0x15, 0x03, 0xc7, 0xf0, 0xcd, 0xda, 0x65, 0x8b, 0xe6, 0xda, 0x74, 0xb1,
-    0x5a, 0x37, 0x44, 0x2f, 0x7d, 0x00, 0x0a, 0x0b, 0x17, 0xda, 0x0e, 0x40,
-    0xb1, 0x7a, 0x7f, 0x2b, 0x15, 0x27, 0xc8, 0xe4, 0x9f, 0x24, 0xbd, 0x0e,
-    0x74, 0x58, 0xbf, 0x1e, 0x4a, 0x1c, 0x58, 0xbe, 0x9f, 0x46, 0xfd, 0x62,
-    0xc5, 0xe7, 0x2d, 0xd6, 0x2f, 0xcc, 0x70, 0x02, 0x56, 0x2f, 0xd1, 0x42,
-    0x7d, 0xc5, 0x8a, 0xd8, 0xf4, 0xbc, 0x51, 0x7d, 0x09, 0x28, 0x2c, 0x54,
-    0xa6, 0x53, 0xb1, 0x04, 0x0a, 0x06, 0x5a, 0xed, 0xf1, 0x11, 0xde, 0x23,
-    0x7e, 0xb1, 0x61, 0xac, 0x54, 0x9b, 0x07, 0x1e, 0xbf, 0xff, 0x41, 0xc8,
-    0x85, 0xde, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xe6, 0xed, 0x62, 0xfe, 0xfe,
-    0x44, 0x52, 0x35, 0x8b, 0xfe, 0x84, 0x9f, 0x99, 0xa9, 0xe2, 0xc5, 0x6e,
-    0x7c, 0xfd, 0x97, 0x5f, 0x44, 0x4c, 0x12, 0xc5, 0xff, 0x49, 0x67, 0x4c,
-    0x26, 0x35, 0x62, 0x8d, 0x3d, 0xdd, 0x12, 0x58, 0x6b, 0x15, 0x29, 0xc5,
-    0x8d, 0x59, 0xdf, 0xda, 0x10, 0x22, 0x23, 0xbd, 0xe7, 0x02, 0xc5, 0xf0,
-    0x24, 0xb7, 0x58, 0xb7, 0x5e, 0xb1, 0x46, 0x9e, 0xbf, 0x63, 0xa2, 0x23,
-    0xbe, 0x87, 0xb0, 0x35, 0x8b, 0xf7, 0x9f, 0xec, 0x75, 0x8b, 0xa4, 0x0b,
-    0x17, 0xf3, 0x6a, 0x1c, 0x71, 0xac, 0x54, 0x9f, 0x6e, 0xe5, 0x1c, 0x17,
-    0xbd, 0xa9, 0x3a, 0xc5, 0x3a, 0x61, 0xcc, 0x62, 0x28, 0x48, 0x84, 0x5f,
-    0x7e, 0xce, 0xfc, 0xc7, 0x58, 0xbb, 0x22, 0x58, 0xb6, 0xc4, 0x78, 0x21,
-    0x94, 0xde, 0x9d, 0x6c, 0xb1, 0x7c, 0x26, 0x84, 0xac, 0x5d, 0xb4, 0xac,
-    0x54, 0xa2, 0x05, 0xca, 0x48, 0x78, 0x44, 0x54, 0xb1, 0x7b, 0x79, 0x02,
-    0xc5, 0x8a, 0x06, 0xab, 0x03, 0x2f, 0xf9, 0x8d, 0xe3, 0xf4, 0x92, 0xf2,
-    0xc5, 0xfd, 0xf7, 0x3e, 0x7d, 0x96, 0x2a, 0x51, 0x1a, 0x44, 0xa2, 0x3b,
-    0xbe, 0x7f, 0xb1, 0xd6, 0x2f, 0x13, 0xf5, 0x2c, 0x57, 0x5e, 0x78, 0x3e,
-    0x22, 0xb8, 0x5c, 0x58, 0xbe, 0xce, 0xda, 0x0b, 0x17, 0xf9, 0xf8, 0xe2,
-    0xeb, 0xfe, 0xeb, 0x15, 0xc3, 0xdb, 0xf1, 0x1d, 0xf8, 0x50, 0xe7, 0xc6,
-    0xb1, 0x52, 0x8b, 0xf7, 0x73, 0x22, 0x2b, 0xf6, 0x45, 0x06, 0xe2, 0xc5,
-    0x6c, 0xcc, 0x70, 0x84, 0x61, 0xe3, 0x8c, 0xa3, 0x09, 0xbb, 0x59, 0x75,
-    0xc8, 0xa1, 0x09, 0xa8, 0xd5, 0x8f, 0x08, 0x8f, 0xc7, 0x54, 0x51, 0xd9,
-    0x72, 0x30, 0x4f, 0x43, 0xc4, 0x4d, 0xfd, 0x21, 0xcc, 0x19, 0x6d, 0x99,
-    0x62, 0xc4, 0xb1, 0x7f, 0x34, 0x3a, 0xba, 0x85, 0xb2, 0xc5, 0xec, 0x62,
-    0x58, 0xbf, 0x07, 0x23, 0xeb, 0xbe, 0xb5, 0x62, 0xb4, 0x7a, 0x3c, 0x1b,
-    0xbb, 0x38, 0xb1, 0x62, 0x58, 0xba, 0x11, 0xeb, 0x15, 0x04, 0xc3, 0x8e,
-    0x23, 0xf1, 0x16, 0x84, 0x39, 0x11, 0x70, 0x5f, 0xc2, 0x37, 0x02, 0x3d,
-    0x62, 0xef, 0x71, 0x62, 0xdc, 0x58, 0xbd, 0xa0, 0xe2, 0x58, 0xbf, 0xb8,
-    0xdd, 0xf9, 0xf6, 0x58, 0xa8, 0x8f, 0x8b, 0x42, 0x5e, 0x20, 0xa5, 0x8a,
-    0x73, 0x79, 0x1c, 0x61, 0x7f, 0x66, 0xc3, 0xfb, 0xe9, 0x62, 0xd2, 0xb1,
-    0x58, 0x99, 0xa3, 0x8d, 0xfe, 0x16, 0xc4, 0x47, 0x1c, 0x5f, 0x7f, 0x31,
-    0x7f, 0xb6, 0x8f, 0x58, 0xbb, 0x46, 0xac, 0x5f, 0xe2, 0x81, 0x60, 0x24,
-    0x0b, 0x14, 0xe7, 0x96, 0x21, 0x9b, 0xff, 0x4e, 0x70, 0xc9, 0x71, 0x87,
-    0x05, 0x8b, 0xe0, 0x83, 0x9d, 0x96, 0x2f, 0xc1, 0x73, 0x6c, 0x09, 0x62,
-    0xa4, 0xf4, 0x9c, 0x9a, 0xa5, 0x34, 0xff, 0xbe, 0x11, 0x0f, 0xa1, 0x25,
-    0x71, 0x4a, 0xc5, 0xe0, 0x02, 0x56, 0x2e, 0xcd, 0xd6, 0x2e, 0x91, 0xf0,
-    0xda, 0xf8, 0x76, 0xf4, 0x96, 0xeb, 0x17, 0xff, 0xf3, 0x04, 0x36, 0x6d,
-    0x6d, 0xf6, 0xf7, 0xdf, 0x50, 0x58, 0xbf, 0x6f, 0xbf, 0xe7, 0x4b, 0x15,
-    0xf4, 0x52, 0x90, 0xe8, 0x97, 0x6a, 0x09, 0xc6, 0x6e, 0x83, 0xc4, 0xbf,
-    0x43, 0x46, 0xf9, 0x89, 0xa2, 0x58, 0xbf, 0x66, 0x83, 0xf7, 0x16, 0x2f,
-    0xcf, 0xe2, 0xc8, 0x2c, 0x5c, 0xfd, 0x4b, 0x17, 0x3c, 0x7a, 0xc5, 0xcf,
-    0xa5, 0x8a, 0x81, 0xb1, 0xea, 0x1a, 0xbe, 0x90, 0xa6, 0x25, 0x8b, 0xff,
-    0x73, 0xa3, 0x7e, 0x4d, 0xcf, 0x71, 0x62, 0xd1, 0xeb, 0x16, 0x3a, 0xc5,
-    0x08, 0xd3, 0x86, 0x2b, 0x7d, 0x9a, 0x16, 0x2c, 0x58, 0x0b, 0x14, 0x46,
-    0xd0, 0x32, 0x2b, 0xed, 0xb6, 0x98, 0xf5, 0x8b, 0xcd, 0xd9, 0x2c, 0x5f,
-    0xde, 0x26, 0x06, 0x12, 0xc5, 0xf8, 0x98, 0x18, 0x4b, 0x14, 0x61, 0xe9,
-    0x78, 0xb2, 0xa5, 0x17, 0x43, 0x28, 0x13, 0x7d, 0xa3, 0xd6, 0x2d, 0x12,
-    0xc5, 0xa2, 0x93, 0x51, 0x82, 0xb7, 0xbc, 0x43, 0x58, 0xbe, 0x93, 0xbe,
-    0x96, 0x2b, 0x65, 0x6b, 0x90, 0x22, 0x34, 0xab, 0x72, 0x7e, 0xd2, 0xdc,
-    0x92, 0x22, 0x4f, 0xb4, 0x81, 0x58, 0xa1, 0xb7, 0xc5, 0x7f, 0x13, 0x04,
-    0x3b, 0x61, 0xac, 0x5e, 0xc2, 0xdd, 0x62, 0x98, 0xd7, 0xf0, 0x4a, 0xfd,
-    0xc8, 0xa1, 0x3d, 0xac, 0x5f, 0x7b, 0x71, 0x6c, 0xb1, 0x5f, 0x3d, 0x12,
-    0x2b, 0xbf, 0x6a, 0x0d, 0x9f, 0x58, 0xa9, 0x3c, 0x97, 0x21, 0xbf, 0x66,
-    0xfe, 0xcd, 0xd6, 0x2f, 0x49, 0x44, 0xb1, 0x68, 0x96, 0x2e, 0x9f, 0x2c,
-    0x56, 0x8f, 0x1d, 0x87, 0x48, 0x4e, 0xdc, 0x58, 0xbf, 0x82, 0x18, 0x9b,
-    0x50, 0x58, 0xa5, 0x8a, 0x93, 0x78, 0x19, 0x85, 0xee, 0x4c, 0x16, 0x2f,
-    0xdf, 0xcd, 0x3f, 0x16, 0x2e, 0x7d, 0x76, 0x78, 0xbe, 0x1d, 0xbf, 0x9f,
-    0x4f, 0xc9, 0xd9, 0x62, 0xdd, 0x16, 0x2a, 0x55, 0x4e, 0x42, 0x17, 0x58,
-    0x40, 0xee, 0x31, 0x16, 0xe9, 0x3b, 0xec, 0xdc, 0x2e, 0xea, 0x2e, 0xbf,
-    0xbf, 0x25, 0x07, 0xd9, 0x62, 0xe1, 0xca, 0xc5, 0xff, 0xbf, 0x90, 0xf4,
-    0xe1, 0x77, 0xe5, 0x8a, 0xc3, 0xd6, 0xf0, 0xbd, 0xfe, 0x7d, 0x89, 0xb6,
-    0x17, 0x16, 0x2c, 0x1a, 0xc5, 0x3a, 0x3b, 0x4a, 0x10, 0x9e, 0x21, 0xea,
-    0x35, 0xbe, 0x3f, 0xb3, 0x75, 0x8b, 0xf7, 0xbe, 0xe0, 0x75, 0x8b, 0xb3,
-    0xcb, 0x17, 0xb1, 0xc6, 0xb1, 0x78, 0x9c, 0xd5, 0x8b, 0xec, 0x1b, 0xf4,
-    0x58, 0xba, 0x4f, 0x87, 0x82, 0xc3, 0xb7, 0xe8, 0x79, 0xcf, 0xe5, 0x8b,
-    0xf9, 0xbb, 0xfc, 0x86, 0x4b, 0x15, 0xd9, 0xec, 0x04, 0x53, 0x7b, 0xb8,
-    0x71, 0x62, 0xb0, 0xf0, 0xd8, 0x92, 0xf0, 0x7d, 0x92, 0xc5, 0xfc, 0xd0,
-    0x62, 0xce, 0xa5, 0x8b, 0x9c, 0x6b, 0x17, 0xf7, 0x89, 0x81, 0x84, 0xb1,
-    0x60, 0x2c, 0x5f, 0x89, 0x81, 0x84, 0xb1, 0x61, 0x18, 0x7c, 0x9d, 0x96,
-    0x78, 0x4a, 0xfb, 0x9f, 0x68, 0x2c, 0x5b, 0xcb, 0x15, 0x2a, 0xc7, 0x86,
-    0x87, 0x84, 0x86, 0x94, 0x76, 0x2e, 0xeb, 0xba, 0x86, 0x37, 0xc8, 0x18,
-    0x7c, 0x05, 0xe4, 0xf6, 0x23, 0x70, 0xc8, 0xee, 0x28, 0x96, 0x2c, 0x6a,
-    0xc5, 0x82, 0x58, 0xac, 0x37, 0xda, 0x18, 0x0c, 0x4e, 0xdd, 0xac, 0x58,
-    0x4b, 0x17, 0x02, 0x52, 0x2e, 0x08, 0x24, 0x8a, 0x73, 0x62, 0x10, 0xbd,
-    0xf8, 0xb3, 0xdf, 0x74, 0x88, 0xc3, 0x43, 0x78, 0xb3, 0x8b, 0x17, 0x60,
-    0xd6, 0x28, 0xd3, 0x67, 0xd0, 0x72, 0xa0, 0x89, 0x11, 0xb6, 0xdd, 0xb8,
-    0x16, 0x2f, 0xf3, 0x1b, 0x24, 0x59, 0xe5, 0x8b, 0xf3, 0x8e, 0x70, 0x96,
-    0x2f, 0x8b, 0xcf, 0xb2, 0xc5, 0xc0, 0x65, 0x8b, 0xe7, 0xd3, 0xf9, 0x62,
-    0xa4, 0xf7, 0x1c, 0x8e, 0x21, 0x7a, 0x95, 0x4a, 0x83, 0x2e, 0xec, 0x4d,
-    0xa1, 0xea, 0x02, 0x32, 0x19, 0xe1, 0x90, 0xa1, 0x05, 0x7b, 0xf2, 0x12,
-    0xc5, 0xf7, 0x34, 0x42, 0x58, 0xbc, 0xdd, 0xf1, 0x62, 0x96, 0x2e, 0x9f,
-    0xac, 0x57, 0x0d, 0x1f, 0x83, 0x2f, 0x98, 0x62, 0xe2, 0xc5, 0xe1, 0xc8,
-    0xd6, 0x2a, 0x23, 0xc0, 0x22, 0x3b, 0xe0, 0xfe, 0xde, 0x58, 0xbf, 0x07,
-    0xe2, 0x90, 0x2c, 0x56, 0xc9, 0xa9, 0x40, 0x78, 0x64, 0x7d, 0xa0, 0xbb,
-    0x0f, 0x88, 0xba, 0x12, 0x5f, 0x7e, 0x44, 0x1a, 0xc5, 0xf1, 0x4e, 0x6c,
-    0xb1, 0x6d, 0x2c, 0x5e, 0x92, 0x89, 0x62, 0xdd, 0x16, 0x29, 0x62, 0xd2,
-    0xb1, 0x58, 0x6c, 0x40, 0x28, 0x41, 0x94, 0xb1, 0x4b, 0x15, 0x11, 0x70,
-    0x70, 0xcb, 0xbf, 0x12, 0xc5, 0xce, 0x05, 0x8a, 0x93, 0x60, 0x01, 0x9a,
-    0xd9, 0x35, 0xb1, 0x92, 0x61, 0x14, 0x42, 0x5a, 0x4e, 0x64, 0x40, 0x28,
-    0xdc, 0xfc, 0x58, 0xbe, 0x86, 0x9b, 0xa2, 0xc5, 0xba, 0xf5, 0x8b, 0xff,
-    0x8d, 0x72, 0xdf, 0x92, 0x76, 0xef, 0xcb, 0x17, 0x81, 0x9d, 0x4b, 0x17,
-    0xff, 0xc5, 0x80, 0xc3, 0x8a, 0x75, 0xa7, 0x16, 0xeb, 0x17, 0xc5, 0x27,
-    0x89, 0x62, 0xec, 0x1a, 0xc5, 0x4a, 0x65, 0xbb, 0x12, 0x9a, 0x2f, 0xa4,
-    0x72, 0x20, 0xf2, 0x80, 0x44, 0x77, 0xc7, 0xe0, 0x8e, 0xb1, 0x4b, 0x16,
-    0xc5, 0x8a, 0x34, 0xbd, 0x20, 0xcb, 0x47, 0x2c, 0x5d, 0xa3, 0x56, 0x2a,
-    0x51, 0x1e, 0xe8, 0x22, 0x20, 0x0c, 0x56, 0xfa, 0x63, 0xb3, 0xb5, 0x8b,
-    0xec, 0x00, 0x7d, 0xac, 0x5f, 0xfe, 0xc8, 0x72, 0x7d, 0x0c, 0x8f, 0x62,
-    0x02, 0xc5, 0xf1, 0xac, 0x40, 0x58, 0xaf, 0x9f, 0x78, 0x93, 0x2f, 0xf9,
-    0xfd, 0xfc, 0xef, 0xc2, 0x95, 0x8b, 0xe0, 0xe7, 0x40, 0x58, 0xa8, 0x1e,
-    0xf7, 0xce, 0xae, 0xce, 0x2c, 0x5f, 0xfe, 0xc8, 0x47, 0x61, 0xad, 0x9e,
-    0x9f, 0x71, 0x62, 0xa5, 0x10, 0xd0, 0x22, 0x00, 0xbd, 0x12, 0x79, 0x3c,
-    0x84, 0xa7, 0xa3, 0x06, 0xba, 0x78, 0xb1, 0x67, 0x58, 0xbc, 0x76, 0x82,
-    0xc7, 0xcb, 0x1b, 0x01, 0x62, 0xfa, 0x4f, 0x27, 0x58, 0xbf, 0x38, 0x47,
-    0x6f, 0x2c, 0x5f, 0xee, 0xda, 0x3f, 0x34, 0x1c, 0x4b, 0x17, 0xf7, 0xf3,
-    0xc5, 0x27, 0x58, 0xa7, 0x45, 0x96, 0x88, 0xbe, 0x53, 0xc3, 0xab, 0xed,
-    0xff, 0x3c, 0x58, 0xb6, 0x2c, 0x54, 0x15, 0xd9, 0xbc, 0x7d, 0xfa, 0x3b,
-    0x39, 0x43, 0x16, 0x72, 0x18, 0x81, 0x1e, 0x47, 0x12, 0x5c, 0xdb, 0x2c,
-    0x5b, 0xcb, 0x15, 0xc3, 0x54, 0x10, 0xc5, 0xff, 0xd8, 0xfe, 0xe1, 0x67,
-    0xbb, 0x84, 0xac, 0x5e, 0xdc, 0x44, 0xb1, 0x7c, 0x3c, 0x1c, 0x66, 0xe7,
-    0xc5, 0x12, 0x25, 0x8d, 0x58, 0xa9, 0x64, 0xe7, 0xe4, 0x78, 0x7b, 0xb2,
-    0xbc, 0x68, 0x9f, 0x87, 0xab, 0x4b, 0xef, 0x14, 0x2a, 0x83, 0x84, 0x27,
-    0x51, 0xf5, 0xdb, 0xec, 0xb1, 0x60, 0x2c, 0x5f, 0x48, 0x42, 0x89, 0x62,
-    0xf7, 0x26, 0x25, 0x8b, 0xec, 0xe8, 0xfa, 0x58, 0xb9, 0xce, 0xb1, 0x6c,
-    0x19, 0xbb, 0x39, 0x25, 0xf4, 0x51, 0x3f, 0xd6, 0x29, 0x62, 0xda, 0x58,
-    0xb1, 0xd6, 0x2b, 0x87, 0xab, 0xe2, 0x51, 0x06, 0x74, 0x12, 0xbe, 0x1b,
-    0x37, 0x6b, 0x17, 0xe0, 0x3e, 0x9c, 0xd5, 0x8b, 0xb9, 0xe5, 0x8b, 0xb0,
-    0x6b, 0x17, 0xba, 0x60, 0xd6, 0x28, 0xd3, 0x6d, 0xd4, 0x2f, 0x63, 0x56,
-    0x2a, 0x51, 0x0d, 0x89, 0xcc, 0x4b, 0x7f, 0x78, 0x98, 0x18, 0x4b, 0x16,
-    0x25, 0x8b, 0x9b, 0xa2, 0xc5, 0x18, 0x7a, 0xd8, 0x59, 0xa1, 0x1b, 0xb3,
-    0xb5, 0x8a, 0xc5, 0x5f, 0xe6, 0x8d, 0x6e, 0x25, 0x11, 0x29, 0xd6, 0x7e,
-    0xf6, 0xc7, 0xc0, 0x23, 0x28, 0x57, 0xfa, 0x10, 0x71, 0xc5, 0xf6, 0xfa,
-    0xc5, 0xf0, 0xff, 0x3b, 0x2c, 0x56, 0x1b, 0x6d, 0xc4, 0xaf, 0x66, 0x8d,
-    0x58, 0xbf, 0x8b, 0xd8, 0x4e, 0x12, 0xc5, 0xfd, 0xee, 0x61, 0xdf, 0xcb,
-    0x16, 0xd2, 0xc5, 0x49, 0xe0, 0x61, 0x75, 0x2c, 0x52, 0xc5, 0xa5, 0x62,
-    0xba, 0xf3, 0x52, 0x41, 0x9e, 0x0c, 0xbd, 0x9d, 0x19, 0x62, 0xf9, 0xf4,
-    0xc6, 0xac, 0x5f, 0x7f, 0xf8, 0x05, 0x8b, 0x4f, 0xcf, 0x91, 0x87, 0x83,
-    0x23, 0xb6, 0xcb, 0x15, 0x29, 0xe9, 0x61, 0x0b, 0x8f, 0x1d, 0xb5, 0x92,
-    0x41, 0x09, 0x6e, 0xbc, 0xd2, 0xfe, 0xf6, 0x77, 0x09, 0x82, 0xc5, 0xfb,
-    0xd9, 0xf6, 0x35, 0x62, 0xbb, 0x3d, 0x87, 0x2f, 0xbf, 0x76, 0x0e, 0xb0,
-    0x5c, 0x58, 0xbd, 0xf6, 0x3a, 0xc5, 0xd3, 0xc5, 0x8b, 0xf9, 0xbc, 0x00,
-    0xca, 0x0b, 0x17, 0xdc, 0xc7, 0x82, 0xc5, 0xcf, 0x8b, 0x17, 0xee, 0x66,
-    0x9c, 0xd5, 0x8a, 0x1a, 0x31, 0x3b, 0x1d, 0x8f, 0x17, 0xd1, 0x7f, 0xc8,
-    0xbc, 0x2d, 0x6e, 0xd6, 0x2e, 0x8f, 0x89, 0x62, 0xe9, 0x35, 0x62, 0xfe,
-    0xf0, 0xdc, 0x12, 0x4b, 0x17, 0xb6, 0xfb, 0xac, 0x5d, 0xf1, 0x76, 0x79,
-    0x6c, 0x5b, 0x6f, 0xac, 0x5e, 0x08, 0x20, 0x92, 0x2f, 0xf4, 0xec, 0x1e,
-    0x7d, 0xbb, 0x48, 0x8c, 0x34, 0x37, 0xe6, 0x2e, 0xe1, 0xc5, 0x8b, 0xe8,
-    0x66, 0xb6, 0x58, 0xb3, 0x8c, 0xf3, 0x7b, 0x29, 0xa1, 0xa2, 0xfb, 0xf0,
-    0x96, 0xbf, 0x4e, 0xc2, 0x9d, 0x2c, 0x5c, 0xdc, 0x58, 0xa8, 0x1e, 0x00,
-    0x0a, 0x6f, 0xdf, 0x9f, 0xb9, 0xab, 0x16, 0xd9, 0x62, 0xa0, 0x6f, 0x30,
-    0xa6, 0xfc, 0x70, 0xe7, 0x40, 0x58, 0xa5, 0x8a, 0x58, 0xb4, 0x9c, 0xb8,
-    0x00, 0x65, 0x49, 0xf3, 0xc1, 0x0a, 0xf3, 0xe6, 0xeb, 0x17, 0xf3, 0xf7,
-    0xcf, 0x66, 0xeb, 0x17, 0x0b, 0xb5, 0x8b, 0xfd, 0x0f, 0xe6, 0x14, 0x38,
-    0xb1, 0x73, 0x1a, 0xb1, 0x7b, 0x50, 0x89, 0x62, 0xa4, 0xfa, 0x98, 0xcc,
-    0x43, 0x14, 0x6a, 0x38, 0x3e, 0x61, 0xc8, 0x41, 0xdf, 0xcd, 0xed, 0x6b,
-    0x36, 0x58, 0xa9, 0x5c, 0x6e, 0xd8, 0x70, 0x6c, 0x78, 0x5d, 0xbc, 0x3c,
-    0x7b, 0x68, 0x75, 0xe8, 0xa1, 0x0f, 0xc2, 0x1f, 0x43, 0xf4, 0x23, 0x6b,
-    0xd2, 0x77, 0x58, 0xbd, 0x0c, 0xdd, 0x62, 0x96, 0x2e, 0x73, 0xac, 0x5a,
-    0x76, 0x34, 0x63, 0x0c, 0xb4, 0xac, 0x5e, 0x26, 0x3a, 0xc5, 0xfd, 0xfc,
-    0xe7, 0x9f, 0x65, 0x8b, 0xfd, 0x10, 0x8b, 0xdc, 0xfb, 0xac, 0x50, 0xd1,
-    0x01, 0xc1, 0xcf, 0x17, 0xdd, 0xc6, 0x58, 0xa8, 0xd1, 0x7f, 0x62, 0x61,
-    0xe9, 0x05, 0xbc, 0x9c, 0x81, 0xde, 0x15, 0x9d, 0x8e, 0x3a, 0x0c, 0x44,
-    0xed, 0x09, 0x1f, 0x18, 0x5f, 0x42, 0x41, 0xc5, 0x8b, 0xfa, 0x13, 0xd1,
-    0xc8, 0x0b, 0x16, 0xd6, 0x1e, 0x90, 0x64, 0x77, 0xb5, 0xd4, 0x35, 0x8b,
-    0x7d, 0x62, 0xa4, 0xf6, 0xdc, 0xa3, 0xa8, 0x86, 0xff, 0xa7, 0xbf, 0xe4,
-    0x4c, 0x5b, 0x2c, 0x5f, 0xcc, 0x17, 0x70, 0xcf, 0x2c, 0x57, 0xcf, 0xac,
-    0x8e, 0xef, 0xfe, 0x7e, 0x85, 0x9c, 0xee, 0x19, 0xe2, 0x58, 0xbd, 0x3d,
-    0x31, 0x62, 0xff, 0xdf, 0x9e, 0xe0, 0x59, 0xef, 0xba, 0xc5, 0xf4, 0x1f,
-    0xdc, 0x58, 0xbf, 0xf8, 0xd6, 0xd6, 0x84, 0x6e, 0x6f, 0x20, 0x58, 0xbf,
-    0xcc, 0x71, 0xf6, 0x16, 0x7d, 0x62, 0xa2, 0x45, 0x0e, 0x88, 0xfa, 0x24,
-    0x5f, 0xcd, 0x0f, 0x7a, 0x4e, 0xb1, 0x7e, 0xfc, 0xf6, 0xd1, 0xeb, 0x17,
-    0xff, 0xd3, 0xee, 0x0f, 0x3c, 0xff, 0x16, 0x77, 0xe5, 0x8a, 0x82, 0xa2,
-    0x21, 0xa3, 0x6e, 0x3c, 0xf0, 0xe0, 0xd1, 0x9f, 0xcb, 0xbc, 0x59, 0x7f,
-    0x8f, 0x25, 0xe7, 0xfb, 0xac, 0x5e, 0x2c, 0xfa, 0xc5, 0xb4, 0xb1, 0x7f,
-    0xce, 0x30, 0xfd, 0xde, 0xee, 0x75, 0x8b, 0xfb, 0x37, 0x0f, 0xa7, 0xf1,
-    0x62, 0xa0, 0x7d, 0xf8, 0x7b, 0x7f, 0xd2, 0x5e, 0x2c, 0xf4, 0x84, 0xb1,
-    0x60, 0x96, 0x2f, 0xe0, 0xb8, 0xe5, 0xdc, 0x16, 0x2f, 0xb6, 0xf6, 0x7d,
-    0x62, 0xa4, 0xf9, 0xf0, 0x4c, 0x46, 0x14, 0xb1, 0x4e, 0x8d, 0x8d, 0x42,
-    0x7d, 0x8b, 0x6f, 0xb9, 0xe6, 0x75, 0x8b, 0xf4, 0x40, 0x3e, 0x44, 0xb1,
-    0x7f, 0xe9, 0x21, 0xe6, 0xd8, 0x59, 0xda, 0xc5, 0xdf, 0x95, 0x8a, 0xdc,
-    0xf5, 0x7c, 0x7d, 0x58, 0x8a, 0x36, 0x84, 0x05, 0xc2, 0x82, 0xc5, 0xf7,
-    0xb9, 0x20, 0x58, 0xbb, 0x42, 0x58, 0xac, 0x37, 0x7e, 0x23, 0xb7, 0x16,
-    0x2b, 0x64, 0x42, 0x92, 0x98, 0x88, 0x2f, 0xf3, 0x74, 0xc1, 0xed, 0x81,
-    0x2c, 0x5f, 0xfe, 0x9c, 0xec, 0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xc4,
-    0x2d, 0x96, 0x2f, 0xf7, 0x24, 0xfd, 0xc3, 0x3c, 0xb1, 0x7a, 0x73, 0x65,
-    0x8b, 0x60, 0xd1, 0x77, 0xba, 0x5f, 0x87, 0xba, 0x1a, 0xde, 0xf8, 0x7a,
-    0x58, 0xba, 0x76, 0x58, 0xac, 0x36, 0xe4, 0x3f, 0x77, 0x61, 0x2c, 0x5d,
-    0x21, 0x2c, 0x5c, 0x70, 0x2c, 0x5c, 0xc4, 0xb1, 0x52, 0x7c, 0x0e, 0x35,
-    0xf1, 0x86, 0x18, 0xb9, 0xcd, 0x58, 0xbe, 0x14, 0x18, 0x6b, 0x17, 0xcf,
-    0xe0, 0x32, 0xc5, 0xfa, 0x7b, 0x86, 0x1d, 0x62, 0xa0, 0x88, 0x6d, 0x0c,
-    0x1c, 0x8f, 0xe4, 0x57, 0xbe, 0x22, 0x58, 0xbd, 0x3a, 0xe2, 0xc5, 0xc4,
-    0x6a, 0xc5, 0xd9, 0x05, 0x8b, 0x72, 0x4d, 0x7f, 0xc6, 0x2b, 0x66, 0x52,
-    0xe0, 0xe1, 0x37, 0x92, 0x90, 0xcd, 0x6b, 0x73, 0x28, 0xf1, 0xc8, 0xa1,
-    0x03, 0xa8, 0x7c, 0x9c, 0xcf, 0xf0, 0xc5, 0x68, 0x55, 0x80, 0xc0, 0xa1,
-    0xe5, 0xc7, 0xcf, 0x3f, 0x8a, 0x17, 0xfd, 0x0f, 0x42, 0x1d, 0x0d, 0x32,
-    0xed, 0x1a, 0xb1, 0x7d, 0x27, 0x6f, 0xac, 0x5e, 0xf7, 0x99, 0x62, 0xfb,
-    0x42, 0x9e, 0x8b, 0x17, 0x98, 0x80, 0x33, 0xe4, 0x62, 0x2f, 0x0e, 0xdf,
-    0xdc, 0x2c, 0xd8, 0x38, 0x2c, 0x5b, 0x23, 0xcf, 0xb8, 0x07, 0xd7, 0xf1,
-    0xe2, 0x84, 0x97, 0x96, 0x2c, 0x05, 0x8b, 0xf0, 0xb6, 0xf3, 0xec, 0xb1,
-    0x52, 0x6f, 0x60, 0x25, 0x78, 0xb3, 0xa9, 0x62, 0xe7, 0xd9, 0x62, 0x98,
-    0xdb, 0xf8, 0x7e, 0xf4, 0x18, 0x6b, 0x15, 0x89, 0x80, 0x44, 0xd9, 0xf5,
-    0x7e, 0x10, 0x5f, 0xed, 0xdf, 0x85, 0x9d, 0x19, 0x62, 0xf4, 0x0a, 0x56,
-    0x2f, 0xbe, 0xed, 0x05, 0x8a, 0xd8, 0xdf, 0x00, 0x72, 0xfa, 0x76, 0x68,
-    0x2c, 0x5c, 0x03, 0xac, 0x5e, 0xe7, 0xdd, 0x62, 0xb4, 0x6d, 0x7c, 0x31,
-    0x7f, 0x13, 0x7b, 0x6c, 0x09, 0x62, 0x96, 0x28, 0x8d, 0xdf, 0x8b, 0xef,
-    0x71, 0xf6, 0x58, 0xbf, 0x6b, 0x23, 0x9c, 0x0b, 0x16, 0x68, 0x1e, 0x48,
-    0x07, 0xaa, 0x51, 0xd9, 0x8b, 0x8e, 0xd3, 0x7d, 0xb1, 0x67, 0x6b, 0x17,
-    0xf0, 0x39, 0x83, 0x68, 0x2c, 0x52, 0xc5, 0x61, 0xef, 0x31, 0x27, 0x51,
-    0x75, 0xff, 0x40, 0x6c, 0x0f, 0x4f, 0x7e, 0x58, 0xbf, 0xb3, 0xdf, 0x72,
-    0x02, 0xc5, 0xe7, 0x2e, 0x2c, 0x5e, 0xf3, 0xec, 0xb1, 0x44, 0x7c, 0xfe,
-    0x2d, 0xe8, 0x39, 0x7c, 0x66, 0x77, 0xe5, 0x8b, 0xfb, 0x93, 0xdc, 0x33,
-    0xcb, 0x15, 0xb9, 0xea, 0x70, 0x96, 0xfb, 0x3c, 0xfc, 0x58, 0xa5, 0x8a,
-    0xec, 0xd7, 0x31, 0x15, 0x4a, 0x73, 0x19, 0x0a, 0x27, 0x84, 0x23, 0x28,
-    0xdb, 0xcb, 0x17, 0x87, 0xf9, 0x58, 0xbf, 0x45, 0x06, 0x28, 0x2c, 0x06,
-    0x5e, 0xd4, 0x9f, 0x46, 0x17, 0xd8, 0x0b, 0x17, 0x05, 0x8b, 0x15, 0xf3,
-    0x54, 0xc2, 0x57, 0xd9, 0xf0, 0x09, 0x62, 0xa5, 0x7e, 0xe2, 0x10, 0xeb,
-    0xc8, 0xca, 0xbb, 0x3e, 0x77, 0x3d, 0x11, 0x7e, 0x34, 0x42, 0x84, 0x5f,
-    0x23, 0xc8, 0xf4, 0x2b, 0x04, 0x95, 0x1c, 0x41, 0x60, 0xd6, 0x29, 0x62,
-    0xf9, 0x8a, 0x40, 0xb1, 0x70, 0x83, 0x58, 0xac, 0x3d, 0x98, 0x84, 0xf4,
-    0x18, 0x19, 0x0d, 0xcf, 0x1e, 0xb1, 0x6e, 0x2c, 0x51, 0x1a, 0xcf, 0x0d,
-    0x5f, 0xdf, 0x9f, 0x73, 0xee, 0xb1, 0x73, 0x1a, 0xb1, 0x61, 0xf8, 0xf1,
-    0xa3, 0x8b, 0xaf, 0x77, 0xc1, 0xac, 0x5a, 0x56, 0x2a, 0x51, 0x83, 0x8c,
-    0xce, 0x56, 0xc3, 0xf6, 0x8e, 0x58, 0xba, 0x46, 0xb1, 0x5d, 0x69, 0xac,
-    0xf8, 0xad, 0xcc, 0x75, 0x8b, 0xc4, 0xd0, 0x58, 0xb1, 0xab, 0x16, 0xe2,
-    0xc5, 0x8e, 0xb1, 0x6d, 0x2c, 0x53, 0x1a, 0x41, 0x09, 0x53, 0x9f, 0x4e,
-    0x84, 0xfe, 0x6d, 0x78, 0x3e, 0xfc, 0xb1, 0x7d, 0xa7, 0x16, 0xcb, 0x17,
-    0xd3, 0xac, 0x25, 0x8a, 0x19, 0xe2, 0x86, 0x49, 0x63, 0x56, 0x2c, 0x25,
-    0x8a, 0xd8, 0xf2, 0x34, 0x47, 0xe1, 0x3b, 0xfc, 0xc1, 0x7b, 0xbd, 0xdf,
-    0x4b, 0x16, 0x0d, 0x62, 0xc0, 0x58, 0xa5, 0x81, 0xaa, 0x03, 0xc1, 0x77,
-    0x84, 0x2f, 0xcb, 0x9a, 0x15, 0xa4, 0x60, 0x23, 0x78, 0xe1, 0x3b, 0xf8,
-    0xa0, 0xc7, 0xc1, 0xac, 0x5d, 0x80, 0x58, 0xa9, 0x3c, 0x42, 0x2d, 0xa5,
-    0x8b, 0xe2, 0x9c, 0x89, 0x62, 0xb6, 0x35, 0xdf, 0x0c, 0xbe, 0xf1, 0xcf,
-    0xa5, 0x8b, 0xff, 0x81, 0x25, 0xbb, 0x78, 0x01, 0x94, 0x16, 0x2e, 0x7f,
-    0xac, 0x5c, 0xdd, 0x4b, 0x15, 0x03, 0x63, 0xf1, 0x7b, 0xfe, 0xc2, 0x0f,
-    0x5a, 0x9c, 0x25, 0x8b, 0xb0, 0x96, 0x2a, 0x4f, 0x39, 0xce, 0x2f, 0x16,
-    0x41, 0x62, 0xb4, 0x6f, 0x3c, 0x41, 0x74, 0x92, 0xc5, 0xfb, 0x6d, 0x09,
-    0xb8, 0xb1, 0x7c, 0x2e, 0xbf, 0x8c, 0xb1, 0x7f, 0xf7, 0xa1, 0x26, 0x87,
-    0xef, 0x89, 0xb6, 0x58, 0xbd, 0xfc, 0xe2, 0xc5, 0xe6, 0x60, 0x96, 0x2f,
-    0xb4, 0xe0, 0xe2, 0xc5, 0xb6, 0x19, 0xe0, 0x70, 0x76, 0xb1, 0x1e, 0xec,
-    0x51, 0xe4, 0x91, 0x2e, 0xdf, 0xfd, 0xcf, 0xe0, 0xcb, 0x3a, 0x16, 0x71,
-    0x62, 0xfa, 0x61, 0x03, 0xac, 0x5e, 0x68, 0xb8, 0xb1, 0x4e, 0x88, 0x62,
-    0x45, 0xf1, 0x1d, 0xcd, 0x05, 0x8a, 0x82, 0xe0, 0xa6, 0x27, 0x1a, 0x45,
-    0xd9, 0x24, 0x4e, 0xfa, 0x85, 0x5f, 0xc8, 0x58, 0x58, 0xa3, 0x21, 0xf4,
-    0x30, 0x7a, 0x8b, 0xaf, 0x7c, 0xbb, 0x58, 0xb9, 0x89, 0x62, 0x96, 0x2a,
-    0x06, 0x88, 0x21, 0x6b, 0xb0, 0x25, 0x8b, 0x6e, 0xb1, 0x43, 0x44, 0x6c,
-    0x48, 0x1f, 0x22, 0x0c, 0x62, 0xa3, 0x77, 0xec, 0xef, 0xeb, 0x0b, 0x23,
-    0x65, 0x5e, 0xb8, 0xc1, 0x1a, 0x92, 0xa3, 0x5b, 0x4c, 0xce, 0x2d, 0xed,
-    0x28, 0x7e, 0x11, 0x96, 0x8e, 0x77, 0xc3, 0x29, 0xab, 0x66, 0xca, 0x26,
-    0xde, 0x39, 0xce, 0xe5, 0x95, 0xbc, 0xba, 0x08, 0xa5, 0xc4, 0x6a, 0x72,
-    0x44, 0xf2, 0xd2, 0x7f, 0x4b, 0x9c, 0x69, 0x74, 0x80, 0x95, 0x5f, 0xd7,
-    0xc3, 0x0c, 0xa7, 0xfe, 0xb9, 0x4b, 0xb2, 0xf5, 0x23, 0xb0, 0x51, 0x91,
-    0x74, 0x8c, 0xa8, 0x26, 0x58, 0xe9, 0x45, 0x21, 0xce, 0x6e, 0x75, 0x46,
-    0x77, 0x7f, 0xbf, 0x25, 0xe2, 0xcd, 0x96, 0x2f, 0xa0, 0xfa, 0x82, 0xc5,
-    0xfc, 0xf9, 0xd5, 0xc1, 0x4a, 0xc5, 0xf6, 0x14, 0xc1, 0x62, 0xd1, 0x83,
-    0x45, 0x3f, 0xcc, 0xfc, 0x46, 0x19, 0x85, 0xe0, 0x07, 0x05, 0x8b, 0xff,
-    0xee, 0x3f, 0xd9, 0xfd, 0x9a, 0x01, 0xda, 0x0b, 0x17, 0xf7, 0xbb, 0xdc,
-    0x53, 0xf5, 0x8b, 0x46, 0x76, 0x89, 0xff, 0x0f, 0x86, 0x9f, 0x7d, 0xd2,
-    0x45, 0xba, 0xc5, 0xff, 0x48, 0xba, 0xfe, 0x6c, 0x76, 0xd9, 0x62, 0xff,
-    0x33, 0xf4, 0x16, 0xb5, 0x2b, 0x17, 0xfd, 0x25, 0x0c, 0x3e, 0x77, 0xe5,
-    0x8b, 0xf8, 0x32, 0x84, 0xf1, 0x96, 0x28, 0xd3, 0xe7, 0x01, 0xcd, 0xfd,
-    0xa6, 0x9d, 0x3f, 0x6b, 0x17, 0x72, 0x32, 0x53, 0x54, 0x19, 0x37, 0xd0,
-    0x7d, 0x09, 0xc1, 0x11, 0xd8, 0x52, 0x9f, 0x6f, 0xa3, 0x8f, 0xa8, 0xc5,
-    0xe2, 0xad, 0xa5, 0x94, 0x0e, 0x56, 0x9d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9,
-    0x2d, 0xcb, 0xff, 0x34, 0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x1c, 0x0b,
-    0x46, 0x62, 0x21, 0xce, 0x6f, 0x4b, 0x17, 0x30, 0xd6, 0x2d, 0x1b, 0x0c,
-    0xd1, 0xf8, 0x32, 0xdf, 0x58, 0xb7, 0x16, 0x28, 0x46, 0x92, 0x38, 0x4a,
-    0xfd, 0x81, 0x71, 0xc2, 0x58, 0xbb, 0x9c, 0x58, 0xbf, 0x74, 0x1e, 0x16,
-    0xcb, 0x15, 0x03, 0xc3, 0x71, 0x8b, 0xba, 0xce, 0x2c, 0x5f, 0xf3, 0x9a,
-    0x6b, 0x7d, 0xc6, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x34, 0x4b, 0xef,
-    0x93, 0x47, 0xac, 0x5f, 0xfc, 0x3f, 0xb1, 0xb1, 0x44, 0xfc, 0x11, 0xd6,
-    0x2a, 0x4f, 0xbb, 0x09, 0x6f, 0xd9, 0xfd, 0xdf, 0x8b, 0x17, 0xf6, 0xdf,
-    0xcd, 0x0b, 0x75, 0x8b, 0xff, 0xfe, 0x20, 0x16, 0x7b, 0xf8, 0x60, 0x09,
-    0xbd, 0xf6, 0x8b, 0x8b, 0x17, 0xfd, 0x9d, 0xe1, 0x67, 0xf0, 0x96, 0x2a,
-    0x51, 0x9e, 0xe6, 0x3a, 0x67, 0xbf, 0x9b, 0xb9, 0xf4, 0x8d, 0x62, 0xba,
-    0xe2, 0xa6, 0xa8, 0x0e, 0xe8, 0xeb, 0xf0, 0x9f, 0x22, 0x0e, 0x43, 0xe3,
-    0xa1, 0x75, 0xff, 0xff, 0xc3, 0xe7, 0xd8, 0xb3, 0x72, 0x16, 0xc7, 0x9e,
-    0xfd, 0x83, 0x2c, 0x58, 0xbc, 0xe5, 0xba, 0xc5, 0xe6, 0x20, 0x2c, 0x54,
-    0xa2, 0xb3, 0x1c, 0xf7, 0x1d, 0xbd, 0x25, 0xba, 0xc5, 0xbb, 0x58, 0xa0,
-    0x1b, 0x0e, 0x83, 0xb7, 0xec, 0xdf, 0xd9, 0xba, 0xc5, 0xee, 0x93, 0x12,
-    0xc5, 0xfe, 0xc8, 0xfe, 0x6b, 0x4d, 0xe5, 0x8b, 0xfa, 0x76, 0x6f, 0xb1,
-    0xd6, 0x2f, 0xd2, 0x01, 0x30, 0x6b, 0x15, 0x88, 0xd8, 0x72, 0xa8, 0x88,
-    0x3e, 0x6e, 0x45, 0xd7, 0xfe, 0xf3, 0x82, 0x62, 0xfb, 0x8d, 0x96, 0x2f,
-    0xe9, 0xf6, 0x16, 0xf8, 0xb1, 0x6e, 0x2c, 0x54, 0x9f, 0xf3, 0x9f, 0xfc,
-    0xb6, 0xfc, 0xc4, 0x21, 0xe2, 0xc5, 0xfb, 0x3d, 0xbb, 0xf1, 0x62, 0xa4,
-    0xf4, 0x08, 0x9e, 0xf0, 0xbd, 0xc5, 0x8b, 0xf0, 0xfe, 0xc5, 0xe5, 0x8b,
-    0xe8, 0xb0, 0xd1, 0xac, 0x50, 0xcf, 0xaf, 0x07, 0xbc, 0x51, 0x7f, 0xe9,
-    0x9e, 0xfd, 0x9f, 0xfe, 0x44, 0xb1, 0x5a, 0x3e, 0xee, 0x17, 0x5f, 0xf4,
-    0xed, 0xfc, 0xe7, 0xf2, 0x3d, 0x62, 0xfd, 0xbe, 0x39, 0x6e, 0xb1, 0x7f,
-    0xb3, 0x72, 0x90, 0x72, 0x56, 0x2e, 0x9d, 0xcc, 0x3d, 0xce, 0x14, 0xdf,
-    0xf7, 0x4e, 0x67, 0xf0, 0x83, 0x1a, 0xc5, 0x49, 0xf5, 0xe1, 0x7d, 0x7d,
-    0x32, 0x42, 0x8c, 0x12, 0xff, 0x66, 0x81, 0x91, 0x07, 0xc5, 0x8b, 0x1a,
-    0xb1, 0x7f, 0xd9, 0x3b, 0x64, 0x5a, 0x7e, 0x2c, 0x5f, 0xfa, 0x76, 0x97,
-    0x1f, 0xe6, 0x2e, 0x2c, 0x53, 0xa2, 0x36, 0x21, 0x3f, 0x9d, 0x5f, 0xff,
-    0xb6, 0x9f, 0x48, 0xf5, 0x3f, 0x6e, 0x16, 0x01, 0x62, 0xff, 0xd3, 0xdb,
-    0x47, 0xfc, 0x9a, 0x3f, 0x65, 0x8b, 0xff, 0x4e, 0x81, 0x8f, 0x9a, 0xf0,
-    0x96, 0x2a, 0x51, 0xb3, 0xf5, 0x5e, 0x23, 0x5f, 0xfd, 0xf9, 0xdd, 0xf7,
-    0xc0, 0x1e, 0x74, 0xb1, 0x43, 0x54, 0xd4, 0xe5, 0x31, 0x43, 0x0f, 0x91,
-    0x84, 0xf8, 0xbe, 0xe2, 0x1a, 0xc5, 0xfd, 0x3d, 0x09, 0xbd, 0xc5, 0x8b,
-    0xff, 0xef, 0x48, 0xfe, 0x26, 0x37, 0x7c, 0x72, 0xdd, 0x62, 0xff, 0xdc,
-    0xfe, 0x02, 0x2e, 0x13, 0x7d, 0x62, 0xf8, 0xee, 0x50, 0x58, 0xa7, 0x45,
-    0xa4, 0x7a, 0x97, 0x10, 0x2a, 0x57, 0x4c, 0xf2, 0x5d, 0x86, 0xea, 0xff,
-    0x17, 0x68, 0x71, 0xdb, 0xa2, 0xc5, 0xd3, 0xf5, 0x8b, 0xb8, 0x75, 0x8a,
-    0x73, 0xc3, 0x88, 0x53, 0xe2, 0xf4, 0xb1, 0x63, 0x56, 0x2f, 0x6a, 0x4d,
-    0x58, 0xbf, 0x3f, 0x8a, 0x4e, 0xb1, 0x51, 0xb9, 0xf2, 0x48, 0x64, 0x42,
-    0x7f, 0x1e, 0xbf, 0xc3, 0x92, 0x2c, 0xcd, 0x96, 0x2f, 0xdd, 0x37, 0xf8,
-    0x7a, 0x58, 0xbf, 0x8f, 0xad, 0x38, 0x38, 0xb1, 0x7f, 0xd2, 0x5e, 0xc8,
-    0x49, 0x79, 0x62, 0xa4, 0xf9, 0xa0, 0x5f, 0x7b, 0x7c, 0x09, 0x62, 0xa5,
-    0x1a, 0x91, 0x42, 0x53, 0xe4, 0x35, 0x29, 0x9d, 0xe4, 0x60, 0xd7, 0xff,
-    0xcf, 0xee, 0x3e, 0xed, 0xad, 0xf1, 0xcb, 0x75, 0x8b, 0x04, 0xb1, 0x7f,
-    0xb5, 0x3e, 0xee, 0x19, 0xe5, 0x8b, 0xff, 0xfb, 0x22, 0x62, 0xd8, 0x0f,
-    0xdf, 0x37, 0xc7, 0x2d, 0xd6, 0x2e, 0xc1, 0xac, 0x5e, 0xd9, 0x8e, 0xb1,
-    0x70, 0x35, 0x26, 0xd5, 0xc5, 0xef, 0xda, 0x3c, 0xe7, 0x16, 0x2a, 0x4f,
-    0x4f, 0x0a, 0xef, 0xfe, 0xef, 0x9e, 0x2c, 0xe9, 0xef, 0x38, 0xd6, 0x2f,
-    0xb9, 0xb0, 0xb8, 0xb1, 0x50, 0x54, 0x18, 0xea, 0x31, 0x09, 0x91, 0xaf,
-    0x21, 0xcc, 0x22, 0x00, 0xd2, 0x2d, 0x05, 0x8b, 0xc4, 0x19, 0xab, 0x14,
-    0xe6, 0xc6, 0x21, 0x2b, 0xfb, 0x3a, 0x78, 0x53, 0xba, 0xc5, 0xff, 0x85,
-    0x3a, 0x2c, 0xe8, 0x59, 0xc5, 0x8b, 0xfb, 0xe2, 0x34, 0xf3, 0xc5, 0x8a,
-    0xdc, 0xfb, 0xfe, 0x7f, 0x7d, 0x0f, 0x87, 0xc5, 0x8b, 0xe9, 0xe9, 0x3a,
-    0x58, 0xa3, 0x0f, 0x27, 0x62, 0x5b, 0x8d, 0x1a, 0xc5, 0xff, 0xf7, 0x0b,
-    0x3a, 0x37, 0x8b, 0x39, 0xf6, 0x89, 0x62, 0xb0, 0xfa, 0x9c, 0x66, 0xef,
-    0x9d, 0x62, 0xff, 0xd9, 0x0f, 0xb4, 0x3f, 0x80, 0x65, 0x8b, 0xf4, 0xfb,
-    0x81, 0xfd, 0x62, 0xa5, 0x52, 0xd8, 0xc8, 0x72, 0x14, 0x0e, 0xd9, 0x14,
-    0x23, 0x8e, 0x40, 0x01, 0x82, 0x3e, 0xbf, 0xff, 0xbd, 0xf3, 0x32, 0x12,
-    0x0e, 0x16, 0x45, 0x09, 0xed, 0x62, 0xf3, 0xf7, 0x05, 0x8a, 0xf9, 0xfe,
-    0x12, 0xf5, 0x8e, 0xb1, 0x78, 0x0d, 0xf5, 0x8b, 0xfd, 0xb6, 0x38, 0xd9,
-    0x8d, 0x58, 0xa1, 0x9f, 0x1e, 0x09, 0x30, 0xed, 0xfd, 0xa9, 0x1c, 0x94,
-    0x4b, 0x16, 0xe2, 0xc5, 0x6c, 0x78, 0x1f, 0x2e, 0xae, 0xb5, 0xb7, 0x36,
-    0x8d, 0x14, 0x36, 0x24, 0x1b, 0x6e, 0x4a, 0x8b, 0xde, 0x32, 0x3e, 0xd7,
-    0xe2, 0x87, 0xde, 0xa1, 0x8c, 0x77, 0xdf, 0xcf, 0x16, 0x34, 0x26, 0x81,
-    0x09, 0x32, 0x8d, 0xf3, 0x92, 0x8d, 0x3d, 0x2b, 0xdc, 0x50, 0xf6, 0x8e,
-    0x84, 0x20, 0x6d, 0xb7, 0xfd, 0x91, 0x41, 0xb5, 0xb7, 0xc4, 0xb1, 0x7b,
-    0x69, 0xdd, 0x62, 0xd1, 0x83, 0x3d, 0xb7, 0x3c, 0xa8, 0xc4, 0xf8, 0x05,
-    0x1d, 0xb5, 0xf9, 0xa3, 0x23, 0x76, 0x8d, 0xd6, 0x2f, 0x70, 0xfc, 0x58,
-    0xbf, 0xdd, 0x6c, 0xbf, 0xa1, 0x9c, 0x58, 0xbf, 0xfe, 0x7f, 0x3e, 0x98,
-    0x13, 0xf7, 0xde, 0x40, 0xb1, 0x7f, 0xfa, 0x49, 0xa0, 0xd0, 0xfb, 0x93,
-    0x71, 0x62, 0xfd, 0x9f, 0x2c, 0x82, 0xc5, 0xff, 0xfe, 0x93, 0xb1, 0x39,
-    0x49, 0x6c, 0x7c, 0x3f, 0x56, 0x0d, 0x62, 0xfe, 0xcd, 0x4f, 0x49, 0x82,
-    0xc5, 0x7d, 0x12, 0x04, 0xc3, 0x74, 0x20, 0xb1, 0x7f, 0x1b, 0x30, 0xf6,
-    0x6c, 0xb1, 0x70, 0x37, 0x58, 0xbd, 0x85, 0x38, 0x79, 0x3c, 0x30, 0xbf,
-    0x70, 0x43, 0xce, 0x2c, 0x5f, 0xdf, 0xc3, 0x8b, 0x7c, 0x58, 0xba, 0x7c,
-    0xb1, 0x4e, 0x78, 0xdc, 0x2f, 0xbf, 0xf3, 0x7c, 0xc9, 0xcf, 0x7d, 0xce,
-    0xb1, 0x7f, 0xff, 0x9f, 0xd3, 0xf2, 0xcf, 0x6a, 0x7e, 0x59, 0xd0, 0x5b,
-    0xac, 0x5f, 0xff, 0x4e, 0x7b, 0xed, 0x0d, 0x08, 0x72, 0x52, 0xb1, 0x50,
-    0x56, 0xfe, 0x34, 0xfd, 0xd1, 0xde, 0x16, 0xf1, 0xe4, 0x5f, 0x61, 0xe1,
-    0x87, 0x9b, 0xc4, 0x43, 0xd0, 0xff, 0xa9, 0x8a, 0xff, 0xfb, 0x9f, 0x93,
-    0x4c, 0x7d, 0x9b, 0xef, 0xdf, 0x16, 0x2f, 0x36, 0xb8, 0xb1, 0x42, 0x3f,
-    0x10, 0x95, 0x2f, 0xfe, 0xfb, 0x3e, 0xde, 0x72, 0x70, 0x71, 0x62, 0xfd,
-    0x8d, 0xe1, 0x4a, 0xc5, 0x39, 0xf5, 0x81, 0x12, 0xff, 0x8a, 0x61, 0x9c,
-    0xc7, 0x95, 0x8b, 0x6c, 0xb1, 0x52, 0x79, 0x24, 0x6d, 0x7f, 0xff, 0xd2,
-    0x03, 0xb4, 0x0c, 0xf7, 0xf0, 0xf9, 0xbc, 0xfe, 0x4e, 0xb1, 0x7f, 0xfc,
-    0xe5, 0xe1, 0x7d, 0xf9, 0x1c, 0xde, 0xc1, 0xac, 0x57, 0xd1, 0x75, 0xe6,
-    0x8b, 0xf9, 0xf6, 0x31, 0x88, 0x0b, 0x17, 0xff, 0xfd, 0xf6, 0x7e, 0x61,
-    0xac, 0x40, 0x33, 0x23, 0xe4, 0x98, 0xd5, 0x8b, 0xcc, 0xdb, 0xaa, 0x4d,
-    0xa2, 0xa5, 0x12, 0x7b, 0xb4, 0xdf, 0xf1, 0x39, 0xba, 0xcd, 0xa7, 0xcb,
-    0x17, 0xff, 0xe7, 0xdb, 0x21, 0x26, 0xe8, 0x5c, 0x72, 0x87, 0x16, 0x2f,
-    0xe9, 0x2d, 0xf3, 0xbf, 0x2c, 0x5f, 0xff, 0x67, 0xb5, 0x9f, 0x13, 0xfd,
-    0xf9, 0x27, 0x58, 0xbf, 0x77, 0xbb, 0xe9, 0x96, 0x2f, 0x37, 0xb9, 0x18,
-    0x7f, 0x3e, 0x4f, 0xbf, 0xff, 0xa5, 0xbd, 0x3f, 0x9e, 0x3b, 0xc1, 0xf5,
-    0x83, 0x58, 0xbf, 0xbf, 0x27, 0x97, 0x1a, 0xc5, 0x3a, 0xaf, 0xc8, 0x88,
-    0xf5, 0x0c, 0x23, 0x91, 0xfc, 0xe8, 0x0a, 0xe5, 0x0a, 0x8e, 0x1b, 0x79,
-    0x62, 0xff, 0xe8, 0xd2, 0x4d, 0x08, 0xce, 0x86, 0x19, 0xf8, 0xe5, 0x8b,
-    0xf9, 0xa0, 0x3f, 0xb9, 0xd6, 0x2f, 0xf6, 0x44, 0x52, 0x73, 0x37, 0x58,
-    0xb3, 0x8c, 0xf9, 0x3c, 0x5d, 0x5d, 0x76, 0x8e, 0x1f, 0xc2, 0xea, 0xff,
-    0xf7, 0xf2, 0x0c, 0x5e, 0x68, 0x39, 0xb2, 0xb1, 0x7f, 0xd9, 0x9b, 0xc7,
-    0x0b, 0xef, 0xa5, 0x8b, 0xff, 0xbf, 0x9b, 0x71, 0xf5, 0x3d, 0x4c, 0x4b,
-    0x17, 0xff, 0xf8, 0x5e, 0xd0, 0xa1, 0xa1, 0x78, 0x5e, 0x7f, 0x73, 0xee,
-    0xb1, 0x76, 0x3a, 0xc5, 0x6e, 0x8c, 0x12, 0x47, 0xe8, 0xc9, 0x7b, 0xc0,
-    0x75, 0x8b, 0xfa, 0x63, 0x6e, 0x6d, 0x81, 0x2c, 0x54, 0xa2, 0x13, 0x0c,
-    0xb4, 0x3b, 0x6e, 0xb1, 0x62, 0xe2, 0xf2, 0xc5, 0xf7, 0x89, 0xbb, 0x58,
-    0xb1, 0xb2, 0x6e, 0x9c, 0x5e, 0xff, 0xde, 0x93, 0x93, 0x1a, 0x58, 0x05,
-    0x8a, 0x93, 0xe4, 0xc2, 0x6b, 0x01, 0x62, 0xa2, 0x47, 0x39, 0x42, 0xd7,
-    0xc4, 0x17, 0xfc, 0x43, 0x99, 0x3f, 0x53, 0x41, 0x62, 0xfc, 0xe5, 0xb3,
-    0x0d, 0x62, 0x9c, 0xf8, 0xf8, 0x77, 0x7e, 0x89, 0xf5, 0x9d, 0xac, 0x5f,
-    0xf4, 0x83, 0xf3, 0xb1, 0x67, 0x16, 0x2a, 0x51, 0x08, 0xc4, 0x22, 0x2a,
-    0xbe, 0xce, 0x49, 0x2c, 0x5f, 0xfe, 0x7d, 0x4e, 0x7c, 0x4f, 0xcf, 0xe0,
-    0x16, 0x2f, 0xf7, 0x3f, 0x2e, 0x43, 0x95, 0x8b, 0xff, 0xe1, 0x8b, 0xdc,
-    0x1e, 0x43, 0xf3, 0xd0, 0x72, 0xb1, 0x71, 0x32, 0xc5, 0x6c, 0x98, 0x28,
-    0xc8, 0x71, 0x25, 0xcc, 0x89, 0x4e, 0xdd, 0x62, 0xc5, 0xfe, 0x84, 0xeb,
-    0x69, 0xd6, 0xcb, 0x17, 0xff, 0x9e, 0x1c, 0x11, 0x66, 0x9f, 0x93, 0xd1,
-    0x62, 0xff, 0x37, 0x8c, 0xd0, 0xdf, 0x4b, 0x15, 0x28, 0xb6, 0x63, 0x61,
-    0x25, 0xdf, 0xfd, 0x0f, 0xc9, 0x1a, 0x59, 0xb0, 0x70, 0x58, 0xbb, 0x3a,
-    0x2c, 0x54, 0x9f, 0x06, 0xe8, 0xf7, 0xff, 0xfa, 0x5c, 0x9b, 0xc2, 0xf6,
-    0x0e, 0x4e, 0x3f, 0xcf, 0x6b, 0x17, 0xf9, 0xce, 0x39, 0xe0, 0x7c, 0x58,
-    0xbf, 0xa7, 0x36, 0xf6, 0x7d, 0x62, 0xf7, 0xb3, 0x75, 0x8b, 0xff, 0xe2,
-    0x7e, 0x8f, 0xef, 0xcf, 0xb9, 0x3d, 0x25, 0x62, 0x9d, 0x35, 0x5d, 0x11,
-    0x7d, 0x80, 0x8d, 0x7c, 0x5c, 0x21, 0xeb, 0xfb, 0x6d, 0x67, 0xbe, 0xeb,
-    0x17, 0xf8, 0x78, 0x50, 0x7f, 0x89, 0x62, 0xff, 0xe1, 0x73, 0xed, 0x09,
-    0xea, 0x27, 0xed, 0x62, 0xff, 0xfe, 0x7d, 0x48, 0xa0, 0xee, 0x59, 0xe1,
-    0x47, 0xbe, 0xcb, 0x16, 0x1a, 0xc5, 0xff, 0x4c, 0x76, 0x68, 0x07, 0x68,
-    0x2c, 0x5f, 0xc2, 0xdf, 0xf3, 0xac, 0x58, 0xbd, 0xdf, 0x3e, 0xb1, 0x58,
-    0x79, 0xcc, 0x5f, 0x58, 0x9e, 0x1b, 0x97, 0xe8, 0xcf, 0xe9, 0x0c, 0xba,
-    0x42, 0x5c, 0x84, 0x55, 0xff, 0xf6, 0xbb, 0x9c, 0x84, 0xf9, 0xfb, 0x83,
-    0x0d, 0x62, 0xff, 0xfd, 0x25, 0xe7, 0x38, 0x87, 0x3f, 0xc2, 0x6d, 0x2c,
-    0x5f, 0xf9, 0x9f, 0x27, 0x4d, 0x07, 0xfa, 0xc5, 0x71, 0x11, 0xfe, 0x53,
-    0xbf, 0x30, 0xf0, 0x80, 0xb1, 0x70, 0xba, 0x96, 0x2f, 0xfc, 0x39, 0x80,
-    0x9e, 0x02, 0x78, 0x2c, 0x54, 0xa7, 0x09, 0x08, 0x70, 0x39, 0x1e, 0x89,
-    0xd8, 0x6e, 0xff, 0xa7, 0x46, 0x72, 0x7e, 0xce, 0xb1, 0x7f, 0x3b, 0x43,
-    0xcf, 0xb2, 0xc5, 0xf6, 0xd3, 0xf7, 0x58, 0xaf, 0x9e, 0x8b, 0x17, 0x5f,
-    0x4e, 0x13, 0xac, 0x5f, 0x7a, 0x70, 0x6b, 0x14, 0x33, 0xc2, 0xec, 0x82,
-    0xf7, 0xb3, 0x65, 0x8a, 0xeb, 0x1b, 0x8f, 0xae, 0xb4, 0x7a, 0x65, 0xdb,
-    0xed, 0x18, 0xc4, 0x21, 0x1c, 0x36, 0xac, 0x97, 0xad, 0xbc, 0x6d, 0x4e,
-    0x5f, 0x12, 0x4e, 0xa3, 0x82, 0x3c, 0x62, 0xbf, 0x8c, 0x71, 0xa3, 0x33,
-    0x02, 0x49, 0x43, 0x37, 0x91, 0xf1, 0xfa, 0x50, 0xc8, 0xa3, 0xea, 0x09,
-    0x36, 0x3a, 0x11, 0x41, 0xb1, 0xf5, 0x11, 0xde, 0xcc, 0x35, 0x62, 0xfe,
-    0x98, 0x71, 0xb3, 0x75, 0x8b, 0xff, 0xfd, 0xbe, 0x7a, 0x4b, 0xdc, 0xfb,
-    0x3f, 0xa5, 0xfa, 0x4a, 0xc5, 0xd3, 0x19, 0xa4, 0x56, 0x7c, 0x74, 0x32,
-    0xeb, 0xe0, 0x7b, 0xdd, 0xac, 0x5e, 0x37, 0x52, 0xb1, 0x7e, 0xf3, 0xf4,
-    0xfb, 0xac, 0x5b, 0xad, 0x93, 0xc8, 0xc1, 0xeb, 0xff, 0x16, 0x1e, 0x61,
-    0x9a, 0xcf, 0x2c, 0x5f, 0xed, 0x37, 0x80, 0x19, 0x41, 0x62, 0xff, 0xfb,
-    0xbe, 0x67, 0x47, 0xf4, 0xf4, 0x72, 0xc1, 0xac, 0x54, 0xa2, 0x20, 0x46,
-    0xb7, 0xf0, 0x98, 0x8b, 0x00, 0xb1, 0x7f, 0xfe, 0x9f, 0x3e, 0xee, 0x39,
-    0x7d, 0x3c, 0x1f, 0x8b, 0x17, 0xf3, 0xfa, 0x39, 0xfe, 0x25, 0x8a, 0xd2,
-    0x21, 0x4e, 0xa9, 0x78, 0x73, 0xda, 0xc5, 0xf9, 0xb4, 0x31, 0x12, 0xc5,
-    0x49, 0xe3, 0x1a, 0x3d, 0x7f, 0xef, 0xbf, 0xb8, 0xdd, 0xe6, 0x6c, 0xb1,
-    0x7f, 0xfb, 0x8d, 0xef, 0xbc, 0x0f, 0xfe, 0xda, 0x3d, 0x62, 0xfc, 0xe7,
-    0x6f, 0x4a, 0xc5, 0xfe, 0xf3, 0xee, 0xe3, 0xec, 0x96, 0x2f, 0xfe, 0xdb,
-    0x0b, 0x22, 0x33, 0x42, 0x90, 0x2c, 0x5f, 0xd2, 0x7c, 0x16, 0x1d, 0x62,
-    0xfa, 0x7b, 0xd6, 0x2c, 0x5c, 0x5d, 0x16, 0x2a, 0x51, 0xcb, 0x86, 0xae,
-    0x8f, 0xa2, 0xde, 0xa2, 0x3b, 0xfc, 0xc3, 0x89, 0xf5, 0xb3, 0x2c, 0x5f,
-    0xff, 0xff, 0xf8, 0x65, 0x3b, 0xf7, 0xbb, 0xf6, 0x76, 0x23, 0x70, 0x9b,
-    0xb0, 0xb7, 0xfb, 0xc4, 0x4e, 0x7e, 0x2c, 0x5f, 0x78, 0x3c, 0xea, 0x58,
-    0xbf, 0xf3, 0xfa, 0x7c, 0xfd, 0x24, 0xb7, 0x58, 0xbb, 0xb8, 0x2c, 0x56,
-    0x26, 0x40, 0xf0, 0xa0, 0x62, 0x71, 0x20, 0x5f, 0x05, 0x9d, 0xf9, 0x62,
-    0xf7, 0x62, 0xd9, 0x62, 0xfa, 0x60, 0x00, 0x96, 0x2b, 0x47, 0x88, 0x44,
-    0x17, 0xe8, 0xe7, 0xd6, 0x1a, 0xb1, 0x58, 0x79, 0xa4, 0x43, 0x77, 0xbe,
-    0xb1, 0x7f, 0x1e, 0x77, 0x34, 0xd6, 0x58, 0xbf, 0xec, 0xf7, 0x03, 0xe7,
-    0xb3, 0xeb, 0x15, 0xb2, 0x21, 0x30, 0x60, 0xe6, 0x37, 0x8f, 0x3b, 0xac,
-    0x5f, 0x14, 0x9f, 0x8b, 0x16, 0x7d, 0x8f, 0x03, 0xc3, 0xd7, 0xfc, 0xdd,
-    0xf1, 0xe3, 0xfe, 0x20, 0xd6, 0x2f, 0xcd, 0xdc, 0x03, 0xe2, 0xc5, 0xe1,
-    0x77, 0xc5, 0x8b, 0xfe, 0x8b, 0x9d, 0x18, 0xb6, 0x10, 0xd6, 0x2f, 0xf7,
-    0x3a, 0x31, 0x7b, 0x00, 0xb1, 0x78, 0xf3, 0xe5, 0x8b, 0xdd, 0x53, 0x1e,
-    0xb1, 0x4e, 0x8b, 0x38, 0x8f, 0x8e, 0x6b, 0xd4, 0x3b, 0x74, 0x9a, 0xb1,
-    0x7f, 0xe2, 0x1f, 0xe7, 0x9c, 0xcd, 0x4a, 0xc5, 0x7c, 0xf5, 0x98, 0x62,
-    0xd1, 0x9d, 0x6b, 0x28, 0x6a, 0x36, 0x6d, 0x92, 0xbd, 0xa1, 0x8a, 0x32,
-    0x2c, 0x85, 0x89, 0xad, 0x3b, 0x91, 0x76, 0x81, 0x12, 0x7e, 0xa3, 0x0c,
-    0x3a, 0x57, 0xe3, 0x55, 0x02, 0x01, 0x42, 0xdb, 0x90, 0xa4, 0xf3, 0x80,
-    0x8a, 0x3a, 0x1f, 0xc7, 0x15, 0x87, 0x0d, 0x2e, 0xa8, 0x4b, 0x54, 0x63,
-    0x38, 0x57, 0x25, 0x24, 0x82, 0x94, 0xb3, 0x7f, 0x3c, 0x5c, 0xd9, 0xf4,
-    0xb1, 0x71, 0xfe, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x93, 0x94, 0xbe, 0x63,
-    0xe1, 0x2c, 0x56, 0x8f, 0x4b, 0xc6, 0x37, 0xbe, 0xff, 0x58, 0xbf, 0x98,
-    0x7f, 0x92, 0xd9, 0x62, 0xe3, 0x7e, 0xb1, 0x73, 0x1d, 0x62, 0xfc, 0x29,
-    0xee, 0x1c, 0x58, 0xb7, 0x16, 0x2a, 0x4f, 0x4f, 0x05, 0xd8, 0xaa, 0xd1,
-    0x92, 0x9c, 0xf8, 0xcc, 0x31, 0xab, 0x72, 0x2f, 0x8e, 0xb1, 0x71, 0x36,
-    0x5a, 0x35, 0x2c, 0x5c, 0xe7, 0x58, 0xb9, 0x86, 0xb1, 0x73, 0x9a, 0xb1,
-    0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0xd2, 0xfd, 0x3b, 0xb9, 0x32, 0xc5,
-    0x2c, 0x51, 0xcd, 0x9f, 0x09, 0xef, 0x6d, 0x81, 0x2c, 0x5e, 0x07, 0x46,
-    0x58, 0xbf, 0xe7, 0x84, 0x1c, 0x81, 0x30, 0x58, 0xb8, 0xf1, 0xcb, 0x17,
-    0xfd, 0xd1, 0x8e, 0x51, 0x38, 0xba, 0xf5, 0x8b, 0xfd, 0x24, 0xe0, 0x8e,
-    0x6d, 0x96, 0x29, 0xcf, 0xdf, 0xc8, 0x37, 0xb4, 0xc0, 0x58, 0xac, 0x37,
-    0xce, 0x43, 0x6d, 0x2c, 0x5d, 0xb4, 0xac, 0x56, 0x1a, 0xa6, 0x12, 0xa8,
-    0xd4, 0xaa, 0x5e, 0x46, 0x20, 0x2e, 0x31, 0x7c, 0x18, 0x76, 0xa3, 0x90,
-    0xfc, 0x7d, 0x87, 0xc8, 0xe3, 0x90, 0xd0, 0x12, 0x4d, 0xec, 0x71, 0xac,
-    0x5f, 0x08, 0x31, 0x04, 0xb1, 0x7f, 0xf3, 0xf7, 0x07, 0x9d, 0x34, 0x4f,
-    0xf5, 0x8b, 0xfb, 0x3f, 0xc9, 0xd6, 0xeb, 0x17, 0xff, 0xf7, 0x27, 0x5b,
-    0xe7, 0x7e, 0xef, 0x71, 0x31, 0x77, 0xe5, 0x8b, 0xfb, 0x82, 0x8a, 0x29,
-    0x3a, 0xc5, 0xf6, 0x13, 0x71, 0x62, 0xf7, 0x60, 0x8c, 0xd9, 0x36, 0x9c,
-    0x1c, 0x88, 0x98, 0x91, 0x78, 0x5e, 0x26, 0x18, 0xe3, 0x1a, 0x8c, 0x55,
-    0x28, 0xd2, 0x85, 0xad, 0xe5, 0x8b, 0xc2, 0x60, 0xd6, 0x2a, 0x23, 0x60,
-    0xc2, 0x57, 0xfd, 0x27, 0x30, 0x51, 0x3b, 0x76, 0xb1, 0x7d, 0x13, 0x7a,
-    0x33, 0xe7, 0xba, 0x02, 0x1a, 0x98, 0xcc, 0x5a, 0xb6, 0x2b, 0x85, 0xac,
-    0x74, 0x1c, 0xb8, 0x5c, 0x85, 0x41, 0xb7, 0x86, 0x70, 0xf7, 0xe6, 0xa5,
-    0x1f, 0x0c, 0xcf, 0xd7, 0x2c, 0x8c, 0x5a, 0x56, 0x9d, 0x13, 0x91, 0xf2,
-    0xfa, 0x76, 0x58, 0x38, 0x5d, 0xdf, 0xe8, 0xcc, 0xd6, 0xec, 0xdb, 0xaa,
-    0x4a, 0x72, 0xfe, 0xce, 0x31, 0xbf, 0x75, 0x8b, 0xfd, 0xaf, 0x3f, 0xb6,
-    0x17, 0x16, 0x2e, 0xe7, 0x16, 0x2f, 0xfc, 0x59, 0xa9, 0xf3, 0xee, 0xe3,
-    0x58, 0xbf, 0x60, 0x27, 0x09, 0x62, 0xd1, 0x90, 0x47, 0x06, 0x17, 0x68,
-    0xd9, 0x86, 0x08, 0xfa, 0xff, 0xfe, 0x7d, 0x08, 0xdf, 0xe1, 0x6f, 0xf7,
-    0x8e, 0x79, 0x09, 0x62, 0xff, 0xb2, 0x28, 0x36, 0xb6, 0xf8, 0x96, 0x2f,
-    0xfd, 0x85, 0xbf, 0xde, 0x39, 0xe4, 0x25, 0x8b, 0xf4, 0x9d, 0xa4, 0xeb,
-    0x17, 0xb4, 0x23, 0x7e, 0x7d, 0x2c, 0x85, 0x7e, 0x1e, 0x60, 0x38, 0xb1,
-    0x7f, 0xf4, 0x73, 0x10, 0x33, 0xd2, 0x4e, 0x05, 0x8b, 0x46, 0x75, 0xd5,
-    0x3a, 0x61, 0xb0, 0x3c, 0x29, 0x78, 0x68, 0x19, 0x45, 0x12, 0xa5, 0x7e,
-    0x91, 0xfb, 0x5f, 0xfc, 0xfd, 0x27, 0xef, 0x31, 0x45, 0x3b, 0xac, 0x5f,
-    0xba, 0xe4, 0x69, 0xe7, 0x35, 0x62, 0xed, 0xb1, 0x62, 0xfb, 0x85, 0xff,
-    0x2c, 0x5f, 0xef, 0xcf, 0x24, 0xe2, 0x89, 0x62, 0xfd, 0xb9, 0x4f, 0xf1,
-    0x62, 0xfe, 0xf1, 0x83, 0x29, 0x82, 0xc5, 0xb6, 0x58, 0xa6, 0x3c, 0x21,
-    0x17, 0xdf, 0xf9, 0xff, 0x3d, 0x3d, 0x98, 0x17, 0x16, 0x2f, 0x42, 0x76,
-    0x58, 0xad, 0x1e, 0xf8, 0x90, 0x6f, 0xfb, 0xb8, 0x70, 0xcc, 0xe8, 0xda,
-    0x58, 0xbf, 0x84, 0xfd, 0xf2, 0x7b, 0x58, 0xbf, 0xf0, 0xa2, 0x31, 0xfe,
-    0x71, 0x6a, 0x56, 0x2f, 0xff, 0xa6, 0x27, 0x3b, 0x78, 0xc6, 0xf3, 0x07,
-    0x12, 0xc5, 0xb7, 0x58, 0xa8, 0x2a, 0x7a, 0x19, 0x1b, 0x9a, 0xc4, 0xd5,
-    0xa8, 0x40, 0x7c, 0x88, 0x8f, 0xb8, 0x60, 0x12, 0x17, 0x52, 0x9d, 0xfc,
-    0x2e, 0xce, 0xcc, 0x4b, 0x17, 0xff, 0xec, 0x20, 0x09, 0x8b, 0x73, 0x1e,
-    0x76, 0x60, 0xd6, 0x2d, 0xe5, 0x8b, 0xfb, 0xb3, 0x27, 0x20, 0x75, 0x8b,
-    0xee, 0xf9, 0x23, 0x58, 0xb0, 0x96, 0x2f, 0x4b, 0x6c, 0x61, 0xb6, 0x01,
-    0x25, 0x3a, 0x2a, 0xf4, 0x24, 0x4c, 0xd7, 0xd3, 0xef, 0xe2, 0xc5, 0xfa,
-    0x7b, 0x86, 0x79, 0x62, 0xf8, 0xf8, 0xe7, 0x58, 0xbf, 0xb0, 0x23, 0x38,
-    0x78, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x5c, 0x95, 0xb1, 0xed, 0xee, 0x63,
-    0x7e, 0xf6, 0x13, 0x79, 0x62, 0xff, 0x78, 0xb0, 0x7f, 0xcf, 0x2c, 0x54,
-    0x9e, 0xd3, 0x93, 0xda, 0x56, 0x2f, 0xa7, 0xd3, 0xe5, 0x8a, 0x39, 0xb3,
-    0x21, 0x1b, 0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x67, 0x17, 0xfe, 0x35, 0xfb,
-    0xe1, 0x60, 0x4c, 0x05, 0x8b, 0xdc, 0xc1, 0xac, 0x54, 0xa2, 0xd7, 0x08,
-    0x3c, 0x6e, 0x24, 0x1b, 0xff, 0xdd, 0xf0, 0xcc, 0xde, 0x5c, 0x8a, 0x4e,
-    0xb1, 0x7f, 0xd3, 0xbc, 0x9e, 0x4b, 0x3a, 0x2c, 0x51, 0x22, 0x17, 0xa9,
-    0x2e, 0xa3, 0x11, 0xca, 0xf0, 0xc0, 0xbd, 0xd4, 0xdf, 0x58, 0xb9, 0xa0,
-    0xb1, 0x7f, 0x43, 0xdd, 0xee, 0xfc, 0x58, 0xa6, 0x3c, 0x81, 0x0b, 0xdf,
-    0xcf, 0xcc, 0x26, 0x09, 0x62, 0xff, 0x36, 0xb3, 0xa4, 0x97, 0x96, 0x2f,
-    0xd0, 0xc3, 0xce, 0xeb, 0x15, 0xb9, 0xee, 0xe8, 0xd2, 0xfc, 0x11, 0x9b,
-    0x60, 0x4b, 0x17, 0x42, 0x56, 0x2a, 0x4f, 0x10, 0x45, 0xb7, 0xfe, 0x98,
-    0x99, 0xfb, 0xe1, 0x9b, 0x6c, 0xb1, 0x5b, 0x2e, 0x9e, 0x40, 0x89, 0xca,
-    0x74, 0xfa, 0x77, 0xef, 0xc7, 0xda, 0xc5, 0x44, 0xd1, 0xe2, 0x11, 0x42,
-    0x2b, 0xa3, 0x3f, 0x51, 0x0d, 0xc2, 0x25, 0x8b, 0xff, 0x3c, 0x5f, 0x92,
-    0x19, 0x4c, 0x16, 0x29, 0xcf, 0x57, 0xe2, 0xf7, 0xb7, 0x6f, 0x2c, 0x5f,
-    0xf8, 0x5a, 0xc1, 0xcf, 0x57, 0xdf, 0x75, 0x8a, 0xc3, 0xe1, 0xf8, 0xf5,
-    0xff, 0x3e, 0xb7, 0xfe, 0x18, 0xf2, 0xb1, 0x50, 0x3d, 0xbe, 0x10, 0xdf,
-    0xf7, 0x04, 0xc1, 0xc4, 0x66, 0x01, 0x62, 0xff, 0xf7, 0xa7, 0x86, 0x0b,
-    0x9e, 0x98, 0xa2, 0x75, 0x8b, 0xe8, 0x0b, 0xf8, 0xb1, 0x7f, 0xfe, 0x6f,
-    0xe1, 0xe4, 0xe6, 0x66, 0x1a, 0x6b, 0x41, 0x62, 0xfe, 0x73, 0xec, 0x2d,
-    0x41, 0x62, 0xfb, 0x22, 0x60, 0x2c, 0x5d, 0xfc, 0x58, 0xa3, 0x9b, 0xaf,
-    0x91, 0xdf, 0x6d, 0xf6, 0xf2, 0xc5, 0x31, 0xe2, 0x88, 0x86, 0xf8, 0xf1,
-    0xa7, 0x5b, 0xe5, 0x8b, 0xf4, 0xc5, 0x14, 0xee, 0xb1, 0x74, 0xfc, 0xc3,
-    0xd9, 0x72, 0xea, 0x95, 0x4b, 0x78, 0x7b, 0xda, 0x74, 0x44, 0x7f, 0x57,
-    0x28, 0x57, 0xf4, 0x7a, 0xbf, 0xe2, 0x93, 0xf0, 0x50, 0x63, 0x56, 0x2f,
-    0xff, 0xff, 0x79, 0xc1, 0xc6, 0xec, 0xc6, 0x17, 0x70, 0x90, 0xa7, 0x79,
-    0xfc, 0xc4, 0xb1, 0x7f, 0x9b, 0xb8, 0x73, 0x3b, 0xf2, 0xc5, 0x4a, 0x2c,
-    0xd9, 0xf6, 0xe3, 0xf4, 0x58, 0xbf, 0xef, 0x67, 0xcb, 0x3d, 0xf7, 0x58,
-    0xba, 0x46, 0xb1, 0x50, 0x3c, 0xf2, 0x38, 0xbf, 0xfb, 0xef, 0xe9, 0xd0,
-    0x0a, 0x7d, 0xc5, 0x8a, 0xc4, 0x67, 0x33, 0x48, 0x88, 0x6e, 0xfe, 0x2c,
-    0x5f, 0xb2, 0x28, 0x85, 0xb2, 0xc5, 0x61, 0xe1, 0xfc, 0x5e, 0xfa, 0x0d,
-    0xe7, 0x58, 0xbe, 0xd0, 0x01, 0x2b, 0x17, 0xfc, 0xfb, 0x99, 0xc8, 0x89,
-    0x82, 0x58, 0xa3, 0x51, 0x47, 0xd9, 0x0b, 0x91, 0x7c, 0x8e, 0xfd, 0x14,
-    0x9e, 0x43, 0x58, 0xbf, 0x18, 0x3c, 0xe0, 0x96, 0x2f, 0xc2, 0xea, 0xfc,
-    0xf6, 0xb1, 0x7f, 0xff, 0x9f, 0x80, 0xc3, 0x1f, 0xa4, 0xfd, 0xe6, 0x28,
-    0xa7, 0x75, 0x8b, 0xdc, 0xc2, 0x58, 0xad, 0x91, 0x5d, 0xa2, 0xd0, 0x32,
-    0xdd, 0x03, 0xac, 0x5f, 0xfa, 0x23, 0x18, 0x6f, 0x31, 0x37, 0x96, 0x2a,
-    0x53, 0xca, 0xc3, 0xe7, 0x2a, 0x68, 0x6c, 0x11, 0x88, 0x86, 0x2f, 0xb4,
-    0x67, 0x5e, 0x4b, 0x17, 0xd2, 0x7c, 0x25, 0x8a, 0x93, 0xca, 0x39, 0x4d,
-    0xe1, 0x37, 0x16, 0x2f, 0xf0, 0x6f, 0x14, 0xf1, 0xce, 0xb1, 0x7b, 0xd9,
-    0xd7, 0xac, 0x5f, 0xfc, 0xe6, 0x7d, 0x9f, 0xd3, 0x83, 0x75, 0x8a, 0x73,
-    0xe5, 0xf9, 0x15, 0xef, 0x7d, 0xd6, 0x2f, 0xfb, 0x46, 0x49, 0xde, 0x3d,
-    0xa2, 0x58, 0xa9, 0x3d, 0xb7, 0x1d, 0xbc, 0x63, 0xe9, 0x62, 0xfb, 0x76,
-    0x6d, 0xd5, 0x22, 0x11, 0x7f, 0x43, 0x58, 0x36, 0x3a, 0xc5, 0xf8, 0xa1,
-    0xf0, 0xf8, 0xb1, 0x52, 0x7b, 0x0e, 0x5d, 0x46, 0xa3, 0x9e, 0x22, 0x0d,
-    0x0f, 0x72, 0x11, 0x37, 0xfb, 0xdc, 0x14, 0x27, 0x69, 0x58, 0xbf, 0xf3,
-    0x85, 0xcc, 0xd7, 0xbc, 0xfa, 0x58, 0xac, 0x3f, 0x5f, 0x1a, 0xdc, 0x46,
-    0xac, 0x5f, 0xff, 0x9f, 0x5b, 0xff, 0x0c, 0xd6, 0xb0, 0x28, 0xe9, 0x3a,
-    0xc5, 0x41, 0x12, 0xac, 0x43, 0xc1, 0x8b, 0xfd, 0x17, 0xe7, 0x86, 0x39,
-    0xab, 0x17, 0xf7, 0xe7, 0x63, 0x30, 0x0b, 0x17, 0xf3, 0x37, 0x70, 0xe3,
-    0xac, 0x5d, 0x1d, 0x2b, 0x17, 0xf9, 0x88, 0xce, 0xf8, 0x23, 0xac, 0x56,
-    0x1e, 0x83, 0x0d, 0x5f, 0xe0, 0x4c, 0x7c, 0xfa, 0x46, 0xb1, 0x7f, 0x85,
-    0x1e, 0xde, 0xfc, 0xf1, 0x62, 0xff, 0x63, 0x6b, 0x63, 0x3b, 0x3a, 0xc5,
-    0x44, 0x7d, 0xc7, 0x37, 0xbf, 0x79, 0xc4, 0x46, 0xac, 0x5f, 0xe9, 0x3c,
-    0xc6, 0x04, 0x10, 0x4b, 0x14, 0xe7, 0xc7, 0xd4, 0x53, 0x7b, 0x8f, 0x12,
-    0xc5, 0x4a, 0x6d, 0x99, 0x0a, 0x46, 0x84, 0x30, 0x89, 0x2f, 0x33, 0x1d,
-    0x62, 0xff, 0xb3, 0x92, 0x14, 0xbf, 0x7c, 0x58, 0xad, 0x8f, 0x58, 0x63,
-    0x97, 0xfb, 0xbe, 0x78, 0xa4, 0xfc, 0x58, 0xbf, 0x77, 0xe8, 0xec, 0xfa,
-    0xc5, 0xff, 0xe6, 0x2d, 0xcc, 0x19, 0x34, 0x3e, 0xd0, 0x58, 0xa7, 0x45,
-    0x6b, 0x1a, 0x88, 0xb6, 0xff, 0xec, 0x1b, 0xf4, 0x62, 0x01, 0x9c, 0x02,
-    0xc5, 0xfd, 0x84, 0xe0, 0xe4, 0xac, 0x5f, 0xf7, 0x7b, 0xbe, 0xb2, 0x10,
-    0x95, 0x8b, 0xff, 0xf4, 0x53, 0x13, 0xc4, 0x63, 0xf7, 0xc6, 0x0d, 0xce,
-    0xb1, 0x52, 0xc8, 0x8d, 0x84, 0x26, 0xb2, 0x36, 0x3e, 0xe3, 0x4e, 0x72,
-    0xf8, 0x8d, 0xf4, 0x60, 0x77, 0xef, 0xc7, 0x18, 0xd0, 0x9b, 0x04, 0x34,
-    0x08, 0xbb, 0x88, 0xfe, 0x2c, 0x11, 0xdd, 0xc5, 0x8b, 0x14, 0x63, 0x26,
-    0xba, 0x32, 0x91, 0x54, 0xf0, 0xee, 0xbf, 0x45, 0xf7, 0xef, 0xcb, 0x17,
-    0x3f, 0xd6, 0x2f, 0xfb, 0xed, 0xd9, 0x93, 0xde, 0x12, 0xc5, 0xff, 0x98,
-    0x38, 0x89, 0xfc, 0x52, 0x05, 0x8a, 0xd9, 0x95, 0xa1, 0x0a, 0x4e, 0x78,
-    0xd1, 0x7b, 0x2b, 0x00, 0xbf, 0x8e, 0xef, 0x8f, 0xbb, 0x0d, 0x62, 0xfe,
-    0x33, 0xc5, 0x27, 0xe2, 0xc5, 0xfd, 0x3e, 0x70, 0x4c, 0x16, 0x2f, 0xdd,
-    0xfa, 0x3b, 0x3e, 0xb1, 0x52, 0x8a, 0xd8, 0x12, 0x68, 0xbd, 0x8b, 0x6f,
-    0xfc, 0xe7, 0xce, 0x19, 0xdc, 0x33, 0xcb, 0x17, 0xdc, 0x18, 0xe5, 0x62,
-    0xbe, 0x7c, 0x9e, 0x41, 0xbd, 0xf0, 0xf8, 0xb1, 0x7f, 0x3e, 0xb3, 0x08,
-    0xd5, 0x8b, 0xfd, 0x90, 0xe7, 0x30, 0x80, 0xb1, 0x7f, 0x33, 0x6c, 0x67,
-    0xf1, 0x62, 0xbe, 0x7c, 0x5c, 0x33, 0xa8, 0x23, 0x40, 0xd1, 0xff, 0x42,
-    0x3e, 0xff, 0x7f, 0x21, 0xcc, 0x28, 0x2c, 0x5f, 0xd1, 0x48, 0x7c, 0x6e,
-    0xd6, 0x2d, 0x19, 0xe3, 0xe4, 0x11, 0x9d, 0xfd, 0x3d, 0xf0, 0xf2, 0x4b,
-    0x17, 0xff, 0xf0, 0x01, 0x1a, 0x0a, 0x2e, 0xba, 0xf5, 0x74, 0x2e, 0xba,
-    0x98, 0x67, 0xe3, 0x96, 0x2e, 0xeb, 0x91, 0xa2, 0xc5, 0xc6, 0x81, 0x62,
-    0xff, 0xfd, 0xf7, 0x8b, 0xef, 0xdf, 0xbf, 0xbb, 0xf3, 0x06, 0xb1, 0x7d,
-    0x2e, 0x2e, 0x2c, 0x5a, 0x33, 0xae, 0xd1, 0x6f, 0x24, 0x7b, 0x8c, 0xfd,
-    0x66, 0xa5, 0x5b, 0x46, 0x43, 0xcb, 0x78, 0x4d, 0x39, 0x5f, 0xcb, 0x9a,
-    0x33, 0x6b, 0xdf, 0x93, 0xac, 0x5a, 0x0b, 0x17, 0xf3, 0xf7, 0x02, 0x90,
-    0xd6, 0x2b, 0x47, 0x83, 0xd0, 0x4a, 0xff, 0x66, 0xbd, 0x98, 0x17, 0x16,
-    0x2f, 0xff, 0xd8, 0x09, 0x06, 0xb5, 0x21, 0x19, 0xa6, 0x68, 0x2c, 0x5b,
-    0xad, 0x58, 0xbf, 0x67, 0xf7, 0x93, 0xac, 0x5f, 0xfd, 0x3b, 0x49, 0x93,
-    0x14, 0xf0, 0x51, 0x2c, 0x5e, 0x78, 0xec, 0x58, 0xa8, 0x1f, 0x3f, 0x92,
-    0x2a, 0x34, 0x4f, 0x5b, 0x17, 0xb7, 0x24, 0x23, 0x4e, 0x2b, 0xf8, 0x5c,
-    0x50, 0x90, 0xbb, 0x9f, 0x58, 0xbe, 0xe6, 0x6b, 0x65, 0x8a, 0x81, 0xbc,
-    0xe0, 0xc5, 0xee, 0x49, 0xab, 0x15, 0xf3, 0x7f, 0xc2, 0x1b, 0xfd, 0xbb,
-    0xeb, 0x21, 0x09, 0x58, 0xba, 0x42, 0x58, 0xbe, 0x2f, 0x14, 0xac, 0x5f,
-    0xec, 0x19, 0x30, 0x27, 0xa2, 0xc5, 0x31, 0xea, 0x80, 0x86, 0xff, 0xb3,
-    0x6e, 0x3e, 0x1e, 0x77, 0x58, 0xac, 0x4c, 0x77, 0xb2, 0x17, 0x34, 0x66,
-    0xde, 0x10, 0xdf, 0x88, 0xc1, 0x07, 0xba, 0xc5, 0xff, 0x37, 0xbe, 0x2d,
-    0xff, 0x91, 0x2c, 0x54, 0x9f, 0x44, 0x45, 0x97, 0x74, 0x82, 0xc5, 0xff,
-    0xd3, 0x14, 0x84, 0x67, 0xf2, 0x26, 0xed, 0x62, 0xa2, 0x44, 0x29, 0xc8,
-    0x88, 0x6a, 0xfd, 0x3a, 0x30, 0x1e, 0x58, 0xbf, 0x81, 0x1a, 0x18, 0x67,
-    0xe3, 0x96, 0x2f, 0xe6, 0xdf, 0x09, 0xcd, 0x58, 0xbb, 0x0e, 0xb1, 0x4b,
-    0x15, 0xf3, 0x46, 0x18, 0xbd, 0xe0, 0x67, 0xd6, 0x2f, 0xfe, 0x90, 0x1d,
-    0xa1, 0xcf, 0x66, 0x1d, 0x62, 0xff, 0x8b, 0x36, 0xfb, 0x16, 0x1d, 0x62,
-    0xb6, 0x4c, 0x30, 0x6a, 0x3d, 0x91, 0x7c, 0x74, 0x91, 0x2e, 0x3c, 0x4b,
-    0x16, 0x8e, 0x58, 0xa8, 0x8d, 0x77, 0x06, 0x6d, 0x19, 0x1b, 0x3a, 0xc0,
-    0x9e, 0xbb, 0x48, 0xeb, 0xa9, 0xac, 0xca, 0x92, 0xda, 0x12, 0xb0, 0x2e,
-    0x1c, 0x60, 0x59, 0x3a, 0xd5, 0xbc, 0x61, 0x7d, 0xc3, 0x75, 0xe5, 0x3e,
-    0xc4, 0xd9, 0xa8, 0x76, 0x9e, 0x1d, 0xff, 0x95, 0xbc, 0xd4, 0xb7, 0x20,
-    0x46, 0x26, 0x53, 0x80, 0xfc, 0x94, 0x79, 0xe9, 0x40, 0xc2, 0x8c, 0xd8,
-    0x23, 0x08, 0xe2, 0xa0, 0xe3, 0x46, 0xea, 0x7a, 0xbf, 0xc2, 0x6d, 0x43,
-    0xe1, 0x32, 0xc5, 0xfb, 0xe3, 0x7f, 0x62, 0xc5, 0xff, 0xff, 0xfd, 0x3e,
-    0x26, 0x01, 0x37, 0x47, 0xe8, 0x42, 0xe0, 0x65, 0x23, 0xfb, 0x43, 0x38,
-    0xb1, 0x7b, 0x7e, 0x41, 0x62, 0xff, 0xc1, 0x94, 0x8f, 0xed, 0x0c, 0xe2,
-    0xc5, 0xff, 0x14, 0x8f, 0xed, 0x0c, 0xe2, 0xc5, 0xfe, 0x6e, 0x8f, 0xd0,
-    0x85, 0xc3, 0x0f, 0xdc, 0x33, 0xfb, 0xd9, 0xdc, 0x60, 0xd3, 0xcc, 0x73,
-    0x5d, 0x14, 0x34, 0x22, 0x8a, 0x12, 0xd7, 0xff, 0x46, 0x7d, 0xb8, 0x59,
-    0xef, 0x48, 0x16, 0x2f, 0xff, 0x46, 0x1d, 0xa1, 0x19, 0x9a, 0xdd, 0x9b,
-    0x75, 0x48, 0xf8, 0x5f, 0xed, 0xfa, 0xdf, 0x13, 0xf7, 0xc5, 0x8b, 0xe9,
-    0xed, 0xba, 0x96, 0x2e, 0xe4, 0x63, 0x1f, 0x09, 0x1d, 0xdf, 0xfe, 0x84,
-    0x66, 0x74, 0x73, 0x79, 0xc9, 0x38, 0x96, 0x2f, 0xfb, 0x02, 0xce, 0x8f,
-    0xe8, 0x4a, 0xc5, 0xff, 0x31, 0x0f, 0xf2, 0x7e, 0xa1, 0x2c, 0x5e, 0xd4,
-    0xf1, 0x62, 0x9c, 0xf6, 0x44, 0x79, 0x7f, 0xee, 0xfd, 0x14, 0x1b, 0x5b,
-    0x7c, 0x4b, 0x17, 0xfe, 0x91, 0xb9, 0x6d, 0xee, 0x66, 0xcb, 0x17, 0xf0,
-    0x8b, 0xc4, 0x2d, 0x96, 0x2f, 0xf7, 0xdc, 0xc1, 0x44, 0x28, 0xf5, 0x8b,
-    0xd9, 0x9b, 0xac, 0x51, 0xa7, 0xae, 0x73, 0xab, 0xf4, 0xfb, 0x99, 0xd1,
-    0x62, 0xfe, 0xef, 0x86, 0x14, 0xc1, 0x62, 0xa0, 0x7b, 0x4c, 0x55, 0x7b,
-    0xa0, 0xe5, 0x62, 0xfe, 0x22, 0x73, 0xfb, 0x16, 0x2f, 0x43, 0x98, 0xb1,
-    0x7a, 0x3a, 0x36, 0x09, 0x62, 0xb1, 0x11, 0xec, 0x3e, 0x19, 0x67, 0x50,
-    0xed, 0xfe, 0xc7, 0xe8, 0xc7, 0xeb, 0xb3, 0x56, 0x2f, 0xc6, 0xb7, 0xb0,
-    0x25, 0x8b, 0xfb, 0x60, 0xe3, 0x98, 0x80, 0xb1, 0x7e, 0x73, 0xc9, 0xae,
-    0xb1, 0x7f, 0xcf, 0x07, 0xf8, 0x8e, 0x77, 0x58, 0xbf, 0xec, 0x8a, 0x0d,
-    0xad, 0xbe, 0x25, 0x8b, 0xa6, 0x25, 0x8b, 0xcc, 0x40, 0x23, 0xd4, 0xf1,
-    0xe5, 0x4a, 0x63, 0x3a, 0x33, 0xf1, 0x44, 0x74, 0x23, 0x6d, 0x19, 0xb2,
-    0xe7, 0x80, 0xe1, 0x29, 0x84, 0x3a, 0x44, 0x3a, 0x03, 0x42, 0x18, 0x0f,
-    0xa5, 0x0b, 0x0e, 0x1f, 0x88, 0xf4, 0x38, 0xd0, 0xeb, 0xb5, 0xe2, 0x86,
-    0x2f, 0xf4, 0xea, 0x0d, 0xff, 0xcc, 0x5b, 0xc6, 0x67, 0x47, 0xef, 0xee,
-    0xb1, 0x5b, 0xbb, 0xb7, 0xe7, 0x96, 0xf9, 0x1f, 0x6b, 0x0d, 0x75, 0x2e,
-    0xc8, 0xec, 0xff, 0x47, 0x69, 0xee, 0x81, 0x1d, 0xdf, 0xfe, 0x8d, 0x46,
-    0x85, 0x1f, 0xb0, 0xe3, 0x63, 0x0c, 0xfc, 0x72, 0xc5, 0xc2, 0xdd, 0x62,
-    0xfe, 0x6f, 0x70, 0xb9, 0xe5, 0x8b, 0xf3, 0x0b, 0xaf, 0x3b, 0x2c, 0x56,
-    0xe7, 0xe8, 0x43, 0x3e, 0x2e, 0xbf, 0x16, 0x6c, 0x7f, 0x2c, 0x5f, 0xff,
-    0xc2, 0x26, 0x34, 0xcf, 0x1b, 0x25, 0x0c, 0xfb, 0x9d, 0x62, 0xe7, 0xed,
-    0x62, 0xff, 0xfa, 0x1b, 0x46, 0xa9, 0x8d, 0x36, 0xdf, 0x46, 0x19, 0xf8,
-    0xe5, 0x8a, 0x81, 0xff, 0x00, 0x62, 0xe0, 0xf8, 0xb1, 0x7f, 0xf6, 0xdf,
-    0x97, 0xf7, 0x1c, 0xbb, 0x82, 0xc5, 0xc2, 0xdd, 0x62, 0xbe, 0x7f, 0x04,
-    0x33, 0xc4, 0x6b, 0xff, 0xb3, 0xcf, 0x85, 0xfc, 0xf4, 0x8d, 0x62, 0xff,
-    0xde, 0x36, 0x4a, 0x19, 0xf7, 0x3a, 0xc5, 0xff, 0x1b, 0x25, 0x0c, 0xfb,
-    0x9d, 0x62, 0xf8, 0x44, 0xc6, 0x98, 0x7f, 0x1e, 0x3f, 0xbf, 0x3c, 0x40,
-    0x60, 0x2c, 0x5f, 0xb4, 0x07, 0xfc, 0xac, 0x51, 0xd1, 0x17, 0xf3, 0xa1,
-    0x14, 0xdf, 0xb3, 0x59, 0x91, 0x2c, 0x5a, 0x32, 0x0b, 0x8e, 0x19, 0x0d,
-    0x8d, 0xcb, 0xce, 0x53, 0xf8, 0x6d, 0xb4, 0x26, 0x88, 0xbb, 0x91, 0xa2,
-    0x86, 0x61, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4b, 0x22, 0xff, 0xcd, 0x08,
-    0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x46, 0xe2, 0xd1, 0x98, 0x88, 0x73, 0x9b,
-    0xd6, 0xe9, 0xa8, 0x3c, 0x64, 0xb7, 0xff, 0xcd, 0xbc, 0x66, 0xd8, 0x17,
-    0x27, 0xdf, 0xc2, 0x58, 0xbf, 0xe2, 0x68, 0xce, 0x48, 0x26, 0x56, 0x2f,
-    0x75, 0x9d, 0xee, 0xb1, 0x7f, 0xfb, 0x8d, 0x07, 0x35, 0xe1, 0x80, 0xe6,
-    0x2c, 0x5f, 0xf9, 0x8b, 0xd0, 0xcd, 0x67, 0x59, 0x1b, 0xac, 0x5f, 0xff,
-    0xec, 0xf7, 0x33, 0x98, 0x4f, 0x3c, 0x6f, 0xe0, 0xb6, 0x58, 0xb3, 0xfd,
-    0x14, 0xfe, 0x48, 0xbf, 0xc5, 0x2d, 0xf8, 0x67, 0x96, 0x2b, 0x64, 0xd2,
-    0xe1, 0x0f, 0x1c, 0x28, 0xbf, 0xf0, 0xdc, 0x85, 0xbe, 0x73, 0xac, 0x8d,
-    0xd6, 0x2f, 0xff, 0x79, 0xfe, 0x2f, 0xb3, 0xf7, 0xc9, 0x35, 0x62, 0xa5,
-    0x12, 0xd8, 0x95, 0x7d, 0xbb, 0x36, 0xea, 0x91, 0x58, 0xbf, 0xfe, 0xd6,
-    0xc5, 0x3a, 0x61, 0x93, 0x6a, 0x7a, 0x2c, 0x56, 0x91, 0x04, 0x23, 0x1b,
-    0xfe, 0x67, 0x83, 0x90, 0xa4, 0xeb, 0x17, 0xd2, 0x36, 0xfa, 0xc5, 0xff,
-    0xf7, 0x1b, 0xec, 0xe4, 0xde, 0x9f, 0xcf, 0x16, 0x2c, 0xeb, 0x14, 0xb1,
-    0x7f, 0x9e, 0x0e, 0x42, 0x93, 0xac, 0x5f, 0x89, 0x9f, 0xbd, 0xce, 0x6f,
-    0x98, 0x32, 0x89, 0x1f, 0x7e, 0x22, 0xe8, 0x9b, 0xd4, 0x9f, 0x7e, 0xcd,
-    0x07, 0x31, 0xeb, 0x17, 0xf3, 0x94, 0xc2, 0x7a, 0x96, 0x2f, 0x3c, 0xf9,
-    0x62, 0xf1, 0x1f, 0x65, 0x8b, 0xfa, 0x74, 0x0e, 0x60, 0xd6, 0x2a, 0x51,
-    0x2f, 0xa2, 0xf6, 0x1c, 0xf0, 0xf5, 0xf0, 0x87, 0x86, 0xac, 0x5e, 0x68,
-    0x46, 0x75, 0xc5, 0xd9, 0x79, 0x8d, 0xc0, 0x70, 0xcc, 0xc8, 0x51, 0xee,
-    0x46, 0xf1, 0x99, 0x7d, 0x07, 0x90, 0xc3, 0x8e, 0x3b, 0xad, 0x97, 0xb7,
-    0x77, 0x55, 0x3c, 0xee, 0x8d, 0xfa, 0x31, 0xa2, 0xe6, 0x2c, 0x5f, 0xa3,
-    0x32, 0x12, 0x05, 0x8b, 0xf9, 0xb9, 0x18, 0x5c, 0x95, 0x8a, 0x8c, 0x46,
-    0x26, 0xc7, 0xb0, 0x2c, 0xd1, 0x5d, 0xbc, 0xb1, 0x7f, 0xfe, 0xd4, 0xf4,
-    0x29, 0x83, 0x6e, 0xe4, 0x36, 0x25, 0x8b, 0xe7, 0xc2, 0xf2, 0xc5, 0x76,
-    0x7e, 0xdf, 0x55, 0xbe, 0x6d, 0x6d, 0x18, 0xe8, 0xab, 0x68, 0x44, 0x5f,
-    0xfb, 0xd9, 0x19, 0x9a, 0x7d, 0x98, 0xeb, 0x17, 0xf8, 0x3f, 0x3e, 0xa4,
-    0x5d, 0x7a, 0xc5, 0xfd, 0xd6, 0xb1, 0xf5, 0x3c, 0x58, 0xbf, 0xfd, 0xd6,
-    0x46, 0xfd, 0x6f, 0x31, 0xa0, 0xf9, 0xac, 0x58, 0xbf, 0xfd, 0xd6, 0x46,
-    0xfd, 0x6f, 0x31, 0xa0, 0xf9, 0xac, 0x58, 0xbf, 0xee, 0x08, 0xe4, 0xfd,
-    0x04, 0xcb, 0x17, 0xff, 0xe9, 0xd4, 0xb0, 0xf3, 0xc2, 0x3c, 0xea, 0x4e,
-    0xb1, 0x4e, 0x88, 0xfe, 0x1d, 0xdf, 0xf3, 0x1e, 0x7f, 0x30, 0x63, 0x56,
-    0x2f, 0xff, 0xbf, 0x30, 0x70, 0x6b, 0x3e, 0xc4, 0xd0, 0x58, 0xbf, 0xe7,
-    0xe0, 0x27, 0xa3, 0xfa, 0x56, 0x2f, 0xfa, 0x19, 0xee, 0x36, 0xc2, 0x82,
-    0xc5, 0xe6, 0xd3, 0x40, 0xfd, 0x7e, 0x75, 0x7f, 0x3c, 0x1c, 0x78, 0x75,
-    0x8b, 0xff, 0xee, 0xff, 0x9b, 0xff, 0x27, 0x4d, 0x0e, 0x62, 0xc5, 0xfe,
-    0xf4, 0x9e, 0x46, 0xde, 0x58, 0xa9, 0x44, 0x26, 0x28, 0xdf, 0xfd, 0x83,
-    0x62, 0x91, 0xb4, 0xe6, 0x96, 0x2b, 0x74, 0xd1, 0x7e, 0x64, 0x50, 0xb1,
-    0xe1, 0x0d, 0xf0, 0x38, 0x23, 0xac, 0x5f, 0xd2, 0x4d, 0xbb, 0x47, 0xac,
-    0x5f, 0x3f, 0x43, 0x46, 0xb1, 0x7b, 0xa8, 0x72, 0xb1, 0x52, 0x78, 0xc2,
-    0x26, 0xbc, 0x59, 0x05, 0x8b, 0xff, 0xf7, 0xf3, 0x93, 0xce, 0x37, 0xe7,
-    0xbf, 0xb9, 0xd6, 0x2f, 0xe3, 0x64, 0x9b, 0x46, 0xac, 0x57, 0x68, 0x85,
-    0x75, 0x6b, 0xff, 0xfd, 0xec, 0xf3, 0x8b, 0xaf, 0x29, 0x8e, 0x16, 0x3f,
-    0x1f, 0x4b, 0x14, 0xc8, 0x8a, 0x11, 0x1d, 0xff, 0x16, 0x01, 0xb7, 0xd4,
-    0xee, 0xb1, 0x7f, 0xb7, 0x9d, 0x3f, 0xa7, 0x75, 0x8b, 0xfc, 0x28, 0x49,
-    0xc9, 0xbe, 0xb1, 0x52, 0x7d, 0x1a, 0x35, 0xa8, 0x2e, 0xb8, 0x8c, 0x8b,
-    0xb3, 0x97, 0x94, 0x11, 0xa4, 0x33, 0x92, 0x7d, 0xd8, 0x04, 0x25, 0x19,
-    0x5f, 0x08, 0xbd, 0x0a, 0x2b, 0xfe, 0xc0, 0xa7, 0xef, 0x85, 0xe5, 0x8b,
-    0x69, 0x62, 0xff, 0xde, 0x97, 0xfb, 0x0f, 0xec, 0x4b, 0x17, 0xfe, 0x07,
-    0xb3, 0xf2, 0x5e, 0x8e, 0xc5, 0x8a, 0x1a, 0x24, 0x30, 0x48, 0x47, 0xb7,
-    0xe0, 0x61, 0xe7, 0x75, 0x8b, 0xfe, 0x1f, 0x1b, 0x77, 0x1b, 0x41, 0x62,
-    0xff, 0x68, 0x3d, 0xcb, 0x3f, 0x8b, 0x17, 0xf0, 0x9b, 0xb8, 0xe6, 0x35,
-    0x62, 0xa5, 0x19, 0x63, 0x29, 0xc3, 0xaf, 0x9a, 0xdf, 0xff, 0x49, 0xb2,
-    0x52, 0x0e, 0x67, 0x24, 0x8d, 0x58, 0xbf, 0xfe, 0xfb, 0x03, 0x98, 0x4d,
-    0x07, 0x1e, 0x1d, 0x62, 0xff, 0x9f, 0xdc, 0x93, 0xe8, 0x5b, 0x2c, 0x5c,
-    0x72, 0x58, 0xbf, 0x8b, 0x37, 0xfb, 0xe9, 0x60, 0x65, 0xbd, 0xf6, 0xec,
-    0xdb, 0xaa, 0x45, 0xc2, 0xff, 0x30, 0xe7, 0xee, 0x6c, 0xac, 0x5f, 0x43,
-    0x05, 0x05, 0x8b, 0xfc, 0x77, 0xfb, 0x7d, 0xf8, 0xb1, 0x52, 0x7a, 0xcc,
-    0x47, 0x7c, 0xfa, 0xfb, 0x12, 0x2a, 0x79, 0x08, 0x9b, 0xf3, 0x43, 0x77,
-    0xea, 0x58, 0xbd, 0xa6, 0x1a, 0xc5, 0xf7, 0xb9, 0x20, 0x58, 0xbf, 0xef,
-    0xe0, 0xe7, 0xf3, 0x02, 0x93, 0xc0, 0x61, 0xdb, 0xff, 0xdd, 0x7b, 0xea,
-    0x0d, 0xfc, 0x18, 0xa7, 0x8b, 0x15, 0x05, 0x69, 0x43, 0x4f, 0x35, 0x39,
-    0xd4, 0xb4, 0x7b, 0xf8, 0x6d, 0x11, 0xef, 0x1b, 0x04, 0x99, 0x7f, 0xff,
-    0xe6, 0x18, 0x33, 0x3b, 0xe7, 0x7c, 0x7d, 0x6f, 0xfc, 0x1e, 0x99, 0x62,
-    0xf3, 0x36, 0xeb, 0x17, 0x89, 0x8e, 0xb1, 0x6d, 0x96, 0x2e, 0xcf, 0x0c,
-    0xf3, 0x18, 0x77, 0xa8, 0x72, 0xf6, 0xb0, 0x25, 0x8a, 0x81, 0xed, 0x70,
-    0xf2, 0xe1, 0x01, 0x62, 0xff, 0x3e, 0x9b, 0xab, 0xaa, 0x49, 0x62, 0xfb,
-    0xa8, 0x9b, 0x65, 0x8b, 0xf4, 0x9e, 0x4b, 0x75, 0x8a, 0xd2, 0x27, 0xbe,
-    0x30, 0xc7, 0x1e, 0x26, 0xbf, 0xff, 0xe9, 0xdb, 0x37, 0x1b, 0x97, 0xe5,
-    0xf9, 0x83, 0x6e, 0xc9, 0x62, 0xff, 0xfe, 0x92, 0xcd, 0xe4, 0x05, 0x3a,
-    0x14, 0x35, 0x30, 0x58, 0xbf, 0x60, 0x5a, 0x6d, 0x96, 0x2a, 0x08, 0xea,
-    0xfb, 0x31, 0x2d, 0x5f, 0xfc, 0xff, 0x96, 0x7f, 0xb9, 0xd8, 0x6b, 0x17,
-    0xfe, 0x11, 0x31, 0x3e, 0x6b, 0x20, 0xb1, 0x47, 0x3f, 0xe2, 0x42, 0xbf,
-    0xff, 0xfc, 0x3f, 0xe7, 0xf1, 0x8b, 0x79, 0xdf, 0x59, 0xb1, 0x37, 0xb9,
-    0x20, 0x58, 0xbf, 0xff, 0xff, 0xdf, 0x90, 0x73, 0x99, 0xa2, 0x9e, 0xe1,
-    0xbf, 0xde, 0x22, 0xc7, 0xd4, 0xf4, 0x98, 0x2c, 0x54, 0xa6, 0x12, 0xef,
-    0x17, 0x41, 0xd6, 0x2a, 0x53, 0x63, 0xc8, 0xca, 0x8d, 0x22, 0xbf, 0xff,
-    0xdf, 0x7d, 0x8e, 0xd0, 0xc1, 0x75, 0xfc, 0x6f, 0xee, 0xfc, 0x58, 0xbf,
-    0xff, 0xed, 0xe4, 0x5b, 0xfd, 0xf5, 0x83, 0xe4, 0x90, 0xb7, 0x73, 0x56,
-    0x2a, 0x51, 0xa5, 0x8d, 0x17, 0x86, 0xd1, 0x2c, 0x5e, 0x68, 0xe3, 0x56,
-    0x28, 0x66, 0xfc, 0x03, 0xd7, 0xf0, 0x18, 0x02, 0x2d, 0xd6, 0x2f, 0xfb,
-    0x66, 0x1c, 0xc0, 0xb0, 0xeb, 0x17, 0xa4, 0xfc, 0x58, 0xbc, 0xd0, 0xf3,
-    0x9e, 0xb1, 0x1c, 0xdf, 0xfb, 0x82, 0x37, 0x98, 0x77, 0xfc, 0xac, 0x5e,
-    0xd4, 0xfd, 0x62, 0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x44,
-    0xbe, 0x90, 0x3a, 0x87, 0x6b, 0x13, 0xa0, 0xdc, 0x85, 0xe1, 0x0a, 0xd0,
-    0xc8, 0xbf, 0xb7, 0x14, 0x7f, 0xda, 0x0b, 0x17, 0xff, 0xff, 0xb2, 0x1f,
-    0x68, 0x48, 0xe4, 0x9b, 0xbf, 0xe7, 0x27, 0x9c, 0x6f, 0xac, 0x54, 0xa2,
-    0xa5, 0xcc, 0xef, 0xfb, 0x0d, 0x96, 0xdf, 0x53, 0xba, 0xc5, 0x40, 0xf7,
-    0x37, 0x21, 0xbf, 0xce, 0x36, 0xea, 0xe9, 0x30, 0x58, 0xbe, 0x8e, 0x7f,
-    0xb2, 0xc5, 0x49, 0xee, 0xc0, 0xe2, 0xfc, 0x08, 0xa0, 0xc4, 0xb1, 0x7f,
-    0x16, 0xa4, 0x9a, 0x0b, 0x15, 0x87, 0xaa, 0xc5, 0x36, 0x95, 0x8a, 0xe1,
-    0xb1, 0x8e, 0x20, 0xbf, 0xf8, 0xa0, 0xc3, 0x69, 0x84, 0x93, 0x2c, 0x54,
-    0x9f, 0x2e, 0x12, 0x5c, 0xda, 0x58, 0xbf, 0xff, 0x8b, 0x3a, 0x3f, 0xe4,
-    0xf9, 0xbc, 0xf3, 0xf8, 0x75, 0x8b, 0x8a, 0x77, 0x3f, 0x3e, 0x0b, 0xdf,
-    0xff, 0xd8, 0x2d, 0xff, 0x25, 0x30, 0x61, 0xcf, 0x7a, 0x75, 0x8b, 0xff,
-    0x71, 0xc8, 0x5e, 0x8e, 0x7e, 0x87, 0x58, 0xbf, 0xff, 0xf9, 0xcb, 0x0f,
-    0x3a, 0xc7, 0xfc, 0x83, 0x85, 0x91, 0x41, 0xa0, 0xb1, 0x7f, 0xed, 0x4f,
-    0x9d, 0xa1, 0x25, 0xb2, 0xc5, 0xa6, 0x08, 0xad, 0x76, 0xfb, 0xff, 0xb3,
-    0xd9, 0xf2, 0x68, 0x09, 0xb8, 0xb1, 0x7f, 0xff, 0xfb, 0x3d, 0xcc, 0x1b,
-    0x0e, 0x49, 0xbb, 0xfe, 0x72, 0x79, 0xc6, 0xfa, 0xc5, 0x3a, 0x2e, 0x49,
-    0x0e, 0xff, 0xfa, 0x02, 0x98, 0x30, 0xc9, 0xbd, 0xc9, 0x02, 0xc5, 0xfd,
-    0x33, 0xc9, 0xef, 0x4b, 0x15, 0x27, 0xfa, 0x04, 0xfb, 0xff, 0xc5, 0x3b,
-    0x61, 0x7b, 0xed, 0x0f, 0xe2, 0xc5, 0xff, 0xfd, 0xb1, 0xc5, 0xdb, 0x7b,
-    0xf3, 0xcc, 0x1b, 0x4c, 0x16, 0x2f, 0xff, 0xf1, 0xbf, 0x68, 0x60, 0xf9,
-    0xfc, 0xde, 0x79, 0xfc, 0x3a, 0xc5, 0x62, 0x30, 0x19, 0x76, 0xff, 0xe1,
-    0xb1, 0x00, 0x9b, 0xbd, 0x61, 0xd6, 0x2a, 0x53, 0x6e, 0x28, 0xc2, 0x44,
-    0x43, 0x79, 0xca, 0x56, 0x2f, 0xf8, 0x46, 0xb1, 0xb9, 0xb6, 0x6c, 0xb1,
-    0x52, 0xbe, 0x65, 0x08, 0x40, 0x0e, 0x30, 0xc7, 0x84, 0x9c, 0x79, 0x69,
-    0xd6, 0xff, 0x0f, 0x12, 0x87, 0x07, 0x21, 0x3d, 0xe8, 0xe3, 0xfa, 0x1a,
-    0xc7, 0x0d, 0xdf, 0xfe, 0x2c, 0x78, 0x33, 0xef, 0x9a, 0x68, 0x2c, 0x5f,
-    0xf6, 0x1d, 0xc8, 0x0f, 0xf1, 0x2c, 0x5f, 0xa1, 0xcf, 0xb8, 0x16, 0x2f,
-    0xe9, 0x1e, 0x13, 0xca, 0xc5, 0xfe, 0x7e, 0xf9, 0x11, 0x30, 0x6b, 0x17,
-    0xff, 0xf9, 0xfb, 0x08, 0x7f, 0x9d, 0x77, 0xbb, 0xf7, 0xee, 0x60, 0x4b,
-    0x15, 0xa4, 0x64, 0x91, 0x5f, 0x8d, 0xaf, 0xfd, 0x9c, 0xe0, 0x8a, 0x28,
-    0x4c, 0x7a, 0xc5, 0xff, 0x7b, 0x7f, 0xbe, 0x87, 0x9b, 0x2c, 0x5e, 0x79,
-    0x82, 0xc5, 0x31, 0xec, 0x11, 0xe5, 0xcc, 0x6a, 0xc5, 0xf1, 0x16, 0x7b,
-    0x13, 0x02, 0xd1, 0x7f, 0xe1, 0x37, 0x1c, 0x41, 0x7f, 0x66, 0x76, 0x3c,
-    0x25, 0x8b, 0xfd, 0x25, 0x27, 0x7c, 0x09, 0x62, 0xfd, 0xf7, 0xd3, 0x71,
-    0x62, 0xfe, 0x1c, 0xbf, 0xe4, 0xeb, 0x17, 0xe1, 0xcc, 0x7b, 0x69, 0x62,
-    0xf4, 0x90, 0x30, 0xf6, 0x18, 0xb6, 0xbb, 0x56, 0xba, 0xf1, 0xfa, 0x69,
-    0x6b, 0xe5, 0xbe, 0x32, 0xea, 0x84, 0x05, 0x6c, 0xaf, 0xf3, 0x25, 0xca,
-    0xdf, 0xe9, 0x2d, 0xd9, 0xf6, 0xc5, 0x8b, 0xb7, 0x95, 0x8a, 0x34, 0xf2,
-    0xc8, 0xce, 0xfe, 0xe9, 0x25, 0xbb, 0x71, 0x62, 0xff, 0xfc, 0x69, 0x60,
-    0x39, 0xfc, 0xde, 0x79, 0xfc, 0x3a, 0xc5, 0xff, 0xa6, 0x18, 0x3c, 0x86,
-    0x10, 0x16, 0x2b, 0x11, 0x28, 0x4a, 0xf7, 0xe6, 0x07, 0x30, 0x96, 0x2a,
-    0x53, 0x0c, 0x78, 0x62, 0x70, 0x86, 0xff, 0xff, 0x3f, 0xa4, 0x98, 0xf8,
-    0x76, 0x87, 0x27, 0xd2, 0x35, 0x8a, 0x74, 0xf0, 0x3d, 0x19, 0x77, 0x43,
-    0x4b, 0xff, 0xdf, 0x9d, 0x13, 0x96, 0x7b, 0xd9, 0xc5, 0x8b, 0xe0, 0x01,
-    0xfb, 0x58, 0xbf, 0xc2, 0xdd, 0x87, 0xa1, 0x6c, 0xb1, 0x7f, 0x1a, 0xfe,
-    0xe4, 0x9d, 0x62, 0xff, 0xfb, 0x1f, 0xf2, 0x0e, 0x16, 0x45, 0x06, 0x82,
-    0xc5, 0xf6, 0xfa, 0x9d, 0xd6, 0x2f, 0x6f, 0xf7, 0xc4, 0x6d, 0x1a, 0x6f,
-    0xa2, 0xf6, 0x4f, 0xbf, 0x08, 0xd2, 0xc0, 0x2c, 0x5f, 0xff, 0xcf, 0xdc,
-    0x27, 0xdc, 0x72, 0x86, 0x0d, 0xa6, 0x0b, 0x17, 0xfc, 0xda, 0x34, 0xb3,
-    0xdf, 0x75, 0x8b, 0xfe, 0xe6, 0xd8, 0x17, 0xb9, 0x26, 0xac, 0x5f, 0xf4,
-    0x9f, 0xed, 0xdc, 0x1f, 0x65, 0x8a, 0x73, 0xf8, 0xd1, 0xed, 0xff, 0xff,
-    0xc2, 0x2d, 0xa5, 0xbf, 0x27, 0xc2, 0x93, 0x93, 0x7b, 0x92, 0x05, 0x8a,
-    0x1a, 0xb5, 0x87, 0x48, 0xd4, 0x3f, 0x8e, 0x9d, 0xf2, 0x92, 0x5a, 0xf4,
-    0x2c, 0x7a, 0x88, 0x6f, 0xf7, 0xdf, 0xbf, 0x6d, 0x81, 0x2c, 0x5f, 0xfb,
-    0x3c, 0xdd, 0xe4, 0x3f, 0x3a, 0x58, 0xbf, 0xff, 0xf9, 0xfd, 0x87, 0xe3,
-    0x43, 0x4f, 0xc9, 0x2d, 0x9b, 0xcf, 0x86, 0xac, 0x5f, 0xe7, 0x35, 0xff,
-    0xbb, 0xf1, 0x62, 0xfe, 0x67, 0x83, 0x9b, 0x2b, 0x16, 0x98, 0x1f, 0x17,
-    0xcd, 0x6f, 0xff, 0xff, 0xe2, 0x03, 0x10, 0x39, 0x87, 0x6f, 0xe0, 0xd9,
-    0xca, 0x7e, 0xcf, 0x07, 0x1a, 0xc5, 0xff, 0xff, 0x9b, 0x63, 0xbf, 0x30,
-    0x6c, 0xe5, 0x3f, 0x67, 0x83, 0x8d, 0x62, 0xfe, 0x7f, 0xb7, 0xdf, 0x8b,
-    0x17, 0xbb, 0x84, 0xac, 0x5d, 0x00, 0x2c, 0x5f, 0xc4, 0x28, 0x7d, 0xa1,
-    0x86, 0xd9, 0xc7, 0xaf, 0xfe, 0x14, 0x09, 0xe1, 0x3e, 0x21, 0x41, 0x62,
-    0xfd, 0x3c, 0x01, 0xfc, 0xb1, 0x4e, 0x7d, 0xbf, 0x44, 0xa8, 0x2b, 0x18,
-    0x1c, 0x34, 0xdc, 0x9f, 0x50, 0x83, 0x3b, 0x4f, 0x18, 0xfd, 0x0a, 0xeb,
-    0x6e, 0xb1, 0x77, 0x3b, 0x58, 0xbf, 0xb4, 0x01, 0xe0, 0x38, 0xb1, 0x52,
-    0xc8, 0x6b, 0xc9, 0x72, 0x1b, 0xbf, 0x39, 0xbb, 0x4b, 0x57, 0x03, 0xa7,
-    0x84, 0xc4, 0x33, 0x7e, 0xfe, 0x16, 0x6e, 0xb1, 0x71, 0x79, 0x62, 0xa0,
-    0x6f, 0xd8, 0xa2, 0xf4, 0x3f, 0xe5, 0x8a, 0x73, 0x7d, 0xf2, 0x0b, 0xee,
-    0xff, 0x3b, 0xac, 0x5b, 0xf2, 0x78, 0xac, 0x41, 0x7f, 0x9b, 0x93, 0xbc,
-    0x96, 0xcb, 0x16, 0xe2, 0xc5, 0xff, 0x9c, 0x1c, 0xd4, 0xbc, 0x1b, 0x8b,
-    0x15, 0xb1, 0xe8, 0x10, 0x95, 0xff, 0xe0, 0x9b, 0x52, 0xe7, 0xc1, 0xcc,
-    0x25, 0x62, 0xf8, 0x0c, 0xda, 0x58, 0xb3, 0x40, 0xfa, 0xfb, 0x49, 0xac,
-    0x4d, 0x7c, 0xd2, 0x67, 0x84, 0x27, 0x21, 0x1b, 0x7c, 0x72, 0x61, 0xac,
-    0x5e, 0x7d, 0xba, 0xf5, 0x8b, 0xf3, 0x9c, 0x9a, 0x0b, 0x17, 0x9f, 0xbe,
-    0x2c, 0x5c, 0xde, 0x58, 0xb9, 0xe7, 0x63, 0x6b, 0xc1, 0xeb, 0xff, 0xbd,
-    0xfc, 0xe9, 0xf7, 0x3e, 0x0b, 0xaf, 0x58, 0xa7, 0x4c, 0x66, 0x3c, 0x8b,
-    0x44, 0x7f, 0x5c, 0x62, 0xcb, 0xf7, 0x3d, 0xf9, 0x09, 0x62, 0xfe, 0x37,
-    0x59, 0xe6, 0xed, 0x62, 0xcd, 0xd9, 0xed, 0x68, 0xaa, 0xff, 0xe1, 0x34,
-    0x7b, 0xed, 0x9f, 0x7e, 0xf8, 0xb1, 0x7f, 0xa6, 0x26, 0xf7, 0xd8, 0x0b,
-    0x17, 0xfd, 0x0c, 0xf6, 0x6b, 0x79, 0xc5, 0x8b, 0xff, 0xdd, 0xfc, 0x47,
-    0xc1, 0x75, 0xef, 0xf6, 0x3a, 0xc5, 0x76, 0x88, 0xa6, 0x39, 0xb4, 0x67,
-    0x58, 0xec, 0xf5, 0x63, 0x43, 0xa8, 0xd8, 0xcf, 0xae, 0x2c, 0x4c, 0xf2,
-    0xc6, 0xd0, 0xac, 0x84, 0x32, 0x07, 0x0f, 0xac, 0x97, 0x0b, 0xbc, 0x21,
-    0x3b, 0x8c, 0x55, 0xe1, 0x81, 0x14, 0x64, 0xda, 0x94, 0x20, 0x78, 0xc2,
-    0x3f, 0x28, 0x01, 0xa9, 0x0f, 0xa0, 0x86, 0x91, 0x4e, 0x22, 0x72, 0x95,
-    0x45, 0xe9, 0x54, 0x22, 0x8d, 0x80, 0x28, 0x53, 0x47, 0x14, 0x06, 0x93,
-    0xd5, 0x0b, 0xeb, 0xff, 0xe8, 0xcd, 0x39, 0xe6, 0x3e, 0x31, 0x9f, 0x42,
-    0x8f, 0x58, 0xb3, 0x41, 0x53, 0x07, 0xe5, 0x02, 0x5f, 0xf8, 0x47, 0x8c,
-    0xe4, 0x97, 0xb3, 0x4b, 0x17, 0x74, 0x75, 0x8b, 0xff, 0xa7, 0x8f, 0xd3,
-    0x93, 0x07, 0xf3, 0x2c, 0x5f, 0xfa, 0x7d, 0x3d, 0x24, 0xb7, 0x6e, 0x2c,
-    0x5e, 0xcf, 0xc6, 0x3a, 0x27, 0x98, 0x67, 0x88, 0xb7, 0xfc, 0x3c, 0x8c,
-    0x9d, 0x3f, 0xc4, 0xb1, 0x7f, 0xe9, 0x8c, 0xea, 0xce, 0xe1, 0xf9, 0xe2,
-    0xc5, 0xff, 0xfd, 0xc8, 0xc3, 0xe6, 0xf2, 0xfd, 0x18, 0x85, 0xbe, 0x71,
-    0x62, 0x86, 0x8a, 0x72, 0x46, 0xb4, 0x66, 0xee, 0xe4, 0x41, 0xd0, 0x4f,
-    0x6d, 0x9d, 0xf8, 0x63, 0xe8, 0x70, 0x09, 0x0b, 0xa4, 0x38, 0xef, 0x49,
-    0x1a, 0xb1, 0x7f, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x3b, 0x2d,
-    0x19, 0xf3, 0xe8, 0x61, 0xdb, 0xff, 0xe1, 0x4f, 0x70, 0x73, 0x85, 0x84,
-    0x3f, 0xca, 0xc5, 0xff, 0xff, 0xc7, 0x9d, 0xf7, 0xfb, 0xc5, 0xf7, 0x21,
-    0xb6, 0xa4, 0xd3, 0x45, 0xb2, 0xc5, 0xc2, 0x0d, 0x62, 0xf8, 0x99, 0xbb,
-    0x58, 0xbe, 0xef, 0xce, 0x12, 0xc5, 0x49, 0xe3, 0x9c, 0x8a, 0xd1, 0x83,
-    0x4d, 0x2b, 0x14, 0x4e, 0xf0, 0x1b, 0x05, 0xff, 0xa6, 0x11, 0x85, 0x91,
-    0x7d, 0xfc, 0xb1, 0x5b, 0x22, 0x24, 0x91, 0xef, 0xff, 0xf3, 0x02, 0x30,
-    0x39, 0xdb, 0x3d, 0x24, 0xe0, 0xce, 0xfc, 0xb1, 0x7e, 0xe3, 0xf4, 0xff,
-    0x45, 0x8b, 0x8b, 0x8b, 0x17, 0xdf, 0xc8, 0x46, 0x49, 0xe2, 0x31, 0x6d,
-    0x62, 0x60, 0xd1, 0x11, 0xfa, 0x15, 0x36, 0x35, 0x62, 0xe3, 0x06, 0xb1,
-    0x51, 0xb9, 0xac, 0xeb, 0x44, 0xef, 0xfb, 0xad, 0x8e, 0xc3, 0x5f, 0xc5,
-    0x2b, 0x17, 0xf4, 0x6c, 0x53, 0xbe, 0x12, 0xc5, 0x84, 0xb1, 0x7f, 0xb2,
-    0x12, 0x6b, 0x71, 0xd6, 0x2f, 0xe2, 0x7d, 0xe7, 0x09, 0x62, 0xdf, 0x58,
-    0xa8, 0xdd, 0x10, 0x71, 0xa0, 0x94, 0x6c, 0x66, 0x22, 0xcb, 0xfb, 0xad,
-    0x2c, 0xfb, 0x79, 0x62, 0xff, 0xdd, 0x73, 0xae, 0x7f, 0x36, 0xcc, 0x23,
-    0x56, 0x2c, 0x12, 0xc5, 0xf6, 0xff, 0x14, 0x7a, 0xc5, 0xf6, 0x1f, 0x09,
-    0x62, 0xec, 0xfa, 0xc5, 0x0c, 0xdc, 0x78, 0x86, 0x96, 0x29, 0xcd, 0x69,
-    0x10, 0xdf, 0xee, 0x61, 0x66, 0x9b, 0xcb, 0x17, 0x9c, 0x80, 0xb1, 0x5c,
-    0x3c, 0xee, 0x86, 0x57, 0x7f, 0x16, 0x2f, 0xce, 0x31, 0x16, 0x2c, 0x5f,
-    0xb0, 0x9c, 0x01, 0xac, 0x54, 0x9f, 0x34, 0x05, 0xf8, 0x4f, 0x7b, 0x35,
-    0x2b, 0x17, 0x87, 0x30, 0x58, 0xbf, 0x0a, 0x60, 0xda, 0x58, 0xba, 0x49,
-    0x8f, 0x16, 0x38, 0x76, 0xff, 0x7e, 0x76, 0xd4, 0xe0, 0xd6, 0x2e, 0xcd,
-    0x96, 0x2f, 0x75, 0x0e, 0x56, 0x2a, 0x4f, 0xb0, 0x8d, 0x04, 0x31, 0x7f,
-    0xed, 0x19, 0x9e, 0xcf, 0xce, 0x80, 0xb1, 0x7f, 0xff, 0xe6, 0x7d, 0xf0,
-    0x8c, 0x86, 0x73, 0xd9, 0xf9, 0x2f, 0x7d, 0xd6, 0x2c, 0xeb, 0x14, 0xe8,
-    0xbc, 0xfa, 0x03, 0x35, 0xdf, 0x4c, 0x27, 0x4b, 0x17, 0xff, 0xe8, 0x38,
-    0xfe, 0xfd, 0x0c, 0xc1, 0xe9, 0xc5, 0xba, 0xc5, 0xed, 0x4e, 0x96, 0x2e,
-    0x93, 0xac, 0x54, 0x9b, 0x4d, 0x0e, 0xd4, 0x6c, 0xb9, 0x4f, 0x22, 0x70,
-    0x84, 0x6e, 0x36, 0xbc, 0x22, 0xb4, 0x5c, 0x76, 0x1f, 0xc2, 0x68, 0xa1,
-    0xd3, 0xc2, 0xef, 0x11, 0x07, 0x08, 0xeb, 0xff, 0xda, 0xf0, 0x1c, 0xa1,
-    0xc9, 0xe9, 0x31, 0xeb, 0x17, 0xa2, 0x9d, 0x96, 0x2f, 0xa4, 0xbd, 0xc5,
-    0x8b, 0x05, 0x27, 0x83, 0xc1, 0xfa, 0x94, 0x5c, 0x64, 0x24, 0x2e, 0x2e,
-    0x2c, 0x5f, 0xfb, 0x9e, 0xcf, 0xc9, 0x7b, 0xee, 0xb1, 0x7f, 0xc2, 0x3f,
-    0xf3, 0xc2, 0x6f, 0x2c, 0x5f, 0xdc, 0x98, 0x99, 0xb4, 0xb1, 0x5c, 0x3e,
-    0x8f, 0x1d, 0x5f, 0xf4, 0xe7, 0x9d, 0xb6, 0x9d, 0x2c, 0x58, 0xeb, 0x16,
-    0x3a, 0xc5, 0x75, 0xa6, 0x90, 0x31, 0x2b, 0xff, 0xf0, 0xf3, 0x46, 0x61,
-    0xc5, 0x3a, 0xd3, 0x8b, 0x75, 0x8a, 0x82, 0x77, 0x58, 0x2e, 0xf0, 0xa6,
-    0x01, 0x17, 0x97, 0x04, 0x4f, 0x77, 0x59, 0xc5, 0x8b, 0xf8, 0x05, 0x9d,
-    0xfb, 0x16, 0x2e, 0xda, 0x3d, 0x62, 0xfd, 0x9c, 0x6d, 0x1a, 0xb1, 0x7f,
-    0xf7, 0x49, 0x1f, 0xb2, 0x5f, 0xd3, 0x12, 0xc5, 0xf1, 0xbf, 0xc0, 0x2c,
-    0x5f, 0xcc, 0x16, 0x7a, 0x77, 0x58, 0xa6, 0x3d, 0x32, 0x24, 0xbe, 0x9d,
-    0xe7, 0xa2, 0xc5, 0xff, 0xff, 0x4e, 0x80, 0x29, 0xcc, 0xfe, 0xef, 0x25,
-    0x39, 0xf1, 0x2c, 0x59, 0xb6, 0x44, 0x49, 0xa4, 0xb7, 0xf1, 0xf3, 0xdc,
-    0x0f, 0x8b, 0x17, 0xb4, 0xc1, 0xac, 0x5c, 0x40, 0xc3, 0xce, 0x63, 0x0b,
-    0x3a, 0xc5, 0xff, 0xd3, 0xe3, 0x3d, 0xfc, 0x26, 0xd1, 0xab, 0x16, 0x9d,
-    0x1e, 0xbf, 0x84, 0x6f, 0xf3, 0x6a, 0x0e, 0x42, 0xd9, 0x62, 0xa3, 0x45,
-    0x64, 0xf2, 0x3b, 0xb1, 0x76, 0x0e, 0x39, 0x4e, 0xa1, 0x33, 0xf8, 0x54,
-    0xb3, 0xc1, 0x42, 0x08, 0x44, 0xf7, 0xfe, 0x07, 0x33, 0xd9, 0x11, 0x49,
-    0xd6, 0x2f, 0xff, 0x18, 0x58, 0xfa, 0x7d, 0x98, 0xe7, 0x75, 0x8b, 0xff,
-    0xf1, 0x67, 0x3e, 0xcf, 0xe9, 0xf7, 0x36, 0xc0, 0x96, 0x2b, 0xe8, 0xa0,
-    0xe8, 0x95, 0x7f, 0xff, 0xf7, 0xd8, 0x64, 0xc6, 0x73, 0xf3, 0xc3, 0x04,
-    0xc6, 0x43, 0x3a, 0x4a, 0xc5, 0xfd, 0x8e, 0x6e, 0xb3, 0x8b, 0x17, 0xf8,
-    0x7f, 0x63, 0x8a, 0x78, 0xb1, 0x7e, 0x63, 0x8a, 0x78, 0xb1, 0x63, 0x4c,
-    0x44, 0x56, 0x17, 0x7c, 0xd2, 0xbe, 0x99, 0xb9, 0x46, 0x01, 0x7f, 0xf8,
-    0xb0, 0xdf, 0xb4, 0x3e, 0x13, 0x06, 0x75, 0x8a, 0x93, 0xf6, 0xc2, 0x9a,
-    0x95, 0x5a, 0x2f, 0x0d, 0xff, 0xc7, 0xa5, 0x7f, 0xef, 0xe6, 0xf9, 0xaf,
-    0x33, 0x1a, 0xb1, 0x7f, 0xe7, 0xd1, 0x9c, 0x2c, 0x3c, 0xee, 0xb1, 0x7f,
-    0x85, 0xe7, 0x6e, 0x8d, 0x05, 0x8b, 0xfe, 0xc0, 0x7d, 0xc0, 0x42, 0xf2,
-    0xc5, 0xfe, 0x29, 0x01, 0x9f, 0x63, 0xac, 0x5f, 0xcd, 0xd0, 0x78, 0x46,
-    0xac, 0x51, 0x23, 0x4b, 0x86, 0xbe, 0x39, 0x0c, 0xd2, 0xff, 0xff, 0xfe,
-    0x72, 0x93, 0x32, 0x1f, 0x9f, 0x71, 0xf9, 0x84, 0x66, 0x13, 0xb1, 0xf0,
-    0xeb, 0x15, 0x28, 0xc2, 0xc3, 0xdb, 0xff, 0xff, 0xfe, 0xfc, 0xeb, 0x6c,
-    0x1b, 0xfb, 0x93, 0xb4, 0xeb, 0x07, 0x8f, 0x25, 0x9d, 0x1f, 0x4c, 0xb1,
-    0x7f, 0xff, 0xe9, 0x2d, 0xdb, 0xcd, 0xd8, 0x0c, 0xc2, 0x79, 0x17, 0xff,
-    0x2b, 0x15, 0x04, 0x7f, 0x82, 0x12, 0x77, 0xec, 0x1f, 0xd8, 0xeb, 0x17,
-    0xff, 0xe0, 0x37, 0x1b, 0x3b, 0xf6, 0x42, 0x41, 0xcc, 0x58, 0xbf, 0xe1,
-    0x40, 0xcc, 0x72, 0x93, 0xac, 0x5f, 0xff, 0x16, 0x6c, 0xfb, 0x99, 0xc9,
-    0x3b, 0x77, 0xe5, 0x8a, 0x1a, 0x61, 0x3d, 0x94, 0x12, 0xaf, 0x8e, 0x6f,
-    0xee, 0x41, 0xf7, 0x6d, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x50, 0x97, 0xf1,
-    0xbc, 0xfc, 0x97, 0x96, 0x2f, 0xff, 0x7b, 0xf8, 0x37, 0xe6, 0x10, 0x24,
-    0xeb, 0x17, 0xff, 0x9f, 0xa6, 0x39, 0x66, 0xa7, 0x79, 0xd2, 0xc5, 0x8e,
-    0xb1, 0x6f, 0x11, 0xee, 0x09, 0x2a, 0x9d, 0x19, 0x82, 0x85, 0x2d, 0xff,
-    0xfb, 0x1f, 0xa1, 0x93, 0xa3, 0x30, 0x66, 0x60, 0x89, 0x62, 0xb1, 0x10,
-    0x0e, 0x4f, 0x7f, 0x98, 0x13, 0x17, 0xc4, 0x05, 0x8a, 0x95, 0x45, 0x5b,
-    0x97, 0xb9, 0x56, 0xa3, 0x7b, 0x11, 0x0d, 0xfa, 0x28, 0x0b, 0xb8, 0x2c,
-    0x5f, 0xff, 0xff, 0x8c, 0xc2, 0x76, 0xf4, 0xee, 0xfa, 0xd9, 0x8c, 0xcd,
-    0x6b, 0x05, 0xe1, 0x1d, 0x62, 0xa5, 0x16, 0x20, 0x2c, 0xbf, 0x7d, 0xe4,
-    0xbc, 0xb1, 0x7f, 0xb8, 0x67, 0x00, 0xd9, 0x12, 0xc5, 0x68, 0xf7, 0x40,
-    0x4f, 0x7f, 0xfb, 0x1e, 0x02, 0xd6, 0x7f, 0xf3, 0x91, 0xeb, 0x17, 0xff,
-    0xf8, 0x8c, 0x92, 0xf6, 0x85, 0xc1, 0x68, 0x1e, 0xf6, 0x7d, 0x62, 0xfc,
-    0xc4, 0x30, 0xfb, 0x58, 0xae, 0xd1, 0x1b, 0xd4, 0xc7, 0x4e, 0x99, 0x17,
-    0xc8, 0x9a, 0x1b, 0x37, 0xf8, 0x18, 0xe3, 0xe1, 0xd9, 0x62, 0xff, 0x1f,
-    0x8f, 0x9d, 0x1b, 0x4b, 0x17, 0x60, 0xd6, 0x2f, 0xff, 0xd9, 0xfc, 0x34,
-    0xcc, 0x19, 0x8e, 0x20, 0x02, 0x56, 0x2f, 0x9c, 0xd6, 0xdd, 0x62, 0xff,
-    0xfb, 0x0e, 0x61, 0x0b, 0x86, 0x73, 0x34, 0xde, 0x58, 0xbf, 0xe1, 0x40,
-    0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xff, 0x1b, 0xa7, 0x9f, 0x45, 0x06, 0x82,
-    0xc5, 0x68, 0xff, 0x44, 0x79, 0x5b, 0xa6, 0x2b, 0xc2, 0x4f, 0x43, 0x3e,
-    0x99, 0x3f, 0x02, 0x35, 0xf0, 0xb8, 0xa3, 0x6d, 0xbe, 0xd6, 0xe2, 0x02,
-    0xc5, 0xfd, 0x84, 0xda, 0xd3, 0xac, 0x53, 0x9e, 0x8f, 0xc9, 0x6f, 0x88,
-    0x4d, 0xb2, 0xc5, 0xf0, 0xba, 0xfe, 0x62, 0xc5, 0x49, 0xe5, 0xb9, 0x1d,
-    0xff, 0x14, 0x1c, 0x07, 0x9e, 0xe0, 0xb1, 0x7f, 0xf7, 0x65, 0x9e, 0xef,
-    0x71, 0x4e, 0xb8, 0xb1, 0x58, 0x88, 0x26, 0x3a, 0xac, 0x4c, 0xbf, 0x8d,
-    0x82, 0x85, 0x15, 0xf6, 0xc5, 0x3b, 0x2c, 0x5f, 0xfd, 0xa7, 0xf1, 0x61,
-    0xa6, 0x3f, 0x47, 0x58, 0xbf, 0xf6, 0x0b, 0x7f, 0xb8, 0xb7, 0x9d, 0x2c,
-    0x5f, 0xff, 0x3e, 0xa6, 0x06, 0x0d, 0xc8, 0xdd, 0x38, 0x4b, 0x15, 0x28,
-    0xfe, 0x72, 0x4f, 0x23, 0xc7, 0x20, 0xdf, 0xff, 0xdb, 0x8a, 0x63, 0xcc,
-    0xc1, 0xfe, 0x4b, 0x73, 0x27, 0x4b, 0x17, 0xff, 0x04, 0x66, 0x74, 0x7f,
-    0x4e, 0x14, 0x16, 0x2f, 0xfd, 0x9f, 0x6f, 0x0a, 0x7e, 0xc7, 0x58, 0xa9,
-    0x44, 0x28, 0x91, 0xef, 0xd9, 0xbb, 0x11, 0xab, 0x17, 0x49, 0xd6, 0x2a,
-    0x0d, 0x83, 0xf0, 0xce, 0xcd, 0x40, 0xde, 0x3d, 0x4e, 0xe3, 0x20, 0x78,
-    0xcc, 0x75, 0x29, 0xa0, 0xf1, 0x81, 0x7e, 0x3a, 0x10, 0x1a, 0x14, 0xa2,
-    0x3e, 0x47, 0x85, 0xe8, 0xcc, 0xc4, 0x7d, 0xd2, 0x1c, 0xe1, 0x91, 0x75,
-    0x14, 0xdf, 0xf9, 0xcc, 0x67, 0xd6, 0x44, 0xc3, 0x58, 0xb9, 0xa5, 0x62,
-    0x86, 0x7a, 0xb1, 0xe7, 0xf7, 0xf8, 0xe3, 0xce, 0xa9, 0xd6, 0xeb, 0x16,
-    0xc5, 0x8b, 0xc6, 0x38, 0x16, 0x2f, 0xff, 0x1e, 0x77, 0x33, 0x7f, 0xbf,
-    0x54, 0x9e, 0x56, 0x2b, 0x0f, 0xb9, 0xc7, 0xaf, 0xfe, 0x13, 0x6d, 0xcc,
-    0x7d, 0xf7, 0xce, 0x8b, 0x15, 0x29, 0x90, 0x40, 0xe3, 0xef, 0xe4, 0x41,
-    0x7b, 0xdf, 0x3a, 0xc5, 0xfc, 0x0c, 0x33, 0x07, 0xb2, 0xc5, 0xbc, 0x61,
-    0xe7, 0x38, 0xf5, 0xfc, 0xfa, 0x6d, 0xdc, 0x96, 0x2b, 0x0f, 0x57, 0xc5,
-    0x17, 0xf7, 0xe7, 0xa1, 0x48, 0x16, 0x2f, 0xff, 0xf4, 0xe8, 0xd3, 0x38,
-    0x42, 0xcf, 0x4c, 0x1c, 0x7f, 0x75, 0x8a, 0x82, 0x2c, 0xb0, 0x87, 0x85,
-    0xf7, 0xc7, 0x66, 0xdd, 0x62, 0xf0, 0x39, 0x8b, 0x17, 0xf8, 0x98, 0x7f,
-    0x7e, 0xf8, 0xb1, 0x7f, 0xb8, 0x28, 0x98, 0x6d, 0x12, 0xc5, 0xfb, 0xc0,
-    0x0c, 0xa0, 0xb1, 0x7f, 0xfe, 0x09, 0xba, 0xb8, 0xfa, 0x8b, 0x92, 0x76,
-    0xef, 0xcb, 0x14, 0xc8, 0x86, 0xe1, 0x55, 0xfd, 0x3b, 0xb9, 0x4c, 0x16,
-    0x2f, 0xfe, 0x39, 0x99, 0xe6, 0xee, 0x02, 0xee, 0x0b, 0x16, 0x8e, 0x58,
-    0xbf, 0xbd, 0x9b, 0x1e, 0x77, 0x58, 0xad, 0x95, 0x06, 0xc0, 0x8f, 0x07,
-    0x7b, 0x34, 0x8a, 0x17, 0x87, 0x22, 0x62, 0xd0, 0x24, 0xf8, 0x56, 0xfc,
-    0x5b, 0x02, 0x43, 0x58, 0xbf, 0xa1, 0x1f, 0x3e, 0x92, 0x58, 0xac, 0x3d,
-    0xae, 0xa2, 0xab, 0xf4, 0x79, 0xe5, 0xf4, 0xb1, 0x7d, 0x87, 0x0e, 0x56,
-    0x2f, 0x75, 0xf1, 0xce, 0xb1, 0x44, 0x79, 0x02, 0x23, 0xa9, 0x44, 0xa3,
-    0xb9, 0xdf, 0xff, 0xbd, 0x3f, 0x33, 0xdf, 0xc3, 0xf8, 0xa4, 0x12, 0xb1,
-    0x74, 0xf1, 0x62, 0xa5, 0x34, 0x68, 0x42, 0xe1, 0xc8, 0x40, 0xad, 0x7e,
-    0x81, 0x49, 0xcd, 0x58, 0xbf, 0xf8, 0xf9, 0xa2, 0xc7, 0xe8, 0xfa, 0x65,
-    0x8b, 0xf6, 0xee, 0x3d, 0xce, 0xb1, 0x7f, 0xff, 0xd8, 0x52, 0x03, 0x33,
-    0x4c, 0x5e, 0xfb, 0x40, 0xcc, 0xd2, 0xc5, 0x3a, 0x24, 0x7e, 0x57, 0x5d,
-    0xa6, 0x40, 0xc5, 0x3e, 0x86, 0xad, 0xff, 0xf6, 0x8c, 0xcf, 0x0a, 0x73,
-    0x6f, 0xe3, 0xc1, 0x62, 0xc3, 0x58, 0xa7, 0x3e, 0x3d, 0x28, 0xdf, 0xff,
-    0x76, 0x09, 0x2f, 0x66, 0x77, 0xe9, 0xde, 0x56, 0x2f, 0xa7, 0xc1, 0xc1,
-    0x62, 0xff, 0xc5, 0x91, 0x7b, 0xf9, 0xa7, 0xe2, 0xc5, 0xff, 0x8e, 0x61,
-    0xdb, 0xc6, 0x7f, 0xda, 0x58, 0xbf, 0xd2, 0x7c, 0x7d, 0x0a, 0x3d, 0x62,
-    0x98, 0xfe, 0x44, 0x87, 0x52, 0x9a, 0x70, 0xd4, 0x7e, 0x48, 0x50, 0xb8,
-    0xbf, 0x8e, 0x26, 0xd9, 0xf6, 0x58, 0xbf, 0xf8, 0x50, 0x84, 0x98, 0x77,
-    0x1e, 0x7d, 0x62, 0xf8, 0x9c, 0xee, 0xb1, 0x52, 0x89, 0x7c, 0x30, 0xed,
-    0x1a, 0xf6, 0xd8, 0x12, 0xc5, 0xec, 0xd7, 0xd6, 0x2d, 0x31, 0xb1, 0xbc,
-    0xdc, 0x7e, 0xfd, 0xcc, 0xdf, 0xee, 0xb1, 0x7d, 0x1c, 0x2e, 0xa9, 0x58,
-    0xa9, 0x57, 0x92, 0x38, 0x4c, 0xe4, 0x6d, 0xef, 0x0d, 0x8d, 0x35, 0xb1,
-    0x60, 0x8a, 0x6f, 0xd9, 0x86, 0xce, 0x96, 0x2f, 0xcd, 0xf3, 0x07, 0x2b,
-    0x17, 0xfd, 0x9f, 0x63, 0xf8, 0x4d, 0xe5, 0x8a, 0x3a, 0x22, 0xbc, 0x51,
-    0x1c, 0x53, 0x7f, 0xde, 0xe0, 0x7c, 0x6e, 0xe1, 0x8b, 0x17, 0x0b, 0xeb,
-    0x17, 0xf4, 0x73, 0x1b, 0x9d, 0xf9, 0x62, 0xf8, 0x01, 0xfa, 0x56, 0x2d,
-    0x08, 0xc3, 0xd7, 0x73, 0x3b, 0xfc, 0xd0, 0x33, 0x82, 0x03, 0x2c, 0x5f,
-    0x4f, 0xe7, 0x65, 0x8b, 0x38, 0xcf, 0x63, 0xe6, 0xb5, 0x29, 0xc3, 0xe1,
-    0x99, 0xcf, 0x19, 0xbc, 0x50, 0x82, 0xbf, 0x71, 0xff, 0x83, 0x58, 0xbf,
-    0x42, 0x7d, 0x9b, 0x2c, 0x54, 0x79, 0xe8, 0xe8, 0xa2, 0xf4, 0xf3, 0x65,
-    0x8b, 0xf8, 0x9b, 0xbf, 0x49, 0x2c, 0x5d, 0xdf, 0x96, 0x2e, 0xf6, 0x2c,
-    0x54, 0x9b, 0x0e, 0xc6, 0x6f, 0xee, 0x39, 0x6f, 0xf9, 0x58, 0xac, 0x47,
-    0x7e, 0xe4, 0xae, 0x3d, 0xa5, 0xdf, 0x10, 0xdf, 0xa1, 0xc2, 0x60, 0x2c,
-    0x5e, 0x8e, 0x7f, 0xac, 0x57, 0x67, 0x90, 0xe5, 0x17, 0xfd, 0xee, 0x6b,
-    0x22, 0xfb, 0x9a, 0xb1, 0x7d, 0xd4, 0x4d, 0x05, 0x8b, 0x85, 0xa5, 0x8a,
-    0xf9, 0xbd, 0xe1, 0x2d, 0x62, 0x26, 0xbc, 0xf3, 0x71, 0x7d, 0x62, 0xfa,
-    0x0c, 0x1c, 0x4b, 0x17, 0xe1, 0x1b, 0xfc, 0xea, 0x58, 0xbf, 0xff, 0xf7,
-    0x46, 0xff, 0xdc, 0xcc, 0x7d, 0xdb, 0x4d, 0xfe, 0xe1, 0x9e, 0x58, 0xbf,
-    0xff, 0xdc, 0x71, 0x75, 0xff, 0x73, 0x33, 0xbf, 0x7c, 0x3e, 0x6d, 0x2b,
-    0x17, 0xe8, 0x48, 0x39, 0x8b, 0x17, 0xfe, 0xc3, 0x39, 0xe2, 0xc0, 0x47,
-    0x62, 0xc5, 0xec, 0xdc, 0xcc, 0x3e, 0xaf, 0x94, 0x54, 0xa6, 0xf2, 0xee,
-    0x1c, 0x86, 0xad, 0x71, 0x3d, 0xaf, 0x47, 0x4d, 0x7f, 0xff, 0x3f, 0x01,
-    0x90, 0x29, 0x03, 0x7f, 0xb8, 0x67, 0x96, 0x2f, 0xfc, 0xfa, 0xd3, 0x41,
-    0xb7, 0x17, 0x6b, 0x17, 0xff, 0x98, 0x79, 0xd2, 0x7f, 0x9a, 0xd3, 0xf4,
-    0x58, 0xad, 0xd1, 0x1c, 0x48, 0x37, 0x80, 0xff, 0x58, 0xbf, 0xec, 0x37,
-    0x0e, 0xf1, 0xd2, 0x75, 0x8b, 0xfd, 0x27, 0x98, 0xc0, 0x82, 0x09, 0x62,
-    0xbb, 0x57, 0x90, 0xf1, 0xff, 0xe8, 0xab, 0xf0, 0xe9, 0x01, 0x19, 0x0e,
-    0xf5, 0x1e, 0x5f, 0xf1, 0x8c, 0x59, 0xd4, 0x67, 0xc4, 0xb1, 0x7e, 0x09,
-    0xf5, 0x86, 0xac, 0x54, 0xaf, 0x14, 0xe4, 0x24, 0x5e, 0x17, 0x91, 0x11,
-    0x34, 0xbd, 0xf1, 0x39, 0x86, 0x7d, 0x7f, 0xfc, 0xdf, 0x32, 0x4c, 0xce,
-    0x93, 0x03, 0x27, 0x4b, 0x17, 0xe1, 0xbf, 0xf0, 0x96, 0x2f, 0xee, 0x38,
-    0xba, 0xf1, 0xca, 0xc5, 0xff, 0x08, 0xb8, 0xe3, 0x30, 0x72, 0xb1, 0x6f,
-    0x39, 0xf6, 0x80, 0xce, 0xe9, 0xed, 0x62, 0xff, 0x07, 0xc3, 0x1b, 0x5a,
-    0x95, 0x8b, 0xff, 0xef, 0x7a, 0x7d, 0xdc, 0x3f, 0x84, 0x68, 0x67, 0x58,
-    0xbf, 0xa7, 0xd8, 0x4d, 0x1e, 0xb1, 0x7e, 0x80, 0x3e, 0xc7, 0x58, 0xbd,
-    0xb6, 0x04, 0xb1, 0x60, 0x18, 0x79, 0x11, 0xb1, 0x4d, 0xff, 0x72, 0x4c,
-    0x7d, 0xa1, 0x3d, 0x6a, 0xc5, 0x0d, 0x54, 0xb6, 0x2a, 0x3c, 0x25, 0x34,
-    0x4e, 0x71, 0x86, 0x36, 0x02, 0xa1, 0x3b, 0xf0, 0xba, 0xe8, 0xdb, 0xad,
-    0x58, 0xbf, 0xf3, 0x16, 0xfe, 0xcf, 0xfb, 0xc2, 0x58, 0xa7, 0x3e, 0x21,
-    0x11, 0x5e, 0x9e, 0x92, 0xb1, 0x7e, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xce,
-    0x5e, 0x0c, 0xeb, 0x15, 0x27, 0xa8, 0x02, 0xbb, 0xe1, 0x6d, 0x30, 0x58,
-    0xa8, 0x1e, 0x2f, 0x08, 0x6f, 0xf1, 0xa6, 0x69, 0xfb, 0xf6, 0x2c, 0x5f,
-    0xed, 0x34, 0x86, 0x39, 0xfa, 0xc5, 0xff, 0x7d, 0xcd, 0x33, 0xb8, 0x67,
-    0x96, 0x2f, 0xef, 0xc9, 0xf0, 0xe0, 0x58, 0xbf, 0xf1, 0x9f, 0xc3, 0x33,
-    0x4d, 0x0c, 0x58, 0xbf, 0x7d, 0xb6, 0x14, 0xac, 0x5a, 0x46, 0x7d, 0x27,
-    0x40, 0xa9, 0x45, 0xf7, 0xe1, 0x2f, 0x7d, 0xed, 0x08, 0xeb, 0x17, 0xce,
-    0x6e, 0x0d, 0x62, 0xf1, 0xb8, 0x35, 0x8b, 0x1c, 0xc3, 0xc1, 0x72, 0x3b,
-    0xf0, 0x9a, 0x19, 0xa5, 0x8a, 0xc3, 0xd0, 0x22, 0x8a, 0x24, 0x6a, 0xfa,
-    0x16, 0xb7, 0xfd, 0x20, 0x3b, 0x42, 0x34, 0xeb, 0x7a, 0xc5, 0x8b, 0x82,
-    0xeb, 0xd6, 0x2f, 0xc1, 0x7c, 0x45, 0xba, 0xc5, 0xfe, 0x2f, 0x73, 0x20,
-    0xff, 0x58, 0xa9, 0x3d, 0xec, 0x2b, 0xa9, 0x44, 0xe7, 0x1f, 0x2f, 0xfa,
-    0x27, 0xd6, 0x0b, 0x76, 0x25, 0x8b, 0xc5, 0x90, 0x58, 0xbb, 0x21, 0x87,
-    0xad, 0xe3, 0xab, 0xf9, 0xa1, 0xa3, 0x58, 0x96, 0x2f, 0xd9, 0xd0, 0xa7,
-    0xb5, 0x8a, 0xfa, 0x21, 0x00, 0x59, 0xc2, 0xeb, 0x85, 0xf5, 0x8a, 0x95,
-    0xcb, 0x28, 0x1b, 0x8c, 0xd3, 0x78, 0x7d, 0xbc, 0x3f, 0x08, 0x9f, 0x90,
-    0xe5, 0xf4, 0x3f, 0x23, 0x8c, 0x2f, 0xff, 0xa4, 0x18, 0x46, 0x37, 0x8c,
-    0xfe, 0x01, 0x96, 0x2e, 0x2d, 0x96, 0x2e, 0x9e, 0x8b, 0x15, 0x2b, 0xbd,
-    0x79, 0x39, 0xa8, 0xf0, 0x96, 0x25, 0x01, 0x0c, 0x5f, 0xff, 0xf7, 0x7b,
-    0x96, 0x74, 0xc1, 0xe6, 0x11, 0x09, 0xb6, 0x9d, 0x2c, 0x5f, 0xe1, 0xe1,
-    0xcc, 0xe3, 0x7d, 0x62, 0xf0, 0xa7, 0x8b, 0x15, 0x88, 0xba, 0x76, 0x8f,
-    0x9a, 0xdd, 0xc8, 0x2c, 0x5f, 0xdc, 0x0f, 0x98, 0x0e, 0x2c, 0x5f, 0xff,
-    0xf7, 0xb4, 0x23, 0x99, 0xa9, 0xfb, 0x9c, 0xb3, 0xc6, 0x4c, 0x16, 0x2f,
-    0xba, 0x16, 0x70, 0xc4, 0x4c, 0xb9, 0x85, 0xff, 0xd2, 0x72, 0x63, 0x4b,
-    0x01, 0xd8, 0x16, 0x29, 0xd1, 0x01, 0xf3, 0xbb, 0xff, 0xa4, 0x1c, 0xc1,
-    0xbe, 0x80, 0x29, 0x58, 0xbf, 0xba, 0x31, 0xfe, 0x13, 0x2c, 0x5f, 0xff,
-    0x4f, 0xb9, 0x3b, 0x19, 0x83, 0x31, 0xcf, 0x2b, 0x17, 0xff, 0x6a, 0x79,
-    0x83, 0xfb, 0xf4, 0xcd, 0x2c, 0x5f, 0xff, 0xbc, 0xdf, 0x8c, 0xe7, 0xf0,
-    0xbc, 0x60, 0x21, 0xc5, 0x8b, 0xff, 0xff, 0xbf, 0xcc, 0x39, 0xe7, 0x46,
-    0xf3, 0x06, 0x58, 0xfa, 0xcf, 0x4a, 0xc5, 0x9e, 0x51, 0x98, 0xcb, 0x77,
-    0xf8, 0x9f, 0x37, 0x9f, 0x71, 0x62, 0xff, 0x9c, 0xba, 0x6d, 0x86, 0xe6,
-    0x96, 0x29, 0xcf, 0xbf, 0x86, 0x75, 0x05, 0x56, 0x3b, 0x91, 0x3a, 0x27,
-    0xcc, 0x40, 0xa4, 0x51, 0x89, 0x7a, 0x12, 0xb7, 0x44, 0x75, 0x8b, 0xfa,
-    0x4e, 0xff, 0x9e, 0xd6, 0x2e, 0x16, 0x96, 0x2b, 0x47, 0x8d, 0xc2, 0xeb,
-    0xfc, 0x26, 0xe6, 0x7d, 0xce, 0xb1, 0x7b, 0xa6, 0x69, 0x62, 0xdc, 0x58,
-    0xbb, 0x52, 0xb1, 0x78, 0x3d, 0x1a, 0xb1, 0x7f, 0xe7, 0xf0, 0xb4, 0xdc,
-    0x80, 0x37, 0x58, 0xa9, 0x45, 0x48, 0xc7, 0xf4, 0x24, 0x71, 0x76, 0x20,
-    0xbb, 0xee, 0xb1, 0x7f, 0x98, 0xb6, 0x6c, 0xef, 0xcb, 0x17, 0xfd, 0x03,
-    0x3d, 0x9a, 0xd3, 0xee, 0xb1, 0x4e, 0x88, 0x73, 0x8b, 0x91, 0xa5, 0xf8,
-    0xfd, 0x6c, 0x6d, 0x9a, 0x58, 0xbe, 0x73, 0x70, 0x6b, 0x17, 0x8d, 0xc1,
-    0xac, 0x5e, 0xf6, 0x1c, 0xc3, 0xc1, 0x72, 0x3b, 0xf4, 0x9f, 0x30, 0x25,
-    0x8a, 0x73, 0xdb, 0x88, 0xce, 0xa5, 0x1e, 0x39, 0x0c, 0xfb, 0xf6, 0x6b,
-    0x8d, 0xa5, 0x8b, 0xff, 0x7d, 0xc8, 0x01, 0xff, 0xed, 0xb2, 0xc5, 0xf9,
-    0xc0, 0x76, 0x82, 0xc5, 0xcf, 0xc5, 0x8a, 0xd8, 0xdf, 0x9c, 0xa2, 0xff,
-    0x67, 0xdc, 0x72, 0x5e, 0x58, 0xbf, 0xb4, 0xc4, 0x00, 0x4a, 0xc5, 0x4b,
-    0x24, 0x6b, 0x62, 0xec, 0x97, 0xc4, 0x6b, 0x83, 0xaf, 0xe8, 0x8b, 0xf0,
-    0xdc, 0x68, 0x67, 0x94, 0x63, 0xfc, 0x26, 0xf1, 0x40, 0xa1, 0x00, 0x11,
-    0x10, 0x66, 0x57, 0xf8, 0xb3, 0xdc, 0x03, 0xf6, 0xb1, 0x7e, 0x2c, 0x19,
-    0x32, 0xc5, 0xfd, 0xa7, 0xf7, 0xdc, 0x6b, 0x15, 0x04, 0x44, 0x61, 0xa6,
-    0x89, 0xaf, 0x85, 0x3c, 0x25, 0x8b, 0xff, 0xf6, 0x77, 0x09, 0xd8, 0xcf,
-    0xcb, 0x93, 0x68, 0xd5, 0x8b, 0xb3, 0xa2, 0xc5, 0xfa, 0x4e, 0xdd, 0xf9,
-    0x62, 0xec, 0xd9, 0x62, 0xff, 0xe1, 0xf3, 0x34, 0x58, 0x0e, 0x66, 0x96,
-    0x2b, 0xe8, 0x9e, 0xe0, 0xcf, 0x8a, 0x44, 0x31, 0x7e, 0xcd, 0xc4, 0xdb,
-    0x2c, 0x56, 0xe9, 0xbf, 0xe8, 0x8b, 0xf0, 0xf6, 0x23, 0xdb, 0xfd, 0x25,
-    0x02, 0xcc, 0x02, 0xc5, 0xff, 0xff, 0xff, 0xc2, 0x98, 0x09, 0x8d, 0x33,
-    0x98, 0x59, 0xd5, 0x30, 0x33, 0x09, 0xe7, 0xee, 0x59, 0xec, 0xe8, 0xb1,
-    0x7f, 0xf8, 0x85, 0xd9, 0x63, 0xeb, 0x7f, 0xcf, 0x16, 0x2d, 0xd7, 0xac,
-    0x56, 0x8f, 0x88, 0x24, 0xbb, 0xff, 0xfb, 0x76, 0xfe, 0x42, 0x75, 0x20,
-    0xd4, 0x86, 0xc4, 0xb1, 0x7f, 0xe9, 0x27, 0x3e, 0x39, 0x49, 0xd6, 0x2f,
-    0xb3, 0xee, 0x35, 0x8a, 0x39, 0xee, 0x80, 0xee, 0xff, 0xf9, 0xa1, 0xc7,
-    0x19, 0x90, 0x71, 0xfc, 0x3e, 0x2c, 0x54, 0xa6, 0xa1, 0x84, 0x6d, 0x0b,
-    0x81, 0x11, 0x5f, 0xfe, 0x1b, 0xce, 0xe1, 0xfd, 0xbb, 0xf7, 0xe5, 0x62,
-    0xff, 0xfd, 0x90, 0xfb, 0x40, 0xcc, 0xf4, 0x73, 0xea, 0x60, 0xb1, 0x7d,
-    0xb3, 0x17, 0x45, 0x8b, 0xb0, 0x25, 0x8b, 0x84, 0x4b, 0x17, 0x81, 0x85,
-    0xb1, 0xaf, 0xf8, 0xc5, 0x62, 0x21, 0x99, 0x52, 0xff, 0xff, 0xfc, 0x67,
-    0xbe, 0xf3, 0xc3, 0x30, 0x5b, 0xcf, 0x43, 0x33, 0x5a, 0xce, 0x82, 0x6f,
-    0xac, 0x5e, 0x86, 0x6c, 0xb1, 0x50, 0x45, 0x4b, 0x42, 0x2e, 0xfb, 0xd1,
-    0xa7, 0x5b, 0xd6, 0x2c, 0x54, 0x9e, 0xd6, 0x13, 0xdf, 0x7c, 0x9b, 0xa9,
-    0x62, 0xe3, 0x09, 0x62, 0xf3, 0xf5, 0x4a, 0xc5, 0x40, 0xdb, 0x9c, 0x62,
-    0xa5, 0x7e, 0x8f, 0x23, 0xae, 0x35, 0x0f, 0x46, 0x3f, 0x94, 0xa8, 0xc8,
-    0x00, 0x4d, 0x28, 0x6f, 0xf2, 0x32, 0x4f, 0x10, 0x09, 0x72, 0xff, 0xf8,
-    0x5c, 0xfc, 0xe4, 0x7e, 0x11, 0x63, 0x81, 0x62, 0xfe, 0xef, 0x8e, 0x79,
-    0xdd, 0x62, 0xf9, 0x86, 0x2e, 0x2c, 0x5f, 0xf3, 0xc7, 0xb7, 0xf3, 0xaa,
-    0x62, 0x58, 0xa9, 0x47, 0x13, 0x28, 0x70, 0xc0, 0x32, 0x3b, 0xc3, 0x3f,
-    0x16, 0x2f, 0xc3, 0x63, 0x7e, 0xeb, 0x15, 0x87, 0x8e, 0x21, 0xeb, 0xf7,
-    0x1f, 0xa6, 0x0d, 0x62, 0xf9, 0xe2, 0x90, 0x2c, 0x59, 0xbe, 0x79, 0xbe,
-    0x2a, 0xbd, 0x99, 0xc5, 0x8b, 0x69, 0x62, 0xf7, 0xb0, 0xeb, 0x15, 0x26,
-    0xbf, 0x04, 0xad, 0xb0, 0xcf, 0xa9, 0x92, 0xef, 0xff, 0xec, 0x21, 0x6c,
-    0x67, 0x30, 0x62, 0xf3, 0xfb, 0xd2, 0xb1, 0x7f, 0x88, 0x4c, 0x7c, 0x2f,
-    0x2c, 0x5e, 0x0e, 0x39, 0x96, 0x2f, 0xff, 0xcf, 0xb7, 0xd9, 0xfd, 0x3f,
-    0x7f, 0x73, 0x06, 0xb1, 0x7f, 0xc6, 0x67, 0xdd, 0xbd, 0xf9, 0x58, 0xa8,
-    0xf4, 0x47, 0x12, 0xad, 0x2c, 0x54, 0xa6, 0xdf, 0x8b, 0xbf, 0x32, 0x68,
-    0x57, 0x86, 0x4b, 0x4c, 0x9f, 0x28, 0xa3, 0x97, 0xb8, 0x1d, 0x6a, 0xc5,
-    0xfb, 0xf3, 0xf7, 0x8f, 0x58, 0xbd, 0xf9, 0xd2, 0xc5, 0xff, 0xf9, 0xc5,
-    0x84, 0x03, 0x33, 0xe2, 0x39, 0xda, 0x0b, 0x15, 0xb9, 0xf9, 0xe8, 0x76,
-    0xf8, 0xe2, 0x2d, 0xd6, 0x2f, 0xfd, 0xd1, 0xa1, 0x84, 0x32, 0x98, 0x2c,
-    0x5f, 0xfb, 0x82, 0x1f, 0xdc, 0xcd, 0xb0, 0x25, 0x8b, 0xb6, 0x95, 0x8a,
-    0xc4, 0x4d, 0x78, 0xfc, 0x48, 0x77, 0xd9, 0xf3, 0xca, 0xc5, 0xf7, 0xc2,
-    0x6d, 0x96, 0x2a, 0x55, 0x09, 0x40, 0x77, 0x50, 0x9e, 0x01, 0x19, 0x42,
-    0xfb, 0x85, 0xfe, 0x22, 0xbc, 0xe1, 0x44, 0xb1, 0x7f, 0xff, 0x7f, 0x71,
-    0x60, 0x0c, 0xcf, 0x71, 0xfc, 0x09, 0xd9, 0x62, 0xff, 0x9b, 0xef, 0xce,
-    0x09, 0x80, 0xb1, 0x43, 0x45, 0xbe, 0x0f, 0xb2, 0xfd, 0xa3, 0x23, 0x77,
-    0xdf, 0xe6, 0xeb, 0x0a, 0xfa, 0xd4, 0x18, 0xd2, 0x16, 0xb1, 0xb2, 0x67,
-    0x5c, 0x32, 0x99, 0xcf, 0x3d, 0xa3, 0x7b, 0x84, 0x7c, 0x03, 0x97, 0x05,
-    0x95, 0x9f, 0x61, 0xb1, 0xc2, 0x6f, 0x1a, 0x2f, 0x71, 0xc8, 0xbc, 0xa3,
-    0xc8, 0xa5, 0x13, 0x6a, 0x74, 0xa8, 0xf2, 0xa0, 0xff, 0x3f, 0x6c, 0xd2,
-    0xc3, 0x01, 0x0e, 0x3e, 0xbc, 0x84, 0xa7, 0xa8, 0xb9, 0x4a, 0x2a, 0xf5,
-    0x24, 0x24, 0x51, 0xc9, 0x74, 0x84, 0x18, 0x4d, 0xd1, 0xd2, 0x9d, 0x83,
-    0x94, 0x77, 0xd5, 0x19, 0x2d, 0xee, 0x80, 0x75, 0x8b, 0xdd, 0x00, 0xeb,
-    0x17, 0xff, 0xfd, 0x07, 0xf3, 0x7d, 0x8e, 0x67, 0x1f, 0x38, 0xdf, 0x63,
-    0xac, 0x5f, 0xec, 0x08, 0xb3, 0xa3, 0x92, 0xc5, 0xe2, 0x70, 0x96, 0x2f,
-    0xf7, 0x1f, 0xd3, 0xfd, 0xdd, 0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x25, 0x41,
-    0x7f, 0xb5, 0x3d, 0x3b, 0x86, 0x79, 0x62, 0xb4, 0x7d, 0x02, 0x31, 0xb7,
-    0x6b, 0x17, 0xf4, 0xfb, 0x9d, 0x30, 0x6b, 0x15, 0x27, 0x86, 0x68, 0x9d,
-    0xfc, 0x2d, 0x03, 0xcd, 0xda, 0xc5, 0xff, 0x67, 0x9b, 0xb3, 0x36, 0xc0,
-    0x96, 0x2f, 0xe7, 0xd4, 0x8b, 0xaf, 0x95, 0x8b, 0xed, 0xd9, 0xb7, 0x54,
-    0x8d, 0x65, 0x1a, 0x7c, 0x7a, 0x32, 0xbf, 0xff, 0xdc, 0x6d, 0x38, 0xde,
-    0x27, 0xdd, 0xb4, 0xc4, 0xc6, 0xac, 0x5e, 0x68, 0x46, 0x62, 0x21, 0x1c,
-    0x8e, 0xff, 0xbf, 0x27, 0xe7, 0x18, 0xb7, 0x58, 0xbe, 0x9d, 0x4f, 0x96,
-    0x2e, 0x6f, 0x2c, 0x50, 0xcd, 0xc9, 0xc8, 0xaf, 0xe1, 0x0f, 0x09, 0xa0,
-    0xb1, 0x7f, 0xbb, 0xe1, 0x3c, 0x86, 0x75, 0x8a, 0x39, 0xf1, 0x31, 0x6d,
-    0xfc, 0x16, 0x7e, 0x19, 0xc5, 0x8b, 0xff, 0x9b, 0xf8, 0x7d, 0xdf, 0xb0,
-    0x73, 0x16, 0x2f, 0xf1, 0x37, 0xb9, 0x17, 0xdd, 0x62, 0xd1, 0x91, 0xb2,
-    0xeb, 0x0f, 0x5c, 0x1f, 0x91, 0xfd, 0x99, 0xa0, 0x68, 0x31, 0xdc, 0x84,
-    0xe1, 0xac, 0xbb, 0x91, 0x68, 0xc0, 0xf1, 0x92, 0x7c, 0xd5, 0x9c, 0xc1,
-    0x08, 0x3e, 0x10, 0x88, 0xbc, 0x34, 0x6b, 0xff, 0x61, 0xcc, 0xf6, 0x47,
-    0xbf, 0x4e, 0x2c, 0x5f, 0xff, 0xe9, 0x1c, 0x7c, 0x82, 0x62, 0x84, 0xf4,
-    0xce, 0xa7, 0x28, 0x96, 0x2c, 0xe3, 0x45, 0x77, 0x11, 0x6f, 0xf3, 0x45,
-    0xc6, 0xf0, 0xa5, 0x62, 0xa3, 0xcf, 0x73, 0x45, 0x17, 0x0a, 0x25, 0x8b,
-    0xcc, 0xdb, 0xaa, 0x4a, 0xc2, 0xfe, 0x8b, 0x8d, 0xe1, 0x4a, 0xc5, 0xb5,
-    0xb9, 0xec, 0xb1, 0x55, 0xff, 0xfe, 0xe9, 0x9d, 0x4e, 0x51, 0x18, 0x53,
-    0xee, 0x64, 0x44, 0xcb, 0x17, 0xf3, 0xe7, 0x51, 0x60, 0x16, 0x2a, 0x08,
-    0x95, 0x1b, 0x35, 0xf7, 0xdf, 0x5c, 0x58, 0xbd, 0xa9, 0x3a, 0xc5, 0xff,
-    0xf9, 0x88, 0xd8, 0xc8, 0x7f, 0x3b, 0x6f, 0x88, 0xb6, 0x58, 0xbc, 0xfe,
-    0xe2, 0xc5, 0xfe, 0x84, 0xeb, 0x69, 0xd6, 0xcb, 0x17, 0xfc, 0xe0, 0x90,
-    0x31, 0x0b, 0x16, 0x2a, 0x4f, 0xb7, 0x0d, 0xaf, 0xfc, 0x43, 0x9e, 0x91,
-    0x3f, 0x42, 0x02, 0xc5, 0xff, 0xce, 0xc0, 0x32, 0x77, 0x11, 0x0c, 0x4b,
-    0x15, 0x28, 0x89, 0xfa, 0x1d, 0xa3, 0x25, 0x5b, 0x3e, 0xc4, 0xb8, 0xe4,
-    0xf0, 0xbd, 0x88, 0x8f, 0x44, 0x67, 0x1d, 0xfa, 0xd9, 0x42, 0x2b, 0xd0,
-    0xa9, 0xbe, 0x2c, 0x17, 0x5e, 0xb1, 0x7f, 0x77, 0xe9, 0xfb, 0x47, 0xac,
-    0x5f, 0x9b, 0xf9, 0xac, 0x58, 0xa9, 0x3d, 0x96, 0x32, 0xbf, 0xbb, 0xe6,
-    0x7e, 0x4e, 0xb1, 0x7f, 0x68, 0x51, 0x72, 0x7c, 0xb1, 0x7f, 0xf3, 0x6c,
-    0x58, 0x76, 0xf7, 0x05, 0x05, 0x8a, 0x94, 0xd1, 0x3f, 0x08, 0x0f, 0x10,
-    0x08, 0xbe, 0x38, 0xc2, 0xff, 0xe0, 0x61, 0x46, 0x40, 0x1c, 0xd9, 0x89,
-    0x62, 0xa3, 0x11, 0x35, 0x2a, 0x57, 0xf0, 0xdc, 0x5e, 0xce, 0x2c, 0x5f,
-    0xce, 0x77, 0xf7, 0xe5, 0x62, 0xfa, 0x62, 0x9e, 0xd6, 0x2b, 0xe7, 0xa3,
-    0xc2, 0xdb, 0xff, 0xf6, 0x85, 0xb0, 0xf4, 0xdb, 0x96, 0x74, 0xd3, 0xf1,
-    0x62, 0xff, 0x3f, 0xe4, 0xe7, 0x68, 0x2c, 0x5f, 0xb5, 0xbb, 0x36, 0xea,
-    0x91, 0x10, 0xbe, 0x60, 0xcd, 0x95, 0x8b, 0xff, 0x67, 0x53, 0xed, 0xde,
-    0x6b, 0x4c, 0xb1, 0x7f, 0x39, 0xf6, 0x16, 0xa0, 0xb1, 0x68, 0xc9, 0x4c,
-    0x07, 0x0c, 0xc4, 0x6f, 0xd0, 0x92, 0x39, 0x0e, 0xe6, 0x3a, 0xc5, 0x40,
-    0xfb, 0xbb, 0x57, 0xbf, 0xb6, 0x9d, 0x7d, 0x9d, 0x62, 0xfe, 0xcf, 0xbc,
-    0x53, 0xe5, 0x8b, 0xfb, 0x85, 0x80, 0x17, 0x16, 0x2d, 0x19, 0x1b, 0xab,
-    0x17, 0xc7, 0xfd, 0x11, 0x34, 0x79, 0x3c, 0x23, 0xf1, 0x70, 0x8b, 0xaf,
-    0xda, 0xdd, 0x9b, 0x75, 0x49, 0xa4, 0x5f, 0xf9, 0xa1, 0x19, 0x9a, 0xdd,
-    0x9b, 0x75, 0x48, 0xfa, 0x5a, 0x33, 0x11, 0x0e, 0x73, 0x7b, 0xff, 0x34,
-    0x23, 0x33, 0x5b, 0xb3, 0x6e, 0xa9, 0x21, 0x0b, 0xf1, 0x37, 0x33, 0xcb,
-    0x16, 0x8c, 0x39, 0xfb, 0xb2, 0x85, 0xff, 0xd8, 0x14, 0x67, 0x8d, 0x6e,
-    0x3f, 0xa5, 0x62, 0xfd, 0xe1, 0x6e, 0xdc, 0x58, 0xba, 0x74, 0xb1, 0x7f,
-    0xf4, 0x9c, 0x5a, 0xdd, 0x9c, 0x73, 0x12, 0xc5, 0x9f, 0x63, 0xdd, 0x88,
-    0x5e, 0x8e, 0x8b, 0x0f, 0xc2, 0x1e, 0xfb, 0x76, 0x6d, 0xd5, 0x24, 0x79,
-    0x7e, 0x93, 0xff, 0x3a, 0x96, 0x2b, 0x47, 0xb9, 0xe3, 0x1b, 0x62, 0xc5,
-    0xfc, 0x2f, 0x1d, 0xc2, 0xe2, 0xc5, 0x0c, 0xf0, 0x48, 0x46, 0xf9, 0xf0,
-    0x1c, 0x58, 0xb9, 0xb7, 0x58, 0xb6, 0x0c, 0xdd, 0x75, 0x11, 0x5f, 0xa7,
-    0x91, 0x14, 0xac, 0x5f, 0xf4, 0xc2, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xff,
-    0xff, 0xfc, 0x1b, 0xea, 0x29, 0xfe, 0xb3, 0xec, 0x1f, 0x30, 0xd6, 0x20,
-    0x49, 0x4c, 0x5f, 0x95, 0x8b, 0xf3, 0x71, 0xfd, 0x2b, 0x17, 0xfd, 0x31,
-    0x49, 0x4c, 0x5f, 0x95, 0x8a, 0x94, 0x78, 0x1b, 0x09, 0x02, 0x27, 0xbe,
-    0x3e, 0xd8, 0x12, 0xc5, 0xff, 0xf8, 0x7f, 0x90, 0xe3, 0x3c, 0x4c, 0x0e,
-    0x72, 0x40, 0x91, 0x52, 0x7f, 0xf8, 0x4b, 0x79, 0xa1, 0x19, 0x2a, 0xe4,
-    0x72, 0x10, 0x91, 0x31, 0xe9, 0x6f, 0xe5, 0x24, 0x51, 0xe8, 0xca, 0xe3,
-    0xa1, 0x67, 0x7f, 0xf6, 0x7e, 0x33, 0xc6, 0xb7, 0x1f, 0xd2, 0xb1, 0x7f,
-    0xff, 0xf3, 0xed, 0x18, 0xfe, 0xc8, 0x89, 0xf9, 0xe9, 0x0d, 0xf5, 0x14,
-    0xfd, 0x62, 0xd1, 0x9b, 0x2e, 0xf0, 0x9e, 0x72, 0x2b, 0xd0, 0x98, 0xea,
-    0x48, 0xa9, 0x85, 0xca, 0xe6, 0xd6, 0xe7, 0xf2, 0x10, 0xf2, 0xc9, 0x60,
-    0x66, 0xdf, 0x02, 0x46, 0xf3, 0xfc, 0x3d, 0xce, 0xbf, 0xbc, 0xa8, 0x18,
-    0xa5, 0x9e, 0x7e, 0x1f, 0xe0, 0x85, 0x17, 0xa7, 0x82, 0xef, 0xff, 0x82,
-    0xdf, 0xac, 0xeb, 0x41, 0xd7, 0xea, 0x34, 0x30, 0xcf, 0xc7, 0x2c, 0x5f,
-    0xff, 0xfb, 0xab, 0xd1, 0xb0, 0xcf, 0x1b, 0x13, 0xf5, 0xd7, 0xdd, 0x7e,
-    0xa3, 0x43, 0x0c, 0xfc, 0x72, 0xc5, 0x7d, 0x30, 0x30, 0x9b, 0xef, 0xfe,
-    0xfc, 0xbe, 0x9f, 0xaf, 0xdf, 0xf2, 0x12, 0xc5, 0xff, 0xfb, 0xae, 0x1b,
-    0xdf, 0x5c, 0xeb, 0x9d, 0x61, 0x1e, 0x35, 0x18, 0x67, 0xe3, 0x96, 0x2f,
-    0xfd, 0xce, 0xbd, 0xcd, 0x30, 0xcf, 0xc7, 0x46, 0x4a, 0x3b, 0x77, 0x25,
-    0xe2, 0x5d, 0xff, 0xff, 0xfe, 0xea, 0xeb, 0xdc, 0xd3, 0x0c, 0xfc, 0x74,
-    0x64, 0xfc, 0x2d, 0xfa, 0xce, 0xb4, 0x1d, 0x7e, 0xa3, 0x43, 0x0c, 0xfc,
-    0x72, 0xc5, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x08, 0x8b, 0xf3, 0xfa, 0x20,
-    0xc6, 0xb1, 0x7f, 0xb8, 0x29, 0x8b, 0xcf, 0xd1, 0x62, 0xd1, 0x98, 0x89,
-    0x9d, 0xcd, 0xe2, 0x2b, 0xbf, 0xb3, 0x5b, 0xb3, 0x6e, 0xa9, 0x0a, 0xcb,
-    0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x5c, 0x17, 0x4f, 0xd6, 0x2e, 0x8f, 0x8c,
-    0xc3, 0xce, 0xe8, 0x6f, 0x51, 0x88, 0xbf, 0x68, 0x45, 0x5f, 0x7d, 0xb4,
-    0xeb, 0x17, 0xef, 0x00, 0x32, 0x82, 0xc5, 0xf8, 0x12, 0x5b, 0xc6, 0x49,
-    0xe6, 0x31, 0x15, 0xd1, 0x47, 0xac, 0x5e, 0x89, 0xfb, 0x58, 0xbf, 0x89,
-    0xf7, 0xf4, 0xc1, 0x62, 0xff, 0xa4, 0x86, 0x22, 0x10, 0x7b, 0x2c, 0x5a,
-    0x33, 0x64, 0x52, 0x60, 0xe6, 0x87, 0xc2, 0x2e, 0xb3, 0xf6, 0x99, 0x58,
-    0x21, 0xc9, 0x7f, 0xba, 0xde, 0xb0, 0xa7, 0x76, 0xed, 0x62, 0xfb, 0x3e,
-    0xde, 0x58, 0xbf, 0xd8, 0xfa, 0x00, 0x05, 0xc5, 0x8b, 0x75, 0xa4, 0x7a,
-    0xdc, 0x22, 0xbf, 0xff, 0xff, 0xdd, 0x64, 0x6f, 0xd6, 0xcf, 0x3f, 0x86,
-    0xe0, 0xcb, 0x36, 0x78, 0x72, 0x47, 0x3f, 0x26, 0x8f, 0x58, 0xbf, 0x1c,
-    0x5d, 0x42, 0xea, 0x58, 0xbf, 0xff, 0xdf, 0xc1, 0x43, 0xf9, 0xd1, 0xa3,
-    0xd8, 0xbd, 0xfc, 0x82, 0xc5, 0xf9, 0xc6, 0x22, 0xc5, 0x8b, 0xf8, 0x53,
-    0xa6, 0xcf, 0xac, 0x5f, 0xf4, 0x96, 0xed, 0xf6, 0x21, 0xac, 0x5f, 0xa7,
-    0xcc, 0x58, 0xb1, 0x7f, 0x4f, 0xf3, 0x4e, 0x75, 0x8a, 0x82, 0x37, 0xc6,
-    0x4e, 0x69, 0x6e, 0x8e, 0x08, 0x9a, 0xfd, 0xf7, 0xe9, 0x91, 0x2c, 0x5f,
-    0xff, 0xa7, 0x63, 0xbc, 0x30, 0x5b, 0x96, 0x6d, 0xa9, 0x58, 0xa8, 0x91,
-    0x05, 0xa2, 0xbb, 0xf1, 0x37, 0xa7, 0x75, 0x8b, 0xff, 0xf7, 0x1f, 0xec,
-    0xf0, 0x72, 0xf0, 0xbf, 0xac, 0x58, 0xbf, 0xc7, 0xe3, 0xc7, 0x66, 0xa5,
-    0x62, 0xff, 0xa7, 0xaa, 0x7e, 0xe5, 0x27, 0x58, 0xac, 0x3f, 0x02, 0x36,
-    0xad, 0x95, 0xb8, 0x40, 0xc1, 0xe3, 0x44, 0xd4, 0x33, 0x38, 0x49, 0xe2,
-    0x8e, 0xa8, 0x62, 0x5d, 0xc7, 0x58, 0xbe, 0xc3, 0xcc, 0x16, 0x2e, 0xc0,
-    0x80, 0x6e, 0x48, 0x5e, 0xdc, 0x58, 0xbd, 0xe2, 0x95, 0x8b, 0x02, 0x4d,
-    0x77, 0x04, 0xaf, 0xe1, 0x1e, 0x7a, 0x3f, 0x45, 0x8b, 0xfb, 0x93, 0x13,
-    0x36, 0x96, 0x2b, 0x87, 0xc1, 0xe3, 0x2a, 0x94, 0x54, 0x3c, 0x21, 0xaf,
-    0xff, 0xff, 0x0d, 0xe0, 0xfa, 0xd8, 0x40, 0xfe, 0x6f, 0x27, 0x79, 0xe9,
-    0x82, 0xfa, 0xc5, 0xf6, 0x1d, 0xbc, 0xb1, 0x7f, 0x31, 0xa1, 0x36, 0xb8,
-    0xb1, 0x52, 0x8c, 0xdf, 0xbd, 0xb1, 0x15, 0xff, 0xfb, 0xf8, 0x58, 0x6f,
-    0xda, 0x1f, 0x09, 0x83, 0x3a, 0xc5, 0xfe, 0x93, 0xfb, 0xf9, 0xd3, 0x16,
-    0x2f, 0x9f, 0x7c, 0xd2, 0xc5, 0xff, 0xc3, 0x90, 0x0d, 0x98, 0x21, 0xe1,
-    0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x4f, 0x15, 0xb2, 0x24, 0x46, 0x47, 0xba,
-    0x25, 0xe9, 0x2f, 0x2c, 0x5f, 0xfa, 0x7a, 0x16, 0x73, 0x09, 0xce, 0xb1,
-    0x79, 0xf5, 0xf7, 0x3d, 0xa6, 0x1c, 0xbf, 0xe6, 0x3f, 0x1f, 0x3a, 0x36,
-    0x96, 0x2f, 0xfc, 0x53, 0xd1, 0xfd, 0x09, 0xc2, 0x58, 0xa8, 0x2a, 0x53,
-    0x89, 0x63, 0x50, 0xc6, 0xfc, 0x23, 0x08, 0xc7, 0xc7, 0x57, 0xf8, 0x60,
-    0x32, 0x63, 0xe6, 0x0b, 0x17, 0xf8, 0xee, 0x31, 0x36, 0xa0, 0xb1, 0x71,
-    0xdd, 0x62, 0xa4, 0xf2, 0xf7, 0x34, 0xbf, 0xff, 0xa7, 0xdc, 0x11, 0xf7,
-    0x70, 0x4e, 0x7d, 0xc5, 0xba, 0xc5, 0xcf, 0xc5, 0x8b, 0xfa, 0x4f, 0xc9,
-    0x7d, 0x96, 0x2a, 0x08, 0xa2, 0xc5, 0xdf, 0x0b, 0xdf, 0xff, 0xcd, 0xa6,
-    0xff, 0x70, 0xcf, 0x61, 0x0b, 0xc2, 0x35, 0x62, 0xfa, 0x13, 0x9b, 0x2c,
-    0x5f, 0xff, 0xb4, 0x2d, 0x6a, 0x4b, 0x0d, 0x7f, 0xff, 0x03, 0x58, 0xb0,
-    0xd6, 0x2e, 0x7e, 0x8b, 0x16, 0x75, 0x8a, 0xdd, 0x31, 0x3e, 0xd7, 0x74,
-    0x46, 0x75, 0x70, 0x09, 0x74, 0x19, 0xbc, 0x79, 0xdd, 0x62, 0xe2, 0xf2,
-    0xc5, 0x61, 0xb5, 0x71, 0xeb, 0xe3, 0x8c, 0x78, 0xb1, 0x7f, 0x9c, 0x4c,
-    0x09, 0x28, 0x2c, 0x53, 0x9e, 0xae, 0x88, 0xef, 0xff, 0xfb, 0xef, 0xaf,
-    0xb1, 0x30, 0xe7, 0xc5, 0x80, 0xe6, 0x0d, 0x62, 0xf6, 0xd3, 0xba, 0xc5,
-    0xfc, 0x3c, 0x87, 0xe7, 0x75, 0x8b, 0xff, 0x30, 0xe7, 0x0b, 0xdc, 0x92,
-    0x58, 0xac, 0x47, 0x73, 0xb2, 0x30, 0xf9, 0x17, 0xde, 0x0c, 0x01, 0x2c,
-    0x5f, 0x00, 0x3f, 0x4a, 0xc5, 0xa1, 0x18, 0x7f, 0xb8, 0x72, 0xe4, 0x17,
-    0x4f, 0x6b, 0x17, 0x8f, 0x3b, 0xac, 0x5c, 0xfe, 0xd8, 0xdb, 0x60, 0xc5,
-    0x32, 0x26, 0x04, 0xd9, 0x7e, 0x0c, 0x83, 0xef, 0x8b, 0x17, 0x89, 0xc0,
-    0xb1, 0x43, 0x3c, 0x83, 0x96, 0x5a, 0x39, 0x62, 0xff, 0x36, 0xc3, 0x13,
-    0x6a, 0x0b, 0x17, 0xd2, 0x76, 0x25, 0x8a, 0xd1, 0xeb, 0x11, 0xad, 0xff,
-    0xb8, 0x2d, 0x3b, 0x38, 0xe4, 0x96, 0x2f, 0xf4, 0x9e, 0x63, 0x02, 0x08,
-    0x25, 0x8a, 0x73, 0xf7, 0xea, 0x3d, 0xa9, 0x4d, 0x27, 0x72, 0x27, 0x6b,
-    0x68, 0x4c, 0x5f, 0xce, 0x3c, 0x38, 0xbc, 0xb1, 0x7f, 0xd8, 0x40, 0x93,
-    0xbe, 0xa0, 0xb1, 0x7f, 0x9f, 0x8e, 0x2e, 0xbc, 0x72, 0xb1, 0x50, 0x3f,
-    0x0f, 0x1c, 0x5e, 0x83, 0x81, 0x62, 0xec, 0xed, 0x62, 0xda, 0x93, 0x6b,
-    0x83, 0xb7, 0xff, 0xc7, 0xc7, 0xf0, 0xbd, 0x30, 0x71, 0xe0, 0xd6, 0x2f,
-    0xfb, 0x3a, 0x39, 0x68, 0x52, 0x4b, 0x15, 0x04, 0xe8, 0x9e, 0x13, 0xda,
-    0x57, 0x01, 0x29, 0x27, 0xdf, 0xb5, 0xb4, 0xeb, 0x65, 0x8b, 0xf3, 0x97,
-    0x83, 0x3a, 0xc5, 0x49, 0xea, 0x00, 0xae, 0xff, 0x6a, 0x67, 0xdc, 0x7e,
-    0x8b, 0x17, 0xf4, 0xec, 0xc3, 0x6f, 0x2c, 0x54, 0x11, 0x08, 0x72, 0x1e,
-    0xa3, 0x5b, 0xf4, 0x9f, 0x70, 0x12, 0xc5, 0xf3, 0x3c, 0x74, 0xac, 0x5f,
-    0x18, 0x4d, 0x05, 0x8b, 0xf3, 0x67, 0xdc, 0xeb, 0x15, 0x12, 0x25, 0xce,
-    0x53, 0xc2, 0x4e, 0x84, 0x77, 0x4f, 0x52, 0xc5, 0x4a, 0x64, 0x99, 0x0c,
-    0xa8, 0x90, 0x2f, 0xff, 0x40, 0xb0, 0x5e, 0x9f, 0x61, 0x02, 0x56, 0x2f,
-    0xe7, 0xf3, 0x1b, 0xf7, 0x58, 0xbf, 0xfe, 0x13, 0x6a, 0x1b, 0xfd, 0xc7,
-    0xa7, 0x16, 0xcb, 0x17, 0xfd, 0x3b, 0xfd, 0x9e, 0x3a, 0x74, 0xb1, 0x7e,
-    0x7e, 0xe0, 0xfb, 0x2c, 0x5f, 0xe6, 0x39, 0x83, 0xfb, 0x9d, 0x62, 0x8e,
-    0x89, 0xbf, 0x9e, 0x74, 0x2a, 0xbf, 0xe2, 0x93, 0xcc, 0x0b, 0x0e, 0xb1,
-    0x7f, 0xe2, 0x60, 0xbd, 0x9f, 0x67, 0x89, 0x62, 0xf6, 0xd3, 0xda, 0xc5,
-    0xf8, 0x8a, 0x76, 0xd2, 0xc5, 0xff, 0xd3, 0xad, 0xa7, 0xbc, 0x17, 0x5f,
-    0x83, 0x58, 0xad, 0x91, 0x24, 0xe3, 0xe7, 0x28, 0xbf, 0xfd, 0x9e, 0x10,
-    0x0e, 0xd0, 0x33, 0x4d, 0xc5, 0x8b, 0xff, 0x7d, 0xc8, 0x01, 0xff, 0xed,
-    0xb2, 0xc5, 0xf7, 0xa1, 0x26, 0xac, 0x54, 0xab, 0x7f, 0x82, 0x40, 0xcb,
-    0xb2, 0x1d, 0xce, 0x65, 0x11, 0xbb, 0x43, 0x44, 0x8c, 0x3c, 0x98, 0x1a,
-    0x0d, 0xfd, 0xb6, 0xb3, 0xdf, 0x75, 0x8b, 0xfd, 0x25, 0x02, 0xcc, 0x02,
-    0xc5, 0xf6, 0x39, 0x44, 0xb1, 0x7d, 0xe8, 0xd3, 0xad, 0xeb, 0x16, 0x2f,
-    0x6a, 0x76, 0x58, 0xac, 0x3d, 0x17, 0x33, 0xac, 0x47, 0x99, 0xa5, 0xfb,
-    0x98, 0xf1, 0xce, 0xff, 0x16, 0xf9, 0xd3, 0x3d, 0xc5, 0x8b, 0xf0, 0xc5,
-    0x3a, 0xd9, 0x62, 0xff, 0xfb, 0xc0, 0x98, 0x67, 0x47, 0xf4, 0xe1, 0x41,
-    0x62, 0xe6, 0x35, 0x62, 0xa5, 0x19, 0x18, 0x6c, 0xe5, 0x5a, 0x50, 0xbd,
-    0xef, 0xba, 0xc5, 0xda, 0x12, 0xc5, 0xd3, 0xc5, 0x8b, 0xec, 0xf6, 0x1d,
-    0x62, 0xdb, 0x49, 0xe8, 0x8c, 0x61, 0x85, 0xeb, 0x11, 0x44, 0xcd, 0xd7,
-    0xf6, 0x81, 0xc7, 0x1b, 0xac, 0x5f, 0x7c, 0x26, 0xd9, 0x62, 0xa4, 0xf4,
-    0xfc, 0x5d, 0x7c, 0x22, 0x8f, 0x35, 0x62, 0xfc, 0x50, 0x9f, 0xca, 0xc5,
-    0x39, 0xe7, 0x08, 0x9e, 0xa3, 0x46, 0xf8, 0x3e, 0x36, 0x84, 0xaf, 0x5c,
-    0x2c, 0x99, 0xc1, 0x0d, 0xa1, 0x65, 0x08, 0xc0, 0x87, 0x0f, 0x3c, 0x95,
-    0x02, 0x6b, 0x1e, 0xf0, 0x83, 0xee, 0x18, 0x8f, 0x1a, 0x14, 0x50, 0x91,
-    0xd3, 0xa1, 0xe5, 0x12, 0x7e, 0x3b, 0x36, 0x8f, 0x8c, 0xa5, 0x25, 0x72,
-    0x5d, 0xa7, 0xa3, 0x87, 0xe9, 0x18, 0x34, 0x74, 0x37, 0x03, 0x74, 0xea,
-    0x6f, 0xbe, 0x88, 0x85, 0xb2, 0xc5, 0xff, 0xbe, 0xff, 0x9c, 0xd4, 0x0f,
-    0x1e, 0xb1, 0x7f, 0x3f, 0x42, 0xce, 0x46, 0x61, 0xf3, 0xee, 0x4b, 0x7f,
-    0x67, 0xb9, 0x8d, 0x1e, 0xb1, 0x7f, 0x30, 0x5c, 0xe4, 0x81, 0x62, 0xa4,
-    0xf7, 0xc8, 0xc2, 0xfd, 0xe0, 0xf6, 0x17, 0x5e, 0xb1, 0x7e, 0x8e, 0x90,
-    0x37, 0x96, 0x2d, 0xb2, 0xc5, 0xe6, 0x84, 0x60, 0xd1, 0x1f, 0x84, 0x0e,
-    0x62, 0x11, 0x5d, 0xff, 0xe0, 0x00, 0x5c, 0x8c, 0x0c, 0x98, 0xe5, 0x2b,
-    0x17, 0xff, 0xfe, 0xf7, 0x04, 0x3f, 0xbc, 0x67, 0x84, 0xc4, 0x0e, 0x07,
-    0x3a, 0x02, 0xc5, 0xff, 0xc5, 0x80, 0x62, 0x04, 0x61, 0xdc, 0xeb, 0x15,
-    0xa4, 0xc1, 0x89, 0x3b, 0xce, 0x57, 0xfc, 0x14, 0x61, 0x64, 0x50, 0x17,
-    0x96, 0x2f, 0xcf, 0xae, 0x08, 0xeb, 0x17, 0xf1, 0x33, 0xff, 0x38, 0xb1,
-    0x7d, 0xf7, 0xe4, 0x61, 0xcf, 0x57, 0x85, 0x35, 0x28, 0xd0, 0xde, 0x12,
-    0x97, 0xff, 0xf4, 0xef, 0x19, 0xf6, 0xde, 0x40, 0xda, 0x6f, 0x41, 0x96,
-    0x2f, 0xff, 0x77, 0xc8, 0xce, 0x16, 0x74, 0x92, 0xf7, 0x16, 0x2f, 0xff,
-    0xff, 0x3c, 0x30, 0xa3, 0x0b, 0x37, 0x2c, 0xdb, 0x85, 0x9e, 0xf3, 0x83,
-    0x8b, 0x17, 0xff, 0x0b, 0xd0, 0x70, 0x46, 0x78, 0xd7, 0x25, 0x8b, 0xfd,
-    0x3f, 0x73, 0xb9, 0x41, 0x62, 0xfc, 0xdf, 0xfb, 0xc4, 0xb1, 0x7f, 0xf6,
-    0x71, 0xc8, 0x05, 0x9e, 0xfe, 0x2c, 0x5f, 0xf9, 0xc8, 0x05, 0x9e, 0xfe,
-    0x46, 0x69, 0x13, 0xbf, 0x32, 0x0c, 0xa6, 0xa3, 0x19, 0x0b, 0x10, 0x94,
-    0x62, 0x38, 0xcd, 0x9e, 0x35, 0x6d, 0x46, 0x00, 0x72, 0x86, 0x5f, 0x02,
-    0x81, 0x3c, 0xf2, 0x1c, 0xd7, 0xf6, 0x77, 0x01, 0x30, 0xd6, 0x2e, 0xec,
-    0x0b, 0x15, 0xb1, 0xe4, 0x11, 0x7d, 0xb1, 0x62, 0xfc, 0x52, 0x2e, 0xbf,
-    0x8b, 0x17, 0x3f, 0xd6, 0x2f, 0xff, 0x98, 0x66, 0xb7, 0xb3, 0xe5, 0x9e,
-    0xfb, 0xac, 0x5f, 0xc6, 0xe9, 0x86, 0xc4, 0xb1, 0x52, 0x8f, 0x41, 0x91,
-    0x60, 0x8e, 0x8b, 0x7e, 0x2e, 0xc9, 0xf7, 0xff, 0x38, 0xf4, 0xdd, 0xc6,
-    0x6b, 0x53, 0xb2, 0xc5, 0x46, 0x22, 0x7b, 0xea, 0x96, 0x95, 0x8b, 0xfb,
-    0x93, 0xb9, 0x48, 0xd6, 0x28, 0x66, 0xfd, 0xc4, 0x6f, 0x9b, 0xb1, 0xca,
-    0xc5, 0xff, 0xf4, 0xeb, 0x20, 0xed, 0xec, 0x1b, 0x8b, 0x74, 0x8b, 0x85,
-    0xda, 0xc5, 0x7c, 0xfa, 0x09, 0x3e, 0xf3, 0x83, 0x8b, 0x16, 0xdd, 0x62,
-    0xfd, 0x30, 0x00, 0xa0, 0xb1, 0x7d, 0xbb, 0x36, 0xea, 0x92, 0xcc, 0xba,
-    0x42, 0x58, 0xad, 0x91, 0x45, 0x83, 0xb1, 0x09, 0xe8, 0xa7, 0xa1, 0x8d,
-    0xe3, 0x72, 0x3d, 0x62, 0xfb, 0xce, 0x7e, 0x2c, 0x5b, 0x4b, 0x16, 0x35,
-    0x62, 0x9c, 0xd2, 0xf0, 0x4a, 0xe1, 0x76, 0xb1, 0x7b, 0x82, 0xdd, 0x62,
-    0x8d, 0x3d, 0x8d, 0xc8, 0x38, 0x33, 0x7e, 0xf1, 0xaf, 0xdf, 0x16, 0x2c,
-    0x1a, 0xc5, 0xff, 0x4e, 0xc5, 0x9d, 0x34, 0xfc, 0x58, 0xbd, 0xa9, 0xe8,
-    0xb1, 0x52, 0x7d, 0xb0, 0x13, 0xe1, 0xdd, 0xfd, 0xd0, 0x8a, 0x63, 0xe2,
-    0x58, 0xbf, 0x1e, 0x4a, 0x1c, 0x58, 0xba, 0x62, 0x58, 0xa9, 0x3f, 0x3d,
-    0x8c, 0xf4, 0x51, 0x7d, 0xee, 0x07, 0xc5, 0x8b, 0xee, 0x72, 0x42, 0x58,
-    0xbf, 0xfc, 0xde, 0xe7, 0x9f, 0xbe, 0x74, 0xf6, 0xc4, 0xb1, 0x66, 0x58,
-    0xac, 0x45, 0x4b, 0x92, 0x91, 0x27, 0x13, 0xee, 0xd9, 0xd6, 0x2f, 0x73,
-    0xe2, 0x58, 0xbe, 0x60, 0xbe, 0x25, 0x8b, 0xfa, 0x27, 0x2f, 0xe7, 0x6b,
-    0x15, 0x87, 0xe2, 0x71, 0xee, 0x12, 0x5f, 0xb9, 0xf0, 0xa4, 0x6b, 0x15,
-    0x28, 0xe1, 0xc8, 0x44, 0xb1, 0x75, 0xcd, 0xe5, 0x8b, 0xe0, 0x06, 0x50,
-    0x5a, 0x0a, 0x19, 0xbf, 0xf0, 0xbd, 0xff, 0xf4, 0x9f, 0xd9, 0x85, 0xee,
-    0x7f, 0x00, 0xcb, 0x17, 0xf8, 0xf3, 0xdf, 0x35, 0x3d, 0x16, 0x2e, 0x16,
-    0xcb, 0x16, 0xe2, 0xc5, 0xcd, 0x12, 0xc5, 0xdf, 0x89, 0x62, 0xbc, 0x6c,
-    0x44, 0x31, 0x4c, 0x7c, 0x9e, 0x43, 0xa9, 0x46, 0xa9, 0x1b, 0x89, 0xf6,
-    0xfe, 0x71, 0x47, 0xc6, 0x80, 0x3a, 0xc5, 0xf7, 0x98, 0x12, 0xb1, 0x50,
-    0x3d, 0x9e, 0xcd, 0xef, 0xc5, 0x3f, 0x7c, 0x58, 0xba, 0x60, 0xb1, 0x58,
-    0x7c, 0x0c, 0x46, 0x02, 0x6b, 0xbb, 0xf2, 0xc5, 0xed, 0x03, 0x8b, 0x18,
-    0x5c, 0xdf, 0x48, 0x26, 0x0b, 0x16, 0x75, 0x8b, 0xc4, 0xde, 0x58, 0xe1,
-    0x63, 0x6c, 0x81, 0xef, 0x11, 0x9d, 0xe1, 0x40, 0x6b, 0x14, 0xe8, 0xce,
-    0xfc, 0x22, 0x88, 0x9a, 0xfd, 0x17, 0xdc, 0xb6, 0x58, 0xbe, 0xf7, 0xe7,
-    0xa2, 0xc5, 0x76, 0x79, 0xe4, 0x55, 0x79, 0x98, 0xeb, 0x17, 0xfb, 0x35,
-    0xf9, 0xef, 0xd8, 0xb1, 0x7e, 0x6d, 0x80, 0xfe, 0x58, 0xbe, 0x8b, 0x61,
-    0x01, 0x62, 0xff, 0xce, 0x42, 0x86, 0x73, 0x6c, 0x09, 0x62, 0xb0, 0xf9,
-    0xbc, 0x4d, 0x7f, 0x7a, 0x74, 0x09, 0x89, 0x62, 0xa5, 0x96, 0xb9, 0x02,
-    0x01, 0xc2, 0x2f, 0x21, 0x86, 0x6a, 0x6f, 0x64, 0x2f, 0x0a, 0x08, 0xf3,
-    0x18, 0xa1, 0x31, 0xa8, 0x50, 0x9e, 0x1b, 0x1f, 0x8c, 0x6d, 0x9c, 0x40,
-    0x42, 0x51, 0x91, 0xf2, 0x1c, 0xfe, 0x8c, 0x50, 0x50, 0x82, 0xe8, 0x44,
-    0x10, 0xe4, 0x71, 0xa0, 0x70, 0x8f, 0xea, 0x21, 0xbf, 0xff, 0xfa, 0x37,
-    0x8d, 0x66, 0x19, 0xf8, 0xe8, 0xc8, 0x46, 0xb8, 0xf8, 0x4f, 0x58, 0x33,
-    0x0c, 0xfc, 0x72, 0xc5, 0xff, 0xfc, 0x53, 0xdc, 0x3f, 0x3a, 0xdb, 0x98,
-    0x2d, 0xc5, 0xda, 0xc5, 0xff, 0xf3, 0xf8, 0x98, 0x1c, 0x33, 0xb8, 0x4b,
-    0x41, 0x62, 0xf4, 0x82, 0x30, 0x68, 0xb1, 0x35, 0x82, 0xa3, 0x15, 0x84,
-    0x4c, 0x70, 0x45, 0x1a, 0x75, 0xfb, 0x0e, 0x1c, 0xc7, 0xac, 0x5f, 0xdc,
-    0xe4, 0x80, 0x3d, 0x96, 0x2a, 0x07, 0xbb, 0x85, 0x97, 0xfb, 0xcd, 0xad,
-    0xa5, 0xc6, 0xb1, 0x7f, 0x7b, 0x83, 0x79, 0x25, 0x8a, 0x73, 0xe1, 0x63,
-    0x4b, 0xfa, 0x42, 0xf1, 0xad, 0xc5, 0x8b, 0xfa, 0x4f, 0xb0, 0xb5, 0x05,
-    0x8b, 0xed, 0x60, 0x5e, 0x58, 0xaf, 0xa2, 0x90, 0x88, 0x3c, 0x61, 0xd0,
-    0xc2, 0xff, 0x6d, 0xfc, 0xdf, 0xf3, 0xa5, 0x8b, 0xfe, 0x92, 0x87, 0x0e,
-    0xc4, 0x6a, 0xc5, 0x49, 0xf7, 0xf8, 0xda, 0xe9, 0x1a, 0xc5, 0xff, 0x08,
-    0xf9, 0xbe, 0xbb, 0x60, 0x96, 0x2a, 0x07, 0xeb, 0xc2, 0x1f, 0x0b, 0xdf,
-    0xed, 0x49, 0xb8, 0x4e, 0x6a, 0xc5, 0xff, 0xf3, 0x36, 0xdf, 0x79, 0x28,
-    0x3f, 0xdb, 0x8b, 0x17, 0xf4, 0x35, 0xa9, 0x3f, 0x16, 0x2f, 0xf3, 0xe8,
-    0x31, 0xfe, 0x60, 0xb1, 0x71, 0xe5, 0x62, 0x86, 0x7f, 0x6c, 0x5f, 0xd4,
-    0x6b, 0x7f, 0xfc, 0x3f, 0xcf, 0x0c, 0xc7, 0xd3, 0x9e, 0x4d, 0x58, 0xb4,
-    0xac, 0x5a, 0x56, 0x2b, 0x0f, 0xcf, 0x8a, 0x22, 0x11, 0xbf, 0xf4, 0x32,
-    0x3d, 0x88, 0x1b, 0x60, 0x4b, 0x17, 0x89, 0xbc, 0xb1, 0x7e, 0xce, 0xc1,
-    0x3f, 0x58, 0xbf, 0xf8, 0x20, 0xce, 0x59, 0xdf, 0xa7, 0x02, 0x58, 0xbc,
-    0x39, 0x02, 0xc5, 0xff, 0x3c, 0x1f, 0xe2, 0x39, 0xdd, 0x62, 0xa5, 0x13,
-    0xc3, 0x48, 0xf0, 0xed, 0xfb, 0xce, 0x58, 0x75, 0x8b, 0xcc, 0x51, 0x83,
-    0x5d, 0xc2, 0xc8, 0xc9, 0xbb, 0x8c, 0x8b, 0x45, 0xe7, 0x34, 0xfc, 0x32,
-    0x4a, 0x14, 0x9e, 0x2e, 0xe8, 0x87, 0x1c, 0x38, 0x1c, 0x31, 0xfa, 0x8b,
-    0xef, 0x1f, 0xb9, 0x58, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58, 0xbf, 0x72,
-    0x40, 0x1e, 0xcb, 0x15, 0x11, 0xed, 0xf0, 0xc2, 0xa5, 0x13, 0x98, 0xf3,
-    0x7f, 0xc5, 0xef, 0xe4, 0x1c, 0x18, 0xb1, 0x7b, 0x93, 0xda, 0xc5, 0xb8,
-    0xb1, 0x74, 0xc7, 0xac, 0x53, 0x1a, 0xce, 0x09, 0x5f, 0xf8, 0x45, 0xef,
-    0xe7, 0x53, 0x83, 0x16, 0x2f, 0xfb, 0x3d, 0xfc, 0x83, 0x83, 0x16, 0x2f,
-    0xe7, 0xc0, 0x37, 0x6e, 0xb1, 0x7f, 0xef, 0x3c, 0x1f, 0xe2, 0x39, 0xdd,
-    0x62, 0xf3, 0x05, 0x18, 0x34, 0xea, 0x30, 0x87, 0xb3, 0x8d, 0x25, 0x1c,
-    0x80, 0x90, 0x7c, 0x70, 0x19, 0x6d, 0x41, 0x5d, 0x49, 0x4b, 0x22, 0xbf,
-    0xf3, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91, 0x14, 0xbf, 0xd3, 0xee,
-    0x16, 0x74, 0x65, 0x8b, 0xfb, 0xc6, 0xe0, 0xdf, 0xb5, 0x8b, 0x87, 0x18,
-    0x03, 0xe4, 0xe8, 0x69, 0x7f, 0xfd, 0xfc, 0x28, 0xcf, 0x33, 0x77, 0xc3,
-    0x4d, 0x65, 0x8a, 0xc4, 0x44, 0x78, 0xce, 0xfc, 0xfa, 0x7f, 0x09, 0x62,
-    0xf7, 0x50, 0xb6, 0x58, 0xbc, 0xde, 0x8c, 0x93, 0xca, 0xea, 0x28, 0xa8,
-    0xc4, 0xf8, 0x26, 0x33, 0xc6, 0x6c, 0xbf, 0xed, 0x69, 0xc2, 0xc8, 0x9c,
-    0xeb, 0x17, 0xdb, 0xcf, 0xe5, 0x62, 0x9c, 0xf7, 0x88, 0xee, 0xfd, 0xad,
-    0xd9, 0xb7, 0x54, 0x99, 0x25, 0xb8, 0xb1, 0x52, 0x7d, 0x38, 0x40, 0x73,
-    0x7b, 0xfa, 0x05, 0x3f, 0x63, 0xac, 0x5f, 0x39, 0x43, 0x8b, 0x17, 0xe9,
-    0xe7, 0x9f, 0x65, 0x8a, 0xd8, 0xf2, 0xcd, 0x22, 0xbf, 0xc2, 0xdb, 0xf3,
-    0xee, 0x3a, 0xc5, 0xfc, 0x21, 0xbe, 0x9b, 0x8b, 0x17, 0x37, 0x16, 0x29,
-    0x62, 0xb4, 0x68, 0xfc, 0x2f, 0x7d, 0x9b, 0x0b, 0xb5, 0x8a, 0x73, 0xc6,
-    0x22, 0x1b, 0xec, 0xce, 0xe0, 0xb1, 0x7e, 0xf7, 0x03, 0xe4, 0x64, 0xa7,
-    0x57, 0x8f, 0x1a, 0x24, 0xe1, 0xaf, 0xa1, 0x2f, 0xd4, 0x41, 0x51, 0x8a,
-    0x96, 0x32, 0x3d, 0x8b, 0xff, 0x43, 0x8f, 0xe3, 0x9e, 0x7d, 0xc5, 0x8b,
-    0xfa, 0x7b, 0x86, 0xd8, 0x12, 0xc5, 0xfa, 0x4e, 0xc3, 0x8c, 0xec, 0xfc,
-    0x7c, 0x81, 0x7d, 0x81, 0x73, 0xeb, 0x17, 0xe7, 0x17, 0x5e, 0xfa, 0x58,
-    0xbe, 0x93, 0xb8, 0x4b, 0x17, 0xf3, 0x9e, 0x7e, 0x18, 0xd6, 0x2a, 0x23,
-    0xd2, 0xea, 0x23, 0xbd, 0x30, 0xe2, 0xc5, 0xf4, 0xe1, 0x0d, 0x62, 0xef,
-    0xbe, 0x8d, 0xf1, 0xc7, 0x6f, 0xf4, 0xe0, 0x38, 0xcf, 0xb2, 0xc5, 0xf3,
-    0xc8, 0xba, 0xf5, 0x8b, 0xcd, 0xe9, 0x58, 0xbf, 0x8f, 0xe7, 0xfb, 0x1d,
-    0x62, 0xff, 0xf3, 0xfb, 0xf9, 0xec, 0x29, 0xf4, 0x8d, 0x62, 0xa4, 0xfd,
-    0x98, 0xba, 0xf9, 0xe3, 0x66, 0xdd, 0x62, 0xf0, 0xb0, 0x6b, 0x17, 0xf9,
-    0xfc, 0x2d, 0x37, 0x23, 0x36, 0x55, 0x08, 0x32, 0x4c, 0x7f, 0xdd, 0x92,
-    0x22, 0xcd, 0x19, 0x9c, 0x9f, 0xf0, 0x92, 0xf1, 0x04, 0x71, 0x45, 0x3a,
-    0xb8, 0x86, 0x95, 0x8d, 0x7f, 0xfe, 0xfb, 0x42, 0x33, 0x35, 0x3b, 0xf7,
-    0xe1, 0x37, 0x16, 0x2f, 0xd2, 0x72, 0xc8, 0x2c, 0x5e, 0xd3, 0x9a, 0xb1,
-    0x7c, 0xdd, 0x82, 0x32, 0x23, 0xc5, 0x39, 0x3d, 0x0d, 0x1b, 0xde, 0x85,
-    0x05, 0xfd, 0x9a, 0xdd, 0x9b, 0x75, 0x49, 0xb0, 0x5f, 0xff, 0xbe, 0x61,
-    0x66, 0xbd, 0xcf, 0xc4, 0x61, 0x9f, 0x8e, 0x58, 0xbf, 0x7d, 0xb4, 0xe7,
-    0x58, 0xae, 0xb5, 0x10, 0xfb, 0xaf, 0xdf, 0xb3, 0xa6, 0x9b, 0x8b, 0x17,
-    0xfe, 0xd6, 0xd3, 0xe7, 0x78, 0x72, 0x56, 0x2f, 0x68, 0x5f, 0x58, 0xbf,
-    0x37, 0xbf, 0x90, 0x58, 0xbf, 0xfa, 0x47, 0x9d, 0xf8, 0xd6, 0x03, 0xf9,
-    0x62, 0xef, 0x46, 0x4a, 0x63, 0xc3, 0x29, 0xc2, 0xad, 0x1f, 0xf0, 0x78,
-    0x32, 0x8a, 0x8c, 0x54, 0x8e, 0xf1, 0xf0, 0xde, 0xce, 0x62, 0xc5, 0xed,
-    0x66, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x36, 0xcb, 0xf1, 0xc1, 0x85,
-    0xba, 0xc5, 0xcd, 0xa5, 0x8b, 0x41, 0x62, 0xdc, 0x93, 0xd2, 0xd8, 0xa4,
-    0x42, 0xf5, 0xba, 0x35, 0xb4, 0x3d, 0xe8, 0x41, 0xdf, 0xbf, 0xe7, 0x00,
-    0x96, 0x2f, 0xff, 0x4e, 0xde, 0x71, 0xe1, 0x41, 0xfe, 0x25, 0x8a, 0x73,
-    0xf3, 0xf9, 0x4d, 0xf9, 0xa2, 0x29, 0x3a, 0xc5, 0xf4, 0x67, 0x0f, 0x2b,
-    0x16, 0x25, 0x8a, 0x81, 0xb7, 0x22, 0x6b, 0xfd, 0x09, 0xd6, 0xd3, 0xad,
-    0x96, 0x2f, 0xf0, 0x24, 0x0c, 0x42, 0xc5, 0x8b, 0x83, 0xf2, 0xc5, 0x39,
-    0xe5, 0xe8, 0xca, 0xa5, 0x14, 0x59, 0x08, 0x1b, 0xe9, 0x8b, 0x8e, 0xb1,
-    0x50, 0x56, 0x4d, 0x90, 0xf2, 0x8a, 0x15, 0x27, 0x21, 0x65, 0xf2, 0x86,
-    0x17, 0x51, 0x35, 0xff, 0x87, 0xa7, 0x16, 0xd1, 0x9c, 0xd7, 0x96, 0x2a,
-    0x31, 0x17, 0x78, 0xed, 0x7f, 0xff, 0xde, 0x73, 0x63, 0x3c, 0x26, 0x88,
-    0x98, 0x2d, 0x4f, 0x9b, 0xcb, 0x17, 0xfb, 0x39, 0xc9, 0x00, 0x7b, 0x2c,
-    0x5e, 0xfe, 0x6c, 0xb1, 0x7f, 0x30, 0xf3, 0x08, 0xd5, 0x8b, 0xfb, 0xef,
-    0xad, 0x34, 0x16, 0x2f, 0xfd, 0xe7, 0x83, 0xfc, 0x47, 0x3b, 0xac, 0x50,
-    0xd1, 0xdd, 0x11, 0xb1, 0xc7, 0xb8, 0x5a, 0x19, 0x75, 0xfe, 0xc8, 0xcd,
-    0x64, 0x73, 0x9a, 0xb1, 0x60, 0x46, 0x22, 0x1a, 0x39, 0x32, 0xd9, 0xf5,
-    0x41, 0xe5, 0x1f, 0x05, 0xff, 0xfe, 0xce, 0x99, 0x18, 0x0c, 0xf7, 0x3d,
-    0x1d, 0x9f, 0xce, 0xfc, 0xb1, 0x7f, 0xe9, 0x04, 0x61, 0x64, 0x50, 0x9e,
-    0xd6, 0x2b, 0xe8, 0xad, 0x26, 0xab, 0x12, 0xc5, 0xa0, 0xb1, 0x51, 0xb1,
-    0xa3, 0x18, 0x8d, 0xe8, 0xdb, 0xe3, 0x58, 0xbd, 0xb7, 0xdd, 0x62, 0xff,
-    0xd1, 0xb4, 0x6d, 0xd7, 0x7e, 0xfe, 0x14, 0x81, 0x62, 0xfb, 0xac, 0xde,
-    0x12, 0xb1, 0x7b, 0xae, 0x46, 0xbe, 0xb8, 0xb1, 0x79, 0xfb, 0x82, 0xc5,
-    0xf4, 0xfd, 0xa2, 0x58, 0xbd, 0xd0, 0x50, 0x58, 0xa3, 0x9f, 0x0f, 0x87,
-    0xba, 0x11, 0xdf, 0x8a, 0x03, 0x11, 0xd6, 0x2e, 0xcf, 0x2c, 0x5f, 0xc1,
-    0x07, 0x1c, 0xc4, 0x05, 0x8a, 0x93, 0xf3, 0x19, 0x4e, 0x0b, 0xdd, 0x86,
-    0xac, 0x5f, 0xfb, 0x82, 0x3e, 0xff, 0x68, 0x84, 0x12, 0xc5, 0xfc, 0xe1,
-    0xc5, 0xc1, 0x76, 0xb1, 0x7d, 0xbf, 0xc5, 0xa5, 0x8b, 0x46, 0xcb, 0x14,
-    0x33, 0x79, 0xa2, 0x5a, 0x94, 0x75, 0xb8, 0xc7, 0xd1, 0x19, 0xba, 0xff,
-    0x6b, 0x53, 0x06, 0xec, 0x25, 0x8b, 0xf9, 0xf6, 0x19, 0x48, 0x6b, 0x15,
-    0x87, 0xca, 0x46, 0xd7, 0xff, 0xed, 0x03, 0xf9, 0xcf, 0xe7, 0xb8, 0xe5,
-    0xdc, 0x16, 0x2f, 0xff, 0x1a, 0x6b, 0x05, 0x3a, 0xf8, 0x4c, 0x5b, 0x2c,
-    0x54, 0xa2, 0x99, 0xd5, 0xef, 0xf0, 0x86, 0x1e, 0xcc, 0xc3, 0x58, 0xbf,
-    0xfa, 0x2f, 0x8a, 0x3f, 0xc0, 0x72, 0x87, 0x16, 0x2f, 0xb7, 0x66, 0xdd,
-    0x52, 0x78, 0x17, 0xef, 0x77, 0xbb, 0xe9, 0x62, 0xff, 0x81, 0xc3, 0x38,
-    0x06, 0xc8, 0x96, 0x2f, 0xf6, 0xb5, 0x9e, 0xe4, 0x9d, 0x62, 0x9c, 0xfc,
-    0x18, 0xf2, 0xf0, 0xdf, 0xcb, 0x17, 0xfa, 0x7a, 0x6b, 0x59, 0xdf, 0x16,
-    0x28, 0xe7, 0xa9, 0xe1, 0xdb, 0xb9, 0xf5, 0x8a, 0x63, 0x74, 0x22, 0x2b,
-    0xf6, 0xb3, 0xa3, 0x69, 0x62, 0xff, 0xda, 0x0f, 0xcf, 0xf2, 0xcf, 0x62,
-    0xc5, 0x39, 0xf4, 0xb1, 0x55, 0x41, 0x56, 0x20, 0xc8, 0x5c, 0xdb, 0x49,
-    0x47, 0x31, 0xfc, 0x26, 0xca, 0x15, 0xdd, 0x21, 0x13, 0x7d, 0xee, 0xba,
-    0xe4, 0x4b, 0x17, 0x4c, 0xac, 0x56, 0x8f, 0x0b, 0xc5, 0x97, 0xed, 0x8a,
-    0x5c, 0x6b, 0x16, 0xf2, 0xc5, 0xff, 0xbe, 0xec, 0x0e, 0xe0, 0x26, 0xf2,
-    0xc5, 0x9c, 0x07, 0xa5, 0xe1, 0x2b, 0xff, 0xa7, 0x73, 0x30, 0xf8, 0x5e,
-    0x8e, 0xc5, 0x8b, 0xff, 0xbc, 0xfc, 0xc8, 0x49, 0xa1, 0x6d, 0xb2, 0xc5,
-    0x9c, 0xe8, 0x91, 0xf2, 0x45, 0x4a, 0x6b, 0x43, 0x7a, 0xfc, 0x2e, 0x2e,
-    0x6e, 0x2c, 0x5c, 0x2e, 0x2c, 0x5e, 0x8e, 0xcf, 0xac, 0x50, 0x0f, 0x3f,
-    0x82, 0xfe, 0x18, 0xbf, 0x38, 0x4c, 0xdd, 0x4b, 0x17, 0xfc, 0x3d, 0x4f,
-    0x9f, 0x77, 0x1a, 0xc5, 0xef, 0x49, 0xd6, 0x2b, 0x0f, 0x5f, 0xc7, 0x57,
-    0xd2, 0x50, 0x65, 0x8b, 0x9e, 0x39, 0x62, 0xa2, 0x46, 0xf6, 0xa1, 0x04,
-    0x72, 0x1e, 0xbc, 0x86, 0xed, 0xc2, 0x58, 0xbf, 0xa4, 0xbd, 0xd1, 0xb7,
-    0x58, 0xbf, 0xa1, 0x3d, 0x27, 0x5d, 0xac, 0x5f, 0xff, 0xcd, 0xb4, 0x50,
-    0x9d, 0x6d, 0xe8, 0x64, 0x7b, 0x10, 0x16, 0x2a, 0x34, 0x46, 0xe4, 0x06,
-    0xb0, 0xc1, 0x8c, 0x6f, 0xbb, 0xe4, 0xf4, 0x58, 0xb8, 0x3e, 0x2c, 0x5f,
-    0x7b, 0xfc, 0x75, 0x8b, 0xf6, 0x0c, 0x39, 0xed, 0x62, 0xfd, 0x91, 0x7d,
-    0x8e, 0xb1, 0x6e, 0xfe, 0x7a, 0x61, 0x95, 0x54, 0xa2, 0x81, 0xdd, 0xaf,
-    0x16, 0x44, 0xb1, 0x58, 0x98, 0xec, 0x44, 0xda, 0x85, 0xcf, 0xc8, 0x6f,
-    0xef, 0x37, 0xcc, 0x1c, 0xac, 0x5f, 0xf3, 0x7b, 0x92, 0xe3, 0xc3, 0xac,
-    0x54, 0x9f, 0x39, 0x17, 0xdf, 0xa0, 0xef, 0xf6, 0x58, 0xbe, 0x2c, 0x73,
-    0x56, 0x2f, 0xe8, 0x7b, 0x0b, 0xdc, 0x58, 0xbd, 0x01, 0x71, 0x62, 0xc7,
-    0xec, 0xf3, 0x22, 0x2e, 0xae, 0xd1, 0x7e, 0x72, 0x70, 0xdb, 0xae, 0xfc,
-    0x16, 0x2e, 0xc3, 0x56, 0x2f, 0x6f, 0x84, 0xb1, 0x7e, 0xef, 0x8f, 0xdf,
-    0x16, 0x2c, 0x75, 0x8b, 0xe8, 0x79, 0xf6, 0x58, 0xa9, 0x3f, 0xe8, 0x87,
-    0x4e, 0x56, 0xc2, 0x57, 0xff, 0x7a, 0x4b, 0x77, 0x39, 0xdf, 0x82, 0x58,
-    0xbf, 0xf8, 0x39, 0xd4, 0x0c, 0xe6, 0x1e, 0x71, 0x62, 0x9d, 0x11, 0x7e,
-    0x45, 0xbe, 0x62, 0xdb, 0xeb, 0x15, 0x29, 0xf5, 0xc0, 0xcb, 0x06, 0x1e,
-    0x12, 0xcd, 0x0c, 0x60, 0x88, 0xae, 0xc3, 0xac, 0x5f, 0x9f, 0xe3, 0x7e,
-    0x2c, 0x59, 0xf6, 0x37, 0xf0, 0x17, 0xbf, 0x61, 0x03, 0xaa, 0x56, 0x2e,
-    0x6e, 0x2c, 0x5e, 0x13, 0x71, 0x62, 0xbc, 0x6d, 0x03, 0x17, 0xb7, 0x16,
-    0x2e, 0x2f, 0x2c, 0x5e, 0x7d, 0x8e, 0xb1, 0x58, 0x6d, 0x74, 0x2f, 0x5b,
-    0x1f, 0x3c, 0x48, 0xf7, 0xd0, 0xe6, 0xcc, 0xb1, 0x52, 0x8d, 0x1c, 0x84,
-    0x48, 0x89, 0x2e, 0x88, 0x6b, 0x17, 0xff, 0xff, 0xc4, 0x26, 0xe6, 0x17,
-    0x39, 0x9f, 0x7e, 0x0b, 0x6e, 0x7f, 0x3b, 0xf4, 0xac, 0x5f, 0x9f, 0x4d,
-    0xd8, 0x4b, 0x17, 0xfe, 0x9d, 0xcc, 0xc2, 0x14, 0x33, 0x8b, 0x15, 0x04,
-    0x74, 0x44, 0xfc, 0x72, 0xab, 0xfd, 0xf7, 0x08, 0xdd, 0x30, 0x4b, 0x17,
-    0xee, 0x92, 0x33, 0xf1, 0x62, 0xfe, 0xce, 0x0b, 0xd2, 0x4b, 0x17, 0xff,
-    0xfc, 0xfb, 0x73, 0x35, 0xbf, 0xc4, 0xc1, 0x8f, 0xf2, 0x3d, 0x32, 0xc5,
-    0xe6, 0x20, 0x2c, 0x5f, 0x8b, 0x7c, 0xef, 0xcb, 0x15, 0x03, 0xc6, 0xc1,
-    0xcb, 0xff, 0xfe, 0x7f, 0x31, 0xd8, 0x81, 0xbf, 0xdf, 0x50, 0x0e, 0x18,
-    0x4b, 0x15, 0x29, 0x9c, 0x64, 0x2c, 0x18, 0x86, 0xfd, 0xd3, 0x30, 0x8d,
-    0x58, 0xbf, 0xb0, 0x7f, 0x9e, 0x47, 0xac, 0x5e, 0x83, 0x76, 0xb1, 0x78,
-    0x7f, 0xc5, 0x8b, 0xa7, 0xbe, 0xcd, 0xdb, 0x0f, 0x50, 0xd5, 0xf7, 0xe4,
-    0x60, 0x3b, 0x98, 0xb9, 0xbc, 0x45, 0x7f, 0x8d, 0x94, 0x06, 0x64, 0x54,
-    0x26, 0xcb, 0xf8, 0xb3, 0xc0, 0xce, 0xd6, 0x2f, 0xf3, 0x10, 0x3d, 0x1d,
-    0x9f, 0x58, 0xb7, 0x16, 0x2f, 0x9e, 0x75, 0x05, 0x8b, 0xdf, 0x68, 0x39,
-    0xb4, 0x38, 0x95, 0x47, 0xa2, 0x6f, 0xed, 0x55, 0x28, 0xef, 0xc8, 0x64,
-    0xdc, 0x7e, 0x2c, 0x52, 0xc5, 0xec, 0xc0, 0x2c, 0x5e, 0x92, 0x84, 0x79,
-    0xa8, 0x20, 0xcb, 0xff, 0x80, 0xc4, 0x02, 0xce, 0x9f, 0xc1, 0xac, 0x5f,
-    0xfc, 0xc0, 0xc1, 0xe7, 0xdf, 0x5f, 0x65, 0x8a, 0xed, 0x11, 0x1c, 0x45,
-    0xbf, 0xf3, 0x03, 0xcf, 0xcf, 0xc9, 0x79, 0x62, 0xfe, 0xef, 0x98, 0x79,
-    0x8f, 0x58, 0xa7, 0x3f, 0x01, 0x1f, 0x5f, 0xe0, 0xca, 0x01, 0xe9, 0x80,
-    0xb1, 0x7b, 0xc1, 0x6e, 0xb1, 0x7f, 0xe3, 0xfc, 0xb3, 0xbf, 0x09, 0xb8,
-    0xb1, 0x58, 0x7c, 0x0c, 0x41, 0x60, 0x2c, 0x5f, 0xed, 0x69, 0xcf, 0xfc,
-    0xd9, 0x62, 0xa4, 0xf1, 0xf0, 0x4a, 0xa0, 0xab, 0xcf, 0x09, 0x8d, 0x40,
-    0x78, 0x5d, 0xfe, 0x12, 0x80, 0x21, 0xe4, 0x25, 0xbc, 0xcf, 0x7f, 0x9b,
-    0xec, 0x19, 0xf3, 0x8b, 0x16, 0xe8, 0xb1, 0x70, 0x71, 0xcb, 0x15, 0xd6,
-    0x9b, 0x0f, 0x8a, 0x5b, 0x75, 0x8b, 0xb7, 0x82, 0xc5, 0x61, 0xe9, 0x6e,
-    0x4d, 0xe1, 0x3b, 0xa2, 0xe2, 0xc5, 0xfd, 0x9b, 0x03, 0x92, 0x4b, 0x14,
-    0xc7, 0x8e, 0x43, 0x37, 0xfe, 0xe0, 0x80, 0x19, 0xe2, 0x83, 0xe9, 0x62,
-    0xff, 0xff, 0x9c, 0x85, 0x0c, 0xe7, 0x7e, 0xd4, 0xe7, 0x70, 0x38, 0x04,
-    0xb1, 0x44, 0x8c, 0xce, 0x10, 0x79, 0x0e, 0xff, 0x69, 0xbb, 0x1f, 0xdc,
-    0x25, 0x8a, 0x8d, 0xdb, 0xe7, 0xde, 0xb4, 0x9a, 0x36, 0x23, 0xeb, 0x83,
-    0xd1, 0xa9, 0x42, 0x35, 0x94, 0xcc, 0x24, 0x76, 0x85, 0x24, 0x23, 0x18,
-    0x1c, 0x27, 0xf2, 0x5c, 0x51, 0xb0, 0xc4, 0xde, 0x37, 0xce, 0xe1, 0x08,
-    0xf1, 0x86, 0xc5, 0x19, 0x26, 0xa3, 0x5d, 0x3c, 0x2a, 0xbf, 0x2b, 0x29,
-    0xa1, 0x3c, 0x02, 0x72, 0x8c, 0xbf, 0x93, 0x84, 0x5e, 0x9c, 0x6d, 0xe9,
-    0x08, 0x18, 0xe8, 0x5b, 0x07, 0x1a, 0x17, 0x51, 0x7d, 0xef, 0x48, 0xd6,
-    0x2f, 0x80, 0xda, 0xe2, 0xc5, 0xdd, 0xc6, 0x49, 0xe0, 0x60, 0xed, 0xfe,
-    0x04, 0x64, 0x50, 0x92, 0xf2, 0xc5, 0x46, 0x2a, 0xc1, 0x99, 0x4b, 0x3a,
-    0x30, 0xbe, 0x37, 0x4c, 0x12, 0xc5, 0x89, 0x62, 0xdd, 0xac, 0x58, 0x78,
-    0x69, 0x03, 0x11, 0xa0, 0x1f, 0x81, 0x24, 0xdd, 0x9d, 0xac, 0x5f, 0x82,
-    0x2c, 0xd8, 0x4b, 0x17, 0xb8, 0x2d, 0x96, 0x2a, 0x4f, 0x25, 0x8a, 0xa9,
-    0xd1, 0x03, 0xa6, 0x1b, 0xed, 0xd9, 0xb7, 0x54, 0x9e, 0x85, 0xf8, 0x0f,
-    0xa8, 0x62, 0xc5, 0x68, 0xf6, 0x78, 0x63, 0x7c, 0x00, 0xf5, 0xba, 0xc5,
-    0xf4, 0x90, 0x99, 0x62, 0xfd, 0x9e, 0x29, 0xd9, 0x62, 0xff, 0xcc, 0xfe,
-    0x16, 0x9b, 0xa6, 0x0d, 0x62, 0xe1, 0x71, 0x62, 0xfb, 0x9f, 0x68, 0xf5,
-    0x8a, 0x19, 0xbe, 0xf8, 0xc5, 0xfa, 0x4e, 0xdf, 0x95, 0x8b, 0xc7, 0x7f,
-    0x2c, 0x5f, 0xf3, 0x7a, 0x12, 0x6f, 0x9f, 0x65, 0x8a, 0xd1, 0xff, 0x9c,
-    0x9c, 0x87, 0x6f, 0xd8, 0x7f, 0xb0, 0xd6, 0x2a, 0x55, 0x91, 0x0e, 0x14,
-    0x58, 0xf7, 0xd9, 0x13, 0x93, 0x68, 0x87, 0xe5, 0x0c, 0xfc, 0x1c, 0x28,
-    0x3a, 0x8b, 0xaf, 0xfe, 0xc1, 0xff, 0x0e, 0x76, 0x86, 0x12, 0xc5, 0xe1,
-    0x48, 0x16, 0x2f, 0xba, 0x61, 0x46, 0x0c, 0xf8, 0x34, 0x87, 0x7f, 0xdd,
-    0xfb, 0x08, 0x50, 0xce, 0x2c, 0x5f, 0xff, 0x84, 0x3f, 0xb4, 0x38, 0xe7,
-    0xe7, 0x18, 0xb7, 0x58, 0xbe, 0x8a, 0x0c, 0x35, 0x8b, 0xfc, 0xfc, 0x0c,
-    0x9b, 0xdc, 0x58, 0xa8, 0x22, 0xbf, 0x15, 0xcd, 0x24, 0xbf, 0xbc, 0xfa,
-    0x9c, 0x25, 0x8b, 0xee, 0xa7, 0xd6, 0xcb, 0x16, 0x8c, 0xc4, 0xdb, 0x3d,
-    0x0e, 0x90, 0xcc, 0x3a, 0x8b, 0x29, 0xd3, 0xf8, 0xfc, 0x75, 0x35, 0x18,
-    0xac, 0x67, 0x25, 0x78, 0x54, 0x6a, 0x84, 0x18, 0x3c, 0x6b, 0x73, 0x98,
-    0xd6, 0x76, 0x87, 0xcc, 0x23, 0xa1, 0xcb, 0x4d, 0x2d, 0xbc, 0xa8, 0x77,
-    0xa7, 0x64, 0xc5, 0x4a, 0x07, 0xd4, 0xa0, 0xb3, 0xcb, 0x57, 0xfc, 0xe1,
-    0x33, 0x46, 0x10, 0x09, 0x4d, 0xe5, 0x38, 0x1d, 0xc9, 0x46, 0x9e, 0x86,
-    0xe0, 0xad, 0x0c, 0x18, 0x53, 0xdc, 0xd7, 0x81, 0x1d, 0xb2, 0xc5, 0xff,
-    0x46, 0xf1, 0xa0, 0xb8, 0xe5, 0xdc, 0x16, 0x2e, 0xf7, 0x16, 0x2a, 0x36,
-    0x3f, 0xfe, 0xbb, 0x22, 0x24, 0x5b, 0x8e, 0x75, 0x8b, 0x7d, 0x62, 0xba,
-    0xc3, 0x54, 0x21, 0x8b, 0xff, 0x85, 0x31, 0x16, 0x74, 0x63, 0x9d, 0xd6,
-    0x2f, 0xb3, 0xed, 0xe5, 0x8b, 0xfd, 0x8f, 0xa0, 0x00, 0x5c, 0x58, 0xb7,
-    0x5a, 0x6a, 0x27, 0x09, 0x1b, 0x84, 0x57, 0x9f, 0x38, 0xb1, 0x7f, 0xff,
-    0xc4, 0x3f, 0xc9, 0x9e, 0xfe, 0x1f, 0x3c, 0x52, 0x00, 0x4a, 0xc5, 0xff,
-    0xef, 0x70, 0x53, 0xcc, 0xf3, 0x9d, 0xa0, 0xb1, 0x7a, 0x7b, 0xd9, 0x62,
-    0x88, 0xfa, 0x7c, 0x95, 0x7c, 0xf1, 0xd2, 0x75, 0x8b, 0xfd, 0xf9, 0xdb,
-    0x53, 0x83, 0x58, 0xbf, 0xfe, 0x8b, 0x30, 0x23, 0x03, 0x84, 0xf4, 0x72,
-    0x02, 0xc5, 0xff, 0xd9, 0x81, 0x07, 0x09, 0xe8, 0xe4, 0x05, 0x8b, 0xd8,
-    0xfd, 0x0c, 0x44, 0xe4, 0x4a, 0xb5, 0x29, 0x83, 0xfe, 0x1a, 0x17, 0xfd,
-    0xee, 0x67, 0x70, 0xf8, 0x8d, 0x58, 0xbd, 0xc9, 0x89, 0x62, 0xed, 0x4a,
-    0xc5, 0x0d, 0x56, 0x96, 0x0e, 0x3c, 0x33, 0xce, 0x43, 0xf8, 0xcb, 0x08,
-    0xa3, 0x87, 0xbd, 0x43, 0xd6, 0xc5, 0x8b, 0x9b, 0xeb, 0x17, 0xff, 0xff,
-    0xf3, 0x99, 0xec, 0x8a, 0x41, 0xcd, 0xfe, 0x2e, 0xe1, 0x21, 0x16, 0x6c,
-    0x61, 0x9f, 0x8e, 0x58, 0xad, 0xd1, 0x7a, 0x42, 0x3d, 0x42, 0xf7, 0xbb,
-    0xc6, 0x58, 0xba, 0x60, 0xb1, 0x51, 0x86, 0xd3, 0xa0, 0xed, 0xef, 0xe7,
-    0x16, 0x2f, 0xf8, 0x9c, 0xdf, 0x77, 0xbb, 0xfd, 0x62, 0xf7, 0x27, 0x65,
-    0x8b, 0xf7, 0x57, 0xe3, 0xe7, 0xb5, 0x8a, 0x94, 0x66, 0x8c, 0x9b, 0x07,
-    0x7b, 0x3c, 0x71, 0xeb, 0xfa, 0x0d, 0xad, 0xbe, 0x25, 0x8b, 0xfb, 0xee,
-    0xc0, 0x04, 0xac, 0x54, 0x47, 0xbb, 0xe3, 0x0b, 0xff, 0xec, 0xce, 0x18,
-    0x3f, 0xce, 0xb7, 0x2c, 0xd9, 0x62, 0xfb, 0xb8, 0x0b, 0x65, 0x8b, 0xf8,
-    0xde, 0x34, 0xf7, 0x05, 0x8b, 0x61, 0xa8, 0xa8, 0xed, 0x49, 0xc9, 0xaf,
-    0x16, 0x79, 0x62, 0xf6, 0x11, 0xab, 0x17, 0x09, 0x96, 0x2f, 0x36, 0xa1,
-    0x27, 0xa1, 0x83, 0x84, 0x3b, 0x73, 0x9d, 0x62, 0xb1, 0x3a, 0x5d, 0x43,
-    0x2c, 0x50, 0x86, 0xea, 0x3d, 0xbf, 0xff, 0x11, 0x85, 0x8f, 0x87, 0x2c,
-    0xf7, 0xdf, 0xb5, 0x8b, 0xe3, 0x88, 0x86, 0xb1, 0x7f, 0xff, 0x4e, 0xa2,
-    0xe6, 0xff, 0x17, 0x39, 0x26, 0x96, 0x74, 0x58, 0xbc, 0x6c, 0x84, 0xb1,
-    0x79, 0x9b, 0x75, 0x48, 0x46, 0x5e, 0xdd, 0xb4, 0xb1, 0x7f, 0xa0, 0xcc,
-    0x36, 0x6e, 0x8b, 0x14, 0x69, 0xe9, 0x76, 0x3d, 0x46, 0xa2, 0xff, 0x71,
-    0xf7, 0x7c, 0xbe, 0xf7, 0x18, 0x0b, 0x17, 0xdf, 0x73, 0x44, 0xb1, 0x77,
-    0x63, 0x58, 0xa8, 0xd8, 0xf8, 0x06, 0x46, 0xc4, 0x97, 0xe7, 0x63, 0xe6,
-    0x96, 0x2f, 0xf8, 0x4d, 0xd9, 0x66, 0xc1, 0xc1, 0x62, 0xf6, 0xe1, 0x9d,
-    0x62, 0xff, 0xff, 0x08, 0x6c, 0x40, 0xc3, 0x74, 0xfd, 0xe7, 0xb8, 0x58,
-    0xb1, 0x7f, 0xff, 0xd3, 0x17, 0xa7, 0x9a, 0x9f, 0x3e, 0xee, 0x33, 0x0d,
-    0x26, 0x58, 0xa9, 0x47, 0x54, 0x44, 0x04, 0xc3, 0x7f, 0xf3, 0xf3, 0xf8,
-    0x69, 0xac, 0x60, 0xfb, 0x58, 0xa9, 0x5c, 0x20, 0xd9, 0x53, 0x72, 0x3d,
-    0x46, 0x40, 0x78, 0x48, 0xfc, 0xcf, 0x84, 0xfe, 0x8c, 0x9b, 0xa1, 0x7d,
-    0xe3, 0xe7, 0x16, 0x2f, 0x3f, 0x0d, 0x58, 0xbf, 0x45, 0x85, 0xee, 0x2c,
-    0x5f, 0xfd, 0x9b, 0x0b, 0xb3, 0x35, 0x9e, 0x6e, 0xd6, 0x2d, 0xde, 0x8f,
-    0xc8, 0x8a, 0x6a, 0x51, 0xab, 0xf1, 0xd6, 0x84, 0x85, 0xfc, 0xdd, 0xff,
-    0x1c, 0x25, 0x8b, 0xa1, 0xf5, 0x8a, 0xd1, 0xe3, 0xb1, 0x7d, 0xfe, 0xcf,
-    0x61, 0xf6, 0xc0, 0x96, 0x28, 0x67, 0xac, 0x44, 0x37, 0xff, 0x73, 0x98,
-    0x72, 0xce, 0x86, 0x4f, 0x58, 0xb1, 0x4e, 0x7d, 0xa2, 0x21, 0xbf, 0xd9,
-    0xb7, 0xcb, 0x04, 0x35, 0x8a, 0xf9, 0xea, 0x91, 0x0d, 0xfe, 0xdb, 0x59,
-    0xef, 0x3f, 0x96, 0x29, 0x62, 0xff, 0xef, 0xe7, 0x8a, 0x62, 0x30, 0xd2,
-    0x65, 0x8b, 0x85, 0x31, 0x1e, 0x97, 0x83, 0x2a, 0x51, 0x6b, 0xc8, 0x43,
-    0xde, 0x29, 0xed, 0x62, 0xe7, 0x3a, 0xc5, 0xda, 0x35, 0x62, 0xfc, 0xc1,
-    0x7b, 0x3e, 0xb1, 0x4c, 0x78, 0x44, 0x33, 0x50, 0x45, 0xe8, 0xc9, 0xfe,
-    0x3b, 0xe5, 0x9b, 0x9b, 0xeb, 0x17, 0xfb, 0x59, 0xcc, 0x62, 0xd9, 0x62,
-    0xf1, 0xc5, 0xda, 0xc5, 0x0c, 0xfa, 0x70, 0x5c, 0x06, 0x77, 0xf4, 0xec,
-    0x69, 0x30, 0xd6, 0x2f, 0xe1, 0x87, 0xff, 0xb4, 0x16, 0x2b, 0x0f, 0x7c,
-    0x45, 0xf6, 0x3a, 0xc5, 0xfe, 0x0e, 0x13, 0xd1, 0xc8, 0x0b, 0x17, 0xf4,
-    0x27, 0xa3, 0x90, 0x16, 0x2c, 0x11, 0x87, 0xca, 0x19, 0xb5, 0x0d, 0x14,
-    0x58, 0xef, 0x7f, 0xed, 0x8c, 0x2c, 0xf7, 0x3f, 0x86, 0xac, 0x5f, 0xee,
-    0xe1, 0xc1, 0xfc, 0x47, 0x58, 0xa9, 0x3f, 0x9c, 0x42, 0xbf, 0x36, 0xc1,
-    0xb8, 0xd6, 0x2f, 0xfe, 0xc0, 0x85, 0x3b, 0x78, 0x73, 0xee, 0x2c, 0x5c,
-    0xf1, 0x2c, 0x54, 0x15, 0x03, 0xe4, 0x30, 0xff, 0x09, 0xb6, 0x20, 0x22,
-    0xaf, 0x23, 0xdf, 0xfe, 0x83, 0x9a, 0x6b, 0x72, 0x5f, 0x66, 0xf2, 0xc5,
-    0xff, 0xfc, 0xcf, 0xe9, 0xf9, 0x67, 0xbe, 0xff, 0xc7, 0x09, 0x62, 0xff,
-    0xff, 0xfe, 0x2c, 0xd6, 0x9f, 0xa8, 0xc9, 0x83, 0xfb, 0xf2, 0x76, 0x23,
-    0x27, 0x5a, 0x7e, 0x8b, 0x14, 0xe9, 0x99, 0x7d, 0x33, 0xcb, 0x36, 0x25,
-    0x8b, 0xfb, 0xe6, 0x7f, 0x07, 0x8b, 0x17, 0xff, 0xff, 0x79, 0xcf, 0xa7,
-    0xce, 0xc8, 0x5e, 0x9f, 0x99, 0xd1, 0xfd, 0x14, 0xac, 0x53, 0x22, 0x97,
-    0xc5, 0xf7, 0xc1, 0x18, 0x0d, 0x96, 0x2f, 0xfe, 0xe6, 0x44, 0x00, 0x3e,
-    0x9f, 0xb0, 0x2c, 0x5f, 0xce, 0x4f, 0xad, 0x62, 0xc5, 0x4a, 0x26, 0xa0,
-    0x4f, 0x88, 0xf7, 0xfd, 0x8c, 0x40, 0xd0, 0xa4, 0x0b, 0x17, 0xf8, 0x83,
-    0xf1, 0x9c, 0x91, 0xac, 0x5f, 0xf7, 0x70, 0xc6, 0xee, 0x3a, 0x4e, 0xb1,
-    0x52, 0xa9, 0xf0, 0x66, 0x19, 0x0b, 0x6e, 0xe1, 0x79, 0xa2, 0xe6, 0x38,
-    0xf1, 0xb5, 0xfe, 0xd8, 0xcf, 0xcb, 0x96, 0xeb, 0x17, 0xef, 0x3c, 0x33,
-    0x8b, 0x17, 0xfd, 0x07, 0xf0, 0x7a, 0x9f, 0xca, 0xc5, 0x4a, 0x26, 0x30,
-    0xd8, 0x45, 0x17, 0xff, 0xe3, 0xc7, 0xbb, 0x34, 0x5e, 0xfe, 0x43, 0xef,
-    0xd1, 0x62, 0xff, 0xf3, 0x14, 0x4e, 0x7f, 0xe7, 0x31, 0xc9, 0x62, 0xff,
-    0xee, 0x7a, 0x7d, 0x9e, 0x8a, 0x13, 0xf5, 0x8b, 0xc2, 0x90, 0x2c, 0x5f,
-    0xdc, 0x38, 0x8a, 0x42, 0x58, 0xb4, 0x25, 0x12, 0x5a, 0x46, 0x10, 0xed,
-    0xff, 0xfc, 0x11, 0x92, 0xe5, 0xee, 0x0a, 0x75, 0x9e, 0x6e, 0xd6, 0x2f,
-    0xff, 0xff, 0x14, 0xef, 0xfc, 0xe3, 0x11, 0x9e, 0xfc, 0x90, 0xa7, 0xdc,
-    0xc2, 0x58, 0xad, 0x93, 0xe2, 0xee, 0x1b, 0x4e, 0x6b, 0xe5, 0xdb, 0xfe,
-    0x7e, 0x60, 0xf3, 0xa3, 0xe9, 0x62, 0xff, 0xff, 0x9b, 0x9f, 0xce, 0xfc,
-    0x4e, 0x11, 0x93, 0x84, 0x3f, 0xca, 0xc5, 0xfa, 0x39, 0xf5, 0x86, 0xac,
-    0x5f, 0x77, 0x93, 0xda, 0xc5, 0xb5, 0x11, 0xe8, 0x7c, 0xb2, 0xfa, 0x75,
-    0x20, 0x58, 0xac, 0x3c, 0xbf, 0x14, 0xdc, 0xd1, 0x2c, 0x5f, 0x01, 0xa2,
-    0x3a, 0xc5, 0xff, 0xfb, 0x0e, 0x77, 0xea, 0x33, 0x1f, 0x4e, 0x79, 0x35,
-    0x62, 0xe9, 0x3e, 0x91, 0x2a, 0x01, 0x82, 0x24, 0xb8, 0x33, 0xac, 0x5f,
-    0xfe, 0xf4, 0x33, 0x59, 0xc3, 0x34, 0x37, 0xd2, 0xc5, 0xfb, 0x35, 0x09,
-    0x3a, 0xc5, 0x6c, 0x88, 0xd7, 0x19, 0x3a, 0x65, 0x4a, 0xeb, 0x56, 0x4a,
-    0x3d, 0xdd, 0x13, 0xb3, 0xa7, 0x8c, 0x0b, 0xf0, 0xb6, 0x68, 0x63, 0xdd,
-    0xb1, 0xd2, 0x2e, 0x08, 0x24, 0x8b, 0xfd, 0xf7, 0x8b, 0xf3, 0xb4, 0x60,
-    0x0d, 0x98, 0x43, 0x37, 0xd8, 0x3f, 0xe2, 0xc5, 0xa3, 0x37, 0x3f, 0x12,
-    0x4f, 0xbf, 0xdc, 0x2c, 0xf4, 0x76, 0x79, 0x62, 0xfb, 0xa4, 0xfa, 0x56,
-    0x2f, 0xe3, 0xb9, 0x9b, 0x70, 0x25, 0x8b, 0xdd, 0x1b, 0x4b, 0x17, 0xd9,
-    0xf2, 0xc5, 0x8a, 0xc3, 0xc0, 0xe0, 0xfd, 0x41, 0x31, 0x8c, 0x2b, 0x73,
-    0x63, 0x92, 0x79, 0xca, 0xdd, 0x4b, 0x17, 0xe6, 0x3e, 0x77, 0xe5, 0x8b,
-    0xfc, 0xc5, 0xb9, 0x81, 0x7b, 0x8b, 0x15, 0xb1, 0xfa, 0xe0, 0xa8, 0x8a,
-    0x6f, 0xf7, 0xb5, 0x25, 0xb3, 0xee, 0xb1, 0x7b, 0x69, 0x8f, 0x58, 0xa5,
-    0x8b, 0xff, 0xb0, 0xb3, 0x9c, 0x6d, 0x77, 0x0e, 0x2c, 0x5f, 0xec, 0xef,
-    0xdf, 0xc1, 0x6e, 0xb1, 0x5b, 0xa2, 0x1d, 0xc3, 0x09, 0x16, 0xff, 0xf3,
-    0x9b, 0xc7, 0xc2, 0x00, 0xf4, 0xdb, 0xac, 0x56, 0x1f, 0xd7, 0xcb, 0xef,
-    0xfb, 0xee, 0x5b, 0x16, 0x3e, 0xcb, 0x17, 0xf8, 0x12, 0x06, 0x21, 0x62,
-    0xc5, 0xff, 0xe7, 0x07, 0x0c, 0xc3, 0x87, 0xf6, 0xfc, 0xac, 0x5f, 0x60,
-    0x8f, 0xf5, 0x8a, 0xc3, 0xef, 0xd2, 0x65, 0xff, 0xff, 0xc2, 0x9d, 0xbb,
-    0x87, 0x0b, 0x22, 0x33, 0x7f, 0xce, 0xe6, 0xe9, 0x82, 0x58, 0xbf, 0xf7,
-    0x18, 0x8c, 0xd6, 0x79, 0xbb, 0x58, 0xbf, 0xe0, 0x3c, 0x5c, 0x7f, 0xb9,
-    0xd6, 0x2f, 0xff, 0xf6, 0x7b, 0x9f, 0xc1, 0x1f, 0x87, 0xc2, 0x8b, 0xda,
-    0x95, 0x8b, 0xf8, 0xe5, 0x81, 0x30, 0x16, 0x2f, 0x41, 0xc0, 0xb1, 0x76,
-    0x79, 0x62, 0xb0, 0xf8, 0xb8, 0x5d, 0x1c, 0x3b, 0x7f, 0xa7, 0xf9, 0x14,
-    0x1b, 0x65, 0x8b, 0xff, 0xc5, 0x9c, 0x2c, 0x37, 0x9f, 0x92, 0xf2, 0xc5,
-    0xff, 0xc5, 0x9d, 0xc3, 0x83, 0x7e, 0x92, 0x35, 0x8a, 0xd9, 0x73, 0xb4,
-    0x71, 0x91, 0x6e, 0x42, 0xe7, 0x3a, 0x85, 0x09, 0xc8, 0x7e, 0xf6, 0x04,
-    0x02, 0x3a, 0xf4, 0x31, 0x04, 0x63, 0xd0, 0xd7, 0xa9, 0x26, 0xfc, 0xfe,
-    0x9f, 0x71, 0x62, 0x96, 0x2f, 0xee, 0xf8, 0xc4, 0x2c, 0x58, 0xa7, 0x37,
-    0x4c, 0x19, 0x7c, 0xfa, 0x60, 0x2c, 0x54, 0x11, 0x46, 0x06, 0x2e, 0x0f,
-    0xdf, 0xb0, 0xbc, 0x66, 0x2c, 0x5f, 0xe0, 0x4f, 0x46, 0xff, 0xdd, 0x62,
-    0xa3, 0x11, 0x1b, 0xc3, 0x0f, 0x14, 0x5f, 0xe3, 0x33, 0xef, 0xaf, 0xb2,
-    0xc5, 0xff, 0x70, 0x5a, 0xd3, 0xcb, 0xe9, 0x62, 0xff, 0xbd, 0xa1, 0x45,
-    0x9b, 0x94, 0xac, 0x54, 0xaf, 0xfb, 0xe4, 0xe9, 0x13, 0x47, 0xf4, 0x03,
-    0x3f, 0x1a, 0x08, 0xe6, 0xd1, 0xeb, 0x17, 0xc5, 0xdc, 0x52, 0xb1, 0x73,
-    0x47, 0xac, 0x5f, 0xe7, 0xef, 0xcc, 0xc7, 0xe2, 0xc5, 0xff, 0x4e, 0x77,
-    0x2d, 0x06, 0x82, 0xc5, 0xfd, 0x80, 0x30, 0xb0, 0x0b, 0x17, 0x1f, 0x75,
-    0x8a, 0x19, 0xe3, 0xb1, 0x75, 0xff, 0xf4, 0xe1, 0x1b, 0xbf, 0xdc, 0xf3,
-    0xbc, 0x00, 0xb1, 0x7f, 0xec, 0x08, 0xc6, 0x1b, 0xc4, 0xf2, 0xb1, 0x7e,
-    0x92, 0xf4, 0x81, 0x62, 0xf7, 0x80, 0xcb, 0x17, 0x4e, 0xcb, 0x15, 0xa3,
-    0xdc, 0x39, 0x3f, 0x50, 0xed, 0xff, 0xed, 0x1c, 0xa7, 0xb0, 0xf5, 0xee,
-    0x31, 0xd6, 0x2f, 0x63, 0x47, 0xac, 0x5f, 0xfb, 0x46, 0x99, 0xcf, 0xe6,
-    0xd9, 0xa5, 0x8a, 0xc4, 0x57, 0x92, 0x68, 0x87, 0xef, 0xfd, 0xf7, 0x20,
-    0x07, 0xff, 0xb6, 0xcb, 0x17, 0xe9, 0x08, 0x3f, 0xca, 0xc5, 0x46, 0xea,
-    0xe3, 0xe4, 0x57, 0x62, 0x48, 0x0d, 0x0c, 0xd3, 0x1f, 0xe2, 0x21, 0xd2,
-    0x93, 0x42, 0x73, 0x90, 0xe1, 0xf1, 0x70, 0x68, 0x37, 0xf1, 0x13, 0x74,
-    0x8a, 0x56, 0x2f, 0xfb, 0x3f, 0xf6, 0x87, 0xb3, 0xeb, 0x17, 0xe2, 0xcf,
-    0xb7, 0x96, 0x2f, 0xff, 0xf4, 0x83, 0x9b, 0xfc, 0x5d, 0xc2, 0x42, 0x2c,
-    0xdb, 0x04, 0xb1, 0x78, 0xce, 0x6e, 0xb1, 0x51, 0xe8, 0xac, 0x88, 0x9f,
-    0xec, 0xb7, 0xfa, 0x4a, 0x05, 0x98, 0x05, 0x8b, 0xee, 0xe0, 0x28, 0xf5,
-    0x8b, 0xfe, 0xc0, 0xbf, 0x80, 0x3c, 0xe9, 0x62, 0xff, 0x3b, 0x03, 0x5a,
-    0x17, 0xd6, 0x2f, 0xe9, 0x37, 0x09, 0xcd, 0x58, 0xbf, 0xb3, 0xdd, 0x5e,
-    0xcf, 0xac, 0x5f, 0xff, 0x4f, 0xb9, 0x11, 0x60, 0x5d, 0x8b, 0xb8, 0x71,
-    0x62, 0xa5, 0x56, 0x1c, 0x0b, 0xf2, 0x1c, 0xa6, 0x9a, 0x39, 0x8e, 0x8a,
-    0x3e, 0x74, 0x46, 0x9c, 0x2e, 0xf1, 0x8d, 0xfd, 0xb4, 0x53, 0xc1, 0x76,
-    0xb1, 0x70, 0xbe, 0xb1, 0x7f, 0x83, 0x26, 0x37, 0x5a, 0x95, 0x8a, 0x93,
-    0xff, 0xd8, 0xc9, 0x86, 0x2f, 0xff, 0xd1, 0x9a, 0x62, 0x7f, 0x46, 0x6a,
-    0x7c, 0x4c, 0x05, 0x8b, 0xe6, 0xfb, 0x8d, 0x62, 0xb7, 0x3f, 0xcf, 0x2d,
-    0x5a, 0x0b, 0x17, 0xf7, 0xcb, 0x06, 0x4c, 0xb1, 0x51, 0xa1, 0xbe, 0x61,
-    0x2b, 0xff, 0xfc, 0x64, 0x70, 0xbe, 0xfa, 0x33, 0x35, 0xef, 0x3e, 0x8c,
-    0x95, 0x8b, 0x12, 0xc5, 0x6c, 0x7f, 0x38, 0xd1, 0x7f, 0x85, 0x9d, 0x80,
-    0x98, 0xeb, 0x14, 0xc7, 0xad, 0xc2, 0x2b, 0xbb, 0x82, 0xc5, 0xff, 0x8a,
-    0x40, 0xde, 0x00, 0x65, 0x05, 0x8b, 0xe6, 0xf3, 0x6e, 0xb1, 0x5d, 0x9f,
-    0xdf, 0x86, 0x63, 0x8f, 0xec, 0x12, 0xc5, 0xf3, 0xc4, 0xf2, 0xb1, 0x6e,
-    0x2c, 0x50, 0xcd, 0xa6, 0x11, 0x5f, 0xb3, 0xd1, 0xd9, 0xe5, 0x8b, 0x18,
-    0xc7, 0x96, 0x44, 0x17, 0xc5, 0x27, 0x95, 0x8b, 0x3e, 0x8f, 0x23, 0xc4,
-    0xf7, 0xff, 0xf6, 0x6f, 0xd5, 0xe1, 0x77, 0x0e, 0x73, 0xd3, 0x3e, 0xe2,
-    0xc5, 0xfd, 0xd9, 0x67, 0xb0, 0x0b, 0x15, 0xc4, 0x48, 0x09, 0x8a, 0xfd,
-    0xe9, 0x9f, 0x71, 0x62, 0xfa, 0x67, 0xdc, 0x58, 0xbd, 0xdc, 0x39, 0xc3,
-    0xca, 0xf1, 0x45, 0x62, 0x28, 0x84, 0xdb, 0x4e, 0xa9, 0x57, 0xf0, 0xda,
-    0xf4, 0x6b, 0x35, 0x1b, 0xbb, 0x8c, 0x18, 0xd1, 0x92, 0x36, 0x86, 0x14,
-    0xcb, 0x0d, 0xda, 0x33, 0xb8, 0x46, 0x68, 0x39, 0x49, 0x59, 0x38, 0xd4,
-    0x6c, 0x6d, 0x5b, 0xc7, 0x25, 0xdc, 0x72, 0x6f, 0x0a, 0x68, 0xa5, 0x4a,
-    0x6a, 0x70, 0x38, 0xf1, 0x83, 0x7e, 0x76, 0x61, 0xa5, 0x1c, 0x02, 0x17,
-    0xc5, 0x48, 0x26, 0xe4, 0xbf, 0x4f, 0x4b, 0x79, 0x14, 0x61, 0xdd, 0x21,
-    0x54, 0x13, 0x0c, 0x74, 0x3d, 0x03, 0x84, 0xe7, 0x54, 0xa8, 0x8b, 0xfc,
-    0x58, 0x2e, 0xbf, 0x99, 0xa5, 0x8b, 0xbf, 0xf5, 0x8a, 0x19, 0xe8, 0x06,
-    0x71, 0x77, 0x57, 0xd6, 0x2f, 0xda, 0xdd, 0x9b, 0x75, 0x48, 0x5c, 0x5e,
-    0xd0, 0xbe, 0xb1, 0x7f, 0xf0, 0xb5, 0xac, 0x1c, 0x1e, 0x3b, 0xe2, 0x58,
-    0xbf, 0x78, 0x01, 0x94, 0x12, 0x2f, 0xff, 0xf3, 0xc1, 0xb7, 0xcf, 0xb9,
-    0x37, 0xa1, 0x84, 0xe3, 0x58, 0xbf, 0x73, 0xdf, 0x90, 0x2c, 0x5f, 0x9b,
-    0x69, 0xd0, 0x96, 0x2e, 0x63, 0xac, 0x5a, 0x32, 0x53, 0xcd, 0xd8, 0x8f,
-    0x06, 0xf4, 0x6e, 0x71, 0xe6, 0x49, 0xe1, 0x50, 0x97, 0xa3, 0x8a, 0x43,
-    0x29, 0xbc, 0xfd, 0xc1, 0x62, 0xee, 0x62, 0xc5, 0xf0, 0xa1, 0x9c, 0x58,
-    0xb8, 0x3d, 0x96, 0x28, 0x8d, 0xef, 0x88, 0xef, 0x13, 0x6e, 0xb1, 0x7a,
-    0x39, 0xc0, 0xb1, 0x7b, 0x1f, 0xeb, 0x17, 0x88, 0x86, 0xb1, 0x7d, 0x98,
-    0x5e, 0x58, 0xbd, 0x2d, 0xba, 0xc5, 0xd0, 0x8c, 0xd9, 0x34, 0x58, 0x0f,
-    0x62, 0xa1, 0xa4, 0x0e, 0x3b, 0xf2, 0x02, 0x1c, 0xe0, 0xe7, 0x88, 0x6a,
-    0x31, 0x7a, 0x9e, 0x13, 0x87, 0xdd, 0xc7, 0xb9, 0x7f, 0xdb, 0xea, 0x33,
-    0x91, 0x66, 0x6e, 0xb1, 0x7f, 0xfd, 0x84, 0xe3, 0x8c, 0xe1, 0x60, 0xff,
-    0x9a, 0x58, 0xbf, 0xf8, 0xed, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x46,
-    0x62, 0xfa, 0x32, 0x35, 0x63, 0x2c, 0x5f, 0xfc, 0x38, 0xc2, 0x13, 0x06,
-    0x3f, 0xb9, 0xab, 0x17, 0xfe, 0x29, 0x3c, 0x67, 0x27, 0xc2, 0xe2, 0xc5,
-    0xff, 0xee, 0xb0, 0x0d, 0xef, 0x7f, 0x08, 0x9b, 0xcb, 0x17, 0xbe, 0xfc,
-    0x58, 0xbe, 0xeb, 0x79, 0x3e, 0x58, 0xbf, 0xa7, 0x85, 0x3e, 0xe2, 0xc5,
-    0x75, 0xd9, 0xea, 0x9c, 0xa2, 0xee, 0xe3, 0x45, 0x8a, 0x8d, 0xd3, 0x07,
-    0x8d, 0x13, 0xa3, 0x53, 0x96, 0x8a, 0x6f, 0xde, 0xd0, 0xa7, 0xa2, 0xc5,
-    0xff, 0x8d, 0x9c, 0xd1, 0x98, 0x2d, 0x6c, 0xb1, 0x74, 0x9d, 0x62, 0xfd,
-    0x85, 0xdf, 0xba, 0xc5, 0x8b, 0x82, 0xd9, 0x62, 0xba, 0xd4, 0x66, 0x46,
-    0xa2, 0xb8, 0x21, 0x60, 0xbf, 0x65, 0xd6, 0xe8, 0xb1, 0x76, 0xb6, 0x58,
-    0xbf, 0x3f, 0x79, 0x9b, 0x2c, 0x50, 0x8f, 0x0b, 0xa0, 0xcd, 0x0c, 0xfe,
-    0xb1, 0x5a, 0xe8, 0xe8, 0xdd, 0x62, 0xff, 0xe2, 0xc7, 0xd3, 0xec, 0xc7,
-    0x3b, 0xac, 0x5c, 0x17, 0x96, 0x2a, 0x36, 0x44, 0xef, 0x5d, 0x90, 0xc6,
-    0xb2, 0x01, 0xa1, 0xdf, 0x46, 0xfd, 0x6f, 0x25, 0x62, 0xf4, 0x6f, 0x1a,
-    0xe3, 0x5a, 0xc5, 0xba, 0xeb, 0x1b, 0x9e, 0xe7, 0x5c, 0x2d, 0xb4, 0x4b,
-    0x17, 0x4f, 0x16, 0x2e, 0x8d, 0xa0, 0xb1, 0x70, 0x7c, 0x58, 0xae, 0xbb,
-    0x44, 0xde, 0xc7, 0x7d, 0x89, 0xc4, 0x2f, 0xe1, 0xdb, 0xe8, 0xdb, 0x6c,
-    0x09, 0x62, 0xe6, 0xe2, 0xc5, 0xfe, 0x6e, 0xf8, 0xc4, 0x2c, 0x58, 0xbf,
-    0xf4, 0x33, 0xff, 0x68, 0x3b, 0x92, 0xc5, 0x69, 0x10, 0xe0, 0x17, 0xf1,
-    0x9d, 0xd1, 0xd1, 0xba, 0xc5, 0xfb, 0x8e, 0x4d, 0xb2, 0xc5, 0xff, 0xbe,
-    0xfe, 0xe3, 0x77, 0xb6, 0x04, 0xb1, 0x7f, 0xee, 0x93, 0xf7, 0x98, 0xa2,
-    0x9d, 0xd6, 0x2a, 0x37, 0x4e, 0xbb, 0xad, 0x85, 0x8c, 0x6c, 0x61, 0xd7,
-    0x08, 0x37, 0x28, 0x74, 0x2b, 0xa3, 0xa3, 0x75, 0x8b, 0x1d, 0x62, 0xe6,
-    0x82, 0xc5, 0x39, 0xa9, 0xf8, 0x95, 0xfb, 0xc4, 0xfd, 0xf9, 0x62, 0xba,
-    0xe2, 0x24, 0xb7, 0x49, 0x0c, 0x82, 0xff, 0x00, 0xe1, 0xe9, 0xf6, 0x95,
-    0x8b, 0xe3, 0xb7, 0xa5, 0x62, 0xff, 0xff, 0xef, 0x86, 0x38, 0xcf, 0xe7,
-    0xb2, 0x4b, 0xdc, 0x2c, 0x1f, 0xe7, 0xa2, 0xc5, 0x46, 0xe8, 0xcf, 0x8d,
-    0x46, 0xdd, 0x08, 0xad, 0x12, 0xc5, 0xfa, 0x46, 0x18, 0x38, 0xb1, 0x68,
-    0xdf, 0xe6, 0xf4, 0x84, 0xef, 0xee, 0x7e, 0x4e, 0xe3, 0x58, 0xb9, 0x89,
-    0x62, 0xb8, 0x78, 0x9e, 0x2e, 0xb9, 0x86, 0xb1, 0x7f, 0xfc, 0x6f, 0x5c,
-    0xeb, 0x7a, 0xe6, 0x75, 0xc8, 0xd7, 0xd7, 0x3a, 0xce, 0xb9, 0xd6, 0xf5,
-    0xd5, 0x62, 0xfd, 0x91, 0x42, 0x4e, 0xb1, 0x51, 0xba, 0x6c, 0x11, 0xb3,
-    0x7f, 0x5c, 0x22, 0xeb, 0xa8, 0xb8, 0x70, 0x8f, 0xbe, 0xeb, 0x23, 0x5f,
-    0x25, 0x62, 0xc2, 0x58, 0xae, 0xba, 0x9e, 0x03, 0x97, 0x5e, 0xeb, 0xb8,
-    0xd7, 0x1a, 0xd6, 0x2e, 0xf6, 0x2c, 0x54, 0x6b, 0x3c, 0x8e, 0xcc, 0x6f,
-    0x13, 0x47, 0x2c, 0x5d, 0x1d, 0x1b, 0xac, 0x5f, 0xff, 0xff, 0xdd, 0x7f,
-    0x73, 0xd7, 0x3a, 0xec, 0x7b, 0xf4, 0xd4, 0x22, 0xe8, 0x2e, 0xba, 0xc6,
-    0xae, 0xbe, 0x35, 0xf5, 0xd4, 0xc3, 0x3f, 0x1c, 0xb1, 0x6f, 0xac, 0x5f,
-    0xf4, 0xed, 0xa6, 0xfc, 0x9d, 0xd6, 0x2e, 0xcf, 0xac, 0x51, 0x1e, 0x87,
-    0x8e, 0x6f, 0xf9, 0xa7, 0xd9, 0xf9, 0x70, 0x2c, 0x5f, 0xff, 0xb5, 0x3f,
-    0x9c, 0xdc, 0x6e, 0x5b, 0x1e, 0x60, 0xb1, 0x73, 0xfb, 0xc8, 0x8d, 0x0c,
-    0xde, 0xf0, 0x24, 0x0b, 0x17, 0xfd, 0x81, 0x16, 0x1b, 0xf6, 0x8f, 0x58,
-    0xbe, 0xcd, 0x9a, 0x25, 0x8a, 0xc3, 0xfe, 0x21, 0xde, 0xa3, 0xdb, 0xc6,
-    0x1e, 0x3d, 0x62, 0xfe, 0x9e, 0xa9, 0x2e, 0xa9, 0x58, 0xbd, 0xdb, 0x9d,
-    0x62, 0xfd, 0x2e, 0x3c, 0x3a, 0xc5, 0xfa, 0x2c, 0xe9, 0x3c, 0x58, 0xa9,
-    0x3d, 0x26, 0x27, 0xad, 0x91, 0xc9, 0xa2, 0x2f, 0x99, 0x13, 0x85, 0xfd,
-    0xcd, 0x4e, 0x7b, 0x8b, 0x16, 0x12, 0xc5, 0x49, 0xe0, 0x61, 0x75, 0xcf,
-    0xb2, 0xc5, 0xfe, 0x90, 0xfe, 0xf0, 0x93, 0xac, 0x54, 0x0f, 0x33, 0x83,
-    0x17, 0x9a, 0x2e, 0x2c, 0x5f, 0xd1, 0x4b, 0x0f, 0x09, 0x62, 0xf0, 0xf2,
-    0x3d, 0x62, 0xff, 0xfb, 0x76, 0xd6, 0x0e, 0x60, 0xff, 0x7d, 0x41, 0x62,
-    0x9c, 0xfc, 0x18, 0x82, 0x8e, 0x8b, 0xd0, 0x42, 0x76, 0xfa, 0x74, 0x66,
-    0xcb, 0x17, 0xf0, 0xd8, 0xfa, 0x9e, 0x2c, 0x56, 0x1f, 0xdf, 0xca, 0x18,
-    0x96, 0xff, 0xdd, 0x04, 0xdb, 0x8d, 0xfa, 0x48, 0xd6, 0x2f, 0xe9, 0x3b,
-    0x42, 0x7c, 0xb1, 0x7f, 0xf4, 0x9d, 0xbd, 0x9d, 0x80, 0xe1, 0xfd, 0x62,
-    0xff, 0xf6, 0xfa, 0x16, 0xdd, 0xf1, 0xf5, 0xbf, 0xf1, 0x62, 0xf0, 0x03,
-    0xf2, 0xc5, 0xf3, 0xf4, 0x60, 0x2c, 0x54, 0xa2, 0x4f, 0x14, 0x3c, 0x3f,
-    0x7f, 0xf6, 0x7d, 0x87, 0xf7, 0x30, 0xf9, 0xba, 0xc5, 0x41, 0x5a, 0x10,
-    0xe3, 0x56, 0xc2, 0xd3, 0x51, 0x3e, 0x5a, 0x50, 0xda, 0xe1, 0x75, 0xf3,
-    0xec, 0x22, 0x58, 0xbf, 0x66, 0xd8, 0x08, 0x96, 0x28, 0xc3, 0xcd, 0xf1,
-    0x1d, 0xff, 0xf4, 0x5f, 0x9e, 0x8f, 0xa9, 0x92, 0xf7, 0x25, 0x62, 0xfc,
-    0xfd, 0x46, 0xbe, 0xeb, 0x17, 0xfc, 0x28, 0x71, 0x8e, 0xc4, 0x05, 0x8b,
-    0x9f, 0xcb, 0x16, 0xdd, 0x62, 0x8c, 0x35, 0x5d, 0x68, 0xbd, 0x3a, 0x61,
-    0x1a, 0x51, 0x62, 0xd0, 0x31, 0xdf, 0x81, 0x3c, 0xce, 0xd6, 0x2f, 0x8c,
-    0x76, 0x89, 0x62, 0xb4, 0x79, 0xbc, 0x29, 0xb1, 0xd6, 0x2a, 0x4d, 0xa0,
-    0xc8, 0xaf, 0xf1, 0x98, 0x4d, 0xa0, 0x47, 0x2c, 0x5c, 0x50, 0x58, 0xbd,
-    0xa9, 0x35, 0x62, 0xff, 0xf9, 0xbf, 0x9d, 0x83, 0xe1, 0x37, 0xe2, 0xf8,
-    0x96, 0x29, 0xd1, 0x13, 0x10, 0xb9, 0xc7, 0xaf, 0xf0, 0xf4, 0xc0, 0x6c,
-    0xd2, 0xc5, 0xfd, 0x9c, 0x90, 0xca, 0x56, 0x2f, 0xfd, 0xe6, 0x79, 0xd8,
-    0x5e, 0x60, 0xd6, 0x2e, 0xe1, 0xd6, 0x28, 0x69, 0xd4, 0x64, 0x30, 0x1c,
-    0xc3, 0xe6, 0x6c, 0x5a, 0x24, 0x0b, 0x62, 0xc5, 0xcc, 0x75, 0x8a, 0xe1,
-    0xa8, 0xea, 0x11, 0xbb, 0xab, 0xcb, 0x16, 0xeb, 0xd6, 0x2c, 0x09, 0x36,
-    0x42, 0x1b, 0xbe, 0xc3, 0x5f, 0x4b, 0x17, 0x8e, 0xde, 0x58, 0xb7, 0x58,
-    0xb1, 0x6e, 0xbd, 0x62, 0xfe, 0x9e, 0x93, 0xe6, 0xe2, 0xc5, 0x61, 0xfd,
-    0x00, 0x74, 0x85, 0xf8, 0x2f, 0x7f, 0xf1, 0x80, 0x00, 0xb9, 0xa3, 0x0c,
-    0xfc, 0x72, 0xc5, 0xff, 0xbb, 0xfe, 0x72, 0x79, 0xc6, 0xfa, 0xc5, 0xfa,
-    0x38, 0x64, 0xc1, 0x2c, 0x5f, 0xa7, 0x8f, 0x31, 0x2c, 0x5f, 0xfc, 0x66,
-    0xb3, 0xcd, 0xd9, 0x9e, 0xc0, 0x2c, 0x54, 0x47, 0xe0, 0x72, 0x8a, 0x94,
-    0xe1, 0xce, 0x74, 0xc9, 0xde, 0x40, 0x14, 0x27, 0x2f, 0xe6, 0xda, 0x4a,
-    0x40, 0xb1, 0x4b, 0x04, 0x6b, 0x6f, 0xfe, 0x89, 0xc8, 0x46, 0x3f, 0x70,
-    0x6f, 0x2c, 0x5f, 0xff, 0xdb, 0x94, 0x9c, 0xc9, 0xd6, 0x9f, 0xa6, 0x99,
-    0x80, 0xb1, 0x7e, 0x83, 0x79, 0x8d, 0x58, 0xa9, 0x44, 0x3e, 0x2f, 0x5f,
-    0x16, 0x02, 0x56, 0x28, 0x8f, 0x0b, 0xa1, 0x0d, 0xe1, 0xe0, 0xd6, 0x29,
-    0x62, 0xfb, 0x3d, 0x80, 0x58, 0xb1, 0xa0, 0x35, 0xc4, 0x19, 0x58, 0x7e,
-    0x4c, 0x97, 0x7c, 0xc7, 0x78, 0x96, 0x2f, 0xe7, 0x09, 0xf9, 0x9b, 0xac,
-    0x5f, 0x4f, 0x70, 0xc5, 0x8a, 0x95, 0x47, 0x4f, 0x18, 0x86, 0xa1, 0x2a,
-    0xc4, 0x1c, 0x23, 0xf1, 0x7d, 0xa5, 0x62, 0xf7, 0xa6, 0x0b, 0x17, 0xfe,
-    0xd8, 0x4d, 0x16, 0x3e, 0x85, 0x1e, 0xb1, 0x70, 0xa0, 0xb1, 0x46, 0xa2,
-    0x29, 0xc4, 0x58, 0x77, 0xa2, 0x25, 0xf3, 0xec, 0x28, 0x96, 0x2f, 0x1e,
-    0x60, 0xb1, 0x7b, 0x8d, 0x12, 0xc5, 0x49, 0xbb, 0xf0, 0xed, 0xfa, 0x2e,
-    0xb7, 0xec, 0x4b, 0x17, 0xfb, 0x40, 0x2c, 0xe4, 0xe9, 0x62, 0xe3, 0xca,
-    0xc5, 0xfa, 0x7e, 0x21, 0xca, 0xc5, 0x46, 0x22, 0x82, 0x4b, 0xb0, 0xcf,
-    0xe2, 0xf4, 0x63, 0x6a, 0x23, 0x1b, 0x8f, 0xf5, 0xd9, 0x07, 0x5c, 0x86,
-    0x76, 0xcc, 0x50, 0x85, 0x70, 0xe1, 0x5b, 0x91, 0x8a, 0x6e, 0xfb, 0xdb,
-    0x63, 0xcb, 0x64, 0x8a, 0x17, 0xba, 0x8c, 0xac, 0xf0, 0xbd, 0xfc, 0x79,
-    0x0d, 0x08, 0x20, 0x2b, 0x75, 0xe4, 0xc5, 0x28, 0x93, 0x8f, 0x7e, 0x94,
-    0xab, 0xd2, 0x1d, 0x61, 0x1f, 0x06, 0xc1, 0xd5, 0x0c, 0x0b, 0xe6, 0x80,
-    0x67, 0x58, 0xbd, 0xb9, 0x01, 0x62, 0xda, 0xd1, 0xe1, 0x70, 0x92, 0xfc,
-    0x29, 0xf9, 0x4a, 0xc5, 0xe6, 0x2d, 0xd6, 0x2f, 0x78, 0xa5, 0x62, 0xf8,
-    0x8b, 0x3c, 0xb1, 0x78, 0xb3, 0xb5, 0x8b, 0x76, 0xb1, 0x7c, 0xc1, 0xe6,
-    0xcb, 0x15, 0x86, 0xdf, 0xe2, 0x77, 0xa2, 0xfc, 0xac, 0x5d, 0x0f, 0x2c,
-    0x5f, 0xc2, 0x6d, 0x8a, 0x7b, 0x58, 0xae, 0xb5, 0x31, 0x69, 0x1c, 0xd8,
-    0x84, 0x6a, 0x8e, 0x40, 0x01, 0xe2, 0x18, 0xae, 0x27, 0x36, 0x14, 0x66,
-    0x77, 0xc5, 0x14, 0x8d, 0x62, 0xee, 0xfc, 0xb1, 0x7d, 0xf8, 0xa4, 0x6b,
-    0x17, 0xba, 0xd1, 0x4a, 0xc5, 0xed, 0x6c, 0x35, 0x8b, 0xec, 0x00, 0x7e,
-    0x58, 0xbf, 0x6a, 0x43, 0x62, 0x58, 0xa1, 0x9f, 0x5f, 0x63, 0xe0, 0x24,
-    0xa9, 0x56, 0x64, 0x32, 0x8c, 0x8f, 0x09, 0xca, 0xe2, 0x23, 0x61, 0x90,
-    0x12, 0x0a, 0x11, 0xb7, 0xe2, 0x1f, 0xc3, 0x8e, 0x58, 0xbf, 0xf3, 0x67,
-    0x53, 0xe8, 0xd1, 0x67, 0xd6, 0x2f, 0x8a, 0x70, 0x6b, 0x17, 0x4f, 0x6b,
-    0x14, 0x69, 0xb9, 0xf9, 0x0d, 0xfa, 0x4e, 0x59, 0x12, 0xc5, 0xfc, 0xf8,
-    0x43, 0xfc, 0xac, 0x58, 0xeb, 0x16, 0x3a, 0xc5, 0xd2, 0x4b, 0x15, 0xb1,
-    0xa8, 0x08, 0x4a, 0xf7, 0xf2, 0x25, 0x8a, 0x1a, 0x33, 0xf7, 0x28, 0x8f,
-    0x2c, 0xe1, 0xd7, 0x88, 0xe9, 0x62, 0xff, 0xc4, 0xdf, 0x92, 0x6f, 0xc8,
-    0x16, 0x2f, 0xe9, 0x2f, 0x7d, 0xc6, 0xb1, 0x78, 0x7d, 0x25, 0x62, 0xfd,
-    0x24, 0x2c, 0xfa, 0xc5, 0x49, 0xe3, 0x68, 0x7e, 0xec, 0x25, 0x8b, 0xfb,
-    0x1f, 0x7d, 0xd8, 0x6b, 0x16, 0x68, 0x1e, 0x2f, 0x62, 0xd7, 0xda, 0x9c,
-    0x25, 0x8b, 0xe6, 0xf4, 0x00, 0xb1, 0x7b, 0xdc, 0xc5, 0x8b, 0xff, 0x7b,
-    0x0e, 0x4c, 0x69, 0x60, 0x16, 0x29, 0x62, 0xfc, 0x59, 0x13, 0xec, 0xb1,
-    0x61, 0x76, 0x6d, 0x4e, 0x19, 0x7b, 0x58, 0x4b, 0x16, 0x12, 0xc5, 0xfe,
-    0x7d, 0xdb, 0x35, 0x9e, 0x58, 0xa9, 0x3e, 0x10, 0x0e, 0x70, 0x4a, 0xf0,
-    0xa3, 0x72, 0x58, 0xa1, 0xaa, 0xea, 0x34, 0xf3, 0x77, 0x3d, 0x33, 0x1c,
-    0xa3, 0xe4, 0x2c, 0x46, 0x43, 0xbc, 0x73, 0xf4, 0x22, 0x7a, 0x8b, 0xaf,
-    0xfb, 0x53, 0x90, 0x9f, 0xc8, 0x16, 0x2f, 0xff, 0x19, 0xf6, 0x7f, 0x00,
-    0x44, 0x4d, 0x05, 0x8b, 0xfc, 0x1f, 0x9f, 0xa4, 0x96, 0xeb, 0x17, 0xff,
-    0x9f, 0x82, 0x3e, 0x6f, 0xf9, 0x2f, 0x71, 0x62, 0xf4, 0x04, 0x35, 0x8b,
-    0x39, 0x88, 0xa0, 0x81, 0xbc, 0x49, 0x77, 0xd9, 0xc9, 0xd2, 0xc5, 0xfe,
-    0x3e, 0x71, 0x9b, 0xb8, 0x2c, 0x51, 0x1e, 0xb0, 0x64, 0x57, 0x46, 0xfd,
-    0x6a, 0xc5, 0xf3, 0xee, 0xe3, 0x58, 0xbf, 0xef, 0xcb, 0x8d, 0xf9, 0xb3,
-    0x2c, 0x57, 0x5c, 0x3f, 0xe9, 0x22, 0x72, 0x3b, 0xb5, 0xb2, 0xc5, 0x4b,
-    0x20, 0x6b, 0x62, 0xd8, 0x3d, 0xe4, 0x3c, 0x77, 0x4e, 0x79, 0x5e, 0xda,
-    0x85, 0x11, 0xce, 0x3f, 0x0e, 0xa0, 0x42, 0x34, 0xa1, 0x41, 0xe3, 0x3b,
-    0xff, 0xff, 0xff, 0xff, 0xdd, 0x73, 0xad, 0xce, 0xb9, 0x1b, 0x75, 0xdf,
-    0x5d, 0xef, 0xd7, 0xcc, 0x6b, 0x8d, 0xb5, 0xb7, 0x56, 0x08, 0x7d, 0x75,
-    0x98, 0xee, 0xc3, 0xfc, 0x6d, 0x33, 0x1b, 0x47, 0xc6, 0xaf, 0x18, 0x67,
-    0xe3, 0x96, 0x2f, 0xf8, 0x87, 0x13, 0x97, 0x70, 0xe2, 0xc5, 0xff, 0x6b,
-    0x52, 0x5e, 0xfe, 0x41, 0x62, 0xff, 0xfb, 0x5f, 0x09, 0x87, 0x9b, 0x0b,
-    0xda, 0xd4, 0xac, 0x5f, 0xfe, 0x87, 0xc5, 0x3a, 0x8c, 0xfb, 0xee, 0xda,
-    0x58, 0xbf, 0x07, 0xae, 0x31, 0x2c, 0x57, 0x67, 0xf1, 0xf4, 0xfa, 0x94,
-    0xd8, 0xb0, 0xed, 0x8e, 0x41, 0x0c, 0xbb, 0xfc, 0x1c, 0x5c, 0x9f, 0x48,
-    0xd6, 0x2d, 0xc5, 0x8b, 0xc2, 0xd0, 0x16, 0x2e, 0x14, 0x0c, 0x36, 0x1b,
-    0x89, 0x5f, 0xfb, 0xf8, 0x58, 0x6e, 0x16, 0x0d, 0x62, 0xff, 0xc1, 0x4f,
-    0x86, 0xf1, 0xfc, 0x93, 0xac, 0x5f, 0xdf, 0x7f, 0x14, 0x9d, 0x62, 0xbb,
-    0x3f, 0x02, 0x43, 0xbe, 0x6f, 0x73, 0x65, 0x8b, 0xee, 0x67, 0x7e, 0x58,
-    0xbd, 0x14, 0x84, 0xb1, 0x7c, 0xdc, 0x71, 0xac, 0x56, 0x1e, 0x08, 0x43,
-    0xf7, 0xdf, 0x92, 0xd9, 0x62, 0xfe, 0xf7, 0xb0, 0xdf, 0x89, 0x62, 0x86,
-    0x7a, 0x78, 0x47, 0x7c, 0xe5, 0xee, 0x2c, 0x5f, 0xff, 0xf1, 0xdf, 0x5f,
-    0x17, 0x21, 0x3d, 0x35, 0x25, 0xef, 0xe4, 0x16, 0x2a, 0x08, 0x8b, 0x72,
-    0x2b, 0xff, 0x3f, 0x9f, 0x77, 0x1f, 0xb3, 0x75, 0x8a, 0xd9, 0x58, 0x54,
-    0x0b, 0xf2, 0x15, 0xb1, 0x11, 0x68, 0x93, 0xec, 0xa4, 0xeb, 0xe8, 0x56,
-    0x75, 0x11, 0x5c, 0x71, 0xac, 0x5e, 0x6d, 0x6c, 0xb1, 0x7c, 0xda, 0x68,
-    0x2c, 0x56, 0xe7, 0x80, 0x43, 0xd7, 0x3f, 0x45, 0x8b, 0xba, 0x84, 0xb1,
-    0x7d, 0xef, 0x0b, 0xcb, 0x17, 0xc4, 0x3f, 0xc9, 0xcd, 0xfb, 0x0d, 0xd4,
-    0xa2, 0xc0, 0x64, 0x4c, 0xb1, 0x7f, 0xc1, 0x7f, 0x3b, 0x80, 0xa4, 0x96,
-    0x2f, 0x48, 0xe5, 0x62, 0xfd, 0x9f, 0xfe, 0x01, 0x62, 0xdb, 0x9c, 0xf1,
-    0x08, 0x72, 0xf9, 0x82, 0x68, 0xf5, 0x8a, 0x94, 0x66, 0xb3, 0xf9, 0x14,
-    0x5f, 0x85, 0xbf, 0xdc, 0x25, 0x8b, 0xff, 0xda, 0xf1, 0xb2, 0x50, 0x0f,
-    0xaa, 0x4a, 0x0b, 0x17, 0xde, 0x8e, 0xcf, 0xac, 0x5f, 0xc1, 0x19, 0xee,
-    0x60, 0x4b, 0x17, 0xed, 0xa0, 0xe5, 0x8b, 0x17, 0xff, 0xf9, 0x8b, 0x72,
-    0xc1, 0xfc, 0x46, 0x7e, 0x61, 0xa9, 0xd9, 0x62, 0xa5, 0x33, 0x2c, 0x4f,
-    0x72, 0x66, 0x32, 0x11, 0x45, 0xd3, 0xf5, 0x8b, 0xf8, 0x32, 0x9f, 0xcc,
-    0x16, 0x2f, 0xff, 0xe3, 0x4b, 0x00, 0x2e, 0x19, 0x07, 0xfc, 0xee, 0x4c,
-    0xb1, 0x7e, 0xe4, 0xc7, 0xea, 0x56, 0x28, 0xd4, 0x66, 0x9c, 0x5d, 0x8b,
-    0x80, 0xbb, 0x7f, 0xcf, 0xbc, 0x50, 0xfc, 0x91, 0xab, 0x17, 0xf6, 0xe6,
-    0x7d, 0x89, 0xd6, 0x2f, 0x49, 0xfc, 0xb1, 0x44, 0x88, 0x81, 0x1e, 0x04,
-    0x5f, 0x7f, 0xf4, 0x59, 0xd4, 0x59, 0xd0, 0x78, 0xdb, 0xac, 0x5f, 0xec,
-    0x0a, 0x7c, 0x4d, 0xc5, 0x8b, 0xf1, 0x61, 0xda, 0x0b, 0x17, 0xff, 0xfe,
-    0xe7, 0x24, 0x01, 0x9f, 0x8f, 0x84, 0x28, 0x67, 0x02, 0x6e, 0xd6, 0x28,
-    0xd4, 0x4b, 0x04, 0x4f, 0x79, 0xfe, 0xeb, 0x15, 0x29, 0xc2, 0x61, 0x83,
-    0xa5, 0x34, 0x32, 0x7c, 0x4b, 0x62, 0x58, 0xb7, 0xd6, 0x2a, 0x4d, 0x1f,
-    0x04, 0x6f, 0xb3, 0x71, 0xe2, 0xc5, 0xd3, 0xa5, 0x8a, 0x58, 0x81, 0x6f,
-    0x7e, 0x61, 0xfe, 0x49, 0x62, 0xf8, 0x86, 0x1f, 0x6b, 0x17, 0xe7, 0xd8,
-    0xf3, 0xba, 0xc5, 0xc2, 0xf2, 0xc5, 0xe6, 0xd4, 0x0c, 0x47, 0x1b, 0x9d,
-    0x1c, 0x6d, 0x89, 0xfc, 0x4b, 0x1c, 0x55, 0x7f, 0x98, 0xa2, 0xcd, 0x85,
-    0x05, 0x8a, 0x8d, 0x99, 0xfa, 0x13, 0x2a, 0x60, 0x68, 0x19, 0x2d, 0xc0,
-    0xd8, 0x46, 0xbc, 0x61, 0x1a, 0x87, 0xd9, 0xcb, 0x7f, 0x1a, 0xeb, 0x46,
-    0x28, 0x52, 0x92, 0x7c, 0xde, 0x28, 0xc0, 0xc2, 0x6a, 0xbf, 0xce, 0x50,
-    0xe3, 0x67, 0x16, 0x2f, 0xfd, 0xa0, 0x66, 0xff, 0x92, 0xf7, 0x16, 0x2f,
-    0xef, 0xbc, 0x78, 0x83, 0x89, 0x62, 0xfb, 0x7c, 0xef, 0xcb, 0x17, 0x1a,
-    0xc6, 0x1e, 0xcf, 0x43, 0x4b, 0x98, 0x6b, 0x17, 0x74, 0x8f, 0x58, 0xbf,
-    0xe0, 0x4c, 0x06, 0x26, 0xd4, 0x16, 0x2f, 0xec, 0x1e, 0x1b, 0x3c, 0x58,
-    0xa3, 0x51, 0x9b, 0xa3, 0x16, 0x17, 0x21, 0xde, 0x87, 0x57, 0xdc, 0x13,
-    0x71, 0x62, 0xfd, 0xde, 0xee, 0x6b, 0xac, 0x5f, 0xf6, 0xb4, 0xf9, 0xd0,
-    0x85, 0xc3, 0x0f, 0x3b, 0xc4, 0x74, 0xb1, 0x7f, 0xfd, 0xc7, 0x8e, 0xcd,
-    0xfe, 0xe4, 0x42, 0xd6, 0xcb, 0x15, 0xa3, 0xe0, 0xf0, 0x65, 0xfd, 0xec,
-    0x3f, 0x78, 0x75, 0x8a, 0x94, 0xc0, 0xf2, 0x16, 0x4e, 0x45, 0x7f, 0x60,
-    0x3f, 0x38, 0x35, 0x8b, 0xfc, 0x73, 0xb4, 0x38, 0xf0, 0x58, 0xbf, 0xc6,
-    0x99, 0x3d, 0x83, 0x52, 0xb1, 0x52, 0x89, 0x8c, 0x2d, 0x63, 0x4a, 0x95,
-    0x7f, 0x4f, 0x1b, 0x37, 0xe3, 0x9c, 0x28, 0x65, 0xdf, 0xf0, 0x44, 0xc6,
-    0xe0, 0xdc, 0x96, 0x2f, 0xf1, 0x7b, 0x9b, 0xfd, 0xb4, 0xb1, 0x7f, 0xfb,
-    0xa6, 0x0f, 0xf3, 0xd0, 0xf2, 0x4c, 0x1a, 0xc5, 0xa2, 0x58, 0xac, 0x3e,
-    0x11, 0x27, 0x5c, 0x37, 0x58, 0xbf, 0xbe, 0xe1, 0x49, 0x0d, 0x62, 0xd0,
-    0xc3, 0xc5, 0xdc, 0x5e, 0xf6, 0xa7, 0xcb, 0x17, 0xd0, 0xe3, 0xc1, 0x62,
-    0xc3, 0xd1, 0xe0, 0x30, 0xed, 0x4a, 0x78, 0x8e, 0x73, 0xa8, 0x4b, 0x33,
-    0x30, 0x9a, 0x2f, 0x84, 0x5e, 0xe2, 0xc5, 0xfd, 0xc1, 0x39, 0x3f, 0x16,
-    0x2f, 0x4e, 0xa5, 0x62, 0x8c, 0x3c, 0x9f, 0x96, 0xdf, 0x1a, 0x67, 0x38,
-    0xb1, 0x74, 0xee, 0xb1, 0x5b, 0xa3, 0x37, 0x4d, 0x84, 0x47, 0xd4, 0x4d,
-    0x7a, 0x11, 0xc1, 0x2c, 0x5f, 0xda, 0xf7, 0xa7, 0x38, 0xb1, 0x67, 0x58,
-    0xac, 0x37, 0xe0, 0x2e, 0xb6, 0xeb, 0x17, 0xf7, 0x9c, 0x9c, 0x1c, 0x58,
-    0xaf, 0x1e, 0x00, 0x84, 0xee, 0x17, 0x96, 0x2f, 0xc7, 0x87, 0xc3, 0xe2,
-    0xc5, 0xb4, 0x62, 0x31, 0x65, 0x82, 0x38, 0x88, 0x31, 0x8b, 0xf3, 0x04,
-    0x58, 0x35, 0x8a, 0x94, 0xe5, 0x5e, 0x32, 0x6d, 0x23, 0xdf, 0xf8, 0xa7,
-    0x73, 0x5b, 0x34, 0xe0, 0x58, 0xbf, 0xfe, 0xd3, 0xf4, 0x10, 0xf2, 0x13,
-    0xa0, 0x4e, 0x96, 0x2f, 0xee, 0x63, 0xeb, 0x4c, 0xb1, 0x7c, 0x60, 0x1b,
-    0xcb, 0x17, 0xff, 0xcd, 0x0f, 0x67, 0x70, 0x62, 0x86, 0x77, 0xe5, 0x8a,
-    0xe1, 0xfa, 0xf8, 0x92, 0xb6, 0x4d, 0x57, 0x47, 0xe0, 0x52, 0xf4, 0x28,
-    0xae, 0x9d, 0x2c, 0x5f, 0xcd, 0xf8, 0xc0, 0x82, 0x09, 0x22, 0xec, 0xe2,
-    0xc5, 0xb8, 0xe7, 0x99, 0xf3, 0x5b, 0xfb, 0xdd, 0xee, 0xff, 0x89, 0x62,
-    0xdb, 0x61, 0xec, 0xf0, 0x9e, 0xce, 0x04, 0x72, 0x14, 0x2f, 0x2f, 0xbf,
-    0x3d, 0xf5, 0x2c, 0x5e, 0x71, 0x75, 0xeb, 0x17, 0xf9, 0x8d, 0xe7, 0xbf,
-    0x90, 0x58, 0xbb, 0xb8, 0x44, 0x7a, 0xe4, 0x45, 0x7f, 0x9b, 0x51, 0xc2,
-    0xfb, 0xe9, 0x62, 0xa4, 0xf9, 0x84, 0x5f, 0x52, 0xa9, 0x64, 0x71, 0x94,
-    0x6e, 0x59, 0xf8, 0x72, 0x5c, 0xe3, 0x58, 0xbc, 0x2e, 0xe0, 0xb1, 0x43,
-    0x36, 0xdf, 0x17, 0xbf, 0xbb, 0xcf, 0x8b, 0xb0, 0x2c, 0x5b, 0xeb, 0x17,
-    0xf1, 0xf9, 0xf9, 0x2f, 0x2c, 0x5f, 0x6a, 0x7d, 0xc5, 0x8b, 0xdb, 0x7c,
-    0x4b, 0x17, 0xfe, 0xfb, 0x73, 0xf9, 0xd3, 0x3d, 0xc5, 0x8a, 0x93, 0xe0,
-    0x61, 0xfa, 0x74, 0x68, 0xc4, 0x5d, 0xf8, 0x41, 0xdf, 0x9c, 0x5b, 0xbe,
-    0xcb, 0x15, 0x04, 0xe5, 0x30, 0x87, 0x73, 0x1f, 0x43, 0x8e, 0x38, 0xd6,
-    0xff, 0xe9, 0x2d, 0xdb, 0xcc, 0x69, 0x86, 0xca, 0xc5, 0xff, 0xe6, 0xf0,
-    0x8c, 0xe7, 0xdc, 0x65, 0x31, 0xeb, 0x17, 0xf4, 0x9a, 0xde, 0x63, 0x56,
-    0x2f, 0x7a, 0x43, 0x58, 0xac, 0x3c, 0xd6, 0x2f, 0xa3, 0x53, 0x02, 0x02,
-    0x39, 0x42, 0x6e, 0xfc, 0x2f, 0x73, 0x3c, 0xb1, 0x77, 0xe2, 0x58, 0xbf,
-    0x07, 0xee, 0x4f, 0x96, 0x2f, 0x6d, 0xc2, 0x58, 0xa9, 0x3e, 0x18, 0x0c,
-    0xe8, 0xaa, 0xff, 0x1f, 0x37, 0x26, 0xcd, 0xd6, 0x2e, 0x14, 0x4b, 0x17,
-    0x43, 0x92, 0x79, 0xa0, 0x34, 0xbe, 0x3f, 0x03, 0xe2, 0xc5, 0xf8, 0xb6,
-    0x1c, 0xe9, 0x62, 0xff, 0xe1, 0x47, 0xfd, 0xcf, 0x31, 0xff, 0xcd, 0x96,
-    0x2f, 0x6e, 0x2d, 0xd6, 0x2a, 0x53, 0x62, 0xed, 0xed, 0xcb, 0x58, 0x94,
-    0x8a, 0x44, 0x99, 0x7f, 0xde, 0xf4, 0x9f, 0x30, 0x8d, 0x58, 0xbf, 0xfe,
-    0xf7, 0xf3, 0xab, 0xd9, 0xf2, 0xcf, 0x7d, 0xd6, 0x2b, 0xb4, 0x45, 0x91,
-    0xcd, 0xde, 0xe2, 0xc5, 0xf9, 0xbd, 0x09, 0x35, 0x62, 0xa0, 0x78, 0x24,
-    0x31, 0x7f, 0xb0, 0x03, 0x13, 0x6a, 0x0b, 0x17, 0xe6, 0x2f, 0x40, 0x0b,
-    0x15, 0x27, 0xfb, 0xb1, 0x08, 0x8d, 0x2f, 0xe6, 0x61, 0xf4, 0xc1, 0xac,
-    0x58, 0x25, 0x8b, 0x9b, 0x8b, 0x17, 0xf8, 0xbd, 0xf6, 0x87, 0xdd, 0x62,
-    0xf4, 0xf7, 0x05, 0x8b, 0x47, 0x39, 0xe8, 0xf8, 0xce, 0xcf, 0x1e, 0x89,
-    0x2e, 0x34, 0x5c, 0xdb, 0xaa, 0x4c, 0xf2, 0xf6, 0x10, 0xd6, 0x29, 0xd3,
-    0x11, 0xfc, 0x29, 0x58, 0xac, 0x22, 0x5b, 0xfd, 0x24, 0x6e, 0x85, 0x24,
-    0xb1, 0x7f, 0x01, 0x8a, 0x0e, 0x75, 0x8b, 0xb7, 0x75, 0x8a, 0x95, 0x61,
-    0x5b, 0x43, 0x84, 0x65, 0xfb, 0xc6, 0x80, 0xe8, 0x40, 0x33, 0x11, 0x6d,
-    0xf8, 0x19, 0x81, 0x71, 0x62, 0xf8, 0xd2, 0x90, 0x96, 0x2f, 0xef, 0x71,
-    0xbb, 0x0c, 0xeb, 0x15, 0xa3, 0xd5, 0xf9, 0x25, 0xff, 0xe2, 0xf4, 0x76,
-    0x45, 0x06, 0xd6, 0xc3, 0x95, 0x8b, 0xfd, 0x30, 0x7f, 0x4f, 0xb8, 0xb1,
-    0x7f, 0xb8, 0x23, 0xbf, 0x80, 0xcb, 0x17, 0x83, 0xfc, 0xac, 0x54, 0x0f,
-    0x48, 0x06, 0x97, 0x0d, 0x96, 0x2e, 0x6e, 0xa5, 0x8a, 0x19, 0xb1, 0x61,
-    0x7a, 0xfa, 0x3e, 0x0a, 0x10, 0xbe, 0x53, 0xbf, 0xa0, 0x1e, 0x7d, 0xbb,
-    0x58, 0xbf, 0xff, 0xce, 0x42, 0x6f, 0x19, 0x83, 0x33, 0x20, 0xe6, 0x9a,
-    0xcb, 0x17, 0xf3, 0xfb, 0xf8, 0x37, 0x58, 0xbe, 0x29, 0xce, 0xd6, 0x28,
-    0xd3, 0xcf, 0xf1, 0x6d, 0x18, 0xac, 0x82, 0x5f, 0xb0, 0x89, 0xe3, 0x47,
-    0x63, 0x4e, 0x18, 0x07, 0x0b, 0x2b, 0x79, 0x62, 0xfe, 0xd0, 0x02, 0x6f,
-    0xf1, 0x62, 0xff, 0x8d, 0x62, 0xce, 0x85, 0x9c, 0x58, 0xbf, 0xba, 0x16,
-    0x73, 0x09, 0x62, 0xfd, 0xdc, 0x1f, 0x09, 0x62, 0xd1, 0xeb, 0x15, 0x87,
-    0xd7, 0xa2, 0xee, 0x14, 0x5e, 0x78, 0x4a, 0xc5, 0x98, 0xc3, 0xca, 0xe1,
-    0x75, 0xb4, 0x6a, 0x62, 0xff, 0x87, 0x7d, 0xfe, 0x71, 0xe1, 0xc2, 0xcf,
-    0xac, 0x5f, 0xff, 0xff, 0x75, 0x49, 0x7b, 0x8f, 0xbe, 0x11, 0x93, 0xd5,
-    0xfc, 0xe1, 0x9e, 0x9e, 0xe0, 0xb1, 0x6d, 0x96, 0x2f, 0x42, 0x7b, 0x58,
-    0xbf, 0xff, 0xb9, 0x9b, 0xb1, 0x00, 0xcd, 0x49, 0x0b, 0xd3, 0xf5, 0x8b,
-    0x64, 0x47, 0xf5, 0xe1, 0xeb, 0xf7, 0x06, 0xf2, 0x4b, 0x15, 0x29, 0xcb,
-    0x39, 0xa1, 0xe1, 0x0c, 0x50, 0x8d, 0xf1, 0x45, 0xf8, 0xb3, 0xa3, 0xf6,
-    0xb1, 0x6d, 0x2c, 0x5f, 0xfb, 0xcf, 0x10, 0x4c, 0x39, 0xef, 0x8b, 0x15,
-    0xa3, 0xfe, 0x62, 0xae, 0x09, 0x54, 0x6e, 0xb8, 0x3b, 0x22, 0x4f, 0x1a,
-    0x3b, 0x47, 0x8c, 0x28, 0x68, 0x5f, 0x43, 0x8e, 0x4b, 0x17, 0xff, 0xdf,
-    0x9d, 0x19, 0xf9, 0xd8, 0x85, 0xb0, 0xb8, 0xb1, 0x7d, 0x20, 0x63, 0xac,
-    0x5d, 0x0e, 0x4a, 0x26, 0x06, 0x44, 0x4a, 0x97, 0x00, 0x0b, 0x17, 0xe1,
-    0x03, 0xcf, 0xb2, 0xc5, 0xe0, 0x82, 0x09, 0x22, 0xfd, 0x9b, 0x8f, 0x34,
-    0x91, 0x18, 0x68, 0x6f, 0xfb, 0xce, 0x5b, 0x66, 0xb2, 0x0b, 0x17, 0x43,
-    0x84, 0x7e, 0xa1, 0x9e, 0x5a, 0x0b, 0x17, 0xfd, 0xec, 0xd6, 0xd3, 0xd1,
-    0x8e, 0xb1, 0x52, 0x9c, 0x73, 0x9d, 0x1c, 0x61, 0xa1, 0x81, 0xe2, 0xe0,
-    0xc4, 0xaf, 0xf0, 0xff, 0x25, 0x38, 0x12, 0xc5, 0xff, 0x7d, 0x8f, 0xf9,
-    0x1b, 0xca, 0xc5, 0xff, 0xfb, 0xc6, 0xb7, 0x35, 0x3e, 0xfe, 0x1f, 0x35,
-    0x8b, 0x15, 0x04, 0x60, 0xf8, 0xcc, 0x23, 0x8b, 0xf1, 0x99, 0xf9, 0x1a,
-    0xc5, 0xfb, 0xa8, 0x47, 0xc1, 0xac, 0x5f, 0xfe, 0x37, 0xf3, 0x9d, 0xfb,
-    0x0e, 0xc4, 0x05, 0x8b, 0x85, 0x1b, 0x2c, 0x5f, 0xfd, 0xcf, 0x1b, 0x25,
-    0x0c, 0xd8, 0x50, 0x58, 0xae, 0xb4, 0xf9, 0x3c, 0x3b, 0x7f, 0xfd, 0xd0,
-    0x85, 0x0c, 0xe8, 0xfe, 0x9d, 0xf3, 0xeb, 0x17, 0xff, 0xf0, 0x8b, 0xdc,
-    0x92, 0x37, 0xee, 0x67, 0xf0, 0x0c, 0xb1, 0x7e, 0xce, 0x86, 0x40, 0xeb,
-    0x16, 0xf4, 0xa3, 0x72, 0x0a, 0x9f, 0x5c, 0xa9, 0x54, 0xdb, 0xb1, 0x8e,
-    0x14, 0xb9, 0x63, 0x42, 0xbc, 0x51, 0x81, 0xdf, 0xff, 0xc1, 0x37, 0x7c,
-    0xc3, 0xe7, 0x7e, 0x92, 0xf4, 0x76, 0x2c, 0x5f, 0xf4, 0x08, 0x40, 0x33,
-    0x73, 0x81, 0x62, 0xa0, 0x89, 0xde, 0xd8, 0x2e, 0x93, 0x56, 0x2f, 0x14,
-    0xc1, 0x62, 0xff, 0x49, 0x48, 0x21, 0xf7, 0x58, 0xbc, 0xec, 0x1a, 0xc5,
-    0x0c, 0xf3, 0xce, 0x65, 0x7f, 0x4c, 0x4e, 0x79, 0x89, 0x62, 0xf7, 0x9f,
-    0x65, 0x8b, 0xce, 0x0c, 0x58, 0xbf, 0xf4, 0x08, 0x4d, 0xcf, 0xe0, 0x19,
-    0x62, 0xdd, 0xc0, 0xf6, 0xb0, 0x72, 0x8d, 0x45, 0x03, 0x3c, 0x54, 0xa7,
-    0x77, 0xb1, 0x20, 0xc6, 0x1d, 0xaf, 0xc4, 0x42, 0x86, 0x7d, 0xe3, 0xe1,
-    0x2c, 0x5f, 0xf7, 0x70, 0x29, 0xce, 0x61, 0x2c, 0x5f, 0x86, 0x4c, 0xd1,
-    0x2c, 0x5f, 0xff, 0xff, 0x3f, 0x89, 0x80, 0xc4, 0x01, 0xfe, 0x43, 0x29,
-    0xe7, 0x32, 0x19, 0xf5, 0x8a, 0x74, 0x51, 0xb1, 0x45, 0x6e, 0x8f, 0xcf,
-    0xc3, 0x6e, 0xfe, 0xf8, 0x98, 0x11, 0xd8, 0xb1, 0x7f, 0xfd, 0x81, 0x7a,
-    0x70, 0xb7, 0x9f, 0x4f, 0x61, 0x2c, 0x5b, 0x16, 0x2b, 0x63, 0xe3, 0xe2,
-    0x95, 0x0d, 0x16, 0xfc, 0x84, 0xa5, 0xdf, 0xfa, 0xc5, 0xff, 0xf0, 0x3b,
-    0xf3, 0x37, 0x83, 0xf7, 0x04, 0x50, 0x58, 0xbc, 0x09, 0xd2, 0xc5, 0x49,
-    0xf8, 0x32, 0x9d, 0xff, 0xfe, 0xcd, 0x69, 0xe4, 0x06, 0x6f, 0xf7, 0x90,
-    0x14, 0x81, 0x62, 0xa3, 0x75, 0x65, 0x33, 0x18, 0xc3, 0xc3, 0x81, 0x8a,
-    0x39, 0x08, 0x8f, 0x10, 0x5d, 0xee, 0xd6, 0x2f, 0xff, 0xcf, 0xe9, 0x39,
-    0x31, 0xbf, 0x76, 0xd6, 0xa5, 0x62, 0x8e, 0x7d, 0xbd, 0x78, 0xcd, 0xf4,
-    0xfb, 0x36, 0x58, 0xbe, 0x80, 0x01, 0x2b, 0x17, 0xfa, 0x4c, 0xf6, 0x73,
-    0x92, 0xb1, 0x7a, 0x70, 0x96, 0x2f, 0x86, 0x2f, 0x71, 0x62, 0xc3, 0x01,
-    0xbf, 0x0c, 0x6e, 0xd1, 0xcb, 0x17, 0xfa, 0x7c, 0xfd, 0x24, 0xb7, 0x58,
-    0xbe, 0x9c, 0x28, 0x39, 0xe5, 0x70, 0x56, 0x8d, 0x4d, 0x87, 0xb2, 0x3d,
-    0x11, 0x93, 0x9f, 0x9c, 0xaf, 0x7c, 0x3e, 0x2c, 0x5f, 0x19, 0xf0, 0xc6,
-    0xb1, 0x76, 0x72, 0x07, 0x8b, 0xf1, 0xfa, 0x74, 0x5f, 0x14, 0x24, 0x6e,
-    0xce, 0xd6, 0x2f, 0x49, 0x1a, 0xb1, 0x7b, 0x4f, 0xe5, 0x8b, 0xfc, 0x59,
-    0xee, 0x0b, 0x50, 0x58, 0xa7, 0x3d, 0x13, 0x8e, 0xdf, 0x7f, 0xcd, 0xf5,
-    0x8a, 0x93, 0xc4, 0x72, 0x1a, 0xd9, 0xd7, 0x8e, 0x42, 0x70, 0xb0, 0x72,
-    0x84, 0x72, 0x31, 0xa3, 0x63, 0xd5, 0xde, 0x5f, 0x1f, 0x72, 0x85, 0x1e,
-    0x35, 0x58, 0xf3, 0x68, 0xa3, 0xec, 0xd4, 0xbe, 0xa3, 0xcb, 0x91, 0xfc,
-    0xe4, 0x60, 0x25, 0x43, 0x14, 0xb8, 0x9e, 0x4a, 0xb9, 0xf4, 0xb8, 0x51,
-    0x43, 0x63, 0xa4, 0xa4, 0x68, 0xe2, 0x60, 0xc6, 0x3a, 0xa1, 0x65, 0x76,
-    0xa5, 0x62, 0xd1, 0xba, 0xc5, 0xff, 0x66, 0x8b, 0x3a, 0x36, 0xa0, 0xb1,
-    0x76, 0x79, 0x62, 0xe2, 0x65, 0x8b, 0xc0, 0x7d, 0xd6, 0x2f, 0x14, 0xc1,
-    0x60, 0xc2, 0xfa, 0xb0, 0xf8, 0x1c, 0xd2, 0xc6, 0x62, 0x25, 0xcd, 0x77,
-    0xb7, 0x16, 0x2e, 0xee, 0x0b, 0x14, 0xe7, 0xaa, 0x02, 0xa8, 0xe1, 0x2b,
-    0xfc, 0x69, 0xa6, 0x9b, 0xd7, 0x58, 0xe8, 0xdd, 0x62, 0xf6, 0xa3, 0x4e,
-    0xa5, 0x8b, 0x9a, 0x0b, 0x17, 0xe2, 0xf6, 0x00, 0xeb, 0x17, 0xda, 0x79,
-    0xf2, 0xc5, 0xfd, 0xc2, 0xc8, 0xa4, 0xeb, 0x14, 0x03, 0xd0, 0xf1, 0x15,
-    0x1a, 0x99, 0x0b, 0xa5, 0x1c, 0x99, 0x85, 0xc4, 0xf1, 0x74, 0xf9, 0x62,
-    0xf8, 0x0c, 0x17, 0x96, 0x2f, 0xff, 0x70, 0x84, 0xc1, 0xf9, 0xc7, 0x38,
-    0x4b, 0x17, 0xf0, 0x5f, 0x79, 0xd4, 0xac, 0x56, 0x1f, 0xbb, 0x24, 0xdf,
-    0x76, 0x10, 0x89, 0x62, 0xfe, 0x11, 0xf8, 0x2d, 0x6c, 0xb1, 0x7e, 0x7e,
-    0x92, 0x5e, 0x58, 0xa3, 0x17, 0x10, 0x63, 0x71, 0x79, 0x17, 0x1c, 0x64,
-    0xc6, 0xc6, 0xa5, 0xda, 0x53, 0x8b, 0xea, 0x13, 0x6c, 0x40, 0x44, 0xbc,
-    0x31, 0xbf, 0xfe, 0xfe, 0x0c, 0xc1, 0xfd, 0xcd, 0x33, 0xb8, 0x3a, 0xc5,
-    0xff, 0xff, 0x75, 0xe6, 0x16, 0x6f, 0x1f, 0xfc, 0xfb, 0x1c, 0x66, 0x19,
-    0xf8, 0xe5, 0x8b, 0xff, 0x69, 0xf9, 0x00, 0xff, 0x25, 0x2b, 0x17, 0x9e,
-    0x4e, 0xb1, 0x73, 0xfd, 0x62, 0xb4, 0x6c, 0xe3, 0x87, 0x2f, 0xff, 0xde,
-    0x34, 0x53, 0x83, 0xfe, 0x73, 0xb8, 0x4f, 0xd6, 0x2b, 0xae, 0xd3, 0x65,
-    0xd3, 0xb9, 0xdc, 0x88, 0x92, 0xff, 0x18, 0x59, 0xd0, 0xb3, 0x8b, 0x14,
-    0xb1, 0x7d, 0xcf, 0x3e, 0xcb, 0x17, 0x39, 0x6e, 0x6c, 0x22, 0x0c, 0xbf,
-    0xa1, 0xc1, 0x4e, 0x8d, 0x58, 0xbc, 0x2d, 0x6c, 0xb1, 0x5d, 0x9e, 0x78,
-    0x0c, 0x2f, 0xf6, 0x74, 0xe6, 0x49, 0x76, 0xb1, 0x7f, 0x73, 0xd1, 0xd9,
-    0xa9, 0x58, 0xbd, 0x10, 0xb4, 0xb1, 0x73, 0x41, 0x62, 0xfd, 0xbb, 0x94,
-    0x42, 0x58, 0xbf, 0xb9, 0x3d, 0xf5, 0xd8, 0xce, 0xb1, 0x7f, 0x1f, 0x0b,
-    0xd1, 0xd8, 0xb1, 0x7f, 0xff, 0xb3, 0xc2, 0x01, 0xda, 0x0c, 0x39, 0x26,
-    0xd3, 0x41, 0x62, 0xfe, 0x26, 0x0b, 0xd9, 0xfc, 0x44, 0x79, 0x18, 0x5f,
-    0xec, 0xff, 0xc5, 0xe6, 0x25, 0x8b, 0x9c, 0x6b, 0x17, 0xf7, 0xf7, 0x6d,
-    0x34, 0x16, 0x2d, 0xbc, 0x0f, 0x1b, 0x05, 0xef, 0x3c, 0x5c, 0x58, 0xa9,
-    0x3c, 0x63, 0x94, 0x5f, 0xff, 0xd9, 0xa8, 0x13, 0x7d, 0xbb, 0x35, 0x86,
-    0xf2, 0x75, 0x8b, 0xff, 0xf6, 0xb0, 0x9e, 0x61, 0x9d, 0xf9, 0x80, 0x1f,
-    0x6b, 0x15, 0x28, 0xb2, 0xc5, 0xbb, 0xff, 0xbc, 0xff, 0x63, 0xc7, 0x0b,
-    0xef, 0xa5, 0x8b, 0xf9, 0xbc, 0x79, 0xcf, 0x2c, 0x53, 0x1f, 0xa8, 0x92,
-    0x2f, 0xec, 0xd7, 0xe6, 0x1c, 0x58, 0xbb, 0x0d, 0x58, 0xbd, 0x3d, 0xf1,
-    0x62, 0xa4, 0xf9, 0x34, 0x5d, 0xf1, 0x8b, 0xfa, 0x4a, 0x0c, 0xfb, 0x2c,
-    0x5b, 0x8b, 0x17, 0xf4, 0x81, 0xfe, 0xe7, 0x58, 0xa9, 0x37, 0xee, 0x25,
-    0x78, 0xb3, 0x75, 0x8a, 0x35, 0x15, 0x1f, 0x6c, 0xe0, 0xfd, 0x0d, 0x73,
-    0xfb, 0x71, 0x7e, 0xca, 0xa2, 0x86, 0x36, 0x90, 0xcf, 0x0b, 0xff, 0xc3,
-    0x4c, 0xa1, 0x2d, 0xc8, 0x42, 0xfa, 0x1a, 0xd7, 0xef, 0xb1, 0xdf, 0x8b,
-    0x17, 0xef, 0x4e, 0x16, 0xeb, 0x15, 0xb9, 0xe8, 0x70, 0xa2, 0xa5, 0x79,
-    0xbf, 0x0c, 0x5e, 0x74, 0x75, 0xa1, 0xfd, 0x7e, 0x7f, 0xb1, 0xdd, 0x62,
-    0xd2, 0xb1, 0x70, 0x7e, 0x58, 0xa9, 0x35, 0x40, 0x11, 0xbc, 0xc4, 0x05,
-    0x8b, 0xdc, 0x9d, 0x96, 0x28, 0xc4, 0x55, 0xe2, 0x8e, 0xe4, 0x1c, 0x1c,
-    0xbd, 0xd3, 0x06, 0xb1, 0x70, 0x67, 0x58, 0xad, 0x8f, 0xda, 0x23, 0xe1,
-    0x0f, 0xdc, 0x08, 0x96, 0x2b, 0x47, 0x94, 0x46, 0x37, 0x37, 0xd6, 0x2f,
-    0xd9, 0xd3, 0x3d, 0xc5, 0x8b, 0xe8, 0xa0, 0xc4, 0xb1, 0x5a, 0x3e, 0x4f,
-    0x8b, 0xf0, 0xaa, 0xff, 0x75, 0x6b, 0x3a, 0x88, 0x41, 0x2c, 0x56, 0xc7,
-    0xd4, 0x11, 0x7d, 0xee, 0xa7, 0x1a, 0xc5, 0x61, 0xe2, 0x31, 0x25, 0x18,
-    0xcc, 0xad, 0x98, 0xee, 0xb6, 0x44, 0xc6, 0x57, 0x7c, 0xd1, 0x1f, 0xe7,
-    0xa9, 0x1a, 0x3b, 0x42, 0x8c, 0xce, 0xf0, 0x5d, 0xca, 0xc5, 0xfc, 0x7d,
-    0xcc, 0xc3, 0xf1, 0x62, 0xdf, 0x58, 0xbd, 0x09, 0x3a, 0xc5, 0xfb, 0x35,
-    0xde, 0x44, 0xb1, 0x6d, 0xbb, 0x3c, 0x7f, 0x8e, 0xdf, 0xff, 0xff, 0x03,
-    0x99, 0x84, 0x68, 0x7a, 0x29, 0xcf, 0xc6, 0x70, 0xb3, 0x63, 0xe1, 0xd6,
-    0x2f, 0x14, 0x8d, 0x62, 0xed, 0x62, 0xc5, 0xdc, 0x75, 0x8a, 0xd8, 0xd7,
-    0x68, 0x5e, 0xe0, 0xe0, 0xb1, 0x7e, 0x14, 0x27, 0x69, 0x58, 0xbe, 0x92,
-    0x0c, 0xeb, 0x15, 0xb2, 0x34, 0x71, 0x28, 0xe4, 0x5c, 0x19, 0x0c, 0xa6,
-    0xb1, 0x39, 0xdf, 0x46, 0xa5, 0x70, 0x38, 0xb1, 0x7c, 0x61, 0x4e, 0xeb,
-    0x17, 0xcd, 0xf9, 0x0d, 0x62, 0xb0, 0xf7, 0xfe, 0x31, 0xd0, 0x92, 0xfa,
-    0x42, 0xc1, 0xac, 0x5f, 0xff, 0x0b, 0xb8, 0x70, 0x7f, 0x9d, 0x0d, 0x98,
-    0x25, 0x8b, 0xa3, 0x7e, 0xb8, 0xb1, 0x51, 0xa9, 0x5b, 0x8c, 0xac, 0xe4,
-    0x78, 0xef, 0x08, 0x8d, 0x18, 0x11, 0x18, 0x6a, 0x77, 0x67, 0x96, 0x2e,
-    0x3b, 0xac, 0x50, 0xcd, 0x71, 0x0b, 0xdf, 0x05, 0x3d, 0xf1, 0x62, 0xff,
-    0x16, 0x77, 0x09, 0xcf, 0x2c, 0x5f, 0xe1, 0xb7, 0x80, 0x19, 0x41, 0x62,
-    0xf7, 0x83, 0xc5, 0x8b, 0xa7, 0x65, 0x8a, 0x93, 0xeb, 0x63, 0x5e, 0x0f,
-    0x5f, 0x17, 0xb9, 0x2b, 0x17, 0x87, 0x30, 0x58, 0xbf, 0x45, 0x09, 0xef,
-    0xcb, 0x17, 0xf6, 0xff, 0x7e, 0x8d, 0xa5, 0x8b, 0x4e, 0xc7, 0xb9, 0x85,
-    0x77, 0xdb, 0x39, 0x79, 0x62, 0xec, 0xfa, 0xc5, 0x4a, 0x3f, 0x18, 0x88,
-    0x9e, 0x44, 0x4f, 0x1c, 0x47, 0x61, 0xac, 0x52, 0xc6, 0x16, 0x57, 0x7b,
-    0xaf, 0x58, 0xbf, 0x4f, 0xbe, 0xfd, 0x16, 0x2a, 0x57, 0xcb, 0x36, 0x1f,
-    0x84, 0xba, 0x2c, 0x85, 0x17, 0xc8, 0x00, 0x4b, 0xc8, 0x4f, 0x7a, 0x32,
-    0x9e, 0x8b, 0x91, 0xc3, 0x5d, 0x43, 0xb6, 0x8d, 0x4b, 0x17, 0x30, 0x4b,
-    0x17, 0xc0, 0x3b, 0xf1, 0x62, 0xa2, 0x37, 0x7a, 0x18, 0xbf, 0xc2, 0x60,
-    0xdc, 0x9a, 0x25, 0x8b, 0xa7, 0xa2, 0xc5, 0xf9, 0xf0, 0x9b, 0xb5, 0x8a,
-    0xc4, 0x4b, 0x44, 0x45, 0xd0, 0xd3, 0xa8, 0x66, 0xff, 0x37, 0x25, 0xbc,
-    0xdc, 0x58, 0xbd, 0xf1, 0x04, 0xb1, 0x7c, 0xc6, 0x40, 0x96, 0x2e, 0x6d,
-    0x96, 0x28, 0xd3, 0x77, 0xf2, 0x3b, 0x84, 0x05, 0x8b, 0xc2, 0x7d, 0xd6,
-    0x2f, 0xbc, 0xf3, 0xda, 0xc5, 0x40, 0xf6, 0x7e, 0x31, 0xc1, 0xeb, 0x85,
-    0xba, 0xc5, 0xff, 0x4e, 0xc7, 0x60, 0x01, 0xfe, 0xb1, 0x50, 0x44, 0x10,
-    0x0b, 0xf8, 0x33, 0x7b, 0xd8, 0x1a, 0xc5, 0xfe, 0x68, 0x9f, 0xb9, 0xe4,
-    0xac, 0x5f, 0xc7, 0x17, 0x3d, 0x9e, 0x58, 0xbf, 0xc1, 0x36, 0xf8, 0x58,
-    0x35, 0x8b, 0xf3, 0x7f, 0xb8, 0x71, 0x62, 0xa5, 0x11, 0xbc, 0x2f, 0x11,
-    0xa5, 0xf7, 0x01, 0x31, 0x2c, 0x5e, 0x29, 0x82, 0xc5, 0xfc, 0xf0, 0xfc,
-    0x91, 0xab, 0x15, 0x87, 0xdc, 0xc4, 0x9c, 0x1c, 0xbe, 0xe1, 0x9a, 0x95,
-    0x8b, 0xe6, 0x1c, 0x9d, 0x62, 0xfe, 0x73, 0xbc, 0x42, 0x0d, 0x62, 0xbb,
-    0x3f, 0x68, 0x89, 0x3e, 0x45, 0x77, 0x7c, 0x58, 0xbf, 0xb7, 0xc3, 0x8b,
-    0x9e, 0x58, 0xa9, 0x3f, 0xa7, 0x31, 0x10, 0xcd, 0xf8, 0x42, 0x0d, 0xe3,
-    0xd6, 0x2f, 0x42, 0x78, 0xb1, 0x71, 0x1d, 0x62, 0xc2, 0x58, 0xa8, 0x1e,
-    0x30, 0xc7, 0x40, 0x2f, 0x78, 0x62, 0xdd, 0x62, 0xf8, 0x65, 0x30, 0x58,
-    0xa3, 0x11, 0xc7, 0x2e, 0x6e, 0x5e, 0xc3, 0xf7, 0xd1, 0x69, 0xe3, 0x96,
-    0x2f, 0xe7, 0xde, 0x4e, 0x2f, 0x2c, 0x5f, 0xff, 0x4f, 0xbf, 0x26, 0x8e,
-    0x75, 0x13, 0x77, 0x05, 0x8b, 0x9c, 0x6b, 0x17, 0xc2, 0x3b, 0xf1, 0x62,
-    0xfb, 0x90, 0x62, 0x58, 0xbc, 0xf8, 0x35, 0x8a, 0xc3, 0xf8, 0x88, 0x5f,
-    0x84, 0x7e, 0x22, 0xbf, 0x3f, 0x7e, 0x93, 0xac, 0x5f, 0xfc, 0x67, 0x7e,
-    0x29, 0xc3, 0x33, 0xbf, 0x2c, 0x56, 0x1f, 0x88, 0x65, 0x37, 0xfd, 0x3f,
-    0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf9, 0x8e, 0xfe, 0x58, 0xa8, 0xd1, 0x92,
-    0x2b, 0x30, 0xe9, 0xd9, 0x08, 0x66, 0x46, 0xad, 0x77, 0x0f, 0xd7, 0x30,
-    0x8f, 0x1e, 0x8a, 0x18, 0x3a, 0x84, 0xe9, 0xe3, 0x1d, 0xfc, 0x62, 0x0c,
-    0x76, 0x44, 0xfc, 0x2f, 0xf4, 0x32, 0xc5, 0x0a, 0xde, 0x84, 0x41, 0x1d,
-    0xdb, 0xaf, 0x58, 0xbf, 0x37, 0xa1, 0x9d, 0xac, 0x57, 0x5e, 0x78, 0x04,
-    0x2f, 0x7f, 0x9e, 0x26, 0x27, 0xef, 0x8b, 0x17, 0x66, 0xeb, 0x17, 0xf8,
-    0xbd, 0xc2, 0x9f, 0x71, 0x62, 0xff, 0x7c, 0xb1, 0xc1, 0x20, 0x58, 0xbf,
-    0x3f, 0x4c, 0x2e, 0x2c, 0x5f, 0x47, 0x66, 0xa5, 0x62, 0xff, 0xfe, 0x9f,
-    0x8b, 0xb9, 0xf6, 0xff, 0x9d, 0x0b, 0x05, 0x12, 0xc5, 0x62, 0x62, 0x4e,
-    0x67, 0xa3, 0x23, 0x94, 0xfc, 0x96, 0xed, 0x32, 0xc5, 0xd1, 0xd8, 0xb1,
-    0x7d, 0x9f, 0x14, 0x7a, 0xc5, 0x61, 0xe0, 0x78, 0x6a, 0xff, 0xdb, 0x7d,
-    0xcf, 0x31, 0xff, 0xcd, 0x96, 0x2f, 0xee, 0x16, 0x78, 0xd9, 0x58, 0xad,
-    0x91, 0xd5, 0xda, 0xbe, 0x88, 0x7c, 0x89, 0x7f, 0x6b, 0x3f, 0xf1, 0x79,
-    0x62, 0xfe, 0x8c, 0xe7, 0xa7, 0xdc, 0x5c, 0x81, 0xa5, 0xf1, 0x4e, 0x69,
-    0x42, 0xb7, 0x3e, 0x0f, 0x9f, 0xdf, 0xd9, 0xad, 0x84, 0xc3, 0x54, 0x81,
-    0xa4, 0x61, 0xa3, 0xad, 0x93, 0x01, 0x84, 0x2c, 0xaf, 0xfb, 0xdc, 0x6d,
-    0x0f, 0x4d, 0x05, 0x8a, 0xd1, 0xf2, 0x70, 0xaa, 0xf8, 0xbf, 0x9d, 0xac,
-    0x54, 0xa7, 0xd2, 0xf1, 0xd2, 0x31, 0x15, 0xdd, 0x43, 0x58, 0xbf, 0xb8,
-    0xe4, 0xda, 0x35, 0x62, 0xbe, 0x79, 0x3d, 0x06, 0xef, 0xb7, 0x73, 0xca,
-    0xc5, 0xff, 0xa4, 0xd2, 0xce, 0xfc, 0xdf, 0x95, 0x8a, 0x63, 0xe2, 0xf1,
-    0x1d, 0xfd, 0x0f, 0x93, 0x77, 0xe5, 0x8a, 0xdc, 0xf4, 0x08, 0x86, 0xf8,
-    0x32, 0x6d, 0x96, 0x2f, 0xdc, 0x7d, 0x38, 0x16, 0x2b, 0x0f, 0xbb, 0x84,
-    0x5d, 0x44, 0x97, 0xef, 0x7e, 0x75, 0xb2, 0xc5, 0xdd, 0xba, 0xc5, 0xc7,
-    0x09, 0x62, 0xf7, 0xdf, 0xa2, 0xc5, 0xd3, 0xe3, 0x0d, 0xc6, 0x0c, 0xdf,
-    0xfb, 0x6f, 0x7e, 0x7f, 0x9d, 0x1a, 0x0b, 0x17, 0x8f, 0x3b, 0xac, 0x5f,
-    0x10, 0x05, 0xc5, 0x8b, 0x9a, 0x0b, 0x15, 0x87, 0xb1, 0xa1, 0xe6, 0x23,
-    0xbf, 0x77, 0x17, 0xdb, 0xb5, 0x8b, 0xd9, 0x9c, 0x58, 0xbe, 0x86, 0x77,
-    0xe5, 0x8b, 0x81, 0xc5, 0x8a, 0x34, 0xf6, 0x3b, 0x1c, 0xd1, 0x25, 0x4a,
-    0x6f, 0x8f, 0x09, 0xa6, 0x2d, 0x14, 0x21, 0x2f, 0x99, 0x81, 0xc5, 0x8b,
-    0x98, 0xd5, 0x8b, 0x9b, 0x68, 0x8d, 0xd1, 0x11, 0x5f, 0xee, 0x73, 0x34,
-    0x3f, 0xe2, 0xc5, 0xf7, 0x06, 0xf1, 0x2c, 0x50, 0xcf, 0x60, 0xe6, 0x97,
-    0xf8, 0x2f, 0xe7, 0x70, 0xc2, 0x58, 0xbd, 0xf9, 0xd2, 0xc5, 0xc0, 0xed,
-    0x62, 0xff, 0xb8, 0xc5, 0x31, 0x38, 0xf6, 0x58, 0xb0, 0x16, 0x2f, 0xf4,
-    0x1c, 0xf3, 0xf0, 0xc6, 0xb1, 0x7f, 0xfa, 0x70, 0xbb, 0xf6, 0x69, 0xf6,
-    0x63, 0xac, 0x5c, 0x17, 0xd6, 0x2e, 0xcf, 0x98, 0x8e, 0x4d, 0xce, 0xb8,
-    0x25, 0xe3, 0x50, 0x92, 0xae, 0xce, 0x2c, 0x51, 0x89, 0xb6, 0x7a, 0x1f,
-    0xb1, 0xcb, 0x15, 0x04, 0xf0, 0xc2, 0x8e, 0x26, 0xa5, 0x52, 0x2e, 0x11,
-    0x34, 0x7f, 0x17, 0xc3, 0x03, 0x79, 0x62, 0xf8, 0xe4, 0xc1, 0x2c, 0x5f,
-    0xc1, 0xfb, 0x0d, 0x9e, 0x2c, 0x50, 0xcf, 0x4c, 0x88, 0xef, 0x74, 0x68,
-    0x96, 0x2b, 0x11, 0x6e, 0xee, 0xdf, 0x21, 0xbf, 0xec, 0x87, 0xf0, 0x9b,
-    0x46, 0xac, 0x5c, 0x70, 0x96, 0x2a, 0x30, 0xf4, 0xa0, 0x73, 0x7c, 0x7f,
-    0x67, 0xd6, 0x2f, 0x6d, 0x3d, 0x4b, 0x15, 0x27, 0x89, 0xc2, 0x3a, 0x31,
-    0x9b, 0x9b, 0x1a, 0x1a, 0x4c, 0x65, 0x50, 0x96, 0x38, 0x37, 0xdc, 0x8d,
-    0x11, 0xcc, 0x62, 0x2a, 0xd2, 0x87, 0xe3, 0xa8, 0x67, 0xf2, 0x95, 0x95,
-    0xc8, 0x76, 0x0a, 0x10, 0x1d, 0x4d, 0x37, 0xe7, 0xde, 0x4f, 0x2b, 0x17,
-    0xd9, 0x3d, 0xf9, 0x62, 0xff, 0x77, 0xac, 0x7f, 0xc8, 0xd6, 0x2f, 0xbf,
-    0x83, 0xc5, 0x8b, 0xfe, 0xdd, 0xf9, 0x82, 0xdd, 0x89, 0x62, 0xe1, 0xca,
-    0xc5, 0xfa, 0x2f, 0xb0, 0x25, 0x62, 0xec, 0x82, 0xc5, 0xfe, 0x7d, 0xdc,
-    0x71, 0xce, 0x05, 0x8b, 0xfe, 0xfc, 0xb6, 0x86, 0x53, 0x05, 0x8b, 0xf8,
-    0xf8, 0x5e, 0x8e, 0xc5, 0x8b, 0xdf, 0x93, 0x98, 0x7d, 0x18, 0x71, 0x50,
-    0x54, 0x08, 0x32, 0x8c, 0x23, 0x39, 0xa7, 0xc8, 0x98, 0xe8, 0x85, 0xf8,
-    0x53, 0xe1, 0x71, 0x42, 0x7e, 0xec, 0x0d, 0x62, 0xfd, 0xf6, 0x29, 0x8f,
-    0x58, 0xbf, 0xc6, 0xb7, 0xb8, 0x77, 0xf2, 0xc5, 0xfe, 0x6f, 0x36, 0x0d,
-    0xfa, 0x2c, 0x5f, 0x03, 0xf2, 0x35, 0x8b, 0xfb, 0xee, 0x11, 0x48, 0xd6,
-    0x2f, 0xfa, 0x40, 0x79, 0xc2, 0xf7, 0x16, 0x2f, 0xfb, 0x98, 0x17, 0xd8,
-    0xef, 0xc5, 0x8b, 0xf6, 0x6b, 0x61, 0x71, 0x62, 0x8d, 0x4d, 0x5b, 0x73,
-    0x57, 0x34, 0x88, 0x8f, 0xe5, 0xdc, 0x38, 0xe8, 0x75, 0x7f, 0x6e, 0xfb,
-    0x67, 0x7e, 0x58, 0xbf, 0x3f, 0x70, 0x72, 0x58, 0xbc, 0xff, 0xc5, 0x8b,
-    0xfb, 0xcc, 0x73, 0xc9, 0xd6, 0x2b, 0x0f, 0xcb, 0x72, 0x8e, 0xc7, 0x2f,
-    0x61, 0x79, 0x62, 0x96, 0x28, 0xd4, 0x7d, 0x9e, 0x14, 0x7e, 0x30, 0x08,
-    0x72, 0xff, 0x85, 0xb1, 0x99, 0xef, 0xcf, 0x96, 0x2f, 0xdc, 0x10, 0x33,
-    0xeb, 0x17, 0x3c, 0x4b, 0x15, 0x28, 0xc1, 0xdd, 0x13, 0xc7, 0x9d, 0x45,
-    0x37, 0xd0, 0x9d, 0x6c, 0xb1, 0x7b, 0x82, 0x25, 0x8b, 0xff, 0x08, 0xd3,
-    0x8b, 0xdf, 0x91, 0x75, 0xeb, 0x15, 0xd9, 0xf2, 0x10, 0xed, 0xf1, 0xe7,
-    0x46, 0xac, 0x5f, 0x60, 0x00, 0xcb, 0x17, 0x83, 0xfb, 0x2c, 0x56, 0x1f,
-    0x21, 0x12, 0x47, 0x11, 0x56, 0xc8, 0xb6, 0x0a, 0x10, 0xd7, 0xc1, 0xc9,
-    0x6e, 0xb1, 0x4b, 0x17, 0xb9, 0xf9, 0x58, 0x39, 0x32, 0xfd, 0x0c, 0xfb,
-    0x9d, 0x62, 0xa0, 0x88, 0x31, 0x98, 0x11, 0x5d, 0xfb, 0x6c, 0x16, 0xb6,
-    0x58, 0xbf, 0x16, 0x82, 0x6d, 0x96, 0x2f, 0xf7, 0xfa, 0x60, 0xf9, 0x81,
-    0xac, 0x54, 0xa6, 0xd1, 0x90, 0xad, 0x72, 0xf6, 0x2b, 0x11, 0x55, 0xf9,
-    0x9f, 0xc5, 0x2b, 0x17, 0xe8, 0x9f, 0x77, 0x1a, 0xc5, 0xf6, 0xff, 0x90,
-    0x96, 0x2f, 0xd9, 0xee, 0x39, 0xd6, 0x2e, 0x11, 0x2c, 0x5c, 0x2f, 0x2c,
-    0x58, 0x6b, 0x17, 0xee, 0x0e, 0x70, 0x6b, 0x15, 0xb1, 0xe9, 0x47, 0x8c,
-    0x30, 0x95, 0xe2, 0xcd, 0x96, 0x2a, 0x59, 0x1a, 0x70, 0x84, 0x78, 0xc6,
-    0x32, 0x38, 0x07, 0x94, 0x4b, 0x12, 0x06, 0xa5, 0x53, 0x1d, 0x31, 0x89,
-    0xba, 0xf2, 0xa2, 0x25, 0xe1, 0x40, 0x9a, 0x43, 0x32, 0xbf, 0xe9, 0x3c,
-    0xf9, 0xcb, 0x20, 0xb1, 0x68, 0x2c, 0x5f, 0x70, 0x52, 0x05, 0x8b, 0xdf,
-    0x73, 0xac, 0x5b, 0xa9, 0x62, 0xb7, 0x36, 0x42, 0x1d, 0xad, 0x23, 0x03,
-    0xe6, 0xe0, 0x12, 0x25, 0x5b, 0xb0, 0x96, 0x2f, 0xdc, 0x0f, 0x9f, 0x12,
-    0xc5, 0x7c, 0xf0, 0x7c, 0x2d, 0x7f, 0xfb, 0x4f, 0x27, 0xc3, 0x33, 0xef,
-    0x87, 0x58, 0xbf, 0x4f, 0x57, 0x47, 0x3a, 0xc5, 0xfb, 0xb9, 0xf6, 0xa5,
-    0x62, 0xf9, 0xf9, 0x2c, 0xb1, 0x46, 0x23, 0x02, 0x24, 0x92, 0x2d, 0xe1,
-    0x4d, 0xfe, 0xc2, 0xce, 0xfd, 0x03, 0xac, 0x5d, 0xe9, 0x58, 0xa9, 0x3c,
-    0xb6, 0x34, 0xbf, 0xe6, 0x80, 0xdc, 0x5d, 0x7b, 0xe9, 0x62, 0xfd, 0x84,
-    0x52, 0x35, 0x8b, 0xcd, 0xf9, 0x58, 0xbf, 0x89, 0xa0, 0xfd, 0xc1, 0x62,
-    0xbe, 0x79, 0x41, 0x8e, 0x5d, 0xcf, 0x2c, 0x5f, 0xd3, 0xb1, 0xda, 0x29,
-    0x58, 0xa5, 0x8b, 0x41, 0x62, 0xb8, 0x5f, 0x08, 0x32, 0xf8, 0x3e, 0xa9,
-    0xed, 0x62, 0xda, 0x58, 0xa8, 0x23, 0x88, 0x64, 0x71, 0x0c, 0x01, 0x34,
-    0x88, 0x04, 0x51, 0x7f, 0xfc, 0xc6, 0xfa, 0x74, 0x0d, 0x4f, 0x89, 0x80,
-    0xb1, 0x7f, 0x6e, 0x3f, 0x89, 0xb8, 0xb1, 0x7f, 0xfb, 0xf2, 0xe5, 0x3e,
-    0x7d, 0x3f, 0x84, 0xb1, 0x52, 0x7f, 0x0e, 0x61, 0x73, 0x1a, 0xb1, 0x7f,
-    0x6c, 0x59, 0xed, 0x4a, 0xc5, 0xfe, 0x7f, 0x07, 0xa9, 0xfc, 0xac, 0x5f,
-    0x6e, 0x1f, 0xb8, 0xb1, 0x7f, 0x16, 0x03, 0x0a, 0x0b, 0x17, 0xff, 0x06,
-    0x4d, 0xee, 0x3f, 0x7f, 0x70, 0x96, 0x2f, 0xf1, 0xe7, 0x79, 0x27, 0x89,
-    0x62, 0xc6, 0x98, 0x7f, 0x78, 0x8f, 0x58, 0x8d, 0x06, 0x85, 0x3d, 0xed,
-    0x49, 0xab, 0x15, 0x29, 0xce, 0x40, 0xb9, 0xcd, 0x0a, 0x1e, 0xdc, 0x26,
-    0xa9, 0x5e, 0xd8, 0xc7, 0xd7, 0x87, 0x16, 0xa1, 0x12, 0x72, 0x0f, 0x9f,
-    0x34, 0x6a, 0x44, 0xaf, 0xc8, 0x64, 0x78, 0x80, 0x51, 0xda, 0x5f, 0xfe,
-    0x2c, 0x1e, 0xa4, 0x7f, 0x60, 0xf3, 0x65, 0x8b, 0xf7, 0x27, 0xa3, 0x7d,
-    0x62, 0xf3, 0x76, 0x05, 0x8b, 0x74, 0x58, 0xa8, 0x1b, 0x2e, 0x0f, 0x5c,
-    0xfe, 0x58, 0xbf, 0xf8, 0xbe, 0xdc, 0x2c, 0x34, 0xdc, 0x8f, 0x58, 0xbf,
-    0x84, 0x3c, 0xf4, 0xc4, 0xb1, 0x58, 0x7e, 0xfb, 0xa4, 0x5f, 0xb0, 0xb6,
-    0x7d, 0x2c, 0x5c, 0xf2, 0xb1, 0x50, 0x37, 0xc3, 0x28, 0xbc, 0x4c, 0x35,
-    0x8b, 0xfd, 0x22, 0xdf, 0x0f, 0x3b, 0xac, 0x53, 0x9e, 0x89, 0x0e, 0x5c,
-    0x1f, 0x96, 0x2f, 0xdc, 0x9d, 0x7a, 0x56, 0x28, 0x67, 0xc3, 0xa2, 0x0e,
-    0x0c, 0xdc, 0xfd, 0x7a, 0xc5, 0xd0, 0x0d, 0x62, 0xf8, 0x2c, 0x83, 0xac,
-    0x5e, 0xc7, 0x35, 0x62, 0xf6, 0x66, 0xcb, 0x16, 0x1a, 0xc5, 0xe6, 0x6d,
-    0x2c, 0x54, 0x9a, 0xe8, 0x84, 0xa9, 0x91, 0x58, 0x44, 0x7e, 0x1d, 0x0d,
-    0x2e, 0xf6, 0x3f, 0x45, 0x8b, 0xd0, 0x0c, 0xeb, 0x15, 0xf3, 0x7a, 0xc3,
-    0xd7, 0xc1, 0xc0, 0x5a, 0x58, 0xbf, 0xb8, 0xfa, 0xc1, 0x69, 0x62, 0xf0,
-    0xdf, 0x4b, 0x17, 0xff, 0xf4, 0x46, 0x3e, 0xe2, 0xd7, 0x04, 0x61, 0xdf,
-    0xdf, 0x75, 0x8b, 0xa4, 0xd5, 0x8a, 0x93, 0xf9, 0x76, 0x1a, 0x95, 0xd3,
-    0xb8, 0x25, 0xe2, 0xe1, 0xa4, 0x3b, 0xc2, 0x3b, 0xb6, 0x07, 0x86, 0x9c,
-    0x45, 0xfa, 0x1c, 0x3c, 0x31, 0x7e, 0xf3, 0xc2, 0x0f, 0x12, 0x88, 0xbb,
-    0xaa, 0x12, 0xd7, 0x86, 0x7e, 0x2c, 0x5b, 0xcb, 0x17, 0xef, 0x7c, 0x26,
-    0xd9, 0x62, 0xb4, 0x6f, 0x43, 0x12, 0xb7, 0x5a, 0xa9, 0x3f, 0x0a, 0x81,
-    0xe3, 0x1c, 0x8a, 0xfd, 0xb7, 0x70, 0x91, 0xac, 0x5f, 0x13, 0xf7, 0x05,
-    0x8b, 0xfa, 0x27, 0xe0, 0x84, 0x75, 0x8a, 0xc3, 0xd3, 0x62, 0x3b, 0xff,
-    0x9b, 0x5f, 0x9e, 0x9f, 0x70, 0x8b, 0x16, 0x2f, 0xfa, 0x77, 0xfc, 0xf4,
-    0xd0, 0x7c, 0x58, 0xbd, 0xac, 0xc5, 0x8a, 0x8d, 0xd3, 0x3e, 0x77, 0xef,
-    0x90, 0x12, 0x37, 0x0f, 0xaf, 0x07, 0x31, 0x2c, 0x5e, 0x29, 0x02, 0xc5,
-    0xe7, 0xcf, 0xac, 0x5b, 0x79, 0x37, 0x1a, 0x1c, 0xbf, 0xfc, 0x58, 0x3f,
-    0xcf, 0x4e, 0x47, 0xbf, 0x7e, 0x58, 0xad, 0x23, 0x38, 0x95, 0xfa, 0x13,
-    0xde, 0x18, 0x40, 0x58, 0xbf, 0xfd, 0xfc, 0x93, 0xeb, 0x3a, 0xbe, 0xf2,
-    0x75, 0x8b, 0xfe, 0x14, 0x20, 0x7f, 0x7a, 0x4e, 0xb1, 0x68, 0x7d, 0x10,
-    0xfe, 0x4c, 0xbf, 0x4f, 0xdc, 0x1c, 0x58, 0xbf, 0xb9, 0x3b, 0x67, 0x06,
-    0xb1, 0x5a, 0x3d, 0x7f, 0x14, 0x5d, 0xfc, 0x58, 0xbf, 0xfe, 0xfc, 0x8f,
-    0x37, 0x33, 0x0b, 0x07, 0xf9, 0x58, 0xbf, 0xed, 0x4f, 0xdf, 0xa6, 0xa6,
-    0x0b, 0x17, 0xfe, 0xed, 0x82, 0x33, 0xc5, 0x27, 0xe2, 0xc5, 0xff, 0xfe,
-    0x04, 0xf7, 0x0e, 0x0f, 0x30, 0xb3, 0x7f, 0xb8, 0xbc, 0xb1, 0x7f, 0xec,
-    0x2c, 0xce, 0x19, 0x0e, 0x1d, 0x62, 0xff, 0xe9, 0xee, 0x4b, 0x69, 0x83,
-    0x96, 0x2c, 0x5f, 0xfb, 0x3d, 0x80, 0x33, 0x3e, 0x52, 0xb1, 0x4e, 0x8c,
-    0x03, 0x9f, 0x92, 0x1d, 0xff, 0x9a, 0x7b, 0x81, 0x9c, 0xec, 0x72, 0xb1,
-    0x7f, 0xd2, 0x5e, 0xe6, 0x13, 0x1a, 0xb1, 0x7e, 0xc1, 0xfd, 0xfc, 0xb1,
-    0x7f, 0x36, 0xc5, 0x9b, 0x09, 0x62, 0x86, 0xbb, 0x35, 0x91, 0x8e, 0x6e,
-    0x63, 0xdc, 0x29, 0x9e, 0x10, 0x11, 0xe4, 0x51, 0x0b, 0xe9, 0x43, 0xe7,
-    0x60, 0x42, 0xe4, 0x64, 0x5e, 0x2e, 0xe8, 0x84, 0x11, 0xc4, 0x71, 0x45,
-    0xee, 0x14, 0xac, 0x5f, 0x60, 0x46, 0x41, 0x62, 0xf9, 0xf9, 0x83, 0x30,
-    0xf0, 0x76, 0x1c, 0xbc, 0x6c, 0xe9, 0x62, 0xf8, 0xec, 0x31, 0x2c, 0x5e,
-    0x8a, 0x4e, 0xb1, 0x7d, 0xf9, 0x3b, 0xac, 0x5f, 0xd3, 0xf7, 0xe4, 0x86,
-    0xb1, 0x58, 0x7d, 0xc2, 0x1e, 0x0c, 0x8a, 0xf8, 0x04, 0xd0, 0x58, 0xbf,
-    0xbe, 0xe7, 0x66, 0xea, 0x58, 0xbe, 0x21, 0x31, 0xab, 0x17, 0xe2, 0x9d,
-    0xc5, 0xc5, 0x8a, 0x81, 0xe6, 0x70, 0x8e, 0xf0, 0xbb, 0xe2, 0xc5, 0xfe,
-    0x11, 0x79, 0xfe, 0xe7, 0x58, 0xbc, 0x59, 0xd4, 0xb1, 0x78, 0xf9, 0xd1,
-    0x62, 0x8c, 0x44, 0x84, 0x07, 0xf0, 0xcd, 0x87, 0xee, 0x7d, 0x96, 0x2c,
-    0x4b, 0x15, 0xa3, 0x52, 0x18, 0xc5, 0x8e, 0xb1, 0x7b, 0x59, 0xda, 0xc5,
-    0xf1, 0xc1, 0xd8, 0x16, 0x2e, 0x1c, 0xc0, 0xf5, 0x40, 0x24, 0x18, 0xf5,
-    0xff, 0xe8, 0x79, 0xf6, 0x61, 0xcc, 0x0b, 0x0e, 0xb1, 0x68, 0xe5, 0x8b,
-    0x8a, 0x25, 0x8b, 0xf3, 0x79, 0x88, 0x0b, 0x15, 0x18, 0xaf, 0x8e, 0x47,
-    0x87, 0x09, 0x13, 0x4b, 0xf7, 0x22, 0xed, 0xf2, 0x28, 0x59, 0x69, 0x94,
-    0xee, 0xec, 0x77, 0xd7, 0xa5, 0x08, 0x56, 0x38, 0x62, 0xff, 0x9c, 0xd9,
-    0xd1, 0x63, 0x9a, 0xb1, 0x78, 0x7a, 0xe8, 0xb1, 0x76, 0xfb, 0x2c, 0x5e,
-    0xd4, 0x50, 0x58, 0xbe, 0xef, 0x04, 0x75, 0x8a, 0x73, 0xc3, 0xd0, 0xfd,
-    0xff, 0xe3, 0x5b, 0xb3, 0x39, 0x3a, 0x68, 0x3f, 0xd6, 0x2b, 0x0f, 0xb8,
-    0xd2, 0x1b, 0xe2, 0x6f, 0x71, 0x62, 0x8e, 0x78, 0x9d, 0x08, 0xaf, 0x9a,
-    0x20, 0xe2, 0x58, 0xa9, 0x3c, 0xa6, 0x24, 0xb9, 0xe2, 0x58, 0xbf, 0xf6,
-    0x6c, 0x67, 0xe6, 0x27, 0xee, 0x0b, 0x17, 0xf4, 0x9a, 0x32, 0x9e, 0xd6,
-    0x2e, 0x73, 0xac, 0x54, 0xa2, 0x27, 0x48, 0x7d, 0x0b, 0xef, 0xa4, 0xa7,
-    0x75, 0x8b, 0xd3, 0xa3, 0x56, 0x2b, 0x73, 0xc0, 0x22, 0x2b, 0xe9, 0x2c,
-    0x35, 0x62, 0xf7, 0x24, 0xd5, 0x8b, 0xdf, 0x6e, 0xd6, 0x2f, 0xf3, 0x67,
-    0x7e, 0xf3, 0x7d, 0x62, 0xff, 0xe1, 0x0f, 0x35, 0x30, 0x71, 0xc9, 0x2c,
-    0x5f, 0xf8, 0x98, 0xdc, 0xd6, 0xb0, 0x5d, 0x7a, 0xc5, 0xff, 0x13, 0x6d,
-    0x3a, 0xd3, 0x41, 0x62, 0xfe, 0xe4, 0x50, 0x92, 0x82, 0xc5, 0xff, 0x9f,
-    0xda, 0x14, 0x3b, 0x86, 0x79, 0x62, 0xa0, 0x99, 0x81, 0xd0, 0xfe, 0x89,
-    0xe3, 0x9e, 0x85, 0xf7, 0xf1, 0xbe, 0xc2, 0x6f, 0x2c, 0x5f, 0xfd, 0xff,
-    0xb4, 0x0c, 0xe7, 0x1c, 0x2e, 0x2c, 0x54, 0x9f, 0xb6, 0x17, 0x5f, 0xee,
-    0x73, 0x08, 0x11, 0xd8, 0xb1, 0x7f, 0xf3, 0xf2, 0x0f, 0xe0, 0xf5, 0x3f,
-    0x95, 0x8b, 0x1f, 0x0f, 0xef, 0xe6, 0xd7, 0xff, 0xda, 0x6e, 0x16, 0x6c,
-    0x1c, 0x05, 0x2e, 0x4b, 0x15, 0x29, 0xea, 0xc2, 0x18, 0x6d, 0x09, 0xb1,
-    0x13, 0xd7, 0x6a, 0xee, 0xe2, 0x1e, 0xf8, 0xf7, 0xa5, 0x9c, 0xdf, 0xff,
-    0xe7, 0xe0, 0x30, 0xc7, 0xe9, 0x3f, 0x79, 0x8a, 0x29, 0xdd, 0x62, 0xf7,
-    0x9f, 0x65, 0x8b, 0xfd, 0xf7, 0xd1, 0x3f, 0xb8, 0xb1, 0x7b, 0xb9, 0x89,
-    0x62, 0xc0, 0xdc, 0xf4, 0x98, 0xce, 0xf1, 0x4e, 0xeb, 0x17, 0xfb, 0x39,
-    0x17, 0xdc, 0x2f, 0x2c, 0x5f, 0x9a, 0x13, 0x1e, 0x75, 0x8b, 0xff, 0x3c,
-    0x5f, 0x9d, 0x77, 0x09, 0xd2, 0xc5, 0xfd, 0x09, 0x8f, 0x3c, 0xc1, 0x62,
-    0xf9, 0xbf, 0x91, 0xeb, 0x17, 0xfd, 0xdb, 0x47, 0x9f, 0x45, 0x30, 0x58,
-    0xbf, 0xfd, 0xef, 0xcf, 0x4e, 0x13, 0x7a, 0x27, 0xe8, 0xb1, 0x7f, 0xe7,
-    0x3e, 0x6b, 0x26, 0x27, 0x3a, 0xc5, 0x62, 0x23, 0x74, 0x9f, 0x52, 0x9f,
-    0x26, 0xc6, 0xc3, 0x2b, 0x89, 0x07, 0x46, 0x3f, 0x25, 0xe4, 0x32, 0xaf,
-    0xb3, 0xd2, 0x35, 0x8b, 0xe8, 0xb5, 0x3d, 0xac, 0x5f, 0xfc, 0x4d, 0xdf,
-    0x39, 0x9a, 0x1f, 0xf1, 0x62, 0xff, 0xf4, 0xee, 0x66, 0xb1, 0xc5, 0xd7,
-    0xe7, 0x56, 0x2c, 0x53, 0xa2, 0x60, 0x91, 0x68, 0xc6, 0x4e, 0x14, 0x21,
-    0x43, 0x8e, 0x3b, 0x91, 0x3c, 0xbd, 0xdd, 0x24, 0x1d, 0x95, 0x9c, 0x08,
-    0xa3, 0x92, 0x80, 0x42, 0x6b, 0x0c, 0x8b, 0xaa, 0x17, 0xb6, 0xeb, 0x16,
-    0x2f, 0x74, 0x03, 0xac, 0x52, 0xc5, 0xfc, 0xdd, 0x9c, 0x98, 0x25, 0x8a,
-    0x93, 0x77, 0xa0, 0xca, 0x58, 0xbd, 0x98, 0x05, 0x8b, 0xdf, 0x7f, 0x2c,
-    0x5b, 0xa7, 0x5a, 0x8d, 0x6e, 0xb8, 0x2f, 0x8b, 0x4e, 0x40, 0x41, 0x81,
-    0x8e, 0x5d, 0xdf, 0x16, 0x2f, 0x3f, 0x31, 0x62, 0xc0, 0x58, 0xbf, 0x6b,
-    0x61, 0x30, 0xd6, 0x2d, 0x1c, 0xb1, 0x50, 0x3d, 0x1c, 0x12, 0x0c, 0xaa,
-    0xf4, 0xf5, 0x71, 0x62, 0xe6, 0x3a, 0xc5, 0x4a, 0x3b, 0x36, 0x19, 0x35,
-    0xb7, 0x72, 0xfd, 0x10, 0x5f, 0xb5, 0xac, 0x8f, 0x89, 0x62, 0xf3, 0x10,
-    0x96, 0x2e, 0x1e, 0x2c, 0x5b, 0x8b, 0x14, 0x33, 0x52, 0x10, 0xbd, 0x4b,
-    0x7c, 0x13, 0x08, 0x73, 0x8e, 0x14, 0x39, 0x3d, 0xf5, 0xbc, 0x66, 0x0f,
-    0x38, 0x3b, 0x1f, 0x0c, 0xb8, 0x8e, 0x4e, 0x41, 0xf8, 0xd6, 0x5a, 0x93,
-    0xc4, 0x08, 0xe9, 0xc5, 0x1a, 0xa7, 0x44, 0xc0, 0x8b, 0x43, 0x45, 0xbd,
-    0xec, 0xfa, 0xc5, 0xff, 0x19, 0xbf, 0xdb, 0x42, 0x98, 0x2c, 0x5f, 0xee,
-    0xae, 0x72, 0x4f, 0x3e, 0x58, 0xb4, 0x72, 0xc5, 0x83, 0x58, 0xa7, 0x35,
-    0x0c, 0x2b, 0x52, 0x7f, 0xc7, 0x5f, 0xbd, 0x0e, 0xb6, 0x56, 0x2f, 0xce,
-    0x5e, 0x90, 0x2c, 0x5f, 0x8e, 0x2d, 0xf0, 0xeb, 0x17, 0xed, 0x1e, 0x41,
-    0xc5, 0x8a, 0x31, 0x13, 0x92, 0x44, 0xe4, 0xec, 0x55, 0x7f, 0x8a, 0x05,
-    0x87, 0x9d, 0xd6, 0x2e, 0xc8, 0xe5, 0x8a, 0xc3, 0xcd, 0xf9, 0x9d, 0xf8,
-    0x7f, 0x13, 0x71, 0x62, 0xfd, 0xf7, 0xe9, 0x83, 0x58, 0xbb, 0xce, 0xb1,
-    0x7b, 0x0f, 0x2b, 0x14, 0x61, 0xb3, 0xc1, 0x7b, 0x98, 0xeb, 0x17, 0xcf,
-    0xbb, 0x69, 0x62, 0xff, 0x16, 0x10, 0xa1, 0x9c, 0x58, 0xbf, 0x72, 0x77,
-    0xc0, 0x2c, 0x5f, 0x9c, 0x62, 0xf7, 0x16, 0x2e, 0xf7, 0x0c, 0x3d, 0x26,
-    0x29, 0xa9, 0x45, 0x90, 0xa1, 0x09, 0x7f, 0x37, 0x60, 0x92, 0xdd, 0x62,
-    0xb6, 0x4d, 0x0a, 0x02, 0xe3, 0x86, 0xae, 0x89, 0xee, 0x33, 0xb5, 0x8b,
-    0xf3, 0x1d, 0xfa, 0xb1, 0x62, 0xfe, 0xcf, 0xb7, 0x9a, 0x25, 0x8b, 0xa7,
-    0xb5, 0x8a, 0xec, 0xf1, 0xbc, 0x5d, 0x79, 0xb5, 0x12, 0xc5, 0x62, 0x2c,
-    0x59, 0xc3, 0x84, 0x77, 0xf8, 0x45, 0x9e, 0x26, 0x3a, 0xc5, 0xff, 0xff,
-    0x67, 0xdb, 0xab, 0x4d, 0xb1, 0x67, 0x53, 0xe0, 0x5d, 0xc3, 0x8b, 0x15,
-    0x88, 0xa0, 0xd1, 0x95, 0xa2, 0x58, 0xbd, 0x25, 0xe5, 0x8b, 0xdf, 0xc0,
-    0x2c, 0x53, 0x9e, 0x64, 0x78, 0x9f, 0x87, 0x2f, 0xf7, 0x26, 0x13, 0xb4,
-    0xec, 0xb1, 0x76, 0x1a, 0xb1, 0x7f, 0xfb, 0x0d, 0xfb, 0xf3, 0xf9, 0xd2,
-    0x73, 0xb5, 0x8a, 0x94, 0x65, 0xb9, 0x8f, 0xcd, 0x48, 0x62, 0xd2, 0xb1,
-    0x7c, 0xc1, 0xc8, 0x4b, 0x17, 0xff, 0x7f, 0x37, 0xd6, 0xa7, 0xdc, 0xfb,
-    0xac, 0x5c, 0xc7, 0x58, 0xa9, 0x44, 0x97, 0x62, 0x3e, 0x24, 0x0d, 0x1a,
-    0xed, 0x62, 0xc5, 0xc1, 0x4a, 0xc5, 0xfb, 0xa8, 0x3d, 0x7d, 0x96, 0x2f,
-    0xfc, 0x3c, 0x3e, 0xa5, 0xcb, 0x25, 0x62, 0xe9, 0xdd, 0x62, 0x9c, 0xf5,
-    0x3c, 0x79, 0x7c, 0x1f, 0x27, 0x65, 0x8a, 0x93, 0xc6, 0xe1, 0x0d, 0xd1,
-    0xbf, 0x52, 0xc5, 0xe8, 0xb8, 0xcb, 0x15, 0x29, 0x9f, 0x60, 0xc0, 0x21,
-    0x8e, 0x44, 0x22, 0x20, 0xbe, 0x7d, 0x4c, 0x16, 0x2f, 0xb6, 0x3c, 0xf1,
-    0x62, 0xb6, 0x3c, 0x6c, 0x22, 0xbf, 0xf4, 0xf9, 0x85, 0xe6, 0xef, 0x3c,
-    0xb1, 0x7f, 0xda, 0x32, 0x47, 0xfc, 0xde, 0x56, 0x2f, 0xfe, 0x9c, 0x1b,
-    0xf0, 0xb3, 0xa3, 0x92, 0xc5, 0x7d, 0x17, 0xac, 0x7e, 0x23, 0xbb, 0xe6,
-    0x97, 0x8e, 0x58, 0xbf, 0x70, 0x5b, 0x1d, 0xd6, 0x2b, 0x73, 0xce, 0xec,
-    0x92, 0xfc, 0xdf, 0x3b, 0xf1, 0x62, 0xf1, 0x67, 0x16, 0x2f, 0xff, 0xfd,
-    0x3f, 0x73, 0xc6, 0x45, 0x06, 0xd0, 0x7f, 0x7e, 0xf9, 0xbb, 0xec, 0xb1,
-    0x5d, 0x6b, 0x31, 0x9e, 0x47, 0x76, 0x85, 0xd4, 0x21, 0x7a, 0x38, 0x44,
-    0x61, 0x09, 0xa5, 0x3b, 0xae, 0xbc, 0x6c, 0x71, 0xe8, 0x91, 0x43, 0x2f,
-    0x50, 0xce, 0xfc, 0x67, 0x2d, 0x0c, 0xc0, 0x1f, 0x14, 0x6a, 0xbc, 0x84,
-    0x9f, 0xa1, 0xbe, 0x27, 0xde, 0x84, 0x81, 0x94, 0x75, 0x0e, 0x5f, 0xef,
-    0x43, 0x23, 0xd8, 0x80, 0xb1, 0x7b, 0x5c, 0x12, 0xc5, 0xb8, 0xb1, 0x7f,
-    0xb7, 0x03, 0x01, 0xcb, 0x75, 0x8a, 0xf9, 0xe3, 0x90, 0x95, 0x62, 0x21,
-    0x9d, 0x96, 0xff, 0x6c, 0x3c, 0xf7, 0x1b, 0xb5, 0x8b, 0xc0, 0xf7, 0x16,
-    0x2f, 0xfe, 0x3b, 0x77, 0x18, 0x4c, 0x32, 0x6f, 0xac, 0x5b, 0x8b, 0x14,
-    0xb1, 0x5e, 0x2f, 0xba, 0x09, 0x51, 0x88, 0xa5, 0xc1, 0xe0, 0x32, 0xd2,
-    0xc5, 0xd0, 0xeb, 0x16, 0x2c, 0x63, 0x9a, 0x96, 0x0c, 0xbe, 0xc1, 0x6b,
-    0x65, 0x8b, 0xe8, 0x70, 0x67, 0x58, 0xbf, 0x0f, 0x06, 0xd0, 0x58, 0xa7,
-    0x3f, 0x06, 0x24, 0x11, 0x25, 0xff, 0xd9, 0xd3, 0x07, 0x84, 0x28, 0x67,
-    0x16, 0x2f, 0xda, 0x9f, 0x86, 0x35, 0x8a, 0xd1, 0xf7, 0xb2, 0x2d, 0x80,
-    0xb1, 0x76, 0xd2, 0xb1, 0x7e, 0xc1, 0xfd, 0xf6, 0x58, 0xb4, 0xec, 0x7a,
-    0x6e, 0x24, 0x43, 0x17, 0xc1, 0x36, 0x71, 0x62, 0xfe, 0x1c, 0x80, 0xb3,
-    0xb5, 0x8b, 0xfe, 0x81, 0xda, 0x1e, 0xe4, 0x9a, 0xb1, 0x77, 0xdd, 0x62,
-    0xa5, 0x14, 0x78, 0x46, 0xc5, 0xde, 0x3b, 0xbd, 0x25, 0xba, 0xc5, 0xcf,
-    0xb2, 0xc5, 0x49, 0xb5, 0xf8, 0xed, 0xee, 0x39, 0x2c, 0x58, 0x0b, 0x17,
-    0xf4, 0x27, 0x5a, 0x90, 0x96, 0x2d, 0xda, 0xc5, 0xdb, 0x99, 0x87, 0x85,
-    0xc2, 0xfa, 0xd2, 0x20, 0xc9, 0x52, 0xff, 0x07, 0x09, 0xe8, 0xe4, 0x05,
-    0x8b, 0xe6, 0xea, 0xc2, 0x58, 0xbe, 0xe3, 0x76, 0xeb, 0x15, 0x89, 0x9f,
-    0x34, 0x27, 0xc8, 0x8b, 0x86, 0xde, 0x24, 0xbf, 0xfc, 0x00, 0xfc, 0xf0,
-    0x7d, 0x00, 0xef, 0xc5, 0x8a, 0x1a, 0xf7, 0x9e, 0x42, 0xf3, 0x72, 0x17,
-    0x86, 0xdc, 0x7a, 0xc9, 0xe1, 0x2c, 0xd0, 0x9c, 0x03, 0xa1, 0x43, 0x5b,
-    0x8d, 0xe2, 0x8d, 0x7b, 0xa2, 0x6d, 0xd0, 0xfa, 0xc5, 0xf7, 0x36, 0x17,
-    0x16, 0x2e, 0xda, 0x0b, 0x17, 0x9f, 0xee, 0xb1, 0x71, 0xe5, 0x62, 0xe8,
-    0xdc, 0x6b, 0x15, 0x28, 0xa6, 0xc1, 0x8e, 0xc9, 0x7c, 0x32, 0x21, 0xc8,
-    0xe1, 0x7b, 0xff, 0xb6, 0xdf, 0xee, 0x1e, 0x8d, 0xce, 0xfc, 0xb1, 0x7d,
-    0x9d, 0xc2, 0x56, 0x2f, 0x3f, 0xe5, 0x62, 0xf0, 0x9b, 0x8b, 0x15, 0x88,
-    0xa7, 0xfa, 0x5f, 0x42, 0x30, 0xc7, 0x2f, 0x79, 0xf6, 0x58, 0xbf, 0xe7,
-    0x36, 0x47, 0x3d, 0x33, 0xeb, 0x17, 0xff, 0x89, 0x8d, 0xfe, 0x78, 0x0e,
-    0x50, 0xe2, 0xc5, 0xfb, 0x0a, 0x3a, 0x4d, 0x58, 0xbe, 0x20, 0x1f, 0xcb,
-    0x17, 0xf7, 0xdc, 0xcd, 0xb0, 0x25, 0x8a, 0x93, 0xd4, 0xe1, 0x1d, 0xfe,
-    0x70, 0xbb, 0x87, 0x33, 0x75, 0x8b, 0xfa, 0x01, 0x80, 0x13, 0xda, 0xc5,
-    0xec, 0x0b, 0x75, 0x8a, 0x94, 0xc9, 0xdd, 0xff, 0xe4, 0x2c, 0x6e, 0x46,
-    0x37, 0xe9, 0xee, 0x1c, 0x95, 0x8b, 0xfe, 0x17, 0x0c, 0x18, 0x9b, 0x50,
-    0x58, 0xac, 0x3e, 0x52, 0x29, 0xbf, 0x85, 0xc9, 0x88, 0x5a, 0x58, 0xbc,
-    0x2c, 0xed, 0x62, 0xfe, 0xce, 0xc1, 0x9e, 0xe2, 0xc5, 0xfa, 0x4b, 0xb8,
-    0x71, 0x63, 0xe6, 0xbe, 0xbe, 0x8b, 0x6f, 0x18, 0x09, 0x36, 0xf7, 0xdf,
-    0x75, 0x8b, 0xde, 0xc3, 0xac, 0x5f, 0x39, 0xbf, 0x75, 0x8b, 0x64, 0x9e,
-    0x07, 0xc7, 0x6a, 0x08, 0x84, 0xf2, 0xf5, 0x99, 0x62, 0xe9, 0x1a, 0xc5,
-    0xc7, 0xd7, 0x66, 0xa3, 0x42, 0x37, 0xf4, 0x81, 0x88, 0x58, 0xb1, 0x58,
-    0x7b, 0x40, 0x2e, 0xbf, 0x77, 0xcf, 0x3e, 0xcb, 0x17, 0xdd, 0xec, 0x2e,
-    0x2c, 0x5f, 0x8b, 0x6e, 0x3f, 0x6b, 0x15, 0x27, 0xa0, 0x22, 0x6b, 0xff,
-    0xa7, 0x60, 0x9b, 0xbe, 0x60, 0xdf, 0x8b, 0x15, 0x28, 0xe3, 0x83, 0xd9,
-    0x10, 0xdb, 0xcb, 0x17, 0xa4, 0xb6, 0x58, 0xbf, 0x61, 0xbe, 0x7d, 0x96,
-    0x2f, 0xf3, 0xc4, 0x61, 0x4f, 0xb8, 0xb1, 0x74, 0x06, 0xb1, 0x76, 0x76,
-    0xb1, 0x58, 0x6c, 0x00, 0x31, 0x7a, 0x4b, 0xcb, 0x15, 0x28, 0xfa, 0x18,
-    0x97, 0x63, 0xba, 0x2a, 0x03, 0x2f, 0x42, 0x0b, 0xa3, 0xa5, 0x62, 0xfe,
-    0xe0, 0xa0, 0x66, 0x12, 0xc5, 0x39, 0xe4, 0xf8, 0x6a, 0xff, 0xfe, 0x87,
-    0x0b, 0x22, 0x33, 0x7f, 0xce, 0xe6, 0xe9, 0x82, 0x58, 0xbd, 0x8f, 0xb2,
-    0xc5, 0xd3, 0xb7, 0x67, 0xfe, 0x4c, 0x54, 0xc8, 0xce, 0x14, 0x28, 0x2f,
-    0xff, 0xd3, 0xa0, 0x67, 0x08, 0x4d, 0x0f, 0x89, 0xb6, 0x58, 0xbe, 0x68,
-    0x76, 0x05, 0x8b, 0xda, 0xc6, 0x58, 0xbf, 0x81, 0x27, 0x7d, 0x44, 0xb1,
-    0x6e, 0x8b, 0x16, 0x29, 0x3c, 0x3c, 0x2f, 0xbf, 0x7b, 0x18, 0xb7, 0x58,
-    0xaf, 0xa6, 0x4c, 0x4a, 0xdc, 0x24, 0xf2, 0xff, 0x51, 0x2d, 0xff, 0xe9,
-    0x06, 0xb5, 0x21, 0x19, 0xee, 0x66, 0xcb, 0x17, 0xff, 0x03, 0x8f, 0xd8,
-    0x43, 0xd1, 0x30, 0x4b, 0x17, 0x49, 0xd6, 0x2b, 0x0f, 0x7f, 0xb4, 0x8b,
-    0xff, 0xc3, 0xfc, 0xf7, 0x02, 0xc3, 0xe7, 0x7e, 0x58, 0xbf, 0x1f, 0x3f,
-    0x84, 0xb1, 0x4e, 0x7e, 0x6c, 0x99, 0x7f, 0xa0, 0xe4, 0x29, 0x23, 0x56,
-    0x2f, 0xf7, 0xdf, 0x82, 0x3c, 0xba, 0xc5, 0xf3, 0x47, 0x31, 0xab, 0x17,
-    0x77, 0xed, 0xcf, 0x67, 0xe6, 0x77, 0xf6, 0x1b, 0x3c, 0x03, 0x2c, 0x56,
-    0x1e, 0xf0, 0x46, 0x17, 0xf9, 0xa0, 0x3c, 0xc0, 0x71, 0x62, 0x9c, 0xf5,
-    0x44, 0x45, 0x7f, 0xee, 0x9f, 0x68, 0x19, 0xef, 0xb1, 0xab, 0x17, 0xf8,
-    0x18, 0x51, 0x4e, 0x69, 0x62, 0xb0, 0xfd, 0xd9, 0x12, 0xe6, 0x25, 0x8b,
-    0x9b, 0xa9, 0x62, 0xb4, 0x6c, 0x3e, 0x2d, 0x7e, 0x9f, 0x7f, 0x3b, 0x58,
-    0xb1, 0xf0, 0xf2, 0x9c, 0x86, 0xff, 0xdd, 0xc3, 0xf2, 0x76, 0xee, 0x18,
-    0xb1, 0x7f, 0x45, 0x9f, 0x9e, 0xf8, 0xb1, 0x7f, 0x3f, 0x7d, 0xc3, 0x3c,
-    0xb1, 0x52, 0x8c, 0x7c, 0x26, 0x64, 0x10, 0x18, 0x5f, 0xfe, 0x60, 0x70,
-    0x7f, 0xc2, 0xf6, 0x77, 0xe5, 0x8a, 0xed, 0x5d, 0xef, 0xe3, 0x3f, 0x28,
-    0x4c, 0x72, 0x36, 0x1f, 0x1d, 0x5f, 0xbb, 0xe1, 0xde, 0x3d, 0x62, 0xe6,
-    0x75, 0x8b, 0xff, 0xbe, 0xcf, 0xe0, 0x08, 0x89, 0xa0, 0xb1, 0x7f, 0xcc,
-    0x4e, 0x7e, 0xf9, 0x31, 0x2c, 0x5f, 0x49, 0x0b, 0xaf, 0x58, 0xbe, 0x3c,
-    0xf7, 0x05, 0x8b, 0xb3, 0x86, 0x23, 0x23, 0x64, 0x3f, 0x9d, 0x00, 0x9e,
-    0xa5, 0x35, 0x56, 0x2d, 0x28, 0x6f, 0x5d, 0xee, 0xbd, 0x62, 0xff, 0x73,
-    0xed, 0xbc, 0x90, 0xd6, 0x2c, 0xc0, 0x3d, 0x1f, 0x0e, 0xdf, 0xcd, 0xb0,
-    0x18, 0x86, 0xb1, 0x7f, 0xb0, 0xf1, 0x41, 0x8b, 0x65, 0x8b, 0xef, 0x7d,
-    0x8e, 0xb1, 0x7f, 0xfb, 0x02, 0xee, 0x1c, 0xe4, 0x9d, 0xbb, 0xf2, 0xc5,
-    0x49, 0xf8, 0xb9, 0x1d, 0x6c, 0xd9, 0x16, 0xc0, 0xec, 0x71, 0xb8, 0x9b,
-    0x0a, 0xcd, 0xe1, 0xad, 0xdc, 0x2d, 0x1e, 0x14, 0xb1, 0x46, 0x09, 0xa8,
-    0xca, 0x0f, 0x1b, 0x87, 0xe3, 0x4d, 0x02, 0x69, 0x42, 0xb7, 0x90, 0x95,
-    0xf4, 0xbd, 0xde, 0x91, 0xd9, 0x05, 0x08, 0x48, 0xe2, 0x70, 0xcb, 0xba,
-    0xa1, 0x4d, 0x7f, 0xf1, 0x81, 0xee, 0xda, 0x6f, 0xe0, 0x23, 0x96, 0x2f,
-    0x88, 0x4c, 0x1a, 0xc5, 0xf4, 0x59, 0x9b, 0xac, 0x5f, 0x64, 0x4e, 0x75,
-    0x8a, 0xec, 0xfa, 0xb4, 0x46, 0x02, 0x4b, 0xfe, 0xff, 0xf1, 0xfb, 0x86,
-    0x69, 0x62, 0xfb, 0xf3, 0xdf, 0x52, 0xc5, 0xec, 0xee, 0x0b, 0x15, 0xb9,
-    0xe2, 0xfc, 0x9e, 0xa5, 0x1a, 0x4c, 0x61, 0xc7, 0xfb, 0xfd, 0xe1, 0x6d,
-    0x3e, 0x91, 0xac, 0x5e, 0xf6, 0x12, 0xc5, 0xef, 0xb4, 0x7a, 0xc5, 0xbc,
-    0xb1, 0x73, 0x9d, 0x62, 0x88, 0xd4, 0xf8, 0x4a, 0xfc, 0x28, 0x60, 0x38,
-    0xb1, 0x7f, 0x83, 0x9d, 0xe3, 0xb3, 0x52, 0xb1, 0x7f, 0xc3, 0xc1, 0x6b,
-    0x6d, 0xdf, 0x65, 0x8b, 0xc5, 0x1a, 0x79, 0x62, 0xff, 0xf7, 0x4c, 0x21,
-    0x93, 0x05, 0xce, 0x48, 0x16, 0x2f, 0xff, 0xfe, 0x3b, 0xf0, 0xc8, 0xa0,
-    0x22, 0xf1, 0x9f, 0x98, 0x39, 0x61, 0xe5, 0x62, 0xb1, 0x18, 0x02, 0x4c,
-    0xbe, 0x7d, 0x49, 0xd6, 0x2b, 0x47, 0x89, 0xf2, 0x2b, 0xc5, 0x81, 0x2c,
-    0x5f, 0xff, 0x6f, 0xf1, 0x16, 0x77, 0x07, 0xe1, 0x67, 0x45, 0x8b, 0xf7,
-    0xe7, 0xee, 0x6a, 0xc5, 0xcd, 0x17, 0x0f, 0xf3, 0xa9, 0x4e, 0xf3, 0xe8,
-    0xd5, 0x8a, 0x94, 0xc2, 0xa2, 0x22, 0xfc, 0x26, 0x63, 0x8c, 0x6f, 0xff,
-    0xf3, 0xf4, 0x21, 0x70, 0xc0, 0xca, 0x47, 0xf6, 0x86, 0x71, 0x62, 0xa0,
-    0xaf, 0xf4, 0xd1, 0xc7, 0x49, 0xd1, 0x07, 0xca, 0x58, 0xe0, 0x8f, 0x7d,
-    0x28, 0xc3, 0xa2, 0x35, 0xfb, 0x22, 0x83, 0x12, 0xc5, 0xfb, 0x34, 0x52,
-    0x05, 0x8b, 0xba, 0x75, 0x2c, 0x5c, 0x7c, 0x58, 0xa9, 0x6e, 0xbb, 0x76,
-    0x3f, 0xca, 0xc9, 0x2c, 0xd8, 0xdc, 0x9e, 0x38, 0x7d, 0x17, 0x34, 0xe1,
-    0x97, 0xa1, 0x0e, 0x22, 0x88, 0xe2, 0x70, 0xc7, 0x6f, 0xc7, 0x14, 0x53,
-    0xe5, 0x8b, 0x32, 0xc5, 0x39, 0xbb, 0xe1, 0x55, 0xf7, 0xfe, 0xe6, 0xac,
-    0x5d, 0x10, 0x96, 0x2f, 0xfc, 0x6c, 0x96, 0xec, 0xfb, 0x19, 0x8b, 0x16,
-    0x3a, 0xc5, 0xdf, 0x95, 0x8a, 0xc4, 0x53, 0xf6, 0x48, 0xe3, 0x3d, 0x7a,
-    0x0f, 0x04, 0xaf, 0xf7, 0x80, 0x22, 0xe3, 0x8d, 0x62, 0xfd, 0x00, 0x66,
-    0x0d, 0x62, 0xdd, 0x1c, 0xf7, 0x18, 0xd2, 0xfd, 0xf7, 0xd0, 0x04, 0xb1,
-    0x74, 0xc1, 0x62, 0xfd, 0x3d, 0xfa, 0x74, 0xb1, 0x79, 0xfe, 0x25, 0x8b,
-    0x6b, 0x11, 0x5d, 0x11, 0x46, 0x8a, 0x4e, 0x2f, 0xe2, 0x9b, 0xf8, 0x2e,
-    0x34, 0xf7, 0x05, 0x8b, 0xee, 0x7b, 0x37, 0x58, 0xa9, 0x45, 0x26, 0x28,
-    0x08, 0xc2, 0xfd, 0xe6, 0x63, 0xf1, 0x62, 0xfd, 0xee, 0xf7, 0x7d, 0x2c,
-    0x59, 0xfb, 0x3d, 0x30, 0x14, 0x5f, 0xf6, 0x76, 0xde, 0x9f, 0x30, 0x16,
-    0x2f, 0xff, 0x61, 0x6d, 0xbb, 0x0f, 0x5a, 0x93, 0xf1, 0x62, 0xff, 0xe2,
-    0x9f, 0x73, 0xdd, 0xee, 0xe5, 0xb2, 0xc5, 0xfb, 0xa9, 0xfb, 0x87, 0x16,
-    0x2a, 0x23, 0xf4, 0x64, 0x7b, 0xa1, 0xf5, 0x8b, 0xfc, 0xe4, 0x6b, 0x0a,
-    0x03, 0x58, 0xbe, 0x38, 0x71, 0x71, 0x62, 0xa4, 0xfc, 0xb0, 0x61, 0xcd,
-    0x2f, 0xe2, 0xcf, 0x0a, 0x49, 0x62, 0xfd, 0xdc, 0x0a, 0x46, 0xb1, 0x47,
-    0x3d, 0x56, 0x2c, 0xbf, 0xa0, 0xe4, 0x76, 0xf2, 0xc5, 0xff, 0x0f, 0x0c,
-    0xe3, 0x97, 0x70, 0x58, 0xb4, 0xf6, 0x7d, 0x01, 0x16, 0xd4, 0xaa, 0xc0,
-    0xc3, 0x97, 0x86, 0x07, 0xe1, 0x28, 0xd0, 0x81, 0x28, 0x44, 0xde, 0xcd,
-    0xa5, 0x62, 0xf7, 0xb3, 0xeb, 0x16, 0x68, 0x1b, 0xaf, 0x8e, 0xdf, 0xd8,
-    0x2e, 0xbc, 0x5e, 0x0d, 0x62, 0xff, 0xf6, 0x10, 0x60, 0x33, 0x37, 0xc7,
-    0x29, 0x58, 0xad, 0x1f, 0xff, 0xcd, 0x6f, 0xfe, 0x9e, 0x73, 0x0f, 0xe2,
-    0x93, 0xf1, 0x62, 0xff, 0xa7, 0x46, 0xfc, 0xa7, 0x34, 0xb1, 0x7f, 0x1a,
-    0x66, 0x1e, 0x77, 0x58, 0xbf, 0xfa, 0x7b, 0x87, 0x85, 0x3b, 0x3f, 0x7e,
-    0x58, 0xbf, 0xcf, 0xf6, 0xde, 0x48, 0x6b, 0x14, 0xe8, 0xac, 0x23, 0x1e,
-    0x24, 0x5f, 0xb7, 0x01, 0xc4, 0x05, 0x8b, 0xff, 0xa7, 0xb3, 0x18, 0xbd,
-    0x16, 0x6b, 0x16, 0x2a, 0x4f, 0xc4, 0xe5, 0x77, 0xdd, 0x1c, 0x86, 0xb1,
-    0x7f, 0xfd, 0xa2, 0x79, 0x1e, 0xb1, 0xcd, 0x29, 0xdd, 0x62, 0xff, 0xc5,
-    0x23, 0xfc, 0x9c, 0xb3, 0x75, 0x8b, 0xce, 0x5e, 0x58, 0xac, 0x46, 0x6b,
-    0x92, 0x44, 0x9f, 0xf3, 0xeb, 0xfc, 0x3e, 0x3f, 0xff, 0x83, 0x58, 0xbf,
-    0xf4, 0xf0, 0x9a, 0x06, 0x73, 0x34, 0xb1, 0x7e, 0x84, 0x45, 0x23, 0x58,
-    0xa7, 0x3e, 0x86, 0x3f, 0xbf, 0x0f, 0x0a, 0x63, 0xd6, 0x2f, 0xe2, 0xc8,
-    0x7e, 0x46, 0xb1, 0x5b, 0x1e, 0xb8, 0xca, 0xaf, 0x13, 0x69, 0x62, 0xff,
-    0xff, 0xe9, 0xf9, 0x67, 0xbe, 0xe6, 0x00, 0x9f, 0xb8, 0x78, 0x98, 0x1c,
-    0x58, 0xbe, 0x66, 0x6e, 0xa5, 0x8b, 0xff, 0xff, 0xfd, 0xfc, 0x7d, 0x40,
-    0xc2, 0xc8, 0xa1, 0x25, 0xe3, 0x01, 0xc3, 0x38, 0x76, 0x81, 0xbe, 0x58,
-    0xbf, 0xf8, 0x12, 0x67, 0xbf, 0x9e, 0xfb, 0x41, 0x62, 0xff, 0xff, 0xfd,
-    0x3f, 0x2c, 0xf4, 0x76, 0x19, 0xbf, 0xdc, 0x65, 0x2d, 0xb7, 0xd8, 0xc3,
-    0x81, 0x62, 0xff, 0xff, 0xfd, 0xfc, 0x3e, 0x6f, 0x3f, 0x93, 0x99, 0xc2,
-    0xcf, 0xf8, 0xa4, 0x06, 0x1c, 0x0b, 0x17, 0xb0, 0x66, 0x3a, 0x6a, 0x7a,
-    0x46, 0xf4, 0x22, 0x2f, 0xfe, 0xe6, 0xd8, 0x16, 0x10, 0xba, 0xa6, 0x33,
-    0x15, 0x70, 0x68, 0x70, 0xee, 0x5e, 0x24, 0xe9, 0x1f, 0x3d, 0xfb, 0xdc,
-    0x62, 0x35, 0x62, 0xff, 0xd1, 0x9b, 0xb9, 0xbf, 0x68, 0x67, 0x16, 0x2b,
-    0x63, 0xed, 0xe1, 0x4d, 0x4a, 0xe1, 0x33, 0xcb, 0x03, 0x0e, 0x30, 0x0b,
-    0xfd, 0xdc, 0x39, 0x14, 0x27, 0x65, 0x8b, 0xfe, 0xd6, 0x1a, 0xc3, 0xfc,
-    0xe9, 0x62, 0x86, 0xc9, 0xa3, 0xc8, 0x52, 0xee, 0x45, 0x12, 0x26, 0xa1,
-    0xca, 0x78, 0x4f, 0xfe, 0x1d, 0xcc, 0x78, 0x50, 0x9c, 0xf4, 0xe4, 0xe8,
-    0x8f, 0xfa, 0x1c, 0x5f, 0x74, 0xd1, 0xe5, 0x62, 0xff, 0xfb, 0xbf, 0x6b,
-    0x53, 0xe0, 0x06, 0x50, 0xfe, 0x2c, 0x5b, 0xcb, 0x16, 0xf6, 0x1f, 0x2e,
-    0x94, 0xee, 0x7e, 0x8b, 0x17, 0xd2, 0x50, 0xe2, 0xc5, 0x9f, 0xb3, 0xe2,
-    0x88, 0x9c, 0x03, 0x37, 0xfb, 0x5b, 0x14, 0xee, 0xf0, 0x58, 0xaf, 0x9f,
-    0x5b, 0x1b, 0x5f, 0xbf, 0x3d, 0x07, 0x2b, 0x17, 0x31, 0x2c, 0x5f, 0x69,
-    0xba, 0x62, 0xc5, 0x0c, 0xdd, 0x08, 0x5a, 0xf9, 0xff, 0x30, 0x58, 0xb7,
-    0x45, 0x8b, 0xf7, 0x7e, 0x29, 0xfa, 0xc5, 0xb5, 0x26, 0xf5, 0x85, 0x2e,
-    0x9e, 0xa5, 0x8b, 0xee, 0xe2, 0x9d, 0x2c, 0x5b, 0x4b, 0x15, 0x86, 0xdc,
-    0x44, 0xb7, 0xcd, 0xae, 0xe0, 0xb1, 0x77, 0xdd, 0x62, 0xff, 0xfd, 0x3e,
-    0xfb, 0x45, 0xc6, 0x7d, 0xc9, 0xb3, 0x75, 0x8a, 0x82, 0xa0, 0xb1, 0xb2,
-    0x1a, 0x43, 0xa5, 0xf3, 0x92, 0xf1, 0x44, 0x44, 0x1d, 0x09, 0x23, 0x85,
-    0xef, 0x9f, 0xa6, 0x0d, 0x62, 0xf8, 0xbd, 0x84, 0xb1, 0x71, 0x7b, 0x47,
-    0x8a, 0xc4, 0x97, 0xfd, 0xdc, 0x38, 0x2f, 0x4f, 0xb8, 0xb1, 0x7e, 0xd4,
-    0x1b, 0xb0, 0x96, 0x2f, 0xf7, 0x02, 0x61, 0xcf, 0x7c, 0x58, 0xa9, 0x46,
-    0x4e, 0x16, 0x39, 0xe3, 0x15, 0xdf, 0xb8, 0x2f, 0x49, 0x2c, 0x5f, 0xe1,
-    0x77, 0x0f, 0x70, 0x51, 0xeb, 0x17, 0xb9, 0x3d, 0xac, 0x5e, 0x9f, 0xf1,
-    0x62, 0xfd, 0xdf, 0x30, 0x8d, 0x58, 0xbb, 0xb0, 0x2c, 0x5d, 0x9f, 0x30,
-    0xf0, 0xe0, 0x55, 0x73, 0x05, 0xda, 0x2b, 0x00, 0x3d, 0xe6, 0x0b, 0xff,
-    0xe9, 0x20, 0xf2, 0x2f, 0xb1, 0xf0, 0x6d, 0x05, 0x8a, 0x82, 0x7a, 0x98,
-    0x73, 0xf2, 0x82, 0x87, 0x30, 0x47, 0xb7, 0x60, 0x4b, 0x17, 0xfb, 0x3b,
-    0x33, 0x3e, 0xff, 0x58, 0xbb, 0xe3, 0x58, 0xb9, 0xf7, 0x58, 0xb9, 0xbc,
-    0x33, 0x61, 0x1c, 0x31, 0x7f, 0xf3, 0xef, 0xfc, 0xcf, 0x6a, 0x7f, 0x2b,
-    0x14, 0xe8, 0xf0, 0xd0, 0xc3, 0x32, 0x91, 0x7d, 0xa5, 0x62, 0xfe, 0xd4,
-    0xbc, 0x1b, 0x8b, 0x14, 0x33, 0x7d, 0xd8, 0x8d, 0xfc, 0x0c, 0x8a, 0x4e,
-    0xeb, 0x17, 0xfe, 0xe0, 0x7c, 0xe6, 0xcd, 0x14, 0xc7, 0xac, 0x53, 0x1f,
-    0xa7, 0x8b, 0xaf, 0xfb, 0xdc, 0x14, 0x03, 0x1b, 0xf9, 0x62, 0xf4, 0xe6,
-    0x96, 0x2f, 0xc2, 0x37, 0xef, 0xc5, 0x8b, 0xc4, 0xc6, 0xc4, 0x78, 0xda,
-    0x1c, 0xa9, 0x4d, 0xb7, 0x21, 0x2c, 0xc4, 0x22, 0x84, 0x15, 0xff, 0xe7,
-    0xdb, 0x99, 0xaf, 0x13, 0x8b, 0xaf, 0xe2, 0xc5, 0xff, 0xc2, 0x6d, 0x43,
-    0x92, 0x76, 0xef, 0xcb, 0x17, 0xff, 0xed, 0x08, 0xb9, 0xee, 0xf7, 0x7d,
-    0x79, 0x81, 0xc5, 0x8b, 0xff, 0xb8, 0x71, 0x42, 0x0c, 0xfb, 0xb8, 0xd6,
-    0x2f, 0xf3, 0x93, 0x6d, 0x3c, 0xc5, 0x8b, 0xff, 0x48, 0xdc, 0x8d, 0x88,
-    0xa4, 0x6b, 0x16, 0x8c, 0x1a, 0x6a, 0xd8, 0x8d, 0xc5, 0x9f, 0x23, 0x06,
-    0x65, 0x7d, 0x39, 0x06, 0x58, 0xa1, 0x9f, 0xaf, 0xd5, 0x2f, 0x63, 0xf1,
-    0x62, 0xfd, 0xef, 0x60, 0xb6, 0x58, 0xbf, 0xfe, 0xd9, 0xbf, 0x83, 0x33,
-    0x08, 0xb1, 0xc0, 0xb1, 0x78, 0xef, 0xa5, 0x8a, 0xd9, 0x16, 0x5b, 0x8e,
-    0x68, 0xa8, 0x09, 0xf7, 0xfd, 0xa0, 0x66, 0x80, 0x42, 0x02, 0xc5, 0xf8,
-    0x0d, 0xdc, 0x0e, 0xb1, 0x7b, 0x66, 0xdd, 0x62, 0xff, 0x43, 0xc5, 0x9c,
-    0xfb, 0xac, 0x54, 0xa2, 0xda, 0x23, 0xad, 0x15, 0x30, 0xfd, 0xde, 0x65,
-    0x8b, 0xf8, 0xa1, 0x2e, 0x52, 0xb1, 0x7f, 0x13, 0x1b, 0xcc, 0xd2, 0xc5,
-    0xff, 0xf3, 0x7f, 0xee, 0x64, 0x1c, 0xf3, 0xf0, 0xc6, 0xb1, 0x58, 0x8a,
-    0xb3, 0x95, 0xf4, 0x2e, 0xbf, 0xfd, 0x9a, 0xd3, 0x40, 0xcf, 0xcf, 0xb8,
-    0xcb, 0x17, 0xbd, 0xb0, 0x4b, 0x17, 0x1f, 0x16, 0x2f, 0xe7, 0x1e, 0x9c,
-    0x5b, 0x2c, 0x5e, 0xd3, 0x70, 0xc3, 0xe6, 0xc2, 0x0f, 0x0b, 0xdb, 0xd2,
-    0x99, 0x14, 0x0c, 0x45, 0x0b, 0x1b, 0xfd, 0xbb, 0xb1, 0x9c, 0x6f, 0xac,
-    0x53, 0x9f, 0x87, 0xce, 0xef, 0xec, 0xf7, 0xe7, 0x5c, 0x58, 0xbf, 0xff,
-    0x19, 0xe2, 0xc7, 0xe7, 0x30, 0xb3, 0xdf, 0x75, 0x8a, 0x95, 0xf1, 0x71,
-    0xca, 0x1b, 0xc8, 0x6a, 0x3c, 0x3d, 0x4e, 0x78, 0xd2, 0x95, 0x08, 0x84,
-    0x45, 0xd7, 0xb8, 0x23, 0x56, 0x2f, 0x7d, 0xc2, 0x58, 0xbf, 0xff, 0x7d,
-    0xce, 0xc3, 0xe6, 0x13, 0x77, 0xac, 0x3a, 0xc5, 0xf1, 0x4c, 0x1d, 0x62,
-    0xf3, 0x14, 0x4b, 0x17, 0xbb, 0x83, 0xac, 0x59, 0x8e, 0x6e, 0xc8, 0x76,
-    0xf0, 0xa4, 0x96, 0x2f, 0xe8, 0x4f, 0x48, 0xe1, 0x69, 0x62, 0xff, 0xff,
-    0x3f, 0xa4, 0x9a, 0x18, 0x3e, 0x36, 0x9f, 0xef, 0xd1, 0x62, 0xfa, 0x4a,
-    0x1c, 0x58, 0xac, 0x4f, 0x97, 0x71, 0xf7, 0x1e, 0xd2, 0xaf, 0xd7, 0x08,
-    0x94, 0x43, 0x9d, 0x0d, 0x03, 0x60, 0xbf, 0xff, 0x70, 0x8c, 0xfb, 0x3f,
-    0x80, 0x22, 0x26, 0x82, 0xc5, 0xff, 0xff, 0xd3, 0xac, 0x8a, 0x4f, 0x9b,
-    0xb8, 0xff, 0x3e, 0xe1, 0xba, 0xce, 0xa5, 0x8b, 0xf1, 0x4c, 0x00, 0xeb,
-    0x17, 0xf3, 0x9b, 0x1c, 0x2d, 0x1a, 0xb1, 0x7f, 0x8a, 0x45, 0xdf, 0x1a,
-    0x3d, 0x62, 0xbe, 0x7d, 0x6c, 0x69, 0x7f, 0xf0, 0xf4, 0xdc, 0xfc, 0x9c,
-    0xb3, 0x75, 0x8b, 0xe9, 0xc0, 0xbc, 0xb1, 0x7f, 0x6f, 0x3d, 0x83, 0x52,
-    0xb1, 0x7f, 0xa4, 0xb7, 0x62, 0x07, 0x5a, 0xb1, 0x52, 0x7d, 0x07, 0x30,
-    0xb8, 0xb7, 0x58, 0xa5, 0x8b, 0xec, 0x8e, 0x70, 0x2c, 0x54, 0x6c, 0x6c,
-    0x74, 0x19, 0x67, 0xc3, 0xef, 0x3a, 0x4d, 0xff, 0x48, 0x35, 0xa9, 0x08,
-    0x7d, 0xac, 0x5f, 0xe0, 0x8f, 0xf9, 0x72, 0xd9, 0x62, 0xff, 0xf3, 0x41,
-    0xf5, 0x9d, 0xc5, 0x09, 0xd6, 0xcb, 0x17, 0xff, 0xf8, 0x07, 0x68, 0x67,
-    0x47, 0xe7, 0xf0, 0x11, 0xd9, 0xf7, 0x58, 0xa9, 0x47, 0x38, 0x0d, 0x44,
-    0x9b, 0x70, 0x5c, 0x58, 0xbf, 0xe3, 0xce, 0xf9, 0xe7, 0xd6, 0x2c, 0x5c,
-    0xde, 0x58, 0xbc, 0x59, 0xc3, 0x0f, 0xa7, 0x06, 0x48, 0xe6, 0xfe, 0x6d,
-    0x87, 0x99, 0xc5, 0x8b, 0xfe, 0x9d, 0x46, 0xc0, 0x13, 0x16, 0xeb, 0x15,
-    0x8b, 0x93, 0xfb, 0xc2, 0x49, 0xc8, 0x62, 0x45, 0x3c, 0x22, 0xff, 0x09,
-    0x00, 0x13, 0x7a, 0x32, 0x3e, 0x90, 0x98, 0x8e, 0x3e, 0x0c, 0xba, 0xe9,
-    0xfa, 0xc5, 0xff, 0x73, 0xc2, 0xef, 0x06, 0xc4, 0xb1, 0x7f, 0xff, 0xf4,
-    0x24, 0xc1, 0xe1, 0x37, 0x3e, 0xc0, 0xe1, 0x99, 0xe9, 0xf7, 0x16, 0x2a,
-    0x24, 0x56, 0xf8, 0xea, 0xe1, 0x76, 0xb1, 0x7f, 0x49, 0xe7, 0x3b, 0xf2,
-    0xc5, 0x1c, 0xf1, 0xfc, 0x33, 0x7f, 0xd0, 0xfb, 0x43, 0x76, 0xd6, 0xcb,
-    0x15, 0x87, 0xbc, 0xc4, 0x55, 0x2b, 0xef, 0xd9, 0x3a, 0x2c, 0x78, 0x5d,
-    0xb4, 0x31, 0x05, 0x0c, 0x9b, 0xfd, 0xb4, 0x97, 0xbe, 0xd0, 0x58, 0xa5,
-    0x8b, 0xef, 0xb3, 0x1d, 0x62, 0xfe, 0xc2, 0xce, 0x4e, 0x96, 0x2b, 0x47,
-    0x9c, 0x19, 0x15, 0xfd, 0xd6, 0xe9, 0xe4, 0xf8, 0xb1, 0x76, 0x8d, 0x58,
-    0xa9, 0x47, 0xe4, 0x0d, 0x31, 0x68, 0x88, 0xc3, 0x32, 0xbf, 0xee, 0xe1,
-    0x1c, 0xe5, 0xe9, 0x3a, 0xc5, 0xee, 0x18, 0xeb, 0x15, 0x87, 0xb7, 0xe3,
-    0xdb, 0xfd, 0xbb, 0xeb, 0xdc, 0xc0, 0x96, 0x2f, 0xed, 0xb3, 0x4f, 0xbc,
-    0xac, 0x5f, 0x10, 0xe4, 0xeb, 0x17, 0xff, 0xc2, 0x2f, 0x73, 0xef, 0x11,
-    0x49, 0xda, 0x0b, 0x17, 0xf6, 0xa5, 0xe0, 0xdc, 0x58, 0xb8, 0x4c, 0xb1,
-    0x6c, 0x30, 0xf1, 0x08, 0xb6, 0x8e, 0x8b, 0xbe, 0x90, 0x94, 0xbf, 0x98,
-    0x18, 0x36, 0x82, 0xc5, 0x4a, 0x66, 0x99, 0x0d, 0xd7, 0x2a, 0xbe, 0x07,
-    0x23, 0x57, 0x5a, 0xb1, 0x7b, 0xc1, 0xec, 0xb1, 0x79, 0xb5, 0xb2, 0xc5,
-    0xff, 0xf3, 0x78, 0x52, 0xf3, 0xde, 0xff, 0xce, 0xf8, 0xb1, 0x58, 0x89,
-    0x0d, 0xc8, 0x00, 0x3d, 0x7e, 0x07, 0x0c, 0x9f, 0x2c, 0x54, 0x9e, 0xd3,
-    0x18, 0x54, 0xab, 0x26, 0xec, 0x85, 0xcd, 0xbf, 0x1b, 0x1b, 0x19, 0x94,
-    0x63, 0x37, 0xef, 0x81, 0xf4, 0x6a, 0xc5, 0xed, 0xc3, 0x82, 0xc5, 0xf4,
-    0xeb, 0xaf, 0xe2, 0xc5, 0x7c, 0xf2, 0x00, 0x41, 0x7e, 0xec, 0x0d, 0x9f,
-    0x58, 0xbf, 0x82, 0x61, 0xcf, 0x7c, 0x58, 0xa7, 0x3d, 0x90, 0x14, 0xdf,
-    0xdf, 0xc0, 0x0b, 0xdc, 0x58, 0xbd, 0x39, 0xf5, 0x8a, 0x19, 0xe5, 0xf8,
-    0xbe, 0xfb, 0x3a, 0xa7, 0x4b, 0x17, 0xff, 0xff, 0xf6, 0x47, 0xe0, 0xf9,
-    0x23, 0x9f, 0x7f, 0x05, 0xbf, 0xe7, 0x9f, 0xce, 0x34, 0x9d, 0x62, 0xfd,
-    0xfc, 0x84, 0x19, 0x62, 0xff, 0xfb, 0x3f, 0xbf, 0xde, 0x22, 0x60, 0xbd,
-    0x9f, 0x58, 0xac, 0x55, 0x4a, 0xee, 0x5a, 0x7b, 0x66, 0xc2, 0x22, 0xe1,
-    0x2f, 0xa1, 0x17, 0x1c, 0x51, 0x7f, 0xf4, 0xbf, 0xbf, 0x9f, 0x60, 0x47,
-    0x62, 0xc5, 0xd3, 0xba, 0xc5, 0xbf, 0xa3, 0xde, 0xe2, 0x35, 0xf7, 0x9f,
-    0x22, 0x58, 0xb1, 0xab, 0x15, 0x87, 0xbd, 0xd9, 0x43, 0x91, 0xdf, 0x40,
-    0xa7, 0x65, 0x8b, 0x83, 0x02, 0xc5, 0x68, 0xde, 0x70, 0x8e, 0xf6, 0x3c,
-    0x4b, 0x17, 0x11, 0xab, 0x17, 0xd3, 0xa6, 0x82, 0xc5, 0x49, 0xba, 0x00,
-    0xc5, 0x4a, 0x26, 0x06, 0x43, 0xc5, 0x7a, 0x31, 0xdb, 0xfb, 0xcc, 0x31,
-    0xf6, 0x8f, 0xf2, 0x10, 0x81, 0x1c, 0xae, 0x8c, 0xa5, 0x22, 0x9b, 0x0c,
-    0xbd, 0xe3, 0x57, 0x79, 0x45, 0x91, 0x4b, 0x68, 0xd4, 0x67, 0xe7, 0x8f,
-    0x97, 0xf3, 0xeb, 0x8d, 0x29, 0xb0, 0x10, 0x80, 0x29, 0xfd, 0x3e, 0x46,
-    0xbb, 0xe9, 0x79, 0x22, 0x96, 0x0e, 0x14, 0x66, 0x61, 0xc6, 0x05, 0x7f,
-    0xf7, 0xb9, 0xfc, 0x88, 0x85, 0xdc, 0x38, 0xb1, 0x4b, 0x17, 0xff, 0x61,
-    0x03, 0x33, 0x5c, 0xf4, 0xe2, 0xc5, 0xff, 0x77, 0xec, 0xd3, 0xec, 0xc7,
-    0x58, 0xbd, 0x9d, 0x31, 0x62, 0x80, 0x89, 0xb2, 0x42, 0xe1, 0xdd, 0xfd,
-    0x09, 0xec, 0x1a, 0x95, 0x8b, 0xff, 0xbb, 0x87, 0x07, 0xa9, 0x08, 0xb0,
-    0x6b, 0x15, 0x29, 0xca, 0x41, 0x23, 0x21, 0x4f, 0xd9, 0x79, 0x17, 0xde,
-    0xeb, 0xe0, 0xeb, 0x17, 0xd2, 0x4d, 0x05, 0x8b, 0xee, 0x07, 0xb4, 0xac,
-    0x5e, 0x62, 0x01, 0x87, 0xd1, 0xa2, 0x2e, 0x10, 0xdf, 0xef, 0xb4, 0x0c,
-    0xd6, 0xa5, 0x62, 0xa3, 0xcf, 0xd7, 0xe8, 0x17, 0xf8, 0x63, 0x98, 0x7c,
-    0x3e, 0x2c, 0x5f, 0xf8, 0xbd, 0xcc, 0x19, 0xba, 0xce, 0x2c, 0x56, 0x22,
-    0x6d, 0xc9, 0x44, 0x6d, 0x78, 0xed, 0x12, 0xc5, 0xff, 0xa0, 0xc4, 0x13,
-    0x0e, 0x7b, 0xe2, 0xc5, 0xff, 0xf9, 0x8b, 0xa6, 0x77, 0x03, 0xcf, 0xfd,
-    0x8f, 0xd1, 0x62, 0xfe, 0x73, 0xcf, 0xc3, 0x1a, 0xc5, 0xff, 0x07, 0xe7,
-    0x21, 0x43, 0x38, 0xb1, 0x50, 0x3e, 0x97, 0x2f, 0xbd, 0xc6, 0x25, 0x8b,
-    0xe7, 0x9d, 0x71, 0x62, 0xf8, 0x3d, 0x49, 0xd6, 0x2b, 0xe7, 0x8d, 0xc2,
-    0x2a, 0xdd, 0x3c, 0x58, 0x87, 0xb4, 0x81, 0xf8, 0x61, 0x70, 0x87, 0xa3,
-    0x15, 0xff, 0xfa, 0x1c, 0x2c, 0xf7, 0x1f, 0x0f, 0xed, 0x60, 0x4b, 0x17,
-    0x9f, 0x52, 0xb1, 0x70, 0xa0, 0xb1, 0x7f, 0xce, 0x71, 0xe4, 0x53, 0x9a,
-    0x58, 0xad, 0x8f, 0x47, 0xe3, 0x17, 0xa1, 0x3d, 0xac, 0x5f, 0x84, 0x42,
-    0x9e, 0xd6, 0x2f, 0x1f, 0x3c, 0xb1, 0x78, 0x0c, 0x75, 0x8b, 0xb0, 0x0b,
-    0x15, 0x26, 0xd3, 0x07, 0x6d, 0x09, 0x4d, 0x1f, 0x1b, 0x62, 0x23, 0x38,
-    0xf0, 0x0a, 0x49, 0x46, 0xbb, 0x4f, 0xe4, 0xa3, 0x9d, 0xbf, 0x88, 0xa7,
-    0xe2, 0xd2, 0xc5, 0xb7, 0x58, 0xbb, 0xd2, 0xb1, 0x7d, 0x3f, 0x16, 0x96,
-    0x2d, 0xce, 0xb4, 0xf3, 0x5c, 0x4c, 0x85, 0xef, 0xa1, 0x9b, 0x41, 0x62,
-    0xa5, 0x30, 0x07, 0x2a, 0x67, 0xa2, 0x38, 0xbf, 0x16, 0x00, 0x5c, 0x58,
-    0xbf, 0xc6, 0x13, 0x6c, 0x53, 0xda, 0xc5, 0xff, 0xf0, 0x60, 0x68, 0x6f,
-    0xf7, 0xee, 0x13, 0x9e, 0x58, 0xbf, 0xf7, 0xdf, 0xdf, 0xc7, 0xf4, 0x81,
-    0x62, 0xed, 0xdf, 0x11, 0xdd, 0xa2, 0x82, 0x35, 0xe2, 0x9d, 0xdc, 0xf2,
-    0xc5, 0xf8, 0x6c, 0x52, 0x05, 0x8a, 0xdc, 0xdf, 0x86, 0x31, 0x7f, 0x70,
-    0x6e, 0x09, 0x25, 0x8b, 0xf3, 0x6e, 0xe4, 0x6a, 0xc5, 0xfc, 0xde, 0x00,
-    0x65, 0x05, 0x8a, 0xd9, 0x15, 0x1d, 0x91, 0xe8, 0xb7, 0xe5, 0x37, 0xff,
-    0xe2, 0x93, 0xf8, 0x98, 0x1c, 0x2c, 0xf4, 0x84, 0xb1, 0x7e, 0xe9, 0x9e,
-    0x7d, 0x2c, 0x5f, 0xc5, 0x9b, 0x1c, 0x5f, 0x58, 0xb0, 0xa4, 0xf6, 0x60,
-    0x55, 0x7b, 0xef, 0x12, 0xc5, 0xff, 0x4e, 0xf8, 0x39, 0xee, 0x1c, 0x58,
-    0xbf, 0x16, 0x72, 0x4e, 0xb1, 0x5b, 0xa2, 0x00, 0x87, 0xba, 0x1d, 0xdf,
-    0xff, 0xf6, 0x80, 0x01, 0x73, 0xef, 0xe8, 0x67, 0xd8, 0x0e, 0x39, 0x58,
-    0xbf, 0xe6, 0xd6, 0x74, 0xce, 0x92, 0x35, 0x8a, 0xc4, 0x51, 0x81, 0x9e,
-    0xff, 0xfb, 0x0d, 0x35, 0xc7, 0xf7, 0x8b, 0xef, 0xdf, 0x96, 0x28, 0xe7,
-    0xec, 0x44, 0x57, 0xf8, 0xcf, 0xb4, 0x09, 0xc2, 0x58, 0xbf, 0xa4, 0x31,
-    0x8d, 0xf7, 0x58, 0xa9, 0x4f, 0x47, 0x23, 0x4b, 0x72, 0x11, 0x1a, 0xdc,
-    0x2d, 0x2c, 0x5e, 0xdd, 0xb4, 0xb1, 0x7f, 0xed, 0xb0, 0x8f, 0x9e, 0xe0,
-    0x7c, 0x58, 0xbe, 0xde, 0x74, 0x6a, 0xc5, 0xf6, 0x7d, 0xbb, 0x58, 0xae,
-    0x1e, 0x40, 0x64, 0xb7, 0xd9, 0xbc, 0x9d, 0x62, 0xfe, 0xe3, 0xe0, 0x44,
-    0x35, 0x8b, 0x6d, 0xf3, 0xd1, 0xe1, 0x1d, 0xfc, 0xe0, 0xee, 0x19, 0xe5,
-    0x8a, 0xd9, 0x38, 0xbf, 0x8c, 0x30, 0xf0, 0x21, 0x12, 0x4e, 0x9d, 0x0a,
-    0x6f, 0xf8, 0x32, 0x86, 0x74, 0x2c, 0xe2, 0xc5, 0xf6, 0x6c, 0x28, 0x2c,
-    0x5f, 0x43, 0xd8, 0x05, 0x8b, 0xdc, 0x78, 0x96, 0x2f, 0xdc, 0xc8, 0xa6,
-    0x0b, 0x15, 0x04, 0x47, 0x76, 0x49, 0xc2, 0x3f, 0x0f, 0x5f, 0xb8, 0xe5,
-    0xdc, 0x16, 0x2d, 0x8b, 0x17, 0xbe, 0x2d, 0xd6, 0x2b, 0x0f, 0x67, 0x72,
-    0x9f, 0x08, 0xdf, 0xb1, 0xc7, 0xf7, 0x58, 0xad, 0x8f, 0x5a, 0x05, 0xf7,
-    0xf7, 0x38, 0xe5, 0xdc, 0x16, 0x2e, 0xd1, 0xab, 0x15, 0xd9, 0xe4, 0x31,
-    0x7d, 0xff, 0xcd, 0x03, 0x38, 0x59, 0xee, 0x64, 0x7a, 0xc5, 0x4a, 0x78,
-    0x59, 0x0e, 0xd6, 0x6b, 0x11, 0x15, 0xfb, 0x67, 0xe7, 0xe5, 0x62, 0xe0,
-    0x04, 0xb1, 0x58, 0x78, 0x46, 0x94, 0xdf, 0xfb, 0xbf, 0x71, 0xca, 0x40,
-    0xc7, 0x58, 0xa5, 0x8a, 0xc3, 0xcb, 0xe8, 0x7f, 0x71, 0xfe, 0xb1, 0x7b,
-    0xde, 0xed, 0x62, 0xa0, 0x6d, 0xc0, 0x31, 0x5b, 0x1f, 0xdf, 0x96, 0xaf,
-    0xf6, 0x1d, 0xff, 0x21, 0x9d, 0x62, 0xff, 0xff, 0xb3, 0xdf, 0x61, 0xc6,
-    0x16, 0x74, 0x2c, 0xe7, 0x1f, 0xbf, 0x2c, 0x56, 0x91, 0x3f, 0x1c, 0x69,
-    0x6e, 0xd6, 0x2f, 0xb0, 0xf3, 0x1e, 0xb1, 0x6e, 0xfa, 0xf3, 0x71, 0xc1,
-    0x3b, 0xc6, 0xb8, 0x4b, 0x17, 0xe0, 0x9f, 0x08, 0xd5, 0x8a, 0x73, 0xc8,
-    0x10, 0xfd, 0xfe, 0x18, 0x79, 0x17, 0xd8, 0xeb, 0x15, 0x2a, 0xb5, 0x32,
-    0x1d, 0x0f, 0x0c, 0x26, 0x5e, 0x27, 0x51, 0x10, 0xdf, 0xfe, 0xf7, 0x22,
-    0x2c, 0x0b, 0xf9, 0xe9, 0x1a, 0xc5, 0xf3, 0x83, 0xb1, 0xac, 0x5e, 0x9e,
-    0xfc, 0xb1, 0x79, 0xba, 0xb8, 0xb1, 0x5b, 0x9f, 0x16, 0x89, 0x3e, 0x3d,
-    0x7f, 0xec, 0xef, 0xc1, 0x61, 0x0f, 0xf2, 0xb1, 0x5b, 0x9f, 0x86, 0x8c,
-    0x2a, 0x53, 0x41, 0x68, 0xc7, 0xad, 0x8b, 0x17, 0xda, 0xd9, 0xf6, 0x58,
-    0xbd, 0xf7, 0xd2, 0xc5, 0x99, 0xcf, 0x0a, 0x22, 0x5b, 0xfe, 0xe0, 0xb3,
-    0xb0, 0x13, 0x1d, 0x62, 0x8c, 0x45, 0xa7, 0xd4, 0xe3, 0x89, 0xee, 0xcf,
-    0x2c, 0x5e, 0x29, 0x3a, 0xc5, 0x49, 0xb3, 0xe0, 0xbd, 0xfe, 0x9e, 0x63,
-    0xf4, 0x63, 0xac, 0x5f, 0xf8, 0x98, 0x2d, 0x4b, 0xc1, 0xb8, 0xb1, 0x5b,
-    0x1f, 0x94, 0x46, 0x97, 0xba, 0xfc, 0x25, 0x8b, 0xdd, 0x30, 0x96, 0x2a,
-    0x53, 0x5c, 0xed, 0x9d, 0xa1, 0x24, 0x44, 0x9e, 0x21, 0xbd, 0xf8, 0x1d,
-    0x62, 0xef, 0xba, 0xc5, 0x61, 0xb5, 0xf0, 0xf5, 0xfe, 0x9d, 0xb5, 0x3a,
-    0x99, 0x58, 0xa9, 0x6e, 0x61, 0x61, 0x1e, 0x36, 0x47, 0xe6, 0x6c, 0xb5,
-    0xae, 0xe3, 0x28, 0x78, 0xcb, 0xa2, 0x3f, 0xd4, 0x2b, 0x7f, 0x29, 0xe1,
-    0xa3, 0xcc, 0x02, 0xf1, 0x4a, 0x8b, 0xe4, 0xb5, 0x6f, 0x47, 0x3e, 0x29,
-    0x47, 0x11, 0xd0, 0x83, 0x0c, 0x82, 0xfb, 0x4f, 0x3d, 0xac, 0x5e, 0xfe,
-    0x6e, 0xb1, 0x78, 0xef, 0xc5, 0x8a, 0xc3, 0x77, 0xa1, 0xeb, 0xee, 0xf8,
-    0x23, 0xac, 0x5c, 0x07, 0x58, 0xba, 0x62, 0x73, 0x78, 0xc4, 0xb7, 0xba,
-    0x60, 0xd6, 0x2e, 0x70, 0x96, 0x2d, 0xba, 0xc5, 0x61, 0xab, 0x38, 0xc5,
-    0xf1, 0x82, 0xef, 0x8b, 0x17, 0xf0, 0xbb, 0xe7, 0xde, 0x3d, 0x62, 0xfc,
-    0x69, 0xaf, 0xa8, 0x2c, 0x5c, 0x6c, 0xac, 0x5a, 0x0b, 0x17, 0xfa, 0x7e,
-    0xde, 0x10, 0xbb, 0x58, 0xa7, 0x3d, 0xfe, 0x0c, 0x08, 0x4a, 0xf3, 0x77,
-    0x05, 0x8b, 0xf0, 0x7f, 0x7e, 0xf8, 0xb1, 0x7f, 0x8a, 0x4e, 0xc5, 0xdc,
-    0x16, 0x2b, 0xad, 0x55, 0xb9, 0x2b, 0xdb, 0x2e, 0x40, 0xac, 0x69, 0x46,
-    0x90, 0x47, 0x93, 0x68, 0xcc, 0xa1, 0x15, 0xe2, 0xe1, 0x0f, 0x06, 0x57,
-    0x7f, 0x79, 0xc9, 0xc1, 0xc5, 0x8b, 0xfb, 0x98, 0x30, 0x37, 0x96, 0x2e,
-    0xe7, 0x16, 0x2f, 0x86, 0x59, 0xf5, 0x8a, 0x31, 0x12, 0xb1, 0x16, 0xe8,
-    0xb8, 0x31, 0x8b, 0xd0, 0xfc, 0xac, 0x50, 0xcf, 0x77, 0xb4, 0x0b, 0xed,
-    0x49, 0x6e, 0xb1, 0x7d, 0x84, 0xe3, 0x58, 0xbe, 0xd3, 0x11, 0xab, 0x17,
-    0x9d, 0xba, 0x2c, 0x5d, 0xad, 0x96, 0x2e, 0xce, 0x0c, 0xdb, 0x88, 0x7a,
-    0xff, 0xff, 0xff, 0xbb, 0x06, 0xb7, 0xe4, 0x7f, 0x47, 0x8d, 0x0d, 0x0f,
-    0xac, 0xe4, 0x3a, 0xef, 0x5d, 0x70, 0xc0, 0x47, 0x98, 0x67, 0xe3, 0x96,
-    0x2b, 0x13, 0xb1, 0x72, 0x3f, 0x91, 0xb1, 0x09, 0x2d, 0x06, 0x59, 0x7e,
-    0x38, 0xbe, 0x1e, 0xcb, 0x17, 0x37, 0x96, 0x2b, 0x47, 0x86, 0x72, 0xcb,
-    0xa1, 0xe5, 0x8b, 0xef, 0x37, 0x7c, 0x58, 0xbf, 0x0d, 0xfa, 0x48, 0xd6,
-    0x2b, 0x63, 0xce, 0xdc, 0x92, 0xdf, 0x58, 0xb0, 0x16, 0x2e, 0x6e, 0xbd,
-    0x62, 0xee, 0x41, 0x62, 0xa5, 0x30, 0x41, 0x91, 0x33, 0x30, 0x09, 0x38,
-    0x25, 0xe1, 0x21, 0x0e, 0x5f, 0xdb, 0x45, 0x08, 0xdb, 0x5b, 0x2c, 0x5d,
-    0xd7, 0x23, 0x96, 0x2e, 0x80, 0x16, 0x2f, 0x36, 0x69, 0x62, 0xf1, 0x67,
-    0x96, 0x2f, 0x7f, 0x0e, 0xb1, 0x5d, 0x9f, 0x6f, 0xc6, 0x08, 0x73, 0xc3,
-    0x97, 0x78, 0x96, 0x2f, 0x4f, 0x7c, 0x58, 0xbe, 0x72, 0x86, 0x2c, 0x5c,
-    0x1f, 0xd6, 0x2f, 0x6c, 0xc4, 0xb1, 0x76, 0xb6, 0x58, 0xbf, 0x13, 0x1f,
-    0x0e, 0xb1, 0x43, 0x45, 0xa9, 0xc7, 0xbe, 0x43, 0xe1, 0x91, 0x0e, 0x86,
-    0x33, 0x4b, 0x16, 0xfa, 0xc5, 0x49, 0x7d, 0xa0, 0xcb, 0xe9, 0x1b, 0x41,
-    0x62, 0xfd, 0x9e, 0xfb, 0xf9, 0x62, 0xfc, 0xdd, 0xe7, 0x7e, 0x58, 0xaf,
-    0x9e, 0x97, 0x8a, 0x2f, 0x36, 0xa0, 0xb1, 0x7b, 0xf8, 0x75, 0x8a, 0x81,
-    0xba, 0xf0, 0xed, 0xff, 0x1b, 0x16, 0x66, 0xfe, 0x93, 0x56, 0x2f, 0xe6,
-    0xd6, 0x7e, 0x40, 0xb1, 0x73, 0xf1, 0x62, 0xe2, 0xd9, 0x62, 0xb7, 0x35,
-    0xe2, 0x17, 0xbc, 0x1f, 0xd9, 0x62, 0x8c, 0x4f, 0xa7, 0x61, 0xf3, 0x5d,
-    0x3b, 0x5c, 0xd1, 0x09, 0xcf, 0x7e, 0xb9, 0xc2, 0x2b, 0xe3, 0xc7, 0x47,
-    0x8d, 0x62, 0xdb, 0x2c, 0x5d, 0xfc, 0x58, 0xa5, 0x8a, 0xdc, 0xd1, 0xe8,
-    0x5e, 0xb6, 0x3d, 0x87, 0x36, 0xbe, 0xd9, 0x9b, 0xeb, 0x17, 0xe1, 0x6c,
-    0xcd, 0xf5, 0x8b, 0xdb, 0x36, 0xcb, 0x17, 0xec, 0x18, 0x1b, 0xcb, 0x14,
-    0x62, 0x24, 0xfe, 0x46, 0xc5, 0x3d, 0x07, 0xef, 0xc1, 0xc0, 0x53, 0xc5,
-    0x8b, 0xc0, 0x0f, 0xeb, 0x17, 0xbc, 0xc3, 0x58, 0xad, 0x91, 0x4a, 0x69,
-    0xff, 0x65, 0x44, 0x3f, 0x7e, 0x1b, 0xf4, 0x91, 0xac, 0x5b, 0xcb, 0x17,
-    0x47, 0x6e, 0xb1, 0x7e, 0x72, 0xd8, 0x3e, 0xd6, 0x2f, 0x8a, 0x7b, 0xe2,
-    0xc5, 0x82, 0x19, 0xe7, 0x61, 0x5d, 0x41, 0x19, 0xdd, 0x95, 0x68, 0x49,
-    0x9a, 0xaf, 0xb3, 0xa6, 0x0d, 0x62, 0xfe, 0x13, 0x6a, 0x0c, 0x05, 0x8b,
-    0xfe, 0x2c, 0xd6, 0xa7, 0x70, 0xce, 0xb1, 0x7c, 0x76, 0xee, 0x30, 0x67,
-    0xd2, 0x19, 0x75, 0x99, 0x62, 0xe7, 0xd6, 0x1e, 0x7f, 0x0f, 0xaf, 0xd1,
-    0x7d, 0xfb, 0xf2, 0xc5, 0x69, 0x33, 0x3f, 0xc3, 0x73, 0xc5, 0x97, 0xec,
-    0x21, 0xfe, 0x56, 0x2f, 0x6c, 0xde, 0x58, 0xa8, 0xdd, 0x92, 0xef, 0x1a,
-    0xce, 0x26, 0x11, 0xd0, 0x3c, 0xc8, 0x66, 0x3c, 0xa5, 0xf3, 0xbb, 0x7e,
-    0x10, 0x4d, 0x1a, 0xd1, 0x46, 0x1a, 0x28, 0xdc, 0x02, 0x36, 0x0c, 0x9e,
-    0xfb, 0xac, 0xfc, 0xf4, 0x58, 0xbf, 0xec, 0x18, 0xdf, 0xbc, 0xef, 0xcb,
-    0x17, 0xdb, 0x94, 0xc1, 0x62, 0xbe, 0x7b, 0xcc, 0x77, 0x7f, 0xa7, 0x3d,
-    0x3f, 0x61, 0xac, 0x5d, 0xc8, 0xf5, 0x8b, 0x9b, 0xa2, 0xc5, 0xba, 0x2c,
-    0x53, 0x9a, 0xd6, 0x19, 0xbd, 0xf7, 0x3a, 0xc5, 0xd9, 0xc5, 0x8a, 0x19,
-    0xe9, 0xe0, 0xfc, 0x70, 0xed, 0xff, 0x67, 0xa7, 0x70, 0xe4, 0x18, 0xb1,
-    0x7a, 0x7b, 0x82, 0xc5, 0x6c, 0x9b, 0xb8, 0xc8, 0x74, 0x64, 0x08, 0x4d,
-    0x84, 0x63, 0xd4, 0x75, 0x7d, 0x98, 0x5e, 0x58, 0xbf, 0x9d, 0xa1, 0xe7,
-    0xd9, 0x62, 0xff, 0x8f, 0xe8, 0x60, 0x39, 0x84, 0xb1, 0x7d, 0xd1, 0xc8,
-    0x1f, 0x3e, 0x70, 0xcb, 0xaf, 0x84, 0xda, 0x82, 0xc5, 0xff, 0x66, 0xf3,
-    0xbb, 0x6b, 0x69, 0x58, 0xa9, 0x44, 0xc8, 0xce, 0xfe, 0x47, 0x7f, 0xe9,
-    0x1e, 0xa7, 0xcf, 0xbb, 0x8d, 0x62, 0xfb, 0xdc, 0x6d, 0xd6, 0x28, 0x67,
-    0xc6, 0x23, 0xfb, 0xe1, 0x36, 0xa0, 0xb1, 0x7a, 0x7a, 0xa0, 0xb1, 0x7a,
-    0x38, 0x5d, 0xac, 0x5f, 0x4e, 0x77, 0x05, 0x8a, 0x1a, 0x22, 0x22, 0x23,
-    0xd1, 0x07, 0x51, 0x15, 0xfd, 0xed, 0xc6, 0x33, 0xe9, 0x62, 0xff, 0xf9,
-    0xb8, 0xda, 0x7e, 0xc1, 0xe8, 0x4c, 0x76, 0x2c, 0x5f, 0x39, 0x48, 0x16,
-    0x28, 0x07, 0xe9, 0xe5, 0x3b, 0xfe, 0x8b, 0x9d, 0x18, 0xb6, 0x10, 0xd6,
-    0x2f, 0xe6, 0x08, 0x00, 0x3c, 0x72, 0xc5, 0xf6, 0x7b, 0x0e, 0xb1, 0x71,
-    0x1a, 0xb1, 0x4c, 0x6e, 0x84, 0x45, 0x50, 0x44, 0x6f, 0x1b, 0x6f, 0xd0,
-    0x21, 0x37, 0x16, 0x2f, 0xfd, 0x24, 0x2f, 0x40, 0x45, 0xee, 0x2c, 0x56,
-    0x1f, 0x3e, 0x8a, 0x2f, 0xff, 0xc3, 0x98, 0x4e, 0x43, 0xf2, 0x32, 0x9f,
-    0x71, 0x62, 0xff, 0xa7, 0xd0, 0xc8, 0xf6, 0x20, 0x2c, 0x5f, 0xb9, 0x90,
-    0x84, 0xac, 0x56, 0x22, 0xdc, 0x95, 0x38, 0x77, 0x78, 0x0e, 0x05, 0x8b,
-    0xed, 0xa2, 0xfb, 0xac, 0x5b, 0xf8, 0x78, 0x42, 0x1d, 0xbf, 0xf1, 0x37,
-    0x1b, 0xfd, 0xc3, 0x3c, 0xb1, 0x7f, 0xfd, 0xc9, 0x3b, 0x78, 0x3c, 0xf9,
-    0x09, 0xa3, 0xd6, 0x2a, 0x08, 0x92, 0xf1, 0xfd, 0xcc, 0x75, 0x8a, 0xc3,
-    0x75, 0xb9, 0x1d, 0xff, 0x89, 0x8d, 0xfb, 0x43, 0x8e, 0x35, 0x8b, 0xe2,
-    0xf6, 0x12, 0xc5, 0xfb, 0xee, 0x4d, 0xb2, 0xc5, 0xb7, 0x58, 0xbe, 0x14,
-    0x33, 0x9b, 0x9b, 0xb2, 0x28, 0xa3, 0xa3, 0x4d, 0x8f, 0xc9, 0x72, 0xee,
-    0x92, 0xb1, 0x7f, 0xff, 0x6c, 0xfa, 0x26, 0x37, 0x9f, 0x96, 0xee, 0x46,
-    0xeb, 0x17, 0x67, 0x96, 0x2a, 0x51, 0x19, 0x83, 0x24, 0xb9, 0x70, 0x67,
-    0x58, 0xa7, 0x4c, 0x00, 0xa1, 0x75, 0xe2, 0xdb, 0xfb, 0x39, 0xcc, 0xd6,
-    0xcb, 0x17, 0xef, 0x1b, 0x25, 0x05, 0x8a, 0x19, 0xec, 0x06, 0x5f, 0x61,
-    0xac, 0x56, 0xe6, 0xd7, 0xb2, 0x3b, 0xba, 0x32, 0xc5, 0xfd, 0xa9, 0xdf,
-    0x3a, 0x62, 0xc5, 0xfe, 0x20, 0x6b, 0x4f, 0x17, 0x16, 0x2a, 0x4f, 0x95,
-    0x8c, 0x2f, 0x4f, 0x54, 0xac, 0x57, 0x58, 0xcc, 0xeb, 0x98, 0xff, 0xf6,
-    0x62, 0x84, 0x64, 0x23, 0x84, 0x96, 0x42, 0xa8, 0xd4, 0x1e, 0xe1, 0x4a,
-    0xe4, 0x51, 0x43, 0x2f, 0x50, 0x8a, 0x3c, 0x36, 0x3e, 0xe0, 0x50, 0xf3,
-    0xf4, 0x7e, 0x82, 0x86, 0x0f, 0x42, 0x38, 0xe7, 0xee, 0xa2, 0x0b, 0xf4,
-    0x53, 0xe2, 0xe8, 0xb1, 0x7d, 0x16, 0x38, 0x16, 0x28, 0xc3, 0xce, 0x92,
-    0xbb, 0xff, 0xa7, 0xa6, 0xa7, 0x58, 0xff, 0x91, 0xac, 0x5d, 0x38, 0xb1,
-    0x44, 0x7b, 0x7c, 0x45, 0xbe, 0x3f, 0x59, 0x1a, 0xe3, 0x65, 0x8b, 0x98,
-    0xeb, 0x17, 0x45, 0x1c, 0xb1, 0x44, 0x6c, 0xfa, 0x0b, 0xdf, 0xfb, 0xef,
-    0xa2, 0xce, 0x9a, 0x7e, 0x2c, 0x5f, 0xd3, 0xe6, 0x89, 0xbc, 0xb1, 0x61,
-    0xac, 0x5f, 0xfe, 0xee, 0x1c, 0x33, 0xf9, 0xee, 0x13, 0x79, 0x62, 0xb4,
-    0x7b, 0xe7, 0x12, 0xbf, 0xd2, 0x17, 0x34, 0x29, 0x02, 0xc5, 0x39, 0xeb,
-    0x91, 0x15, 0xc2, 0xf2, 0xc5, 0x86, 0xb1, 0x7c, 0x5e, 0xc0, 0x2c, 0x56,
-    0x8d, 0xa0, 0x84, 0xaa, 0x0a, 0xb6, 0x31, 0xf7, 0xb2, 0x17, 0x67, 0x88,
-    0x88, 0xe8, 0x1e, 0x87, 0x24, 0x71, 0x07, 0x52, 0x65, 0xa3, 0x23, 0x78,
-    0xe2, 0x70, 0x7a, 0xc8, 0xc6, 0xba, 0xd8, 0xdb, 0x23, 0x48, 0xd1, 0xa3,
-    0x69, 0x40, 0x5d, 0x77, 0x18, 0x27, 0x5c, 0x8c, 0x1f, 0xae, 0xb1, 0xed,
-    0x46, 0xa8, 0x54, 0xc6, 0xb7, 0x19, 0xad, 0x4e, 0xb6, 0x9d, 0x35, 0x85,
-    0x22, 0x54, 0x75, 0x84, 0xbe, 0x5b, 0x01, 0x83, 0x67, 0x7d, 0x37, 0xa6,
-    0xae, 0xf7, 0x3f, 0x8a, 0xf4, 0x9c, 0xe8, 0xf8, 0xde, 0x62, 0xa6, 0xf9,
-    0xea, 0x97, 0xac, 0x7a, 0x43, 0xb7, 0xed, 0x1f, 0xab, 0x53, 0x62, 0x81,
-    0x48, 0x65, 0xeb, 0xe3, 0x6f, 0x2a, 0xef, 0xb7, 0x96, 0xe3, 0xd3, 0xd5,
-    0xe5, 0xe0, 0xa7, 0x06, 0xba, 0x4b, 0x58, 0x0a, 0x39, 0xc8, 0xea, 0x4e,
-    0xd0, 0x74, 0xdd, 0x1e, 0xa9, 0xc7, 0x1b, 0xf4, 0x63, 0xe9, 0xb4, 0xb1,
-    0x51, 0x91, 0xc7, 0xa7, 0xec, 0xac, 0xe5, 0x71, 0x25, 0x7f, 0x38, 0xb0,
-    0xa0, 0x4b, 0x4f, 0xbf, 0xfd, 0x18, 0x76, 0x84, 0x66, 0x6b, 0x76, 0x6d,
-    0xd5, 0x23, 0x61, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4a, 0xd2, 0xe0, 0x74,
-    0x58, 0xbb, 0x91, 0xcb, 0x16, 0x8c, 0xc3, 0xec, 0xf9, 0xbf, 0x06, 0xae,
-    0xe9, 0xa5, 0x8b, 0x9a, 0x56, 0x2f, 0xf4, 0x20, 0x2f, 0x14, 0xc1, 0x62,
-    0xfb, 0x3e, 0xde, 0x58, 0xac, 0x3d, 0x62, 0x34, 0xbf, 0xf0, 0x3e, 0xd0,
-    0x78, 0x7d, 0xfa, 0x2c, 0x57, 0x5a, 0x7c, 0x3c, 0x20, 0xbf, 0xff, 0xdd,
-    0x25, 0xf5, 0xbb, 0x9d, 0xa0, 0xe5, 0x83, 0xc3, 0x56, 0x2f, 0xfc, 0x4c,
-    0xfd, 0x4e, 0x5b, 0x49, 0xab, 0x15, 0x28, 0xa3, 0x66, 0x2b, 0xff, 0xbd,
-    0xe6, 0x9f, 0x67, 0xe5, 0xc0, 0xb1, 0x50, 0x3e, 0x47, 0x21, 0xbf, 0xc5,
-    0x2d, 0xee, 0x39, 0x2c, 0x5f, 0xf9, 0xc1, 0x8c, 0xfa, 0xde, 0x7c, 0xb1,
-    0x7c, 0x3f, 0xce, 0xcb, 0x15, 0x87, 0xc4, 0xe7, 0xd7, 0xe7, 0x18, 0x8b,
-    0x16, 0x2f, 0x73, 0x1d, 0x62, 0xff, 0xb2, 0x2c, 0xce, 0x6c, 0xd1, 0xeb,
-    0x16, 0x75, 0x8b, 0xbc, 0xe6, 0x1f, 0x51, 0x0e, 0x74, 0x3d, 0xbf, 0xf4,
-    0x32, 0x18, 0xd0, 0x29, 0x3a, 0xc5, 0x49, 0xfc, 0xb9, 0xe5, 0xff, 0x37,
-    0xda, 0x19, 0xb6, 0x04, 0xb1, 0x50, 0x4d, 0x93, 0x51, 0x85, 0x1c, 0x82,
-    0xfe, 0xcd, 0xe4, 0x01, 0x9d, 0x62, 0xfb, 0x6c, 0xfb, 0xac, 0x56, 0x8f,
-    0x4c, 0x46, 0x17, 0xe2, 0x8c, 0xfb, 0x86, 0xb1, 0x7d, 0x26, 0xfd, 0x96,
-    0x29, 0x8f, 0x3c, 0x8b, 0x2f, 0xf7, 0x1b, 0xd1, 0x9c, 0x29, 0x58, 0xbf,
-    0xa7, 0x6d, 0x4e, 0x0d, 0x62, 0xa0, 0x7c, 0x9f, 0x36, 0xbf, 0xff, 0x4e,
-    0xd3, 0xa9, 0x3c, 0xcf, 0xbe, 0xe0, 0x3a, 0xc5, 0x49, 0xfb, 0xfc, 0x8a,
-    0xff, 0x61, 0xdf, 0x5b, 0x08, 0x0b, 0x17, 0xff, 0xce, 0x5b, 0x67, 0xc4,
-    0x6e, 0x00, 0xec, 0x05, 0x8b, 0xf3, 0x0b, 0xf3, 0xa5, 0x8b, 0xf3, 0xf4,
-    0x72, 0x9d, 0x1f, 0xcf, 0x45, 0x1b, 0xff, 0xff, 0xec, 0x16, 0xf8, 0x3f,
-    0xc9, 0x6f, 0x3a, 0xcc, 0xee, 0x05, 0x27, 0xcd, 0x2c, 0x56, 0x22, 0xf4,
-    0x90, 0x2e, 0x78, 0xe5, 0x8b, 0xd2, 0x38, 0x96, 0x2f, 0x74, 0x14, 0x16,
-    0x2a, 0x0b, 0xc6, 0x78, 0x43, 0xbc, 0x24, 0xde, 0x38, 0x4d, 0x42, 0x28,
-    0xee, 0x3f, 0x87, 0xd8, 0x08, 0x4a, 0x36, 0xbe, 0x10, 0xf8, 0x6b, 0xa0,
-    0xf5, 0xf8, 0xa4, 0x5d, 0x7f, 0x16, 0x2e, 0xf8, 0xd6, 0x2d, 0xac, 0x3c,
-    0x53, 0x96, 0xdf, 0xfd, 0xa8, 0x16, 0x7b, 0x92, 0x7f, 0x6e, 0xb1, 0x52,
-    0x7d, 0xa2, 0x27, 0xbb, 0x09, 0x62, 0xff, 0xa4, 0xbd, 0x14, 0x27, 0x67,
-    0x58, 0xbb, 0xfc, 0x58, 0xb7, 0x6b, 0x17, 0xf1, 0xb1, 0xc2, 0xfb, 0xe9,
-    0x62, 0xb0, 0xf1, 0x9c, 0x4e, 0xa0, 0x8b, 0x8c, 0x3a, 0x8e, 0x5e, 0xa1,
-    0xa6, 0x01, 0x90, 0xce, 0xbf, 0xf7, 0x27, 0xdf, 0x63, 0x9f, 0x7d, 0xd6,
-    0x2f, 0xfc, 0xcf, 0xd5, 0x3f, 0xf1, 0x64, 0x16, 0x2f, 0xd0, 0x7d, 0xdb,
-    0x4b, 0x15, 0x04, 0x55, 0xfd, 0x0b, 0x88, 0x17, 0xb7, 0x70, 0x96, 0x2e,
-    0x6d, 0xd5, 0x25, 0xa1, 0x5b, 0x9e, 0x23, 0x0f, 0xdf, 0x8d, 0xef, 0x82,
-    0xed, 0x62, 0xa5, 0x18, 0x7b, 0xba, 0x39, 0x15, 0xfc, 0x27, 0x37, 0x52,
-    0x35, 0x8b, 0xfb, 0x40, 0x0f, 0x93, 0x8b, 0x17, 0xa4, 0xbc, 0xb1, 0x7f,
-    0xfe, 0xe7, 0x33, 0xef, 0xc1, 0x6c, 0xce, 0x7d, 0x3a, 0xc5, 0xda, 0xfb,
-    0x9f, 0x93, 0x0e, 0x54, 0xa3, 0x35, 0xe1, 0x43, 0x7f, 0xfe, 0xe7, 0x33,
-    0xf9, 0xb6, 0x69, 0xa1, 0x06, 0x82, 0xc5, 0xff, 0x7e, 0x7f, 0xbb, 0xf3,
-    0x06, 0xb1, 0x7e, 0x7c, 0xe8, 0xda, 0x58, 0xb1, 0xc6, 0x7c, 0x7c, 0x3a,
-    0xac, 0x47, 0x0b, 0x42, 0xe6, 0xfd, 0xa1, 0x01, 0xc6, 0xb1, 0x7f, 0x0c,
-    0x79, 0x80, 0xe2, 0xc5, 0xfd, 0x20, 0xf7, 0x05, 0x1e, 0xb1, 0x7f, 0xce,
-    0x43, 0x6f, 0xc3, 0x3c, 0xb1, 0x52, 0x89, 0x8e, 0x17, 0x78, 0xca, 0xff,
-    0xf3, 0xfa, 0x13, 0xbf, 0xdf, 0xdc, 0x6e, 0xd6, 0x2b, 0x4a, 0xe5, 0x0e,
-    0x5f, 0xf8, 0x7e, 0x14, 0x60, 0xfc, 0x26, 0xf4, 0x30, 0x7a, 0x17, 0xdf,
-    0xc0, 0x33, 0x34, 0xe6, 0xac, 0x5f, 0xf6, 0x0d, 0xf9, 0x11, 0x48, 0xd6,
-    0x28, 0x67, 0xd2, 0xc6, 0x17, 0xf6, 0xd3, 0xad, 0x48, 0x4b, 0x17, 0xfd,
-    0x3b, 0xe1, 0xf0, 0xbd, 0x1c, 0xb1, 0x7f, 0xbf, 0x3a, 0x07, 0xb3, 0x65,
-    0x8b, 0xfc, 0x59, 0x03, 0x1f, 0xf0, 0x58, 0xb3, 0x9d, 0x14, 0xbf, 0x3c,
-    0xf1, 0xad, 0xff, 0xfd, 0xad, 0xb3, 0xed, 0xd8, 0x38, 0x13, 0x0f, 0xee,
-    0x12, 0xc5, 0x4a, 0x6d, 0x5f, 0x86, 0xab, 0x1a, 0xdf, 0xfc, 0xd0, 0x33,
-    0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7e, 0x92, 0xd8, 0x8d, 0x58, 0xbe, 0xf6,
-    0x7d, 0x96, 0x2d, 0x05, 0x8b, 0x42, 0x51, 0x47, 0x04, 0x6c, 0x29, 0xec,
-    0x8a, 0xf6, 0x1d, 0xd6, 0x2f, 0xff, 0x9b, 0xab, 0xf9, 0xa2, 0x98, 0x39,
-    0x08, 0x35, 0x8b, 0xc2, 0xe7, 0x96, 0x2f, 0xff, 0xd0, 0x62, 0x7f, 0x4f,
-    0xf7, 0xc1, 0x94, 0xf1, 0x62, 0xff, 0xfc, 0xfd, 0x52, 0x42, 0x83, 0xf3,
-    0x92, 0x61, 0xf7, 0x58, 0xa7, 0x45, 0x73, 0x2a, 0x5f, 0xfe, 0xe4, 0xf0,
-    0xb0, 0x05, 0x23, 0xfc, 0xac, 0x5f, 0xff, 0x6f, 0x3a, 0xc0, 0x31, 0xda,
-    0x12, 0xfb, 0xac, 0x5f, 0x9f, 0xab, 0xf8, 0x75, 0x8b, 0xff, 0xe8, 0x73,
-    0x0a, 0x4e, 0xd9, 0xef, 0x49, 0xd6, 0x2d, 0xe9, 0x46, 0x4e, 0x28, 0x31,
-    0x5d, 0x0d, 0x54, 0xfe, 0x87, 0x0e, 0xa5, 0xf8, 0x66, 0x70, 0x87, 0xd1,
-    0x88, 0xdf, 0xf7, 0xdf, 0x5e, 0x6f, 0xb0, 0xd6, 0x2f, 0xfa, 0x0d, 0xcf,
-    0x73, 0x05, 0xd7, 0xac, 0x5f, 0xff, 0xf9, 0xfd, 0xcc, 0x37, 0x7f, 0xbf,
-    0xb2, 0x22, 0x93, 0xed, 0x81, 0x2c, 0x53, 0xa2, 0xbf, 0xa1, 0xfd, 0xed,
-    0x85, 0xd4, 0xb1, 0x7d, 0x02, 0x6f, 0x2c, 0x5f, 0xff, 0x79, 0xb3, 0x83,
-    0xc8, 0x7e, 0x7a, 0x0e, 0x56, 0x2f, 0xff, 0xff, 0xe7, 0xf0, 0xf0, 0x5c,
-    0x33, 0xf9, 0xbf, 0xc5, 0xb3, 0xe1, 0x77, 0x0e, 0x70, 0x52, 0xb1, 0x4c,
-    0x8d, 0xe2, 0x51, 0xa9, 0x4d, 0x9f, 0x09, 0x3b, 0x22, 0x68, 0xc0, 0x2f,
-    0xef, 0x37, 0xcc, 0x1c, 0xac, 0x5f, 0x00, 0x3f, 0x4a, 0xc5, 0xa2, 0x58,
-    0xb4, 0x1c, 0xdb, 0x88, 0x92, 0xa5, 0x11, 0x8c, 0xcd, 0x7d, 0x0f, 0x3e,
-    0xcb, 0x17, 0xee, 0x71, 0x8b, 0x65, 0x8b, 0xf0, 0x7e, 0x29, 0x02, 0xc5,
-    0xbe, 0xb1, 0x5d, 0xa2, 0x20, 0xe4, 0x9d, 0x0a, 0x43, 0x29, 0xbd, 0xac,
-    0xfa, 0xc5, 0xff, 0xe6, 0xcf, 0xb3, 0xf5, 0x49, 0xc9, 0x8d, 0x58, 0xad,
-    0x1f, 0x40, 0x07, 0x6f, 0xfc, 0xfc, 0xc1, 0xf7, 0xc9, 0xd7, 0x16, 0x2f,
-    0xf3, 0x43, 0xcf, 0xb7, 0xdd, 0x62, 0xf1, 0x48, 0x16, 0x2f, 0xfe, 0xef,
-    0x92, 0x6e, 0x7d, 0xf5, 0xf6, 0x58, 0xbf, 0xd2, 0x79, 0x8c, 0x08, 0x20,
-    0x96, 0x2a, 0x08, 0x9c, 0x71, 0xce, 0xa4, 0x6b, 0xff, 0xa3, 0x24, 0x0f,
-    0x0c, 0xf1, 0x48, 0x16, 0x2a, 0x55, 0x29, 0xe4, 0x2a, 0x77, 0x22, 0x74,
-    0x06, 0x86, 0x87, 0x8c, 0xaf, 0xd9, 0xf7, 0xc3, 0xac, 0x5c, 0x40, 0x58,
-    0xbe, 0x01, 0xdf, 0x4b, 0x15, 0x26, 0xe9, 0xc5, 0xef, 0xfc, 0x37, 0xe8,
-    0xe3, 0xc0, 0xb3, 0xeb, 0x17, 0xfe, 0x21, 0xb1, 0xda, 0x12, 0xfb, 0xac,
-    0x5e, 0xc3, 0xca, 0xc5, 0x49, 0xed, 0x61, 0xf5, 0xff, 0x0b, 0xdc, 0xc8,
-    0x3e, 0xa5, 0x62, 0xff, 0xff, 0x9b, 0xd2, 0x4d, 0xb4, 0xea, 0x5e, 0x12,
-    0x72, 0x93, 0x56, 0x2f, 0xf3, 0xf1, 0xc5, 0xd7, 0x8e, 0x56, 0x28, 0x68,
-    0xd5, 0x23, 0x9f, 0x32, 0x5f, 0xdf, 0x9d, 0xc9, 0x8e, 0xb1, 0x7f, 0xff,
-    0x8d, 0xcd, 0x67, 0x8c, 0x71, 0x98, 0xc5, 0x87, 0x17, 0xd6, 0x2f, 0xfc,
-    0xcf, 0xbf, 0xd8, 0x5b, 0x69, 0xd6, 0x29, 0xd1, 0xa2, 0xc5, 0xc4, 0xc7,
-    0x7b, 0x71, 0x4a, 0xc5, 0xfe, 0xda, 0x70, 0x87, 0xf9, 0x58, 0xb6, 0x39,
-    0xe8, 0xb0, 0xf5, 0x6c, 0xae, 0xcc, 0x6c, 0x38, 0x3f, 0xbc, 0x26, 0xde,
-    0x1e, 0xbf, 0x8c, 0x00, 0x9f, 0xaf, 0xd9, 0xd8, 0x4c, 0x12, 0xc5, 0xff,
-    0xdd, 0xf3, 0xf3, 0xcc, 0xf1, 0x31, 0xab, 0x17, 0x3e, 0x2c, 0x56, 0x91,
-    0x0e, 0xc5, 0x7c, 0x46, 0xbf, 0xd0, 0x9d, 0x6d, 0x3a, 0xd9, 0x62, 0xfa,
-    0x1a, 0xc3, 0xac, 0x5e, 0xcd, 0x01, 0x62, 0xfd, 0x16, 0x0c, 0xf1, 0xeb,
-    0x17, 0xf8, 0xf3, 0xde, 0xa7, 0xbf, 0x2c, 0x5f, 0xb8, 0xf8, 0x40, 0x58,
-    0xbf, 0xfc, 0xe4, 0x10, 0x60, 0x68, 0x10, 0x98, 0x35, 0x8b, 0xd3, 0xa8,
-    0x96, 0x2f, 0xe2, 0x90, 0xbb, 0x87, 0x16, 0x2b, 0xb4, 0xd9, 0x1c, 0x8e,
-    0x21, 0xd3, 0x96, 0xf0, 0xdb, 0xc4, 0xfd, 0x13, 0x3a, 0x87, 0xaf, 0x1a,
-    0x2d, 0xd6, 0x2e, 0xce, 0x2c, 0x54, 0xaa, 0x49, 0xc8, 0xe6, 0x8d, 0x78,
-    0x0c, 0x82, 0xff, 0xff, 0xfc, 0xfb, 0xe7, 0xa4, 0xbd, 0xc3, 0x25, 0xc7,
-    0x87, 0x33, 0x52, 0xf0, 0x6e, 0x2c, 0x5f, 0xbe, 0xff, 0x68, 0x96, 0x2f,
-    0xff, 0x33, 0xf8, 0x5a, 0x6e, 0x07, 0x85, 0xba, 0xc5, 0xfa, 0x61, 0xf9,
-    0xd9, 0x62, 0xff, 0xfe, 0x37, 0x9f, 0x92, 0xf0, 0xff, 0x3c, 0x21, 0x37,
-    0x96, 0x2a, 0x08, 0x85, 0xc2, 0x9b, 0xff, 0xb0, 0x86, 0x39, 0xfe, 0x61,
-    0x6e, 0xb1, 0x7f, 0xfd, 0xa0, 0x70, 0x1f, 0x68, 0x3f, 0x8a, 0x40, 0xb1,
-    0x58, 0xa8, 0xc7, 0x78, 0x41, 0xfc, 0xa4, 0xa1, 0xa1, 0xc2, 0x21, 0x21,
-    0xdf, 0xd9, 0xe6, 0x20, 0x09, 0x62, 0xfe, 0xf9, 0x8f, 0xb3, 0x12, 0xc5,
-    0xfe, 0x92, 0x81, 0x66, 0x01, 0x62, 0xff, 0x1f, 0x8d, 0x9e, 0xc3, 0xac,
-    0x5f, 0xe7, 0x20, 0x75, 0x75, 0x0b, 0x65, 0x8b, 0xf8, 0xfc, 0x19, 0x30,
-    0x4b, 0x17, 0xff, 0x02, 0x3b, 0x0c, 0xd4, 0x80, 0x44, 0x35, 0x8b, 0xf0,
-    0x39, 0x1a, 0xa3, 0x54, 0x6a, 0x58, 0xa9, 0x45, 0xa6, 0x17, 0xb2, 0x4d,
-    0xf3, 0x8f, 0x09, 0x62, 0xfe, 0x2c, 0xf7, 0xb3, 0x65, 0x8a, 0xdc, 0xf3,
-    0xfc, 0x43, 0x7b, 0x50, 0x3a, 0xc5, 0xf6, 0x9e, 0x4e, 0xb1, 0x73, 0x0d,
-    0x62, 0xbb, 0x37, 0x20, 0x22, 0xac, 0x44, 0xe3, 0x91, 0xb2, 0xbd, 0xfe,
-    0x6f, 0x3f, 0x9c, 0x1c, 0x58, 0xa8, 0x2b, 0x27, 0xc2, 0xd3, 0x4b, 0xdc,
-    0xc7, 0xe6, 0x65, 0x0e, 0xfe, 0x46, 0x30, 0x22, 0xdb, 0x71, 0x62, 0xfb,
-    0xdc, 0xc8, 0x2c, 0x57, 0x66, 0xd7, 0x42, 0x57, 0xfd, 0xff, 0xbe, 0x9f,
-    0x66, 0x3a, 0xc5, 0x49, 0xee, 0x31, 0x15, 0xfb, 0x6c, 0x89, 0xf6, 0x58,
-    0xbf, 0xed, 0x44, 0x58, 0x3f, 0xcf, 0x45, 0x8b, 0xfe, 0xd0, 0x30, 0x6d,
-    0xe1, 0x4a, 0xc5, 0xff, 0x87, 0xf1, 0x31, 0xb8, 0x36, 0x82, 0xc5, 0xf7,
-    0xc2, 0x6d, 0x96, 0x2a, 0x53, 0x05, 0xc2, 0xb6, 0x3c, 0x23, 0x9f, 0x20,
-    0x54, 0x6e, 0xeb, 0x29, 0xfa, 0xd1, 0xa8, 0xda, 0x19, 0xb3, 0x3e, 0xc3,
-    0xb4, 0x6e, 0xa3, 0x8c, 0x87, 0x27, 0x4a, 0x8d, 0x87, 0x06, 0xf1, 0xc5,
-    0xf7, 0x0d, 0x77, 0x95, 0xc3, 0x13, 0x26, 0xa5, 0x27, 0x9e, 0x19, 0xdf,
-    0x95, 0xf8, 0xd3, 0x82, 0x60, 0x87, 0xe1, 0x4a, 0x78, 0xe4, 0xa7, 0x6f,
-    0x4b, 0x89, 0xe9, 0x18, 0x68, 0x71, 0x92, 0xdf, 0x46, 0x1c, 0x38, 0xf5,
-    0x8a, 0x8c, 0x4f, 0x8c, 0xd8, 0xee, 0x2f, 0xe7, 0x03, 0x74, 0x9f, 0x2c,
-    0x5f, 0x4e, 0xef, 0xba, 0xc5, 0x40, 0xf4, 0xc2, 0x2f, 0xbf, 0xc2, 0xed,
-    0x8b, 0x01, 0xc5, 0x8b, 0xff, 0xf7, 0xf0, 0xb0, 0xdf, 0xb4, 0x3e, 0x13,
-    0x06, 0x75, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x98, 0x05, 0x41, 0x11, 0x3a,
-    0x58, 0xbf, 0xfd, 0x83, 0x29, 0xdc, 0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xd3,
-    0x9d, 0xac, 0x5e, 0x62, 0xdd, 0x62, 0xf9, 0xbb, 0xe1, 0x83, 0x37, 0x41,
-    0x0e, 0xdf, 0xfa, 0x7d, 0xcf, 0x38, 0xf0, 0xa0, 0xb1, 0x7f, 0x3f, 0x05,
-    0x3a, 0x89, 0x62, 0xff, 0x13, 0x03, 0x8e, 0x5e, 0x58, 0xa3, 0x9f, 0x0f,
-    0x8b, 0xef, 0xd1, 0x73, 0x53, 0xd1, 0x62, 0xfb, 0x70, 0xff, 0x12, 0xc5,
-    0x2c, 0x5f, 0xfc, 0xf0, 0x7e, 0x93, 0xf9, 0x3b, 0xe2, 0xc5, 0x4a, 0x31,
-    0x5c, 0x89, 0x8b, 0x38, 0x4e, 0x20, 0xcb, 0xf1, 0x60, 0x05, 0xc5, 0x8b,
-    0x83, 0x02, 0xc5, 0x7c, 0xf0, 0x40, 0x51, 0x7f, 0x4f, 0x4e, 0x72, 0x40,
-    0xb1, 0x7d, 0x98, 0x0e, 0x2c, 0x5f, 0xe6, 0x1b, 0x77, 0xe2, 0x65, 0x8a,
-    0x19, 0xea, 0xc7, 0x11, 0x54, 0xae, 0x3e, 0x6c, 0x47, 0x90, 0xbd, 0xf9,
-    0x18, 0x21, 0x0c, 0x47, 0x7c, 0x8d, 0x93, 0xd0, 0x88, 0x11, 0x10, 0x70,
-    0x85, 0xbf, 0xc3, 0x98, 0xce, 0xfc, 0x29, 0x58, 0xa8, 0xc4, 0x6f, 0x8a,
-    0x14, 0xf7, 0xed, 0x6e, 0xcd, 0xba, 0xa4, 0x75, 0x2f, 0xff, 0xf7, 0xe7,
-    0x61, 0xe1, 0xe3, 0x39, 0xcc, 0xfb, 0xf0, 0x5b, 0x2c, 0x5f, 0xf4, 0xfb,
-    0x80, 0xcc, 0xd7, 0x16, 0x2f, 0xd1, 0x87, 0x68, 0x46, 0x62, 0x35, 0xe2,
-    0x37, 0x26, 0x7b, 0xff, 0xf8, 0x85, 0x3e, 0xe6, 0x14, 0x60, 0x01, 0x3f,
-    0x6d, 0x96, 0x2f, 0x34, 0x4c, 0xb1, 0x74, 0xf1, 0x62, 0xe2, 0x8c, 0x88,
-    0xda, 0x78, 0x76, 0xa5, 0x18, 0x59, 0x09, 0x2b, 0xc6, 0xc9, 0xd6, 0x2f,
-    0x6d, 0x3b, 0xac, 0x5f, 0xf7, 0xc5, 0xd8, 0xdf, 0xa4, 0x8d, 0x62, 0xd9,
-    0xb1, 0xee, 0x78, 0x7e, 0xf9, 0xb7, 0x0c, 0xeb, 0x17, 0xa1, 0xc8, 0xc3,
-    0x51, 0x8e, 0x4f, 0x5d, 0x0a, 0x2f, 0xf7, 0x5b, 0x9f, 0x7d, 0x7d, 0x96,
-    0x2f, 0xff, 0xd2, 0x43, 0x31, 0xa5, 0xfa, 0x49, 0x86, 0x7e, 0x39, 0x62,
-    0xff, 0x9f, 0x5b, 0x08, 0x1b, 0x60, 0x4b, 0x17, 0xe9, 0x39, 0x49, 0xab,
-    0x17, 0x4f, 0xd6, 0x2a, 0x06, 0xfc, 0x65, 0x17, 0xf3, 0xfd, 0xcf, 0x86,
-    0xac, 0x5f, 0xf8, 0x5e, 0xcf, 0x38, 0xba, 0xf2, 0x95, 0x8b, 0xff, 0xe9,
-    0x29, 0xd9, 0x87, 0xf9, 0xf9, 0x61, 0xab, 0x15, 0xd6, 0x27, 0x73, 0x05,
-    0xc7, 0x7c, 0xf9, 0x09, 0x17, 0x79, 0x0e, 0xf4, 0x9c, 0x0b, 0x17, 0xb0,
-    0xee, 0xb1, 0x7f, 0xfe, 0x9e, 0xa7, 0x3c, 0xe0, 0xf9, 0x9c, 0x92, 0x35,
-    0x62, 0xfb, 0x76, 0x6d, 0xd5, 0x26, 0xc9, 0x7f, 0x9f, 0x5f, 0x6e, 0x8f,
-    0xd7, 0xac, 0x50, 0xd1, 0x85, 0xa5, 0x7f, 0x98, 0xdf, 0xfd, 0xf7, 0xf7,
-    0xc5, 0xde, 0x1d, 0xbb, 0x58, 0xbb, 0xa3, 0xac, 0x5e, 0x8f, 0x6d, 0x2c,
-    0x5f, 0xde, 0x6f, 0x98, 0x39, 0x58, 0xbd, 0x87, 0x75, 0x8b, 0xff, 0xd2,
-    0xf8, 0x37, 0xce, 0x67, 0x8a, 0x56, 0x28, 0x67, 0xc5, 0xc1, 0xcb, 0xe0,
-    0x07, 0xe9, 0x58, 0xb4, 0x23, 0x0f, 0x19, 0xc8, 0xaa, 0x53, 0x01, 0x68,
-    0x6b, 0xdf, 0xa1, 0x2f, 0xd2, 0x56, 0x2f, 0xfb, 0xf3, 0xaf, 0x48, 0xc2,
-    0xe2, 0xc5, 0xd9, 0xa5, 0x8b, 0x3f, 0x8f, 0x4a, 0x38, 0xee, 0xff, 0xbe,
-    0xe4, 0x29, 0xd4, 0x79, 0xd6, 0x2f, 0xd8, 0x40, 0x3e, 0x2c, 0x5f, 0x36,
-    0x9b, 0x8b, 0x17, 0xf3, 0x91, 0x37, 0x99, 0x62, 0xff, 0xa7, 0x91, 0x9f,
-    0x7d, 0xdb, 0x4b, 0x17, 0xff, 0xde, 0xfe, 0x41, 0xca, 0x1c, 0xfc, 0x97,
-    0x96, 0x2f, 0xf9, 0xf0, 0x8d, 0x9e, 0x8d, 0xf5, 0x8a, 0x95, 0x43, 0x70,
-    0x7b, 0x19, 0x56, 0xe7, 0x87, 0x27, 0xf9, 0x10, 0x0a, 0xc8, 0xf6, 0x39,
-    0x3e, 0xff, 0x42, 0x75, 0xb4, 0xeb, 0x65, 0x8b, 0xfd, 0xef, 0xbc, 0x5f,
-    0x9d, 0x96, 0x2a, 0x4f, 0xb3, 0x0d, 0xaf, 0xfe, 0xea, 0xc0, 0x1d, 0xf4,
-    0x67, 0x4e, 0x1d, 0x62, 0xfb, 0xee, 0x14, 0x6c, 0xb1, 0x7f, 0xff, 0xd3,
-    0xe7, 0xdd, 0xc7, 0xc9, 0xe8, 0xfe, 0x92, 0x29, 0xfa, 0xc5, 0xff, 0xfd,
-    0xf7, 0xe3, 0x7a, 0x4e, 0x6c, 0xf1, 0xe3, 0xa7, 0xcb, 0x17, 0xff, 0xf3,
-    0x6c, 0x66, 0x0c, 0xce, 0x4f, 0x9f, 0x21, 0x84, 0xb1, 0x7f, 0xff, 0xfd,
-    0xc7, 0xf4, 0x9d, 0xbc, 0x29, 0x32, 0x0f, 0xe9, 0x39, 0x4e, 0xfa, 0x95,
-    0x8b, 0xf7, 0xf3, 0x53, 0xe5, 0x8a, 0xed, 0x35, 0xfd, 0x2f, 0x1d, 0x73,
-    0xcf, 0xb5, 0x2a, 0x9e, 0x46, 0x98, 0xe5, 0x2d, 0x1e, 0x2d, 0xfe, 0x92,
-    0x81, 0x66, 0x01, 0x62, 0xfe, 0x83, 0x43, 0xf3, 0xb2, 0xc5, 0x1a, 0x7c,
-    0x1e, 0x31, 0xbf, 0xff, 0xf4, 0xf7, 0xa9, 0x84, 0xed, 0x83, 0xe4, 0xf9,
-    0xf2, 0x18, 0x4b, 0x17, 0x48, 0x16, 0x2d, 0x05, 0x8b, 0xef, 0x84, 0xdb,
-    0x2c, 0x50, 0x0d, 0xbf, 0x84, 0xad, 0x19, 0x1b, 0x33, 0x18, 0x26, 0x3f,
-    0x18, 0x2d, 0x8c, 0x77, 0x21, 0xbd, 0xb9, 0x83, 0xa3, 0xc7, 0x8c, 0x9e,
-    0x32, 0x16, 0x94, 0x84, 0x50, 0xee, 0xe4, 0xa9, 0x9f, 0x42, 0x88, 0x44,
-    0x61, 0x35, 0x86, 0x9d, 0x7f, 0xd2, 0xfe, 0xe4, 0xed, 0x9c, 0x58, 0xba,
-    0x1e, 0x58, 0xbf, 0xfd, 0x9e, 0x10, 0x0e, 0xd0, 0x21, 0x30, 0x6b, 0x17,
-    0xc0, 0x8e, 0xc8, 0xcf, 0xa2, 0x70, 0x07, 0x24, 0x31, 0x7f, 0xe2, 0x8c,
-    0x38, 0x9f, 0xc4, 0xdd, 0x4b, 0x17, 0xe6, 0xe7, 0xda, 0x0b, 0x17, 0xf8,
-    0x5e, 0x06, 0x85, 0x0e, 0x2c, 0x56, 0x8f, 0x78, 0x8a, 0x2f, 0xe6, 0xd4,
-    0x73, 0x11, 0xab, 0x17, 0x85, 0xc8, 0xcc, 0x3d, 0x22, 0x21, 0xb0, 0x31,
-    0x32, 0x90, 0x43, 0xd2, 0xb1, 0x3a, 0x36, 0x8d, 0xd6, 0xdb, 0xac, 0x5f,
-    0x14, 0xfb, 0x8b, 0x15, 0xd9, 0xb5, 0x88, 0x4e, 0xfb, 0x76, 0x6d, 0xd5,
-    0x27, 0x31, 0x63, 0xac, 0x56, 0x8f, 0x0c, 0x23, 0x1b, 0xf8, 0xb3, 0xb0,
-    0x3c, 0x16, 0x2f, 0xf1, 0x48, 0x65, 0x9d, 0x31, 0x62, 0xdd, 0x7a, 0xc5,
-    0x68, 0xfe, 0x7c, 0x5d, 0xd0, 0xd2, 0xf3, 0x1f, 0x8b, 0x17, 0x67, 0xd6,
-    0x2f, 0xda, 0x17, 0x70, 0xe2, 0xc5, 0x49, 0xe1, 0x60, 0xbd, 0xd1, 0x1d,
-    0x62, 0xc4, 0xb1, 0x4b, 0x18, 0x58, 0xd4, 0xa7, 0xed, 0x8c, 0xcf, 0x09,
-    0xc6, 0x31, 0x25, 0xf0, 0x88, 0x23, 0x8a, 0xaf, 0xd1, 0x9d, 0x64, 0x6f,
-    0x1b, 0xf5, 0x8b, 0x17, 0xfd, 0x19, 0x9a, 0x6e, 0x7d, 0xa0, 0xb1, 0x5b,
-    0x1f, 0xe9, 0x20, 0xdd, 0x1f, 0xe5, 0x8b, 0xfa, 0x0d, 0xad, 0xbe, 0x25,
-    0x8b, 0xf7, 0x24, 0x01, 0xec, 0xb1, 0x6c, 0x88, 0xf6, 0xf8, 0x61, 0x7c,
-    0xd0, 0xfe, 0x2c, 0x5f, 0xfd, 0xb4, 0xfd, 0x9f, 0xdc, 0xc1, 0x75, 0xeb,
-    0x14, 0x33, 0xec, 0xd1, 0x15, 0xf4, 0x27, 0x5b, 0x2c, 0x5e, 0x7f, 0xf1,
-    0x62, 0xe1, 0x6e, 0xb1, 0x7e, 0x00, 0x1f, 0xfc, 0x58, 0xb9, 0xb4, 0xb1,
-    0x58, 0x78, 0x1c, 0x29, 0xbe, 0x18, 0x59, 0xf5, 0x8b, 0xb0, 0x96, 0x2f,
-    0xf9, 0xe0, 0xff, 0x11, 0xce, 0xeb, 0x15, 0x27, 0xe6, 0x32, 0x4f, 0x0b,
-    0x5d, 0xdc, 0x64, 0x15, 0x44, 0x0d, 0xdb, 0x21, 0x29, 0x11, 0x10, 0x09,
-    0x38, 0x3b, 0xe5, 0x90, 0xe1, 0x29, 0x51, 0x8b, 0x83, 0xd9, 0x0e, 0x66,
-    0x95, 0x55, 0x7e, 0xd6, 0xec, 0xdb, 0xaa, 0x4e, 0xf2, 0xff, 0x42, 0x33,
-    0x9a, 0xd3, 0x84, 0xb1, 0x77, 0xbc, 0xb1, 0x68, 0xcc, 0x44, 0x43, 0x1b,
-    0xf8, 0xe6, 0xff, 0x8a, 0x5b, 0x6e, 0xf9, 0x23, 0x58, 0xb3, 0xac, 0x5d,
-    0x3b, 0xac, 0x54, 0x0d, 0x49, 0xc4, 0x6e, 0x18, 0x16, 0x2f, 0x1d, 0xbc,
-    0xb1, 0x74, 0xf5, 0x2c, 0x5e, 0x2c, 0xd9, 0x62, 0xfb, 0x36, 0x17, 0x45,
-    0x8b, 0x46, 0x0d, 0x31, 0x6c, 0x63, 0x34, 0x84, 0xe3, 0x00, 0x1d, 0x21,
-    0xa0, 0xc7, 0x6f, 0xfd, 0xec, 0x8f, 0x8c, 0xe0, 0x3d, 0xee, 0xd6, 0x2a,
-    0x63, 0xe2, 0x40, 0xd9, 0x16, 0x08, 0x19, 0x9c, 0x7d, 0x06, 0xef, 0x3d,
-    0xc3, 0x2d, 0xed, 0x76, 0x0e, 0xa7, 0x77, 0x0f, 0x18, 0x17, 0xe3, 0x14,
-    0x68, 0x76, 0x82, 0x99, 0x4e, 0x52, 0xd5, 0x39, 0x3c, 0xe3, 0xe8, 0x64,
-    0x07, 0x1a, 0x6f, 0x53, 0x75, 0xd1, 0xff, 0x58, 0xb7, 0x96, 0x2f, 0xe6,
-    0xef, 0x7f, 0xb6, 0x96, 0x2f, 0xf9, 0x8b, 0x6e, 0x39, 0x77, 0x05, 0x8a,
-    0x23, 0xea, 0x08, 0xc2, 0xff, 0xdb, 0x60, 0x5f, 0xce, 0x63, 0x92, 0xc5,
-    0xb8, 0xb1, 0x58, 0x7a, 0x20, 0x3f, 0xbf, 0xf3, 0x91, 0x61, 0xbb, 0x89,
-    0x86, 0xb1, 0x7d, 0xf7, 0xd4, 0x16, 0x2f, 0xd9, 0xf1, 0xb1, 0x2c, 0x5c,
-    0xf1, 0x92, 0x9d, 0xa1, 0xc6, 0xfe, 0xf8, 0x4e, 0x7c, 0x21, 0xf1, 0xf8,
-    0x64, 0x77, 0xee, 0x70, 0xed, 0x05, 0x8b, 0xee, 0xbe, 0x10, 0xeb, 0xd6,
-    0x2f, 0xff, 0xa4, 0xb6, 0xe0, 0x99, 0xe1, 0xcf, 0xb4, 0x16, 0x2b, 0x47,
-    0xfd, 0xf2, 0xeb, 0xa3, 0xe3, 0xd6, 0x2f, 0xff, 0xdf, 0x92, 0xdb, 0x82,
-    0x67, 0x87, 0x3e, 0xd0, 0x58, 0xbf, 0xff, 0xff, 0x9e, 0x4b, 0xc4, 0xc6,
-    0xe7, 0x85, 0xe7, 0xf7, 0x3e, 0xfa, 0x9d, 0x9b, 0x5b, 0xac, 0x5d, 0xf7,
-    0x1a, 0x37, 0xfe, 0xad, 0x7f, 0xff, 0x33, 0xfa, 0x7a, 0x16, 0x73, 0xed,
-    0x01, 0xeb, 0xaf, 0x58, 0xbf, 0xff, 0xf6, 0x13, 0x68, 0x11, 0xd8, 0x19,
-    0x7b, 0xe2, 0x68, 0x48, 0x38, 0xb1, 0x77, 0x25, 0x62, 0xff, 0xee, 0xf7,
-    0x13, 0x77, 0xec, 0xc2, 0x35, 0x62, 0xfe, 0xea, 0xea, 0x78, 0xb9, 0x2b,
-    0x17, 0x89, 0xa3, 0x25, 0x5a, 0xc0, 0xe1, 0x4e, 0x69, 0x16, 0xf0, 0xfd,
-    0xf9, 0x71, 0x30, 0xf1, 0xbf, 0xc2, 0xe1, 0xa4, 0x5f, 0xd1, 0xbc, 0x69,
-    0x3d, 0xeb, 0x65, 0x8b, 0xc7, 0x14, 0x7a, 0xc5, 0xfe, 0x36, 0x4e, 0x36,
-    0x60, 0x96, 0x2f, 0xb3, 0x61, 0x7d, 0x62, 0xe6, 0x3a, 0xc5, 0x68, 0xdd,
-    0x88, 0x92, 0xf8, 0x5d, 0x43, 0x95, 0x8b, 0xff, 0xf7, 0x03, 0x91, 0xe4,
-    0xf9, 0xfa, 0x48, 0xba, 0xf9, 0x58, 0xbf, 0x67, 0x57, 0xa4, 0xd5, 0x8b,
-    0x75, 0x2c, 0x56, 0xc7, 0x83, 0x85, 0x97, 0xdc, 0x7d, 0xf4, 0xb1, 0x5b,
-    0x27, 0x76, 0xe4, 0x3a, 0x70, 0xf9, 0x08, 0x09, 0x8a, 0x13, 0xa1, 0x11,
-    0x5f, 0xfb, 0x8c, 0x6f, 0xde, 0x48, 0x52, 0xb1, 0x7c, 0xda, 0xc3, 0xac,
-    0x5f, 0xf3, 0x79, 0xbf, 0xdc, 0x33, 0xcb, 0x17, 0xe0, 0x37, 0x05, 0x2b,
-    0x14, 0x34, 0x42, 0x7c, 0x8b, 0xc7, 0x55, 0x88, 0xf2, 0x78, 0x61, 0x5d,
-    0x06, 0x58, 0xb9, 0x80, 0xb1, 0x7f, 0xd1, 0x0d, 0x98, 0x2c, 0xef, 0xcb,
-    0x17, 0xff, 0xff, 0x89, 0x82, 0x2c, 0xf7, 0xb3, 0x69, 0x26, 0x37, 0x87,
-    0x9c, 0x21, 0xac, 0x5f, 0xef, 0xce, 0xd1, 0x41, 0x89, 0x62, 0xfe, 0xdd,
-    0xc7, 0xfc, 0xd9, 0x62, 0xe9, 0xd4, 0x47, 0xca, 0xc6, 0xb7, 0xfe, 0x62,
-    0x81, 0x83, 0x13, 0x6a, 0x0b, 0x17, 0xb0, 0x3e, 0x2c, 0x54, 0xa7, 0xa1,
-    0x82, 0xee, 0x2f, 0xa3, 0xcf, 0xc3, 0x6c, 0x22, 0xde, 0xa4, 0x0b, 0xcf,
-    0x17, 0x16, 0x2f, 0xe2, 0x90, 0x1d, 0xa0, 0xb1, 0x7f, 0x14, 0x80, 0xed,
-    0x05, 0x8b, 0xfd, 0x1b, 0xc6, 0x85, 0x83, 0xf8, 0x96, 0x2f, 0xd9, 0xd2,
-    0x4b, 0xd8, 0x7d, 0x7c, 0x2d, 0xbf, 0x10, 0xb9, 0xf7, 0x31, 0x1e, 0x98,
-    0x3d, 0xa8, 0x4c, 0x5f, 0x86, 0xfd, 0x35, 0x8b, 0x16, 0xfc, 0x9f, 0xde,
-    0x28, 0xdf, 0x64, 0x73, 0x81, 0x62, 0xfc, 0xc7, 0x3b, 0x41, 0x62, 0xe6,
-    0x86, 0x8f, 0x37, 0xe4, 0xb7, 0xfe, 0x7d, 0x6b, 0x3f, 0xf9, 0xee, 0x0b,
-    0x17, 0xfa, 0x4a, 0x77, 0xe0, 0x0e, 0xb1, 0x7d, 0x31, 0x7d, 0xd6, 0x2f,
-    0x33, 0x6e, 0xa9, 0x15, 0xcb, 0xfc, 0x6b, 0x10, 0x3d, 0x9f, 0x58, 0xad,
-    0x91, 0x03, 0xb9, 0x1b, 0x95, 0x5e, 0xfe, 0x6e, 0xb1, 0x7d, 0x80, 0x17,
-    0x16, 0x2e, 0x6e, 0xf0, 0xf0, 0x48, 0x7a, 0xf9, 0xa0, 0xe0, 0x58, 0xbf,
-    0xff, 0xf8, 0x2f, 0x1a, 0xdc, 0xfe, 0xef, 0xcc, 0x1f, 0xa0, 0x21, 0xb1,
-    0x01, 0x62, 0xff, 0xa2, 0x26, 0x0f, 0x01, 0x30, 0x58, 0xbf, 0x31, 0xad,
-    0xe8, 0x2c, 0x5f, 0xff, 0x71, 0xdb, 0xbf, 0xb3, 0xf8, 0x5a, 0x6e, 0x2c,
-    0x51, 0x1f, 0xcf, 0x8a, 0x68, 0xd4, 0x6a, 0x77, 0x0b, 0x3b, 0xff, 0xbf,
-    0x90, 0xdf, 0xee, 0x39, 0x2f, 0x2c, 0x54, 0xa7, 0x72, 0xf1, 0xa5, 0x78,
-    0xaa, 0xff, 0xfb, 0x3d, 0x3e, 0xe6, 0x6a, 0x70, 0x83, 0x3a, 0xc5, 0xff,
-    0xfb, 0x99, 0xa9, 0xc2, 0xfb, 0xb4, 0x3c, 0xfb, 0x2c, 0x51, 0xd1, 0x47,
-    0xe4, 0xfb, 0xff, 0xfe, 0xf3, 0xfb, 0x9f, 0x7f, 0xb7, 0x22, 0x84, 0xc7,
-    0xe7, 0x7e, 0x58, 0xa9, 0x44, 0x78, 0x88, 0xef, 0xff, 0xe7, 0xf4, 0xe1,
-    0x43, 0xdd, 0xee, 0xfa, 0x0e, 0x2e, 0x2c, 0x54, 0x17, 0x7d, 0x86, 0xe6,
-    0x69, 0x6e, 0xe8, 0x1a, 0x85, 0xa9, 0xdc, 0xbe, 0x58, 0x51, 0xed, 0xfa,
-    0x36, 0x7e, 0x84, 0x56, 0x75, 0x8b, 0xfd, 0xe7, 0x21, 0x43, 0x38, 0xb1,
-    0x7d, 0x8e, 0x5b, 0x78, 0xf1, 0x03, 0x11, 0xbf, 0xfc, 0xcc, 0x59, 0xe9,
-    0xd7, 0x0b, 0x47, 0x58, 0xbf, 0xf4, 0x03, 0x86, 0x17, 0xb6, 0xc1, 0xac,
-    0x5d, 0x07, 0x58, 0xbf, 0x7d, 0xf5, 0xf6, 0x58, 0xbd, 0xbb, 0xe8, 0xc3,
-    0x7f, 0x82, 0xf7, 0xff, 0x0b, 0x9f, 0x68, 0x79, 0xd8, 0x80, 0xb1, 0x5d,
-    0x9f, 0xbe, 0x8c, 0xee, 0xfb, 0x9a, 0x9b, 0x16, 0x92, 0x3d, 0x0f, 0x7b,
-    0xda, 0x7f, 0x2c, 0x5f, 0x9a, 0x0d, 0xdc, 0x16, 0x2a, 0x23, 0xc6, 0xd0,
-    0xed, 0xff, 0xef, 0x48, 0x5c, 0xe6, 0x6b, 0x09, 0xc2, 0x58, 0xbf, 0xff,
-    0xc0, 0xc8, 0x3f, 0x41, 0xcf, 0x39, 0x9f, 0x7e, 0x0b, 0x65, 0x8b, 0xc1,
-    0x06, 0x75, 0x8b, 0x16, 0x22, 0x11, 0x99, 0x2a, 0x53, 0x18, 0x81, 0x1f,
-    0xa1, 0x9f, 0x7f, 0x42, 0x5c, 0x0e, 0x75, 0x8b, 0xff, 0xfe, 0xce, 0xe1,
-    0x87, 0x72, 0x86, 0xa7, 0xec, 0xfe, 0x9f, 0xac, 0x5f, 0x6d, 0xec, 0xfa,
-    0xc5, 0xff, 0xb4, 0x58, 0x37, 0x86, 0x77, 0xe5, 0x8a, 0x93, 0xe3, 0x72,
-    0x4b, 0xfa, 0x4e, 0x3d, 0x36, 0xeb, 0x15, 0x04, 0xc5, 0xff, 0x0c, 0x82,
-    0x20, 0xbf, 0xfb, 0xdf, 0xc8, 0x77, 0xed, 0x4e, 0x04, 0xb1, 0x7f, 0xff,
-    0xe7, 0x07, 0x1b, 0xbc, 0xfb, 0x8b, 0xaf, 0xcd, 0x67, 0xf3, 0xa4, 0xac,
-    0x51, 0x22, 0xe7, 0xc8, 0xf7, 0xff, 0xff, 0x98, 0x83, 0x90, 0x64, 0x3f,
-    0x3d, 0x07, 0x31, 0x98, 0x42, 0x86, 0x71, 0x62, 0xa5, 0x13, 0xba, 0x22,
-    0xba, 0x1b, 0x2c, 0x5f, 0xc5, 0xbf, 0xdd, 0xb7, 0x58, 0xbc, 0xd0, 0xc5,
-    0x8b, 0xcd, 0x1c, 0x6a, 0xc5, 0x61, 0xf6, 0x6e, 0x5e, 0x01, 0xcb, 0xff,
-    0xff, 0xff, 0xe6, 0x39, 0xda, 0x10, 0x90, 0xe4, 0x6f, 0xa6, 0xec, 0x7f,
-    0x9d, 0x71, 0xd9, 0x8a, 0x77, 0xfc, 0xc4, 0xb1, 0x7f, 0xff, 0xf9, 0x80,
-    0x4d, 0x01, 0xff, 0x36, 0xe7, 0xe4, 0xe5, 0x9d, 0xf1, 0xcd, 0x58, 0xa1,
-    0xa6, 0x48, 0x50, 0xab, 0xbf, 0x8b, 0xc2, 0xff, 0x5b, 0x2b, 0x16, 0xf4,
-    0x9e, 0xdb, 0x94, 0x5f, 0xff, 0xc7, 0xce, 0xfd, 0xf6, 0xdd, 0x87, 0xee,
-    0x13, 0x9a, 0xb1, 0x7f, 0xf0, 0xb7, 0x2c, 0x37, 0xde, 0x68, 0x71, 0x62,
-    0xff, 0x49, 0xe6, 0x30, 0x20, 0x82, 0x58, 0xa7, 0x4c, 0x15, 0x89, 0xb8,
-    0xbd, 0xd4, 0x8f, 0x58, 0xab, 0xc9, 0xa5, 0x59, 0xdf, 0xfb, 0x53, 0xfd,
-    0xdf, 0x99, 0xdf, 0x96, 0x2f, 0xff, 0xff, 0xdd, 0x59, 0xa7, 0xd9, 0x8f,
-    0xbf, 0xdf, 0xef, 0x25, 0xef, 0xb6, 0xf2, 0x43, 0x58, 0xbf, 0xdd, 0x3f,
-    0x8f, 0xf3, 0xb2, 0xc5, 0xf6, 0xb4, 0xfb, 0x2c, 0x53, 0x9e, 0xc8, 0x0d,
-    0x6a, 0x09, 0xa0, 0xb2, 0x09, 0x43, 0x7e, 0xff, 0x66, 0xb8, 0xdb, 0x8b,
-    0xb5, 0x8b, 0xff, 0xda, 0xf7, 0x9b, 0x60, 0xce, 0x3f, 0xb9, 0xab, 0x17,
-    0xfe, 0xda, 0x76, 0x2c, 0xf7, 0xb3, 0x65, 0x8b, 0xbb, 0xe6, 0x22, 0x40,
-    0x34, 0xfa, 0xc4, 0x7b, 0x34, 0x31, 0xaf, 0xf7, 0x78, 0xfc, 0xe0, 0xa5,
-    0x62, 0xff, 0xd9, 0xa8, 0x79, 0xc7, 0x85, 0x05, 0x8b, 0x09, 0x62, 0xff,
-    0xed, 0x67, 0x49, 0x2f, 0x77, 0x0c, 0xf2, 0xc5, 0xcf, 0xd1, 0x62, 0xf3,
-    0xe6, 0x96, 0x2b, 0xe6, 0xd7, 0xc3, 0x37, 0xff, 0xe9, 0x00, 0x72, 0x32,
-    0x17, 0xa7, 0x99, 0xdf, 0x96, 0x2f, 0xfb, 0x82, 0x6e, 0xfe, 0x13, 0x79,
-    0x62, 0xff, 0xbf, 0x3b, 0x77, 0xe1, 0x37, 0x16, 0x2f, 0xfb, 0xf8, 0x7f,
-    0x14, 0x82, 0x56, 0x2f, 0xdc, 0x7d, 0xf0, 0xb1, 0x16, 0x11, 0x1e, 0x78,
-    0xf2, 0xf3, 0x43, 0xac, 0x58, 0xad, 0x95, 0x12, 0x68, 0x4b, 0xef, 0x80,
-    0x21, 0xf4, 0x60, 0xfd, 0x13, 0x2f, 0xfb, 0x1f, 0xa1, 0x4e, 0x6a, 0x0b,
-    0x17, 0xff, 0xef, 0x43, 0x23, 0xd8, 0x81, 0xdf, 0xb5, 0x38, 0x12, 0xc0,
-    0x46, 0xe6, 0xfb, 0xdf, 0x90, 0x2c, 0x58, 0x0b, 0x15, 0xd9, 0xb5, 0xd1,
-    0x1d, 0x4a, 0xbb, 0xfc, 0x94, 0xc4, 0xd0, 0x9b, 0x14, 0x28, 0x2f, 0xff,
-    0xe1, 0xbe, 0xff, 0x71, 0x8f, 0x02, 0x0e, 0x2f, 0x88, 0xd5, 0x8b, 0xff,
-    0xda, 0x7e, 0x90, 0x7f, 0x7e, 0x4e, 0xc4, 0xb1, 0x58, 0x8a, 0xdd, 0x31,
-    0x5f, 0xdf, 0x6f, 0x73, 0xf2, 0xb1, 0x7f, 0xfa, 0x22, 0x9f, 0x73, 0xdd,
-    0xee, 0xe5, 0xb2, 0xc5, 0xff, 0xff, 0xf9, 0x8d, 0xcd, 0x37, 0x61, 0x41,
-    0xff, 0x3b, 0x93, 0x77, 0xc7, 0x21, 0x37, 0xd6, 0x2f, 0xf9, 0x82, 0x1f,
-    0xe7, 0x6c, 0x09, 0x62, 0x9d, 0x30, 0xf6, 0x4e, 0x28, 0x42, 0xdf, 0xff,
-    0x38, 0x30, 0xef, 0xee, 0x49, 0xdb, 0xbf, 0x2c, 0x5f, 0xff, 0x0f, 0x52,
-    0x2e, 0x3f, 0x46, 0x71, 0x8a, 0x56, 0x2f, 0xfb, 0x39, 0xe7, 0xc8, 0x9c,
-    0x0b, 0x16, 0xe9, 0x88, 0x8a, 0x25, 0x1a, 0xc4, 0xc0, 0xde, 0x1b, 0x57,
-    0xff, 0xfb, 0x76, 0xd3, 0x7f, 0xb8, 0x67, 0xb3, 0xd2, 0x2e, 0xbf, 0x16,
-    0x2f, 0xfe, 0x6e, 0xe0, 0xfe, 0xfc, 0xeb, 0xd2, 0xb1, 0x7f, 0xfe, 0xfe,
-    0x6d, 0xcf, 0xc9, 0xcb, 0x3b, 0xe3, 0x9a, 0xb1, 0x7f, 0xf7, 0xe4, 0x98,
-    0xfd, 0xf8, 0x4d, 0xc5, 0x8b, 0xfc, 0x26, 0xef, 0xe1, 0x37, 0x86, 0x89,
-    0xdd, 0xd6, 0x2f, 0xfd, 0x06, 0xe7, 0x27, 0xf3, 0xbe, 0x2c, 0x5f, 0xde,
-    0xc8, 0xa0, 0xfe, 0x58, 0xb4, 0xb9, 0xf7, 0x1c, 0xfe, 0xff, 0xfc, 0xfa,
-    0xfe, 0x60, 0x5e, 0xcd, 0xb0, 0xd7, 0xd2, 0xc5, 0x41, 0x55, 0x4b, 0x93,
-    0x9d, 0x9f, 0x90, 0xe2, 0xf4, 0x2f, 0x3a, 0x13, 0x5f, 0xfe, 0xd1, 0xa1,
-    0xf9, 0xf8, 0x59, 0xd1, 0xc6, 0xb1, 0x7f, 0xff, 0x38, 0xc7, 0x81, 0x77,
-    0xe1, 0x37, 0x3e, 0x13, 0x0d, 0x62, 0xa5, 0x15, 0xbf, 0x4e, 0xbe, 0x13,
-    0x6a, 0x0b, 0x17, 0xf1, 0x4e, 0xc0, 0x6f, 0x2c, 0x5f, 0xe6, 0x18, 0x7d,
-    0x52, 0x50, 0x58, 0xb4, 0xee, 0x7c, 0xa7, 0x2e, 0xbf, 0xfe, 0x3b, 0x10,
-    0x3e, 0x13, 0x16, 0xdb, 0xbe, 0xcb, 0x17, 0xff, 0xfc, 0xe5, 0x0e, 0x6c,
-    0x2e, 0x67, 0xa4, 0x98, 0x04, 0xd0, 0x58, 0xbf, 0xff, 0xb4, 0xdc, 0xc2,
-    0x9c, 0x07, 0x32, 0x29, 0xef, 0x8b, 0x17, 0x3f, 0x99, 0x31, 0x30, 0x29,
-    0x89, 0x96, 0x86, 0x9f, 0xf3, 0xc2, 0x21, 0xa3, 0x3b, 0xbf, 0xe1, 0x00,
-    0xed, 0x0e, 0x68, 0x6b, 0x17, 0xff, 0xfb, 0x1c, 0xbd, 0x84, 0x61, 0x30,
-    0xe4, 0xb6, 0x9d, 0x2c, 0x57, 0x91, 0x33, 0xd0, 0xee, 0xda, 0x58, 0xbf,
-    0xff, 0x77, 0xe2, 0x9f, 0xb7, 0x33, 0x72, 0x6c, 0xdd, 0x62, 0xb1, 0x11,
-    0xbb, 0x92, 0x88, 0x4a, 0xff, 0xc2, 0xe6, 0x13, 0x7c, 0x01, 0xf6, 0xb1,
-    0x7f, 0xff, 0x9b, 0x59, 0xd3, 0x07, 0x9c, 0x13, 0x77, 0xf0, 0x9b, 0xcb,
-    0x17, 0xf1, 0x4e, 0xb4, 0xf1, 0x2c, 0x5f, 0xff, 0x4b, 0x16, 0xff, 0x6f,
-    0xe0, 0xff, 0x23, 0x58, 0xbf, 0xfb, 0x4f, 0xd2, 0x28, 0x39, 0x14, 0x9d,
-    0x62, 0xff, 0xed, 0xb8, 0xe5, 0xb7, 0x7e, 0x26, 0xfa, 0xc5, 0xfd, 0xee,
-    0x0e, 0x7b, 0x82, 0xc5, 0x49, 0xfb, 0xb2, 0x3d, 0xff, 0xff, 0x88, 0x4d,
-    0x0c, 0x84, 0x90, 0xf5, 0x8e, 0x6e, 0x85, 0x30, 0x58, 0xad, 0x26, 0x91,
-    0xf8, 0x5e, 0xf0, 0x82, 0xfe, 0xf3, 0x97, 0xf0, 0x0b, 0x17, 0xfc, 0x52,
-    0x0c, 0xd6, 0xcd, 0xf5, 0x8b, 0xf0, 0xc3, 0x62, 0x82, 0xc5, 0xfe, 0x6f,
-    0x72, 0x2f, 0xce, 0xcb, 0x14, 0xc7, 0xbe, 0x11, 0x4d, 0xff, 0xb5, 0xa7,
-    0xef, 0xf9, 0xd3, 0x38, 0xb1, 0x7f, 0xfd, 0xc9, 0xc1, 0xeb, 0x1c, 0xdd,
-    0x0a, 0x60, 0xb1, 0x7c, 0x52, 0x09, 0x95, 0x6e, 0x83, 0x2e, 0xc8, 0xe5,
-    0xfb, 0x36, 0x88, 0xb7, 0xf0, 0x98, 0xe1, 0x17, 0x90, 0xae, 0xc3, 0x81,
-    0x71, 0xaf, 0xd2, 0xf6, 0x2b, 0x4b, 0x9c, 0x9f, 0x9c, 0xac, 0xbf, 0xd3,
-    0xf7, 0xf7, 0x1b, 0xb5, 0x8b, 0xff, 0x67, 0x7e, 0xf4, 0x9f, 0xf9, 0xb2,
-    0xc5, 0xff, 0x45, 0xbf, 0xdc, 0xf3, 0xa3, 0x56, 0x2f, 0xf0, 0x33, 0x59,
-    0x9e, 0xe2, 0xc5, 0xf6, 0xde, 0xcd, 0xd6, 0x2b, 0x11, 0x2b, 0xd9, 0xee,
-    0x8c, 0xea, 0x5b, 0x04, 0xb8, 0x11, 0x0e, 0x33, 0xdc, 0x97, 0xbf, 0xbc,
-    0x62, 0x3f, 0x94, 0x40, 0x51, 0xb0, 0x7a, 0x74, 0x50, 0x45, 0xc1, 0x1a,
-    0x07, 0x0d, 0x6b, 0xd8, 0x06, 0x58, 0xbd, 0xac, 0xed, 0x62, 0xf7, 0xda,
-    0x1f, 0x37, 0x40, 0x1c, 0xbf, 0xf9, 0x9f, 0xd2, 0x5b, 0xb9, 0xce, 0xeb,
-    0x17, 0xdf, 0x92, 0xf2, 0xc5, 0xce, 0x3f, 0x9f, 0x2f, 0x10, 0xed, 0x9f,
-    0x46, 0x21, 0x42, 0x5e, 0xff, 0xb3, 0xbe, 0x0e, 0x58, 0xb6, 0x58, 0xbf,
-    0xcd, 0xc9, 0x2f, 0x7d, 0xd6, 0x2f, 0xc7, 0x8b, 0x8e, 0x4b, 0x17, 0xff,
-    0x6e, 0xfa, 0xfe, 0x45, 0xf7, 0xd6, 0xcb, 0x17, 0xdb, 0x36, 0x71, 0x62,
-    0xff, 0xe6, 0x06, 0x17, 0x7e, 0xd4, 0xe0, 0x4b, 0x17, 0xfa, 0x4d, 0xcd,
-    0x07, 0xee, 0x2c, 0x5f, 0xe2, 0x29, 0xdb, 0xf2, 0x35, 0x8b, 0xfd, 0x0e,
-    0x7e, 0x74, 0x18, 0xd6, 0x2b, 0x0f, 0xa5, 0x8c, 0xea, 0x0a, 0x8c, 0x30,
-    0xb0, 0xd3, 0xad, 0xcc, 0xbb, 0x29, 0x64, 0x82, 0x23, 0xe2, 0x2f, 0xa1,
-    0x3f, 0x7d, 0xdc, 0x33, 0xcb, 0x17, 0xd1, 0x38, 0xba, 0xf5, 0x8a, 0x19,
-    0xe6, 0x80, 0x92, 0xff, 0xff, 0x7f, 0x37, 0x2c, 0x3e, 0x16, 0x78, 0x40,
-    0x3b, 0x41, 0x62, 0xfe, 0xfb, 0x1c, 0xa7, 0xb5, 0x8b, 0xff, 0x16, 0x7f,
-    0x22, 0x83, 0xea, 0x0b, 0x17, 0xff, 0xff, 0xc0, 0x92, 0xdd, 0xbc, 0xdd,
-    0x83, 0x3a, 0x3f, 0xa1, 0xf7, 0xf7, 0x1c, 0x6b, 0x17, 0xfd, 0xdf, 0xbe,
-    0xc7, 0xce, 0xfc, 0xb1, 0x7f, 0xff, 0xf8, 0x85, 0xff, 0x7e, 0x74, 0x0c,
-    0xd4, 0x09, 0xe1, 0xfc, 0xc2, 0xdd, 0x62, 0xfd, 0xd7, 0xff, 0x00, 0xcb,
-    0x16, 0xce, 0x22, 0x90, 0x4e, 0xf7, 0xfd, 0x39, 0xe2, 0xc0, 0x47, 0x62,
-    0xc5, 0xff, 0x9f, 0xa3, 0xfa, 0x28, 0x49, 0x79, 0x62, 0xa5, 0x57, 0x94,
-    0x08, 0xb1, 0x83, 0x72, 0xee, 0xcf, 0xf5, 0x08, 0x02, 0x87, 0x07, 0x0a,
-    0x3c, 0x75, 0x7f, 0xf9, 0xb2, 0x1f, 0xc7, 0x2c, 0x04, 0x76, 0x2c, 0x5e,
-    0x68, 0x46, 0x46, 0x8e, 0xe1, 0x62, 0x63, 0xf6, 0x84, 0x6b, 0x83, 0x8f,
-    0xdb, 0x27, 0xf4, 0x0d, 0x87, 0x36, 0xf1, 0xcd, 0xf7, 0x1d, 0x03, 0x9a,
-    0xc5, 0x1a, 0x26, 0xa3, 0x8b, 0x39, 0x17, 0xe5, 0xbb, 0xb4, 0x6d, 0x60,
-    0x8c, 0xab, 0xaf, 0x26, 0x29, 0x7e, 0x7c, 0xac, 0x51, 0x7d, 0x2f, 0xe0,
-    0x39, 0x78, 0x9d, 0x50, 0x89, 0xbb, 0xaf, 0xc5, 0x8b, 0xc0, 0x0f, 0xb5,
-    0x8b, 0x01, 0x62, 0xfe, 0x9d, 0x61, 0x7c, 0x4b, 0x16, 0xc6, 0x37, 0xfe,
-    0x12, 0xbf, 0xf9, 0xf4, 0x4c, 0x69, 0x67, 0xa4, 0x25, 0x8b, 0xe9, 0x17,
-    0x5f, 0x8b, 0x14, 0x69, 0xf5, 0xf9, 0x12, 0xff, 0xa1, 0x9e, 0xfb, 0xce,
-    0x80, 0xb1, 0x7d, 0xbb, 0x43, 0x16, 0x2c, 0x05, 0x8a, 0xc3, 0x6a, 0xe4,
-    0x77, 0xe7, 0x2f, 0x67, 0xd6, 0x2f, 0x71, 0xc2, 0x58, 0xb6, 0x0c, 0xf1,
-    0x40, 0x4f, 0x7f, 0xff, 0x0f, 0xf2, 0x5b, 0x70, 0x4c, 0xf0, 0xe7, 0xda,
-    0x0b, 0x17, 0xff, 0xff, 0xf1, 0x67, 0x08, 0x5f, 0xf7, 0xe7, 0x40, 0xcd,
-    0x40, 0x9e, 0x1f, 0xcc, 0x2d, 0xd6, 0x2f, 0x67, 0xe3, 0x23, 0x52, 0xb0,
-    0xa9, 0x1c, 0x1a, 0xfe, 0x42, 0x43, 0xb2, 0x3f, 0xb7, 0x13, 0x27, 0x09,
-    0xc3, 0x5c, 0xbf, 0xff, 0xfe, 0x1e, 0x46, 0x72, 0x0f, 0xf9, 0xee, 0x18,
-    0x7c, 0xe8, 0xfe, 0x04, 0x8e, 0x56, 0x2f, 0x3c, 0xb2, 0xc5, 0xef, 0x48,
-    0xd2, 0x2f, 0xff, 0x7d, 0x9f, 0xd3, 0x07, 0xd6, 0xc2, 0x02, 0x45, 0xed,
-    0x75, 0xf1, 0x92, 0x7d, 0x1c, 0x1d, 0xbc, 0xdb, 0xc6, 0x41, 0x17, 0xc3,
-    0x84, 0x1d, 0xa3, 0x06, 0xf8, 0x72, 0x9b, 0xcb, 0xca, 0x3d, 0xb8, 0xf6,
-    0xf4, 0xe5, 0xc8, 0xa1, 0x3d, 0xd2, 0x34, 0x0b, 0xff, 0xd1, 0x87, 0x68,
-    0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x30, 0x97, 0xd2, 0xe1, 0xfd, 0x62,
-    0xff, 0xfb, 0x35, 0xa6, 0x87, 0xf4, 0xd0, 0xfb, 0xe9, 0x62, 0xdb, 0x2c,
-    0x56, 0xe7, 0xc6, 0xea, 0x17, 0xff, 0xff, 0xfd, 0x3e, 0x14, 0x60, 0x7b,
-    0xb6, 0x99, 0xf6, 0x8c, 0xdf, 0xef, 0x14, 0x33, 0x63, 0x39, 0x33, 0xb2,
-    0xc5, 0xfe, 0xfc, 0x93, 0x1e, 0x7a, 0x96, 0x2f, 0x38, 0x7f, 0x58, 0xbf,
-    0xf8, 0xb3, 0xdc, 0x93, 0xf7, 0x0c, 0xf2, 0xc5, 0xfd, 0xfc, 0x18, 0xbd,
-    0xc5, 0x8b, 0xfd, 0x9d, 0x18, 0x7f, 0x98, 0xce, 0x1f, 0xa7, 0x91, 0x6f,
-    0xff, 0x69, 0x81, 0x18, 0x6f, 0xa0, 0x14, 0xf2, 0x0b, 0x17, 0x64, 0x60,
-    0xd5, 0x58, 0x64, 0x21, 0xbb, 0x22, 0x68, 0x51, 0x00, 0xd4, 0xa1, 0x24,
-    0x1a, 0x75, 0xdd, 0x67, 0x5c, 0x58, 0xb7, 0x45, 0x8a, 0xeb, 0x4d, 0xb9,
-    0xc8, 0xef, 0xcf, 0xff, 0xe6, 0xcb, 0x17, 0x75, 0x87, 0x58, 0xbf, 0xba,
-    0x3f, 0x79, 0x9b, 0x2c, 0x58, 0x6b, 0x15, 0x87, 0x87, 0xf3, 0x1b, 0xfb,
-    0x21, 0x3f, 0xdd, 0xd6, 0x2f, 0x7b, 0xdd, 0xac, 0x5f, 0xef, 0x7f, 0x08,
-    0x9b, 0xcb, 0x15, 0x1a, 0x26, 0x01, 0x1b, 0x30, 0x75, 0xd4, 0x84, 0x05,
-    0xdd, 0x43, 0xf7, 0xe8, 0x07, 0x09, 0xd2, 0xc5, 0xff, 0xdd, 0x6e, 0x77,
-    0x01, 0x37, 0x8a, 0x60, 0xb1, 0x7d, 0xd7, 0x79, 0x03, 0xac, 0x5e, 0x8d,
-    0x71, 0xb3, 0xac, 0x5f, 0xa3, 0x48, 0xd3, 0xac, 0x8e, 0x8d, 0xd6, 0x2e,
-    0xf4, 0x6a, 0x58, 0xbf, 0xfc, 0xfe, 0xf3, 0x4f, 0xb3, 0xf2, 0xe0, 0x58,
-    0xbe, 0xe3, 0x99, 0x8b, 0x17, 0xff, 0x63, 0x83, 0x19, 0xf5, 0xbc, 0xf9,
-    0x62, 0xee, 0xe3, 0xd6, 0x2f, 0xdf, 0x73, 0xce, 0xeb, 0x17, 0x61, 0xcc,
-    0x3c, 0x5d, 0xc7, 0x2f, 0x02, 0x7a, 0x2c, 0x5f, 0x7a, 0x74, 0x05, 0x8b,
-    0xa4, 0xf8, 0x78, 0x4c, 0x3f, 0x7f, 0xfb, 0xdc, 0x14, 0x99, 0xbf, 0xde,
-    0x39, 0xb6, 0x58, 0xa1, 0xa3, 0xb7, 0xee, 0x24, 0x57, 0x7f, 0xd0, 0x33,
-    0xc4, 0x61, 0x9f, 0x8e, 0x58, 0xbe, 0x90, 0x06, 0x75, 0x8b, 0xe9, 0xe4,
-    0x81, 0x62, 0xed, 0x66, 0xe7, 0x8c, 0x44, 0x97, 0xef, 0x36, 0xcd, 0xc5,
-    0x8b, 0xe9, 0x3b, 0xe9, 0x62, 0xec, 0x25, 0x8a, 0x88, 0xf8, 0x74, 0x53,
-    0xc2, 0x2b, 0x85, 0xc5, 0x8a, 0x93, 0xc8, 0x39, 0x85, 0xf3, 0x7c, 0x3e,
-    0x2c, 0x5e, 0x0f, 0x36, 0x58, 0xaf, 0x1e, 0x18, 0x89, 0x2f, 0xff, 0x31,
-    0x0b, 0x3c, 0x4d, 0xf2, 0xcd, 0x2c, 0x5f, 0x49, 0x3c, 0x4b, 0x17, 0xff,
-    0xdb, 0x19, 0x98, 0x5e, 0xfb, 0x3f, 0x1f, 0xa2, 0xc5, 0xf8, 0x85, 0x0c,
-    0xe2, 0xc5, 0x61, 0xfd, 0x3a, 0x95, 0xff, 0xc6, 0x16, 0x7b, 0xc4, 0x61,
-    0x9f, 0x8e, 0x58, 0xb8, 0x50, 0x58, 0xa8, 0x8f, 0x8f, 0xa2, 0x5d, 0xfb,
-    0xf2, 0x37, 0x35, 0x62, 0xa0, 0xbb, 0x4c, 0x6a, 0x46, 0xe4, 0x6f, 0x1b,
-    0xac, 0x79, 0x7e, 0xa1, 0x0e, 0x78, 0x6b, 0x7d, 0x90, 0x04, 0x44, 0x8f,
-    0xe8, 0x4e, 0x74, 0x84, 0x1f, 0x51, 0x2d, 0xf1, 0xd9, 0x89, 0x62, 0xff,
-    0xd3, 0xad, 0x67, 0xdb, 0xdf, 0x95, 0x8b, 0xff, 0xff, 0x8e, 0x61, 0x67,
-    0xbb, 0x80, 0x5f, 0xcd, 0x66, 0x70, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f, 0x82,
-    0xfb, 0xfb, 0x8d, 0xa5, 0x8b, 0xc5, 0xc9, 0x58, 0xa8, 0xd1, 0x32, 0xbd,
-    0x88, 0x60, 0x7d, 0x8f, 0x6c, 0x6b, 0x4b, 0x17, 0xc3, 0xde, 0x4e, 0xb1,
-    0x78, 0x3e, 0x12, 0xc5, 0xf0, 0x5e, 0xcf, 0xac, 0x5f, 0xc0, 0x33, 0xd3,
-    0xdc, 0x16, 0x2a, 0x4f, 0x55, 0x89, 0x2a, 0x37, 0x46, 0x1b, 0x86, 0x7c,
-    0x90, 0x9c, 0xec, 0xcb, 0x17, 0xf6, 0xb0, 0xba, 0xd0, 0xb7, 0x58, 0xa8,
-    0x8f, 0x19, 0x84, 0x6e, 0x8d, 0xfc, 0xb1, 0x7d, 0x13, 0x85, 0x12, 0xc5,
-    0xfe, 0x93, 0xbf, 0xe7, 0x09, 0x62, 0xe6, 0xe2, 0xc5, 0x1c, 0xfb, 0xbc,
-    0x4d, 0xd0, 0xc6, 0xfe, 0xf4, 0xf4, 0x26, 0xed, 0x62, 0xfc, 0x5b, 0xb9,
-    0x62, 0xc5, 0xff, 0x13, 0x05, 0xcd, 0x63, 0x12, 0xc5, 0xff, 0x8b, 0x07,
-    0x9f, 0xf4, 0xf7, 0x05, 0x8b, 0xf6, 0xde, 0xc7, 0x1a, 0xc5, 0x68, 0xfa,
-    0x08, 0xfe, 0xff, 0xdc, 0x1e, 0x89, 0x82, 0xce, 0xfc, 0xb1, 0x7f, 0x82,
-    0x2c, 0xef, 0xd9, 0xf5, 0x8a, 0x94, 0x4b, 0xe1, 0x0b, 0xa0, 0xdf, 0xe3,
-    0x7f, 0x23, 0x79, 0xea, 0x58, 0xbf, 0xbd, 0x9d, 0xee, 0xe4, 0xb1, 0x4c,
-    0x7c, 0xde, 0x37, 0xbf, 0x7f, 0x07, 0x3b, 0x2c, 0x5f, 0xb6, 0xf1, 0xad,
-    0xa5, 0x8b, 0x4f, 0x67, 0xa8, 0xc5, 0x37, 0xe6, 0xd4, 0x18, 0xeb, 0x15,
-    0x2a, 0xf0, 0xc6, 0x45, 0x90, 0x8b, 0xec, 0xc5, 0xcc, 0x34, 0x4f, 0xf8,
-    0xcd, 0xda, 0x12, 0x64, 0xea, 0x22, 0x7b, 0x1d, 0x62, 0xff, 0x7b, 0xec,
-    0xfc, 0x7e, 0x8b, 0x16, 0x8d, 0xd6, 0x28, 0x8f, 0x32, 0x38, 0xd6, 0xd0,
-    0x58, 0xbf, 0xdc, 0x9c, 0x21, 0xfe, 0x56, 0x2f, 0xe9, 0xc2, 0x1f, 0xe5,
-    0x62, 0xed, 0x44, 0x61, 0xef, 0x70, 0xca, 0x89, 0x14, 0x02, 0x70, 0xbf,
-    0xf4, 0x36, 0x62, 0xc1, 0x94, 0xee, 0xb1, 0x77, 0xe3, 0xd6, 0x2f, 0xfc,
-    0x6b, 0x44, 0x3d, 0x61, 0x60, 0x4b, 0x17, 0xfb, 0x59, 0xb7, 0xa7, 0xb8,
-    0x2c, 0x5f, 0xff, 0xb9, 0x39, 0xb7, 0x39, 0x9a, 0x06, 0x66, 0xb8, 0xb1,
-    0x50, 0x47, 0x41, 0xa3, 0x7b, 0xa0, 0xf8, 0xda, 0xff, 0xe9, 0x87, 0xe4,
-    0x06, 0x1e, 0x73, 0xcb, 0x17, 0xb6, 0x7d, 0x2c, 0x5f, 0x6e, 0x53, 0xf5,
-    0x8b, 0xfc, 0x11, 0x98, 0x3f, 0xcf, 0x45, 0x8b, 0xff, 0x0b, 0x0d, 0xcf,
-    0x0a, 0x7b, 0x1a, 0xc5, 0x49, 0xfc, 0xb9, 0xc5, 0xfe, 0x21, 0x7b, 0x3c,
-    0x1e, 0xcb, 0x15, 0xb2, 0x62, 0x18, 0x3d, 0xa8, 0x4e, 0x78, 0x82, 0xec,
-    0x09, 0x62, 0xe2, 0xf2, 0xc5, 0xff, 0xc2, 0x87, 0xe7, 0x00, 0xc4, 0x2c,
-    0x58, 0xa9, 0x3d, 0xa0, 0x0b, 0xdf, 0xf0, 0xf2, 0x1f, 0x9e, 0x83, 0x95,
-    0x8b, 0xba, 0x6c, 0xb1, 0x7b, 0xf9, 0xba, 0xc5, 0x18, 0x7e, 0x8e, 0x77,
-    0xc1, 0xbb, 0xb5, 0xf7, 0x46, 0x23, 0x42, 0x56, 0xff, 0xc3, 0x6f, 0xcb,
-    0x3e, 0xb3, 0xb5, 0x8a, 0x73, 0xf0, 0x0c, 0xca, 0xff, 0x82, 0x0f, 0xf3,
-    0xbf, 0xde, 0x25, 0x8b, 0xff, 0xb9, 0xc7, 0x29, 0x3c, 0xfa, 0x74, 0xb1,
-    0x7c, 0x23, 0xe0, 0xd6, 0x2b, 0xb4, 0x52, 0x39, 0xf7, 0x52, 0x1d, 0xfe,
-    0x3f, 0x1f, 0x3a, 0x36, 0x96, 0x2f, 0xff, 0xfb, 0xf9, 0x0c, 0x87, 0xf0,
-    0xb0, 0xdf, 0xb4, 0x32, 0x07, 0x58, 0xbf, 0xa1, 0xc6, 0xce, 0xfc, 0xb1,
-    0x58, 0x8f, 0xd6, 0x33, 0xf1, 0xa8, 0x99, 0xaf, 0xb8, 0x1c, 0xec, 0xb1,
-    0x7e, 0xd4, 0xc3, 0x98, 0xb1, 0x7c, 0xfe, 0xce, 0x8b, 0x14, 0xb1, 0x7f,
-    0x05, 0xe2, 0x60, 0x71, 0x62, 0xfd, 0x11, 0x66, 0x69, 0x62, 0xb0, 0xf5,
-    0xd8, 0xbe, 0xa5, 0x19, 0xff, 0x28, 0x22, 0x4f, 0x31, 0xdf, 0xff, 0xe6,
-    0xd4, 0xfa, 0x60, 0x60, 0x7e, 0x2c, 0x03, 0x10, 0x16, 0x2f, 0xd3, 0xd1,
-    0x9f, 0x65, 0x8a, 0xdd, 0x11, 0x7a, 0x61, 0xbd, 0xf6, 0x82, 0xc5, 0xec,
-    0x2f, 0x2c, 0x5f, 0xa5, 0xf4, 0xfe, 0x58, 0xa8, 0x32, 0x89, 0x31, 0x7b,
-    0x78, 0x62, 0x76, 0x44, 0xf1, 0x93, 0xc4, 0x7f, 0xa8, 0xd5, 0x4e, 0x87,
-    0xf8, 0xe9, 0x8a, 0x3c, 0x3e, 0x1d, 0xfa, 0x1e, 0x82, 0x86, 0x37, 0x42,
-    0x40, 0x87, 0x7a, 0x87, 0x2f, 0xf3, 0x41, 0xfb, 0xe4, 0xf6, 0xb1, 0x7f,
-    0xee, 0x7e, 0x4f, 0xee, 0x13, 0x76, 0xb1, 0x7c, 0x42, 0xd4, 0xac, 0x57,
-    0x67, 0xc4, 0xc8, 0x17, 0x1c, 0x0b, 0x15, 0xf4, 0x68, 0xb4, 0x25, 0xf8,
-    0x45, 0x7f, 0xe2, 0xfc, 0xc7, 0xfb, 0x8e, 0x51, 0x2c, 0x5f, 0xff, 0x49,
-    0x7b, 0x52, 0xf0, 0x2c, 0x3b, 0x41, 0x62, 0xff, 0x88, 0x5c, 0x2c, 0x36,
-    0x78, 0xb1, 0x7e, 0x39, 0xf0, 0x51, 0x2c, 0x5f, 0xfe, 0x9d, 0xf8, 0x2f,
-    0x3f, 0xdc, 0xdf, 0xba, 0xc5, 0xfc, 0x79, 0xc2, 0xf4, 0x72, 0xc5, 0xf6,
-    0x9f, 0xb8, 0x2c, 0x5b, 0x8b, 0x17, 0xe9, 0xc2, 0xf4, 0x72, 0xc5, 0xee,
-    0x37, 0x66, 0x22, 0x41, 0xcc, 0x22, 0x24, 0x38, 0x95, 0x0d, 0x3d, 0xc3,
-    0x53, 0x74, 0x72, 0x72, 0xaf, 0x43, 0x72, 0xff, 0xa3, 0xf0, 0x7f, 0x98,
-    0xf2, 0x95, 0x8a, 0x95, 0x55, 0xaf, 0x28, 0x79, 0x94, 0x6f, 0xfb, 0x5b,
-    0x6f, 0xf7, 0xf8, 0xbc, 0xb1, 0x5f, 0x3f, 0x36, 0x36, 0xbe, 0xf0, 0x5c,
-    0xdd, 0x62, 0xff, 0x39, 0xba, 0xcd, 0xa7, 0x65, 0x8b, 0xf4, 0x9f, 0xa0,
-    0x20, 0xb1, 0x58, 0x88, 0x7e, 0x13, 0x78, 0xda, 0xef, 0x3a, 0xc5, 0xc2,
-    0xc5, 0x8b, 0xc0, 0x2e, 0xbd, 0x62, 0xed, 0x71, 0x62, 0xa0, 0x89, 0x73,
-    0x4b, 0xc0, 0x2f, 0xe1, 0x78, 0xe2, 0x2b, 0xf8, 0x44, 0x61, 0x60, 0xd6,
-    0x2f, 0xff, 0x85, 0xa9, 0xdc, 0x2c, 0x7f, 0xee, 0xfb, 0x75, 0x2c, 0x5e,
-    0x97, 0xdd, 0x62, 0xa0, 0x7e, 0x91, 0x2b, 0xde, 0xcf, 0x3a, 0xc5, 0xf4,
-    0xeb, 0x36, 0x58, 0xbd, 0xa9, 0xe8, 0xb1, 0x74, 0xf9, 0x62, 0xa4, 0xdb,
-    0x68, 0x7e, 0xfd, 0xbb, 0xf3, 0xee, 0xb1, 0x7f, 0x63, 0x97, 0x85, 0xf5,
-    0x8a, 0xec, 0xf5, 0xbe, 0x53, 0x7e, 0xdc, 0x9f, 0xb8, 0x2c, 0x5c, 0x1f,
-    0xd6, 0x28, 0x6a, 0x85, 0xa2, 0x85, 0x16, 0x88, 0xfe, 0x39, 0xc5, 0x9f,
-    0x3b, 0x08, 0x8e, 0x38, 0xaa, 0xf1, 0xcc, 0xc5, 0x8b, 0xf4, 0x3c, 0x6e,
-    0x69, 0x62, 0xf7, 0x5f, 0x1c, 0xeb, 0x16, 0x7d, 0x1e, 0x78, 0x8a, 0xaf,
-    0xed, 0x63, 0xfe, 0x46, 0xb1, 0x7d, 0xbf, 0xb3, 0x75, 0x8b, 0x85, 0xc5,
-    0x8a, 0xc3, 0x7b, 0xa2, 0x5b, 0xe9, 0x28, 0xb7, 0x58, 0xbf, 0xfd, 0x25,
-    0x9e, 0xfe, 0x7b, 0xf2, 0x2e, 0xbd, 0x62, 0xfd, 0x31, 0x33, 0x69, 0x62,
-    0xb4, 0x89, 0xaf, 0x92, 0x71, 0x3a, 0xf8, 0xc6, 0x20, 0x2c, 0x5d, 0x3c,
-    0x58, 0xb3, 0xe8, 0xdd, 0x11, 0x1d, 0xd9, 0xda, 0xc5, 0xe9, 0x3e, 0x2c,
-    0x57, 0xcd, 0xa7, 0x41, 0x8b, 0xff, 0xfc, 0x17, 0x57, 0xb3, 0xe6, 0x16,
-    0x6c, 0xf8, 0x5d, 0xc3, 0x8b, 0x17, 0xee, 0x67, 0x83, 0xd9, 0x62, 0x96,
-    0x2f, 0xa1, 0x3a, 0xd9, 0x62, 0xdf, 0xdc, 0xd8, 0x44, 0x19, 0x70, 0x5e,
-    0x94, 0x42, 0x62, 0xdd, 0x62, 0x63, 0x2d, 0x0e, 0xba, 0x95, 0x7b, 0xd0,
-    0x6d, 0x19, 0x3e, 0x35, 0x3c, 0x2e, 0xbe, 0xd4, 0xcb, 0x25, 0x19, 0xe5,
-    0xfe, 0xf7, 0xf0, 0x78, 0x50, 0x58, 0xbf, 0xff, 0xff, 0x99, 0xfd, 0x3f,
-    0x2c, 0xf7, 0xdf, 0xd0, 0xcf, 0xfd, 0xa1, 0xc1, 0x47, 0x67, 0xd6, 0x2f,
-    0xfb, 0x77, 0x1f, 0xb3, 0xe5, 0x2b, 0x17, 0xfe, 0x60, 0x7f, 0x1c, 0x62,
-    0xf7, 0x16, 0x29, 0xcf, 0xe0, 0x8e, 0x69, 0xd3, 0x55, 0xf9, 0x9f, 0xa3,
-    0x02, 0xbe, 0xc3, 0xe7, 0xd6, 0x2f, 0x41, 0xf1, 0x62, 0xff, 0x8b, 0xd9,
-    0xbf, 0xe4, 0x99, 0x62, 0xe1, 0xca, 0xc5, 0x49, 0xe7, 0xe1, 0xc5, 0x76,
-    0x88, 0xbe, 0x8d, 0x77, 0xe6, 0x8b, 0x81, 0xf4, 0x58, 0xbe, 0x10, 0xff,
-    0x2b, 0x15, 0x03, 0xd0, 0x22, 0xdb, 0xe8, 0x64, 0xf6, 0xb1, 0x7f, 0xd3,
-    0xb0, 0x70, 0xf8, 0x9b, 0x65, 0x8b, 0xd9, 0xd2, 0x56, 0x2f, 0xfb, 0xdf,
-    0x68, 0x19, 0xcf, 0x8d, 0x62, 0x80, 0x7b, 0x44, 0x3d, 0x7a, 0x7b, 0x82,
-    0xc5, 0x4a, 0xa7, 0x38, 0x1b, 0x64, 0x2b, 0x5d, 0xda, 0x22, 0x1d, 0x11,
-    0xb4, 0x25, 0xc8, 0x86, 0xff, 0x45, 0xc6, 0x28, 0x9c, 0xeb, 0x17, 0xfd,
-    0x03, 0x3e, 0xdb, 0xc9, 0x0d, 0x62, 0xb0, 0xfc, 0x3b, 0x35, 0xb9, 0xbe,
-    0xb1, 0x79, 0xe4, 0x96, 0x2f, 0xa0, 0xdc, 0x75, 0x8b, 0xf8, 0x9c, 0x07,
-    0x9e, 0x8b, 0x17, 0xb4, 0x03, 0xac, 0x53, 0x9e, 0x68, 0x8b, 0xee, 0x3e,
-    0x96, 0x2f, 0xf8, 0xbd, 0xfc, 0xee, 0x02, 0x89, 0x62, 0xff, 0x3f, 0x83,
-    0xd4, 0xfe, 0x56, 0x2f, 0xc4, 0xdb, 0x96, 0x2c, 0x5f, 0xd0, 0xcf, 0xfd,
-    0xa0, 0xb1, 0x52, 0x8c, 0x58, 0x1e, 0x39, 0xa7, 0x89, 0xeb, 0x13, 0xfc,
-    0xec, 0x8b, 0xe2, 0xec, 0x37, 0xc6, 0xff, 0x10, 0x8a, 0x1b, 0xb7, 0x4f,
-    0x52, 0xc5, 0xfd, 0x30, 0x21, 0x3c, 0x16, 0x29, 0xcf, 0x1f, 0x83, 0x57,
-    0xf6, 0x7b, 0x9c, 0xf3, 0xac, 0x5f, 0x16, 0x39, 0xab, 0x17, 0xcf, 0x3d,
-    0xf1, 0x62, 0xfc, 0x1f, 0x8a, 0x40, 0xb1, 0x43, 0x45, 0xe9, 0xa4, 0x27,
-    0x2e, 0xf1, 0x17, 0x42, 0x3b, 0xfe, 0x7d, 0x6e, 0x37, 0xe9, 0x23, 0x58,
-    0xbf, 0xcf, 0xaf, 0xbe, 0xcc, 0x4b, 0x14, 0x33, 0xef, 0xf9, 0xe5, 0xff,
-    0xfe, 0xfb, 0x8f, 0x1b, 0x72, 0xce, 0x98, 0x39, 0xee, 0x1c, 0x58, 0xbf,
-    0xf6, 0xa4, 0x3e, 0xf9, 0xd6, 0xb6, 0x7d, 0x62, 0xf4, 0x1f, 0x8b, 0x17,
-    0x83, 0x63, 0xac, 0x5f, 0xfc, 0x3d, 0x3f, 0x70, 0x2c, 0x36, 0x78, 0xb1,
-    0x7b, 0xd8, 0x12, 0xc5, 0x0d, 0x36, 0xad, 0xc8, 0x9d, 0x8e, 0x24, 0x6d,
-    0x0e, 0x90, 0xf7, 0x91, 0xaf, 0xfe, 0x7e, 0x60, 0xff, 0x27, 0xdb, 0x02,
-    0x58, 0xbf, 0xb3, 0xab, 0xdd, 0xc2, 0x56, 0x2f, 0xd9, 0xf6, 0xf7, 0x16,
-    0x2f, 0xfc, 0x09, 0x86, 0x77, 0xed, 0x84, 0x12, 0xc5, 0x1c, 0xfa, 0xfc,
-    0x51, 0x7f, 0x8b, 0x0e, 0x7c, 0x14, 0x4b, 0x17, 0xdd, 0x7f, 0xdf, 0x8b,
-    0x15, 0x27, 0xfd, 0xa2, 0x21, 0x1a, 0x5f, 0x41, 0xf5, 0xb2, 0xc5, 0xcd,
-    0x12, 0xc5, 0xd2, 0x7e, 0xcd, 0xe6, 0x89, 0x2f, 0x9f, 0x4d, 0xa5, 0x8b,
-    0xdc, 0x04, 0x7a, 0xc5, 0xf3, 0x8f, 0x0e, 0xb1, 0x7f, 0x7a, 0x19, 0xac,
-    0xe1, 0x87, 0x87, 0x24, 0x37, 0x85, 0x9e, 0x58, 0xbf, 0xcf, 0xf7, 0x13,
-    0x3f, 0xd6, 0x2f, 0xdf, 0x73, 0x8e, 0x56, 0x2a, 0x09, 0x90, 0x3b, 0x2e,
-    0x91, 0x3e, 0x3b, 0xe3, 0x2b, 0xdc, 0x60, 0x2c, 0x54, 0xaf, 0x05, 0x64,
-    0xa2, 0x6d, 0xd9, 0x7b, 0x46, 0x78, 0xc6, 0xfe, 0xd4, 0xd1, 0xa6, 0xf9,
-    0x2a, 0x96, 0x2f, 0xa4, 0xef, 0x05, 0x8b, 0xbf, 0x30, 0x35, 0xda, 0x0c,
-    0xbd, 0x24, 0x6a, 0xc5, 0xf8, 0x72, 0x5c, 0x35, 0x62, 0xe6, 0x82, 0xc5,
-    0xff, 0x4f, 0xfa, 0x9b, 0x61, 0x3e, 0x96, 0x2e, 0xe6, 0x2c, 0x53, 0x9e,
-    0xa3, 0x1e, 0xdf, 0xff, 0xf8, 0xf2, 0xde, 0xf4, 0x9b, 0x9e, 0xfc, 0x93,
-    0x7b, 0x8e, 0x4b, 0x17, 0xe9, 0xdc, 0x98, 0xeb, 0x17, 0xfe, 0x98, 0x19,
-    0x9f, 0x7d, 0x7d, 0x96, 0x2b, 0xe7, 0xcf, 0xc2, 0x8a, 0x94, 0x79, 0xbc,
-    0x34, 0x6f, 0x7e, 0x7e, 0xb1, 0x43, 0x54, 0x67, 0xd9, 0x63, 0x8e, 0xc7,
-    0x94, 0xc4, 0xd7, 0xf8, 0xc4, 0xfc, 0x4d, 0x70, 0xb6, 0x58, 0xbe, 0xcd,
-    0x4e, 0xeb, 0x17, 0x45, 0xc1, 0x9b, 0xcf, 0x8c, 0xdf, 0xb5, 0xe2, 0x9e,
-    0xd6, 0x2f, 0xef, 0x6a, 0x77, 0xcd, 0x2c, 0x5f, 0xff, 0xfe, 0x9f, 0xfd,
-    0xb8, 0x67, 0xd9, 0xf9, 0xfc, 0x01, 0x9a, 0xcf, 0x37, 0x6b, 0x17, 0xf7,
-    0xdc, 0x6f, 0xad, 0xd6, 0x2f, 0x9f, 0x93, 0x05, 0x8b, 0xfd, 0x9f, 0x01,
-    0xf3, 0x51, 0x2c, 0x5d, 0xdf, 0x37, 0x44, 0x33, 0x17, 0x91, 0x15, 0xf6,
-    0xbc, 0x4c, 0xb1, 0x7e, 0x06, 0xb4, 0xfa, 0x58, 0xac, 0x3c, 0xb6, 0x22,
-    0xbd, 0xe3, 0x31, 0x62, 0xa5, 0x52, 0x5e, 0x17, 0x39, 0x4e, 0x8b, 0xda,
-    0x30, 0x00, 0x42, 0x1c, 0x32, 0x0b, 0x01, 0x62, 0xf9, 0xfa, 0x4f, 0xd6,
-    0x2d, 0x8e, 0x6d, 0xbc, 0x25, 0x7f, 0x83, 0x1b, 0x36, 0xed, 0xba, 0xc5,
-    0xff, 0xee, 0x6b, 0x3a, 0x49, 0x79, 0x88, 0x58, 0xb1, 0x58, 0x88, 0x0f,
-    0x1b, 0x5c, 0x19, 0xd6, 0x2f, 0xbe, 0x2e, 0xfc, 0xb1, 0x7f, 0xda, 0xd3,
-    0x77, 0xac, 0x62, 0x58, 0xbf, 0xe9, 0xd1, 0x61, 0xce, 0x28, 0x96, 0x2d,
-    0xf9, 0x3f, 0x3c, 0x39, 0xbf, 0xbc, 0x18, 0x01, 0x3d, 0xac, 0x5f, 0xf3,
-    0xf9, 0xf0, 0xe5, 0x9b, 0x2c, 0x53, 0x9f, 0x4f, 0xcc, 0x6f, 0xee, 0x39,
-    0xa7, 0x6f, 0x2c, 0x5f, 0xfb, 0xa4, 0x9b, 0x07, 0x29, 0xd4, 0xac, 0x5f,
-    0xff, 0xfb, 0x59, 0xd2, 0x4b, 0xc6, 0x06, 0x53, 0xf6, 0x7f, 0x4f, 0xb8,
-    0xb1, 0x7f, 0xce, 0xc0, 0x33, 0x5a, 0x17, 0xd6, 0x2f, 0xf9, 0x81, 0xc7,
-    0xff, 0xf0, 0x6b, 0x15, 0xf3, 0xf4, 0xf1, 0xdd, 0xff, 0xfe, 0x9e, 0xfe,
-    0xf9, 0xee, 0x19, 0xac, 0x9e, 0xe0, 0xe7, 0x58, 0xbb, 0x78, 0xd9, 0x62,
-    0xf8, 0x9b, 0xe6, 0xac, 0x5e, 0xd8, 0x50, 0x58, 0xbc, 0x59, 0xc3, 0x0f,
-    0x80, 0x63, 0xd8, 0x47, 0x7c, 0xc0, 0x80, 0xd6, 0x2f, 0xf4, 0x9f, 0x72,
-    0x6c, 0xdd, 0x62, 0xff, 0xed, 0x0b, 0x9a, 0xc9, 0xee, 0x0e, 0x75, 0x8a,
-    0x1a, 0xbc, 0x2d, 0xe1, 0x1f, 0xd9, 0x0b, 0x97, 0xe9, 0x03, 0xd0, 0xe2,
-    0x11, 0x17, 0x48, 0x61, 0x84, 0x7e, 0x19, 0x1f, 0x51, 0xa5, 0xf1, 0x9d,
-    0x3a, 0xb6, 0x58, 0xbf, 0xdc, 0xfe, 0x75, 0x3e, 0x04, 0xb1, 0x7e, 0x00,
-    0xdd, 0xba, 0x2c, 0x5f, 0x98, 0xfb, 0xcf, 0x45, 0x8a, 0x95, 0xdf, 0xd8,
-    0x11, 0x0c, 0x67, 0x27, 0x16, 0x8d, 0x85, 0x88, 0x0a, 0xfc, 0x6e, 0x22,
-    0xab, 0x47, 0xac, 0x5e, 0xda, 0x63, 0xd6, 0x2f, 0xdc, 0x8d, 0x34, 0x2d,
-    0x96, 0x2d, 0x1e, 0xb1, 0x7b, 0x07, 0xe5, 0x8a, 0x73, 0x65, 0xa1, 0x5b,
-    0xf3, 0x44, 0xfe, 0xe2, 0xc5, 0xff, 0xfe, 0x7e, 0x37, 0xba, 0x9f, 0x66,
-    0xea, 0xcd, 0x67, 0x9a, 0x25, 0x8a, 0xd9, 0x33, 0x3c, 0x21, 0x3b, 0x17,
-    0xc8, 0x3c, 0x53, 0x7d, 0xd1, 0xa2, 0x89, 0x62, 0xfe, 0xef, 0xcc, 0xc7,
-    0xe2, 0xc5, 0x49, 0xeb, 0x39, 0x3d, 0xe2, 0xce, 0xd6, 0x2e, 0xf6, 0x2c,
-    0x5f, 0xf9, 0xfa, 0x60, 0xff, 0x9b, 0xe1, 0x2c, 0x5f, 0xf4, 0x3d, 0x21,
-    0x14, 0xfb, 0x8b, 0x17, 0xfa, 0x4a, 0x40, 0xcd, 0xd4, 0xb1, 0x7b, 0x4d,
-    0x05, 0x8b, 0xfc, 0x3f, 0xe6, 0xff, 0x9d, 0x2c, 0x50, 0xd1, 0x0d, 0xa3,
-    0x42, 0x1d, 0xbf, 0xd3, 0xbf, 0xd9, 0xc9, 0x96, 0x2f, 0xdc, 0xcf, 0x6a,
-    0x56, 0x2d, 0xe5, 0x8b, 0xff, 0x8a, 0x4e, 0xcf, 0xf6, 0xf7, 0xe5, 0x62,
-    0xbb, 0x3d, 0x4e, 0xbc, 0x4a, 0xa5, 0x50, 0xe4, 0x05, 0xfb, 0x40, 0x78,
-    0x60, 0x1c, 0xbf, 0x86, 0x42, 0x7c, 0xb9, 0xb7, 0x58, 0xbf, 0x9e, 0x26,
-    0xdf, 0x90, 0x58, 0xbf, 0xff, 0xe1, 0x8f, 0x23, 0xa7, 0x58, 0x43, 0xfc,
-    0x86, 0x00, 0x4f, 0x6b, 0x15, 0xba, 0x2c, 0xfe, 0x30, 0xc6, 0x17, 0xff,
-    0x4b, 0x96, 0x7b, 0x93, 0xf6, 0x3a, 0xc5, 0xff, 0x16, 0x73, 0x8f, 0xfc,
-    0xf2, 0xc5, 0x68, 0xfe, 0xba, 0x21, 0x5f, 0xff, 0xce, 0x43, 0xd6, 0x6f,
-    0xf9, 0xfe, 0x6b, 0x52, 0x6a, 0xc5, 0xff, 0xe9, 0x07, 0x0c, 0xf4, 0x32,
-    0x3d, 0x88, 0x0b, 0x15, 0xf4, 0x55, 0x12, 0xe5, 0xc1, 0x9d, 0x62, 0xfc,
-    0x2e, 0xa7, 0xc3, 0xac, 0x5f, 0xb3, 0xde, 0x98, 0x96, 0x2f, 0xe9, 0xef,
-    0x86, 0x79, 0xd6, 0x2f, 0xde, 0x63, 0xbf, 0x96, 0x28, 0xd4, 0x56, 0x68,
-    0xac, 0xe5, 0x24, 0x61, 0x4b, 0x17, 0xd3, 0x90, 0x65, 0x8a, 0x39, 0xad,
-    0xf8, 0x65, 0xc7, 0xf2, 0xc5, 0xfd, 0x0f, 0xe3, 0xc3, 0x8b, 0x17, 0xf3,
-    0xf8, 0x5a, 0x6e, 0x18, 0x78, 0xd8, 0x31, 0x52, 0x98, 0xa8, 0xda, 0x99,
-    0x9e, 0xff, 0xef, 0xe3, 0x44, 0x58, 0x3f, 0xcf, 0x16, 0x2f, 0xec, 0x39,
-    0x66, 0xcc, 0xb1, 0x43, 0x3f, 0x17, 0x44, 0xbf, 0xdc, 0x7e, 0x83, 0x90,
-    0x6c, 0xb1, 0x7f, 0xd9, 0xa3, 0x73, 0x5a, 0x73, 0xac, 0x56, 0x22, 0x49,
-    0x88, 0x44, 0x6f, 0x7f, 0x98, 0x80, 0x60, 0x59, 0xf5, 0x8b, 0xff, 0xb7,
-    0x62, 0x06, 0x77, 0xec, 0xce, 0x2c, 0x5b, 0x20, 0x7f, 0x44, 0x6b, 0x7e,
-    0x9f, 0x8a, 0x78, 0xb1, 0x7b, 0x80, 0x12, 0xc5, 0x76, 0x78, 0xde, 0x28,
-    0xbc, 0xe7, 0xf2, 0xc5, 0xe2, 0x0f, 0xcb, 0x17, 0xe1, 0x0d, 0x88, 0x06,
-    0x1b, 0xb6, 0x1d, 0xbf, 0xdb, 0xbe, 0x83, 0xf3, 0xc1, 0x62, 0xfe, 0x06,
-    0xa4, 0x5d, 0x7e, 0x2c, 0x5f, 0xda, 0x90, 0x9b, 0xfc, 0x58, 0xbf, 0x81,
-    0xc7, 0x89, 0xc2, 0x58, 0xa9, 0x44, 0x96, 0x19, 0xb1, 0x7d, 0xbb, 0x58,
-    0xa9, 0x4e, 0x8e, 0x0b, 0xdd, 0x9e, 0x94, 0x32, 0x38, 0x5b, 0x7e, 0xed,
-    0x87, 0xfc, 0x58, 0xbe, 0x1e, 0x1e, 0x39, 0x62, 0xfe, 0xfb, 0xf8, 0xa4,
-    0xeb, 0x17, 0xd3, 0xd0, 0xa5, 0x62, 0xf3, 0x43, 0x16, 0x2a, 0x51, 0x76,
-    0xe5, 0x31, 0x13, 0x1c, 0xb4, 0x88, 0xef, 0xff, 0xb3, 0xf8, 0x5e, 0xfe,
-    0x42, 0x7d, 0x23, 0x58, 0xa8, 0xdd, 0x9c, 0xb9, 0x31, 0xa4, 0x42, 0x14,
-    0x23, 0x20, 0xc9, 0x47, 0x3b, 0xc6, 0x3a, 0xf0, 0xaa, 0x8a, 0x19, 0xc7,
-    0x22, 0xfc, 0x7b, 0x45, 0x19, 0x97, 0x21, 0x51, 0xe9, 0x41, 0xe2, 0x8c,
-    0x28, 0x24, 0x8b, 0xfd, 0xa9, 0xe1, 0xa0, 0x68, 0x96, 0x2f, 0xfe, 0xe3,
-    0x7b, 0xf9, 0xd3, 0xec, 0x2d, 0x96, 0x2f, 0x9f, 0x82, 0x3a, 0xc5, 0xfe,
-    0x11, 0xb9, 0x09, 0x2d, 0xd6, 0x2f, 0xec, 0x8f, 0x62, 0x01, 0x90, 0x3d,
-    0x8d, 0x11, 0xdf, 0xed, 0x02, 0x2f, 0xb9, 0x0d, 0x62, 0xff, 0xf9, 0x8e,
-    0x3f, 0xcf, 0xe4, 0xe2, 0xee, 0x1c, 0x58, 0xbf, 0xfd, 0x9e, 0xfb, 0xe7,
-    0x7e, 0xce, 0x93, 0xc5, 0x8b, 0x7e, 0x51, 0xa7, 0xf3, 0x52, 0x52, 0xbf,
-    0x8a, 0x05, 0x98, 0x05, 0x8b, 0xdc, 0xf6, 0xcb, 0x15, 0x27, 0x96, 0xc5,
-    0x97, 0xc6, 0x1f, 0xa7, 0x16, 0x2f, 0xce, 0xc0, 0x33, 0xcb, 0x17, 0xfe,
-    0x2f, 0xcb, 0x8d, 0xf9, 0x90, 0x58, 0xbd, 0x83, 0x82, 0xc5, 0xee, 0x49,
-    0xd6, 0x29, 0x8f, 0xdc, 0x07, 0xbc, 0x1d, 0xb9, 0x9d, 0x62, 0xc1, 0xac,
-    0x53, 0x9a, 0x90, 0x0b, 0x5f, 0xc0, 0xe7, 0xe4, 0xbc, 0xb1, 0x52, 0x79,
-    0xcc, 0x41, 0x7e, 0xe9, 0xf7, 0x04, 0x4b, 0x17, 0xed, 0x61, 0xb3, 0xc5,
-    0x8a, 0xc3, 0xd5, 0x72, 0xcb, 0xfb, 0x91, 0x42, 0x4a, 0x0b, 0x17, 0xfe,
-    0xda, 0x77, 0xfb, 0xc5, 0x01, 0x1d, 0x62, 0xb4, 0x7e, 0x4c, 0x5f, 0x52,
-    0xba, 0x47, 0xb1, 0xb4, 0x21, 0x41, 0x91, 0x8d, 0x1a, 0xfe, 0xe4, 0x1f,
-    0x27, 0x68, 0x50, 0x14, 0x29, 0x78, 0xea, 0x28, 0x49, 0x5c, 0x52, 0xb1,
-    0x7d, 0xf9, 0xe4, 0xac, 0x5e, 0x0c, 0x78, 0xb1, 0x7b, 0xaf, 0xe4, 0x6c,
-    0xb1, 0x5b, 0x1f, 0xf0, 0xc5, 0x98, 0x8b, 0x83, 0xd7, 0xb8, 0xfc, 0x58,
-    0xbc, 0x73, 0x37, 0x58, 0xb9, 0xf4, 0xb1, 0x7f, 0xf8, 0x3e, 0xa8, 0x16,
-    0x0f, 0x02, 0xd6, 0x6c, 0xb1, 0x43, 0x3e, 0x78, 0x85, 0xe8, 0xc4, 0x55,
-    0x34, 0x21, 0xef, 0xed, 0xa2, 0x84, 0x6d, 0xad, 0x96, 0x2f, 0xd2, 0x5e,
-    0xcf, 0x2c, 0x5f, 0xbc, 0xdd, 0x82, 0x56, 0x28, 0xe7, 0xa0, 0x44, 0xf7,
-    0xb3, 0x71, 0xac, 0x5f, 0x7b, 0x08, 0x0b, 0x17, 0xbd, 0x9b, 0x2c, 0x5f,
-    0x9c, 0xb6, 0x0f, 0xb5, 0x8b, 0x98, 0x29, 0x3c, 0x91, 0x8f, 0x5f, 0xd9,
-    0xad, 0x4c, 0x8d, 0x62, 0xa3, 0x74, 0xe3, 0x26, 0x11, 0x18, 0x42, 0xe3,
-    0xc4, 0xd7, 0x1c, 0x5b, 0x7f, 0xef, 0xe0, 0xc6, 0xfd, 0xe7, 0x7e, 0x58,
-    0xbe, 0xee, 0x19, 0xe5, 0x8a, 0xd8, 0xf9, 0x46, 0x83, 0x7d, 0xb0, 0x62,
-    0xd9, 0x62, 0xfa, 0x28, 0x4e, 0xcb, 0x15, 0x27, 0x99, 0x84, 0xf7, 0xff,
-    0xf4, 0xf4, 0x72, 0x00, 0x67, 0xf4, 0x30, 0x1c, 0xc2, 0x58, 0xbd, 0xf6,
-    0x35, 0x62, 0xff, 0x16, 0xc5, 0x82, 0x9e, 0x2c, 0x52, 0xc5, 0xf0, 0x03,
-    0x28, 0x2c, 0x59, 0xe4, 0xd8, 0x78, 0x32, 0xf8, 0xb3, 0xf8, 0xb1, 0x7c,
-    0x14, 0x5c, 0x95, 0x8b, 0xd2, 0x7c, 0x58, 0xb8, 0x12, 0xb1, 0x4e, 0x6c,
-    0xc0, 0x39, 0x7c, 0x52, 0xdb, 0xac, 0x5f, 0xa4, 0xdc, 0xf7, 0x16, 0x2f,
-    0xff, 0xec, 0x27, 0x1f, 0x33, 0x9c, 0xcf, 0xbf, 0x05, 0xb2, 0xc5, 0xfc,
-    0x3d, 0x37, 0xbe, 0x25, 0x8b, 0x9b, 0xd0, 0x44, 0x57, 0x16, 0xef, 0xe7,
-    0xf8, 0x8e, 0x77, 0x58, 0xbf, 0xf8, 0x50, 0xce, 0x19, 0xe7, 0x8e, 0xcd,
-    0x96, 0x2a, 0x07, 0xf0, 0x45, 0xd7, 0xd9, 0x0c, 0x25, 0x8a, 0x73, 0xc2,
-    0x01, 0x0d, 0x4a, 0xe0, 0x4e, 0xcd, 0xf0, 0x20, 0x1a, 0xee, 0x0f, 0x1a,
-    0xc7, 0xb9, 0x2f, 0x64, 0x3a, 0x58, 0x39, 0x07, 0xc8, 0x8a, 0x16, 0x7e,
-    0x87, 0x45, 0xff, 0xf9, 0xbb, 0x87, 0x3f, 0x2f, 0xee, 0x39, 0x77, 0x05,
-    0x8b, 0xde, 0x90, 0x2c, 0x56, 0x8f, 0xd0, 0x95, 0xed, 0x19, 0x1b, 0xbf,
-    0x14, 0xf7, 0x58, 0x4d, 0xd6, 0xc6, 0x53, 0x1a, 0x30, 0x46, 0xc5, 0x5d,
-    0x76, 0x95, 0xd7, 0x0a, 0xba, 0xea, 0x51, 0x1a, 0x90, 0x66, 0x77, 0x13,
-    0x69, 0x40, 0x50, 0x8c, 0x48, 0x73, 0x89, 0x39, 0x4a, 0xbd, 0x36, 0x3d,
-    0xbd, 0xe5, 0xaa, 0x77, 0x19, 0xfb, 0xca, 0x64, 0x8a, 0x71, 0x6b, 0x53,
-    0x88, 0x27, 0x95, 0xcb, 0xf9, 0xf7, 0x76, 0x95, 0xcc, 0x09, 0x5e, 0xfd,
-    0x7c, 0x29, 0x0a, 0x7a, 0x8b, 0x94, 0xed, 0xcf, 0x4f, 0x1b, 0x8a, 0x33,
-    0x0e, 0x87, 0x81, 0x43, 0x1e, 0x3a, 0x3b, 0x40, 0xe7, 0x33, 0xfa, 0xa3,
-    0x34, 0xbf, 0xfe, 0xeb, 0x63, 0x7e, 0xb5, 0xc3, 0xfe, 0x77, 0x0c, 0xea,
-    0xe2, 0xc5, 0xc2, 0xf2, 0xc5, 0xfc, 0xfe, 0xcd, 0x7a, 0x56, 0x2e, 0xd4,
-    0xac, 0x54, 0x79, 0xee, 0x44, 0x31, 0xd4, 0x5b, 0x7e, 0xc0, 0xb3, 0xec,
-    0xb1, 0x7f, 0x3e, 0xc1, 0xed, 0x3b, 0x2c, 0x5f, 0xfe, 0xf3, 0xfc, 0x5f,
-    0x67, 0xef, 0x92, 0x6a, 0xc5, 0xff, 0xe7, 0xee, 0x1c, 0x7f, 0x7e, 0x75,
-    0xe9, 0x58, 0xbf, 0x81, 0xc9, 0x8f, 0xd4, 0xac, 0x5f, 0xd3, 0x01, 0xe9,
-    0xc2, 0x58, 0xac, 0x47, 0xbe, 0x93, 0x19, 0x2c, 0x8c, 0x6f, 0xf4, 0xe9,
-    0xa2, 0x6e, 0x41, 0x62, 0xff, 0xfc, 0x2e, 0x41, 0xca, 0x7a, 0x73, 0xa9,
-    0xb4, 0xd1, 0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x57, 0x17, 0xf3, 0x07, 0xff,
-    0xb1, 0xd6, 0x2b, 0x73, 0xd9, 0xf9, 0x55, 0xfc, 0xfa, 0xfb, 0x06, 0x75,
-    0x8b, 0xe7, 0xf4, 0x25, 0x62, 0x86, 0x9a, 0xe7, 0x66, 0x9a, 0x85, 0xa7,
-    0xc8, 0xfa, 0x17, 0xdf, 0xfc, 0xde, 0xcd, 0x8b, 0x07, 0xfc, 0x89, 0x62,
-    0xff, 0xa7, 0xb2, 0xc1, 0xff, 0x22, 0x58, 0xaf, 0x9f, 0xff, 0x52, 0x2d,
-    0xff, 0xcd, 0xec, 0xd8, 0xb0, 0x7f, 0xc8, 0x96, 0x2f, 0xfa, 0x7b, 0x2c,
-    0x1f, 0xf2, 0x25, 0x8b, 0xff, 0xd3, 0xd5, 0xc2, 0x62, 0x90, 0xf7, 0x93,
-    0x98, 0x8a, 0x4f, 0x92, 0xf5, 0x22, 0xdf, 0x0b, 0x6c, 0x09, 0x62, 0xf7,
-    0x57, 0x19, 0x62, 0xf4, 0xf7, 0x8b, 0x15, 0xf3, 0xe2, 0x22, 0x5e, 0xa2,
-    0x0b, 0xe2, 0xc8, 0xa5, 0x62, 0xff, 0xfd, 0xf6, 0x2f, 0x45, 0x9a, 0xc3,
-    0x33, 0x7c, 0xf2, 0xc5, 0xa3, 0xd6, 0x2f, 0xff, 0x4e, 0xde, 0x71, 0xe1,
-    0x41, 0xfe, 0x25, 0x8b, 0xee, 0xe2, 0x88, 0x96, 0x2b, 0x11, 0xfc, 0xe4,
-    0x47, 0x57, 0xf8, 0xab, 0x25, 0x5d, 0x27, 0x58, 0xbb, 0x83, 0x58, 0xad,
-    0x1a, 0xf6, 0x17, 0xbf, 0x30, 0x7c, 0x9c, 0x58, 0xbe, 0x7e, 0x9a, 0x95,
-    0x8b, 0xff, 0x9a, 0x21, 0x1c, 0xc9, 0xf3, 0xfe, 0x56, 0x2a, 0x07, 0xd4,
-    0x44, 0x95, 0x04, 0x59, 0xb4, 0x24, 0xaf, 0xde, 0x92, 0x90, 0x2c, 0x5f,
-    0xf8, 0xa4, 0x12, 0xc3, 0x97, 0x89, 0x62, 0xff, 0xbb, 0xf4, 0x53, 0xef,
-    0xb4, 0x4b, 0x15, 0xe3, 0xfa, 0x11, 0xed, 0xa7, 0x48, 0xc3, 0x3c, 0x28,
-    0x6f, 0xb7, 0x66, 0xdd, 0x52, 0x1e, 0x17, 0xc2, 0x86, 0x71, 0x62, 0xe8,
-    0xcc, 0xd1, 0xea, 0x11, 0x8d, 0xfb, 0xef, 0xaf, 0xb2, 0xc5, 0xe2, 0xf3,
-    0x2c, 0x5d, 0x83, 0xc3, 0xc4, 0xe1, 0x45, 0x41, 0x13, 0xe7, 0x73, 0xbf,
-    0xa7, 0x5b, 0x4e, 0xb6, 0x58, 0xbf, 0xee, 0x81, 0xfd, 0xa2, 0x06, 0x44,
-    0xb1, 0x50, 0x3e, 0xff, 0x18, 0x5f, 0xe0, 0x48, 0x18, 0x85, 0x8b, 0x17,
-    0xff, 0xf1, 0x67, 0x57, 0x0c, 0xe0, 0x3a, 0x18, 0xdc, 0x86, 0x99, 0x62,
-    0xfe, 0x6f, 0xc9, 0x48, 0x16, 0x29, 0xd1, 0x83, 0xd0, 0xca, 0x39, 0x8e,
-    0xff, 0xed, 0xa7, 0x5b, 0xe7, 0x39, 0x83, 0xc5, 0x8a, 0x94, 0xd7, 0x72,
-    0x1c, 0x6c, 0x69, 0x7e, 0x91, 0xf3, 0xaa, 0x25, 0x8b, 0xff, 0x75, 0x4f,
-    0x7c, 0x9e, 0x14, 0xf9, 0x62, 0xfd, 0x13, 0xfa, 0x40, 0xb1, 0x7e, 0x6f,
-    0x75, 0x3e, 0xc6, 0x1f, 0x5c, 0xa1, 0x5f, 0xba, 0xfc, 0x86, 0xd1, 0x2c,
-    0x59, 0xf8, 0x7e, 0x42, 0x42, 0xad, 0x93, 0x31, 0xf4, 0x61, 0x57, 0xfd,
-    0x3d, 0x1a, 0x21, 0xe6, 0x1a, 0xb1, 0x7f, 0xff, 0xda, 0x2c, 0xd8, 0xc2,
-    0xce, 0x85, 0x9d, 0x5c, 0x33, 0x80, 0xe8, 0xb1, 0x7f, 0xe2, 0xd9, 0xf5,
-    0xc1, 0x70, 0x84, 0xb1, 0x7f, 0xd9, 0xee, 0x07, 0xc3, 0x37, 0x82, 0xc5,
-    0xfc, 0x59, 0xee, 0x60, 0x4b, 0x17, 0xff, 0xfc, 0xc5, 0xb0, 0xff, 0x3c,
-    0xce, 0xf9, 0x3a, 0xf7, 0x33, 0x65, 0x8a, 0x94, 0xfb, 0x20, 0x57, 0x87,
-    0x8e, 0xe0, 0x74, 0x06, 0x3e, 0x08, 0xba, 0xff, 0x6e, 0xfc, 0xfb, 0xf9,
-    0xd6, 0x2f, 0xc3, 0x9f, 0x48, 0xd6, 0x2f, 0xf9, 0xc8, 0x1a, 0x9f, 0x37,
-    0x96, 0x2f, 0xd9, 0xb3, 0x17, 0x6b, 0x15, 0xda, 0x2f, 0x5c, 0xd3, 0xe5,
-    0x04, 0x71, 0x7f, 0xfd, 0x02, 0x9e, 0x60, 0x7a, 0xce, 0xf6, 0xc0, 0x96,
-    0x2f, 0x7b, 0xae, 0xf1, 0x62, 0xf4, 0x74, 0xf6, 0xb1, 0x7f, 0x86, 0xdc,
-    0x04, 0xf6, 0x4b, 0x17, 0xff, 0x4f, 0x6e, 0x7f, 0xb7, 0x8a, 0x4e, 0xb1,
-    0x7d, 0xec, 0x20, 0x2c, 0x57, 0x68, 0x9a, 0xd1, 0xa7, 0x91, 0x2f, 0xf7,
-    0x53, 0x0e, 0x70, 0x6e, 0xb1, 0x68, 0xc8, 0xdd, 0xb2, 0xdf, 0x98, 0x60,
-    0xec, 0x6d, 0x02, 0x81, 0xc6, 0x53, 0x91, 0xcb, 0x6f, 0x1b, 0xb3, 0xc3,
-    0x5e, 0x28, 0xcb, 0xf4, 0xec, 0x78, 0x69, 0xfe, 0x1d, 0x4d, 0x19, 0x01,
-    0x47, 0xdf, 0xc9, 0x6a, 0x1e, 0x8c, 0x7c, 0x47, 0x9d, 0x14, 0xe3, 0x89,
-    0x03, 0x85, 0xdf, 0x51, 0x8d, 0xef, 0xb1, 0xd6, 0x2f, 0xb7, 0x66, 0xdd,
-    0x52, 0x60, 0x96, 0x1a, 0xc5, 0x68, 0xf0, 0xfe, 0x63, 0x78, 0xd9, 0xd9,
-    0x62, 0xf6, 0x74, 0xc5, 0x8b, 0x1d, 0x62, 0xe7, 0xd1, 0x1b, 0x01, 0x0f,
-    0x5f, 0xff, 0x84, 0xdb, 0x1f, 0x23, 0x85, 0xac, 0xd4, 0x03, 0x82, 0xc5,
-    0x7d, 0x10, 0xe4, 0x57, 0x71, 0xbe, 0x58, 0xb8, 0x50, 0x58, 0xbf, 0x61,
-    0x67, 0xb8, 0xb1, 0x7e, 0xce, 0x09, 0xbb, 0x58, 0xbc, 0x2e, 0xc0, 0xb1,
-    0x7b, 0xc3, 0x65, 0x8b, 0xc7, 0x0c, 0xeb, 0x17, 0xf3, 0x1c, 0x3d, 0x37,
-    0x6b, 0x17, 0xff, 0xff, 0xe7, 0x86, 0xe4, 0x26, 0xd8, 0xf9, 0x1c, 0x2d,
-    0x45, 0x09, 0xef, 0x35, 0x00, 0xe0, 0xb1, 0x5a, 0x45, 0xe7, 0x8c, 0x2d,
-    0x19, 0x2a, 0xcd, 0x71, 0x80, 0xd2, 0x2d, 0xe1, 0xad, 0xa2, 0x2f, 0x8c,
-    0xb0, 0xc1, 0x13, 0xf0, 0xa4, 0x43, 0xf1, 0xc3, 0xa1, 0xc3, 0x6e, 0xff,
-    0x46, 0x66, 0xb7, 0x66, 0xdd, 0x52, 0x65, 0x17, 0xe8, 0x98, 0x72, 0x75,
-    0x8b, 0xc1, 0x05, 0xb2, 0xc5, 0xff, 0xb3, 0xd0, 0xc0, 0x47, 0x67, 0xc4,
-    0xb1, 0x78, 0xd6, 0x25, 0x8b, 0xff, 0xd8, 0xc3, 0xfe, 0x6b, 0x53, 0xd0,
-    0xd9, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49, 0xa6, 0x5f, 0x78, 0xa4, 0xeb,
-    0x17, 0xec, 0xd8, 0xb3, 0xa2, 0xc5, 0x39, 0xe6, 0x11, 0x15, 0x1a, 0x98,
-    0x34, 0x78, 0xee, 0x93, 0x3e, 0xfb, 0x60, 0x2c, 0x5e, 0x91, 0x76, 0xb1,
-    0x7d, 0x9b, 0x38, 0x4b, 0x15, 0x87, 0xa9, 0xf1, 0x22, 0x1e, 0xbe, 0xdc,
-    0x4c, 0x4b, 0x17, 0xef, 0xb7, 0x60, 0x75, 0x8b, 0xdf, 0x6e, 0x2c, 0x5f,
-    0x36, 0xbe, 0x2c, 0x3c, 0x60, 0xca, 0x6f, 0xd9, 0xbf, 0xb3, 0x75, 0x8a,
-    0x81, 0xf1, 0xe1, 0xcd, 0xfe, 0x1f, 0xda, 0x2f, 0xb9, 0xd6, 0x29, 0x61,
-    0x8d, 0xad, 0xfe, 0x93, 0xe0, 0xca, 0x7b, 0x58, 0xbf, 0x0d, 0xc1, 0x24,
-    0xb1, 0x7d, 0xc2, 0x90, 0x2c, 0x5f, 0xef, 0x48, 0xdf, 0x53, 0xd1, 0x62,
-    0xb0, 0xf5, 0xd8, 0x8a, 0xfe, 0xfb, 0x72, 0x73, 0x8b, 0x17, 0xf0, 0x9b,
-    0xef, 0x84, 0xb1, 0x7f, 0xfd, 0x0f, 0xcf, 0xb4, 0x2e, 0x7d, 0xa1, 0xb1,
-    0xd6, 0x2a, 0x57, 0x43, 0xf6, 0x29, 0x19, 0x0e, 0x46, 0x91, 0xbc, 0x25,
-    0xbb, 0x2d, 0x8a, 0x19, 0x87, 0x56, 0xf8, 0xdb, 0x19, 0x93, 0xf7, 0x08,
-    0x3c, 0x5a, 0x19, 0x65, 0xf9, 0xce, 0xde, 0x95, 0x8b, 0xff, 0xdc, 0xe3,
-    0x13, 0x16, 0x6c, 0x79, 0xdd, 0x62, 0xe3, 0xc6, 0x40, 0xfc, 0x58, 0x9e,
-    0xa3, 0x13, 0x74, 0xc8, 0xd1, 0x2f, 0xb0, 0xef, 0xe5, 0x8b, 0xa3, 0x6e,
-    0xb5, 0x62, 0xee, 0xb9, 0x1b, 0xf5, 0xa7, 0x89, 0xd7, 0x08, 0xaf, 0xdd,
-    0x64, 0x6f, 0xd7, 0x3a, 0xe7, 0x5c, 0x58, 0xbf, 0xe3, 0x03, 0xdd, 0xb4,
-    0xd0, 0xc5, 0x8b, 0xee, 0xb9, 0x1b, 0xc6, 0xf1, 0xa2, 0xc5, 0x75, 0x88,
-    0xbb, 0xeb, 0x51, 0xba, 0xec, 0xf2, 0xfb, 0xcd, 0xfc, 0x58, 0xbf, 0xd3,
-    0x17, 0x46, 0xdc, 0x40, 0x58, 0xa8, 0xd0, 0xf6, 0xba, 0xea, 0x45, 0x78,
-    0x19, 0xc5, 0x8b, 0xfd, 0xf7, 0x08, 0x6c, 0xdb, 0xac, 0x57, 0x5a, 0x7a,
-    0x51, 0xb0, 0xed, 0xed, 0x36, 0xeb, 0x17, 0xbe, 0xf1, 0x2c, 0x5f, 0x9b,
-    0xbf, 0x0a, 0x56, 0x28, 0x67, 0xca, 0xe3, 0xc4, 0x3d, 0x7e, 0x1b, 0x13,
-    0x6e, 0xb1, 0x5d, 0x69, 0xea, 0xf5, 0xd4, 0xb6, 0xfe, 0xf7, 0x27, 0x5b,
-    0x32, 0xc5, 0xf8, 0xf9, 0xf7, 0x82, 0xc5, 0x46, 0xc7, 0xaf, 0x25, 0xf7,
-    0xee, 0xbb, 0xeb, 0x79, 0x92, 0xb1, 0x7f, 0x8c, 0x89, 0xfe, 0x42, 0xf2,
-    0xc5, 0x2c, 0x5f, 0xdd, 0x75, 0x6f, 0xbf, 0x54, 0xac, 0x46, 0xc4, 0xca,
-    0xeb, 0x88, 0x8d, 0xeb, 0xaa, 0x15, 0xfe, 0x0c, 0xf9, 0xee, 0x3f, 0x16,
-    0x2c, 0xeb, 0x15, 0x1b, 0x1e, 0x34, 0x71, 0xad, 0xfd, 0xd6, 0xbe, 0xf3,
-    0xdf, 0x16, 0x2f, 0xf4, 0xed, 0xa6, 0x1e, 0xcc, 0xb1, 0x7f, 0xfc, 0xc5,
-    0xe8, 0x66, 0xb2, 0x48, 0xb3, 0xcb, 0x17, 0xfe, 0x62, 0xc3, 0x0b, 0x00,
-    0x2e, 0x2c, 0x57, 0xd1, 0x15, 0xe4, 0xca, 0x82, 0x38, 0x9e, 0x17, 0xf7,
-    0xff, 0xcd, 0xb3, 0x74, 0xe1, 0x8d, 0xd3, 0x7f, 0xbe, 0x96, 0x2f, 0xdd,
-    0x18, 0x78, 0x75, 0x8b, 0xfb, 0x8d, 0xb1, 0x4e, 0xcb, 0x17, 0xcc, 0x08,
-    0xec, 0x58, 0xbf, 0xee, 0x4f, 0xe4, 0x7f, 0x63, 0x56, 0x28, 0xc3, 0xdf,
-    0xf1, 0x2d, 0xd9, 0xd1, 0x62, 0xdc, 0x93, 0x78, 0x44, 0x77, 0xef, 0x49,
-    0x4c, 0x4b, 0x17, 0xfd, 0x0e, 0x61, 0x4f, 0x46, 0x02, 0xc5, 0x61, 0xf1,
-    0x76, 0x51, 0x7f, 0x13, 0x7e, 0x41, 0xd6, 0x2c, 0x5e, 0xea, 0x9e, 0x2c,
-    0x54, 0x9e, 0x93, 0x99, 0x5f, 0xf3, 0x8f, 0x0e, 0x61, 0xd8, 0x6b, 0x17,
-    0xe7, 0xea, 0x92, 0x75, 0x8b, 0xd3, 0xee, 0x2c, 0x54, 0x11, 0x00, 0x73,
-    0xa2, 0x29, 0xbe, 0xe7, 0x59, 0x1b, 0xf5, 0x8b, 0x17, 0x0e, 0x56, 0x2a,
-    0x4f, 0x2b, 0xa8, 0xce, 0x9d, 0x13, 0xa2, 0x79, 0xbf, 0x49, 0x6f, 0xf9,
-    0x58, 0xbf, 0xe7, 0xe4, 0xfb, 0x93, 0xf9, 0x58, 0xbf, 0x64, 0x76, 0x6a,
-    0x56, 0x2f, 0xc7, 0x9e, 0xf8, 0x64, 0x9f, 0x10, 0x67, 0x17, 0xff, 0x67,
-    0xbe, 0xe7, 0xcf, 0x70, 0x3e, 0x2c, 0x5f, 0xfb, 0x18, 0x13, 0x0d, 0x4e,
-    0x12, 0xc5, 0x4a, 0x30, 0xf7, 0x41, 0x74, 0x6b, 0xe7, 0xe9, 0xfe, 0x8b,
-    0x17, 0xdc, 0x92, 0x89, 0x62, 0xfa, 0x7a, 0xa2, 0xc5, 0x8b, 0xe7, 0x92,
-    0xf2, 0xc5, 0x31, 0xf5, 0x11, 0x1f, 0x09, 0xaf, 0xff, 0x0e, 0x4d, 0x32,
-    0x5f, 0x53, 0xe9, 0xfa, 0xc5, 0xfb, 0x76, 0x29, 0x0d, 0x62, 0xb0, 0xfd,
-    0x3e, 0x97, 0x7f, 0xf4, 0x41, 0xce, 0xc6, 0x4f, 0xf3, 0x58, 0xb1, 0x58,
-    0x7d, 0x2c, 0x43, 0x7f, 0xba, 0x9c, 0x06, 0x37, 0xc4, 0xb1, 0x50, 0x5f,
-    0x3b, 0x19, 0x3e, 0x2b, 0xf6, 0x54, 0xf0, 0xca, 0x8a, 0x10, 0xe7, 0x74,
-    0xfc, 0x67, 0xa0, 0x22, 0x28, 0xd3, 0x78, 0x5f, 0xe8, 0x48, 0xf4, 0x8c,
-    0x2b, 0xa8, 0x82, 0xf8, 0x27, 0x32, 0x39, 0x62, 0xff, 0xdc, 0x97, 0xd3,
-    0x7f, 0x79, 0x3a, 0xc5, 0xff, 0xec, 0x32, 0x7a, 0x36, 0xb9, 0x3a, 0x7e,
-    0x2c, 0x5d, 0xdc, 0x4b, 0x17, 0xfc, 0x58, 0x32, 0x9d, 0xe7, 0x4b, 0x17,
-    0xff, 0xfd, 0xc8, 0xc7, 0x89, 0xfe, 0x53, 0xa6, 0x03, 0x38, 0xe4, 0x96,
-    0x2b, 0x13, 0x6c, 0x72, 0x88, 0x8f, 0xce, 0x98, 0xc3, 0x40, 0x38, 0xbf,
-    0xc7, 0x0c, 0xe0, 0x3b, 0x81, 0x62, 0xfc, 0x66, 0xb4, 0x2f, 0xac, 0x5f,
-    0x1b, 0x25, 0xba, 0xc5, 0x9d, 0x62, 0x9c, 0xda, 0xe8, 0x92, 0xb8, 0x88,
-    0x0f, 0x30, 0x5f, 0x8f, 0x3e, 0x91, 0xac, 0x5f, 0xa6, 0x26, 0x6d, 0x2c,
-    0x5b, 0xd2, 0x7a, 0x1c, 0x28, 0xa9, 0x4d, 0x43, 0x21, 0x6c, 0xee, 0x77,
-    0x9f, 0x36, 0x58, 0xbf, 0xfd, 0xbf, 0xdf, 0xef, 0xa9, 0x88, 0x2c, 0xfa,
-    0xc5, 0x7c, 0xfa, 0x88, 0x76, 0xfc, 0xdd, 0xc3, 0x3c, 0xb1, 0x78, 0x05,
-    0x8b, 0x17, 0x16, 0x2c, 0x51, 0x86, 0xc8, 0x03, 0x97, 0x8f, 0x3a, 0x58,
-    0xbf, 0xe7, 0x33, 0xed, 0xa9, 0xe9, 0x2b, 0x17, 0xbc, 0x52, 0xb1, 0x52,
-    0x7e, 0x9c, 0x1d, 0x0c, 0xee, 0xff, 0x8e, 0xd0, 0x8e, 0x17, 0xdf, 0x4b,
-    0x15, 0xb2, 0x60, 0x5a, 0x84, 0xb1, 0xcb, 0xef, 0xcd, 0xcf, 0x48, 0xd6,
-    0x2a, 0x4f, 0x7c, 0x46, 0xf7, 0xf9, 0x82, 0x0c, 0x63, 0xc0, 0x96, 0x2f,
-    0xfa, 0x76, 0x3b, 0x6a, 0x2e, 0x8e, 0xb1, 0x7f, 0x9b, 0x50, 0x6f, 0x36,
-    0xeb, 0x17, 0xff, 0xb3, 0x0b, 0x00, 0x59, 0xef, 0xe4, 0x16, 0x2a, 0x55,
-    0x76, 0xe8, 0x87, 0xf1, 0xde, 0x31, 0x09, 0x1b, 0x88, 0xf7, 0xa8, 0xd2,
-    0xf1, 0xb3, 0x05, 0x8b, 0xb7, 0xfa, 0xc5, 0xfb, 0xa1, 0x67, 0x0c, 0xc3,
-    0x6f, 0xe1, 0xeb, 0xff, 0x13, 0x1a, 0x58, 0x0d, 0xb0, 0x25, 0x8b, 0xff,
-    0x73, 0xee, 0x64, 0xb8, 0xf0, 0xeb, 0x14, 0x73, 0xff, 0xf2, 0x05, 0xff,
-    0xe2, 0xc3, 0x7e, 0xd0, 0xf8, 0x4c, 0x19, 0xd6, 0x2a, 0x4f, 0xbf, 0x08,
-    0xa9, 0xd3, 0x4d, 0xfc, 0x65, 0xb7, 0xf4, 0x97, 0x86, 0x52, 0xb1, 0x7d,
-    0x0e, 0x1e, 0x0b, 0x17, 0xfd, 0x24, 0xfb, 0xb7, 0x98, 0xd5, 0x8b, 0xed,
-    0x00, 0x12, 0xb1, 0x7d, 0x3e, 0xd4, 0xac, 0x5b, 0x58, 0x78, 0xae, 0x47,
-    0x52, 0x8c, 0x83, 0x49, 0x1d, 0xfa, 0xfa, 0x43, 0x9f, 0xac, 0x5c, 0xfb,
-    0x2c, 0x5e, 0x66, 0xdd, 0x52, 0x6e, 0x17, 0x45, 0xc5, 0x8b, 0x9e, 0x25,
-    0x8b, 0xe6, 0xf3, 0x44, 0xb1, 0x77, 0xb9, 0xc3, 0x77, 0xd0, 0x62, 0xb6,
-    0x46, 0x2e, 0xe3, 0x0e, 0x54, 0x1a, 0xa5, 0xff, 0xb7, 0x33, 0x83, 0xfe,
-    0x6f, 0x9a, 0x58, 0xbf, 0x7a, 0x22, 0x91, 0xac, 0x54, 0x9f, 0x63, 0xa1,
-    0xdf, 0xf6, 0xbe, 0xd9, 0xad, 0x9f, 0x65, 0x8b, 0xef, 0x73, 0x3e, 0xb1,
-    0x4e, 0x7b, 0xcc, 0x77, 0x7d, 0x14, 0x8f, 0x16, 0x2f, 0xe0, 0x1f, 0x38,
-    0x22, 0x58, 0xb8, 0xc2, 0x58, 0xbf, 0xb8, 0xf9, 0xd1, 0xb4, 0xb1, 0x7f,
-    0x72, 0x75, 0xac, 0x09, 0x62, 0xa0, 0x7e, 0xc7, 0x18, 0xf1, 0x7d, 0x3a,
-    0x34, 0xda, 0x14, 0x97, 0xf1, 0x19, 0xfc, 0xec, 0x25, 0x8b, 0xfd, 0x87,
-    0xee, 0x13, 0x9e, 0x58, 0xbb, 0x35, 0x87, 0xca, 0x03, 0x1b, 0xf1, 0x01,
-    0xbb, 0xe2, 0xc5, 0xfd, 0x9d, 0x1f, 0xe7, 0x65, 0x8a, 0x94, 0x42, 0x31,
-    0x61, 0x14, 0xde, 0x98, 0x9d, 0x62, 0xe7, 0x35, 0x62, 0xd2, 0x46, 0xd6,
-    0x38, 0x76, 0xff, 0x7f, 0x01, 0xd3, 0x07, 0xba, 0xc5, 0x41, 0x79, 0x0c,
-    0x65, 0x26, 0xc3, 0xd3, 0xb2, 0xfd, 0x43, 0xa0, 0xf0, 0xab, 0xfb, 0xf3,
-    0x10, 0x14, 0x3d, 0xb9, 0x18, 0x7f, 0x98, 0xba, 0x8a, 0x2f, 0xf8, 0x64,
-    0xdd, 0x3f, 0x31, 0x71, 0x62, 0xfd, 0x1b, 0xe3, 0x6b, 0xb5, 0x8a, 0x63,
-    0xea, 0x8e, 0x3c, 0xbb, 0x90, 0x58, 0xbf, 0xdb, 0x98, 0xdf, 0x26, 0x02,
-    0xc5, 0x2c, 0x5e, 0x9d, 0xc9, 0x62, 0xbc, 0x6a, 0x7a, 0x06, 0x5f, 0x13,
-    0x6f, 0x8b, 0x17, 0xe0, 0x44, 0x52, 0x75, 0x8a, 0x63, 0xcb, 0x22, 0x2b,
-    0xf0, 0x22, 0xd8, 0x51, 0x2c, 0x51, 0xa9, 0xaa, 0xee, 0x48, 0xe3, 0x07,
-    0x5e, 0x66, 0xe2, 0x20, 0xbe, 0x9f, 0x8b, 0x4b, 0x17, 0xf7, 0x0c, 0xde,
-    0x7b, 0xe2, 0xc5, 0xc4, 0xeb, 0x14, 0x69, 0xf5, 0xf6, 0x46, 0x73, 0x2b,
-    0x12, 0xc5, 0xff, 0x7c, 0x4d, 0xcc, 0xc2, 0x35, 0x62, 0xff, 0xfd, 0x3b,
-    0x99, 0x9f, 0x7d, 0x4f, 0xf0, 0x87, 0x2b, 0x14, 0xb1, 0x78, 0xf9, 0xe5,
-    0x8b, 0xe7, 0x92, 0xf4, 0x9a, 0x90, 0x06, 0x5f, 0xff, 0xf7, 0xa4, 0xef,
-    0xe7, 0xdf, 0x34, 0x1e, 0xb5, 0x3e, 0x6f, 0x2c, 0x58, 0x6b, 0x17, 0xb8,
-    0xdd, 0xe1, 0xfd, 0x33, 0x45, 0x9c, 0x69, 0xcc, 0x1c, 0xe7, 0xef, 0xde,
-    0x85, 0x7d, 0xfd, 0xa3, 0x3d, 0x1d, 0x9f, 0x58, 0xbf, 0xcd, 0x18, 0x59,
-    0xb4, 0x9a, 0xb1, 0x7b, 0x3a, 0x9d, 0x62, 0xa5, 0x55, 0x5e, 0x18, 0xfe,
-    0x3a, 0x96, 0x48, 0x23, 0x3e, 0x86, 0xf7, 0xfd, 0x2c, 0x5f, 0xcc, 0x2d,
-    0xd6, 0x2e, 0x87, 0x5a, 0xb1, 0x7f, 0x8b, 0x62, 0x6d, 0x34, 0x16, 0x2a,
-    0x4f, 0x40, 0x43, 0xb7, 0xff, 0xd3, 0xef, 0xb1, 0xcc, 0xde, 0x5c, 0xa7,
-    0xa2, 0xc5, 0x41, 0x1f, 0x5c, 0x84, 0x3f, 0x51, 0x0d, 0xfe, 0x21, 0x1e,
-    0x79, 0xe7, 0x58, 0xbf, 0xce, 0x52, 0x79, 0xef, 0x8b, 0x17, 0xe9, 0xd6,
-    0xb3, 0xa9, 0x62, 0xa5, 0x12, 0x31, 0x19, 0x91, 0x9d, 0xf0, 0xcc, 0x0c,
-    0xeb, 0x17, 0xf0, 0xcb, 0x3a, 0x34, 0x16, 0x29, 0xcf, 0x54, 0x44, 0xd7,
-    0xff, 0xef, 0xc4, 0x61, 0xc5, 0xe7, 0xdb, 0x3c, 0x6e, 0x7d, 0x62, 0xfe,
-    0x29, 0x8a, 0x2c, 0x02, 0xc5, 0xed, 0xb9, 0xc5, 0x8b, 0xff, 0xb6, 0xf3,
-    0x8f, 0x0a, 0x0f, 0xf1, 0x2c, 0x5a, 0x25, 0x8a, 0x93, 0xd8, 0xdd, 0x16,
-    0xff, 0x3f, 0x4c, 0xfb, 0x16, 0xcb, 0x17, 0x61, 0xd6, 0x2a, 0x07, 0x99,
-    0xc3, 0x5b, 0x04, 0xb1, 0x7a, 0x73, 0x4b, 0x17, 0xfb, 0xf3, 0x07, 0x8e,
-    0xc3, 0xac, 0x54, 0x0f, 0x94, 0x62, 0x7c, 0x1c, 0xbf, 0x19, 0xdf, 0x1c,
-    0xd5, 0x8a, 0xd8, 0xf6, 0xfb, 0x2f, 0xae, 0xd3, 0x06, 0x68, 0x71, 0x5f,
-    0xfb, 0x3e, 0xfa, 0x1f, 0xe4, 0xb7, 0x58, 0xbe, 0x1e, 0x70, 0x4b, 0x17,
-    0xfe, 0x2c, 0xf7, 0x24, 0xcf, 0x66, 0xeb, 0x17, 0xe8, 0xc6, 0xf3, 0x6e,
-    0xb1, 0x7c, 0x67, 0xb0, 0x0b, 0x17, 0xff, 0x60, 0x1f, 0x51, 0x9f, 0xce,
-    0x92, 0x4b, 0x15, 0x04, 0xce, 0xb0, 0xfd, 0xc8, 0xce, 0x81, 0xf2, 0xcf,
-    0x12, 0x5f, 0xee, 0xe1, 0x25, 0xec, 0x02, 0xc5, 0xf7, 0x00, 0xfe, 0x58,
-    0xa8, 0x2e, 0x53, 0x6e, 0x42, 0xeb, 0x71, 0x17, 0xfd, 0xdd, 0xa3, 0x74,
-    0xe4, 0x6c, 0x62, 0x56, 0x0c, 0xd2, 0xfc, 0xda, 0xf6, 0x7d, 0x62, 0xfe,
-    0x3f, 0x8a, 0x4f, 0xc5, 0x8b, 0xec, 0xe1, 0x4a, 0xc5, 0xff, 0x9c, 0x13,
-    0x01, 0xfe, 0x4b, 0x75, 0x8a, 0x82, 0x2d, 0xb0, 0xa3, 0xe5, 0xde, 0x21,
-    0xbf, 0xf6, 0x1c, 0xc8, 0xec, 0x3b, 0x93, 0x2c, 0x5e, 0x21, 0x6e, 0xb1,
-    0x7e, 0x86, 0x6b, 0x38, 0xb1, 0x5b, 0x22, 0x1c, 0xe8, 0x3e, 0x1e, 0xa5,
-    0x8b, 0xc2, 0x6f, 0x2c, 0x5c, 0x29, 0x58, 0xa8, 0x1b, 0x4f, 0x0e, 0xd2,
-    0xc5, 0xf7, 0x7b, 0xbe, 0x96, 0x2d, 0x19, 0x88, 0x92, 0xed, 0x00, 0xe4,
-    0x3e, 0x0c, 0xbf, 0xf6, 0x17, 0x7e, 0xcc, 0xc2, 0xd9, 0x62, 0x8e, 0x88,
-    0x4f, 0x23, 0x5f, 0x60, 0xc8, 0x6b, 0x15, 0x27, 0x8b, 0xd0, 0x8e, 0xf7,
-    0x7a, 0xc5, 0x8b, 0xf7, 0x38, 0xc5, 0xba, 0xc5, 0x49, 0xe3, 0xe0, 0xf5,
-    0xff, 0x17, 0xbe, 0xd0, 0x13, 0x06, 0xb1, 0x52, 0xac, 0x4f, 0x21, 0x86,
-    0xf1, 0xc6, 0x69, 0xa9, 0x88, 0x2c, 0x4b, 0x17, 0xb5, 0xd5, 0x2b, 0x17,
-    0x78, 0xce, 0xb8, 0x6c, 0x62, 0x11, 0xbc, 0xcf, 0xb2, 0xc5, 0x61, 0xe9,
-    0x1a, 0x6b, 0x7e, 0xea, 0x7e, 0x8d, 0xa5, 0x8b, 0x88, 0x6b, 0x16, 0x75,
-    0x8b, 0x47, 0x2c, 0x50, 0x0d, 0x37, 0x84, 0x6a, 0x51, 0x16, 0x32, 0xd2,
-    0x3d, 0xbc, 0x64, 0x69, 0x1a, 0x2c, 0x5f, 0xd9, 0xad, 0xd9, 0xb7, 0x54,
-    0x90, 0xe5, 0x86, 0xb1, 0x7f, 0xda, 0xcf, 0x19, 0x0d, 0xb8, 0xeb, 0x17,
-    0x48, 0x6b, 0x15, 0x18, 0x8a, 0x2d, 0x8f, 0x30, 0x48, 0x8f, 0x2f, 0xd1,
-    0x3e, 0xb6, 0x65, 0x8b, 0xfc, 0x03, 0x21, 0x9e, 0xd3, 0xac, 0x54, 0x11,
-    0x3c, 0x33, 0xf2, 0x2a, 0xbf, 0x40, 0xce, 0x87, 0x95, 0x8b, 0x41, 0x62,
-    0xfe, 0x17, 0x8a, 0x7d, 0xc5, 0x8a, 0x73, 0xc0, 0x00, 0x95, 0x4a, 0xb0,
-    0x07, 0x85, 0x6c, 0x45, 0xcd, 0x1b, 0x49, 0x17, 0x89, 0xb2, 0xf6, 0x8d,
-    0xdd, 0x62, 0xec, 0x3a, 0xc5, 0xef, 0x67, 0x52, 0xc5, 0xa7, 0x73, 0x6f,
-    0xe1, 0x7a, 0x81, 0xff, 0x01, 0x5e, 0xfe, 0x2c, 0xf7, 0x30, 0x6b, 0x17,
-    0xd3, 0x1e, 0x29, 0x58, 0xbd, 0x16, 0x0d, 0x62, 0xf4, 0x53, 0xe5, 0x8a,
-    0x93, 0x78, 0x21, 0xea, 0xd2, 0x34, 0x0e, 0x44, 0x02, 0xde, 0x30, 0xdc,
-    0x20, 0xd6, 0x2f, 0x9e, 0x29, 0x3a, 0xc5, 0xe6, 0x8e, 0x35, 0x62, 0xfd,
-    0xc6, 0xfe, 0x6e, 0xb1, 0x5d, 0xa2, 0x1b, 0xe3, 0x20, 0x23, 0xe1, 0x0d,
-    0xfa, 0x27, 0xef, 0xab, 0x16, 0x2c, 0x75, 0x8a, 0x30, 0xdf, 0xc9, 0x6d,
-    0xfb, 0x08, 0x7f, 0x95, 0x8a, 0x19, 0xe4, 0x04, 0x43, 0x7b, 0x34, 0xcb,
-    0x17, 0xff, 0xfd, 0xe7, 0x2f, 0x0b, 0xe6, 0x78, 0x19, 0xd5, 0xf6, 0x88,
-    0xce, 0xa5, 0x8b, 0xfe, 0xc9, 0x1f, 0xe7, 0xaa, 0x62, 0x58, 0xbf, 0xc0,
-    0x7f, 0xff, 0x00, 0xcb, 0x15, 0xba, 0x3f, 0x1c, 0x70, 0xee, 0x20, 0x3c,
-    0xbf, 0x6c, 0x67, 0x9f, 0x8b, 0x17, 0xfe, 0xcf, 0x73, 0xf9, 0xad, 0x60,
-    0x4b, 0x17, 0xfe, 0x2e, 0xa6, 0x26, 0x38, 0xf0, 0x6b, 0x15, 0x2a, 0xe3,
-    0xf2, 0x18, 0x6f, 0x0c, 0x56, 0x8c, 0x7c, 0x8f, 0x43, 0x2b, 0xea, 0x40,
-    0xbf, 0xfe, 0x1b, 0xf4, 0x33, 0x9e, 0x6e, 0xf8, 0x71, 0x41, 0x62, 0xe9,
-    0x82, 0xc5, 0xfe, 0x73, 0x8e, 0x4c, 0xf3, 0xac, 0x54, 0x79, 0xe5, 0xfc,
-    0x5e, 0xff, 0xfd, 0xfc, 0xd3, 0x44, 0xff, 0x19, 0x48, 0x87, 0x8b, 0x17,
-    0xfc, 0x20, 0x30, 0xff, 0x25, 0xd1, 0x62, 0xff, 0xcc, 0x39, 0x1f, 0xdc,
-    0x9c, 0xeb, 0x17, 0xfe, 0x83, 0x70, 0xc7, 0xee, 0x0d, 0xc5, 0x8b, 0xfe,
-    0x60, 0x19, 0x9e, 0x7d, 0x62, 0xc5, 0xff, 0x36, 0xb8, 0xdf, 0xe4, 0xec,
-    0xb1, 0x5d, 0xa2, 0xd0, 0x90, 0x7a, 0x1c, 0xdf, 0x47, 0xfe, 0x4e, 0xb1,
-    0x7e, 0x9e, 0x37, 0x60, 0x58, 0xbf, 0x68, 0xd3, 0xe0, 0xd6, 0x2f, 0xbf,
-    0xd4, 0xfb, 0x2c, 0x5f, 0x61, 0xfa, 0xe4, 0x6a, 0x58, 0xa9, 0x46, 0x7e,
-    0xe4, 0xcc, 0x52, 0x02, 0xaf, 0x13, 0xdf, 0xc2, 0xdf, 0x3c, 0x52, 0xb1,
-    0x7f, 0xfa, 0x79, 0xf9, 0x2f, 0x19, 0x16, 0xff, 0x89, 0x62, 0xb8, 0x7f,
-    0xbd, 0x0b, 0xab, 0x17, 0x0c, 0x9e, 0x14, 0x31, 0x12, 0xe9, 0x54, 0xe7,
-    0x7f, 0x87, 0x89, 0x46, 0x03, 0xe8, 0x63, 0x5f, 0xc5, 0xe3, 0x38, 0x22,
-    0x58, 0xbf, 0x34, 0x21, 0x9c, 0x58, 0xbf, 0xba, 0x64, 0x8c, 0x5b, 0x2c,
-    0x5f, 0x9b, 0xc3, 0x78, 0x96, 0x2e, 0xef, 0x86, 0x1e, 0xd0, 0x66, 0x37,
-    0xbd, 0x9b, 0xac, 0x5d, 0x9b, 0xac, 0x5b, 0x0c, 0x36, 0xde, 0x1e, 0xbf,
-    0xef, 0xb6, 0xbb, 0xf4, 0xbe, 0xcb, 0x17, 0xe9, 0x72, 0x9e, 0x8b, 0x17,
-    0xb7, 0xfc, 0x4b, 0x17, 0x8b, 0x73, 0x37, 0x3c, 0x88, 0x8a, 0x2a, 0x08,
-    0xba, 0x68, 0x41, 0xd3, 0xaa, 0x20, 0x39, 0x7b, 0x42, 0x08, 0x99, 0xc5,
-    0x0e, 0x1b, 0xfd, 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xa5, 0xb4, 0x05,
-    0x8b, 0xf3, 0xfc, 0x85, 0xe5, 0x8b, 0xf9, 0xf9, 0x83, 0x6d, 0xd6, 0x2f,
-    0x84, 0x47, 0x75, 0x8a, 0xdc, 0xf4, 0x3e, 0x5d, 0x7e, 0xc2, 0x7f, 0x89,
-    0x62, 0xff, 0xcc, 0x03, 0xb9, 0x99, 0xf7, 0x09, 0x62, 0xbe, 0x7c, 0xe4,
-    0x4f, 0x43, 0x4d, 0x16, 0x22, 0x2f, 0xbc, 0x7a, 0x11, 0x57, 0xd3, 0xf6,
-    0xf2, 0xc5, 0xff, 0xd0, 0xc2, 0x71, 0x99, 0xdc, 0x33, 0xcb, 0x15, 0xb1,
-    0xf4, 0x78, 0x8a, 0xfc, 0xdc, 0xe9, 0x9c, 0x58, 0xbf, 0x37, 0x8c, 0x99,
-    0x58, 0xa9, 0x55, 0x39, 0x91, 0xbd, 0xb4, 0x2b, 0x00, 0x46, 0x22, 0xab,
-    0xee, 0x84, 0xfb, 0xac, 0x5f, 0x8c, 0xfe, 0x01, 0x96, 0x2f, 0xf6, 0xa7,
-    0xec, 0x38, 0x1d, 0x62, 0xff, 0x3f, 0x49, 0xdf, 0x4d, 0xd1, 0x62, 0xff,
-    0x3e, 0xc6, 0x69, 0x86, 0xeb, 0x17, 0xf9, 0xfd, 0x1d, 0x84, 0xc6, 0xac,
-    0x56, 0xc8, 0xa3, 0x88, 0xe0, 0xe6, 0xb7, 0xdb, 0x0b, 0x50, 0x58, 0xbd,
-    0xb6, 0x04, 0xb1, 0x46, 0x1e, 0x24, 0x92, 0xde, 0xcc, 0xe2, 0xc5, 0xfd,
-    0x06, 0xd6, 0x77, 0xe5, 0x8b, 0xf8, 0x6c, 0x7f, 0xb8, 0x4b, 0x17, 0xff,
-    0x9f, 0x78, 0xdb, 0x7f, 0xbf, 0xde, 0x4b, 0xcb, 0x15, 0x28, 0xae, 0xc2,
-    0xf2, 0x2f, 0xbf, 0xec, 0xf7, 0x03, 0xe6, 0x9b, 0x8b, 0x17, 0xfd, 0x3f,
-    0x73, 0x5f, 0x66, 0x3a, 0xc5, 0xdb, 0x6c, 0xb1, 0x7c, 0x61, 0xb8, 0x35,
-    0x8b, 0xc0, 0xf3, 0xac, 0x50, 0xcf, 0x70, 0x03, 0x44, 0x4b, 0x7e, 0x7f,
-    0x71, 0x9d, 0x62, 0xfd, 0x3a, 0x07, 0xdd, 0x62, 0xff, 0x36, 0x8d, 0x9d,
-    0xf0, 0xeb, 0x16, 0xc8, 0x1e, 0xe8, 0x45, 0x17, 0xff, 0xdf, 0x7e, 0x0b,
-    0x6d, 0xfe, 0xfe, 0xf6, 0x6c, 0xb1, 0x7e, 0x8b, 0x0d, 0x7d, 0x2c, 0x56,
-    0x1f, 0xf3, 0xaa, 0x5f, 0xe0, 0x69, 0x8b, 0xd8, 0x05, 0x8b, 0xff, 0x9b,
-    0xd0, 0x63, 0x22, 0x84, 0xeb, 0x65, 0x8a, 0xd1, 0xfd, 0x80, 0xce, 0xfe,
-    0x93, 0x22, 0xdf, 0xf1, 0x2c, 0x54, 0xae, 0xe6, 0xec, 0x4a, 0x32, 0x9c,
-    0x86, 0xbb, 0xbb, 0x44, 0x45, 0xa8, 0x65, 0x1c, 0xb7, 0xe7, 0x6d, 0x09,
-    0x60, 0x17, 0x14, 0x21, 0x39, 0x0a, 0x61, 0x42, 0x6f, 0xa8, 0x8a, 0xf0,
-    0x7a, 0x82, 0xc5, 0xff, 0x14, 0xf4, 0x89, 0xfd, 0xf9, 0x58, 0xbf, 0x83,
-    0xf0, 0xa7, 0x36, 0x58, 0xbf, 0x81, 0xf6, 0x7f, 0x89, 0x62, 0xf7, 0x0a,
-    0x0b, 0x15, 0x04, 0x6a, 0xb8, 0xfc, 0x47, 0x7a, 0x30, 0xf1, 0x75, 0xfb,
-    0x3a, 0x66, 0xa0, 0xb1, 0x4b, 0x17, 0xdb, 0x94, 0xf8, 0x8d, 0xb4, 0x71,
-    0x55, 0xf9, 0xb9, 0xcd, 0xb8, 0xb1, 0x7f, 0x31, 0x00, 0x30, 0x71, 0x62,
-    0xfd, 0xe2, 0x60, 0x71, 0x62, 0xf7, 0x0e, 0xcb, 0x17, 0xf8, 0x8d, 0x0f,
-    0xff, 0x17, 0x16, 0x28, 0xd4, 0x55, 0xf6, 0x5f, 0x11, 0x40, 0x87, 0x6f,
-    0xfe, 0x17, 0x3e, 0xd0, 0x92, 0x1e, 0x7d, 0x62, 0xfe, 0xf6, 0x85, 0xd5,
-    0x84, 0xb1, 0x7f, 0xc1, 0xc8, 0x22, 0x84, 0xeb, 0x65, 0x8b, 0xf8, 0x9b,
-    0xc1, 0xce, 0xeb, 0x14, 0x73, 0xec, 0x23, 0xdb, 0xe2, 0x06, 0xc0, 0x58,
-    0xbf, 0xff, 0xd1, 0x71, 0xc6, 0x64, 0x4e, 0x5d, 0x1a, 0x26, 0xf0, 0xa5,
-    0x62, 0xa5, 0x34, 0x8c, 0x84, 0xeb, 0x90, 0xb1, 0x25, 0xff, 0xe2, 0xf4,
-    0x83, 0xec, 0x5d, 0x33, 0xbe, 0x2c, 0x5e, 0xd3, 0x69, 0x62, 0x9c, 0xfa,
-    0x62, 0x4c, 0xbf, 0xe0, 0xca, 0x19, 0xd0, 0xb3, 0x8b, 0x17, 0xfc, 0x7e,
-    0x19, 0x83, 0x92, 0xf2, 0xc5, 0xfa, 0x06, 0x73, 0x98, 0xb1, 0x7f, 0xb8,
-    0x67, 0x8c, 0x1e, 0x12, 0xc5, 0x80, 0xb1, 0x5d, 0x9e, 0x46, 0x8d, 0xaa,
-    0x51, 0x9f, 0x87, 0x4e, 0xe5, 0x7f, 0x0b, 0x7f, 0xce, 0xb1, 0x62, 0xfb,
-    0xbe, 0x79, 0xd6, 0x2b, 0x0f, 0x4d, 0x8b, 0xef, 0xf3, 0x6d, 0x3b, 0xb6,
-    0xb6, 0x58, 0xa9, 0x5e, 0x05, 0xc8, 0x40, 0x1a, 0x74, 0xf0, 0xd5, 0xd2,
-    0x07, 0xe3, 0x8c, 0x68, 0x54, 0x00, 0x88, 0xa3, 0x0a, 0xe4, 0x20, 0x04,
-    0x41, 0x7f, 0xf4, 0x33, 0xaa, 0x19, 0xe9, 0xf7, 0x31, 0x62, 0xff, 0xff,
-    0xe6, 0x7f, 0x49, 0x6e, 0xe7, 0x3b, 0xf3, 0x99, 0xf7, 0xe0, 0xb6, 0x58,
-    0xb1, 0x9d, 0xa2, 0xe7, 0xe8, 0xf7, 0xbc, 0xde, 0x58, 0xbe, 0x11, 0xb2,
-    0x1a, 0xc5, 0x49, 0xe1, 0x30, 0xed, 0xf6, 0x6a, 0x78, 0xb1, 0x7b, 0x7e,
-    0xb7, 0x4b, 0x15, 0x1b, 0x1e, 0x30, 0x88, 0xab, 0x11, 0xf5, 0x13, 0x69,
-    0x33, 0x5f, 0x46, 0xf1, 0xbc, 0x6f, 0xd6, 0x2c, 0x5f, 0x45, 0x01, 0x1a,
-    0xb1, 0x7f, 0x67, 0x9c, 0x78, 0x75, 0x8b, 0xe2, 0x83, 0x9d, 0x62, 0xc6,
-    0x44, 0x79, 0xec, 0x5b, 0x7f, 0xbb, 0xe4, 0xea, 0x62, 0x95, 0x8b, 0xee,
-    0x8d, 0x17, 0x5d, 0x56, 0x2c, 0xff, 0x3e, 0x32, 0x35, 0xbc, 0x29, 0x02,
-    0xc5, 0xfd, 0x31, 0x77, 0x0c, 0xe8, 0xb1, 0x7f, 0xe9, 0x29, 0xe1, 0x81,
-    0x37, 0x7c, 0x58, 0xa8, 0x91, 0x6d, 0xa2, 0x6e, 0x0e, 0xf8, 0xca, 0xee,
-    0xb2, 0x34, 0x58, 0xbc, 0x3c, 0x3a, 0xc5, 0xf9, 0x9b, 0xb8, 0x71, 0x62,
-    0xf7, 0x57, 0x98, 0xc3, 0xc6, 0xd0, 0xed, 0x46, 0xea, 0xb3, 0x24, 0xe0,
-    0x6e, 0xad, 0x1a, 0x17, 0x8f, 0x83, 0x68, 0xbb, 0x80, 0x58, 0xbf, 0x71,
-    0x8e, 0x3e, 0x2c, 0x5f, 0x70, 0xe2, 0xd9, 0x62, 0xff, 0xf8, 0xde, 0xf9,
-    0x30, 0x31, 0xbe, 0xfc, 0x98, 0x2c, 0x54, 0x11, 0x43, 0xd9, 0x4e, 0x89,
-    0x68, 0xc4, 0x75, 0x34, 0x2e, 0x69, 0x62, 0x96, 0x2d, 0xc0, 0x17, 0x1c,
-    0x0c, 0xbf, 0xfe, 0xfc, 0x87, 0x19, 0xe2, 0x60, 0x73, 0x92, 0x04, 0x8b,
-    0x8d, 0xc5, 0x8a, 0x19, 0xf6, 0x1a, 0xa9, 0x70, 0xf1, 0x62, 0x96, 0x2f,
-    0xa7, 0x66, 0xe2, 0xc5, 0x46, 0xa3, 0x5f, 0xb0, 0x65, 0x18, 0x99, 0x1e,
-    0x42, 0x49, 0xc8, 0xd9, 0x1a, 0xfe, 0xea, 0x60, 0x1e, 0x78, 0xb1, 0x7e,
-    0xe6, 0x74, 0xfb, 0xac, 0x5d, 0x20, 0x58, 0xa5, 0x80, 0xcb, 0x7a, 0xf1,
-    0xee, 0x89, 0x06, 0xfa, 0x42, 0x6f, 0x2c, 0x57, 0xd1, 0xa6, 0x08, 0x47,
-    0x04, 0x45, 0x7f, 0xcd, 0xdb, 0x7b, 0x8c, 0x40, 0x58, 0xbf, 0x8b, 0xc6,
-    0x10, 0x00, 0xb1, 0x5b, 0x1f, 0x40, 0x8e, 0x6f, 0xff, 0xe2, 0x6f, 0x7a,
-    0x4c, 0xd4, 0xfd, 0xce, 0xe5, 0x05, 0x8b, 0xdd, 0x33, 0x8b, 0x15, 0xf3,
-    0xf9, 0xe2, 0xd5, 0xff, 0xb9, 0xd1, 0xa2, 0xd9, 0x89, 0xa2, 0x58, 0xbf,
-    0xf4, 0xf5, 0x44, 0xdd, 0x1b, 0xdd, 0x25, 0x62, 0xff, 0xd8, 0x39, 0x84,
-    0xe8, 0xfe, 0xed, 0x62, 0xfe, 0x60, 0x44, 0x52, 0x35, 0x8b, 0xfe, 0x2c,
-    0xd8, 0x7f, 0xc2, 0xf2, 0xc5, 0xef, 0x3f, 0x16, 0x2f, 0xfb, 0xa3, 0x70,
-    0x6c, 0x53, 0xf5, 0x8b, 0xfb, 0x53, 0xd2, 0x4b, 0xcb, 0x17, 0xff, 0x64,
-    0x30, 0x8c, 0xfc, 0xc4, 0x21, 0xac, 0x56, 0x22, 0xbd, 0xce, 0x80, 0x5f,
-    0x7f, 0xb6, 0x30, 0x65, 0x2d, 0xb2, 0xc5, 0x4a, 0xbb, 0xcd, 0xa1, 0x3d,
-    0x90, 0x9c, 0x88, 0x8b, 0x48, 0x67, 0x46, 0xfa, 0x01, 0x17, 0x70, 0xe7,
-    0xd0, 0xcc, 0x11, 0x75, 0xf1, 0x82, 0x33, 0xa2, 0xc5, 0x46, 0xef, 0xbb,
-    0x2f, 0xd6, 0x43, 0xff, 0xad, 0x84, 0xdc, 0x69, 0x08, 0x18, 0xda, 0x1c,
-    0xdd, 0x77, 0x08, 0x6e, 0xb8, 0x4d, 0xd7, 0x58, 0x60, 0xc6, 0xa7, 0x78,
-    0xd6, 0x55, 0x34, 0x85, 0x2d, 0xa5, 0x29, 0xc2, 0x3a, 0x61, 0xcb, 0x8a,
-    0xca, 0x41, 0x99, 0xb2, 0xa1, 0x37, 0x96, 0xdb, 0xdc, 0x6a, 0xef, 0x0c,
-    0x98, 0xa7, 0x4a, 0xb5, 0x38, 0xae, 0x79, 0x7a, 0xdf, 0x9d, 0x3e, 0x69,
-    0xca, 0x70, 0x4a, 0xa7, 0x29, 0x5d, 0xfc, 0x9e, 0x21, 0xf4, 0xfe, 0x38,
-    0xa5, 0x35, 0x74, 0x95, 0xf6, 0x14, 0x69, 0xb1, 0xd1, 0xb1, 0x87, 0x39,
-    0xa1, 0xd5, 0x0a, 0x8b, 0xfe, 0xfb, 0x3c, 0x27, 0xdc, 0xc5, 0x8b, 0xe9,
-    0x83, 0x74, 0x58, 0xbf, 0xbd, 0xdf, 0x1c, 0x86, 0xb1, 0x7f, 0xf6, 0xb3,
-    0xbd, 0xfe, 0xfe, 0xe3, 0x76, 0xb1, 0x7e, 0x9e, 0x68, 0x40, 0x58, 0xbf,
-    0xff, 0x67, 0xb8, 0x1f, 0x0b, 0x3c, 0x20, 0x1d, 0xa0, 0xb1, 0x7f, 0x9b,
-    0x5c, 0xcc, 0x23, 0x56, 0x28, 0xe8, 0x8a, 0xf2, 0xbd, 0xf6, 0x0d, 0xa0,
-    0xb1, 0x78, 0x32, 0x82, 0xc5, 0x39, 0xe0, 0x00, 0x8a, 0xed, 0xe3, 0x25,
-    0x50, 0x56, 0xc7, 0x0e, 0x48, 0x02, 0xf2, 0x48, 0xe4, 0x2c, 0xfc, 0xc7,
-    0x51, 0x8b, 0xab, 0x42, 0x9c, 0xe1, 0xbe, 0xfc, 0x9f, 0x16, 0x2f, 0xe8,
-    0xe0, 0xfb, 0x07, 0x25, 0x62, 0xe9, 0x0d, 0x62, 0xb7, 0x3e, 0xe7, 0x22,
-    0x39, 0xa5, 0xf4, 0xea, 0x07, 0x58, 0xb0, 0xd6, 0x2f, 0xf3, 0x49, 0x4c,
-    0x42, 0x95, 0x8a, 0xc3, 0xc4, 0x88, 0x4a, 0xf7, 0xde, 0x3d, 0x62, 0xff,
-    0xa1, 0x9e, 0x32, 0x4d, 0xd4, 0xac, 0x5f, 0x47, 0x66, 0xa5, 0x62, 0xf7,
-    0x1a, 0x3d, 0x62, 0xde, 0x58, 0xac, 0x3d, 0x7e, 0xc9, 0x63, 0x88, 0x2f,
-    0xfe, 0x8b, 0xf9, 0xdc, 0x3a, 0x49, 0x44, 0x35, 0x8b, 0xe1, 0x8b, 0xdc,
-    0x58, 0xa5, 0x8a, 0xc3, 0x60, 0x11, 0x25, 0xff, 0xf8, 0xb2, 0x1f, 0x9d,
-    0x66, 0x11, 0xba, 0xd4, 0xac, 0x5f, 0xe6, 0xfb, 0x06, 0x7c, 0xe2, 0xc5,
-    0xe6, 0xd1, 0xab, 0x17, 0xa4, 0x71, 0xba, 0xc5, 0xa3, 0x25, 0x57, 0xfe,
-    0xc5, 0xf8, 0xcf, 0xb9, 0x17, 0x64, 0x0f, 0x09, 0x26, 0x32, 0x27, 0xae,
-    0x10, 0xf4, 0x54, 0x08, 0xd0, 0x31, 0xeb, 0xfd, 0x19, 0x9a, 0xdd, 0x9b,
-    0x75, 0x49, 0xe6, 0x54, 0xc3, 0xc3, 0x32, 0x10, 0x8f, 0x1c, 0xb0, 0xfc,
-    0xbe, 0x35, 0x7e, 0xeb, 0x5a, 0x5d, 0x4e, 0x59, 0x9e, 0x17, 0x9f, 0x9e,
-    0xc8, 0x2b, 0xe3, 0x61, 0xe4, 0xb9, 0xee, 0x90, 0xb7, 0xbf, 0xd1, 0x99,
-    0xad, 0xd9, 0xb7, 0x54, 0x92, 0xc5, 0xd1, 0xbc, 0x6a, 0x58, 0xa5, 0x8b,
-    0xcd, 0xc7, 0x58, 0xb7, 0xb6, 0x35, 0x1a, 0x0c, 0xb3, 0xac, 0x5f, 0xff,
-    0x42, 0x7a, 0x4c, 0x46, 0x71, 0xf4, 0x53, 0x12, 0xc5, 0xe7, 0x8c, 0xe6,
-    0x1f, 0x2b, 0x88, 0xdf, 0xff, 0xbf, 0x85, 0x86, 0xfd, 0xa1, 0xf0, 0x98,
-    0x33, 0xac, 0x5f, 0x8b, 0x38, 0x47, 0x58, 0xbe, 0xdd, 0x9b, 0x75, 0x49,
-    0x84, 0x54, 0x11, 0x61, 0xba, 0xc6, 0x89, 0xef, 0xdf, 0x71, 0xb4, 0x16,
-    0x2f, 0xbd, 0x23, 0xc5, 0x8b, 0xff, 0xec, 0x21, 0xcf, 0xe7, 0xbf, 0x61,
-    0x31, 0xd6, 0x2f, 0x10, 0xb7, 0x58, 0xa9, 0x3e, 0xc6, 0x4e, 0xbf, 0xfd,
-    0x83, 0x29, 0xdc, 0xcf, 0xce, 0xc4, 0x25, 0x8b, 0xfe, 0x6e, 0xf8, 0x60,
-    0xe7, 0x3b, 0x58, 0xbf, 0xff, 0xbd, 0x8f, 0xae, 0x78, 0x9c, 0x1c, 0x9f,
-    0x71, 0xd6, 0x2f, 0x67, 0x9d, 0x62, 0x96, 0x2d, 0x8b, 0x15, 0x28, 0x93,
-    0x3a, 0xd7, 0x07, 0x23, 0x83, 0x2f, 0xe1, 0x69, 0xf6, 0x63, 0xac, 0x5a,
-    0x32, 0x35, 0x2e, 0x26, 0x4a, 0x58, 0xe1, 0x1b, 0x90, 0xe4, 0xdc, 0xc5,
-    0xca, 0x0f, 0x08, 0xef, 0x90, 0x01, 0x33, 0x90, 0xcf, 0x8e, 0x3f, 0xbf,
-    0xd1, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x99, 0x65, 0xff, 0xba, 0xe4, 0x69,
-    0x90, 0xfe, 0x3c, 0x38, 0xb1, 0x74, 0x1d, 0x62, 0xff, 0xd1, 0xbf, 0x5d,
-    0xfd, 0x9f, 0xd0, 0xce, 0x2c, 0x52, 0xc5, 0x99, 0x62, 0xa4, 0xbd, 0x34,
-    0x32, 0xff, 0xf7, 0xdf, 0x5f, 0xc9, 0xf1, 0x66, 0xa5, 0x62, 0xd0, 0x58,
-    0xa5, 0x8b, 0x1a, 0xb1, 0x5b, 0x17, 0xec, 0x19, 0x63, 0x56, 0x2c, 0x6a,
-    0xc5, 0x49, 0xa6, 0xd0, 0x9d, 0xf4, 0x61, 0xb1, 0xab, 0xac, 0x58, 0xa4,
-    0x8b, 0xd1, 0x81, 0x9d, 0x62, 0xb7, 0x3e, 0x1e, 0x19, 0x88, 0x32, 0xc3,
-    0x58, 0xbd, 0xa6, 0x1a, 0xc5, 0x49, 0xaf, 0xc1, 0x2a, 0x1a, 0x7b, 0xd8,
-    0x40, 0x6a, 0x43, 0x98, 0x92, 0x37, 0x21, 0x03, 0xe5, 0xfb, 0xa7, 0xeb,
-    0x16, 0x02, 0xc5, 0xc6, 0xec, 0xb1, 0x6d, 0x40, 0xd6, 0x60, 0x95, 0xbc,
-    0xb1, 0x5b, 0x9f, 0xdb, 0x21, 0xf8, 0x9a, 0xe8, 0x41, 0x62, 0x96, 0x29,
-    0x61, 0x89, 0x97, 0x40, 0xd5, 0x8b, 0xd0, 0x29, 0x58, 0xa0, 0x1e, 0x77,
-    0x06, 0x7c, 0x33, 0x6f, 0xac, 0x52, 0xc5, 0x40, 0xbe, 0x34, 0x4a, 0xc0,
-    0x58, 0xb1, 0xab, 0x15, 0x29, 0x82, 0xbb, 0x90, 0x13, 0x48, 0x87, 0xc2,
-    0x57, 0xff, 0xe1, 0xbf, 0xbf, 0x83, 0x7c, 0x1b, 0x6c, 0xc4, 0xb1, 0x7f,
-    0xf1, 0x16, 0x1b, 0x84, 0x06, 0x7d, 0x96, 0x2f, 0xf9, 0xbb, 0x2c, 0xef,
-    0xd2, 0x6a, 0xc5, 0xfe, 0xdb, 0xbe, 0x48, 0xfc, 0xeb, 0x17, 0xe9, 0xce,
-    0x93, 0xc5, 0x8b, 0xff, 0xbe, 0xdb, 0x73, 0x7f, 0xbf, 0x49, 0xe2, 0xc5,
-    0xce, 0x12, 0xc0, 0xcf, 0x26, 0xd2, 0xc8, 0xd1, 0x08, 0xdb, 0xa9, 0xca,
-    0xfe, 0x23, 0x40, 0xde, 0xe2, 0xc5, 0xda, 0x82, 0xc5, 0x49, 0xe3, 0xb1,
-    0x7d, 0x4a, 0xa4, 0x2c, 0x54, 0x64, 0x32, 0x8c, 0x30, 0x4f, 0xf7, 0xff,
-    0xdf, 0xc7, 0x87, 0x3f, 0x9d, 0x4f, 0xe7, 0x82, 0xc5, 0xf3, 0x42, 0x03,
-    0x58, 0xbf, 0xfc, 0x46, 0xb4, 0x21, 0x3b, 0x37, 0xb3, 0x65, 0x8b, 0xfd,
-    0xc1, 0xb3, 0x1b, 0x9b, 0x2c, 0x5f, 0xfb, 0x59, 0x84, 0x6f, 0x1f, 0xbf,
-    0x2c, 0x54, 0x9f, 0xab, 0x9a, 0xdf, 0xfc, 0xfc, 0xe6, 0x42, 0x12, 0x18,
-    0xb6, 0x58, 0xbf, 0x1b, 0x90, 0xf1, 0xab, 0x15, 0xb1, 0xf9, 0x3a, 0x3d,
-    0xff, 0xff, 0xe9, 0xdf, 0xdf, 0xc3, 0x8a, 0x0c, 0x3c, 0xef, 0xdb, 0xfd,
-    0xc7, 0xfc, 0x58, 0xbb, 0xde, 0x58, 0xbf, 0x8a, 0x45, 0xbf, 0xd9, 0x62,
-    0xef, 0xb6, 0xc7, 0x8c, 0x31, 0x8b, 0xa4, 0xeb, 0x15, 0xa3, 0xc5, 0x22,
-    0xeb, 0xf6, 0xa7, 0xcd, 0xf5, 0x8a, 0x73, 0xc9, 0x62, 0x1b, 0xc1, 0x04,
-    0x12, 0x45, 0xfe, 0x87, 0x7e, 0xd4, 0xe7, 0x69, 0x11, 0x86, 0x86, 0xff,
-    0x80, 0x7c, 0xef, 0x98, 0x46, 0xac, 0x5f, 0xfd, 0xe1, 0x1b, 0x9d, 0xf8,
-    0x79, 0x86, 0xac, 0x54, 0xa3, 0x31, 0xd2, 0x44, 0x77, 0x7f, 0xdb, 0x64,
-    0x3f, 0x8f, 0x0e, 0x2c, 0x5f, 0xe6, 0xef, 0x3c, 0xfd, 0x84, 0xb1, 0x52,
-    0x7e, 0x02, 0x3a, 0xba, 0x78, 0xb1, 0x50, 0x5d, 0x1c, 0x1a, 0x96, 0x11,
-    0x9b, 0x0c, 0x1d, 0x42, 0x48, 0xe4, 0x5f, 0x8d, 0x3c, 0xa3, 0x0d, 0xe4,
-    0x27, 0xba, 0x10, 0xdb, 0xac, 0x58, 0xb7, 0x45, 0x8a, 0x8d, 0x46, 0xae,
-    0x02, 0xf7, 0x8d, 0xec, 0xd5, 0x8b, 0xc0, 0xe0, 0x96, 0x2c, 0xd2, 0x6f,
-    0xf8, 0x43, 0x69, 0x58, 0xbf, 0xf0, 0xbd, 0x09, 0x34, 0x5f, 0x93, 0xac,
-    0x5f, 0xf6, 0xb4, 0x2d, 0x80, 0xde, 0xe2, 0xc5, 0x9f, 0x74, 0x47, 0x10,
-    0x88, 0x68, 0x34, 0xe8, 0xe9, 0xfc, 0x2c, 0xef, 0x36, 0xb7, 0x58, 0xbd,
-    0xfc, 0x3a, 0xc5, 0xa7, 0x63, 0x77, 0xe1, 0xeb, 0xfe, 0x67, 0xfe, 0x73,
-    0xb7, 0xfa, 0xc5, 0xe9, 0xce, 0xf4, 0x7c, 0x04, 0x4f, 0x7f, 0x8b, 0xde,
-    0x29, 0xce, 0xd6, 0x2d, 0xed, 0x1f, 0x28, 0x8c, 0xae, 0x39, 0xab, 0x17,
-    0xfe, 0x86, 0x77, 0x0f, 0x14, 0x9f, 0x8b, 0x17, 0xfe, 0x83, 0x71, 0x88,
-    0x5b, 0xe7, 0x12, 0x2f, 0xff, 0x67, 0xf3, 0x7f, 0xb6, 0x6e, 0x42, 0xe2,
-    0xc5, 0x3a, 0x22, 0x88, 0xfe, 0xff, 0xfe, 0xfb, 0xfb, 0xf9, 0xc2, 0xc3,
-    0x8b, 0x9f, 0x68, 0x2c, 0x5f, 0xe9, 0x87, 0x9b, 0xec, 0x35, 0x8b, 0xfb,
-    0xd2, 0x32, 0x80, 0x96, 0x2d, 0xc5, 0x8b, 0x9b, 0xd2, 0x78, 0x06, 0x97,
-    0x54, 0xa6, 0x39, 0x84, 0x3a, 0x5b, 0x67, 0x3b, 0x7d, 0x62, 0xee, 0x09,
-    0x62, 0xb4, 0x6a, 0xb8, 0x25, 0x7f, 0xf6, 0x6b, 0x3d, 0xf1, 0x6f, 0x84,
-    0x05, 0x8b, 0xb9, 0x2b, 0x17, 0x8a, 0x62, 0x93, 0xdc, 0x89, 0x16, 0xf6,
-    0xed, 0xa5, 0x8b, 0xff, 0xff, 0xfd, 0xf1, 0x31, 0xbc, 0x16, 0xc7, 0x16,
-    0x9a, 0x05, 0x9d, 0x81, 0xbd, 0xc7, 0x2e, 0xe0, 0xb1, 0x7c, 0x50, 0xc2,
-    0x58, 0xbf, 0xbd, 0x27, 0x9d, 0x44, 0xb1, 0x7f, 0xec, 0x1c, 0xeb, 0x72,
-    0xce, 0x98, 0xb1, 0x7e, 0x6f, 0x73, 0x0b, 0xb3, 0xef, 0xe1, 0x7d, 0xe7,
-    0xf4, 0x8d, 0x36, 0x1c, 0x84, 0x99, 0x42, 0x42, 0xb1, 0x3f, 0xb7, 0x33,
-    0x68, 0xdf, 0xed, 0x05, 0x8b, 0xf4, 0x27, 0x66, 0xf2, 0xc5, 0xa0, 0xb1,
-    0x68, 0x2c, 0x5e, 0x08, 0x20, 0x96, 0x2d, 0xba, 0x44, 0x61, 0xa1, 0xbf,
-    0x00, 0x7f, 0x6d, 0x96, 0x2a, 0x51, 0xa1, 0x01, 0x23, 0x4a, 0x5c, 0x48,
-    0x06, 0x64, 0x4d, 0x6d, 0x2c, 0x59, 0x96, 0x2f, 0xd2, 0x43, 0xc3, 0x56,
-    0x2c, 0x12, 0xc5, 0xff, 0xff, 0xf3, 0x16, 0xfb, 0xfd, 0xe2, 0x26, 0x08,
-    0x3f, 0x61, 0xb3, 0xc1, 0xb3, 0x1a, 0xb1, 0x58, 0x8e, 0x08, 0xf1, 0x23,
-    0x88, 0x91, 0x40, 0x84, 0xef, 0x17, 0x72, 0xb1, 0x69, 0x58, 0xa5, 0x8b,
-    0xf0, 0xb9, 0xf6, 0x82, 0xc6, 0x13, 0x2f, 0xff, 0xb8, 0xfb, 0xe1, 0x6a,
-    0x4b, 0x07, 0x86, 0xac, 0x5f, 0xfc, 0xda, 0xdb, 0x35, 0xee, 0x3f, 0x61,
-    0x2c, 0x51, 0xd1, 0x9b, 0xe3, 0x60, 0x93, 0xef, 0xff, 0xb0, 0x7f, 0x67,
-    0x84, 0x33, 0xcc, 0x40, 0x58, 0xbf, 0xce, 0x71, 0x73, 0xed, 0x05, 0x8d,
-    0x1e, 0x75, 0xff, 0x7d, 0x8e, 0x59, 0xe9, 0x09, 0x62, 0xfb, 0x3a, 0x7d,
-    0xd6, 0x29, 0xcf, 0x77, 0x87, 0x34, 0x34, 0x61, 0xfa, 0x14, 0x57, 0xa1,
-    0xdc, 0xac, 0x5d, 0xf6, 0x58, 0xb7, 0x6b, 0x16, 0x35, 0x62, 0xc2, 0x58,
-    0xa2, 0x34, 0xbc, 0x13, 0xa1, 0xaa, 0xe1, 0xc8, 0x75, 0x34, 0x68, 0x40,
-    0x28, 0x21, 0xee, 0x0b, 0xf8, 0xe2, 0xee, 0x09, 0x62, 0xec, 0x35, 0x62,
-    0xed, 0x8d, 0x58, 0xbf, 0xa4, 0xb0, 0x78, 0x6a, 0xc5, 0xff, 0xbf, 0x87,
-    0xf9, 0x67, 0x46, 0xdd, 0x62, 0xff, 0xde, 0xc3, 0x67, 0x83, 0x66, 0x35,
-    0x62, 0xd1, 0xf2, 0x8f, 0x81, 0x8c, 0x38, 0xc6, 0x86, 0xbc, 0x5a, 0x1a,
-    0x0d, 0xdc, 0x35, 0x62, 0xd8, 0xb1, 0x60, 0x49, 0xaa, 0x18, 0xcd, 0x32,
-    0x2b, 0xc5, 0x08, 0x9b, 0x4a, 0xc5, 0xfd, 0x23, 0xfc, 0xfb, 0x8b, 0x14,
-    0xe6, 0xfc, 0x84, 0x6f, 0xcf, 0x08, 0x4f, 0x45, 0x8b, 0xff, 0xfa, 0x73,
-    0x8e, 0x31, 0xe7, 0xa1, 0x9a, 0xdf, 0x3e, 0xb1, 0x7f, 0xff, 0xfa, 0x46,
-    0xe3, 0xfc, 0xc3, 0x4c, 0xdd, 0xc3, 0x9e, 0xef, 0x77, 0xd1, 0xab, 0x15,
-    0xf4, 0xc0, 0x78, 0x55, 0xe5, 0xba, 0x58, 0xb7, 0x6b, 0x03, 0x26, 0x5b,
-    0x65, 0x8b, 0xf8, 0xa4, 0xe5, 0x38, 0xb1, 0x7f, 0xfd, 0x2e, 0x5e, 0xd4,
-    0xc1, 0xfe, 0xfa, 0x82, 0xc5, 0xff, 0xe9, 0x87, 0x03, 0x21, 0x72, 0x70,
-    0xbc, 0xb1, 0x7f, 0xf4, 0xb6, 0xbd, 0xfc, 0x18, 0xbd, 0xc5, 0x8b, 0xff,
-    0xcf, 0x26, 0x9b, 0x3f, 0x97, 0x1f, 0xdd, 0x62, 0xfd, 0x9f, 0xf3, 0x9a,
-    0xb1, 0x6e, 0x8b, 0x17, 0xff, 0xfb, 0x0f, 0xee, 0x67, 0x4f, 0xbe, 0xa4,
-    0xb0, 0x78, 0x6a, 0xc5, 0x61, 0xfb, 0x7c, 0x52, 0xd2, 0xb1, 0x7f, 0x7d,
-    0xf4, 0x3c, 0x3a, 0xc5, 0xfc, 0xde, 0x98, 0x36, 0x96, 0x2c, 0x0c, 0x3d,
-    0xb2, 0x2e, 0xa8, 0x22, 0x4b, 0x4d, 0x96, 0x35, 0x62, 0xf7, 0x06, 0x6a,
-    0xc5, 0x6c, 0xb9, 0xe0, 0x36, 0x6c, 0x8c, 0x83, 0xb3, 0xd8, 0xf2, 0x18,
-    0x84, 0xf4, 0x56, 0x74, 0xef, 0xa5, 0x12, 0x2f, 0x12, 0xbd, 0x09, 0xf1,
-    0x42, 0xcc, 0x22, 0x30, 0xc4, 0xef, 0xff, 0xb0, 0x9c, 0x61, 0x90, 0xb9,
-    0x38, 0x5e, 0x58, 0xbf, 0xf0, 0x79, 0xf6, 0x1f, 0x9f, 0x8e, 0xb1, 0x7f,
-    0xfb, 0x3b, 0xf0, 0x7e, 0x7f, 0x7f, 0x06, 0xeb, 0x17, 0xff, 0xff, 0x7b,
-    0x8f, 0xce, 0x4f, 0xbe, 0xf3, 0xa0, 0x1d, 0xa1, 0x0f, 0x1a, 0xb1, 0x78,
-    0xfc, 0x12, 0xc5, 0xff, 0xbb, 0x0c, 0x85, 0xc9, 0xc2, 0xf2, 0xc5, 0x4a,
-    0x34, 0x9d, 0xd0, 0x43, 0xd7, 0x1f, 0x8b, 0x17, 0xfb, 0x52, 0x59, 0xb1,
-    0xe5, 0x62, 0xa4, 0xf2, 0xf0, 0x62, 0xfe, 0xe9, 0xf7, 0x1e, 0x1a, 0xb1,
-    0x7f, 0xd0, 0xd4, 0xe1, 0x67, 0x7e, 0x58, 0xac, 0x3e, 0xa6, 0x31, 0xa8,
-    0x2a, 0xce, 0xc4, 0xe3, 0x4f, 0xff, 0x18, 0xf1, 0x3c, 0xf2, 0x11, 0x57,
-    0xff, 0x68, 0xd8, 0x39, 0xf0, 0x7f, 0x90, 0x2c, 0x5c, 0xfd, 0xac, 0x5f,
-    0x7c, 0x9e, 0x56, 0x2e, 0x87, 0xd6, 0x29, 0x8d, 0xc8, 0x08, 0x6e, 0x93,
-    0xac, 0x5f, 0xff, 0x10, 0xa1, 0x09, 0xf7, 0xf0, 0xe1, 0xc8, 0x16, 0x2f,
-    0xf6, 0x11, 0x0a, 0x1c, 0x12, 0xc5, 0x4a, 0x21, 0x3e, 0xa3, 0x7d, 0xbc,
-    0xe1, 0x2c, 0x5f, 0xbd, 0xf7, 0xd4, 0x16, 0x2f, 0xe9, 0x2d, 0x9f, 0x5f,
-    0x93, 0xcb, 0x62, 0x2b, 0xfc, 0x6c, 0xf0, 0x6c, 0xc6, 0xac, 0x5f, 0xcf,
-    0x3e, 0xe0, 0xb8, 0xb1, 0x61, 0xac, 0x52, 0xc5, 0x39, 0x7c, 0x21, 0x2b,
-    0xcf, 0xb4, 0xfc, 0xfa, 0xf8, 0x99, 0x7d, 0x9e, 0xfb, 0xac, 0x5f, 0xfa,
-    0x19, 0xcd, 0x4b, 0xc1, 0xb8, 0x91, 0x5b, 0x9f, 0x00, 0x88, 0xaf, 0xff,
-    0xf1, 0x67, 0x41, 0xcf, 0xdf, 0xf8, 0x43, 0xd3, 0xf7, 0x05, 0x8a, 0xd2,
-    0x63, 0x05, 0x09, 0x3e, 0x11, 0xd6, 0x27, 0xda, 0xf1, 0xdc, 0x54, 0x15,
-    0x62, 0x13, 0x6f, 0xa5, 0x17, 0xdd, 0xbc, 0x64, 0x6e, 0xea, 0x7b, 0x23,
-    0x44, 0xa8, 0xd4, 0x2f, 0x32, 0x91, 0xb6, 0x87, 0x1c, 0x23, 0x34, 0x1c,
-    0xa8, 0xac, 0x9d, 0x6a, 0x36, 0x1a, 0xbb, 0xc6, 0x9f, 0xdc, 0x64, 0xee,
-    0x51, 0x10, 0xce, 0xa3, 0xe6, 0x3b, 0x2f, 0xe5, 0x3c, 0x34, 0x60, 0x80,
-    0x8c, 0xd7, 0xaf, 0x4b, 0x29, 0x5f, 0xdc, 0x9f, 0x05, 0xf4, 0xbb, 0x31,
-    0x31, 0xf4, 0x46, 0x09, 0x46, 0x38, 0x80, 0x39, 0x6b, 0xf7, 0xff, 0xa3,
-    0x0e, 0xd0, 0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0x8c, 0x2f, 0xef, 0xb7,
-    0x59, 0xf6, 0xeb, 0x16, 0x2f, 0xe1, 0xe1, 0xf6, 0x17, 0x16, 0x2f, 0x79,
-    0xa3, 0x96, 0x2f, 0x9a, 0x26, 0xe2, 0xc5, 0x39, 0xe1, 0xe8, 0x82, 0xfe,
-    0x6d, 0x00, 0xf2, 0x05, 0x8b, 0xe9, 0xd4, 0x81, 0x62, 0xfc, 0x39, 0x3c,
-    0x86, 0xb1, 0x7a, 0x5f, 0xcb, 0x15, 0x27, 0x8b, 0xf2, 0x9a, 0x74, 0xd2,
-    0xa2, 0x73, 0xf9, 0x0f, 0x42, 0xe0, 0xd9, 0xef, 0xb0, 0x2d, 0xf1, 0x62,
-    0xff, 0xf3, 0x7d, 0xb3, 0xed, 0xf6, 0xcf, 0xb2, 0xc5, 0xfe, 0x68, 0x71,
-    0xcb, 0x00, 0xb1, 0x7e, 0x6f, 0x7d, 0xe2, 0x58, 0xbd, 0x39, 0xf5, 0x8a,
-    0xfa, 0x2f, 0x80, 0x8e, 0x46, 0x5d, 0x0a, 0x6f, 0xb3, 0x09, 0xd6, 0x2f,
-    0xfe, 0xd6, 0x0f, 0x53, 0xe7, 0xdd, 0xc6, 0xb1, 0x7d, 0x3b, 0x60, 0xd6,
-    0x2e, 0x0a, 0x25, 0x8a, 0xf9, 0xbd, 0x62, 0x3b, 0xe0, 0x1e, 0x7b, 0x58,
-    0xbf, 0xfe, 0xd3, 0x9b, 0x9e, 0x17, 0xdc, 0xf9, 0xf6, 0x58, 0xbd, 0xd2,
-    0x60, 0xb1, 0x78, 0x12, 0x1a, 0xc5, 0x8b, 0x0d, 0xeb, 0x0f, 0xdf, 0xc2,
-    0xef, 0x9f, 0xce, 0x2c, 0x5c, 0xd1, 0xeb, 0x14, 0x33, 0xca, 0x39, 0x85,
-    0xfe, 0xcf, 0x70, 0x3d, 0xa7, 0x65, 0x8b, 0xfd, 0x99, 0x10, 0x4d, 0xdf,
-    0x16, 0x2f, 0xee, 0x67, 0xf2, 0x1c, 0x58, 0xb6, 0x00, 0xf9, 0x3c, 0x6d,
-    0x7f, 0x8b, 0x39, 0xee, 0x66, 0xcb, 0x17, 0xf4, 0xee, 0x42, 0x60, 0xd6,
-    0x29, 0xcf, 0x8c, 0xe6, 0x97, 0xfd, 0x23, 0x0b, 0x08, 0x7f, 0x95, 0x8a,
-    0xc3, 0xda, 0x08, 0x86, 0xff, 0xcf, 0xdc, 0x38, 0x59, 0xef, 0x89, 0x62,
-    0xff, 0x9f, 0x5f, 0xcc, 0x28, 0x71, 0x62, 0xa0, 0x7f, 0x1b, 0xa0, 0x5f,
-    0x37, 0x4c, 0x25, 0x8b, 0xff, 0xfe, 0xc3, 0xfd, 0xe7, 0xc5, 0x9e, 0xfe,
-    0x16, 0x04, 0xc0, 0x58, 0xbe, 0xce, 0x07, 0xc5, 0x8b, 0xff, 0xcd, 0x11,
-    0x30, 0x5a, 0x97, 0x83, 0x71, 0x62, 0xbb, 0x4c, 0x63, 0x44, 0x7f, 0x23,
-    0x26, 0x41, 0x12, 0x5b, 0xa9, 0x62, 0xfe, 0x90, 0x7e, 0x43, 0xfa, 0xc5,
-    0x47, 0x9e, 0x27, 0x05, 0x6f, 0xf6, 0xff, 0x73, 0xce, 0x8d, 0x58, 0xbf,
-    0x1b, 0x98, 0x46, 0xac, 0x59, 0xa0, 0x7b, 0xfa, 0x36, 0xb8, 0x1d, 0x62,
-    0xc5, 0xfd, 0xb0, 0x71, 0xcc, 0x40, 0x58, 0xbf, 0x8c, 0xcd, 0x37, 0xb8,
-    0xb1, 0x7f, 0xe6, 0x20, 0x67, 0xa4, 0x9c, 0x0b, 0x15, 0x28, 0x9e, 0x39,
-    0x9c, 0x71, 0x7d, 0xb7, 0x58, 0xb8, 0x47, 0x58, 0xa1, 0x9a, 0xb2, 0x13,
-    0xb4, 0x67, 0x58, 0xca, 0x96, 0x98, 0xe0, 0xb6, 0x4e, 0xc8, 0x71, 0x1a,
-    0x7c, 0xe4, 0x11, 0x42, 0x0b, 0x44, 0x07, 0x24, 0xfc, 0x23, 0x59, 0xb8,
-    0x04, 0x45, 0x09, 0xbe, 0x43, 0x93, 0xd1, 0xd9, 0x0a, 0x11, 0xe1, 0x42,
-    0x12, 0x38, 0x9c, 0x38, 0x5d, 0xf5, 0x2e, 0xd4, 0x1d, 0xee, 0x8e, 0xa7,
-    0x24, 0x4f, 0x0b, 0xf6, 0xb5, 0x46, 0x3c, 0x94, 0x05, 0xea, 0x57, 0xad,
-    0xff, 0xd1, 0x8d, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x43, 0x92, 0xff,
-    0xf4, 0x61, 0xda, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0x45, 0xfe,
-    0x8c, 0xcd, 0x6e, 0xcd, 0xba, 0xa4, 0xcc, 0x2f, 0xff, 0x0d, 0x8e, 0x66,
-    0x77, 0x0c, 0x06, 0x0d, 0x62, 0xef, 0x01, 0x62, 0xfd, 0x9f, 0x2c, 0xd2,
-    0xc5, 0xed, 0xa7, 0x4b, 0x17, 0xdc, 0x63, 0xc6, 0x62, 0x2a, 0x7e, 0x98,
-    0x43, 0x1c, 0x27, 0xba, 0x33, 0x8b, 0x15, 0x03, 0xf0, 0xed, 0x56, 0xfa,
-    0x35, 0xf5, 0x9d, 0x64, 0x6b, 0x58, 0xbf, 0xc3, 0xc3, 0xcf, 0x72, 0x75,
-    0x8a, 0xeb, 0x0f, 0xba, 0x35, 0x9d, 0x5b, 0xa2, 0xc5, 0xfd, 0x1a, 0x46,
-    0x9b, 0xfe, 0x7b, 0x58, 0xbb, 0xae, 0xe3, 0x96, 0x2f, 0x75, 0xdc, 0x74,
-    0x6e, 0xb1, 0x51, 0xb9, 0xe7, 0xc6, 0x84, 0x57, 0xff, 0x6b, 0x4c, 0x51,
-    0x41, 0xc8, 0xc8, 0xf5, 0x8b, 0xfd, 0xa9, 0xf7, 0xdb, 0xb8, 0x2c, 0x5f,
-    0xff, 0xff, 0x4c, 0x5f, 0x9f, 0x48, 0x6f, 0xa8, 0xa7, 0xf9, 0xd3, 0x3f,
-    0x83, 0xe9, 0x8b, 0x14, 0x62, 0x60, 0x00, 0x49, 0x23, 0x5b, 0xfe, 0xce,
-    0x37, 0x80, 0x19, 0x41, 0x62, 0xc0, 0x58, 0xbf, 0xb9, 0xad, 0x67, 0x7c,
-    0x58, 0xba, 0x60, 0xb1, 0x5d, 0x61, 0xec, 0xe0, 0x96, 0x8c, 0x2e, 0x8a,
-    0x39, 0x62, 0xfd, 0xc9, 0x00, 0x7b, 0x2c, 0x5e, 0xd6, 0x1d, 0x62, 0xf9,
-    0xcb, 0x38, 0xb1, 0x5c, 0x3e, 0x9f, 0x15, 0xf5, 0x0e, 0xd4, 0x11, 0x6f,
-    0x90, 0x85, 0xa5, 0x8a, 0x58, 0xa5, 0x8b, 0xff, 0x6b, 0x4c, 0x51, 0x41,
-    0xc8, 0xcd, 0x8d, 0x20, 0xc3, 0x3e, 0x19, 0x7f, 0xff, 0xef, 0xc9, 0x0b,
-    0x9c, 0x90, 0xfc, 0xe4, 0x28, 0x67, 0x3c, 0xeb, 0x17, 0xe2, 0xce, 0x98,
-    0x4b, 0x17, 0xde, 0xf3, 0xe9, 0x62, 0xed, 0xe5, 0x62, 0xc0, 0x58, 0xa9,
-    0x35, 0x5c, 0x18, 0xa3, 0x13, 0x64, 0x83, 0x1b, 0xb6, 0x68, 0xa3, 0xc9,
-    0xb6, 0xf2, 0xc5, 0xba, 0x96, 0x2a, 0x38, 0xd3, 0x86, 0x25, 0x4b, 0x14,
-    0xb1, 0x7f, 0xed, 0x69, 0x8a, 0x28, 0x39, 0x18, 0x69, 0x71, 0x10, 0x65,
-    0xdf, 0x89, 0x62, 0xe2, 0xdd, 0x62, 0x8c, 0x44, 0x3c, 0x15, 0x98, 0x66,
-    0xf7, 0x27, 0x8b, 0x17, 0xff, 0x6b, 0x4c, 0x51, 0x41, 0xc8, 0xcd, 0x2c,
-    0x5f, 0xdc, 0x09, 0x89, 0xb6, 0x58, 0xbf, 0x36, 0xb1, 0x8e, 0xb1, 0x70,
-    0xe3, 0xd6, 0x28, 0xc4, 0x5b, 0xc4, 0x8d, 0xa2, 0xf6, 0x27, 0xba, 0x3b,
-    0x8b, 0x17, 0xec, 0x38, 0x7d, 0xf1, 0x62, 0xe2, 0x02, 0xc5, 0xf9, 0x82,
-    0xdb, 0x02, 0x58, 0xad, 0x91, 0x11, 0x01, 0xb6, 0x2b, 0x21, 0x7b, 0x7d,
-    0x62, 0xf8, 0xdf, 0xbf, 0x16, 0x2f, 0xe6, 0x0e, 0x39, 0x88, 0x0b, 0x15,
-    0x1b, 0x1f, 0x38, 0x84, 0x82, 0x24, 0xb3, 0xac, 0x5f, 0xe9, 0xe4, 0xfb,
-    0x6c, 0x09, 0x62, 0xce, 0x73, 0xc6, 0x21, 0x1a, 0x58, 0xa5, 0x8a, 0x58,
-    0xbf, 0xf6, 0xb4, 0xc5, 0x14, 0x1c, 0x8c, 0x93, 0x49, 0xd8, 0x63, 0x86,
-    0x5a, 0x0b, 0x17, 0x98, 0x80, 0xb1, 0x5b, 0x9a, 0xed, 0x09, 0x5f, 0xbd,
-    0xc2, 0x98, 0x2c, 0x5f, 0x05, 0xe9, 0x35, 0x62, 0x8c, 0x47, 0xf4, 0xc2,
-    0x3f, 0x08, 0x9c, 0xa2, 0x96, 0x29, 0x62, 0xff, 0xda, 0xd3, 0x14, 0x50,
-    0x72, 0x33, 0x72, 0xe0, 0x01, 0x97, 0xd8, 0x36, 0x82, 0xc5, 0xf8, 0x19,
-    0xc0, 0xfe, 0xb1, 0x77, 0xb6, 0x58, 0xbb, 0xa4, 0xac, 0x5f, 0xf0, 0xff,
-    0x3c, 0xe6, 0x6a, 0x56, 0x2e, 0xe9, 0x2b, 0x17, 0x74, 0x95, 0x8a, 0x31,
-    0x33, 0xe8, 0x2a, 0xf6, 0x44, 0xe5, 0x47, 0x19, 0x21, 0x9e, 0x1c, 0xc7,
-    0x0c, 0xdf, 0xfd, 0xad, 0x31, 0x45, 0x07, 0x23, 0x38, 0xb1, 0x74, 0x89,
-    0x62, 0xfc, 0x43, 0xce, 0xfc, 0xb1, 0x6f, 0xac, 0x51, 0x88, 0x98, 0x1a,
-    0x33, 0x0b, 0x88, 0xa6, 0xe0, 0x32, 0xc5, 0xff, 0xda, 0xd3, 0x14, 0x50,
-    0x72, 0x33, 0x16, 0x2e, 0xc2, 0x58, 0xb8, 0x02, 0x58, 0xa9, 0x35, 0xda,
-    0x16, 0xbe, 0x68, 0x7f, 0x16, 0x2f, 0xdc, 0xfc, 0x97, 0x96, 0x2f, 0x7b,
-    0x25, 0x62, 0x86, 0x7c, 0xc6, 0x91, 0x76, 0x51, 0x76, 0xf2, 0xb1, 0x46,
-    0x26, 0x84, 0x37, 0x3c, 0x84, 0x36, 0xe6, 0x36, 0x0d, 0x62, 0xfb, 0x51,
-    0x3f, 0xd6, 0x2f, 0xff, 0x6f, 0x3c, 0xe6, 0x1f, 0xbf, 0x08, 0xbc, 0xb1,
-    0x7b, 0xd8, 0x75, 0x8b, 0xf8, 0x18, 0x53, 0xdf, 0x16, 0x2f, 0x7d, 0xfb,
-    0x58, 0xa9, 0x3c, 0xcf, 0x17, 0x5e, 0x06, 0x71, 0x62, 0xfb, 0x08, 0x52,
-    0xb1, 0x46, 0x26, 0x99, 0x22, 0x78, 0x48, 0xe9, 0xbc, 0x69, 0xf1, 0x08,
-    0x87, 0x6f, 0x72, 0x4e, 0xb1, 0x7d, 0x3f, 0xc1, 0xac, 0x5f, 0xee, 0x37,
-    0x80, 0x19, 0x41, 0x62, 0xfb, 0xd1, 0xcc, 0x6a, 0xc5, 0x6c, 0x7f, 0xdd,
-    0x91, 0x11, 0xad, 0x44, 0x8c, 0xb6, 0x84, 0xdd, 0x2c, 0x52, 0xc5, 0xff,
-    0xb5, 0xa6, 0x28, 0xa0, 0xe4, 0x67, 0x5e, 0x5c, 0x10, 0x65, 0xfb, 0x7f,
-    0xb3, 0xf5, 0xeb, 0x17, 0xe1, 0x72, 0x79, 0x2b, 0x14, 0x62, 0x2b, 0xb4,
-    0xb0, 0xc5, 0xd4, 0xb1, 0x4b, 0x17, 0xfe, 0xd6, 0x98, 0xa2, 0x83, 0x91,
-    0x90, 0x2e, 0x0e, 0x19, 0x7f, 0x10, 0x3f, 0x80, 0x65, 0x8b, 0xe2, 0x9e,
-    0x82, 0x58, 0xbd, 0xf9, 0xed, 0x62, 0x8c, 0x46, 0x1b, 0xaa, 0x31, 0x6c,
-    0x71, 0x25, 0x8e, 0xb1, 0x71, 0xb1, 0xcb, 0x15, 0xd9, 0xae, 0x71, 0x2b,
-    0xff, 0xb5, 0xa6, 0x28, 0xa0, 0xe4, 0x63, 0x2c, 0x5f, 0xc3, 0x32, 0x37,
-    0x2c, 0xea, 0x58, 0xba, 0x49, 0x62, 0xf6, 0xd1, 0x4a, 0xc5, 0x2c, 0x5f,
-    0xf1, 0x03, 0x3d, 0x24, 0xe0, 0x58, 0xac, 0x3c, 0x36, 0x0c, 0xa3, 0x13,
-    0x14, 0x94, 0x5f, 0x9b, 0xb0, 0xb4, 0x73, 0x15, 0xe2, 0x14, 0x4b, 0x16,
-    0x8c, 0xeb, 0x1b, 0x5b, 0x7e, 0xb4, 0xb6, 0x34, 0x14, 0x8d, 0x70, 0x8a,
-    0x98, 0xcb, 0x36, 0x31, 0x84, 0x24, 0xc7, 0x0e, 0xac, 0x8e, 0xbc, 0xd7,
-    0x2d, 0xe1, 0x89, 0xd9, 0x83, 0xc3, 0x52, 0x28, 0x63, 0x6a, 0x14, 0x67,
-    0x7b, 0xfc, 0x69, 0x0d, 0x1c, 0xb0, 0x23, 0x0d, 0xeb, 0xcf, 0x4a, 0x35,
-    0x9e, 0x47, 0x21, 0xe8, 0xcb, 0x85, 0x0e, 0xee, 0x91, 0x85, 0xc7, 0x36,
-    0x87, 0x19, 0xaf, 0x52, 0x6d, 0xfb, 0x5b, 0xb3, 0x6e, 0xa9, 0x37, 0x4b,
-    0x88, 0x4b, 0x16, 0xe2, 0xc5, 0x61, 0xf0, 0x68, 0xdc, 0x02, 0xf7, 0xfa,
-    0x75, 0x2e, 0x3c, 0x3a, 0xc5, 0xef, 0xce, 0x96, 0x2f, 0xd1, 0x17, 0x79,
-    0xba, 0xc5, 0xff, 0x84, 0x32, 0x63, 0x70, 0x6d, 0x05, 0x8b, 0x46, 0x6c,
-    0x8b, 0x91, 0x99, 0x60, 0xef, 0x0a, 0xea, 0x31, 0x32, 0xdf, 0xc3, 0x9e,
-    0xfc, 0xe0, 0xe6, 0x75, 0x2c, 0x5f, 0xe7, 0xd8, 0xb0, 0x02, 0xe2, 0xc5,
-    0xf9, 0xf4, 0x1c, 0x5c, 0x58, 0xa8, 0x8f, 0x7f, 0xe6, 0x97, 0xf1, 0x34,
-    0x66, 0xb6, 0xfa, 0xc5, 0xff, 0x42, 0x5a, 0x18, 0x6b, 0xe9, 0x62, 0xec,
-    0xdd, 0x62, 0xd2, 0xb1, 0x58, 0x6a, 0x42, 0x18, 0xbc, 0xfd, 0x81, 0x62,
-    0xfd, 0xdc, 0x3e, 0xe0, 0x58, 0xbf, 0xfb, 0x4d, 0xb8, 0x05, 0xcf, 0x4f,
-    0x61, 0x2c, 0x5c, 0x46, 0xac, 0x59, 0x96, 0x2f, 0xb7, 0x66, 0xdd, 0x52,
-    0x48, 0x17, 0xf3, 0x9a, 0x59, 0xd3, 0x16, 0x2b, 0x11, 0x13, 0x10, 0xc6,
-    0x84, 0x7e, 0x63, 0x7e, 0x6d, 0x6c, 0x00, 0x96, 0x2f, 0xf4, 0x3c, 0xe1,
-    0x70, 0x0e, 0xb1, 0x7e, 0xea, 0xc3, 0xb7, 0x6b, 0x17, 0xed, 0xff, 0x2f,
-    0xa5, 0x8a, 0xec, 0xf5, 0x63, 0xcb, 0x2f, 0x66, 0x6e, 0xb1, 0x73, 0xfd,
-    0x62, 0xff, 0xe7, 0xe3, 0xf4, 0xfb, 0x1f, 0x53, 0xc5, 0x8a, 0xc3, 0xdd,
-    0x61, 0x7b, 0xc0, 0xe3, 0xac, 0x5f, 0xf9, 0xa3, 0xa4, 0xb7, 0xcf, 0x7d,
-    0xd6, 0x2f, 0xfd, 0x9f, 0x7e, 0x9f, 0xcc, 0x2d, 0xd6, 0x2f, 0xec, 0xfe,
-    0x7d, 0xcd, 0x58, 0xbf, 0x7a, 0x7a, 0x3f, 0x45, 0x8b, 0xcd, 0x08, 0xc9,
-    0x57, 0x4c, 0x32, 0xac, 0x86, 0x96, 0xe7, 0xbd, 0x95, 0xbc, 0x22, 0xa2,
-    0x26, 0xfb, 0xd3, 0x10, 0x10, 0xef, 0x10, 0x7c, 0x81, 0xd0, 0xba, 0xf7,
-    0x3e, 0x25, 0x8b, 0xa4, 0x35, 0x8a, 0xc3, 0x6c, 0x10, 0xf5, 0xfd, 0x25,
-    0xce, 0x39, 0xd6, 0x2b, 0x0f, 0x39, 0xc8, 0x6f, 0xf3, 0x8c, 0x5e, 0xe1,
-    0xc9, 0x62, 0xe8, 0xe3, 0xac, 0x5f, 0x04, 0x79, 0xe2, 0xc5, 0xff, 0xf8,
-    0x6f, 0x18, 0x2f, 0x6f, 0xfc, 0xf7, 0xf3, 0xbe, 0x2c, 0x5e, 0x62, 0x82,
-    0xc5, 0xfc, 0x2d, 0x1b, 0xf6, 0x82, 0xc5, 0xfb, 0xc5, 0x39, 0xda, 0xc5,
-    0xa3, 0x25, 0x7f, 0x7f, 0x21, 0x15, 0xb9, 0x1f, 0x66, 0x51, 0x31, 0x68,
-    0x84, 0xf2, 0xf1, 0x3f, 0x1a, 0xb3, 0x10, 0x00, 0xd0, 0x43, 0x7d, 0x09,
-    0x02, 0x5c, 0x8e, 0x1c, 0x0c, 0xc2, 0xff, 0xe8, 0xc6, 0x84, 0x66, 0x6b,
-    0x76, 0x6d, 0xd5, 0x22, 0x91, 0x5b, 0x3a, 0x54, 0xa8, 0x96, 0x4e, 0xbe,
-    0xd1, 0xaf, 0x02, 0xb6, 0x48, 0x29, 0x72, 0xfe, 0xa4, 0x05, 0xf5, 0x43,
-    0xc6, 0xf3, 0x36, 0xeb, 0x17, 0x02, 0x56, 0x2d, 0xad, 0xcd, 0xa0, 0x07,
-    0x6f, 0xf3, 0x36, 0xd9, 0x09, 0x35, 0x62, 0x96, 0x2f, 0x77, 0x21, 0xac,
-    0x56, 0xe6, 0xad, 0x83, 0x2f, 0xec, 0xf7, 0x9c, 0x2f, 0x2c, 0x5c, 0xdb,
-    0xac, 0x5a, 0x33, 0x11, 0xdf, 0x11, 0x43, 0x2f, 0x91, 0x0f, 0x42, 0xfb,
-    0xf9, 0xcb, 0x3f, 0x9b, 0xac, 0x5f, 0xce, 0x5e, 0xc7, 0x1a, 0xc5, 0xd0,
-    0xf2, 0xc5, 0xe2, 0x90, 0x96, 0x2e, 0x98, 0xcd, 0x1b, 0x52, 0x18, 0xa8,
-    0x22, 0x3f, 0xcc, 0x37, 0xb8, 0x23, 0xac, 0x5a, 0x0b, 0x17, 0x1f, 0xcb,
-    0x17, 0x71, 0x96, 0x2f, 0xd9, 0xaf, 0x3e, 0x2c, 0x5d, 0xec, 0x58, 0xb4,
-    0x6e, 0xb1, 0x68, 0xc8, 0x27, 0x27, 0xdc, 0x2f, 0x1c, 0x8e, 0x21, 0xe3,
-    0x89, 0x00, 0x60, 0x85, 0xfa, 0x13, 0xc7, 0x0b, 0xdf, 0xb9, 0x18, 0x18,
-    0xfe, 0xb1, 0x7f, 0x17, 0xa3, 0xb2, 0x74, 0xb1, 0x7f, 0xff, 0xec, 0x0b,
-    0x9c, 0xcf, 0xbf, 0x05, 0xb7, 0xe6, 0x0f, 0x1d, 0x87, 0x58, 0xbf, 0xfd,
-    0xa9, 0x84, 0x76, 0x7b, 0x8f, 0xed, 0xa0, 0xb1, 0x7f, 0xbd, 0xc9, 0x89,
-    0x9b, 0x4b, 0x15, 0x28, 0x83, 0x74, 0xfb, 0xff, 0xec, 0xf3, 0xfc, 0x5f,
-    0x67, 0xef, 0x92, 0x6a, 0xc5, 0xe2, 0x68, 0x2c, 0x5d, 0xd1, 0xd6, 0x2f,
-    0xfa, 0x5f, 0xdf, 0x9f, 0xc9, 0xd6, 0x2f, 0xd1, 0xb7, 0x5b, 0xae, 0x71,
-    0x62, 0xff, 0xf7, 0x1a, 0x0e, 0x6b, 0xc3, 0x01, 0xcc, 0x58, 0xbf, 0xfb,
-    0xb0, 0x6b, 0x07, 0x3a, 0x7e, 0xc0, 0xb1, 0x7f, 0x67, 0xdc, 0xa4, 0xeb,
-    0x14, 0xb1, 0x7e, 0x78, 0xec, 0xd4, 0xac, 0x5d, 0x87, 0x93, 0x6d, 0xc0,
-    0xca, 0xd9, 0x31, 0xe7, 0x4a, 0xd2, 0x3f, 0x53, 0x15, 0xff, 0x85, 0xa8,
-    0x64, 0x1c, 0xd3, 0x59, 0x62, 0xfd, 0xad, 0xd9, 0xb7, 0x54, 0x8e, 0xc5,
-    0xff, 0xed, 0xa7, 0x7e, 0x4f, 0xb3, 0x5a, 0x9d, 0xd6, 0x2f, 0xd9, 0x02,
-    0x9d, 0x96, 0x2f, 0x80, 0xd1, 0xc6, 0xac, 0x5f, 0xf7, 0x54, 0x9e, 0x63,
-    0x02, 0x08, 0x25, 0x8a, 0xc3, 0xea, 0x62, 0x7b, 0xf3, 0x6b, 0x7d, 0x62,
-    0xc5, 0xff, 0xdf, 0x11, 0xc5, 0xec, 0xe9, 0x82, 0x3a, 0xc5, 0xfe, 0x7e,
-    0x71, 0xff, 0x3c, 0x58, 0xad, 0x91, 0x48, 0x32, 0x93, 0xa4, 0x5e, 0xfb,
-    0x04, 0xb1, 0x7f, 0xc4, 0xd0, 0x10, 0x0e, 0xd0, 0x58, 0xb6, 0x0c, 0xf5,
-    0xfe, 0x3d, 0x7f, 0xff, 0xf7, 0x24, 0xb7, 0x9e, 0x8d, 0xf1, 0xc8, 0xde,
-    0x0f, 0xad, 0x84, 0x05, 0x8b, 0xfe, 0x35, 0xfd, 0xc7, 0xdd, 0xb4, 0xb1,
-    0x79, 0xa1, 0x19, 0xd7, 0x55, 0xd0, 0xd9, 0x8d, 0x4b, 0x64, 0x1c, 0x41,
-    0x73, 0x7d, 0x26, 0xfe, 0x12, 0x4d, 0x0c, 0x42, 0x84, 0x47, 0x09, 0xc3,
-    0x75, 0xb4, 0x7a, 0xc5, 0xff, 0xfd, 0x84, 0x4d, 0xef, 0xe7, 0x1b, 0x34,
-    0x03, 0xe2, 0xc5, 0x6c, 0x7d, 0xac, 0x2b, 0x7f, 0x3f, 0x42, 0xce, 0x3a,
-    0xc5, 0xff, 0xe1, 0x1e, 0x7a, 0x98, 0x65, 0x25, 0x9b, 0xac, 0x54, 0x0f,
-    0xe8, 0x65, 0xd7, 0x8a, 0x60, 0xb1, 0x4e, 0x6f, 0xb4, 0x45, 0x79, 0xf5,
-    0x05, 0x8b, 0xfd, 0x09, 0xd6, 0xd3, 0xad, 0x96, 0x2f, 0xfd, 0xf2, 0x68,
-    0x08, 0x07, 0x68, 0x2c, 0x54, 0x9f, 0xae, 0x1b, 0x5c, 0x13, 0xac, 0x5f,
-    0xe6, 0xd9, 0xb3, 0xd8, 0x75, 0x8b, 0xfb, 0x40, 0xc2, 0x6f, 0xac, 0x5f,
-    0xff, 0xb3, 0xb8, 0x7e, 0x78, 0xda, 0x9e, 0xaf, 0xb6, 0xeb, 0x16, 0x8c,
-    0x96, 0x56, 0x26, 0xc6, 0x10, 0x87, 0xa0, 0xc8, 0x71, 0x45, 0xc7, 0x34,
-    0x32, 0x79, 0xd4, 0x5f, 0xc6, 0x6c, 0xd0, 0xda, 0x01, 0x01, 0x42, 0x48,
-    0x22, 0x08, 0xe1, 0x80, 0xcc, 0xfa, 0x8b, 0x6e, 0x04, 0x72, 0xc5, 0xf4,
-    0x8e, 0x49, 0x62, 0xf9, 0xf5, 0x3d, 0x16, 0x2e, 0xcf, 0xac, 0x5f, 0xfd,
-    0x1c, 0xc4, 0x0c, 0xf4, 0x93, 0x81, 0x62, 0xd1, 0x91, 0xe8, 0xbc, 0x21,
-    0xbe, 0x10, 0xc7, 0x12, 0x06, 0x2f, 0x7f, 0xf3, 0x1f, 0xf9, 0xbb, 0x7e,
-    0x43, 0x82, 0xc5, 0xfb, 0xda, 0xc9, 0x09, 0x62, 0xf3, 0x8d, 0x96, 0x2f,
-    0xff, 0x7c, 0x98, 0x0f, 0xe9, 0x3e, 0x9c, 0xd5, 0x8b, 0xff, 0xf6, 0x6f,
-    0x3f, 0x93, 0xc1, 0xcd, 0x36, 0x4b, 0xcb, 0x17, 0xff, 0x16, 0x7d, 0xb6,
-    0xce, 0x13, 0x76, 0xb1, 0x74, 0x74, 0x60, 0xd3, 0x70, 0x74, 0x6f, 0x94,
-    0xb0, 0xe1, 0x25, 0x71, 0x5e, 0xa5, 0xb1, 0x5d, 0x84, 0x7c, 0xd9, 0x09,
-    0x23, 0xd2, 0xbc, 0xb9, 0x1e, 0x1c, 0x74, 0x79, 0x37, 0xff, 0x69, 0xbb,
-    0x8c, 0x1e, 0x44, 0xcd, 0xb2, 0xc5, 0xff, 0xa3, 0x54, 0x6b, 0xeb, 0x35,
-    0xac, 0x08, 0x99, 0x62, 0xff, 0xff, 0xe2, 0x93, 0xb9, 0x03, 0x36, 0x6f,
-    0x70, 0x79, 0x9f, 0x6e, 0xc2, 0x58, 0xbf, 0xa0, 0xda, 0xdb, 0xe2, 0x58,
-    0xbf, 0x72, 0x40, 0x1e, 0xcb, 0x16, 0xc7, 0x46, 0x6c, 0x4e, 0x5c, 0x30,
-    0xbf, 0xf3, 0xeb, 0xed, 0xcf, 0xcb, 0x69, 0x62, 0xff, 0xa4, 0xbb, 0x07,
-    0x39, 0x20, 0x58, 0xbe, 0xd6, 0x05, 0xe5, 0x8a, 0xfa, 0x27, 0x38, 0x7d,
-    0xd0, 0xea, 0xff, 0x6b, 0x38, 0x42, 0x60, 0xd6, 0x2f, 0xff, 0xff, 0xfb,
-    0xef, 0xe6, 0x6e, 0xf9, 0xce, 0x49, 0xe7, 0xf9, 0x9b, 0x61, 0x67, 0x7e,
-    0xe4, 0xf6, 0xb1, 0x7f, 0xa0, 0xde, 0x8a, 0x0f, 0xe5, 0x8b, 0xfd, 0x30,
-    0x7f, 0x39, 0x41, 0x62, 0xff, 0xf0, 0xff, 0x30, 0xdb, 0x02, 0xf4, 0xf6,
-    0x12, 0xc5, 0xff, 0xff, 0xb7, 0x16, 0xd9, 0xd2, 0x7b, 0xc1, 0xb4, 0x03,
-    0x3f, 0x31, 0x86, 0xb1, 0x7f, 0x61, 0xa6, 0xe0, 0x67, 0x58, 0xbf, 0xa7,
-    0x40, 0xdf, 0x7c, 0x58, 0xbf, 0x38, 0x7b, 0x08, 0x96, 0x2a, 0x08, 0x8b,
-    0xf9, 0x8f, 0x0c, 0x2e, 0x60, 0x2c, 0x5f, 0xf3, 0xc1, 0xfe, 0x23, 0x9d,
-    0xd6, 0x2b, 0xe7, 0xa1, 0xe1, 0x7b, 0xbd, 0x19, 0x1b, 0x2e, 0x9f, 0x8e,
-    0x31, 0xec, 0x86, 0x89, 0xa6, 0x5b, 0x9a, 0x45, 0x09, 0x5d, 0x1a, 0xb1,
-    0x97, 0x13, 0xfd, 0x0f, 0xd0, 0xe1, 0x01, 0x61, 0xba, 0xf2, 0xa3, 0x4e,
-    0xc4, 0xdf, 0xf7, 0x1c, 0xe6, 0x07, 0xac, 0xd9, 0x62, 0xe6, 0x1a, 0xc5,
-    0x76, 0x7a, 0x9c, 0x3d, 0xbc, 0x59, 0xe5, 0x8a, 0x88, 0xdf, 0x91, 0x1d,
-    0xfd, 0x9a, 0x7f, 0x7e, 0x56, 0x2f, 0xe7, 0x20, 0x0f, 0x09, 0x62, 0xfb,
-    0x76, 0x6d, 0xd5, 0x21, 0x61, 0x7f, 0x3e, 0x98, 0xb7, 0x95, 0x8b, 0xe7,
-    0x22, 0x95, 0x8a, 0x82, 0x2a, 0xb4, 0x59, 0xf3, 0x1e, 0x85, 0xb7, 0xe8,
-    0x85, 0xb7, 0x54, 0xac, 0x5f, 0x67, 0x80, 0xeb, 0x17, 0xfe, 0x68, 0x46,
-    0x66, 0xb7, 0x66, 0xdd, 0x52, 0x2e, 0x97, 0xf9, 0x87, 0x25, 0xf9, 0xe2,
-    0xc5, 0xd3, 0x1e, 0xb1, 0x73, 0x1a, 0xb1, 0x50, 0x36, 0x5e, 0x1a, 0xbf,
-    0x3c, 0x83, 0x09, 0x62, 0xfc, 0xcf, 0xbc, 0xfd, 0x62, 0xf7, 0xf7, 0x75,
-    0x8b, 0xf3, 0x73, 0xcf, 0xd1, 0x62, 0xf3, 0x8b, 0x65, 0x8a, 0x93, 0xe6,
-    0x34, 0x7b, 0x45, 0x57, 0xff, 0xf6, 0x0f, 0xf2, 0x1c, 0x67, 0x89, 0x81,
-    0xce, 0x48, 0x12, 0x2d, 0x19, 0x2a, 0xe7, 0x86, 0x43, 0x90, 0xd7, 0x73,
-    0xfd, 0x17, 0x1c, 0x8b, 0xea, 0x0c, 0xc8, 0x44, 0x3c, 0x26, 0xf4, 0x23,
-    0xa3, 0x8b, 0xef, 0xfe, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x91,
-    0x88, 0xbf, 0xbf, 0x25, 0xdc, 0x4c, 0xb1, 0x7f, 0xcc, 0xc5, 0x9e, 0x7e,
-    0xc2, 0x58, 0xbf, 0x8f, 0xce, 0x3e, 0x04, 0xb1, 0x7f, 0x3c, 0x73, 0x83,
-    0x06, 0xb1, 0x52, 0x7b, 0xec, 0x5f, 0x7f, 0xfe, 0x26, 0x01, 0xdc, 0xcc,
-    0xfb, 0xcc, 0x1a, 0x0b, 0x17, 0xd9, 0xbc, 0xc6, 0x4a, 0x67, 0x67, 0x2f,
-    0xfc, 0x26, 0x3c, 0x41, 0x51, 0x89, 0xf6, 0xfe, 0x39, 0x1b, 0xfd, 0xf6,
-    0x3c, 0x63, 0x08, 0x6b, 0x16, 0x1a, 0xc5, 0xe7, 0x2d, 0x96, 0x2f, 0xda,
-    0xdd, 0x9b, 0x75, 0x49, 0x52, 0x5b, 0x16, 0x2e, 0x6f, 0x2c, 0x56, 0xc8,
-    0x8e, 0x18, 0x96, 0x0e, 0x9a, 0x6e, 0xc2, 0x37, 0xfd, 0xad, 0x39, 0x16,
-    0x0b, 0x75, 0x8b, 0xff, 0x09, 0xb5, 0x02, 0xc0, 0x98, 0x0b, 0x17, 0xfb,
-    0xe1, 0x8e, 0x7d, 0x23, 0x58, 0xbf, 0xf9, 0xb9, 0xa7, 0x0b, 0xdf, 0x7d,
-    0x41, 0x62, 0xfc, 0xda, 0xd3, 0x84, 0xb1, 0x7f, 0xda, 0x6f, 0xf7, 0x0c,
-    0xf4, 0x64, 0xa6, 0x38, 0x33, 0x9c, 0x3f, 0xf9, 0xa8, 0x48, 0xd5, 0x18,
-    0x9f, 0x13, 0x46, 0xcd, 0x7f, 0xfb, 0x38, 0xf8, 0x5e, 0x2c, 0xd9, 0x89,
-    0x62, 0xff, 0xbb, 0x83, 0xe8, 0x64, 0xdf, 0x58, 0xbf, 0xfb, 0x34, 0xc6,
-    0x87, 0x9a, 0xef, 0x92, 0xb1, 0x7f, 0xf0, 0x24, 0xb7, 0x6f, 0x37, 0x60,
-    0x8c, 0x24, 0x64, 0x79, 0x1c, 0x33, 0xab, 0xff, 0x46, 0x7e, 0x4f, 0x83,
-    0x92, 0xf2, 0xc5, 0xef, 0x3e, 0xcb, 0x17, 0xfe, 0x68, 0x46, 0x66, 0xb7,
-    0x66, 0xdd, 0x52, 0x3a, 0x17, 0xe7, 0xec, 0x07, 0x95, 0x8b, 0x8b, 0xcb,
-    0x15, 0xb1, 0xe0, 0x31, 0x4d, 0xf0, 0xb8, 0xe0, 0x58, 0xbc, 0xfd, 0x84,
-    0xb1, 0x40, 0x3c, 0x2e, 0x11, 0xdf, 0xb9, 0x9f, 0x2c, 0x58, 0xbe, 0xf3,
-    0xc1, 0xd6, 0x28, 0xd4, 0xdf, 0x4e, 0x3c, 0xd0, 0x90, 0x03, 0x27, 0x88,
-    0x83, 0x27, 0xbc, 0x2e, 0xe0, 0xb1, 0x7c, 0xf9, 0xae, 0x8b, 0x17, 0x8b,
-    0xdc, 0x58, 0xbf, 0x17, 0x88, 0x5b, 0x2c, 0x53, 0x1e, 0x30, 0x87, 0x6f,
-    0xd9, 0xef, 0x3f, 0x6b, 0x17, 0xdb, 0x14, 0xec, 0xb1, 0x7e, 0xc2, 0xd9,
-    0x86, 0xb1, 0x7c, 0x79, 0x36, 0x32, 0x53, 0x1f, 0x8f, 0x1f, 0x3b, 0x51,
-    0x10, 0x88, 0xa7, 0xa1, 0x25, 0xff, 0x80, 0x2e, 0x46, 0x0c, 0x26, 0x28,
-    0x2c, 0x54, 0x62, 0xa3, 0x77, 0x8d, 0xf4, 0x0e, 0xd7, 0xff, 0x9f, 0x4d,
-    0xdf, 0xd9, 0xfb, 0xe4, 0x9a, 0xb1, 0x7f, 0x9d, 0xb5, 0x30, 0x6e, 0x8b,
-    0x17, 0xce, 0x40, 0x75, 0x8b, 0xf4, 0x53, 0x14, 0xf1, 0x62, 0xfe, 0x0b,
-    0x1f, 0xa6, 0x12, 0xc5, 0x39, 0xec, 0xf0, 0xaa, 0xf3, 0xfe, 0x56, 0x23,
-    0x0d, 0x0d, 0xff, 0xc2, 0xe7, 0xa7, 0xb8, 0xc1, 0x44, 0xe7, 0x58, 0xa8,
-    0x26, 0x2a, 0x78, 0x4d, 0xfc, 0xbe, 0xff, 0x6a, 0x01, 0xc3, 0x3e, 0xcb,
-    0x14, 0xb1, 0x4e, 0x78, 0x3c, 0x35, 0xb6, 0x96, 0x2b, 0xe6, 0xcd, 0x88,
-    0x6f, 0xd3, 0xcf, 0x3e, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x1d, 0xca,
-    0x34, 0xf6, 0xb4, 0x53, 0x7f, 0xff, 0x49, 0xc5, 0xa8, 0xa4, 0xe6, 0x1f,
-    0x3d, 0xc7, 0xe2, 0xc5, 0xe6, 0x84, 0x66, 0x22, 0x07, 0xc4, 0x77, 0xe7,
-    0xe9, 0xa9, 0x82, 0xc5, 0xfb, 0xc2, 0x63, 0xba, 0x45, 0xc7, 0x8e, 0x58,
-    0xbf, 0xb1, 0xc6, 0xcc, 0x6a, 0xc5, 0xff, 0x8a, 0x7d, 0x9c, 0xcc, 0xee,
-    0x0b, 0x17, 0xff, 0xe2, 0xd6, 0x05, 0x91, 0xf3, 0xf9, 0x72, 0x1c, 0xac,
-    0x54, 0x17, 0x27, 0x86, 0x99, 0x91, 0xa4, 0xef, 0x0a, 0xa3, 0xc3, 0xef,
-    0xe6, 0xcc, 0x54, 0x45, 0x1c, 0x1b, 0xf1, 0x68, 0x67, 0xd7, 0xf1, 0x66,
-    0xd9, 0x07, 0x58, 0xbb, 0x80, 0x58, 0xbf, 0x0e, 0x61, 0x31, 0x9b, 0x9e,
-    0x28, 0x45, 0xb7, 0xee, 0x14, 0x83, 0x8b, 0x17, 0xfc, 0x36, 0x87, 0xde,
-    0x29, 0x8f, 0x58, 0xbc, 0x58, 0x35, 0x8b, 0xe1, 0x7d, 0xf4, 0xb1, 0x74,
-    0xc6, 0x4a, 0x29, 0x30, 0xa0, 0x07, 0xb1, 0xc3, 0x95, 0x18, 0xa8, 0x8b,
-    0x21, 0xde, 0x50, 0xe7, 0xbf, 0xfd, 0x20, 0x3b, 0x42, 0x33, 0x83, 0x2c,
-    0xfa, 0xc5, 0xff, 0x7b, 0x8e, 0x77, 0xf0, 0x19, 0x62, 0xef, 0x4a, 0xc5,
-    0xed, 0xa7, 0x75, 0x8b, 0xb9, 0x19, 0x27, 0xdf, 0xb9, 0xcb, 0x8b, 0xdf,
-    0xfe, 0x8c, 0x3b, 0x42, 0x33, 0x35, 0xbb, 0x36, 0xea, 0x92, 0x14, 0xbf,
-    0xfb, 0xcf, 0xcd, 0xb0, 0x2f, 0x73, 0x36, 0x58, 0xbf, 0xff, 0xef, 0xb3,
-    0xf3, 0x98, 0x40, 0x8e, 0xcd, 0x08, 0xd0, 0xda, 0x3d, 0x62, 0xfd, 0xad,
-    0x4e, 0xf1, 0x98, 0x8b, 0x6e, 0x24, 0x5d, 0x3a, 0x58, 0xbd, 0x39, 0xa5,
-    0x8b, 0xf0, 0x27, 0x6c, 0x09, 0x62, 0xff, 0xbd, 0x0c, 0x27, 0x1c, 0x67,
-    0x36, 0x3d, 0xd8, 0x85, 0xc0, 0x39, 0x58, 0x98, 0x0b, 0x42, 0x82, 0xf8,
-    0x9b, 0x5d, 0x16, 0x2e, 0x60, 0x96, 0x2d, 0xb2, 0xc5, 0x1c, 0xd5, 0x90,
-    0xc5, 0xff, 0xbe, 0xe7, 0x68, 0x61, 0xdb, 0xb5, 0x8b, 0x46, 0x4a, 0x2b,
-    0xb6, 0x4f, 0xdc, 0x82, 0xed, 0x9d, 0x62, 0xff, 0xff, 0xff, 0x8e, 0xc4,
-    0x3f, 0x87, 0xc3, 0x3e, 0xcf, 0xe7, 0xe3, 0x8b, 0xaf, 0x84, 0x98, 0x53,
-    0x9b, 0xac, 0x5f, 0xfe, 0xf8, 0xbd, 0x25, 0x9b, 0x1a, 0x29, 0x89, 0x62,
-    0xfe, 0x11, 0xce, 0xd0, 0x8c, 0x94, 0xc0, 0x30, 0x63, 0x78, 0x4d, 0xdf,
-    0xff, 0xf8, 0xb3, 0xa3, 0xfc, 0x51, 0x9b, 0xfd, 0xfe, 0x53, 0x9a, 0xc3,
-    0xac, 0x54, 0x15, 0x02, 0xfe, 0x33, 0xae, 0x2d, 0xdf, 0x79, 0xbb, 0xe2,
-    0xc5, 0xf8, 0x5d, 0xf9, 0xf7, 0x58, 0xbe, 0x2c, 0x0b, 0xeb, 0x17, 0xf4,
-    0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xee, 0x48, 0x03, 0xd9, 0x62, 0xd9, 0x11,
-    0xed, 0xf0, 0xc2, 0xfb, 0x72, 0x68, 0x2c, 0x5c, 0xd1, 0xcb, 0x17, 0xce,
-    0x52, 0x75, 0x8b, 0xfc, 0x39, 0x22, 0xcc, 0xd9, 0x62, 0xf8, 0x18, 0xc4,
-    0xb1, 0x7f, 0xbc, 0x52, 0x03, 0xb4, 0x16, 0x2a, 0x51, 0x0d, 0x86, 0x4e,
-    0x43, 0x7f, 0xb0, 0xa7, 0x35, 0x3b, 0x2c, 0x5f, 0xfd, 0xd1, 0xfd, 0x3f,
-    0x2c, 0xf6, 0xa5, 0x62, 0xfc, 0xda, 0x04, 0x76, 0x2c, 0x5e, 0x70, 0xbc,
-    0xb1, 0x58, 0x88, 0xe7, 0x45, 0xe1, 0x5d, 0xff, 0x1e, 0x28, 0x36, 0xb6,
-    0xf8, 0x96, 0x2f, 0x48, 0x23, 0x25, 0x59, 0x8e, 0xc4, 0x90, 0x2b, 0x1b,
-    0xf3, 0x94, 0x1c, 0x8d, 0x86, 0x8a, 0x14, 0xfc, 0x2d, 0xf4, 0x30, 0x03,
-    0x2e, 0xa7, 0x5c, 0x1f, 0x29, 0x6d, 0x37, 0xff, 0xe1, 0x6f, 0x18, 0xde,
-    0xfe, 0x1e, 0x74, 0x52, 0x05, 0x8b, 0xfe, 0x3b, 0x73, 0x02, 0x92, 0x1a,
-    0xc5, 0xff, 0x9a, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x92, 0x45, 0xfd,
-    0xf2, 0xc1, 0xfc, 0x4b, 0x17, 0x60, 0xd6, 0x2b, 0x0f, 0x17, 0xe5, 0xd7,
-    0xa4, 0x86, 0xb1, 0x68, 0xcd, 0x93, 0x64, 0xc5, 0x93, 0x9c, 0xfa, 0x12,
-    0xa1, 0x10, 0xdf, 0xff, 0xc2, 0xe4, 0xe1, 0x78, 0x98, 0xdc, 0x8a, 0x48,
-    0x6b, 0x17, 0xf1, 0x67, 0x03, 0xc8, 0x96, 0x2d, 0x84, 0x88, 0x9e, 0x8b,
-    0x57, 0x1c, 0x96, 0x2f, 0xfe, 0x8b, 0xec, 0x7f, 0x7e, 0x7c, 0x23, 0xac,
-    0x5f, 0x61, 0x4e, 0xcb, 0x15, 0x87, 0xd3, 0xa4, 0x7b, 0xd9, 0xc8, 0xc2,
-    0x46, 0x57, 0x0a, 0x43, 0x84, 0x05, 0x4b, 0xa3, 0xf6, 0xda, 0x71, 0x8e,
-    0x12, 0xa9, 0x70, 0xb7, 0x79, 0x54, 0xfd, 0xc3, 0xd2, 0x26, 0xdd, 0x4b,
-    0xf5, 0x3c, 0xf7, 0xd7, 0xcf, 0x5a, 0x17, 0x80, 0x3d, 0x29, 0x42, 0xde,
-    0x9e, 0xf9, 0x14, 0x71, 0xf1, 0xd1, 0xd6, 0xdd, 0x1b, 0xf5, 0xd5, 0x62,
-    0xf7, 0xdf, 0x65, 0x8b, 0xed, 0xd9, 0xb7, 0x54, 0x84, 0x85, 0xff, 0xf9,
-    0xf5, 0xf6, 0x32, 0x2f, 0xce, 0xdd, 0x7e, 0xa6, 0x39, 0x62, 0xb4, 0x89,
-    0x2f, 0x98, 0xdf, 0xff, 0xef, 0xce, 0xdd, 0x7e, 0xa6, 0x3a, 0x33, 0x4f,
-    0x27, 0xdb, 0x02, 0x58, 0xbf, 0x3f, 0xbf, 0x87, 0x58, 0xbd, 0xc6, 0xd9,
-    0x62, 0xd1, 0x91, 0xba, 0x75, 0xb2, 0x4b, 0x90, 0xb0, 0x88, 0x8f, 0xaf,
-    0x6f, 0xe1, 0x45, 0xed, 0x36, 0x96, 0x2f, 0xfc, 0xd0, 0x8c, 0xcd, 0x6e,
-    0xcd, 0xba, 0xa4, 0x5e, 0x2e, 0xe9, 0xf5, 0x8b, 0xe6, 0xf3, 0x6c, 0xb1,
-    0x68, 0xc7, 0x45, 0x51, 0xc7, 0x49, 0x42, 0x38, 0x6a, 0xfe, 0xeb, 0xae,
-    0x68, 0x0c, 0x75, 0x8b, 0xff, 0xa7, 0xa3, 0x44, 0xfa, 0xee, 0x13, 0x12,
-    0xc5, 0xee, 0xb0, 0xe0, 0x58, 0xbf, 0x87, 0xfc, 0x72, 0x35, 0x62, 0xf1,
-    0xca, 0x56, 0x2b, 0x87, 0x94, 0x19, 0x75, 0xef, 0x31, 0xab, 0x15, 0xd6,
-    0x9e, 0x0b, 0x11, 0xdd, 0x11, 0x2c, 0x5f, 0xfb, 0xae, 0x33, 0x8c, 0x52,
-    0x53, 0x05, 0x8b, 0xfe, 0x32, 0x7c, 0xfa, 0x9e, 0x91, 0x2c, 0x5f, 0xe2,
-    0xe9, 0xb0, 0xa2, 0x98, 0xf5, 0x8b, 0xff, 0xdf, 0x9e, 0x06, 0x39, 0xd4,
-    0x58, 0x40, 0x58, 0xbf, 0xf3, 0x10, 0xff, 0x3e, 0xce, 0x9c, 0x58, 0xbc,
-    0x2f, 0x71, 0x62, 0x9c, 0xf7, 0xb4, 0x81, 0x7f, 0x0d, 0xcd, 0x62, 0x02,
-    0xc5, 0xfd, 0xa6, 0x0a, 0x47, 0x2b, 0x17, 0x83, 0xdb, 0xa9, 0x62, 0xfd,
-    0x24, 0x01, 0x9d, 0x62, 0xff, 0x61, 0xcc, 0x8d, 0x3a, 0xc3, 0x81, 0x62,
-    0xf8, 0x07, 0x7e, 0x2c, 0x50, 0xcf, 0x8f, 0x48, 0x17, 0x00, 0xeb, 0x17,
-    0xa4, 0xbb, 0x58, 0xbf, 0x78, 0x33, 0x94, 0xac, 0x59, 0xf4, 0x7b, 0xdf,
-    0x18, 0x21, 0xdb, 0xff, 0xdf, 0xe9, 0x24, 0x08, 0xfc, 0x1e, 0x6b, 0xb5,
-    0x8b, 0xfc, 0xfa, 0x61, 0xb9, 0x1a, 0xb1, 0x74, 0xf9, 0x62, 0xff, 0x6d,
-    0xa9, 0xee, 0x0e, 0x75, 0x8b, 0xf9, 0xfa, 0xbd, 0x9d, 0x38, 0xb1, 0x4c,
-    0x7d, 0x3e, 0x36, 0xbf, 0xfc, 0x21, 0xbe, 0x83, 0x8b, 0xa8, 0x4c, 0x51,
-    0x2c, 0x5e, 0xd4, 0xc1, 0x62, 0xe2, 0x89, 0x62, 0xb0, 0xda, 0x88, 0x76,
-    0xa0, 0x9f, 0xeb, 0x99, 0xfd, 0x40, 0x06, 0x65, 0x08, 0x0e, 0x10, 0xfa,
-    0x10, 0xd7, 0xf0, 0x3f, 0x3a, 0x73, 0xac, 0x58, 0xeb, 0x17, 0x31, 0xd6,
-    0x2e, 0x7e, 0xa6, 0x35, 0x3d, 0x42, 0x56, 0xd2, 0xc5, 0xff, 0x72, 0x7a,
-    0x37, 0xe7, 0xb8, 0x96, 0x2b, 0x0f, 0x3e, 0x21, 0x2a, 0x94, 0x7c, 0xe9,
-    0x5d, 0xa1, 0x01, 0x7e, 0x8a, 0x7b, 0xf3, 0xac, 0x5e, 0xf0, 0x7b, 0x2c,
-    0x54, 0x9e, 0x56, 0x15, 0x5f, 0xf9, 0xb8, 0x1f, 0x42, 0x9f, 0x37, 0xd6,
-    0x2f, 0xf8, 0xa6, 0x2d, 0x34, 0x4d, 0xc5, 0x8b, 0x83, 0x3a, 0xc5, 0x41,
-    0x12, 0x9d, 0x10, 0x7a, 0x8e, 0xae, 0xf8, 0x16, 0x29, 0xcf, 0x35, 0x8d,
-    0x6f, 0xe9, 0x3b, 0x9a, 0xe1, 0x2c, 0x5f, 0xa6, 0x2e, 0x08, 0x96, 0x2f,
-    0xa2, 0xe0, 0x89, 0x62, 0xe6, 0x39, 0x87, 0x9b, 0x25, 0x37, 0xdb, 0x67,
-    0x0e, 0xb1, 0x7d, 0xdf, 0x27, 0xeb, 0x14, 0x33, 0xf5, 0xc2, 0xd7, 0x24,
-    0xbf, 0x6a, 0x7c, 0xfd, 0x16, 0x2f, 0xdb, 0x37, 0x18, 0x0b, 0x17, 0xfa,
-    0x64, 0xbc, 0x1f, 0x70, 0x58, 0xa7, 0x44, 0x43, 0x15, 0x08, 0xa6, 0xff,
-    0xe8, 0x8c, 0x0c, 0xa7, 0xa3, 0x74, 0x98, 0x96, 0x29, 0x62, 0xd1, 0x2c,
-    0x5f, 0xf9, 0xb6, 0x6e, 0x9c, 0x92, 0x6e, 0xa5, 0x8b, 0xff, 0x7b, 0x99,
-    0xc9, 0x2f, 0x60, 0x16, 0x2f, 0xbd, 0x9a, 0x89, 0x62, 0xf7, 0x9b, 0xa2,
-    0xc5, 0x61, 0xe1, 0xb1, 0x25, 0x4a, 0x28, 0x61, 0x08, 0x1b, 0xc7, 0xce,
-    0xa5, 0x8b, 0xba, 0x62, 0xc5, 0xe8, 0xf6, 0x35, 0x62, 0x4b, 0x9b, 0xf3,
-    0x72, 0x7a, 0x62, 0xc5, 0x0d, 0x39, 0xc8, 0xa1, 0xc9, 0xa2, 0x7f, 0x1c,
-    0xf4, 0x2f, 0xa9, 0x54, 0xb5, 0x89, 0x9a, 0x0c, 0x68, 0xeb, 0xee, 0xd4,
-    0xac, 0x57, 0x58, 0xcc, 0x55, 0xd8, 0xf6, 0x07, 0x63, 0x85, 0x56, 0x10,
-    0x9a, 0x5d, 0xb9, 0x77, 0x64, 0x6f, 0x08, 0xb8, 0xa5, 0x3e, 0xea, 0x36,
-    0x63, 0xbe, 0xfe, 0x30, 0x10, 0x10, 0x14, 0x3c, 0x7d, 0x0b, 0x5e, 0x92,
-    0xa2, 0x3a, 0x90, 0xae, 0xc2, 0x58, 0xbf, 0x05, 0x31, 0xf2, 0x75, 0x8b,
-    0xf8, 0xce, 0x7f, 0x1f, 0xcb, 0x17, 0xfe, 0xef, 0x9c, 0xcf, 0xbf, 0x05,
-    0xb2, 0xc5, 0x0d, 0x16, 0x78, 0x2c, 0xe5, 0x82, 0x2f, 0xb7, 0x6b, 0x17,
-    0xc1, 0xf4, 0x7e, 0xa5, 0x8b, 0xdd, 0x1f, 0xa9, 0x62, 0xfd, 0xfc, 0xea,
-    0x11, 0x18, 0x79, 0x61, 0x94, 0xdf, 0xe6, 0xf6, 0xc2, 0x8a, 0x63, 0xd6,
-    0x2f, 0xfe, 0xc3, 0x87, 0xd1, 0xbd, 0x87, 0x9e, 0x2c, 0x50, 0x11, 0x01,
-    0xc3, 0x9b, 0xfa, 0x4e, 0x3f, 0xcf, 0x16, 0x2e, 0x98, 0x2c, 0x50, 0xd3,
-    0x89, 0xc5, 0xe7, 0x86, 0x19, 0x11, 0xf0, 0xba, 0xfd, 0xdb, 0x7d, 0xe2,
-    0x58, 0xbf, 0x9d, 0xb4, 0x08, 0xec, 0x58, 0xbf, 0xfc, 0x64, 0xfc, 0xc0,
-    0xe2, 0x06, 0x6a, 0x7e, 0xb1, 0x5a, 0x45, 0x4f, 0x8a, 0xba, 0x8c, 0x2f,
-    0xe2, 0x17, 0xa2, 0x93, 0x56, 0x2f, 0x75, 0xef, 0xa5, 0x8a, 0x63, 0xd2,
-    0x11, 0x85, 0xff, 0xd8, 0xfd, 0xf3, 0xd3, 0xb1, 0xda, 0x0b, 0x17, 0xe9,
-    0x03, 0xf7, 0xc5, 0x8a, 0xc4, 0xc5, 0x5e, 0x10, 0xba, 0x21, 0x24, 0x6b,
-    0xfc, 0x2f, 0x7c, 0xa7, 0x34, 0xb1, 0x7e, 0x2c, 0xd8, 0x3e, 0x8b, 0x17,
-    0xd9, 0xb0, 0x7d, 0x16, 0x2f, 0x76, 0x36, 0x30, 0xf4, 0xc8, 0xb2, 0xfb,
-    0xbe, 0xa6, 0x25, 0x8a, 0x93, 0xda, 0x63, 0x4b, 0xff, 0xfa, 0x1f, 0x0f,
-    0xbf, 0x7d, 0xd8, 0x11, 0xd3, 0xac, 0x25, 0x8b, 0xfd, 0x3f, 0x73, 0x65,
-    0xfa, 0x2c, 0x50, 0xd1, 0x6a, 0xe4, 0x1f, 0x60, 0xbf, 0xfa, 0x4b, 0xdd,
-    0x45, 0x21, 0x77, 0x0e, 0x2c, 0x5d, 0xd6, 0xc7, 0xac, 0x5f, 0xff, 0x3e,
-    0x8c, 0xfc, 0xbf, 0xb8, 0x2d, 0xc5, 0x2b, 0x17, 0xcf, 0xb0, 0x23, 0xd6,
-    0x2d, 0xda, 0xc5, 0xe6, 0x6d, 0xd5, 0x24, 0xb9, 0x4b, 0x17, 0xfc, 0xfd,
-    0x3f, 0xbb, 0xf3, 0x06, 0xb1, 0x58, 0x88, 0x5d, 0xc4, 0xe2, 0x2a, 0xd0,
-    0x65, 0xfd, 0xe2, 0x9e, 0xa6, 0x3a, 0xc5, 0xf8, 0xa7, 0xa9, 0x8e, 0xb1,
-    0x6d, 0xcc, 0x3d, 0xaf, 0x18, 0x5e, 0xf4, 0x4c, 0xb1, 0x52, 0x79, 0x0e,
-    0x55, 0x7e, 0xf1, 0xb2, 0x50, 0x58, 0xbd, 0xe9, 0xd2, 0xc5, 0x1c, 0xf1,
-    0x88, 0xa6, 0xff, 0xb3, 0x51, 0xf8, 0x3c, 0xd7, 0x6b, 0x14, 0xe7, 0xbd,
-    0xd0, 0x86, 0xff, 0xd3, 0x0f, 0xb3, 0xf7, 0xc9, 0x35, 0x62, 0xfc, 0x0c,
-    0xd4, 0xfd, 0x62, 0xff, 0xa7, 0x92, 0x70, 0xf6, 0x9d, 0x96, 0x2b, 0x65,
-    0xd9, 0x68, 0x47, 0x2a, 0x32, 0xfc, 0x49, 0x34, 0x82, 0x25, 0x2d, 0x42,
-    0xb0, 0xf0, 0xe0, 0xfc, 0x31, 0x08, 0x8f, 0xc8, 0x1d, 0x45, 0x17, 0xff,
-    0x0b, 0x9f, 0x68, 0x19, 0xc1, 0xf9, 0xd6, 0x2f, 0x9b, 0x80, 0xc5, 0x8b,
-    0x9f, 0xda, 0x3e, 0x92, 0x47, 0xbf, 0xfd, 0xad, 0x8c, 0xe8, 0x2f, 0xcb,
-    0x9e, 0x46, 0xb1, 0x5f, 0x3f, 0xb6, 0x2c, 0xbb, 0x5e, 0x58, 0xbf, 0xff,
-    0x75, 0x40, 0xcf, 0x7d, 0xce, 0x64, 0x70, 0xbe, 0xfa, 0x58, 0xbd, 0xad,
-    0x3a, 0xc5, 0xf0, 0xfe, 0x23, 0xac, 0x54, 0xa2, 0xe7, 0x06, 0x1d, 0x80,
-    0x43, 0xb7, 0xf0, 0xfb, 0x9d, 0x3f, 0x6b, 0x17, 0xde, 0xdb, 0x02, 0x58,
-    0xa8, 0x22, 0x3d, 0xce, 0x88, 0xc2, 0xff, 0xf9, 0xb5, 0xb7, 0x9e, 0x3f,
-    0x36, 0x68, 0xa6, 0x3d, 0x62, 0xf6, 0x47, 0xca, 0xc5, 0x44, 0x7e, 0xfe,
-    0x58, 0xbe, 0x37, 0x59, 0xc5, 0x8a, 0x93, 0xc7, 0x72, 0x3b, 0xff, 0x49,
-    0x4f, 0xcc, 0x11, 0x0b, 0x75, 0x8b, 0xd1, 0x1f, 0x16, 0x2e, 0x10, 0x4b,
-    0x17, 0x84, 0xdc, 0x58, 0xbf, 0xfe, 0xd0, 0xe7, 0xed, 0x14, 0xc7, 0xfb,
-    0x3a, 0x71, 0x62, 0xf1, 0xca, 0x25, 0x8b, 0xc2, 0x68, 0x96, 0x2e, 0x21,
-    0xac, 0x54, 0xa2, 0xa7, 0x15, 0xa2, 0x1e, 0x61, 0xeb, 0xf4, 0x81, 0xbb,
-    0xe2, 0xc5, 0xee, 0xf0, 0x0b, 0x16, 0x02, 0xc5, 0xd1, 0x02, 0x4d, 0x87,
-    0x63, 0xd7, 0xa3, 0x98, 0x96, 0x2a, 0x4f, 0x37, 0xc5, 0xd7, 0x89, 0xc0,
-    0xb1, 0x7f, 0xc3, 0x62, 0x03, 0x0c, 0x51, 0xeb, 0x17, 0xb3, 0xdc, 0x58,
-    0xa9, 0x3f, 0x5c, 0x1c, 0xe1, 0xe5, 0xff, 0xc4, 0x3e, 0xa8, 0xb2, 0x0f,
-    0xa9, 0xd9, 0x62, 0xfd, 0x2f, 0x07, 0xe8, 0xb1, 0x73, 0x1a, 0xb1, 0x7f,
-    0xf4, 0x91, 0xa6, 0x4e, 0xde, 0x9e, 0x9c, 0x58, 0xa8, 0xf3, 0xe1, 0xf8,
-    0xc5, 0x7d, 0x15, 0xfe, 0x84, 0x55, 0x4a, 0x64, 0x0d, 0x0f, 0x8b, 0x84,
-    0x75, 0x8a, 0x82, 0xe3, 0x00, 0xc8, 0x31, 0x02, 0x3c, 0x7a, 0x21, 0x9f,
-    0xc3, 0x18, 0x07, 0x65, 0x0a, 0x6f, 0x42, 0x5b, 0xa4, 0x69, 0xbd, 0x44,
-    0xf7, 0xdb, 0x08, 0x6e, 0xb1, 0x7f, 0xc3, 0x62, 0x00, 0x67, 0x29, 0x58,
-    0xa9, 0x3d, 0xdc, 0x24, 0xbe, 0x62, 0x1f, 0x52, 0xc5, 0xfe, 0x2c, 0x81,
-    0x9f, 0x98, 0xf5, 0x8b, 0xfe, 0x14, 0x78, 0x7f, 0x29, 0xe9, 0xc5, 0x8a,
-    0x8f, 0x44, 0xe1, 0xc9, 0x7e, 0x6f, 0x4b, 0x17, 0xee, 0x7b, 0x53, 0xc5,
-    0x8b, 0x4f, 0x66, 0xd7, 0xc1, 0x97, 0xfc, 0x0e, 0x6a, 0x7b, 0x83, 0x9d,
-    0x62, 0xff, 0xdc, 0x9e, 0x9a, 0x9e, 0xe0, 0xe7, 0x58, 0xbd, 0xe6, 0xe8,
-    0xb1, 0x7e, 0xd8, 0x51, 0x4c, 0x7a, 0xc5, 0xf0, 0xa2, 0x98, 0xf5, 0x8b,
-    0x9b, 0x63, 0x0f, 0x57, 0x62, 0xea, 0x94, 0xc8, 0x5c, 0xed, 0x90, 0x84,
-    0xe9, 0x7f, 0x03, 0x92, 0x76, 0xf2, 0xc5, 0xfe, 0x98, 0xb9, 0x27, 0x6f,
-    0x2c, 0x5a, 0x5c, 0xf8, 0xba, 0x17, 0x5f, 0xf3, 0xf2, 0x27, 0x2f, 0x48,
-    0x16, 0x2f, 0xc0, 0xe3, 0x10, 0x16, 0x2f, 0xfe, 0x1b, 0x76, 0x71, 0x17,
-    0xbf, 0x90, 0x58, 0xa9, 0x3e, 0xe7, 0x28, 0xbf, 0xfe, 0x91, 0x87, 0x17,
-    0x3f, 0x3e, 0xe6, 0x14, 0x4b, 0x17, 0xff, 0x17, 0xba, 0x4e, 0xb8, 0xc5,
-    0x31, 0xeb, 0x17, 0xf3, 0x3e, 0xc6, 0x1f, 0x16, 0x2a, 0x0a, 0x95, 0xb5,
-    0x09, 0xd3, 0x94, 0x7e, 0x14, 0xe4, 0x41, 0xc5, 0x3f, 0x24, 0x5f, 0xe9,
-    0x8f, 0xe4, 0x9d, 0xbc, 0xb1, 0x73, 0x12, 0xc5, 0xff, 0x48, 0x0c, 0xfc,
-    0x9d, 0x89, 0x62, 0xbb, 0x3c, 0xfe, 0x82, 0xd7, 0xff, 0xd8, 0x30, 0xe2,
-    0xe7, 0xbf, 0x83, 0x17, 0xb8, 0xb1, 0x7f, 0x45, 0x91, 0xec, 0x40, 0x58,
-    0xa8, 0x26, 0x5f, 0xa8, 0x42, 0xfc, 0x97, 0xca, 0x97, 0x39, 0xd6, 0x2f,
-    0xe9, 0x09, 0xfe, 0x28, 0xf5, 0x8b, 0xba, 0xbe, 0xb1, 0x7f, 0x77, 0x0e,
-    0x31, 0x76, 0xb1, 0x52, 0xbc, 0xf7, 0x06, 0x8c, 0x97, 0x3c, 0xf1, 0xcf,
-    0x44, 0x87, 0xa1, 0x73, 0x99, 0x06, 0x37, 0x70, 0xa2, 0x58, 0xbf, 0xe8,
-    0x8c, 0xd4, 0xf7, 0x07, 0x3a, 0xc5, 0xff, 0x06, 0x53, 0xe7, 0xd3, 0x9d,
-    0x62, 0xf1, 0x39, 0xab, 0x17, 0x89, 0x80, 0x61, 0xeb, 0x61, 0xcd, 0x44,
-    0x8d, 0xe2, 0x19, 0xf4, 0x24, 0xef, 0xfc, 0x5e, 0xf7, 0xf0, 0x62, 0xf7,
-    0x16, 0x2c, 0x35, 0x8b, 0x74, 0x93, 0xd2, 0xc4, 0x0b, 0xd8, 0xe7, 0x58,
-    0xbf, 0x84, 0x07, 0x27, 0x8f, 0x58, 0xbf, 0xff, 0xe8, 0xec, 0xf0, 0x7d,
-    0x1b, 0xc1, 0xec, 0xff, 0x2c, 0x1b, 0x1d, 0x62, 0x86, 0x89, 0xef, 0x18,
-    0x5d, 0x27, 0x58, 0xbe, 0x06, 0x74, 0x95, 0x8a, 0x94, 0xf1, 0xf2, 0x10,
-    0xfb, 0x94, 0x3c, 0x2e, 0xb4, 0x46, 0xc2, 0xf7, 0xe2, 0x8b, 0xce, 0x6a,
-    0xc5, 0xd3, 0x05, 0x8b, 0xe2, 0x89, 0xce, 0xb1, 0x7c, 0x31, 0x7b, 0x8b,
-    0x17, 0xe7, 0x18, 0x8b, 0x16, 0x2f, 0xd2, 0x3f, 0xb7, 0x6b, 0x17, 0xfd,
-    0xf8, 0x67, 0x98, 0x01, 0xf6, 0xb1, 0x7d, 0xef, 0xe4, 0x0c, 0x3e, 0x57,
-    0x29, 0xa7, 0x47, 0x4c, 0x44, 0x85, 0x08, 0xca, 0x94, 0xe0, 0x5c, 0xa9,
-    0x85, 0xc5, 0x18, 0x65, 0xfd, 0xa8, 0xb0, 0xa4, 0xeb, 0x16, 0xe8, 0xb1,
-    0x58, 0x78, 0x4e, 0x5d, 0x74, 0xc4, 0xb1, 0x7f, 0xf8, 0x5b, 0x69, 0xce,
-    0xfe, 0xe4, 0xeb, 0xa2, 0xc5, 0x41, 0x10, 0xda, 0x20, 0x21, 0x8b, 0xf0,
-    0x27, 0x7c, 0x3a, 0xc5, 0xfe, 0xcd, 0xb9, 0x31, 0x0b, 0x4b, 0x17, 0xd8,
-    0xcf, 0xb2, 0xc5, 0xd3, 0xe5, 0x8a, 0x39, 0xb9, 0x22, 0x2a, 0x74, 0x73,
-    0xe8, 0xbc, 0x8a, 0x78, 0xdf, 0x74, 0x31, 0x62, 0xfd, 0xc3, 0x74, 0xc1,
-    0x2c, 0x5d, 0x9d, 0xac, 0x5e, 0x29, 0x3a, 0xc5, 0xff, 0xff, 0x98, 0xbb,
-    0x0c, 0x86, 0xc7, 0x7e, 0x9e, 0xe1, 0x4f, 0xdf, 0xa2, 0xc5, 0x0d, 0x19,
-    0xfb, 0x95, 0xe8, 0x63, 0xa8, 0x72, 0x96, 0x2f, 0x47, 0xe4, 0x16, 0x2f,
-    0xf4, 0x80, 0xed, 0x00, 0xce, 0xb1, 0x7d, 0x11, 0x48, 0xd6, 0x2f, 0x88,
-    0x7f, 0x95, 0x8b, 0x9f, 0xa1, 0x87, 0x8a, 0x22, 0x3b, 0xd1, 0xa0, 0xbe,
-    0xb1, 0x5f, 0x46, 0x6f, 0x1e, 0xbc, 0x61, 0x5d, 0xa6, 0x3a, 0xf0, 0xed,
-    0xbf, 0xcd, 0xa8, 0xb3, 0xdd, 0x5d, 0x16, 0x2e, 0x07, 0x16, 0x2f, 0x0f,
-    0x8e, 0xb1, 0x52, 0x6d, 0x58, 0x62, 0xa5, 0x5a, 0x10, 0xce, 0xf2, 0x1c,
-    0xdf, 0x41, 0x68, 0xca, 0x44, 0x52, 0x13, 0x7d, 0xf3, 0x7d, 0xb6, 0x58,
-    0xbf, 0x7c, 0x46, 0xe1, 0x2c, 0x5e, 0x09, 0xa0, 0xb1, 0x7e, 0x89, 0x80,
-    0xdb, 0xac, 0x5f, 0x6b, 0xc5, 0x2b, 0x15, 0x87, 0x98, 0xc5, 0x57, 0xf8,
-    0x22, 0x6f, 0x41, 0x86, 0xb1, 0x74, 0x73, 0xac, 0x5a, 0x3d, 0x62, 0xdb,
-    0x2c, 0x50, 0x8d, 0x40, 0x62, 0xb7, 0xc1, 0xed, 0x3f, 0x58, 0xa2, 0x3c,
-    0x7f, 0x11, 0x5c, 0x46, 0xac, 0x5e, 0xf3, 0x9a, 0xb1, 0x6c, 0xc3, 0x6d,
-    0xe1, 0x8b, 0xfe, 0x9f, 0xf1, 0xbd, 0x3a, 0xea, 0x58, 0xbf, 0xf1, 0xd8,
-    0x61, 0xc5, 0x09, 0x2e, 0xd6, 0x28, 0x67, 0xfc, 0xe7, 0x97, 0xf0, 0xbf,
-    0x3a, 0xc0, 0x2c, 0x5e, 0xe9, 0x3a, 0x58, 0xbe, 0xd0, 0x03, 0xe8, 0xb1,
-    0x79, 0xc2, 0xf2, 0xc5, 0x41, 0x12, 0x4e, 0x5d, 0xf1, 0xfe, 0x13, 0xdf,
-    0x9b, 0x51, 0xf3, 0x12, 0xc5, 0x6c, 0xae, 0xa0, 0x64, 0x78, 0x53, 0xbb,
-    0x57, 0x64, 0x0e, 0x69, 0x14, 0x22, 0x74, 0xaf, 0xf8, 0x51, 0xfa, 0x16,
-    0x7d, 0x0f, 0x2f, 0xf1, 0x7b, 0x38, 0xed, 0xf5, 0x8b, 0xee, 0x43, 0x8c,
-    0xb1, 0x7f, 0xc0, 0x7f, 0xe6, 0x9a, 0x2e, 0x2c, 0x5e, 0x31, 0xbe, 0xb1,
-    0x7f, 0xfd, 0x02, 0x9d, 0x83, 0x8b, 0x9f, 0xce, 0xad, 0x01, 0x62, 0xf4,
-    0x07, 0xd1, 0x62, 0xa4, 0xfd, 0xd9, 0x5e, 0xfe, 0x30, 0xf9, 0xe6, 0xf2,
-    0xc5, 0xfd, 0xf7, 0x1b, 0xeb, 0x75, 0x8a, 0x58, 0xbe, 0x62, 0xee, 0x0b,
-    0x15, 0xb9, 0xaf, 0xf8, 0x65, 0xb9, 0x88, 0xaf, 0xdc, 0xbd, 0x97, 0xaf,
-    0x77, 0x17, 0x16, 0x2b, 0xb3, 0xd5, 0x63, 0x5b, 0xd2, 0xe3, 0x58, 0xbf,
-    0xbe, 0xfe, 0x29, 0x3a, 0xc5, 0xff, 0x16, 0xed, 0xfe, 0xe1, 0x9e, 0x58,
-    0xa8, 0x8f, 0xa1, 0x8b, 0x6a, 0x55, 0x88, 0x0c, 0xcb, 0xb2, 0x37, 0x3a,
-    0x3c, 0x25, 0x5a, 0x32, 0x4e, 0x11, 0x0a, 0x10, 0x97, 0xf0, 0x50, 0x7e,
-    0x08, 0xeb, 0x17, 0xa7, 0x98, 0xb1, 0x58, 0x79, 0x86, 0x98, 0x5d, 0xd3,
-    0x8b, 0x17, 0xf0, 0xb9, 0x31, 0x0b, 0x4b, 0x17, 0xec, 0xdb, 0x3f, 0xc5,
-    0x8a, 0x93, 0xf3, 0xf8, 0xd1, 0x18, 0x5f, 0xfc, 0x26, 0xe8, 0xff, 0xe0,
-    0xa3, 0x85, 0xa5, 0x8b, 0xfc, 0x30, 0xfe, 0xc0, 0x14, 0x4b, 0x15, 0x04,
-    0x41, 0x32, 0x5d, 0xfe, 0x04, 0x81, 0x88, 0x58, 0xb1, 0x7c, 0x3f, 0xc9,
-    0xab, 0x17, 0xc7, 0x14, 0x5a, 0x58, 0xbb, 0x5c, 0x58, 0xbf, 0xf6, 0x70,
-    0xcf, 0xcb, 0x90, 0xb6, 0x58, 0xac, 0x3d, 0x82, 0x18, 0xad, 0xd3, 0xc4,
-    0xee, 0x15, 0xee, 0x45, 0xa3, 0x23, 0x92, 0x74, 0x7d, 0xbf, 0xe0, 0x48,
-    0x03, 0xe9, 0x25, 0xd4, 0xb1, 0x7f, 0xfd, 0x3e, 0x9f, 0xbf, 0xa0, 0xfa,
-    0xdf, 0xf2, 0xb1, 0x7f, 0x86, 0x63, 0x74, 0xc2, 0x1a, 0xc5, 0x6c, 0x88,
-    0x66, 0x50, 0xba, 0x4e, 0xb1, 0x52, 0xae, 0xe3, 0x25, 0x2c, 0xbb, 0x03,
-    0x43, 0x14, 0x44, 0x77, 0x6c, 0x35, 0x8b, 0xfe, 0x98, 0xbc, 0xe3, 0xc2,
-    0x89, 0x62, 0xff, 0xff, 0xb5, 0xde, 0xef, 0xd9, 0x86, 0xb1, 0x9c, 0xfb,
-    0x6f, 0x24, 0x35, 0x8b, 0xfe, 0x6e, 0x07, 0xee, 0xf7, 0x73, 0xac, 0x5b,
-    0xf2, 0x8a, 0xb1, 0x37, 0x5f, 0x39, 0xb1, 0xd8, 0xb1, 0x7f, 0x07, 0xe9,
-    0xd8, 0xbb, 0x58, 0xbf, 0xfe, 0xdf, 0xed, 0x10, 0x71, 0x41, 0xcb, 0x0f,
-    0x2b, 0x17, 0x89, 0xce, 0xb1, 0x5a, 0x46, 0x30, 0x09, 0x88, 0xc7, 0xca,
-    0x77, 0xf9, 0xfc, 0x58, 0x6e, 0x7d, 0x62, 0xf4, 0x7b, 0x1d, 0x62, 0xbc,
-    0x7a, 0x7d, 0x46, 0x77, 0x73, 0x8b, 0x17, 0xff, 0x7b, 0x81, 0xf3, 0x08,
-    0x5e, 0x9f, 0xac, 0x5f, 0xd2, 0xc5, 0xec, 0x25, 0x8a, 0xc3, 0xf1, 0x24,
-    0x6b, 0xf8, 0xcf, 0x4e, 0xd3, 0x12, 0xc5, 0xfb, 0x91, 0xf3, 0xa3, 0x56,
-    0x2d, 0x26, 0x9e, 0xf7, 0x66, 0x37, 0xf3, 0x44, 0xfa, 0x9d, 0x96, 0x2e,
-    0x9d, 0x96, 0x2b, 0xe7, 0x8f, 0xd4, 0x5f, 0x7f, 0xe1, 0x7f, 0xef, 0x9e,
-    0x62, 0x02, 0xc5, 0xfb, 0xa8, 0xf3, 0x9e, 0x58, 0xbf, 0xf8, 0x3f, 0x42,
-    0x46, 0xc5, 0x9e, 0x02, 0xc5, 0xf7, 0xa7, 0x3e, 0xb1, 0x7f, 0x9f, 0xa7,
-    0x70, 0xce, 0xa8, 0x2c, 0x56, 0x23, 0x33, 0x45, 0x6c, 0x8a, 0x44, 0x57,
-    0x61, 0xd6, 0x2a, 0x57, 0x65, 0xe0, 0x32, 0x38, 0x72, 0xe4, 0x3b, 0x9e,
-    0x11, 0xfa, 0x25, 0x3c, 0x22, 0x7e, 0xfc, 0xce, 0x1e, 0x25, 0x14, 0x61,
-    0x5d, 0x0e, 0xaf, 0xdd, 0x4e, 0x79, 0xe2, 0xc5, 0xf4, 0xf7, 0x3e, 0x58,
-    0xbd, 0x9a, 0xe2, 0xc5, 0x9a, 0x23, 0xc0, 0xe8, 0x47, 0x7e, 0xd8, 0x3e,
-    0x8d, 0x05, 0x8a, 0x1a, 0x30, 0x8e, 0xd6, 0x45, 0x57, 0xba, 0x60, 0xd6,
-    0x2c, 0x12, 0xc5, 0xf3, 0x78, 0x52, 0xb1, 0x7b, 0x8c, 0x75, 0x8b, 0xc4,
-    0xe7, 0x58, 0xb6, 0xcb, 0x14, 0xc6, 0xbc, 0x31, 0xcb, 0xd1, 0xe2, 0x3a,
-    0xc5, 0xf4, 0x24, 0x86, 0xb1, 0x6e, 0x18, 0x78, 0x6e, 0x43, 0x58, 0x8f,
-    0xa3, 0x48, 0xbe, 0x99, 0xd1, 0x92, 0xf4, 0x5c, 0x95, 0x8b, 0xed, 0x02,
-    0x3b, 0x16, 0x2f, 0xff, 0xa4, 0xa4, 0x06, 0x3f, 0xe1, 0x3e, 0x61, 0xac,
-    0x51, 0xa8, 0x93, 0x61, 0xee, 0xa2, 0x6b, 0xfc, 0xc6, 0xeb, 0x3a, 0x48,
-    0x16, 0x2e, 0x8b, 0x16, 0x29, 0x62, 0xfb, 0xdf, 0x68, 0x98, 0xd2, 0x70,
-    0x62, 0xff, 0xa3, 0xd8, 0x80, 0xe6, 0xb7, 0x6b, 0x15, 0x27, 0xeb, 0x87,
-    0x17, 0xfe, 0x73, 0x87, 0xf7, 0xf6, 0x74, 0x89, 0x62, 0xfe, 0x07, 0x60,
-    0xcd, 0x62, 0xc5, 0xfa, 0x5f, 0xcf, 0x05, 0x8b, 0xf6, 0x1a, 0x6b, 0x8d,
-    0x62, 0xb7, 0x3d, 0x12, 0x27, 0xbf, 0x47, 0x0b, 0xef, 0xa5, 0x8b, 0xe1,
-    0x7d, 0xf4, 0xb1, 0x46, 0x1e, 0x7c, 0x71, 0x65, 0xe9, 0xcf, 0x2c, 0x5f,
-    0x72, 0x75, 0x05, 0x8b, 0xf6, 0x6b, 0x42, 0xd9, 0x62, 0xc0, 0x39, 0xf4,
-    0xf0, 0x73, 0xc4, 0x74, 0x74, 0x62, 0x34, 0x23, 0xea, 0x53, 0xdc, 0xc8,
-    0x40, 0x3c, 0x66, 0xb7, 0xc3, 0xfb, 0x76, 0xb1, 0x7e, 0xfb, 0xeb, 0xee,
-    0xb1, 0x73, 0x92, 0xc5, 0x61, 0xbe, 0x01, 0x45, 0xef, 0xcf, 0x16, 0x2e,
-    0x07, 0x0c, 0x37, 0xb2, 0x41, 0x52, 0x8c, 0xc6, 0x84, 0xfd, 0xf7, 0xb9,
-    0x9b, 0x2c, 0x5f, 0xff, 0xef, 0xbf, 0x46, 0x03, 0xc2, 0x7a, 0x31, 0xe7,
-    0xfd, 0x4c, 0xb1, 0x5d, 0xa2, 0x2b, 0xe4, 0x97, 0x66, 0xcb, 0x14, 0xc6,
-    0xf0, 0x89, 0x2a, 0x57, 0xdf, 0xa0, 0x5e, 0x31, 0xfc, 0x8c, 0x35, 0xe1,
-    0xa5, 0x1e, 0x67, 0x14, 0x33, 0xf4, 0x41, 0xf9, 0x43, 0xe5, 0x18, 0x2f,
-    0x21, 0xd9, 0x7f, 0xf8, 0x66, 0x4f, 0xcc, 0xfb, 0xeb, 0x21, 0xd1, 0x62,
-    0xf3, 0x44, 0x25, 0x8b, 0x69, 0x8f, 0xb7, 0xa9, 0x3e, 0xe6, 0x1a, 0xc5,
-    0x39, 0xe0, 0xb1, 0x55, 0xff, 0xf9, 0xf9, 0x83, 0xdf, 0xef, 0xec, 0x88,
-    0xa4, 0xeb, 0x17, 0xff, 0x7d, 0x88, 0x19, 0x1f, 0x83, 0x9f, 0xac, 0x56,
-    0xe8, 0x9c, 0x75, 0x6b, 0xff, 0xce, 0x73, 0x27, 0xe6, 0x61, 0x4b, 0x8d,
-    0x62, 0xa2, 0x4c, 0xa7, 0xf0, 0xbc, 0x22, 0x3b, 0x47, 0x2c, 0x5d, 0x10,
-    0x16, 0x2f, 0xa6, 0x21, 0x6c, 0xb1, 0x47, 0x3d, 0x36, 0x15, 0xf0, 0xcd,
-    0xc0, 0xdd, 0x62, 0xce, 0xb1, 0x6e, 0x2c, 0x58, 0xde, 0x1b, 0xcf, 0x0c,
-    0x88, 0x46, 0xf4, 0xe6, 0x96, 0x2f, 0xb3, 0xd8, 0x75, 0x8a, 0x19, 0xbe,
-    0x61, 0xcb, 0xdf, 0x17, 0x16, 0x2b, 0x63, 0x7c, 0x69, 0x05, 0xfb, 0xef,
-    0xa9, 0xfa, 0xc5, 0x3a, 0x3f, 0x1a, 0x16, 0x22, 0x23, 0xbc, 0x06, 0xdd,
-    0x62, 0xff, 0xde, 0x60, 0x19, 0xe2, 0x60, 0x71, 0x62, 0xf7, 0x8a, 0x56,
-    0x28, 0x8f, 0x70, 0x24, 0x0b, 0xfc, 0x58, 0xfa, 0xcf, 0x4a, 0xc5, 0xfd,
-    0x8f, 0xac, 0xf4, 0xac, 0x5e, 0x29, 0xf9, 0x87, 0xba, 0x46, 0x37, 0xfa,
-    0x7d, 0xc3, 0x06, 0xc1, 0x2c, 0x56, 0x23, 0x9c, 0x4f, 0xfd, 0x0c, 0xaf,
-    0xff, 0x9b, 0xb8, 0x07, 0xc0, 0x60, 0xb7, 0x92, 0x02, 0xc5, 0xf8, 0x78,
-    0x79, 0x1a, 0xc5, 0x9b, 0x47, 0xf6, 0x4a, 0x77, 0xfd, 0xf8, 0x9b, 0xee,
-    0x76, 0x1a, 0xc5, 0xe8, 0xb9, 0x2b, 0x14, 0xe7, 0xb0, 0x11, 0xd5, 0xff,
-    0xf7, 0xce, 0xc0, 0x9f, 0x87, 0xc7, 0x04, 0xfd, 0x62, 0xff, 0xf6, 0x80,
-    0xc3, 0x33, 0x3f, 0x25, 0xb7, 0x52, 0xc5, 0xf8, 0x9b, 0x69, 0xf2, 0xc5,
-    0x3a, 0x32, 0x3e, 0xa3, 0xc4, 0xfb, 0xf6, 0xcd, 0xcc, 0x82, 0xc5, 0xff,
-    0xf0, 0xd8, 0xe6, 0x3f, 0xfa, 0x49, 0x01, 0x86, 0xb1, 0x7f, 0xfc, 0x3c,
-    0xe8, 0xda, 0x88, 0x38, 0x37, 0x98, 0xeb, 0x17, 0x64, 0x7a, 0xc5, 0x4a,
-    0x3a, 0x70, 0xa5, 0xd4, 0xb4, 0xa9, 0x7f, 0xc1, 0x97, 0x21, 0x85, 0x9d,
-    0xac, 0x5f, 0x00, 0xef, 0xc5, 0x8b, 0xfe, 0x14, 0x46, 0x3f, 0xcb, 0x3b,
-    0x58, 0xb3, 0x76, 0x7b, 0xe0, 0x23, 0xb1, 0xab, 0x17, 0xff, 0xff, 0xdd,
-    0xbf, 0xc6, 0x53, 0xd5, 0x3d, 0xe7, 0x46, 0xf6, 0x7c, 0xb3, 0xdf, 0x75,
-    0x8b, 0xec, 0xe8, 0x39, 0x58, 0xba, 0x49, 0x62, 0xb4, 0x6e, 0xb8, 0x49,
-    0x7f, 0x3f, 0xa6, 0x26, 0xe8, 0xb1, 0x52, 0xbd, 0x4f, 0xb4, 0x6c, 0x3b,
-    0xc2, 0xb3, 0xb7, 0xe8, 0xa1, 0xd5, 0xa8, 0xc6, 0x0e, 0x75, 0xf8, 0x4c,
-    0x80, 0xa0, 0x84, 0xfd, 0x0b, 0xbe, 0x84, 0x37, 0xff, 0x16, 0xc7, 0x9e,
-    0x93, 0xa8, 0x4f, 0x45, 0x8b, 0xff, 0xd3, 0xad, 0xdc, 0x2d, 0x4f, 0x70,
-    0x73, 0xac, 0x5f, 0xce, 0x13, 0x45, 0x27, 0x58, 0xbd, 0xd5, 0x3c, 0x58,
-    0xa6, 0x47, 0x2f, 0x12, 0x7c, 0x9a, 0x22, 0xfb, 0x46, 0x75, 0x8f, 0xb9,
-    0xed, 0xd6, 0x9b, 0x46, 0x89, 0x31, 0xb4, 0x2b, 0xba, 0xe1, 0x34, 0x6b,
-    0x18, 0x9a, 0x64, 0xc6, 0xd1, 0xf2, 0x42, 0x3c, 0x41, 0xca, 0x0b, 0xc9,
-    0xdd, 0x6d, 0xe3, 0xa5, 0xee, 0x36, 0x97, 0x9d, 0x4c, 0x8f, 0x8c, 0x52,
-    0x29, 0xf3, 0x7d, 0x4b, 0x25, 0x3c, 0x7c, 0x1f, 0x9d, 0x32, 0x69, 0xc1,
-    0x70, 0x4b, 0xbd, 0x29, 0xc8, 0x5e, 0x4e, 0xf5, 0xfa, 0x92, 0x00, 0x29,
-    0x52, 0x9d, 0x21, 0x13, 0x1d, 0x1b, 0x30, 0x73, 0xdb, 0x5d, 0x51, 0xd8,
-    0xdf, 0xb5, 0xbb, 0x36, 0xea, 0x92, 0x70, 0xbf, 0xbe, 0xe7, 0x26, 0x35,
-    0x62, 0xd1, 0x98, 0x7c, 0xae, 0x6f, 0x7a, 0x35, 0x7a, 0x35, 0x2c, 0x5d,
-    0xd7, 0x23, 0x96, 0x2f, 0xe9, 0x3e, 0x75, 0x4f, 0x96, 0x2f, 0xbf, 0x24,
-    0x6a, 0xc5, 0xf4, 0xef, 0x3f, 0x58, 0xbf, 0x48, 0x52, 0x52, 0xb1, 0x47,
-    0x44, 0xef, 0x8c, 0x03, 0x23, 0xea, 0x23, 0xb8, 0xfe, 0x58, 0xbf, 0xf0,
-    0x59, 0xd1, 0xfd, 0x38, 0x50, 0x58, 0xb8, 0x03, 0x58, 0xa1, 0x9f, 0x86,
-    0x0c, 0x12, 0x05, 0xee, 0x07, 0x05, 0x8b, 0xfe, 0xfb, 0x17, 0x9a, 0x0e,
-    0x05, 0x8a, 0xc3, 0xd7, 0x71, 0xfb, 0xfe, 0xd3, 0x73, 0xf9, 0x85, 0xba,
-    0xc5, 0xfc, 0x2e, 0x67, 0x83, 0xd9, 0x62, 0x9c, 0xfa, 0xbe, 0x73, 0x7d,
-    0x0e, 0x67, 0x96, 0x2f, 0xb5, 0xac, 0xe2, 0xc5, 0xf9, 0xbb, 0xfc, 0xf4,
-    0x58, 0xae, 0xcf, 0xc4, 0xe4, 0x7d, 0x08, 0xef, 0xff, 0xdf, 0x17, 0xb5,
-    0x3e, 0xe6, 0x6f, 0xc9, 0xd6, 0xeb, 0x17, 0xc2, 0xea, 0x68, 0x96, 0x2f,
-    0xf3, 0x9b, 0x90, 0x90, 0x71, 0x62, 0xa0, 0x7b, 0x7c, 0x27, 0xbc, 0x39,
-    0x3a, 0xc5, 0xf8, 0x5c, 0xfb, 0x84, 0xb1, 0x7f, 0x79, 0xf7, 0x71, 0xca,
-    0xc5, 0xe2, 0x98, 0x2c, 0x54, 0x9e, 0x53, 0x17, 0x5b, 0x4b, 0x17, 0xff,
-    0xd1, 0x13, 0xf3, 0xd2, 0x1b, 0xea, 0x29, 0xfa, 0xc5, 0xcd, 0xe5, 0x8a,
-    0x81, 0xfd, 0xe0, 0x93, 0x29, 0x50, 0xd3, 0x59, 0x34, 0x77, 0x4e, 0x9e,
-    0x84, 0xdd, 0xec, 0xe3, 0xac, 0x5f, 0xe9, 0xf4, 0xb9, 0x07, 0xc5, 0x8a,
-    0xc3, 0xcf, 0xd0, 0xe5, 0xfb, 0x39, 0x39, 0xb2, 0xc5, 0xfe, 0x2d, 0xe2,
-    0x83, 0xea, 0x0b, 0x17, 0xff, 0xde, 0xe0, 0x7c, 0xf3, 0xc9, 0x78, 0x98,
-    0x0b, 0x17, 0x1b, 0xb2, 0xc5, 0x4a, 0x28, 0x30, 0xd8, 0xd5, 0x0b, 0xfb,
-    0xb8, 0x49, 0xc5, 0x12, 0xc5, 0xfc, 0x71, 0xcf, 0x04, 0x4b, 0x17, 0xa1,
-    0x27, 0x58, 0xbf, 0xde, 0x86, 0x1a, 0xc4, 0x05, 0x8b, 0xbe, 0xeb, 0x15,
-    0xd9, 0xf4, 0x38, 0xef, 0x8d, 0x2f, 0xff, 0x98, 0x06, 0x07, 0x3b, 0x99,
-    0x14, 0x27, 0x5b, 0x2c, 0x54, 0xa6, 0x9a, 0xe6, 0x2d, 0x09, 0x62, 0x2f,
-    0xbf, 0x36, 0xbc, 0x52, 0xb1, 0x7c, 0x28, 0x84, 0x6a, 0xc5, 0xfd, 0xbc,
-    0xf1, 0xbb, 0x02, 0xc5, 0xf3, 0x44, 0xde, 0x58, 0xad, 0xd1, 0x41, 0x11,
-    0x39, 0x13, 0x06, 0x61, 0x7f, 0xff, 0xf1, 0x8d, 0xf8, 0xc2, 0xcd, 0x60,
-    0x01, 0x91, 0x70, 0x51, 0x14, 0x9d, 0x62, 0xfb, 0x86, 0x70, 0x35, 0x8b,
-    0xff, 0xb3, 0xa6, 0x0f, 0x52, 0xf0, 0x6e, 0x2c, 0x57, 0x67, 0xd7, 0xa2,
-    0x6a, 0x74, 0xc1, 0x5a, 0x1c, 0x57, 0xef, 0x77, 0x09, 0x09, 0x62, 0xfe,
-    0x60, 0xf3, 0xa4, 0xf1, 0x62, 0xb0, 0xf6, 0xc4, 0x57, 0x7f, 0xf7, 0xdc,
-    0x3f, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xf8, 0xa0, 0x59, 0x80, 0x58, 0xbf,
-    0xee, 0xf8, 0x58, 0x3f, 0xb0, 0x4b, 0x17, 0xdc, 0x7f, 0x4a, 0xc5, 0x4a,
-    0x22, 0x5c, 0xb1, 0x8e, 0xef, 0xff, 0xb3, 0x6c, 0xef, 0xdc, 0x72, 0x90,
-    0x31, 0xd6, 0x2b, 0x13, 0x4b, 0x36, 0x19, 0xdc, 0x2d, 0xbf, 0x3e, 0xcc,
-    0x40, 0x58, 0xbf, 0xf6, 0x7e, 0x75, 0x91, 0x81, 0x04, 0x12, 0x45, 0xce,
-    0x12, 0xc5, 0xdb, 0x46, 0x46, 0xa6, 0x6a, 0xf4, 0x6b, 0x2a, 0x98, 0x5f,
-    0x6d, 0x0b, 0x18, 0x42, 0x10, 0x70, 0x8a, 0xc8, 0x49, 0x6e, 0x65, 0xdc,
-    0x2d, 0x1e, 0x37, 0xb8, 0xa1, 0x27, 0xa2, 0x13, 0xc3, 0x23, 0xf1, 0xbe,
-    0x34, 0x37, 0xc1, 0x1a, 0x21, 0x42, 0x0b, 0xd1, 0xb6, 0x74, 0x36, 0x8e,
-    0x28, 0xea, 0x45, 0xbf, 0xdf, 0x14, 0xf3, 0xac, 0x8d, 0xfa, 0xc5, 0x8b,
-    0xf6, 0xb7, 0x66, 0xdd, 0x52, 0x5e, 0x17, 0xff, 0x7e, 0x76, 0xd4, 0xf9,
-    0xf7, 0x71, 0xac, 0x5f, 0xfe, 0x1b, 0x6b, 0xa4, 0x83, 0xf2, 0x76, 0x25,
-    0x8b, 0xff, 0x7a, 0x49, 0xf6, 0x3b, 0x68, 0x0b, 0x15, 0x28, 0x8a, 0x64,
-    0xbb, 0xff, 0xfb, 0x07, 0xf9, 0x0e, 0x33, 0xc4, 0xc0, 0xe7, 0x24, 0x09,
-    0x16, 0x8c, 0x94, 0xf2, 0xf1, 0x12, 0x23, 0x72, 0x86, 0x84, 0x71, 0x0d,
-    0xff, 0xd1, 0x8d, 0x08, 0xcc, 0xd6, 0xec, 0xdb, 0xaa, 0x44, 0x72, 0xec,
-    0x3a, 0xc5, 0xde, 0xc5, 0x8b, 0xee, 0xfc, 0x18, 0x16, 0x2b, 0x73, 0xd4,
-    0xec, 0x5d, 0xc5, 0xef, 0xff, 0xb3, 0xcf, 0xf1, 0x7d, 0x9f, 0xbe, 0x49,
-    0xab, 0x17, 0xff, 0x8d, 0x7d, 0x66, 0xa1, 0x3f, 0xfb, 0x81, 0x62, 0xef,
-    0x8d, 0x62, 0xe9, 0x1a, 0xc5, 0xf7, 0x67, 0x1c, 0x16, 0x2f, 0xf8, 0x98,
-    0x1c, 0x8a, 0x0d, 0xa5, 0x8b, 0xff, 0xf7, 0xa4, 0x72, 0x2e, 0xbf, 0x53,
-    0xe7, 0x04, 0xc1, 0x62, 0xff, 0x79, 0xe1, 0xad, 0x3f, 0x6b, 0x17, 0x89,
-    0xa3, 0x20, 0x98, 0xef, 0xc6, 0x00, 0x2f, 0xe2, 0x5e, 0x87, 0x41, 0xad,
-    0x5f, 0xf0, 0x9b, 0xf8, 0x36, 0x6d, 0xd6, 0x2f, 0xfe, 0x70, 0x8c, 0xe6,
-    0x3c, 0x73, 0x97, 0x96, 0x2f, 0xff, 0x6a, 0x73, 0xb8, 0xcf, 0x42, 0x40,
-    0x77, 0x58, 0xad, 0xd1, 0x9f, 0xc3, 0x9f, 0x24, 0x5f, 0xff, 0x34, 0x9e,
-    0x33, 0x99, 0x14, 0x8b, 0xaf, 0xea, 0xfa, 0xc5, 0xff, 0xcf, 0x14, 0x61,
-    0x66, 0xb3, 0x3b, 0x09, 0x62, 0x89, 0x14, 0xa1, 0x2e, 0x5f, 0xfe, 0x26,
-    0x0b, 0xd9, 0xfd, 0x4c, 0x1b, 0x4b, 0x17, 0x9c, 0x12, 0xb1, 0x7b, 0x7c,
-    0x3a, 0x44, 0x61, 0x79, 0x7b, 0xab, 0xe6, 0xac, 0x5f, 0x63, 0x76, 0x05,
-    0x8b, 0xff, 0x03, 0x86, 0x6f, 0xf7, 0xe8, 0xfa, 0x58, 0xbf, 0xfc, 0x42,
-    0xe7, 0xdf, 0x59, 0xd2, 0x4b, 0xcb, 0x17, 0xfe, 0x2c, 0x37, 0xed, 0x06,
-    0x78, 0x2c, 0x54, 0xa2, 0x27, 0x12, 0xea, 0x51, 0xdd, 0xf8, 0x66, 0xdf,
-    0xce, 0x2d, 0xfd, 0x9f, 0x58, 0xbf, 0xda, 0x84, 0xff, 0xee, 0x05, 0x8b,
-    0xfb, 0x3f, 0xf9, 0xee, 0x0b, 0x17, 0x3e, 0xb0, 0xf8, 0xf4, 0x69, 0x7e,
-    0x1e, 0x75, 0x3e, 0xcb, 0x17, 0xdb, 0xb3, 0x6e, 0xa9, 0x12, 0x0b, 0xf9,
-    0xb5, 0x9d, 0x3f, 0x8b, 0x17, 0xfe, 0xd9, 0xcd, 0x30, 0xd3, 0x45, 0xee,
-    0x2c, 0x56, 0xca, 0xb2, 0x21, 0x18, 0x88, 0xc9, 0xcd, 0x84, 0x96, 0xe5,
-    0x9a, 0x2c, 0x01, 0x89, 0x17, 0xd9, 0xd6, 0x2f, 0xf7, 0x9c, 0x85, 0x0c,
-    0xe2, 0xc5, 0xf6, 0x39, 0x6d, 0xe3, 0xc4, 0x0c, 0x46, 0xfb, 0x40, 0x04,
-    0xac, 0x5f, 0xef, 0x39, 0x0a, 0x19, 0xc5, 0x8b, 0xe8, 0x7a, 0x42, 0xc3,
-    0xd6, 0x0c, 0x8e, 0xfa, 0x2f, 0x66, 0xeb, 0x17, 0xe9, 0x70, 0x39, 0xd6,
-    0x2a, 0x4f, 0x32, 0x04, 0xb7, 0xf1, 0x78, 0xa4, 0xfc, 0x58, 0xbd, 0xa9,
-    0x1a, 0xc5, 0x49, 0xe5, 0x61, 0x6d, 0xff, 0xf9, 0xf4, 0xfd, 0x52, 0x5b,
-    0x4f, 0x9f, 0xed, 0xb2, 0xc5, 0xf9, 0xa1, 0xe7, 0xd9, 0x62, 0xa5, 0x10,
-    0x2e, 0xb1, 0x78, 0xe2, 0x09, 0x62, 0xff, 0xfa, 0x19, 0xd1, 0xf9, 0xcc,
-    0x2d, 0xd8, 0x80, 0xb1, 0x5b, 0x1f, 0x81, 0xa3, 0xf7, 0xff, 0x9b, 0xd1,
-    0x73, 0x06, 0x31, 0x36, 0xa0, 0xb1, 0x7e, 0xce, 0x8d, 0x0e, 0xb1, 0x62,
-    0xff, 0xf9, 0xbb, 0xe6, 0x7d, 0x8b, 0x36, 0x38, 0xbe, 0xb1, 0x7f, 0xf7,
-    0xdf, 0xbf, 0x67, 0x7e, 0xd6, 0xa5, 0x62, 0xff, 0xe7, 0x93, 0xb0, 0xc3,
-    0xea, 0x92, 0x82, 0xc5, 0xfd, 0x3f, 0xe4, 0x74, 0xf9, 0x62, 0xff, 0x37,
-    0xa6, 0x02, 0x1e, 0x2c, 0x5b, 0xcb, 0x17, 0xff, 0xd9, 0xf2, 0xcf, 0x7f,
-    0x21, 0x3e, 0x91, 0xac, 0x56, 0x27, 0x47, 0xba, 0x8f, 0xd1, 0xc0, 0x8e,
-    0x46, 0x3e, 0x33, 0x08, 0x4a, 0xff, 0xec, 0x04, 0x76, 0x6a, 0x76, 0x6d,
-    0x6e, 0xb1, 0x7e, 0x60, 0x7b, 0x00, 0xb1, 0x44, 0x7e, 0x3c, 0x49, 0xbf,
-    0x0f, 0xb8, 0x67, 0x96, 0x2f, 0xef, 0xb1, 0xca, 0x7b, 0x58, 0xa9, 0x3d,
-    0x8c, 0x2a, 0xba, 0x11, 0x92, 0xca, 0x41, 0x81, 0x86, 0x4a, 0xea, 0x36,
-    0x18, 0x9d, 0xc2, 0x3d, 0xe1, 0x0d, 0x13, 0x5f, 0xe1, 0x42, 0xd0, 0x91,
-    0x01, 0x21, 0x26, 0x72, 0x3d, 0x2f, 0x43, 0x58, 0x37, 0x9b, 0xf0, 0xbb,
-    0xdd, 0xf8, 0xb1, 0x7d, 0x3a, 0x69, 0x58, 0xbf, 0xde, 0x7e, 0x6b, 0x59,
-    0x05, 0x8b, 0xff, 0xe9, 0xd1, 0xa1, 0xf9, 0xf8, 0x59, 0xd1, 0xc6, 0xb1,
-    0x5b, 0x22, 0xa3, 0x08, 0x77, 0x34, 0xbb, 0xae, 0xbd, 0x62, 0xc5, 0xcc,
-    0x05, 0x8a, 0x58, 0xad, 0x1a, 0x33, 0x8b, 0xdf, 0xdf, 0x7e, 0xfc, 0xdf,
-    0x58, 0xbf, 0xb3, 0x43, 0x66, 0xfa, 0xc5, 0xdf, 0x8c, 0x8d, 0x91, 0x8b,
-    0x89, 0x1b, 0x90, 0xf0, 0xbe, 0xf1, 0x4c, 0x4b, 0x15, 0x87, 0xdc, 0xea,
-    0x36, 0xed, 0x62, 0xf1, 0x08, 0xeb, 0x17, 0xff, 0x9c, 0x85, 0x0c, 0xe1,
-    0x66, 0xc1, 0xc1, 0x62, 0x86, 0x7f, 0x66, 0x89, 0xf8, 0x76, 0xd1, 0x92,
-    0xd9, 0x62, 0x0c, 0xc3, 0x14, 0x77, 0x8d, 0xa3, 0xb8, 0xcf, 0x5e, 0x1a,
-    0xd1, 0x11, 0xb5, 0x2a, 0x9c, 0x10, 0xfc, 0xe4, 0x34, 0xfd, 0x1b, 0x20,
-    0x70, 0x9b, 0xbf, 0xfa, 0x31, 0xa1, 0x19, 0x9a, 0xdd, 0x9b, 0x75, 0x48,
-    0x94, 0x5f, 0x6e, 0xcd, 0xba, 0xa4, 0xf1, 0x2f, 0x07, 0x20, 0x58, 0xad,
-    0x1e, 0x79, 0xcc, 0x6f, 0xfa, 0x11, 0x99, 0xad, 0xd9, 0xb7, 0x54, 0x89,
-    0xa5, 0xa3, 0x30, 0xfb, 0x58, 0x8a, 0xfb, 0xac, 0x97, 0x8e, 0x58, 0xbd,
-    0xf7, 0x25, 0x8a, 0x8d, 0xcf, 0x1b, 0x72, 0xab, 0xd1, 0xa8, 0x2d, 0x96,
-    0x2e, 0x1c, 0x6c, 0xb1, 0x7f, 0xba, 0xea, 0xc3, 0xfc, 0x96, 0xcb, 0x17,
-    0xf7, 0xe3, 0x62, 0x36, 0x74, 0xb1, 0x5d, 0x76, 0x7e, 0x10, 0x3c, 0xbf,
-    0xd1, 0xa4, 0x69, 0xfc, 0x3e, 0x71, 0x62, 0xf8, 0x3d, 0xa1, 0xe5, 0x8a,
-    0xeb, 0x4f, 0x92, 0x36, 0x3e, 0xbf, 0xff, 0x0d, 0xa1, 0xc1, 0x7a, 0x7d,
-    0xc0, 0x7b, 0xdd, 0xac, 0x5e, 0xf7, 0xbb, 0x58, 0xbb, 0xac, 0x8d, 0xb0,
-    0xfe, 0x00, 0xb3, 0x7f, 0xff, 0xa3, 0xa7, 0xbe, 0x3f, 0x5c, 0xeb, 0x63,
-    0x6e, 0xbf, 0xae, 0x74, 0x30, 0xcf, 0xc7, 0x2c, 0x5f, 0xb9, 0xcc, 0x2c,
-    0x58, 0xbf, 0xed, 0x6f, 0x3b, 0x66, 0x17, 0x96, 0x2f, 0x3f, 0xe3, 0x96,
-    0x2f, 0xc1, 0xc5, 0xa9, 0xe8, 0xb1, 0x5f, 0x3c, 0xd2, 0x20, 0xbe, 0x67,
-    0xef, 0x8b, 0x17, 0xfb, 0x9c, 0xc0, 0x1b, 0xe2, 0x58, 0xbf, 0xff, 0x7b,
-    0x80, 0x2c, 0xf7, 0xf3, 0xc5, 0x32, 0x75, 0x8b, 0x7d, 0x62, 0xba, 0xd5,
-    0x42, 0xf9, 0x08, 0xa7, 0x27, 0x8f, 0x84, 0x3f, 0xc8, 0x58, 0x8c, 0x8d,
-    0x42, 0x54, 0xbd, 0xf9, 0xd9, 0x62, 0xf9, 0xcb, 0xb8, 0x2c, 0x50, 0xcf,
-    0x07, 0x83, 0xd7, 0xfa, 0x7f, 0x22, 0x0d, 0xfa, 0x96, 0x2f, 0xd8, 0x53,
-    0xdf, 0x16, 0x2f, 0xf0, 0x8f, 0xc6, 0xd3, 0x71, 0x62, 0xff, 0xe8, 0x4f,
-    0xbe, 0x1f, 0x27, 0xd8, 0x75, 0x8a, 0x02, 0x28, 0xb8, 0x51, 0xe3, 0x4b,
-    0xf9, 0xe7, 0xab, 0xf3, 0xa5, 0x8a, 0xd9, 0x33, 0x97, 0x86, 0xcf, 0xcc,
-    0x2f, 0xff, 0xa3, 0x68, 0xde, 0x34, 0x9e, 0xb6, 0x3e, 0x35, 0x78, 0xc3,
-    0x3f, 0x1c, 0xb1, 0x7e, 0x27, 0xdd, 0xc6, 0xb1, 0x7b, 0xa4, 0xc1, 0x62,
-    0xfd, 0x3e, 0xe6, 0x79, 0x62, 0xf3, 0x10, 0xf0, 0xf1, 0xfe, 0x3f, 0x7f,
-    0x9c, 0xde, 0xf9, 0x84, 0x6a, 0xc5, 0xfe, 0x38, 0xbd, 0xf9, 0x17, 0x5e,
-    0xb1, 0x7d, 0x82, 0xd6, 0xcb, 0x17, 0x9b, 0x50, 0x30, 0xf7, 0xb8, 0x75,
-    0x5d, 0x6a, 0x7b, 0xb8, 0xea, 0xed, 0xff, 0x31, 0x14, 0x25, 0x2f, 0xd8,
-    0x2d, 0xd8, 0x96, 0x2f, 0x4c, 0xf9, 0x62, 0xff, 0xb0, 0x03, 0xfc, 0x94,
-    0x84, 0xb1, 0x7c, 0x0e, 0x61, 0x2c, 0x54, 0x9e, 0xdb, 0x9c, 0xdf, 0xf8,
-    0x5b, 0xf3, 0x8d, 0xaf, 0x49, 0xab, 0x17, 0xef, 0xfb, 0x99, 0xe5, 0x8b,
-    0xfd, 0xe7, 0xfb, 0x9b, 0xf7, 0x58, 0xa7, 0x44, 0xfb, 0x21, 0x08, 0xa6,
-    0xff, 0xfd, 0xf6, 0x70, 0x73, 0x0d, 0x63, 0xea, 0x70, 0x96, 0x2f, 0xec,
-    0xf1, 0xb2, 0x50, 0x58, 0xb9, 0xc6, 0xb1, 0x52, 0x89, 0x91, 0xaa, 0x7c,
-    0xba, 0xf0, 0xb9, 0x2b, 0x17, 0xfb, 0x80, 0xcc, 0x88, 0x33, 0xac, 0x5e,
-    0x14, 0xf6, 0xb1, 0x52, 0x7a, 0x90, 0x36, 0xbf, 0xed, 0x9f, 0x9c, 0x60,
-    0x7c, 0x4b, 0x17, 0xff, 0xff, 0xf7, 0x3a, 0xea, 0xdb, 0x3c, 0x6f, 0xf8,
-    0xdc, 0x1c, 0x8d, 0x7d, 0x75, 0xd7, 0x5c, 0xeb, 0x9d, 0x21, 0xd7, 0x0c,
-    0x33, 0xf1, 0xcb, 0x17, 0xf0, 0xf0, 0xb9, 0x3f, 0x58, 0xbe, 0x19, 0x4f,
-    0x6b, 0x16, 0xd2, 0xc5, 0x0c, 0xf8, 0xb4, 0x5a, 0x22, 0x3a, 0x8d, 0x69,
-    0xac, 0xbc, 0x65, 0x56, 0xfa, 0xc5, 0xff, 0x61, 0xa6, 0xb4, 0x33, 0xbf,
-    0x2c, 0x5e, 0xda, 0x76, 0x58, 0xb9, 0xbb, 0xc3, 0xdb, 0x0c, 0xf2, 0xbc,
-    0x89, 0xb1, 0x36, 0xdf, 0xb8, 0x23, 0x76, 0x65, 0x8b, 0xfd, 0x83, 0x63,
-    0xe7, 0x7e, 0x58, 0xa8, 0x1e, 0xf9, 0x15, 0xdf, 0xb3, 0x3d, 0xfc, 0x58,
-    0xa9, 0x3c, 0x8f, 0x90, 0xdf, 0xe8, 0x73, 0x5a, 0x62, 0xf2, 0xc5, 0xff,
-    0xfb, 0x5e, 0xfe, 0x11, 0x37, 0xa4, 0xbd, 0x1d, 0x8b, 0x15, 0x28, 0x8a,
-    0x73, 0x4a, 0x31, 0x7b, 0x6b, 0x62, 0x88, 0x3b, 0x8e, 0x17, 0xfb, 0xc3,
-    0x1f, 0xb2, 0xf8, 0x9c, 0x74, 0x43, 0xf8, 0xe5, 0x39, 0x0c, 0xaf, 0x43,
-    0x2b, 0xa4, 0x2a, 0xef, 0xf3, 0x19, 0xcf, 0x7e, 0x40, 0xb1, 0x7e, 0x71,
-    0x8b, 0xdc, 0x58, 0xbe, 0xc3, 0xcc, 0x7a, 0xc5, 0x1a, 0x88, 0x3f, 0x9a,
-    0xf0, 0xa6, 0xfe, 0x7c, 0x29, 0xef, 0x8b, 0x17, 0xb4, 0xe7, 0x58, 0xbf,
-    0x0c, 0x98, 0x2e, 0x2c, 0x5f, 0x7a, 0x4b, 0x65, 0x8a, 0x34, 0xf3, 0x3c,
-    0x53, 0x7b, 0x59, 0xe5, 0x8b, 0xff, 0x4e, 0xe6, 0x07, 0xee, 0x31, 0x1a,
-    0xb1, 0x7f, 0xf7, 0x9f, 0x99, 0x09, 0x34, 0x2d, 0xb6, 0x58, 0xad, 0x22,
-    0xa4, 0xe3, 0xbe, 0x43, 0xa9, 0x4d, 0x97, 0x1a, 0x5e, 0x19, 0x97, 0xed,
-    0xfe, 0xcd, 0xa5, 0x8b, 0xf6, 0x0f, 0xae, 0xca, 0x3d, 0x62, 0xfe, 0x62,
-    0x07, 0x5d, 0x94, 0x7a, 0xc5, 0xcc, 0x3e, 0x87, 0xd3, 0x1c, 0x65, 0x47,
-    0x55, 0x13, 0xf8, 0xe4, 0xb8, 0x66, 0x28, 0x49, 0x5f, 0x8b, 0x9d, 0xc3,
-    0x8b, 0x17, 0x98, 0xb7, 0x58, 0xbd, 0xf9, 0x0d, 0x62, 0xa0, 0x7c, 0xbe,
-    0x2a, 0x08, 0x76, 0xfe, 0x33, 0xdc, 0x62, 0x35, 0x62, 0xfe, 0x0a, 0x2f,
-    0xc9, 0x1a, 0xb1, 0x7b, 0x18, 0xeb, 0x17, 0xfb, 0x8d, 0xb4, 0x93, 0xc4,
-    0xb1, 0x70, 0x83, 0x58, 0xb8, 0xc3, 0xac, 0x58, 0x4b, 0x15, 0x26, 0xaf,
-    0xe3, 0x37, 0xd3, 0xf7, 0x3a, 0xc5, 0xd9, 0xe5, 0x8b, 0xfd, 0x07, 0xfb,
-    0x41, 0xfe, 0xb1, 0x5f, 0x3c, 0xa6, 0x17, 0xbc, 0xdd, 0x86, 0xb1, 0x7b,
-    0x18, 0xeb, 0x15, 0x04, 0xf7, 0x70, 0xc0, 0xd3, 0x1e, 0xc7, 0x22, 0x34,
-    0xd2, 0x21, 0xc8, 0x3e, 0xd8, 0x44, 0x21, 0x8f, 0xdf, 0xfe, 0x16, 0xa0,
-    0x53, 0x09, 0xf7, 0xf0, 0x96, 0x2f, 0x46, 0xfd, 0x6c, 0xac, 0x5f, 0xb9,
-    0x24, 0x2e, 0x2c, 0x5d, 0xdf, 0x96, 0x2e, 0xfc, 0xac, 0x5e, 0x9f, 0x73,
-    0x0d, 0x80, 0x63, 0x37, 0xa4, 0xa2, 0x58, 0xba, 0x63, 0xd6, 0x2b, 0x46,
-    0xdf, 0xe3, 0xb7, 0xe6, 0x01, 0x31, 0xd6, 0x2a, 0x37, 0x4c, 0xc2, 0x49,
-    0xe0, 0xb0, 0xed, 0x24, 0x43, 0x7e, 0x1f, 0xe3, 0xdc, 0x96, 0x2f, 0xf1,
-    0x61, 0xe3, 0xb3, 0x52, 0xb1, 0x52, 0x7c, 0x11, 0x15, 0xde, 0x9f, 0x71,
-    0x62, 0xff, 0x1f, 0xf8, 0x31, 0xbf, 0x6b, 0x17, 0xf0, 0xfe, 0x29, 0xd4,
-    0xac, 0x54, 0x9f, 0x1e, 0x1a, 0xdf, 0xf7, 0xe4, 0xb2, 0x29, 0xd6, 0xcb,
-    0x17, 0xf1, 0x60, 0xfe, 0xc1, 0x2c, 0x5f, 0xd0, 0x6d, 0x6d, 0xf1, 0x2c,
-    0x50, 0xd1, 0x30, 0x69, 0xd4, 0x45, 0xd7, 0xfd, 0xfc, 0xd6, 0xff, 0x92,
-    0xf2, 0xc5, 0x49, 0xf6, 0x08, 0xca, 0xff, 0x7b, 0xbe, 0xb4, 0xd3, 0x5c,
-    0x6b, 0x17, 0xfe, 0x6e, 0xe1, 0xc3, 0x27, 0x76, 0x0d, 0x62, 0xf7, 0x7e,
-    0x95, 0x8a, 0xc5, 0x50, 0xbd, 0x91, 0x3c, 0x20, 0x35, 0x19, 0x21, 0xc8,
-    0x58, 0xf4, 0x48, 0x77, 0xfb, 0x08, 0x7e, 0xe4, 0x81, 0x62, 0xf1, 0x64,
-    0x4b, 0x17, 0xed, 0x49, 0xf0, 0xd5, 0x8b, 0xb6, 0xd9, 0x62, 0xc3, 0xc3,
-    0xc3, 0x08, 0xa6, 0xa5, 0x17, 0x78, 0x66, 0xcc, 0x17, 0xe8, 0xa7, 0xf3,
-    0xe5, 0x8b, 0xcf, 0x1c, 0x75, 0x8b, 0xcf, 0x26, 0xac, 0x57, 0x66, 0xf7,
-    0xa8, 0x82, 0xf4, 0x3b, 0x35, 0x62, 0xc3, 0x58, 0xbf, 0x66, 0xa1, 0xf1,
-    0x2c, 0x5f, 0xa0, 0xd3, 0xdf, 0x52, 0xc5, 0xc6, 0x79, 0x62, 0xfd, 0xef,
-    0x8b, 0xdc, 0x58, 0xbf, 0x3f, 0xbb, 0xcd, 0x2c, 0x50, 0xd1, 0xa7, 0xb8,
-    0x97, 0x65, 0x31, 0x16, 0x1c, 0x67, 0xe5, 0x57, 0xe1, 0xcf, 0x03, 0xe2,
-    0xc5, 0xc3, 0xed, 0x62, 0x8e, 0x78, 0x62, 0x2a, 0xbf, 0xf8, 0x5a, 0x68,
-    0x1c, 0x43, 0xf8, 0x89, 0x62, 0xf0, 0xa7, 0x8b, 0x17, 0xfe, 0x06, 0xff,
-    0x7d, 0x13, 0xfb, 0x8b, 0x17, 0xfd, 0x39, 0xc8, 0xbe, 0xe1, 0x79, 0x62,
-    0x8e, 0x89, 0x86, 0x1d, 0xe2, 0x05, 0xfa, 0x1f, 0x92, 0x35, 0x62, 0xfc,
-    0xed, 0xa9, 0xdd, 0x62, 0xdd, 0x30, 0xf4, 0x78, 0x53, 0x7e, 0x60, 0x7b,
-    0x52, 0xb1, 0x71, 0x6c, 0xb1, 0x51, 0xa2, 0xe0, 0x24, 0xb3, 0x0c, 0x97,
-    0x21, 0xe6, 0xf0, 0x9d, 0x39, 0x13, 0x43, 0x78, 0x10, 0x80, 0x22, 0x90,
-    0xca, 0x2f, 0x33, 0x1d, 0x62, 0xf8, 0x51, 0x08, 0xd5, 0x8a, 0x58, 0xbf,
-    0xa4, 0x67, 0x9c, 0xf2, 0xc5, 0x78, 0xdc, 0x86, 0x19, 0x7f, 0xd3, 0xa0,
-    0x37, 0xa3, 0xb3, 0xcb, 0x17, 0x6b, 0x16, 0x2f, 0xdf, 0x7d, 0x31, 0xd6,
-    0x2f, 0xbb, 0x7e, 0xe0, 0xb1, 0x70, 0x7b, 0x2c, 0x56, 0x1f, 0x3b, 0x94,
-    0x00, 0x96, 0xb6, 0x4e, 0x12, 0x21, 0xcd, 0x2f, 0xfc, 0x88, 0x07, 0x84,
-    0xfd, 0x74, 0x6f, 0xd7, 0x6b, 0x17, 0x61, 0xd6, 0x2f, 0x6b, 0xa7, 0xd6,
-    0x2f, 0xd9, 0xa6, 0x91, 0xac, 0x5e, 0xed, 0xbe, 0xb1, 0x51, 0xba, 0x28,
-    0x24, 0x91, 0x85, 0xc8, 0x80, 0x44, 0xf7, 0x61, 0x2c, 0x5f, 0xdb, 0x77,
-    0x0f, 0xbf, 0x96, 0x28, 0x67, 0x8f, 0x82, 0xd7, 0xc2, 0x87, 0x83, 0x58,
-    0xbd, 0xbc, 0xe9, 0x62, 0xff, 0xda, 0x11, 0xfe, 0xf2, 0x76, 0x25, 0x8b,
-    0xdd, 0xcc, 0x7a, 0xc5, 0xfe, 0x17, 0x63, 0xf8, 0x9b, 0x8b, 0x17, 0xfa,
-    0x4e, 0x59, 0x09, 0x25, 0x8a, 0xf9, 0xf3, 0xf0, 0xda, 0xff, 0x39, 0x19,
-    0x87, 0x7f, 0x2c, 0x56, 0xc9, 0xaf, 0x39, 0x2e, 0x87, 0xbe, 0x7d, 0xe8,
-    0x44, 0x74, 0x22, 0xbf, 0x8b, 0x22, 0x29, 0xd9, 0x62, 0xfe, 0x22, 0x73,
-    0xfb, 0x16, 0x2f, 0x4f, 0x70, 0x58, 0xb8, 0xa0, 0xb1, 0x74, 0x6c, 0x12,
-    0xc5, 0x08, 0xda, 0xc7, 0x0b, 0xd4, 0xaa, 0xaf, 0xc8, 0xdf, 0xe3, 0xd7,
-    0xd8, 0xb8, 0x8b, 0x3a, 0x94, 0xef, 0xfe, 0xdc, 0x4c, 0x3e, 0x98, 0x3e,
-    0xbb, 0x28, 0xf5, 0x8b, 0xe7, 0xfc, 0xf4, 0x58, 0xad, 0x1f, 0xb7, 0x94,
-    0xaf, 0xf4, 0xea, 0x7b, 0x06, 0xa5, 0x62, 0xfd, 0x09, 0xc0, 0x47, 0xac,
-    0x5f, 0xff, 0xc2, 0xf7, 0x18, 0x1f, 0x9c, 0x1b, 0xea, 0x02, 0xc5, 0x8b,
-    0xe1, 0xce, 0x76, 0xb1, 0x69, 0xd1, 0xff, 0x1d, 0x6e, 0xbb, 0x46, 0x87,
-    0xa1, 0x53, 0x7f, 0xda, 0xcf, 0xe1, 0x14, 0x8d, 0x62, 0xff, 0xfe, 0x9f,
-    0x88, 0x6f, 0x31, 0x4b, 0xf0, 0x4d, 0x1d, 0x8b, 0x15, 0xa4, 0x4a, 0x1c,
-    0xde, 0xf3, 0xf5, 0x6c, 0xb1, 0x6d, 0x96, 0x2a, 0x4d, 0xa1, 0x10, 0xde,
-    0xf8, 0xa3, 0xd6, 0x2f, 0x03, 0x3e, 0xb1, 0x7f, 0x14, 0xfb, 0xed, 0x05,
-    0x8a, 0x93, 0xeb, 0xec, 0x86, 0x21, 0xdb, 0xfe, 0x62, 0x1f, 0xd8, 0xf9,
-    0xa5, 0x8b, 0xde, 0x9d, 0x2c, 0x54, 0xab, 0x49, 0xd8, 0x8b, 0x23, 0x04,
-    0x78, 0x5e, 0xc4, 0xae, 0xd0, 0x8a, 0x01, 0x80, 0x8e, 0x2e, 0x6d, 0xd6,
-    0x2f, 0xff, 0xff, 0x61, 0x13, 0x43, 0xee, 0x60, 0x7a, 0xd4, 0xc1, 0xfc,
-    0xfa, 0x60, 0x2c, 0x5f, 0x86, 0x2d, 0x83, 0x3a, 0xc5, 0xff, 0xf8, 0xa4,
-    0x7c, 0x13, 0x3c, 0x1c, 0x1c, 0x17, 0x16, 0x2f, 0xec, 0xf7, 0xdf, 0xb8,
-    0x2c, 0x54, 0x48, 0x84, 0x25, 0x5a, 0xdd, 0x1a, 0x7f, 0x85, 0x85, 0xfd,
-    0xbb, 0x9a, 0x16, 0xdb, 0x2c, 0x5f, 0xdd, 0xf3, 0x0e, 0xdc, 0x58, 0xbf,
-    0xb0, 0x89, 0xbd, 0xb2, 0xc5, 0xec, 0xfc, 0xac, 0x5e, 0xc3, 0x77, 0x58,
-    0xa1, 0x9b, 0xbd, 0x0e, 0x5b, 0x4b, 0x17, 0xed, 0xb5, 0x3d, 0xe9, 0x62,
-    0xb6, 0x37, 0xb8, 0x25, 0x7f, 0xff, 0x78, 0xc1, 0xcb, 0x6b, 0x08, 0x06,
-    0x73, 0xdc, 0xed, 0x62, 0xfb, 0x5b, 0x03, 0xcb, 0x17, 0xf9, 0xbb, 0xd4,
-    0xc1, 0xb4, 0xb1, 0x7f, 0x0f, 0x21, 0x20, 0xe2, 0xc5, 0x62, 0x39, 0x9d,
-    0x7c, 0x89, 0x44, 0x69, 0x52, 0xaf, 0xd6, 0x03, 0x19, 0x1a, 0x57, 0x65,
-    0x2e, 0x69, 0xf2, 0xf6, 0x68, 0x25, 0xee, 0x46, 0x0f, 0x7f, 0xff, 0x46,
-    0xa1, 0x46, 0x92, 0x7f, 0x19, 0xb6, 0x7c, 0xc3, 0x3f, 0x1c, 0xb1, 0x7f,
-    0x7d, 0xfd, 0x24, 0x05, 0x8b, 0xef, 0xf4, 0x7d, 0x2c, 0x54, 0x9e, 0x96,
-    0x16, 0xdd, 0xa8, 0x96, 0x2f, 0xfe, 0xfe, 0xff, 0x7e, 0xfd, 0x87, 0x6e,
-    0x2c, 0x5e, 0x92, 0xd9, 0x62, 0xf7, 0xdb, 0xcb, 0x15, 0x28, 0x9a, 0xc1,
-    0x9f, 0xa3, 0x86, 0x3b, 0x7e, 0x8d, 0xa3, 0x5c, 0x6b, 0x8d, 0x7d, 0x4b,
-    0x17, 0x4f, 0x96, 0x2f, 0x14, 0x6f, 0xd1, 0x62, 0x8e, 0x6e, 0xfc, 0x2f,
-    0x7f, 0x66, 0x73, 0x3b, 0xf2, 0xc5, 0xc2, 0x8f, 0x58, 0xb6, 0xc3, 0x3c,
-    0x93, 0x97, 0x5f, 0xbc, 0x78, 0x88, 0x6b, 0x17, 0xdf, 0x0e, 0x39, 0x96,
-    0x2a, 0x36, 0x4d, 0x8f, 0x1f, 0xd9, 0xa8, 0x8a, 0x44, 0x55, 0x7d, 0xce,
-    0x39, 0xd6, 0x2f, 0xfe, 0xfb, 0xf6, 0x14, 0x9f, 0xf2, 0xf0, 0x58, 0xa8,
-    0x8f, 0xa7, 0xe4, 0x77, 0x85, 0xa3, 0x56, 0x2e, 0x17, 0x6b, 0x15, 0x03,
-    0x71, 0xc1, 0xfb, 0xfd, 0x14, 0x1b, 0x5b, 0x7c, 0x4b, 0x17, 0xff, 0xdb,
-    0x04, 0xd0, 0xe7, 0x33, 0x41, 0x4e, 0x8d, 0x58, 0xb1, 0x2c, 0x5f, 0xcd,
-    0xee, 0x6d, 0x81, 0x2c, 0x5f, 0xff, 0xcf, 0xc6, 0x87, 0x1f, 0xa7, 0x04,
-    0xcf, 0x07, 0xe8, 0xb1, 0x70, 0x61, 0xac, 0x56, 0x27, 0x83, 0x12, 0xd9,
-    0xc8, 0x58, 0xdc, 0x0a, 0xa4, 0x23, 0xe3, 0x00, 0xd7, 0xaf, 0x00, 0x12,
-    0xb1, 0x7f, 0xb7, 0x72, 0x1b, 0x11, 0xab, 0x15, 0xa3, 0xd1, 0x10, 0xed,
-    0xf8, 0x2c, 0x1b, 0x41, 0x62, 0xb0, 0xf2, 0xdc, 0x8a, 0xe8, 0xe8, 0xc8,
-    0xdd, 0xdb, 0xa9, 0x75, 0x85, 0x1d, 0x69, 0x34, 0x69, 0x08, 0xde, 0xbb,
-    0x84, 0x6c, 0x6a, 0x85, 0x24, 0xca, 0x4e, 0xda, 0x18, 0x70, 0x8d, 0x6c,
-    0x72, 0x84, 0xf2, 0x7c, 0xb4, 0xd8, 0xd4, 0x77, 0x95, 0x75, 0xdc, 0x2b,
-    0xde, 0x50, 0x6c, 0x7c, 0x23, 0xa2, 0x8d, 0xe7, 0x52, 0xcc, 0x8f, 0x19,
-    0x57, 0xe7, 0x0c, 0x5a, 0x51, 0x38, 0x21, 0xf2, 0x52, 0xd0, 0xb9, 0x38,
-    0x41, 0xe9, 0xc7, 0x61, 0x42, 0x23, 0xa4, 0x30, 0x82, 0x85, 0xd4, 0x74,
-    0x73, 0xe1, 0xca, 0x77, 0xea, 0x8c, 0x36, 0xff, 0x0b, 0x68, 0xce, 0xae,
-    0xa7, 0x35, 0x62, 0xa6, 0x18, 0x4a, 0x1b, 0x46, 0x33, 0x0b, 0xdd, 0x3d,
-    0x1c, 0xac, 0xa7, 0xa6, 0xc3, 0xc5, 0x2d, 0x58, 0xeb, 0x5f, 0xac, 0xdc,
-    0x7d, 0x0e, 0x21, 0x46, 0x2a, 0x1d, 0xb7, 0xc1, 0xea, 0x95, 0x21, 0x53,
-    0x5c, 0xa2, 0xdb, 0x6d, 0x4e, 0x05, 0x85, 0x7d, 0xc0, 0x3a, 0xff, 0xff,
-    0x35, 0xd2, 0x0d, 0x9b, 0x5b, 0x09, 0xef, 0x9d, 0xe2, 0x3f, 0x78, 0x85,
-    0x9f, 0x7b, 0x5e, 0x93, 0x1f, 0x2b, 0xa6, 0x2c, 0xca, 0x99, 0x35, 0x9a,
-    0x96, 0x81, 0xf9, 0x11, 0x16, 0x9f, 0xbc, 0x39, 0x16, 0xcc, 0xcd, 0x00,
-    0x16, 0xf2, 0x8f, 0xaf, 0x9e, 0x5a, 0x2c, 0x60, 0x93, 0xf3, 0x10, 0xbf,
-    0x3e, 0xd4, 0x47, 0x72, 0x2c, 0xcd, 0xd7, 0xfa, 0x5b, 0xec, 0x00, 0xad,
-    0x2e, 0x74, 0x75, 0x66, 0x3e, 0x1d, 0xaa, 0xc7, 0xea, 0xc6, 0x29, 0x4d,
-    0x00,
-};
-
-static const unsigned kPreloadedHSTSBits = 1689888;
-static const unsigned kHSTSRootPosition = 1689210;
-
-static const net::TransportSecurityStateSource kHSTSSource = {
-    kHSTSHuffmanTree,        sizeof(kHSTSHuffmanTree),
-    kPreloadedHSTSData,      kPreloadedHSTSBits,
-    kHSTSRootPosition,       kExpectCTReportURIs,
-    kExpectStapleReportURIs, kPinsets,
-    arraysize(kPinsets)};
-
-#endif  // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/src/net/tools/transport_security_state_generator/resources/transport_security_state_static.template b/src/net/http/transport_security_state_static.template
similarity index 100%
rename from src/net/tools/transport_security_state_generator/resources/transport_security_state_static.template
rename to src/net/http/transport_security_state_static.template
diff --git a/src/net/http2/http2_structures_test.cc b/src/net/http2/http2_structures_test.cc
index a87b3a0..cce65fe 100644
--- a/src/net/http2/http2_structures_test.cc
+++ b/src/net/http2/http2_structures_test.cc
@@ -18,7 +18,6 @@
 #include <type_traits>
 #include <vector>
 
-#include "base/template_util.h"
 #include "net/http2/http2_structures_test_util.h"
 #include "net/http2/tools/failure.h"
 #include "net/http2/tools/http2_random.h"
@@ -42,7 +41,7 @@
 
 template <typename E>
 E IncrementEnum(E e) {
-  typedef typename base::underlying_type<E>::type I;
+  using I = typename std::underlying_type<E>::type;
   return static_cast<E>(1 + static_cast<I>(e));
 }
 
diff --git a/src/net/http2/tools/random_decoder_test.h b/src/net/http2/tools/random_decoder_test.h
index 5cb10f6..ea61dc7 100644
--- a/src/net/http2/tools/random_decoder_test.h
+++ b/src/net/http2/tools/random_decoder_test.h
@@ -19,7 +19,6 @@
 
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
-#include "base/template_util.h"
 #include "net/http2/decoder/decode_buffer.h"
 #include "net/http2/decoder/decode_status.h"
 #include "net/http2/tools/failure.h"
@@ -49,9 +48,9 @@
   // resulting value is the smallest unsigned value equal to the source value
   // modulo 2^n, where n is the number of bits used to represent the
   // destination type unsigned U.
-  typedef typename base::underlying_type<T>::type underlying_type_T;
-  typedef typename std::make_unsigned<underlying_type_T>::type
-      unsigned_underlying_type_T;
+  using underlying_type_T = typename std::underlying_type<T>::type;
+  using unsigned_underlying_type_T =
+      typename std::make_unsigned<underlying_type_T>::type;
   auto r = static_cast<unsigned_underlying_type_T>(rng->Rand32());
   *out = static_cast<T>(r);
 }
diff --git a/src/net/log/net_log_event_type_list.h b/src/net/log/net_log_event_type_list.h
index ed6a0c8..bbd14af 100644
--- a/src/net/log/net_log_event_type_list.h
+++ b/src/net/log/net_log_event_type_list.h
@@ -1084,6 +1084,9 @@
 //   }
 EVENT_TYPE(HTTP_STREAM_JOB_PROXY_SERVER_RESOLVED)
 
+// Emitted when a job is asked to initialize a connection.
+EVENT_TYPE(HTTP_STREAM_JOB_INIT_CONNECTION)
+
 // Identifies the NetLogSource() for the Job that fulfilled the Request.
 // The event parameters are:
 //   {
@@ -1091,6 +1094,15 @@
 //   }
 EVENT_TYPE(HTTP_STREAM_REQUEST_BOUND_TO_JOB)
 
+// Identifies the NetLogSource() for the QuicStreamFactory::Job that the
+// HttpStreamFactoryImpl::Job was attached to.
+// The event parameters are:
+//  {
+//      "source_dependency": <Source identifier for the QuicStreamFactory::Job
+//                            to which we were attached>,
+//  }
+EVENT_TYPE(HTTP_STREAM_JOB_BOUND_TO_QUIC_STREAM_FACTORY_JOB)
+
 // Identifies the NetLogSource() for the Request that the Job was attached to.
 // The event parameters are:
 //   {
@@ -1629,6 +1641,38 @@
 //   }
 
 // ------------------------------------------------------------------------
+// QuicStreamFactory::Job
+// ------------------------------------------------------------------------
+
+// Measures the time taken to execute the QuicStreamFactory::Job.
+// The event parameters are:
+//   {
+//     "server_id": <The QuicServerId that the Job serves>,
+//   }
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB)
+
+// Identifies the NetLogSource() for the HttpStreamFactoryImpl::Job that the
+// Job was attached to.
+// The event parameters are:
+//  {
+//     "source_dependency": <Source identifier for the
+//                           HttpStreamFactoryImpl::Job to which we were
+//                           attached>,
+//  }
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB_BOUND_TO_HTTP_STREAM_JOB)
+
+// Measures the time taken to load server information.
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB_LOAD_SERVER_INFO)
+
+// Measures the time taken to establish a QUIC connection.
+// The event parameters are:
+//  {
+//     "require_confirmation": <True if we require handshake confirmation
+//                              in the connection>
+//  }
+EVENT_TYPE(QUIC_STREAM_FACTORY_JOB_CONNECT)
+
+// ------------------------------------------------------------------------
 // QuicSession
 // ------------------------------------------------------------------------
 
diff --git a/src/net/log/net_log_source_type_list.h b/src/net/log/net_log_source_type_list.h
index 120245d..47b5b97 100644
--- a/src/net/log/net_log_source_type_list.h
+++ b/src/net/log/net_log_source_type_list.h
@@ -40,3 +40,4 @@
 SOURCE_TYPE(HTTP_STREAM_JOB_CONTROLLER)
 SOURCE_TYPE(CT_TREE_STATE_TRACKER)
 SOURCE_TYPE(SERVER_PUSH_LOOKUP_TRANSACTION)
+SOURCE_TYPE(QUIC_STREAM_FACTORY_JOB)
diff --git a/src/net/proxy/proxy_config.cc b/src/net/proxy/proxy_config.cc
index 13b0462..b2d34ca 100644
--- a/src/net/proxy/proxy_config.cc
+++ b/src/net/proxy/proxy_config.cc
@@ -195,27 +195,12 @@
       source_(PROXY_CONFIG_SOURCE_UNKNOWN), id_(kInvalidConfigID)  {
 }
 
-ProxyConfig::ProxyConfig(const ProxyConfig& config)
-    : auto_detect_(config.auto_detect_),
-      pac_url_(config.pac_url_),
-      pac_mandatory_(config.pac_mandatory_),
-      proxy_rules_(config.proxy_rules_),
-      source_(config.source_),
-      id_(config.id_) {
-}
+ProxyConfig::ProxyConfig(const ProxyConfig& config) = default;
 
 ProxyConfig::~ProxyConfig() {
 }
 
-ProxyConfig& ProxyConfig::operator=(const ProxyConfig& config) {
-  auto_detect_ = config.auto_detect_;
-  pac_url_ = config.pac_url_;
-  pac_mandatory_ = config.pac_mandatory_;
-  proxy_rules_ = config.proxy_rules_;
-  source_ = config.source_;
-  id_ = config.id_;
-  return *this;
-}
+ProxyConfig& ProxyConfig::operator=(const ProxyConfig& config) = default;
 
 bool ProxyConfig::Equals(const ProxyConfig& other) const {
   // The two configs can have different IDs and sources.  We are just interested
diff --git a/src/net/quic/chromium/quic_chromium_client_session.cc b/src/net/quic/chromium/quic_chromium_client_session.cc
index 1dbabc0..ba6c37c 100644
--- a/src/net/quic/chromium/quic_chromium_client_session.cc
+++ b/src/net/quic/chromium/quic_chromium_client_session.cc
@@ -298,6 +298,8 @@
 }
 
 QuicChromiumClientSession::~QuicChromiumClientSession() {
+  DCHECK(callback_.is_null());
+
   net_log_.EndEvent(NetLogEventType::QUIC_SESSION);
   if (!dynamic_streams().empty())
     RecordUnexpectedOpenStreams(DESTRUCTOR);
@@ -668,11 +670,8 @@
   connect_timing_.connect_start = base::TimeTicks::Now();
   RecordHandshakeState(STATE_STARTED);
   DCHECK(flow_controller());
-  crypto_stream_->CryptoConnect();
 
-  // Check if the connection is still open, issues during CryptoConnect like
-  // packet write error could cause the connection to be torn down.
-  if (!connection()->connected())
+  if (!crypto_stream_->CryptoConnect())
     return ERR_QUIC_HANDSHAKE_FAILED;
 
   if (IsCryptoHandshakeConfirmed()) {
@@ -689,20 +688,6 @@
   return ERR_IO_PENDING;
 }
 
-int QuicChromiumClientSession::ResumeCryptoConnect(
-    const CompletionCallback& callback) {
-  if (IsCryptoHandshakeConfirmed()) {
-    connect_timing_.connect_end = base::TimeTicks::Now();
-    return OK;
-  }
-
-  if (!connection()->connected())
-    return ERR_QUIC_HANDSHAKE_FAILED;
-
-  callback_ = callback;
-  return ERR_IO_PENDING;
-}
-
 int QuicChromiumClientSession::GetNumSentClientHellos() const {
   return crypto_stream_->num_sent_client_hellos();
 }
@@ -855,11 +840,6 @@
 
 void QuicChromiumClientSession::OnCryptoHandshakeEvent(
     CryptoHandshakeEvent event) {
-  if (stream_factory_ && event == HANDSHAKE_CONFIRMED &&
-      stream_factory_->OnHandshakeConfirmed(this)) {
-    return;
-  }
-
   if (!callback_.is_null() &&
       (!require_confirmation_ || event == HANDSHAKE_CONFIRMED ||
        event == ENCRYPTION_REESTABLISHED)) {
@@ -921,9 +901,10 @@
     const CryptoHandshakeMessage& message) {
   logger_->OnCryptoHandshakeMessageReceived(message);
   if (message.tag() == kREJ || message.tag() == kSREJ) {
-    UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.RejectLength",
-                                message.GetSerialized().length(), 1000, 10000,
-                                50);
+    UMA_HISTOGRAM_CUSTOM_COUNTS(
+        "Net.QuicSession.RejectLength",
+        message.GetSerialized(Perspective::IS_CLIENT).length(), 1000, 10000,
+        50);
     QuicStringPiece proof;
     UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.RejectHasProof",
                           message.GetStringPiece(kPROF, &proof));
@@ -981,10 +962,6 @@
     UMA_HISTOGRAM_COUNTS(
         "Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut",
         GetNumOpenOutgoingStreams());
-    // Notify the factory the connection timed out with open streams.
-    if (GetNumOpenOutgoingStreams() > 0 && stream_factory_) {
-      stream_factory_->OnTimeoutWithOpenStreams();
-    }
     if (IsCryptoHandshakeConfirmed()) {
       if (GetNumOpenOutgoingStreams() > 0) {
         UMA_HISTOGRAM_BOOLEAN(
@@ -1010,7 +987,18 @@
     }
   }
 
-  if (!IsCryptoHandshakeConfirmed()) {
+  if (IsCryptoHandshakeConfirmed()) {
+    // QUIC connections should not timeout while there are open streams,
+    // since PING frames are sent to prevent timeouts. If, however, the
+    // connection timed out with open streams then QUIC traffic has become
+    // blackholed. Alternatively, if too many retransmission timeouts occur
+    // then QUIC traffic has become blackholed.
+    if (stream_factory_ &&
+        (error == QUIC_TOO_MANY_RTOS || (error == QUIC_NETWORK_IDLE_TIMEOUT &&
+                                         GetNumOpenOutgoingStreams() > 0))) {
+      stream_factory_->OnBlackholeAfterHandshakeConfirmed(this);
+    }
+  } else {
     if (error == QUIC_PUBLIC_RESET) {
       RecordHandshakeFailureReason(HANDSHAKE_FAILURE_PUBLIC_RESET);
     } else if (connection()->GetStats().packets_received == 0) {
diff --git a/src/net/quic/chromium/quic_chromium_client_session.h b/src/net/quic/chromium/quic_chromium_client_session.h
index 7d9a87b..359df91 100644
--- a/src/net/quic/chromium/quic_chromium_client_session.h
+++ b/src/net/quic/chromium/quic_chromium_client_session.h
@@ -216,9 +216,6 @@
   // Performs a crypto handshake with the server.
   int CryptoConnect(const CompletionCallback& callback);
 
-  // Resumes a crypto handshake with the server after a timeout.
-  int ResumeCryptoConnect(const CompletionCallback& callback);
-
   // Causes the QuicConnectionHelper to start reading from all sockets
   // and passing the data along to the QuicConnection.
   void StartReading();
diff --git a/src/net/quic/chromium/quic_connection_logger.cc b/src/net/quic/chromium/quic_connection_logger.cc
index 8851c3b..2d3e872 100644
--- a/src/net/quic/chromium/quic_connection_logger.cc
+++ b/src/net/quic/chromium/quic_connection_logger.cc
@@ -225,7 +225,8 @@
     const CryptoHandshakeMessage* message,
     NetLogCaptureMode /* capture_mode */) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
-  dict->SetString("quic_crypto_handshake_message", message->DebugString());
+  dict->SetString("quic_crypto_handshake_message",
+                  message->DebugString(Perspective::IS_CLIENT));
   return std::move(dict);
 }
 
diff --git a/src/net/quic/chromium/quic_http_stream.cc b/src/net/quic/chromium/quic_http_stream.cc
index 3b031b9..f52e00e 100644
--- a/src/net/quic/chromium/quic_http_stream.cc
+++ b/src/net/quic/chromium/quic_http_stream.cc
@@ -50,6 +50,7 @@
     : MultiplexedHttpStream(MultiplexedSessionHandle(session)),
       next_state_(STATE_NONE),
       session_(session),
+      server_id_(session->server_id()),
       http_server_properties_(http_server_properties),
       quic_version_(session->GetQuicVersion()),
       session_error_(ERR_UNEXPECTED),
@@ -274,7 +275,6 @@
     // A request with a body is ineligible for push, so reset the
     // promised stream and request a new stream.
     if (found_promise_) {
-      found_promise_ = false;
       std::string url(request_info_->url.spec());
       QuicClientPromisedInfo* promised =
           session_->push_promise_index()->GetPromised(url);
@@ -301,10 +301,13 @@
 
   int rv;
 
-  if (found_promise_) {
+  if (!found_promise_) {
+    next_state_ = STATE_SET_REQUEST_PRIORITY;
+  } else if (!request_body_stream_) {
     next_state_ = STATE_HANDLE_PROMISE;
   } else {
-    next_state_ = STATE_SET_REQUEST_PRIORITY;
+    found_promise_ = false;
+    next_state_ = STATE_REQUEST_STREAM;
   }
   rv = DoLoop(OK);
 
@@ -320,7 +323,6 @@
 
   if (stream_ == nullptr)
     return GetResponseStatus();
-
   // Check if we already have the response headers. If so, return synchronously.
   if (response_headers_received_)
     return OK;
@@ -362,6 +364,7 @@
 }
 
 void QuicHttpStream::Close(bool /*not_reusable*/) {
+  session_error_ = ERR_ABORTED;
   SaveResponseStatus();
   // Note: the not_reusable flag has no meaning for QUIC streams.
   if (stream_) {
@@ -857,8 +860,8 @@
 int QuicHttpStream::ComputeResponseStatus() const {
   DCHECK(!has_response_status_);
 
-  // If the handshake has failed this will be handled by the
-  // QuicStreamFactory and HttpStreamFactory to mark QUIC as broken.
+  // If the handshake has failed this will be handled by the QuicStreamFactory
+  // and HttpStreamFactory to mark QUIC as broken if TCP is actually working.
   if (!was_handshake_confirmed_)
     return ERR_QUIC_HANDSHAKE_FAILED;
 
@@ -872,6 +875,23 @@
   if (!response_info_)
     return ERR_CONNECTION_CLOSED;
 
+  // Explicit stream error are always fatal.
+  if (quic_stream_error_ != QUIC_STREAM_NO_ERROR &&
+      quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) {
+    return ERR_QUIC_PROTOCOL_ERROR;
+  }
+
+  DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_);
+
+  // If the headers have not been received and QUIC is now broken, return
+  // ERR_QUIC_BROKEN_ERROR to permit HttpNetworkTransaction to retry the request
+  // over TCP.
+  if (!response_headers_received_ &&
+      http_server_properties_->IsAlternativeServiceBroken(AlternativeService(
+          kProtoQUIC, server_id_.host(), server_id_.port()))) {
+    return ERR_QUIC_BROKEN_ERROR;
+  }
+
   return ERR_QUIC_PROTOCOL_ERROR;
 }
 
diff --git a/src/net/quic/chromium/quic_http_stream.h b/src/net/quic/chromium/quic_http_stream.h
index 2ca5bbc..01d8395 100644
--- a/src/net/quic/chromium/quic_http_stream.h
+++ b/src/net/quic/chromium/quic_http_stream.h
@@ -150,8 +150,9 @@
   State next_state_;
 
   base::WeakPtr<QuicChromiumClientSession> session_;
+  const QuicServerId server_id_;  // The ID of the QUIC server for this stream.
 
-  HttpServerProperties* http_server_properties_;
+  HttpServerProperties* http_server_properties_;  // Unowned.
 
   QuicVersion quic_version_;
   int session_error_;             // Error code from the connection shutdown.
diff --git a/src/net/quic/chromium/quic_network_transaction_unittest.cc b/src/net/quic/chromium/quic_network_transaction_unittest.cc
index 9d5ac29..61edf02 100644
--- a/src/net/quic/chromium/quic_network_transaction_unittest.cc
+++ b/src/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -41,8 +41,11 @@
 #include "net/quic/chromium/mock_crypto_client_stream_factory.h"
 #include "net/quic/chromium/mock_network_change_notifier.h"
 #include "net/quic/chromium/mock_quic_data.h"
+#include "net/quic/chromium/quic_chromium_alarm_factory.h"
 #include "net/quic/chromium/quic_http_utils.h"
+#include "net/quic/chromium/quic_stream_factory_peer.h"
 #include "net/quic/chromium/quic_test_packet_maker.h"
+#include "net/quic/chromium/test_task_runner.h"
 #include "net/quic/core/crypto/quic_decrypter.h"
 #include "net/quic/core/crypto/quic_encrypter.h"
 #include "net/quic/core/quic_framer.h"
@@ -293,6 +296,16 @@
   }
 
   std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
+      QuicPacketNumber packet_number,
+      QuicPacketNumber largest_received,
+      QuicPacketNumber least_unacked,
+      QuicTime::Delta ack_delay_time) {
+    return client_maker_.MakeAckPacket(packet_number, largest_received,
+                                       least_unacked, least_unacked, true,
+                                       ack_delay_time);
+  }
+
+  std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
       QuicPacketNumber largest_received,
       QuicPacketNumber least_unacked) {
     return client_maker_.MakeAckPacket(2, largest_received, least_unacked,
@@ -454,6 +467,17 @@
                                                std::move(headers), nullptr);
   }
 
+  std::unique_ptr<QuicEncryptedPacket> ConstructClientMultipleDataFramesPacket(
+      QuicPacketNumber packet_number,
+      QuicStreamId stream_id,
+      bool should_include_version,
+      bool fin,
+      const std::vector<std::string>& data,
+      QuicStreamOffset offset) {
+    return client_maker_.MakeMultipleDataFramesPacket(
+        packet_number, stream_id, should_include_version, fin, offset, data);
+  }
+
   std::unique_ptr<QuicEncryptedPacket> ConstructServerPushPromisePacket(
       QuicPacketNumber packet_number,
       QuicStreamId stream_id,
@@ -638,6 +662,8 @@
         http_server_properties_.GetAlternativeServices(server);
     EXPECT_EQ(1u, alternative_service_vector.size());
     EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol);
+    EXPECT_FALSE(http_server_properties_.IsAlternativeServiceBroken(
+        alternative_service_vector[0]));
   }
 
   void AddHangingNonAlternateProtocolSocketData() {
@@ -717,7 +743,7 @@
 
   const QuicVersion version_;
   QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-  MockClock* clock_;  // Owned by QuicStreamFactory after CreateSession.
+  MockClock* clock_;     // Owned by QuicStreamFactory after CreateSession.
   QuicTestPacketMaker client_maker_;
   QuicTestPacketMaker server_maker_;
   std::unique_ptr<HttpNetworkSession> session_;
@@ -1019,8 +1045,7 @@
   // TODO(rch): the connection should be "to" the origin, so if the cert is
   // valid for the origin but not the alternative, that should work too.
   EXPECT_TRUE(cert->VerifyNameMatch(origin.host(), false));
-  EXPECT_TRUE(
-      cert->VerifyNameMatch(alternative.host(), false));
+  EXPECT_TRUE(cert->VerifyNameMatch(alternative.host(), false));
   ProofVerifyDetailsChromium verify_details;
   verify_details.cert_verify_result.verified_cert = cert;
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
@@ -1052,6 +1077,69 @@
   SendRequestAndExpectQuicResponse("hello!");
 }
 
+// Regression test for https://crbug.com/546991.
+// The server might not be able to serve a request on an alternative connection,
+// and might send a 421 Misdirected Request response status to indicate this.
+// HttpNetworkTransaction should reset the request and retry without using
+// alternative services.
+TEST_P(QuicNetworkTransactionTest, RetryMisdirectedRequest) {
+  // Set up alternative service to use QUIC.
+  // Note that |origins_to_force_quic_on| cannot be used in this test, because
+  // that overrides |enable_alternative_services|.
+  url::SchemeHostPort server(request_.url);
+  AlternativeService alternative_service(kProtoQUIC, kDefaultServerHostName,
+                                         443);
+  base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
+  http_server_properties_.SetAlternativeService(server, alternative_service,
+                                                expiration);
+
+  // First try: alternative job uses QUIC, gets 421 Misdirected Request error.
+  MockQuicData mock_quic_data;
+  QuicStreamOffset request_header_offset = 0;
+  mock_quic_data.AddWrite(ConstructSettingsPacket(
+      1, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize,
+      &request_header_offset));
+  mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
+      2, kClientDataStreamId1, true, true,
+      GetRequestHeaders("GET", "https", "/"), &request_header_offset));
+  mock_quic_data.AddRead(
+      ConstructServerResponseHeadersPacket(1, kClientDataStreamId1, false, true,
+                                           GetResponseHeaders("421"), nullptr));
+  mock_quic_data.AddWrite(ConstructClientAckAndRstPacket(
+      3, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1));
+  mock_quic_data.AddRead(ASYNC, OK);
+  mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // First try: main job uses TCP, connection fails.
+  // (A hanging connection would not work here, because the main Job on the
+  // second try would pool to that socket and hang.)
+  StaticSocketDataProvider failing_data;
+  MockConnect failing_connect(SYNCHRONOUS, ERR_CONNECTION_CLOSED);
+  failing_data.set_connect_data(failing_connect);
+  socket_factory_.AddSocketDataProvider(&failing_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // Second try: there is only one job, which succeeds over HTTP/1.1.
+  // There is no open TCP socket (the previous TCP connection got closed), so a
+  // new one is opened.
+  // Note that if there was an alternative QUIC Job created for the second try,
+  // that would read these data, and would fail with ERR_QUIC_PROTOCOL_ERROR.
+  // Therefore this test ensures that no alternative Job is created on retry.
+  MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello!"),
+                      MockRead(ASYNC, OK)};
+  StaticSocketDataProvider http_data(reads, arraysize(reads), nullptr, 0);
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // Retry logic hides ERR_MISDIRECTED_REQUEST: transaction succeeds.
+  CreateSession();
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  RunTransaction(&trans);
+  CheckWasHttpResponse(&trans);
+  CheckResponsePort(&trans, 443);
+  CheckResponseData(&trans, "hello!");
+}
+
 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) {
   params_.origins_to_force_quic_on.insert(
       HostPortPair::FromString("mail.example.org:443"));
@@ -1354,6 +1442,768 @@
   EXPECT_TRUE(details.quic_port_migration_detected);
 }
 
+// Verify that if a QUIC connection times out, the QuicHttpStream will
+// return QUIC_PROTOCOL_ERROR.
+TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmed) {
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that if a QUIC connection RTOs, the QuicHttpStream will
+// return QUIC_PROTOCOL_ERROR.
+TEST_P(QuicNetworkTransactionTest, TooManyRtosAfterHandshakeConfirmed) {
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeDataPacket(11, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      12, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      13, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that if a QUIC connection RTOs, while there are no active streams
+// QUIC will not be marked as broken.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedAndStreamReset) {
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      14, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  auto trans = base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY,
+                                                        session_.get());
+  TestCompletionCallback callback;
+  int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Now cancel the request.
+  trans.reset();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectQuicAlternateProtocolMapping();
+
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection times out, then QUIC will be marked as broken and the request
+// retried over TCP.
+TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // After that fails, it will be resent via TCP.
+  MockWrite http_writes[] = {
+      MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
+      MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
+      MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
+
+  MockRead http_reads[] = {
+      MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
+      MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
+      MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
+  SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
+                                arraysize(http_writes));
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  ASSERT_FALSE(http_data.AllReadDataConsumed());
+
+  // Read the response body over TCP.
+  CheckResponseData(&trans, "hello world");
+  ASSERT_TRUE(http_data.AllWriteDataConsumed());
+  ASSERT_TRUE(http_data.AllReadDataConsumed());
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection times out, then QUIC will be marked as broken but the request
+// will not be retried over TCP.
+TEST_P(QuicNetworkTransactionTest,
+       TimeoutAfterHandshakeConfirmedAndHeadersThenBrokenNotRetried) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_idle_connection_timeout_seconds = 5;
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
+  // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1));
+  quic_data.AddWrite(
+      ConstructClientAckPacket(3, 1, 1, QuicTime::Delta::FromMilliseconds(25)));
+
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(6, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      7, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(8, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      9, kHeadersStreamId, false, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, false,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, false, false, settings_offset, settings_data));
+
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  std::string response_data;
+  ASSERT_THAT(ReadTransaction(&trans, &response_data),
+              IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
+// Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
+// connection RTOs, then QUIC will be marked as broken and the request retried
+// over TCP.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      4, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      6, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      10, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeDataPacket(11, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      12, kHeadersStreamId, true, false, settings_offset, settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      13, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // After that fails, it will be resent via TCP.
+  MockWrite http_writes[] = {
+      MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
+      MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
+      MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
+
+  MockRead http_reads[] = {
+      MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
+      MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
+      MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
+  SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
+                                arraysize(http_writes));
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
+  TestCompletionCallback callback;
+  int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+
+  // Let the transaction proceed which will result in QUIC being marked
+  // as broken and the request falling back to TCP.
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  ExpectBrokenAlternateProtocolMapping();
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+  ASSERT_FALSE(http_data.AllReadDataConsumed());
+
+  // Read the response body over TCP.
+  CheckResponseData(&trans, "hello world");
+  ASSERT_TRUE(http_data.AllWriteDataConsumed());
+  ASSERT_TRUE(http_data.AllReadDataConsumed());
+}
+
+// Verify that if a QUIC connection RTOs, while there are no active streams
+// QUIC will be marked as broken.
+TEST_P(QuicNetworkTransactionTest,
+       TooManyRtosAfterHandshakeConfirmedAndStreamResetThenBroken) {
+  params_.mark_quic_broken_when_network_blackholes = true;
+  params_.quic_connection_options.push_back(k5RTO);
+
+  // The request will initially go out over QUIC.
+  MockQuicData quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  SpdyPriority priority =
+      ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
+
+  std::string request_data;
+  quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
+      1, kClientDataStreamId1, true, true, priority,
+      GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
+      &request_data));
+
+  std::string settings_data;
+  QuicStreamOffset settings_offset = header_stream_offset;
+  quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
+      2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
+      &header_stream_offset, &settings_data));
+
+  quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // TLP 1
+  quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // TLP 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      5, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 1
+  quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 2
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      8, kHeadersStreamId, true, false, settings_offset, settings_data));
+  quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  // RTO 3
+  quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(
+      11, kHeadersStreamId, true, false, settings_offset, settings_data));
+  // RTO 4
+  quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1,
+                                                 QUIC_STREAM_CANCELLED));
+  quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true,
+                                                  false, 0, request_data));
+  // RTO 5
+  quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket(
+      14, true, QuicTime::Delta::Infinite(), 0, 1, QUIC_TOO_MANY_RTOS,
+      "5 consecutive retransmission timeouts"));
+
+  quic_data.AddRead(ASYNC, OK);
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // In order for a new QUIC session to be established via alternate-protocol
+  // without racing an HTTP connection, we need the host resolution to happen
+  // synchronously.  Of course, even though QUIC *could* perform a 0-RTT
+  // connection to the the server, in this test we require confirmation
+  // before encrypting so the HTTP job will still start.
+  host_resolver_.set_synchronous_mode(true);
+  host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
+                                           "");
+  HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
+  AddressList address;
+  std::unique_ptr<HostResolver::Request> request;
+  host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
+                         &request, net_log_.bound());
+
+  CreateSession();
+  // Use a TestTaskRunner to avoid waiting in real time for timeouts.
+  scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
+  QuicStreamFactoryPeer::SetAlarmFactory(
+      session_->quic_stream_factory(),
+      base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
+                                                 clock_));
+
+  AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
+
+  auto trans = base::MakeUnique<HttpNetworkTransaction>(DEFAULT_PRIORITY,
+                                                        session_.get());
+  TestCompletionCallback callback;
+  int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // Pump the message loop to get the request started.
+  base::RunLoop().RunUntilIdle();
+  // Explicitly confirm the handshake.
+  crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
+      QuicSession::HANDSHAKE_CONFIRMED);
+
+  // Now cancel the request.
+  trans.reset();
+
+  // Run the QUIC session to completion.
+  quic_task_runner_->RunUntilIdle();
+
+  ExpectBrokenAlternateProtocolMapping();
+
+  ASSERT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
 TEST_P(QuicNetworkTransactionTest,
        DoNotUseAlternativeServiceQuicUnsupportedVersion) {
   std::string altsvc_header = base::StringPrintf(
@@ -3518,5 +4368,78 @@
   EXPECT_TRUE(AllDataConsumed());
 }
 
+// crbug.com/705109 - this confirms that matching request with a body
+// triggers a crash (pre-fix).
+TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) {
+  params_.origins_to_force_quic_on.insert(
+      HostPortPair::FromString("mail.example.org:443"));
+
+  MockQuicData mock_quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  mock_quic_data.AddWrite(ConstructSettingsPacket(
+      1, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize,
+      &header_stream_offset));
+  mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
+      2, kClientDataStreamId1, true, true,
+      GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+  QuicStreamOffset server_header_offset = 0;
+  mock_quic_data.AddRead(ConstructServerPushPromisePacket(
+      1, kClientDataStreamId1, kServerDataStreamId1, false,
+      GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset,
+      &server_maker_));
+  mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"),
+      &server_header_offset));
+  mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1));
+  mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"),
+      &server_header_offset));
+  mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1,
+                                                   false, true, 0, "hello!"));
+  mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1));
+  mock_quic_data.AddRead(ConstructServerDataPacket(
+      5, kServerDataStreamId1, false, true, 0, "and hello!"));
+
+  // Because the matching request has a body, we will see the push
+  // stream get cancelled, and the matching request go out on the
+  // wire.
+  mock_quic_data.AddWrite(ConstructClientAckAndRstPacket(
+      5, kServerDataStreamId1, QUIC_STREAM_CANCELLED, 5, 5, 1));
+  const char kBody[] = "1";
+  mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
+      6, kClientDataStreamId2, false, false,
+      GetRequestHeaders("GET", "https", "/pushed.jpg"), &header_stream_offset));
+  mock_quic_data.AddWrite(ConstructClientMultipleDataFramesPacket(
+      7, kClientDataStreamId2, false, true, {kBody}, 0));
+
+  // We see the same response as for the earlier pushed and cancelled
+  // stream.
+  mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      6, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
+      &server_header_offset));
+  mock_quic_data.AddRead(ConstructServerDataPacket(
+      7, kClientDataStreamId2, false, true, 0, "and hello!"));
+
+  mock_quic_data.AddWrite(ConstructClientAckPacket(8, 7, 6, 1));
+  mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
+  mock_quic_data.AddRead(ASYNC, 0);               // EOF
+  mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  // The non-alternate protocol job needs to hang in order to guarantee that
+  // the alternate-protocol job will "win".
+  AddHangingNonAlternateProtocolSocketData();
+
+  CreateSession();
+
+  // PUSH_PROMISE handling in the http layer gets exercised here.
+  SendRequestAndExpectQuicResponse("hello!");
+
+  request_.url = GURL("https://mail.example.org/pushed.jpg");
+  ChunkedUploadDataStream upload_data(0);
+  upload_data.AppendData("1", 1, true);
+  request_.upload_data_stream = &upload_data;
+  SendRequestAndExpectQuicResponse("and hello!");
+}
+
 }  // namespace test
 }  // namespace net
diff --git a/src/net/quic/chromium/quic_stream_factory.cc b/src/net/quic/chromium/quic_stream_factory.cc
index f7e7fcd..1fe0bf2 100644
--- a/src/net/quic/chromium/quic_stream_factory.cc
+++ b/src/net/quic/chromium/quic_stream_factory.cc
@@ -8,6 +8,7 @@
 #include <tuple>
 #include <utility>
 
+#include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/field_trial.h"
@@ -91,8 +92,13 @@
 // Set the maximum number of undecryptable packets the connection will store.
 const int32_t kMaxUndecryptablePackets = 100;
 
-// How long QUIC will be disabled for because of timeouts with open streams.
-const int kDisableQuicTimeoutSecs = 5 * 60;
+std::unique_ptr<base::Value> NetLogQuicStreamFactoryJobCallback(
+    const QuicServerId* server_id,
+    NetLogCaptureMode capture_mode) {
+  std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+  dict->SetString("server_id", server_id->ToString());
+  return std::move(dict);
+}
 
 std::unique_ptr<base::Value> NetLogQuicConnectionMigrationTriggerCallback(
     std::string trigger,
@@ -279,18 +285,18 @@
     UMA_HISTOGRAM_TIMES("Net.QuicSession.CertVerifierJob.CompleteTime",
                         base::TimeTicks::Now() - start_time_);
     if (!callback_.is_null())
-      callback_.Run(OK);
+      base::ResetAndReturn(&callback_).Run(OK);
   }
 
   const QuicServerId& server_id() const { return server_id_; }
 
  private:
-  QuicServerId server_id_;
+  const QuicServerId server_id_;
   ProofVerifierCallbackImpl* verify_callback_;
   std::unique_ptr<ProofVerifyContext> verify_context_;
   std::unique_ptr<ProofVerifyDetails> verify_details_;
   std::string verify_error_details_;
-  base::TimeTicks start_time_;
+  const base::TimeTicks start_time_;
   const NetLogWithSource net_log_;
   CompletionCallback callback_;
   base::WeakPtrFactory<CertVerifierJob> weak_factory_;
@@ -327,7 +333,6 @@
   int DoLoadServerInfo();
   int DoLoadServerInfoComplete(int rv);
   int DoConnect();
-  int DoResumeConnect();
   int DoConnectComplete(int rv);
 
   void OnIOComplete(int rv);
@@ -350,7 +355,6 @@
     STATE_LOAD_SERVER_INFO,
     STATE_LOAD_SERVER_INFO_COMPLETE,
     STATE_CONNECT,
-    STATE_RESUME_CONNECT,
     STATE_CONNECT_COMPLETE,
   };
   IoState io_state_;
@@ -358,9 +362,9 @@
   QuicStreamFactory* factory_;
   HostResolver* host_resolver_;
   std::unique_ptr<HostResolver::Request> request_;
-  QuicSessionKey key_;
-  int cert_verify_flags_;
-  bool was_alternative_service_recently_broken_;
+  const QuicSessionKey key_;
+  const int cert_verify_flags_;
+  const bool was_alternative_service_recently_broken_;
   std::unique_ptr<QuicServerInfo> server_info_;
   bool started_another_job_;
   const NetLogWithSource net_log_;
@@ -390,28 +394,28 @@
           was_alternative_service_recently_broken),
       server_info_(std::move(server_info)),
       started_another_job_(false),
-      net_log_(net_log),
+      net_log_(
+          NetLogWithSource::Make(net_log.net_log(),
+                                 NetLogSourceType::QUIC_STREAM_FACTORY_JOB)),
       num_sent_client_hellos_(0),
       session_(nullptr),
-      weak_factory_(this) {}
-
-QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
-                            HostResolver* host_resolver,
-                            QuicChromiumClientSession* session,
-                            const QuicSessionKey& key)
-    : io_state_(STATE_RESUME_CONNECT),
-      factory_(factory),
-      host_resolver_(host_resolver),  // unused
-      key_(key),
-      cert_verify_flags_(0),                            // unused
-      was_alternative_service_recently_broken_(false),  // unused
-      started_another_job_(false),                      // unused
-      net_log_(session->net_log()),                     // unused
-      num_sent_client_hellos_(0),
-      session_(session),
-      weak_factory_(this) {}
+      weak_factory_(this) {
+  net_log_.BeginEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB,
+      base::Bind(&NetLogQuicStreamFactoryJobCallback, &key_.server_id()));
+  // Associate |net_log_| with |net_log|.
+  net_log_.AddEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB_BOUND_TO_HTTP_STREAM_JOB,
+      net_log.source().ToEventParametersCallback());
+  net_log.AddEvent(
+      NetLogEventType::HTTP_STREAM_JOB_BOUND_TO_QUIC_STREAM_FACTORY_JOB,
+      net_log_.source().ToEventParametersCallback());
+}
 
 QuicStreamFactory::Job::~Job() {
+  net_log_.EndEvent(NetLogEventType::QUIC_STREAM_FACTORY_JOB);
+  DCHECK(callback_.is_null());
+
   // If disk cache has a pending WaitForDataReadyCallback, cancel that callback.
   if (server_info_)
     server_info_->ResetWaitForDataReadyCallback();
@@ -449,10 +453,6 @@
         CHECK_EQ(OK, rv);
         rv = DoConnect();
         break;
-      case STATE_RESUME_CONNECT:
-        CHECK_EQ(OK, rv);
-        rv = DoResumeConnect();
-        break;
       case STATE_CONNECT_COMPLETE:
         rv = DoConnectComplete(rv);
         break;
@@ -466,9 +466,8 @@
 
 void QuicStreamFactory::Job::OnIOComplete(int rv) {
   rv = DoLoop(rv);
-  if (rv != ERR_IO_PENDING && !callback_.is_null()) {
-    callback_.Run(rv);
-  }
+  if (rv != ERR_IO_PENDING && !callback_.is_null())
+    base::ResetAndReturn(&callback_).Run(rv);
 }
 
 void QuicStreamFactory::Job::RunAuxilaryJob() {
@@ -528,6 +527,9 @@
 }
 
 int QuicStreamFactory::Job::DoLoadServerInfo() {
+  net_log_.BeginEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB_LOAD_SERVER_INFO);
+
   io_state_ = STATE_LOAD_SERVER_INFO_COMPLETE;
 
   DCHECK(server_info_);
@@ -565,6 +567,7 @@
 }
 
 int QuicStreamFactory::Job::DoLoadServerInfoComplete(int rv) {
+  net_log_.EndEvent(NetLogEventType::QUIC_STREAM_FACTORY_JOB_LOAD_SERVER_INFO);
   UMA_HISTOGRAM_TIMES("Net.QuicServerInfo.DiskCacheWaitForDataReadyTime",
                       base::TimeTicks::Now() - dns_resolution_end_time_);
 
@@ -590,6 +593,9 @@
 
   bool require_confirmation = factory_->require_confirmation() ||
                               was_alternative_service_recently_broken_;
+  net_log_.BeginEvent(
+      NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT,
+      NetLog::BoolCallback("require_confirmation", require_confirmation));
 
   int rv = factory_->CreateSession(
       key_, cert_verify_flags_, std::move(server_info_), require_confirmation,
@@ -619,16 +625,8 @@
   return rv;
 }
 
-int QuicStreamFactory::Job::DoResumeConnect() {
-  io_state_ = STATE_CONNECT_COMPLETE;
-
-  int rv = session_->ResumeCryptoConnect(
-      base::Bind(&QuicStreamFactory::Job::OnIOComplete, GetWeakPtr()));
-
-  return rv;
-}
-
 int QuicStreamFactory::Job::DoConnectComplete(int rv) {
+  net_log_.EndEvent(NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT);
   if (session_ && session_->error() == QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT) {
     num_sent_client_hellos_ += session_->GetNumSentClientHellos();
     if (num_sent_client_hellos_ >= QuicCryptoClientStream::kMaxClientHellos)
@@ -704,7 +702,7 @@
 
 void QuicStreamRequest::OnRequestComplete(int rv) {
   factory_ = nullptr;
-  callback_.Run(rv);
+  base::ResetAndReturn(&callback_).Run(rv);
 }
 
 base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const {
@@ -756,7 +754,7 @@
     bool delay_tcp_race,
     int max_server_configs_stored_in_properties,
     bool close_sessions_on_ip_change,
-    bool disable_quic_on_timeout_with_open_streams,
+    bool mark_quic_broken_when_network_blackholes,
     int idle_connection_timeout_seconds,
     int reduced_ping_timeout_seconds,
     int packet_reader_yield_after_duration_milliseconds,
@@ -801,10 +799,8 @@
       enable_non_blocking_io_(enable_non_blocking_io),
       disable_disk_cache_(disable_disk_cache),
       prefer_aes_(prefer_aes),
-      disable_quic_on_timeout_with_open_streams_(
-          disable_quic_on_timeout_with_open_streams),
-      consecutive_disabled_count_(0),
-      need_to_evaluate_consecutive_disabled_count_(false),
+      mark_quic_broken_when_network_blackholes_(
+          mark_quic_broken_when_network_blackholes),
       socket_receive_buffer_size_(socket_receive_buffer_size),
       delay_tcp_race_(delay_tcp_race),
       ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)),
@@ -827,7 +823,6 @@
       check_persisted_supports_quic_(true),
       has_initialized_data_(false),
       num_push_streams_created_(0),
-      status_(OPEN),
       task_runner_(nullptr),
       ssl_config_service_(ssl_config_service),
       weak_factory_(this) {
@@ -1012,7 +1007,6 @@
 
   // Associate with active job to |server_id| if such exists.
   if (HasActiveJob(server_id)) {
-    active_requests_[request] = server_id;
     job_requests_map_[server_id].insert(request);
     return ERR_IO_PENDING;
   }
@@ -1056,7 +1050,6 @@
   int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
                                base::Unretained(this), job.get()));
   if (rv == ERR_IO_PENDING) {
-    active_requests_[request] = server_id;
     job_requests_map_[server_id].insert(request);
     Job* job_ptr = job.get();
     active_jobs_[server_id][job_ptr] = std::move(job);
@@ -1148,15 +1141,18 @@
     }
   }
 
+  ServerIDRequestsMap::iterator requests_iter =
+      job_requests_map_.find(server_id);
+  DCHECK(requests_iter != job_requests_map_.end());
   if (rv == OK) {
     if (!always_require_handshake_confirmation_)
       set_require_confirmation(false);
 
-    if (!job_requests_map_[server_id].empty()) {
+    if (!requests_iter->second.empty()) {
       SessionMap::iterator session_it = active_sessions_.find(server_id);
       DCHECK(session_it != active_sessions_.end());
       QuicChromiumClientSession* session = session_it->second;
-      for (QuicStreamRequest* request : job_requests_map_[server_id]) {
+      for (QuicStreamRequest* request : requests_iter->second) {
         DCHECK(request->server_id() == server_id);
         // Do not notify |request| yet.
         request->SetSession(session);
@@ -1164,11 +1160,9 @@
     }
   }
 
-  while (!job_requests_map_[server_id].empty()) {
-    RequestSet::iterator it = job_requests_map_[server_id].begin();
-    QuicStreamRequest* request = *it;
-    job_requests_map_[server_id].erase(it);
-    active_requests_.erase(request);
+  // It's okay not to erase |request| from |requests_iter->second| because the
+  // entire RequestSet will be erased from |job_requests_map_|.
+  for (auto* request : requests_iter->second) {
     // Even though we're invoking callbacks here, we don't need to worry
     // about |this| being deleted, because the factory is owned by the
     // profile which can not be deleted via callbacks.
@@ -1182,7 +1176,7 @@
 
   active_jobs_[server_id].clear();
   active_jobs_.erase(server_id);
-  job_requests_map_.erase(server_id);
+  job_requests_map_.erase(requests_iter);
 }
 
 void QuicStreamFactory::OnCertVerifyJobComplete(CertVerifierJob* job, int rv) {
@@ -1191,38 +1185,8 @@
 
 std::unique_ptr<QuicHttpStream> QuicStreamFactory::CreateFromSession(
     QuicChromiumClientSession* session) {
-  return std::unique_ptr<QuicHttpStream>(
-      new QuicHttpStream(session->GetWeakPtr(), http_server_properties_));
-}
-
-bool QuicStreamFactory::IsQuicDisabled() const {
-  return status_ != OPEN;
-}
-
-bool QuicStreamFactory::OnHandshakeConfirmed(
-    QuicChromiumClientSession* session) {
-  if (!IsQuicDisabled())
-    return false;
-
-  session->CloseSessionOnErrorAndNotifyFactoryLater(
-      ERR_ABORTED, QUIC_TIMEOUTS_WITH_OPEN_STREAMS);
-
-  return true;
-}
-
-void QuicStreamFactory::OnTcpJobCompleted(bool succeeded) {
-  if (status_ != CLOSED)
-    return;
-
-  // If QUIC connections are failing while TCP connections are working,
-  // then stop using QUIC. On the other hand if both QUIC and TCP are
-  // failing, then attempt to use QUIC again.
-  if (succeeded) {
-    status_ = DISABLED;
-    return;
-  }
-
-  status_ = OPEN;
+  return base::MakeUnique<QuicHttpStream>(session->GetWeakPtr(),
+                                          http_server_properties_);
 }
 
 void QuicStreamFactory::OnIdleSession(QuicChromiumClientSession* session) {}
@@ -1261,31 +1225,23 @@
   all_sessions_.erase(session);
 }
 
-void QuicStreamFactory::OnTimeoutWithOpenStreams() {
-  // Reduce PING timeout when connection times out with open stream.
-  if (ping_timeout_ > reduced_ping_timeout_) {
+void QuicStreamFactory::OnBlackholeAfterHandshakeConfirmed(
+    QuicChromiumClientSession* session) {
+  // Reduce PING timeout when connection blackholes after the handshake.
+  if (ping_timeout_ > reduced_ping_timeout_)
     ping_timeout_ = reduced_ping_timeout_;
-  }
-  if (disable_quic_on_timeout_with_open_streams_) {
-    if (status_ == OPEN) {
-      task_runner_->PostDelayedTask(
-          FROM_HERE, base::Bind(&QuicStreamFactory::OpenFactory,
-                                weak_factory_.GetWeakPtr()),
-          base::TimeDelta::FromSeconds(kDisableQuicTimeoutSecs *
-                                       (1 << consecutive_disabled_count_)));
-      consecutive_disabled_count_++;
-      need_to_evaluate_consecutive_disabled_count_ = true;
-    }
-    status_ = CLOSED;
+
+  if (mark_quic_broken_when_network_blackholes_) {
+    http_server_properties_->MarkAlternativeServiceBroken(
+        AlternativeService(kProtoQUIC, session->server_id().host_port_pair()));
   }
 }
 
 void QuicStreamFactory::CancelRequest(QuicStreamRequest* request) {
-  RequestMap::iterator request_it = active_requests_.find(request);
-  DCHECK(request_it != active_requests_.end());
-  const QuicServerId& server_id = request_it->second;
-  job_requests_map_[server_id].erase(request);
-  active_requests_.erase(request_it);
+  ServerIDRequestsMap::iterator requests_it =
+      job_requests_map_.find(request->server_id());
+  DCHECK(requests_it != job_requests_map_.end());
+  requests_it->second.erase(request);
 }
 
 void QuicStreamFactory::CloseAllSessions(int error, QuicErrorCode quic_error) {
@@ -1332,13 +1288,11 @@
 }
 
 void QuicStreamFactory::OnIPAddressChanged() {
-  status_ = OPEN;
   CloseAllSessions(ERR_NETWORK_CHANGED, QUIC_IP_ADDRESS_CHANGED);
   set_require_confirmation(true);
 }
 
 void QuicStreamFactory::OnNetworkConnected(NetworkHandle network) {
-  status_ = OPEN;
   ScopedConnectionMigrationEventLog scoped_event_log(net_log_,
                                                      "OnNetworkConnected");
   QuicStreamFactory::SessionIdMap::iterator it = all_sessions_.begin();
@@ -1658,15 +1612,6 @@
     base::TimeTicks dns_resolution_end_time,
     const NetLogWithSource& net_log,
     QuicChromiumClientSession** session) {
-  if (need_to_evaluate_consecutive_disabled_count_) {
-    task_runner_->PostDelayedTask(
-        FROM_HERE,
-        base::Bind(&QuicStreamFactory::MaybeClearConsecutiveDisabledCount,
-                   weak_factory_.GetWeakPtr()),
-        base::TimeDelta::FromSeconds(kDisableQuicTimeoutSecs));
-
-    need_to_evaluate_consecutive_disabled_count_ = false;
-  }
   TRACE_EVENT0(kNetTracingCategory, "QuicStreamFactory::CreateSession");
   IPEndPoint addr = *address_list.begin();
   const QuicServerId& server_id = key.server_id();
@@ -1951,6 +1896,10 @@
                                                server_id.host_port_pair());
   url::SchemeHostPort server("https", server_id.host_port_pair().host(),
                              server_id.host_port_pair().port());
+  // Do nothing if QUIC is currently marked as broken.
+  if (http_server_properties_->IsAlternativeServiceBroken(alternative_service))
+    return;
+
   if (session->IsCryptoHandshakeConfirmed()) {
     http_server_properties_->ConfirmAlternativeService(alternative_service);
     ServerNetworkStats network_stats;
@@ -1984,13 +1933,4 @@
       alternative_service);
 }
 
-void QuicStreamFactory::OpenFactory() {
-  status_ = OPEN;
-}
-
-void QuicStreamFactory::MaybeClearConsecutiveDisabledCount() {
-  if (status_ == OPEN)
-    consecutive_disabled_count_ = 0;
-}
-
 }  // namespace net
diff --git a/src/net/quic/chromium/quic_stream_factory.h b/src/net/quic/chromium/quic_stream_factory.h
index 99a3791..7edae13 100644
--- a/src/net/quic/chromium/quic_stream_factory.h
+++ b/src/net/quic/chromium/quic_stream_factory.h
@@ -61,7 +61,7 @@
 class NetLog;
 class ProxyDelegate;
 class QuicClock;
-class QuicChromiumAlarmFactory;
+class QuicAlarmFactory;
 class QuicChromiumConnectionHelper;
 class QuicCryptoClientStreamFactory;
 class QuicRandom;
@@ -219,7 +219,7 @@
       bool delay_tcp_race,
       int max_server_configs_stored_in_properties,
       bool close_sessions_on_ip_change,
-      bool disable_quic_on_timeout_with_open_streams,
+      bool mark_quic_broken_when_network_blackholes,
       int idle_connection_timeout_seconds,
       int reduced_ping_timeout_seconds,
       int packet_reader_yield_after_duration_milliseconds,
@@ -261,9 +261,6 @@
   // could be used for.
   void OnTcpJobCompleted(bool succeeded);
 
-  // Returns true if QUIC is disabled.
-  bool IsQuicDisabled() const;
-
   // Called by a session when it becomes idle.
   void OnIdleSession(QuicChromiumClientSession* session);
 
@@ -274,8 +271,8 @@
   // Called by a session after it shuts down.
   void OnSessionClosed(QuicChromiumClientSession* session);
 
-  // Called by a session when it times out with open streams.
-  void OnTimeoutWithOpenStreams();
+  // Called by a session when it blackholes after the handshake is confirmed.
+  void OnBlackholeAfterHandshakeConfirmed(QuicChromiumClientSession* session);
 
   // Cancels a pending request.
   void CancelRequest(QuicStreamRequest* request);
@@ -376,7 +373,7 @@
 
   QuicChromiumConnectionHelper* helper() { return helper_.get(); }
 
-  QuicChromiumAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
+  QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
 
   bool has_quic_server_info_factory() const {
     return quic_server_info_factory_.get() != nullptr;
@@ -406,6 +403,10 @@
     return migrate_sessions_on_network_change_;
   }
 
+  bool mark_quic_broken_when_network_blackholes() const {
+    return mark_quic_broken_when_network_blackholes_;
+  }
+
   // Dumps memory allocation stats. |parent_dump_absolute_name| is the name
   // used by the parent MemoryAllocatorDump in the memory dump hierarchy.
   void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
@@ -425,18 +426,11 @@
   typedef std::map<QuicChromiumClientSession*, IPEndPoint> SessionPeerIPMap;
   typedef std::map<Job*, std::unique_ptr<Job>> JobSet;
   typedef std::map<QuicServerId, JobSet> JobMap;
-  typedef std::map<QuicStreamRequest*, QuicServerId> RequestMap;
   typedef std::set<QuicStreamRequest*> RequestSet;
   typedef std::map<QuicServerId, RequestSet> ServerIDRequestsMap;
   typedef std::map<QuicServerId, std::unique_ptr<CertVerifierJob>>
       CertVerifierJobMap;
 
-  enum FactoryStatus {
-    OPEN,     // New streams may be created.
-    CLOSED,   // No new streams may be created temporarily.
-    DISABLED  // No more streams may be created until the network changes.
-  };
-
   // Creates a job which doesn't wait for server config to be loaded from the
   // disk cache. This job is started via a PostTask.
   void CreateAuxilaryJob(const QuicSessionKey& key,
@@ -521,12 +515,6 @@
       bool close_session_on_error,
       const NetLogWithSource& net_log);
 
-  // Called to re-enable QUIC when QUIC has been disabled.
-  void OpenFactory();
-  // If QUIC has been working well after having been recently
-  // disabled, clear the |consecutive_disabled_count_|.
-  void MaybeClearConsecutiveDisabledCount();
-
   bool require_confirmation_;
   NetLog* net_log_;
   HostResolver* host_resolver_;
@@ -552,7 +540,7 @@
   std::unique_ptr<QuicChromiumConnectionHelper> helper_;
 
   // The alarm factory used for all connections.
-  std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_;
+  std::unique_ptr<QuicAlarmFactory> alarm_factory_;
 
   // Contains owning pointers to all sessions that currently exist.
   SessionIdMap all_sessions_;
@@ -573,8 +561,8 @@
   QuicCryptoClientConfig crypto_config_;
 
   JobMap active_jobs_;
+  // Map from QuicServerId to a set of non-owning QuicStreamRequest pointers.
   ServerIDRequestsMap job_requests_map_;
-  RequestMap active_requests_;
 
   CertVerifierJobMap active_cert_verifier_jobs_;
 
@@ -607,13 +595,9 @@
   // Set if AES-GCM should be preferred, even if there is no hardware support.
   bool prefer_aes_;
 
-  // True if QUIC should be disabled when there are timeouts with open
-  // streams.
-  bool disable_quic_on_timeout_with_open_streams_;
-
-  // Number of times in a row that QUIC has been disabled.
-  int consecutive_disabled_count_;
-  bool need_to_evaluate_consecutive_disabled_count_;
+  // True if QUIC should be marked as broken when a connection blackholes after
+  // the handshake is confirmed.
+  bool mark_quic_broken_when_network_blackholes_;
 
   // Size of the UDP receive buffer.
   int socket_receive_buffer_size_;
@@ -670,9 +654,6 @@
 
   QuicClientPushPromiseIndex push_promise_index_;
 
-  // Current status of the factory's ability to create streams.
-  FactoryStatus status_;
-
   base::TaskRunner* task_runner_;
 
   const scoped_refptr<SSLConfigService> ssl_config_service_;
diff --git a/src/net/quic/chromium/quic_stream_factory_peer.cc b/src/net/quic/chromium/quic_stream_factory_peer.cc
index 8ddb9dd..6352df9 100644
--- a/src/net/quic/chromium/quic_stream_factory_peer.cc
+++ b/src/net/quic/chromium/quic_stream_factory_peer.cc
@@ -80,10 +80,6 @@
   return factory->ping_timeout_;
 }
 
-bool QuicStreamFactoryPeer::IsQuicDisabled(QuicStreamFactory* factory) {
-  return factory->IsQuicDisabled();
-}
-
 bool QuicStreamFactoryPeer::GetDelayTcpRace(QuicStreamFactory* factory) {
   return factory->delay_tcp_race_;
 }
@@ -203,5 +199,11 @@
   return factory->num_push_streams_created_;
 }
 
+void QuicStreamFactoryPeer::SetAlarmFactory(
+    QuicStreamFactory* factory,
+    std::unique_ptr<QuicAlarmFactory> alarm_factory) {
+  factory->alarm_factory_ = std::move(alarm_factory);
+}
+
 }  // namespace test
 }  // namespace net
diff --git a/src/net/quic/chromium/quic_stream_factory_peer.h b/src/net/quic/chromium/quic_stream_factory_peer.h
index d044945..822b78f 100644
--- a/src/net/quic/chromium/quic_stream_factory_peer.h
+++ b/src/net/quic/chromium/quic_stream_factory_peer.h
@@ -19,12 +19,13 @@
 namespace net {
 
 class NetLogWithSource;
+class QuicAlarmFactory;
+class QuicChromiumClientSession;
+class QuicClientPushPromiseIndex;
 class QuicConfig;
 class QuicCryptoClientConfig;
 class QuicHttpStream;
 class QuicStreamFactory;
-class QuicChromiumClientSession;
-class QuicClientPushPromiseIndex;
 
 namespace test {
 
@@ -59,8 +60,6 @@
 
   static QuicTime::Delta GetPingTimeout(QuicStreamFactory* factory);
 
-  static bool IsQuicDisabled(QuicStreamFactory* factory);
-
   static bool GetDelayTcpRace(QuicStreamFactory* factory);
 
   static void SetDelayTcpRace(QuicStreamFactory* factory, bool delay_tcp_race);
@@ -103,6 +102,9 @@
 
   static int GetNumPushStreamsCreated(QuicStreamFactory* factory);
 
+  static void SetAlarmFactory(QuicStreamFactory* factory,
+                              std::unique_ptr<QuicAlarmFactory> alarm_factory);
+
  private:
   DISALLOW_COPY_AND_ASSIGN(QuicStreamFactoryPeer);
 };
diff --git a/src/net/quic/chromium/quic_stream_factory_test.cc b/src/net/quic/chromium/quic_stream_factory_test.cc
index a698fe7..c3a1927 100644
--- a/src/net/quic/chromium/quic_stream_factory_test.cc
+++ b/src/net/quic/chromium/quic_stream_factory_test.cc
@@ -248,7 +248,6 @@
         receive_buffer_size_(0),
         delay_tcp_race_(true),
         close_sessions_on_ip_change_(false),
-        disable_quic_on_timeout_with_open_streams_(false),
         idle_connection_timeout_seconds_(kIdleConnectionTimeoutSeconds),
         reduced_ping_timeout_seconds_(kPingTimeoutSecs),
         packet_reader_yield_after_duration_milliseconds_(
@@ -285,7 +284,7 @@
         receive_buffer_size_, delay_tcp_race_,
         /*max_server_configs_stored_in_properties*/ 0,
         close_sessions_on_ip_change_,
-        disable_quic_on_timeout_with_open_streams_,
+        /*mark_quic_broken_when_network_blackholes*/ false,
         idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_,
         packet_reader_yield_after_duration_milliseconds_,
         migrate_sessions_on_network_change_, migrate_sessions_early_,
@@ -789,7 +788,6 @@
   int receive_buffer_size_;
   bool delay_tcp_race_;
   bool close_sessions_on_ip_change_;
-  bool disable_quic_on_timeout_with_open_streams_;
   int idle_connection_timeout_seconds_;
   int reduced_ping_timeout_seconds_;
   int packet_reader_yield_after_duration_milliseconds_;
@@ -4686,7 +4684,6 @@
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
 
   QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
 
   MockQuicData socket_data;
   socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
@@ -4739,8 +4736,6 @@
   base::RunLoop run_loop;
   run_loop.RunUntilIdle();
 
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
   // The first connection times out with open stream, QUIC should reduce initial
   // PING time for subsequent connections.
   EXPECT_EQ(QuicTime::Delta::FromSeconds(10),
@@ -4767,7 +4762,6 @@
   // QuicStreamFactory::OnSessionClosed() runs.
   base::RunLoop run_loop2;
   run_loop2.RunUntilIdle();
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
 
   EXPECT_TRUE(socket_data.AllReadDataConsumed());
   EXPECT_TRUE(socket_data.AllWriteDataConsumed());
@@ -4775,269 +4769,6 @@
   EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
 }
 
-TEST_P(QuicStreamFactoryTest, DisableQuicWhenTimeoutsWithOpenStreams) {
-  disable_disk_cache_ = true;
-  disable_quic_on_timeout_with_open_streams_ = true;
-  Initialize();
-  ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
-  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
-  QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  MockQuicData socket_data;
-  socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
-  socket_data.AddWrite(
-      ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
-                              kDefaultMaxUncompressedHeaderSize, nullptr));
-  socket_data.AddSocketDataToFactory(&socket_factory_);
-
-  crypto_client_stream_factory_.set_handshake_mode(
-      MockCryptoClientStream::CONFIRM_HANDSHAKE);
-  host_resolver_.set_synchronous_mode(true);
-  host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
-                                           "192.168.0.1", "");
-
-  // Test first timeouts with open streams will disable QUIC.
-  QuicStreamRequest request(factory_.get(), &http_server_properties_);
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
-                                /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                                callback_.callback()));
-
-  QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
-
-  std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
-  EXPECT_TRUE(stream.get());
-  HttpRequestInfo request_info;
-  EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
-                                         net_log_, CompletionCallback()));
-
-  DVLOG(1)
-      << "Created 1st session and initialized a stream. Now trigger timeout."
-      << "Will disable QUIC.";
-  session->connection()->CloseConnection(QUIC_NETWORK_IDLE_TIMEOUT, "test",
-                                         ConnectionCloseBehavior::SILENT_CLOSE);
-  // Need to spin the loop now to ensure that
-  // QuicStreamFactory::OnSessionClosed() runs.
-  base::RunLoop run_loop;
-  run_loop.RunUntilIdle();
-
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  // Verify that QUIC is fully disabled after a TCP job succeeds.
-  factory_->OnTcpJobCompleted(/*succeeded=*/true);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  // Verify that QUIC stays disabled after a TCP job succeeds.
-  factory_->OnTcpJobCompleted(/*succeeded=*/false);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  EXPECT_TRUE(socket_data.AllReadDataConsumed());
-  EXPECT_TRUE(socket_data.AllWriteDataConsumed());
-}
-
-TEST_P(QuicStreamFactoryTest,
-       DisableQuicWhenTimeoutsWithOpenStreamsExponentialBackoff) {
-  disable_disk_cache_ = true;
-  disable_quic_on_timeout_with_open_streams_ = true;
-  Initialize();
-  ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
-  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
-  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
-  QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  MockQuicData socket_data;
-  socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
-  socket_data.AddWrite(
-      ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
-                              kDefaultMaxUncompressedHeaderSize, nullptr));
-  socket_data.AddSocketDataToFactory(&socket_factory_);
-
-  MockQuicData socket_data2;
-  socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
-  socket_data2.AddWrite(
-      ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
-                              kDefaultMaxUncompressedHeaderSize, nullptr));
-  socket_data2.AddSocketDataToFactory(&socket_factory_);
-
-  crypto_client_stream_factory_.set_handshake_mode(
-      MockCryptoClientStream::CONFIRM_HANDSHAKE);
-  host_resolver_.set_synchronous_mode(true);
-  host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
-                                           "192.168.0.1", "");
-
-  // Test first timeouts with open streams will disable QUIC.
-  QuicStreamRequest request(factory_.get(), &http_server_properties_);
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
-                                /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                                callback_.callback()));
-
-  QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
-
-  std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
-  EXPECT_TRUE(stream.get());
-  HttpRequestInfo request_info;
-  EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
-                                         net_log_, CompletionCallback()));
-
-  DVLOG(1)
-      << "Created 1st session and initialized a stream. Now trigger timeout."
-      << "Will disable QUIC.";
-  session->connection()->CloseConnection(QUIC_NETWORK_IDLE_TIMEOUT, "test",
-                                         ConnectionCloseBehavior::SILENT_CLOSE);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  ASSERT_EQ(clock_->NowInTicks() + base::TimeDelta::FromMinutes(5),
-            runner_->GetPostedTasks()[0].GetTimeToRun());
-  runner_->RunNextTask();
-
-  // Need to spin the loop now to ensure that
-  // QuicStreamFactory::OnSessionClosed() runs.
-  base::RunLoop run_loop;
-  run_loop.RunUntilIdle();
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_TRUE(runner_->GetPostedTasks().empty());
-
-  // Create a new session which will cause a task to be posted to
-  // clear the exponential backoff.
-  QuicStreamRequest request2(factory_.get(), &http_server_properties_);
-  EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_,
-                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                                 callback_.callback()));
-  QuicChromiumClientSession* session2 = GetActiveSession(host_port_pair_);
-  std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
-  EXPECT_TRUE(stream2.get());
-  HttpRequestInfo request_info2;
-  EXPECT_EQ(OK, stream2->InitializeStream(&request_info2, DEFAULT_PRIORITY,
-                                          net_log_, CompletionCallback()));
-
-  // Check that the clear task has been posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  ASSERT_EQ(clock_->NowInTicks() + base::TimeDelta::FromMinutes(5),
-            runner_->GetPostedTasks()[0].GetTimeToRun());
-
-  session2->connection()->CloseConnection(
-      QUIC_NETWORK_IDLE_TIMEOUT, "test", ConnectionCloseBehavior::SILENT_CLOSE);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_EQ(2u, runner_->GetPostedTasks().size());
-  ASSERT_EQ(clock_->NowInTicks() + base::TimeDelta::FromMinutes(10),
-            runner_->GetPostedTasks()[1].GetTimeToRun());
-  runner_->RunNextTask();
-
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  EXPECT_TRUE(socket_data.AllReadDataConsumed());
-  EXPECT_TRUE(socket_data.AllWriteDataConsumed());
-}
-
-TEST_P(QuicStreamFactoryTest,
-       DisableQuicWhenTimeoutsWithOpenStreamsExponentialBackoffReset) {
-  disable_disk_cache_ = true;
-  disable_quic_on_timeout_with_open_streams_ = true;
-  Initialize();
-  ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
-  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
-  crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
-  QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  MockQuicData socket_data;
-  socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
-  socket_data.AddWrite(
-      ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
-                              kDefaultMaxUncompressedHeaderSize, nullptr));
-  socket_data.AddSocketDataToFactory(&socket_factory_);
-
-  MockQuicData socket_data2;
-  socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
-  socket_data2.AddWrite(
-      ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
-                              kDefaultMaxUncompressedHeaderSize, nullptr));
-  socket_data2.AddSocketDataToFactory(&socket_factory_);
-
-  crypto_client_stream_factory_.set_handshake_mode(
-      MockCryptoClientStream::CONFIRM_HANDSHAKE);
-  host_resolver_.set_synchronous_mode(true);
-  host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
-                                           "192.168.0.1", "");
-
-  // Test first timeouts with open streams will disable QUIC.
-  QuicStreamRequest request(factory_.get(), &http_server_properties_);
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
-                                /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                                callback_.callback()));
-
-  QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
-
-  std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
-  EXPECT_TRUE(stream.get());
-  HttpRequestInfo request_info;
-  EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY,
-                                         net_log_, CompletionCallback()));
-
-  DVLOG(1)
-      << "Created 1st session and initialized a stream. Now trigger timeout."
-      << "Will disable QUIC.";
-  session->connection()->CloseConnection(QUIC_NETWORK_IDLE_TIMEOUT, "test",
-                                         ConnectionCloseBehavior::SILENT_CLOSE);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  ASSERT_EQ(clock_->NowInTicks() + base::TimeDelta::FromMinutes(5),
-            runner_->GetPostedTasks()[0].GetTimeToRun());
-  runner_->RunNextTask();
-
-  // Need to spin the loop now to ensure that
-  // QuicStreamFactory::OnSessionClosed() runs.
-  base::RunLoop run_loop;
-  run_loop.RunUntilIdle();
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_TRUE(runner_->GetPostedTasks().empty());
-
-  // Create a new session which will cause a task to be posted to
-  // clear the exponential backoff.
-  QuicStreamRequest request2(factory_.get(), &http_server_properties_);
-  EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_,
-                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                                 callback_.callback()));
-  QuicChromiumClientSession* session2 = GetActiveSession(host_port_pair_);
-  std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream();
-  EXPECT_TRUE(stream2.get());
-  HttpRequestInfo request_info2;
-  EXPECT_EQ(OK, stream2->InitializeStream(&request_info2, DEFAULT_PRIORITY,
-                                          net_log_, CompletionCallback()));
-
-  // Run the clear task and verify that the next disabling is
-  // back to the default timeout.
-  runner_->RunNextTask();
-
-  // QUIC should still be enabled.
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  session2->connection()->CloseConnection(
-      QUIC_NETWORK_IDLE_TIMEOUT, "test", ConnectionCloseBehavior::SILENT_CLOSE);
-  EXPECT_TRUE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  ASSERT_EQ(clock_->NowInTicks() + base::TimeDelta::FromMinutes(5),
-            runner_->GetPostedTasks()[0].GetTimeToRun());
-  runner_->RunNextTask();
-
-  EXPECT_FALSE(QuicStreamFactoryPeer::IsQuicDisabled(factory_.get()));
-
-  EXPECT_TRUE(socket_data.AllReadDataConsumed());
-  EXPECT_TRUE(socket_data.AllWriteDataConsumed());
-}
-
 TEST_P(QuicStreamFactoryTest, EnableDelayTcpRace) {
   Initialize();
   ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
diff --git a/src/net/quic/chromium/quic_test_packet_maker.cc b/src/net/quic/chromium/quic_test_packet_maker.cc
index f5e2de1..9980a40 100644
--- a/src/net/quic/chromium/quic_test_packet_maker.cc
+++ b/src/net/quic/chromium/quic_test_packet_maker.cc
@@ -228,6 +228,18 @@
     QuicPacketNumber ack_least_unacked,
     QuicPacketNumber stop_least_unacked,
     bool send_feedback) {
+  return MakeAckPacket(packet_number, largest_received, ack_least_unacked,
+                       stop_least_unacked, send_feedback,
+                       QuicTime::Delta::Zero());
+}
+
+std::unique_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckPacket(
+    QuicPacketNumber packet_number,
+    QuicPacketNumber largest_received,
+    QuicPacketNumber ack_least_unacked,
+    QuicPacketNumber stop_least_unacked,
+    bool send_feedback,
+    QuicTime::Delta ack_delay_time) {
   QuicPacketHeader header;
   header.public_header.connection_id = connection_id_;
   header.public_header.reset_flag = false;
@@ -236,7 +248,7 @@
   header.packet_number = packet_number;
 
   QuicAckFrame ack(MakeAckFrame(largest_received));
-  ack.ack_delay_time = QuicTime::Delta::Zero();
+  ack.ack_delay_time = ack_delay_time;
   for (QuicPacketNumber i = ack_least_unacked; i <= largest_received; ++i) {
     ack.received_packet_times.push_back(std::make_pair(i, clock_->Now()));
   }
diff --git a/src/net/quic/chromium/quic_test_packet_maker.h b/src/net/quic/chromium/quic_test_packet_maker.h
index 093eb11..e23e725 100644
--- a/src/net/quic/chromium/quic_test_packet_maker.h
+++ b/src/net/quic/chromium/quic_test_packet_maker.h
@@ -84,6 +84,13 @@
       QuicPacketNumber ack_least_unacked,
       QuicPacketNumber stop_least_unacked,
       bool send_feedback);
+  std::unique_ptr<QuicReceivedPacket> MakeAckPacket(
+      QuicPacketNumber packet_number,
+      QuicPacketNumber largest_received,
+      QuicPacketNumber ack_least_unacked,
+      QuicPacketNumber stop_least_unacked,
+      bool send_feedback,
+      QuicTime::Delta ack_delay_time);
   std::unique_ptr<QuicReceivedPacket> MakeDataPacket(
       QuicPacketNumber packet_number,
       QuicStreamId stream_id,
diff --git a/src/net/quic/chromium/test_task_runner.cc b/src/net/quic/chromium/test_task_runner.cc
index eee1ad7..6907ac0 100644
--- a/src/net/quic/chromium/test_task_runner.cc
+++ b/src/net/quic/chromium/test_task_runner.cc
@@ -18,7 +18,7 @@
 TestTaskRunner::~TestTaskRunner() {}
 
 bool TestTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
-                                     base::Closure task,
+                                     base::OnceClosure task,
                                      base::TimeDelta delay) {
   EXPECT_GE(delay, base::TimeDelta());
   tasks_.push_back(PostedTask(from_here, std::move(task), clock_->NowInTicks(),
@@ -35,8 +35,6 @@
 }
 
 void TestTaskRunner::RunNextTask() {
-  // Find the next task to run, advance the time to the correct time
-  // and then run the task.
   std::vector<PostedTask>::iterator next = FindNextTask();
   DCHECK(next != tasks_.end());
   clock_->AdvanceTime(QuicTime::Delta::FromMicroseconds(
@@ -46,6 +44,10 @@
   std::move(task.task).Run();
 }
 
+void TestTaskRunner::RunUntilIdle() {
+  while (!tasks_.empty())
+    RunNextTask();
+}
 namespace {
 
 struct ShouldRunBeforeLessThan {
diff --git a/src/net/quic/chromium/test_task_runner.h b/src/net/quic/chromium/test_task_runner.h
index a7d72e2..aafec64 100644
--- a/src/net/quic/chromium/test_task_runner.h
+++ b/src/net/quic/chromium/test_task_runner.h
@@ -28,14 +28,20 @@
 
   // base::TaskRunner implementation.
   bool PostDelayedTask(const tracked_objects::Location& from_here,
-                       base::Closure task,
+                       base::OnceClosure task,
                        base::TimeDelta delay) override;
   bool RunsTasksOnCurrentThread() const override;
 
   const std::vector<PostedTask>& GetPostedTasks() const;
 
+  // Finds the next task to run, advances the time to the correct time
+  // and then runs the task.
   void RunNextTask();
 
+  // While there are posted tasks, finds the next task to run, advances the
+  // time to the correct time and then runs the task.
+  void RunUntilIdle();
+
  protected:
   ~TestTaskRunner() override;
 
diff --git a/src/net/quic/core/crypto/crypto_framer.cc b/src/net/quic/core/crypto/crypto_framer.cc
index 11d66ed..b978bf0 100644
--- a/src/net/quic/core/crypto/crypto_framer.cc
+++ b/src/net/quic/core/crypto/crypto_framer.cc
@@ -50,12 +50,13 @@
 
 // static
 std::unique_ptr<CryptoHandshakeMessage> CryptoFramer::ParseMessage(
-    QuicStringPiece in) {
+    QuicStringPiece in,
+    Perspective perspective) {
   OneShotVisitor visitor;
   CryptoFramer framer;
 
   framer.set_visitor(&visitor);
-  if (!framer.ProcessInput(in) || visitor.error() ||
+  if (!framer.ProcessInput(in, perspective) || visitor.error() ||
       framer.InputBytesRemaining()) {
     return nullptr;
   }
@@ -63,12 +64,13 @@
   return visitor.release();
 }
 
-bool CryptoFramer::ProcessInput(QuicStringPiece input) {
+bool CryptoFramer::ProcessInput(QuicStringPiece input,
+                                Perspective perspective) {
   DCHECK_EQ(QUIC_NO_ERROR, error_);
   if (error_ != QUIC_NO_ERROR) {
     return false;
   }
-  error_ = Process(input);
+  error_ = Process(input, perspective);
   if (error_ != QUIC_NO_ERROR) {
     DCHECK(!error_detail_.empty());
     visitor_->OnError(this);
@@ -80,7 +82,8 @@
 
 // static
 QuicData* CryptoFramer::ConstructHandshakeMessage(
-    const CryptoHandshakeMessage& message) {
+    const CryptoHandshakeMessage& message,
+    Perspective perspective) {
   size_t num_entries = message.tag_value_map().size();
   size_t pad_length = 0;
   bool need_pad_tag = false;
@@ -105,7 +108,7 @@
   }
 
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get());
+  QuicDataWriter writer(len, buffer.get(), perspective);
   if (!writer.WriteTag(message.tag())) {
     DCHECK(false) << "Failed to write message tag.";
     return nullptr;
@@ -190,10 +193,11 @@
   state_ = STATE_READING_TAG;
 }
 
-QuicErrorCode CryptoFramer::Process(QuicStringPiece input) {
+QuicErrorCode CryptoFramer::Process(QuicStringPiece input,
+                                    Perspective perspective) {
   // Add this data to the buffer.
   buffer_.append(input.data(), input.length());
-  QuicDataReader reader(buffer_.data(), buffer_.length());
+  QuicDataReader reader(buffer_.data(), buffer_.length(), perspective);
 
   switch (state_) {
     case STATE_READING_TAG:
diff --git a/src/net/quic/core/crypto/crypto_framer.h b/src/net/quic/core/crypto/crypto_framer.h
index b4465c1..0cf0d64 100644
--- a/src/net/quic/core/crypto/crypto_framer.h
+++ b/src/net/quic/core/crypto/crypto_framer.h
@@ -44,7 +44,8 @@
   // there is an error, the message is truncated, or the message has trailing
   // garbage then nullptr will be returned.
   static std::unique_ptr<CryptoHandshakeMessage> ParseMessage(
-      QuicStringPiece in);
+      QuicStringPiece in,
+      Perspective perspective);
 
   // Set callbacks to be called from the framer.  A visitor must be set, or
   // else the framer will crash.  It is acceptable for the visitor to do
@@ -59,7 +60,7 @@
 
   // Processes input data, which must be delivered in order. Returns
   // false if there was an error, and true otherwise.
-  bool ProcessInput(QuicStringPiece input);
+  bool ProcessInput(QuicStringPiece input, Perspective perspective);
 
   // Returns the number of bytes of buffered input data remaining to be
   // parsed.
@@ -68,7 +69,8 @@
   // Returns a new QuicData owned by the caller that contains a serialized
   // |message|, or nullptr if there was an error.
   static QuicData* ConstructHandshakeMessage(
-      const CryptoHandshakeMessage& message);
+      const CryptoHandshakeMessage& message,
+      Perspective perspective);
 
  private:
   // Clears per-message state.  Does not clear the visitor.
@@ -76,7 +78,7 @@
 
   // Process does does the work of |ProcessInput|, but returns an error code,
   // doesn't set error_ and doesn't call |visitor_->OnError()|.
-  QuicErrorCode Process(QuicStringPiece input);
+  QuicErrorCode Process(QuicStringPiece input, Perspective perspective);
 
   static bool WritePadTag(QuicDataWriter* writer,
                           size_t pad_length,
diff --git a/src/net/quic/core/crypto/crypto_framer_test.cc b/src/net/quic/core/crypto/crypto_framer_test.cc
index 79fef56..e8f37e9 100644
--- a/src/net/quic/core/crypto/crypto_framer_test.cc
+++ b/src/net/quic/core/crypto/crypto_framer_test.cc
@@ -18,16 +18,14 @@
 using std::string;
 
 namespace net {
-
+namespace test {
 namespace {
 
 char* AsChars(unsigned char* data) {
   return reinterpret_cast<char*>(data);
 }
 
-}  // namespace
-
-namespace test {
+class CryptoFramerTest : public ::testing::TestWithParam<Perspective> {};
 
 class TestCryptoVisitor : public CryptoFramerVisitorInterface {
  public:
@@ -48,7 +46,7 @@
   std::vector<CryptoHandshakeMessage> messages_;
 };
 
-TEST(CryptoFramerTest, ConstructHandshakeMessage) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessage) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   message.SetStringPiece(0x12345678, "abcdef");
@@ -83,14 +81,15 @@
   };
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   ASSERT_TRUE(data.get() != nullptr);
   test::CompareCharArraysWithHexError("constructed packet", data->data(),
                                       data->length(), AsChars(packet),
                                       arraysize(packet));
 }
 
-TEST(CryptoFramerTest, ConstructHandshakeMessageWithTwoKeys) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessageWithTwoKeys) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   message.SetStringPiece(0x12345678, "abcdef");
@@ -118,7 +117,8 @@
   };
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   ASSERT_TRUE(data.get() != nullptr);
 
   test::CompareCharArraysWithHexError("constructed packet", data->data(),
@@ -126,7 +126,7 @@
                                       arraysize(packet));
 }
 
-TEST(CryptoFramerTest, ConstructHandshakeMessageZeroLength) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessageZeroLength) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   message.SetStringPiece(0x12345678, "");
@@ -145,7 +145,8 @@
   };
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   ASSERT_TRUE(data.get() != nullptr);
 
   test::CompareCharArraysWithHexError("constructed packet", data->data(),
@@ -153,7 +154,7 @@
                                       arraysize(packet));
 }
 
-TEST(CryptoFramerTest, ConstructHandshakeMessageTooManyEntries) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessageTooManyEntries) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   for (uint32_t key = 1; key <= kMaxEntries + 1; ++key) {
@@ -161,11 +162,12 @@
   }
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   EXPECT_TRUE(data.get() == nullptr);
 }
 
-TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSize) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessageMinimumSize) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   message.SetStringPiece(0x01020304, "test");
@@ -195,7 +197,8 @@
   };
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   ASSERT_TRUE(data.get() != nullptr);
 
   test::CompareCharArraysWithHexError("constructed packet", data->data(),
@@ -203,7 +206,7 @@
                                       arraysize(packet));
 }
 
-TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSizePadLast) {
+TEST_P(CryptoFramerTest, ConstructHandshakeMessageMinimumSizePadLast) {
   CryptoHandshakeMessage message;
   message.set_tag(0xFFAA7733);
   message.SetStringPiece(1, "");
@@ -231,7 +234,8 @@
   };
 
   CryptoFramer framer;
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, GetParam()));
   ASSERT_TRUE(data.get() != nullptr);
 
   test::CompareCharArraysWithHexError("constructed packet", data->data(),
@@ -239,7 +243,7 @@
                                       arraysize(packet));
 }
 
-TEST(CryptoFramerTest, ProcessInput) {
+TEST_P(CryptoFramerTest, ProcessInput) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -265,8 +269,8 @@
       'g', 'h', 'i', 'j', 'k',
   };
 
-  EXPECT_TRUE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_TRUE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(0u, framer.InputBytesRemaining());
   EXPECT_EQ(0, visitor.error_count_);
   ASSERT_EQ(1u, visitor.messages_.size());
@@ -277,7 +281,7 @@
   EXPECT_EQ("ghijk", crypto_test_utils::GetValueForTag(message, 0x12345679));
 }
 
-TEST(CryptoFramerTest, ProcessInputWithThreeKeys) {
+TEST_P(CryptoFramerTest, ProcessInputWithThreeKeys) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -309,8 +313,8 @@
       'l', 'm', 'n', 'o', 'p', 'q', 'r',
   };
 
-  EXPECT_TRUE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_TRUE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(0u, framer.InputBytesRemaining());
   EXPECT_EQ(0, visitor.error_count_);
   ASSERT_EQ(1u, visitor.messages_.size());
@@ -322,7 +326,7 @@
   EXPECT_EQ("lmnopqr", crypto_test_utils::GetValueForTag(message, 0x1234567A));
 }
 
-TEST(CryptoFramerTest, ProcessInputIncrementally) {
+TEST_P(CryptoFramerTest, ProcessInputIncrementally) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -349,7 +353,8 @@
   };
 
   for (size_t i = 0; i < arraysize(input); i++) {
-    EXPECT_TRUE(framer.ProcessInput(QuicStringPiece(AsChars(input) + i, 1)));
+    EXPECT_TRUE(framer.ProcessInput(QuicStringPiece(AsChars(input) + i, 1),
+                                    GetParam()));
   }
   EXPECT_EQ(0u, framer.InputBytesRemaining());
   ASSERT_EQ(1u, visitor.messages_.size());
@@ -360,7 +365,7 @@
   EXPECT_EQ("ghijk", crypto_test_utils::GetValueForTag(message, 0x12345679));
 }
 
-TEST(CryptoFramerTest, ProcessInputTagsOutOfOrder) {
+TEST_P(CryptoFramerTest, ProcessInputTagsOutOfOrder) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -382,13 +387,13 @@
       0x02, 0x00, 0x00, 0x00,
   };
 
-  EXPECT_FALSE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_FALSE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error());
   EXPECT_EQ(1, visitor.error_count_);
 }
 
-TEST(CryptoFramerTest, ProcessEndOffsetsOutOfOrder) {
+TEST_P(CryptoFramerTest, ProcessEndOffsetsOutOfOrder) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -410,13 +415,13 @@
       0x00, 0x00, 0x00, 0x00,
   };
 
-  EXPECT_FALSE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_FALSE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error());
   EXPECT_EQ(1, visitor.error_count_);
 }
 
-TEST(CryptoFramerTest, ProcessInputTooManyEntries) {
+TEST_P(CryptoFramerTest, ProcessInputTooManyEntries) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -430,13 +435,13 @@
       0x00, 0x00,
   };
 
-  EXPECT_FALSE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_FALSE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(QUIC_CRYPTO_TOO_MANY_ENTRIES, framer.error());
   EXPECT_EQ(1, visitor.error_count_);
 }
 
-TEST(CryptoFramerTest, ProcessInputZeroLength) {
+TEST_P(CryptoFramerTest, ProcessInputZeroLength) {
   test::TestCryptoVisitor visitor;
   CryptoFramer framer;
   framer.set_visitor(&visitor);
@@ -458,11 +463,11 @@
       0x05, 0x00, 0x00, 0x00,
   };
 
-  EXPECT_TRUE(
-      framer.ProcessInput(QuicStringPiece(AsChars(input), arraysize(input))));
+  EXPECT_TRUE(framer.ProcessInput(
+      QuicStringPiece(AsChars(input), arraysize(input)), GetParam()));
   EXPECT_EQ(0, visitor.error_count_);
 }
 
+}  // namespace
 }  // namespace test
-
 }  // namespace net
diff --git a/src/net/quic/core/crypto/crypto_handshake_message.cc b/src/net/quic/core/crypto/crypto_handshake_message.cc
index bf978de..4e03d4e 100644
--- a/src/net/quic/core/crypto/crypto_handshake_message.cc
+++ b/src/net/quic/core/crypto/crypto_handshake_message.cc
@@ -56,9 +56,11 @@
   serialized_.reset();
 }
 
-const QuicData& CryptoHandshakeMessage::GetSerialized() const {
+const QuicData& CryptoHandshakeMessage::GetSerialized(
+    Perspective perspective) const {
   if (!serialized_.get()) {
-    serialized_.reset(CryptoFramer::ConstructHandshakeMessage(*this));
+    serialized_.reset(
+        CryptoFramer::ConstructHandshakeMessage(*this, perspective));
   }
   return *serialized_;
 }
@@ -185,8 +187,8 @@
   return minimum_size_;
 }
 
-string CryptoHandshakeMessage::DebugString() const {
-  return DebugStringInternal(0);
+string CryptoHandshakeMessage::DebugString(Perspective perspective) const {
+  return DebugStringInternal(0, perspective);
 }
 
 QuicErrorCode CryptoHandshakeMessage::GetPOD(QuicTag tag,
@@ -210,7 +212,9 @@
   return ret;
 }
 
-string CryptoHandshakeMessage::DebugStringInternal(size_t indent) const {
+string CryptoHandshakeMessage::DebugStringInternal(
+    size_t indent,
+    Perspective perspective) const {
   string ret = string(2 * indent, ' ') + QuicTagToString(tag_) + "<\n";
   ++indent;
   for (QuicTagValueMap::const_iterator it = tag_value_map_.begin();
@@ -294,10 +298,10 @@
         // nested messages.
         if (!it->second.empty()) {
           std::unique_ptr<CryptoHandshakeMessage> msg(
-              CryptoFramer::ParseMessage(it->second));
+              CryptoFramer::ParseMessage(it->second, perspective));
           if (msg.get()) {
             ret += "\n";
-            ret += msg->DebugStringInternal(indent + 1);
+            ret += msg->DebugStringInternal(indent + 1, perspective);
 
             done = true;
           }
diff --git a/src/net/quic/core/crypto/crypto_handshake_message.h b/src/net/quic/core/crypto/crypto_handshake_message.h
index 57b8f54..6275faa 100644
--- a/src/net/quic/core/crypto/crypto_handshake_message.h
+++ b/src/net/quic/core/crypto/crypto_handshake_message.h
@@ -34,7 +34,7 @@
 
   // GetSerialized returns the serialized form of this message and caches the
   // result. Subsequently altering the message does not invalidate the cache.
-  const QuicData& GetSerialized() const;
+  const QuicData& GetSerialized(Perspective perspective) const;
 
   // MarkDirty invalidates the cache created by |GetSerialized|.
   void MarkDirty();
@@ -110,7 +110,7 @@
 
   // DebugString returns a multi-line, string representation of the message
   // suitable for including in debug output.
-  std::string DebugString() const;
+  std::string DebugString(Perspective perspective) const;
 
  private:
   // GetPOD is a utility function for extracting a plain-old-data value. If
@@ -122,7 +122,7 @@
   // little-endian.
   QuicErrorCode GetPOD(QuicTag tag, void* out, size_t len) const;
 
-  std::string DebugStringInternal(size_t indent) const;
+  std::string DebugStringInternal(size_t indent, Perspective perspective) const;
 
   QuicTag tag_;
   QuicTagValueMap tag_value_map_;
diff --git a/src/net/quic/core/crypto/crypto_handshake_message_test.cc b/src/net/quic/core/crypto/crypto_handshake_message_test.cc
index 088cd37..c12f4cd 100644
--- a/src/net/quic/core/crypto/crypto_handshake_message_test.cc
+++ b/src/net/quic/core/crypto/crypto_handshake_message_test.cc
@@ -12,31 +12,34 @@
 namespace test {
 namespace {
 
-TEST(CryptoHandshakeMessageTest, DebugString) {
+class CryptoHandshakeMessageTest
+    : public ::testing::TestWithParam<Perspective> {};
+
+TEST_P(CryptoHandshakeMessageTest, DebugString) {
   const char* str = "SHLO<\n>";
 
   CryptoHandshakeMessage message;
   message.set_tag(kSHLO);
-  EXPECT_EQ(str, message.DebugString());
+  EXPECT_EQ(str, message.DebugString(GetParam()));
 
   // Test copy
   CryptoHandshakeMessage message2(message);
-  EXPECT_EQ(str, message2.DebugString());
+  EXPECT_EQ(str, message2.DebugString(GetParam()));
 
   // Test move
   CryptoHandshakeMessage message3(std::move(message));
-  EXPECT_EQ(str, message3.DebugString());
+  EXPECT_EQ(str, message3.DebugString(GetParam()));
 
   // Test assign
   CryptoHandshakeMessage message4 = message3;
-  EXPECT_EQ(str, message4.DebugString());
+  EXPECT_EQ(str, message4.DebugString(GetParam()));
 
   // Test move-assign
   CryptoHandshakeMessage message5 = std::move(message3);
-  EXPECT_EQ(str, message5.DebugString());
+  EXPECT_EQ(str, message5.DebugString(GetParam()));
 }
 
-TEST(CryptoHandshakeMessageTest, DebugStringWithUintVector) {
+TEST_P(CryptoHandshakeMessageTest, DebugStringWithUintVector) {
   const char* str =
       "REJ <\n  RREJ: "
       "SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,"
@@ -48,76 +51,76 @@
       SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
       CLIENT_NONCE_NOT_UNIQUE_FAILURE};
   message.SetVector(kRREJ, reasons);
-  EXPECT_EQ(str, message.DebugString());
+  EXPECT_EQ(str, message.DebugString(GetParam()));
 
   // Test copy
   CryptoHandshakeMessage message2(message);
-  EXPECT_EQ(str, message2.DebugString());
+  EXPECT_EQ(str, message2.DebugString(GetParam()));
 
   // Test move
   CryptoHandshakeMessage message3(std::move(message));
-  EXPECT_EQ(str, message3.DebugString());
+  EXPECT_EQ(str, message3.DebugString(GetParam()));
 
   // Test assign
   CryptoHandshakeMessage message4 = message3;
-  EXPECT_EQ(str, message4.DebugString());
+  EXPECT_EQ(str, message4.DebugString(GetParam()));
 
   // Test move-assign
   CryptoHandshakeMessage message5 = std::move(message3);
-  EXPECT_EQ(str, message5.DebugString());
+  EXPECT_EQ(str, message5.DebugString(GetParam()));
 }
 
-TEST(CryptoHandshakeMessageTest, DebugStringWithTagVector) {
+TEST_P(CryptoHandshakeMessageTest, DebugStringWithTagVector) {
   const char* str = "CHLO<\n  COPT: 'TBBR','PAD ','BYTE'\n>";
 
   CryptoHandshakeMessage message;
   message.set_tag(kCHLO);
   message.SetVector(kCOPT, QuicTagVector{kTBBR, kPAD, kBYTE});
-  EXPECT_EQ(str, message.DebugString());
+  EXPECT_EQ(str, message.DebugString(GetParam()));
 
   // Test copy
   CryptoHandshakeMessage message2(message);
-  EXPECT_EQ(str, message2.DebugString());
+  EXPECT_EQ(str, message2.DebugString(GetParam()));
 
   // Test move
   CryptoHandshakeMessage message3(std::move(message));
-  EXPECT_EQ(str, message3.DebugString());
+  EXPECT_EQ(str, message3.DebugString(GetParam()));
 
   // Test assign
   CryptoHandshakeMessage message4 = message3;
-  EXPECT_EQ(str, message4.DebugString());
+  EXPECT_EQ(str, message4.DebugString(GetParam()));
 
   // Test move-assign
   CryptoHandshakeMessage message5 = std::move(message3);
-  EXPECT_EQ(str, message5.DebugString());
+  EXPECT_EQ(str, message5.DebugString(GetParam()));
 }
 
-TEST(CryptoHandshakeMessageTest, ServerDesignatedConnectionId) {
+TEST_P(CryptoHandshakeMessageTest, ServerDesignatedConnectionId) {
   const char* str = "SREJ<\n  RCID: 18364758544493064720\n>";
 
   CryptoHandshakeMessage message;
   message.set_tag(kSREJ);
   message.SetValue(kRCID, UINT64_C(18364758544493064720));
-  EXPECT_EQ(str, message.DebugString());
+  EXPECT_EQ(str, message.DebugString(GetParam()));
 
   // Test copy
   CryptoHandshakeMessage message2(message);
-  EXPECT_EQ(str, message2.DebugString());
+  EXPECT_EQ(str, message2.DebugString(GetParam()));
 
   // Test move
   CryptoHandshakeMessage message3(std::move(message));
-  EXPECT_EQ(str, message3.DebugString());
+  EXPECT_EQ(str, message3.DebugString(GetParam()));
 
   // Test assign
   CryptoHandshakeMessage message4 = message3;
-  EXPECT_EQ(str, message4.DebugString());
+  EXPECT_EQ(str, message4.DebugString(GetParam()));
 
   // Test move-assign
   CryptoHandshakeMessage message5 = std::move(message3);
-  EXPECT_EQ(str, message5.DebugString());
+  EXPECT_EQ(str, message5.DebugString(GetParam()));
 }
 
-TEST(CryptoHandshakeMessageTest, HasStringPiece) {
+TEST_P(CryptoHandshakeMessageTest, HasStringPiece) {
   CryptoHandshakeMessage message;
   EXPECT_FALSE(message.HasStringPiece(kRCID));
   message.SetStringPiece(kRCID, "foo");
diff --git a/src/net/quic/core/crypto/crypto_server_test.cc b/src/net/quic/core/crypto/crypto_server_test.cc
index fcb42577..85f0752 100644
--- a/src/net/quic/core/crypto/crypto_server_test.cc
+++ b/src/net/quic/core/crypto/crypto_server_test.cc
@@ -173,7 +173,7 @@
 
     QuicStringPiece scfg;
     ASSERT_TRUE(out_.GetStringPiece(kSCFG, &scfg));
-    server_config_ = CryptoFramer::ParseMessage(scfg);
+    server_config_ = CryptoFramer::ParseMessage(scfg, Perspective::IS_CLIENT);
 
     QuicStringPiece scid;
     ASSERT_TRUE(server_config_->GetStringPiece(kSCID, &scid));
@@ -285,10 +285,11 @@
       if (should_succeed_) {
         ASSERT_EQ(error, QUIC_NO_ERROR)
             << "Message failed with error " << error_details << ": "
-            << result_->client_hello.DebugString();
+            << result_->client_hello.DebugString(Perspective::IS_SERVER);
       } else {
         ASSERT_NE(error, QUIC_NO_ERROR)
-            << "Message didn't fail: " << result_->client_hello.DebugString();
+            << "Message didn't fail: "
+            << result_->client_hello.DebugString(Perspective::IS_SERVER);
 
         EXPECT_TRUE(error_details.find(error_substr_) != string::npos)
             << error_substr_ << " not in " << error_details;
@@ -819,7 +820,7 @@
   EXPECT_TRUE(out_.GetStringPiece(kPROF, &proof));
   EXPECT_TRUE(out_.GetStringPiece(kSCFG, &scfg_str));
   std::unique_ptr<CryptoHandshakeMessage> scfg(
-      CryptoFramer::ParseMessage(scfg_str));
+      CryptoFramer::ParseMessage(scfg_str, Perspective::IS_CLIENT));
   QuicStringPiece scid;
   EXPECT_TRUE(scfg->GetStringPiece(kSCID, &scid));
   EXPECT_NE(scid, kOldConfigId);
@@ -842,7 +843,7 @@
   std::unique_ptr<ProofVerifierCallback> callback(
       new DummyProofVerifierCallback());
   string chlo_hash;
-  CryptoUtils::HashHandshakeMessage(msg, &chlo_hash);
+  CryptoUtils::HashHandshakeMessage(msg, &chlo_hash, Perspective::IS_SERVER);
   EXPECT_EQ(QUIC_SUCCESS,
             proof_verifier->VerifyProof(
                 "test.example.com", 443, scfg_str.as_string(), client_version_,
@@ -958,7 +959,8 @@
   std::unique_ptr<CryptoHandshakeMessage> scfg_b(
       b.AddDefaultConfig(&rand_b, &clock, options));
 
-  ASSERT_EQ(scfg_a->DebugString(), scfg_b->DebugString());
+  ASSERT_EQ(scfg_a->DebugString(Perspective::IS_SERVER),
+            scfg_b->DebugString(Perspective::IS_SERVER));
 }
 
 TEST(CryptoServerConfigGenerationTest, SCIDVaries) {
@@ -1003,7 +1005,7 @@
 
   scfg->Erase(kSCID);
   scfg->MarkDirty();
-  const QuicData& serialized(scfg->GetSerialized());
+  const QuicData& serialized(scfg->GetSerialized(Perspective::IS_SERVER));
 
   uint8_t digest[SHA256_DIGEST_LENGTH];
   SHA256(reinterpret_cast<const uint8_t*>(serialized.data()),
diff --git a/src/net/quic/core/crypto/crypto_utils.cc b/src/net/quic/core/crypto/crypto_utils.cc
index dfc2ba2..b8a6120 100644
--- a/src/net/quic/core/crypto/crypto_utils.cc
+++ b/src/net/quic/core/crypto/crypto_utils.cc
@@ -292,8 +292,9 @@
 
 // static
 void CryptoUtils::HashHandshakeMessage(const CryptoHandshakeMessage& message,
-                                       string* output) {
-  const QuicData& serialized = message.GetSerialized();
+                                       string* output,
+                                       Perspective perspective) {
+  const QuicData& serialized = message.GetSerialized(perspective);
   uint8_t digest[SHA256_DIGEST_LENGTH];
   SHA256(reinterpret_cast<const uint8_t*>(serialized.data()),
          serialized.length(), digest);
diff --git a/src/net/quic/core/crypto/crypto_utils.h b/src/net/quic/core/crypto/crypto_utils.h
index c95e7c2..54f2c73 100644
--- a/src/net/quic/core/crypto/crypto_utils.h
+++ b/src/net/quic/core/crypto/crypto_utils.h
@@ -145,7 +145,8 @@
 
   // Writes a hash of the serialized |message| into |output|.
   static void HashHandshakeMessage(const CryptoHandshakeMessage& message,
-                                   std::string* output);
+                                   std::string* output,
+                                   Perspective perspective);
 
  private:
   DISALLOW_COPY_AND_ASSIGN(CryptoUtils);
diff --git a/src/net/quic/core/crypto/null_decrypter.cc b/src/net/quic/core/crypto/null_decrypter.cc
index 7bb5839..5e0ea06 100644
--- a/src/net/quic/core/crypto/null_decrypter.cc
+++ b/src/net/quic/core/crypto/null_decrypter.cc
@@ -43,7 +43,7 @@
                                   char* output,
                                   size_t* output_length,
                                   size_t max_output_length) {
-  QuicDataReader reader(ciphertext.data(), ciphertext.length());
+  QuicDataReader reader(ciphertext.data(), ciphertext.length(), perspective_);
   uint128 hash;
 
   if (!ReadHash(&reader, &hash)) {
diff --git a/src/net/quic/core/crypto/quic_crypto_client_config.cc b/src/net/quic/core/crypto/quic_crypto_client_config.cc
index 291e33c..35b44e9 100644
--- a/src/net/quic/core/crypto/quic_crypto_client_config.cc
+++ b/src/net/quic/core/crypto/quic_crypto_client_config.cc
@@ -112,7 +112,7 @@
   }
 
   if (!scfg_.get()) {
-    scfg_ = CryptoFramer::ParseMessage(server_config_);
+    scfg_ = CryptoFramer::ParseMessage(server_config_, Perspective::IS_CLIENT);
     DCHECK(scfg_.get());
   }
   return scfg_.get();
@@ -151,7 +151,8 @@
   const CryptoHandshakeMessage* new_scfg;
 
   if (!matches_existing) {
-    new_scfg_storage = CryptoFramer::ParseMessage(server_config);
+    new_scfg_storage =
+        CryptoFramer::ParseMessage(server_config, Perspective::IS_CLIENT);
     new_scfg = new_scfg_storage.get();
   } else {
     new_scfg = GetServerConfig();
@@ -625,7 +626,8 @@
     cetv.set_tag(kCETV);
 
     string hkdf_input;
-    const QuicData& client_hello_serialized = out->GetSerialized();
+    const QuicData& client_hello_serialized =
+        out->GetSerialized(Perspective::IS_CLIENT);
     hkdf_input.append(QuicCryptoConfig::kCETVLabel,
                       strlen(QuicCryptoConfig::kCETVLabel) + 1);
     hkdf_input.append(reinterpret_cast<char*>(&connection_id),
@@ -654,7 +656,7 @@
       return QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED;
     }
 
-    const QuicData& cetv_plaintext = cetv.GetSerialized();
+    const QuicData& cetv_plaintext = cetv.GetSerialized(Perspective::IS_CLIENT);
     const size_t encrypted_len =
         crypters.encrypter->GetCiphertextSize(cetv_plaintext.length());
     std::unique_ptr<char[]> output(new char[encrypted_len]);
@@ -681,7 +683,8 @@
   out_params->hkdf_input_suffix.clear();
   out_params->hkdf_input_suffix.append(reinterpret_cast<char*>(&connection_id),
                                        sizeof(connection_id));
-  const QuicData& client_hello_serialized = out->GetSerialized();
+  const QuicData& client_hello_serialized =
+      out->GetSerialized(Perspective::IS_CLIENT);
   out_params->hkdf_input_suffix.append(client_hello_serialized.data(),
                                        client_hello_serialized.length());
   out_params->hkdf_input_suffix.append(cached->server_config());
diff --git a/src/net/quic/core/crypto/quic_crypto_client_config_test.cc b/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
index b22878c..694767f 100644
--- a/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
+++ b/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
@@ -221,8 +221,9 @@
   string details;
   QuicWallTime now = QuicWallTime::FromUNIXSeconds(1);
   QuicWallTime expiry = QuicWallTime::FromUNIXSeconds(2);
-  state.SetServerConfig(scfg.GetSerialized().AsStringPiece(), now, expiry,
-                        &details);
+  state.SetServerConfig(
+      scfg.GetSerialized(Perspective::IS_CLIENT).AsStringPiece(), now, expiry,
+      &details);
 
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params(
@@ -246,9 +247,10 @@
   scfg.SetValue(kEXPY, future);
   scfg.SetStringPiece(kSCID, "12345678");
   string details;
-  state.SetServerConfig(scfg.GetSerialized().AsStringPiece(),
-                        QuicWallTime::FromUNIXSeconds(1),
-                        QuicWallTime::FromUNIXSeconds(0), &details);
+  state.SetServerConfig(
+      scfg.GetSerialized(Perspective::IS_CLIENT).AsStringPiece(),
+      QuicWallTime::FromUNIXSeconds(1), QuicWallTime::FromUNIXSeconds(0),
+      &details);
 
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params(
@@ -387,9 +389,10 @@
       scfg.SetValue(kEXPY, future);
       scfg.SetStringPiece(kSCID, "12345678");
       string details;
-      state->SetServerConfig(scfg.GetSerialized().AsStringPiece(),
-                             QuicWallTime::FromUNIXSeconds(0),
-                             QuicWallTime::FromUNIXSeconds(future), &details);
+      state->SetServerConfig(
+          scfg.GetSerialized(Perspective::IS_CLIENT).AsStringPiece(),
+          QuicWallTime::FromUNIXSeconds(0),
+          QuicWallTime::FromUNIXSeconds(future), &details);
 
       std::vector<string> certs(1);
       certs[0] = "Hello Cert for " + host;
diff --git a/src/net/quic/core/crypto/quic_crypto_server_config.cc b/src/net/quic/core/crypto/quic_crypto_server_config.cc
index fe7343d..b7a44bd 100644
--- a/src/net/quic/core/crypto/quic_crypto_server_config.cc
+++ b/src/net/quic/core/crypto/quic_crypto_server_config.cc
@@ -261,7 +261,7 @@
     // We need to ensure that the SCID changes whenever the server config does
     // thus we make it a hash of the rest of the server config.
     std::unique_ptr<QuicData> serialized(
-        CryptoFramer::ConstructHandshakeMessage(msg));
+        CryptoFramer::ConstructHandshakeMessage(msg, Perspective::IS_SERVER));
 
     uint8_t scid_bytes[SHA256_DIGEST_LENGTH];
     SHA256(reinterpret_cast<const uint8_t*>(serialized->data()),
@@ -278,7 +278,7 @@
   // preceding if block.
 
   std::unique_ptr<QuicData> serialized(
-      CryptoFramer::ConstructHandshakeMessage(msg));
+      CryptoFramer::ConstructHandshakeMessage(msg, Perspective::IS_SERVER));
 
   std::unique_ptr<QuicServerConfigProtobuf> config(
       new QuicServerConfigProtobuf);
@@ -300,7 +300,7 @@
     std::unique_ptr<QuicServerConfigProtobuf> protobuf,
     const QuicWallTime now) {
   std::unique_ptr<CryptoHandshakeMessage> msg(
-      CryptoFramer::ParseMessage(protobuf->config()));
+      CryptoFramer::ParseMessage(protobuf->config(), Perspective::IS_SERVER));
 
   if (!msg.get()) {
     QUIC_LOG(WARNING) << "Failed to parse server config message";
@@ -688,7 +688,8 @@
   }
   DCHECK(proof_source_.get());
   string chlo_hash;
-  CryptoUtils::HashHandshakeMessage(client_hello, &chlo_hash);
+  CryptoUtils::HashHandshakeMessage(client_hello, &chlo_hash,
+                                    Perspective::IS_SERVER);
 
   // No need to get a new proof if one was already generated.
   if (!signed_config->chain) {
@@ -848,7 +849,8 @@
   }
 
   string hkdf_suffix;
-  const QuicData& client_hello_serialized = client_hello.GetSerialized();
+  const QuicData& client_hello_serialized =
+      client_hello.GetSerialized(Perspective::IS_SERVER);
   hkdf_suffix.reserve(sizeof(connection_id) + client_hello_serialized.length() +
                       requested_config->serialized.size());
   hkdf_suffix.append(reinterpret_cast<char*>(&connection_id),
@@ -871,7 +873,7 @@
     client_hello_copy.Erase(kPAD);
 
     const QuicData& client_hello_copy_serialized =
-        client_hello_copy.GetSerialized();
+        client_hello_copy.GetSerialized(Perspective::IS_SERVER);
     string hkdf_input;
     hkdf_input.append(QuicCryptoConfig::kCETVLabel,
                       strlen(QuicCryptoConfig::kCETVLabel) + 1);
@@ -904,7 +906,7 @@
       return;
     }
     std::unique_ptr<CryptoHandshakeMessage> cetv(CryptoFramer::ParseMessage(
-        QuicStringPiece(plaintext, plaintext_length)));
+        QuicStringPiece(plaintext, plaintext_length), Perspective::IS_SERVER));
     if (!cetv.get()) {
       helper.Fail(QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER, "CETV parse error");
       return;
@@ -1255,7 +1257,8 @@
   bool get_proof_failed = false;
   string serialized_config = primary_config->serialized;
   string chlo_hash;
-  CryptoUtils::HashHandshakeMessage(client_hello, &chlo_hash);
+  CryptoUtils::HashHandshakeMessage(client_hello, &chlo_hash,
+                                    Perspective::IS_SERVER);
   bool need_proof = true;
   need_proof = !signed_config->chain;
   const QuicTag* tag_ptr;
@@ -1318,8 +1321,9 @@
   if (info->client_nonce.size() != kNonceSize) {
     info->reject_reasons.push_back(CLIENT_NONCE_INVALID_FAILURE);
     // Invalid client nonce.
-    QUIC_LOG_FIRST_N(ERROR, 2) << "Invalid client nonce: "
-                               << client_hello.DebugString();
+    QUIC_LOG_FIRST_N(ERROR, 2)
+        << "Invalid client nonce: "
+        << client_hello.DebugString(Perspective::IS_SERVER);
     QUIC_DLOG(INFO) << "Invalid client nonce.";
   }
 
@@ -1584,7 +1588,7 @@
 QuicCryptoServerConfig::ParseConfigProtobuf(
     const std::unique_ptr<QuicServerConfigProtobuf>& protobuf) {
   std::unique_ptr<CryptoHandshakeMessage> msg(
-      CryptoFramer::ParseMessage(protobuf->config()));
+      CryptoFramer::ParseMessage(protobuf->config(), Perspective::IS_SERVER));
 
   if (msg->tag() != kSCFG) {
     QUIC_LOG(WARNING) << "Server config message has tag " << msg->tag()
diff --git a/src/net/quic/core/quic_connection_test.cc b/src/net/quic/core/quic_connection_test.cc
index 51e9f28..92b57be 100644
--- a/src/net/quic/core/quic_connection_test.cc
+++ b/src/net/quic/core/quic_connection_test.cc
@@ -5021,7 +5021,8 @@
   CryptoHandshakeMessage message;
   CryptoFramer framer;
   message.set_tag(kCHLO);
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, Perspective::IS_CLIENT));
   frame1_.stream_id = 10;
   frame1_.data_buffer = data->data();
   frame1_.data_length = data->length();
@@ -5037,7 +5038,8 @@
   CryptoHandshakeMessage message;
   CryptoFramer framer;
   message.set_tag(kREJ);
-  std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
+  std::unique_ptr<QuicData> data(
+      framer.ConstructHandshakeMessage(message, Perspective::IS_SERVER));
   frame1_.stream_id = 10;
   frame1_.data_buffer = data->data();
   frame1_.data_length = data->length();
diff --git a/src/net/quic/core/quic_crypto_client_stream.cc b/src/net/quic/core/quic_crypto_client_stream.cc
index f7fba76..ee8d643 100644
--- a/src/net/quic/core/quic_crypto_client_stream.cc
+++ b/src/net/quic/core/quic_crypto_client_stream.cc
@@ -143,9 +143,10 @@
   DoHandshakeLoop(&message);
 }
 
-void QuicCryptoClientStream::CryptoConnect() {
+bool QuicCryptoClientStream::CryptoConnect() {
   next_state_ = STATE_INITIALIZE;
   DoHandshakeLoop(nullptr);
+  return session()->connection()->connected();
 }
 
 int QuicCryptoClientStream::num_sent_client_hellos() const {
@@ -322,7 +323,7 @@
     out.set_minimum_size(
         static_cast<size_t>(max_packet_size - kFramingOverhead));
     next_state_ = STATE_RECV_REJ;
-    CryptoUtils::HashHandshakeMessage(out, &chlo_hash_);
+    CryptoUtils::HashHandshakeMessage(out, &chlo_hash_, Perspective::IS_CLIENT);
     SendHandshakeMessage(out);
     return;
   }
@@ -350,7 +351,7 @@
     CloseConnectionWithDetails(error, error_details);
     return;
   }
-  CryptoUtils::HashHandshakeMessage(out, &chlo_hash_);
+  CryptoUtils::HashHandshakeMessage(out, &chlo_hash_, Perspective::IS_CLIENT);
   channel_id_sent_ = (channel_id_key_.get() != nullptr);
   if (cached->proof_verify_details()) {
     proof_handler_->OnProofVerifyDetailsAvailable(
diff --git a/src/net/quic/core/quic_crypto_client_stream.h b/src/net/quic/core/quic_crypto_client_stream.h
index 7327f31..2b7bd4a 100644
--- a/src/net/quic/core/quic_crypto_client_stream.h
+++ b/src/net/quic/core/quic_crypto_client_stream.h
@@ -30,8 +30,9 @@
 
   ~QuicCryptoClientStreamBase() override{};
 
-  // Performs a crypto handshake with the server.
-  virtual void CryptoConnect() = 0;
+  // Performs a crypto handshake with the server. Returns true if the connection
+  // is still connected.
+  virtual bool CryptoConnect() = 0;
 
   // num_sent_client_hellos returns the number of client hello messages that
   // have been sent. If the handshake has completed then this is one greater
@@ -83,7 +84,7 @@
   ~QuicCryptoClientStream() override;
 
   // From QuicCryptoClientStreamBase
-  void CryptoConnect() override;
+  bool CryptoConnect() override;
   int num_sent_client_hellos() const override;
 
   int num_scup_messages_received() const override;
diff --git a/src/net/quic/core/quic_crypto_client_stream_test.cc b/src/net/quic/core/quic_crypto_client_stream_test.cc
index 497e82a..e0b9983 100644
--- a/src/net/quic/core/quic_crypto_client_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_client_stream_test.cc
@@ -58,9 +58,10 @@
                                                stream(), server_options_);
   }
 
-  void ConstructHandshakeMessage() {
+  void ConstructHandshakeMessage(Perspective perspective) {
     CryptoFramer framer;
-    message_data_.reset(framer.ConstructHandshakeMessage(message_));
+    message_data_.reset(
+        framer.ConstructHandshakeMessage(message_, perspective));
   }
 
   QuicCryptoClientStream* stream() { return session_->GetCryptoStream(); }
@@ -95,7 +96,7 @@
       *connection_,
       CloseConnection(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE, _, _));
   message_.set_tag(kCHLO);
-  ConstructHandshakeMessage();
+  ConstructHandshakeMessage(Perspective::IS_CLIENT);
   stream()->OnStreamFrame(QuicStreamFrame(kCryptoStreamId, /*fin=*/false,
                                           /*offset=*/0,
                                           message_data_->AsStringPiece()));
@@ -105,7 +106,7 @@
   stream()->CryptoConnect();
 
   message_.set_tag(kCHLO);
-  ConstructHandshakeMessage();
+  ConstructHandshakeMessage(Perspective::IS_CLIENT);
 
   EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_CRYPTO_MESSAGE_TYPE,
                                             "Expected REJ", _));
@@ -216,8 +217,8 @@
   const uint64_t expiry_seconds = 60 * 60 * 24 * 2;
   server_config_update.SetValue(kSTTL, expiry_seconds);
 
-  std::unique_ptr<QuicData> data(
-      CryptoFramer::ConstructHandshakeMessage(server_config_update));
+  std::unique_ptr<QuicData> data(CryptoFramer::ConstructHandshakeMessage(
+      server_config_update, Perspective::IS_SERVER));
   stream()->OnStreamFrame(QuicStreamFrame(kCryptoStreamId, /*fin=*/false,
                                           /*offset=*/0, data->AsStringPiece()));
 
@@ -277,8 +278,8 @@
           new Callback(&ok, &server_config_update)));
   EXPECT_TRUE(ok);
 
-  std::unique_ptr<QuicData> data(
-      CryptoFramer::ConstructHandshakeMessage(server_config_update));
+  std::unique_ptr<QuicData> data(CryptoFramer::ConstructHandshakeMessage(
+      server_config_update, Perspective::IS_SERVER));
   stream()->OnStreamFrame(QuicStreamFrame(kCryptoStreamId, /*fin=*/false,
                                           /*offset=*/0, data->AsStringPiece()));
 
@@ -295,8 +296,8 @@
       CloseConnection(QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE, _, _));
   CryptoHandshakeMessage server_config_update;
   server_config_update.set_tag(kSCUP);
-  std::unique_ptr<QuicData> data(
-      CryptoFramer::ConstructHandshakeMessage(server_config_update));
+  std::unique_ptr<QuicData> data(CryptoFramer::ConstructHandshakeMessage(
+      server_config_update, Perspective::IS_SERVER));
   stream()->OnStreamFrame(QuicStreamFrame(kCryptoStreamId, /*fin=*/false,
                                           /*offset=*/0, data->AsStringPiece()));
 }
diff --git a/src/net/quic/core/quic_crypto_framer_parse_message_fuzzer.cc b/src/net/quic/core/quic_crypto_framer_parse_message_fuzzer.cc
index ca9d8d2..3c435f4 100644
--- a/src/net/quic/core/quic_crypto_framer_parse_message_fuzzer.cc
+++ b/src/net/quic/core/quic_crypto_framer_parse_message_fuzzer.cc
@@ -12,7 +12,8 @@
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   net::QuicStringPiece crypto_input(reinterpret_cast<const char*>(data), size);
   std::unique_ptr<net::CryptoHandshakeMessage> handshake_message(
-      net::CryptoFramer::ParseMessage(crypto_input));
+      net::CryptoFramer::ParseMessage(crypto_input,
+                                      net::Perspective::IS_CLIENT));
 
   return 0;
 }
diff --git a/src/net/quic/core/quic_crypto_server_stream.cc b/src/net/quic/core/quic_crypto_server_stream.cc
index 900bd68..49594d6 100644
--- a/src/net/quic/core/quic_crypto_server_stream.cc
+++ b/src/net/quic/core/quic_crypto_server_stream.cc
@@ -43,13 +43,6 @@
       return;
     }
 
-    // Note: set the parent's callback to nullptr here because
-    // FinishProcessingHandshakeMessageAfterProcessClientHello can be invoked
-    // from either synchronous or asynchronous codepaths.  When the synchronous
-    // codepaths are removed, this assignment should move to
-    // FinishProcessingHandshakeMessageAfterProcessClientHello.
-    stream_->process_client_hello_cb_ = nullptr;
-
     stream_->FinishProcessingHandshakeMessageAfterProcessClientHello(
         *result_, error, error_details, std::move(message),
         std::move(diversification_nonce), std::move(proof_source_details));
@@ -96,7 +89,6 @@
       crypto_config_(crypto_config),
       compressed_certs_cache_(compressed_certs_cache),
       signed_config_(new QuicSignedServerConfig),
-      validate_client_hello_cb_(nullptr),
       helper_(helper),
       num_handshake_messages_(0),
       num_handshake_messages_with_server_nonces_(0),
@@ -106,6 +98,7 @@
           use_stateless_rejects_if_peer_supported),
       peer_supports_stateless_rejects_(false),
       chlo_packet_size_(0),
+      validate_client_hello_cb_(nullptr),
       process_client_hello_cb_(nullptr) {
   DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective());
 }
@@ -149,7 +142,9 @@
     return;
   }
 
-  if (validate_client_hello_cb_ != nullptr) {
+  if (validate_client_hello_cb_ != nullptr ||
+      (base::GetFlag(FLAGS_quic_reloadable_flag_fix_quic_callback_crash) &&
+       process_client_hello_cb_ != nullptr)) {
     // Already processing some other handshake message.  The protocol
     // does not allow for clients to send multiple handshake messages
     // before the server has a chance to respond.
@@ -159,9 +154,12 @@
     return;
   }
 
-  CryptoUtils::HashHandshakeMessage(message, &chlo_hash_);
+  CryptoUtils::HashHandshakeMessage(message, &chlo_hash_,
+                                    Perspective::IS_SERVER);
 
   std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this));
+  DCHECK(validate_client_hello_cb_ == nullptr);
+  DCHECK(process_client_hello_cb_ == nullptr);
   validate_client_hello_cb_ = cb.get();
   crypto_config_->ValidateClientHello(
       message, session()->connection()->peer_address().host(),
@@ -177,6 +175,7 @@
 
   // Clear the callback that got us here.
   DCHECK(validate_client_hello_cb_ != nullptr);
+  DCHECK(process_client_hello_cb_ == nullptr);
   validate_client_hello_cb_ = nullptr;
 
   if (use_stateless_rejects_if_peer_supported_) {
@@ -197,6 +196,11 @@
         std::unique_ptr<CryptoHandshakeMessage> reply,
         std::unique_ptr<DiversificationNonce> diversification_nonce,
         std::unique_ptr<ProofSource::Details> proof_source_details) {
+  // Clear the callback that got us here.
+  DCHECK(process_client_hello_cb_ != nullptr);
+  DCHECK(validate_client_hello_cb_ == nullptr);
+  process_client_hello_cb_ = nullptr;
+
   const CryptoHandshakeMessage& message = result.client_hello;
   if (error != QUIC_NO_ERROR) {
     CloseConnectionWithDetails(error, error_details);
@@ -338,8 +342,8 @@
   }
 
   QUIC_DVLOG(1) << "Server: Sending server config update: "
-                << message.DebugString();
-  const QuicData& data = message.GetSerialized();
+                << message.DebugString(Perspective::IS_SERVER);
+  const QuicData& data = message.GetSerialized(Perspective::IS_SERVER);
   WriteOrBufferData(QuicStringPiece(data.data(), data.length()), false,
                     nullptr);
 
diff --git a/src/net/quic/core/quic_crypto_server_stream.h b/src/net/quic/core/quic_crypto_server_stream.h
index 893fbe9..4701be7 100644
--- a/src/net/quic/core/quic_crypto_server_stream.h
+++ b/src/net/quic/core/quic_crypto_server_stream.h
@@ -221,12 +221,6 @@
   // server config update messages.
   std::string chlo_hash_;
 
-  // Pointer to the active callback that will receive the result of
-  // the client hello validation request and forward it to
-  // FinishProcessingHandshakeMessage for processing.  nullptr if no
-  // handshake message is being validated.
-  ValidateCallback* validate_client_hello_cb_;
-
   // Pointer to the helper for this crypto stream. Must outlive this stream.
   Helper* helper_;
 
@@ -269,9 +263,16 @@
   // Size of the packet containing the most recently received CHLO.
   QuicByteCount chlo_packet_size_;
 
+  // Pointer to the active callback that will receive the result of the client
+  // hello validation request and forward it to FinishProcessingHandshakeMessage
+  // for processing.  nullptr if no handshake message is being validated.  Note
+  // that this field is mutually exclusive with process_client_hello_cb_.
+  ValidateCallback* validate_client_hello_cb_;
+
   // Pointer to the active callback which will receive the results of
   // ProcessClientHello and forward it to
-  // FinishProcessingHandshakeMessageAfterProcessClientHello.
+  // FinishProcessingHandshakeMessageAfterProcessClientHello.  Note that this
+  // field is mutually exclusive with validate_client_hello_cb_.
   ProcessClientHelloCallback* process_client_hello_cb_;
 
   DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerStream);
diff --git a/src/net/quic/core/quic_crypto_server_stream_test.cc b/src/net/quic/core/quic_crypto_server_stream_test.cc
index d7330b0..ad3c54e 100644
--- a/src/net/quic/core/quic_crypto_server_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_server_stream_test.cc
@@ -26,6 +26,7 @@
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/failing_proof_source.h"
+#include "net/quic/test_tools/fake_proof_source.h"
 #include "net/quic/test_tools/quic_crypto_server_config_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -127,9 +128,10 @@
     client_session_.reset(client_session);
   }
 
-  void ConstructHandshakeMessage() {
+  void ConstructHandshakeMessage(Perspective perspective) {
     CryptoFramer framer;
-    message_data_.reset(framer.ConstructHandshakeMessage(message_));
+    message_data_.reset(
+        framer.ConstructHandshakeMessage(message_, perspective));
   }
 
   int CompleteCryptoHandshake() {
@@ -365,7 +367,7 @@
       *server_connection_,
       CloseConnection(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE, _, _));
   message_.set_tag(kCHLO);
-  ConstructHandshakeMessage();
+  ConstructHandshakeMessage(Perspective::IS_CLIENT);
   server_stream()->OnStreamFrame(
       QuicStreamFrame(kCryptoStreamId, /*fin=*/false, /*offset=*/0,
                       message_data_->AsStringPiece()));
@@ -375,7 +377,7 @@
   Initialize();
 
   message_.set_tag(kSHLO);
-  ConstructHandshakeMessage();
+  ConstructHandshakeMessage(Perspective::IS_SERVER);
   EXPECT_CALL(*server_connection_,
               CloseConnection(QUIC_INVALID_CRYPTO_MESSAGE_TYPE, _, _));
   server_stream()->OnStreamFrame(
@@ -448,7 +450,7 @@
 TEST_P(QuicCryptoServerStreamTest, DoesPeerSupportStatelessRejects) {
   Initialize();
 
-  ConstructHandshakeMessage();
+  ConstructHandshakeMessage(Perspective::IS_CLIENT);
   QuicConfig stateless_reject_config = DefaultQuicConfigStatelessRejects();
   stateless_reject_config.ToHandshakeMessage(&message_);
   EXPECT_TRUE(
@@ -505,6 +507,58 @@
   EXPECT_FALSE(server_stream()->handshake_confirmed());
 }
 
+class QuicCryptoServerStreamTestWithFakeProofSource
+    : public QuicCryptoServerStreamTest {
+ public:
+  QuicCryptoServerStreamTestWithFakeProofSource()
+      : QuicCryptoServerStreamTest(
+            std::unique_ptr<FakeProofSource>(new FakeProofSource)),
+        crypto_config_peer_(&server_crypto_config_) {}
+
+  FakeProofSource* GetFakeProofSource() const {
+    return static_cast<FakeProofSource*>(crypto_config_peer_.GetProofSource());
+  }
+
+ protected:
+  QuicCryptoServerConfigPeer crypto_config_peer_;
+};
+
+INSTANTIATE_TEST_CASE_P(YetMoreTests,
+                        QuicCryptoServerStreamTestWithFakeProofSource,
+                        testing::Bool());
+
+// Regression test for b/35422225, in which multiple CHLOs arriving on the same
+// connection in close succession could cause a crash, especially when the use
+// of Mentat signing meant that it took a while for each CHLO to be processed.
+TEST_P(QuicCryptoServerStreamTestWithFakeProofSource, MultipleChlo) {
+  Initialize();
+  GetFakeProofSource()->Activate();
+  base::SetFlag(&FLAGS_quic_reloadable_flag_fix_quic_callback_crash, true);
+  EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _))
+      .WillOnce(testing::Return(true));
+
+  // Create a minimal CHLO
+  MockClock clock;
+  QuicVersion version = AllSupportedVersions().front();
+  CryptoHandshakeMessage chlo = crypto_test_utils::GenerateDefaultInchoateCHLO(
+      &clock, version, &server_crypto_config_);
+
+  // Send in the CHLO, and check that a callback is now pending in the
+  // ProofSource.
+  server_stream()->OnHandshakeMessage(chlo);
+  EXPECT_EQ(GetFakeProofSource()->NumPendingCallbacks(), 1);
+
+  // Send in a second CHLO while processing of the first is still pending.
+  // Verify that the server closes the connection rather than crashing.  Note
+  // that the crash is a use-after-free, so it may only show up consistently in
+  // ASAN tests.
+  EXPECT_CALL(
+      *server_connection_,
+      CloseConnection(QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO,
+                      "Unexpected handshake message while processing CHLO", _));
+  server_stream()->OnHandshakeMessage(chlo);
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace net
diff --git a/src/net/quic/core/quic_crypto_stream.cc b/src/net/quic/core/quic_crypto_stream.cc
index f7fc3e5..ee8660a 100644
--- a/src/net/quic/core/quic_crypto_stream.cc
+++ b/src/net/quic/core/quic_crypto_stream.cc
@@ -52,7 +52,8 @@
 
 void QuicCryptoStream::OnHandshakeMessage(
     const CryptoHandshakeMessage& message) {
-  QUIC_DVLOG(1) << ENDPOINT << "Received " << message.DebugString();
+  QUIC_DVLOG(1) << ENDPOINT << "Received "
+                << message.DebugString(session()->perspective());
   session()->OnCryptoHandshakeMessageReceived(message);
 }
 
@@ -64,7 +65,7 @@
       break;
     }
     QuicStringPiece data(static_cast<char*>(iov.iov_base), iov.iov_len);
-    if (!crypto_framer_.ProcessInput(data)) {
+    if (!crypto_framer_.ProcessInput(data, session()->perspective())) {
       CloseConnectionWithDetails(crypto_framer_.error(),
                                  crypto_framer_.error_detail());
       return;
@@ -83,10 +84,11 @@
 
 void QuicCryptoStream::SendHandshakeMessage(
     const CryptoHandshakeMessage& message) {
-  QUIC_DVLOG(1) << ENDPOINT << "Sending " << message.DebugString();
+  QUIC_DVLOG(1) << ENDPOINT << "Sending "
+                << message.DebugString(session()->perspective());
   session()->connection()->NeuterUnencryptedPackets();
   session()->OnCryptoHandshakeMessageSent(message);
-  const QuicData& data = message.GetSerialized();
+  const QuicData& data = message.GetSerialized(session()->perspective());
   WriteOrBufferData(QuicStringPiece(data.data(), data.length()), false,
                     nullptr);
 }
diff --git a/src/net/quic/core/quic_crypto_stream_test.cc b/src/net/quic/core/quic_crypto_stream_test.cc
index 16c6d84..7457c0e 100644
--- a/src/net/quic/core/quic_crypto_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_stream_test.cc
@@ -53,12 +53,13 @@
     message_.set_tag(kSHLO);
     message_.SetStringPiece(1, "abc");
     message_.SetStringPiece(2, "def");
-    ConstructHandshakeMessage();
+    ConstructHandshakeMessage(Perspective::IS_SERVER);
   }
 
-  void ConstructHandshakeMessage() {
+  void ConstructHandshakeMessage(Perspective perspective) {
     CryptoFramer framer;
-    message_data_.reset(framer.ConstructHandshakeMessage(message_));
+    message_data_.reset(
+        framer.ConstructHandshakeMessage(message_, perspective));
   }
 
  protected:
diff --git a/src/net/quic/core/quic_data_reader.cc b/src/net/quic/core/quic_data_reader.cc
index 7d57f51..5f2c483 100644
--- a/src/net/quic/core/quic_data_reader.cc
+++ b/src/net/quic/core/quic_data_reader.cc
@@ -8,11 +8,19 @@
 #include "net/quic/core/quic_flags.h"
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/platform/api/quic_endian.h"
+#include "net/quic/platform/api/quic_logging.h"
 
 namespace net {
 
-QuicDataReader::QuicDataReader(const char* data, const size_t len)
-    : data_(data), len_(len), pos_(0) {}
+#define ENDPOINT \
+  (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
+
+QuicDataReader::QuicDataReader(const char* data,
+                               const size_t len,
+                               Perspective perspective)
+    : data_(data), len_(len), pos_(0), perspective_(perspective) {
+  QUIC_DVLOG(1) << ENDPOINT << "QuicDataReader";
+}
 
 bool QuicDataReader::ReadUInt16(uint16_t* result) {
   return ReadBytes(result, sizeof(*result));
diff --git a/src/net/quic/core/quic_data_reader.h b/src/net/quic/core/quic_data_reader.h
index c6bfdcd..9507ec1 100644
--- a/src/net/quic/core/quic_data_reader.h
+++ b/src/net/quic/core/quic_data_reader.h
@@ -10,6 +10,7 @@
 
 #include "base/macros.h"
 #include "net/base/int128.h"
+#include "net/quic/core/quic_types.h"
 #include "net/quic/platform/api/quic_export.h"
 #include "net/quic/platform/api/quic_string_piece.h"
 
@@ -32,7 +33,7 @@
 class QUIC_EXPORT_PRIVATE QuicDataReader {
  public:
   // Caller must provide an underlying buffer to work on.
-  QuicDataReader(const char* data, const size_t len);
+  QuicDataReader(const char* data, const size_t len, Perspective perspective);
 
   // Empty destructor.
   ~QuicDataReader() {}
@@ -134,6 +135,11 @@
   // The location of the next read from our data buffer.
   size_t pos_;
 
+  // Perspective of this data reader. Please note, although client and server
+  // may have different in-memory representation of the same field, the on wire
+  // representation must be consistent.
+  Perspective perspective_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicDataReader);
 };
 
diff --git a/src/net/quic/core/quic_data_writer.cc b/src/net/quic/core/quic_data_writer.cc
index a3c0bd2..3ac6450 100644
--- a/src/net/quic/core/quic_data_writer.cc
+++ b/src/net/quic/core/quic_data_writer.cc
@@ -9,11 +9,19 @@
 
 #include "net/quic/core/quic_flags.h"
 #include "net/quic/platform/api/quic_endian.h"
+#include "net/quic/platform/api/quic_logging.h"
 
 namespace net {
 
-QuicDataWriter::QuicDataWriter(size_t size, char* buffer)
-    : buffer_(buffer), capacity_(size), length_(0) {}
+#define ENDPOINT \
+  (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
+
+QuicDataWriter::QuicDataWriter(size_t size,
+                               char* buffer,
+                               Perspective perspective)
+    : buffer_(buffer), capacity_(size), length_(0), perspective_(perspective) {
+  QUIC_DVLOG(1) << ENDPOINT << "QuicDataReader";
+}
 
 QuicDataWriter::~QuicDataWriter() {}
 
diff --git a/src/net/quic/core/quic_data_writer.h b/src/net/quic/core/quic_data_writer.h
index 459d64b..a7faca2 100644
--- a/src/net/quic/core/quic_data_writer.h
+++ b/src/net/quic/core/quic_data_writer.h
@@ -25,7 +25,7 @@
 class QUIC_EXPORT_PRIVATE QuicDataWriter {
  public:
   // Creates a QuicDataWriter where |buffer| is not owned.
-  QuicDataWriter(size_t size, char* buffer);
+  QuicDataWriter(size_t size, char* buffer, Perspective perspective);
 
   ~QuicDataWriter();
 
@@ -77,6 +77,11 @@
   size_t capacity_;  // Allocation size of payload (or -1 if buffer is const).
   size_t length_;    // Current length of the buffer.
 
+  // Perspective of this data writer. Please note, although client and server
+  // may have different in-memory representation of the same field, the on wire
+  // representation must be consistent.
+  Perspective perspective_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicDataWriter);
 };
 
diff --git a/src/net/quic/core/quic_data_writer_test.cc b/src/net/quic/core/quic_data_writer_test.cc
index 5f14da0..bc1d0ad 100644
--- a/src/net/quic/core/quic_data_writer_test.cc
+++ b/src/net/quic/core/quic_data_writer_test.cc
@@ -15,7 +15,9 @@
 namespace test {
 namespace {
 
-TEST(QuicDataWriterTest, SanityCheckUFloat16Consts) {
+class QuicDataWriterTest : public ::testing::TestWithParam<Perspective> {};
+
+TEST_P(QuicDataWriterTest, SanityCheckUFloat16Consts) {
   // Check the arithmetic on the constants - otherwise the values below make
   // no sense.
   EXPECT_EQ(30, kUFloat16MaxExponent);
@@ -24,7 +26,7 @@
   EXPECT_EQ(UINT64_C(0x3FFC0000000), kUFloat16MaxValue);
 }
 
-TEST(QuicDataWriterTest, WriteUFloat16) {
+TEST_P(QuicDataWriterTest, WriteUFloat16) {
   struct TestCase {
     uint64_t decoded;
     uint16_t encoded;
@@ -96,14 +98,14 @@
 
   for (int i = 0; i < num_test_cases; ++i) {
     char buffer[2];
-    QuicDataWriter writer(2, buffer);
+    QuicDataWriter writer(2, buffer, GetParam());
     EXPECT_TRUE(writer.WriteUFloat16(test_cases[i].decoded));
     EXPECT_EQ(test_cases[i].encoded,
               *reinterpret_cast<uint16_t*>(writer.data()));
   }
 }
 
-TEST(QuicDataWriterTest, ReadUFloat16) {
+TEST_P(QuicDataWriterTest, ReadUFloat16) {
   struct TestCase {
     uint64_t decoded;
     uint16_t encoded;
@@ -156,19 +158,20 @@
   int num_test_cases = sizeof(test_cases) / sizeof(test_cases[0]);
 
   for (int i = 0; i < num_test_cases; ++i) {
-    QuicDataReader reader(reinterpret_cast<char*>(&test_cases[i].encoded), 2);
+    QuicDataReader reader(reinterpret_cast<char*>(&test_cases[i].encoded), 2,
+                          GetParam());
     uint64_t value;
     EXPECT_TRUE(reader.ReadUFloat16(&value));
     EXPECT_EQ(test_cases[i].decoded, value);
   }
 }
 
-TEST(QuicDataWriterTest, RoundTripUFloat16) {
+TEST_P(QuicDataWriterTest, RoundTripUFloat16) {
   // Just test all 16-bit encoded values. 0 and max already tested above.
   uint64_t previous_value = 0;
   for (uint16_t i = 1; i < 0xFFFF; ++i) {
     // Read the two bytes.
-    QuicDataReader reader(reinterpret_cast<char*>(&i), 2);
+    QuicDataReader reader(reinterpret_cast<char*>(&i), 2, GetParam());
     uint64_t value;
     // All values must be decodable.
     EXPECT_TRUE(reader.ReadUFloat16(&value));
@@ -184,7 +187,7 @@
     EXPECT_LT(value, UINT64_C(0x3FFC0000000));
     previous_value = value;
     char buffer[6];
-    QuicDataWriter writer(6, buffer);
+    QuicDataWriter writer(6, buffer, GetParam());
     EXPECT_TRUE(writer.WriteUFloat16(value - 1));
     EXPECT_TRUE(writer.WriteUFloat16(value));
     EXPECT_TRUE(writer.WriteUFloat16(value + 1));
@@ -198,7 +201,7 @@
   }
 }
 
-TEST(QuicDataWriterTest, WriteConnectionId) {
+TEST_P(QuicDataWriterTest, WriteConnectionId) {
   uint64_t connection_id = 0x0011223344556677;
   char little_endian[] = {
       0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
@@ -208,7 +211,7 @@
   };
   const int kBufferLength = sizeof(connection_id);
   char buffer[kBufferLength];
-  QuicDataWriter writer(kBufferLength, buffer);
+  QuicDataWriter writer(kBufferLength, buffer, GetParam());
   writer.WriteConnectionId(connection_id);
   test::CompareCharArraysWithHexError(
       "connection_id", buffer, kBufferLength,
@@ -217,24 +220,24 @@
       kBufferLength);
 
   uint64_t read_connection_id;
-  QuicDataReader reader(buffer, kBufferLength);
+  QuicDataReader reader(buffer, kBufferLength, GetParam());
   reader.ReadConnectionId(&read_connection_id);
   EXPECT_EQ(connection_id, read_connection_id);
 }
 
-TEST(QuicDataWriterTest, WriteTag) {
+TEST_P(QuicDataWriterTest, WriteTag) {
   char CHLO[] = {
       'C', 'H', 'L', 'O',
   };
   const int kBufferLength = sizeof(QuicTag);
   char buffer[kBufferLength];
-  QuicDataWriter writer(kBufferLength, buffer);
+  QuicDataWriter writer(kBufferLength, buffer, GetParam());
   writer.WriteTag(kCHLO);
   test::CompareCharArraysWithHexError("CHLO", buffer, kBufferLength, CHLO,
                                       kBufferLength);
 
   QuicTag read_chlo;
-  QuicDataReader reader(buffer, kBufferLength);
+  QuicDataReader reader(buffer, kBufferLength, GetParam());
   reader.ReadTag(&read_chlo);
   EXPECT_EQ(kCHLO, read_chlo);
 }
diff --git a/src/net/quic/core/quic_flags_list.h b/src/net/quic/core/quic_flags_list.h
index e8992e0..3924bc8 100644
--- a/src/net/quic/core/quic_flags_list.h
+++ b/src/net/quic/core/quic_flags_list.h
@@ -199,3 +199,7 @@
 
 // Add the equivalent number of bytes as 3 TCP TSO segments to QUIC's BBR CWND.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_add_tso_cwnd, false)
+
+// Fix a crash that occurs when a client sends multiple CHLOs close together on
+// the same connection.
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_fix_quic_callback_crash, true)
diff --git a/src/net/quic/core/quic_framer.cc b/src/net/quic/core/quic_framer.cc
index c769b10..fc8e239 100644
--- a/src/net/quic/core/quic_framer.cc
+++ b/src/net/quic/core/quic_framer.cc
@@ -22,6 +22,7 @@
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_aligned.h"
 #include "net/quic/platform/api/quic_bug_tracker.h"
+#include "net/quic/platform/api/quic_flag_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_map_util.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
@@ -318,7 +319,7 @@
                                    const QuicFrames& frames,
                                    char* buffer,
                                    size_t packet_length) {
-  QuicDataWriter writer(packet_length, buffer);
+  QuicDataWriter writer(packet_length, buffer, perspective_);
   if (!AppendPacketHeader(header, &writer)) {
     QUIC_BUG << "AppendPacketHeader failed";
     return 0;
@@ -425,12 +426,13 @@
     }
     reset.SetStringPiece(kCADR, serialized_address);
   }
-  const QuicData& reset_serialized = reset.GetSerialized();
+  const QuicData& reset_serialized =
+      reset.GetSerialized(Perspective::IS_SERVER);
 
   size_t len =
       kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length();
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get());
+  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER);
 
   uint8_t flags = static_cast<uint8_t>(PACKET_PUBLIC_FLAGS_RST |
                                        PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
@@ -460,7 +462,7 @@
   DCHECK(!versions.empty());
   size_t len = GetVersionNegotiationPacketSize(versions.size());
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get());
+  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER);
 
   uint8_t flags = static_cast<uint8_t>(
       PACKET_PUBLIC_FLAGS_VERSION | PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID |
@@ -484,7 +486,7 @@
 }
 
 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
-  QuicDataReader reader(packet.data(), packet.length());
+  QuicDataReader reader(packet.data(), packet.length(), perspective_);
 
   visitor_->OnPacket();
 
@@ -572,7 +574,7 @@
     return RaiseError(QUIC_DECRYPTION_FAILURE);
   }
 
-  QuicDataReader reader(decrypted_buffer, decrypted_length);
+  QuicDataReader reader(decrypted_buffer, decrypted_length, perspective_);
 
   // Set the last packet number after we have decrypted the packet
   // so we are confident is not attacker controlled.
@@ -608,7 +610,7 @@
   QuicPublicResetPacket packet(public_header);
 
   std::unique_ptr<CryptoHandshakeMessage> reset(
-      CryptoFramer::ParseMessage(reader->ReadRemainingPayload()));
+      CryptoFramer::ParseMessage(reader->ReadRemainingPayload(), perspective_));
   if (!reset.get()) {
     set_detailed_error("Unable to read reset message.");
     return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
@@ -776,6 +778,9 @@
       public_flags > (FLAGS_quic_reloadable_flag_quic_remove_multipath_bit
                           ? PACKET_PUBLIC_FLAGS_MAX_WITHOUT_MULTIPATH_FLAG
                           : PACKET_PUBLIC_FLAGS_MAX)) {
+    if (FLAGS_quic_reloadable_flag_quic_remove_multipath_bit) {
+      QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_remove_multipath_bit, 1, 2);
+    }
     set_detailed_error("Illegal public flags value.");
     return false;
   }
@@ -820,6 +825,9 @@
         public_flags > (FLAGS_quic_reloadable_flag_quic_remove_multipath_bit
                             ? PACKET_PUBLIC_FLAGS_MAX_WITHOUT_MULTIPATH_FLAG
                             : PACKET_PUBLIC_FLAGS_MAX)) {
+      if (FLAGS_quic_reloadable_flag_quic_remove_multipath_bit) {
+        QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_remove_multipath_bit, 1, 2);
+      }
       set_detailed_error("Illegal public flags value.");
       return false;
     }
diff --git a/src/net/quic/core/quic_framer_test.cc b/src/net/quic/core/quic_framer_test.cc
index 6e83d54..cf757fa 100644
--- a/src/net/quic/core/quic_framer_test.cc
+++ b/src/net/quic/core/quic_framer_test.cc
@@ -5335,7 +5335,7 @@
   // Test the CryptoFramer.
   QuicStringPiece crypto_input(packet_bytes, size);
   std::unique_ptr<CryptoHandshakeMessage> handshake_message(
-      CryptoFramer::ParseMessage(crypto_input));
+      CryptoFramer::ParseMessage(crypto_input, framer.perspective()));
 
   // Test the regular QuicFramer with the same input.
   NoOpFramerVisitor visitor;
diff --git a/src/net/quic/core/quic_packet_creator.cc b/src/net/quic/core/quic_packet_creator.cc
index d70080c..bcafa95 100644
--- a/src/net/quic/core/quic_packet_creator.cc
+++ b/src/net/quic/core/quic_packet_creator.cc
@@ -357,7 +357,8 @@
   QuicPacketHeader header;
   FillPacketHeader(&header);
   QUIC_CACHELINE_ALIGNED char encrypted_buffer[kMaxPacketSize];
-  QuicDataWriter writer(arraysize(encrypted_buffer), encrypted_buffer);
+  QuicDataWriter writer(arraysize(encrypted_buffer), encrypted_buffer,
+                        framer_->perspective());
   if (!framer_->AppendPacketHeader(header, &writer)) {
     QUIC_BUG << "AppendPacketHeader failed";
     return;
diff --git a/src/net/quic/core/quic_packet_creator_test.cc b/src/net/quic/core/quic_packet_creator_test.cc
index b21909f..69cf24d 100644
--- a/src/net/quic/core/quic_packet_creator_test.cc
+++ b/src/net/quic/core/quic_packet_creator_test.cc
@@ -839,7 +839,8 @@
   message.set_minimum_size(kMaxPacketSize);
   CryptoFramer framer;
   std::unique_ptr<QuicData> message_data;
-  message_data.reset(framer.ConstructHandshakeMessage(message));
+  message_data.reset(
+      framer.ConstructHandshakeMessage(message, Perspective::IS_CLIENT));
 
   struct iovec iov;
   QuicIOVector data_iovec(MakeIOVector(
diff --git a/src/net/quic/core/quic_sent_packet_manager.cc b/src/net/quic/core/quic_sent_packet_manager.cc
index b88e532..a308473 100644
--- a/src/net/quic/core/quic_sent_packet_manager.cc
+++ b/src/net/quic/core/quic_sent_packet_manager.cc
@@ -867,6 +867,10 @@
   return send_algorithm_->GetDebugState();
 }
 
+QuicByteCount QuicSentPacketManager::GetBytesInFlight() const {
+  return unacked_packets_.bytes_in_flight();
+}
+
 void QuicSentPacketManager::CancelRetransmissionsForStream(
     QuicStreamId stream_id) {
   unacked_packets_.CancelRetransmissionsForStream(stream_id);
diff --git a/src/net/quic/core/quic_sent_packet_manager.h b/src/net/quic/core/quic_sent_packet_manager.h
index e2af107..acdf795 100644
--- a/src/net/quic/core/quic_sent_packet_manager.h
+++ b/src/net/quic/core/quic_sent_packet_manager.h
@@ -194,6 +194,10 @@
   // Returns debugging information about the state of the congestion controller.
   std::string GetDebugState() const;
 
+  // Returns the number of bytes that are considered in-flight, i.e. not lost or
+  // acknowledged.
+  QuicByteCount GetBytesInFlight() const;
+
   // No longer retransmit data for |stream_id|.
   void CancelRetransmissionsForStream(QuicStreamId stream_id);
 
diff --git a/src/net/quic/core/quic_server_session_base_test.cc b/src/net/quic/core/quic_server_session_base_test.cc
index 7673552..cbd1303 100644
--- a/src/net/quic/core/quic_server_session_base_test.cc
+++ b/src/net/quic/core/quic_server_session_base_test.cc
@@ -612,7 +612,9 @@
   std::vector<QuicVersion> packet_version_list = {version};
   std::unique_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket(
       1, true, false, 1,
-      string(chlo.GetSerialized().AsStringPiece().as_string()),
+      string(chlo.GetSerialized(Perspective::IS_CLIENT)
+                 .AsStringPiece()
+                 .as_string()),
       PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER,
       &packet_version_list));
 
diff --git a/src/net/quic/test_tools/crypto_test_utils.cc b/src/net/quic/test_tools/crypto_test_utils.cc
index 0e073c6..fee44bb 100644
--- a/src/net/quic/test_tools/crypto_test_utils.cc
+++ b/src/net/quic/test_tools/crypto_test_utils.cc
@@ -340,14 +340,15 @@
     EXPECT_THAT(rej->tag(),
                 testing::AnyOf(testing::Eq(kSREJ), testing::Eq(kREJ)));
 
-    VLOG(1) << "Extract valid STK and SCID from\n" << rej->DebugString();
+    VLOG(1) << "Extract valid STK and SCID from\n"
+            << rej->DebugString(Perspective::IS_SERVER);
     QuicStringPiece srct;
     ASSERT_TRUE(rej->GetStringPiece(kSourceAddressTokenTag, &srct));
 
     QuicStringPiece scfg;
     ASSERT_TRUE(rej->GetStringPiece(kSCFG, &scfg));
     std::unique_ptr<CryptoHandshakeMessage> server_config(
-        CryptoFramer::ParseMessage(scfg));
+        CryptoFramer::ParseMessage(scfg, Perspective::IS_SERVER));
 
     QuicStringPiece scid;
     ASSERT_TRUE(server_config->GetStringPiece(kSCID, &scid));
@@ -860,9 +861,10 @@
 
   // The CryptoHandshakeMessage needs to be serialized and parsed to ensure
   // that any padding is included.
-  std::unique_ptr<QuicData> bytes(CryptoFramer::ConstructHandshakeMessage(msg));
-  std::unique_ptr<CryptoHandshakeMessage> parsed(
-      CryptoFramer::ParseMessage(bytes->AsStringPiece()));
+  std::unique_ptr<QuicData> bytes(
+      CryptoFramer::ConstructHandshakeMessage(msg, Perspective::IS_CLIENT));
+  std::unique_ptr<CryptoHandshakeMessage> parsed(CryptoFramer::ParseMessage(
+      bytes->AsStringPiece(), Perspective::IS_CLIENT));
   CHECK(parsed.get());
 
   return *parsed;
@@ -899,8 +901,9 @@
     }
 
     for (const auto& stream_frame : framer.stream_frames()) {
-      ASSERT_TRUE(crypto_framer.ProcessInput(QuicStringPiece(
-          stream_frame->data_buffer, stream_frame->data_length)));
+      ASSERT_TRUE(crypto_framer.ProcessInput(
+          QuicStringPiece(stream_frame->data_buffer, stream_frame->data_length),
+          dest_perspective));
       ASSERT_FALSE(crypto_visitor.error());
     }
     QuicConnectionPeer::SetCurrentPacket(
diff --git a/src/net/quic/test_tools/crypto_test_utils_test.cc b/src/net/quic/test_tools/crypto_test_utils_test.cc
index 240b1bd..77cc302 100644
--- a/src/net/quic/test_tools/crypto_test_utils_test.cc
+++ b/src/net/quic/test_tools/crypto_test_utils_test.cc
@@ -93,7 +93,8 @@
   void ProcessClientHelloDone(std::unique_ptr<CryptoHandshakeMessage> message) {
     // Verify output is a SHLO.
     EXPECT_EQ(message->tag(), kSHLO)
-        << "Fail to pass validation. Get " << message->DebugString();
+        << "Fail to pass validation. Get "
+        << message->DebugString(Perspective::IS_SERVER);
   }
 
   QuicCryptoServerConfig* crypto_config_;
diff --git a/src/net/quic/test_tools/mock_crypto_client_stream.cc b/src/net/quic/test_tools/mock_crypto_client_stream.cc
index 2f0089a..1a2449a 100644
--- a/src/net/quic/test_tools/mock_crypto_client_stream.cc
+++ b/src/net/quic/test_tools/mock_crypto_client_stream.cc
@@ -42,7 +42,7 @@
                              "Forced mock failure");
 }
 
-void MockCryptoClientStream::CryptoConnect() {
+bool MockCryptoClientStream::CryptoConnect() {
   if (proof_verify_details_) {
     if (!proof_verify_details_->cert_verify_result.verified_cert
              ->VerifyNameMatch(server_id_.host(), false)) {
@@ -51,7 +51,7 @@
       session()->connection()->CloseConnection(
           QUIC_PROOF_INVALID, "proof invalid",
           ConnectionCloseBehavior::SILENT_CLOSE);
-      return;
+      return false;
     }
   }
 
@@ -106,6 +106,8 @@
       break;
     }
   }
+
+  return session()->connection()->connected();
 }
 
 void MockCryptoClientStream::SendOnCryptoHandshakeEvent(
diff --git a/src/net/quic/test_tools/mock_crypto_client_stream.h b/src/net/quic/test_tools/mock_crypto_client_stream.h
index ffec4aa..0d0f5a4 100644
--- a/src/net/quic/test_tools/mock_crypto_client_stream.h
+++ b/src/net/quic/test_tools/mock_crypto_client_stream.h
@@ -58,7 +58,7 @@
   void OnHandshakeMessage(const CryptoHandshakeMessage& message) override;
 
   // QuicCryptoClientStream implementation.
-  void CryptoConnect() override;
+  bool CryptoConnect() override;
 
   // Invokes the sessions's CryptoHandshakeEvent method with the specified
   // event.
diff --git a/src/net/reporting/reporting_browsing_data_remover.cc b/src/net/reporting/reporting_browsing_data_remover.cc
new file mode 100644
index 0000000..5041a47
--- /dev/null
+++ b/src/net/reporting/reporting_browsing_data_remover.cc
@@ -0,0 +1,59 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_browsing_data_remover.h"
+
+#include <vector>
+
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_report.h"
+
+namespace net {
+
+// static
+void ReportingBrowsingDataRemover::RemoveBrowsingData(
+    ReportingContext* context,
+    int data_type_mask,
+    base::Callback<bool(const GURL&)> origin_filter) {
+  ReportingCache* cache = context->cache();
+  bool remove_reports = (data_type_mask & DATA_TYPE_REPORTS) != 0;
+  bool remove_clients = (data_type_mask & DATA_TYPE_CLIENTS) != 0;
+
+  if (origin_filter.is_null()) {
+    if (remove_reports)
+      cache->RemoveAllReports();
+    if (remove_clients)
+      cache->RemoveAllClients();
+    return;
+  }
+
+  if (remove_reports) {
+    std::vector<const ReportingReport*> all_reports;
+    cache->GetReports(&all_reports);
+
+    std::vector<const ReportingReport*> reports_to_remove;
+    for (const ReportingReport* report : all_reports) {
+      if (origin_filter.Run(report->url))
+        reports_to_remove.push_back(report);
+    }
+
+    cache->RemoveReports(reports_to_remove);
+  }
+
+  if (remove_clients) {
+    std::vector<const ReportingClient*> all_clients;
+    cache->GetClients(&all_clients);
+
+    std::vector<const ReportingClient*> clients_to_remove;
+    for (const ReportingClient* client : all_clients) {
+      if (origin_filter.Run(client->origin.GetURL()))
+        clients_to_remove.push_back(client);
+    }
+
+    cache->RemoveClients(clients_to_remove);
+  }
+}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_browsing_data_remover.h b/src/net/reporting/reporting_browsing_data_remover.h
new file mode 100644
index 0000000..db2bfb6
--- /dev/null
+++ b/src/net/reporting/reporting_browsing_data_remover.h
@@ -0,0 +1,36 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
+#define NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "net/base/net_export.h"
+#include "url/gurl.h"
+
+namespace net {
+
+class ReportingContext;
+
+// Clears browsing data (reports and clients) from the Reporting system.
+class NET_EXPORT ReportingBrowsingDataRemover {
+ public:
+  enum DataType {
+    DATA_TYPE_REPORTS = 0x1,
+    DATA_TYPE_CLIENTS = 0x2,
+  };
+
+  static void RemoveBrowsingData(
+      ReportingContext* context,
+      int data_type_mask,
+      base::Callback<bool(const GURL&)> origin_filter);
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(ReportingBrowsingDataRemover);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
diff --git a/src/net/reporting/reporting_browsing_data_remover_unittest.cc b/src/net/reporting/reporting_browsing_data_remover_unittest.cc
new file mode 100644
index 0000000..349c5d5
--- /dev/null
+++ b/src/net/reporting/reporting_browsing_data_remover_unittest.cc
@@ -0,0 +1,193 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_browsing_data_remover.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace {
+
+class ReportingBrowsingDataRemoverTest : public ReportingTestBase {
+ protected:
+  void RemoveBrowsingData(bool remove_reports,
+                          bool remove_clients,
+                          std::string host) {
+    int data_type_mask = 0;
+    if (remove_reports)
+      data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_REPORTS;
+    if (remove_clients)
+      data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS;
+
+    base::Callback<bool(const GURL&)> origin_filter;
+    if (!host.empty()) {
+      origin_filter =
+          base::Bind(&ReportingBrowsingDataRemoverTest::HostIs, host);
+    }
+
+    ReportingBrowsingDataRemover::RemoveBrowsingData(context(), data_type_mask,
+                                                     origin_filter);
+  }
+
+  static bool HostIs(std::string host, const GURL& url) {
+    return url.host() == host;
+  }
+
+  size_t report_count() {
+    std::vector<const ReportingReport*> reports;
+    cache()->GetReports(&reports);
+    return reports.size();
+  }
+
+  size_t client_count() {
+    std::vector<const ReportingClient*> clients;
+    cache()->GetClients(&clients);
+    return clients.size();
+  }
+
+  const GURL kUrl1_ = GURL("https://origin1/path");
+  const GURL kUrl2_ = GURL("https://origin2/path");
+  const url::Origin kOrigin1_ = url::Origin(kUrl1_);
+  const url::Origin kOrigin2_ = url::Origin(kUrl2_);
+  const GURL kEndpoint_ = GURL("https://endpoint/");
+  const std::string kGroup_ = "group";
+  const std::string kType_ = "default";
+};
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveNothing) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ false,
+                     /* host= */ "");
+  EXPECT_EQ(2u, report_count());
+  EXPECT_EQ(2u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReports) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
+                     /* host= */ "");
+  EXPECT_EQ(0u, report_count());
+  EXPECT_EQ(2u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
+                     /* host= */ "");
+  EXPECT_EQ(2u, report_count());
+  EXPECT_EQ(0u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReportsAndClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ true,
+                     /* host= */ "");
+  EXPECT_EQ(0u, report_count());
+  EXPECT_EQ(0u, client_count());
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeReports) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
+                     /* host= */ kUrl1_.host());
+  EXPECT_EQ(2u, client_count());
+
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(kUrl2_, reports[0]->url);
+}
+
+TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeClients) {
+  cache()->AddReport(kUrl1_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl2_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->SetClient(kOrigin1_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+  cache()->SetClient(kOrigin2_, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(7));
+
+  RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
+                     /* host= */ kUrl1_.host());
+  EXPECT_EQ(2u, report_count());
+  EXPECT_FALSE(FindClientInCache(cache(), kOrigin1_, kEndpoint_) != nullptr);
+  EXPECT_TRUE(FindClientInCache(cache(), kOrigin2_, kEndpoint_) != nullptr);
+}
+
+}  // namespace
+}  // namespace net
diff --git a/src/net/reporting/reporting_cache.cc b/src/net/reporting/reporting_cache.cc
index aaa3953..9e43153 100644
--- a/src/net/reporting/reporting_cache.cc
+++ b/src/net/reporting/reporting_cache.cc
@@ -14,12 +14,15 @@
 #include "base/stl_util.h"
 #include "base/time/time.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_context.h"
 #include "net/reporting/reporting_report.h"
 #include "url/gurl.h"
 
 namespace net {
 
-ReportingCache::ReportingCache() {}
+ReportingCache::ReportingCache(ReportingContext* context) : context_(context) {
+  DCHECK(context_);
+}
 
 ReportingCache::~ReportingCache() {}
 
@@ -35,6 +38,8 @@
   auto inserted =
       reports_.insert(std::make_pair(report.get(), std::move(report)));
   DCHECK(inserted.second);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::GetReports(
@@ -76,6 +81,8 @@
     DCHECK(base::ContainsKey(reports_, report));
     reports_[report]->attempts++;
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveReports(
@@ -89,6 +96,8 @@
       reports_.erase(report);
     }
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveAllReports() {
@@ -105,6 +114,8 @@
 
   for (auto& it : reports_to_remove)
     reports_.erase(it);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::GetClients(
@@ -140,6 +151,8 @@
 
   clients_[origin][endpoint] = base::MakeUnique<ReportingClient>(
       origin, endpoint, subdomains, group, expires);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClients(
@@ -149,6 +162,8 @@
     DCHECK(clients_[client->origin][client->endpoint].get() == client);
     clients_[client->origin].erase(client->endpoint);
   }
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClientForOriginAndEndpoint(const url::Origin& origin,
@@ -156,15 +171,21 @@
   DCHECK(base::ContainsKey(clients_, origin));
   DCHECK(base::ContainsKey(clients_[origin], endpoint));
   clients_[origin].erase(endpoint);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveClientsForEndpoint(const GURL& endpoint) {
   for (auto& it : clients_)
     it.second.erase(endpoint);
+
+  context_->NotifyCacheUpdated();
 }
 
 void ReportingCache::RemoveAllClients() {
   clients_.clear();
+
+  context_->NotifyCacheUpdated();
 }
 
 }  // namespace net
diff --git a/src/net/reporting/reporting_cache.h b/src/net/reporting/reporting_cache.h
index fdd19c2..8d04279 100644
--- a/src/net/reporting/reporting_cache.h
+++ b/src/net/reporting/reporting_cache.h
@@ -7,6 +7,7 @@
 
 #include <map>
 #include <memory>
+#include <set>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
@@ -23,6 +24,7 @@
 
 namespace net {
 
+class ReportingContext;
 struct ReportingReport;
 
 // The cache holds undelivered reports and clients (per-origin endpoint
@@ -38,7 +40,8 @@
 // "doomed", which will cause it to be deallocated once it is no longer pending.
 class NET_EXPORT ReportingCache {
  public:
-  ReportingCache();
+  // |context| must outlive the ReportingCache.
+  ReportingCache(ReportingContext* context);
 
   ~ReportingCache();
 
@@ -145,6 +148,8 @@
   }
 
  private:
+  ReportingContext* context_;
+
   // Owns all clients, keyed by origin, then endpoint URL.
   // (These would be unordered_map, but neither url::Origin nor GURL has a hash
   // function implemented.)
@@ -155,11 +160,11 @@
   std::unordered_map<const ReportingReport*, std::unique_ptr<ReportingReport>>
       reports_;
 
-  // Reports that have been marked "pending" (in use elsewhere and should not be
+  // Reports that have been marked pending (in use elsewhere and should not be
   // deleted until no longer pending).
   std::unordered_set<const ReportingReport*> pending_reports_;
 
-  // Reports that have been marked "doomed" (would have been deleted, but were
+  // Reports that have been marked doomed (would have been deleted, but were
   // pending when the deletion was requested).
   std::unordered_set<const ReportingReport*> doomed_reports_;
 
diff --git a/src/net/reporting/reporting_cache_unittest.cc b/src/net/reporting/reporting_cache_unittest.cc
index be55cbb..08cd273 100644
--- a/src/net/reporting/reporting_cache_unittest.cc
+++ b/src/net/reporting/reporting_cache_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_observer.h"
 #include "net/reporting/reporting_report.h"
 #include "net/reporting/reporting_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -19,32 +20,54 @@
 namespace net {
 namespace {
 
-class ReportingCacheTest : public ::testing::Test {
+class TestReportingObserver : public ReportingObserver {
+ public:
+  TestReportingObserver() : cache_update_count_(0) {}
+
+  void OnCacheUpdated() override { ++cache_update_count_; }
+
+  int cache_update_count() const { return cache_update_count_; }
+
+ private:
+  int cache_update_count_;
+};
+
+class ReportingCacheTest : public ReportingTestBase {
  protected:
+  ReportingCacheTest() : ReportingTestBase() {
+    context()->AddObserver(&observer_);
+  }
+
+  ~ReportingCacheTest() override { context()->RemoveObserver(&observer_); }
+
+  TestReportingObserver* observer() { return &observer_; }
+
   const GURL kUrl1_ = GURL("https://origin1/path");
   const url::Origin kOrigin1_ = url::Origin(GURL("https://origin1/"));
   const url::Origin kOrigin2_ = url::Origin(GURL("https://origin2/"));
   const GURL kEndpoint1_ = GURL("https://endpoint1/");
   const GURL kEndpoint2_ = GURL("https://endpoint2/");
   const std::string kGroup1_ = "group1";
-  const std::string kGroup2_ = "group2";
+  const std::string kGroup2 = "group2";
   const std::string kType_ = "default";
   const base::TimeTicks kNow_ = base::TimeTicks::Now();
   const base::TimeTicks kExpires1_ = kNow_ + base::TimeDelta::FromDays(7);
   const base::TimeTicks kExpires2_ = kExpires1_ + base::TimeDelta::FromDays(7);
 
-  ReportingCache cache_;
+ private:
+  TestReportingObserver observer_;
 };
 
 TEST_F(ReportingCacheTest, Reports) {
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   const ReportingReport* report = reports[0];
   ASSERT_TRUE(report);
@@ -54,103 +77,113 @@
   // TODO(juliatuttle): Check body?
   EXPECT_EQ(kNow_, report->queued);
   EXPECT_EQ(0, report->attempts);
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(report));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(report));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(report));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
 
-  cache_.IncrementReportsAttempts(reports);
+  cache()->IncrementReportsAttempts(reports);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
   report = reports[0];
   ASSERT_TRUE(report);
   EXPECT_EQ(1, report->attempts);
 
-  cache_.RemoveReports(reports);
+  cache()->RemoveReports(reports);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_EQ(2u, reports.size());
 
-  cache_.RemoveAllReports();
+  cache()->RemoveAllReports();
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   EXPECT_TRUE(reports.empty());
 }
 
 TEST_F(ReportingCacheTest, RemovePendingReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.SetReportsPending(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->SetReportsPending(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.RemoveReports(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->RemoveReports(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(reports[0]));
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   // After removing report, future calls to GetReports should not return it.
   std::vector<const ReportingReport*> visible_reports;
-  cache_.GetReports(&visible_reports);
+  cache()->GetReports(&visible_reports);
   EXPECT_TRUE(visible_reports.empty());
-  EXPECT_EQ(1u, cache_.GetFullReportCountForTesting());
+  EXPECT_EQ(1u, cache()->GetFullReportCountForTesting());
 
   // After clearing pending flag, report should be deleted.
-  cache_.ClearReportsPending(reports);
-  EXPECT_EQ(0u, cache_.GetFullReportCountForTesting());
+  cache()->ClearReportsPending(reports);
+  EXPECT_EQ(0u, cache()->GetFullReportCountForTesting());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllPendingReports) {
-  cache_.AddReport(kUrl1_, kGroup1_, kType_,
-                   base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  cache()->AddReport(kUrl1_, kGroup1_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(), kNow_, 0);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   std::vector<const ReportingReport*> reports;
-  cache_.GetReports(&reports);
+  cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
-  EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.SetReportsPending(reports);
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->SetReportsPending(reports);
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(reports[0]));
 
-  cache_.RemoveAllReports();
-  EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0]));
-  EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0]));
+  cache()->RemoveAllReports();
+  EXPECT_TRUE(cache()->IsReportPendingForTesting(reports[0]));
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(reports[0]));
+  EXPECT_EQ(2, observer()->cache_update_count());
 
   // After removing report, future calls to GetReports should not return it.
   std::vector<const ReportingReport*> visible_reports;
-  cache_.GetReports(&visible_reports);
+  cache()->GetReports(&visible_reports);
   EXPECT_TRUE(visible_reports.empty());
-  EXPECT_EQ(1u, cache_.GetFullReportCountForTesting());
+  EXPECT_EQ(1u, cache()->GetFullReportCountForTesting());
 
   // After clearing pending flag, report should be deleted.
-  cache_.ClearReportsPending(reports);
-  EXPECT_EQ(0u, cache_.GetFullReportCountForTesting());
+  cache()->ClearReportsPending(reports);
+  EXPECT_EQ(0u, cache()->GetFullReportCountForTesting());
 }
 
 TEST_F(ReportingCacheTest, Endpoints) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(1, observer()->cache_update_count());
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+      FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin1_, client->origin);
   EXPECT_EQ(kEndpoint1_, client->endpoint);
@@ -158,35 +191,37 @@
   EXPECT_EQ(kGroup1_, client->group);
   EXPECT_EQ(kExpires1_, client->expires);
 
-  // Replaces original configuration with new Subdomains, group, and expires
-  // values.
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::INCLUDE,
-                   kGroup2_, kExpires2_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::INCLUDE, kGroup2, kExpires2_);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  client = FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+  client = FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin1_, client->origin);
   EXPECT_EQ(kEndpoint1_, client->endpoint);
   EXPECT_EQ(ReportingClient::Subdomains::INCLUDE, client->subdomains);
-  EXPECT_EQ(kGroup2_, client->group);
+  EXPECT_EQ(kGroup2, client->group);
   EXPECT_EQ(kExpires2_, client->expires);
 
-  cache_.RemoveClients(std::vector<const ReportingClient*>{client});
+  cache()->RemoveClients(std::vector<const ReportingClient*>{client});
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  client = FindClientInCache(&cache_, kOrigin1_, kEndpoint1_);
+  client = FindClientInCache(cache(), kOrigin1_, kEndpoint1_);
   EXPECT_FALSE(client);
 }
 
 TEST_F(ReportingCacheTest, GetClientsForOriginAndGroup) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   ASSERT_EQ(1u, clients.size());
   const ReportingClient* client = clients[0];
   ASSERT_TRUE(client);
@@ -195,57 +230,69 @@
 }
 
 TEST_F(ReportingCacheTest, RemoveClientForOriginAndEndpoint) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.RemoveClientForOriginAndEndpoint(kOrigin1_, kEndpoint1_);
+  cache()->RemoveClientForOriginAndEndpoint(kOrigin1_, kEndpoint1_);
+  EXPECT_EQ(4, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup2_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup2, &clients);
   EXPECT_EQ(1u, clients.size());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
   EXPECT_EQ(1u, clients.size());
 }
 
 TEST_F(ReportingCacheTest, RemoveClientsForEndpoint) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin1_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup2_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup2, kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(3, observer()->cache_update_count());
 
-  cache_.RemoveClientsForEndpoint(kEndpoint1_);
+  cache()->RemoveClientsForEndpoint(kEndpoint1_);
+  EXPECT_EQ(4, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin1_, kGroup2_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin1_, kGroup2, &clients);
   EXPECT_EQ(1u, clients.size());
 
-  cache_.GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
+  cache()->GetClientsForOriginAndGroup(kOrigin2_, kGroup1_, &clients);
   EXPECT_TRUE(clients.empty());
 }
 
 TEST_F(ReportingCacheTest, RemoveAllClients) {
-  cache_.SetClient(kOrigin1_, kEndpoint1_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
-  cache_.SetClient(kOrigin2_, kEndpoint2_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup1_, kExpires1_);
+  cache()->SetClient(kOrigin1_, kEndpoint1_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  cache()->SetClient(kOrigin2_, kEndpoint2_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup1_,
+                     kExpires1_);
+  EXPECT_EQ(2, observer()->cache_update_count());
 
-  cache_.RemoveAllClients();
+  cache()->RemoveAllClients();
+  EXPECT_EQ(3, observer()->cache_update_count());
 
   std::vector<const ReportingClient*> clients;
-  cache_.GetClients(&clients);
+  cache()->GetClients(&clients);
   EXPECT_TRUE(clients.empty());
 }
 
diff --git a/src/net/reporting/reporting_context.cc b/src/net/reporting/reporting_context.cc
new file mode 100644
index 0000000..cc50dc7
--- /dev/null
+++ b/src/net/reporting/reporting_context.cc
@@ -0,0 +1,84 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_context.h"
+
+#include <memory>
+
+#include "base/memory/ptr_util.h"
+#include "base/observer_list.h"
+#include "base/time/clock.h"
+#include "base/time/default_clock.h"
+#include "base/time/default_tick_clock.h"
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_delivery_agent.h"
+#include "net/reporting/reporting_endpoint_manager.h"
+#include "net/reporting/reporting_observer.h"
+#include "net/reporting/reporting_policy.h"
+
+namespace net {
+
+class URLRequestContext;
+
+namespace {
+
+class ReportingContextImpl : public ReportingContext {
+ public:
+  ReportingContextImpl(const ReportingPolicy& policy,
+                       std::unique_ptr<ReportingDelegate> delegate,
+                       URLRequestContext* request_context)
+      : ReportingContext(policy,
+                         std::move(delegate),
+                         base::MakeUnique<base::DefaultClock>(),
+                         base::MakeUnique<base::DefaultTickClock>(),
+                         ReportingUploader::Create(request_context)) {}
+};
+
+}  // namespace
+
+// static
+std::unique_ptr<ReportingContext> ReportingContext::Create(
+    const ReportingPolicy& policy,
+    std::unique_ptr<ReportingDelegate> delegate,
+    URLRequestContext* request_context) {
+  return base::MakeUnique<ReportingContextImpl>(policy, std::move(delegate),
+                                                request_context);
+}
+
+ReportingContext::~ReportingContext() {}
+
+void ReportingContext::AddObserver(ReportingObserver* observer) {
+  DCHECK(!observers_.HasObserver(observer));
+  observers_.AddObserver(observer);
+}
+
+void ReportingContext::RemoveObserver(ReportingObserver* observer) {
+  DCHECK(observers_.HasObserver(observer));
+  observers_.RemoveObserver(observer);
+}
+
+void ReportingContext::NotifyCacheUpdated() {
+  for (auto& observer : observers_)
+    observer.OnCacheUpdated();
+}
+
+ReportingContext::ReportingContext(const ReportingPolicy& policy,
+                                   std::unique_ptr<ReportingDelegate> delegate,
+                                   std::unique_ptr<base::Clock> clock,
+                                   std::unique_ptr<base::TickClock> tick_clock,
+                                   std::unique_ptr<ReportingUploader> uploader)
+    : policy_(policy),
+      delegate_(std::move(delegate)),
+      clock_(std::move(clock)),
+      tick_clock_(std::move(tick_clock)),
+      uploader_(std::move(uploader)),
+      cache_(base::MakeUnique<ReportingCache>(this)),
+      endpoint_manager_(base::MakeUnique<ReportingEndpointManager>(this)),
+      delivery_agent_(base::MakeUnique<ReportingDeliveryAgent>(this)) {}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_context.h b/src/net/reporting/reporting_context.h
new file mode 100644
index 0000000..0242561
--- /dev/null
+++ b/src/net/reporting/reporting_context.h
@@ -0,0 +1,91 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_CONTEXT_H_
+#define NET_REPORTING_REPORTING_CONTEXT_H_
+
+#include <memory>
+
+#include "base/observer_list.h"
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_export.h"
+#include "net/reporting/reporting_policy.h"
+
+namespace base {
+class Clock;
+class TickClock;
+}  // namespace base
+
+namespace net {
+
+class ReportingCache;
+class ReportingDelegate;
+class ReportingDeliveryAgent;
+class ReportingEndpointManager;
+class ReportingObserver;
+class ReportingUploader;
+class URLRequestContext;
+
+// Contains the various internal classes that make up the Reporting system.
+// Wrapped by ReportingService, which provides the external interface.
+class NET_EXPORT ReportingContext {
+ public:
+  static std::unique_ptr<ReportingContext> Create(
+      const ReportingPolicy& policy,
+      std::unique_ptr<ReportingDelegate> delegate,
+      URLRequestContext* request_context);
+
+  ~ReportingContext();
+
+  const ReportingPolicy& policy() { return policy_; }
+  ReportingDelegate* delegate() { return delegate_.get(); }
+
+  base::Clock* clock() { return clock_.get(); }
+  base::TickClock* tick_clock() { return tick_clock_.get(); }
+  ReportingUploader* uploader() { return uploader_.get(); }
+
+  ReportingCache* cache() { return cache_.get(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return endpoint_manager_.get();
+  }
+  ReportingDeliveryAgent* delivery_agent() { return delivery_agent_.get(); }
+
+  void AddObserver(ReportingObserver* observer);
+  void RemoveObserver(ReportingObserver* observer);
+
+  void NotifyCacheUpdated();
+
+ protected:
+  ReportingContext(const ReportingPolicy& policy,
+                   std::unique_ptr<ReportingDelegate> delegate,
+                   std::unique_ptr<base::Clock> clock,
+                   std::unique_ptr<base::TickClock> tick_clock,
+                   std::unique_ptr<ReportingUploader> uploader);
+
+ private:
+  ReportingPolicy policy_;
+  std::unique_ptr<ReportingDelegate> delegate_;
+
+  std::unique_ptr<base::Clock> clock_;
+  std::unique_ptr<base::TickClock> tick_clock_;
+  std::unique_ptr<ReportingUploader> uploader_;
+
+  base::ObserverList<ReportingObserver, /* check_empty= */ true> observers_;
+
+  std::unique_ptr<ReportingCache> cache_;
+
+  // |endpoint_manager_| must come after |tick_clock_| and |cache_|.
+  std::unique_ptr<ReportingEndpointManager> endpoint_manager_;
+
+  // |delivery_agent_| must come after |tick_clock_|, |uploader_|, |cache_|,
+  // and |endpoint_manager_|.
+  std::unique_ptr<ReportingDeliveryAgent> delivery_agent_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingContext);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_CONTEXT_H_
diff --git a/src/net/reporting/reporting_delegate.cc b/src/net/reporting/reporting_delegate.cc
new file mode 100644
index 0000000..cef5baf
--- /dev/null
+++ b/src/net/reporting/reporting_delegate.cc
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_delegate.h"
+
+namespace net {
+
+ReportingDelegate::~ReportingDelegate() {}
+
+ReportingDelegate::ReportingDelegate() {}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_delegate.h b/src/net/reporting/reporting_delegate.h
new file mode 100644
index 0000000..57d01ab
--- /dev/null
+++ b/src/net/reporting/reporting_delegate.h
@@ -0,0 +1,45 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_DELEGATE_H_
+#define NET_REPORTING_REPORTING_DELEGATE_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+namespace base {
+class Value;
+}  // namespace base
+
+namespace net {
+
+// Delegate for things that the Reporting system can't do by itself, like
+// persisting data across embedder restarts.
+class NET_EXPORT ReportingDelegate {
+ public:
+  virtual ~ReportingDelegate();
+
+  // Gets previously persisted data, if any is available. Returns a null pointer
+  // if no data is available. Can be called any number of times.
+  virtual std::unique_ptr<const base::Value> GetPersistedData() = 0;
+
+  // Sets data to be persisted across embedder restarts. Ideally, this data will
+  // be returned by any future calls to GetPersistedData() in this or future
+  // sessions (until newer data is persisted), but no guarantee is made, since
+  // the underlying persistence mechanism may or may not be reliable.
+  virtual void PersistData(
+      std::unique_ptr<const base::Value> persisted_data) = 0;
+
+ protected:
+  ReportingDelegate();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ReportingDelegate);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_DELEGATE_H_
diff --git a/src/net/reporting/reporting_delivery_agent.cc b/src/net/reporting/reporting_delivery_agent.cc
new file mode 100644
index 0000000..f39dde9
--- /dev/null
+++ b/src/net/reporting/reporting_delivery_agent.cc
@@ -0,0 +1,142 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_delivery_agent.h"
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/json/json_writer.h"
+#include "base/logging.h"
+#include "base/memory/ptr_util.h"
+#include "base/time/tick_clock.h"
+#include "base/values.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_endpoint_manager.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_uploader.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace net {
+
+namespace {
+
+void SerializeReports(const std::vector<const ReportingReport*>& reports,
+                      base::TimeTicks now,
+                      std::string* json_out) {
+  base::ListValue reports_value;
+
+  for (const ReportingReport* report : reports) {
+    std::unique_ptr<base::DictionaryValue> report_value =
+        base::MakeUnique<base::DictionaryValue>();
+
+    report_value->SetInteger("age", (now - report->queued).InMilliseconds());
+    report_value->SetString("type", report->type);
+    report_value->SetString("url", report->url.spec());
+    report_value->Set("report", report->body->DeepCopy());
+
+    reports_value.Append(std::move(report_value));
+  }
+
+  bool json_written = base::JSONWriter::Write(reports_value, json_out);
+  DCHECK(json_written);
+}
+
+}  // namespace
+
+ReportingDeliveryAgent::ReportingDeliveryAgent(ReportingContext* context)
+    : context_(context), weak_factory_(this) {}
+ReportingDeliveryAgent::~ReportingDeliveryAgent() {}
+
+class ReportingDeliveryAgent::Delivery {
+ public:
+  Delivery(const GURL& endpoint,
+           const std::vector<const ReportingReport*>& reports)
+      : endpoint(endpoint), reports(reports) {}
+
+  ~Delivery() {}
+
+  const GURL endpoint;
+  const std::vector<const ReportingReport*> reports;
+};
+
+void ReportingDeliveryAgent::SendReports() {
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+
+  // Sort reports into (origin, group) buckets.
+  std::map<OriginGroup, std::vector<const ReportingReport*>>
+      origin_group_reports;
+  for (const ReportingReport* report : reports) {
+    OriginGroup origin_group(url::Origin(report->url), report->group);
+    origin_group_reports[origin_group].push_back(report);
+  }
+
+  // Find endpoint for each (origin, group) bucket and sort reports into
+  // endpoint buckets. Don't allow concurrent deliveries to the same (origin,
+  // group) bucket.
+  std::map<GURL, std::vector<const ReportingReport*>> endpoint_reports;
+  for (auto& it : origin_group_reports) {
+    const OriginGroup& origin_group = it.first;
+
+    if (base::ContainsKey(pending_origin_groups_, origin_group))
+      continue;
+
+    GURL endpoint_url;
+    if (!endpoint_manager()->FindEndpointForOriginAndGroup(
+            origin_group.first, origin_group.second, &endpoint_url)) {
+      continue;
+    }
+
+    endpoint_reports[endpoint_url].insert(endpoint_reports[endpoint_url].end(),
+                                          it.second.begin(), it.second.end());
+    pending_origin_groups_.insert(origin_group);
+  }
+
+  // Start a delivery to each endpoint.
+  for (auto& it : endpoint_reports) {
+    const GURL& endpoint = it.first;
+    const std::vector<const ReportingReport*>& reports = it.second;
+
+    endpoint_manager()->SetEndpointPending(endpoint);
+    cache()->SetReportsPending(reports);
+
+    std::string json;
+    SerializeReports(reports, tick_clock()->NowTicks(), &json);
+
+    uploader()->StartUpload(
+        endpoint, json,
+        base::Bind(&ReportingDeliveryAgent::OnUploadComplete,
+                   weak_factory_.GetWeakPtr(),
+                   base::MakeUnique<Delivery>(endpoint, reports)));
+  }
+}
+
+void ReportingDeliveryAgent::OnUploadComplete(
+    const std::unique_ptr<Delivery>& delivery,
+    ReportingUploader::Outcome outcome) {
+  if (outcome == ReportingUploader::Outcome::SUCCESS) {
+    cache()->RemoveReports(delivery->reports);
+    endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, true);
+  } else {
+    cache()->IncrementReportsAttempts(delivery->reports);
+    endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, false);
+  }
+
+  if (outcome == ReportingUploader::Outcome::REMOVE_ENDPOINT)
+    cache()->RemoveClientsForEndpoint(delivery->endpoint);
+
+  for (const ReportingReport* report : delivery->reports) {
+    pending_origin_groups_.erase(
+        OriginGroup(url::Origin(report->url), report->group));
+  }
+
+  endpoint_manager()->ClearEndpointPending(delivery->endpoint);
+  cache()->ClearReportsPending(delivery->reports);
+}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_delivery_agent.h b/src/net/reporting/reporting_delivery_agent.h
new file mode 100644
index 0000000..eaae8a3
--- /dev/null
+++ b/src/net/reporting/reporting_delivery_agent.h
@@ -0,0 +1,99 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_DELIVERY_AGENT_H_
+#define NET_REPORTING_REPORTING_DELIVERY_AGENT_H_
+
+#include <memory>
+#include <set>
+#include <string>
+#include <utility>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_export.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_uploader.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace base {
+class TickClock;
+}  // namespace base
+
+namespace net {
+
+class ReportingCache;
+class ReportingEndpointManager;
+
+// Takes reports from the ReportingCache, assembles reports into deliveries to
+// endpoints, and sends those deliveries using ReportingUploader.
+//
+// Since the Reporting spec is completely silent on issues of concurrency, the
+// delivery agent handles it as so:
+//
+// 1. An individual report can only be included in one delivery at once -- if
+//    SendReports is called again while a report is being delivered, it won't
+//    be included in another delivery during that call to SendReports. (This is,
+//    in fact, made redundant by rule 3, but it's included anyway in case rule 3
+//    changes.)
+//
+// 2. An endpoint can only be the target of one delivery at once -- if
+//    SendReports is called again with reports that could be delivered to that
+//    endpoint, they won't be delivered to that endpoint.
+//
+// 3. Reports for an (origin, group) tuple can only be included in one delivery
+//    at once -- if SendReports is called again with reports in that (origin,
+//    group), they won't be included in any delivery during that call to
+//    SendReports. (This prevents the agent from getting around rule 2 by using
+//    other endpoints in the same group.)
+//
+// 4. Reports for the same origin *can* be included in multiple parallel
+//    deliveries if they are in different groups within that origin.
+//
+// (Note that a single delivery can contain an infinite number of reports.)
+//
+// TODO(juliatuttle): Consider capping the maximum number of reports per
+// delivery attempt.
+class NET_EXPORT ReportingDeliveryAgent {
+ public:
+  // |context| must outlive the ReportingDeliveryAgent.
+  ReportingDeliveryAgent(ReportingContext* context);
+  ~ReportingDeliveryAgent();
+
+  // Tries to deliver all of the reports in the cache. Reports that are already
+  // being delivered will not be attempted a second time, and reports that do
+  // not have a viable endpoint will be neither attempted nor removed.
+  void SendReports();
+
+ private:
+  class Delivery;
+
+  using OriginGroup = std::pair<url::Origin, std::string>;
+
+  void OnUploadComplete(const std::unique_ptr<Delivery>& delivery,
+                        ReportingUploader::Outcome outcome);
+
+  base::TickClock* tick_clock() { return context_->tick_clock(); }
+  ReportingCache* cache() { return context_->cache(); }
+  ReportingUploader* uploader() { return context_->uploader(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return context_->endpoint_manager();
+  }
+
+  ReportingContext* context_;
+
+  // Tracks OriginGroup tuples for which there is a pending delivery running.
+  // (Would be an unordered_set, but there's no hash on pair.)
+  std::set<OriginGroup> pending_origin_groups_;
+
+  base::WeakPtrFactory<ReportingDeliveryAgent> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingDeliveryAgent);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_DELIVERY_AGENT_H_
diff --git a/src/net/reporting/reporting_delivery_agent_unittest.cc b/src/net/reporting/reporting_delivery_agent_unittest.cc
new file mode 100644
index 0000000..d62f97c
--- /dev/null
+++ b/src/net/reporting/reporting_delivery_agent_unittest.cc
@@ -0,0 +1,318 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_delivery_agent.h"
+
+#include <vector>
+
+#include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "base/test/values_test_util.h"
+#include "base/time/time.h"
+#include "base/values.h"
+#include "net/base/backoff_entry.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_test_util.h"
+#include "net/reporting/reporting_uploader.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace net {
+namespace {
+
+class ReportingDeliveryAgentTest : public ReportingTestBase {
+ protected:
+  ReportingDeliveryAgentTest() {
+    ReportingPolicy policy;
+    policy.endpoint_backoff_policy.num_errors_to_ignore = 0;
+    policy.endpoint_backoff_policy.initial_delay_ms = 60000;
+    policy.endpoint_backoff_policy.multiply_factor = 2.0;
+    policy.endpoint_backoff_policy.jitter_factor = 0.0;
+    policy.endpoint_backoff_policy.maximum_backoff_ms = -1;
+    policy.endpoint_backoff_policy.entry_lifetime_ms = 0;
+    policy.endpoint_backoff_policy.always_use_initial_delay = false;
+    UsePolicy(policy);
+  }
+
+  base::TimeTicks tomorrow() {
+    return tick_clock()->NowTicks() + base::TimeDelta::FromDays(1);
+  }
+
+  const std::vector<std::unique_ptr<TestReportingUploader::PendingUpload>>&
+  pending_uploads() {
+    return uploader()->pending_uploads();
+  }
+
+  const GURL kUrl_ = GURL("https://origin/path");
+  const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
+  const GURL kEndpoint_ = GURL("https://endpoint/");
+  const std::string kGroup_ = "group";
+  const std::string kType_ = "type";
+};
+
+TEST_F(ReportingDeliveryAgentTest, SuccessfulUpload) {
+  static const int kAgeMillis = 12345;
+
+  base::DictionaryValue body;
+  body.SetString("key", "value");
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_, body.CreateDeepCopy(),
+                     tick_clock()->NowTicks(), 0);
+
+  tick_clock()->Advance(base::TimeDelta::FromMilliseconds(kAgeMillis));
+
+  delivery_agent()->SendReports();
+
+  ASSERT_EQ(1u, pending_uploads().size());
+  EXPECT_EQ(kEndpoint_, pending_uploads()[0]->url());
+  {
+    auto value = pending_uploads()[0]->GetValue();
+
+    base::ListValue* list;
+    ASSERT_TRUE(value->GetAsList(&list));
+    EXPECT_EQ(1u, list->GetSize());
+
+    base::DictionaryValue* report;
+    ASSERT_TRUE(list->GetDictionary(0, &report));
+    EXPECT_EQ(4u, report->size());
+
+    ExpectDictIntegerValue(kAgeMillis, *report, "age");
+    ExpectDictStringValue(kType_, *report, "type");
+    ExpectDictStringValue(kUrl_.spec(), *report, "url");
+    ExpectDictDictionaryValue(body, *report, "report");
+  }
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+
+  // Successful upload should remove delivered reports.
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  EXPECT_TRUE(reports.empty());
+
+  // TODO(juliatuttle): Check that BackoffEntry was informed of success.
+}
+
+TEST_F(ReportingDeliveryAgentTest, FailedUpload) {
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+
+  ASSERT_EQ(1u, pending_uploads().size());
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::FAILURE);
+
+  // Failed upload should increment reports' attempts.
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(1, reports[0]->attempts);
+
+  // Since endpoint is now failing, an upload won't be started despite a pending
+  // report.
+  ASSERT_TRUE(pending_uploads().empty());
+  delivery_agent()->SendReports();
+  EXPECT_TRUE(pending_uploads().empty());
+}
+
+TEST_F(ReportingDeliveryAgentTest, RemoveEndpointUpload) {
+  static const url::Origin kDifferentOrigin(GURL("https://origin2/"));
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  ASSERT_TRUE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+  ASSERT_TRUE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+
+  ASSERT_EQ(1u, pending_uploads().size());
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::REMOVE_ENDPOINT);
+
+  // "Remove endpoint" upload should remove endpoint from *all* origins and
+  // increment reports' attempts.
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(1, reports[0]->attempts);
+
+  EXPECT_FALSE(FindClientInCache(cache(), kOrigin_, kEndpoint_));
+  EXPECT_FALSE(FindClientInCache(cache(), kDifferentOrigin, kEndpoint_));
+
+  // Since endpoint is now failing, an upload won't be started despite a pending
+  // report.
+  delivery_agent()->SendReports();
+  EXPECT_TRUE(pending_uploads().empty());
+}
+
+TEST_F(ReportingDeliveryAgentTest, ConcurrentRemove) {
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  // Remove the report while the upload is running.
+  std::vector<const ReportingReport*> reports;
+  cache()->GetReports(&reports);
+  EXPECT_EQ(1u, reports.size());
+
+  const ReportingReport* report = reports[0];
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
+
+  // Report should appear removed, even though the cache has doomed it.
+  cache()->RemoveReports(reports);
+  cache()->GetReports(&reports);
+  EXPECT_TRUE(reports.empty());
+  EXPECT_TRUE(cache()->IsReportDoomedForTesting(report));
+
+  // Completing upload shouldn't crash, and report should still be gone.
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  cache()->GetReports(&reports);
+  EXPECT_TRUE(reports.empty());
+  // This is slightly sketchy since |report| has been freed, but it nonetheless
+  // should not be in the set of doomed reports.
+  EXPECT_FALSE(cache()->IsReportDoomedForTesting(report));
+}
+
+// Test that the agent will combine reports destined for the same endpoint, even
+// if the reports are from different origins.
+TEST_F(ReportingDeliveryAgentTest,
+       BatchReportsFromDifferentOriginsToSameEndpoint) {
+  static const GURL kDifferentUrl("https://origin2/path");
+  static const url::Origin kDifferentOrigin(kDifferentUrl);
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+}
+
+// Test that the agent won't start a second upload to the same endpoint (even
+// for a different origin) while one is pending, but will once it is no longer
+// pending.
+TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToEndpoint) {
+  static const GURL kDifferentUrl("https://origin2/path");
+  static const url::Origin kDifferentOrigin(kDifferentUrl);
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kDifferentOrigin, kEndpoint_,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  EXPECT_EQ(1u, pending_uploads().size());
+
+  cache()->AddReport(kDifferentUrl, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+}
+
+// Test that the agent won't start a second upload for an (origin, group) while
+// one is pending, even if a different endpoint is available, but will once the
+// original delivery is complete and the (origin, group) is no longer pending.
+TEST_F(ReportingDeliveryAgentTest, SerializeUploadsToGroup) {
+  static const GURL kDifferentEndpoint("https://endpoint2/");
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kDifferentEndpoint,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  EXPECT_EQ(1u, pending_uploads().size());
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(1u, pending_uploads().size());
+
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+}
+
+// Tests that the agent will start parallel uploads to different groups within
+// the same origin.
+TEST_F(ReportingDeliveryAgentTest, ParallelizeUploadsAcrossGroups) {
+  static const GURL kDifferentEndpoint("https://endpoint2/");
+  static const std::string kDifferentGroup("group2");
+
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kDifferentEndpoint,
+                     ReportingClient::Subdomains::EXCLUDE, kDifferentGroup,
+                     tomorrow());
+
+  cache()->AddReport(kUrl_, kGroup_, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+  cache()->AddReport(kUrl_, kDifferentGroup, kType_,
+                     base::MakeUnique<base::DictionaryValue>(),
+                     tick_clock()->NowTicks(), 0);
+
+  delivery_agent()->SendReports();
+  ASSERT_EQ(2u, pending_uploads().size());
+
+  pending_uploads()[1]->Complete(ReportingUploader::Outcome::SUCCESS);
+  pending_uploads()[0]->Complete(ReportingUploader::Outcome::SUCCESS);
+  EXPECT_EQ(0u, pending_uploads().size());
+}
+
+}  // namespace
+}  // namespace net
diff --git a/src/net/reporting/reporting_endpoint_manager.cc b/src/net/reporting/reporting_endpoint_manager.cc
index 6333a9a..3d533da 100644
--- a/src/net/reporting/reporting_endpoint_manager.cc
+++ b/src/net/reporting/reporting_endpoint_manager.cc
@@ -15,16 +15,14 @@
 #include "net/base/backoff_entry.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_policy.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace net {
 
-ReportingEndpointManager::ReportingEndpointManager(
-    base::TickClock* clock,
-    const ReportingCache* cache,
-    const BackoffEntry::Policy* backoff_policy)
-    : clock_(clock), cache_(cache), backoff_policy_(backoff_policy) {}
+ReportingEndpointManager::ReportingEndpointManager(ReportingContext* context)
+    : context_(context) {}
 
 ReportingEndpointManager::~ReportingEndpointManager() {}
 
@@ -33,11 +31,11 @@
     const std::string& group,
     GURL* endpoint_url_out) {
   std::vector<const ReportingClient*> clients;
-  cache_->GetClientsForOriginAndGroup(origin, group, &clients);
+  cache()->GetClientsForOriginAndGroup(origin, group, &clients);
 
   // Filter out expired, pending, and backed-off endpoints.
   std::vector<const ReportingClient*> available_clients;
-  base::TimeTicks now = clock_->NowTicks();
+  base::TimeTicks now = tick_clock()->NowTicks();
   for (const ReportingClient* client : clients) {
     if (client->expires < now)
       continue;
@@ -73,8 +71,8 @@
 void ReportingEndpointManager::InformOfEndpointRequest(const GURL& endpoint,
                                                        bool succeeded) {
   if (!base::ContainsKey(endpoint_backoff_, endpoint)) {
-    endpoint_backoff_[endpoint] =
-        base::MakeUnique<BackoffEntry>(backoff_policy_, clock_);
+    endpoint_backoff_[endpoint] = base::MakeUnique<BackoffEntry>(
+        &policy().endpoint_backoff_policy, tick_clock());
   }
   endpoint_backoff_[endpoint]->InformOfRequest(succeeded);
 }
diff --git a/src/net/reporting/reporting_endpoint_manager.h b/src/net/reporting/reporting_endpoint_manager.h
index c550d5e..e3cc827 100644
--- a/src/net/reporting/reporting_endpoint_manager.h
+++ b/src/net/reporting/reporting_endpoint_manager.h
@@ -11,8 +11,10 @@
 #include <string>
 
 #include "base/macros.h"
+#include "base/time/tick_clock.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/net_export.h"
+#include "net/reporting/reporting_context.h"
 
 class GURL;
 
@@ -27,16 +29,15 @@
 namespace net {
 
 class ReportingCache;
+struct ReportingPolicy;
 
 // Keeps track of which endpoints are pending (have active delivery attempts to
 // them) or in exponential backoff after one or more failures, and chooses an
 // endpoint from an endpoint group to receive reports for an origin.
 class NET_EXPORT ReportingEndpointManager {
  public:
-  // Note: All three parameters must outlive the endpoint manager.
-  ReportingEndpointManager(base::TickClock* clock,
-                           const ReportingCache* cache,
-                           const BackoffEntry::Policy* backoff_policy);
+  // |context| must outlive the ReportingEndpointManager.
+  ReportingEndpointManager(ReportingContext* context);
   ~ReportingEndpointManager();
 
   // Finds an endpoint configured by |origin| in group |group| that is not
@@ -64,9 +65,11 @@
   void InformOfEndpointRequest(const GURL& endpoint, bool succeeded);
 
  private:
-  base::TickClock* clock_;
-  const ReportingCache* cache_;
-  const BackoffEntry::Policy* backoff_policy_;
+  const ReportingPolicy& policy() { return context_->policy(); }
+  base::TickClock* tick_clock() { return context_->tick_clock(); }
+  ReportingCache* cache() { return context_->cache(); }
+
+  ReportingContext* context_;
 
   std::set<GURL> pending_endpoints_;
   std::map<GURL, std::unique_ptr<net::BackoffEntry>> endpoint_backoff_;
diff --git a/src/net/reporting/reporting_endpoint_manager_unittest.cc b/src/net/reporting/reporting_endpoint_manager_unittest.cc
index f1d5003..113128d 100644
--- a/src/net/reporting/reporting_endpoint_manager_unittest.cc
+++ b/src/net/reporting/reporting_endpoint_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "net/base/backoff_entry.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_policy.h"
 #include "net/reporting/reporting_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -19,175 +20,150 @@
 namespace net {
 namespace {
 
-class ReportingEndpointManagerTest : public ::testing::Test {
+class ReportingEndpointManagerTest : public ReportingTestBase {
  protected:
-  ReportingEndpointManagerTest()
-      : manager_(&clock_, &cache_, &backoff_policy_) {
-    backoff_policy_.num_errors_to_ignore = 0;
-    backoff_policy_.initial_delay_ms = 60000;
-    backoff_policy_.multiply_factor = 2.0;
-    backoff_policy_.jitter_factor = 0.0;
-    backoff_policy_.maximum_backoff_ms = -1;
-    backoff_policy_.entry_lifetime_ms = 0;
-    backoff_policy_.always_use_initial_delay = false;
-  }
-
-  base::TimeTicks yesterday() {
-    return clock_.NowTicks() - base::TimeDelta::FromDays(1);
-  }
-
-  base::TimeTicks tomorrow() {
-    return clock_.NowTicks() + base::TimeDelta::FromDays(1);
-  }
-
   const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
   const GURL kEndpoint_ = GURL("https://endpoint/");
   const std::string kGroup_ = "group";
-
-  base::SimpleTestTickClock clock_;
-  ReportingCache cache_;
-  BackoffEntry::Policy backoff_policy_;
-  ReportingEndpointManager manager_;
 };
 
 TEST_F(ReportingEndpointManagerTest, NoEndpoint) {
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 }
 
 TEST_F(ReportingEndpointManagerTest, Endpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 }
 
 TEST_F(ReportingEndpointManagerTest, ExpiredEndpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, yesterday());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, yesterday());
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 }
 
 TEST_F(ReportingEndpointManagerTest, PendingEndpoint) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
 
-  manager_.SetEndpointPending(kEndpoint_);
+  endpoint_manager()->SetEndpointPending(kEndpoint_);
 
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  manager_.ClearEndpointPending(kEndpoint_);
+  endpoint_manager()->ClearEndpointPending(kEndpoint_);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 }
 
 TEST_F(ReportingEndpointManagerTest, BackedOffEndpoint) {
-  ASSERT_EQ(2.0, backoff_policy_.multiply_factor);
+  ASSERT_EQ(2.0, policy().endpoint_backoff_policy.multiply_factor);
 
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  base::TimeDelta initial_delay = base::TimeDelta::FromMilliseconds(
+      policy().endpoint_backoff_policy.initial_delay_ms);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_, tomorrow());
+
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
   // After one failure, endpoint is in exponential backoff.
   GURL endpoint_url;
-  bool found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
   // After initial delay, endpoint is usable again.
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
   // After a second failure, endpoint is backed off again.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
   // Next backoff is longer -- 2x the first -- so endpoint isn't usable yet.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
   // After 2x the initial delay, the endpoint is usable again.
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
   EXPECT_EQ(kEndpoint_, endpoint_url);
 
-  manager_.InformOfEndpointRequest(kEndpoint_, true);
-  manager_.InformOfEndpointRequest(kEndpoint_, true);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true);
 
   // Two more successful requests should reset the backoff to the initial delay
   // again.
-  manager_.InformOfEndpointRequest(kEndpoint_, false);
+  endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_FALSE(found_endpoint);
 
-  clock_.Advance(
-      base::TimeDelta::FromMilliseconds(backoff_policy_.initial_delay_ms));
+  tick_clock()->Advance(initial_delay);
 
-  found_endpoint =
-      manager_.FindEndpointForOriginAndGroup(kOrigin_, kGroup_, &endpoint_url);
+  found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
+      kOrigin_, kGroup_, &endpoint_url);
   EXPECT_TRUE(found_endpoint);
 }
 
 // Make sure that multiple endpoints will all be returned at some point, to
 // avoid accidentally or intentionally implementing any priority ordering.
 TEST_F(ReportingEndpointManagerTest, RandomEndpoint) {
-  static const GURL kEndpoint1("https://endpoint1/");
-  static const GURL kEndpoint2("https://endpoint2/");
+  static const GURL kEndpoint_1("https://endpoint1/");
+  static const GURL kEndpoint_2("https://endpoint2/");
   static const int kMaxAttempts = 20;
 
-  cache_.SetClient(kOrigin_, kEndpoint1, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
-  cache_.SetClient(kOrigin_, kEndpoint2, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_1,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
+  cache()->SetClient(kOrigin_, kEndpoint_2,
+                     ReportingClient::Subdomains::EXCLUDE, kGroup_, tomorrow());
 
   bool endpoint1_seen = false;
   bool endpoint2_seen = false;
 
   for (int i = 0; i < kMaxAttempts; i++) {
     GURL endpoint_url;
-    bool found_endpoint = manager_.FindEndpointForOriginAndGroup(
+    bool found_endpoint = endpoint_manager()->FindEndpointForOriginAndGroup(
         kOrigin_, kGroup_, &endpoint_url);
     ASSERT_TRUE(found_endpoint);
-    ASSERT_TRUE(endpoint_url == kEndpoint1 || endpoint_url == kEndpoint2);
+    ASSERT_TRUE(endpoint_url == kEndpoint_1 || endpoint_url == kEndpoint_2);
 
-    if (endpoint_url == kEndpoint1)
+    if (endpoint_url == kEndpoint_1)
       endpoint1_seen = true;
-    else if (endpoint_url == kEndpoint2)
+    else if (endpoint_url == kEndpoint_2)
       endpoint2_seen = true;
 
     if (endpoint1_seen && endpoint2_seen)
diff --git a/src/net/reporting/reporting_header_parser.cc b/src/net/reporting/reporting_header_parser.cc
index 2bf6ddc..8dbcb8e 100644
--- a/src/net/reporting/reporting_header_parser.cc
+++ b/src/net/reporting/reporting_header_parser.cc
@@ -8,11 +8,11 @@
 
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/reporting/reporting_cache.h"
-#include "url/gurl.h"
-#include "url/origin.h"
+#include "net/reporting/reporting_context.h"
 
 namespace net {
 
@@ -27,8 +27,7 @@
 }  // namespace
 
 // static
-void ReportingHeaderParser::ParseHeader(ReportingCache* cache,
-                                        base::TimeTicks now,
+void ReportingHeaderParser::ParseHeader(ReportingContext* context,
                                         const GURL& url,
                                         const std::string& json_value) {
   DCHECK(url.SchemeIsCryptographic());
@@ -42,6 +41,8 @@
   bool is_list = value->GetAsList(&list);
   DCHECK(is_list);
 
+  ReportingCache* cache = context->cache();
+  base::TimeTicks now = context->tick_clock()->NowTicks();
   for (size_t i = 0; i < list->GetSize(); i++) {
     const base::Value* endpoint = nullptr;
     bool got_endpoint = list->Get(i, &endpoint);
diff --git a/src/net/reporting/reporting_header_parser.h b/src/net/reporting/reporting_header_parser.h
index 22fe4f3..2d7ac6e 100644
--- a/src/net/reporting/reporting_header_parser.h
+++ b/src/net/reporting/reporting_header_parser.h
@@ -20,16 +20,11 @@
 namespace net {
 
 class ReportingCache;
+class ReportingContext;
 
-// Parses Report-To headers and writes the endpoint configurations to the
-// ReportingCache.
 class NET_EXPORT ReportingHeaderParser {
  public:
-  // Parses the normalized Report-To header value |json_value| sent in response
-  // to a request for |url| at |now|, and applies the endpoint configurations
-  // to |cache|.
-  static void ParseHeader(ReportingCache* cache,
-                          base::TimeTicks now,
+  static void ParseHeader(ReportingContext* context,
                           const GURL& url,
                           const std::string& json_value);
 
diff --git a/src/net/reporting/reporting_header_parser_unittest.cc b/src/net/reporting/reporting_header_parser_unittest.cc
index a4f70e2..69210f2 100644
--- a/src/net/reporting/reporting_header_parser_unittest.cc
+++ b/src/net/reporting/reporting_header_parser_unittest.cc
@@ -21,21 +21,13 @@
 namespace net {
 namespace {
 
-class ReportingHeaderParserTest : public ::testing::Test {
+class ReportingHeaderParserTest : public ReportingTestBase {
  protected:
-  void ParseHeader(const GURL& url, const std::string& header_value) {
-    ReportingHeaderParser::ParseHeader(&cache_, clock_.NowTicks(), url,
-                                       header_value);
-  }
-
   const GURL kUrl_ = GURL("https://origin/path");
   const url::Origin kOrigin_ = url::Origin(GURL("https://origin/"));
   const GURL kEndpoint_ = GURL("https://endpoint/");
   const std::string kGroup_ = "group";
   const std::string kType_ = "type";
-
-  base::SimpleTestTickClock clock_;
-  ReportingCache cache_;
 };
 
 TEST_F(ReportingHeaderParserTest, Invalid) {
@@ -64,10 +56,11 @@
 
   for (size_t i = 0; i < arraysize(kInvalidHeaderTestCases); ++i) {
     auto& test_case = kInvalidHeaderTestCases[i];
-    ParseHeader(kUrl_, test_case.header_value);
+    ReportingHeaderParser::ParseHeader(context(), kUrl_,
+                                       test_case.header_value);
 
     std::vector<const ReportingClient*> clients;
-    cache_.GetClients(&clients);
+    cache()->GetClients(&clients);
     EXPECT_TRUE(clients.empty())
         << "Invalid Report-To header (" << test_case.description << ": \""
         << test_case.header_value << "\") parsed as valid.";
@@ -75,36 +68,41 @@
 }
 
 TEST_F(ReportingHeaderParserTest, Valid) {
-  ParseHeader(kUrl_,
-              "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":86400}");
+  ReportingHeaderParser::ParseHeader(
+      context(), kUrl_,
+      "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":86400}");
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin_, kEndpoint_);
+      FindClientInCache(cache(), kOrigin_, kEndpoint_);
   ASSERT_TRUE(client);
   EXPECT_EQ(kOrigin_, client->origin);
   EXPECT_EQ(kEndpoint_, client->endpoint);
   EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains);
-  EXPECT_EQ(86400, (client->expires - clock_.NowTicks()).InSeconds());
+  EXPECT_EQ(86400, (client->expires - tick_clock()->NowTicks()).InSeconds());
 }
 
 TEST_F(ReportingHeaderParserTest, Subdomains) {
-  ParseHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() +
-                         "\",\"max-age\":86400,"
-                         "\"includeSubdomains\":true}");
+  ReportingHeaderParser::ParseHeader(context(), kUrl_,
+                                     "{\"url\":\"" + kEndpoint_.spec() +
+                                         "\",\"max-age\":86400,"
+                                         "\"includeSubdomains\":true}");
 
   const ReportingClient* client =
-      FindClientInCache(&cache_, kOrigin_, kEndpoint_);
+      FindClientInCache(cache(), kOrigin_, kEndpoint_);
   ASSERT_TRUE(client);
   EXPECT_EQ(ReportingClient::Subdomains::INCLUDE, client->subdomains);
 }
 
 TEST_F(ReportingHeaderParserTest, ZeroMaxAge) {
-  cache_.SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
-                   kGroup_, clock_.NowTicks() + base::TimeDelta::FromDays(1));
+  cache()->SetClient(kOrigin_, kEndpoint_, ReportingClient::Subdomains::EXCLUDE,
+                     kGroup_,
+                     tick_clock()->NowTicks() + base::TimeDelta::FromDays(1));
 
-  ParseHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":0}");
+  ReportingHeaderParser::ParseHeader(
+      context(), kUrl_,
+      "{\"url\":\"" + kEndpoint_.spec() + "\",\"max-age\":0}");
 
-  EXPECT_EQ(nullptr, FindClientInCache(&cache_, kOrigin_, kEndpoint_));
+  EXPECT_EQ(nullptr, FindClientInCache(cache(), kOrigin_, kEndpoint_));
 }
 
 }  // namespace
diff --git a/src/net/reporting/reporting_observer.cc b/src/net/reporting/reporting_observer.cc
new file mode 100644
index 0000000..5e8d778
--- /dev/null
+++ b/src/net/reporting/reporting_observer.cc
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_observer.h"
+
+namespace net {
+
+void ReportingObserver::OnCacheUpdated() {}
+
+ReportingObserver::ReportingObserver() {}
+
+ReportingObserver::~ReportingObserver() {}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_observer.h b/src/net/reporting/reporting_observer.h
new file mode 100644
index 0000000..fe2ab5c
--- /dev/null
+++ b/src/net/reporting/reporting_observer.h
@@ -0,0 +1,27 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_OBSERVER_H_
+#define NET_REPORTING_REPORTING_OBSERVER_H_
+
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+class NET_EXPORT ReportingObserver {
+ public:
+  virtual void OnCacheUpdated();
+
+ protected:
+  ReportingObserver();
+
+  ~ReportingObserver();
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingObserver);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_OBSERVER_H_
diff --git a/src/net/reporting/reporting_policy.cc b/src/net/reporting/reporting_policy.cc
new file mode 100644
index 0000000..6d36f84
--- /dev/null
+++ b/src/net/reporting/reporting_policy.cc
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_policy.h"
+
+namespace net {
+
+ReportingPolicy::ReportingPolicy() {
+  endpoint_backoff_policy.num_errors_to_ignore = 0;
+  endpoint_backoff_policy.initial_delay_ms = 60 * 1000;  // 1 minute
+  endpoint_backoff_policy.multiply_factor = 2.0;
+  endpoint_backoff_policy.jitter_factor = 0.1;
+  endpoint_backoff_policy.maximum_backoff_ms = -1;  // 1 hour
+  endpoint_backoff_policy.entry_lifetime_ms = -1;   // infinite
+  endpoint_backoff_policy.always_use_initial_delay = false;
+}
+
+ReportingPolicy::ReportingPolicy(const ReportingPolicy& other)
+    : endpoint_backoff_policy(other.endpoint_backoff_policy) {}
+
+ReportingPolicy::~ReportingPolicy() {}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_policy.h b/src/net/reporting/reporting_policy.h
new file mode 100644
index 0000000..5f472d7
--- /dev/null
+++ b/src/net/reporting/reporting_policy.h
@@ -0,0 +1,27 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_POLICY_H_
+#define NET_REPORTING_REPORTING_POLICY_H_
+
+#include "base/time/time.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+// Various policy knobs for the Reporting system.
+struct NET_EXPORT ReportingPolicy {
+  // Provides a reasonable default for use in a browser embedder.
+  ReportingPolicy();
+  ReportingPolicy(const ReportingPolicy& other);
+  ~ReportingPolicy();
+
+  // Backoff policy for failing endpoints.
+  BackoffEntry::Policy endpoint_backoff_policy;
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_POLICY_H_
diff --git a/src/net/reporting/reporting_report.h b/src/net/reporting/reporting_report.h
index 9739354..b1b3101 100644
--- a/src/net/reporting/reporting_report.h
+++ b/src/net/reporting/reporting_report.h
@@ -29,23 +29,26 @@
                   int attempts);
   ~ReportingReport();
 
-  // The URL of the document that triggered the report.
+  // The URL of the document that triggered the report. (Included in the
+  // delivered report.)
   GURL url;
 
-  // The endpoint group that should be used to deliver the report.
+  // The endpoint group that should be used to deliver the report. (Not included
+  // in the delivered report.)
   std::string group;
 
-  // The type of the report.
+  // The type of the report. (Included in the delivered report.)
   std::string type;
 
-  // The body of the report.
+  // The body of the report. (Included in the delivered report.)
   std::unique_ptr<const base::Value> body;
 
-  // When the report was queued.
+  // When the report was queued. (Included in the delivered report as an age
+  // relative to the time of the delivery attempt.)
   base::TimeTicks queued;
 
   // The number of delivery attempts made so far, not including an active
-  // attempt.
+  // attempt. (Not included in the delivered report.)
   int attempts = 0;
 
  private:
diff --git a/src/net/reporting/reporting_service.cc b/src/net/reporting/reporting_service.cc
new file mode 100644
index 0000000..128c510
--- /dev/null
+++ b/src/net/reporting/reporting_service.cc
@@ -0,0 +1,70 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_service.h"
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "base/values.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_header_parser.h"
+#include "url/gurl.h"
+
+namespace net {
+
+namespace {
+
+class ReportingServiceImpl : public ReportingService {
+ public:
+  ReportingServiceImpl(std::unique_ptr<ReportingContext> context)
+      : context_(std::move(context)) {}
+
+  ~ReportingServiceImpl() override {}
+
+  void QueueReport(const GURL& url,
+                   const std::string& group,
+                   const std::string& type,
+                   std::unique_ptr<const base::Value> body) override {
+    context_->cache()->AddReport(url, group, type, std::move(body),
+                                 context_->tick_clock()->NowTicks(), 0);
+  }
+
+  void ProcessHeader(const GURL& url,
+                     const std::string& header_value) override {
+    ReportingHeaderParser::ParseHeader(context_.get(), url, header_value);
+  }
+
+ private:
+  std::unique_ptr<ReportingContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingServiceImpl);
+};
+
+}  // namespace
+
+ReportingService::~ReportingService() {}
+
+// static
+std::unique_ptr<ReportingService> ReportingService::Create(
+    const ReportingPolicy& policy,
+    URLRequestContext* request_context,
+    std::unique_ptr<ReportingDelegate> delegate) {
+  return base::MakeUnique<ReportingServiceImpl>(
+      ReportingContext::Create(policy, std::move(delegate), request_context));
+}
+
+// static
+std::unique_ptr<ReportingService> ReportingService::CreateForTesting(
+    std::unique_ptr<ReportingContext> reporting_context) {
+  return base::MakeUnique<ReportingServiceImpl>(std::move(reporting_context));
+}
+
+}  // namespace net
diff --git a/src/net/reporting/reporting_service.h b/src/net/reporting/reporting_service.h
new file mode 100644
index 0000000..c305410
--- /dev/null
+++ b/src/net/reporting/reporting_service.h
@@ -0,0 +1,74 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_SERVICE_H_
+#define NET_REPORTING_REPORTING_SERVICE_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+class GURL;
+
+namespace base {
+class Value;
+}  // namespace
+
+namespace net {
+
+class ReportingContext;
+class ReportingDelegate;
+struct ReportingPolicy;
+class URLRequestContext;
+
+// The external interface to the Reporting system, used by the embedder of //net
+// and also other parts of //net.
+class NET_EXPORT ReportingService {
+ public:
+  virtual ~ReportingService();
+
+  // Creates a ReportingService. |policy| will be copied. |request_context| must
+  // outlive the ReportingService. The ReportingService will take ownership of
+  // |delegate| and destroy it when the service is destroyed.
+  static std::unique_ptr<ReportingService> Create(
+      const ReportingPolicy& policy,
+      URLRequestContext* request_context,
+      std::unique_ptr<ReportingDelegate> delegate);
+
+  // Creates a ReportingService for testing purposes using an
+  // already-constructed ReportingContext. The ReportingService will take
+  // ownership of |reporting_context| and destroy it when the service is
+  // destroyed.
+  static std::unique_ptr<ReportingService> CreateForTesting(
+      std::unique_ptr<ReportingContext> reporting_context);
+
+  // Queues a report for delivery. |url| is the URL that originated the report.
+  // |group| is the endpoint group to which the report should be delivered.
+  // |type| is the type of the report. |body| is the body of the report.
+  //
+  // The Reporting system will take ownership of |body|; all other parameters
+  // will be copied.
+  virtual void QueueReport(const GURL& url,
+                           const std::string& group,
+                           const std::string& type,
+                           std::unique_ptr<const base::Value> body) = 0;
+
+  // Processes a Report-To header. |url| is the URL that originated the header;
+  // |header_value| is the normalized value of the Report-To header.
+  virtual void ProcessHeader(const GURL& url,
+                             const std::string& header_value) = 0;
+
+ protected:
+  ReportingService() {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ReportingService);
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_SERVICE_H_
diff --git a/src/net/reporting/reporting_service_unittest.cc b/src/net/reporting/reporting_service_unittest.cc
new file mode 100644
index 0000000..20c8656
--- /dev/null
+++ b/src/net/reporting/reporting_service_unittest.cc
@@ -0,0 +1,78 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_service.h"
+
+#include <memory>
+#include <string>
+
+#include "base/memory/ptr_util.h"
+#include "base/time/tick_clock.h"
+#include "base/values.h"
+#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_policy.h"
+#include "net/reporting/reporting_report.h"
+#include "net/reporting/reporting_service.h"
+#include "net/reporting/reporting_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace {
+
+class ReportingServiceTest : public ::testing::Test {
+ protected:
+  const GURL kUrl_ = GURL("https://origin/path");
+  const url::Origin kOrigin_ = url::Origin(kUrl_);
+  const GURL kEndpoint_ = GURL("https://endpoint/");
+  const std::string kGroup_ = "group";
+  const std::string kType_ = "type";
+
+  ReportingServiceTest()
+      : context_(new TestReportingContext(ReportingPolicy())),
+        service_(
+            ReportingService::CreateForTesting(base::WrapUnique(context_))) {}
+
+  TestReportingContext* context() { return context_; }
+  ReportingService* service() { return service_.get(); }
+
+ private:
+  TestReportingContext* context_;
+  std::unique_ptr<ReportingService> service_;
+};
+
+TEST_F(ReportingServiceTest, QueueReport) {
+  service()->QueueReport(kUrl_, kGroup_, kType_,
+                         base::MakeUnique<base::DictionaryValue>());
+
+  std::vector<const ReportingReport*> reports;
+  context()->cache()->GetReports(&reports);
+  ASSERT_EQ(1u, reports.size());
+  EXPECT_EQ(kUrl_, reports[0]->url);
+  EXPECT_EQ(kGroup_, reports[0]->group);
+  EXPECT_EQ(kType_, reports[0]->type);
+}
+
+TEST_F(ReportingServiceTest, ProcessHeader) {
+  service()->ProcessHeader(kUrl_, "{\"url\":\"" + kEndpoint_.spec() +
+                                      "\","
+                                      "\"group\":\"" +
+                                      kGroup_ +
+                                      "\","
+                                      "\"max-age\":86400}");
+
+  const ReportingClient* client =
+      FindClientInCache(context()->cache(), kOrigin_, kEndpoint_);
+  ASSERT_TRUE(client != nullptr);
+  EXPECT_EQ(kOrigin_, client->origin);
+  EXPECT_EQ(kEndpoint_, client->endpoint);
+  EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains);
+  EXPECT_EQ(kGroup_, client->group);
+  EXPECT_EQ(context()->tick_clock()->NowTicks() + base::TimeDelta::FromDays(1),
+            client->expires);
+}
+
+}  // namespace
+}  // namespace net
diff --git a/src/net/reporting/reporting_test_util.cc b/src/net/reporting/reporting_test_util.cc
index 5f59c44..946e1e0 100644
--- a/src/net/reporting/reporting_test_util.cc
+++ b/src/net/reporting/reporting_test_util.cc
@@ -4,15 +4,77 @@
 
 #include "net/reporting/reporting_test_util.h"
 
+#include <memory>
+#include <string>
 #include <vector>
 
+#include "base/bind.h"
+#include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_clock.h"
+#include "base/test/simple_test_tick_clock.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_policy.h"
+#include "net/reporting/reporting_uploader.h"
+#include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace net {
 
+namespace {
+
+class PendingUploadImpl : public TestReportingUploader::PendingUpload {
+ public:
+  PendingUploadImpl(
+      const GURL& url,
+      const std::string& json,
+      const ReportingUploader::Callback& callback,
+      const base::Callback<void(PendingUpload*)>& complete_callback)
+      : url_(url),
+        json_(json),
+        callback_(callback),
+        complete_callback_(complete_callback) {}
+
+  ~PendingUploadImpl() override {}
+
+  // PendingUpload implementationP:
+  const GURL& url() const override { return url_; }
+  const std::string& json() const override { return json_; }
+  std::unique_ptr<base::Value> GetValue() const override {
+    return base::JSONReader::Read(json_);
+  }
+
+  void Complete(ReportingUploader::Outcome outcome) override {
+    callback_.Run(outcome);
+    // Deletes |this|.
+    complete_callback_.Run(this);
+  }
+
+ private:
+  GURL url_;
+  std::string json_;
+  ReportingUploader::Callback callback_;
+  base::Callback<void(PendingUpload*)> complete_callback_;
+};
+
+void ErasePendingUpload(
+    std::vector<std::unique_ptr<TestReportingUploader::PendingUpload>>* uploads,
+    TestReportingUploader::PendingUpload* upload) {
+  for (auto it = uploads->begin(); it != uploads->end(); ++it) {
+    if (it->get() == upload) {
+      uploads->erase(it);
+      return;
+    }
+  }
+  NOTREACHED();
+}
+
+}  // namespace
+
 const ReportingClient* FindClientInCache(const ReportingCache* cache,
                                          const url::Origin& origin,
                                          const GURL& endpoint) {
@@ -25,4 +87,61 @@
   return nullptr;
 }
 
+TestReportingDelegate::TestReportingDelegate() {}
+TestReportingDelegate::~TestReportingDelegate() {}
+
+void TestReportingDelegate::PersistData(
+    std::unique_ptr<const base::Value> persisted_data) {
+  persisted_data_ = std::move(persisted_data);
+}
+
+std::unique_ptr<const base::Value> TestReportingDelegate::GetPersistedData() {
+  if (!persisted_data_)
+    return std::unique_ptr<const base::Value>();
+  return persisted_data_->CreateDeepCopy();
+}
+
+TestReportingUploader::PendingUpload::~PendingUpload() {}
+TestReportingUploader::PendingUpload::PendingUpload() {}
+
+TestReportingUploader::TestReportingUploader() {}
+TestReportingUploader::~TestReportingUploader() {}
+
+void TestReportingUploader::StartUpload(const GURL& url,
+                                        const std::string& json,
+                                        const Callback& callback) {
+  pending_uploads_.push_back(base::MakeUnique<PendingUploadImpl>(
+      url, json, callback, base::Bind(&ErasePendingUpload, &pending_uploads_)));
+}
+
+TestReportingContext::TestReportingContext(const ReportingPolicy& policy)
+    : ReportingContext(policy,
+                       base::MakeUnique<TestReportingDelegate>(),
+                       base::MakeUnique<base::SimpleTestClock>(),
+                       base::MakeUnique<base::SimpleTestTickClock>(),
+                       base::MakeUnique<TestReportingUploader>()) {}
+
+TestReportingContext::~TestReportingContext() {}
+
+ReportingTestBase::ReportingTestBase() {
+  // For tests, disable jitter.
+  ReportingPolicy policy;
+  policy.endpoint_backoff_policy.jitter_factor = 0.0;
+  UsePolicy(policy);
+}
+
+ReportingTestBase::~ReportingTestBase() {}
+
+void ReportingTestBase::UsePolicy(const ReportingPolicy& policy) {
+  context_ = base::MakeUnique<TestReportingContext>(policy);
+}
+
+base::TimeTicks ReportingTestBase::yesterday() {
+  return tick_clock()->NowTicks() - base::TimeDelta::FromDays(1);
+}
+
+base::TimeTicks ReportingTestBase::tomorrow() {
+  return tick_clock()->NowTicks() + base::TimeDelta::FromDays(1);
+}
+
 }  // namespace net
diff --git a/src/net/reporting/reporting_test_util.h b/src/net/reporting/reporting_test_util.h
index bb279eb..9aeaa2e 100644
--- a/src/net/reporting/reporting_test_util.h
+++ b/src/net/reporting/reporting_test_util.h
@@ -5,8 +5,24 @@
 #ifndef NET_REPORTING_REPORTING_TEST_UTIL_H_
 #define NET_REPORTING_REPORTING_TEST_UTIL_H_
 
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "net/reporting/reporting_context.h"
+#include "net/reporting/reporting_delegate.h"
+#include "net/reporting/reporting_uploader.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
 class GURL;
 
+namespace base {
+class SimpleTestClock;
+class SimpleTestTickClock;
+class Value;
+}  // namespace base
+
 namespace url {
 class Origin;
 }  // namespace url
@@ -22,6 +38,122 @@
                                          const url::Origin& origin,
                                          const GURL& endpoint);
 
+// A simple implementation of ReportingDelegate that only persists data in RAM.
+class TestReportingDelegate : public ReportingDelegate {
+ public:
+  TestReportingDelegate();
+
+  ~TestReportingDelegate() override;
+
+  // ReportingDelegate implementation:
+  std::unique_ptr<const base::Value> GetPersistedData() override;
+
+  void PersistData(std::unique_ptr<const base::Value> persisted_data) override;
+
+ private:
+  std::unique_ptr<const base::Value> persisted_data_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestReportingDelegate);
+};
+
+// A test implementation of ReportingUploader that holds uploads for tests to
+// examine and complete with a specified outcome.
+class TestReportingUploader : public ReportingUploader {
+ public:
+  class PendingUpload {
+   public:
+    virtual ~PendingUpload();
+
+    virtual const GURL& url() const = 0;
+    virtual const std::string& json() const = 0;
+    virtual std::unique_ptr<base::Value> GetValue() const = 0;
+
+    virtual void Complete(Outcome outcome) = 0;
+
+   protected:
+    PendingUpload();
+  };
+
+  TestReportingUploader();
+  ~TestReportingUploader() override;
+
+  const std::vector<std::unique_ptr<PendingUpload>>& pending_uploads() const {
+    return pending_uploads_;
+  }
+
+  // ReportingUploader implementation:
+  void StartUpload(const GURL& url,
+                   const std::string& json,
+                   const Callback& callback) override;
+
+ private:
+  std::vector<std::unique_ptr<PendingUpload>> pending_uploads_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestReportingUploader);
+};
+
+// A test implementation of ReportingContext that uses test versions of
+// ReportingDelegate, Clock, TickClock, and ReportingUploader.
+class TestReportingContext : public ReportingContext {
+ public:
+  TestReportingContext(const ReportingPolicy& policy);
+  ~TestReportingContext();
+
+  TestReportingDelegate* test_delegate() {
+    return reinterpret_cast<TestReportingDelegate*>(delegate());
+  }
+  base::SimpleTestClock* test_clock() {
+    return reinterpret_cast<base::SimpleTestClock*>(clock());
+  }
+  base::SimpleTestTickClock* test_tick_clock() {
+    return reinterpret_cast<base::SimpleTestTickClock*>(tick_clock());
+  }
+  TestReportingUploader* test_uploader() {
+    return reinterpret_cast<TestReportingUploader*>(uploader());
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestReportingContext);
+};
+
+// A unit test base class that provides a TestReportingContext and shorthand
+// getters.
+class ReportingTestBase : public ::testing::Test {
+ protected:
+  ReportingTestBase();
+  ~ReportingTestBase() override;
+
+  void UsePolicy(const ReportingPolicy& policy);
+
+  TestReportingContext* context() { return context_.get(); }
+
+  const ReportingPolicy& policy() { return context_->policy(); }
+
+  TestReportingDelegate* delegate() { return context_->test_delegate(); }
+  base::SimpleTestClock* clock() { return context_->test_clock(); }
+  base::SimpleTestTickClock* tick_clock() {
+    return context_->test_tick_clock();
+  }
+  TestReportingUploader* uploader() { return context_->test_uploader(); }
+
+  ReportingCache* cache() { return context_->cache(); }
+  ReportingEndpointManager* endpoint_manager() {
+    return context_->endpoint_manager();
+  }
+  ReportingDeliveryAgent* delivery_agent() {
+    return context_->delivery_agent();
+  }
+
+  base::TimeTicks yesterday();
+
+  base::TimeTicks tomorrow();
+
+ private:
+  std::unique_ptr<TestReportingContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ReportingTestBase);
+};
+
 }  // namespace net
 
 #endif  // NET_REPORING_REPORTING_TEST_UTIL_H_
diff --git a/src/net/socket/socket_options.cc b/src/net/socket/socket_options.cc
new file mode 100644
index 0000000..fb544eb
--- /dev/null
+++ b/src/net/socket/socket_options.cc
@@ -0,0 +1,81 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/socket/socket_options.h"
+
+#include "build/build_config.h"
+#include "net/base/net_errors.h"
+
+#if defined(OS_POSIX)
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <sys/socket.h>
+#elif defined(OS_WIN)
+#include <winsock2.h>
+#endif
+
+namespace net {
+
+bool SetTCPNoDelay(SocketDescriptor socket, bool no_delay) {
+#if defined(OS_POSIX)
+  int on = no_delay ? 1 : 0;
+#elif defined(OS_WIN)
+  BOOL on = no_delay ? TRUE : FALSE;
+#endif
+  return setsockopt(socket, IPPROTO_TCP, TCP_NODELAY,
+                    reinterpret_cast<const char*>(&on), sizeof(on)) == 0;
+}
+
+int SetReuseAddr(SocketDescriptor fd, bool reuse) {
+// SO_REUSEADDR is useful for server sockets to bind to a recently unbound
+// port. When a socket is closed, the end point changes its state to TIME_WAIT
+// and wait for 2 MSL (maximum segment lifetime) to ensure the remote peer
+// acknowledges its closure. For server sockets, it is usually safe to
+// bind to a TIME_WAIT end point immediately, which is a widely adopted
+// behavior.
+//
+// Note that on *nix, SO_REUSEADDR does not enable the socket (which can be
+// either TCP or UDP) to bind to an end point that is already bound by another
+// socket. To do that one must set SO_REUSEPORT instead. This option is not
+// provided on Linux prior to 3.9.
+//
+// SO_REUSEPORT is provided in MacOS X and iOS.
+#if defined(OS_POSIX)
+  int boolean_value = reuse ? 1 : 0;
+#elif defined(OS_WIN)
+  BOOL boolean_value = reuse ? TRUE : FALSE;
+#endif
+  int rv = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
+                      reinterpret_cast<const char*>(&boolean_value),
+                      sizeof(boolean_value));
+  return rv == -1 ? MapSystemError(errno) : OK;
+}
+
+int SetSocketReceiveBufferSize(SocketDescriptor fd, int32_t size) {
+  int rv = setsockopt(fd, SOL_SOCKET, SO_RCVBUF,
+                      reinterpret_cast<const char*>(&size), sizeof(size));
+#if defined(OS_POSIX)
+  int os_error = errno;
+#elif defined(OS_WIN)
+  int os_error = WSAGetLastError();
+#endif
+  int net_error = (rv == -1) ? MapSystemError(os_error) : OK;
+  DCHECK(!rv) << "Could not set socket receive buffer size: " << net_error;
+  return net_error;
+}
+
+int SetSocketSendBufferSize(SocketDescriptor fd, int32_t size) {
+  int rv = setsockopt(fd, SOL_SOCKET, SO_SNDBUF,
+                      reinterpret_cast<const char*>(&size), sizeof(size));
+#if defined(OS_POSIX)
+  int os_error = errno;
+#elif defined(OS_WIN)
+  int os_error = WSAGetLastError();
+#endif
+  int net_error = (rv == -1) ? MapSystemError(os_error) : OK;
+  DCHECK(!rv) << "Could not set socket receive buffer size: " << net_error;
+  return net_error;
+}
+
+}  // namespace net
diff --git a/src/net/socket/socket_options.h b/src/net/socket/socket_options.h
new file mode 100644
index 0000000..0f9c537
--- /dev/null
+++ b/src/net/socket/socket_options.h
@@ -0,0 +1,62 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SOCKET_SOCKET_OPTIONS_H_
+#define NET_SOCKET_SOCKET_OPTIONS_H_
+
+#include <stdint.h>
+
+#include "net/base/net_export.h"
+#include "net/socket/socket_descriptor.h"
+
+namespace net {
+
+// This function enables/disables buffering in the kernel. By default, on Linux,
+// TCP sockets will wait up to 200ms for more data to complete a packet before
+// transmitting. After calling this function, the kernel will not wait. See
+// TCP_NODELAY in `man 7 tcp`.
+//
+// For Windows:
+//
+// The Nagle implementation on Windows is governed by RFC 896.  The idea
+// behind Nagle is to reduce small packets on the network.  When Nagle is
+// enabled, if a partial packet has been sent, the TCP stack will disallow
+// further *partial* packets until an ACK has been received from the other
+// side.  Good applications should always strive to send as much data as
+// possible and avoid partial-packet sends.  However, in most real world
+// applications, there are edge cases where this does not happen, and two
+// partial packets may be sent back to back.  For a browser, it is NEVER
+// a benefit to delay for an RTT before the second packet is sent.
+//
+// As a practical example in Chromium today, consider the case of a small
+// POST.  I have verified this:
+//     Client writes 649 bytes of header  (partial packet #1)
+//     Client writes 50 bytes of POST data (partial packet #2)
+// In the above example, with Nagle, a RTT delay is inserted between these
+// two sends due to nagle.  RTTs can easily be 100ms or more.  The best
+// fix is to make sure that for POSTing data, we write as much data as
+// possible and minimize partial packets.  We will fix that.  But disabling
+// Nagle also ensure we don't run into this delay in other edge cases.
+// See also:
+//    http://technet.microsoft.com/en-us/library/bb726981.aspx
+//
+// This function returns true if it succeeds to set the TCP_NODELAY option,
+// otherwise returns false.
+bool SetTCPNoDelay(SocketDescriptor socket, bool no_delay);
+
+// SetReuseAddr() sets the SO_REUSEADDR socket option. Use |reuse| to enable or
+// disable it. On error returns a net error code, on success returns OK.
+int SetReuseAddr(SocketDescriptor fd, bool reuse);
+
+// SetSocketReceiveBufferSize() sets the SO_RCVBUF socket option. On error
+// returns a net error code, on success returns OK.
+int SetSocketReceiveBufferSize(SocketDescriptor fd, int32_t size);
+
+// SetSocketSendBufferSize() sets the SO_SNDBUF socket option. On error
+// returns a net error code, on success returns OK.
+int SetSocketSendBufferSize(SocketDescriptor fd, int32_t size);
+
+}  // namespace net
+
+#endif  // NET_SOCKET_SOCKET_OPTIONS_H_
diff --git a/src/net/socket/socket_posix.cc b/src/net/socket/socket_posix.cc
index b5a765f..6955aa2 100644
--- a/src/net/socket/socket_posix.cc
+++ b/src/net/socket/socket_posix.cc
@@ -547,24 +547,4 @@
   peer_address_.reset();
 }
 
-int SetReuseAddr(int fd, bool reuse) {
-  // SO_REUSEADDR is useful for server sockets to bind to a recently unbound
-  // port. When a socket is closed, the end point changes its state to TIME_WAIT
-  // and wait for 2 MSL (maximum segment lifetime) to ensure the remote peer
-  // acknowledges its closure. For server sockets, it is usually safe to
-  // bind to a TIME_WAIT end point immediately, which is a widely adopted
-  // behavior.
-  //
-  // Note that on *nix, SO_REUSEADDR does not enable the socket (which can be
-  // either TCP or UDP) to bind to an end point that is already bound by another
-  // socket. To do that one must set SO_REUSEPORT instead. This option is not
-  // provided on Linux prior to 3.9.
-  //
-  // SO_REUSEPORT is provided in MacOS X and iOS.
-  int boolean_value = reuse ? 1 : 0;
-  int rv = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &boolean_value,
-                      sizeof(boolean_value));
-  return rv == -1 ? MapSystemError(errno) : OK;
-}
-
 }  // namespace net
diff --git a/src/net/socket/socket_posix.h b/src/net/socket/socket_posix.h
index a22bc88..65a692e 100644
--- a/src/net/socket/socket_posix.h
+++ b/src/net/socket/socket_posix.h
@@ -144,10 +144,6 @@
   DISALLOW_COPY_AND_ASSIGN(SocketPosix);
 };
 
-// SetReuseAddr() sets the SO_REUSEADDR socket option. Use |reuse| to enable or
-// disable it. On error returns a net error code, on success returns OK.
-int SetReuseAddr(int fd, bool reuse);
-
 }  // namespace net
 
 #endif  // NET_SOCKET_SOCKET_POSIX_H_
diff --git a/src/net/socket/tcp_socket.cc b/src/net/socket/tcp_socket.cc
deleted file mode 100644
index ad52506..0000000
--- a/src/net/socket/tcp_socket.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/socket/tcp_socket.h"
-
-#include "build/build_config.h"
-
-#if defined(OS_POSIX)
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#elif defined(OS_WIN)
-#include <winsock2.h>
-#endif
-
-namespace net {
-
-bool SetTCPNoDelay(SocketDescriptor socket, bool no_delay) {
-#if defined(OS_POSIX)
-  int on = no_delay ? 1 : 0;
-#elif defined(OS_WIN)
-  BOOL on = no_delay ? TRUE : FALSE;
-#endif
-  return setsockopt(socket, IPPROTO_TCP, TCP_NODELAY,
-                    reinterpret_cast<const char*>(&on), sizeof(on)) == 0;
-}
-
-}  // namespace net
diff --git a/src/net/socket/tcp_socket.h b/src/net/socket/tcp_socket.h
index 319a6b2..71ac9a2 100644
--- a/src/net/socket/tcp_socket.h
+++ b/src/net/socket/tcp_socket.h
@@ -40,39 +40,6 @@
 // Not thread safe.  Must be called during initialization/startup only.
 NET_EXPORT void CheckSupportAndMaybeEnableTCPFastOpen(bool user_enabled);
 
-// This function enables/disables buffering in the kernel. By default, on Linux,
-// TCP sockets will wait up to 200ms for more data to complete a packet before
-// transmitting. After calling this function, the kernel will not wait. See
-// TCP_NODELAY in `man 7 tcp`.
-//
-// For Windows:
-//
-// The Nagle implementation on Windows is governed by RFC 896.  The idea
-// behind Nagle is to reduce small packets on the network.  When Nagle is
-// enabled, if a partial packet has been sent, the TCP stack will disallow
-// further *partial* packets until an ACK has been received from the other
-// side.  Good applications should always strive to send as much data as
-// possible and avoid partial-packet sends.  However, in most real world
-// applications, there are edge cases where this does not happen, and two
-// partial packets may be sent back to back.  For a browser, it is NEVER
-// a benefit to delay for an RTT before the second packet is sent.
-//
-// As a practical example in Chromium today, consider the case of a small
-// POST.  I have verified this:
-//     Client writes 649 bytes of header  (partial packet #1)
-//     Client writes 50 bytes of POST data (partial packet #2)
-// In the above example, with Nagle, a RTT delay is inserted between these
-// two sends due to nagle.  RTTs can easily be 100ms or more.  The best
-// fix is to make sure that for POSTing data, we write as much data as
-// possible and minimize partial packets.  We will fix that.  But disabling
-// Nagle also ensure we don't run into this delay in other edge cases.
-// See also:
-//    http://technet.microsoft.com/en-us/library/bb726981.aspx
-//
-// This function returns true if it succeeds to set the TCP_NODELAY option,
-// otherwise returns false.
-NET_EXPORT_PRIVATE bool SetTCPNoDelay(SocketDescriptor socket, bool no_delay);
-
 }  // namespace net
 
 #endif  // NET_SOCKET_TCP_SOCKET_H_
diff --git a/src/net/socket/tcp_socket_posix.cc b/src/net/socket/tcp_socket_posix.cc
index 092ae89..60238ae 100644
--- a/src/net/socket/tcp_socket_posix.cc
+++ b/src/net/socket/tcp_socket_posix.cc
@@ -31,6 +31,7 @@
 #include "net/log/net_log_source.h"
 #include "net/log/net_log_source_type.h"
 #include "net/socket/socket_net_log_params.h"
+#include "net/socket/socket_options.h"
 #include "net/socket/socket_posix.h"
 
 // If we don't have a definition for TCPI_OPT_SYN_DATA, create one.
@@ -406,16 +407,12 @@
 
 int TCPSocketPosix::SetReceiveBufferSize(int32_t size) {
   DCHECK(socket_);
-  int rv = setsockopt(socket_->socket_fd(), SOL_SOCKET, SO_RCVBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  return (rv == 0) ? OK : MapSystemError(errno);
+  return SetSocketReceiveBufferSize(socket_->socket_fd(), size);
 }
 
 int TCPSocketPosix::SetSendBufferSize(int32_t size) {
   DCHECK(socket_);
-  int rv = setsockopt(socket_->socket_fd(), SOL_SOCKET, SO_SNDBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  return (rv == 0) ? OK : MapSystemError(errno);
+  return SetSocketSendBufferSize(socket_->socket_fd(), size);
 }
 
 bool TCPSocketPosix::SetKeepAlive(bool enable, int delay) {
diff --git a/src/net/socket/tcp_socket_win.cc b/src/net/socket/tcp_socket_win.cc
index f0aa149..e9a4207 100644
--- a/src/net/socket/tcp_socket_win.cc
+++ b/src/net/socket/tcp_socket_win.cc
@@ -30,6 +30,7 @@
 #include "net/log/net_log_source_type.h"
 #include "net/socket/socket_descriptor.h"
 #include "net/socket/socket_net_log_params.h"
+#include "net/socket/socket_options.h"
 
 namespace net {
 
@@ -37,24 +38,6 @@
 
 const int kTCPKeepAliveSeconds = 45;
 
-int SetSocketReceiveBufferSize(SOCKET socket, int32_t size) {
-  int rv = setsockopt(socket, SOL_SOCKET, SO_RCVBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  int os_error = WSAGetLastError();
-  int net_error = (rv == 0) ? OK : MapSystemError(os_error);
-  DCHECK(!rv) << "Could not set socket receive buffer size: " << net_error;
-  return net_error;
-}
-
-int SetSocketSendBufferSize(SOCKET socket, int32_t size) {
-  int rv = setsockopt(socket, SOL_SOCKET, SO_SNDBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  int os_error = WSAGetLastError();
-  int net_error = (rv == 0) ? OK : MapSystemError(os_error);
-  DCHECK(!rv) << "Could not set socket send buffer size: " << net_error;
-  return net_error;
-}
-
 // Disable Nagle.
 // Enable TCP Keep-Alive to prevent NAT routers from timing out TCP
 // connections. See http://crbug.com/27400 for details.
diff --git a/src/net/socket/udp_socket_posix.cc b/src/net/socket/udp_socket_posix.cc
index 1d4c606..66f037b 100644
--- a/src/net/socket/udp_socket_posix.cc
+++ b/src/net/socket/udp_socket_posix.cc
@@ -33,7 +33,7 @@
 #include "net/log/net_log_source.h"
 #include "net/log/net_log_source_type.h"
 #include "net/socket/socket_descriptor.h"
-#include "net/socket/socket_posix.h"
+#include "net/socket/socket_options.h"
 #include "net/socket/udp_net_log_parameters.h"
 
 #if defined(OS_ANDROID)
@@ -502,17 +502,13 @@
 int UDPSocketPosix::SetReceiveBufferSize(int32_t size) {
   DCHECK_NE(socket_, kInvalidSocket);
   DCHECK(CalledOnValidThread());
-  int rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  return rv == 0 ? OK : MapSystemError(errno);
+  return SetSocketReceiveBufferSize(socket_, size);
 }
 
 int UDPSocketPosix::SetSendBufferSize(int32_t size) {
   DCHECK_NE(socket_, kInvalidSocket);
   DCHECK(CalledOnValidThread());
-  int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
-  return rv == 0 ? OK : MapSystemError(errno);
+  return SetSocketSendBufferSize(socket_, size);
 }
 
 int UDPSocketPosix::SetDoNotFragment() {
diff --git a/src/net/socket/udp_socket_win.cc b/src/net/socket/udp_socket_win.cc
index 1b78e75..83538c9 100644
--- a/src/net/socket/udp_socket_win.cc
+++ b/src/net/socket/udp_socket_win.cc
@@ -28,6 +28,7 @@
 #include "net/log/net_log_source.h"
 #include "net/log/net_log_source_type.h"
 #include "net/socket/socket_descriptor.h"
+#include "net/socket/socket_options.h"
 #include "net/socket/udp_net_log_parameters.h"
 
 namespace {
@@ -499,8 +500,8 @@
 int UDPSocketWin::SetReceiveBufferSize(int32_t size) {
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK(CalledOnValidThread());
-  int rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
+  int rv = SetSocketReceiveBufferSize(socket_, size);
+
   if (rv != 0)
     return MapSystemError(WSAGetLastError());
 
@@ -522,8 +523,7 @@
 int UDPSocketWin::SetSendBufferSize(int32_t size) {
   DCHECK_NE(socket_, INVALID_SOCKET);
   DCHECK(CalledOnValidThread());
-  int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF,
-                      reinterpret_cast<const char*>(&size), sizeof(size));
+  int rv = SetSocketSendBufferSize(socket_, size);
   if (rv != 0)
     return MapSystemError(WSAGetLastError());
   // According to documentation, setsockopt may succeed, but we need to check
diff --git a/src/net/spdy/array_output_buffer.h b/src/net/spdy/array_output_buffer.h
index a363e56..f6c805a 100644
--- a/src/net/spdy/array_output_buffer.h
+++ b/src/net/spdy/array_output_buffer.h
@@ -5,7 +5,7 @@
 #ifndef NET_SPDY_ARRAY_OUTPUT_BUFFER_H_
 #define NET_SPDY_ARRAY_OUTPUT_BUFFER_H_
 
-#include <string.h>
+#include <cstddef>
 #include "net/spdy/zero_copy_output_buffer.h"
 
 namespace net {
diff --git a/src/net/spdy/bidirectional_stream_spdy_impl_unittest.cc b/src/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
index a56ae16..a37ad01 100644
--- a/src/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
+++ b/src/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/bidirectional_stream_spdy_impl.h"
 
 #include <memory>
-#include <string>
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
@@ -21,6 +20,7 @@
 #include "net/http/http_response_info.h"
 #include "net/log/test_net_log.h"
 #include "net/socket/socket_test_util.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_session.h"
 #include "net/spdy/spdy_test_util_common.h"
 #include "net/test/cert_test_util.h"
@@ -196,7 +196,7 @@
   }
 
   // Const getters for internal states.
-  const std::string& data_received() const { return data_received_; }
+  const SpdyString& data_received() const { return data_received_; }
   int bytes_read() const { return bytes_read_; }
   int error() const { return error_; }
   const SpdyHeaderBlock& response_headers() const { return response_headers_; }
@@ -214,7 +214,7 @@
   std::unique_ptr<BidirectionalStreamSpdyImpl> stream_;
   scoped_refptr<IOBuffer> read_buf_;
   int read_buf_len_;
-  std::string data_received_;
+  SpdyString data_received_;
   std::unique_ptr<base::RunLoop> loop_;
   SpdyHeaderBlock response_headers_;
   SpdyHeaderBlock trailers_;
@@ -313,7 +313,7 @@
   sequenced_data_->RunUntilPaused();
 
   scoped_refptr<StringIOBuffer> write_buffer(
-      new StringIOBuffer(std::string(kBodyData, kBodyDataSize)));
+      new StringIOBuffer(SpdyString(kBodyData, kBodyDataSize)));
   delegate->SendData(write_buffer.get(), write_buffer->size(), true);
   sequenced_data_->Resume();
   base::RunLoop().RunUntilIdle();
@@ -465,7 +465,7 @@
   sequenced_data_->RunUntilPaused();
   // Make a write pending before receiving RST_STREAM.
   scoped_refptr<StringIOBuffer> write_buffer(
-      new StringIOBuffer(std::string(kBodyData, kBodyDataSize)));
+      new StringIOBuffer(SpdyString(kBodyData, kBodyDataSize)));
   delegate->SendData(write_buffer.get(), write_buffer->size(), false);
   sequenced_data_->Resume();
   base::RunLoop().RunUntilIdle();
diff --git a/src/net/spdy/buffered_spdy_framer.h b/src/net/spdy/buffered_spdy_framer.h
index f450225..9c6c0d9 100644
--- a/src/net/spdy/buffered_spdy_framer.h
+++ b/src/net/spdy/buffered_spdy_framer.h
@@ -9,11 +9,11 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 
 #include "base/macros.h"
 #include "net/base/net_export.h"
 #include "net/spdy/header_coalescer.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_alt_svc_wire_format.h"
 #include "net/spdy/spdy_framer.h"
@@ -31,7 +31,7 @@
 
   // Called if an error is detected in a HTTP2 stream.
   virtual void OnStreamError(SpdyStreamId stream_id,
-                             const std::string& description) = 0;
+                             const SpdyString& description) = 0;
 
   // Called after all the header data for HEADERS control frame is received.
   virtual void OnHeaders(SpdyStreamId stream_id,
@@ -261,7 +261,7 @@
   struct GoAwayFields {
     SpdyStreamId last_accepted_stream_id;
     SpdyErrorCode error_code;
-    std::string debug_data;
+    SpdyString debug_data;
 
     // Returns the estimate of dynamically allocated memory in bytes.
     size_t EstimateMemoryUsage() const;
diff --git a/src/net/spdy/buffered_spdy_framer_unittest.cc b/src/net/spdy/buffered_spdy_framer_unittest.cc
index 870ab36..770f21c 100644
--- a/src/net/spdy/buffered_spdy_framer_unittest.cc
+++ b/src/net/spdy/buffered_spdy_framer_unittest.cc
@@ -34,7 +34,7 @@
   }
 
   void OnStreamError(SpdyStreamId stream_id,
-                     const std::string& description) override {
+                     const SpdyString& description) override {
     VLOG(1) << "SpdyFramer Error on stream: " << stream_id << " "
             << description;
     error_count_++;
@@ -167,11 +167,11 @@
   // OnGoAway parameters.
   SpdyStreamId goaway_last_accepted_stream_id_;
   SpdyErrorCode goaway_error_code_;
-  std::string goaway_debug_data_;
+  SpdyString goaway_debug_data_;
 
   // OnAltSvc parameters.
   SpdyStreamId altsvc_stream_id_;
-  std::string altsvc_origin_;
+  SpdyString altsvc_origin_;
   SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_;
 };
 
@@ -194,7 +194,7 @@
 
 TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) {
   SpdyHeaderBlock headers;
-  std::string long_header_value(256 * 1024, 'x');
+  SpdyString long_header_value(256 * 1024, 'x');
   headers["foo"] = long_header_value;
   SpdyHeadersIR headers_ir(/*stream_id=*/1, std::move(headers));
 
diff --git a/src/net/spdy/fuzzing/hpack_example_generator.cc b/src/net/spdy/fuzzing/hpack_example_generator.cc
index e73681b..ba6e43f 100644
--- a/src/net/spdy/fuzzing/hpack_example_generator.cc
+++ b/src/net/spdy/fuzzing/hpack_example_generator.cc
@@ -10,6 +10,7 @@
 #include "net/spdy/fuzzing/hpack_fuzz_util.h"
 #include "net/spdy/hpack/hpack_constants.h"
 #include "net/spdy/hpack/hpack_encoder.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_protocol.h"
 
 namespace {
@@ -23,8 +24,8 @@
 }  // namespace
 
 using net::HpackFuzzUtil;
+using net::SpdyString;
 using std::map;
-using std::string;
 
 // Generates a configurable number of header sets (using HpackFuzzUtil), and
 // sequentially encodes each header set with an HpackEncoder. Encoded header
@@ -43,7 +44,7 @@
                << " --" << kExampleCount << "=1000";
     return -1;
   }
-  string file_to_write = command_line.GetSwitchValueASCII(kFileToWrite);
+  SpdyString file_to_write = command_line.GetSwitchValueASCII(kFileToWrite);
 
   int example_count = 0;
   base::StringToInt(command_line.GetSwitchValueASCII(kExampleCount),
@@ -62,10 +63,10 @@
     net::SpdyHeaderBlock headers =
         HpackFuzzUtil::NextGeneratedHeaderSet(&context);
 
-    string buffer;
+    SpdyString buffer;
     CHECK(encoder.EncodeHeaderSet(headers, &buffer));
 
-    string prefix = HpackFuzzUtil::HeaderBlockPrefix(buffer.size());
+    SpdyString prefix = HpackFuzzUtil::HeaderBlockPrefix(buffer.size());
 
     CHECK_LT(0, file_out.WriteAtCurrentPos(prefix.data(), prefix.size()));
     CHECK_LT(0, file_out.WriteAtCurrentPos(buffer.data(), buffer.size()));
diff --git a/src/net/spdy/fuzzing/hpack_fuzz_util.cc b/src/net/spdy/fuzzing/hpack_fuzz_util.cc
index 75b03a3..90b633e 100644
--- a/src/net/spdy/fuzzing/hpack_fuzz_util.cc
+++ b/src/net/spdy/fuzzing/hpack_fuzz_util.cc
@@ -33,7 +33,6 @@
 
 using base::RandBytesAsString;
 using std::map;
-using std::string;
 
 HpackFuzzUtil::GeneratorContext::GeneratorContext() {}
 HpackFuzzUtil::GeneratorContext::~GeneratorContext() {}
@@ -82,7 +81,7 @@
                                           kHeaderIndexMax);
     size_t value_index = SampleExponential(kHeaderIndexMean,
                                            kHeaderIndexMax);
-    string name, value;
+    SpdyString name, value;
     if (name_index >= context->names.size()) {
       context->names.push_back(
           RandBytesAsString(1 + SampleExponential(kNameLengthMean,
@@ -132,9 +131,9 @@
 }
 
 // static
-string HpackFuzzUtil::HeaderBlockPrefix(size_t block_size) {
+SpdyString HpackFuzzUtil::HeaderBlockPrefix(size_t block_size) {
   uint32_t length = base::HostToNet32(static_cast<uint32_t>(block_size));
-  return string(reinterpret_cast<char*>(&length), sizeof(uint32_t));
+  return SpdyString(reinterpret_cast<char*>(&length), sizeof(uint32_t));
 }
 
 // static
@@ -157,7 +156,7 @@
     return false;
   }
   // Second stage: Re-encode the decoded header block. This must succeed.
-  string second_stage_out;
+  SpdyString second_stage_out;
   CHECK(context->second_stage->EncodeHeaderSet(
       context->first_stage->decoded_block(), &second_stage_out));
 
diff --git a/src/net/spdy/fuzzing/hpack_fuzz_util.h b/src/net/spdy/fuzzing/hpack_fuzz_util.h
index 9f1a991..163b8b9 100644
--- a/src/net/spdy/fuzzing/hpack_fuzz_util.h
+++ b/src/net/spdy/fuzzing/hpack_fuzz_util.h
@@ -9,12 +9,12 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_decoder.h"
 #include "net/spdy/hpack/hpack_encoder.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -26,8 +26,8 @@
   struct NET_EXPORT_PRIVATE GeneratorContext {
     GeneratorContext();
     ~GeneratorContext();
-    std::vector<std::string> names;
-    std::vector<std::string> values;
+    std::vector<SpdyString> names;
+    std::vector<SpdyString> values;
   };
 
   // Initializes a GeneratorContext with a random seed and name/value fixtures.
@@ -40,7 +40,7 @@
   // upper-bounded by |sanity_bound|.
   static size_t SampleExponential(size_t mean, size_t sanity_bound);
 
-  // Holds an input string, and manages an offset into that string.
+  // Holds an input SpdyString, and manages an offset into that SpdyString.
   struct NET_EXPORT_PRIVATE Input {
     Input();  // Initializes |offset| to zero.
     ~Input();
@@ -52,7 +52,7 @@
       return input.data() + offset;
     }
 
-    std::string input;
+    SpdyString input;
     size_t offset;
   };
 
@@ -62,7 +62,7 @@
 
   // Returns the serialized header block length prefix for a block of
   // |block_size| bytes.
-  static std::string HeaderBlockPrefix(size_t block_size);
+  static SpdyString HeaderBlockPrefix(size_t block_size);
 
   // A FuzzerContext holds fuzzer input, as well as each of the decoder and
   // encoder stages which fuzzed header blocks are processed through.
diff --git a/src/net/spdy/fuzzing/hpack_fuzz_util_test.cc b/src/net/spdy/fuzzing/hpack_fuzz_util_test.cc
index d648d2f..bbc72df 100644
--- a/src/net/spdy/fuzzing/hpack_fuzz_util_test.cc
+++ b/src/net/spdy/fuzzing/hpack_fuzz_util_test.cc
@@ -18,7 +18,6 @@
 namespace test {
 
 using std::map;
-using std::string;
 using test::a2b_hex;
 
 TEST(HpackFuzzUtilTest, GeneratorContextInitialization) {
@@ -85,16 +84,16 @@
 }
 
 TEST(HpackFuzzUtilTest, SerializedHeaderBlockPrefixes) {
-  EXPECT_EQ(string("\x00\x00\x00\x00", 4), HpackFuzzUtil::HeaderBlockPrefix(0));
-  EXPECT_EQ(string("\x00\x00\x00\x05", 4), HpackFuzzUtil::HeaderBlockPrefix(5));
-  EXPECT_EQ(string("\x4f\xb3\x0a\x91", 4),
-            HpackFuzzUtil::HeaderBlockPrefix(1337133713));
+  EXPECT_EQ(SpdyString("\x00\x00\x00\x00", 4),
+            HpackFuzzUtil::HeaderBlockPrefix(0));
+  EXPECT_EQ(SpdyString("\x00\x00\x00\x05", 4),
+            HpackFuzzUtil::HeaderBlockPrefix(5));
+  EXPECT_EQ("\x4f\xb3\x0a\x91", HpackFuzzUtil::HeaderBlockPrefix(1337133713));
 }
 
 TEST(HpackFuzzUtilTest, PassValidInputThroughAllStages) {
   // Example lifted from HpackDecoderTest.SectionD4RequestHuffmanExamples.
-  string input = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4"
-                         "ff");
+  SpdyString input = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4ff");
 
   HpackFuzzUtil::FuzzerContext context;
   HpackFuzzUtil::InitializeFuzzerContext(&context);
@@ -136,7 +135,7 @@
 
 TEST(HpackFuzzUtilTest, FlipBitsMutatesBuffer) {
   char buffer[] = "testbuffer1234567890";
-  string unmodified(buffer, arraysize(buffer) - 1);
+  SpdyString unmodified(buffer, arraysize(buffer) - 1);
 
   EXPECT_EQ(unmodified, buffer);
   HpackFuzzUtil::FlipBits(reinterpret_cast<uint8_t*>(buffer),
diff --git a/src/net/spdy/header_coalescer.cc b/src/net/spdy/header_coalescer.cc
index 6048d2c..2158998 100644
--- a/src/net/spdy/header_coalescer.cc
+++ b/src/net/spdy/header_coalescer.cc
@@ -9,6 +9,7 @@
 #include "base/strings/string_util.h"
 #include "net/http/http_util.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
 
@@ -61,7 +62,7 @@
   } else {
     // This header had multiple values, so it must be reconstructed.
     SpdyStringPiece v = iter->second;
-    std::string s(v.data(), v.length());
+    SpdyString s(v.data(), v.length());
     if (key == "cookie") {
       // Obeys section 8.1.2.5 in RFC 7540 for cookie reconstruction.
       s.append("; ");
diff --git a/src/net/spdy/header_coalescer_test.cc b/src/net/spdy/header_coalescer_test.cc
index f0f696b..6490032 100644
--- a/src/net/spdy/header_coalescer_test.cc
+++ b/src/net/spdy/header_coalescer_test.cc
@@ -2,10 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "header_coalescer.h"
+#include "net/spdy/header_coalescer.h"
 
-#include <string>
+#include <vector>
 
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -41,7 +42,7 @@
 TEST_F(HeaderCoalescerTest, HeaderBlockTooLarge) {
   // 3 byte key, 256 * 1024 - 40 byte value, 32 byte overhead:
   // less than 256 * 1024 bytes in total.
-  std::string data(256 * 1024 - 40, 'a');
+  SpdyString data(256 * 1024 - 40, 'a');
   header_coalescer_.OnHeader("foo", data);
   EXPECT_FALSE(header_coalescer_.error_seen());
 
diff --git a/src/net/spdy/hpack/hpack_decoder.cc b/src/net/spdy/hpack/hpack_decoder.cc
index c06e5e1..611e2c5 100644
--- a/src/net/spdy/hpack/hpack_decoder.cc
+++ b/src/net/spdy/hpack/hpack_decoder.cc
@@ -14,8 +14,6 @@
 
 namespace net {
 
-using std::string;
-
 HpackDecoder::HpackDecoder()
     : handler_(nullptr),
       total_header_bytes_(0),
@@ -271,7 +269,7 @@
                                            bool is_key,
                                            SpdyStringPiece* output) {
   if (input_stream->MatchPrefixAndConsume(kStringLiteralHuffmanEncoded)) {
-    string* buffer = is_key ? &key_buffer_ : &value_buffer_;
+    SpdyString* buffer = is_key ? &key_buffer_ : &value_buffer_;
     bool result = input_stream->DecodeNextHuffmanString(buffer);
     *output = SpdyStringPiece(*buffer);
     return result;
diff --git a/src/net/spdy/hpack/hpack_decoder.h b/src/net/spdy/hpack/hpack_decoder.h
index 8fa9e19..6df4d1a 100644
--- a/src/net/spdy/hpack/hpack_decoder.h
+++ b/src/net/spdy/hpack/hpack_decoder.h
@@ -10,7 +10,6 @@
 
 #include <map>
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "base/macros.h"
@@ -18,6 +17,7 @@
 #include "net/spdy/hpack/hpack_decoder_interface.h"
 #include "net/spdy/hpack/hpack_header_table.h"
 #include "net/spdy/hpack/hpack_input_stream.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_headers_handler_interface.h"
 #include "net/spdy/spdy_protocol.h"
@@ -116,11 +116,11 @@
   // TODO(jgraettinger): Buffer for headers data, and storage for the last-
   // processed headers block. Both will be removed with the switch to
   // SpdyHeadersHandlerInterface.
-  std::string headers_block_buffer_;
+  SpdyString headers_block_buffer_;
   SpdyHeaderBlock decoded_block_;
 
   // Scratch space for storing decoded literals.
-  std::string key_buffer_, value_buffer_;
+  SpdyString key_buffer_, value_buffer_;
 
   // If non-NULL, handles decoded headers.
   SpdyHeadersHandlerInterface* handler_;
diff --git a/src/net/spdy/hpack/hpack_decoder3_test.cc b/src/net/spdy/hpack/hpack_decoder3_test.cc
index 85752aa..73279aa 100644
--- a/src/net/spdy/hpack/hpack_decoder3_test.cc
+++ b/src/net/spdy/hpack/hpack_decoder3_test.cc
@@ -8,7 +8,6 @@
 
 #include <stdint.h>
 
-#include <string>
 #include <tuple>
 #include <utility>
 #include <vector>
@@ -23,11 +22,11 @@
 #include "net/spdy/hpack/hpack_encoder.h"
 #include "net/spdy/hpack/hpack_huffman_table.h"
 #include "net/spdy/hpack/hpack_output_stream.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using std::string;
 using ::testing::ElementsAre;
 using ::testing::Pair;
 
@@ -174,8 +173,8 @@
 
   void expectEntry(size_t index,
                    size_t size,
-                   const string& name,
-                   const string& value) {
+                   const SpdyString& name,
+                   const SpdyString& value) {
     const HpackStringPair* entry = decoder_peer_.GetTableEntry(index);
     EXPECT_EQ(name, entry->name) << "index " << index;
     EXPECT_EQ(value, entry->value);
@@ -183,7 +182,7 @@
   }
 
   SpdyHeaderBlock MakeHeaderBlock(
-      const std::vector<std::pair<string, string>>& headers) {
+      const std::vector<std::pair<SpdyString, SpdyString>>& headers) {
     SpdyHeaderBlock result;
     for (const auto& kv : headers) {
       result.AppendValueOrAddHeader(kv.first, kv.second);
@@ -214,12 +213,12 @@
   // limit is rejected.
   HandleControlFrameHeadersStart();
   const size_t kMaxBufferSizeBytes = 50;
-  const string a_value = string(49, 'x');
+  const SpdyString a_value = SpdyString(49, 'x');
   decoder_.set_max_decode_buffer_size_bytes(kMaxBufferSizeBytes);
   HpackBlockBuilder hbb;
   hbb.AppendLiteralNameAndValue(HpackEntryType::kNeverIndexedLiteralHeader,
                                 false, "a", false, a_value);
-  const string& s = hbb.buffer();
+  const SpdyString& s = hbb.buffer();
   EXPECT_GT(s.size(), kMaxBufferSizeBytes);
 
   // Any one in input buffer must not exceed kMaxBufferSizeBytes.
@@ -234,8 +233,8 @@
 TEST_P(HpackDecoder3Test, NameTooLong) {
   // Verify that a name longer than the allowed size generates an error.
   const size_t kMaxBufferSizeBytes = 50;
-  const string name = string(2 * kMaxBufferSizeBytes, 'x');
-  const string value = "abc";
+  const SpdyString name = SpdyString(2 * kMaxBufferSizeBytes, 'x');
+  const SpdyString value = "abc";
 
   decoder_.set_max_decode_buffer_size_bytes(kMaxBufferSizeBytes);
 
@@ -244,7 +243,7 @@
                                 false, name, false, value);
 
   const size_t fragment_size = (3 * kMaxBufferSizeBytes) / 2;
-  const string fragment = hbb.buffer().substr(0, fragment_size);
+  const SpdyString fragment = hbb.buffer().substr(0, fragment_size);
 
   HandleControlFrameHeadersStart();
   EXPECT_FALSE(HandleControlFrameHeadersData(fragment));
@@ -253,8 +252,8 @@
 TEST_P(HpackDecoder3Test, HeaderTooLongToBuffer) {
   // Verify that a header longer than the allowed size generates an error if
   // it isn't all in one input buffer.
-  const string name = "some-key";
-  const string value = "some-value";
+  const SpdyString name = "some-key";
+  const SpdyString value = "some-value";
   const size_t kMaxBufferSizeBytes = name.size() + value.size() - 2;
   decoder_.set_max_decode_buffer_size_bytes(kMaxBufferSizeBytes);
 
@@ -262,7 +261,7 @@
   hbb.AppendLiteralNameAndValue(HpackEntryType::kNeverIndexedLiteralHeader,
                                 false, name, false, value);
   const size_t fragment_size = hbb.size() - 1;
-  const string fragment = hbb.buffer().substr(0, fragment_size);
+  const SpdyString fragment = hbb.buffer().substr(0, fragment_size);
 
   HandleControlFrameHeadersStart();
   EXPECT_FALSE(HandleControlFrameHeadersData(fragment));
@@ -274,7 +273,7 @@
 
   // No need to wait for more data.
   EXPECT_TRUE(HandleControlFrameHeadersData("\x82\x85\x82"));
-  std::vector<std::pair<string, string>> expected_headers = {
+  std::vector<std::pair<SpdyString, SpdyString>> expected_headers = {
       {":method", "GET"}, {":path", "/index.html"}, {":method", "GET"}};
 
   SpdyHeaderBlock expected_block1 = MakeHeaderBlock(expected_headers);
@@ -315,7 +314,7 @@
 
   // Already-delimited headers are passed through.
   decoder_peer_.HandleHeaderRepresentation("passed-through",
-                                           string("foo\0baz", 7));
+                                           SpdyString("foo\0baz", 7));
 
   // Other headers are joined on \0. Case matters.
   decoder_peer_.HandleHeaderRepresentation("joined", "not joined");
@@ -402,7 +401,7 @@
 TEST_P(HpackDecoder3Test, ContextUpdateMaximumSize) {
   EXPECT_EQ(kDefaultHeaderTableSizeSetting,
             decoder_peer_.header_table_size_limit());
-  string input;
+  SpdyString input;
   {
     // Maximum-size update with size 126. Succeeds.
     HpackOutputStream output_stream;
@@ -439,7 +438,7 @@
 
 // Two HeaderTableSizeUpdates may appear at the beginning of the block
 TEST_P(HpackDecoder3Test, TwoTableSizeUpdates) {
-  string input;
+  SpdyString input;
   {
     // Should accept two table size updates, update to second one
     HpackOutputStream output_stream;
@@ -456,7 +455,7 @@
 
 // Three HeaderTableSizeUpdates should result in an error
 TEST_P(HpackDecoder3Test, ThreeTableSizeUpdatesError) {
-  string input;
+  SpdyString input;
   {
     // Should reject three table size updates, update to second one
     HpackOutputStream output_stream;
@@ -477,7 +476,7 @@
 // HeaderTableSizeUpdates may only appear at the beginning of the block
 // Any other updates should result in an error
 TEST_P(HpackDecoder3Test, TableSizeUpdateSecondError) {
-  string input;
+  SpdyString input;
   {
     // Should reject a table size update appearing after a different entry
     // The table size should remain as the default
@@ -497,7 +496,7 @@
 // HeaderTableSizeUpdates may only appear at the beginning of the block
 // Any other updates should result in an error
 TEST_P(HpackDecoder3Test, TableSizeUpdateFirstThirdError) {
-  string input;
+  SpdyString input;
   {
     // Should reject the second table size update
     // if a different entry appears after the first update
@@ -588,7 +587,7 @@
   //                                         | www.example.com
   //                                         | -> :authority: www.example.com
 
-  string first = a2b_hex("418cf1e3c2e5f23a6ba0ab90f4ff");
+  SpdyString first = a2b_hex("418cf1e3c2e5f23a6ba0ab90f4ff");
   EXPECT_TRUE(DecodeHeaderBlock(first));
   first = a2b_hex("418cf1e3c2e5f23a6ba0ab90f4");
   EXPECT_FALSE(DecodeHeaderBlock(first));
@@ -608,7 +607,7 @@
   //                                         | www.example.com
   //                                         | -> :authority: www.example.com
 
-  string first = a2b_hex("418cf1e3c2e5f23a6ba0ab90f4ff");
+  SpdyString first = a2b_hex("418cf1e3c2e5f23a6ba0ab90f4ff");
   EXPECT_TRUE(DecodeHeaderBlock(first));
   first = a2b_hex("418df1e3c2e5f23a6ba0ab90f4ffff");
   EXPECT_FALSE(DecodeHeaderBlock(first));
@@ -625,7 +624,7 @@
   expected_header_set[":path"] = "/";
   expected_header_set[":authority"] = "www.example.com";
 
-  string encoded_header_set;
+  SpdyString encoded_header_set;
   EXPECT_TRUE(
       encoder.EncodeHeaderSet(expected_header_set, &encoded_header_set));
 
@@ -656,7 +655,7 @@
   //                                         |     Decoded:
   //                                         | www.example.com
   //                                         | -> :authority: www.example.com
-  string first = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4ff");
+  SpdyString first = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4ff");
   const SpdyHeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
 
   EXPECT_THAT(first_header_set,
@@ -693,7 +692,7 @@
   //                                         | no-cache
   //                                         | -> cache-control: no-cache
 
-  string second = a2b_hex("828684be5886a8eb10649cbf");
+  SpdyString second = a2b_hex("828684be5886a8eb10649cbf");
   const SpdyHeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
@@ -735,7 +734,8 @@
   //                                         |     Decoded:
   //                                         | custom-value
   //                                         | -> custom-key: custom-value
-  string third = a2b_hex("828785bf408825a849e95ba97d7f8925a849e95bb8e8b4bf");
+  SpdyString third =
+      a2b_hex("828785bf408825a849e95ba97d7f8925a849e95bb8e8b4bf");
   const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
 
   EXPECT_THAT(
@@ -804,7 +804,7 @@
   //                                         | -> location: https://www.e
   //                                         |    xample.com
 
-  string first = a2b_hex(
+  SpdyString first = a2b_hex(
       "488264025885aec3771a4b6196d07abe"
       "941054d444a8200595040b8166e082a6"
       "2d1bff6e919d29ad171863c78f0b97c8"
@@ -847,7 +847,7 @@
   //                                         |   idx = 63
   //                                         | -> location:
   //                                         |   https://www.example.com
-  string second = a2b_hex("4883640effc1c0bf");
+  SpdyString second = a2b_hex("4883640effc1c0bf");
   const SpdyHeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
@@ -919,7 +919,7 @@
   //                                         | -> set-cookie: foo=ASDJKHQ
   //                                         |   KBZXOQWEOPIUAXQWEOIU;
   //                                         |   max-age=3600; version=1
-  string third = a2b_hex(
+  SpdyString third = a2b_hex(
       "88c16196d07abe941054d444a8200595"
       "040b8166e084a62d1bffc05a839bd9ab"
       "77ad94e7821dd7f2e6c7b335dfdfcd5b"
@@ -1000,7 +1000,7 @@
 
   // SpdyHeaderBlock stores these 6 strings as '\0' separated values.
   // Make sure that is what happened.
-  string joined_values = expected_header_set[name].as_string();
+  SpdyString joined_values = expected_header_set[name].as_string();
   EXPECT_EQ(joined_values.size(),
             2 * value1.size() + 2 * value2.size() + 2 * value3.size() + 5);
 
diff --git a/src/net/spdy/hpack/hpack_decoder_test.cc b/src/net/spdy/hpack/hpack_decoder_test.cc
index dae54cf..70eb50c 100644
--- a/src/net/spdy/hpack/hpack_decoder_test.cc
+++ b/src/net/spdy/hpack/hpack_decoder_test.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/hpack/hpack_decoder.h"
 
 #include <map>
-#include <string>
 
 #include "base/logging.h"
 #include "net/spdy/hpack/hpack_encoder.h"
@@ -20,8 +19,6 @@
 namespace net {
 namespace test {
 
-using std::string;
-
 class HpackDecoderPeer {
  public:
   explicit HpackDecoderPeer(HpackDecoder* decoder) : decoder_(decoder) {}
@@ -40,7 +37,7 @@
     return decoder_->DecodeNextStringLiteral(in, is_header_key, str);
   }
 
-  const string& headers_block_buffer() const {
+  const SpdyString& headers_block_buffer() const {
     return decoder_->headers_block_buffer_;
   }
 
@@ -50,7 +47,6 @@
 
 namespace {
 
-using std::string;
 using test::a2b_hex;
 
 using testing::ElementsAre;
@@ -93,8 +89,8 @@
 
   void expectEntry(size_t index,
                    size_t size,
-                   const string& name,
-                   const string& value) {
+                   const SpdyString& name,
+                   const SpdyString& value) {
     const HpackEntry* entry = decoder_peer_.header_table()->GetByIndex(index);
     EXPECT_EQ(name, entry->name()) << "index " << index;
     EXPECT_EQ(value, entry->value());
@@ -120,26 +116,26 @@
   decoder_.set_max_decode_buffer_size_bytes(kMaxBufferSizeBytes);
 
   // Strings under threshold are concatenated in the buffer.
-  string first_input;
+  SpdyString first_input;
   first_input.push_back(0x00);  // Literal name and value, unindexed
   first_input.push_back(0x7f);  // Name length = 127
   ASSERT_EQ(2u, first_input.size());
   EXPECT_TRUE(decoder_.HandleControlFrameHeadersData(first_input.data(),
                                                      first_input.size()));
   // Further 38 bytes to make 40 total buffered bytes.
-  string second_input = string(38, 'x');
+  SpdyString second_input = SpdyString(38, 'x');
   EXPECT_TRUE(decoder_.HandleControlFrameHeadersData(second_input.data(),
                                                      second_input.size()));
   // A string which would push the buffer over the threshold is refused.
   const int kThirdInputSize =
       kMaxBufferSizeBytes - (first_input.size() + second_input.size()) + 1;
-  string third_input = string(kThirdInputSize, 'y');
+  SpdyString third_input = SpdyString(kThirdInputSize, 'y');
   ASSERT_GT(first_input.size() + second_input.size() + third_input.size(),
             kMaxBufferSizeBytes);
   EXPECT_FALSE(decoder_.HandleControlFrameHeadersData(third_input.data(),
                                                       third_input.size()));
 
-  string expected(first_input);
+  SpdyString expected(first_input);
   expected.append(second_input);
   EXPECT_EQ(expected, decoder_peer_.headers_block_buffer());
 }
@@ -177,7 +173,7 @@
 
   // Already-delimited headers are passed through.
   decoder_peer_.HandleHeaderRepresentation("passed-through",
-                                           string("foo\0baz", 7));
+                                           SpdyString("foo\0baz", 7));
 
   // Other headers are joined on \0. Case matters.
   decoder_peer_.HandleHeaderRepresentation("joined", "not joined");
@@ -240,7 +236,7 @@
 }
 
 TEST_P(HpackDecoderTest, DecodeNextNameLiteralWithHuffmanEncoding) {
-  string input = a2b_hex("008825a849e95ba97d7f");
+  SpdyString input = a2b_hex("008825a849e95ba97d7f");
   HpackInputStream input_stream(input);
 
   SpdyStringPiece string_piece;
@@ -257,7 +253,7 @@
   // CHECK(huffman_table_.Initialize(kHpackHuffmanCode,
   //                                 arraysize(kHpackHuffmanCode)));
   // Put two copies of the same huffman encoding into input.
-  string input = a2b_hex("008825a849e95ba97d7f008825a849e95ba97d7f");
+  SpdyString input = a2b_hex("008825a849e95ba97d7f008825a849e95ba97d7f");
   input.resize(input.size() - 1);  // Remove the last byte.
   HpackInputStream input_stream(input);
 
@@ -352,7 +348,7 @@
 TEST_P(HpackDecoderTest, ContextUpdateMaximumSize) {
   EXPECT_EQ(kDefaultHeaderTableSizeSetting,
             decoder_peer_.header_table()->max_size());
-  string input;
+  SpdyString input;
   {
     // Maximum-size update with size 126. Succeeds.
     HpackOutputStream output_stream;
@@ -389,7 +385,7 @@
 
 // Two HeaderTableSizeUpdates may appear at the beginning of the block
 TEST_P(HpackDecoderTest, TwoTableSizeUpdates) {
-  string input;
+  SpdyString input;
   {
     // Should accept two table size updates, update to second one
     HpackOutputStream output_stream;
@@ -406,7 +402,7 @@
 
 // Three HeaderTableSizeUpdates should result in an error
 TEST_P(HpackDecoderTest, ThreeTableSizeUpdatesError) {
-  string input;
+  SpdyString input;
   {
     // Should reject three table size updates, update to second one
     HpackOutputStream output_stream;
@@ -427,7 +423,7 @@
 // HeaderTableSizeUpdates may only appear at the beginning of the block
 // Any other updates should result in an error
 TEST_P(HpackDecoderTest, TableSizeUpdateSecondError) {
-  string input;
+  SpdyString input;
   {
     // Should reject a table size update appearing after a different entry
     // The table size should remain as the default
@@ -447,7 +443,7 @@
 // HeaderTableSizeUpdates may only appear at the beginning of the block
 // Any other updates should result in an error
 TEST_P(HpackDecoderTest, TableSizeUpdateFirstThirdError) {
-  string input;
+  SpdyString input;
   {
     // Should reject the second table size update
     // if a different entry appears after the first update
@@ -552,7 +548,7 @@
   expected_header_set[":path"] = "/";
   expected_header_set[":authority"] = "www.example.com";
 
-  string encoded_header_set;
+  SpdyString encoded_header_set;
   EXPECT_TRUE(
       encoder.EncodeHeaderSet(expected_header_set, &encoded_header_set));
 
@@ -581,7 +577,7 @@
   //                                         |     Decoded:
   //                                         | www.example.com
   //                                         | -> :authority: www.example.com
-  string first = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4ff");
+  SpdyString first = a2b_hex("828684418cf1e3c2e5f23a6ba0ab90f4ff");
   const SpdyHeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
 
   EXPECT_THAT(
@@ -614,7 +610,7 @@
   //                                         | no-cache
   //                                         | -> cache-control: no-cache
 
-  string second = a2b_hex("828684be5886a8eb10649cbf");
+  SpdyString second = a2b_hex("828684be5886a8eb10649cbf");
   const SpdyHeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
@@ -652,7 +648,7 @@
   //                                         |     Decoded:
   //                                         | custom-value
   //                                         | -> custom-key: custom-value
-  string third = a2b_hex(
+  SpdyString third = a2b_hex(
       "828785bf408825a849e95ba97d7f89"
       "25a849e95bb8e8b4bf");
   const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
@@ -716,7 +712,7 @@
   //                                         | -> location: https://www.e
   //                                         |    xample.com
 
-  string first = a2b_hex(
+  SpdyString first = a2b_hex(
       "488264025885aec3771a4b6196d07abe"
       "941054d444a8200595040b8166e082a6"
       "2d1bff6e919d29ad171863c78f0b97c8"
@@ -756,7 +752,7 @@
   //                                         |   idx = 63
   //                                         | -> location:
   //                                         |   https://www.example.com
-  string second = a2b_hex("4883640effc1c0bf");
+  SpdyString second = a2b_hex("4883640effc1c0bf");
   const SpdyHeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
@@ -825,7 +821,7 @@
   //                                         | -> set-cookie: foo=ASDJKHQ
   //                                         |   KBZXOQWEOPIUAXQWEOIU;
   //                                         |   max-age=3600; version=1
-  string third = a2b_hex(
+  SpdyString third = a2b_hex(
       "88c16196d07abe941054d444a8200595"
       "040b8166e084a62d1bffc05a839bd9ab"
       "77ad94e7821dd7f2e6c7b335dfdfcd5b"
diff --git a/src/net/spdy/hpack/hpack_encoder.cc b/src/net/spdy/hpack/hpack_encoder.cc
index a9d9df6..48129d1 100644
--- a/src/net/spdy/hpack/hpack_encoder.cc
+++ b/src/net/spdy/hpack/hpack_encoder.cc
@@ -17,8 +17,6 @@
 
 namespace net {
 
-using std::string;
-
 class HpackEncoder::RepresentationIterator {
  public:
   // |pseudo_headers| and |regular_headers| must outlive the iterator.
@@ -88,13 +86,13 @@
 HpackEncoder::~HpackEncoder() {}
 
 void HpackEncoder::EncodeHeaderSet(const Representations& representations,
-                                   string* output) {
+                                   SpdyString* output) {
   RepresentationIterator iter(representations);
   EncodeRepresentations(&iter, output);
 }
 
 bool HpackEncoder::EncodeHeaderSet(const SpdyHeaderBlock& header_set,
-                                   string* output) {
+                                   SpdyString* output) {
   // Separate header set into pseudo-headers and regular headers.
   Representations pseudo_headers;
   Representations regular_headers;
@@ -139,7 +137,7 @@
 }
 
 void HpackEncoder::EncodeRepresentations(RepresentationIterator* iter,
-                                         string* output) {
+                                         SpdyString* output) {
   MaybeEmitTableSize();
   while (iter->HasNext()) {
     const auto header = iter->Next();
@@ -298,7 +296,7 @@
 
   // Encodes up to max_encoded_bytes of the current header block into the
   // given output string.
-  void Next(size_t max_encoded_bytes, string* output) override;
+  void Next(size_t max_encoded_bytes, SpdyString* output) override;
 
  private:
   HpackEncoder* encoder_;
@@ -335,7 +333,8 @@
   encoder_->MaybeEmitTableSize();
 }
 
-void HpackEncoder::Encoderator::Next(size_t max_encoded_bytes, string* output) {
+void HpackEncoder::Encoderator::Next(size_t max_encoded_bytes,
+                                     SpdyString* output) {
   SPDY_BUG_IF(!has_next_)
       << "Encoderator::Next called with nothing left to encode.";
   const bool use_compression = encoder_->enable_compression_;
diff --git a/src/net/spdy/hpack/hpack_encoder.h b/src/net/spdy/hpack/hpack_encoder.h
index 2312c23..f9f9320 100644
--- a/src/net/spdy/hpack/hpack_encoder.h
+++ b/src/net/spdy/hpack/hpack_encoder.h
@@ -10,7 +10,6 @@
 #include <functional>
 #include <map>
 #include <memory>
-#include <string>
 #include <utility>
 #include <vector>
 
@@ -18,6 +17,7 @@
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_header_table.h"
 #include "net/spdy/hpack/hpack_output_stream.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_protocol.h"
 
@@ -52,11 +52,11 @@
 
   // Encodes a sequence of Representations into the given string.
   void EncodeHeaderSet(const Representations& representations,
-                       std::string* output);
+                       SpdyString* output);
 
   // Encodes the given header set into the given string. Returns
   // whether or not the encoding was successful.
-  bool EncodeHeaderSet(const SpdyHeaderBlock& header_set, std::string* output);
+  bool EncodeHeaderSet(const SpdyHeaderBlock& header_set, SpdyString* output);
 
   class NET_EXPORT_PRIVATE ProgressiveEncoder {
    public:
@@ -67,7 +67,7 @@
 
     // Encodes up to max_encoded_bytes of the current header block into the
     // given output string.
-    virtual void Next(size_t max_encoded_bytes, std::string* output) = 0;
+    virtual void Next(size_t max_encoded_bytes, SpdyString* output) = 0;
   };
 
   // Returns a ProgressiveEncoder which must be outlived by both the given
@@ -109,7 +109,7 @@
   class Encoderator;
 
   // Encodes a sequence of header name-value pairs as a single header block.
-  void EncodeRepresentations(RepresentationIterator* iter, std::string* output);
+  void EncodeRepresentations(RepresentationIterator* iter, SpdyString* output);
 
   // Emits a static/dynamic indexed representation (Section 7.1).
   void EmitIndex(const HpackEntry* entry);
diff --git a/src/net/spdy/hpack/hpack_encoder_test.cc b/src/net/spdy/hpack/hpack_encoder_test.cc
index 705965b..7623f0a 100644
--- a/src/net/spdy/hpack/hpack_encoder_test.cc
+++ b/src/net/spdy/hpack/hpack_encoder_test.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/hpack/hpack_encoder.h"
 
 #include <map>
-#include <string>
 
 #include "base/rand_util.h"
 #include "net/base/arena.h"
@@ -15,7 +14,6 @@
 
 namespace net {
 
-using std::string;
 using testing::ElementsAre;
 
 namespace test {
@@ -46,7 +44,7 @@
     return encoder_->huffman_table_;
   }
   void EmitString(SpdyStringPiece str) { encoder_->EmitString(str); }
-  void TakeString(string* out) { encoder_->output_stream_.TakeString(out); }
+  void TakeString(SpdyString* out) { encoder_->output_stream_.TakeString(out); }
   static void CookieToCrumbs(SpdyStringPiece cookie,
                              std::vector<SpdyStringPiece>* out) {
     Representations tmp;
@@ -73,7 +71,7 @@
   // non-incremental encoding path.
   static bool EncodeHeaderSet(HpackEncoder* encoder,
                               const SpdyHeaderBlock& header_set,
-                              string* output,
+                              SpdyString* output,
                               bool use_incremental) {
     if (use_incremental) {
       return EncodeIncremental(encoder, header_set, output);
@@ -84,13 +82,13 @@
 
   static bool EncodeIncremental(HpackEncoder* encoder,
                                 const SpdyHeaderBlock& header_set,
-                                string* output) {
+                                SpdyString* output) {
     std::unique_ptr<HpackEncoder::ProgressiveEncoder> encoderator =
         encoder->EncodeHeaderSet(header_set);
-    string output_buffer;
+    SpdyString output_buffer;
     encoderator->Next(base::RandInt(0, 15), &output_buffer);
     while (encoderator->HasNext()) {
-      string second_buffer;
+      SpdyString second_buffer;
       encoderator->Next(base::RandInt(0, 15), &second_buffer);
       output_buffer.append(second_buffer);
     }
@@ -184,7 +182,7 @@
     expected_.AppendUint32(size);
   }
   void CompareWithExpectedEncoding(const SpdyHeaderBlock& header_set) {
-    string expected_out, actual_out;
+    SpdyString expected_out, actual_out;
     expected_.TakeString(&expected_out);
     EXPECT_TRUE(test::HpackEncoderPeer::EncodeHeaderSet(
         &encoder_, header_set, &actual_out, use_incremental_));
@@ -320,7 +318,7 @@
   expected_.AppendUint32(6);
   expected_.AppendBytes("@@@@@@");
 
-  string expected_out, actual_out;
+  SpdyString expected_out, actual_out;
   expected_.TakeString(&expected_out);
   peer_.TakeString(&actual_out);
   EXPECT_EQ(expected_out, actual_out);
@@ -509,7 +507,7 @@
 TEST_P(HpackEncoderTest, CrumbleNullByteDelimitedValue) {
   SpdyHeaderBlock headers;
   // A header field to be crumbled: "spam: foo\0bar".
-  headers["spam"] = string("foo\0bar", 7);
+  headers["spam"] = SpdyString("foo\0bar", 7);
 
   ExpectIndexedLiteral("spam", "foo");
   expected_.AppendPrefix(kLiteralIncrementalIndexOpcode);
diff --git a/src/net/spdy/hpack/hpack_entry.cc b/src/net/spdy/hpack/hpack_entry.cc
index 4b6d500..582d55d 100644
--- a/src/net/spdy/hpack/hpack_entry.cc
+++ b/src/net/spdy/hpack/hpack_entry.cc
@@ -74,9 +74,9 @@
   return Size(name(), value());
 }
 
-std::string HpackEntry::GetDebugString() const {
-  return "{ name: \"" + std::string(name_ref_) + "\", value: \"" +
-         std::string(value_ref_) +
+SpdyString HpackEntry::GetDebugString() const {
+  return "{ name: \"" + SpdyString(name_ref_) + "\", value: \"" +
+         SpdyString(value_ref_) +
          "\", index: " + base::SizeTToString(insertion_index_) +
          (IsStatic() ? " static" : (IsLookup() ? " lookup" : " dynamic")) +
          " }";
diff --git a/src/net/spdy/hpack/hpack_entry.h b/src/net/spdy/hpack/hpack_entry.h
index 8e7993a..0d4287f 100644
--- a/src/net/spdy/hpack/hpack_entry.h
+++ b/src/net/spdy/hpack/hpack_entry.h
@@ -7,10 +7,9 @@
 
 #include <stddef.h>
 
-#include <string>
-
 #include "base/macros.h"
 #include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 // All section references below are to
@@ -71,7 +70,7 @@
   static size_t Size(SpdyStringPiece name, SpdyStringPiece value);
   size_t Size() const;
 
-  std::string GetDebugString() const;
+  SpdyString GetDebugString() const;
 
   int64_t time_added() const { return time_added_; }
   void set_time_added(int64_t now) { time_added_ = now; }
@@ -87,8 +86,8 @@
   };
 
   // These members are not used for LOOKUP entries.
-  std::string name_;
-  std::string value_;
+  SpdyString name_;
+  SpdyString value_;
 
   // These members are always valid. For DYNAMIC and STATIC entries, they
   // always point to |name_| and |value_|.
diff --git a/src/net/spdy/hpack/hpack_entry_test.cc b/src/net/spdy/hpack/hpack_entry_test.cc
index eb7de1c..eda78d0 100644
--- a/src/net/spdy/hpack/hpack_entry_test.cc
+++ b/src/net/spdy/hpack/hpack_entry_test.cc
@@ -4,16 +4,12 @@
 
 #include "net/spdy/hpack/hpack_entry.h"
 
-#include <string>
-
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 
 namespace {
 
-using std::string;
-
 class HpackEntryTest : public ::testing::Test {
  protected:
   HpackEntryTest()
@@ -46,7 +42,7 @@
     return name_.size() + value_.size() + HpackEntry::kSizeOverhead;
   }
 
-  string name_, value_;
+  SpdyString name_, value_;
 
  private:
   // Referenced by HpackEntry instances.
diff --git a/src/net/spdy/hpack/hpack_header_table_test.cc b/src/net/spdy/hpack/hpack_header_table_test.cc
index 36f8879..f46968e 100644
--- a/src/net/spdy/hpack/hpack_header_table_test.cc
+++ b/src/net/spdy/hpack/hpack_header_table_test.cc
@@ -6,19 +6,18 @@
 
 #include <algorithm>
 #include <set>
-#include <string>
 #include <vector>
 
 #include "base/macros.h"
 #include "net/spdy/hpack/hpack_constants.h"
 #include "net/spdy/hpack/hpack_entry.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_flags.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 
 using std::distance;
-using std::string;
 
 namespace test {
 
@@ -77,8 +76,8 @@
   // Returns an entry whose Size() is equal to the given one.
   static HpackEntry MakeEntryOfSize(uint32_t size) {
     EXPECT_GE(size, HpackEntry::kSizeOverhead);
-    string name((size - HpackEntry::kSizeOverhead) / 2, 'n');
-    string value(size - HpackEntry::kSizeOverhead - name.size(), 'v');
+    SpdyString name((size - HpackEntry::kSizeOverhead) / 2, 'n');
+    SpdyString value(size - HpackEntry::kSizeOverhead - name.size(), 'v');
     HpackEntry entry(name, value, false, 0);
     EXPECT_EQ(size, entry.Size());
     return entry;
@@ -124,7 +123,7 @@
     }
   }
 
-  HpackEntry DynamicEntry(string name, string value) {
+  HpackEntry DynamicEntry(const SpdyString& name, const SpdyString& value) {
     peer_.AddDynamicEntry(name, value);
     return peer_.dynamic_entries().back();
   }
@@ -259,7 +258,7 @@
 }
 
 TEST_F(HpackHeaderTableTest, SetSizes) {
-  string key = "key", value = "value";
+  SpdyString key = "key", value = "value";
   const HpackEntry* entry1 = table_.TryAddEntry(key, value);
   const HpackEntry* entry2 = table_.TryAddEntry(key, value);
   const HpackEntry* entry3 = table_.TryAddEntry(key, value);
@@ -291,7 +290,7 @@
 }
 
 TEST_F(HpackHeaderTableTest, EvictionCountForEntry) {
-  string key = "key", value = "value";
+  SpdyString key = "key", value = "value";
   const HpackEntry* entry1 = table_.TryAddEntry(key, value);
   const HpackEntry* entry2 = table_.TryAddEntry(key, value);
   size_t entry3_size = HpackEntry::Size(key, value);
@@ -308,7 +307,7 @@
 }
 
 TEST_F(HpackHeaderTableTest, EvictionCountToReclaim) {
-  string key = "key", value = "value";
+  SpdyString key = "key", value = "value";
   const HpackEntry* entry1 = table_.TryAddEntry(key, value);
   const HpackEntry* entry2 = table_.TryAddEntry(key, value);
 
diff --git a/src/net/spdy/hpack/hpack_huffman_decoder.cc b/src/net/spdy/hpack/hpack_huffman_decoder.cc
index d933067..49f9dae 100644
--- a/src/net/spdy/hpack/hpack_huffman_decoder.cc
+++ b/src/net/spdy/hpack/hpack_huffman_decoder.cc
@@ -303,7 +303,7 @@
 // long strings, and a later portion dealing with the last few bytes of strings.
 // TODO(jamessynge): Determine if that is worth it by adding some counters to
 // measure the distribution of string sizes seen in practice.
-bool HpackHuffmanDecoder::DecodeString(HpackInputStream* in, std::string* out) {
+bool HpackHuffmanDecoder::DecodeString(HpackInputStream* in, SpdyString* out) {
   out->clear();
 
   // Load |bits| with the leading bits of the input stream, left justified
diff --git a/src/net/spdy/hpack/hpack_huffman_decoder.h b/src/net/spdy/hpack/hpack_huffman_decoder.h
index 50c3dc4..8027014 100644
--- a/src/net/spdy/hpack/hpack_huffman_decoder.h
+++ b/src/net/spdy/hpack/hpack_huffman_decoder.h
@@ -8,10 +8,9 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <string>
-
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_input_stream.h"
+#include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
 namespace test {
@@ -35,7 +34,7 @@
   // DecodeString() halts when |in| runs out of input, in which case true is
   // returned. It also halts (returning false) if an invalid Huffman code
   // prefix is read.
-  static bool DecodeString(HpackInputStream* in, std::string* out);
+  static bool DecodeString(HpackInputStream* in, SpdyString* out);
 
  private:
   friend class test::HpackHuffmanDecoderPeer;
diff --git a/src/net/spdy/hpack/hpack_huffman_decoder_test.cc b/src/net/spdy/hpack/hpack_huffman_decoder_test.cc
index 7133c38..6b86b5f 100644
--- a/src/net/spdy/hpack/hpack_huffman_decoder_test.cc
+++ b/src/net/spdy/hpack/hpack_huffman_decoder_test.cc
@@ -72,7 +72,7 @@
         HpackHuffmanDecoderPeer::CanonicalToSource(canonical));
   }
 
-  void EncodeString(SpdyStringPiece input, std::string* encoded) {
+  void EncodeString(SpdyStringPiece input, SpdyString* encoded) {
     HpackOutputStream output_stream;
     table_.EncodeString(input, &output_stream);
     encoded->clear();
@@ -81,8 +81,8 @@
     EXPECT_EQ(encoded->size(), table_.EncodedSize(input));
   }
 
-  std::string EncodeString(SpdyStringPiece input) {
-    std::string result;
+  SpdyString EncodeString(SpdyStringPiece input) {
+    SpdyString result;
     EncodeString(input, &result);
     return result;
   }
@@ -162,8 +162,8 @@
 }
 
 TEST_F(HpackHuffmanDecoderTest, SpecRequestExamples) {
-  std::string buffer;
-  std::string test_table[] = {
+  SpdyString buffer;
+  SpdyString test_table[] = {
       a2b_hex("f1e3c2e5f23a6ba0ab90f4ff"),
       "www.example.com",
       a2b_hex("a8eb10649cbf"),
@@ -175,8 +175,8 @@
   };
   // Round-trip each test example.
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
-    const std::string& encodedFixture(test_table[i]);
-    const std::string& decodedFixture(test_table[i + 1]);
+    const SpdyString& encodedFixture(test_table[i]);
+    const SpdyString& decodedFixture(test_table[i + 1]);
     HpackInputStream input_stream(encodedFixture);
     EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer));
     EXPECT_EQ(decodedFixture, buffer);
@@ -186,9 +186,9 @@
 }
 
 TEST_F(HpackHuffmanDecoderTest, SpecResponseExamples) {
-  std::string buffer;
+  SpdyString buffer;
   // clang-format off
-  std::string test_table[] = {
+  SpdyString test_table[] = {
     a2b_hex("6402"),
     "302",
     a2b_hex("aec3771a4b"),
@@ -207,8 +207,8 @@
   // clang-format on
   // Round-trip each test example.
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
-    const std::string& encodedFixture(test_table[i]);
-    const std::string& decodedFixture(test_table[i + 1]);
+    const SpdyString& encodedFixture(test_table[i]);
+    const SpdyString& decodedFixture(test_table[i + 1]);
     HpackInputStream input_stream(encodedFixture);
     EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer));
     EXPECT_EQ(decodedFixture, buffer);
@@ -222,8 +222,8 @@
     char c = static_cast<char>(i);
     char storage[3] = {c, c, c};
     SpdyStringPiece input(storage, arraysize(storage));
-    std::string buffer_in = EncodeString(input);
-    std::string buffer_out;
+    SpdyString buffer_in = EncodeString(input);
+    SpdyString buffer_out;
     HpackInputStream input_stream(buffer_in);
     EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer_out));
     EXPECT_EQ(input, buffer_out);
@@ -233,9 +233,9 @@
 // Creates 256 input strings, each with a unique byte value i used to sandwich
 // all the other higher byte values.
 TEST_F(HpackHuffmanDecoderTest, RoundTripSymbolSequences) {
-  std::string input;
-  std::string encoded;
-  std::string decoded;
+  SpdyString input;
+  SpdyString encoded;
+  SpdyString decoded;
   for (size_t i = 0; i != 256; i++) {
     input.clear();
     auto ic = static_cast<char>(i);
diff --git a/src/net/spdy/hpack/hpack_huffman_table.cc b/src/net/spdy/hpack/hpack_huffman_table.cc
index 2a25c45..a398d26 100644
--- a/src/net/spdy/hpack/hpack_huffman_table.cc
+++ b/src/net/spdy/hpack/hpack_huffman_table.cc
@@ -16,8 +16,6 @@
 
 namespace net {
 
-using std::string;
-
 namespace {
 
 // How many bits to index in the root decode table.
@@ -266,7 +264,7 @@
 }
 
 bool HpackHuffmanTable::GenericDecodeString(HpackInputStream* in,
-                                            string* out) const {
+                                            SpdyString* out) const {
   // Number of decode iterations required for a 32-bit code.
   const int kDecodeIterations = static_cast<int>(
       std::ceil((32.f - kDecodeTableRootBits) / kDecodeTableBranchBits));
diff --git a/src/net/spdy/hpack/hpack_huffman_table.h b/src/net/spdy/hpack/hpack_huffman_table.h
index c93dcfb..b2937a1 100644
--- a/src/net/spdy/hpack/hpack_huffman_table.h
+++ b/src/net/spdy/hpack/hpack_huffman_table.h
@@ -8,11 +8,11 @@
 #include <stdint.h>
 
 #include <cstddef>
-#include <string>
 #include <vector>
 
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_constants.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -91,8 +91,7 @@
   // otherwise be overflowed.
   // DEPRECATED: HpackHuffmanDecoder is now used for decoding strings encoded
   // according to the Huffman Table in the HPACK spec.
-  bool GenericDecodeString(HpackInputStream* in,
-                           std::string* out) const;
+  bool GenericDecodeString(HpackInputStream* in, SpdyString* out) const;
 
   // Returns the estimate of dynamically allocated memory in bytes.
   size_t EstimateMemoryUsage() const;
diff --git a/src/net/spdy/hpack/hpack_huffman_table_test.cc b/src/net/spdy/hpack/hpack_huffman_table_test.cc
index ddbc8e0..3becdbb 100644
--- a/src/net/spdy/hpack/hpack_huffman_table_test.cc
+++ b/src/net/spdy/hpack/hpack_huffman_table_test.cc
@@ -7,7 +7,6 @@
 #include <stdint.h>
 
 #include <bitset>
-#include <string>
 #include <utility>
 
 #include "base/logging.h"
@@ -20,7 +19,6 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using std::string;
 using testing::ElementsAreArray;
 using testing::Pointwise;
 
@@ -66,8 +64,8 @@
  protected:
   GenericHuffmanTableTest() : table_(), peer_(table_) {}
 
-  string EncodeString(SpdyStringPiece input) {
-    string result;
+  SpdyString EncodeString(SpdyStringPiece input) {
+    SpdyString result;
     HpackOutputStream output_stream;
     table_.EncodeString(input, &output_stream);
 
@@ -88,10 +86,10 @@
          lhs.length == rhs.length && lhs.symbol_id == rhs.symbol_id;
 }
 
-uint32_t bits32(const string& bitstring) {
+uint32_t bits32(const SpdyString& bitstring) {
   return std::bitset<32>(bitstring).to_ulong();
 }
-char bits8(const string& bitstring) {
+char bits8(const SpdyString& bitstring) {
   return static_cast<char>(std::bitset<8>(bitstring).to_ulong());
 }
 
@@ -234,10 +232,10 @@
                            bits8("01001100")};
   SpdyStringPiece expect(expect_storage, arraysize(expect_storage));
 
-  string buffer_in = EncodeString(input);
+  SpdyString buffer_in = EncodeString(input);
   EXPECT_EQ(expect, buffer_in);
 
-  string buffer_out;
+  SpdyString buffer_out;
   HpackInputStream input_stream(buffer_in);
   EXPECT_TRUE(table_.GenericDecodeString(&input_stream, &buffer_out));
   EXPECT_EQ(buffer_out, input);
@@ -296,7 +294,7 @@
       {bits32("10011100000000000000000000000000"), 16, 8}};
   EXPECT_TRUE(table_.Initialize(code, arraysize(code)));
 
-  string buffer;
+  SpdyString buffer;
   {
     // This example works: (2) 00 (3) 010 (2) 00 (6) 100110 (pad) 100.
     char input_storage[] = {bits8("00010001"), bits8("00110100")};
@@ -338,7 +336,7 @@
     EXPECT_TRUE(table_.IsInitialized());
   }
 
-  void DecodeStringTwice(const string& encoded, string* out) {
+  void DecodeStringTwice(const SpdyString& encoded, SpdyString* out) {
     // First decode with HpackHuffmanTable.
     {
       HpackInputStream input_stream(encoded);
@@ -348,7 +346,7 @@
     // the same.
     {
       HpackInputStream input_stream(encoded);
-      string buf;
+      SpdyString buf;
       EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buf));
       EXPECT_EQ(*out, buf);
     }
@@ -360,8 +358,8 @@
 }
 
 TEST_F(HpackHuffmanTableTest, SpecRequestExamples) {
-  string buffer;
-  string test_table[] = {
+  SpdyString buffer;
+  SpdyString test_table[] = {
       a2b_hex("f1e3c2e5f23a6ba0ab90f4ff"),
       "www.example.com",
       a2b_hex("a8eb10649cbf"),
@@ -373,8 +371,8 @@
   };
   // Round-trip each test example.
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
-    const string& encodedFixture(test_table[i]);
-    const string& decodedFixture(test_table[i + 1]);
+    const SpdyString& encodedFixture(test_table[i]);
+    const SpdyString& decodedFixture(test_table[i + 1]);
     DecodeStringTwice(encodedFixture, &buffer);
     EXPECT_EQ(decodedFixture, buffer);
     buffer = EncodeString(decodedFixture);
@@ -383,23 +381,27 @@
 }
 
 TEST_F(HpackHuffmanTableTest, SpecResponseExamples) {
-  string buffer;
-  string test_table[] = {
-      a2b_hex("6402"), "302", a2b_hex("aec3771a4b"), "private",
+  SpdyString buffer;
+  SpdyString test_table[] = {
+      a2b_hex("6402"),
+      "302",
+      a2b_hex("aec3771a4b"),
+      "private",
       a2b_hex("d07abe941054d444a8200595040b8166"
               "e082a62d1bff"),
       "Mon, 21 Oct 2013 20:13:21 GMT",
       a2b_hex("9d29ad171863c78f0b97c8e9ae82ae43"
               "d3"),
-      "https://www.example.com", a2b_hex("94e7821dd7f2e6c7b335dfdfcd5b3960"
-                                         "d5af27087f3672c1ab270fb5291f9587"
-                                         "316065c003ed4ee5b1063d5007"),
+      "https://www.example.com",
+      a2b_hex("94e7821dd7f2e6c7b335dfdfcd5b3960"
+              "d5af27087f3672c1ab270fb5291f9587"
+              "316065c003ed4ee5b1063d5007"),
       "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1",
   };
   // Round-trip each test example.
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
-    const string& encodedFixture(test_table[i]);
-    const string& decodedFixture(test_table[i + 1]);
+    const SpdyString& encodedFixture(test_table[i]);
+    const SpdyString& decodedFixture(test_table[i + 1]);
     DecodeStringTwice(encodedFixture, &buffer);
     EXPECT_EQ(decodedFixture, buffer);
     buffer = EncodeString(decodedFixture);
@@ -412,8 +414,8 @@
     char c = static_cast<char>(i);
     char storage[3] = {c, c, c};
     SpdyStringPiece input(storage, arraysize(storage));
-    string buffer_in = EncodeString(input);
-    string buffer_out;
+    SpdyString buffer_in = EncodeString(input);
+    SpdyString buffer_out;
     DecodeStringTwice(buffer_in, &buffer_out);
     EXPECT_EQ(input, buffer_out);
   }
@@ -427,21 +429,21 @@
   }
   SpdyStringPiece input(storage, arraysize(storage));
 
-  string buffer_in = EncodeString(input);
-  string buffer_out;
+  SpdyString buffer_in = EncodeString(input);
+  SpdyString buffer_out;
   DecodeStringTwice(buffer_in, &buffer_out);
   EXPECT_EQ(input, buffer_out);
 }
 
 TEST_F(HpackHuffmanTableTest, EncodedSizeAgreesWithEncodeString) {
-  string test_table[] = {
+  SpdyString test_table[] = {
       "",
       "Mon, 21 Oct 2013 20:13:21 GMT",
       "https://www.example.com",
       "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1",
-      string(1, '\0'),
-      string("foo\0bar", 7),
-      string(256, '\0'),
+      SpdyString(1, '\0'),
+      SpdyString("foo\0bar", 7),
+      SpdyString(256, '\0'),
   };
   for (size_t i = 0; i != 256; ++i) {
     // Expand last |test_table| entry to cover all codes.
@@ -449,7 +451,7 @@
   }
 
   HpackOutputStream output_stream;
-  string encoding;
+  SpdyString encoding;
   for (size_t i = 0; i != arraysize(test_table); ++i) {
     table_.EncodeString(test_table[i], &output_stream);
     output_stream.TakeString(&encoding);
diff --git a/src/net/spdy/hpack/hpack_input_stream.cc b/src/net/spdy/hpack/hpack_input_stream.cc
index 0d0dfc2..9cc27f5 100644
--- a/src/net/spdy/hpack/hpack_input_stream.cc
+++ b/src/net/spdy/hpack/hpack_input_stream.cc
@@ -12,8 +12,6 @@
 
 namespace net {
 
-using std::string;
-
 HpackInputStream::HpackInputStream(SpdyStringPiece buffer)
     : buffer_(buffer),
       bit_offset_(0),
@@ -135,7 +133,7 @@
   return true;
 }
 
-bool HpackInputStream::DecodeNextHuffmanString(string* str) {
+bool HpackInputStream::DecodeNextHuffmanString(SpdyString* str) {
   uint32_t encoded_size = 0;
   if (!DecodeNextUint32(&encoded_size)) {
     if (!need_more_data_) {
diff --git a/src/net/spdy/hpack/hpack_input_stream.h b/src/net/spdy/hpack/hpack_input_stream.h
index 6104121..5eff562 100644
--- a/src/net/spdy/hpack/hpack_input_stream.h
+++ b/src/net/spdy/hpack/hpack_input_stream.h
@@ -8,13 +8,13 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <string>
 #include <utility>
 
 #include "base/macros.h"
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_constants.h"
 #include "net/spdy/hpack/hpack_huffman_table.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 // All section references below are to
@@ -49,7 +49,7 @@
 
   bool DecodeNextUint32(uint32_t* I);
   bool DecodeNextIdentityString(SpdyStringPiece* str);
-  bool DecodeNextHuffmanString(std::string* str);
+  bool DecodeNextHuffmanString(SpdyString* str);
 
   // Stores input bits into the most-significant, unfilled bits of |out|.
   // |peeked_count| is the number of filled bits in |out| which have been
diff --git a/src/net/spdy/hpack/hpack_input_stream_test.cc b/src/net/spdy/hpack/hpack_input_stream_test.cc
index 96e9e2c..7f1df80 100644
--- a/src/net/spdy/hpack/hpack_input_stream_test.cc
+++ b/src/net/spdy/hpack/hpack_input_stream_test.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/hpack/hpack_input_stream.h"
 
 #include <bitset>
-#include <string>
 #include <vector>
 
 #include "base/logging.h"
@@ -18,7 +17,6 @@
 
 namespace test {
 
-using std::string;
 using test::a2b_hex;
 
 // Hex representation of encoded length and Huffman string.
@@ -73,7 +71,7 @@
   EXPECT_FALSE(input_stream.DecodeNextUint32(&I));
 }
 
-uint32_t bits32(const string& bitstring) {
+uint32_t bits32(const SpdyString& bitstring) {
   return std::bitset<32>(bitstring).to_ulong();
 }
 
@@ -83,7 +81,7 @@
 
 TEST(HpackInputStreamTest, OneByteIntegersEightBitPrefix) {
   // Minimum.
-  EXPECT_EQ(0x00u, DecodeValidUint32(8, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(8, SpdyString("\x00", 1)));
   EXPECT_EQ(0x7fu, DecodeValidUint32(8, "\x7f"));
   // Maximum.
   EXPECT_EQ(0xfeu, DecodeValidUint32(8, "\xfe"));
@@ -93,7 +91,7 @@
 
 TEST(HpackInputStreamTest, TwoByteIntegersEightBitPrefix) {
   // Minimum.
-  EXPECT_EQ(0xffu, DecodeValidUint32(8, string("\xff\x00", 2)));
+  EXPECT_EQ(0xffu, DecodeValidUint32(8, SpdyString("\xff\x00", 2)));
   EXPECT_EQ(0x0100u, DecodeValidUint32(8, "\xff\x01"));
   // Maximum.
   EXPECT_EQ(0x017eu, DecodeValidUint32(8, "\xff\x7f"));
@@ -166,19 +164,19 @@
 
 TEST(HpackInputStreamTest, OneByteIntegersOneToSevenBitPrefixes) {
   // Minimums.
-  EXPECT_EQ(0x00u, DecodeValidUint32(7, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(7, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(7, "\x80"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(6, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(6, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(6, "\xc0"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(5, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(5, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(5, "\xe0"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(4, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(4, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(4, "\xf0"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(3, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(3, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(3, "\xf8"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(2, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(2, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(2, "\xfc"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(1, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(1, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe"));
 
   // Maximums.
@@ -194,7 +192,7 @@
   EXPECT_EQ(0x06u, DecodeValidUint32(3, "\xfe"));
   EXPECT_EQ(0x02u, DecodeValidUint32(2, "\x02"));
   EXPECT_EQ(0x02u, DecodeValidUint32(2, "\xfe"));
-  EXPECT_EQ(0x00u, DecodeValidUint32(1, string("\x00", 1)));
+  EXPECT_EQ(0x00u, DecodeValidUint32(1, SpdyString("\x00", 1)));
   EXPECT_EQ(0x00u, DecodeValidUint32(1, "\xfe"));
 
   // Invalid.
@@ -216,20 +214,20 @@
 
 TEST(HpackInputStreamTest, TwoByteIntegersOneToSevenBitPrefixes) {
   // Minimums.
-  EXPECT_EQ(0x7fu, DecodeValidUint32(7, string("\x7f\x00", 2)));
-  EXPECT_EQ(0x7fu, DecodeValidUint32(7, string("\xff\x00", 2)));
-  EXPECT_EQ(0x3fu, DecodeValidUint32(6, string("\x3f\x00", 2)));
-  EXPECT_EQ(0x3fu, DecodeValidUint32(6, string("\xff\x00", 2)));
-  EXPECT_EQ(0x1fu, DecodeValidUint32(5, string("\x1f\x00", 2)));
-  EXPECT_EQ(0x1fu, DecodeValidUint32(5, string("\xff\x00", 2)));
-  EXPECT_EQ(0x0fu, DecodeValidUint32(4, string("\x0f\x00", 2)));
-  EXPECT_EQ(0x0fu, DecodeValidUint32(4, string("\xff\x00", 2)));
-  EXPECT_EQ(0x07u, DecodeValidUint32(3, string("\x07\x00", 2)));
-  EXPECT_EQ(0x07u, DecodeValidUint32(3, string("\xff\x00", 2)));
-  EXPECT_EQ(0x03u, DecodeValidUint32(2, string("\x03\x00", 2)));
-  EXPECT_EQ(0x03u, DecodeValidUint32(2, string("\xff\x00", 2)));
-  EXPECT_EQ(0x01u, DecodeValidUint32(1, string("\x01\x00", 2)));
-  EXPECT_EQ(0x01u, DecodeValidUint32(1, string("\xff\x00", 2)));
+  EXPECT_EQ(0x7fu, DecodeValidUint32(7, SpdyString("\x7f\x00", 2)));
+  EXPECT_EQ(0x7fu, DecodeValidUint32(7, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x3fu, DecodeValidUint32(6, SpdyString("\x3f\x00", 2)));
+  EXPECT_EQ(0x3fu, DecodeValidUint32(6, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x1fu, DecodeValidUint32(5, SpdyString("\x1f\x00", 2)));
+  EXPECT_EQ(0x1fu, DecodeValidUint32(5, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x0fu, DecodeValidUint32(4, SpdyString("\x0f\x00", 2)));
+  EXPECT_EQ(0x0fu, DecodeValidUint32(4, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x07u, DecodeValidUint32(3, SpdyString("\x07\x00", 2)));
+  EXPECT_EQ(0x07u, DecodeValidUint32(3, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x03u, DecodeValidUint32(2, SpdyString("\x03\x00", 2)));
+  EXPECT_EQ(0x03u, DecodeValidUint32(2, SpdyString("\xff\x00", 2)));
+  EXPECT_EQ(0x01u, DecodeValidUint32(1, SpdyString("\x01\x00", 2)));
+  EXPECT_EQ(0x01u, DecodeValidUint32(1, SpdyString("\xff\x00", 2)));
 
   // Maximums.
   EXPECT_EQ(0xfeu, DecodeValidUint32(7, "\x7f\x7f"));
@@ -517,7 +515,7 @@
 }
 
 TEST(HpackInputStreamTest, DecodeNextHuffmanString) {
-  string output, input(a2b_hex(kEncodedHuffmanFixture));
+  SpdyString output, input(a2b_hex(kEncodedHuffmanFixture));
   HpackInputStream input_stream(input);
   HpackInputStreamPeer input_stream_peer(&input_stream);
 
@@ -530,7 +528,7 @@
 }
 
 TEST(HpackInputStreamTest, DecodeNextHuffmanStringNotEnoughInput) {
-  string output, input(a2b_hex(kEncodedHuffmanFixture));
+  SpdyString output, input(a2b_hex(kEncodedHuffmanFixture));
   input[0]++;  // Input prefix is one byte larger than available input.
   HpackInputStream input_stream(input);
 
@@ -761,7 +759,7 @@
 }
 
 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextHuffmanString) {
-  string output, input(a2b_hex(kEncodedHuffmanFixture));
+  SpdyString output, input(a2b_hex(kEncodedHuffmanFixture));
   input.resize(input.size() - 1);  // Remove last byte.
   HpackInputStream input_stream1(input);
   HpackInputStreamPeer input_stream1_peer(&input_stream1);
diff --git a/src/net/spdy/hpack/hpack_output_stream.cc b/src/net/spdy/hpack/hpack_output_stream.cc
index 86f0f5b..c3673cb 100644
--- a/src/net/spdy/hpack/hpack_output_stream.cc
+++ b/src/net/spdy/hpack/hpack_output_stream.cc
@@ -11,8 +11,6 @@
 
 namespace net {
 
-using std::string;
-
 HpackOutputStream::HpackOutputStream() : bit_offset_(0) {}
 
 HpackOutputStream::~HpackOutputStream() {}
@@ -65,7 +63,7 @@
   }
 }
 
-void HpackOutputStream::TakeString(string* output) {
+void HpackOutputStream::TakeString(SpdyString* output) {
   // This must hold, since all public functions cause the buffer to
   // end on a byte boundary.
   DCHECK_EQ(bit_offset_, 0u);
@@ -74,10 +72,10 @@
   bit_offset_ = 0;
 }
 
-void HpackOutputStream::BoundedTakeString(size_t max_size, string* output) {
+void HpackOutputStream::BoundedTakeString(size_t max_size, SpdyString* output) {
   if (buffer_.size() > max_size) {
     // Save off overflow bytes to temporary string (causes a copy).
-    string overflow(buffer_.data() + max_size, buffer_.size() - max_size);
+    SpdyString overflow(buffer_.data() + max_size, buffer_.size() - max_size);
 
     // Resize buffer down to the given limit.
     buffer_.resize(max_size);
diff --git a/src/net/spdy/hpack/hpack_output_stream.h b/src/net/spdy/hpack/hpack_output_stream.h
index fe252ec..2748540 100644
--- a/src/net/spdy/hpack/hpack_output_stream.h
+++ b/src/net/spdy/hpack/hpack_output_stream.h
@@ -9,11 +9,11 @@
 #include <stdint.h>
 
 #include <map>
-#include <string>
 
 #include "base/macros.h"
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_constants.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 // All section references below are to
@@ -25,7 +25,7 @@
 // header fields.
 class NET_EXPORT_PRIVATE HpackOutputStream {
  public:
-  explicit HpackOutputStream();
+  HpackOutputStream();
   ~HpackOutputStream();
 
   // Appends the lower |bit_size| bits of |bits| to the internal buffer.
@@ -50,11 +50,11 @@
   void AppendUint32(uint32_t I);
 
   // Swaps the internal buffer with |output|, then resets state.
-  void TakeString(std::string* output);
+  void TakeString(SpdyString* output);
 
   // Gives up to |max_size| bytes of the internal buffer to |output|. Resets
   // internal state with the overflow.
-  void BoundedTakeString(size_t max_size, std::string* output);
+  void BoundedTakeString(size_t max_size, SpdyString* output);
 
   // Size in bytes of stream's internal buffer.
   size_t size() const { return buffer_.size(); }
@@ -64,7 +64,7 @@
 
  private:
   // The internal bit buffer.
-  std::string buffer_;
+  SpdyString buffer_;
 
   // If 0, the buffer ends on a byte boundary. If non-zero, the buffer
   // ends on the nth most significant bit. Guaranteed to be < 8.
diff --git a/src/net/spdy/hpack/hpack_output_stream_test.cc b/src/net/spdy/hpack/hpack_output_stream_test.cc
index aa09640..13af4e4 100644
--- a/src/net/spdy/hpack/hpack_output_stream_test.cc
+++ b/src/net/spdy/hpack/hpack_output_stream_test.cc
@@ -12,13 +12,11 @@
 
 namespace {
 
-using std::string;
-
 // Make sure that AppendBits() appends bits starting from the most
 // significant bit, and that it can handle crossing a byte boundary.
 TEST(HpackOutputStreamTest, AppendBits) {
   HpackOutputStream output_stream;
-  string expected_str;
+  SpdyString expected_str;
 
   output_stream.AppendBits(0x1, 1);
   expected_str.append(1, 0x00);
@@ -39,20 +37,20 @@
 
   output_stream.AppendBits(0x0, 7);
 
-  string str;
+  SpdyString str;
   output_stream.TakeString(&str);
   EXPECT_EQ(expected_str, str);
 }
 
 // Utility function to return I as a string encoded with an N-bit
 // prefix.
-string EncodeUint32(uint8_t N, uint32_t I) {
+SpdyString EncodeUint32(uint8_t N, uint32_t I) {
   HpackOutputStream output_stream;
   if (N < 8) {
     output_stream.AppendBits(0x00, 8 - N);
   }
   output_stream.AppendUint32(I);
-  string str;
+  SpdyString str;
   output_stream.TakeString(&str);
   return str;
 }
@@ -63,7 +61,7 @@
 
 TEST(HpackOutputStreamTest, OneByteIntegersEightBitPrefix) {
   // Minimum.
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(8, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(8, 0x00));
   EXPECT_EQ("\x7f", EncodeUint32(8, 0x7f));
   // Maximum.
   EXPECT_EQ("\xfe", EncodeUint32(8, 0xfe));
@@ -71,7 +69,7 @@
 
 TEST(HpackOutputStreamTest, TwoByteIntegersEightBitPrefix) {
   // Minimum.
-  EXPECT_EQ(string("\xff\x00", 2), EncodeUint32(8, 0xff));
+  EXPECT_EQ(SpdyString("\xff\x00", 2), EncodeUint32(8, 0xff));
   EXPECT_EQ("\xff\x01", EncodeUint32(8, 0x0100));
   // Maximum.
   EXPECT_EQ("\xff\x7f", EncodeUint32(8, 0x017e));
@@ -114,13 +112,13 @@
 
 TEST(HpackOutputStreamTest, OneByteIntegersOneToSevenBitPrefixes) {
   // Minimums.
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(7, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(6, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(5, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(4, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(3, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(2, 0x00));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(1, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(7, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(6, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(5, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(4, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(3, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(2, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(1, 0x00));
 
   // Maximums.
   EXPECT_EQ("\x7e", EncodeUint32(7, 0x7e));
@@ -129,18 +127,18 @@
   EXPECT_EQ("\x0e", EncodeUint32(4, 0x0e));
   EXPECT_EQ("\x06", EncodeUint32(3, 0x06));
   EXPECT_EQ("\x02", EncodeUint32(2, 0x02));
-  EXPECT_EQ(string("\x00", 1), EncodeUint32(1, 0x00));
+  EXPECT_EQ(SpdyString("\x00", 1), EncodeUint32(1, 0x00));
 }
 
 TEST(HpackOutputStreamTest, TwoByteIntegersOneToSevenBitPrefixes) {
   // Minimums.
-  EXPECT_EQ(string("\x7f\x00", 2), EncodeUint32(7, 0x7f));
-  EXPECT_EQ(string("\x3f\x00", 2), EncodeUint32(6, 0x3f));
-  EXPECT_EQ(string("\x1f\x00", 2), EncodeUint32(5, 0x1f));
-  EXPECT_EQ(string("\x0f\x00", 2), EncodeUint32(4, 0x0f));
-  EXPECT_EQ(string("\x07\x00", 2), EncodeUint32(3, 0x07));
-  EXPECT_EQ(string("\x03\x00", 2), EncodeUint32(2, 0x03));
-  EXPECT_EQ(string("\x01\x00", 2), EncodeUint32(1, 0x01));
+  EXPECT_EQ(SpdyString("\x7f\x00", 2), EncodeUint32(7, 0x7f));
+  EXPECT_EQ(SpdyString("\x3f\x00", 2), EncodeUint32(6, 0x3f));
+  EXPECT_EQ(SpdyString("\x1f\x00", 2), EncodeUint32(5, 0x1f));
+  EXPECT_EQ(SpdyString("\x0f\x00", 2), EncodeUint32(4, 0x0f));
+  EXPECT_EQ(SpdyString("\x07\x00", 2), EncodeUint32(3, 0x07));
+  EXPECT_EQ(SpdyString("\x03\x00", 2), EncodeUint32(2, 0x03));
+  EXPECT_EQ(SpdyString("\x01\x00", 2), EncodeUint32(1, 0x01));
 
   // Maximums.
   EXPECT_EQ("\x7f\x7f", EncodeUint32(7, 0xfe));
@@ -238,9 +236,9 @@
   HpackOutputStream output_stream;
   output_stream.AppendBits(0x7f, 7);
   output_stream.AppendUint32(0x01);
-  string str;
+  SpdyString str;
   output_stream.TakeString(&str);
-  EXPECT_EQ(string("\xff\x00", 2), str);
+  EXPECT_EQ(SpdyString("\xff\x00", 2), str);
 }
 
 TEST(HpackOutputStreamTest, AppendBytes) {
@@ -249,7 +247,7 @@
   output_stream.AppendBytes("buffer1");
   output_stream.AppendBytes("buffer2");
 
-  string str;
+  SpdyString str;
   output_stream.TakeString(&str);
   EXPECT_EQ("buffer1buffer2", str);
 }
@@ -260,7 +258,7 @@
   output_stream.AppendBytes("buffer12");
   output_stream.AppendBytes("buffer456");
 
-  string str;
+  SpdyString str;
   output_stream.BoundedTakeString(9, &str);
   EXPECT_EQ("buffer12b", str);
 
diff --git a/src/net/spdy/hpack/hpack_round_trip_test.cc b/src/net/spdy/hpack/hpack_round_trip_test.cc
index b932cff..e8756db 100644
--- a/src/net/spdy/hpack/hpack_round_trip_test.cc
+++ b/src/net/spdy/hpack/hpack_round_trip_test.cc
@@ -4,21 +4,19 @@
 
 #include <cmath>
 #include <ctime>
-#include <string>
 #include <vector>
 
 #include "base/rand_util.h"
 #include "net/spdy/hpack/hpack_constants.h"
 #include "net/spdy/hpack/hpack_decoder.h"
 #include "net/spdy/hpack/hpack_encoder.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 
-using std::string;
-
 namespace {
 
 // Supports testing with the input split at every byte boundary.
@@ -35,7 +33,7 @@
   }
 
   bool RoundTrip(const SpdyHeaderBlock& header_set) {
-    string encoded;
+    SpdyString encoded;
     encoder_.EncodeHeaderSet(header_set, &encoded);
 
     bool success = true;
@@ -110,7 +108,7 @@
     headers["set-cookie"] =
         "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU;"
         " max-age=3600; version=1";
-    headers["multivalue"] = string("foo\0bar", 7);
+    headers["multivalue"] = SpdyString("foo\0bar", 7);
     EXPECT_TRUE(RoundTrip(headers));
   }
 }
@@ -143,7 +141,7 @@
     headers[":scheme"] = "https";
     headers["custom-key"] = "custom-value";
     headers["cookie"] = "baz=bing; fizzle=fazzle; garbage";
-    headers["multivalue"] = string("foo\0bar", 7);
+    headers["multivalue"] = SpdyString("foo\0bar", 7);
     EXPECT_TRUE(RoundTrip(headers));
   }
 }
@@ -152,7 +150,7 @@
   // Grow vectors of names & values, which are seeded with fixtures and then
   // expanded with dynamically generated data. Samples are taken using the
   // exponential distribution.
-  std::vector<string> pseudo_header_names, random_header_names;
+  std::vector<SpdyString> pseudo_header_names, random_header_names;
   pseudo_header_names.push_back(":authority");
   pseudo_header_names.push_back(":path");
   pseudo_header_names.push_back(":status");
@@ -160,7 +158,7 @@
   // TODO(jgraettinger): Enable "cookie" as a name fixture. Crumbs may be
   // reconstructed in any order, which breaks the simple validation used here.
 
-  std::vector<string> values;
+  std::vector<SpdyString> values;
   values.push_back("/");
   values.push_back("/index.html");
   values.push_back("200");
@@ -183,7 +181,7 @@
         std::min(header_count, 1 + SampleExponential(7, 50));
     EXPECT_LE(pseudo_header_count, header_count);
     for (size_t j = 0; j != header_count; ++j) {
-      string name, value;
+      SpdyString name, value;
       // Pseudo headers must be added before regular headers.
       if (j < pseudo_header_count) {
         // Choose one of the defined pseudo headers at random.
@@ -207,7 +205,7 @@
       // Randomly reuse an existing value, or generate a new one.
       size_t value_index = SampleExponential(20, 200);
       if (value_index >= values.size()) {
-        string newvalue =
+        SpdyString newvalue =
             base::RandBytesAsString(1 + SampleExponential(15, 75));
         // Currently order is not preserved in the encoder.  In particular,
         // when a value is decomposed at \0 delimiters, its parts might get
diff --git a/src/net/spdy/http2_frame_decoder_adapter.cc b/src/net/spdy/http2_frame_decoder_adapter.cc
index 0c9ddd2..8b74e6e 100644
--- a/src/net/spdy/http2_frame_decoder_adapter.cc
+++ b/src/net/spdy/http2_frame_decoder_adapter.cc
@@ -13,7 +13,6 @@
 
 #include <cstdint>
 #include <cstring>
-#include <string>
 #include <utility>
 
 #include "base/logging.h"
@@ -28,6 +27,7 @@
 #include "net/spdy/hpack/hpack_decoder_interface.h"
 #include "net/spdy/hpack/hpack_header_table.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_alt_svc_wire_format.h"
 #include "net/spdy/spdy_bug_tracker.h"
 #include "net/spdy/spdy_frame_builder.h"
@@ -35,8 +35,6 @@
 #include "net/spdy/spdy_headers_handler_interface.h"
 #include "net/spdy/spdy_protocol.h"
 
-using std::string;
-
 namespace net {
 
 namespace {
@@ -95,6 +93,10 @@
   // the other virtual methods of SpdyFramerDecoderAdapter have satsifactory
   // default implementations.
 
+  void set_extension_visitor(ExtensionVisitorInterface* visitor) override {
+    extension_ = visitor;
+  }
+
   // Passes the call on to the HPACK decoder.
   void SetDecoderHeaderTableDebugVisitor(
       std::unique_ptr<HpackHeaderTable::DebugVisitorInterface> visitor)
@@ -162,23 +164,28 @@
     const uint8_t raw_frame_type = static_cast<uint8_t>(header.type);
     visitor()->OnCommonHeader(header.stream_id, header.payload_length,
                               raw_frame_type, header.flags);
+    if (has_expected_frame_type_ && header.type != expected_frame_type_) {
+      // Report an unexpected frame error and close the connection if we
+      // expect a known frame type (probably CONTINUATION) and receive an
+      // unknown frame.
+      VLOG(1) << "The framer was expecting to receive a "
+              << expected_frame_type_
+              << " frame, but instead received an unknown frame of type "
+              << header.type;
+      SetSpdyErrorAndNotify(SpdyFramerError::SPDY_UNEXPECTED_FRAME);
+      return false;
+    }
     if (!IsSupportedHttp2FrameType(header.type)) {
+      if (extension_ != nullptr) {
+        // Unknown frames will be passed to the registered extension.
+        return true;
+      }
       // In HTTP2 we ignore unknown frame types for extensibility, as long as
       // the rest of the control frame header is valid.
       // We rely on the visitor to check validity of stream_id.
       bool valid_stream =
           visitor()->OnUnknownFrame(header.stream_id, raw_frame_type);
-      if (has_expected_frame_type_ && header.type != expected_frame_type_) {
-        // Report an unexpected frame error and close the connection if we
-        // expect a known frame type (probably CONTINUATION) and receive an
-        // unknown frame.
-        VLOG(1) << "The framer was expecting to receive a "
-                << expected_frame_type_
-                << " frame, but instead received an unknown frame of type "
-                << header.type;
-        SetSpdyErrorAndNotify(SpdyFramerError::SPDY_UNEXPECTED_FRAME);
-        return false;
-      } else if (!valid_stream) {
+      if (!valid_stream) {
         // Report an invalid frame error if the stream_id is not valid.
         VLOG(1) << "Unknown control frame type " << header.type
                 << " received on invalid stream " << header.stream_id;
@@ -374,10 +381,14 @@
 
   void OnSetting(const Http2SettingFields& setting_fields) override {
     DVLOG(1) << "OnSetting: " << setting_fields;
+    const uint16_t parameter = static_cast<uint16_t>(setting_fields.parameter);
     SpdySettingsIds setting_id;
-    if (!ParseSettingsId(static_cast<uint16_t>(setting_fields.parameter),
-                         &setting_id)) {
-      DVLOG(1) << "Ignoring invalid setting id: " << setting_fields;
+    if (!ParseSettingsId(parameter, &setting_id)) {
+      if (extension_ == nullptr) {
+        DVLOG(1) << "Ignoring unknown setting id: " << setting_fields;
+      } else {
+        extension_->OnSetting(parameter, setting_fields.value);
+      }
       return;
     }
     visitor()->OnSetting(setting_id, setting_fields.value);
@@ -516,17 +527,32 @@
     alt_svc_value_.shrink_to_fit();
   }
 
-  // Except for BLOCKED frames, all other unknown frames are
-  // effectively dropped.
+  // Except for BLOCKED frames, all other unknown frames are either dropped or
+  // passed to a registered extension.
   void OnUnknownStart(const Http2FrameHeader& header) override {
     DVLOG(1) << "OnUnknownStart: " << header;
+    if (IsOkToStartFrame(header)) {
+      if (extension_ != nullptr) {
+        const uint8_t type = static_cast<uint8_t>(header.type);
+        const uint8_t flags = static_cast<uint8_t>(header.flags);
+        handling_extension_payload_ = extension_->OnFrameHeader(
+            header.stream_id, header.payload_length, type, flags);
+      }
+    }
   }
 
   void OnUnknownPayload(const char* data, size_t len) override {
-    DVLOG(1) << "OnUnknownPayload: len=" << len;
+    if (handling_extension_payload_) {
+      extension_->OnFramePayload(data, len);
+    } else {
+      DVLOG(1) << "OnUnknownPayload: len=" << len;
+    }
   }
 
-  void OnUnknownEnd() override { DVLOG(1) << "OnUnknownEnd"; }
+  void OnUnknownEnd() override {
+    DVLOG(1) << "OnUnknownEnd";
+    handling_extension_payload_ = false;
+  }
 
   void OnPaddingTooLong(const Http2FrameHeader& header,
                         size_t missing_length) override {
@@ -888,6 +914,9 @@
   // The SpdyFramer that created this Http2FrameDecoderAdapter.
   SpdyFramer* const outer_framer_;
 
+  // If non-null, unknown frames and settings are passed to the extension.
+  ExtensionVisitorInterface* extension_ = nullptr;
+
   // The HPACK decoder that we're using for the HPACK block that is currently
   // being decoded. Cleared at the end of the block. Owned by the SpdyFramer.
   HpackDecoderInterface* hpack_decoder_ = nullptr;
@@ -909,8 +938,8 @@
   base::Optional<size_t> opt_pad_length_;
 
   // Temporary buffers for the AltSvc fields.
-  string alt_svc_origin_;
-  string alt_svc_value_;
+  SpdyString alt_svc_origin_;
+  SpdyString alt_svc_value_;
 
   // Listener used if we transition to an error state; the listener ignores all
   // the callbacks.
@@ -957,6 +986,9 @@
 
   // Is expected_frame_type_ set?
   bool has_expected_frame_type_ = false;
+
+  // Is the current frame payload destined for |extension_|?
+  bool handling_extension_payload_ = false;
 };
 
 }  // namespace
diff --git a/src/net/spdy/http2_write_scheduler.h b/src/net/spdy/http2_write_scheduler.h
deleted file mode 100644
index 741169e..0000000
--- a/src/net/spdy/http2_write_scheduler.h
+++ /dev/null
@@ -1,752 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_SPDY_HTTP2_WRITE_SCHEDULER_H_
-#define NET_SPDY_HTTP2_WRITE_SCHEDULER_H_
-
-#include <stdint.h>
-
-#include <algorithm>
-#include <cmath>
-#include <deque>
-#include <map>
-#include <memory>
-#include <queue>
-#include <set>
-#include <tuple>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
-#include "base/containers/linked_list.h"
-#include "base/containers/small_map.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/stl_util.h"
-#include "net/spdy/spdy_bug_tracker.h"
-#include "net/spdy/spdy_protocol.h"
-#include "net/spdy/write_scheduler.h"
-
-namespace net {
-
-namespace test {
-template <typename StreamIdType>
-class Http2PriorityWriteSchedulerPeer;
-}
-
-// This data structure implements the HTTP/2 stream priority tree defined in
-// section 5.3 of RFC 7540:
-// http://tools.ietf.org/html/rfc7540#section-5.3
-//
-// Streams can be added and removed, and dependencies between them defined.
-// Streams constitute a tree rooted at stream ID 0: each stream has a single
-// parent stream, and 0 or more child streams.  Individual streams can be
-// marked as ready to read/write, and then the whole structure can be queried
-// to pick the next stream to read/write out of those that are ready.
-template <typename StreamIdType>
-class Http2PriorityWriteScheduler : public WriteScheduler<StreamIdType> {
- public:
-  using typename WriteScheduler<StreamIdType>::StreamPrecedenceType;
-
-  Http2PriorityWriteScheduler();
-
-  // WriteScheduler methods
-  void RegisterStream(StreamIdType stream_id,
-                      const StreamPrecedenceType& precedence) override;
-  void UnregisterStream(StreamIdType stream_id) override;
-  bool StreamRegistered(StreamIdType stream_id) const override;
-  StreamPrecedenceType GetStreamPrecedence(
-      StreamIdType stream_id) const override;
-  void UpdateStreamPrecedence(StreamIdType stream_id,
-                              const StreamPrecedenceType& precedence) override;
-  std::vector<StreamIdType> GetStreamChildren(
-      StreamIdType stream_id) const override;
-  void RecordStreamEventTime(StreamIdType stream_id,
-                             int64_t now_in_usec) override;
-  int64_t GetLatestEventWithPrecedence(StreamIdType stream_id) const override;
-  bool ShouldYield(StreamIdType stream_id) const override;
-  void MarkStreamReady(StreamIdType stream_id, bool add_to_front) override;
-  void MarkStreamNotReady(StreamIdType stream_id) override;
-  bool HasReadyStreams() const override;
-  StreamIdType PopNextReadyStream() override;
-  std::tuple<StreamIdType, StreamPrecedenceType>
-  PopNextReadyStreamAndPrecedence() override;
-  size_t NumReadyStreams() const override;
-
-  // Return the number of streams currently in the tree.
-  int num_streams() const;
-
- private:
-  friend class test::Http2PriorityWriteSchedulerPeer<StreamIdType>;
-
-  struct StreamInfo;
-  using StreamInfoVector = std::vector<StreamInfo*>;
-
-  struct StreamInfo : public base::LinkNode<StreamInfo> {
-    // ID for this stream.
-    StreamIdType id;
-    // StreamInfo for parent stream.
-    StreamInfo* parent = nullptr;
-    // Weights can range between 1 and 256 (inclusive).
-    int weight = kHttp2DefaultStreamWeight;
-    // The total weight of this stream's direct descendants.
-    int total_child_weights = 0;
-    // Pointers to StreamInfos for children, if any.
-    StreamInfoVector children;
-    // Whether the stream is ready for writing. The stream is present in
-    // scheduling_queue_ iff true.
-    bool ready = false;
-    // The scheduling priority of this stream. Streams with higher priority
-    // values are scheduled first.
-    // TODO(mpw): rename to avoid confusion with SPDY priorities,
-    //   which this is not.
-    float priority = 0;
-    // Ordinal value for this stream, used to ensure round-robin scheduling:
-    // among streams with the same scheduling priority, streams with lower
-    // ordinal are scheduled first.
-    int64_t ordinal = 0;
-    // Time of latest write event for stream of this priority, in microseconds.
-    int64_t last_event_time_usec = 0;
-
-    // Whether this stream should be scheduled ahead of another stream.
-    bool SchedulesBefore(const StreamInfo& other) const {
-      return (priority != other.priority) ? priority > other.priority
-                                          : ordinal < other.ordinal;
-    }
-
-    // Returns the StreamPrecedenceType for this StreamInfo.
-    StreamPrecedenceType ToStreamPrecedence() const {
-      StreamIdType parent_id =
-          parent == nullptr ? kHttp2RootStreamId : parent->id;
-      bool exclusive = parent != nullptr && parent->children.size() == 1;
-      return StreamPrecedenceType(parent_id, weight, exclusive);
-    }
-  };
-
-  static bool Remove(StreamInfoVector* stream_infos,
-                     const StreamInfo* stream_info);
-
-  // Returns true iff any direct or transitive parent of the given stream is
-  // currently ready.
-  static bool HasReadyAncestor(const StreamInfo& stream_info);
-
-  // Returns StreamInfo for the given stream, or nullptr if it isn't
-  // registered.
-  const StreamInfo* FindStream(StreamIdType stream_id) const;
-  StreamInfo* FindStream(StreamIdType stream_id);
-
-  // Helpers for UpdateStreamPrecedence().
-  void UpdateStreamParent(StreamInfo* stream_info,
-                          StreamIdType parent_id,
-                          bool exclusive);
-  void UpdateStreamWeight(StreamInfo* stream_info, int weight);
-
-  // Update all priority values in the subtree rooted at the given stream, not
-  // including the stream itself. If this results in priority value changes for
-  // scheduled streams, those streams are rescheduled to ensure proper ordering
-  // of scheduling_queue_.
-  // TODO(mpw): rename to avoid confusion with SPDY priorities.
-  void UpdatePrioritiesUnder(StreamInfo* stream_info);
-
-  // Inserts stream into scheduling_queue_ at the appropriate location given
-  // its priority and ordinal. Time complexity is O(scheduling_queue.size()).
-  void Schedule(StreamInfo* stream_info);
-
-  // Removes stream from scheduling_queue_.
-  void Unschedule(StreamInfo* stream_info);
-
-  // Return true if all internal invariants hold (useful for unit tests).
-  // Unless there are bugs, this should always return true.
-  bool ValidateInvariantsForTests() const;
-
-  // Returns true if the parent stream has the given stream in its children.
-  bool StreamHasChild(const StreamInfo& parent_info,
-                      const StreamInfo* child_info) const;
-
-  // Pointee owned by all_stream_infos_.
-  StreamInfo* root_stream_info_;
-  // Maps from stream IDs to StreamInfo objects.
-  base::SmallMap<std::unordered_map<StreamIdType, std::unique_ptr<StreamInfo>>,
-                 10>
-      all_stream_infos_;
-  // Queue containing all ready streams, ordered with streams of higher
-  // priority before streams of lower priority, and, among streams of equal
-  // priority, streams with lower ordinal before those with higher
-  // ordinal. Note that not all streams in scheduling_queue_ are eligible to be
-  // picked as the next stream: some may have ancestor stream(s) that are ready
-  // and unblocked. In these situations the occluded child streams are left in
-  // the queue, to reduce churn.
-  base::LinkedList<StreamInfo> scheduling_queue_;
-  // Ordinal value to assign to next node inserted into scheduling_queue_ when
-  // |add_to_front == true|. Decremented after each assignment.
-  int64_t head_ordinal_ = -1;
-  // Ordinal value to assign to next node inserted into scheduling_queue_ when
-  // |add_to_front == false|. Incremented after each assignment.
-  int64_t tail_ordinal_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(Http2PriorityWriteScheduler);
-};
-
-template <typename StreamIdType>
-Http2PriorityWriteScheduler<StreamIdType>::Http2PriorityWriteScheduler() {
-  std::unique_ptr<StreamInfo> root_stream_info = base::MakeUnique<StreamInfo>();
-  root_stream_info_ = root_stream_info.get();
-  root_stream_info->id = kHttp2RootStreamId;
-  root_stream_info->weight = kHttp2DefaultStreamWeight;
-  root_stream_info->parent = nullptr;
-  root_stream_info->priority = 1.0;
-  root_stream_info->ready = false;
-  all_stream_infos_[kHttp2RootStreamId] = std::move(root_stream_info);
-}
-
-template <typename StreamIdType>
-int Http2PriorityWriteScheduler<StreamIdType>::num_streams() const {
-  return all_stream_infos_.size();
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::StreamRegistered(
-    StreamIdType stream_id) const {
-  return base::ContainsKey(all_stream_infos_, stream_id);
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::RegisterStream(
-    StreamIdType stream_id,
-    const StreamPrecedenceType& precedence) {
-  SPDY_BUG_IF(precedence.is_spdy3_priority())
-      << "Expected HTTP/2 stream dependency";
-
-  if (StreamRegistered(stream_id)) {
-    SPDY_BUG << "Stream " << stream_id << " already registered";
-    return;
-  }
-
-  StreamInfo* parent = FindStream(precedence.parent_id());
-  if (parent == nullptr) {
-    // parent_id may legitimately not be registered yet--see b/15676312.
-    DVLOG(1) << "Parent stream " << precedence.parent_id() << " not registered";
-    parent = root_stream_info_;
-  }
-
-  std::unique_ptr<StreamInfo> new_stream_info = base::MakeUnique<StreamInfo>();
-  StreamInfo* new_stream_info_ptr = new_stream_info.get();
-  new_stream_info_ptr->id = stream_id;
-  new_stream_info_ptr->weight = precedence.weight();
-  new_stream_info_ptr->parent = parent;
-  all_stream_infos_[stream_id] = std::move(new_stream_info);
-  if (precedence.is_exclusive()) {
-    // Move the parent's current children below the new stream.
-    using std::swap;
-    swap(new_stream_info_ptr->children, parent->children);
-    new_stream_info_ptr->total_child_weights = parent->total_child_weights;
-    // Update each child's parent.
-    for (StreamInfo* child : new_stream_info_ptr->children) {
-      child->parent = new_stream_info_ptr;
-    }
-    // Clear parent's old child data.
-    DCHECK(parent->children.empty());
-    parent->total_child_weights = 0;
-  }
-  // Add new stream to parent.
-  parent->children.push_back(new_stream_info_ptr);
-  parent->total_child_weights += precedence.weight();
-
-  // Update all priorities under parent, since addition of a stream affects
-  // sibling priorities as well.
-  UpdatePrioritiesUnder(parent);
-
-  // Stream starts with ready == false, so no need to schedule it yet.
-  DCHECK(!new_stream_info_ptr->ready);
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::UnregisterStream(
-    StreamIdType stream_id) {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Cannot unregister root stream";
-    return;
-  }
-  // Remove the stream from table.
-  auto it = all_stream_infos_.find(stream_id);
-  if (it == all_stream_infos_.end()) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return;
-  }
-  std::unique_ptr<StreamInfo> stream_info(std::move(it->second));
-  all_stream_infos_.erase(it);
-  // If ready (and hence scheduled), unschedule.
-  if (stream_info->ready) {
-    Unschedule(stream_info.get());
-  }
-
-  StreamInfo* parent = stream_info->parent;
-  // Remove the stream from parent's child list.
-  Remove(&parent->children, stream_info.get());
-  parent->total_child_weights -= stream_info->weight;
-
-  // Move the stream's children to the parent's child list.
-  // Update each child's parent and weight.
-  for (StreamInfo* child : stream_info->children) {
-    child->parent = parent;
-    parent->children.push_back(child);
-    // Divide the removed stream's weight among its children, rounding to the
-    // nearest valid weight.
-    float float_weight = stream_info->weight *
-                         static_cast<float>(child->weight) /
-                         static_cast<float>(stream_info->total_child_weights);
-    int new_weight = floor(float_weight + 0.5);
-    if (new_weight == 0) {
-      new_weight = 1;
-    }
-    child->weight = new_weight;
-    parent->total_child_weights += child->weight;
-  }
-  UpdatePrioritiesUnder(parent);
-}
-
-template <typename StreamIdType>
-typename Http2PriorityWriteScheduler<StreamIdType>::StreamPrecedenceType
-Http2PriorityWriteScheduler<StreamIdType>::GetStreamPrecedence(
-    StreamIdType stream_id) const {
-  const StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    // Unknown streams tolerated due to b/15676312. However, return lowest
-    // weight.
-    DVLOG(1) << "Stream " << stream_id << " not registered";
-    return StreamPrecedenceType(kHttp2RootStreamId, kHttp2MinStreamWeight,
-                                false);
-  }
-  return stream_info->ToStreamPrecedence();
-}
-
-template <typename StreamIdType>
-std::vector<StreamIdType> Http2PriorityWriteScheduler<
-    StreamIdType>::GetStreamChildren(StreamIdType stream_id) const {
-  std::vector<StreamIdType> child_vec;
-  const StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-  } else {
-    child_vec.reserve(stream_info->children.size());
-    for (StreamInfo* child : stream_info->children) {
-      child_vec.push_back(child->id);
-    }
-  }
-  return child_vec;
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::UpdateStreamPrecedence(
-    StreamIdType stream_id,
-    const StreamPrecedenceType& precedence) {
-  SPDY_BUG_IF(precedence.is_spdy3_priority())
-      << "Expected HTTP/2 stream dependency";
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Cannot set precedence of root stream";
-    return;
-  }
-
-  StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    // TODO(mpw): add to all_stream_infos_ on demand--see b/15676312.
-    DVLOG(1) << "Stream " << stream_id << " not registered";
-    return;
-  }
-  UpdateStreamParent(stream_info, precedence.parent_id(),
-                     precedence.is_exclusive());
-  UpdateStreamWeight(stream_info, precedence.weight());
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::UpdateStreamWeight(
-    StreamInfo* stream_info,
-    int weight) {
-  if (weight == stream_info->weight) {
-    return;
-  }
-  if (stream_info->parent != nullptr) {
-    stream_info->parent->total_child_weights += (weight - stream_info->weight);
-  }
-  stream_info->weight = weight;
-
-  // Change in weight also affects sibling priorities.
-  UpdatePrioritiesUnder(stream_info->parent);
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::UpdateStreamParent(
-    StreamInfo* stream_info,
-    StreamIdType parent_id,
-    bool exclusive) {
-  if (stream_info->id == parent_id) {
-    SPDY_BUG << "Cannot set stream to be its own parent";
-    return;
-  }
-  StreamInfo* new_parent = FindStream(parent_id);
-  if (new_parent == nullptr) {
-    // parent_id may legitimately not be registered yet--see b/15676312.
-    DVLOG(1) << "Parent stream " << parent_id << " not registered";
-    return;
-  }
-
-  // If the new parent is already the stream's parent, we're done.
-  if (stream_info->parent == new_parent) {
-    return;
-  }
-
-  // Next, check to see if the new parent is currently a descendant
-  // of the stream.
-  StreamInfo* last = new_parent->parent;
-  bool cycle_exists = false;
-  while (last != nullptr) {
-    if (last == stream_info) {
-      cycle_exists = true;
-      break;
-    }
-    last = last->parent;
-  }
-
-  if (cycle_exists) {
-    // The new parent moves to the level of the current stream.
-    UpdateStreamParent(new_parent, stream_info->parent->id, false);
-  }
-
-  // Remove stream from old parent's child list.
-  StreamInfo* old_parent = stream_info->parent;
-  Remove(&old_parent->children, stream_info);
-  old_parent->total_child_weights -= stream_info->weight;
-  UpdatePrioritiesUnder(old_parent);
-
-  if (exclusive) {
-    // Move the new parent's current children below the current stream.
-    for (StreamInfo* child : new_parent->children) {
-      child->parent = stream_info;
-      stream_info->children.push_back(child);
-    }
-    stream_info->total_child_weights += new_parent->total_child_weights;
-    // Clear new parent's old child data.
-    new_parent->children.clear();
-    new_parent->total_child_weights = 0;
-  }
-
-  // Make the change.
-  stream_info->parent = new_parent;
-  new_parent->children.push_back(stream_info);
-  new_parent->total_child_weights += stream_info->weight;
-  UpdatePrioritiesUnder(new_parent);
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::RecordStreamEventTime(
-    StreamIdType stream_id,
-    int64_t now_in_usec) {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Cannot record event time for root stream";
-    return;
-  }
-  StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return;
-  }
-  stream_info->last_event_time_usec = now_in_usec;
-}
-
-// O(n) in the number of streams, which isn't great. However, this method will
-// soon be superseded by
-// Http2WeightedWriteScheduler::GetLatestEventWithPrecedence(), for which an
-// efficient implementation is straightforward. Also, this method is only
-// called when calculating idle timeouts, so performance isn't key.
-template <typename StreamIdType>
-int64_t Http2PriorityWriteScheduler<StreamIdType>::GetLatestEventWithPrecedence(
-    StreamIdType stream_id) const {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Invalid argument: root stream";
-    return 0;
-  }
-  const StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return 0;
-  }
-  int64_t last_event_time_usec = 0;
-  for (const auto& kv : all_stream_infos_) {
-    const StreamInfo& other = *kv.second;
-    if (other.priority > stream_info->priority) {
-      last_event_time_usec =
-          std::max(last_event_time_usec, other.last_event_time_usec);
-    }
-  }
-  return last_event_time_usec;
-}
-
-// Worst-case time complexity of O(n*d), where n is scheduling queue length and
-// d is tree depth. In practice, should be much shorter, since loop terminates
-// at first writable stream or |stream_id| (whichever is first).
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::ShouldYield(
-    StreamIdType stream_id) const {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Invalid argument: root stream";
-    return false;
-  }
-  const StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return false;
-  }
-  for (base::LinkNode<StreamInfo>* s = scheduling_queue_.head();
-       s != scheduling_queue_.end(); s = s->next()) {
-    if (stream_info == s->value()) {
-      return false;
-    }
-    if (!HasReadyAncestor(*s->value())) {
-      return true;
-    }
-  }
-  return false;
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::MarkStreamReady(
-    StreamIdType stream_id,
-    bool add_to_front) {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Cannot mark root stream ready";
-    return;
-  }
-  StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return;
-  }
-  if (stream_info->ready) {
-    return;
-  }
-  stream_info->ordinal = add_to_front ? head_ordinal_-- : tail_ordinal_++;
-  Schedule(stream_info);
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::MarkStreamNotReady(
-    StreamIdType stream_id) {
-  if (stream_id == kHttp2RootStreamId) {
-    SPDY_BUG << "Cannot mark root stream unready";
-    return;
-  }
-  StreamInfo* stream_info = FindStream(stream_id);
-  if (stream_info == nullptr) {
-    SPDY_BUG << "Stream " << stream_id << " not registered";
-    return;
-  }
-  if (!stream_info->ready) {
-    return;
-  }
-  Unschedule(stream_info);
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::Remove(
-    StreamInfoVector* stream_infos,
-    const StreamInfo* stream_info) {
-  for (typename StreamInfoVector::iterator it = stream_infos->begin();
-       it != stream_infos->end(); ++it) {
-    if (*it == stream_info) {
-      stream_infos->erase(it);
-      return true;
-    }
-  }
-  return false;
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::HasReadyAncestor(
-    const StreamInfo& stream_info) {
-  for (const StreamInfo* parent = stream_info.parent; parent != nullptr;
-       parent = parent->parent) {
-    if (parent->ready) {
-      return true;
-    }
-  }
-  return false;
-}
-
-template <typename StreamIdType>
-const typename Http2PriorityWriteScheduler<StreamIdType>::StreamInfo*
-Http2PriorityWriteScheduler<StreamIdType>::FindStream(
-    StreamIdType stream_id) const {
-  auto it = all_stream_infos_.find(stream_id);
-  return it == all_stream_infos_.end() ? nullptr : it->second.get();
-}
-
-template <typename StreamIdType>
-typename Http2PriorityWriteScheduler<StreamIdType>::StreamInfo*
-Http2PriorityWriteScheduler<StreamIdType>::FindStream(StreamIdType stream_id) {
-  auto it = all_stream_infos_.find(stream_id);
-  return it == all_stream_infos_.end() ? nullptr : it->second.get();
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::UpdatePrioritiesUnder(
-    StreamInfo* stream_info) {
-  for (StreamInfo* child : stream_info->children) {
-    child->priority = stream_info->priority *
-                      (static_cast<float>(child->weight) /
-                       static_cast<float>(stream_info->total_child_weights));
-    if (child->ready) {
-      // Reposition in scheduling_queue_. Use post-order for scheduling, to
-      // benefit from the fact that children have priority <= parent priority.
-      Unschedule(child);
-      UpdatePrioritiesUnder(child);
-      Schedule(child);
-    } else {
-      UpdatePrioritiesUnder(child);
-    }
-  }
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::Schedule(
-    StreamInfo* stream_info) {
-  DCHECK(!stream_info->ready);
-  for (base::LinkNode<StreamInfo>* s = scheduling_queue_.head();
-       s != scheduling_queue_.end(); s = s->next()) {
-    if (stream_info->SchedulesBefore(*s->value())) {
-      stream_info->InsertBefore(s);
-      stream_info->ready = true;
-      return;
-    }
-  }
-  stream_info->InsertAfter(scheduling_queue_.tail());
-  stream_info->ready = true;
-}
-
-template <typename StreamIdType>
-void Http2PriorityWriteScheduler<StreamIdType>::Unschedule(
-    StreamInfo* stream_info) {
-  DCHECK(stream_info->ready);
-  stream_info->RemoveFromList();
-  stream_info->ready = false;
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::StreamHasChild(
-    const StreamInfo& parent_info,
-    const StreamInfo* child_info) const {
-  auto found = std::find(parent_info.children.begin(),
-                         parent_info.children.end(), child_info);
-  return found != parent_info.children.end();
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::HasReadyStreams() const {
-  return !scheduling_queue_.empty();
-}
-
-template <typename StreamIdType>
-StreamIdType Http2PriorityWriteScheduler<StreamIdType>::PopNextReadyStream() {
-  return std::get<0>(PopNextReadyStreamAndPrecedence());
-}
-
-template <typename StreamIdType>
-std::tuple<
-    StreamIdType,
-    typename Http2PriorityWriteScheduler<StreamIdType>::StreamPrecedenceType>
-Http2PriorityWriteScheduler<StreamIdType>::PopNextReadyStreamAndPrecedence() {
-  for (base::LinkNode<StreamInfo>* s = scheduling_queue_.head();
-       s != scheduling_queue_.end(); s = s->next()) {
-    StreamInfo* stream_info = s->value();
-    if (!HasReadyAncestor(*stream_info)) {
-      Unschedule(stream_info);
-      return std::make_tuple(stream_info->id,
-                             stream_info->ToStreamPrecedence());
-    }
-  }
-  SPDY_BUG << "No ready streams";
-  return std::make_tuple(
-      kHttp2RootStreamId,
-      StreamPrecedenceType(kHttp2RootStreamId, kHttp2MinStreamWeight, false));
-}
-
-template <typename StreamIdType>
-size_t Http2PriorityWriteScheduler<StreamIdType>::NumReadyStreams() const {
-  base::LinkNode<StreamInfo>* node = scheduling_queue_.head();
-  size_t size = 0;
-  while (node != scheduling_queue_.end())
-    ++size;
-  return size;
-}
-
-template <typename StreamIdType>
-bool Http2PriorityWriteScheduler<StreamIdType>::ValidateInvariantsForTests()
-    const {
-  int total_streams = 0;
-  int streams_visited = 0;
-  // Iterate through all streams in the map.
-  for (const auto& kv : all_stream_infos_) {
-    ++total_streams;
-    ++streams_visited;
-    StreamIdType stream_id = kv.first;
-    const StreamInfo& stream_info = *kv.second.get();
-
-    // Verify each StreamInfo mapped under the proper stream ID.
-    if (stream_id != stream_info.id) {
-      DLOG(INFO) << "Stream ID " << stream_id << " maps to StreamInfo with ID "
-                 << stream_info.id;
-      return false;
-    }
-
-    // All streams except the root should have a parent, and should appear in
-    // the children of that parent.
-    if (stream_info.id != kHttp2RootStreamId &&
-        !StreamHasChild(*stream_info.parent, &stream_info)) {
-      DLOG(INFO) << "Parent stream " << stream_info.parent->id
-                 << " is not registered, or does not list stream "
-                 << stream_info.id << " as its child.";
-      return false;
-    }
-
-    if (!stream_info.children.empty()) {
-      int total_child_weights = 0;
-      // Iterate through the stream's children.
-      for (StreamInfo* child : stream_info.children) {
-        ++streams_visited;
-        // Each stream in the list should exist and should have this stream
-        // set as its parent.
-        if (!StreamRegistered(child->id) || child->parent != &stream_info) {
-          DLOG(INFO) << "Child stream " << child->id << " is not registered, "
-                     << "or does not list " << stream_info.id
-                     << " as its parent.";
-          return false;
-        }
-        total_child_weights += child->weight;
-      }
-      // Verify that total_child_weights is correct.
-      if (total_child_weights != stream_info.total_child_weights) {
-        DLOG(INFO) << "Child weight totals do not agree. For stream "
-                   << stream_info.id << " total_child_weights has value "
-                   << stream_info.total_child_weights << ", expected "
-                   << total_child_weights;
-        return false;
-      }
-    }
-  }
-
-  // Make sure num_streams reflects the total number of streams the map
-  // contains.
-  if (total_streams != num_streams()) {
-    DLOG(INFO) << "Map contains incorrect number of streams.";
-    return false;
-  }
-  // Validate the validation function; we should have visited each stream twice
-  // (except for the root)
-  DCHECK(streams_visited == 2 * num_streams() - 1);
-  return true;
-}
-
-}  // namespace net
-
-#endif  // NET_SPDY_HTTP2_WRITE_SCHEDULER_H_
diff --git a/src/net/spdy/http2_write_scheduler_test.cc b/src/net/spdy/http2_write_scheduler_test.cc
deleted file mode 100644
index 62fc4e9..0000000
--- a/src/net/spdy/http2_write_scheduler_test.cc
+++ /dev/null
@@ -1,799 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/spdy/http2_write_scheduler.h"
-
-#include "net/spdy/spdy_test_utils.h"
-#include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-
-using ::testing::AssertionFailure;
-using ::testing::AssertionResult;
-using ::testing::AssertionSuccess;
-using ::testing::ElementsAre;
-using ::testing::IsEmpty;
-using ::testing::UnorderedElementsAre;
-
-namespace test {
-
-template <typename StreamIdType>
-class Http2PriorityWriteSchedulerPeer {
- public:
-  explicit Http2PriorityWriteSchedulerPeer(
-      Http2PriorityWriteScheduler<StreamIdType>* scheduler)
-      : scheduler_(scheduler) {}
-
-  int TotalChildWeights(StreamIdType stream_id) const {
-    return scheduler_->FindStream(stream_id)->total_child_weights;
-  }
-
-  bool ValidateInvariants() const {
-    return scheduler_->ValidateInvariantsForTests();
-  }
-
- private:
-  Http2PriorityWriteScheduler<StreamIdType>* scheduler_;
-};
-
-class Http2PriorityWriteSchedulerTest : public ::testing::Test {
- protected:
-  using SpdyStreamId = uint32_t;
-
-  Http2PriorityWriteSchedulerTest() : peer_(&scheduler_) {}
-
-  Http2PriorityWriteScheduler<SpdyStreamId> scheduler_;
-  Http2PriorityWriteSchedulerPeer<SpdyStreamId> peer_;
-};
-
-TEST_F(Http2PriorityWriteSchedulerTest, RegisterAndUnregisterStreams) {
-  EXPECT_EQ(1, scheduler_.num_streams());
-  EXPECT_TRUE(scheduler_.StreamRegistered(0));
-  EXPECT_FALSE(scheduler_.StreamRegistered(1));
-
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  EXPECT_EQ(2, scheduler_.num_streams());
-  ASSERT_TRUE(scheduler_.StreamRegistered(1));
-  EXPECT_EQ(100, scheduler_.GetStreamPrecedence(1).weight());
-  EXPECT_FALSE(scheduler_.StreamRegistered(5));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(1));
-
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(0, 50, false));
-  // Should not be able to add a stream with an id that already exists.
-  EXPECT_SPDY_BUG(
-      scheduler_.RegisterStream(5, SpdyStreamPrecedence(1, 50, false)),
-      "Stream 5 already registered");
-  EXPECT_EQ(3, scheduler_.num_streams());
-  EXPECT_TRUE(scheduler_.StreamRegistered(1));
-  ASSERT_TRUE(scheduler_.StreamRegistered(5));
-  EXPECT_EQ(50, scheduler_.GetStreamPrecedence(5).weight());
-  EXPECT_FALSE(scheduler_.StreamRegistered(13));
-
-  scheduler_.RegisterStream(13, SpdyStreamPrecedence(5, 130, true));
-  EXPECT_EQ(4, scheduler_.num_streams());
-  EXPECT_TRUE(scheduler_.StreamRegistered(1));
-  EXPECT_TRUE(scheduler_.StreamRegistered(5));
-  ASSERT_TRUE(scheduler_.StreamRegistered(13));
-  EXPECT_EQ(130, scheduler_.GetStreamPrecedence(13).weight());
-  EXPECT_EQ(5u, scheduler_.GetStreamPrecedence(13).parent_id());
-
-  scheduler_.UnregisterStream(5);
-  // Cannot remove a stream that has already been removed.
-  EXPECT_SPDY_BUG(scheduler_.UnregisterStream(5), "Stream 5 not registered");
-  EXPECT_EQ(3, scheduler_.num_streams());
-  EXPECT_TRUE(scheduler_.StreamRegistered(1));
-  EXPECT_FALSE(scheduler_.StreamRegistered(5));
-  EXPECT_TRUE(scheduler_.StreamRegistered(13));
-  EXPECT_EQ(kHttp2RootStreamId, scheduler_.GetStreamPrecedence(13).parent_id());
-
-  // The parent stream 19 doesn't exist, so this should use 0 as parent stream:
-  scheduler_.RegisterStream(7, SpdyStreamPrecedence(19, 70, false));
-  EXPECT_TRUE(scheduler_.StreamRegistered(7));
-  EXPECT_EQ(0u, scheduler_.GetStreamPrecedence(7).parent_id());
-  // Now stream 7 already exists, so this should fail:
-  EXPECT_SPDY_BUG(
-      scheduler_.RegisterStream(7, SpdyStreamPrecedence(1, 70, false)),
-      "Stream 7 already registered");
-  // Try adding a second child to stream 13:
-  scheduler_.RegisterStream(17, SpdyStreamPrecedence(13, 170, false));
-
-  scheduler_.UpdateStreamPrecedence(17, SpdyStreamPrecedence(13, 150, false));
-  EXPECT_EQ(150, scheduler_.GetStreamPrecedence(17).weight());
-
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, RegisterStreamWithSpdy3Priority) {
-  EXPECT_FALSE(scheduler_.StreamRegistered(1));
-  EXPECT_SPDY_BUG(scheduler_.RegisterStream(1, SpdyStreamPrecedence(3)),
-                  "Expected HTTP/2 stream dependency");
-  EXPECT_EQ(0u, scheduler_.NumReadyStreams());
-  EXPECT_TRUE(scheduler_.StreamRegistered(1));
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(1).spdy3_priority());
-  EXPECT_EQ(147, scheduler_.GetStreamPrecedence(1).weight());
-  EXPECT_EQ(kHttp2RootStreamId, scheduler_.GetStreamPrecedence(1).parent_id());
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), IsEmpty());
-
-  EXPECT_SPDY_BUG(scheduler_.RegisterStream(1, SpdyStreamPrecedence(4)),
-                  "Stream 1 already registered");
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(1).spdy3_priority());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, GetStreamWeight) {
-  // Unknown streams tolerated due to b/15676312.
-  EXPECT_EQ(kHttp2MinStreamWeight, scheduler_.GetStreamPrecedence(3).weight());
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 130, true));
-  EXPECT_EQ(130, scheduler_.GetStreamPrecedence(3).weight());
-  scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 50, true));
-  EXPECT_EQ(50, scheduler_.GetStreamPrecedence(3).weight());
-  scheduler_.UnregisterStream(3);
-  EXPECT_EQ(kHttp2MinStreamWeight, scheduler_.GetStreamPrecedence(3).weight());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, GetStreamPriority) {
-  // Unknown streams tolerated due to b/15676312.
-  EXPECT_EQ(kV3LowestPriority,
-            scheduler_.GetStreamPrecedence(3).spdy3_priority());
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 130, true));
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(3).spdy3_priority());
-  scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 50, true));
-  EXPECT_EQ(5, scheduler_.GetStreamPrecedence(3).spdy3_priority());
-  scheduler_.UnregisterStream(3);
-  EXPECT_EQ(kV3LowestPriority,
-            scheduler_.GetStreamPrecedence(3).spdy3_priority());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, GetStreamParent) {
-  // Unknown streams tolerated due to b/15676312.
-  EXPECT_EQ(kHttp2RootStreamId, scheduler_.GetStreamPrecedence(3).parent_id());
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(2, 30, false));
-  EXPECT_EQ(2u, scheduler_.GetStreamPrecedence(3).parent_id());
-  scheduler_.UnregisterStream(3);
-  EXPECT_EQ(kHttp2RootStreamId, scheduler_.GetStreamPrecedence(3).parent_id());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, GetStreamChildren) {
-  EXPECT_SPDY_BUG(EXPECT_THAT(scheduler_.GetStreamChildren(7), IsEmpty()),
-                  "Stream 7 not registered");
-  scheduler_.RegisterStream(7, SpdyStreamPrecedence(0, 70, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(7), IsEmpty());
-  scheduler_.RegisterStream(9, SpdyStreamPrecedence(7, 90, false));
-  scheduler_.RegisterStream(15, SpdyStreamPrecedence(7, 150, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(7), UnorderedElementsAre(9, 15));
-  scheduler_.UnregisterStream(7);
-  EXPECT_SPDY_BUG(EXPECT_THAT(scheduler_.GetStreamChildren(7), IsEmpty()),
-                  "Stream 7 not registered");
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamWeight) {
-  EXPECT_SPDY_BUG(
-      scheduler_.UpdateStreamPrecedence(0, SpdyStreamPrecedence(0, 10, false)),
-      "Cannot set precedence of root stream");
-
-  // For the moment, updating stream precedence on a non-registered stream
-  // should have no effect. In the future, it will lazily cause the stream to
-  // be registered (b/15676312).
-  scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 10, false));
-  EXPECT_FALSE(scheduler_.StreamRegistered(3));
-
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 10, false));
-  scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 20, false));
-  EXPECT_EQ(20, scheduler_.GetStreamPrecedence(3).weight());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-
-  EXPECT_SPDY_BUG(
-      scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 500, false)),
-      "Invalid weight: 500");
-  EXPECT_EQ(kHttp2MaxStreamWeight, scheduler_.GetStreamPrecedence(3).weight());
-  EXPECT_SPDY_BUG(
-      scheduler_.UpdateStreamPrecedence(3, SpdyStreamPrecedence(0, 0, false)),
-      "Invalid weight: 0");
-  EXPECT_EQ(kHttp2MinStreamWeight, scheduler_.GetStreamPrecedence(3).weight());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-
-  scheduler_.UnregisterStream(3);
-}
-
-// Basic case of reparenting a subtree.
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentBasicNonExclusive) {
-  /* Tree:
-        0
-       / \
-      1   2
-     / \
-    3   4
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(2, 100, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(2));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(3, 4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-// Basic case of reparenting a subtree.  Result here is the same as the
-// non-exclusive case.
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentBasicExclusive) {
-  /* Tree:
-        0
-       / \
-      1   2
-     / \
-    3   4
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(2, 100, true));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(2));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(3, 4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-// We can't set the parent of a nonexistent stream, or set the parent to a
-// nonexistent stream.
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentNonexistent) {
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  for (bool exclusive : {true, false}) {
-    // For the moment, updating stream precedence on a non-registered stream or
-    // attempting to set parent to a nonexistent stream should have no
-    // effect. In the future, it will lazily cause the stream(s) to be
-    // registered (b/15676312).
-
-    // No-op: parent stream 3 not registered
-    scheduler_.UpdateStreamPrecedence(1,
-                                      SpdyStreamPrecedence(3, 100, exclusive));
-
-    // No-op: stream 4 not registered
-    scheduler_.UpdateStreamPrecedence(4,
-                                      SpdyStreamPrecedence(2, 100, exclusive));
-
-    // No-op: stream 3 not registered
-    scheduler_.UpdateStreamPrecedence(3,
-                                      SpdyStreamPrecedence(4, 100, exclusive));
-
-    EXPECT_THAT(scheduler_.GetStreamChildren(0), UnorderedElementsAre(1, 2));
-    EXPECT_THAT(scheduler_.GetStreamChildren(1), IsEmpty());
-    EXPECT_THAT(scheduler_.GetStreamChildren(2), IsEmpty());
-    EXPECT_FALSE(scheduler_.StreamRegistered(3));
-    EXPECT_FALSE(scheduler_.StreamRegistered(4));
-  }
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-// We should be able to add multiple children to streams.
-TEST_F(Http2PriorityWriteSchedulerTest,
-       UpdateStreamParentMultipleChildrenNonExclusive) {
-  /* Tree:
-        0
-       / \
-      1   2
-     / \   \
-    3   4   5
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.UpdateStreamPrecedence(2, SpdyStreamPrecedence(1, 100, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(2, 3, 4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(5));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(5), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest,
-       UpdateStreamParentMultipleChildrenExclusive) {
-  /* Tree:
-        0
-       / \
-      1   2
-     / \   \
-    3   4   5
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.UpdateStreamPrecedence(2, SpdyStreamPrecedence(1, 100, true));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), ElementsAre(2));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), UnorderedElementsAre(3, 4, 5));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(5), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentToChildNonExclusive) {
-  /* Tree:
-        0
-        |
-        1
-       / \
-      2   3
-      |
-      4
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(2, 100, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(2));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), ElementsAre(3));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), UnorderedElementsAre(1, 4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentToChildExclusive) {
-  /* Tree:
-        0
-        |
-        1
-       / \
-      2   3
-      |
-      4
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(2, 100, true));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(2));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(3, 4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest,
-       UpdateStreamParentToGrandchildNonExclusive) {
-  /* Tree:
-        0
-        |
-        1
-       / \
-      2   3
-     / \
-    4   5
-    |
-    6
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.RegisterStream(6, SpdyStreamPrecedence(4, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(4, 100, false));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(2, 3));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(5));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), UnorderedElementsAre(1, 6));
-  EXPECT_THAT(scheduler_.GetStreamChildren(5), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(6), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest,
-       UpdateStreamParentToGrandchildExclusive) {
-  /* Tree:
-        0
-        |
-        1
-       / \
-      2   3
-     / \
-    4   5
-    |
-    6
-   */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.RegisterStream(6, SpdyStreamPrecedence(4, 100, false));
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(4, 100, true));
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(4));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(2, 3, 6));
-  EXPECT_THAT(scheduler_.GetStreamChildren(2), ElementsAre(5));
-  EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(4), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(5), IsEmpty());
-  EXPECT_THAT(scheduler_.GetStreamChildren(6), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentToParent) {
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(1, 100, false));
-  for (bool exclusive : {true, false}) {
-    scheduler_.UpdateStreamPrecedence(2,
-                                      SpdyStreamPrecedence(1, 100, exclusive));
-    EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(1));
-    EXPECT_THAT(scheduler_.GetStreamChildren(1), UnorderedElementsAre(2, 3));
-    EXPECT_THAT(scheduler_.GetStreamChildren(2), IsEmpty());
-    EXPECT_THAT(scheduler_.GetStreamChildren(3), IsEmpty());
-  }
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, UpdateStreamParentToSelf) {
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  EXPECT_SPDY_BUG(
-      scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(1, 100, false)),
-      "Cannot set stream to be its own parent");
-  EXPECT_SPDY_BUG(
-      scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(1, 100, true)),
-      "Cannot set stream to be its own parent");
-  EXPECT_THAT(scheduler_.GetStreamChildren(0), ElementsAre(1));
-  EXPECT_THAT(scheduler_.GetStreamChildren(1), IsEmpty());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, BlockAndUnblock) {
-  /* Create the tree.
-
-             0
-           / | \
-          /  |  \
-         1   2   3
-        / \   \   \
-       4   5   6   7
-      /|  / \  |   |\
-     8 9 10 11 12 13 14
-    / \
-   15 16
-
-  */
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(1, 100, false));
-  scheduler_.RegisterStream(8, SpdyStreamPrecedence(4, 100, false));
-  scheduler_.RegisterStream(9, SpdyStreamPrecedence(4, 100, false));
-  scheduler_.RegisterStream(10, SpdyStreamPrecedence(5, 100, false));
-  scheduler_.RegisterStream(11, SpdyStreamPrecedence(5, 100, false));
-  scheduler_.RegisterStream(15, SpdyStreamPrecedence(8, 100, false));
-  scheduler_.RegisterStream(16, SpdyStreamPrecedence(8, 100, false));
-  scheduler_.RegisterStream(12, SpdyStreamPrecedence(2, 100, false));
-  scheduler_.RegisterStream(6, SpdyStreamPrecedence(2, 100, true));
-  scheduler_.RegisterStream(7, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(13, SpdyStreamPrecedence(7, 100, true));
-  scheduler_.RegisterStream(14, SpdyStreamPrecedence(7, 100, false));
-  scheduler_.UpdateStreamPrecedence(7, SpdyStreamPrecedence(3, 100, false));
-  EXPECT_EQ(0u, scheduler_.GetStreamPrecedence(1).parent_id());
-  EXPECT_EQ(0u, scheduler_.GetStreamPrecedence(2).parent_id());
-  EXPECT_EQ(0u, scheduler_.GetStreamPrecedence(3).parent_id());
-  EXPECT_EQ(1u, scheduler_.GetStreamPrecedence(4).parent_id());
-  EXPECT_EQ(1u, scheduler_.GetStreamPrecedence(5).parent_id());
-  EXPECT_EQ(2u, scheduler_.GetStreamPrecedence(6).parent_id());
-  EXPECT_EQ(3u, scheduler_.GetStreamPrecedence(7).parent_id());
-  EXPECT_EQ(4u, scheduler_.GetStreamPrecedence(8).parent_id());
-  EXPECT_EQ(4u, scheduler_.GetStreamPrecedence(9).parent_id());
-  EXPECT_EQ(5u, scheduler_.GetStreamPrecedence(10).parent_id());
-  EXPECT_EQ(5u, scheduler_.GetStreamPrecedence(11).parent_id());
-  EXPECT_EQ(6u, scheduler_.GetStreamPrecedence(12).parent_id());
-  EXPECT_EQ(7u, scheduler_.GetStreamPrecedence(13).parent_id());
-  EXPECT_EQ(7u, scheduler_.GetStreamPrecedence(14).parent_id());
-  EXPECT_EQ(8u, scheduler_.GetStreamPrecedence(15).parent_id());
-  EXPECT_EQ(8u, scheduler_.GetStreamPrecedence(16).parent_id());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-
-  EXPECT_EQ(peer_.TotalChildWeights(0),
-            scheduler_.GetStreamPrecedence(1).weight() +
-                scheduler_.GetStreamPrecedence(2).weight() +
-                scheduler_.GetStreamPrecedence(3).weight());
-  EXPECT_EQ(peer_.TotalChildWeights(3),
-            scheduler_.GetStreamPrecedence(7).weight());
-  EXPECT_EQ(peer_.TotalChildWeights(7),
-            scheduler_.GetStreamPrecedence(13).weight() +
-                scheduler_.GetStreamPrecedence(14).weight());
-  EXPECT_EQ(peer_.TotalChildWeights(13), 0);
-  EXPECT_EQ(peer_.TotalChildWeights(14), 0);
-
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, HasReadyStreams) {
-  EXPECT_FALSE(scheduler_.HasReadyStreams());
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 10, false));
-  EXPECT_FALSE(scheduler_.HasReadyStreams());
-  scheduler_.MarkStreamReady(1, false);
-  EXPECT_TRUE(scheduler_.HasReadyStreams());
-  scheduler_.MarkStreamNotReady(1);
-  EXPECT_FALSE(scheduler_.HasReadyStreams());
-  scheduler_.MarkStreamReady(1, true);
-  EXPECT_TRUE(scheduler_.HasReadyStreams());
-  scheduler_.UnregisterStream(1);
-  EXPECT_FALSE(scheduler_.HasReadyStreams());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, CalculateRoundedWeights) {
-  /* Create the tree.
-
-           0
-          / \
-         1   2
-       /| |\  |\
-      8 3 4 5 6 7
-  */
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 10, true));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 5, false));
-  scheduler_.RegisterStream(6, SpdyStreamPrecedence(2, 1, false));
-  scheduler_.RegisterStream(7, SpdyStreamPrecedence(2, 1, false));
-  scheduler_.RegisterStream(8, SpdyStreamPrecedence(1, 1, false));
-
-  // Remove higher-level streams.
-  scheduler_.UnregisterStream(1);
-  scheduler_.UnregisterStream(2);
-
-  // 3.3 rounded down = 3.
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(3).weight());
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(4).weight());
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(5).weight());
-  // 2.5 rounded up = 3.
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(6).weight());
-  EXPECT_EQ(3, scheduler_.GetStreamPrecedence(7).weight());
-  // 0 is not a valid weight, so round up to 1.
-  EXPECT_EQ(1, scheduler_.GetStreamPrecedence(8).weight());
-  ASSERT_TRUE(peer_.ValidateInvariants());
-}
-
-TEST_F(Http2PriorityWriteSchedulerTest, GetLatestEventWithPrecedence) {
-  EXPECT_SPDY_BUG(scheduler_.RecordStreamEventTime(3, 5),
-                  "Stream 3 not registered");
-  EXPECT_SPDY_BUG(EXPECT_EQ(0, scheduler_.GetLatestEventWithPrecedence(4)),
-                  "Stream 4 not registered");
-
-  for (int i = 1; i < 5; ++i) {
-    int weight = SpdyStreamPrecedence(i).weight();
-    scheduler_.RegisterStream(i, SpdyStreamPrecedence(0, weight, false));
-  }
-  for (int i = 1; i < 5; ++i) {
-    EXPECT_EQ(0, scheduler_.GetLatestEventWithPrecedence(i));
-  }
-  for (int i = 1; i < 5; ++i) {
-    scheduler_.RecordStreamEventTime(i, i * 100);
-  }
-  for (int i = 1; i < 5; ++i) {
-    EXPECT_EQ((i - 1) * 100, scheduler_.GetLatestEventWithPrecedence(i));
-  }
-}
-
-// Add ready streams at front and back.
-TEST_F(Http2PriorityWriteSchedulerTest, MarkReadyFrontAndBack) {
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 10, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(0, 30, false));
-
-  for (int i = 1; i < 6; ++i) {
-    scheduler_.MarkStreamReady(i, false);
-  }
-  EXPECT_EQ(5u, scheduler_.PopNextReadyStream());
-  EXPECT_EQ(2u, scheduler_.PopNextReadyStream());
-  scheduler_.MarkStreamReady(2, false);
-  EXPECT_EQ(3u, scheduler_.PopNextReadyStream());
-  scheduler_.MarkStreamReady(3, false);
-  EXPECT_EQ(4u, scheduler_.PopNextReadyStream());
-  scheduler_.MarkStreamReady(4, false);
-  EXPECT_EQ(2u, scheduler_.PopNextReadyStream());
-  scheduler_.MarkStreamReady(2, true);
-  EXPECT_EQ(2u, scheduler_.PopNextReadyStream());
-  scheduler_.MarkStreamReady(5, false);
-  scheduler_.MarkStreamReady(2, true);
-  EXPECT_EQ(5u, scheduler_.PopNextReadyStream());
-}
-
-// Add ready streams at front and back and pop them with
-// PopNextReadyStreamAndPrecedence.
-TEST_F(Http2PriorityWriteSchedulerTest, PopNextReadyStreamAndPrecedence) {
-  scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 10, false));
-  scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(4, SpdyStreamPrecedence(0, 20, false));
-  scheduler_.RegisterStream(5, SpdyStreamPrecedence(0, 30, false));
-
-  for (int i = 1; i < 6; ++i) {
-    scheduler_.MarkStreamReady(i, false);
-  }
-  EXPECT_EQ(std::make_tuple(5u, SpdyStreamPrecedence(0, 30, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  EXPECT_EQ(std::make_tuple(2u, SpdyStreamPrecedence(0, 20, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  scheduler_.MarkStreamReady(2, false);
-  EXPECT_EQ(std::make_tuple(3u, SpdyStreamPrecedence(0, 20, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  scheduler_.MarkStreamReady(3, false);
-  EXPECT_EQ(std::make_tuple(4u, SpdyStreamPrecedence(0, 20, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  scheduler_.MarkStreamReady(4, false);
-  EXPECT_EQ(std::make_tuple(2u, SpdyStreamPrecedence(0, 20, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  scheduler_.MarkStreamReady(2, true);
-  EXPECT_EQ(std::make_tuple(2u, SpdyStreamPrecedence(0, 20, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-  scheduler_.MarkStreamReady(5, false);
-  scheduler_.MarkStreamReady(2, true);
-  EXPECT_EQ(std::make_tuple(5u, SpdyStreamPrecedence(0, 30, false)),
-            scheduler_.PopNextReadyStreamAndPrecedence());
-}
-
-class PopNextReadyStreamTest : public Http2PriorityWriteSchedulerTest {
- protected:
-  void SetUp() override {
-    /* Create the tree.
-
-             0
-            /|\
-           1 2 3
-          /| |\
-         4 5 6 7
-        /
-       8
-
-    */
-    scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-    scheduler_.RegisterStream(2, SpdyStreamPrecedence(0, 100, false));
-    scheduler_.RegisterStream(3, SpdyStreamPrecedence(0, 100, false));
-    scheduler_.RegisterStream(4, SpdyStreamPrecedence(1, 100, false));
-    scheduler_.RegisterStream(5, SpdyStreamPrecedence(1, 100, false));
-    scheduler_.RegisterStream(6, SpdyStreamPrecedence(2, 100, false));
-    scheduler_.RegisterStream(7, SpdyStreamPrecedence(2, 100, false));
-    scheduler_.RegisterStream(8, SpdyStreamPrecedence(4, 100, false));
-
-    // Set all nodes ready to write.
-    for (SpdyStreamId id = 1; id <= 8; ++id) {
-      scheduler_.MarkStreamReady(id, false);
-    }
-  }
-
-  AssertionResult PopNextReturnsCycle(
-      std::initializer_list<SpdyStreamId> stream_ids) {
-    int count = 0;
-    const int kNumCyclesToCheck = 2;
-    for (int i = 0; i < kNumCyclesToCheck; i++) {
-      for (SpdyStreamId expected_id : stream_ids) {
-        SpdyStreamId next_id = scheduler_.PopNextReadyStream();
-        scheduler_.MarkStreamReady(next_id, false);
-        if (next_id != expected_id) {
-          return AssertionFailure() << "Pick " << count << ": expected stream "
-                                    << expected_id << " instead of " << next_id;
-        }
-        if (!peer_.ValidateInvariants()) {
-          return AssertionFailure() << "ValidateInvariants failed";
-        }
-        ++count;
-      }
-    }
-    return AssertionSuccess();
-  }
-};
-
-// When all streams are schedulable, only top-level streams should be returned.
-TEST_F(PopNextReadyStreamTest, NoneBlocked) {
-  EXPECT_TRUE(PopNextReturnsCycle({1, 2, 3}));
-}
-
-// When a parent stream is blocked, its children should be scheduled, if
-// priorities allow.
-TEST_F(PopNextReadyStreamTest, SingleStreamBlocked) {
-  scheduler_.MarkStreamNotReady(1);
-
-  // Round-robin only across 2 and 3, since children of 1 have lower priority.
-  EXPECT_TRUE(PopNextReturnsCycle({2, 3}));
-
-  // Make children of 1 have equal priority as 2 and 3, after which they should
-  // be returned as well.
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(0, 200, false));
-  EXPECT_TRUE(PopNextReturnsCycle({4, 5, 2, 3}));
-}
-
-// Block multiple levels of streams.
-TEST_F(PopNextReadyStreamTest, MultiLevelBlocked) {
-  for (SpdyStreamId stream_id : {1, 4, 5}) {
-    scheduler_.MarkStreamNotReady(stream_id);
-  }
-  // Round-robin only across 2 and 3, since children of 1 have lower priority.
-  EXPECT_TRUE(PopNextReturnsCycle({2, 3}));
-
-  // Make 8 have equal priority as 2 and 3.
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(0, 200, false));
-  EXPECT_TRUE(PopNextReturnsCycle({8, 2, 3}));
-}
-
-// A removed stream shouldn't be scheduled.
-TEST_F(PopNextReadyStreamTest, RemoveStream) {
-  scheduler_.UnregisterStream(1);
-
-  // Round-robin only across 2 and 3, since previous children of 1 have lower
-  // priority (the weight of 4 and 5 is scaled down when they are elevated to
-  // siblings of 2 and 3).
-  EXPECT_TRUE(PopNextReturnsCycle({2, 3}));
-
-  // Make previous children of 1 have equal priority as 2 and 3.
-  scheduler_.UpdateStreamPrecedence(4, SpdyStreamPrecedence(0, 100, false));
-  scheduler_.UpdateStreamPrecedence(5, SpdyStreamPrecedence(0, 100, false));
-  EXPECT_TRUE(PopNextReturnsCycle({4, 5, 2, 3}));
-}
-
-// Block an entire subtree.
-TEST_F(PopNextReadyStreamTest, SubtreeBlocked) {
-  for (SpdyStreamId stream_id : {1, 4, 5, 8}) {
-    scheduler_.MarkStreamNotReady(stream_id);
-  }
-  EXPECT_TRUE(PopNextReturnsCycle({2, 3}));
-}
-
-// If all parent streams are blocked, children should be returned.
-TEST_F(PopNextReadyStreamTest, ParentsBlocked) {
-  for (SpdyStreamId stream_id : {1, 2, 3}) {
-    scheduler_.MarkStreamNotReady(stream_id);
-  }
-  EXPECT_TRUE(PopNextReturnsCycle({4, 5, 6, 7}));
-}
-
-// Unblocking streams should make them schedulable.
-TEST_F(PopNextReadyStreamTest, BlockAndUnblock) {
-  EXPECT_TRUE(PopNextReturnsCycle({1, 2, 3}));
-  scheduler_.MarkStreamNotReady(2);
-  EXPECT_TRUE(PopNextReturnsCycle({1, 3}));
-  scheduler_.MarkStreamReady(2, false);
-  // Cycle order permuted since 2 effectively appended at tail.
-  EXPECT_TRUE(PopNextReturnsCycle({1, 3, 2}));
-}
-
-// Block nodes in multiple subtrees.
-TEST_F(PopNextReadyStreamTest, ScatteredBlocked) {
-  for (SpdyStreamId stream_id : {1, 2, 6, 7}) {
-    scheduler_.MarkStreamNotReady(stream_id);
-  }
-  // Only 3 returned, since of remaining streams it has highest priority.
-  EXPECT_TRUE(PopNextReturnsCycle({3}));
-
-  // Make children of 1 have priority equal to 3.
-  scheduler_.UpdateStreamPrecedence(1, SpdyStreamPrecedence(0, 200, false));
-  EXPECT_TRUE(PopNextReturnsCycle({4, 5, 3}));
-
-  // When 4 is blocked, its child 8 should take its place, since it has same
-  // priority.
-  scheduler_.MarkStreamNotReady(4);
-  EXPECT_TRUE(PopNextReturnsCycle({8, 5, 3}));
-}
-
-}  // namespace test
-}  // namespace net
diff --git a/src/net/spdy/platform/api/spdy_string.h b/src/net/spdy/platform/api/spdy_string.h
new file mode 100644
index 0000000..59089a5
--- /dev/null
+++ b/src/net/spdy/platform/api/spdy_string.h
@@ -0,0 +1,16 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_API_SPDY_STRING_H_
+#define NET_SPDY_PLATFORM_API_SPDY_STRING_H_
+
+#include "net/spdy/platform/impl/spdy_string_impl.h"
+
+namespace net {
+
+using SpdyString = SpdyStringImpl;
+
+}  // namespace net
+
+#endif  // NET_SPDY_PLATFORM_API_SPDY_STRING_H_
diff --git a/src/net/spdy/platform/api/spdy_string_utils.h b/src/net/spdy/platform/api/spdy_string_utils.h
index 3d7da08..4f986ff 100644
--- a/src/net/spdy/platform/api/spdy_string_utils.h
+++ b/src/net/spdy/platform/api/spdy_string_utils.h
@@ -5,25 +5,25 @@
 #ifndef NET_SPDY_PLATFORM_API_SPDY_STRING_UTILS_H_
 #define NET_SPDY_PLATFORM_API_SPDY_STRING_UTILS_H_
 
-#include <string>
 #include <utility>
 
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/impl/spdy_string_utils_impl.h"
 
 namespace net {
 
 template <typename... Args>
-inline std::string SpdyStrCat(const Args&... args) {
+inline SpdyString SpdyStrCat(const Args&... args) {
   return SpdyStrCatImpl(std::forward<const Args&>(args)...);
 }
 
 template <typename... Args>
-inline void SpdyStrAppend(std::string* output, const Args&... args) {
+inline void SpdyStrAppend(SpdyString* output, const Args&... args) {
   SpdyStrAppendImpl(output, std::forward<const Args&>(args)...);
 }
 
 template <typename... Args>
-inline std::string SpdyStringPrintf(const Args&... args) {
+inline SpdyString SpdyStringPrintf(const Args&... args) {
   return SpdyStringPrintfImpl(std::forward<const Args&>(args)...);
 }
 
diff --git a/src/net/spdy/platform/api/spdy_string_utils_test.cc b/src/net/spdy/platform/api/spdy_string_utils_test.cc
index e7df3b6..20992f9 100644
--- a/src/net/spdy/platform/api/spdy_string_utils_test.cc
+++ b/src/net/spdy/platform/api/spdy_string_utils_test.cc
@@ -19,7 +19,7 @@
 
   // Single string-like argument.
   const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
+  const SpdyString string_foo(kFoo);
   const SpdyStringPiece stringpiece_foo(string_foo);
   EXPECT_EQ("foo", SpdyStrCat(kFoo));
   EXPECT_EQ("foo", SpdyStrCat(string_foo));
@@ -28,7 +28,7 @@
   // Two string-like arguments.
   const char kBar[] = "bar";
   const SpdyStringPiece stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
+  const SpdyString string_bar(kBar);
   EXPECT_EQ("foobar", SpdyStrCat(kFoo, kBar));
   EXPECT_EQ("foobar", SpdyStrCat(kFoo, string_bar));
   EXPECT_EQ("foobar", SpdyStrCat(kFoo, stringpiece_bar));
@@ -72,13 +72,13 @@
 
 TEST(SpdyStringUtilsTest, SpdyStrAppend) {
   // No arguments on empty string.
-  std::string output;
+  SpdyString output;
   SpdyStrAppend(&output);
   EXPECT_TRUE(output.empty());
 
   // Single string-like argument.
   const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
+  const SpdyString string_foo(kFoo);
   const SpdyStringPiece stringpiece_foo(string_foo);
   SpdyStrAppend(&output, kFoo);
   EXPECT_EQ("foo", output);
@@ -96,7 +96,7 @@
   // Two string-like arguments.
   const char kBar[] = "bar";
   const SpdyStringPiece stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
+  const SpdyString string_bar(kBar);
   SpdyStrAppend(&output, kFoo, kBar);
   EXPECT_EQ("foobar", output);
   SpdyStrAppend(&output, kFoo, string_bar);
@@ -173,7 +173,7 @@
 }
 
 TEST(SpdyStringUtilsTest, SpdyStringAppendF) {
-  std::string output;
+  SpdyString output;
 
   SpdyStringAppendF(&output, "%s", "");
   EXPECT_TRUE(output.empty());
diff --git a/src/net/spdy/platform/impl/spdy_string_impl.h b/src/net/spdy/platform/impl/spdy_string_impl.h
new file mode 100644
index 0000000..91a6336
--- /dev/null
+++ b/src/net/spdy/platform/impl/spdy_string_impl.h
@@ -0,0 +1,16 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_IMPL_SPDY_STRING_IMPL_H_
+#define NET_SPDY_PLATFORM_IMPL_SPDY_STRING_IMPL_H_
+
+#include <string>
+
+namespace net {
+
+using SpdyStringImpl = std::string;
+
+}  // namespace net
+
+#endif  // NET_SPDY_PLATFORM_IMPL_SPDY_STRING_IMPL_H_
diff --git a/src/net/spdy/platform/impl/spdy_string_utils_impl.h b/src/net/spdy/platform/impl/spdy_string_utils_impl.h
index 4a5a0f3..8792285 100644
--- a/src/net/spdy/platform/impl/spdy_string_utils_impl.h
+++ b/src/net/spdy/platform/impl/spdy_string_utils_impl.h
@@ -6,15 +6,16 @@
 #define NET_SPDY_PLATFORM_IMPL_SPDY_STRING_UTILS_IMPL_H_
 
 #include <sstream>
-#include <string>
+#include <utility>
 
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
 
 template <typename... Args>
-inline std::string SpdyStrCatImpl(const Args&... args) {
+inline SpdyString SpdyStrCatImpl(const Args&... args) {
   std::ostringstream oss;
   int dummy[] = {1, (oss << args, 0)...};
   static_cast<void>(dummy);
@@ -22,12 +23,12 @@
 }
 
 template <typename... Args>
-inline void SpdyStrAppendImpl(std::string* output, Args... args) {
+inline void SpdyStrAppendImpl(SpdyString* output, Args... args) {
   output->append(SpdyStrCatImpl(args...));
 }
 
 template <typename... Args>
-inline std::string SpdyStringPrintfImpl(const Args&... args) {
+inline SpdyString SpdyStringPrintfImpl(const Args&... args) {
   return base::StringPrintf(std::forward<const Args&>(args)...);
 }
 
diff --git a/src/net/spdy/spdy_alt_svc_wire_format.cc b/src/net/spdy/spdy_alt_svc_wire_format.cc
index d1205dd..803fb7b 100644
--- a/src/net/spdy/spdy_alt_svc_wire_format.cc
+++ b/src/net/spdy/spdy_alt_svc_wire_format.cc
@@ -7,7 +7,6 @@
 #include <algorithm>
 #include <cctype>
 #include <limits>
-#include <string>
 
 #include "base/logging.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
@@ -39,8 +38,8 @@
 SpdyAltSvcWireFormat::AlternativeService::AlternativeService() {}
 
 SpdyAltSvcWireFormat::AlternativeService::AlternativeService(
-    const std::string& protocol_id,
-    const std::string& host,
+    const SpdyString& protocol_id,
+    const SpdyString& host,
     uint16_t port,
     uint32_t max_age,
     VersionVector version)
@@ -72,7 +71,7 @@
     // Parse protocol-id.
     SpdyStringPiece::const_iterator percent_encoded_protocol_id_end =
         std::find(c, value.end(), '=');
-    std::string protocol_id;
+    SpdyString protocol_id;
     if (percent_encoded_protocol_id_end == c ||
         !PercentDecode(c, percent_encoded_protocol_id_end, &protocol_id)) {
       return false;
@@ -103,7 +102,7 @@
       return false;
     }
     DCHECK_EQ('"', *c);
-    std::string host;
+    SpdyString host;
     uint16_t port;
     if (!ParseAltAuthority(alt_authority_begin, c, &host, &port)) {
       return false;
@@ -127,7 +126,7 @@
       if (c == parameters_end) {
         break;
       }
-      std::string parameter_name;
+      SpdyString parameter_name;
       for (; c != parameters_end && *c != '=' && *c != ' ' && *c != '\t'; ++c) {
         parameter_name.push_back(tolower(*c));
       }
@@ -188,13 +187,13 @@
 }
 
 // static
-std::string SpdyAltSvcWireFormat::SerializeHeaderFieldValue(
+SpdyString SpdyAltSvcWireFormat::SerializeHeaderFieldValue(
     const AlternativeServiceVector& altsvc_vector) {
   if (altsvc_vector.empty()) {
-    return std::string("clear");
+    return SpdyString("clear");
   }
   const char kNibbleToHex[] = "0123456789ABCDEF";
-  std::string value;
+  SpdyString value;
   for (const AlternativeService& altsvc : altsvc_vector) {
     if (!value.empty()) {
       value.push_back(',');
@@ -268,7 +267,7 @@
 // static
 bool SpdyAltSvcWireFormat::PercentDecode(SpdyStringPiece::const_iterator c,
                                          SpdyStringPiece::const_iterator end,
-                                         std::string* output) {
+                                         SpdyString* output) {
   output->clear();
   for (; c != end; ++c) {
     if (*c != '%') {
@@ -296,7 +295,7 @@
 bool SpdyAltSvcWireFormat::ParseAltAuthority(
     SpdyStringPiece::const_iterator c,
     SpdyStringPiece::const_iterator end,
-    std::string* host,
+    SpdyString* host,
     uint16_t* port) {
   host->clear();
   if (c == end) {
diff --git a/src/net/spdy/spdy_alt_svc_wire_format.h b/src/net/spdy/spdy_alt_svc_wire_format.h
index 856b08e..b6b8ee1 100644
--- a/src/net/spdy/spdy_alt_svc_wire_format.h
+++ b/src/net/spdy/spdy_alt_svc_wire_format.h
@@ -10,11 +10,11 @@
 #ifndef NET_SPDY_SPDY_ALT_SVC_WIRE_FORMAT_H_
 #define NET_SPDY_SPDY_ALT_SVC_WIRE_FORMAT_H_
 
-#include <stdint.h>
-
+#include <cstdint>
 #include <vector>
 
 #include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -28,8 +28,8 @@
   using VersionVector = std::vector<uint16_t>;
 
   struct NET_EXPORT_PRIVATE AlternativeService {
-    std::string protocol_id;
-    std::string host;
+    SpdyString protocol_id;
+    SpdyString host;
 
     // Default is 0: invalid port.
     uint16_t port = 0;
@@ -39,8 +39,8 @@
     VersionVector version;
 
     AlternativeService();
-    AlternativeService(const std::string& protocol_id,
-                       const std::string& host,
+    AlternativeService(const SpdyString& protocol_id,
+                       const SpdyString& host,
                        uint16_t port,
                        uint32_t max_age,
                        VersionVector version);
@@ -61,7 +61,7 @@
   friend class test::SpdyAltSvcWireFormatPeer;
   static bool ParseHeaderFieldValue(SpdyStringPiece value,
                                     AlternativeServiceVector* altsvc_vector);
-  static std::string SerializeHeaderFieldValue(
+  static SpdyString SerializeHeaderFieldValue(
       const AlternativeServiceVector& altsvc_vector);
 
  private:
@@ -69,10 +69,10 @@
                              SpdyStringPiece::const_iterator end);
   static bool PercentDecode(SpdyStringPiece::const_iterator c,
                             SpdyStringPiece::const_iterator end,
-                            std::string* output);
+                            SpdyString* output);
   static bool ParseAltAuthority(SpdyStringPiece::const_iterator c,
                                 SpdyStringPiece::const_iterator end,
-                                std::string* host,
+                                SpdyString* host,
                                 uint16_t* port);
   static bool ParsePositiveInteger16(SpdyStringPiece::const_iterator c,
                                      SpdyStringPiece::const_iterator end,
diff --git a/src/net/spdy/spdy_alt_svc_wire_format_test.cc b/src/net/spdy/spdy_alt_svc_wire_format_test.cc
index 0d5679e..1650c35 100644
--- a/src/net/spdy/spdy_alt_svc_wire_format_test.cc
+++ b/src/net/spdy/spdy_alt_svc_wire_format_test.cc
@@ -23,12 +23,12 @@
   }
   static bool PercentDecode(SpdyStringPiece::const_iterator c,
                             SpdyStringPiece::const_iterator end,
-                            std::string* output) {
+                            SpdyString* output) {
     return SpdyAltSvcWireFormat::PercentDecode(c, end, output);
   }
   static bool ParseAltAuthority(SpdyStringPiece::const_iterator c,
                                 SpdyStringPiece::const_iterator end,
-                                std::string* host,
+                                SpdyString* host,
                                 uint16_t* port) {
     return SpdyAltSvcWireFormat::ParseAltAuthority(c, end, host, port);
   }
@@ -52,7 +52,7 @@
 // random case, and corresponding AlternativeService entries.
 void FuzzHeaderFieldValue(
     int i,
-    std::string* header_field_value,
+    SpdyString* header_field_value,
     SpdyAltSvcWireFormat::AlternativeService* expected_altsvc) {
   if (!header_field_value->empty()) {
     header_field_value->push_back(',');
@@ -109,7 +109,7 @@
 // canonical form, that is, what SerializeHeaderFieldValue() should output.
 void FuzzAlternativeService(int i,
                             SpdyAltSvcWireFormat::AlternativeService* altsvc,
-                            std::string* expected_header_field_value) {
+                            SpdyString* expected_header_field_value) {
   if (!expected_header_field_value->empty()) {
     expected_header_field_value->push_back(',');
   }
@@ -162,7 +162,7 @@
 // separator, etc.  Single alternative service at a time.
 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValue) {
   for (int i = 0; i < 1 << 11; ++i) {
-    std::string header_field_value;
+    SpdyString header_field_value;
     SpdyAltSvcWireFormat::AlternativeService expected_altsvc;
     FuzzHeaderFieldValue(i, &header_field_value, &expected_altsvc);
     SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
@@ -176,7 +176,7 @@
     EXPECT_EQ(expected_altsvc.version, altsvc_vector[0].version);
 
     // Roundtrip test starting with |altsvc_vector|.
-    std::string reserialized_header_field_value =
+    SpdyString reserialized_header_field_value =
         SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector);
     SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector;
     ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
@@ -196,7 +196,7 @@
 // separator, etc.  Possibly multiple alternative service at a time.
 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueMultiple) {
   for (int i = 0; i < 1 << 11;) {
-    std::string header_field_value;
+    SpdyString header_field_value;
     SpdyAltSvcWireFormat::AlternativeServiceVector expected_altsvc_vector;
     // This will generate almost two hundred header field values with two,
     // three, four, five, six, and seven alternative services each, and
@@ -221,7 +221,7 @@
     }
 
     // Roundtrip test starting with |altsvc_vector|.
-    std::string reserialized_header_field_value =
+    SpdyString reserialized_header_field_value =
         SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector);
     SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector;
     ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
@@ -255,7 +255,7 @@
 TEST(SpdyAltSvcWireFormatTest, RoundTrip) {
   for (int i = 0; i < 1 << 3; ++i) {
     SpdyAltSvcWireFormat::AlternativeService altsvc;
-    std::string expected_header_field_value;
+    SpdyString expected_header_field_value;
     FuzzAlternativeService(i, &altsvc, &expected_header_field_value);
 
     // Test ParseHeaderFieldValue().
@@ -283,7 +283,7 @@
 // parameter.  Multiple alternative services at a time.
 TEST(SpdyAltSvcWireFormatTest, RoundTripMultiple) {
   SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
-  std::string expected_header_field_value;
+  SpdyString expected_header_field_value;
   for (int i = 0; i < 1 << 3; ++i) {
     SpdyAltSvcWireFormat::AlternativeService altsvc;
     FuzzAlternativeService(i, &altsvc, &expected_header_field_value);
@@ -355,7 +355,7 @@
   SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
   const char* field_value_array[] = {"a=\":137\"", "a=\"foo:137\"",
                                      "a%25=\"foo\\\"bar\\\\baz:137\""};
-  for (const std::string& field_value : field_value_array) {
+  for (const SpdyString& field_value : field_value_array) {
     for (size_t len = 1; len < field_value.size(); ++len) {
       EXPECT_FALSE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
           field_value.substr(0, len), &altsvc_vector))
@@ -383,7 +383,7 @@
 // Test PercentDecode() on valid input.
 TEST(SpdyAltSvcWireFormatTest, PercentDecodeValid) {
   SpdyStringPiece input("");
-  std::string output;
+  SpdyString output;
   ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::PercentDecode(
       input.begin(), input.end(), &output));
   EXPECT_EQ("", output);
@@ -406,7 +406,7 @@
   const char* invalid_input_array[] = {"a%", "a%x", "a%b", "%J22", "%9z"};
   for (const char* invalid_input : invalid_input_array) {
     SpdyStringPiece input(invalid_input);
-    std::string output;
+    SpdyString output;
     EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::PercentDecode(
         input.begin(), input.end(), &output))
         << input;
@@ -416,7 +416,7 @@
 // Test ParseAltAuthority() on valid input.
 TEST(SpdyAltSvcWireFormatTest, ParseAltAuthorityValid) {
   SpdyStringPiece input(":42");
-  std::string host;
+  SpdyString host;
   uint16_t port;
   ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority(
       input.begin(), input.end(), &host, &port));
@@ -457,7 +457,7 @@
                                        "2003:8:0:16::509d:9615]:443"};
   for (const char* invalid_input : invalid_input_array) {
     SpdyStringPiece input(invalid_input);
-    std::string host;
+    SpdyString host;
     uint16_t port;
     EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority(
         input.begin(), input.end(), &host, &port))
diff --git a/src/net/spdy/spdy_buffer_unittest.cc b/src/net/spdy/spdy_buffer_unittest.cc
index 3dd4942..f46f083 100644
--- a/src/net/spdy/spdy_buffer_unittest.cc
+++ b/src/net/spdy/spdy_buffer_unittest.cc
@@ -7,11 +7,11 @@
 #include <cstddef>
 #include <cstring>
 #include <memory>
-#include <string>
 
 #include "base/bind.h"
 #include "base/memory/ref_counted.h"
 #include "net/base/io_buffer.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_protocol.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -25,8 +25,8 @@
 class SpdyBufferTest : public ::testing::Test {};
 
 // Make a string from the data remaining in |buffer|.
-std::string BufferToString(const SpdyBuffer& buffer) {
-  return std::string(buffer.GetRemainingData(), buffer.GetRemainingSize());
+SpdyString BufferToString(const SpdyBuffer& buffer) {
+  return SpdyString(buffer.GetRemainingData(), buffer.GetRemainingSize());
 }
 
 // Construct a SpdyBuffer from a SpdySerializedFrame and make sure its data
@@ -43,14 +43,14 @@
 // Construct a SpdyBuffer from a const char*/size_t pair and make sure
 // it makes a copy of the data.
 TEST_F(SpdyBufferTest, DataConstructor) {
-  std::string data(kData, kDataSize);
+  SpdyString data(kData, kDataSize);
   SpdyBuffer buffer(data.data(), data.size());
   // This mutation shouldn't affect |buffer|'s data.
   data[0] = 'H';
 
   EXPECT_NE(kData, buffer.GetRemainingData());
   EXPECT_EQ(kDataSize, buffer.GetRemainingSize());
-  EXPECT_EQ(std::string(kData, kDataSize), BufferToString(buffer));
+  EXPECT_EQ(SpdyString(kData, kDataSize), BufferToString(buffer));
 }
 
 void IncrementBy(size_t* x,
@@ -74,10 +74,10 @@
   buffer.AddConsumeCallback(
       base::Bind(&IncrementBy, &x2, SpdyBuffer::CONSUME));
 
-  EXPECT_EQ(std::string(kData, kDataSize), BufferToString(buffer));
+  EXPECT_EQ(SpdyString(kData, kDataSize), BufferToString(buffer));
 
   buffer.Consume(5);
-  EXPECT_EQ(std::string(kData + 5, kDataSize - 5), BufferToString(buffer));
+  EXPECT_EQ(SpdyString(kData + 5, kDataSize - 5), BufferToString(buffer));
   EXPECT_EQ(5u, x1);
   EXPECT_EQ(5u, x2);
 
@@ -110,11 +110,11 @@
   buffer.Consume(5);
   scoped_refptr<IOBuffer> io_buffer = buffer.GetIOBufferForRemainingData();
   size_t io_buffer_size = buffer.GetRemainingSize();
-  const std::string expectedData(kData + 5, kDataSize - 5);
-  EXPECT_EQ(expectedData, std::string(io_buffer->data(), io_buffer_size));
+  const SpdyString expectedData(kData + 5, kDataSize - 5);
+  EXPECT_EQ(expectedData, SpdyString(io_buffer->data(), io_buffer_size));
 
   buffer.Consume(kDataSize - 5);
-  EXPECT_EQ(expectedData, std::string(io_buffer->data(), io_buffer_size));
+  EXPECT_EQ(expectedData, SpdyString(io_buffer->data(), io_buffer_size));
 }
 
 // Make sure the IOBuffer returned by GetIOBufferForRemainingData()
diff --git a/src/net/spdy/spdy_deframer_visitor.cc b/src/net/spdy/spdy_deframer_visitor.cc
index 3af9f20..c6075c9 100644
--- a/src/net/spdy/spdy_deframer_visitor.cc
+++ b/src/net/spdy/spdy_deframer_visitor.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/spdy_deframer_visitor.h"
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <algorithm>
 #include <cstdint>
@@ -21,7 +20,6 @@
 #include "net/spdy/spdy_test_utils.h"
 
 using ::base::MakeUnique;
-using ::std::string;
 using ::testing::AssertionFailure;
 using ::testing::AssertionResult;
 using ::testing::AssertionSuccess;
@@ -212,7 +210,7 @@
   bool fin_ = false;
   bool got_hpack_end_ = false;
 
-  std::unique_ptr<string> data_;
+  std::unique_ptr<SpdyString> data_;
 
   // Total length of the data frame.
   size_t data_len_ = 0;
@@ -221,7 +219,7 @@
   // Length field).
   size_t padding_len_ = 0;
 
-  std::unique_ptr<string> goaway_description_;
+  std::unique_ptr<SpdyString> goaway_description_;
   std::unique_ptr<StringPairVector> headers_;
   std::unique_ptr<SettingVector> settings_;
   std::unique_ptr<TestHeadersHandler> headers_handler_;
@@ -418,7 +416,7 @@
                                << Http2FrameTypeToString(frame_type_);
   CHECK_GT(stream_id, 0u);
   auto ptr = MakeUnique<SpdyAltSvcIR>(stream_id);
-  ptr->set_origin(std::string(origin));
+  ptr->set_origin(SpdyString(origin));
   for (auto& altsvc : altsvc_vector) {
     ptr->add_altsvc(altsvc);
   }
@@ -457,7 +455,7 @@
   stream_id_ = stream_id;
   fin_ = fin;
   data_len_ = length;
-  data_.reset(new string());
+  data_.reset(new SpdyString());
 }
 
 // The SpdyFramer will not process any more data at this point.
@@ -481,7 +479,7 @@
                                << Http2FrameTypeToString(frame_type_);
   frame_type_ = GOAWAY;
   goaway_ir_ = MakeUnique<SpdyGoAwayIR>(last_good_stream_id, error_code, "");
-  goaway_description_.reset(new string());
+  goaway_description_.reset(new SpdyString());
 }
 
 // If len==0 then we've reached the end of the GOAWAY frame.
@@ -744,7 +742,7 @@
       << "   frame_type_=" << Http2FrameTypeToString(frame_type_);
   CHECK(!got_hpack_end_);
   CHECK(headers_);
-  headers_->emplace_back(std::string(key), std::string(value));
+  headers_->emplace_back(SpdyString(key), SpdyString(value));
   CHECK(headers_handler_);
   headers_handler_->OnHeader(key, value);
 }
diff --git a/src/net/spdy/spdy_deframer_visitor.h b/src/net/spdy/spdy_deframer_visitor.h
index 87188a4..9727d37 100644
--- a/src/net/spdy/spdy_deframer_visitor.h
+++ b/src/net/spdy/spdy_deframer_visitor.h
@@ -70,13 +70,13 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <vector>
 
 #include "base/logging.h"
 #include "base/macros.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_framer.h"
 #include "net/spdy/spdy_protocol.h"
 #include "net/spdy/spdy_protocol_test_utils.h"
@@ -92,7 +92,7 @@
 // particular the order of each header entry, though it doesn't expose the
 // inner details of the HPACK block, such as the type of encoding selected
 // for each header entry, nor dynamic table size changes.
-typedef std::pair<std::string, std::string> StringPair;
+typedef std::pair<SpdyString, SpdyString> StringPair;
 typedef std::vector<StringPair> StringPairVector;
 
 // Forward decl.
diff --git a/src/net/spdy/spdy_deframer_visitor_test.cc b/src/net/spdy/spdy_deframer_visitor_test.cc
index 06baf41..885062d 100644
--- a/src/net/spdy/spdy_deframer_visitor_test.cc
+++ b/src/net/spdy/spdy_deframer_visitor_test.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/spdy_deframer_visitor.h"
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <algorithm>
 #include <limits>
@@ -22,7 +21,6 @@
 #include "net/spdy/spdy_test_utils.h"
 
 using ::base::MakeUnique;
-using ::std::string;
 
 namespace net {
 namespace test {
@@ -66,9 +64,9 @@
     return encoder_.SerializeFrame(frame);
   }
 
-  string SerializeFrames(
+  SpdyString SerializeFrames(
       const std::vector<std::unique_ptr<SpdyFrameIR>>& frames) {
-    string result;
+    SpdyString result;
     for (const auto& frame_ptr : frames) {
       auto sf = SerializeFrame(*frame_ptr);
       result.append(sf.data(), sf.size());
diff --git a/src/net/spdy/spdy_frame_builder.cc b/src/net/spdy/spdy_frame_builder.cc
index 172f9d2..fe6ae60 100644
--- a/src/net/spdy/spdy_frame_builder.cc
+++ b/src/net/spdy/spdy_frame_builder.cc
@@ -131,6 +131,25 @@
                                      size_t length) {
   uint8_t raw_frame_type = SerializeFrameType(type);
   DCHECK(IsDefinedFrameType(raw_frame_type));
+  return BeginNewFrameInternal(framer, raw_frame_type, flags, stream_id,
+                               length);
+}
+
+bool SpdyFrameBuilder::BeginNewExtensionFrame(const SpdyFramer& framer,
+                                              uint8_t raw_frame_type,
+                                              uint8_t flags,
+                                              SpdyStreamId stream_id,
+                                              size_t length) {
+  DCHECK(!IsDefinedFrameType(raw_frame_type));
+  return BeginNewFrameInternal(framer, raw_frame_type, flags, stream_id,
+                               length);
+}
+
+bool SpdyFrameBuilder::BeginNewFrameInternal(const SpdyFramer& framer,
+                                             uint8_t raw_frame_type,
+                                             uint8_t flags,
+                                             SpdyStreamId stream_id,
+                                             size_t length) {
   DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
   bool success = true;
   SPDY_BUG_IF(framer.GetFrameMaximumSize() < length_)
diff --git a/src/net/spdy/spdy_frame_builder.h b/src/net/spdy/spdy_frame_builder.h
index 2715452..689fbcd 100644
--- a/src/net/spdy/spdy_frame_builder.h
+++ b/src/net/spdy/spdy_frame_builder.h
@@ -9,7 +9,6 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 
 #include "base/gtest_prod_util.h"
 #include "base/sys_byteorder.h"
@@ -54,14 +53,22 @@
                      uint8_t flags,
                      SpdyStreamId stream_id);
 
-  // Populates this frame with a HTTP2 frame prefix with length information.
-  // The given type must be a control frame type.
+  // Populates this frame with a HTTP2 frame prefix with type and length
+  // information.  |type| must be a defined type.
   bool BeginNewFrame(const SpdyFramer& framer,
                      SpdyFrameType type,
                      uint8_t flags,
                      SpdyStreamId stream_id,
                      size_t length);
 
+  // Populates this frame with a HTTP2 frame prefix with type and length
+  // information.  |raw_frame_type| must not be a defined frame type.
+  bool BeginNewExtensionFrame(const SpdyFramer& framer,
+                              uint8_t raw_frame_type,
+                              uint8_t flags,
+                              SpdyStreamId stream_id,
+                              size_t length);
+
   // Takes the buffer from the SpdyFrameBuilder.
   SpdySerializedFrame take() {
     SPDY_BUG_IF(output_ != nullptr) << "ZeroCopyOutputBuffer is used to build "
@@ -115,6 +122,14 @@
   FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutput);
   FRIEND_TEST_ALL_PREFIXES(SpdyFrameBuilderTest, GetWritableOutputNegative);
 
+  // Populates this frame with a HTTP2 frame prefix with type and length
+  // information.
+  bool BeginNewFrameInternal(const SpdyFramer& framer,
+                             uint8_t raw_frame_type,
+                             uint8_t flags,
+                             SpdyStreamId stream_id,
+                             size_t length);
+
   // Returns a writeable buffer of given size in bytes, to be appended to the
   // currently written frame. Does bounds checking on length but does not
   // increment the underlying iterator. To do so, consumers should subsequently
diff --git a/src/net/spdy/spdy_framer.cc b/src/net/spdy/spdy_framer.cc
index 94fd404..c741147 100644
--- a/src/net/spdy/spdy_framer.cc
+++ b/src/net/spdy/spdy_framer.cc
@@ -13,7 +13,6 @@
 #include <list>
 #include <memory>
 #include <new>
-#include <string>
 #include <vector>
 
 #include "base/lazy_instance.h"
@@ -35,7 +34,6 @@
 #include "net/spdy/spdy_frame_reader.h"
 #include "net/spdy/spdy_framer_decoder_adapter.h"
 
-using std::string;
 using std::vector;
 
 namespace net {
@@ -193,6 +191,9 @@
 }
 
 void SpdyFramer::set_extension_visitor(ExtensionVisitorInterface* extension) {
+  if (decoder_adapter_ != nullptr) {
+    decoder_adapter_->set_extension_visitor(extension);
+  }
   extension_ = extension;
 }
 
@@ -1634,7 +1635,7 @@
                << " contains upper-case characters.";
       return false;
     }
-    std::string name(temp);
+    SpdyString name(temp);
 
     // Read header value.
     if (!reader.ReadStringPiece32(&temp)) {
@@ -1642,7 +1643,7 @@
                << num_headers << ").";
       return false;
     }
-    std::string value(temp);
+    SpdyString value(temp);
 
     // Ensure no duplicates.
     if (block->find(name) != block->end()) {
@@ -1688,7 +1689,7 @@
   size_t size_without_block =
       is_first_frame_ ? framer_->GetHeaderFrameSizeSansBlock(*headers_ir_)
                       : framer_->GetContinuationMinimumSize();
-  auto encoding = base::MakeUnique<string>();
+  auto encoding = base::MakeUnique<SpdyString>();
   encoder_->Next(kMaxControlFrameSize - size_without_block, encoding.get());
   has_next_frame_ = encoder_->HasNext();
 
@@ -1752,7 +1753,7 @@
   }
   builder.WriteBytes(data_ir.data(), data_ir.data_len());
   if (data_ir.padding_payload_len() > 0) {
-    string padding(data_ir.padding_payload_len(), 0);
+    SpdyString padding(data_ir.padding_payload_len(), 0);
     builder.WriteBytes(padding.data(), padding.length());
   }
   DCHECK_EQ(size_with_padding, builder.length());
@@ -1900,7 +1901,7 @@
 void SpdyFramer::SerializeHeadersBuilderHelper(const SpdyHeadersIR& headers,
                                                uint8_t* flags,
                                                size_t* size,
-                                               string* hpack_encoding,
+                                               SpdyString* hpack_encoding,
                                                int* weight,
                                                size_t* length_field) {
   if (headers.fin()) {
@@ -1956,7 +1957,7 @@
   // The size of this frame, including padding (if there is any) and
   // variable-length header block.
   size_t size = 0;
-  string hpack_encoding;
+  SpdyString hpack_encoding;
   int weight = 0;
   size_t length_field = 0;
   SerializeHeadersBuilderHelper(headers, &flags, &size, &hpack_encoding,
@@ -2013,7 +2014,7 @@
 void SpdyFramer::SerializePushPromiseBuilderHelper(
     const SpdyPushPromiseIR& push_promise,
     uint8_t* flags,
-    string* hpack_encoding,
+    SpdyString* hpack_encoding,
     size_t* size) {
   *flags = 0;
   // This will get overwritten if we overflow into a CONTINUATION frame.
@@ -2041,7 +2042,7 @@
     const SpdyPushPromiseIR& push_promise) {
   uint8_t flags = 0;
   size_t size = 0;
-  string hpack_encoding;
+  SpdyString hpack_encoding;
   SerializePushPromiseBuilderHelper(push_promise, &flags, &hpack_encoding,
                                     &size);
 
@@ -2087,7 +2088,7 @@
 
 SpdySerializedFrame SpdyFramer::SerializeHeadersGivenEncoding(
     const SpdyHeadersIR& headers,
-    const string& encoding) const {
+    const SpdyString& encoding) const {
   size_t frame_size = GetHeaderFrameSizeSansBlock(headers) + encoding.size();
   SpdyFrameBuilder builder(frame_size);
   builder.BeginNewFrame(*this, SpdyFrameType::HEADERS,
@@ -2110,7 +2111,7 @@
   builder.WriteBytes(&encoding[0], encoding.size());
 
   if (headers.padding_payload_len() > 0) {
-    string padding(headers.padding_payload_len(), 0);
+    SpdyString padding(headers.padding_payload_len(), 0);
     builder.WriteBytes(padding.data(), padding.length());
   }
   return builder.take();
@@ -2118,7 +2119,7 @@
 
 SpdySerializedFrame SpdyFramer::SerializeContinuation(
     const SpdyContinuationIR& continuation) const {
-  const string& encoding = continuation.encoding();
+  const SpdyString& encoding = continuation.encoding();
   size_t frame_size = GetContinuationMinimumSize() + encoding.size();
   SpdyFrameBuilder builder(frame_size);
   uint8_t flags = continuation.end_headers() ? HEADERS_FLAG_END_HEADERS : 0;
@@ -2131,7 +2132,7 @@
 }
 
 void SpdyFramer::SerializeAltSvcBuilderHelper(const SpdyAltSvcIR& altsvc_ir,
-                                              string* value,
+                                              SpdyString* value,
                                               size_t* size) const {
   *size = GetAltSvcMinimumSize();
   *size = *size + altsvc_ir.origin().length();
@@ -2141,7 +2142,7 @@
 }
 
 SpdySerializedFrame SpdyFramer::SerializeAltSvc(const SpdyAltSvcIR& altsvc_ir) {
-  string value;
+  SpdyString value;
   size_t size = 0;
   SerializeAltSvcBuilderHelper(altsvc_ir, &value, &size);
   SpdyFrameBuilder builder(size);
@@ -2331,8 +2332,8 @@
 
   ok = ok && builder.WriteBytes(data_ir.data(), data_ir.data_len());
   if (data_ir.padding_payload_len() > 0) {
-    string padding;
-    padding = string(data_ir.padding_payload_len(), 0);
+    SpdyString padding;
+    padding = SpdyString(data_ir.padding_payload_len(), 0);
     ok = ok && builder.WriteBytes(padding.data(), padding.length());
   }
   DCHECK_EQ(size_with_padding, builder.length());
@@ -2455,7 +2456,7 @@
   // The size of this frame, including padding (if there is any) and
   // variable-length header block.
   size_t size = 0;
-  string hpack_encoding;
+  SpdyString hpack_encoding;
   int weight = 0;
   size_t length_field = 0;
   SerializeHeadersBuilderHelper(headers, &flags, &size, &hpack_encoding,
@@ -2515,7 +2516,7 @@
                                       ZeroCopyOutputBuffer* output) {
   uint8_t flags = 0;
   size_t size = 0;
-  string hpack_encoding;
+  SpdyString hpack_encoding;
   SerializePushPromiseBuilderHelper(push_promise, &flags, &hpack_encoding,
                                     &size);
 
@@ -2563,7 +2564,7 @@
 
 bool SpdyFramer::SerializeContinuation(const SpdyContinuationIR& continuation,
                                        ZeroCopyOutputBuffer* output) const {
-  const string& encoding = continuation.encoding();
+  const SpdyString& encoding = continuation.encoding();
   size_t frame_size = GetContinuationMinimumSize() + encoding.size();
   SpdyFrameBuilder builder(frame_size, output);
   uint8_t flags = continuation.end_headers() ? HEADERS_FLAG_END_HEADERS : 0;
@@ -2577,7 +2578,7 @@
 
 bool SpdyFramer::SerializeAltSvc(const SpdyAltSvcIR& altsvc_ir,
                                  ZeroCopyOutputBuffer* output) {
-  string value;
+  SpdyString value;
   size_t size = 0;
   SerializeAltSvcBuilderHelper(altsvc_ir, &value, &size);
   SpdyFrameBuilder builder(size, output);
@@ -2711,7 +2712,7 @@
 }
 
 bool SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder,
-                                              const string& hpack_encoding,
+                                              const SpdyString& hpack_encoding,
                                               SpdyStreamId stream_id,
                                               SpdyFrameType type,
                                               int padding_payload_len) {
@@ -2736,7 +2737,7 @@
   bool ret = builder->WriteBytes(&hpack_encoding[0],
                                  hpack_encoding.size() - bytes_remaining);
   if (padding_payload_len > 0) {
-    string padding = string(padding_payload_len, 0);
+    SpdyString padding = SpdyString(padding_payload_len, 0);
     ret &= builder->WriteBytes(padding.data(), padding.length());
   }
   if (bytes_remaining > 0 && !skip_rewritelength_) {
diff --git a/src/net/spdy/spdy_framer.h b/src/net/spdy/spdy_framer.h
index 6b0d31a..c08a57d 100644
--- a/src/net/spdy/spdy_framer.h
+++ b/src/net/spdy/spdy_framer.h
@@ -11,13 +11,13 @@
 #include <cstdint>
 #include <map>
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/sys_byteorder.h"
 #include "net/base/net_export.h"
 #include "net/spdy/hpack/hpack_decoder_interface.h"
 #include "net/spdy/hpack/hpack_encoder.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_alt_svc_wire_format.h"
 #include "net/spdy/spdy_flags.h"
@@ -210,6 +210,18 @@
   virtual bool OnUnknownFrame(SpdyStreamId stream_id, uint8_t frame_type) = 0;
 };
 
+class SpdyFrameSequence {
+ public:
+  virtual ~SpdyFrameSequence() {}
+
+  // Serializes the next frame in the sequence to |output|. Returns the number
+  // of bytes written to |output|.
+  virtual size_t NextFrame(ZeroCopyOutputBuffer* output) = 0;
+
+  // Returns true iff there is at least one more frame in the sequence.
+  virtual bool HasNextFrame() const = 0;
+};
+
 class ExtensionVisitorInterface {
  public:
   virtual ~ExtensionVisitorInterface() {}
@@ -703,7 +715,7 @@
   size_t GetNumberRequiredContinuationFrames(size_t size);
 
   bool WritePayloadWithContinuation(SpdyFrameBuilder* builder,
-                                    const std::string& hpack_encoding,
+                                    const SpdyString& hpack_encoding,
                                     SpdyStreamId stream_id,
                                     SpdyFrameType type,
                                     int padding_payload_len);
@@ -721,7 +733,7 @@
   // block. Does not need or use the SpdyHeaderBlock inside SpdyHeadersIR.
   SpdySerializedFrame SerializeHeadersGivenEncoding(
       const SpdyHeadersIR& headers,
-      const std::string& encoding) const;
+      const SpdyString& encoding) const;
 
   // Calculates the number of bytes required to serialize a SpdyHeadersIR, not
   // including the bytes to be used for the encoded header set.
@@ -748,17 +760,17 @@
                                       const SettingsMap* values,
                                       size_t* size) const;
   void SerializeAltSvcBuilderHelper(const SpdyAltSvcIR& altsvc_ir,
-                                    std::string* value,
+                                    SpdyString* value,
                                     size_t* size) const;
   void SerializeHeadersBuilderHelper(const SpdyHeadersIR& headers,
                                      uint8_t* flags,
                                      size_t* size,
-                                     std::string* hpack_encoding,
+                                     SpdyString* hpack_encoding,
                                      int* weight,
                                      size_t* length_field);
   void SerializePushPromiseBuilderHelper(const SpdyPushPromiseIR& push_promise,
                                          uint8_t* flags,
-                                         std::string* hpack_encoding,
+                                         SpdyString* hpack_encoding,
                                          size_t* size);
 
   // The size of the control frame buffer.
diff --git a/src/net/spdy/spdy_framer_decoder_adapter.cc b/src/net/spdy/spdy_framer_decoder_adapter.cc
index ad390a8..9b7feb5 100644
--- a/src/net/spdy/spdy_framer_decoder_adapter.cc
+++ b/src/net/spdy/spdy_framer_decoder_adapter.cc
@@ -5,7 +5,6 @@
 #include "net/spdy/spdy_framer_decoder_adapter.h"
 
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/format_macros.h"
@@ -192,6 +191,10 @@
     framer_.set_visitor(visitor_adapter_.get());
   }
 
+  void set_extension_visitor(ExtensionVisitorInterface* visitor) override {
+    framer_.set_extension_visitor(visitor);
+  }
+
   // Passes the call on to the base adapter class and wrapped SpdyFramer.
   void set_debug_visitor(
       SpdyFramerDebugVisitorInterface* debug_visitor) override {
diff --git a/src/net/spdy/spdy_framer_decoder_adapter.h b/src/net/spdy/spdy_framer_decoder_adapter.h
index 4f67f66..cbe0788 100644
--- a/src/net/spdy/spdy_framer_decoder_adapter.h
+++ b/src/net/spdy/spdy_framer_decoder_adapter.h
@@ -32,6 +32,10 @@
   virtual void set_visitor(SpdyFramerVisitorInterface* visitor);
   SpdyFramerVisitorInterface* visitor() const { return visitor_; }
 
+  // Set extension callbacks to be called from the framer or decoder. Optional.
+  // If called multiple times, only the last visitor will be used.
+  virtual void set_extension_visitor(ExtensionVisitorInterface* visitor) = 0;
+
   // Set debug callbacks to be called from the framer. The debug visitor is
   // completely optional and need not be set in order for normal operation.
   // If this is called multiple times, only the last visitor will be used.
diff --git a/src/net/spdy/spdy_framer_test.cc b/src/net/spdy/spdy_framer_test.cc
index 2ac6868..42b2cd2 100644
--- a/src/net/spdy/spdy_framer_test.cc
+++ b/src/net/spdy/spdy_framer_test.cc
@@ -11,7 +11,6 @@
 #include <cstdint>
 #include <limits>
 #include <memory>
-#include <string>
 #include <tuple>
 #include <vector>
 
@@ -33,7 +32,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 
-using std::string;
 using testing::_;
 
 namespace net {
@@ -471,7 +469,7 @@
             << "\", altsvc_vector)";
     test_altsvc_ir_.set_stream_id(stream_id);
     if (origin.length() > 0) {
-      test_altsvc_ir_.set_origin(std::string(origin));
+      test_altsvc_ir_.set_origin(SpdyString(origin));
     }
     for (const SpdyAltSvcWireFormat::AlternativeService& altsvc :
          altsvc_vector) {
@@ -645,7 +643,7 @@
   size_t length_ = 0;
   uint8_t type_ = 0;
   uint8_t flags_ = 0;
-  string payload_;
+  SpdyString payload_;
 };
 
 // Retrieves serialized headers from a HEADERS frame.
@@ -712,7 +710,7 @@
     }
   }
 
-  void CompareFrame(const string& description,
+  void CompareFrame(const SpdyString& description,
                     const SpdySerializedFrame& actual_frame,
                     const unsigned char* expected,
                     const int expected_len) {
@@ -722,7 +720,7 @@
                                   expected, expected_len);
   }
 
-  void CompareFrames(const string& description,
+  void CompareFrames(const SpdyString& description,
                      const SpdySerializedFrame& expected_frame,
                      const SpdySerializedFrame& actual_frame) {
     CompareCharArraysWithHexError(
@@ -1174,7 +1172,7 @@
 
   SpdyContinuationIR continuation(0);
   auto some_nonsense_encoding =
-      base::MakeUnique<string>("some nonsense encoding");
+      base::MakeUnique<SpdyString>("some nonsense encoding");
   continuation.take_encoding(std::move(some_nonsense_encoding));
   continuation.set_end_headers(true);
   SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
@@ -1268,11 +1266,11 @@
   frame.WriteUInt32(0);   // Priority exclusivity and dependent stream.
   frame.WriteUInt8(255);  // Priority weight.
 
-  string value("value1\0value2", 13);
+  SpdyString value("value1\0value2", 13);
   // TODO(jgraettinger): If this pattern appears again, move to test class.
   SpdyHeaderBlock header_set;
   header_set["name"] = value;
-  string buffer;
+  SpdyString buffer;
   HpackEncoder encoder(ObtainHpackHuffmanTable());
   encoder.DisableCompression();
   encoder.EncodeHeaderSet(header_set, &buffer);
@@ -2477,7 +2475,7 @@
   SpdyHeaderBlock header_block;
   header_block["bar"] = "foo";
   header_block["foo"] = "bar";
-  auto buffer = base::MakeUnique<string>();
+  auto buffer = base::MakeUnique<SpdyString>();
   HpackEncoder encoder(ObtainHpackHuffmanTable());
   encoder.DisableCompression();
   encoder.EncodeHeaderSet(header_block, buffer.get());
@@ -2592,7 +2590,7 @@
 
     SpdyPushPromiseIR push_promise(42, 57);
     push_promise.set_padding_len(1);
-    string big_value(TestSpdyVisitor::sent_control_frame_max_size(), 'x');
+    SpdyString big_value(TestSpdyVisitor::sent_control_frame_max_size(), 'x');
     push_promise.SetHeader("xxx", big_value);
     SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
     if (use_output_) {
@@ -2742,7 +2740,7 @@
   // Exact payload length will change with HPACK, but this should be long
   // enough to cause an overflow.
   const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size();
-  string big_value(kBigValueSize, 'x');
+  SpdyString big_value(kBigValueSize, 'x');
   headers.SetHeader("aa", big_value);
   SpdySerializedFrame control_frame(SpdyFramerPeer::SerializeHeaders(
       &framer, headers, use_output_ ? &output_ : nullptr));
@@ -2768,9 +2766,9 @@
   // Exact payload length will change with HPACK, but this should be long
   // enough to cause an overflow.
   const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size();
-  string big_valuex(kBigValueSize, 'x');
+  SpdyString big_valuex(kBigValueSize, 'x');
   headers->SetHeader("aa", big_valuex);
-  string big_valuez(kBigValueSize, 'z');
+  SpdyString big_valuez(kBigValueSize, 'z');
   headers->SetHeader("bb", big_valuez);
 
   SpdyFramer::SpdyHeaderFrameIterator frame_it(&framer, std::move(headers));
@@ -2829,7 +2827,7 @@
   // Exact payload length will change with HPACK, but this should be long
   // enough to cause an overflow.
   const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size();
-  string big_value(kBigValueSize, 'x');
+  SpdyString big_value(kBigValueSize, 'x');
   push_promise.SetHeader("aa", big_value);
   SpdySerializedFrame control_frame(framer.SerializePushPromise(push_promise));
   if (use_output_) {
@@ -2858,7 +2856,7 @@
   const size_t kHeaderBufferSize =
       TestSpdyVisitor::header_data_chunk_max_size() * kHeaderBufferChunks;
   const size_t kBigValueSize = kHeaderBufferSize * 2;
-  string big_value(kBigValueSize, 'x');
+  SpdyString big_value(kBigValueSize, 'x');
   SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
   SpdyHeadersIR headers(1);
   headers.set_fin(true);
@@ -2899,7 +2897,7 @@
       0x00, 0x00, 0x00,          // Truncated Status Field
   };
   const size_t pad_length = length + kFrameHeaderSize - sizeof(kH2FrameData);
-  string pad(pad_length, 'A');
+  SpdyString pad(pad_length, 'A');
   TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
 
   visitor.SimulateInFramer(kH2FrameData, sizeof(kH2FrameData));
@@ -3052,11 +3050,6 @@
 }
 
 TEST_P(SpdyFramerTest, ReadUnknownSettingsWithExtension) {
-  if (std::get<0>(GetParam()) != DECODER_SELF) {
-    // TODO(jamessynge): Implement extension support for the new decoder.
-    return;
-  }
-
   SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
   const unsigned char kH2FrameData[] = {
       0x00, 0x00, 0x0c,        // Length: 12
@@ -3426,11 +3419,6 @@
 // Receiving an unknown frame when a continuation is expected should
 // result in a SPDY_UNEXPECTED_FRAME error
 TEST_P(SpdyFramerTest, ReceiveUnknownMidContinuationWithExtension) {
-  if (std::get<0>(GetParam()) != DECODER_SELF) {
-    // TODO(jamessynge): Implement extension support for the new decoder.
-    return;
-  }
-
   const unsigned char kInput[] = {
       0x00, 0x00, 0x10,        // Length: 16
       0x01,                    //   Type: HEADERS
@@ -3649,6 +3637,45 @@
   EXPECT_EQ(1u, static_cast<unsigned>(visitor.settings_ack_sent_));
 }
 
+TEST_P(SpdyFramerTest, ReadUnknownExtensionFrameWithExtension) {
+  SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
+
+  // The unrecognized frame type should still have a valid length.
+  const unsigned char unknown_frame[] = {
+      0x00, 0x00, 0x14,        // Length: 20
+      0xff,                    //   Type: UnknownFrameType(255)
+      0xff,                    //  Flags: 0xff
+      0xff, 0xff, 0xff, 0xff,  // Stream: 0x7fffffff (R-bit set)
+      0xff, 0xff, 0xff, 0xff,  // Payload
+      0xff, 0xff, 0xff, 0xff,  //
+      0xff, 0xff, 0xff, 0xff,  //
+      0xff, 0xff, 0xff, 0xff,  //
+      0xff, 0xff, 0xff, 0xff,  //
+  };
+  TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
+  TestExtension extension;
+  visitor.set_extension_visitor(&extension);
+  visitor.SimulateInFramer(unknown_frame, arraysize(unknown_frame));
+  EXPECT_EQ(0, visitor.error_count_);
+  EXPECT_EQ(0x7fffffffu, extension.stream_id_);
+  EXPECT_EQ(20u, extension.length_);
+  EXPECT_EQ(255, extension.type_);
+  EXPECT_EQ(0xff, extension.flags_);
+  EXPECT_EQ(SpdyString(20, '\xff'), extension.payload_);
+
+  // Follow it up with a valid control frame to make sure we handle
+  // subsequent frames correctly.
+  SpdySettingsIR settings_ir;
+  settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10);
+  SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
+  visitor.SimulateInFramer(
+      reinterpret_cast<unsigned char*>(control_frame.data()),
+      control_frame.size());
+  EXPECT_EQ(0, visitor.error_count_);
+  EXPECT_EQ(1u, static_cast<unsigned>(visitor.setting_count_));
+  EXPECT_EQ(1u, static_cast<unsigned>(visitor.settings_ack_sent_));
+}
+
 TEST_P(SpdyFramerTest, ReadGarbageWithValidLength) {
   SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
   const unsigned char kFrameData[] = {
@@ -4578,7 +4605,7 @@
   VLOG(1) << "frame1_size = " << frame1_size;
   VLOG(1) << "frame2_size = " << frame2_size;
 
-  string input_buffer;
+  SpdyString input_buffer;
   input_buffer.append(frame1.data(), frame1_size);
   input_buffer.append(frame2.data(), frame2_size);
 
@@ -4627,7 +4654,7 @@
   VLOG(1) << "frame1_size = " << frame1_size;
   VLOG(1) << "frame2_size = " << frame2_size;
 
-  string input_buffer;
+  SpdyString input_buffer;
   input_buffer.append(frame1.data(), frame1_size);
   input_buffer.append(frame2.data(), frame2_size);
 
diff --git a/src/net/spdy/spdy_header_block.cc b/src/net/spdy/spdy_header_block.cc
index 9430ef0..1cb7b13 100644
--- a/src/net/spdy/spdy_header_block.cc
+++ b/src/net/spdy/spdy_header_block.cc
@@ -18,8 +18,6 @@
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
 
-using std::string;
-
 namespace net {
 namespace {
 
@@ -209,11 +207,11 @@
   return *this;
 }
 
-string SpdyHeaderBlock::ValueProxy::as_string() const {
+SpdyString SpdyHeaderBlock::ValueProxy::as_string() const {
   if (lookup_result_ == block_->end()) {
     return "";
   } else {
-    return std::string(lookup_result_->second.value());
+    return SpdyString(lookup_result_->second.value());
   }
 }
 
@@ -245,12 +243,12 @@
   return !(operator==(other));
 }
 
-string SpdyHeaderBlock::DebugString() const {
+SpdyString SpdyHeaderBlock::DebugString() const {
   if (empty()) {
     return "{}";
   }
 
-  string output = "\n{\n";
+  SpdyString output = "\n{\n";
   for (auto it = begin(); it != end(); ++it) {
     SpdyStrAppend(&output, "  ", it->first, " ", it->second, "\n");
   }
@@ -361,7 +359,7 @@
 
   for (base::DictionaryValue::Iterator it(*header_dict); !it.IsAtEnd();
        it.Advance()) {
-    string value;
+    SpdyString value;
     if (!it.value().GetAsString(&value)) {
       headers->clear();
       return false;
diff --git a/src/net/spdy/spdy_header_block.h b/src/net/spdy/spdy_header_block.h
index 2e2cd39..13288a8 100644
--- a/src/net/spdy/spdy_header_block.h
+++ b/src/net/spdy/spdy_header_block.h
@@ -10,13 +10,14 @@
 #include <list>
 #include <map>
 #include <memory>
-#include <string>
+#include <utility>
 #include <vector>
 
 #include "base/macros.h"
 #include "net/base/linked_hash_map.h"
 #include "net/base/net_export.h"
 #include "net/log/net_log.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace base {
@@ -150,7 +151,7 @@
 
   // Provides a human readable multi-line representation of the stored header
   // keys and values.
-  std::string DebugString() const;
+  SpdyString DebugString() const;
 
   iterator begin() { return iterator(block_.begin()); }
   iterator end() { return iterator(block_.end()); }
@@ -184,8 +185,8 @@
   ValueProxy operator[](const SpdyStringPiece key);
 
   // This object provides automatic conversions that allow SpdyHeaderBlock to be
-  // nearly a drop-in replacement for linked_hash_map<string, string>. It reads
-  // data from or writes data to a SpdyHeaderBlock::Storage.
+  // nearly a drop-in replacement for linked_hash_map<SpdyString, SpdyString>.
+  // It reads data from or writes data to a SpdyHeaderBlock::Storage.
   class NET_EXPORT ValueProxy {
    public:
     ~ValueProxy();
@@ -201,7 +202,7 @@
     // Assignment modifies the underlying SpdyHeaderBlock.
     ValueProxy& operator=(const SpdyStringPiece other);
 
-    std::string as_string() const;
+    SpdyString as_string() const;
 
    private:
     friend class SpdyHeaderBlock;
diff --git a/src/net/spdy/spdy_header_block_test.cc b/src/net/spdy/spdy_header_block_test.cc
index 75aa371..0828847 100644
--- a/src/net/spdy/spdy_header_block_test.cc
+++ b/src/net/spdy/spdy_header_block_test.cc
@@ -13,7 +13,6 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using std::string;
 using ::testing::ElementsAre;
 
 namespace net {
@@ -73,15 +72,15 @@
 // This test verifies that headers can be set in a variety of ways.
 TEST(SpdyHeaderBlockTest, AddHeaders) {
   SpdyHeaderBlock block;
-  block["foo"] = string(300, 'x');
+  block["foo"] = SpdyString(300, 'x');
   block["bar"] = "baz";
   block["qux"] = "qux1";
   block["qux"] = "qux2";
   block.insert(std::make_pair("key", "value"));
 
-  EXPECT_EQ(Pair("foo", string(300, 'x')), *block.find("foo"));
+  EXPECT_EQ(Pair("foo", SpdyString(300, 'x')), *block.find("foo"));
   EXPECT_EQ("baz", block["bar"]);
-  string qux("qux");
+  SpdyString qux("qux");
   EXPECT_EQ("qux2", block[qux]);
   ASSERT_NE(block.end(), block.find("key"));
   EXPECT_EQ(Pair("key", "value"), *block.find("key"));
@@ -93,7 +92,7 @@
 // This test verifies that SpdyHeaderBlock can be copied using Clone().
 TEST(SpdyHeaderBlockTest, CopyBlocks) {
   SpdyHeaderBlock block1;
-  block1["foo"] = string(300, 'x');
+  block1["foo"] = SpdyString(300, 'x');
   block1["bar"] = "baz";
   block1.insert(std::make_pair("qux", "qux1"));
 
@@ -164,7 +163,7 @@
   SpdyHeaderBlock block;
   block["foo"] = "foo";
   block.AppendValueOrAddHeader("foo", "bar");
-  EXPECT_EQ(Pair("foo", string("foo\0bar", 7)), *block.find("foo"));
+  EXPECT_EQ(Pair("foo", SpdyString("foo\0bar", 7)), *block.find("foo"));
 
   block.insert(std::make_pair("foo", "baz"));
   EXPECT_EQ("baz", block["foo"]);
@@ -188,9 +187,9 @@
 
   EXPECT_EQ("key1=value1; key2=value2; key3=value3", block["cookie"]);
   EXPECT_EQ("baz", block["foo"]);
-  EXPECT_EQ(string("h1v1\0h1v2\0h1v3", 14), block["h1"]);
-  EXPECT_EQ(string("h2v1\0h2v2\0h2v3", 14), block["h2"]);
-  EXPECT_EQ(string("h3v2\0h3v3", 9), block["h3"]);
+  EXPECT_EQ(SpdyString("h1v1\0h1v2\0h1v3", 14), block["h1"]);
+  EXPECT_EQ(SpdyString("h2v1\0h2v2\0h2v3", 14), block["h2"]);
+  EXPECT_EQ(SpdyString("h3v2\0h3v3", 9), block["h3"]);
   EXPECT_EQ("singleton", block["h4"]);
 }
 
diff --git a/src/net/spdy/spdy_header_indexing.cc b/src/net/spdy/spdy_header_indexing.cc
index 948b5a8..881ba86 100644
--- a/src/net/spdy/spdy_header_indexing.cc
+++ b/src/net/spdy/spdy_header_indexing.cc
@@ -21,7 +21,7 @@
 HeaderIndexing::~HeaderIndexing() {}
 
 void HeaderIndexing::CreateInitIndexingHeaders() {
-  const std::string initial_fields[] = {
+  const SpdyString initial_fields[] = {
       // Estimated top 100 fields.
       "alt-svc",
       "date",
@@ -139,7 +139,7 @@
     return false;
   }
   // header is in indexing set.
-  std::string header_str(header.data(), header.size());
+  SpdyString header_str(header.data(), header.size());
   if (indexing_set_.find(header_str) != indexing_set_.end()) {
     return true;
   }
@@ -156,7 +156,7 @@
   return false;
 }
 
-void HeaderIndexing::TryInsertHeader(std::string&& header,
+void HeaderIndexing::TryInsertHeader(SpdyString&& header,
                                      HeaderSet* set,
                                      size_t bound) {
   std::pair<HeaderSet::iterator, bool> result = set->insert(std::move(header));
diff --git a/src/net/spdy/spdy_header_indexing.h b/src/net/spdy/spdy_header_indexing.h
index a7d5c20..69cc08d 100644
--- a/src/net/spdy/spdy_header_indexing.h
+++ b/src/net/spdy/spdy_header_indexing.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 #include <memory>
-#include <string>
 #include <unordered_set>
 #include <utility>
 
 #include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -29,7 +29,7 @@
 // UpdateSets to log the headers into both sets.
 class NET_EXPORT HeaderIndexing {
  public:
-  using HeaderSet = std::unordered_set<std::string>;
+  using HeaderSet = std::unordered_set<SpdyString>;
 
   HeaderIndexing();
   ~HeaderIndexing();
@@ -53,7 +53,7 @@
 
  private:
   friend class test::HeaderIndexingPeer;
-  void TryInsertHeader(std::string&& header, HeaderSet* set, size_t bound);
+  void TryInsertHeader(SpdyString&& header, HeaderSet* set, size_t bound);
   // Headers to index.
   HeaderSet indexing_set_;
   // Headers seen so far.
diff --git a/src/net/spdy/spdy_header_indexing_test.cc b/src/net/spdy/spdy_header_indexing_test.cc
index f5c0cd2..8797fef 100644
--- a/src/net/spdy/spdy_header_indexing_test.cc
+++ b/src/net/spdy/spdy_header_indexing_test.cc
@@ -17,7 +17,7 @@
   HeaderIndexingPeer() : hi_() {}
 
   void CreateTestInit() {
-    std::string input[] = {"key1", "key2", "key3"};
+    SpdyString input[] = {"key1", "key2", "key3"};
     hi_.indexing_set_ =
         HeaderIndexing::HeaderSet(input, input + arraysize(input));
     hi_.tracking_set_ =
@@ -30,12 +30,12 @@
 
   void CreateInitIndexingHeaders() { hi_.CreateInitIndexingHeaders(); }
 
-  void TryInsert(std::string&& header) {
+  void TryInsert(SpdyString&& header) {
     hi_.TryInsertHeader(std::move(header), &(hi_.indexing_set_),
                         hi_.indexing_set_bound_);
   }
 
-  bool InTrackingSet(std::string str) {
+  bool InTrackingSet(const SpdyString& str) {
     return hi_.tracking_set_.find(str) != hi_.tracking_set_.end();
   }
 
@@ -67,16 +67,16 @@
 };
 
 TEST_F(SpdyHeaderIndexingTest, TestTryInsertHeader) {
-  std::string key("key4");
+  SpdyString key("key4");
   hi_->TryInsert(std::move(key));
   EXPECT_EQ(3u, hi_->indexing_set_size());
   EXPECT_TRUE(hi_->ShouldIndex("key4"));
 }
 
 TEST_F(SpdyHeaderIndexingTest, TestShouldIndex) {
-  std::string key3 = "key3";
-  std::string key4 = "key4";
-  std::string key5 = "key5";
+  SpdyString key3 = "key3";
+  SpdyString key4 = "key4";
+  SpdyString key5 = "key5";
   // Cache hit.
   EXPECT_TRUE(hi_->ShouldIndex(key3));
   EXPECT_EQ(3u, hi_->indexing_set_size());
diff --git a/src/net/spdy/spdy_http_stream.cc b/src/net/spdy/spdy_http_stream.cc
index 3a70ae6..8bfc4b7 100644
--- a/src/net/spdy/spdy_http_stream.cc
+++ b/src/net/spdy/spdy_http_stream.cc
@@ -7,7 +7,6 @@
 #include <algorithm>
 #include <list>
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/bind.h"
@@ -24,6 +23,7 @@
 #include "net/http/http_response_info.h"
 #include "net/log/net_log_event_type.h"
 #include "net/log/net_log_with_source.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_header_block.h"
 #include "net/spdy/spdy_http_utils.h"
 #include "net/spdy/spdy_protocol.h"
@@ -445,7 +445,7 @@
 
 void SpdyHttpStream::ResetStreamInternal() {
   spdy_session_->ResetStream(stream()->stream_id(), ERROR_CODE_INTERNAL_ERROR,
-                             std::string());
+                             SpdyString());
 }
 
 void SpdyHttpStream::OnRequestBodyReadCompleted(int status) {
diff --git a/src/net/spdy/spdy_http_stream_unittest.cc b/src/net/spdy/spdy_http_stream_unittest.cc
index 1db2e91..f6b1462 100644
--- a/src/net/spdy/spdy_http_stream_unittest.cc
+++ b/src/net/spdy/spdy_http_stream_unittest.cc
@@ -7,7 +7,6 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 
 #include "base/run_loop.h"
 #include "base/stl_util.h"
@@ -26,6 +25,7 @@
 #include "net/log/net_log_with_source.h"
 #include "net/log/test_net_log.h"
 #include "net/socket/socket_test_util.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_http_utils.h"
 #include "net/spdy/spdy_session.h"
 #include "net/spdy/spdy_test_util_common.h"
@@ -161,10 +161,9 @@
         CreateSecureSpdySession(http_session_.get(), key_, NetLogWithSource());
   }
 
-  void TestSendCredentials(
-    ChannelIDService* channel_id_service,
-    const std::string& cert,
-    const std::string& proof);
+  void TestSendCredentials(ChannelIDService* channel_id_service,
+                           const SpdyString& cert,
+                           const SpdyString& proof);
 
   SpdyTestUtil spdy_util_;
   TestNetLog net_log_;
@@ -591,21 +590,21 @@
   ASSERT_EQ(kUploadDataSize,
             http_stream->ReadResponseBody(
                 buf1.get(), kUploadDataSize, callback.callback()));
-  EXPECT_EQ(kUploadData, std::string(buf1->data(), kUploadDataSize));
+  EXPECT_EQ(kUploadData, SpdyString(buf1->data(), kUploadDataSize));
 
   // Check |chunk2| response.
   scoped_refptr<IOBuffer> buf2(new IOBuffer(kUploadData1Size));
   ASSERT_EQ(kUploadData1Size,
             http_stream->ReadResponseBody(
                 buf2.get(), kUploadData1Size, callback.callback()));
-  EXPECT_EQ(kUploadData1, std::string(buf2->data(), kUploadData1Size));
+  EXPECT_EQ(kUploadData1, SpdyString(buf2->data(), kUploadData1Size));
 
   // Check |chunk3| response.
   scoped_refptr<IOBuffer> buf3(new IOBuffer(kUploadDataSize));
   ASSERT_EQ(kUploadDataSize,
             http_stream->ReadResponseBody(
                 buf3.get(), kUploadDataSize, callback.callback()));
-  EXPECT_EQ(kUploadData, std::string(buf3->data(), kUploadDataSize));
+  EXPECT_EQ(kUploadData, SpdyString(buf3->data(), kUploadDataSize));
 
   ASSERT_TRUE(response.headers.get());
   ASSERT_EQ(200, response.headers->response_code());
@@ -687,7 +686,7 @@
   ASSERT_EQ(kUploadDataSize,
             http_stream->ReadResponseBody(
                 buf1.get(), kUploadDataSize, callback.callback()));
-  EXPECT_EQ(kUploadData, std::string(buf1->data(), kUploadDataSize));
+  EXPECT_EQ(kUploadData, SpdyString(buf1->data(), kUploadDataSize));
 
   // Check |chunk2| response.
   ASSERT_EQ(0,
@@ -902,7 +901,7 @@
   ASSERT_EQ(kUploadDataSize,
             http_stream->ReadResponseBody(
                 buf1.get(), kUploadDataSize, callback.callback()));
-  EXPECT_EQ(kUploadData, std::string(buf1->data(), kUploadDataSize));
+  EXPECT_EQ(kUploadData, SpdyString(buf1->data(), kUploadDataSize));
 
   ASSERT_TRUE(response.headers.get());
   ASSERT_EQ(200, response.headers->response_code());
diff --git a/src/net/spdy/spdy_http_utils.cc b/src/net/spdy/spdy_http_utils.cc
index 005b198..5fb4692 100644
--- a/src/net/spdy/spdy_http_utils.cc
+++ b/src/net/spdy/spdy_http_utils.cc
@@ -4,7 +4,7 @@
 
 #include "net/spdy/spdy_http_utils.h"
 
-#include <string>
+#include <vector>
 
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
@@ -18,26 +18,27 @@
 #include "net/http/http_response_headers.h"
 #include "net/http/http_response_info.h"
 #include "net/http/http_util.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
 
 namespace {
 
-void AddSpdyHeader(const std::string& name,
-                   const std::string& value,
+void AddSpdyHeader(const SpdyString& name,
+                   const SpdyString& value,
                    SpdyHeaderBlock* headers) {
   if (headers->find(name) == headers->end()) {
     (*headers)[name] = value;
   } else {
-    std::string joint_value = (*headers)[name].as_string();
+    SpdyString joint_value = (*headers)[name].as_string();
     joint_value.append(1, '\0');
     joint_value.append(value);
     (*headers)[name] = joint_value;
   }
 }
 
-} // namespace
+}  // namespace
 
 bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers,
                                HttpResponseInfo* response) {
@@ -45,8 +46,8 @@
   SpdyHeaderBlock::const_iterator it = headers.find(":status");
   if (it == headers.end())
     return false;
-  std::string status = it->second.as_string();
-  std::string raw_headers("HTTP/1.1 ");
+  SpdyString status = it->second.as_string();
+  SpdyString raw_headers("HTTP/1.1 ");
   raw_headers.append(status);
   raw_headers.push_back('\0');
   for (it = headers.begin(); it != headers.end(); ++it) {
@@ -58,12 +59,12 @@
     // becomes
     //    Set-Cookie: foo\0
     //    Set-Cookie: bar\0
-    std::string value = it->second.as_string();
+    SpdyString value = it->second.as_string();
     size_t start = 0;
     size_t end = 0;
     do {
       end = value.find('\0', start);
-      std::string tval;
+      SpdyString tval;
       if (end != value.npos)
         tval = value.substr(start, (end - start));
       else
@@ -99,7 +100,7 @@
 
   HttpRequestHeaders::Iterator it(request_headers);
   while (it.GetNext()) {
-    std::string name = base::ToLowerASCII(it.name());
+    SpdyString name = base::ToLowerASCII(it.name());
     if (name.empty() || name[0] == ':' || name == "connection" ||
         name == "proxy-connection" || name == "transfer-encoding" ||
         name == "host") {
@@ -150,7 +151,7 @@
   SpdyHeaderBlock::const_iterator it = headers.find(":scheme");
   if (it == headers.end())
     return GURL();
-  std::string url = it->second.as_string();
+  SpdyString url = it->second.as_string();
   url.append("://");
 
   it = headers.find(":authority");
diff --git a/src/net/spdy/spdy_log_util.cc b/src/net/spdy/spdy_log_util.cc
index 6f3d691..ec56b4b 100644
--- a/src/net/spdy/spdy_log_util.cc
+++ b/src/net/spdy/spdy_log_util.cc
@@ -11,16 +11,16 @@
 
 namespace net {
 
-std::string ElideGoAwayDebugDataForNetLog(NetLogCaptureMode capture_mode,
-                                          base::StringPiece debug_data) {
+SpdyString ElideGoAwayDebugDataForNetLog(NetLogCaptureMode capture_mode,
+                                         base::StringPiece debug_data) {
   // Note: this logic should be kept in sync with stripGoAwayDebugData in
   // chrome/browser/resources/net_internals/log_view_painter.js.
   if (capture_mode.include_cookies_and_credentials()) {
     return debug_data.as_string();
   }
 
-  return std::string("[") + base::SizeTToString(debug_data.size()) +
-         std::string(" bytes were stripped]");
+  return SpdyString("[") + base::SizeTToString(debug_data.size()) +
+         SpdyString(" bytes were stripped]");
 }
 
 std::unique_ptr<base::ListValue> ElideSpdyHeaderBlockForNetLog(
diff --git a/src/net/spdy/spdy_log_util.h b/src/net/spdy/spdy_log_util.h
index 1c56491..e2f98e6 100644
--- a/src/net/spdy/spdy_log_util.h
+++ b/src/net/spdy/spdy_log_util.h
@@ -6,11 +6,11 @@
 #define NET_SPDY_SPDY_LOG_UTIL_H_
 
 #include <memory>
-#include <string>
 
 #include "base/strings/string_piece.h"
 #include "net/base/net_export.h"
 #include "net/log/net_log_capture_mode.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_header_block.h"
 
 namespace base {
@@ -21,9 +21,9 @@
 
 // Given an HTTP/2 GOAWAY frame |debug_data|, returns the elided version
 // according to |capture_mode|.
-NET_EXPORT_PRIVATE std::string ElideGoAwayDebugDataForNetLog(
-    NetLogCaptureMode capture_mode,
-    base::StringPiece debug_data);
+NET_EXPORT_PRIVATE SpdyString
+ElideGoAwayDebugDataForNetLog(NetLogCaptureMode capture_mode,
+                              base::StringPiece debug_data);
 
 // Given a SpdyHeaderBlock, return its base::ListValue representation.
 NET_EXPORT_PRIVATE std::unique_ptr<base::ListValue>
diff --git a/src/net/spdy/spdy_log_util_unittest.cc b/src/net/spdy/spdy_log_util_unittest.cc
index 40ac1c9..7c1f6d7 100644
--- a/src/net/spdy/spdy_log_util_unittest.cc
+++ b/src/net/spdy/spdy_log_util_unittest.cc
@@ -27,7 +27,7 @@
   std::unique_ptr<base::ListValue> list =
       ElideSpdyHeaderBlockForNetLog(headers, NetLogCaptureMode::Default());
   EXPECT_EQ(2u, list->GetSize());
-  std::string field;
+  SpdyString field;
   EXPECT_TRUE(list->GetString(0, &field));
   EXPECT_EQ("foo: bar", field);
   EXPECT_TRUE(list->GetString(1, &field));
diff --git a/src/net/spdy/spdy_network_transaction_unittest.cc b/src/net/spdy/spdy_network_transaction_unittest.cc
index 6e93f7f..f00777d 100644
--- a/src/net/spdy/spdy_network_transaction_unittest.cc
+++ b/src/net/spdy/spdy_network_transaction_unittest.cc
@@ -4,7 +4,6 @@
 
 #include <cmath>
 #include <memory>
-#include <string>
 #include <utility>
 #include <vector>
 
@@ -39,6 +38,7 @@
 #include "net/socket/client_socket_pool_base.h"
 #include "net/socket/next_proto.h"
 #include "net/spdy/buffered_spdy_framer.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_http_stream.h"
 #include "net/spdy/spdy_http_utils.h"
@@ -93,8 +93,8 @@
 
   struct TransactionHelperResult {
     int rv;
-    std::string status_line;
-    std::string response_data;
+    SpdyString status_line;
+    SpdyString response_data;
     HttpResponseInfo response_info;
   };
 
@@ -407,8 +407,7 @@
   // multiple transactions in the read pipeline; so as we read, we may have
   // to skip over data destined for other transactions while we consume
   // the data for |trans|.
-  int ReadResult(HttpNetworkTransaction* trans,
-                 std::string* result) {
+  int ReadResult(HttpNetworkTransaction* trans, SpdyString* result) {
     const int kSize = 3000;
 
     int bytes_read = 0;
@@ -448,7 +447,7 @@
   void RunServerPushTest(SequencedSocketData* data,
                          HttpResponseInfo* response,
                          HttpResponseInfo* push_response,
-                         const std::string& expected) {
+                         const SpdyString& expected) {
     NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
                                        NetLogWithSource(), nullptr);
     helper.RunPreTestSetup();
@@ -477,10 +476,10 @@
     // the results into a single string.
 
     // Read the server push body.
-    std::string result2;
+    SpdyString result2;
     ReadResult(&trans2, &result2);
     // Read the response body.
-    std::string result;
+    SpdyString result;
     ReadResult(trans, &result);
 
     // Verify that we consumed all test data.
@@ -565,8 +564,8 @@
     return upload_chunked_data_stream_.get();
   }
 
-  std::string GetDefaultUrlWithPath(const char* path) {
-    return std::string(kDefaultUrl) + path;
+  SpdyString GetDefaultUrlWithPath(const char* path) {
+    return SpdyString(kDefaultUrl) + path;
   }
 
   const GURL default_url_;
@@ -1672,7 +1671,7 @@
   helper.FinishDefaultTest();
   helper.VerifyDataConsumed();
 
-  std::string expected_response;
+  SpdyString expected_response;
   expected_response += kUploadData;
   expected_response += kUploadData;
   expected_response += kUploadData;
@@ -1798,7 +1797,7 @@
   helper.WaitForCallbackToComplete();
   EXPECT_THAT(helper.output().rv, IsOk());
 
-  std::string response_body;
+  SpdyString response_body;
   EXPECT_THAT(ReadTransaction(helper.trans(), &response_body), IsOk());
   EXPECT_EQ(kUploadData, response_body);
 
@@ -1903,7 +1902,7 @@
   ASSERT_TRUE(response);
   EXPECT_TRUE(response->headers);
   EXPECT_TRUE(response->was_fetched_via_spdy);
-  std::string response_data;
+  SpdyString response_data;
   rv = ReadTransaction(trans, &response_data);
   EXPECT_THAT(rv, IsError(ERR_SPDY_PROTOCOL_ERROR));
 
@@ -2237,7 +2236,7 @@
       spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true));
 
   SpdyHeaderBlock push_headers;
-  spdy_util_.AddUrlToHeaderBlock(std::string(kDefaultUrl) + "b.dat",
+  spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat",
                                  &push_headers);
 
   SpdySerializedFrame push_init_frame(
@@ -2354,7 +2353,7 @@
     EXPECT_EQ(1, d.response_started_count());
     EXPECT_FALSE(d.received_data_before_response());
     EXPECT_EQ(OK, d.request_status());
-    std::string contents("hello!");
+    SpdyString contents("hello!");
     EXPECT_EQ(contents, d.data_received());
   }
   EXPECT_TRUE(data.AllReadDataConsumed());
@@ -2422,7 +2421,7 @@
     base::RunLoop().Run();
 
     EXPECT_EQ(0, d.received_redirect_count());
-    std::string contents("hello!");
+    SpdyString contents("hello!");
     EXPECT_EQ(contents, d.data_received());
 
     std::unique_ptr<URLRequest> r2(spdy_url_request_context.CreateRequest(
@@ -2440,7 +2439,7 @@
     EXPECT_EQ(1, d2.response_started_count());
     EXPECT_FALSE(d2.received_data_before_response());
     EXPECT_EQ(OK, d2.request_status());
-    std::string contents2("hello!");
+    SpdyString contents2("hello!");
     EXPECT_EQ(contents2, d2.data_received());
   }
   EXPECT_TRUE(data.AllReadDataConsumed());
@@ -2474,7 +2473,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data,
                     &response,
@@ -2517,7 +2516,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data,
                     &response,
@@ -2560,7 +2559,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data,
                     &response,
@@ -2773,7 +2772,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data,
                     &response,
@@ -2829,7 +2828,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed my darling hello my baby");
+  SpdyString expected_push_result("pushed my darling hello my baby");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data, &response, &response2, kPushedData);
 
@@ -3128,7 +3127,7 @@
   response = *trans2.GetResponseInfo();
   EXPECT_TRUE(response.headers);
   EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine());
-  std::string result;
+  SpdyString result;
   ReadResult(&trans2, &result);
   EXPECT_EQ(kPushedData, result);
 
@@ -3200,14 +3199,14 @@
     scoped_refptr<HttpResponseHeaders> headers = out.response_info.headers;
     EXPECT_TRUE(headers);
     size_t iter = 0;
-    std::string name, value;
+    SpdyString name, value;
     SpdyHeaderBlock header_block;
     while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
       auto value_it = header_block.find(name);
       if (value_it == header_block.end() || value_it->second.empty()) {
         header_block[name] = value;
       } else {
-        std::string joint_value = value_it->second.as_string();
+        SpdyString joint_value = value_it->second.as_string();
         joint_value.append(1, '\0');
         joint_value.append(value);
         header_block[name] = joint_value;
@@ -3270,7 +3269,7 @@
                         test_cases[i].num_headers[1],
                         &reply_headers);
     // Construct the expected header reply string before moving |reply_headers|.
-    std::string expected_reply =
+    SpdyString expected_reply =
         spdy_test_util.ConstructSpdyReplyString(reply_headers);
 
     SpdySerializedFrame frame_reply(
@@ -3311,7 +3310,7 @@
     scoped_refptr<HttpResponseHeaders> headers = out.response_info.headers;
     ASSERT_TRUE(headers) << i;
     size_t iter = 0;
-    std::string name, value, lines;
+    SpdyString name, value, lines;
     while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
       lines.append(name);
       lines.append(": ");
@@ -3568,18 +3567,16 @@
   ASSERT_TRUE(entries[pos].params.get());
   ASSERT_TRUE(entries[pos].params->GetList("headers", &header_list));
 
-  std::vector<std::string> expected;
-  expected.push_back(std::string(spdy_util_.GetHostKey()) +
-                     ": www.example.org");
-  expected.push_back(std::string(spdy_util_.GetPathKey()) + ": /");
-  expected.push_back(std::string(spdy_util_.GetSchemeKey()) + ": " +
+  std::vector<SpdyString> expected;
+  expected.push_back(SpdyString(spdy_util_.GetHostKey()) + ": www.example.org");
+  expected.push_back(SpdyString(spdy_util_.GetPathKey()) + ": /");
+  expected.push_back(SpdyString(spdy_util_.GetSchemeKey()) + ": " +
                      default_url_.scheme());
-  expected.push_back(std::string(spdy_util_.GetMethodKey()) + ": GET");
+  expected.push_back(SpdyString(spdy_util_.GetMethodKey()) + ": GET");
   expected.push_back("user-agent: Chrome");
   EXPECT_EQ(expected.size(), header_list->GetSize());
-  for (std::vector<std::string>::const_iterator it = expected.begin();
-       it != expected.end();
-       ++it) {
+  for (std::vector<SpdyString>::const_iterator it = expected.begin();
+       it != expected.end(); ++it) {
     base::Value header(*it);
     EXPECT_NE(header_list->end(), header_list->Find(header)) <<
         "Header not found: " << *it;
@@ -3646,7 +3643,7 @@
   // Read Data
   TestCompletionCallback read_callback;
 
-  std::string content;
+  SpdyString content;
   do {
     // Read small chunks at a time.
     const int kSmallReadSize = 3;
@@ -3731,7 +3728,7 @@
   // Read Data
   TestCompletionCallback read_callback;
 
-  std::string content;
+  SpdyString content;
   int reads_completed = 0;
   do {
     // Read small chunks at a time.
@@ -3817,7 +3814,7 @@
   // Read Data
   TestCompletionCallback read_callback;
 
-  std::string content;
+  SpdyString content;
   int reads_completed = 0;
   do {
     // Read small chunks at a time.
@@ -3900,7 +3897,7 @@
   // Read Data
   TestCompletionCallback read_callback;
 
-  std::string content;
+  SpdyString content;
   int reads_completed = 0;
   do {
     // Read small chunks at a time.
@@ -4085,7 +4082,7 @@
   EXPECT_TRUE(response->was_alpn_negotiated);
   EXPECT_EQ("127.0.0.1", response->socket_address.host());
   EXPECT_EQ(443, response->socket_address.port());
-  std::string response_data;
+  SpdyString response_data;
   rv = ReadTransaction(&trans2, &response_data);
   EXPECT_THAT(rv, IsOk());
   EXPECT_EQ("hello!", response_data);
@@ -4201,7 +4198,7 @@
   EXPECT_TRUE(request.url.SchemeIs("https"));
   EXPECT_EQ("127.0.0.1", response->socket_address.host());
   EXPECT_EQ(443, response->socket_address.port());
-  std::string response_data;
+  SpdyString response_data;
   ASSERT_THAT(ReadTransaction(helper.trans(), &response_data), IsOk());
   EXPECT_EQ("hello", response_data);
 }
@@ -4296,7 +4293,7 @@
   EXPECT_TRUE(request.url.SchemeIs("https"));
   EXPECT_EQ("127.0.0.1", response->socket_address.host());
   EXPECT_EQ(70, response->socket_address.port());
-  std::string response_data;
+  SpdyString response_data;
   ASSERT_THAT(ReadTransaction(helper.trans(), &response_data), IsOk());
   EXPECT_EQ("hello", response_data);
 }
@@ -4348,7 +4345,7 @@
   ASSERT_TRUE(response.headers);
   EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine());
 
-  std::string response_data;
+  SpdyString response_data;
   ASSERT_THAT(ReadTransaction(trans, &response_data), IsOk());
   EXPECT_EQ("hello!", response_data);
   helper.VerifyDataConsumed();
@@ -4471,7 +4468,7 @@
   ASSERT_TRUE(response_proxy.headers);
   EXPECT_EQ("HTTP/1.1 200", response_proxy.headers->GetStatusLine());
 
-  std::string response_data;
+  SpdyString response_data;
   ASSERT_THAT(ReadTransaction(trans_proxy, &response_data), IsOk());
   EXPECT_EQ("hello!", response_data);
 
@@ -4554,7 +4551,7 @@
       ASSERT_TRUE(response);
       EXPECT_TRUE(response->headers);
       EXPECT_TRUE(response->was_fetched_via_spdy);
-      std::string response_data;
+      SpdyString response_data;
       rv = ReadTransaction(&trans, &response_data);
       EXPECT_THAT(rv, IsOk());
       EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
@@ -4695,7 +4692,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
   RunServerPushTest(&data,
                     &response,
@@ -4747,7 +4744,7 @@
 
   HttpResponseInfo response;
   HttpResponseInfo response2;
-  std::string expected_push_result("pushed");
+  SpdyString expected_push_result("pushed");
   SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
 
   NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
@@ -4779,10 +4776,10 @@
   base::RunLoop().RunUntilIdle();
 
   // Read the server push body.
-  std::string result2;
+  SpdyString result2;
   ReadResult(&trans2, &result2);
   // Read the response body.
-  std::string result;
+  SpdyString result;
   ReadResult(trans, &result);
 
   // Verify that the received push data is same as the expected push data.
@@ -4970,7 +4967,7 @@
     base::RunLoop().RunUntilIdle();
 
     // Read the response body.
-    std::string result;
+    SpdyString result;
     ReadResult(trans, &result);
 
     // Verify that we consumed all test data.
@@ -5067,7 +5064,7 @@
   EXPECT_TRUE(response.headers);
   EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine());
 
-  std::string result0;
+  SpdyString result0;
   ReadResult(trans0, &result0);
   EXPECT_EQ("hello!", result0);
 
@@ -5075,7 +5072,7 @@
   EXPECT_TRUE(push_response.headers);
   EXPECT_EQ("HTTP/1.1 200", push_response.headers->GetStatusLine());
 
-  std::string result1;
+  SpdyString result1;
   ReadResult(&trans1, &result1);
   EXPECT_EQ(kPushedData, result1);
 
@@ -5231,7 +5228,7 @@
   EXPECT_TRUE(response0.headers);
   EXPECT_EQ("HTTP/1.1 200", response0.headers->GetStatusLine());
 
-  std::string result0;
+  SpdyString result0;
   ReadResult(trans0, &result0);
   EXPECT_EQ(kData0, result0);
 
@@ -5239,7 +5236,7 @@
   EXPECT_TRUE(response1.headers);
   EXPECT_EQ("HTTP/1.1 200", response1.headers->GetStatusLine());
 
-  std::string result1;
+  SpdyString result1;
   ReadResult(&trans1, &result1);
   EXPECT_EQ(kData1, result1);
 
@@ -5247,7 +5244,7 @@
   EXPECT_TRUE(push_response.headers);
   EXPECT_EQ("HTTP/1.1 200", push_response.headers->GetStatusLine());
 
-  std::string result2;
+  SpdyString result2;
   ReadResult(&trans2, &result2);
   EXPECT_EQ(kPushedData, result2);
 
@@ -5472,8 +5469,8 @@
 // fail under specific circumstances.
 TEST_F(SpdyNetworkTransactionTest, WindowUpdateReceived) {
   static int kFrameCount = 2;
-  std::unique_ptr<std::string> content(
-      new std::string(kMaxSpdyFrameChunkSize, 'a'));
+  std::unique_ptr<SpdyString> content(
+      new SpdyString(kMaxSpdyFrameChunkSize, 'a'));
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1, kMaxSpdyFrameChunkSize * kFrameCount, LOWEST, nullptr,
       0));
@@ -5616,7 +5613,7 @@
   reads.push_back(CreateMockRead(resp, writes.size() + reads.size()));
 
   std::vector<SpdySerializedFrame> body_frames;
-  const std::string body_data(kChunkSize, 'x');
+  const SpdyString body_data(kChunkSize, 'x');
   for (size_t remaining = kTargetSize; remaining != 0;) {
     size_t frame_size = std::min(remaining, body_data.size());
     body_frames.push_back(spdy_util_.ConstructSpdyDataFrame(1, body_data.data(),
@@ -5699,8 +5696,8 @@
   // set content-length header correctly)
   static int kFrameCount = 3;
 
-  std::unique_ptr<std::string> content(
-      new std::string(kMaxSpdyFrameChunkSize, 'a'));
+  std::unique_ptr<SpdyString> content(
+      new SpdyString(kMaxSpdyFrameChunkSize, 'a'));
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1, kMaxSpdyFrameChunkSize * kFrameCount, LOWEST, nullptr,
       0));
@@ -5784,7 +5781,7 @@
       ceil(static_cast<double>(kBufferSize) / kMaxSpdyFrameChunkSize);
 
   // Construct content for a data frame of maximum size.
-  std::string content(kMaxSpdyFrameChunkSize, 'a');
+  SpdyString content(kMaxSpdyFrameChunkSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1,
@@ -5808,8 +5805,8 @@
 
   // If kBufferSize * num_upload_buffers > initial_window_size,
   // we need one additional frame to send the rest of 'a'.
-  std::string last_body(kBufferSize * num_upload_buffers - initial_window_size,
-                        'a');
+  SpdyString last_body(kBufferSize * num_upload_buffers - initial_window_size,
+                       'a');
   SpdySerializedFrame body4(spdy_util_.ConstructSpdyDataFrame(
       1, last_body.c_str(), last_body.size(), false));
 
@@ -5866,7 +5863,7 @@
                            writes.size());
 
   std::vector<std::unique_ptr<UploadElementReader>> element_readers;
-  std::string upload_data_string(kBufferSize * num_upload_buffers, 'a');
+  SpdyString upload_data_string(kBufferSize * num_upload_buffers, 'a');
   upload_data_string.append(kUploadData, kUploadDataSize);
   element_readers.push_back(base::WrapUnique(new UploadBytesElementReader(
       upload_data_string.c_str(), upload_data_string.size())));
@@ -5934,7 +5931,7 @@
       ceil(static_cast<double>(kBufferSize) / kMaxSpdyFrameChunkSize);
 
   // Construct content for a data frame of maximum size.
-  std::string content(kMaxSpdyFrameChunkSize, 'a');
+  SpdyString content(kMaxSpdyFrameChunkSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1,
@@ -5958,8 +5955,8 @@
 
   // If kBufferSize * num_upload_buffers > initial_window_size,
   // we need one additional frame to send the rest of 'a'.
-  std::string last_body(kBufferSize * num_upload_buffers - initial_window_size,
-                        'a');
+  SpdyString last_body(kBufferSize * num_upload_buffers - initial_window_size,
+                       'a');
   SpdySerializedFrame body4(spdy_util_.ConstructSpdyDataFrame(
       1, last_body.c_str(), last_body.size(), false));
 
@@ -6025,7 +6022,7 @@
                            writes.size());
 
   std::vector<std::unique_ptr<UploadElementReader>> element_readers;
-  std::string upload_data_string(kBufferSize * num_upload_buffers, 'a');
+  SpdyString upload_data_string(kBufferSize * num_upload_buffers, 'a');
   upload_data_string.append(kUploadData, kUploadDataSize);
   element_readers.push_back(base::WrapUnique(new UploadBytesElementReader(
       upload_data_string.c_str(), upload_data_string.size())));
@@ -6096,7 +6093,7 @@
       ceil(static_cast<double>(kBufferSize) / kMaxSpdyFrameChunkSize);
 
   // Construct content for a data frame of maximum size.
-  std::string content(kMaxSpdyFrameChunkSize, 'a');
+  SpdyString content(kMaxSpdyFrameChunkSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1,
@@ -6120,8 +6117,8 @@
 
   // If kBufferSize * num_upload_buffers > initial_window_size,
   // we need one additional frame to send the rest of 'a'.
-  std::string last_body(kBufferSize * num_upload_buffers - initial_window_size,
-                        'a');
+  SpdyString last_body(kBufferSize * num_upload_buffers - initial_window_size,
+                       'a');
   SpdySerializedFrame body4(spdy_util_.ConstructSpdyDataFrame(
       1, last_body.c_str(), last_body.size(), false));
 
@@ -6189,7 +6186,7 @@
                            writes.size());
 
   std::vector<std::unique_ptr<UploadElementReader>> element_readers;
-  std::string upload_data_string(kBufferSize * num_upload_buffers, 'a');
+  SpdyString upload_data_string(kBufferSize * num_upload_buffers, 'a');
   upload_data_string.append(kUploadData, kUploadDataSize);
   element_readers.push_back(base::WrapUnique(new UploadBytesElementReader(
       upload_data_string.c_str(), upload_data_string.size())));
@@ -6297,8 +6294,8 @@
 // Regression test for https://crbug.com/493348: request header exceeds 16 kB
 // and thus sent in multiple frames when using HTTP/2.
 TEST_F(SpdyNetworkTransactionTest, LargeRequest) {
-  const std::string kKey("foo");
-  const std::string kValue(1 << 15, 'z');
+  const SpdyString kKey("foo");
+  const SpdyString kValue(1 << 15, 'z');
 
   HttpRequestInfo request;
   request.method = "GET";
@@ -6342,9 +6339,9 @@
 
   // HPACK decoder implementation limits string literal length to 16 kB.
   const char* response_headers[2];
-  const std::string kKey(16 * 1024, 'a');
+  const SpdyString kKey(16 * 1024, 'a');
   response_headers[0] = kKey.data();
-  const std::string kValue(16 * 1024, 'b');
+  const SpdyString kValue(16 * 1024, 'b');
   response_headers[1] = kValue.data();
 
   SpdySerializedFrame resp(
diff --git a/src/net/spdy/spdy_pinnable_buffer_piece_test.cc b/src/net/spdy/spdy_pinnable_buffer_piece_test.cc
index ab117a2..e4687ee 100644
--- a/src/net/spdy/spdy_pinnable_buffer_piece_test.cc
+++ b/src/net/spdy/spdy_pinnable_buffer_piece_test.cc
@@ -4,6 +4,7 @@
 
 #include "net/spdy/spdy_pinnable_buffer_piece.h"
 
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_prefixed_buffer_reader.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -13,14 +14,14 @@
 
 class SpdyPinnableBufferPieceTest : public ::testing::Test {
  protected:
-  SpdyPrefixedBufferReader Build(const std::string& prefix,
-                                 const std::string& suffix) {
+  SpdyPrefixedBufferReader Build(const SpdyString& prefix,
+                                 const SpdyString& suffix) {
     prefix_ = prefix;
     suffix_ = suffix;
     return SpdyPrefixedBufferReader(prefix_.data(), prefix_.length(),
                                     suffix_.data(), suffix_.length());
   }
-  std::string prefix_, suffix_;
+  SpdyString prefix_, suffix_;
 };
 
 TEST_F(SpdyPinnableBufferPieceTest, Pin) {
diff --git a/src/net/spdy/spdy_prefixed_buffer_reader_test.cc b/src/net/spdy/spdy_prefixed_buffer_reader_test.cc
index f14d345..9e08b42 100644
--- a/src/net/spdy/spdy_prefixed_buffer_reader_test.cc
+++ b/src/net/spdy/spdy_prefixed_buffer_reader_test.cc
@@ -4,6 +4,7 @@
 
 #include "net/spdy/spdy_prefixed_buffer_reader.h"
 
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -16,14 +17,14 @@
 
 class SpdyPrefixedBufferReaderTest : public ::testing::Test {
  protected:
-  SpdyPrefixedBufferReader Build(const std::string& prefix,
-                                 const std::string& suffix) {
+  SpdyPrefixedBufferReader Build(const SpdyString& prefix,
+                                 const SpdyString& suffix) {
     prefix_ = prefix;
     suffix_ = suffix;
     return SpdyPrefixedBufferReader(prefix_.data(), prefix_.length(),
                                     suffix_.data(), suffix_.length());
   }
-  std::string prefix_, suffix_;
+  SpdyString prefix_, suffix_;
 };
 
 TEST_F(SpdyPrefixedBufferReaderTest, ReadRawFromPrefix) {
diff --git a/src/net/spdy/spdy_protocol.cc b/src/net/spdy/spdy_protocol.cc
index 435c841..7d287ca 100644
--- a/src/net/spdy/spdy_protocol.cc
+++ b/src/net/spdy/spdy_protocol.cc
@@ -228,9 +228,9 @@
 SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, const char* data)
     : SpdyDataIR(stream_id, SpdyStringPiece(data)) {}
 
-SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, std::string data)
+SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, SpdyString data)
     : SpdyFrameWithFinIR(stream_id),
-      data_store_(base::MakeUnique<std::string>(std::move(data))),
+      data_store_(base::MakeUnique<SpdyString>(std::move(data))),
       data_(data_store_->data()),
       data_len_(data_store_->size()),
       padded_(false),
@@ -306,7 +306,7 @@
 
 SpdyGoAwayIR::SpdyGoAwayIR(SpdyStreamId last_good_stream_id,
                            SpdyErrorCode error_code,
-                           std::string description)
+                           SpdyString description)
     : description_store_(std::move(description)),
       description_(description_store_) {
   set_last_good_stream_id(last_good_stream_id);
@@ -325,7 +325,7 @@
 
 SpdyContinuationIR::SpdyContinuationIR(SpdyStreamId stream_id)
     : SpdyFrameWithStreamIdIR(stream_id), end_headers_(false) {
-  encoding_ = base::MakeUnique<std::string>();
+  encoding_ = base::MakeUnique<SpdyString>();
 }
 
 SpdyContinuationIR::~SpdyContinuationIR() {}
diff --git a/src/net/spdy/spdy_protocol.h b/src/net/spdy/spdy_protocol.h
index a10d9da..a81539c 100644
--- a/src/net/spdy/spdy_protocol.h
+++ b/src/net/spdy/spdy_protocol.h
@@ -16,7 +16,6 @@
 #include <limits>
 #include <map>
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/compiler_specific.h"
@@ -24,6 +23,7 @@
 #include "base/macros.h"
 #include "base/sys_byteorder.h"
 #include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_alt_svc_wire_format.h"
 #include "net/spdy/spdy_bitmasks.h"
@@ -464,7 +464,7 @@
   SpdyDataIR(SpdyStreamId stream_id, const char* data);
 
   // Moves data into data_store_. Makes a copy if passed a non-movable string.
-  SpdyDataIR(SpdyStreamId stream_id, std::string data);
+  SpdyDataIR(SpdyStreamId stream_id, SpdyString data);
 
   // Use in conjunction with SetDataShallow() for shallow-copy on data.
   explicit SpdyDataIR(SpdyStreamId stream_id);
@@ -488,7 +488,7 @@
 
   // Deep-copy of data (keep private copy).
   void SetDataDeep(SpdyStringPiece data) {
-    data_store_.reset(new std::string(data.data(), data.size()));
+    data_store_.reset(new SpdyString(data.data(), data.size()));
     data_ = data_store_->data();
     data_len_ = data.size();
   }
@@ -514,7 +514,7 @@
 
  private:
   // Used to store data that this SpdyDataIR should own.
-  std::unique_ptr<std::string> data_store_;
+  std::unique_ptr<SpdyString> data_store_;
   const char* data_;
   size_t data_len_;
 
@@ -606,7 +606,7 @@
   // keep description live after constructing this SpdyGoAwayIR.
   SpdyGoAwayIR(SpdyStreamId last_good_stream_id,
                SpdyErrorCode error_code,
-               std::string description);
+               SpdyString description);
 
   ~SpdyGoAwayIR() override;
   SpdyStreamId last_good_stream_id() const { return last_good_stream_id_; }
@@ -629,7 +629,7 @@
  private:
   SpdyStreamId last_good_stream_id_;
   SpdyErrorCode error_code_;
-  const std::string description_store_;
+  const SpdyString description_store_;
   const SpdyStringPiece description_;
 
   DISALLOW_COPY_AND_ASSIGN(SpdyGoAwayIR);
@@ -748,13 +748,13 @@
 
   bool end_headers() const { return end_headers_; }
   void set_end_headers(bool end_headers) {end_headers_ = end_headers;}
-  const std::string& encoding() const { return *encoding_; }
-  void take_encoding(std::unique_ptr<std::string> encoding) {
+  const SpdyString& encoding() const { return *encoding_; }
+  void take_encoding(std::unique_ptr<SpdyString> encoding) {
     encoding_ = std::move(encoding);
   }
 
  private:
-  std::unique_ptr<std::string> encoding_;
+  std::unique_ptr<SpdyString> encoding_;
   bool end_headers_;
   DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR);
 };
@@ -764,12 +764,12 @@
   explicit SpdyAltSvcIR(SpdyStreamId stream_id);
   ~SpdyAltSvcIR() override;
 
-  std::string origin() const { return origin_; }
+  SpdyString origin() const { return origin_; }
   const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector() const {
     return altsvc_vector_;
   }
 
-  void set_origin(std::string origin) { origin_ = std::move(origin); }
+  void set_origin(SpdyString origin) { origin_ = std::move(origin); }
   void add_altsvc(const SpdyAltSvcWireFormat::AlternativeService& altsvc) {
     altsvc_vector_.push_back(altsvc);
   }
@@ -779,7 +779,7 @@
   SpdyFrameType frame_type() const override;
 
  private:
-  std::string origin_;
+  SpdyString origin_;
   SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_;
   DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR);
 };
diff --git a/src/net/spdy/spdy_protocol_test.cc b/src/net/spdy/spdy_protocol_test.cc
index cc12a62..7dffc98 100644
--- a/src/net/spdy/spdy_protocol_test.cc
+++ b/src/net/spdy/spdy_protocol_test.cc
@@ -14,8 +14,6 @@
 #include "net/test/gtest_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using std::string;
-
 namespace net {
 
 std::ostream& operator<<(std::ostream& os,
@@ -128,7 +126,7 @@
   struct {
     SpdySettingsIds setting_id;
     bool expected_bool;
-    const string expected_string;
+    const SpdyString expected_string;
   } test_cases[] = {
       {static_cast<SpdySettingsIds>(0), false, "SETTINGS_UNKNOWN"},
       {SETTINGS_HEADER_TABLE_SIZE, true, "SETTINGS_HEADER_TABLE_SIZE"},
@@ -234,19 +232,19 @@
   EXPECT_NE(SpdyStringPiece(d1.data(), d1.data_len()), s2);
 
   // Confirm copies a const string.
-  const string foo = "foo";
+  const SpdyString foo = "foo";
   SpdyDataIR d3(3, foo);
   EXPECT_EQ(foo, d3.data());
 
   // Confirm copies a non-const string.
-  string bar = "bar";
+  SpdyString bar = "bar";
   SpdyDataIR d4(4, bar);
   EXPECT_EQ("bar", bar);
   EXPECT_EQ("bar", SpdyStringPiece(d4.data(), d4.data_len()));
 
   // Confirm moves an rvalue reference. Note that the test string "baz" is too
   // short to trigger the move optimization, and instead a copy occurs.
-  string baz = "the quick brown fox";
+  SpdyString baz = "the quick brown fox";
   SpdyDataIR d5(5, std::move(baz));
   EXPECT_EQ("", baz);
   EXPECT_EQ(SpdyStringPiece(d5.data(), d5.data_len()), "the quick brown fox");
diff --git a/src/net/spdy/spdy_proxy_client_socket.cc b/src/net/spdy/spdy_proxy_client_socket.cc
index 9b9ce55..24805e1 100644
--- a/src/net/spdy/spdy_proxy_client_socket.cc
+++ b/src/net/spdy/spdy_proxy_client_socket.cc
@@ -33,7 +33,7 @@
 
 SpdyProxyClientSocket::SpdyProxyClientSocket(
     const base::WeakPtr<SpdyStream>& spdy_stream,
-    const std::string& user_agent,
+    const SpdyString& user_agent,
     const HostPortPair& endpoint,
     const HostPortPair& proxy_server,
     const NetLogWithSource& source_net_log,
@@ -351,7 +351,7 @@
     auth_->AddAuthorizationHeader(&authorization_headers);
   }
 
-  std::string request_line;
+  SpdyString request_line;
   BuildTunnelRequest(endpoint_, authorization_headers, user_agent_,
                      &request_line, &request_.extra_headers);
 
diff --git a/src/net/spdy/spdy_proxy_client_socket.h b/src/net/spdy/spdy_proxy_client_socket.h
index 80e1953..fd7eb5e 100644
--- a/src/net/spdy/spdy_proxy_client_socket.h
+++ b/src/net/spdy/spdy_proxy_client_socket.h
@@ -9,7 +9,7 @@
 #include <stdint.h>
 
 #include <list>
-#include <string>
+#include <memory>
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -25,6 +25,7 @@
 #include "net/http/proxy_client_socket.h"
 #include "net/log/net_log_source.h"
 #include "net/log/net_log_with_source.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_http_stream.h"
 #include "net/spdy/spdy_protocol.h"
 #include "net/spdy/spdy_read_queue.h"
@@ -45,7 +46,7 @@
   // data read/written to the socket will be transferred in data frames. This
   // object will set itself as |spdy_stream|'s delegate.
   SpdyProxyClientSocket(const base::WeakPtr<SpdyStream>& spdy_stream,
-                        const std::string& user_agent,
+                        const SpdyString& user_agent,
                         const HostPortPair& endpoint,
                         const HostPortPair& proxy_server,
                         const NetLogWithSource& source_net_log,
@@ -151,7 +152,7 @@
   const HostPortPair endpoint_;
   scoped_refptr<HttpAuthController> auth_;
 
-  std::string user_agent_;
+  SpdyString user_agent_;
 
   // We buffer the response body as it arrives asynchronously from the stream.
   SpdyReadQueue read_buffer_queue_;
diff --git a/src/net/spdy/spdy_proxy_client_socket_unittest.cc b/src/net/spdy/spdy_proxy_client_socket_unittest.cc
index 5ab6550..e32e435 100644
--- a/src/net/spdy/spdy_proxy_client_socket_unittest.cc
+++ b/src/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -122,7 +122,7 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  void CloseSpdySession(Error error, const std::string& description) {
+  void CloseSpdySession(Error error, const SpdyString& description) {
     spdy_session_->CloseSessionOnError(error, description);
   }
 
@@ -139,7 +139,7 @@
   SpdySessionDependencies session_deps_;
   MockConnect connect_data_;
   base::WeakPtr<SpdySession> spdy_session_;
-  std::string user_agent_;
+  SpdyString user_agent_;
   GURL url_;
   HostPortPair proxy_host_port_;
   HostPortPair endpoint_host_port_pair_;
@@ -242,7 +242,7 @@
                                                      int len) {
   scoped_refptr<IOBuffer> buf(new IOBuffer(len));
   ASSERT_EQ(len, sock_->Read(buf.get(), len, CompletionCallback()));
-  ASSERT_EQ(std::string(data, len), std::string(buf->data(), len));
+  ASSERT_EQ(SpdyString(data, len), SpdyString(buf->data(), len));
   ASSERT_TRUE(sock_->IsConnected());
 }
 
@@ -258,7 +258,7 @@
 
   EXPECT_EQ(len, read_callback_.WaitForResult());
   EXPECT_TRUE(sock_->IsConnected());
-  ASSERT_EQ(std::string(data, len), std::string(buf->data(), len));
+  ASSERT_EQ(SpdyString(data, len), SpdyString(buf->data(), len));
 }
 
 void SpdyProxyClientSocketTest::AssertReadStarts(const char* data, int len) {
@@ -274,7 +274,7 @@
 
   // Now the read will return
   EXPECT_EQ(len, read_callback_.WaitForResult());
-  ASSERT_EQ(std::string(data, len), std::string(read_buf_->data(), len));
+  ASSERT_EQ(SpdyString(data, len), SpdyString(read_buf_->data(), len));
 }
 
 void SpdyProxyClientSocketTest::AssertAsyncWriteSucceeds(const char* data,
@@ -454,7 +454,7 @@
   ASSERT_FALSE(headers->HasHeader("set-cookie"));
   ASSERT_TRUE(headers->HasHeaderValue("content-length", "0"));
 
-  std::string location;
+  SpdyString location;
   ASSERT_TRUE(headers->IsRedirect(&location));
   ASSERT_EQ(location, kRedirectUrl);
 
@@ -568,7 +568,7 @@
 }
 
 TEST_F(SpdyProxyClientSocketTest, WriteSplitsLargeDataIntoMultipleFrames) {
-  std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
+  SpdyString chunk_data(kMaxSpdyFrameChunkSize, 'x');
   SpdySerializedFrame conn(ConstructConnectRequestFrame());
   SpdySerializedFrame chunk(
       ConstructBodyFrame(chunk_data.data(), chunk_data.length()));
@@ -586,7 +586,7 @@
 
   AssertConnectSucceeds();
 
-  std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x');
+  SpdyString big_data(kMaxSpdyFrameChunkSize * 3, 'x');
   scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(),
                                                    big_data.length()));
 
@@ -796,7 +796,7 @@
   // Now attempt to do a read of more data than remains buffered
   scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33));
   ASSERT_EQ(kLen3, sock_->Read(buf.get(), kLen33, read_callback_.callback()));
-  ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3));
+  ASSERT_EQ(SpdyString(kMsg3, kLen3), SpdyString(buf->data(), kLen3));
   ASSERT_TRUE(sock_->IsConnected());
 }
 
@@ -1025,7 +1025,7 @@
   ASSERT_FALSE(sock_->IsConnected());
   scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
   ASSERT_EQ(kLen1, sock_->Read(buf.get(), kLen1, CompletionCallback()));
-  ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1));
+  ASSERT_EQ(SpdyString(kMsg1, kLen1), SpdyString(buf->data(), kLen1));
 
   ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
   ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
@@ -1114,7 +1114,7 @@
   // Make sure the write actually starts.
   base::RunLoop().RunUntilIdle();
 
-  CloseSpdySession(ERR_ABORTED, std::string());
+  CloseSpdySession(ERR_ABORTED, SpdyString());
 
   EXPECT_THAT(write_callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
 }
diff --git a/src/net/spdy/spdy_read_queue_unittest.cc b/src/net/spdy/spdy_read_queue_unittest.cc
index a211af1..a0a431c 100644
--- a/src/net/spdy/spdy_read_queue_unittest.cc
+++ b/src/net/spdy/spdy_read_queue_unittest.cc
@@ -7,11 +7,12 @@
 #include <algorithm>
 #include <cstddef>
 #include <memory>
-#include <string>
+#include <utility>
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_buffer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -24,7 +25,7 @@
 
 // Enqueues |data| onto |queue| in chunks of at most |max_buffer_size|
 // bytes.
-void EnqueueString(const std::string& data,
+void EnqueueString(const SpdyString& data,
                    size_t max_buffer_size,
                    SpdyReadQueue* queue) {
   ASSERT_GT(data.size(), 0u);
@@ -42,8 +43,8 @@
 
 // Dequeues all bytes in |queue| in chunks of at most
 // |max_buffer_size| bytes and returns the data as a string.
-std::string DrainToString(size_t max_buffer_size, SpdyReadQueue* queue) {
-  std::string data;
+SpdyString DrainToString(size_t max_buffer_size, SpdyReadQueue* queue) {
+  SpdyString data;
 
   // Pad the buffer so we can detect out-of-bound writes.
   size_t padding = std::max(static_cast<size_t>(4096), queue->GetTotalSize());
@@ -78,10 +79,10 @@
 // sizes.
 void RunEnqueueDequeueTest(size_t enqueue_max_buffer_size,
                            size_t dequeue_max_buffer_size) {
-  std::string data(kData, kDataSize);
+  SpdyString data(kData, kDataSize);
   SpdyReadQueue read_queue;
   EnqueueString(data, enqueue_max_buffer_size, &read_queue);
-  const std::string& drained_data =
+  const SpdyString& drained_data =
       DrainToString(dequeue_max_buffer_size, &read_queue);
   EXPECT_EQ(data, drained_data);
 }
diff --git a/src/net/spdy/spdy_session.cc b/src/net/spdy/spdy_session.cc
index 4a61c77..da91d6c 100644
--- a/src/net/spdy/spdy_session.cc
+++ b/src/net/spdy/spdy_session.cc
@@ -138,7 +138,7 @@
 
 std::unique_ptr<base::Value> NetLogSpdySessionCloseCallback(
     int net_error,
-    const std::string* description,
+    const SpdyString* description,
     NetLogCaptureMode /* capture_mode */) {
   auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger("net_error", net_error);
@@ -251,7 +251,7 @@
 std::unique_ptr<base::Value> NetLogSpdySendRstStreamCallback(
     SpdyStreamId stream_id,
     SpdyErrorCode error_code,
-    const std::string* description,
+    const SpdyString* description,
     NetLogCaptureMode /* capture_mode */) {
   auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger("stream_id", static_cast<int>(stream_id));
@@ -320,7 +320,7 @@
     size_t num_created_streams,
     size_t num_pushed_streams,
     size_t max_concurrent_streams,
-    const std::string& url,
+    const SpdyString& url,
     NetLogCaptureMode capture_mode) {
   auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger("num_active_streams", num_active_streams);
@@ -678,8 +678,8 @@
 // static
 bool SpdySession::CanPool(TransportSecurityState* transport_security_state,
                           const SSLInfo& ssl_info,
-                          const std::string& old_hostname,
-                          const std::string& new_hostname) {
+                          const SpdyString& old_hostname,
+                          const SpdyString& new_hostname) {
   // Pooling is prohibited if the server cert is not valid for the new domain,
   // and for connections on which client certs were sent. It is also prohibited
   // when channel ID was sent if the hosts are from different eTLDs+1.
@@ -698,7 +698,7 @@
   if (!ssl_info.cert->VerifyNameMatch(new_hostname, false))
     return false;
 
-  std::string pinning_failure_log;
+  SpdyString pinning_failure_log;
   // DISABLE_PIN_REPORTS is set here because this check can fail in
   // normal operation without being indicative of a misconfiguration or
   // attack. Port is left at 0 as it is never used.
@@ -910,7 +910,7 @@
                  READ_STATE_DO_READ, OK));
 }
 
-bool SpdySession::VerifyDomainAuthentication(const std::string& domain) {
+bool SpdySession::VerifyDomainAuthentication(const SpdyString& domain) {
   if (availability_state_ == STATE_DRAINING)
     return false;
 
@@ -1115,7 +1115,7 @@
 
 void SpdySession::ResetStream(SpdyStreamId stream_id,
                               SpdyErrorCode error_code,
-                              const std::string& description) {
+                              const SpdyString& description) {
   DCHECK_NE(stream_id, 0u);
 
   ActiveStreamMap::iterator it = active_streams_.find(stream_id);
@@ -1179,7 +1179,7 @@
 }
 
 void SpdySession::CloseSessionOnError(Error err,
-                                      const std::string& description) {
+                                      const SpdyString& description) {
   DCHECK_LT(err, ERR_IO_PENDING);
   DoDrainSession(err, description);
 }
@@ -1574,7 +1574,7 @@
   if (associated_stream_id == 0) {
     // In HTTP/2 0 stream id in PUSH_PROMISE frame leads to framer error and
     // session going away. We should never get here.
-    std::string description = SpdyStringPrintf(
+    SpdyString description = SpdyStringPrintf(
         "Received invalid associated stream id %d for pushed stream %d",
         associated_stream_id, stream_id);
     EnqueueResetStreamFrame(stream_id, request_priority,
@@ -1754,7 +1754,7 @@
 
 void SpdySession::ResetStreamIterator(ActiveStreamMap::iterator it,
                                       SpdyErrorCode error_code,
-                                      const std::string& description) {
+                                      const SpdyString& description) {
   // Send the RST_STREAM frame first as CloseActiveStreamIterator()
   // may close us.
   SpdyStreamId stream_id = it->first;
@@ -1769,7 +1769,7 @@
 void SpdySession::EnqueueResetStreamFrame(SpdyStreamId stream_id,
                                           RequestPriority priority,
                                           SpdyErrorCode error_code,
-                                          const std::string& description) {
+                                          const SpdyString& description) {
   DCHECK_NE(stream_id, 0u);
 
   net_log().AddEvent(NetLogEventType::HTTP2_SESSION_SEND_RST_STREAM,
@@ -2453,7 +2453,7 @@
   DCHECK(unclaimed_pushed_streams_.empty());
 }
 
-void SpdySession::DoDrainSession(Error err, const std::string& description) {
+void SpdySession::DoDrainSession(Error err, const SpdyString& description) {
   if (availability_state_ == STATE_DRAINING) {
     return;
   }
@@ -2504,7 +2504,7 @@
 
 void SpdySession::LogAbandonedStream(SpdyStream* stream, Error status) {
   DCHECK(stream);
-  std::string description =
+  SpdyString description =
       SpdyStringPrintf("ABANDONED (stream_id=%d): ", stream->stream_id()) +
       stream->url().spec();
   stream->LogStreamError(status, description);
@@ -2587,14 +2587,14 @@
 
   RecordProtocolErrorHistogram(
       MapFramerErrorToProtocolError(spdy_framer_error));
-  std::string description =
+  SpdyString description =
       SpdyStringPrintf("Framer error: %d (%s).", spdy_framer_error,
                        SpdyFramer::SpdyFramerErrorToString(spdy_framer_error));
   DoDrainSession(MapFramerErrorToNetError(spdy_framer_error), description);
 }
 
 void SpdySession::OnStreamError(SpdyStreamId stream_id,
-                                const std::string& description) {
+                                const SpdyString& description) {
   CHECK(in_io_loop_);
 
   ActiveStreamMap::iterator it = active_streams_.find(stream_id);
diff --git a/src/net/spdy/spdy_session.h b/src/net/spdy/spdy_session.h
index 6b23cbf..58ea684 100644
--- a/src/net/spdy/spdy_session.h
+++ b/src/net/spdy/spdy_session.h
@@ -12,7 +12,6 @@
 #include <map>
 #include <memory>
 #include <set>
-#include <string>
 #include <vector>
 
 #include "base/gtest_prod_util.h"
@@ -35,6 +34,7 @@
 #include "net/spdy/buffered_spdy_framer.h"
 #include "net/spdy/http2_priority_dependencies.h"
 #include "net/spdy/multiplexed_session.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/server_push_delegate.h"
 #include "net/spdy/spdy_alt_svc_wire_format.h"
@@ -292,8 +292,8 @@
   // |old_hostname| associated with |ssl_info|.
   static bool CanPool(TransportSecurityState* transport_security_state,
                       const SSLInfo& ssl_info,
-                      const std::string& old_hostname,
-                      const std::string& new_hostname);
+                      const SpdyString& old_hostname,
+                      const SpdyString& new_hostname);
 
   // Create a new SpdySession.
   // |spdy_session_key| is the host/port that this session connects to, privacy
@@ -368,7 +368,7 @@
   // TODO(wtc): rename this function and the Net.SpdyIPPoolDomainMatch
   // histogram because this function does more than verifying domain
   // authentication now.
-  bool VerifyDomainAuthentication(const std::string& domain);
+  bool VerifyDomainAuthentication(const SpdyString& domain);
 
   // Pushes the given producer into the write queue for
   // |stream|. |stream| is guaranteed to be activated before the
@@ -407,7 +407,7 @@
   // that that stream may hold the last reference to the session.
   void ResetStream(SpdyStreamId stream_id,
                    SpdyErrorCode error_code,
-                   const std::string& description);
+                   const SpdyString& description);
 
   // Check if a stream is active.
   bool IsStreamActive(SpdyStreamId stream_id) const;
@@ -451,7 +451,7 @@
   // |err| should be < ERR_IO_PENDING; this function is intended to be
   // called on error.
   // |description| indicates the reason for the error.
-  void CloseSessionOnError(Error err, const std::string& description);
+  void CloseSessionOnError(Error err, const SpdyString& description);
 
   // Mark this session as unavailable, meaning that it will not be used to
   // service new streams. Unlike when a GOAWAY frame is received, this function
@@ -706,7 +706,7 @@
   // CloseActiveStreamIterator().
   void ResetStreamIterator(ActiveStreamMap::iterator it,
                            SpdyErrorCode error_code,
-                           const std::string& description);
+                           const SpdyString& description);
 
   // Send a RST_STREAM frame with the given parameters. There should
   // either be no active stream with the given ID, or that active
@@ -714,7 +714,7 @@
   void EnqueueResetStreamFrame(SpdyStreamId stream_id,
                                RequestPriority priority,
                                SpdyErrorCode error_code,
-                               const std::string& description);
+                               const SpdyString& description);
 
   // Send a PRIORITY frame with the given parameters.
   void EnqueuePriorityFrame(SpdyStreamId stream_id,
@@ -852,7 +852,7 @@
 
   // If the session is already draining, does nothing. Otherwise, moves
   // the session to the draining state.
-  void DoDrainSession(Error err, const std::string& description);
+  void DoDrainSession(Error err, const SpdyString& description);
 
   // Called right before closing a (possibly-inactive) stream for a
   // reason other than being requested to by the stream.
@@ -874,7 +874,7 @@
   // BufferedSpdyFramerVisitorInterface:
   void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override;
   void OnStreamError(SpdyStreamId stream_id,
-                     const std::string& description) override;
+                     const SpdyString& description) override;
   void OnPing(SpdyPingId unique_id, bool is_ack) override;
   void OnRstStream(SpdyStreamId stream_id, SpdyErrorCode error_code) override;
   void OnGoAway(SpdyStreamId last_accepted_stream_id,
diff --git a/src/net/spdy/spdy_session_pool.cc b/src/net/spdy/spdy_session_pool.cc
index 5e40386..d20b365 100644
--- a/src/net/spdy/spdy_session_pool.cc
+++ b/src/net/spdy/spdy_session_pool.cc
@@ -398,7 +398,7 @@
 
 void SpdySessionPool::DumpMemoryStats(
     base::trace_event::ProcessMemoryDump* pmd,
-    const std::string& parent_dump_absolute_name) const {
+    const SpdyString& parent_dump_absolute_name) const {
   if (sessions_.empty())
     return;
   size_t total_size = 0;
@@ -495,10 +495,9 @@
   return current_sessions;
 }
 
-void SpdySessionPool::CloseCurrentSessionsHelper(
-    Error error,
-    const std::string& description,
-    bool idle_only) {
+void SpdySessionPool::CloseCurrentSessionsHelper(Error error,
+                                                 const SpdyString& description,
+                                                 bool idle_only) {
   WeakSessionList current_sessions = GetCurrentSessions();
   for (WeakSessionList::const_iterator it = current_sessions.begin();
        it != current_sessions.end(); ++it) {
diff --git a/src/net/spdy/spdy_session_pool.h b/src/net/spdy/spdy_session_pool.h
index 9da2fb7..7d0b294 100644
--- a/src/net/spdy/spdy_session_pool.h
+++ b/src/net/spdy/spdy_session_pool.h
@@ -10,7 +10,6 @@
 #include <map>
 #include <memory>
 #include <set>
-#include <string>
 #include <vector>
 
 #include "base/macros.h"
@@ -24,6 +23,7 @@
 #include "net/cert/cert_database.h"
 #include "net/proxy/proxy_config.h"
 #include "net/proxy/proxy_server.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/server_push_delegate.h"
 #include "net/spdy/spdy_protocol.h"
 #include "net/spdy/spdy_session_key.h"
@@ -164,7 +164,7 @@
   void OnCertDBChanged() override;
 
   void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
-                       const std::string& parent_dump_absolute_name) const;
+                       const SpdyString& parent_dump_absolute_name) const;
 
  private:
   friend class SpdySessionPoolPeer;  // For testing.
@@ -202,10 +202,9 @@
   // Close only the currently existing SpdySessions with |error|.  Let
   // any new ones created while this method is running continue to
   // live. If |idle_only| is true only idle sessions are closed.
-  void CloseCurrentSessionsHelper(
-      Error error,
-      const std::string& description,
-      bool idle_only);
+  void CloseCurrentSessionsHelper(Error error,
+                                  const SpdyString& description,
+                                  bool idle_only);
 
   HttpServerProperties* http_server_properties_;
 
diff --git a/src/net/spdy/spdy_session_pool_unittest.cc b/src/net/spdy/spdy_session_pool_unittest.cc
index 58596db..5a19906 100644
--- a/src/net/spdy/spdy_session_pool_unittest.cc
+++ b/src/net/spdy/spdy_session_pool_unittest.cc
@@ -6,7 +6,6 @@
 
 #include <cstddef>
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/memory/ptr_util.h"
@@ -170,7 +169,7 @@
   CreateNetworkSession();
 
   // Set up session 1
-  const std::string kTestHost1("www.example.org");
+  const SpdyString kTestHost1("www.example.org");
   HostPortPair test_host_port_pair1(kTestHost1, 80);
   SpdySessionKey key1(test_host_port_pair1, ProxyServer::Direct(),
                       PRIVACY_MODE_DISABLED);
@@ -185,7 +184,7 @@
   StaticSocketDataProvider data2(reads, arraysize(reads), nullptr, 0);
   data2.set_connect_data(connect_data);
   session_deps_.socket_factory->AddSocketDataProvider(&data2);
-  const std::string kTestHost2("mail.example.org");
+  const SpdyString kTestHost2("mail.example.org");
   HostPortPair test_host_port_pair2(kTestHost2, 80);
   SpdySessionKey key2(test_host_port_pair2, ProxyServer::Direct(),
                       PRIVACY_MODE_DISABLED);
@@ -200,7 +199,7 @@
   StaticSocketDataProvider data3(reads, arraysize(reads), nullptr, 0);
   data3.set_connect_data(connect_data);
   session_deps_.socket_factory->AddSocketDataProvider(&data3);
-  const std::string kTestHost3("mail.example.com");
+  const SpdyString kTestHost3("mail.example.com");
   HostPortPair test_host_port_pair3(kTestHost3, 80);
   SpdySessionKey key3(test_host_port_pair3, ProxyServer::Direct(),
                       PRIVACY_MODE_DISABLED);
@@ -334,9 +333,9 @@
     SpdyPoolCloseSessionsType close_sessions_type) {
   const int kTestPort = 80;
   struct TestHosts {
-    std::string url;
-    std::string name;
-    std::string iplist;
+    SpdyString url;
+    SpdyString name;
+    SpdyString iplist;
     SpdySessionKey key;
     AddressList addresses;
   } test_hosts[] = {
@@ -352,7 +351,7 @@
   std::unique_ptr<HostResolver::Request> request[arraysize(test_hosts)];
   for (size_t i = 0; i < arraysize(test_hosts); i++) {
     session_deps_.host_resolver->rules()->AddIPLiteralRule(
-        test_hosts[i].name, test_hosts[i].iplist, std::string());
+        test_hosts[i].name, test_hosts[i].iplist, SpdyString());
 
     // This test requires that the HostResolver cache be populated.  Normal
     // code would have done this already, but we do it manually.
@@ -446,8 +445,8 @@
   // Cleanup the sessions.
   switch (close_sessions_type) {
     case SPDY_POOL_CLOSE_SESSIONS_MANUALLY:
-      session->CloseSessionOnError(ERR_ABORTED, std::string());
-      session2->CloseSessionOnError(ERR_ABORTED, std::string());
+      session->CloseSessionOnError(ERR_ABORTED, SpdyString());
+      session2->CloseSessionOnError(ERR_ABORTED, SpdyString());
       base::RunLoop().RunUntilIdle();
       EXPECT_FALSE(session);
       EXPECT_FALSE(session2);
@@ -498,7 +497,7 @@
       EXPECT_FALSE(spdy_stream1);
       EXPECT_FALSE(spdy_stream2);
 
-      session2->CloseSessionOnError(ERR_ABORTED, std::string());
+      session2->CloseSessionOnError(ERR_ABORTED, SpdyString());
       base::RunLoop().RunUntilIdle();
       EXPECT_FALSE(session2);
       break;
@@ -527,8 +526,8 @@
   // Define two hosts with identical IP address.
   const int kTestPort = 443;
   struct TestHosts {
-    std::string name;
-    std::string iplist;
+    SpdyString name;
+    SpdyString iplist;
     SpdySessionKey key;
     AddressList addresses;
     std::unique_ptr<HostResolver::Request> request;
@@ -540,7 +539,7 @@
   session_deps_.host_resolver->set_synchronous_mode(true);
   for (size_t i = 0; i < arraysize(test_hosts); i++) {
     session_deps_.host_resolver->rules()->AddIPLiteralRule(
-        test_hosts[i].name, test_hosts[i].iplist, std::string());
+        test_hosts[i].name, test_hosts[i].iplist, SpdyString());
 
     HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort));
     session_deps_.host_resolver->Resolve(
@@ -607,8 +606,8 @@
   // Define two hosts with identical IP address.
   const int kTestPort = 443;
   struct TestHosts {
-    std::string name;
-    std::string iplist;
+    SpdyString name;
+    SpdyString iplist;
     SpdySessionKey key;
     AddressList addresses;
     std::unique_ptr<HostResolver::Request> request;
@@ -620,7 +619,7 @@
   session_deps_.host_resolver->set_synchronous_mode(true);
   for (size_t i = 0; i < arraysize(test_hosts); i++) {
     session_deps_.host_resolver->rules()->AddIPLiteralRule(
-        test_hosts[i].name, test_hosts[i].iplist, std::string());
+        test_hosts[i].name, test_hosts[i].iplist, SpdyString());
 
     HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort));
     session_deps_.host_resolver->Resolve(
@@ -705,7 +704,7 @@
   CreateNetworkSession();
 
   // Set up session A: Going away, but with an active stream.
-  const std::string kTestHostA("www.example.org");
+  const SpdyString kTestHostA("www.example.org");
   HostPortPair test_host_port_pairA(kTestHostA, 80);
   SpdySessionKey keyA(
       test_host_port_pairA, ProxyServer::Direct(), PRIVACY_MODE_DISABLED);
@@ -736,7 +735,7 @@
 
   AddSSLSocketData();
 
-  const std::string kTestHostB("mail.example.org");
+  const SpdyString kTestHostB("mail.example.org");
   HostPortPair test_host_port_pairB(kTestHostB, 80);
   SpdySessionKey keyB(
       test_host_port_pairB, ProxyServer::Direct(), PRIVACY_MODE_DISABLED);
@@ -758,7 +757,7 @@
 
   AddSSLSocketData();
 
-  const std::string kTestHostC("mail.example.com");
+  const SpdyString kTestHostC("mail.example.com");
   HostPortPair test_host_port_pairC(kTestHostC, 80);
   SpdySessionKey keyC(
       test_host_port_pairC, ProxyServer::Direct(), PRIVACY_MODE_DISABLED);
@@ -886,8 +885,8 @@
   const base::trace_event::ProcessMemoryDump::AllocatorDumpsMap&
       allocator_dumps = process_memory_dump->allocator_dumps();
   for (const auto& pair : allocator_dumps) {
-    const std::string& dump_name = pair.first;
-    if (dump_name.find("spdy_session_pool") == std::string::npos)
+    const SpdyString& dump_name = pair.first;
+    if (dump_name.find("spdy_session_pool") == SpdyString::npos)
       continue;
     std::unique_ptr<base::Value> raw_attrs =
         pair.second->attributes_for_testing()->ToBaseValue();
@@ -896,7 +895,7 @@
     base::DictionaryValue* active_session_count_attr;
     ASSERT_TRUE(attrs->GetDictionary("active_session_count",
                                      &active_session_count_attr));
-    std::string active_session_count;
+    SpdyString active_session_count;
     ASSERT_TRUE(
         active_session_count_attr->GetString("value", &active_session_count));
     // No created stream so the session should be idle.
diff --git a/src/net/spdy/spdy_session_test_util.cc b/src/net/spdy/spdy_session_test_util.cc
index 36e4c57..86939c4 100644
--- a/src/net/spdy/spdy_session_test_util.cc
+++ b/src/net/spdy/spdy_session_test_util.cc
@@ -10,11 +10,9 @@
 namespace net {
 
 SpdySessionTestTaskObserver::SpdySessionTestTaskObserver(
-    const std::string& file_name,
-    const std::string& function_name)
-    : executed_count_(0),
-      file_name_(file_name),
-      function_name_(function_name) {
+    const SpdyString& file_name,
+    const SpdyString& function_name)
+    : executed_count_(0), file_name_(file_name), function_name_(function_name) {
   base::MessageLoop::current()->AddTaskObserver(this);
 }
 
diff --git a/src/net/spdy/spdy_session_test_util.h b/src/net/spdy/spdy_session_test_util.h
index 819b15c..ceb385d 100644
--- a/src/net/spdy/spdy_session_test_util.h
+++ b/src/net/spdy/spdy_session_test_util.h
@@ -7,10 +7,9 @@
 
 #include <stdint.h>
 
-#include <string>
-
 #include "base/message_loop/message_loop.h"
 #include "base/pending_task.h"
+#include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
 
@@ -25,8 +24,8 @@
   // Example:
   //  file_name = "foo.cc"
   //  function = "DoFoo"
-  SpdySessionTestTaskObserver(const std::string& file_name,
-                              const std::string& function_name);
+  SpdySessionTestTaskObserver(const SpdyString& file_name,
+                              const SpdyString& function_name);
   ~SpdySessionTestTaskObserver() override;
 
   // Implements MessageLoop::TaskObserver.
@@ -38,8 +37,8 @@
 
  private:
   uint16_t executed_count_;
-  std::string file_name_;
-  std::string function_name_;
+  SpdyString file_name_;
+  SpdyString function_name_;
 };
 
 }  // namespace net
diff --git a/src/net/spdy/spdy_session_unittest.cc b/src/net/spdy/spdy_session_unittest.cc
index f7e82a5..ecc0ad6 100644
--- a/src/net/spdy/spdy_session_unittest.cc
+++ b/src/net/spdy/spdy_session_unittest.cc
@@ -77,8 +77,7 @@
 
 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate {
  public:
-  MOCK_METHOD1(IsCTRequiredForHost,
-               CTRequirementLevel(const std::string& host));
+  MOCK_METHOD1(IsCTRequiredForHost, CTRequirementLevel(const SpdyString& host));
 };
 
 }  // namespace
@@ -2005,10 +2004,10 @@
   int unclaimed_streams;
   ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams));
   EXPECT_EQ(0, unclaimed_streams);
-  std::string error_code;
+  SpdyString error_code;
   ASSERT_TRUE(entry.GetStringValue("error_code", &error_code));
   EXPECT_EQ("11 (ENHANCE_YOUR_CALM)", error_code);
-  std::string debug_data;
+  SpdyString debug_data;
   ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data));
   EXPECT_EQ("foo", debug_data);
 
@@ -2290,7 +2289,7 @@
   EXPECT_EQ(0u, spdy_stream2->stream_id());
 
   // Ensure we don't crash while closing the session.
-  session_->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_->CloseSessionOnError(ERR_ABORTED, SpdyString());
 
   EXPECT_FALSE(spdy_stream1);
   EXPECT_FALSE(spdy_stream2);
@@ -2346,7 +2345,7 @@
   EXPECT_EQ(0u, spdy_stream2->stream_id());
 
   // Ensure we don't crash while closing the session.
-  session_->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_->CloseSessionOnError(ERR_ABORTED, SpdyString());
 
   EXPECT_FALSE(spdy_stream1);
   EXPECT_FALSE(spdy_stream2);
@@ -2417,7 +2416,7 @@
   EXPECT_EQ(3u, spdy_stream2->stream_id());
 
   // Ensure we don't crash while closing the session.
-  session_->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_->CloseSessionOnError(ERR_ABORTED, SpdyString());
 
   EXPECT_FALSE(spdy_stream1);
   EXPECT_FALSE(spdy_stream2);
@@ -2492,7 +2491,7 @@
   EXPECT_EQ(3u, spdy_stream2->stream_id());
 
   // Ensure we don't crash while closing the session.
-  session_->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_->CloseSessionOnError(ERR_ABORTED, SpdyString());
 
   EXPECT_FALSE(spdy_stream1);
   EXPECT_FALSE(spdy_stream2);
@@ -3395,12 +3394,12 @@
 
   session_deps_.host_resolver->set_synchronous_mode(true);
   session_deps_.host_resolver->rules()->AddIPLiteralRule(
-      "www.example.org", "192.168.0.2", std::string());
+      "www.example.org", "192.168.0.2", SpdyString());
   session_deps_.host_resolver->rules()->AddIPLiteralRule(
-      "mail.example.org", "192.168.0.2", std::string());
+      "mail.example.org", "192.168.0.2", SpdyString());
   // Not strictly needed.
-  session_deps_.host_resolver->rules()->AddIPLiteralRule(
-      "3.com", "192.168.0.3", std::string());
+  session_deps_.host_resolver->rules()->AddIPLiteralRule("3.com", "192.168.0.3",
+                                                         SpdyString());
 
   CreateNetworkSession();
 
@@ -3571,11 +3570,11 @@
   EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled));
   EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled));
 
-  session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, SpdyString());
   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled));
   EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled));
 
-  session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, std::string());
+  session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, SpdyString());
   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled));
   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled));
 }
@@ -3885,7 +3884,7 @@
   };
 
   SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
-  const std::string payload(data_frame_size, 'a');
+  const SpdyString payload(data_frame_size, 'a');
   SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame(
       1, payload.data(), data_frame_size, false));
   MockRead reads[] = {
@@ -3959,10 +3958,10 @@
       CreateMockWrite(goaway, 4),
   };
 
-  const std::string first_data_frame(first_data_frame_size, 'a');
+  const SpdyString first_data_frame(first_data_frame_size, 'a');
   SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame(
       1, first_data_frame.data(), first_data_frame_size, false));
-  const std::string second_data_frame(second_data_frame_size, 'b');
+  const SpdyString second_data_frame(second_data_frame_size, 'b');
   SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame(
       1, second_data_frame.data(), second_data_frame_size, false));
   MockRead reads[] = {
@@ -4019,10 +4018,10 @@
   };
 
   SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
-  const std::string first_data_frame(first_data_frame_size, 'a');
+  const SpdyString first_data_frame(first_data_frame_size, 'a');
   SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame(
       1, first_data_frame.data(), first_data_frame_size, false));
-  const std::string second_data_frame(second_data_frame_size, 'b');
+  const SpdyString second_data_frame(second_data_frame_size, 'b');
   SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame(
       1, second_data_frame.data(), second_data_frame_size, false));
   MockRead reads[] = {
@@ -4066,7 +4065,7 @@
             spdy_stream->recv_window_size());
 
   // Consume first data frame.  This does not trigger a WINDOW_UPDATE.
-  std::string received_data = delegate.TakeReceivedData();
+  SpdyString received_data = delegate.TakeReceivedData();
   EXPECT_EQ(static_cast<size_t>(first_data_frame_size), received_data.size());
   EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size());
 
@@ -4100,7 +4099,7 @@
 // value, i.e. we shouldn't "leak" receive window bytes.
 TEST_F(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
   const int32_t kMsgDataSize = 100;
-  const std::string msg_data(kMsgDataSize, 'a');
+  const SpdyString msg_data(kMsgDataSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
@@ -4171,7 +4170,7 @@
 // to its original value, i.e. we shouldn't "leak" send window bytes.
 TEST_F(SpdySessionTest, SessionFlowControlNoSendLeaks) {
   const int32_t kMsgDataSize = 100;
-  const std::string msg_data(kMsgDataSize, 'a');
+  const SpdyString msg_data(kMsgDataSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
@@ -4243,7 +4242,7 @@
 // change appropriately.
 TEST_F(SpdySessionTest, SessionFlowControlEndToEnd) {
   const int32_t kMsgDataSize = 100;
-  const std::string msg_data(kMsgDataSize, 'a');
+  const SpdyString msg_data(kMsgDataSize, 'a');
 
   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
       kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
@@ -4406,7 +4405,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(), delegate.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate.TakeReceivedData());
 
   // Run SpdySession::PumpWriteLoop which destroys |session_|.
   base::RunLoop().RunUntilIdle();
@@ -4567,11 +4566,11 @@
 
   EXPECT_TRUE(delegate1.send_headers_completed());
   EXPECT_EQ("200", delegate1.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData());
 
   EXPECT_TRUE(delegate2.send_headers_completed());
   EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData());
 
   EXPECT_FALSE(session_);
   EXPECT_TRUE(data.AllWriteDataConsumed());
@@ -4729,14 +4728,14 @@
   EXPECT_THAT(delegate3.WaitForClose(), IsOk());
 
   EXPECT_TRUE(delegate1.send_headers_completed());
-  EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData());
 
   EXPECT_TRUE(delegate2.send_headers_completed());
   EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData());
 
   EXPECT_TRUE(delegate3.send_headers_completed());
-  EXPECT_EQ(std::string(), delegate3.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate3.TakeReceivedData());
 
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
@@ -4828,10 +4827,10 @@
   EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
 
   EXPECT_TRUE(delegate1.send_headers_completed());
-  EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData());
 
   EXPECT_TRUE(delegate2.send_headers_completed());
-  EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData());
 
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
diff --git a/src/net/spdy/spdy_stream.cc b/src/net/spdy/spdy_stream.cc
index bcc8918..829bb2b 100644
--- a/src/net/spdy/spdy_stream.cc
+++ b/src/net/spdy/spdy_stream.cc
@@ -35,7 +35,7 @@
 std::unique_ptr<base::Value> NetLogSpdyStreamErrorCallback(
     SpdyStreamId stream_id,
     int status,
-    const std::string* description,
+    const SpdyString* description,
     NetLogCaptureMode /* capture_mode */) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
   dict->SetInteger("stream_id", static_cast<int>(stream_id));
@@ -257,7 +257,7 @@
     int32_t max_delta_window_size =
         std::numeric_limits<int32_t>::max() - send_window_size_;
     if (delta_window_size > max_delta_window_size) {
-      std::string desc = SpdyStringPrintf(
+      SpdyString desc = SpdyStringPrintf(
           "Received WINDOW_UPDATE [delta: %d] for stream %d overflows "
           "send_window_size_ [current: %d]",
           delta_window_size, stream_id_, send_window_size_);
@@ -387,7 +387,7 @@
       {
         SpdyHeaderBlock::const_iterator it = response_headers.find(":status");
         if (it == response_headers.end()) {
-          const std::string error("Response headers do not include :status.");
+          const SpdyString error("Response headers do not include :status.");
           LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
           session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
           return;
@@ -395,7 +395,7 @@
 
         int status;
         if (!StringToInt(it->second, &status)) {
-          const std::string error("Cannot parse :status.");
+          const SpdyString error("Cannot parse :status.");
           LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
           session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
           return;
@@ -416,7 +416,7 @@
           // A bidirectional stream or a request/response stream is ready for
           // the response headers only after request headers are sent.
           if (io_state_ == STATE_IDLE) {
-            const std::string error("Response received before request sent.");
+            const SpdyString error("Response received before request sent.");
             LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
             session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
             return;
@@ -447,7 +447,7 @@
     case READY_FOR_DATA_OR_TRAILERS:
       // Second header block is trailers.
       if (type_ == SPDY_PUSH_STREAM) {
-        const std::string error("Trailers not supported for push stream.");
+        const SpdyString error("Trailers not supported for push stream.");
         LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
         session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
         return;
@@ -459,7 +459,7 @@
 
     case TRAILERS_RECEIVED:
       // No further header blocks are allowed after trailers.
-      const std::string error("Header block received after trailers.");
+      const SpdyString error("Header block received after trailers.");
       LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
       session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
       break;
@@ -482,14 +482,14 @@
   DCHECK(session_->IsStreamActive(stream_id_));
 
   if (response_state_ == READY_FOR_HEADERS) {
-    const std::string error("DATA received before headers.");
+    const SpdyString error("DATA received before headers.");
     LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
     session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
     return;
   }
 
   if (response_state_ == TRAILERS_RECEIVED && buffer) {
-    const std::string error("DATA received after trailers.");
+    const SpdyString error("DATA received after trailers.");
     LogStreamError(ERR_SPDY_PROTOCOL_ERROR, error);
     session_->ResetStream(stream_id_, ERROR_CODE_PROTOCOL_ERROR, error);
     return;
@@ -636,7 +636,7 @@
   }
 }
 
-void SpdyStream::LogStreamError(int status, const std::string& description) {
+void SpdyStream::LogStreamError(int status, const SpdyString& description) {
   net_log_.AddEvent(NetLogEventType::HTTP2_STREAM_ERROR,
                     base::Bind(&NetLogSpdyStreamErrorCallback, stream_id_,
                                status, &description));
@@ -668,7 +668,7 @@
     return;
 
   if (stream_id_ != 0) {
-    session_->ResetStream(stream_id_, ERROR_CODE_CANCEL, std::string());
+    session_->ResetStream(stream_id_, ERROR_CODE_CANCEL, SpdyString());
   } else {
     session_->CloseCreatedStream(GetWeakPtr(), ERROR_CODE_CANCEL);
   }
@@ -910,8 +910,8 @@
     description = SpdyStringPrintf("%s (0x%08X)", #s, s); \
     break
 
-std::string SpdyStream::DescribeState(State state) {
-  std::string description;
+SpdyString SpdyStream::DescribeState(State state) {
+  SpdyString description;
   switch (state) {
     STATE_CASE(STATE_IDLE);
     STATE_CASE(STATE_OPEN);
diff --git a/src/net/spdy/spdy_stream.h b/src/net/spdy/spdy_stream.h
index b3d3245..a18a7fd 100644
--- a/src/net/spdy/spdy_stream.h
+++ b/src/net/spdy/spdy_stream.h
@@ -10,7 +10,6 @@
 
 #include <deque>
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "base/macros.h"
@@ -23,6 +22,7 @@
 #include "net/log/net_log_with_source.h"
 #include "net/socket/next_proto.h"
 #include "net/socket/ssl_client_socket.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_buffer.h"
 #include "net/spdy/spdy_framer.h"
 #include "net/spdy/spdy_header_block.h"
@@ -289,7 +289,7 @@
   void OnClose(int status);
 
   // Called by the SpdySession to log stream related errors.
-  void LogStreamError(int status, const std::string& description);
+  void LogStreamError(int status, const SpdyString& description);
 
   // If this stream is active, reset it, and close it otherwise. In
   // either case the stream is deleted.
@@ -435,7 +435,7 @@
   // OnHeadersReceived() on the delegate if attached.
   void SaveResponseHeaders(const SpdyHeaderBlock& response_headers);
 
-  static std::string DescribeState(State state);
+  static SpdyString DescribeState(State state);
 
   const SpdyStreamType type_;
 
diff --git a/src/net/spdy/spdy_stream_test_util.cc b/src/net/spdy/spdy_stream_test_util.cc
index 35c7f10..d6e47f3 100644
--- a/src/net/spdy/spdy_stream_test_util.cc
+++ b/src/net/spdy/spdy_stream_test_util.cc
@@ -93,9 +93,9 @@
   return result;
 }
 
-std::string StreamDelegateBase::TakeReceivedData() {
+SpdyString StreamDelegateBase::TakeReceivedData() {
   size_t len = received_data_queue_.GetTotalSize();
-  std::string received_data(len, '\0');
+  SpdyString received_data(len, '\0');
   if (len > 0) {
     EXPECT_EQ(len, received_data_queue_.Dequeue(
                        base::string_as_array(&received_data), len));
@@ -103,10 +103,10 @@
   return received_data;
 }
 
-std::string StreamDelegateBase::GetResponseHeaderValue(
-    const std::string& name) const {
+SpdyString StreamDelegateBase::GetResponseHeaderValue(
+    const SpdyString& name) const {
   SpdyHeaderBlock::const_iterator it = response_headers_.find(name);
-  return (it == response_headers_.end()) ? std::string()
+  return (it == response_headers_.end()) ? SpdyString()
                                          : it->second.as_string();
 }
 
@@ -160,6 +160,6 @@
   stream()->Cancel();
 }
 
-} // namespace test
+}  // namespace test
 
-} // namespace net
+}  // namespace net
diff --git a/src/net/spdy/spdy_stream_test_util.h b/src/net/spdy/spdy_stream_test_util.h
index 8683863..9436ebe 100644
--- a/src/net/spdy/spdy_stream_test_util.h
+++ b/src/net/spdy/spdy_stream_test_util.h
@@ -64,7 +64,7 @@
 
   // Drains all data from the underlying read queue and returns it as
   // a string.
-  std::string TakeReceivedData();
+  SpdyString TakeReceivedData();
 
   // Returns whether or not the stream is closed.
   bool StreamIsClosed() const { return !stream_.get(); }
@@ -73,7 +73,7 @@
   // returns the stream's ID when it was open.
   SpdyStreamId stream_id() const { return stream_id_; }
 
-  std::string GetResponseHeaderValue(const std::string& name) const;
+  SpdyString GetResponseHeaderValue(const SpdyString& name) const;
   bool send_headers_completed() const { return send_headers_completed_; }
 
  protected:
@@ -133,8 +133,8 @@
   void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override;
 };
 
-} // namespace test
+}  // namespace test
 
-} // namespace net
+}  // namespace net
 
-#endif // NET_SPDY_SPDY_STREAM_TEST_UTIL_H_
+#endif  // NET_SPDY_SPDY_STREAM_TEST_UTIL_H_
diff --git a/src/net/spdy/spdy_stream_unittest.cc b/src/net/spdy/spdy_stream_unittest.cc
index f8400dd..50b2a1b 100644
--- a/src/net/spdy/spdy_stream_unittest.cc
+++ b/src/net/spdy/spdy_stream_unittest.cc
@@ -10,7 +10,6 @@
 #include <cstddef>
 #include <limits>
 #include <memory>
-#include <string>
 #include <utility>
 #include <vector>
 
@@ -196,7 +195,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
@@ -277,7 +276,7 @@
   const SpdyHeaderBlock& received_trailers = delegate.trailers();
   SpdyHeaderBlock::const_iterator it = received_trailers.find("foo");
   EXPECT_EQ("bar", it->second);
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
@@ -424,7 +423,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 
@@ -449,7 +448,7 @@
       kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0));
   AddWrite(req);
 
-  std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
+  SpdyString chunk_data(kMaxSpdyFrameChunkSize, 'x');
   SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame(
       1, chunk_data.data(), chunk_data.length(), false));
   AddWrite(chunk);
@@ -478,7 +477,7 @@
       SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource());
   ASSERT_TRUE(stream);
 
-  std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
+  SpdyString body_data(3 * kMaxSpdyFrameChunkSize, 'x');
   StreamDelegateWithBody delegate(stream, body_data);
   stream->SetDelegate(&delegate);
 
@@ -494,7 +493,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(), delegate.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
 
@@ -508,7 +507,7 @@
   SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0));
   AddRead(resp);
 
-  std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
+  SpdyString chunk_data(kMaxSpdyFrameChunkSize, 'x');
   SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame(
       1, chunk_data.data(), chunk_data.length(), false));
   AddWrite(chunk);
@@ -531,7 +530,7 @@
       SPDY_BIDIRECTIONAL_STREAM, session, url_, LOWEST, NetLogWithSource());
   ASSERT_TRUE(stream);
 
-  std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
+  SpdyString body_data(3 * kMaxSpdyFrameChunkSize, 'x');
   StreamDelegateSendImmediate delegate(stream, body_data);
   stream->SetDelegate(&delegate);
 
@@ -547,7 +546,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(), delegate.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
 
@@ -787,7 +786,7 @@
 
   EXPECT_THAT(delegate.WaitForClose(), IsOk());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
 
   // Finish async network reads and writes.
@@ -897,7 +896,7 @@
 
   EXPECT_THAT(delegate.WaitForClose(), IsOk());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
 
   // Finish async network reads and writes.
@@ -1076,7 +1075,7 @@
 
   EXPECT_THAT(delegate.WaitForClose(), IsOk());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
 
   // Finish async network reads and writes.
@@ -1388,7 +1387,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(), delegate.TakeReceivedData());
+  EXPECT_EQ(SpdyString(), delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
 
@@ -1469,7 +1468,7 @@
 
   EXPECT_TRUE(delegate.send_headers_completed());
   EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
-  EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
+  EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength),
             delegate.TakeReceivedData());
   EXPECT_TRUE(data.AllWriteDataConsumed());
 }
diff --git a/src/net/spdy/spdy_test_util_common.cc b/src/net/spdy/spdy_test_util_common.cc
index 8d5786d..a7df840 100644
--- a/src/net/spdy/spdy_test_util_common.cc
+++ b/src/net/spdy/spdy_test_util_common.cc
@@ -50,9 +50,9 @@
 // Parses a URL into the scheme, host, and path components required for a
 // SPDY request.
 void ParseUrl(SpdyStringPiece url,
-              std::string* scheme,
-              std::string* host,
-              std::string* path) {
+              SpdyString* scheme,
+              SpdyString* host,
+              SpdyString* path) {
   GURL gurl(url);
   path->assign(gurl.PathForRequest());
   scheme->assign(gurl.scheme());
@@ -89,8 +89,8 @@
 void AppendToHeaderBlock(const char* const extra_headers[],
                          int extra_header_count,
                          SpdyHeaderBlock* headers) {
-  std::string this_header;
-  std::string this_value;
+  SpdyString this_header;
+  SpdyString this_value;
 
   if (!extra_header_count)
     return;
@@ -104,11 +104,11 @@
     // Sanity check: Non-empty header.
     DCHECK_NE('\0', *extra_headers[i * 2]) << "Empty header value pair";
     this_header = extra_headers[i * 2];
-    std::string::size_type header_len = this_header.length();
+    SpdyString::size_type header_len = this_header.length();
     if (!header_len)
       continue;
     this_value = extra_headers[1 + (i * 2)];
-    std::string new_value;
+    SpdyString new_value;
     if (headers->find(this_header) != headers->end()) {
       // More than one entry in the header.
       // Don't add the header again, just the append to the value,
@@ -193,7 +193,7 @@
 
   void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override {}
   void OnStreamError(SpdyStreamId stream_id,
-                     const std::string& description) override {}
+                     const SpdyString& description) override {}
   void OnHeaders(SpdyStreamId stream_id,
                  bool has_priority,
                  int weight,
@@ -291,8 +291,8 @@
   std::vector<uint8_t> private_key;
   if (!key_->ExportPrivateKey(&private_key))
     return false;
-  std::string head = "fakesignature";
-  std::string tail = "/fakesignature";
+  SpdyString head = "fakesignature";
+  SpdyString tail = "/fakesignature";
 
   signature->clear();
   signature->insert(signature->end(), head.begin(), head.end());
@@ -703,7 +703,7 @@
 
 void SpdyTestUtil::AddUrlToHeaderBlock(SpdyStringPiece url,
                                        SpdyHeaderBlock* headers) const {
-  std::string scheme, host, path;
+  SpdyString scheme, host, path;
   ParseUrl(url, &scheme, &host, &path);
   (*headers)[GetHostKey()] = host;
   (*headers)[GetSchemeKey()] = scheme;
@@ -739,16 +739,16 @@
   return ConstructHeaderBlock("PUT", url, &content_length);
 }
 
-std::string SpdyTestUtil::ConstructSpdyReplyString(
+SpdyString SpdyTestUtil::ConstructSpdyReplyString(
     const SpdyHeaderBlock& headers) const {
-  std::string reply_string;
+  SpdyString reply_string;
   for (SpdyHeaderBlock::const_iterator it = headers.begin();
        it != headers.end(); ++it) {
-    std::string key = it->first.as_string();
+    SpdyString key = it->first.as_string();
     // Remove leading colon from pseudo headers.
     if (key[0] == ':')
       key = key.substr(1);
-    for (const std::string& value :
+    for (const SpdyString& value :
          base::SplitString(it->second, SpdyStringPiece("\0", 1),
                            base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
       reply_string += key + ": " + value + "\n";
@@ -797,7 +797,7 @@
 SpdySerializedFrame SpdyTestUtil::ConstructSpdyGoAway(
     SpdyStreamId last_good_stream_id,
     SpdyErrorCode error_code,
-    const std::string& desc) {
+    const SpdyString& desc) {
   SpdyGoAwayIR go_ir(last_good_stream_id, error_code, desc);
   return SpdySerializedFrame(headerless_spdy_framer_.SerializeFrame(go_ir));
 }
@@ -1150,7 +1150,7 @@
 SpdyHeaderBlock SpdyTestUtil::ConstructHeaderBlock(SpdyStringPiece method,
                                                    SpdyStringPiece url,
                                                    int64_t* content_length) {
-  std::string scheme, host, path;
+  SpdyString scheme, host, path;
   ParseUrl(url, &scheme, &host, &path);
   SpdyHeaderBlock headers;
   headers[GetMethodKey()] = method.as_string();
@@ -1158,7 +1158,7 @@
   headers[GetSchemeKey()] = scheme.c_str();
   headers[GetPathKey()] = path.c_str();
   if (content_length) {
-    std::string length_str = base::Int64ToString(*content_length);
+    SpdyString length_str = base::Int64ToString(*content_length);
     headers["content-length"] = length_str;
   }
   return headers;
diff --git a/src/net/spdy/spdy_test_util_common.h b/src/net/spdy/spdy_test_util_common.h
index af88246..d2712f8 100644
--- a/src/net/spdy/spdy_test_util_common.h
+++ b/src/net/spdy/spdy_test_util_common.h
@@ -10,7 +10,6 @@
 
 #include <map>
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "base/macros.h"
@@ -31,6 +30,7 @@
 #include "net/proxy/proxy_server.h"
 #include "net/proxy/proxy_service.h"
 #include "net/socket/socket_test_util.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/spdy_protocol.h"
 #include "net/ssl/ssl_config_service_defaults.h"
@@ -313,7 +313,7 @@
                                                  int64_t content_length);
 
   // Construct an expected SPDY reply string from the given headers.
-  std::string ConstructSpdyReplyString(const SpdyHeaderBlock& headers) const;
+  SpdyString ConstructSpdyReplyString(const SpdyHeaderBlock& headers) const;
 
   // Construct an expected SPDY SETTINGS frame.
   // |settings| are the settings to set.
@@ -340,7 +340,7 @@
   // ownership of the frame.
   SpdySerializedFrame ConstructSpdyGoAway(SpdyStreamId last_good_stream_id,
                                           SpdyErrorCode error_code,
-                                          const std::string& desc);
+                                          const SpdyString& desc);
 
   // Construct a SPDY WINDOW_UPDATE frame.
   // Returns the constructed frame.  The caller takes ownership of the frame.
diff --git a/src/net/spdy/spdy_test_utils.cc b/src/net/spdy/spdy_test_utils.cc
index f03e286..100d84f 100644
--- a/src/net/spdy/spdy_test_utils.cc
+++ b/src/net/spdy/spdy_test_utils.cc
@@ -22,12 +22,10 @@
 namespace net {
 namespace test {
 
-using std::string;
-
-string HexDumpWithMarks(const unsigned char* data,
-                        int length,
-                        const bool* marks,
-                        int mark_length) {
+SpdyString HexDumpWithMarks(const unsigned char* data,
+                            int length,
+                            const bool* marks,
+                            int mark_length) {
   static const char kHexChars[] = "0123456789abcdef";
   static const int kColumns = 4;
 
@@ -38,7 +36,7 @@
     mark_length = std::min(mark_length, kSizeLimit);
   }
 
-  string hex;
+  SpdyString hex;
   for (const unsigned char* row = data; length > 0;
        row += kColumns, length -= kColumns) {
     for (const unsigned char *p = row; p < row + 4; ++p) {
@@ -64,7 +62,7 @@
   return hex;
 }
 
-void CompareCharArraysWithHexError(const string& description,
+void CompareCharArraysWithHexError(const SpdyString& description,
                                    const unsigned char* actual,
                                    const int actual_len,
                                    const unsigned char* expected,
@@ -106,9 +104,9 @@
   }
 }
 
-string a2b_hex(const char* hex_data) {
+SpdyString a2b_hex(const char* hex_data) {
   std::vector<uint8_t> output;
-  string result;
+  SpdyString result;
   if (base::HexStringToBytes(hex_data, &output))
     result.assign(reinterpret_cast<const char*>(&output[0]), output.size());
   return result;
@@ -120,23 +118,23 @@
   return hash_value;
 }
 
-string GetTestPin(uint8_t label) {
+SpdyString GetTestPin(uint8_t label) {
   HashValue hash_value = GetTestHashValue(label);
-  string base64;
+  SpdyString base64;
   base::Base64Encode(SpdyStringPiece(reinterpret_cast<char*>(hash_value.data()),
                                      hash_value.size()),
                      &base64);
 
-  return string("pin-sha256=\"") + base64 + "\"";
+  return SpdyString("pin-sha256=\"") + base64 + "\"";
 }
 
 void AddPin(TransportSecurityState* state,
-            const string& host,
+            const SpdyString& host,
             uint8_t primary_label,
             uint8_t backup_label) {
-  string primary_pin = GetTestPin(primary_label);
-  string backup_pin = GetTestPin(backup_label);
-  string header = "max-age = 10000; " + primary_pin + "; " + backup_pin;
+  SpdyString primary_pin = GetTestPin(primary_label);
+  SpdyString backup_pin = GetTestPin(backup_label);
+  SpdyString header = "max-age = 10000; " + primary_pin + "; " + backup_pin;
 
   // Construct a fake SSLInfo that will pass AddHPKPHeader's checks.
   SSLInfo ssl_info;
diff --git a/src/net/spdy/spdy_test_utils.h b/src/net/spdy/spdy_test_utils.h
index feb307d..86d07b7 100644
--- a/src/net/spdy/spdy_test_utils.h
+++ b/src/net/spdy/spdy_test_utils.h
@@ -8,8 +8,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <string>
+#include <map>
+#include <memory>
 
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "net/spdy/server_push_delegate.h"
 #include "net/spdy/spdy_bug_tracker.h"
@@ -32,32 +34,33 @@
 
 namespace test {
 
-std::string HexDumpWithMarks(const unsigned char* data, int length,
-                             const bool* marks, int mark_length);
+SpdyString HexDumpWithMarks(const unsigned char* data,
+                            int length,
+                            const bool* marks,
+                            int mark_length);
 
-void CompareCharArraysWithHexError(
-    const std::string& description,
-    const unsigned char* actual,
-    const int actual_len,
-    const unsigned char* expected,
-    const int expected_len);
+void CompareCharArraysWithHexError(const SpdyString& description,
+                                   const unsigned char* actual,
+                                   const int actual_len,
+                                   const unsigned char* expected,
+                                   const int expected_len);
 
 void SetFrameFlags(SpdySerializedFrame* frame, uint8_t flags);
 
 void SetFrameLength(SpdySerializedFrame* frame, size_t length);
 
-std::string a2b_hex(const char* hex_data);
+SpdyString a2b_hex(const char* hex_data);
 
 // Returns a SHA1 HashValue in which each byte has the value |label|.
 HashValue GetTestHashValue(uint8_t label);
 
 // Returns SHA1 pinning header for the of the base64 encoding of
 // GetTestHashValue(|label|).
-std::string GetTestPin(uint8_t label);
+SpdyString GetTestPin(uint8_t label);
 
 // Adds a pin for |host| to |state|.
 void AddPin(TransportSecurityState* state,
-            const std::string& host,
+            const SpdyString& host,
             uint8_t primary_label,
             uint8_t backup_label);
 
@@ -90,7 +93,7 @@
 // request and provides a interface to cancel the push given url.
 class TestServerPushDelegate : public ServerPushDelegate {
  public:
-  explicit TestServerPushDelegate();
+  TestServerPushDelegate();
   ~TestServerPushDelegate() override;
 
   void OnPush(std::unique_ptr<ServerPushHelper> push_helper,
diff --git a/src/net/spdy/spdy_write_queue_unittest.cc b/src/net/spdy/spdy_write_queue_unittest.cc
index 4bd13df..53f52f1 100644
--- a/src/net/spdy/spdy_write_queue_unittest.cc
+++ b/src/net/spdy/spdy_write_queue_unittest.cc
@@ -7,7 +7,6 @@
 #include <cstddef>
 #include <cstring>
 #include <memory>
-#include <string>
 #include <utility>
 
 #include "base/logging.h"
@@ -15,6 +14,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "net/base/request_priority.h"
 #include "net/log/net_log_with_source.h"
+#include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/spdy_buffer_producer.h"
 #include "net/spdy/spdy_stream.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -24,8 +24,6 @@
 
 namespace {
 
-using std::string;
-
 const char kOriginal[] = "original";
 const char kRequeued[] = "requeued";
 
@@ -33,7 +31,7 @@
 
 // Makes a SpdyFrameProducer producing a frame with the data in the
 // given string.
-std::unique_ptr<SpdyBufferProducer> StringToProducer(const std::string& s) {
+std::unique_ptr<SpdyBufferProducer> StringToProducer(const SpdyString& s) {
   std::unique_ptr<char[]> data(new char[s.size()]);
   std::memcpy(data.get(), s.data(), s.size());
   return std::unique_ptr<SpdyBufferProducer>(
@@ -52,7 +50,7 @@
 // SpdyWriteQueue upon destruction.
 class RequeingBufferProducer : public SpdyBufferProducer {
  public:
-  RequeingBufferProducer(SpdyWriteQueue* queue) {
+  explicit RequeingBufferProducer(SpdyWriteQueue* queue) {
     buffer_.reset(new SpdyBuffer(kOriginal, arraysize(kOriginal)));
     buffer_->AddConsumeCallback(
         base::Bind(RequeingBufferProducer::ConsumeCallback, queue));
@@ -84,9 +82,9 @@
 
 // Produces a frame with the given producer and returns a copy of its
 // data as a string.
-std::string ProducerToString(std::unique_ptr<SpdyBufferProducer> producer) {
+SpdyString ProducerToString(std::unique_ptr<SpdyBufferProducer> producer) {
   std::unique_ptr<SpdyBuffer> buffer = producer->ProduceBuffer();
-  return std::string(buffer->GetRemainingData(), buffer->GetRemainingSize());
+  return SpdyString(buffer->GetRemainingData(), buffer->GetRemainingSize());
 }
 
 // Produces a frame with the given producer and returns a copy of its
@@ -300,7 +298,8 @@
 
     EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
     EXPECT_TRUE(queue.IsEmpty());
-    EXPECT_EQ(string(kOriginal), producer->ProduceBuffer()->GetRemainingData());
+    EXPECT_EQ(SpdyString(kOriginal),
+              producer->ProduceBuffer()->GetRemainingData());
   }
   // |producer| was destroyed, and a buffer is re-queued.
   EXPECT_FALSE(queue.IsEmpty());
@@ -310,7 +309,8 @@
   base::WeakPtr<SpdyStream> stream;
 
   EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
-  EXPECT_EQ(string(kRequeued), producer->ProduceBuffer()->GetRemainingData());
+  EXPECT_EQ(SpdyString(kRequeued),
+            producer->ProduceBuffer()->GetRemainingData());
 }
 
 TEST_F(SpdyWriteQueueTest, ReentranceOnClear) {
@@ -328,7 +328,8 @@
   base::WeakPtr<SpdyStream> stream;
 
   EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
-  EXPECT_EQ(string(kRequeued), producer->ProduceBuffer()->GetRemainingData());
+  EXPECT_EQ(SpdyString(kRequeued),
+            producer->ProduceBuffer()->GetRemainingData());
 }
 
 TEST_F(SpdyWriteQueueTest, ReentranceOnRemovePendingWritesAfter) {
@@ -349,7 +350,8 @@
   base::WeakPtr<SpdyStream> weak_stream;
 
   EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &weak_stream));
-  EXPECT_EQ(string(kRequeued), producer->ProduceBuffer()->GetRemainingData());
+  EXPECT_EQ(SpdyString(kRequeued),
+            producer->ProduceBuffer()->GetRemainingData());
 }
 
 TEST_F(SpdyWriteQueueTest, ReentranceOnRemovePendingWritesForStream) {
@@ -370,7 +372,8 @@
   base::WeakPtr<SpdyStream> weak_stream;
 
   EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &weak_stream));
-  EXPECT_EQ(string(kRequeued), producer->ProduceBuffer()->GetRemainingData());
+  EXPECT_EQ(SpdyString(kRequeued),
+            producer->ProduceBuffer()->GetRemainingData());
 }
 
 }  // namespace
diff --git a/src/net/ssl/channel_id_service.cc b/src/net/ssl/channel_id_service.cc
index d487346..0c1b71f 100644
--- a/src/net/ssl/channel_id_service.cc
+++ b/src/net/ssl/channel_id_service.cc
@@ -70,14 +70,6 @@
                             GET_CHANNEL_ID_RESULT_MAX);
 }
 
-void RecordGetChannelIDTime(base::TimeDelta request_time) {
-  UMA_HISTOGRAM_CUSTOM_TIMES("DomainBoundCerts.GetCertTime",
-                             request_time,
-                             base::TimeDelta::FromMilliseconds(1),
-                             base::TimeDelta::FromMinutes(5),
-                             50);
-}
-
 // On success, returns a ChannelID object and sets |*error| to OK.
 // Otherwise, returns NULL, and |*error| will be set to a net error code.
 // |serial_number| is passed in because base::RandInt cannot be called from an
@@ -87,7 +79,6 @@
     int* error) {
   std::unique_ptr<ChannelIDStore::ChannelID> result;
 
-  base::TimeTicks start = base::TimeTicks::Now();
   base::Time creation_time = base::Time::Now();
   std::unique_ptr<crypto::ECPrivateKey> key(crypto::ECPrivateKey::Create());
 
@@ -99,11 +90,6 @@
 
   result.reset(new ChannelIDStore::ChannelID(server_identifier, creation_time,
                                              std::move(key)));
-  UMA_HISTOGRAM_CUSTOM_TIMES("DomainBoundCerts.GenerateCertTime",
-                             base::TimeTicks::Now() - start,
-                             base::TimeDelta::FromMilliseconds(1),
-                             base::TimeDelta::FromMinutes(5),
-                             50);
   *error = OK;
   return result;
 }
@@ -226,13 +212,11 @@
 
 void ChannelIDService::Request::RequestStarted(
     ChannelIDService* service,
-    base::TimeTicks request_start,
     const CompletionCallback& callback,
     std::unique_ptr<crypto::ECPrivateKey>* key,
     ChannelIDServiceJob* job) {
   DCHECK(service_ == NULL);
   service_ = service;
-  request_start_ = request_start;
   callback_ = callback;
   key_ = key;
   job_ = job;
@@ -243,12 +227,6 @@
     std::unique_ptr<crypto::ECPrivateKey> key) {
   switch (error) {
     case OK: {
-      base::TimeDelta request_time = base::TimeTicks::Now() - request_start_;
-      UMA_HISTOGRAM_CUSTOM_TIMES("DomainBoundCerts.GetCertTimeAsync",
-                                 request_time,
-                                 base::TimeDelta::FromMilliseconds(1),
-                                 base::TimeDelta::FromMinutes(5), 50);
-      RecordGetChannelIDTime(request_time);
       RecordGetChannelIDResult(ASYNC_SUCCESS);
       break;
     }
@@ -304,7 +282,6 @@
     Request* out_req) {
   DVLOG(1) << __func__ << " " << host;
   DCHECK(CalledOnValidThread());
-  base::TimeTicks request_start = base::TimeTicks::Now();
 
   if (callback.is_null() || !key || host.empty()) {
     RecordGetChannelIDResult(INVALID_ARGUMENT);
@@ -321,13 +298,12 @@
 
   // See if a request for the same domain is currently in flight.
   bool create_if_missing = true;
-  if (JoinToInFlightRequest(request_start, domain, key, create_if_missing,
-                            callback, out_req)) {
+  if (JoinToInFlightRequest(domain, key, create_if_missing, callback,
+                            out_req)) {
     return ERR_IO_PENDING;
   }
 
-  int err = LookupChannelID(request_start, domain, key, create_if_missing,
-                            callback, out_req);
+  int err = LookupChannelID(domain, key, create_if_missing, callback, out_req);
   if (err == ERR_FILE_NOT_FOUND) {
     // Sync lookup did not find a valid channel ID.  Start generating a new one.
     workers_created_++;
@@ -342,7 +318,7 @@
     inflight_[domain] = base::WrapUnique(job);
 
     job->AddRequest(out_req);
-    out_req->RequestStarted(this, request_start, callback, key, job);
+    out_req->RequestStarted(this, callback, key, job);
     return ERR_IO_PENDING;
   }
 
@@ -355,7 +331,6 @@
                                    Request* out_req) {
   DVLOG(1) << __func__ << " " << host;
   DCHECK(CalledOnValidThread());
-  base::TimeTicks request_start = base::TimeTicks::Now();
 
   if (callback.is_null() || !key || host.empty()) {
     RecordGetChannelIDResult(INVALID_ARGUMENT);
@@ -372,13 +347,12 @@
 
   // See if a request for the same domain currently in flight.
   bool create_if_missing = false;
-  if (JoinToInFlightRequest(request_start, domain, key, create_if_missing,
-                            callback, out_req)) {
+  if (JoinToInFlightRequest(domain, key, create_if_missing, callback,
+                            out_req)) {
     return ERR_IO_PENDING;
   }
 
-  int err = LookupChannelID(request_start, domain, key, create_if_missing,
-                            callback, out_req);
+  int err = LookupChannelID(domain, key, create_if_missing, callback, out_req);
   return err;
 }
 
@@ -452,7 +426,6 @@
 }
 
 bool ChannelIDService::JoinToInFlightRequest(
-    const base::TimeTicks& request_start,
     const std::string& domain,
     std::unique_ptr<crypto::ECPrivateKey>* key,
     bool create_if_missing,
@@ -468,14 +441,13 @@
     inflight_joins_++;
 
     job->AddRequest(out_req, create_if_missing);
-    out_req->RequestStarted(this, request_start, callback, key, job);
+    out_req->RequestStarted(this, callback, key, job);
     return true;
   }
   return false;
 }
 
 int ChannelIDService::LookupChannelID(
-    const base::TimeTicks& request_start,
     const std::string& domain,
     std::unique_ptr<crypto::ECPrivateKey>* key,
     bool create_if_missing,
@@ -491,9 +463,6 @@
     DVLOG(1) << "Channel ID store had valid key for " << domain;
     key_store_hits_++;
     RecordGetChannelIDResult(SYNC_SUCCESS);
-    base::TimeDelta request_time = base::TimeTicks::Now() - request_start;
-    UMA_HISTOGRAM_TIMES("DomainBoundCerts.GetCertTimeSync", request_time);
-    RecordGetChannelIDTime(request_time);
     return OK;
   }
 
@@ -503,7 +472,7 @@
     inflight_[domain] = base::WrapUnique(job);
 
     job->AddRequest(out_req);
-    out_req->RequestStarted(this, request_start, callback, key, job);
+    out_req->RequestStarted(this, callback, key, job);
     return ERR_IO_PENDING;
   }
 
diff --git a/src/net/ssl/channel_id_service.h b/src/net/ssl/channel_id_service.h
index 5ef37d2..a3eb159 100644
--- a/src/net/ssl/channel_id_service.h
+++ b/src/net/ssl/channel_id_service.h
@@ -18,7 +18,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/task_runner.h"
 #include "base/threading/non_thread_safe.h"
-#include "base/time/time.h"
 #include "net/base/completion_callback.h"
 #include "net/base/net_export.h"
 #include "net/ssl/channel_id_store.h"
@@ -54,7 +53,6 @@
     friend class ChannelIDServiceJob;
 
     void RequestStarted(ChannelIDService* service,
-                        base::TimeTicks request_start,
                         const CompletionCallback& callback,
                         std::unique_ptr<crypto::ECPrivateKey>* key,
                         ChannelIDServiceJob* job);
@@ -62,7 +60,6 @@
     void Post(int error, std::unique_ptr<crypto::ECPrivateKey> key);
 
     ChannelIDService* service_;
-    base::TimeTicks request_start_;
     CompletionCallback callback_;
     std::unique_ptr<crypto::ECPrivateKey>* key_;
     ChannelIDServiceJob* job_;
@@ -150,8 +147,7 @@
   // Searches for an in-flight request for the same domain. If found,
   // attaches to the request and returns true. Returns false if no in-flight
   // request is found.
-  bool JoinToInFlightRequest(const base::TimeTicks& request_start,
-                             const std::string& domain,
+  bool JoinToInFlightRequest(const std::string& domain,
                              std::unique_ptr<crypto::ECPrivateKey>* key,
                              bool create_if_missing,
                              const CompletionCallback& callback,
@@ -161,8 +157,7 @@
   // Returns OK if it can be found synchronously, ERR_IO_PENDING if the
   // result cannot be obtained synchronously, or a network error code on
   // failure (including failure to find a channel ID of |domain|).
-  int LookupChannelID(const base::TimeTicks& request_start,
-                      const std::string& domain,
+  int LookupChannelID(const std::string& domain,
                       std::unique_ptr<crypto::ECPrivateKey>* key,
                       bool create_if_missing,
                       const CompletionCallback& callback,
diff --git a/src/net/ssl/default_channel_id_store.cc b/src/net/ssl/default_channel_id_store.cc
index 901e9f3..72c283a 100644
--- a/src/net/ssl/default_channel_id_store.cc
+++ b/src/net/ssl/default_channel_id_store.cc
@@ -332,18 +332,6 @@
 
   loaded_ = true;
 
-  base::TimeDelta wait_time;
-  if (!waiting_tasks_.empty())
-    wait_time = base::TimeTicks::Now() - waiting_tasks_start_time_;
-  DVLOG(1) << "Task delay " << wait_time.InMilliseconds();
-  UMA_HISTOGRAM_CUSTOM_TIMES("DomainBoundCerts.TaskMaxWaitTime",
-                             wait_time,
-                             base::TimeDelta::FromMilliseconds(1),
-                             base::TimeDelta::FromMinutes(1),
-                             50);
-  UMA_HISTOGRAM_COUNTS_100("DomainBoundCerts.TaskWaitCount",
-                           waiting_tasks_.size());
-
   for (std::unique_ptr<Task>& i : waiting_tasks_)
     i->Run(this);
   waiting_tasks_.clear();
@@ -401,8 +389,6 @@
 void DefaultChannelIDStore::EnqueueTask(std::unique_ptr<Task> task) {
   DCHECK(CalledOnValidThread());
   DCHECK(!loaded_);
-  if (waiting_tasks_.empty())
-    waiting_tasks_start_time_ = base::TimeTicks::Now();
   waiting_tasks_.push_back(std::move(task));
 }
 
diff --git a/src/net/ssl/default_channel_id_store.h b/src/net/ssl/default_channel_id_store.h
index 7d439b0..7dd5dcd 100644
--- a/src/net/ssl/default_channel_id_store.h
+++ b/src/net/ssl/default_channel_id_store.h
@@ -134,7 +134,6 @@
 
   // Tasks that are waiting to be run once we finish loading.
   std::vector<std::unique_ptr<Task>> waiting_tasks_;
-  base::TimeTicks waiting_tasks_start_time_;
 
   scoped_refptr<PersistentStore> store_;
 
diff --git a/src/net/test/spawned_test_server/base_test_server.cc b/src/net/test/spawned_test_server/base_test_server.cc
index afc77f3..2f02922 100644
--- a/src/net/test/spawned_test_server/base_test_server.cc
+++ b/src/net/test/spawned_test_server/base_test_server.cc
@@ -14,6 +14,7 @@
 #include "base/files/file_util.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/values.h"
 #include "net/base/address_list.h"
@@ -535,16 +536,16 @@
   arguments->SetString("data-dir", document_root_.value());
 
   if (VLOG_IS_ON(1) || log_to_console_)
-    arguments->Set("log-to-console", base::Value::CreateNullValue());
+    arguments->Set("log-to-console", base::MakeUnique<base::Value>());
 
   if (ws_basic_auth_) {
     DCHECK(type_ == TYPE_WS || type_ == TYPE_WSS);
-    arguments->Set("ws-basic-auth", base::Value::CreateNullValue());
+    arguments->Set("ws-basic-auth", base::MakeUnique<base::Value>());
   }
 
   if (no_anonymous_ftp_user_) {
     DCHECK_EQ(TYPE_FTP, type_);
-    arguments->Set("no-anonymous-ftp-user", base::Value::CreateNullValue());
+    arguments->Set("no-anonymous-ftp-user", base::MakeUnique<base::Value>());
   }
 
   if (UsingSSL(type_)) {
@@ -564,7 +565,7 @@
 
     // Check the client certificate related arguments.
     if (ssl_options_.request_client_certificate)
-      arguments->Set("ssl-client-auth", base::Value::CreateNullValue());
+      arguments->Set("ssl-client-auth", base::MakeUnique<base::Value>());
     std::unique_ptr<base::ListValue> ssl_client_certs(new base::ListValue());
 
     std::vector<base::FilePath>::const_iterator it;
@@ -591,11 +592,11 @@
   }
 
   if (type_ == TYPE_HTTPS) {
-    arguments->Set("https", base::Value::CreateNullValue());
+    arguments->Set("https", base::MakeUnique<base::Value>());
 
     if (ssl_options_.server_certificate ==
         SSLOptions::CERT_AUTO_AIA_INTERMEDIATE)
-      arguments->Set("aia-intermediate", base::Value::CreateNullValue());
+      arguments->Set("aia-intermediate", base::MakeUnique<base::Value>());
 
     std::string ocsp_arg = ssl_options_.GetOCSPArgument();
     if (!ocsp_arg.empty())
@@ -624,14 +625,14 @@
     if (bulk_cipher_values->GetSize())
       arguments->Set("ssl-bulk-cipher", bulk_cipher_values.release());
     if (ssl_options_.record_resume)
-      arguments->Set("https-record-resume", base::Value::CreateNullValue());
+      arguments->Set("https-record-resume", base::MakeUnique<base::Value>());
     if (ssl_options_.tls_intolerant != SSLOptions::TLS_INTOLERANT_NONE) {
       arguments->SetInteger("tls-intolerant", ssl_options_.tls_intolerant);
       arguments->Set("tls-intolerance-type", GetTLSIntoleranceType(
           ssl_options_.tls_intolerance_type));
     }
     if (ssl_options_.fallback_scsv_enabled)
-      arguments->Set("fallback-scsv", base::Value::CreateNullValue());
+      arguments->Set("fallback-scsv", base::MakeUnique<base::Value>());
     if (!ssl_options_.signed_cert_timestamps_tls_ext.empty()) {
       std::string b64_scts_tls_ext;
       base::Base64Encode(ssl_options_.signed_cert_timestamps_tls_ext,
@@ -639,10 +640,10 @@
       arguments->SetString("signed-cert-timestamps-tls-ext", b64_scts_tls_ext);
     }
     if (ssl_options_.staple_ocsp_response)
-      arguments->Set("staple-ocsp-response", base::Value::CreateNullValue());
+      arguments->Set("staple-ocsp-response", base::MakeUnique<base::Value>());
     if (ssl_options_.ocsp_server_unavailable) {
       arguments->Set("ocsp-server-unavailable",
-                     base::Value::CreateNullValue());
+                     base::MakeUnique<base::Value>());
     }
     if (!ssl_options_.alpn_protocols.empty()) {
       std::unique_ptr<base::ListValue> alpn_protocols(new base::ListValue());
@@ -659,13 +660,13 @@
       arguments->Set("npn-protocols", std::move(npn_protocols));
     }
     if (ssl_options_.alert_after_handshake)
-      arguments->Set("alert-after-handshake", base::Value::CreateNullValue());
+      arguments->Set("alert-after-handshake", base::MakeUnique<base::Value>());
 
     if (ssl_options_.disable_channel_id)
-      arguments->Set("disable-channel-id", base::Value::CreateNullValue());
+      arguments->Set("disable-channel-id", base::MakeUnique<base::Value>());
     if (ssl_options_.disable_extended_master_secret) {
       arguments->Set("disable-extended-master-secret",
-                     base::Value::CreateNullValue());
+                     base::MakeUnique<base::Value>());
     }
     if (!ssl_options_.supported_token_binding_params.empty()) {
       std::unique_ptr<base::ListValue> token_binding_params(
diff --git a/src/net/test/spawned_test_server/remote_test_server.cc b/src/net/test/spawned_test_server/remote_test_server.cc
index 17dc21e..90ec54e 100644
--- a/src/net/test/spawned_test_server/remote_test_server.cc
+++ b/src/net/test/spawned_test_server/remote_test_server.cc
@@ -15,6 +15,7 @@
 #include "base/json/json_writer.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
@@ -127,7 +128,7 @@
   if (!GenerateArguments(&arguments_dict))
     return false;
 
-  arguments_dict.Set("on-remote-server", base::Value::CreateNullValue());
+  arguments_dict.Set("on-remote-server", base::MakeUnique<base::Value>());
 
   // Append the 'server-type' argument which is used by spawner server to
   // pass right server type to Python test server.
diff --git a/src/net/test/test_certificate_data.h b/src/net/test/test_certificate_data.h
index c8fa950..fbeaca7 100644
--- a/src/net/test/test_certificate_data.h
+++ b/src/net/test/test_certificate_data.h
@@ -33,7 +33,8 @@
 #define VARIABLE_IS_NOT_USED
 #endif
 
-// Google's cert.
+// Google's 2009 cert. Lacks a SubjectAltName, but contains www.google.com in
+// the Subject CN field.
 
 unsigned char VARIABLE_IS_NOT_USED google_der[] = {
   0x30, 0x82, 0x03, 0x21, 0x30, 0x82, 0x02, 0x8a, 0xa0, 0x03, 0x02, 0x01,
@@ -106,7 +107,8 @@
   0xdf
 };
 
-// webkit.org's cert.
+// webkit.org's 2008 cert. Contains a SubjectAltName field with *.webkit.org and
+// webkit.org. The Subject CN field contains *.webkit.org.
 
 unsigned char VARIABLE_IS_NOT_USED webkit_der[] = {
   0x30, 0x82, 0x05, 0x0d, 0x30, 0x82, 0x03, 0xf5, 0xa0, 0x03, 0x02, 0x01,
@@ -220,7 +222,9 @@
   0x8a
 };
 
-// thawte.com's cert (it's EV-licious!).
+// thawte.com 2008 Extended Validation cert. Lacks a SubjectAltName, but
+// contains www.thawte.com in the Subject CN field.
+
 unsigned char VARIABLE_IS_NOT_USED thawte_der[] = {
   0x30, 0x82, 0x04, 0xa5, 0x30, 0x82, 0x03, 0x8d, 0xa0, 0x03, 0x02, 0x01,
   0x02, 0x02, 0x10, 0x17, 0x76, 0x05, 0x88, 0x95, 0x58, 0xee, 0xbb, 0x00,
diff --git a/src/net/testserver.log b/src/net/testserver.log
deleted file mode 100644
index e69de29..0000000
--- a/src/net/testserver.log
+++ /dev/null
diff --git a/src/net/tools/quic/chlo_extractor.cc b/src/net/tools/quic/chlo_extractor.cc
index 0235f72..28e0816 100644
--- a/src/net/tools/quic/chlo_extractor.cc
+++ b/src/net/tools/quic/chlo_extractor.cc
@@ -94,7 +94,7 @@
       QuicTextUtils::StartsWith(data, "CHLO")) {
     CryptoFramer crypto_framer;
     crypto_framer.set_visitor(this);
-    if (!crypto_framer.ProcessInput(data)) {
+    if (!crypto_framer.ProcessInput(data, Perspective::IS_SERVER)) {
       return false;
     }
   }
diff --git a/src/net/tools/quic/chlo_extractor_test.cc b/src/net/tools/quic/chlo_extractor_test.cc
index fccb40b..f314df6 100644
--- a/src/net/tools/quic/chlo_extractor_test.cc
+++ b/src/net/tools/quic/chlo_extractor_test.cc
@@ -27,7 +27,7 @@
               const CryptoHandshakeMessage& chlo) override {
     version_ = version;
     connection_id_ = connection_id;
-    chlo_ = chlo.DebugString();
+    chlo_ = chlo.DebugString(Perspective::IS_SERVER);
   }
 
   QuicConnectionId connection_id() const { return connection_id_; }
@@ -82,8 +82,9 @@
   CryptoHandshakeMessage client_hello;
   client_hello.set_tag(kCHLO);
 
-  string client_hello_str(
-      client_hello.GetSerialized().AsStringPiece().as_string());
+  string client_hello_str(client_hello.GetSerialized(Perspective::IS_CLIENT)
+                              .AsStringPiece()
+                              .as_string());
   // Construct a CHLO with each supported version
   for (QuicVersion version : AllSupportedVersions()) {
     QuicVersionVector versions(SupportedVersions(version));
@@ -94,7 +95,8 @@
         << QuicVersionToString(version);
     EXPECT_EQ(version, delegate_.version());
     EXPECT_EQ(header_.public_header.connection_id, delegate_.connection_id());
-    EXPECT_EQ(client_hello.DebugString(), delegate_.chlo())
+    EXPECT_EQ(client_hello.DebugString(Perspective::IS_SERVER),
+              delegate_.chlo())
         << QuicVersionToString(version);
   }
 }
@@ -103,8 +105,9 @@
   CryptoHandshakeMessage client_hello;
   client_hello.set_tag(kCHLO);
 
-  string client_hello_str(
-      client_hello.GetSerialized().AsStringPiece().as_string());
+  string client_hello_str(client_hello.GetSerialized(Perspective::IS_CLIENT)
+                              .AsStringPiece()
+                              .as_string());
   MakePacket(
       new QuicStreamFrame(kCryptoStreamId + 1, false, 0, client_hello_str));
   EXPECT_FALSE(
@@ -115,8 +118,9 @@
   CryptoHandshakeMessage client_hello;
   client_hello.set_tag(kCHLO);
 
-  string client_hello_str(
-      client_hello.GetSerialized().AsStringPiece().as_string());
+  string client_hello_str(client_hello.GetSerialized(Perspective::IS_CLIENT)
+                              .AsStringPiece()
+                              .as_string());
   MakePacket(new QuicStreamFrame(kCryptoStreamId, false, 1, client_hello_str));
   EXPECT_FALSE(
       ChloExtractor::Extract(*packet_, AllSupportedVersions(), &delegate_));
diff --git a/src/net/tools/quic/crypto_message_printer_bin.cc b/src/net/tools/quic/crypto_message_printer_bin.cc
index d0b46c6..b466a00 100644
--- a/src/net/tools/quic/crypto_message_printer_bin.cc
+++ b/src/net/tools/quic/crypto_message_printer_bin.cc
@@ -13,22 +13,30 @@
 #include "net/quic/core/crypto/crypto_framer.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 
+using net::Perspective;
 using std::cerr;
 using std::cout;
 using std::endl;
 
+std::string FLAGS_perspective = "";
+
 namespace net {
 
 class CryptoMessagePrinter : public net::CryptoFramerVisitorInterface {
  public:
+  explicit CryptoMessagePrinter(Perspective perspective)
+      : perspective_(perspective) {}
+
   void OnHandshakeMessage(const CryptoHandshakeMessage& message) override {
-    cout << message.DebugString() << endl;
+    cout << message.DebugString(perspective_) << endl;
   }
 
   void OnError(CryptoFramer* framer) override {
     cerr << "Error code: " << framer->error() << endl;
     cerr << "Error details: " << framer->error_detail() << endl;
   }
+
+  Perspective perspective_;
 };
 
 }  // namespace net
@@ -37,15 +45,31 @@
   base::CommandLine::Init(argc, argv);
 
   if (argc != 2) {
-    cerr << "Usage: " << argv[0] << " <hex of message>\n";
+    cerr << "Usage: " << argv[0]
+         << " --perspective=server/client <hex of message>\n";
     return 1;
   }
 
-  net::CryptoMessagePrinter printer;
+  base::CommandLine* line = base::CommandLine::ForCurrentProcess();
+
+  if (line->HasSwitch("perspective")) {
+    FLAGS_perspective = line->GetSwitchValueASCII("perspective");
+  }
+
+  if (FLAGS_perspective != "server" && FLAGS_perspective != "client") {
+    cerr << "perspective must be either server or client\n";
+    return 1;
+  }
+
+  Perspective perspective = FLAGS_perspective == "server"
+                                ? Perspective::IS_SERVER
+                                : Perspective::IS_CLIENT;
+
+  net::CryptoMessagePrinter printer(perspective);
   net::CryptoFramer framer;
   framer.set_visitor(&printer);
   std::string input = net::QuicTextUtils::HexDecode(argv[1]);
-  if (!framer.ProcessInput(input)) {
+  if (!framer.ProcessInput(input, perspective)) {
     return 1;
   }
   if (framer.InputBytesRemaining() != 0) {
diff --git a/src/net/tools/quic/quic_dispatcher.cc b/src/net/tools/quic/quic_dispatcher.cc
index 8768eaf..bd691ce 100644
--- a/src/net/tools/quic/quic_dispatcher.cc
+++ b/src/net/tools/quic/quic_dispatcher.cc
@@ -11,6 +11,7 @@
 #include "net/quic/core/quic_flags.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_bug_tracker.h"
+#include "net/quic/platform/api/quic_flag_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_stack_trace.h"
@@ -694,6 +695,8 @@
   if (FLAGS_quic_reloadable_flag_quic_create_session_after_insertion &&
       is_new_connection &&
       !ShouldCreateOrBufferPacketForConnection(connection_id)) {
+    QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_create_session_after_insertion,
+                      1, 5);
     return;
   }
   EnqueuePacketResult rs = buffered_packets_.EnqueuePacket(
@@ -711,6 +714,8 @@
   if (FLAGS_quic_reloadable_flag_quic_create_session_after_insertion &&
       !buffered_packets_.HasBufferedPackets(current_connection_id_) &&
       !ShouldCreateOrBufferPacketForConnection(current_connection_id_)) {
+    QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_create_session_after_insertion,
+                      2, 5);
     return;
   }
   if (FLAGS_quic_allow_chlo_buffering &&
@@ -951,8 +956,9 @@
       StatelessConnectionTerminator terminator(rejector->connection_id(),
                                                &framer_, helper(),
                                                time_wait_list_manager_.get());
-      terminator.RejectConnection(
-          rejector->reply().GetSerialized().AsStringPiece());
+      terminator.RejectConnection(rejector->reply()
+                                      .GetSerialized(Perspective::IS_SERVER)
+                                      .AsStringPiece());
       OnConnectionRejectedStatelessly();
       fate = kFateTimeWait;
       break;
diff --git a/src/net/tools/quic/quic_dispatcher_test.cc b/src/net/tools/quic/quic_dispatcher_test.cc
index 90b8e2a..384236a 100644
--- a/src/net/tools/quic/quic_dispatcher_test.cc
+++ b/src/net/tools/quic/quic_dispatcher_test.cc
@@ -310,7 +310,9 @@
   string SerializeCHLO() {
     CryptoHandshakeMessage client_hello;
     client_hello.set_tag(kCHLO);
-    return client_hello.GetSerialized().AsStringPiece().as_string();
+    return client_hello.GetSerialized(Perspective::IS_CLIENT)
+        .AsStringPiece()
+        .as_string();
   }
 
   QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
@@ -819,7 +821,9 @@
                                     kClientHelloMinimumSize);
 
   ProcessPacket(client_address, connection_id, true,
-                client_hello.GetSerialized().AsStringPiece().as_string());
+                client_hello.GetSerialized(Perspective::IS_CLIENT)
+                    .AsStringPiece()
+                    .as_string());
 
   if (GetParam().enable_stateless_rejects_via_flag) {
     EXPECT_EQ(true,
@@ -863,7 +867,9 @@
                                  base::Unretained(this), connection_id))))
         .RetiresOnSaturation();
     ProcessPacket(client_address, connection_id, true,
-                  client_hello.GetSerialized().AsStringPiece().as_string());
+                  client_hello.GetSerialized(Perspective::IS_CLIENT)
+                      .AsStringPiece()
+                      .as_string());
     EXPECT_FALSE(
         time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id));
 }
@@ -1164,7 +1170,9 @@
   }
 
   string SerializeFullCHLO() {
-    return full_chlo_.GetSerialized().AsStringPiece().as_string();
+    return full_chlo_.GetSerialized(Perspective::IS_CLIENT)
+        .AsStringPiece()
+        .as_string();
   }
 
  protected:
@@ -1609,11 +1617,15 @@
   }
 
   string SerializeFullCHLO() {
-    return full_chlo_.GetSerialized().AsStringPiece().as_string();
+    return full_chlo_.GetSerialized(Perspective::IS_CLIENT)
+        .AsStringPiece()
+        .as_string();
   }
 
   string SerializeCHLO() {
-    return chlo_.GetSerialized().AsStringPiece().as_string();
+    return chlo_.GetSerialized(Perspective::IS_CLIENT)
+        .AsStringPiece()
+        .as_string();
   }
 
   // Sets up a session, and crypto stream based on the test parameters.
diff --git a/src/net/tools/quic/quic_packet_writer_wrapper.h b/src/net/tools/quic/quic_packet_writer_wrapper.h
index 50cc547..7227318 100644
--- a/src/net/tools/quic/quic_packet_writer_wrapper.h
+++ b/src/net/tools/quic/quic_packet_writer_wrapper.h
@@ -40,6 +40,8 @@
 
   virtual void set_peer_address(const QuicSocketAddress& peer_address) {}
 
+  QuicPacketWriter* writer() { return writer_.get(); }
+
  private:
   std::unique_ptr<QuicPacketWriter> writer_;
 
diff --git a/src/net/tools/transport_security_state_generator/BUILD.gn b/src/net/tools/transport_security_state_generator/BUILD.gn
index 05db192..06bfd8b 100644
--- a/src/net/tools/transport_security_state_generator/BUILD.gn
+++ b/src/net/tools/transport_security_state_generator/BUILD.gn
@@ -12,6 +12,8 @@
     "cert_util.h",
     "huffman/huffman_builder.cc",
     "huffman/huffman_builder.h",
+    "input_file_parsers.cc",
+    "input_file_parsers.h",
     "pinset.cc",
     "pinset.h",
     "pinsets.cc",
@@ -37,7 +39,9 @@
   testonly = true
   sources = [
     "bit_writer_unittest.cc",
+    "cert_util_unittest.cc",
     "huffman/huffman_builder_unittest.cc",
+    "input_file_parsers_unittest.cc",
     "spki_hash_unittest.cc",
     "trie/trie_bit_buffer_unittest.cc",
   ]
@@ -47,6 +51,7 @@
     "//base/test:test_support",
     "//testing/gmock",
     "//testing/gtest",
+    "//third_party/boringssl",
   ]
 }
 
diff --git a/src/net/tools/transport_security_state_generator/cert_util_unittest.cc b/src/net/tools/transport_security_state_generator/cert_util_unittest.cc
new file mode 100644
index 0000000..5bc294f
--- /dev/null
+++ b/src/net/tools/transport_security_state_generator/cert_util_unittest.cc
@@ -0,0 +1,217 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+#include <vector>
+
+#include "net/tools/transport_security_state_generator/cert_util.h"
+#include "net/tools/transport_security_state_generator/spki_hash.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/boringssl/src/include/openssl/x509v3.h"
+
+namespace net {
+
+namespace transport_security_state {
+
+namespace {
+
+// Certficate with the subject CN set to "Chromium", the subject organisation
+// set to "The Chromium Projects", and the subject organizational unit set to
+// "Security."
+static const char kSelfSignedWithCommonNamePEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIDeTCCAmGgAwIBAgIJAKZbsC4gPYAUMA0GCSqGSIb3DQEBCwUAMFMxETAPBgNV\n"
+    "BAMMCENocm9taXVtMR4wHAYDVQQKDBVUaGUgQ2hyb21pdW0gUHJvamVjdHMxETAP\n"
+    "BgNVBAsMCFNlY3VyaXR5MQswCQYDVQQGEwJVUzAeFw0xNzAxMjkyMDU1NDFaFw0x\n"
+    "ODAxMjkyMDU1NDFaMFMxETAPBgNVBAMMCENocm9taXVtMR4wHAYDVQQKDBVUaGUg\n"
+    "Q2hyb21pdW0gUHJvamVjdHMxETAPBgNVBAsMCFNlY3VyaXR5MQswCQYDVQQGEwJV\n"
+    "UzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMlir9M85QOvQ5ok+uvH\n"
+    "XF7kmW21B22Ffdw+B2mXTV6NLGvINCdwocIlebQlAdWS2QY/WM08uAYJ3m0IGD+t\n"
+    "6OG4zG3vOmWMdFQy4XkxMsDkbV11F9n4dsF5TXEvILlupOtOWu6Up8vfFkii/x+/\n"
+    "bz4aGBDdFu6U8TdQ8ELSmHxJYi4LM0lUKTdLLte3T5Grv3UUXQW33Qs6RXZlH/ul\n"
+    "jf7/v0HQefM3XdT9djG1XRv8Ga32c8tz+wtSw7PPIWjt0ZDJxZ2/fX7YLwAt2D6N\n"
+    "zQgrNJtL0/I/j9sO6A0YQeHzmnlyoAd14VhBfEllZc51pFaut31wpbPPxtH0K0Ro\n"
+    "2XUCAwEAAaNQME4wHQYDVR0OBBYEFD7eitJ8KlIaVS4J9w2Nz+5OE8H0MB8GA1Ud\n"
+    "IwQYMBaAFD7eitJ8KlIaVS4J9w2Nz+5OE8H0MAwGA1UdEwQFMAMBAf8wDQYJKoZI\n"
+    "hvcNAQELBQADggEBAFjuy0Jhj2E/ALOkOst53/nHIpT5suru4H6YEmmPye+KCQnC\n"
+    "ws1msPyLQ8V10/kyQzJTSLbeehNyOaK99KJk+hZBVEKBa9uH3WXPpiwz1xr3STJO\n"
+    "hhV2wXGTMqe5gryR7r+n88+2TpRiZ/mAVyJm4NQgev4HZbFsl3sT50AQrrEbHHiY\n"
+    "Sh38NCR8JCVuzLBjcEEIWxjhDPkdNPJtx3cBkIDP+Cz1AUSPretGk7CQAGivq7Kq\n"
+    "9y6A59guc1RFVPeEQAxUIUDZGDQlB3PtmrXrp1/LAaDYvQCstDBgiZoamy+xSROP\n"
+    "BU2KIzRj2EUOWqtIURU4Q2QC1fbVqxVjfPowX/A=\n"
+    "-----END CERTIFICATE-----\n";
+
+// Certificate without a subject CN. The subject organisation is set to
+// "The Chromium Projects" and the subject origanisational unit is set to
+// "Security".
+static const char kSelfSignedWithoutCommonNamePEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIDUzCCAjugAwIBAgIJAI18Ifktf3YOMA0GCSqGSIb3DQEBCwUAMEAxHjAcBgNV\n"
+    "BAoMFVRoZSBDaHJvbWl1bSBQcm9qZWN0czERMA8GA1UECwwIU2VjdXJpdHkxCzAJ\n"
+    "BgNVBAYTAlVTMB4XDTE3MDEyOTIxMTMwMloXDTE4MDEyOTIxMTMwMlowQDEeMBwG\n"
+    "A1UECgwVVGhlIENocm9taXVtIFByb2plY3RzMREwDwYDVQQLDAhTZWN1cml0eTEL\n"
+    "MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxfBIg\n"
+    "4hVljlFbyZ88mhLEKCfy/8X127H16ywcy+q+jlj7YtlWqGKlfIjKQkXKeI/xUB1F\n"
+    "ZC1S0kmVycAoahb4m+NqkfBkuxbpc5gYsv9TdgiNIhEezx6Z9OTPjGnTZVDjJNsQ\n"
+    "MVKfG+DD3qAf22PhpU2zGXCF2ECL7J/Lh6Wu/W3InuIcJGm3D7F182UK86stvC/+\n"
+    "mS9K7AJyX320vHWYsVB/jA9w6cSdlZf454E+wtsS0b+UIMF6fewg2Xb/FYxRsOjp\n"
+    "ppVpF8/2v6JzDjBhdZkYufR5M43tCEUBBK6TwfXAPfK3v2IDcoW+iOuztW5/cdTs\n"
+    "rVaGK9YqRDIeFWKNAgMBAAGjUDBOMB0GA1UdDgQWBBRh2Ef5+mRtj2sJHpXWlWai\n"
+    "D3zNXTAfBgNVHSMEGDAWgBRh2Ef5+mRtj2sJHpXWlWaiD3zNXTAMBgNVHRMEBTAD\n"
+    "AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAmxdLSlb76yre3VmugMQqybSkJr4+OZm6c\n"
+    "ES6TQeBzNrbPQhYPAfTUa2i4Cx5r4tMTp1IfUKgtng4qnKyLRgC+BV4zAfSRxbuw\n"
+    "aqicO1Whtl/Vs2Cdou10EU68kKOxLqNdzfXVVSQ/HxGFJFFJdSLfjpRTcfbORfeh\n"
+    "BfFQkjdlK8DdX8pPLjHImFKXT/8IpPPq41k2KuIhG3cd2vBNV7n7U793LSE+dPQk\n"
+    "0jKehPOfiPBl1nWr7ZTF8bYtgxboVsv73E6IoQhPGPnnDF3ISQ5/ulDQNXJr2PI3\n"
+    "ZYZ4PtSKcBi97BucW7lkt3bWY44TZGVHY1s4EGQFqU4aDyP+aR7Z\n"
+    "-----END CERTIFICATE-----\n";
+
+// Certificate without a subject CN, organisation or organizational unit.
+static const char kSelfSignedWithoutSubject[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIC7TCCAdWgAwIBAgIJAOPMcoAKhzZPMA0GCSqGSIb3DQEBCwUAMA0xCzAJBgNV\n"
+    "BAYTAlVTMB4XDTE3MDEyOTIxNDA1MloXDTE4MDEyOTIxNDA1MlowDTELMAkGA1UE\n"
+    "BhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLn0oths5iUbDN\n"
+    "h5IssWAf4jBRVh0c7AfVpnsriSdpgMEfApjE4Fcb3ma/8g+f2SB0x7bSLKMfpKZl\n"
+    "v7tQBuNXsbMcv1l4Ip595ZznSr74Fpuc6K0pqaVUSrgt2EVDp6lx12fFcXMI08Ar\n"
+    "76v06loe7HnO+cOCAXn3Yd89UznB7w8a+RiJlUzb4vksksSQyxCOYwahx6kuN9vh\n"
+    "MkjmzoVSbO6vtHktECsq5M2k98GZMmbXimW+lkyqsG3qJnmAYsIapDE1droPp5Cx\n"
+    "l/tQ95CKEZQDuF4Zv+fgg0eHnnCAhuCPnM8GblOTsAsSjNd8GM+4eJPPtAHdB1nn\n"
+    "HCYB/QadAgMBAAGjUDBOMB0GA1UdDgQWBBTxlQlna2f2VttJkEoeayPsCF7SxzAf\n"
+    "BgNVHSMEGDAWgBTxlQlna2f2VttJkEoeayPsCF7SxzAMBgNVHRMEBTADAQH/MA0G\n"
+    "CSqGSIb3DQEBCwUAA4IBAQBUOmDhs3K1v+tPeO+TWFw8NDfOkcWy6EX+c6K7mSwF\n"
+    "mJjqWsEUBp+WbTK6RoVjuLucH5mRF3FmRrW/hOnxIWxpHg5/9vodReLDPnUw0Anb\n"
+    "QoxKgJ41VfD8aGK8GDPOrETwbIR6+d9P6bDKukiuW41Yh5TjXLufaQ1g9C1AIEoG\n"
+    "88Akr6g9Q0vJJXGl9YcPFz6M1wm3l/lH08v2Ual52elFXYcDcoxhLCOdImmWGlnn\n"
+    "MYXxdl1ivj3hHgFXxkIbrlYKVSBhwPPgjVYKkimFcZF5Xw7wfmIl/WUtVaRpmkGp\n"
+    "3TgH7jdRQ1WXlROBct/4Z8jzs7i+Ttk8oxct2r+PdqeZ\n"
+    "-----END CERTIFICATE-----\n";
+
+// Valid PEM certificate headers but invalid BASE64 content.
+static const char kInvalidCertificatePEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "This is invalid base64.\n"
+    "It contains some (#$*) invalid characters.\n"
+    "-----END CERTIFICATE-----\n";
+
+// Valid PEM public key headers but invalid BASE64 content.
+static const char kInvalidPublicKeyPEM[] =
+    "-----BEGIN PUBLIC KEY-----\n"
+    "This is invalid base64.\n"
+    "It contains some (#$*) invalid characters.\n"
+    "-----END PUBLIC KEY-----\n";
+
+// Valid 2048 bit RSA public key.
+static const char kPublicKeyPEM[] =
+    "-----BEGIN PUBLIC KEY-----\n"
+    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujzwcb5bJuC/A/Y9izGl\n"
+    "LlA3fnKGbeyn53BdVznJN4fQwU82WKVYdqt8d/1ZDRdYyhGrTgXJeCURe9VSJyX1\n"
+    "X2a5EApSFsopP8Yjy0Rl6dNOLO84KCW9dPmfHC3uP0ac4hnHT5dUr05YvhJmHCkf\n"
+    "as6v/aEgpPLDhRF6UruSUh+gIpUg/F3+vlD99HLfbloukoDtQyxW+86s9sO7RQ00\n"
+    "pd79VOoa/v09FvoS7MFgnBBOtvBQLOXjEH7/qBsnrXFtHBeOtxSLar/FL3OhVXuh\n"
+    "dUTRyc1Mg0ECtz8zHZugW+LleIm5Bf5Yr0bN1O/HfDPCkDaCldcm6xohEHn9pBaW\n"
+    "+wIDAQAB\n"
+    "-----END PUBLIC KEY-----\n";
+
+// Valid 2048 bit RSA public key with incorrect PEM headers.
+static const char kUnknownPEMHeaders[] =
+    "-----BEGIN OF SOMETHING-----\n"
+    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujzwcb5bJuC/A/Y9izGl\n"
+    "LlA3fnKGbeyn53BdVznJN4fQwU82WKVYdqt8d/1ZDRdYyhGrTgXJeCURe9VSJyX1\n"
+    "X2a5EApSFsopP8Yjy0Rl6dNOLO84KCW9dPmfHC3uP0ac4hnHT5dUr05YvhJmHCkf\n"
+    "as6v/aEgpPLDhRF6UruSUh+gIpUg/F3+vlD99HLfbloukoDtQyxW+86s9sO7RQ00\n"
+    "pd79VOoa/v09FvoS7MFgnBBOtvBQLOXjEH7/qBsnrXFtHBeOtxSLar/FL3OhVXuh\n"
+    "dUTRyc1Mg0ECtz8zHZugW+LleIm5Bf5Yr0bN1O/HfDPCkDaCldcm6xohEHn9pBaW\n"
+    "+wIDAQAB\n"
+    "-----END OF SOMETHING-----\n";
+
+TEST(CertUtilTest, GetX509CertificateFromPEM) {
+  EXPECT_NE(nullptr, GetX509CertificateFromPEM(kSelfSignedWithCommonNamePEM));
+  EXPECT_NE(nullptr, GetX509CertificateFromPEM(kSelfSignedWithoutSubject));
+  EXPECT_EQ(nullptr, GetX509CertificateFromPEM(kInvalidCertificatePEM));
+  EXPECT_EQ(nullptr, GetX509CertificateFromPEM(kInvalidPublicKeyPEM));
+}
+
+// Test that the SPKI digest is correctly calculated for valid certificates.
+TEST(CertUtilTest, CalculateSPKIHashFromCertificate) {
+  SPKIHash hash1;
+  bssl::UniquePtr<X509> cert1 =
+      GetX509CertificateFromPEM(kSelfSignedWithCommonNamePEM);
+  EXPECT_TRUE(CalculateSPKIHashFromCertificate(cert1.get(), &hash1));
+  std::vector<uint8_t> hash_vector(hash1.data(), hash1.data() + hash1.size());
+  EXPECT_THAT(
+      hash_vector,
+      testing::ElementsAreArray(
+          {0xAC, 0xFB, 0x2B, 0xF3, 0x6A, 0x90, 0x47, 0xF1, 0x74, 0xAE, 0xF1,
+           0xCE, 0x63, 0x3D, 0xA9, 0x45, 0xCB, 0xA,  0xA7, 0x3F, 0x16, 0x2A,
+           0xF3, 0x88, 0x9A, 0xE2, 0x72, 0xC,  0x07, 0x63, 0x45, 0xB0}));
+
+  SPKIHash hash2;
+  bssl::UniquePtr<X509> cert2 =
+      GetX509CertificateFromPEM(kSelfSignedWithoutCommonNamePEM);
+  EXPECT_TRUE(CalculateSPKIHashFromCertificate(cert2.get(), &hash2));
+  std::vector<uint8_t> hash_vector2(hash2.data(), hash2.data() + hash2.size());
+  EXPECT_THAT(
+      hash_vector2,
+      testing::ElementsAreArray(
+          {0x40, 0xBC, 0xD6, 0xE4, 0x10, 0x70, 0x37, 0x3C, 0xF7, 0x21, 0x51,
+           0xD7, 0x27, 0x64, 0xFD, 0xF1, 0xA,  0x89, 0x0,  0xAD, 0x75, 0xDF,
+           0xB3, 0xEA, 0x21, 0xFC, 0x6E, 0x67, 0xD5, 0xAE, 0xA4, 0x94}));
+}
+
+// Test that the SPKI digest for public key's are calculated correctly.
+TEST(CertUtilTest, CalculateSPKIHashFromKey) {
+  SPKIHash hash1;
+  EXPECT_TRUE(CalculateSPKIHashFromKey(kPublicKeyPEM, &hash1));
+  std::vector<uint8_t> hash_vector(hash1.data(), hash1.data() + hash1.size());
+  EXPECT_THAT(
+      hash_vector,
+      testing::ElementsAreArray(
+          {0x63, 0xB0, 0x21, 0x4,  0x3,  0x13, 0x9E, 0x36, 0xEE, 0xCB, 0x6F,
+           0xA5, 0x7A, 0x94, 0x56, 0x18, 0xBA, 0x41, 0x13, 0x8C, 0x4A, 0x48,
+           0x99, 0x80, 0x51, 0x66, 0xF8, 0x85, 0x2,  0xFC, 0x48, 0x9E}));
+  SPKIHash hash2;
+  EXPECT_FALSE(CalculateSPKIHashFromKey(kInvalidPublicKeyPEM, &hash2));
+
+  SPKIHash hash3;
+  EXPECT_FALSE(
+      CalculateSPKIHashFromKey(kSelfSignedWithoutCommonNamePEM, &hash3));
+
+  SPKIHash hash4;
+  EXPECT_FALSE(CalculateSPKIHashFromKey(kUnknownPEMHeaders, &hash4));
+}
+
+// Test that the subject name is extracted correctly. This should default to the
+// subject common name and fall back to the organisation + organizational unit.
+TEST(CertUtilTest, ExtractSubjectNameFromCertificate) {
+  std::string name1;
+  bssl::UniquePtr<X509> cert1 =
+      GetX509CertificateFromPEM(kSelfSignedWithCommonNamePEM);
+  EXPECT_TRUE(ExtractSubjectNameFromCertificate(cert1.get(), &name1));
+
+  // For certficates with the subject common name field set, we should get the
+  // value of the subject common name.
+  EXPECT_EQ("Chromium", name1);
+
+  std::string name2;
+  bssl::UniquePtr<X509> cert2 =
+      GetX509CertificateFromPEM(kSelfSignedWithoutCommonNamePEM);
+  EXPECT_TRUE(ExtractSubjectNameFromCertificate(cert2.get(), &name2));
+
+  // For certificates without a subject common name field, we should get
+  // the subject organization + " " + organizational unit instead.
+  EXPECT_EQ("The Chromium Projects Security", name2);
+
+  std::string name3;
+  bssl::UniquePtr<X509> cert3 =
+      GetX509CertificateFromPEM(kSelfSignedWithoutSubject);
+  EXPECT_FALSE(ExtractSubjectNameFromCertificate(cert3.get(), &name3));
+}
+
+}  // namespace
+
+}  // namespace transport_security_state
+
+}  // namespace net
diff --git a/src/net/tools/transport_security_state_generator/input_file_parsers.cc b/src/net/tools/transport_security_state_generator/input_file_parsers.cc
new file mode 100644
index 0000000..0d2ef47
--- /dev/null
+++ b/src/net/tools/transport_security_state_generator/input_file_parsers.cc
@@ -0,0 +1,392 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/tools/transport_security_state_generator/input_file_parsers.h"
+
+#include <sstream>
+#include <vector>
+
+#include "base/json/json_reader.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "net/tools/transport_security_state_generator/cert_util.h"
+#include "net/tools/transport_security_state_generator/pinset.h"
+#include "net/tools/transport_security_state_generator/pinsets.h"
+#include "net/tools/transport_security_state_generator/spki_hash.h"
+#include "third_party/boringssl/src/include/openssl/x509v3.h"
+
+namespace net {
+
+namespace transport_security_state {
+
+namespace {
+
+bool IsImportantWordInCertificateName(base::StringPiece name) {
+  const char* const important_words[] = {"Universal", "Global", "EV", "G1",
+                                         "G2",        "G3",     "G4", "G5"};
+  for (auto* important_word : important_words) {
+    if (name == important_word) {
+      return true;
+    }
+  }
+  return false;
+}
+
+// Strips all characters not matched by the RegEx [A-Za-z0-9_] from |name| and
+// returns the result.
+std::string FilterName(base::StringPiece name) {
+  std::string filtered;
+  for (const char& character : name) {
+    if ((character >= '0' && character <= '9') ||
+        (character >= 'a' && character <= 'z') ||
+        (character >= 'A' && character <= 'Z') || character == '_') {
+      filtered += character;
+    }
+  }
+  return base::ToLowerASCII(filtered);
+}
+
+// Returns true if |pin_name| is a reasonable match for the certificate name
+// |name|.
+bool MatchCertificateName(base::StringPiece name, base::StringPiece pin_name) {
+  std::vector<base::StringPiece> words = base::SplitStringPiece(
+      name, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+  if (words.empty()) {
+    LOG(ERROR) << "No words in certificate name for pin "
+               << pin_name.as_string();
+    return false;
+  }
+  base::StringPiece first_word = words[0];
+
+  if (first_word.ends_with(",")) {
+    first_word = first_word.substr(0, first_word.size() - 1);
+  }
+
+  if (first_word.starts_with("*.")) {
+    first_word = first_word.substr(2, first_word.size() - 2);
+  }
+
+  size_t pos = first_word.find('.');
+  if (pos != std::string::npos) {
+    first_word = first_word.substr(0, first_word.size() - pos);
+  }
+
+  pos = first_word.find('-');
+  if (pos != std::string::npos) {
+    first_word = first_word.substr(0, first_word.size() - pos);
+  }
+
+  if (first_word.empty()) {
+    LOG(ERROR) << "First word of certificate name (" << name.as_string()
+               << ") is empty";
+    return false;
+  }
+
+  std::string filtered_word = FilterName(first_word);
+  first_word = filtered_word;
+  if (!base::EqualsCaseInsensitiveASCII(pin_name.substr(0, first_word.size()),
+                                        first_word)) {
+    LOG(ERROR) << "The first word of the certificate name ("
+               << first_word.as_string()
+               << ") isn't a prefix of the variable name ("
+               << pin_name.as_string() << ")";
+    return false;
+  }
+
+  for (size_t i = 0; i < words.size(); ++i) {
+    const base::StringPiece& word = words[i];
+    if (word == "Class" && (i + 1) < words.size()) {
+      std::string class_name = word.as_string();
+      words[i + 1].AppendToString(&class_name);
+
+      size_t pos = pin_name.find(class_name);
+      if (pos == std::string::npos) {
+        LOG(ERROR)
+            << "Certficate class specification doesn't appear in the variable "
+               "name ("
+            << pin_name.as_string() << ")";
+        return false;
+      }
+    } else if (word.size() == 1 && word[0] >= '0' && word[0] <= '9') {
+      size_t pos = pin_name.find(word);
+      if (pos == std::string::npos) {
+        LOG(ERROR) << "Number doesn't appear in the certificate variable name ("
+                   << pin_name.as_string() << ")";
+        return false;
+      }
+    } else if (IsImportantWordInCertificateName(word)) {
+      size_t pos = pin_name.find(word);
+      if (pos == std::string::npos) {
+        LOG(ERROR) << word.as_string() +
+                          " doesn't appear in the certificate variable name ("
+                   << pin_name.as_string() << ")";
+        return false;
+      }
+    }
+  }
+
+  return true;
+}
+
+// Returns true iff |candidate| is not empty, the first character is in the
+// range A-Z, and the remaining characters are in the ranges a-Z, 0-9, or '_'.
+bool IsValidName(base::StringPiece candidate) {
+  if (candidate.empty() || candidate[0] < 'A' || candidate[0] > 'Z') {
+    return false;
+  }
+
+  bool isValid = true;
+  for (const char& character : candidate) {
+    isValid = (character >= '0' && character <= '9') ||
+              (character >= 'a' && character <= 'z') ||
+              (character >= 'A' && character <= 'Z') || character == '_';
+    if (!isValid) {
+      return false;
+    }
+  }
+  return true;
+}
+
+static const char kStartOfCert[] = "-----BEGIN CERTIFICATE";
+static const char kStartOfPublicKey[] = "-----BEGIN PUBLIC KEY";
+static const char kEndOfCert[] = "-----END CERTIFICATE";
+static const char kEndOfPublicKey[] = "-----END PUBLIC KEY";
+static const char kStartOfSHA256[] = "sha256/";
+
+enum class CertificateParserState {
+  PRE_NAME,
+  POST_NAME,
+  IN_CERTIFICATE,
+  IN_PUBLIC_KEY
+};
+
+}  // namespace
+
+bool ParseCertificatesFile(base::StringPiece certs_input, Pinsets* pinsets) {
+  std::string line;
+  CertificateParserState current_state = CertificateParserState::PRE_NAME;
+
+  const base::CompareCase& compare_mode = base::CompareCase::INSENSITIVE_ASCII;
+  std::string name;
+  std::string buffer;
+  std::string subject_name;
+  bssl::UniquePtr<X509> certificate;
+  SPKIHash hash;
+
+  for (const base::StringPiece& line : SplitStringPiece(
+           certs_input, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL)) {
+    if (line[0] == '#') {
+      continue;
+    }
+
+    if (line.empty() && current_state == CertificateParserState::PRE_NAME) {
+      continue;
+    }
+
+    switch (current_state) {
+      case CertificateParserState::PRE_NAME:
+        if (!IsValidName(line)) {
+          LOG(ERROR) << "Invalid name in pins file: " << line;
+          return false;
+        }
+        name = line.as_string();
+        current_state = CertificateParserState::POST_NAME;
+        break;
+      case CertificateParserState::POST_NAME:
+        if (base::StartsWith(line, kStartOfSHA256, compare_mode)) {
+          if (!hash.FromString(line)) {
+            LOG(ERROR) << "Invalid hash value in pins file for " << name;
+            return false;
+          }
+
+          pinsets->RegisterSPKIHash(name, hash);
+          current_state = CertificateParserState::PRE_NAME;
+        } else if (base::StartsWith(line, kStartOfCert, compare_mode)) {
+          buffer = line.as_string() + '\n';
+          current_state = CertificateParserState::IN_CERTIFICATE;
+        } else if (base::StartsWith(line, kStartOfPublicKey, compare_mode)) {
+          buffer = line.as_string() + '\n';
+          current_state = CertificateParserState::IN_PUBLIC_KEY;
+        } else {
+          LOG(ERROR) << "Invalid value in pins file for " << name;
+          return false;
+        }
+        break;
+      case CertificateParserState::IN_CERTIFICATE:
+        buffer += line.as_string() + '\n';
+        if (!base::StartsWith(line, kEndOfCert, compare_mode)) {
+          continue;
+        }
+
+        certificate = GetX509CertificateFromPEM(buffer);
+        if (!certificate) {
+          LOG(ERROR) << "Could not parse certificate " << name;
+          return false;
+        }
+
+        if (!CalculateSPKIHashFromCertificate(certificate.get(), &hash)) {
+          LOG(ERROR) << "Could not extract SPKI from certificate " << name;
+          return false;
+        }
+
+        if (!ExtractSubjectNameFromCertificate(certificate.get(),
+                                               &subject_name)) {
+          LOG(ERROR) << "Could not extract name from certificate " << name;
+          return false;
+        }
+
+        if (!MatchCertificateName(subject_name, name)) {
+          LOG(ERROR) << name << " is not a reasonable name for "
+                     << subject_name;
+          return false;
+        }
+
+        pinsets->RegisterSPKIHash(name, hash);
+        current_state = CertificateParserState::PRE_NAME;
+        break;
+      case CertificateParserState::IN_PUBLIC_KEY:
+        buffer += line.as_string() + '\n';
+        if (!base::StartsWith(line, kEndOfPublicKey, compare_mode)) {
+          continue;
+        }
+
+        if (!CalculateSPKIHashFromKey(buffer, &hash)) {
+          LOG(ERROR) << "Could not parse the public key for " << name;
+          return false;
+        }
+
+        pinsets->RegisterSPKIHash(name, hash);
+        current_state = CertificateParserState::PRE_NAME;
+        break;
+      default:
+        DCHECK(false) << "Unknown parser state";
+    }
+  }
+
+  return true;
+}
+
+bool ParseJSON(base::StringPiece json,
+               TransportSecurityStateEntries* entries,
+               Pinsets* pinsets,
+               DomainIDList* domain_ids) {
+  std::unique_ptr<base::Value> value = base::JSONReader::Read(json);
+  base::DictionaryValue* dict_value = nullptr;
+  if (!value.get() || !value->GetAsDictionary(&dict_value)) {
+    LOG(ERROR) << "Could not parse the input JSON file";
+    return false;
+  }
+
+  const base::ListValue* preload_entries = nullptr;
+  if (!dict_value->GetList("entries", &preload_entries)) {
+    LOG(ERROR) << "Could not parse the entries in the input JSON";
+    return false;
+  }
+
+  for (size_t i = 0; i < preload_entries->GetSize(); ++i) {
+    const base::DictionaryValue* parsed = nullptr;
+    if (!preload_entries->GetDictionary(i, &parsed)) {
+      LOG(ERROR) << "Could not parse entry " << base::SizeTToString(i)
+                 << " in the input JSON";
+      return false;
+    }
+
+    std::unique_ptr<TransportSecurityStateEntry> entry(
+        new TransportSecurityStateEntry());
+
+    if (!parsed->GetString("name", &entry->hostname)) {
+      LOG(ERROR) << "Could not extract the hostname for entry "
+                 << base::SizeTToString(i) << " from the input JSON";
+      return false;
+    }
+
+    parsed->GetBoolean("include_subdomains", &entry->include_subdomains);
+    std::string mode;
+    parsed->GetString("mode", &mode);
+    entry->force_https = (mode == "force-https");
+    parsed->GetBoolean("include_subdomains_for_pinning",
+                       &entry->hpkp_include_subdomains);
+    parsed->GetString("pins", &entry->pinset);
+    parsed->GetBoolean("expect_ct", &entry->expect_ct);
+    parsed->GetString("expect_ct_report_uri", &entry->expect_ct_report_uri);
+    parsed->GetBoolean("expect_staple", &entry->expect_staple);
+    parsed->GetBoolean("include_subdomains_for_expect_staple",
+                       &entry->expect_staple_include_subdomains);
+    parsed->GetString("expect_staple_report_uri",
+                      &entry->expect_staple_report_uri);
+
+    entries->push_back(std::move(entry));
+  }
+
+  const base::ListValue* pinsets_list = nullptr;
+  if (!dict_value->GetList("pinsets", &pinsets_list)) {
+    LOG(ERROR) << "Could not parse the pinsets in the input JSON";
+    return false;
+  }
+
+  for (size_t i = 0; i < pinsets_list->GetSize(); ++i) {
+    const base::DictionaryValue* parsed = nullptr;
+    if (!pinsets_list->GetDictionary(i, &parsed)) {
+      LOG(ERROR) << "Could not parse pinset " << base::SizeTToString(i)
+                 << " in the input JSON";
+      return false;
+    }
+
+    std::string name;
+    if (!parsed->GetString("name", &name)) {
+      LOG(ERROR) << "Could not extract the name for pinset "
+                 << base::SizeTToString(i) << " from the input JSON";
+      return false;
+    }
+
+    std::string report_uri;
+    parsed->GetString("report_uri", &report_uri);
+
+    std::unique_ptr<Pinset> pinset(new Pinset(name, report_uri));
+
+    const base::ListValue* pinset_static_hashes_list = nullptr;
+    if (parsed->GetList("static_spki_hashes", &pinset_static_hashes_list)) {
+      for (size_t i = 0; i < pinset_static_hashes_list->GetSize(); ++i) {
+        std::string hash;
+        pinset_static_hashes_list->GetString(i, &hash);
+        pinset->AddStaticSPKIHash(hash);
+      }
+    }
+
+    const base::ListValue* pinset_bad_static_hashes_list = nullptr;
+    if (parsed->GetList("bad_static_spki_hashes",
+                        &pinset_bad_static_hashes_list)) {
+      for (size_t i = 0; i < pinset_bad_static_hashes_list->GetSize(); ++i) {
+        std::string hash;
+        pinset_bad_static_hashes_list->GetString(i, &hash);
+        pinset->AddBadStaticSPKIHash(hash);
+      }
+    }
+
+    pinsets->RegisterPinset(std::move(pinset));
+  }
+
+  // TODO(Martijnc): Remove the domain IDs from the preload format.
+  // https://crbug.com/661206.
+  const base::ListValue* domain_ids_list = nullptr;
+  if (!dict_value->GetList("domain_ids", &domain_ids_list)) {
+    LOG(ERROR) << "Could not parse the domain IDs in the input JSON";
+    return false;
+  }
+
+  for (size_t i = 0; i < domain_ids_list->GetSize(); ++i) {
+    std::string domain;
+    domain_ids_list->GetString(i, &domain);
+    domain_ids->push_back(domain);
+  }
+
+  return true;
+}
+
+}  // namespace transport_security_state
+
+}  // namespace net
diff --git a/src/net/tools/transport_security_state_generator/input_file_parsers.h b/src/net/tools/transport_security_state_generator/input_file_parsers.h
new file mode 100644
index 0000000..4cacf38
--- /dev/null
+++ b/src/net/tools/transport_security_state_generator/input_file_parsers.h
@@ -0,0 +1,41 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
+#define NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
+
+#include <string>
+
+#include "base/strings/string_piece.h"
+#include "net/tools/transport_security_state_generator/transport_security_state_entry.h"
+
+namespace net {
+
+namespace transport_security_state {
+
+class Pinsets;
+
+// Extracts SPKI information from the preloaded pins file. The SPKI's can be
+// in the form of a PEM certificate, a PEM public key, or a BASE64 string.
+//
+// More info on the format can be found in
+// net/http/transport_security_state_static.pins
+bool ParseCertificatesFile(base::StringPiece certs_input, Pinsets* pinsets);
+
+// Parses the |json| string and copies the items under the "entries" key to
+// |entries|, the pinsets under the "pinsets" key to |pinsets|, and the domain
+// IDs under the "domain_ids" key to |domain_ids|.
+//
+// More info on the format can be found in
+// net/http/transport_security_state_static.json
+bool ParseJSON(base::StringPiece json,
+               TransportSecurityStateEntries* entries,
+               Pinsets* pinsets,
+               DomainIDList* domain_ids);
+
+}  // namespace transport_security_state
+
+}  // namespace net
+
+#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
diff --git a/src/net/tools/transport_security_state_generator/input_file_parsers_unittest.cc b/src/net/tools/transport_security_state_generator/input_file_parsers_unittest.cc
new file mode 100644
index 0000000..f53f076
--- /dev/null
+++ b/src/net/tools/transport_security_state_generator/input_file_parsers_unittest.cc
@@ -0,0 +1,369 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "net/tools/transport_security_state_generator/input_file_parsers.h"
+#include "net/tools/transport_security_state_generator/pinsets.h"
+#include "net/tools/transport_security_state_generator/transport_security_state_entry.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+namespace transport_security_state {
+
+namespace {
+
+// Test that all values are correctly parsed from a valid JSON input.
+TEST(InputFileParsersTest, ParseJSON) {
+  std::string valid =
+      "{"
+      "  \"pinsets\": [{"
+      "      \"name\": \"test\","
+      "      \"static_spki_hashes\": [\"TestSPKI\"],"
+      "      \"bad_static_spki_hashes\": [\"BadTestSPKI\"],"
+      "      \"report_uri\": \"https://hpkp-log.example.com\""
+      "  }],"
+      "  \"entries\": ["
+      "    {"
+      "      \"name\": \"hsts.example.com\","
+      "      \"mode\": \"force-https\", "
+      "      \"include_subdomains\": true"
+      "    }, {"
+      "      \"name\": \"hsts-no-subdomains.example.com\","
+      "      \"mode\": \"force-https\", "
+      "      \"include_subdomains\": false"
+      "    }, {"
+      "      \"name\": \"hpkp.example.com\","
+      "      \"pins\": \"thepinset\","
+      "      \"include_subdomains_for_pinning\": true"
+      "    }, {"
+      "      \"name\": \"hpkp-no-subdomains.example.com\","
+      "      \"pins\": \"thepinset2\", "
+      "      \"include_subdomains_for_pinning\": false"
+      "    }, {"
+      "      \"name\": \"expect-ct.example.com\","
+      "      \"expect_ct\": true,"
+      "      \"expect_ct_report_uri\": \"https://expect-ct-log.example.com\""
+      "    }, {"
+      "      \"name\": \"expect-staple.example.com\","
+      "      \"expect_staple\": true,"
+      "      \"expect_staple_report_uri\": "
+      "\"https://expect-staple-log.example.com\","
+      "      \"include_subdomains_for_expect_staple\": true"
+      "    }, {"
+      "      \"name\": \"expect-staple-no-subdomains.example.com\","
+      "      \"expect_staple\": true,"
+      "      \"include_subdomains_for_expect_staple\": false"
+      "    }"
+      "  ],"
+      "  \"domain_ids\": ["
+      "    \"NOT_PINNED\","
+      "    \"EXAMPLE_COM\""
+      "  ]"
+      "}";
+
+  TransportSecurityStateEntries entries;
+  Pinsets pinsets;
+  DomainIDList domain_ids;
+
+  EXPECT_TRUE(ParseJSON(valid, &entries, &pinsets, &domain_ids));
+
+  ASSERT_EQ(1U, pinsets.size());
+  PinsetMap::const_iterator pinset = pinsets.pinsets().find("test");
+  ASSERT_NE(pinset, pinsets.pinsets().cend());
+  EXPECT_EQ("test", pinset->second->name());
+  EXPECT_EQ("https://hpkp-log.example.com", pinset->second->report_uri());
+
+  ASSERT_EQ(1U, pinset->second->static_spki_hashes().size());
+  EXPECT_EQ("TestSPKI", pinset->second->static_spki_hashes()[0]);
+
+  ASSERT_EQ(1U, pinset->second->bad_static_spki_hashes().size());
+  EXPECT_EQ("BadTestSPKI", pinset->second->bad_static_spki_hashes()[0]);
+
+  ASSERT_EQ(7U, entries.size());
+  TransportSecurityStateEntry* entry = entries[0].get();
+  EXPECT_EQ("hsts.example.com", entry->hostname);
+  EXPECT_TRUE(entry->force_https);
+  EXPECT_TRUE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_FALSE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  entry = entries[1].get();
+  EXPECT_EQ("hsts-no-subdomains.example.com", entry->hostname);
+  EXPECT_TRUE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_FALSE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  entry = entries[2].get();
+  EXPECT_EQ("hpkp.example.com", entry->hostname);
+  EXPECT_FALSE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_TRUE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("thepinset", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_FALSE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  entry = entries[3].get();
+  EXPECT_EQ("hpkp-no-subdomains.example.com", entry->hostname);
+  EXPECT_FALSE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("thepinset2", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_FALSE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  entry = entries[4].get();
+  EXPECT_EQ("expect-ct.example.com", entry->hostname);
+  EXPECT_FALSE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("", entry->pinset);
+  EXPECT_TRUE(entry->expect_ct);
+  EXPECT_EQ("https://expect-ct-log.example.com", entry->expect_ct_report_uri);
+  EXPECT_FALSE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  entry = entries[5].get();
+  EXPECT_EQ("expect-staple.example.com", entry->hostname);
+  EXPECT_FALSE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_TRUE(entry->expect_staple);
+  EXPECT_TRUE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("https://expect-staple-log.example.com",
+            entry->expect_staple_report_uri);
+
+  entry = entries[6].get();
+  EXPECT_EQ("expect-staple-no-subdomains.example.com", entry->hostname);
+  EXPECT_FALSE(entry->force_https);
+  EXPECT_FALSE(entry->include_subdomains);
+  EXPECT_FALSE(entry->hpkp_include_subdomains);
+  EXPECT_EQ("", entry->pinset);
+  EXPECT_FALSE(entry->expect_ct);
+  EXPECT_EQ("", entry->expect_ct_report_uri);
+  EXPECT_TRUE(entry->expect_staple);
+  EXPECT_FALSE(entry->expect_staple_include_subdomains);
+  EXPECT_EQ("", entry->expect_staple_report_uri);
+
+  ASSERT_EQ(2U, domain_ids.size());
+  EXPECT_EQ("NOT_PINNED", domain_ids[0]);
+  EXPECT_EQ("EXAMPLE_COM", domain_ids[1]);
+}
+
+// Test that parsing valid JSON with missing keys fails.
+TEST(InputFileParsersTest, ParseJSONInvalid) {
+  TransportSecurityStateEntries entries;
+  Pinsets pinsets;
+  DomainIDList domain_ids;
+
+  std::string no_pinsets =
+      "{"
+      "  \"entries\": [],"
+      "  \"domain_ids\": []"
+      "}";
+
+  EXPECT_FALSE(ParseJSON(no_pinsets, &entries, &pinsets, &domain_ids));
+
+  std::string no_entries =
+      "{"
+      "  \"pinsets\": [],"
+      "  \"domain_ids\": []"
+      "}";
+
+  EXPECT_FALSE(ParseJSON(no_entries, &entries, &pinsets, &domain_ids));
+
+  std::string no_domain_ids =
+      "{"
+      "  \"pinsets\": [],"
+      "  \"entries\": []"
+      "}\n";
+
+  EXPECT_FALSE(ParseJSON(no_domain_ids, &entries, &pinsets, &domain_ids));
+
+  std::string missing_hostname =
+      "{"
+      "  \"pinsets\": [],"
+      "  \"entries\": ["
+      "    {"
+      "      \"mode\": \"force-https\""
+      "    }"
+      "  ],"
+      "  \"domain_ids\": []"
+      "}";
+
+  EXPECT_FALSE(ParseJSON(missing_hostname, &entries, &pinsets, &domain_ids));
+}
+
+// Test that parsing valid JSON with an invalid (HPKP) pinset fails.
+TEST(InputFileParsersTest, ParseJSONInvalidPinset) {
+  TransportSecurityStateEntries entries;
+  Pinsets pinsets;
+  DomainIDList domain_ids;
+
+  std::string missing_pinset_name =
+      "{"
+      "  \"pinsets\": [{"
+      "      \"static_spki_hashes\": [\"TestSPKI\"],"
+      "      \"bad_static_spki_hashes\": [\"BadTestSPKI\"],"
+      "      \"report_uri\": \"https://hpkp-log.example.com\""
+      "  }],"
+      "  \"entries\": [],"
+      "  \"domain_ids\": []"
+      "}";
+
+  EXPECT_FALSE(ParseJSON(missing_pinset_name, &entries, &pinsets, &domain_ids));
+}
+
+// Test parsing of all 3 SPKI formats.
+TEST(InputFileParsersTest, ParseCertificatesFile) {
+  std::string valid =
+      "# This line should ignored. The rest should result in 3 pins.\n"
+      "TestPublicKey1\n"
+      "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n"
+      "\n"
+      "TestPublicKey2\n"
+      "-----BEGIN PUBLIC KEY-----\n"
+      "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujzwcb5bJuC/A/Y9izGl\n"
+      "LlA3fnKGbeyn53BdVznJN4fQwU82WKVYdqt8d/1ZDRdYyhGrTgXJeCURe9VSJyX1\n"
+      "X2a5EApSFsopP8Yjy0Rl6dNOLO84KCW9dPmfHC3uP0ac4hnHT5dUr05YvhJmHCkf\n"
+      "as6v/aEgpPLDhRF6UruSUh+gIpUg/F3+vlD99HLfbloukoDtQyxW+86s9sO7RQ00\n"
+      "pd79VOoa/v09FvoS7MFgnBBOtvBQLOXjEH7/qBsnrXFtHBeOtxSLar/FL3OhVXuh\n"
+      "dUTRyc1Mg0ECtz8zHZugW+LleIm5Bf5Yr0bN1O/HfDPCkDaCldcm6xohEHn9pBaW\n"
+      "+wIDAQAB\n"
+      "-----END PUBLIC KEY-----\n"
+      "\n"
+      "# The 'Chromium' prefix is required here.\n"
+      "ChromiumTestCertificate3\n"
+      "-----BEGIN CERTIFICATE-----\n"
+      "MIIDeTCCAmGgAwIBAgIJAMRHXuiAgufAMA0GCSqGSIb3DQEBCwUAMFMxETAPBgNV\n"
+      "BAMMCENocm9taXVtMR4wHAYDVQQKDBVUaGUgQ2hyb21pdW0gUHJvamVjdHMxETAP\n"
+      "BgNVBAsMCFNlY3VyaXR5MQswCQYDVQQGEwJVUzAeFw0xNzAyMDExOTAyMzFaFw0x\n"
+      "ODAyMDExOTAyMzFaMFMxETAPBgNVBAMMCENocm9taXVtMR4wHAYDVQQKDBVUaGUg\n"
+      "Q2hyb21pdW0gUHJvamVjdHMxETAPBgNVBAsMCFNlY3VyaXR5MQswCQYDVQQGEwJV\n"
+      "UzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtggpf5vNVsmQrJKTQe\n"
+      "ynTeOzVOyROGDugGtR+Cri8WlNg1UAlIyYIS8txZ4oCknsT8gs3TFfu0wxmWNxx5\n"
+      "4oLGy2BQOHH00dgBAsKgqX//mY4mH5AZ85UFYni1hj9aszIJMIBWtgbNGVkppW65\n"
+      "8maF1KVdHmxXMvtKxn/9UsusH/A0ng5UJDYBPISQMv0XqIlv0wdVTIVWIcQhOjWz\n"
+      "MGwFDSjxS1WgEnPgd4Qi7MYaDbUTsXGtWba83vZJ8CQzjLumSJJCnz2aquGmraX0\n"
+      "J0joUjB4fuYL8xrbDqnFmADvozMMVkZ4843w8ikvJkM8nWoIXexVvirfXDoqtdUo\n"
+      "YOcCAwEAAaNQME4wHQYDVR0OBBYEFGJ6O/oLtzpb4OWvrEFxieYb1JbsMB8GA1Ud\n"
+      "IwQYMBaAFGJ6O/oLtzpb4OWvrEFxieYb1JbsMAwGA1UdEwQFMAMBAf8wDQYJKoZI\n"
+      "hvcNAQELBQADggEBAFpt9jlBT6OsfKFAJZnmExbW8JlsqXOJAaR+nD1XOnp6o+DM\n"
+      "NIguj9+wJOW34OM+2Om0n+KMYbDER0p4g3gxoaDblu7otgnC0OTOnx3DPUYab0jr\n"
+      "uT6O4C3/nfWW5sl3Ni3Y99dmdcqKcmYkHsr7uADLPWsjb+sfUrQQfHHnPwzyUz/A\n"
+      "w4rSJ0wxnLOmjk5F5YHMLkNpPrzFA1mFyGIau7THsRIr3B632MLNcOlNR21nOc7i\n"
+      "eB4u+OzpcZXuiQg3bqrNp6Xb70OIW1rfNEiCpps4UZyRnZ/nrzByxeHH5zPWWZk9\n"
+      "nZtxI+65PFOekOjBpbnRC8v1CfOmUSVKIqWaPys=\n"
+      "-----END CERTIFICATE-----";
+
+  Pinsets pinsets;
+  EXPECT_TRUE(ParseCertificatesFile(valid, &pinsets));
+  EXPECT_EQ(3U, pinsets.spki_size());
+
+  const SPKIHashMap& hashes = pinsets.spki_hashes();
+  EXPECT_NE(hashes.cend(), hashes.find("TestPublicKey1"));
+  EXPECT_NE(hashes.cend(), hashes.find("TestPublicKey2"));
+  EXPECT_NE(hashes.cend(), hashes.find("ChromiumTestCertificate3"));
+}
+
+TEST(InputFileParsersTest, ParseCertificatesFileInvalid) {
+  Pinsets pinsets;
+
+  std::string invalid =
+      "TestName\n"
+      "unexpected";
+  EXPECT_FALSE(ParseCertificatesFile(invalid, &pinsets));
+}
+
+// Test that parsing invalid certificate names fails.
+TEST(InputFileParsersTest, ParseCertificatesFileInvalidName) {
+  Pinsets pinsets;
+
+  std::string invalid_name_small_character =
+      "startsWithSmallLetter\n"
+      "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n";
+  EXPECT_FALSE(ParseCertificatesFile(invalid_name_small_character, &pinsets));
+
+  std::string invalid_name_invalid_characters =
+      "Invalid-Characters-In-Name\n"
+      "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n";
+  EXPECT_FALSE(
+      ParseCertificatesFile(invalid_name_invalid_characters, &pinsets));
+
+  std::string invalid_name_number =
+      "1InvalidName\n"
+      "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n";
+  EXPECT_FALSE(ParseCertificatesFile(invalid_name_number, &pinsets));
+
+  std::string invalid_name_space =
+      "Invalid Name\n"
+      "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n";
+  EXPECT_FALSE(ParseCertificatesFile(invalid_name_space, &pinsets));
+}
+
+// Test that parsing of a certificate with an incomplete or incorrect name
+// fails.
+TEST(InputFileParsersTest, ParseCertificatesFileInvalidCertificateName) {
+  Pinsets pinsets;
+  std::string certificate =
+      "-----BEGIN CERTIFICATE-----\n"
+      "MIIDIzCCAgugAwIBAgIJALs84KlxWh4GMA0GCSqGSIb3DQEBCwUAMCgxGTAXBgNV\n"
+      "BAoMEENocm9taXVtIENsYXNzIDMxCzAJBgNVBAsMAkcxMB4XDTE3MDIwMTE5NTUw\n"
+      "NVoXDTE4MDIwMTE5NTUwNVowKDEZMBcGA1UECgwQQ2hyb21pdW0gQ2xhc3MgMzEL\n"
+      "MAkGA1UECwwCRzEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkolrR\n"
+      "7gCPm22Cc9psS2Jh1mksVneee5ntEezZ2gEU20y9Z9URBReo8SFvaZcgKkAkca1v\n"
+      "552YIG+FBO/u8njxzlHXvuVJ5x2geciqqR4TRhA4jO1ndrNW6nlJfOoYueWbdym3\n"
+      "8zwugoULoCtyLyzdiMI5g8iVBQHDh8+K3TZIHar3HS49TjX5u5nv4igO4RfDcFUa\n"
+      "h8g+6x5nWoFF8oa3FG0YTN+q6iI1i2JHmj/q03fVPv3WLPGJ3JADau9gO1Lw1/qf\n"
+      "R/N3l4MVtjDFFGYzclfqW2UmL6zRirEV0GF2gwSBAGVX3WWhpOcM8rFIWYkZCsI5\n"
+      "iUdtwFNBfcKS9sNpAgMBAAGjUDBOMB0GA1UdDgQWBBTm4VJfibducqwb9h4XELn3\n"
+      "p6zLVzAfBgNVHSMEGDAWgBTm4VJfibducqwb9h4XELn3p6zLVzAMBgNVHRMEBTAD\n"
+      "AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQApTm40RfsZG20IIgWJ62pZ2end/lvaneTh\n"
+      "MZSgFnoTRjKkd/5dh22YyKPw9PnpIuiyi85L36COreqZUvbxqRQnpL1oSCRlLBJQ\n"
+      "2LcGlF0j0Opa+SY2VWup4XjnYF8CvwMl4obNpSuywTFmkXCRxzN23tn8whNHvWHM\n"
+      "BQ7abw8X1KY02uPbHucrpou6KXkKkhyhfML8OD8IRkSM56K6YyedqV97cmEdW0Ie\n"
+      "LlpFJQVX13bmojtSNI1zaiCiEenn5xLa/dAlyFT18Mq6y8plioBinVWFYd0qcRoA\n"
+      "E2j3m+jTVIv3CZ+ivGxggZQ8ZYN8FJ/iTW3pXGojogHh0NRJJ8dM\n"
+      "-----END CERTIFICATE-----";
+
+  std::string missing_prefix = "Class3_G1_Test\n" + certificate;
+  EXPECT_FALSE(ParseCertificatesFile(missing_prefix, &pinsets));
+
+  std::string missing_class = "Chromium_G1_Test\n" + certificate;
+  EXPECT_FALSE(ParseCertificatesFile(missing_class, &pinsets));
+
+  std::string missing_number = "Chromium_Class3_Test\n" + certificate;
+  EXPECT_FALSE(ParseCertificatesFile(missing_number, &pinsets));
+
+  std::string valid = "Chromium_Class3_G1_Test\n" + certificate;
+  EXPECT_TRUE(ParseCertificatesFile(valid, &pinsets));
+}
+
+}  // namespace
+
+}  // namespace transport_security_state
+
+}  // namespace net
diff --git a/src/net/tools/transport_security_state_generator/spki_hash.cc b/src/net/tools/transport_security_state_generator/spki_hash.cc
index a6986fc..e7914c3 100644
--- a/src/net/tools/transport_security_state_generator/spki_hash.cc
+++ b/src/net/tools/transport_security_state_generator/spki_hash.cc
@@ -19,8 +19,8 @@
 
 SPKIHash::~SPKIHash() {}
 
-bool SPKIHash::FromString(const std::string& hash_string) {
-  std::string base64_string;
+bool SPKIHash::FromString(base::StringPiece hash_string) {
+  base::StringPiece base64_string;
 
   if (!base::StartsWith(hash_string, "sha256/",
                         base::CompareCase::INSENSITIVE_ASCII)) {
diff --git a/src/net/tools/transport_security_state_generator/spki_hash.h b/src/net/tools/transport_security_state_generator/spki_hash.h
index c65313c..20de8fe 100644
--- a/src/net/tools/transport_security_state_generator/spki_hash.h
+++ b/src/net/tools/transport_security_state_generator/spki_hash.h
@@ -9,6 +9,8 @@
 #include <string>
 #include <vector>
 
+#include "base/strings/string_piece.h"
+
 namespace net {
 
 namespace transport_security_state {
@@ -24,7 +26,7 @@
   // SPKI hashes are SHA256. Other algorithms are not supported. Returns true
   // on success and copies the decoded bytes to |data_|. Returns false on
   // failure.
-  bool FromString(const std::string& hash_string);
+  bool FromString(base::StringPiece hash_string);
 
   // Calculates the SHA256 digest over |*input| and copies the result to
   // |data_|.
diff --git a/src/net/tools/transport_security_state_generator/transport_security_state_generator.cc b/src/net/tools/transport_security_state_generator/transport_security_state_generator.cc
index 4e93a49..4aec52d 100644
--- a/src/net/tools/transport_security_state_generator/transport_security_state_generator.cc
+++ b/src/net/tools/transport_security_state_generator/transport_security_state_generator.cc
@@ -11,31 +11,19 @@
 
 #include "base/command_line.h"
 #include "base/files/file_util.h"
-#include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/path_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_piece.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
 #include "crypto/openssl_util.h"
-#include "net/tools/transport_security_state_generator/cert_util.h"
-#include "net/tools/transport_security_state_generator/pinset.h"
+#include "net/tools/transport_security_state_generator/input_file_parsers.h"
 #include "net/tools/transport_security_state_generator/pinsets.h"
 #include "net/tools/transport_security_state_generator/preloaded_state_generator.h"
-#include "net/tools/transport_security_state_generator/spki_hash.h"
 #include "net/tools/transport_security_state_generator/transport_security_state_entry.h"
-#include "third_party/boringssl/src/include/openssl/x509v3.h"
 
-using net::transport_security_state::TransportSecurityStateEntry;
 using net::transport_security_state::TransportSecurityStateEntries;
-using net::transport_security_state::Pinset;
 using net::transport_security_state::Pinsets;
 using net::transport_security_state::PreloadedStateGenerator;
 using net::transport_security_state::DomainIDList;
-using net::transport_security_state::SPKIHash;
 
 namespace {
 
@@ -45,377 +33,6 @@
             << " <template-file> <output-file> [--v=1]" << std::endl;
 }
 
-// Parses the |json| string and copies the items under the "entries" key to
-// |entries|, the pinsets under the "pinsets" key to |pinsets|, and the domain
-// IDs under the "domain_ids" key to |domain_ids|.
-//
-// More info on the format can be found in
-// net/http/transport_security_state_static.json
-bool ParseJSON(const std::string& json,
-               TransportSecurityStateEntries* entries,
-               Pinsets* pinsets,
-               DomainIDList* domain_ids) {
-  std::unique_ptr<base::Value> value = base::JSONReader::Read(json);
-  base::DictionaryValue* dict_value = nullptr;
-  if (!value.get() || !value->GetAsDictionary(&dict_value)) {
-    LOG(ERROR) << "Could not parse the input JSON file";
-    return false;
-  }
-
-  const base::ListValue* preload_entries = nullptr;
-  if (!dict_value->GetList("entries", &preload_entries)) {
-    LOG(ERROR) << "Could not parse the entries in the input JSON";
-    return false;
-  }
-
-  for (size_t i = 0; i < preload_entries->GetSize(); ++i) {
-    const base::DictionaryValue* parsed = nullptr;
-    if (!preload_entries->GetDictionary(i, &parsed)) {
-      LOG(ERROR) << "Could not parse entry " << base::SizeTToString(i)
-                 << " in the input JSON";
-      return false;
-    }
-
-    std::unique_ptr<TransportSecurityStateEntry> entry(
-        new TransportSecurityStateEntry());
-
-    if (!parsed->GetString("name", &entry->hostname)) {
-      LOG(ERROR) << "Could not extract the hostname for entry "
-                 << base::SizeTToString(i) << " from the input JSON";
-      return false;
-    }
-
-    parsed->GetBoolean("include_subdomains", &entry->include_subdomains);
-    std::string mode;
-    parsed->GetString("mode", &mode);
-    entry->force_https = (mode == "force-https");
-    parsed->GetBoolean("include_subdomains_for_pinning",
-                       &entry->hpkp_include_subdomains);
-    parsed->GetString("pins", &entry->pinset);
-    parsed->GetBoolean("expect_ct", &entry->expect_ct);
-    parsed->GetString("expect_ct_report_uri", &entry->expect_ct_report_uri);
-    parsed->GetBoolean("expect_staple", &entry->expect_staple);
-    parsed->GetBoolean("include_subdomains_for_expect_staple",
-                       &entry->expect_staple_include_subdomains);
-    parsed->GetString("expect_staple_report_uri",
-                      &entry->expect_staple_report_uri);
-
-    entries->push_back(std::move(entry));
-  }
-
-  const base::ListValue* pinsets_list = nullptr;
-  if (!dict_value->GetList("pinsets", &pinsets_list)) {
-    LOG(ERROR) << "Could not parse the pinsets in the input JSON";
-    return false;
-  }
-
-  for (size_t i = 0; i < pinsets_list->GetSize(); ++i) {
-    const base::DictionaryValue* parsed = nullptr;
-    if (!pinsets_list->GetDictionary(i, &parsed)) {
-      LOG(ERROR) << "Could not parse pinset " << base::SizeTToString(i)
-                 << " in the input JSON";
-      return false;
-    }
-
-    std::string name;
-    if (!parsed->GetString("name", &name)) {
-      LOG(ERROR) << "Could not extract the name for pinset "
-                 << base::SizeTToString(i) << " from the input JSON";
-      return false;
-    }
-
-    std::string report_uri;
-    parsed->GetString("report_uri", &report_uri);
-
-    std::unique_ptr<Pinset> pinset(new Pinset(name, report_uri));
-
-    const base::ListValue* pinset_static_hashes_list = nullptr;
-    if (parsed->GetList("static_spki_hashes", &pinset_static_hashes_list)) {
-      for (size_t i = 0; i < pinset_static_hashes_list->GetSize(); ++i) {
-        std::string hash;
-        pinset_static_hashes_list->GetString(i, &hash);
-        pinset->AddStaticSPKIHash(hash);
-      }
-    }
-
-    const base::ListValue* pinset_bad_static_hashes_list = nullptr;
-    if (parsed->GetList("bad_static_spki_hashes",
-                        &pinset_bad_static_hashes_list)) {
-      for (size_t i = 0; i < pinset_bad_static_hashes_list->GetSize(); ++i) {
-        std::string hash;
-        pinset_bad_static_hashes_list->GetString(i, &hash);
-        pinset->AddBadStaticSPKIHash(hash);
-      }
-    }
-
-    pinsets->RegisterPinset(std::move(pinset));
-  }
-
-  // TODO(Martijnc): Remove the domain IDs from the preload format.
-  // https://crbug.com/661206.
-  const base::ListValue* domain_ids_list = nullptr;
-  if (!dict_value->GetList("domain_ids", &domain_ids_list)) {
-    LOG(ERROR) << "Could not parse the domain IDs in the input JSON";
-    return false;
-  }
-
-  for (size_t i = 0; i < domain_ids_list->GetSize(); ++i) {
-    std::string domain;
-    domain_ids_list->GetString(i, &domain);
-    domain_ids->push_back(domain);
-  }
-
-  return true;
-}
-
-bool IsImportantWordInCertificateName(base::StringPiece name) {
-  const char* const important_words[] = {"Universal", "Global", "EV", "G1",
-                                         "G2",        "G3",     "G4", "G5"};
-  for (auto* important_word : important_words) {
-    if (name == important_word) {
-      return true;
-    }
-  }
-  return false;
-}
-
-// Strips all characters not matched by the RegEx [A-Za-z0-9_] from |name| and
-// returns the result.
-std::string FilterName(base::StringPiece name) {
-  std::string filtered;
-  for (const char& character : name) {
-    if ((character >= '0' && character <= '9') ||
-        (character >= 'a' && character <= 'z') ||
-        (character >= 'A' && character <= 'Z') || character == '_') {
-      filtered += character;
-    }
-  }
-  return base::ToLowerASCII(filtered);
-}
-
-// Returns true if |pin_name| is a reasonable match for the certificate name
-// |name|.
-bool MatchCertificateName(base::StringPiece name, base::StringPiece pin_name) {
-  std::vector<base::StringPiece> words = base::SplitStringPiece(
-      name, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-  if (words.empty()) {
-    LOG(ERROR) << "No words in certificate name for pin "
-               << pin_name.as_string();
-    return false;
-  }
-  base::StringPiece first_word = words[0];
-
-  if (first_word.ends_with(",")) {
-    first_word = first_word.substr(0, first_word.size() - 1);
-  }
-
-  if (first_word.starts_with("*.")) {
-    first_word = first_word.substr(2, first_word.size() - 2);
-  }
-
-  size_t pos = first_word.find('.');
-  if (pos != std::string::npos) {
-    first_word = first_word.substr(0, first_word.size() - pos);
-  }
-
-  pos = first_word.find('-');
-  if (pos != std::string::npos) {
-    first_word = first_word.substr(0, first_word.size() - pos);
-  }
-
-  if (first_word.empty()) {
-    LOG(ERROR) << "First word of certificate name (" << name.as_string()
-               << ") is empty";
-    return false;
-  }
-
-  std::string filtered_word = FilterName(first_word);
-  first_word = filtered_word;
-  if (!base::EqualsCaseInsensitiveASCII(pin_name.substr(0, first_word.size()),
-                                        first_word)) {
-    LOG(ERROR) << "The first word of the certificate name ("
-               << first_word.as_string()
-               << ") isn't a prefix of the variable name ("
-               << pin_name.as_string() << ")";
-    return false;
-  }
-
-  for (size_t i = 0; i < words.size(); ++i) {
-    const base::StringPiece& word = words[i];
-    if (word == "Class" && (i + 1) < words.size()) {
-      std::string class_name = word.as_string();
-      words[i + 1].AppendToString(&class_name);
-
-      size_t pos = pin_name.find(class_name);
-      if (pos == std::string::npos) {
-        LOG(ERROR)
-            << "Certficate class specification doesn't appear in the variable "
-               "name ("
-            << pin_name.as_string() << ")";
-        return false;
-      }
-    } else if (word.size() == 1 && word[0] >= '0' && word[0] <= '9') {
-      size_t pos = pin_name.find(word);
-      if (pos == std::string::npos) {
-        LOG(ERROR) << "Number doesn't appear in the certificate variable name ("
-                   << pin_name.as_string() << ")";
-        return false;
-      }
-    } else if (IsImportantWordInCertificateName(word)) {
-      size_t pos = pin_name.find(word);
-      if (pos == std::string::npos) {
-        LOG(ERROR) << word.as_string() +
-                          " doesn't appear in the certificate variable name ("
-                   << pin_name.as_string() << ")";
-        return false;
-      }
-    }
-  }
-
-  return true;
-}
-
-// Returns true iff |candidate| is not empty, the first character is in the
-// range A-Z, and the remaining characters are in the ranges a-Z, 0-9, or '_'.
-bool IsValidName(const std::string& candidate) {
-  if (candidate.empty() || candidate[0] < 'A' || candidate[0] > 'Z') {
-    return false;
-  }
-
-  bool isValid = true;
-  for (const char& character : candidate) {
-    isValid = (character >= '0' && character <= '9') ||
-              (character >= 'a' && character <= 'z') ||
-              (character >= 'A' && character <= 'Z') || character == '_';
-    if (!isValid) {
-      return false;
-    }
-  }
-  return true;
-}
-
-static const char kStartOfCert[] = "-----BEGIN CERTIFICATE";
-static const char kStartOfPublicKey[] = "-----BEGIN PUBLIC KEY";
-static const char kEndOfCert[] = "-----END CERTIFICATE";
-static const char kEndOfPublicKey[] = "-----END PUBLIC KEY";
-static const char kStartOfSHA256[] = "sha256/";
-
-enum class CertificateParserState {
-  PRE_NAME,
-  POST_NAME,
-  IN_CERTIFICATE,
-  IN_PUBLIC_KEY
-};
-
-// Extracts SPKI information from the preloaded pins file. The SPKI's can be
-// in the form of a PEM certificate, a PEM public key, or a BASE64 string.
-//
-// More info on the format can be found in
-// net/http/transport_security_state_static.pins
-bool ParseCertificatesFile(const std::string& certs_input, Pinsets* pinsets) {
-  std::istringstream input_stream(certs_input);
-  std::string line;
-  CertificateParserState current_state = CertificateParserState::PRE_NAME;
-
-  const base::CompareCase& compare_mode = base::CompareCase::INSENSITIVE_ASCII;
-  std::string name;
-  std::string buffer;
-  std::string subject_name;
-  bssl::UniquePtr<X509> certificate;
-  SPKIHash hash;
-
-  for (std::string line; std::getline(input_stream, line);) {
-    if (line[0] == '#') {
-      continue;
-    }
-
-    if (line.empty() && current_state == CertificateParserState::PRE_NAME) {
-      continue;
-    }
-
-    switch (current_state) {
-      case CertificateParserState::PRE_NAME:
-        if (!IsValidName(line)) {
-          LOG(ERROR) << "Invalid name in pins file: " << line;
-          return false;
-        }
-        name = line;
-        current_state = CertificateParserState::POST_NAME;
-        break;
-      case CertificateParserState::POST_NAME:
-        if (base::StartsWith(line, kStartOfSHA256, compare_mode)) {
-          if (!hash.FromString(line)) {
-            LOG(ERROR) << "Invalid hash value in pins file for " << name;
-            return false;
-          }
-
-          pinsets->RegisterSPKIHash(name, hash);
-          current_state = CertificateParserState::PRE_NAME;
-        } else if (base::StartsWith(line, kStartOfCert, compare_mode)) {
-          buffer = line + '\n';
-          current_state = CertificateParserState::IN_CERTIFICATE;
-        } else if (base::StartsWith(line, kStartOfPublicKey, compare_mode)) {
-          buffer = line + '\n';
-          current_state = CertificateParserState::IN_PUBLIC_KEY;
-        } else {
-          LOG(ERROR) << "Invalid value in pins file for " << name;
-          return false;
-        }
-        break;
-      case CertificateParserState::IN_CERTIFICATE:
-        buffer += line + '\n';
-        if (!base::StartsWith(line, kEndOfCert, compare_mode)) {
-          continue;
-        }
-
-        certificate = GetX509CertificateFromPEM(buffer);
-        if (!certificate) {
-          LOG(ERROR) << "Could not parse certificate " << name;
-          return false;
-        }
-
-        if (!CalculateSPKIHashFromCertificate(certificate.get(), &hash)) {
-          LOG(ERROR) << "Could not extract SPKI from certificate " << name;
-          return false;
-        }
-
-        if (!ExtractSubjectNameFromCertificate(certificate.get(),
-                                               &subject_name)) {
-          LOG(ERROR) << "Could not extract name from certificate " << name;
-          return false;
-        }
-
-        if (!MatchCertificateName(subject_name, name)) {
-          LOG(ERROR) << name << " is not a reasonable name for "
-                     << subject_name;
-          return false;
-        }
-
-        pinsets->RegisterSPKIHash(name, hash);
-        current_state = CertificateParserState::PRE_NAME;
-        break;
-      case CertificateParserState::IN_PUBLIC_KEY:
-        buffer += line + '\n';
-        if (!base::StartsWith(line, kEndOfPublicKey, compare_mode)) {
-          continue;
-        }
-
-        if (!CalculateSPKIHashFromKey(buffer, &hash)) {
-          LOG(ERROR) << "Could not parse the public key for " << name;
-          return false;
-        }
-
-        pinsets->RegisterSPKIHash(name, hash);
-        current_state = CertificateParserState::PRE_NAME;
-        break;
-      default:
-        DCHECK(false) << "Unknown parser state";
-    }
-  }
-
-  return true;
-}
-
 // Checks if there are pins with the same name or the same hash.
 bool CheckForDuplicatePins(const Pinsets& pinsets) {
   std::set<std::string> seen_names;
diff --git a/src/net/url_request/url_request_http_job.cc b/src/net/url_request/url_request_http_job.cc
index b3053b2..4db9ec1 100644
--- a/src/net/url_request/url_request_http_job.cc
+++ b/src/net/url_request/url_request_http_job.cc
@@ -76,12 +76,6 @@
 
 namespace {
 
-const char kDeflate[] = "deflate";
-const char kGZip[] = "gzip";
-const char kSdch[] = "sdch";
-const char kXGZip[] = "x-gzip";
-const char kBrotli[] = "br";
-
 // True if the request method is "safe" (per section 4.2.1 of RFC 7231).
 bool IsMethodSafe(const std::string& method) {
   return method == "GET" || method == "HEAD" || method == "OPTIONS" ||
@@ -1064,22 +1058,31 @@
   std::vector<SourceStream::SourceType> types;
   size_t iter = 0;
   while (headers->EnumerateHeader(&iter, "Content-Encoding", &type)) {
-    if (base::LowerCaseEqualsASCII(type, kBrotli)) {
-      types.push_back(SourceStream::TYPE_BROTLI);
-    } else if (base::LowerCaseEqualsASCII(type, kDeflate)) {
-      types.push_back(SourceStream::TYPE_DEFLATE);
-    } else if (base::LowerCaseEqualsASCII(type, kGZip) ||
-               base::LowerCaseEqualsASCII(type, kXGZip)) {
-      types.push_back(SourceStream::TYPE_GZIP);
-    } else if (base::LowerCaseEqualsASCII(type, kSdch)) {
+    SourceStream::SourceType source_type =
+        FilterSourceStream::ParseEncodingType(type);
+    if (source_type == SourceStream::TYPE_SDCH &&
+        !request()->context()->sdch_manager()) {
       // If SDCH support is not configured, pass through raw response.
-      if (!request()->context()->sdch_manager())
-        return upstream;
-      types.push_back(SourceStream::TYPE_SDCH);
-    } else {
-      // Unknown encoding type. Pass through raw response body.
       return upstream;
     }
+    switch (source_type) {
+      case SourceStream::TYPE_BROTLI:
+      case SourceStream::TYPE_DEFLATE:
+      case SourceStream::TYPE_GZIP:
+      case SourceStream::TYPE_SDCH:
+        types.push_back(source_type);
+        break;
+      case SourceStream::TYPE_NONE:
+        // Identity encoding type. Pass through raw response body.
+        return upstream;
+      default:
+        // Unknown encoding type. Pass through raw response body.
+        // Despite of reporting to UMA, request will not be canceled; though
+        // it is expected that user will see malformed / garbage response.
+        FilterSourceStream::ReportContentDecodingFailed(
+            FilterSourceStream::TYPE_UNKNOWN);
+        return upstream;
+    }
   }
 
   // Sdch specific hacks:
@@ -1119,6 +1122,8 @@
         break;
       case SourceStream::TYPE_NONE:
       case SourceStream::TYPE_INVALID:
+      case SourceStream::TYPE_REJECTED:
+      case SourceStream::TYPE_UNKNOWN:
       case SourceStream::TYPE_MAX:
         NOTREACHED();
         return nullptr;
diff --git a/src/net/url_request/url_request_http_job_unittest.cc b/src/net/url_request/url_request_http_job_unittest.cc
index 0519f2e..ec26ab8 100644
--- a/src/net/url_request/url_request_http_job_unittest.cc
+++ b/src/net/url_request/url_request_http_job_unittest.cc
@@ -190,9 +190,7 @@
   request->Start();
 
   base::RunLoop().Run();
-  // Pass through the raw response the same way as if received unknown encoding.
-  EXPECT_EQ(OK, delegate_.request_status());
-  EXPECT_EQ("Test Content", delegate_.data_received());
+  EXPECT_EQ(ERR_CONTENT_DECODING_FAILED, delegate_.request_status());
 }
 
 class URLRequestHttpJobTest : public ::testing::Test {
diff --git a/src/testing/OWNERS b/src/testing/OWNERS
index d048dc6..43dc478 100644
--- a/src/testing/OWNERS
+++ b/src/testing/OWNERS
@@ -1,2 +1,9 @@
 phajdan.jr@chromium.org
 dpranke@chromium.org
+
+# These aren't actually great contact points for this directory, but
+# changes in this directory are rare and most changes happen in better-owned
+# subdirectories.
+#
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/src/testing/android/proguard_for_test.flags b/src/testing/android/proguard_for_test.flags
index 51f1428..45895d0 100644
--- a/src/testing/android/proguard_for_test.flags
+++ b/src/testing/android/proguard_for_test.flags
@@ -23,17 +23,6 @@
     *;
 }
 
-# TODO(yfriedman): Remove when crbug.com/488192 is fixed.
--dontwarn org.apache.http.conn.scheme.LayeredSocketFactory
-
 # We have some "library class WebView depends on program class SslCertificate"
 # warnings, and they don't affect us.
 -dontwarn android.webkit.WebView*
-
-# We don't want BasicHttpParams or AbstractHttpParams to get renamed since that
-# then makes our calls to them use the implementation that we find in our .dex
-# file, which is broken. We need to rely on these calls resolving to the
-# system's implementation. See crbug.com/488192#c36.
--keepnames class org.apache.** {
-  *;
-}
diff --git a/src/testing/buildbot/OWNERS b/src/testing/buildbot/OWNERS
index 5a13552..65cae27 100644
--- a/src/testing/buildbot/OWNERS
+++ b/src/testing/buildbot/OWNERS
@@ -9,7 +9,6 @@
 maruel@chromium.org
 phajdan.jr@chromium.org
 sky@chromium.org
-stip@chromium.org
 tansell@chromium.org
 thakis@chromium.org
 
@@ -31,4 +30,5 @@
 per-file chromium.webrtc.json=kjellander@chromium.org
 per-file chromium.webrtc.fyi.json=kjellander@chromium.org
 
-# COMPONENT: Infra>Client
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
diff --git a/src/testing/buildbot/chromium.android.fyi.json b/src/testing/buildbot/chromium.android.fyi.json
index 925cc5c..6df5157 100644
--- a/src/testing/buildbot/chromium.android.fyi.json
+++ b/src/testing/buildbot/chromium.android.fyi.json
@@ -238,6 +238,7 @@
               "device_type": "sprout"
             }
           ],
+          "expiration": 14400,
           "shards": 2
         },
         "test": "android_webview_test_apk"
@@ -252,7 +253,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "android_webview_unittests"
       },
@@ -266,7 +268,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "base_unittests"
       },
@@ -280,7 +283,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "blink_heap_unittests"
       },
@@ -294,7 +298,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "breakpad_unittests"
       },
@@ -308,7 +313,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "capture_unittests"
       },
@@ -322,7 +328,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "cc_unittests"
       },
@@ -340,7 +347,8 @@
               "device_type": "sprout"
             }
           ],
-          "shards": 3
+          "expiration": 14400,
+          "shards": 6
         },
         "test": "chrome_public_test_apk"
       },
@@ -358,7 +366,7 @@
               "device_type": "sprout"
             }
           ],
-          "shards": 2
+          "expiration": 14400
         },
         "test": "chrome_sync_shell_test_apk"
       },
@@ -372,7 +380,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "components_browsertests"
       },
@@ -386,7 +395,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "components_unittests"
       },
@@ -400,7 +410,9 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400,
+          "shards": 4
         },
         "test": "content_browsertests"
       },
@@ -418,7 +430,7 @@
               "device_type": "sprout"
             }
           ],
-          "shards": 2
+          "expiration": 14400
         },
         "test": "content_shell_test_apk"
       },
@@ -432,7 +444,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "content_unittests"
       },
@@ -446,7 +459,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "device_unittests"
       },
@@ -460,7 +474,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "events_unittests"
       },
@@ -474,7 +489,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gl_tests"
       },
@@ -488,7 +504,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gl_unittests"
       },
@@ -502,7 +519,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gpu_ipc_service_unittests"
       },
@@ -516,7 +534,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "gpu_unittests"
       },
@@ -530,7 +549,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ipc_tests"
       },
@@ -544,7 +564,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "media_unittests"
       },
@@ -558,7 +579,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "net_unittests"
       },
@@ -572,7 +594,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "sandbox_linux_unittests"
       },
@@ -586,7 +609,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "sql_unittests"
       },
@@ -600,7 +624,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "storage_unittests"
       },
@@ -614,7 +639,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_android_unittests"
       },
@@ -628,7 +654,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_base_unittests"
       },
@@ -642,7 +669,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "ui_touch_selection_unittests"
       },
@@ -656,7 +684,8 @@
               "device_os": "LMY47W",
               "device_type": "sprout"
             }
-          ]
+          ],
+          "expiration": 14400
         },
         "test": "unit_tests"
       }
diff --git a/src/testing/buildbot/chromium.fyi.json b/src/testing/buildbot/chromium.fyi.json
index ab62c37..76ccdd7 100644
--- a/src/testing/buildbot/chromium.fyi.json
+++ b/src/testing/buildbot/chromium.fyi.json
@@ -224,8 +224,7 @@
       {
         "args": [
           "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--strict-mode=off"
+          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
         ],
         "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-kitkat",
         "override_compile_targets": [
@@ -248,8 +247,7 @@
       {
         "args": [
           "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--strict-mode=off"
+          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
         ],
         "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-lollipop",
         "override_compile_targets": [
@@ -272,8 +270,7 @@
       {
         "args": [
           "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--strict-mode=off"
+          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
         ],
         "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-marshmallow",
         "override_compile_targets": [
@@ -304,8 +301,7 @@
       {
         "args": [
           "--shared-prefs-file=src/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--strict-mode=off"
+          "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
         ],
         "test": "chrome_public_test_vr_apk"
       },
@@ -313,8 +309,7 @@
         "args": [
           "--shared-prefs-file=src/chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json",
           "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
-          "--additional-apk=src/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk",
-          "--strict-mode=off"
+          "--additional-apk=src/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk"
         ],
         "test": "chrome_public_test_vr_apk"
       }
@@ -11790,6 +11785,16 @@
     "gtest_tests": [
       {
         "args": [
+          "--mus",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/ash_mus_unittests.filter"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "ash_mus_unittests"
+      },
+      {
+        "args": [
           "--override-use-software-gl-for-tests",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.browser_tests.filter"
         ],
diff --git a/src/testing/buildbot/chromium.gpu.fyi.json b/src/testing/buildbot/chromium.gpu.fyi.json
index 3b9f96e..8d6eaaa 100644
--- a/src/testing/buildbot/chromium.gpu.fyi.json
+++ b/src/testing/buildbot/chromium.gpu.fyi.json
@@ -1,6 +1,390 @@
 {
   "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
   "AAAAA2 See generate_buildbot_json.py to make changes": {},
+  "Android Release (NVIDIA Shield TV)": {
+    "gtest_tests": [
+      {
+        "override_isolate_target": "angle_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "angle_end2end_tests",
+        "use_xvfb": false
+      },
+      {
+        "override_isolate_target": "angle_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "angle_unittests",
+        "use_xvfb": false
+      },
+      {
+        "override_isolate_target": "gl_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gl_tests",
+        "use_xvfb": false
+      },
+      {
+        "override_isolate_target": "gl_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gl_unittests",
+        "use_xvfb": false
+      }
+    ],
+    "isolated_scripts": [
+      {
+        "args": [
+          "context_lost",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "context_lost_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "depth_capture_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "gpu_process_launch_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "hardware_accelerated_feature_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--expected-vendor-id",
+          "0000",
+          "--expected-device-id",
+          "0000"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "info_collection_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--os-type",
+          "android",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "maps_pixel_test",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--refimg-cloud-storage-bucket",
+          "chromium-gpu-archive/reference-images",
+          "--os-type",
+          "android",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "pixel_test",
+        "non_precommit_args": [
+          "--upload-refimg-to-cloud-storage"
+        ],
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "precommit_args": [
+          "--download-refimg-from-cloud-storage"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "screenshot_sync_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "trace_test",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=android-chromium",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "webgl_conformance_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "0000:0000",
+              "os": "Android"
+            }
+          ]
+        }
+      }
+    ]
+  },
   "Android Release (Nexus 5)": {
     "gtest_tests": [
       {
@@ -393,6 +777,43 @@
         "use_xvfb": false
       },
       {
+        "args": [
+          "--enable-xml-result-parsing",
+          "--shard-timeout=300"
+        ],
+        "name": "angle_deqp_gles3_gles_tests",
+        "override_isolate_target": "angle_deqp_gles3_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
+              "location": "bin",
+              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "device_os": "M",
+              "device_type": "bullhead",
+              "os": "Android"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "angle_deqp_gles3_tests",
+        "use_xvfb": false
+      },
+      {
         "override_isolate_target": "angle_end2end_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -3764,462 +4185,6 @@
       }
     ]
   },
-  "Linux Release (Intel Graphics Stack)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "angle_end2end_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "angle_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "audio_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": false
-        },
-        "test": "browser_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gl_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests",
-        "use_xvfb": false
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "context_lost_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "depth_capture_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "gpu_process_launch_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "hardware_accelerated_feature_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "8086",
-          "--expected-device-id",
-          "041a"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "info_collection_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--os-type",
-          "linux",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "maps_pixel_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--refimg-cloud-storage-bucket",
-          "chromium-gpu-archive/reference-images",
-          "--os-type",
-          "linux",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "pixel_test",
-        "non_precommit_args": [
-          "--upload-refimg-to-cloud-storage"
-        ],
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "precommit_args": [
-          "--download-refimg-from-cloud-storage"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "screenshot_sync_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "trace_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ],
-          "shards": 15
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      }
-    ]
-  },
   "Linux Release (Intel HD 530)": {
     "gtest_tests": [
       {
@@ -4702,462 +4667,6 @@
       }
     ]
   },
-  "Linux Release (NVIDIA GeForce 730)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "angle_end2end_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "angle_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "audio_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": false
-        },
-        "test": "browser_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gl_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests",
-        "use_xvfb": false
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "context_lost_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "depth_capture_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "gpu_process_launch_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "hardware_accelerated_feature_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "10de",
-          "--expected-device-id",
-          "0f02"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "info_collection_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--os-type",
-          "linux",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "maps_pixel_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--refimg-cloud-storage-bucket",
-          "chromium-gpu-archive/reference-images",
-          "--os-type",
-          "linux",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "pixel_test",
-        "non_precommit_args": [
-          "--upload-refimg-to-cloud-storage"
-        ],
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "precommit_args": [
-          "--download-refimg-from-cloud-storage"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "screenshot_sync_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "trace_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ],
-          "shards": 15
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      }
-    ]
-  },
   "Linux Release (NVIDIA Quadro P400)": {
     "gtest_tests": [
       {
@@ -6288,6 +5797,19 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -7564,6 +7086,24 @@
         "use_xvfb": false
       },
       {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12"
+            },
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
+      },
+      {
         "override_compile_targets": [
           "tab_capture_end2end_tests_run"
         ],
@@ -7992,6 +7532,19 @@
         },
         "test": "gles2_conform_test",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "1002:679e",
+              "os": "Mac-10.10"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -8766,6 +8319,19 @@
         "use_xvfb": false
       },
       {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
+      },
+      {
         "override_compile_targets": [
           "tab_capture_end2end_tests_run"
         ],
@@ -9188,6 +8754,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -9580,6 +9160,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -9974,6 +9568,20 @@
         "use_xvfb": false
       },
       {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
+      },
+      {
         "override_compile_targets": [
           "tab_capture_end2end_tests_run"
         ],
@@ -10410,6 +10018,20 @@
         "use_xvfb": false
       },
       {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
+      },
+      {
         "override_compile_targets": [
           "tab_capture_end2end_tests_run"
         ],
@@ -10958,6 +10580,19 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -11070,6 +10705,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -11181,6 +10830,19 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -11293,6 +10955,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -11407,6 +11083,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -11521,6 +11211,20 @@
         },
         "test": "service_unittests",
         "use_xvfb": false
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "use_xvfb": false
       }
     ],
     "isolated_scripts": [
@@ -16880,1081 +16584,6 @@
       }
     ]
   },
-  "Win7 Release (Intel)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_end2end_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_white_box_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "audio_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": false
-        },
-        "test": "browser_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=d3d9"
-        ],
-        "name": "gles2_conform_d3d9_test",
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=gl",
-          "--disable-gpu-sandbox"
-        ],
-        "name": "gles2_conform_gl_test",
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest",
-        "use_xvfb": false
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "context_lost_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "depth_capture_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "gpu_process_launch_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "hardware_accelerated_feature_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "8086",
-          "--expected-device-id",
-          "041a"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "info_collection_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "maps_pixel_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--refimg-cloud-storage-bucket",
-          "chromium-gpu-archive/reference-images",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "pixel_test",
-        "non_precommit_args": [
-          "--upload-refimg-to-cloud-storage"
-        ],
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "precommit_args": [
-          "--download-refimg-from-cloud-storage"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "screenshot_sync_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "trace_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ],
-          "shards": 15
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-passthrough-cmd-decoder --disable-es3-apis --disable-es3-gl-context"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_d3d11_passthrough_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_d3d9_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      }
-    ]
-  },
-  "Win7 Release (NVIDIA GeForce 730)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_end2end_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--test-launcher-retry-limit=0"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_white_box_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "audio_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": false
-        },
-        "test": "browser_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=d3d9"
-        ],
-        "name": "gles2_conform_d3d9_test",
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=gl",
-          "--disable-gpu-sandbox"
-        ],
-        "name": "gles2_conform_gl_test",
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "use_xvfb": false
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests",
-        "use_xvfb": false
-      },
-      {
-        "args": [
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest",
-        "use_xvfb": false
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "context_lost_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "depth_capture_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "gpu_process_launch_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "hardware_accelerated_feature_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "10de",
-          "--expected-device-id",
-          "0f02"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "info_collection_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "maps_pixel_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--refimg-cloud-storage-bucket",
-          "chromium-gpu-archive/reference-images",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "pixel_test",
-        "non_precommit_args": [
-          "--upload-refimg-to-cloud-storage"
-        ],
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "precommit_args": [
-          "--download-refimg-from-cloud-storage"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "screenshot_sync_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "trace_test",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ],
-          "shards": 15
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-passthrough-cmd-decoder --disable-es3-apis --disable-es3-gl-context"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_d3d11_passthrough_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_d3d9_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=gl"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_gl_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:0f02",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      }
-    ]
-  },
   "Win7 Release (NVIDIA)": {
     "gtest_tests": [
       {
diff --git a/src/testing/buildbot/chromium.mac.json b/src/testing/buildbot/chromium.mac.json
index 110220c..643a90a 100644
--- a/src/testing/buildbot/chromium.mac.json
+++ b/src/testing/buildbot/chromium.mac.json
@@ -175,6 +175,28 @@
       },
       {
         "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
+          "--enable-browser-side-navigation"
+        ],
+        "name": "browser_side_navigation_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_unittests"
+      },
+      {
+        "swarming": {
           "can_use_on_swarming_builders": false
         },
         "test": "interactive_ui_tests"
diff --git a/src/testing/buildbot/chromium.perf.fyi.json b/src/testing/buildbot/chromium.perf.fyi.json
index 49ef27a..2d8f47b 100644
--- a/src/testing/buildbot/chromium.perf.fyi.json
+++ b/src/testing/buildbot/chromium.perf.fyi.json
@@ -28,7 +28,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58,7 +58,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87,7 +87,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117,7 +117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146,7 +146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176,7 +176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -205,7 +205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -235,7 +235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -264,7 +264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -294,7 +294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -323,7 +323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -353,7 +353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -382,7 +382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -412,7 +412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -441,7 +441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -471,7 +471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -500,7 +500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -530,7 +530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -559,7 +559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -589,7 +589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -618,7 +618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -648,7 +648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -677,7 +677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -707,7 +707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -736,7 +736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -766,7 +766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -795,7 +795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -825,7 +825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -854,7 +854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -884,7 +884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -913,7 +913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -943,7 +943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -972,7 +972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1002,7 +1002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1031,7 +1031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1061,7 +1061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1090,7 +1090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1120,7 +1120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1149,7 +1149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1179,7 +1179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1208,7 +1208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1238,7 +1238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1267,7 +1267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1297,7 +1297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1326,7 +1326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1356,7 +1356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1385,7 +1385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1415,7 +1415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1444,7 +1444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1474,7 +1474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1503,7 +1503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1533,7 +1533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1562,7 +1562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1592,7 +1592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1621,7 +1621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1651,7 +1651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1680,7 +1680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1710,7 +1710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1739,7 +1739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1769,7 +1769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1798,7 +1798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1828,7 +1828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1857,7 +1857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1887,7 +1887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1916,7 +1916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1946,7 +1946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1975,7 +1975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2005,7 +2005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2034,7 +2034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2064,7 +2064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2093,7 +2093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2123,7 +2123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2152,7 +2152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2182,7 +2182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2211,7 +2211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2241,7 +2241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2270,7 +2270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2300,7 +2300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2329,7 +2329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2359,7 +2359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2388,7 +2388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2418,7 +2418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2447,7 +2447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2477,7 +2477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2506,7 +2506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2536,7 +2536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2565,7 +2565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2595,7 +2595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2624,7 +2624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2654,7 +2654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2683,7 +2683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2713,7 +2713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2742,7 +2742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2772,7 +2772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2801,7 +2801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2831,7 +2831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2860,7 +2860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2890,7 +2890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2919,7 +2919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2949,7 +2949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2978,7 +2978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3008,7 +3008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3037,7 +3037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3067,7 +3067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3096,7 +3096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3126,7 +3126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3155,7 +3155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3185,7 +3185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3214,7 +3214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3244,7 +3244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3273,7 +3273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3303,7 +3303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3332,7 +3332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3362,7 +3362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3391,7 +3391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3421,7 +3421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3450,7 +3450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3480,7 +3480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3509,7 +3509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3539,7 +3539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3568,7 +3568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3598,7 +3598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3627,7 +3627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3657,7 +3657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3686,7 +3686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3716,7 +3716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3745,7 +3745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3775,7 +3775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3804,7 +3804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3834,7 +3834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3863,7 +3863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3893,7 +3893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3922,7 +3922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3952,7 +3952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3981,7 +3981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4011,7 +4011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4040,7 +4040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4070,7 +4070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4099,7 +4099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4129,7 +4129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4158,7 +4158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4188,7 +4188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4217,7 +4217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4247,7 +4247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4276,7 +4276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4306,7 +4306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4335,7 +4335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4365,7 +4365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4394,7 +4394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4424,7 +4424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4453,7 +4453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4483,7 +4483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4512,7 +4512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4542,7 +4542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4571,7 +4571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4601,7 +4601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4630,7 +4630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4660,7 +4660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4689,7 +4689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4719,7 +4719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4748,7 +4748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4778,7 +4778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4807,7 +4807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4837,7 +4837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4866,7 +4866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4896,7 +4896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4925,7 +4925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4955,7 +4955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4984,7 +4984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5014,7 +5014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5043,7 +5043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5073,7 +5073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5102,7 +5102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5132,7 +5132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5161,7 +5161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5191,7 +5191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5220,7 +5220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5250,7 +5250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5279,7 +5279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5309,7 +5309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5338,7 +5338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5368,7 +5368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5397,7 +5397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5427,7 +5427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5456,7 +5456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5486,7 +5486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5515,7 +5515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5545,7 +5545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5574,7 +5574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5604,7 +5604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5633,7 +5633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5663,7 +5663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5692,7 +5692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5722,7 +5722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5751,7 +5751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5781,7 +5781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5810,7 +5810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5840,7 +5840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5869,7 +5869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5899,7 +5899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5928,7 +5928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5958,7 +5958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5987,7 +5987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6017,7 +6017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6046,7 +6046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6076,7 +6076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6105,7 +6105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6135,7 +6135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6164,7 +6164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6194,7 +6194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6223,7 +6223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6253,7 +6253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6282,7 +6282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6312,7 +6312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6341,7 +6341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6371,7 +6371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6400,7 +6400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6430,7 +6430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6459,7 +6459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6489,7 +6489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6518,7 +6518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6548,7 +6548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6577,7 +6577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6607,7 +6607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6636,7 +6636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6666,7 +6666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6695,7 +6695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6725,7 +6725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6754,7 +6754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6784,7 +6784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6813,7 +6813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6843,7 +6843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6872,7 +6872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6902,7 +6902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6931,7 +6931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6961,7 +6961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6990,7 +6990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7020,7 +7020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7049,7 +7049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7079,7 +7079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7108,7 +7108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7138,7 +7138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7167,7 +7167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7197,7 +7197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7226,7 +7226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7256,7 +7256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7285,7 +7285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7315,7 +7315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7344,7 +7344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7374,7 +7374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7403,7 +7403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7433,7 +7433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7462,7 +7462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7492,7 +7492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7521,7 +7521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7551,7 +7551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7580,7 +7580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7610,7 +7610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7639,7 +7639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7668,7 +7668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7698,7 +7698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7727,7 +7727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7757,7 +7757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7787,7 +7787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7816,7 +7816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7846,7 +7846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7875,7 +7875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7905,7 +7905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7934,7 +7934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7964,7 +7964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7993,7 +7993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8023,7 +8023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8052,7 +8052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8082,7 +8082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8111,7 +8111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8141,7 +8141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8170,7 +8170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8200,7 +8200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8229,7 +8229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8259,7 +8259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8288,7 +8288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8318,7 +8318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8347,7 +8347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8377,7 +8377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8406,7 +8406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8436,7 +8436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8465,7 +8465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8495,7 +8495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8524,7 +8524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8554,7 +8554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8583,7 +8583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8613,7 +8613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8642,7 +8642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8672,7 +8672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8701,7 +8701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8731,7 +8731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8760,7 +8760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8790,7 +8790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8819,7 +8819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8849,7 +8849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8878,7 +8878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8908,7 +8908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8937,7 +8937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8967,7 +8967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8996,7 +8996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9026,7 +9026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9055,7 +9055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9085,7 +9085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9114,7 +9114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9144,7 +9144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9173,7 +9173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9203,7 +9203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9232,7 +9232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9262,7 +9262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9291,7 +9291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9321,7 +9321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9350,7 +9350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9380,7 +9380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9409,7 +9409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9439,7 +9439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9468,7 +9468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9498,7 +9498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9527,7 +9527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9557,7 +9557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9586,7 +9586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9616,7 +9616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9645,7 +9645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9675,7 +9675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9704,7 +9704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9734,7 +9734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9763,7 +9763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9793,7 +9793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9822,7 +9822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9852,7 +9852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9881,7 +9881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9911,7 +9911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9940,7 +9940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9970,7 +9970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9999,7 +9999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10029,7 +10029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10058,7 +10058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10088,7 +10088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10117,7 +10117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10147,7 +10147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10176,7 +10176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10206,7 +10206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10235,7 +10235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10265,7 +10265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10294,7 +10294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10324,7 +10324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10353,7 +10353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10383,7 +10383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10412,7 +10412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10442,7 +10442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10471,7 +10471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10501,7 +10501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10530,7 +10530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10560,7 +10560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10589,7 +10589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10619,7 +10619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10648,7 +10648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10678,7 +10678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10707,7 +10707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10737,7 +10737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10766,7 +10766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10796,7 +10796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10825,7 +10825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10855,7 +10855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10884,7 +10884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10914,7 +10914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10943,7 +10943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10973,7 +10973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11002,7 +11002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11031,7 +11031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11061,7 +11061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11090,7 +11090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11120,7 +11120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11150,7 +11150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11179,7 +11179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11209,7 +11209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11238,7 +11238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11268,7 +11268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11297,7 +11297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11327,7 +11327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11356,7 +11356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11386,7 +11386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11415,7 +11415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11445,7 +11445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11474,7 +11474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11504,7 +11504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11533,7 +11533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11563,7 +11563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -11587,7 +11587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11616,7 +11616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11646,7 +11646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11675,7 +11675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11705,7 +11705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11734,7 +11734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11764,7 +11764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11793,7 +11793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11823,7 +11823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11852,7 +11852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11882,7 +11882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11911,7 +11911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11941,7 +11941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11970,7 +11970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12000,7 +12000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12029,7 +12029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12059,7 +12059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12088,7 +12088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12118,7 +12118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12147,7 +12147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12177,7 +12177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12206,7 +12206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12236,7 +12236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12265,7 +12265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12295,7 +12295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12324,7 +12324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12354,7 +12354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12383,7 +12383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12413,7 +12413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12442,7 +12442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12472,7 +12472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12501,7 +12501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12531,7 +12531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12560,7 +12560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12590,7 +12590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12619,7 +12619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12649,7 +12649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12678,7 +12678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12708,7 +12708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12728,7 +12728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12757,7 +12757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12787,7 +12787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12816,7 +12816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12846,7 +12846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12875,7 +12875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12905,7 +12905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12934,7 +12934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12964,7 +12964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12993,7 +12993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13023,7 +13023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13052,7 +13052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13082,7 +13082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13111,7 +13111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13141,7 +13141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13170,7 +13170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13200,7 +13200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13229,7 +13229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13259,7 +13259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13288,7 +13288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13318,7 +13318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13347,7 +13347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13377,7 +13377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13406,7 +13406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13436,7 +13436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13465,7 +13465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13495,7 +13495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13524,7 +13524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13554,7 +13554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13583,7 +13583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13613,7 +13613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13642,7 +13642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13672,7 +13672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13701,7 +13701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13731,7 +13731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13751,7 +13751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13780,7 +13780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13810,7 +13810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13839,7 +13839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13869,7 +13869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13898,7 +13898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13928,7 +13928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13957,7 +13957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13987,7 +13987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14016,7 +14016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14046,7 +14046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14075,7 +14075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14105,7 +14105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14134,7 +14134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14164,7 +14164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14193,7 +14193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14223,7 +14223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14243,7 +14243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14272,7 +14272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14302,7 +14302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14331,7 +14331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14361,7 +14361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14390,7 +14390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14420,7 +14420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14449,7 +14449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14479,7 +14479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14508,7 +14508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14538,7 +14538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14567,7 +14567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14597,7 +14597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14626,7 +14626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14656,7 +14656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14685,7 +14685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14715,7 +14715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14744,7 +14744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14774,7 +14774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14803,7 +14803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14833,7 +14833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14862,7 +14862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14892,7 +14892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14921,7 +14921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14951,7 +14951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14980,7 +14980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15010,7 +15010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15039,7 +15039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15069,7 +15069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15098,7 +15098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15128,7 +15128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15157,7 +15157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15187,7 +15187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15216,7 +15216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15246,7 +15246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15275,7 +15275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15305,7 +15305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15334,7 +15334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15364,7 +15364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15393,7 +15393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15423,7 +15423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15452,7 +15452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15482,7 +15482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15511,7 +15511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15541,7 +15541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15570,7 +15570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15600,7 +15600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15629,7 +15629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15659,7 +15659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15688,7 +15688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15718,7 +15718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15747,7 +15747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15777,7 +15777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15806,7 +15806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15836,7 +15836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15865,7 +15865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15895,7 +15895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15924,7 +15924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15954,7 +15954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15983,7 +15983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16013,7 +16013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16042,7 +16042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16072,7 +16072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16101,7 +16101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16131,7 +16131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16160,7 +16160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16190,7 +16190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16219,7 +16219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16249,7 +16249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16278,7 +16278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16308,7 +16308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16337,7 +16337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16367,7 +16367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16387,7 +16387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16416,7 +16416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16446,7 +16446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16475,7 +16475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16505,7 +16505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16534,7 +16534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16564,7 +16564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16593,7 +16593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16623,7 +16623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16652,7 +16652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16682,7 +16682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16711,7 +16711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16741,7 +16741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16770,7 +16770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16800,7 +16800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16829,7 +16829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16859,7 +16859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16888,7 +16888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16918,7 +16918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16947,7 +16947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16977,7 +16977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17006,7 +17006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17036,7 +17036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17065,7 +17065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17095,7 +17095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17124,7 +17124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17154,7 +17154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17183,7 +17183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17213,7 +17213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17242,7 +17242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17272,7 +17272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17301,7 +17301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17331,7 +17331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17360,7 +17360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17390,7 +17390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17419,7 +17419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17449,7 +17449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17478,7 +17478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17508,7 +17508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17537,7 +17537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17567,7 +17567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17596,7 +17596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17626,7 +17626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17655,7 +17655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17685,7 +17685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17714,7 +17714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17744,7 +17744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17773,7 +17773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17803,7 +17803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17832,7 +17832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17862,7 +17862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17891,7 +17891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17921,7 +17921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17950,7 +17950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17980,7 +17980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18009,7 +18009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18039,7 +18039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18068,7 +18068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18098,7 +18098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18127,7 +18127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18157,7 +18157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18186,7 +18186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18216,7 +18216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18245,7 +18245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18275,7 +18275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18304,7 +18304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18334,7 +18334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18363,7 +18363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18393,7 +18393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18422,7 +18422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18452,7 +18452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18481,7 +18481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18511,7 +18511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18540,7 +18540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18570,7 +18570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18599,7 +18599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18629,7 +18629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18658,7 +18658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18688,7 +18688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18717,7 +18717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18747,7 +18747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18776,7 +18776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18806,7 +18806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18835,7 +18835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18865,7 +18865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18894,7 +18894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18924,7 +18924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18953,7 +18953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18983,7 +18983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19012,7 +19012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19042,7 +19042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19071,7 +19071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19101,7 +19101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19130,7 +19130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19160,7 +19160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19189,7 +19189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19219,7 +19219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19248,7 +19248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19278,7 +19278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19307,7 +19307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19336,7 +19336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19366,7 +19366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19395,7 +19395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19425,7 +19425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19455,7 +19455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19484,7 +19484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19514,7 +19514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19543,7 +19543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19573,7 +19573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19602,7 +19602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19632,7 +19632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19661,7 +19661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19691,7 +19691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19720,7 +19720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19750,7 +19750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19779,7 +19779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19809,7 +19809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19838,7 +19838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19868,7 +19868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19897,7 +19897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19927,7 +19927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19956,7 +19956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19986,7 +19986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20015,7 +20015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20045,7 +20045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20074,7 +20074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20104,7 +20104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20133,7 +20133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20163,7 +20163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20192,7 +20192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20222,7 +20222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20251,7 +20251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20281,7 +20281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20310,7 +20310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20340,7 +20340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20369,7 +20369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20399,7 +20399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20428,7 +20428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20458,7 +20458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20487,7 +20487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20517,7 +20517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20546,7 +20546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20576,7 +20576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20605,7 +20605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20635,7 +20635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20664,7 +20664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20694,7 +20694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20723,7 +20723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20753,7 +20753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20782,7 +20782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20812,7 +20812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20841,7 +20841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20871,7 +20871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20900,7 +20900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20930,7 +20930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20959,7 +20959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20989,7 +20989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21018,7 +21018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21048,7 +21048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21077,7 +21077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21107,7 +21107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21136,7 +21136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21166,7 +21166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21195,7 +21195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21225,7 +21225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21254,7 +21254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21284,7 +21284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21313,7 +21313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21343,7 +21343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21363,7 +21363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21392,7 +21392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21422,7 +21422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21451,7 +21451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21481,7 +21481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21510,7 +21510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21540,7 +21540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21569,7 +21569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21599,7 +21599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21628,7 +21628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21658,7 +21658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21687,7 +21687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21717,7 +21717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21746,7 +21746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21776,7 +21776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21805,7 +21805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21835,7 +21835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21864,7 +21864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21894,7 +21894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21923,7 +21923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21953,7 +21953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21982,7 +21982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22012,7 +22012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22041,7 +22041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22071,7 +22071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22100,7 +22100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22130,7 +22130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22159,7 +22159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22189,7 +22189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22218,7 +22218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22248,7 +22248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22277,7 +22277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22307,7 +22307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22336,7 +22336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22366,7 +22366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22395,7 +22395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22425,7 +22425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22454,7 +22454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22484,7 +22484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22513,7 +22513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22543,7 +22543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22572,7 +22572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22602,7 +22602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22631,7 +22631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22661,7 +22661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22690,7 +22690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22719,7 +22719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22749,7 +22749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22778,7 +22778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22808,7 +22808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22838,7 +22838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22867,7 +22867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22897,7 +22897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22926,7 +22926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22956,7 +22956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22985,7 +22985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23015,7 +23015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23044,7 +23044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23074,7 +23074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23103,7 +23103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23133,7 +23133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23162,7 +23162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23192,7 +23192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23221,7 +23221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23251,7 +23251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -23284,7 +23284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23314,7 +23314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23343,7 +23343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23373,7 +23373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23402,7 +23402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23432,7 +23432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23461,7 +23461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23491,7 +23491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23520,7 +23520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23550,7 +23550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23579,7 +23579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23609,7 +23609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23638,7 +23638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23668,7 +23668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23697,7 +23697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23727,7 +23727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23756,7 +23756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23786,7 +23786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23815,7 +23815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23845,7 +23845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23874,7 +23874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23904,7 +23904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23933,7 +23933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23963,7 +23963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23992,7 +23992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24022,7 +24022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24051,7 +24051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24081,7 +24081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24110,7 +24110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24140,7 +24140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24169,7 +24169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24199,7 +24199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24228,7 +24228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24258,7 +24258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24287,7 +24287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24317,7 +24317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24346,7 +24346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24376,7 +24376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24405,7 +24405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24435,7 +24435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24464,7 +24464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24494,7 +24494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24523,7 +24523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24553,7 +24553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24582,7 +24582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24612,7 +24612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24641,7 +24641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24671,7 +24671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24700,7 +24700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24730,7 +24730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24759,7 +24759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24789,7 +24789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24818,7 +24818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24848,7 +24848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24877,7 +24877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24907,7 +24907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24936,7 +24936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24966,7 +24966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24995,7 +24995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25025,7 +25025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25054,7 +25054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25084,7 +25084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25113,7 +25113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25143,7 +25143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25172,7 +25172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25202,7 +25202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25231,7 +25231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25261,7 +25261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25290,7 +25290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25320,7 +25320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25349,7 +25349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25379,7 +25379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25408,7 +25408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25438,7 +25438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25467,7 +25467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25497,7 +25497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25526,7 +25526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25556,7 +25556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25585,7 +25585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25615,7 +25615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25644,7 +25644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25674,7 +25674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25703,7 +25703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25733,7 +25733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25762,7 +25762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25792,7 +25792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25821,7 +25821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25851,7 +25851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25880,7 +25880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25910,7 +25910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25939,7 +25939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25969,7 +25969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25998,7 +25998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26028,7 +26028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26057,7 +26057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26087,7 +26087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26116,7 +26116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26146,7 +26146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26175,7 +26175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26205,7 +26205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26234,7 +26234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26264,7 +26264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26293,7 +26293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26323,7 +26323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26352,7 +26352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26382,7 +26382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26411,7 +26411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26441,7 +26441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26470,7 +26470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26500,7 +26500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26529,7 +26529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26559,7 +26559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26588,7 +26588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26618,7 +26618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26647,7 +26647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26677,7 +26677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26706,7 +26706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26736,7 +26736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26765,7 +26765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26795,7 +26795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26824,7 +26824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26854,7 +26854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26883,7 +26883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26913,7 +26913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26942,7 +26942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26972,7 +26972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27001,7 +27001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27031,7 +27031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27060,7 +27060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27090,7 +27090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27119,7 +27119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27149,7 +27149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27178,7 +27178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27208,7 +27208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27237,7 +27237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27267,7 +27267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27296,7 +27296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27326,7 +27326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27355,7 +27355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27385,7 +27385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27414,7 +27414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27444,7 +27444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27473,7 +27473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27503,7 +27503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27532,7 +27532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27562,7 +27562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27591,7 +27591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27621,7 +27621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27650,7 +27650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27680,7 +27680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27709,7 +27709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27739,7 +27739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27768,7 +27768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27798,7 +27798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27827,7 +27827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27857,7 +27857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27886,7 +27886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27916,7 +27916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27945,7 +27945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27975,7 +27975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28004,7 +28004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28034,7 +28034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28063,7 +28063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28093,7 +28093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28122,7 +28122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28152,7 +28152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28181,7 +28181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28211,7 +28211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28240,7 +28240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28270,7 +28270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28299,7 +28299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28329,7 +28329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28358,7 +28358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28388,7 +28388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28417,7 +28417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28447,7 +28447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28476,7 +28476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28506,7 +28506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28535,7 +28535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28565,7 +28565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28594,7 +28594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28624,7 +28624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28653,7 +28653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28683,7 +28683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28712,7 +28712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28742,7 +28742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28771,7 +28771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28801,7 +28801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28830,7 +28830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28860,7 +28860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28889,7 +28889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28919,7 +28919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28948,7 +28948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28978,7 +28978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29007,7 +29007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29037,7 +29037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29066,7 +29066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29096,7 +29096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29125,7 +29125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29155,7 +29155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29184,7 +29184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29214,7 +29214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29243,7 +29243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29273,7 +29273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29302,7 +29302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29332,7 +29332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29361,7 +29361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29391,7 +29391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29420,7 +29420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29450,7 +29450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29479,7 +29479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29509,7 +29509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29538,7 +29538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29568,7 +29568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29597,7 +29597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29627,7 +29627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29656,7 +29656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29686,7 +29686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29715,7 +29715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29745,7 +29745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29774,7 +29774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29804,7 +29804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29833,7 +29833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29863,7 +29863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29892,7 +29892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29922,7 +29922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29951,7 +29951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29981,7 +29981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30010,7 +30010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30040,7 +30040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30069,7 +30069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30099,7 +30099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30128,7 +30128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30158,7 +30158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30187,7 +30187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30217,7 +30217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30246,7 +30246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30276,7 +30276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30305,7 +30305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30335,7 +30335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30364,7 +30364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30394,7 +30394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30423,7 +30423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30453,7 +30453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30482,7 +30482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30512,7 +30512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30541,7 +30541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30571,7 +30571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30600,7 +30600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30630,7 +30630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30659,7 +30659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30689,7 +30689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30718,7 +30718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30748,7 +30748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30777,7 +30777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30807,7 +30807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30836,7 +30836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30866,7 +30866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30895,7 +30895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30924,7 +30924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30954,7 +30954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30983,7 +30983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31013,7 +31013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31043,7 +31043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31072,7 +31072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31102,7 +31102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31131,7 +31131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31161,7 +31161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31190,7 +31190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31220,7 +31220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31249,7 +31249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31279,7 +31279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31308,7 +31308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31338,7 +31338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31367,7 +31367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31397,7 +31397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31426,7 +31426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31456,7 +31456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31485,7 +31485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31515,7 +31515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31544,7 +31544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31574,7 +31574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31603,7 +31603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31633,7 +31633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31662,7 +31662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31692,7 +31692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31721,7 +31721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31751,7 +31751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31780,7 +31780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31810,7 +31810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31839,7 +31839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31869,7 +31869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31898,7 +31898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31928,7 +31928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31957,7 +31957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31987,7 +31987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32016,7 +32016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32046,7 +32046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32075,7 +32075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32105,7 +32105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32134,7 +32134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32164,7 +32164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32193,7 +32193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32223,7 +32223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32252,7 +32252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32282,7 +32282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32311,7 +32311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32341,7 +32341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32370,7 +32370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32400,7 +32400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32429,7 +32429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32459,7 +32459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32488,7 +32488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32518,7 +32518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32547,7 +32547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32577,7 +32577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32606,7 +32606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32636,7 +32636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32665,7 +32665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32695,7 +32695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32724,7 +32724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32754,7 +32754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32783,7 +32783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32813,7 +32813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32842,7 +32842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32872,7 +32872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32901,7 +32901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32931,7 +32931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32960,7 +32960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32990,7 +32990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33019,7 +33019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33049,7 +33049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33078,7 +33078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33108,7 +33108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33137,7 +33137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33167,7 +33167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33196,7 +33196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33226,7 +33226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33255,7 +33255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33285,7 +33285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33314,7 +33314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33344,7 +33344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33373,7 +33373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33403,7 +33403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33432,7 +33432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33462,7 +33462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33491,7 +33491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33521,7 +33521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33550,7 +33550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33580,7 +33580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33609,7 +33609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33639,7 +33639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33668,7 +33668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33698,7 +33698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33727,7 +33727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33757,7 +33757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33786,7 +33786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33816,7 +33816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33845,7 +33845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33875,7 +33875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33904,7 +33904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33934,7 +33934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33963,7 +33963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33993,7 +33993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34022,7 +34022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34052,7 +34052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34081,7 +34081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34111,7 +34111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34140,7 +34140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34170,7 +34170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34199,7 +34199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34229,7 +34229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34258,7 +34258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34287,7 +34287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34317,7 +34317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34346,7 +34346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34376,7 +34376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34406,7 +34406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34435,7 +34435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34465,7 +34465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34494,7 +34494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34524,7 +34524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34553,7 +34553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34583,7 +34583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34612,7 +34612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34642,7 +34642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34671,7 +34671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34701,7 +34701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34730,7 +34730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34760,7 +34760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34789,7 +34789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34819,7 +34819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
diff --git a/src/testing/buildbot/chromium.perf.json b/src/testing/buildbot/chromium.perf.json
index 4502679..79e8380 100644
--- a/src/testing/buildbot/chromium.perf.json
+++ b/src/testing/buildbot/chromium.perf.json
@@ -95,7 +95,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125,7 +125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154,7 +154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184,7 +184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -213,7 +213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -243,7 +243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -272,7 +272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -302,7 +302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -331,7 +331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -361,7 +361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -390,7 +390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -420,7 +420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -449,7 +449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -479,7 +479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -508,7 +508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -538,7 +538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -567,7 +567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -597,7 +597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -626,7 +626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -656,7 +656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -685,7 +685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -715,7 +715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -744,7 +744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -774,7 +774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -803,7 +803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -833,7 +833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -862,7 +862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -892,7 +892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -921,7 +921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -951,7 +951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -980,7 +980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1010,7 +1010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1039,7 +1039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1069,7 +1069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1098,7 +1098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1128,7 +1128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1157,7 +1157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1187,7 +1187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1216,7 +1216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1246,7 +1246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1275,7 +1275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1305,7 +1305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1334,7 +1334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1364,7 +1364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1393,7 +1393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1423,7 +1423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1452,7 +1452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1482,7 +1482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1511,7 +1511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1541,7 +1541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1570,7 +1570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1600,7 +1600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1629,7 +1629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1659,7 +1659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1688,7 +1688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1718,7 +1718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1747,7 +1747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1777,7 +1777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1806,7 +1806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1836,7 +1836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1865,7 +1865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1895,7 +1895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1924,7 +1924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -1954,7 +1954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -1983,7 +1983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2013,7 +2013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2042,7 +2042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2072,7 +2072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2101,7 +2101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2131,7 +2131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2160,7 +2160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2190,7 +2190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2219,7 +2219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2249,7 +2249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2278,7 +2278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2308,7 +2308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2337,7 +2337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2367,7 +2367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2396,7 +2396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2426,7 +2426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2455,7 +2455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2485,7 +2485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2514,7 +2514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2544,7 +2544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2573,7 +2573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2603,7 +2603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2632,7 +2632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2662,7 +2662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2682,7 +2682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2711,7 +2711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2741,7 +2741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2770,7 +2770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2800,7 +2800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2829,7 +2829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2859,7 +2859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2888,7 +2888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2918,7 +2918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -2947,7 +2947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -2977,7 +2977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3006,7 +3006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3036,7 +3036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3065,7 +3065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3095,7 +3095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3124,7 +3124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3154,7 +3154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3183,7 +3183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3213,7 +3213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3242,7 +3242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3272,7 +3272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3301,7 +3301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3331,7 +3331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3351,7 +3351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3380,7 +3380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3410,7 +3410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3439,7 +3439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3469,7 +3469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3498,7 +3498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3528,7 +3528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3557,7 +3557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3587,7 +3587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3616,7 +3616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3646,7 +3646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3675,7 +3675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3705,7 +3705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3734,7 +3734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3764,7 +3764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3793,7 +3793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3823,7 +3823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3852,7 +3852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3882,7 +3882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3911,7 +3911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -3941,7 +3941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -3970,7 +3970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4000,7 +4000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4029,7 +4029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4059,7 +4059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4088,7 +4088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4118,7 +4118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4147,7 +4147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4177,7 +4177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4206,7 +4206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4236,7 +4236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4265,7 +4265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4295,7 +4295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4324,7 +4324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4354,7 +4354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4383,7 +4383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4413,7 +4413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4442,7 +4442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4472,7 +4472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4501,7 +4501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4531,7 +4531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4560,7 +4560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4590,7 +4590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4619,7 +4619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4649,7 +4649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4678,7 +4678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4708,7 +4708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4737,7 +4737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4767,7 +4767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4796,7 +4796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4826,7 +4826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4855,7 +4855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4885,7 +4885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4914,7 +4914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -4944,7 +4944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -4973,7 +4973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5003,7 +5003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5032,7 +5032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5062,7 +5062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5091,7 +5091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5121,7 +5121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5150,7 +5150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5180,7 +5180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5209,7 +5209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5239,7 +5239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5268,7 +5268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5298,7 +5298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5327,7 +5327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5357,7 +5357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5386,7 +5386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5416,7 +5416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5445,7 +5445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5475,7 +5475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5504,7 +5504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5534,7 +5534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5563,7 +5563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5593,7 +5593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5622,7 +5622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5652,7 +5652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5681,7 +5681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5711,7 +5711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5740,7 +5740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5770,7 +5770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5799,7 +5799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5829,7 +5829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5858,7 +5858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5888,7 +5888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5917,7 +5917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -5947,7 +5947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -5976,7 +5976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6006,7 +6006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6035,7 +6035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6065,7 +6065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6094,7 +6094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6124,7 +6124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6153,7 +6153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6183,7 +6183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6212,7 +6212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6242,7 +6242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6271,7 +6271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6301,7 +6301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6330,7 +6330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6360,7 +6360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6389,7 +6389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6419,7 +6419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6448,7 +6448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6478,7 +6478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6507,7 +6507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6537,7 +6537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6566,7 +6566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6596,7 +6596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6625,7 +6625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6655,7 +6655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6684,7 +6684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6714,7 +6714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6743,7 +6743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6773,7 +6773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6802,7 +6802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6832,7 +6832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6861,7 +6861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6891,7 +6891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6920,7 +6920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -6950,7 +6950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -6979,7 +6979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7009,7 +7009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7038,7 +7038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7068,7 +7068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7097,7 +7097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7127,7 +7127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7156,7 +7156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7186,7 +7186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7215,7 +7215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7245,7 +7245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7274,7 +7274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7304,7 +7304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7333,7 +7333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7363,7 +7363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7392,7 +7392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7422,7 +7422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7451,7 +7451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7481,7 +7481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7510,7 +7510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7540,7 +7540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7569,7 +7569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7599,7 +7599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7628,7 +7628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7658,7 +7658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7687,7 +7687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7717,7 +7717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7746,7 +7746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7775,7 +7775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7805,7 +7805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7834,7 +7834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7864,7 +7864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7894,7 +7894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7923,7 +7923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -7953,7 +7953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -7982,7 +7982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8012,7 +8012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8041,7 +8041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8071,7 +8071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8100,7 +8100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8130,7 +8130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8159,7 +8159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8189,7 +8189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8218,7 +8218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8248,7 +8248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8277,7 +8277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8307,7 +8307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8336,7 +8336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8366,7 +8366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8395,7 +8395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8425,7 +8425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8454,7 +8454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8484,7 +8484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8513,7 +8513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8543,7 +8543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8572,7 +8572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8602,7 +8602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8631,7 +8631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8661,7 +8661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8690,7 +8690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8720,7 +8720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8749,7 +8749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8779,7 +8779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8808,7 +8808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8838,7 +8838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8867,7 +8867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8897,7 +8897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8926,7 +8926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -8956,7 +8956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -8985,7 +8985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9015,7 +9015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9044,7 +9044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9074,7 +9074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9103,7 +9103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9133,7 +9133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9162,7 +9162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9192,7 +9192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9221,7 +9221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9251,7 +9251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9280,7 +9280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9310,7 +9310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9339,7 +9339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9369,7 +9369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9398,7 +9398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9428,7 +9428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9457,7 +9457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9487,7 +9487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9516,7 +9516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9546,7 +9546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9575,7 +9575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9605,7 +9605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9634,7 +9634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9664,7 +9664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9693,7 +9693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9723,7 +9723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9752,7 +9752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9782,7 +9782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9802,7 +9802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9831,7 +9831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9861,7 +9861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9890,7 +9890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9920,7 +9920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -9949,7 +9949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -9979,7 +9979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10008,7 +10008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10038,7 +10038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10067,7 +10067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10097,7 +10097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10126,7 +10126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10156,7 +10156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10185,7 +10185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10215,7 +10215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10244,7 +10244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10274,7 +10274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10303,7 +10303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10333,7 +10333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10362,7 +10362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10392,7 +10392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10421,7 +10421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10451,7 +10451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10480,7 +10480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10510,7 +10510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10539,7 +10539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10569,7 +10569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10598,7 +10598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10628,7 +10628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10657,7 +10657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10687,7 +10687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10716,7 +10716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10746,7 +10746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10775,7 +10775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10805,7 +10805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10834,7 +10834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10864,7 +10864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10893,7 +10893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10923,7 +10923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -10952,7 +10952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -10982,7 +10982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11011,7 +11011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11041,7 +11041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11070,7 +11070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11100,7 +11100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11129,7 +11129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11158,7 +11158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11188,7 +11188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11217,7 +11217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11247,7 +11247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11277,7 +11277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11306,7 +11306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11336,7 +11336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11365,7 +11365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11395,7 +11395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11424,7 +11424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11454,7 +11454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11483,7 +11483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11513,7 +11513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11542,7 +11542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11572,7 +11572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11601,7 +11601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11631,7 +11631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11660,7 +11660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11690,7 +11690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -11723,7 +11723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11753,7 +11753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11782,7 +11782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11812,7 +11812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11841,7 +11841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11871,7 +11871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11900,7 +11900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11930,7 +11930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -11959,7 +11959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -11989,7 +11989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12018,7 +12018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12048,7 +12048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12077,7 +12077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12107,7 +12107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12136,7 +12136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12166,7 +12166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12195,7 +12195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12225,7 +12225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12254,7 +12254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12284,7 +12284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12313,7 +12313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12343,7 +12343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12372,7 +12372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12402,7 +12402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12431,7 +12431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12461,7 +12461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12490,7 +12490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12520,7 +12520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12549,7 +12549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12579,7 +12579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12608,7 +12608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12638,7 +12638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12667,7 +12667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12697,7 +12697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12726,7 +12726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12756,7 +12756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12785,7 +12785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12815,7 +12815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12844,7 +12844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12874,7 +12874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12903,7 +12903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12933,7 +12933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -12962,7 +12962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -12992,7 +12992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13021,7 +13021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13051,7 +13051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13080,7 +13080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13110,7 +13110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13139,7 +13139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13169,7 +13169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13198,7 +13198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13228,7 +13228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13257,7 +13257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13287,7 +13287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13316,7 +13316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13346,7 +13346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13375,7 +13375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13405,7 +13405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13434,7 +13434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13464,7 +13464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13493,7 +13493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13523,7 +13523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13552,7 +13552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13582,7 +13582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13611,7 +13611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13641,7 +13641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13670,7 +13670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13700,7 +13700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13729,7 +13729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13759,7 +13759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13788,7 +13788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13818,7 +13818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13847,7 +13847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13877,7 +13877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13906,7 +13906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13936,7 +13936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -13965,7 +13965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -13995,7 +13995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14024,7 +14024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14054,7 +14054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14083,7 +14083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14113,7 +14113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14142,7 +14142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14172,7 +14172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14201,7 +14201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14231,7 +14231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14260,7 +14260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14290,7 +14290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14319,7 +14319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14349,7 +14349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14378,7 +14378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14408,7 +14408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14437,7 +14437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14467,7 +14467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14496,7 +14496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14526,7 +14526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14555,7 +14555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14585,7 +14585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14614,7 +14614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14644,7 +14644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14673,7 +14673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14703,7 +14703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14732,7 +14732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14762,7 +14762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14791,7 +14791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14821,7 +14821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14850,7 +14850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14880,7 +14880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14909,7 +14909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14939,7 +14939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -14959,7 +14959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -14988,7 +14988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15018,7 +15018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15047,7 +15047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15077,7 +15077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15106,7 +15106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15136,7 +15136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15165,7 +15165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15195,7 +15195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15224,7 +15224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15254,7 +15254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15283,7 +15283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15313,7 +15313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15342,7 +15342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15372,7 +15372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15401,7 +15401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15431,7 +15431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15460,7 +15460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15490,7 +15490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15519,7 +15519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15549,7 +15549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15578,7 +15578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15608,7 +15608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15637,7 +15637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15667,7 +15667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15696,7 +15696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15726,7 +15726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15755,7 +15755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15785,7 +15785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15814,7 +15814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15844,7 +15844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15873,7 +15873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15903,7 +15903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15932,7 +15932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -15962,7 +15962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -15991,7 +15991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16021,7 +16021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16050,7 +16050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16080,7 +16080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16109,7 +16109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16139,7 +16139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16168,7 +16168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16198,7 +16198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16227,7 +16227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16257,7 +16257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16286,7 +16286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16316,7 +16316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16345,7 +16345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16375,7 +16375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16404,7 +16404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16434,7 +16434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16463,7 +16463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16493,7 +16493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16522,7 +16522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16552,7 +16552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16581,7 +16581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16611,7 +16611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16640,7 +16640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16670,7 +16670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16699,7 +16699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16729,7 +16729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16758,7 +16758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16788,7 +16788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16817,7 +16817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16847,7 +16847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16876,7 +16876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16906,7 +16906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16935,7 +16935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -16965,7 +16965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -16994,7 +16994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17024,7 +17024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17053,7 +17053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17083,7 +17083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17112,7 +17112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17142,7 +17142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17171,7 +17171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17201,7 +17201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17230,7 +17230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17260,7 +17260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17289,7 +17289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17319,7 +17319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17348,7 +17348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17378,7 +17378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17407,7 +17407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17437,7 +17437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17466,7 +17466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17496,7 +17496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17525,7 +17525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17555,7 +17555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17584,7 +17584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17614,7 +17614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17643,7 +17643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17673,7 +17673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17702,7 +17702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17732,7 +17732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17761,7 +17761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17791,7 +17791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17820,7 +17820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17850,7 +17850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17879,7 +17879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17909,7 +17909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17938,7 +17938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -17968,7 +17968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -17997,7 +17997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18027,7 +18027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18056,7 +18056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18086,7 +18086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18115,7 +18115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18145,7 +18145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18174,7 +18174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18204,7 +18204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18233,7 +18233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18263,7 +18263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18292,7 +18292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18322,7 +18322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18351,7 +18351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18381,7 +18381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18410,7 +18410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18440,7 +18440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18469,7 +18469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18499,7 +18499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18528,7 +18528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18558,7 +18558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18587,7 +18587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18617,7 +18617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18646,7 +18646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18676,7 +18676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18705,7 +18705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18735,7 +18735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18764,7 +18764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18794,7 +18794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18823,7 +18823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18853,7 +18853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18882,7 +18882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18912,7 +18912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -18941,7 +18941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -18971,7 +18971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19000,7 +19000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19030,7 +19030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19059,7 +19059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19089,7 +19089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19118,7 +19118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19148,7 +19148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19177,7 +19177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19207,7 +19207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19236,7 +19236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19266,7 +19266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19295,7 +19295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19325,7 +19325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19354,7 +19354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19383,7 +19383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19413,7 +19413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19442,7 +19442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19472,7 +19472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19502,7 +19502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19531,7 +19531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19561,7 +19561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19590,7 +19590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19620,7 +19620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19649,7 +19649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19679,7 +19679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19708,7 +19708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19738,7 +19738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19767,7 +19767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19797,7 +19797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19826,7 +19826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19856,7 +19856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19885,7 +19885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19915,7 +19915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -19944,7 +19944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -19974,7 +19974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20003,7 +20003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20033,7 +20033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20062,7 +20062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20092,7 +20092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20121,7 +20121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20151,7 +20151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20180,7 +20180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20210,7 +20210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20239,7 +20239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20269,7 +20269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20298,7 +20298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20328,7 +20328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20357,7 +20357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20387,7 +20387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20416,7 +20416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20446,7 +20446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20475,7 +20475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20505,7 +20505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20534,7 +20534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20564,7 +20564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20593,7 +20593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20623,7 +20623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20652,7 +20652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20682,7 +20682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20711,7 +20711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20741,7 +20741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20770,7 +20770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20800,7 +20800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20829,7 +20829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20859,7 +20859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20888,7 +20888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20918,7 +20918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -20947,7 +20947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -20977,7 +20977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21006,7 +21006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21036,7 +21036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21065,7 +21065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21095,7 +21095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21124,7 +21124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21154,7 +21154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21183,7 +21183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21213,7 +21213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21242,7 +21242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21272,7 +21272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21301,7 +21301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21331,7 +21331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21360,7 +21360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21390,7 +21390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21419,7 +21419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21449,7 +21449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21478,7 +21478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21508,7 +21508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21537,7 +21537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21567,7 +21567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21596,7 +21596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21626,7 +21626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21655,7 +21655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21685,7 +21685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21714,7 +21714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21744,7 +21744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21773,7 +21773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21803,7 +21803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21832,7 +21832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21862,7 +21862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21891,7 +21891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21921,7 +21921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -21950,7 +21950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -21980,7 +21980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22009,7 +22009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22039,7 +22039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22068,7 +22068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22098,7 +22098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22127,7 +22127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22157,7 +22157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22186,7 +22186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22216,7 +22216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22245,7 +22245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22275,7 +22275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22304,7 +22304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22334,7 +22334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22363,7 +22363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22393,7 +22393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22422,7 +22422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22452,7 +22452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22481,7 +22481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22511,7 +22511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22540,7 +22540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22570,7 +22570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22599,7 +22599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22629,7 +22629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22658,7 +22658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22688,7 +22688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22717,7 +22717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22746,7 +22746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22776,7 +22776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22805,7 +22805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22835,7 +22835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22865,7 +22865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22894,7 +22894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22924,7 +22924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -22953,7 +22953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -22983,7 +22983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23012,7 +23012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23042,7 +23042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23071,7 +23071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23101,7 +23101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23130,7 +23130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23160,7 +23160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23189,7 +23189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23219,7 +23219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23248,7 +23248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23278,7 +23278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -23311,7 +23311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23341,7 +23341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23370,7 +23370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23400,7 +23400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23429,7 +23429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23459,7 +23459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23488,7 +23488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23518,7 +23518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23547,7 +23547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23577,7 +23577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23606,7 +23606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23636,7 +23636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23665,7 +23665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23695,7 +23695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23724,7 +23724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23754,7 +23754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23783,7 +23783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23813,7 +23813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23842,7 +23842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23872,7 +23872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23901,7 +23901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23931,7 +23931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -23960,7 +23960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -23990,7 +23990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24019,7 +24019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24049,7 +24049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24078,7 +24078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24108,7 +24108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24137,7 +24137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24167,7 +24167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24196,7 +24196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24226,7 +24226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24255,7 +24255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24285,7 +24285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24314,7 +24314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24344,7 +24344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24373,7 +24373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24403,7 +24403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24432,7 +24432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24462,7 +24462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24491,7 +24491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24521,7 +24521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24550,7 +24550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24580,7 +24580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24609,7 +24609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24639,7 +24639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24668,7 +24668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24698,7 +24698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24727,7 +24727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24757,7 +24757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24786,7 +24786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24816,7 +24816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24845,7 +24845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24875,7 +24875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24904,7 +24904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24934,7 +24934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -24963,7 +24963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -24993,7 +24993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25022,7 +25022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25052,7 +25052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25081,7 +25081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25111,7 +25111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25140,7 +25140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25170,7 +25170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25199,7 +25199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25229,7 +25229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25258,7 +25258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25288,7 +25288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25317,7 +25317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25347,7 +25347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25376,7 +25376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25406,7 +25406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25435,7 +25435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25465,7 +25465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25494,7 +25494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25524,7 +25524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25553,7 +25553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25583,7 +25583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25612,7 +25612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25642,7 +25642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25671,7 +25671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25701,7 +25701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25730,7 +25730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25760,7 +25760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25789,7 +25789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25819,7 +25819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25848,7 +25848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25878,7 +25878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25907,7 +25907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25937,7 +25937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -25966,7 +25966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -25996,7 +25996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26025,7 +26025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26055,7 +26055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26084,7 +26084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26114,7 +26114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26143,7 +26143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26173,7 +26173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26202,7 +26202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26232,7 +26232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26261,7 +26261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26291,7 +26291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26320,7 +26320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26350,7 +26350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26379,7 +26379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26409,7 +26409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26438,7 +26438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26468,7 +26468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26497,7 +26497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26527,7 +26527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26556,7 +26556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26586,7 +26586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26615,7 +26615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26645,7 +26645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26674,7 +26674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26704,7 +26704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26733,7 +26733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26763,7 +26763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26792,7 +26792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26822,7 +26822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26851,7 +26851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26881,7 +26881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26910,7 +26910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26940,7 +26940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -26969,7 +26969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -26999,7 +26999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27028,7 +27028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27058,7 +27058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27087,7 +27087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27117,7 +27117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27146,7 +27146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27176,7 +27176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27205,7 +27205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27235,7 +27235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27264,7 +27264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27294,7 +27294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27323,7 +27323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27353,7 +27353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27382,7 +27382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27412,7 +27412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27441,7 +27441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27471,7 +27471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27500,7 +27500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27530,7 +27530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27559,7 +27559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27589,7 +27589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27618,7 +27618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27648,7 +27648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27677,7 +27677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27707,7 +27707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27736,7 +27736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27766,7 +27766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27795,7 +27795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27825,7 +27825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27854,7 +27854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27884,7 +27884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27913,7 +27913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -27943,7 +27943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -27972,7 +27972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28002,7 +28002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28031,7 +28031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28061,7 +28061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28090,7 +28090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28120,7 +28120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28149,7 +28149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28179,7 +28179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28208,7 +28208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28238,7 +28238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28267,7 +28267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28297,7 +28297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28326,7 +28326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28356,7 +28356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28385,7 +28385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28415,7 +28415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28444,7 +28444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28474,7 +28474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28503,7 +28503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28533,7 +28533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28562,7 +28562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28592,7 +28592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28621,7 +28621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28651,7 +28651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28680,7 +28680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28710,7 +28710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28739,7 +28739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28769,7 +28769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28798,7 +28798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28828,7 +28828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28857,7 +28857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28887,7 +28887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28916,7 +28916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -28946,7 +28946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -28975,7 +28975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29005,7 +29005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29034,7 +29034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29064,7 +29064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29093,7 +29093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29123,7 +29123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29152,7 +29152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29182,7 +29182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29211,7 +29211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29241,7 +29241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29270,7 +29270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29300,7 +29300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29329,7 +29329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29359,7 +29359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29388,7 +29388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29418,7 +29418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29447,7 +29447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29477,7 +29477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29506,7 +29506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29536,7 +29536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29565,7 +29565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29595,7 +29595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29624,7 +29624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29654,7 +29654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29683,7 +29683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29713,7 +29713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29742,7 +29742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29772,7 +29772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29801,7 +29801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29831,7 +29831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29860,7 +29860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29890,7 +29890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29919,7 +29919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -29949,7 +29949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -29978,7 +29978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30008,7 +30008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30037,7 +30037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30067,7 +30067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30096,7 +30096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30126,7 +30126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30155,7 +30155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30185,7 +30185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30214,7 +30214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30244,7 +30244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30273,7 +30273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30303,7 +30303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30332,7 +30332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30362,7 +30362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30391,7 +30391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30421,7 +30421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30450,7 +30450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30480,7 +30480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30509,7 +30509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30539,7 +30539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30568,7 +30568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30598,7 +30598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30627,7 +30627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30657,7 +30657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30686,7 +30686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30716,7 +30716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30745,7 +30745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30775,7 +30775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30804,7 +30804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30834,7 +30834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30863,7 +30863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30893,7 +30893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -30922,7 +30922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30951,7 +30951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -30981,7 +30981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31010,7 +31010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31040,7 +31040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31070,7 +31070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31099,7 +31099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31129,7 +31129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31158,7 +31158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31188,7 +31188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31217,7 +31217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31247,7 +31247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31276,7 +31276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31306,7 +31306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31335,7 +31335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31365,7 +31365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31394,7 +31394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31424,7 +31424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31453,7 +31453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31483,7 +31483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31512,7 +31512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31542,7 +31542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31571,7 +31571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31601,7 +31601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31630,7 +31630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31660,7 +31660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31689,7 +31689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31719,7 +31719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31748,7 +31748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31778,7 +31778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31807,7 +31807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31837,7 +31837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31866,7 +31866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31896,7 +31896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31925,7 +31925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -31955,7 +31955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -31984,7 +31984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32014,7 +32014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32043,7 +32043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32073,7 +32073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32102,7 +32102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32132,7 +32132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32161,7 +32161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32191,7 +32191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32220,7 +32220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32250,7 +32250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32279,7 +32279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32309,7 +32309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32338,7 +32338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32368,7 +32368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32397,7 +32397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32427,7 +32427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32456,7 +32456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32486,7 +32486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32515,7 +32515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32545,7 +32545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32574,7 +32574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32604,7 +32604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32633,7 +32633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32663,7 +32663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32692,7 +32692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32722,7 +32722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32751,7 +32751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32781,7 +32781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32810,7 +32810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32840,7 +32840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32869,7 +32869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32899,7 +32899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32928,7 +32928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -32958,7 +32958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -32987,7 +32987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33017,7 +33017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33046,7 +33046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33076,7 +33076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33105,7 +33105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33135,7 +33135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33164,7 +33164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33194,7 +33194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33223,7 +33223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33253,7 +33253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33282,7 +33282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33312,7 +33312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33341,7 +33341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33371,7 +33371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33400,7 +33400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33430,7 +33430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33459,7 +33459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33489,7 +33489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33518,7 +33518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33548,7 +33548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33577,7 +33577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33607,7 +33607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33636,7 +33636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33666,7 +33666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33695,7 +33695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33725,7 +33725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33754,7 +33754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33784,7 +33784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33813,7 +33813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33843,7 +33843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33872,7 +33872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33902,7 +33902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33931,7 +33931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -33961,7 +33961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -33990,7 +33990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34020,7 +34020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34049,7 +34049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34079,7 +34079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34108,7 +34108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34138,7 +34138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34167,7 +34167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34197,7 +34197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34226,7 +34226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34256,7 +34256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34285,7 +34285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34314,7 +34314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34344,7 +34344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34373,7 +34373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34403,7 +34403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34433,7 +34433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34462,7 +34462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34492,7 +34492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34521,7 +34521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34551,7 +34551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34580,7 +34580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34610,7 +34610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34639,7 +34639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34669,7 +34669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34698,7 +34698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34728,7 +34728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34757,7 +34757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34787,7 +34787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34816,7 +34816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34846,7 +34846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -34879,7 +34879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34909,7 +34909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34938,7 +34938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -34968,7 +34968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -34997,7 +34997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35027,7 +35027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35056,7 +35056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35086,7 +35086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35115,7 +35115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35145,7 +35145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35174,7 +35174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35204,7 +35204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35233,7 +35233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35263,7 +35263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35292,7 +35292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35322,7 +35322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35351,7 +35351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35381,7 +35381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35410,7 +35410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35440,7 +35440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35469,7 +35469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35499,7 +35499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35528,7 +35528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35558,7 +35558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35587,7 +35587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35617,7 +35617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35646,7 +35646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35676,7 +35676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35705,7 +35705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35735,7 +35735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35764,7 +35764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35794,7 +35794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35823,7 +35823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35853,7 +35853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35882,7 +35882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35912,7 +35912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -35941,7 +35941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -35971,7 +35971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36000,7 +36000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36030,7 +36030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36059,7 +36059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36089,7 +36089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36118,7 +36118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36148,7 +36148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36177,7 +36177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36207,7 +36207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36236,7 +36236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36266,7 +36266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36295,7 +36295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36325,7 +36325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36354,7 +36354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36384,7 +36384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36413,7 +36413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36443,7 +36443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36472,7 +36472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36502,7 +36502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36531,7 +36531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36561,7 +36561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36590,7 +36590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36620,7 +36620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36649,7 +36649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36679,7 +36679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36708,7 +36708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36738,7 +36738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36767,7 +36767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36797,7 +36797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36826,7 +36826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36856,7 +36856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36885,7 +36885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36915,7 +36915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -36944,7 +36944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -36974,7 +36974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37003,7 +37003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37033,7 +37033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37062,7 +37062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37092,7 +37092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37121,7 +37121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37151,7 +37151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37180,7 +37180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37210,7 +37210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37239,7 +37239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37269,7 +37269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37298,7 +37298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37328,7 +37328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37357,7 +37357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37387,7 +37387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37416,7 +37416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37446,7 +37446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37475,7 +37475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37505,7 +37505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37534,7 +37534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37564,7 +37564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37593,7 +37593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37623,7 +37623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37652,7 +37652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37682,7 +37682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37711,7 +37711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37741,7 +37741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37770,7 +37770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37800,7 +37800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37829,7 +37829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37859,7 +37859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37888,7 +37888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37918,7 +37918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -37947,7 +37947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -37977,7 +37977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38006,7 +38006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38036,7 +38036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38065,7 +38065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38095,7 +38095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38124,7 +38124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38154,7 +38154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38183,7 +38183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38213,7 +38213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38242,7 +38242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38272,7 +38272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38301,7 +38301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38331,7 +38331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38360,7 +38360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38390,7 +38390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38419,7 +38419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38449,7 +38449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38478,7 +38478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38508,7 +38508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38537,7 +38537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38567,7 +38567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38596,7 +38596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38626,7 +38626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38655,7 +38655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38685,7 +38685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38714,7 +38714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38744,7 +38744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38773,7 +38773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38803,7 +38803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38832,7 +38832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38862,7 +38862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38891,7 +38891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38921,7 +38921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -38950,7 +38950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -38980,7 +38980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39009,7 +39009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39039,7 +39039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39068,7 +39068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39098,7 +39098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39127,7 +39127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39157,7 +39157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39186,7 +39186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39216,7 +39216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39245,7 +39245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39275,7 +39275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39304,7 +39304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39334,7 +39334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39363,7 +39363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39393,7 +39393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39422,7 +39422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39452,7 +39452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39481,7 +39481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39511,7 +39511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39540,7 +39540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39570,7 +39570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39599,7 +39599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39629,7 +39629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39658,7 +39658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39688,7 +39688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39717,7 +39717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39747,7 +39747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39776,7 +39776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39806,7 +39806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39835,7 +39835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39865,7 +39865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39894,7 +39894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39924,7 +39924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -39953,7 +39953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -39983,7 +39983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40012,7 +40012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40042,7 +40042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40071,7 +40071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40101,7 +40101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40130,7 +40130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40160,7 +40160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40189,7 +40189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40219,7 +40219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40248,7 +40248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40278,7 +40278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40307,7 +40307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40337,7 +40337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40366,7 +40366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40396,7 +40396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40425,7 +40425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40455,7 +40455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40484,7 +40484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40514,7 +40514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40543,7 +40543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40573,7 +40573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40602,7 +40602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40632,7 +40632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40661,7 +40661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40691,7 +40691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40720,7 +40720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40750,7 +40750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40779,7 +40779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40809,7 +40809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40838,7 +40838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40868,7 +40868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40897,7 +40897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40927,7 +40927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -40956,7 +40956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -40986,7 +40986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41015,7 +41015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41045,7 +41045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41074,7 +41074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41104,7 +41104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41133,7 +41133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41163,7 +41163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41192,7 +41192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41222,7 +41222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41251,7 +41251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41281,7 +41281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41310,7 +41310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41340,7 +41340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41369,7 +41369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41399,7 +41399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41428,7 +41428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41458,7 +41458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41487,7 +41487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41517,7 +41517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41546,7 +41546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41576,7 +41576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41605,7 +41605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41635,7 +41635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41664,7 +41664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41694,7 +41694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41723,7 +41723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41753,7 +41753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41782,7 +41782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41812,7 +41812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41841,7 +41841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41871,7 +41871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41900,7 +41900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41930,7 +41930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -41959,7 +41959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -41989,7 +41989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42018,7 +42018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42048,7 +42048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42077,7 +42077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42107,7 +42107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42136,7 +42136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42166,7 +42166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42195,7 +42195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42225,7 +42225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42254,7 +42254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42284,7 +42284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42313,7 +42313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42343,7 +42343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42372,7 +42372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42402,7 +42402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42431,7 +42431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42461,7 +42461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42490,7 +42490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42519,7 +42519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42549,7 +42549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42578,7 +42578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42608,7 +42608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42638,7 +42638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42667,7 +42667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42697,7 +42697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42726,7 +42726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42756,7 +42756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42785,7 +42785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42815,7 +42815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42844,7 +42844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42874,7 +42874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42903,7 +42903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42933,7 +42933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -42962,7 +42962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -42992,7 +42992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43021,7 +43021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43051,7 +43051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43080,7 +43080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43110,7 +43110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43139,7 +43139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43169,7 +43169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43198,7 +43198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43228,7 +43228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43257,7 +43257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43287,7 +43287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43316,7 +43316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43346,7 +43346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43375,7 +43375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43405,7 +43405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43434,7 +43434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43464,7 +43464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43493,7 +43493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43523,7 +43523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43552,7 +43552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43582,7 +43582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43611,7 +43611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43641,7 +43641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43670,7 +43670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43700,7 +43700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43729,7 +43729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43759,7 +43759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43788,7 +43788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43818,7 +43818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43847,7 +43847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43877,7 +43877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43906,7 +43906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43936,7 +43936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -43965,7 +43965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -43995,7 +43995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44024,7 +44024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44054,7 +44054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44083,7 +44083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44113,7 +44113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44142,7 +44142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44172,7 +44172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44201,7 +44201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44231,7 +44231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44260,7 +44260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44290,7 +44290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44319,7 +44319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44349,7 +44349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44378,7 +44378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44408,7 +44408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44437,7 +44437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44467,7 +44467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44496,7 +44496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44526,7 +44526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44555,7 +44555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44585,7 +44585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44614,7 +44614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44644,7 +44644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44673,7 +44673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44703,7 +44703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44732,7 +44732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44762,7 +44762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44791,7 +44791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44821,7 +44821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44850,7 +44850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44880,7 +44880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44909,7 +44909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44939,7 +44939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -44968,7 +44968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -44998,7 +44998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45027,7 +45027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45057,7 +45057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45086,7 +45086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45116,7 +45116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45145,7 +45145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45175,7 +45175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45204,7 +45204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45234,7 +45234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45263,7 +45263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45293,7 +45293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45322,7 +45322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45352,7 +45352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45381,7 +45381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45411,7 +45411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45440,7 +45440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45470,7 +45470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45499,7 +45499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45529,7 +45529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45558,7 +45558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45588,7 +45588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45617,7 +45617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45647,7 +45647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45676,7 +45676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45706,7 +45706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45735,7 +45735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45765,7 +45765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45794,7 +45794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45824,7 +45824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45853,7 +45853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45882,7 +45882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45912,7 +45912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -45941,7 +45941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -45971,7 +45971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46001,7 +46001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46030,7 +46030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46060,7 +46060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46089,7 +46089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46119,7 +46119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46148,7 +46148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46178,7 +46178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46207,7 +46207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46237,7 +46237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46266,7 +46266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46296,7 +46296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46325,7 +46325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46355,7 +46355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46384,7 +46384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46414,7 +46414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -46447,7 +46447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46477,7 +46477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46506,7 +46506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46536,7 +46536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46565,7 +46565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46595,7 +46595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46624,7 +46624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46654,7 +46654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46683,7 +46683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46713,7 +46713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46742,7 +46742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46772,7 +46772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46801,7 +46801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46831,7 +46831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46860,7 +46860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46890,7 +46890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46919,7 +46919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -46949,7 +46949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -46978,7 +46978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47008,7 +47008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47037,7 +47037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47067,7 +47067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47096,7 +47096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47126,7 +47126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47155,7 +47155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47185,7 +47185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47214,7 +47214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47244,7 +47244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47273,7 +47273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47303,7 +47303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47332,7 +47332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47362,7 +47362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47391,7 +47391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47421,7 +47421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47450,7 +47450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47480,7 +47480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47509,7 +47509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47539,7 +47539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47568,7 +47568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47598,7 +47598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47627,7 +47627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47657,7 +47657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47686,7 +47686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47716,7 +47716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47745,7 +47745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47775,7 +47775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47804,7 +47804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47834,7 +47834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47863,7 +47863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47893,7 +47893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47922,7 +47922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -47952,7 +47952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -47981,7 +47981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48011,7 +48011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48040,7 +48040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48070,7 +48070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48099,7 +48099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48129,7 +48129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48158,7 +48158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48188,7 +48188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48217,7 +48217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48247,7 +48247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48276,7 +48276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48306,7 +48306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48335,7 +48335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48365,7 +48365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48394,7 +48394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48424,7 +48424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48453,7 +48453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48483,7 +48483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48512,7 +48512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48542,7 +48542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48571,7 +48571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48601,7 +48601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48630,7 +48630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48660,7 +48660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48689,7 +48689,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48719,7 +48719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48748,7 +48748,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48778,7 +48778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48807,7 +48807,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48837,7 +48837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48866,7 +48866,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48896,7 +48896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48925,7 +48925,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -48955,7 +48955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -48984,7 +48984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49014,7 +49014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49043,7 +49043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49073,7 +49073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49102,7 +49102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49132,7 +49132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49161,7 +49161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49191,7 +49191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49220,7 +49220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49250,7 +49250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49279,7 +49279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49309,7 +49309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49338,7 +49338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49368,7 +49368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49397,7 +49397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49427,7 +49427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49456,7 +49456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49486,7 +49486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49515,7 +49515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49545,7 +49545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49574,7 +49574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49604,7 +49604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49633,7 +49633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49663,7 +49663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49692,7 +49692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49722,7 +49722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49751,7 +49751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49781,7 +49781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49810,7 +49810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49840,7 +49840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49869,7 +49869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49899,7 +49899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49928,7 +49928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -49958,7 +49958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -49987,7 +49987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50017,7 +50017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50046,7 +50046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50076,7 +50076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50105,7 +50105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50135,7 +50135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50164,7 +50164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50194,7 +50194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50223,7 +50223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50253,7 +50253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50282,7 +50282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50312,7 +50312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50341,7 +50341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50371,7 +50371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50400,7 +50400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50430,7 +50430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50459,7 +50459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50489,7 +50489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50518,7 +50518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50548,7 +50548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50577,7 +50577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50607,7 +50607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50636,7 +50636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50666,7 +50666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50695,7 +50695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50725,7 +50725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50754,7 +50754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50784,7 +50784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50813,7 +50813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50843,7 +50843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50872,7 +50872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50902,7 +50902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50931,7 +50931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -50961,7 +50961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -50990,7 +50990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51020,7 +51020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51049,7 +51049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51079,7 +51079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51108,7 +51108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51138,7 +51138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51167,7 +51167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51197,7 +51197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51226,7 +51226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51256,7 +51256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51285,7 +51285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51315,7 +51315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51344,7 +51344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51374,7 +51374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51403,7 +51403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51433,7 +51433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51462,7 +51462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51492,7 +51492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51521,7 +51521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51551,7 +51551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51580,7 +51580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51610,7 +51610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51639,7 +51639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51669,7 +51669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51698,7 +51698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51728,7 +51728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51757,7 +51757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51787,7 +51787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51816,7 +51816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51846,7 +51846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51875,7 +51875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51905,7 +51905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51934,7 +51934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -51964,7 +51964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -51993,7 +51993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52023,7 +52023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52052,7 +52052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52082,7 +52082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52111,7 +52111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52141,7 +52141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52170,7 +52170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52200,7 +52200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52229,7 +52229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52259,7 +52259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52288,7 +52288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52318,7 +52318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52347,7 +52347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52377,7 +52377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52406,7 +52406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52436,7 +52436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52465,7 +52465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52495,7 +52495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52524,7 +52524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52554,7 +52554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52583,7 +52583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52613,7 +52613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52642,7 +52642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52672,7 +52672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52701,7 +52701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52731,7 +52731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52760,7 +52760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52790,7 +52790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52819,7 +52819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52849,7 +52849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52878,7 +52878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52908,7 +52908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52937,7 +52937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -52967,7 +52967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -52996,7 +52996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53026,7 +53026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53055,7 +53055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53085,7 +53085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53114,7 +53114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53144,7 +53144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53173,7 +53173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53203,7 +53203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53232,7 +53232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53262,7 +53262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53291,7 +53291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53321,7 +53321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53350,7 +53350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53380,7 +53380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53409,7 +53409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53439,7 +53439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53468,7 +53468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53498,7 +53498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53527,7 +53527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53557,7 +53557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53586,7 +53586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53616,7 +53616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53645,7 +53645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53675,7 +53675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53704,7 +53704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53734,7 +53734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53763,7 +53763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53793,7 +53793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53822,7 +53822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53852,7 +53852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53881,7 +53881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53911,7 +53911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53940,7 +53940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -53970,7 +53970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -53999,7 +53999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54029,7 +54029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54058,7 +54058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54087,7 +54087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54117,7 +54117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54146,7 +54146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54176,7 +54176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54206,7 +54206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54235,7 +54235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54265,7 +54265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54294,7 +54294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54324,7 +54324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54353,7 +54353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54383,7 +54383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54412,7 +54412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54442,7 +54442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54471,7 +54471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54501,7 +54501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54530,7 +54530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54560,7 +54560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54589,7 +54589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54619,7 +54619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54648,7 +54648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54678,7 +54678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54707,7 +54707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54737,7 +54737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54766,7 +54766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54796,7 +54796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54825,7 +54825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54855,7 +54855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54884,7 +54884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54914,7 +54914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -54943,7 +54943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -54973,7 +54973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55002,7 +55002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55032,7 +55032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55061,7 +55061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55091,7 +55091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55120,7 +55120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55150,7 +55150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55179,7 +55179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55209,7 +55209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55238,7 +55238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55268,7 +55268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55297,7 +55297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55327,7 +55327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55356,7 +55356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55386,7 +55386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55415,7 +55415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55445,7 +55445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55474,7 +55474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55504,7 +55504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55533,7 +55533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55563,7 +55563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55592,7 +55592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55622,7 +55622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55651,7 +55651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55681,7 +55681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55710,7 +55710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55740,7 +55740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55769,7 +55769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55799,7 +55799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55828,7 +55828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55858,7 +55858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55887,7 +55887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55917,7 +55917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -55946,7 +55946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -55976,7 +55976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56005,7 +56005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56035,7 +56035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56064,7 +56064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56094,7 +56094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56123,7 +56123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56153,7 +56153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56182,7 +56182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56212,7 +56212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56241,7 +56241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56271,7 +56271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56300,7 +56300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56330,7 +56330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56359,7 +56359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56389,7 +56389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56418,7 +56418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56448,7 +56448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56477,7 +56477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56507,7 +56507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56536,7 +56536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56566,7 +56566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56595,7 +56595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56625,7 +56625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56654,7 +56654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56684,7 +56684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56713,7 +56713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56743,7 +56743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56772,7 +56772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56802,7 +56802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56831,7 +56831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56861,7 +56861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56890,7 +56890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56920,7 +56920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -56949,7 +56949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -56979,7 +56979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57008,7 +57008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57038,7 +57038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57067,7 +57067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57097,7 +57097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57126,7 +57126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57156,7 +57156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57185,7 +57185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57215,7 +57215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57244,7 +57244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57274,7 +57274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57303,7 +57303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57333,7 +57333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57362,7 +57362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57392,7 +57392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57421,7 +57421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57450,7 +57450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57480,7 +57480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57509,7 +57509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57539,7 +57539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57569,7 +57569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57598,7 +57598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57628,7 +57628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57657,7 +57657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57687,7 +57687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57716,7 +57716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57746,7 +57746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57775,7 +57775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57805,7 +57805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57834,7 +57834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57864,7 +57864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57893,7 +57893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57923,7 +57923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -57952,7 +57952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -57982,7 +57982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -58015,7 +58015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58045,7 +58045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58074,7 +58074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58104,7 +58104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58133,7 +58133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58163,7 +58163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58192,7 +58192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58222,7 +58222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58251,7 +58251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58281,7 +58281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58310,7 +58310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58340,7 +58340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58369,7 +58369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58399,7 +58399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58428,7 +58428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58458,7 +58458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58487,7 +58487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58517,7 +58517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58546,7 +58546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58576,7 +58576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58605,7 +58605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58635,7 +58635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58664,7 +58664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58694,7 +58694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58723,7 +58723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58753,7 +58753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58782,7 +58782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58812,7 +58812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58841,7 +58841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58871,7 +58871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58900,7 +58900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58930,7 +58930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -58959,7 +58959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -58989,7 +58989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59018,7 +59018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59048,7 +59048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59077,7 +59077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59107,7 +59107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59136,7 +59136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59166,7 +59166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59195,7 +59195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59225,7 +59225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59254,7 +59254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59284,7 +59284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59313,7 +59313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59343,7 +59343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59372,7 +59372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59402,7 +59402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59431,7 +59431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59461,7 +59461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59490,7 +59490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59520,7 +59520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59549,7 +59549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59579,7 +59579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59608,7 +59608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59638,7 +59638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59667,7 +59667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59697,7 +59697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59726,7 +59726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59756,7 +59756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59785,7 +59785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59815,7 +59815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59844,7 +59844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59874,7 +59874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59903,7 +59903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59933,7 +59933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -59962,7 +59962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -59992,7 +59992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60021,7 +60021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60051,7 +60051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60080,7 +60080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60110,7 +60110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60139,7 +60139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60169,7 +60169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60198,7 +60198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60228,7 +60228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60257,7 +60257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60287,7 +60287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60316,7 +60316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60346,7 +60346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60375,7 +60375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60405,7 +60405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60434,7 +60434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60464,7 +60464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60493,7 +60493,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60523,7 +60523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60552,7 +60552,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60582,7 +60582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60611,7 +60611,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60641,7 +60641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60670,7 +60670,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60700,7 +60700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60729,7 +60729,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60759,7 +60759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60788,7 +60788,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60818,7 +60818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60847,7 +60847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60877,7 +60877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60906,7 +60906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60936,7 +60936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -60965,7 +60965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -60995,7 +60995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61024,7 +61024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61054,7 +61054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61083,7 +61083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61113,7 +61113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61142,7 +61142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61172,7 +61172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61201,7 +61201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61231,7 +61231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61260,7 +61260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61290,7 +61290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61319,7 +61319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61349,7 +61349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61378,7 +61378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61408,7 +61408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61437,7 +61437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61467,7 +61467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61496,7 +61496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61526,7 +61526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61555,7 +61555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61585,7 +61585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61614,7 +61614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61644,7 +61644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61673,7 +61673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61703,7 +61703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61732,7 +61732,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61762,7 +61762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61791,7 +61791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61821,7 +61821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61850,7 +61850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61880,7 +61880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61909,7 +61909,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61939,7 +61939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -61968,7 +61968,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -61998,7 +61998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62027,7 +62027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62057,7 +62057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62086,7 +62086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62116,7 +62116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62145,7 +62145,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62175,7 +62175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62204,7 +62204,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62234,7 +62234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62263,7 +62263,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62293,7 +62293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62322,7 +62322,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62352,7 +62352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62381,7 +62381,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62411,7 +62411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62440,7 +62440,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62470,7 +62470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62499,7 +62499,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62529,7 +62529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62558,7 +62558,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62588,7 +62588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62617,7 +62617,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62647,7 +62647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62676,7 +62676,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62706,7 +62706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62735,7 +62735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62765,7 +62765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62794,7 +62794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62824,7 +62824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62853,7 +62853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62883,7 +62883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62912,7 +62912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -62942,7 +62942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -62971,7 +62971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63001,7 +63001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63030,7 +63030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63060,7 +63060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63089,7 +63089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63119,7 +63119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63148,7 +63148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63178,7 +63178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63207,7 +63207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63237,7 +63237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63266,7 +63266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63296,7 +63296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63325,7 +63325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63355,7 +63355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63384,7 +63384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63414,7 +63414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63443,7 +63443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63473,7 +63473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63502,7 +63502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63532,7 +63532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63561,7 +63561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63591,7 +63591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63620,7 +63620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63650,7 +63650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63679,7 +63679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63709,7 +63709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63738,7 +63738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63768,7 +63768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63797,7 +63797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63827,7 +63827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63856,7 +63856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63886,7 +63886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63915,7 +63915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -63945,7 +63945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -63974,7 +63974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64004,7 +64004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64033,7 +64033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64063,7 +64063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64092,7 +64092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64122,7 +64122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64151,7 +64151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64181,7 +64181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64210,7 +64210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64240,7 +64240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64269,7 +64269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64299,7 +64299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64328,7 +64328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64358,7 +64358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64387,7 +64387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64417,7 +64417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64446,7 +64446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64476,7 +64476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64505,7 +64505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64535,7 +64535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64564,7 +64564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64594,7 +64594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64623,7 +64623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64653,7 +64653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64682,7 +64682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64712,7 +64712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64741,7 +64741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64771,7 +64771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64800,7 +64800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64830,7 +64830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64859,7 +64859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64889,7 +64889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64918,7 +64918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -64948,7 +64948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -64977,7 +64977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65007,7 +65007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65036,7 +65036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65066,7 +65066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65095,7 +65095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65125,7 +65125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65154,7 +65154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65184,7 +65184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65213,7 +65213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65243,7 +65243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65272,7 +65272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65302,7 +65302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65331,7 +65331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65361,7 +65361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65390,7 +65390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65420,7 +65420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65449,7 +65449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65479,7 +65479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65508,7 +65508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65538,7 +65538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65567,7 +65567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65597,7 +65597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65626,7 +65626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65655,7 +65655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65685,7 +65685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65714,7 +65714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65744,7 +65744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65774,7 +65774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65803,7 +65803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65833,7 +65833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65862,7 +65862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65892,7 +65892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65921,7 +65921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -65951,7 +65951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -65980,7 +65980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66010,7 +66010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66039,7 +66039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66069,7 +66069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66098,7 +66098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66128,7 +66128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66157,7 +66157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66187,7 +66187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66216,7 +66216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66246,7 +66246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66275,7 +66275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66305,7 +66305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66334,7 +66334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66364,7 +66364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66393,7 +66393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66423,7 +66423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66452,7 +66452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66482,7 +66482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66511,7 +66511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66541,7 +66541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66570,7 +66570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66600,7 +66600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66629,7 +66629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66659,7 +66659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66688,7 +66688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66718,7 +66718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66747,7 +66747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66777,7 +66777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66806,7 +66806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66836,7 +66836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66865,7 +66865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66895,7 +66895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66924,7 +66924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -66954,7 +66954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -66983,7 +66983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67013,7 +67013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67042,7 +67042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67072,7 +67072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67101,7 +67101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67131,7 +67131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67160,7 +67160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67190,7 +67190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67219,7 +67219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67249,7 +67249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67278,7 +67278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67308,7 +67308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67337,7 +67337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67367,7 +67367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67396,7 +67396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67426,7 +67426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67455,7 +67455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67485,7 +67485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67514,7 +67514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67544,7 +67544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67573,7 +67573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67603,7 +67603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67632,7 +67632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67662,7 +67662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67691,7 +67691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67721,7 +67721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67750,7 +67750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67780,7 +67780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67809,7 +67809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67839,7 +67839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67868,7 +67868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67898,7 +67898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67927,7 +67927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -67957,7 +67957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -67986,7 +67986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68016,7 +68016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68045,7 +68045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68075,7 +68075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68104,7 +68104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68134,7 +68134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68163,7 +68163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68193,7 +68193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68222,7 +68222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68252,7 +68252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68281,7 +68281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68311,7 +68311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68340,7 +68340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68370,7 +68370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68399,7 +68399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68429,7 +68429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68458,7 +68458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68488,7 +68488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68517,7 +68517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68547,7 +68547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68576,7 +68576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68606,7 +68606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68635,7 +68635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68665,7 +68665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68694,7 +68694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68724,7 +68724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68753,7 +68753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68783,7 +68783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68812,7 +68812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68842,7 +68842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68871,7 +68871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68901,7 +68901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68930,7 +68930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -68960,7 +68960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -68989,7 +68989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69018,7 +69018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69048,7 +69048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69077,7 +69077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69107,7 +69107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69137,7 +69137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69166,7 +69166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69196,7 +69196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69225,7 +69225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69255,7 +69255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69284,7 +69284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69314,7 +69314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69343,7 +69343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69373,7 +69373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69402,7 +69402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69432,7 +69432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69461,7 +69461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69491,7 +69491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69520,7 +69520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69550,7 +69550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -69583,7 +69583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69613,7 +69613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69642,7 +69642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69672,7 +69672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69701,7 +69701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69731,7 +69731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69760,7 +69760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69790,7 +69790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69819,7 +69819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69849,7 +69849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69878,7 +69878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69908,7 +69908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69937,7 +69937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -69967,7 +69967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -69996,7 +69996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70026,7 +70026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70055,7 +70055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70085,7 +70085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70114,7 +70114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70144,7 +70144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70173,7 +70173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70203,7 +70203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70232,7 +70232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70262,7 +70262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70291,7 +70291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70321,7 +70321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70350,7 +70350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70380,7 +70380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70409,7 +70409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70439,7 +70439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70468,7 +70468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70498,7 +70498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70527,7 +70527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70557,7 +70557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70586,7 +70586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70616,7 +70616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70645,7 +70645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70675,7 +70675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70704,7 +70704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70734,7 +70734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70763,7 +70763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70793,7 +70793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70822,7 +70822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70852,7 +70852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70881,7 +70881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70911,7 +70911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70940,7 +70940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -70970,7 +70970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -70999,7 +70999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71029,7 +71029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71058,7 +71058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71088,7 +71088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71117,7 +71117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71147,7 +71147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71176,7 +71176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71206,7 +71206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71235,7 +71235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71265,7 +71265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71294,7 +71294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71324,7 +71324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71353,7 +71353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71383,7 +71383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71412,7 +71412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71442,7 +71442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71471,7 +71471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71501,7 +71501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71530,7 +71530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71560,7 +71560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71589,7 +71589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71619,7 +71619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71648,7 +71648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71678,7 +71678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71707,7 +71707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71737,7 +71737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71766,7 +71766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71796,7 +71796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71825,7 +71825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71855,7 +71855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71884,7 +71884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71914,7 +71914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -71943,7 +71943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -71973,7 +71973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72002,7 +72002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72032,7 +72032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72061,7 +72061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72091,7 +72091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72120,7 +72120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72150,7 +72150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72179,7 +72179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72209,7 +72209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72238,7 +72238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72268,7 +72268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72297,7 +72297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72327,7 +72327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72356,7 +72356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72386,7 +72386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72415,7 +72415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72445,7 +72445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72474,7 +72474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72504,7 +72504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72533,7 +72533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72563,7 +72563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72592,7 +72592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72622,7 +72622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72651,7 +72651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72681,7 +72681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72710,7 +72710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72740,7 +72740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72769,7 +72769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72799,7 +72799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72828,7 +72828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72858,7 +72858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72887,7 +72887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72917,7 +72917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -72946,7 +72946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -72976,7 +72976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73005,7 +73005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73035,7 +73035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73064,7 +73064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73094,7 +73094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73123,7 +73123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73153,7 +73153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73182,7 +73182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73212,7 +73212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73241,7 +73241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73271,7 +73271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73300,7 +73300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73330,7 +73330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73359,7 +73359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73389,7 +73389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73418,7 +73418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73448,7 +73448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73477,7 +73477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73507,7 +73507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73536,7 +73536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73566,7 +73566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73595,7 +73595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73625,7 +73625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73654,7 +73654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73684,7 +73684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73713,7 +73713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73743,7 +73743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73772,7 +73772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73802,7 +73802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73831,7 +73831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73861,7 +73861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73890,7 +73890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73920,7 +73920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -73949,7 +73949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -73979,7 +73979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74008,7 +74008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74038,7 +74038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74067,7 +74067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74097,7 +74097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74126,7 +74126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74156,7 +74156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74185,7 +74185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74215,7 +74215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74244,7 +74244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74274,7 +74274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74303,7 +74303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74333,7 +74333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74362,7 +74362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74392,7 +74392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74421,7 +74421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74451,7 +74451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74480,7 +74480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74510,7 +74510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74539,7 +74539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74569,7 +74569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74598,7 +74598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74628,7 +74628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74657,7 +74657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74687,7 +74687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74716,7 +74716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74746,7 +74746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74775,7 +74775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74805,7 +74805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74834,7 +74834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74864,7 +74864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74893,7 +74893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74923,7 +74923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -74952,7 +74952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -74982,7 +74982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75011,7 +75011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75041,7 +75041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75070,7 +75070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75100,7 +75100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75129,7 +75129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75159,7 +75159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75188,7 +75188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75218,7 +75218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75247,7 +75247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75277,7 +75277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75306,7 +75306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75336,7 +75336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75365,7 +75365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75395,7 +75395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75424,7 +75424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75454,7 +75454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75483,7 +75483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75513,7 +75513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75542,7 +75542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75572,7 +75572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75601,7 +75601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75631,7 +75631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75660,7 +75660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75690,7 +75690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75719,7 +75719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75749,7 +75749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75778,7 +75778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75808,7 +75808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75837,7 +75837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75867,7 +75867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75896,7 +75896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75926,7 +75926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -75955,7 +75955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -75985,7 +75985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76014,7 +76014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76044,7 +76044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76073,7 +76073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76103,7 +76103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76132,7 +76132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76162,7 +76162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76191,7 +76191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76221,7 +76221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76250,7 +76250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76280,7 +76280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76309,7 +76309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76339,7 +76339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76368,7 +76368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76398,7 +76398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76427,7 +76427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76457,7 +76457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76486,7 +76486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76516,7 +76516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76545,7 +76545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76575,7 +76575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76604,7 +76604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76634,7 +76634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76663,7 +76663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76693,7 +76693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76722,7 +76722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76752,7 +76752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76781,7 +76781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76811,7 +76811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76840,7 +76840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76870,7 +76870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76899,7 +76899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76929,7 +76929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -76958,7 +76958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -76988,7 +76988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77017,7 +77017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77047,7 +77047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77076,7 +77076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77106,7 +77106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77135,7 +77135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77165,7 +77165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77194,7 +77194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77223,7 +77223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77253,7 +77253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77282,7 +77282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77312,7 +77312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77342,7 +77342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77371,7 +77371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77401,7 +77401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77430,7 +77430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77460,7 +77460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77489,7 +77489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77519,7 +77519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77548,7 +77548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77578,7 +77578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77607,7 +77607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77637,7 +77637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77666,7 +77666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77696,7 +77696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77725,7 +77725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77755,7 +77755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77784,7 +77784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77814,7 +77814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77843,7 +77843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77873,7 +77873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77902,7 +77902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77932,7 +77932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -77961,7 +77961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -77991,7 +77991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78020,7 +78020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78050,7 +78050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78079,7 +78079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78109,7 +78109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78138,7 +78138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78168,7 +78168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78197,7 +78197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78227,7 +78227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78256,7 +78256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78286,7 +78286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78315,7 +78315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78345,7 +78345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78374,7 +78374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78404,7 +78404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78433,7 +78433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78463,7 +78463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78492,7 +78492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78522,7 +78522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78551,7 +78551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78581,7 +78581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78610,7 +78610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78640,7 +78640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78669,7 +78669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78699,7 +78699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78728,7 +78728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78758,7 +78758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78787,7 +78787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78817,7 +78817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78846,7 +78846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78876,7 +78876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78905,7 +78905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78935,7 +78935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -78964,7 +78964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -78994,7 +78994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79023,7 +79023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79053,7 +79053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79082,7 +79082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79112,7 +79112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79141,7 +79141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79171,7 +79171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79200,7 +79200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79230,7 +79230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79259,7 +79259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79289,7 +79289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79318,7 +79318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79348,7 +79348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79377,7 +79377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79407,7 +79407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79436,7 +79436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79466,7 +79466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79495,7 +79495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79525,7 +79525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79554,7 +79554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79584,7 +79584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79613,7 +79613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79643,7 +79643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79672,7 +79672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79702,7 +79702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79731,7 +79731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79761,7 +79761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79790,7 +79790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79820,7 +79820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79849,7 +79849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79879,7 +79879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79908,7 +79908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79938,7 +79938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -79967,7 +79967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -79997,7 +79997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80026,7 +80026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80056,7 +80056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80085,7 +80085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80115,7 +80115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80144,7 +80144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80174,7 +80174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80203,7 +80203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80233,7 +80233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80262,7 +80262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80292,7 +80292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80321,7 +80321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80351,7 +80351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80380,7 +80380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80410,7 +80410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80439,7 +80439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80469,7 +80469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80498,7 +80498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80528,7 +80528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80557,7 +80557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80586,7 +80586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80616,7 +80616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80645,7 +80645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80675,7 +80675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80705,7 +80705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80734,7 +80734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80764,7 +80764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80793,7 +80793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80823,7 +80823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80852,7 +80852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80882,7 +80882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80911,7 +80911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -80941,7 +80941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -80970,7 +80970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81000,7 +81000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81029,7 +81029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81059,7 +81059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81088,7 +81088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81118,7 +81118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -81151,7 +81151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81181,7 +81181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81210,7 +81210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81240,7 +81240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81269,7 +81269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81299,7 +81299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81328,7 +81328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81358,7 +81358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81387,7 +81387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81417,7 +81417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81446,7 +81446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81476,7 +81476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81505,7 +81505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81535,7 +81535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81564,7 +81564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81594,7 +81594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81623,7 +81623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81653,7 +81653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81682,7 +81682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81712,7 +81712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81741,7 +81741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81771,7 +81771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81800,7 +81800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81830,7 +81830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81859,7 +81859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81889,7 +81889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81918,7 +81918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -81948,7 +81948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -81977,7 +81977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82007,7 +82007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82036,7 +82036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82066,7 +82066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82095,7 +82095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82125,7 +82125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82154,7 +82154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82184,7 +82184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82213,7 +82213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82243,7 +82243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82272,7 +82272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82302,7 +82302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82331,7 +82331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82361,7 +82361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82390,7 +82390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82420,7 +82420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82449,7 +82449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82479,7 +82479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82508,7 +82508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82538,7 +82538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82567,7 +82567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82597,7 +82597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82626,7 +82626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82656,7 +82656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82685,7 +82685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82715,7 +82715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82744,7 +82744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82774,7 +82774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82803,7 +82803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82833,7 +82833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82862,7 +82862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82892,7 +82892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82921,7 +82921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -82951,7 +82951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -82980,7 +82980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83010,7 +83010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83039,7 +83039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83069,7 +83069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83098,7 +83098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83128,7 +83128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83157,7 +83157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83187,7 +83187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83216,7 +83216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83246,7 +83246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83275,7 +83275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83305,7 +83305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83334,7 +83334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83364,7 +83364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83393,7 +83393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83423,7 +83423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83452,7 +83452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83482,7 +83482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83511,7 +83511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83541,7 +83541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83570,7 +83570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83600,7 +83600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83629,7 +83629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83659,7 +83659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83688,7 +83688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83718,7 +83718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83747,7 +83747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83777,7 +83777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83806,7 +83806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83836,7 +83836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83865,7 +83865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83895,7 +83895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83924,7 +83924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -83954,7 +83954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -83983,7 +83983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84013,7 +84013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84042,7 +84042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84072,7 +84072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84101,7 +84101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84131,7 +84131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84160,7 +84160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84190,7 +84190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84219,7 +84219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84249,7 +84249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84278,7 +84278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84308,7 +84308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84337,7 +84337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84367,7 +84367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84396,7 +84396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84426,7 +84426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84455,7 +84455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84485,7 +84485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84514,7 +84514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84544,7 +84544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84573,7 +84573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84603,7 +84603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84632,7 +84632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84662,7 +84662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84691,7 +84691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84721,7 +84721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84750,7 +84750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84780,7 +84780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84809,7 +84809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84839,7 +84839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84868,7 +84868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84898,7 +84898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84927,7 +84927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -84957,7 +84957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -84986,7 +84986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85016,7 +85016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85045,7 +85045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85075,7 +85075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85104,7 +85104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85134,7 +85134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85163,7 +85163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85193,7 +85193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85222,7 +85222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85252,7 +85252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85281,7 +85281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85311,7 +85311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85340,7 +85340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85370,7 +85370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85399,7 +85399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85429,7 +85429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85458,7 +85458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85488,7 +85488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85517,7 +85517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85547,7 +85547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85576,7 +85576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85606,7 +85606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85635,7 +85635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85665,7 +85665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85694,7 +85694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85724,7 +85724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85753,7 +85753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85783,7 +85783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85812,7 +85812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85842,7 +85842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85871,7 +85871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85901,7 +85901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85930,7 +85930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -85960,7 +85960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -85989,7 +85989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86019,7 +86019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86048,7 +86048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86078,7 +86078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86107,7 +86107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86137,7 +86137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86166,7 +86166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86196,7 +86196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86225,7 +86225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86255,7 +86255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86284,7 +86284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86314,7 +86314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86343,7 +86343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86373,7 +86373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86402,7 +86402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86432,7 +86432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86461,7 +86461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86491,7 +86491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86520,7 +86520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86550,7 +86550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86579,7 +86579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86609,7 +86609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86638,7 +86638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86668,7 +86668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86697,7 +86697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86727,7 +86727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86756,7 +86756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86786,7 +86786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86815,7 +86815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86845,7 +86845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86874,7 +86874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86904,7 +86904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86933,7 +86933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -86963,7 +86963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -86992,7 +86992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87022,7 +87022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87051,7 +87051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87081,7 +87081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87110,7 +87110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87140,7 +87140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87169,7 +87169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87199,7 +87199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87228,7 +87228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87258,7 +87258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87287,7 +87287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87317,7 +87317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87346,7 +87346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87376,7 +87376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87405,7 +87405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87435,7 +87435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87464,7 +87464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87494,7 +87494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87523,7 +87523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87553,7 +87553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87582,7 +87582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87612,7 +87612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87641,7 +87641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87671,7 +87671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87700,7 +87700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87730,7 +87730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87759,7 +87759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87789,7 +87789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87818,7 +87818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87848,7 +87848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87877,7 +87877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87907,7 +87907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87936,7 +87936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -87966,7 +87966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -87995,7 +87995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88025,7 +88025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88054,7 +88054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88084,7 +88084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88113,7 +88113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88143,7 +88143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88172,7 +88172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88202,7 +88202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88231,7 +88231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88261,7 +88261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88290,7 +88290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88320,7 +88320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88349,7 +88349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88379,7 +88379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88408,7 +88408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88438,7 +88438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88467,7 +88467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88497,7 +88497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88526,7 +88526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88556,7 +88556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88585,7 +88585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88615,7 +88615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88644,7 +88644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88674,7 +88674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88703,7 +88703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88733,7 +88733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88762,7 +88762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88791,7 +88791,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88821,7 +88821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88850,7 +88850,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88880,7 +88880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88910,7 +88910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88939,7 +88939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -88969,7 +88969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -88998,7 +88998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89028,7 +89028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89057,7 +89057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89087,7 +89087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89116,7 +89116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89146,7 +89146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89175,7 +89175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89205,7 +89205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89234,7 +89234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89264,7 +89264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89293,7 +89293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89323,7 +89323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89352,7 +89352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89382,7 +89382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89411,7 +89411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89441,7 +89441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89470,7 +89470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89500,7 +89500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89529,7 +89529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89559,7 +89559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89588,7 +89588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89618,7 +89618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89647,7 +89647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89677,7 +89677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89706,7 +89706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89736,7 +89736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89765,7 +89765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89795,7 +89795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89824,7 +89824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89854,7 +89854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89883,7 +89883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89913,7 +89913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -89942,7 +89942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -89972,7 +89972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90001,7 +90001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90031,7 +90031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90060,7 +90060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90090,7 +90090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90119,7 +90119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90149,7 +90149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90178,7 +90178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90208,7 +90208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90237,7 +90237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90267,7 +90267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90296,7 +90296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90326,7 +90326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90355,7 +90355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90385,7 +90385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90414,7 +90414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90444,7 +90444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90473,7 +90473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90503,7 +90503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90532,7 +90532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90562,7 +90562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90591,7 +90591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90621,7 +90621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90650,7 +90650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90680,7 +90680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90709,7 +90709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90739,7 +90739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90768,7 +90768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90798,7 +90798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90827,7 +90827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90857,7 +90857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90886,7 +90886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90916,7 +90916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -90945,7 +90945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -90975,7 +90975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91004,7 +91004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91034,7 +91034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91063,7 +91063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91093,7 +91093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91122,7 +91122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91152,7 +91152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91181,7 +91181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91211,7 +91211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91240,7 +91240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91270,7 +91270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91299,7 +91299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91329,7 +91329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91358,7 +91358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91388,7 +91388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91417,7 +91417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91447,7 +91447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91476,7 +91476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91506,7 +91506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91535,7 +91535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91565,7 +91565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91594,7 +91594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91624,7 +91624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91653,7 +91653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91683,7 +91683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91712,7 +91712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91742,7 +91742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91771,7 +91771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91801,7 +91801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91830,7 +91830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91860,7 +91860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91889,7 +91889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91919,7 +91919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -91948,7 +91948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -91978,7 +91978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92007,7 +92007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92037,7 +92037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92066,7 +92066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92096,7 +92096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92125,7 +92125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92154,7 +92154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92184,7 +92184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92213,7 +92213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92243,7 +92243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92273,7 +92273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92302,7 +92302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92332,7 +92332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92361,7 +92361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92391,7 +92391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92420,7 +92420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92450,7 +92450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92479,7 +92479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92509,7 +92509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92538,7 +92538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92568,7 +92568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92597,7 +92597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92627,7 +92627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92656,7 +92656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92686,7 +92686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -92719,7 +92719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92749,7 +92749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92778,7 +92778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92808,7 +92808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92837,7 +92837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92867,7 +92867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92896,7 +92896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92926,7 +92926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -92955,7 +92955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -92985,7 +92985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93014,7 +93014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93044,7 +93044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93073,7 +93073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93103,7 +93103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93132,7 +93132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93162,7 +93162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93191,7 +93191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93221,7 +93221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93250,7 +93250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93280,7 +93280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93309,7 +93309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93339,7 +93339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93368,7 +93368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93398,7 +93398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93427,7 +93427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93457,7 +93457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93486,7 +93486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93516,7 +93516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93545,7 +93545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93575,7 +93575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93604,7 +93604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93634,7 +93634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93663,7 +93663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93693,7 +93693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93722,7 +93722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93752,7 +93752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93781,7 +93781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93811,7 +93811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93840,7 +93840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93870,7 +93870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93899,7 +93899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93929,7 +93929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -93958,7 +93958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -93988,7 +93988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94017,7 +94017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94047,7 +94047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94076,7 +94076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94106,7 +94106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94135,7 +94135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94165,7 +94165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94194,7 +94194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94224,7 +94224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94253,7 +94253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94283,7 +94283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94312,7 +94312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94342,7 +94342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94371,7 +94371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94401,7 +94401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94430,7 +94430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94460,7 +94460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94489,7 +94489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94519,7 +94519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94548,7 +94548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94578,7 +94578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94607,7 +94607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94637,7 +94637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94666,7 +94666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94696,7 +94696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94725,7 +94725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94755,7 +94755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94784,7 +94784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94814,7 +94814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94843,7 +94843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94873,7 +94873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94902,7 +94902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94932,7 +94932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -94961,7 +94961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -94991,7 +94991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95020,7 +95020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95050,7 +95050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95079,7 +95079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95109,7 +95109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95138,7 +95138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95168,7 +95168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95197,7 +95197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95227,7 +95227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95256,7 +95256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95286,7 +95286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95315,7 +95315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95345,7 +95345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95374,7 +95374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95404,7 +95404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95433,7 +95433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95463,7 +95463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95492,7 +95492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95522,7 +95522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95551,7 +95551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95581,7 +95581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95610,7 +95610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95640,7 +95640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95669,7 +95669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95699,7 +95699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95728,7 +95728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95758,7 +95758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95787,7 +95787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95817,7 +95817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95846,7 +95846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95876,7 +95876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95905,7 +95905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95935,7 +95935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -95955,7 +95955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -95984,7 +95984,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96014,7 +96014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96043,7 +96043,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96073,7 +96073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96102,7 +96102,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96132,7 +96132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96161,7 +96161,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96191,7 +96191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96220,7 +96220,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96250,7 +96250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96279,7 +96279,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96309,7 +96309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96338,7 +96338,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96368,7 +96368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96397,7 +96397,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96427,7 +96427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96456,7 +96456,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96486,7 +96486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96515,7 +96515,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96545,7 +96545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96574,7 +96574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96604,7 +96604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96633,7 +96633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96663,7 +96663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96692,7 +96692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96722,7 +96722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96751,7 +96751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96781,7 +96781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96810,7 +96810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96840,7 +96840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96869,7 +96869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96899,7 +96899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96928,7 +96928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -96958,7 +96958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -96987,7 +96987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97017,7 +97017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97046,7 +97046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97076,7 +97076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97105,7 +97105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97135,7 +97135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97164,7 +97164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97194,7 +97194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97223,7 +97223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97253,7 +97253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97282,7 +97282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97312,7 +97312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97341,7 +97341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97371,7 +97371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97400,7 +97400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97430,7 +97430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97459,7 +97459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97489,7 +97489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97518,7 +97518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97548,7 +97548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97577,7 +97577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97607,7 +97607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97636,7 +97636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97666,7 +97666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97695,7 +97695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97725,7 +97725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97754,7 +97754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97784,7 +97784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97813,7 +97813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97843,7 +97843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97872,7 +97872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97902,7 +97902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97931,7 +97931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -97961,7 +97961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -97990,7 +97990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98020,7 +98020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98049,7 +98049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98079,7 +98079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98108,7 +98108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98138,7 +98138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98167,7 +98167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98197,7 +98197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98226,7 +98226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98256,7 +98256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98285,7 +98285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98315,7 +98315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98344,7 +98344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98374,7 +98374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98403,7 +98403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98433,7 +98433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98462,7 +98462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98492,7 +98492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98521,7 +98521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98551,7 +98551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98580,7 +98580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98610,7 +98610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98639,7 +98639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98669,7 +98669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98698,7 +98698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98728,7 +98728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98757,7 +98757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98787,7 +98787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98816,7 +98816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98846,7 +98846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98875,7 +98875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98905,7 +98905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98934,7 +98934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -98964,7 +98964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -98993,7 +98993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99023,7 +99023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99052,7 +99052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99082,7 +99082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99111,7 +99111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99141,7 +99141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99170,7 +99170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99200,7 +99200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99229,7 +99229,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99259,7 +99259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99288,7 +99288,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99318,7 +99318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99347,7 +99347,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99377,7 +99377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99406,7 +99406,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99436,7 +99436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99465,7 +99465,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99495,7 +99495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99524,7 +99524,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99554,7 +99554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99583,7 +99583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99613,7 +99613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99642,7 +99642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99672,7 +99672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99701,7 +99701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99731,7 +99731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99760,7 +99760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99790,7 +99790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99819,7 +99819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99849,7 +99849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99878,7 +99878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99908,7 +99908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99937,7 +99937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -99967,7 +99967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -99996,7 +99996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100026,7 +100026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100055,7 +100055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100085,7 +100085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100114,7 +100114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100144,7 +100144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100173,7 +100173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100203,7 +100203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100232,7 +100232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100262,7 +100262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100291,7 +100291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100321,7 +100321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100350,7 +100350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100379,7 +100379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100409,7 +100409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100438,7 +100438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100468,7 +100468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100498,7 +100498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100527,7 +100527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100557,7 +100557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100586,7 +100586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100616,7 +100616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100645,7 +100645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100675,7 +100675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100704,7 +100704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100734,7 +100734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100763,7 +100763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100793,7 +100793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100822,7 +100822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100852,7 +100852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100881,7 +100881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100911,7 +100911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100940,7 +100940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -100970,7 +100970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -100999,7 +100999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101029,7 +101029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101058,7 +101058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101088,7 +101088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101117,7 +101117,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101147,7 +101147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101176,7 +101176,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101206,7 +101206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101235,7 +101235,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101265,7 +101265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101294,7 +101294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101324,7 +101324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101353,7 +101353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101383,7 +101383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101412,7 +101412,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101442,7 +101442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101471,7 +101471,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101501,7 +101501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101530,7 +101530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101560,7 +101560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101589,7 +101589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101619,7 +101619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101648,7 +101648,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101678,7 +101678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101707,7 +101707,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101737,7 +101737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101766,7 +101766,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101796,7 +101796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101825,7 +101825,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101855,7 +101855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101884,7 +101884,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101914,7 +101914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -101943,7 +101943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -101973,7 +101973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102002,7 +102002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102032,7 +102032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102061,7 +102061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102091,7 +102091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102120,7 +102120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102150,7 +102150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102179,7 +102179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102209,7 +102209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102238,7 +102238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102268,7 +102268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102297,7 +102297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102327,7 +102327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102356,7 +102356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102386,7 +102386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102415,7 +102415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102445,7 +102445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102474,7 +102474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102504,7 +102504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102533,7 +102533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102563,7 +102563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102592,7 +102592,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102622,7 +102622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102651,7 +102651,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102681,7 +102681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102710,7 +102710,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102740,7 +102740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102769,7 +102769,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102799,7 +102799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102828,7 +102828,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102858,7 +102858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102887,7 +102887,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102917,7 +102917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -102946,7 +102946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -102976,7 +102976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103005,7 +103005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103035,7 +103035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103064,7 +103064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103094,7 +103094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103123,7 +103123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103153,7 +103153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103182,7 +103182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103212,7 +103212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103241,7 +103241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103271,7 +103271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103300,7 +103300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103330,7 +103330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103359,7 +103359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103389,7 +103389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103418,7 +103418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103448,7 +103448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103477,7 +103477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103507,7 +103507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103536,7 +103536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103566,7 +103566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103595,7 +103595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103625,7 +103625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103654,7 +103654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103684,7 +103684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103713,7 +103713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103742,7 +103742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103772,7 +103772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103801,7 +103801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103831,7 +103831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103861,7 +103861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103890,7 +103890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103920,7 +103920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -103949,7 +103949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -103979,7 +103979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104008,7 +104008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104038,7 +104038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104067,7 +104067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104097,7 +104097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104126,7 +104126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104156,7 +104156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104185,7 +104185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104215,7 +104215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104244,7 +104244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104274,7 +104274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -104298,7 +104298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104327,7 +104327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104357,7 +104357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104386,7 +104386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104416,7 +104416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104445,7 +104445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104475,7 +104475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104504,7 +104504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104534,7 +104534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104563,7 +104563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104593,7 +104593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104622,7 +104622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104652,7 +104652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104681,7 +104681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104711,7 +104711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104740,7 +104740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104770,7 +104770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104799,7 +104799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104829,7 +104829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104858,7 +104858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104888,7 +104888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104917,7 +104917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -104947,7 +104947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -104976,7 +104976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105006,7 +105006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105035,7 +105035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105065,7 +105065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105094,7 +105094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105124,7 +105124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105153,7 +105153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105183,7 +105183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105212,7 +105212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105242,7 +105242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105271,7 +105271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105301,7 +105301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105330,7 +105330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105360,7 +105360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105389,7 +105389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105419,7 +105419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105448,7 +105448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105478,7 +105478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105507,7 +105507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105537,7 +105537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105566,7 +105566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105596,7 +105596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105625,7 +105625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105655,7 +105655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105684,7 +105684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105714,7 +105714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105743,7 +105743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105773,7 +105773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105802,7 +105802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105832,7 +105832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105861,7 +105861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105891,7 +105891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105920,7 +105920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -105950,7 +105950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -105979,7 +105979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106009,7 +106009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106038,7 +106038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106068,7 +106068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106097,7 +106097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106127,7 +106127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106156,7 +106156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106186,7 +106186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106215,7 +106215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106245,7 +106245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106274,7 +106274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106304,7 +106304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106333,7 +106333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106363,7 +106363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106392,7 +106392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106422,7 +106422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106451,7 +106451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106481,7 +106481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106510,7 +106510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106540,7 +106540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106569,7 +106569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106599,7 +106599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106628,7 +106628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106658,7 +106658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106687,7 +106687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106717,7 +106717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106746,7 +106746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106776,7 +106776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106805,7 +106805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106835,7 +106835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106864,7 +106864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106894,7 +106894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -106914,7 +106914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106943,7 +106943,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -106973,7 +106973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107002,7 +107002,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107032,7 +107032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107061,7 +107061,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107091,7 +107091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107120,7 +107120,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107150,7 +107150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107179,7 +107179,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107209,7 +107209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107238,7 +107238,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107268,7 +107268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107297,7 +107297,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107327,7 +107327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107356,7 +107356,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107386,7 +107386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107415,7 +107415,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107445,7 +107445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107474,7 +107474,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107504,7 +107504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107533,7 +107533,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107563,7 +107563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107583,7 +107583,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107612,7 +107612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107642,7 +107642,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107671,7 +107671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107701,7 +107701,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107730,7 +107730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107760,7 +107760,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107789,7 +107789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107819,7 +107819,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107848,7 +107848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107878,7 +107878,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107907,7 +107907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107937,7 +107937,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -107966,7 +107966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -107996,7 +107996,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108025,7 +108025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108055,7 +108055,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108084,7 +108084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108114,7 +108114,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108143,7 +108143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108173,7 +108173,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108202,7 +108202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108232,7 +108232,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108261,7 +108261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108291,7 +108291,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108320,7 +108320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108350,7 +108350,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108379,7 +108379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108409,7 +108409,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108438,7 +108438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108468,7 +108468,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108497,7 +108497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108527,7 +108527,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108556,7 +108556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108586,7 +108586,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108615,7 +108615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108645,7 +108645,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108674,7 +108674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108704,7 +108704,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108733,7 +108733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108763,7 +108763,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108792,7 +108792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108822,7 +108822,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108851,7 +108851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108881,7 +108881,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108910,7 +108910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108940,7 +108940,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -108969,7 +108969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -108999,7 +108999,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109028,7 +109028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109058,7 +109058,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109078,7 +109078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109107,7 +109107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109137,7 +109137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109166,7 +109166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109196,7 +109196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109225,7 +109225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109255,7 +109255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109284,7 +109284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109314,7 +109314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109343,7 +109343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109373,7 +109373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109402,7 +109402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109432,7 +109432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109461,7 +109461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109491,7 +109491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109520,7 +109520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109550,7 +109550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109579,7 +109579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109609,7 +109609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109638,7 +109638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109668,7 +109668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109697,7 +109697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109727,7 +109727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109756,7 +109756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109786,7 +109786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109815,7 +109815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109845,7 +109845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109874,7 +109874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109904,7 +109904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109933,7 +109933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -109963,7 +109963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -109992,7 +109992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110022,7 +110022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110051,7 +110051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110081,7 +110081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110110,7 +110110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110140,7 +110140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110169,7 +110169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110199,7 +110199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110228,7 +110228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110258,7 +110258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110287,7 +110287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110317,7 +110317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110346,7 +110346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110376,7 +110376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110405,7 +110405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110435,7 +110435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110464,7 +110464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110494,7 +110494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110523,7 +110523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110553,7 +110553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110582,7 +110582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110612,7 +110612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110641,7 +110641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110671,7 +110671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110700,7 +110700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110730,7 +110730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110759,7 +110759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110789,7 +110789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110818,7 +110818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110848,7 +110848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110877,7 +110877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110907,7 +110907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110936,7 +110936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -110966,7 +110966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -110995,7 +110995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111025,7 +111025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111054,7 +111054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111084,7 +111084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111113,7 +111113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111143,7 +111143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111172,7 +111172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111202,7 +111202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111231,7 +111231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111261,7 +111261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111290,7 +111290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111320,7 +111320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111349,7 +111349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111379,7 +111379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111408,7 +111408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111438,7 +111438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111467,7 +111467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111497,7 +111497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111526,7 +111526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111556,7 +111556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111585,7 +111585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111615,7 +111615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111644,7 +111644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111674,7 +111674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111703,7 +111703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111733,7 +111733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111762,7 +111762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111792,7 +111792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111821,7 +111821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111851,7 +111851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111880,7 +111880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111910,7 +111910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111939,7 +111939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -111969,7 +111969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -111998,7 +111998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112027,7 +112027,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112057,7 +112057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112086,7 +112086,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112116,7 +112116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112146,7 +112146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112175,7 +112175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112205,7 +112205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112234,7 +112234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112264,7 +112264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112293,7 +112293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112323,7 +112323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112352,7 +112352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112382,7 +112382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112411,7 +112411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112441,7 +112441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112470,7 +112470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112500,7 +112500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112529,7 +112529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112559,7 +112559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112588,7 +112588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112618,7 +112618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112647,7 +112647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112677,7 +112677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112706,7 +112706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112736,7 +112736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112765,7 +112765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112795,7 +112795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112824,7 +112824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112854,7 +112854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112883,7 +112883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112913,7 +112913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -112942,7 +112942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -112972,7 +112972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113001,7 +113001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113031,7 +113031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113060,7 +113060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113090,7 +113090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113119,7 +113119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113149,7 +113149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113178,7 +113178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113208,7 +113208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113237,7 +113237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113267,7 +113267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113296,7 +113296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113326,7 +113326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113355,7 +113355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113385,7 +113385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113414,7 +113414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113444,7 +113444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113473,7 +113473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113503,7 +113503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113532,7 +113532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113562,7 +113562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113591,7 +113591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113621,7 +113621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113650,7 +113650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113680,7 +113680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113709,7 +113709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113739,7 +113739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113768,7 +113768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113798,7 +113798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113827,7 +113827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113857,7 +113857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113886,7 +113886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113916,7 +113916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -113945,7 +113945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -113975,7 +113975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114004,7 +114004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114034,7 +114034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114063,7 +114063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114093,7 +114093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114122,7 +114122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114152,7 +114152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114181,7 +114181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114211,7 +114211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114240,7 +114240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114270,7 +114270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114299,7 +114299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114329,7 +114329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114358,7 +114358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114388,7 +114388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114417,7 +114417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114447,7 +114447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114476,7 +114476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114506,7 +114506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114535,7 +114535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114565,7 +114565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114594,7 +114594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114624,7 +114624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114653,7 +114653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114683,7 +114683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114712,7 +114712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114742,7 +114742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114771,7 +114771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114801,7 +114801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114830,7 +114830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114860,7 +114860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114889,7 +114889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114919,7 +114919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -114948,7 +114948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -114978,7 +114978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115007,7 +115007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115037,7 +115037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115066,7 +115066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115096,7 +115096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115125,7 +115125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115155,7 +115155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115184,7 +115184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115214,7 +115214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115243,7 +115243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115273,7 +115273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115302,7 +115302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115332,7 +115332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115361,7 +115361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115390,7 +115390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115420,7 +115420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115449,7 +115449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115479,7 +115479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115509,7 +115509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115538,7 +115538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115568,7 +115568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115597,7 +115597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115627,7 +115627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115656,7 +115656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115686,7 +115686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115715,7 +115715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115745,7 +115745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115774,7 +115774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115804,7 +115804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115833,7 +115833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115863,7 +115863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -115892,7 +115892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115922,7 +115922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -115946,7 +115946,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -115975,7 +115975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116005,7 +116005,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116034,7 +116034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116064,7 +116064,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116093,7 +116093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116123,7 +116123,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116152,7 +116152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116182,7 +116182,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116211,7 +116211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116241,7 +116241,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116270,7 +116270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116300,7 +116300,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116329,7 +116329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116359,7 +116359,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116388,7 +116388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116418,7 +116418,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116447,7 +116447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116477,7 +116477,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116506,7 +116506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116536,7 +116536,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116565,7 +116565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116595,7 +116595,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116624,7 +116624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116654,7 +116654,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116683,7 +116683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116713,7 +116713,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116742,7 +116742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116772,7 +116772,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116801,7 +116801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116831,7 +116831,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116860,7 +116860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116890,7 +116890,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116919,7 +116919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -116949,7 +116949,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -116978,7 +116978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117008,7 +117008,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117037,7 +117037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117067,7 +117067,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117096,7 +117096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117126,7 +117126,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117155,7 +117155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117185,7 +117185,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117214,7 +117214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117244,7 +117244,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117273,7 +117273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117303,7 +117303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117332,7 +117332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117362,7 +117362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117391,7 +117391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117421,7 +117421,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117450,7 +117450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117480,7 +117480,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117509,7 +117509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117539,7 +117539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117568,7 +117568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117598,7 +117598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117627,7 +117627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117657,7 +117657,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117686,7 +117686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117716,7 +117716,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117745,7 +117745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117775,7 +117775,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117804,7 +117804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117834,7 +117834,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117863,7 +117863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117893,7 +117893,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117922,7 +117922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -117952,7 +117952,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -117981,7 +117981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118011,7 +118011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118040,7 +118040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118070,7 +118070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118099,7 +118099,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118129,7 +118129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118158,7 +118158,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118188,7 +118188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118217,7 +118217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118247,7 +118247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118276,7 +118276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118306,7 +118306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118335,7 +118335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118365,7 +118365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118394,7 +118394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118424,7 +118424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118453,7 +118453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118483,7 +118483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118512,7 +118512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118542,7 +118542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118562,7 +118562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118591,7 +118591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118621,7 +118621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118650,7 +118650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118680,7 +118680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118709,7 +118709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118739,7 +118739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118768,7 +118768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118798,7 +118798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118827,7 +118827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118857,7 +118857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118886,7 +118886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118916,7 +118916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -118945,7 +118945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -118975,7 +118975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119004,7 +119004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119034,7 +119034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119063,7 +119063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119093,7 +119093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119122,7 +119122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119152,7 +119152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119181,7 +119181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119211,7 +119211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119240,7 +119240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119270,7 +119270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119299,7 +119299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119329,7 +119329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119358,7 +119358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119388,7 +119388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119417,7 +119417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119447,7 +119447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119476,7 +119476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119506,7 +119506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119535,7 +119535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119565,7 +119565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119594,7 +119594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119624,7 +119624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119653,7 +119653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119683,7 +119683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119712,7 +119712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119742,7 +119742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119771,7 +119771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119801,7 +119801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119830,7 +119830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119860,7 +119860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119889,7 +119889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119919,7 +119919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -119948,7 +119948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -119978,7 +119978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120007,7 +120007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120037,7 +120037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120066,7 +120066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120096,7 +120096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120125,7 +120125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120155,7 +120155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120184,7 +120184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120214,7 +120214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120243,7 +120243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120273,7 +120273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120302,7 +120302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120332,7 +120332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120361,7 +120361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120391,7 +120391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120420,7 +120420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120450,7 +120450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120479,7 +120479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120509,7 +120509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120538,7 +120538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120568,7 +120568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120597,7 +120597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120627,7 +120627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120656,7 +120656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120686,7 +120686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120706,7 +120706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120735,7 +120735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120765,7 +120765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120794,7 +120794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120824,7 +120824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120853,7 +120853,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120883,7 +120883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120912,7 +120912,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -120942,7 +120942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -120971,7 +120971,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121001,7 +121001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121030,7 +121030,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121060,7 +121060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121089,7 +121089,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121119,7 +121119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121148,7 +121148,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121178,7 +121178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121207,7 +121207,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121237,7 +121237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121266,7 +121266,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121296,7 +121296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121325,7 +121325,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121355,7 +121355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121384,7 +121384,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121414,7 +121414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121443,7 +121443,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121473,7 +121473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121502,7 +121502,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121532,7 +121532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121561,7 +121561,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121591,7 +121591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121620,7 +121620,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121650,7 +121650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121679,7 +121679,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121709,7 +121709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121738,7 +121738,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121768,7 +121768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121797,7 +121797,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121827,7 +121827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121856,7 +121856,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121886,7 +121886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121915,7 +121915,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -121945,7 +121945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -121974,7 +121974,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122004,7 +122004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122033,7 +122033,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122063,7 +122063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122092,7 +122092,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122122,7 +122122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122151,7 +122151,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122181,7 +122181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122210,7 +122210,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122240,7 +122240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122269,7 +122269,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122299,7 +122299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122328,7 +122328,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122358,7 +122358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122387,7 +122387,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122417,7 +122417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122446,7 +122446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122476,7 +122476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122505,7 +122505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122535,7 +122535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122564,7 +122564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122594,7 +122594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122623,7 +122623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122653,7 +122653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122682,7 +122682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122712,7 +122712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122741,7 +122741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122771,7 +122771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122800,7 +122800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122830,7 +122830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122859,7 +122859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122889,7 +122889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122918,7 +122918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -122948,7 +122948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -122977,7 +122977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123007,7 +123007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123036,7 +123036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123066,7 +123066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123095,7 +123095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123125,7 +123125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123154,7 +123154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123184,7 +123184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123213,7 +123213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123243,7 +123243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123272,7 +123272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123302,7 +123302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123331,7 +123331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123361,7 +123361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123390,7 +123390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123420,7 +123420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123449,7 +123449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123479,7 +123479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123508,7 +123508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123538,7 +123538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123567,7 +123567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123597,7 +123597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123626,7 +123626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123655,7 +123655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123685,7 +123685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123714,7 +123714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123744,7 +123744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123774,7 +123774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123803,7 +123803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123833,7 +123833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123862,7 +123862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123892,7 +123892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123921,7 +123921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -123951,7 +123951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -123980,7 +123980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124010,7 +124010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124039,7 +124039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124069,7 +124069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124098,7 +124098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124128,7 +124128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124157,7 +124157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124187,7 +124187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124216,7 +124216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124246,7 +124246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124275,7 +124275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124305,7 +124305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124334,7 +124334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124364,7 +124364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124393,7 +124393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124423,7 +124423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124452,7 +124452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124482,7 +124482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124511,7 +124511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124541,7 +124541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124570,7 +124570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124600,7 +124600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124629,7 +124629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124659,7 +124659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124688,7 +124688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124718,7 +124718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124747,7 +124747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124777,7 +124777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124806,7 +124806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124836,7 +124836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124865,7 +124865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124895,7 +124895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124924,7 +124924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -124954,7 +124954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -124983,7 +124983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125013,7 +125013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125042,7 +125042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125072,7 +125072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125101,7 +125101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125131,7 +125131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125160,7 +125160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125190,7 +125190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125219,7 +125219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125249,7 +125249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125278,7 +125278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125308,7 +125308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125337,7 +125337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125367,7 +125367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125396,7 +125396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125426,7 +125426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125455,7 +125455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125485,7 +125485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125514,7 +125514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125544,7 +125544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125573,7 +125573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125603,7 +125603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125632,7 +125632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125662,7 +125662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125691,7 +125691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125721,7 +125721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125750,7 +125750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125780,7 +125780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125809,7 +125809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125839,7 +125839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125868,7 +125868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125898,7 +125898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125927,7 +125927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -125957,7 +125957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -125986,7 +125986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126016,7 +126016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126045,7 +126045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126075,7 +126075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126104,7 +126104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126134,7 +126134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126163,7 +126163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126193,7 +126193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126222,7 +126222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126252,7 +126252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126281,7 +126281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126311,7 +126311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126340,7 +126340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126370,7 +126370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126399,7 +126399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126429,7 +126429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126458,7 +126458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126488,7 +126488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126517,7 +126517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126547,7 +126547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126576,7 +126576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126606,7 +126606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126635,7 +126635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126665,7 +126665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126694,7 +126694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126724,7 +126724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126753,7 +126753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126783,7 +126783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126812,7 +126812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126842,7 +126842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126871,7 +126871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126901,7 +126901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126930,7 +126930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -126960,7 +126960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -126989,7 +126989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127018,7 +127018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127048,7 +127048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127077,7 +127077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127107,7 +127107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127137,7 +127137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127166,7 +127166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127196,7 +127196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127225,7 +127225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127255,7 +127255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127284,7 +127284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127314,7 +127314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127343,7 +127343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127373,7 +127373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127402,7 +127402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127432,7 +127432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127461,7 +127461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127491,7 +127491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127520,7 +127520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127550,7 +127550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -127574,7 +127574,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127603,7 +127603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127633,7 +127633,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127662,7 +127662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127692,7 +127692,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127721,7 +127721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127751,7 +127751,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127780,7 +127780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127810,7 +127810,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127839,7 +127839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127869,7 +127869,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127898,7 +127898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127928,7 +127928,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -127957,7 +127957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -127987,7 +127987,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128016,7 +128016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128046,7 +128046,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128075,7 +128075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128105,7 +128105,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128134,7 +128134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128164,7 +128164,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128193,7 +128193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128223,7 +128223,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128252,7 +128252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128282,7 +128282,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128311,7 +128311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128341,7 +128341,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128370,7 +128370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128400,7 +128400,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128429,7 +128429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128459,7 +128459,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128488,7 +128488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128518,7 +128518,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128547,7 +128547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128577,7 +128577,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128606,7 +128606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128636,7 +128636,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128665,7 +128665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128695,7 +128695,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128724,7 +128724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128754,7 +128754,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128783,7 +128783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128813,7 +128813,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128842,7 +128842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128872,7 +128872,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128901,7 +128901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128931,7 +128931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -128960,7 +128960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -128990,7 +128990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129019,7 +129019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129049,7 +129049,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129078,7 +129078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129108,7 +129108,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129137,7 +129137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129167,7 +129167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129196,7 +129196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129226,7 +129226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129255,7 +129255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129285,7 +129285,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129314,7 +129314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129344,7 +129344,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129373,7 +129373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129403,7 +129403,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129432,7 +129432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129462,7 +129462,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129491,7 +129491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129521,7 +129521,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129550,7 +129550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129580,7 +129580,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129609,7 +129609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129639,7 +129639,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129668,7 +129668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129698,7 +129698,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129727,7 +129727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129757,7 +129757,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129786,7 +129786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129816,7 +129816,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129845,7 +129845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129875,7 +129875,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129904,7 +129904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129934,7 +129934,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -129963,7 +129963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -129993,7 +129993,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130022,7 +130022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130052,7 +130052,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130081,7 +130081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130111,7 +130111,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130140,7 +130140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130170,7 +130170,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130190,7 +130190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130219,7 +130219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130249,7 +130249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130278,7 +130278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130308,7 +130308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130337,7 +130337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130367,7 +130367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130396,7 +130396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130426,7 +130426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130455,7 +130455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130485,7 +130485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130514,7 +130514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130544,7 +130544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130573,7 +130573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130603,7 +130603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130632,7 +130632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130662,7 +130662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130691,7 +130691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130721,7 +130721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130750,7 +130750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130780,7 +130780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130809,7 +130809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130839,7 +130839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130859,7 +130859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130888,7 +130888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130918,7 +130918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -130947,7 +130947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -130977,7 +130977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131006,7 +131006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131036,7 +131036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131065,7 +131065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131095,7 +131095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131124,7 +131124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131154,7 +131154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131183,7 +131183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131213,7 +131213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131242,7 +131242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131272,7 +131272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131301,7 +131301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131331,7 +131331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131360,7 +131360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131390,7 +131390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131419,7 +131419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131449,7 +131449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131478,7 +131478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131508,7 +131508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131537,7 +131537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131567,7 +131567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131596,7 +131596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131626,7 +131626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131655,7 +131655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131685,7 +131685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131714,7 +131714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131744,7 +131744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131773,7 +131773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131803,7 +131803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131832,7 +131832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131862,7 +131862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131891,7 +131891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131921,7 +131921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -131950,7 +131950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -131980,7 +131980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132009,7 +132009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132039,7 +132039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132068,7 +132068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132098,7 +132098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132127,7 +132127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132157,7 +132157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132186,7 +132186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132216,7 +132216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132245,7 +132245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132275,7 +132275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132304,7 +132304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132334,7 +132334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132354,7 +132354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132383,7 +132383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132413,7 +132413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132442,7 +132442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132472,7 +132472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132501,7 +132501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132531,7 +132531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132560,7 +132560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132590,7 +132590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132619,7 +132619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132649,7 +132649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132678,7 +132678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132708,7 +132708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132737,7 +132737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132767,7 +132767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132796,7 +132796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132826,7 +132826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132855,7 +132855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132885,7 +132885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132914,7 +132914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -132944,7 +132944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -132973,7 +132973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133003,7 +133003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133032,7 +133032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133062,7 +133062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133091,7 +133091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133121,7 +133121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133150,7 +133150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133180,7 +133180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133209,7 +133209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133239,7 +133239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133268,7 +133268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133298,7 +133298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133327,7 +133327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133357,7 +133357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133386,7 +133386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133416,7 +133416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133445,7 +133445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133475,7 +133475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133504,7 +133504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133534,7 +133534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133563,7 +133563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133593,7 +133593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133622,7 +133622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133652,7 +133652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133681,7 +133681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133711,7 +133711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133740,7 +133740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133770,7 +133770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133799,7 +133799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133829,7 +133829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133858,7 +133858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133888,7 +133888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133917,7 +133917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -133947,7 +133947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -133976,7 +133976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134006,7 +134006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134035,7 +134035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134065,7 +134065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134094,7 +134094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134124,7 +134124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134153,7 +134153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134183,7 +134183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134212,7 +134212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134242,7 +134242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134271,7 +134271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134301,7 +134301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134330,7 +134330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134360,7 +134360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134389,7 +134389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134419,7 +134419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134448,7 +134448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134478,7 +134478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134507,7 +134507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134537,7 +134537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134566,7 +134566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134596,7 +134596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134625,7 +134625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134655,7 +134655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134684,7 +134684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134714,7 +134714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134743,7 +134743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134773,7 +134773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134802,7 +134802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134832,7 +134832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134861,7 +134861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134891,7 +134891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134920,7 +134920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -134950,7 +134950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -134979,7 +134979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135009,7 +135009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135038,7 +135038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135068,7 +135068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135097,7 +135097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135127,7 +135127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135156,7 +135156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135186,7 +135186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135215,7 +135215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135245,7 +135245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135274,7 +135274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135303,7 +135303,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135333,7 +135333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135362,7 +135362,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135392,7 +135392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135422,7 +135422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135451,7 +135451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135481,7 +135481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135510,7 +135510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135540,7 +135540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135569,7 +135569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135599,7 +135599,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135628,7 +135628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135658,7 +135658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135687,7 +135687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135717,7 +135717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135746,7 +135746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135776,7 +135776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135805,7 +135805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135835,7 +135835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135864,7 +135864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135894,7 +135894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135923,7 +135923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -135953,7 +135953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -135982,7 +135982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136012,7 +136012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136041,7 +136041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136071,7 +136071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136100,7 +136100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136130,7 +136130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136159,7 +136159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136189,7 +136189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136218,7 +136218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136248,7 +136248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136277,7 +136277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136307,7 +136307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136336,7 +136336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136366,7 +136366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136395,7 +136395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136425,7 +136425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136454,7 +136454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136484,7 +136484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136513,7 +136513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136543,7 +136543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136572,7 +136572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136602,7 +136602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136631,7 +136631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136661,7 +136661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136690,7 +136690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136720,7 +136720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136749,7 +136749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136779,7 +136779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136808,7 +136808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136838,7 +136838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136867,7 +136867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136897,7 +136897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136926,7 +136926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -136956,7 +136956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -136985,7 +136985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137015,7 +137015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137044,7 +137044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137074,7 +137074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137103,7 +137103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137133,7 +137133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137162,7 +137162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137192,7 +137192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137221,7 +137221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137251,7 +137251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137280,7 +137280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137310,7 +137310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137339,7 +137339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137369,7 +137369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137398,7 +137398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137428,7 +137428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137457,7 +137457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137487,7 +137487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137516,7 +137516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137546,7 +137546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137575,7 +137575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137605,7 +137605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137634,7 +137634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137664,7 +137664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137693,7 +137693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137723,7 +137723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137752,7 +137752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137782,7 +137782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137811,7 +137811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137841,7 +137841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137870,7 +137870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137900,7 +137900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137929,7 +137929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -137959,7 +137959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -137988,7 +137988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138018,7 +138018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138047,7 +138047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138077,7 +138077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138106,7 +138106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138136,7 +138136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138165,7 +138165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138195,7 +138195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138224,7 +138224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138254,7 +138254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138283,7 +138283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138313,7 +138313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138342,7 +138342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138372,7 +138372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138401,7 +138401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138431,7 +138431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138460,7 +138460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138490,7 +138490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138519,7 +138519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138549,7 +138549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138578,7 +138578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138608,7 +138608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138637,7 +138637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138666,7 +138666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138696,7 +138696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138725,7 +138725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138755,7 +138755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138785,7 +138785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138814,7 +138814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138844,7 +138844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138873,7 +138873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138903,7 +138903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138932,7 +138932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -138962,7 +138962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -138991,7 +138991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139021,7 +139021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139050,7 +139050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139080,7 +139080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139109,7 +139109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139139,7 +139139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139168,7 +139168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139198,7 +139198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -139231,7 +139231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139261,7 +139261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139290,7 +139290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139320,7 +139320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139349,7 +139349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139379,7 +139379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139408,7 +139408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139438,7 +139438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139467,7 +139467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139497,7 +139497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139526,7 +139526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139556,7 +139556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139585,7 +139585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139615,7 +139615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139644,7 +139644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139674,7 +139674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139703,7 +139703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139733,7 +139733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139762,7 +139762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139792,7 +139792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139821,7 +139821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139851,7 +139851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139880,7 +139880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139910,7 +139910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139939,7 +139939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -139969,7 +139969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -139998,7 +139998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140028,7 +140028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140057,7 +140057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140087,7 +140087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140116,7 +140116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140146,7 +140146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140175,7 +140175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140205,7 +140205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140234,7 +140234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140264,7 +140264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140293,7 +140293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140323,7 +140323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140352,7 +140352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140382,7 +140382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140411,7 +140411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140441,7 +140441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140470,7 +140470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140500,7 +140500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140529,7 +140529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140559,7 +140559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140588,7 +140588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140618,7 +140618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140647,7 +140647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140677,7 +140677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140706,7 +140706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140736,7 +140736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140765,7 +140765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140795,7 +140795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140824,7 +140824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140854,7 +140854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140883,7 +140883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140913,7 +140913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -140942,7 +140942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -140972,7 +140972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141001,7 +141001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141031,7 +141031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141060,7 +141060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141090,7 +141090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141119,7 +141119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141149,7 +141149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141178,7 +141178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141208,7 +141208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141237,7 +141237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141267,7 +141267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141296,7 +141296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141326,7 +141326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141355,7 +141355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141385,7 +141385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141414,7 +141414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141444,7 +141444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141473,7 +141473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141503,7 +141503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141532,7 +141532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141562,7 +141562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141591,7 +141591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141621,7 +141621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141650,7 +141650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141680,7 +141680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141709,7 +141709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141739,7 +141739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141768,7 +141768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141798,7 +141798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141818,7 +141818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141847,7 +141847,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141877,7 +141877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141906,7 +141906,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141936,7 +141936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -141965,7 +141965,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -141995,7 +141995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142024,7 +142024,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142054,7 +142054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142083,7 +142083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142113,7 +142113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142142,7 +142142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142172,7 +142172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142201,7 +142201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142231,7 +142231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142260,7 +142260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142290,7 +142290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142319,7 +142319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142349,7 +142349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142378,7 +142378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142408,7 +142408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142437,7 +142437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142467,7 +142467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142487,7 +142487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142516,7 +142516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142546,7 +142546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142575,7 +142575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142605,7 +142605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142634,7 +142634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142664,7 +142664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142693,7 +142693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142723,7 +142723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142752,7 +142752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142782,7 +142782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142811,7 +142811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142841,7 +142841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142870,7 +142870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142900,7 +142900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142929,7 +142929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -142959,7 +142959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -142988,7 +142988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143018,7 +143018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143047,7 +143047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143077,7 +143077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143106,7 +143106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143136,7 +143136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143165,7 +143165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143195,7 +143195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143224,7 +143224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143254,7 +143254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143283,7 +143283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143313,7 +143313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143342,7 +143342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143372,7 +143372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143401,7 +143401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143431,7 +143431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143460,7 +143460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143490,7 +143490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143519,7 +143519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143549,7 +143549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143578,7 +143578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143608,7 +143608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143637,7 +143637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143667,7 +143667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143696,7 +143696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143726,7 +143726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143755,7 +143755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143785,7 +143785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143814,7 +143814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143844,7 +143844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143873,7 +143873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143903,7 +143903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143932,7 +143932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -143962,7 +143962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -143982,7 +143982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144011,7 +144011,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144041,7 +144041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144070,7 +144070,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144100,7 +144100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144129,7 +144129,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144159,7 +144159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144188,7 +144188,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144218,7 +144218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144247,7 +144247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144277,7 +144277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144306,7 +144306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144336,7 +144336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144365,7 +144365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144395,7 +144395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144424,7 +144424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144454,7 +144454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144483,7 +144483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144513,7 +144513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144542,7 +144542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144572,7 +144572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144601,7 +144601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144631,7 +144631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144660,7 +144660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144690,7 +144690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144719,7 +144719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144749,7 +144749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144778,7 +144778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144808,7 +144808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144837,7 +144837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144867,7 +144867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144896,7 +144896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144926,7 +144926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -144955,7 +144955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -144985,7 +144985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145014,7 +145014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145044,7 +145044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145073,7 +145073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145103,7 +145103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145132,7 +145132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145162,7 +145162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145191,7 +145191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145221,7 +145221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145250,7 +145250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145280,7 +145280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145309,7 +145309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145339,7 +145339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145368,7 +145368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145398,7 +145398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145427,7 +145427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145457,7 +145457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145486,7 +145486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145516,7 +145516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145545,7 +145545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145575,7 +145575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145604,7 +145604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145634,7 +145634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145663,7 +145663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145693,7 +145693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145722,7 +145722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145752,7 +145752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145781,7 +145781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145811,7 +145811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145840,7 +145840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145870,7 +145870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145899,7 +145899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145929,7 +145929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -145958,7 +145958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -145988,7 +145988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146017,7 +146017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146047,7 +146047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146076,7 +146076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146106,7 +146106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146135,7 +146135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146165,7 +146165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146194,7 +146194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146224,7 +146224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146253,7 +146253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146283,7 +146283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146312,7 +146312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146342,7 +146342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146371,7 +146371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146401,7 +146401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146430,7 +146430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146460,7 +146460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146489,7 +146489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146519,7 +146519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146548,7 +146548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146578,7 +146578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146607,7 +146607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146637,7 +146637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146666,7 +146666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146696,7 +146696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146725,7 +146725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146755,7 +146755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146784,7 +146784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146814,7 +146814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146843,7 +146843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146873,7 +146873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146902,7 +146902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146931,7 +146931,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -146961,7 +146961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -146990,7 +146990,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147020,7 +147020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147050,7 +147050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147079,7 +147079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147109,7 +147109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147138,7 +147138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147168,7 +147168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147197,7 +147197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147227,7 +147227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147256,7 +147256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147286,7 +147286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147315,7 +147315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147345,7 +147345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147374,7 +147374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147404,7 +147404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147433,7 +147433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147463,7 +147463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147492,7 +147492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147522,7 +147522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147551,7 +147551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147581,7 +147581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147610,7 +147610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147640,7 +147640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147669,7 +147669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147699,7 +147699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147728,7 +147728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147758,7 +147758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147787,7 +147787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147817,7 +147817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147846,7 +147846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147876,7 +147876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147905,7 +147905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147935,7 +147935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -147964,7 +147964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -147994,7 +147994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148023,7 +148023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148053,7 +148053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148082,7 +148082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148112,7 +148112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148141,7 +148141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148171,7 +148171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148200,7 +148200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148230,7 +148230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148259,7 +148259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148289,7 +148289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148318,7 +148318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148348,7 +148348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148377,7 +148377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148407,7 +148407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148436,7 +148436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148466,7 +148466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148495,7 +148495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148525,7 +148525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148554,7 +148554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148584,7 +148584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148613,7 +148613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148643,7 +148643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148672,7 +148672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148702,7 +148702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148731,7 +148731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148761,7 +148761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148790,7 +148790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148820,7 +148820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148849,7 +148849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148879,7 +148879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148908,7 +148908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148938,7 +148938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -148967,7 +148967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -148997,7 +148997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149026,7 +149026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149056,7 +149056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149085,7 +149085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149115,7 +149115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149144,7 +149144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149174,7 +149174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149203,7 +149203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149233,7 +149233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149262,7 +149262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149292,7 +149292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149321,7 +149321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149351,7 +149351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149380,7 +149380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149410,7 +149410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149439,7 +149439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149469,7 +149469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149498,7 +149498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149528,7 +149528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149557,7 +149557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149587,7 +149587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149616,7 +149616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149646,7 +149646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149675,7 +149675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149705,7 +149705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149734,7 +149734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149764,7 +149764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149793,7 +149793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149823,7 +149823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149852,7 +149852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149882,7 +149882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149911,7 +149911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -149941,7 +149941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -149970,7 +149970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150000,7 +150000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150029,7 +150029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150059,7 +150059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150088,7 +150088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150118,7 +150118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150147,7 +150147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150177,7 +150177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150206,7 +150206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150236,7 +150236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150265,7 +150265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150294,7 +150294,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150324,7 +150324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150353,7 +150353,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150383,7 +150383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150413,7 +150413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150442,7 +150442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150472,7 +150472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150501,7 +150501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150531,7 +150531,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150560,7 +150560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150590,7 +150590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150619,7 +150619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150649,7 +150649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150678,7 +150678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150708,7 +150708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150737,7 +150737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150767,7 +150767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150796,7 +150796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150826,7 +150826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -150859,7 +150859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150889,7 +150889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150918,7 +150918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -150948,7 +150948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -150977,7 +150977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151007,7 +151007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151036,7 +151036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151066,7 +151066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151095,7 +151095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151125,7 +151125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151154,7 +151154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151184,7 +151184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151213,7 +151213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151243,7 +151243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151272,7 +151272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151302,7 +151302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151331,7 +151331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151361,7 +151361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151390,7 +151390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151420,7 +151420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151449,7 +151449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151479,7 +151479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151508,7 +151508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151538,7 +151538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151567,7 +151567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151597,7 +151597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151626,7 +151626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151656,7 +151656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151685,7 +151685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151715,7 +151715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151744,7 +151744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151774,7 +151774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151803,7 +151803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151833,7 +151833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151862,7 +151862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151892,7 +151892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151921,7 +151921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -151951,7 +151951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -151980,7 +151980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152010,7 +152010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152039,7 +152039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152069,7 +152069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152098,7 +152098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152128,7 +152128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152157,7 +152157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152187,7 +152187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152216,7 +152216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152246,7 +152246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152275,7 +152275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152305,7 +152305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152334,7 +152334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152364,7 +152364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152393,7 +152393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152423,7 +152423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152452,7 +152452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152482,7 +152482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152511,7 +152511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152541,7 +152541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152570,7 +152570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152600,7 +152600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152629,7 +152629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152659,7 +152659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152688,7 +152688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152718,7 +152718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152747,7 +152747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152777,7 +152777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152806,7 +152806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152836,7 +152836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152865,7 +152865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152895,7 +152895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152924,7 +152924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -152954,7 +152954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -152983,7 +152983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153013,7 +153013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153042,7 +153042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153072,7 +153072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153101,7 +153101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153131,7 +153131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153160,7 +153160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153190,7 +153190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153219,7 +153219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153249,7 +153249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153278,7 +153278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153308,7 +153308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153337,7 +153337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153367,7 +153367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153396,7 +153396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153426,7 +153426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153446,7 +153446,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153475,7 +153475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153505,7 +153505,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153534,7 +153534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153564,7 +153564,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153593,7 +153593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153623,7 +153623,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153652,7 +153652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153682,7 +153682,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153711,7 +153711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153741,7 +153741,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153770,7 +153770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153800,7 +153800,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153829,7 +153829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153859,7 +153859,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153888,7 +153888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153918,7 +153918,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -153947,7 +153947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -153977,7 +153977,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154006,7 +154006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154036,7 +154036,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154065,7 +154065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154095,7 +154095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154124,7 +154124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154154,7 +154154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154183,7 +154183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154213,7 +154213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154242,7 +154242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154272,7 +154272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154301,7 +154301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154331,7 +154331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154360,7 +154360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154390,7 +154390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154419,7 +154419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154449,7 +154449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154478,7 +154478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154508,7 +154508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154537,7 +154537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154567,7 +154567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154596,7 +154596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154626,7 +154626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154655,7 +154655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154685,7 +154685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154714,7 +154714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154744,7 +154744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154773,7 +154773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154803,7 +154803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154832,7 +154832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154862,7 +154862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154891,7 +154891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154921,7 +154921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -154950,7 +154950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -154980,7 +154980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155009,7 +155009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155039,7 +155039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155068,7 +155068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155098,7 +155098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155127,7 +155127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155157,7 +155157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155186,7 +155186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155216,7 +155216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155245,7 +155245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155275,7 +155275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155304,7 +155304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155334,7 +155334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155363,7 +155363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155393,7 +155393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155422,7 +155422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155452,7 +155452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155481,7 +155481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155511,7 +155511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155540,7 +155540,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155570,7 +155570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155590,7 +155590,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155619,7 +155619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155649,7 +155649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155678,7 +155678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155708,7 +155708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155737,7 +155737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155767,7 +155767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155796,7 +155796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155826,7 +155826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155855,7 +155855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155885,7 +155885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155914,7 +155914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -155944,7 +155944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -155973,7 +155973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156003,7 +156003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156032,7 +156032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156062,7 +156062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156091,7 +156091,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156121,7 +156121,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156150,7 +156150,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156180,7 +156180,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156209,7 +156209,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156239,7 +156239,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156268,7 +156268,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156298,7 +156298,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156327,7 +156327,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156357,7 +156357,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156386,7 +156386,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156416,7 +156416,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156445,7 +156445,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156475,7 +156475,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156504,7 +156504,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156534,7 +156534,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156563,7 +156563,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156593,7 +156593,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156622,7 +156622,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156652,7 +156652,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156681,7 +156681,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156711,7 +156711,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156740,7 +156740,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156770,7 +156770,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156799,7 +156799,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156829,7 +156829,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156858,7 +156858,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156888,7 +156888,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156917,7 +156917,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -156947,7 +156947,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -156976,7 +156976,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157006,7 +157006,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157035,7 +157035,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157065,7 +157065,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157094,7 +157094,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157124,7 +157124,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157153,7 +157153,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157183,7 +157183,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157212,7 +157212,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157242,7 +157242,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157271,7 +157271,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157301,7 +157301,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157330,7 +157330,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157360,7 +157360,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157389,7 +157389,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157419,7 +157419,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157448,7 +157448,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157478,7 +157478,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157507,7 +157507,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157537,7 +157537,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157566,7 +157566,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157596,7 +157596,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157625,7 +157625,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157655,7 +157655,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157684,7 +157684,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157714,7 +157714,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157743,7 +157743,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157773,7 +157773,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157802,7 +157802,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157832,7 +157832,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157861,7 +157861,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157891,7 +157891,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157920,7 +157920,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -157950,7 +157950,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -157979,7 +157979,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158009,7 +158009,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158038,7 +158038,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158068,7 +158068,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158097,7 +158097,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158127,7 +158127,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158156,7 +158156,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158186,7 +158186,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158215,7 +158215,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158245,7 +158245,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158274,7 +158274,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158304,7 +158304,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158333,7 +158333,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158363,7 +158363,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158392,7 +158392,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158422,7 +158422,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158451,7 +158451,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158481,7 +158481,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158510,7 +158510,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158539,7 +158539,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158569,7 +158569,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158598,7 +158598,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158628,7 +158628,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158658,7 +158658,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158687,7 +158687,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158717,7 +158717,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158746,7 +158746,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158776,7 +158776,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158805,7 +158805,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158835,7 +158835,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158864,7 +158864,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158894,7 +158894,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158923,7 +158923,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -158953,7 +158953,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -158982,7 +158982,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159012,7 +159012,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159041,7 +159041,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159071,7 +159071,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159100,7 +159100,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159130,7 +159130,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159159,7 +159159,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159189,7 +159189,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159218,7 +159218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159248,7 +159248,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159277,7 +159277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159307,7 +159307,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159336,7 +159336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159366,7 +159366,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159395,7 +159395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159425,7 +159425,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159454,7 +159454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159484,7 +159484,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159513,7 +159513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159543,7 +159543,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159572,7 +159572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159602,7 +159602,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159631,7 +159631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159661,7 +159661,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159690,7 +159690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159720,7 +159720,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159749,7 +159749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159779,7 +159779,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159808,7 +159808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159838,7 +159838,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159867,7 +159867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159897,7 +159897,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159926,7 +159926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -159956,7 +159956,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -159985,7 +159985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160015,7 +160015,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160044,7 +160044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160074,7 +160074,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160103,7 +160103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160133,7 +160133,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160162,7 +160162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160192,7 +160192,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160221,7 +160221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160251,7 +160251,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160280,7 +160280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160310,7 +160310,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160339,7 +160339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160369,7 +160369,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160398,7 +160398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160428,7 +160428,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160457,7 +160457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160487,7 +160487,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160516,7 +160516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160546,7 +160546,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160575,7 +160575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160605,7 +160605,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160634,7 +160634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160664,7 +160664,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160693,7 +160693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160723,7 +160723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160752,7 +160752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160782,7 +160782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160811,7 +160811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160841,7 +160841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160870,7 +160870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160900,7 +160900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160929,7 +160929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -160959,7 +160959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -160988,7 +160988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161018,7 +161018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161047,7 +161047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161077,7 +161077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161106,7 +161106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161136,7 +161136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161165,7 +161165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161195,7 +161195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161224,7 +161224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161254,7 +161254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161283,7 +161283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161313,7 +161313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161342,7 +161342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161372,7 +161372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161401,7 +161401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161431,7 +161431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161460,7 +161460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161490,7 +161490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161519,7 +161519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161549,7 +161549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161578,7 +161578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161608,7 +161608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161637,7 +161637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161667,7 +161667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161696,7 +161696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161726,7 +161726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161755,7 +161755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161785,7 +161785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161814,7 +161814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161844,7 +161844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161873,7 +161873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161902,7 +161902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161932,7 +161932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -161961,7 +161961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -161991,7 +161991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162021,7 +162021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162050,7 +162050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162080,7 +162080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162109,7 +162109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162139,7 +162139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162168,7 +162168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162198,7 +162198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162227,7 +162227,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162257,7 +162257,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162286,7 +162286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162316,7 +162316,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162345,7 +162345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162375,7 +162375,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162404,7 +162404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162434,7 +162434,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -162467,7 +162467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162497,7 +162497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162526,7 +162526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162556,7 +162556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162585,7 +162585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162615,7 +162615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162644,7 +162644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162674,7 +162674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162703,7 +162703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162733,7 +162733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162762,7 +162762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162792,7 +162792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162821,7 +162821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162851,7 +162851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162880,7 +162880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162910,7 +162910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162939,7 +162939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -162969,7 +162969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -162998,7 +162998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163028,7 +163028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163057,7 +163057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163087,7 +163087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163116,7 +163116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163146,7 +163146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163175,7 +163175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163205,7 +163205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163234,7 +163234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163264,7 +163264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163293,7 +163293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163323,7 +163323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163352,7 +163352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163382,7 +163382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163411,7 +163411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163441,7 +163441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163470,7 +163470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163500,7 +163500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163529,7 +163529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163559,7 +163559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163588,7 +163588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163618,7 +163618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163647,7 +163647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163677,7 +163677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163706,7 +163706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163736,7 +163736,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163765,7 +163765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163795,7 +163795,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163824,7 +163824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163854,7 +163854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163883,7 +163883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163913,7 +163913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -163942,7 +163942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -163972,7 +163972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164001,7 +164001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164031,7 +164031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164060,7 +164060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164090,7 +164090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164119,7 +164119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164149,7 +164149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164178,7 +164178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164208,7 +164208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164237,7 +164237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164267,7 +164267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164296,7 +164296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164326,7 +164326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164355,7 +164355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164385,7 +164385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164414,7 +164414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164444,7 +164444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164473,7 +164473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164503,7 +164503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164532,7 +164532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164562,7 +164562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164591,7 +164591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164621,7 +164621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164650,7 +164650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164680,7 +164680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164709,7 +164709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164739,7 +164739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164768,7 +164768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164798,7 +164798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164827,7 +164827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164857,7 +164857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164886,7 +164886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164916,7 +164916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -164945,7 +164945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -164975,7 +164975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165004,7 +165004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165034,7 +165034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165054,7 +165054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165083,7 +165083,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165113,7 +165113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165142,7 +165142,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165172,7 +165172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165201,7 +165201,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165231,7 +165231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165260,7 +165260,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165290,7 +165290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165319,7 +165319,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165349,7 +165349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165378,7 +165378,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165408,7 +165408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165437,7 +165437,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165467,7 +165467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165496,7 +165496,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165526,7 +165526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165555,7 +165555,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165585,7 +165585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165614,7 +165614,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165644,7 +165644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165673,7 +165673,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165703,7 +165703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165723,7 +165723,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165752,7 +165752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165782,7 +165782,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165811,7 +165811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165841,7 +165841,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165870,7 +165870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165900,7 +165900,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165929,7 +165929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -165959,7 +165959,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -165988,7 +165988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166018,7 +166018,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166047,7 +166047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166077,7 +166077,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166106,7 +166106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166136,7 +166136,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166165,7 +166165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166195,7 +166195,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166224,7 +166224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166254,7 +166254,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166283,7 +166283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166313,7 +166313,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166342,7 +166342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166372,7 +166372,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166401,7 +166401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166431,7 +166431,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166460,7 +166460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166490,7 +166490,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166519,7 +166519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166549,7 +166549,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166578,7 +166578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166608,7 +166608,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166637,7 +166637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166667,7 +166667,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166696,7 +166696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166726,7 +166726,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166755,7 +166755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166785,7 +166785,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166814,7 +166814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166844,7 +166844,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166873,7 +166873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166903,7 +166903,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166932,7 +166932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -166962,7 +166962,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -166991,7 +166991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167021,7 +167021,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167050,7 +167050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167080,7 +167080,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167109,7 +167109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167139,7 +167139,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167168,7 +167168,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167198,7 +167198,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167218,7 +167218,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167247,7 +167247,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167277,7 +167277,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167306,7 +167306,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167336,7 +167336,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167365,7 +167365,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167395,7 +167395,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167424,7 +167424,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167454,7 +167454,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167483,7 +167483,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167513,7 +167513,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167542,7 +167542,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167572,7 +167572,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167601,7 +167601,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167631,7 +167631,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167660,7 +167660,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167690,7 +167690,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167719,7 +167719,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167749,7 +167749,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167778,7 +167778,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167808,7 +167808,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167837,7 +167837,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167867,7 +167867,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167896,7 +167896,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167926,7 +167926,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -167955,7 +167955,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -167985,7 +167985,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168014,7 +168014,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168044,7 +168044,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168073,7 +168073,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168103,7 +168103,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168132,7 +168132,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168162,7 +168162,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168191,7 +168191,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168221,7 +168221,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168250,7 +168250,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168280,7 +168280,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168309,7 +168309,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168339,7 +168339,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168368,7 +168368,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168398,7 +168398,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168427,7 +168427,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168457,7 +168457,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168486,7 +168486,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168516,7 +168516,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168545,7 +168545,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168575,7 +168575,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168604,7 +168604,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168634,7 +168634,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168663,7 +168663,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168693,7 +168693,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168722,7 +168722,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168752,7 +168752,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168781,7 +168781,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168811,7 +168811,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168840,7 +168840,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168870,7 +168870,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168899,7 +168899,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168929,7 +168929,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -168958,7 +168958,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -168988,7 +168988,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169017,7 +169017,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169047,7 +169047,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169076,7 +169076,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169106,7 +169106,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169135,7 +169135,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169165,7 +169165,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169194,7 +169194,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169224,7 +169224,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169253,7 +169253,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169283,7 +169283,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169312,7 +169312,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169342,7 +169342,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169371,7 +169371,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169401,7 +169401,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169430,7 +169430,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169460,7 +169460,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169489,7 +169489,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169519,7 +169519,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169548,7 +169548,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169578,7 +169578,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169607,7 +169607,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169637,7 +169637,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169666,7 +169666,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169696,7 +169696,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169725,7 +169725,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169755,7 +169755,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169784,7 +169784,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169814,7 +169814,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169843,7 +169843,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169873,7 +169873,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169902,7 +169902,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169932,7 +169932,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -169961,7 +169961,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -169991,7 +169991,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170020,7 +170020,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170050,7 +170050,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170079,7 +170079,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170109,7 +170109,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170138,7 +170138,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170167,7 +170167,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170197,7 +170197,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170226,7 +170226,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170256,7 +170256,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170286,7 +170286,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170315,7 +170315,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170345,7 +170345,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170374,7 +170374,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170404,7 +170404,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170433,7 +170433,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170463,7 +170463,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170492,7 +170492,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170522,7 +170522,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170551,7 +170551,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170581,7 +170581,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170610,7 +170610,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170640,7 +170640,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170669,7 +170669,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170699,7 +170699,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170728,7 +170728,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170758,7 +170758,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170787,7 +170787,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170817,7 +170817,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170846,7 +170846,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170876,7 +170876,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170905,7 +170905,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170935,7 +170935,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -170964,7 +170964,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -170994,7 +170994,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171023,7 +171023,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171053,7 +171053,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171082,7 +171082,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171112,7 +171112,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171141,7 +171141,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171171,7 +171171,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171200,7 +171200,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171230,7 +171230,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171259,7 +171259,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171289,7 +171289,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171318,7 +171318,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171348,7 +171348,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171377,7 +171377,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171407,7 +171407,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171436,7 +171436,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171466,7 +171466,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171495,7 +171495,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171525,7 +171525,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171554,7 +171554,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171584,7 +171584,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171613,7 +171613,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171643,7 +171643,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171672,7 +171672,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171702,7 +171702,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171731,7 +171731,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171761,7 +171761,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171790,7 +171790,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171820,7 +171820,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171849,7 +171849,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171879,7 +171879,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171908,7 +171908,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171938,7 +171938,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -171967,7 +171967,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -171997,7 +171997,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172026,7 +172026,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172056,7 +172056,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172085,7 +172085,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172115,7 +172115,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172144,7 +172144,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172174,7 +172174,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172203,7 +172203,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172233,7 +172233,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172262,7 +172262,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172292,7 +172292,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172321,7 +172321,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172351,7 +172351,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172380,7 +172380,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172410,7 +172410,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172439,7 +172439,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172469,7 +172469,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172498,7 +172498,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172528,7 +172528,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172557,7 +172557,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172587,7 +172587,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172616,7 +172616,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172646,7 +172646,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172675,7 +172675,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172705,7 +172705,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172734,7 +172734,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172764,7 +172764,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172793,7 +172793,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172823,7 +172823,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172852,7 +172852,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172882,7 +172882,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172911,7 +172911,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -172941,7 +172941,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -172970,7 +172970,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173000,7 +173000,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173029,7 +173029,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173059,7 +173059,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173088,7 +173088,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173118,7 +173118,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173147,7 +173147,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173177,7 +173177,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173206,7 +173206,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173236,7 +173236,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173265,7 +173265,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173295,7 +173295,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173324,7 +173324,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173354,7 +173354,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173383,7 +173383,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173413,7 +173413,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173442,7 +173442,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173472,7 +173472,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173501,7 +173501,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173530,7 +173530,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173560,7 +173560,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173589,7 +173589,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173619,7 +173619,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173649,7 +173649,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173678,7 +173678,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173708,7 +173708,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173737,7 +173737,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173767,7 +173767,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173796,7 +173796,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173826,7 +173826,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173855,7 +173855,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173885,7 +173885,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173914,7 +173914,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -173944,7 +173944,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -173973,7 +173973,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174003,7 +174003,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174032,7 +174032,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174062,7 +174062,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
@@ -174095,7 +174095,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174125,7 +174125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174154,7 +174154,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174184,7 +174184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174213,7 +174213,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174243,7 +174243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174272,7 +174272,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174302,7 +174302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174331,7 +174331,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174361,7 +174361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174390,7 +174390,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174420,7 +174420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174449,7 +174449,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174479,7 +174479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174508,7 +174508,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174538,7 +174538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174567,7 +174567,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174597,7 +174597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174626,7 +174626,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174656,7 +174656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174685,7 +174685,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174715,7 +174715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174744,7 +174744,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174774,7 +174774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174803,7 +174803,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174833,7 +174833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174862,7 +174862,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174892,7 +174892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174921,7 +174921,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -174951,7 +174951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -174980,7 +174980,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175010,7 +175010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175039,7 +175039,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175069,7 +175069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175098,7 +175098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175128,7 +175128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175157,7 +175157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175187,7 +175187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175216,7 +175216,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175246,7 +175246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175275,7 +175275,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175305,7 +175305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175334,7 +175334,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175364,7 +175364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175393,7 +175393,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175423,7 +175423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175452,7 +175452,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175482,7 +175482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175511,7 +175511,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175541,7 +175541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175570,7 +175570,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175600,7 +175600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175629,7 +175629,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175659,7 +175659,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175688,7 +175688,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175718,7 +175718,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175747,7 +175747,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175777,7 +175777,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175806,7 +175806,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175836,7 +175836,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175865,7 +175865,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175895,7 +175895,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175924,7 +175924,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -175954,7 +175954,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -175983,7 +175983,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176013,7 +176013,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176042,7 +176042,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176072,7 +176072,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176101,7 +176101,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176131,7 +176131,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176160,7 +176160,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176190,7 +176190,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176219,7 +176219,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176249,7 +176249,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176278,7 +176278,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176308,7 +176308,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176337,7 +176337,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176367,7 +176367,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176396,7 +176396,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176426,7 +176426,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176455,7 +176455,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176485,7 +176485,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176514,7 +176514,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176544,7 +176544,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176573,7 +176573,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176603,7 +176603,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176632,7 +176632,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176662,7 +176662,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176691,7 +176691,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176721,7 +176721,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176750,7 +176750,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176780,7 +176780,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 14400,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176809,7 +176809,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176839,7 +176839,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176868,7 +176868,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176898,7 +176898,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176927,7 +176927,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -176957,7 +176957,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -176986,7 +176986,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177016,7 +177016,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177045,7 +177045,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177075,7 +177075,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177104,7 +177104,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177134,7 +177134,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177163,7 +177163,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177193,7 +177193,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177222,7 +177222,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177252,7 +177252,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177281,7 +177281,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177311,7 +177311,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177340,7 +177340,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177370,7 +177370,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177399,7 +177399,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177429,7 +177429,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177458,7 +177458,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177488,7 +177488,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177517,7 +177517,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177547,7 +177547,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177576,7 +177576,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177606,7 +177606,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177635,7 +177635,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177665,7 +177665,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177694,7 +177694,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177724,7 +177724,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177753,7 +177753,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177783,7 +177783,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177812,7 +177812,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177842,7 +177842,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177871,7 +177871,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177901,7 +177901,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177930,7 +177930,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -177960,7 +177960,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -177989,7 +177989,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178019,7 +178019,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178048,7 +178048,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178078,7 +178078,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178107,7 +178107,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178137,7 +178137,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178166,7 +178166,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178196,7 +178196,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178225,7 +178225,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178255,7 +178255,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178284,7 +178284,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178314,7 +178314,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178343,7 +178343,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178373,7 +178373,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178402,7 +178402,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178432,7 +178432,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178461,7 +178461,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178491,7 +178491,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178520,7 +178520,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178550,7 +178550,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178579,7 +178579,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178609,7 +178609,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178638,7 +178638,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178668,7 +178668,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178697,7 +178697,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178727,7 +178727,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178756,7 +178756,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178786,7 +178786,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178815,7 +178815,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178845,7 +178845,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178874,7 +178874,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178904,7 +178904,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178933,7 +178933,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -178963,7 +178963,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -178992,7 +178992,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179022,7 +179022,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179051,7 +179051,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179081,7 +179081,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179110,7 +179110,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179140,7 +179140,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179169,7 +179169,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179199,7 +179199,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179228,7 +179228,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179258,7 +179258,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179287,7 +179287,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179317,7 +179317,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179346,7 +179346,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179376,7 +179376,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179405,7 +179405,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179435,7 +179435,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179464,7 +179464,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179494,7 +179494,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179523,7 +179523,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179553,7 +179553,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179582,7 +179582,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179612,7 +179612,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179641,7 +179641,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179671,7 +179671,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179700,7 +179700,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179730,7 +179730,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179759,7 +179759,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179789,7 +179789,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179818,7 +179818,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179848,7 +179848,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179877,7 +179877,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179907,7 +179907,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179936,7 +179936,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -179966,7 +179966,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -179995,7 +179995,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180025,7 +180025,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180054,7 +180054,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180084,7 +180084,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180113,7 +180113,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180143,7 +180143,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180172,7 +180172,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180202,7 +180202,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180231,7 +180231,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180261,7 +180261,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180290,7 +180290,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180320,7 +180320,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180349,7 +180349,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180379,7 +180379,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180408,7 +180408,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180438,7 +180438,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180467,7 +180467,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180497,7 +180497,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180526,7 +180526,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180556,7 +180556,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180585,7 +180585,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180615,7 +180615,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180644,7 +180644,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180674,7 +180674,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180703,7 +180703,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180733,7 +180733,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180762,7 +180762,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180792,7 +180792,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180821,7 +180821,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180851,7 +180851,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180880,7 +180880,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180910,7 +180910,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180939,7 +180939,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -180969,7 +180969,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -180998,7 +180998,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181028,7 +181028,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181057,7 +181057,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181087,7 +181087,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181116,7 +181116,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181146,7 +181146,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181175,7 +181175,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181205,7 +181205,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181234,7 +181234,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181264,7 +181264,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181293,7 +181293,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181323,7 +181323,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181352,7 +181352,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181382,7 +181382,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181411,7 +181411,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181441,7 +181441,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181470,7 +181470,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181500,7 +181500,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181529,7 +181529,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181559,7 +181559,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181588,7 +181588,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181618,7 +181618,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181647,7 +181647,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181677,7 +181677,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181706,7 +181706,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181735,7 +181735,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181765,7 +181765,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181794,7 +181794,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181824,7 +181824,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181854,7 +181854,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181883,7 +181883,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181913,7 +181913,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -181942,7 +181942,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -181972,7 +181972,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182001,7 +182001,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182031,7 +182031,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182060,7 +182060,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182090,7 +182090,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182119,7 +182119,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182149,7 +182149,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182178,7 +182178,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182208,7 +182208,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182237,7 +182237,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182267,7 +182267,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182296,7 +182296,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182326,7 +182326,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182355,7 +182355,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182385,7 +182385,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182414,7 +182414,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182444,7 +182444,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182473,7 +182473,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182503,7 +182503,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182532,7 +182532,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182562,7 +182562,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182591,7 +182591,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182621,7 +182621,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182650,7 +182650,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182680,7 +182680,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182709,7 +182709,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182739,7 +182739,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182768,7 +182768,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182798,7 +182798,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182827,7 +182827,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182857,7 +182857,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182886,7 +182886,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182916,7 +182916,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -182945,7 +182945,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -182975,7 +182975,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183004,7 +183004,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183034,7 +183034,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183063,7 +183063,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183093,7 +183093,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183122,7 +183122,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183152,7 +183152,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183181,7 +183181,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183211,7 +183211,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183240,7 +183240,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183270,7 +183270,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183299,7 +183299,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183329,7 +183329,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183358,7 +183358,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183388,7 +183388,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183417,7 +183417,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183447,7 +183447,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183476,7 +183476,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183506,7 +183506,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183535,7 +183535,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183565,7 +183565,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183594,7 +183594,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183624,7 +183624,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183653,7 +183653,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183683,7 +183683,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183712,7 +183712,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183742,7 +183742,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183771,7 +183771,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183801,7 +183801,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183830,7 +183830,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183860,7 +183860,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183889,7 +183889,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183919,7 +183919,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -183948,7 +183948,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -183978,7 +183978,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184007,7 +184007,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184037,7 +184037,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184066,7 +184066,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184096,7 +184096,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184125,7 +184125,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184155,7 +184155,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184184,7 +184184,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184214,7 +184214,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184243,7 +184243,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184273,7 +184273,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184302,7 +184302,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184332,7 +184332,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184361,7 +184361,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184391,7 +184391,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184420,7 +184420,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184450,7 +184450,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184479,7 +184479,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184509,7 +184509,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184538,7 +184538,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184568,7 +184568,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184597,7 +184597,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184627,7 +184627,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184656,7 +184656,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184686,7 +184686,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184715,7 +184715,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184745,7 +184745,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184774,7 +184774,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184804,7 +184804,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184833,7 +184833,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184863,7 +184863,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184892,7 +184892,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184922,7 +184922,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -184951,7 +184951,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -184981,7 +184981,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185010,7 +185010,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185040,7 +185040,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185069,7 +185069,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185098,7 +185098,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185128,7 +185128,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185157,7 +185157,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185187,7 +185187,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185217,7 +185217,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185246,7 +185246,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185276,7 +185276,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185305,7 +185305,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185335,7 +185335,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185364,7 +185364,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185394,7 +185394,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185423,7 +185423,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185453,7 +185453,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185482,7 +185482,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185512,7 +185512,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185541,7 +185541,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185571,7 +185571,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       },
@@ -185600,7 +185600,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": false,
+          "ignore_task_failure": false,
           "io_timeout": 3600
         }
       },
@@ -185630,7 +185630,7 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_swarming_task_failure": true,
+          "ignore_task_failure": true,
           "io_timeout": 3600
         }
       }
diff --git a/src/testing/buildbot/filters/OWNERS b/src/testing/buildbot/filters/OWNERS
index b9ed1d6..5f8334b 100644
--- a/src/testing/buildbot/filters/OWNERS
+++ b/src/testing/buildbot/filters/OWNERS
@@ -10,4 +10,5 @@
 per-file browser-side-navigation*=scottmg@chromium.org
 per-file browser-side-navigation*=yzshen@chromium.org
 
-# COMPONENT: Infra>Platform>Buildbot
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
diff --git a/src/testing/buildbot/filters/ash_mus_unittests.filter b/src/testing/buildbot/filters/ash_mus_unittests.filter
new file mode 100644
index 0000000..5ee0bfc
--- /dev/null
+++ b/src/testing/buildbot/filters/ash_mus_unittests.filter
@@ -0,0 +1,422 @@
+-AcceleratorControllerTest.DisallowedAtModalWindow
+-AcceleratorControllerTest.GlobalAccelerators
+-AcceleratorControllerTest.RotateScreen
+-AshNativeCursorManagerTest.FractionalScale
+-AshNativeCursorManagerTest.LockCursor
+-AshNativeCursorManagerTest.SetCursor
+-AshNativeCursorManagerTest.SetCursorSet
+-AshNativeCursorManagerTest.SetDeviceScaleFactorAndRotation
+-AshNativeCursorManagerTest.UIScaleShouldNotChangeCursor
+-AshPopupAlignmentDelegateTest.DockedMode
+-AshPopupAlignmentDelegateTest.Unified
+-AutoclickTest.KeyModifiersReleased
+-AutoclickTest.MouseMovement
+-AutoclickTest.MovementThreshold
+-AutoclickTest.MultipleKeyModifiers
+-AutoclickTest.SingleKeyModifier
+-AutoclickTest.SynthesizedMouseMovesIgnored
+-AutoclickTest.ToggleEnabled
+-AutoclickTest.UserInputCancelsAutoclick
+-CursorWindowControllerTest.DSF
+-CursorWindowControllerTest.MoveToDifferentDisplay
+-CursorWindowControllerTest.VisibilityTest
+-DIPTest.WorkArea
+-DisplayConfigurationControllerTest.ErasesAnimatorOnAnimationEnded
+-DisplayManagerFontTest.TextSubpixelPositioningWithDsf125External
+-DisplayManagerFontTest.TextSubpixelPositioningWithDsf125Internal
+-DisplayManagerFontTest.TextSubpixelPositioningWithDsf125InternalWithScaling
+-DisplayManagerFontTest.TextSubpixelPositioningWithDsf200External
+-DisplayManagerFontTest.TextSubpixelPositioningWithDsf200Internal
+-DisplayManagerOrientationTest.LockToSpecificOrientation
+-DisplayManagerOrientationTest.SaveRestoreUserRotationLock
+-DisplayManagerOrientationTest.UserRotationLockReverse
+-DisplayManagerTest.CheckInitializationOfRotationProperty
+-DisplayManagerTest.DisplayAddRemoveAtTheSameTime
+-DisplayManagerTest.EmulatorTest
+-DisplayManagerTest.LayoutMorethanThreeDisplaysTest
+-DisplayManagerTest.MirroredLayout
+-DisplayManagerTest.NativeDisplaysChangedAfterPrimaryChange
+-DisplayManagerTest.NoMirrorInThreeDisplays
+-DisplayManagerTest.NoOverlappedDisplays
+-DisplayManagerTest.NoOverlappedDisplaysAfterResolutionChange
+-DisplayManagerTest.NoOverlappedDisplaysNotFitBetweenTwo
+-DisplayManagerTest.NoOverlappedDisplaysWithDetachedDisplays
+-DisplayManagerTest.NoRotateUnifiedDesktop
+-DisplayManagerTest.NotifyPrimaryChange
+-DisplayManagerTest.NotifyPrimaryChangeUndock
+-DisplayManagerTest.OverscanInsetsTest
+-DisplayManagerTest.ResolutionChangeInUnifiedMode
+-DisplayManagerTest.Rotate
+-DisplayManagerTest.RotateInSoftwareMirroring
+-DisplayManagerTest.ScaleOnlyChange
+-DisplayManagerTest.SingleDisplayToSoftwareMirroring
+-DisplayManagerTest.SoftwareMirroring
+-DisplayManagerTest.SoftwareMirroringWithCompositingCursor
+-DisplayManagerTest.TestDeviceScaleOnlyChange
+-DisplayManagerTest.TestNativeDisplaysChanged
+-DisplayManagerTest.TestNativeDisplaysChangedNoInternal
+-DisplayManagerTest.TouchCalibrationTest
+-DisplayManagerTest.UIScale
+-DisplayManagerTest.UnifiedDesktopBasic
+-DisplayManagerTest.UnifiedDesktopEnabledWithExtended
+-DisplayManagerTest.UnifiedDesktopWith2xDSF
+-DisplayManagerTest.UpdateDisplayTest
+-DisplayManagerTest.UpdateDisplayWithHostOrigin
+-DisplayManagerTest.UpdateMouseCursorAfterRotateZoom
+-DisplayManagerTest.UpdateThreeDisplaysWithDefaultLayout
+-DisplayManagerTest.Use125DSFForUIScaling
+-DisplayManagerTest.ZeroOverscanInsets
+-DisplayUtilTest.RotatedDisplay
+-DragDropControllerTest.CaptureLostCancelsDragDrop
+-DragDropControllerTest.DragCancelAcrossDisplays
+-DragDropControllerTest.DragCancelOnDisplayDisconnect
+-DragDropControllerTest.DragDropInMultipleViewsMultipleWidgetsTest
+-DragDropControllerTest.DragDropInMultipleViewsSingleWidgetTest
+-DragDropControllerTest.DragDropInSingleViewTest
+-DragDropControllerTest.DragDropWithZeroDragUpdates
+-DragDropControllerTest.PressingEscapeCancelsDragDrop
+-DragDropControllerTest.SyntheticEventsDuringDragDrop
+-DragDropControllerTest.TouchDragDropCancelsOnLongTap
+-DragDropControllerTest.TouchDragDropCompletesOnFling
+-DragDropControllerTest.TouchDragDropInMultipleWindows
+-DragDropControllerTest.TouchDragDropLongTapGestureIsForwarded
+-DragDropControllerTest.ViewRemovedWhileInDragDropTest
+-DragDropControllerTest.WindowDestroyedDuringDragDrop
+-DragWindowResizerTest.CursorDeviceScaleFactor
+-DragWindowResizerTest.DragWindowController
+-DragWindowResizerTest.DragWindowControllerAcrossThreeDisplays
+-DragWindowResizerTest.MoveWindowAcrossDisplays
+-DragWindowResizerTest.WarpMousePointer
+-DragWindowResizerTest.WindowDragWithMultiDisplays
+-DragWindowResizerTest.WindowDragWithMultiDisplaysActiveRoot
+-DragWindowResizerTest.WindowDragWithMultiDisplaysRightToLeft
+-ExtendedDesktopTest.CaptureEventLocationHighDPI
+-ExtendedDesktopTest.ConvertPoint
+-ExtendedDesktopTest.GetRootWindowAt
+-ExtendedDesktopTest.GetRootWindowMatching
+-ExtendedDesktopTest.KeyEventsOnLockScreen
+-ExtendedDesktopTest.TestCursor
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestOnLeft
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestOnRight
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestOnTopBottom
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestThreeDisplays
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestThreeDisplaysWithLayout
+-ExtendedMouseWarpControllerTest.IndicatorBoundsTestThreeDisplaysWithLayout2
+-ImmersiveFullscreenControllerTest.EndRevealViaGesture
+-ImmersiveFullscreenControllerTest.MouseEventsVerticalDisplayLayout
+-LaserPointerControllerTest.LaserPointerPrediction
+-LaserPointerControllerTest.LaserPointerRenderer
+-LockStateControllerTest.CancelLockToShutdown
+-LockStateControllerTest.HonorPowerButtonInDockedMode
+-LockStateControllerTest.IgnorePowerButtonIfScreenIsOff
+-LockStateControllerTest.LegacyGuest
+-LockStateControllerTest.LegacyLockAndShutDown
+-LockStateControllerTest.LegacyNotLoggedIn
+-LockStateControllerTest.Lock
+-LockStateControllerTest.LockAndCancel
+-LockStateControllerTest.LockAndCancelAndLockAgain
+-LockStateControllerTest.LockAndUnlock
+-LockStateControllerTest.LockButtonBasic
+-LockStateControllerTest.LockButtonBasicGuest
+-LockStateControllerTest.LockButtonBasicNotLoggedIn
+-LockStateControllerTest.LockToShutdown
+-LockStateControllerTest.LockWithoutButton
+-LockStateControllerTest.PowerButtonPreemptsLockButton
+-LockStateControllerTest.RequestAndCancelShutdownFromLockScreen
+-LockStateControllerTest.RequestShutdownFromLockScreen
+-LockStateControllerTest.RequestShutdownFromLoginScreen
+-LockStateControllerTest.Screenshot
+-LockStateControllerTest.ShutdownWhenNotLoggedIn
+-LockStateControllerTest.ShutdownWithoutButton
+-LockStateControllerTest.TestHiddenWallpaperLockCancel
+-LockStateControllerTest.TestHiddenWallpaperLockUnlock
+-LtrRtl/PanelWindowResizerTextDirectionTest.DragReordersPanelsHorizontal/0
+-LtrRtl/PanelWindowResizerTextDirectionTest.DragReordersPanelsHorizontal/1
+-MagnificationControllerTest.CenterTextCaretInViewport
+-MagnificationControllerTest.CenterTextCaretNotInsideViewport
+-MagnificationControllerTest.EnableAndDisable
+-MagnificationControllerTest.EnableMagnifierInUnifiedDesktop
+-MagnificationControllerTest.FollowFocusChanged
+-MagnificationControllerTest.FollowTextInputFieldFocus
+-MagnificationControllerTest.FollowTextInputFieldKeyPress
+-MagnificationControllerTest.MagnifyAndUnmagnify
+-MagnificationControllerTest.MoveWindow
+-MagnificationControllerTest.PanWindow2xLeftToRight
+-MagnificationControllerTest.PanWindow2xRightToLeft
+-MagnificationControllerTest.PanWindowToLeft
+-MagnificationControllerTest.PanWindowToRight
+-MagnificationControllerTest.PointOfInterest
+-MagnifierKeyScrollerTest.Basic
+-MaximizeModeControllerTest.CloseLidWhileInMaximizeMode
+-MaximizeModeControllerTest.DisplayDisconnectionDuringOverview
+-MaximizeModeControllerTest.ForceClamshellModeTest
+-MaximizeModeControllerTest.ForceTouchViewModeTest
+-MaximizeModeControllerTest.HingeAligned
+-MaximizeModeControllerTest.HingeAnglesWithLidClosed
+-MaximizeModeControllerTest.InitializedWhileTabletModeSwitchOn
+-MaximizeModeControllerTest.LaptopTest
+-MaximizeModeControllerTest.MaximizeModeAfterExitingDockedMode
+-MaximizeModeControllerTest.MaximizeModeTest
+-MaximizeModeControllerTest.NoMaximizeModeWithDisabledInternalDisplay
+-MaximizeModeControllerTest.StableHingeAnglesWithLidOpened
+-MaximizeModeControllerTest.TabletModeTransition
+-MaximizeModeControllerTest.TabletModeTransitionNoKeyboardAccelerometer
+-MaximizeModeControllerTest.UnstableHingeAnglesWhenLidRecentlyOpened
+-MaximizeModeControllerTest.UnstableHingeAnglesWithLidOpened
+-MaximizeModeControllerTest.VerifyTouchViewEnabledDisabledCounts
+-MaximizeModeControllerTest.VerticalHingeTest
+-MaximizeModeControllerTest.VerticalHingeUnstableAnglesTest
+-MaximizeModeControllerTest.WasLidOpenedRecentlyOverTime
+-MaximizeModeWindowManagerTest.TryToDesktopSizeDragUnmaximizable
+-MirrorOnBootTest.MirrorOnBoot
+-MirrorWindowControllerTest.MirrorCursorBasic
+-MirrorWindowControllerTest.MirrorCursorLocations
+-MirrorWindowControllerTest.MirrorCursorMoveOnEnter
+-MirrorWindowControllerTest.MirrorCursorRotate
+-MouseCursorEventFilterTest.CursorDeviceScaleFactor
+-MouseCursorEventFilterTest.SetMouseWarpModeFlag
+-MouseCursorEventFilterTest.WarpMouse
+-MouseCursorEventFilterTest.WarpMouseDifferentScaleDisplaysInNative
+-MouseCursorEventFilterTest.WarpMouseDifferentSizeDisplays
+-MultiWindowResizeControllerTest.ClickOutside
+-NormalPanelPopup/PanelWindowResizerTransientTest.PanelWithTransientChild/0
+-NormalPanelPopup/PanelWindowResizerTransientTest.PanelWithTransientChild/1
+-NormalPanelPopup/PanelWindowResizerTransientTest.PanelWithTransientChild/2
+-OverviewButtonTrayTest.HideAnimationAlwaysCompletes
+-PanelLayoutManagerTest.DockUndockTest
+-PanelLayoutManagerTest.UndockTest
+-PanelWindowResizerTest.AttachToSecondDisplay
+-PanelWindowResizerTest.AttachToSecondFullscreenDisplay
+-PanelWindowResizerTest.DetachAcrossDisplays
+-PanelWindowResizerTest.DetachThenAttachToSecondDisplay
+-PanelWindowResizerTest.DetachThenDragAcrossDisplays
+-PanelWindowResizerTest.DetachThenHideShelf
+-PanelWindowResizerTest.DragMovesToPanelLayer
+-PanelWindowResizerTest.DragReordersPanelsVertical
+-PanelWindowResizerTest.PanelDetachReattachBottom
+-PanelWindowResizerTest.PanelDetachReattachLeft
+-PanelWindowResizerTest.PanelDetachReattachMultipleDisplays
+-PanelWindowResizerTest.PanelDetachReattachRight
+-PanelWindowResizerTest.RevertDragRestoresAttachment
+-PartialMagnificationControllerTest.ActivatesOnlyForPointer
+-PartialMagnificationControllerTest.ActiveOnPointerDown
+-PartialMagnificationControllerTest.DisablingDisablesActive
+-PartialMagnificationControllerTest.InactiveByDefault
+-PartialMagnificationControllerTest.MagnifierFollowsPointer
+-PartialMagnificationControllerTest.MultipleDisplays
+-PartialScreenshotControllerTest.BasicMouse
+-PartialScreenshotControllerTest.BasicTouch
+-PartialScreenshotControllerTest.JustClick
+-PartialScreenshotControllerTest.LargeCursor
+-PartialScreenshotControllerTest.MouseWarpTest
+-PartialScreenshotControllerTest.PointerEventsWorkWhenPointerOnlyActive
+-PartialScreenshotControllerTest.StartSessionWhileMousePressed
+-PartialScreenshotControllerTest.TouchMousePointerHoverIgnoredWithPointerEvents
+-PartialScreenshotControllerTest.TwoFingerTouch
+-PartialScreenshotControllerTest.VisibilityTest
+-ResizeShadowAndCursorTest.MaximizeRestore
+-ResizeShadowAndCursorTest.MouseDrag
+-ResizeShadowAndCursorTest.MouseHover
+-ResizeShadowAndCursorTest.Touch
+-ResolutionNotificationControllerTest.AcceptButton
+-ResolutionNotificationControllerTest.Basic
+-ResolutionNotificationControllerTest.ClickMeansAccept
+-ResolutionNotificationControllerTest.Close
+-ResolutionNotificationControllerTest.DisplayDisconnected
+-ResolutionNotificationControllerTest.Fallback
+-ResolutionNotificationControllerTest.MultipleResolutionChange
+-ResolutionNotificationControllerTest.Timeout
+-RootWindowControllerTest.MoveWindows_Basic
+-RootWindowControllerTest.MoveWindows_LockWindowsInUnified
+-RootWindowTransformersTest.ConvertHostToRootCoords
+-RootWindowTransformersTest.LetterBoxPillarBox
+-RootWindowTransformersTest.RotateAndMagnify
+-RootWindowTransformersTest.ScaleAndMagnify
+-RootWindowTransformersTest.TouchScaleAndMagnify
+-ScreenLayoutObserverTest.AddingRemovingDisplayExtendedModeMessage
+-ScreenLayoutObserverTest.DisplayConfigurationChangedTwice
+-ScreenLayoutObserverTest.DisplayNotifications
+-ScreenLayoutObserverTest.DockedModeWithExternalPrimaryDisplayMessage
+-ScreenLayoutObserverTest.EnteringExitingUnifiedModeMessage
+-ScreenLayoutObserverTest.ExitMirrorModeBecauseOfDockedModeMessage
+-ScreenLayoutObserverTest.ExitMirrorModeBecauseOfThirdDisplayMessage
+-ScreenLayoutObserverTest.ExitMirrorModeNoInternalDisplayBecauseOfDisplayRemovedMessage
+-ScreenLayoutObserverTest.OverscanDisplay
+-ScreenLayoutObserverTest.UpdateAfterSuppressDisplayNotification
+-ScreenPositionControllerTest.ConvertHostPointToScreen
+-ScreenPositionControllerTest.ConvertHostPointToScreenHiDPI
+-ScreenPositionControllerTest.ConvertHostPointToScreenRotate
+-ScreenPositionControllerTest.ConvertHostPointToScreenUIScale
+-ScreenPositionControllerTest.ConvertToScreenWhileRemovingSecondaryDisplay
+-ScreenRotationAnimatorTest.RotatesDuringRotation
+-ScreenRotationAnimatorTest.RotatesToDifferentRotation
+-ScreenRotationAnimatorTest.ShouldCompleteAnimations
+-ScreenRotationAnimatorTest.ShouldNotifyObserver
+-ScreenRotationAnimatorTest.ShouldNotifyObserverOnce
+-ScreenRotationAnimatorTest.ShouldNotRotateTheSameRotation
+-ScreenshotControllerTest.BreaksCapture
+-ScreenshotControllerTest.MultipleDisplays
+-ScreenUtilTest.ShelfDisplayBoundsInUnifiedDesktop
+-ShelfLayoutManagerTest.AutoHideShelfOnScreenBoundary
+-ShelfLayoutManagerTest.ShelfLayoutInUnifiedDesktop
+-ShelfWindowWatcherTest.DragWindow
+-ShellTest2.DontCrashWhenWindowDeleted
+-ShellTest.TestPreTargetHandlerOrder
+-StickyKeysOverlayTest.OverlayNotDestroyedAfterDisplayRemoved
+-SystemGestureEventFilterTest.ControlWindowGetsMultiFingerGestureEvents
+-SystemGestureEventFilterTest.DragLeftNearEdgeSnaps
+-SystemGestureEventFilterTest.DragRightNearEdgeSnaps
+-SystemGestureEventFilterTest.ThreeFingerGestureStopsDrag
+-SystemGestureEventFilterTest.TwoFingerAttemptResizeLeftAndRightEdgesSimultaneously
+-SystemGestureEventFilterTest.TwoFingerDrag
+-SystemGestureEventFilterTest.TwoFingerDragDelayed
+-SystemGestureEventFilterTest.WindowsWithMaxSizeDontSnap
+-SystemTrayTest.PersistentBubble
+-ToastManagerTest.PositionWithUnifiedDesktop
+-TooltipControllerTest.HideTooltipWhenCursorHidden
+-ToplevelWindowEventHandlerTest.Bottom
+-ToplevelWindowEventHandlerTest.BottomLeft
+-ToplevelWindowEventHandlerTest.BottomLeftPastMinimum
+-ToplevelWindowEventHandlerTest.BottomLeftWorkArea
+-ToplevelWindowEventHandlerTest.BottomRight
+-ToplevelWindowEventHandlerTest.BottomRightPastMinimum
+-ToplevelWindowEventHandlerTest.BottomRightWorkArea
+-ToplevelWindowEventHandlerTest.BottomWorkArea
+-ToplevelWindowEventHandlerTest.Caption
+-ToplevelWindowEventHandlerTest.CaptureLossAfterMouseRelease
+-ToplevelWindowEventHandlerTest.DontDragToNegativeY
+-ToplevelWindowEventHandlerTest.DontGotWiderThanScreen
+-ToplevelWindowEventHandlerTest.DragSnappedWindowToExternalDisplay
+-ToplevelWindowEventHandlerTest.EscapeReverts
+-ToplevelWindowEventHandlerTest.GestureAttemptMinimizeUnminimizeableWindow
+-ToplevelWindowEventHandlerTest.GestureDrag
+-ToplevelWindowEventHandlerTest.GestureDragCaptureLoss
+-ToplevelWindowEventHandlerTest.GestureDragForUnresizableWindow
+-ToplevelWindowEventHandlerTest.GestureDragMultipleWindows
+-ToplevelWindowEventHandlerTest.GestureDragToRestore
+-ToplevelWindowEventHandlerTest.GrowBox
+-ToplevelWindowEventHandlerTest.Left
+-ToplevelWindowEventHandlerTest.LeftPastMinimum
+-ToplevelWindowEventHandlerTest.MinimizeMaximizeCompletes
+-ToplevelWindowEventHandlerTest.Right
+-ToplevelWindowEventHandlerTest.RightPastMinimum
+-ToplevelWindowEventHandlerTest.RunMoveLoopFailsDuringInProgressDrag
+-ToplevelWindowEventHandlerTest.Top
+-ToplevelWindowEventHandlerTest.TopLeft
+-ToplevelWindowEventHandlerTest.TopLeftPastMinimum
+-ToplevelWindowEventHandlerTest.TopRight
+-ToplevelWindowEventHandlerTest.TopRightPastMinimum
+-ToplevelWindowEventHandlerTest.WindowPositionAutoManagement
+-TouchHudDebugTest.DualDisplays
+-TouchHudDebugTest.Headless
+-TouchHudDebugTest.MirrorDisplays
+-TouchHudDebugTest.RemovePrimaryDisplay
+-TouchHudDebugTest.RemoveSecondaryDisplay
+-TouchHudDebugTest.SingleDisplay
+-TouchHudDebugTest.SwapPrimaryDisplay
+-TouchHudDebugTest.SwapPrimaryThenMirrorDisplays
+-TouchHudProjectionTest.DisableWhileTouching
+-TouchHudProjectionTest.DoubleTouch
+-TouchHudProjectionTest.TouchMoveCancel
+-TouchHudProjectionTest.TouchMoveRelease
+-TrayRotationLockTest.CreateDefaultView
+-TrayRotationLockTest.CreateDefaultViewDuringMaximizeMode
+-TrayRotationLockTest.CreateTrayViewDuringMaximizeModeAndRotationLock
+-TrayRotationLockTest.DefaultViewVisibilityChangesDuringMaximizeMode
+-TrayRotationLockTest.InternalDisplayNotAvailableAtCreation
+-TrayRotationLockTest.PerformActionOnDefaultView
+-TrayRotationLockTest.TrayViewVisibilityChangesDuringMaximizeMode
+-UnifiedMouseWarpControllerTest.BoundaryTest
+-UnifiedMouseWarpControllerTest.WarpMouse
+-VirtualKeyboardRootWindowControllerTest.FollowInputFocus
+-VirtualKeyboardRootWindowControllerTest.VirtualKeyboardOnTouchableDisplayOnly
+-WallpaperControllerTest.GetMaxDisplaySize
+-WebNotificationTrayTest.PopupShownOnBothDisplays
+-WindowCycleControllerTest.MultiDisplayPositioning
+-WindowManagerTest.ActivateOnTouch
+-WindowManagerTest.MouseEventCursors
+-WindowManagerTest.TestCursorClientObserver
+-WindowManagerTest.UpdateCursorVisibility
+-WindowManagerTest.UpdateCursorVisibilityAccelerator
+-WindowManagerTest.UpdateCursorVisibilityOnKeyEvent
+-WindowScreenshotControllerTest.KeyboardOperation
+-WindowScreenshotControllerTest.MouseOperation
+-WindowScreenshotControllerTest.MultiDisplays
+-WindowSelectorTest.Basic
+-WindowSelectorTest.DisplayOrientationChanged
+-WindowSelectorTest.MultiMonitorReversedOrder
+-WindowSelectorTest.OverviewScreenRotation
+-WindowSelectorTest.OverviewWhileDragging
+-WindowTreeHostManagerStartupTest.Startup
+-WindowTreeHostManagerTest.BoundsUpdated
+-WindowTreeHostManagerTest.ConvertHostToRootCoords
+-WindowTreeHostManagerTest.DockToSingle
+-WindowTreeHostManagerTest.FindNearestDisplay
+-WindowTreeHostManagerTest.GetRootWindowForDisplayIdDuringDisplayDisconnection
+-WindowTreeHostManagerTest.MirrorToDockedWithFullscreen
+-WindowTreeHostManagerTest.OverscanInsets
+-WindowTreeHostManagerTest.ReplacePrimary
+-WindowTreeHostManagerTest.ReplaceSwappedPrimary
+-WindowTreeHostManagerTest.Rotate
+-WindowTreeHostManagerTest.ScaleRootWindow
+-WindowTreeHostManagerTest.SecondaryDisplayLayout
+-WindowTreeHostManagerTest.SetPrimaryWithFourDisplays
+-WindowTreeHostManagerTest.SetPrimaryWithThreeDisplays
+-WindowTreeHostManagerTest.SwapPrimaryById
+-WindowTreeHostManagerTest.UpdateMouseLocationAfterDisplayChange
+-WindowTreeHostManagerTest.UpdateMouseLocationAfterDisplayChange_2ndOnLeft
+-WindowTreeHostManagerTest.UpdateMouseLocationAfterDisplayChange_PrimaryDisconnected
+-WindowTreeHostManagerTest.UpdateMouseLocationAfterDisplayChange_SwapPrimary
+-WorkspaceControllerTest.DragWindowKeepsShelfAutohidden
+-WorkspaceControllerTest.DragWindowOverlapShelf
+-WorkspaceControllerTest.TestRestoreToUserModifiedBounds
+-WorkspaceEventHandlerTest.DeleteWhenDragging
+-WorkspaceEventHandlerTest.DeleteWhileInRunLoop
+-WorkspaceEventHandlerTest.DoubleClickCaptionTogglesMaximize
+-WorkspaceEventHandlerTest.DoubleClickSingleAxisDoesntResizeHorizontalEdgeIfConstrained
+-WorkspaceEventHandlerTest.DoubleClickSingleAxisDoesntResizeVerticalEdgeIfConstrained
+-WorkspaceEventHandlerTest.DoubleClickSingleAxisResizeEdge
+-WorkspaceEventHandlerTest.DoubleClickSingleAxisWhenSideSnapped
+-WorkspaceLayoutManagerKeyboardTest.ChangeWorkAreaInNonStickyMode
+-WorkspaceLayoutManagerKeyboardTest.IgnoreWorkAreaChangeinNonStickyMode
+-WorkspaceWindowResizerTest.CancelSnapPhantom
+-WorkspaceWindowResizerTest.CheckUserWindowManagedFlags
+-WorkspaceWindowResizerTest.CtrlDragResizeToExactPosition
+-WorkspaceWindowResizerTest.DontDragOffBottom
+-WorkspaceWindowResizerTest.DontDragOffBottomWithMultiDisplay
+-WorkspaceWindowResizerTest.DontDragOffTop
+-WorkspaceWindowResizerTest.DragSnapped
+-WorkspaceWindowResizerTest.DragWindowOutsideRightToSecondaryDisplay
+-WorkspaceWindowResizerTest.Edge
+-WorkspaceWindowResizerTest.MagneticallyAttach
+-WorkspaceWindowResizerTest.MagneticallyResize_BOTTOM
+-WorkspaceWindowResizerTest.MagneticallyResize_BOTTOMLEFT
+-WorkspaceWindowResizerTest.MagneticallyResize_BOTTOMRIGHT
+-WorkspaceWindowResizerTest.MagneticallyResize_LEFT
+-WorkspaceWindowResizerTest.MagneticallyResize_RIGHT
+-WorkspaceWindowResizerTest.MagneticallyResize_TOP
+-WorkspaceWindowResizerTest.MagneticallyResize_TOPLEFT
+-WorkspaceWindowResizerTest.MagneticallyResize_TOPRIGHT
+-WorkspaceWindowResizerTest.MouseMoveWithTouchDrag
+-WorkspaceWindowResizerTest.NonResizableWindows
+-WorkspaceWindowResizerTest.PhantomSnapMaxSize
+-WorkspaceWindowResizerTest.ResizeBottomOutsideWorkArea
+-WorkspaceWindowResizerTest.ResizeSnapped
+-WorkspaceWindowResizerTest.ResizeWindowOutsideBottomWorkArea
+-WorkspaceWindowResizerTest.ResizeWindowOutsideLeftWorkArea
+-WorkspaceWindowResizerTest.ResizeWindowOutsideRightWorkArea
+-WorkspaceWindowResizerTest.RestoreClearedOnResize
+-WorkspaceWindowResizerTest.RestoreToPreMaximizeCoordinates
+-WorkspaceWindowResizerTest.RevertResizeOperation
+-WorkspaceWindowResizerTest.SnapToEdge
+-WorkspaceWindowResizerTest.SnapToWorkArea_BOTTOMLEFT
+-WorkspaceWindowResizerTest.SnapToWorkArea_BOTTOMRIGHT
+-WorkspaceWindowResizerTest.SnapToWorkArea_TOPLEFT
+-WorkspaceWindowResizerTest.SnapToWorkArea_TOPRIGHT
+-WorkspaceWindowResizerTest.StickToBothEdgeAndWindow
+-WorkspaceWindowResizerTest.TestMaxSizeEnforced
+-WorkspaceWindowResizerTest.TestPartialMaxSizeEnforced
+-WorkspaceWindowResizerTest.TouchResizeToEdge_BOTTOM
+-WorkspaceWindowResizerTest.TouchResizeToEdge_LEFT
+-WorkspaceWindowResizerTest.TouchResizeToEdge_RIGHT
+-WorkspaceWindowResizerTest.TouchResizeToEdge_TOP
diff --git a/src/testing/buildbot/filters/site-per-process.browser_tests.filter b/src/testing/buildbot/filters/site-per-process.browser_tests.filter
index b78a559..06787d0 100644
--- a/src/testing/buildbot/filters/site-per-process.browser_tests.filter
+++ b/src/testing/buildbot/filters/site-per-process.browser_tests.filter
@@ -24,6 +24,3 @@
 
 # crbug.com/670362: Flaky failure (expected MouseDown not found)
 -DevToolsPixelOutputTests.TestLatencyInfoInstrumentation
-
-# crbug.com/637415
--SubresourceFilterBrowserTest.CrossSiteSubFrameActivationWithWhitelist
diff --git a/src/testing/buildbot/gn_isolate_map.pyl b/src/testing/buildbot/gn_isolate_map.pyl
index 4ad06da..4593ff2 100644
--- a/src/testing/buildbot/gn_isolate_map.pyl
+++ b/src/testing/buildbot/gn_isolate_map.pyl
@@ -148,6 +148,13 @@
     "label": "//ash:ash_unittests",
     "type": "windowed_test_launcher",
   },
+  "ash_mus_unittests": {
+    "label": "//ash:ash_unittests",
+    "type": "windowed_test_launcher",
+    "args": [
+      "--mus",
+    ],
+  },
   "audio_unittests": {
     "label": "//media:audio_unittests",
     "type": "raw",
diff --git a/src/testing/buildbot/trybot_analyze_config.json b/src/testing/buildbot/trybot_analyze_config.json
index daeb221..8d340e3 100644
--- a/src/testing/buildbot/trybot_analyze_config.json
+++ b/src/testing/buildbot/trybot_analyze_config.json
@@ -38,7 +38,6 @@
     "exclusions": [
       "chrome/browser/resources/.*(css|html|js)",
       "chrome/browser/ui/webui/.*browsertest.*js",
-      "chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py",
       "chrome/test/data/.*",
       "components/about_ui/resources/.*(css|html|js)",
       "components/flags_ui/resources/.*(css|html|js)",
diff --git a/src/testing/iossim/iossim.mm b/src/testing/iossim/iossim.mm
index 82a59ac..af411c7 100644
--- a/src/testing/iossim/iossim.mm
+++ b/src/testing/iossim/iossim.mm
@@ -20,6 +20,8 @@
       "test.\n"
       "  -e  Specifies an environment key=value pair that will be"
       " set in the simulated application's environment.\n"
+      "  -o  Specifies a test or test suite that should be included in the"
+      "test run. All other tests will be excluded from this run.\n"
       "  -c  Specifies command line flags to pass to application.\n"
       "  -p  Print the device's home directory, does not run a test.\n"
       "  -s  Specifies the SDK version to use (e.g '9.3'). Will use system "
@@ -222,7 +224,8 @@
                     NSString* xctest_path,
                     NSString* udid,
                     NSMutableDictionary* app_env,
-                    NSString* cmd_args) {
+                    NSString* cmd_args,
+                    NSMutableArray* only_testing_tests) {
   NSString* tempFilePath = [NSTemporaryDirectory()
       stringByAppendingPathComponent:[[NSUUID UUID] UUIDString]];
   [[NSFileManager defaultManager] createFileAtPath:tempFilePath
@@ -237,6 +240,15 @@
   [testingEnvironmentVariables setValue:[app_path lastPathComponent]
                                  forKey:@"IDEiPhoneInternalTestBundleName"];
 
+  NSString* frameworkPath =
+      @"__PLATFORMS__/iPhoneSimulator.platform/Developer/Library/Frameworks";
+  [testingEnvironmentVariables setValue:frameworkPath
+                                 forKey:@"DYLD_FRAMEWORK_PATH"];
+  NSString* libraryPath =
+      @"__PLATFORMS__/iPhoneSimulator.platform/Developer/Library";
+  [testingEnvironmentVariables setValue:libraryPath
+                                 forKey:@"DYLD_LIBRARY_PATH"];
+
   if (xctest_path) {
     [testTargetName setValue:xctest_path forKey:@"TestBundlePath"];
     NSString* inject =
@@ -257,6 +269,10 @@
     [testTargetName setObject:@[ cmd_args ] forKey:@"CommandLineArguments"];
   }
 
+  if (only_testing_tests) {
+    [testTargetName setObject:only_testing_tests forKey:@"OnlyTestIdentifiers"];
+  }
+
   [testTargetName setObject:testingEnvironmentVariables
                      forKey:@"TestingEnvironmentVariables"];
   [xctestrun setObject:testTargetName forKey:@"TestTargetName"];
@@ -321,9 +337,10 @@
   }
   NSString* sdk_version = [NSString stringWithFormat:@"%0.1f", sdk];
   NSMutableDictionary* app_env = [NSMutableDictionary dictionary];
+  NSMutableArray* only_testing_tests = [NSMutableArray array];
 
   int c;
-  while ((c = getopt(argc, argv, "hs:d:u:t:e:c:pwl")) != -1) {
+  while ((c = getopt(argc, argv, "hs:d:u:t:e:c:o:pwl")) != -1) {
     switch (c) {
       case 's':
         sdk_version = [NSString stringWithUTF8String:optarg];
@@ -337,6 +354,10 @@
       case 'c':
         cmd_args = [NSString stringWithUTF8String:optarg];
         break;
+      case 'o': {
+        NSString* only_testing_test = [NSString stringWithUTF8String:optarg];
+        [only_testing_tests addObject:only_testing_test];
+      } break;
       case 'e': {
         NSString* envLine = [NSString stringWithUTF8String:optarg];
         NSRange range = [envLine rangeOfString:@"="];
@@ -414,7 +435,8 @@
     exit(kExitInvalidArguments);
   }
 
-  RunApplication(app_path, xctest_path, udid, app_env, cmd_args);
+  RunApplication(app_path, xctest_path, udid, app_env, cmd_args,
+                 only_testing_tests);
   KillSimulator();
   return kExitSuccess;
 }
diff --git a/src/testing/libfuzzer/fuzzers/BUILD.gn b/src/testing/libfuzzer/fuzzers/BUILD.gn
index 217e08b..6b001ef 100644
--- a/src/testing/libfuzzer/fuzzers/BUILD.gn
+++ b/src/testing/libfuzzer/fuzzers/BUILD.gn
@@ -118,6 +118,8 @@
     "template_url_parser_fuzzer.cc",
   ]
   deps = [
+    "//base",
+    "//base:i18n",
     "//components/search_engines:search_engines",
   ]
   dict = "dicts/xml.dict"
@@ -353,17 +355,6 @@
   libfuzzer_options = [ "max_len=500" ]
 }
 
-fuzzer_test("libxml_xml_regexp_compile_fuzzer") {
-  sources = [
-    "libxml_xml_regexp_compile_fuzzer.cc",
-  ]
-  deps = [
-    "//third_party/libxml",
-  ]
-  libfuzzer_options = [ "max_len=32" ]
-  additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
-}
-
 fuzzer_test("convert_woff2ttf_fuzzer") {
   sources = [
     "convert_woff2ttf_fuzzer.cc",
@@ -420,6 +411,19 @@
   }
 }
 
+fuzzer_test("skia_color_space_fuzzer") {
+  sources = [
+    "color_space_data.h",
+    "skia_color_space_fuzzer.cc",
+  ]
+  deps = [
+    "//base",
+    "//skia",
+  ]
+  dict = "dicts/icc.dict"
+  libfuzzer_options = [ "max_len=4194304" ]
+}
+
 fuzzer_test("prtime_fuzzer") {
   sources = [
     "prtime_fuzzer.cc",
diff --git a/src/testing/libfuzzer/fuzzers/color_space_data.h b/src/testing/libfuzzer/fuzzers/color_space_data.h
new file mode 100644
index 0000000..0409e78
--- /dev/null
+++ b/src/testing/libfuzzer/fuzzers/color_space_data.h
@@ -0,0 +1,379 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TESTING_LIBFUZZER_FUZZERS_COLOR_SPACE_DATA_H
+#define TESTING_LIBFUZZER_FUZZERS_COLOR_SPACE_DATA_H
+
+static const char kSRGBData[] = {
+    // sRGB profile with tabular gamma curves.
+    0x00, 0x00, 0x0c, 0x48, 0x4c, 0x69, 0x6e, 0x6f, 0x02, 0x10, 0x00, 0x00,
+    0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
+    0x07, 0xce, 0x00, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x31, 0x00, 0x00,
+    0x61, 0x63, 0x73, 0x70, 0x4d, 0x53, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00,
+    0x49, 0x45, 0x43, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
+    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x48, 0x50, 0x20, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+    0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x00, 0x33,
+    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x00, 0x6c,
+    0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x14,
+    0x72, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x00, 0x14,
+    0x67, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x14,
+    0x64, 0x6d, 0x6e, 0x64, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x00, 0x70,
+    0x64, 0x6d, 0x64, 0x64, 0x00, 0x00, 0x02, 0xc4, 0x00, 0x00, 0x00, 0x88,
+    0x76, 0x75, 0x65, 0x64, 0x00, 0x00, 0x03, 0x4c, 0x00, 0x00, 0x00, 0x86,
+    0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x03, 0xd4, 0x00, 0x00, 0x00, 0x24,
+    0x6c, 0x75, 0x6d, 0x69, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x14,
+    0x6d, 0x65, 0x61, 0x73, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x24,
+    0x74, 0x65, 0x63, 0x68, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x0c,
+    0x72, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
+    0x67, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
+    0x62, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
+    0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79,
+    0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39,
+    0x39, 0x38, 0x20, 0x48, 0x65, 0x77, 0x6c, 0x65, 0x74, 0x74, 0x2d, 0x50,
+    0x61, 0x63, 0x6b, 0x61, 0x72, 0x64, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61,
+    0x6e, 0x79, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x12, 0x73, 0x52, 0x47, 0x42, 0x20, 0x49, 0x45, 0x43,
+    0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x73, 0x52, 0x47,
+    0x42, 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32,
+    0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xf3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xa2, 0x00, 0x00, 0x38, 0xf5,
+    0x00, 0x00, 0x03, 0x90, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x62, 0x99, 0x00, 0x00, 0xb7, 0x85, 0x00, 0x00, 0x18, 0xda,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xa0,
+    0x00, 0x00, 0x0f, 0x84, 0x00, 0x00, 0xb6, 0xcf, 0x64, 0x65, 0x73, 0x63,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, 0x43, 0x20,
+    0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69,
+    0x65, 0x63, 0x2e, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, 0x43, 0x20, 0x68, 0x74, 0x74,
+    0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x63, 0x2e,
+    0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e,
+    0x49, 0x45, 0x43, 0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e,
+    0x31, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x47,
+    0x42, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x70, 0x61,
+    0x63, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x49, 0x45, 0x43,
+    0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x20, 0x44,
+    0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x47, 0x42, 0x20, 0x63,
+    0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20,
+    0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x2c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+    0x65, 0x20, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f,
+    0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x49,
+    0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x52,
+    0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x56, 0x69, 0x65,
+    0x77, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+    0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39,
+    0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xfe, 0x00, 0x14, 0x5f, 0x2e,
+    0x00, 0x10, 0xcf, 0x14, 0x00, 0x03, 0xed, 0xcc, 0x00, 0x04, 0x13, 0x0b,
+    0x00, 0x03, 0x5c, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x58, 0x59, 0x5a, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x09, 0x56, 0x00, 0x50, 0x00, 0x00,
+    0x00, 0x57, 0x1f, 0xe7, 0x6d, 0x65, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x8f,
+    0x00, 0x00, 0x00, 0x02, 0x73, 0x69, 0x67, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x43, 0x52, 0x54, 0x20, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x0f,
+    0x00, 0x14, 0x00, 0x19, 0x00, 0x1e, 0x00, 0x23, 0x00, 0x28, 0x00, 0x2d,
+    0x00, 0x32, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x40, 0x00, 0x45, 0x00, 0x4a,
+    0x00, 0x4f, 0x00, 0x54, 0x00, 0x59, 0x00, 0x5e, 0x00, 0x63, 0x00, 0x68,
+    0x00, 0x6d, 0x00, 0x72, 0x00, 0x77, 0x00, 0x7c, 0x00, 0x81, 0x00, 0x86,
+    0x00, 0x8b, 0x00, 0x90, 0x00, 0x95, 0x00, 0x9a, 0x00, 0x9f, 0x00, 0xa4,
+    0x00, 0xa9, 0x00, 0xae, 0x00, 0xb2, 0x00, 0xb7, 0x00, 0xbc, 0x00, 0xc1,
+    0x00, 0xc6, 0x00, 0xcb, 0x00, 0xd0, 0x00, 0xd5, 0x00, 0xdb, 0x00, 0xe0,
+    0x00, 0xe5, 0x00, 0xeb, 0x00, 0xf0, 0x00, 0xf6, 0x00, 0xfb, 0x01, 0x01,
+    0x01, 0x07, 0x01, 0x0d, 0x01, 0x13, 0x01, 0x19, 0x01, 0x1f, 0x01, 0x25,
+    0x01, 0x2b, 0x01, 0x32, 0x01, 0x38, 0x01, 0x3e, 0x01, 0x45, 0x01, 0x4c,
+    0x01, 0x52, 0x01, 0x59, 0x01, 0x60, 0x01, 0x67, 0x01, 0x6e, 0x01, 0x75,
+    0x01, 0x7c, 0x01, 0x83, 0x01, 0x8b, 0x01, 0x92, 0x01, 0x9a, 0x01, 0xa1,
+    0x01, 0xa9, 0x01, 0xb1, 0x01, 0xb9, 0x01, 0xc1, 0x01, 0xc9, 0x01, 0xd1,
+    0x01, 0xd9, 0x01, 0xe1, 0x01, 0xe9, 0x01, 0xf2, 0x01, 0xfa, 0x02, 0x03,
+    0x02, 0x0c, 0x02, 0x14, 0x02, 0x1d, 0x02, 0x26, 0x02, 0x2f, 0x02, 0x38,
+    0x02, 0x41, 0x02, 0x4b, 0x02, 0x54, 0x02, 0x5d, 0x02, 0x67, 0x02, 0x71,
+    0x02, 0x7a, 0x02, 0x84, 0x02, 0x8e, 0x02, 0x98, 0x02, 0xa2, 0x02, 0xac,
+    0x02, 0xb6, 0x02, 0xc1, 0x02, 0xcb, 0x02, 0xd5, 0x02, 0xe0, 0x02, 0xeb,
+    0x02, 0xf5, 0x03, 0x00, 0x03, 0x0b, 0x03, 0x16, 0x03, 0x21, 0x03, 0x2d,
+    0x03, 0x38, 0x03, 0x43, 0x03, 0x4f, 0x03, 0x5a, 0x03, 0x66, 0x03, 0x72,
+    0x03, 0x7e, 0x03, 0x8a, 0x03, 0x96, 0x03, 0xa2, 0x03, 0xae, 0x03, 0xba,
+    0x03, 0xc7, 0x03, 0xd3, 0x03, 0xe0, 0x03, 0xec, 0x03, 0xf9, 0x04, 0x06,
+    0x04, 0x13, 0x04, 0x20, 0x04, 0x2d, 0x04, 0x3b, 0x04, 0x48, 0x04, 0x55,
+    0x04, 0x63, 0x04, 0x71, 0x04, 0x7e, 0x04, 0x8c, 0x04, 0x9a, 0x04, 0xa8,
+    0x04, 0xb6, 0x04, 0xc4, 0x04, 0xd3, 0x04, 0xe1, 0x04, 0xf0, 0x04, 0xfe,
+    0x05, 0x0d, 0x05, 0x1c, 0x05, 0x2b, 0x05, 0x3a, 0x05, 0x49, 0x05, 0x58,
+    0x05, 0x67, 0x05, 0x77, 0x05, 0x86, 0x05, 0x96, 0x05, 0xa6, 0x05, 0xb5,
+    0x05, 0xc5, 0x05, 0xd5, 0x05, 0xe5, 0x05, 0xf6, 0x06, 0x06, 0x06, 0x16,
+    0x06, 0x27, 0x06, 0x37, 0x06, 0x48, 0x06, 0x59, 0x06, 0x6a, 0x06, 0x7b,
+    0x06, 0x8c, 0x06, 0x9d, 0x06, 0xaf, 0x06, 0xc0, 0x06, 0xd1, 0x06, 0xe3,
+    0x06, 0xf5, 0x07, 0x07, 0x07, 0x19, 0x07, 0x2b, 0x07, 0x3d, 0x07, 0x4f,
+    0x07, 0x61, 0x07, 0x74, 0x07, 0x86, 0x07, 0x99, 0x07, 0xac, 0x07, 0xbf,
+    0x07, 0xd2, 0x07, 0xe5, 0x07, 0xf8, 0x08, 0x0b, 0x08, 0x1f, 0x08, 0x32,
+    0x08, 0x46, 0x08, 0x5a, 0x08, 0x6e, 0x08, 0x82, 0x08, 0x96, 0x08, 0xaa,
+    0x08, 0xbe, 0x08, 0xd2, 0x08, 0xe7, 0x08, 0xfb, 0x09, 0x10, 0x09, 0x25,
+    0x09, 0x3a, 0x09, 0x4f, 0x09, 0x64, 0x09, 0x79, 0x09, 0x8f, 0x09, 0xa4,
+    0x09, 0xba, 0x09, 0xcf, 0x09, 0xe5, 0x09, 0xfb, 0x0a, 0x11, 0x0a, 0x27,
+    0x0a, 0x3d, 0x0a, 0x54, 0x0a, 0x6a, 0x0a, 0x81, 0x0a, 0x98, 0x0a, 0xae,
+    0x0a, 0xc5, 0x0a, 0xdc, 0x0a, 0xf3, 0x0b, 0x0b, 0x0b, 0x22, 0x0b, 0x39,
+    0x0b, 0x51, 0x0b, 0x69, 0x0b, 0x80, 0x0b, 0x98, 0x0b, 0xb0, 0x0b, 0xc8,
+    0x0b, 0xe1, 0x0b, 0xf9, 0x0c, 0x12, 0x0c, 0x2a, 0x0c, 0x43, 0x0c, 0x5c,
+    0x0c, 0x75, 0x0c, 0x8e, 0x0c, 0xa7, 0x0c, 0xc0, 0x0c, 0xd9, 0x0c, 0xf3,
+    0x0d, 0x0d, 0x0d, 0x26, 0x0d, 0x40, 0x0d, 0x5a, 0x0d, 0x74, 0x0d, 0x8e,
+    0x0d, 0xa9, 0x0d, 0xc3, 0x0d, 0xde, 0x0d, 0xf8, 0x0e, 0x13, 0x0e, 0x2e,
+    0x0e, 0x49, 0x0e, 0x64, 0x0e, 0x7f, 0x0e, 0x9b, 0x0e, 0xb6, 0x0e, 0xd2,
+    0x0e, 0xee, 0x0f, 0x09, 0x0f, 0x25, 0x0f, 0x41, 0x0f, 0x5e, 0x0f, 0x7a,
+    0x0f, 0x96, 0x0f, 0xb3, 0x0f, 0xcf, 0x0f, 0xec, 0x10, 0x09, 0x10, 0x26,
+    0x10, 0x43, 0x10, 0x61, 0x10, 0x7e, 0x10, 0x9b, 0x10, 0xb9, 0x10, 0xd7,
+    0x10, 0xf5, 0x11, 0x13, 0x11, 0x31, 0x11, 0x4f, 0x11, 0x6d, 0x11, 0x8c,
+    0x11, 0xaa, 0x11, 0xc9, 0x11, 0xe8, 0x12, 0x07, 0x12, 0x26, 0x12, 0x45,
+    0x12, 0x64, 0x12, 0x84, 0x12, 0xa3, 0x12, 0xc3, 0x12, 0xe3, 0x13, 0x03,
+    0x13, 0x23, 0x13, 0x43, 0x13, 0x63, 0x13, 0x83, 0x13, 0xa4, 0x13, 0xc5,
+    0x13, 0xe5, 0x14, 0x06, 0x14, 0x27, 0x14, 0x49, 0x14, 0x6a, 0x14, 0x8b,
+    0x14, 0xad, 0x14, 0xce, 0x14, 0xf0, 0x15, 0x12, 0x15, 0x34, 0x15, 0x56,
+    0x15, 0x78, 0x15, 0x9b, 0x15, 0xbd, 0x15, 0xe0, 0x16, 0x03, 0x16, 0x26,
+    0x16, 0x49, 0x16, 0x6c, 0x16, 0x8f, 0x16, 0xb2, 0x16, 0xd6, 0x16, 0xfa,
+    0x17, 0x1d, 0x17, 0x41, 0x17, 0x65, 0x17, 0x89, 0x17, 0xae, 0x17, 0xd2,
+    0x17, 0xf7, 0x18, 0x1b, 0x18, 0x40, 0x18, 0x65, 0x18, 0x8a, 0x18, 0xaf,
+    0x18, 0xd5, 0x18, 0xfa, 0x19, 0x20, 0x19, 0x45, 0x19, 0x6b, 0x19, 0x91,
+    0x19, 0xb7, 0x19, 0xdd, 0x1a, 0x04, 0x1a, 0x2a, 0x1a, 0x51, 0x1a, 0x77,
+    0x1a, 0x9e, 0x1a, 0xc5, 0x1a, 0xec, 0x1b, 0x14, 0x1b, 0x3b, 0x1b, 0x63,
+    0x1b, 0x8a, 0x1b, 0xb2, 0x1b, 0xda, 0x1c, 0x02, 0x1c, 0x2a, 0x1c, 0x52,
+    0x1c, 0x7b, 0x1c, 0xa3, 0x1c, 0xcc, 0x1c, 0xf5, 0x1d, 0x1e, 0x1d, 0x47,
+    0x1d, 0x70, 0x1d, 0x99, 0x1d, 0xc3, 0x1d, 0xec, 0x1e, 0x16, 0x1e, 0x40,
+    0x1e, 0x6a, 0x1e, 0x94, 0x1e, 0xbe, 0x1e, 0xe9, 0x1f, 0x13, 0x1f, 0x3e,
+    0x1f, 0x69, 0x1f, 0x94, 0x1f, 0xbf, 0x1f, 0xea, 0x20, 0x15, 0x20, 0x41,
+    0x20, 0x6c, 0x20, 0x98, 0x20, 0xc4, 0x20, 0xf0, 0x21, 0x1c, 0x21, 0x48,
+    0x21, 0x75, 0x21, 0xa1, 0x21, 0xce, 0x21, 0xfb, 0x22, 0x27, 0x22, 0x55,
+    0x22, 0x82, 0x22, 0xaf, 0x22, 0xdd, 0x23, 0x0a, 0x23, 0x38, 0x23, 0x66,
+    0x23, 0x94, 0x23, 0xc2, 0x23, 0xf0, 0x24, 0x1f, 0x24, 0x4d, 0x24, 0x7c,
+    0x24, 0xab, 0x24, 0xda, 0x25, 0x09, 0x25, 0x38, 0x25, 0x68, 0x25, 0x97,
+    0x25, 0xc7, 0x25, 0xf7, 0x26, 0x27, 0x26, 0x57, 0x26, 0x87, 0x26, 0xb7,
+    0x26, 0xe8, 0x27, 0x18, 0x27, 0x49, 0x27, 0x7a, 0x27, 0xab, 0x27, 0xdc,
+    0x28, 0x0d, 0x28, 0x3f, 0x28, 0x71, 0x28, 0xa2, 0x28, 0xd4, 0x29, 0x06,
+    0x29, 0x38, 0x29, 0x6b, 0x29, 0x9d, 0x29, 0xd0, 0x2a, 0x02, 0x2a, 0x35,
+    0x2a, 0x68, 0x2a, 0x9b, 0x2a, 0xcf, 0x2b, 0x02, 0x2b, 0x36, 0x2b, 0x69,
+    0x2b, 0x9d, 0x2b, 0xd1, 0x2c, 0x05, 0x2c, 0x39, 0x2c, 0x6e, 0x2c, 0xa2,
+    0x2c, 0xd7, 0x2d, 0x0c, 0x2d, 0x41, 0x2d, 0x76, 0x2d, 0xab, 0x2d, 0xe1,
+    0x2e, 0x16, 0x2e, 0x4c, 0x2e, 0x82, 0x2e, 0xb7, 0x2e, 0xee, 0x2f, 0x24,
+    0x2f, 0x5a, 0x2f, 0x91, 0x2f, 0xc7, 0x2f, 0xfe, 0x30, 0x35, 0x30, 0x6c,
+    0x30, 0xa4, 0x30, 0xdb, 0x31, 0x12, 0x31, 0x4a, 0x31, 0x82, 0x31, 0xba,
+    0x31, 0xf2, 0x32, 0x2a, 0x32, 0x63, 0x32, 0x9b, 0x32, 0xd4, 0x33, 0x0d,
+    0x33, 0x46, 0x33, 0x7f, 0x33, 0xb8, 0x33, 0xf1, 0x34, 0x2b, 0x34, 0x65,
+    0x34, 0x9e, 0x34, 0xd8, 0x35, 0x13, 0x35, 0x4d, 0x35, 0x87, 0x35, 0xc2,
+    0x35, 0xfd, 0x36, 0x37, 0x36, 0x72, 0x36, 0xae, 0x36, 0xe9, 0x37, 0x24,
+    0x37, 0x60, 0x37, 0x9c, 0x37, 0xd7, 0x38, 0x14, 0x38, 0x50, 0x38, 0x8c,
+    0x38, 0xc8, 0x39, 0x05, 0x39, 0x42, 0x39, 0x7f, 0x39, 0xbc, 0x39, 0xf9,
+    0x3a, 0x36, 0x3a, 0x74, 0x3a, 0xb2, 0x3a, 0xef, 0x3b, 0x2d, 0x3b, 0x6b,
+    0x3b, 0xaa, 0x3b, 0xe8, 0x3c, 0x27, 0x3c, 0x65, 0x3c, 0xa4, 0x3c, 0xe3,
+    0x3d, 0x22, 0x3d, 0x61, 0x3d, 0xa1, 0x3d, 0xe0, 0x3e, 0x20, 0x3e, 0x60,
+    0x3e, 0xa0, 0x3e, 0xe0, 0x3f, 0x21, 0x3f, 0x61, 0x3f, 0xa2, 0x3f, 0xe2,
+    0x40, 0x23, 0x40, 0x64, 0x40, 0xa6, 0x40, 0xe7, 0x41, 0x29, 0x41, 0x6a,
+    0x41, 0xac, 0x41, 0xee, 0x42, 0x30, 0x42, 0x72, 0x42, 0xb5, 0x42, 0xf7,
+    0x43, 0x3a, 0x43, 0x7d, 0x43, 0xc0, 0x44, 0x03, 0x44, 0x47, 0x44, 0x8a,
+    0x44, 0xce, 0x45, 0x12, 0x45, 0x55, 0x45, 0x9a, 0x45, 0xde, 0x46, 0x22,
+    0x46, 0x67, 0x46, 0xab, 0x46, 0xf0, 0x47, 0x35, 0x47, 0x7b, 0x47, 0xc0,
+    0x48, 0x05, 0x48, 0x4b, 0x48, 0x91, 0x48, 0xd7, 0x49, 0x1d, 0x49, 0x63,
+    0x49, 0xa9, 0x49, 0xf0, 0x4a, 0x37, 0x4a, 0x7d, 0x4a, 0xc4, 0x4b, 0x0c,
+    0x4b, 0x53, 0x4b, 0x9a, 0x4b, 0xe2, 0x4c, 0x2a, 0x4c, 0x72, 0x4c, 0xba,
+    0x4d, 0x02, 0x4d, 0x4a, 0x4d, 0x93, 0x4d, 0xdc, 0x4e, 0x25, 0x4e, 0x6e,
+    0x4e, 0xb7, 0x4f, 0x00, 0x4f, 0x49, 0x4f, 0x93, 0x4f, 0xdd, 0x50, 0x27,
+    0x50, 0x71, 0x50, 0xbb, 0x51, 0x06, 0x51, 0x50, 0x51, 0x9b, 0x51, 0xe6,
+    0x52, 0x31, 0x52, 0x7c, 0x52, 0xc7, 0x53, 0x13, 0x53, 0x5f, 0x53, 0xaa,
+    0x53, 0xf6, 0x54, 0x42, 0x54, 0x8f, 0x54, 0xdb, 0x55, 0x28, 0x55, 0x75,
+    0x55, 0xc2, 0x56, 0x0f, 0x56, 0x5c, 0x56, 0xa9, 0x56, 0xf7, 0x57, 0x44,
+    0x57, 0x92, 0x57, 0xe0, 0x58, 0x2f, 0x58, 0x7d, 0x58, 0xcb, 0x59, 0x1a,
+    0x59, 0x69, 0x59, 0xb8, 0x5a, 0x07, 0x5a, 0x56, 0x5a, 0xa6, 0x5a, 0xf5,
+    0x5b, 0x45, 0x5b, 0x95, 0x5b, 0xe5, 0x5c, 0x35, 0x5c, 0x86, 0x5c, 0xd6,
+    0x5d, 0x27, 0x5d, 0x78, 0x5d, 0xc9, 0x5e, 0x1a, 0x5e, 0x6c, 0x5e, 0xbd,
+    0x5f, 0x0f, 0x5f, 0x61, 0x5f, 0xb3, 0x60, 0x05, 0x60, 0x57, 0x60, 0xaa,
+    0x60, 0xfc, 0x61, 0x4f, 0x61, 0xa2, 0x61, 0xf5, 0x62, 0x49, 0x62, 0x9c,
+    0x62, 0xf0, 0x63, 0x43, 0x63, 0x97, 0x63, 0xeb, 0x64, 0x40, 0x64, 0x94,
+    0x64, 0xe9, 0x65, 0x3d, 0x65, 0x92, 0x65, 0xe7, 0x66, 0x3d, 0x66, 0x92,
+    0x66, 0xe8, 0x67, 0x3d, 0x67, 0x93, 0x67, 0xe9, 0x68, 0x3f, 0x68, 0x96,
+    0x68, 0xec, 0x69, 0x43, 0x69, 0x9a, 0x69, 0xf1, 0x6a, 0x48, 0x6a, 0x9f,
+    0x6a, 0xf7, 0x6b, 0x4f, 0x6b, 0xa7, 0x6b, 0xff, 0x6c, 0x57, 0x6c, 0xaf,
+    0x6d, 0x08, 0x6d, 0x60, 0x6d, 0xb9, 0x6e, 0x12, 0x6e, 0x6b, 0x6e, 0xc4,
+    0x6f, 0x1e, 0x6f, 0x78, 0x6f, 0xd1, 0x70, 0x2b, 0x70, 0x86, 0x70, 0xe0,
+    0x71, 0x3a, 0x71, 0x95, 0x71, 0xf0, 0x72, 0x4b, 0x72, 0xa6, 0x73, 0x01,
+    0x73, 0x5d, 0x73, 0xb8, 0x74, 0x14, 0x74, 0x70, 0x74, 0xcc, 0x75, 0x28,
+    0x75, 0x85, 0x75, 0xe1, 0x76, 0x3e, 0x76, 0x9b, 0x76, 0xf8, 0x77, 0x56,
+    0x77, 0xb3, 0x78, 0x11, 0x78, 0x6e, 0x78, 0xcc, 0x79, 0x2a, 0x79, 0x89,
+    0x79, 0xe7, 0x7a, 0x46, 0x7a, 0xa5, 0x7b, 0x04, 0x7b, 0x63, 0x7b, 0xc2,
+    0x7c, 0x21, 0x7c, 0x81, 0x7c, 0xe1, 0x7d, 0x41, 0x7d, 0xa1, 0x7e, 0x01,
+    0x7e, 0x62, 0x7e, 0xc2, 0x7f, 0x23, 0x7f, 0x84, 0x7f, 0xe5, 0x80, 0x47,
+    0x80, 0xa8, 0x81, 0x0a, 0x81, 0x6b, 0x81, 0xcd, 0x82, 0x30, 0x82, 0x92,
+    0x82, 0xf4, 0x83, 0x57, 0x83, 0xba, 0x84, 0x1d, 0x84, 0x80, 0x84, 0xe3,
+    0x85, 0x47, 0x85, 0xab, 0x86, 0x0e, 0x86, 0x72, 0x86, 0xd7, 0x87, 0x3b,
+    0x87, 0x9f, 0x88, 0x04, 0x88, 0x69, 0x88, 0xce, 0x89, 0x33, 0x89, 0x99,
+    0x89, 0xfe, 0x8a, 0x64, 0x8a, 0xca, 0x8b, 0x30, 0x8b, 0x96, 0x8b, 0xfc,
+    0x8c, 0x63, 0x8c, 0xca, 0x8d, 0x31, 0x8d, 0x98, 0x8d, 0xff, 0x8e, 0x66,
+    0x8e, 0xce, 0x8f, 0x36, 0x8f, 0x9e, 0x90, 0x06, 0x90, 0x6e, 0x90, 0xd6,
+    0x91, 0x3f, 0x91, 0xa8, 0x92, 0x11, 0x92, 0x7a, 0x92, 0xe3, 0x93, 0x4d,
+    0x93, 0xb6, 0x94, 0x20, 0x94, 0x8a, 0x94, 0xf4, 0x95, 0x5f, 0x95, 0xc9,
+    0x96, 0x34, 0x96, 0x9f, 0x97, 0x0a, 0x97, 0x75, 0x97, 0xe0, 0x98, 0x4c,
+    0x98, 0xb8, 0x99, 0x24, 0x99, 0x90, 0x99, 0xfc, 0x9a, 0x68, 0x9a, 0xd5,
+    0x9b, 0x42, 0x9b, 0xaf, 0x9c, 0x1c, 0x9c, 0x89, 0x9c, 0xf7, 0x9d, 0x64,
+    0x9d, 0xd2, 0x9e, 0x40, 0x9e, 0xae, 0x9f, 0x1d, 0x9f, 0x8b, 0x9f, 0xfa,
+    0xa0, 0x69, 0xa0, 0xd8, 0xa1, 0x47, 0xa1, 0xb6, 0xa2, 0x26, 0xa2, 0x96,
+    0xa3, 0x06, 0xa3, 0x76, 0xa3, 0xe6, 0xa4, 0x56, 0xa4, 0xc7, 0xa5, 0x38,
+    0xa5, 0xa9, 0xa6, 0x1a, 0xa6, 0x8b, 0xa6, 0xfd, 0xa7, 0x6e, 0xa7, 0xe0,
+    0xa8, 0x52, 0xa8, 0xc4, 0xa9, 0x37, 0xa9, 0xa9, 0xaa, 0x1c, 0xaa, 0x8f,
+    0xab, 0x02, 0xab, 0x75, 0xab, 0xe9, 0xac, 0x5c, 0xac, 0xd0, 0xad, 0x44,
+    0xad, 0xb8, 0xae, 0x2d, 0xae, 0xa1, 0xaf, 0x16, 0xaf, 0x8b, 0xb0, 0x00,
+    0xb0, 0x75, 0xb0, 0xea, 0xb1, 0x60, 0xb1, 0xd6, 0xb2, 0x4b, 0xb2, 0xc2,
+    0xb3, 0x38, 0xb3, 0xae, 0xb4, 0x25, 0xb4, 0x9c, 0xb5, 0x13, 0xb5, 0x8a,
+    0xb6, 0x01, 0xb6, 0x79, 0xb6, 0xf0, 0xb7, 0x68, 0xb7, 0xe0, 0xb8, 0x59,
+    0xb8, 0xd1, 0xb9, 0x4a, 0xb9, 0xc2, 0xba, 0x3b, 0xba, 0xb5, 0xbb, 0x2e,
+    0xbb, 0xa7, 0xbc, 0x21, 0xbc, 0x9b, 0xbd, 0x15, 0xbd, 0x8f, 0xbe, 0x0a,
+    0xbe, 0x84, 0xbe, 0xff, 0xbf, 0x7a, 0xbf, 0xf5, 0xc0, 0x70, 0xc0, 0xec,
+    0xc1, 0x67, 0xc1, 0xe3, 0xc2, 0x5f, 0xc2, 0xdb, 0xc3, 0x58, 0xc3, 0xd4,
+    0xc4, 0x51, 0xc4, 0xce, 0xc5, 0x4b, 0xc5, 0xc8, 0xc6, 0x46, 0xc6, 0xc3,
+    0xc7, 0x41, 0xc7, 0xbf, 0xc8, 0x3d, 0xc8, 0xbc, 0xc9, 0x3a, 0xc9, 0xb9,
+    0xca, 0x38, 0xca, 0xb7, 0xcb, 0x36, 0xcb, 0xb6, 0xcc, 0x35, 0xcc, 0xb5,
+    0xcd, 0x35, 0xcd, 0xb5, 0xce, 0x36, 0xce, 0xb6, 0xcf, 0x37, 0xcf, 0xb8,
+    0xd0, 0x39, 0xd0, 0xba, 0xd1, 0x3c, 0xd1, 0xbe, 0xd2, 0x3f, 0xd2, 0xc1,
+    0xd3, 0x44, 0xd3, 0xc6, 0xd4, 0x49, 0xd4, 0xcb, 0xd5, 0x4e, 0xd5, 0xd1,
+    0xd6, 0x55, 0xd6, 0xd8, 0xd7, 0x5c, 0xd7, 0xe0, 0xd8, 0x64, 0xd8, 0xe8,
+    0xd9, 0x6c, 0xd9, 0xf1, 0xda, 0x76, 0xda, 0xfb, 0xdb, 0x80, 0xdc, 0x05,
+    0xdc, 0x8a, 0xdd, 0x10, 0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, 0xdf, 0x29,
+    0xdf, 0xaf, 0xe0, 0x36, 0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, 0xe2, 0x53,
+    0xe2, 0xdb, 0xe3, 0x63, 0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, 0xe5, 0x84,
+    0xe6, 0x0d, 0xe6, 0x96, 0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, 0xe8, 0xbc,
+    0xe9, 0x46, 0xe9, 0xd0, 0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, 0xeb, 0xfb,
+    0xec, 0x86, 0xed, 0x11, 0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, 0xef, 0x40,
+    0xef, 0xcc, 0xf0, 0x58, 0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, 0xf2, 0x8c,
+    0xf3, 0x19, 0xf3, 0xa7, 0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, 0xf5, 0xde,
+    0xf6, 0x6d, 0xf6, 0xfb, 0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, 0xf9, 0x38,
+    0xf9, 0xc7, 0xfa, 0x57, 0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, 0xfc, 0x98,
+    0xfd, 0x29, 0xfd, 0xba, 0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, 0xff, 0xff,
+};
+
+static const char kSRGBPara[] = {
+    // sRGB profile with parametric gamma curves.
+    0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+    0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
+    0x07, 0xe0, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x09, 0x00, 0x26, 0x00, 0x1c,
+    0x61, 0x63, 0x73, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x47, 0x4f, 0x4f, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
+    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x47, 0x4f, 0x4f, 0x47,
+    0x75, 0xe1, 0xa6, 0xb1, 0x3c, 0x34, 0x37, 0x63, 0x10, 0xc8, 0xab, 0x66,
+    0x06, 0x32, 0xa2, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
+    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40,
+    0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x00, 0x5a,
+    0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0xa4, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x14,
+    0x72, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x01, 0xcc, 0x00, 0x00, 0x00, 0x14,
+    0x67, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x14,
+    0x72, 0x54, 0x52, 0x43, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x20,
+    0x63, 0x68, 0x61, 0x64, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x00, 0x2c,
+    0x62, 0x54, 0x52, 0x43, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x20,
+    0x67, 0x54, 0x52, 0x43, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x20,
+    0x6d, 0x6c, 0x75, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+    0x00, 0x00, 0x00, 0x0c, 0x65, 0x6e, 0x55, 0x53, 0x00, 0x00, 0x00, 0x24,
+    0x00, 0x00, 0x00, 0x1c, 0x00, 0x73, 0x00, 0x52, 0x00, 0x47, 0x00, 0x42,
+    0x00, 0x20, 0x00, 0x49, 0x00, 0x45, 0x00, 0x43, 0x00, 0x36, 0x00, 0x31,
+    0x00, 0x39, 0x00, 0x36, 0x00, 0x36, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2e,
+    0x00, 0x31, 0x00, 0x00, 0x6d, 0x6c, 0x75, 0x63, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x65, 0x6e, 0x55, 0x53,
+    0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x43, 0x00, 0x6f,
+    0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68,
+    0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 0x63, 0x00, 0x29, 0x00, 0x20,
+    0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x36, 0x00, 0x20, 0x00, 0x47,
+    0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20,
+    0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x51,
+    0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc, 0x58, 0x59, 0x5a, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x6f, 0xa0, 0x00, 0x00, 0x38, 0xf5, 0x00, 0x00, 0x03, 0x90,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x97,
+    0x00, 0x00, 0xb7, 0x87, 0x00, 0x00, 0x18, 0xd9, 0x58, 0x59, 0x5a, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x9f, 0x00, 0x00, 0x0f, 0x84,
+    0x00, 0x00, 0xb6, 0xc3, 0x70, 0x61, 0x72, 0x61, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x66, 0x66, 0x00, 0x00, 0xf2, 0xa7,
+    0x00, 0x00, 0x0d, 0x59, 0x00, 0x00, 0x13, 0xd0, 0x00, 0x00, 0x0a, 0x5b,
+    0x73, 0x66, 0x33, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x42,
+    0x00, 0x00, 0x05, 0xde, 0xff, 0xff, 0xf3, 0x27, 0x00, 0x00, 0x07, 0x93,
+    0x00, 0x00, 0xfd, 0x90, 0xff, 0xff, 0xfb, 0xa3, 0xff, 0xff, 0xfd, 0xa4,
+    0x00, 0x00, 0x03, 0xdc, 0x00, 0x00, 0xc0, 0x6e,
+};
+
+static const char kAdobeData[] = {
+    // Adobe 1998 profile with gamma 2.2 curves.
+    0x00, 0x00, 0x02, 0x30, 0x41, 0x44, 0x42, 0x45, 0x02, 0x10, 0x00, 0x00,
+    0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
+    0x07, 0xd0, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x33, 0x00, 0x3b,
+    0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00,
+    0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
+    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x41, 0x44, 0x42, 0x45,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+    0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x32,
+    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x6b,
+    0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0x9c, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x14,
+    0x72, 0x54, 0x52, 0x43, 0x00, 0x00, 0x01, 0xc4, 0x00, 0x00, 0x00, 0x0e,
+    0x67, 0x54, 0x52, 0x43, 0x00, 0x00, 0x01, 0xd4, 0x00, 0x00, 0x00, 0x0e,
+    0x62, 0x54, 0x52, 0x43, 0x00, 0x00, 0x01, 0xe4, 0x00, 0x00, 0x00, 0x0e,
+    0x72, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x14,
+    0x67, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x14,
+    0x62, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x14,
+    0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79,
+    0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x30, 0x30, 0x20, 0x41,
+    0x64, 0x6f, 0x62, 0x65, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+    0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65,
+    0x64, 0x00, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x11, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x52, 0x47,
+    0x42, 0x20, 0x28, 0x31, 0x39, 0x39, 0x38, 0x29, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xf3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00,
+    0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+    0x02, 0x33, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x00, 0x4f, 0xa5,
+    0x00, 0x00, 0x04, 0xfc, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x34, 0x8d, 0x00, 0x00, 0xa0, 0x2c, 0x00, 0x00, 0x0f, 0x95,
+    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x31,
+    0x00, 0x00, 0x10, 0x2f, 0x00, 0x00, 0xbe, 0x9c,
+};
+
+#endif  // TESTING_LIBFUZZER_FUZZERS_COLOR_SPACE_DATA_H
diff --git a/src/testing/libfuzzer/fuzzers/dicts/icc.dict b/src/testing/libfuzzer/fuzzers/dicts/icc.dict
new file mode 100644
index 0000000..f050ce2
--- /dev/null
+++ b/src/testing/libfuzzer/fuzzers/dicts/icc.dict
@@ -0,0 +1,115 @@
+# Fuzzing dictionary for icc color profiles.
+
+magic="acsp"
+
+# Tag names and types
+"A2B0"
+"A2B1"
+"A2B2"
+"B2A0"
+"B2A1"
+"B2A2"
+"XYZ "
+"bTRC"
+"bXYZ"
+"bfd "
+"bkpt"
+"calt"
+"chad"
+"chrm"
+"ciis"
+"clot"
+"clro"
+"clrt"
+"cprt"
+"crdi"
+"curv"
+"data"
+"desc"
+"devs"
+"dict"
+"dmdd"
+"dmnd"
+"dscm"
+"dtim"
+"gTRC"
+"gXYZ"
+"gamt"
+"kTRC"
+"lumi"
+"mAB "
+"mBA "
+"meas"
+"meta"
+"mft1"
+"mft2"
+"mluc"
+"mmod"
+"mpet"
+"ncl2"
+"ncol"
+"para"
+"pre0"
+"pre1"
+"pre2"
+"ps2i"
+"ps2s"
+"psd0"
+"psd1"
+"psd2"
+"psd3"
+"pseq"
+"psid"
+"rTRC"
+"rXYZ"
+"rcs2"
+"resp"
+"rig0"
+"rig2"
+"scrd"
+"sf32"
+"sig "
+"targ"
+"tech"
+"text"
+"uf32"
+"ui08"
+"ui16"
+"ui32"
+"ui64"
+"vcgt"
+"view"
+"vued"
+"wtpt"
+
+# Color spaces
+"CMYK"
+"CMY "
+"GRAY"
+"Lab "
+"Lch "
+"Luv "
+"RGB "
+"XYZ "
+"YCbr"
+
+# Profile class
+"abst"
+"link"
+"mntr"
+"nmcl"
+"prtr"
+"scnr"
+"spac"
+
+# Platforms
+"ADBE"
+"APPL"
+"MSFT"
+
+# Profile creators or CMM names
+"argl"
+"appl"
+"adbe"
+"goog"
+"lcms"
diff --git a/src/testing/libfuzzer/fuzzers/libxml_xml_regexp_compile_fuzzer.cc b/src/testing/libfuzzer/fuzzers/libxml_xml_regexp_compile_fuzzer.cc
deleted file mode 100644
index 65aba29..0000000
--- a/src/testing/libfuzzer/fuzzers/libxml_xml_regexp_compile_fuzzer.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "libxml/parser.h"
-#include "libxml/tree.h"
-#include "libxml/xmlversion.h"
-
-
-void ignore (void * ctx, const char * msg, ...) {
-  // Error handler to avoid spam of error messages from libxml parser.
-}
-
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-  xmlSetGenericErrorFunc(NULL, &ignore);
-
-  std::vector<uint8_t> buffer(size + 1, 0);
-  std::copy(data, data + size, buffer.data());
-
-  xmlRegexpPtr x = xmlRegexpCompile(buffer.data());
-  if (x)
-    xmlRegFreeRegexp(x);
-
-  return 0;
-}
diff --git a/src/testing/libfuzzer/fuzzers/skia_color_space_fuzzer.cc b/src/testing/libfuzzer/fuzzers/skia_color_space_fuzzer.cc
new file mode 100644
index 0000000..850f73f
--- /dev/null
+++ b/src/testing/libfuzzer/fuzzers/skia_color_space_fuzzer.cc
@@ -0,0 +1,89 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstddef>
+#include <cstdint>
+#include <random>
+
+#include "base/logging.h"
+#include "base/strings/string_piece.h"
+#include "testing/libfuzzer/fuzzers/color_space_data.h"
+#include "third_party/skia/include/core/SkColorSpace.h"
+#include "third_party/skia/include/core/SkColorSpaceXform.h"
+
+static constexpr size_t kPixels = 2048 / 4;
+
+static uint32_t pixels[kPixels * 4];
+
+static void GeneratePixels(size_t hash) {
+  static std::uniform_int_distribution<uint32_t> uniform(0u, ~0u);
+
+  std::mt19937_64 random(hash);
+  for (size_t i = 0; i < arraysize(pixels); ++i)
+    pixels[i] = uniform(random);
+}
+
+static sk_sp<SkColorSpace> test;
+static sk_sp<SkColorSpace> srgb;
+
+static void ColorTransform(size_t hash, bool input) {
+  if (!test.get())
+    return;
+
+  auto transform = input ? SkColorSpaceXform::New(test.get(), srgb.get())
+                         : SkColorSpaceXform::New(srgb.get(), test.get());
+  if (!transform)
+    return;
+
+  static uint32_t output[kPixels * 4];
+
+  const auto color = SkColorSpaceXform::ColorFormat(hash & 7);
+  const auto alpha = SkAlphaType(hash >> 3 & 3);
+
+  transform->apply(color, output, color, pixels, kPixels, alpha);
+}
+
+static sk_sp<SkColorSpace> SelectProfile(size_t hash) {
+  static sk_sp<SkColorSpace> profiles[8] = {
+      SkColorSpace::MakeSRGB(),
+      SkColorSpace::MakeICC(kSRGBData, arraysize(kSRGBData)),
+      SkColorSpace::MakeICC(kSRGBPara, arraysize(kSRGBPara)),
+      SkColorSpace::MakeICC(kAdobeData, arraysize(kAdobeData)),
+      SkColorSpace::MakeSRGBLinear(),
+      SkColorSpace::MakeRGB(
+          SkColorSpace::RenderTargetGamma::kLinear_RenderTargetGamma,
+          SkColorSpace::Gamut::kAdobeRGB_Gamut),
+      SkColorSpace::MakeRGB(
+          SkColorSpace::RenderTargetGamma::kSRGB_RenderTargetGamma,
+          SkColorSpace::Gamut::kDCIP3_D65_Gamut),
+      SkColorSpace::MakeSRGB(),
+  };
+
+  return profiles[hash & 7];
+}
+
+inline size_t Hash(const char* data, size_t size) {
+  return base::StringPieceHash()(base::StringPiece(data, size));
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  constexpr size_t kSizeLimit = 4 * 1024 * 1024;
+  if (size < 128 || size > kSizeLimit)
+    return 0;
+
+  test = SkColorSpace::MakeICC(data, size);
+  if (!test.get())
+    return 0;
+
+  const size_t hash = Hash(reinterpret_cast<const char*>(data), size);
+  srgb = SelectProfile(hash);
+  GeneratePixels(hash);
+
+  ColorTransform(hash, true);
+  ColorTransform(hash, false);
+
+  test.reset();
+  srgb.reset();
+  return 0;
+}
diff --git a/src/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc b/src/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
index 4d1b762..f98ad61 100644
--- a/src/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
+++ b/src/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
@@ -8,6 +8,8 @@
 #include <random>
 #include <string>
 
+#include "base/at_exit.h"
+#include "base/i18n/icu_util.h"
 #include "components/search_engines/search_terms_data.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_parser.h"
@@ -34,6 +36,8 @@
   if (size < sizeof(FuzzerFixedParams)) {
     return 0;
   }
+  base::AtExitManager at_exit_manager;  // used by ICU integration.
+  base::i18n::InitializeICU();
   const FuzzerFixedParams* params =
       reinterpret_cast<const FuzzerFixedParams*>(data);
   size -= sizeof(FuzzerFixedParams);
diff --git a/src/testing/scripts/OWNERS b/src/testing/scripts/OWNERS
index 231035d..5c5cbc9 100644
--- a/src/testing/scripts/OWNERS
+++ b/src/testing/scripts/OWNERS
@@ -5,6 +5,9 @@
 iannucci@chromium.org
 phajdan.jr@chromium.org
 
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Infra>Client>Chrome
+
 # Wrappers for Telemetry based tests.
 per-file run_gpu*=kbr@chromium.org
 per-file run_gpu*=nednguyen@google.com
diff --git a/src/testing/scripts/run_telemetry_benchmark_as_googletest.py b/src/testing/scripts/run_telemetry_benchmark_as_googletest.py
index 1da971d..cadb30b 100755
--- a/src/testing/scripts/run_telemetry_benchmark_as_googletest.py
+++ b/src/testing/scripts/run_telemetry_benchmark_as_googletest.py
@@ -66,6 +66,8 @@
     failures = []
     chartjson_results_present = '--output-format=chartjson' in rest_args
     chartresults = None
+
+    results = None
     try:
       rc = common.run_command([sys.executable] + rest_args + [
         '--output-dir', tempfile_dir,
@@ -87,11 +89,19 @@
           results = json.load(f)
         for value in results['per_page_values']:
           if value['type'] == 'failure':
-            failures.append(results['pages'][str(value['page_id'])]['name'])
+            page_data = results['pages'][str(value['page_id'])]
+            name = page_data.get('name')
+            if not name:
+              name = page_data['url']
+
+            failures.append(name)
         valid = bool(rc == 0 or failures)
 
     except Exception:
       traceback.print_exc()
+      if results:
+        print 'results, which possibly caused exception: %s' % json.dumps(
+            results, indent=2)
       valid = False
     finally:
       shutil.rmtree(tempfile_dir)
diff --git a/src/testing/variations/fieldtrial_testing_config.json b/src/testing/variations/fieldtrial_testing_config.json
index bd853d2..f0914cf 100644
--- a/src/testing/variations/fieldtrial_testing_config.json
+++ b/src/testing/variations/fieldtrial_testing_config.json
@@ -293,7 +293,6 @@
                 {
                     "name": "Default",
                     "params": {
-                        "RedirectNonUINonIOBrowserThreads": "true",
                         "RedirectSequencedWorkerPools": "true"
                     }
                 },
@@ -582,6 +581,45 @@
             ]
         }
     ],
+    "DelayNavigation": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "DelayNavigation",
+                    "params": {
+                        "delay_millis": "4",
+                        "delay_probability": "0.5",
+                        "randomize_delay": "true"
+                    },
+                    "enable_features": [
+                        "DelayNavigation"
+                    ]
+                }
+            ]
+        }
+    ],
+    "DirectCompositionOverlays": [
+        {
+            "platforms": [
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "DirectCompositionOverlays",
+                    "enable_features": [
+                        "DirectCompositionOverlays"
+                    ]
+                }
+            ]
+        }
+    ],
     "DisallowFetchForDocWrittenScriptsInMainFrame": [
         {
             "platforms": [
@@ -1339,6 +1377,24 @@
             ]
         }
     ],
+    "NTPLaunchAfterInactivity": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "OneHourDelay",
+                    "params": {
+                        "delay_in_mins": "60"
+                    },
+                    "enable_features": [
+                        "NTPLaunchAfterInactivity"
+                    ]
+                }
+            ]
+        }
+    ],
     "NTPPersonalizedSectionRanking": [
         {
             "platforms": [
@@ -1597,6 +1653,22 @@
             ]
         }
     ],
+    "OfflinePageCache": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "OfflineBookmarks",
+                        "OfflineRecentPages"
+                    ]
+                }
+            ]
+        }
+    ],
     "OfflinePages": [
         {
             "platforms": [
@@ -2629,6 +2701,34 @@
             ]
         }
     ],
+    "SubresourceFilter": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "EnabledForPhishingSites",
+                    "params": {
+                        "activation_lists": "phishing_interstitial",
+                        "activation_scope": "activation_list",
+                        "activation_state": "enabled"
+                    },
+                    "enable_features": [
+                        "SubresourceFilter"
+                    ]
+                },
+                {
+                    "name": "VerifyFeatureIsStillDisabledByDefault",
+                    "forcing_flag": "suppress-enabling-subresource-filter-from-fieldtrial-testing-config"
+                }
+            ]
+        }
+    ],
     "SyncUSSAutocomplete": [
         {
             "platforms": [
@@ -2717,6 +2817,29 @@
             ]
         }
     ],
+    "TranslateRanker": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "ios",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "EnforcementEnabled",
+                    "params": {
+                        "translate-ranker-model-url": "https://www.gstatic.com/chrome/intelligence/assist/ranker/models/translate/2017/02/translate_ranker_model_20170217.pb.bin"
+                    },
+                    "enable_features": [
+                        "TranslateRankerEnforcement"
+                    ]
+                }
+            ]
+        }
+    ],
     "TranslateRankerLogging": [
         {
             "platforms": [
@@ -2770,6 +2893,15 @@
                     "enable_features": [
                         "TranslateUI2016Q2"
                     ]
+                },
+                {
+                    "name": "DoNotDefaultAlways",
+                    "params": {
+                        "always_translate_offer_threshold": "0"
+                    },
+                    "enable_features": [
+                        "TranslateUI2016Q2"
+                    ]
                 }
             ]
         }
@@ -2801,6 +2933,29 @@
             ]
         }
     ],
+    "UKM": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "linux",
+                "mac",
+                "win",
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "params": {
+                        "RecordSessionId": "true"
+                    },
+                    "enable_features": [
+                        "Ukm"
+                    ]
+                }
+            ]
+        }
+    ],
     "UMA_EnableCellularLogUpload": [
         {
             "platforms": [
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S
index ab1168e..1a0a512 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/aes/aes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .type	_x86_64_AES_encrypt,@function
 .align	16
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S
index a90e935..2890ccf 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .extern	OPENSSL_ia32cap_P
 .hidden OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S
index 3f3c73b..04b161c 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/aes/bsaes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	asm_AES_encrypt
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S
index 4dfafa9..f3a089d 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/aes/vpaes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/bn/rsaz-avx2.S b/src/third_party/boringssl/linux-x86_64/crypto/bn/rsaz-avx2.S
index db078a9..08f38e8 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/bn/rsaz-avx2.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/bn/rsaz-avx2.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .globl	rsaz_1024_sqr_avx2
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont.S b/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont.S
index 0d2cea2..1f673ef 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont5.S b/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont5.S
index 33ca3c4..1ec58ca 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont5.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/bn/x86_64-mont5.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/chacha/chacha-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/chacha/chacha-x86_64.S
index 25ec715..62dc779 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/chacha/chacha-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/chacha/chacha-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
index c7e673f..d149d0f 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .extern	OPENSSL_ia32cap_P
 .hidden OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/ec/p256-x86_64-asm.S b/src/third_party/boringssl/linux-x86_64/crypto/ec/p256-x86_64-asm.S
index 785f269..2f9a5f4 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/ec/p256-x86_64-asm.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/ec/p256-x86_64-asm.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .extern	OPENSSL_ia32cap_P
 .hidden OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/md5/md5-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/md5/md5-x86_64.S
index 05369e2..8af6504 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/md5/md5-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/md5/md5-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .align	16
 
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/modes/aesni-gcm-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/modes/aesni-gcm-x86_64.S
index 9953e4c..62c6cd6 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/modes/aesni-gcm-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/modes/aesni-gcm-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .type	_aesni_ctr32_ghash_6x,@function
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/modes/ghash-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/modes/ghash-x86_64.S
index 8842c27..4afbc52 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/modes/ghash-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/modes/ghash-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .extern	OPENSSL_ia32cap_P
 .hidden OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/rand/rdrand-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/rand/rdrand-x86_64.S
index 94aab9c..7c1eeb7 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/rand/rdrand-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/rand/rdrand-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha1-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha1-x86_64.S
index 567bdfd..350d7d6 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha1-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha1-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .extern	OPENSSL_ia32cap_P
 .hidden OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha256-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha256-x86_64.S
index 273b7a5..62534be 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha256-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha256-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha512-x86_64.S b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha512-x86_64.S
index f272b64..1f1793b 100644
--- a/src/third_party/boringssl/linux-x86_64/crypto/sha/sha512-x86_64.S
+++ b/src/third_party/boringssl/linux-x86_64/crypto/sha/sha512-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .extern	OPENSSL_ia32cap_P
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S
index 52df2ae..d60757b 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/aes/aes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .p2align	4
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S
index 4e3b7d0..fd62bc8 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .globl	_aesni_encrypt
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S
index 6e679c1..195abd3 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/aes/bsaes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S
index 997cde8..867df68 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/aes/vpaes-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/bn/rsaz-avx2.S b/src/third_party/boringssl/mac-x86_64/crypto/bn/rsaz-avx2.S
index a913507..d25a2e0 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/bn/rsaz-avx2.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/bn/rsaz-avx2.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 .globl	_rsaz_1024_sqr_avx2
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont.S b/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont.S
index 41a0926..be3d13a 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont5.S b/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont5.S
index 24b56de..91980d8 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont5.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/bn/x86_64-mont5.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/chacha/chacha-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/chacha/chacha-x86_64.S
index 51c0caa..30edc7b 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/chacha/chacha-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/chacha/chacha-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
index 62d114d..9db2a58 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/cipher/chacha20_poly1305_x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/ec/p256-x86_64-asm.S b/src/third_party/boringssl/mac-x86_64/crypto/ec/p256-x86_64-asm.S
index aa434bf..2c58d48 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/ec/p256-x86_64-asm.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/ec/p256-x86_64-asm.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/md5/md5-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/md5/md5-x86_64.S
index 16fd2cc..776c116 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/md5/md5-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/md5/md5-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 .p2align	4
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/modes/aesni-gcm-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/modes/aesni-gcm-x86_64.S
index 901bb96..f185d0c 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/modes/aesni-gcm-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/modes/aesni-gcm-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/modes/ghash-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/modes/ghash-x86_64.S
index 814d796..4c98a93 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/modes/ghash-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/modes/ghash-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/rand/rdrand-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/rand/rdrand-x86_64.S
index f0df296..b259286 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/rand/rdrand-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/rand/rdrand-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha1-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha1-x86_64.S
index cf45d8a..ee70a4b 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha1-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha1-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha256-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha256-x86_64.S
index f00ef6d..ac6559e 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha256-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha256-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha512-x86_64.S b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha512-x86_64.S
index eabcb3a..0b738e6 100644
--- a/src/third_party/boringssl/mac-x86_64/crypto/sha/sha512-x86_64.S
+++ b/src/third_party/boringssl/mac-x86_64/crypto/sha/sha512-x86_64.S
@@ -1,4 +1,4 @@
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
 .text	
 
 
diff --git a/src/third_party/boringssl/src/FUZZING.md b/src/third_party/boringssl/src/FUZZING.md
index 70660ab..abf5d97 100644
--- a/src/third_party/boringssl/src/FUZZING.md
+++ b/src/third_party/boringssl/src/FUZZING.md
@@ -80,5 +80,5 @@
 
 ```
 cd fuzz
-./refresh_fuzzer_corpora.sh /path/to/fuzzer/mode/build /path/to/non/fuzzer/mode/build
+./refresh_ssl_corpora.sh /path/to/fuzzer/mode/build /path/to/non/fuzzer/mode/build
 ```
diff --git a/src/third_party/boringssl/src/crypto/cipher/e_tls.c b/src/third_party/boringssl/src/crypto/cipher/e_tls.c
index 7d9bbee..41b7470 100644
--- a/src/third_party/boringssl/src/crypto/cipher/e_tls.c
+++ b/src/third_party/boringssl/src/crypto/cipher/e_tls.c
@@ -262,24 +262,24 @@
 
   /* Remove CBC padding. Code from here on is timing-sensitive with respect to
    * |padding_ok| and |data_plus_mac_len| for CBC ciphers. */
-  unsigned padding_ok, data_plus_mac_len;
+  size_t padding_ok, data_plus_mac_len;
   if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
     if (!EVP_tls_cbc_remove_padding(
             &padding_ok, &data_plus_mac_len, out, total,
             EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx),
-            (unsigned)HMAC_size(&tls_ctx->hmac_ctx))) {
+            HMAC_size(&tls_ctx->hmac_ctx))) {
       /* Publicly invalid. This can be rejected in non-constant time. */
       OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
       return 0;
     }
   } else {
-    padding_ok = ~0u;
+    padding_ok = CONSTTIME_TRUE_S;
     data_plus_mac_len = total;
     /* |data_plus_mac_len| = |total| = |in_len| at this point. |in_len| has
      * already been checked against the MAC size at the top of the function. */
     assert(data_plus_mac_len >= HMAC_size(&tls_ctx->hmac_ctx));
   }
-  unsigned data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
+  size_t data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
 
   /* At this point, if the padding is valid, the first |data_plus_mac_len| bytes
    * after |out| are the plaintext and MAC. Otherwise, |data_plus_mac_len| is
@@ -332,8 +332,8 @@
    * safe to simply perform the padding check first, but it would not be under a
    * different choice of MAC location on padding failure. See
    * EVP_tls_cbc_remove_padding. */
-  unsigned good = constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len),
-                                       0);
+  size_t good =
+      constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len), 0);
   good &= padding_ok;
   if (!good) {
     OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
diff --git a/src/third_party/boringssl/src/crypto/cipher/internal.h b/src/third_party/boringssl/src/crypto/cipher/internal.h
index d29ce59..b9f88f2 100644
--- a/src/third_party/boringssl/src/crypto/cipher/internal.h
+++ b/src/third_party/boringssl/src/crypto/cipher/internal.h
@@ -110,9 +110,9 @@
  * If the function returns one, it runs in time independent of the contents of
  * |in|. It is also guaranteed that |*out_len| >= |mac_size|, satisfying
  * |EVP_tls_cbc_copy_mac|'s precondition. */
-int EVP_tls_cbc_remove_padding(unsigned *out_padding_ok, unsigned *out_len,
-                               const uint8_t *in, unsigned in_len,
-                               unsigned block_size, unsigned mac_size);
+int EVP_tls_cbc_remove_padding(size_t *out_padding_ok, size_t *out_len,
+                               const uint8_t *in, size_t in_len,
+                               size_t block_size, size_t mac_size);
 
 /* EVP_tls_cbc_copy_mac copies |md_size| bytes from the end of the first
  * |in_len| bytes of |in| to |out| in constant time (independent of the concrete
@@ -122,9 +122,8 @@
  * On entry:
  *   orig_len >= in_len >= md_size
  *   md_size <= EVP_MAX_MD_SIZE */
-void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
-                          const uint8_t *in, unsigned in_len,
-                          unsigned orig_len);
+void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
+                          size_t in_len, size_t orig_len);
 
 /* EVP_tls_cbc_record_digest_supported returns 1 iff |md| is a hash function
  * which EVP_tls_cbc_digest_record supports. */
diff --git a/src/third_party/boringssl/src/crypto/cipher/tls_cbc.c b/src/third_party/boringssl/src/crypto/cipher/tls_cbc.c
index 52880b0..a825c1c 100644
--- a/src/third_party/boringssl/src/crypto/cipher/tls_cbc.c
+++ b/src/third_party/boringssl/src/crypto/cipher/tls_cbc.c
@@ -73,20 +73,19 @@
  * supported by TLS.) */
 #define MAX_HASH_BLOCK_SIZE 128
 
-int EVP_tls_cbc_remove_padding(unsigned *out_padding_ok, unsigned *out_len,
-                               const uint8_t *in, unsigned in_len,
-                               unsigned block_size, unsigned mac_size) {
-  unsigned padding_length, good, to_check, i;
-  const unsigned overhead = 1 /* padding length byte */ + mac_size;
+int EVP_tls_cbc_remove_padding(size_t *out_padding_ok, size_t *out_len,
+                               const uint8_t *in, size_t in_len,
+                               size_t block_size, size_t mac_size) {
+  const size_t overhead = 1 /* padding length byte */ + mac_size;
 
   /* These lengths are all public so we can test them in non-constant time. */
   if (overhead > in_len) {
     return 0;
   }
 
-  padding_length = in[in_len - 1];
+  size_t padding_length = in[in_len - 1];
 
-  good = constant_time_ge(in_len, overhead + padding_length);
+  size_t good = constant_time_ge_s(in_len, overhead + padding_length);
   /* The padding consists of a length byte at the end of the record and
    * then that many bytes of padding, all with the same value as the
    * length byte. Thus, with the length byte included, there are i+1
@@ -96,12 +95,12 @@
    * decrypted information. Therefore we always have to check the maximum
    * amount of padding possible. (Again, the length of the record is
    * public information so we can use it.) */
-  to_check = 256; /* maximum amount of padding, inc length byte. */
+  size_t to_check = 256; /* maximum amount of padding, inc length byte. */
   if (to_check > in_len) {
     to_check = in_len;
   }
 
-  for (i = 0; i < to_check; i++) {
+  for (size_t i = 0; i < to_check; i++) {
     uint8_t mask = constant_time_ge_8(padding_length, i);
     uint8_t b = in[in_len - 1 - i];
     /* The final |padding_length+1| bytes should all have the value
@@ -111,7 +110,7 @@
 
   /* If any of the final |padding_length+1| bytes had the wrong value,
    * one or more of the lower eight bits of |good| will be cleared. */
-  good = constant_time_eq(0xff, good & 0xff);
+  good = constant_time_eq_s(0xff, good & 0xff);
 
   /* Always treat |padding_length| as zero on error. If, assuming block size of
    * 16, a padding of [<15 arbitrary bytes> 15] treated |padding_length| as 16
@@ -123,16 +122,15 @@
   return 1;
 }
 
-void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
-                          const uint8_t *in, unsigned in_len,
-                          unsigned orig_len) {
+void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
+                          size_t in_len, size_t orig_len) {
   uint8_t rotated_mac1[EVP_MAX_MD_SIZE], rotated_mac2[EVP_MAX_MD_SIZE];
   uint8_t *rotated_mac = rotated_mac1;
   uint8_t *rotated_mac_tmp = rotated_mac2;
 
   /* mac_end is the index of |in| just after the end of the MAC. */
-  unsigned mac_end = in_len;
-  unsigned mac_start = mac_end - md_size;
+  size_t mac_end = in_len;
+  size_t mac_start = mac_end - md_size;
 
   assert(orig_len >= in_len);
   assert(in_len >= md_size);
@@ -140,20 +138,20 @@
 
   /* scan_start contains the number of bytes that we can ignore because
    * the MAC's position can only vary by 255 bytes. */
-  unsigned scan_start = 0;
+  size_t scan_start = 0;
   /* This information is public so it's safe to branch based on it. */
   if (orig_len > md_size + 255 + 1) {
     scan_start = orig_len - (md_size + 255 + 1);
   }
 
-  unsigned rotate_offset = 0;
+  size_t rotate_offset = 0;
   uint8_t mac_started = 0;
   OPENSSL_memset(rotated_mac, 0, md_size);
-  for (unsigned i = scan_start, j = 0; i < orig_len; i++, j++) {
+  for (size_t i = scan_start, j = 0; i < orig_len; i++, j++) {
     if (j >= md_size) {
       j -= md_size;
     }
-    unsigned is_mac_start = constant_time_eq(i, mac_start);
+    size_t is_mac_start = constant_time_eq_s(i, mac_start);
     mac_started |= is_mac_start;
     uint8_t mac_ended = constant_time_ge_8(i, mac_end);
     rotated_mac[j] |= in[i] & mac_started & ~mac_ended;
@@ -163,12 +161,11 @@
 
   /* Now rotate the MAC. We rotate in log(md_size) steps, one for each bit
    * position. */
-  for (unsigned offset = 1; offset < md_size;
-       offset <<= 1, rotate_offset >>= 1) {
+  for (size_t offset = 1; offset < md_size; offset <<= 1, rotate_offset >>= 1) {
     /* Rotate by |offset| iff the corresponding bit is set in
      * |rotate_offset|, placing the result in |rotated_mac_tmp|. */
     const uint8_t skip_rotate = (rotate_offset & 1) - 1;
-    for (unsigned i = 0, j = offset; i < md_size; i++, j++) {
+    for (size_t i = 0, j = offset; i < md_size; i++, j++) {
       if (j >= md_size) {
         j -= md_size;
       }
@@ -211,40 +208,49 @@
     *((p)++) = (uint8_t)((n));       \
   } while (0)
 
+typedef union {
+  SHA_CTX sha1;
+  SHA256_CTX sha256;
+  SHA512_CTX sha512;
+} HASH_CTX;
+
+static void tls1_sha1_transform(HASH_CTX *ctx, const uint8_t *block) {
+  SHA1_Transform(&ctx->sha1, block);
+}
+
+static void tls1_sha256_transform(HASH_CTX *ctx, const uint8_t *block) {
+  SHA256_Transform(&ctx->sha256, block);
+}
+
+static void tls1_sha512_transform(HASH_CTX *ctx, const uint8_t *block) {
+  SHA512_Transform(&ctx->sha512, block);
+}
+
 /* These functions serialize the state of a hash and thus perform the standard
  * "final" operation without adding the padding and length that such a function
  * typically does. */
-static void tls1_sha1_final_raw(void *ctx, uint8_t *md_out) {
-  SHA_CTX *sha1 = ctx;
+static void tls1_sha1_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
+  SHA_CTX *sha1 = &ctx->sha1;
   u32toBE(sha1->h[0], md_out);
   u32toBE(sha1->h[1], md_out);
   u32toBE(sha1->h[2], md_out);
   u32toBE(sha1->h[3], md_out);
   u32toBE(sha1->h[4], md_out);
 }
-#define LARGEST_DIGEST_CTX SHA_CTX
 
-static void tls1_sha256_final_raw(void *ctx, uint8_t *md_out) {
-  SHA256_CTX *sha256 = ctx;
-  unsigned i;
-
-  for (i = 0; i < 8; i++) {
+static void tls1_sha256_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
+  SHA256_CTX *sha256 = &ctx->sha256;
+  for (unsigned i = 0; i < 8; i++) {
     u32toBE(sha256->h[i], md_out);
   }
 }
-#undef  LARGEST_DIGEST_CTX
-#define LARGEST_DIGEST_CTX SHA256_CTX
 
-static void tls1_sha512_final_raw(void *ctx, uint8_t *md_out) {
-  SHA512_CTX *sha512 = ctx;
-  unsigned i;
-
-  for (i = 0; i < 8; i++) {
+static void tls1_sha512_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
+  SHA512_CTX *sha512 = &ctx->sha512;
+  for (unsigned i = 0; i < 8; i++) {
     u64toBE(sha512->h[i], md_out);
   }
 }
-#undef  LARGEST_DIGEST_CTX
-#define LARGEST_DIGEST_CTX SHA512_CTX
 
 int EVP_tls_cbc_record_digest_supported(const EVP_MD *md) {
   switch (EVP_MD_type(md)) {
@@ -264,54 +270,42 @@
                               size_t data_plus_mac_plus_padding_size,
                               const uint8_t *mac_secret,
                               unsigned mac_secret_length) {
-  union {
-    double align;
-    uint8_t c[sizeof(LARGEST_DIGEST_CTX)];
-  } md_state;
-  void (*md_final_raw)(void *ctx, uint8_t *md_out);
-  void (*md_transform)(void *ctx, const uint8_t *block);
+  HASH_CTX md_state;
+  void (*md_final_raw)(HASH_CTX *ctx, uint8_t *md_out);
+  void (*md_transform)(HASH_CTX *ctx, const uint8_t *block);
   unsigned md_size, md_block_size = 64;
-  unsigned len, max_mac_bytes, num_blocks, num_starting_blocks, k,
-           mac_end_offset, c, index_a, index_b;
-  unsigned int bits; /* at most 18 bits */
-  uint8_t length_bytes[MAX_HASH_BIT_COUNT_BYTES];
-  /* hmac_pad is the masked HMAC key. */
-  uint8_t hmac_pad[MAX_HASH_BLOCK_SIZE];
-  uint8_t first_block[MAX_HASH_BLOCK_SIZE];
-  uint8_t mac_out[EVP_MAX_MD_SIZE];
-  unsigned i, j, md_out_size_u;
-  EVP_MD_CTX md_ctx;
-  /* mdLengthSize is the number of bytes in the length field that terminates
-  * the hash. */
+  /* md_length_size is the number of bytes in the length field that terminates
+   * the hash. */
   unsigned md_length_size = 8;
 
-  /* This is a, hopefully redundant, check that allows us to forget about
-   * many possible overflows later in this function. */
-  assert(data_plus_mac_plus_padding_size < 1024 * 1024);
+  /* Bound the acceptable input so we can forget about many possible overflows
+   * later in this function. This is redundant with the record size limits in
+   * TLS. */
+  if (data_plus_mac_plus_padding_size >= 1024 * 1024) {
+    assert(0);
+    return 0;
+  }
 
   switch (EVP_MD_type(md)) {
     case NID_sha1:
-      SHA1_Init((SHA_CTX *)md_state.c);
+      SHA1_Init(&md_state.sha1);
       md_final_raw = tls1_sha1_final_raw;
-      md_transform =
-          (void (*)(void *ctx, const uint8_t *block))SHA1_Transform;
-      md_size = 20;
+      md_transform = tls1_sha1_transform;
+      md_size = SHA_DIGEST_LENGTH;
       break;
 
     case NID_sha256:
-      SHA256_Init((SHA256_CTX *)md_state.c);
+      SHA256_Init(&md_state.sha256);
       md_final_raw = tls1_sha256_final_raw;
-      md_transform =
-          (void (*)(void *ctx, const uint8_t *block))SHA256_Transform;
-      md_size = 32;
+      md_transform = tls1_sha256_transform;
+      md_size = SHA256_DIGEST_LENGTH;
       break;
 
     case NID_sha384:
-      SHA384_Init((SHA512_CTX *)md_state.c);
+      SHA384_Init(&md_state.sha512);
       md_final_raw = tls1_sha512_final_raw;
-      md_transform =
-          (void (*)(void *ctx, const uint8_t *block))SHA512_Transform;
-      md_size = 384 / 8;
+      md_transform = tls1_sha512_transform;
+      md_size = SHA384_DIGEST_LENGTH;
       md_block_size = 128;
       md_length_size = 16;
       break;
@@ -328,7 +322,7 @@
   assert(md_block_size <= MAX_HASH_BLOCK_SIZE);
   assert(md_size <= EVP_MAX_MD_SIZE);
 
-  static const unsigned kHeaderLength = 13;
+  static const size_t kHeaderLength = 13;
 
   /* kVarianceBlocks is the number of blocks of the hash that we have to
    * calculate in constant time because they could be altered by the
@@ -337,16 +331,16 @@
    * TLSv1 has MACs up to 48 bytes long (SHA-384) and the padding is not
    * required to be minimal. Therefore we say that the final six blocks
    * can vary based on the padding. */
-  static const unsigned kVarianceBlocks = 6;
+  static const size_t kVarianceBlocks = 6;
 
   /* From now on we're dealing with the MAC, which conceptually has 13
    * bytes of `header' before the start of the data. */
-  len = data_plus_mac_plus_padding_size + kHeaderLength;
+  size_t len = data_plus_mac_plus_padding_size + kHeaderLength;
   /* max_mac_bytes contains the maximum bytes of bytes in the MAC, including
-  * |header|, assuming that there's no padding. */
-  max_mac_bytes = len - md_size - 1;
+   * |header|, assuming that there's no padding. */
+  size_t max_mac_bytes = len - md_size - 1;
   /* num_blocks is the maximum number of hash blocks. */
-  num_blocks =
+  size_t num_blocks =
       (max_mac_bytes + 1 + md_length_size + md_block_size - 1) / md_block_size;
   /* In order to calculate the MAC in constant time we have to handle
    * the final blocks specially because the padding value could cause the
@@ -354,43 +348,47 @@
    * can't leak where. However, |num_starting_blocks| worth of data can
    * be hashed right away because no padding value can affect whether
    * they are plaintext. */
-  num_starting_blocks = 0;
+  size_t num_starting_blocks = 0;
   /* k is the starting byte offset into the conceptual header||data where
    * we start processing. */
-  k = 0;
+  size_t k = 0;
   /* mac_end_offset is the index just past the end of the data to be
    * MACed. */
-  mac_end_offset = data_plus_mac_size + kHeaderLength - md_size;
+  size_t mac_end_offset = data_plus_mac_size + kHeaderLength - md_size;
   /* c is the index of the 0x80 byte in the final hash block that
    * contains application data. */
-  c = mac_end_offset % md_block_size;
+  size_t c = mac_end_offset % md_block_size;
   /* index_a is the hash block number that contains the 0x80 terminating
    * value. */
-  index_a = mac_end_offset / md_block_size;
+  size_t index_a = mac_end_offset / md_block_size;
   /* index_b is the hash block number that contains the 64-bit hash
    * length, in bits. */
-  index_b = (mac_end_offset + md_length_size) / md_block_size;
-  /* bits is the hash-length in bits. It includes the additional hash
-   * block for the masked HMAC key. */
+  size_t index_b = (mac_end_offset + md_length_size) / md_block_size;
 
   if (num_blocks > kVarianceBlocks) {
     num_starting_blocks = num_blocks - kVarianceBlocks;
     k = md_block_size * num_starting_blocks;
   }
 
-  bits = 8 * mac_end_offset;
+  /* bits is the hash-length in bits. It includes the additional hash
+   * block for the masked HMAC key. */
+  size_t bits = 8 * mac_end_offset; /* at most 18 bits to represent */
 
   /* Compute the initial HMAC block. */
   bits += 8 * md_block_size;
+  /* hmac_pad is the masked HMAC key. */
+  uint8_t hmac_pad[MAX_HASH_BLOCK_SIZE];
   OPENSSL_memset(hmac_pad, 0, md_block_size);
   assert(mac_secret_length <= sizeof(hmac_pad));
   OPENSSL_memcpy(hmac_pad, mac_secret, mac_secret_length);
-  for (i = 0; i < md_block_size; i++) {
+  for (size_t i = 0; i < md_block_size; i++) {
     hmac_pad[i] ^= 0x36;
   }
 
-  md_transform(md_state.c, hmac_pad);
+  md_transform(&md_state, hmac_pad);
 
+  /* The length check means |bits| fits in four bytes. */
+  uint8_t length_bytes[MAX_HASH_BIT_COUNT_BYTES];
   OPENSSL_memset(length_bytes, 0, md_length_size - 4);
   length_bytes[md_length_size - 4] = (uint8_t)(bits >> 24);
   length_bytes[md_length_size - 3] = (uint8_t)(bits >> 16);
@@ -399,27 +397,29 @@
 
   if (k > 0) {
     /* k is a multiple of md_block_size. */
+    uint8_t first_block[MAX_HASH_BLOCK_SIZE];
     OPENSSL_memcpy(first_block, header, 13);
     OPENSSL_memcpy(first_block + 13, data, md_block_size - 13);
-    md_transform(md_state.c, first_block);
-    for (i = 1; i < k / md_block_size; i++) {
-      md_transform(md_state.c, data + md_block_size * i - 13);
+    md_transform(&md_state, first_block);
+    for (size_t i = 1; i < k / md_block_size; i++) {
+      md_transform(&md_state, data + md_block_size * i - 13);
     }
   }
 
+  uint8_t mac_out[EVP_MAX_MD_SIZE];
   OPENSSL_memset(mac_out, 0, sizeof(mac_out));
 
   /* We now process the final hash blocks. For each block, we construct
    * it in constant time. If the |i==index_a| then we'll include the 0x80
    * bytes and zero pad etc. For each block we selectively copy it, in
    * constant time, to |mac_out|. */
-  for (i = num_starting_blocks; i <= num_starting_blocks + kVarianceBlocks;
-       i++) {
+  for (size_t i = num_starting_blocks;
+       i <= num_starting_blocks + kVarianceBlocks; i++) {
     uint8_t block[MAX_HASH_BLOCK_SIZE];
     uint8_t is_block_a = constant_time_eq_8(i, index_a);
     uint8_t is_block_b = constant_time_eq_8(i, index_b);
-    for (j = 0; j < md_block_size; j++) {
-      uint8_t b = 0, is_past_c, is_past_cp1;
+    for (size_t j = 0; j < md_block_size; j++) {
+      uint8_t b = 0;
       if (k < kHeaderLength) {
         b = header[k];
       } else if (k < data_plus_mac_plus_padding_size + kHeaderLength) {
@@ -427,8 +427,8 @@
       }
       k++;
 
-      is_past_c = is_block_a & constant_time_ge_8(j, c);
-      is_past_cp1 = is_block_a & constant_time_ge_8(j, c + 1);
+      uint8_t is_past_c = is_block_a & constant_time_ge_8(j, c);
+      uint8_t is_past_cp1 = is_block_a & constant_time_ge_8(j, c + 1);
       /* If this is the block containing the end of the
        * application data, and we are at the offset for the
        * 0x80 value, then overwrite b with 0x80. */
@@ -453,14 +453,15 @@
       block[j] = b;
     }
 
-    md_transform(md_state.c, block);
-    md_final_raw(md_state.c, block);
+    md_transform(&md_state, block);
+    md_final_raw(&md_state, block);
     /* If this is index_b, copy the hash value to |mac_out|. */
-    for (j = 0; j < md_size; j++) {
+    for (size_t j = 0; j < md_size; j++) {
       mac_out[j] |= block[j] & is_block_b;
     }
   }
 
+  EVP_MD_CTX md_ctx;
   EVP_MD_CTX_init(&md_ctx);
   if (!EVP_DigestInit_ex(&md_ctx, md, NULL /* engine */)) {
     EVP_MD_CTX_cleanup(&md_ctx);
@@ -468,12 +469,13 @@
   }
 
   /* Complete the HMAC in the standard manner. */
-  for (i = 0; i < md_block_size; i++) {
+  for (size_t i = 0; i < md_block_size; i++) {
     hmac_pad[i] ^= 0x6a;
   }
 
   EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size);
   EVP_DigestUpdate(&md_ctx, mac_out, md_size);
+  unsigned md_out_size_u;
   EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u);
   *md_out_size = md_out_size_u;
   EVP_MD_CTX_cleanup(&md_ctx);
diff --git a/src/third_party/boringssl/src/crypto/constant_time_test.cc b/src/third_party/boringssl/src/crypto/constant_time_test.cc
index adfe272..0ad7192 100644
--- a/src/third_party/boringssl/src/crypto/constant_time_test.cc
+++ b/src/third_party/boringssl/src/crypto/constant_time_test.cc
@@ -49,62 +49,66 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include <limits>
+
 #include <gtest/gtest.h>
 
 
-static const unsigned CONSTTIME_TRUE = (unsigned)(~0);
-static const unsigned CONSTTIME_FALSE = 0;
-static const uint8_t CONSTTIME_TRUE_8 = 0xff;
-static const uint8_t CONSTTIME_FALSE_8 = 0;
-
-static unsigned FromBool(bool b) {
-  return b ? CONSTTIME_TRUE : CONSTTIME_FALSE;
-}
-
 static uint8_t FromBool8(bool b) {
   return b ? CONSTTIME_TRUE_8 : CONSTTIME_FALSE_8;
 }
 
-static unsigned test_values[] = {
+static size_t FromBoolS(bool b) {
+  return b ? CONSTTIME_TRUE_S : CONSTTIME_FALSE_S;
+}
+
+static const uint8_t test_values_8[] = {0, 1, 2, 20, 32, 127, 128, 129, 255};
+
+static size_t test_values_s[] = {
     0,
     1,
     1024,
     12345,
     32000,
-    UINT_MAX / 2 - 1,
-    UINT_MAX / 2,
-    UINT_MAX / 2 + 1,
-    UINT_MAX - 1,
-    UINT_MAX,
+#if defined(OPENSSL_64_BIT)
+    0xffffffff / 2 - 1,
+    0xffffffff / 2,
+    0xffffffff / 2 + 1,
+    0xffffffff - 1,
+    0xffffffff,
+#endif
+    std::numeric_limits<size_t>::max() / 2 - 1,
+    std::numeric_limits<size_t>::max() / 2,
+    std::numeric_limits<size_t>::max() / 2 + 1,
+    std::numeric_limits<size_t>::max() - 1,
+    std::numeric_limits<size_t>::max(),
 };
 
-static uint8_t test_values_8[] = {0, 1, 2, 20, 32, 127, 128, 129, 255};
-
 static int signed_test_values[] = {
     0,     1,      -1,      1024,    -1024,       12345,      -12345,
     32000, -32000, INT_MAX, INT_MIN, INT_MAX - 1, INT_MIN + 1};
 
 TEST(ConstantTimeTest, Test) {
-  for (unsigned a : test_values) {
+  for (size_t a : test_values_s) {
     SCOPED_TRACE(a);
 
-    EXPECT_EQ(FromBool(a == 0), constant_time_is_zero(a));
+    EXPECT_EQ(FromBoolS(a == 0), constant_time_is_zero_s(a));
     EXPECT_EQ(FromBool8(a == 0), constant_time_is_zero_8(a));
 
-    for (unsigned b : test_values) {
+    for (size_t b : test_values_s) {
       SCOPED_TRACE(b);
 
-      EXPECT_EQ(FromBool(a < b), constant_time_lt(a, b));
+      EXPECT_EQ(FromBoolS(a < b), constant_time_lt_s(a, b));
       EXPECT_EQ(FromBool8(a < b), constant_time_lt_8(a, b));
 
-      EXPECT_EQ(FromBool(a >= b), constant_time_ge(a, b));
+      EXPECT_EQ(FromBoolS(a >= b), constant_time_ge_s(a, b));
       EXPECT_EQ(FromBool8(a >= b), constant_time_ge_8(a, b));
 
-      EXPECT_EQ(FromBool(a == b), constant_time_eq(a, b));
+      EXPECT_EQ(FromBoolS(a == b), constant_time_eq_s(a, b));
       EXPECT_EQ(FromBool8(a == b), constant_time_eq_8(a, b));
 
-      EXPECT_EQ(a, constant_time_select(CONSTTIME_TRUE, a, b));
-      EXPECT_EQ(b, constant_time_select(CONSTTIME_FALSE, a, b));
+      EXPECT_EQ(a, constant_time_select_s(CONSTTIME_TRUE_S, a, b));
+      EXPECT_EQ(b, constant_time_select_s(CONSTTIME_FALSE_S, a, b));
     }
   }
 
@@ -113,10 +117,10 @@
     for (int b : signed_test_values) {
       SCOPED_TRACE(b);
 
-      EXPECT_EQ(a, constant_time_select_int(CONSTTIME_TRUE, a, b));
-      EXPECT_EQ(b, constant_time_select_int(CONSTTIME_FALSE, a, b));
+      EXPECT_EQ(a, constant_time_select_int(CONSTTIME_TRUE_S, a, b));
+      EXPECT_EQ(b, constant_time_select_int(CONSTTIME_FALSE_S, a, b));
 
-      EXPECT_EQ(FromBool(a == b), constant_time_eq_int(a, b));
+      EXPECT_EQ(FromBoolS(a == b), constant_time_eq_int(a, b));
       EXPECT_EQ(FromBool8(a == b), constant_time_eq_int_8(a, b));
     }
   }
diff --git a/src/third_party/boringssl/src/crypto/cpu-ppc64le.c b/src/third_party/boringssl/src/crypto/cpu-ppc64le.c
index c431c81..54571bd 100644
--- a/src/third_party/boringssl/src/crypto/cpu-ppc64le.c
+++ b/src/third_party/boringssl/src/crypto/cpu-ppc64le.c
@@ -27,14 +27,12 @@
 #define PPC_FEATURE2_HAS_VCRYPTO 0x02000000
 #endif
 
-static unsigned long g_ppc64le_hwcap2 = 0;
-
 void OPENSSL_cpuid_setup(void) {
-  g_ppc64le_hwcap2 = getauxval(AT_HWCAP2);
+  OPENSSL_ppc64le_hwcap2 = getauxval(AT_HWCAP2);
 }
 
 int CRYPTO_is_PPC64LE_vcrypto_capable(void) {
-  return (g_ppc64le_hwcap2 & PPC_FEATURE2_HAS_VCRYPTO) != 0;
+  return (OPENSSL_ppc64le_hwcap2 & PPC_FEATURE2_HAS_VCRYPTO) != 0;
 }
 
 #endif  /* OPENSSL_PPC64LE */
diff --git a/src/third_party/boringssl/src/crypto/crypto.c b/src/third_party/boringssl/src/crypto/crypto.c
index c32f514..174c74a 100644
--- a/src/third_party/boringssl/src/crypto/crypto.c
+++ b/src/third_party/boringssl/src/crypto/crypto.c
@@ -49,6 +49,7 @@
  * far, the init constructor function only sets the capability variables. */
 
 #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
+
 /* This value must be explicitly initialised to zero in order to work around a
  * bug in libtool or the linker on OS X.
  *
@@ -57,6 +58,11 @@
  * initialising it to zero, it becomes a "data symbol", which isn't so
  * affected. */
 uint32_t OPENSSL_ia32cap_P[4] = {0};
+
+#elif defined(OPENSSL_PPC64LE)
+
+unsigned long OPENSSL_ppc64le_hwcap2 = 0;
+
 #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
 
 #include <openssl/arm_arch.h>
diff --git a/src/third_party/boringssl/src/crypto/curve25519/ed25519_tests.txt b/src/third_party/boringssl/src/crypto/curve25519/ed25519_tests.txt
index 4d43417..2e185a7 100644
--- a/src/third_party/boringssl/src/crypto/curve25519/ed25519_tests.txt
+++ b/src/third_party/boringssl/src/crypto/curve25519/ed25519_tests.txt
@@ -2575,3 +2575,16 @@
 PUB: c94576641f4a893cdfcee7b39fc21929b86b349976d7b0a46d39a588bcfe4357
 MESSAGE: db8ef02e3033e6b96a56cab05082fb4695f4a1c916250dd75173f430a10c9468817709d37623346ae8245b42bda0da6b60462ccfdfc75a9ab994e66c9ab9fecdd8599610910affe4f10215cb280bf8f9f2700a444796dae93e06c6bea7d8b4fe1301baa79ccec769368feb2442c7de84f095e6b3bff63d388cbafb2b9809dc38e9b12ebd039c0a57f4d522e91ec8d1f2b8d23a4a0ae059af85393bb0a15f749110f6774a1fd731a6ec213e4ff435daab546d31ed9ec3b6d8cc2edacebf4facc5566556eea92e5b3f2542239b25e28012dd4ef40072eebf83ed2a255181f3a442189d68c6c609f4dfdf3db7d67d087a2fcd6d2dc50bbfed8bfbbfcb74d3c41f02a87865b13b8efcf5c3581257be0aa913f60c370527bde11a475c136a17c5eefeb03f5bff28693ed841e8ed1f7c29102f5599dd444009bcea6a92d5574152458e0caf8a36aa72b5dc4908a6461c9b741453005c8fbcc68113ae184208ee14b835480c6efafed18a76000b38e5858290f4d51f52f096cbe490e1eb5cacb226ec495a55a7fa457843d57fab67f8be7e209334785bdd665d7b63e4daf57b6e78928b603c8c0f9bc85464733b61273ef9e2b8a0cd7c3bf8ee0a6872e34d5a27a625e35eaf7ff5440b8b141af704df70c9c18623bd11209513192505105cd7bcfa5f0d919da706948fbe1f761f315846aa3b4813dd9ba3d81b9204e5409c0382b6eb
 SIG: 0f80ff5d17488fe26f93c543b04ed959b5f0643fc61c7f2c3bc60132ba9c6210c8b250ea5e84d07b01de68bc174414eeeb31fdc2ba6823e231e312a91ededd02
+
+
+# Additional test vectors from RFC 8032
+
+PRIV: f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e
+PUB: 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e
+MESSAGE: 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0
+SIG: 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03
+
+PRIV: 833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf
+PUB: ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf
+MESSAGE: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
+SIG: dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704
diff --git a/src/third_party/boringssl/src/crypto/digest/digest_test.cc b/src/third_party/boringssl/src/crypto/digest/digest_test.cc
index 36a62ab..15c48e0 100644
--- a/src/third_party/boringssl/src/crypto/digest/digest_test.cc
+++ b/src/third_party/boringssl/src/crypto/digest/digest_test.cc
@@ -225,13 +225,6 @@
     if (!CompareDigest(test, digest.get(), EVP_MD_size(test->md.func()))) {
       return false;
     }
-
-    // Test the deprecated static buffer variant, until it's removed.
-    out = test->md.one_shot_func((const uint8_t *)test->input,
-                                 strlen(test->input), NULL);
-    if (!CompareDigest(test, out, EVP_MD_size(test->md.func()))) {
-      return false;
-    }
   }
 
   return true;
diff --git a/src/third_party/boringssl/src/crypto/evp/evp.c b/src/third_party/boringssl/src/crypto/evp/evp.c
index f083879..f8fe6ce 100644
--- a/src/third_party/boringssl/src/crypto/evp/evp.c
+++ b/src/third_party/boringssl/src/crypto/evp/evp.c
@@ -120,13 +120,6 @@
   return 0;
 }
 
-int EVP_PKEY_supports_digest(const EVP_PKEY *pkey, const EVP_MD *md) {
-  if (pkey->ameth && pkey->ameth->pkey_supports_digest) {
-    return pkey->ameth->pkey_supports_digest(pkey, md);
-  }
-  return 1;
-}
-
 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
   if (a->type != b->type) {
     return -1;
diff --git a/src/third_party/boringssl/src/crypto/evp/internal.h b/src/third_party/boringssl/src/crypto/evp/internal.h
index 0783143..cdbd56a 100644
--- a/src/third_party/boringssl/src/crypto/evp/internal.h
+++ b/src/third_party/boringssl/src/crypto/evp/internal.h
@@ -100,12 +100,6 @@
    * custom implementations which do not expose key material and parameters.*/
   int (*pkey_opaque)(const EVP_PKEY *pk);
 
-  /* pkey_supports_digest returns one if |pkey| supports digests of
-   * type |md|. This is intended for use with EVP_PKEYs backing custom
-   * implementations which can't sign all digests. If null, it is
-   * assumed that all digests are supported. */
-  int (*pkey_supports_digest)(const EVP_PKEY *pkey, const EVP_MD *md);
-
   int (*pkey_size)(const EVP_PKEY *pk);
   int (*pkey_bits)(const EVP_PKEY *pk);
 
diff --git a/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c b/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c
index d4f4132..0e5cdee 100644
--- a/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c
+++ b/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c
@@ -256,7 +256,6 @@
   dsa_priv_encode,
 
   NULL /* pkey_opaque */,
-  NULL /* pkey_supports_digest */,
 
   int_dsa_size,
   dsa_bits,
diff --git a/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.c b/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.c
index 8d44dcd..1f1bf2f 100644
--- a/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.c
+++ b/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.c
@@ -244,7 +244,6 @@
   eckey_priv_encode,
 
   eckey_opaque,
-  0 /* pkey_supports_digest */,
 
   int_ec_size,
   ec_bits,
diff --git a/src/third_party/boringssl/src/crypto/evp/p_rsa.c b/src/third_party/boringssl/src/crypto/evp/p_rsa.c
index ea2ba99..6b25fa2 100644
--- a/src/third_party/boringssl/src/crypto/evp/p_rsa.c
+++ b/src/third_party/boringssl/src/crypto/evp/p_rsa.c
@@ -386,22 +386,15 @@
   }
 
   if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
-    size_t plaintext_len;
-    int message_len;
-
+    size_t padded_len;
     if (!setup_tbuf(rctx, ctx) ||
-        !RSA_decrypt(rsa, &plaintext_len, rctx->tbuf, key_len, in, inlen,
-                     RSA_NO_PADDING)) {
+        !RSA_decrypt(rsa, &padded_len, rctx->tbuf, key_len, in, inlen,
+                     RSA_NO_PADDING) ||
+        !RSA_padding_check_PKCS1_OAEP_mgf1(
+            out, outlen, key_len, rctx->tbuf, padded_len, rctx->oaep_label,
+            rctx->oaep_labellen, rctx->md, rctx->mgf1md)) {
       return 0;
     }
-
-    message_len = RSA_padding_check_PKCS1_OAEP_mgf1(
-        out, key_len, rctx->tbuf, plaintext_len, rctx->oaep_label,
-        rctx->oaep_labellen, rctx->md, rctx->mgf1md);
-    if (message_len < 0) {
-      return 0;
-    }
-    *outlen = message_len;
     return 1;
   }
 
diff --git a/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c b/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c
index 2c4b266..2072595 100644
--- a/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c
+++ b/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c
@@ -162,10 +162,6 @@
   return RSA_is_opaque(pkey->pkey.rsa);
 }
 
-static int rsa_supports_digest(const EVP_PKEY *pkey, const EVP_MD *md) {
-  return RSA_supports_digest(pkey->pkey.rsa, md);
-}
-
 static int int_rsa_size(const EVP_PKEY *pkey) {
   return RSA_size(pkey->pkey.rsa);
 }
@@ -189,7 +185,6 @@
   rsa_priv_encode,
 
   rsa_opaque,
-  rsa_supports_digest,
 
   int_rsa_size,
   rsa_bits,
diff --git a/src/third_party/boringssl/src/crypto/evp/pbkdf.c b/src/third_party/boringssl/src/crypto/evp/pbkdf.c
index 1792cdc..daebb2d 100644
--- a/src/third_party/boringssl/src/crypto/evp/pbkdf.c
+++ b/src/third_party/boringssl/src/crypto/evp/pbkdf.c
@@ -65,83 +65,76 @@
 int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len,
                       const uint8_t *salt, size_t salt_len, unsigned iterations,
                       const EVP_MD *digest, size_t key_len, uint8_t *out_key) {
-  uint8_t digest_tmp[EVP_MAX_MD_SIZE], *p, itmp[4];
-  size_t cplen, mdlen, tkeylen, k;
-  unsigned j;
+  /* See RFC 8018, section 5.2. */
+  int ret = 0;
+  size_t md_len = EVP_MD_size(digest);
   uint32_t i = 1;
-  HMAC_CTX hctx_tpl, hctx;
+  HMAC_CTX hctx;
+  HMAC_CTX_init(&hctx);
 
-  mdlen = EVP_MD_size(digest);
-  HMAC_CTX_init(&hctx_tpl);
-  p = out_key;
-  tkeylen = key_len;
-  if (!HMAC_Init_ex(&hctx_tpl, password, password_len, digest, NULL)) {
-    HMAC_CTX_cleanup(&hctx_tpl);
-    return 0;
+  if (!HMAC_Init_ex(&hctx, password, password_len, digest, NULL)) {
+    goto err;
   }
-  while (tkeylen) {
-    if (tkeylen > mdlen) {
-      cplen = mdlen;
-    } else {
-      cplen = tkeylen;
+
+  while (key_len > 0) {
+    size_t todo = md_len;
+    if (todo > key_len) {
+      todo = key_len;
     }
-    /* We are unlikely to ever use more than 256 blocks (5120 bits!)
-     * but just in case... */
-    itmp[0] = (uint8_t)((i >> 24) & 0xff);
-    itmp[1] = (uint8_t)((i >> 16) & 0xff);
-    itmp[2] = (uint8_t)((i >> 8) & 0xff);
-    itmp[3] = (uint8_t)(i & 0xff);
-    if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) {
-      HMAC_CTX_cleanup(&hctx_tpl);
-      return 0;
-    }
-    if (!HMAC_Update(&hctx, salt, salt_len) ||
-        !HMAC_Update(&hctx, itmp, 4) ||
+
+    uint8_t i_buf[4];
+    i_buf[0] = (uint8_t)((i >> 24) & 0xff);
+    i_buf[1] = (uint8_t)((i >> 16) & 0xff);
+    i_buf[2] = (uint8_t)((i >> 8) & 0xff);
+    i_buf[3] = (uint8_t)(i & 0xff);
+
+    /* Compute U_1. */
+    uint8_t digest_tmp[EVP_MAX_MD_SIZE];
+    if (!HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL) ||
+        !HMAC_Update(&hctx, salt, salt_len) ||
+        !HMAC_Update(&hctx, i_buf, 4) ||
         !HMAC_Final(&hctx, digest_tmp, NULL)) {
-      HMAC_CTX_cleanup(&hctx_tpl);
-      HMAC_CTX_cleanup(&hctx);
-      return 0;
+      goto err;
     }
-    HMAC_CTX_cleanup(&hctx);
-    OPENSSL_memcpy(p, digest_tmp, cplen);
-    for (j = 1; j < iterations; j++) {
-      if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) {
-        HMAC_CTX_cleanup(&hctx_tpl);
-        return 0;
-      }
-      if (!HMAC_Update(&hctx, digest_tmp, mdlen) ||
+
+    OPENSSL_memcpy(out_key, digest_tmp, todo);
+    for (unsigned j = 1; j < iterations; j++) {
+      /* Compute the remaining U_* values and XOR. */
+      if (!HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL) ||
+          !HMAC_Update(&hctx, digest_tmp, md_len) ||
           !HMAC_Final(&hctx, digest_tmp, NULL)) {
-        HMAC_CTX_cleanup(&hctx_tpl);
-        HMAC_CTX_cleanup(&hctx);
-        return 0;
+        goto err;
       }
-      HMAC_CTX_cleanup(&hctx);
-      for (k = 0; k < cplen; k++) {
-        p[k] ^= digest_tmp[k];
+      for (size_t k = 0; k < todo; k++) {
+        out_key[k] ^= digest_tmp[k];
       }
     }
-    tkeylen -= cplen;
+
+    key_len -= todo;
+    out_key += todo;
     i++;
-    p += cplen;
   }
-  HMAC_CTX_cleanup(&hctx_tpl);
 
-  // RFC 2898 describes iterations (c) as being a "positive integer", so a
-  // value of 0 is an error.
-  //
-  // Unfortunatley not all consumers of PKCS5_PBKDF2_HMAC() check their return
-  // value, expecting it to succeed and unconditonally using |out_key|.
-  // As a precaution for such callsites in external code, the old behavior
-  // of iterations < 1 being treated as iterations == 1 is preserved, but
-  // additionally an error result is returned.
-  //
-  // TODO(eroman): Figure out how to remove this compatibility hack, or change
-  // the default to something more sensible like 2048.
+  /* RFC 8018 describes iterations (c) as being a "positive integer", so a
+   * value of 0 is an error.
+   *
+   * Unfortunately not all consumers of PKCS5_PBKDF2_HMAC() check their return
+   * value, expecting it to succeed and unconditionally using |out_key|.  As a
+   * precaution for such callsites in external code, the old behavior of
+   * iterations < 1 being treated as iterations == 1 is preserved, but
+   * additionally an error result is returned.
+   *
+   * TODO(eroman): Figure out how to remove this compatibility hack, or change
+   * the default to something more sensible like 2048. */
   if (iterations == 0) {
-    return 0;
+    goto err;
   }
 
-  return 1;
+  ret = 1;
+
+err:
+  HMAC_CTX_cleanup(&hctx);
+  return ret;
 }
 
 int PKCS5_PBKDF2_HMAC_SHA1(const char *password, size_t password_len,
diff --git a/src/third_party/boringssl/src/crypto/ex_data.c b/src/third_party/boringssl/src/crypto/ex_data.c
index 5286513..20b762e 100644
--- a/src/third_party/boringssl/src/crypto/ex_data.c
+++ b/src/third_party/boringssl/src/crypto/ex_data.c
@@ -239,6 +239,13 @@
     return 1;
   }
 
+  for (size_t i = 0; i < ex_data_class->num_reserved; i++) {
+    void *ptr = CRYPTO_get_ex_data(from, i);
+    if (!CRYPTO_set_ex_data(to, i, ptr)) {
+      return 0;
+    }
+  }
+
   STACK_OF(CRYPTO_EX_DATA_FUNCS) *func_pointers;
   if (!get_func_pointers(&func_pointers, ex_data_class)) {
     return 0;
@@ -252,7 +259,10 @@
       func_pointer->dup_func(to, from, &ptr, i + ex_data_class->num_reserved,
                              func_pointer->argl, func_pointer->argp);
     }
-    CRYPTO_set_ex_data(to, i + ex_data_class->num_reserved, ptr);
+    if (!CRYPTO_set_ex_data(to, i + ex_data_class->num_reserved, ptr)) {
+      sk_CRYPTO_EX_DATA_FUNCS_free(func_pointers);
+      return 0;
+    }
   }
 
   sk_CRYPTO_EX_DATA_FUNCS_free(func_pointers);
diff --git a/src/third_party/boringssl/src/crypto/hmac/hmac.c b/src/third_party/boringssl/src/crypto/hmac/hmac.c
index a252667..931f7a1 100644
--- a/src/third_party/boringssl/src/crypto/hmac/hmac.c
+++ b/src/third_party/boringssl/src/crypto/hmac/hmac.c
@@ -69,15 +69,6 @@
               const uint8_t *data, size_t data_len, uint8_t *out,
               unsigned int *out_len) {
   HMAC_CTX ctx;
-  static uint8_t static_out_buffer[EVP_MAX_MD_SIZE];
-
-  /* OpenSSL has traditionally supported using a static buffer if |out| is
-   * NULL. We maintain that but don't document it. This behaviour should be
-   * considered to be deprecated. */
-  if (out == NULL) {
-    out = static_out_buffer;
-  }
-
   HMAC_CTX_init(&ctx);
   if (!HMAC_Init_ex(&ctx, key, key_len, evp_md, NULL) ||
       !HMAC_Update(&ctx, data, data_len) ||
diff --git a/src/third_party/boringssl/src/crypto/internal.h b/src/third_party/boringssl/src/crypto/internal.h
index 2724956..7ce99a4 100644
--- a/src/third_party/boringssl/src/crypto/internal.h
+++ b/src/third_party/boringssl/src/crypto/internal.h
@@ -183,17 +183,22 @@
  *
  * can be written as
  *
- * unsigned int lt = constant_time_lt(a, b);
- * c = constant_time_select(lt, a, b); */
+ * size_t lt = constant_time_lt_s(a, b);
+ * c = constant_time_select_s(lt, a, b); */
 
-/* constant_time_msb returns the given value with the MSB copied to all the
+#define CONSTTIME_TRUE_S ~((size_t)0)
+#define CONSTTIME_FALSE_S ((size_t)0)
+#define CONSTTIME_TRUE_8 ((uint8_t)0xff)
+#define CONSTTIME_FALSE_8 ((uint8_t)0)
+
+/* constant_time_msb_s returns the given value with the MSB copied to all the
  * other bits. */
-static inline unsigned int constant_time_msb(unsigned int a) {
-  return (unsigned int)((int)(a) >> (sizeof(int) * 8 - 1));
+static inline size_t constant_time_msb_s(size_t a) {
+  return 0u - (a >> (sizeof(a) * 8 - 1));
 }
 
-/* constant_time_lt returns 0xff..f if a < b and 0 otherwise. */
-static inline unsigned int constant_time_lt(unsigned int a, unsigned int b) {
+/* constant_time_lt_s returns 0xff..f if a < b and 0 otherwise. */
+static inline size_t constant_time_lt_s(size_t a, size_t b) {
   /* Consider the two cases of the problem:
    *   msb(a) == msb(b): a < b iff the MSB of a - b is set.
    *   msb(a) != msb(b): a < b iff the MSB of b is set.
@@ -225,26 +230,28 @@
    * (check-sat)
    * (get-model)
    */
-  return constant_time_msb(a^((a^b)|((a-b)^a)));
+  return constant_time_msb_s(a^((a^b)|((a-b)^a)));
 }
 
-/* constant_time_lt_8 acts like |constant_time_lt| but returns an 8-bit mask. */
-static inline uint8_t constant_time_lt_8(unsigned int a, unsigned int b) {
-  return (uint8_t)(constant_time_lt(a, b));
+/* constant_time_lt_8 acts like |constant_time_lt_s| but returns an 8-bit
+ * mask. */
+static inline uint8_t constant_time_lt_8(size_t a, size_t b) {
+  return (uint8_t)(constant_time_lt_s(a, b));
 }
 
-/* constant_time_gt returns 0xff..f if a >= b and 0 otherwise. */
-static inline unsigned int constant_time_ge(unsigned int a, unsigned int b) {
-  return ~constant_time_lt(a, b);
+/* constant_time_ge_s returns 0xff..f if a >= b and 0 otherwise. */
+static inline size_t constant_time_ge_s(size_t a, size_t b) {
+  return ~constant_time_lt_s(a, b);
 }
 
-/* constant_time_ge_8 acts like |constant_time_ge| but returns an 8-bit mask. */
-static inline uint8_t constant_time_ge_8(unsigned int a, unsigned int b) {
-  return (uint8_t)(constant_time_ge(a, b));
+/* constant_time_ge_8 acts like |constant_time_ge_s| but returns an 8-bit
+ * mask. */
+static inline uint8_t constant_time_ge_8(size_t a, size_t b) {
+  return (uint8_t)(constant_time_ge_s(a, b));
 }
 
 /* constant_time_is_zero returns 0xff..f if a == 0 and 0 otherwise. */
-static inline unsigned int constant_time_is_zero(unsigned int a) {
+static inline size_t constant_time_is_zero_s(size_t a) {
   /* Here is an SMT-LIB verification of this formula:
    *
    * (define-fun is_zero ((a (_ BitVec 32))) (_ BitVec 32)
@@ -257,41 +264,42 @@
    * (check-sat)
    * (get-model)
    */
-  return constant_time_msb(~a & (a - 1));
+  return constant_time_msb_s(~a & (a - 1));
 }
 
-/* constant_time_is_zero_8 acts like constant_time_is_zero but returns an 8-bit
+/* constant_time_is_zero_8 acts like |constant_time_is_zero_s| but returns an
+ * 8-bit mask. */
+static inline uint8_t constant_time_is_zero_8(size_t a) {
+  return (uint8_t)(constant_time_is_zero_s(a));
+}
+
+/* constant_time_eq_s returns 0xff..f if a == b and 0 otherwise. */
+static inline size_t constant_time_eq_s(size_t a, size_t b) {
+  return constant_time_is_zero_s(a ^ b);
+}
+
+/* constant_time_eq_8 acts like |constant_time_eq_s| but returns an 8-bit
  * mask. */
-static inline uint8_t constant_time_is_zero_8(unsigned int a) {
-  return (uint8_t)(constant_time_is_zero(a));
+static inline uint8_t constant_time_eq_8(size_t a, size_t b) {
+  return (uint8_t)(constant_time_eq_s(a, b));
 }
 
-/* constant_time_eq returns 0xff..f if a == b and 0 otherwise. */
-static inline unsigned int constant_time_eq(unsigned int a, unsigned int b) {
-  return constant_time_is_zero(a ^ b);
-}
-
-/* constant_time_eq_8 acts like |constant_time_eq| but returns an 8-bit mask. */
-static inline uint8_t constant_time_eq_8(unsigned int a, unsigned int b) {
-  return (uint8_t)(constant_time_eq(a, b));
-}
-
-/* constant_time_eq_int acts like |constant_time_eq| but works on int values. */
-static inline unsigned int constant_time_eq_int(int a, int b) {
-  return constant_time_eq((unsigned)(a), (unsigned)(b));
+/* constant_time_eq_int acts like |constant_time_eq_s| but works on int
+ * values. */
+static inline size_t constant_time_eq_int(int a, int b) {
+  return constant_time_eq_s((size_t)(a), (size_t)(b));
 }
 
 /* constant_time_eq_int_8 acts like |constant_time_eq_int| but returns an 8-bit
  * mask. */
 static inline uint8_t constant_time_eq_int_8(int a, int b) {
-  return constant_time_eq_8((unsigned)(a), (unsigned)(b));
+  return constant_time_eq_8((size_t)(a), (size_t)(b));
 }
 
-/* constant_time_select returns (mask & a) | (~mask & b). When |mask| is all 1s
- * or all 0s (as returned by the methods above), the select methods return
+/* constant_time_select_s returns (mask & a) | (~mask & b). When |mask| is all
+ * 1s or all 0s (as returned by the methods above), the select methods return
  * either |a| (if |mask| is nonzero) or |b| (if |mask| is zero). */
-static inline unsigned int constant_time_select(unsigned int mask,
-                                                unsigned int a, unsigned int b) {
+static inline size_t constant_time_select_s(size_t mask, size_t a, size_t b) {
   return (mask & a) | (~mask & b);
 }
 
@@ -299,13 +307,13 @@
  * 8-bit values. */
 static inline uint8_t constant_time_select_8(uint8_t mask, uint8_t a,
                                              uint8_t b) {
-  return (uint8_t)(constant_time_select(mask, a, b));
+  return (uint8_t)(constant_time_select_s(mask, a, b));
 }
 
 /* constant_time_select_int acts like |constant_time_select| but operates on
  * ints. */
-static inline int constant_time_select_int(unsigned int mask, int a, int b) {
-  return (int)(constant_time_select(mask, (unsigned)(a), (unsigned)(b)));
+static inline int constant_time_select_int(size_t mask, int a, int b) {
+  return (int)(constant_time_select_s(mask, (size_t)(a), (size_t)(b)));
 }
 
 
diff --git a/src/third_party/boringssl/src/crypto/md5/md5.c b/src/third_party/boringssl/src/crypto/md5/md5.c
index 7712f47..adc5957 100644
--- a/src/third_party/boringssl/src/crypto/md5/md5.c
+++ b/src/third_party/boringssl/src/crypto/md5/md5.c
@@ -65,13 +65,6 @@
 
 uint8_t *MD5(const uint8_t *data, size_t len, uint8_t *out) {
   MD5_CTX ctx;
-  static uint8_t digest[MD5_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = digest;
-  }
-
   MD5_Init(&ctx);
   MD5_Update(&ctx, data, len);
   MD5_Final(out, &ctx);
diff --git a/src/third_party/boringssl/src/crypto/modes/polyval.c b/src/third_party/boringssl/src/crypto/modes/polyval.c
index 33d37eb..83df0ab 100644
--- a/src/third_party/boringssl/src/crypto/modes/polyval.c
+++ b/src/third_party/boringssl/src/crypto/modes/polyval.c
@@ -36,11 +36,11 @@
 static void reverse_and_mulX_ghash(polyval_block *b) {
   uint64_t hi = b->u[0];
   uint64_t lo = b->u[1];
-  const unsigned carry = constant_time_eq(hi & 1, 1);
+  const size_t carry = constant_time_eq_s(hi & 1, 1);
   hi >>= 1;
   hi |= lo << 63;
   lo >>= 1;
-  lo ^= ((uint64_t) constant_time_select(carry, 0xe1, 0)) << 56;
+  lo ^= ((uint64_t) constant_time_select_s(carry, 0xe1, 0)) << 56;
 
   b->u[0] = CRYPTO_bswap8(lo);
   b->u[1] = CRYPTO_bswap8(hi);
diff --git a/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl b/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl
index 6e487b8..6043bc7 100755
--- a/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl
+++ b/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl
@@ -1134,7 +1134,7 @@
 OPTION	DOTNAME
 ___
 }
-print STDOUT "#if defined(__x86_64__)\n" if ($gas);
+print STDOUT "#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)\n" if ($gas);
 
 while(defined(my $line=<>)) {
 
diff --git a/src/third_party/boringssl/src/crypto/rsa/internal.h b/src/third_party/boringssl/src/crypto/rsa/internal.h
index b6a0727..b865a0a 100644
--- a/src/third_party/boringssl/src/crypto/rsa/internal.h
+++ b/src/third_party/boringssl/src/crypto/rsa/internal.h
@@ -97,16 +97,19 @@
 
 int RSA_padding_add_PKCS1_type_1(uint8_t *to, size_t to_len,
                                  const uint8_t *from, size_t from_len);
-int RSA_padding_check_PKCS1_type_1(uint8_t *to, unsigned to_len,
-                                   const uint8_t *from, unsigned from_len);
+int RSA_padding_check_PKCS1_type_1(uint8_t *out, size_t *out_len,
+                                   size_t max_out, const uint8_t *from,
+                                   size_t from_len);
 int RSA_padding_add_PKCS1_type_2(uint8_t *to, size_t to_len,
                                  const uint8_t *from, size_t from_len);
-int RSA_padding_check_PKCS1_type_2(uint8_t *to, unsigned to_len,
-                                   const uint8_t *from, unsigned from_len);
-int RSA_padding_check_PKCS1_OAEP_mgf1(uint8_t *to, unsigned to_len,
-                                      const uint8_t *from, unsigned from_len,
-                                      const uint8_t *param, unsigned plen,
-                                      const EVP_MD *md, const EVP_MD *mgf1md);
+int RSA_padding_check_PKCS1_type_2(uint8_t *out, size_t *out_len,
+                                   size_t max_out, const uint8_t *from,
+                                   size_t from_len);
+int RSA_padding_check_PKCS1_OAEP_mgf1(uint8_t *out, size_t *out_len,
+                                      size_t max_out, const uint8_t *from,
+                                      size_t from_len, const uint8_t *param,
+                                      size_t param_len, const EVP_MD *md,
+                                      const EVP_MD *mgf1md);
 int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from,
                          size_t from_len);
 
diff --git a/src/third_party/boringssl/src/crypto/rsa/padding.c b/src/third_party/boringssl/src/crypto/rsa/padding.c
index ac583c4..dee44dd 100644
--- a/src/third_party/boringssl/src/crypto/rsa/padding.c
+++ b/src/third_party/boringssl/src/crypto/rsa/padding.c
@@ -92,56 +92,56 @@
   return 1;
 }
 
-int RSA_padding_check_PKCS1_type_1(uint8_t *to, unsigned to_len,
-                                   const uint8_t *from, unsigned from_len) {
-  unsigned i, j;
-  const uint8_t *p;
-
+int RSA_padding_check_PKCS1_type_1(uint8_t *out, size_t *out_len,
+                                   size_t max_out, const uint8_t *from,
+                                   size_t from_len) {
+  /* See RFC 8017, section 9.2. This is part of signature verification and thus
+   * does not need to run in constant-time. */
   if (from_len < 2) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_SMALL);
-    return -1;
+    return 0;
   }
 
-  p = from;
-  if ((*(p++) != 0) || (*(p++) != 1)) {
+  /* Check the header. */
+  if (from[0] != 0 || from[1] != 1) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_BLOCK_TYPE_IS_NOT_01);
-    return -1;
+    return 0;
   }
 
-  /* scan over padding data */
-  j = from_len - 2; /* one for leading 00, one for type. */
-  for (i = 0; i < j; i++) {
-    /* should decrypt to 0xff */
-    if (*p != 0xff) {
-      if (*p == 0) {
-        p++;
-        break;
-      } else {
-        OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT);
-        return -1;
-      }
+  /* Scan over padded data, looking for the 00. */
+  size_t pad;
+  for (pad = 2 /* header */; pad < from_len; pad++) {
+    if (from[pad] == 0x00) {
+      break;
     }
-    p++;
+
+    if (from[pad] != 0xff) {
+      OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT);
+      return 0;
+    }
   }
 
-  if (i == j) {
+  if (pad == from_len) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_NULL_BEFORE_BLOCK_MISSING);
-    return -1;
+    return 0;
   }
 
-  if (i < 8) {
+  if (pad < 2 /* header */ + 8) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_PAD_BYTE_COUNT);
-    return -1;
+    return 0;
   }
-  i++; /* Skip over the '\0' */
-  j -= i;
-  if (j > to_len) {
-    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
-    return -1;
-  }
-  OPENSSL_memcpy(to, p, j);
 
-  return j;
+  /* Skip over the 00. */
+  pad++;
+
+  if (from_len - pad > max_out) {
+    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
+    return 0;
+  }
+
+  OPENSSL_memcpy(out, from + pad, from_len - pad);
+  *out_len = from_len - pad;
+  return 1;
 }
 
 static int rand_nonzero(uint8_t *out, size_t len) {
@@ -186,11 +186,12 @@
   return 1;
 }
 
-int RSA_padding_check_PKCS1_type_2(uint8_t *to, unsigned to_len,
-                                   const uint8_t *from, unsigned from_len) {
+int RSA_padding_check_PKCS1_type_2(uint8_t *out, size_t *out_len,
+                                   size_t max_out, const uint8_t *from,
+                                   size_t from_len) {
   if (from_len == 0) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_EMPTY_PUBLIC_KEY);
-    return -1;
+    return 0;
   }
 
   /* PKCS#1 v1.5 decryption. See "PKCS #1 v2.2: RSA Cryptography
@@ -199,29 +200,29 @@
     /* |from| is zero-padded to the size of the RSA modulus, a public value, so
      * this can be rejected in non-constant time. */
     OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
-    return -1;
+    return 0;
   }
 
-  unsigned first_byte_is_zero = constant_time_eq(from[0], 0);
-  unsigned second_byte_is_two = constant_time_eq(from[1], 2);
+  size_t first_byte_is_zero = constant_time_eq_s(from[0], 0);
+  size_t second_byte_is_two = constant_time_eq_s(from[1], 2);
 
-  unsigned i, zero_index = 0, looking_for_index = ~0u;
-  for (i = 2; i < from_len; i++) {
-    unsigned equals0 = constant_time_is_zero(from[i]);
-    zero_index = constant_time_select(looking_for_index & equals0, (unsigned)i,
-                                      zero_index);
-    looking_for_index = constant_time_select(equals0, 0, looking_for_index);
+  size_t zero_index = 0, looking_for_index = CONSTTIME_TRUE_S;
+  for (size_t i = 2; i < from_len; i++) {
+    size_t equals0 = constant_time_is_zero_s(from[i]);
+    zero_index =
+        constant_time_select_s(looking_for_index & equals0, i, zero_index);
+    looking_for_index = constant_time_select_s(equals0, 0, looking_for_index);
   }
 
   /* The input must begin with 00 02. */
-  unsigned valid_index = first_byte_is_zero;
+  size_t valid_index = first_byte_is_zero;
   valid_index &= second_byte_is_two;
 
   /* We must have found the end of PS. */
   valid_index &= ~looking_for_index;
 
   /* PS must be at least 8 bytes long, and it starts two bytes into |from|. */
-  valid_index &= constant_time_ge(zero_index, 2 + 8);
+  valid_index &= constant_time_ge_s(zero_index, 2 + 8);
 
   /* Skip the zero byte. */
   zero_index++;
@@ -229,27 +230,24 @@
   /* NOTE: Although this logic attempts to be constant time, the API contracts
    * of this function and |RSA_decrypt| with |RSA_PKCS1_PADDING| make it
    * impossible to completely avoid Bleichenbacher's attack. Consumers should
-   * use |RSA_unpad_key_pkcs1|. */
+   * use |RSA_PADDING_NONE| and perform the padding check in constant-time
+   * combined with a swap to a random session key or other mitigation. */
   if (!valid_index) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_PKCS_DECODING_ERROR);
-    return -1;
+    return 0;
   }
 
-  const unsigned msg_len = from_len - zero_index;
-  if (msg_len > to_len) {
+  const size_t msg_len = from_len - zero_index;
+  if (msg_len > max_out) {
     /* This shouldn't happen because this function is always called with
-     * |to_len| as the key size and |from_len| is bounded by the key size. */
+     * |max_out| as the key size and |from_len| is bounded by the key size. */
     OPENSSL_PUT_ERROR(RSA, RSA_R_PKCS_DECODING_ERROR);
-    return -1;
+    return 0;
   }
 
-  if (msg_len > INT_MAX) {
-    OPENSSL_PUT_ERROR(RSA, ERR_R_OVERFLOW);
-    return -1;
-  }
-
-  OPENSSL_memcpy(to, &from[zero_index], msg_len);
-  return (int)msg_len;
+  OPENSSL_memcpy(out, &from[zero_index], msg_len);
+  *out_len = msg_len;
+  return 1;
 }
 
 int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from,
@@ -382,13 +380,12 @@
   return ret;
 }
 
-int RSA_padding_check_PKCS1_OAEP_mgf1(uint8_t *to, unsigned to_len,
-                                      const uint8_t *from, unsigned from_len,
-                                      const uint8_t *param, unsigned param_len,
-                                      const EVP_MD *md, const EVP_MD *mgf1md) {
-  unsigned i, dblen, mlen = -1, mdlen, bad, looking_for_one_byte, one_index = 0;
-  const uint8_t *maskeddb, *maskedseed;
-  uint8_t *db = NULL, seed[EVP_MAX_MD_SIZE], phash[EVP_MAX_MD_SIZE];
+int RSA_padding_check_PKCS1_OAEP_mgf1(uint8_t *out, size_t *out_len,
+                                      size_t max_out, const uint8_t *from,
+                                      size_t from_len, const uint8_t *param,
+                                      size_t param_len, const EVP_MD *md,
+                                      const EVP_MD *mgf1md) {
+  uint8_t *db = NULL;
 
   if (md == NULL) {
     md = EVP_sha1();
@@ -397,7 +394,7 @@
     mgf1md = md;
   }
 
-  mdlen = EVP_MD_size(md);
+  size_t mdlen = EVP_MD_size(md);
 
   /* The encoded message is one byte smaller than the modulus to ensure that it
    * doesn't end up greater than the modulus. Thus there's an extra "+1" here
@@ -408,45 +405,47 @@
     goto decoding_err;
   }
 
-  dblen = from_len - mdlen - 1;
+  size_t dblen = from_len - mdlen - 1;
   db = OPENSSL_malloc(dblen);
   if (db == NULL) {
     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
     goto err;
   }
 
-  maskedseed = from + 1;
-  maskeddb = from + 1 + mdlen;
+  const uint8_t *maskedseed = from + 1;
+  const uint8_t *maskeddb = from + 1 + mdlen;
 
+  uint8_t seed[EVP_MAX_MD_SIZE];
   if (!PKCS1_MGF1(seed, mdlen, maskeddb, dblen, mgf1md)) {
     goto err;
   }
-  for (i = 0; i < mdlen; i++) {
+  for (size_t i = 0; i < mdlen; i++) {
     seed[i] ^= maskedseed[i];
   }
 
   if (!PKCS1_MGF1(db, dblen, seed, mdlen, mgf1md)) {
     goto err;
   }
-  for (i = 0; i < dblen; i++) {
+  for (size_t i = 0; i < dblen; i++) {
     db[i] ^= maskeddb[i];
   }
 
+  uint8_t phash[EVP_MAX_MD_SIZE];
   if (!EVP_Digest(param, param_len, phash, NULL, md, NULL)) {
     goto err;
   }
 
-  bad = ~constant_time_is_zero(CRYPTO_memcmp(db, phash, mdlen));
-  bad |= ~constant_time_is_zero(from[0]);
+  size_t bad = ~constant_time_is_zero_s(CRYPTO_memcmp(db, phash, mdlen));
+  bad |= ~constant_time_is_zero_s(from[0]);
 
-  looking_for_one_byte = ~0u;
-  for (i = mdlen; i < dblen; i++) {
-    unsigned equals1 = constant_time_eq(db[i], 1);
-    unsigned equals0 = constant_time_eq(db[i], 0);
-    one_index = constant_time_select(looking_for_one_byte & equals1, i,
-                                     one_index);
+  size_t looking_for_one_byte = CONSTTIME_TRUE_S, one_index = 0;
+  for (size_t i = mdlen; i < dblen; i++) {
+    size_t equals1 = constant_time_eq_s(db[i], 1);
+    size_t equals0 = constant_time_eq_s(db[i], 0);
+    one_index =
+        constant_time_select_s(looking_for_one_byte & equals1, i, one_index);
     looking_for_one_byte =
-        constant_time_select(equals1, 0, looking_for_one_byte);
+        constant_time_select_s(equals1, 0, looking_for_one_byte);
     bad |= looking_for_one_byte & ~equals0;
   }
 
@@ -457,16 +456,16 @@
   }
 
   one_index++;
-  mlen = dblen - one_index;
-  if (to_len < mlen) {
+  size_t mlen = dblen - one_index;
+  if (max_out < mlen) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
-    mlen = -1;
-  } else {
-    OPENSSL_memcpy(to, db + one_index, mlen);
+    goto err;
   }
 
+  OPENSSL_memcpy(out, db + one_index, mlen);
+  *out_len = mlen;
   OPENSSL_free(db);
-  return mlen;
+  return 1;
 
 decoding_err:
   /* to avoid chosen ciphertext attacks, the error message should not reveal
@@ -474,7 +473,7 @@
   OPENSSL_PUT_ERROR(RSA, RSA_R_OAEP_DECODING_ERROR);
  err:
   OPENSSL_free(db);
-  return -1;
+  return 0;
 }
 
 static const uint8_t kPSSZeroes[] = {0, 0, 0, 0, 0, 0, 0, 0};
diff --git a/src/third_party/boringssl/src/crypto/rsa/rsa.c b/src/third_party/boringssl/src/crypto/rsa/rsa.c
index 731293f..6d56238 100644
--- a/src/third_party/boringssl/src/crypto/rsa/rsa.c
+++ b/src/third_party/boringssl/src/crypto/rsa/rsa.c
@@ -321,13 +321,6 @@
   return rsa->meth && (rsa->meth->flags & RSA_FLAG_OPAQUE);
 }
 
-int RSA_supports_digest(const RSA *rsa, const EVP_MD *md) {
-  if (rsa->meth && rsa->meth->supports_digest) {
-    return rsa->meth->supports_digest(rsa, md);
-  }
-  return 1;
-}
-
 int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused *unused,
                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) {
   int index;
diff --git a/src/third_party/boringssl/src/crypto/rsa/rsa_impl.c b/src/third_party/boringssl/src/crypto/rsa/rsa_impl.c
index 8e0aa9c..e385e60 100644
--- a/src/third_party/boringssl/src/crypto/rsa/rsa_impl.c
+++ b/src/third_party/boringssl/src/crypto/rsa/rsa_impl.c
@@ -363,7 +363,6 @@
 int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
                         const uint8_t *in, size_t in_len, int padding) {
   const unsigned rsa_size = RSA_size(rsa);
-  int r = -1;
   uint8_t *buf = NULL;
   int ret = 0;
 
@@ -394,26 +393,25 @@
 
   switch (padding) {
     case RSA_PKCS1_PADDING:
-      r = RSA_padding_check_PKCS1_type_2(out, rsa_size, buf, rsa_size);
+      ret =
+          RSA_padding_check_PKCS1_type_2(out, out_len, rsa_size, buf, rsa_size);
       break;
     case RSA_PKCS1_OAEP_PADDING:
       /* Use the default parameters: SHA-1 for both hashes and no label. */
-      r = RSA_padding_check_PKCS1_OAEP_mgf1(out, rsa_size, buf, rsa_size,
-                                            NULL, 0, NULL, NULL);
+      ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, out_len, rsa_size, buf,
+                                              rsa_size, NULL, 0, NULL, NULL);
       break;
     case RSA_NO_PADDING:
-      r = rsa_size;
+      *out_len = rsa_size;
+      ret = 1;
       break;
     default:
       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
       goto err;
   }
 
-  if (r < 0) {
+  if (!ret) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
-  } else {
-    *out_len = r;
-    ret = 1;
   }
 
 err:
@@ -436,7 +434,6 @@
 
   const unsigned rsa_size = RSA_size(rsa);
   BIGNUM *f, *result;
-  int r = -1;
 
   if (max_out < rsa_size) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
@@ -500,21 +497,21 @@
 
   switch (padding) {
     case RSA_PKCS1_PADDING:
-      r = RSA_padding_check_PKCS1_type_1(out, rsa_size, buf, rsa_size);
+      ret =
+          RSA_padding_check_PKCS1_type_1(out, out_len, rsa_size, buf, rsa_size);
       break;
     case RSA_NO_PADDING:
-      r = rsa_size;
+      ret = 1;
+      *out_len = rsa_size;
       break;
     default:
       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
       goto err;
   }
 
-  if (r < 0) {
+  if (!ret) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
-  } else {
-    *out_len = r;
-    ret = 1;
+    goto err;
   }
 
 err:
diff --git a/src/third_party/boringssl/src/crypto/sha/sha1-altivec.c b/src/third_party/boringssl/src/crypto/sha/sha1-altivec.c
index 500986e..0b64315 100644
--- a/src/third_party/boringssl/src/crypto/sha/sha1-altivec.c
+++ b/src/third_party/boringssl/src/crypto/sha/sha1-altivec.c
@@ -105,7 +105,9 @@
  * Byte shifting code below may not be correct for big-endian systems. */
 static vec_uint32_t sched_00_15(vec_uint32_t *pre_added, const void *data,
                                 vec_uint32_t k) {
-  const vec_uint32_t v = *((const vec_uint32_t *)data);
+  const vector unsigned char unaligned_data =
+    vec_vsx_ld(0, (const unsigned char*) data);
+  const vec_uint32_t v = (vec_uint32_t) unaligned_data;
   const vec_uint32_t w = vec_perm(v, v, k_swap_endianness);
   vec_st(w + k, 0, pre_added);
   return w;
diff --git a/src/third_party/boringssl/src/crypto/sha/sha1.c b/src/third_party/boringssl/src/crypto/sha/sha1.c
index 7c72713..4eb8189 100644
--- a/src/third_party/boringssl/src/crypto/sha/sha1.c
+++ b/src/third_party/boringssl/src/crypto/sha/sha1.c
@@ -82,12 +82,6 @@
 
 uint8_t *SHA1(const uint8_t *data, size_t len, uint8_t *out) {
   SHA_CTX ctx;
-  static uint8_t buf[SHA_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = buf;
-  }
   if (!SHA1_Init(&ctx)) {
     return NULL;
   }
diff --git a/src/third_party/boringssl/src/crypto/sha/sha256.c b/src/third_party/boringssl/src/crypto/sha/sha256.c
index fb950d7..c3bd5ad 100644
--- a/src/third_party/boringssl/src/crypto/sha/sha256.c
+++ b/src/third_party/boringssl/src/crypto/sha/sha256.c
@@ -99,12 +99,6 @@
 
 uint8_t *SHA224(const uint8_t *data, size_t len, uint8_t *out) {
   SHA256_CTX ctx;
-  static uint8_t buf[SHA224_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = buf;
-  }
   SHA224_Init(&ctx);
   SHA224_Update(&ctx, data, len);
   SHA224_Final(out, &ctx);
@@ -114,12 +108,6 @@
 
 uint8_t *SHA256(const uint8_t *data, size_t len, uint8_t *out) {
   SHA256_CTX ctx;
-  static uint8_t buf[SHA256_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = buf;
-  }
   SHA256_Init(&ctx);
   SHA256_Update(&ctx, data, len);
   SHA256_Final(out, &ctx);
diff --git a/src/third_party/boringssl/src/crypto/sha/sha512.c b/src/third_party/boringssl/src/crypto/sha/sha512.c
index 8761150..e8284f1 100644
--- a/src/third_party/boringssl/src/crypto/sha/sha512.c
+++ b/src/third_party/boringssl/src/crypto/sha/sha512.c
@@ -123,13 +123,6 @@
 
 uint8_t *SHA384(const uint8_t *data, size_t len, uint8_t *out) {
   SHA512_CTX ctx;
-  static uint8_t buf[SHA384_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = buf;
-  }
-
   SHA384_Init(&ctx);
   SHA384_Update(&ctx, data, len);
   SHA384_Final(out, &ctx);
@@ -139,12 +132,6 @@
 
 uint8_t *SHA512(const uint8_t *data, size_t len, uint8_t *out) {
   SHA512_CTX ctx;
-  static uint8_t buf[SHA512_DIGEST_LENGTH];
-
-  /* TODO(fork): remove this static buffer. */
-  if (out == NULL) {
-    out = buf;
-  }
   SHA512_Init(&ctx);
   SHA512_Update(&ctx, data, len);
   SHA512_Final(out, &ctx);
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/0124327c8ec06c00a26feac6ed39e84b8025c304 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/0124327c8ec06c00a26feac6ed39e84b8025c304
deleted file mode 100644
index bc05d9b..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/0124327c8ec06c00a26feac6ed39e84b8025c304
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/223dfdd5d559b7addb16d4ac652272adcb3e9615 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/223dfdd5d559b7addb16d4ac652272adcb3e9615
new file mode 100644
index 0000000..04ccac4
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/223dfdd5d559b7addb16d4ac652272adcb3e9615
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3158cc8882eacc1632f7c018d72bbe8146abd3fa b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3158cc8882eacc1632f7c018d72bbe8146abd3fa
deleted file mode 100644
index 5f8957f..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3158cc8882eacc1632f7c018d72bbe8146abd3fa
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3ea5b121dacfb1d58bd14a918ae0be7c26c8b7bf b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3ea5b121dacfb1d58bd14a918ae0be7c26c8b7bf
deleted file mode 100644
index 7e56760..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3ea5b121dacfb1d58bd14a918ae0be7c26c8b7bf
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3eda459377c426f68ac1081bf68534814b8a0713 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3eda459377c426f68ac1081bf68534814b8a0713
new file mode 100644
index 0000000..422d739
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/3eda459377c426f68ac1081bf68534814b8a0713
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/4fd8db0a462235c4f80a9b144b73866c7e7593d9 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/4fd8db0a462235c4f80a9b144b73866c7e7593d9
deleted file mode 100644
index 5244da3..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/4fd8db0a462235c4f80a9b144b73866c7e7593d9
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/5a79340558dfd98b3894c061902d88e04f58adda b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/5a79340558dfd98b3894c061902d88e04f58adda
new file mode 100644
index 0000000..254d06b
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/5a79340558dfd98b3894c061902d88e04f58adda
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/60b44562b25a9c05bfef5edb922465b30ea2143a b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/60b44562b25a9c05bfef5edb922465b30ea2143a
deleted file mode 100644
index 487bf8f..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/60b44562b25a9c05bfef5edb922465b30ea2143a
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/654072fa2c3ce46a80a6b705f476935b26fb892c b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/654072fa2c3ce46a80a6b705f476935b26fb892c
deleted file mode 100644
index 0f7ff09..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/654072fa2c3ce46a80a6b705f476935b26fb892c
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/69733d5eee9694b38ced6a0d573fe65532bd815f b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/69733d5eee9694b38ced6a0d573fe65532bd815f
new file mode 100644
index 0000000..9af6b1e
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/69733d5eee9694b38ced6a0d573fe65532bd815f
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/82d07ab9ec778c09c0528ca5a0100f9a22ffe22c b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/82d07ab9ec778c09c0528ca5a0100f9a22ffe22c
deleted file mode 100644
index bc2c868..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/82d07ab9ec778c09c0528ca5a0100f9a22ffe22c
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/bafbb2bbf8bc8710923865acd60dc464975fc774 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/bafbb2bbf8bc8710923865acd60dc464975fc774
deleted file mode 100644
index b6f47c1..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/bafbb2bbf8bc8710923865acd60dc464975fc774
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/ee67d5c232073aa0e1e5deeab73a6a33297d179b b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/ee67d5c232073aa0e1e5deeab73a6a33297d179b
deleted file mode 100644
index 180b055..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/ee67d5c232073aa0e1e5deeab73a6a33297d179b
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/f5e0b0e90d0da7454869615c3da5d07289f26b84 b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/f5e0b0e90d0da7454869615c3da5d07289f26b84
deleted file mode 100644
index 3869ec7..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/f5e0b0e90d0da7454869615c3da5d07289f26b84
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/fadcecd0537e1a046259cc26480f8b3701b4f8af b/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/fadcecd0537e1a046259cc26480f8b3701b4f8af
deleted file mode 100644
index 475bd7c..0000000
--- a/src/third_party/boringssl/src/fuzz/client_corpus_no_fuzzer_mode/fadcecd0537e1a046259cc26480f8b3701b4f8af
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server.cc b/src/third_party/boringssl/src/fuzz/server.cc
index 19417d2..c7b3fe3 100644
--- a/src/third_party/boringssl/src/fuzz/server.cc
+++ b/src/third_party/boringssl/src/fuzz/server.cc
@@ -13,6 +13,7 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
 
 #include <assert.h>
+#include <stdlib.h>
 
 #include <openssl/bio.h>
 #include <openssl/dh.h>
@@ -195,7 +196,7 @@
 };
 
 static const uint8_t kOCSPResponse[] = {0x01, 0x02, 0x03, 0x04};
-static const uint8_t kSCT[] = {0x05, 0x06, 0x07, 0x08};
+static const uint8_t kSCT[] = {0x00, 0x06, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08};
 
 static int ALPNSelectCallback(SSL *ssl, const uint8_t **out, uint8_t *out_len,
                               const uint8_t *in, unsigned in_len, void *arg) {
@@ -235,11 +236,14 @@
     SSL_CTX_use_certificate(ctx, cert);
     X509_free(cert);
 
-    SSL_CTX_set_ocsp_response(ctx, kOCSPResponse, sizeof(kOCSPResponse));
-    SSL_CTX_set_signed_cert_timestamp_list(ctx, kSCT, sizeof(kSCT));
+    if (!SSL_CTX_set_ocsp_response(ctx, kOCSPResponse, sizeof(kOCSPResponse)) ||
+        !SSL_CTX_set_signed_cert_timestamp_list(ctx, kSCT, sizeof(kSCT))) {
+      abort();
+    }
 
     SSL_CTX_set_alpn_select_cb(ctx, ALPNSelectCallback, nullptr);
     SSL_CTX_set_next_protos_advertised_cb(ctx, NPNAdvertiseCallback, nullptr);
+    SSL_CTX_set_early_data_enabled(ctx, 1);
   }
 
   ~GlobalState() {
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/041db5e3785d30567062ab759e79d4153dc42f1c b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/041db5e3785d30567062ab759e79d4153dc42f1c
new file mode 100644
index 0000000..a68f51c
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/041db5e3785d30567062ab759e79d4153dc42f1c
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0a2af8a4ad6a6be3c907396d5acd7cc38c60d069 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0a2af8a4ad6a6be3c907396d5acd7cc38c60d069
deleted file mode 100644
index 618efe5..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0a2af8a4ad6a6be3c907396d5acd7cc38c60d069
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0c57ff42edaa7c01167b6fbf35676ae1b65fcb7c b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0c57ff42edaa7c01167b6fbf35676ae1b65fcb7c
new file mode 100644
index 0000000..6260b8d
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/0c57ff42edaa7c01167b6fbf35676ae1b65fcb7c
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/11c3db351bea599e9715ce74c34b7f21d29f3e42 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/11c3db351bea599e9715ce74c34b7f21d29f3e42
new file mode 100644
index 0000000..24918a8
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/11c3db351bea599e9715ce74c34b7f21d29f3e42
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/12a245e8766c3b4ce91a3eddeece2405bafb1b7c b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/12a245e8766c3b4ce91a3eddeece2405bafb1b7c
new file mode 100644
index 0000000..35f37ca
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/12a245e8766c3b4ce91a3eddeece2405bafb1b7c
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/25a4a1e437f01e807f043e1a9d47947454cd59af b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/25a4a1e437f01e807f043e1a9d47947454cd59af
deleted file mode 100644
index 0d4db67..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/25a4a1e437f01e807f043e1a9d47947454cd59af
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/319b15c61aa492cfa0e9c1cd5d70a91d4d79d78f b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/319b15c61aa492cfa0e9c1cd5d70a91d4d79d78f
new file mode 100644
index 0000000..dd677b5
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/319b15c61aa492cfa0e9c1cd5d70a91d4d79d78f
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/36ff5c2bccaaf5f859e68512a4c0ecbaf26ee9c9 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/36ff5c2bccaaf5f859e68512a4c0ecbaf26ee9c9
new file mode 100644
index 0000000..a4b55bd
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/36ff5c2bccaaf5f859e68512a4c0ecbaf26ee9c9
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/380684cec8c2255a6d738d7e8566cf995b7dc9b2 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/380684cec8c2255a6d738d7e8566cf995b7dc9b2
deleted file mode 100644
index 252dd1f..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/380684cec8c2255a6d738d7e8566cf995b7dc9b2
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/4048a19b2449895bd87b84cbbd6acf07c01ea2eb b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/4048a19b2449895bd87b84cbbd6acf07c01ea2eb
deleted file mode 100644
index edb21ad..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/4048a19b2449895bd87b84cbbd6acf07c01ea2eb
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/51671ddca38ae615105a2421b7e609c0d390a1e8 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/51671ddca38ae615105a2421b7e609c0d390a1e8
new file mode 100644
index 0000000..8e7c62e
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/51671ddca38ae615105a2421b7e609c0d390a1e8
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/53d7eeef580063432084bf3e57da4c01a2041c3b b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/53d7eeef580063432084bf3e57da4c01a2041c3b
new file mode 100644
index 0000000..0f16ea8
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/53d7eeef580063432084bf3e57da4c01a2041c3b
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5a6fb6319f20c2a957e82b411ce1fc9c51038f9c b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5a6fb6319f20c2a957e82b411ce1fc9c51038f9c
deleted file mode 100644
index acc3a2e..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5a6fb6319f20c2a957e82b411ce1fc9c51038f9c
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5abb011f54fda40a3dfcfb8c446b7554b688f620 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5abb011f54fda40a3dfcfb8c446b7554b688f620
new file mode 100644
index 0000000..8a763f7
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5abb011f54fda40a3dfcfb8c446b7554b688f620
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5d7b6c1e7d6d3bd3f200a440a0fef7084779486a b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5d7b6c1e7d6d3bd3f200a440a0fef7084779486a
new file mode 100644
index 0000000..4aab15f
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/5d7b6c1e7d6d3bd3f200a440a0fef7084779486a
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/79a5d75acbcc86a6cfa4a4495e0e3e12b6ae8e07 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/79a5d75acbcc86a6cfa4a4495e0e3e12b6ae8e07
new file mode 100644
index 0000000..6ad8225
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/79a5d75acbcc86a6cfa4a4495e0e3e12b6ae8e07
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/87ee545385535eb0784ecc5bac90daa02723b123 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/87ee545385535eb0784ecc5bac90daa02723b123
new file mode 100644
index 0000000..10ba16f
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/87ee545385535eb0784ecc5bac90daa02723b123
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92799e68bdce51657fc404c15e0bac65223c4a38 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92799e68bdce51657fc404c15e0bac65223c4a38
deleted file mode 100644
index 80f06bb..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92799e68bdce51657fc404c15e0bac65223c4a38
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92f14e6dfd2a460e7107eccf314ba49f89b2278d b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92f14e6dfd2a460e7107eccf314ba49f89b2278d
deleted file mode 100644
index 3fc2d28..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/92f14e6dfd2a460e7107eccf314ba49f89b2278d
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/93b006a3d57390b6797a1a628db5391c78bedd34 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/93b006a3d57390b6797a1a628db5391c78bedd34
deleted file mode 100644
index a91d770..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/93b006a3d57390b6797a1a628db5391c78bedd34
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9609e58084380f10957a41e5d9946e33c46c1cb1 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9609e58084380f10957a41e5d9946e33c46c1cb1
deleted file mode 100644
index eb8c8d9..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9609e58084380f10957a41e5d9946e33c46c1cb1
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9a3bd9809c3c1cf2a8a2dce0a667faa0d133ce3c b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9a3bd9809c3c1cf2a8a2dce0a667faa0d133ce3c
deleted file mode 100644
index ceb7986..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9a3bd9809c3c1cf2a8a2dce0a667faa0d133ce3c
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9de8d2a719e579133ecf8cfaaae29e4a35708a92 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9de8d2a719e579133ecf8cfaaae29e4a35708a92
new file mode 100644
index 0000000..81e3405
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/9de8d2a719e579133ecf8cfaaae29e4a35708a92
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a147dcf5660f2fae9e487114797bec1bad83045a b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a147dcf5660f2fae9e487114797bec1bad83045a
deleted file mode 100644
index c2e6f7d..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a147dcf5660f2fae9e487114797bec1bad83045a
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a76380c9d461a5cec52e6d6d99a9af987d56851a b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a76380c9d461a5cec52e6d6d99a9af987d56851a
new file mode 100644
index 0000000..a69c7d9
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/a76380c9d461a5cec52e6d6d99a9af987d56851a
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b138e4114ccbc902716f20da9dbe1c53aef62209 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b138e4114ccbc902716f20da9dbe1c53aef62209
deleted file mode 100644
index 22a17c7..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b138e4114ccbc902716f20da9dbe1c53aef62209
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b74c7405a6b1b577f59f05c4fd3042f1433e9bf9 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b74c7405a6b1b577f59f05c4fd3042f1433e9bf9
deleted file mode 100644
index e286d30..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b74c7405a6b1b577f59f05c4fd3042f1433e9bf9
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b924ed0971abc4dd3b234b5331e1a8930bb8f37e b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b924ed0971abc4dd3b234b5331e1a8930bb8f37e
deleted file mode 100644
index 1b59085..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/b924ed0971abc4dd3b234b5331e1a8930bb8f37e
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bd3cf8da951965aebbd32165385be78b2692a880 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bd3cf8da951965aebbd32165385be78b2692a880
deleted file mode 100644
index e9f0ed2..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bd3cf8da951965aebbd32165385be78b2692a880
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bde42bef2e1dbd10dd54ebacff43f675e314eff8 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bde42bef2e1dbd10dd54ebacff43f675e314eff8
deleted file mode 100644
index 81410bb..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bde42bef2e1dbd10dd54ebacff43f675e314eff8
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bf67b14564fc9f6bcc4534382421fa0bc76b2ab8 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bf67b14564fc9f6bcc4534382421fa0bc76b2ab8
deleted file mode 100644
index ce85490..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/bf67b14564fc9f6bcc4534382421fa0bc76b2ab8
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c4ad63d643280627c91cd988729e33c18a2efaf4 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c4ad63d643280627c91cd988729e33c18a2efaf4
new file mode 100644
index 0000000..4cd35de
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c4ad63d643280627c91cd988729e33c18a2efaf4
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c5e7c372a2aa2b9e92069fb30b060f51a697f659 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c5e7c372a2aa2b9e92069fb30b060f51a697f659
new file mode 100644
index 0000000..4177431
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/c5e7c372a2aa2b9e92069fb30b060f51a697f659
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ce77403cdd0fce3f0216c58bdfa7f8ef38402cb6 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ce77403cdd0fce3f0216c58bdfa7f8ef38402cb6
new file mode 100644
index 0000000..0ef58cf
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ce77403cdd0fce3f0216c58bdfa7f8ef38402cb6
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ed6d4a8cc7ca13c109c8c37e3b5e343725313a75 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ed6d4a8cc7ca13c109c8c37e3b5e343725313a75
deleted file mode 100644
index 76140a9..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/ed6d4a8cc7ca13c109c8c37e3b5e343725313a75
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/eee550de2be2d67a34afef83f42a2749e51c7279 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/eee550de2be2d67a34afef83f42a2749e51c7279
deleted file mode 100644
index d8ae5ed..0000000
--- a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/eee550de2be2d67a34afef83f42a2749e51c7279
+++ /dev/null
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f1862d398cd8d0a751384af49baf7a481d6b6801 b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f1862d398cd8d0a751384af49baf7a481d6b6801
new file mode 100644
index 0000000..02ebce3
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f1862d398cd8d0a751384af49baf7a481d6b6801
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f7cd2b5bccae5000dd14d6f73369756c01cd226e b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f7cd2b5bccae5000dd14d6f73369756c01cd226e
new file mode 100644
index 0000000..fa044a2
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f7cd2b5bccae5000dd14d6f73369756c01cd226e
Binary files differ
diff --git a/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f862e1d523fa8d85c779027655ec421279dd8adb b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f862e1d523fa8d85c779027655ec421279dd8adb
new file mode 100644
index 0000000..7064ddf
--- /dev/null
+++ b/src/third_party/boringssl/src/fuzz/server_corpus_no_fuzzer_mode/f862e1d523fa8d85c779027655ec421279dd8adb
Binary files differ
diff --git a/src/third_party/boringssl/src/include/openssl/cpu.h b/src/third_party/boringssl/src/include/openssl/cpu.h
index 457a476..1a4294a 100644
--- a/src/third_party/boringssl/src/include/openssl/cpu.h
+++ b/src/third_party/boringssl/src/include/openssl/cpu.h
@@ -171,6 +171,8 @@
  * the Vector.AES category of instructions. */
 int CRYPTO_is_PPC64LE_vcrypto_capable(void);
 
+extern unsigned long OPENSSL_ppc64le_hwcap2;
+
 #endif  /* OPENSSL_PPC64LE */
 
 
diff --git a/src/third_party/boringssl/src/include/openssl/curve25519.h b/src/third_party/boringssl/src/include/openssl/curve25519.h
index 1bbb69a..97be067 100644
--- a/src/third_party/boringssl/src/include/openssl/curve25519.h
+++ b/src/third_party/boringssl/src/include/openssl/curve25519.h
@@ -61,7 +61,12 @@
 /* Ed25519.
  *
  * Ed25519 is a signature scheme using a twisted-Edwards curve that is
- * birationally equivalent to curve25519. */
+ * birationally equivalent to curve25519.
+ *
+ * Note that, unlike RFC 8032's formulation, our private key representation
+ * includes a public key suffix to make multiple key signing operations with the
+ * same key more efficient. The RFC 8032 key private key is referred to in this
+ * implementation as the "seed" and is the first 32 bytes of our private key. */
 
 #define ED25519_PRIVATE_KEY_LEN 64
 #define ED25519_PUBLIC_KEY_LEN 32
diff --git a/src/third_party/boringssl/src/include/openssl/evp.h b/src/third_party/boringssl/src/include/openssl/evp.h
index 7debbc5..9abce9d 100644
--- a/src/third_party/boringssl/src/include/openssl/evp.h
+++ b/src/third_party/boringssl/src/include/openssl/evp.h
@@ -97,12 +97,6 @@
  * an error to attempt to duplicate, export, or compare an opaque key. */
 OPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey);
 
-/* EVP_PKEY_supports_digest returns one if |pkey| supports digests of
- * type |md|. This is intended for use with EVP_PKEYs backing custom
- * implementations which can't sign all digests. */
-OPENSSL_EXPORT int EVP_PKEY_supports_digest(const EVP_PKEY *pkey,
-                                            const EVP_MD *md);
-
 /* EVP_PKEY_cmp compares |a| and |b| and returns one if they are equal, zero if
  * not and a negative number on error.
  *
diff --git a/src/third_party/boringssl/src/include/openssl/rsa.h b/src/third_party/boringssl/src/include/openssl/rsa.h
index d8f76f0..2377ca2 100644
--- a/src/third_party/boringssl/src/include/openssl/rsa.h
+++ b/src/third_party/boringssl/src/include/openssl/rsa.h
@@ -292,10 +292,6 @@
  * material. Otherwise it returns zero. */
 OPENSSL_EXPORT int RSA_is_opaque(const RSA *rsa);
 
-/* RSA_supports_digest returns one if |rsa| supports signing digests
- * of type |md|. Otherwise it returns zero. */
-OPENSSL_EXPORT int RSA_supports_digest(const RSA *rsa, const EVP_MD *md);
-
 /* RSAPublicKey_dup allocates a fresh |RSA| and copies the public key from
  * |rsa| into it. It returns the fresh |RSA| object, or NULL on error. */
 OPENSSL_EXPORT RSA *RSAPublicKey_dup(const RSA *rsa);
@@ -587,8 +583,7 @@
   int (*multi_prime_keygen)(RSA *rsa, int bits, int num_primes, BIGNUM *e,
                             BN_GENCB *cb);
 
-  /* supports_digest returns one if |rsa| supports digests of type
-   * |md|. If null, it is assumed that all digests are supported. */
+  /* supports_digest is deprecated and ignored. Set it to NULL. */
   int (*supports_digest)(const RSA *rsa, const EVP_MD *md);
 };
 
diff --git a/src/third_party/boringssl/src/include/openssl/ssl.h b/src/third_party/boringssl/src/include/openssl/ssl.h
index 5182df7..6a6cd85 100644
--- a/src/third_party/boringssl/src/include/openssl/ssl.h
+++ b/src/third_party/boringssl/src/include/openssl/ssl.h
@@ -2105,6 +2105,7 @@
 OPENSSL_EXPORT int SSL_set1_curves_list(SSL *ssl, const char *curves);
 
 /* SSL_CURVE_* define TLS curve IDs. */
+#define SSL_CURVE_SECP224R1 21
 #define SSL_CURVE_SECP256R1 23
 #define SSL_CURVE_SECP384R1 24
 #define SSL_CURVE_SECP521R1 25
@@ -2585,6 +2586,13 @@
                                            const uint8_t **out_data,
                                            unsigned *out_len);
 
+/* SSL_CTX_set_allow_unknown_alpn_protos configures client connections on |ctx|
+ * to allow unknown ALPN protocols from the server. Otherwise, by default, the
+ * client will require that the protocol be advertised in
+ * |SSL_CTX_set_alpn_protos|. */
+OPENSSL_EXPORT void SSL_CTX_set_allow_unknown_alpn_protos(SSL_CTX *ctx,
+                                                          int enabled);
+
 
 /* Next protocol negotiation.
  *
@@ -3094,6 +3102,11 @@
  * fully implemented. */
 OPENSSL_EXPORT void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled);
 
+/* SSL_set_early_data_enabled sets whether early data is allowed to be used
+ * with resumptions using |ssl|. See |SSL_CTX_set_early_data_enabled| for more
+ * information. */
+OPENSSL_EXPORT void SSL_set_early_data_enabled(SSL *ssl, int enabled);
+
 /* SSL_early_data_accepted returns whether early data was accepted on the
  * handshake performed by |ssl|. */
 OPENSSL_EXPORT int SSL_early_data_accepted(const SSL *ssl);
@@ -4253,10 +4266,6 @@
    * shutdown. */
   unsigned quiet_shutdown:1;
 
-  /* If enable_early_data is non-zero, early data can be sent and accepted over
-   * new connections. */
-  unsigned enable_early_data:1;
-
   /* ocsp_stapling_enabled is only used by client connections and indicates
    * whether OCSP stapling will be requested. */
   unsigned ocsp_stapling_enabled:1;
@@ -4278,6 +4287,10 @@
    * that this currently requires post-handshake verification of
    * certificates. */
   unsigned i_promise_to_verify_certs_after_the_handshake:1;
+
+  /* allow_unknown_alpn_protos is one if the client allows unsolicited ALPN
+   * protocols from the peer. */
+  unsigned allow_unknown_alpn_protos:1;
 };
 
 
diff --git a/src/third_party/boringssl/src/ssl/custom_extensions.c b/src/third_party/boringssl/src/ssl/custom_extensions.c
index ea57c20..ac18517 100644
--- a/src/third_party/boringssl/src/ssl/custom_extensions.c
+++ b/src/third_party/boringssl/src/ssl/custom_extensions.c
@@ -69,7 +69,7 @@
     return 1;
   }
 
-  if (ssl->ctx->enable_early_data) {
+  if (ssl->cert->enable_early_data) {
     /* TODO(svaldez): Support Custom Extensions with 0-RTT. For now the caller
      * is expected not to configure both together.
      * https://crbug.com/boringssl/173. */
diff --git a/src/third_party/boringssl/src/ssl/internal.h b/src/third_party/boringssl/src/ssl/internal.h
index ded5ba8..2504ca0 100644
--- a/src/third_party/boringssl/src/ssl/internal.h
+++ b/src/third_party/boringssl/src/ssl/internal.h
@@ -1371,6 +1371,9 @@
    * ticket key. Only sessions with a matching value will be accepted. */
   uint8_t sid_ctx_length;
   uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH];
+
+  /* If enable_early_data is non-zero, early data can be sent and accepted. */
+  unsigned enable_early_data:1;
 } CERT;
 
 /* SSL_METHOD is a compatibility structure to support the legacy version-locked
diff --git a/src/third_party/boringssl/src/ssl/ssl_cert.c b/src/third_party/boringssl/src/ssl/ssl_cert.c
index 5013b20..4722a66 100644
--- a/src/third_party/boringssl/src/ssl/ssl_cert.c
+++ b/src/third_party/boringssl/src/ssl/ssl_cert.c
@@ -204,6 +204,8 @@
   ret->sid_ctx_length = cert->sid_ctx_length;
   OPENSSL_memcpy(ret->sid_ctx, cert->sid_ctx, sizeof(ret->sid_ctx));
 
+  ret->enable_early_data = cert->enable_early_data;
+
   return ret;
 
 err:
diff --git a/src/third_party/boringssl/src/ssl/ssl_ecdh.c b/src/third_party/boringssl/src/ssl/ssl_ecdh.c
index f49d566..25e3df9 100644
--- a/src/third_party/boringssl/src/ssl/ssl_ecdh.c
+++ b/src/third_party/boringssl/src/ssl/ssl_ecdh.c
@@ -300,6 +300,17 @@
 
 static const SSL_ECDH_METHOD kMethods[] = {
     {
+        NID_secp224r1,
+        SSL_CURVE_SECP224R1,
+        "P-224",
+        ssl_ec_point_cleanup,
+        ssl_ec_point_offer,
+        ssl_ec_point_accept,
+        ssl_ec_point_finish,
+        CBS_get_u8_length_prefixed,
+        CBB_add_u8_length_prefixed,
+    },
+    {
         NID_X9_62_prime256v1,
         SSL_CURVE_SECP256R1,
         "P-256",
diff --git a/src/third_party/boringssl/src/ssl/ssl_lib.c b/src/third_party/boringssl/src/ssl/ssl_lib.c
index d01f6a2..7adf103 100644
--- a/src/third_party/boringssl/src/ssl/ssl_lib.c
+++ b/src/third_party/boringssl/src/ssl/ssl_lib.c
@@ -832,7 +832,11 @@
 }
 
 void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled) {
-  ctx->enable_early_data = !!enabled;
+  ctx->cert->enable_early_data = !!enabled;
+}
+
+void SSL_set_early_data_enabled(SSL *ssl, int enabled) {
+  ssl->cert->enable_early_data = !!enabled;
 }
 
 int SSL_early_data_accepted(const SSL *ssl) {
@@ -1749,6 +1753,9 @@
   }
 }
 
+void SSL_CTX_set_allow_unknown_alpn_protos(SSL_CTX *ctx, int enabled) {
+  ctx->allow_unknown_alpn_protos = !!enabled;
+}
 
 void SSL_CTX_set_tls_channel_id_enabled(SSL_CTX *ctx, int enabled) {
   ctx->tlsext_channel_id_enabled = !!enabled;
diff --git a/src/third_party/boringssl/src/ssl/t1_lib.c b/src/third_party/boringssl/src/ssl/t1_lib.c
index 014432e..793e2d7 100644
--- a/src/third_party/boringssl/src/ssl/t1_lib.c
+++ b/src/third_party/boringssl/src/ssl/t1_lib.c
@@ -1432,31 +1432,33 @@
     return 0;
   }
 
-  /* Check that the protcol name is one of the ones we advertised. */
-  int protocol_ok = 0;
-  CBS client_protocol_name_list, client_protocol_name;
-  CBS_init(&client_protocol_name_list, ssl->alpn_client_proto_list,
-           ssl->alpn_client_proto_list_len);
-  while (CBS_len(&client_protocol_name_list) > 0) {
-    if (!CBS_get_u8_length_prefixed(&client_protocol_name_list,
-                                    &client_protocol_name)) {
-      *out_alert = SSL_AD_INTERNAL_ERROR;
+  if (!ssl->ctx->allow_unknown_alpn_protos) {
+    /* Check that the protocol name is one of the ones we advertised. */
+    int protocol_ok = 0;
+    CBS client_protocol_name_list, client_protocol_name;
+    CBS_init(&client_protocol_name_list, ssl->alpn_client_proto_list,
+             ssl->alpn_client_proto_list_len);
+    while (CBS_len(&client_protocol_name_list) > 0) {
+      if (!CBS_get_u8_length_prefixed(&client_protocol_name_list,
+                                      &client_protocol_name)) {
+        *out_alert = SSL_AD_INTERNAL_ERROR;
+        return 0;
+      }
+
+      if (CBS_len(&client_protocol_name) == CBS_len(&protocol_name) &&
+          OPENSSL_memcmp(CBS_data(&client_protocol_name),
+                         CBS_data(&protocol_name),
+                         CBS_len(&protocol_name)) == 0) {
+        protocol_ok = 1;
+        break;
+      }
+    }
+
+    if (!protocol_ok) {
+      OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL);
+      *out_alert = SSL_AD_ILLEGAL_PARAMETER;
       return 0;
     }
-
-    if (CBS_len(&client_protocol_name) == CBS_len(&protocol_name) &&
-        OPENSSL_memcmp(CBS_data(&client_protocol_name),
-                       CBS_data(&protocol_name),
-                       CBS_len(&protocol_name)) == 0) {
-      protocol_ok = 1;
-      break;
-    }
-  }
-
-  if (!protocol_ok) {
-    OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL);
-    *out_alert = SSL_AD_ILLEGAL_PARAMETER;
-    return 0;
   }
 
   if (!CBS_stow(&protocol_name, &ssl->s3->alpn_selected,
@@ -2095,7 +2097,7 @@
       session_version < TLS1_3_VERSION ||
       ssl->session->ticket_max_early_data == 0 ||
       hs->received_hello_retry_request ||
-      !ssl->ctx->enable_early_data) {
+      !ssl->cert->enable_early_data) {
     return 1;
   }
 
diff --git a/src/third_party/boringssl/src/ssl/test/bssl_shim.cc b/src/third_party/boringssl/src/ssl/test/bssl_shim.cc
index dccf0c9..b60c809 100644
--- a/src/third_party/boringssl/src/ssl/test/bssl_shim.cc
+++ b/src/third_party/boringssl/src/ssl/test/bssl_shim.cc
@@ -1187,6 +1187,10 @@
     SSL_CTX_set_early_data_enabled(ssl_ctx.get(), 1);
   }
 
+  if (config->allow_unknown_alpn_protos) {
+    SSL_CTX_set_allow_unknown_alpn_protos(ssl_ctx.get(), 1);
+  }
+
   return ssl_ctx;
 }
 
@@ -1793,7 +1797,8 @@
   }
   if (config->enable_all_curves) {
     static const int kAllCurves[] = {
-      NID_X9_62_prime256v1, NID_secp384r1, NID_secp521r1, NID_X25519,
+        NID_secp224r1, NID_X9_62_prime256v1, NID_secp384r1,
+        NID_secp521r1, NID_X25519,
     };
     if (!SSL_set1_curves(ssl.get(), kAllCurves,
                          OPENSSL_ARRAY_SIZE(kAllCurves))) {
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.h b/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.h
new file mode 100644
index 0000000..80ad222
--- /dev/null
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.h
@@ -0,0 +1,8 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This code was translated into a form compatible with 6a from the public
+// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
+
+#define REDMASK51     0x0007FFFFFFFFFFFF
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.s
index 797f9b0..0ad5398 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.s
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/const_amd64.s
@@ -7,8 +7,8 @@
 
 // +build amd64,!gccgo,!appengine
 
-DATA ·REDMASK51(SB)/8, $0x0007FFFFFFFFFFFF
-GLOBL ·REDMASK51(SB), 8, $8
+// These constants cannot be encoded in non-MOVQ immediates.
+// We access them directly from memory instead.
 
 DATA ·_121666_213(SB)/8, $996687872
 GLOBL ·_121666_213(SB), 8, $8
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/freeze_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/curve25519/freeze_amd64.s
index 37599fa..536479b 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/curve25519/freeze_amd64.s
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/freeze_amd64.s
@@ -7,29 +7,18 @@
 
 // +build amd64,!gccgo,!appengine
 
+#include "const_amd64.h"
+
 // func freeze(inout *[5]uint64)
-TEXT ·freeze(SB),7,$96-8
+TEXT ·freeze(SB),7,$0-8
 	MOVQ inout+0(FP), DI
 
-	MOVQ SP,R11
-	MOVQ $31,CX
-	NOTQ CX
-	ANDQ CX,SP
-	ADDQ $32,SP
-
-	MOVQ R11,0(SP)
-	MOVQ R12,8(SP)
-	MOVQ R13,16(SP)
-	MOVQ R14,24(SP)
-	MOVQ R15,32(SP)
-	MOVQ BX,40(SP)
-	MOVQ BP,48(SP)
 	MOVQ 0(DI),SI
 	MOVQ 8(DI),DX
 	MOVQ 16(DI),CX
 	MOVQ 24(DI),R8
 	MOVQ 32(DI),R9
-	MOVQ ·REDMASK51(SB),AX
+	MOVQ $REDMASK51,AX
 	MOVQ AX,R10
 	SUBQ $18,R10
 	MOVQ $3,R11
@@ -81,14 +70,4 @@
 	MOVQ CX,16(DI)
 	MOVQ R8,24(DI)
 	MOVQ R9,32(DI)
-	MOVQ 0(SP),R11
-	MOVQ 8(SP),R12
-	MOVQ 16(SP),R13
-	MOVQ 24(SP),R14
-	MOVQ 32(SP),R15
-	MOVQ 40(SP),BX
-	MOVQ 48(SP),BP
-	MOVQ R11,SP
-	MOVQ DI,AX
-	MOVQ SI,DX
 	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/ladderstep_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/curve25519/ladderstep_amd64.s
index 3949f9c..7074e5c 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/curve25519/ladderstep_amd64.s
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/ladderstep_amd64.s
@@ -7,23 +7,12 @@
 
 // +build amd64,!gccgo,!appengine
 
+#include "const_amd64.h"
+
 // func ladderstep(inout *[5][5]uint64)
-TEXT ·ladderstep(SB),0,$384-8
+TEXT ·ladderstep(SB),0,$296-8
 	MOVQ inout+0(FP),DI
 
-	MOVQ SP,R11
-	MOVQ $31,CX
-	NOTQ CX
-	ANDQ CX,SP
-	ADDQ $32,SP
-
-	MOVQ R11,0(SP)
-	MOVQ R12,8(SP)
-	MOVQ R13,16(SP)
-	MOVQ R14,24(SP)
-	MOVQ R15,32(SP)
-	MOVQ BX,40(SP)
-	MOVQ BP,48(SP)
 	MOVQ 40(DI),SI
 	MOVQ 48(DI),DX
 	MOVQ 56(DI),CX
@@ -49,204 +38,89 @@
 	SUBQ 96(DI),R11
 	SUBQ 104(DI),R12
 	SUBQ 112(DI),R13
-	MOVQ SI,56(SP)
-	MOVQ DX,64(SP)
-	MOVQ CX,72(SP)
-	MOVQ R8,80(SP)
-	MOVQ R9,88(SP)
-	MOVQ AX,96(SP)
-	MOVQ R10,104(SP)
-	MOVQ R11,112(SP)
-	MOVQ R12,120(SP)
-	MOVQ R13,128(SP)
-	MOVQ 96(SP),AX
-	MULQ 96(SP)
+	MOVQ SI,0(SP)
+	MOVQ DX,8(SP)
+	MOVQ CX,16(SP)
+	MOVQ R8,24(SP)
+	MOVQ R9,32(SP)
+	MOVQ AX,40(SP)
+	MOVQ R10,48(SP)
+	MOVQ R11,56(SP)
+	MOVQ R12,64(SP)
+	MOVQ R13,72(SP)
+	MOVQ 40(SP),AX
+	MULQ 40(SP)
 	MOVQ AX,SI
 	MOVQ DX,CX
-	MOVQ 96(SP),AX
+	MOVQ 40(SP),AX
 	SHLQ $1,AX
-	MULQ 104(SP)
+	MULQ 48(SP)
 	MOVQ AX,R8
 	MOVQ DX,R9
-	MOVQ 96(SP),AX
+	MOVQ 40(SP),AX
 	SHLQ $1,AX
-	MULQ 112(SP)
+	MULQ 56(SP)
 	MOVQ AX,R10
 	MOVQ DX,R11
-	MOVQ 96(SP),AX
+	MOVQ 40(SP),AX
 	SHLQ $1,AX
-	MULQ 120(SP)
+	MULQ 64(SP)
 	MOVQ AX,R12
 	MOVQ DX,R13
-	MOVQ 96(SP),AX
+	MOVQ 40(SP),AX
 	SHLQ $1,AX
-	MULQ 128(SP)
+	MULQ 72(SP)
 	MOVQ AX,R14
 	MOVQ DX,R15
-	MOVQ 104(SP),AX
-	MULQ 104(SP)
+	MOVQ 48(SP),AX
+	MULQ 48(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 104(SP),AX
+	MOVQ 48(SP),AX
 	SHLQ $1,AX
-	MULQ 112(SP)
+	MULQ 56(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 104(SP),AX
+	MOVQ 48(SP),AX
 	SHLQ $1,AX
-	MULQ 120(SP)
+	MULQ 64(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 104(SP),DX
+	MOVQ 48(SP),DX
 	IMUL3Q $38,DX,AX
-	MULQ 128(SP)
+	MULQ 72(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 112(SP),AX
-	MULQ 112(SP)
-	ADDQ AX,R14
-	ADCQ DX,R15
-	MOVQ 112(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 120(SP)
-	ADDQ AX,SI
-	ADCQ DX,CX
-	MOVQ 112(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 128(SP)
-	ADDQ AX,R8
-	ADCQ DX,R9
-	MOVQ 120(SP),DX
-	IMUL3Q $19,DX,AX
-	MULQ 120(SP)
-	ADDQ AX,R8
-	ADCQ DX,R9
-	MOVQ 120(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 128(SP)
-	ADDQ AX,R10
-	ADCQ DX,R11
-	MOVQ 128(SP),DX
-	IMUL3Q $19,DX,AX
-	MULQ 128(SP)
-	ADDQ AX,R12
-	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
-	SHLQ $13,CX:SI
-	ANDQ DX,SI
-	SHLQ $13,R9:R8
-	ANDQ DX,R8
-	ADDQ CX,R8
-	SHLQ $13,R11:R10
-	ANDQ DX,R10
-	ADDQ R9,R10
-	SHLQ $13,R13:R12
-	ANDQ DX,R12
-	ADDQ R11,R12
-	SHLQ $13,R15:R14
-	ANDQ DX,R14
-	ADDQ R13,R14
-	IMUL3Q $19,R15,CX
-	ADDQ CX,SI
-	MOVQ SI,CX
-	SHRQ $51,CX
-	ADDQ R8,CX
-	ANDQ DX,SI
-	MOVQ CX,R8
-	SHRQ $51,CX
-	ADDQ R10,CX
-	ANDQ DX,R8
-	MOVQ CX,R9
-	SHRQ $51,CX
-	ADDQ R12,CX
-	ANDQ DX,R9
-	MOVQ CX,AX
-	SHRQ $51,CX
-	ADDQ R14,CX
-	ANDQ DX,AX
-	MOVQ CX,R10
-	SHRQ $51,CX
-	IMUL3Q $19,CX,CX
-	ADDQ CX,SI
-	ANDQ DX,R10
-	MOVQ SI,136(SP)
-	MOVQ R8,144(SP)
-	MOVQ R9,152(SP)
-	MOVQ AX,160(SP)
-	MOVQ R10,168(SP)
 	MOVQ 56(SP),AX
 	MULQ 56(SP)
-	MOVQ AX,SI
-	MOVQ DX,CX
-	MOVQ 56(SP),AX
-	SHLQ $1,AX
-	MULQ 64(SP)
-	MOVQ AX,R8
-	MOVQ DX,R9
-	MOVQ 56(SP),AX
-	SHLQ $1,AX
-	MULQ 72(SP)
-	MOVQ AX,R10
-	MOVQ DX,R11
-	MOVQ 56(SP),AX
-	SHLQ $1,AX
-	MULQ 80(SP)
-	MOVQ AX,R12
-	MOVQ DX,R13
-	MOVQ 56(SP),AX
-	SHLQ $1,AX
-	MULQ 88(SP)
-	MOVQ AX,R14
-	MOVQ DX,R15
-	MOVQ 64(SP),AX
-	MULQ 64(SP)
-	ADDQ AX,R10
-	ADCQ DX,R11
-	MOVQ 64(SP),AX
-	SHLQ $1,AX
-	MULQ 72(SP)
-	ADDQ AX,R12
-	ADCQ DX,R13
-	MOVQ 64(SP),AX
-	SHLQ $1,AX
-	MULQ 80(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
+	MOVQ 56(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 64(SP)
+	ADDQ AX,SI
+	ADCQ DX,CX
+	MOVQ 56(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 72(SP)
+	ADDQ AX,R8
+	ADCQ DX,R9
+	MOVQ 64(SP),DX
+	IMUL3Q $19,DX,AX
+	MULQ 64(SP)
+	ADDQ AX,R8
+	ADCQ DX,R9
 	MOVQ 64(SP),DX
 	IMUL3Q $38,DX,AX
-	MULQ 88(SP)
-	ADDQ AX,SI
-	ADCQ DX,CX
-	MOVQ 72(SP),AX
 	MULQ 72(SP)
-	ADDQ AX,R14
-	ADCQ DX,R15
-	MOVQ 72(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 80(SP)
-	ADDQ AX,SI
-	ADCQ DX,CX
-	MOVQ 72(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 88(SP)
-	ADDQ AX,R8
-	ADCQ DX,R9
-	MOVQ 80(SP),DX
-	IMUL3Q $19,DX,AX
-	MULQ 80(SP)
-	ADDQ AX,R8
-	ADCQ DX,R9
-	MOVQ 80(SP),DX
-	IMUL3Q $38,DX,AX
-	MULQ 88(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 88(SP),DX
+	MOVQ 72(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 88(SP)
+	MULQ 72(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -284,11 +158,126 @@
 	IMUL3Q $19,CX,CX
 	ADDQ CX,SI
 	ANDQ DX,R10
-	MOVQ SI,176(SP)
-	MOVQ R8,184(SP)
-	MOVQ R9,192(SP)
-	MOVQ AX,200(SP)
-	MOVQ R10,208(SP)
+	MOVQ SI,80(SP)
+	MOVQ R8,88(SP)
+	MOVQ R9,96(SP)
+	MOVQ AX,104(SP)
+	MOVQ R10,112(SP)
+	MOVQ 0(SP),AX
+	MULQ 0(SP)
+	MOVQ AX,SI
+	MOVQ DX,CX
+	MOVQ 0(SP),AX
+	SHLQ $1,AX
+	MULQ 8(SP)
+	MOVQ AX,R8
+	MOVQ DX,R9
+	MOVQ 0(SP),AX
+	SHLQ $1,AX
+	MULQ 16(SP)
+	MOVQ AX,R10
+	MOVQ DX,R11
+	MOVQ 0(SP),AX
+	SHLQ $1,AX
+	MULQ 24(SP)
+	MOVQ AX,R12
+	MOVQ DX,R13
+	MOVQ 0(SP),AX
+	SHLQ $1,AX
+	MULQ 32(SP)
+	MOVQ AX,R14
+	MOVQ DX,R15
+	MOVQ 8(SP),AX
+	MULQ 8(SP)
+	ADDQ AX,R10
+	ADCQ DX,R11
+	MOVQ 8(SP),AX
+	SHLQ $1,AX
+	MULQ 16(SP)
+	ADDQ AX,R12
+	ADCQ DX,R13
+	MOVQ 8(SP),AX
+	SHLQ $1,AX
+	MULQ 24(SP)
+	ADDQ AX,R14
+	ADCQ DX,R15
+	MOVQ 8(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 32(SP)
+	ADDQ AX,SI
+	ADCQ DX,CX
+	MOVQ 16(SP),AX
+	MULQ 16(SP)
+	ADDQ AX,R14
+	ADCQ DX,R15
+	MOVQ 16(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 24(SP)
+	ADDQ AX,SI
+	ADCQ DX,CX
+	MOVQ 16(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 32(SP)
+	ADDQ AX,R8
+	ADCQ DX,R9
+	MOVQ 24(SP),DX
+	IMUL3Q $19,DX,AX
+	MULQ 24(SP)
+	ADDQ AX,R8
+	ADCQ DX,R9
+	MOVQ 24(SP),DX
+	IMUL3Q $38,DX,AX
+	MULQ 32(SP)
+	ADDQ AX,R10
+	ADCQ DX,R11
+	MOVQ 32(SP),DX
+	IMUL3Q $19,DX,AX
+	MULQ 32(SP)
+	ADDQ AX,R12
+	ADCQ DX,R13
+	MOVQ $REDMASK51,DX
+	SHLQ $13,CX:SI
+	ANDQ DX,SI
+	SHLQ $13,R9:R8
+	ANDQ DX,R8
+	ADDQ CX,R8
+	SHLQ $13,R11:R10
+	ANDQ DX,R10
+	ADDQ R9,R10
+	SHLQ $13,R13:R12
+	ANDQ DX,R12
+	ADDQ R11,R12
+	SHLQ $13,R15:R14
+	ANDQ DX,R14
+	ADDQ R13,R14
+	IMUL3Q $19,R15,CX
+	ADDQ CX,SI
+	MOVQ SI,CX
+	SHRQ $51,CX
+	ADDQ R8,CX
+	ANDQ DX,SI
+	MOVQ CX,R8
+	SHRQ $51,CX
+	ADDQ R10,CX
+	ANDQ DX,R8
+	MOVQ CX,R9
+	SHRQ $51,CX
+	ADDQ R12,CX
+	ANDQ DX,R9
+	MOVQ CX,AX
+	SHRQ $51,CX
+	ADDQ R14,CX
+	ANDQ DX,AX
+	MOVQ CX,R10
+	SHRQ $51,CX
+	IMUL3Q $19,CX,CX
+	ADDQ CX,SI
+	ANDQ DX,R10
+	MOVQ SI,120(SP)
+	MOVQ R8,128(SP)
+	MOVQ R9,136(SP)
+	MOVQ AX,144(SP)
+	MOVQ R10,152(SP)
 	MOVQ SI,SI
 	MOVQ R8,DX
 	MOVQ R9,CX
@@ -299,16 +288,16 @@
 	ADDQ ·_2P1234(SB),CX
 	ADDQ ·_2P1234(SB),R8
 	ADDQ ·_2P1234(SB),R9
-	SUBQ 136(SP),SI
-	SUBQ 144(SP),DX
-	SUBQ 152(SP),CX
-	SUBQ 160(SP),R8
-	SUBQ 168(SP),R9
-	MOVQ SI,216(SP)
-	MOVQ DX,224(SP)
-	MOVQ CX,232(SP)
-	MOVQ R8,240(SP)
-	MOVQ R9,248(SP)
+	SUBQ 80(SP),SI
+	SUBQ 88(SP),DX
+	SUBQ 96(SP),CX
+	SUBQ 104(SP),R8
+	SUBQ 112(SP),R9
+	MOVQ SI,160(SP)
+	MOVQ DX,168(SP)
+	MOVQ CX,176(SP)
+	MOVQ R8,184(SP)
+	MOVQ R9,192(SP)
 	MOVQ 120(DI),SI
 	MOVQ 128(DI),DX
 	MOVQ 136(DI),CX
@@ -334,124 +323,124 @@
 	SUBQ 176(DI),R11
 	SUBQ 184(DI),R12
 	SUBQ 192(DI),R13
-	MOVQ SI,256(SP)
-	MOVQ DX,264(SP)
-	MOVQ CX,272(SP)
-	MOVQ R8,280(SP)
-	MOVQ R9,288(SP)
-	MOVQ AX,296(SP)
-	MOVQ R10,304(SP)
-	MOVQ R11,312(SP)
-	MOVQ R12,320(SP)
-	MOVQ R13,328(SP)
-	MOVQ 280(SP),SI
+	MOVQ SI,200(SP)
+	MOVQ DX,208(SP)
+	MOVQ CX,216(SP)
+	MOVQ R8,224(SP)
+	MOVQ R9,232(SP)
+	MOVQ AX,240(SP)
+	MOVQ R10,248(SP)
+	MOVQ R11,256(SP)
+	MOVQ R12,264(SP)
+	MOVQ R13,272(SP)
+	MOVQ 224(SP),SI
 	IMUL3Q $19,SI,AX
-	MOVQ AX,336(SP)
-	MULQ 112(SP)
+	MOVQ AX,280(SP)
+	MULQ 56(SP)
 	MOVQ AX,SI
 	MOVQ DX,CX
-	MOVQ 288(SP),DX
+	MOVQ 232(SP),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,344(SP)
-	MULQ 104(SP)
+	MOVQ AX,288(SP)
+	MULQ 48(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 256(SP),AX
-	MULQ 96(SP)
+	MOVQ 200(SP),AX
+	MULQ 40(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 256(SP),AX
-	MULQ 104(SP)
+	MOVQ 200(SP),AX
+	MULQ 48(SP)
 	MOVQ AX,R8
 	MOVQ DX,R9
-	MOVQ 256(SP),AX
-	MULQ 112(SP)
+	MOVQ 200(SP),AX
+	MULQ 56(SP)
 	MOVQ AX,R10
 	MOVQ DX,R11
-	MOVQ 256(SP),AX
-	MULQ 120(SP)
+	MOVQ 200(SP),AX
+	MULQ 64(SP)
 	MOVQ AX,R12
 	MOVQ DX,R13
-	MOVQ 256(SP),AX
-	MULQ 128(SP)
+	MOVQ 200(SP),AX
+	MULQ 72(SP)
 	MOVQ AX,R14
 	MOVQ DX,R15
-	MOVQ 264(SP),AX
-	MULQ 96(SP)
+	MOVQ 208(SP),AX
+	MULQ 40(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 264(SP),AX
-	MULQ 104(SP)
+	MOVQ 208(SP),AX
+	MULQ 48(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 264(SP),AX
-	MULQ 112(SP)
+	MOVQ 208(SP),AX
+	MULQ 56(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 264(SP),AX
-	MULQ 120(SP)
+	MOVQ 208(SP),AX
+	MULQ 64(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 264(SP),DX
+	MOVQ 208(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 128(SP)
+	MULQ 72(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 272(SP),AX
-	MULQ 96(SP)
+	MOVQ 216(SP),AX
+	MULQ 40(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 272(SP),AX
-	MULQ 104(SP)
+	MOVQ 216(SP),AX
+	MULQ 48(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 272(SP),AX
-	MULQ 112(SP)
+	MOVQ 216(SP),AX
+	MULQ 56(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 272(SP),DX
+	MOVQ 216(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 120(SP)
+	MULQ 64(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 272(SP),DX
+	MOVQ 216(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 128(SP)
+	MULQ 72(SP)
+	ADDQ AX,R8
+	ADCQ DX,R9
+	MOVQ 224(SP),AX
+	MULQ 40(SP)
+	ADDQ AX,R12
+	ADCQ DX,R13
+	MOVQ 224(SP),AX
+	MULQ 48(SP)
+	ADDQ AX,R14
+	ADCQ DX,R15
+	MOVQ 280(SP),AX
+	MULQ 64(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
 	MOVQ 280(SP),AX
-	MULQ 96(SP)
-	ADDQ AX,R12
-	ADCQ DX,R13
-	MOVQ 280(SP),AX
-	MULQ 104(SP)
+	MULQ 72(SP)
+	ADDQ AX,R10
+	ADCQ DX,R11
+	MOVQ 232(SP),AX
+	MULQ 40(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 336(SP),AX
-	MULQ 120(SP)
+	MOVQ 288(SP),AX
+	MULQ 56(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 336(SP),AX
-	MULQ 128(SP)
+	MOVQ 288(SP),AX
+	MULQ 64(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
 	MOVQ 288(SP),AX
-	MULQ 96(SP)
-	ADDQ AX,R14
-	ADCQ DX,R15
-	MOVQ 344(SP),AX
-	MULQ 112(SP)
-	ADDQ AX,R8
-	ADCQ DX,R9
-	MOVQ 344(SP),AX
-	MULQ 120(SP)
-	ADDQ AX,R10
-	ADCQ DX,R11
-	MOVQ 344(SP),AX
-	MULQ 128(SP)
+	MULQ 72(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -489,119 +478,119 @@
 	IMUL3Q $19,CX,CX
 	ADDQ CX,SI
 	ANDQ DX,R10
-	MOVQ SI,96(SP)
-	MOVQ R8,104(SP)
-	MOVQ R9,112(SP)
-	MOVQ AX,120(SP)
-	MOVQ R10,128(SP)
-	MOVQ 320(SP),SI
+	MOVQ SI,40(SP)
+	MOVQ R8,48(SP)
+	MOVQ R9,56(SP)
+	MOVQ AX,64(SP)
+	MOVQ R10,72(SP)
+	MOVQ 264(SP),SI
 	IMUL3Q $19,SI,AX
-	MOVQ AX,256(SP)
-	MULQ 72(SP)
+	MOVQ AX,200(SP)
+	MULQ 16(SP)
 	MOVQ AX,SI
 	MOVQ DX,CX
-	MOVQ 328(SP),DX
+	MOVQ 272(SP),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,264(SP)
-	MULQ 64(SP)
+	MOVQ AX,208(SP)
+	MULQ 8(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 296(SP),AX
-	MULQ 56(SP)
+	MOVQ 240(SP),AX
+	MULQ 0(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 296(SP),AX
-	MULQ 64(SP)
+	MOVQ 240(SP),AX
+	MULQ 8(SP)
 	MOVQ AX,R8
 	MOVQ DX,R9
-	MOVQ 296(SP),AX
-	MULQ 72(SP)
+	MOVQ 240(SP),AX
+	MULQ 16(SP)
 	MOVQ AX,R10
 	MOVQ DX,R11
-	MOVQ 296(SP),AX
-	MULQ 80(SP)
+	MOVQ 240(SP),AX
+	MULQ 24(SP)
 	MOVQ AX,R12
 	MOVQ DX,R13
-	MOVQ 296(SP),AX
-	MULQ 88(SP)
+	MOVQ 240(SP),AX
+	MULQ 32(SP)
 	MOVQ AX,R14
 	MOVQ DX,R15
-	MOVQ 304(SP),AX
-	MULQ 56(SP)
+	MOVQ 248(SP),AX
+	MULQ 0(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 304(SP),AX
-	MULQ 64(SP)
+	MOVQ 248(SP),AX
+	MULQ 8(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 304(SP),AX
-	MULQ 72(SP)
+	MOVQ 248(SP),AX
+	MULQ 16(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 304(SP),AX
-	MULQ 80(SP)
+	MOVQ 248(SP),AX
+	MULQ 24(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 304(SP),DX
+	MOVQ 248(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 88(SP)
+	MULQ 32(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 312(SP),AX
-	MULQ 56(SP)
+	MOVQ 256(SP),AX
+	MULQ 0(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 312(SP),AX
-	MULQ 64(SP)
+	MOVQ 256(SP),AX
+	MULQ 8(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 312(SP),AX
-	MULQ 72(SP)
+	MOVQ 256(SP),AX
+	MULQ 16(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 312(SP),DX
+	MOVQ 256(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 80(SP)
+	MULQ 24(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 312(SP),DX
+	MOVQ 256(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 88(SP)
+	MULQ 32(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 320(SP),AX
-	MULQ 56(SP)
+	MOVQ 264(SP),AX
+	MULQ 0(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 320(SP),AX
-	MULQ 64(SP)
+	MOVQ 264(SP),AX
+	MULQ 8(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 256(SP),AX
-	MULQ 80(SP)
+	MOVQ 200(SP),AX
+	MULQ 24(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 256(SP),AX
-	MULQ 88(SP)
+	MOVQ 200(SP),AX
+	MULQ 32(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 328(SP),AX
-	MULQ 56(SP)
+	MOVQ 272(SP),AX
+	MULQ 0(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 264(SP),AX
-	MULQ 72(SP)
+	MOVQ 208(SP),AX
+	MULQ 16(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 264(SP),AX
-	MULQ 80(SP)
+	MOVQ 208(SP),AX
+	MULQ 24(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 264(SP),AX
-	MULQ 88(SP)
+	MOVQ 208(SP),AX
+	MULQ 32(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -649,16 +638,16 @@
 	ADDQ ·_2P1234(SB),R11
 	ADDQ ·_2P1234(SB),R12
 	ADDQ ·_2P1234(SB),R13
-	ADDQ 96(SP),SI
-	ADDQ 104(SP),R8
-	ADDQ 112(SP),R9
-	ADDQ 120(SP),AX
-	ADDQ 128(SP),R10
-	SUBQ 96(SP),DX
-	SUBQ 104(SP),CX
-	SUBQ 112(SP),R11
-	SUBQ 120(SP),R12
-	SUBQ 128(SP),R13
+	ADDQ 40(SP),SI
+	ADDQ 48(SP),R8
+	ADDQ 56(SP),R9
+	ADDQ 64(SP),AX
+	ADDQ 72(SP),R10
+	SUBQ 40(SP),DX
+	SUBQ 48(SP),CX
+	SUBQ 56(SP),R11
+	SUBQ 64(SP),R12
+	SUBQ 72(SP),R13
 	MOVQ SI,120(DI)
 	MOVQ R8,128(DI)
 	MOVQ R9,136(DI)
@@ -741,7 +730,7 @@
 	MULQ 152(DI)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -856,7 +845,7 @@
 	MULQ 192(DI)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -901,13 +890,13 @@
 	MOVQ R10,192(DI)
 	MOVQ 184(DI),SI
 	IMUL3Q $19,SI,AX
-	MOVQ AX,56(SP)
+	MOVQ AX,0(SP)
 	MULQ 16(DI)
 	MOVQ AX,SI
 	MOVQ DX,CX
 	MOVQ 192(DI),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,64(SP)
+	MOVQ AX,8(SP)
 	MULQ 8(DI)
 	ADDQ AX,SI
 	ADCQ DX,CX
@@ -982,11 +971,11 @@
 	MULQ 8(DI)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 56(SP),AX
+	MOVQ 0(SP),AX
 	MULQ 24(DI)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 56(SP),AX
+	MOVQ 0(SP),AX
 	MULQ 32(DI)
 	ADDQ AX,R10
 	ADCQ DX,R11
@@ -994,19 +983,19 @@
 	MULQ 0(DI)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 64(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 16(DI)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 64(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 24(DI)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 64(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 32(DI)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -1049,114 +1038,114 @@
 	MOVQ R9,176(DI)
 	MOVQ AX,184(DI)
 	MOVQ R10,192(DI)
-	MOVQ 200(SP),SI
+	MOVQ 144(SP),SI
 	IMUL3Q $19,SI,AX
-	MOVQ AX,56(SP)
-	MULQ 152(SP)
+	MOVQ AX,0(SP)
+	MULQ 96(SP)
 	MOVQ AX,SI
 	MOVQ DX,CX
-	MOVQ 208(SP),DX
+	MOVQ 152(SP),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,64(SP)
-	MULQ 144(SP)
+	MOVQ AX,8(SP)
+	MULQ 88(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 176(SP),AX
-	MULQ 136(SP)
+	MOVQ 120(SP),AX
+	MULQ 80(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 176(SP),AX
-	MULQ 144(SP)
+	MOVQ 120(SP),AX
+	MULQ 88(SP)
 	MOVQ AX,R8
 	MOVQ DX,R9
-	MOVQ 176(SP),AX
-	MULQ 152(SP)
+	MOVQ 120(SP),AX
+	MULQ 96(SP)
 	MOVQ AX,R10
 	MOVQ DX,R11
-	MOVQ 176(SP),AX
-	MULQ 160(SP)
+	MOVQ 120(SP),AX
+	MULQ 104(SP)
 	MOVQ AX,R12
 	MOVQ DX,R13
-	MOVQ 176(SP),AX
-	MULQ 168(SP)
+	MOVQ 120(SP),AX
+	MULQ 112(SP)
 	MOVQ AX,R14
 	MOVQ DX,R15
-	MOVQ 184(SP),AX
-	MULQ 136(SP)
+	MOVQ 128(SP),AX
+	MULQ 80(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 184(SP),AX
-	MULQ 144(SP)
+	MOVQ 128(SP),AX
+	MULQ 88(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 184(SP),AX
-	MULQ 152(SP)
+	MOVQ 128(SP),AX
+	MULQ 96(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 184(SP),AX
-	MULQ 160(SP)
+	MOVQ 128(SP),AX
+	MULQ 104(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 184(SP),DX
+	MOVQ 128(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 168(SP)
+	MULQ 112(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 192(SP),AX
-	MULQ 136(SP)
+	MOVQ 136(SP),AX
+	MULQ 80(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 192(SP),AX
-	MULQ 144(SP)
+	MOVQ 136(SP),AX
+	MULQ 88(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 192(SP),AX
-	MULQ 152(SP)
+	MOVQ 136(SP),AX
+	MULQ 96(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 192(SP),DX
+	MOVQ 136(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 160(SP)
+	MULQ 104(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
-	MOVQ 192(SP),DX
+	MOVQ 136(SP),DX
 	IMUL3Q $19,DX,AX
-	MULQ 168(SP)
+	MULQ 112(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 200(SP),AX
-	MULQ 136(SP)
+	MOVQ 144(SP),AX
+	MULQ 80(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 200(SP),AX
-	MULQ 144(SP)
+	MOVQ 144(SP),AX
+	MULQ 88(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 56(SP),AX
-	MULQ 160(SP)
+	MOVQ 0(SP),AX
+	MULQ 104(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 56(SP),AX
-	MULQ 168(SP)
+	MOVQ 0(SP),AX
+	MULQ 112(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 208(SP),AX
-	MULQ 136(SP)
+	MOVQ 152(SP),AX
+	MULQ 80(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 64(SP),AX
-	MULQ 152(SP)
+	MOVQ 8(SP),AX
+	MULQ 96(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 64(SP),AX
-	MULQ 160(SP)
+	MOVQ 8(SP),AX
+	MULQ 104(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 64(SP),AX
-	MULQ 168(SP)
+	MOVQ 8(SP),AX
+	MULQ 112(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -1199,37 +1188,37 @@
 	MOVQ R9,56(DI)
 	MOVQ AX,64(DI)
 	MOVQ R10,72(DI)
-	MOVQ 216(SP),AX
+	MOVQ 160(SP),AX
 	MULQ ·_121666_213(SB)
 	SHRQ $13,AX
 	MOVQ AX,SI
 	MOVQ DX,CX
-	MOVQ 224(SP),AX
+	MOVQ 168(SP),AX
 	MULQ ·_121666_213(SB)
 	SHRQ $13,AX
 	ADDQ AX,CX
 	MOVQ DX,R8
-	MOVQ 232(SP),AX
+	MOVQ 176(SP),AX
 	MULQ ·_121666_213(SB)
 	SHRQ $13,AX
 	ADDQ AX,R8
 	MOVQ DX,R9
-	MOVQ 240(SP),AX
+	MOVQ 184(SP),AX
 	MULQ ·_121666_213(SB)
 	SHRQ $13,AX
 	ADDQ AX,R9
 	MOVQ DX,R10
-	MOVQ 248(SP),AX
+	MOVQ 192(SP),AX
 	MULQ ·_121666_213(SB)
 	SHRQ $13,AX
 	ADDQ AX,R10
 	IMUL3Q $19,DX,DX
 	ADDQ DX,SI
-	ADDQ 136(SP),SI
-	ADDQ 144(SP),CX
-	ADDQ 152(SP),R8
-	ADDQ 160(SP),R9
-	ADDQ 168(SP),R10
+	ADDQ 80(SP),SI
+	ADDQ 88(SP),CX
+	ADDQ 96(SP),R8
+	ADDQ 104(SP),R9
+	ADDQ 112(SP),R10
 	MOVQ SI,80(DI)
 	MOVQ CX,88(DI)
 	MOVQ R8,96(DI)
@@ -1237,112 +1226,112 @@
 	MOVQ R10,112(DI)
 	MOVQ 104(DI),SI
 	IMUL3Q $19,SI,AX
-	MOVQ AX,56(SP)
-	MULQ 232(SP)
+	MOVQ AX,0(SP)
+	MULQ 176(SP)
 	MOVQ AX,SI
 	MOVQ DX,CX
 	MOVQ 112(DI),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,64(SP)
-	MULQ 224(SP)
+	MOVQ AX,8(SP)
+	MULQ 168(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
 	MOVQ 80(DI),AX
-	MULQ 216(SP)
+	MULQ 160(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
 	MOVQ 80(DI),AX
-	MULQ 224(SP)
+	MULQ 168(SP)
 	MOVQ AX,R8
 	MOVQ DX,R9
 	MOVQ 80(DI),AX
-	MULQ 232(SP)
+	MULQ 176(SP)
 	MOVQ AX,R10
 	MOVQ DX,R11
 	MOVQ 80(DI),AX
-	MULQ 240(SP)
+	MULQ 184(SP)
 	MOVQ AX,R12
 	MOVQ DX,R13
 	MOVQ 80(DI),AX
-	MULQ 248(SP)
+	MULQ 192(SP)
 	MOVQ AX,R14
 	MOVQ DX,R15
 	MOVQ 88(DI),AX
-	MULQ 216(SP)
+	MULQ 160(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
 	MOVQ 88(DI),AX
-	MULQ 224(SP)
+	MULQ 168(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
 	MOVQ 88(DI),AX
-	MULQ 232(SP)
+	MULQ 176(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
 	MOVQ 88(DI),AX
-	MULQ 240(SP)
+	MULQ 184(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
 	MOVQ 88(DI),DX
 	IMUL3Q $19,DX,AX
-	MULQ 248(SP)
+	MULQ 192(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
 	MOVQ 96(DI),AX
-	MULQ 216(SP)
+	MULQ 160(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
 	MOVQ 96(DI),AX
-	MULQ 224(SP)
+	MULQ 168(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
 	MOVQ 96(DI),AX
-	MULQ 232(SP)
+	MULQ 176(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
 	MOVQ 96(DI),DX
 	IMUL3Q $19,DX,AX
-	MULQ 240(SP)
+	MULQ 184(SP)
 	ADDQ AX,SI
 	ADCQ DX,CX
 	MOVQ 96(DI),DX
 	IMUL3Q $19,DX,AX
-	MULQ 248(SP)
+	MULQ 192(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
 	MOVQ 104(DI),AX
-	MULQ 216(SP)
+	MULQ 160(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
 	MOVQ 104(DI),AX
-	MULQ 224(SP)
+	MULQ 168(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 56(SP),AX
-	MULQ 240(SP)
+	MOVQ 0(SP),AX
+	MULQ 184(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 56(SP),AX
-	MULQ 248(SP)
+	MOVQ 0(SP),AX
+	MULQ 192(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
 	MOVQ 112(DI),AX
-	MULQ 216(SP)
+	MULQ 160(SP)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ 64(SP),AX
-	MULQ 232(SP)
+	MOVQ 8(SP),AX
+	MULQ 176(SP)
 	ADDQ AX,R8
 	ADCQ DX,R9
-	MOVQ 64(SP),AX
-	MULQ 240(SP)
+	MOVQ 8(SP),AX
+	MULQ 184(SP)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 64(SP),AX
-	MULQ 248(SP)
+	MOVQ 8(SP),AX
+	MULQ 192(SP)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ ·REDMASK51(SB),DX
+	MOVQ $REDMASK51,DX
 	SHLQ $13,CX:SI
 	ANDQ DX,SI
 	SHLQ $13,R9:R8
@@ -1385,14 +1374,4 @@
 	MOVQ R9,96(DI)
 	MOVQ AX,104(DI)
 	MOVQ R10,112(DI)
-	MOVQ 0(SP),R11
-	MOVQ 8(SP),R12
-	MOVQ 16(SP),R13
-	MOVQ 24(SP),R14
-	MOVQ 32(SP),R15
-	MOVQ 40(SP),BX
-	MOVQ 48(SP),BP
-	MOVQ R11,SP
-	MOVQ DI,AX
-	MOVQ SI,DX
 	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/mul_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/curve25519/mul_amd64.s
index e48d183..b162e65 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/curve25519/mul_amd64.s
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/mul_amd64.s
@@ -7,36 +7,24 @@
 
 // +build amd64,!gccgo,!appengine
 
+#include "const_amd64.h"
+
 // func mul(dest, a, b *[5]uint64)
-TEXT ·mul(SB),0,$128-24
+TEXT ·mul(SB),0,$16-24
 	MOVQ dest+0(FP), DI
 	MOVQ a+8(FP), SI
 	MOVQ b+16(FP), DX
 
-	MOVQ SP,R11
-	MOVQ $31,CX
-	NOTQ CX
-	ANDQ CX,SP
-	ADDQ $32,SP
-
-	MOVQ R11,0(SP)
-	MOVQ R12,8(SP)
-	MOVQ R13,16(SP)
-	MOVQ R14,24(SP)
-	MOVQ R15,32(SP)
-	MOVQ BX,40(SP)
-	MOVQ BP,48(SP)
-	MOVQ DI,56(SP)
 	MOVQ DX,CX
 	MOVQ 24(SI),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,64(SP)
+	MOVQ AX,0(SP)
 	MULQ 16(CX)
 	MOVQ AX,R8
 	MOVQ DX,R9
 	MOVQ 32(SI),DX
 	IMUL3Q $19,DX,AX
-	MOVQ AX,72(SP)
+	MOVQ AX,8(SP)
 	MULQ 8(CX)
 	ADDQ AX,R8
 	ADCQ DX,R9
@@ -111,11 +99,11 @@
 	MULQ 8(CX)
 	ADDQ AX,BX
 	ADCQ DX,BP
-	MOVQ 64(SP),AX
+	MOVQ 0(SP),AX
 	MULQ 24(CX)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 64(SP),AX
+	MOVQ 0(SP),AX
 	MULQ 32(CX)
 	ADDQ AX,R12
 	ADCQ DX,R13
@@ -123,19 +111,19 @@
 	MULQ 0(CX)
 	ADDQ AX,BX
 	ADCQ DX,BP
-	MOVQ 72(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 16(CX)
 	ADDQ AX,R10
 	ADCQ DX,R11
-	MOVQ 72(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 24(CX)
 	ADDQ AX,R12
 	ADCQ DX,R13
-	MOVQ 72(SP),AX
+	MOVQ 8(SP),AX
 	MULQ 32(CX)
 	ADDQ AX,R14
 	ADCQ DX,R15
-	MOVQ ·REDMASK51(SB),SI
+	MOVQ $REDMASK51,SI
 	SHLQ $13,R9:R8
 	ANDQ SI,R8
 	SHLQ $13,R11:R10
@@ -178,14 +166,4 @@
 	MOVQ R9,16(DI)
 	MOVQ AX,24(DI)
 	MOVQ R10,32(DI)
-	MOVQ 0(SP),R11
-	MOVQ 8(SP),R12
-	MOVQ 16(SP),R13
-	MOVQ 24(SP),R14
-	MOVQ 32(SP),R15
-	MOVQ 40(SP),BX
-	MOVQ 48(SP),BP
-	MOVQ R11,SP
-	MOVQ DI,AX
-	MOVQ SI,DX
 	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/curve25519/square_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/curve25519/square_amd64.s
index 78d1a50..4e864a8 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/curve25519/square_amd64.s
+++ b/src/third_party/boringssl/src/ssl/test/runner/curve25519/square_amd64.s
@@ -7,24 +7,13 @@
 
 // +build amd64,!gccgo,!appengine
 
+#include "const_amd64.h"
+
 // func square(out, in *[5]uint64)
-TEXT ·square(SB),7,$96-16
+TEXT ·square(SB),7,$0-16
 	MOVQ out+0(FP), DI
 	MOVQ in+8(FP), SI
 
-	MOVQ SP,R11
-	MOVQ $31,CX
-	NOTQ CX
-	ANDQ CX,SP
-	ADDQ $32, SP
-
-	MOVQ R11,0(SP)
-	MOVQ R12,8(SP)
-	MOVQ R13,16(SP)
-	MOVQ R14,24(SP)
-	MOVQ R15,32(SP)
-	MOVQ BX,40(SP)
-	MOVQ BP,48(SP)
 	MOVQ 0(SI),AX
 	MULQ 0(SI)
 	MOVQ AX,CX
@@ -97,7 +86,7 @@
 	MULQ 32(SI)
 	ADDQ AX,R13
 	ADCQ DX,R14
-	MOVQ ·REDMASK51(SB),SI
+	MOVQ $REDMASK51,SI
 	SHLQ $13,R8:CX
 	ANDQ SI,CX
 	SHLQ $13,R10:R9
@@ -140,14 +129,4 @@
 	MOVQ R9,16(DI)
 	MOVQ AX,24(DI)
 	MOVQ R10,32(DI)
-	MOVQ 0(SP),R11
-	MOVQ 8(SP),R12
-	MOVQ 16(SP),R13
-	MOVQ 24(SP),R14
-	MOVQ 32(SP),R15
-	MOVQ 40(SP),BX
-	MOVQ 48(SP),BP
-	MOVQ R11,SP
-	MOVQ DI,AX
-	MOVQ SI,DX
 	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/fuzzer_mode.json b/src/third_party/boringssl/src/ssl/test/runner/fuzzer_mode.json
index 80a9bf1..603ca24 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/fuzzer_mode.json
+++ b/src/third_party/boringssl/src/ssl/test/runner/fuzzer_mode.json
@@ -21,6 +21,7 @@
     "*-InvalidSignature-*": "Fuzzer mode always accepts a signature.",
     "*Auth-Verify-RSA-PKCS1-*-TLS13": "Fuzzer mode always accepts a signature.",
     "*Auth-Verify-ECDSA-SHA1-TLS13": "Fuzzer mode always accepts a signature.",
+    "*Auth-Verify-ECDSA-P224-*-TLS13": "Fuzzer mode always accepts a signature.",
     "Verify-*Auth-SignatureType*": "Fuzzer mode always accepts a signature.",
     "ECDSACurveMismatch-Verify-TLS13": "Fuzzer mode always accepts a signature.",
     "InvalidChannelIDSignature-*": "Fuzzer mode always accepts a signature.",
@@ -34,6 +35,12 @@
 
     "Resume-Server-*Binder*": "Fuzzer mode does not check binders.",
 
-    "SkipEarlyData*": "Trial decryption does not work with the NULL cipher."
+    "SkipEarlyData*": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyDataChannelID-OfferBoth-Server": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyData-NonZeroRTTSession-Server": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyData-SkipEndOfEarlyData": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyData-ALPNMismatch-Server": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyData-ALPNOmitted1-Server": "Trial decryption does not work with the NULL cipher.",
+    "TLS13-EarlyData-ALPNOmitted2-Server": "Trial decryption does not work with the NULL cipher."
   }
 }
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/const_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/poly1305/const_amd64.s
deleted file mode 100644
index 8e861f3..0000000
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/const_amd64.s
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-DATA ·SCALE(SB)/8, $0x37F4000000000000
-GLOBL ·SCALE(SB), 8, $8
-DATA ·TWO32(SB)/8, $0x41F0000000000000
-GLOBL ·TWO32(SB), 8, $8
-DATA ·TWO64(SB)/8, $0x43F0000000000000
-GLOBL ·TWO64(SB), 8, $8
-DATA ·TWO96(SB)/8, $0x45F0000000000000
-GLOBL ·TWO96(SB), 8, $8
-DATA ·ALPHA32(SB)/8, $0x45E8000000000000
-GLOBL ·ALPHA32(SB), 8, $8
-DATA ·ALPHA64(SB)/8, $0x47E8000000000000
-GLOBL ·ALPHA64(SB), 8, $8
-DATA ·ALPHA96(SB)/8, $0x49E8000000000000
-GLOBL ·ALPHA96(SB), 8, $8
-DATA ·ALPHA130(SB)/8, $0x4C08000000000000
-GLOBL ·ALPHA130(SB), 8, $8
-DATA ·DOFFSET0(SB)/8, $0x4330000000000000
-GLOBL ·DOFFSET0(SB), 8, $8
-DATA ·DOFFSET1(SB)/8, $0x4530000000000000
-GLOBL ·DOFFSET1(SB), 8, $8
-DATA ·DOFFSET2(SB)/8, $0x4730000000000000
-GLOBL ·DOFFSET2(SB), 8, $8
-DATA ·DOFFSET3(SB)/8, $0x4930000000000000
-GLOBL ·DOFFSET3(SB), 8, $8
-DATA ·DOFFSET3MINUSTWO128(SB)/8, $0x492FFFFE00000000
-GLOBL ·DOFFSET3MINUSTWO128(SB), 8, $8
-DATA ·HOFFSET0(SB)/8, $0x43300001FFFFFFFB
-GLOBL ·HOFFSET0(SB), 8, $8
-DATA ·HOFFSET1(SB)/8, $0x45300001FFFFFFFE
-GLOBL ·HOFFSET1(SB), 8, $8
-DATA ·HOFFSET2(SB)/8, $0x47300001FFFFFFFE
-GLOBL ·HOFFSET2(SB), 8, $8
-DATA ·HOFFSET3(SB)/8, $0x49300003FFFFFFFE
-GLOBL ·HOFFSET3(SB), 8, $8
-DATA ·ROUNDING(SB)/2, $0x137f
-GLOBL ·ROUNDING(SB), 8, $2
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_amd64.s
deleted file mode 100644
index f8d4ee9..0000000
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_amd64.s
+++ /dev/null
@@ -1,497 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
-TEXT ·poly1305(SB),0,$224-32
-	MOVQ out+0(FP),DI
-	MOVQ m+8(FP),SI
-	MOVQ mlen+16(FP),DX
-	MOVQ key+24(FP),CX
-
-	MOVQ SP,R11
-	MOVQ $31,R9
-	NOTQ R9
-	ANDQ R9,SP
-	ADDQ $32,SP
-
-	MOVQ R11,32(SP)
-	MOVQ R12,40(SP)
-	MOVQ R13,48(SP)
-	MOVQ R14,56(SP)
-	MOVQ R15,64(SP)
-	MOVQ BX,72(SP)
-	MOVQ BP,80(SP)
-	FLDCW ·ROUNDING(SB)
-	MOVL 0(CX),R8
-	MOVL 4(CX),R9
-	MOVL 8(CX),AX
-	MOVL 12(CX),R10
-	MOVQ DI,88(SP)
-	MOVQ CX,96(SP)
-	MOVL $0X43300000,108(SP)
-	MOVL $0X45300000,116(SP)
-	MOVL $0X47300000,124(SP)
-	MOVL $0X49300000,132(SP)
-	ANDL $0X0FFFFFFF,R8
-	ANDL $0X0FFFFFFC,R9
-	ANDL $0X0FFFFFFC,AX
-	ANDL $0X0FFFFFFC,R10
-	MOVL R8,104(SP)
-	MOVL R9,112(SP)
-	MOVL AX,120(SP)
-	MOVL R10,128(SP)
-	FMOVD 104(SP), F0
-	FSUBD ·DOFFSET0(SB), F0
-	FMOVD 112(SP), F0
-	FSUBD ·DOFFSET1(SB), F0
-	FMOVD 120(SP), F0
-	FSUBD ·DOFFSET2(SB), F0
-	FMOVD 128(SP), F0
-	FSUBD ·DOFFSET3(SB), F0
-	FXCHD F0, F3
-	FMOVDP F0, 136(SP)
-	FXCHD F0, F1
-	FMOVD F0, 144(SP)
-	FMULD ·SCALE(SB), F0
-	FMOVDP F0, 152(SP)
-	FMOVD F0, 160(SP)
-	FMULD ·SCALE(SB), F0
-	FMOVDP F0, 168(SP)
-	FMOVD F0, 176(SP)
-	FMULD ·SCALE(SB), F0
-	FMOVDP F0, 184(SP)
-	FLDZ
-	FLDZ
-	FLDZ
-	FLDZ
-	CMPQ DX,$16
-	JB ADDATMOST15BYTES
-	INITIALATLEAST16BYTES:
-	MOVL 12(SI),DI
-	MOVL 8(SI),CX
-	MOVL 4(SI),R8
-	MOVL 0(SI),R9
-	MOVL DI,128(SP)
-	MOVL CX,120(SP)
-	MOVL R8,112(SP)
-	MOVL R9,104(SP)
-	ADDQ $16,SI
-	SUBQ $16,DX
-	FXCHD F0, F3
-	FADDD 128(SP), F0
-	FSUBD ·DOFFSET3MINUSTWO128(SB), F0
-	FXCHD F0, F1
-	FADDD 112(SP), F0
-	FSUBD ·DOFFSET1(SB), F0
-	FXCHD F0, F2
-	FADDD 120(SP), F0
-	FSUBD ·DOFFSET2(SB), F0
-	FXCHD F0, F3
-	FADDD 104(SP), F0
-	FSUBD ·DOFFSET0(SB), F0
-	CMPQ DX,$16
-	JB MULTIPLYADDATMOST15BYTES
-	MULTIPLYADDATLEAST16BYTES:
-	MOVL 12(SI),DI
-	MOVL 8(SI),CX
-	MOVL 4(SI),R8
-	MOVL 0(SI),R9
-	MOVL DI,128(SP)
-	MOVL CX,120(SP)
-	MOVL R8,112(SP)
-	MOVL R9,104(SP)
-	ADDQ $16,SI
-	SUBQ $16,DX
-	FMOVD ·ALPHA130(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA130(SB), F0
-	FSUBD F0,F2
-	FMULD ·SCALE(SB), F0
-	FMOVD ·ALPHA32(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA32(SB), F0
-	FSUBD F0,F2
-	FXCHD F0, F2
-	FADDDP F0,F1
-	FMOVD ·ALPHA64(SB), F0
-	FADDD F4,F0
-	FSUBD ·ALPHA64(SB), F0
-	FSUBD F0,F4
-	FMOVD ·ALPHA96(SB), F0
-	FADDD F6,F0
-	FSUBD ·ALPHA96(SB), F0
-	FSUBD F0,F6
-	FXCHD F0, F6
-	FADDDP F0,F1
-	FXCHD F0, F3
-	FADDDP F0,F5
-	FXCHD F0, F3
-	FADDDP F0,F1
-	FMOVD 176(SP), F0
-	FMULD F3,F0
-	FMOVD 160(SP), F0
-	FMULD F4,F0
-	FMOVD 144(SP), F0
-	FMULD F5,F0
-	FMOVD 136(SP), F0
-	FMULDP F0,F6
-	FMOVD 160(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F3
-	FMOVD 144(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULDP F0,F4
-	FXCHD F0, F3
-	FADDDP F0,F5
-	FMOVD 144(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULD F4,F0
-	FADDDP F0,F3
-	FMOVD 168(SP), F0
-	FMULDP F0,F4
-	FXCHD F0, F3
-	FADDDP F0,F4
-	FMOVD 136(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FXCHD F0, F3
-	FMOVD 184(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F3
-	FXCHD F0, F1
-	FMOVD 168(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FMOVD 152(SP), F0
-	FMULDP F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F1
-	CMPQ DX,$16
-	FXCHD F0, F2
-	FMOVD 128(SP), F0
-	FSUBD ·DOFFSET3MINUSTWO128(SB), F0
-	FADDDP F0,F1
-	FXCHD F0, F1
-	FMOVD 120(SP), F0
-	FSUBD ·DOFFSET2(SB), F0
-	FADDDP F0,F1
-	FXCHD F0, F3
-	FMOVD 112(SP), F0
-	FSUBD ·DOFFSET1(SB), F0
-	FADDDP F0,F1
-	FXCHD F0, F2
-	FMOVD 104(SP), F0
-	FSUBD ·DOFFSET0(SB), F0
-	FADDDP F0,F1
-	JAE MULTIPLYADDATLEAST16BYTES
-	MULTIPLYADDATMOST15BYTES:
-	FMOVD ·ALPHA130(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA130(SB), F0
-	FSUBD F0,F2
-	FMULD ·SCALE(SB), F0
-	FMOVD ·ALPHA32(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA32(SB), F0
-	FSUBD F0,F2
-	FMOVD ·ALPHA64(SB), F0
-	FADDD F5,F0
-	FSUBD ·ALPHA64(SB), F0
-	FSUBD F0,F5
-	FMOVD ·ALPHA96(SB), F0
-	FADDD F7,F0
-	FSUBD ·ALPHA96(SB), F0
-	FSUBD F0,F7
-	FXCHD F0, F7
-	FADDDP F0,F1
-	FXCHD F0, F5
-	FADDDP F0,F1
-	FXCHD F0, F3
-	FADDDP F0,F5
-	FADDDP F0,F1
-	FMOVD 176(SP), F0
-	FMULD F1,F0
-	FMOVD 160(SP), F0
-	FMULD F2,F0
-	FMOVD 144(SP), F0
-	FMULD F3,F0
-	FMOVD 136(SP), F0
-	FMULDP F0,F4
-	FMOVD 160(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F3
-	FMOVD 144(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULDP F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F3
-	FMOVD 144(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F4
-	FMOVD 168(SP), F0
-	FMULDP F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F4
-	FMOVD 168(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F3
-	FMOVD 152(SP), F0
-	FMULDP F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F1
-	ADDATMOST15BYTES:
-	CMPQ DX,$0
-	JE NOMOREBYTES
-	MOVL $0,0(SP)
-	MOVL $0, 4 (SP)
-	MOVL $0, 8 (SP)
-	MOVL $0, 12 (SP)
-	LEAQ 0(SP),DI
-	MOVQ DX,CX
-	REP; MOVSB
-	MOVB $1,0(DI)
-	MOVL  12 (SP),DI
-	MOVL  8 (SP),SI
-	MOVL  4 (SP),DX
-	MOVL 0(SP),CX
-	MOVL DI,128(SP)
-	MOVL SI,120(SP)
-	MOVL DX,112(SP)
-	MOVL CX,104(SP)
-	FXCHD F0, F3
-	FADDD 128(SP), F0
-	FSUBD ·DOFFSET3(SB), F0
-	FXCHD F0, F2
-	FADDD 120(SP), F0
-	FSUBD ·DOFFSET2(SB), F0
-	FXCHD F0, F1
-	FADDD 112(SP), F0
-	FSUBD ·DOFFSET1(SB), F0
-	FXCHD F0, F3
-	FADDD 104(SP), F0
-	FSUBD ·DOFFSET0(SB), F0
-	FMOVD ·ALPHA130(SB), F0
-	FADDD F3,F0
-	FSUBD ·ALPHA130(SB), F0
-	FSUBD F0,F3
-	FMULD ·SCALE(SB), F0
-	FMOVD ·ALPHA32(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA32(SB), F0
-	FSUBD F0,F2
-	FMOVD ·ALPHA64(SB), F0
-	FADDD F6,F0
-	FSUBD ·ALPHA64(SB), F0
-	FSUBD F0,F6
-	FMOVD ·ALPHA96(SB), F0
-	FADDD F5,F0
-	FSUBD ·ALPHA96(SB), F0
-	FSUBD F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F3
-	FXCHD F0, F6
-	FADDDP F0,F1
-	FXCHD F0, F3
-	FADDDP F0,F5
-	FXCHD F0, F3
-	FADDDP F0,F1
-	FMOVD 176(SP), F0
-	FMULD F3,F0
-	FMOVD 160(SP), F0
-	FMULD F4,F0
-	FMOVD 144(SP), F0
-	FMULD F5,F0
-	FMOVD 136(SP), F0
-	FMULDP F0,F6
-	FMOVD 160(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F3
-	FMOVD 144(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F5,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULDP F0,F5
-	FXCHD F0, F4
-	FADDDP F0,F5
-	FMOVD 144(SP), F0
-	FMULD F6,F0
-	FADDDP F0,F2
-	FMOVD 136(SP), F0
-	FMULD F6,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULD F6,F0
-	FADDDP F0,F4
-	FMOVD 168(SP), F0
-	FMULDP F0,F6
-	FXCHD F0, F5
-	FADDDP F0,F4
-	FMOVD 136(SP), F0
-	FMULD F2,F0
-	FADDDP F0,F1
-	FMOVD 184(SP), F0
-	FMULD F2,F0
-	FADDDP F0,F5
-	FMOVD 168(SP), F0
-	FMULD F2,F0
-	FADDDP F0,F3
-	FMOVD 152(SP), F0
-	FMULDP F0,F2
-	FXCHD F0, F1
-	FADDDP F0,F3
-	FXCHD F0, F3
-	FXCHD F0, F2
-	NOMOREBYTES:
-	MOVL $0,R10
-	FMOVD ·ALPHA130(SB), F0
-	FADDD F4,F0
-	FSUBD ·ALPHA130(SB), F0
-	FSUBD F0,F4
-	FMULD ·SCALE(SB), F0
-	FMOVD ·ALPHA32(SB), F0
-	FADDD F2,F0
-	FSUBD ·ALPHA32(SB), F0
-	FSUBD F0,F2
-	FMOVD ·ALPHA64(SB), F0
-	FADDD F4,F0
-	FSUBD ·ALPHA64(SB), F0
-	FSUBD F0,F4
-	FMOVD ·ALPHA96(SB), F0
-	FADDD F6,F0
-	FSUBD ·ALPHA96(SB), F0
-	FXCHD F0, F6
-	FSUBD F6,F0
-	FXCHD F0, F4
-	FADDDP F0,F3
-	FXCHD F0, F4
-	FADDDP F0,F1
-	FXCHD F0, F2
-	FADDDP F0,F3
-	FXCHD F0, F4
-	FADDDP F0,F3
-	FXCHD F0, F3
-	FADDD ·HOFFSET0(SB), F0
-	FXCHD F0, F3
-	FADDD ·HOFFSET1(SB), F0
-	FXCHD F0, F1
-	FADDD ·HOFFSET2(SB), F0
-	FXCHD F0, F2
-	FADDD ·HOFFSET3(SB), F0
-	FXCHD F0, F3
-	FMOVDP F0, 104(SP)
-	FMOVDP F0, 112(SP)
-	FMOVDP F0, 120(SP)
-	FMOVDP F0, 128(SP)
-	MOVL 108(SP),DI
-	ANDL $63,DI
-	MOVL 116(SP),SI
-	ANDL $63,SI
-	MOVL 124(SP),DX
-	ANDL $63,DX
-	MOVL 132(SP),CX
-	ANDL $63,CX
-	MOVL 112(SP),R8
-	ADDL DI,R8
-	MOVQ R8,112(SP)
-	MOVL 120(SP),DI
-	ADCL SI,DI
-	MOVQ DI,120(SP)
-	MOVL 128(SP),DI
-	ADCL DX,DI
-	MOVQ DI,128(SP)
-	MOVL R10,DI
-	ADCL CX,DI
-	MOVQ DI,136(SP)
-	MOVQ $5,DI
-	MOVL 104(SP),SI
-	ADDL SI,DI
-	MOVQ DI,104(SP)
-	MOVL R10,DI
-	MOVQ 112(SP),DX
-	ADCL DX,DI
-	MOVQ DI,112(SP)
-	MOVL R10,DI
-	MOVQ 120(SP),CX
-	ADCL CX,DI
-	MOVQ DI,120(SP)
-	MOVL R10,DI
-	MOVQ 128(SP),R8
-	ADCL R8,DI
-	MOVQ DI,128(SP)
-	MOVQ $0XFFFFFFFC,DI
-	MOVQ 136(SP),R9
-	ADCL R9,DI
-	SARL $16,DI
-	MOVQ DI,R9
-	XORL $0XFFFFFFFF,R9
-	ANDQ DI,SI
-	MOVQ 104(SP),AX
-	ANDQ R9,AX
-	ORQ AX,SI
-	ANDQ DI,DX
-	MOVQ 112(SP),AX
-	ANDQ R9,AX
-	ORQ AX,DX
-	ANDQ DI,CX
-	MOVQ 120(SP),AX
-	ANDQ R9,AX
-	ORQ AX,CX
-	ANDQ DI,R8
-	MOVQ 128(SP),DI
-	ANDQ R9,DI
-	ORQ DI,R8
-	MOVQ 88(SP),DI
-	MOVQ 96(SP),R9
-	ADDL 16(R9),SI
-	ADCL 20(R9),DX
-	ADCL 24(R9),CX
-	ADCL 28(R9),R8
-	MOVL SI,0(DI)
-	MOVL DX,4(DI)
-	MOVL CX,8(DI)
-	MOVL R8,12(DI)
-	MOVQ 32(SP),R11
-	MOVQ 40(SP),R12
-	MOVQ 48(SP),R13
-	MOVQ 56(SP),R14
-	MOVQ 64(SP),R15
-	MOVQ 72(SP),BX
-	MOVQ 80(SP),BP
-	MOVQ R11,SP
-	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_arm.s b/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_arm.s
deleted file mode 100644
index c153867..0000000
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_arm.s
+++ /dev/null
@@ -1,379 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 5a from the public
-// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305.
-
-// +build arm,!gccgo,!appengine
-
-DATA poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff
-DATA poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03
-DATA poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff
-DATA poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff
-DATA poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff
-GLOBL poly1305_init_constants_armv6<>(SB), 8, $20
-
-// Warning: the linker may use R11 to synthesize certain instructions. Please
-// take care and verify that no synthetic instructions use it.
-
-TEXT poly1305_init_ext_armv6<>(SB),4,$-4
-  MOVM.DB.W [R4-R11], (R13)
-  MOVM.IA.W (R1), [R2-R5]
-  MOVW $poly1305_init_constants_armv6<>(SB), R7
-  MOVW R2, R8
-  MOVW R2>>26, R9
-  MOVW R3>>20, g
-  MOVW R4>>14, R11
-  MOVW R5>>8, R12
-  ORR R3<<6, R9, R9
-  ORR R4<<12, g, g
-  ORR R5<<18, R11, R11
-  MOVM.IA (R7), [R2-R6]
-  AND R8, R2, R2
-  AND R9, R3, R3
-  AND g, R4, R4
-  AND R11, R5, R5
-  AND R12, R6, R6
-  MOVM.IA.W [R2-R6], (R0)
-  EOR R2, R2, R2
-  EOR R3, R3, R3
-  EOR R4, R4, R4
-  EOR R5, R5, R5
-  EOR R6, R6, R6
-  MOVM.IA.W [R2-R6], (R0)
-  MOVM.IA.W (R1), [R2-R5]
-  MOVM.IA [R2-R6], (R0)
-  MOVM.IA.W (R13), [R4-R11]
-  RET
-
-#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \
-  MOVBU (offset+0)(Rsrc), Rtmp; \
-  MOVBU Rtmp, (offset+0)(Rdst); \
-  MOVBU (offset+1)(Rsrc), Rtmp; \
-  MOVBU Rtmp, (offset+1)(Rdst); \
-  MOVBU (offset+2)(Rsrc), Rtmp; \
-  MOVBU Rtmp, (offset+2)(Rdst); \
-  MOVBU (offset+3)(Rsrc), Rtmp; \
-  MOVBU Rtmp, (offset+3)(Rdst)
-
-TEXT poly1305_blocks_armv6<>(SB),4,$-4
-  MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13)
-  SUB $128, R13
-  MOVW R0, 36(R13)
-  MOVW R1, 40(R13)
-  MOVW R2, 44(R13)
-  MOVW R1, R14
-  MOVW R2, R12
-  MOVW 56(R0), R8
-  WORD $0xe1180008 // TST R8, R8 not working see issue 5921
-  EOR R6, R6, R6
-  MOVW.EQ $(1<<24), R6
-  MOVW R6, 32(R13)
-  ADD $64, R13, g
-  MOVM.IA (R0), [R0-R9]
-  MOVM.IA [R0-R4], (g)
-  CMP $16, R12
-  BLO poly1305_blocks_armv6_done
-poly1305_blocks_armv6_mainloop:
-  WORD $0xe31e0003 // TST R14, #3 not working see issue 5921
-  BEQ poly1305_blocks_armv6_mainloop_aligned
-  ADD $48, R13, g
-  MOVW_UNALIGNED(R14, g, R0, 0)
-  MOVW_UNALIGNED(R14, g, R0, 4)
-  MOVW_UNALIGNED(R14, g, R0, 8)
-  MOVW_UNALIGNED(R14, g, R0, 12)
-  MOVM.IA (g), [R0-R3]
-  ADD $16, R14
-  B poly1305_blocks_armv6_mainloop_loaded
-poly1305_blocks_armv6_mainloop_aligned:
-  MOVM.IA.W (R14), [R0-R3]
-poly1305_blocks_armv6_mainloop_loaded:
-  MOVW R0>>26, g
-  MOVW R1>>20, R11
-  MOVW R2>>14, R12
-  MOVW R14, 40(R13)
-  MOVW R3>>8, R4
-  ORR R1<<6, g, g
-  ORR R2<<12, R11, R11
-  ORR R3<<18, R12, R12
-  BIC $0xfc000000, R0, R0
-  BIC $0xfc000000, g, g
-  MOVW 32(R13), R3
-  BIC $0xfc000000, R11, R11
-  BIC $0xfc000000, R12, R12
-  ADD R0, R5, R5
-  ADD g, R6, R6
-  ORR R3, R4, R4
-  ADD R11, R7, R7
-  ADD $64, R13, R14
-  ADD R12, R8, R8
-  ADD R4, R9, R9
-  MOVM.IA (R14), [R0-R4]
-  MULLU R4, R5, (R11, g)
-  MULLU R3, R5, (R14, R12)
-  MULALU R3, R6, (R11, g)
-  MULALU R2, R6, (R14, R12)
-  MULALU R2, R7, (R11, g)
-  MULALU R1, R7, (R14, R12)
-  ADD R4<<2, R4, R4
-  ADD R3<<2, R3, R3
-  MULALU R1, R8, (R11, g)
-  MULALU R0, R8, (R14, R12)
-  MULALU R0, R9, (R11, g)
-  MULALU R4, R9, (R14, R12)
-  MOVW g, 24(R13)
-  MOVW R11, 28(R13)
-  MOVW R12, 16(R13)
-  MOVW R14, 20(R13)
-  MULLU R2, R5, (R11, g)
-  MULLU R1, R5, (R14, R12)
-  MULALU R1, R6, (R11, g)
-  MULALU R0, R6, (R14, R12)
-  MULALU R0, R7, (R11, g)
-  MULALU R4, R7, (R14, R12)
-  ADD R2<<2, R2, R2
-  ADD R1<<2, R1, R1
-  MULALU R4, R8, (R11, g)
-  MULALU R3, R8, (R14, R12)
-  MULALU R3, R9, (R11, g)
-  MULALU R2, R9, (R14, R12)
-  MOVW g, 8(R13)
-  MOVW R11, 12(R13)
-  MOVW R12, 0(R13)
-  MOVW R14, w+4(SP)
-  MULLU R0, R5, (R11, g)
-  MULALU R4, R6, (R11, g)
-  MULALU R3, R7, (R11, g)
-  MULALU R2, R8, (R11, g)
-  MULALU R1, R9, (R11, g)
-  MOVM.IA (R13), [R0-R7]
-  MOVW g>>26, R12
-  MOVW R4>>26, R14
-  ORR R11<<6, R12, R12
-  ORR R5<<6, R14, R14
-  BIC $0xfc000000, g, g
-  BIC $0xfc000000, R4, R4
-  ADD.S R12, R0, R0
-  ADC $0, R1, R1
-  ADD.S R14, R6, R6
-  ADC $0, R7, R7
-  MOVW R0>>26, R12
-  MOVW R6>>26, R14
-  ORR R1<<6, R12, R12
-  ORR R7<<6, R14, R14
-  BIC $0xfc000000, R0, R0
-  BIC $0xfc000000, R6, R6
-  ADD R14<<2, R14, R14
-  ADD.S R12, R2, R2
-  ADC $0, R3, R3
-  ADD R14, g, g
-  MOVW R2>>26, R12
-  MOVW g>>26, R14
-  ORR R3<<6, R12, R12
-  BIC $0xfc000000, g, R5
-  BIC $0xfc000000, R2, R7
-  ADD R12, R4, R4
-  ADD R14, R0, R0
-  MOVW R4>>26, R12
-  BIC $0xfc000000, R4, R8
-  ADD R12, R6, R9
-  MOVW w+44(SP), R12
-  MOVW w+40(SP), R14
-  MOVW R0, R6
-  CMP $32, R12
-  SUB $16, R12, R12
-  MOVW R12, 44(R13)
-  BHS poly1305_blocks_armv6_mainloop
-poly1305_blocks_armv6_done:
-  MOVW 36(R13), R12
-  MOVW R5, 20(R12)
-  MOVW R6, 24(R12)
-  MOVW R7, 28(R12)
-  MOVW R8, 32(R12)
-  MOVW R9, 36(R12)
-  ADD $128, R13, R13
-  MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14]
-  RET
-
-#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \
-  MOVBU.P 1(Rsrc), Rtmp; \
-  MOVBU.P Rtmp, 1(Rdst); \
-  MOVBU.P 1(Rsrc), Rtmp; \
-  MOVBU.P Rtmp, 1(Rdst)
-
-#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \
-  MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \
-  MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp)
-
-TEXT poly1305_finish_ext_armv6<>(SB),4,$-4
-  MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13)
-  SUB $16, R13, R13
-  MOVW R0, R5
-  MOVW R1, R6
-  MOVW R2, R7
-  MOVW R3, R8
-  AND.S R2, R2, R2
-  BEQ poly1305_finish_ext_armv6_noremaining
-  EOR R0, R0
-  MOVW R13, R9
-  MOVW R0, 0(R13)
-  MOVW R0, 4(R13)
-  MOVW R0, 8(R13)
-  MOVW R0, 12(R13)
-  WORD $0xe3110003 // TST R1, #3 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_aligned
-  WORD $0xe3120008 // TST R2, #8 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip8
-  MOVWP_UNALIGNED(R1, R9, g)
-  MOVWP_UNALIGNED(R1, R9, g)
-poly1305_finish_ext_armv6_skip8:
-  WORD $0xe3120004 // TST $4, R2 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip4
-  MOVWP_UNALIGNED(R1, R9, g)
-poly1305_finish_ext_armv6_skip4:
-  WORD $0xe3120002 // TST $2, R2 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip2
-  MOVHUP_UNALIGNED(R1, R9, g)
-  B poly1305_finish_ext_armv6_skip2
-poly1305_finish_ext_armv6_aligned:
-  WORD $0xe3120008 // TST R2, #8 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip8_aligned
-  MOVM.IA.W (R1), [g-R11]
-  MOVM.IA.W [g-R11], (R9)
-poly1305_finish_ext_armv6_skip8_aligned:
-  WORD $0xe3120004 // TST $4, R2 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip4_aligned
-  MOVW.P 4(R1), g
-  MOVW.P g, 4(R9)
-poly1305_finish_ext_armv6_skip4_aligned:
-  WORD $0xe3120002 // TST $2, R2 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip2
-  MOVHU.P 2(R1), g
-  MOVH.P g, 2(R9)
-poly1305_finish_ext_armv6_skip2:
-  WORD $0xe3120001 // TST $1, R2 not working see issue 5921
-  BEQ poly1305_finish_ext_armv6_skip1
-  MOVBU.P 1(R1), g
-  MOVBU.P g, 1(R9)
-poly1305_finish_ext_armv6_skip1:
-  MOVW $1, R11
-  MOVBU R11, 0(R9)
-  MOVW R11, 56(R5)
-  MOVW R5, R0
-  MOVW R13, R1
-  MOVW $16, R2
-  BL poly1305_blocks_armv6<>(SB)
-poly1305_finish_ext_armv6_noremaining:
-  MOVW 20(R5), R0
-  MOVW 24(R5), R1
-  MOVW 28(R5), R2
-  MOVW 32(R5), R3
-  MOVW 36(R5), R4
-  MOVW R4>>26, R12
-  BIC $0xfc000000, R4, R4
-  ADD R12<<2, R12, R12
-  ADD R12, R0, R0
-  MOVW R0>>26, R12
-  BIC $0xfc000000, R0, R0
-  ADD R12, R1, R1
-  MOVW R1>>26, R12
-  BIC $0xfc000000, R1, R1
-  ADD R12, R2, R2
-  MOVW R2>>26, R12
-  BIC $0xfc000000, R2, R2
-  ADD R12, R3, R3
-  MOVW R3>>26, R12
-  BIC $0xfc000000, R3, R3
-  ADD R12, R4, R4
-  ADD $5, R0, R6
-  MOVW R6>>26, R12
-  BIC $0xfc000000, R6, R6
-  ADD R12, R1, R7
-  MOVW R7>>26, R12
-  BIC $0xfc000000, R7, R7
-  ADD R12, R2, g
-  MOVW g>>26, R12
-  BIC $0xfc000000, g, g
-  ADD R12, R3, R11
-  MOVW $-(1<<26), R12
-  ADD R11>>26, R12, R12
-  BIC $0xfc000000, R11, R11
-  ADD R12, R4, R14
-  MOVW R14>>31, R12
-  SUB $1, R12
-  AND R12, R6, R6
-  AND R12, R7, R7
-  AND R12, g, g
-  AND R12, R11, R11
-  AND R12, R14, R14
-  MVN R12, R12
-  AND R12, R0, R0
-  AND R12, R1, R1
-  AND R12, R2, R2
-  AND R12, R3, R3
-  AND R12, R4, R4
-  ORR R6, R0, R0
-  ORR R7, R1, R1
-  ORR g, R2, R2
-  ORR R11, R3, R3
-  ORR R14, R4, R4
-  ORR R1<<26, R0, R0
-  MOVW R1>>6, R1
-  ORR R2<<20, R1, R1
-  MOVW R2>>12, R2
-  ORR R3<<14, R2, R2
-  MOVW R3>>18, R3
-  ORR R4<<8, R3, R3
-  MOVW 40(R5), R6
-  MOVW 44(R5), R7
-  MOVW 48(R5), g
-  MOVW 52(R5), R11
-  ADD.S R6, R0, R0
-  ADC.S R7, R1, R1
-  ADC.S g, R2, R2
-  ADC.S R11, R3, R3
-  MOVM.IA [R0-R3], (R8)
-  MOVW R5, R12
-  EOR R0, R0, R0
-  EOR R1, R1, R1
-  EOR R2, R2, R2
-  EOR R3, R3, R3
-  EOR R4, R4, R4
-  EOR R5, R5, R5
-  EOR R6, R6, R6
-  EOR R7, R7, R7
-  MOVM.IA.W [R0-R7], (R12)
-  MOVM.IA [R0-R7], (R12)
-  ADD $16, R13, R13
-  MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14]
-  RET
-
-// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key)
-TEXT ·poly1305_auth_armv6(SB),0,$280-16
-  MOVW  out+0(FP), R4
-  MOVW  m+4(FP), R5
-  MOVW  mlen+8(FP), R6
-  MOVW  key+12(FP), R7
-
-  MOVW R13, R8
-  BIC $63, R13
-  SUB $64, R13, R13
-  MOVW  R13, R0
-  MOVW  R7, R1
-  BL poly1305_init_ext_armv6<>(SB)
-  BIC.S $15, R6, R2
-  BEQ poly1305_auth_armv6_noblocks
-  MOVW R13, R0
-  MOVW R5, R1
-  ADD R2, R5, R5
-  SUB R2, R6, R6
-  BL poly1305_blocks_armv6<>(SB)
-poly1305_auth_armv6_noblocks:
-  MOVW R13, R0
-  MOVW R5, R1
-  MOVW R6, R2
-  MOVW R4, R3
-  BL poly1305_finish_ext_armv6<>(SB)
-  MOVW R8, R13
-  RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_test.go b/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_test.go
index b3e9231..017027f 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_test.go
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/poly1305_test.go
@@ -6,10 +6,14 @@
 
 import (
 	"bytes"
+	"encoding/hex"
+	"flag"
 	"testing"
 	"unsafe"
 )
 
+var stressFlag = flag.Bool("stress", false, "run slow stress tests")
+
 var testData = []struct {
 	in, k, correct []byte
 }{
@@ -33,6 +37,42 @@
 		make([]byte, 32),
 		make([]byte, 16),
 	},
+	{
+		// This test triggers an edge-case. See https://go-review.googlesource.com/#/c/30101/.
+		[]byte{0x81, 0xd8, 0xb2, 0xe4, 0x6a, 0x25, 0x21, 0x3b, 0x58, 0xfe, 0xe4, 0x21, 0x3a, 0x2a, 0x28, 0xe9, 0x21, 0xc1, 0x2a, 0x96, 0x32, 0x51, 0x6d, 0x3b, 0x73, 0x27, 0x27, 0x27, 0xbe, 0xcf, 0x21, 0x29},
+		[]byte{0x3b, 0x3a, 0x29, 0xe9, 0x3b, 0x21, 0x3a, 0x5c, 0x5c, 0x3b, 0x3b, 0x05, 0x3a, 0x3a, 0x8c, 0x0d},
+		[]byte{0x6d, 0xc1, 0x8b, 0x8c, 0x34, 0x4c, 0xd7, 0x99, 0x27, 0x11, 0x8b, 0xbe, 0x84, 0xb7, 0xf3, 0x14},
+	},
+	{
+		// This test generates a result of (2^130-1) % (2^130-5).
+		[]byte{
+			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{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},
+		[]byte{4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	},
+	{
+		// This test generates a result of (2^130-6) % (2^130-5).
+		[]byte{
+			0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{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},
+		[]byte{0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+	},
+	{
+		// This test generates a result of (2^130-5) % (2^130-5).
+		[]byte{
+			0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{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},
+		[]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	},
 }
 
 func testSum(t *testing.T, unaligned bool) {
@@ -52,6 +92,39 @@
 	}
 }
 
+func TestBurnin(t *testing.T) {
+	// This test can be used to sanity-check significant changes. It can
+	// take about many minutes to run, even on fast machines. It's disabled
+	// by default.
+	if !*stressFlag {
+		t.Skip("skipping without -stress")
+	}
+
+	var key [32]byte
+	var input [25]byte
+	var output [16]byte
+
+	for i := range key {
+		key[i] = 1
+	}
+	for i := range input {
+		input[i] = 2
+	}
+
+	for i := uint64(0); i < 1e10; i++ {
+		Sum(&output, input[:], &key)
+		copy(key[0:], output[:])
+		copy(key[16:], output[:])
+		copy(input[:], output[:])
+		copy(input[16:], output[:])
+	}
+
+	const expected = "5e3b866aea0b636d240c83c428f84bfa"
+	if got := hex.EncodeToString(output[:]); got != expected {
+		t.Errorf("expected %s, got %s", expected, got)
+	}
+}
+
 func TestSum(t *testing.T)          { testSum(t, false) }
 func TestSumUnaligned(t *testing.T) { testSum(t, true) }
 
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.go b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.go
index 6775c70..4dd72fe 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.go
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.go
@@ -6,10 +6,8 @@
 
 package poly1305
 
-// This function is implemented in poly1305_amd64.s
-
+// This function is implemented in sum_amd64.s
 //go:noescape
-
 func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
 
 // Sum generates an authenticator for m using a one-time key and puts the
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.s b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.s
new file mode 100644
index 0000000..2edae63
--- /dev/null
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_amd64.s
@@ -0,0 +1,125 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build amd64,!gccgo,!appengine
+
+#include "textflag.h"
+
+#define POLY1305_ADD(msg, h0, h1, h2) \
+	ADDQ 0(msg), h0;  \
+	ADCQ 8(msg), h1;  \
+	ADCQ $1, h2;      \
+	LEAQ 16(msg), msg
+
+#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \
+	MOVQ  r0, AX;                  \
+	MULQ  h0;                      \
+	MOVQ  AX, t0;                  \
+	MOVQ  DX, t1;                  \
+	MOVQ  r0, AX;                  \
+	MULQ  h1;                      \
+	ADDQ  AX, t1;                  \
+	ADCQ  $0, DX;                  \
+	MOVQ  r0, t2;                  \
+	IMULQ h2, t2;                  \
+	ADDQ  DX, t2;                  \
+	                               \
+	MOVQ  r1, AX;                  \
+	MULQ  h0;                      \
+	ADDQ  AX, t1;                  \
+	ADCQ  $0, DX;                  \
+	MOVQ  DX, h0;                  \
+	MOVQ  r1, t3;                  \
+	IMULQ h2, t3;                  \
+	MOVQ  r1, AX;                  \
+	MULQ  h1;                      \
+	ADDQ  AX, t2;                  \
+	ADCQ  DX, t3;                  \
+	ADDQ  h0, t2;                  \
+	ADCQ  $0, t3;                  \
+	                               \
+	MOVQ  t0, h0;                  \
+	MOVQ  t1, h1;                  \
+	MOVQ  t2, h2;                  \
+	ANDQ  $3, h2;                  \
+	MOVQ  t2, t0;                  \
+	ANDQ  $0xFFFFFFFFFFFFFFFC, t0; \
+	ADDQ  t0, h0;                  \
+	ADCQ  t3, h1;                  \
+	ADCQ  $0, h2;                  \
+	SHRQ  $2, t3, t2;              \
+	SHRQ  $2, t3;                  \
+	ADDQ  t2, h0;                  \
+	ADCQ  t3, h1;                  \
+	ADCQ  $0, h2
+
+DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
+DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
+GLOBL ·poly1305Mask<>(SB), RODATA, $16
+
+// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
+TEXT ·poly1305(SB), $0-32
+	MOVQ out+0(FP), DI
+	MOVQ m+8(FP), SI
+	MOVQ mlen+16(FP), R15
+	MOVQ key+24(FP), AX
+
+	MOVQ 0(AX), R11
+	MOVQ 8(AX), R12
+	ANDQ ·poly1305Mask<>(SB), R11   // r0
+	ANDQ ·poly1305Mask<>+8(SB), R12 // r1
+	XORQ R8, R8                    // h0
+	XORQ R9, R9                    // h1
+	XORQ R10, R10                  // h2
+
+	CMPQ R15, $16
+	JB   bytes_between_0_and_15
+
+loop:
+	POLY1305_ADD(SI, R8, R9, R10)
+
+multiply:
+	POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14)
+	SUBQ $16, R15
+	CMPQ R15, $16
+	JAE  loop
+
+bytes_between_0_and_15:
+	TESTQ R15, R15
+	JZ    done
+	MOVQ  $1, BX
+	XORQ  CX, CX
+	XORQ  R13, R13
+	ADDQ  R15, SI
+
+flush_buffer:
+	SHLQ $8, BX, CX
+	SHLQ $8, BX
+	MOVB -1(SI), R13
+	XORQ R13, BX
+	DECQ SI
+	DECQ R15
+	JNZ  flush_buffer
+
+	ADDQ BX, R8
+	ADCQ CX, R9
+	ADCQ $0, R10
+	MOVQ $16, R15
+	JMP  multiply
+
+done:
+	MOVQ    R8, AX
+	MOVQ    R9, BX
+	SUBQ    $0xFFFFFFFFFFFFFFFB, AX
+	SBBQ    $0xFFFFFFFFFFFFFFFF, BX
+	SBBQ    $3, R10
+	CMOVQCS R8, AX
+	CMOVQCS R9, BX
+	MOVQ    key+24(FP), R8
+	ADDQ    16(R8), AX
+	ADCQ    24(R8), BX
+
+	MOVQ AX, 0(DI)
+	MOVQ BX, 8(DI)
+	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.go b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.go
index 50b979c..5dc321c 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.go
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.go
@@ -2,14 +2,12 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build arm,!gccgo,!appengine
+// +build arm,!gccgo,!appengine,!nacl
 
 package poly1305
 
-// This function is implemented in poly1305_arm.s
-
+// This function is implemented in sum_arm.s
 //go:noescape
-
 func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]byte)
 
 // Sum generates an authenticator for m using a one-time key and puts the
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.s b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.s
new file mode 100644
index 0000000..f70b4ac
--- /dev/null
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_arm.s
@@ -0,0 +1,427 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build arm,!gccgo,!appengine,!nacl
+
+#include "textflag.h"
+
+// This code was translated into a form compatible with 5a from the public
+// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305.
+
+DATA ·poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff
+DATA ·poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03
+DATA ·poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff
+DATA ·poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff
+DATA ·poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff
+GLOBL ·poly1305_init_constants_armv6<>(SB), 8, $20
+
+// Warning: the linker may use R11 to synthesize certain instructions. Please
+// take care and verify that no synthetic instructions use it.
+
+TEXT poly1305_init_ext_armv6<>(SB), NOSPLIT, $0
+	// Needs 16 bytes of stack and 64 bytes of space pointed to by R0.  (It
+	// might look like it's only 60 bytes of space but the final four bytes
+	// will be written by another function.) We need to skip over four
+	// bytes of stack because that's saving the value of 'g'.
+	ADD       $4, R13, R8
+	MOVM.IB   [R4-R7], (R8)
+	MOVM.IA.W (R1), [R2-R5]
+	MOVW      $·poly1305_init_constants_armv6<>(SB), R7
+	MOVW      R2, R8
+	MOVW      R2>>26, R9
+	MOVW      R3>>20, g
+	MOVW      R4>>14, R11
+	MOVW      R5>>8, R12
+	ORR       R3<<6, R9, R9
+	ORR       R4<<12, g, g
+	ORR       R5<<18, R11, R11
+	MOVM.IA   (R7), [R2-R6]
+	AND       R8, R2, R2
+	AND       R9, R3, R3
+	AND       g, R4, R4
+	AND       R11, R5, R5
+	AND       R12, R6, R6
+	MOVM.IA.W [R2-R6], (R0)
+	EOR       R2, R2, R2
+	EOR       R3, R3, R3
+	EOR       R4, R4, R4
+	EOR       R5, R5, R5
+	EOR       R6, R6, R6
+	MOVM.IA.W [R2-R6], (R0)
+	MOVM.IA.W (R1), [R2-R5]
+	MOVM.IA   [R2-R6], (R0)
+	ADD       $20, R13, R0
+	MOVM.DA   (R0), [R4-R7]
+	RET
+
+#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \
+	MOVBU (offset+0)(Rsrc), Rtmp; \
+	MOVBU Rtmp, (offset+0)(Rdst); \
+	MOVBU (offset+1)(Rsrc), Rtmp; \
+	MOVBU Rtmp, (offset+1)(Rdst); \
+	MOVBU (offset+2)(Rsrc), Rtmp; \
+	MOVBU Rtmp, (offset+2)(Rdst); \
+	MOVBU (offset+3)(Rsrc), Rtmp; \
+	MOVBU Rtmp, (offset+3)(Rdst)
+
+TEXT poly1305_blocks_armv6<>(SB), NOSPLIT, $0
+	// Needs 24 bytes of stack for saved registers and then 88 bytes of
+	// scratch space after that. We assume that 24 bytes at (R13) have
+	// already been used: four bytes for the link register saved in the
+	// prelude of poly1305_auth_armv6, four bytes for saving the value of g
+	// in that function and 16 bytes of scratch space used around
+	// poly1305_finish_ext_armv6_skip1.
+	ADD     $24, R13, R12
+	MOVM.IB [R4-R8, R14], (R12)
+	MOVW    R0, 88(R13)
+	MOVW    R1, 92(R13)
+	MOVW    R2, 96(R13)
+	MOVW    R1, R14
+	MOVW    R2, R12
+	MOVW    56(R0), R8
+	WORD    $0xe1180008                // TST R8, R8 not working see issue 5921
+	EOR     R6, R6, R6
+	MOVW.EQ $(1<<24), R6
+	MOVW    R6, 84(R13)
+	ADD     $116, R13, g
+	MOVM.IA (R0), [R0-R9]
+	MOVM.IA [R0-R4], (g)
+	CMP     $16, R12
+	BLO     poly1305_blocks_armv6_done
+
+poly1305_blocks_armv6_mainloop:
+	WORD    $0xe31e0003                            // TST R14, #3 not working see issue 5921
+	BEQ     poly1305_blocks_armv6_mainloop_aligned
+	ADD     $100, R13, g
+	MOVW_UNALIGNED(R14, g, R0, 0)
+	MOVW_UNALIGNED(R14, g, R0, 4)
+	MOVW_UNALIGNED(R14, g, R0, 8)
+	MOVW_UNALIGNED(R14, g, R0, 12)
+	MOVM.IA (g), [R0-R3]
+	ADD     $16, R14
+	B       poly1305_blocks_armv6_mainloop_loaded
+
+poly1305_blocks_armv6_mainloop_aligned:
+	MOVM.IA.W (R14), [R0-R3]
+
+poly1305_blocks_armv6_mainloop_loaded:
+	MOVW    R0>>26, g
+	MOVW    R1>>20, R11
+	MOVW    R2>>14, R12
+	MOVW    R14, 92(R13)
+	MOVW    R3>>8, R4
+	ORR     R1<<6, g, g
+	ORR     R2<<12, R11, R11
+	ORR     R3<<18, R12, R12
+	BIC     $0xfc000000, R0, R0
+	BIC     $0xfc000000, g, g
+	MOVW    84(R13), R3
+	BIC     $0xfc000000, R11, R11
+	BIC     $0xfc000000, R12, R12
+	ADD     R0, R5, R5
+	ADD     g, R6, R6
+	ORR     R3, R4, R4
+	ADD     R11, R7, R7
+	ADD     $116, R13, R14
+	ADD     R12, R8, R8
+	ADD     R4, R9, R9
+	MOVM.IA (R14), [R0-R4]
+	MULLU   R4, R5, (R11, g)
+	MULLU   R3, R5, (R14, R12)
+	MULALU  R3, R6, (R11, g)
+	MULALU  R2, R6, (R14, R12)
+	MULALU  R2, R7, (R11, g)
+	MULALU  R1, R7, (R14, R12)
+	ADD     R4<<2, R4, R4
+	ADD     R3<<2, R3, R3
+	MULALU  R1, R8, (R11, g)
+	MULALU  R0, R8, (R14, R12)
+	MULALU  R0, R9, (R11, g)
+	MULALU  R4, R9, (R14, R12)
+	MOVW    g, 76(R13)
+	MOVW    R11, 80(R13)
+	MOVW    R12, 68(R13)
+	MOVW    R14, 72(R13)
+	MULLU   R2, R5, (R11, g)
+	MULLU   R1, R5, (R14, R12)
+	MULALU  R1, R6, (R11, g)
+	MULALU  R0, R6, (R14, R12)
+	MULALU  R0, R7, (R11, g)
+	MULALU  R4, R7, (R14, R12)
+	ADD     R2<<2, R2, R2
+	ADD     R1<<2, R1, R1
+	MULALU  R4, R8, (R11, g)
+	MULALU  R3, R8, (R14, R12)
+	MULALU  R3, R9, (R11, g)
+	MULALU  R2, R9, (R14, R12)
+	MOVW    g, 60(R13)
+	MOVW    R11, 64(R13)
+	MOVW    R12, 52(R13)
+	MOVW    R14, 56(R13)
+	MULLU   R0, R5, (R11, g)
+	MULALU  R4, R6, (R11, g)
+	MULALU  R3, R7, (R11, g)
+	MULALU  R2, R8, (R11, g)
+	MULALU  R1, R9, (R11, g)
+	ADD     $52, R13, R0
+	MOVM.IA (R0), [R0-R7]
+	MOVW    g>>26, R12
+	MOVW    R4>>26, R14
+	ORR     R11<<6, R12, R12
+	ORR     R5<<6, R14, R14
+	BIC     $0xfc000000, g, g
+	BIC     $0xfc000000, R4, R4
+	ADD.S   R12, R0, R0
+	ADC     $0, R1, R1
+	ADD.S   R14, R6, R6
+	ADC     $0, R7, R7
+	MOVW    R0>>26, R12
+	MOVW    R6>>26, R14
+	ORR     R1<<6, R12, R12
+	ORR     R7<<6, R14, R14
+	BIC     $0xfc000000, R0, R0
+	BIC     $0xfc000000, R6, R6
+	ADD     R14<<2, R14, R14
+	ADD.S   R12, R2, R2
+	ADC     $0, R3, R3
+	ADD     R14, g, g
+	MOVW    R2>>26, R12
+	MOVW    g>>26, R14
+	ORR     R3<<6, R12, R12
+	BIC     $0xfc000000, g, R5
+	BIC     $0xfc000000, R2, R7
+	ADD     R12, R4, R4
+	ADD     R14, R0, R0
+	MOVW    R4>>26, R12
+	BIC     $0xfc000000, R4, R8
+	ADD     R12, R6, R9
+	MOVW    96(R13), R12
+	MOVW    92(R13), R14
+	MOVW    R0, R6
+	CMP     $32, R12
+	SUB     $16, R12, R12
+	MOVW    R12, 96(R13)
+	BHS     poly1305_blocks_armv6_mainloop
+
+poly1305_blocks_armv6_done:
+	MOVW    88(R13), R12
+	MOVW    R5, 20(R12)
+	MOVW    R6, 24(R12)
+	MOVW    R7, 28(R12)
+	MOVW    R8, 32(R12)
+	MOVW    R9, 36(R12)
+	ADD     $48, R13, R0
+	MOVM.DA (R0), [R4-R8, R14]
+	RET
+
+#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \
+	MOVBU.P 1(Rsrc), Rtmp; \
+	MOVBU.P Rtmp, 1(Rdst); \
+	MOVBU.P 1(Rsrc), Rtmp; \
+	MOVBU.P Rtmp, 1(Rdst)
+
+#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \
+	MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \
+	MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp)
+
+// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key)
+TEXT ·poly1305_auth_armv6(SB), $196-16
+	// The value 196, just above, is the sum of 64 (the size of the context
+	// structure) and 132 (the amount of stack needed).
+	//
+	// At this point, the stack pointer (R13) has been moved down. It
+	// points to the saved link register and there's 196 bytes of free
+	// space above it.
+	//
+	// The stack for this function looks like:
+	//
+	// +---------------------
+	// |
+	// | 64 bytes of context structure
+	// |
+	// +---------------------
+	// |
+	// | 112 bytes for poly1305_blocks_armv6
+	// |
+	// +---------------------
+	// | 16 bytes of final block, constructed at
+	// | poly1305_finish_ext_armv6_skip8
+	// +---------------------
+	// | four bytes of saved 'g'
+	// +---------------------
+	// | lr, saved by prelude    <- R13 points here
+	// +---------------------
+	MOVW g, 4(R13)
+
+	MOVW out+0(FP), R4
+	MOVW m+4(FP), R5
+	MOVW mlen+8(FP), R6
+	MOVW key+12(FP), R7
+
+	ADD  $136, R13, R0 // 136 = 4 + 4 + 16 + 112
+	MOVW R7, R1
+
+	// poly1305_init_ext_armv6 will write to the stack from R13+4, but
+	// that's ok because none of the other values have been written yet.
+	BL    poly1305_init_ext_armv6<>(SB)
+	BIC.S $15, R6, R2
+	BEQ   poly1305_auth_armv6_noblocks
+	ADD   $136, R13, R0
+	MOVW  R5, R1
+	ADD   R2, R5, R5
+	SUB   R2, R6, R6
+	BL    poly1305_blocks_armv6<>(SB)
+
+poly1305_auth_armv6_noblocks:
+	ADD  $136, R13, R0
+	MOVW R5, R1
+	MOVW R6, R2
+	MOVW R4, R3
+
+	MOVW  R0, R5
+	MOVW  R1, R6
+	MOVW  R2, R7
+	MOVW  R3, R8
+	AND.S R2, R2, R2
+	BEQ   poly1305_finish_ext_armv6_noremaining
+	EOR   R0, R0
+	ADD   $8, R13, R9                           // 8 = offset to 16 byte scratch space
+	MOVW  R0, (R9)
+	MOVW  R0, 4(R9)
+	MOVW  R0, 8(R9)
+	MOVW  R0, 12(R9)
+	WORD  $0xe3110003                           // TST R1, #3 not working see issue 5921
+	BEQ   poly1305_finish_ext_armv6_aligned
+	WORD  $0xe3120008                           // TST R2, #8 not working see issue 5921
+	BEQ   poly1305_finish_ext_armv6_skip8
+	MOVWP_UNALIGNED(R1, R9, g)
+	MOVWP_UNALIGNED(R1, R9, g)
+
+poly1305_finish_ext_armv6_skip8:
+	WORD $0xe3120004                     // TST $4, R2 not working see issue 5921
+	BEQ  poly1305_finish_ext_armv6_skip4
+	MOVWP_UNALIGNED(R1, R9, g)
+
+poly1305_finish_ext_armv6_skip4:
+	WORD $0xe3120002                     // TST $2, R2 not working see issue 5921
+	BEQ  poly1305_finish_ext_armv6_skip2
+	MOVHUP_UNALIGNED(R1, R9, g)
+	B    poly1305_finish_ext_armv6_skip2
+
+poly1305_finish_ext_armv6_aligned:
+	WORD      $0xe3120008                             // TST R2, #8 not working see issue 5921
+	BEQ       poly1305_finish_ext_armv6_skip8_aligned
+	MOVM.IA.W (R1), [g-R11]
+	MOVM.IA.W [g-R11], (R9)
+
+poly1305_finish_ext_armv6_skip8_aligned:
+	WORD   $0xe3120004                             // TST $4, R2 not working see issue 5921
+	BEQ    poly1305_finish_ext_armv6_skip4_aligned
+	MOVW.P 4(R1), g
+	MOVW.P g, 4(R9)
+
+poly1305_finish_ext_armv6_skip4_aligned:
+	WORD    $0xe3120002                     // TST $2, R2 not working see issue 5921
+	BEQ     poly1305_finish_ext_armv6_skip2
+	MOVHU.P 2(R1), g
+	MOVH.P  g, 2(R9)
+
+poly1305_finish_ext_armv6_skip2:
+	WORD    $0xe3120001                     // TST $1, R2 not working see issue 5921
+	BEQ     poly1305_finish_ext_armv6_skip1
+	MOVBU.P 1(R1), g
+	MOVBU.P g, 1(R9)
+
+poly1305_finish_ext_armv6_skip1:
+	MOVW  $1, R11
+	MOVBU R11, 0(R9)
+	MOVW  R11, 56(R5)
+	MOVW  R5, R0
+	ADD   $8, R13, R1
+	MOVW  $16, R2
+	BL    poly1305_blocks_armv6<>(SB)
+
+poly1305_finish_ext_armv6_noremaining:
+	MOVW      20(R5), R0
+	MOVW      24(R5), R1
+	MOVW      28(R5), R2
+	MOVW      32(R5), R3
+	MOVW      36(R5), R4
+	MOVW      R4>>26, R12
+	BIC       $0xfc000000, R4, R4
+	ADD       R12<<2, R12, R12
+	ADD       R12, R0, R0
+	MOVW      R0>>26, R12
+	BIC       $0xfc000000, R0, R0
+	ADD       R12, R1, R1
+	MOVW      R1>>26, R12
+	BIC       $0xfc000000, R1, R1
+	ADD       R12, R2, R2
+	MOVW      R2>>26, R12
+	BIC       $0xfc000000, R2, R2
+	ADD       R12, R3, R3
+	MOVW      R3>>26, R12
+	BIC       $0xfc000000, R3, R3
+	ADD       R12, R4, R4
+	ADD       $5, R0, R6
+	MOVW      R6>>26, R12
+	BIC       $0xfc000000, R6, R6
+	ADD       R12, R1, R7
+	MOVW      R7>>26, R12
+	BIC       $0xfc000000, R7, R7
+	ADD       R12, R2, g
+	MOVW      g>>26, R12
+	BIC       $0xfc000000, g, g
+	ADD       R12, R3, R11
+	MOVW      $-(1<<26), R12
+	ADD       R11>>26, R12, R12
+	BIC       $0xfc000000, R11, R11
+	ADD       R12, R4, R9
+	MOVW      R9>>31, R12
+	SUB       $1, R12
+	AND       R12, R6, R6
+	AND       R12, R7, R7
+	AND       R12, g, g
+	AND       R12, R11, R11
+	AND       R12, R9, R9
+	MVN       R12, R12
+	AND       R12, R0, R0
+	AND       R12, R1, R1
+	AND       R12, R2, R2
+	AND       R12, R3, R3
+	AND       R12, R4, R4
+	ORR       R6, R0, R0
+	ORR       R7, R1, R1
+	ORR       g, R2, R2
+	ORR       R11, R3, R3
+	ORR       R9, R4, R4
+	ORR       R1<<26, R0, R0
+	MOVW      R1>>6, R1
+	ORR       R2<<20, R1, R1
+	MOVW      R2>>12, R2
+	ORR       R3<<14, R2, R2
+	MOVW      R3>>18, R3
+	ORR       R4<<8, R3, R3
+	MOVW      40(R5), R6
+	MOVW      44(R5), R7
+	MOVW      48(R5), g
+	MOVW      52(R5), R11
+	ADD.S     R6, R0, R0
+	ADC.S     R7, R1, R1
+	ADC.S     g, R2, R2
+	ADC.S     R11, R3, R3
+	MOVM.IA   [R0-R3], (R8)
+	MOVW      R5, R12
+	EOR       R0, R0, R0
+	EOR       R1, R1, R1
+	EOR       R2, R2, R2
+	EOR       R3, R3, R3
+	EOR       R4, R4, R4
+	EOR       R5, R5, R5
+	EOR       R6, R6, R6
+	EOR       R7, R7, R7
+	MOVM.IA.W [R0-R7], (R12)
+	MOVM.IA   [R0-R7], (R12)
+	MOVW      4(R13), g
+	RET
diff --git a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_ref.go b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_ref.go
index 0b24fc7..b2805a5 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_ref.go
+++ b/src/third_party/boringssl/src/ssl/test/runner/poly1305/sum_ref.go
@@ -2,1530 +2,140 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build !amd64,!arm gccgo appengine
+// +build !amd64,!arm gccgo appengine nacl
 
 package poly1305
 
-// Based on original, public domain implementation from NaCl by D. J.
-// Bernstein.
+import "encoding/binary"
 
-import "math"
-
-const (
-	alpham80 = 0.00000000558793544769287109375
-	alpham48 = 24.0
-	alpham16 = 103079215104.0
-	alpha0   = 6755399441055744.0
-	alpha18  = 1770887431076116955136.0
-	alpha32  = 29014219670751100192948224.0
-	alpha50  = 7605903601369376408980219232256.0
-	alpha64  = 124615124604835863084731911901282304.0
-	alpha82  = 32667107224410092492483962313449748299776.0
-	alpha96  = 535217884764734955396857238543560676143529984.0
-	alpha112 = 35076039295941670036888435985190792471742381031424.0
-	alpha130 = 9194973245195333150150082162901855101712434733101613056.0
-	scale    = 0.0000000000000000000000000000000000000036734198463196484624023016788195177431833298649127735047148490821200539357960224151611328125
-	offset0  = 6755408030990331.0
-	offset1  = 29014256564239239022116864.0
-	offset2  = 124615283061160854719918951570079744.0
-	offset3  = 535219245894202480694386063513315216128475136.0
-)
-
-// Sum generates an authenticator for m using a one-time key and puts the
+// Sum generates an authenticator for msg using a one-time key and puts the
 // 16-byte result into out. Authenticating two different messages with the same
 // key allows an attacker to forge messages at will.
-func Sum(out *[16]byte, m []byte, key *[32]byte) {
-	r := key
-	s := key[16:]
+func Sum(out *[TagSize]byte, msg []byte, key *[32]byte) {
 	var (
-		y7        float64
-		y6        float64
-		y1        float64
-		y0        float64
-		y5        float64
-		y4        float64
-		x7        float64
-		x6        float64
-		x1        float64
-		x0        float64
-		y3        float64
-		y2        float64
-		x5        float64
-		r3lowx0   float64
-		x4        float64
-		r0lowx6   float64
-		x3        float64
-		r3highx0  float64
-		x2        float64
-		r0highx6  float64
-		r0lowx0   float64
-		sr1lowx6  float64
-		r0highx0  float64
-		sr1highx6 float64
-		sr3low    float64
-		r1lowx0   float64
-		sr2lowx6  float64
-		r1highx0  float64
-		sr2highx6 float64
-		r2lowx0   float64
-		sr3lowx6  float64
-		r2highx0  float64
-		sr3highx6 float64
-		r1highx4  float64
-		r1lowx4   float64
-		r0highx4  float64
-		r0lowx4   float64
-		sr3highx4 float64
-		sr3lowx4  float64
-		sr2highx4 float64
-		sr2lowx4  float64
-		r0lowx2   float64
-		r0highx2  float64
-		r1lowx2   float64
-		r1highx2  float64
-		r2lowx2   float64
-		r2highx2  float64
-		sr3lowx2  float64
-		sr3highx2 float64
-		z0        float64
-		z1        float64
-		z2        float64
-		z3        float64
-		m0        int64
-		m1        int64
-		m2        int64
-		m3        int64
-		m00       uint32
-		m01       uint32
-		m02       uint32
-		m03       uint32
-		m10       uint32
-		m11       uint32
-		m12       uint32
-		m13       uint32
-		m20       uint32
-		m21       uint32
-		m22       uint32
-		m23       uint32
-		m30       uint32
-		m31       uint32
-		m32       uint32
-		m33       uint64
-		lbelow2   int32
-		lbelow3   int32
-		lbelow4   int32
-		lbelow5   int32
-		lbelow6   int32
-		lbelow7   int32
-		lbelow8   int32
-		lbelow9   int32
-		lbelow10  int32
-		lbelow11  int32
-		lbelow12  int32
-		lbelow13  int32
-		lbelow14  int32
-		lbelow15  int32
-		s00       uint32
-		s01       uint32
-		s02       uint32
-		s03       uint32
-		s10       uint32
-		s11       uint32
-		s12       uint32
-		s13       uint32
-		s20       uint32
-		s21       uint32
-		s22       uint32
-		s23       uint32
-		s30       uint32
-		s31       uint32
-		s32       uint32
-		s33       uint32
-		bits32    uint64
-		f         uint64
-		f0        uint64
-		f1        uint64
-		f2        uint64
-		f3        uint64
-		f4        uint64
-		g         uint64
-		g0        uint64
-		g1        uint64
-		g2        uint64
-		g3        uint64
-		g4        uint64
+		h0, h1, h2, h3, h4 uint32 // the hash accumulators
+		r0, r1, r2, r3, r4 uint64 // the r part of the key
 	)
 
-	var p int32
+	r0 = uint64(binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff)
+	r1 = uint64((binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03)
+	r2 = uint64((binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff)
+	r3 = uint64((binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff)
+	r4 = uint64((binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff)
 
-	l := int32(len(m))
+	R1, R2, R3, R4 := r1*5, r2*5, r3*5, r4*5
 
-	r00 := uint32(r[0])
+	for len(msg) >= TagSize {
+		// h += msg
+		h0 += binary.LittleEndian.Uint32(msg[0:]) & 0x3ffffff
+		h1 += (binary.LittleEndian.Uint32(msg[3:]) >> 2) & 0x3ffffff
+		h2 += (binary.LittleEndian.Uint32(msg[6:]) >> 4) & 0x3ffffff
+		h3 += (binary.LittleEndian.Uint32(msg[9:]) >> 6) & 0x3ffffff
+		h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | (1 << 24)
 
-	r01 := uint32(r[1])
+		// h *= r
+		d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
+		d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
+		d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
+		d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
+		d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
 
-	r02 := uint32(r[2])
-	r0 := int64(2151)
+		// h %= p
+		h0 = uint32(d0) & 0x3ffffff
+		h1 = uint32(d1) & 0x3ffffff
+		h2 = uint32(d2) & 0x3ffffff
+		h3 = uint32(d3) & 0x3ffffff
+		h4 = uint32(d4) & 0x3ffffff
 
-	r03 := uint32(r[3])
-	r03 &= 15
-	r0 <<= 51
+		h0 += uint32(d4>>26) * 5
+		h1 += h0 >> 26
+		h0 = h0 & 0x3ffffff
 
-	r10 := uint32(r[4])
-	r10 &= 252
-	r01 <<= 8
-	r0 += int64(r00)
-
-	r11 := uint32(r[5])
-	r02 <<= 16
-	r0 += int64(r01)
-
-	r12 := uint32(r[6])
-	r03 <<= 24
-	r0 += int64(r02)
-
-	r13 := uint32(r[7])
-	r13 &= 15
-	r1 := int64(2215)
-	r0 += int64(r03)
-
-	d0 := r0
-	r1 <<= 51
-	r2 := int64(2279)
-
-	r20 := uint32(r[8])
-	r20 &= 252
-	r11 <<= 8
-	r1 += int64(r10)
-
-	r21 := uint32(r[9])
-	r12 <<= 16
-	r1 += int64(r11)
-
-	r22 := uint32(r[10])
-	r13 <<= 24
-	r1 += int64(r12)
-
-	r23 := uint32(r[11])
-	r23 &= 15
-	r2 <<= 51
-	r1 += int64(r13)
-
-	d1 := r1
-	r21 <<= 8
-	r2 += int64(r20)
-
-	r30 := uint32(r[12])
-	r30 &= 252
-	r22 <<= 16
-	r2 += int64(r21)
-
-	r31 := uint32(r[13])
-	r23 <<= 24
-	r2 += int64(r22)
-
-	r32 := uint32(r[14])
-	r2 += int64(r23)
-	r3 := int64(2343)
-
-	d2 := r2
-	r3 <<= 51
-
-	r33 := uint32(r[15])
-	r33 &= 15
-	r31 <<= 8
-	r3 += int64(r30)
-
-	r32 <<= 16
-	r3 += int64(r31)
-
-	r33 <<= 24
-	r3 += int64(r32)
-
-	r3 += int64(r33)
-	h0 := alpha32 - alpha32
-
-	d3 := r3
-	h1 := alpha32 - alpha32
-
-	h2 := alpha32 - alpha32
-
-	h3 := alpha32 - alpha32
-
-	h4 := alpha32 - alpha32
-
-	r0low := math.Float64frombits(uint64(d0))
-	h5 := alpha32 - alpha32
-
-	r1low := math.Float64frombits(uint64(d1))
-	h6 := alpha32 - alpha32
-
-	r2low := math.Float64frombits(uint64(d2))
-	h7 := alpha32 - alpha32
-
-	r0low -= alpha0
-
-	r1low -= alpha32
-
-	r2low -= alpha64
-
-	r0high := r0low + alpha18
-
-	r3low := math.Float64frombits(uint64(d3))
-
-	r1high := r1low + alpha50
-	sr1low := scale * r1low
-
-	r2high := r2low + alpha82
-	sr2low := scale * r2low
-
-	r0high -= alpha18
-	r0high_stack := r0high
-
-	r3low -= alpha96
-
-	r1high -= alpha50
-	r1high_stack := r1high
-
-	sr1high := sr1low + alpham80
-
-	r0low -= r0high
-
-	r2high -= alpha82
-	sr3low = scale * r3low
-
-	sr2high := sr2low + alpham48
-
-	r1low -= r1high
-	r1low_stack := r1low
-
-	sr1high -= alpham80
-	sr1high_stack := sr1high
-
-	r2low -= r2high
-	r2low_stack := r2low
-
-	sr2high -= alpham48
-	sr2high_stack := sr2high
-
-	r3high := r3low + alpha112
-	r0low_stack := r0low
-
-	sr1low -= sr1high
-	sr1low_stack := sr1low
-
-	sr3high := sr3low + alpham16
-	r2high_stack := r2high
-
-	sr2low -= sr2high
-	sr2low_stack := sr2low
-
-	r3high -= alpha112
-	r3high_stack := r3high
-
-	sr3high -= alpham16
-	sr3high_stack := sr3high
-
-	r3low -= r3high
-	r3low_stack := r3low
-
-	sr3low -= sr3high
-	sr3low_stack := sr3low
-
-	if l < 16 {
-		goto addatmost15bytes
+		msg = msg[TagSize:]
 	}
 
-	m00 = uint32(m[p+0])
-	m0 = 2151
+	if len(msg) > 0 {
+		var block [TagSize]byte
+		off := copy(block[:], msg)
+		block[off] = 0x01
 
-	m0 <<= 51
-	m1 = 2215
-	m01 = uint32(m[p+1])
+		// h += msg
+		h0 += binary.LittleEndian.Uint32(block[0:]) & 0x3ffffff
+		h1 += (binary.LittleEndian.Uint32(block[3:]) >> 2) & 0x3ffffff
+		h2 += (binary.LittleEndian.Uint32(block[6:]) >> 4) & 0x3ffffff
+		h3 += (binary.LittleEndian.Uint32(block[9:]) >> 6) & 0x3ffffff
+		h4 += (binary.LittleEndian.Uint32(block[12:]) >> 8)
 
-	m1 <<= 51
-	m2 = 2279
-	m02 = uint32(m[p+2])
+		// h *= r
+		d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
+		d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
+		d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
+		d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
+		d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
 
-	m2 <<= 51
-	m3 = 2343
-	m03 = uint32(m[p+3])
+		// h %= p
+		h0 = uint32(d0) & 0x3ffffff
+		h1 = uint32(d1) & 0x3ffffff
+		h2 = uint32(d2) & 0x3ffffff
+		h3 = uint32(d3) & 0x3ffffff
+		h4 = uint32(d4) & 0x3ffffff
 
-	m10 = uint32(m[p+4])
-	m01 <<= 8
-	m0 += int64(m00)
-
-	m11 = uint32(m[p+5])
-	m02 <<= 16
-	m0 += int64(m01)
-
-	m12 = uint32(m[p+6])
-	m03 <<= 24
-	m0 += int64(m02)
-
-	m13 = uint32(m[p+7])
-	m3 <<= 51
-	m0 += int64(m03)
-
-	m20 = uint32(m[p+8])
-	m11 <<= 8
-	m1 += int64(m10)
-
-	m21 = uint32(m[p+9])
-	m12 <<= 16
-	m1 += int64(m11)
-
-	m22 = uint32(m[p+10])
-	m13 <<= 24
-	m1 += int64(m12)
-
-	m23 = uint32(m[p+11])
-	m1 += int64(m13)
-
-	m30 = uint32(m[p+12])
-	m21 <<= 8
-	m2 += int64(m20)
-
-	m31 = uint32(m[p+13])
-	m22 <<= 16
-	m2 += int64(m21)
-
-	m32 = uint32(m[p+14])
-	m23 <<= 24
-	m2 += int64(m22)
-
-	m33 = uint64(m[p+15])
-	m2 += int64(m23)
-
-	d0 = m0
-	m31 <<= 8
-	m3 += int64(m30)
-
-	d1 = m1
-	m32 <<= 16
-	m3 += int64(m31)
-
-	d2 = m2
-	m33 += 256
-
-	m33 <<= 24
-	m3 += int64(m32)
-
-	m3 += int64(m33)
-	d3 = m3
-
-	p += 16
-	l -= 16
-
-	z0 = math.Float64frombits(uint64(d0))
-
-	z1 = math.Float64frombits(uint64(d1))
-
-	z2 = math.Float64frombits(uint64(d2))
-
-	z3 = math.Float64frombits(uint64(d3))
-
-	z0 -= alpha0
-
-	z1 -= alpha32
-
-	z2 -= alpha64
-
-	z3 -= alpha96
-
-	h0 += z0
-
-	h1 += z1
-
-	h3 += z2
-
-	h5 += z3
-
-	if l < 16 {
-		goto multiplyaddatmost15bytes
+		h0 += uint32(d4>>26) * 5
+		h1 += h0 >> 26
+		h0 = h0 & 0x3ffffff
 	}
 
-multiplyaddatleast16bytes:
+	// h %= p reduction
+	h2 += h1 >> 26
+	h1 &= 0x3ffffff
+	h3 += h2 >> 26
+	h2 &= 0x3ffffff
+	h4 += h3 >> 26
+	h3 &= 0x3ffffff
+	h0 += 5 * (h4 >> 26)
+	h4 &= 0x3ffffff
+	h1 += h0 >> 26
+	h0 &= 0x3ffffff
 
-	m2 = 2279
-	m20 = uint32(m[p+8])
-	y7 = h7 + alpha130
+	// h - p
+	t0 := h0 + 5
+	t1 := h1 + (t0 >> 26)
+	t2 := h2 + (t1 >> 26)
+	t3 := h3 + (t2 >> 26)
+	t4 := h4 + (t3 >> 26) - (1 << 26)
+	t0 &= 0x3ffffff
+	t1 &= 0x3ffffff
+	t2 &= 0x3ffffff
+	t3 &= 0x3ffffff
 
-	m2 <<= 51
-	m3 = 2343
-	m21 = uint32(m[p+9])
-	y6 = h6 + alpha130
+	// select h if h < p else h - p
+	t_mask := (t4 >> 31) - 1
+	h_mask := ^t_mask
+	h0 = (h0 & h_mask) | (t0 & t_mask)
+	h1 = (h1 & h_mask) | (t1 & t_mask)
+	h2 = (h2 & h_mask) | (t2 & t_mask)
+	h3 = (h3 & h_mask) | (t3 & t_mask)
+	h4 = (h4 & h_mask) | (t4 & t_mask)
 
-	m3 <<= 51
-	m0 = 2151
-	m22 = uint32(m[p+10])
-	y1 = h1 + alpha32
+	// h %= 2^128
+	h0 |= h1 << 26
+	h1 = ((h1 >> 6) | (h2 << 20))
+	h2 = ((h2 >> 12) | (h3 << 14))
+	h3 = ((h3 >> 18) | (h4 << 8))
 
-	m0 <<= 51
-	m1 = 2215
-	m23 = uint32(m[p+11])
-	y0 = h0 + alpha32
+	// s: the s part of the key
+	// tag = (h + s) % (2^128)
+	t := uint64(h0) + uint64(binary.LittleEndian.Uint32(key[16:]))
+	h0 = uint32(t)
+	t = uint64(h1) + uint64(binary.LittleEndian.Uint32(key[20:])) + (t >> 32)
+	h1 = uint32(t)
+	t = uint64(h2) + uint64(binary.LittleEndian.Uint32(key[24:])) + (t >> 32)
+	h2 = uint32(t)
+	t = uint64(h3) + uint64(binary.LittleEndian.Uint32(key[28:])) + (t >> 32)
+	h3 = uint32(t)
 
-	m1 <<= 51
-	m30 = uint32(m[p+12])
-	y7 -= alpha130
-
-	m21 <<= 8
-	m2 += int64(m20)
-	m31 = uint32(m[p+13])
-	y6 -= alpha130
-
-	m22 <<= 16
-	m2 += int64(m21)
-	m32 = uint32(m[p+14])
-	y1 -= alpha32
-
-	m23 <<= 24
-	m2 += int64(m22)
-	m33 = uint64(m[p+15])
-	y0 -= alpha32
-
-	m2 += int64(m23)
-	m00 = uint32(m[p+0])
-	y5 = h5 + alpha96
-
-	m31 <<= 8
-	m3 += int64(m30)
-	m01 = uint32(m[p+1])
-	y4 = h4 + alpha96
-
-	m32 <<= 16
-	m02 = uint32(m[p+2])
-	x7 = h7 - y7
-	y7 *= scale
-
-	m33 += 256
-	m03 = uint32(m[p+3])
-	x6 = h6 - y6
-	y6 *= scale
-
-	m33 <<= 24
-	m3 += int64(m31)
-	m10 = uint32(m[p+4])
-	x1 = h1 - y1
-
-	m01 <<= 8
-	m3 += int64(m32)
-	m11 = uint32(m[p+5])
-	x0 = h0 - y0
-
-	m3 += int64(m33)
-	m0 += int64(m00)
-	m12 = uint32(m[p+6])
-	y5 -= alpha96
-
-	m02 <<= 16
-	m0 += int64(m01)
-	m13 = uint32(m[p+7])
-	y4 -= alpha96
-
-	m03 <<= 24
-	m0 += int64(m02)
-	d2 = m2
-	x1 += y7
-
-	m0 += int64(m03)
-	d3 = m3
-	x0 += y6
-
-	m11 <<= 8
-	m1 += int64(m10)
-	d0 = m0
-	x7 += y5
-
-	m12 <<= 16
-	m1 += int64(m11)
-	x6 += y4
-
-	m13 <<= 24
-	m1 += int64(m12)
-	y3 = h3 + alpha64
-
-	m1 += int64(m13)
-	d1 = m1
-	y2 = h2 + alpha64
-
-	x0 += x1
-
-	x6 += x7
-
-	y3 -= alpha64
-	r3low = r3low_stack
-
-	y2 -= alpha64
-	r0low = r0low_stack
-
-	x5 = h5 - y5
-	r3lowx0 = r3low * x0
-	r3high = r3high_stack
-
-	x4 = h4 - y4
-	r0lowx6 = r0low * x6
-	r0high = r0high_stack
-
-	x3 = h3 - y3
-	r3highx0 = r3high * x0
-	sr1low = sr1low_stack
-
-	x2 = h2 - y2
-	r0highx6 = r0high * x6
-	sr1high = sr1high_stack
-
-	x5 += y3
-	r0lowx0 = r0low * x0
-	r1low = r1low_stack
-
-	h6 = r3lowx0 + r0lowx6
-	sr1lowx6 = sr1low * x6
-	r1high = r1high_stack
-
-	x4 += y2
-	r0highx0 = r0high * x0
-	sr2low = sr2low_stack
-
-	h7 = r3highx0 + r0highx6
-	sr1highx6 = sr1high * x6
-	sr2high = sr2high_stack
-
-	x3 += y1
-	r1lowx0 = r1low * x0
-	r2low = r2low_stack
-
-	h0 = r0lowx0 + sr1lowx6
-	sr2lowx6 = sr2low * x6
-	r2high = r2high_stack
-
-	x2 += y0
-	r1highx0 = r1high * x0
-	sr3low = sr3low_stack
-
-	h1 = r0highx0 + sr1highx6
-	sr2highx6 = sr2high * x6
-	sr3high = sr3high_stack
-
-	x4 += x5
-	r2lowx0 = r2low * x0
-	z2 = math.Float64frombits(uint64(d2))
-
-	h2 = r1lowx0 + sr2lowx6
-	sr3lowx6 = sr3low * x6
-
-	x2 += x3
-	r2highx0 = r2high * x0
-	z3 = math.Float64frombits(uint64(d3))
-
-	h3 = r1highx0 + sr2highx6
-	sr3highx6 = sr3high * x6
-
-	r1highx4 = r1high * x4
-	z2 -= alpha64
-
-	h4 = r2lowx0 + sr3lowx6
-	r1lowx4 = r1low * x4
-
-	r0highx4 = r0high * x4
-	z3 -= alpha96
-
-	h5 = r2highx0 + sr3highx6
-	r0lowx4 = r0low * x4
-
-	h7 += r1highx4
-	sr3highx4 = sr3high * x4
-
-	h6 += r1lowx4
-	sr3lowx4 = sr3low * x4
-
-	h5 += r0highx4
-	sr2highx4 = sr2high * x4
-
-	h4 += r0lowx4
-	sr2lowx4 = sr2low * x4
-
-	h3 += sr3highx4
-	r0lowx2 = r0low * x2
-
-	h2 += sr3lowx4
-	r0highx2 = r0high * x2
-
-	h1 += sr2highx4
-	r1lowx2 = r1low * x2
-
-	h0 += sr2lowx4
-	r1highx2 = r1high * x2
-
-	h2 += r0lowx2
-	r2lowx2 = r2low * x2
-
-	h3 += r0highx2
-	r2highx2 = r2high * x2
-
-	h4 += r1lowx2
-	sr3lowx2 = sr3low * x2
-
-	h5 += r1highx2
-	sr3highx2 = sr3high * x2
-
-	p += 16
-	l -= 16
-	h6 += r2lowx2
-
-	h7 += r2highx2
-
-	z1 = math.Float64frombits(uint64(d1))
-	h0 += sr3lowx2
-
-	z0 = math.Float64frombits(uint64(d0))
-	h1 += sr3highx2
-
-	z1 -= alpha32
-
-	z0 -= alpha0
-
-	h5 += z3
-
-	h3 += z2
-
-	h1 += z1
-
-	h0 += z0
-
-	if l >= 16 {
-		goto multiplyaddatleast16bytes
-	}
-
-multiplyaddatmost15bytes:
-
-	y7 = h7 + alpha130
-
-	y6 = h6 + alpha130
-
-	y1 = h1 + alpha32
-
-	y0 = h0 + alpha32
-
-	y7 -= alpha130
-
-	y6 -= alpha130
-
-	y1 -= alpha32
-
-	y0 -= alpha32
-
-	y5 = h5 + alpha96
-
-	y4 = h4 + alpha96
-
-	x7 = h7 - y7
-	y7 *= scale
-
-	x6 = h6 - y6
-	y6 *= scale
-
-	x1 = h1 - y1
-
-	x0 = h0 - y0
-
-	y5 -= alpha96
-
-	y4 -= alpha96
-
-	x1 += y7
-
-	x0 += y6
-
-	x7 += y5
-
-	x6 += y4
-
-	y3 = h3 + alpha64
-
-	y2 = h2 + alpha64
-
-	x0 += x1
-
-	x6 += x7
-
-	y3 -= alpha64
-	r3low = r3low_stack
-
-	y2 -= alpha64
-	r0low = r0low_stack
-
-	x5 = h5 - y5
-	r3lowx0 = r3low * x0
-	r3high = r3high_stack
-
-	x4 = h4 - y4
-	r0lowx6 = r0low * x6
-	r0high = r0high_stack
-
-	x3 = h3 - y3
-	r3highx0 = r3high * x0
-	sr1low = sr1low_stack
-
-	x2 = h2 - y2
-	r0highx6 = r0high * x6
-	sr1high = sr1high_stack
-
-	x5 += y3
-	r0lowx0 = r0low * x0
-	r1low = r1low_stack
-
-	h6 = r3lowx0 + r0lowx6
-	sr1lowx6 = sr1low * x6
-	r1high = r1high_stack
-
-	x4 += y2
-	r0highx0 = r0high * x0
-	sr2low = sr2low_stack
-
-	h7 = r3highx0 + r0highx6
-	sr1highx6 = sr1high * x6
-	sr2high = sr2high_stack
-
-	x3 += y1
-	r1lowx0 = r1low * x0
-	r2low = r2low_stack
-
-	h0 = r0lowx0 + sr1lowx6
-	sr2lowx6 = sr2low * x6
-	r2high = r2high_stack
-
-	x2 += y0
-	r1highx0 = r1high * x0
-	sr3low = sr3low_stack
-
-	h1 = r0highx0 + sr1highx6
-	sr2highx6 = sr2high * x6
-	sr3high = sr3high_stack
-
-	x4 += x5
-	r2lowx0 = r2low * x0
-
-	h2 = r1lowx0 + sr2lowx6
-	sr3lowx6 = sr3low * x6
-
-	x2 += x3
-	r2highx0 = r2high * x0
-
-	h3 = r1highx0 + sr2highx6
-	sr3highx6 = sr3high * x6
-
-	r1highx4 = r1high * x4
-
-	h4 = r2lowx0 + sr3lowx6
-	r1lowx4 = r1low * x4
-
-	r0highx4 = r0high * x4
-
-	h5 = r2highx0 + sr3highx6
-	r0lowx4 = r0low * x4
-
-	h7 += r1highx4
-	sr3highx4 = sr3high * x4
-
-	h6 += r1lowx4
-	sr3lowx4 = sr3low * x4
-
-	h5 += r0highx4
-	sr2highx4 = sr2high * x4
-
-	h4 += r0lowx4
-	sr2lowx4 = sr2low * x4
-
-	h3 += sr3highx4
-	r0lowx2 = r0low * x2
-
-	h2 += sr3lowx4
-	r0highx2 = r0high * x2
-
-	h1 += sr2highx4
-	r1lowx2 = r1low * x2
-
-	h0 += sr2lowx4
-	r1highx2 = r1high * x2
-
-	h2 += r0lowx2
-	r2lowx2 = r2low * x2
-
-	h3 += r0highx2
-	r2highx2 = r2high * x2
-
-	h4 += r1lowx2
-	sr3lowx2 = sr3low * x2
-
-	h5 += r1highx2
-	sr3highx2 = sr3high * x2
-
-	h6 += r2lowx2
-
-	h7 += r2highx2
-
-	h0 += sr3lowx2
-
-	h1 += sr3highx2
-
-addatmost15bytes:
-
-	if l == 0 {
-		goto nomorebytes
-	}
-
-	lbelow2 = l - 2
-
-	lbelow3 = l - 3
-
-	lbelow2 >>= 31
-	lbelow4 = l - 4
-
-	m00 = uint32(m[p+0])
-	lbelow3 >>= 31
-	p += lbelow2
-
-	m01 = uint32(m[p+1])
-	lbelow4 >>= 31
-	p += lbelow3
-
-	m02 = uint32(m[p+2])
-	p += lbelow4
-	m0 = 2151
-
-	m03 = uint32(m[p+3])
-	m0 <<= 51
-	m1 = 2215
-
-	m0 += int64(m00)
-	m01 &^= uint32(lbelow2)
-
-	m02 &^= uint32(lbelow3)
-	m01 -= uint32(lbelow2)
-
-	m01 <<= 8
-	m03 &^= uint32(lbelow4)
-
-	m0 += int64(m01)
-	lbelow2 -= lbelow3
-
-	m02 += uint32(lbelow2)
-	lbelow3 -= lbelow4
-
-	m02 <<= 16
-	m03 += uint32(lbelow3)
-
-	m03 <<= 24
-	m0 += int64(m02)
-
-	m0 += int64(m03)
-	lbelow5 = l - 5
-
-	lbelow6 = l - 6
-	lbelow7 = l - 7
-
-	lbelow5 >>= 31
-	lbelow8 = l - 8
-
-	lbelow6 >>= 31
-	p += lbelow5
-
-	m10 = uint32(m[p+4])
-	lbelow7 >>= 31
-	p += lbelow6
-
-	m11 = uint32(m[p+5])
-	lbelow8 >>= 31
-	p += lbelow7
-
-	m12 = uint32(m[p+6])
-	m1 <<= 51
-	p += lbelow8
-
-	m13 = uint32(m[p+7])
-	m10 &^= uint32(lbelow5)
-	lbelow4 -= lbelow5
-
-	m10 += uint32(lbelow4)
-	lbelow5 -= lbelow6
-
-	m11 &^= uint32(lbelow6)
-	m11 += uint32(lbelow5)
-
-	m11 <<= 8
-	m1 += int64(m10)
-
-	m1 += int64(m11)
-	m12 &^= uint32(lbelow7)
-
-	lbelow6 -= lbelow7
-	m13 &^= uint32(lbelow8)
-
-	m12 += uint32(lbelow6)
-	lbelow7 -= lbelow8
-
-	m12 <<= 16
-	m13 += uint32(lbelow7)
-
-	m13 <<= 24
-	m1 += int64(m12)
-
-	m1 += int64(m13)
-	m2 = 2279
-
-	lbelow9 = l - 9
-	m3 = 2343
-
-	lbelow10 = l - 10
-	lbelow11 = l - 11
-
-	lbelow9 >>= 31
-	lbelow12 = l - 12
-
-	lbelow10 >>= 31
-	p += lbelow9
-
-	m20 = uint32(m[p+8])
-	lbelow11 >>= 31
-	p += lbelow10
-
-	m21 = uint32(m[p+9])
-	lbelow12 >>= 31
-	p += lbelow11
-
-	m22 = uint32(m[p+10])
-	m2 <<= 51
-	p += lbelow12
-
-	m23 = uint32(m[p+11])
-	m20 &^= uint32(lbelow9)
-	lbelow8 -= lbelow9
-
-	m20 += uint32(lbelow8)
-	lbelow9 -= lbelow10
-
-	m21 &^= uint32(lbelow10)
-	m21 += uint32(lbelow9)
-
-	m21 <<= 8
-	m2 += int64(m20)
-
-	m2 += int64(m21)
-	m22 &^= uint32(lbelow11)
-
-	lbelow10 -= lbelow11
-	m23 &^= uint32(lbelow12)
-
-	m22 += uint32(lbelow10)
-	lbelow11 -= lbelow12
-
-	m22 <<= 16
-	m23 += uint32(lbelow11)
-
-	m23 <<= 24
-	m2 += int64(m22)
-
-	m3 <<= 51
-	lbelow13 = l - 13
-
-	lbelow13 >>= 31
-	lbelow14 = l - 14
-
-	lbelow14 >>= 31
-	p += lbelow13
-	lbelow15 = l - 15
-
-	m30 = uint32(m[p+12])
-	lbelow15 >>= 31
-	p += lbelow14
-
-	m31 = uint32(m[p+13])
-	p += lbelow15
-	m2 += int64(m23)
-
-	m32 = uint32(m[p+14])
-	m30 &^= uint32(lbelow13)
-	lbelow12 -= lbelow13
-
-	m30 += uint32(lbelow12)
-	lbelow13 -= lbelow14
-
-	m3 += int64(m30)
-	m31 &^= uint32(lbelow14)
-
-	m31 += uint32(lbelow13)
-	m32 &^= uint32(lbelow15)
-
-	m31 <<= 8
-	lbelow14 -= lbelow15
-
-	m3 += int64(m31)
-	m32 += uint32(lbelow14)
-	d0 = m0
-
-	m32 <<= 16
-	m33 = uint64(lbelow15 + 1)
-	d1 = m1
-
-	m33 <<= 24
-	m3 += int64(m32)
-	d2 = m2
-
-	m3 += int64(m33)
-	d3 = m3
-
-	z3 = math.Float64frombits(uint64(d3))
-
-	z2 = math.Float64frombits(uint64(d2))
-
-	z1 = math.Float64frombits(uint64(d1))
-
-	z0 = math.Float64frombits(uint64(d0))
-
-	z3 -= alpha96
-
-	z2 -= alpha64
-
-	z1 -= alpha32
-
-	z0 -= alpha0
-
-	h5 += z3
-
-	h3 += z2
-
-	h1 += z1
-
-	h0 += z0
-
-	y7 = h7 + alpha130
-
-	y6 = h6 + alpha130
-
-	y1 = h1 + alpha32
-
-	y0 = h0 + alpha32
-
-	y7 -= alpha130
-
-	y6 -= alpha130
-
-	y1 -= alpha32
-
-	y0 -= alpha32
-
-	y5 = h5 + alpha96
-
-	y4 = h4 + alpha96
-
-	x7 = h7 - y7
-	y7 *= scale
-
-	x6 = h6 - y6
-	y6 *= scale
-
-	x1 = h1 - y1
-
-	x0 = h0 - y0
-
-	y5 -= alpha96
-
-	y4 -= alpha96
-
-	x1 += y7
-
-	x0 += y6
-
-	x7 += y5
-
-	x6 += y4
-
-	y3 = h3 + alpha64
-
-	y2 = h2 + alpha64
-
-	x0 += x1
-
-	x6 += x7
-
-	y3 -= alpha64
-	r3low = r3low_stack
-
-	y2 -= alpha64
-	r0low = r0low_stack
-
-	x5 = h5 - y5
-	r3lowx0 = r3low * x0
-	r3high = r3high_stack
-
-	x4 = h4 - y4
-	r0lowx6 = r0low * x6
-	r0high = r0high_stack
-
-	x3 = h3 - y3
-	r3highx0 = r3high * x0
-	sr1low = sr1low_stack
-
-	x2 = h2 - y2
-	r0highx6 = r0high * x6
-	sr1high = sr1high_stack
-
-	x5 += y3
-	r0lowx0 = r0low * x0
-	r1low = r1low_stack
-
-	h6 = r3lowx0 + r0lowx6
-	sr1lowx6 = sr1low * x6
-	r1high = r1high_stack
-
-	x4 += y2
-	r0highx0 = r0high * x0
-	sr2low = sr2low_stack
-
-	h7 = r3highx0 + r0highx6
-	sr1highx6 = sr1high * x6
-	sr2high = sr2high_stack
-
-	x3 += y1
-	r1lowx0 = r1low * x0
-	r2low = r2low_stack
-
-	h0 = r0lowx0 + sr1lowx6
-	sr2lowx6 = sr2low * x6
-	r2high = r2high_stack
-
-	x2 += y0
-	r1highx0 = r1high * x0
-	sr3low = sr3low_stack
-
-	h1 = r0highx0 + sr1highx6
-	sr2highx6 = sr2high * x6
-	sr3high = sr3high_stack
-
-	x4 += x5
-	r2lowx0 = r2low * x0
-
-	h2 = r1lowx0 + sr2lowx6
-	sr3lowx6 = sr3low * x6
-
-	x2 += x3
-	r2highx0 = r2high * x0
-
-	h3 = r1highx0 + sr2highx6
-	sr3highx6 = sr3high * x6
-
-	r1highx4 = r1high * x4
-
-	h4 = r2lowx0 + sr3lowx6
-	r1lowx4 = r1low * x4
-
-	r0highx4 = r0high * x4
-
-	h5 = r2highx0 + sr3highx6
-	r0lowx4 = r0low * x4
-
-	h7 += r1highx4
-	sr3highx4 = sr3high * x4
-
-	h6 += r1lowx4
-	sr3lowx4 = sr3low * x4
-
-	h5 += r0highx4
-	sr2highx4 = sr2high * x4
-
-	h4 += r0lowx4
-	sr2lowx4 = sr2low * x4
-
-	h3 += sr3highx4
-	r0lowx2 = r0low * x2
-
-	h2 += sr3lowx4
-	r0highx2 = r0high * x2
-
-	h1 += sr2highx4
-	r1lowx2 = r1low * x2
-
-	h0 += sr2lowx4
-	r1highx2 = r1high * x2
-
-	h2 += r0lowx2
-	r2lowx2 = r2low * x2
-
-	h3 += r0highx2
-	r2highx2 = r2high * x2
-
-	h4 += r1lowx2
-	sr3lowx2 = sr3low * x2
-
-	h5 += r1highx2
-	sr3highx2 = sr3high * x2
-
-	h6 += r2lowx2
-
-	h7 += r2highx2
-
-	h0 += sr3lowx2
-
-	h1 += sr3highx2
-
-nomorebytes:
-
-	y7 = h7 + alpha130
-
-	y0 = h0 + alpha32
-
-	y1 = h1 + alpha32
-
-	y2 = h2 + alpha64
-
-	y7 -= alpha130
-
-	y3 = h3 + alpha64
-
-	y4 = h4 + alpha96
-
-	y5 = h5 + alpha96
-
-	x7 = h7 - y7
-	y7 *= scale
-
-	y0 -= alpha32
-
-	y1 -= alpha32
-
-	y2 -= alpha64
-
-	h6 += x7
-
-	y3 -= alpha64
-
-	y4 -= alpha96
-
-	y5 -= alpha96
-
-	y6 = h6 + alpha130
-
-	x0 = h0 - y0
-
-	x1 = h1 - y1
-
-	x2 = h2 - y2
-
-	y6 -= alpha130
-
-	x0 += y7
-
-	x3 = h3 - y3
-
-	x4 = h4 - y4
-
-	x5 = h5 - y5
-
-	x6 = h6 - y6
-
-	y6 *= scale
-
-	x2 += y0
-
-	x3 += y1
-
-	x4 += y2
-
-	x0 += y6
-
-	x5 += y3
-
-	x6 += y4
-
-	x2 += x3
-
-	x0 += x1
-
-	x4 += x5
-
-	x6 += y5
-
-	x2 += offset1
-	d1 = int64(math.Float64bits(x2))
-
-	x0 += offset0
-	d0 = int64(math.Float64bits(x0))
-
-	x4 += offset2
-	d2 = int64(math.Float64bits(x4))
-
-	x6 += offset3
-	d3 = int64(math.Float64bits(x6))
-
-	f0 = uint64(d0)
-
-	f1 = uint64(d1)
-	bits32 = math.MaxUint64
-
-	f2 = uint64(d2)
-	bits32 >>= 32
-
-	f3 = uint64(d3)
-	f = f0 >> 32
-
-	f0 &= bits32
-	f &= 255
-
-	f1 += f
-	g0 = f0 + 5
-
-	g = g0 >> 32
-	g0 &= bits32
-
-	f = f1 >> 32
-	f1 &= bits32
-
-	f &= 255
-	g1 = f1 + g
-
-	g = g1 >> 32
-	f2 += f
-
-	f = f2 >> 32
-	g1 &= bits32
-
-	f2 &= bits32
-	f &= 255
-
-	f3 += f
-	g2 = f2 + g
-
-	g = g2 >> 32
-	g2 &= bits32
-
-	f4 = f3 >> 32
-	f3 &= bits32
-
-	f4 &= 255
-	g3 = f3 + g
-
-	g = g3 >> 32
-	g3 &= bits32
-
-	g4 = f4 + g
-
-	g4 = g4 - 4
-	s00 = uint32(s[0])
-
-	f = uint64(int64(g4) >> 63)
-	s01 = uint32(s[1])
-
-	f0 &= f
-	g0 &^= f
-	s02 = uint32(s[2])
-
-	f1 &= f
-	f0 |= g0
-	s03 = uint32(s[3])
-
-	g1 &^= f
-	f2 &= f
-	s10 = uint32(s[4])
-
-	f3 &= f
-	g2 &^= f
-	s11 = uint32(s[5])
-
-	g3 &^= f
-	f1 |= g1
-	s12 = uint32(s[6])
-
-	f2 |= g2
-	f3 |= g3
-	s13 = uint32(s[7])
-
-	s01 <<= 8
-	f0 += uint64(s00)
-	s20 = uint32(s[8])
-
-	s02 <<= 16
-	f0 += uint64(s01)
-	s21 = uint32(s[9])
-
-	s03 <<= 24
-	f0 += uint64(s02)
-	s22 = uint32(s[10])
-
-	s11 <<= 8
-	f1 += uint64(s10)
-	s23 = uint32(s[11])
-
-	s12 <<= 16
-	f1 += uint64(s11)
-	s30 = uint32(s[12])
-
-	s13 <<= 24
-	f1 += uint64(s12)
-	s31 = uint32(s[13])
-
-	f0 += uint64(s03)
-	f1 += uint64(s13)
-	s32 = uint32(s[14])
-
-	s21 <<= 8
-	f2 += uint64(s20)
-	s33 = uint32(s[15])
-
-	s22 <<= 16
-	f2 += uint64(s21)
-
-	s23 <<= 24
-	f2 += uint64(s22)
-
-	s31 <<= 8
-	f3 += uint64(s30)
-
-	s32 <<= 16
-	f3 += uint64(s31)
-
-	s33 <<= 24
-	f3 += uint64(s32)
-
-	f2 += uint64(s23)
-	f3 += uint64(s33)
-
-	out[0] = byte(f0)
-	f0 >>= 8
-	out[1] = byte(f0)
-	f0 >>= 8
-	out[2] = byte(f0)
-	f0 >>= 8
-	out[3] = byte(f0)
-	f0 >>= 8
-	f1 += f0
-
-	out[4] = byte(f1)
-	f1 >>= 8
-	out[5] = byte(f1)
-	f1 >>= 8
-	out[6] = byte(f1)
-	f1 >>= 8
-	out[7] = byte(f1)
-	f1 >>= 8
-	f2 += f1
-
-	out[8] = byte(f2)
-	f2 >>= 8
-	out[9] = byte(f2)
-	f2 >>= 8
-	out[10] = byte(f2)
-	f2 >>= 8
-	out[11] = byte(f2)
-	f2 >>= 8
-	f3 += f2
-
-	out[12] = byte(f3)
-	f3 >>= 8
-	out[13] = byte(f3)
-	f3 >>= 8
-	out[14] = byte(f3)
-	f3 >>= 8
-	out[15] = byte(f3)
+	binary.LittleEndian.PutUint32(out[0:], h0)
+	binary.LittleEndian.PutUint32(out[4:], h1)
+	binary.LittleEndian.PutUint32(out[8:], h2)
+	binary.LittleEndian.PutUint32(out[12:], h3)
 }
diff --git a/src/third_party/boringssl/src/ssl/test/runner/runner.go b/src/third_party/boringssl/src/ssl/test/runner/runner.go
index 3bdb865..ed328b6 100644
--- a/src/third_party/boringssl/src/ssl/test/runner/runner.go
+++ b/src/third_party/boringssl/src/ssl/test/runner/runner.go
@@ -4889,7 +4889,7 @@
 		})
 		testCases = append(testCases, testCase{
 			testType: clientTest,
-			name:     "ALPNClient-Mismatch-" + ver.name,
+			name:     "ALPNClient-RejectUnknown-" + ver.name,
 			config: Config{
 				MaxVersion: ver.version,
 				Bugs: ProtocolBugs{
@@ -4904,6 +4904,20 @@
 			expectedLocalError: "remote error: illegal parameter",
 		})
 		testCases = append(testCases, testCase{
+			testType: clientTest,
+			name:     "ALPNClient-AllowUnknown-" + ver.name,
+			config: Config{
+				MaxVersion: ver.version,
+				Bugs: ProtocolBugs{
+					SendALPN: "baz",
+				},
+			},
+			flags: []string{
+				"-advertise-alpn", "\x03foo\x03bar",
+				"-allow-unknown-alpn-protos",
+			},
+		})
+		testCases = append(testCases, testCase{
 			testType: serverTest,
 			name:     "ALPNServer-" + ver.name,
 			config: Config{
@@ -6662,6 +6676,10 @@
 	{"RSA-PKCS1-SHA384", signatureRSAPKCS1WithSHA384, testCertRSA},
 	{"RSA-PKCS1-SHA512", signatureRSAPKCS1WithSHA512, testCertRSA},
 	{"ECDSA-SHA1", signatureECDSAWithSHA1, testCertECDSAP256},
+	// The “P256” in the following line is not a mistake. In TLS 1.2 the
+	// hash function doesn't have to match the curve and so the same
+	// signature algorithm works with P-224.
+	{"ECDSA-P224-SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP224},
 	{"ECDSA-P256-SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP256},
 	{"ECDSA-P384-SHA384", signatureECDSAWithP384AndSHA384, testCertECDSAP384},
 	{"ECDSA-P521-SHA512", signatureECDSAWithP521AndSHA512, testCertECDSAP521},
@@ -6718,7 +6736,13 @@
 				shouldVerifyFail = true
 			}
 			// RSA-PKCS1 does not exist in TLS 1.3.
-			if ver.version == VersionTLS13 && hasComponent(alg.name, "PKCS1") {
+			if ver.version >= VersionTLS13 && hasComponent(alg.name, "PKCS1") {
+				shouldSignFail = true
+				shouldVerifyFail = true
+			}
+			// SHA-224 has been removed from TLS 1.3 and, in 1.3,
+			// the curve has to match the hash size.
+			if ver.version >= VersionTLS13 && alg.cert == testCertECDSAP224 {
 				shouldSignFail = true
 				shouldVerifyFail = true
 			}
@@ -7486,31 +7510,6 @@
 		},
 		flags: []string{"-max-version", strconv.Itoa(VersionTLS12)},
 	})
-
-	// A server certificate with a P-224 key will only work up to TLS 1.2
-	// and we only test it with BoringSSL acting as a server because that's
-	// all Alphabet requires with it.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "P224-Server",
-		config: Config{
-			VerifySignatureAlgorithms: []signatureAlgorithm{
-				// TLS 1.2 does not require that the curve
-				// match the hash, thus P-256 with SHA-256 is
-				// the same signature algorithm value as P-224
-				// with SHA-256.
-				signatureECDSAWithP256AndSHA256,
-			},
-			// P-256 must be offered as well because ECDHE requires
-			// it.
-			CurvePreferences: []CurveID{CurveP224, CurveP256},
-		},
-		flags: []string{
-			"-max-version", strconv.Itoa(VersionTLS12),
-			"-cert-file", path.Join(*resourceDir, ecdsaP224CertificateFile),
-			"-key-file", path.Join(*resourceDir, ecdsaP224KeyFile),
-		},
-	})
 }
 
 // timeouts is the retransmit schedule for BoringSSL. It doubles and
@@ -8146,6 +8145,7 @@
 	name string
 	id   CurveID
 }{
+	{"P-224", CurveP224},
 	{"P-256", CurveP256},
 	{"P-384", CurveP384},
 	{"P-521", CurveP521},
@@ -10309,10 +10309,11 @@
 		},
 	})
 
-	// Test that we fail on early data with Channel ID.
+	// Test that the client offering 0-RTT and Channel ID forbids the server
+	// from accepting both.
 	testCases = append(testCases, testCase{
 		testType: clientTest,
-		name:     "TLS13-EarlyData-ChannelID-Client",
+		name:     "TLS13-EarlyDataChannelID-AcceptBoth-Client",
 		config: Config{
 			MaxVersion:       VersionTLS13,
 			MaxEarlyDataSize: 16384,
@@ -10329,14 +10330,57 @@
 		},
 	})
 
+	// Test that the client offering Channel ID and 0-RTT allows the server
+	// to decline 0-RTT.
+	testCases = append(testCases, testCase{
+		testType: clientTest,
+		name:     "TLS13-EarlyDataChannelID-AcceptChannelID-Client",
+		config: Config{
+			MaxVersion:       VersionTLS13,
+			MaxEarlyDataSize: 16384,
+			RequestChannelID: true,
+			Bugs: ProtocolBugs{
+				AlwaysRejectEarlyData: true,
+			},
+		},
+		resumeSession:   true,
+		expectChannelID: true,
+		flags: []string{
+			"-enable-early-data",
+			"-expect-early-data-info",
+			"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile),
+			"-expect-reject-early-data",
+		},
+	})
+
+	// Test that the client offering Channel ID and 0-RTT allows the server
+	// to decline Channel ID.
+	testCases = append(testCases, testCase{
+		testType: clientTest,
+		name:     "TLS13-EarlyDataChannelID-AcceptEarlyData-Client",
+		config: Config{
+			MaxVersion:       VersionTLS13,
+			MaxEarlyDataSize: 16384,
+		},
+		resumeSession: true,
+		flags: []string{
+			"-enable-early-data",
+			"-expect-early-data-info",
+			"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile),
+			"-expect-accept-early-data",
+		},
+	})
+
+	// Test that the server supporting Channel ID and 0-RTT declines 0-RTT
+	// if it would negotiate Channel ID.
 	testCases = append(testCases, testCase{
 		testType: serverTest,
-		name:     "TLS13-EarlyData-ChannelID-Server",
+		name:     "TLS13-EarlyDataChannelID-OfferBoth-Server",
 		config: Config{
 			MaxVersion: VersionTLS13,
 			ChannelID:  channelIDKey,
 			Bugs: ProtocolBugs{
-				SendEarlyData:           [][]byte{{}},
+				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
 				ExpectEarlyDataAccepted: false,
 			},
 		},
@@ -10350,6 +10394,28 @@
 		},
 	})
 
+	// Test that the server supporting Channel ID and 0-RTT accepts 0-RTT
+	// if not offered Channel ID.
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "TLS13-EarlyDataChannelID-OfferEarlyData-Server",
+		config: Config{
+			MaxVersion: VersionTLS13,
+			Bugs: ProtocolBugs{
+				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
+				ExpectEarlyDataAccepted: true,
+				ExpectHalfRTTData:       [][]byte{{254, 253, 252, 251}},
+			},
+		},
+		resumeSession:   true,
+		expectChannelID: false,
+		flags: []string{
+			"-enable-early-data",
+			"-expect-accept-early-data",
+			"-enable-channel-id",
+		},
+	})
+
 	// Test that the server rejects 0-RTT streams without end_of_early_data.
 	// The subsequent records should fail to decrypt.
 	testCases = append(testCases, testCase{
diff --git a/src/third_party/boringssl/src/ssl/test/test_config.cc b/src/third_party/boringssl/src/ssl/test/test_config.cc
index a8cf755..1b23b02 100644
--- a/src/third_party/boringssl/src/ssl/test/test_config.cc
+++ b/src/third_party/boringssl/src/ssl/test/test_config.cc
@@ -130,6 +130,7 @@
   { "-expect-no-resume-alpn", &TestConfig::expect_no_resume_alpn },
   { "-no-op-extra-handshake", &TestConfig::no_op_extra_handshake },
   { "-handshake-twice", &TestConfig::handshake_twice },
+  { "-allow-unknown-alpn-protos", &TestConfig::allow_unknown_alpn_protos },
 };
 
 const Flag<std::string> kStringFlags[] = {
diff --git a/src/third_party/boringssl/src/ssl/test/test_config.h b/src/third_party/boringssl/src/ssl/test/test_config.h
index ef14f15..839c0fc 100644
--- a/src/third_party/boringssl/src/ssl/test/test_config.h
+++ b/src/third_party/boringssl/src/ssl/test/test_config.h
@@ -143,6 +143,7 @@
   int expect_ticket_age_skew = 0;
   bool no_op_extra_handshake = false;
   bool handshake_twice = false;
+  bool allow_unknown_alpn_protos = false;
 };
 
 bool ParseConfig(int argc, char **argv, TestConfig *out_config);
diff --git a/src/third_party/boringssl/src/ssl/tls13_client.c b/src/third_party/boringssl/src/ssl/tls13_client.c
index 0d60661..4c711e6 100644
--- a/src/third_party/boringssl/src/ssl/tls13_client.c
+++ b/src/third_party/boringssl/src/ssl/tls13_client.c
@@ -704,7 +704,7 @@
     goto err;
   }
 
-  if (have_early_data_info && ssl->ctx->enable_early_data) {
+  if (have_early_data_info && ssl->cert->enable_early_data) {
     if (!CBS_get_u32(&early_data_info, &session->ticket_max_early_data) ||
         CBS_len(&early_data_info) != 0) {
       ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
diff --git a/src/third_party/boringssl/src/ssl/tls13_server.c b/src/third_party/boringssl/src/ssl/tls13_server.c
index 35ee4f7..500cb9d 100644
--- a/src/third_party/boringssl/src/ssl/tls13_server.c
+++ b/src/third_party/boringssl/src/ssl/tls13_server.c
@@ -167,7 +167,7 @@
       goto err;
     }
 
-    if (ssl->ctx->enable_early_data) {
+    if (ssl->cert->enable_early_data) {
       session->ticket_max_early_data = kMaxEarlyDataAccepted;
 
       CBB early_data_info;
@@ -355,7 +355,7 @@
       hs->new_session = SSL_SESSION_dup(session, SSL_SESSION_DUP_AUTH_ONLY);
 
       if (/* Early data must be acceptable for this ticket. */
-          ssl->ctx->enable_early_data &&
+          ssl->cert->enable_early_data &&
           session->ticket_max_early_data != 0 &&
           /* The client must have offered early data. */
           hs->early_data_offered &&
diff --git a/src/third_party/boringssl/src/util/generate_build_files.py b/src/third_party/boringssl/src/util/generate_build_files.py
index a3435f2..5af3d4f 100644
--- a/src/third_party/boringssl/src/util/generate_build_files.py
+++ b/src/third_party/boringssl/src/util/generate_build_files.py
@@ -459,6 +459,14 @@
   return True
 
 
+def NoTestRunnerFiles(dent, is_dir):
+  """Filter function that can be passed to FindCFiles or FindHeaderFiles in
+  order to exclude test runner files."""
+  # NOTE(martinkr): This prevents .h/.cc files in src/ssl/test/runner, which
+  # are in their own subpackage, from being included in boringssl/BUILD files.
+  return not is_dir or dent != 'runner'
+
+
 def NotGTestMain(dent, is_dir):
   return dent != 'gtest_main.cc'
 
@@ -625,7 +633,7 @@
                                     NotGTestMain)
   test_support_h_files = (
       FindHeaderFiles(os.path.join('src', 'crypto', 'test'), AllFiles) +
-      FindHeaderFiles(os.path.join('src', 'ssl', 'test'), AllFiles))
+      FindHeaderFiles(os.path.join('src', 'ssl', 'test'), NoTestRunnerFiles))
 
   test_c_files = []
   crypto_test_files = ['src/crypto/test/gtest_main.cc']
diff --git a/src/third_party/closure_compiler/README.chromium b/src/third_party/closure_compiler/README.chromium
index 04d5ca3..3310da2 100644
--- a/src/third_party/closure_compiler/README.chromium
+++ b/src/third_party/closure_compiler/README.chromium
@@ -3,7 +3,7 @@
 URL: http://github.com/google/closure-compiler
 Version: v20150729-236-gad656a1
 Date: 2015/08/26 08:46
-Revision: f9c738eb53fb5cd1d475871ef16c6d1cca19b815
+Revision: ee44867683988d37c9cdb1b5c9557fe984c87135
 License: Apache 2.0
 License File: LICENSE
 Security Critical: no
diff --git a/src/third_party/closure_compiler/compiled_resources2.gyp b/src/third_party/closure_compiler/compiled_resources2.gyp
index 91ae90f..d65f176 100644
--- a/src/third_party/closure_compiler/compiled_resources2.gyp
+++ b/src/third_party/closure_compiler/compiled_resources2.gyp
@@ -20,6 +20,7 @@
         '<(DEPTH)/chrome/browser/resources/chromeos/quick_unlock/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/chromeos/select_to_speak/compiled_resources2.gyp:*',
 	'<(DEPTH)/chrome/browser/resources/chromeos/switch_access/compiled_resources2.gyp:*',
+        '<(DEPTH)/chrome/browser/resources/cleanup_tool/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/extensions/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/history/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/md_bookmarks/compiled_resources2.gyp:*',
diff --git a/src/third_party/closure_compiler/compiler/compiler.jar b/src/third_party/closure_compiler/compiler/compiler.jar
index f49e14f..79d2f04 100644
--- a/src/third_party/closure_compiler/compiler/compiler.jar
+++ b/src/third_party/closure_compiler/compiler/compiler.jar
Binary files differ
diff --git a/src/third_party/closure_compiler/externs/automation.js b/src/third_party/closure_compiler/externs/automation.js
index 0a3a0fc..0ce3d29 100644
--- a/src/third_party/closure_compiler/externs/automation.js
+++ b/src/third_party/closure_compiler/externs/automation.js
@@ -78,6 +78,7 @@
   ABBR: 'abbr',
   ALERT_DIALOG: 'alertDialog',
   ALERT: 'alert',
+  ANCHOR: 'anchor',
   ANNOTATION: 'annotation',
   APPLICATION: 'application',
   ARTICLE: 'article',
@@ -261,7 +262,7 @@
   ATTRIBUTE: 'attribute',
   CONTENTS: 'contents',
   PLACEHOLDER: 'placeholder',
-  RELATED_ELEMENT: 'related_element',
+  RELATED_ELEMENT: 'relatedElement',
   VALUE: 'value',
 };
 
@@ -517,6 +518,13 @@
 chrome.automation.AutomationNode.prototype.activeDescendant;
 
 /**
+ * The target of an in-page link.
+ * @type {(!chrome.automation.AutomationNode|undefined)}
+ * @see https://developer.chrome.com/extensions/automation#type-inPageLinkTarget
+ */
+chrome.automation.AutomationNode.prototype.inPageLinkTarget;
+
+/**
  * The URL that this link will navigate to.
  * @type {(string|undefined)}
  * @see https://developer.chrome.com/extensions/automation#type-url
@@ -1121,8 +1129,8 @@
  * placeholder root node; listen for the "loadComplete" event to get a
  * notification that the tree has fully loaded (the previous root node reference
  * will stop working at or before this point).
- * @param {number} tabId
- * @param {function(!chrome.automation.AutomationNode):void} callback Called
+ * @param {number=} tabId
+ * @param {function(!chrome.automation.AutomationNode):void=} callback Called
  *     when the <code>AutomationNode</code> for the page is available.
  * @see https://developer.chrome.com/extensions/automation#method-getTree
  */
diff --git a/src/third_party/closure_compiler/externs/chrome_extensions.js b/src/third_party/closure_compiler/externs/chrome_extensions.js
index aaea020..967607d 100644
--- a/src/third_party/closure_compiler/externs/chrome_extensions.js
+++ b/src/third_party/closure_compiler/externs/chrome_extensions.js
@@ -2080,23 +2080,31 @@
 /**
  * @param {!ArrayBuffer} challenge A challenge as emitted by the Verified Access
  *     Web API.
- * @param {function(!ArrayBuffer): void=} callback Called back with the
- *     challenge response.
+ * @param {boolean|function(!ArrayBuffer): void} registerKeyOrCallback Either a
+ *     flag indicating whether to register the key, in which case the callback
+ *     is passed as the next arg, or the callback. If a flag is set, the current
+ *     Enterprise Machine Key is registered with the "system" token and
+ *     relinquishes the Enterprise Machine Key role. The key can then be
+ *     associated with a certificate and used like any other signing key. This
+ *     key is 2048-bit RSA. Subsequent calls to this function will then generate
+ *     a new Enterprise Machine Key.
+ * @param {function(!ArrayBuffer=): void=} callback The callback (called back
+ *     with the challenge response), if arg2 was the registerKey flag.
  * @return {undefined}
  */
 chrome.enterprise.platformKeys.challengeMachineKey =
-    function(challenge, callback) {};
+    function(challenge, registerKeyOrCallback, callback) {};
 
 
 /**
  * @param {!ArrayBuffer} challenge A challenge as emitted by the Verified Access
  *     Web API.
  * @param {boolean} registerKey If set, the current Enterprise User Key is
- *     registered with the "user"> token and relinquishes the Enterprise User
+ *     registered with the "user" token and relinquishes the Enterprise User
  *     Key role. The key can then be associated with a certificate and used like
  *     any other signing key. This key is 2048-bit RSA. Subsequent calls to this
  *     function will then generate a new Enterprise User Key.
- * @param {function(!ArrayBuffer): void=} callback Called back with the
+ * @param {function(!ArrayBuffer): void} callback Called back with the
  *     challenge response.
  * @return {undefined}
  */
diff --git a/src/third_party/closure_compiler/roll_closure_compiler b/src/third_party/closure_compiler/roll_closure_compiler
index fa8d01e..b1f616e 100755
--- a/src/third_party/closure_compiler/roll_closure_compiler
+++ b/src/third_party/closure_compiler/roll_closure_compiler
@@ -11,18 +11,6 @@
 # https://dl.google.com/closure-compiler/compiler-latest.zip and unzip. And get
 # the externs from rawgit.com.
 
-java -version 2>&1 | head -1 | egrep -q '\b1\.7'
-if [[ $? -ne 0 ]]; then
-  echo "This script requires Java 1.7" >&2
-  exit 1
-fi
-
-javac -version 2>&1 | egrep -q '\b1\.7'
-if [[ $? -ne 0 ]]; then
-  echo "This script requires JDK 1.7" >&2
-  exit 1
-fi
-
 readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
 readonly TEMP_DIR=$(mktemp -d)
 readonly EXTERNS_DIR="${SCRIPT_DIR}/externs"
@@ -63,6 +51,26 @@
 )
 fi
 
+check_jdk_version() {
+  # Pretty contrived checks modeling how we write Maven XML files.
+  if [ ! -r "$2" ]; then
+    echo "Could not find $2" >&2
+    exit 1
+  elif ! fgrep -q '<jdk.version>'$1'</jdk.version>' "$2"; then
+    echo "JDK version $1 must be specified in $2" >&2
+    exit 1
+  elif ! fgrep -q '<source>${jdk.version}</source>' "$2"; then
+    echo "Java source must be specified to be \${jdk.version} in $2" >&2
+    exit 1
+  elif ! fgrep -q '<target>${jdk.version}</target>' "$2"; then
+    echo "Java target must be specified to be \${jdk.version} in $2" >&2
+    exit 1
+  fi
+}
+
+echo "Checking JDK Version Used to Build"
+check_jdk_version 1.7 pom.xml
+
 echo "Building Closure Compiler"
 mvn clean install -DskipTests=true --projects com.google.javascript:closure-compiler,com.google.javascript:closure-compiler-externs
 
diff --git a/src/third_party/instrumented_libraries/BUILD.gn b/src/third_party/instrumented_libraries/BUILD.gn
index 4d1e910..9d7636a 100644
--- a/src/third_party/instrumented_libraries/BUILD.gn
+++ b/src/third_party/instrumented_libraries/BUILD.gn
@@ -57,27 +57,18 @@
     }
   }
 
-  action("download_prebuilt_instrumented_libraries") {
-    tarfile_name = "$archive_prefix-$instrumented_libraries_platform.tgz"
-    shafile = "binaries/$tarfile_name.sha1"
-    tarfile = "$target_out_dir/$tarfile_name"
-    inputs = [ shafile ]
-    outputs = [ tarfile ]
-    script = "scripts/download_binaries.py"
-    args = [ rebase_path(shafile), rebase_path(tarfile) ]
-  }
-
+  # TODO(GYP): scripts/download_binaries.py uses GYP_DEFINES to decide whether
+  # to download the archives extracted here.
   # Note: This requires a clobber whenever Ubuntu version changes.
   action("extract_prebuilt_instrumented_libraries") {
-    deps = [ ":download_prebuilt_instrumented_libraries" ]
     visibility = [ ":prebuilt" ]
     script = "scripts/unpack_binaries.py"
     depfile = "$target_out_dir/$archive_prefix.d"
-    tarfile = get_target_outputs(":download_prebuilt_instrumented_libraries")
     args = [
-      rebase_path(tarfile[0]),
-      rebase_path("$target_out_dir/$archive_prefix.txt"),
+      archive_prefix,
+      rebase_path("binaries"),
       rebase_path(root_out_dir + "/instrumented_libraries_prebuilt"),
+      rebase_path(target_out_dir, root_out_dir),
     ]
     outputs = [
       "$target_out_dir/$archive_prefix.txt",
diff --git a/src/third_party/instrumented_libraries/scripts/download_binaries.py b/src/third_party/instrumented_libraries/scripts/download_binaries.py
index fa339cc..b7e87b2 100755
--- a/src/third_party/instrumented_libraries/scripts/download_binaries.py
+++ b/src/third_party/instrumented_libraries/scripts/download_binaries.py
@@ -3,34 +3,69 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Downloads pre-built sanitizer-instrumented third-party libraries from GCS.
-This script should only be run from gn.
-"""
+"""Downloads pre-built sanitizer-instrumented third-party libraries from GCS."""
 
+import os
+import re
 import subprocess
 import sys
 
 
-def main(args):
-  if not sys.platform.startswith('linux'):
-    raise Exception("Prebuilt instrumented libraries require Linux.")
+SCRIPT_PATH = os.path.abspath(__file__)
+BASE_PATH = os.path.normpath(os.path.join(SCRIPT_PATH, *(4 * ['..'])))
 
-  sha1file = args[0]
-  tarfile = args[1]
+# This defaults to the consuming project's base directory, e.g. 'src' in
+# chromium.
+BASE_DIR = os.path.basename(BASE_PATH)
+
+
+def get_ubuntu_release():
+  supported_releases = ['trusty']
+  release = subprocess.check_output(['lsb_release', '-cs']).strip()
+  if release not in supported_releases:
+    raise Exception("Supported Ubuntu versions: %s", str(supported_releases))
+  return release
+
+
+def get_configuration(gyp_defines):
+  if re.search(r'\b(msan)=1', gyp_defines):
+    if 'msan_track_origins=0' in gyp_defines:
+      return 'msan-no-origins'
+    if 'msan_track_origins=2' in gyp_defines:
+      return 'msan-chained-origins'
+    if 'msan_track_origins=' not in gyp_defines:
+      # NB: must be the same as the default value in common.gypi
+      return 'msan-chained-origins'
+  raise Exception(
+      "Prebuilt instrumented libraries not available for your configuration.")
+
+
+def get_archive_name(gyp_defines):
+  return "%s-%s.tgz" % (get_configuration(gyp_defines), get_ubuntu_release())
+
+
+def main(args):
+  gyp_defines = os.environ.get('GYP_DEFINES', '')
+  if not 'use_prebuilt_instrumented_libraries=1' in gyp_defines:
+    return 0
+
+  if not sys.platform.startswith('linux'):
+    raise Exception("'use_prebuilt_instrumented_libraries=1' requires Linux.")
+
+  archive_name = get_archive_name(gyp_defines)
+  sha1file = '%s.sha1' % archive_name
+  target_directory = os.path.join(
+      BASE_DIR, 'third_party', 'instrumented_libraries', 'binaries')
 
   subprocess.check_call([
       'download_from_google_storage',
       '--no_resume',
       '--no_auth',
       '--bucket', 'chromium-instrumented-libraries',
-      '-s', sha1file, '-o', tarfile])
+      '-s', sha1file], cwd=target_directory)
 
   return 0
 
 
 if __name__ == '__main__':
-  # TODO(thomasanderson): Remove this once all third_party DEPS
-  # entires for this script are removed.
-  if (len(sys.argv) == 1):
-    sys.exit(0)
   sys.exit(main(sys.argv[1:]))
diff --git a/src/third_party/instrumented_libraries/scripts/unpack_binaries.py b/src/third_party/instrumented_libraries/scripts/unpack_binaries.py
index 2f335bc..3e17790 100755
--- a/src/third_party/instrumented_libraries/scripts/unpack_binaries.py
+++ b/src/third_party/instrumented_libraries/scripts/unpack_binaries.py
@@ -3,27 +3,38 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Unpacks pre-built sanitizer-instrumented third-party libraries.
-This script should only be run by gn.
-"""
+"""Unpacks pre-built sanitizer-instrumented third-party libraries."""
 
 import os
 import subprocess
 import shutil
 import sys
 
+import download_binaries
 
-def main(archive, stamp_file, target_dir):
+
+def get_archive_name(archive_prefix):
+  return '%s-%s.tgz' % (archive_prefix, download_binaries.get_ubuntu_release())
+
+
+def main(archive_prefix, archive_dir, target_dir, stamp_dir=None):
   shutil.rmtree(target_dir, ignore_errors=True)
 
   os.mkdir(target_dir)
   subprocess.check_call([
       'tar',
       '-zxf',
-      archive,
+      os.path.join(archive_dir, get_archive_name(archive_prefix)),
       '-C',
       target_dir])
+  stamp_file = os.path.join(stamp_dir or target_dir, '%s.txt' % archive_prefix)
   open(stamp_file, 'w').close()
+
+  if stamp_dir:
+    with open(os.path.join(stamp_dir, '%s.d' % archive_prefix), 'w') as f:
+      f.write('%s: %s' % (
+          stamp_file, os.path.join(archive_dir,
+                                   get_archive_name(archive_prefix))))
   return 0
 
 
diff --git a/src/third_party/libxml/BUILD.gn b/src/third_party/libxml/BUILD.gn
index 147455b..28ac4d0 100644
--- a/src/third_party/libxml/BUILD.gn
+++ b/src/third_party/libxml/BUILD.gn
@@ -71,6 +71,8 @@
 
 static_library("libxml") {
   output_name = "libxml2"
+  # Commented out sources are libxml2 files we do not want to include. They are
+  # here to make it easy to identify files which are new.
   sources = [
     "chromium/libxml_utils.cc",
     "chromium/libxml_utils.h",
@@ -78,17 +80,17 @@
     "linux/include/libxml/xmlversion.h",
     "mac/config.h",
     "mac/include/libxml/xmlversion.h",
-    "src/DOCBparser.c",
+    #"src/DOCBparser.c",
     "src/HTMLparser.c",
     "src/HTMLtree.c",
-    "src/SAX.c",
+    #"src/SAX.c",
     "src/SAX2.c",
     "src/buf.c",
     "src/buf.h",
-    "src/c14n.c",
-    "src/catalog.c",
+    #"src/c14n.c",
+    #"src/catalog.c",
     "src/chvalid.c",
-    "src/debugXML.c",
+    #"src/debugXML.c",
     "src/dict.c",
     "src/elfgcchack.h",
     "src/enc.h",
@@ -145,47 +147,45 @@
     "src/include/libxml/xpointer.h",
     "src/include/win32config.h",
     "src/include/wsockcompat.h",
-    "src/legacy.c",
+    #"src/legacy.c",
     "src/libxml.h",
     "src/list.c",
     "src/parser.c",
     "src/parserInternals.c",
     "src/pattern.c",
-    "src/relaxng.c",
+    #"src/relaxng.c",
     "src/save.h",
-    "src/schematron.c",
+    #"src/schematron.c",
     "src/threads.c",
     "src/timsort.h",
     "src/tree.c",
     "src/triodef.h",
     "src/trionan.h",
-
     #"src/trio.c",
     #"src/trio.h",
     #"src/triodef.h",
+    # Note: xpath.c #includes trionan.c
     #"src/trionan.c",
-    #"src/trionan.h",
     #"src/triop.h",
     #"src/triostr.c",
     #"src/triostr.h",
     "src/uri.c",
     "src/valid.c",
-    "src/xinclude.c",
-    "src/xlink.c",
+    #"src/xinclude.c",
+    #"src/xlink.c",
     "src/xmlIO.c",
     "src/xmlmemory.c",
-    "src/xmlmodule.c",
+    #"src/xmlmodule.c",
     "src/xmlreader.c",
-    "src/xmlregexp.c",
+    #"src/xmlregexp.c",
     "src/xmlsave.c",
-    "src/xmlschemas.c",
-    "src/xmlschemastypes.c",
+    #"src/xmlschemas.c",
+    #"src/xmlschemastypes.c",
     "src/xmlstring.c",
     "src/xmlunicode.c",
     "src/xmlwriter.c",
     "src/xpath.c",
-    "src/xpointer.c",
-
+    #"src/xpointer.c",
     #"src/xzlib.c",
     "src/xzlib.h",
     "win32/config.h",
diff --git a/src/third_party/libxml/README.chromium b/src/third_party/libxml/README.chromium
index 0541a47..5de8687 100644
--- a/src/third_party/libxml/README.chromium
+++ b/src/third_party/libxml/README.chromium
@@ -12,16 +12,18 @@
 Modifications:
 - Add helper classes in chromium/libxml_utils.cc and
   chromium/include/libxml/libxml_utils.h.
-- Add second workaround for VS 2015 Update 2 code-gen bug - crbug.com/599427
-- Apply patch contributed here: https://crbug.com/628581#c18
-- Apply patch contributed here: https://crbug.com/620679#c34
-- Apply patch contributed here: https://crbug.com/683629#c9
-- Modify win32/include/libxml/xmlversion.h, mac/include/libxml/xmlversion.h and
-  linux/include/libxml/xmlversion.h to not define these:
-  LIBXML_SCHEMAS_ENABLED, LIBXML_VALID_ENABLED, LIBXML_XINCLUDE_ENABLED
+- Applied these patches in chromium/*.patch:
+  chromium-issue-599427.patch: workaround for VS 2015 Update 2 code-gen bug
+  chromium-issue-620679.patch: See https://crbug.com/620679#c34
+  chromium-issue-628581.patch: See https://crbug.com/628581#c18
+  chromium-issue-683629.patch: See https://crbug.com/683629#c9
+  libxml2-2.9.4-security-CVE-2017-7375-xmlParsePEReference-xxe.patch:
+  See https://crbug.com/708434
+  libxml2-2.9.4-security-CVE-2017-7376-nanohttp-out-of-bounds-write.patch:
+  See https://crbug.com/708433
+  libxml2-2.9.4-security-xpath-nodetab-uaf.patch: See https://crbug.com/705445
+  libxml2-2.9.4-xmlDumpElementContent-null-deref.patch:
+  See https://crbug.com/700750
+- Delete various unused files, see chromium/roll.py
 
-This import was generated by this script:
-https://github.com/dominiccooney/blink-tools/blob/ac9f8e093ec3d00267d67927a37956e5e8993961/roll.py
-
-To import a new snapshot:
-https://docs.google.com/document/d/18gD61GGEUjFiGqFot4WeV97eyyCa17dTg6r6r7r6ZFE/edit
+This import was generated by the chromium/roll.py script.
diff --git a/src/third_party/libxml/chromium/chromium-issue-599427.patch b/src/third_party/libxml/chromium/chromium-issue-599427.patch
new file mode 100644
index 0000000..20e26c5
--- /dev/null
+++ b/src/third_party/libxml/chromium/chromium-issue-599427.patch
@@ -0,0 +1,28 @@
+--- a/xmlstring.c	2016-05-13 17:24:58.870079372 +0900
++++ b/xmlstring.c	2016-04-25 13:58:09.879238595 +0900
+@@ -835,16 +835,20 @@
+     while ( len-- > 0) {
+         if ( !*ptr )
+             break;
+-        if ( (ch = *ptr++) & 0x80)
+-            while ((ch<<=1) & 0x80 ) {
+-		if (*ptr == 0) break;
++        if ( (ch = *ptr++) & 0x80) {
++            // Workaround for an optimization bug in VS 2015 Update 2, remove
++            // once the fix is released. crbug.com/599427
++            // https://connect.microsoft.com/VisualStudio/feedback/details/2582138
++            xmlChar ch2 = ch;
++            while ((ch2<<=1) & 0x80 ) {
+                 ptr++;
+-	    }
++                if (*ptr == 0) break;
++            }
++        }
+     }
+     return (ptr - utf);
+ }
+ 
+-
+ /**
+  * xmlUTF8Strndup:
+  * @utf:  the input UTF8 *
diff --git a/src/third_party/libxml/chromium/chromium-issue-620679.patch b/src/third_party/libxml/chromium/chromium-issue-620679.patch
new file mode 100644
index 0000000..b2c8db9
--- /dev/null
+++ b/src/third_party/libxml/chromium/chromium-issue-620679.patch
@@ -0,0 +1,24 @@
+diff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c
+index e3136123dca6..33786f08354d 100644
+--- a/parser.c
++++ b/parser.c
+@@ -3426,8 +3426,15 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
+         xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
+         return(NULL);
+     }
+-    if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r'))
++    if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) {
++        if (ctxt->input->base > ctxt->input->cur - (len + 1)) {
++            return(NULL);
++        }
+         return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len));
++    }
++    if (ctxt->input->base > ctxt->input->cur - len) {
++        return(NULL);
++    }
+     return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
+ }
+ 
+-- 
+2.12.2.715.g7642488e1d-goog
+
diff --git a/src/third_party/libxml/chromium/chromium-issue-628581.patch b/src/third_party/libxml/chromium/chromium-issue-628581.patch
new file mode 100644
index 0000000..42b7c63
--- /dev/null
+++ b/src/third_party/libxml/chromium/chromium-issue-628581.patch
@@ -0,0 +1,180 @@
+diff --git a/third_party/libxml/src/entities.c b/third_party/libxml/src/entities.c
+index 64808ff64d6a..2851e2d43113 100644
+--- a/entities.c
++++ b/entities.c
+@@ -159,6 +159,7 @@ xmlCreateEntity(xmlDictPtr dict, const xmlChar *name, int type,
+     memset(ret, 0, sizeof(xmlEntity));
+     ret->type = XML_ENTITY_DECL;
+     ret->checked = 0;
++    ret->guard = XML_ENTITY_NOT_BEING_CHECKED;
+ 
+     /*
+      * fill the structure.
+@@ -931,6 +932,7 @@ xmlCopyEntity(xmlEntityPtr ent) {
+ 	cur->orig = xmlStrdup(ent->orig);
+     if (ent->URI != NULL)
+ 	cur->URI = xmlStrdup(ent->URI);
++    cur->guard = 0;
+     return(cur);
+ }
+ 
+diff --git a/third_party/libxml/src/include/libxml/entities.h b/third_party/libxml/src/include/libxml/entities.h
+index 47b4573eba65..012efab294cb 100644
+--- a/include/libxml/entities.h
++++ b/include/libxml/entities.h
+@@ -35,8 +35,13 @@ typedef enum {
+  * and the linkind data needed for the linking in the hash table.
+  */
+ 
++typedef enum {
++  XML_ENTITY_NOT_BEING_CHECKED,
++  XML_ENTITY_BEING_CHECKED              /* entity check is in progress */
++} xmlEntityRecursionGuard;
++
+ struct _xmlEntity {
+-    void           *_private;	        /* application data */
++    void               *_private;	/* application data */
+     xmlElementType          type;       /* XML_ENTITY_DECL, must be second ! */
+     const xmlChar          *name;	/* Entity name */
+     struct _xmlNode    *children;	/* First child link */
+@@ -56,10 +61,11 @@ struct _xmlEntity {
+     struct _xmlEntity     *nexte;	/* unused */
+     const xmlChar           *URI;	/* the full URI as computed */
+     int                    owner;	/* does the entity own the childrens */
+-    int			 checked;	/* was the entity content checked */
+-					/* this is also used to count entities
+-					 * references done from that entity
+-					 * and if it contains '<' */
++    int                  checked;	/* was the entity content checked and */
++					/* l.o. bit: replacement contains '<' */
++					/* remaining bits: one plus count of */
++                                        /* entity references from this entity */
++    xmlEntityRecursionGuard guard;
+ };
+ 
+ /*
+diff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c
+index 53a6b7f0c961..e3136123dca6 100644
+--- a/parser.c
++++ b/parser.c
+@@ -137,18 +137,24 @@ xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size,
+      * This may look absurd but is needed to detect
+      * entities problems
+      */
++    if ((ent != NULL) && (ent->guard == XML_ENTITY_BEING_CHECKED)) {
++        xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
++        return (1);
++    }
+     if ((ent != NULL) && (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
+ 	(ent->content != NULL) && (ent->checked == 0) &&
+ 	(ctxt->errNo != XML_ERR_ENTITY_LOOP)) {
+ 	unsigned long oldnbent = ctxt->nbentities;
+ 	xmlChar *rep;
+ 
++        ent->guard = XML_ENTITY_BEING_CHECKED;
+ 	ent->checked = 1;
+ 
+         ++ctxt->depth;
+ 	rep = xmlStringDecodeEntities(ctxt, ent->content,
+ 				  XML_SUBSTITUTE_REF, 0, 0, 0);
+         --ctxt->depth;
++        ent->guard = XML_ENTITY_NOT_BEING_CHECKED;
+ 	if (ctxt->errNo == XML_ERR_ENTITY_LOOP) {
+ 	    ent->content[0] = 0;
+ 	}
+@@ -7329,23 +7335,28 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
+ 	 * if its replacement text matches the production labeled
+ 	 * content.
+ 	 */
+-	if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
+-	    ctxt->depth++;
+-	    ret = xmlParseBalancedChunkMemoryInternal(ctxt, ent->content,
+-	                                              user_data, &list);
+-	    ctxt->depth--;
+-
+-	} else if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
+-	    ctxt->depth++;
+-	    ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt, ctxt->sax,
+-	                                   user_data, ctxt->depth, ent->URI,
+-					   ent->ExternalID, &list);
+-	    ctxt->depth--;
+-	} else {
+-	    ret = XML_ERR_ENTITY_PE_INTERNAL;
+-	    xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
+-			 "invalid entity type found\n", NULL);
+-	}
++        if (ent->guard == XML_ENTITY_BEING_CHECKED) {
++            ret = XML_ERR_ENTITY_LOOP;
++        } else {
++            ent->guard = XML_ENTITY_BEING_CHECKED;
++            if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
++                ctxt->depth++;
++                ret = xmlParseBalancedChunkMemoryInternal(ctxt, ent->content,
++                                                          user_data, &list);
++                ctxt->depth--;
++            } else if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
++                ctxt->depth++;
++                ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt, ctxt->sax,
++                                               user_data, ctxt->depth, ent->URI,
++                                               ent->ExternalID, &list);
++                ctxt->depth--;
++            } else {
++                ret = XML_ERR_ENTITY_PE_INTERNAL;
++                xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
++                             "invalid entity type found\n", NULL);
++            }
++            ent->guard = XML_ENTITY_NOT_BEING_CHECKED;
++        }
+ 
+ 	/*
+ 	 * Store the number of entities needing parsing for this entity
+@@ -7448,23 +7459,29 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
+ 	    else
+ 		user_data = ctxt->userData;
+ 
+-	    if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
+-		ctxt->depth++;
+-		ret = xmlParseBalancedChunkMemoryInternal(ctxt,
+-				   ent->content, user_data, NULL);
+-		ctxt->depth--;
+-	    } else if (ent->etype ==
+-		       XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
+-		ctxt->depth++;
+-		ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt,
+-			   ctxt->sax, user_data, ctxt->depth,
+-			   ent->URI, ent->ExternalID, NULL);
+-		ctxt->depth--;
+-	    } else {
+-		ret = XML_ERR_ENTITY_PE_INTERNAL;
+-		xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
+-			     "invalid entity type found\n", NULL);
+-	    }
++            if (ent->guard == XML_ENTITY_BEING_CHECKED) {
++                ret = XML_ERR_ENTITY_LOOP;
++            } else {
++                ent->guard = XML_ENTITY_BEING_CHECKED;
++                if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
++                    ctxt->depth++;
++                    ret = xmlParseBalancedChunkMemoryInternal(ctxt,
++                                       ent->content, user_data, NULL);
++                    ctxt->depth--;
++                } else if (ent->etype ==
++                           XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
++                    ctxt->depth++;
++                    ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt,
++                               ctxt->sax, user_data, ctxt->depth,
++                               ent->URI, ent->ExternalID, NULL);
++                    ctxt->depth--;
++                } else {
++                    ret = XML_ERR_ENTITY_PE_INTERNAL;
++                    xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
++                                 "invalid entity type found\n", NULL);
++                }
++                ent->guard = XML_ENTITY_NOT_BEING_CHECKED;
++            }
+ 	    if (ret == XML_ERR_ENTITY_LOOP) {
+ 		xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
+ 		return;
+-- 
+2.12.2.715.g7642488e1d-goog
+
diff --git a/src/third_party/libxml/chromium/chromium-issue-683629.patch b/src/third_party/libxml/chromium/chromium-issue-683629.patch
new file mode 100644
index 0000000..0d06850
--- /dev/null
+++ b/src/third_party/libxml/chromium/chromium-issue-683629.patch
@@ -0,0 +1,16 @@
+Fromdiff --git a/third_party/libxml/src/parser.c b/third_party/libxml/src/parser.c
+index 33786f08354d..745c3da1c72e 100644
+--- a/parser.c
++++ b/parser.c
+@@ -3426,7 +3426,7 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
+         xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
+         return(NULL);
+     }
+-    if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) {
++    if (ctxt->input->cur > ctxt->input->base && (*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) {
+         if (ctxt->input->base > ctxt->input->cur - (len + 1)) {
+             return(NULL);
+         }
+-- 
+2.12.2.715.g7642488e1d-goog
+
diff --git a/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7375-xmlParsePEReference-xxe.patch b/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7375-xmlParsePEReference-xxe.patch
new file mode 100644
index 0000000..5548b88
--- /dev/null
+++ b/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7375-xmlParsePEReference-xxe.patch
@@ -0,0 +1,19 @@
+https://bugzilla.gnome.org/show_bug.cgi?id=780691
+
+--- src/parser.c
++++ src/parser.c
+@@ -8130,6 +8130,14 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
+ 	    if (xmlPushInput(ctxt, input) < 0)
+ 		return;
+ 	} else {
++	    if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
++	        ((ctxt->options & XML_PARSE_NOENT) == 0) &&
++	        ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
++	        ((ctxt->options & XML_PARSE_DTDLOAD) == 0) &&
++	        ((ctxt->options & XML_PARSE_DTDATTR) == 0) &&
++	        (ctxt->replaceEntities == 0) &&
++	        (ctxt->validate == 0))
++	        return;
+ 	    /*
+ 	     * TODO !!!
+ 	     * handle the extra spaces added before and after
diff --git a/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7376-nanohttp-out-of-bounds-write.patch b/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7376-nanohttp-out-of-bounds-write.patch
new file mode 100644
index 0000000..e60fe8f
--- /dev/null
+++ b/src/third_party/libxml/chromium/libxml2-2.9.4-security-CVE-2017-7376-nanohttp-out-of-bounds-write.patch
@@ -0,0 +1,21 @@
+https://bugzilla.gnome.org/show_bug.cgi?id=780690
+
+--- src/uri.c
++++ src/uri.c
+@@ -12,6 +12,7 @@
+ #include "third_party/libxml/src/libxml.h"
+ 
+ #include <string.h>
++#include <limits.h>
+ 
+ #include "third_party/libxml/src/include/libxml/xmlmemory.h"
+ #include "third_party/libxml/src/include/libxml/uri.h"
+@@ -334,7 +335,7 @@ xmlParse3986Port(xmlURIPtr uri, const char **str)
+ 	    cur++;
+ 	}
+ 	if (uri != NULL)
+-	    uri->port = port & INT_MAX; /* port value modulo INT_MAX+1 */
++	    uri->port = port & USHRT_MAX; /* port value modulo USHRT_MAX+1 */
+ 	*str = cur;
+ 	return(0);
+     }
diff --git a/src/third_party/libxml/chromium/libxml2-2.9.4-security-xpath-nodetab-uaf.patch b/src/third_party/libxml/chromium/libxml2-2.9.4-security-xpath-nodetab-uaf.patch
new file mode 100644
index 0000000..ecf9307
--- /dev/null
+++ b/src/third_party/libxml/chromium/libxml2-2.9.4-security-xpath-nodetab-uaf.patch
@@ -0,0 +1,15 @@
+not upstream yet, fix from nmehta@
+see https://docs.google.com/document/d/1-Cd_Yq8MZ7am2ZhKhbDhqZ_L0aLJPBg0w1QLXGVoNmY/edit
+and https://bugs.chromium.org/p/chromium/issues/detail?id=705445
+
+--- src/xpath.c	2016-12-25 17:26:52.000000000 -0800
++++ src/xpath.c	2017-03-30 11:15:41.000000000 -0700
+@@ -4368,7 +4368,7 @@
+     }
+     memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+     ret->type = XPATH_XSLT_TREE;
+-    ret->boolval = 1;
++    ret->boolval = 0;
+     ret->user = (void *) val;
+     ret->nodesetval = xmlXPathNodeSetCreate(val);
+ #ifdef XP_DEBUG_OBJ_USAGE
diff --git a/src/third_party/libxml/chromium/libxml2-2.9.4-xmlDumpElementContent-null-deref.patch b/src/third_party/libxml/chromium/libxml2-2.9.4-xmlDumpElementContent-null-deref.patch
new file mode 100644
index 0000000..ec28c85
--- /dev/null
+++ b/src/third_party/libxml/chromium/libxml2-2.9.4-xmlDumpElementContent-null-deref.patch
@@ -0,0 +1,34 @@
+observed while fuzzing
+
+--- src/valid.c
++++ src/valid.c
+@@ -1172,12 +1172,14 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob)
+ 	    xmlBufferWriteCHAR(buf, content->name);
+ 	    break;
+ 	case XML_ELEMENT_CONTENT_SEQ:
++	    if (content->c1 == NULL) return;
+ 	    if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ 	        (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ 		xmlDumpElementContent(buf, content->c1, 1);
+ 	    else
+ 		xmlDumpElementContent(buf, content->c1, 0);
+             xmlBufferWriteChar(buf, " , ");
++	    if (content->c2 == NULL) return;
+ 	    if ((content->c2->type == XML_ELEMENT_CONTENT_OR) ||
+ 	        ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) &&
+ 		 (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
+@@ -1186,12 +1188,14 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob)
+ 		xmlDumpElementContent(buf, content->c2, 0);
+ 	    break;
+ 	case XML_ELEMENT_CONTENT_OR:
++	    if (content->c1 == NULL) return;
+ 	    if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ 	        (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ 		xmlDumpElementContent(buf, content->c1, 1);
+ 	    else
+ 		xmlDumpElementContent(buf, content->c1, 0);
+             xmlBufferWriteChar(buf, " | ");
++	    if (content->c2 == NULL) return;
+ 	    if ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) ||
+ 	        ((content->c2->type == XML_ELEMENT_CONTENT_OR) &&
+ 		 (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
diff --git a/src/third_party/libxml/chromium/roll.py b/src/third_party/libxml/chromium/roll.py
new file mode 100755
index 0000000..a49dff1
--- /dev/null
+++ b/src/third_party/libxml/chromium/roll.py
@@ -0,0 +1,439 @@
+#!/usr/bin/env python
+
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import argparse
+import os
+import os.path
+import shutil
+import subprocess
+import sys
+import tempfile
+
+# How to patch libxml2 in Chromium:
+#
+# 1. Write a .patch file and add it to third_party/libxml/chromium.
+# 2. Apply the patch in src: patch -p1 <../chromium/foo.patch
+# 3. Add the patch to the list of patches in this file.
+# 4. Update README.chromium with the provenance of the patch.
+# 5. Upload a change with the modified documentation, roll script,
+#    patch, applied patch and any other relevant changes like
+#    regression tests. Go through the usual review and commit process.
+#
+# How to roll libxml2 in Chromium:
+#
+# Prerequisites:
+#
+# 1. Check out Chromium somewhere on Linux, Mac and Windows.
+# 2. On each machine, add the experimental remote named 'wip':
+#    git remote add -f wip \
+#        https://chromium.googlesource.com/experimental/chromium/src
+# 3. On Linux:
+#    a. sudo apt-get install libicu-dev
+#    b. git clone git://git.gnome.org/libxml2 somewhere
+# 4. On Mac, install these MacPorts:
+#    autoconf automake libtool pkgconfig icu
+#
+# Procedure:
+#
+# Warning: This process is destructive. Run it on a clean branch.
+#
+# 1. On Linux, in the libxml2 repo directory:
+#    a. git remote update origin
+#    b. git checkout origin/master
+#
+#    This will be the upstream version of libxml you are rolling to.
+#
+# 2. On Linux, in the Chromium src director:
+#    a. third_party/libxml/chromium/roll.py --linux /path/to/libxml2
+#
+#    If this fails, it may be a patch no longer applies. Reset to
+#    head; modify the patch files, this script, and
+#    README.chromium; then commit the result and run it again.
+#
+#    b. git push -f wip HEAD:refs/wip/$USER/roll_libxml
+#
+# 2. On Windows, in the Chromium src directory:
+#    a. git fetch wip refs/wip/$USER/roll_libxml
+#    b. git checkout FETCH_HEAD
+#    c. third_party\libxml\chromium\roll.py --win32
+#    d. git push -f wip HEAD:refs/wip/$USER/roll_libxml
+#
+# 3. On Mac, in the Chromium src directory:
+#    a. git fetch wip refs/wip/$USER/roll_libxml
+#    b. git checkout -b roll_libxml_nnnn FETCH_HEAD
+#    c. git branch --set-upstream-to origin/master
+#    d. third_party/libxml/chromium/roll.py --mac
+#    e. Make and commit any final changes to README.chromium, BUILD.gn, etc.
+#    f. Complete the code review process as usual: git cl upload -d;
+#       git cl try-results; etc.
+
+PATCHES = [
+    'chromium-issue-599427.patch',
+    'chromium-issue-620679.patch',
+    'chromium-issue-628581.patch',
+    'chromium-issue-683629.patch',
+    'libxml2-2.9.4-security-CVE-2017-7375-xmlParsePEReference-xxe.patch',
+    'libxml2-2.9.4-security-CVE-2017-7376-nanohttp-out-of-bounds-write.patch',
+    'libxml2-2.9.4-security-xpath-nodetab-uaf.patch',
+    'libxml2-2.9.4-xmlDumpElementContent-null-deref.patch',
+]
+
+
+# See libxml2 configure.ac and win32/configure.js to learn what
+# options are available.
+
+# These two sets of options should be in sync. You can check the
+# generated #defines in (win32|mac|linux)/include/libxml.h to confirm
+# this.
+SHARED_XML_CONFIGURE_OPTIONS = [
+    # These options are turned ON
+    ('--with-icu', 'icu=yes'),
+    # These options are turned OFF
+    ('--without-c14n', 'c14n=no'),
+    ('--without-catalog', 'catalog=no'),
+    ('--without-debug', 'xml_debug=no'),
+    ('--without-docbook', 'docb=no'),
+    ('--without-ftp', 'ftp=no'),
+    ('--without-http', 'http=no'),
+    ('--without-iconv', 'iconv=no'),
+    ('--without-legacy', 'legacy=no'),
+    ('--without-lzma', 'lzma=no'),
+    ('--without-mem-debug', 'mem_debug=no'),
+    ('--without-modules', 'modules=no'),
+    ('--without-regexps', 'regexps=no'),
+    ('--without-run-debug', 'run_debug=no'),
+    ('--without-schemas', 'schemas=no'),
+    ('--without-schematron', 'schematron=no'),
+    ('--without-valid', 'valid=no'),
+    ('--without-xinclude', 'xinclude=no'),
+    ('--without-xptr', 'xptr=no'),
+    ('--without-zlib', 'zlib=no'),
+]
+
+
+# These options are only available in configure.ac for Linux and Mac.
+EXTRA_NIX_XML_CONFIGURE_OPTIONS = [
+    '--without-readline',
+    '--without-history',
+]
+
+
+# These options are only available in win32/configure.js for Windows.
+EXTRA_WIN32_XML_CONFIGURE_OPTIONS = [
+    'walker=no',
+]
+
+
+XML_CONFIGURE_OPTIONS = (
+    [option[0] for option in SHARED_XML_CONFIGURE_OPTIONS] +
+    EXTRA_NIX_XML_CONFIGURE_OPTIONS)
+
+
+XML_WIN32_CONFIGURE_OPTIONS = (
+    [option[1] for option in SHARED_XML_CONFIGURE_OPTIONS] +
+    EXTRA_WIN32_XML_CONFIGURE_OPTIONS)
+
+
+FILES_TO_REMOVE = [
+    'src/DOCBparser.c',
+    'src/HACKING',
+    'src/INSTALL.libxml2',
+    'src/MAINTAINERS',
+    'src/Makefile.win',
+    'src/README.cvs-commits',
+    # This is unneeded "legacy" SAX API, even though we enable SAX1.
+    'src/SAX.c',
+    'src/VxWorks',
+    'src/autogen.sh',
+    'src/autom4te.cache',
+    'src/bakefile',
+    'src/build_glob.py',
+    'src/c14n.c',
+    'src/catalog.c',
+    'src/chvalid.def',
+    'src/debugXML.c',
+    'src/doc',
+    'src/example',
+    'src/genChRanges.py',
+    'src/global.data',
+    'src/include/libxml/xmlversion.h',
+    'src/include/libxml/xmlwin32version.h',
+    'src/include/libxml/xmlwin32version.h.in',
+    'src/legacy.c',
+    'src/libxml2.doap',
+    'src/macos/libxml2.mcp.xml.sit.hqx',
+    'src/optim',
+    'src/os400',
+    'src/python',
+    'src/relaxng.c',
+    'src/result',
+    'src/rngparser.c',
+    'src/schematron.c',
+    'src/test',
+    'src/testOOM.c',
+    'src/testOOMlib.c',
+    'src/testOOMlib.h',
+    'src/trio.c',
+    'src/trio.h',
+    'src/triop.h',
+    'src/triostr.c',
+    'src/triostr.h',
+    'src/vms',
+    'src/win32/VC10/config.h',
+    'src/win32/wince',
+    'src/xinclude.c',
+    'src/xlink.c',
+    'src/xml2-config.in',
+    'src/xmlcatalog.c',
+    'src/xmllint.c',
+    'src/xmlmodule.c',
+    'src/xmlregexp.c',
+    'src/xmlschemas.c',
+    'src/xmlschemastypes.c',
+    'src/xpointer.c',
+    'src/xstc',
+    'src/xzlib.c',
+]
+
+
+THIRD_PARTY_LIBXML_SRC = 'third_party/libxml/src'
+
+
+class WorkingDir(object):
+    """"Changes the working directory and resets it on exit."""
+    def __init__(self, path):
+        self.prev_path = os.getcwd()
+        self.path = path
+
+    def __enter__(self):
+        os.chdir(self.path)
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        if exc_value:
+            print('was in %s; %s before that' % (self.path, self.prev_path))
+        os.chdir(self.prev_path)
+
+
+def git(*args):
+    """Runs a git subcommand.
+
+    On Windows this uses the shell because there's a git wrapper
+    batch file in depot_tools.
+
+    Arguments:
+        args: The arguments to pass to git.
+    """
+    command = ['git'] + list(args)
+    subprocess.check_call(command, shell=(os.name == 'nt'))
+
+
+def remove_tracked_and_local_dir(path):
+    """Removes the contents of a directory from git, and the filesystem.
+
+    Arguments:
+        path: The path to remove.
+    """
+    remove_tracked_files([path])
+    shutil.rmtree(path, ignore_errors=True)
+    os.mkdir(path)
+
+
+def remove_tracked_files(files_to_remove):
+    """Removes tracked files from git.
+
+    Arguments:
+        files_to_remove: The files to remove.
+    """
+    files_to_remove = [f for f in files_to_remove if os.path.exists(f)]
+    git('rm', '-rf', *files_to_remove)
+
+
+def sed_in_place(input_filename, program):
+    """Replaces text in a file.
+
+    Arguments:
+        input_filename: The file to edit.
+        program: The sed program to perform edits on the file.
+    """
+    # OS X's sed requires -e
+    subprocess.check_call(['sed', '-i', '-e', program, input_filename])
+
+
+def check_copying(full_path_to_third_party_libxml_src):
+    path = os.path.join(full_path_to_third_party_libxml_src, 'COPYING')
+    if not os.path.exists(path):
+        return
+    with open(path) as f:
+        s = f.read()
+        if 'GNU' in s:
+            raise Exception('check COPYING')
+
+
+def prepare_libxml_distribution(libxml2_repo_path, temp_dir):
+    """Makes a libxml2 distribution.
+
+    Args:
+        libxml2_repo_path: The path to the local clone of the libxml2 repo.
+        temp_dir: A temporary directory to stage the distribution to.
+
+    Returns: A tuple of commit hash and full path to the archive.
+    """
+    # If it was necessary to push from a distribution prepared upstream,
+    # this is the point to inject it: Return the version string and the
+    # distribution tar file.
+
+    # The libxml2 repo we're pulling changes from should not have
+    # local changes. This *should* be a commit that's publicly visible
+    # in the upstream repo; reviewers should check this.
+    check_clean(libxml2_repo_path)
+
+    temp_config_path = os.path.join(temp_dir, 'config')
+    os.mkdir(temp_config_path)
+    temp_src_path = os.path.join(temp_dir, 'src')
+    os.mkdir(temp_src_path)
+
+    with WorkingDir(libxml2_repo_path):
+        commit = subprocess.check_output(
+            ['git', 'log', '-n', '1', '--pretty=format:%H', 'HEAD'])
+        subprocess.check_call(
+            'git archive HEAD | tar -x -C "%s"' % temp_src_path,
+            shell=True)
+    with WorkingDir(temp_src_path):
+        os.remove('.gitignore')
+    with WorkingDir(temp_config_path):
+        subprocess.check_call(['../src/autogen.sh'] + XML_CONFIGURE_OPTIONS)
+        subprocess.check_call(['make', 'dist-all'])
+
+        # Work out what it is called
+        tar_file = subprocess.check_output(
+            '''awk '/PACKAGE =/ {p=$3} /VERSION =/ {v=$3} '''
+            '''END {printf("%s-%s.tar.gz", p, v)}' Makefile''',
+            shell=True)
+        return commit, os.path.abspath(tar_file)
+
+
+def roll_libxml_linux(src_path, libxml2_repo_path):
+    with WorkingDir(src_path):
+        # Export the upstream git repo.
+        try:
+            temp_dir = tempfile.mkdtemp()
+            print('temporary directory: %s' % temp_dir)
+
+            commit, tar_file = prepare_libxml_distribution(libxml2_repo_path,
+                                                           temp_dir)
+
+            # Remove all of the old libxml to ensure only desired cruft
+            # accumulates
+            remove_tracked_and_local_dir(THIRD_PARTY_LIBXML_SRC)
+
+            # Update the libxml repo and export it to the Chromium tree
+            with WorkingDir(THIRD_PARTY_LIBXML_SRC):
+                subprocess.check_call(
+                    'tar xzf %s --strip-components=1' % tar_file,
+                    shell=True)
+        finally:
+            shutil.rmtree(temp_dir)
+
+        with WorkingDir(THIRD_PARTY_LIBXML_SRC):
+            # Put the version number is the README file
+            sed_in_place('../README.chromium',
+                         's/Version: .*$/Version: %s/' % commit)
+
+            for patch in PATCHES:
+                subprocess.check_call('cat ../chromium/%s | patch -p1' % patch,
+                                      shell=True)
+
+            with WorkingDir('../linux'):
+                subprocess.check_call(
+                    ['../src/autogen.sh'] + XML_CONFIGURE_OPTIONS)
+                check_copying(os.getcwd())
+                sed_in_place('config.h', 's/#define HAVE_RAND_R 1//')
+
+            # Add *everything*
+            with WorkingDir('../src'):
+                git('add', '*')
+                git('commit', '-am', '%s libxml, linux' % commit)
+    print('Now push to Windows and run steps there.')
+
+
+def roll_libxml_win32(src_path):
+    with WorkingDir(src_path):
+        # Run the configure script.
+        with WorkingDir(os.path.join(THIRD_PARTY_LIBXML_SRC, 'win32')):
+            subprocess.check_call(
+                ['cscript', '//E:jscript', 'configure.js', 'compiler=msvc'] +
+                XML_WIN32_CONFIGURE_OPTIONS)
+
+            # Add and commit the result.
+            shutil.move('VC10/config.h', '../../win32/config.h')
+            git('add', '../../win32/config.h')
+            shutil.move('../include/libxml/xmlversion.h',
+                        '../../win32/include/libxml/xmlversion.h')
+            git('add', '../../win32/include/libxml/xmlversion.h')
+            git('commit', '-m', 'Windows')
+            git('clean', '-f')
+    print('Now push to Mac and run steps there.')
+
+
+def roll_libxml_mac(src_path):
+    full_path_to_third_party_libxml = os.path.join(
+        src_path, THIRD_PARTY_LIBXML_SRC, '..')
+
+    with WorkingDir(os.path.join(full_path_to_third_party_libxml, 'mac')):
+        subprocess.check_call(['autoreconf', '-i', '../src'])
+        subprocess.check_call(['../src/configure'] + XML_CONFIGURE_OPTIONS)
+        sed_in_place('config.h', 's/#define HAVE_RAND_R 1//')
+
+    with WorkingDir(full_path_to_third_party_libxml):
+        commit = subprocess.check_output(['awk', '/Version:/ {print $2}',
+                                          'README.chromium'])
+        remove_tracked_files(FILES_TO_REMOVE)
+        commit_message = 'Roll libxml to %s' % commit
+        git('commit', '-am', commit_message)
+    print('Now upload for review, etc.')
+
+
+def check_clean(path):
+    with WorkingDir(path):
+        status = subprocess.check_output(['git', 'status', '-s'])
+        if len(status) > 0:
+            raise Exception('repository at %s is not clean' % path)
+
+
+def main():
+    src_dir = os.getcwd()
+    if not os.path.exists(os.path.join(src_dir, 'third_party')):
+        print('error: run this script from the Chromium src directory')
+        sys.exit(1)
+
+    parser = argparse.ArgumentParser(
+        description='Roll the libxml2 dependency in Chromium')
+    platform = parser.add_mutually_exclusive_group(required=True)
+    platform.add_argument('--linux', action='store_true')
+    platform.add_argument('--win32', action='store_true')
+    platform.add_argument('--mac', action='store_true')
+    parser.add_argument(
+        'libxml2_repo_path',
+        type=str,
+        nargs='?',
+        help='The path to the local clone of the libxml2 git repo.')
+    args = parser.parse_args()
+
+    if args.linux:
+        libxml2_repo_path = args.libxml2_repo_path
+        if not libxml2_repo_path:
+            print('Specify the path to the local libxml2 repo clone.')
+            sys.exit(1)
+        libxml2_repo_path = os.path.abspath(libxml2_repo_path)
+        roll_libxml_linux(src_dir, libxml2_repo_path)
+    elif args.win32:
+        roll_libxml_win32(src_dir)
+    elif args.mac:
+        roll_libxml_mac(src_dir)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/third_party/libxml/linux/config.h b/src/third_party/libxml/linux/config.h
index e2371b4..90b7953 100644
--- a/src/third_party/libxml/linux/config.h
+++ b/src/third_party/libxml/linux/config.h
@@ -29,7 +29,7 @@
 #define HAVE_DLFCN_H 1
 
 /* Have dlopen based dso */
-#define HAVE_DLOPEN /**/
+/* #undef HAVE_DLOPEN */
 
 /* Define to 1 if you have the <dl.h> header file. */
 /* #undef HAVE_DL_H */
@@ -98,7 +98,7 @@
 /* #undef HAVE_LIBREADLINE */
 
 /* Have compression library */
-#define HAVE_LIBZ 1
+/* #undef HAVE_LIBZ */
 
 /* Define to 1 if you have the <limits.h> header file. */
 #define HAVE_LIMITS_H 1
@@ -264,7 +264,7 @@
 #define HAVE_VSPRINTF 1
 
 /* Define to 1 if you have the <zlib.h> header file. */
-#define HAVE_ZLIB_H 1
+/* #undef HAVE_ZLIB_H */
 
 /* Define to 1 if you have the `_stat' function. */
 /* #undef HAVE__STAT */
diff --git a/src/third_party/libxml/linux/include/libxml/xmlversion.h b/src/third_party/libxml/linux/include/libxml/xmlversion.h
index 5a59c80..0c73dc9 100644
--- a/src/third_party/libxml/linux/include/libxml/xmlversion.h
+++ b/src/third_party/libxml/linux/include/libxml/xmlversion.h
@@ -210,7 +210,7 @@
  *
  * Whether the deprecated APIs are compiled in for compatibility
  */
-#if 1
+#if 0
 #define LIBXML_LEGACY_ENABLED
 #endif
 
@@ -219,7 +219,7 @@
  *
  * Whether the Canonicalization support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_C14N_ENABLED
 #endif
 
@@ -228,7 +228,7 @@
  *
  * Whether the Catalog support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_CATALOG_ENABLED
 #endif
 
@@ -237,7 +237,7 @@
  *
  * Whether the SGML Docbook support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DOCB_ENABLED
 #endif
 
@@ -255,7 +255,7 @@
  *
  * Whether XPointer is configured in
  */
-#if 1
+#if 0
 #define LIBXML_XPTR_ENABLED
 #endif
 
@@ -300,7 +300,7 @@
  *
  * Whether Debugging module is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DEBUG_ENABLED
 #endif
 
@@ -327,7 +327,7 @@
  *
  * Whether the Unicode related interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_UNICODE_ENABLED
 #endif
 
@@ -336,7 +336,7 @@
  *
  * Whether the regular expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_REGEXP_ENABLED
 #endif
 
@@ -345,7 +345,7 @@
  *
  * Whether the automata interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_AUTOMATA_ENABLED
 #endif
 
@@ -354,7 +354,7 @@
  *
  * Whether the formal expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_EXPR_ENABLED
 #endif
 
@@ -372,7 +372,7 @@
  *
  * Whether the Schematron validation interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_SCHEMATRON_ENABLED
 #endif
 
@@ -381,14 +381,14 @@
  *
  * Whether the module interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_MODULES_ENABLED
 /**
  * LIBXML_MODULE_EXTENSION:
  *
  * the string suffix used by dynamic modules (usually shared libraries)
  */
-#define LIBXML_MODULE_EXTENSION ".so" 
+#define LIBXML_MODULE_EXTENSION "" 
 #endif
 
 /**
@@ -396,7 +396,7 @@
  *
  * Whether the Zlib support is compiled in
  */
-#if 1
+#if 0
 #define LIBXML_ZLIB_ENABLED
 #endif
 
diff --git a/src/third_party/libxml/linux/xml2-config b/src/third_party/libxml/linux/xml2-config
index 2efbfd7..a9147d1 100755
--- a/src/third_party/libxml/linux/xml2-config
+++ b/src/third_party/libxml/linux/xml2-config
@@ -78,7 +78,7 @@
         ;;
 
     --modules)
-       	echo 1
+       	echo 0
        	;;
 
     --libs)
@@ -86,12 +86,12 @@
 	then
 	    if [ "-L${libdir}" = "-L/usr/lib" -o "-L${libdir}" = "-L/usr/lib64" ]
 	    then
-		echo -lxml2 -lz      -licui18n -licuuc -licudata   -lm  -ldl
+		echo -lxml2     -licui18n -licuuc -licudata   -lm  
 	    else
-		echo -L${libdir} -lxml2 -lz      -licui18n -licuuc -licudata   -lm  -ldl
+		echo -L${libdir} -lxml2     -licui18n -licuuc -licudata   -lm  
 	    fi
 	else
-	    echo -L${libdir} -lxml2 -lz      -licui18n -licuuc -licudata   -lm  -ldl 
+	    echo -L${libdir} -lxml2     -licui18n -licuuc -licudata   -lm   
 	fi
        	;;
 
diff --git a/src/third_party/libxml/mac/config.h b/src/third_party/libxml/mac/config.h
index d17857b..16646ec 100644
--- a/src/third_party/libxml/mac/config.h
+++ b/src/third_party/libxml/mac/config.h
@@ -29,7 +29,7 @@
 #define HAVE_DLFCN_H 1
 
 /* Have dlopen based dso */
-#define HAVE_DLOPEN /**/
+/* #undef HAVE_DLOPEN */
 
 /* Define to 1 if you have the <dl.h> header file. */
 /* #undef HAVE_DL_H */
@@ -98,7 +98,7 @@
 /* #undef HAVE_LIBREADLINE */
 
 /* Have compression library */
-#define HAVE_LIBZ 1
+/* #undef HAVE_LIBZ */
 
 /* Define to 1 if you have the <limits.h> header file. */
 #define HAVE_LIMITS_H 1
@@ -264,7 +264,7 @@
 #define HAVE_VSPRINTF 1
 
 /* Define to 1 if you have the <zlib.h> header file. */
-#define HAVE_ZLIB_H 1
+/* #undef HAVE_ZLIB_H */
 
 /* Define to 1 if you have the `_stat' function. */
 /* #undef HAVE__STAT */
diff --git a/src/third_party/libxml/mac/include/libxml/xmlversion.h b/src/third_party/libxml/mac/include/libxml/xmlversion.h
index 5a59c80..0c73dc9 100644
--- a/src/third_party/libxml/mac/include/libxml/xmlversion.h
+++ b/src/third_party/libxml/mac/include/libxml/xmlversion.h
@@ -210,7 +210,7 @@
  *
  * Whether the deprecated APIs are compiled in for compatibility
  */
-#if 1
+#if 0
 #define LIBXML_LEGACY_ENABLED
 #endif
 
@@ -219,7 +219,7 @@
  *
  * Whether the Canonicalization support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_C14N_ENABLED
 #endif
 
@@ -228,7 +228,7 @@
  *
  * Whether the Catalog support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_CATALOG_ENABLED
 #endif
 
@@ -237,7 +237,7 @@
  *
  * Whether the SGML Docbook support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DOCB_ENABLED
 #endif
 
@@ -255,7 +255,7 @@
  *
  * Whether XPointer is configured in
  */
-#if 1
+#if 0
 #define LIBXML_XPTR_ENABLED
 #endif
 
@@ -300,7 +300,7 @@
  *
  * Whether Debugging module is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DEBUG_ENABLED
 #endif
 
@@ -327,7 +327,7 @@
  *
  * Whether the Unicode related interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_UNICODE_ENABLED
 #endif
 
@@ -336,7 +336,7 @@
  *
  * Whether the regular expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_REGEXP_ENABLED
 #endif
 
@@ -345,7 +345,7 @@
  *
  * Whether the automata interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_AUTOMATA_ENABLED
 #endif
 
@@ -354,7 +354,7 @@
  *
  * Whether the formal expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_EXPR_ENABLED
 #endif
 
@@ -372,7 +372,7 @@
  *
  * Whether the Schematron validation interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_SCHEMATRON_ENABLED
 #endif
 
@@ -381,14 +381,14 @@
  *
  * Whether the module interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_MODULES_ENABLED
 /**
  * LIBXML_MODULE_EXTENSION:
  *
  * the string suffix used by dynamic modules (usually shared libraries)
  */
-#define LIBXML_MODULE_EXTENSION ".so" 
+#define LIBXML_MODULE_EXTENSION "" 
 #endif
 
 /**
@@ -396,7 +396,7 @@
  *
  * Whether the Zlib support is compiled in
  */
-#if 1
+#if 0
 #define LIBXML_ZLIB_ENABLED
 #endif
 
diff --git a/src/third_party/libxml/src/DOCBparser.c b/src/third_party/libxml/src/DOCBparser.c
deleted file mode 100644
index f12511b..0000000
--- a/src/third_party/libxml/src/DOCBparser.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * DOCBparser.c : an attempt to parse SGML Docbook documents
- *
- * This is deprecated !!!
- * Code removed with release 2.6.0 it was broken.
- * The doc are expect to be migrated to XML DocBook
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_DOCB_ENABLED
-
-#include <libxml/xmlerror.h>
-#include <libxml/DOCBparser.h>
-
-/**
- * docbEncodeEntities:
- * @out:  a pointer to an array of bytes to store the result
- * @outlen:  the length of @out
- * @in:  a pointer to an array of UTF-8 chars
- * @inlen:  the length of @in
- * @quoteChar: the quote character to escape (' or ") or zero.
- *
- * Take a block of UTF-8 chars in and try to convert it to an ASCII
- * plus SGML entities block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- *     as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-docbEncodeEntities(unsigned char *out ATTRIBUTE_UNUSED,
-                   int *outlen ATTRIBUTE_UNUSED,
-                   const unsigned char *in ATTRIBUTE_UNUSED,
-                   int *inlen ATTRIBUTE_UNUSED,
-                   int quoteChar ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbEncodeEntities() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return(-1);
-}
-
-/**
- * docbParseDocument:
- * @ctxt:  an SGML parser context
- *
- * parse an SGML document (and build a tree if using the standard SAX
- * interface).
- *
- * Returns 0, -1 in case of error. the parser context is augmented
- *                as a result of the parsing.
- */
-
-int
-docbParseDocument(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseDocument() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (xmlParseDocument(ctxt));
-}
-
-/**
- * docbFreeParserCtxt:
- * @ctxt:  an SGML parser context
- *
- * Free all the memory used by a parser context. However the parsed
- * document in ctxt->myDoc is not freed.
- */
-
-void
-docbFreeParserCtxt(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbFreeParserCtxt() deprecated function reached\n");
-        deprecated = 1;
-    }
-    xmlFreeParserCtxt(ctxt);
-}
-
-/**
- * docbParseChunk:
- * @ctxt:  an XML parser context
- * @chunk:  an char array
- * @size:  the size in byte of the chunk
- * @terminate:  last chunk indicator
- *
- * Parse a Chunk of memory
- *
- * Returns zero if no error, the xmlParserErrors otherwise.
- */
-int
-docbParseChunk(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-               const char *chunk ATTRIBUTE_UNUSED,
-	       int size ATTRIBUTE_UNUSED,
-               int terminate ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseChunk() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlParseChunk(ctxt, chunk, size, terminate));
-}
-
-/**
- * docbCreatePushParserCtxt:
- * @sax:  a SAX handler
- * @user_data:  The user data returned on SAX callbacks
- * @chunk:  a pointer to an array of chars
- * @size:  number of chars in the array
- * @filename:  an optional file name or URI
- * @enc:  an optional encoding
- *
- * Create a parser context for using the DocBook SGML parser in push mode
- * To allow content encoding detection, @size should be >= 4
- * The value of @filename is used for fetching external entities
- * and error/warning reports.
- *
- * Returns the new parser context or NULL
- */
-docbParserCtxtPtr
-docbCreatePushParserCtxt(docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
-                         void *user_data ATTRIBUTE_UNUSED,
-                         const char *chunk ATTRIBUTE_UNUSED,
-			 int size ATTRIBUTE_UNUSED,
-			 const char *filename ATTRIBUTE_UNUSED,
-                         xmlCharEncoding enc ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseChunk() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return(xmlCreatePushParserCtxt(sax, user_data, chunk, size, filename));
-}
-
-/**
- * docbSAXParseDoc:
- * @cur:  a pointer to an array of xmlChar
- * @encoding:  a free form C string describing the SGML document encoding, or NULL
- * @sax:  the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * parse an SGML in-memory document and build a tree.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbSAXParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
-                const char *encoding ATTRIBUTE_UNUSED,
-		docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
-                void *userData ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseChunk() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlSAXParseMemoryWithData(sax, (const char *)cur,
-			  xmlStrlen((const xmlChar *) cur), 0,  userData));
-}
-
-/**
- * docbParseDoc:
- * @cur:  a pointer to an array of xmlChar
- * @encoding:  a free form C string describing the SGML document encoding, or NULL
- *
- * parse an SGML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
-             const char *encoding ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseChunk() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlParseDoc(cur));
-}
-
-
-/**
- * docbCreateFileParserCtxt:
- * @filename:  the filename
- * @encoding:  the SGML document encoding, or NULL
- *
- * Create a parser context for a file content.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-docbParserCtxtPtr
-docbCreateFileParserCtxt(const char *filename ATTRIBUTE_UNUSED,
-                         const char *encoding ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbCreateFileParserCtxt() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlCreateFileParserCtxt(filename));
-}
-
-/**
- * docbSAXParseFile:
- * @filename:  the filename
- * @encoding:  a free form C string describing the SGML document encoding, or NULL
- * @sax:  the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * parse an SGML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbSAXParseFile(const char *filename ATTRIBUTE_UNUSED,
-                 const char *encoding ATTRIBUTE_UNUSED,
-                 docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
-		 void *userData ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbSAXParseFile() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlSAXParseFileWithData(sax, filename, 0, userData));
-}
-
-/**
- * docbParseFile:
- * @filename:  the filename
- * @encoding:  a free form C string describing document encoding, or NULL
- *
- * parse a Docbook SGML file and build a tree. Automatic support for
- * ZLIB/Compress compressed document is provided by default if found
- * at compile-time.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbParseFile(const char *filename ATTRIBUTE_UNUSED,
-              const char *encoding ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "docbParseFile() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return (xmlParseFile(filename));
-}
-#define bottom_DOCBparser
-#include "elfgcchack.h"
-#endif /* LIBXML_DOCB_ENABLED */
diff --git a/src/third_party/libxml/src/SAX.c b/src/third_party/libxml/src/SAX.c
deleted file mode 100644
index 292af57..0000000
--- a/src/third_party/libxml/src/SAX.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * SAX.c : Old SAX v1 handlers to build a tree.
- *         Deprecated except for compatibility
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-#include <stdlib.h>
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlIO.h>
-#include <libxml/SAX.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/globals.h>
-#include <libxml/SAX2.h>
-
-#ifdef LIBXML_LEGACY_ENABLED
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * initxmlDefaultSAXHandler:
- * @hdlr:  the SAX handler
- * @warning:  flag if non-zero sets the handler warning procedure
- *
- * Initialize the default XML SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-initxmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr, int warning)
-{
-
-    if(hdlr->initialized == 1)
-	return;
-
-    hdlr->internalSubset = xmlSAX2InternalSubset;
-    hdlr->externalSubset = xmlSAX2ExternalSubset;
-    hdlr->isStandalone = xmlSAX2IsStandalone;
-    hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
-    hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
-    hdlr->resolveEntity = xmlSAX2ResolveEntity;
-    hdlr->getEntity = xmlSAX2GetEntity;
-    hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
-    hdlr->entityDecl = xmlSAX2EntityDecl;
-    hdlr->attributeDecl = xmlSAX2AttributeDecl;
-    hdlr->elementDecl = xmlSAX2ElementDecl;
-    hdlr->notationDecl = xmlSAX2NotationDecl;
-    hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
-    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
-    hdlr->startDocument = xmlSAX2StartDocument;
-    hdlr->endDocument = xmlSAX2EndDocument;
-    hdlr->startElement = xmlSAX2StartElement;
-    hdlr->endElement = xmlSAX2EndElement;
-    hdlr->reference = xmlSAX2Reference;
-    hdlr->characters = xmlSAX2Characters;
-    hdlr->cdataBlock = xmlSAX2CDataBlock;
-    hdlr->ignorableWhitespace = xmlSAX2Characters;
-    hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
-    if (warning == 0)
-	hdlr->warning = NULL;
-    else
-	hdlr->warning = xmlParserWarning;
-    hdlr->error = xmlParserError;
-    hdlr->fatalError = xmlParserError;
-
-    hdlr->initialized = 1;
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-/**
- * inithtmlDefaultSAXHandler:
- * @hdlr:  the SAX handler
- *
- * Initialize the default HTML SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-inithtmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
-{
-    if(hdlr->initialized == 1)
-	return;
-
-    hdlr->internalSubset = xmlSAX2InternalSubset;
-    hdlr->externalSubset = NULL;
-    hdlr->isStandalone = NULL;
-    hdlr->hasInternalSubset = NULL;
-    hdlr->hasExternalSubset = NULL;
-    hdlr->resolveEntity = NULL;
-    hdlr->getEntity = xmlSAX2GetEntity;
-    hdlr->getParameterEntity = NULL;
-    hdlr->entityDecl = NULL;
-    hdlr->attributeDecl = NULL;
-    hdlr->elementDecl = NULL;
-    hdlr->notationDecl = NULL;
-    hdlr->unparsedEntityDecl = NULL;
-    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
-    hdlr->startDocument = xmlSAX2StartDocument;
-    hdlr->endDocument = xmlSAX2EndDocument;
-    hdlr->startElement = xmlSAX2StartElement;
-    hdlr->endElement = xmlSAX2EndElement;
-    hdlr->reference = NULL;
-    hdlr->characters = xmlSAX2Characters;
-    hdlr->cdataBlock = xmlSAX2CDataBlock;
-    hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
-    hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
-    hdlr->comment = xmlSAX2Comment;
-    hdlr->warning = xmlParserWarning;
-    hdlr->error = xmlParserError;
-    hdlr->fatalError = xmlParserError;
-
-    hdlr->initialized = 1;
-}
-
-#endif /* LIBXML_HTML_ENABLED */
-
-#ifdef LIBXML_DOCB_ENABLED
-/**
- * initdocbDefaultSAXHandler:
- * @hdlr:  the SAX handler
- *
- * Initialize the default DocBook SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-initdocbDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
-{
-    if(hdlr->initialized == 1)
-	return;
-
-    hdlr->internalSubset = xmlSAX2InternalSubset;
-    hdlr->externalSubset = NULL;
-    hdlr->isStandalone = xmlSAX2IsStandalone;
-    hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
-    hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
-    hdlr->resolveEntity = xmlSAX2ResolveEntity;
-    hdlr->getEntity = xmlSAX2GetEntity;
-    hdlr->getParameterEntity = NULL;
-    hdlr->entityDecl = xmlSAX2EntityDecl;
-    hdlr->attributeDecl = NULL;
-    hdlr->elementDecl = NULL;
-    hdlr->notationDecl = NULL;
-    hdlr->unparsedEntityDecl = NULL;
-    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
-    hdlr->startDocument = xmlSAX2StartDocument;
-    hdlr->endDocument = xmlSAX2EndDocument;
-    hdlr->startElement = xmlSAX2StartElement;
-    hdlr->endElement = xmlSAX2EndElement;
-    hdlr->reference = xmlSAX2Reference;
-    hdlr->characters = xmlSAX2Characters;
-    hdlr->cdataBlock = NULL;
-    hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
-    hdlr->processingInstruction = NULL;
-    hdlr->comment = xmlSAX2Comment;
-    hdlr->warning = xmlParserWarning;
-    hdlr->error = xmlParserError;
-    hdlr->fatalError = xmlParserError;
-
-    hdlr->initialized = 1;
-}
-
-#endif /* LIBXML_DOCB_ENABLED */
-
-#endif /* LIBXML_SAX1_ENABLED */
-
-#define bottom_SAX
-#include "elfgcchack.h"
-#endif /* LIBXML_LEGACY_ENABLED */
diff --git a/src/third_party/libxml/src/bakefile/Bakefiles.bkgen b/src/third_party/libxml/src/bakefile/Bakefiles.bkgen
deleted file mode 100644
index 5254d49..0000000
--- a/src/third_party/libxml/src/bakefile/Bakefiles.bkgen
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" ?>
-<!-- $Id$ -->
-
-<bakefile-gen>
-    
-    <disable-formats>gnu,dmars,cbx_unix,cbuilderx</disable-formats>
-    <input>libxml2.bkl</input>
-
-    <!-- List of output formats to generate: -->
-    <add-formats>
-        borland,dmars,mingw,msvc,msvc6prj,watcom,cbuilderx,cbx_unix,gnu
-    </add-formats>
-
-
-</bakefile-gen>
\ No newline at end of file
diff --git a/src/third_party/libxml/src/bakefile/Readme.txt b/src/third_party/libxml/src/bakefile/Readme.txt
deleted file mode 100644
index b44d3ac..0000000
--- a/src/third_party/libxml/src/bakefile/Readme.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-
- LIBXML2 build system for Win32 README
- -------------------------------------
-
- In this folder are stored all the files required to compile LIBXML2 with win32 compilers.
- Bakefile (http://bakefile.sourceforge.net) is used as makefile generator.
-
- Supported makefiles:
- - makefile.vc     for Microsoft NMAKE
- - makefile.bcc    for Borland MAKE
- - makefile.wat    for OpenWatcom MAKE
- - makefile.gcc    for MinGW MINGW32-MAKE
- - all DSP & DSW   for Microsoft VisualC++ 6.0 (can be used also with VS.NET AFAIK)
-
- This readme is organized as:
-   1.0 HOWTO compile LIBXML2 using makefiles     <-- for users who want to build the library using *command-line*
-   1.1 HOWTO compile LIBXML2 using an IDE        <-- for users who want to build the library using an *IDE*
-   1.2 HOWTO regenerate makefiles for LIBXML2    <-- for libxml2 mantainers/developers/advanced users
-
- If you just want to compile the library (and the test programs) you should definitely avoid the
- section 1.1 and focus on the 1.0.
- 
-
-
-
-
-
- 1.0 HOWTO compile LIBXML2 using makefiles
- -----------------------------------------
- 
- Choose your preferred compiler among those actually supported (see above) and then run
- 
-                              mycompilermake -fmakefile.makefileext [options]
-
- for a full list of the available options you should open with a notepad (or something like that)
- the makefile you want to use; at the beginning you should see a section which starts as:
-
-     # -------------------------------------------------------------------------
-     # These are configurable options:
-     # -------------------------------------------------------------------------
-
- here you can find all the options actually used by that makefile. 
- They can be customized when running the makefile writing something like:
-
- nmake -fmakefile.vc BUILD=release
- mingw32-make -fmakefile.gcc BUILD=debug ICONV_DIR=c:\myiconv
-
- or they can be permanently changed modifying the makefile.
- That's all: for any problem/compile-error/suggestion, write to 
- frm@users.sourceforge.net with the word "libxml2" in the subject.
-
-
-
-
-
- 1.1 HOWTO compile LIBXML2 using an IDE
- --------------------------------------
- 
- Actually only the Microsoft VisualC++ 6.0 project files are generated.
- In future other Integrated Development Environments (IDEs) will be supported as well.
- 
- With MSVC++ 6.0, you should open the DSW file and then set as the active project the
- "libxml2" project, if you want to build the library or one of the test projects if you
- want to run them.
- Using the command "Build->Set Active Configuration" you can choose one of the predefined
- configuration.
-
-
-
-
-
- 1.2 HOWTO regenerate makefiles for LIBXML2
- ------------------------------------------
- 
- Be sure to have installed Bakefile (http://bakefile.sourceforge.net).
- Just run the "bakefile_gen" command inside the folder containing the "libxml2.bkl" file.
- NOTE: if you want to remove all the makefiles, you can use the "bakefile_gen -c" command.
- 
- The template files used to generate all makefiles are only two:
- - libxml2.bkl      (the main one)
- - Bakefiles.bkgen
- All the other files can be dinamically regenerated.
-
-
-
-
-
- If you have problems with the compilation of LIBXML2 under windows (using one of the supported compiler)
- please write to:
-
-     Francesco Montorsi <frm@users.sourceforge.net>
-
diff --git a/src/third_party/libxml/src/bakefile/libxml2.bkl b/src/third_party/libxml/src/bakefile/libxml2.bkl
deleted file mode 100644
index b241ed2..0000000
--- a/src/third_party/libxml/src/bakefile/libxml2.bkl
+++ /dev/null
@@ -1,749 +0,0 @@
-<?xml version="1.0" ?>
-
-<!-- Author: Francesco Montorsi <frm@users.sourceforge.net>         -->
-<!-- Date: 30/8/2004                                                -->
-<!-- Last revision: 26/1/2005                                       -->
-
-
-<!--                    LIBXML2 BAKEFILE                            -->
-<!--                                                                -->
-<!--    The bakefile used to build the library and the test         -->
-<!--    programs. The makefiles output is put:                      -->
-<!--                                                                -->
-<!--    - in the ..\LIB folder                                      -->
-<!--    - in the ..\BIN folder                                      -->
-<!--                                                                -->
-
-<makefile>
-
-    <using module="datafiles"/>
-    <requires version="0.1.5"/>
-    
-
-    <!-- This is a bakefile, that is, a generic template used to    -->
-    <!-- generate makefiles ALL supported compilers.                -->
-    <!-- To use this project file you need Bakefile installed.      -->
-    <!-- With the command "bakefile_gen" you can regen all the      -->
-    <!-- makefiles and project files.                               -->
-    <!-- See http://bakefile.sourceforge.net for more info.         -->
-
-
-	<!--
-	 This file is divided in:
-		- generic options
-		- generic variables
-		- libxml2 options
-		- libxml2 variables
-		- about config.h creation
-		- templates
-		- libxml2 library target
-		- libxml2 test program targets
-	-->
-
-
-
-    <!--                                                            -->
-    <!--                      GENERIC OPTIONS                       -->
-    <!--                                                            -->
-
-     
-    <!--    This is a standard option that determines               -->
-    <!--    whether the user wants to build this library as         -->
-    <!--    a dll or as a static library.                           -->
-    <option name="SHARED">
-        <values>0,1</values>
-        <values-description>,DLL</values-description>
-        <default-value>0</default-value>
-        <description>If set to zero a STATIC libxml library will be built</description>
-    </option>
-
-    <!-- Configuration for building the bakefile with               -->
-    <!-- unicode strings or not (unicode or ansi).                  -->
-    <option name="UNICODE">
-        <values>0,1</values>
-        <values-description>,Unicode</values-description>
-        <default-value>0</default-value>        
-        <description>Compile Unicode build?</description>
-    </option>
-
-
-    <!-- There are several options that deal with build             -->
-    <!-- types. First, there's this one, BUILD.                     -->
-    <!--                                                            -->
-    <!-- BUILD determines whether or not we want to build           -->
-    <!-- in release or debug mode.  Note that in practice           -->
-    <!-- this means modifying the optimize tag, which by            -->
-    <!-- default is set to off.  In this case debug means           -->
-    <!-- off (no optimizations), and release means speed            -->
-    <!-- (fast with inlining).  There is also a size option         -->
-    <!-- that is not addressed in this example bakefile.            -->
-    <option name="BUILD">
-        <values>debug,release</values>
-        <values-description>Debug,Release</values-description>
-        <default-value>release</default-value>
-        <description>
-            Type of compiled binaries
-        </description>
-    </option>
-
-
-
-    <!--                                                            -->
-    <!--                    GENERIC VARIABLES                       -->
-    <!--                                                            -->
-
-    <!--    Set the ISDLL variable, so that we can use it           -->
-    <!--    inside an if statement later on (options not            -->
-    <!--    allowed in if statements).                              -->
-    <set var="ISDLL" cond="SHARED=='1'">1</set>
-    <set var="ISDLL" cond="SHARED=='0'">0</set>
-
-    <!--    The unicode define we want.  By default bakefile        -->
-    <!--    makes variables an empty string, so if unicode          -->
-    <!--    is not defined $(UNICODE_DEFINE) would expand           -->
-    <!--    to nothing (literally).                                 -->
-    <set var="UNICODE_DEFINE">
-        <if cond="FORMAT!='autoconf' and UNICODE=='1'">_UNICODE</if>
-    </set>    
-    
-    <!--    The debug define we need with win32 compilers           -->    
-    <!--    (on Linux, the wx-config program is used).              -->    
-    <set var="DEBUG_DEFINE">        
-        <if cond="FORMAT!='autoconf' and BUILD=='debug'">
-            __WXDEBUG__
-        </if>    
-    </set>
-
-    <!--    Value we will use later on for the debug-info           -->
-    <!--    tag inside our templates.                               -->
-    <set var="DEBUGINFO">
-        <if cond="BUILD=='debug'">on</if>
-        <if cond="BUILD=='release'">off</if>
-    </set>
-
-    <!--    Value we will use later on for the debug-runtime        -->
-    <!--    tag inside our templates.                               -->
-    <set var="DEBUGRUNTIME">
-        <if cond="BUILD=='debug'">on</if>
-        <if cond="BUILD=='release'">off</if>
-    </set>
-
-    <!--    Value for optimize tag.                                 -->
-    <set var="OPTIMIZEFLAG">
-        <if cond="BUILD=='debug'">off</if>
-        <if cond="BUILD=='release'">speed</if>
-    </set>
-
-    <!-- Level of warnings.  Here we max it out in debug            -->
-    <!-- mode, and turn them off in release mode.                   -->
-    <set var="WARNINGS">
-        <if cond="BUILD=='debug'">max</if>
-        <if cond="BUILD=='release'">no</if>
-    </set>
-
-    <!-- Set MYCPPFLAGS as empty; maybe it will be filled later...  -->
-    <set var="MYCPPFLAGS"></set>
-    <if cond="FORMAT=='mingw' or FORMAT=='autoconf'">
-
-        <!-- With GCC, settings warnings to MAX would force         -->
-        <!-- Bakefile to call GCC with "-W -Wall" which generates   -->
-        <!-- a *lot* of warnings about wxWidgets headers...         -->
-        <!-- this is why "-W -Wall" is here replaced by "-Wall".    -->
-        <set var="WARNINGS">default</set>
-        <set var="MYCPPFLAGS">-Wall</set>
-    </if>
-    
-    
-    
-  
-
-
-    <!--                                                            -->
-    <!--                      LIBXML2 OPTIONS                       -->
-    <!--                                                            -->
-    <!-- Note #1: not all of them are used by win32 makefiles       -->
-	<!--                                                            -->
-	<!-- Note #2: since all combinations of non-path options are    -->
-	<!--          translated into different 'configurations' by     -->
-	<!--          Bakefile when using the MSVC6PRJ output, we must  -->
-	<!--          avoid to create a 10 MB libxml2.dsp file forcing  -->
-	<!--          some options to their default values... this      -->
-	<!--          behaviour can be overridden by the                -->
-	<!--                        FULL_OPTIONS_SUPPORT                -->
-	<!--          variable defined below...                         -->
-    
-	<set var="FULL_OPTIONS_SUPPORT">
-		<if cond="FORMAT=='msvc6prj'">0</if>
-		<if cond="FORMAT!='msvc6prj'">1</if>
-	</set>
-
-    <option name="ICONV_DIR" category="path">
-        <default-value>c:\iconv</default-value>
-        <description>The iconv library main folder</description>
-    </option>
-
-    <option name="WITH_TRIO">
-    	<values>0,1</values>
-        <default-value>0</default-value>
-        <description>Enable TRIO string manipulator</description>
-    </option>
-
-	<!-- see the note #2 -->
-	<if cond="FULL_OPTIONS_SUPPORT=='0'">
-		<set var="WITH_THREADS">native</set>
-	</if>
-	<if cond="FULL_OPTIONS_SUPPORT=='1'">
-		<option name="WITH_THREADS">
-    		<values>no,ctls,native,posix</values>
-			<default-value>native</default-value>
-			<description>Enable thread safety</description>
-		</option>
-    </if>
-
-    <option name="WITH_FTP">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable FTP client</description>
-    </option>
-
-    <option name="WITH_HTTP">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable HTTP client</description>
-    </option>
-
-    <option name="WITH_C14N">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable C14N support</description>
-    </option>
-
-    <option name="WITH_CATALOG">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable catalog support</description>
-    </option>
-
-    <option name="WITH_DOCB">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable DocBook support</description>
-    </option>
-	
-    <option name="WITH_XPATH">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable XPath support</description>
-    </option>
-	
-    <option name="WITH_XPTR">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable XPointer support</description>
-    </option>
-	
-    <option name="WITH_XINCLUDE">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable XInclude support</description>
-    </option>
-	
-	<!-- see the note #2 -->
-	<if cond="FULL_OPTIONS_SUPPORT=='0'">
-		<set var="WITH_ICONV">1</set>
-	</if>
-	<if cond="FULL_OPTIONS_SUPPORT=='1'">
-		<option name="WITH_ICONV">
-    		<values>0,1</values>
-			<default-value>1</default-value>
-			<description>Enable iconv support</description>
-		</option>
-	</if>
-	
-    <option name="WITH_ISO8859X">
-    	<values>0,1</values>
-        <default-value>0</default-value>
-        <description>Enable iso8859x support</description>
-    </option>
-	
-	<!-- see the note #2 -->
-	<if cond="FULL_OPTIONS_SUPPORT=='0'">
-		<set var="WITH_ZLIB">0</set>
-	</if>
-	<if cond="FULL_OPTIONS_SUPPORT=='1'">
-		<option name="WITH_ZLIB">
-    		<values>0,1</values>
-			<default-value>0</default-value>
-			<description>Enable ZLIB support</description>
-		</option>
-	</if>
-	
-    <option name="WITH_REGEXPS">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable regular expressions</description>
-    </option>
-	
-    <option name="WITH_TREE">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable tree api</description>
-    </option>
-	
-    <option name="WITH_READER">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable xmlReader api</description>
-    </option>
-	
-    <option name="WITH_WRITER">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable xmlWriter api</description>
-    </option>
-	
-    <option name="WITH_WALKER">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable xmlDocWalker api</description>
-    </option>    
-	
-    <option name="WITH_PATTERN">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable xmlPattern api</description>
-    </option>
-	
-    <option name="WITH_PUSH">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable push api</description>
-    </option>
-	
-    <option name="WITH_VALID">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable DTD validation support</description>
-    </option>
-	
-    <option name="WITH_SAX1">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable SAX1 api</description>
-    </option>    
-                	
-    <option name="WITH_SCHEMAS">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable XML Schema support</description>
-    </option>
-	
-    <option name="WITH_LEGACY">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable deprecated APIs</description>
-    </option>    
-                	
-    <option name="WITH_OUTPUT">
-    	<values>0,1</values>
-        <default-value>1</default-value>
-        <description>Enable serialization support</description>
-    </option>					
-                	
-    <option name="WITH_PYTHON">
-    	<values>0,1</values>
-        <default-value>0</default-value>
-        <description>Build Python bindings</description>
-    </option>
-
-
- 
-
-    <!--                                                            -->
-    <!--                    LIBXML2 VARIABLES                       -->
-    <!--                                                            -->   
-
-    <!-- Put all the objects files generated by         -->
-    <!-- the compilation in a subfolder of BUILD        -->
-    <set var="BUILDDIR">$(FORMAT)</set>
-    
-    <!-- This variable is set to 1 when the current output writer supports -->
-   	<!-- the __DEFINE_ARG variable. Otherwise it's set to zero. -->
-   	<set var="HAS_DEFINE_ARG">
-   		<if cond="FORMAT!='msvc6prj'">1</if>
-   		<if cond="FORMAT=='msvc6prj'">0</if>   		
-   	</set>
-
-	<!-- The root directory of libxml2 -->
-	<set var="XMLBASEDIR">..</set>
-	
-	<!-- The directory where libxml2' tests will be put -->
-	<set var="XMLTESTDIR">$(XMLBASEDIR)$(DIRSEP)bin</set>
-	
-	<set var="LIBXML_MAJOR_VERSION">2</set>
-	<set var="LIBXML_MINOR_VERSION">6</set>
-	<set var="LIBXML_MICRO_VERSION">16</set>
-	
-	<!-- some defines related to threads -->
-	<set var="THREADS_DEF">
-		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='native'">
-			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_WIN32_THREADS
-		</if>
-		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='ctls'">
-			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_WIN32_THREADS $(__DEFINE_ARG)HAVE_COMPILER_TLS
-		</if>
-		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='posix'">
-			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_PTHREAD_H
-		</if>
-	</set>
-	<if cond="FORMAT=='borland'">
-		<set var="THREADS_DEF">
-			<if cond="WITH_THREADS=='native'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>
-			<if cond="WITH_THREADS=='ctls'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>
-			<if cond="WITH_THREADS=='posix'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>
-		</set>
-	</if>	
-	
-	
-	<!-- some other conditional defines -->
-	<set var="ZLIB_DEF"><if cond="WITH_ZLIB=='1'">HAVE_ZLIB_H</if></set>
-	<set var="DEBUG_DEF"><if cond="BUILD=='debug'">_DEBUG</if></set>
-	<set var="DEBUG_DEF"><if cond="BUILD=='release'">NDEBUG</if></set>
-	
-	<!-- this is very very important when compiling with MINGW: without this line,
-	the test programs (and all the programs built with libxml2 which use xmlFree)
-	won't build because of "undefined references to __xmlFree" -->
-	<set var="STATIC_DEF"><if cond="SHARED=='0'">LIBXML_STATIC</if></set>
-	
-	<!-- some conditional libraries dependencies -->
-	<set var="ICONV_LIB"><if cond="WITH_ICONV=='1'">iconv</if></set>
-	<set var="WSOCK32_LIB"><if cond="WITH_THREADS=='native'">wsock32</if></set>
-	<set var="ZLIB_LIB"><if cond="WITH_ZLIB=='1'">zdll</if></set>
-	<set var="POSIX_LIB"><if cond="WITH_THREADS=='posix'">pthreadVC</if></set>
-	
-	<set var="XMLINCLUDEDIR">$(XMLBASEDIR)$(DIRSEP)include$(DIRSEP)libxml$(DIRSEP)</set>
-
-  
-
- 
-    <!--                                                            -->
-    <!--               ABOUT CONFIG.H HEADER CREATION               -->
-    <!--                                                            -->   
-    
-    <set var="CONFIG_SRCNAME">win32config.h</set>
-    <set var="CONFIG_DSTNAME">config.h</set>
-    
-	<if cond="FORMAT!='msvc6prj' and FORMAT!='autoconf' and FORMAT!='gnu'">
-		<copy-file-to-file id="setup">
-			<!-- On win32 we need to manually copy a default config.h file -->
-			<!-- from the include/mc/msw folder to include/mc			   -->
-			<src>../include/$(CONFIG_SRCNAME)</src>
-			<dst>../$(CONFIG_DSTNAME)</dst>
-			<dependency-of>all</dependency-of>
-
-			<!-- With autoconf, we will use the configure script to translate -->
-			<!-- include/mc/config.h.in to include/mc/config.h and thus we do -->
-			<!-- not need to do anything here...							  -->
-		</copy-file-to-file>
-	</if>
-    
-	<if cond="FORMAT!='msvc6prj'">
-	    
-		<mkdir id="setuplibdir"><dir>$(XMLBASEDIR)$(DIRSEP)lib</dir></mkdir>
-		<mkdir id="setupbindir"><dir>$(XMLBASEDIR)$(DIRSEP)bin</dir></mkdir>
-			
-	    <!-- Creates all output folders -->	
-	    <phony id="setupdirs">
-			<dependency-of>all</dependency-of>	    
-	    	<depends>setuplibdir</depends>
-	    	<depends>setupbindir</depends>
-	    </phony>
-	</if>
-
-    <!-- This defines a tag which includes headers on MSVC          -->
-    <!-- Note that $(value) is stuck in there by bakefile,          -->
-    <!-- and is the value between the beginning and end tag.        -->
-    <define-tag name="headers" rules="dll,lib,exe">
-        <if cond="FORMAT=='msvc6prj'">
-            <msvc-project-files>
-                $(value)
-            </msvc-project-files>
-        </if>
-    </define-tag>
-    		
-	<!-- Creates the following custom build rule for MSVC6PRJ file:
-	     copies ..\include\win32config.h into ..\config.h
-	     NOTE: this tag must be used before the <sources> tag if you want that the configuration
-	           file will be created before any other source file is compiled... -->
-    <define-tag name="msvc-copy-setup-h" rules="dll,lib,action">
-        <if cond="FORMAT=='msvc6prj'">
-	        <headers>$(XMLBASEDIR)\include\$(CONFIG_SRCNAME)</headers>
-	        <set var="__subdir">$(value)</set>
-            <set var="_custom_build_files" append="1">$(XMLBASEDIR)\include\$(CONFIG_SRCNAME)</set>
-            <set var="_custom_build____include_win32config_h">
-Creating the configuration file ..\$(CONFIG_DSTNAME) from ..\include\$(CONFIG_SRCNAME)
-InputPath=..\include\$(CONFIG_SRCNAME)
-
-"..\$(CONFIG_DSTNAME)" : $(DOLLAR)(SOURCE) "$(DOLLAR)(INTDIR)" "$(DOLLAR)(OUTDIR)"
-$(TAB)copy "$(DOLLAR)(InputPath)" ..\$(CONFIG_DSTNAME)
-            </set>
-        </if>
-    </define-tag>
-
- 
-
-
-
-    <!--                                                            -->
-    <!--                          TEMPLATES                         -->
-    <!--                                                            -->   
-
-	<!-- The basic template: used by all the targets -->
-    <template id="base">
-        <if cond="FORMAT=='mingw'">                    
-            <define>HAVE_W32API_H</define>
-            <ldflags>-mthreads</ldflags>
-        </if>
-
-        <cxxflags>$(MYCPPFLAGS)</cxxflags>
-        <warnings>$(WARNINGS)</warnings>
-        <define>$(UNICODE_DEFINE)</define>
-        <optimize>$(OPTIMIZEFLAG)</optimize>
-        <debug-info>$(DEBUGINFO)</debug-info>
-        <debug-runtime-libs>$(DEBUGRUNTIME)</debug-runtime-libs>
-	</template>
-	
-	<!-- The template used both by the library and by the test programs -->
-    <template id="xml2" template="base">
-    
-        <!-- -I & -L equivalents -->
-        <include>$(XMLBASEDIR)$(DIRSEP)include</include>
-        <include>$(ICONV_DIR)$(DIRSEP)include</include>
-        <lib-path>$(ICONV_DIR)$(DIRSEP)lib</lib-path>    
-        
-		<!-- some conditional define flags -->
-        <cflags>$(THREADS_DEF)</cflags>
-		<define>$(ZLIB_DEF)</define>
-		<define>$(DEBUG_DEF)</define>
-		<define>$(STATIC_DEF)</define>
-	
-		<if cond="HAS_DEFINE_ARG=='0'">
-		
-			<!-- we are probably using an IDE output: defaults to WITH_THREADS=='native' -->
-			<define>_REENTRANT</define>
-			<define>HAVE_WIN32_THREADS</define>
-		</if>
-
-		
-		<!-- these must always be defined on win32 -->
-		<define>WIN32</define>		
-		<define>_WINDOWS</define>
-		<define>_MBCS</define>
-
-		<if cond="FORMAT=='borland'">
-			<define>_NO_VCL</define>
-			<define>EILSEQ=2</define>
-		</if>
-    </template>
-    
-	<!-- The template used by libxml2 test programs -->
-	<template id="xml2test" template="xml2">
-        <dirname>$(XMLTESTDIR)</dirname>
-        <app-type>console</app-type>        
-
-        <library>libxml2</library>
-		
-        <sys-lib>$(ICONV_LIB)</sys-lib>
-        <sys-lib>$(WSOCK32_LIB)</sys-lib>
-		<sys-lib>$(ZLIB_LIB)</sys-lib> 
-        <sys-lib>$(POSIX_LIB)</sys-lib>
-	</template>
-
-
-
-
- 
-
-    <!--                                                            -->
-    <!--                  LIBXML2 LIBRARY TARGET                    -->
-    <!--                                                            -->  
-    
-    <lib id="libxml2" template="xml2">
-    	
-    	<!-- this is useful only when using MSVC6PRJ -->
-    	<if cond="FORMAT=='msvc6prj'">
-    		<msvc-copy-setup-h/>
-    		<msvc-file-group>Config headers:*config.h</msvc-file-group>
-    	</if>
-    	<if cond="FORMAT!='msvc6prj'">
-	    	<depends>setup</depends>
-    		<depends>setuplibdir</depends>
-    	</if>
-    	    
-    	<!-- output folder -->
-        <dirname>$(XMLBASEDIR)$(DIRSEP)lib</dirname>
-		
-		<!-- The output name must be "libxml2.lib" with all compilers.
-		     Since mingw format autoadds the "lib" prefix to the library
-			 name, we must intercept that case to avoid to get "liblibxml2.a" -->
-		<if cond="FORMAT!='mingw'">
-	        <libname>libxml2</libname>
-		</if>
-		<if cond="FORMAT=='mingw'">
-	        <libname>xml2</libname>
-		</if>
-		        
-        <!-- the list of source files to compile -->            
-        <sources>
-			$(XMLBASEDIR)$(DIRSEP)c14n.c
-			$(XMLBASEDIR)$(DIRSEP)catalog.c
-			$(XMLBASEDIR)$(DIRSEP)chvalid.c
-			$(XMLBASEDIR)$(DIRSEP)debugXML.c
-			$(XMLBASEDIR)$(DIRSEP)dict.c
-			$(XMLBASEDIR)$(DIRSEP)DOCBparser.c
-			$(XMLBASEDIR)$(DIRSEP)encoding.c
-			$(XMLBASEDIR)$(DIRSEP)entities.c
-			$(XMLBASEDIR)$(DIRSEP)error.c
-			$(XMLBASEDIR)$(DIRSEP)globals.c
-			$(XMLBASEDIR)$(DIRSEP)hash.c
-			$(XMLBASEDIR)$(DIRSEP)HTMLparser.c
-			$(XMLBASEDIR)$(DIRSEP)HTMLtree.c
-			$(XMLBASEDIR)$(DIRSEP)legacy.c
-			$(XMLBASEDIR)$(DIRSEP)list.c
-			$(XMLBASEDIR)$(DIRSEP)nanoftp.c
-			$(XMLBASEDIR)$(DIRSEP)nanohttp.c
-			$(XMLBASEDIR)$(DIRSEP)parser.c
-			$(XMLBASEDIR)$(DIRSEP)parserInternals.c
-			$(XMLBASEDIR)$(DIRSEP)pattern.c
-			$(XMLBASEDIR)$(DIRSEP)relaxng.c
-			$(XMLBASEDIR)$(DIRSEP)SAX2.c
-			$(XMLBASEDIR)$(DIRSEP)SAX.c
-			$(XMLBASEDIR)$(DIRSEP)threads.c
-			$(XMLBASEDIR)$(DIRSEP)tree.c
-			$(XMLBASEDIR)$(DIRSEP)uri.c
-			$(XMLBASEDIR)$(DIRSEP)valid.c
-			$(XMLBASEDIR)$(DIRSEP)xinclude.c
-			$(XMLBASEDIR)$(DIRSEP)xlink.c
-			$(XMLBASEDIR)$(DIRSEP)xmlIO.c
-			$(XMLBASEDIR)$(DIRSEP)xmlmemory.c
-			$(XMLBASEDIR)$(DIRSEP)xmlreader.c
-			$(XMLBASEDIR)$(DIRSEP)xmlregexp.c
-			$(XMLBASEDIR)$(DIRSEP)xmlsave.c
-			$(XMLBASEDIR)$(DIRSEP)xmlschemas.c
-			$(XMLBASEDIR)$(DIRSEP)xmlschemastypes.c
-			$(XMLBASEDIR)$(DIRSEP)xmlunicode.c
-			$(XMLBASEDIR)$(DIRSEP)xmlwriter.c
-			$(XMLBASEDIR)$(DIRSEP)xpath.c
-			$(XMLBASEDIR)$(DIRSEP)xpointer.c
-			$(XMLBASEDIR)$(DIRSEP)xmlstring.c
-        </sources>
-        
-        <!-- the list of header files (for IDE projects) -->
-        <headers>
-			$(XMLINCLUDEDIR)c14n.h
-			$(XMLINCLUDEDIR)catalog.h
-			$(XMLINCLUDEDIR)chvalid.h
-			$(XMLINCLUDEDIR)debugXML.h
-			$(XMLINCLUDEDIR)dict.h
-			$(XMLINCLUDEDIR)DOCBparser.h
-			$(XMLINCLUDEDIR)encoding.h
-			$(XMLINCLUDEDIR)entities.h
-			$(XMLINCLUDEDIR)globals.h
-			$(XMLINCLUDEDIR)hash.h
-			$(XMLINCLUDEDIR)HTMLparser.h
-			$(XMLINCLUDEDIR)HTMLtree.h
-			$(XMLINCLUDEDIR)list.h
-			$(XMLINCLUDEDIR)nanoftp.h
-			$(XMLINCLUDEDIR)nanohttp.h
-			$(XMLINCLUDEDIR)parser.h
-			$(XMLINCLUDEDIR)parserInternals.h
-			$(XMLINCLUDEDIR)pattern.h
-			$(XMLINCLUDEDIR)relaxng.h
-			$(XMLINCLUDEDIR)SAX.h
-			$(XMLINCLUDEDIR)SAX2.h
-			$(XMLINCLUDEDIR)schemasInternals.h
-			$(XMLINCLUDEDIR)threads.h
-			$(XMLINCLUDEDIR)tree.h
-			$(XMLINCLUDEDIR)uri.h
-			$(XMLINCLUDEDIR)valid.h
-			$(XMLINCLUDEDIR)xinclude.h
-			$(XMLINCLUDEDIR)xlink.h
-			$(XMLINCLUDEDIR)xmlautomata.h
-			$(XMLINCLUDEDIR)xmlerror.h
-			$(XMLINCLUDEDIR)xmlexports.h
-			$(XMLINCLUDEDIR)xmlIO.h
-			$(XMLINCLUDEDIR)xmlmemory.h
-			$(XMLINCLUDEDIR)xmlmodule.h
-			$(XMLINCLUDEDIR)xmlreader.h
-			$(XMLINCLUDEDIR)xmlregexp.h
-			$(XMLINCLUDEDIR)xmlsave.h
-			$(XMLINCLUDEDIR)xmlschemas.h
-			$(XMLINCLUDEDIR)xmlschemastypes.h
-			$(XMLINCLUDEDIR)xmlstring.h
-			$(XMLINCLUDEDIR)xmlunicode.h
-			$(XMLINCLUDEDIR)xmlversion.h			
-			$(XMLINCLUDEDIR)xmlwriter.h
-			$(XMLINCLUDEDIR)xpath.h
-			$(XMLINCLUDEDIR)xpathInternals.h
-			$(XMLINCLUDEDIR)xpointer.h
-		</headers>
-
-		<!-- these ones are not inside the include/libxml folder -->
-		<headers>
-			$(XMLBASEDIR)$(DIRSEP)libxml.h
-			$(XMLBASEDIR)$(DIRSEP)triodef.h
-			$(XMLBASEDIR)$(DIRSEP)trionan.h
-			$(XMLBASEDIR)$(DIRSEP)include$(DIRSEP)wsockcompat.h			
-       </headers>
-    </lib>
-
-
-
-    <!--                                                -->
-    <!--               LIBXML2 test programs            -->
-    <!--                                                -->
-	
-	<set var="BUILD_ALL_TESTS">
-
-		<!-- when using full options support with MSVC6PRJ we should
-		     avoid to create all the DSP files required for the test
-			 programs: they would take a _lot_ of space !! -->
-		<if cond="FORMAT=='msvc6prj' and FULL_OPTIONS_SUPPORT=='1'">0</if>
-
-		<!-- when creating a makefile or using MSVC6PRJ with limited
-		     options support, then we can build all the tests safely -->
-		<if cond="FORMAT!='msvc6prj' or FULL_OPTIONS_SUPPORT=='0'">1</if>
-
-	</set>
-
-    <if cond="BUILD_ALL_TESTS=='1'">
-
-		<exe id="testAutomata" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testAutomata.c</sources></exe>
-		<exe id="testC14N" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testC14N.c</sources></exe>
-		<exe id="testHTML" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testHTML.c</sources></exe>
-		<exe id="testReader" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testReader.c</sources></exe>
-		<exe id="testRegexp" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testRegexp.c</sources></exe>
-		<exe id="testRelax" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testRelax.c</sources></exe>
-		<exe id="testSax" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testSax.c</sources></exe>
-		<exe id="testSchemas" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testSchemas.c</sources></exe>
-		<exe id="testURI" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testURI.c</sources></exe>
-		<exe id="testXPath" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testXPath.c</sources></exe>
-		<exe id="xmllint" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)xmllint.c</sources></exe>
-
-		<if cond="FORMAT=='autoconf'">
-			<exe id="testdso" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testdso.c</sources></exe>
-		</if>
-
-	<!-- FIXME:
-		<exe id="testModule" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testModule.c</sources></exe>
-
-		<if cond="WITH_THREADS=='posix'">
-			<exe id="testThreads" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreads.c</sources></exe>
-		</if>
-		<if cond="WITH_THREADS=='ctls' or WITH_THREADS=='native'">
-			<exe id="testThreadsWin32" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreadsWin32.c</sources></exe>
-		</if>
-	-->
-	</if>
-
-</makefile>
diff --git a/src/third_party/libxml/src/c14n.c b/src/third_party/libxml/src/c14n.c
deleted file mode 100644
index ca77f92..0000000
--- a/src/third_party/libxml/src/c14n.c
+++ /dev/null
@@ -1,2238 +0,0 @@
-/*
- * "Canonical XML" implementation
- * http://www.w3.org/TR/xml-c14n
- *
- * "Exclusive XML Canonicalization" implementation
- * http://www.w3.org/TR/xml-exc-c14n
- *
- * See Copyright for the status of this software.
- *
- * Author: Aleksey Sanin <aleksey@aleksey.com>
- */
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_C14N_ENABLED
-#ifdef LIBXML_OUTPUT_ENABLED
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/c14n.h>
-
-#include "buf.h"
-
-/************************************************************************
- *									*
- *		Some declaration better left private ATM		*
- *									*
- ************************************************************************/
-
-typedef enum {
-    XMLC14N_BEFORE_DOCUMENT_ELEMENT = 0,
-    XMLC14N_INSIDE_DOCUMENT_ELEMENT = 1,
-    XMLC14N_AFTER_DOCUMENT_ELEMENT = 2
-} xmlC14NPosition;
-
-typedef struct _xmlC14NVisibleNsStack {
-    int nsCurEnd;           /* number of nodes in the set */
-    int nsPrevStart;        /* the begginning of the stack for previous visible node */
-    int nsPrevEnd;          /* the end of the stack for previous visible node */
-    int nsMax;              /* size of the array as allocated */
-    xmlNsPtr	*nsTab;	    /* array of ns in no particular order */
-    xmlNodePtr	*nodeTab;   /* array of nodes in no particular order */
-} xmlC14NVisibleNsStack, *xmlC14NVisibleNsStackPtr;
-
-typedef struct _xmlC14NCtx {
-    /* input parameters */
-    xmlDocPtr doc;
-    xmlC14NIsVisibleCallback is_visible_callback;
-    void* user_data;
-    int with_comments;
-    xmlOutputBufferPtr buf;
-
-    /* position in the XML document */
-    xmlC14NPosition pos;
-    int parent_is_doc;
-    xmlC14NVisibleNsStackPtr ns_rendered;
-
-    /* C14N mode */
-    xmlC14NMode mode;
-
-    /* exclusive canonicalization */
-    xmlChar **inclusive_ns_prefixes;
-
-    /* error number */
-    int error;
-} xmlC14NCtx, *xmlC14NCtxPtr;
-
-static xmlC14NVisibleNsStackPtr	xmlC14NVisibleNsStackCreate	(void);
-static void     xmlC14NVisibleNsStackDestroy	(xmlC14NVisibleNsStackPtr cur);
-static void     xmlC14NVisibleNsStackAdd	    (xmlC14NVisibleNsStackPtr cur,
-                                                 xmlNsPtr ns,
-                                                 xmlNodePtr node);
-static void			xmlC14NVisibleNsStackSave	(xmlC14NVisibleNsStackPtr cur,
-								 xmlC14NVisibleNsStackPtr state);
-static void			xmlC14NVisibleNsStackRestore	(xmlC14NVisibleNsStackPtr cur,
-								 xmlC14NVisibleNsStackPtr state);
-static void			xmlC14NVisibleNsStackShift	(xmlC14NVisibleNsStackPtr cur);
-static int			xmlC14NVisibleNsStackFind	(xmlC14NVisibleNsStackPtr cur,
-								 xmlNsPtr ns);
-static int			xmlExcC14NVisibleNsStackFind	(xmlC14NVisibleNsStackPtr cur,
-								 xmlNsPtr ns,
-								 xmlC14NCtxPtr ctx);
-
-static int			xmlC14NIsNodeInNodeset		(xmlNodeSetPtr nodes,
-								 xmlNodePtr node,
-								 xmlNodePtr parent);
-
-
-
-static int xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur);
-static int xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur);
-typedef enum {
-    XMLC14N_NORMALIZE_ATTR = 0,
-    XMLC14N_NORMALIZE_COMMENT = 1,
-    XMLC14N_NORMALIZE_PI = 2,
-    XMLC14N_NORMALIZE_TEXT = 3
-} xmlC14NNormalizationMode;
-
-static xmlChar *xmlC11NNormalizeString(const xmlChar * input,
-                                       xmlC14NNormalizationMode mode);
-
-#define	xmlC11NNormalizeAttr( a ) \
-    xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
-#define	xmlC11NNormalizeComment( a ) \
-    xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
-#define	xmlC11NNormalizePI( a )	\
-    xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
-#define	xmlC11NNormalizeText( a ) \
-    xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
-
-#define	xmlC14NIsVisible( ctx, node, parent ) \
-     (((ctx)->is_visible_callback != NULL) ? \
-	(ctx)->is_visible_callback((ctx)->user_data, \
-		(xmlNodePtr)(node), (xmlNodePtr)(parent)) : 1)
-
-#define	xmlC14NIsExclusive( ctx ) \
-    ( (ctx)->mode == XML_C14N_EXCLUSIVE_1_0 )
-
-/************************************************************************
- *									*
- *		Some factorized error routines				*
- *									*
- ************************************************************************/
-
-/**
- * xmlC14NErrMemory:
- * @extra:  extra informations
- *
- * Handle a redefinition of memory error
- */
-static void
-xmlC14NErrMemory(const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlC14NErrParam:
- * @extra:  extra informations
- *
- * Handle a redefinition of param error
- */
-static void
-xmlC14NErrParam(const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_ERR_INTERNAL_ERROR, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Invalid parameter : %s\n", extra);
-}
-
-/**
- * xmlC14NErrInternal:
- * @extra:  extra informations
- *
- * Handle a redefinition of internal error
- */
-static void
-xmlC14NErrInternal(const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_ERR_INTERNAL_ERROR, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Internal error : %s\n", extra);
-}
-
-/**
- * xmlC14NErrInvalidNode:
- * @extra:  extra informations
- *
- * Handle a redefinition of invalid node error
- */
-static void
-xmlC14NErrInvalidNode(const char *node_type, const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_C14N_INVALID_NODE, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Node %s is invalid here : %s\n", node_type, extra);
-}
-
-/**
- * xmlC14NErrUnknownNode:
- * @extra:  extra informations
- *
- * Handle a redefinition of unknown node error
- */
-static void
-xmlC14NErrUnknownNode(int node_type, const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_C14N_UNKNOW_NODE, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Unknown node type %d found : %s\n", node_type, extra);
-}
-
-/**
- * xmlC14NErrRelativeNamespace:
- * @extra:  extra informations
- *
- * Handle a redefinition of relative namespace error
- */
-static void
-xmlC14NErrRelativeNamespace(const char *ns_uri)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
-		    XML_C14N_RELATIVE_NAMESPACE, XML_ERR_ERROR, NULL, 0, NULL,
-		    NULL, NULL, 0, 0,
-		    "Relative namespace UR is invalid here : %s\n", ns_uri);
-}
-
-
-
-/**
- * xmlC14NErr:
- * @ctxt:  a C14N evaluation context
- * @node:  the context node
- * @error:  the erorr code
- * @msg:  the message
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlC14NErr(xmlC14NCtxPtr ctxt, xmlNodePtr node, int error,
-           const char * msg)
-{
-    if (ctxt != NULL)
-        ctxt->error = error;
-    __xmlRaiseError(NULL, NULL, NULL,
-		    ctxt, node, XML_FROM_C14N, error,
-		    XML_ERR_ERROR, NULL, 0,
-		    NULL, NULL, NULL, 0, 0, "%s", msg);
-}
-
-/************************************************************************
- *									*
- *		The implementation internals				*
- *									*
- ************************************************************************/
-#define XML_NAMESPACES_DEFAULT		16
-
-static int
-xmlC14NIsNodeInNodeset(xmlNodeSetPtr nodes, xmlNodePtr node, xmlNodePtr parent) {
-    if((nodes != NULL) && (node != NULL)) {
-	if(node->type != XML_NAMESPACE_DECL) {
-	    return(xmlXPathNodeSetContains(nodes, node));
-	} else {
-	    xmlNs ns;
-
-	    memcpy(&ns, node, sizeof(ns));
-
-	    /* this is a libxml hack! check xpath.c for details */
-	    if((parent != NULL) && (parent->type == XML_ATTRIBUTE_NODE)) {
-		ns.next = (xmlNsPtr)parent->parent;
-	    } else {
-		ns.next = (xmlNsPtr)parent;
-	    }
-
-	    /*
-	     * If the input is an XPath node-set, then the node-set must explicitly
-	     * contain every node to be rendered to the canonical form.
-	     */
-	    return(xmlXPathNodeSetContains(nodes, (xmlNodePtr)&ns));
-	}
-    }
-    return(1);
-}
-
-static xmlC14NVisibleNsStackPtr
-xmlC14NVisibleNsStackCreate(void) {
-    xmlC14NVisibleNsStackPtr ret;
-
-    ret = (xmlC14NVisibleNsStackPtr) xmlMalloc(sizeof(xmlC14NVisibleNsStack));
-    if (ret == NULL) {
-        xmlC14NErrMemory("creating namespaces stack");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlC14NVisibleNsStack));
-    return(ret);
-}
-
-static void
-xmlC14NVisibleNsStackDestroy(xmlC14NVisibleNsStackPtr cur) {
-    if(cur == NULL) {
-        xmlC14NErrParam("destroying namespaces stack");
-        return;
-    }
-    if(cur->nsTab != NULL) {
-	memset(cur->nsTab, 0, cur->nsMax * sizeof(xmlNsPtr));
-	xmlFree(cur->nsTab);
-    }
-    if(cur->nodeTab != NULL) {
-	memset(cur->nodeTab, 0, cur->nsMax * sizeof(xmlNodePtr));
-	xmlFree(cur->nodeTab);
-    }
-    memset(cur, 0, sizeof(xmlC14NVisibleNsStack));
-    xmlFree(cur);
-
-}
-
-static void
-xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node) {
-    if((cur == NULL) ||
-       ((cur->nsTab == NULL) && (cur->nodeTab != NULL)) ||
-       ((cur->nsTab != NULL) && (cur->nodeTab == NULL))) {
-        xmlC14NErrParam("adding namespace to stack");
-	return;
-    }
-
-    if ((cur->nsTab == NULL) && (cur->nodeTab == NULL)) {
-        cur->nsTab = (xmlNsPtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
-        cur->nodeTab = (xmlNodePtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
-	if ((cur->nsTab == NULL) || (cur->nodeTab == NULL)) {
-	    xmlC14NErrMemory("adding node to stack");
-	    return;
-	}
-	memset(cur->nsTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
-	memset(cur->nodeTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
-        cur->nsMax = XML_NAMESPACES_DEFAULT;
-    } else if(cur->nsMax == cur->nsCurEnd) {
-	void *tmp;
-	int tmpSize;
-
-	tmpSize = 2 * cur->nsMax;
-	tmp = xmlRealloc(cur->nsTab, tmpSize * sizeof(xmlNsPtr));
-	if (tmp == NULL) {
-	    xmlC14NErrMemory("adding node to stack");
-	    return;
-	}
-	cur->nsTab = (xmlNsPtr*)tmp;
-
-	tmp = xmlRealloc(cur->nodeTab, tmpSize * sizeof(xmlNodePtr));
-	if (tmp == NULL) {
-	    xmlC14NErrMemory("adding node to stack");
-	    return;
-	}
-	cur->nodeTab = (xmlNodePtr*)tmp;
-
-	cur->nsMax = tmpSize;
-    }
-    cur->nsTab[cur->nsCurEnd] = ns;
-    cur->nodeTab[cur->nsCurEnd] = node;
-
-    ++cur->nsCurEnd;
-}
-
-static void
-xmlC14NVisibleNsStackSave(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
-    if((cur == NULL) || (state == NULL)) {
-        xmlC14NErrParam("saving namespaces stack");
-	return;
-    }
-
-    state->nsCurEnd = cur->nsCurEnd;
-    state->nsPrevStart = cur->nsPrevStart;
-    state->nsPrevEnd = cur->nsPrevEnd;
-}
-
-static void
-xmlC14NVisibleNsStackRestore(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
-    if((cur == NULL) || (state == NULL)) {
-        xmlC14NErrParam("restoring namespaces stack");
-	return;
-    }
-    cur->nsCurEnd = state->nsCurEnd;
-    cur->nsPrevStart = state->nsPrevStart;
-    cur->nsPrevEnd = state->nsPrevEnd;
-}
-
-static void
-xmlC14NVisibleNsStackShift(xmlC14NVisibleNsStackPtr cur) {
-    if(cur == NULL) {
-        xmlC14NErrParam("shifting namespaces stack");
-	return;
-    }
-    cur->nsPrevStart = cur->nsPrevEnd;
-    cur->nsPrevEnd = cur->nsCurEnd;
-}
-
-static int
-xmlC14NStrEqual(const xmlChar *str1, const xmlChar *str2) {
-    if (str1 == str2) return(1);
-    if (str1 == NULL) return((*str2) == '\0');
-    if (str2 == NULL) return((*str1) == '\0');
-    do {
-	if (*str1++ != *str2) return(0);
-    } while (*str2++);
-    return(1);
-}
-
-/**
- * xmlC14NVisibleNsStackFind:
- * @ctx:		the C14N context
- * @ns:			the namespace to check
- *
- * Checks whether the given namespace was already rendered or not
- *
- * Returns 1 if we already wrote this namespace or 0 otherwise
- */
-static int
-xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
-{
-    int i;
-    const xmlChar *prefix;
-    const xmlChar *href;
-    int has_empty_ns;
-
-    if(cur == NULL) {
-        xmlC14NErrParam("searching namespaces stack (c14n)");
-        return (0);
-    }
-
-    /*
-     * if the default namespace xmlns="" is not defined yet then
-     * we do not want to print it out
-     */
-    prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
-    href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
-    has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
-
-    if (cur->nsTab != NULL) {
-	int start = (has_empty_ns) ? 0 : cur->nsPrevStart;
-        for (i = cur->nsCurEnd - 1; i >= start; --i) {
-            xmlNsPtr ns1 = cur->nsTab[i];
-
-	    if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
-		return(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL));
-	    }
-        }
-    }
-    return(has_empty_ns);
-}
-
-static int
-xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx) {
-    int i;
-    const xmlChar *prefix;
-    const xmlChar *href;
-    int has_empty_ns;
-
-    if(cur == NULL) {
-        xmlC14NErrParam("searching namespaces stack (exc c14n)");
-        return (0);
-    }
-
-    /*
-     * if the default namespace xmlns="" is not defined yet then
-     * we do not want to print it out
-     */
-    prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
-    href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
-    has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
-
-    if (cur->nsTab != NULL) {
-	int start = 0;
-        for (i = cur->nsCurEnd - 1; i >= start; --i) {
-            xmlNsPtr ns1 = cur->nsTab[i];
-
-	    if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
-		if(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)) {
-		    return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i]));
-		} else {
-		    return(0);
-		}
-	    }
-        }
-    }
-    return(has_empty_ns);
-}
-
-
-
-
-/**
- * xmlC14NIsXmlNs:
- * @ns:		the namespace to check
- *
- * Checks whether the given namespace is a default "xml:" namespace
- * with href="http://www.w3.org/XML/1998/namespace"
- *
- * Returns 1 if the node is default or 0 otherwise
- */
-
-/* todo: make it a define? */
-static int
-xmlC14NIsXmlNs(xmlNsPtr ns)
-{
-    return ((ns != NULL) &&
-            (xmlStrEqual(ns->prefix, BAD_CAST "xml")) &&
-            (xmlStrEqual(ns->href, XML_XML_NAMESPACE)));
-}
-
-
-/**
- * xmlC14NNsCompare:
- * @ns1:		the pointer to first namespace
- * @ns2:		the pointer to second namespace
- *
- * Compares the namespaces by names (prefixes).
- *
- * Returns -1 if ns1 < ns2, 0 if ns1 == ns2 or 1 if ns1 > ns2.
- */
-static int
-xmlC14NNsCompare(xmlNsPtr ns1, xmlNsPtr ns2)
-{
-    if (ns1 == ns2)
-        return (0);
-    if (ns1 == NULL)
-        return (-1);
-    if (ns2 == NULL)
-        return (1);
-
-    return (xmlStrcmp(ns1->prefix, ns2->prefix));
-}
-
-
-/**
- * xmlC14NPrintNamespaces:
- * @ns:			the pointer to namespace
- * @ctx:		the C14N context
- *
- * Prints the given namespace to the output buffer from C14N context.
- *
- * Returns 1 on success or 0 on fail.
- */
-static int
-xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx)
-{
-
-    if ((ns == NULL) || (ctx == NULL)) {
-        xmlC14NErrParam("writing namespaces");
-        return 0;
-    }
-
-    if (ns->prefix != NULL) {
-        xmlOutputBufferWriteString(ctx->buf, " xmlns:");
-        xmlOutputBufferWriteString(ctx->buf, (const char *) ns->prefix);
-        xmlOutputBufferWriteString(ctx->buf, "=");
-    } else {
-        xmlOutputBufferWriteString(ctx->buf, " xmlns=");
-    }
-    if(ns->href != NULL) {
-	xmlBufWriteQuotedString(ctx->buf->buffer, ns->href);
-    } else {
-    	xmlOutputBufferWriteString(ctx->buf, "\"\"");
-    }
-    return (1);
-}
-
-/**
- * xmlC14NProcessNamespacesAxis:
- * @ctx:		the C14N context
- * @node:		the current node
- *
- * Prints out canonical namespace axis of the current node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Namespace Axis
- * Consider a list L containing only namespace nodes in the
- * axis and in the node-set in lexicographic order (ascending). To begin
- * processing L, if the first node is not the default namespace node (a node
- * with no namespace URI and no local name), then generate a space followed
- * by xmlns="" if and only if the following conditions are met:
- *    - the element E that owns the axis is in the node-set
- *    - The nearest ancestor element of E in the node-set has a default
- *	    namespace node in the node-set (default namespace nodes always
- *      have non-empty values in XPath)
- * The latter condition eliminates unnecessary occurrences of xmlns="" in
- * the canonical form since an element only receives an xmlns="" if its
- * default namespace is empty and if it has an immediate parent in the
- * canonical form that has a non-empty default namespace. To finish
- * processing  L, simply process every namespace node in L, except omit
- * namespace node with local name xml, which defines the xml prefix,
- * if its string value is http://www.w3.org/XML/1998/namespace.
- *
- * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
- * Canonical XML applied to a document subset requires the search of the
- * ancestor nodes of each orphan element node for attributes in the xml
- * namespace, such as xml:lang and xml:space. These are copied into the
- * element node except if a declaration of the same attribute is already
- * in the attribute axis of the element (whether or not it is included in
- * the document subset). This search and copying are omitted from the
- * Exclusive XML Canonicalization method.
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
-    xmlNodePtr n;
-    xmlNsPtr ns, tmp;
-    xmlListPtr list;
-    int already_rendered;
-    int has_empty_ns = 0;
-
-    if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
-        xmlC14NErrParam("processing namespaces axis (c14n)");
-        return (-1);
-    }
-
-    /*
-     * Create a sorted list to store element namespaces
-     */
-    list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
-    if (list == NULL) {
-        xmlC14NErrInternal("creating namespaces list (c14n)");
-        return (-1);
-    }
-
-    /* check all namespaces */
-    for(n = cur; n != NULL; n = n->parent) {
-	for(ns = n->nsDef; ns != NULL; ns = ns->next) {
-	    tmp = xmlSearchNs(cur->doc, cur, ns->prefix);
-
-	    if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
-		already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
-		if(visible) {
-	    xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
-		}
-		if(!already_rendered) {
-		    xmlListInsert(list, ns);
-		}
-		if(xmlStrlen(ns->prefix) == 0) {
-		    has_empty_ns = 1;
-		}
-	    }
-	}
-    }
-
-    /**
-     * if the first node is not the default namespace node (a node with no
-     * namespace URI and no local name), then generate a space followed by
-     * xmlns="" if and only if the following conditions are met:
-     *  - the element E that owns the axis is in the node-set
-     *  - the nearest ancestor element of E in the node-set has a default
-     *     namespace node in the node-set (default namespace nodes always
-     *     have non-empty values in XPath)
-     */
-    if(visible && !has_empty_ns) {
-        static xmlNs ns_default;
-
-        memset(&ns_default, 0, sizeof(ns_default));
-        if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
-	    xmlC14NPrintNamespaces(&ns_default, ctx);
-	}
-    }
-
-
-    /*
-     * print out all elements from list
-     */
-    xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
-
-    /*
-     * Cleanup
-     */
-    xmlListDelete(list);
-    return (0);
-}
-
-
-/**
- * xmlExcC14NProcessNamespacesAxis:
- * @ctx:		the C14N context
- * @node:		the current node
- *
- * Prints out exclusive canonical namespace axis of the current node to the
- * buffer from C14N context as follows
- *
- * Exclusive XML Canonicalization
- * http://www.w3.org/TR/xml-exc-c14n
- *
- * If the element node is in the XPath subset then output the node in
- * accordance with Canonical XML except for namespace nodes which are
- * rendered as follows:
- *
- * 1. Render each namespace node iff:
- *    * it is visibly utilized by the immediate parent element or one of
- *      its attributes, or is present in InclusiveNamespaces PrefixList, and
- *    * its prefix and value do not appear in ns_rendered. ns_rendered is
- *      obtained by popping the state stack in order to obtain a list of
- *      prefixes and their values which have already been rendered by
- *      an output ancestor of the namespace node's parent element.
- * 2. Append the rendered namespace node to the list ns_rendered of namespace
- * nodes rendered by output ancestors. Push ns_rendered on state stack and
- * recurse.
- * 3. After the recursion returns, pop thestate stack.
- *
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
-    xmlNsPtr ns;
-    xmlListPtr list;
-    xmlAttrPtr attr;
-    int already_rendered;
-    int has_empty_ns = 0;
-    int has_visibly_utilized_empty_ns = 0;
-    int has_empty_ns_in_inclusive_list = 0;
-
-    if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
-        xmlC14NErrParam("processing namespaces axis (exc c14n)");
-        return (-1);
-    }
-
-    if(!xmlC14NIsExclusive(ctx)) {
-        xmlC14NErrParam("processing namespaces axis (exc c14n)");
-        return (-1);
-
-    }
-
-    /*
-     * Create a sorted list to store element namespaces
-     */
-    list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
-    if (list == NULL) {
-        xmlC14NErrInternal("creating namespaces list (exc c14n)");
-        return (-1);
-    }
-
-    /*
-     * process inclusive namespaces:
-     * All namespace nodes appearing on inclusive ns list are
-     * handled as provided in Canonical XML
-     */
-    if(ctx->inclusive_ns_prefixes != NULL) {
-	xmlChar *prefix;
-	int i;
-
-	for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
-	    prefix = ctx->inclusive_ns_prefixes[i];
-	    /*
-	     * Special values for namespace with empty prefix
-	     */
-            if (xmlStrEqual(prefix, BAD_CAST "#default")
-                || xmlStrEqual(prefix, BAD_CAST "")) {
-                prefix = NULL;
-		has_empty_ns_in_inclusive_list = 1;
-            }
-
-	    ns = xmlSearchNs(cur->doc, cur, prefix);
-	    if((ns != NULL) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
-		already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
-		if(visible) {
-		    xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
-		}
-		if(!already_rendered) {
-		    xmlListInsert(list, ns);
-		}
-		if(xmlStrlen(ns->prefix) == 0) {
-		    has_empty_ns = 1;
-		}
-	    }
-	}
-    }
-
-    /* add node namespace */
-    if(cur->ns != NULL) {
-	ns = cur->ns;
-    } else {
-        ns = xmlSearchNs(cur->doc, cur, NULL);
-	has_visibly_utilized_empty_ns = 1;
-    }
-    if((ns != NULL) && !xmlC14NIsXmlNs(ns)) {
-	if(visible && xmlC14NIsVisible(ctx, ns, cur)) {
-	    if(!xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, ns, ctx)) {
-		xmlListInsert(list, ns);
-	    }
-	}
-	if(visible) {
-	    xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
-	}
-	if(xmlStrlen(ns->prefix) == 0) {
-	    has_empty_ns = 1;
-	}
-    }
-
-
-    /* add attributes */
-    for(attr = cur->properties; attr != NULL; attr = attr->next) {
-        /*
-         * we need to check that attribute is visible and has non
-         * default namespace (XML Namespaces: "default namespaces
-	 * do not apply directly to attributes")
-         */
-	if((attr->ns != NULL) && !xmlC14NIsXmlNs(attr->ns) && xmlC14NIsVisible(ctx, attr, cur)) {
-	    already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, attr->ns, ctx);
-	    xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur);
-	    if(!already_rendered && visible) {
-		xmlListInsert(list, attr->ns);
-	    }
-	    if(xmlStrlen(attr->ns->prefix) == 0) {
-		has_empty_ns = 1;
-	    }
-	} else if((attr->ns != NULL) && (xmlStrlen(attr->ns->prefix) == 0) && (xmlStrlen(attr->ns->href) == 0)) {
-	    has_visibly_utilized_empty_ns = 1;
-	}
-    }
-
-    /*
-     * Process xmlns=""
-     */
-    if(visible && has_visibly_utilized_empty_ns &&
-	    !has_empty_ns && !has_empty_ns_in_inclusive_list) {
-        static xmlNs ns_default;
-
-        memset(&ns_default, 0, sizeof(ns_default));
-
-        already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default, ctx);
-	if(!already_rendered) {
-	    xmlC14NPrintNamespaces(&ns_default, ctx);
-	}
-    } else if(visible && !has_empty_ns && has_empty_ns_in_inclusive_list) {
-        static xmlNs ns_default;
-
-        memset(&ns_default, 0, sizeof(ns_default));
-        if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
-	    xmlC14NPrintNamespaces(&ns_default, ctx);
-	}
-    }
-
-
-
-    /*
-     * print out all elements from list
-     */
-    xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
-
-    /*
-     * Cleanup
-     */
-    xmlListDelete(list);
-    return (0);
-}
-
-
-/**
- * xmlC14NIsXmlAttr:
- * @attr:		the attr to check
- *
- * Checks whether the given attribute is a default "xml:" namespace
- * with href="http://www.w3.org/XML/1998/namespace"
- *
- * Returns 1 if the node is default or 0 otherwise
- */
-
-/* todo: make it a define? */
-static int
-xmlC14NIsXmlAttr(xmlAttrPtr attr)
-{
-    return ((attr->ns != NULL) &&
-           (xmlC14NIsXmlNs(attr->ns) != 0));
-}
-
-
-/**
- * xmlC14NAttrsCompare:
- * @attr1:		the pointer tls o first attr
- * @attr2:		the pointer to second attr
- *
- * Prints the given attribute to the output buffer from C14N context.
- *
- * Returns -1 if attr1 < attr2, 0 if attr1 == attr2 or 1 if attr1 > attr2.
- */
-static int
-xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
-{
-    int ret = 0;
-
-    /*
-     * Simple cases
-     */
-    if (attr1 == attr2)
-        return (0);
-    if (attr1 == NULL)
-        return (-1);
-    if (attr2 == NULL)
-        return (1);
-    if (attr1->ns == attr2->ns) {
-        return (xmlStrcmp(attr1->name, attr2->name));
-    }
-
-    /*
-     * Attributes in the default namespace are first
-     * because the default namespace is not applied to
-     * unqualified attributes
-     */
-    if (attr1->ns == NULL)
-        return (-1);
-    if (attr2->ns == NULL)
-        return (1);
-    if (attr1->ns->prefix == NULL)
-        return (-1);
-    if (attr2->ns->prefix == NULL)
-        return (1);
-
-    ret = xmlStrcmp(attr1->ns->href, attr2->ns->href);
-    if (ret == 0) {
-        ret = xmlStrcmp(attr1->name, attr2->name);
-    }
-    return (ret);
-}
-
-
-/**
- * xmlC14NPrintAttrs:
- * @attr:		the pointer to attr
- * @ctx:		the C14N context
- *
- * Prints out canonical attribute urrent node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Returns 1 on success or 0 on fail.
- */
-static int
-xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx)
-{
-    xmlChar *value;
-    xmlChar *buffer;
-
-    if ((attr == NULL) || (ctx == NULL)) {
-        xmlC14NErrParam("writing attributes");
-        return (0);
-    }
-
-    xmlOutputBufferWriteString(ctx->buf, " ");
-    if (attr->ns != NULL && xmlStrlen(attr->ns->prefix) > 0) {
-        xmlOutputBufferWriteString(ctx->buf,
-                                   (const char *) attr->ns->prefix);
-        xmlOutputBufferWriteString(ctx->buf, ":");
-    }
-    xmlOutputBufferWriteString(ctx->buf, (const char *) attr->name);
-    xmlOutputBufferWriteString(ctx->buf, "=\"");
-
-    value = xmlNodeListGetString(ctx->doc, attr->children, 1);
-    /* todo: should we log an error if value==NULL ? */
-    if (value != NULL) {
-        buffer = xmlC11NNormalizeAttr(value);
-        xmlFree(value);
-        if (buffer != NULL) {
-            xmlOutputBufferWriteString(ctx->buf, (const char *) buffer);
-            xmlFree(buffer);
-        } else {
-            xmlC14NErrInternal("normalizing attributes axis");
-            return (0);
-        }
-    }
-    xmlOutputBufferWriteString(ctx->buf, "\"");
-    return (1);
-}
-
-/**
- * xmlC14NFindHiddenParentAttr:
- *
- * Finds an attribute in a hidden parent node.
- *
- * Returns a pointer to the attribute node (if found) or NULL otherwise.
- */
-static xmlAttrPtr
-xmlC14NFindHiddenParentAttr(xmlC14NCtxPtr ctx, xmlNodePtr cur, const xmlChar * name, const xmlChar * ns)
-{
-    xmlAttrPtr res;
-    while((cur != NULL) && (!xmlC14NIsVisible(ctx, cur, cur->parent))) {
-        res = xmlHasNsProp(cur, name, ns);
-        if(res != NULL) {
-            return res;
-        }
-
-        cur = cur->parent;
-    }
-
-    return NULL;
-}
-
-/**
- * xmlC14NFixupBaseAttr:
- *
- * Fixes up the xml:base attribute
- *
- * Returns the newly created attribute or NULL
- */
-static xmlAttrPtr
-xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
-{
-    xmlChar * res = NULL;
-    xmlNodePtr cur;
-    xmlAttrPtr attr;
-    xmlChar * tmp_str;
-    xmlChar * tmp_str2;
-    int tmp_str_len;
-
-    if ((ctx == NULL) || (xml_base_attr == NULL) || (xml_base_attr->parent == NULL)) {
-        xmlC14NErrParam("processing xml:base attribute");
-        return (NULL);
-    }
-
-    /* start from current value */
-    res = xmlNodeListGetString(ctx->doc, xml_base_attr->children, 1);
-    if(res == NULL) {
-        xmlC14NErrInternal("processing xml:base attribute - can't get attr value");
-        return (NULL);
-    }
-
-    /* go up the stack until we find a node that we rendered already */
-    cur = xml_base_attr->parent->parent;
-    while((cur != NULL) && (!xmlC14NIsVisible(ctx, cur, cur->parent))) {
-        attr = xmlHasNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
-        if(attr != NULL) {
-            /* get attr value */
-            tmp_str = xmlNodeListGetString(ctx->doc, attr->children, 1);
-            if(tmp_str == NULL) {
-                xmlFree(res);
-
-                xmlC14NErrInternal("processing xml:base attribute - can't get attr value");
-                return (NULL);
-            }
-
-            /* we need to add '/' if our current base uri ends with '..' or '.'
-            to ensure that we are forced to go "up" all the time */
-            tmp_str_len = xmlStrlen(tmp_str);
-            if(tmp_str_len > 1 && tmp_str[tmp_str_len - 2] == '.') {
-                tmp_str2 = xmlStrcat(tmp_str, BAD_CAST "/");
-                if(tmp_str2 == NULL) {
-                    xmlFree(tmp_str);
-                    xmlFree(res);
-
-                    xmlC14NErrInternal("processing xml:base attribute - can't modify uri");
-                    return (NULL);
-                }
-
-                tmp_str = tmp_str2;
-            }
-
-            /* build uri */
-            tmp_str2 = xmlBuildURI(res, tmp_str);
-            if(tmp_str2 == NULL) {
-                xmlFree(tmp_str);
-                xmlFree(res);
-
-                xmlC14NErrInternal("processing xml:base attribute - can't construct uri");
-                return (NULL);
-            }
-
-            /* cleanup and set the new res */
-            xmlFree(tmp_str);
-            xmlFree(res);
-            res = tmp_str2;
-        }
-
-        /* next */
-        cur = cur->parent;
-    }
-
-    /* check if result uri is empty or not */
-    if((res == NULL) || xmlStrEqual(res, BAD_CAST "")) {
-        xmlFree(res);
-        return (NULL);
-    }
-
-    /* create and return the new attribute node */
-    attr = xmlNewNsProp(NULL, xml_base_attr->ns, BAD_CAST "base", res);
-    if(attr == NULL) {
-        xmlFree(res);
-
-        xmlC14NErrInternal("processing xml:base attribute - can't construct attribute");
-        return (NULL);
-    }
-
-    /* done */
-    xmlFree(res);
-    return (attr);
-}
-
-/**
- * xmlC14NProcessAttrsAxis:
- * @ctx:		the C14N context
- * @cur:		the current node
- * @parent_visible:	the visibility of parent node
- * @all_parents_visible: the visibility of all parent nodes
- *
- * Prints out canonical attribute axis of the current node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Attribute Axis
- * In lexicographic order (ascending), process each node that
- * is in the element's attribute axis and in the node-set.
- *
- * The processing of an element node E MUST be modified slightly
- * when an XPath node-set is given as input and the element's
- * parent is omitted from the node-set.
- *
- *
- * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Canonical XML applied to a document subset requires the search of the
- * ancestor nodes of each orphan element node for attributes in the xml
- * namespace, such as xml:lang and xml:space. These are copied into the
- * element node except if a declaration of the same attribute is already
- * in the attribute axis of the element (whether or not it is included in
- * the document subset). This search and copying are omitted from the
- * Exclusive XML Canonicalization method.
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
-{
-    xmlAttrPtr attr;
-    xmlListPtr list;
-    xmlAttrPtr attrs_to_delete = NULL;
-
-    /* special processing for 1.1 spec */
-    xmlAttrPtr xml_base_attr = NULL;
-    xmlAttrPtr xml_lang_attr = NULL;
-    xmlAttrPtr xml_space_attr = NULL;
-
-    if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
-        xmlC14NErrParam("processing attributes axis");
-        return (-1);
-    }
-
-    /*
-     * Create a sorted list to store element attributes
-     */
-    list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NAttrsCompare);
-    if (list == NULL) {
-        xmlC14NErrInternal("creating attributes list");
-        return (-1);
-    }
-
-    switch(ctx->mode) {
-    case XML_C14N_1_0:
-        /* The processing of an element node E MUST be modified slightly when an XPath node-set is
-         * given as input and the element's parent is omitted from the node-set. The method for processing
-         * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's
-         * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such
-         * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes,
-         * remove any that are in E's attribute axis (whether or not they are in the node-set). Then,
-         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
-         * the node-set. The result of visiting the attribute axis is computed by processing the attribute
-         * nodes in this merged attribute list.
-         */
-
-        /*
-         * Add all visible attributes from current node.
-         */
-        attr = cur->properties;
-        while (attr != NULL) {
-            /* check that attribute is visible */
-            if (xmlC14NIsVisible(ctx, attr, cur)) {
-                xmlListInsert(list, attr);
-            }
-            attr = attr->next;
-        }
-
-        /*
-         * Handle xml attributes
-         */
-        if (parent_visible && (cur->parent != NULL) &&
-            (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent)))
-        {
-            xmlNodePtr tmp;
-
-            /*
-             * If XPath node-set is not specified then the parent is always
-             * visible!
-             */
-            tmp = cur->parent;
-            while (tmp != NULL) {
-                attr = tmp->properties;
-                while (attr != NULL) {
-                    if (xmlC14NIsXmlAttr(attr) != 0) {
-                        if (xmlListSearch(list, attr) == NULL) {
-                            xmlListInsert(list, attr);
-                        }
-                    }
-                    attr = attr->next;
-                }
-                tmp = tmp->parent;
-            }
-        }
-
-        /* done */
-        break;
-    case XML_C14N_EXCLUSIVE_1_0:
-        /* attributes in the XML namespace, such as xml:lang and xml:space
-         * are not imported into orphan nodes of the document subset
-         */
-
-        /*
-         * Add all visible attributes from current node.
-         */
-        attr = cur->properties;
-        while (attr != NULL) {
-            /* check that attribute is visible */
-            if (xmlC14NIsVisible(ctx, attr, cur)) {
-                xmlListInsert(list, attr);
-            }
-            attr = attr->next;
-        }
-
-        /* do nothing special for xml attributes */
-        break;
-    case XML_C14N_1_1:
-        /* The processing of an element node E MUST be modified slightly when an XPath node-set is
-         * given as input and some of the element's ancestors are omitted from the node-set.
-         *
-         * Simple inheritable attributes are attributes that have a value that requires at most a simple
-         * redeclaration. This redeclaration is done by supplying a new value in the child axis. The
-         * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done
-         * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes
-         * are xml:lang and xml:space.
-         *
-         * The method for processing the attribute axis of an element E in the node-set is hence enhanced.
-         * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple
-         * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they
-         * are in the node-set). From this list of attributes, any simple inheritable attributes that are
-         * already in E's attribute axis (whether or not they are in the node-set) are removed. Then,
-         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
-         * the node-set. The result of visiting the attribute axis is computed by processing the attribute
-         * nodes in this merged attribute list.
-         *
-         * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is
-         * performed.
-         *
-         * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond
-         * a simple redeclaration.
-         *
-         * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed
-         * as ordinary attributes.
-         */
-
-        /*
-         * Add all visible attributes from current node.
-         */
-        attr = cur->properties;
-        while (attr != NULL) {
-            /* special processing for XML attribute kiks in only when we have invisible parents */
-            if ((!parent_visible) || (xmlC14NIsXmlAttr(attr) == 0)) {
-                /* check that attribute is visible */
-                if (xmlC14NIsVisible(ctx, attr, cur)) {
-                    xmlListInsert(list, attr);
-                }
-            } else {
-                int matched = 0;
-
-                /* check for simple inheritance attributes */
-                if((!matched) && (xml_lang_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "lang")) {
-                    xml_lang_attr = attr;
-                    matched = 1;
-                }
-                if((!matched) && (xml_space_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "space")) {
-                    xml_space_attr = attr;
-                    matched = 1;
-                }
-
-                /* check for base attr */
-                if((!matched) && (xml_base_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "base")) {
-                    xml_base_attr = attr;
-                    matched = 1;
-                }
-
-                /* otherwise, it is a normal attribute, so just check if it is visible */
-                if((!matched) && xmlC14NIsVisible(ctx, attr, cur)) {
-                    xmlListInsert(list, attr);
-                }
-            }
-
-            /* move to the next one */
-            attr = attr->next;
-        }
-
-        /* special processing for XML attribute kiks in only when we have invisible parents */
-        if ((parent_visible)) {
-
-            /* simple inheritance attributes - copy */
-            if(xml_lang_attr == NULL) {
-                xml_lang_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "lang", XML_XML_NAMESPACE);
-            }
-            if(xml_lang_attr != NULL) {
-                xmlListInsert(list, xml_lang_attr);
-            }
-            if(xml_space_attr == NULL) {
-                xml_space_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "space", XML_XML_NAMESPACE);
-            }
-            if(xml_space_attr != NULL) {
-                xmlListInsert(list, xml_space_attr);
-            }
-
-            /* base uri attribute - fix up */
-            if(xml_base_attr == NULL) {
-                /* if we don't have base uri attribute, check if we have a "hidden" one above */
-                xml_base_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "base", XML_XML_NAMESPACE);
-            }
-            if(xml_base_attr != NULL) {
-                xml_base_attr = xmlC14NFixupBaseAttr(ctx, xml_base_attr);
-                if(xml_base_attr != NULL) {
-                    xmlListInsert(list, xml_base_attr);
-
-                    /* note that we MUST delete returned attr node ourselves! */
-                    xml_base_attr->next = attrs_to_delete;
-                    attrs_to_delete = xml_base_attr;
-                }
-            }
-        }
-
-        /* done */
-        break;
-    }
-
-    /*
-     * print out all elements from list
-     */
-    xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs, (const void *) ctx);
-
-    /*
-     * Cleanup
-     */
-    xmlFreePropList(attrs_to_delete);
-    xmlListDelete(list);
-    return (0);
-}
-
-/**
- * xmlC14NCheckForRelativeNamespaces:
- * @ctx:		the C14N context
- * @cur:		the current element node
- *
- * Checks that current element node has no relative namespaces defined
- *
- * Returns 0 if the node has no relative namespaces or -1 otherwise.
- */
-static int
-xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
-    xmlNsPtr ns;
-
-    if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
-        xmlC14NErrParam("checking for relative namespaces");
-        return (-1);
-    }
-
-    ns = cur->nsDef;
-    while (ns != NULL) {
-        if (xmlStrlen(ns->href) > 0) {
-            xmlURIPtr uri;
-
-            uri = xmlParseURI((const char *) ns->href);
-            if (uri == NULL) {
-                xmlC14NErrInternal("parsing namespace uri");
-                return (-1);
-            }
-            if (xmlStrlen((const xmlChar *) uri->scheme) == 0) {
-                xmlC14NErrRelativeNamespace(uri->scheme);
-                xmlFreeURI(uri);
-                return (-1);
-            }
-            if ((xmlStrcasecmp((const xmlChar *) uri->scheme, BAD_CAST "urn") != 0)
-                && (xmlStrcasecmp((const xmlChar *) uri->scheme, BAD_CAST "dav") !=0)
-                && (xmlStrlen((const xmlChar *) uri->server) == 0)) {
-                xmlC14NErrRelativeNamespace(uri->scheme);
-                xmlFreeURI(uri);
-                return (-1);
-            }
-            xmlFreeURI(uri);
-        }
-        ns = ns->next;
-    }
-    return (0);
-}
-
-/**
- * xmlC14NProcessElementNode:
- * @ctx:		the pointer to C14N context object
- * @cur:		the node to process
- * @visible:    this node is visible
- * @all_parents_visible: whether all the parents of this node are visible
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Element Nodes
- * If the element is not in the node-set, then the result is obtained
- * by processing the namespace axis, then the attribute axis, then
- * processing the child nodes of the element that are in the node-set
- * (in document order). If the element is in the node-set, then the result
- * is an open angle bracket (<), the element QName, the result of
- * processing the namespace axis, the result of processing the attribute
- * axis, a close angle bracket (>), the result of processing the child
- * nodes of the element that are in the node-set (in document order), an
- * open angle bracket, a forward slash (/), the element QName, and a close
- * angle bracket.
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
-    int ret;
-    xmlC14NVisibleNsStack state;
-    int parent_is_doc = 0;
-
-    if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
-        xmlC14NErrParam("processing element node");
-        return (-1);
-    }
-
-    /*
-     * Check relative relative namespaces:
-     * implementations of XML canonicalization MUST report an operation
-     * failure on documents containing relative namespace URIs.
-     */
-    if (xmlC14NCheckForRelativeNamespaces(ctx, cur) < 0) {
-        xmlC14NErrInternal("checking for relative namespaces");
-        return (-1);
-    }
-
-
-    /*
-     * Save ns_rendered stack position
-     */
-    memset(&state, 0, sizeof(state));
-    xmlC14NVisibleNsStackSave(ctx->ns_rendered, &state);
-
-    if (visible) {
-        if (ctx->parent_is_doc) {
-	    /* save this flag into the stack */
-	    parent_is_doc = ctx->parent_is_doc;
-	    ctx->parent_is_doc = 0;
-            ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
-        }
-        xmlOutputBufferWriteString(ctx->buf, "<");
-
-        if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
-            xmlOutputBufferWriteString(ctx->buf,
-                                       (const char *) cur->ns->prefix);
-            xmlOutputBufferWriteString(ctx->buf, ":");
-        }
-        xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
-    }
-
-    if (!xmlC14NIsExclusive(ctx)) {
-        ret = xmlC14NProcessNamespacesAxis(ctx, cur, visible);
-    } else {
-        ret = xmlExcC14NProcessNamespacesAxis(ctx, cur, visible);
-    }
-    if (ret < 0) {
-        xmlC14NErrInternal("processing namespaces axis");
-        return (-1);
-    }
-    /* todo: shouldn't this go to "visible only"? */
-    if(visible) {
-	xmlC14NVisibleNsStackShift(ctx->ns_rendered);
-    }
-
-    ret = xmlC14NProcessAttrsAxis(ctx, cur, visible);
-    if (ret < 0) {
-	xmlC14NErrInternal("processing attributes axis");
-	return (-1);
-    }
-
-    if (visible) {
-        xmlOutputBufferWriteString(ctx->buf, ">");
-    }
-    if (cur->children != NULL) {
-        ret = xmlC14NProcessNodeList(ctx, cur->children);
-        if (ret < 0) {
-            xmlC14NErrInternal("processing childrens list");
-            return (-1);
-        }
-    }
-    if (visible) {
-        xmlOutputBufferWriteString(ctx->buf, "</");
-        if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
-            xmlOutputBufferWriteString(ctx->buf,
-                                       (const char *) cur->ns->prefix);
-            xmlOutputBufferWriteString(ctx->buf, ":");
-        }
-        xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
-        xmlOutputBufferWriteString(ctx->buf, ">");
-        if (parent_is_doc) {
-	    /* restore this flag from the stack for next node */
-            ctx->parent_is_doc = parent_is_doc;
-	    ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
-        }
-    }
-
-    /*
-     * Restore ns_rendered stack position
-     */
-    xmlC14NVisibleNsStackRestore(ctx->ns_rendered, &state);
-    return (0);
-}
-
-/**
- * xmlC14NProcessNode:
- * @ctx:		the pointer to C14N context object
- * @cur:		the node to process
- *
- * Processes the given node
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
-    int ret = 0;
-    int visible;
-
-    if ((ctx == NULL) || (cur == NULL)) {
-        xmlC14NErrParam("processing node");
-        return (-1);
-    }
-
-    visible = xmlC14NIsVisible(ctx, cur, cur->parent);
-    switch (cur->type) {
-        case XML_ELEMENT_NODE:
-            ret = xmlC14NProcessElementNode(ctx, cur, visible);
-            break;
-        case XML_CDATA_SECTION_NODE:
-        case XML_TEXT_NODE:
-            /*
-             * Text Nodes
-             * the string value, except all ampersands are replaced
-             * by &amp;, all open angle brackets (<) are replaced by &lt;, all closing
-             * angle brackets (>) are replaced by &gt;, and all #xD characters are
-             * replaced by &#xD;.
-             */
-            /* cdata sections are processed as text nodes */
-            /* todo: verify that cdata sections are included in XPath nodes set */
-            if ((visible) && (cur->content != NULL)) {
-                xmlChar *buffer;
-
-                buffer = xmlC11NNormalizeText(cur->content);
-                if (buffer != NULL) {
-                    xmlOutputBufferWriteString(ctx->buf,
-                                               (const char *) buffer);
-                    xmlFree(buffer);
-                } else {
-                    xmlC14NErrInternal("normalizing text node");
-                    return (-1);
-                }
-            }
-            break;
-        case XML_PI_NODE:
-            /*
-             * Processing Instruction (PI) Nodes-
-             * The opening PI symbol (<?), the PI target name of the node,
-             * a leading space and the string value if it is not empty, and
-             * the closing PI symbol (?>). If the string value is empty,
-             * then the leading space is not added. Also, a trailing #xA is
-             * rendered after the closing PI symbol for PI children of the
-             * root node with a lesser document order than the document
-             * element, and a leading #xA is rendered before the opening PI
-             * symbol of PI children of the root node with a greater document
-             * order than the document element.
-             */
-            if (visible) {
-                if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
-                    xmlOutputBufferWriteString(ctx->buf, "\x0A<?");
-                } else {
-                    xmlOutputBufferWriteString(ctx->buf, "<?");
-                }
-
-                xmlOutputBufferWriteString(ctx->buf,
-                                           (const char *) cur->name);
-                if ((cur->content != NULL) && (*(cur->content) != '\0')) {
-                    xmlChar *buffer;
-
-                    xmlOutputBufferWriteString(ctx->buf, " ");
-
-                    /* todo: do we need to normalize pi? */
-                    buffer = xmlC11NNormalizePI(cur->content);
-                    if (buffer != NULL) {
-                        xmlOutputBufferWriteString(ctx->buf,
-                                                   (const char *) buffer);
-                        xmlFree(buffer);
-                    } else {
-                        xmlC14NErrInternal("normalizing pi node");
-                        return (-1);
-                    }
-                }
-
-                if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
-                    xmlOutputBufferWriteString(ctx->buf, "?>\x0A");
-                } else {
-                    xmlOutputBufferWriteString(ctx->buf, "?>");
-                }
-            }
-            break;
-        case XML_COMMENT_NODE:
-            /*
-             * Comment Nodes
-             * Nothing if generating canonical XML without  comments. For
-             * canonical XML with comments, generate the opening comment
-             * symbol (<!--), the string value of the node, and the
-             * closing comment symbol (-->). Also, a trailing #xA is rendered
-             * after the closing comment symbol for comment children of the
-             * root node with a lesser document order than the document
-             * element, and a leading #xA is rendered before the opening
-             * comment symbol of comment children of the root node with a
-             * greater document order than the document element. (Comment
-             * children of the root node represent comments outside of the
-             * top-level document element and outside of the document type
-             * declaration).
-             */
-            if (visible && ctx->with_comments) {
-                if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
-                    xmlOutputBufferWriteString(ctx->buf, "\x0A<!--");
-                } else {
-                    xmlOutputBufferWriteString(ctx->buf, "<!--");
-                }
-
-                if (cur->content != NULL) {
-                    xmlChar *buffer;
-
-                    /* todo: do we need to normalize comment? */
-                    buffer = xmlC11NNormalizeComment(cur->content);
-                    if (buffer != NULL) {
-                        xmlOutputBufferWriteString(ctx->buf,
-                                                   (const char *) buffer);
-                        xmlFree(buffer);
-                    } else {
-                        xmlC14NErrInternal("normalizing comment node");
-                        return (-1);
-                    }
-                }
-
-                if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
-                    xmlOutputBufferWriteString(ctx->buf, "-->\x0A");
-                } else {
-                    xmlOutputBufferWriteString(ctx->buf, "-->");
-                }
-            }
-            break;
-        case XML_DOCUMENT_NODE:
-        case XML_DOCUMENT_FRAG_NODE:   /* should be processed as document? */
-#ifdef LIBXML_DOCB_ENABLED
-        case XML_DOCB_DOCUMENT_NODE:   /* should be processed as document? */
-#endif
-#ifdef LIBXML_HTML_ENABLED
-        case XML_HTML_DOCUMENT_NODE:   /* should be processed as document? */
-#endif
-            if (cur->children != NULL) {
-                ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
-                ctx->parent_is_doc = 1;
-                ret = xmlC14NProcessNodeList(ctx, cur->children);
-            }
-            break;
-
-        case XML_ATTRIBUTE_NODE:
-            xmlC14NErrInvalidNode("XML_ATTRIBUTE_NODE", "processing node");
-            return (-1);
-        case XML_NAMESPACE_DECL:
-            xmlC14NErrInvalidNode("XML_NAMESPACE_DECL", "processing node");
-            return (-1);
-        case XML_ENTITY_REF_NODE:
-            xmlC14NErrInvalidNode("XML_ENTITY_REF_NODE", "processing node");
-            return (-1);
-        case XML_ENTITY_NODE:
-            xmlC14NErrInvalidNode("XML_ENTITY_NODE", "processing node");
-            return (-1);
-
-        case XML_DOCUMENT_TYPE_NODE:
-        case XML_NOTATION_NODE:
-        case XML_DTD_NODE:
-        case XML_ELEMENT_DECL:
-        case XML_ATTRIBUTE_DECL:
-        case XML_ENTITY_DECL:
-#ifdef LIBXML_XINCLUDE_ENABLED
-        case XML_XINCLUDE_START:
-        case XML_XINCLUDE_END:
-#endif
-            /*
-             * should be ignored according to "W3C Canonical XML"
-             */
-            break;
-        default:
-            xmlC14NErrUnknownNode(cur->type, "processing node");
-            return (-1);
-    }
-
-    return (ret);
-}
-
-/**
- * xmlC14NProcessNodeList:
- * @ctx:		the pointer to C14N context object
- * @cur:		the node to start from
- *
- * Processes all nodes in the row starting from cur.
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
-    int ret;
-
-    if (ctx == NULL) {
-        xmlC14NErrParam("processing node list");
-        return (-1);
-    }
-
-    for (ret = 0; cur != NULL && ret >= 0; cur = cur->next) {
-        ret = xmlC14NProcessNode(ctx, cur);
-    }
-    return (ret);
-}
-
-
-/**
- * xmlC14NFreeCtx:
- * @ctx: the pointer to C14N context object
- *
- * Cleanups the C14N context object.
- */
-
-static void
-xmlC14NFreeCtx(xmlC14NCtxPtr ctx)
-{
-    if (ctx == NULL) {
-        xmlC14NErrParam("freeing context");
-        return;
-    }
-
-    if (ctx->ns_rendered != NULL) {
-        xmlC14NVisibleNsStackDestroy(ctx->ns_rendered);
-    }
-    xmlFree(ctx);
-}
-
-/**
- * xmlC14NNewCtx:
- * @doc:		the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible
- *			or not
- * @user_data:		the first parameter for @is_visible_callback function
- *			(in most cases, it is nodes set)
- * @mode:   the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixe the list of inclusive namespace prefixes
- *			ended with a NULL or NULL if there is no
- *			inclusive namespaces (only for `
- *			canonicalization)
- * @with_comments:	include comments in the result (!=0) or not (==0)
- * @buf:		the output buffer to store canonical XML; this
- *			buffer MUST have encoder==NULL because C14N requires
- *			UTF-8 output
- *
- * Creates new C14N context object to store C14N parameters.
- *
- * Returns pointer to newly created object (success) or NULL (fail)
- */
-static xmlC14NCtxPtr
-xmlC14NNewCtx(xmlDocPtr doc,
-	      xmlC14NIsVisibleCallback is_visible_callback, void* user_data,
-              xmlC14NMode mode, xmlChar ** inclusive_ns_prefixes,
-              int with_comments, xmlOutputBufferPtr buf)
-{
-    xmlC14NCtxPtr ctx = NULL;
-
-    if ((doc == NULL) || (buf == NULL)) {
-        xmlC14NErrParam("creating new context");
-        return (NULL);
-    }
-
-    /*
-     *  Validate the encoding output buffer encoding
-     */
-    if (buf->encoder != NULL) {
-        xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
-"xmlC14NNewCtx: output buffer encoder != NULL but C14N requires UTF8 output\n");
-        return (NULL);
-    }
-
-    /*
-     *  Validate the XML document encoding value, if provided.
-     */
-    if (doc->charset != XML_CHAR_ENCODING_UTF8) {
-        xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
-		   "xmlC14NNewCtx: source document not in UTF8\n");
-        return (NULL);
-    }
-
-    /*
-     * Allocate a new xmlC14NCtxPtr and fill the fields.
-     */
-    ctx = (xmlC14NCtxPtr) xmlMalloc(sizeof(xmlC14NCtx));
-    if (ctx == NULL) {
-	xmlC14NErrMemory("creating context");
-        return (NULL);
-    }
-    memset(ctx, 0, sizeof(xmlC14NCtx));
-
-    /*
-     * initialize C14N context
-     */
-    ctx->doc = doc;
-    ctx->with_comments = with_comments;
-    ctx->is_visible_callback = is_visible_callback;
-    ctx->user_data = user_data;
-    ctx->buf = buf;
-    ctx->parent_is_doc = 1;
-    ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
-    ctx->ns_rendered = xmlC14NVisibleNsStackCreate();
-
-    if(ctx->ns_rendered == NULL) {
-        xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_CREATE_STACK,
-		   "xmlC14NNewCtx: xmlC14NVisibleNsStackCreate failed\n");
-	xmlC14NFreeCtx(ctx);
-        return (NULL);
-    }
-
-    /*
-     * Set "mode" flag and remember list of incluseve prefixes
-     * for exclusive c14n
-     */
-    ctx->mode = mode;
-    if(xmlC14NIsExclusive(ctx)) {
-        ctx->inclusive_ns_prefixes = inclusive_ns_prefixes;
-    }
-    return (ctx);
-}
-
-/**
- * xmlC14NExecute:
- * @doc:		the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible
- *			or not
- * @user_data:		the first parameter for @is_visible_callback function
- *			(in most cases, it is nodes set)
- * @mode:	the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- *			ended with a NULL or NULL if there is no
- *			inclusive namespaces (only for exclusive
- *			canonicalization, ignored otherwise)
- * @with_comments:	include comments in the result (!=0) or not (==0)
- * @buf:		the output buffer to store canonical XML; this
- *			buffer MUST have encoder==NULL because C14N requires
- *			UTF-8 output
- *
- * Dumps the canonized image of given XML document into the provided buffer.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns non-negative value on success or a negative value on fail
- */
-int
-xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
-	 void* user_data, int mode, xmlChar **inclusive_ns_prefixes,
-	 int with_comments, xmlOutputBufferPtr buf) {
-
-    xmlC14NCtxPtr ctx;
-    xmlC14NMode c14n_mode = XML_C14N_1_0;
-    int ret;
-
-    if ((buf == NULL) || (doc == NULL)) {
-        xmlC14NErrParam("executing c14n");
-        return (-1);
-    }
-
-    /* for backward compatibility, we have to have "mode" as "int"
-       and here we check that user gives valid value */
-    switch(mode) {
-    case XML_C14N_1_0:
-    case XML_C14N_EXCLUSIVE_1_0:
-    case XML_C14N_1_1:
-         c14n_mode = (xmlC14NMode)mode;
-         break;
-    default:
-        xmlC14NErrParam("invalid mode for executing c14n");
-        return (-1);
-    }
-
-    /*
-     *  Validate the encoding output buffer encoding
-     */
-    if (buf->encoder != NULL) {
-        xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
-"xmlC14NExecute: output buffer encoder != NULL but C14N requires UTF8 output\n");
-        return (-1);
-    }
-
-    ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data,
-	            c14n_mode, inclusive_ns_prefixes,
-                    with_comments, buf);
-    if (ctx == NULL) {
-        xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_CREATE_CTXT,
-		   "xmlC14NExecute: unable to create C14N context\n");
-        return (-1);
-    }
-
-
-
-    /*
-     * Root Node
-     * The root node is the parent of the top-level document element. The
-     * result of processing each of its child nodes that is in the node-set
-     * in document order. The root node does not generate a byte order mark,
-     * XML declaration, nor anything from within the document type
-     * declaration.
-     */
-    if (doc->children != NULL) {
-        ret = xmlC14NProcessNodeList(ctx, doc->children);
-        if (ret < 0) {
-            xmlC14NErrInternal("processing docs children list");
-            xmlC14NFreeCtx(ctx);
-            return (-1);
-        }
-    }
-
-    /*
-     * Flush buffer to get number of bytes written
-     */
-    ret = xmlOutputBufferFlush(buf);
-    if (ret < 0) {
-        xmlC14NErrInternal("flushing output buffer");
-        xmlC14NFreeCtx(ctx);
-        return (-1);
-    }
-
-    /*
-     * Cleanup
-     */
-    xmlC14NFreeCtx(ctx);
-    return (ret);
-}
-
-/**
- * xmlC14NDocSaveTo:
- * @doc:		the XML document for canonization
- * @nodes:		the nodes set to be included in the canonized image
- *		or NULL if all document nodes should be included
- * @mode:		the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- *			ended with a NULL or NULL if there is no
- *			inclusive namespaces (only for exclusive
- *			canonicalization, ignored otherwise)
- * @with_comments:	include comments in the result (!=0) or not (==0)
- * @buf:		the output buffer to store canonical XML; this
- *			buffer MUST have encoder==NULL because C14N requires
- *			UTF-8 output
- *
- * Dumps the canonized image of given XML document into the provided buffer.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns non-negative value on success or a negative value on fail
- */
-int
-xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
-                 int mode, xmlChar ** inclusive_ns_prefixes,
-                 int with_comments, xmlOutputBufferPtr buf) {
-    return(xmlC14NExecute(doc,
-			(xmlC14NIsVisibleCallback)xmlC14NIsNodeInNodeset,
-			nodes,
-			mode,
-			inclusive_ns_prefixes,
-			with_comments,
-			buf));
-}
-
-
-/**
- * xmlC14NDocDumpMemory:
- * @doc:		the XML document for canonization
- * @nodes:		the nodes set to be included in the canonized image
- *		or NULL if all document nodes should be included
- * @mode:		the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- *			ended with a NULL or NULL if there is no
- *			inclusive namespaces (only for exclusive
- *			canonicalization, ignored otherwise)
- * @with_comments:	include comments in the result (!=0) or not (==0)
- * @doc_txt_ptr:	the memory pointer for allocated canonical XML text;
- *			the caller of this functions is responsible for calling
- *			xmlFree() to free allocated memory
- *
- * Dumps the canonized image of given XML document into memory.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns the number of bytes written on success or a negative value on fail
- */
-int
-xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
-                     int mode, xmlChar ** inclusive_ns_prefixes,
-                     int with_comments, xmlChar ** doc_txt_ptr)
-{
-    int ret;
-    xmlOutputBufferPtr buf;
-
-    if (doc_txt_ptr == NULL) {
-        xmlC14NErrParam("dumping doc to memory");
-        return (-1);
-    }
-
-    *doc_txt_ptr = NULL;
-
-    /*
-     * create memory buffer with UTF8 (default) encoding
-     */
-    buf = xmlAllocOutputBuffer(NULL);
-    if (buf == NULL) {
-        xmlC14NErrMemory("creating output buffer");
-        return (-1);
-    }
-
-    /*
-     * canonize document and write to buffer
-     */
-    ret = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes,
-                           with_comments, buf);
-    if (ret < 0) {
-        xmlC14NErrInternal("saving doc to output buffer");
-        (void) xmlOutputBufferClose(buf);
-        return (-1);
-    }
-
-    ret = xmlBufUse(buf->buffer);
-    if (ret > 0) {
-        *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->buffer), ret);
-    }
-    (void) xmlOutputBufferClose(buf);
-
-    if ((*doc_txt_ptr == NULL) && (ret > 0)) {
-        xmlC14NErrMemory("coping canonicanized document");
-        return (-1);
-    }
-    return (ret);
-}
-
-/**
- * xmlC14NDocSave:
- * @doc:		the XML document for canonization
- * @nodes:		the nodes set to be included in the canonized image
- *		or NULL if all document nodes should be included
- * @mode:		the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- *			ended with a NULL or NULL if there is no
- *			inclusive namespaces (only for exclusive
- *			canonicalization, ignored otherwise)
- * @with_comments:	include comments in the result (!=0) or not (==0)
- * @filename:		the filename to store canonical XML image
- * @compression:	the compression level (zlib requred):
- *				-1 - libxml default,
- *				 0 - uncompressed,
- *				>0 - compression level
- *
- * Dumps the canonized image of given XML document into the file.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns the number of bytes written success or a negative value on fail
- */
-int
-xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
-               int mode, xmlChar ** inclusive_ns_prefixes,
-               int with_comments, const char *filename, int compression)
-{
-    xmlOutputBufferPtr buf;
-    int ret;
-
-    if (filename == NULL) {
-        xmlC14NErrParam("saving doc");
-        return (-1);
-    }
-#ifdef HAVE_ZLIB_H
-    if (compression < 0)
-        compression = xmlGetCompressMode();
-#endif
-
-    /*
-     * save the content to a temp buffer, use default UTF8 encoding.
-     */
-    buf = xmlOutputBufferCreateFilename(filename, NULL, compression);
-    if (buf == NULL) {
-        xmlC14NErrInternal("creating temporary filename");
-        return (-1);
-    }
-
-    /*
-     * canonize document and write to buffer
-     */
-    ret = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes,
-                           with_comments, buf);
-    if (ret < 0) {
-        xmlC14NErrInternal("cannicanize document to buffer");
-        (void) xmlOutputBufferClose(buf);
-        return (-1);
-    }
-
-    /*
-     * get the numbers of bytes written
-     */
-    ret = xmlOutputBufferClose(buf);
-    return (ret);
-}
-
-
-
-/*
- * Macro used to grow the current buffer.
- */
-#define growBufferReentrant() {						\
-    buffer_size *= 2;							\
-    buffer = (xmlChar *)						\
-		xmlRealloc(buffer, buffer_size * sizeof(xmlChar));	\
-    if (buffer == NULL) {						\
-	xmlC14NErrMemory("growing buffer");				\
-	return(NULL);							\
-    }									\
-}
-
-/**
- * xmlC11NNormalizeString:
- * @input:		the input string
- * @mode:		the normalization mode (attribute, comment, PI or text)
- *
- * Converts a string to a canonical (normalized) format. The code is stolen
- * from xmlEncodeEntitiesReentrant(). Added normalization of \x09, \x0a, \x0A
- * and the @mode parameter
- *
- * Returns a normalized string (caller is responsible for calling xmlFree())
- * or NULL if an error occurs
- */
-static xmlChar *
-xmlC11NNormalizeString(const xmlChar * input,
-                       xmlC14NNormalizationMode mode)
-{
-    const xmlChar *cur = input;
-    xmlChar *buffer = NULL;
-    xmlChar *out = NULL;
-    int buffer_size = 0;
-
-    if (input == NULL)
-        return (NULL);
-
-    /*
-     * allocate an translation buffer.
-     */
-    buffer_size = 1000;
-    buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
-    if (buffer == NULL) {
-	xmlC14NErrMemory("allocating buffer");
-        return (NULL);
-    }
-    out = buffer;
-
-    while (*cur != '\0') {
-        if ((out - buffer) > (buffer_size - 10)) {
-            int indx = out - buffer;
-
-            growBufferReentrant();
-            out = &buffer[indx];
-        }
-
-        if ((*cur == '<') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
-                              (mode == XMLC14N_NORMALIZE_TEXT))) {
-            *out++ = '&';
-            *out++ = 'l';
-            *out++ = 't';
-            *out++ = ';';
-        } else if ((*cur == '>') && (mode == XMLC14N_NORMALIZE_TEXT)) {
-            *out++ = '&';
-            *out++ = 'g';
-            *out++ = 't';
-            *out++ = ';';
-        } else if ((*cur == '&') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
-                                     (mode == XMLC14N_NORMALIZE_TEXT))) {
-            *out++ = '&';
-            *out++ = 'a';
-            *out++ = 'm';
-            *out++ = 'p';
-            *out++ = ';';
-        } else if ((*cur == '"') && (mode == XMLC14N_NORMALIZE_ATTR)) {
-            *out++ = '&';
-            *out++ = 'q';
-            *out++ = 'u';
-            *out++ = 'o';
-            *out++ = 't';
-            *out++ = ';';
-        } else if ((*cur == '\x09') && (mode == XMLC14N_NORMALIZE_ATTR)) {
-            *out++ = '&';
-            *out++ = '#';
-            *out++ = 'x';
-            *out++ = '9';
-            *out++ = ';';
-        } else if ((*cur == '\x0A') && (mode == XMLC14N_NORMALIZE_ATTR)) {
-            *out++ = '&';
-            *out++ = '#';
-            *out++ = 'x';
-            *out++ = 'A';
-            *out++ = ';';
-        } else if ((*cur == '\x0D') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
-                                        (mode == XMLC14N_NORMALIZE_TEXT) ||
-                                        (mode == XMLC14N_NORMALIZE_COMMENT) ||
-					(mode == XMLC14N_NORMALIZE_PI))) {
-            *out++ = '&';
-            *out++ = '#';
-            *out++ = 'x';
-            *out++ = 'D';
-            *out++ = ';';
-        } else {
-            /*
-             * Works because on UTF-8, all extended sequences cannot
-             * result in bytes in the ASCII range.
-             */
-            *out++ = *cur;
-        }
-        cur++;
-    }
-    *out = 0;
-    return (buffer);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-#define bottom_c14n
-#include "elfgcchack.h"
-#endif /* LIBXML_C14N_ENABLED */
diff --git a/src/third_party/libxml/src/catalog.c b/src/third_party/libxml/src/catalog.c
deleted file mode 100644
index 6dfdfbb..0000000
--- a/src/third_party/libxml/src/catalog.c
+++ /dev/null
@@ -1,3825 +0,0 @@
-/**
- * catalog.c: set of generic Catalog related routines
- *
- * Reference:  SGML Open Technical Resolution TR9401:1997.
- *             http://www.jclark.com/sp/catalog.htm
- *
- *             XML Catalogs Working Draft 06 August 2001
- *             http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * See Copyright for the status of this software.
- *
- * Daniel.Veillard@imag.fr
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_CATALOG_ENABLED
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-#include <libxml/parserInternals.h>
-#include <libxml/catalog.h>
-#include <libxml/xmlerror.h>
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-
-#include "buf.h"
-
-#define MAX_DELEGATE	50
-#define MAX_CATAL_DEPTH	50
-
-#ifdef _WIN32
-# define PATH_SEPARATOR ';'
-#else
-# define PATH_SEPARATOR ':'
-#endif
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- * XML_CATALOG_PREFER user env to select between system/public prefered
- * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
- *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
- *> values "system" and "public".  I have made the default be "system" to
- *> match yours.
- */
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-#define XML_URN_PUBID "urn:publicid:"
-#define XML_CATAL_BREAK ((xmlChar *) -1)
-#ifndef XML_XML_DEFAULT_CATALOG
-#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
-#endif
-#ifndef XML_SGML_DEFAULT_CATALOG
-#define XML_SGML_DEFAULT_CATALOG "file:///etc/sgml/catalog"
-#endif
-
-#if defined(_WIN32) && defined(_MSC_VER)
-#undef XML_XML_DEFAULT_CATALOG
-static char XML_XML_DEFAULT_CATALOG[256] = "file:///etc/xml/catalog";
-#if defined(_WIN32_WCE)
-/* Windows CE don't have a A variant */
-#define GetModuleHandleA GetModuleHandle
-#define GetModuleFileNameA GetModuleFileName
-#else
-#if !defined(_WINDOWS_)
-void* __stdcall GetModuleHandleA(const char*);
-unsigned long __stdcall GetModuleFileNameA(void*, char*, unsigned long);
-#endif
-#endif
-#endif
-
-static xmlChar *xmlCatalogNormalizePublic(const xmlChar *pubID);
-static int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename);
-
-/************************************************************************
- *									*
- *			Types, all private				*
- *									*
- ************************************************************************/
-
-typedef enum {
-    XML_CATA_REMOVED = -1,
-    XML_CATA_NONE = 0,
-    XML_CATA_CATALOG,
-    XML_CATA_BROKEN_CATALOG,
-    XML_CATA_NEXT_CATALOG,
-    XML_CATA_GROUP,
-    XML_CATA_PUBLIC,
-    XML_CATA_SYSTEM,
-    XML_CATA_REWRITE_SYSTEM,
-    XML_CATA_DELEGATE_PUBLIC,
-    XML_CATA_DELEGATE_SYSTEM,
-    XML_CATA_URI,
-    XML_CATA_REWRITE_URI,
-    XML_CATA_DELEGATE_URI,
-    SGML_CATA_SYSTEM,
-    SGML_CATA_PUBLIC,
-    SGML_CATA_ENTITY,
-    SGML_CATA_PENTITY,
-    SGML_CATA_DOCTYPE,
-    SGML_CATA_LINKTYPE,
-    SGML_CATA_NOTATION,
-    SGML_CATA_DELEGATE,
-    SGML_CATA_BASE,
-    SGML_CATA_CATALOG,
-    SGML_CATA_DOCUMENT,
-    SGML_CATA_SGMLDECL
-} xmlCatalogEntryType;
-
-typedef struct _xmlCatalogEntry xmlCatalogEntry;
-typedef xmlCatalogEntry *xmlCatalogEntryPtr;
-struct _xmlCatalogEntry {
-    struct _xmlCatalogEntry *next;
-    struct _xmlCatalogEntry *parent;
-    struct _xmlCatalogEntry *children;
-    xmlCatalogEntryType type;
-    xmlChar *name;
-    xmlChar *value;
-    xmlChar *URL;  /* The expanded URL using the base */
-    xmlCatalogPrefer prefer;
-    int dealloc;
-    int depth;
-    struct _xmlCatalogEntry *group;
-};
-
-typedef enum {
-    XML_XML_CATALOG_TYPE = 1,
-    XML_SGML_CATALOG_TYPE
-} xmlCatalogType;
-
-#define XML_MAX_SGML_CATA_DEPTH 10
-struct _xmlCatalog {
-    xmlCatalogType type;	/* either XML or SGML */
-
-    /*
-     * SGML Catalogs are stored as a simple hash table of catalog entries
-     * Catalog stack to check against overflows when building the
-     * SGML catalog
-     */
-    char *catalTab[XML_MAX_SGML_CATA_DEPTH];	/* stack of catals */
-    int          catalNr;	/* Number of current catal streams */
-    int          catalMax;	/* Max number of catal streams */
-    xmlHashTablePtr sgml;
-
-    /*
-     * XML Catalogs are stored as a tree of Catalog entries
-     */
-    xmlCatalogPrefer prefer;
-    xmlCatalogEntryPtr xml;
-};
-
-/************************************************************************
- *									*
- *			Global variables				*
- *									*
- ************************************************************************/
-
-/*
- * Those are preferences
- */
-static int xmlDebugCatalogs = 0;   /* used for debugging */
-static xmlCatalogAllow xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL;
-static xmlCatalogPrefer xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC;
-
-/*
- * Hash table containing all the trees of XML catalogs parsed by
- * the application.
- */
-static xmlHashTablePtr xmlCatalogXMLFiles = NULL;
-
-/*
- * The default catalog in use by the application
- */
-static xmlCatalogPtr xmlDefaultCatalog = NULL;
-
-/*
- * A mutex for modifying the shared global catalog(s)
- * xmlDefaultCatalog tree.
- * It also protects xmlCatalogXMLFiles
- * The core of this readers/writer scheme is in xmlFetchXMLCatalogFile()
- */
-static xmlRMutexPtr xmlCatalogMutex = NULL;
-
-/*
- * Whether the catalog support was initialized.
- */
-static int xmlCatalogInitialized = 0;
-
-/************************************************************************
- *									*
- *			Catalog error handlers				*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogErrMemory:
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlCatalogErrMemory(const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
-                    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
-		    extra, NULL, NULL, 0, 0,
-		    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlCatalogErr:
- * @catal: the Catalog entry
- * @node: the context node
- * @msg:  the error message
- * @extra:  extra informations
- *
- * Handle a catalog error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
-               const char *msg, const xmlChar *str1, const xmlChar *str2,
-	       const xmlChar *str3)
-{
-    __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG,
-                    error, XML_ERR_ERROR, NULL, 0,
-		    (const char *) str1, (const char *) str2,
-		    (const char *) str3, 0, 0,
-		    msg, str1, str2, str3);
-}
-
-
-/************************************************************************
- *									*
- *			Allocation and Freeing				*
- *									*
- ************************************************************************/
-
-/**
- * xmlNewCatalogEntry:
- * @type:  type of entry
- * @name:  name of the entry
- * @value:  value of the entry
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @group:  for members of a group, the group entry
- *
- * create a new Catalog entry, this type is shared both by XML and
- * SGML catalogs, but the acceptable types values differs.
- *
- * Returns the xmlCatalogEntryPtr or NULL in case of error
- */
-static xmlCatalogEntryPtr
-xmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
-	   const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer,
-	   xmlCatalogEntryPtr group) {
-    xmlCatalogEntryPtr ret;
-    xmlChar *normid = NULL;
-
-    ret = (xmlCatalogEntryPtr) xmlMalloc(sizeof(xmlCatalogEntry));
-    if (ret == NULL) {
-        xmlCatalogErrMemory("allocating catalog entry");
-	return(NULL);
-    }
-    ret->next = NULL;
-    ret->parent = NULL;
-    ret->children = NULL;
-    ret->type = type;
-    if (type == XML_CATA_PUBLIC || type == XML_CATA_DELEGATE_PUBLIC) {
-        normid = xmlCatalogNormalizePublic(name);
-        if (normid != NULL)
-            name = (*normid != 0 ? normid : NULL);
-    }
-    if (name != NULL)
-	ret->name = xmlStrdup(name);
-    else
-	ret->name = NULL;
-    if (normid != NULL)
-        xmlFree(normid);
-    if (value != NULL)
-	ret->value = xmlStrdup(value);
-    else
-	ret->value = NULL;
-    if (URL == NULL)
-	URL = value;
-    if (URL != NULL)
-	ret->URL = xmlStrdup(URL);
-    else
-	ret->URL = NULL;
-    ret->prefer = prefer;
-    ret->dealloc = 0;
-    ret->depth = 0;
-    ret->group = group;
-    return(ret);
-}
-
-static void
-xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret);
-
-/**
- * xmlFreeCatalogEntry:
- * @ret:  a Catalog entry
- *
- * Free the memory allocated to a Catalog entry
- */
-static void
-xmlFreeCatalogEntry(xmlCatalogEntryPtr ret) {
-    if (ret == NULL)
-	return;
-    /*
-     * Entries stored in the file hash must be deallocated
-     * only by the file hash cleaner !
-     */
-    if (ret->dealloc == 1)
-	return;
-
-    if (xmlDebugCatalogs) {
-	if (ret->name != NULL)
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Free catalog entry %s\n", ret->name);
-	else if (ret->value != NULL)
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Free catalog entry %s\n", ret->value);
-	else
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Free catalog entry\n");
-    }
-
-    if (ret->name != NULL)
-	xmlFree(ret->name);
-    if (ret->value != NULL)
-	xmlFree(ret->value);
-    if (ret->URL != NULL)
-	xmlFree(ret->URL);
-    xmlFree(ret);
-}
-
-/**
- * xmlFreeCatalogEntryList:
- * @ret:  a Catalog entry list
- *
- * Free the memory allocated to a full chained list of Catalog entries
- */
-static void
-xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret) {
-    xmlCatalogEntryPtr next;
-
-    while (ret != NULL) {
-	next = ret->next;
-	xmlFreeCatalogEntry(ret);
-	ret = next;
-    }
-}
-
-/**
- * xmlFreeCatalogHashEntryList:
- * @ret:  a Catalog entry list
- *
- * Free the memory allocated to list of Catalog entries from the
- * catalog file hash.
- */
-static void
-xmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) {
-    xmlCatalogEntryPtr children, next;
-
-    if (catal == NULL)
-	return;
-
-    children = catal->children;
-    while (children != NULL) {
-	next = children->next;
-	children->dealloc = 0;
-	children->children = NULL;
-	xmlFreeCatalogEntry(children);
-	children = next;
-    }
-    catal->dealloc = 0;
-    xmlFreeCatalogEntry(catal);
-}
-
-/**
- * xmlCreateNewCatalog:
- * @type:  type of catalog
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- *
- * create a new Catalog, this type is shared both by XML and
- * SGML catalogs, but the acceptable types values differs.
- *
- * Returns the xmlCatalogPtr or NULL in case of error
- */
-static xmlCatalogPtr
-xmlCreateNewCatalog(xmlCatalogType type, xmlCatalogPrefer prefer) {
-    xmlCatalogPtr ret;
-
-    ret = (xmlCatalogPtr) xmlMalloc(sizeof(xmlCatalog));
-    if (ret == NULL) {
-        xmlCatalogErrMemory("allocating catalog");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlCatalog));
-    ret->type = type;
-    ret->catalNr = 0;
-    ret->catalMax = XML_MAX_SGML_CATA_DEPTH;
-    ret->prefer = prefer;
-    if (ret->type == XML_SGML_CATALOG_TYPE)
-	ret->sgml = xmlHashCreate(10);
-    return(ret);
-}
-
-/**
- * xmlFreeCatalog:
- * @catal:  a Catalog
- *
- * Free the memory allocated to a Catalog
- */
-void
-xmlFreeCatalog(xmlCatalogPtr catal) {
-    if (catal == NULL)
-	return;
-    if (catal->xml != NULL)
-	xmlFreeCatalogEntryList(catal->xml);
-    if (catal->sgml != NULL)
-	xmlHashFree(catal->sgml,
-		(xmlHashDeallocator) xmlFreeCatalogEntry);
-    xmlFree(catal);
-}
-
-/************************************************************************
- *									*
- *			Serializing Catalogs				*
- *									*
- ************************************************************************/
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCatalogDumpEntry:
- * @entry:  the catalog entry
- * @out:  the file.
- *
- * Serialize an SGML Catalog entry
- */
-static void
-xmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) {
-    if ((entry == NULL) || (out == NULL))
-	return;
-    switch (entry->type) {
-	case SGML_CATA_ENTITY:
-	    fprintf(out, "ENTITY "); break;
-	case SGML_CATA_PENTITY:
-	    fprintf(out, "ENTITY %%"); break;
-	case SGML_CATA_DOCTYPE:
-	    fprintf(out, "DOCTYPE "); break;
-	case SGML_CATA_LINKTYPE:
-	    fprintf(out, "LINKTYPE "); break;
-	case SGML_CATA_NOTATION:
-	    fprintf(out, "NOTATION "); break;
-	case SGML_CATA_PUBLIC:
-	    fprintf(out, "PUBLIC "); break;
-	case SGML_CATA_SYSTEM:
-	    fprintf(out, "SYSTEM "); break;
-	case SGML_CATA_DELEGATE:
-	    fprintf(out, "DELEGATE "); break;
-	case SGML_CATA_BASE:
-	    fprintf(out, "BASE "); break;
-	case SGML_CATA_CATALOG:
-	    fprintf(out, "CATALOG "); break;
-	case SGML_CATA_DOCUMENT:
-	    fprintf(out, "DOCUMENT "); break;
-	case SGML_CATA_SGMLDECL:
-	    fprintf(out, "SGMLDECL "); break;
-	default:
-	    return;
-    }
-    switch (entry->type) {
-	case SGML_CATA_ENTITY:
-	case SGML_CATA_PENTITY:
-	case SGML_CATA_DOCTYPE:
-	case SGML_CATA_LINKTYPE:
-	case SGML_CATA_NOTATION:
-	    fprintf(out, "%s", (const char *) entry->name); break;
-	case SGML_CATA_PUBLIC:
-	case SGML_CATA_SYSTEM:
-	case SGML_CATA_SGMLDECL:
-	case SGML_CATA_DOCUMENT:
-	case SGML_CATA_CATALOG:
-	case SGML_CATA_BASE:
-	case SGML_CATA_DELEGATE:
-	    fprintf(out, "\"%s\"", entry->name); break;
-	default:
-	    break;
-    }
-    switch (entry->type) {
-	case SGML_CATA_ENTITY:
-	case SGML_CATA_PENTITY:
-	case SGML_CATA_DOCTYPE:
-	case SGML_CATA_LINKTYPE:
-	case SGML_CATA_NOTATION:
-	case SGML_CATA_PUBLIC:
-	case SGML_CATA_SYSTEM:
-	case SGML_CATA_DELEGATE:
-	    fprintf(out, " \"%s\"", entry->value); break;
-	default:
-	    break;
-    }
-    fprintf(out, "\n");
-}
-
-/**
- * xmlDumpXMLCatalogNode:
- * @catal:  top catalog entry
- * @catalog: pointer to the xml tree
- * @doc: the containing document
- * @ns: the current namespace
- * @cgroup: group node for group members
- *
- * Serializes a Catalog entry, called by xmlDumpXMLCatalog and recursively
- * for group entries
- */
-static void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog,
-		    xmlDocPtr doc, xmlNsPtr ns, xmlCatalogEntryPtr cgroup) {
-    xmlNodePtr node;
-    xmlCatalogEntryPtr cur;
-    /*
-     * add all the catalog entries
-     */
-    cur = catal;
-    while (cur != NULL) {
-        if (cur->group == cgroup) {
-	    switch (cur->type) {
-	        case XML_CATA_REMOVED:
-		    break;
-	        case XML_CATA_BROKEN_CATALOG:
-	        case XML_CATA_CATALOG:
-		    if (cur == catal) {
-			cur = cur->children;
-		        continue;
-		    }
-		    break;
-		case XML_CATA_NEXT_CATALOG:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
-		    xmlSetProp(node, BAD_CAST "catalog", cur->value);
-		    xmlAddChild(catalog, node);
-                    break;
-		case XML_CATA_NONE:
-		    break;
-		case XML_CATA_GROUP:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "group", NULL);
-		    xmlSetProp(node, BAD_CAST "id", cur->name);
-		    if (cur->value != NULL) {
-		        xmlNsPtr xns;
-			xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE);
-			if (xns != NULL)
-			    xmlSetNsProp(node, xns, BAD_CAST "base",
-					 cur->value);
-		    }
-		    switch (cur->prefer) {
-			case XML_CATA_PREFER_NONE:
-		            break;
-			case XML_CATA_PREFER_PUBLIC:
-		            xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "public");
-			    break;
-			case XML_CATA_PREFER_SYSTEM:
-		            xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "system");
-			    break;
-		    }
-		    xmlDumpXMLCatalogNode(cur->next, node, doc, ns, cur);
-		    xmlAddChild(catalog, node);
-	            break;
-		case XML_CATA_PUBLIC:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
-		    xmlSetProp(node, BAD_CAST "publicId", cur->name);
-		    xmlSetProp(node, BAD_CAST "uri", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_SYSTEM:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
-		    xmlSetProp(node, BAD_CAST "systemId", cur->name);
-		    xmlSetProp(node, BAD_CAST "uri", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_REWRITE_SYSTEM:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
-		    xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
-		    xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_DELEGATE_PUBLIC:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
-		    xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
-		    xmlSetProp(node, BAD_CAST "catalog", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_DELEGATE_SYSTEM:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
-		    xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
-		    xmlSetProp(node, BAD_CAST "catalog", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_URI:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
-		    xmlSetProp(node, BAD_CAST "name", cur->name);
-		    xmlSetProp(node, BAD_CAST "uri", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_REWRITE_URI:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
-		    xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
-		    xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case XML_CATA_DELEGATE_URI:
-		    node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
-		    xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
-		    xmlSetProp(node, BAD_CAST "catalog", cur->value);
-		    xmlAddChild(catalog, node);
-		    break;
-		case SGML_CATA_SYSTEM:
-		case SGML_CATA_PUBLIC:
-		case SGML_CATA_ENTITY:
-		case SGML_CATA_PENTITY:
-		case SGML_CATA_DOCTYPE:
-		case SGML_CATA_LINKTYPE:
-		case SGML_CATA_NOTATION:
-		case SGML_CATA_DELEGATE:
-		case SGML_CATA_BASE:
-		case SGML_CATA_CATALOG:
-		case SGML_CATA_DOCUMENT:
-		case SGML_CATA_SGMLDECL:
-		    break;
-	    }
-        }
-	cur = cur->next;
-    }
-}
-
-static int
-xmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) {
-    int ret;
-    xmlDocPtr doc;
-    xmlNsPtr ns;
-    xmlDtdPtr dtd;
-    xmlNodePtr catalog;
-    xmlOutputBufferPtr buf;
-
-    /*
-     * Rebuild a catalog
-     */
-    doc = xmlNewDoc(NULL);
-    if (doc == NULL)
-	return(-1);
-    dtd = xmlNewDtd(doc, BAD_CAST "catalog",
-	       BAD_CAST "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN",
-BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
-
-    xmlAddChild((xmlNodePtr) doc, (xmlNodePtr) dtd);
-
-    ns = xmlNewNs(NULL, XML_CATALOGS_NAMESPACE, NULL);
-    if (ns == NULL) {
-	xmlFreeDoc(doc);
-	return(-1);
-    }
-    catalog = xmlNewDocNode(doc, ns, BAD_CAST "catalog", NULL);
-    if (catalog == NULL) {
-	xmlFreeNs(ns);
-	xmlFreeDoc(doc);
-	return(-1);
-    }
-    catalog->nsDef = ns;
-    xmlAddChild((xmlNodePtr) doc, catalog);
-
-    xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL);
-
-    /*
-     * reserialize it
-     */
-    buf = xmlOutputBufferCreateFile(out, NULL);
-    if (buf == NULL) {
-	xmlFreeDoc(doc);
-	return(-1);
-    }
-    ret = xmlSaveFormatFileTo(buf, doc, NULL, 1);
-
-    /*
-     * Free it
-     */
-    xmlFreeDoc(doc);
-
-    return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- *									*
- *			Converting SGML Catalogs to XML			*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogConvertEntry:
- * @entry:  the entry
- * @catal:  pointer to the catalog being converted
- *
- * Convert one entry from the catalog
- */
-static void
-xmlCatalogConvertEntry(xmlCatalogEntryPtr entry, xmlCatalogPtr catal) {
-    if ((entry == NULL) || (catal == NULL) || (catal->sgml == NULL) ||
-	(catal->xml == NULL))
-	return;
-    switch (entry->type) {
-	case SGML_CATA_ENTITY:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_PENTITY:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_DOCTYPE:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_LINKTYPE:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_NOTATION:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_PUBLIC:
-	    entry->type = XML_CATA_PUBLIC;
-	    break;
-	case SGML_CATA_SYSTEM:
-	    entry->type = XML_CATA_SYSTEM;
-	    break;
-	case SGML_CATA_DELEGATE:
-	    entry->type = XML_CATA_DELEGATE_PUBLIC;
-	    break;
-	case SGML_CATA_CATALOG:
-	    entry->type = XML_CATA_CATALOG;
-	    break;
-	default:
-	    xmlHashRemoveEntry(catal->sgml, entry->name,
-		               (xmlHashDeallocator) xmlFreeCatalogEntry);
-	    return;
-    }
-    /*
-     * Conversion successful, remove from the SGML catalog
-     * and add it to the default XML one
-     */
-    xmlHashRemoveEntry(catal->sgml, entry->name, NULL);
-    entry->parent = catal->xml;
-    entry->next = NULL;
-    if (catal->xml->children == NULL)
-	catal->xml->children = entry;
-    else {
-	xmlCatalogEntryPtr prev;
-
-	prev = catal->xml->children;
-	while (prev->next != NULL)
-	    prev = prev->next;
-	prev->next = entry;
-    }
-}
-
-/**
- * xmlConvertSGMLCatalog:
- * @catal: the catalog
- *
- * Convert all the SGML catalog entries as XML ones
- *
- * Returns the number of entries converted if successful, -1 otherwise
- */
-int
-xmlConvertSGMLCatalog(xmlCatalogPtr catal) {
-
-    if ((catal == NULL) || (catal->type != XML_SGML_CATALOG_TYPE))
-	return(-1);
-
-    if (xmlDebugCatalogs) {
-	xmlGenericError(xmlGenericErrorContext,
-		"Converting SGML catalog to XML\n");
-    }
-    xmlHashScan(catal->sgml,
-		(xmlHashScanner) xmlCatalogConvertEntry,
-		&catal);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *			Helper function					*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogUnWrapURN:
- * @urn:  an "urn:publicid:" to unwrap
- *
- * Expand the URN into the equivalent Public Identifier
- *
- * Returns the new identifier or NULL, the string must be deallocated
- *         by the caller.
- */
-static xmlChar *
-xmlCatalogUnWrapURN(const xmlChar *urn) {
-    xmlChar result[2000];
-    unsigned int i = 0;
-
-    if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1))
-	return(NULL);
-    urn += sizeof(XML_URN_PUBID) - 1;
-
-    while (*urn != 0) {
-	if (i > sizeof(result) - 4)
-	    break;
-	if (*urn == '+') {
-	    result[i++] = ' ';
-	    urn++;
-	} else if (*urn == ':') {
-	    result[i++] = '/';
-	    result[i++] = '/';
-	    urn++;
-	} else if (*urn == ';') {
-	    result[i++] = ':';
-	    result[i++] = ':';
-	    urn++;
-	} else if (*urn == '%') {
-	    if ((urn[1] == '2') && (urn[2] == 'B'))
-		result[i++] = '+';
-	    else if ((urn[1] == '3') && (urn[2] == 'A'))
-		result[i++] = ':';
-	    else if ((urn[1] == '2') && (urn[2] == 'F'))
-		result[i++] = '/';
-	    else if ((urn[1] == '3') && (urn[2] == 'B'))
-		result[i++] = ';';
-	    else if ((urn[1] == '2') && (urn[2] == '7'))
-		result[i++] = '\'';
-	    else if ((urn[1] == '3') && (urn[2] == 'F'))
-		result[i++] = '?';
-	    else if ((urn[1] == '2') && (urn[2] == '3'))
-		result[i++] = '#';
-	    else if ((urn[1] == '2') && (urn[2] == '5'))
-		result[i++] = '%';
-	    else {
-		result[i++] = *urn;
-		urn++;
-		continue;
-	    }
-	    urn += 3;
-	} else {
-	    result[i++] = *urn;
-	    urn++;
-	}
-    }
-    result[i] = 0;
-
-    return(xmlStrdup(result));
-}
-
-/**
- * xmlParseCatalogFile:
- * @filename:  the filename
- *
- * parse an XML file and build a tree. It's like xmlParseFile()
- * except it bypass all catalog lookups.
- *
- * Returns the resulting document tree or NULL in case of error
- */
-
-xmlDocPtr
-xmlParseCatalogFile(const char *filename) {
-    xmlDocPtr ret;
-    xmlParserCtxtPtr ctxt;
-    char *directory = NULL;
-    xmlParserInputPtr inputStream;
-    xmlParserInputBufferPtr buf;
-
-    ctxt = xmlNewParserCtxt();
-    if (ctxt == NULL) {
-#ifdef LIBXML_SAX1_ENABLED
-	if (xmlDefaultSAXHandler.error != NULL) {
-	    xmlDefaultSAXHandler.error(NULL, "out of memory\n");
-	}
-#endif
-	return(NULL);
-    }
-
-    buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
-    if (buf == NULL) {
-	xmlFreeParserCtxt(ctxt);
-	return(NULL);
-    }
-
-    inputStream = xmlNewInputStream(ctxt);
-    if (inputStream == NULL) {
-	xmlFreeParserCtxt(ctxt);
-	return(NULL);
-    }
-
-    inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
-    inputStream->buf = buf;
-    xmlBufResetInput(buf->buffer, inputStream);
-
-    inputPush(ctxt, inputStream);
-    if ((ctxt->directory == NULL) && (directory == NULL))
-        directory = xmlParserGetDirectory(filename);
-    if ((ctxt->directory == NULL) && (directory != NULL))
-        ctxt->directory = directory;
-    ctxt->valid = 0;
-    ctxt->validate = 0;
-    ctxt->loadsubset = 0;
-    ctxt->pedantic = 0;
-    ctxt->dictNames = 1;
-
-    xmlParseDocument(ctxt);
-
-    if (ctxt->wellFormed)
-	ret = ctxt->myDoc;
-    else {
-        ret = NULL;
-        xmlFreeDoc(ctxt->myDoc);
-        ctxt->myDoc = NULL;
-    }
-    xmlFreeParserCtxt(ctxt);
-
-    return(ret);
-}
-
-/**
- * xmlLoadFileContent:
- * @filename:  a file path
- *
- * Load a file content into memory.
- *
- * Returns a pointer to the 0 terminated string or NULL in case of error
- */
-static xmlChar *
-xmlLoadFileContent(const char *filename)
-{
-#ifdef HAVE_STAT
-    int fd;
-#else
-    FILE *fd;
-#endif
-    int len;
-    long size;
-
-#ifdef HAVE_STAT
-    struct stat info;
-#endif
-    xmlChar *content;
-
-    if (filename == NULL)
-        return (NULL);
-
-#ifdef HAVE_STAT
-    if (stat(filename, &info) < 0)
-        return (NULL);
-#endif
-
-#ifdef HAVE_STAT
-    if ((fd = open(filename, O_RDONLY)) < 0)
-#else
-    if ((fd = fopen(filename, "rb")) == NULL)
-#endif
-    {
-        return (NULL);
-    }
-#ifdef HAVE_STAT
-    size = info.st_size;
-#else
-    if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) {        /* File operations denied? ok, just close and return failure */
-        fclose(fd);
-        return (NULL);
-    }
-#endif
-    content = (xmlChar*)xmlMallocAtomic(size + 10);
-    if (content == NULL) {
-        xmlCatalogErrMemory("allocating catalog data");
-#ifdef HAVE_STAT
-	close(fd);
-#else
-	fclose(fd);
-#endif
-        return (NULL);
-    }
-#ifdef HAVE_STAT
-    len = read(fd, content, size);
-    close(fd);
-#else
-    len = fread(content, 1, size, fd);
-    fclose(fd);
-#endif
-    if (len < 0) {
-        xmlFree(content);
-        return (NULL);
-    }
-    content[len] = 0;
-
-    return(content);
-}
-
-/**
- * xmlCatalogNormalizePublic:
- * @pubID:  the public ID string
- *
- *  Normalizes the Public Identifier
- *
- * Implements 6.2. Public Identifier Normalization
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the new string or NULL, the string must be deallocated
- *         by the caller.
- */
-static xmlChar *
-xmlCatalogNormalizePublic(const xmlChar *pubID)
-{
-    int ok = 1;
-    int white;
-    const xmlChar *p;
-    xmlChar *ret;
-    xmlChar *q;
-
-    if (pubID == NULL)
-        return(NULL);
-
-    white = 1;
-    for (p = pubID;*p != 0 && ok;p++) {
-        if (!xmlIsBlank_ch(*p))
-            white = 0;
-        else if (*p == 0x20 && !white)
-            white = 1;
-        else
-            ok = 0;
-    }
-    if (ok && !white)	/* is normalized */
-        return(NULL);
-
-    ret = xmlStrdup(pubID);
-    q = ret;
-    white = 0;
-    for (p = pubID;*p != 0;p++) {
-        if (xmlIsBlank_ch(*p)) {
-            if (q != ret)
-                white = 1;
-        } else {
-            if (white) {
-                *(q++) = 0x20;
-                white = 0;
-            }
-            *(q++) = *p;
-        }
-    }
-    *q = 0;
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *			The XML Catalog parser				*
- *									*
- ************************************************************************/
-
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename);
-static void
-xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
-	                   xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup);
-static xmlChar *
-xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
-	              const xmlChar *sysID);
-static xmlChar *
-xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI);
-
-
-/**
- * xmlGetXMLCatalogEntryType:
- * @name:  the name
- *
- * lookup the internal type associated to an XML catalog entry name
- *
- * Returns the type associated with that name
- */
-static xmlCatalogEntryType
-xmlGetXMLCatalogEntryType(const xmlChar *name) {
-    xmlCatalogEntryType type = XML_CATA_NONE;
-    if (xmlStrEqual(name, (const xmlChar *) "system"))
-	type = XML_CATA_SYSTEM;
-    else if (xmlStrEqual(name, (const xmlChar *) "public"))
-	type = XML_CATA_PUBLIC;
-    else if (xmlStrEqual(name, (const xmlChar *) "rewriteSystem"))
-	type = XML_CATA_REWRITE_SYSTEM;
-    else if (xmlStrEqual(name, (const xmlChar *) "delegatePublic"))
-	type = XML_CATA_DELEGATE_PUBLIC;
-    else if (xmlStrEqual(name, (const xmlChar *) "delegateSystem"))
-	type = XML_CATA_DELEGATE_SYSTEM;
-    else if (xmlStrEqual(name, (const xmlChar *) "uri"))
-	type = XML_CATA_URI;
-    else if (xmlStrEqual(name, (const xmlChar *) "rewriteURI"))
-	type = XML_CATA_REWRITE_URI;
-    else if (xmlStrEqual(name, (const xmlChar *) "delegateURI"))
-	type = XML_CATA_DELEGATE_URI;
-    else if (xmlStrEqual(name, (const xmlChar *) "nextCatalog"))
-	type = XML_CATA_NEXT_CATALOG;
-    else if (xmlStrEqual(name, (const xmlChar *) "catalog"))
-	type = XML_CATA_CATALOG;
-    return(type);
-}
-
-/**
- * xmlParseXMLCatalogOneNode:
- * @cur:  the XML node
- * @type:  the type of Catalog entry
- * @name:  the name of the node
- * @attrName:  the attribute holding the value
- * @uriAttrName:  the attribute holding the URI-Reference
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @cgroup:  the group which includes this node
- *
- * Finishes the examination of an XML tree node of a catalog and build
- * a Catalog entry from it.
- *
- * Returns the new Catalog entry node or NULL in case of error.
- */
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
-			  const xmlChar *name, const xmlChar *attrName,
-			  const xmlChar *uriAttrName, xmlCatalogPrefer prefer,
-			  xmlCatalogEntryPtr cgroup) {
-    int ok = 1;
-    xmlChar *uriValue;
-    xmlChar *nameValue = NULL;
-    xmlChar *base = NULL;
-    xmlChar *URL = NULL;
-    xmlCatalogEntryPtr ret = NULL;
-
-    if (attrName != NULL) {
-	nameValue = xmlGetProp(cur, attrName);
-	if (nameValue == NULL) {
-	    xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
-			  "%s entry lacks '%s'\n", name, attrName, NULL);
-	    ok = 0;
-	}
-    }
-    uriValue = xmlGetProp(cur, uriAttrName);
-    if (uriValue == NULL) {
-	xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
-		"%s entry lacks '%s'\n", name, uriAttrName, NULL);
-	ok = 0;
-    }
-    if (!ok) {
-	if (nameValue != NULL)
-	    xmlFree(nameValue);
-	if (uriValue != NULL)
-	    xmlFree(uriValue);
-	return(NULL);
-    }
-
-    base = xmlNodeGetBase(cur->doc, cur);
-    URL = xmlBuildURI(uriValue, base);
-    if (URL != NULL) {
-	if (xmlDebugCatalogs > 1) {
-	    if (nameValue != NULL)
-		xmlGenericError(xmlGenericErrorContext,
-			"Found %s: '%s' '%s'\n", name, nameValue, URL);
-	    else
-		xmlGenericError(xmlGenericErrorContext,
-			"Found %s: '%s'\n", name, URL);
-	}
-	ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer, cgroup);
-    } else {
-	xmlCatalogErr(ret, cur, XML_CATALOG_ENTRY_BROKEN,
-		"%s entry '%s' broken ?: %s\n", name, uriAttrName, uriValue);
-    }
-    if (nameValue != NULL)
-	xmlFree(nameValue);
-    if (uriValue != NULL)
-	xmlFree(uriValue);
-    if (base != NULL)
-	xmlFree(base);
-    if (URL != NULL)
-	xmlFree(URL);
-    return(ret);
-}
-
-/**
- * xmlParseXMLCatalogNode:
- * @cur:  the XML node
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @parent:  the parent Catalog entry
- * @cgroup:  the group which includes this node
- *
- * Examines an XML tree node of a catalog and build
- * a Catalog entry from it adding it to its parent. The examination can
- * be recursive.
- */
-static void
-xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
-	               xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup)
-{
-    xmlChar *base = NULL;
-    xmlCatalogEntryPtr entry = NULL;
-
-    if (cur == NULL)
-        return;
-    if (xmlStrEqual(cur->name, BAD_CAST "group")) {
-        xmlChar *prop;
-	xmlCatalogPrefer pref = XML_CATA_PREFER_NONE;
-
-        prop = xmlGetProp(cur, BAD_CAST "prefer");
-        if (prop != NULL) {
-            if (xmlStrEqual(prop, BAD_CAST "system")) {
-                prefer = XML_CATA_PREFER_SYSTEM;
-            } else if (xmlStrEqual(prop, BAD_CAST "public")) {
-                prefer = XML_CATA_PREFER_PUBLIC;
-            } else {
-		xmlCatalogErr(parent, cur, XML_CATALOG_PREFER_VALUE,
-                              "Invalid value for prefer: '%s'\n",
-			      prop, NULL, NULL);
-            }
-            xmlFree(prop);
-	    pref = prefer;
-        }
-	prop = xmlGetProp(cur, BAD_CAST "id");
-	base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
-	entry = xmlNewCatalogEntry(XML_CATA_GROUP, prop, base, NULL, pref, cgroup);
-	xmlFree(prop);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "public")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_PUBLIC,
-		BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "system")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_SYSTEM,
-		BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteSystem")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_SYSTEM,
-		BAD_CAST "rewriteSystem", BAD_CAST "systemIdStartString",
-		BAD_CAST "rewritePrefix", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "delegatePublic")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_PUBLIC,
-		BAD_CAST "delegatePublic", BAD_CAST "publicIdStartString",
-		BAD_CAST "catalog", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "delegateSystem")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_SYSTEM,
-		BAD_CAST "delegateSystem", BAD_CAST "systemIdStartString",
-		BAD_CAST "catalog", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "uri")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_URI,
-		BAD_CAST "uri", BAD_CAST "name",
-		BAD_CAST "uri", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteURI")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_URI,
-		BAD_CAST "rewriteURI", BAD_CAST "uriStartString",
-		BAD_CAST "rewritePrefix", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "delegateURI")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_URI,
-		BAD_CAST "delegateURI", BAD_CAST "uriStartString",
-		BAD_CAST "catalog", prefer, cgroup);
-    } else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) {
-	entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG,
-		BAD_CAST "nextCatalog", NULL,
-		BAD_CAST "catalog", prefer, cgroup);
-    }
-    if (entry != NULL) {
-        if (parent != NULL) {
-	    entry->parent = parent;
-	    if (parent->children == NULL)
-		parent->children = entry;
-	    else {
-		xmlCatalogEntryPtr prev;
-
-		prev = parent->children;
-		while (prev->next != NULL)
-		    prev = prev->next;
-		prev->next = entry;
-	    }
-	}
-	if (entry->type == XML_CATA_GROUP) {
-	    /*
-	     * Recurse to propagate prefer to the subtree
-	     * (xml:base handling is automated)
-	     */
-            xmlParseXMLCatalogNodeList(cur->children, prefer, parent, entry);
-	}
-    }
-    if (base != NULL)
-	xmlFree(base);
-}
-
-/**
- * xmlParseXMLCatalogNodeList:
- * @cur:  the XML node list of siblings
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @parent:  the parent Catalog entry
- * @cgroup:  the group which includes this list
- *
- * Examines a list of XML sibling nodes of a catalog and build
- * a list of Catalog entry from it adding it to the parent.
- * The examination will recurse to examine node subtrees.
- */
-static void
-xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
-	                   xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup) {
-    while (cur != NULL) {
-	if ((cur->ns != NULL) && (cur->ns->href != NULL) &&
-	    (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
-	    xmlParseXMLCatalogNode(cur, prefer, parent, cgroup);
-	}
-	cur = cur->next;
-    }
-    /* TODO: sort the list according to REWRITE lengths and prefer value */
-}
-
-/**
- * xmlParseXMLCatalogFile:
- * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @filename:  the filename for the catalog
- *
- * Parses the catalog file to extract the XML tree and then analyze the
- * tree to build a list of Catalog entries corresponding to this catalog
- *
- * Returns the resulting Catalog entries list
- */
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
-    xmlDocPtr doc;
-    xmlNodePtr cur;
-    xmlChar *prop;
-    xmlCatalogEntryPtr parent = NULL;
-
-    if (filename == NULL)
-        return(NULL);
-
-    doc = xmlParseCatalogFile((const char *) filename);
-    if (doc == NULL) {
-	if (xmlDebugCatalogs)
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Failed to parse catalog %s\n", filename);
-	return(NULL);
-    }
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"%d Parsing catalog %s\n", xmlGetThreadId(), filename);
-
-    cur = xmlDocGetRootElement(doc);
-    if ((cur != NULL) && (xmlStrEqual(cur->name, BAD_CAST "catalog")) &&
-	(cur->ns != NULL) && (cur->ns->href != NULL) &&
-	(xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
-
-	parent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
-				    (const xmlChar *)filename, NULL, prefer, NULL);
-        if (parent == NULL) {
-	    xmlFreeDoc(doc);
-	    return(NULL);
-	}
-
-	prop = xmlGetProp(cur, BAD_CAST "prefer");
-	if (prop != NULL) {
-	    if (xmlStrEqual(prop, BAD_CAST "system")) {
-		prefer = XML_CATA_PREFER_SYSTEM;
-	    } else if (xmlStrEqual(prop, BAD_CAST "public")) {
-		prefer = XML_CATA_PREFER_PUBLIC;
-	    } else {
-		xmlCatalogErr(NULL, cur, XML_CATALOG_PREFER_VALUE,
-			      "Invalid value for prefer: '%s'\n",
-			      prop, NULL, NULL);
-	    }
-	    xmlFree(prop);
-	}
-	cur = cur->children;
-	xmlParseXMLCatalogNodeList(cur, prefer, parent, NULL);
-    } else {
-	xmlCatalogErr(NULL, (xmlNodePtr) doc, XML_CATALOG_NOT_CATALOG,
-		      "File %s is not an XML Catalog\n",
-		      filename, NULL, NULL);
-	xmlFreeDoc(doc);
-	return(NULL);
-    }
-    xmlFreeDoc(doc);
-    return(parent);
-}
-
-/**
- * xmlFetchXMLCatalogFile:
- * @catal:  an existing but incomplete catalog entry
- *
- * Fetch and parse the subcatalog referenced by an entry
- *
- * Returns 0 in case of success, -1 otherwise
- */
-static int
-xmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) {
-    xmlCatalogEntryPtr doc;
-
-    if (catal == NULL)
-	return(-1);
-    if (catal->URL == NULL)
-	return(-1);
-
-    /*
-     * lock the whole catalog for modification
-     */
-    xmlRMutexLock(xmlCatalogMutex);
-    if (catal->children != NULL) {
-	/* Okay someone else did it in the meantime */
-	xmlRMutexUnlock(xmlCatalogMutex);
-	return(0);
-    }
-
-    if (xmlCatalogXMLFiles != NULL) {
-	doc = (xmlCatalogEntryPtr)
-	    xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
-	if (doc != NULL) {
-	    if (xmlDebugCatalogs)
-		xmlGenericError(xmlGenericErrorContext,
-		    "Found %s in file hash\n", catal->URL);
-
-	    if (catal->type == XML_CATA_CATALOG)
-		catal->children = doc->children;
-	    else
-		catal->children = doc;
-	    catal->dealloc = 0;
-	    xmlRMutexUnlock(xmlCatalogMutex);
-	    return(0);
-	}
-	if (xmlDebugCatalogs)
-	    xmlGenericError(xmlGenericErrorContext,
-		"%s not found in file hash\n", catal->URL);
-    }
-
-    /*
-     * Fetch and parse. Note that xmlParseXMLCatalogFile does not
-     * use the existing catalog, there is no recursion allowed at
-     * that level.
-     */
-    doc = xmlParseXMLCatalogFile(catal->prefer, catal->URL);
-    if (doc == NULL) {
-	catal->type = XML_CATA_BROKEN_CATALOG;
-	xmlRMutexUnlock(xmlCatalogMutex);
-	return(-1);
-    }
-
-    if (catal->type == XML_CATA_CATALOG)
-	catal->children = doc->children;
-    else
-	catal->children = doc;
-
-    doc->dealloc = 1;
-
-    if (xmlCatalogXMLFiles == NULL)
-	xmlCatalogXMLFiles = xmlHashCreate(10);
-    if (xmlCatalogXMLFiles != NULL) {
-	if (xmlDebugCatalogs)
-	    xmlGenericError(xmlGenericErrorContext,
-		"%s added to file hash\n", catal->URL);
-	xmlHashAddEntry(xmlCatalogXMLFiles, catal->URL, doc);
-    }
-    xmlRMutexUnlock(xmlCatalogMutex);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *			XML Catalog handling				*
- *									*
- ************************************************************************/
-
-/**
- * xmlAddXMLCatalog:
- * @catal:  top of an XML catalog
- * @type:  the type of record to add to the catalog
- * @orig:  the system, public or prefix to match (or NULL)
- * @replace:  the replacement value for the match
- *
- * Add an entry in the XML catalog, it may overwrite existing but
- * different entries.
- *
- * Returns 0 if successful, -1 otherwise
- */
-static int
-xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
-	      const xmlChar *orig, const xmlChar *replace) {
-    xmlCatalogEntryPtr cur;
-    xmlCatalogEntryType typ;
-    int doregister = 0;
-
-    if ((catal == NULL) ||
-	((catal->type != XML_CATA_CATALOG) &&
-	 (catal->type != XML_CATA_BROKEN_CATALOG)))
-	return(-1);
-    if (catal->children == NULL) {
-	xmlFetchXMLCatalogFile(catal);
-    }
-    if (catal->children == NULL)
-	doregister = 1;
-
-    typ = xmlGetXMLCatalogEntryType(type);
-    if (typ == XML_CATA_NONE) {
-	if (xmlDebugCatalogs)
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Failed to add unknown element %s to catalog\n", type);
-	return(-1);
-    }
-
-    cur = catal->children;
-    /*
-     * Might be a simple "update in place"
-     */
-    if (cur != NULL) {
-	while (cur != NULL) {
-	    if ((orig != NULL) && (cur->type == typ) &&
-		(xmlStrEqual(orig, cur->name))) {
-		if (xmlDebugCatalogs)
-		    xmlGenericError(xmlGenericErrorContext,
-			    "Updating element %s to catalog\n", type);
-		if (cur->value != NULL)
-		    xmlFree(cur->value);
-		if (cur->URL != NULL)
-		    xmlFree(cur->URL);
-		cur->value = xmlStrdup(replace);
-		cur->URL = xmlStrdup(replace);
-		return(0);
-	    }
-	    if (cur->next == NULL)
-		break;
-	    cur = cur->next;
-	}
-    }
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Adding element %s to catalog\n", type);
-    if (cur == NULL)
-	catal->children = xmlNewCatalogEntry(typ, orig, replace,
-		                             NULL, catal->prefer, NULL);
-    else
-	cur->next = xmlNewCatalogEntry(typ, orig, replace,
-		                       NULL, catal->prefer, NULL);
-    if (doregister) {
-        catal->type = XML_CATA_CATALOG;
-	cur = (xmlCatalogEntryPtr)xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
-	if (cur != NULL)
-	    cur->children = catal->children;
-    }
-
-    return(0);
-}
-
-/**
- * xmlDelXMLCatalog:
- * @catal:  top of an XML catalog
- * @value:  the value to remove from the catalog
- *
- * Remove entries in the XML catalog where the value or the URI
- * is equal to @value
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-static int
-xmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) {
-    xmlCatalogEntryPtr cur;
-    int ret = 0;
-
-    if ((catal == NULL) ||
-	((catal->type != XML_CATA_CATALOG) &&
-	 (catal->type != XML_CATA_BROKEN_CATALOG)))
-	return(-1);
-    if (value == NULL)
-	return(-1);
-    if (catal->children == NULL) {
-	xmlFetchXMLCatalogFile(catal);
-    }
-
-    /*
-     * Scan the children
-     */
-    cur = catal->children;
-    while (cur != NULL) {
-	if (((cur->name != NULL) && (xmlStrEqual(value, cur->name))) ||
-	    (xmlStrEqual(value, cur->value))) {
-	    if (xmlDebugCatalogs) {
-		if (cur->name != NULL)
-		    xmlGenericError(xmlGenericErrorContext,
-			    "Removing element %s from catalog\n", cur->name);
-		else
-		    xmlGenericError(xmlGenericErrorContext,
-			    "Removing element %s from catalog\n", cur->value);
-	    }
-	    cur->type = XML_CATA_REMOVED;
-	}
-	cur = cur->next;
-    }
-    return(ret);
-}
-
-/**
- * xmlCatalogXMLResolve:
- * @catal:  a catalog list
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalog entries.
- *
- * Implements (or tries to) 7.1. External Identifier Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
-	              const xmlChar *sysID) {
-    xmlChar *ret = NULL;
-    xmlCatalogEntryPtr cur;
-    int haveDelegate = 0;
-    int haveNext = 0;
-
-    /*
-     * protection against loops
-     */
-    if (catal->depth > MAX_CATAL_DEPTH) {
-	xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION,
-		      "Detected recursion in catalog %s\n",
-		      catal->name, NULL, NULL);
-	return(NULL);
-    }
-    catal->depth++;
-
-    /*
-     * First tries steps 2/ 3/ 4/ if a system ID is provided.
-     */
-    if (sysID != NULL) {
-	xmlCatalogEntryPtr rewrite = NULL;
-	int lenrewrite = 0, len;
-	cur = catal;
-	haveDelegate = 0;
-	while (cur != NULL) {
-	    switch (cur->type) {
-		case XML_CATA_SYSTEM:
-		    if (xmlStrEqual(sysID, cur->name)) {
-			if (xmlDebugCatalogs)
-			    xmlGenericError(xmlGenericErrorContext,
-				    "Found system match %s, using %s\n",
-				            cur->name, cur->URL);
-			catal->depth--;
-			return(xmlStrdup(cur->URL));
-		    }
-		    break;
-		case XML_CATA_REWRITE_SYSTEM:
-		    len = xmlStrlen(cur->name);
-		    if ((len > lenrewrite) &&
-			(!xmlStrncmp(sysID, cur->name, len))) {
-			lenrewrite = len;
-			rewrite = cur;
-		    }
-		    break;
-		case XML_CATA_DELEGATE_SYSTEM:
-		    if (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))
-			haveDelegate++;
-		    break;
-		case XML_CATA_NEXT_CATALOG:
-		    haveNext++;
-		    break;
-		default:
-		    break;
-	    }
-	    cur = cur->next;
-	}
-	if (rewrite != NULL) {
-	    if (xmlDebugCatalogs)
-		xmlGenericError(xmlGenericErrorContext,
-			"Using rewriting rule %s\n", rewrite->name);
-	    ret = xmlStrdup(rewrite->URL);
-	    if (ret != NULL)
-		ret = xmlStrcat(ret, &sysID[lenrewrite]);
-	    catal->depth--;
-	    return(ret);
-	}
-	if (haveDelegate) {
-	    const xmlChar *delegates[MAX_DELEGATE];
-	    int nbList = 0, i;
-
-	    /*
-	     * Assume the entries have been sorted by decreasing substring
-	     * matches when the list was produced.
-	     */
-	    cur = catal;
-	    while (cur != NULL) {
-		if ((cur->type == XML_CATA_DELEGATE_SYSTEM) &&
-		    (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))) {
-		    for (i = 0;i < nbList;i++)
-			if (xmlStrEqual(cur->URL, delegates[i]))
-			    break;
-		    if (i < nbList) {
-			cur = cur->next;
-			continue;
-		    }
-		    if (nbList < MAX_DELEGATE)
-			delegates[nbList++] = cur->URL;
-
-		    if (cur->children == NULL) {
-			xmlFetchXMLCatalogFile(cur);
-		    }
-		    if (cur->children != NULL) {
-			if (xmlDebugCatalogs)
-			    xmlGenericError(xmlGenericErrorContext,
-				    "Trying system delegate %s\n", cur->URL);
-			ret = xmlCatalogListXMLResolve(
-				cur->children, NULL, sysID);
-			if (ret != NULL) {
-			    catal->depth--;
-			    return(ret);
-			}
-		    }
-		}
-		cur = cur->next;
-	    }
-	    /*
-	     * Apply the cut algorithm explained in 4/
-	     */
-	    catal->depth--;
-	    return(XML_CATAL_BREAK);
-	}
-    }
-    /*
-     * Then tries 5/ 6/ if a public ID is provided
-     */
-    if (pubID != NULL) {
-	cur = catal;
-	haveDelegate = 0;
-	while (cur != NULL) {
-	    switch (cur->type) {
-		case XML_CATA_PUBLIC:
-		    if (xmlStrEqual(pubID, cur->name)) {
-			if (xmlDebugCatalogs)
-			    xmlGenericError(xmlGenericErrorContext,
-				    "Found public match %s\n", cur->name);
-			catal->depth--;
-			return(xmlStrdup(cur->URL));
-		    }
-		    break;
-		case XML_CATA_DELEGATE_PUBLIC:
-		    if (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)) &&
-			(cur->prefer == XML_CATA_PREFER_PUBLIC))
-			haveDelegate++;
-		    break;
-		case XML_CATA_NEXT_CATALOG:
-		    if (sysID == NULL)
-			haveNext++;
-		    break;
-		default:
-		    break;
-	    }
-	    cur = cur->next;
-	}
-	if (haveDelegate) {
-	    const xmlChar *delegates[MAX_DELEGATE];
-	    int nbList = 0, i;
-
-	    /*
-	     * Assume the entries have been sorted by decreasing substring
-	     * matches when the list was produced.
-	     */
-	    cur = catal;
-	    while (cur != NULL) {
-		if ((cur->type == XML_CATA_DELEGATE_PUBLIC) &&
-		    (cur->prefer == XML_CATA_PREFER_PUBLIC) &&
-		    (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)))) {
-
-		    for (i = 0;i < nbList;i++)
-			if (xmlStrEqual(cur->URL, delegates[i]))
-			    break;
-		    if (i < nbList) {
-			cur = cur->next;
-			continue;
-		    }
-		    if (nbList < MAX_DELEGATE)
-			delegates[nbList++] = cur->URL;
-
-		    if (cur->children == NULL) {
-			xmlFetchXMLCatalogFile(cur);
-		    }
-		    if (cur->children != NULL) {
-			if (xmlDebugCatalogs)
-			    xmlGenericError(xmlGenericErrorContext,
-				    "Trying public delegate %s\n", cur->URL);
-			ret = xmlCatalogListXMLResolve(
-				cur->children, pubID, NULL);
-			if (ret != NULL) {
-			    catal->depth--;
-			    return(ret);
-			}
-		    }
-		}
-		cur = cur->next;
-	    }
-	    /*
-	     * Apply the cut algorithm explained in 4/
-	     */
-	    catal->depth--;
-	    return(XML_CATAL_BREAK);
-	}
-    }
-    if (haveNext) {
-	cur = catal;
-	while (cur != NULL) {
-	    if (cur->type == XML_CATA_NEXT_CATALOG) {
-		if (cur->children == NULL) {
-		    xmlFetchXMLCatalogFile(cur);
-		}
-		if (cur->children != NULL) {
-		    ret = xmlCatalogListXMLResolve(cur->children, pubID, sysID);
-		    if (ret != NULL) {
-			catal->depth--;
-			return(ret);
-		    } else if (catal->depth > MAX_CATAL_DEPTH) {
-		        return(NULL);
-		    }
-		}
-	    }
-	    cur = cur->next;
-	}
-    }
-
-    catal->depth--;
-    return(NULL);
-}
-
-/**
- * xmlCatalogXMLResolveURI:
- * @catal:  a catalog list
- * @URI:  the URI
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalog entries.
- *
- * Implements (or tries to) 7.2.2. URI Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
-    xmlChar *ret = NULL;
-    xmlCatalogEntryPtr cur;
-    int haveDelegate = 0;
-    int haveNext = 0;
-    xmlCatalogEntryPtr rewrite = NULL;
-    int lenrewrite = 0, len;
-
-    if (catal == NULL)
-	return(NULL);
-
-    if (URI == NULL)
-	return(NULL);
-
-    if (catal->depth > MAX_CATAL_DEPTH) {
-	xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION,
-		      "Detected recursion in catalog %s\n",
-		      catal->name, NULL, NULL);
-	return(NULL);
-    }
-
-    /*
-     * First tries steps 2/ 3/ 4/ if a system ID is provided.
-     */
-    cur = catal;
-    haveDelegate = 0;
-    while (cur != NULL) {
-	switch (cur->type) {
-	    case XML_CATA_URI:
-		if (xmlStrEqual(URI, cur->name)) {
-		    if (xmlDebugCatalogs)
-			xmlGenericError(xmlGenericErrorContext,
-				"Found URI match %s\n", cur->name);
-		    return(xmlStrdup(cur->URL));
-		}
-		break;
-	    case XML_CATA_REWRITE_URI:
-		len = xmlStrlen(cur->name);
-		if ((len > lenrewrite) &&
-		    (!xmlStrncmp(URI, cur->name, len))) {
-		    lenrewrite = len;
-		    rewrite = cur;
-		}
-		break;
-	    case XML_CATA_DELEGATE_URI:
-		if (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))
-		    haveDelegate++;
-		break;
-	    case XML_CATA_NEXT_CATALOG:
-		haveNext++;
-		break;
-	    default:
-		break;
-	}
-	cur = cur->next;
-    }
-    if (rewrite != NULL) {
-	if (xmlDebugCatalogs)
-	    xmlGenericError(xmlGenericErrorContext,
-		    "Using rewriting rule %s\n", rewrite->name);
-	ret = xmlStrdup(rewrite->URL);
-	if (ret != NULL)
-	    ret = xmlStrcat(ret, &URI[lenrewrite]);
-	return(ret);
-    }
-    if (haveDelegate) {
-	const xmlChar *delegates[MAX_DELEGATE];
-	int nbList = 0, i;
-
-	/*
-	 * Assume the entries have been sorted by decreasing substring
-	 * matches when the list was produced.
-	 */
-	cur = catal;
-	while (cur != NULL) {
-	    if (((cur->type == XML_CATA_DELEGATE_SYSTEM) ||
-	         (cur->type == XML_CATA_DELEGATE_URI)) &&
-		(!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))) {
-		for (i = 0;i < nbList;i++)
-		    if (xmlStrEqual(cur->URL, delegates[i]))
-			break;
-		if (i < nbList) {
-		    cur = cur->next;
-		    continue;
-		}
-		if (nbList < MAX_DELEGATE)
-		    delegates[nbList++] = cur->URL;
-
-		if (cur->children == NULL) {
-		    xmlFetchXMLCatalogFile(cur);
-		}
-		if (cur->children != NULL) {
-		    if (xmlDebugCatalogs)
-			xmlGenericError(xmlGenericErrorContext,
-				"Trying URI delegate %s\n", cur->URL);
-		    ret = xmlCatalogListXMLResolveURI(
-			    cur->children, URI);
-		    if (ret != NULL)
-			return(ret);
-		}
-	    }
-	    cur = cur->next;
-	}
-	/*
-	 * Apply the cut algorithm explained in 4/
-	 */
-	return(XML_CATAL_BREAK);
-    }
-    if (haveNext) {
-	cur = catal;
-	while (cur != NULL) {
-	    if (cur->type == XML_CATA_NEXT_CATALOG) {
-		if (cur->children == NULL) {
-		    xmlFetchXMLCatalogFile(cur);
-		}
-		if (cur->children != NULL) {
-		    ret = xmlCatalogListXMLResolveURI(cur->children, URI);
-		    if (ret != NULL)
-			return(ret);
-		}
-	    }
-	    cur = cur->next;
-	}
-    }
-
-    return(NULL);
-}
-
-/**
- * xmlCatalogListXMLResolve:
- * @catal:  a catalog list
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalogs
- *
- * Implements (or tries to) 7.1. External Identifier Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
-	              const xmlChar *sysID) {
-    xmlChar *ret = NULL;
-    xmlChar *urnID = NULL;
-    xmlChar *normid;
-
-    if (catal == NULL)
-        return(NULL);
-    if ((pubID == NULL) && (sysID == NULL))
-	return(NULL);
-
-    normid = xmlCatalogNormalizePublic(pubID);
-    if (normid != NULL)
-        pubID = (*normid != 0 ? normid : NULL);
-
-    if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
-	urnID = xmlCatalogUnWrapURN(pubID);
-	if (xmlDebugCatalogs) {
-	    if (urnID == NULL)
-		xmlGenericError(xmlGenericErrorContext,
-			"Public URN ID %s expanded to NULL\n", pubID);
-	    else
-		xmlGenericError(xmlGenericErrorContext,
-			"Public URN ID expanded to %s\n", urnID);
-	}
-	ret = xmlCatalogListXMLResolve(catal, urnID, sysID);
-	if (urnID != NULL)
-	    xmlFree(urnID);
-	if (normid != NULL)
-	    xmlFree(normid);
-	return(ret);
-    }
-    if (!xmlStrncmp(sysID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
-	urnID = xmlCatalogUnWrapURN(sysID);
-	if (xmlDebugCatalogs) {
-	    if (urnID == NULL)
-		xmlGenericError(xmlGenericErrorContext,
-			"System URN ID %s expanded to NULL\n", sysID);
-	    else
-		xmlGenericError(xmlGenericErrorContext,
-			"System URN ID expanded to %s\n", urnID);
-	}
-	if (pubID == NULL)
-	    ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
-	else if (xmlStrEqual(pubID, urnID))
-	    ret = xmlCatalogListXMLResolve(catal, pubID, NULL);
-	else {
-	    ret = xmlCatalogListXMLResolve(catal, pubID, urnID);
-	}
-	if (urnID != NULL)
-	    xmlFree(urnID);
-	if (normid != NULL)
-	    xmlFree(normid);
-	return(ret);
-    }
-    while (catal != NULL) {
-	if (catal->type == XML_CATA_CATALOG) {
-	    if (catal->children == NULL) {
-		xmlFetchXMLCatalogFile(catal);
-	    }
-	    if (catal->children != NULL) {
-		ret = xmlCatalogXMLResolve(catal->children, pubID, sysID);
-		if (ret != NULL) {
-		    break;
-                } else if ((catal->children != NULL) &&
-		           (catal->children->depth > MAX_CATAL_DEPTH)) {
-	            ret = NULL;
-		    break;
-	        }
-	    }
-	}
-	catal = catal->next;
-    }
-    if (normid != NULL)
-	xmlFree(normid);
-    return(ret);
-}
-
-/**
- * xmlCatalogListXMLResolveURI:
- * @catal:  a catalog list
- * @URI:  the URI
- *
- * Do a complete resolution lookup of an URI for a list of catalogs
- *
- * Implements (or tries to) 7.2. URI Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
-    xmlChar *ret = NULL;
-    xmlChar *urnID = NULL;
-
-    if (catal == NULL)
-        return(NULL);
-    if (URI == NULL)
-	return(NULL);
-
-    if (!xmlStrncmp(URI, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
-	urnID = xmlCatalogUnWrapURN(URI);
-	if (xmlDebugCatalogs) {
-	    if (urnID == NULL)
-		xmlGenericError(xmlGenericErrorContext,
-			"URN ID %s expanded to NULL\n", URI);
-	    else
-		xmlGenericError(xmlGenericErrorContext,
-			"URN ID expanded to %s\n", urnID);
-	}
-	ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
-	if (urnID != NULL)
-	    xmlFree(urnID);
-	return(ret);
-    }
-    while (catal != NULL) {
-	if (catal->type == XML_CATA_CATALOG) {
-	    if (catal->children == NULL) {
-		xmlFetchXMLCatalogFile(catal);
-	    }
-	    if (catal->children != NULL) {
-		ret = xmlCatalogXMLResolveURI(catal->children, URI);
-		if (ret != NULL)
-		    return(ret);
-	    }
-	}
-	catal = catal->next;
-    }
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *			The SGML Catalog parser				*
- *									*
- ************************************************************************/
-
-
-#define RAW *cur
-#define NEXT cur++;
-#define SKIP(x) cur += x;
-
-#define SKIP_BLANKS while (IS_BLANK_CH(*cur)) NEXT;
-
-/**
- * xmlParseSGMLCatalogComment:
- * @cur:  the current character
- *
- * Skip a comment in an SGML catalog
- *
- * Returns new current character
- */
-static const xmlChar *
-xmlParseSGMLCatalogComment(const xmlChar *cur) {
-    if ((cur[0] != '-') || (cur[1] != '-'))
-	return(cur);
-    SKIP(2);
-    while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-'))))
-	NEXT;
-    if (cur[0] == 0) {
-	return(NULL);
-    }
-    return(cur + 2);
-}
-
-/**
- * xmlParseSGMLCatalogPubid:
- * @cur:  the current character
- * @id:  the return location
- *
- * Parse an SGML catalog ID
- *
- * Returns new current character and store the value in @id
- */
-static const xmlChar *
-xmlParseSGMLCatalogPubid(const xmlChar *cur, xmlChar **id) {
-    xmlChar *buf = NULL, *tmp;
-    int len = 0;
-    int size = 50;
-    xmlChar stop;
-    int count = 0;
-
-    *id = NULL;
-
-    if (RAW == '"') {
-        NEXT;
-	stop = '"';
-    } else if (RAW == '\'') {
-        NEXT;
-	stop = '\'';
-    } else {
-	stop = ' ';
-    }
-    buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
-    if (buf == NULL) {
-        xmlCatalogErrMemory("allocating public ID");
-	return(NULL);
-    }
-    while (IS_PUBIDCHAR_CH(*cur) || (*cur == '?')) {
-	if ((*cur == stop) && (stop != ' '))
-	    break;
-	if ((stop == ' ') && (IS_BLANK_CH(*cur)))
-	    break;
-	if (len + 1 >= size) {
-	    size *= 2;
-	    tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
-	    if (tmp == NULL) {
-		xmlCatalogErrMemory("allocating public ID");
-		xmlFree(buf);
-		return(NULL);
-	    }
-	    buf = tmp;
-	}
-	buf[len++] = *cur;
-	count++;
-	NEXT;
-    }
-    buf[len] = 0;
-    if (stop == ' ') {
-	if (!IS_BLANK_CH(*cur)) {
-	    xmlFree(buf);
-	    return(NULL);
-	}
-    } else {
-	if (*cur != stop) {
-	    xmlFree(buf);
-	    return(NULL);
-	}
-	NEXT;
-    }
-    *id = buf;
-    return(cur);
-}
-
-/**
- * xmlParseSGMLCatalogName:
- * @cur:  the current character
- * @name:  the return location
- *
- * Parse an SGML catalog name
- *
- * Returns new current character and store the value in @name
- */
-static const xmlChar *
-xmlParseSGMLCatalogName(const xmlChar *cur, xmlChar **name) {
-    xmlChar buf[XML_MAX_NAMELEN + 5];
-    int len = 0;
-    int c;
-
-    *name = NULL;
-
-    /*
-     * Handler for more complex cases
-     */
-    c = *cur;
-    if ((!IS_LETTER(c) && (c != '_') && (c != ':'))) {
-	return(NULL);
-    }
-
-    while (((IS_LETTER(c)) || (IS_DIGIT(c)) ||
-            (c == '.') || (c == '-') ||
-	    (c == '_') || (c == ':'))) {
-	buf[len++] = c;
-	cur++;
-	c = *cur;
-	if (len >= XML_MAX_NAMELEN)
-	    return(NULL);
-    }
-    *name = xmlStrndup(buf, len);
-    return(cur);
-}
-
-/**
- * xmlGetSGMLCatalogEntryType:
- * @name:  the entry name
- *
- * Get the Catalog entry type for a given SGML Catalog name
- *
- * Returns Catalog entry type
- */
-static xmlCatalogEntryType
-xmlGetSGMLCatalogEntryType(const xmlChar *name) {
-    xmlCatalogEntryType type = XML_CATA_NONE;
-    if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
-	type = SGML_CATA_SYSTEM;
-    else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
-	type = SGML_CATA_PUBLIC;
-    else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
-	type = SGML_CATA_DELEGATE;
-    else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
-	type = SGML_CATA_ENTITY;
-    else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
-	type = SGML_CATA_DOCTYPE;
-    else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
-	type = SGML_CATA_LINKTYPE;
-    else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
-	type = SGML_CATA_NOTATION;
-    else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
-	type = SGML_CATA_SGMLDECL;
-    else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
-	type = SGML_CATA_DOCUMENT;
-    else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
-	type = SGML_CATA_CATALOG;
-    else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
-	type = SGML_CATA_BASE;
-    return(type);
-}
-
-/**
- * xmlParseSGMLCatalog:
- * @catal:  the SGML Catalog
- * @value:  the content of the SGML Catalog serialization
- * @file:  the filepath for the catalog
- * @super:  should this be handled as a Super Catalog in which case
- *          parsing is not recursive
- *
- * Parse an SGML catalog content and fill up the @catal hash table with
- * the new entries found.
- *
- * Returns 0 in case of success, -1 in case of error.
- */
-static int
-xmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value,
-	            const char *file, int super) {
-    const xmlChar *cur = value;
-    xmlChar *base = NULL;
-    int res;
-
-    if ((cur == NULL) || (file == NULL))
-        return(-1);
-    base = xmlStrdup((const xmlChar *) file);
-
-    while ((cur != NULL) && (cur[0] != 0)) {
-	SKIP_BLANKS;
-	if (cur[0] == 0)
-	    break;
-	if ((cur[0] == '-') && (cur[1] == '-')) {
-	    cur = xmlParseSGMLCatalogComment(cur);
-	    if (cur == NULL) {
-		/* error */
-		break;
-	    }
-	} else {
-	    xmlChar *sysid = NULL;
-	    xmlChar *name = NULL;
-	    xmlCatalogEntryType type = XML_CATA_NONE;
-
-	    cur = xmlParseSGMLCatalogName(cur, &name);
-	    if (name == NULL) {
-		/* error */
-		break;
-	    }
-	    if (!IS_BLANK_CH(*cur)) {
-		/* error */
-		break;
-	    }
-	    SKIP_BLANKS;
-	    if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
-                type = SGML_CATA_SYSTEM;
-	    else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
-                type = SGML_CATA_PUBLIC;
-	    else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
-                type = SGML_CATA_DELEGATE;
-	    else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
-                type = SGML_CATA_ENTITY;
-	    else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
-                type = SGML_CATA_DOCTYPE;
-	    else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
-                type = SGML_CATA_LINKTYPE;
-	    else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
-                type = SGML_CATA_NOTATION;
-	    else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
-                type = SGML_CATA_SGMLDECL;
-	    else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
-                type = SGML_CATA_DOCUMENT;
-	    else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
-                type = SGML_CATA_CATALOG;
-	    else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
-                type = SGML_CATA_BASE;
-	    else if (xmlStrEqual(name, (const xmlChar *) "OVERRIDE")) {
-		xmlFree(name);
-		cur = xmlParseSGMLCatalogName(cur, &name);
-		if (name == NULL) {
-		    /* error */
-		    break;
-		}
-		xmlFree(name);
-		continue;
-	    }
-	    xmlFree(name);
-	    name = NULL;
-
-	    switch(type) {
-		case SGML_CATA_ENTITY:
-		    if (*cur == '%')
-			type = SGML_CATA_PENTITY;
-		case SGML_CATA_PENTITY:
-		case SGML_CATA_DOCTYPE:
-		case SGML_CATA_LINKTYPE:
-		case SGML_CATA_NOTATION:
-		    cur = xmlParseSGMLCatalogName(cur, &name);
-		    if (cur == NULL) {
-			/* error */
-			break;
-		    }
-		    if (!IS_BLANK_CH(*cur)) {
-			/* error */
-			break;
-		    }
-		    SKIP_BLANKS;
-		    cur = xmlParseSGMLCatalogPubid(cur, &sysid);
-		    if (cur == NULL) {
-			/* error */
-			break;
-		    }
-		    break;
-		case SGML_CATA_PUBLIC:
-		case SGML_CATA_SYSTEM:
-		case SGML_CATA_DELEGATE:
-		    cur = xmlParseSGMLCatalogPubid(cur, &name);
-		    if (cur == NULL) {
-			/* error */
-			break;
-		    }
-		    if (type != SGML_CATA_SYSTEM) {
-		        xmlChar *normid;
-
-		        normid = xmlCatalogNormalizePublic(name);
-		        if (normid != NULL) {
-		            if (name != NULL)
-		                xmlFree(name);
-		            if (*normid != 0)
-		                name = normid;
-		            else {
-		                xmlFree(normid);
-		                name = NULL;
-		            }
-		        }
-		    }
-		    if (!IS_BLANK_CH(*cur)) {
-			/* error */
-			break;
-		    }
-		    SKIP_BLANKS;
-		    cur = xmlParseSGMLCatalogPubid(cur, &sysid);
-		    if (cur == NULL) {
-			/* error */
-			break;
-		    }
-		    break;
-		case SGML_CATA_BASE:
-		case SGML_CATA_CATALOG:
-		case SGML_CATA_DOCUMENT:
-		case SGML_CATA_SGMLDECL:
-		    cur = xmlParseSGMLCatalogPubid(cur, &sysid);
-		    if (cur == NULL) {
-			/* error */
-			break;
-		    }
-		    break;
-		default:
-		    break;
-	    }
-	    if (cur == NULL) {
-		if (name != NULL)
-		    xmlFree(name);
-		if (sysid != NULL)
-		    xmlFree(sysid);
-		break;
-	    } else if (type == SGML_CATA_BASE) {
-		if (base != NULL)
-		    xmlFree(base);
-		base = xmlStrdup(sysid);
-	    } else if ((type == SGML_CATA_PUBLIC) ||
-		       (type == SGML_CATA_SYSTEM)) {
-		xmlChar *filename;
-
-		filename = xmlBuildURI(sysid, base);
-		if (filename != NULL) {
-		    xmlCatalogEntryPtr entry;
-
-		    entry = xmlNewCatalogEntry(type, name, filename,
-			                       NULL, XML_CATA_PREFER_NONE, NULL);
-		    res = xmlHashAddEntry(catal->sgml, name, entry);
-		    if (res < 0) {
-			xmlFreeCatalogEntry(entry);
-		    }
-		    xmlFree(filename);
-		}
-
-	    } else if (type == SGML_CATA_CATALOG) {
-		if (super) {
-		    xmlCatalogEntryPtr entry;
-
-		    entry = xmlNewCatalogEntry(type, sysid, NULL, NULL,
-			                       XML_CATA_PREFER_NONE, NULL);
-		    res = xmlHashAddEntry(catal->sgml, sysid, entry);
-		    if (res < 0) {
-			xmlFreeCatalogEntry(entry);
-		    }
-		} else {
-		    xmlChar *filename;
-
-		    filename = xmlBuildURI(sysid, base);
-		    if (filename != NULL) {
-			xmlExpandCatalog(catal, (const char *)filename);
-			xmlFree(filename);
-		    }
-		}
-	    }
-	    /*
-	     * drop anything else we won't handle it
-	     */
-	    if (name != NULL)
-		xmlFree(name);
-	    if (sysid != NULL)
-		xmlFree(sysid);
-	}
-    }
-    if (base != NULL)
-	xmlFree(base);
-    if (cur == NULL)
-	return(-1);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *			SGML Catalog handling				*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogGetSGMLPublic:
- * @catal:  an SGML catalog hash
- * @pubID:  the public ID string
- *
- * Try to lookup the catalog local reference associated to a public ID
- *
- * Returns the local resource if found or NULL otherwise.
- */
-static const xmlChar *
-xmlCatalogGetSGMLPublic(xmlHashTablePtr catal, const xmlChar *pubID) {
-    xmlCatalogEntryPtr entry;
-    xmlChar *normid;
-
-    if (catal == NULL)
-	return(NULL);
-
-    normid = xmlCatalogNormalizePublic(pubID);
-    if (normid != NULL)
-        pubID = (*normid != 0 ? normid : NULL);
-
-    entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, pubID);
-    if (entry == NULL) {
-	if (normid != NULL)
-	    xmlFree(normid);
-	return(NULL);
-    }
-    if (entry->type == SGML_CATA_PUBLIC) {
-	if (normid != NULL)
-	    xmlFree(normid);
-	return(entry->URL);
-    }
-    if (normid != NULL)
-        xmlFree(normid);
-    return(NULL);
-}
-
-/**
- * xmlCatalogGetSGMLSystem:
- * @catal:  an SGML catalog hash
- * @sysID:  the system ID string
- *
- * Try to lookup the catalog local reference for a system ID
- *
- * Returns the local resource if found or NULL otherwise.
- */
-static const xmlChar *
-xmlCatalogGetSGMLSystem(xmlHashTablePtr catal, const xmlChar *sysID) {
-    xmlCatalogEntryPtr entry;
-
-    if (catal == NULL)
-	return(NULL);
-
-    entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, sysID);
-    if (entry == NULL)
-	return(NULL);
-    if (entry->type == SGML_CATA_SYSTEM)
-	return(entry->URL);
-    return(NULL);
-}
-
-/**
- * xmlCatalogSGMLResolve:
- * @catal:  the SGML catalog
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found
- */
-static const xmlChar *
-xmlCatalogSGMLResolve(xmlCatalogPtr catal, const xmlChar *pubID,
-	              const xmlChar *sysID) {
-    const xmlChar *ret = NULL;
-
-    if (catal->sgml == NULL)
-	return(NULL);
-
-    if (pubID != NULL)
-	ret = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
-    if (ret != NULL)
-	return(ret);
-    if (sysID != NULL)
-	ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
-    if (ret != NULL)
-	return(ret);
-    return(NULL);
-}
-
-/************************************************************************
- *									*
- *			Specific Public interfaces			*
- *									*
- ************************************************************************/
-
-/**
- * xmlLoadSGMLSuperCatalog:
- * @filename:  a file path
- *
- * Load an SGML super catalog. It won't expand CATALOG or DELEGATE
- * references. This is only needed for manipulating SGML Super Catalogs
- * like adding and removing CATALOG or DELEGATE entries.
- *
- * Returns the catalog parsed or NULL in case of error
- */
-xmlCatalogPtr
-xmlLoadSGMLSuperCatalog(const char *filename)
-{
-    xmlChar *content;
-    xmlCatalogPtr catal;
-    int ret;
-
-    content = xmlLoadFileContent(filename);
-    if (content == NULL)
-        return(NULL);
-
-    catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
-    if (catal == NULL) {
-	xmlFree(content);
-	return(NULL);
-    }
-
-    ret = xmlParseSGMLCatalog(catal, content, filename, 1);
-    xmlFree(content);
-    if (ret < 0) {
-	xmlFreeCatalog(catal);
-	return(NULL);
-    }
-    return (catal);
-}
-
-/**
- * xmlLoadACatalog:
- * @filename:  a file path
- *
- * Load the catalog and build the associated data structures.
- * This can be either an XML Catalog or an SGML Catalog
- * It will recurse in SGML CATALOG entries. On the other hand XML
- * Catalogs are not handled recursively.
- *
- * Returns the catalog parsed or NULL in case of error
- */
-xmlCatalogPtr
-xmlLoadACatalog(const char *filename)
-{
-    xmlChar *content;
-    xmlChar *first;
-    xmlCatalogPtr catal;
-    int ret;
-
-    content = xmlLoadFileContent(filename);
-    if (content == NULL)
-        return(NULL);
-
-
-    first = content;
-
-    while ((*first != 0) && (*first != '-') && (*first != '<') &&
-	   (!(((*first >= 'A') && (*first <= 'Z')) ||
-	      ((*first >= 'a') && (*first <= 'z')))))
-	first++;
-
-    if (*first != '<') {
-	catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
-	if (catal == NULL) {
-	    xmlFree(content);
-	    return(NULL);
-	}
-        ret = xmlParseSGMLCatalog(catal, content, filename, 0);
-	if (ret < 0) {
-	    xmlFreeCatalog(catal);
-	    xmlFree(content);
-	    return(NULL);
-	}
-    } else {
-	catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
-	if (catal == NULL) {
-	    xmlFree(content);
-	    return(NULL);
-	}
-        catal->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
-		       NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
-    }
-    xmlFree(content);
-    return (catal);
-}
-
-/**
- * xmlExpandCatalog:
- * @catal:  a catalog
- * @filename:  a file path
- *
- * Load the catalog and expand the existing catal structure.
- * This can be either an XML Catalog or an SGML Catalog
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlExpandCatalog(xmlCatalogPtr catal, const char *filename)
-{
-    int ret;
-
-    if ((catal == NULL) || (filename == NULL))
-	return(-1);
-
-
-    if (catal->type == XML_SGML_CATALOG_TYPE) {
-	xmlChar *content;
-
-	content = xmlLoadFileContent(filename);
-	if (content == NULL)
-	    return(-1);
-
-        ret = xmlParseSGMLCatalog(catal, content, filename, 0);
-	if (ret < 0) {
-	    xmlFree(content);
-	    return(-1);
-	}
-	xmlFree(content);
-    } else {
-	xmlCatalogEntryPtr tmp, cur;
-	tmp = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
-		       NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
-
-	cur = catal->xml;
-	if (cur == NULL) {
-	    catal->xml = tmp;
-	} else {
-	    while (cur->next != NULL) cur = cur->next;
-	    cur->next = tmp;
-	}
-    }
-    return (0);
-}
-
-/**
- * xmlACatalogResolveSystem:
- * @catal:  a Catalog
- * @sysID:  the system ID string
- *
- * Try to lookup the catalog resource for a system ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- *      must be freed by the caller.
- */
-xmlChar *
-xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) {
-    xmlChar *ret = NULL;
-
-    if ((sysID == NULL) || (catal == NULL))
-	return(NULL);
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Resolve sysID %s\n", sysID);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	ret = xmlCatalogListXMLResolve(catal->xml, NULL, sysID);
-	if (ret == XML_CATAL_BREAK)
-	    ret = NULL;
-    } else {
-	const xmlChar *sgml;
-
-	sgml = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
-	if (sgml != NULL)
-	    ret = xmlStrdup(sgml);
-    }
-    return(ret);
-}
-
-/**
- * xmlACatalogResolvePublic:
- * @catal:  a Catalog
- * @pubID:  the public ID string
- *
- * Try to lookup the catalog local reference associated to a public ID in that catalog
- *
- * Returns the local resource if found or NULL otherwise, the value returned
- *      must be freed by the caller.
- */
-xmlChar *
-xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) {
-    xmlChar *ret = NULL;
-
-    if ((pubID == NULL) || (catal == NULL))
-	return(NULL);
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Resolve pubID %s\n", pubID);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	ret = xmlCatalogListXMLResolve(catal->xml, pubID, NULL);
-	if (ret == XML_CATAL_BREAK)
-	    ret = NULL;
-    } else {
-	const xmlChar *sgml;
-
-	sgml = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
-	if (sgml != NULL)
-	    ret = xmlStrdup(sgml);
-    }
-    return(ret);
-}
-
-/**
- * xmlACatalogResolve:
- * @catal:  a Catalog
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlACatalogResolve(xmlCatalogPtr catal, const xmlChar * pubID,
-                   const xmlChar * sysID)
-{
-    xmlChar *ret = NULL;
-
-    if (((pubID == NULL) && (sysID == NULL)) || (catal == NULL))
-        return (NULL);
-
-    if (xmlDebugCatalogs) {
-         if ((pubID != NULL) && (sysID != NULL)) {
-             xmlGenericError(xmlGenericErrorContext,
-                             "Resolve: pubID %s sysID %s\n", pubID, sysID);
-         } else if (pubID != NULL) {
-             xmlGenericError(xmlGenericErrorContext,
-                             "Resolve: pubID %s\n", pubID);
-         } else {
-             xmlGenericError(xmlGenericErrorContext,
-                             "Resolve: sysID %s\n", sysID);
-         }
-    }
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-        ret = xmlCatalogListXMLResolve(catal->xml, pubID, sysID);
-	if (ret == XML_CATAL_BREAK)
-	    ret = NULL;
-    } else {
-        const xmlChar *sgml;
-
-        sgml = xmlCatalogSGMLResolve(catal, pubID, sysID);
-        if (sgml != NULL)
-            ret = xmlStrdup(sgml);
-    }
-    return (ret);
-}
-
-/**
- * xmlACatalogResolveURI:
- * @catal:  a Catalog
- * @URI:  the URI
- *
- * Do a complete resolution lookup of an URI
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlACatalogResolveURI(xmlCatalogPtr catal, const xmlChar *URI) {
-    xmlChar *ret = NULL;
-
-    if ((URI == NULL) || (catal == NULL))
-	return(NULL);
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Resolve URI %s\n", URI);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	ret = xmlCatalogListXMLResolveURI(catal->xml, URI);
-	if (ret == XML_CATAL_BREAK)
-	    ret = NULL;
-    } else {
-	const xmlChar *sgml;
-
-	sgml = xmlCatalogSGMLResolve(catal, NULL, URI);
-	if (sgml != NULL)
-            ret = xmlStrdup(sgml);
-    }
-    return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlACatalogDump:
- * @catal:  a Catalog
- * @out:  the file.
- *
- * Dump the given catalog to the given file.
- */
-void
-xmlACatalogDump(xmlCatalogPtr catal, FILE *out) {
-    if ((out == NULL) || (catal == NULL))
-	return;
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	xmlDumpXMLCatalog(out, catal->xml);
-    } else {
-	xmlHashScan(catal->sgml,
-		    (xmlHashScanner) xmlCatalogDumpEntry, out);
-    }
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlACatalogAdd:
- * @catal:  a Catalog
- * @type:  the type of record to add to the catalog
- * @orig:  the system, public or prefix to match
- * @replace:  the replacement value for the match
- *
- * Add an entry in the catalog, it may overwrite existing but
- * different entries.
- *
- * Returns 0 if successful, -1 otherwise
- */
-int
-xmlACatalogAdd(xmlCatalogPtr catal, const xmlChar * type,
-              const xmlChar * orig, const xmlChar * replace)
-{
-    int res = -1;
-
-    if (catal == NULL)
-	return(-1);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-        res = xmlAddXMLCatalog(catal->xml, type, orig, replace);
-    } else {
-        xmlCatalogEntryType cattype;
-
-        cattype = xmlGetSGMLCatalogEntryType(type);
-        if (cattype != XML_CATA_NONE) {
-            xmlCatalogEntryPtr entry;
-
-            entry = xmlNewCatalogEntry(cattype, orig, replace, NULL,
-                                       XML_CATA_PREFER_NONE, NULL);
-	    if (catal->sgml == NULL)
-		catal->sgml = xmlHashCreate(10);
-            res = xmlHashAddEntry(catal->sgml, orig, entry);
-        }
-    }
-    return (res);
-}
-
-/**
- * xmlACatalogRemove:
- * @catal:  a Catalog
- * @value:  the value to remove
- *
- * Remove an entry from the catalog
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-int
-xmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) {
-    int res = -1;
-
-    if ((catal == NULL) || (value == NULL))
-	return(-1);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	res = xmlDelXMLCatalog(catal->xml, value);
-    } else {
-	res = xmlHashRemoveEntry(catal->sgml, value,
-		(xmlHashDeallocator) xmlFreeCatalogEntry);
-	if (res == 0)
-	    res = 1;
-    }
-    return(res);
-}
-
-/**
- * xmlNewCatalog:
- * @sgml:  should this create an SGML catalog
- *
- * create a new Catalog.
- *
- * Returns the xmlCatalogPtr or NULL in case of error
- */
-xmlCatalogPtr
-xmlNewCatalog(int sgml) {
-    xmlCatalogPtr catal = NULL;
-
-    if (sgml) {
-	catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE,
-		                    xmlCatalogDefaultPrefer);
-        if ((catal != NULL) && (catal->sgml == NULL))
-	    catal->sgml = xmlHashCreate(10);
-    } else
-	catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
-		                    xmlCatalogDefaultPrefer);
-    return(catal);
-}
-
-/**
- * xmlCatalogIsEmpty:
- * @catal:  should this create an SGML catalog
- *
- * Check is a catalog is empty
- *
- * Returns 1 if the catalog is empty, 0 if not, amd -1 in case of error.
- */
-int
-xmlCatalogIsEmpty(xmlCatalogPtr catal) {
-    if (catal == NULL)
-	return(-1);
-
-    if (catal->type == XML_XML_CATALOG_TYPE) {
-	if (catal->xml == NULL)
-	    return(1);
-	if ((catal->xml->type != XML_CATA_CATALOG) &&
-	    (catal->xml->type != XML_CATA_BROKEN_CATALOG))
-	    return(-1);
-	if (catal->xml->children == NULL)
-	    return(1);
-        return(0);
-    } else {
-	int res;
-
-	if (catal->sgml == NULL)
-	    return(1);
-	res = xmlHashSize(catal->sgml);
-	if (res == 0)
-	    return(1);
-	if (res < 0)
-	    return(-1);
-    }
-    return(0);
-}
-
-/************************************************************************
- *									*
- *   Public interfaces manipulating the global shared default catalog	*
- *									*
- ************************************************************************/
-
-/**
- * xmlInitializeCatalogData:
- *
- * Do the catalog initialization only of global data, doesn't try to load
- * any catalog actually.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-static void
-xmlInitializeCatalogData(void) {
-    if (xmlCatalogInitialized != 0)
-	return;
-
-    if (getenv("XML_DEBUG_CATALOG"))
-	xmlDebugCatalogs = 1;
-    xmlCatalogMutex = xmlNewRMutex();
-
-    xmlCatalogInitialized = 1;
-}
-/**
- * xmlInitializeCatalog:
- *
- * Do the catalog initialization.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-void
-xmlInitializeCatalog(void) {
-    if (xmlCatalogInitialized != 0)
-	return;
-
-    xmlInitializeCatalogData();
-    xmlRMutexLock(xmlCatalogMutex);
-
-    if (getenv("XML_DEBUG_CATALOG"))
-	xmlDebugCatalogs = 1;
-
-    if (xmlDefaultCatalog == NULL) {
-	const char *catalogs;
-	char *path;
-	const char *cur, *paths;
-	xmlCatalogPtr catal;
-	xmlCatalogEntryPtr *nextent;
-
-	catalogs = (const char *) getenv("XML_CATALOG_FILES");
-	if (catalogs == NULL)
-#if defined(_WIN32) && defined(_MSC_VER)
-    {
-		void* hmodule;
-		hmodule = GetModuleHandleA("libxml2.dll");
-		if (hmodule == NULL)
-			hmodule = GetModuleHandleA(NULL);
-		if (hmodule != NULL) {
-			char buf[256];
-			unsigned long len = GetModuleFileNameA(hmodule, buf, 255);
-			if (len != 0) {
-				char* p = &(buf[len]);
-				while (*p != '\\' && p > buf)
-					p--;
-				if (p != buf) {
-					xmlChar* uri;
-					strncpy(p, "\\..\\etc\\catalog", 255 - (p - buf));
-					uri = xmlCanonicPath((const xmlChar*)buf);
-					if (uri != NULL) {
-						strncpy(XML_XML_DEFAULT_CATALOG, uri, 255);
-						xmlFree(uri);
-					}
-				}
-			}
-		}
-		catalogs = XML_XML_DEFAULT_CATALOG;
-    }
-#else
-	    catalogs = XML_XML_DEFAULT_CATALOG;
-#endif
-
-	catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
-		xmlCatalogDefaultPrefer);
-	if (catal != NULL) {
-	    /* the XML_CATALOG_FILES envvar is allowed to contain a
-	       space-separated list of entries. */
-	    cur = catalogs;
-	    nextent = &catal->xml;
-	    while (*cur != '\0') {
-		while (xmlIsBlank_ch(*cur))
-		    cur++;
-		if (*cur != 0) {
-		    paths = cur;
-		    while ((*cur != 0) && (!xmlIsBlank_ch(*cur)))
-			cur++;
-		    path = (char *) xmlStrndup((const xmlChar *)paths, cur - paths);
-		    if (path != NULL) {
-			*nextent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
-				NULL, BAD_CAST path, xmlCatalogDefaultPrefer, NULL);
-			if (*nextent != NULL)
-			    nextent = &((*nextent)->next);
-			xmlFree(path);
-		    }
-		}
-	    }
-	    xmlDefaultCatalog = catal;
-	}
-    }
-
-    xmlRMutexUnlock(xmlCatalogMutex);
-}
-
-
-/**
- * xmlLoadCatalog:
- * @filename:  a file path
- *
- * Load the catalog and makes its definitions effective for the default
- * external entity loader. It will recurse in SGML CATALOG entries.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- *
- * Returns 0 in case of success -1 in case of error
- */
-int
-xmlLoadCatalog(const char *filename)
-{
-    int ret;
-    xmlCatalogPtr catal;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalogData();
-
-    xmlRMutexLock(xmlCatalogMutex);
-
-    if (xmlDefaultCatalog == NULL) {
-	catal = xmlLoadACatalog(filename);
-	if (catal == NULL) {
-	    xmlRMutexUnlock(xmlCatalogMutex);
-	    return(-1);
-	}
-
-	xmlDefaultCatalog = catal;
-	xmlRMutexUnlock(xmlCatalogMutex);
-	return(0);
-    }
-
-    ret = xmlExpandCatalog(xmlDefaultCatalog, filename);
-    xmlRMutexUnlock(xmlCatalogMutex);
-    return(ret);
-}
-
-/**
- * xmlLoadCatalogs:
- * @pathss:  a list of directories separated by a colon or a space.
- *
- * Load the catalogs and makes their definitions effective for the default
- * external entity loader.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-void
-xmlLoadCatalogs(const char *pathss) {
-    const char *cur;
-    const char *paths;
-    xmlChar *path;
-#ifdef _WIN32
-    int i, iLen;
-#endif
-
-    if (pathss == NULL)
-	return;
-
-    cur = pathss;
-    while (*cur != 0) {
-	while (xmlIsBlank_ch(*cur)) cur++;
-	if (*cur != 0) {
-	    paths = cur;
-	    while ((*cur != 0) && (*cur != PATH_SEPARATOR) && (!xmlIsBlank_ch(*cur)))
-		cur++;
-	    path = xmlStrndup((const xmlChar *)paths, cur - paths);
-#ifdef _WIN32
-        iLen = strlen((const char*)path);
-        for(i = 0; i < iLen; i++) {
-            if(path[i] == '\\') {
-                path[i] = '/';
-            }
-        }
-#endif
-	    if (path != NULL) {
-		xmlLoadCatalog((const char *) path);
-		xmlFree(path);
-	    }
-	}
-	while (*cur == PATH_SEPARATOR)
-	    cur++;
-    }
-}
-
-/**
- * xmlCatalogCleanup:
- *
- * Free up all the memory associated with catalogs
- */
-void
-xmlCatalogCleanup(void) {
-    if (xmlCatalogInitialized == 0)
-        return;
-
-    xmlRMutexLock(xmlCatalogMutex);
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Catalogs cleanup\n");
-    if (xmlCatalogXMLFiles != NULL)
-	xmlHashFree(xmlCatalogXMLFiles,
-		    (xmlHashDeallocator)xmlFreeCatalogHashEntryList);
-    xmlCatalogXMLFiles = NULL;
-    if (xmlDefaultCatalog != NULL)
-	xmlFreeCatalog(xmlDefaultCatalog);
-    xmlDefaultCatalog = NULL;
-    xmlDebugCatalogs = 0;
-    xmlCatalogInitialized = 0;
-    xmlRMutexUnlock(xmlCatalogMutex);
-    xmlFreeRMutex(xmlCatalogMutex);
-}
-
-/**
- * xmlCatalogResolveSystem:
- * @sysID:  the system ID string
- *
- * Try to lookup the catalog resource for a system ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- *      must be freed by the caller.
- */
-xmlChar *
-xmlCatalogResolveSystem(const xmlChar *sysID) {
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    ret = xmlACatalogResolveSystem(xmlDefaultCatalog, sysID);
-    return(ret);
-}
-
-/**
- * xmlCatalogResolvePublic:
- * @pubID:  the public ID string
- *
- * Try to lookup the catalog reference associated to a public ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- *      must be freed by the caller.
- */
-xmlChar *
-xmlCatalogResolvePublic(const xmlChar *pubID) {
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    ret = xmlACatalogResolvePublic(xmlDefaultCatalog, pubID);
-    return(ret);
-}
-
-/**
- * xmlCatalogResolve:
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlCatalogResolve(const xmlChar *pubID, const xmlChar *sysID) {
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    ret = xmlACatalogResolve(xmlDefaultCatalog, pubID, sysID);
-    return(ret);
-}
-
-/**
- * xmlCatalogResolveURI:
- * @URI:  the URI
- *
- * Do a complete resolution lookup of an URI
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlCatalogResolveURI(const xmlChar *URI) {
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    ret = xmlACatalogResolveURI(xmlDefaultCatalog, URI);
-    return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCatalogDump:
- * @out:  the file.
- *
- * Dump all the global catalog content to the given file.
- */
-void
-xmlCatalogDump(FILE *out) {
-    if (out == NULL)
-	return;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    xmlACatalogDump(xmlDefaultCatalog, out);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlCatalogAdd:
- * @type:  the type of record to add to the catalog
- * @orig:  the system, public or prefix to match
- * @replace:  the replacement value for the match
- *
- * Add an entry in the catalog, it may overwrite existing but
- * different entries.
- * If called before any other catalog routine, allows to override the
- * default shared catalog put in place by xmlInitializeCatalog();
- *
- * Returns 0 if successful, -1 otherwise
- */
-int
-xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace) {
-    int res = -1;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalogData();
-
-    xmlRMutexLock(xmlCatalogMutex);
-    /*
-     * Specific case where one want to override the default catalog
-     * put in place by xmlInitializeCatalog();
-     */
-    if ((xmlDefaultCatalog == NULL) &&
-	(xmlStrEqual(type, BAD_CAST "catalog"))) {
-	xmlDefaultCatalog = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
-		                          xmlCatalogDefaultPrefer);
-	xmlDefaultCatalog->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
-				    orig, NULL,  xmlCatalogDefaultPrefer, NULL);
-
-	xmlRMutexUnlock(xmlCatalogMutex);
-	return(0);
-    }
-
-    res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace);
-    xmlRMutexUnlock(xmlCatalogMutex);
-    return(res);
-}
-
-/**
- * xmlCatalogRemove:
- * @value:  the value to remove
- *
- * Remove an entry from the catalog
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-int
-xmlCatalogRemove(const xmlChar *value) {
-    int res;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    xmlRMutexLock(xmlCatalogMutex);
-    res = xmlACatalogRemove(xmlDefaultCatalog, value);
-    xmlRMutexUnlock(xmlCatalogMutex);
-    return(res);
-}
-
-/**
- * xmlCatalogConvert:
- *
- * Convert all the SGML catalog entries as XML ones
- *
- * Returns the number of entries converted if successful, -1 otherwise
- */
-int
-xmlCatalogConvert(void) {
-    int res = -1;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    xmlRMutexLock(xmlCatalogMutex);
-    res = xmlConvertSGMLCatalog(xmlDefaultCatalog);
-    xmlRMutexUnlock(xmlCatalogMutex);
-    return(res);
-}
-
-/************************************************************************
- *									*
- *	Public interface manipulating the common preferences		*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogGetDefaults:
- *
- * Used to get the user preference w.r.t. to what catalogs should
- * be accepted
- *
- * Returns the current xmlCatalogAllow value
- */
-xmlCatalogAllow
-xmlCatalogGetDefaults(void) {
-    return(xmlCatalogDefaultAllow);
-}
-
-/**
- * xmlCatalogSetDefaults:
- * @allow:  what catalogs should be accepted
- *
- * Used to set the user preference w.r.t. to what catalogs should
- * be accepted
- */
-void
-xmlCatalogSetDefaults(xmlCatalogAllow allow) {
-    if (xmlDebugCatalogs) {
-	switch (allow) {
-	    case XML_CATA_ALLOW_NONE:
-		xmlGenericError(xmlGenericErrorContext,
-			"Disabling catalog usage\n");
-		break;
-	    case XML_CATA_ALLOW_GLOBAL:
-		xmlGenericError(xmlGenericErrorContext,
-			"Allowing only global catalogs\n");
-		break;
-	    case XML_CATA_ALLOW_DOCUMENT:
-		xmlGenericError(xmlGenericErrorContext,
-			"Allowing only catalogs from the document\n");
-		break;
-	    case XML_CATA_ALLOW_ALL:
-		xmlGenericError(xmlGenericErrorContext,
-			"Allowing all catalogs\n");
-		break;
-	}
-    }
-    xmlCatalogDefaultAllow = allow;
-}
-
-/**
- * xmlCatalogSetDefaultPrefer:
- * @prefer:  the default preference for delegation
- *
- * Allows to set the preference between public and system for deletion
- * in XML Catalog resolution. C.f. section 4.1.1 of the spec
- * Values accepted are XML_CATA_PREFER_PUBLIC or XML_CATA_PREFER_SYSTEM
- *
- * Returns the previous value of the default preference for delegation
- */
-xmlCatalogPrefer
-xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer) {
-    xmlCatalogPrefer ret = xmlCatalogDefaultPrefer;
-
-    if (prefer == XML_CATA_PREFER_NONE)
-	return(ret);
-
-    if (xmlDebugCatalogs) {
-	switch (prefer) {
-	    case XML_CATA_PREFER_PUBLIC:
-		xmlGenericError(xmlGenericErrorContext,
-			"Setting catalog preference to PUBLIC\n");
-		break;
-	    case XML_CATA_PREFER_SYSTEM:
-		xmlGenericError(xmlGenericErrorContext,
-			"Setting catalog preference to SYSTEM\n");
-		break;
-	    default:
-		return(ret);
-	}
-    }
-    xmlCatalogDefaultPrefer = prefer;
-    return(ret);
-}
-
-/**
- * xmlCatalogSetDebug:
- * @level:  the debug level of catalogs required
- *
- * Used to set the debug level for catalog operation, 0 disable
- * debugging, 1 enable it
- *
- * Returns the previous value of the catalog debugging level
- */
-int
-xmlCatalogSetDebug(int level) {
-    int ret = xmlDebugCatalogs;
-
-    if (level <= 0)
-        xmlDebugCatalogs = 0;
-    else
-	xmlDebugCatalogs = level;
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *   Minimal interfaces used for per-document catalogs by the parser	*
- *									*
- ************************************************************************/
-
-/**
- * xmlCatalogFreeLocal:
- * @catalogs:  a document's list of catalogs
- *
- * Free up the memory associated to the catalog list
- */
-void
-xmlCatalogFreeLocal(void *catalogs) {
-    xmlCatalogEntryPtr catal;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    catal = (xmlCatalogEntryPtr) catalogs;
-    if (catal != NULL)
-	xmlFreeCatalogEntryList(catal);
-}
-
-
-/**
- * xmlCatalogAddLocal:
- * @catalogs:  a document's list of catalogs
- * @URL:  the URL to a new local catalog
- *
- * Add the new entry to the catalog list
- *
- * Returns the updated list
- */
-void *
-xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
-    xmlCatalogEntryPtr catal, add;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    if (URL == NULL)
-	return(catalogs);
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Adding document catalog %s\n", URL);
-
-    add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL,
-	                     xmlCatalogDefaultPrefer, NULL);
-    if (add == NULL)
-	return(catalogs);
-
-    catal = (xmlCatalogEntryPtr) catalogs;
-    if (catal == NULL)
-	return((void *) add);
-
-    while (catal->next != NULL)
-	catal = catal->next;
-    catal->next = add;
-    return(catalogs);
-}
-
-/**
- * xmlCatalogLocalResolve:
- * @catalogs:  a document's list of catalogs
- * @pubID:  the public ID string
- * @sysID:  the system ID string
- *
- * Do a complete resolution lookup of an External Identifier using a
- * document's private catalog list
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID,
-	               const xmlChar *sysID) {
-    xmlCatalogEntryPtr catal;
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    if ((pubID == NULL) && (sysID == NULL))
-	return(NULL);
-
-    if (xmlDebugCatalogs) {
-        if ((pubID != NULL) && (sysID != NULL)) {
-            xmlGenericError(xmlGenericErrorContext,
-                            "Local Resolve: pubID %s sysID %s\n", pubID, sysID);
-        } else if (pubID != NULL) {
-            xmlGenericError(xmlGenericErrorContext,
-                            "Local Resolve: pubID %s\n", pubID);
-        } else {
-            xmlGenericError(xmlGenericErrorContext,
-                            "Local Resolve: sysID %s\n", sysID);
-        }
-    }
-
-    catal = (xmlCatalogEntryPtr) catalogs;
-    if (catal == NULL)
-	return(NULL);
-    ret = xmlCatalogListXMLResolve(catal, pubID, sysID);
-    if ((ret != NULL) && (ret != XML_CATAL_BREAK))
-	return(ret);
-    return(NULL);
-}
-
-/**
- * xmlCatalogLocalResolveURI:
- * @catalogs:  a document's list of catalogs
- * @URI:  the URI
- *
- * Do a complete resolution lookup of an URI using a
- * document's private catalog list
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- *      by the caller.
- */
-xmlChar *
-xmlCatalogLocalResolveURI(void *catalogs, const xmlChar *URI) {
-    xmlCatalogEntryPtr catal;
-    xmlChar *ret;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    if (URI == NULL)
-	return(NULL);
-
-    if (xmlDebugCatalogs)
-	xmlGenericError(xmlGenericErrorContext,
-		"Resolve URI %s\n", URI);
-
-    catal = (xmlCatalogEntryPtr) catalogs;
-    if (catal == NULL)
-	return(NULL);
-    ret = xmlCatalogListXMLResolveURI(catal, URI);
-    if ((ret != NULL) && (ret != XML_CATAL_BREAK))
-	return(ret);
-    return(NULL);
-}
-
-/************************************************************************
- *									*
- *			Deprecated interfaces				*
- *									*
- ************************************************************************/
-/**
- * xmlCatalogGetSystem:
- * @sysID:  the system ID string
- *
- * Try to lookup the catalog reference associated to a system ID
- * DEPRECATED, use xmlCatalogResolveSystem()
- *
- * Returns the resource if found or NULL otherwise.
- */
-const xmlChar *
-xmlCatalogGetSystem(const xmlChar *sysID) {
-    xmlChar *ret;
-    static xmlChar result[1000];
-    static int msg = 0;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    if (msg == 0) {
-	xmlGenericError(xmlGenericErrorContext,
-		"Use of deprecated xmlCatalogGetSystem() call\n");
-	msg++;
-    }
-
-    if (sysID == NULL)
-	return(NULL);
-
-    /*
-     * Check first the XML catalogs
-     */
-    if (xmlDefaultCatalog != NULL) {
-	ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, NULL, sysID);
-	if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
-	    snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
-	    result[sizeof(result) - 1] = 0;
-	    return(result);
-	}
-    }
-
-    if (xmlDefaultCatalog != NULL)
-	return(xmlCatalogGetSGMLSystem(xmlDefaultCatalog->sgml, sysID));
-    return(NULL);
-}
-
-/**
- * xmlCatalogGetPublic:
- * @pubID:  the public ID string
- *
- * Try to lookup the catalog reference associated to a public ID
- * DEPRECATED, use xmlCatalogResolvePublic()
- *
- * Returns the resource if found or NULL otherwise.
- */
-const xmlChar *
-xmlCatalogGetPublic(const xmlChar *pubID) {
-    xmlChar *ret;
-    static xmlChar result[1000];
-    static int msg = 0;
-
-    if (!xmlCatalogInitialized)
-	xmlInitializeCatalog();
-
-    if (msg == 0) {
-	xmlGenericError(xmlGenericErrorContext,
-		"Use of deprecated xmlCatalogGetPublic() call\n");
-	msg++;
-    }
-
-    if (pubID == NULL)
-	return(NULL);
-
-    /*
-     * Check first the XML catalogs
-     */
-    if (xmlDefaultCatalog != NULL) {
-	ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, pubID, NULL);
-	if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
-	    snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
-	    result[sizeof(result) - 1] = 0;
-	    return(result);
-	}
-    }
-
-    if (xmlDefaultCatalog != NULL)
-	return(xmlCatalogGetSGMLPublic(xmlDefaultCatalog->sgml, pubID));
-    return(NULL);
-}
-
-#define bottom_catalog
-#include "elfgcchack.h"
-#endif /* LIBXML_CATALOG_ENABLED */
diff --git a/src/third_party/libxml/src/debugXML.c b/src/third_party/libxml/src/debugXML.c
deleted file mode 100644
index a1b550a..0000000
--- a/src/third_party/libxml/src/debugXML.c
+++ /dev/null
@@ -1,3428 +0,0 @@
-/*
- * debugXML.c : This is a set of routines used for debugging the tree
- *              produced by the XML parser.
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_DEBUG_ENABLED
-
-#include <string.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/debugXML.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/uri.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#endif
-
-#define DUMP_TEXT_TYPE 1
-
-typedef struct _xmlDebugCtxt xmlDebugCtxt;
-typedef xmlDebugCtxt *xmlDebugCtxtPtr;
-struct _xmlDebugCtxt {
-    FILE *output;               /* the output file */
-    char shift[101];            /* used for indenting */
-    int depth;                  /* current depth */
-    xmlDocPtr doc;              /* current document */
-    xmlNodePtr node;		/* current node */
-    xmlDictPtr dict;		/* the doc dictionary */
-    int check;                  /* do just checkings */
-    int errors;                 /* number of errors found */
-    int nodict;			/* if the document has no dictionary */
-    int options;		/* options */
-};
-
-static void xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node);
-
-static void
-xmlCtxtDumpInitCtxt(xmlDebugCtxtPtr ctxt)
-{
-    int i;
-
-    ctxt->depth = 0;
-    ctxt->check = 0;
-    ctxt->errors = 0;
-    ctxt->output = stdout;
-    ctxt->doc = NULL;
-    ctxt->node = NULL;
-    ctxt->dict = NULL;
-    ctxt->nodict = 0;
-    ctxt->options = 0;
-    for (i = 0; i < 100; i++)
-        ctxt->shift[i] = ' ';
-    ctxt->shift[100] = 0;
-}
-
-static void
-xmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- /* remove the ATTRIBUTE_UNUSED when this is added */
-}
-
-/**
- * xmlNsCheckScope:
- * @node: the node
- * @ns: the namespace node
- *
- * Check that a given namespace is in scope on a node.
- *
- * Returns 1 if in scope, -1 in case of argument error,
- *         -2 if the namespace is not in scope, and -3 if not on
- *         an ancestor node.
- */
-static int
-xmlNsCheckScope(xmlNodePtr node, xmlNsPtr ns)
-{
-    xmlNsPtr cur;
-
-    if ((node == NULL) || (ns == NULL))
-        return(-1);
-
-    if ((node->type != XML_ELEMENT_NODE) &&
-	(node->type != XML_ATTRIBUTE_NODE) &&
-	(node->type != XML_DOCUMENT_NODE) &&
-	(node->type != XML_TEXT_NODE) &&
-	(node->type != XML_HTML_DOCUMENT_NODE) &&
-	(node->type != XML_XINCLUDE_START))
-	return(-2);
-
-    while ((node != NULL) &&
-           ((node->type == XML_ELEMENT_NODE) ||
-            (node->type == XML_ATTRIBUTE_NODE) ||
-            (node->type == XML_TEXT_NODE) ||
-	    (node->type == XML_XINCLUDE_START))) {
-	if ((node->type == XML_ELEMENT_NODE) ||
-	    (node->type == XML_XINCLUDE_START)) {
-	    cur = node->nsDef;
-	    while (cur != NULL) {
-	        if (cur == ns)
-		    return(1);
-		if (xmlStrEqual(cur->prefix, ns->prefix))
-		    return(-2);
-		cur = cur->next;
-	    }
-	}
-	node = node->parent;
-    }
-    /* the xml namespace may be declared on the document node */
-    if ((node != NULL) &&
-        ((node->type == XML_DOCUMENT_NODE) ||
-	 (node->type == XML_HTML_DOCUMENT_NODE))) {
-	 xmlNsPtr oldNs = ((xmlDocPtr) node)->oldNs;
-	 if (oldNs == ns)
-	     return(1);
-    }
-    return(-3);
-}
-
-static void
-xmlCtxtDumpSpaces(xmlDebugCtxtPtr ctxt)
-{
-    if (ctxt->check)
-        return;
-    if ((ctxt->output != NULL) && (ctxt->depth > 0)) {
-        if (ctxt->depth < 50)
-            fprintf(ctxt->output, "%s", &ctxt->shift[100 - 2 * ctxt->depth]);
-        else
-            fprintf(ctxt->output, "%s", ctxt->shift);
-    }
-}
-
-/**
- * xmlDebugErr:
- * @ctxt:  a debug context
- * @error:  the error code
- *
- * Handle a debug error.
- */
-static void
-xmlDebugErr(xmlDebugCtxtPtr ctxt, int error, const char *msg)
-{
-    ctxt->errors++;
-    __xmlRaiseError(NULL, NULL, NULL,
-		    NULL, ctxt->node, XML_FROM_CHECK,
-		    error, XML_ERR_ERROR, NULL, 0,
-		    NULL, NULL, NULL, 0, 0,
-		    "%s", msg);
-}
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlDebugErr2(xmlDebugCtxtPtr ctxt, int error, const char *msg, int extra)
-{
-    ctxt->errors++;
-    __xmlRaiseError(NULL, NULL, NULL,
-		    NULL, ctxt->node, XML_FROM_CHECK,
-		    error, XML_ERR_ERROR, NULL, 0,
-		    NULL, NULL, NULL, 0, 0,
-		    msg, extra);
-}
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlDebugErr3(xmlDebugCtxtPtr ctxt, int error, const char *msg, const char *extra)
-{
-    ctxt->errors++;
-    __xmlRaiseError(NULL, NULL, NULL,
-		    NULL, ctxt->node, XML_FROM_CHECK,
-		    error, XML_ERR_ERROR, NULL, 0,
-		    NULL, NULL, NULL, 0, 0,
-		    msg, extra);
-}
-
-/**
- * xmlCtxtNsCheckScope:
- * @ctxt: the debugging context
- * @node: the node
- * @ns: the namespace node
- *
- * Report if a given namespace is is not in scope.
- */
-static void
-xmlCtxtNsCheckScope(xmlDebugCtxtPtr ctxt, xmlNodePtr node, xmlNsPtr ns)
-{
-    int ret;
-
-    ret = xmlNsCheckScope(node, ns);
-    if (ret == -2) {
-        if (ns->prefix == NULL)
-	    xmlDebugErr(ctxt, XML_CHECK_NS_SCOPE,
-			"Reference to default namespace not in scope\n");
-	else
-	    xmlDebugErr3(ctxt, XML_CHECK_NS_SCOPE,
-			 "Reference to namespace '%s' not in scope\n",
-			 (char *) ns->prefix);
-    }
-    if (ret == -3) {
-        if (ns->prefix == NULL)
-	    xmlDebugErr(ctxt, XML_CHECK_NS_ANCESTOR,
-			"Reference to default namespace not on ancestor\n");
-	else
-	    xmlDebugErr3(ctxt, XML_CHECK_NS_ANCESTOR,
-			 "Reference to namespace '%s' not on ancestor\n",
-			 (char *) ns->prefix);
-    }
-}
-
-/**
- * xmlCtxtCheckString:
- * @ctxt: the debug context
- * @str: the string
- *
- * Do debugging on the string, currently it just checks the UTF-8 content
- */
-static void
-xmlCtxtCheckString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
-{
-    if (str == NULL) return;
-    if (ctxt->check) {
-        if (!xmlCheckUTF8(str)) {
-	    xmlDebugErr3(ctxt, XML_CHECK_NOT_UTF8,
-			 "String is not UTF-8 %s", (const char *) str);
-	}
-    }
-}
-
-/**
- * xmlCtxtCheckName:
- * @ctxt: the debug context
- * @name: the name
- *
- * Do debugging on the name, for example the dictionary status and
- * conformance to the Name production.
- */
-static void
-xmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name)
-{
-    if (ctxt->check) {
-	if (name == NULL) {
-	    xmlDebugErr(ctxt, XML_CHECK_NO_NAME, "Name is NULL");
-	    return;
-	}
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-        if (xmlValidateName(name, 0)) {
-	    xmlDebugErr3(ctxt, XML_CHECK_NOT_NCNAME,
-			 "Name is not an NCName '%s'", (const char *) name);
-	}
-#endif
-	if ((ctxt->dict != NULL) &&
-	    (!xmlDictOwns(ctxt->dict, name)) &&
-            ((ctxt->doc == NULL) ||
-             ((ctxt->doc->parseFlags & (XML_PARSE_SAX1 | XML_PARSE_NODICT)) == 0))) {
-	    xmlDebugErr3(ctxt, XML_CHECK_OUTSIDE_DICT,
-			 "Name is not from the document dictionary '%s'",
-			 (const char *) name);
-	}
-    }
-}
-
-static void
-xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) {
-    xmlDocPtr doc;
-    xmlDictPtr dict;
-
-    doc = node->doc;
-
-    if (node->parent == NULL)
-        xmlDebugErr(ctxt, XML_CHECK_NO_PARENT,
-	            "Node has no parent\n");
-    if (node->doc == NULL) {
-        xmlDebugErr(ctxt, XML_CHECK_NO_DOC,
-	            "Node has no doc\n");
-        dict = NULL;
-    } else {
-	dict = doc->dict;
-	if ((dict == NULL) && (ctxt->nodict == 0)) {
-#if 0
-            /* desactivated right now as it raises too many errors */
-	    if (doc->type == XML_DOCUMENT_NODE)
-		xmlDebugErr(ctxt, XML_CHECK_NO_DICT,
-			    "Document has no dictionary\n");
-#endif
-	    ctxt->nodict = 1;
-	}
-	if (ctxt->doc == NULL)
-	    ctxt->doc = doc;
-
-	if (ctxt->dict == NULL) {
-	    ctxt->dict = dict;
-	}
-    }
-    if ((node->parent != NULL) && (node->doc != node->parent->doc) &&
-        (!xmlStrEqual(node->name, BAD_CAST "pseudoroot")))
-        xmlDebugErr(ctxt, XML_CHECK_WRONG_DOC,
-	            "Node doc differs from parent's one\n");
-    if (node->prev == NULL) {
-        if (node->type == XML_ATTRIBUTE_NODE) {
-	    if ((node->parent != NULL) &&
-	        (node != (xmlNodePtr) node->parent->properties))
-		xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
-                    "Attr has no prev and not first of attr list\n");
-
-        } else if ((node->parent != NULL) && (node->parent->children != node))
-	    xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
-                    "Node has no prev and not first of parent list\n");
-    } else {
-        if (node->prev->next != node)
-	    xmlDebugErr(ctxt, XML_CHECK_WRONG_PREV,
-                        "Node prev->next : back link wrong\n");
-    }
-    if (node->next == NULL) {
-	if ((node->parent != NULL) && (node->type != XML_ATTRIBUTE_NODE) &&
-	    (node->parent->last != node) &&
-	    (node->parent->type == XML_ELEMENT_NODE))
-	    xmlDebugErr(ctxt, XML_CHECK_NO_NEXT,
-                    "Node has no next and not last of parent list\n");
-    } else {
-        if (node->next->prev != node)
-	    xmlDebugErr(ctxt, XML_CHECK_WRONG_NEXT,
-                    "Node next->prev : forward link wrong\n");
-        if (node->next->parent != node->parent)
-	    xmlDebugErr(ctxt, XML_CHECK_WRONG_PARENT,
-                    "Node next->prev : forward link wrong\n");
-    }
-    if (node->type == XML_ELEMENT_NODE) {
-        xmlNsPtr ns;
-
-	ns = node->nsDef;
-	while (ns != NULL) {
-	    xmlCtxtNsCheckScope(ctxt, node, ns);
-	    ns = ns->next;
-	}
-	if (node->ns != NULL)
-	    xmlCtxtNsCheckScope(ctxt, node, node->ns);
-    } else if (node->type == XML_ATTRIBUTE_NODE) {
-	if (node->ns != NULL)
-	    xmlCtxtNsCheckScope(ctxt, node, node->ns);
-    }
-
-    if ((node->type != XML_ELEMENT_NODE) &&
-	(node->type != XML_ATTRIBUTE_NODE) &&
-	(node->type != XML_ELEMENT_DECL) &&
-	(node->type != XML_ATTRIBUTE_DECL) &&
-	(node->type != XML_DTD_NODE) &&
-	(node->type != XML_HTML_DOCUMENT_NODE) &&
-	(node->type != XML_DOCUMENT_NODE)) {
-	if (node->content != NULL)
-	    xmlCtxtCheckString(ctxt, (const xmlChar *) node->content);
-    }
-    switch (node->type) {
-        case XML_ELEMENT_NODE:
-        case XML_ATTRIBUTE_NODE:
-	    xmlCtxtCheckName(ctxt, node->name);
-	    break;
-        case XML_TEXT_NODE:
-	    if ((node->name == xmlStringText) ||
-	        (node->name == xmlStringTextNoenc))
-		break;
-	    /* some case of entity substitution can lead to this */
-	    if ((ctxt->dict != NULL) &&
-	        (node->name == xmlDictLookup(ctxt->dict, BAD_CAST "nbktext",
-		                             7)))
-		break;
-
-	    xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
-			 "Text node has wrong name '%s'",
-			 (const char *) node->name);
-	    break;
-        case XML_COMMENT_NODE:
-	    if (node->name == xmlStringComment)
-		break;
-	    xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
-			 "Comment node has wrong name '%s'",
-			 (const char *) node->name);
-	    break;
-        case XML_PI_NODE:
-	    xmlCtxtCheckName(ctxt, node->name);
-	    break;
-        case XML_CDATA_SECTION_NODE:
-	    if (node->name == NULL)
-		break;
-	    xmlDebugErr3(ctxt, XML_CHECK_NAME_NOT_NULL,
-			 "CData section has non NULL name '%s'",
-			 (const char *) node->name);
-	    break;
-        case XML_ENTITY_REF_NODE:
-        case XML_ENTITY_NODE:
-        case XML_DOCUMENT_TYPE_NODE:
-        case XML_DOCUMENT_FRAG_NODE:
-        case XML_NOTATION_NODE:
-        case XML_DTD_NODE:
-        case XML_ELEMENT_DECL:
-        case XML_ATTRIBUTE_DECL:
-        case XML_ENTITY_DECL:
-        case XML_NAMESPACE_DECL:
-        case XML_XINCLUDE_START:
-        case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
-        case XML_DOCB_DOCUMENT_NODE:
-#endif
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-	    break;
-    }
-}
-
-static void
-xmlCtxtDumpString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
-{
-    int i;
-
-    if (ctxt->check) {
-        return;
-    }
-    /* TODO: check UTF8 content of the string */
-    if (str == NULL) {
-        fprintf(ctxt->output, "(NULL)");
-        return;
-    }
-    for (i = 0; i < 40; i++)
-        if (str[i] == 0)
-            return;
-        else if (IS_BLANK_CH(str[i]))
-            fputc(' ', ctxt->output);
-        else if (str[i] >= 0x80)
-            fprintf(ctxt->output, "#%X", str[i]);
-        else
-            fputc(str[i], ctxt->output);
-    fprintf(ctxt->output, "...");
-}
-
-static void
-xmlCtxtDumpDtdNode(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (dtd == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "DTD node is NULL\n");
-        return;
-    }
-
-    if (dtd->type != XML_DTD_NODE) {
-	xmlDebugErr(ctxt, XML_CHECK_NOT_DTD,
-	            "Node is not a DTD");
-        return;
-    }
-    if (!ctxt->check) {
-        if (dtd->name != NULL)
-            fprintf(ctxt->output, "DTD(%s)", (char *) dtd->name);
-        else
-            fprintf(ctxt->output, "DTD");
-        if (dtd->ExternalID != NULL)
-            fprintf(ctxt->output, ", PUBLIC %s", (char *) dtd->ExternalID);
-        if (dtd->SystemID != NULL)
-            fprintf(ctxt->output, ", SYSTEM %s", (char *) dtd->SystemID);
-        fprintf(ctxt->output, "\n");
-    }
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) dtd);
-}
-
-static void
-xmlCtxtDumpAttrDecl(xmlDebugCtxtPtr ctxt, xmlAttributePtr attr)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (attr == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Attribute declaration is NULL\n");
-        return;
-    }
-    if (attr->type != XML_ATTRIBUTE_DECL) {
-	xmlDebugErr(ctxt, XML_CHECK_NOT_ATTR_DECL,
-	            "Node is not an attribute declaration");
-        return;
-    }
-    if (attr->name != NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "ATTRDECL(%s)", (char *) attr->name);
-    } else
-	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
-	            "Node attribute declaration has no name");
-    if (attr->elem != NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, " for %s", (char *) attr->elem);
-    } else
-	xmlDebugErr(ctxt, XML_CHECK_NO_ELEM,
-	            "Node attribute declaration has no element name");
-    if (!ctxt->check) {
-        switch (attr->atype) {
-            case XML_ATTRIBUTE_CDATA:
-                fprintf(ctxt->output, " CDATA");
-                break;
-            case XML_ATTRIBUTE_ID:
-                fprintf(ctxt->output, " ID");
-                break;
-            case XML_ATTRIBUTE_IDREF:
-                fprintf(ctxt->output, " IDREF");
-                break;
-            case XML_ATTRIBUTE_IDREFS:
-                fprintf(ctxt->output, " IDREFS");
-                break;
-            case XML_ATTRIBUTE_ENTITY:
-                fprintf(ctxt->output, " ENTITY");
-                break;
-            case XML_ATTRIBUTE_ENTITIES:
-                fprintf(ctxt->output, " ENTITIES");
-                break;
-            case XML_ATTRIBUTE_NMTOKEN:
-                fprintf(ctxt->output, " NMTOKEN");
-                break;
-            case XML_ATTRIBUTE_NMTOKENS:
-                fprintf(ctxt->output, " NMTOKENS");
-                break;
-            case XML_ATTRIBUTE_ENUMERATION:
-                fprintf(ctxt->output, " ENUMERATION");
-                break;
-            case XML_ATTRIBUTE_NOTATION:
-                fprintf(ctxt->output, " NOTATION ");
-                break;
-        }
-        if (attr->tree != NULL) {
-            int indx;
-            xmlEnumerationPtr cur = attr->tree;
-
-            for (indx = 0; indx < 5; indx++) {
-                if (indx != 0)
-                    fprintf(ctxt->output, "|%s", (char *) cur->name);
-                else
-                    fprintf(ctxt->output, " (%s", (char *) cur->name);
-                cur = cur->next;
-                if (cur == NULL)
-                    break;
-            }
-            if (cur == NULL)
-                fprintf(ctxt->output, ")");
-            else
-                fprintf(ctxt->output, "...)");
-        }
-        switch (attr->def) {
-            case XML_ATTRIBUTE_NONE:
-                break;
-            case XML_ATTRIBUTE_REQUIRED:
-                fprintf(ctxt->output, " REQUIRED");
-                break;
-            case XML_ATTRIBUTE_IMPLIED:
-                fprintf(ctxt->output, " IMPLIED");
-                break;
-            case XML_ATTRIBUTE_FIXED:
-                fprintf(ctxt->output, " FIXED");
-                break;
-        }
-        if (attr->defaultValue != NULL) {
-            fprintf(ctxt->output, "\"");
-            xmlCtxtDumpString(ctxt, attr->defaultValue);
-            fprintf(ctxt->output, "\"");
-        }
-        fprintf(ctxt->output, "\n");
-    }
-
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
-}
-
-static void
-xmlCtxtDumpElemDecl(xmlDebugCtxtPtr ctxt, xmlElementPtr elem)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (elem == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Element declaration is NULL\n");
-        return;
-    }
-    if (elem->type != XML_ELEMENT_DECL) {
-	xmlDebugErr(ctxt, XML_CHECK_NOT_ELEM_DECL,
-	            "Node is not an element declaration");
-        return;
-    }
-    if (elem->name != NULL) {
-        if (!ctxt->check) {
-            fprintf(ctxt->output, "ELEMDECL(");
-            xmlCtxtDumpString(ctxt, elem->name);
-            fprintf(ctxt->output, ")");
-        }
-    } else
-	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
-	            "Element declaration has no name");
-    if (!ctxt->check) {
-        switch (elem->etype) {
-            case XML_ELEMENT_TYPE_UNDEFINED:
-                fprintf(ctxt->output, ", UNDEFINED");
-                break;
-            case XML_ELEMENT_TYPE_EMPTY:
-                fprintf(ctxt->output, ", EMPTY");
-                break;
-            case XML_ELEMENT_TYPE_ANY:
-                fprintf(ctxt->output, ", ANY");
-                break;
-            case XML_ELEMENT_TYPE_MIXED:
-                fprintf(ctxt->output, ", MIXED ");
-                break;
-            case XML_ELEMENT_TYPE_ELEMENT:
-                fprintf(ctxt->output, ", MIXED ");
-                break;
-        }
-        if ((elem->type != XML_ELEMENT_NODE) && (elem->content != NULL)) {
-            char buf[5001];
-
-            buf[0] = 0;
-            xmlSnprintfElementContent(buf, 5000, elem->content, 1);
-            buf[5000] = 0;
-            fprintf(ctxt->output, "%s", buf);
-        }
-        fprintf(ctxt->output, "\n");
-    }
-
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) elem);
-}
-
-static void
-xmlCtxtDumpEntityDecl(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (ent == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Entity declaration is NULL\n");
-        return;
-    }
-    if (ent->type != XML_ENTITY_DECL) {
-	xmlDebugErr(ctxt, XML_CHECK_NOT_ENTITY_DECL,
-	            "Node is not an entity declaration");
-        return;
-    }
-    if (ent->name != NULL) {
-        if (!ctxt->check) {
-            fprintf(ctxt->output, "ENTITYDECL(");
-            xmlCtxtDumpString(ctxt, ent->name);
-            fprintf(ctxt->output, ")");
-        }
-    } else
-	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
-	            "Entity declaration has no name");
-    if (!ctxt->check) {
-        switch (ent->etype) {
-            case XML_INTERNAL_GENERAL_ENTITY:
-                fprintf(ctxt->output, ", internal\n");
-                break;
-            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
-                fprintf(ctxt->output, ", external parsed\n");
-                break;
-            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
-                fprintf(ctxt->output, ", unparsed\n");
-                break;
-            case XML_INTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, ", parameter\n");
-                break;
-            case XML_EXTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, ", external parameter\n");
-                break;
-            case XML_INTERNAL_PREDEFINED_ENTITY:
-                fprintf(ctxt->output, ", predefined\n");
-                break;
-        }
-        if (ent->ExternalID) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, " ExternalID=%s\n",
-                    (char *) ent->ExternalID);
-        }
-        if (ent->SystemID) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, " SystemID=%s\n",
-                    (char *) ent->SystemID);
-        }
-        if (ent->URI != NULL) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, " URI=%s\n", (char *) ent->URI);
-        }
-        if (ent->content) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, " content=");
-            xmlCtxtDumpString(ctxt, ent->content);
-            fprintf(ctxt->output, "\n");
-        }
-    }
-
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) ent);
-}
-
-static void
-xmlCtxtDumpNamespace(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (ns == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "namespace node is NULL\n");
-        return;
-    }
-    if (ns->type != XML_NAMESPACE_DECL) {
-	xmlDebugErr(ctxt, XML_CHECK_NOT_NS_DECL,
-	            "Node is not a namespace declaration");
-        return;
-    }
-    if (ns->href == NULL) {
-        if (ns->prefix != NULL)
-	    xmlDebugErr3(ctxt, XML_CHECK_NO_HREF,
-                    "Incomplete namespace %s href=NULL\n",
-                    (char *) ns->prefix);
-        else
-	    xmlDebugErr(ctxt, XML_CHECK_NO_HREF,
-                    "Incomplete default namespace href=NULL\n");
-    } else {
-        if (!ctxt->check) {
-            if (ns->prefix != NULL)
-                fprintf(ctxt->output, "namespace %s href=",
-                        (char *) ns->prefix);
-            else
-                fprintf(ctxt->output, "default namespace href=");
-
-            xmlCtxtDumpString(ctxt, ns->href);
-            fprintf(ctxt->output, "\n");
-        }
-    }
-}
-
-static void
-xmlCtxtDumpNamespaceList(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
-{
-    while (ns != NULL) {
-        xmlCtxtDumpNamespace(ctxt, ns);
-        ns = ns->next;
-    }
-}
-
-static void
-xmlCtxtDumpEntity(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (ent == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Entity is NULL\n");
-        return;
-    }
-    if (!ctxt->check) {
-        switch (ent->etype) {
-            case XML_INTERNAL_GENERAL_ENTITY:
-                fprintf(ctxt->output, "INTERNAL_GENERAL_ENTITY ");
-                break;
-            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL_GENERAL_PARSED_ENTITY ");
-                break;
-            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL_GENERAL_UNPARSED_ENTITY ");
-                break;
-            case XML_INTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, "INTERNAL_PARAMETER_ENTITY ");
-                break;
-            case XML_EXTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL_PARAMETER_ENTITY ");
-                break;
-            default:
-                fprintf(ctxt->output, "ENTITY_%d ! ", (int) ent->etype);
-        }
-        fprintf(ctxt->output, "%s\n", ent->name);
-        if (ent->ExternalID) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "ExternalID=%s\n",
-                    (char *) ent->ExternalID);
-        }
-        if (ent->SystemID) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "SystemID=%s\n", (char *) ent->SystemID);
-        }
-        if (ent->URI) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "URI=%s\n", (char *) ent->URI);
-        }
-        if (ent->content) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "content=");
-            xmlCtxtDumpString(ctxt, ent->content);
-            fprintf(ctxt->output, "\n");
-        }
-    }
-}
-
-/**
- * xmlCtxtDumpAttr:
- * @output:  the FILE * for the output
- * @attr:  the attribute
- * @depth:  the indentation level.
- *
- * Dumps debug information for the attribute
- */
-static void
-xmlCtxtDumpAttr(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
-{
-    xmlCtxtDumpSpaces(ctxt);
-
-    if (attr == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Attr is NULL");
-        return;
-    }
-    if (!ctxt->check) {
-        fprintf(ctxt->output, "ATTRIBUTE ");
-	xmlCtxtDumpString(ctxt, attr->name);
-        fprintf(ctxt->output, "\n");
-        if (attr->children != NULL) {
-            ctxt->depth++;
-            xmlCtxtDumpNodeList(ctxt, attr->children);
-            ctxt->depth--;
-        }
-    }
-    if (attr->name == NULL)
-	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
-	            "Attribute has no name");
-
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
-}
-
-/**
- * xmlCtxtDumpAttrList:
- * @output:  the FILE * for the output
- * @attr:  the attribute list
- * @depth:  the indentation level.
- *
- * Dumps debug information for the attribute list
- */
-static void
-xmlCtxtDumpAttrList(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
-{
-    while (attr != NULL) {
-        xmlCtxtDumpAttr(ctxt, attr);
-        attr = attr->next;
-    }
-}
-
-/**
- * xmlCtxtDumpOneNode:
- * @output:  the FILE * for the output
- * @node:  the node
- * @depth:  the indentation level.
- *
- * Dumps debug information for the element node, it is not recursive
- */
-static void
-xmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
-    if (node == NULL) {
-        if (!ctxt->check) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "node is NULL\n");
-        }
-        return;
-    }
-    ctxt->node = node;
-
-    switch (node->type) {
-        case XML_ELEMENT_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "ELEMENT ");
-                if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
-                    xmlCtxtDumpString(ctxt, node->ns->prefix);
-                    fprintf(ctxt->output, ":");
-                }
-                xmlCtxtDumpString(ctxt, node->name);
-                fprintf(ctxt->output, "\n");
-            }
-            break;
-        case XML_ATTRIBUTE_NODE:
-            if (!ctxt->check)
-                xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "Error, ATTRIBUTE found here\n");
-            xmlCtxtGenericNodeCheck(ctxt, node);
-            return;
-        case XML_TEXT_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                if (node->name == (const xmlChar *) xmlStringTextNoenc)
-                    fprintf(ctxt->output, "TEXT no enc");
-                else
-                    fprintf(ctxt->output, "TEXT");
-		if (ctxt->options & DUMP_TEXT_TYPE) {
-		    if (node->content == (xmlChar *) &(node->properties))
-			fprintf(ctxt->output, " compact\n");
-		    else if (xmlDictOwns(ctxt->dict, node->content) == 1)
-			fprintf(ctxt->output, " interned\n");
-		    else
-			fprintf(ctxt->output, "\n");
-		} else
-		    fprintf(ctxt->output, "\n");
-            }
-            break;
-        case XML_CDATA_SECTION_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "CDATA_SECTION\n");
-            }
-            break;
-        case XML_ENTITY_REF_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "ENTITY_REF(%s)\n",
-                        (char *) node->name);
-            }
-            break;
-        case XML_ENTITY_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "ENTITY\n");
-            }
-            break;
-        case XML_PI_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "PI %s\n", (char *) node->name);
-            }
-            break;
-        case XML_COMMENT_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "COMMENT\n");
-            }
-            break;
-        case XML_DOCUMENT_NODE:
-        case XML_HTML_DOCUMENT_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-            }
-            fprintf(ctxt->output, "Error, DOCUMENT found here\n");
-            xmlCtxtGenericNodeCheck(ctxt, node);
-            return;
-        case XML_DOCUMENT_TYPE_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "DOCUMENT_TYPE\n");
-            }
-            break;
-        case XML_DOCUMENT_FRAG_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "DOCUMENT_FRAG\n");
-            }
-            break;
-        case XML_NOTATION_NODE:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "NOTATION\n");
-            }
-            break;
-        case XML_DTD_NODE:
-            xmlCtxtDumpDtdNode(ctxt, (xmlDtdPtr) node);
-            return;
-        case XML_ELEMENT_DECL:
-            xmlCtxtDumpElemDecl(ctxt, (xmlElementPtr) node);
-            return;
-        case XML_ATTRIBUTE_DECL:
-            xmlCtxtDumpAttrDecl(ctxt, (xmlAttributePtr) node);
-            return;
-        case XML_ENTITY_DECL:
-            xmlCtxtDumpEntityDecl(ctxt, (xmlEntityPtr) node);
-            return;
-        case XML_NAMESPACE_DECL:
-            xmlCtxtDumpNamespace(ctxt, (xmlNsPtr) node);
-            return;
-        case XML_XINCLUDE_START:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "INCLUDE START\n");
-            }
-            return;
-        case XML_XINCLUDE_END:
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "INCLUDE END\n");
-            }
-            return;
-        default:
-            if (!ctxt->check)
-                xmlCtxtDumpSpaces(ctxt);
-	    xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
-	                "Unknown node type %d\n", node->type);
-            return;
-    }
-    if (node->doc == NULL) {
-        if (!ctxt->check) {
-            xmlCtxtDumpSpaces(ctxt);
-        }
-        fprintf(ctxt->output, "PBM: doc == NULL !!!\n");
-    }
-    ctxt->depth++;
-    if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL))
-        xmlCtxtDumpNamespaceList(ctxt, node->nsDef);
-    if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL))
-        xmlCtxtDumpAttrList(ctxt, node->properties);
-    if (node->type != XML_ENTITY_REF_NODE) {
-        if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) {
-            if (!ctxt->check) {
-                xmlCtxtDumpSpaces(ctxt);
-                fprintf(ctxt->output, "content=");
-                xmlCtxtDumpString(ctxt, node->content);
-                fprintf(ctxt->output, "\n");
-            }
-        }
-    } else {
-        xmlEntityPtr ent;
-
-        ent = xmlGetDocEntity(node->doc, node->name);
-        if (ent != NULL)
-            xmlCtxtDumpEntity(ctxt, ent);
-    }
-    ctxt->depth--;
-
-    /*
-     * Do a bit of checking
-     */
-    xmlCtxtGenericNodeCheck(ctxt, node);
-}
-
-/**
- * xmlCtxtDumpNode:
- * @output:  the FILE * for the output
- * @node:  the node
- * @depth:  the indentation level.
- *
- * Dumps debug information for the element node, it is recursive
- */
-static void
-xmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
-    if (node == NULL) {
-        if (!ctxt->check) {
-            xmlCtxtDumpSpaces(ctxt);
-            fprintf(ctxt->output, "node is NULL\n");
-        }
-        return;
-    }
-    xmlCtxtDumpOneNode(ctxt, node);
-    if ((node->type != XML_NAMESPACE_DECL) &&
-        (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) {
-        ctxt->depth++;
-        xmlCtxtDumpNodeList(ctxt, node->children);
-        ctxt->depth--;
-    }
-}
-
-/**
- * xmlCtxtDumpNodeList:
- * @output:  the FILE * for the output
- * @node:  the node list
- * @depth:  the indentation level.
- *
- * Dumps debug information for the list of element node, it is recursive
- */
-static void
-xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
-    while (node != NULL) {
-        xmlCtxtDumpNode(ctxt, node);
-        node = node->next;
-    }
-}
-
-static void
-xmlCtxtDumpDocHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
-    if (doc == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "DOCUMENT == NULL !\n");
-        return;
-    }
-    ctxt->node = (xmlNodePtr) doc;
-
-    switch (doc->type) {
-        case XML_ELEMENT_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ELEMENT,
-	                "Misplaced ELEMENT node\n");
-            break;
-        case XML_ATTRIBUTE_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ATTRIBUTE,
-	                "Misplaced ATTRIBUTE node\n");
-            break;
-        case XML_TEXT_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_TEXT,
-	                "Misplaced TEXT node\n");
-            break;
-        case XML_CDATA_SECTION_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_CDATA,
-	                "Misplaced CDATA node\n");
-            break;
-        case XML_ENTITY_REF_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITYREF,
-	                "Misplaced ENTITYREF node\n");
-            break;
-        case XML_ENTITY_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITY,
-	                "Misplaced ENTITY node\n");
-            break;
-        case XML_PI_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_PI,
-	                "Misplaced PI node\n");
-            break;
-        case XML_COMMENT_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_COMMENT,
-	                "Misplaced COMMENT node\n");
-            break;
-        case XML_DOCUMENT_NODE:
-	    if (!ctxt->check)
-		fprintf(ctxt->output, "DOCUMENT\n");
-            break;
-        case XML_HTML_DOCUMENT_NODE:
-	    if (!ctxt->check)
-		fprintf(ctxt->output, "HTML DOCUMENT\n");
-            break;
-        case XML_DOCUMENT_TYPE_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_DOCTYPE,
-	                "Misplaced DOCTYPE node\n");
-            break;
-        case XML_DOCUMENT_FRAG_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_FRAGMENT,
-	                "Misplaced FRAGMENT node\n");
-            break;
-        case XML_NOTATION_NODE:
-	    xmlDebugErr(ctxt, XML_CHECK_FOUND_NOTATION,
-	                "Misplaced NOTATION node\n");
-            break;
-        default:
-	    xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
-	                "Unknown node type %d\n", doc->type);
-    }
-}
-
-/**
- * xmlCtxtDumpDocumentHead:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information cncerning the document, not recursive
- */
-static void
-xmlCtxtDumpDocumentHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
-    if (doc == NULL) return;
-    xmlCtxtDumpDocHead(ctxt, doc);
-    if (!ctxt->check) {
-        if (doc->name != NULL) {
-            fprintf(ctxt->output, "name=");
-            xmlCtxtDumpString(ctxt, BAD_CAST doc->name);
-            fprintf(ctxt->output, "\n");
-        }
-        if (doc->version != NULL) {
-            fprintf(ctxt->output, "version=");
-            xmlCtxtDumpString(ctxt, doc->version);
-            fprintf(ctxt->output, "\n");
-        }
-        if (doc->encoding != NULL) {
-            fprintf(ctxt->output, "encoding=");
-            xmlCtxtDumpString(ctxt, doc->encoding);
-            fprintf(ctxt->output, "\n");
-        }
-        if (doc->URL != NULL) {
-            fprintf(ctxt->output, "URL=");
-            xmlCtxtDumpString(ctxt, doc->URL);
-            fprintf(ctxt->output, "\n");
-        }
-        if (doc->standalone)
-            fprintf(ctxt->output, "standalone=true\n");
-    }
-    if (doc->oldNs != NULL)
-        xmlCtxtDumpNamespaceList(ctxt, doc->oldNs);
-}
-
-/**
- * xmlCtxtDumpDocument:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information for the document, it's recursive
- */
-static void
-xmlCtxtDumpDocument(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
-    if (doc == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "DOCUMENT == NULL !\n");
-        return;
-    }
-    xmlCtxtDumpDocumentHead(ctxt, doc);
-    if (((doc->type == XML_DOCUMENT_NODE) ||
-         (doc->type == XML_HTML_DOCUMENT_NODE))
-        && (doc->children != NULL)) {
-        ctxt->depth++;
-        xmlCtxtDumpNodeList(ctxt, doc->children);
-        ctxt->depth--;
-    }
-}
-
-static void
-xmlCtxtDumpEntityCallback(xmlEntityPtr cur, xmlDebugCtxtPtr ctxt)
-{
-    if (cur == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Entity is NULL");
-        return;
-    }
-    if (!ctxt->check) {
-        fprintf(ctxt->output, "%s : ", (char *) cur->name);
-        switch (cur->etype) {
-            case XML_INTERNAL_GENERAL_ENTITY:
-                fprintf(ctxt->output, "INTERNAL GENERAL, ");
-                break;
-            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL PARSED, ");
-                break;
-            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL UNPARSED, ");
-                break;
-            case XML_INTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, "INTERNAL PARAMETER, ");
-                break;
-            case XML_EXTERNAL_PARAMETER_ENTITY:
-                fprintf(ctxt->output, "EXTERNAL PARAMETER, ");
-                break;
-            default:
-		xmlDebugErr2(ctxt, XML_CHECK_ENTITY_TYPE,
-			     "Unknown entity type %d\n", cur->etype);
-        }
-        if (cur->ExternalID != NULL)
-            fprintf(ctxt->output, "ID \"%s\"", (char *) cur->ExternalID);
-        if (cur->SystemID != NULL)
-            fprintf(ctxt->output, "SYSTEM \"%s\"", (char *) cur->SystemID);
-        if (cur->orig != NULL)
-            fprintf(ctxt->output, "\n orig \"%s\"", (char *) cur->orig);
-        if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL))
-            fprintf(ctxt->output, "\n content \"%s\"",
-                    (char *) cur->content);
-        fprintf(ctxt->output, "\n");
-    }
-}
-
-/**
- * xmlCtxtDumpEntities:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information for all the entities in use by the document
- */
-static void
-xmlCtxtDumpEntities(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
-    if (doc == NULL) return;
-    xmlCtxtDumpDocHead(ctxt, doc);
-    if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
-        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
-            doc->intSubset->entities;
-
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Entities in internal subset\n");
-        xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
-                    ctxt);
-    } else
-        fprintf(ctxt->output, "No entities in internal subset\n");
-    if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
-        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
-            doc->extSubset->entities;
-
-        if (!ctxt->check)
-            fprintf(ctxt->output, "Entities in external subset\n");
-        xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
-                    ctxt);
-    } else if (!ctxt->check)
-        fprintf(ctxt->output, "No entities in external subset\n");
-}
-
-/**
- * xmlCtxtDumpDTD:
- * @output:  the FILE * for the output
- * @dtd:  the DTD
- *
- * Dumps debug information for the DTD
- */
-static void
-xmlCtxtDumpDTD(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
-{
-    if (dtd == NULL) {
-        if (!ctxt->check)
-            fprintf(ctxt->output, "DTD is NULL\n");
-        return;
-    }
-    xmlCtxtDumpDtdNode(ctxt, dtd);
-    if (dtd->children == NULL)
-        fprintf(ctxt->output, "    DTD is empty\n");
-    else {
-        ctxt->depth++;
-        xmlCtxtDumpNodeList(ctxt, dtd->children);
-        ctxt->depth--;
-    }
-}
-
-/************************************************************************
- *									*
- *			Public entry points for dump			*
- *									*
- ************************************************************************/
-
-/**
- * xmlDebugDumpString:
- * @output:  the FILE * for the output
- * @str:  the string
- *
- * Dumps informations about the string, shorten it if necessary
- */
-void
-xmlDebugDumpString(FILE * output, const xmlChar * str)
-{
-    int i;
-
-    if (output == NULL)
-	output = stdout;
-    if (str == NULL) {
-        fprintf(output, "(NULL)");
-        return;
-    }
-    for (i = 0; i < 40; i++)
-        if (str[i] == 0)
-            return;
-        else if (IS_BLANK_CH(str[i]))
-            fputc(' ', output);
-        else if (str[i] >= 0x80)
-            fprintf(output, "#%X", str[i]);
-        else
-            fputc(str[i], output);
-    fprintf(output, "...");
-}
-
-/**
- * xmlDebugDumpAttr:
- * @output:  the FILE * for the output
- * @attr:  the attribute
- * @depth:  the indentation level.
- *
- * Dumps debug information for the attribute
- */
-void
-xmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) {
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL) return;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.depth = depth;
-    xmlCtxtDumpAttr(&ctxt, attr);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-
-/**
- * xmlDebugDumpEntities:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information for all the entities in use by the document
- */
-void
-xmlDebugDumpEntities(FILE * output, xmlDocPtr doc)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL) return;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    xmlCtxtDumpEntities(&ctxt, doc);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpAttrList:
- * @output:  the FILE * for the output
- * @attr:  the attribute list
- * @depth:  the indentation level.
- *
- * Dumps debug information for the attribute list
- */
-void
-xmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL) return;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.depth = depth;
-    xmlCtxtDumpAttrList(&ctxt, attr);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpOneNode:
- * @output:  the FILE * for the output
- * @node:  the node
- * @depth:  the indentation level.
- *
- * Dumps debug information for the element node, it is not recursive
- */
-void
-xmlDebugDumpOneNode(FILE * output, xmlNodePtr node, int depth)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL) return;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.depth = depth;
-    xmlCtxtDumpOneNode(&ctxt, node);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpNode:
- * @output:  the FILE * for the output
- * @node:  the node
- * @depth:  the indentation level.
- *
- * Dumps debug information for the element node, it is recursive
- */
-void
-xmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.depth = depth;
-    xmlCtxtDumpNode(&ctxt, node);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpNodeList:
- * @output:  the FILE * for the output
- * @node:  the node list
- * @depth:  the indentation level.
- *
- * Dumps debug information for the list of element node, it is recursive
- */
-void
-xmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.depth = depth;
-    xmlCtxtDumpNodeList(&ctxt, node);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDocumentHead:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information cncerning the document, not recursive
- */
-void
-xmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.options |= DUMP_TEXT_TYPE;
-    ctxt.output = output;
-    xmlCtxtDumpDocumentHead(&ctxt, doc);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDocument:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Dumps debug information for the document, it's recursive
- */
-void
-xmlDebugDumpDocument(FILE * output, xmlDocPtr doc)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.options |= DUMP_TEXT_TYPE;
-    ctxt.output = output;
-    xmlCtxtDumpDocument(&ctxt, doc);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDTD:
- * @output:  the FILE * for the output
- * @dtd:  the DTD
- *
- * Dumps debug information for the DTD
- */
-void
-xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.options |= DUMP_TEXT_TYPE;
-    ctxt.output = output;
-    xmlCtxtDumpDTD(&ctxt, dtd);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/************************************************************************
- *									*
- *			Public entry points for checkings		*
- *									*
- ************************************************************************/
-
-/**
- * xmlDebugCheckDocument:
- * @output:  the FILE * for the output
- * @doc:  the document
- *
- * Check the document for potential content problems, and output
- * the errors to @output
- *
- * Returns the number of errors found
- */
-int
-xmlDebugCheckDocument(FILE * output, xmlDocPtr doc)
-{
-    xmlDebugCtxt ctxt;
-
-    if (output == NULL)
-	output = stdout;
-    xmlCtxtDumpInitCtxt(&ctxt);
-    ctxt.output = output;
-    ctxt.check = 1;
-    xmlCtxtDumpDocument(&ctxt, doc);
-    xmlCtxtDumpCleanCtxt(&ctxt);
-    return(ctxt.errors);
-}
-
-/************************************************************************
- *									*
- *			Helpers for Shell				*
- *									*
- ************************************************************************/
-
-/**
- * xmlLsCountNode:
- * @node:  the node to count
- *
- * Count the children of @node.
- *
- * Returns the number of children of @node.
- */
-int
-xmlLsCountNode(xmlNodePtr node) {
-    int ret = 0;
-    xmlNodePtr list = NULL;
-
-    if (node == NULL)
-	return(0);
-
-    switch (node->type) {
-	case XML_ELEMENT_NODE:
-	    list = node->children;
-	    break;
-	case XML_DOCUMENT_NODE:
-	case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
-	case XML_DOCB_DOCUMENT_NODE:
-#endif
-	    list = ((xmlDocPtr) node)->children;
-	    break;
-	case XML_ATTRIBUTE_NODE:
-	    list = ((xmlAttrPtr) node)->children;
-	    break;
-	case XML_TEXT_NODE:
-	case XML_CDATA_SECTION_NODE:
-	case XML_PI_NODE:
-	case XML_COMMENT_NODE:
-	    if (node->content != NULL) {
-		ret = xmlStrlen(node->content);
-            }
-	    break;
-	case XML_ENTITY_REF_NODE:
-	case XML_DOCUMENT_TYPE_NODE:
-	case XML_ENTITY_NODE:
-	case XML_DOCUMENT_FRAG_NODE:
-	case XML_NOTATION_NODE:
-	case XML_DTD_NODE:
-        case XML_ELEMENT_DECL:
-        case XML_ATTRIBUTE_DECL:
-        case XML_ENTITY_DECL:
-	case XML_NAMESPACE_DECL:
-	case XML_XINCLUDE_START:
-	case XML_XINCLUDE_END:
-	    ret = 1;
-	    break;
-    }
-    for (;list != NULL;ret++)
-        list = list->next;
-    return(ret);
-}
-
-/**
- * xmlLsOneNode:
- * @output:  the FILE * for the output
- * @node:  the node to dump
- *
- * Dump to @output the type and name of @node.
- */
-void
-xmlLsOneNode(FILE *output, xmlNodePtr node) {
-    if (output == NULL) return;
-    if (node == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    switch (node->type) {
-	case XML_ELEMENT_NODE:
-	    fprintf(output, "-");
-	    break;
-	case XML_ATTRIBUTE_NODE:
-	    fprintf(output, "a");
-	    break;
-	case XML_TEXT_NODE:
-	    fprintf(output, "t");
-	    break;
-	case XML_CDATA_SECTION_NODE:
-	    fprintf(output, "C");
-	    break;
-	case XML_ENTITY_REF_NODE:
-	    fprintf(output, "e");
-	    break;
-	case XML_ENTITY_NODE:
-	    fprintf(output, "E");
-	    break;
-	case XML_PI_NODE:
-	    fprintf(output, "p");
-	    break;
-	case XML_COMMENT_NODE:
-	    fprintf(output, "c");
-	    break;
-	case XML_DOCUMENT_NODE:
-	    fprintf(output, "d");
-	    break;
-	case XML_HTML_DOCUMENT_NODE:
-	    fprintf(output, "h");
-	    break;
-	case XML_DOCUMENT_TYPE_NODE:
-	    fprintf(output, "T");
-	    break;
-	case XML_DOCUMENT_FRAG_NODE:
-	    fprintf(output, "F");
-	    break;
-	case XML_NOTATION_NODE:
-	    fprintf(output, "N");
-	    break;
-	case XML_NAMESPACE_DECL:
-	    fprintf(output, "n");
-	    break;
-	default:
-	    fprintf(output, "?");
-    }
-    if (node->type != XML_NAMESPACE_DECL) {
-	if (node->properties != NULL)
-	    fprintf(output, "a");
-	else
-	    fprintf(output, "-");
-	if (node->nsDef != NULL)
-	    fprintf(output, "n");
-	else
-	    fprintf(output, "-");
-    }
-
-    fprintf(output, " %8d ", xmlLsCountNode(node));
-
-    switch (node->type) {
-	case XML_ELEMENT_NODE:
-	    if (node->name != NULL) {
-                if ((node->ns != NULL) && (node->ns->prefix != NULL))
-                    fprintf(output, "%s:", node->ns->prefix);
-		fprintf(output, "%s", (const char *) node->name);
-            }
-	    break;
-	case XML_ATTRIBUTE_NODE:
-	    if (node->name != NULL)
-		fprintf(output, "%s", (const char *) node->name);
-	    break;
-	case XML_TEXT_NODE:
-	    if (node->content != NULL) {
-		xmlDebugDumpString(output, node->content);
-            }
-	    break;
-	case XML_CDATA_SECTION_NODE:
-	    break;
-	case XML_ENTITY_REF_NODE:
-	    if (node->name != NULL)
-		fprintf(output, "%s", (const char *) node->name);
-	    break;
-	case XML_ENTITY_NODE:
-	    if (node->name != NULL)
-		fprintf(output, "%s", (const char *) node->name);
-	    break;
-	case XML_PI_NODE:
-	    if (node->name != NULL)
-		fprintf(output, "%s", (const char *) node->name);
-	    break;
-	case XML_COMMENT_NODE:
-	    break;
-	case XML_DOCUMENT_NODE:
-	    break;
-	case XML_HTML_DOCUMENT_NODE:
-	    break;
-	case XML_DOCUMENT_TYPE_NODE:
-	    break;
-	case XML_DOCUMENT_FRAG_NODE:
-	    break;
-	case XML_NOTATION_NODE:
-	    break;
-	case XML_NAMESPACE_DECL: {
-	    xmlNsPtr ns = (xmlNsPtr) node;
-
-	    if (ns->prefix == NULL)
-		fprintf(output, "default -> %s", (char *)ns->href);
-	    else
-		fprintf(output, "%s -> %s", (char *)ns->prefix,
-			(char *)ns->href);
-	    break;
-	}
-	default:
-	    if (node->name != NULL)
-		fprintf(output, "%s", (const char *) node->name);
-    }
-    fprintf(output, "\n");
-}
-
-/**
- * xmlBoolToText:
- * @boolval: a bool to turn into text
- *
- * Convenient way to turn bool into text
- *
- * Returns a pointer to either "True" or "False"
- */
-const char *
-xmlBoolToText(int boolval)
-{
-    if (boolval)
-        return("True");
-    else
-        return("False");
-}
-
-#ifdef LIBXML_XPATH_ENABLED
-/****************************************************************
- *								*
- *		The XML shell related functions			*
- *								*
- ****************************************************************/
-
-
-
-/*
- * TODO: Improvement/cleanups for the XML shell
- *     - allow to shell out an editor on a subpart
- *     - cleanup function registrations (with help) and calling
- *     - provide registration routines
- */
-
-/**
- * xmlShellPrintXPathError:
- * @errorType: valid xpath error id
- * @arg: the argument that cause xpath to fail
- *
- * Print the xpath error to libxml default error channel
- */
-void
-xmlShellPrintXPathError(int errorType, const char *arg)
-{
-    const char *default_arg = "Result";
-
-    if (!arg)
-        arg = default_arg;
-
-    switch (errorType) {
-        case XPATH_UNDEFINED:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s: no such node\n", arg);
-            break;
-
-        case XPATH_BOOLEAN:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a Boolean\n", arg);
-            break;
-        case XPATH_NUMBER:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a number\n", arg);
-            break;
-        case XPATH_STRING:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a string\n", arg);
-            break;
-        case XPATH_POINT:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a point\n", arg);
-            break;
-        case XPATH_RANGE:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a range\n", arg);
-            break;
-        case XPATH_LOCATIONSET:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is a range\n", arg);
-            break;
-        case XPATH_USERS:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is user-defined\n", arg);
-            break;
-        case XPATH_XSLT_TREE:
-            xmlGenericError(xmlGenericErrorContext,
-                            "%s is an XSLT value tree\n", arg);
-            break;
-    }
-#if 0
-    xmlGenericError(xmlGenericErrorContext,
-                    "Try casting the result string function (xpath builtin)\n",
-                    arg);
-#endif
-}
-
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellPrintNodeCtxt:
- * @ctxt : a non-null shell context
- * @node : a non-null node to print to the output FILE
- *
- * Print node to the output FILE
- */
-static void
-xmlShellPrintNodeCtxt(xmlShellCtxtPtr ctxt,xmlNodePtr node)
-{
-    FILE *fp;
-
-    if (!node)
-        return;
-    if (ctxt == NULL)
-	fp = stdout;
-    else
-	fp = ctxt->output;
-
-    if (node->type == XML_DOCUMENT_NODE)
-        xmlDocDump(fp, (xmlDocPtr) node);
-    else if (node->type == XML_ATTRIBUTE_NODE)
-        xmlDebugDumpAttrList(fp, (xmlAttrPtr) node, 0);
-    else
-        xmlElemDump(fp, node->doc, node);
-
-    fprintf(fp, "\n");
-}
-
-/**
- * xmlShellPrintNode:
- * @node : a non-null node to print to the output FILE
- *
- * Print node to the output FILE
- */
-void
-xmlShellPrintNode(xmlNodePtr node)
-{
-    xmlShellPrintNodeCtxt(NULL, node);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlShellPrintXPathResultCtxt:
- * @ctxt: a valid shell context
- * @list: a valid result generated by an xpath evaluation
- *
- * Prints result to the output FILE
- */
-static void
-xmlShellPrintXPathResultCtxt(xmlShellCtxtPtr ctxt,xmlXPathObjectPtr list)
-{
-    if (!ctxt)
-       return;
-
-    if (list != NULL) {
-        switch (list->type) {
-            case XPATH_NODESET:{
-#ifdef LIBXML_OUTPUT_ENABLED
-                    int indx;
-
-                    if (list->nodesetval) {
-                        for (indx = 0; indx < list->nodesetval->nodeNr;
-                             indx++) {
-                            xmlShellPrintNodeCtxt(ctxt,
-				    list->nodesetval->nodeTab[indx]);
-                        }
-                    } else {
-                        xmlGenericError(xmlGenericErrorContext,
-                                        "Empty node set\n");
-                    }
-                    break;
-#else
-		    xmlGenericError(xmlGenericErrorContext,
-				    "Node set\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
-                }
-            case XPATH_BOOLEAN:
-                xmlGenericError(xmlGenericErrorContext,
-                                "Is a Boolean:%s\n",
-                                xmlBoolToText(list->boolval));
-                break;
-            case XPATH_NUMBER:
-                xmlGenericError(xmlGenericErrorContext,
-                                "Is a number:%0g\n", list->floatval);
-                break;
-            case XPATH_STRING:
-                xmlGenericError(xmlGenericErrorContext,
-                                "Is a string:%s\n", list->stringval);
-                break;
-
-            default:
-                xmlShellPrintXPathError(list->type, NULL);
-        }
-    }
-}
-
-/**
- * xmlShellPrintXPathResult:
- * @list: a valid result generated by an xpath evaluation
- *
- * Prints result to the output FILE
- */
-void
-xmlShellPrintXPathResult(xmlXPathObjectPtr list)
-{
-    xmlShellPrintXPathResultCtxt(NULL, list);
-}
-
-/**
- * xmlShellList:
- * @ctxt:  the shell context
- * @arg:  unused
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "ls"
- * Does an Unix like listing of the given node (like a directory)
- *
- * Returns 0
- */
-int
-xmlShellList(xmlShellCtxtPtr ctxt,
-             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
-             xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlNodePtr cur;
-    if (!ctxt)
-        return (0);
-    if (node == NULL) {
-	fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-    if ((node->type == XML_DOCUMENT_NODE) ||
-        (node->type == XML_HTML_DOCUMENT_NODE)) {
-        cur = ((xmlDocPtr) node)->children;
-    } else if (node->type == XML_NAMESPACE_DECL) {
-        xmlLsOneNode(ctxt->output, node);
-        return (0);
-    } else if (node->children != NULL) {
-        cur = node->children;
-    } else {
-        xmlLsOneNode(ctxt->output, node);
-        return (0);
-    }
-    while (cur != NULL) {
-        xmlLsOneNode(ctxt->output, cur);
-        cur = cur->next;
-    }
-    return (0);
-}
-
-/**
- * xmlShellBase:
- * @ctxt:  the shell context
- * @arg:  unused
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "base"
- * dumps the current XML base of the node
- *
- * Returns 0
- */
-int
-xmlShellBase(xmlShellCtxtPtr ctxt,
-             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
-             xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlChar *base;
-    if (!ctxt)
-        return 0;
-    if (node == NULL) {
-	fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-
-    base = xmlNodeGetBase(node->doc, node);
-
-    if (base == NULL) {
-        fprintf(ctxt->output, " No base found !!!\n");
-    } else {
-        fprintf(ctxt->output, "%s\n", base);
-        xmlFree(base);
-    }
-    return (0);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlShellSetBase:
- * @ctxt:  the shell context
- * @arg:  the new base
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "setbase"
- * change the current XML base of the node
- *
- * Returns 0
- */
-static int
-xmlShellSetBase(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
-             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
-             xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlNodeSetBase(node, (xmlChar*) arg);
-    return (0);
-}
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlShellRegisterNamespace:
- * @ctxt:  the shell context
- * @arg:  a string in prefix=nsuri format
- * @node:  unused
- * @node2:  unused
- *
- * Implements the XML shell function "setns"
- * register/unregister a prefix=namespace pair
- * on the XPath context
- *
- * Returns 0 on success and a negative value otherwise.
- */
-static int
-xmlShellRegisterNamespace(xmlShellCtxtPtr ctxt, char *arg,
-      xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlChar* nsListDup;
-    xmlChar* prefix;
-    xmlChar* href;
-    xmlChar* next;
-
-    nsListDup = xmlStrdup((xmlChar *) arg);
-    next = nsListDup;
-    while(next != NULL) {
-	/* skip spaces */
-	/*while((*next) == ' ') next++;*/
-	if((*next) == '\0') break;
-
-	/* find prefix */
-	prefix = next;
-	next = (xmlChar*)xmlStrchr(next, '=');
-	if(next == NULL) {
-	    fprintf(ctxt->output, "setns: prefix=[nsuri] required\n");
-	    xmlFree(nsListDup);
-	    return(-1);
-	}
-	*(next++) = '\0';
-
-	/* find href */
-	href = next;
-	next = (xmlChar*)xmlStrchr(next, ' ');
-	if(next != NULL) {
-	    *(next++) = '\0';
-	}
-
-	/* do register namespace */
-	if(xmlXPathRegisterNs(ctxt->pctxt, prefix, href) != 0) {
-	    fprintf(ctxt->output,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href);
-	    xmlFree(nsListDup);
-	    return(-1);
-	}
-    }
-
-    xmlFree(nsListDup);
-    return(0);
-}
-/**
- * xmlShellRegisterRootNamespaces:
- * @ctxt:  the shell context
- * @arg:  unused
- * @node:  the root element
- * @node2:  unused
- *
- * Implements the XML shell function "setrootns"
- * which registers all namespaces declarations found on the root element.
- *
- * Returns 0 on success and a negative value otherwise.
- */
-static int
-xmlShellRegisterRootNamespaces(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
-      xmlNodePtr root, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlNsPtr ns;
-
-    if ((root == NULL) || (root->type != XML_ELEMENT_NODE) ||
-        (root->nsDef == NULL) || (ctxt == NULL) || (ctxt->pctxt == NULL))
-	return(-1);
-    ns = root->nsDef;
-    while (ns != NULL) {
-        if (ns->prefix == NULL)
-	    xmlXPathRegisterNs(ctxt->pctxt, BAD_CAST "defaultns", ns->href);
-	else
-	    xmlXPathRegisterNs(ctxt->pctxt, ns->prefix, ns->href);
-        ns = ns->next;
-    }
-    return(0);
-}
-#endif
-
-/**
- * xmlShellGrep:
- * @ctxt:  the shell context
- * @arg:  the string or regular expression to find
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "grep"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-static int
-xmlShellGrep(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
-            char *arg, xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    if (!ctxt)
-        return (0);
-    if (node == NULL)
-	return (0);
-    if (arg == NULL)
-	return (0);
-#ifdef LIBXML_REGEXP_ENABLED
-    if ((xmlStrchr((xmlChar *) arg, '?')) ||
-	(xmlStrchr((xmlChar *) arg, '*')) ||
-	(xmlStrchr((xmlChar *) arg, '.')) ||
-	(xmlStrchr((xmlChar *) arg, '['))) {
-    }
-#endif
-    while (node != NULL) {
-        if (node->type == XML_COMMENT_NODE) {
-	    if (xmlStrstr(node->content, (xmlChar *) arg)) {
-
-		fprintf(ctxt->output, "%s : ", xmlGetNodePath(node));
-                xmlShellList(ctxt, NULL, node, NULL);
-	    }
-        } else if (node->type == XML_TEXT_NODE) {
-	    if (xmlStrstr(node->content, (xmlChar *) arg)) {
-
-		fprintf(ctxt->output, "%s : ", xmlGetNodePath(node->parent));
-                xmlShellList(ctxt, NULL, node->parent, NULL);
-	    }
-        }
-
-        /*
-         * Browse the full subtree, deep first
-         */
-
-        if ((node->type == XML_DOCUMENT_NODE) ||
-            (node->type == XML_HTML_DOCUMENT_NODE)) {
-            node = ((xmlDocPtr) node)->children;
-        } else if ((node->children != NULL)
-                   && (node->type != XML_ENTITY_REF_NODE)) {
-            /* deep first */
-            node = node->children;
-        } else if (node->next != NULL) {
-            /* then siblings */
-            node = node->next;
-        } else {
-            /* go up to parents->next if needed */
-            while (node != NULL) {
-                if (node->parent != NULL) {
-                    node = node->parent;
-                }
-                if (node->next != NULL) {
-                    node = node->next;
-                    break;
-                }
-                if (node->parent == NULL) {
-                    node = NULL;
-                    break;
-                }
-            }
-	}
-    }
-    return (0);
-}
-
-/**
- * xmlShellDir:
- * @ctxt:  the shell context
- * @arg:  unused
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "dir"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-int
-xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
-            char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
-            xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    if (!ctxt)
-        return (0);
-    if (node == NULL) {
-	fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-    if ((node->type == XML_DOCUMENT_NODE) ||
-        (node->type == XML_HTML_DOCUMENT_NODE)) {
-        xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node);
-    } else if (node->type == XML_ATTRIBUTE_NODE) {
-        xmlDebugDumpAttr(ctxt->output, (xmlAttrPtr) node, 0);
-    } else {
-        xmlDebugDumpOneNode(ctxt->output, node, 0);
-    }
-    return (0);
-}
-
-/**
- * xmlShellSetContent:
- * @ctxt:  the shell context
- * @value:  the content as a string
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "dir"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-static int
-xmlShellSetContent(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
-            char *value, xmlNodePtr node,
-            xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlNodePtr results;
-    xmlParserErrors ret;
-
-    if (!ctxt)
-        return (0);
-    if (node == NULL) {
-	fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-    if (value == NULL) {
-        fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-
-    ret = xmlParseInNodeContext(node, value, strlen(value), 0, &results);
-    if (ret == XML_ERR_OK) {
-	if (node->children != NULL) {
-	    xmlFreeNodeList(node->children);
-	    node->children = NULL;
-	    node->last = NULL;
-	}
-	xmlAddChildList(node, results);
-    } else {
-        fprintf(ctxt->output, "failed to parse content\n");
-    }
-    return (0);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-/**
- * xmlShellRNGValidate:
- * @ctxt:  the shell context
- * @schemas:  the path to the Relax-NG schemas
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "relaxng"
- * validating the instance against a Relax-NG schemas
- *
- * Returns 0
- */
-static int
-xmlShellRNGValidate(xmlShellCtxtPtr sctxt, char *schemas,
-            xmlNodePtr node ATTRIBUTE_UNUSED,
-	    xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlRelaxNGPtr relaxngschemas;
-    xmlRelaxNGParserCtxtPtr ctxt;
-    xmlRelaxNGValidCtxtPtr vctxt;
-    int ret;
-
-    ctxt = xmlRelaxNGNewParserCtxt(schemas);
-    xmlRelaxNGSetParserErrors(ctxt,
-	    (xmlRelaxNGValidityErrorFunc) fprintf,
-	    (xmlRelaxNGValidityWarningFunc) fprintf,
-	    stderr);
-    relaxngschemas = xmlRelaxNGParse(ctxt);
-    xmlRelaxNGFreeParserCtxt(ctxt);
-    if (relaxngschemas == NULL) {
-	xmlGenericError(xmlGenericErrorContext,
-		"Relax-NG schema %s failed to compile\n", schemas);
-	return(-1);
-    }
-    vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
-    xmlRelaxNGSetValidErrors(vctxt,
-	    (xmlRelaxNGValidityErrorFunc) fprintf,
-	    (xmlRelaxNGValidityWarningFunc) fprintf,
-	    stderr);
-    ret = xmlRelaxNGValidateDoc(vctxt, sctxt->doc);
-    if (ret == 0) {
-	fprintf(stderr, "%s validates\n", sctxt->filename);
-    } else if (ret > 0) {
-	fprintf(stderr, "%s fails to validate\n", sctxt->filename);
-    } else {
-	fprintf(stderr, "%s validation generated an internal error\n",
-	       sctxt->filename);
-    }
-    xmlRelaxNGFreeValidCtxt(vctxt);
-    if (relaxngschemas != NULL)
-	xmlRelaxNGFree(relaxngschemas);
-    return(0);
-}
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellCat:
- * @ctxt:  the shell context
- * @arg:  unused
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "cat"
- * dumps the serialization node content (XML or HTML).
- *
- * Returns 0
- */
-int
-xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
-            xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    if (!ctxt)
-        return (0);
-    if (node == NULL) {
-	fprintf(ctxt->output, "NULL\n");
-	return (0);
-    }
-    if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) {
-#ifdef LIBXML_HTML_ENABLED
-        if (node->type == XML_HTML_DOCUMENT_NODE)
-            htmlDocDump(ctxt->output, (htmlDocPtr) node);
-        else
-            htmlNodeDumpFile(ctxt->output, ctxt->doc, node);
-#else
-        if (node->type == XML_DOCUMENT_NODE)
-            xmlDocDump(ctxt->output, (xmlDocPtr) node);
-        else
-            xmlElemDump(ctxt->output, ctxt->doc, node);
-#endif /* LIBXML_HTML_ENABLED */
-    } else {
-        if (node->type == XML_DOCUMENT_NODE)
-            xmlDocDump(ctxt->output, (xmlDocPtr) node);
-        else
-            xmlElemDump(ctxt->output, ctxt->doc, node);
-    }
-    fprintf(ctxt->output, "\n");
-    return (0);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlShellLoad:
- * @ctxt:  the shell context
- * @filename:  the file name
- * @node:  unused
- * @node2:  unused
- *
- * Implements the XML shell function "load"
- * loads a new document specified by the filename
- *
- * Returns 0 or -1 if loading failed
- */
-int
-xmlShellLoad(xmlShellCtxtPtr ctxt, char *filename,
-             xmlNodePtr node ATTRIBUTE_UNUSED,
-             xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlDocPtr doc;
-    int html = 0;
-
-    if ((ctxt == NULL) || (filename == NULL)) return(-1);
-    if (ctxt->doc != NULL)
-        html = (ctxt->doc->type == XML_HTML_DOCUMENT_NODE);
-
-    if (html) {
-#ifdef LIBXML_HTML_ENABLED
-        doc = htmlParseFile(filename, NULL);
-#else
-        fprintf(ctxt->output, "HTML support not compiled in\n");
-        doc = NULL;
-#endif /* LIBXML_HTML_ENABLED */
-    } else {
-        doc = xmlReadFile(filename,NULL,0);
-    }
-    if (doc != NULL) {
-        if (ctxt->loaded == 1) {
-            xmlFreeDoc(ctxt->doc);
-        }
-        ctxt->loaded = 1;
-#ifdef LIBXML_XPATH_ENABLED
-        xmlXPathFreeContext(ctxt->pctxt);
-#endif /* LIBXML_XPATH_ENABLED */
-        xmlFree(ctxt->filename);
-        ctxt->doc = doc;
-        ctxt->node = (xmlNodePtr) doc;
-#ifdef LIBXML_XPATH_ENABLED
-        ctxt->pctxt = xmlXPathNewContext(doc);
-#endif /* LIBXML_XPATH_ENABLED */
-        ctxt->filename = (char *) xmlCanonicPath((xmlChar *) filename);
-    } else
-        return (-1);
-    return (0);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellWrite:
- * @ctxt:  the shell context
- * @filename:  the file name
- * @node:  a node in the tree
- * @node2:  unused
- *
- * Implements the XML shell function "write"
- * Write the current node to the filename, it saves the serialization
- * of the subtree under the @node specified
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellWrite(xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node,
-              xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    if (node == NULL)
-        return (-1);
-    if ((filename == NULL) || (filename[0] == 0)) {
-        return (-1);
-    }
-#ifdef W_OK
-    if (access((char *) filename, W_OK)) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Cannot write to %s\n", filename);
-        return (-1);
-    }
-#endif
-    switch (node->type) {
-        case XML_DOCUMENT_NODE:
-            if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to write to %s\n", filename);
-                return (-1);
-            }
-            break;
-        case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_HTML_ENABLED
-            if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to write to %s\n", filename);
-                return (-1);
-            }
-#else
-            if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to write to %s\n", filename);
-                return (-1);
-            }
-#endif /* LIBXML_HTML_ENABLED */
-            break;
-        default:{
-                FILE *f;
-
-                f = fopen((char *) filename, "w");
-                if (f == NULL) {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "Failed to write to %s\n", filename);
-                    return (-1);
-                }
-                xmlElemDump(f, ctxt->doc, node);
-                fclose(f);
-            }
-    }
-    return (0);
-}
-
-/**
- * xmlShellSave:
- * @ctxt:  the shell context
- * @filename:  the file name (optional)
- * @node:  unused
- * @node2:  unused
- *
- * Implements the XML shell function "save"
- * Write the current document to the filename, or it's original name
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellSave(xmlShellCtxtPtr ctxt, char *filename,
-             xmlNodePtr node ATTRIBUTE_UNUSED,
-             xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    if ((ctxt == NULL) || (ctxt->doc == NULL))
-        return (-1);
-    if ((filename == NULL) || (filename[0] == 0))
-        filename = ctxt->filename;
-    if (filename == NULL)
-        return (-1);
-#ifdef W_OK
-    if (access((char *) filename, W_OK)) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Cannot save to %s\n", filename);
-        return (-1);
-    }
-#endif
-    switch (ctxt->doc->type) {
-        case XML_DOCUMENT_NODE:
-            if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to save to %s\n", filename);
-            }
-            break;
-        case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_HTML_ENABLED
-            if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to save to %s\n", filename);
-            }
-#else
-            if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
-                xmlGenericError(xmlGenericErrorContext,
-                                "Failed to save to %s\n", filename);
-            }
-#endif /* LIBXML_HTML_ENABLED */
-            break;
-        default:
-            xmlGenericError(xmlGenericErrorContext,
-	    "To save to subparts of a document use the 'write' command\n");
-            return (-1);
-
-    }
-    return (0);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
-/**
- * xmlShellValidate:
- * @ctxt:  the shell context
- * @dtd:  the DTD URI (optional)
- * @node:  unused
- * @node2:  unused
- *
- * Implements the XML shell function "validate"
- * Validate the document, if a DTD path is provided, then the validation
- * is done against the given DTD.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellValidate(xmlShellCtxtPtr ctxt, char *dtd,
-                 xmlNodePtr node ATTRIBUTE_UNUSED,
-                 xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlValidCtxt vctxt;
-    int res = -1;
-
-    if ((ctxt == NULL) || (ctxt->doc == NULL)) return(-1);
-    vctxt.userData = stderr;
-    vctxt.error = (xmlValidityErrorFunc) fprintf;
-    vctxt.warning = (xmlValidityWarningFunc) fprintf;
-
-    if ((dtd == NULL) || (dtd[0] == 0)) {
-        res = xmlValidateDocument(&vctxt, ctxt->doc);
-    } else {
-        xmlDtdPtr subset;
-
-        subset = xmlParseDTD(NULL, (xmlChar *) dtd);
-        if (subset != NULL) {
-            res = xmlValidateDtd(&vctxt, ctxt->doc, subset);
-
-            xmlFreeDtd(subset);
-        }
-    }
-    return (res);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-/**
- * xmlShellDu:
- * @ctxt:  the shell context
- * @arg:  unused
- * @tree:  a node defining a subtree
- * @node2:  unused
- *
- * Implements the XML shell function "du"
- * show the structure of the subtree under node @tree
- * If @tree is null, the command works on the current node.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellDu(xmlShellCtxtPtr ctxt,
-           char *arg ATTRIBUTE_UNUSED, xmlNodePtr tree,
-           xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlNodePtr node;
-    int indent = 0, i;
-
-    if (!ctxt)
-	return (-1);
-
-    if (tree == NULL)
-        return (-1);
-    node = tree;
-    while (node != NULL) {
-        if ((node->type == XML_DOCUMENT_NODE) ||
-            (node->type == XML_HTML_DOCUMENT_NODE)) {
-            fprintf(ctxt->output, "/\n");
-        } else if (node->type == XML_ELEMENT_NODE) {
-            for (i = 0; i < indent; i++)
-                fprintf(ctxt->output, "  ");
-            if ((node->ns) && (node->ns->prefix))
-                fprintf(ctxt->output, "%s:", node->ns->prefix);
-            fprintf(ctxt->output, "%s\n", node->name);
-        } else {
-        }
-
-        /*
-         * Browse the full subtree, deep first
-         */
-
-        if ((node->type == XML_DOCUMENT_NODE) ||
-            (node->type == XML_HTML_DOCUMENT_NODE)) {
-            node = ((xmlDocPtr) node)->children;
-        } else if ((node->children != NULL)
-                   && (node->type != XML_ENTITY_REF_NODE)) {
-            /* deep first */
-            node = node->children;
-            indent++;
-        } else if ((node != tree) && (node->next != NULL)) {
-            /* then siblings */
-            node = node->next;
-        } else if (node != tree) {
-            /* go up to parents->next if needed */
-            while (node != tree) {
-                if (node->parent != NULL) {
-                    node = node->parent;
-                    indent--;
-                }
-                if ((node != tree) && (node->next != NULL)) {
-                    node = node->next;
-                    break;
-                }
-                if (node->parent == NULL) {
-                    node = NULL;
-                    break;
-                }
-                if (node == tree) {
-                    node = NULL;
-                    break;
-                }
-            }
-            /* exit condition */
-            if (node == tree)
-                node = NULL;
-        } else
-            node = NULL;
-    }
-    return (0);
-}
-
-/**
- * xmlShellPwd:
- * @ctxt:  the shell context
- * @buffer:  the output buffer
- * @node:  a node
- * @node2:  unused
- *
- * Implements the XML shell function "pwd"
- * Show the full path from the root to the node, if needed building
- * thumblers when similar elements exists at a given ancestor level.
- * The output is compatible with XPath commands.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer,
-            xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
-    xmlChar *path;
-
-    if ((node == NULL) || (buffer == NULL))
-        return (-1);
-
-    path = xmlGetNodePath(node);
-    if (path == NULL)
-	return (-1);
-
-    /*
-     * This test prevents buffer overflow, because this routine
-     * is only called by xmlShell, in which the second argument is
-     * 500 chars long.
-     * It is a dirty hack before a cleaner solution is found.
-     * Documentation should mention that the second argument must
-     * be at least 500 chars long, and could be stripped if too long.
-     */
-    snprintf(buffer, 499, "%s", path);
-    buffer[499] = '0';
-    xmlFree(path);
-
-    return (0);
-}
-
-/**
- * xmlShell:
- * @doc:  the initial document
- * @filename:  the output buffer
- * @input:  the line reading function
- * @output:  the output FILE*, defaults to stdout if NULL
- *
- * Implements the XML shell
- * This allow to load, validate, view, modify and save a document
- * using a environment similar to a UNIX commandline.
- */
-void
-xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
-         FILE * output)
-{
-    char prompt[500] = "/ > ";
-    char *cmdline = NULL, *cur;
-    char command[100];
-    char arg[400];
-    int i;
-    xmlShellCtxtPtr ctxt;
-    xmlXPathObjectPtr list;
-
-    if (doc == NULL)
-        return;
-    if (filename == NULL)
-        return;
-    if (input == NULL)
-        return;
-    if (output == NULL)
-        output = stdout;
-    ctxt = (xmlShellCtxtPtr) xmlMalloc(sizeof(xmlShellCtxt));
-    if (ctxt == NULL)
-        return;
-    ctxt->loaded = 0;
-    ctxt->doc = doc;
-    ctxt->input = input;
-    ctxt->output = output;
-    ctxt->filename = (char *) xmlStrdup((xmlChar *) filename);
-    ctxt->node = (xmlNodePtr) ctxt->doc;
-
-#ifdef LIBXML_XPATH_ENABLED
-    ctxt->pctxt = xmlXPathNewContext(ctxt->doc);
-    if (ctxt->pctxt == NULL) {
-        xmlFree(ctxt);
-        return;
-    }
-#endif /* LIBXML_XPATH_ENABLED */
-    while (1) {
-        if (ctxt->node == (xmlNodePtr) ctxt->doc)
-            snprintf(prompt, sizeof(prompt), "%s > ", "/");
-        else if ((ctxt->node != NULL) && (ctxt->node->name) &&
-                 (ctxt->node->ns) && (ctxt->node->ns->prefix))
-            snprintf(prompt, sizeof(prompt), "%s:%s > ",
-                     (ctxt->node->ns->prefix), ctxt->node->name);
-        else if ((ctxt->node != NULL) && (ctxt->node->name))
-            snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name);
-        else
-            snprintf(prompt, sizeof(prompt), "? > ");
-        prompt[sizeof(prompt) - 1] = 0;
-
-        /*
-         * Get a new command line
-         */
-        cmdline = ctxt->input(prompt);
-        if (cmdline == NULL)
-            break;
-
-        /*
-         * Parse the command itself
-         */
-        cur = cmdline;
-        while ((*cur == ' ') || (*cur == '\t'))
-            cur++;
-        i = 0;
-        while ((*cur != ' ') && (*cur != '\t') &&
-               (*cur != '\n') && (*cur != '\r')) {
-            if (*cur == 0)
-                break;
-            command[i++] = *cur++;
-        }
-        command[i] = 0;
-        if (i == 0)
-            continue;
-
-        /*
-         * Parse the argument
-         */
-        while ((*cur == ' ') || (*cur == '\t'))
-            cur++;
-        i = 0;
-        while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
-            if (*cur == 0)
-                break;
-            arg[i++] = *cur++;
-        }
-        arg[i] = 0;
-
-        /*
-         * start interpreting the command
-         */
-        if (!strcmp(command, "exit"))
-            break;
-        if (!strcmp(command, "quit"))
-            break;
-        if (!strcmp(command, "bye"))
-            break;
-		if (!strcmp(command, "help")) {
-		  fprintf(ctxt->output, "\tbase         display XML base of the node\n");
-		  fprintf(ctxt->output, "\tsetbase URI  change the XML base of the node\n");
-		  fprintf(ctxt->output, "\tbye          leave shell\n");
-		  fprintf(ctxt->output, "\tcat [node]   display node or current node\n");
-		  fprintf(ctxt->output, "\tcd [path]    change directory to path or to root\n");
-		  fprintf(ctxt->output, "\tdir [path]   dumps informations about the node (namespace, attributes, content)\n");
-		  fprintf(ctxt->output, "\tdu [path]    show the structure of the subtree under path or the current node\n");
-		  fprintf(ctxt->output, "\texit         leave shell\n");
-		  fprintf(ctxt->output, "\thelp         display this help\n");
-		  fprintf(ctxt->output, "\tfree         display memory usage\n");
-		  fprintf(ctxt->output, "\tload [name]  load a new document with name\n");
-		  fprintf(ctxt->output, "\tls [path]    list contents of path or the current directory\n");
-		  fprintf(ctxt->output, "\tset xml_fragment replace the current node content with the fragment parsed in context\n");
-#ifdef LIBXML_XPATH_ENABLED
-		  fprintf(ctxt->output, "\txpath expr   evaluate the XPath expression in that context and print the result\n");
-		  fprintf(ctxt->output, "\tsetns nsreg  register a namespace to a prefix in the XPath evaluation context\n");
-		  fprintf(ctxt->output, "\t             format for nsreg is: prefix=[nsuri] (i.e. prefix= unsets a prefix)\n");
-		  fprintf(ctxt->output, "\tsetrootns    register all namespace found on the root element\n");
-		  fprintf(ctxt->output, "\t             the default namespace if any uses 'defaultns' prefix\n");
-#endif /* LIBXML_XPATH_ENABLED */
-		  fprintf(ctxt->output, "\tpwd          display current working directory\n");
-		  fprintf(ctxt->output, "\twhereis      display absolute path of [path] or current working directory\n");
-		  fprintf(ctxt->output, "\tquit         leave shell\n");
-#ifdef LIBXML_OUTPUT_ENABLED
-		  fprintf(ctxt->output, "\tsave [name]  save this document to name or the original name\n");
-		  fprintf(ctxt->output, "\twrite [name] write the current node to the filename\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_VALID_ENABLED
-		  fprintf(ctxt->output, "\tvalidate     check the document for errors\n");
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
-		  fprintf(ctxt->output, "\trelaxng rng  validate the document agaisnt the Relax-NG schemas\n");
-#endif
-		  fprintf(ctxt->output, "\tgrep string  search for a string in the subtree\n");
-#ifdef LIBXML_VALID_ENABLED
-        } else if (!strcmp(command, "validate")) {
-            xmlShellValidate(ctxt, arg, NULL, NULL);
-#endif /* LIBXML_VALID_ENABLED */
-        } else if (!strcmp(command, "load")) {
-            xmlShellLoad(ctxt, arg, NULL, NULL);
-#ifdef LIBXML_SCHEMAS_ENABLED
-        } else if (!strcmp(command, "relaxng")) {
-            xmlShellRNGValidate(ctxt, arg, NULL, NULL);
-#endif
-#ifdef LIBXML_OUTPUT_ENABLED
-        } else if (!strcmp(command, "save")) {
-            xmlShellSave(ctxt, arg, NULL, NULL);
-        } else if (!strcmp(command, "write")) {
-	    if (arg[0] == 0)
-		xmlGenericError(xmlGenericErrorContext,
-                        "Write command requires a filename argument\n");
-	    else
-		xmlShellWrite(ctxt, arg, ctxt->node, NULL);
-#endif /* LIBXML_OUTPUT_ENABLED */
-        } else if (!strcmp(command, "grep")) {
-            xmlShellGrep(ctxt, arg, ctxt->node, NULL);
-        } else if (!strcmp(command, "free")) {
-            if (arg[0] == 0) {
-                xmlMemShow(ctxt->output, 0);
-            } else {
-                int len = 0;
-
-                sscanf(arg, "%d", &len);
-                xmlMemShow(ctxt->output, len);
-            }
-        } else if (!strcmp(command, "pwd")) {
-            char dir[500];
-
-            if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
-                fprintf(ctxt->output, "%s\n", dir);
-        } else if (!strcmp(command, "du")) {
-            if (arg[0] == 0) {
-                xmlShellDu(ctxt, NULL, ctxt->node, NULL);
-            } else {
-                ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
-                ctxt->pctxt->node = ctxt->node;
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
-                list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
-                if (list != NULL) {
-                    switch (list->type) {
-                        case XPATH_UNDEFINED:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s: no such node\n", arg);
-                            break;
-                        case XPATH_NODESET:{
-                            int indx;
-
-                            if (list->nodesetval == NULL)
-                                break;
-
-                            for (indx = 0;
-                                 indx < list->nodesetval->nodeNr;
-                                 indx++)
-                                xmlShellDu(ctxt, NULL,
-                                           list->nodesetval->
-                                           nodeTab[indx], NULL);
-                            break;
-                        }
-                        case XPATH_BOOLEAN:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a Boolean\n", arg);
-                            break;
-                        case XPATH_NUMBER:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a number\n", arg);
-                            break;
-                        case XPATH_STRING:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a string\n", arg);
-                            break;
-                        case XPATH_POINT:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a point\n", arg);
-                            break;
-                        case XPATH_RANGE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_LOCATIONSET:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_USERS:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is user-defined\n", arg);
-                            break;
-                        case XPATH_XSLT_TREE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is an XSLT value tree\n",
-                                            arg);
-                            break;
-                    }
-#ifdef LIBXML_XPATH_ENABLED
-                    xmlXPathFreeObject(list);
-#endif
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "%s: no such node\n", arg);
-                }
-                ctxt->pctxt->node = NULL;
-            }
-        } else if (!strcmp(command, "base")) {
-            xmlShellBase(ctxt, NULL, ctxt->node, NULL);
-        } else if (!strcmp(command, "set")) {
-	    xmlShellSetContent(ctxt, arg, ctxt->node, NULL);
-#ifdef LIBXML_XPATH_ENABLED
-        } else if (!strcmp(command, "setns")) {
-            if (arg[0] == 0) {
-		xmlGenericError(xmlGenericErrorContext,
-				"setns: prefix=[nsuri] required\n");
-            } else {
-                xmlShellRegisterNamespace(ctxt, arg, NULL, NULL);
-            }
-        } else if (!strcmp(command, "setrootns")) {
-	    xmlNodePtr root;
-
-	    root = xmlDocGetRootElement(ctxt->doc);
-	    xmlShellRegisterRootNamespaces(ctxt, NULL, root, NULL);
-        } else if (!strcmp(command, "xpath")) {
-            if (arg[0] == 0) {
-		xmlGenericError(xmlGenericErrorContext,
-				"xpath: expression required\n");
-	    } else {
-                ctxt->pctxt->node = ctxt->node;
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-		xmlXPathDebugDumpObject(ctxt->output, list, 0);
-		xmlXPathFreeObject(list);
-	    }
-#endif /* LIBXML_XPATH_ENABLED */
-#ifdef LIBXML_TREE_ENABLED
-        } else if (!strcmp(command, "setbase")) {
-            xmlShellSetBase(ctxt, arg, ctxt->node, NULL);
-#endif
-        } else if ((!strcmp(command, "ls")) || (!strcmp(command, "dir"))) {
-            int dir = (!strcmp(command, "dir"));
-
-            if (arg[0] == 0) {
-                if (dir)
-                    xmlShellDir(ctxt, NULL, ctxt->node, NULL);
-                else
-                    xmlShellList(ctxt, NULL, ctxt->node, NULL);
-            } else {
-                ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
-                ctxt->pctxt->node = ctxt->node;
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
-                list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
-                if (list != NULL) {
-                    switch (list->type) {
-                        case XPATH_UNDEFINED:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s: no such node\n", arg);
-                            break;
-                        case XPATH_NODESET:{
-                                int indx;
-
-				if (list->nodesetval == NULL)
-				    break;
-
-                                for (indx = 0;
-                                     indx < list->nodesetval->nodeNr;
-                                     indx++) {
-                                    if (dir)
-                                        xmlShellDir(ctxt, NULL,
-                                                    list->nodesetval->
-                                                    nodeTab[indx], NULL);
-                                    else
-                                        xmlShellList(ctxt, NULL,
-                                                     list->nodesetval->
-                                                     nodeTab[indx], NULL);
-                                }
-                                break;
-                            }
-                        case XPATH_BOOLEAN:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a Boolean\n", arg);
-                            break;
-                        case XPATH_NUMBER:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a number\n", arg);
-                            break;
-                        case XPATH_STRING:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a string\n", arg);
-                            break;
-                        case XPATH_POINT:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a point\n", arg);
-                            break;
-                        case XPATH_RANGE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_LOCATIONSET:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_USERS:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is user-defined\n", arg);
-                            break;
-                        case XPATH_XSLT_TREE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is an XSLT value tree\n",
-                                            arg);
-                            break;
-                    }
-#ifdef LIBXML_XPATH_ENABLED
-                    xmlXPathFreeObject(list);
-#endif
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "%s: no such node\n", arg);
-                }
-                ctxt->pctxt->node = NULL;
-            }
-        } else if (!strcmp(command, "whereis")) {
-            char dir[500];
-
-            if (arg[0] == 0) {
-                if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
-                    fprintf(ctxt->output, "%s\n", dir);
-            } else {
-                ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
-                list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
-                if (list != NULL) {
-                    switch (list->type) {
-                        case XPATH_UNDEFINED:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s: no such node\n", arg);
-                            break;
-                        case XPATH_NODESET:{
-                                int indx;
-
-				if (list->nodesetval == NULL)
-				    break;
-
-                                for (indx = 0;
-                                     indx < list->nodesetval->nodeNr;
-                                     indx++) {
-                                    if (!xmlShellPwd(ctxt, dir, list->nodesetval->
-                                                     nodeTab[indx], NULL))
-                                        fprintf(ctxt->output, "%s\n", dir);
-                                }
-                                break;
-                            }
-                        case XPATH_BOOLEAN:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a Boolean\n", arg);
-                            break;
-                        case XPATH_NUMBER:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a number\n", arg);
-                            break;
-                        case XPATH_STRING:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a string\n", arg);
-                            break;
-                        case XPATH_POINT:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a point\n", arg);
-                            break;
-                        case XPATH_RANGE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_LOCATIONSET:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_USERS:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is user-defined\n", arg);
-                            break;
-                        case XPATH_XSLT_TREE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is an XSLT value tree\n",
-                                            arg);
-                            break;
-                    }
-#ifdef LIBXML_XPATH_ENABLED
-                    xmlXPathFreeObject(list);
-#endif
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "%s: no such node\n", arg);
-                }
-                ctxt->pctxt->node = NULL;
-            }
-        } else if (!strcmp(command, "cd")) {
-            if (arg[0] == 0) {
-                ctxt->node = (xmlNodePtr) ctxt->doc;
-            } else {
-#ifdef LIBXML_XPATH_ENABLED
-                int l;
-
-                ctxt->pctxt->node = ctxt->node;
-		l = strlen(arg);
-		if ((l >= 2) && (arg[l - 1] == '/'))
-		    arg[l - 1] = 0;
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
-                list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
-                if (list != NULL) {
-                    switch (list->type) {
-                        case XPATH_UNDEFINED:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s: no such node\n", arg);
-                            break;
-                        case XPATH_NODESET:
-                            if (list->nodesetval != NULL) {
-				if (list->nodesetval->nodeNr == 1) {
-				    ctxt->node = list->nodesetval->nodeTab[0];
-				    if ((ctxt->node != NULL) &&
-				        (ctxt->node->type ==
-					 XML_NAMESPACE_DECL)) {
-					xmlGenericError(xmlGenericErrorContext,
-						    "cannot cd to namespace\n");
-					ctxt->node = NULL;
-				    }
-				} else
-				    xmlGenericError(xmlGenericErrorContext,
-						    "%s is a %d Node Set\n",
-						    arg,
-						    list->nodesetval->nodeNr);
-                            } else
-                                xmlGenericError(xmlGenericErrorContext,
-                                                "%s is an empty Node Set\n",
-                                                arg);
-                            break;
-                        case XPATH_BOOLEAN:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a Boolean\n", arg);
-                            break;
-                        case XPATH_NUMBER:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a number\n", arg);
-                            break;
-                        case XPATH_STRING:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a string\n", arg);
-                            break;
-                        case XPATH_POINT:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a point\n", arg);
-                            break;
-                        case XPATH_RANGE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_LOCATIONSET:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_USERS:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is user-defined\n", arg);
-                            break;
-                        case XPATH_XSLT_TREE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is an XSLT value tree\n",
-                                            arg);
-                            break;
-                    }
-#ifdef LIBXML_XPATH_ENABLED
-                    xmlXPathFreeObject(list);
-#endif
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "%s: no such node\n", arg);
-                }
-                ctxt->pctxt->node = NULL;
-            }
-#ifdef LIBXML_OUTPUT_ENABLED
-        } else if (!strcmp(command, "cat")) {
-            if (arg[0] == 0) {
-                xmlShellCat(ctxt, NULL, ctxt->node, NULL);
-            } else {
-                ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
-                ctxt->pctxt->node = ctxt->node;
-                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
-                list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
-                if (list != NULL) {
-                    switch (list->type) {
-                        case XPATH_UNDEFINED:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s: no such node\n", arg);
-                            break;
-                        case XPATH_NODESET:{
-                                int indx;
-
-				if (list->nodesetval == NULL)
-				    break;
-
-                                for (indx = 0;
-                                     indx < list->nodesetval->nodeNr;
-                                     indx++) {
-                                    if (i > 0)
-                                        fprintf(ctxt->output, " -------\n");
-                                    xmlShellCat(ctxt, NULL,
-                                                list->nodesetval->
-                                                nodeTab[indx], NULL);
-                                }
-                                break;
-                            }
-                        case XPATH_BOOLEAN:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a Boolean\n", arg);
-                            break;
-                        case XPATH_NUMBER:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a number\n", arg);
-                            break;
-                        case XPATH_STRING:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a string\n", arg);
-                            break;
-                        case XPATH_POINT:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a point\n", arg);
-                            break;
-                        case XPATH_RANGE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_LOCATIONSET:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is a range\n", arg);
-                            break;
-                        case XPATH_USERS:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is user-defined\n", arg);
-                            break;
-                        case XPATH_XSLT_TREE:
-                            xmlGenericError(xmlGenericErrorContext,
-                                            "%s is an XSLT value tree\n",
-                                            arg);
-                            break;
-                    }
-#ifdef LIBXML_XPATH_ENABLED
-                    xmlXPathFreeObject(list);
-#endif
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "%s: no such node\n", arg);
-                }
-                ctxt->pctxt->node = NULL;
-            }
-#endif /* LIBXML_OUTPUT_ENABLED */
-        } else {
-            xmlGenericError(xmlGenericErrorContext,
-                            "Unknown command %s\n", command);
-        }
-        free(cmdline);          /* not xmlFree here ! */
-	cmdline = NULL;
-    }
-#ifdef LIBXML_XPATH_ENABLED
-    xmlXPathFreeContext(ctxt->pctxt);
-#endif /* LIBXML_XPATH_ENABLED */
-    if (ctxt->loaded) {
-        xmlFreeDoc(ctxt->doc);
-    }
-    if (ctxt->filename != NULL)
-        xmlFree(ctxt->filename);
-    xmlFree(ctxt);
-    if (cmdline != NULL)
-        free(cmdline);          /* not xmlFree here ! */
-}
-
-#endif /* LIBXML_XPATH_ENABLED */
-#define bottom_debugXML
-#include "elfgcchack.h"
-#endif /* LIBXML_DEBUG_ENABLED */
diff --git a/src/third_party/libxml/src/legacy.c b/src/third_party/libxml/src/legacy.c
deleted file mode 100644
index 86362bf..0000000
--- a/src/third_party/libxml/src/legacy.c
+++ /dev/null
@@ -1,1343 +0,0 @@
-/*
- * legacy.c: set of deprecated routines, not to be used anymore but
- *           kept purely for ABI compatibility
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_LEGACY_ENABLED
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/entities.h>
-#include <libxml/SAX.h>
-#include <libxml/parserInternals.h>
-#include <libxml/HTMLparser.h>
-
-void xmlUpgradeOldNs(xmlDocPtr doc);
-
-/************************************************************************
- *									*
- *		Deprecated functions kept for compatibility		*
- *									*
- ************************************************************************/
-
-#ifdef LIBXML_HTML_ENABLED
-xmlChar *htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, xmlChar end,
-                            xmlChar end2, xmlChar end3);
-
-/**
- * htmlDecodeEntities:
- * @ctxt:  the parser context
- * @len:  the len to decode (in bytes !), -1 for no size limit
- * @end:  an end marker xmlChar, 0 if none
- * @end2:  an end marker xmlChar, 0 if none
- * @end3:  an end marker xmlChar, 0 if none
- *
- * Substitute the HTML entities by their value
- *
- * DEPRECATED !!!!
- *
- * Returns A newly allocated string with the substitution done. The caller
- *      must deallocate it !
- */
-xmlChar *
-htmlDecodeEntities(htmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                   int len ATTRIBUTE_UNUSED, xmlChar end ATTRIBUTE_UNUSED,
-                   xmlChar end2 ATTRIBUTE_UNUSED,
-                   xmlChar end3 ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "htmlDecodeEntities() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-#endif
-
-/**
- * xmlInitializePredefinedEntities:
- *
- * Set up the predefined entities.
- * Deprecated call
- */
-void
-xmlInitializePredefinedEntities(void)
-{
-}
-
-/**
- * xmlCleanupPredefinedEntities:
- *
- * Cleanup up the predefined entities table.
- * Deprecated call
- */
-void
-xmlCleanupPredefinedEntities(void)
-{
-}
-
-static const char *xmlFeaturesList[] = {
-    "validate",
-    "load subset",
-    "keep blanks",
-    "disable SAX",
-    "fetch external entities",
-    "substitute entities",
-    "gather line info",
-    "user data",
-    "is html",
-    "is standalone",
-    "stop parser",
-    "document",
-    "is well formed",
-    "is valid",
-    "SAX block",
-    "SAX function internalSubset",
-    "SAX function isStandalone",
-    "SAX function hasInternalSubset",
-    "SAX function hasExternalSubset",
-    "SAX function resolveEntity",
-    "SAX function getEntity",
-    "SAX function entityDecl",
-    "SAX function notationDecl",
-    "SAX function attributeDecl",
-    "SAX function elementDecl",
-    "SAX function unparsedEntityDecl",
-    "SAX function setDocumentLocator",
-    "SAX function startDocument",
-    "SAX function endDocument",
-    "SAX function startElement",
-    "SAX function endElement",
-    "SAX function reference",
-    "SAX function characters",
-    "SAX function ignorableWhitespace",
-    "SAX function processingInstruction",
-    "SAX function comment",
-    "SAX function warning",
-    "SAX function error",
-    "SAX function fatalError",
-    "SAX function getParameterEntity",
-    "SAX function cdataBlock",
-    "SAX function externalSubset",
-};
-
-/**
- * xmlGetFeaturesList:
- * @len:  the length of the features name array (input/output)
- * @result:  an array of string to be filled with the features name.
- *
- * Copy at most *@len feature names into the @result array
- *
- * Returns -1 in case or error, or the total number of features,
- *            len is updated with the number of strings copied,
- *            strings must not be deallocated
- */
-int
-xmlGetFeaturesList(int *len, const char **result)
-{
-    int ret, i;
-
-    ret = sizeof(xmlFeaturesList) / sizeof(xmlFeaturesList[0]);
-    if ((len == NULL) || (result == NULL))
-        return (ret);
-    if ((*len < 0) || (*len >= 1000))
-        return (-1);
-    if (*len > ret)
-        *len = ret;
-    for (i = 0; i < *len; i++)
-        result[i] = xmlFeaturesList[i];
-    return (ret);
-}
-
-/**
- * xmlGetFeature:
- * @ctxt:  an XML/HTML parser context
- * @name:  the feature name
- * @result:  location to store the result
- *
- * Read the current value of one feature of this parser instance
- *
- * Returns -1 in case or error, 0 otherwise
- */
-int
-xmlGetFeature(xmlParserCtxtPtr ctxt, const char *name, void *result)
-{
-    if ((ctxt == NULL) || (name == NULL) || (result == NULL))
-        return (-1);
-
-    if (!strcmp(name, "validate")) {
-        *((int *) result) = ctxt->validate;
-    } else if (!strcmp(name, "keep blanks")) {
-        *((int *) result) = ctxt->keepBlanks;
-    } else if (!strcmp(name, "disable SAX")) {
-        *((int *) result) = ctxt->disableSAX;
-    } else if (!strcmp(name, "fetch external entities")) {
-        *((int *) result) = ctxt->loadsubset;
-    } else if (!strcmp(name, "substitute entities")) {
-        *((int *) result) = ctxt->replaceEntities;
-    } else if (!strcmp(name, "gather line info")) {
-        *((int *) result) = ctxt->record_info;
-    } else if (!strcmp(name, "user data")) {
-        *((void **) result) = ctxt->userData;
-    } else if (!strcmp(name, "is html")) {
-        *((int *) result) = ctxt->html;
-    } else if (!strcmp(name, "is standalone")) {
-        *((int *) result) = ctxt->standalone;
-    } else if (!strcmp(name, "document")) {
-        *((xmlDocPtr *) result) = ctxt->myDoc;
-    } else if (!strcmp(name, "is well formed")) {
-        *((int *) result) = ctxt->wellFormed;
-    } else if (!strcmp(name, "is valid")) {
-        *((int *) result) = ctxt->valid;
-    } else if (!strcmp(name, "SAX block")) {
-        *((xmlSAXHandlerPtr *) result) = ctxt->sax;
-    } else if (!strcmp(name, "SAX function internalSubset")) {
-        *((internalSubsetSAXFunc *) result) = ctxt->sax->internalSubset;
-    } else if (!strcmp(name, "SAX function isStandalone")) {
-        *((isStandaloneSAXFunc *) result) = ctxt->sax->isStandalone;
-    } else if (!strcmp(name, "SAX function hasInternalSubset")) {
-        *((hasInternalSubsetSAXFunc *) result) =
-            ctxt->sax->hasInternalSubset;
-    } else if (!strcmp(name, "SAX function hasExternalSubset")) {
-        *((hasExternalSubsetSAXFunc *) result) =
-            ctxt->sax->hasExternalSubset;
-    } else if (!strcmp(name, "SAX function resolveEntity")) {
-        *((resolveEntitySAXFunc *) result) = ctxt->sax->resolveEntity;
-    } else if (!strcmp(name, "SAX function getEntity")) {
-        *((getEntitySAXFunc *) result) = ctxt->sax->getEntity;
-    } else if (!strcmp(name, "SAX function entityDecl")) {
-        *((entityDeclSAXFunc *) result) = ctxt->sax->entityDecl;
-    } else if (!strcmp(name, "SAX function notationDecl")) {
-        *((notationDeclSAXFunc *) result) = ctxt->sax->notationDecl;
-    } else if (!strcmp(name, "SAX function attributeDecl")) {
-        *((attributeDeclSAXFunc *) result) = ctxt->sax->attributeDecl;
-    } else if (!strcmp(name, "SAX function elementDecl")) {
-        *((elementDeclSAXFunc *) result) = ctxt->sax->elementDecl;
-    } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
-        *((unparsedEntityDeclSAXFunc *) result) =
-            ctxt->sax->unparsedEntityDecl;
-    } else if (!strcmp(name, "SAX function setDocumentLocator")) {
-        *((setDocumentLocatorSAXFunc *) result) =
-            ctxt->sax->setDocumentLocator;
-    } else if (!strcmp(name, "SAX function startDocument")) {
-        *((startDocumentSAXFunc *) result) = ctxt->sax->startDocument;
-    } else if (!strcmp(name, "SAX function endDocument")) {
-        *((endDocumentSAXFunc *) result) = ctxt->sax->endDocument;
-    } else if (!strcmp(name, "SAX function startElement")) {
-        *((startElementSAXFunc *) result) = ctxt->sax->startElement;
-    } else if (!strcmp(name, "SAX function endElement")) {
-        *((endElementSAXFunc *) result) = ctxt->sax->endElement;
-    } else if (!strcmp(name, "SAX function reference")) {
-        *((referenceSAXFunc *) result) = ctxt->sax->reference;
-    } else if (!strcmp(name, "SAX function characters")) {
-        *((charactersSAXFunc *) result) = ctxt->sax->characters;
-    } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
-        *((ignorableWhitespaceSAXFunc *) result) =
-            ctxt->sax->ignorableWhitespace;
-    } else if (!strcmp(name, "SAX function processingInstruction")) {
-        *((processingInstructionSAXFunc *) result) =
-            ctxt->sax->processingInstruction;
-    } else if (!strcmp(name, "SAX function comment")) {
-        *((commentSAXFunc *) result) = ctxt->sax->comment;
-    } else if (!strcmp(name, "SAX function warning")) {
-        *((warningSAXFunc *) result) = ctxt->sax->warning;
-    } else if (!strcmp(name, "SAX function error")) {
-        *((errorSAXFunc *) result) = ctxt->sax->error;
-    } else if (!strcmp(name, "SAX function fatalError")) {
-        *((fatalErrorSAXFunc *) result) = ctxt->sax->fatalError;
-    } else if (!strcmp(name, "SAX function getParameterEntity")) {
-        *((getParameterEntitySAXFunc *) result) =
-            ctxt->sax->getParameterEntity;
-    } else if (!strcmp(name, "SAX function cdataBlock")) {
-        *((cdataBlockSAXFunc *) result) = ctxt->sax->cdataBlock;
-    } else if (!strcmp(name, "SAX function externalSubset")) {
-        *((externalSubsetSAXFunc *) result) = ctxt->sax->externalSubset;
-    } else {
-        return (-1);
-    }
-    return (0);
-}
-
-/**
- * xmlSetFeature:
- * @ctxt:  an XML/HTML parser context
- * @name:  the feature name
- * @value:  pointer to the location of the new value
- *
- * Change the current value of one feature of this parser instance
- *
- * Returns -1 in case or error, 0 otherwise
- */
-int
-xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value)
-{
-    if ((ctxt == NULL) || (name == NULL) || (value == NULL))
-        return (-1);
-
-    if (!strcmp(name, "validate")) {
-        int newvalidate = *((int *) value);
-
-        if ((!ctxt->validate) && (newvalidate != 0)) {
-            if (ctxt->vctxt.warning == NULL)
-                ctxt->vctxt.warning = xmlParserValidityWarning;
-            if (ctxt->vctxt.error == NULL)
-                ctxt->vctxt.error = xmlParserValidityError;
-            ctxt->vctxt.nodeMax = 0;
-        }
-        ctxt->validate = newvalidate;
-    } else if (!strcmp(name, "keep blanks")) {
-        ctxt->keepBlanks = *((int *) value);
-    } else if (!strcmp(name, "disable SAX")) {
-        ctxt->disableSAX = *((int *) value);
-    } else if (!strcmp(name, "fetch external entities")) {
-        ctxt->loadsubset = *((int *) value);
-    } else if (!strcmp(name, "substitute entities")) {
-        ctxt->replaceEntities = *((int *) value);
-    } else if (!strcmp(name, "gather line info")) {
-        ctxt->record_info = *((int *) value);
-    } else if (!strcmp(name, "user data")) {
-        ctxt->userData = *((void **) value);
-    } else if (!strcmp(name, "is html")) {
-        ctxt->html = *((int *) value);
-    } else if (!strcmp(name, "is standalone")) {
-        ctxt->standalone = *((int *) value);
-    } else if (!strcmp(name, "document")) {
-        ctxt->myDoc = *((xmlDocPtr *) value);
-    } else if (!strcmp(name, "is well formed")) {
-        ctxt->wellFormed = *((int *) value);
-    } else if (!strcmp(name, "is valid")) {
-        ctxt->valid = *((int *) value);
-    } else if (!strcmp(name, "SAX block")) {
-        ctxt->sax = *((xmlSAXHandlerPtr *) value);
-    } else if (!strcmp(name, "SAX function internalSubset")) {
-        ctxt->sax->internalSubset = *((internalSubsetSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function isStandalone")) {
-        ctxt->sax->isStandalone = *((isStandaloneSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function hasInternalSubset")) {
-        ctxt->sax->hasInternalSubset =
-            *((hasInternalSubsetSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function hasExternalSubset")) {
-        ctxt->sax->hasExternalSubset =
-            *((hasExternalSubsetSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function resolveEntity")) {
-        ctxt->sax->resolveEntity = *((resolveEntitySAXFunc *) value);
-    } else if (!strcmp(name, "SAX function getEntity")) {
-        ctxt->sax->getEntity = *((getEntitySAXFunc *) value);
-    } else if (!strcmp(name, "SAX function entityDecl")) {
-        ctxt->sax->entityDecl = *((entityDeclSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function notationDecl")) {
-        ctxt->sax->notationDecl = *((notationDeclSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function attributeDecl")) {
-        ctxt->sax->attributeDecl = *((attributeDeclSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function elementDecl")) {
-        ctxt->sax->elementDecl = *((elementDeclSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
-        ctxt->sax->unparsedEntityDecl =
-            *((unparsedEntityDeclSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function setDocumentLocator")) {
-        ctxt->sax->setDocumentLocator =
-            *((setDocumentLocatorSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function startDocument")) {
-        ctxt->sax->startDocument = *((startDocumentSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function endDocument")) {
-        ctxt->sax->endDocument = *((endDocumentSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function startElement")) {
-        ctxt->sax->startElement = *((startElementSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function endElement")) {
-        ctxt->sax->endElement = *((endElementSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function reference")) {
-        ctxt->sax->reference = *((referenceSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function characters")) {
-        ctxt->sax->characters = *((charactersSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
-        ctxt->sax->ignorableWhitespace =
-            *((ignorableWhitespaceSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function processingInstruction")) {
-        ctxt->sax->processingInstruction =
-            *((processingInstructionSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function comment")) {
-        ctxt->sax->comment = *((commentSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function warning")) {
-        ctxt->sax->warning = *((warningSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function error")) {
-        ctxt->sax->error = *((errorSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function fatalError")) {
-        ctxt->sax->fatalError = *((fatalErrorSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function getParameterEntity")) {
-        ctxt->sax->getParameterEntity =
-            *((getParameterEntitySAXFunc *) value);
-    } else if (!strcmp(name, "SAX function cdataBlock")) {
-        ctxt->sax->cdataBlock = *((cdataBlockSAXFunc *) value);
-    } else if (!strcmp(name, "SAX function externalSubset")) {
-        ctxt->sax->externalSubset = *((externalSubsetSAXFunc *) value);
-    } else {
-        return (-1);
-    }
-    return (0);
-}
-
-/**
- * xmlDecodeEntities:
- * @ctxt:  the parser context
- * @len:  the len to decode (in bytes !), -1 for no size limit
- * @what:  combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
- * @end:  an end marker xmlChar, 0 if none
- * @end2:  an end marker xmlChar, 0 if none
- * @end3:  an end marker xmlChar, 0 if none
- *
- * This function is deprecated, we now always process entities content
- * through xmlStringDecodeEntities
- *
- * TODO: remove it in next major release.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * Returns A newly allocated string with the substitution done. The caller
- *      must deallocate it !
- */
-xmlChar *
-xmlDecodeEntities(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                  int len ATTRIBUTE_UNUSED, int what ATTRIBUTE_UNUSED,
-                  xmlChar end ATTRIBUTE_UNUSED,
-                  xmlChar end2 ATTRIBUTE_UNUSED,
-                  xmlChar end3 ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlDecodeEntities() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlNamespaceParseNCName:
- * @ctxt:  an XML parser context
- *
- * parse an XML namespace name.
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- *       top of the SAX interfaces, i.e. not on raw input.
- *
- * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
- *
- * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
- *                       CombiningChar | Extender
- *
- * Returns the namespace name or NULL
- */
-
-xmlChar *
-xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlNamespaceParseNCName() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlNamespaceParseQName:
- * @ctxt:  an XML parser context
- * @prefix:  a xmlChar **
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- *       top of the SAX interfaces, i.e. not on raw input.
- *
- * parse an XML qualified name
- *
- * [NS 5] QName ::= (Prefix ':')? LocalPart
- *
- * [NS 6] Prefix ::= NCName
- *
- * [NS 7] LocalPart ::= NCName
- *
- * Returns the local part, and prefix is updated
- *   to get the Prefix if any.
- */
-
-xmlChar *
-xmlNamespaceParseQName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                       xmlChar ** prefix ATTRIBUTE_UNUSED)
-{
-
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlNamespaceParseQName() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlNamespaceParseNSDef:
- * @ctxt:  an XML parser context
- *
- * parse a namespace prefix declaration
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- *       top of the SAX interfaces, i.e. not on raw input.
- *
- * [NS 1] NSDef ::= PrefixDef Eq SystemLiteral
- *
- * [NS 2] PrefixDef ::= 'xmlns' (':' NCName)?
- *
- * Returns the namespace name
- */
-
-xmlChar *
-xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlNamespaceParseNSDef() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlParseQuotedString:
- * @ctxt:  an XML parser context
- *
- * Parse and return a string between quotes or doublequotes
- *
- * TODO: Deprecated, to  be removed at next drop of binary compatibility
- *
- * Returns the string parser or NULL.
- */
-xmlChar *
-xmlParseQuotedString(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlParseQuotedString() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlParseNamespace:
- * @ctxt:  an XML parser context
- *
- * xmlParseNamespace: parse specific PI '<?namespace ...' constructs.
- *
- * This is what the older xml-name Working Draft specified, a bunch of
- * other stuff may still rely on it, so support is still here as
- * if it was declared on the root of the Tree:-(
- *
- * TODO: remove from library
- *
- * To be removed at next drop of binary compatibility
- */
-
-void
-xmlParseNamespace(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlParseNamespace() deprecated function reached\n");
-        deprecated = 1;
-    }
-}
-
-/**
- * xmlScanName:
- * @ctxt:  an XML parser context
- *
- * Trickery: parse an XML name but without consuming the input flow
- * Needed for rollback cases. Used only when parsing entities references.
- *
- * TODO: seems deprecated now, only used in the default part of
- *       xmlParserHandleReference
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- *                  CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (S Name)*
- *
- * Returns the Name parsed or NULL
- */
-
-xmlChar *
-xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlScanName() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlParserHandleReference:
- * @ctxt:  the parser context
- *
- * TODO: Remove, now deprecated ... the test is done directly in the
- *       content parsing
- * routines.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [68] EntityRef ::= '&' Name ';'
- *
- * [ WFC: Entity Declared ]
- * the Name given in the entity reference must match that in an entity
- * declaration, except that well-formed documents need not declare any
- * of the following entities: amp, lt, gt, apos, quot.
- *
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an unparsed entity
- *
- * [66] CharRef ::= '&#' [0-9]+ ';' |
- *                  '&#x' [0-9a-fA-F]+ ';'
- *
- * A PEReference may have been detected in the current input stream
- * the handling is done accordingly to
- *      http://www.w3.org/TR/REC-xml#entproc
- */
-void
-xmlParserHandleReference(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlParserHandleReference() deprecated function reached\n");
-        deprecated = 1;
-    }
-
-    return;
-}
-
-/**
- * xmlHandleEntity:
- * @ctxt:  an XML parser context
- * @entity:  an XML entity pointer.
- *
- * Default handling of defined entities, when should we define a new input
- * stream ? When do we just handle that as a set of chars ?
- *
- * OBSOLETE: to be removed at some point.
- */
-
-void
-xmlHandleEntity(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                xmlEntityPtr entity ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlHandleEntity() deprecated function reached\n");
-        deprecated = 1;
-    }
-}
-
-/**
- * xmlNewGlobalNs:
- * @doc:  the document carrying the namespace
- * @href:  the URI associated
- * @prefix:  the prefix for the namespace
- *
- * Creation of a Namespace, the old way using PI and without scoping
- *   DEPRECATED !!!
- * Returns NULL this functionality had been removed
- */
-xmlNsPtr
-xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED,
-               const xmlChar * href ATTRIBUTE_UNUSED,
-               const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlNewGlobalNs() deprecated function reached\n");
-        deprecated = 1;
-    }
-    return (NULL);
-}
-
-/**
- * xmlUpgradeOldNs:
- * @doc:  a document pointer
- *
- * Upgrade old style Namespaces (PI) and move them to the root of the document.
- * DEPRECATED
- */
-void
-xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED)
-{
-    static int deprecated = 0;
-
-    if (!deprecated) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlUpgradeOldNs() deprecated function reached\n");
-        deprecated = 1;
-    }
-}
-
-/**
- * xmlEncodeEntities:
- * @doc:  the document containing the string
- * @input:  A string to convert to XML.
- *
- * TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary
- *       compatibility
- *
- * People must migrate their code to xmlEncodeEntitiesReentrant !
- * This routine will issue a warning when encountered.
- *
- * Returns NULL
- */
-const xmlChar *
-xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED,
-                  const xmlChar * input ATTRIBUTE_UNUSED)
-{
-    static int warning = 1;
-
-    if (warning) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Deprecated API xmlEncodeEntities() used\n");
-        xmlGenericError(xmlGenericErrorContext,
-                        "   change code to use xmlEncodeEntitiesReentrant()\n");
-        warning = 0;
-    }
-    return (NULL);
-}
-
-/************************************************************************
- *									*
- *		Old set of SAXv1 functions				*
- *									*
- ************************************************************************/
-static int deprecated_v1_msg = 0;
-
-#define DEPRECATED(n)						\
-    if (deprecated_v1_msg == 0)					\
-	xmlGenericError(xmlGenericErrorContext,			\
-	  "Use of deprecated SAXv1 function %s\n", n);		\
-    deprecated_v1_msg++;
-
-/**
- * getPublicId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
- * DEPRECATED: use xmlSAX2GetPublicId()
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-getPublicId(void *ctx)
-{
-    DEPRECATED("getPublicId")
-        return (xmlSAX2GetPublicId(ctx));
-}
-
-/**
- * getSystemId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the system ID, basically URL or filename e.g.
- * http://www.sgmlsource.com/dtds/memo.dtd
- * DEPRECATED: use xmlSAX2GetSystemId()
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-getSystemId(void *ctx)
-{
-    DEPRECATED("getSystemId")
-        return (xmlSAX2GetSystemId(ctx));
-}
-
-/**
- * getLineNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the line number of the current parsing point.
- * DEPRECATED: use xmlSAX2GetLineNumber()
- *
- * Returns an int
- */
-int
-getLineNumber(void *ctx)
-{
-    DEPRECATED("getLineNumber")
-        return (xmlSAX2GetLineNumber(ctx));
-}
-
-/**
- * getColumnNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the column number of the current parsing point.
- * DEPRECATED: use xmlSAX2GetColumnNumber()
- *
- * Returns an int
- */
-int
-getColumnNumber(void *ctx)
-{
-    DEPRECATED("getColumnNumber")
-        return (xmlSAX2GetColumnNumber(ctx));
-}
-
-/**
- * isStandalone:
- * @ctx: the user data (XML parser context)
- *
- * Is this document tagged standalone ?
- * DEPRECATED: use xmlSAX2IsStandalone()
- *
- * Returns 1 if true
- */
-int
-isStandalone(void *ctx)
-{
-    DEPRECATED("isStandalone")
-        return (xmlSAX2IsStandalone(ctx));
-}
-
-/**
- * hasInternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an internal subset
- * DEPRECATED: use xmlSAX2HasInternalSubset()
- *
- * Returns 1 if true
- */
-int
-hasInternalSubset(void *ctx)
-{
-    DEPRECATED("hasInternalSubset")
-        return (xmlSAX2HasInternalSubset(ctx));
-}
-
-/**
- * hasExternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an external subset
- * DEPRECATED: use xmlSAX2HasExternalSubset()
- *
- * Returns 1 if true
- */
-int
-hasExternalSubset(void *ctx)
-{
-    DEPRECATED("hasExternalSubset")
-        return (xmlSAX2HasExternalSubset(ctx));
-}
-
-/**
- * internalSubset:
- * @ctx:  the user data (XML parser context)
- * @name:  the root element name
- * @ExternalID:  the external ID
- * @SystemID:  the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on internal subset declaration.
- * DEPRECATED: use xmlSAX2InternalSubset()
- */
-void
-internalSubset(void *ctx, const xmlChar * name,
-               const xmlChar * ExternalID, const xmlChar * SystemID)
-{
-    DEPRECATED("internalSubset")
-        xmlSAX2InternalSubset(ctx, name, ExternalID, SystemID);
-}
-
-/**
- * externalSubset:
- * @ctx: the user data (XML parser context)
- * @name:  the root element name
- * @ExternalID:  the external ID
- * @SystemID:  the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on external subset declaration.
- * DEPRECATED: use xmlSAX2ExternalSubset()
- */
-void
-externalSubset(void *ctx, const xmlChar * name,
-               const xmlChar * ExternalID, const xmlChar * SystemID)
-{
-    DEPRECATED("externalSubset")
-        xmlSAX2ExternalSubset(ctx, name, ExternalID, SystemID);
-}
-
-/**
- * resolveEntity:
- * @ctx: the user data (XML parser context)
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * The entity loader, to control the loading of external entities,
- * the application can either:
- *    - override this resolveEntity() callback in the SAX block
- *    - or better use the xmlSetExternalEntityLoader() function to
- *      set up it's own entity resolution routine
- * DEPRECATED: use xmlSAX2ResolveEntity()
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-xmlParserInputPtr
-resolveEntity(void *ctx, const xmlChar * publicId,
-              const xmlChar * systemId)
-{
-    DEPRECATED("resolveEntity")
-        return (xmlSAX2ResolveEntity(ctx, publicId, systemId));
-}
-
-/**
- * getEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get an entity by name
- * DEPRECATED: use xmlSAX2GetEntity()
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-getEntity(void *ctx, const xmlChar * name)
-{
-    DEPRECATED("getEntity")
-        return (xmlSAX2GetEntity(ctx, name));
-}
-
-/**
- * getParameterEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get a parameter entity by name
- * DEPRECATED: use xmlSAX2GetParameterEntity()
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-getParameterEntity(void *ctx, const xmlChar * name)
-{
-    DEPRECATED("getParameterEntity")
-        return (xmlSAX2GetParameterEntity(ctx, name));
-}
-
-
-/**
- * entityDecl:
- * @ctx: the user data (XML parser context)
- * @name:  the entity name
- * @type:  the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- * DEPRECATED: use xmlSAX2EntityDecl()
- */
-void
-entityDecl(void *ctx, const xmlChar * name, int type,
-           const xmlChar * publicId, const xmlChar * systemId,
-           xmlChar * content)
-{
-    DEPRECATED("entityDecl")
-        xmlSAX2EntityDecl(ctx, name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDecl:
- * @ctx: the user data (XML parser context)
- * @elem:  the name of the element
- * @fullname:  the attribute name
- * @type:  the attribute type
- * @def:  the type of default value
- * @defaultValue: the attribute default value
- * @tree:  the tree of enumerated value set
- *
- * An attribute definition has been parsed
- * DEPRECATED: use xmlSAX2AttributeDecl()
- */
-void
-attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname,
-              int type, int def, const xmlChar * defaultValue,
-              xmlEnumerationPtr tree)
-{
-    DEPRECATED("attributeDecl")
-        xmlSAX2AttributeDecl(ctx, elem, fullname, type, def, defaultValue,
-                             tree);
-}
-
-/**
- * elementDecl:
- * @ctx: the user data (XML parser context)
- * @name:  the element name
- * @type:  the element type
- * @content: the element value tree
- *
- * An element definition has been parsed
- * DEPRECATED: use xmlSAX2ElementDecl()
- */
-void
-elementDecl(void *ctx, const xmlChar * name, int type,
-            xmlElementContentPtr content)
-{
-    DEPRECATED("elementDecl")
-        xmlSAX2ElementDecl(ctx, name, type, content);
-}
-
-/**
- * notationDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- * DEPRECATED: use xmlSAX2NotationDecl()
- */
-void
-notationDecl(void *ctx, const xmlChar * name,
-             const xmlChar * publicId, const xmlChar * systemId)
-{
-    DEPRECATED("notationDecl")
-        xmlSAX2NotationDecl(ctx, name, publicId, systemId);
-}
-
-/**
- * unparsedEntityDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- * DEPRECATED: use xmlSAX2UnparsedEntityDecl()
- */
-void
-unparsedEntityDecl(void *ctx, const xmlChar * name,
-                   const xmlChar * publicId, const xmlChar * systemId,
-                   const xmlChar * notationName)
-{
-    DEPRECATED("unparsedEntityDecl")
-        xmlSAX2UnparsedEntityDecl(ctx, name, publicId, systemId,
-                                  notationName);
-}
-
-/**
- * setDocumentLocator:
- * @ctx: the user data (XML parser context)
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- * DEPRECATED
- */
-void
-setDocumentLocator(void *ctx ATTRIBUTE_UNUSED,
-                   xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("setDocumentLocator")
-}
-
-/**
- * startDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document start being processed.
- * DEPRECATED: use xmlSAX2StartDocument()
- */
-void
-startDocument(void *ctx)
-{
-   /* don't be too painful for glade users */
-   /*  DEPRECATED("startDocument") */
-        xmlSAX2StartDocument(ctx);
-}
-
-/**
- * endDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document end has been detected.
- * DEPRECATED: use xmlSAX2EndDocument()
- */
-void
-endDocument(void *ctx)
-{
-    DEPRECATED("endDocument")
-        xmlSAX2EndDocument(ctx);
-}
-
-/**
- * attribute:
- * @ctx: the user data (XML parser context)
- * @fullname:  The attribute name, including namespace prefix
- * @value:  The attribute value
- *
- * Handle an attribute that has been read by the parser.
- * The default handling is to convert the attribute into an
- * DOM subtree and past it in a new xmlAttr element added to
- * the element.
- * DEPRECATED: use xmlSAX2Attribute()
- */
-void
-attribute(void *ctx ATTRIBUTE_UNUSED,
-          const xmlChar * fullname ATTRIBUTE_UNUSED,
-          const xmlChar * value ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("attribute")
-}
-
-/**
- * startElement:
- * @ctx: the user data (XML parser context)
- * @fullname:  The element name, including namespace prefix
- * @atts:  An array of name/value attributes pairs, NULL terminated
- *
- * called when an opening tag has been processed.
- * DEPRECATED: use xmlSAX2StartElement()
- */
-void
-startElement(void *ctx, const xmlChar * fullname, const xmlChar ** atts)
-{
-    xmlSAX2StartElement(ctx, fullname, atts);
-}
-
-/**
- * endElement:
- * @ctx: the user data (XML parser context)
- * @name:  The element name
- *
- * called when the end of an element has been detected.
- * DEPRECATED: use xmlSAX2EndElement()
- */
-void
-endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("endElement")
-    xmlSAX2EndElement(ctx, name);
-}
-
-/**
- * reference:
- * @ctx: the user data (XML parser context)
- * @name:  The entity name
- *
- * called when an entity reference is detected.
- * DEPRECATED: use xmlSAX2Reference()
- */
-void
-reference(void *ctx, const xmlChar * name)
-{
-    DEPRECATED("reference")
-        xmlSAX2Reference(ctx, name);
-}
-
-/**
- * characters:
- * @ctx: the user data (XML parser context)
- * @ch:  a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * DEPRECATED: use xmlSAX2Characters()
- */
-void
-characters(void *ctx, const xmlChar * ch, int len)
-{
-    DEPRECATED("characters")
-        xmlSAX2Characters(ctx, ch, len);
-}
-
-/**
- * ignorableWhitespace:
- * @ctx: the user data (XML parser context)
- * @ch:  a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * UNUSED: by default the DOM building will use characters
- * DEPRECATED: use xmlSAX2IgnorableWhitespace()
- */
-void
-ignorableWhitespace(void *ctx ATTRIBUTE_UNUSED,
-                    const xmlChar * ch ATTRIBUTE_UNUSED,
-                    int len ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("ignorableWhitespace")
-}
-
-/**
- * processingInstruction:
- * @ctx: the user data (XML parser context)
- * @target:  the target name
- * @data: the PI data's
- *
- * A processing instruction has been parsed.
- * DEPRECATED: use xmlSAX2ProcessingInstruction()
- */
-void
-processingInstruction(void *ctx, const xmlChar * target,
-                      const xmlChar * data)
-{
-    DEPRECATED("processingInstruction")
-        xmlSAX2ProcessingInstruction(ctx, target, data);
-}
-
-/**
- * globalNamespace:
- * @ctx: the user data (XML parser context)
- * @href:  the namespace associated URN
- * @prefix: the namespace prefix
- *
- * An old global namespace has been parsed.
- * DEPRECATED
- */
-void
-globalNamespace(void *ctx ATTRIBUTE_UNUSED,
-                const xmlChar * href ATTRIBUTE_UNUSED,
-                const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("globalNamespace")
-}
-
-/**
- * setNamespace:
- * @ctx: the user data (XML parser context)
- * @name:  the namespace prefix
- *
- * Set the current element namespace.
- * DEPRECATED
- */
-
-void
-setNamespace(void *ctx ATTRIBUTE_UNUSED,
-             const xmlChar * name ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("setNamespace")
-}
-
-/**
- * getNamespace:
- * @ctx: the user data (XML parser context)
- *
- * Get the current element namespace.
- * DEPRECATED
- *
- * Returns the xmlNsPtr or NULL if none
- */
-
-xmlNsPtr
-getNamespace(void *ctx ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("getNamespace")
-        return (NULL);
-}
-
-/**
- * checkNamespace:
- * @ctx: the user data (XML parser context)
- * @namespace: the namespace to check against
- *
- * Check that the current element namespace is the same as the
- * one read upon parsing.
- * DEPRECATED
- *
- * Returns 1 if true 0 otherwise
- */
-
-int
-checkNamespace(void *ctx ATTRIBUTE_UNUSED,
-               xmlChar * namespace ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("checkNamespace")
-        return (0);
-}
-
-/**
- * namespaceDecl:
- * @ctx: the user data (XML parser context)
- * @href:  the namespace associated URN
- * @prefix: the namespace prefix
- *
- * A namespace has been parsed.
- * DEPRECATED
- */
-void
-namespaceDecl(void *ctx ATTRIBUTE_UNUSED,
-              const xmlChar * href ATTRIBUTE_UNUSED,
-              const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
-    DEPRECATED("namespaceDecl")
-}
-
-/**
- * comment:
- * @ctx: the user data (XML parser context)
- * @value:  the comment content
- *
- * A comment has been parsed.
- * DEPRECATED: use xmlSAX2Comment()
- */
-void
-comment(void *ctx, const xmlChar * value)
-{
-    DEPRECATED("comment")
-        xmlSAX2Comment(ctx, value);
-}
-
-/**
- * cdataBlock:
- * @ctx: the user data (XML parser context)
- * @value:  The pcdata content
- * @len:  the block length
- *
- * called when a pcdata block has been parsed
- * DEPRECATED: use xmlSAX2CDataBlock()
- */
-void
-cdataBlock(void *ctx, const xmlChar * value, int len)
-{
-    DEPRECATED("cdataBlock")
-        xmlSAX2CDataBlock(ctx, value, len);
-}
-#define bottom_legacy
-#include "elfgcchack.h"
-#endif /* LIBXML_LEGACY_ENABLED */
-
diff --git a/src/third_party/libxml/src/libxml2.spec b/src/third_party/libxml/src/libxml2.spec
index 4d791f7..75d9544 100644
--- a/src/third_party/libxml/src/libxml2.spec
+++ b/src/third_party/libxml/src/libxml2.spec
@@ -194,6 +194,6 @@
 %endif # with_python3
 
 %changelog
-* Tue Mar 28 2017 Daniel Veillard <veillard@redhat.com>
+* Wed Apr  5 2017 Daniel Veillard <veillard@redhat.com>
 - upstream release 2.9.4 see http://xmlsoft.org/news.html
 
diff --git a/src/third_party/libxml/src/parser.c b/src/third_party/libxml/src/parser.c
index 745c3da..c300788 100644
--- a/src/third_party/libxml/src/parser.c
+++ b/src/third_party/libxml/src/parser.c
@@ -8147,6 +8147,14 @@
 	    if (xmlPushInput(ctxt, input) < 0)
 		return;
 	} else {
+	    if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
+	        ((ctxt->options & XML_PARSE_NOENT) == 0) &&
+	        ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
+	        ((ctxt->options & XML_PARSE_DTDLOAD) == 0) &&
+	        ((ctxt->options & XML_PARSE_DTDATTR) == 0) &&
+	        (ctxt->replaceEntities == 0) &&
+	        (ctxt->validate == 0))
+	        return;
 	    /*
 	     * TODO !!!
 	     * handle the extra spaces added before and after
diff --git a/src/third_party/libxml/src/relaxng.c b/src/third_party/libxml/src/relaxng.c
deleted file mode 100644
index 3d3e69c..0000000
--- a/src/third_party/libxml/src/relaxng.c
+++ /dev/null
@@ -1,11059 +0,0 @@
-/*
- * relaxng.c : implementation of the Relax-NG handling and validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-/**
- * TODO:
- * - add support for DTD compatibility spec
- *   http://www.oasis-open.org/committees/relax-ng/compatibility-20011203.html
- * - report better mem allocations pbms at runtime and abort immediately.
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <stdio.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-
-#include <libxml/relaxng.h>
-
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlschemastypes.h>
-
-/*
- * The Relax-NG namespace
- */
-static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
-    "http://relaxng.org/ns/structure/1.0";
-
-#define IS_RELAXNG(node, typ)						\
-   ((node != NULL) && (node->ns != NULL) &&				\
-    (node->type == XML_ELEMENT_NODE) &&					\
-    (xmlStrEqual(node->name, (const xmlChar *) typ)) &&		\
-    (xmlStrEqual(node->ns->href, xmlRelaxNGNs)))
-
-
-#if 0
-#define DEBUG 1
-
-#define DEBUG_GRAMMAR 1
-
-#define DEBUG_CONTENT 1
-
-#define DEBUG_TYPE 1
-
-#define DEBUG_VALID 1
-
-#define DEBUG_INTERLEAVE 1
-
-#define DEBUG_LIST 1
-
-#define DEBUG_INCLUDE 1
-
-#define DEBUG_ERROR 1
-
-#define DEBUG_COMPILE 1
-
-#define DEBUG_PROGRESSIVE 1
-#endif
-
-#define MAX_ERROR 5
-
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-typedef struct _xmlRelaxNGSchema xmlRelaxNGSchema;
-typedef xmlRelaxNGSchema *xmlRelaxNGSchemaPtr;
-
-typedef struct _xmlRelaxNGDefine xmlRelaxNGDefine;
-typedef xmlRelaxNGDefine *xmlRelaxNGDefinePtr;
-
-typedef struct _xmlRelaxNGDocument xmlRelaxNGDocument;
-typedef xmlRelaxNGDocument *xmlRelaxNGDocumentPtr;
-
-typedef struct _xmlRelaxNGInclude xmlRelaxNGInclude;
-typedef xmlRelaxNGInclude *xmlRelaxNGIncludePtr;
-
-typedef enum {
-    XML_RELAXNG_COMBINE_UNDEFINED = 0,  /* undefined */
-    XML_RELAXNG_COMBINE_CHOICE, /* choice */
-    XML_RELAXNG_COMBINE_INTERLEAVE      /* interleave */
-} xmlRelaxNGCombine;
-
-typedef enum {
-    XML_RELAXNG_CONTENT_ERROR = -1,
-    XML_RELAXNG_CONTENT_EMPTY = 0,
-    XML_RELAXNG_CONTENT_SIMPLE,
-    XML_RELAXNG_CONTENT_COMPLEX
-} xmlRelaxNGContentType;
-
-typedef struct _xmlRelaxNGGrammar xmlRelaxNGGrammar;
-typedef xmlRelaxNGGrammar *xmlRelaxNGGrammarPtr;
-
-struct _xmlRelaxNGGrammar {
-    xmlRelaxNGGrammarPtr parent;        /* the parent grammar if any */
-    xmlRelaxNGGrammarPtr children;      /* the children grammar if any */
-    xmlRelaxNGGrammarPtr next;  /* the next grammar if any */
-    xmlRelaxNGDefinePtr start;  /* <start> content */
-    xmlRelaxNGCombine combine;  /* the default combine value */
-    xmlRelaxNGDefinePtr startList;      /* list of <start> definitions */
-    xmlHashTablePtr defs;       /* define* */
-    xmlHashTablePtr refs;       /* references */
-};
-
-
-typedef enum {
-    XML_RELAXNG_NOOP = -1,      /* a no operation from simplification  */
-    XML_RELAXNG_EMPTY = 0,      /* an empty pattern */
-    XML_RELAXNG_NOT_ALLOWED,    /* not allowed top */
-    XML_RELAXNG_EXCEPT,         /* except present in nameclass defs */
-    XML_RELAXNG_TEXT,           /* textual content */
-    XML_RELAXNG_ELEMENT,        /* an element */
-    XML_RELAXNG_DATATYPE,       /* extenal data type definition */
-    XML_RELAXNG_PARAM,          /* extenal data type parameter */
-    XML_RELAXNG_VALUE,          /* value from an extenal data type definition */
-    XML_RELAXNG_LIST,           /* a list of patterns */
-    XML_RELAXNG_ATTRIBUTE,      /* an attrbute following a pattern */
-    XML_RELAXNG_DEF,            /* a definition */
-    XML_RELAXNG_REF,            /* reference to a definition */
-    XML_RELAXNG_EXTERNALREF,    /* reference to an external def */
-    XML_RELAXNG_PARENTREF,      /* reference to a def in the parent grammar */
-    XML_RELAXNG_OPTIONAL,       /* optional patterns */
-    XML_RELAXNG_ZEROORMORE,     /* zero or more non empty patterns */
-    XML_RELAXNG_ONEORMORE,      /* one or more non empty patterns */
-    XML_RELAXNG_CHOICE,         /* a choice between non empty patterns */
-    XML_RELAXNG_GROUP,          /* a pair/group of non empty patterns */
-    XML_RELAXNG_INTERLEAVE,     /* interleaving choice of non-empty patterns */
-    XML_RELAXNG_START           /* Used to keep track of starts on grammars */
-} xmlRelaxNGType;
-
-#define IS_NULLABLE		(1 << 0)
-#define IS_NOT_NULLABLE		(1 << 1)
-#define IS_INDETERMINIST	(1 << 2)
-#define IS_MIXED		(1 << 3)
-#define IS_TRIABLE		(1 << 4)
-#define IS_PROCESSED		(1 << 5)
-#define IS_COMPILABLE		(1 << 6)
-#define IS_NOT_COMPILABLE	(1 << 7)
-#define IS_EXTERNAL_REF	        (1 << 8)
-
-struct _xmlRelaxNGDefine {
-    xmlRelaxNGType type;        /* the type of definition */
-    xmlNodePtr node;            /* the node in the source */
-    xmlChar *name;              /* the element local name if present */
-    xmlChar *ns;                /* the namespace local name if present */
-    xmlChar *value;             /* value when available */
-    void *data;                 /* data lib or specific pointer */
-    xmlRelaxNGDefinePtr content;        /* the expected content */
-    xmlRelaxNGDefinePtr parent; /* the parent definition, if any */
-    xmlRelaxNGDefinePtr next;   /* list within grouping sequences */
-    xmlRelaxNGDefinePtr attrs;  /* list of attributes for elements */
-    xmlRelaxNGDefinePtr nameClass;      /* the nameClass definition if any */
-    xmlRelaxNGDefinePtr nextHash;       /* next define in defs/refs hash tables */
-    short depth;                /* used for the cycle detection */
-    short dflags;               /* define related flags */
-    xmlRegexpPtr contModel;     /* a compiled content model if available */
-};
-
-/**
- * _xmlRelaxNG:
- *
- * A RelaxNGs definition
- */
-struct _xmlRelaxNG {
-    void *_private;             /* unused by the library for users or bindings */
-    xmlRelaxNGGrammarPtr topgrammar;
-    xmlDocPtr doc;
-
-    int idref;                  /* requires idref checking */
-
-    xmlHashTablePtr defs;       /* define */
-    xmlHashTablePtr refs;       /* references */
-    xmlRelaxNGDocumentPtr documents;    /* all the documents loaded */
-    xmlRelaxNGIncludePtr includes;      /* all the includes loaded */
-    int defNr;                  /* number of defines used */
-    xmlRelaxNGDefinePtr *defTab;        /* pointer to the allocated definitions */
-
-};
-
-#define XML_RELAXNG_IN_ATTRIBUTE	(1 << 0)
-#define XML_RELAXNG_IN_ONEORMORE	(1 << 1)
-#define XML_RELAXNG_IN_LIST		(1 << 2)
-#define XML_RELAXNG_IN_DATAEXCEPT	(1 << 3)
-#define XML_RELAXNG_IN_START		(1 << 4)
-#define XML_RELAXNG_IN_OOMGROUP		(1 << 5)
-#define XML_RELAXNG_IN_OOMINTERLEAVE	(1 << 6)
-#define XML_RELAXNG_IN_EXTERNALREF	(1 << 7)
-#define XML_RELAXNG_IN_ANYEXCEPT	(1 << 8)
-#define XML_RELAXNG_IN_NSEXCEPT		(1 << 9)
-
-struct _xmlRelaxNGParserCtxt {
-    void *userData;             /* user specific data block */
-    xmlRelaxNGValidityErrorFunc error;  /* the callback in case of errors */
-    xmlRelaxNGValidityWarningFunc warning;      /* the callback in case of warning */
-    xmlStructuredErrorFunc serror;
-    xmlRelaxNGValidErr err;
-
-    xmlRelaxNGPtr schema;       /* The schema in use */
-    xmlRelaxNGGrammarPtr grammar;       /* the current grammar */
-    xmlRelaxNGGrammarPtr parentgrammar; /* the parent grammar */
-    int flags;                  /* parser flags */
-    int nbErrors;               /* number of errors at parse time */
-    int nbWarnings;             /* number of warnings at parse time */
-    const xmlChar *define;      /* the current define scope */
-    xmlRelaxNGDefinePtr def;    /* the current define */
-
-    int nbInterleaves;
-    xmlHashTablePtr interleaves;        /* keep track of all the interleaves */
-
-    xmlRelaxNGDocumentPtr documents;    /* all the documents loaded */
-    xmlRelaxNGIncludePtr includes;      /* all the includes loaded */
-    xmlChar *URL;
-    xmlDocPtr document;
-
-    int defNr;                  /* number of defines used */
-    int defMax;                 /* number of defines aloocated */
-    xmlRelaxNGDefinePtr *defTab;        /* pointer to the allocated definitions */
-
-    const char *buffer;
-    int size;
-
-    /* the document stack */
-    xmlRelaxNGDocumentPtr doc;  /* Current parsed external ref */
-    int docNr;                  /* Depth of the parsing stack */
-    int docMax;                 /* Max depth of the parsing stack */
-    xmlRelaxNGDocumentPtr *docTab;      /* array of docs */
-
-    /* the include stack */
-    xmlRelaxNGIncludePtr inc;   /* Current parsed include */
-    int incNr;                  /* Depth of the include parsing stack */
-    int incMax;                 /* Max depth of the parsing stack */
-    xmlRelaxNGIncludePtr *incTab;       /* array of incs */
-
-    int idref;                  /* requires idref checking */
-
-    /* used to compile content models */
-    xmlAutomataPtr am;          /* the automata */
-    xmlAutomataStatePtr state;  /* used to build the automata */
-
-    int crng;			/* compact syntax and other flags */
-    int freedoc;		/* need to free the document */
-};
-
-#define FLAGS_IGNORABLE		1
-#define FLAGS_NEGATIVE		2
-#define FLAGS_MIXED_CONTENT	4
-#define FLAGS_NOERROR		8
-
-/**
- * xmlRelaxNGInterleaveGroup:
- *
- * A RelaxNGs partition set associated to lists of definitions
- */
-typedef struct _xmlRelaxNGInterleaveGroup xmlRelaxNGInterleaveGroup;
-typedef xmlRelaxNGInterleaveGroup *xmlRelaxNGInterleaveGroupPtr;
-struct _xmlRelaxNGInterleaveGroup {
-    xmlRelaxNGDefinePtr rule;   /* the rule to satisfy */
-    xmlRelaxNGDefinePtr *defs;  /* the array of element definitions */
-    xmlRelaxNGDefinePtr *attrs; /* the array of attributes definitions */
-};
-
-#define IS_DETERMINIST		1
-#define IS_NEEDCHECK		2
-
-/**
- * xmlRelaxNGPartitions:
- *
- * A RelaxNGs partition associated to an interleave group
- */
-typedef struct _xmlRelaxNGPartition xmlRelaxNGPartition;
-typedef xmlRelaxNGPartition *xmlRelaxNGPartitionPtr;
-struct _xmlRelaxNGPartition {
-    int nbgroups;               /* number of groups in the partitions */
-    xmlHashTablePtr triage;     /* hash table used to direct nodes to the
-                                 * right group when possible */
-    int flags;                  /* determinist ? */
-    xmlRelaxNGInterleaveGroupPtr *groups;
-};
-
-/**
- * xmlRelaxNGValidState:
- *
- * A RelaxNGs validation state
- */
-#define MAX_ATTR 20
-typedef struct _xmlRelaxNGValidState xmlRelaxNGValidState;
-typedef xmlRelaxNGValidState *xmlRelaxNGValidStatePtr;
-struct _xmlRelaxNGValidState {
-    xmlNodePtr node;            /* the current node */
-    xmlNodePtr seq;             /* the sequence of children left to validate */
-    int nbAttrs;                /* the number of attributes */
-    int maxAttrs;               /* the size of attrs */
-    int nbAttrLeft;             /* the number of attributes left to validate */
-    xmlChar *value;             /* the value when operating on string */
-    xmlChar *endvalue;          /* the end value when operating on string */
-    xmlAttrPtr *attrs;          /* the array of attributes */
-};
-
-/**
- * xmlRelaxNGStates:
- *
- * A RelaxNGs container for validation state
- */
-typedef struct _xmlRelaxNGStates xmlRelaxNGStates;
-typedef xmlRelaxNGStates *xmlRelaxNGStatesPtr;
-struct _xmlRelaxNGStates {
-    int nbState;                /* the number of states */
-    int maxState;               /* the size of the array */
-    xmlRelaxNGValidStatePtr *tabState;
-};
-
-#define ERROR_IS_DUP	1
-
-/**
- * xmlRelaxNGValidError:
- *
- * A RelaxNGs validation error
- */
-typedef struct _xmlRelaxNGValidError xmlRelaxNGValidError;
-typedef xmlRelaxNGValidError *xmlRelaxNGValidErrorPtr;
-struct _xmlRelaxNGValidError {
-    xmlRelaxNGValidErr err;     /* the error number */
-    int flags;                  /* flags */
-    xmlNodePtr node;            /* the current node */
-    xmlNodePtr seq;             /* the current child */
-    const xmlChar *arg1;        /* first arg */
-    const xmlChar *arg2;        /* second arg */
-};
-
-/**
- * xmlRelaxNGValidCtxt:
- *
- * A RelaxNGs validation context
- */
-
-struct _xmlRelaxNGValidCtxt {
-    void *userData;             /* user specific data block */
-    xmlRelaxNGValidityErrorFunc error;  /* the callback in case of errors */
-    xmlRelaxNGValidityWarningFunc warning;      /* the callback in case of warning */
-    xmlStructuredErrorFunc serror;
-    int nbErrors;               /* number of errors in validation */
-
-    xmlRelaxNGPtr schema;       /* The schema in use */
-    xmlDocPtr doc;              /* the document being validated */
-    int flags;                  /* validation flags */
-    int depth;                  /* validation depth */
-    int idref;                  /* requires idref checking */
-    int errNo;                  /* the first error found */
-
-    /*
-     * Errors accumulated in branches may have to be stacked to be
-     * provided back when it's sure they affect validation.
-     */
-    xmlRelaxNGValidErrorPtr err;        /* Last error */
-    int errNr;                  /* Depth of the error stack */
-    int errMax;                 /* Max depth of the error stack */
-    xmlRelaxNGValidErrorPtr errTab;     /* stack of errors */
-
-    xmlRelaxNGValidStatePtr state;      /* the current validation state */
-    xmlRelaxNGStatesPtr states; /* the accumulated state list */
-
-    xmlRelaxNGStatesPtr freeState;      /* the pool of free valid states */
-    int freeStatesNr;
-    int freeStatesMax;
-    xmlRelaxNGStatesPtr *freeStates;    /* the pool of free state groups */
-
-    /*
-     * This is used for "progressive" validation
-     */
-    xmlRegExecCtxtPtr elem;     /* the current element regexp */
-    int elemNr;                 /* the number of element validated */
-    int elemMax;                /* the max depth of elements */
-    xmlRegExecCtxtPtr *elemTab; /* the stack of regexp runtime */
-    int pstate;                 /* progressive state */
-    xmlNodePtr pnode;           /* the current node */
-    xmlRelaxNGDefinePtr pdef;   /* the non-streamable definition */
-    int perr;                   /* signal error in content model
-                                 * outside the regexp */
-};
-
-/**
- * xmlRelaxNGInclude:
- *
- * Structure associated to a RelaxNGs document element
- */
-struct _xmlRelaxNGInclude {
-    xmlRelaxNGIncludePtr next;  /* keep a chain of includes */
-    xmlChar *href;              /* the normalized href value */
-    xmlDocPtr doc;              /* the associated XML document */
-    xmlRelaxNGDefinePtr content;        /* the definitions */
-    xmlRelaxNGPtr schema;       /* the schema */
-};
-
-/**
- * xmlRelaxNGDocument:
- *
- * Structure associated to a RelaxNGs document element
- */
-struct _xmlRelaxNGDocument {
-    xmlRelaxNGDocumentPtr next; /* keep a chain of documents */
-    xmlChar *href;              /* the normalized href value */
-    xmlDocPtr doc;              /* the associated XML document */
-    xmlRelaxNGDefinePtr content;        /* the definitions */
-    xmlRelaxNGPtr schema;       /* the schema */
-    int externalRef;            /* 1 if an external ref */
-};
-
-
-/************************************************************************
- *									*
- *		Some factorized error routines				*
- *									*
- ************************************************************************/
-
-/**
- * xmlRngPErrMemory:
- * @ctxt:  an Relax-NG parser context
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlRngPErrMemory(xmlRelaxNGParserCtxtPtr ctxt, const char *extra)
-{
-    xmlStructuredErrorFunc schannel = NULL;
-    xmlGenericErrorFunc channel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        if (ctxt->serror != NULL)
-	    schannel = ctxt->serror;
-	else
-	    channel = ctxt->error;
-        data = ctxt->userData;
-        ctxt->nbErrors++;
-    }
-    if (extra)
-        __xmlRaiseError(schannel, channel, data,
-                        NULL, NULL, XML_FROM_RELAXNGP,
-                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
-                        NULL, NULL, 0, 0,
-                        "Memory allocation failed : %s\n", extra);
-    else
-        __xmlRaiseError(schannel, channel, data,
-                        NULL, NULL, XML_FROM_RELAXNGP,
-                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
-                        NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * xmlRngVErrMemory:
- * @ctxt:  a Relax-NG validation context
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlRngVErrMemory(xmlRelaxNGValidCtxtPtr ctxt, const char *extra)
-{
-    xmlStructuredErrorFunc schannel = NULL;
-    xmlGenericErrorFunc channel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        if (ctxt->serror != NULL)
-	    schannel = ctxt->serror;
-	else
-	    channel = ctxt->error;
-        data = ctxt->userData;
-        ctxt->nbErrors++;
-    }
-    if (extra)
-        __xmlRaiseError(schannel, channel, data,
-                        NULL, NULL, XML_FROM_RELAXNGV,
-                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
-                        NULL, NULL, 0, 0,
-                        "Memory allocation failed : %s\n", extra);
-    else
-        __xmlRaiseError(schannel, channel, data,
-                        NULL, NULL, XML_FROM_RELAXNGV,
-                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
-                        NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * xmlRngPErr:
- * @ctxt:  a Relax-NG parser context
- * @node:  the node raising the error
- * @error:  the error code
- * @msg:  message
- * @str1:  extra info
- * @str2:  extra info
- *
- * Handle a Relax NG Parsing error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlRngPErr(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node, int error,
-           const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
-    xmlStructuredErrorFunc schannel = NULL;
-    xmlGenericErrorFunc channel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        if (ctxt->serror != NULL)
-	    schannel = ctxt->serror;
-	else
-	    channel = ctxt->error;
-        data = ctxt->userData;
-        ctxt->nbErrors++;
-    }
-    __xmlRaiseError(schannel, channel, data,
-                    NULL, node, XML_FROM_RELAXNGP,
-                    error, XML_ERR_ERROR, NULL, 0,
-                    (const char *) str1, (const char *) str2, NULL, 0, 0,
-                    msg, str1, str2);
-}
-
-/**
- * xmlRngVErr:
- * @ctxt:  a Relax-NG validation context
- * @node:  the node raising the error
- * @error:  the error code
- * @msg:  message
- * @str1:  extra info
- * @str2:  extra info
- *
- * Handle a Relax NG Validation error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
-           const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
-    xmlStructuredErrorFunc schannel = NULL;
-    xmlGenericErrorFunc channel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        if (ctxt->serror != NULL)
-	    schannel = ctxt->serror;
-	else
-	    channel = ctxt->error;
-        data = ctxt->userData;
-        ctxt->nbErrors++;
-    }
-    __xmlRaiseError(schannel, channel, data,
-                    NULL, node, XML_FROM_RELAXNGV,
-                    error, XML_ERR_ERROR, NULL, 0,
-                    (const char *) str1, (const char *) str2, NULL, 0, 0,
-                    msg, str1, str2);
-}
-
-/************************************************************************
- *									*
- *		Preliminary type checking interfaces			*
- *									*
- ************************************************************************/
-
-/**
- * xmlRelaxNGTypeHave:
- * @data:  data needed for the library
- * @type:  the type name
- * @value:  the value to check
- *
- * Function provided by a type library to check if a type is exported
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeHave) (void *data, const xmlChar * type);
-
-/**
- * xmlRelaxNGTypeCheck:
- * @data:  data needed for the library
- * @type:  the type name
- * @value:  the value to check
- * @result:  place to store the result if needed
- *
- * Function provided by a type library to check if a value match a type
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeCheck) (void *data, const xmlChar * type,
-                                    const xmlChar * value, void **result,
-                                    xmlNodePtr node);
-
-/**
- * xmlRelaxNGFacetCheck:
- * @data:  data needed for the library
- * @type:  the type name
- * @facet:  the facet name
- * @val:  the facet value
- * @strval:  the string value
- * @value:  the value to check
- *
- * Function provided by a type library to check a value facet
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGFacetCheck) (void *data, const xmlChar * type,
-                                     const xmlChar * facet,
-                                     const xmlChar * val,
-                                     const xmlChar * strval, void *value);
-
-/**
- * xmlRelaxNGTypeFree:
- * @data:  data needed for the library
- * @result:  the value to free
- *
- * Function provided by a type library to free a returned result
- */
-typedef void (*xmlRelaxNGTypeFree) (void *data, void *result);
-
-/**
- * xmlRelaxNGTypeCompare:
- * @data:  data needed for the library
- * @type:  the type name
- * @value1:  the first value
- * @value2:  the second value
- *
- * Function provided by a type library to compare two values accordingly
- * to a type.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeCompare) (void *data, const xmlChar * type,
-                                      const xmlChar * value1,
-                                      xmlNodePtr ctxt1,
-                                      void *comp1,
-                                      const xmlChar * value2,
-                                      xmlNodePtr ctxt2);
-typedef struct _xmlRelaxNGTypeLibrary xmlRelaxNGTypeLibrary;
-typedef xmlRelaxNGTypeLibrary *xmlRelaxNGTypeLibraryPtr;
-struct _xmlRelaxNGTypeLibrary {
-    const xmlChar *namespace;   /* the datatypeLibrary value */
-    void *data;                 /* data needed for the library */
-    xmlRelaxNGTypeHave have;    /* the export function */
-    xmlRelaxNGTypeCheck check;  /* the checking function */
-    xmlRelaxNGTypeCompare comp; /* the compare function */
-    xmlRelaxNGFacetCheck facet; /* the facet check function */
-    xmlRelaxNGTypeFree freef;   /* the freeing function */
-};
-
-/************************************************************************
- *									*
- *			Allocation functions				*
- *									*
- ************************************************************************/
-static void xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar);
-static void xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define);
-static void xmlRelaxNGNormExtSpace(xmlChar * value);
-static void xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema);
-static int xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt
-                                     ATTRIBUTE_UNUSED,
-                                     xmlRelaxNGValidStatePtr state1,
-                                     xmlRelaxNGValidStatePtr state2);
-static void xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
-                                     xmlRelaxNGValidStatePtr state);
-
-/**
- * xmlRelaxNGFreeDocument:
- * @docu:  a document structure
- *
- * Deallocate a RelaxNG document structure.
- */
-static void
-xmlRelaxNGFreeDocument(xmlRelaxNGDocumentPtr docu)
-{
-    if (docu == NULL)
-        return;
-
-    if (docu->href != NULL)
-        xmlFree(docu->href);
-    if (docu->doc != NULL)
-        xmlFreeDoc(docu->doc);
-    if (docu->schema != NULL)
-        xmlRelaxNGFreeInnerSchema(docu->schema);
-    xmlFree(docu);
-}
-
-/**
- * xmlRelaxNGFreeDocumentList:
- * @docu:  a list of  document structure
- *
- * Deallocate a RelaxNG document structures.
- */
-static void
-xmlRelaxNGFreeDocumentList(xmlRelaxNGDocumentPtr docu)
-{
-    xmlRelaxNGDocumentPtr next;
-
-    while (docu != NULL) {
-        next = docu->next;
-        xmlRelaxNGFreeDocument(docu);
-        docu = next;
-    }
-}
-
-/**
- * xmlRelaxNGFreeInclude:
- * @incl:  a include structure
- *
- * Deallocate a RelaxNG include structure.
- */
-static void
-xmlRelaxNGFreeInclude(xmlRelaxNGIncludePtr incl)
-{
-    if (incl == NULL)
-        return;
-
-    if (incl->href != NULL)
-        xmlFree(incl->href);
-    if (incl->doc != NULL)
-        xmlFreeDoc(incl->doc);
-    if (incl->schema != NULL)
-        xmlRelaxNGFree(incl->schema);
-    xmlFree(incl);
-}
-
-/**
- * xmlRelaxNGFreeIncludeList:
- * @incl:  a include structure list
- *
- * Deallocate a RelaxNG include structure.
- */
-static void
-xmlRelaxNGFreeIncludeList(xmlRelaxNGIncludePtr incl)
-{
-    xmlRelaxNGIncludePtr next;
-
-    while (incl != NULL) {
-        next = incl->next;
-        xmlRelaxNGFreeInclude(incl);
-        incl = next;
-    }
-}
-
-/**
- * xmlRelaxNGNewRelaxNG:
- * @ctxt:  a Relax-NG validation context (optional)
- *
- * Allocate a new RelaxNG structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGPtr
-xmlRelaxNGNewRelaxNG(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    xmlRelaxNGPtr ret;
-
-    ret = (xmlRelaxNGPtr) xmlMalloc(sizeof(xmlRelaxNG));
-    if (ret == NULL) {
-        xmlRngPErrMemory(ctxt, NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNG));
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGFreeInnerSchema:
- * @schema:  a schema structure
- *
- * Deallocate a RelaxNG schema structure.
- */
-static void
-xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema)
-{
-    if (schema == NULL)
-        return;
-
-    if (schema->doc != NULL)
-        xmlFreeDoc(schema->doc);
-    if (schema->defTab != NULL) {
-        int i;
-
-        for (i = 0; i < schema->defNr; i++)
-            xmlRelaxNGFreeDefine(schema->defTab[i]);
-        xmlFree(schema->defTab);
-    }
-
-    xmlFree(schema);
-}
-
-/**
- * xmlRelaxNGFree:
- * @schema:  a schema structure
- *
- * Deallocate a RelaxNG structure.
- */
-void
-xmlRelaxNGFree(xmlRelaxNGPtr schema)
-{
-    if (schema == NULL)
-        return;
-
-    if (schema->topgrammar != NULL)
-        xmlRelaxNGFreeGrammar(schema->topgrammar);
-    if (schema->doc != NULL)
-        xmlFreeDoc(schema->doc);
-    if (schema->documents != NULL)
-        xmlRelaxNGFreeDocumentList(schema->documents);
-    if (schema->includes != NULL)
-        xmlRelaxNGFreeIncludeList(schema->includes);
-    if (schema->defTab != NULL) {
-        int i;
-
-        for (i = 0; i < schema->defNr; i++)
-            xmlRelaxNGFreeDefine(schema->defTab[i]);
-        xmlFree(schema->defTab);
-    }
-
-    xmlFree(schema);
-}
-
-/**
- * xmlRelaxNGNewGrammar:
- * @ctxt:  a Relax-NG validation context (optional)
- *
- * Allocate a new RelaxNG grammar.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGGrammarPtr
-xmlRelaxNGNewGrammar(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    xmlRelaxNGGrammarPtr ret;
-
-    ret = (xmlRelaxNGGrammarPtr) xmlMalloc(sizeof(xmlRelaxNGGrammar));
-    if (ret == NULL) {
-        xmlRngPErrMemory(ctxt, NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGGrammar));
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGFreeGrammar:
- * @grammar:  a grammar structure
- *
- * Deallocate a RelaxNG grammar structure.
- */
-static void
-xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar)
-{
-    if (grammar == NULL)
-        return;
-
-    if (grammar->children != NULL) {
-        xmlRelaxNGFreeGrammar(grammar->children);
-    }
-    if (grammar->next != NULL) {
-        xmlRelaxNGFreeGrammar(grammar->next);
-    }
-    if (grammar->refs != NULL) {
-        xmlHashFree(grammar->refs, NULL);
-    }
-    if (grammar->defs != NULL) {
-        xmlHashFree(grammar->defs, NULL);
-    }
-
-    xmlFree(grammar);
-}
-
-/**
- * xmlRelaxNGNewDefine:
- * @ctxt:  a Relax-NG validation context
- * @node:  the node in the input document.
- *
- * Allocate a new RelaxNG define.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGNewDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr ret;
-
-    if (ctxt->defMax == 0) {
-        ctxt->defMax = 16;
-        ctxt->defNr = 0;
-        ctxt->defTab = (xmlRelaxNGDefinePtr *)
-            xmlMalloc(ctxt->defMax * sizeof(xmlRelaxNGDefinePtr));
-        if (ctxt->defTab == NULL) {
-            xmlRngPErrMemory(ctxt, "allocating define\n");
-            return (NULL);
-        }
-    } else if (ctxt->defMax <= ctxt->defNr) {
-        xmlRelaxNGDefinePtr *tmp;
-
-        ctxt->defMax *= 2;
-        tmp = (xmlRelaxNGDefinePtr *) xmlRealloc(ctxt->defTab,
-                                                 ctxt->defMax *
-                                                 sizeof
-                                                 (xmlRelaxNGDefinePtr));
-        if (tmp == NULL) {
-            xmlRngPErrMemory(ctxt, "allocating define\n");
-            return (NULL);
-        }
-        ctxt->defTab = tmp;
-    }
-    ret = (xmlRelaxNGDefinePtr) xmlMalloc(sizeof(xmlRelaxNGDefine));
-    if (ret == NULL) {
-        xmlRngPErrMemory(ctxt, "allocating define\n");
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGDefine));
-    ctxt->defTab[ctxt->defNr++] = ret;
-    ret->node = node;
-    ret->depth = -1;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGFreePartition:
- * @partitions:  a partition set structure
- *
- * Deallocate RelaxNG partition set structures.
- */
-static void
-xmlRelaxNGFreePartition(xmlRelaxNGPartitionPtr partitions)
-{
-    xmlRelaxNGInterleaveGroupPtr group;
-    int j;
-
-    if (partitions != NULL) {
-        if (partitions->groups != NULL) {
-            for (j = 0; j < partitions->nbgroups; j++) {
-                group = partitions->groups[j];
-                if (group != NULL) {
-                    if (group->defs != NULL)
-                        xmlFree(group->defs);
-                    if (group->attrs != NULL)
-                        xmlFree(group->attrs);
-                    xmlFree(group);
-                }
-            }
-            xmlFree(partitions->groups);
-        }
-        if (partitions->triage != NULL) {
-            xmlHashFree(partitions->triage, NULL);
-        }
-        xmlFree(partitions);
-    }
-}
-
-/**
- * xmlRelaxNGFreeDefine:
- * @define:  a define structure
- *
- * Deallocate a RelaxNG define structure.
- */
-static void
-xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define)
-{
-    if (define == NULL)
-        return;
-
-    if ((define->type == XML_RELAXNG_VALUE) && (define->attrs != NULL)) {
-        xmlRelaxNGTypeLibraryPtr lib;
-
-        lib = (xmlRelaxNGTypeLibraryPtr) define->data;
-        if ((lib != NULL) && (lib->freef != NULL))
-            lib->freef(lib->data, (void *) define->attrs);
-    }
-    if ((define->data != NULL) && (define->type == XML_RELAXNG_INTERLEAVE))
-        xmlRelaxNGFreePartition((xmlRelaxNGPartitionPtr) define->data);
-    if ((define->data != NULL) && (define->type == XML_RELAXNG_CHOICE))
-        xmlHashFree((xmlHashTablePtr) define->data, NULL);
-    if (define->name != NULL)
-        xmlFree(define->name);
-    if (define->ns != NULL)
-        xmlFree(define->ns);
-    if (define->value != NULL)
-        xmlFree(define->value);
-    if (define->contModel != NULL)
-        xmlRegFreeRegexp(define->contModel);
-    xmlFree(define);
-}
-
-/**
- * xmlRelaxNGNewStates:
- * @ctxt:  a Relax-NG validation context
- * @size:  the default size for the container
- *
- * Allocate a new RelaxNG validation state container
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGStatesPtr
-xmlRelaxNGNewStates(xmlRelaxNGValidCtxtPtr ctxt, int size)
-{
-    xmlRelaxNGStatesPtr ret;
-
-    if ((ctxt != NULL) &&
-        (ctxt->freeStates != NULL) && (ctxt->freeStatesNr > 0)) {
-        ctxt->freeStatesNr--;
-        ret = ctxt->freeStates[ctxt->freeStatesNr];
-        ret->nbState = 0;
-        return (ret);
-    }
-    if (size < 16)
-        size = 16;
-
-    ret = (xmlRelaxNGStatesPtr) xmlMalloc(sizeof(xmlRelaxNGStates) +
-                                          (size -
-                                           1) *
-                                          sizeof(xmlRelaxNGValidStatePtr));
-    if (ret == NULL) {
-        xmlRngVErrMemory(ctxt, "allocating states\n");
-        return (NULL);
-    }
-    ret->nbState = 0;
-    ret->maxState = size;
-    ret->tabState = (xmlRelaxNGValidStatePtr *) xmlMalloc((size) *
-                                                          sizeof
-                                                          (xmlRelaxNGValidStatePtr));
-    if (ret->tabState == NULL) {
-        xmlRngVErrMemory(ctxt, "allocating states\n");
-        xmlFree(ret);
-        return (NULL);
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGAddStateUniq:
- * @ctxt:  a Relax-NG validation context
- * @states:  the states container
- * @state:  the validation state
- *
- * Add a RelaxNG validation state to the container without checking
- * for unicity.
- *
- * Return 1 in case of success and 0 if this is a duplicate and -1 on error
- */
-static int
-xmlRelaxNGAddStatesUniq(xmlRelaxNGValidCtxtPtr ctxt,
-                        xmlRelaxNGStatesPtr states,
-                        xmlRelaxNGValidStatePtr state)
-{
-    if (state == NULL) {
-        return (-1);
-    }
-    if (states->nbState >= states->maxState) {
-        xmlRelaxNGValidStatePtr *tmp;
-        int size;
-
-        size = states->maxState * 2;
-        tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
-                                                     (size) *
-                                                     sizeof
-                                                     (xmlRelaxNGValidStatePtr));
-        if (tmp == NULL) {
-            xmlRngVErrMemory(ctxt, "adding states\n");
-            return (-1);
-        }
-        states->tabState = tmp;
-        states->maxState = size;
-    }
-    states->tabState[states->nbState++] = state;
-    return (1);
-}
-
-/**
- * xmlRelaxNGAddState:
- * @ctxt:  a Relax-NG validation context
- * @states:  the states container
- * @state:  the validation state
- *
- * Add a RelaxNG validation state to the container
- *
- * Return 1 in case of success and 0 if this is a duplicate and -1 on error
- */
-static int
-xmlRelaxNGAddStates(xmlRelaxNGValidCtxtPtr ctxt,
-                    xmlRelaxNGStatesPtr states,
-                    xmlRelaxNGValidStatePtr state)
-{
-    int i;
-
-    if (state == NULL || states == NULL) {
-        return (-1);
-    }
-    if (states->nbState >= states->maxState) {
-        xmlRelaxNGValidStatePtr *tmp;
-        int size;
-
-        size = states->maxState * 2;
-        tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
-                                                     (size) *
-                                                     sizeof
-                                                     (xmlRelaxNGValidStatePtr));
-        if (tmp == NULL) {
-            xmlRngVErrMemory(ctxt, "adding states\n");
-            return (-1);
-        }
-        states->tabState = tmp;
-        states->maxState = size;
-    }
-    for (i = 0; i < states->nbState; i++) {
-        if (xmlRelaxNGEqualValidState(ctxt, state, states->tabState[i])) {
-            xmlRelaxNGFreeValidState(ctxt, state);
-            return (0);
-        }
-    }
-    states->tabState[states->nbState++] = state;
-    return (1);
-}
-
-/**
- * xmlRelaxNGFreeStates:
- * @ctxt:  a Relax-NG validation context
- * @states:  teh container
- *
- * Free a RelaxNG validation state container
- */
-static void
-xmlRelaxNGFreeStates(xmlRelaxNGValidCtxtPtr ctxt,
-                     xmlRelaxNGStatesPtr states)
-{
-    if (states == NULL)
-        return;
-    if ((ctxt != NULL) && (ctxt->freeStates == NULL)) {
-        ctxt->freeStatesMax = 40;
-        ctxt->freeStatesNr = 0;
-        ctxt->freeStates = (xmlRelaxNGStatesPtr *)
-            xmlMalloc(ctxt->freeStatesMax * sizeof(xmlRelaxNGStatesPtr));
-        if (ctxt->freeStates == NULL) {
-            xmlRngVErrMemory(ctxt, "storing states\n");
-        }
-    } else if ((ctxt != NULL)
-               && (ctxt->freeStatesNr >= ctxt->freeStatesMax)) {
-        xmlRelaxNGStatesPtr *tmp;
-
-        tmp = (xmlRelaxNGStatesPtr *) xmlRealloc(ctxt->freeStates,
-                                                 2 * ctxt->freeStatesMax *
-                                                 sizeof
-                                                 (xmlRelaxNGStatesPtr));
-        if (tmp == NULL) {
-            xmlRngVErrMemory(ctxt, "storing states\n");
-            xmlFree(states->tabState);
-            xmlFree(states);
-            return;
-        }
-        ctxt->freeStates = tmp;
-        ctxt->freeStatesMax *= 2;
-    }
-    if ((ctxt == NULL) || (ctxt->freeStates == NULL)) {
-        xmlFree(states->tabState);
-        xmlFree(states);
-    } else {
-        ctxt->freeStates[ctxt->freeStatesNr++] = states;
-    }
-}
-
-/**
- * xmlRelaxNGNewValidState:
- * @ctxt:  a Relax-NG validation context
- * @node:  the current node or NULL for the document
- *
- * Allocate a new RelaxNG validation state
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGValidStatePtr
-xmlRelaxNGNewValidState(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGValidStatePtr ret;
-    xmlAttrPtr attr;
-    xmlAttrPtr attrs[MAX_ATTR];
-    int nbAttrs = 0;
-    xmlNodePtr root = NULL;
-
-    if (node == NULL) {
-        root = xmlDocGetRootElement(ctxt->doc);
-        if (root == NULL)
-            return (NULL);
-    } else {
-        attr = node->properties;
-        while (attr != NULL) {
-            if (nbAttrs < MAX_ATTR)
-                attrs[nbAttrs++] = attr;
-            else
-                nbAttrs++;
-            attr = attr->next;
-        }
-    }
-    if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
-        ctxt->freeState->nbState--;
-        ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
-    } else {
-        ret =
-            (xmlRelaxNGValidStatePtr)
-            xmlMalloc(sizeof(xmlRelaxNGValidState));
-        if (ret == NULL) {
-            xmlRngVErrMemory(ctxt, "allocating states\n");
-            return (NULL);
-        }
-        memset(ret, 0, sizeof(xmlRelaxNGValidState));
-    }
-    ret->value = NULL;
-    ret->endvalue = NULL;
-    if (node == NULL) {
-        ret->node = (xmlNodePtr) ctxt->doc;
-        ret->seq = root;
-    } else {
-        ret->node = node;
-        ret->seq = node->children;
-    }
-    ret->nbAttrs = 0;
-    if (nbAttrs > 0) {
-        if (ret->attrs == NULL) {
-            if (nbAttrs < 4)
-                ret->maxAttrs = 4;
-            else
-                ret->maxAttrs = nbAttrs;
-            ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
-                                                  sizeof(xmlAttrPtr));
-            if (ret->attrs == NULL) {
-                xmlRngVErrMemory(ctxt, "allocating states\n");
-                return (ret);
-            }
-        } else if (ret->maxAttrs < nbAttrs) {
-            xmlAttrPtr *tmp;
-
-            tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, nbAttrs *
-                                            sizeof(xmlAttrPtr));
-            if (tmp == NULL) {
-                xmlRngVErrMemory(ctxt, "allocating states\n");
-                return (ret);
-            }
-            ret->attrs = tmp;
-            ret->maxAttrs = nbAttrs;
-        }
-        ret->nbAttrs = nbAttrs;
-        if (nbAttrs < MAX_ATTR) {
-            memcpy(ret->attrs, attrs, sizeof(xmlAttrPtr) * nbAttrs);
-        } else {
-            attr = node->properties;
-            nbAttrs = 0;
-            while (attr != NULL) {
-                ret->attrs[nbAttrs++] = attr;
-                attr = attr->next;
-            }
-        }
-    }
-    ret->nbAttrLeft = ret->nbAttrs;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCopyValidState:
- * @ctxt:  a Relax-NG validation context
- * @state:  a validation state
- *
- * Copy the validation state
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGValidStatePtr
-xmlRelaxNGCopyValidState(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidStatePtr state)
-{
-    xmlRelaxNGValidStatePtr ret;
-    unsigned int maxAttrs;
-    xmlAttrPtr *attrs;
-
-    if (state == NULL)
-        return (NULL);
-    if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
-        ctxt->freeState->nbState--;
-        ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
-    } else {
-        ret =
-            (xmlRelaxNGValidStatePtr)
-            xmlMalloc(sizeof(xmlRelaxNGValidState));
-        if (ret == NULL) {
-            xmlRngVErrMemory(ctxt, "allocating states\n");
-            return (NULL);
-        }
-        memset(ret, 0, sizeof(xmlRelaxNGValidState));
-    }
-    attrs = ret->attrs;
-    maxAttrs = ret->maxAttrs;
-    memcpy(ret, state, sizeof(xmlRelaxNGValidState));
-    ret->attrs = attrs;
-    ret->maxAttrs = maxAttrs;
-    if (state->nbAttrs > 0) {
-        if (ret->attrs == NULL) {
-            ret->maxAttrs = state->maxAttrs;
-            ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
-                                                  sizeof(xmlAttrPtr));
-            if (ret->attrs == NULL) {
-                xmlRngVErrMemory(ctxt, "allocating states\n");
-                ret->nbAttrs = 0;
-                return (ret);
-            }
-        } else if (ret->maxAttrs < state->nbAttrs) {
-            xmlAttrPtr *tmp;
-
-            tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, state->maxAttrs *
-                                            sizeof(xmlAttrPtr));
-            if (tmp == NULL) {
-                xmlRngVErrMemory(ctxt, "allocating states\n");
-                ret->nbAttrs = 0;
-                return (ret);
-            }
-            ret->maxAttrs = state->maxAttrs;
-            ret->attrs = tmp;
-        }
-        memcpy(ret->attrs, state->attrs,
-               state->nbAttrs * sizeof(xmlAttrPtr));
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGEqualValidState:
- * @ctxt:  a Relax-NG validation context
- * @state1:  a validation state
- * @state2:  a validation state
- *
- * Compare the validation states for equality
- *
- * Returns 1 if equald, 0 otherwise
- */
-static int
-xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                          xmlRelaxNGValidStatePtr state1,
-                          xmlRelaxNGValidStatePtr state2)
-{
-    int i;
-
-    if ((state1 == NULL) || (state2 == NULL))
-        return (0);
-    if (state1 == state2)
-        return (1);
-    if (state1->node != state2->node)
-        return (0);
-    if (state1->seq != state2->seq)
-        return (0);
-    if (state1->nbAttrLeft != state2->nbAttrLeft)
-        return (0);
-    if (state1->nbAttrs != state2->nbAttrs)
-        return (0);
-    if (state1->endvalue != state2->endvalue)
-        return (0);
-    if ((state1->value != state2->value) &&
-        (!xmlStrEqual(state1->value, state2->value)))
-        return (0);
-    for (i = 0; i < state1->nbAttrs; i++) {
-        if (state1->attrs[i] != state2->attrs[i])
-            return (0);
-    }
-    return (1);
-}
-
-/**
- * xmlRelaxNGFreeValidState:
- * @state:  a validation state structure
- *
- * Deallocate a RelaxNG validation state structure.
- */
-static void
-xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidStatePtr state)
-{
-    if (state == NULL)
-        return;
-
-    if ((ctxt != NULL) && (ctxt->freeState == NULL)) {
-        ctxt->freeState = xmlRelaxNGNewStates(ctxt, 40);
-    }
-    if ((ctxt == NULL) || (ctxt->freeState == NULL)) {
-        if (state->attrs != NULL)
-            xmlFree(state->attrs);
-        xmlFree(state);
-    } else {
-        xmlRelaxNGAddStatesUniq(ctxt, ctxt->freeState, state);
-    }
-}
-
-/************************************************************************
- *									*
- *			Semi internal functions				*
- *									*
- ************************************************************************/
-
-/**
- * xmlRelaxParserSetFlag:
- * @ctxt: a RelaxNG parser context
- * @flags: a set of flags values
- *
- * Semi private function used to pass informations to a parser context
- * which are a combination of xmlRelaxNGParserFlag .
- *
- * Returns 0 if success and -1 in case of error
- */
-int
-xmlRelaxParserSetFlag(xmlRelaxNGParserCtxtPtr ctxt, int flags)
-{
-    if (ctxt == NULL) return(-1);
-    if (flags & XML_RELAXNGP_FREE_DOC) {
-        ctxt->crng |= XML_RELAXNGP_FREE_DOC;
-	flags -= XML_RELAXNGP_FREE_DOC;
-    }
-    if (flags & XML_RELAXNGP_CRNG) {
-        ctxt->crng |= XML_RELAXNGP_CRNG;
-	flags -= XML_RELAXNGP_CRNG;
-    }
-    if (flags != 0) return(-1);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *			Document functions				*
- *									*
- ************************************************************************/
-static xmlDocPtr xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt,
-                                      xmlDocPtr doc);
-
-/**
- * xmlRelaxNGIncludePush:
- * @ctxt:  the parser context
- * @value:  the element doc
- *
- * Pushes a new include on top of the include stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGIncludePush(xmlRelaxNGParserCtxtPtr ctxt,
-                      xmlRelaxNGIncludePtr value)
-{
-    if (ctxt->incTab == NULL) {
-        ctxt->incMax = 4;
-        ctxt->incNr = 0;
-        ctxt->incTab =
-            (xmlRelaxNGIncludePtr *) xmlMalloc(ctxt->incMax *
-                                               sizeof(ctxt->incTab[0]));
-        if (ctxt->incTab == NULL) {
-            xmlRngPErrMemory(ctxt, "allocating include\n");
-            return (0);
-        }
-    }
-    if (ctxt->incNr >= ctxt->incMax) {
-        ctxt->incMax *= 2;
-        ctxt->incTab =
-            (xmlRelaxNGIncludePtr *) xmlRealloc(ctxt->incTab,
-                                                ctxt->incMax *
-                                                sizeof(ctxt->incTab[0]));
-        if (ctxt->incTab == NULL) {
-            xmlRngPErrMemory(ctxt, "allocating include\n");
-            return (0);
-        }
-    }
-    ctxt->incTab[ctxt->incNr] = value;
-    ctxt->inc = value;
-    return (ctxt->incNr++);
-}
-
-/**
- * xmlRelaxNGIncludePop:
- * @ctxt: the parser context
- *
- * Pops the top include from the include stack
- *
- * Returns the include just removed
- */
-static xmlRelaxNGIncludePtr
-xmlRelaxNGIncludePop(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    xmlRelaxNGIncludePtr ret;
-
-    if (ctxt->incNr <= 0)
-        return (NULL);
-    ctxt->incNr--;
-    if (ctxt->incNr > 0)
-        ctxt->inc = ctxt->incTab[ctxt->incNr - 1];
-    else
-        ctxt->inc = NULL;
-    ret = ctxt->incTab[ctxt->incNr];
-    ctxt->incTab[ctxt->incNr] = NULL;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGRemoveRedefine:
- * @ctxt: the parser context
- * @URL:  the normalized URL
- * @target:  the included target
- * @name:  the define name to eliminate
- *
- * Applies the elimination algorithm of 4.7
- *
- * Returns 0 in case of error, 1 in case of success.
- */
-static int
-xmlRelaxNGRemoveRedefine(xmlRelaxNGParserCtxtPtr ctxt,
-                         const xmlChar * URL ATTRIBUTE_UNUSED,
-                         xmlNodePtr target, const xmlChar * name)
-{
-    int found = 0;
-    xmlNodePtr tmp, tmp2;
-    xmlChar *name2;
-
-#ifdef DEBUG_INCLUDE
-    if (name == NULL)
-        xmlGenericError(xmlGenericErrorContext,
-                        "Elimination of <include> start from %s\n", URL);
-    else
-        xmlGenericError(xmlGenericErrorContext,
-                        "Elimination of <include> define %s from %s\n",
-                        name, URL);
-#endif
-    tmp = target;
-    while (tmp != NULL) {
-        tmp2 = tmp->next;
-        if ((name == NULL) && (IS_RELAXNG(tmp, "start"))) {
-            found = 1;
-            xmlUnlinkNode(tmp);
-            xmlFreeNode(tmp);
-        } else if ((name != NULL) && (IS_RELAXNG(tmp, "define"))) {
-            name2 = xmlGetProp(tmp, BAD_CAST "name");
-            xmlRelaxNGNormExtSpace(name2);
-            if (name2 != NULL) {
-                if (xmlStrEqual(name, name2)) {
-                    found = 1;
-                    xmlUnlinkNode(tmp);
-                    xmlFreeNode(tmp);
-                }
-                xmlFree(name2);
-            }
-        } else if (IS_RELAXNG(tmp, "include")) {
-            xmlChar *href = NULL;
-            xmlRelaxNGDocumentPtr inc = tmp->psvi;
-
-            if ((inc != NULL) && (inc->doc != NULL) &&
-                (inc->doc->children != NULL)) {
-
-                if (xmlStrEqual
-                    (inc->doc->children->name, BAD_CAST "grammar")) {
-#ifdef DEBUG_INCLUDE
-                    href = xmlGetProp(tmp, BAD_CAST "href");
-#endif
-                    if (xmlRelaxNGRemoveRedefine(ctxt, href,
-                                                 xmlDocGetRootElement(inc->doc)->children,
-                                                 name) == 1) {
-                        found = 1;
-                    }
-#ifdef DEBUG_INCLUDE
-                    if (href != NULL)
-                        xmlFree(href);
-#endif
-                }
-            }
-        }
-        tmp = tmp2;
-    }
-    return (found);
-}
-
-/**
- * xmlRelaxNGLoadInclude:
- * @ctxt: the parser context
- * @URL:  the normalized URL
- * @node: the include node.
- * @ns:  the namespace passed from the context.
- *
- * First lookup if the document is already loaded into the parser context,
- * check against recursion. If not found the resource is loaded and
- * the content is preprocessed before being returned back to the caller.
- *
- * Returns the xmlRelaxNGIncludePtr or NULL in case of error
- */
-static xmlRelaxNGIncludePtr
-xmlRelaxNGLoadInclude(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * URL,
-                      xmlNodePtr node, const xmlChar * ns)
-{
-    xmlRelaxNGIncludePtr ret = NULL;
-    xmlDocPtr doc;
-    int i;
-    xmlNodePtr root, cur;
-
-#ifdef DEBUG_INCLUDE
-    xmlGenericError(xmlGenericErrorContext,
-                    "xmlRelaxNGLoadInclude(%s)\n", URL);
-#endif
-
-    /*
-     * check against recursion in the stack
-     */
-    for (i = 0; i < ctxt->incNr; i++) {
-        if (xmlStrEqual(ctxt->incTab[i]->href, URL)) {
-            xmlRngPErr(ctxt, NULL, XML_RNGP_INCLUDE_RECURSE,
-                       "Detected an Include recursion for %s\n", URL,
-                       NULL);
-            return (NULL);
-        }
-    }
-
-    /*
-     * load the document
-     */
-    doc = xmlReadFile((const char *) URL,NULL,0);
-    if (doc == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_PARSE_ERROR,
-                   "xmlRelaxNG: could not load %s\n", URL, NULL);
-        return (NULL);
-    }
-#ifdef DEBUG_INCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Parsed %s Okay\n", URL);
-#endif
-
-    /*
-     * Allocate the document structures and register it first.
-     */
-    ret = (xmlRelaxNGIncludePtr) xmlMalloc(sizeof(xmlRelaxNGInclude));
-    if (ret == NULL) {
-        xmlRngPErrMemory(ctxt, "allocating include\n");
-        xmlFreeDoc(doc);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGInclude));
-    ret->doc = doc;
-    ret->href = xmlStrdup(URL);
-    ret->next = ctxt->includes;
-    ctxt->includes = ret;
-
-    /*
-     * transmit the ns if needed
-     */
-    if (ns != NULL) {
-        root = xmlDocGetRootElement(doc);
-        if (root != NULL) {
-            if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
-                xmlSetProp(root, BAD_CAST "ns", ns);
-            }
-        }
-    }
-
-    /*
-     * push it on the stack
-     */
-    xmlRelaxNGIncludePush(ctxt, ret);
-
-    /*
-     * Some preprocessing of the document content, this include recursing
-     * in the include stack.
-     */
-#ifdef DEBUG_INCLUDE
-    xmlGenericError(xmlGenericErrorContext, "cleanup of %s\n", URL);
-#endif
-
-    doc = xmlRelaxNGCleanupDoc(ctxt, doc);
-    if (doc == NULL) {
-        ctxt->inc = NULL;
-        return (NULL);
-    }
-
-    /*
-     * Pop up the include from the stack
-     */
-    xmlRelaxNGIncludePop(ctxt);
-
-#ifdef DEBUG_INCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Checking of %s\n", URL);
-#endif
-    /*
-     * Check that the top element is a grammar
-     */
-    root = xmlDocGetRootElement(doc);
-    if (root == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_EMPTY,
-                   "xmlRelaxNG: included document is empty %s\n", URL,
-                   NULL);
-        return (NULL);
-    }
-    if (!IS_RELAXNG(root, "grammar")) {
-        xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
-                   "xmlRelaxNG: included document %s root is not a grammar\n",
-                   URL, NULL);
-        return (NULL);
-    }
-
-    /*
-     * Elimination of redefined rules in the include.
-     */
-    cur = node->children;
-    while (cur != NULL) {
-        if (IS_RELAXNG(cur, "start")) {
-            int found = 0;
-
-            found =
-                xmlRelaxNGRemoveRedefine(ctxt, URL, root->children, NULL);
-            if (!found) {
-                xmlRngPErr(ctxt, node, XML_RNGP_START_MISSING,
-                           "xmlRelaxNG: include %s has a start but not the included grammar\n",
-                           URL, NULL);
-            }
-        } else if (IS_RELAXNG(cur, "define")) {
-            xmlChar *name;
-
-            name = xmlGetProp(cur, BAD_CAST "name");
-            if (name == NULL) {
-                xmlRngPErr(ctxt, node, XML_RNGP_NAME_MISSING,
-                           "xmlRelaxNG: include %s has define without name\n",
-                           URL, NULL);
-            } else {
-                int found;
-
-                xmlRelaxNGNormExtSpace(name);
-                found = xmlRelaxNGRemoveRedefine(ctxt, URL,
-                                                 root->children, name);
-                if (!found) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_MISSING,
-                               "xmlRelaxNG: include %s has a define %s but not the included grammar\n",
-                               URL, name);
-                }
-                xmlFree(name);
-            }
-        }
-        cur = cur->next;
-    }
-
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidErrorPush:
- * @ctxt:  the validation context
- * @err:  the error code
- * @arg1:  the first string argument
- * @arg2:  the second string argument
- * @dup:  arg need to be duplicated
- *
- * Pushes a new error on top of the error stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGValidErrorPush(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidErr err, const xmlChar * arg1,
-                         const xmlChar * arg2, int dup)
-{
-    xmlRelaxNGValidErrorPtr cur;
-
-#ifdef DEBUG_ERROR
-    xmlGenericError(xmlGenericErrorContext,
-                    "Pushing error %d at %d on stack\n", err, ctxt->errNr);
-#endif
-    if (ctxt->errTab == NULL) {
-        ctxt->errMax = 8;
-        ctxt->errNr = 0;
-        ctxt->errTab =
-            (xmlRelaxNGValidErrorPtr) xmlMalloc(ctxt->errMax *
-                                                sizeof
-                                                (xmlRelaxNGValidError));
-        if (ctxt->errTab == NULL) {
-            xmlRngVErrMemory(ctxt, "pushing error\n");
-            return (0);
-        }
-        ctxt->err = NULL;
-    }
-    if (ctxt->errNr >= ctxt->errMax) {
-        ctxt->errMax *= 2;
-        ctxt->errTab =
-            (xmlRelaxNGValidErrorPtr) xmlRealloc(ctxt->errTab,
-                                                 ctxt->errMax *
-                                                 sizeof
-                                                 (xmlRelaxNGValidError));
-        if (ctxt->errTab == NULL) {
-            xmlRngVErrMemory(ctxt, "pushing error\n");
-            return (0);
-        }
-        ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
-    }
-    if ((ctxt->err != NULL) && (ctxt->state != NULL) &&
-        (ctxt->err->node == ctxt->state->node) && (ctxt->err->err == err))
-        return (ctxt->errNr);
-    cur = &ctxt->errTab[ctxt->errNr];
-    cur->err = err;
-    if (dup) {
-        cur->arg1 = xmlStrdup(arg1);
-        cur->arg2 = xmlStrdup(arg2);
-        cur->flags = ERROR_IS_DUP;
-    } else {
-        cur->arg1 = arg1;
-        cur->arg2 = arg2;
-        cur->flags = 0;
-    }
-    if (ctxt->state != NULL) {
-        cur->node = ctxt->state->node;
-        cur->seq = ctxt->state->seq;
-    } else {
-        cur->node = NULL;
-        cur->seq = NULL;
-    }
-    ctxt->err = cur;
-    return (ctxt->errNr++);
-}
-
-/**
- * xmlRelaxNGValidErrorPop:
- * @ctxt: the validation context
- *
- * Pops the top error from the error stack
- */
-static void
-xmlRelaxNGValidErrorPop(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    xmlRelaxNGValidErrorPtr cur;
-
-    if (ctxt->errNr <= 0) {
-        ctxt->err = NULL;
-        return;
-    }
-    ctxt->errNr--;
-    if (ctxt->errNr > 0)
-        ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
-    else
-        ctxt->err = NULL;
-    cur = &ctxt->errTab[ctxt->errNr];
-    if (cur->flags & ERROR_IS_DUP) {
-        if (cur->arg1 != NULL)
-            xmlFree((xmlChar *) cur->arg1);
-        cur->arg1 = NULL;
-        if (cur->arg2 != NULL)
-            xmlFree((xmlChar *) cur->arg2);
-        cur->arg2 = NULL;
-        cur->flags = 0;
-    }
-}
-
-/**
- * xmlRelaxNGDocumentPush:
- * @ctxt:  the parser context
- * @value:  the element doc
- *
- * Pushes a new doc on top of the doc stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGDocumentPush(xmlRelaxNGParserCtxtPtr ctxt,
-                       xmlRelaxNGDocumentPtr value)
-{
-    if (ctxt->docTab == NULL) {
-        ctxt->docMax = 4;
-        ctxt->docNr = 0;
-        ctxt->docTab =
-            (xmlRelaxNGDocumentPtr *) xmlMalloc(ctxt->docMax *
-                                                sizeof(ctxt->docTab[0]));
-        if (ctxt->docTab == NULL) {
-            xmlRngPErrMemory(ctxt, "adding document\n");
-            return (0);
-        }
-    }
-    if (ctxt->docNr >= ctxt->docMax) {
-        ctxt->docMax *= 2;
-        ctxt->docTab =
-            (xmlRelaxNGDocumentPtr *) xmlRealloc(ctxt->docTab,
-                                                 ctxt->docMax *
-                                                 sizeof(ctxt->docTab[0]));
-        if (ctxt->docTab == NULL) {
-            xmlRngPErrMemory(ctxt, "adding document\n");
-            return (0);
-        }
-    }
-    ctxt->docTab[ctxt->docNr] = value;
-    ctxt->doc = value;
-    return (ctxt->docNr++);
-}
-
-/**
- * xmlRelaxNGDocumentPop:
- * @ctxt: the parser context
- *
- * Pops the top doc from the doc stack
- *
- * Returns the doc just removed
- */
-static xmlRelaxNGDocumentPtr
-xmlRelaxNGDocumentPop(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    xmlRelaxNGDocumentPtr ret;
-
-    if (ctxt->docNr <= 0)
-        return (NULL);
-    ctxt->docNr--;
-    if (ctxt->docNr > 0)
-        ctxt->doc = ctxt->docTab[ctxt->docNr - 1];
-    else
-        ctxt->doc = NULL;
-    ret = ctxt->docTab[ctxt->docNr];
-    ctxt->docTab[ctxt->docNr] = NULL;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGLoadExternalRef:
- * @ctxt: the parser context
- * @URL:  the normalized URL
- * @ns:  the inherited ns if any
- *
- * First lookup if the document is already loaded into the parser context,
- * check against recursion. If not found the resource is loaded and
- * the content is preprocessed before being returned back to the caller.
- *
- * Returns the xmlRelaxNGDocumentPtr or NULL in case of error
- */
-static xmlRelaxNGDocumentPtr
-xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt,
-                          const xmlChar * URL, const xmlChar * ns)
-{
-    xmlRelaxNGDocumentPtr ret = NULL;
-    xmlDocPtr doc;
-    xmlNodePtr root;
-    int i;
-
-    /*
-     * check against recursion in the stack
-     */
-    for (i = 0; i < ctxt->docNr; i++) {
-        if (xmlStrEqual(ctxt->docTab[i]->href, URL)) {
-            xmlRngPErr(ctxt, NULL, XML_RNGP_EXTERNALREF_RECURSE,
-                       "Detected an externalRef recursion for %s\n", URL,
-                       NULL);
-            return (NULL);
-        }
-    }
-
-    /*
-     * load the document
-     */
-    doc = xmlReadFile((const char *) URL,NULL,0);
-    if (doc == NULL) {
-        xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
-                   "xmlRelaxNG: could not load %s\n", URL, NULL);
-        return (NULL);
-    }
-
-    /*
-     * Allocate the document structures and register it first.
-     */
-    ret = (xmlRelaxNGDocumentPtr) xmlMalloc(sizeof(xmlRelaxNGDocument));
-    if (ret == NULL) {
-        xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_ERR_NO_MEMORY,
-                   "xmlRelaxNG: allocate memory for doc %s\n", URL, NULL);
-        xmlFreeDoc(doc);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGDocument));
-    ret->doc = doc;
-    ret->href = xmlStrdup(URL);
-    ret->next = ctxt->documents;
-    ret->externalRef = 1;
-    ctxt->documents = ret;
-
-    /*
-     * transmit the ns if needed
-     */
-    if (ns != NULL) {
-        root = xmlDocGetRootElement(doc);
-        if (root != NULL) {
-            if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
-                xmlSetProp(root, BAD_CAST "ns", ns);
-            }
-        }
-    }
-
-    /*
-     * push it on the stack and register it in the hash table
-     */
-    xmlRelaxNGDocumentPush(ctxt, ret);
-
-    /*
-     * Some preprocessing of the document content
-     */
-    doc = xmlRelaxNGCleanupDoc(ctxt, doc);
-    if (doc == NULL) {
-        ctxt->doc = NULL;
-        return (NULL);
-    }
-
-    xmlRelaxNGDocumentPop(ctxt);
-
-    return (ret);
-}
-
-/************************************************************************
- *									*
- *			Error functions					*
- *									*
- ************************************************************************/
-
-#define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL, 0);
-#define VALID_ERR2(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 0);
-#define VALID_ERR3(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 0);
-#define VALID_ERR2P(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 1);
-#define VALID_ERR3P(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 1);
-
-static const char *
-xmlRelaxNGDefName(xmlRelaxNGDefinePtr def)
-{
-    if (def == NULL)
-        return ("none");
-    switch (def->type) {
-        case XML_RELAXNG_EMPTY:
-            return ("empty");
-        case XML_RELAXNG_NOT_ALLOWED:
-            return ("notAllowed");
-        case XML_RELAXNG_EXCEPT:
-            return ("except");
-        case XML_RELAXNG_TEXT:
-            return ("text");
-        case XML_RELAXNG_ELEMENT:
-            return ("element");
-        case XML_RELAXNG_DATATYPE:
-            return ("datatype");
-        case XML_RELAXNG_VALUE:
-            return ("value");
-        case XML_RELAXNG_LIST:
-            return ("list");
-        case XML_RELAXNG_ATTRIBUTE:
-            return ("attribute");
-        case XML_RELAXNG_DEF:
-            return ("def");
-        case XML_RELAXNG_REF:
-            return ("ref");
-        case XML_RELAXNG_EXTERNALREF:
-            return ("externalRef");
-        case XML_RELAXNG_PARENTREF:
-            return ("parentRef");
-        case XML_RELAXNG_OPTIONAL:
-            return ("optional");
-        case XML_RELAXNG_ZEROORMORE:
-            return ("zeroOrMore");
-        case XML_RELAXNG_ONEORMORE:
-            return ("oneOrMore");
-        case XML_RELAXNG_CHOICE:
-            return ("choice");
-        case XML_RELAXNG_GROUP:
-            return ("group");
-        case XML_RELAXNG_INTERLEAVE:
-            return ("interleave");
-        case XML_RELAXNG_START:
-            return ("start");
-        case XML_RELAXNG_NOOP:
-            return ("noop");
-        case XML_RELAXNG_PARAM:
-            return ("param");
-    }
-    return ("unknown");
-}
-
-/**
- * xmlRelaxNGGetErrorString:
- * @err:  the error code
- * @arg1:  the first string argument
- * @arg2:  the second string argument
- *
- * computes a formatted error string for the given error code and args
- *
- * Returns the error string, it must be deallocated by the caller
- */
-static xmlChar *
-xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar * arg1,
-                         const xmlChar * arg2)
-{
-    char msg[1000];
-    xmlChar *result;
-
-    if (arg1 == NULL)
-        arg1 = BAD_CAST "";
-    if (arg2 == NULL)
-        arg2 = BAD_CAST "";
-
-    msg[0] = 0;
-    switch (err) {
-        case XML_RELAXNG_OK:
-            return (NULL);
-        case XML_RELAXNG_ERR_MEMORY:
-            return (xmlCharStrdup("out of memory\n"));
-        case XML_RELAXNG_ERR_TYPE:
-            snprintf(msg, 1000, "failed to validate type %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_TYPEVAL:
-            snprintf(msg, 1000, "Type %s doesn't allow value '%s'\n", arg1,
-                     arg2);
-            break;
-        case XML_RELAXNG_ERR_DUPID:
-            snprintf(msg, 1000, "ID %s redefined\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_TYPECMP:
-            snprintf(msg, 1000, "failed to compare type %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_NOSTATE:
-            return (xmlCharStrdup("Internal error: no state\n"));
-        case XML_RELAXNG_ERR_NODEFINE:
-            return (xmlCharStrdup("Internal error: no define\n"));
-        case XML_RELAXNG_ERR_INTERNAL:
-            snprintf(msg, 1000, "Internal error: %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_LISTEXTRA:
-            snprintf(msg, 1000, "Extra data in list: %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_INTERNODATA:
-            return (xmlCharStrdup
-                    ("Internal: interleave block has no data\n"));
-        case XML_RELAXNG_ERR_INTERSEQ:
-            return (xmlCharStrdup("Invalid sequence in interleave\n"));
-        case XML_RELAXNG_ERR_INTEREXTRA:
-            snprintf(msg, 1000, "Extra element %s in interleave\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_ELEMNAME:
-            snprintf(msg, 1000, "Expecting element %s, got %s\n", arg1,
-                     arg2);
-            break;
-        case XML_RELAXNG_ERR_ELEMNONS:
-            snprintf(msg, 1000, "Expecting a namespace for element %s\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_ELEMWRONGNS:
-            snprintf(msg, 1000,
-                     "Element %s has wrong namespace: expecting %s\n", arg1,
-                     arg2);
-            break;
-        case XML_RELAXNG_ERR_ELEMWRONG:
-            snprintf(msg, 1000, "Did not expect element %s there\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_TEXTWRONG:
-            snprintf(msg, 1000,
-                     "Did not expect text in element %s content\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_ELEMEXTRANS:
-            snprintf(msg, 1000, "Expecting no namespace for element %s\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_ELEMNOTEMPTY:
-            snprintf(msg, 1000, "Expecting element %s to be empty\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_NOELEM:
-            snprintf(msg, 1000, "Expecting an element %s, got nothing\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_NOTELEM:
-            return (xmlCharStrdup("Expecting an element got text\n"));
-        case XML_RELAXNG_ERR_ATTRVALID:
-            snprintf(msg, 1000, "Element %s failed to validate attributes\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_CONTENTVALID:
-            snprintf(msg, 1000, "Element %s failed to validate content\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_EXTRACONTENT:
-            snprintf(msg, 1000, "Element %s has extra content: %s\n",
-                     arg1, arg2);
-            break;
-        case XML_RELAXNG_ERR_INVALIDATTR:
-            snprintf(msg, 1000, "Invalid attribute %s for element %s\n",
-                     arg1, arg2);
-            break;
-        case XML_RELAXNG_ERR_LACKDATA:
-            snprintf(msg, 1000, "Datatype element %s contains no data\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_DATAELEM:
-            snprintf(msg, 1000, "Datatype element %s has child elements\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_VALELEM:
-            snprintf(msg, 1000, "Value element %s has child elements\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_LISTELEM:
-            snprintf(msg, 1000, "List element %s has child elements\n",
-                     arg1);
-            break;
-        case XML_RELAXNG_ERR_DATATYPE:
-            snprintf(msg, 1000, "Error validating datatype %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_VALUE:
-            snprintf(msg, 1000, "Error validating value %s\n", arg1);
-            break;
-        case XML_RELAXNG_ERR_LIST:
-            return (xmlCharStrdup("Error validating list\n"));
-        case XML_RELAXNG_ERR_NOGRAMMAR:
-            return (xmlCharStrdup("No top grammar defined\n"));
-        case XML_RELAXNG_ERR_EXTRADATA:
-            return (xmlCharStrdup("Extra data in the document\n"));
-        default:
-            return (xmlCharStrdup("Unknown error !\n"));
-    }
-    if (msg[0] == 0) {
-        snprintf(msg, 1000, "Unknown error code %d\n", err);
-    }
-    msg[1000 - 1] = 0;
-    result = xmlCharStrdup(msg);
-    return (xmlEscapeFormatString(&result));
-}
-
-/**
- * xmlRelaxNGShowValidError:
- * @ctxt:  the validation context
- * @err:  the error number
- * @node:  the node
- * @child:  the node child generating the problem.
- * @arg1:  the first argument
- * @arg2:  the second argument
- *
- * Show a validation error.
- */
-static void
-xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidErr err, xmlNodePtr node,
-                         xmlNodePtr child, const xmlChar * arg1,
-                         const xmlChar * arg2)
-{
-    xmlChar *msg;
-
-    if (ctxt->flags & FLAGS_NOERROR)
-        return;
-
-#ifdef DEBUG_ERROR
-    xmlGenericError(xmlGenericErrorContext, "Show error %d\n", err);
-#endif
-    msg = xmlRelaxNGGetErrorString(err, arg1, arg2);
-    if (msg == NULL)
-        return;
-
-    if (ctxt->errNo == XML_RELAXNG_OK)
-        ctxt->errNo = err;
-    xmlRngVErr(ctxt, (child == NULL ? node : child), err,
-               (const char *) msg, arg1, arg2);
-    xmlFree(msg);
-}
-
-/**
- * xmlRelaxNGPopErrors:
- * @ctxt:  the validation context
- * @level:  the error level in the stack
- *
- * pop and discard all errors until the given level is reached
- */
-static void
-xmlRelaxNGPopErrors(xmlRelaxNGValidCtxtPtr ctxt, int level)
-{
-    int i;
-    xmlRelaxNGValidErrorPtr err;
-
-#ifdef DEBUG_ERROR
-    xmlGenericError(xmlGenericErrorContext,
-                    "Pop errors till level %d\n", level);
-#endif
-    for (i = level; i < ctxt->errNr; i++) {
-        err = &ctxt->errTab[i];
-        if (err->flags & ERROR_IS_DUP) {
-            if (err->arg1 != NULL)
-                xmlFree((xmlChar *) err->arg1);
-            err->arg1 = NULL;
-            if (err->arg2 != NULL)
-                xmlFree((xmlChar *) err->arg2);
-            err->arg2 = NULL;
-            err->flags = 0;
-        }
-    }
-    ctxt->errNr = level;
-    if (ctxt->errNr <= 0)
-        ctxt->err = NULL;
-}
-
-/**
- * xmlRelaxNGDumpValidError:
- * @ctxt:  the validation context
- *
- * Show all validation error over a given index.
- */
-static void
-xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    int i, j, k;
-    xmlRelaxNGValidErrorPtr err, dup;
-
-#ifdef DEBUG_ERROR
-    xmlGenericError(xmlGenericErrorContext,
-                    "Dumping error stack %d errors\n", ctxt->errNr);
-#endif
-    for (i = 0, k = 0; i < ctxt->errNr; i++) {
-        err = &ctxt->errTab[i];
-        if (k < MAX_ERROR) {
-            for (j = 0; j < i; j++) {
-                dup = &ctxt->errTab[j];
-                if ((err->err == dup->err) && (err->node == dup->node) &&
-                    (xmlStrEqual(err->arg1, dup->arg1)) &&
-                    (xmlStrEqual(err->arg2, dup->arg2))) {
-                    goto skip;
-                }
-            }
-            xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
-                                     err->arg1, err->arg2);
-            k++;
-        }
-      skip:
-        if (err->flags & ERROR_IS_DUP) {
-            if (err->arg1 != NULL)
-                xmlFree((xmlChar *) err->arg1);
-            err->arg1 = NULL;
-            if (err->arg2 != NULL)
-                xmlFree((xmlChar *) err->arg2);
-            err->arg2 = NULL;
-            err->flags = 0;
-        }
-    }
-    ctxt->errNr = 0;
-}
-
-/**
- * xmlRelaxNGAddValidError:
- * @ctxt:  the validation context
- * @err:  the error number
- * @arg1:  the first argument
- * @arg2:  the second argument
- * @dup:  need to dup the args
- *
- * Register a validation error, either generating it if it's sure
- * or stacking it for later handling if unsure.
- */
-static void
-xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
-                        xmlRelaxNGValidErr err, const xmlChar * arg1,
-                        const xmlChar * arg2, int dup)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->flags & FLAGS_NOERROR)
-        return;
-
-#ifdef DEBUG_ERROR
-    xmlGenericError(xmlGenericErrorContext, "Adding error %d\n", err);
-#endif
-    /*
-     * generate the error directly
-     */
-    if (((ctxt->flags & FLAGS_IGNORABLE) == 0) ||
-	 (ctxt->flags & FLAGS_NEGATIVE)) {
-        xmlNodePtr node, seq;
-
-        /*
-         * Flush first any stacked error which might be the
-         * real cause of the problem.
-         */
-        if (ctxt->errNr != 0)
-            xmlRelaxNGDumpValidError(ctxt);
-        if (ctxt->state != NULL) {
-            node = ctxt->state->node;
-            seq = ctxt->state->seq;
-        } else {
-            node = seq = NULL;
-        }
-        if ((node == NULL) && (seq == NULL)) {
-            node = ctxt->pnode;
-        }
-        xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2);
-    }
-    /*
-     * Stack the error for later processing if needed
-     */
-    else {
-        xmlRelaxNGValidErrorPush(ctxt, err, arg1, arg2, dup);
-    }
-}
-
-
-/************************************************************************
- *									*
- *			Type library hooks				*
- *									*
- ************************************************************************/
-static xmlChar *xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt,
-                                    const xmlChar * str);
-
-/**
- * xmlRelaxNGSchemaTypeHave:
- * @data:  data needed for the library
- * @type:  the type name
- *
- * Check if the given type is provided by
- * the W3C XMLSchema Datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeHave(void *data ATTRIBUTE_UNUSED, const xmlChar * type)
-{
-    xmlSchemaTypePtr typ;
-
-    if (type == NULL)
-        return (-1);
-    typ = xmlSchemaGetPredefinedType(type,
-                                     BAD_CAST
-                                     "http://www.w3.org/2001/XMLSchema");
-    if (typ == NULL)
-        return (0);
-    return (1);
-}
-
-/**
- * xmlRelaxNGSchemaTypeCheck:
- * @data:  data needed for the library
- * @type:  the type name
- * @value:  the value to check
- * @node:  the node
- *
- * Check if the given type and value are validated by
- * the W3C XMLSchema Datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeCheck(void *data ATTRIBUTE_UNUSED,
-                          const xmlChar * type,
-                          const xmlChar * value,
-                          void **result, xmlNodePtr node)
-{
-    xmlSchemaTypePtr typ;
-    int ret;
-
-    if ((type == NULL) || (value == NULL))
-        return (-1);
-    typ = xmlSchemaGetPredefinedType(type,
-                                     BAD_CAST
-                                     "http://www.w3.org/2001/XMLSchema");
-    if (typ == NULL)
-        return (-1);
-    ret = xmlSchemaValPredefTypeNode(typ, value,
-                                     (xmlSchemaValPtr *) result, node);
-    if (ret == 2)               /* special ID error code */
-        return (2);
-    if (ret == 0)
-        return (1);
-    if (ret > 0)
-        return (0);
-    return (-1);
-}
-
-/**
- * xmlRelaxNGSchemaFacetCheck:
- * @data:  data needed for the library
- * @type:  the type name
- * @facet:  the facet name
- * @val:  the facet value
- * @strval:  the string value
- * @value:  the value to check
- *
- * Function provided by a type library to check a value facet
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaFacetCheck(void *data ATTRIBUTE_UNUSED,
-                           const xmlChar * type, const xmlChar * facetname,
-                           const xmlChar * val, const xmlChar * strval,
-                           void *value)
-{
-    xmlSchemaFacetPtr facet;
-    xmlSchemaTypePtr typ;
-    int ret;
-
-    if ((type == NULL) || (strval == NULL))
-        return (-1);
-    typ = xmlSchemaGetPredefinedType(type,
-                                     BAD_CAST
-                                     "http://www.w3.org/2001/XMLSchema");
-    if (typ == NULL)
-        return (-1);
-
-    facet = xmlSchemaNewFacet();
-    if (facet == NULL)
-        return (-1);
-
-    if (xmlStrEqual(facetname, BAD_CAST "minInclusive")) {
-        facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
-    } else if (xmlStrEqual(facetname, BAD_CAST "minExclusive")) {
-        facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
-    } else if (xmlStrEqual(facetname, BAD_CAST "maxInclusive")) {
-        facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
-    } else if (xmlStrEqual(facetname, BAD_CAST "maxExclusive")) {
-        facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
-    } else if (xmlStrEqual(facetname, BAD_CAST "totalDigits")) {
-        facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
-    } else if (xmlStrEqual(facetname, BAD_CAST "fractionDigits")) {
-        facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
-    } else if (xmlStrEqual(facetname, BAD_CAST "pattern")) {
-        facet->type = XML_SCHEMA_FACET_PATTERN;
-    } else if (xmlStrEqual(facetname, BAD_CAST "enumeration")) {
-        facet->type = XML_SCHEMA_FACET_ENUMERATION;
-    } else if (xmlStrEqual(facetname, BAD_CAST "whiteSpace")) {
-        facet->type = XML_SCHEMA_FACET_WHITESPACE;
-    } else if (xmlStrEqual(facetname, BAD_CAST "length")) {
-        facet->type = XML_SCHEMA_FACET_LENGTH;
-    } else if (xmlStrEqual(facetname, BAD_CAST "maxLength")) {
-        facet->type = XML_SCHEMA_FACET_MAXLENGTH;
-    } else if (xmlStrEqual(facetname, BAD_CAST "minLength")) {
-        facet->type = XML_SCHEMA_FACET_MINLENGTH;
-    } else {
-        xmlSchemaFreeFacet(facet);
-        return (-1);
-    }
-    facet->value = val;
-    ret = xmlSchemaCheckFacet(facet, typ, NULL, type);
-    if (ret != 0) {
-        xmlSchemaFreeFacet(facet);
-        return (-1);
-    }
-    ret = xmlSchemaValidateFacet(typ, facet, strval, value);
-    xmlSchemaFreeFacet(facet);
-    if (ret != 0)
-        return (-1);
-    return (0);
-}
-
-/**
- * xmlRelaxNGSchemaFreeValue:
- * @data:  data needed for the library
- * @value:  the value to free
- *
- * Function provided by a type library to free a Schemas value
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static void
-xmlRelaxNGSchemaFreeValue(void *data ATTRIBUTE_UNUSED, void *value)
-{
-    xmlSchemaFreeValue(value);
-}
-
-/**
- * xmlRelaxNGSchemaTypeCompare:
- * @data:  data needed for the library
- * @type:  the type name
- * @value1:  the first value
- * @value2:  the second value
- *
- * Compare two values for equality accordingly a type from the W3C XMLSchema
- * Datatype library.
- *
- * Returns 1 if equal, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeCompare(void *data ATTRIBUTE_UNUSED,
-                            const xmlChar * type,
-                            const xmlChar * value1,
-                            xmlNodePtr ctxt1,
-                            void *comp1,
-                            const xmlChar * value2, xmlNodePtr ctxt2)
-{
-    int ret;
-    xmlSchemaTypePtr typ;
-    xmlSchemaValPtr res1 = NULL, res2 = NULL;
-
-    if ((type == NULL) || (value1 == NULL) || (value2 == NULL))
-        return (-1);
-    typ = xmlSchemaGetPredefinedType(type,
-                                     BAD_CAST
-                                     "http://www.w3.org/2001/XMLSchema");
-    if (typ == NULL)
-        return (-1);
-    if (comp1 == NULL) {
-        ret = xmlSchemaValPredefTypeNode(typ, value1, &res1, ctxt1);
-        if (ret != 0)
-            return (-1);
-        if (res1 == NULL)
-            return (-1);
-    } else {
-        res1 = (xmlSchemaValPtr) comp1;
-    }
-    ret = xmlSchemaValPredefTypeNode(typ, value2, &res2, ctxt2);
-    if (ret != 0) {
-	if (res1 != (xmlSchemaValPtr) comp1)
-	    xmlSchemaFreeValue(res1);
-        return (-1);
-    }
-    ret = xmlSchemaCompareValues(res1, res2);
-    if (res1 != (xmlSchemaValPtr) comp1)
-        xmlSchemaFreeValue(res1);
-    xmlSchemaFreeValue(res2);
-    if (ret == -2)
-        return (-1);
-    if (ret == 0)
-        return (1);
-    return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeHave:
- * @data:  data needed for the library
- * @type:  the type name
- *
- * Check if the given type is provided by
- * the default datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeHave(void *data ATTRIBUTE_UNUSED,
-                          const xmlChar * type)
-{
-    if (type == NULL)
-        return (-1);
-    if (xmlStrEqual(type, BAD_CAST "string"))
-        return (1);
-    if (xmlStrEqual(type, BAD_CAST "token"))
-        return (1);
-    return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeCheck:
- * @data:  data needed for the library
- * @type:  the type name
- * @value:  the value to check
- * @node:  the node
- *
- * Check if the given type and value are validated by
- * the default datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeCheck(void *data ATTRIBUTE_UNUSED,
-                           const xmlChar * type ATTRIBUTE_UNUSED,
-                           const xmlChar * value ATTRIBUTE_UNUSED,
-                           void **result ATTRIBUTE_UNUSED,
-                           xmlNodePtr node ATTRIBUTE_UNUSED)
-{
-    if (value == NULL)
-        return (-1);
-    if (xmlStrEqual(type, BAD_CAST "string"))
-        return (1);
-    if (xmlStrEqual(type, BAD_CAST "token")) {
-        return (1);
-    }
-
-    return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeCompare:
- * @data:  data needed for the library
- * @type:  the type name
- * @value1:  the first value
- * @value2:  the second value
- *
- * Compare two values accordingly a type from the default
- * datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeCompare(void *data ATTRIBUTE_UNUSED,
-                             const xmlChar * type,
-                             const xmlChar * value1,
-                             xmlNodePtr ctxt1 ATTRIBUTE_UNUSED,
-                             void *comp1 ATTRIBUTE_UNUSED,
-                             const xmlChar * value2,
-                             xmlNodePtr ctxt2 ATTRIBUTE_UNUSED)
-{
-    int ret = -1;
-
-    if (xmlStrEqual(type, BAD_CAST "string")) {
-        ret = xmlStrEqual(value1, value2);
-    } else if (xmlStrEqual(type, BAD_CAST "token")) {
-        if (!xmlStrEqual(value1, value2)) {
-            xmlChar *nval, *nvalue;
-
-            /*
-             * TODO: trivial optimizations are possible by
-             * computing at compile-time
-             */
-            nval = xmlRelaxNGNormalize(NULL, value1);
-            nvalue = xmlRelaxNGNormalize(NULL, value2);
-
-            if ((nval == NULL) || (nvalue == NULL))
-                ret = -1;
-            else if (xmlStrEqual(nval, nvalue))
-                ret = 1;
-            else
-                ret = 0;
-            if (nval != NULL)
-                xmlFree(nval);
-            if (nvalue != NULL)
-                xmlFree(nvalue);
-        } else
-            ret = 1;
-    }
-    return (ret);
-}
-
-static int xmlRelaxNGTypeInitialized = 0;
-static xmlHashTablePtr xmlRelaxNGRegisteredTypes = NULL;
-
-/**
- * xmlRelaxNGFreeTypeLibrary:
- * @lib:  the type library structure
- * @namespace:  the URI bound to the library
- *
- * Free the structure associated to the type library
- */
-static void
-xmlRelaxNGFreeTypeLibrary(xmlRelaxNGTypeLibraryPtr lib,
-                          const xmlChar * namespace ATTRIBUTE_UNUSED)
-{
-    if (lib == NULL)
-        return;
-    if (lib->namespace != NULL)
-        xmlFree((xmlChar *) lib->namespace);
-    xmlFree(lib);
-}
-
-/**
- * xmlRelaxNGRegisterTypeLibrary:
- * @namespace:  the URI bound to the library
- * @data:  data associated to the library
- * @have:  the provide function
- * @check:  the checking function
- * @comp:  the comparison function
- *
- * Register a new type library
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-static int
-xmlRelaxNGRegisterTypeLibrary(const xmlChar * namespace, void *data,
-                              xmlRelaxNGTypeHave have,
-                              xmlRelaxNGTypeCheck check,
-                              xmlRelaxNGTypeCompare comp,
-                              xmlRelaxNGFacetCheck facet,
-                              xmlRelaxNGTypeFree freef)
-{
-    xmlRelaxNGTypeLibraryPtr lib;
-    int ret;
-
-    if ((xmlRelaxNGRegisteredTypes == NULL) || (namespace == NULL) ||
-        (check == NULL) || (comp == NULL))
-        return (-1);
-    if (xmlHashLookup(xmlRelaxNGRegisteredTypes, namespace) != NULL) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Relax-NG types library '%s' already registered\n",
-                        namespace);
-        return (-1);
-    }
-    lib =
-        (xmlRelaxNGTypeLibraryPtr)
-        xmlMalloc(sizeof(xmlRelaxNGTypeLibrary));
-    if (lib == NULL) {
-        xmlRngVErrMemory(NULL, "adding types library\n");
-        return (-1);
-    }
-    memset(lib, 0, sizeof(xmlRelaxNGTypeLibrary));
-    lib->namespace = xmlStrdup(namespace);
-    lib->data = data;
-    lib->have = have;
-    lib->comp = comp;
-    lib->check = check;
-    lib->facet = facet;
-    lib->freef = freef;
-    ret = xmlHashAddEntry(xmlRelaxNGRegisteredTypes, namespace, lib);
-    if (ret < 0) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Relax-NG types library failed to register '%s'\n",
-                        namespace);
-        xmlRelaxNGFreeTypeLibrary(lib, namespace);
-        return (-1);
-    }
-    return (0);
-}
-
-/**
- * xmlRelaxNGInitTypes:
- *
- * Initilize the default type libraries.
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlRelaxNGInitTypes(void)
-{
-    if (xmlRelaxNGTypeInitialized != 0)
-        return (0);
-    xmlRelaxNGRegisteredTypes = xmlHashCreate(10);
-    if (xmlRelaxNGRegisteredTypes == NULL) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Failed to allocate sh table for Relax-NG types\n");
-        return (-1);
-    }
-    xmlRelaxNGRegisterTypeLibrary(BAD_CAST
-                                  "http://www.w3.org/2001/XMLSchema-datatypes",
-                                  NULL, xmlRelaxNGSchemaTypeHave,
-                                  xmlRelaxNGSchemaTypeCheck,
-                                  xmlRelaxNGSchemaTypeCompare,
-                                  xmlRelaxNGSchemaFacetCheck,
-                                  xmlRelaxNGSchemaFreeValue);
-    xmlRelaxNGRegisterTypeLibrary(xmlRelaxNGNs, NULL,
-                                  xmlRelaxNGDefaultTypeHave,
-                                  xmlRelaxNGDefaultTypeCheck,
-                                  xmlRelaxNGDefaultTypeCompare, NULL,
-                                  NULL);
-    xmlRelaxNGTypeInitialized = 1;
-    return (0);
-}
-
-/**
- * xmlRelaxNGCleanupTypes:
- *
- * Cleanup the default Schemas type library associated to RelaxNG
- */
-void
-xmlRelaxNGCleanupTypes(void)
-{
-    xmlSchemaCleanupTypes();
-    if (xmlRelaxNGTypeInitialized == 0)
-        return;
-    xmlHashFree(xmlRelaxNGRegisteredTypes, (xmlHashDeallocator)
-                xmlRelaxNGFreeTypeLibrary);
-    xmlRelaxNGTypeInitialized = 0;
-}
-
-/************************************************************************
- *									*
- *		Compiling element content into regexp			*
- *									*
- * Sometime the element content can be compiled into a pure regexp,	*
- * This allows a faster execution and streamability at that level	*
- *									*
- ************************************************************************/
-
-/* from automata.c but not exported */
-void xmlAutomataSetFlags(xmlAutomataPtr am, int flags);
-
-
-static int xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt,
-                                xmlRelaxNGDefinePtr def);
-
-/**
- * xmlRelaxNGIsCompileable:
- * @define:  the definition to check
- *
- * Check if a definition is nullable.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error
- */
-static int
-xmlRelaxNGIsCompileable(xmlRelaxNGDefinePtr def)
-{
-    int ret = -1;
-
-    if (def == NULL) {
-        return (-1);
-    }
-    if ((def->type != XML_RELAXNG_ELEMENT) &&
-        (def->dflags & IS_COMPILABLE))
-        return (1);
-    if ((def->type != XML_RELAXNG_ELEMENT) &&
-        (def->dflags & IS_NOT_COMPILABLE))
-        return (0);
-    switch (def->type) {
-        case XML_RELAXNG_NOOP:
-            ret = xmlRelaxNGIsCompileable(def->content);
-            break;
-        case XML_RELAXNG_TEXT:
-        case XML_RELAXNG_EMPTY:
-            ret = 1;
-            break;
-        case XML_RELAXNG_ELEMENT:
-            /*
-             * Check if the element content is compileable
-             */
-            if (((def->dflags & IS_NOT_COMPILABLE) == 0) &&
-                ((def->dflags & IS_COMPILABLE) == 0)) {
-                xmlRelaxNGDefinePtr list;
-
-                list = def->content;
-                while (list != NULL) {
-                    ret = xmlRelaxNGIsCompileable(list);
-                    if (ret != 1)
-                        break;
-                    list = list->next;
-                }
-		/*
-		 * Because the routine is recursive, we must guard against
-		 * discovering both COMPILABLE and NOT_COMPILABLE
-		 */
-                if (ret == 0) {
-		    def->dflags &= ~IS_COMPILABLE;
-                    def->dflags |= IS_NOT_COMPILABLE;
-		}
-                if ((ret == 1) && !(def->dflags &= IS_NOT_COMPILABLE))
-                    def->dflags |= IS_COMPILABLE;
-#ifdef DEBUG_COMPILE
-                if (ret == 1) {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "element content for %s is compilable\n",
-                                    def->name);
-                } else if (ret == 0) {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "element content for %s is not compilable\n",
-                                    def->name);
-                } else {
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "Problem in RelaxNGIsCompileable for element %s\n",
-                                    def->name);
-                }
-#endif
-            }
-            /*
-             * All elements return a compileable status unless they
-             * are generic like anyName
-             */
-            if ((def->nameClass != NULL) || (def->name == NULL))
-                ret = 0;
-            else
-                ret = 1;
-            return (ret);
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_EXTERNALREF:
-        case XML_RELAXNG_PARENTREF:
-            if (def->depth == -20) {
-                return (1);
-            } else {
-                xmlRelaxNGDefinePtr list;
-
-                def->depth = -20;
-                list = def->content;
-                while (list != NULL) {
-                    ret = xmlRelaxNGIsCompileable(list);
-                    if (ret != 1)
-                        break;
-                    list = list->next;
-                }
-            }
-            break;
-        case XML_RELAXNG_START:
-        case XML_RELAXNG_OPTIONAL:
-        case XML_RELAXNG_ZEROORMORE:
-        case XML_RELAXNG_ONEORMORE:
-        case XML_RELAXNG_CHOICE:
-        case XML_RELAXNG_GROUP:
-        case XML_RELAXNG_DEF:{
-                xmlRelaxNGDefinePtr list;
-
-                list = def->content;
-                while (list != NULL) {
-                    ret = xmlRelaxNGIsCompileable(list);
-                    if (ret != 1)
-                        break;
-                    list = list->next;
-                }
-                break;
-            }
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_ATTRIBUTE:
-        case XML_RELAXNG_INTERLEAVE:
-        case XML_RELAXNG_DATATYPE:
-        case XML_RELAXNG_LIST:
-        case XML_RELAXNG_PARAM:
-        case XML_RELAXNG_VALUE:
-        case XML_RELAXNG_NOT_ALLOWED:
-            ret = 0;
-            break;
-    }
-    if (ret == 0)
-        def->dflags |= IS_NOT_COMPILABLE;
-    if (ret == 1)
-        def->dflags |= IS_COMPILABLE;
-#ifdef DEBUG_COMPILE
-    if (ret == 1) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "RelaxNGIsCompileable %s : true\n",
-                        xmlRelaxNGDefName(def));
-    } else if (ret == 0) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "RelaxNGIsCompileable %s : false\n",
-                        xmlRelaxNGDefName(def));
-    } else {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Problem in RelaxNGIsCompileable %s\n",
-                        xmlRelaxNGDefName(def));
-    }
-#endif
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCompile:
- * ctxt:  the RelaxNG parser context
- * @define:  the definition tree to compile
- *
- * Compile the set of definitions, it works recursively, till the
- * element boundaries, where it tries to compile the content if possible
- *
- * Returns 0 if success and -1 in case of error
- */
-static int
-xmlRelaxNGCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
-{
-    int ret = 0;
-    xmlRelaxNGDefinePtr list;
-
-    if ((ctxt == NULL) || (def == NULL))
-        return (-1);
-
-    switch (def->type) {
-        case XML_RELAXNG_START:
-            if ((xmlRelaxNGIsCompileable(def) == 1) && (def->depth != -25)) {
-                xmlAutomataPtr oldam = ctxt->am;
-                xmlAutomataStatePtr oldstate = ctxt->state;
-
-                def->depth = -25;
-
-                list = def->content;
-                ctxt->am = xmlNewAutomata();
-                if (ctxt->am == NULL)
-                    return (-1);
-
-                /*
-                 * assume identical strings but not same pointer are different
-                 * atoms, needed for non-determinism detection
-                 * That way if 2 elements with the same name are in a choice
-                 * branch the automata is found non-deterministic and
-                 * we fallback to the normal validation which does the right
-                 * thing of exploring both choices.
-                 */
-                xmlAutomataSetFlags(ctxt->am, 1);
-
-                ctxt->state = xmlAutomataGetInitState(ctxt->am);
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                xmlAutomataSetFinalState(ctxt->am, ctxt->state);
-                if (xmlAutomataIsDeterminist(ctxt->am))
-                    def->contModel = xmlAutomataCompile(ctxt->am);
-
-                xmlFreeAutomata(ctxt->am);
-                ctxt->state = oldstate;
-                ctxt->am = oldam;
-            }
-            break;
-        case XML_RELAXNG_ELEMENT:
-            if ((ctxt->am != NULL) && (def->name != NULL)) {
-                ctxt->state = xmlAutomataNewTransition2(ctxt->am,
-                                                        ctxt->state, NULL,
-                                                        def->name, def->ns,
-                                                        def);
-            }
-            if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
-                xmlAutomataPtr oldam = ctxt->am;
-                xmlAutomataStatePtr oldstate = ctxt->state;
-
-                def->depth = -25;
-
-                list = def->content;
-                ctxt->am = xmlNewAutomata();
-                if (ctxt->am == NULL)
-                    return (-1);
-                xmlAutomataSetFlags(ctxt->am, 1);
-                ctxt->state = xmlAutomataGetInitState(ctxt->am);
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                xmlAutomataSetFinalState(ctxt->am, ctxt->state);
-                def->contModel = xmlAutomataCompile(ctxt->am);
-                if (!xmlRegexpIsDeterminist(def->contModel)) {
-#ifdef DEBUG_COMPILE
-                    xmlGenericError(xmlGenericErrorContext,
-                        "Content model not determinist %s\n",
-                                    def->name);
-#endif
-                    /*
-                     * we can only use the automata if it is determinist
-                     */
-                    xmlRegFreeRegexp(def->contModel);
-                    def->contModel = NULL;
-                }
-                xmlFreeAutomata(ctxt->am);
-                ctxt->state = oldstate;
-                ctxt->am = oldam;
-            } else {
-                xmlAutomataPtr oldam = ctxt->am;
-
-                /*
-                 * we can't build the content model for this element content
-                 * but it still might be possible to build it for some of its
-                 * children, recurse.
-                 */
-                ret = xmlRelaxNGTryCompile(ctxt, def);
-                ctxt->am = oldam;
-            }
-            break;
-        case XML_RELAXNG_NOOP:
-            ret = xmlRelaxNGCompile(ctxt, def->content);
-            break;
-        case XML_RELAXNG_OPTIONAL:{
-                xmlAutomataStatePtr oldstate = ctxt->state;
-
-                list = def->content;
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
-                break;
-            }
-        case XML_RELAXNG_ZEROORMORE:{
-                xmlAutomataStatePtr oldstate;
-
-                ctxt->state =
-                    xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
-                oldstate = ctxt->state;
-                list = def->content;
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
-                ctxt->state =
-                    xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
-                break;
-            }
-        case XML_RELAXNG_ONEORMORE:{
-                xmlAutomataStatePtr oldstate;
-
-                list = def->content;
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                oldstate = ctxt->state;
-                list = def->content;
-                while (list != NULL) {
-                    xmlRelaxNGCompile(ctxt, list);
-                    list = list->next;
-                }
-                xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
-                ctxt->state =
-                    xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
-                break;
-            }
-        case XML_RELAXNG_CHOICE:{
-                xmlAutomataStatePtr target = NULL;
-                xmlAutomataStatePtr oldstate = ctxt->state;
-
-                list = def->content;
-                while (list != NULL) {
-                    ctxt->state = oldstate;
-                    ret = xmlRelaxNGCompile(ctxt, list);
-                    if (ret != 0)
-                        break;
-                    if (target == NULL)
-                        target = ctxt->state;
-                    else {
-                        xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
-                                              target);
-                    }
-                    list = list->next;
-                }
-                ctxt->state = target;
-
-                break;
-            }
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_EXTERNALREF:
-        case XML_RELAXNG_PARENTREF:
-        case XML_RELAXNG_GROUP:
-        case XML_RELAXNG_DEF:
-            list = def->content;
-            while (list != NULL) {
-                ret = xmlRelaxNGCompile(ctxt, list);
-                if (ret != 0)
-                    break;
-                list = list->next;
-            }
-            break;
-        case XML_RELAXNG_TEXT:{
-                xmlAutomataStatePtr oldstate;
-
-                ctxt->state =
-                    xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
-                oldstate = ctxt->state;
-                xmlRelaxNGCompile(ctxt, def->content);
-                xmlAutomataNewTransition(ctxt->am, ctxt->state,
-                                         ctxt->state, BAD_CAST "#text",
-                                         NULL);
-                ctxt->state =
-                    xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
-                break;
-            }
-        case XML_RELAXNG_EMPTY:
-            ctxt->state =
-                xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
-            break;
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_ATTRIBUTE:
-        case XML_RELAXNG_INTERLEAVE:
-        case XML_RELAXNG_NOT_ALLOWED:
-        case XML_RELAXNG_DATATYPE:
-        case XML_RELAXNG_LIST:
-        case XML_RELAXNG_PARAM:
-        case XML_RELAXNG_VALUE:
-            /* This should not happen and generate an internal error */
-            fprintf(stderr, "RNG internal error trying to compile %s\n",
-                    xmlRelaxNGDefName(def));
-            break;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGTryCompile:
- * ctxt:  the RelaxNG parser context
- * @define:  the definition tree to compile
- *
- * Try to compile the set of definitions, it works recursively,
- * possibly ignoring parts which cannot be compiled.
- *
- * Returns 0 if success and -1 in case of error
- */
-static int
-xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
-{
-    int ret = 0;
-    xmlRelaxNGDefinePtr list;
-
-    if ((ctxt == NULL) || (def == NULL))
-        return (-1);
-
-    if ((def->type == XML_RELAXNG_START) ||
-        (def->type == XML_RELAXNG_ELEMENT)) {
-        ret = xmlRelaxNGIsCompileable(def);
-        if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
-            ctxt->am = NULL;
-            ret = xmlRelaxNGCompile(ctxt, def);
-#ifdef DEBUG_PROGRESSIVE
-            if (ret == 0) {
-                if (def->type == XML_RELAXNG_START)
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "compiled the start\n");
-                else
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "compiled element %s\n", def->name);
-            } else {
-                if (def->type == XML_RELAXNG_START)
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "failed to compile the start\n");
-                else
-                    xmlGenericError(xmlGenericErrorContext,
-                                    "failed to compile element %s\n",
-                                    def->name);
-            }
-#endif
-            return (ret);
-        }
-    }
-    switch (def->type) {
-        case XML_RELAXNG_NOOP:
-            ret = xmlRelaxNGTryCompile(ctxt, def->content);
-            break;
-        case XML_RELAXNG_TEXT:
-        case XML_RELAXNG_DATATYPE:
-        case XML_RELAXNG_LIST:
-        case XML_RELAXNG_PARAM:
-        case XML_RELAXNG_VALUE:
-        case XML_RELAXNG_EMPTY:
-        case XML_RELAXNG_ELEMENT:
-            ret = 0;
-            break;
-        case XML_RELAXNG_OPTIONAL:
-        case XML_RELAXNG_ZEROORMORE:
-        case XML_RELAXNG_ONEORMORE:
-        case XML_RELAXNG_CHOICE:
-        case XML_RELAXNG_GROUP:
-        case XML_RELAXNG_DEF:
-        case XML_RELAXNG_START:
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_EXTERNALREF:
-        case XML_RELAXNG_PARENTREF:
-            list = def->content;
-            while (list != NULL) {
-                ret = xmlRelaxNGTryCompile(ctxt, list);
-                if (ret != 0)
-                    break;
-                list = list->next;
-            }
-            break;
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_ATTRIBUTE:
-        case XML_RELAXNG_INTERLEAVE:
-        case XML_RELAXNG_NOT_ALLOWED:
-            ret = 0;
-            break;
-    }
-    return (ret);
-}
-
-/************************************************************************
- *									*
- *			Parsing functions				*
- *									*
- ************************************************************************/
-
-static xmlRelaxNGDefinePtr xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr
-                                                    ctxt, xmlNodePtr node);
-static xmlRelaxNGDefinePtr xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr
-                                                  ctxt, xmlNodePtr node);
-static xmlRelaxNGDefinePtr xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr
-                                                   ctxt, xmlNodePtr nodes,
-                                                   int group);
-static xmlRelaxNGDefinePtr xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr
-                                                  ctxt, xmlNodePtr node);
-static xmlRelaxNGPtr xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt,
-                                             xmlNodePtr node);
-static int xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
-                                         xmlNodePtr nodes);
-static xmlRelaxNGDefinePtr xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr
-                                                    ctxt, xmlNodePtr node,
-                                                    xmlRelaxNGDefinePtr
-                                                    def);
-static xmlRelaxNGGrammarPtr xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr
-                                                   ctxt, xmlNodePtr nodes);
-static int xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
-                                  xmlRelaxNGDefinePtr define,
-                                  xmlNodePtr elem);
-
-
-#define IS_BLANK_NODE(n) (xmlRelaxNGIsBlank((n)->content))
-
-/**
- * xmlRelaxNGIsNullable:
- * @define:  the definition to verify
- *
- * Check if a definition is nullable.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error
- */
-static int
-xmlRelaxNGIsNullable(xmlRelaxNGDefinePtr define)
-{
-    int ret;
-
-    if (define == NULL)
-        return (-1);
-
-    if (define->dflags & IS_NULLABLE)
-        return (1);
-    if (define->dflags & IS_NOT_NULLABLE)
-        return (0);
-    switch (define->type) {
-        case XML_RELAXNG_EMPTY:
-        case XML_RELAXNG_TEXT:
-            ret = 1;
-            break;
-        case XML_RELAXNG_NOOP:
-        case XML_RELAXNG_DEF:
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_EXTERNALREF:
-        case XML_RELAXNG_PARENTREF:
-        case XML_RELAXNG_ONEORMORE:
-            ret = xmlRelaxNGIsNullable(define->content);
-            break;
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_NOT_ALLOWED:
-        case XML_RELAXNG_ELEMENT:
-        case XML_RELAXNG_DATATYPE:
-        case XML_RELAXNG_PARAM:
-        case XML_RELAXNG_VALUE:
-        case XML_RELAXNG_LIST:
-        case XML_RELAXNG_ATTRIBUTE:
-            ret = 0;
-            break;
-        case XML_RELAXNG_CHOICE:{
-                xmlRelaxNGDefinePtr list = define->content;
-
-                while (list != NULL) {
-                    ret = xmlRelaxNGIsNullable(list);
-                    if (ret != 0)
-                        goto done;
-                    list = list->next;
-                }
-                ret = 0;
-                break;
-            }
-        case XML_RELAXNG_START:
-        case XML_RELAXNG_INTERLEAVE:
-        case XML_RELAXNG_GROUP:{
-                xmlRelaxNGDefinePtr list = define->content;
-
-                while (list != NULL) {
-                    ret = xmlRelaxNGIsNullable(list);
-                    if (ret != 1)
-                        goto done;
-                    list = list->next;
-                }
-                return (1);
-            }
-        default:
-            return (-1);
-    }
-  done:
-    if (ret == 0)
-        define->dflags |= IS_NOT_NULLABLE;
-    if (ret == 1)
-        define->dflags |= IS_NULLABLE;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGIsBlank:
- * @str:  a string
- *
- * Check if a string is ignorable c.f. 4.2. Whitespace
- *
- * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
- */
-static int
-xmlRelaxNGIsBlank(xmlChar * str)
-{
-    if (str == NULL)
-        return (1);
-    while (*str != 0) {
-        if (!(IS_BLANK_CH(*str)))
-            return (0);
-        str++;
-    }
-    return (1);
-}
-
-/**
- * xmlRelaxNGGetDataTypeLibrary:
- * @ctxt:  a Relax-NG parser context
- * @node:  the current data or value element
- *
- * Applies algorithm from 4.3. datatypeLibrary attribute
- *
- * Returns the datatypeLibary value or NULL if not found
- */
-static xmlChar *
-xmlRelaxNGGetDataTypeLibrary(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                             xmlNodePtr node)
-{
-    xmlChar *ret, *escape;
-
-    if (node == NULL)
-        return(NULL);
-
-    if ((IS_RELAXNG(node, "data")) || (IS_RELAXNG(node, "value"))) {
-        ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
-        if (ret != NULL) {
-            if (ret[0] == 0) {
-                xmlFree(ret);
-                return (NULL);
-            }
-            escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
-            if (escape == NULL) {
-                return (ret);
-            }
-            xmlFree(ret);
-            return (escape);
-        }
-    }
-    node = node->parent;
-    while ((node != NULL) && (node->type == XML_ELEMENT_NODE)) {
-        ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
-        if (ret != NULL) {
-            if (ret[0] == 0) {
-                xmlFree(ret);
-                return (NULL);
-            }
-            escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
-            if (escape == NULL) {
-                return (ret);
-            }
-            xmlFree(ret);
-            return (escape);
-        }
-        node = node->parent;
-    }
-    return (NULL);
-}
-
-/**
- * xmlRelaxNGParseValue:
- * @ctxt:  a Relax-NG parser context
- * @node:  the data node.
- *
- * parse the content of a RelaxNG value node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseValue(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr def = NULL;
-    xmlRelaxNGTypeLibraryPtr lib = NULL;
-    xmlChar *type;
-    xmlChar *library;
-    int success = 0;
-
-    def = xmlRelaxNGNewDefine(ctxt, node);
-    if (def == NULL)
-        return (NULL);
-    def->type = XML_RELAXNG_VALUE;
-
-    type = xmlGetProp(node, BAD_CAST "type");
-    if (type != NULL) {
-        xmlRelaxNGNormExtSpace(type);
-        if (xmlValidateNCName(type, 0)) {
-            xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
-                       "value type '%s' is not an NCName\n", type, NULL);
-        }
-        library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
-        if (library == NULL)
-            library =
-                xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
-
-        def->name = type;
-        def->ns = library;
-
-        lib = (xmlRelaxNGTypeLibraryPtr)
-            xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
-        if (lib == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
-                       "Use of unregistered type library '%s'\n", library,
-                       NULL);
-            def->data = NULL;
-        } else {
-            def->data = lib;
-            if (lib->have == NULL) {
-                xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
-                           "Internal error with type library '%s': no 'have'\n",
-                           library, NULL);
-            } else {
-                success = lib->have(lib->data, def->name);
-                if (success != 1) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
-                               "Error type '%s' is not exported by type library '%s'\n",
-                               def->name, library);
-                }
-            }
-        }
-    }
-    if (node->children == NULL) {
-        def->value = xmlStrdup(BAD_CAST "");
-    } else if (((node->children->type != XML_TEXT_NODE) &&
-                (node->children->type != XML_CDATA_SECTION_NODE)) ||
-               (node->children->next != NULL)) {
-        xmlRngPErr(ctxt, node, XML_RNGP_TEXT_EXPECTED,
-                   "Expecting a single text value for <value>content\n",
-                   NULL, NULL);
-    } else if (def != NULL) {
-        def->value = xmlNodeGetContent(node);
-        if (def->value == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_VALUE_NO_CONTENT,
-                       "Element <value> has no content\n", NULL, NULL);
-        } else if ((lib != NULL) && (lib->check != NULL) && (success == 1)) {
-            void *val = NULL;
-
-            success =
-                lib->check(lib->data, def->name, def->value, &val, node);
-            if (success != 1) {
-                xmlRngPErr(ctxt, node, XML_RNGP_INVALID_VALUE,
-                           "Value '%s' is not acceptable for type '%s'\n",
-                           def->value, def->name);
-            } else {
-                if (val != NULL)
-                    def->attrs = val;
-            }
-        }
-    }
-    return (def);
-}
-
-/**
- * xmlRelaxNGParseData:
- * @ctxt:  a Relax-NG parser context
- * @node:  the data node.
- *
- * parse the content of a RelaxNG data node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseData(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr def = NULL, except;
-    xmlRelaxNGDefinePtr param, lastparam = NULL;
-    xmlRelaxNGTypeLibraryPtr lib;
-    xmlChar *type;
-    xmlChar *library;
-    xmlNodePtr content;
-    int tmp;
-
-    type = xmlGetProp(node, BAD_CAST "type");
-    if (type == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_TYPE_MISSING, "data has no type\n", NULL,
-                   NULL);
-        return (NULL);
-    }
-    xmlRelaxNGNormExtSpace(type);
-    if (xmlValidateNCName(type, 0)) {
-        xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
-                   "data type '%s' is not an NCName\n", type, NULL);
-    }
-    library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
-    if (library == NULL)
-        library =
-            xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
-
-    def = xmlRelaxNGNewDefine(ctxt, node);
-    if (def == NULL) {
-        xmlFree(type);
-        return (NULL);
-    }
-    def->type = XML_RELAXNG_DATATYPE;
-    def->name = type;
-    def->ns = library;
-
-    lib = (xmlRelaxNGTypeLibraryPtr)
-        xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
-    if (lib == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
-                   "Use of unregistered type library '%s'\n", library,
-                   NULL);
-        def->data = NULL;
-    } else {
-        def->data = lib;
-        if (lib->have == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
-                       "Internal error with type library '%s': no 'have'\n",
-                       library, NULL);
-        } else {
-            tmp = lib->have(lib->data, def->name);
-            if (tmp != 1) {
-                xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
-                           "Error type '%s' is not exported by type library '%s'\n",
-                           def->name, library);
-            } else
-                if ((xmlStrEqual
-                     (library,
-                      BAD_CAST
-                      "http://www.w3.org/2001/XMLSchema-datatypes"))
-                    && ((xmlStrEqual(def->name, BAD_CAST "IDREF"))
-                        || (xmlStrEqual(def->name, BAD_CAST "IDREFS")))) {
-                ctxt->idref = 1;
-            }
-        }
-    }
-    content = node->children;
-
-    /*
-     * Handle optional params
-     */
-    while (content != NULL) {
-        if (!xmlStrEqual(content->name, BAD_CAST "param"))
-            break;
-        if (xmlStrEqual(library,
-                        BAD_CAST "http://relaxng.org/ns/structure/1.0")) {
-            xmlRngPErr(ctxt, node, XML_RNGP_PARAM_FORBIDDEN,
-                       "Type library '%s' does not allow type parameters\n",
-                       library, NULL);
-            content = content->next;
-            while ((content != NULL) &&
-                   (xmlStrEqual(content->name, BAD_CAST "param")))
-                content = content->next;
-        } else {
-            param = xmlRelaxNGNewDefine(ctxt, node);
-            if (param != NULL) {
-                param->type = XML_RELAXNG_PARAM;
-                param->name = xmlGetProp(content, BAD_CAST "name");
-                if (param->name == NULL) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_PARAM_NAME_MISSING,
-                               "param has no name\n", NULL, NULL);
-                }
-                param->value = xmlNodeGetContent(content);
-                if (lastparam == NULL) {
-                    def->attrs = lastparam = param;
-                } else {
-                    lastparam->next = param;
-                    lastparam = param;
-                }
-                if (lib != NULL) {
-                }
-            }
-            content = content->next;
-        }
-    }
-    /*
-     * Handle optional except
-     */
-    if ((content != NULL)
-        && (xmlStrEqual(content->name, BAD_CAST "except"))) {
-        xmlNodePtr child;
-        xmlRelaxNGDefinePtr tmp2, last = NULL;
-
-        except = xmlRelaxNGNewDefine(ctxt, node);
-        if (except == NULL) {
-            return (def);
-        }
-        except->type = XML_RELAXNG_EXCEPT;
-        child = content->children;
-	def->content = except;
-        if (child == NULL) {
-            xmlRngPErr(ctxt, content, XML_RNGP_EXCEPT_NO_CONTENT,
-                       "except has no content\n", NULL, NULL);
-        }
-        while (child != NULL) {
-            tmp2 = xmlRelaxNGParsePattern(ctxt, child);
-            if (tmp2 != NULL) {
-                if (last == NULL) {
-                    except->content = last = tmp2;
-                } else {
-                    last->next = tmp2;
-                    last = tmp2;
-                }
-            }
-            child = child->next;
-        }
-        content = content->next;
-    }
-    /*
-     * Check there is no unhandled data
-     */
-    if (content != NULL) {
-        xmlRngPErr(ctxt, content, XML_RNGP_DATA_CONTENT,
-                   "Element data has unexpected content %s\n",
-                   content->name, NULL);
-    }
-
-    return (def);
-}
-
-static const xmlChar *invalidName = BAD_CAST "\1";
-
-/**
- * xmlRelaxNGCompareNameClasses:
- * @defs1:  the first element/attribute defs
- * @defs2:  the second element/attribute defs
- * @name:  the restriction on the name
- * @ns:  the restriction on the namespace
- *
- * Compare the 2 lists of element definitions. The comparison is
- * that if both lists do not accept the same QNames, it returns 1
- * If the 2 lists can accept the same QName the comparison returns 0
- *
- * Returns 1 disttinct, 0 if equal
- */
-static int
-xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1,
-                             xmlRelaxNGDefinePtr def2)
-{
-    int ret = 1;
-    xmlNode node;
-    xmlNs ns;
-    xmlRelaxNGValidCtxt ctxt;
-
-    memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt));
-
-    ctxt.flags = FLAGS_IGNORABLE | FLAGS_NOERROR;
-
-    if ((def1->type == XML_RELAXNG_ELEMENT) ||
-        (def1->type == XML_RELAXNG_ATTRIBUTE)) {
-        if (def2->type == XML_RELAXNG_TEXT)
-            return (1);
-        if (def1->name != NULL) {
-            node.name = def1->name;
-        } else {
-            node.name = invalidName;
-        }
-        if (def1->ns != NULL) {
-            if (def1->ns[0] == 0) {
-                node.ns = NULL;
-            } else {
-	        node.ns = &ns;
-                ns.href = def1->ns;
-            }
-        } else {
-            node.ns = NULL;
-        }
-        if (xmlRelaxNGElementMatch(&ctxt, def2, &node)) {
-            if (def1->nameClass != NULL) {
-                ret = xmlRelaxNGCompareNameClasses(def1->nameClass, def2);
-            } else {
-                ret = 0;
-            }
-        } else {
-            ret = 1;
-        }
-    } else if (def1->type == XML_RELAXNG_TEXT) {
-        if (def2->type == XML_RELAXNG_TEXT)
-            return (0);
-        return (1);
-    } else if (def1->type == XML_RELAXNG_EXCEPT) {
-        ret = xmlRelaxNGCompareNameClasses(def1->content, def2);
-	if (ret == 0)
-	    ret = 1;
-	else if (ret == 1)
-	    ret = 0;
-    } else {
-        TODO ret = 0;
-    }
-    if (ret == 0)
-        return (ret);
-    if ((def2->type == XML_RELAXNG_ELEMENT) ||
-        (def2->type == XML_RELAXNG_ATTRIBUTE)) {
-        if (def2->name != NULL) {
-            node.name = def2->name;
-        } else {
-            node.name = invalidName;
-        }
-        node.ns = &ns;
-        if (def2->ns != NULL) {
-            if (def2->ns[0] == 0) {
-                node.ns = NULL;
-            } else {
-                ns.href = def2->ns;
-            }
-        } else {
-            ns.href = invalidName;
-        }
-        if (xmlRelaxNGElementMatch(&ctxt, def1, &node)) {
-            if (def2->nameClass != NULL) {
-                ret = xmlRelaxNGCompareNameClasses(def2->nameClass, def1);
-            } else {
-                ret = 0;
-            }
-        } else {
-            ret = 1;
-        }
-    } else {
-        TODO ret = 0;
-    }
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCompareElemDefLists:
- * @ctxt:  a Relax-NG parser context
- * @defs1:  the first list of element/attribute defs
- * @defs2:  the second list of element/attribute defs
- *
- * Compare the 2 lists of element or attribute definitions. The comparison
- * is that if both lists do not accept the same QNames, it returns 1
- * If the 2 lists can accept the same QName the comparison returns 0
- *
- * Returns 1 disttinct, 0 if equal
- */
-static int
-xmlRelaxNGCompareElemDefLists(xmlRelaxNGParserCtxtPtr ctxt
-                              ATTRIBUTE_UNUSED, xmlRelaxNGDefinePtr * def1,
-                              xmlRelaxNGDefinePtr * def2)
-{
-    xmlRelaxNGDefinePtr *basedef2 = def2;
-
-    if ((def1 == NULL) || (def2 == NULL))
-        return (1);
-    if ((*def1 == NULL) || (*def2 == NULL))
-        return (1);
-    while (*def1 != NULL) {
-        while ((*def2) != NULL) {
-            if (xmlRelaxNGCompareNameClasses(*def1, *def2) == 0)
-                return (0);
-            def2++;
-        }
-        def2 = basedef2;
-        def1++;
-    }
-    return (1);
-}
-
-/**
- * xmlRelaxNGGenerateAttributes:
- * @ctxt:  a Relax-NG parser context
- * @def:  the definition definition
- *
- * Check if the definition can only generate attributes
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGGenerateAttributes(xmlRelaxNGParserCtxtPtr ctxt,
-                             xmlRelaxNGDefinePtr def)
-{
-    xmlRelaxNGDefinePtr parent, cur, tmp;
-
-    /*
-     * Don't run that check in case of error. Infinite recursion
-     * becomes possible.
-     */
-    if (ctxt->nbErrors != 0)
-        return (-1);
-
-    parent = NULL;
-    cur = def;
-    while (cur != NULL) {
-        if ((cur->type == XML_RELAXNG_ELEMENT) ||
-            (cur->type == XML_RELAXNG_TEXT) ||
-            (cur->type == XML_RELAXNG_DATATYPE) ||
-            (cur->type == XML_RELAXNG_PARAM) ||
-            (cur->type == XML_RELAXNG_LIST) ||
-            (cur->type == XML_RELAXNG_VALUE) ||
-            (cur->type == XML_RELAXNG_EMPTY))
-            return (0);
-        if ((cur->type == XML_RELAXNG_CHOICE) ||
-            (cur->type == XML_RELAXNG_INTERLEAVE) ||
-            (cur->type == XML_RELAXNG_GROUP) ||
-            (cur->type == XML_RELAXNG_ONEORMORE) ||
-            (cur->type == XML_RELAXNG_ZEROORMORE) ||
-            (cur->type == XML_RELAXNG_OPTIONAL) ||
-            (cur->type == XML_RELAXNG_PARENTREF) ||
-            (cur->type == XML_RELAXNG_EXTERNALREF) ||
-            (cur->type == XML_RELAXNG_REF) ||
-            (cur->type == XML_RELAXNG_DEF)) {
-            if (cur->content != NULL) {
-                parent = cur;
-                cur = cur->content;
-                tmp = cur;
-                while (tmp != NULL) {
-                    tmp->parent = parent;
-                    tmp = tmp->next;
-                }
-                continue;
-            }
-        }
-        if (cur == def)
-            break;
-        if (cur->next != NULL) {
-            cur = cur->next;
-            continue;
-        }
-        do {
-            cur = cur->parent;
-            if (cur == NULL)
-                break;
-            if (cur == def)
-                return (1);
-            if (cur->next != NULL) {
-                cur = cur->next;
-                break;
-            }
-        } while (cur != NULL);
-    }
-    return (1);
-}
-
-/**
- * xmlRelaxNGGetElements:
- * @ctxt:  a Relax-NG parser context
- * @def:  the definition definition
- * @eora:  gather elements (0) or attributes (1)
- *
- * Compute the list of top elements a definition can generate
- *
- * Returns a list of elements or NULL if none was found.
- */
-static xmlRelaxNGDefinePtr *
-xmlRelaxNGGetElements(xmlRelaxNGParserCtxtPtr ctxt,
-                      xmlRelaxNGDefinePtr def, int eora)
-{
-    xmlRelaxNGDefinePtr *ret = NULL, parent, cur, tmp;
-    int len = 0;
-    int max = 0;
-
-    /*
-     * Don't run that check in case of error. Infinite recursion
-     * becomes possible.
-     */
-    if (ctxt->nbErrors != 0)
-        return (NULL);
-
-    parent = NULL;
-    cur = def;
-    while (cur != NULL) {
-        if (((eora == 0) && ((cur->type == XML_RELAXNG_ELEMENT) ||
-                             (cur->type == XML_RELAXNG_TEXT))) ||
-            ((eora == 1) && (cur->type == XML_RELAXNG_ATTRIBUTE))) {
-            if (ret == NULL) {
-                max = 10;
-                ret = (xmlRelaxNGDefinePtr *)
-                    xmlMalloc((max + 1) * sizeof(xmlRelaxNGDefinePtr));
-                if (ret == NULL) {
-                    xmlRngPErrMemory(ctxt, "getting element list\n");
-                    return (NULL);
-                }
-            } else if (max <= len) {
-	        xmlRelaxNGDefinePtr *temp;
-
-                max *= 2;
-                temp = xmlRealloc(ret,
-                               (max + 1) * sizeof(xmlRelaxNGDefinePtr));
-                if (temp == NULL) {
-                    xmlRngPErrMemory(ctxt, "getting element list\n");
-		    xmlFree(ret);
-                    return (NULL);
-                }
-		ret = temp;
-            }
-            ret[len++] = cur;
-            ret[len] = NULL;
-        } else if ((cur->type == XML_RELAXNG_CHOICE) ||
-                   (cur->type == XML_RELAXNG_INTERLEAVE) ||
-                   (cur->type == XML_RELAXNG_GROUP) ||
-                   (cur->type == XML_RELAXNG_ONEORMORE) ||
-                   (cur->type == XML_RELAXNG_ZEROORMORE) ||
-                   (cur->type == XML_RELAXNG_OPTIONAL) ||
-                   (cur->type == XML_RELAXNG_PARENTREF) ||
-                   (cur->type == XML_RELAXNG_REF) ||
-                   (cur->type == XML_RELAXNG_DEF) ||
-		   (cur->type == XML_RELAXNG_EXTERNALREF)) {
-            /*
-             * Don't go within elements or attributes or string values.
-             * Just gather the element top list
-             */
-            if (cur->content != NULL) {
-                parent = cur;
-                cur = cur->content;
-                tmp = cur;
-                while (tmp != NULL) {
-                    tmp->parent = parent;
-                    tmp = tmp->next;
-                }
-                continue;
-            }
-        }
-        if (cur == def)
-            break;
-        if (cur->next != NULL) {
-            cur = cur->next;
-            continue;
-        }
-        do {
-            cur = cur->parent;
-            if (cur == NULL)
-                break;
-            if (cur == def)
-                return (ret);
-            if (cur->next != NULL) {
-                cur = cur->next;
-                break;
-            }
-        } while (cur != NULL);
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCheckChoiceDeterminism:
- * @ctxt:  a Relax-NG parser context
- * @def:  the choice definition
- *
- * Also used to find indeterministic pattern in choice
- */
-static void
-xmlRelaxNGCheckChoiceDeterminism(xmlRelaxNGParserCtxtPtr ctxt,
-                                 xmlRelaxNGDefinePtr def)
-{
-    xmlRelaxNGDefinePtr **list;
-    xmlRelaxNGDefinePtr cur;
-    int nbchild = 0, i, j, ret;
-    int is_nullable = 0;
-    int is_indeterminist = 0;
-    xmlHashTablePtr triage = NULL;
-    int is_triable = 1;
-
-    if ((def == NULL) || (def->type != XML_RELAXNG_CHOICE))
-        return;
-
-    if (def->dflags & IS_PROCESSED)
-        return;
-
-    /*
-     * Don't run that check in case of error. Infinite recursion
-     * becomes possible.
-     */
-    if (ctxt->nbErrors != 0)
-        return;
-
-    is_nullable = xmlRelaxNGIsNullable(def);
-
-    cur = def->content;
-    while (cur != NULL) {
-        nbchild++;
-        cur = cur->next;
-    }
-
-    list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
-                                              sizeof(xmlRelaxNGDefinePtr
-                                                     *));
-    if (list == NULL) {
-        xmlRngPErrMemory(ctxt, "building choice\n");
-        return;
-    }
-    i = 0;
-    /*
-     * a bit strong but safe
-     */
-    if (is_nullable == 0) {
-        triage = xmlHashCreate(10);
-    } else {
-        is_triable = 0;
-    }
-    cur = def->content;
-    while (cur != NULL) {
-        list[i] = xmlRelaxNGGetElements(ctxt, cur, 0);
-        if ((list[i] == NULL) || (list[i][0] == NULL)) {
-            is_triable = 0;
-        } else if (is_triable == 1) {
-            xmlRelaxNGDefinePtr *tmp;
-            int res;
-
-            tmp = list[i];
-            while ((*tmp != NULL) && (is_triable == 1)) {
-                if ((*tmp)->type == XML_RELAXNG_TEXT) {
-                    res = xmlHashAddEntry2(triage,
-                                           BAD_CAST "#text", NULL,
-                                           (void *) cur);
-                    if (res != 0)
-                        is_triable = -1;
-                } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
-                           ((*tmp)->name != NULL)) {
-                    if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
-                        res = xmlHashAddEntry2(triage,
-                                               (*tmp)->name, NULL,
-                                               (void *) cur);
-                    else
-                        res = xmlHashAddEntry2(triage,
-                                               (*tmp)->name, (*tmp)->ns,
-                                               (void *) cur);
-                    if (res != 0)
-                        is_triable = -1;
-                } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
-                    if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
-                        res = xmlHashAddEntry2(triage,
-                                               BAD_CAST "#any", NULL,
-                                               (void *) cur);
-                    else
-                        res = xmlHashAddEntry2(triage,
-                                               BAD_CAST "#any", (*tmp)->ns,
-                                               (void *) cur);
-                    if (res != 0)
-                        is_triable = -1;
-                } else {
-                    is_triable = -1;
-                }
-                tmp++;
-            }
-        }
-        i++;
-        cur = cur->next;
-    }
-
-    for (i = 0; i < nbchild; i++) {
-        if (list[i] == NULL)
-            continue;
-        for (j = 0; j < i; j++) {
-            if (list[j] == NULL)
-                continue;
-            ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
-            if (ret == 0) {
-                is_indeterminist = 1;
-            }
-        }
-    }
-    for (i = 0; i < nbchild; i++) {
-        if (list[i] != NULL)
-            xmlFree(list[i]);
-    }
-
-    xmlFree(list);
-    if (is_indeterminist) {
-        def->dflags |= IS_INDETERMINIST;
-    }
-    if (is_triable == 1) {
-        def->dflags |= IS_TRIABLE;
-        def->data = triage;
-    } else if (triage != NULL) {
-        xmlHashFree(triage, NULL);
-    }
-    def->dflags |= IS_PROCESSED;
-}
-
-/**
- * xmlRelaxNGCheckGroupAttrs:
- * @ctxt:  a Relax-NG parser context
- * @def:  the group definition
- *
- * Detects violations of rule 7.3
- */
-static void
-xmlRelaxNGCheckGroupAttrs(xmlRelaxNGParserCtxtPtr ctxt,
-                          xmlRelaxNGDefinePtr def)
-{
-    xmlRelaxNGDefinePtr **list;
-    xmlRelaxNGDefinePtr cur;
-    int nbchild = 0, i, j, ret;
-
-    if ((def == NULL) ||
-        ((def->type != XML_RELAXNG_GROUP) &&
-         (def->type != XML_RELAXNG_ELEMENT)))
-        return;
-
-    if (def->dflags & IS_PROCESSED)
-        return;
-
-    /*
-     * Don't run that check in case of error. Infinite recursion
-     * becomes possible.
-     */
-    if (ctxt->nbErrors != 0)
-        return;
-
-    cur = def->attrs;
-    while (cur != NULL) {
-        nbchild++;
-        cur = cur->next;
-    }
-    cur = def->content;
-    while (cur != NULL) {
-        nbchild++;
-        cur = cur->next;
-    }
-
-    list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
-                                              sizeof(xmlRelaxNGDefinePtr
-                                                     *));
-    if (list == NULL) {
-        xmlRngPErrMemory(ctxt, "building group\n");
-        return;
-    }
-    i = 0;
-    cur = def->attrs;
-    while (cur != NULL) {
-        list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
-        i++;
-        cur = cur->next;
-    }
-    cur = def->content;
-    while (cur != NULL) {
-        list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
-        i++;
-        cur = cur->next;
-    }
-
-    for (i = 0; i < nbchild; i++) {
-        if (list[i] == NULL)
-            continue;
-        for (j = 0; j < i; j++) {
-            if (list[j] == NULL)
-                continue;
-            ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
-            if (ret == 0) {
-                xmlRngPErr(ctxt, def->node, XML_RNGP_GROUP_ATTR_CONFLICT,
-                           "Attributes conflicts in group\n", NULL, NULL);
-            }
-        }
-    }
-    for (i = 0; i < nbchild; i++) {
-        if (list[i] != NULL)
-            xmlFree(list[i]);
-    }
-
-    xmlFree(list);
-    def->dflags |= IS_PROCESSED;
-}
-
-/**
- * xmlRelaxNGComputeInterleaves:
- * @def:  the interleave definition
- * @ctxt:  a Relax-NG parser context
- * @name:  the definition name
- *
- * A lot of work for preprocessing interleave definitions
- * is potentially needed to get a decent execution speed at runtime
- *   - trying to get a total order on the element nodes generated
- *     by the interleaves, order the list of interleave definitions
- *     following that order.
- *   - if <text/> is used to handle mixed content, it is better to
- *     flag this in the define and simplify the runtime checking
- *     algorithm
- */
-static void
-xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
-                             xmlRelaxNGParserCtxtPtr ctxt,
-                             xmlChar * name ATTRIBUTE_UNUSED)
-{
-    xmlRelaxNGDefinePtr cur, *tmp;
-
-    xmlRelaxNGPartitionPtr partitions = NULL;
-    xmlRelaxNGInterleaveGroupPtr *groups = NULL;
-    xmlRelaxNGInterleaveGroupPtr group;
-    int i, j, ret, res;
-    int nbgroups = 0;
-    int nbchild = 0;
-    int is_mixed = 0;
-    int is_determinist = 1;
-
-    /*
-     * Don't run that check in case of error. Infinite recursion
-     * becomes possible.
-     */
-    if (ctxt->nbErrors != 0)
-        return;
-
-#ifdef DEBUG_INTERLEAVE
-    xmlGenericError(xmlGenericErrorContext,
-                    "xmlRelaxNGComputeInterleaves(%s)\n", name);
-#endif
-    cur = def->content;
-    while (cur != NULL) {
-        nbchild++;
-        cur = cur->next;
-    }
-
-#ifdef DEBUG_INTERLEAVE
-    xmlGenericError(xmlGenericErrorContext, "  %d child\n", nbchild);
-#endif
-    groups = (xmlRelaxNGInterleaveGroupPtr *)
-        xmlMalloc(nbchild * sizeof(xmlRelaxNGInterleaveGroupPtr));
-    if (groups == NULL)
-        goto error;
-    cur = def->content;
-    while (cur != NULL) {
-        groups[nbgroups] = (xmlRelaxNGInterleaveGroupPtr)
-            xmlMalloc(sizeof(xmlRelaxNGInterleaveGroup));
-        if (groups[nbgroups] == NULL)
-            goto error;
-        if (cur->type == XML_RELAXNG_TEXT)
-            is_mixed++;
-        groups[nbgroups]->rule = cur;
-        groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur, 0);
-        groups[nbgroups]->attrs = xmlRelaxNGGetElements(ctxt, cur, 1);
-        nbgroups++;
-        cur = cur->next;
-    }
-#ifdef DEBUG_INTERLEAVE
-    xmlGenericError(xmlGenericErrorContext, "  %d groups\n", nbgroups);
-#endif
-
-    /*
-     * Let's check that all rules makes a partitions according to 7.4
-     */
-    partitions = (xmlRelaxNGPartitionPtr)
-        xmlMalloc(sizeof(xmlRelaxNGPartition));
-    if (partitions == NULL)
-        goto error;
-    memset(partitions, 0, sizeof(xmlRelaxNGPartition));
-    partitions->nbgroups = nbgroups;
-    partitions->triage = xmlHashCreate(nbgroups);
-    for (i = 0; i < nbgroups; i++) {
-        group = groups[i];
-        for (j = i + 1; j < nbgroups; j++) {
-            if (groups[j] == NULL)
-                continue;
-
-            ret = xmlRelaxNGCompareElemDefLists(ctxt, group->defs,
-                                                groups[j]->defs);
-            if (ret == 0) {
-                xmlRngPErr(ctxt, def->node, XML_RNGP_ELEM_TEXT_CONFLICT,
-                           "Element or text conflicts in interleave\n",
-                           NULL, NULL);
-            }
-            ret = xmlRelaxNGCompareElemDefLists(ctxt, group->attrs,
-                                                groups[j]->attrs);
-            if (ret == 0) {
-                xmlRngPErr(ctxt, def->node, XML_RNGP_ATTR_CONFLICT,
-                           "Attributes conflicts in interleave\n", NULL,
-                           NULL);
-            }
-        }
-        tmp = group->defs;
-        if ((tmp != NULL) && (*tmp != NULL)) {
-            while (*tmp != NULL) {
-                if ((*tmp)->type == XML_RELAXNG_TEXT) {
-                    res = xmlHashAddEntry2(partitions->triage,
-                                           BAD_CAST "#text", NULL,
-                                           (void *) (long) (i + 1));
-                    if (res != 0)
-                        is_determinist = -1;
-                } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
-                           ((*tmp)->name != NULL)) {
-                    if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
-                        res = xmlHashAddEntry2(partitions->triage,
-                                               (*tmp)->name, NULL,
-                                               (void *) (long) (i + 1));
-                    else
-                        res = xmlHashAddEntry2(partitions->triage,
-                                               (*tmp)->name, (*tmp)->ns,
-                                               (void *) (long) (i + 1));
-                    if (res != 0)
-                        is_determinist = -1;
-                } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
-                    if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
-                        res = xmlHashAddEntry2(partitions->triage,
-                                               BAD_CAST "#any", NULL,
-                                               (void *) (long) (i + 1));
-                    else
-                        res = xmlHashAddEntry2(partitions->triage,
-                                               BAD_CAST "#any", (*tmp)->ns,
-                                               (void *) (long) (i + 1));
-                    if ((*tmp)->nameClass != NULL)
-                        is_determinist = 2;
-                    if (res != 0)
-                        is_determinist = -1;
-                } else {
-                    is_determinist = -1;
-                }
-                tmp++;
-            }
-        } else {
-            is_determinist = 0;
-        }
-    }
-    partitions->groups = groups;
-
-    /*
-     * and save the partition list back in the def
-     */
-    def->data = partitions;
-    if (is_mixed != 0)
-        def->dflags |= IS_MIXED;
-    if (is_determinist == 1)
-        partitions->flags = IS_DETERMINIST;
-    if (is_determinist == 2)
-        partitions->flags = IS_DETERMINIST | IS_NEEDCHECK;
-    return;
-
-  error:
-    xmlRngPErrMemory(ctxt, "in interleave computation\n");
-    if (groups != NULL) {
-        for (i = 0; i < nbgroups; i++)
-            if (groups[i] != NULL) {
-                if (groups[i]->defs != NULL)
-                    xmlFree(groups[i]->defs);
-                xmlFree(groups[i]);
-            }
-        xmlFree(groups);
-    }
-    xmlRelaxNGFreePartition(partitions);
-}
-
-/**
- * xmlRelaxNGParseInterleave:
- * @ctxt:  a Relax-NG parser context
- * @node:  the data node.
- *
- * parse the content of a RelaxNG interleave node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseInterleave(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr def = NULL;
-    xmlRelaxNGDefinePtr last = NULL, cur;
-    xmlNodePtr child;
-
-    def = xmlRelaxNGNewDefine(ctxt, node);
-    if (def == NULL) {
-        return (NULL);
-    }
-    def->type = XML_RELAXNG_INTERLEAVE;
-
-    if (ctxt->interleaves == NULL)
-        ctxt->interleaves = xmlHashCreate(10);
-    if (ctxt->interleaves == NULL) {
-        xmlRngPErrMemory(ctxt, "create interleaves\n");
-    } else {
-        char name[32];
-
-        snprintf(name, 32, "interleave%d", ctxt->nbInterleaves++);
-        if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST name, def) < 0) {
-            xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_ADD,
-                       "Failed to add %s to hash table\n",
-		       (const xmlChar *) name, NULL);
-        }
-    }
-    child = node->children;
-    if (child == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_NO_CONTENT,
-                   "Element interleave is empty\n", NULL, NULL);
-    }
-    while (child != NULL) {
-        if (IS_RELAXNG(child, "element")) {
-            cur = xmlRelaxNGParseElement(ctxt, child);
-        } else {
-            cur = xmlRelaxNGParsePattern(ctxt, child);
-        }
-        if (cur != NULL) {
-            cur->parent = def;
-            if (last == NULL) {
-                def->content = last = cur;
-            } else {
-                last->next = cur;
-                last = cur;
-            }
-        }
-        child = child->next;
-    }
-
-    return (def);
-}
-
-/**
- * xmlRelaxNGParseInclude:
- * @ctxt:  a Relax-NG parser context
- * @node:  the include node
- *
- * Integrate the content of an include node in the current grammar
- *
- * Returns 0 in case of success or -1 in case of error
- */
-static int
-xmlRelaxNGParseInclude(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGIncludePtr incl;
-    xmlNodePtr root;
-    int ret = 0, tmp;
-
-    incl = node->psvi;
-    if (incl == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_INCLUDE_EMPTY,
-                   "Include node has no data\n", NULL, NULL);
-        return (-1);
-    }
-    root = xmlDocGetRootElement(incl->doc);
-    if (root == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_EMPTY, "Include document is empty\n",
-                   NULL, NULL);
-        return (-1);
-    }
-    if (!xmlStrEqual(root->name, BAD_CAST "grammar")) {
-        xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
-                   "Include document root is not a grammar\n", NULL, NULL);
-        return (-1);
-    }
-
-    /*
-     * Merge the definition from both the include and the internal list
-     */
-    if (root->children != NULL) {
-        tmp = xmlRelaxNGParseGrammarContent(ctxt, root->children);
-        if (tmp != 0)
-            ret = -1;
-    }
-    if (node->children != NULL) {
-        tmp = xmlRelaxNGParseGrammarContent(ctxt, node->children);
-        if (tmp != 0)
-            ret = -1;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseDefine:
- * @ctxt:  a Relax-NG parser context
- * @node:  the define node
- *
- * parse the content of a RelaxNG define element node.
- *
- * Returns 0 in case of success or -1 in case of error
- */
-static int
-xmlRelaxNGParseDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlChar *name;
-    int ret = 0, tmp;
-    xmlRelaxNGDefinePtr def;
-    const xmlChar *olddefine;
-
-    name = xmlGetProp(node, BAD_CAST "name");
-    if (name == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_NAME_MISSING,
-                   "define has no name\n", NULL, NULL);
-    } else {
-        xmlRelaxNGNormExtSpace(name);
-        if (xmlValidateNCName(name, 0)) {
-            xmlRngPErr(ctxt, node, XML_RNGP_INVALID_DEFINE_NAME,
-                       "define name '%s' is not an NCName\n", name, NULL);
-        }
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL) {
-            xmlFree(name);
-            return (-1);
-        }
-        def->type = XML_RELAXNG_DEF;
-        def->name = name;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_EMPTY,
-                       "define has no children\n", NULL, NULL);
-        } else {
-            olddefine = ctxt->define;
-            ctxt->define = name;
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 0);
-            ctxt->define = olddefine;
-        }
-        if (ctxt->grammar->defs == NULL)
-            ctxt->grammar->defs = xmlHashCreate(10);
-        if (ctxt->grammar->defs == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
-                       "Could not create definition hash\n", NULL, NULL);
-            ret = -1;
-        } else {
-            tmp = xmlHashAddEntry(ctxt->grammar->defs, name, def);
-            if (tmp < 0) {
-                xmlRelaxNGDefinePtr prev;
-
-                prev = xmlHashLookup(ctxt->grammar->defs, name);
-                if (prev == NULL) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
-                               "Internal error on define aggregation of %s\n",
-                               name, NULL);
-                    ret = -1;
-                } else {
-                    while (prev->nextHash != NULL)
-                        prev = prev->nextHash;
-                    prev->nextHash = def;
-                }
-            }
-        }
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseImportRef:
- * @payload: the parser context
- * @data: the current grammar
- * @name: the reference name
- *
- * Import import one references into the current grammar
- */
-static void
-xmlRelaxNGParseImportRef(void *payload, void *data, xmlChar *name) {
-    xmlRelaxNGParserCtxtPtr ctxt = (xmlRelaxNGParserCtxtPtr) data;
-    xmlRelaxNGDefinePtr def = (xmlRelaxNGDefinePtr) payload;
-    int tmp;
-
-    def->dflags |= IS_EXTERNAL_REF;
-
-    tmp = xmlHashAddEntry(ctxt->grammar->refs, name, def);
-    if (tmp < 0) {
-        xmlRelaxNGDefinePtr prev;
-
-        prev = (xmlRelaxNGDefinePtr)
-            xmlHashLookup(ctxt->grammar->refs, def->name);
-        if (prev == NULL) {
-            if (def->name != NULL) {
-                xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
-                           "Error refs definitions '%s'\n",
-                           def->name, NULL);
-            } else {
-                xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
-                           "Error refs definitions\n",
-                           NULL, NULL);
-            }
-        } else {
-            def->nextHash = prev->nextHash;
-            prev->nextHash = def;
-        }
-    }
-}
-
-/**
- * xmlRelaxNGParseImportRefs:
- * @ctxt: the parser context
- * @grammar: the sub grammar
- *
- * Import references from the subgrammar into the current grammar
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlRelaxNGParseImportRefs(xmlRelaxNGParserCtxtPtr ctxt,
-                          xmlRelaxNGGrammarPtr grammar) {
-    if ((ctxt == NULL) || (grammar == NULL) || (ctxt->grammar == NULL))
-        return(-1);
-    if (grammar->refs == NULL)
-        return(0);
-    if (ctxt->grammar->refs == NULL)
-        ctxt->grammar->refs = xmlHashCreate(10);
-    if (ctxt->grammar->refs == NULL) {
-        xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
-                   "Could not create references hash\n", NULL, NULL);
-        return(-1);
-    }
-    xmlHashScan(grammar->refs, xmlRelaxNGParseImportRef, ctxt);
-    return(0);
-}
-
-/**
- * xmlRelaxNGProcessExternalRef:
- * @ctxt: the parser context
- * @node:  the externlRef node
- *
- * Process and compile an externlRef node
- *
- * Returns the xmlRelaxNGDefinePtr or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGProcessExternalRef(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDocumentPtr docu;
-    xmlNodePtr root, tmp;
-    xmlChar *ns;
-    int newNs = 0, oldflags;
-    xmlRelaxNGDefinePtr def;
-
-    docu = node->psvi;
-    if (docu != NULL) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_EXTERNALREF;
-
-        if (docu->content == NULL) {
-            /*
-             * Then do the parsing for good
-             */
-            root = xmlDocGetRootElement(docu->doc);
-            if (root == NULL) {
-                xmlRngPErr(ctxt, node, XML_RNGP_EXTERNALREF_EMTPY,
-                           "xmlRelaxNGParse: %s is empty\n", ctxt->URL,
-                           NULL);
-                return (NULL);
-            }
-            /*
-             * ns transmission rules
-             */
-            ns = xmlGetProp(root, BAD_CAST "ns");
-            if (ns == NULL) {
-                tmp = node;
-                while ((tmp != NULL) && (tmp->type == XML_ELEMENT_NODE)) {
-                    ns = xmlGetProp(tmp, BAD_CAST "ns");
-                    if (ns != NULL) {
-                        break;
-                    }
-                    tmp = tmp->parent;
-                }
-                if (ns != NULL) {
-                    xmlSetProp(root, BAD_CAST "ns", ns);
-                    newNs = 1;
-                    xmlFree(ns);
-                }
-            } else {
-                xmlFree(ns);
-            }
-
-            /*
-             * Parsing to get a precompiled schemas.
-             */
-            oldflags = ctxt->flags;
-            ctxt->flags |= XML_RELAXNG_IN_EXTERNALREF;
-            docu->schema = xmlRelaxNGParseDocument(ctxt, root);
-            ctxt->flags = oldflags;
-            if ((docu->schema != NULL) &&
-                (docu->schema->topgrammar != NULL)) {
-                docu->content = docu->schema->topgrammar->start;
-                if (docu->schema->topgrammar->refs)
-                    xmlRelaxNGParseImportRefs(ctxt, docu->schema->topgrammar);
-            }
-
-            /*
-             * the externalRef may be reused in a different ns context
-             */
-            if (newNs == 1) {
-                xmlUnsetProp(root, BAD_CAST "ns");
-            }
-        }
-        def->content = docu->content;
-    } else {
-        def = NULL;
-    }
-    return (def);
-}
-
-/**
- * xmlRelaxNGParsePattern:
- * @ctxt:  a Relax-NG parser context
- * @node:  the pattern node.
- *
- * parse the content of a RelaxNG pattern node.
- *
- * Returns the definition pointer or NULL in case of error or if no
- *     pattern is generated.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr def = NULL;
-
-    if (node == NULL) {
-        return (NULL);
-    }
-    if (IS_RELAXNG(node, "element")) {
-        def = xmlRelaxNGParseElement(ctxt, node);
-    } else if (IS_RELAXNG(node, "attribute")) {
-        def = xmlRelaxNGParseAttribute(ctxt, node);
-    } else if (IS_RELAXNG(node, "empty")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_EMPTY;
-        if (node->children != NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_NOT_EMPTY,
-                       "empty: had a child node\n", NULL, NULL);
-        }
-    } else if (IS_RELAXNG(node, "text")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_TEXT;
-        if (node->children != NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_TEXT_HAS_CHILD,
-                       "text: had a child node\n", NULL, NULL);
-        }
-    } else if (IS_RELAXNG(node, "zeroOrMore")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_ZEROORMORE;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 1);
-        }
-    } else if (IS_RELAXNG(node, "oneOrMore")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_ONEORMORE;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 1);
-        }
-    } else if (IS_RELAXNG(node, "optional")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_OPTIONAL;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 1);
-        }
-    } else if (IS_RELAXNG(node, "choice")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_CHOICE;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 0);
-        }
-    } else if (IS_RELAXNG(node, "group")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_GROUP;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 0);
-        }
-    } else if (IS_RELAXNG(node, "ref")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_REF;
-        def->name = xmlGetProp(node, BAD_CAST "name");
-        if (def->name == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_REF_NO_NAME, "ref has no name\n",
-                       NULL, NULL);
-        } else {
-            xmlRelaxNGNormExtSpace(def->name);
-            if (xmlValidateNCName(def->name, 0)) {
-                xmlRngPErr(ctxt, node, XML_RNGP_REF_NAME_INVALID,
-                           "ref name '%s' is not an NCName\n", def->name,
-                           NULL);
-            }
-        }
-        if (node->children != NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_REF_NOT_EMPTY, "ref is not empty\n",
-                       NULL, NULL);
-        }
-        if (ctxt->grammar->refs == NULL)
-            ctxt->grammar->refs = xmlHashCreate(10);
-        if (ctxt->grammar->refs == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
-                       "Could not create references hash\n", NULL, NULL);
-            def = NULL;
-        } else {
-            int tmp;
-
-            tmp = xmlHashAddEntry(ctxt->grammar->refs, def->name, def);
-            if (tmp < 0) {
-                xmlRelaxNGDefinePtr prev;
-
-                prev = (xmlRelaxNGDefinePtr)
-                    xmlHashLookup(ctxt->grammar->refs, def->name);
-                if (prev == NULL) {
-                    if (def->name != NULL) {
-		        xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
-				   "Error refs definitions '%s'\n",
-				   def->name, NULL);
-                    } else {
-		        xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
-				   "Error refs definitions\n",
-				   NULL, NULL);
-                    }
-                    def = NULL;
-                } else {
-                    def->nextHash = prev->nextHash;
-                    prev->nextHash = def;
-                }
-            }
-        }
-    } else if (IS_RELAXNG(node, "data")) {
-        def = xmlRelaxNGParseData(ctxt, node);
-    } else if (IS_RELAXNG(node, "value")) {
-        def = xmlRelaxNGParseValue(ctxt, node);
-    } else if (IS_RELAXNG(node, "list")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_LIST;
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
-                       "Element %s is empty\n", node->name, NULL);
-        } else {
-            def->content =
-                xmlRelaxNGParsePatterns(ctxt, node->children, 0);
-        }
-    } else if (IS_RELAXNG(node, "interleave")) {
-        def = xmlRelaxNGParseInterleave(ctxt, node);
-    } else if (IS_RELAXNG(node, "externalRef")) {
-        def = xmlRelaxNGProcessExternalRef(ctxt, node);
-    } else if (IS_RELAXNG(node, "notAllowed")) {
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_NOT_ALLOWED;
-        if (node->children != NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_NOTALLOWED_NOT_EMPTY,
-                       "xmlRelaxNGParse: notAllowed element is not empty\n",
-                       NULL, NULL);
-        }
-    } else if (IS_RELAXNG(node, "grammar")) {
-        xmlRelaxNGGrammarPtr grammar, old;
-        xmlRelaxNGGrammarPtr oldparent;
-
-#ifdef DEBUG_GRAMMAR
-        xmlGenericError(xmlGenericErrorContext,
-                        "Found <grammar> pattern\n");
-#endif
-
-        oldparent = ctxt->parentgrammar;
-        old = ctxt->grammar;
-        ctxt->parentgrammar = old;
-        grammar = xmlRelaxNGParseGrammar(ctxt, node->children);
-        if (old != NULL) {
-            ctxt->grammar = old;
-            ctxt->parentgrammar = oldparent;
-#if 0
-            if (grammar != NULL) {
-                grammar->next = old->next;
-                old->next = grammar;
-            }
-#endif
-        }
-        if (grammar != NULL)
-            def = grammar->start;
-        else
-            def = NULL;
-    } else if (IS_RELAXNG(node, "parentRef")) {
-        if (ctxt->parentgrammar == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_PARENT,
-                       "Use of parentRef without a parent grammar\n", NULL,
-                       NULL);
-            return (NULL);
-        }
-        def = xmlRelaxNGNewDefine(ctxt, node);
-        if (def == NULL)
-            return (NULL);
-        def->type = XML_RELAXNG_PARENTREF;
-        def->name = xmlGetProp(node, BAD_CAST "name");
-        if (def->name == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_NAME,
-                       "parentRef has no name\n", NULL, NULL);
-        } else {
-            xmlRelaxNGNormExtSpace(def->name);
-            if (xmlValidateNCName(def->name, 0)) {
-                xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NAME_INVALID,
-                           "parentRef name '%s' is not an NCName\n",
-                           def->name, NULL);
-            }
-        }
-        if (node->children != NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NOT_EMPTY,
-                       "parentRef is not empty\n", NULL, NULL);
-        }
-        if (ctxt->parentgrammar->refs == NULL)
-            ctxt->parentgrammar->refs = xmlHashCreate(10);
-        if (ctxt->parentgrammar->refs == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
-                       "Could not create references hash\n", NULL, NULL);
-            def = NULL;
-        } else if (def->name != NULL) {
-            int tmp;
-
-            tmp =
-                xmlHashAddEntry(ctxt->parentgrammar->refs, def->name, def);
-            if (tmp < 0) {
-                xmlRelaxNGDefinePtr prev;
-
-                prev = (xmlRelaxNGDefinePtr)
-                    xmlHashLookup(ctxt->parentgrammar->refs, def->name);
-                if (prev == NULL) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
-                               "Internal error parentRef definitions '%s'\n",
-                               def->name, NULL);
-                    def = NULL;
-                } else {
-                    def->nextHash = prev->nextHash;
-                    prev->nextHash = def;
-                }
-            }
-        }
-    } else if (IS_RELAXNG(node, "mixed")) {
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT, "Mixed is empty\n",
-                       NULL, NULL);
-            def = NULL;
-        } else {
-            def = xmlRelaxNGParseInterleave(ctxt, node);
-            if (def != NULL) {
-                xmlRelaxNGDefinePtr tmp;
-
-                if ((def->content != NULL) && (def->content->next != NULL)) {
-                    tmp = xmlRelaxNGNewDefine(ctxt, node);
-                    if (tmp != NULL) {
-                        tmp->type = XML_RELAXNG_GROUP;
-                        tmp->content = def->content;
-                        def->content = tmp;
-                    }
-                }
-
-                tmp = xmlRelaxNGNewDefine(ctxt, node);
-                if (tmp == NULL)
-                    return (def);
-                tmp->type = XML_RELAXNG_TEXT;
-                tmp->next = def->content;
-                def->content = tmp;
-            }
-        }
-    } else {
-        xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_CONSTRUCT,
-                   "Unexpected node %s is not a pattern\n", node->name,
-                   NULL);
-        def = NULL;
-    }
-    return (def);
-}
-
-/**
- * xmlRelaxNGParseAttribute:
- * @ctxt:  a Relax-NG parser context
- * @node:  the element node
- *
- * parse the content of a RelaxNG attribute node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr ret, cur;
-    xmlNodePtr child;
-    int old_flags;
-
-    ret = xmlRelaxNGNewDefine(ctxt, node);
-    if (ret == NULL)
-        return (NULL);
-    ret->type = XML_RELAXNG_ATTRIBUTE;
-    ret->parent = ctxt->def;
-    child = node->children;
-    if (child == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_EMPTY,
-                   "xmlRelaxNGParseattribute: attribute has no children\n",
-                   NULL, NULL);
-        return (ret);
-    }
-    old_flags = ctxt->flags;
-    ctxt->flags |= XML_RELAXNG_IN_ATTRIBUTE;
-    cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
-    if (cur != NULL)
-        child = child->next;
-
-    if (child != NULL) {
-        cur = xmlRelaxNGParsePattern(ctxt, child);
-        if (cur != NULL) {
-            switch (cur->type) {
-                case XML_RELAXNG_EMPTY:
-                case XML_RELAXNG_NOT_ALLOWED:
-                case XML_RELAXNG_TEXT:
-                case XML_RELAXNG_ELEMENT:
-                case XML_RELAXNG_DATATYPE:
-                case XML_RELAXNG_VALUE:
-                case XML_RELAXNG_LIST:
-                case XML_RELAXNG_REF:
-                case XML_RELAXNG_PARENTREF:
-                case XML_RELAXNG_EXTERNALREF:
-                case XML_RELAXNG_DEF:
-                case XML_RELAXNG_ONEORMORE:
-                case XML_RELAXNG_ZEROORMORE:
-                case XML_RELAXNG_OPTIONAL:
-                case XML_RELAXNG_CHOICE:
-                case XML_RELAXNG_GROUP:
-                case XML_RELAXNG_INTERLEAVE:
-                case XML_RELAXNG_ATTRIBUTE:
-                    ret->content = cur;
-                    cur->parent = ret;
-                    break;
-                case XML_RELAXNG_START:
-                case XML_RELAXNG_PARAM:
-                case XML_RELAXNG_EXCEPT:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CONTENT,
-                               "attribute has invalid content\n", NULL,
-                               NULL);
-                    break;
-                case XML_RELAXNG_NOOP:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_NOOP,
-                               "RNG Internal error, noop found in attribute\n",
-                               NULL, NULL);
-                    break;
-            }
-        }
-        child = child->next;
-    }
-    if (child != NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CHILDREN,
-                   "attribute has multiple children\n", NULL, NULL);
-    }
-    ctxt->flags = old_flags;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseExceptNameClass:
- * @ctxt:  a Relax-NG parser context
- * @node:  the except node
- * @attr:  1 if within an attribute, 0 if within an element
- *
- * parse the content of a RelaxNG nameClass node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseExceptNameClass(xmlRelaxNGParserCtxtPtr ctxt,
-                               xmlNodePtr node, int attr)
-{
-    xmlRelaxNGDefinePtr ret, cur, last = NULL;
-    xmlNodePtr child;
-
-    if (!IS_RELAXNG(node, "except")) {
-        xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MISSING,
-                   "Expecting an except node\n", NULL, NULL);
-        return (NULL);
-    }
-    if (node->next != NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MULTIPLE,
-                   "exceptNameClass allows only a single except node\n",
-                   NULL, NULL);
-    }
-    if (node->children == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_EMPTY, "except has no content\n",
-                   NULL, NULL);
-        return (NULL);
-    }
-
-    ret = xmlRelaxNGNewDefine(ctxt, node);
-    if (ret == NULL)
-        return (NULL);
-    ret->type = XML_RELAXNG_EXCEPT;
-    child = node->children;
-    while (child != NULL) {
-        cur = xmlRelaxNGNewDefine(ctxt, child);
-        if (cur == NULL)
-            break;
-        if (attr)
-            cur->type = XML_RELAXNG_ATTRIBUTE;
-        else
-            cur->type = XML_RELAXNG_ELEMENT;
-
-        if (xmlRelaxNGParseNameClass(ctxt, child, cur) != NULL) {
-            if (last == NULL) {
-                ret->content = cur;
-            } else {
-                last->next = cur;
-            }
-            last = cur;
-        }
-        child = child->next;
-    }
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseNameClass:
- * @ctxt:  a Relax-NG parser context
- * @node:  the nameClass node
- * @def:  the current definition
- *
- * parse the content of a RelaxNG nameClass node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
-                         xmlRelaxNGDefinePtr def)
-{
-    xmlRelaxNGDefinePtr ret, tmp;
-    xmlChar *val;
-
-    ret = def;
-    if ((IS_RELAXNG(node, "name")) || (IS_RELAXNG(node, "anyName")) ||
-        (IS_RELAXNG(node, "nsName"))) {
-        if ((def->type != XML_RELAXNG_ELEMENT) &&
-            (def->type != XML_RELAXNG_ATTRIBUTE)) {
-            ret = xmlRelaxNGNewDefine(ctxt, node);
-            if (ret == NULL)
-                return (NULL);
-            ret->parent = def;
-            if (ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE)
-                ret->type = XML_RELAXNG_ATTRIBUTE;
-            else
-                ret->type = XML_RELAXNG_ELEMENT;
-        }
-    }
-    if (IS_RELAXNG(node, "name")) {
-        val = xmlNodeGetContent(node);
-        xmlRelaxNGNormExtSpace(val);
-        if (xmlValidateNCName(val, 0)) {
-	    if (node->parent != NULL)
-		xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
-			   "Element %s name '%s' is not an NCName\n",
-			   node->parent->name, val);
-	    else
-		xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
-			   "name '%s' is not an NCName\n",
-			   val, NULL);
-        }
-        ret->name = val;
-        val = xmlGetProp(node, BAD_CAST "ns");
-        ret->ns = val;
-        if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
-            (val != NULL) &&
-            (xmlStrEqual(val, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
-	    xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
-                        "Attribute with namespace '%s' is not allowed\n",
-                        val, NULL);
-        }
-        if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
-            (val != NULL) &&
-            (val[0] == 0) && (xmlStrEqual(ret->name, BAD_CAST "xmlns"))) {
-	    xmlRngPErr(ctxt, node, XML_RNGP_XMLNS_NAME,
-                       "Attribute with QName 'xmlns' is not allowed\n",
-                       val, NULL);
-        }
-    } else if (IS_RELAXNG(node, "anyName")) {
-        ret->name = NULL;
-        ret->ns = NULL;
-        if (node->children != NULL) {
-            ret->nameClass =
-                xmlRelaxNGParseExceptNameClass(ctxt, node->children,
-                                               (def->type ==
-                                                XML_RELAXNG_ATTRIBUTE));
-        }
-    } else if (IS_RELAXNG(node, "nsName")) {
-        ret->name = NULL;
-        ret->ns = xmlGetProp(node, BAD_CAST "ns");
-        if (ret->ns == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_NSNAME_NO_NS,
-                       "nsName has no ns attribute\n", NULL, NULL);
-        }
-        if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
-            (ret->ns != NULL) &&
-            (xmlStrEqual
-             (ret->ns, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
-            xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
-                       "Attribute with namespace '%s' is not allowed\n",
-                       ret->ns, NULL);
-        }
-        if (node->children != NULL) {
-            ret->nameClass =
-                xmlRelaxNGParseExceptNameClass(ctxt, node->children,
-                                               (def->type ==
-                                                XML_RELAXNG_ATTRIBUTE));
-        }
-    } else if (IS_RELAXNG(node, "choice")) {
-        xmlNodePtr child;
-        xmlRelaxNGDefinePtr last = NULL;
-
-        ret = xmlRelaxNGNewDefine(ctxt, node);
-        if (ret == NULL)
-            return (NULL);
-        ret->parent = def;
-        ret->type = XML_RELAXNG_CHOICE;
-
-        if (node->children == NULL) {
-            xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_EMPTY,
-                       "Element choice is empty\n", NULL, NULL);
-        } else {
-
-            child = node->children;
-            while (child != NULL) {
-                tmp = xmlRelaxNGParseNameClass(ctxt, child, ret);
-                if (tmp != NULL) {
-                    if (last == NULL) {
-                        last = ret->nameClass = tmp;
-                    } else {
-                        last->next = tmp;
-                        last = tmp;
-                    }
-                }
-                child = child->next;
-            }
-        }
-    } else {
-        xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_CONTENT,
-                   "expecting name, anyName, nsName or choice : got %s\n",
-                   (node == NULL ? (const xmlChar *) "nothing" : node->name),
-		   NULL);
-        return (NULL);
-    }
-    if (ret != def) {
-        if (def->nameClass == NULL) {
-            def->nameClass = ret;
-        } else {
-            tmp = def->nameClass;
-            while (tmp->next != NULL) {
-                tmp = tmp->next;
-            }
-            tmp->next = ret;
-        }
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseElement:
- * @ctxt:  a Relax-NG parser context
- * @node:  the element node
- *
- * parse the content of a RelaxNG element node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGDefinePtr ret, cur, last;
-    xmlNodePtr child;
-    const xmlChar *olddefine;
-
-    ret = xmlRelaxNGNewDefine(ctxt, node);
-    if (ret == NULL)
-        return (NULL);
-    ret->type = XML_RELAXNG_ELEMENT;
-    ret->parent = ctxt->def;
-    child = node->children;
-    if (child == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_EMPTY,
-                   "xmlRelaxNGParseElement: element has no children\n",
-                   NULL, NULL);
-        return (ret);
-    }
-    cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
-    if (cur != NULL)
-        child = child->next;
-
-    if (child == NULL) {
-        xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NO_CONTENT,
-                   "xmlRelaxNGParseElement: element has no content\n",
-                   NULL, NULL);
-        return (ret);
-    }
-    olddefine = ctxt->define;
-    ctxt->define = NULL;
-    last = NULL;
-    while (child != NULL) {
-        cur = xmlRelaxNGParsePattern(ctxt, child);
-        if (cur != NULL) {
-            cur->parent = ret;
-            switch (cur->type) {
-                case XML_RELAXNG_EMPTY:
-                case XML_RELAXNG_NOT_ALLOWED:
-                case XML_RELAXNG_TEXT:
-                case XML_RELAXNG_ELEMENT:
-                case XML_RELAXNG_DATATYPE:
-                case XML_RELAXNG_VALUE:
-                case XML_RELAXNG_LIST:
-                case XML_RELAXNG_REF:
-                case XML_RELAXNG_PARENTREF:
-                case XML_RELAXNG_EXTERNALREF:
-                case XML_RELAXNG_DEF:
-                case XML_RELAXNG_ZEROORMORE:
-                case XML_RELAXNG_ONEORMORE:
-                case XML_RELAXNG_OPTIONAL:
-                case XML_RELAXNG_CHOICE:
-                case XML_RELAXNG_GROUP:
-                case XML_RELAXNG_INTERLEAVE:
-                    if (last == NULL) {
-                        ret->content = last = cur;
-                    } else {
-                        if ((last->type == XML_RELAXNG_ELEMENT) &&
-                            (ret->content == last)) {
-                            ret->content = xmlRelaxNGNewDefine(ctxt, node);
-                            if (ret->content != NULL) {
-                                ret->content->type = XML_RELAXNG_GROUP;
-                                ret->content->content = last;
-                            } else {
-                                ret->content = last;
-                            }
-                        }
-                        last->next = cur;
-                        last = cur;
-                    }
-                    break;
-                case XML_RELAXNG_ATTRIBUTE:
-                    cur->next = ret->attrs;
-                    ret->attrs = cur;
-                    break;
-                case XML_RELAXNG_START:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
-                               "RNG Internal error, start found in element\n",
-                               NULL, NULL);
-                    break;
-                case XML_RELAXNG_PARAM:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
-                               "RNG Internal error, param found in element\n",
-                               NULL, NULL);
-                    break;
-                case XML_RELAXNG_EXCEPT:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
-                               "RNG Internal error, except found in element\n",
-                               NULL, NULL);
-                    break;
-                case XML_RELAXNG_NOOP:
-                    xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
-                               "RNG Internal error, noop found in element\n",
-                               NULL, NULL);
-                    break;
-            }
-        }
-        child = child->next;
-    }
-    ctxt->define = olddefine;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParsePatterns:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  list of nodes
- * @group:  use an implicit <group> for elements
- *
- * parse the content of a RelaxNG start node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes,
-                        int group)
-{
-    xmlRelaxNGDefinePtr def = NULL, last = NULL, cur, parent;
-
-    parent = ctxt->def;
-    while (nodes != NULL) {
-        if (IS_RELAXNG(nodes, "element")) {
-            cur = xmlRelaxNGParseElement(ctxt, nodes);
-            if (def == NULL) {
-                def = last = cur;
-            } else {
-                if ((group == 1) && (def->type == XML_RELAXNG_ELEMENT) &&
-                    (def == last)) {
-                    def = xmlRelaxNGNewDefine(ctxt, nodes);
-                    def->type = XML_RELAXNG_GROUP;
-                    def->content = last;
-                }
-                last->next = cur;
-                last = cur;
-            }
-            cur->parent = parent;
-        } else {
-            cur = xmlRelaxNGParsePattern(ctxt, nodes);
-            if (cur != NULL) {
-                if (def == NULL) {
-                    def = last = cur;
-                } else {
-                    last->next = cur;
-                    last = cur;
-                }
-            }
-        }
-        nodes = nodes->next;
-    }
-    return (def);
-}
-
-/**
- * xmlRelaxNGParseStart:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  start children nodes
- *
- * parse the content of a RelaxNG start node.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlRelaxNGParseStart(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
-{
-    int ret = 0;
-    xmlRelaxNGDefinePtr def = NULL, last;
-
-    if (nodes == NULL) {
-        xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY, "start has no children\n",
-                   NULL, NULL);
-        return (-1);
-    }
-    if (IS_RELAXNG(nodes, "empty")) {
-        def = xmlRelaxNGNewDefine(ctxt, nodes);
-        if (def == NULL)
-            return (-1);
-        def->type = XML_RELAXNG_EMPTY;
-        if (nodes->children != NULL) {
-            xmlRngPErr(ctxt, nodes, XML_RNGP_EMPTY_CONTENT,
-                       "element empty is not empty\n", NULL, NULL);
-        }
-    } else if (IS_RELAXNG(nodes, "notAllowed")) {
-        def = xmlRelaxNGNewDefine(ctxt, nodes);
-        if (def == NULL)
-            return (-1);
-        def->type = XML_RELAXNG_NOT_ALLOWED;
-        if (nodes->children != NULL) {
-            xmlRngPErr(ctxt, nodes, XML_RNGP_NOTALLOWED_NOT_EMPTY,
-                       "element notAllowed is not empty\n", NULL, NULL);
-        }
-    } else {
-        def = xmlRelaxNGParsePatterns(ctxt, nodes, 1);
-    }
-    if (ctxt->grammar->start != NULL) {
-        last = ctxt->grammar->start;
-        while (last->next != NULL)
-            last = last->next;
-        last->next = def;
-    } else {
-        ctxt->grammar->start = def;
-    }
-    nodes = nodes->next;
-    if (nodes != NULL) {
-        xmlRngPErr(ctxt, nodes, XML_RNGP_START_CONTENT,
-                   "start more than one children\n", NULL, NULL);
-        return (-1);
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseGrammarContent:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  grammar children nodes
- *
- * parse the content of a RelaxNG grammar node.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
-                              xmlNodePtr nodes)
-{
-    int ret = 0, tmp;
-
-    if (nodes == NULL) {
-        xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_EMPTY,
-                   "grammar has no children\n", NULL, NULL);
-        return (-1);
-    }
-    while (nodes != NULL) {
-        if (IS_RELAXNG(nodes, "start")) {
-            if (nodes->children == NULL) {
-                xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY,
-                           "start has no children\n", NULL, NULL);
-            } else {
-                tmp = xmlRelaxNGParseStart(ctxt, nodes->children);
-                if (tmp != 0)
-                    ret = -1;
-            }
-        } else if (IS_RELAXNG(nodes, "define")) {
-            tmp = xmlRelaxNGParseDefine(ctxt, nodes);
-            if (tmp != 0)
-                ret = -1;
-        } else if (IS_RELAXNG(nodes, "include")) {
-            tmp = xmlRelaxNGParseInclude(ctxt, nodes);
-            if (tmp != 0)
-                ret = -1;
-        } else {
-            xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
-                       "grammar has unexpected child %s\n", nodes->name,
-                       NULL);
-            ret = -1;
-        }
-        nodes = nodes->next;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCheckReference:
- * @ref:  the ref
- * @ctxt:  a Relax-NG parser context
- * @name:  the name associated to the defines
- *
- * Applies the 4.17. combine attribute rule for all the define
- * element of a given grammar using the same name.
- */
-static void
-xmlRelaxNGCheckReference(xmlRelaxNGDefinePtr ref,
-                         xmlRelaxNGParserCtxtPtr ctxt,
-                         const xmlChar * name)
-{
-    xmlRelaxNGGrammarPtr grammar;
-    xmlRelaxNGDefinePtr def, cur;
-
-    /*
-     * Those rules don't apply to imported ref from xmlRelaxNGParseImportRef
-     */
-    if (ref->dflags & IS_EXTERNAL_REF)
-        return;
-
-    grammar = ctxt->grammar;
-    if (grammar == NULL) {
-        xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
-                   "Internal error: no grammar in CheckReference %s\n",
-                   name, NULL);
-        return;
-    }
-    if (ref->content != NULL) {
-        xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
-                   "Internal error: reference has content in CheckReference %s\n",
-                   name, NULL);
-        return;
-    }
-    if (grammar->defs != NULL) {
-        def = xmlHashLookup(grammar->defs, name);
-        if (def != NULL) {
-            cur = ref;
-            while (cur != NULL) {
-                cur->content = def;
-                cur = cur->nextHash;
-            }
-        } else {
-            xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
-                       "Reference %s has no matching definition\n", name,
-                       NULL);
-        }
-    } else {
-        xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
-                   "Reference %s has no matching definition\n", name,
-                   NULL);
-    }
-}
-
-/**
- * xmlRelaxNGCheckCombine:
- * @define:  the define(s) list
- * @ctxt:  a Relax-NG parser context
- * @name:  the name associated to the defines
- *
- * Applies the 4.17. combine attribute rule for all the define
- * element of a given grammar using the same name.
- */
-static void
-xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
-                       xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * name)
-{
-    xmlChar *combine;
-    int choiceOrInterleave = -1;
-    int missing = 0;
-    xmlRelaxNGDefinePtr cur, last, tmp, tmp2;
-
-    if (define->nextHash == NULL)
-        return;
-    cur = define;
-    while (cur != NULL) {
-        combine = xmlGetProp(cur->node, BAD_CAST "combine");
-        if (combine != NULL) {
-            if (xmlStrEqual(combine, BAD_CAST "choice")) {
-                if (choiceOrInterleave == -1)
-                    choiceOrInterleave = 1;
-                else if (choiceOrInterleave == 0) {
-                    xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
-                               "Defines for %s use both 'choice' and 'interleave'\n",
-                               name, NULL);
-                }
-            } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
-                if (choiceOrInterleave == -1)
-                    choiceOrInterleave = 0;
-                else if (choiceOrInterleave == 1) {
-                    xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
-                               "Defines for %s use both 'choice' and 'interleave'\n",
-                               name, NULL);
-                }
-            } else {
-                xmlRngPErr(ctxt, define->node, XML_RNGP_UNKNOWN_COMBINE,
-                           "Defines for %s use unknown combine value '%s''\n",
-                           name, combine);
-            }
-            xmlFree(combine);
-        } else {
-            if (missing == 0)
-                missing = 1;
-            else {
-                xmlRngPErr(ctxt, define->node, XML_RNGP_NEED_COMBINE,
-                           "Some defines for %s needs the combine attribute\n",
-                           name, NULL);
-            }
-        }
-
-        cur = cur->nextHash;
-    }
-#ifdef DEBUG
-    xmlGenericError(xmlGenericErrorContext,
-                    "xmlRelaxNGCheckCombine(): merging %s defines: %d\n",
-                    name, choiceOrInterleave);
-#endif
-    if (choiceOrInterleave == -1)
-        choiceOrInterleave = 0;
-    cur = xmlRelaxNGNewDefine(ctxt, define->node);
-    if (cur == NULL)
-        return;
-    if (choiceOrInterleave == 0)
-        cur->type = XML_RELAXNG_INTERLEAVE;
-    else
-        cur->type = XML_RELAXNG_CHOICE;
-    tmp = define;
-    last = NULL;
-    while (tmp != NULL) {
-        if (tmp->content != NULL) {
-            if (tmp->content->next != NULL) {
-                /*
-                 * we need first to create a wrapper.
-                 */
-                tmp2 = xmlRelaxNGNewDefine(ctxt, tmp->content->node);
-                if (tmp2 == NULL)
-                    break;
-                tmp2->type = XML_RELAXNG_GROUP;
-                tmp2->content = tmp->content;
-            } else {
-                tmp2 = tmp->content;
-            }
-            if (last == NULL) {
-                cur->content = tmp2;
-            } else {
-                last->next = tmp2;
-            }
-            last = tmp2;
-        }
-        tmp->content = cur;
-        tmp = tmp->nextHash;
-    }
-    define->content = cur;
-    if (choiceOrInterleave == 0) {
-        if (ctxt->interleaves == NULL)
-            ctxt->interleaves = xmlHashCreate(10);
-        if (ctxt->interleaves == NULL) {
-            xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
-                       "Failed to create interleaves hash table\n", NULL,
-                       NULL);
-        } else {
-            char tmpname[32];
-
-            snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
-            if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
-                0) {
-                xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
-                           "Failed to add %s to hash table\n",
-			   (const xmlChar *) tmpname, NULL);
-            }
-        }
-    }
-}
-
-/**
- * xmlRelaxNGCombineStart:
- * @ctxt:  a Relax-NG parser context
- * @grammar:  the grammar
- *
- * Applies the 4.17. combine rule for all the start
- * element of a given grammar.
- */
-static void
-xmlRelaxNGCombineStart(xmlRelaxNGParserCtxtPtr ctxt,
-                       xmlRelaxNGGrammarPtr grammar)
-{
-    xmlRelaxNGDefinePtr starts;
-    xmlChar *combine;
-    int choiceOrInterleave = -1;
-    int missing = 0;
-    xmlRelaxNGDefinePtr cur;
-
-    starts = grammar->start;
-    if ((starts == NULL) || (starts->next == NULL))
-        return;
-    cur = starts;
-    while (cur != NULL) {
-        if ((cur->node == NULL) || (cur->node->parent == NULL) ||
-            (!xmlStrEqual(cur->node->parent->name, BAD_CAST "start"))) {
-            combine = NULL;
-            xmlRngPErr(ctxt, cur->node, XML_RNGP_START_MISSING,
-                       "Internal error: start element not found\n", NULL,
-                       NULL);
-        } else {
-            combine = xmlGetProp(cur->node->parent, BAD_CAST "combine");
-        }
-
-        if (combine != NULL) {
-            if (xmlStrEqual(combine, BAD_CAST "choice")) {
-                if (choiceOrInterleave == -1)
-                    choiceOrInterleave = 1;
-                else if (choiceOrInterleave == 0) {
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
-                               "<start> use both 'choice' and 'interleave'\n",
-                               NULL, NULL);
-                }
-            } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
-                if (choiceOrInterleave == -1)
-                    choiceOrInterleave = 0;
-                else if (choiceOrInterleave == 1) {
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
-                               "<start> use both 'choice' and 'interleave'\n",
-                               NULL, NULL);
-                }
-            } else {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_UNKNOWN_COMBINE,
-                           "<start> uses unknown combine value '%s''\n",
-                           combine, NULL);
-            }
-            xmlFree(combine);
-        } else {
-            if (missing == 0)
-                missing = 1;
-            else {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_NEED_COMBINE,
-                           "Some <start> element miss the combine attribute\n",
-                           NULL, NULL);
-            }
-        }
-
-        cur = cur->next;
-    }
-#ifdef DEBUG
-    xmlGenericError(xmlGenericErrorContext,
-                    "xmlRelaxNGCombineStart(): merging <start>: %d\n",
-                    choiceOrInterleave);
-#endif
-    if (choiceOrInterleave == -1)
-        choiceOrInterleave = 0;
-    cur = xmlRelaxNGNewDefine(ctxt, starts->node);
-    if (cur == NULL)
-        return;
-    if (choiceOrInterleave == 0)
-        cur->type = XML_RELAXNG_INTERLEAVE;
-    else
-        cur->type = XML_RELAXNG_CHOICE;
-    cur->content = grammar->start;
-    grammar->start = cur;
-    if (choiceOrInterleave == 0) {
-        if (ctxt->interleaves == NULL)
-            ctxt->interleaves = xmlHashCreate(10);
-        if (ctxt->interleaves == NULL) {
-            xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
-                       "Failed to create interleaves hash table\n", NULL,
-                       NULL);
-        } else {
-            char tmpname[32];
-
-            snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
-            if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
-                0) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
-                           "Failed to add %s to hash table\n",
-			   (const xmlChar *) tmpname, NULL);
-            }
-        }
-    }
-}
-
-/**
- * xmlRelaxNGCheckCycles:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  grammar children nodes
- * @depth:  the counter
- *
- * Check for cycles.
- *
- * Returns 0 if check passed, and -1 in case of error
- */
-static int
-xmlRelaxNGCheckCycles(xmlRelaxNGParserCtxtPtr ctxt,
-                      xmlRelaxNGDefinePtr cur, int depth)
-{
-    int ret = 0;
-
-    while ((ret == 0) && (cur != NULL)) {
-        if ((cur->type == XML_RELAXNG_REF) ||
-            (cur->type == XML_RELAXNG_PARENTREF)) {
-            if (cur->depth == -1) {
-                cur->depth = depth;
-                ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
-                cur->depth = -2;
-            } else if (depth == cur->depth) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_CYCLE,
-                           "Detected a cycle in %s references\n",
-                           cur->name, NULL);
-                return (-1);
-            }
-        } else if (cur->type == XML_RELAXNG_ELEMENT) {
-            ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth + 1);
-        } else {
-            ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
-        }
-        cur = cur->next;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGTryUnlink:
- * @ctxt:  a Relax-NG parser context
- * @cur:  the definition to unlink
- * @parent:  the parent definition
- * @prev:  the previous sibling definition
- *
- * Try to unlink a definition. If not possble make it a NOOP
- *
- * Returns the new prev definition
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGTryUnlink(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                    xmlRelaxNGDefinePtr cur,
-                    xmlRelaxNGDefinePtr parent, xmlRelaxNGDefinePtr prev)
-{
-    if (prev != NULL) {
-        prev->next = cur->next;
-    } else {
-        if (parent != NULL) {
-            if (parent->content == cur)
-                parent->content = cur->next;
-            else if (parent->attrs == cur)
-                parent->attrs = cur->next;
-            else if (parent->nameClass == cur)
-                parent->nameClass = cur->next;
-        } else {
-            cur->type = XML_RELAXNG_NOOP;
-            prev = cur;
-        }
-    }
-    return (prev);
-}
-
-/**
- * xmlRelaxNGSimplify:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  grammar children nodes
- *
- * Check for simplification of empty and notAllowed
- */
-static void
-xmlRelaxNGSimplify(xmlRelaxNGParserCtxtPtr ctxt,
-                   xmlRelaxNGDefinePtr cur, xmlRelaxNGDefinePtr parent)
-{
-    xmlRelaxNGDefinePtr prev = NULL;
-
-    while (cur != NULL) {
-        if ((cur->type == XML_RELAXNG_REF) ||
-            (cur->type == XML_RELAXNG_PARENTREF)) {
-            if (cur->depth != -3) {
-                cur->depth = -3;
-                xmlRelaxNGSimplify(ctxt, cur->content, cur);
-            }
-        } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
-            cur->parent = parent;
-            if ((parent != NULL) &&
-                ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
-                 (parent->type == XML_RELAXNG_LIST) ||
-                 (parent->type == XML_RELAXNG_GROUP) ||
-                 (parent->type == XML_RELAXNG_INTERLEAVE) ||
-                 (parent->type == XML_RELAXNG_ONEORMORE) ||
-                 (parent->type == XML_RELAXNG_ZEROORMORE))) {
-                parent->type = XML_RELAXNG_NOT_ALLOWED;
-                break;
-            }
-            if ((parent != NULL) && (parent->type == XML_RELAXNG_CHOICE)) {
-                prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
-            } else
-                prev = cur;
-        } else if (cur->type == XML_RELAXNG_EMPTY) {
-            cur->parent = parent;
-            if ((parent != NULL) &&
-                ((parent->type == XML_RELAXNG_ONEORMORE) ||
-                 (parent->type == XML_RELAXNG_ZEROORMORE))) {
-                parent->type = XML_RELAXNG_EMPTY;
-                break;
-            }
-            if ((parent != NULL) &&
-                ((parent->type == XML_RELAXNG_GROUP) ||
-                 (parent->type == XML_RELAXNG_INTERLEAVE))) {
-                prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
-            } else
-                prev = cur;
-        } else {
-            cur->parent = parent;
-            if (cur->content != NULL)
-                xmlRelaxNGSimplify(ctxt, cur->content, cur);
-            if ((cur->type != XML_RELAXNG_VALUE) && (cur->attrs != NULL))
-                xmlRelaxNGSimplify(ctxt, cur->attrs, cur);
-            if (cur->nameClass != NULL)
-                xmlRelaxNGSimplify(ctxt, cur->nameClass, cur);
-            /*
-             * On Elements, try to move attribute only generating rules on
-             * the attrs rules.
-             */
-            if (cur->type == XML_RELAXNG_ELEMENT) {
-                int attronly;
-                xmlRelaxNGDefinePtr tmp, pre;
-
-                while (cur->content != NULL) {
-                    attronly =
-                        xmlRelaxNGGenerateAttributes(ctxt, cur->content);
-                    if (attronly == 1) {
-                        /*
-                         * migrate cur->content to attrs
-                         */
-                        tmp = cur->content;
-                        cur->content = tmp->next;
-                        tmp->next = cur->attrs;
-                        cur->attrs = tmp;
-                    } else {
-                        /*
-                         * cur->content can generate elements or text
-                         */
-                        break;
-                    }
-                }
-                pre = cur->content;
-                while ((pre != NULL) && (pre->next != NULL)) {
-                    tmp = pre->next;
-                    attronly = xmlRelaxNGGenerateAttributes(ctxt, tmp);
-                    if (attronly == 1) {
-                        /*
-                         * migrate tmp to attrs
-                         */
-                        pre->next = tmp->next;
-                        tmp->next = cur->attrs;
-                        cur->attrs = tmp;
-                    } else {
-                        pre = tmp;
-                    }
-                }
-            }
-            /*
-             * This may result in a simplification
-             */
-            if ((cur->type == XML_RELAXNG_GROUP) ||
-                (cur->type == XML_RELAXNG_INTERLEAVE)) {
-                if (cur->content == NULL)
-                    cur->type = XML_RELAXNG_EMPTY;
-                else if (cur->content->next == NULL) {
-                    if ((parent == NULL) && (prev == NULL)) {
-                        cur->type = XML_RELAXNG_NOOP;
-                    } else if (prev == NULL) {
-                        parent->content = cur->content;
-                        cur->content->next = cur->next;
-                        cur = cur->content;
-                    } else {
-                        cur->content->next = cur->next;
-                        prev->next = cur->content;
-                        cur = cur->content;
-                    }
-                }
-            }
-            /*
-             * the current node may have been transformed back
-             */
-            if ((cur->type == XML_RELAXNG_EXCEPT) &&
-                (cur->content != NULL) &&
-                (cur->content->type == XML_RELAXNG_NOT_ALLOWED)) {
-                prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
-            } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
-                if ((parent != NULL) &&
-                    ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
-                     (parent->type == XML_RELAXNG_LIST) ||
-                     (parent->type == XML_RELAXNG_GROUP) ||
-                     (parent->type == XML_RELAXNG_INTERLEAVE) ||
-                     (parent->type == XML_RELAXNG_ONEORMORE) ||
-                     (parent->type == XML_RELAXNG_ZEROORMORE))) {
-                    parent->type = XML_RELAXNG_NOT_ALLOWED;
-                    break;
-                }
-                if ((parent != NULL) &&
-                    (parent->type == XML_RELAXNG_CHOICE)) {
-                    prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
-                } else
-                    prev = cur;
-            } else if (cur->type == XML_RELAXNG_EMPTY) {
-                if ((parent != NULL) &&
-                    ((parent->type == XML_RELAXNG_ONEORMORE) ||
-                     (parent->type == XML_RELAXNG_ZEROORMORE))) {
-                    parent->type = XML_RELAXNG_EMPTY;
-                    break;
-                }
-                if ((parent != NULL) &&
-                    ((parent->type == XML_RELAXNG_GROUP) ||
-                     (parent->type == XML_RELAXNG_INTERLEAVE) ||
-                     (parent->type == XML_RELAXNG_CHOICE))) {
-                    prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
-                } else
-                    prev = cur;
-            } else {
-                prev = cur;
-            }
-        }
-        cur = cur->next;
-    }
-}
-
-/**
- * xmlRelaxNGGroupContentType:
- * @ct1:  the first content type
- * @ct2:  the second content type
- *
- * Try to group 2 content types
- *
- * Returns the content type
- */
-static xmlRelaxNGContentType
-xmlRelaxNGGroupContentType(xmlRelaxNGContentType ct1,
-                           xmlRelaxNGContentType ct2)
-{
-    if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
-        (ct2 == XML_RELAXNG_CONTENT_ERROR))
-        return (XML_RELAXNG_CONTENT_ERROR);
-    if (ct1 == XML_RELAXNG_CONTENT_EMPTY)
-        return (ct2);
-    if (ct2 == XML_RELAXNG_CONTENT_EMPTY)
-        return (ct1);
-    if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) &&
-        (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
-        return (XML_RELAXNG_CONTENT_COMPLEX);
-    return (XML_RELAXNG_CONTENT_ERROR);
-}
-
-/**
- * xmlRelaxNGMaxContentType:
- * @ct1:  the first content type
- * @ct2:  the second content type
- *
- * Compute the max content-type
- *
- * Returns the content type
- */
-static xmlRelaxNGContentType
-xmlRelaxNGMaxContentType(xmlRelaxNGContentType ct1,
-                         xmlRelaxNGContentType ct2)
-{
-    if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
-        (ct2 == XML_RELAXNG_CONTENT_ERROR))
-        return (XML_RELAXNG_CONTENT_ERROR);
-    if ((ct1 == XML_RELAXNG_CONTENT_SIMPLE) ||
-        (ct2 == XML_RELAXNG_CONTENT_SIMPLE))
-        return (XML_RELAXNG_CONTENT_SIMPLE);
-    if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) ||
-        (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
-        return (XML_RELAXNG_CONTENT_COMPLEX);
-    return (XML_RELAXNG_CONTENT_EMPTY);
-}
-
-/**
- * xmlRelaxNGCheckRules:
- * @ctxt:  a Relax-NG parser context
- * @cur:  the current definition
- * @flags:  some accumulated flags
- * @ptype:  the parent type
- *
- * Check for rules in section 7.1 and 7.2
- *
- * Returns the content type of @cur
- */
-static xmlRelaxNGContentType
-xmlRelaxNGCheckRules(xmlRelaxNGParserCtxtPtr ctxt,
-                     xmlRelaxNGDefinePtr cur, int flags,
-                     xmlRelaxNGType ptype)
-{
-    int nflags;
-    xmlRelaxNGContentType ret, tmp, val = XML_RELAXNG_CONTENT_EMPTY;
-
-    while (cur != NULL) {
-        ret = XML_RELAXNG_CONTENT_EMPTY;
-        if ((cur->type == XML_RELAXNG_REF) ||
-            (cur->type == XML_RELAXNG_PARENTREF)) {
-           /*
-            * This should actually be caught by list//element(ref) at the
-            * element boundaries, c.f. Bug #159968 local refs are dropped
-            * in step 4.19.
-            */
-#if 0
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_REF,
-                           "Found forbidden pattern list//ref\n", NULL,
-                           NULL);
-            }
-#endif
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_REF,
-                           "Found forbidden pattern data/except//ref\n",
-                           NULL, NULL);
-            }
-            if (cur->content == NULL) {
-                if (cur->type == XML_RELAXNG_PARENTREF)
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF,
-                               "Internal found no define for parent refs\n",
-                               NULL, NULL);
-                else
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF,
-                               "Internal found no define for ref %s\n",
-                               (cur->name ? cur->name: BAD_CAST "null"), NULL);
-            }
-            if (cur->depth > -4) {
-                cur->depth = -4;
-                ret = xmlRelaxNGCheckRules(ctxt, cur->content,
-                                           flags, cur->type);
-                cur->depth = ret - 15;
-            } else if (cur->depth == -4) {
-                ret = XML_RELAXNG_CONTENT_COMPLEX;
-            } else {
-                ret = (xmlRelaxNGContentType) (cur->depth + 15);
-            }
-        } else if (cur->type == XML_RELAXNG_ELEMENT) {
-            /*
-             * The 7.3 Attribute derivation rule for groups is plugged there
-             */
-            xmlRelaxNGCheckGroupAttrs(ctxt, cur);
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ELEM,
-                           "Found forbidden pattern data/except//element(ref)\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ELEM,
-                           "Found forbidden pattern list//element(ref)\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
-                           "Found forbidden pattern attribute//element(ref)\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
-                           "Found forbidden pattern attribute//element(ref)\n",
-                           NULL, NULL);
-            }
-            /*
-             * reset since in the simple form elements are only child
-             * of grammar/define
-             */
-            nflags = 0;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->attrs, nflags, cur->type);
-            if (ret != XML_RELAXNG_CONTENT_EMPTY) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_EMPTY,
-                           "Element %s attributes have a content type error\n",
-                           cur->name, NULL);
-            }
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-            if (ret == XML_RELAXNG_CONTENT_ERROR) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_ERROR,
-                           "Element %s has a content type error\n",
-                           cur->name, NULL);
-            } else {
-                ret = XML_RELAXNG_CONTENT_COMPLEX;
-            }
-        } else if (cur->type == XML_RELAXNG_ATTRIBUTE) {
-            if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ATTR,
-                           "Found forbidden pattern attribute//attribute\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ATTR,
-                           "Found forbidden pattern list//attribute\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_OOMGROUP) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_GROUP_ATTR,
-                           "Found forbidden pattern oneOrMore//group//attribute\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_OOMINTERLEAVE) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR,
-                           "Found forbidden pattern oneOrMore//interleave//attribute\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ATTR,
-                           "Found forbidden pattern data/except//attribute\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ATTR,
-                           "Found forbidden pattern start//attribute\n",
-                           NULL, NULL);
-            }
-            if ((!(flags & XML_RELAXNG_IN_ONEORMORE))
-                && (cur->name == NULL)) {
-                if (cur->ns == NULL) {
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_ANYNAME_ATTR_ANCESTOR,
-                               "Found anyName attribute without oneOrMore ancestor\n",
-                               NULL, NULL);
-                } else {
-                    xmlRngPErr(ctxt, cur->node, XML_RNGP_NSNAME_ATTR_ANCESTOR,
-                               "Found nsName attribute without oneOrMore ancestor\n",
-                               NULL, NULL);
-                }
-            }
-            nflags = flags | XML_RELAXNG_IN_ATTRIBUTE;
-            xmlRelaxNGCheckRules(ctxt, cur->content, nflags, cur->type);
-            ret = XML_RELAXNG_CONTENT_EMPTY;
-        } else if ((cur->type == XML_RELAXNG_ONEORMORE) ||
-                   (cur->type == XML_RELAXNG_ZEROORMORE)) {
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ONEMORE,
-                           "Found forbidden pattern data/except//oneOrMore\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ONEMORE,
-                           "Found forbidden pattern start//oneOrMore\n",
-                           NULL, NULL);
-            }
-            nflags = flags | XML_RELAXNG_IN_ONEORMORE;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-            ret = xmlRelaxNGGroupContentType(ret, ret);
-        } else if (cur->type == XML_RELAXNG_LIST) {
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_LIST,
-                           "Found forbidden pattern list//list\n", NULL,
-                           NULL);
-            }
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_LIST,
-                           "Found forbidden pattern data/except//list\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_LIST,
-                           "Found forbidden pattern start//list\n", NULL,
-                           NULL);
-            }
-            nflags = flags | XML_RELAXNG_IN_LIST;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-        } else if (cur->type == XML_RELAXNG_GROUP) {
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_GROUP,
-                           "Found forbidden pattern data/except//group\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_GROUP,
-                           "Found forbidden pattern start//group\n", NULL,
-                           NULL);
-            }
-            if (flags & XML_RELAXNG_IN_ONEORMORE)
-                nflags = flags | XML_RELAXNG_IN_OOMGROUP;
-            else
-                nflags = flags;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-            /*
-             * The 7.3 Attribute derivation rule for groups is plugged there
-             */
-            xmlRelaxNGCheckGroupAttrs(ctxt, cur);
-        } else if (cur->type == XML_RELAXNG_INTERLEAVE) {
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_INTERLEAVE,
-                           "Found forbidden pattern list//interleave\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
-                           "Found forbidden pattern data/except//interleave\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
-                           "Found forbidden pattern start//interleave\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_ONEORMORE)
-                nflags = flags | XML_RELAXNG_IN_OOMINTERLEAVE;
-            else
-                nflags = flags;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-        } else if (cur->type == XML_RELAXNG_EXCEPT) {
-            if ((cur->parent != NULL) &&
-                (cur->parent->type == XML_RELAXNG_DATATYPE))
-                nflags = flags | XML_RELAXNG_IN_DATAEXCEPT;
-            else
-                nflags = flags;
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
-                                     cur->type);
-        } else if (cur->type == XML_RELAXNG_DATATYPE) {
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_DATA,
-                           "Found forbidden pattern start//data\n", NULL,
-                           NULL);
-            }
-            xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
-            ret = XML_RELAXNG_CONTENT_SIMPLE;
-        } else if (cur->type == XML_RELAXNG_VALUE) {
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_VALUE,
-                           "Found forbidden pattern start//value\n", NULL,
-                           NULL);
-            }
-            xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
-            ret = XML_RELAXNG_CONTENT_SIMPLE;
-        } else if (cur->type == XML_RELAXNG_TEXT) {
-            if (flags & XML_RELAXNG_IN_LIST) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_TEXT,
-                           "Found forbidden pattern list//text\n", NULL,
-                           NULL);
-            }
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_TEXT,
-                           "Found forbidden pattern data/except//text\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_TEXT,
-                           "Found forbidden pattern start//text\n", NULL,
-                           NULL);
-            }
-            ret = XML_RELAXNG_CONTENT_COMPLEX;
-        } else if (cur->type == XML_RELAXNG_EMPTY) {
-            if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_EMPTY,
-                           "Found forbidden pattern data/except//empty\n",
-                           NULL, NULL);
-            }
-            if (flags & XML_RELAXNG_IN_START) {
-                xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_EMPTY,
-                           "Found forbidden pattern start//empty\n", NULL,
-                           NULL);
-            }
-            ret = XML_RELAXNG_CONTENT_EMPTY;
-        } else if (cur->type == XML_RELAXNG_CHOICE) {
-            xmlRelaxNGCheckChoiceDeterminism(ctxt, cur);
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
-        } else {
-            ret =
-                xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
-        }
-        cur = cur->next;
-        if (ptype == XML_RELAXNG_GROUP) {
-            val = xmlRelaxNGGroupContentType(val, ret);
-        } else if (ptype == XML_RELAXNG_INTERLEAVE) {
-            /*
-             * TODO: scan complain that tmp is never used, seems on purpose
-             *       need double-checking
-             */
-            tmp = xmlRelaxNGGroupContentType(val, ret);
-            if (tmp != XML_RELAXNG_CONTENT_ERROR)
-                tmp = xmlRelaxNGMaxContentType(val, ret);
-        } else if (ptype == XML_RELAXNG_CHOICE) {
-            val = xmlRelaxNGMaxContentType(val, ret);
-        } else if (ptype == XML_RELAXNG_LIST) {
-            val = XML_RELAXNG_CONTENT_SIMPLE;
-        } else if (ptype == XML_RELAXNG_EXCEPT) {
-            if (ret == XML_RELAXNG_CONTENT_ERROR)
-                val = XML_RELAXNG_CONTENT_ERROR;
-            else
-                val = XML_RELAXNG_CONTENT_SIMPLE;
-        } else {
-            val = xmlRelaxNGGroupContentType(val, ret);
-        }
-
-    }
-    return (val);
-}
-
-/**
- * xmlRelaxNGParseGrammar:
- * @ctxt:  a Relax-NG parser context
- * @nodes:  grammar children nodes
- *
- * parse a Relax-NG <grammar> node
- *
- * Returns the internal xmlRelaxNGGrammarPtr built or
- *         NULL in case of error
- */
-static xmlRelaxNGGrammarPtr
-xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
-{
-    xmlRelaxNGGrammarPtr ret, tmp, old;
-
-#ifdef DEBUG_GRAMMAR
-    xmlGenericError(xmlGenericErrorContext, "Parsing a new grammar\n");
-#endif
-
-    ret = xmlRelaxNGNewGrammar(ctxt);
-    if (ret == NULL)
-        return (NULL);
-
-    /*
-     * Link the new grammar in the tree
-     */
-    ret->parent = ctxt->grammar;
-    if (ctxt->grammar != NULL) {
-        tmp = ctxt->grammar->children;
-        if (tmp == NULL) {
-            ctxt->grammar->children = ret;
-        } else {
-            while (tmp->next != NULL)
-                tmp = tmp->next;
-            tmp->next = ret;
-        }
-    }
-
-    old = ctxt->grammar;
-    ctxt->grammar = ret;
-    xmlRelaxNGParseGrammarContent(ctxt, nodes);
-    ctxt->grammar = ret;
-    if (ctxt->grammar == NULL) {
-        xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
-                   "Failed to parse <grammar> content\n", NULL, NULL);
-    } else if (ctxt->grammar->start == NULL) {
-        xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_NO_START,
-                   "Element <grammar> has no <start>\n", NULL, NULL);
-    }
-
-    /*
-     * Apply 4.17 merging rules to defines and starts
-     */
-    xmlRelaxNGCombineStart(ctxt, ret);
-    if (ret->defs != NULL) {
-        xmlHashScan(ret->defs, (xmlHashScanner) xmlRelaxNGCheckCombine,
-                    ctxt);
-    }
-
-    /*
-     * link together defines and refs in this grammar
-     */
-    if (ret->refs != NULL) {
-        xmlHashScan(ret->refs, (xmlHashScanner) xmlRelaxNGCheckReference,
-                    ctxt);
-    }
-
-
-    /* @@@@ */
-
-    ctxt->grammar = old;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGParseDocument:
- * @ctxt:  a Relax-NG parser context
- * @node:  the root node of the RelaxNG schema
- *
- * parse a Relax-NG definition resource and build an internal
- * xmlRelaxNG struture which can be used to validate instances.
- *
- * Returns the internal XML RelaxNG structure built or
- *         NULL in case of error
- */
-static xmlRelaxNGPtr
-xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlRelaxNGPtr schema = NULL;
-    const xmlChar *olddefine;
-    xmlRelaxNGGrammarPtr old;
-
-    if ((ctxt == NULL) || (node == NULL))
-        return (NULL);
-
-    schema = xmlRelaxNGNewRelaxNG(ctxt);
-    if (schema == NULL)
-        return (NULL);
-
-    olddefine = ctxt->define;
-    ctxt->define = NULL;
-    if (IS_RELAXNG(node, "grammar")) {
-        schema->topgrammar = xmlRelaxNGParseGrammar(ctxt, node->children);
-        if (schema->topgrammar == NULL) {
-            xmlRelaxNGFree(schema);
-            return (NULL);
-        }
-    } else {
-        xmlRelaxNGGrammarPtr tmp, ret;
-
-        schema->topgrammar = ret = xmlRelaxNGNewGrammar(ctxt);
-        if (schema->topgrammar == NULL) {
-            xmlRelaxNGFree(schema);
-            return (NULL);
-        }
-        /*
-         * Link the new grammar in the tree
-         */
-        ret->parent = ctxt->grammar;
-        if (ctxt->grammar != NULL) {
-            tmp = ctxt->grammar->children;
-            if (tmp == NULL) {
-                ctxt->grammar->children = ret;
-            } else {
-                while (tmp->next != NULL)
-                    tmp = tmp->next;
-                tmp->next = ret;
-            }
-        }
-        old = ctxt->grammar;
-        ctxt->grammar = ret;
-        xmlRelaxNGParseStart(ctxt, node);
-        if (old != NULL)
-            ctxt->grammar = old;
-    }
-    ctxt->define = olddefine;
-    if (schema->topgrammar->start != NULL) {
-        xmlRelaxNGCheckCycles(ctxt, schema->topgrammar->start, 0);
-        if ((ctxt->flags & XML_RELAXNG_IN_EXTERNALREF) == 0) {
-            xmlRelaxNGSimplify(ctxt, schema->topgrammar->start, NULL);
-            while ((schema->topgrammar->start != NULL) &&
-                   (schema->topgrammar->start->type == XML_RELAXNG_NOOP) &&
-                   (schema->topgrammar->start->next != NULL))
-                schema->topgrammar->start =
-                    schema->topgrammar->start->content;
-            xmlRelaxNGCheckRules(ctxt, schema->topgrammar->start,
-                                 XML_RELAXNG_IN_START, XML_RELAXNG_NOOP);
-        }
-    }
-#ifdef DEBUG
-    if (schema == NULL)
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlRelaxNGParseDocument() failed\n");
-#endif
-
-    return (schema);
-}
-
-/************************************************************************
- *									*
- *			Reading RelaxNGs				*
- *									*
- ************************************************************************/
-
-/**
- * xmlRelaxNGNewParserCtxt:
- * @URL:  the location of the schema
- *
- * Create an XML RelaxNGs parse context for that file/resource expected
- * to contain an XML RelaxNGs file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewParserCtxt(const char *URL)
-{
-    xmlRelaxNGParserCtxtPtr ret;
-
-    if (URL == NULL)
-        return (NULL);
-
-    ret =
-        (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
-    if (ret == NULL) {
-        xmlRngPErrMemory(NULL, "building parser\n");
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
-    ret->URL = xmlStrdup((const xmlChar *) URL);
-    ret->error = xmlGenericError;
-    ret->userData = xmlGenericErrorContext;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGNewMemParserCtxt:
- * @buffer:  a pointer to a char array containing the schemas
- * @size:  the size of the array
- *
- * Create an XML RelaxNGs parse context for that memory buffer expected
- * to contain an XML RelaxNGs file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewMemParserCtxt(const char *buffer, int size)
-{
-    xmlRelaxNGParserCtxtPtr ret;
-
-    if ((buffer == NULL) || (size <= 0))
-        return (NULL);
-
-    ret =
-        (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
-    if (ret == NULL) {
-        xmlRngPErrMemory(NULL, "building parser\n");
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
-    ret->buffer = buffer;
-    ret->size = size;
-    ret->error = xmlGenericError;
-    ret->userData = xmlGenericErrorContext;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGNewDocParserCtxt:
- * @doc:  a preparsed document tree
- *
- * Create an XML RelaxNGs parser context for that document.
- * Note: since the process of compiling a RelaxNG schemas modifies the
- *       document, the @doc parameter is duplicated internally.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewDocParserCtxt(xmlDocPtr doc)
-{
-    xmlRelaxNGParserCtxtPtr ret;
-    xmlDocPtr copy;
-
-    if (doc == NULL)
-        return (NULL);
-    copy = xmlCopyDoc(doc, 1);
-    if (copy == NULL)
-        return (NULL);
-
-    ret =
-        (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
-    if (ret == NULL) {
-        xmlRngPErrMemory(NULL, "building parser\n");
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
-    ret->document = copy;
-    ret->freedoc = 1;
-    ret->userData = xmlGenericErrorContext;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGFreeParserCtxt:
- * @ctxt:  the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlRelaxNGFreeParserCtxt(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->URL != NULL)
-        xmlFree(ctxt->URL);
-    if (ctxt->doc != NULL)
-        xmlRelaxNGFreeDocument(ctxt->doc);
-    if (ctxt->interleaves != NULL)
-        xmlHashFree(ctxt->interleaves, NULL);
-    if (ctxt->documents != NULL)
-        xmlRelaxNGFreeDocumentList(ctxt->documents);
-    if (ctxt->includes != NULL)
-        xmlRelaxNGFreeIncludeList(ctxt->includes);
-    if (ctxt->docTab != NULL)
-        xmlFree(ctxt->docTab);
-    if (ctxt->incTab != NULL)
-        xmlFree(ctxt->incTab);
-    if (ctxt->defTab != NULL) {
-        int i;
-
-        for (i = 0; i < ctxt->defNr; i++)
-            xmlRelaxNGFreeDefine(ctxt->defTab[i]);
-        xmlFree(ctxt->defTab);
-    }
-    if ((ctxt->document != NULL) && (ctxt->freedoc))
-        xmlFreeDoc(ctxt->document);
-    xmlFree(ctxt);
-}
-
-/**
- * xmlRelaxNGNormExtSpace:
- * @value:  a value
- *
- * Removes the leading and ending spaces of the value
- * The string is modified "in situ"
- */
-static void
-xmlRelaxNGNormExtSpace(xmlChar * value)
-{
-    xmlChar *start = value;
-    xmlChar *cur = value;
-
-    if (value == NULL)
-        return;
-
-    while (IS_BLANK_CH(*cur))
-        cur++;
-    if (cur == start) {
-        do {
-            while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
-                cur++;
-            if (*cur == 0)
-                return;
-            start = cur;
-            while (IS_BLANK_CH(*cur))
-                cur++;
-            if (*cur == 0) {
-                *start = 0;
-                return;
-            }
-        } while (1);
-    } else {
-        do {
-            while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
-                *start++ = *cur++;
-            if (*cur == 0) {
-                *start = 0;
-                return;
-            }
-            /* don't try to normalize the inner spaces */
-            while (IS_BLANK_CH(*cur))
-                cur++;
-            if (*cur == 0) {
-                *start = 0;
-                return;
-            }
-            *start++ = *cur++;
-        } while (1);
-    }
-}
-
-/**
- * xmlRelaxNGCleanupAttributes:
- * @ctxt:  a Relax-NG parser context
- * @node:  a Relax-NG node
- *
- * Check all the attributes on the given node
- */
-static void
-xmlRelaxNGCleanupAttributes(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlAttrPtr cur, next;
-
-    cur = node->properties;
-    while (cur != NULL) {
-        next = cur->next;
-        if ((cur->ns == NULL) ||
-            (xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
-            if (xmlStrEqual(cur->name, BAD_CAST "name")) {
-                if ((!xmlStrEqual(node->name, BAD_CAST "element")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "attribute")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "ref")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "parentRef")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "param")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "define"))) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
-                               "Attribute %s is not allowed on %s\n",
-                               cur->name, node->name);
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "type")) {
-                if ((!xmlStrEqual(node->name, BAD_CAST "value")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "data"))) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
-                               "Attribute %s is not allowed on %s\n",
-                               cur->name, node->name);
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "href")) {
-                if ((!xmlStrEqual(node->name, BAD_CAST "externalRef")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "include"))) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
-                               "Attribute %s is not allowed on %s\n",
-                               cur->name, node->name);
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "combine")) {
-                if ((!xmlStrEqual(node->name, BAD_CAST "start")) &&
-                    (!xmlStrEqual(node->name, BAD_CAST "define"))) {
-                    xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
-                               "Attribute %s is not allowed on %s\n",
-                               cur->name, node->name);
-                }
-            } else if (xmlStrEqual(cur->name, BAD_CAST "datatypeLibrary")) {
-                xmlChar *val;
-                xmlURIPtr uri;
-
-                val = xmlNodeListGetString(node->doc, cur->children, 1);
-                if (val != NULL) {
-                    if (val[0] != 0) {
-                        uri = xmlParseURI((const char *) val);
-                        if (uri == NULL) {
-                            xmlRngPErr(ctxt, node, XML_RNGP_INVALID_URI,
-                                       "Attribute %s contains invalid URI %s\n",
-                                       cur->name, val);
-                        } else {
-                            if (uri->scheme == NULL) {
-                                xmlRngPErr(ctxt, node, XML_RNGP_URI_NOT_ABSOLUTE,
-                                           "Attribute %s URI %s is not absolute\n",
-                                           cur->name, val);
-                            }
-                            if (uri->fragment != NULL) {
-                                xmlRngPErr(ctxt, node, XML_RNGP_URI_FRAGMENT,
-                                           "Attribute %s URI %s has a fragment ID\n",
-                                           cur->name, val);
-                            }
-                            xmlFreeURI(uri);
-                        }
-                    }
-                    xmlFree(val);
-                }
-            } else if (!xmlStrEqual(cur->name, BAD_CAST "ns")) {
-                xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_ATTRIBUTE,
-                           "Unknown attribute %s on %s\n", cur->name,
-                           node->name);
-            }
-        }
-        cur = next;
-    }
-}
-
-/**
- * xmlRelaxNGCleanupTree:
- * @ctxt:  a Relax-NG parser context
- * @root:  an xmlNodePtr subtree
- *
- * Cleanup the subtree from unwanted nodes for parsing, resolve
- * Include and externalRef lookups.
- */
-static void
-xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
-{
-    xmlNodePtr cur, delete;
-
-    delete = NULL;
-    cur = root;
-    while (cur != NULL) {
-        if (delete != NULL) {
-            xmlUnlinkNode(delete);
-            xmlFreeNode(delete);
-            delete = NULL;
-        }
-        if (cur->type == XML_ELEMENT_NODE) {
-            /*
-             * Simplification 4.1. Annotations
-             */
-            if ((cur->ns == NULL) ||
-                (!xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
-                if ((cur->parent != NULL) &&
-                    (cur->parent->type == XML_ELEMENT_NODE) &&
-                    ((xmlStrEqual(cur->parent->name, BAD_CAST "name")) ||
-                     (xmlStrEqual(cur->parent->name, BAD_CAST "value")) ||
-                     (xmlStrEqual(cur->parent->name, BAD_CAST "param")))) {
-                    xmlRngPErr(ctxt, cur, XML_RNGP_FOREIGN_ELEMENT,
-                               "element %s doesn't allow foreign elements\n",
-                               cur->parent->name, NULL);
-                }
-                delete = cur;
-                goto skip_children;
-            } else {
-                xmlRelaxNGCleanupAttributes(ctxt, cur);
-                if (xmlStrEqual(cur->name, BAD_CAST "externalRef")) {
-                    xmlChar *href, *ns, *base, *URL;
-                    xmlRelaxNGDocumentPtr docu;
-                    xmlNodePtr tmp;
-		    xmlURIPtr uri;
-
-                    ns = xmlGetProp(cur, BAD_CAST "ns");
-                    if (ns == NULL) {
-                        tmp = cur->parent;
-                        while ((tmp != NULL) &&
-                               (tmp->type == XML_ELEMENT_NODE)) {
-                            ns = xmlGetProp(tmp, BAD_CAST "ns");
-                            if (ns != NULL)
-                                break;
-                            tmp = tmp->parent;
-                        }
-                    }
-                    href = xmlGetProp(cur, BAD_CAST "href");
-                    if (href == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
-                                   "xmlRelaxNGParse: externalRef has no href attribute\n",
-                                   NULL, NULL);
-                        if (ns != NULL)
-                            xmlFree(ns);
-                        delete = cur;
-                        goto skip_children;
-                    }
-		    uri = xmlParseURI((const char *) href);
-		    if (uri == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
-                                   "Incorrect URI for externalRef %s\n",
-                                   href, NULL);
-                        if (ns != NULL)
-                            xmlFree(ns);
-                        if (href != NULL)
-                            xmlFree(href);
-                        delete = cur;
-                        goto skip_children;
-		    }
-		    if (uri->fragment != NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
-			       "Fragment forbidden in URI for externalRef %s\n",
-                                   href, NULL);
-                        if (ns != NULL)
-                            xmlFree(ns);
-		        xmlFreeURI(uri);
-                        if (href != NULL)
-                            xmlFree(href);
-                        delete = cur;
-                        goto skip_children;
-		    }
-		    xmlFreeURI(uri);
-                    base = xmlNodeGetBase(cur->doc, cur);
-                    URL = xmlBuildURI(href, base);
-                    if (URL == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
-                                   "Failed to compute URL for externalRef %s\n",
-                                   href, NULL);
-                        if (ns != NULL)
-                            xmlFree(ns);
-                        if (href != NULL)
-                            xmlFree(href);
-                        if (base != NULL)
-                            xmlFree(base);
-                        delete = cur;
-                        goto skip_children;
-                    }
-                    if (href != NULL)
-                        xmlFree(href);
-                    if (base != NULL)
-                        xmlFree(base);
-                    docu = xmlRelaxNGLoadExternalRef(ctxt, URL, ns);
-                    if (docu == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_EXTERNAL_REF_FAILURE,
-                                   "Failed to load externalRef %s\n", URL,
-                                   NULL);
-                        if (ns != NULL)
-                            xmlFree(ns);
-                        xmlFree(URL);
-                        delete = cur;
-                        goto skip_children;
-                    }
-                    if (ns != NULL)
-                        xmlFree(ns);
-                    xmlFree(URL);
-                    cur->psvi = docu;
-                } else if (xmlStrEqual(cur->name, BAD_CAST "include")) {
-                    xmlChar *href, *ns, *base, *URL;
-                    xmlRelaxNGIncludePtr incl;
-                    xmlNodePtr tmp;
-
-                    href = xmlGetProp(cur, BAD_CAST "href");
-                    if (href == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
-                                   "xmlRelaxNGParse: include has no href attribute\n",
-                                   NULL, NULL);
-                        delete = cur;
-                        goto skip_children;
-                    }
-                    base = xmlNodeGetBase(cur->doc, cur);
-                    URL = xmlBuildURI(href, base);
-                    if (URL == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
-                                   "Failed to compute URL for include %s\n",
-                                   href, NULL);
-                        if (href != NULL)
-                            xmlFree(href);
-                        if (base != NULL)
-                            xmlFree(base);
-                        delete = cur;
-                        goto skip_children;
-                    }
-                    if (href != NULL)
-                        xmlFree(href);
-                    if (base != NULL)
-                        xmlFree(base);
-                    ns = xmlGetProp(cur, BAD_CAST "ns");
-                    if (ns == NULL) {
-                        tmp = cur->parent;
-                        while ((tmp != NULL) &&
-                               (tmp->type == XML_ELEMENT_NODE)) {
-                            ns = xmlGetProp(tmp, BAD_CAST "ns");
-                            if (ns != NULL)
-                                break;
-                            tmp = tmp->parent;
-                        }
-                    }
-                    incl = xmlRelaxNGLoadInclude(ctxt, URL, cur, ns);
-                    if (ns != NULL)
-                        xmlFree(ns);
-                    if (incl == NULL) {
-                        xmlRngPErr(ctxt, cur, XML_RNGP_INCLUDE_FAILURE,
-                                   "Failed to load include %s\n", URL,
-                                   NULL);
-                        xmlFree(URL);
-                        delete = cur;
-                        goto skip_children;
-                    }
-                    xmlFree(URL);
-                    cur->psvi = incl;
-                } else if ((xmlStrEqual(cur->name, BAD_CAST "element")) ||
-                           (xmlStrEqual(cur->name, BAD_CAST "attribute")))
-                {
-                    xmlChar *name, *ns;
-                    xmlNodePtr text = NULL;
-
-                    /*
-                     * Simplification 4.8. name attribute of element
-                     * and attribute elements
-                     */
-                    name = xmlGetProp(cur, BAD_CAST "name");
-                    if (name != NULL) {
-                        if (cur->children == NULL) {
-                            text =
-                                xmlNewChild(cur, cur->ns, BAD_CAST "name",
-                                            name);
-                        } else {
-                            xmlNodePtr node;
-
-                            node = xmlNewDocNode(cur->doc, cur->ns,
-			                         BAD_CAST "name", NULL);
-                            if (node != NULL) {
-                                xmlAddPrevSibling(cur->children, node);
-                                text = xmlNewText(name);
-                                xmlAddChild(node, text);
-                                text = node;
-                            }
-                        }
-                        if (text == NULL) {
-                            xmlRngPErr(ctxt, cur, XML_RNGP_CREATE_FAILURE,
-                                       "Failed to create a name %s element\n",
-                                       name, NULL);
-                        }
-                        xmlUnsetProp(cur, BAD_CAST "name");
-                        xmlFree(name);
-                        ns = xmlGetProp(cur, BAD_CAST "ns");
-                        if (ns != NULL) {
-                            if (text != NULL) {
-                                xmlSetProp(text, BAD_CAST "ns", ns);
-                                /* xmlUnsetProp(cur, BAD_CAST "ns"); */
-                            }
-                            xmlFree(ns);
-                        } else if (xmlStrEqual(cur->name,
-                                               BAD_CAST "attribute")) {
-                            xmlSetProp(text, BAD_CAST "ns", BAD_CAST "");
-                        }
-                    }
-                } else if ((xmlStrEqual(cur->name, BAD_CAST "name")) ||
-                           (xmlStrEqual(cur->name, BAD_CAST "nsName")) ||
-                           (xmlStrEqual(cur->name, BAD_CAST "value"))) {
-                    /*
-                     * Simplification 4.8. name attribute of element
-                     * and attribute elements
-                     */
-                    if (xmlHasProp(cur, BAD_CAST "ns") == NULL) {
-                        xmlNodePtr node;
-                        xmlChar *ns = NULL;
-
-                        node = cur->parent;
-                        while ((node != NULL) &&
-                               (node->type == XML_ELEMENT_NODE)) {
-                            ns = xmlGetProp(node, BAD_CAST "ns");
-                            if (ns != NULL) {
-                                break;
-                            }
-                            node = node->parent;
-                        }
-                        if (ns == NULL) {
-                            xmlSetProp(cur, BAD_CAST "ns", BAD_CAST "");
-                        } else {
-                            xmlSetProp(cur, BAD_CAST "ns", ns);
-                            xmlFree(ns);
-                        }
-                    }
-                    if (xmlStrEqual(cur->name, BAD_CAST "name")) {
-                        xmlChar *name, *local, *prefix;
-
-                        /*
-                         * Simplification: 4.10. QNames
-                         */
-                        name = xmlNodeGetContent(cur);
-                        if (name != NULL) {
-                            local = xmlSplitQName2(name, &prefix);
-                            if (local != NULL) {
-                                xmlNsPtr ns;
-
-                                ns = xmlSearchNs(cur->doc, cur, prefix);
-                                if (ns == NULL) {
-                                    xmlRngPErr(ctxt, cur,
-                                               XML_RNGP_PREFIX_UNDEFINED,
-                                               "xmlRelaxNGParse: no namespace for prefix %s\n",
-                                               prefix, NULL);
-                                } else {
-                                    xmlSetProp(cur, BAD_CAST "ns",
-                                               ns->href);
-                                    xmlNodeSetContent(cur, local);
-                                }
-                                xmlFree(local);
-                                xmlFree(prefix);
-                            }
-                            xmlFree(name);
-                        }
-                    }
-                    /*
-                     * 4.16
-                     */
-                    if (xmlStrEqual(cur->name, BAD_CAST "nsName")) {
-                        if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
-                            xmlRngPErr(ctxt, cur,
-                                       XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME,
-                                       "Found nsName/except//nsName forbidden construct\n",
-                                       NULL, NULL);
-                        }
-                    }
-                } else if ((xmlStrEqual(cur->name, BAD_CAST "except")) &&
-                           (cur != root)) {
-                    int oldflags = ctxt->flags;
-
-                    /*
-                     * 4.16
-                     */
-                    if ((cur->parent != NULL) &&
-                        (xmlStrEqual
-                         (cur->parent->name, BAD_CAST "anyName"))) {
-                        ctxt->flags |= XML_RELAXNG_IN_ANYEXCEPT;
-                        xmlRelaxNGCleanupTree(ctxt, cur);
-                        ctxt->flags = oldflags;
-                        goto skip_children;
-                    } else if ((cur->parent != NULL) &&
-                               (xmlStrEqual
-                                (cur->parent->name, BAD_CAST "nsName"))) {
-                        ctxt->flags |= XML_RELAXNG_IN_NSEXCEPT;
-                        xmlRelaxNGCleanupTree(ctxt, cur);
-                        ctxt->flags = oldflags;
-                        goto skip_children;
-                    }
-                } else if (xmlStrEqual(cur->name, BAD_CAST "anyName")) {
-                    /*
-                     * 4.16
-                     */
-                    if (ctxt->flags & XML_RELAXNG_IN_ANYEXCEPT) {
-                        xmlRngPErr(ctxt, cur,
-                                   XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME,
-                                   "Found anyName/except//anyName forbidden construct\n",
-                                   NULL, NULL);
-                    } else if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
-                        xmlRngPErr(ctxt, cur,
-                                   XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME,
-                                   "Found nsName/except//anyName forbidden construct\n",
-                                   NULL, NULL);
-                    }
-                }
-                /*
-                 * This is not an else since "include" is transformed
-                 * into a div
-                 */
-                if (xmlStrEqual(cur->name, BAD_CAST "div")) {
-                    xmlChar *ns;
-                    xmlNodePtr child, ins, tmp;
-
-                    /*
-                     * implements rule 4.11
-                     */
-
-                    ns = xmlGetProp(cur, BAD_CAST "ns");
-
-                    child = cur->children;
-                    ins = cur;
-                    while (child != NULL) {
-                        if (ns != NULL) {
-                            if (!xmlHasProp(child, BAD_CAST "ns")) {
-                                xmlSetProp(child, BAD_CAST "ns", ns);
-                            }
-                        }
-                        tmp = child->next;
-                        xmlUnlinkNode(child);
-                        ins = xmlAddNextSibling(ins, child);
-                        child = tmp;
-                    }
-                    if (ns != NULL)
-                        xmlFree(ns);
-		    /*
-		     * Since we are about to delete cur, if its nsDef is non-NULL we
-		     * need to preserve it (it contains the ns definitions for the
-		     * children we just moved).  We'll just stick it on to the end
-		     * of cur->parent's list, since it's never going to be re-serialized
-		     * (bug 143738).
-		     */
-		    if ((cur->nsDef != NULL) && (cur->parent != NULL)) {
-			xmlNsPtr parDef = (xmlNsPtr)&cur->parent->nsDef;
-			while (parDef->next != NULL)
-			    parDef = parDef->next;
-			parDef->next = cur->nsDef;
-			cur->nsDef = NULL;
-		    }
-                    delete = cur;
-                    goto skip_children;
-                }
-            }
-        }
-        /*
-         * Simplification 4.2 whitespaces
-         */
-        else if ((cur->type == XML_TEXT_NODE) ||
-                 (cur->type == XML_CDATA_SECTION_NODE)) {
-            if (IS_BLANK_NODE(cur)) {
-                if ((cur->parent != NULL) &&
-		    (cur->parent->type == XML_ELEMENT_NODE)) {
-                    if ((!xmlStrEqual(cur->parent->name, BAD_CAST "value"))
-                        &&
-                        (!xmlStrEqual
-                         (cur->parent->name, BAD_CAST "param")))
-                        delete = cur;
-                } else {
-                    delete = cur;
-                    goto skip_children;
-                }
-            }
-        } else {
-            delete = cur;
-            goto skip_children;
-        }
-
-        /*
-         * Skip to next node
-         */
-        if (cur->children != NULL) {
-            if ((cur->children->type != XML_ENTITY_DECL) &&
-                (cur->children->type != XML_ENTITY_REF_NODE) &&
-                (cur->children->type != XML_ENTITY_NODE)) {
-                cur = cur->children;
-                continue;
-            }
-        }
-      skip_children:
-        if (cur->next != NULL) {
-            cur = cur->next;
-            continue;
-        }
-
-        do {
-            cur = cur->parent;
-            if (cur == NULL)
-                break;
-            if (cur == root) {
-                cur = NULL;
-                break;
-            }
-            if (cur->next != NULL) {
-                cur = cur->next;
-                break;
-            }
-        } while (cur != NULL);
-    }
-    if (delete != NULL) {
-        xmlUnlinkNode(delete);
-        xmlFreeNode(delete);
-        delete = NULL;
-    }
-}
-
-/**
- * xmlRelaxNGCleanupDoc:
- * @ctxt:  a Relax-NG parser context
- * @doc:  an xmldocPtr document pointer
- *
- * Cleanup the document from unwanted nodes for parsing, resolve
- * Include and externalRef lookups.
- *
- * Returns the cleaned up document or NULL in case of error
- */
-static xmlDocPtr
-xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt, xmlDocPtr doc)
-{
-    xmlNodePtr root;
-
-    /*
-     * Extract the root
-     */
-    root = xmlDocGetRootElement(doc);
-    if (root == NULL) {
-        xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
-                   ctxt->URL, NULL);
-        return (NULL);
-    }
-    xmlRelaxNGCleanupTree(ctxt, root);
-    return (doc);
-}
-
-/**
- * xmlRelaxNGParse:
- * @ctxt:  a Relax-NG parser context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML RelaxNG structure built from the resource or
- *         NULL in case of error
- */
-xmlRelaxNGPtr
-xmlRelaxNGParse(xmlRelaxNGParserCtxtPtr ctxt)
-{
-    xmlRelaxNGPtr ret = NULL;
-    xmlDocPtr doc;
-    xmlNodePtr root;
-
-    xmlRelaxNGInitTypes();
-
-    if (ctxt == NULL)
-        return (NULL);
-
-    /*
-     * First step is to parse the input document into an DOM/Infoset
-     */
-    if (ctxt->URL != NULL) {
-        doc = xmlReadFile((const char *) ctxt->URL,NULL,0);
-        if (doc == NULL) {
-            xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
-                       "xmlRelaxNGParse: could not load %s\n", ctxt->URL,
-                       NULL);
-            return (NULL);
-        }
-    } else if (ctxt->buffer != NULL) {
-        doc = xmlReadMemory(ctxt->buffer, ctxt->size,NULL,NULL,0);
-        if (doc == NULL) {
-            xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
-                       "xmlRelaxNGParse: could not parse schemas\n", NULL,
-                       NULL);
-            return (NULL);
-        }
-        doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
-        ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
-    } else if (ctxt->document != NULL) {
-        doc = ctxt->document;
-    } else {
-        xmlRngPErr(ctxt, NULL, XML_RNGP_EMPTY,
-                   "xmlRelaxNGParse: nothing to parse\n", NULL, NULL);
-        return (NULL);
-    }
-    ctxt->document = doc;
-
-    /*
-     * Some preprocessing of the document content
-     */
-    doc = xmlRelaxNGCleanupDoc(ctxt, doc);
-    if (doc == NULL) {
-        xmlFreeDoc(ctxt->document);
-        ctxt->document = NULL;
-        return (NULL);
-    }
-
-    /*
-     * Then do the parsing for good
-     */
-    root = xmlDocGetRootElement(doc);
-    if (root == NULL) {
-        xmlRngPErr(ctxt, (xmlNodePtr) doc,
-	           XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
-                   (ctxt->URL ? ctxt->URL : BAD_CAST "schemas"), NULL);
-
-        xmlFreeDoc(ctxt->document);
-        ctxt->document = NULL;
-        return (NULL);
-    }
-    ret = xmlRelaxNGParseDocument(ctxt, root);
-    if (ret == NULL) {
-        xmlFreeDoc(ctxt->document);
-        ctxt->document = NULL;
-        return (NULL);
-    }
-
-    /*
-     * Check the ref/defines links
-     */
-    /*
-     * try to preprocess interleaves
-     */
-    if (ctxt->interleaves != NULL) {
-        xmlHashScan(ctxt->interleaves,
-                    (xmlHashScanner) xmlRelaxNGComputeInterleaves, ctxt);
-    }
-
-    /*
-     * if there was a parsing error return NULL
-     */
-    if (ctxt->nbErrors > 0) {
-        xmlRelaxNGFree(ret);
-        ctxt->document = NULL;
-        xmlFreeDoc(doc);
-        return (NULL);
-    }
-
-    /*
-     * try to compile (parts of) the schemas
-     */
-    if ((ret->topgrammar != NULL) && (ret->topgrammar->start != NULL)) {
-        if (ret->topgrammar->start->type != XML_RELAXNG_START) {
-            xmlRelaxNGDefinePtr def;
-
-            def = xmlRelaxNGNewDefine(ctxt, NULL);
-            if (def != NULL) {
-                def->type = XML_RELAXNG_START;
-                def->content = ret->topgrammar->start;
-                ret->topgrammar->start = def;
-            }
-        }
-        xmlRelaxNGTryCompile(ctxt, ret->topgrammar->start);
-    }
-
-    /*
-     * Transfer the pointer for cleanup at the schema level.
-     */
-    ret->doc = doc;
-    ctxt->document = NULL;
-    ret->documents = ctxt->documents;
-    ctxt->documents = NULL;
-
-    ret->includes = ctxt->includes;
-    ctxt->includes = NULL;
-    ret->defNr = ctxt->defNr;
-    ret->defTab = ctxt->defTab;
-    ctxt->defTab = NULL;
-    if (ctxt->idref == 1)
-        ret->idref = 1;
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGSetParserErrors:
- * @ctxt:  a Relax-NG validation context
- * @err:  the error callback
- * @warn:  the warning callback
- * @ctx:  contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a validation context
- */
-void
-xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
-                          xmlRelaxNGValidityErrorFunc err,
-                          xmlRelaxNGValidityWarningFunc warn, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->error = err;
-    ctxt->warning = warn;
-    ctxt->serror = NULL;
-    ctxt->userData = ctx;
-}
-
-/**
- * xmlRelaxNGGetParserErrors:
- * @ctxt:  a Relax-NG validation context
- * @err:  the error callback result
- * @warn:  the warning callback result
- * @ctx:  contextual data for the callbacks result
- *
- * Get the callback information used to handle errors for a validation context
- *
- * Returns -1 in case of failure, 0 otherwise.
- */
-int
-xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
-                          xmlRelaxNGValidityErrorFunc * err,
-                          xmlRelaxNGValidityWarningFunc * warn, void **ctx)
-{
-    if (ctxt == NULL)
-        return (-1);
-    if (err != NULL)
-        *err = ctxt->error;
-    if (warn != NULL)
-        *warn = ctxt->warning;
-    if (ctx != NULL)
-        *ctx = ctxt->userData;
-    return (0);
-}
-
-/**
- * xmlRelaxNGSetParserStructuredErrors:
- * @ctxt:  a Relax-NG parser context
- * @serror:  the error callback
- * @ctx:  contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a parsing context
- */
-void
-xmlRelaxNGSetParserStructuredErrors(xmlRelaxNGParserCtxtPtr ctxt,
-				    xmlStructuredErrorFunc serror,
-				    void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->serror = serror;
-    ctxt->error = NULL;
-    ctxt->warning = NULL;
-    ctxt->userData = ctx;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-/************************************************************************
- *									*
- *			Dump back a compiled form			*
- *									*
- ************************************************************************/
-static void xmlRelaxNGDumpDefine(FILE * output,
-                                 xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGDumpDefines:
- * @output:  the file output
- * @defines:  a list of define structures
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpDefines(FILE * output, xmlRelaxNGDefinePtr defines)
-{
-    while (defines != NULL) {
-        xmlRelaxNGDumpDefine(output, defines);
-        defines = defines->next;
-    }
-}
-
-/**
- * xmlRelaxNGDumpDefine:
- * @output:  the file output
- * @define:  a define structure
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpDefine(FILE * output, xmlRelaxNGDefinePtr define)
-{
-    if (define == NULL)
-        return;
-    switch (define->type) {
-        case XML_RELAXNG_EMPTY:
-            fprintf(output, "<empty/>\n");
-            break;
-        case XML_RELAXNG_NOT_ALLOWED:
-            fprintf(output, "<notAllowed/>\n");
-            break;
-        case XML_RELAXNG_TEXT:
-            fprintf(output, "<text/>\n");
-            break;
-        case XML_RELAXNG_ELEMENT:
-            fprintf(output, "<element>\n");
-            if (define->name != NULL) {
-                fprintf(output, "<name");
-                if (define->ns != NULL)
-                    fprintf(output, " ns=\"%s\"", define->ns);
-                fprintf(output, ">%s</name>\n", define->name);
-            }
-            xmlRelaxNGDumpDefines(output, define->attrs);
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</element>\n");
-            break;
-        case XML_RELAXNG_LIST:
-            fprintf(output, "<list>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</list>\n");
-            break;
-        case XML_RELAXNG_ONEORMORE:
-            fprintf(output, "<oneOrMore>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</oneOrMore>\n");
-            break;
-        case XML_RELAXNG_ZEROORMORE:
-            fprintf(output, "<zeroOrMore>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</zeroOrMore>\n");
-            break;
-        case XML_RELAXNG_CHOICE:
-            fprintf(output, "<choice>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</choice>\n");
-            break;
-        case XML_RELAXNG_GROUP:
-            fprintf(output, "<group>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</group>\n");
-            break;
-        case XML_RELAXNG_INTERLEAVE:
-            fprintf(output, "<interleave>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</interleave>\n");
-            break;
-        case XML_RELAXNG_OPTIONAL:
-            fprintf(output, "<optional>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</optional>\n");
-            break;
-        case XML_RELAXNG_ATTRIBUTE:
-            fprintf(output, "<attribute>\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</attribute>\n");
-            break;
-        case XML_RELAXNG_DEF:
-            fprintf(output, "<define");
-            if (define->name != NULL)
-                fprintf(output, " name=\"%s\"", define->name);
-            fprintf(output, ">\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</define>\n");
-            break;
-        case XML_RELAXNG_REF:
-            fprintf(output, "<ref");
-            if (define->name != NULL)
-                fprintf(output, " name=\"%s\"", define->name);
-            fprintf(output, ">\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</ref>\n");
-            break;
-        case XML_RELAXNG_PARENTREF:
-            fprintf(output, "<parentRef");
-            if (define->name != NULL)
-                fprintf(output, " name=\"%s\"", define->name);
-            fprintf(output, ">\n");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</parentRef>\n");
-            break;
-        case XML_RELAXNG_EXTERNALREF:
-            fprintf(output, "<externalRef>");
-            xmlRelaxNGDumpDefines(output, define->content);
-            fprintf(output, "</externalRef>\n");
-            break;
-        case XML_RELAXNG_DATATYPE:
-        case XML_RELAXNG_VALUE:
-            TODO break;
-        case XML_RELAXNG_START:
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_PARAM:
-            TODO break;
-        case XML_RELAXNG_NOOP:
-            xmlRelaxNGDumpDefines(output, define->content);
-            break;
-    }
-}
-
-/**
- * xmlRelaxNGDumpGrammar:
- * @output:  the file output
- * @grammar:  a grammar structure
- * @top:  is this a top grammar
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpGrammar(FILE * output, xmlRelaxNGGrammarPtr grammar, int top)
-{
-    if (grammar == NULL)
-        return;
-
-    fprintf(output, "<grammar");
-    if (top)
-        fprintf(output, " xmlns=\"http://relaxng.org/ns/structure/1.0\"");
-    switch (grammar->combine) {
-        case XML_RELAXNG_COMBINE_UNDEFINED:
-            break;
-        case XML_RELAXNG_COMBINE_CHOICE:
-            fprintf(output, " combine=\"choice\"");
-            break;
-        case XML_RELAXNG_COMBINE_INTERLEAVE:
-            fprintf(output, " combine=\"interleave\"");
-            break;
-        default:
-            fprintf(output, " <!-- invalid combine value -->");
-    }
-    fprintf(output, ">\n");
-    if (grammar->start == NULL) {
-        fprintf(output, " <!-- grammar had no start -->");
-    } else {
-        fprintf(output, "<start>\n");
-        xmlRelaxNGDumpDefine(output, grammar->start);
-        fprintf(output, "</start>\n");
-    }
-    /* TODO ? Dump the defines ? */
-    fprintf(output, "</grammar>\n");
-}
-
-/**
- * xmlRelaxNGDump:
- * @output:  the file output
- * @schema:  a schema structure
- *
- * Dump a RelaxNG structure back
- */
-void
-xmlRelaxNGDump(FILE * output, xmlRelaxNGPtr schema)
-{
-    if (output == NULL)
-        return;
-    if (schema == NULL) {
-        fprintf(output, "RelaxNG empty or failed to compile\n");
-        return;
-    }
-    fprintf(output, "RelaxNG: ");
-    if (schema->doc == NULL) {
-        fprintf(output, "no document\n");
-    } else if (schema->doc->URL != NULL) {
-        fprintf(output, "%s\n", schema->doc->URL);
-    } else {
-        fprintf(output, "\n");
-    }
-    if (schema->topgrammar == NULL) {
-        fprintf(output, "RelaxNG has no top grammar\n");
-        return;
-    }
-    xmlRelaxNGDumpGrammar(output, schema->topgrammar, 1);
-}
-
-/**
- * xmlRelaxNGDumpTree:
- * @output:  the file output
- * @schema:  a schema structure
- *
- * Dump the transformed RelaxNG tree.
- */
-void
-xmlRelaxNGDumpTree(FILE * output, xmlRelaxNGPtr schema)
-{
-    if (output == NULL)
-        return;
-    if (schema == NULL) {
-        fprintf(output, "RelaxNG empty or failed to compile\n");
-        return;
-    }
-    if (schema->doc == NULL) {
-        fprintf(output, "no document\n");
-    } else {
-        xmlDocDump(output, schema->doc);
-    }
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- *									*
- *		Validation of compiled content				*
- *									*
- ************************************************************************/
-static int xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
-                                        xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGValidateCompiledCallback:
- * @exec:  the regular expression instance
- * @token:  the token which matched
- * @transdata:  callback data, the define for the subelement if available
- @ @inputdata:  callback data, the Relax NG validation context
- *
- * Handle the callback and if needed validate the element children.
- */
-static void
-xmlRelaxNGValidateCompiledCallback(xmlRegExecCtxtPtr exec ATTRIBUTE_UNUSED,
-                                   const xmlChar * token,
-                                   void *transdata, void *inputdata)
-{
-    xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
-    xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
-    int ret;
-
-#ifdef DEBUG_COMPILE
-    xmlGenericError(xmlGenericErrorContext,
-                    "Compiled callback for: '%s'\n", token);
-#endif
-    if (ctxt == NULL) {
-        fprintf(stderr, "callback on %s missing context\n", token);
-        return;
-    }
-    if (define == NULL) {
-        if (token[0] == '#')
-            return;
-        fprintf(stderr, "callback on %s missing define\n", token);
-        if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        return;
-    }
-    if ((ctxt == NULL) || (define == NULL)) {
-        fprintf(stderr, "callback on %s missing info\n", token);
-        if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        return;
-    } else if (define->type != XML_RELAXNG_ELEMENT) {
-        fprintf(stderr, "callback on %s define is not element\n", token);
-        if (ctxt->errNo == XML_RELAXNG_OK)
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        return;
-    }
-    ret = xmlRelaxNGValidateDefinition(ctxt, define);
-    if (ret != 0)
-        ctxt->perr = ret;
-}
-
-/**
- * xmlRelaxNGValidateCompiledContent:
- * @ctxt:  the RelaxNG validation context
- * @regexp:  the regular expression as compiled
- * @content:  list of children to test against the regexp
- *
- * Validate the content model of an element or start using the regexp
- *
- * Returns 0 in case of success, -1 in case of error.
- */
-static int
-xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
-                                  xmlRegexpPtr regexp, xmlNodePtr content)
-{
-    xmlRegExecCtxtPtr exec;
-    xmlNodePtr cur;
-    int ret = 0;
-    int oldperr;
-
-    if ((ctxt == NULL) || (regexp == NULL))
-        return (-1);
-    oldperr = ctxt->perr;
-    exec = xmlRegNewExecCtxt(regexp,
-                             xmlRelaxNGValidateCompiledCallback, ctxt);
-    ctxt->perr = 0;
-    cur = content;
-    while (cur != NULL) {
-        ctxt->state->seq = cur;
-        switch (cur->type) {
-            case XML_TEXT_NODE:
-            case XML_CDATA_SECTION_NODE:
-                if (xmlIsBlankNode(cur))
-                    break;
-                ret = xmlRegExecPushString(exec, BAD_CAST "#text", ctxt);
-                if (ret < 0) {
-                    VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG,
-                               cur->parent->name);
-                }
-                break;
-            case XML_ELEMENT_NODE:
-                if (cur->ns != NULL) {
-                    ret = xmlRegExecPushString2(exec, cur->name,
-                                                cur->ns->href, ctxt);
-                } else {
-                    ret = xmlRegExecPushString(exec, cur->name, ctxt);
-                }
-                if (ret < 0) {
-                    VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, cur->name);
-                }
-                break;
-            default:
-                break;
-        }
-        if (ret < 0)
-            break;
-        /*
-         * Switch to next element
-         */
-        cur = cur->next;
-    }
-    ret = xmlRegExecPushString(exec, NULL, NULL);
-    if (ret == 1) {
-        ret = 0;
-        ctxt->state->seq = NULL;
-    } else if (ret == 0) {
-        /*
-         * TODO: get some of the names needed to exit the current state of exec
-         */
-        VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
-        ret = -1;
-        if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-            xmlRelaxNGDumpValidError(ctxt);
-    } else {
-        ret = -1;
-    }
-    xmlRegFreeExecCtxt(exec);
-    /*
-     * There might be content model errors outside of the pure
-     * regexp validation, e.g. for attribute values.
-     */
-    if ((ret == 0) && (ctxt->perr != 0)) {
-        ret = ctxt->perr;
-    }
-    ctxt->perr = oldperr;
-    return (ret);
-}
-
-/************************************************************************
- *									*
- *		Progressive validation of when possible			*
- *									*
- ************************************************************************/
-static int xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
-                                           xmlRelaxNGDefinePtr defines);
-static int xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt,
-                                        int dolog);
-static void xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt);
-
-/**
- * xmlRelaxNGElemPush:
- * @ctxt:  the validation context
- * @exec:  the regexp runtime for the new content model
- *
- * Push a new regexp for the current node content model on the stack
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-static int
-xmlRelaxNGElemPush(xmlRelaxNGValidCtxtPtr ctxt, xmlRegExecCtxtPtr exec)
-{
-    if (ctxt->elemTab == NULL) {
-        ctxt->elemMax = 10;
-        ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlMalloc(ctxt->elemMax *
-                                                        sizeof
-                                                        (xmlRegExecCtxtPtr));
-        if (ctxt->elemTab == NULL) {
-            xmlRngVErrMemory(ctxt, "validating\n");
-            return (-1);
-        }
-    }
-    if (ctxt->elemNr >= ctxt->elemMax) {
-        ctxt->elemMax *= 2;
-        ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlRealloc(ctxt->elemTab,
-                                                         ctxt->elemMax *
-                                                         sizeof
-                                                         (xmlRegExecCtxtPtr));
-        if (ctxt->elemTab == NULL) {
-            xmlRngVErrMemory(ctxt, "validating\n");
-            return (-1);
-        }
-    }
-    ctxt->elemTab[ctxt->elemNr++] = exec;
-    ctxt->elem = exec;
-    return (0);
-}
-
-/**
- * xmlRelaxNGElemPop:
- * @ctxt:  the validation context
- *
- * Pop the regexp of the current node content model from the stack
- *
- * Returns the exec or NULL if empty
- */
-static xmlRegExecCtxtPtr
-xmlRelaxNGElemPop(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    xmlRegExecCtxtPtr ret;
-
-    if (ctxt->elemNr <= 0)
-        return (NULL);
-    ctxt->elemNr--;
-    ret = ctxt->elemTab[ctxt->elemNr];
-    ctxt->elemTab[ctxt->elemNr] = NULL;
-    if (ctxt->elemNr > 0)
-        ctxt->elem = ctxt->elemTab[ctxt->elemNr - 1];
-    else
-        ctxt->elem = NULL;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateProgressiveCallback:
- * @exec:  the regular expression instance
- * @token:  the token which matched
- * @transdata:  callback data, the define for the subelement if available
- @ @inputdata:  callback data, the Relax NG validation context
- *
- * Handle the callback and if needed validate the element children.
- * some of the in/out informations are passed via the context in @inputdata.
- */
-static void
-xmlRelaxNGValidateProgressiveCallback(xmlRegExecCtxtPtr exec
-                                      ATTRIBUTE_UNUSED,
-                                      const xmlChar * token,
-                                      void *transdata, void *inputdata)
-{
-    xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
-    xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
-    xmlRelaxNGValidStatePtr state, oldstate;
-    xmlNodePtr node;
-    int ret = 0, oldflags;
-
-#ifdef DEBUG_PROGRESSIVE
-    xmlGenericError(xmlGenericErrorContext,
-                    "Progressive callback for: '%s'\n", token);
-#endif
-    if (ctxt == NULL) {
-        fprintf(stderr, "callback on %s missing context\n", token);
-        return;
-    }
-    node = ctxt->pnode;
-    ctxt->pstate = 1;
-    if (define == NULL) {
-        if (token[0] == '#')
-            return;
-        fprintf(stderr, "callback on %s missing define\n", token);
-        if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        ctxt->pstate = -1;
-        return;
-    }
-    if ((ctxt == NULL) || (define == NULL)) {
-        fprintf(stderr, "callback on %s missing info\n", token);
-        if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        ctxt->pstate = -1;
-        return;
-    } else if (define->type != XML_RELAXNG_ELEMENT) {
-        fprintf(stderr, "callback on %s define is not element\n", token);
-        if (ctxt->errNo == XML_RELAXNG_OK)
-            ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
-        ctxt->pstate = -1;
-        return;
-    }
-    if (node->type != XML_ELEMENT_NODE) {
-        VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
-        if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-            xmlRelaxNGDumpValidError(ctxt);
-        ctxt->pstate = -1;
-        return;
-    }
-    if (define->contModel == NULL) {
-        /*
-         * this node cannot be validated in a streamable fashion
-         */
-#ifdef DEBUG_PROGRESSIVE
-        xmlGenericError(xmlGenericErrorContext,
-                        "Element '%s' validation is not streamable\n",
-                        token);
-#endif
-        ctxt->pstate = 0;
-        ctxt->pdef = define;
-        return;
-    }
-    exec = xmlRegNewExecCtxt(define->contModel,
-                             xmlRelaxNGValidateProgressiveCallback, ctxt);
-    if (exec == NULL) {
-        ctxt->pstate = -1;
-        return;
-    }
-    xmlRelaxNGElemPush(ctxt, exec);
-
-    /*
-     * Validate the attributes part of the content.
-     */
-    state = xmlRelaxNGNewValidState(ctxt, node);
-    if (state == NULL) {
-        ctxt->pstate = -1;
-        return;
-    }
-    oldstate = ctxt->state;
-    ctxt->state = state;
-    if (define->attrs != NULL) {
-        ret = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
-        if (ret != 0) {
-            ctxt->pstate = -1;
-            VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
-        }
-    }
-    if (ctxt->state != NULL) {
-        ctxt->state->seq = NULL;
-        ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
-        if (ret != 0) {
-            ctxt->pstate = -1;
-        }
-        xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-    } else if (ctxt->states != NULL) {
-        int tmp = -1, i;
-
-        oldflags = ctxt->flags;
-
-        for (i = 0; i < ctxt->states->nbState; i++) {
-            state = ctxt->states->tabState[i];
-            ctxt->state = state;
-            ctxt->state->seq = NULL;
-
-            if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
-                tmp = 0;
-                break;
-            }
-        }
-        if (tmp != 0) {
-            /*
-             * validation error, log the message for the "best" one
-             */
-            ctxt->flags |= FLAGS_IGNORABLE;
-            xmlRelaxNGLogBestError(ctxt);
-        }
-        for (i = 0; i < ctxt->states->nbState; i++) {
-            xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[i]);
-        }
-        xmlRelaxNGFreeStates(ctxt, ctxt->states);
-        ctxt->states = NULL;
-        if ((ret == 0) && (tmp == -1))
-            ctxt->pstate = -1;
-        ctxt->flags = oldflags;
-    }
-    if (ctxt->pstate == -1) {
-        if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
-            xmlRelaxNGDumpValidError(ctxt);
-        }
-    }
-    ctxt->state = oldstate;
-}
-
-/**
- * xmlRelaxNGValidatePushElement:
- * @ctxt:  the validation context
- * @doc:  a document instance
- * @elem:  an element instance
- *
- * Push a new element start on the RelaxNG validation stack.
- *
- * returns 1 if no validation problem was found or 0 if validating the
- *         element requires a full node, and -1 in case of error.
- */
-int
-xmlRelaxNGValidatePushElement(xmlRelaxNGValidCtxtPtr ctxt,
-                              xmlDocPtr doc ATTRIBUTE_UNUSED,
-                              xmlNodePtr elem)
-{
-    int ret = 1;
-
-    if ((ctxt == NULL) || (elem == NULL))
-        return (-1);
-
-#ifdef DEBUG_PROGRESSIVE
-    xmlGenericError(xmlGenericErrorContext, "PushElem %s\n", elem->name);
-#endif
-    if (ctxt->elem == 0) {
-        xmlRelaxNGPtr schema;
-        xmlRelaxNGGrammarPtr grammar;
-        xmlRegExecCtxtPtr exec;
-        xmlRelaxNGDefinePtr define;
-
-        schema = ctxt->schema;
-        if (schema == NULL) {
-            VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
-            return (-1);
-        }
-        grammar = schema->topgrammar;
-        if ((grammar == NULL) || (grammar->start == NULL)) {
-            VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
-            return (-1);
-        }
-        define = grammar->start;
-        if (define->contModel == NULL) {
-            ctxt->pdef = define;
-            return (0);
-        }
-        exec = xmlRegNewExecCtxt(define->contModel,
-                                 xmlRelaxNGValidateProgressiveCallback,
-                                 ctxt);
-        if (exec == NULL) {
-            return (-1);
-        }
-        xmlRelaxNGElemPush(ctxt, exec);
-    }
-    ctxt->pnode = elem;
-    ctxt->pstate = 0;
-    if (elem->ns != NULL) {
-        ret =
-            xmlRegExecPushString2(ctxt->elem, elem->name, elem->ns->href,
-                                  ctxt);
-    } else {
-        ret = xmlRegExecPushString(ctxt->elem, elem->name, ctxt);
-    }
-    if (ret < 0) {
-        VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, elem->name);
-    } else {
-        if (ctxt->pstate == 0)
-            ret = 0;
-        else if (ctxt->pstate < 0)
-            ret = -1;
-        else
-            ret = 1;
-    }
-#ifdef DEBUG_PROGRESSIVE
-    if (ret < 0)
-        xmlGenericError(xmlGenericErrorContext, "PushElem %s failed\n",
-                        elem->name);
-#endif
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidatePushCData:
- * @ctxt:  the RelaxNG validation context
- * @data:  some character data read
- * @len:  the length of the data
- *
- * check the CData parsed for validation in the current stack
- *
- * returns 1 if no validation problem was found or -1 otherwise
- */
-int
-xmlRelaxNGValidatePushCData(xmlRelaxNGValidCtxtPtr ctxt,
-                            const xmlChar * data, int len ATTRIBUTE_UNUSED)
-{
-    int ret = 1;
-
-    if ((ctxt == NULL) || (ctxt->elem == NULL) || (data == NULL))
-        return (-1);
-
-#ifdef DEBUG_PROGRESSIVE
-    xmlGenericError(xmlGenericErrorContext, "CDATA %s %d\n", data, len);
-#endif
-
-    while (*data != 0) {
-        if (!IS_BLANK_CH(*data))
-            break;
-        data++;
-    }
-    if (*data == 0)
-        return (1);
-
-    ret = xmlRegExecPushString(ctxt->elem, BAD_CAST "#text", ctxt);
-    if (ret < 0) {
-        VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG, BAD_CAST " TODO ");
-#ifdef DEBUG_PROGRESSIVE
-        xmlGenericError(xmlGenericErrorContext, "CDATA failed\n");
-#endif
-
-        return (-1);
-    }
-    return (1);
-}
-
-/**
- * xmlRelaxNGValidatePopElement:
- * @ctxt:  the RelaxNG validation context
- * @doc:  a document instance
- * @elem:  an element instance
- *
- * Pop the element end from the RelaxNG validation stack.
- *
- * returns 1 if no validation problem was found or 0 otherwise
- */
-int
-xmlRelaxNGValidatePopElement(xmlRelaxNGValidCtxtPtr ctxt,
-                             xmlDocPtr doc ATTRIBUTE_UNUSED,
-                             xmlNodePtr elem)
-{
-    int ret;
-    xmlRegExecCtxtPtr exec;
-
-    if ((ctxt == NULL) || (ctxt->elem == NULL) || (elem == NULL))
-        return (-1);
-#ifdef DEBUG_PROGRESSIVE
-    xmlGenericError(xmlGenericErrorContext, "PopElem %s\n", elem->name);
-#endif
-    /*
-     * verify that we reached a terminal state of the content model.
-     */
-    exec = xmlRelaxNGElemPop(ctxt);
-    ret = xmlRegExecPushString(exec, NULL, NULL);
-    if (ret == 0) {
-        /*
-         * TODO: get some of the names needed to exit the current state of exec
-         */
-        VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
-        ret = -1;
-    } else if (ret < 0) {
-        ret = -1;
-    } else {
-        ret = 1;
-    }
-    xmlRegFreeExecCtxt(exec);
-#ifdef DEBUG_PROGRESSIVE
-    if (ret < 0)
-        xmlGenericError(xmlGenericErrorContext, "PopElem %s failed\n",
-                        elem->name);
-#endif
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateFullElement:
- * @ctxt:  the validation context
- * @doc:  a document instance
- * @elem:  an element instance
- *
- * Validate a full subtree when xmlRelaxNGValidatePushElement() returned
- * 0 and the content of the node has been expanded.
- *
- * returns 1 if no validation problem was found or -1 in case of error.
- */
-int
-xmlRelaxNGValidateFullElement(xmlRelaxNGValidCtxtPtr ctxt,
-                              xmlDocPtr doc ATTRIBUTE_UNUSED,
-                              xmlNodePtr elem)
-{
-    int ret;
-    xmlRelaxNGValidStatePtr state;
-
-    if ((ctxt == NULL) || (ctxt->pdef == NULL) || (elem == NULL))
-        return (-1);
-#ifdef DEBUG_PROGRESSIVE
-    xmlGenericError(xmlGenericErrorContext, "FullElem %s\n", elem->name);
-#endif
-    state = xmlRelaxNGNewValidState(ctxt, elem->parent);
-    if (state == NULL) {
-        return (-1);
-    }
-    state->seq = elem;
-    ctxt->state = state;
-    ctxt->errNo = XML_RELAXNG_OK;
-    ret = xmlRelaxNGValidateDefinition(ctxt, ctxt->pdef);
-    if ((ret != 0) || (ctxt->errNo != XML_RELAXNG_OK))
-        ret = -1;
-    else
-        ret = 1;
-    xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-    ctxt->state = NULL;
-#ifdef DEBUG_PROGRESSIVE
-    if (ret < 0)
-        xmlGenericError(xmlGenericErrorContext, "FullElem %s failed\n",
-                        elem->name);
-#endif
-    return (ret);
-}
-
-/************************************************************************
- *									*
- *		Generic interpreted validation implementation		*
- *									*
- ************************************************************************/
-static int xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
-                                   xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGSkipIgnored:
- * @ctxt:  a schema validation context
- * @node:  the top node.
- *
- * Skip ignorable nodes in that context
- *
- * Returns the new sibling or NULL in case of error.
- */
-static xmlNodePtr
-xmlRelaxNGSkipIgnored(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                      xmlNodePtr node)
-{
-    /*
-     * TODO complete and handle entities
-     */
-    while ((node != NULL) &&
-           ((node->type == XML_COMMENT_NODE) ||
-            (node->type == XML_PI_NODE) ||
-	    (node->type == XML_XINCLUDE_START) ||
-	    (node->type == XML_XINCLUDE_END) ||
-            (((node->type == XML_TEXT_NODE) ||
-              (node->type == XML_CDATA_SECTION_NODE)) &&
-             ((ctxt->flags & FLAGS_MIXED_CONTENT) ||
-              (IS_BLANK_NODE(node)))))) {
-        node = node->next;
-    }
-    return (node);
-}
-
-/**
- * xmlRelaxNGNormalize:
- * @ctxt:  a schema validation context
- * @str:  the string to normalize
- *
- * Implements the  normalizeWhiteSpace( s ) function from
- * section 6.2.9 of the spec
- *
- * Returns the new string or NULL in case of error.
- */
-static xmlChar *
-xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar * str)
-{
-    xmlChar *ret, *p;
-    const xmlChar *tmp;
-    int len;
-
-    if (str == NULL)
-        return (NULL);
-    tmp = str;
-    while (*tmp != 0)
-        tmp++;
-    len = tmp - str;
-
-    ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
-    if (ret == NULL) {
-        xmlRngVErrMemory(ctxt, "validating\n");
-        return (NULL);
-    }
-    p = ret;
-    while (IS_BLANK_CH(*str))
-        str++;
-    while (*str != 0) {
-        if (IS_BLANK_CH(*str)) {
-            while (IS_BLANK_CH(*str))
-                str++;
-            if (*str == 0)
-                break;
-            *p++ = ' ';
-        } else
-            *p++ = *str++;
-    }
-    *p = 0;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDatatype:
- * @ctxt:  a Relax-NG validation context
- * @value:  the string value
- * @type:  the datatype definition
- * @node:  the node
- *
- * Validate the given value against the dataype
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDatatype(xmlRelaxNGValidCtxtPtr ctxt,
-                           const xmlChar * value,
-                           xmlRelaxNGDefinePtr define, xmlNodePtr node)
-{
-    int ret, tmp;
-    xmlRelaxNGTypeLibraryPtr lib;
-    void *result = NULL;
-    xmlRelaxNGDefinePtr cur;
-
-    if ((define == NULL) || (define->data == NULL)) {
-        return (-1);
-    }
-    lib = (xmlRelaxNGTypeLibraryPtr) define->data;
-    if (lib->check != NULL) {
-        if ((define->attrs != NULL) &&
-            (define->attrs->type == XML_RELAXNG_PARAM)) {
-            ret =
-                lib->check(lib->data, define->name, value, &result, node);
-        } else {
-            ret = lib->check(lib->data, define->name, value, NULL, node);
-        }
-    } else
-        ret = -1;
-    if (ret < 0) {
-        VALID_ERR2(XML_RELAXNG_ERR_TYPE, define->name);
-        if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
-            lib->freef(lib->data, result);
-        return (-1);
-    } else if (ret == 1) {
-        ret = 0;
-    } else if (ret == 2) {
-        VALID_ERR2P(XML_RELAXNG_ERR_DUPID, value);
-    } else {
-        VALID_ERR3P(XML_RELAXNG_ERR_TYPEVAL, define->name, value);
-        ret = -1;
-    }
-    cur = define->attrs;
-    while ((ret == 0) && (cur != NULL) && (cur->type == XML_RELAXNG_PARAM)) {
-        if (lib->facet != NULL) {
-            tmp = lib->facet(lib->data, define->name, cur->name,
-                             cur->value, value, result);
-            if (tmp != 0)
-                ret = -1;
-        }
-        cur = cur->next;
-    }
-    if ((ret == 0) && (define->content != NULL)) {
-        const xmlChar *oldvalue, *oldendvalue;
-
-        oldvalue = ctxt->state->value;
-        oldendvalue = ctxt->state->endvalue;
-        ctxt->state->value = (xmlChar *) value;
-        ctxt->state->endvalue = NULL;
-        ret = xmlRelaxNGValidateValue(ctxt, define->content);
-        ctxt->state->value = (xmlChar *) oldvalue;
-        ctxt->state->endvalue = (xmlChar *) oldendvalue;
-    }
-    if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
-        lib->freef(lib->data, result);
-    return (ret);
-}
-
-/**
- * xmlRelaxNGNextValue:
- * @ctxt:  a Relax-NG validation context
- *
- * Skip to the next value when validating within a list
- *
- * Returns 0 if the operation succeeded or an error code.
- */
-static int
-xmlRelaxNGNextValue(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    xmlChar *cur;
-
-    cur = ctxt->state->value;
-    if ((cur == NULL) || (ctxt->state->endvalue == NULL)) {
-        ctxt->state->value = NULL;
-        ctxt->state->endvalue = NULL;
-        return (0);
-    }
-    while (*cur != 0)
-        cur++;
-    while ((cur != ctxt->state->endvalue) && (*cur == 0))
-        cur++;
-    if (cur == ctxt->state->endvalue)
-        ctxt->state->value = NULL;
-    else
-        ctxt->state->value = cur;
-    return (0);
-}
-
-/**
- * xmlRelaxNGValidateValueList:
- * @ctxt:  a Relax-NG validation context
- * @defines:  the list of definitions to verify
- *
- * Validate the given set of definitions for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValueList(xmlRelaxNGValidCtxtPtr ctxt,
-                            xmlRelaxNGDefinePtr defines)
-{
-    int ret = 0;
-
-    while (defines != NULL) {
-        ret = xmlRelaxNGValidateValue(ctxt, defines);
-        if (ret != 0)
-            break;
-        defines = defines->next;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateValue:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to verify
- *
- * Validate the given definition for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
-                        xmlRelaxNGDefinePtr define)
-{
-    int ret = 0, oldflags;
-    xmlChar *value;
-
-    value = ctxt->state->value;
-    switch (define->type) {
-        case XML_RELAXNG_EMPTY:{
-                if ((value != NULL) && (value[0] != 0)) {
-                    int idx = 0;
-
-                    while (IS_BLANK_CH(value[idx]))
-                        idx++;
-                    if (value[idx] != 0)
-                        ret = -1;
-                }
-                break;
-            }
-        case XML_RELAXNG_TEXT:
-            break;
-        case XML_RELAXNG_VALUE:{
-                if (!xmlStrEqual(value, define->value)) {
-                    if (define->name != NULL) {
-                        xmlRelaxNGTypeLibraryPtr lib;
-
-                        lib = (xmlRelaxNGTypeLibraryPtr) define->data;
-                        if ((lib != NULL) && (lib->comp != NULL)) {
-                            ret = lib->comp(lib->data, define->name,
-                                            define->value, define->node,
-                                            (void *) define->attrs,
-                                            value, ctxt->state->node);
-                        } else
-                            ret = -1;
-                        if (ret < 0) {
-                            VALID_ERR2(XML_RELAXNG_ERR_TYPECMP,
-                                       define->name);
-                            return (-1);
-                        } else if (ret == 1) {
-                            ret = 0;
-                        } else {
-                            ret = -1;
-                        }
-                    } else {
-                        xmlChar *nval, *nvalue;
-
-                        /*
-                         * TODO: trivial optimizations are possible by
-                         * computing at compile-time
-                         */
-                        nval = xmlRelaxNGNormalize(ctxt, define->value);
-                        nvalue = xmlRelaxNGNormalize(ctxt, value);
-
-                        if ((nval == NULL) || (nvalue == NULL) ||
-                            (!xmlStrEqual(nval, nvalue)))
-                            ret = -1;
-                        if (nval != NULL)
-                            xmlFree(nval);
-                        if (nvalue != NULL)
-                            xmlFree(nvalue);
-                    }
-                }
-                if (ret == 0)
-                    xmlRelaxNGNextValue(ctxt);
-                break;
-            }
-        case XML_RELAXNG_DATATYPE:{
-                ret = xmlRelaxNGValidateDatatype(ctxt, value, define,
-                                                 ctxt->state->seq);
-                if (ret == 0)
-                    xmlRelaxNGNextValue(ctxt);
-
-                break;
-            }
-        case XML_RELAXNG_CHOICE:{
-                xmlRelaxNGDefinePtr list = define->content;
-                xmlChar *oldvalue;
-
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-
-                oldvalue = ctxt->state->value;
-                while (list != NULL) {
-                    ret = xmlRelaxNGValidateValue(ctxt, list);
-                    if (ret == 0) {
-                        break;
-                    }
-                    ctxt->state->value = oldvalue;
-                    list = list->next;
-                }
-                ctxt->flags = oldflags;
-                if (ret != 0) {
-                    if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                        xmlRelaxNGDumpValidError(ctxt);
-                } else {
-                    if (ctxt->errNr > 0)
-                        xmlRelaxNGPopErrors(ctxt, 0);
-                }
-                break;
-            }
-        case XML_RELAXNG_LIST:{
-                xmlRelaxNGDefinePtr list = define->content;
-                xmlChar *oldvalue, *oldend, *val, *cur;
-
-#ifdef DEBUG_LIST
-                int nb_values = 0;
-#endif
-
-                oldvalue = ctxt->state->value;
-                oldend = ctxt->state->endvalue;
-
-                val = xmlStrdup(oldvalue);
-                if (val == NULL) {
-                    val = xmlStrdup(BAD_CAST "");
-                }
-                if (val == NULL) {
-                    VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
-                    return (-1);
-                }
-                cur = val;
-                while (*cur != 0) {
-                    if (IS_BLANK_CH(*cur)) {
-                        *cur = 0;
-                        cur++;
-#ifdef DEBUG_LIST
-                        nb_values++;
-#endif
-                        while (IS_BLANK_CH(*cur))
-                            *cur++ = 0;
-                    } else
-                        cur++;
-                }
-#ifdef DEBUG_LIST
-                xmlGenericError(xmlGenericErrorContext,
-                                "list value: '%s' found %d items\n",
-                                oldvalue, nb_values);
-                nb_values = 0;
-#endif
-                ctxt->state->endvalue = cur;
-                cur = val;
-                while ((*cur == 0) && (cur != ctxt->state->endvalue))
-                    cur++;
-
-                ctxt->state->value = cur;
-
-                while (list != NULL) {
-                    if (ctxt->state->value == ctxt->state->endvalue)
-                        ctxt->state->value = NULL;
-                    ret = xmlRelaxNGValidateValue(ctxt, list);
-                    if (ret != 0) {
-#ifdef DEBUG_LIST
-                        xmlGenericError(xmlGenericErrorContext,
-                                        "Failed to validate value: '%s' with %d rule\n",
-                                        ctxt->state->value, nb_values);
-#endif
-                        break;
-                    }
-#ifdef DEBUG_LIST
-                    nb_values++;
-#endif
-                    list = list->next;
-                }
-
-                if ((ret == 0) && (ctxt->state->value != NULL) &&
-                    (ctxt->state->value != ctxt->state->endvalue)) {
-                    VALID_ERR2(XML_RELAXNG_ERR_LISTEXTRA,
-                               ctxt->state->value);
-                    ret = -1;
-                }
-                xmlFree(val);
-                ctxt->state->value = oldvalue;
-                ctxt->state->endvalue = oldend;
-                break;
-            }
-        case XML_RELAXNG_ONEORMORE:
-            ret = xmlRelaxNGValidateValueList(ctxt, define->content);
-            if (ret != 0) {
-                break;
-            }
-            /* no break on purpose */
-        case XML_RELAXNG_ZEROORMORE:{
-                xmlChar *cur, *temp;
-
-                if ((ctxt->state->value == NULL) ||
-                    (*ctxt->state->value == 0)) {
-                    ret = 0;
-                    break;
-                }
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-                cur = ctxt->state->value;
-                temp = NULL;
-                while ((cur != NULL) && (cur != ctxt->state->endvalue) &&
-                       (temp != cur)) {
-                    temp = cur;
-                    ret =
-                        xmlRelaxNGValidateValueList(ctxt, define->content);
-                    if (ret != 0) {
-                        ctxt->state->value = temp;
-                        ret = 0;
-                        break;
-                    }
-                    cur = ctxt->state->value;
-                }
-                ctxt->flags = oldflags;
-		if (ctxt->errNr > 0)
-		    xmlRelaxNGPopErrors(ctxt, 0);
-                break;
-            }
-        case XML_RELAXNG_OPTIONAL:{
-                xmlChar *temp;
-
-                if ((ctxt->state->value == NULL) ||
-                    (*ctxt->state->value == 0)) {
-                    ret = 0;
-                    break;
-                }
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-                temp = ctxt->state->value;
-                ret = xmlRelaxNGValidateValue(ctxt, define->content);
-                ctxt->flags = oldflags;
-                if (ret != 0) {
-                    ctxt->state->value = temp;
-                    if (ctxt->errNr > 0)
-                        xmlRelaxNGPopErrors(ctxt, 0);
-                    ret = 0;
-                    break;
-                }
-		if (ctxt->errNr > 0)
-		    xmlRelaxNGPopErrors(ctxt, 0);
-                break;
-            }
-        case XML_RELAXNG_EXCEPT:{
-                xmlRelaxNGDefinePtr list;
-
-                list = define->content;
-                while (list != NULL) {
-                    ret = xmlRelaxNGValidateValue(ctxt, list);
-                    if (ret == 0) {
-                        ret = -1;
-                        break;
-                    } else
-                        ret = 0;
-                    list = list->next;
-                }
-                break;
-            }
-        case XML_RELAXNG_DEF:
-        case XML_RELAXNG_GROUP:{
-                xmlRelaxNGDefinePtr list;
-
-                list = define->content;
-                while (list != NULL) {
-                    ret = xmlRelaxNGValidateValue(ctxt, list);
-                    if (ret != 0) {
-                        ret = -1;
-                        break;
-                    } else
-                        ret = 0;
-                    list = list->next;
-                }
-                break;
-            }
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_PARENTREF:
-	    if (define->content == NULL) {
-                VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
-                ret = -1;
-	    } else {
-                ret = xmlRelaxNGValidateValue(ctxt, define->content);
-            }
-            break;
-        default:
-            TODO ret = -1;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateValueContent:
- * @ctxt:  a Relax-NG validation context
- * @defines:  the list of definitions to verify
- *
- * Validate the given definitions for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValueContent(xmlRelaxNGValidCtxtPtr ctxt,
-                               xmlRelaxNGDefinePtr defines)
-{
-    int ret = 0;
-
-    while (defines != NULL) {
-        ret = xmlRelaxNGValidateValue(ctxt, defines);
-        if (ret != 0)
-            break;
-        defines = defines->next;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGAttributeMatch:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to check
- * @prop:  the attribute
- *
- * Check if the attribute matches the definition nameClass
- *
- * Returns 1 if the attribute matches, 0 if no, or -1 in case of error
- */
-static int
-xmlRelaxNGAttributeMatch(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGDefinePtr define, xmlAttrPtr prop)
-{
-    int ret;
-
-    if (define->name != NULL) {
-        if (!xmlStrEqual(define->name, prop->name))
-            return (0);
-    }
-    if (define->ns != NULL) {
-        if (define->ns[0] == 0) {
-            if (prop->ns != NULL)
-                return (0);
-        } else {
-            if ((prop->ns == NULL) ||
-                (!xmlStrEqual(define->ns, prop->ns->href)))
-                return (0);
-        }
-    }
-    if (define->nameClass == NULL)
-        return (1);
-    define = define->nameClass;
-    if (define->type == XML_RELAXNG_EXCEPT) {
-        xmlRelaxNGDefinePtr list;
-
-        list = define->content;
-        while (list != NULL) {
-            ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
-            if (ret == 1)
-                return (0);
-            if (ret < 0)
-                return (ret);
-            list = list->next;
-        }
-    } else if (define->type == XML_RELAXNG_CHOICE) {
-        xmlRelaxNGDefinePtr list;
-
-        list = define->nameClass;
-        while (list != NULL) {
-            ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
-            if (ret == 1)
-                return (1);
-            if (ret < 0)
-                return (ret);
-            list = list->next;
-        }
-        return (0);
-    } else {
-    TODO}
-    return (1);
-}
-
-/**
- * xmlRelaxNGValidateAttribute:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to verify
- *
- * Validate the given attribute definition for that node
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateAttribute(xmlRelaxNGValidCtxtPtr ctxt,
-                            xmlRelaxNGDefinePtr define)
-{
-    int ret = 0, i;
-    xmlChar *value, *oldvalue;
-    xmlAttrPtr prop = NULL, tmp;
-    xmlNodePtr oldseq;
-
-    if (ctxt->state->nbAttrLeft <= 0)
-        return (-1);
-    if (define->name != NULL) {
-        for (i = 0; i < ctxt->state->nbAttrs; i++) {
-            tmp = ctxt->state->attrs[i];
-            if ((tmp != NULL) && (xmlStrEqual(define->name, tmp->name))) {
-                if ((((define->ns == NULL) || (define->ns[0] == 0)) &&
-                     (tmp->ns == NULL)) ||
-                    ((tmp->ns != NULL) &&
-                     (xmlStrEqual(define->ns, tmp->ns->href)))) {
-                    prop = tmp;
-                    break;
-                }
-            }
-        }
-        if (prop != NULL) {
-            value = xmlNodeListGetString(prop->doc, prop->children, 1);
-            oldvalue = ctxt->state->value;
-            oldseq = ctxt->state->seq;
-            ctxt->state->seq = (xmlNodePtr) prop;
-            ctxt->state->value = value;
-            ctxt->state->endvalue = NULL;
-            ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
-            if (ctxt->state->value != NULL)
-                value = ctxt->state->value;
-            if (value != NULL)
-                xmlFree(value);
-            ctxt->state->value = oldvalue;
-            ctxt->state->seq = oldseq;
-            if (ret == 0) {
-                /*
-                 * flag the attribute as processed
-                 */
-                ctxt->state->attrs[i] = NULL;
-                ctxt->state->nbAttrLeft--;
-            }
-        } else {
-            ret = -1;
-        }
-#ifdef DEBUG
-        xmlGenericError(xmlGenericErrorContext,
-                        "xmlRelaxNGValidateAttribute(%s): %d\n",
-                        define->name, ret);
-#endif
-    } else {
-        for (i = 0; i < ctxt->state->nbAttrs; i++) {
-            tmp = ctxt->state->attrs[i];
-            if ((tmp != NULL) &&
-                (xmlRelaxNGAttributeMatch(ctxt, define, tmp) == 1)) {
-                prop = tmp;
-                break;
-            }
-        }
-        if (prop != NULL) {
-            value = xmlNodeListGetString(prop->doc, prop->children, 1);
-            oldvalue = ctxt->state->value;
-            oldseq = ctxt->state->seq;
-            ctxt->state->seq = (xmlNodePtr) prop;
-            ctxt->state->value = value;
-            ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
-            if (ctxt->state->value != NULL)
-                value = ctxt->state->value;
-            if (value != NULL)
-                xmlFree(value);
-            ctxt->state->value = oldvalue;
-            ctxt->state->seq = oldseq;
-            if (ret == 0) {
-                /*
-                 * flag the attribute as processed
-                 */
-                ctxt->state->attrs[i] = NULL;
-                ctxt->state->nbAttrLeft--;
-            }
-        } else {
-            ret = -1;
-        }
-#ifdef DEBUG
-        if (define->ns != NULL) {
-            xmlGenericError(xmlGenericErrorContext,
-                            "xmlRelaxNGValidateAttribute(nsName ns = %s): %d\n",
-                            define->ns, ret);
-        } else {
-            xmlGenericError(xmlGenericErrorContext,
-                            "xmlRelaxNGValidateAttribute(anyName): %d\n",
-                            ret);
-        }
-#endif
-    }
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateAttributeList:
- * @ctxt:  a Relax-NG validation context
- * @define:  the list of definition to verify
- *
- * Validate the given node against the list of attribute definitions
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
-                                xmlRelaxNGDefinePtr defines)
-{
-    int ret = 0, res;
-    int needmore = 0;
-    xmlRelaxNGDefinePtr cur;
-
-    cur = defines;
-    while (cur != NULL) {
-        if (cur->type == XML_RELAXNG_ATTRIBUTE) {
-            if (xmlRelaxNGValidateAttribute(ctxt, cur) != 0)
-                ret = -1;
-        } else
-            needmore = 1;
-        cur = cur->next;
-    }
-    if (!needmore)
-        return (ret);
-    cur = defines;
-    while (cur != NULL) {
-        if (cur->type != XML_RELAXNG_ATTRIBUTE) {
-            if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
-                res = xmlRelaxNGValidateDefinition(ctxt, cur);
-                if (res < 0)
-                    ret = -1;
-            } else {
-                VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
-                return (-1);
-            }
-            if (res == -1)      /* continues on -2 */
-                break;
-        }
-        cur = cur->next;
-    }
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGNodeMatchesList:
- * @node:  the node
- * @list:  a NULL terminated array of definitions
- *
- * Check if a node can be matched by one of the definitions
- *
- * Returns 1 if matches 0 otherwise
- */
-static int
-xmlRelaxNGNodeMatchesList(xmlNodePtr node, xmlRelaxNGDefinePtr * list)
-{
-    xmlRelaxNGDefinePtr cur;
-    int i = 0, tmp;
-
-    if ((node == NULL) || (list == NULL))
-        return (0);
-
-    cur = list[i++];
-    while (cur != NULL) {
-        if ((node->type == XML_ELEMENT_NODE) &&
-            (cur->type == XML_RELAXNG_ELEMENT)) {
-            tmp = xmlRelaxNGElementMatch(NULL, cur, node);
-            if (tmp == 1)
-                return (1);
-        } else if (((node->type == XML_TEXT_NODE) ||
-                    (node->type == XML_CDATA_SECTION_NODE)) &&
-                   (cur->type == XML_RELAXNG_TEXT)) {
-            return (1);
-        }
-        cur = list[i++];
-    }
-    return (0);
-}
-
-/**
- * xmlRelaxNGValidateInterleave:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to verify
- *
- * Validate an interleave definition for a node.
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
-                             xmlRelaxNGDefinePtr define)
-{
-    int ret = 0, i, nbgroups;
-    int errNr = ctxt->errNr;
-    int oldflags;
-
-    xmlRelaxNGValidStatePtr oldstate;
-    xmlRelaxNGPartitionPtr partitions;
-    xmlRelaxNGInterleaveGroupPtr group = NULL;
-    xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem;
-    xmlNodePtr *list = NULL, *lasts = NULL;
-
-    if (define->data != NULL) {
-        partitions = (xmlRelaxNGPartitionPtr) define->data;
-        nbgroups = partitions->nbgroups;
-    } else {
-        VALID_ERR(XML_RELAXNG_ERR_INTERNODATA);
-        return (-1);
-    }
-    /*
-     * Optimizations for MIXED
-     */
-    oldflags = ctxt->flags;
-    if (define->dflags & IS_MIXED) {
-        ctxt->flags |= FLAGS_MIXED_CONTENT;
-        if (nbgroups == 2) {
-            /*
-             * this is a pure <mixed> case
-             */
-            if (ctxt->state != NULL)
-                ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
-                                                         ctxt->state->seq);
-            if (partitions->groups[0]->rule->type == XML_RELAXNG_TEXT)
-                ret = xmlRelaxNGValidateDefinition(ctxt,
-                                                   partitions->groups[1]->
-                                                   rule);
-            else
-                ret = xmlRelaxNGValidateDefinition(ctxt,
-                                                   partitions->groups[0]->
-                                                   rule);
-            if (ret == 0) {
-                if (ctxt->state != NULL)
-                    ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
-                                                             ctxt->state->
-                                                             seq);
-            }
-            ctxt->flags = oldflags;
-            return (ret);
-        }
-    }
-
-    /*
-     * Build arrays to store the first and last node of the chain
-     * pertaining to each group
-     */
-    list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
-    if (list == NULL) {
-        xmlRngVErrMemory(ctxt, "validating\n");
-        return (-1);
-    }
-    memset(list, 0, nbgroups * sizeof(xmlNodePtr));
-    lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
-    if (lasts == NULL) {
-        xmlRngVErrMemory(ctxt, "validating\n");
-        return (-1);
-    }
-    memset(lasts, 0, nbgroups * sizeof(xmlNodePtr));
-
-    /*
-     * Walk the sequence of children finding the right group and
-     * sorting them in sequences.
-     */
-    cur = ctxt->state->seq;
-    cur = xmlRelaxNGSkipIgnored(ctxt, cur);
-    start = cur;
-    while (cur != NULL) {
-        ctxt->state->seq = cur;
-        if ((partitions->triage != NULL) &&
-            (partitions->flags & IS_DETERMINIST)) {
-            void *tmp = NULL;
-
-            if ((cur->type == XML_TEXT_NODE) ||
-                (cur->type == XML_CDATA_SECTION_NODE)) {
-                tmp = xmlHashLookup2(partitions->triage, BAD_CAST "#text",
-                                     NULL);
-            } else if (cur->type == XML_ELEMENT_NODE) {
-                if (cur->ns != NULL) {
-                    tmp = xmlHashLookup2(partitions->triage, cur->name,
-                                         cur->ns->href);
-                    if (tmp == NULL)
-                        tmp = xmlHashLookup2(partitions->triage,
-                                             BAD_CAST "#any",
-                                             cur->ns->href);
-                } else
-                    tmp =
-                        xmlHashLookup2(partitions->triage, cur->name,
-                                       NULL);
-                if (tmp == NULL)
-                    tmp =
-                        xmlHashLookup2(partitions->triage, BAD_CAST "#any",
-                                       NULL);
-            }
-
-            if (tmp == NULL) {
-                i = nbgroups;
-            } else {
-                i = ((long) tmp) - 1;
-                if (partitions->flags & IS_NEEDCHECK) {
-                    group = partitions->groups[i];
-                    if (!xmlRelaxNGNodeMatchesList(cur, group->defs))
-                        i = nbgroups;
-                }
-            }
-        } else {
-            for (i = 0; i < nbgroups; i++) {
-                group = partitions->groups[i];
-                if (group == NULL)
-                    continue;
-                if (xmlRelaxNGNodeMatchesList(cur, group->defs))
-                    break;
-            }
-        }
-        /*
-         * We break as soon as an element not matched is found
-         */
-        if (i >= nbgroups) {
-            break;
-        }
-        if (lasts[i] != NULL) {
-            lasts[i]->next = cur;
-            lasts[i] = cur;
-        } else {
-            list[i] = cur;
-            lasts[i] = cur;
-        }
-        if (cur->next != NULL)
-            lastchg = cur->next;
-        else
-            lastchg = cur;
-        cur = xmlRelaxNGSkipIgnored(ctxt, cur->next);
-    }
-    if (ret != 0) {
-        VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
-        ret = -1;
-        goto done;
-    }
-    lastelem = cur;
-    oldstate = ctxt->state;
-    for (i = 0; i < nbgroups; i++) {
-        ctxt->state = xmlRelaxNGCopyValidState(ctxt, oldstate);
-	if (ctxt->state == NULL) {
-	    ret = -1;
-	    break;
-	}
-        group = partitions->groups[i];
-        if (lasts[i] != NULL) {
-            last = lasts[i]->next;
-            lasts[i]->next = NULL;
-        }
-        ctxt->state->seq = list[i];
-        ret = xmlRelaxNGValidateDefinition(ctxt, group->rule);
-        if (ret != 0)
-            break;
-        if (ctxt->state != NULL) {
-            cur = ctxt->state->seq;
-            cur = xmlRelaxNGSkipIgnored(ctxt, cur);
-            xmlRelaxNGFreeValidState(ctxt, oldstate);
-            oldstate = ctxt->state;
-            ctxt->state = NULL;
-            if (cur != NULL) {
-                VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
-                ret = -1;
-                ctxt->state = oldstate;
-                goto done;
-            }
-        } else if (ctxt->states != NULL) {
-            int j;
-            int found = 0;
-	    int best = -1;
-	    int lowattr = -1;
-
-	    /*
-	     * PBM: what happen if there is attributes checks in the interleaves
-	     */
-
-            for (j = 0; j < ctxt->states->nbState; j++) {
-                cur = ctxt->states->tabState[j]->seq;
-                cur = xmlRelaxNGSkipIgnored(ctxt, cur);
-                if (cur == NULL) {
-		    if (found == 0) {
-		        lowattr = ctxt->states->tabState[j]->nbAttrLeft;
-			best = j;
-		    }
-                    found = 1;
-		    if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr) {
-		        /* try  to keep the latest one to mach old heuristic */
-		        lowattr = ctxt->states->tabState[j]->nbAttrLeft;
-			best = j;
-		    }
-                    if (lowattr == 0)
-		        break;
-                } else if (found == 0) {
-                    if (lowattr == -1) {
-		        lowattr = ctxt->states->tabState[j]->nbAttrLeft;
-			best = j;
-		    } else
-		    if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr)  {
-		        /* try  to keep the latest one to mach old heuristic */
-		        lowattr = ctxt->states->tabState[j]->nbAttrLeft;
-			best = j;
-		    }
-		}
-            }
-	    /*
-	     * BIG PBM: here we pick only one restarting point :-(
-	     */
-            if (ctxt->states->nbState > 0) {
-                xmlRelaxNGFreeValidState(ctxt, oldstate);
-		if (best != -1) {
-		    oldstate = ctxt->states->tabState[best];
-		    ctxt->states->tabState[best] = NULL;
-		} else {
-		    oldstate =
-			ctxt->states->tabState[ctxt->states->nbState - 1];
-                    ctxt->states->tabState[ctxt->states->nbState - 1] = NULL;
-                    ctxt->states->nbState--;
-		}
-            }
-            for (j = 0; j < ctxt->states->nbState ; j++) {
-                xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[j]);
-            }
-            xmlRelaxNGFreeStates(ctxt, ctxt->states);
-            ctxt->states = NULL;
-            if (found == 0) {
-                if (cur == NULL) {
-		    VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA,
-			       (const xmlChar *) "noname");
-                } else {
-                    VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
-                }
-                ret = -1;
-                ctxt->state = oldstate;
-                goto done;
-            }
-        } else {
-            ret = -1;
-            break;
-        }
-        if (lasts[i] != NULL) {
-            lasts[i]->next = last;
-        }
-    }
-    if (ctxt->state != NULL)
-        xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-    ctxt->state = oldstate;
-    ctxt->state->seq = lastelem;
-    if (ret != 0) {
-        VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
-        ret = -1;
-        goto done;
-    }
-
-  done:
-    ctxt->flags = oldflags;
-    /*
-     * builds the next links chain from the prev one
-     */
-    cur = lastchg;
-    while (cur != NULL) {
-        if ((cur == start) || (cur->prev == NULL))
-            break;
-        cur->prev->next = cur;
-        cur = cur->prev;
-    }
-    if (ret == 0) {
-        if (ctxt->errNr > errNr)
-            xmlRelaxNGPopErrors(ctxt, errNr);
-    }
-
-    xmlFree(list);
-    xmlFree(lasts);
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDefinitionList:
- * @ctxt:  a Relax-NG validation context
- * @define:  the list of definition to verify
- *
- * Validate the given node content against the (list) of definitions
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDefinitionList(xmlRelaxNGValidCtxtPtr ctxt,
-                                 xmlRelaxNGDefinePtr defines)
-{
-    int ret = 0, res;
-
-
-    if (defines == NULL) {
-        VALID_ERR2(XML_RELAXNG_ERR_INTERNAL,
-                   BAD_CAST "NULL definition list");
-        return (-1);
-    }
-    while (defines != NULL) {
-        if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
-            res = xmlRelaxNGValidateDefinition(ctxt, defines);
-            if (res < 0)
-                ret = -1;
-        } else {
-            VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
-            return (-1);
-        }
-        if (res == -1)          /* continues on -2 */
-            break;
-        defines = defines->next;
-    }
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGElementMatch:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to check
- * @elem:  the element
- *
- * Check if the element matches the definition nameClass
- *
- * Returns 1 if the element matches, 0 if no, or -1 in case of error
- */
-static int
-xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
-                       xmlRelaxNGDefinePtr define, xmlNodePtr elem)
-{
-    int ret = 0, oldflags = 0;
-
-    if (define->name != NULL) {
-        if (!xmlStrEqual(elem->name, define->name)) {
-            VALID_ERR3(XML_RELAXNG_ERR_ELEMNAME, define->name, elem->name);
-            return (0);
-        }
-    }
-    if ((define->ns != NULL) && (define->ns[0] != 0)) {
-        if (elem->ns == NULL) {
-            VALID_ERR2(XML_RELAXNG_ERR_ELEMNONS, elem->name);
-            return (0);
-        } else if (!xmlStrEqual(elem->ns->href, define->ns)) {
-            VALID_ERR3(XML_RELAXNG_ERR_ELEMWRONGNS,
-                       elem->name, define->ns);
-            return (0);
-        }
-    } else if ((elem->ns != NULL) && (define->ns != NULL) &&
-               (define->name == NULL)) {
-        VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, elem->name);
-        return (0);
-    } else if ((elem->ns != NULL) && (define->name != NULL)) {
-        VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, define->name);
-        return (0);
-    }
-
-    if (define->nameClass == NULL)
-        return (1);
-
-    define = define->nameClass;
-    if (define->type == XML_RELAXNG_EXCEPT) {
-        xmlRelaxNGDefinePtr list;
-
-        if (ctxt != NULL) {
-            oldflags = ctxt->flags;
-            ctxt->flags |= FLAGS_IGNORABLE;
-        }
-
-        list = define->content;
-        while (list != NULL) {
-            ret = xmlRelaxNGElementMatch(ctxt, list, elem);
-            if (ret == 1) {
-                if (ctxt != NULL)
-                    ctxt->flags = oldflags;
-                return (0);
-            }
-            if (ret < 0) {
-                if (ctxt != NULL)
-                    ctxt->flags = oldflags;
-                return (ret);
-            }
-            list = list->next;
-        }
-        ret = 1;
-        if (ctxt != NULL) {
-            ctxt->flags = oldflags;
-        }
-    } else if (define->type == XML_RELAXNG_CHOICE) {
-        xmlRelaxNGDefinePtr list;
-
-        if (ctxt != NULL) {
-            oldflags = ctxt->flags;
-            ctxt->flags |= FLAGS_IGNORABLE;
-        }
-
-        list = define->nameClass;
-        while (list != NULL) {
-            ret = xmlRelaxNGElementMatch(ctxt, list, elem);
-            if (ret == 1) {
-                if (ctxt != NULL)
-                    ctxt->flags = oldflags;
-                return (1);
-            }
-            if (ret < 0) {
-                if (ctxt != NULL)
-                    ctxt->flags = oldflags;
-                return (ret);
-            }
-            list = list->next;
-        }
-        if (ctxt != NULL) {
-            if (ret != 0) {
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                    xmlRelaxNGDumpValidError(ctxt);
-            } else {
-                if (ctxt->errNr > 0)
-                    xmlRelaxNGPopErrors(ctxt, 0);
-            }
-        }
-        ret = 0;
-        if (ctxt != NULL) {
-            ctxt->flags = oldflags;
-        }
-    } else {
-        TODO ret = -1;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGBestState:
- * @ctxt:  a Relax-NG validation context
- *
- * Find the "best" state in the ctxt->states list of states to report
- * errors about. I.e. a state with no element left in the child list
- * or the one with the less attributes left.
- * This is called only if a falidation error was detected
- *
- * Returns the index of the "best" state or -1 in case of error
- */
-static int
-xmlRelaxNGBestState(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    xmlRelaxNGValidStatePtr state;
-    int i, tmp;
-    int best = -1;
-    int value = 1000000;
-
-    if ((ctxt == NULL) || (ctxt->states == NULL) ||
-        (ctxt->states->nbState <= 0))
-        return (-1);
-
-    for (i = 0; i < ctxt->states->nbState; i++) {
-        state = ctxt->states->tabState[i];
-        if (state == NULL)
-            continue;
-        if (state->seq != NULL) {
-            if ((best == -1) || (value > 100000)) {
-                value = 100000;
-                best = i;
-            }
-        } else {
-            tmp = state->nbAttrLeft;
-            if ((best == -1) || (value > tmp)) {
-                value = tmp;
-                best = i;
-            }
-        }
-    }
-    return (best);
-}
-
-/**
- * xmlRelaxNGLogBestError:
- * @ctxt:  a Relax-NG validation context
- *
- * Find the "best" state in the ctxt->states list of states to report
- * errors about and log it.
- */
-static void
-xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    int best;
-
-    if ((ctxt == NULL) || (ctxt->states == NULL) ||
-        (ctxt->states->nbState <= 0))
-        return;
-
-    best = xmlRelaxNGBestState(ctxt);
-    if ((best >= 0) && (best < ctxt->states->nbState)) {
-        ctxt->state = ctxt->states->tabState[best];
-
-        xmlRelaxNGValidateElementEnd(ctxt, 1);
-    }
-}
-
-/**
- * xmlRelaxNGValidateElementEnd:
- * @ctxt:  a Relax-NG validation context
- * @dolog:  indicate that error logging should be done
- *
- * Validate the end of the element, implements check that
- * there is nothing left not consumed in the element content
- * or in the attribute list.
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt, int dolog)
-{
-    int i;
-    xmlRelaxNGValidStatePtr state;
-
-    state = ctxt->state;
-    if (state->seq != NULL) {
-        state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq);
-        if (state->seq != NULL) {
-            if (dolog) {
-                VALID_ERR3(XML_RELAXNG_ERR_EXTRACONTENT,
-                           state->node->name, state->seq->name);
-            }
-            return (-1);
-        }
-    }
-    for (i = 0; i < state->nbAttrs; i++) {
-        if (state->attrs[i] != NULL) {
-            if (dolog) {
-                VALID_ERR3(XML_RELAXNG_ERR_INVALIDATTR,
-                           state->attrs[i]->name, state->node->name);
-            }
-            return (-1 - i);
-        }
-    }
-    return (0);
-}
-
-/**
- * xmlRelaxNGValidateState:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to verify
- *
- * Validate the current state against the definition
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateState(xmlRelaxNGValidCtxtPtr ctxt,
-                        xmlRelaxNGDefinePtr define)
-{
-    xmlNodePtr node;
-    int ret = 0, i, tmp, oldflags, errNr;
-    xmlRelaxNGValidStatePtr oldstate = NULL, state;
-
-    if (define == NULL) {
-        VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
-        return (-1);
-    }
-
-    if (ctxt->state != NULL) {
-        node = ctxt->state->seq;
-    } else {
-        node = NULL;
-    }
-#ifdef DEBUG
-    for (i = 0; i < ctxt->depth; i++)
-        xmlGenericError(xmlGenericErrorContext, " ");
-    xmlGenericError(xmlGenericErrorContext,
-                    "Start validating %s ", xmlRelaxNGDefName(define));
-    if (define->name != NULL)
-        xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
-    if ((node != NULL) && (node->name != NULL))
-        xmlGenericError(xmlGenericErrorContext, "on %s\n", node->name);
-    else
-        xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-    ctxt->depth++;
-    switch (define->type) {
-        case XML_RELAXNG_EMPTY:
-            xmlRelaxNGSkipIgnored(ctxt, node);
-            ret = 0;
-            break;
-        case XML_RELAXNG_NOT_ALLOWED:
-            ret = -1;
-            break;
-        case XML_RELAXNG_TEXT:
-            while ((node != NULL) &&
-                   ((node->type == XML_TEXT_NODE) ||
-                    (node->type == XML_COMMENT_NODE) ||
-                    (node->type == XML_PI_NODE) ||
-                    (node->type == XML_CDATA_SECTION_NODE)))
-                node = node->next;
-            ctxt->state->seq = node;
-            break;
-        case XML_RELAXNG_ELEMENT:
-            errNr = ctxt->errNr;
-            node = xmlRelaxNGSkipIgnored(ctxt, node);
-            if (node == NULL) {
-                VALID_ERR2(XML_RELAXNG_ERR_NOELEM, define->name);
-                ret = -1;
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                    xmlRelaxNGDumpValidError(ctxt);
-                break;
-            }
-            if (node->type != XML_ELEMENT_NODE) {
-                VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
-                ret = -1;
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                    xmlRelaxNGDumpValidError(ctxt);
-                break;
-            }
-            /*
-             * This node was already validated successfully against
-             * this definition.
-             */
-            if (node->psvi == define) {
-                ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
-                if (ctxt->errNr > errNr)
-                    xmlRelaxNGPopErrors(ctxt, errNr);
-                if (ctxt->errNr != 0) {
-                    while ((ctxt->err != NULL) &&
-                           (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME)
-                             && (xmlStrEqual(ctxt->err->arg2, node->name)))
-                            ||
-                            ((ctxt->err->err ==
-                              XML_RELAXNG_ERR_ELEMEXTRANS)
-                             && (xmlStrEqual(ctxt->err->arg1, node->name)))
-                            || (ctxt->err->err == XML_RELAXNG_ERR_NOELEM)
-                            || (ctxt->err->err ==
-                                XML_RELAXNG_ERR_NOTELEM)))
-                        xmlRelaxNGValidErrorPop(ctxt);
-                }
-                break;
-            }
-
-            ret = xmlRelaxNGElementMatch(ctxt, define, node);
-            if (ret <= 0) {
-                ret = -1;
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                    xmlRelaxNGDumpValidError(ctxt);
-                break;
-            }
-            ret = 0;
-            if (ctxt->errNr != 0) {
-                if (ctxt->errNr > errNr)
-                    xmlRelaxNGPopErrors(ctxt, errNr);
-                while ((ctxt->err != NULL) &&
-                       (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME) &&
-                         (xmlStrEqual(ctxt->err->arg2, node->name))) ||
-                        ((ctxt->err->err == XML_RELAXNG_ERR_ELEMEXTRANS) &&
-                         (xmlStrEqual(ctxt->err->arg1, node->name))) ||
-                        (ctxt->err->err == XML_RELAXNG_ERR_NOELEM) ||
-                        (ctxt->err->err == XML_RELAXNG_ERR_NOTELEM)))
-                    xmlRelaxNGValidErrorPop(ctxt);
-            }
-            errNr = ctxt->errNr;
-
-            oldflags = ctxt->flags;
-            if (ctxt->flags & FLAGS_MIXED_CONTENT) {
-                ctxt->flags -= FLAGS_MIXED_CONTENT;
-            }
-            state = xmlRelaxNGNewValidState(ctxt, node);
-            if (state == NULL) {
-                ret = -1;
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
-                    xmlRelaxNGDumpValidError(ctxt);
-                break;
-            }
-
-            oldstate = ctxt->state;
-            ctxt->state = state;
-            if (define->attrs != NULL) {
-                tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
-                if (tmp != 0) {
-                    ret = -1;
-                    VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
-                }
-            }
-            if (define->contModel != NULL) {
-                xmlRelaxNGValidStatePtr nstate, tmpstate = ctxt->state;
-                xmlRelaxNGStatesPtr tmpstates = ctxt->states;
-                xmlNodePtr nseq;
-
-                nstate = xmlRelaxNGNewValidState(ctxt, node);
-                ctxt->state = nstate;
-                ctxt->states = NULL;
-
-                tmp = xmlRelaxNGValidateCompiledContent(ctxt,
-                                                        define->contModel,
-                                                        ctxt->state->seq);
-                nseq = ctxt->state->seq;
-                ctxt->state = tmpstate;
-                ctxt->states = tmpstates;
-                xmlRelaxNGFreeValidState(ctxt, nstate);
-
-#ifdef DEBUG_COMPILE
-                xmlGenericError(xmlGenericErrorContext,
-                                "Validating content of '%s' : %d\n",
-                                define->name, tmp);
-#endif
-                if (tmp != 0)
-                    ret = -1;
-
-                if (ctxt->states != NULL) {
-                    tmp = -1;
-
-                    for (i = 0; i < ctxt->states->nbState; i++) {
-                        state = ctxt->states->tabState[i];
-                        ctxt->state = state;
-                        ctxt->state->seq = nseq;
-
-                        if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
-                            tmp = 0;
-                            break;
-                        }
-                    }
-                    if (tmp != 0) {
-                        /*
-                         * validation error, log the message for the "best" one
-                         */
-                        ctxt->flags |= FLAGS_IGNORABLE;
-                        xmlRelaxNGLogBestError(ctxt);
-                    }
-                    for (i = 0; i < ctxt->states->nbState; i++) {
-                        xmlRelaxNGFreeValidState(ctxt,
-                                                 ctxt->states->
-                                                 tabState[i]);
-                    }
-                    xmlRelaxNGFreeStates(ctxt, ctxt->states);
-                    ctxt->flags = oldflags;
-                    ctxt->states = NULL;
-                    if ((ret == 0) && (tmp == -1))
-                        ret = -1;
-                } else {
-                    state = ctxt->state;
-		    if (ctxt->state != NULL)
-			ctxt->state->seq = nseq;
-                    if (ret == 0)
-                        ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
-                    xmlRelaxNGFreeValidState(ctxt, state);
-                }
-            } else {
-                if (define->content != NULL) {
-                    tmp = xmlRelaxNGValidateDefinitionList(ctxt,
-                                                           define->
-                                                           content);
-                    if (tmp != 0) {
-                        ret = -1;
-                        if (ctxt->state == NULL) {
-                            ctxt->state = oldstate;
-                            VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
-                                       node->name);
-                            ctxt->state = NULL;
-                        } else {
-                            VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
-                                       node->name);
-                        }
-
-                    }
-                }
-                if (ctxt->states != NULL) {
-                    tmp = -1;
-
-                    for (i = 0; i < ctxt->states->nbState; i++) {
-                        state = ctxt->states->tabState[i];
-                        ctxt->state = state;
-
-                        if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
-                            tmp = 0;
-                            break;
-                        }
-                    }
-                    if (tmp != 0) {
-                        /*
-                         * validation error, log the message for the "best" one
-                         */
-                        ctxt->flags |= FLAGS_IGNORABLE;
-                        xmlRelaxNGLogBestError(ctxt);
-                    }
-                    for (i = 0; i < ctxt->states->nbState; i++) {
-                        xmlRelaxNGFreeValidState(ctxt,
-                                                 ctxt->states->tabState[i]);
-                        ctxt->states->tabState[i] = NULL;
-                    }
-                    xmlRelaxNGFreeStates(ctxt, ctxt->states);
-                    ctxt->flags = oldflags;
-                    ctxt->states = NULL;
-                    if ((ret == 0) && (tmp == -1))
-                        ret = -1;
-                } else {
-                    state = ctxt->state;
-                    if (ret == 0)
-                        ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
-                    xmlRelaxNGFreeValidState(ctxt, state);
-                }
-            }
-            if (ret == 0) {
-                node->psvi = define;
-            }
-            ctxt->flags = oldflags;
-            ctxt->state = oldstate;
-            if (oldstate != NULL)
-                oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
-            if (ret != 0) {
-                if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
-                    xmlRelaxNGDumpValidError(ctxt);
-                    ret = 0;
-#if 0
-                } else {
-                    ret = -2;
-#endif
-                }
-            } else {
-                if (ctxt->errNr > errNr)
-                    xmlRelaxNGPopErrors(ctxt, errNr);
-            }
-
-#ifdef DEBUG
-            xmlGenericError(xmlGenericErrorContext,
-                            "xmlRelaxNGValidateDefinition(): validated %s : %d",
-                            node->name, ret);
-            if (oldstate == NULL)
-                xmlGenericError(xmlGenericErrorContext, ": no state\n");
-            else if (oldstate->seq == NULL)
-                xmlGenericError(xmlGenericErrorContext, ": done\n");
-            else if (oldstate->seq->type == XML_ELEMENT_NODE)
-                xmlGenericError(xmlGenericErrorContext, ": next elem %s\n",
-                                oldstate->seq->name);
-            else
-                xmlGenericError(xmlGenericErrorContext, ": next %s %d\n",
-                                oldstate->seq->name, oldstate->seq->type);
-#endif
-            break;
-        case XML_RELAXNG_OPTIONAL:{
-                errNr = ctxt->errNr;
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-                oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
-                ret =
-                    xmlRelaxNGValidateDefinitionList(ctxt,
-                                                     define->content);
-                if (ret != 0) {
-                    if (ctxt->state != NULL)
-                        xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-                    ctxt->state = oldstate;
-                    ctxt->flags = oldflags;
-                    ret = 0;
-                    if (ctxt->errNr > errNr)
-                        xmlRelaxNGPopErrors(ctxt, errNr);
-                    break;
-                }
-                if (ctxt->states != NULL) {
-                    xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
-                } else {
-                    ctxt->states = xmlRelaxNGNewStates(ctxt, 1);
-                    if (ctxt->states == NULL) {
-                        xmlRelaxNGFreeValidState(ctxt, oldstate);
-                        ctxt->flags = oldflags;
-                        ret = -1;
-                        if (ctxt->errNr > errNr)
-                            xmlRelaxNGPopErrors(ctxt, errNr);
-                        break;
-                    }
-                    xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
-                    xmlRelaxNGAddStates(ctxt, ctxt->states, ctxt->state);
-                    ctxt->state = NULL;
-                }
-                ctxt->flags = oldflags;
-                ret = 0;
-                if (ctxt->errNr > errNr)
-                    xmlRelaxNGPopErrors(ctxt, errNr);
-                break;
-            }
-        case XML_RELAXNG_ONEORMORE:
-            errNr = ctxt->errNr;
-            ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
-            if (ret != 0) {
-                break;
-            }
-            if (ctxt->errNr > errNr)
-                xmlRelaxNGPopErrors(ctxt, errNr);
-            /* no break on purpose */
-        case XML_RELAXNG_ZEROORMORE:{
-                int progress;
-                xmlRelaxNGStatesPtr states = NULL, res = NULL;
-                int base, j;
-
-                errNr = ctxt->errNr;
-                res = xmlRelaxNGNewStates(ctxt, 1);
-                if (res == NULL) {
-                    ret = -1;
-                    break;
-                }
-                /*
-                 * All the input states are also exit states
-                 */
-                if (ctxt->state != NULL) {
-                    xmlRelaxNGAddStates(ctxt, res,
-                                        xmlRelaxNGCopyValidState(ctxt,
-                                                                 ctxt->
-                                                                 state));
-                } else {
-                    for (j = 0; j < ctxt->states->nbState; j++) {
-                        xmlRelaxNGAddStates(ctxt, res,
-                            xmlRelaxNGCopyValidState(ctxt,
-                                            ctxt->states->tabState[j]));
-                    }
-                }
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-                do {
-                    progress = 0;
-                    base = res->nbState;
-
-                    if (ctxt->states != NULL) {
-                        states = ctxt->states;
-                        for (i = 0; i < states->nbState; i++) {
-                            ctxt->state = states->tabState[i];
-                            ctxt->states = NULL;
-                            ret = xmlRelaxNGValidateDefinitionList(ctxt,
-                                                                   define->
-                                                                   content);
-                            if (ret == 0) {
-                                if (ctxt->state != NULL) {
-                                    tmp = xmlRelaxNGAddStates(ctxt, res,
-                                                              ctxt->state);
-                                    ctxt->state = NULL;
-                                    if (tmp == 1)
-                                        progress = 1;
-                                } else if (ctxt->states != NULL) {
-                                    for (j = 0; j < ctxt->states->nbState;
-                                         j++) {
-                                        tmp =
-                                            xmlRelaxNGAddStates(ctxt, res,
-                                                   ctxt->states->tabState[j]);
-                                        if (tmp == 1)
-                                            progress = 1;
-                                    }
-                                    xmlRelaxNGFreeStates(ctxt,
-                                                         ctxt->states);
-                                    ctxt->states = NULL;
-                                }
-                            } else {
-                                if (ctxt->state != NULL) {
-                                    xmlRelaxNGFreeValidState(ctxt,
-                                                             ctxt->state);
-                                    ctxt->state = NULL;
-                                }
-                            }
-                        }
-                    } else {
-                        ret = xmlRelaxNGValidateDefinitionList(ctxt,
-                                                               define->
-                                                               content);
-                        if (ret != 0) {
-                            xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-                            ctxt->state = NULL;
-                        } else {
-                            base = res->nbState;
-                            if (ctxt->state != NULL) {
-                                tmp = xmlRelaxNGAddStates(ctxt, res,
-                                                          ctxt->state);
-                                ctxt->state = NULL;
-                                if (tmp == 1)
-                                    progress = 1;
-                            } else if (ctxt->states != NULL) {
-                                for (j = 0; j < ctxt->states->nbState; j++) {
-                                    tmp = xmlRelaxNGAddStates(ctxt, res,
-                                               ctxt->states->tabState[j]);
-                                    if (tmp == 1)
-                                        progress = 1;
-                                }
-                                if (states == NULL) {
-                                    states = ctxt->states;
-                                } else {
-                                    xmlRelaxNGFreeStates(ctxt,
-                                                         ctxt->states);
-                                }
-                                ctxt->states = NULL;
-                            }
-                        }
-                    }
-                    if (progress) {
-                        /*
-                         * Collect all the new nodes added at that step
-                         * and make them the new node set
-                         */
-                        if (res->nbState - base == 1) {
-                            ctxt->state = xmlRelaxNGCopyValidState(ctxt,
-                                                                   res->
-                                                                   tabState
-                                                                   [base]);
-                        } else {
-                            if (states == NULL) {
-                                xmlRelaxNGNewStates(ctxt,
-                                                    res->nbState - base);
-			        states = ctxt->states;
-				if (states == NULL) {
-				    progress = 0;
-				    break;
-				}
-                            }
-                            states->nbState = 0;
-                            for (i = base; i < res->nbState; i++)
-                                xmlRelaxNGAddStates(ctxt, states,
-                                                    xmlRelaxNGCopyValidState
-                                                    (ctxt, res->tabState[i]));
-                            ctxt->states = states;
-                        }
-                    }
-                } while (progress == 1);
-                if (states != NULL) {
-                    xmlRelaxNGFreeStates(ctxt, states);
-                }
-                ctxt->states = res;
-                ctxt->flags = oldflags;
-#if 0
-                /*
-                 * errors may have to be propagated back...
-                 */
-                if (ctxt->errNr > errNr)
-                    xmlRelaxNGPopErrors(ctxt, errNr);
-#endif
-                ret = 0;
-                break;
-            }
-        case XML_RELAXNG_CHOICE:{
-                xmlRelaxNGDefinePtr list = NULL;
-                xmlRelaxNGStatesPtr states = NULL;
-
-                node = xmlRelaxNGSkipIgnored(ctxt, node);
-
-                errNr = ctxt->errNr;
-                if ((define->dflags & IS_TRIABLE) && (define->data != NULL) &&
-		    (node != NULL)) {
-		    /*
-		     * node == NULL can't be optimized since IS_TRIABLE
-		     * doesn't account for choice which may lead to
-		     * only attributes.
-		     */
-                    xmlHashTablePtr triage =
-                        (xmlHashTablePtr) define->data;
-
-                    /*
-                     * Something we can optimize cleanly there is only one
-                     * possble branch out !
-                     */
-                    if ((node->type == XML_TEXT_NODE) ||
-                        (node->type == XML_CDATA_SECTION_NODE)) {
-                        list =
-                            xmlHashLookup2(triage, BAD_CAST "#text", NULL);
-                    } else if (node->type == XML_ELEMENT_NODE) {
-                        if (node->ns != NULL) {
-                            list = xmlHashLookup2(triage, node->name,
-                                                  node->ns->href);
-                            if (list == NULL)
-                                list =
-                                    xmlHashLookup2(triage, BAD_CAST "#any",
-                                                   node->ns->href);
-                        } else
-                            list =
-                                xmlHashLookup2(triage, node->name, NULL);
-                        if (list == NULL)
-                            list =
-                                xmlHashLookup2(triage, BAD_CAST "#any",
-                                               NULL);
-                    }
-                    if (list == NULL) {
-                        ret = -1;
-			VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, node->name);
-                        break;
-                    }
-                    ret = xmlRelaxNGValidateDefinition(ctxt, list);
-                    if (ret == 0) {
-                    }
-                    break;
-                }
-
-                list = define->content;
-                oldflags = ctxt->flags;
-                ctxt->flags |= FLAGS_IGNORABLE;
-
-                while (list != NULL) {
-                    oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
-                    ret = xmlRelaxNGValidateDefinition(ctxt, list);
-                    if (ret == 0) {
-                        if (states == NULL) {
-                            states = xmlRelaxNGNewStates(ctxt, 1);
-                        }
-                        if (ctxt->state != NULL) {
-                            xmlRelaxNGAddStates(ctxt, states, ctxt->state);
-                        } else if (ctxt->states != NULL) {
-                            for (i = 0; i < ctxt->states->nbState; i++) {
-                                xmlRelaxNGAddStates(ctxt, states,
-                                                    ctxt->states->
-                                                    tabState[i]);
-                            }
-                            xmlRelaxNGFreeStates(ctxt, ctxt->states);
-                            ctxt->states = NULL;
-                        }
-                    } else {
-                        xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-                    }
-                    ctxt->state = oldstate;
-                    list = list->next;
-                }
-                if (states != NULL) {
-                    xmlRelaxNGFreeValidState(ctxt, oldstate);
-                    ctxt->states = states;
-                    ctxt->state = NULL;
-                    ret = 0;
-                } else {
-                    ctxt->states = NULL;
-                }
-                ctxt->flags = oldflags;
-                if (ret != 0) {
-                    if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
-                        xmlRelaxNGDumpValidError(ctxt);
-                    }
-                } else {
-                    if (ctxt->errNr > errNr)
-                        xmlRelaxNGPopErrors(ctxt, errNr);
-                }
-                break;
-            }
-        case XML_RELAXNG_DEF:
-        case XML_RELAXNG_GROUP:
-            ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
-            break;
-        case XML_RELAXNG_INTERLEAVE:
-            ret = xmlRelaxNGValidateInterleave(ctxt, define);
-            break;
-        case XML_RELAXNG_ATTRIBUTE:
-            ret = xmlRelaxNGValidateAttribute(ctxt, define);
-            break;
-        case XML_RELAXNG_START:
-        case XML_RELAXNG_NOOP:
-        case XML_RELAXNG_REF:
-        case XML_RELAXNG_EXTERNALREF:
-        case XML_RELAXNG_PARENTREF:
-            ret = xmlRelaxNGValidateDefinition(ctxt, define->content);
-            break;
-        case XML_RELAXNG_DATATYPE:{
-                xmlNodePtr child;
-                xmlChar *content = NULL;
-
-                child = node;
-                while (child != NULL) {
-                    if (child->type == XML_ELEMENT_NODE) {
-                        VALID_ERR2(XML_RELAXNG_ERR_DATAELEM,
-                                   node->parent->name);
-                        ret = -1;
-                        break;
-                    } else if ((child->type == XML_TEXT_NODE) ||
-                               (child->type == XML_CDATA_SECTION_NODE)) {
-                        content = xmlStrcat(content, child->content);
-                    }
-                    /* TODO: handle entities ... */
-                    child = child->next;
-                }
-                if (ret == -1) {
-                    if (content != NULL)
-                        xmlFree(content);
-                    break;
-                }
-                if (content == NULL) {
-                    content = xmlStrdup(BAD_CAST "");
-                    if (content == NULL) {
-                        xmlRngVErrMemory(ctxt, "validating\n");
-                        ret = -1;
-                        break;
-                    }
-                }
-                ret = xmlRelaxNGValidateDatatype(ctxt, content, define,
-                                                 ctxt->state->seq);
-                if (ret == -1) {
-                    VALID_ERR2(XML_RELAXNG_ERR_DATATYPE, define->name);
-                } else if (ret == 0) {
-                    ctxt->state->seq = NULL;
-                }
-                if (content != NULL)
-                    xmlFree(content);
-                break;
-            }
-        case XML_RELAXNG_VALUE:{
-                xmlChar *content = NULL;
-                xmlChar *oldvalue;
-                xmlNodePtr child;
-
-                child = node;
-                while (child != NULL) {
-                    if (child->type == XML_ELEMENT_NODE) {
-                        VALID_ERR2(XML_RELAXNG_ERR_VALELEM,
-                                   node->parent->name);
-                        ret = -1;
-                        break;
-                    } else if ((child->type == XML_TEXT_NODE) ||
-                               (child->type == XML_CDATA_SECTION_NODE)) {
-                        content = xmlStrcat(content, child->content);
-                    }
-                    /* TODO: handle entities ... */
-                    child = child->next;
-                }
-                if (ret == -1) {
-                    if (content != NULL)
-                        xmlFree(content);
-                    break;
-                }
-                if (content == NULL) {
-                    content = xmlStrdup(BAD_CAST "");
-                    if (content == NULL) {
-                        xmlRngVErrMemory(ctxt, "validating\n");
-                        ret = -1;
-                        break;
-                    }
-                }
-                oldvalue = ctxt->state->value;
-                ctxt->state->value = content;
-                ret = xmlRelaxNGValidateValue(ctxt, define);
-                ctxt->state->value = oldvalue;
-                if (ret == -1) {
-                    VALID_ERR2(XML_RELAXNG_ERR_VALUE, define->name);
-                } else if (ret == 0) {
-                    ctxt->state->seq = NULL;
-                }
-                if (content != NULL)
-                    xmlFree(content);
-                break;
-            }
-        case XML_RELAXNG_LIST:{
-                xmlChar *content;
-                xmlNodePtr child;
-                xmlChar *oldvalue, *oldendvalue;
-                int len;
-
-                /*
-                 * Make sure it's only text nodes
-                 */
-
-                content = NULL;
-                child = node;
-                while (child != NULL) {
-                    if (child->type == XML_ELEMENT_NODE) {
-                        VALID_ERR2(XML_RELAXNG_ERR_LISTELEM,
-                                   node->parent->name);
-                        ret = -1;
-                        break;
-                    } else if ((child->type == XML_TEXT_NODE) ||
-                               (child->type == XML_CDATA_SECTION_NODE)) {
-                        content = xmlStrcat(content, child->content);
-                    }
-                    /* TODO: handle entities ... */
-                    child = child->next;
-                }
-                if (ret == -1) {
-                    if (content != NULL)
-                        xmlFree(content);
-                    break;
-                }
-                if (content == NULL) {
-                    content = xmlStrdup(BAD_CAST "");
-                    if (content == NULL) {
-                        xmlRngVErrMemory(ctxt, "validating\n");
-                        ret = -1;
-                        break;
-                    }
-                }
-                len = xmlStrlen(content);
-                oldvalue = ctxt->state->value;
-                oldendvalue = ctxt->state->endvalue;
-                ctxt->state->value = content;
-                ctxt->state->endvalue = content + len;
-                ret = xmlRelaxNGValidateValue(ctxt, define);
-                ctxt->state->value = oldvalue;
-                ctxt->state->endvalue = oldendvalue;
-                if (ret == -1) {
-                    VALID_ERR(XML_RELAXNG_ERR_LIST);
-                } else if ((ret == 0) && (node != NULL)) {
-                    ctxt->state->seq = node->next;
-                }
-                if (content != NULL)
-                    xmlFree(content);
-                break;
-            }
-        case XML_RELAXNG_EXCEPT:
-        case XML_RELAXNG_PARAM:
-            TODO ret = -1;
-            break;
-    }
-    ctxt->depth--;
-#ifdef DEBUG
-    for (i = 0; i < ctxt->depth; i++)
-        xmlGenericError(xmlGenericErrorContext, " ");
-    xmlGenericError(xmlGenericErrorContext,
-                    "Validating %s ", xmlRelaxNGDefName(define));
-    if (define->name != NULL)
-        xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
-    if (ret == 0)
-        xmlGenericError(xmlGenericErrorContext, "suceeded\n");
-    else
-        xmlGenericError(xmlGenericErrorContext, "failed\n");
-#endif
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDefinition:
- * @ctxt:  a Relax-NG validation context
- * @define:  the definition to verify
- *
- * Validate the current node lists against the definition
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
-                             xmlRelaxNGDefinePtr define)
-{
-    xmlRelaxNGStatesPtr states, res;
-    int i, j, k, ret, oldflags;
-
-    /*
-     * We should NOT have both ctxt->state and ctxt->states
-     */
-    if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
-        TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-        ctxt->state = NULL;
-    }
-
-    if ((ctxt->states == NULL) || (ctxt->states->nbState == 1)) {
-        if (ctxt->states != NULL) {
-            ctxt->state = ctxt->states->tabState[0];
-            xmlRelaxNGFreeStates(ctxt, ctxt->states);
-            ctxt->states = NULL;
-        }
-        ret = xmlRelaxNGValidateState(ctxt, define);
-        if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
-            TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-            ctxt->state = NULL;
-        }
-        if ((ctxt->states != NULL) && (ctxt->states->nbState == 1)) {
-            ctxt->state = ctxt->states->tabState[0];
-            xmlRelaxNGFreeStates(ctxt, ctxt->states);
-            ctxt->states = NULL;
-        }
-        return (ret);
-    }
-
-    states = ctxt->states;
-    ctxt->states = NULL;
-    res = NULL;
-    j = 0;
-    oldflags = ctxt->flags;
-    ctxt->flags |= FLAGS_IGNORABLE;
-    for (i = 0; i < states->nbState; i++) {
-        ctxt->state = states->tabState[i];
-        ctxt->states = NULL;
-        ret = xmlRelaxNGValidateState(ctxt, define);
-        /*
-         * We should NOT have both ctxt->state and ctxt->states
-         */
-        if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
-            TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-            ctxt->state = NULL;
-        }
-        if (ret == 0) {
-            if (ctxt->states == NULL) {
-                if (res != NULL) {
-                    /* add the state to the container */
-                    xmlRelaxNGAddStates(ctxt, res, ctxt->state);
-                    ctxt->state = NULL;
-                } else {
-                    /* add the state directly in states */
-                    states->tabState[j++] = ctxt->state;
-                    ctxt->state = NULL;
-                }
-            } else {
-                if (res == NULL) {
-                    /* make it the new container and copy other results */
-                    res = ctxt->states;
-                    ctxt->states = NULL;
-                    for (k = 0; k < j; k++)
-                        xmlRelaxNGAddStates(ctxt, res,
-                                            states->tabState[k]);
-                } else {
-                    /* add all the new results to res and reff the container */
-                    for (k = 0; k < ctxt->states->nbState; k++)
-                        xmlRelaxNGAddStates(ctxt, res,
-                                            ctxt->states->tabState[k]);
-                    xmlRelaxNGFreeStates(ctxt, ctxt->states);
-                    ctxt->states = NULL;
-                }
-            }
-        } else {
-            if (ctxt->state != NULL) {
-                xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-                ctxt->state = NULL;
-            } else if (ctxt->states != NULL) {
-                for (k = 0; k < ctxt->states->nbState; k++)
-                    xmlRelaxNGFreeValidState(ctxt,
-                                             ctxt->states->tabState[k]);
-                xmlRelaxNGFreeStates(ctxt, ctxt->states);
-                ctxt->states = NULL;
-            }
-        }
-    }
-    ctxt->flags = oldflags;
-    if (res != NULL) {
-        xmlRelaxNGFreeStates(ctxt, states);
-        ctxt->states = res;
-        ret = 0;
-    } else if (j > 1) {
-        states->nbState = j;
-        ctxt->states = states;
-        ret = 0;
-    } else if (j == 1) {
-        ctxt->state = states->tabState[0];
-        xmlRelaxNGFreeStates(ctxt, states);
-        ret = 0;
-    } else {
-        ret = -1;
-        xmlRelaxNGFreeStates(ctxt, states);
-        if (ctxt->states != NULL) {
-            xmlRelaxNGFreeStates(ctxt, ctxt->states);
-            ctxt->states = NULL;
-        }
-    }
-    if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
-        TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-        ctxt->state = NULL;
-    }
-    return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDocument:
- * @ctxt:  a Relax-NG validation context
- * @doc:  the document
- *
- * Validate the given document
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
-{
-    int ret;
-    xmlRelaxNGPtr schema;
-    xmlRelaxNGGrammarPtr grammar;
-    xmlRelaxNGValidStatePtr state;
-    xmlNodePtr node;
-
-    if ((ctxt == NULL) || (ctxt->schema == NULL) || (doc == NULL))
-        return (-1);
-
-    ctxt->errNo = XML_RELAXNG_OK;
-    schema = ctxt->schema;
-    grammar = schema->topgrammar;
-    if (grammar == NULL) {
-        VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
-        return (-1);
-    }
-    state = xmlRelaxNGNewValidState(ctxt, NULL);
-    ctxt->state = state;
-    ret = xmlRelaxNGValidateDefinition(ctxt, grammar->start);
-    if ((ctxt->state != NULL) && (state->seq != NULL)) {
-        state = ctxt->state;
-        node = state->seq;
-        node = xmlRelaxNGSkipIgnored(ctxt, node);
-        if (node != NULL) {
-            if (ret != -1) {
-                VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
-                ret = -1;
-            }
-        }
-    } else if (ctxt->states != NULL) {
-        int i;
-        int tmp = -1;
-
-        for (i = 0; i < ctxt->states->nbState; i++) {
-            state = ctxt->states->tabState[i];
-            node = state->seq;
-            node = xmlRelaxNGSkipIgnored(ctxt, node);
-            if (node == NULL)
-                tmp = 0;
-            xmlRelaxNGFreeValidState(ctxt, state);
-        }
-        if (tmp == -1) {
-            if (ret != -1) {
-                VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
-                ret = -1;
-            }
-        }
-    }
-    if (ctxt->state != NULL) {
-        xmlRelaxNGFreeValidState(ctxt, ctxt->state);
-        ctxt->state = NULL;
-    }
-    if (ret != 0)
-        xmlRelaxNGDumpValidError(ctxt);
-#ifdef DEBUG
-    else if (ctxt->errNr != 0) {
-        ctxt->error(ctxt->userData,
-                    "%d Extra error messages left on stack !\n",
-                    ctxt->errNr);
-        xmlRelaxNGDumpValidError(ctxt);
-    }
-#endif
-#ifdef LIBXML_VALID_ENABLED
-    if (ctxt->idref == 1) {
-        xmlValidCtxt vctxt;
-
-        memset(&vctxt, 0, sizeof(xmlValidCtxt));
-        vctxt.valid = 1;
-        vctxt.error = ctxt->error;
-        vctxt.warning = ctxt->warning;
-        vctxt.userData = ctxt->userData;
-
-        if (xmlValidateDocumentFinal(&vctxt, doc) != 1)
-            ret = -1;
-    }
-#endif /* LIBXML_VALID_ENABLED */
-    if ((ret == 0) && (ctxt->errNo != XML_RELAXNG_OK))
-        ret = -1;
-
-    return (ret);
-}
-
-/**
- * xmlRelaxNGCleanPSVI:
- * @node:  an input element or document
- *
- * Call this routine to speed up XPath computation on static documents.
- * This stamps all the element nodes with the document order
- * Like for line information, the order is kept in the element->content
- * field, the value stored is actually - the node number (starting at -1)
- * to be able to differentiate from line numbers.
- *
- * Returns the number of elements found in the document or -1 in case
- *    of error.
- */
-static void
-xmlRelaxNGCleanPSVI(xmlNodePtr node) {
-    xmlNodePtr cur;
-
-    if ((node == NULL) ||
-        ((node->type != XML_ELEMENT_NODE) &&
-         (node->type != XML_DOCUMENT_NODE) &&
-         (node->type != XML_HTML_DOCUMENT_NODE)))
-	return;
-    if (node->type == XML_ELEMENT_NODE)
-        node->psvi = NULL;
-
-    cur = node->children;
-    while (cur != NULL) {
-	if (cur->type == XML_ELEMENT_NODE) {
-	    cur->psvi = NULL;
-	    if (cur->children != NULL) {
-		cur = cur->children;
-		continue;
-	    }
-	}
-	if (cur->next != NULL) {
-	    cur = cur->next;
-	    continue;
-	}
-	do {
-	    cur = cur->parent;
-	    if (cur == NULL)
-		break;
-	    if (cur == node) {
-		cur = NULL;
-		break;
-	    }
-	    if (cur->next != NULL) {
-		cur = cur->next;
-		break;
-	    }
-	} while (cur != NULL);
-    }
-    return;
-}
-/************************************************************************
- *									*
- *			Validation interfaces				*
- *									*
- ************************************************************************/
-
-/**
- * xmlRelaxNGNewValidCtxt:
- * @schema:  a precompiled XML RelaxNGs
- *
- * Create an XML RelaxNGs validation context based on the given schema
- *
- * Returns the validation context or NULL in case of error
- */
-xmlRelaxNGValidCtxtPtr
-xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema)
-{
-    xmlRelaxNGValidCtxtPtr ret;
-
-    ret = (xmlRelaxNGValidCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGValidCtxt));
-    if (ret == NULL) {
-        xmlRngVErrMemory(NULL, "building context\n");
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlRelaxNGValidCtxt));
-    ret->schema = schema;
-    ret->error = xmlGenericError;
-    ret->userData = xmlGenericErrorContext;
-    ret->errNr = 0;
-    ret->errMax = 0;
-    ret->err = NULL;
-    ret->errTab = NULL;
-    if (schema != NULL)
-	ret->idref = schema->idref;
-    ret->states = NULL;
-    ret->freeState = NULL;
-    ret->freeStates = NULL;
-    ret->errNo = XML_RELAXNG_OK;
-    return (ret);
-}
-
-/**
- * xmlRelaxNGFreeValidCtxt:
- * @ctxt:  the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt)
-{
-    int k;
-
-    if (ctxt == NULL)
-        return;
-    if (ctxt->states != NULL)
-        xmlRelaxNGFreeStates(NULL, ctxt->states);
-    if (ctxt->freeState != NULL) {
-        for (k = 0; k < ctxt->freeState->nbState; k++) {
-            xmlRelaxNGFreeValidState(NULL, ctxt->freeState->tabState[k]);
-        }
-        xmlRelaxNGFreeStates(NULL, ctxt->freeState);
-    }
-    if (ctxt->freeStates != NULL) {
-        for (k = 0; k < ctxt->freeStatesNr; k++) {
-            xmlRelaxNGFreeStates(NULL, ctxt->freeStates[k]);
-        }
-        xmlFree(ctxt->freeStates);
-    }
-    if (ctxt->errTab != NULL)
-        xmlFree(ctxt->errTab);
-    if (ctxt->elemTab != NULL) {
-        xmlRegExecCtxtPtr exec;
-
-        exec = xmlRelaxNGElemPop(ctxt);
-        while (exec != NULL) {
-            xmlRegFreeExecCtxt(exec);
-            exec = xmlRelaxNGElemPop(ctxt);
-        }
-        xmlFree(ctxt->elemTab);
-    }
-    xmlFree(ctxt);
-}
-
-/**
- * xmlRelaxNGSetValidErrors:
- * @ctxt:  a Relax-NG validation context
- * @err:  the error function
- * @warn: the warning function
- * @ctx: the functions context
- *
- * Set the error and warning callback informations
- */
-void
-xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidityErrorFunc err,
-                         xmlRelaxNGValidityWarningFunc warn, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->error = err;
-    ctxt->warning = warn;
-    ctxt->userData = ctx;
-    ctxt->serror = NULL;
-}
-
-/**
- * xmlRelaxNGSetValidStructuredErrors:
- * @ctxt:  a Relax-NG validation context
- * @serror:  the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
-                                   xmlStructuredErrorFunc serror, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->serror = serror;
-    ctxt->error = NULL;
-    ctxt->warning = NULL;
-    ctxt->userData = ctx;
-}
-
-/**
- * xmlRelaxNGGetValidErrors:
- * @ctxt:  a Relax-NG validation context
- * @err:  the error function result
- * @warn: the warning function result
- * @ctx: the functions context result
- *
- * Get the error and warning callback informations
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
-                         xmlRelaxNGValidityErrorFunc * err,
-                         xmlRelaxNGValidityWarningFunc * warn, void **ctx)
-{
-    if (ctxt == NULL)
-        return (-1);
-    if (err != NULL)
-        *err = ctxt->error;
-    if (warn != NULL)
-        *warn = ctxt->warning;
-    if (ctx != NULL)
-        *ctx = ctxt->userData;
-    return (0);
-}
-
-/**
- * xmlRelaxNGValidateDoc:
- * @ctxt:  a Relax-NG validation context
- * @doc:  a parsed document tree
- *
- * Validate a document tree in memory.
- *
- * Returns 0 if the document is valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-int
-xmlRelaxNGValidateDoc(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
-{
-    int ret;
-
-    if ((ctxt == NULL) || (doc == NULL))
-        return (-1);
-
-    ctxt->doc = doc;
-
-    ret = xmlRelaxNGValidateDocument(ctxt, doc);
-    /*
-     * Remove all left PSVI
-     */
-    xmlRelaxNGCleanPSVI((xmlNodePtr) doc);
-
-    /*
-     * TODO: build error codes
-     */
-    if (ret == -1)
-        return (1);
-    return (ret);
-}
-
-#define bottom_relaxng
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/src/third_party/libxml/src/schematron.c b/src/third_party/libxml/src/schematron.c
deleted file mode 100644
index 6200f2d..0000000
--- a/src/third_party/libxml/src/schematron.c
+++ /dev/null
@@ -1,1787 +0,0 @@
-/*
- * schematron.c : implementation of the Schematron schema validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-/*
- * TODO:
- * + double check the semantic, especially
- *        - multiple rules applying in a single pattern/node
- *        - the semantic of libxml2 patterns vs. XSLT production referenced
- *          by the spec.
- * + export of results in SVRL
- * + full parsing and coverage of the spec, conformance of the input to the
- *   spec
- * + divergences between the draft and the ISO proposed standard :-(
- * + hook and test include
- * + try and compare with the XSLT version
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/pattern.h>
-#include <libxml/schematron.h>
-
-#define SCHEMATRON_PARSE_OPTIONS XML_PARSE_NOENT
-
-#define SCT_OLD_NS BAD_CAST "http://www.ascc.net/xml/schematron"
-
-#define XML_SCHEMATRON_NS BAD_CAST "http://purl.oclc.org/dsdl/schematron"
-
-
-static const xmlChar *xmlSchematronNs = XML_SCHEMATRON_NS;
-static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS;
-
-#define IS_SCHEMATRON(node, elem)					\
-   ((node != NULL) && (node->type == XML_ELEMENT_NODE ) &&		\
-    (node->ns != NULL) &&						\
-    (xmlStrEqual(node->name, (const xmlChar *) elem)) &&		\
-    ((xmlStrEqual(node->ns->href, xmlSchematronNs)) ||			\
-     (xmlStrEqual(node->ns->href, xmlOldSchematronNs))))
-
-#define NEXT_SCHEMATRON(node)						\
-   while (node != NULL) {						\
-       if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) &&	\
-           ((xmlStrEqual(node->ns->href, xmlSchematronNs)) ||		\
-	    (xmlStrEqual(node->ns->href, xmlOldSchematronNs))))		\
-	   break;							\
-       node = node->next;						\
-   }
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-typedef enum {
-    XML_SCHEMATRON_ASSERT=1,
-    XML_SCHEMATRON_REPORT=2
-} xmlSchematronTestType;
-
-/**
- * _xmlSchematronTest:
- *
- * A Schematrons test, either an assert or a report
- */
-typedef struct _xmlSchematronTest xmlSchematronTest;
-typedef xmlSchematronTest *xmlSchematronTestPtr;
-struct _xmlSchematronTest {
-    xmlSchematronTestPtr next;	/* the next test in the list */
-    xmlSchematronTestType type;	/* the test type */
-    xmlNodePtr node;		/* the node in the tree */
-    xmlChar *test;		/* the expression to test */
-    xmlXPathCompExprPtr comp;	/* the compiled expression */
-    xmlChar *report;		/* the message to report */
-};
-
-/**
- * _xmlSchematronRule:
- *
- * A Schematrons rule
- */
-typedef struct _xmlSchematronRule xmlSchematronRule;
-typedef xmlSchematronRule *xmlSchematronRulePtr;
-struct _xmlSchematronRule {
-    xmlSchematronRulePtr next;	/* the next rule in the list */
-    xmlSchematronRulePtr patnext;/* the next rule in the pattern list */
-    xmlNodePtr node;		/* the node in the tree */
-    xmlChar *context;		/* the context evaluation rule */
-    xmlSchematronTestPtr tests;	/* the list of tests */
-    xmlPatternPtr pattern;	/* the compiled pattern associated */
-    xmlChar *report;		/* the message to report */
-};
-
-/**
- * _xmlSchematronPattern:
- *
- * A Schematrons pattern
- */
-typedef struct _xmlSchematronPattern xmlSchematronPattern;
-typedef xmlSchematronPattern *xmlSchematronPatternPtr;
-struct _xmlSchematronPattern {
-    xmlSchematronPatternPtr next;/* the next pattern in the list */
-    xmlSchematronRulePtr rules;	/* the list of rules */
-    xmlChar *name;		/* the name of the pattern */
-};
-
-/**
- * _xmlSchematron:
- *
- * A Schematrons definition
- */
-struct _xmlSchematron {
-    const xmlChar *name;	/* schema name */
-    int preserve;		/* was the document passed by the user */
-    xmlDocPtr doc;		/* pointer to the parsed document */
-    int flags;			/* specific to this schematron */
-
-    void *_private;		/* unused by the library */
-    xmlDictPtr dict;		/* the dictionary used internally */
-
-    const xmlChar *title;	/* the title if any */
-
-    int nbNs;			/* the number of namespaces */
-
-    int nbPattern;		/* the number of patterns */
-    xmlSchematronPatternPtr patterns;/* the patterns found */
-    xmlSchematronRulePtr rules;	/* the rules gathered */
-    int nbNamespaces;		/* number of namespaces in the array */
-    int maxNamespaces;		/* size of the array */
-    const xmlChar **namespaces;	/* the array of namespaces */
-};
-
-/**
- * xmlSchematronValidCtxt:
- *
- * A Schematrons validation context
- */
-struct _xmlSchematronValidCtxt {
-    int type;
-    int flags;			/* an or of xmlSchematronValidOptions */
-
-    xmlDictPtr dict;
-    int nberrors;
-    int err;
-
-    xmlSchematronPtr schema;
-    xmlXPathContextPtr xctxt;
-
-    FILE *outputFile;		/* if using XML_SCHEMATRON_OUT_FILE */
-    xmlBufferPtr outputBuffer;	/* if using XML_SCHEMATRON_OUT_BUFFER */
-#ifdef LIBXML_OUTPUT_ENABLED
-    xmlOutputWriteCallback iowrite; /* if using XML_SCHEMATRON_OUT_IO */
-    xmlOutputCloseCallback  ioclose;
-#endif
-    void *ioctx;
-
-    /* error reporting data */
-    void *userData;                      /* user specific data block */
-    xmlSchematronValidityErrorFunc error;/* the callback in case of errors */
-    xmlSchematronValidityWarningFunc warning;/* callback in case of warning */
-    xmlStructuredErrorFunc serror;       /* the structured function */
-};
-
-struct _xmlSchematronParserCtxt {
-    int type;
-    const xmlChar *URL;
-    xmlDocPtr doc;
-    int preserve;               /* Whether the doc should be freed  */
-    const char *buffer;
-    int size;
-
-    xmlDictPtr dict;            /* dictionary for interned string names */
-
-    int nberrors;
-    int err;
-    xmlXPathContextPtr xctxt;	/* the XPath context used for compilation */
-    xmlSchematronPtr schema;
-
-    int nbNamespaces;		/* number of namespaces in the array */
-    int maxNamespaces;		/* size of the array */
-    const xmlChar **namespaces;	/* the array of namespaces */
-
-    int nbIncludes;		/* number of includes in the array */
-    int maxIncludes;		/* size of the array */
-    xmlNodePtr *includes;	/* the array of includes */
-
-    /* error reporting data */
-    void *userData;                      /* user specific data block */
-    xmlSchematronValidityErrorFunc error;/* the callback in case of errors */
-    xmlSchematronValidityWarningFunc warning;/* callback in case of warning */
-    xmlStructuredErrorFunc serror;       /* the structured function */
-};
-
-#define XML_STRON_CTXT_PARSER 1
-#define XML_STRON_CTXT_VALIDATOR 2
-
-/************************************************************************
- *									*
- *			Error reporting					*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchematronPErrMemory:
- * @node: a context node
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchematronPErrMemory(xmlSchematronParserCtxtPtr ctxt,
-                        const char *extra, xmlNodePtr node)
-{
-    if (ctxt != NULL)
-        ctxt->nberrors++;
-    __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
-                     extra);
-}
-
-/**
- * xmlSchematronPErr:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchematronPErr(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr node, int error,
-              const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
-    xmlGenericErrorFunc channel = NULL;
-    xmlStructuredErrorFunc schannel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        ctxt->nberrors++;
-        channel = ctxt->error;
-        data = ctxt->userData;
-	schannel = ctxt->serror;
-    }
-    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
-                    error, XML_ERR_ERROR, NULL, 0,
-                    (const char *) str1, (const char *) str2, NULL, 0, 0,
-                    msg, str1, str2);
-}
-
-/**
- * xmlSchematronVTypeErrMemory:
- * @node: a context node
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchematronVErrMemory(xmlSchematronValidCtxtPtr ctxt,
-                        const char *extra, xmlNodePtr node)
-{
-    if (ctxt != NULL) {
-        ctxt->nberrors++;
-        ctxt->err = XML_SCHEMAV_INTERNAL;
-    }
-    __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
-                     extra);
-}
-
-/************************************************************************
- *									*
- *		Parsing and compilation of the Schematrontrons		*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchematronAddTest:
- * @ctxt: the schema parsing context
- * @type:  the type of test
- * @rule:  the parent rule
- * @node:  the node hosting the test
- * @test: the associated test
- * @report: the associated report string
- *
- * Add a test to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronTestPtr
-xmlSchematronAddTest(xmlSchematronParserCtxtPtr ctxt,
-                     xmlSchematronTestType type,
-                     xmlSchematronRulePtr rule,
-                     xmlNodePtr node, xmlChar *test, xmlChar *report)
-{
-    xmlSchematronTestPtr ret;
-    xmlXPathCompExprPtr comp;
-
-    if ((ctxt == NULL) || (rule == NULL) || (node == NULL) ||
-        (test == NULL))
-        return(NULL);
-
-    /*
-     * try first to compile the test expression
-     */
-    comp = xmlXPathCtxtCompile(ctxt->xctxt, test);
-    if (comp == NULL) {
-	xmlSchematronPErr(ctxt, node,
-	    XML_SCHEMAP_NOROOT,
-	    "Failed to compile test expression %s",
-	    test, NULL);
-	return(NULL);
-    }
-
-    ret = (xmlSchematronTestPtr) xmlMalloc(sizeof(xmlSchematronTest));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(ctxt, "allocating schema test", node);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronTest));
-    ret->type = type;
-    ret->node = node;
-    ret->test = test;
-    ret->comp = comp;
-    ret->report = report;
-    ret->next = NULL;
-    if (rule->tests == NULL) {
-	rule->tests = ret;
-    } else {
-        xmlSchematronTestPtr prev = rule->tests;
-
-	while (prev->next != NULL)
-	     prev = prev->next;
-        prev->next = ret;
-    }
-    return (ret);
-}
-
-/**
- * xmlSchematronFreeTests:
- * @tests:  a list of tests
- *
- * Free a list of tests.
- */
-static void
-xmlSchematronFreeTests(xmlSchematronTestPtr tests) {
-    xmlSchematronTestPtr next;
-
-    while (tests != NULL) {
-        next = tests->next;
-	if (tests->test != NULL)
-	    xmlFree(tests->test);
-	if (tests->comp != NULL)
-	    xmlXPathFreeCompExpr(tests->comp);
-	if (tests->report != NULL)
-	    xmlFree(tests->report);
-	xmlFree(tests);
-	tests = next;
-    }
-}
-
-/**
- * xmlSchematronAddRule:
- * @ctxt: the schema parsing context
- * @schema:  a schema structure
- * @node:  the node hosting the rule
- * @context: the associated context string
- * @report: the associated report string
- *
- * Add a rule to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronRulePtr
-xmlSchematronAddRule(xmlSchematronParserCtxtPtr ctxt, xmlSchematronPtr schema,
-                     xmlSchematronPatternPtr pat, xmlNodePtr node,
-		     xmlChar *context, xmlChar *report)
-{
-    xmlSchematronRulePtr ret;
-    xmlPatternPtr pattern;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
-        (context == NULL))
-        return(NULL);
-
-    /*
-     * Try first to compile the pattern
-     */
-    pattern = xmlPatterncompile(context, ctxt->dict, XML_PATTERN_XPATH,
-                                ctxt->namespaces);
-    if (pattern == NULL) {
-	xmlSchematronPErr(ctxt, node,
-	    XML_SCHEMAP_NOROOT,
-	    "Failed to compile context expression %s",
-	    context, NULL);
-    }
-
-    ret = (xmlSchematronRulePtr) xmlMalloc(sizeof(xmlSchematronRule));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(ctxt, "allocating schema rule", node);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronRule));
-    ret->node = node;
-    ret->context = context;
-    ret->pattern = pattern;
-    ret->report = report;
-    ret->next = NULL;
-    if (schema->rules == NULL) {
-	schema->rules = ret;
-    } else {
-        xmlSchematronRulePtr prev = schema->rules;
-
-	while (prev->next != NULL)
-	     prev = prev->next;
-        prev->next = ret;
-    }
-    ret->patnext = NULL;
-    if (pat->rules == NULL) {
-	pat->rules = ret;
-    } else {
-        xmlSchematronRulePtr prev = pat->rules;
-
-	while (prev->patnext != NULL)
-	     prev = prev->patnext;
-        prev->patnext = ret;
-    }
-    return (ret);
-}
-
-/**
- * xmlSchematronFreeRules:
- * @rules:  a list of rules
- *
- * Free a list of rules.
- */
-static void
-xmlSchematronFreeRules(xmlSchematronRulePtr rules) {
-    xmlSchematronRulePtr next;
-
-    while (rules != NULL) {
-        next = rules->next;
-	if (rules->tests)
-	    xmlSchematronFreeTests(rules->tests);
-	if (rules->context != NULL)
-	    xmlFree(rules->context);
-	if (rules->pattern)
-	    xmlFreePattern(rules->pattern);
-	if (rules->report != NULL)
-	    xmlFree(rules->report);
-	xmlFree(rules);
-	rules = next;
-    }
-}
-
-/**
- * xmlSchematronAddPattern:
- * @ctxt: the schema parsing context
- * @schema:  a schema structure
- * @node:  the node hosting the pattern
- * @id: the id or name of the pattern
- *
- * Add a pattern to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronPatternPtr
-xmlSchematronAddPattern(xmlSchematronParserCtxtPtr ctxt,
-                     xmlSchematronPtr schema, xmlNodePtr node, xmlChar *name)
-{
-    xmlSchematronPatternPtr ret;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL) || (name == NULL))
-        return(NULL);
-
-    ret = (xmlSchematronPatternPtr) xmlMalloc(sizeof(xmlSchematronPattern));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(ctxt, "allocating schema pattern", node);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronPattern));
-    ret->name = name;
-    ret->next = NULL;
-    if (schema->patterns == NULL) {
-	schema->patterns = ret;
-    } else {
-        xmlSchematronPatternPtr prev = schema->patterns;
-
-	while (prev->next != NULL)
-	     prev = prev->next;
-        prev->next = ret;
-    }
-    return (ret);
-}
-
-/**
- * xmlSchematronFreePatterns:
- * @patterns:  a list of patterns
- *
- * Free a list of patterns.
- */
-static void
-xmlSchematronFreePatterns(xmlSchematronPatternPtr patterns) {
-    xmlSchematronPatternPtr next;
-
-    while (patterns != NULL) {
-        next = patterns->next;
-	if (patterns->name != NULL)
-	    xmlFree(patterns->name);
-	xmlFree(patterns);
-	patterns = next;
-    }
-}
-
-/**
- * xmlSchematronNewSchematron:
- * @ctxt:  a schema validation context
- *
- * Allocate a new Schematron structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchematronPtr
-xmlSchematronNewSchematron(xmlSchematronParserCtxtPtr ctxt)
-{
-    xmlSchematronPtr ret;
-
-    ret = (xmlSchematronPtr) xmlMalloc(sizeof(xmlSchematron));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(ctxt, "allocating schema", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematron));
-    ret->dict = ctxt->dict;
-    xmlDictReference(ret->dict);
-
-    return (ret);
-}
-
-/**
- * xmlSchematronFree:
- * @schema:  a schema structure
- *
- * Deallocate a Schematron structure.
- */
-void
-xmlSchematronFree(xmlSchematronPtr schema)
-{
-    if (schema == NULL)
-        return;
-
-    if ((schema->doc != NULL) && (!(schema->preserve)))
-        xmlFreeDoc(schema->doc);
-
-    if (schema->namespaces != NULL)
-        xmlFree((char **) schema->namespaces);
-
-    xmlSchematronFreeRules(schema->rules);
-    xmlSchematronFreePatterns(schema->patterns);
-    xmlDictFree(schema->dict);
-    xmlFree(schema);
-}
-
-/**
- * xmlSchematronNewParserCtxt:
- * @URL:  the location of the schema
- *
- * Create an XML Schematrons parse context for that file/resource expected
- * to contain an XML Schematrons file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewParserCtxt(const char *URL)
-{
-    xmlSchematronParserCtxtPtr ret;
-
-    if (URL == NULL)
-        return (NULL);
-
-    ret =
-        (xmlSchematronParserCtxtPtr)
-        xmlMalloc(sizeof(xmlSchematronParserCtxt));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser context",
-                                NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronParserCtxt));
-    ret->type = XML_STRON_CTXT_PARSER;
-    ret->dict = xmlDictCreate();
-    ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
-    ret->includes = NULL;
-    ret->xctxt = xmlXPathNewContext(NULL);
-    if (ret->xctxt == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
-                                NULL);
-	xmlSchematronFreeParserCtxt(ret);
-        return (NULL);
-    }
-    ret->xctxt->flags = XML_XPATH_CHECKNS;
-    return (ret);
-}
-
-/**
- * xmlSchematronNewMemParserCtxt:
- * @buffer:  a pointer to a char array containing the schemas
- * @size:  the size of the array
- *
- * Create an XML Schematrons parse context for that memory buffer expected
- * to contain an XML Schematrons file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewMemParserCtxt(const char *buffer, int size)
-{
-    xmlSchematronParserCtxtPtr ret;
-
-    if ((buffer == NULL) || (size <= 0))
-        return (NULL);
-
-    ret =
-        (xmlSchematronParserCtxtPtr)
-        xmlMalloc(sizeof(xmlSchematronParserCtxt));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser context",
-                                NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronParserCtxt));
-    ret->buffer = buffer;
-    ret->size = size;
-    ret->dict = xmlDictCreate();
-    ret->xctxt = xmlXPathNewContext(NULL);
-    if (ret->xctxt == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
-                                NULL);
-	xmlSchematronFreeParserCtxt(ret);
-        return (NULL);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchematronNewDocParserCtxt:
- * @doc:  a preparsed document tree
- *
- * Create an XML Schematrons parse context for that document.
- * NB. The document may be modified during the parsing process.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewDocParserCtxt(xmlDocPtr doc)
-{
-    xmlSchematronParserCtxtPtr ret;
-
-    if (doc == NULL)
-        return (NULL);
-
-    ret =
-        (xmlSchematronParserCtxtPtr)
-        xmlMalloc(sizeof(xmlSchematronParserCtxt));
-    if (ret == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser context",
-                                NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronParserCtxt));
-    ret->doc = doc;
-    ret->dict = xmlDictCreate();
-    /* The application has responsibility for the document */
-    ret->preserve = 1;
-    ret->xctxt = xmlXPathNewContext(doc);
-    if (ret->xctxt == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
-                                NULL);
-	xmlSchematronFreeParserCtxt(ret);
-        return (NULL);
-    }
-
-    return (ret);
-}
-
-/**
- * xmlSchematronFreeParserCtxt:
- * @ctxt:  the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlSchematronFreeParserCtxt(xmlSchematronParserCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->doc != NULL && !ctxt->preserve)
-        xmlFreeDoc(ctxt->doc);
-    if (ctxt->xctxt != NULL) {
-        xmlXPathFreeContext(ctxt->xctxt);
-    }
-    if (ctxt->namespaces != NULL)
-        xmlFree((char **) ctxt->namespaces);
-    xmlDictFree(ctxt->dict);
-    xmlFree(ctxt);
-}
-
-#if 0
-/**
- * xmlSchematronPushInclude:
- * @ctxt:  the schema parser context
- * @doc:  the included document
- * @cur:  the current include node
- *
- * Add an included document
- */
-static void
-xmlSchematronPushInclude(xmlSchematronParserCtxtPtr ctxt,
-                        xmlDocPtr doc, xmlNodePtr cur)
-{
-    if (ctxt->includes == NULL) {
-        ctxt->maxIncludes = 10;
-        ctxt->includes = (xmlNodePtr *)
-	    xmlMalloc(ctxt->maxIncludes * 2 * sizeof(xmlNodePtr));
-	if (ctxt->includes == NULL) {
-	    xmlSchematronPErrMemory(NULL, "allocating parser includes",
-				    NULL);
-	    return;
-	}
-        ctxt->nbIncludes = 0;
-    } else if (ctxt->nbIncludes + 2 >= ctxt->maxIncludes) {
-        xmlNodePtr *tmp;
-
-	tmp = (xmlNodePtr *)
-	    xmlRealloc(ctxt->includes, ctxt->maxIncludes * 4 *
-	               sizeof(xmlNodePtr));
-	if (tmp == NULL) {
-	    xmlSchematronPErrMemory(NULL, "allocating parser includes",
-				    NULL);
-	    return;
-	}
-        ctxt->includes = tmp;
-	ctxt->maxIncludes *= 2;
-    }
-    ctxt->includes[2 * ctxt->nbIncludes] = cur;
-    ctxt->includes[2 * ctxt->nbIncludes + 1] = (xmlNodePtr) doc;
-    ctxt->nbIncludes++;
-}
-
-/**
- * xmlSchematronPopInclude:
- * @ctxt:  the schema parser context
- *
- * Pop an include level. The included document is being freed
- *
- * Returns the node immediately following the include or NULL if the
- *         include list was empty.
- */
-static xmlNodePtr
-xmlSchematronPopInclude(xmlSchematronParserCtxtPtr ctxt)
-{
-    xmlDocPtr doc;
-    xmlNodePtr ret;
-
-    if (ctxt->nbIncludes <= 0)
-        return(NULL);
-    ctxt->nbIncludes--;
-    doc = (xmlDocPtr) ctxt->includes[2 * ctxt->nbIncludes + 1];
-    ret = ctxt->includes[2 * ctxt->nbIncludes];
-    xmlFreeDoc(doc);
-    if (ret != NULL)
-	ret = ret->next;
-    if (ret == NULL)
-        return(xmlSchematronPopInclude(ctxt));
-    return(ret);
-}
-#endif
-
-/**
- * xmlSchematronAddNamespace:
- * @ctxt:  the schema parser context
- * @prefix:  the namespace prefix
- * @ns:  the namespace name
- *
- * Add a namespace definition in the context
- */
-static void
-xmlSchematronAddNamespace(xmlSchematronParserCtxtPtr ctxt,
-                          const xmlChar *prefix, const xmlChar *ns)
-{
-    if (ctxt->namespaces == NULL) {
-        ctxt->maxNamespaces = 10;
-        ctxt->namespaces = (const xmlChar **)
-	    xmlMalloc(ctxt->maxNamespaces * 2 * sizeof(const xmlChar *));
-	if (ctxt->namespaces == NULL) {
-	    xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
-				    NULL);
-	    return;
-	}
-        ctxt->nbNamespaces = 0;
-    } else if (ctxt->nbNamespaces + 2 >= ctxt->maxNamespaces) {
-        const xmlChar **tmp;
-
-	tmp = (const xmlChar **)
-	    xmlRealloc((xmlChar **) ctxt->namespaces, ctxt->maxNamespaces * 4 *
-	               sizeof(const xmlChar *));
-	if (tmp == NULL) {
-	    xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
-				    NULL);
-	    return;
-	}
-        ctxt->namespaces = tmp;
-	ctxt->maxNamespaces *= 2;
-    }
-    ctxt->namespaces[2 * ctxt->nbNamespaces] =
-        xmlDictLookup(ctxt->dict, ns, -1);
-    ctxt->namespaces[2 * ctxt->nbNamespaces + 1] =
-        xmlDictLookup(ctxt->dict, prefix, -1);
-    ctxt->nbNamespaces++;
-    ctxt->namespaces[2 * ctxt->nbNamespaces] = NULL;
-    ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = NULL;
-
-}
-
-/**
- * xmlSchematronParseRule:
- * @ctxt:  a schema validation context
- * @rule:  the rule node
- *
- * parse a rule element
- */
-static void
-xmlSchematronParseRule(xmlSchematronParserCtxtPtr ctxt,
-                       xmlSchematronPatternPtr pattern,
-		       xmlNodePtr rule)
-{
-    xmlNodePtr cur;
-    int nbChecks = 0;
-    xmlChar *test;
-    xmlChar *context;
-    xmlChar *report;
-    xmlSchematronRulePtr ruleptr;
-    xmlSchematronTestPtr testptr;
-
-    if ((ctxt == NULL) || (rule == NULL)) return;
-
-    context = xmlGetNoNsProp(rule, BAD_CAST "context");
-    if (context == NULL) {
-	xmlSchematronPErr(ctxt, rule,
-	    XML_SCHEMAP_NOROOT,
-	    "rule has no context attribute",
-	    NULL, NULL);
-	return;
-    } else if (context[0] == 0) {
-	xmlSchematronPErr(ctxt, rule,
-	    XML_SCHEMAP_NOROOT,
-	    "rule has an empty context attribute",
-	    NULL, NULL);
-	xmlFree(context);
-	return;
-    } else {
-	ruleptr = xmlSchematronAddRule(ctxt, ctxt->schema, pattern,
-	                               rule, context, NULL);
-	if (ruleptr == NULL) {
-	    xmlFree(context);
-	    return;
-	}
-    }
-
-    cur = rule->children;
-    NEXT_SCHEMATRON(cur);
-    while (cur != NULL) {
-	if (IS_SCHEMATRON(cur, "assert")) {
-	    nbChecks++;
-	    test = xmlGetNoNsProp(cur, BAD_CAST "test");
-	    if (test == NULL) {
-		xmlSchematronPErr(ctxt, cur,
-		    XML_SCHEMAP_NOROOT,
-		    "assert has no test attribute",
-		    NULL, NULL);
-	    } else if (test[0] == 0) {
-		xmlSchematronPErr(ctxt, cur,
-		    XML_SCHEMAP_NOROOT,
-		    "assert has an empty test attribute",
-		    NULL, NULL);
-		xmlFree(test);
-	    } else {
-		/* TODO will need dynamic processing instead */
-		report = xmlNodeGetContent(cur);
-
-		testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_ASSERT,
-		                               ruleptr, cur, test, report);
-		if (testptr == NULL)
-		    xmlFree(test);
-	    }
-	} else if (IS_SCHEMATRON(cur, "report")) {
-	    nbChecks++;
-	    test = xmlGetNoNsProp(cur, BAD_CAST "test");
-	    if (test == NULL) {
-		xmlSchematronPErr(ctxt, cur,
-		    XML_SCHEMAP_NOROOT,
-		    "assert has no test attribute",
-		    NULL, NULL);
-	    } else if (test[0] == 0) {
-		xmlSchematronPErr(ctxt, cur,
-		    XML_SCHEMAP_NOROOT,
-		    "assert has an empty test attribute",
-		    NULL, NULL);
-		xmlFree(test);
-	    } else {
-		/* TODO will need dynamic processing instead */
-		report = xmlNodeGetContent(cur);
-
-		testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_REPORT,
-		                               ruleptr, cur, test, report);
-		if (testptr == NULL)
-		    xmlFree(test);
-	    }
-	} else {
-	    xmlSchematronPErr(ctxt, cur,
-		XML_SCHEMAP_NOROOT,
-		"Expecting an assert or a report element instead of %s",
-		cur->name, NULL);
-	}
-	cur = cur->next;
-	NEXT_SCHEMATRON(cur);
-    }
-    if (nbChecks == 0) {
-	xmlSchematronPErr(ctxt, rule,
-	    XML_SCHEMAP_NOROOT,
-	    "rule has no assert nor report element", NULL, NULL);
-    }
-}
-
-/**
- * xmlSchematronParsePattern:
- * @ctxt:  a schema validation context
- * @pat:  the pattern node
- *
- * parse a pattern element
- */
-static void
-xmlSchematronParsePattern(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr pat)
-{
-    xmlNodePtr cur;
-    xmlSchematronPatternPtr pattern;
-    int nbRules = 0;
-    xmlChar *id;
-
-    if ((ctxt == NULL) || (pat == NULL)) return;
-
-    id = xmlGetNoNsProp(pat, BAD_CAST "id");
-    if (id == NULL) {
-	id = xmlGetNoNsProp(pat, BAD_CAST "name");
-    }
-    pattern = xmlSchematronAddPattern(ctxt, ctxt->schema, pat, id);
-    if (pattern == NULL) {
-	if (id != NULL)
-	    xmlFree(id);
-        return;
-    }
-    cur = pat->children;
-    NEXT_SCHEMATRON(cur);
-    while (cur != NULL) {
-	if (IS_SCHEMATRON(cur, "rule")) {
-	    xmlSchematronParseRule(ctxt, pattern, cur);
-	    nbRules++;
-	} else {
-	    xmlSchematronPErr(ctxt, cur,
-		XML_SCHEMAP_NOROOT,
-		"Expecting a rule element instead of %s", cur->name, NULL);
-	}
-	cur = cur->next;
-	NEXT_SCHEMATRON(cur);
-    }
-    if (nbRules == 0) {
-	xmlSchematronPErr(ctxt, pat,
-	    XML_SCHEMAP_NOROOT,
-	    "Pattern has no rule element", NULL, NULL);
-    }
-}
-
-#if 0
-/**
- * xmlSchematronLoadInclude:
- * @ctxt:  a schema validation context
- * @cur:  the include element
- *
- * Load the include document, Push the current pointer
- *
- * Returns the updated node pointer
- */
-static xmlNodePtr
-xmlSchematronLoadInclude(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr cur)
-{
-    xmlNodePtr ret = NULL;
-    xmlDocPtr doc = NULL;
-    xmlChar *href = NULL;
-    xmlChar *base = NULL;
-    xmlChar *URI = NULL;
-
-    if ((ctxt == NULL) || (cur == NULL))
-        return(NULL);
-
-    href = xmlGetNoNsProp(cur, BAD_CAST "href");
-    if (href == NULL) {
-	xmlSchematronPErr(ctxt, cur,
-	    XML_SCHEMAP_NOROOT,
-	    "Include has no href attribute", NULL, NULL);
-	return(cur->next);
-    }
-
-    /* do the URI base composition, load and find the root */
-    base = xmlNodeGetBase(cur->doc, cur);
-    URI = xmlBuildURI(href, base);
-    doc = xmlReadFile((const char *) URI, NULL, SCHEMATRON_PARSE_OPTIONS);
-    if (doc == NULL) {
-	xmlSchematronPErr(ctxt, cur,
-		      XML_SCHEMAP_FAILED_LOAD,
-		      "could not load include '%s'.\n",
-		      URI, NULL);
-	goto done;
-    }
-    ret = xmlDocGetRootElement(doc);
-    if (ret == NULL) {
-	xmlSchematronPErr(ctxt, cur,
-		      XML_SCHEMAP_FAILED_LOAD,
-		      "could not find root from include '%s'.\n",
-		      URI, NULL);
-	goto done;
-    }
-
-    /* Success, push the include for rollback on exit */
-    xmlSchematronPushInclude(ctxt, doc, cur);
-
-done:
-    if (ret == NULL) {
-        if (doc != NULL)
-	    xmlFreeDoc(doc);
-    }
-    xmlFree(href);
-    if (base != NULL)
-        xmlFree(base);
-    if (URI != NULL)
-        xmlFree(URI);
-    return(ret);
-}
-#endif
-
-/**
- * xmlSchematronParse:
- * @ctxt:  a schema validation context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML Schematron structure built from the resource or
- *         NULL in case of error
- */
-xmlSchematronPtr
-xmlSchematronParse(xmlSchematronParserCtxtPtr ctxt)
-{
-    xmlSchematronPtr ret = NULL;
-    xmlDocPtr doc;
-    xmlNodePtr root, cur;
-    int preserve = 0;
-
-    if (ctxt == NULL)
-        return (NULL);
-
-    ctxt->nberrors = 0;
-
-    /*
-     * First step is to parse the input document into an DOM/Infoset
-     */
-    if (ctxt->URL != NULL) {
-        doc = xmlReadFile((const char *) ctxt->URL, NULL,
-	                  SCHEMATRON_PARSE_OPTIONS);
-        if (doc == NULL) {
-	    xmlSchematronPErr(ctxt, NULL,
-			  XML_SCHEMAP_FAILED_LOAD,
-                          "xmlSchematronParse: could not load '%s'.\n",
-                          ctxt->URL, NULL);
-            return (NULL);
-        }
-	ctxt->preserve = 0;
-    } else if (ctxt->buffer != NULL) {
-        doc = xmlReadMemory(ctxt->buffer, ctxt->size, NULL, NULL,
-	                    SCHEMATRON_PARSE_OPTIONS);
-        if (doc == NULL) {
-	    xmlSchematronPErr(ctxt, NULL,
-			  XML_SCHEMAP_FAILED_PARSE,
-                          "xmlSchematronParse: could not parse.\n",
-                          NULL, NULL);
-            return (NULL);
-        }
-        doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
-        ctxt->URL = xmlDictLookup(ctxt->dict, BAD_CAST "in_memory_buffer", -1);
-	ctxt->preserve = 0;
-    } else if (ctxt->doc != NULL) {
-        doc = ctxt->doc;
-	preserve = 1;
-	ctxt->preserve = 1;
-    } else {
-	xmlSchematronPErr(ctxt, NULL,
-		      XML_SCHEMAP_NOTHING_TO_PARSE,
-		      "xmlSchematronParse: could not parse.\n",
-		      NULL, NULL);
-        return (NULL);
-    }
-
-    /*
-     * Then extract the root and Schematron parse it
-     */
-    root = xmlDocGetRootElement(doc);
-    if (root == NULL) {
-	xmlSchematronPErr(ctxt, (xmlNodePtr) doc,
-		      XML_SCHEMAP_NOROOT,
-		      "The schema has no document element.\n", NULL, NULL);
-	if (!preserve) {
-	    xmlFreeDoc(doc);
-	}
-        return (NULL);
-    }
-
-    if (!IS_SCHEMATRON(root, "schema")) {
-	xmlSchematronPErr(ctxt, root,
-	    XML_SCHEMAP_NOROOT,
-	    "The XML document '%s' is not a XML schematron document",
-	    ctxt->URL, NULL);
-	goto exit;
-    }
-    ret = xmlSchematronNewSchematron(ctxt);
-    if (ret == NULL)
-        goto exit;
-    ctxt->schema = ret;
-
-    /*
-     * scan the schema elements
-     */
-    cur = root->children;
-    NEXT_SCHEMATRON(cur);
-    if (IS_SCHEMATRON(cur, "title")) {
-        xmlChar *title = xmlNodeGetContent(cur);
-	if (title != NULL) {
-	    ret->title = xmlDictLookup(ret->dict, title, -1);
-	    xmlFree(title);
-	}
-	cur = cur->next;
-	NEXT_SCHEMATRON(cur);
-    }
-    while (IS_SCHEMATRON(cur, "ns")) {
-        xmlChar *prefix = xmlGetNoNsProp(cur, BAD_CAST "prefix");
-        xmlChar *uri = xmlGetNoNsProp(cur, BAD_CAST "uri");
-	if ((uri == NULL) || (uri[0] == 0)) {
-	    xmlSchematronPErr(ctxt, cur,
-		XML_SCHEMAP_NOROOT,
-		"ns element has no uri", NULL, NULL);
-	}
-	if ((prefix == NULL) || (prefix[0] == 0)) {
-	    xmlSchematronPErr(ctxt, cur,
-		XML_SCHEMAP_NOROOT,
-		"ns element has no prefix", NULL, NULL);
-	}
-	if ((prefix) && (uri)) {
-	    xmlXPathRegisterNs(ctxt->xctxt, prefix, uri);
-	    xmlSchematronAddNamespace(ctxt, prefix, uri);
-	    ret->nbNs++;
-	}
-	if (uri)
-	    xmlFree(uri);
-	if (prefix)
-	    xmlFree(prefix);
-	cur = cur->next;
-	NEXT_SCHEMATRON(cur);
-    }
-    while (cur != NULL) {
-	if (IS_SCHEMATRON(cur, "pattern")) {
-	    xmlSchematronParsePattern(ctxt, cur);
-	    ret->nbPattern++;
-	} else {
-	    xmlSchematronPErr(ctxt, cur,
-		XML_SCHEMAP_NOROOT,
-		"Expecting a pattern element instead of %s", cur->name, NULL);
-	}
-	cur = cur->next;
-	NEXT_SCHEMATRON(cur);
-    }
-    if (ret->nbPattern == 0) {
-	xmlSchematronPErr(ctxt, root,
-	    XML_SCHEMAP_NOROOT,
-	    "The schematron document '%s' has no pattern",
-	    ctxt->URL, NULL);
-	goto exit;
-    }
-    /* the original document must be kept for reporting */
-    ret->doc = doc;
-    if (preserve) {
-	    ret->preserve = 1;
-    }
-    preserve = 1;
-
-exit:
-    if (!preserve) {
-	xmlFreeDoc(doc);
-    }
-    if (ret != NULL) {
-	if (ctxt->nberrors != 0) {
-	    xmlSchematronFree(ret);
-	    ret = NULL;
-	} else {
-	    ret->namespaces = ctxt->namespaces;
-	    ret->nbNamespaces = ctxt->nbNamespaces;
-	    ctxt->namespaces = NULL;
-	}
-    }
-    return (ret);
-}
-
-/************************************************************************
- *									*
- *		Schematrontron Reports handler				*
- *									*
- ************************************************************************/
-
-static xmlNodePtr
-xmlSchematronGetNode(xmlSchematronValidCtxtPtr ctxt,
-                     xmlNodePtr cur, const xmlChar *xpath) {
-    xmlNodePtr node = NULL;
-    xmlXPathObjectPtr ret;
-
-    if ((ctxt == NULL) || (cur == NULL) || (xpath == NULL))
-        return(NULL);
-
-    ctxt->xctxt->doc = cur->doc;
-    ctxt->xctxt->node = cur;
-    ret = xmlXPathEval(xpath, ctxt->xctxt);
-    if (ret == NULL)
-        return(NULL);
-
-    if ((ret->type == XPATH_NODESET) &&
-        (ret->nodesetval != NULL) && (ret->nodesetval->nodeNr > 0))
-	node = ret->nodesetval->nodeTab[0];
-
-    xmlXPathFreeObject(ret);
-    return(node);
-}
-
-/**
- * xmlSchematronReportOutput:
- * @ctxt: the validation context
- * @cur: the current node tested
- * @msg: the message output
- *
- * Output part of the report to whatever channel the user selected
- */
-static void
-xmlSchematronReportOutput(xmlSchematronValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                          xmlNodePtr cur ATTRIBUTE_UNUSED,
-                          const char *msg) {
-    /* TODO */
-    fprintf(stderr, "%s", msg);
-}
-
-/**
- * xmlSchematronFormatReport:
- * @ctxt:  the validation context
- * @test: the test node
- * @cur: the current node tested
- *
- * Build the string being reported to the user.
- *
- * Returns a report string or NULL in case of error. The string needs
- *         to be deallocated by teh caller
- */
-static xmlChar *
-xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
-			  xmlNodePtr test, xmlNodePtr cur) {
-    xmlChar *ret = NULL;
-    xmlNodePtr child, node;
-
-    if ((test == NULL) || (cur == NULL))
-        return(ret);
-
-    child = test->children;
-    while (child != NULL) {
-        if ((child->type == XML_TEXT_NODE) ||
-	    (child->type == XML_CDATA_SECTION_NODE))
-	    ret = xmlStrcat(ret, child->content);
-	else if (IS_SCHEMATRON(child, "name")) {
-	    xmlChar *path;
-
-	    path = xmlGetNoNsProp(child, BAD_CAST "path");
-
-            node = cur;
-	    if (path != NULL) {
-	        node = xmlSchematronGetNode(ctxt, cur, path);
-		if (node == NULL)
-		    node = cur;
-		xmlFree(path);
-	    }
-
-	    if ((node->ns == NULL) || (node->ns->prefix == NULL))
-	        ret = xmlStrcat(ret, node->name);
-	    else {
-	        ret = xmlStrcat(ret, node->ns->prefix);
-	        ret = xmlStrcat(ret, BAD_CAST ":");
-	        ret = xmlStrcat(ret, node->name);
-	    }
-	} else {
-	    child = child->next;
-	    continue;
-	}
-
-	/*
-	 * remove superfluous \n
-	 */
-	if (ret != NULL) {
-	    int len = xmlStrlen(ret);
-	    xmlChar c;
-
-	    if (len > 0) {
-		c = ret[len - 1];
-		if ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t')) {
-		    while ((c == ' ') || (c == '\n') ||
-		           (c == '\r') || (c == '\t')) {
-			len--;
-			if (len == 0)
-			    break;
-			c = ret[len - 1];
-		    }
-		    ret[len] = ' ';
-		    ret[len + 1] = 0;
-		}
-	    }
-	}
-
-        child = child->next;
-    }
-    return(ret);
-}
-
-/**
- * xmlSchematronReportSuccess:
- * @ctxt:  the validation context
- * @test: the compiled test
- * @cur: the current node tested
- * @success: boolean value for the result
- *
- * called from the validation engine when an assert or report test have
- * been done.
- */
-static void
-xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt,
-		   xmlSchematronTestPtr test, xmlNodePtr cur, xmlSchematronPatternPtr pattern, int success) {
-    if ((ctxt == NULL) || (cur == NULL) || (test == NULL))
-        return;
-    /* if quiet and not SVRL report only failures */
-    if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) &&
-        ((ctxt->flags & XML_SCHEMATRON_OUT_XML) == 0) &&
-	(test->type == XML_SCHEMATRON_REPORT))
-        return;
-    if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
-        TODO
-    } else {
-        xmlChar *path;
-	char msg[1000];
-	long line;
-	const xmlChar *report = NULL;
-
-        if (((test->type == XML_SCHEMATRON_REPORT) & (!success)) ||
-	    ((test->type == XML_SCHEMATRON_ASSERT) & (success)))
-	    return;
-	line = xmlGetLineNo(cur);
-	path = xmlGetNodePath(cur);
-	if (path == NULL)
-	    path = (xmlChar *) cur->name;
-#if 0
-	if ((test->report != NULL) && (test->report[0] != 0))
-	    report = test->report;
-#endif
-	if (test->node != NULL)
-            report = xmlSchematronFormatReport(ctxt, test->node, cur);
-	if (report == NULL) {
-	    if (test->type == XML_SCHEMATRON_ASSERT) {
-            report = xmlStrdup((const xmlChar *) "node failed assert");
-	    } else {
-            report = xmlStrdup((const xmlChar *) "node failed report");
-	    }
-	    }
-	    snprintf(msg, 999, "%s line %ld: %s\n", (const char *) path,
-		     line, (const char *) report);
-
-    if (ctxt->flags & XML_SCHEMATRON_OUT_ERROR) {
-        xmlStructuredErrorFunc schannel = NULL;
-        xmlGenericErrorFunc channel = NULL;
-        void *data = NULL;
-
-        if (ctxt != NULL) {
-            if (ctxt->serror != NULL)
-                schannel = ctxt->serror;
-            else
-                channel = ctxt->error;
-            data = ctxt->userData;
-	}
-
-        __xmlRaiseError(schannel, channel, data,
-                        NULL, cur, XML_FROM_SCHEMATRONV,
-                        (test->type == XML_SCHEMATRON_ASSERT)?XML_SCHEMATRONV_ASSERT:XML_SCHEMATRONV_REPORT,
-                        XML_ERR_ERROR, NULL, line,
-                        (pattern == NULL)?NULL:((const char *) pattern->name),
-                        (const char *) path,
-                        (const char *) report, 0, 0,
-                        "%s", msg);
-    } else {
-	xmlSchematronReportOutput(ctxt, cur, &msg[0]);
-    }
-
-    xmlFree((char *) report);
-
-	if ((path != NULL) && (path != (xmlChar *) cur->name))
-	    xmlFree(path);
-    }
-}
-
-/**
- * xmlSchematronReportPattern:
- * @ctxt:  the validation context
- * @pattern: the current pattern
- *
- * called from the validation engine when starting to check a pattern
- */
-static void
-xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt,
-			   xmlSchematronPatternPtr pattern) {
-    if ((ctxt == NULL) || (pattern == NULL))
-        return;
-    if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) || (ctxt->flags & XML_SCHEMATRON_OUT_ERROR)) /* Error gives pattern name as part of error */
-        return;
-    if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
-        TODO
-    } else {
-	char msg[1000];
-
-	if (pattern->name == NULL)
-	    return;
-	snprintf(msg, 999, "Pattern: %s\n", (const char *) pattern->name);
-	xmlSchematronReportOutput(ctxt, NULL, &msg[0]);
-    }
-}
-
-
-/************************************************************************
- *									*
- *		Validation against a Schematrontron				*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchematronSetValidStructuredErrors:
- * @ctxt:  a Schematron validation context
- * @serror:  the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchematronSetValidStructuredErrors(xmlSchematronValidCtxtPtr ctxt,
-                                      xmlStructuredErrorFunc serror, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->serror = serror;
-    ctxt->error = NULL;
-    ctxt->warning = NULL;
-    ctxt->userData = ctx;
-}
-
-/**
- * xmlSchematronNewValidCtxt:
- * @schema:  a precompiled XML Schematrons
- * @options: a set of xmlSchematronValidOptions
- *
- * Create an XML Schematrons validation context based on the given schema.
- *
- * Returns the validation context or NULL in case of error
- */
-xmlSchematronValidCtxtPtr
-xmlSchematronNewValidCtxt(xmlSchematronPtr schema, int options)
-{
-    int i;
-    xmlSchematronValidCtxtPtr ret;
-
-    ret = (xmlSchematronValidCtxtPtr) xmlMalloc(sizeof(xmlSchematronValidCtxt));
-    if (ret == NULL) {
-        xmlSchematronVErrMemory(NULL, "allocating validation context",
-                                NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchematronValidCtxt));
-    ret->type = XML_STRON_CTXT_VALIDATOR;
-    ret->schema = schema;
-    ret->xctxt = xmlXPathNewContext(NULL);
-    ret->flags = options;
-    if (ret->xctxt == NULL) {
-        xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
-                                NULL);
-	xmlSchematronFreeValidCtxt(ret);
-        return (NULL);
-    }
-    for (i = 0;i < schema->nbNamespaces;i++) {
-        if ((schema->namespaces[2 * i] == NULL) ||
-            (schema->namespaces[2 * i + 1] == NULL))
-	    break;
-	xmlXPathRegisterNs(ret->xctxt, schema->namespaces[2 * i + 1],
-	                   schema->namespaces[2 * i]);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchematronFreeValidCtxt:
- * @ctxt:  the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlSchematronFreeValidCtxt(xmlSchematronValidCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->xctxt != NULL)
-        xmlXPathFreeContext(ctxt->xctxt);
-    if (ctxt->dict != NULL)
-        xmlDictFree(ctxt->dict);
-    xmlFree(ctxt);
-}
-
-static xmlNodePtr
-xmlSchematronNextNode(xmlNodePtr cur) {
-    if (cur->children != NULL) {
-	/*
-	 * Do not descend on entities declarations
-	 */
-	if (cur->children->type != XML_ENTITY_DECL) {
-	    cur = cur->children;
-	    /*
-	     * Skip DTDs
-	     */
-	    if (cur->type != XML_DTD_NODE)
-		return(cur);
-	}
-    }
-
-    while (cur->next != NULL) {
-	cur = cur->next;
-	if ((cur->type != XML_ENTITY_DECL) &&
-	    (cur->type != XML_DTD_NODE))
-	    return(cur);
-    }
-
-    do {
-	cur = cur->parent;
-	if (cur == NULL) break;
-	if (cur->type == XML_DOCUMENT_NODE) return(NULL);
-	if (cur->next != NULL) {
-	    cur = cur->next;
-	    return(cur);
-	}
-    } while (cur != NULL);
-    return(cur);
-}
-
-/**
- * xmlSchematronRunTest:
- * @ctxt:  the schema validation context
- * @test:  the current test
- * @instance:  the document instace tree
- * @cur:  the current node in the instance
- *
- * Validate a rule against a tree instance at a given position
- *
- * Returns 1 in case of success, 0 if error and -1 in case of internal error
- */
-static int
-xmlSchematronRunTest(xmlSchematronValidCtxtPtr ctxt,
-     xmlSchematronTestPtr test, xmlDocPtr instance, xmlNodePtr cur, xmlSchematronPatternPtr pattern)
-{
-    xmlXPathObjectPtr ret;
-    int failed;
-
-    failed = 0;
-    ctxt->xctxt->doc = instance;
-    ctxt->xctxt->node = cur;
-    ret = xmlXPathCompiledEval(test->comp, ctxt->xctxt);
-    if (ret == NULL) {
-	failed = 1;
-    } else {
-        switch (ret->type) {
-	    case XPATH_XSLT_TREE:
-	    case XPATH_NODESET:
-		if ((ret->nodesetval == NULL) ||
-		    (ret->nodesetval->nodeNr == 0))
-		    failed = 1;
-		break;
-	    case XPATH_BOOLEAN:
-		failed = !ret->boolval;
-		break;
-	    case XPATH_NUMBER:
-		if ((xmlXPathIsNaN(ret->floatval)) ||
-		    (ret->floatval == 0.0))
-		    failed = 1;
-		break;
-	    case XPATH_STRING:
-		if ((ret->stringval == NULL) ||
-		    (ret->stringval[0] == 0))
-		    failed = 1;
-		break;
-	    case XPATH_UNDEFINED:
-	    case XPATH_POINT:
-	    case XPATH_RANGE:
-	    case XPATH_LOCATIONSET:
-	    case XPATH_USERS:
-		failed = 1;
-		break;
-	}
-	xmlXPathFreeObject(ret);
-    }
-    if ((failed) && (test->type == XML_SCHEMATRON_ASSERT))
-        ctxt->nberrors++;
-    else if ((!failed) && (test->type == XML_SCHEMATRON_REPORT))
-        ctxt->nberrors++;
-
-    xmlSchematronReportSuccess(ctxt, test, cur, pattern, !failed);
-
-    return(!failed);
-}
-
-/**
- * xmlSchematronValidateDoc:
- * @ctxt:  the schema validation context
- * @instance:  the document instace tree
- *
- * Validate a tree instance against the schematron
- *
- * Returns 0 in case of success, -1 in case of internal error
- *         and an error count otherwise.
- */
-int
-xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
-{
-    xmlNodePtr cur, root;
-    xmlSchematronPatternPtr pattern;
-    xmlSchematronRulePtr rule;
-    xmlSchematronTestPtr test;
-
-    if ((ctxt == NULL) || (ctxt->schema == NULL) ||
-        (ctxt->schema->rules == NULL) || (instance == NULL))
-        return(-1);
-    ctxt->nberrors = 0;
-    root = xmlDocGetRootElement(instance);
-    if (root == NULL) {
-        TODO
-	ctxt->nberrors++;
-	return(1);
-    }
-    if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) ||
-        (ctxt->flags == 0)) {
-	/*
-	 * we are just trying to assert the validity of the document,
-	 * speed primes over the output, run in a single pass
-	 */
-	cur = root;
-	while (cur != NULL) {
-	    rule = ctxt->schema->rules;
-	    while (rule != NULL) {
-		if (xmlPatternMatch(rule->pattern, cur) == 1) {
-		    test = rule->tests;
-		    while (test != NULL) {
-			xmlSchematronRunTest(ctxt, test, instance, cur, (xmlSchematronPatternPtr)rule->pattern);
-			test = test->next;
-		    }
-		}
-		rule = rule->next;
-	    }
-
-	    cur = xmlSchematronNextNode(cur);
-	}
-    } else {
-        /*
-	 * Process all contexts one at a time
-	 */
-	pattern = ctxt->schema->patterns;
-
-	while (pattern != NULL) {
-	    xmlSchematronReportPattern(ctxt, pattern);
-
-	    /*
-	     * TODO convert the pattern rule to a direct XPath and
-	     * compute directly instead of using the pattern matching
-	     * over the full document...
-	     * Check the exact semantic
-	     */
-	    cur = root;
-	    while (cur != NULL) {
-		rule = pattern->rules;
-		while (rule != NULL) {
-		    if (xmlPatternMatch(rule->pattern, cur) == 1) {
-			test = rule->tests;
-			while (test != NULL) {
-			    xmlSchematronRunTest(ctxt, test, instance, cur, pattern);
-			    test = test->next;
-			}
-		    }
-		    rule = rule->patnext;
-		}
-
-		cur = xmlSchematronNextNode(cur);
-	    }
-	    pattern = pattern->next;
-	}
-    }
-    return(ctxt->nberrors);
-}
-
-#ifdef STANDALONE
-int
-main(void)
-{
-    int ret;
-    xmlDocPtr instance;
-    xmlSchematronParserCtxtPtr pctxt;
-    xmlSchematronValidCtxtPtr vctxt;
-    xmlSchematronPtr schema = NULL;
-
-    pctxt = xmlSchematronNewParserCtxt("tst.sct");
-    if (pctxt == NULL) {
-        fprintf(stderr, "failed to build schematron parser\n");
-    } else {
-        schema = xmlSchematronParse(pctxt);
-	if (schema == NULL) {
-	    fprintf(stderr, "failed to compile schematron\n");
-	}
-	xmlSchematronFreeParserCtxt(pctxt);
-    }
-    instance = xmlReadFile("tst.sct", NULL,
-                           XML_PARSE_NOENT | XML_PARSE_NOCDATA);
-    if (instance == NULL) {
-	fprintf(stderr, "failed to parse instance\n");
-    }
-    if ((schema != NULL) && (instance != NULL)) {
-        vctxt = xmlSchematronNewValidCtxt(schema);
-	if (vctxt == NULL) {
-	    fprintf(stderr, "failed to build schematron validator\n");
-	} else {
-	    ret = xmlSchematronValidateDoc(vctxt, instance);
-	    xmlSchematronFreeValidCtxt(vctxt);
-	}
-    }
-    xmlSchematronFree(schema);
-    xmlFreeDoc(instance);
-
-    xmlCleanupParser();
-    xmlMemoryDump();
-
-    return (0);
-}
-#endif
-#define bottom_schematron
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMATRON_ENABLED */
diff --git a/src/third_party/libxml/src/trio.c b/src/third_party/libxml/src/trio.c
deleted file mode 100644
index c8b9c84..0000000
--- a/src/third_party/libxml/src/trio.c
+++ /dev/null
@@ -1,6895 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * A note to trio contributors:
- *
- * Avoid heap allocation at all costs to ensure that the trio functions
- * are async-safe. The exceptions are the printf/fprintf functions, which
- * uses fputc, and the asprintf functions and the <alloc> modifier, which
- * by design are required to allocate form the heap.
- *
- ************************************************************************/
-
-/*
- * TODO:
- *  - Scan is probably too permissive about its modifiers.
- *  - C escapes in %#[] ?
- *  - Multibyte characters (done for format parsing, except scan groups)
- *  - Complex numbers? (C99 _Complex)
- *  - Boolean values? (C99 _Bool)
- *  - C99 NaN(n-char-sequence) missing. The n-char-sequence can be used
- *    to print the mantissa, e.g. NaN(0xc000000000000000)
- *  - Should we support the GNU %a alloc modifier? GNU has an ugly hack
- *    for %a, because C99 used %a for other purposes. If specified as
- *    %as or %a[ it is interpreted as the alloc modifier, otherwise as
- *    the C99 hex-float. This means that you cannot scan %as as a hex-float
- *    immediately followed by an 's'.
- *  - Scanning of collating symbols.
- */
-
-/*************************************************************************
- * Trio include files
- */
-#include "triodef.h"
-#include "trio.h"
-#include "triop.h"
-#include "trionan.h"
-#if !defined(TRIO_MINIMAL)
-# include "triostr.h"
-#endif
-
-/**************************************************************************
- *
- * Definitions
- *
- *************************************************************************/
-
-#include <math.h>
-#include <limits.h>
-#include <float.h>
-
-#if (defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) \
-     || defined(USE_MULTIBYTE) || TRIO_WIDECHAR) \
-    && !defined(_WIN32_WCE)
-# define TRIO_COMPILER_SUPPORTS_MULTIBYTE
-# if !defined(MB_LEN_MAX)
-#  define MB_LEN_MAX 6
-# endif
-#endif
-
-#if (defined(TRIO_COMPILER_MSVC) && (_MSC_VER >= 1100)) || defined(TRIO_COMPILER_BCB)
-# define TRIO_COMPILER_SUPPORTS_MSVC_INT
-#endif
-
-#if defined(_WIN32_WCE)
-#include <wincecompat.h>
-#endif
-
-/*************************************************************************
- * Generic definitions
- */
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#if !defined(TRIO_COMPILER_SUPPORTS_C99)
-# define isblank(x) (((x)==32) || ((x)==9))
-#endif
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-#include <stddef.h>
-
-#if defined( HAVE_ERRNO_H ) || defined( __VMS )
-#include <errno.h>
-#endif
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#define BOOLEAN_T int
-
-/* mincore() can be used for debugging purposes */
-#define VALID(x) (NULL != (x))
-
-#if TRIO_ERRORS
-  /*
-   * Encode the error code and the position. This is decoded
-   * with TRIO_ERROR_CODE and TRIO_ERROR_POSITION.
-   */
-# define TRIO_ERROR_RETURN(x,y) (- ((x) + ((y) << 8)))
-#else
-# define TRIO_ERROR_RETURN(x,y) (-1)
-#endif
-
-#ifndef VA_LIST_IS_ARRAY
-#define TRIO_VA_LIST_PTR	va_list *
-#define TRIO_VA_LIST_ADDR(l)	(&(l))
-#define TRIO_VA_LIST_DEREF(l)	(*(l))
-#else
-#define TRIO_VA_LIST_PTR	va_list
-#define TRIO_VA_LIST_ADDR(l)	(l)
-#define TRIO_VA_LIST_DEREF(l)	(l)
-#endif
-
-typedef unsigned long trio_flags_t;
-
-
-/*************************************************************************
- * Platform specific definitions
- */
-#if defined(TRIO_PLATFORM_UNIX) || defined(TRIO_PLATFORM_OS400)
-# include <unistd.h>
-# include <signal.h>
-# include <locale.h>
-# define USE_LOCALE
-#endif /* TRIO_PLATFORM_UNIX */
-#if defined(TRIO_PLATFORM_VMS)
-# include <unistd.h>
-#endif
-#if defined(TRIO_PLATFORM_WIN32)
-# if defined(_WIN32_WCE)
-#  include <wincecompat.h>
-# else
-#  include <io.h>
-#  define read _read
-#  define write _write
-# endif
-#endif /* TRIO_PLATFORM_WIN32 */
-
-#if TRIO_WIDECHAR
-# if defined(TRIO_COMPILER_SUPPORTS_ISO94)
-#  include <wchar.h>
-#  include <wctype.h>
-typedef wchar_t trio_wchar_t;
-typedef wint_t trio_wint_t;
-# else
-typedef char trio_wchar_t;
-typedef int trio_wint_t;
-#  define WCONST(x) L ## x
-#  define WEOF EOF
-#  define iswalnum(x) isalnum(x)
-#  define iswalpha(x) isalpha(x)
-#  define iswblank(x) isblank(x)
-#  define iswcntrl(x) iscntrl(x)
-#  define iswdigit(x) isdigit(x)
-#  define iswgraph(x) isgraph(x)
-#  define iswlower(x) islower(x)
-#  define iswprint(x) isprint(x)
-#  define iswpunct(x) ispunct(x)
-#  define iswspace(x) isspace(x)
-#  define iswupper(x) isupper(x)
-#  define iswxdigit(x) isxdigit(x)
-# endif
-#endif
-
-
-/*************************************************************************
- * Compiler dependent definitions
- */
-
-/* Support for long long */
-#ifndef __cplusplus
-# if !defined(USE_LONGLONG)
-#  if defined(TRIO_COMPILER_GCC) && !defined(__STRICT_ANSI__)
-#   define USE_LONGLONG
-#  elif defined(TRIO_COMPILER_SUNPRO)
-#   define USE_LONGLONG
-#  elif defined(_LONG_LONG) || defined(_LONGLONG)
-#   define USE_LONGLONG
-#  endif
-# endif
-#endif
-
-/* The extra long numbers */
-#if defined(USE_LONGLONG)
-typedef signed long long int trio_longlong_t;
-typedef unsigned long long int trio_ulonglong_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
-typedef signed __int64 trio_longlong_t;
-typedef unsigned __int64 trio_ulonglong_t;
-#else
-typedef TRIO_SIGNED long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-#endif
-
-/* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99) && !defined( __VMS )
-# include <stdint.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98) || defined( __VMS )
-# include <inttypes.h>
-#ifdef __VMS
-typedef long long int          intmax_t;
-typedef unsigned long long int uintmax_t;
-#endif
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-typedef __int8 trio_int8_t;
-typedef __int16 trio_int16_t;
-typedef __int32 trio_int32_t;
-typedef __int64 trio_int64_t;
-#else
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-# if defined(TRIO_INT8_T)
-typedef TRIO_INT8_T trio_int8_t;
-# else
-typedef TRIO_SIGNED char trio_int8_t;
-# endif
-# if defined(TRIO_INT16_T)
-typedef TRIO_INT16_T trio_int16_t;
-# else
-typedef TRIO_SIGNED short trio_int16_t;
-# endif
-# if defined(TRIO_INT32_T)
-typedef TRIO_INT32_T trio_int32_t;
-# else
-typedef TRIO_SIGNED int trio_int32_t;
-# endif
-# if defined(TRIO_INT64_T)
-typedef TRIO_INT64_T trio_int64_t;
-# else
-typedef trio_longlong_t trio_int64_t;
-# endif
-#endif
-
-#if (!(defined(TRIO_COMPILER_SUPPORTS_C99) \
- || defined(TRIO_COMPILER_SUPPORTS_UNIX01))) \
- && !defined(_WIN32_WCE)
-# define floorl(x) floor((double)(x))
-# define fmodl(x,y) fmod((double)(x),(double)(y))
-# define powl(x,y) pow((double)(x),(double)(y))
-#endif
-
-#define TRIO_FABS(x) (((x) < 0.0) ? -(x) : (x))
-
-/*************************************************************************
- * Internal Definitions
- */
-
-#ifndef DECIMAL_DIG
-# define DECIMAL_DIG DBL_DIG
-#endif
-
-/* Long double sizes */
-#ifdef LDBL_DIG
-# define MAX_MANTISSA_DIGITS LDBL_DIG
-# define MAX_EXPONENT_DIGITS 4
-# define MAX_DOUBLE_DIGITS LDBL_MAX_10_EXP
-#else
-# define MAX_MANTISSA_DIGITS DECIMAL_DIG
-# define MAX_EXPONENT_DIGITS 3
-# define MAX_DOUBLE_DIGITS DBL_MAX_10_EXP
-#endif
-
-#if defined(TRIO_COMPILER_ANCIENT) || !defined(LDBL_DIG)
-# undef LDBL_DIG
-# undef LDBL_MANT_DIG
-# undef LDBL_EPSILON
-# define LDBL_DIG DBL_DIG
-# define LDBL_MANT_DIG DBL_MANT_DIG
-# define LDBL_EPSILON DBL_EPSILON
-#endif
-
-/* The maximal number of digits is for base 2 */
-#define MAX_CHARS_IN(x) (sizeof(x) * CHAR_BIT)
-/* The width of a pointer. The number of bits in a hex digit is 4 */
-#define POINTER_WIDTH ((sizeof("0x") - 1) + sizeof(trio_pointer_t) * CHAR_BIT / 4)
-
-/* Infinite and Not-A-Number for floating-point */
-#define INFINITE_LOWER "inf"
-#define INFINITE_UPPER "INF"
-#define LONG_INFINITE_LOWER "infinite"
-#define LONG_INFINITE_UPPER "INFINITE"
-#define NAN_LOWER "nan"
-#define NAN_UPPER "NAN"
-
-#if !defined(HAVE_ISASCII) && !defined(isascii)
-#ifndef __VMS
-# define isascii(x) ((unsigned int)(x) < 128)
-#endif
-#endif
-
-/* Various constants */
-enum {
-  TYPE_PRINT = 1,
-  TYPE_SCAN  = 2,
-
-  /* Flags. FLAGS_LAST must be less than ULONG_MAX */
-  FLAGS_NEW                 = 0,
-  FLAGS_STICKY              = 1,
-  FLAGS_SPACE               = 2 * FLAGS_STICKY,
-  FLAGS_SHOWSIGN            = 2 * FLAGS_SPACE,
-  FLAGS_LEFTADJUST          = 2 * FLAGS_SHOWSIGN,
-  FLAGS_ALTERNATIVE         = 2 * FLAGS_LEFTADJUST,
-  FLAGS_SHORT               = 2 * FLAGS_ALTERNATIVE,
-  FLAGS_SHORTSHORT          = 2 * FLAGS_SHORT,
-  FLAGS_LONG                = 2 * FLAGS_SHORTSHORT,
-  FLAGS_QUAD                = 2 * FLAGS_LONG,
-  FLAGS_LONGDOUBLE          = 2 * FLAGS_QUAD,
-  FLAGS_SIZE_T              = 2 * FLAGS_LONGDOUBLE,
-  FLAGS_PTRDIFF_T           = 2 * FLAGS_SIZE_T,
-  FLAGS_INTMAX_T            = 2 * FLAGS_PTRDIFF_T,
-  FLAGS_NILPADDING          = 2 * FLAGS_INTMAX_T,
-  FLAGS_UNSIGNED            = 2 * FLAGS_NILPADDING,
-  FLAGS_UPPER               = 2 * FLAGS_UNSIGNED,
-  FLAGS_WIDTH               = 2 * FLAGS_UPPER,
-  FLAGS_WIDTH_PARAMETER     = 2 * FLAGS_WIDTH,
-  FLAGS_PRECISION           = 2 * FLAGS_WIDTH_PARAMETER,
-  FLAGS_PRECISION_PARAMETER = 2 * FLAGS_PRECISION,
-  FLAGS_BASE                = 2 * FLAGS_PRECISION_PARAMETER,
-  FLAGS_BASE_PARAMETER      = 2 * FLAGS_BASE,
-  FLAGS_FLOAT_E             = 2 * FLAGS_BASE_PARAMETER,
-  FLAGS_FLOAT_G             = 2 * FLAGS_FLOAT_E,
-  FLAGS_QUOTE               = 2 * FLAGS_FLOAT_G,
-  FLAGS_WIDECHAR            = 2 * FLAGS_QUOTE,
-  FLAGS_ALLOC               = 2 * FLAGS_WIDECHAR,
-  FLAGS_IGNORE              = 2 * FLAGS_ALLOC,
-  FLAGS_IGNORE_PARAMETER    = 2 * FLAGS_IGNORE,
-  FLAGS_VARSIZE_PARAMETER   = 2 * FLAGS_IGNORE_PARAMETER,
-  FLAGS_FIXED_SIZE          = 2 * FLAGS_VARSIZE_PARAMETER,
-  FLAGS_LAST                = FLAGS_FIXED_SIZE,
-  /* Reused flags */
-  FLAGS_EXCLUDE             = FLAGS_SHORT,
-  FLAGS_USER_DEFINED        = FLAGS_IGNORE,
-  FLAGS_ROUNDING            = FLAGS_INTMAX_T,
-  /* Compounded flags */
-  FLAGS_ALL_VARSIZES        = FLAGS_LONG | FLAGS_QUAD | FLAGS_INTMAX_T | FLAGS_PTRDIFF_T | FLAGS_SIZE_T,
-  FLAGS_ALL_SIZES           = FLAGS_ALL_VARSIZES | FLAGS_SHORTSHORT | FLAGS_SHORT,
-
-  NO_POSITION  = -1,
-  NO_WIDTH     =  0,
-  NO_PRECISION = -1,
-  NO_SIZE      = -1,
-
-  /* Do not change these */
-  NO_BASE      = -1,
-  MIN_BASE     =  2,
-  MAX_BASE     = 36,
-  BASE_BINARY  =  2,
-  BASE_OCTAL   =  8,
-  BASE_DECIMAL = 10,
-  BASE_HEX     = 16,
-
-  /* Maximal number of allowed parameters */
-  MAX_PARAMETERS = 64,
-  /* Maximal number of characters in class */
-  MAX_CHARACTER_CLASS = UCHAR_MAX + 1,
-
-  /* Maximal string lengths for user-defined specifiers */
-  MAX_USER_NAME = 64,
-  MAX_USER_DATA = 256,
-
-  /* Maximal length of locale separator strings */
-  MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
-  /* Maximal number of integers in grouping */
-  MAX_LOCALE_GROUPS = 64,
-
-  /* Initial size of asprintf buffer */
-  DYNAMIC_START_SIZE = 32
-};
-
-#define NO_GROUPING ((int)CHAR_MAX)
-
-/* Fundamental formatting parameter types */
-#define FORMAT_UNKNOWN   0
-#define FORMAT_INT       1
-#define FORMAT_DOUBLE    2
-#define FORMAT_CHAR      3
-#define FORMAT_STRING    4
-#define FORMAT_POINTER   5
-#define FORMAT_COUNT     6
-#define FORMAT_PARAMETER 7
-#define FORMAT_GROUP     8
-#if TRIO_GNU
-# define FORMAT_ERRNO    9
-#endif
-#if TRIO_EXTENSION
-# define FORMAT_USER_DEFINED 10
-#endif
-
-/* Character constants */
-#define CHAR_IDENTIFIER '%'
-#define CHAR_BACKSLASH '\\'
-#define CHAR_QUOTE '\"'
-#define CHAR_ADJUST ' '
-
-/* Character class expressions */
-#define CLASS_ALNUM "[:alnum:]"
-#define CLASS_ALPHA "[:alpha:]"
-#define CLASS_BLANK "[:blank:]"
-#define CLASS_CNTRL "[:cntrl:]"
-#define CLASS_DIGIT "[:digit:]"
-#define CLASS_GRAPH "[:graph:]"
-#define CLASS_LOWER "[:lower:]"
-#define CLASS_PRINT "[:print:]"
-#define CLASS_PUNCT "[:punct:]"
-#define CLASS_SPACE "[:space:]"
-#define CLASS_UPPER "[:upper:]"
-#define CLASS_XDIGIT "[:xdigit:]"
-
-/*
- * SPECIFIERS:
- *
- *
- * a  Hex-float
- * A  Hex-float
- * c  Character
- * C  Widechar character (wint_t)
- * d  Decimal
- * e  Float
- * E  Float
- * F  Float
- * F  Float
- * g  Float
- * G  Float
- * i  Integer
- * m  Error message
- * n  Count
- * o  Octal
- * p  Pointer
- * s  String
- * S  Widechar string (wchar_t *)
- * u  Unsigned
- * x  Hex
- * X  Hex
- * [] Group
- * <> User-defined
- *
- * Reserved:
- *
- * D  Binary Coded Decimal %D(length,precision) (OS/390)
- */
-#define SPECIFIER_CHAR 'c'
-#define SPECIFIER_STRING 's'
-#define SPECIFIER_DECIMAL 'd'
-#define SPECIFIER_INTEGER 'i'
-#define SPECIFIER_UNSIGNED 'u'
-#define SPECIFIER_OCTAL 'o'
-#define SPECIFIER_HEX 'x'
-#define SPECIFIER_HEX_UPPER 'X'
-#define SPECIFIER_FLOAT_E 'e'
-#define SPECIFIER_FLOAT_E_UPPER 'E'
-#define SPECIFIER_FLOAT_F 'f'
-#define SPECIFIER_FLOAT_F_UPPER 'F'
-#define SPECIFIER_FLOAT_G 'g'
-#define SPECIFIER_FLOAT_G_UPPER 'G'
-#define SPECIFIER_POINTER 'p'
-#define SPECIFIER_GROUP '['
-#define SPECIFIER_UNGROUP ']'
-#define SPECIFIER_COUNT 'n'
-#if TRIO_UNIX98
-# define SPECIFIER_CHAR_UPPER 'C'
-# define SPECIFIER_STRING_UPPER 'S'
-#endif
-#if TRIO_C99
-# define SPECIFIER_HEXFLOAT 'a'
-# define SPECIFIER_HEXFLOAT_UPPER 'A'
-#endif
-#if TRIO_GNU
-# define SPECIFIER_ERRNO 'm'
-#endif
-#if TRIO_EXTENSION
-# define SPECIFIER_BINARY 'b'
-# define SPECIFIER_BINARY_UPPER 'B'
-# define SPECIFIER_USER_DEFINED_BEGIN '<'
-# define SPECIFIER_USER_DEFINED_END '>'
-# define SPECIFIER_USER_DEFINED_SEPARATOR ':'
-#endif
-
-/*
- * QUALIFIERS:
- *
- *
- * Numbers = d,i,o,u,x,X
- * Float = a,A,e,E,f,F,g,G
- * String = s
- * Char = c
- *
- *
- * 9$ Position
- *      Use the 9th parameter. 9 can be any number between 1 and
- *      the maximal argument
- *
- * 9 Width
- *      Set width to 9. 9 can be any number, but must not be postfixed
- *      by '$'
- *
- * h  Short
- *    Numbers:
- *      (unsigned) short int
- *
- * hh Short short
- *    Numbers:
- *      (unsigned) char
- *
- * l  Long
- *    Numbers:
- *      (unsigned) long int
- *    String:
- *      as the S specifier
- *    Char:
- *      as the C specifier
- *
- * ll Long Long
- *    Numbers:
- *      (unsigned) long long int
- *
- * L  Long Double
- *    Float
- *      long double
- *
- * #  Alternative
- *    Float:
- *      Decimal-point is always present
- *    String:
- *      non-printable characters are handled as \number
- *
- *    Spacing
- *
- * +  Sign
- *
- * -  Alignment
- *
- * .  Precision
- *
- * *  Parameter
- *    print: use parameter
- *    scan: no parameter (ignore)
- *
- * q  Quad
- *
- * Z  size_t
- *
- * w  Widechar
- *
- * '  Thousands/quote
- *    Numbers:
- *      Integer part grouped in thousands
- *    Binary numbers:
- *      Number grouped in nibbles (4 bits)
- *    String:
- *      Quoted string
- *
- * j  intmax_t
- * t  prtdiff_t
- * z  size_t
- *
- * !  Sticky
- * @  Parameter (for both print and scan)
- *
- * I  n-bit Integer
- *    Numbers:
- *      The following options exists
- *        I8  = 8-bit integer
- *        I16 = 16-bit integer
- *        I32 = 32-bit integer
- *        I64 = 64-bit integer
- */
-#define QUALIFIER_POSITION '$'
-#define QUALIFIER_SHORT 'h'
-#define QUALIFIER_LONG 'l'
-#define QUALIFIER_LONG_UPPER 'L'
-#define QUALIFIER_ALTERNATIVE '#'
-#define QUALIFIER_SPACE ' '
-#define QUALIFIER_PLUS '+'
-#define QUALIFIER_MINUS '-'
-#define QUALIFIER_DOT '.'
-#define QUALIFIER_STAR '*'
-#define QUALIFIER_CIRCUMFLEX '^' /* For scanlists */
-#if TRIO_C99
-# define QUALIFIER_SIZE_T 'z'
-# define QUALIFIER_PTRDIFF_T 't'
-# define QUALIFIER_INTMAX_T 'j'
-#endif
-#if TRIO_BSD || TRIO_GNU
-# define QUALIFIER_QUAD 'q'
-#endif
-#if TRIO_GNU
-# define QUALIFIER_SIZE_T_UPPER 'Z'
-#endif
-#if TRIO_MISC
-# define QUALIFIER_WIDECHAR 'w'
-#endif
-#if TRIO_MICROSOFT
-# define QUALIFIER_FIXED_SIZE 'I'
-#endif
-#if TRIO_EXTENSION
-# define QUALIFIER_QUOTE '\''
-# define QUALIFIER_STICKY '!'
-# define QUALIFIER_VARSIZE '&' /* This should remain undocumented */
-# define QUALIFIER_PARAM '@' /* Experimental */
-# define QUALIFIER_COLON ':' /* For scanlists */
-# define QUALIFIER_EQUAL '=' /* For scanlists */
-# define QUALIFIER_ROUNDING_UPPER 'R'
-#endif
-
-
-/*************************************************************************
- *
- * Internal Structures
- *
- *************************************************************************/
-
-/* Parameters */
-typedef struct {
-  /* An indication of which entry in the data union is used */
-  int type;
-  /* The flags */
-  trio_flags_t flags;
-  /* The width qualifier */
-  int width;
-  /* The precision qualifier */
-  int precision;
-  /* The base qualifier */
-  int base;
-  /* The size for the variable size qualifier */
-  int varsize;
-  /* The marker of the end of the specifier */
-  int indexAfterSpecifier;
-  /* The data from the argument list */
-  union {
-    char *string;
-#if TRIO_WIDECHAR
-    trio_wchar_t *wstring;
-#endif
-    trio_pointer_t pointer;
-    union {
-      trio_intmax_t as_signed;
-      trio_uintmax_t as_unsigned;
-    } number;
-    double doubleNumber;
-    double *doublePointer;
-    trio_long_double_t longdoubleNumber;
-    trio_long_double_t *longdoublePointer;
-    int errorNumber;
-  } data;
-  /* For the user-defined specifier */
-  char user_name[MAX_USER_NAME];
-  char user_data[MAX_USER_DATA];
-} trio_parameter_t;
-
-/* Container for customized functions */
-typedef struct {
-  union {
-    trio_outstream_t out;
-    trio_instream_t in;
-  } stream;
-  trio_pointer_t closure;
-} trio_custom_t;
-
-/* General trio "class" */
-typedef struct _trio_class_t {
-  /*
-   * The function to write characters to a stream.
-   */
-  void (*OutStream) TRIO_PROTO((struct _trio_class_t *, int));
-  /*
-   * The function to read characters from a stream.
-   */
-  void (*InStream) TRIO_PROTO((struct _trio_class_t *, int *));
-  /*
-   * The current location in the stream.
-   */
-  trio_pointer_t location;
-  /*
-   * The character currently being processed.
-   */
-  int current;
-  /*
-   * The number of characters that would have been written/read
-   * if there had been sufficient space.
-   */
-  int processed;
-  /*
-   * The number of characters that are actually written/read.
-   * Processed and committed will only differ for the *nprintf
-   * and *nscanf functions.
-   */
-  int committed;
-  /*
-   * The upper limit of characters that may be written/read.
-   */
-  int max;
-  /*
-   * The last output error that was detected.
-   */
-  int error;
-} trio_class_t;
-
-/* References (for user-defined callbacks) */
-typedef struct _trio_reference_t {
-  trio_class_t *data;
-  trio_parameter_t *parameter;
-} trio_reference_t;
-
-/* Registered entries (for user-defined callbacks) */
-typedef struct _trio_userdef_t {
-  struct _trio_userdef_t *next;
-  trio_callback_t callback;
-  char *name;
-} trio_userdef_t;
-
-/*************************************************************************
- *
- * Internal Variables
- *
- *************************************************************************/
-
-static TRIO_CONST char rcsid[] = "@(#)$Id$";
-
-/*
- * Need this to workaround a parser bug in HP C/iX compiler that fails
- * to resolves macro definitions that includes type 'long double',
- * e.g: va_arg(arg_ptr, long double)
- */
-#if defined(TRIO_PLATFORM_MPEIX)
-static TRIO_CONST trio_long_double_t ___dummy_long_double = 0;
-#endif
-
-static TRIO_CONST char internalNullString[] = "(nil)";
-
-#if defined(USE_LOCALE)
-static struct lconv *internalLocaleValues = NULL;
-#endif
-
-/*
- * UNIX98 says "in a locale where the radix character is not defined,
- * the radix character defaults to a period (.)"
- */
-static int internalDecimalPointLength = 1;
-static int internalThousandSeparatorLength = 1;
-static char internalDecimalPoint = '.';
-static char internalDecimalPointString[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ".";
-static char internalThousandSeparator[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ",";
-static char internalGrouping[MAX_LOCALE_GROUPS] = { (char)NO_GROUPING };
-
-static TRIO_CONST char internalDigitsLower[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static TRIO_CONST char internalDigitsUpper[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static BOOLEAN_T internalDigitsUnconverted = TRUE;
-static int internalDigitArray[128];
-#if TRIO_EXTENSION
-static BOOLEAN_T internalCollationUnconverted = TRUE;
-static char internalCollationArray[MAX_CHARACTER_CLASS][MAX_CHARACTER_CLASS];
-#endif
-
-#if TRIO_EXTENSION
-static TRIO_VOLATILE trio_callback_t internalEnterCriticalRegion = NULL;
-static TRIO_VOLATILE trio_callback_t internalLeaveCriticalRegion = NULL;
-static trio_userdef_t *internalUserDef = NULL;
-#endif
-
-
-/*************************************************************************
- *
- * Internal Functions
- *
- ************************************************************************/
-
-#if defined(TRIO_MINIMAL)
-# define TRIO_STRING_PUBLIC static
-# include "triostr.c"
-#endif /* defined(TRIO_MINIMAL) */
-
-/*************************************************************************
- * TrioIsQualifier
- *
- * Description:
- *  Remember to add all new qualifiers to this function.
- *  QUALIFIER_POSITION must not be added.
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioIsQualifier
-TRIO_ARGS1((character),
-	   TRIO_CONST char character)
-{
-  /* QUALIFIER_POSITION is not included */
-  switch (character)
-    {
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-    case QUALIFIER_PLUS:
-    case QUALIFIER_MINUS:
-    case QUALIFIER_SPACE:
-    case QUALIFIER_DOT:
-    case QUALIFIER_STAR:
-    case QUALIFIER_ALTERNATIVE:
-    case QUALIFIER_SHORT:
-    case QUALIFIER_LONG:
-    case QUALIFIER_LONG_UPPER:
-    case QUALIFIER_CIRCUMFLEX:
-#if defined(QUALIFIER_SIZE_T)
-    case QUALIFIER_SIZE_T:
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-    case QUALIFIER_PTRDIFF_T:
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-    case QUALIFIER_INTMAX_T:
-#endif
-#if defined(QUALIFIER_QUAD)
-    case QUALIFIER_QUAD:
-#endif
-#if defined(QUALIFIER_SIZE_T_UPPER)
-    case QUALIFIER_SIZE_T_UPPER:
-#endif
-#if defined(QUALIFIER_WIDECHAR)
-    case QUALIFIER_WIDECHAR:
-#endif
-#if defined(QUALIFIER_QUOTE)
-    case QUALIFIER_QUOTE:
-#endif
-#if defined(QUALIFIER_STICKY)
-    case QUALIFIER_STICKY:
-#endif
-#if defined(QUALIFIER_VARSIZE)
-    case QUALIFIER_VARSIZE:
-#endif
-#if defined(QUALIFIER_PARAM)
-    case QUALIFIER_PARAM:
-#endif
-#if defined(QUALIFIER_FIXED_SIZE)
-    case QUALIFIER_FIXED_SIZE:
-#endif
-#if defined(QUALIFIER_ROUNDING_UPPER)
-    case QUALIFIER_ROUNDING_UPPER:
-#endif
-      return TRUE;
-    default:
-      return FALSE;
-    }
-}
-
-/*************************************************************************
- * TrioSetLocale
- */
-#if defined(USE_LOCALE)
-TRIO_PRIVATE void
-TrioSetLocale(TRIO_NOARGS)
-{
-  internalLocaleValues = (struct lconv *)localeconv();
-  if (internalLocaleValues)
-    {
-      if ((internalLocaleValues->decimal_point) &&
-	  (internalLocaleValues->decimal_point[0] != NIL))
-	{
-	  internalDecimalPointLength = trio_length(internalLocaleValues->decimal_point);
-	  if (internalDecimalPointLength == 1)
-	    {
-	      internalDecimalPoint = internalLocaleValues->decimal_point[0];
-	    }
-	  else
-	    {
-	      internalDecimalPoint = NIL;
-	      trio_copy_max(internalDecimalPointString,
-			    sizeof(internalDecimalPointString),
-			    internalLocaleValues->decimal_point);
-	    }
-	}
-      if ((internalLocaleValues->thousands_sep) &&
-	  (internalLocaleValues->thousands_sep[0] != NIL))
-	{
-	  trio_copy_max(internalThousandSeparator,
-			sizeof(internalThousandSeparator),
-			internalLocaleValues->thousands_sep);
-	  internalThousandSeparatorLength = trio_length(internalThousandSeparator);
-	}
-      if ((internalLocaleValues->grouping) &&
-	  (internalLocaleValues->grouping[0] != NIL))
-	{
-	  trio_copy_max(internalGrouping,
-			sizeof(internalGrouping),
-			internalLocaleValues->grouping);
-	}
-    }
-}
-#endif /* defined(USE_LOCALE) */
-
-TRIO_PRIVATE int
-TrioCalcThousandSeparatorLength
-TRIO_ARGS1((digits),
-	   int digits)
-{
-#if TRIO_EXTENSION
-  int count = 0;
-  int step = NO_GROUPING;
-  char *groupingPointer = internalGrouping;
-
-  while (digits > 0)
-    {
-      if (*groupingPointer == CHAR_MAX)
-	{
-	  /* Disable grouping */
-	  break; /* while */
-	}
-      else if (*groupingPointer == 0)
-	{
-	  /* Repeat last group */
-	  if (step == NO_GROUPING)
-	    {
-	      /* Error in locale */
-	      break; /* while */
-	    }
-	}
-      else
-	{
-	  step = *groupingPointer++;
-	}
-      if (digits > step)
-	count += internalThousandSeparatorLength;
-      digits -= step;
-    }
-  return count;
-#else
-  return 0;
-#endif
-}
-
-TRIO_PRIVATE BOOLEAN_T
-TrioFollowedBySeparator
-TRIO_ARGS1((position),
-	   int position)
-{
-#if TRIO_EXTENSION
-  int step = 0;
-  char *groupingPointer = internalGrouping;
-
-  position--;
-  if (position == 0)
-    return FALSE;
-  while (position > 0)
-    {
-      if (*groupingPointer == CHAR_MAX)
-	{
-	  /* Disable grouping */
-	  break; /* while */
-	}
-      else if (*groupingPointer != 0)
-	{
-	  step = *groupingPointer++;
-	}
-      if (step == 0)
-	break;
-      position -= step;
-    }
-  return (position == 0);
-#else
-  return FALSE;
-#endif
-}
-
-/*************************************************************************
- * TrioGetPosition
- *
- * Get the %n$ position.
- */
-TRIO_PRIVATE int
-TrioGetPosition
-TRIO_ARGS2((format, indexPointer),
-	   TRIO_CONST char *format,
-	   int *indexPointer)
-{
-#if TRIO_UNIX98
-  char *tmpformat;
-  int number = 0;
-  int index = *indexPointer;
-
-  number = (int)trio_to_long(&format[index], &tmpformat, BASE_DECIMAL);
-  index = (int)(tmpformat - format);
-  if ((number != 0) && (QUALIFIER_POSITION == format[index++]))
-    {
-      *indexPointer = index;
-      /*
-       * number is decreased by 1, because n$ starts from 1, whereas
-       * the array it is indexing starts from 0.
-       */
-      return number - 1;
-    }
-#endif
-  return NO_POSITION;
-}
-
-#if TRIO_EXTENSION
-/*************************************************************************
- * TrioFindNamespace
- *
- * Find registered user-defined specifier.
- * The prev argument is used for optimization only.
- */
-TRIO_PRIVATE trio_userdef_t *
-TrioFindNamespace
-TRIO_ARGS2((name, prev),
-	   TRIO_CONST char *name,
-	   trio_userdef_t **prev)
-{
-  trio_userdef_t *def;
-
-  if (internalEnterCriticalRegion)
-    (void)internalEnterCriticalRegion(NULL);
-
-  for (def = internalUserDef; def; def = def->next)
-    {
-      /* Case-sensitive string comparison */
-      if (trio_equal_case(def->name, name))
-	break;
-
-      if (prev)
-	*prev = def;
-    }
-
-  if (internalLeaveCriticalRegion)
-    (void)internalLeaveCriticalRegion(NULL);
-
-  return def;
-}
-#endif
-
-/*************************************************************************
- * TrioPower
- *
- * Description:
- *  Calculate pow(base, exponent), where number and exponent are integers.
- */
-TRIO_PRIVATE trio_long_double_t
-TrioPower
-TRIO_ARGS2((number, exponent),
-	   int number,
-	   int exponent)
-{
-  trio_long_double_t result;
-
-  if (number == 10)
-    {
-      switch (exponent)
-	{
-	  /* Speed up calculation of common cases */
-	case 0:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E-1);
-	  break;
-	case 1:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+0);
-	  break;
-	case 2:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+1);
-	  break;
-	case 3:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+2);
-	  break;
-	case 4:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+3);
-	  break;
-	case 5:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+4);
-	  break;
-	case 6:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+5);
-	  break;
-	case 7:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+6);
-	  break;
-	case 8:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+7);
-	  break;
-	case 9:
-	  result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+8);
-	  break;
-	default:
-	  result = powl((trio_long_double_t)number,
-			(trio_long_double_t)exponent);
-	  break;
-	}
-    }
-  else
-    {
-      return powl((trio_long_double_t)number, (trio_long_double_t)exponent);
-    }
-  return result;
-}
-
-/*************************************************************************
- * TrioLogarithm
- */
-TRIO_PRIVATE double
-TrioLogarithm
-TRIO_ARGS2((number, base),
-	   double number,
-	   int base)
-{
-  double result;
-
-  if (number <= 0.0)
-    {
-      /* xlC crashes on log(0) */
-      result = (number == 0.0) ? trio_ninf() : trio_nan();
-    }
-  else
-    {
-      if (base == 10)
-	{
-	  result = log10(number);
-	}
-      else
-	{
-	  result = log10(number) / log10((double)base);
-	}
-    }
-  return result;
-}
-
-/*************************************************************************
- * TrioLogarithmBase
- */
-TRIO_PRIVATE double
-TrioLogarithmBase
-TRIO_ARGS1((base),
-	   int base)
-{
-  switch (base)
-    {
-    case BASE_BINARY : return 1.0;
-    case BASE_OCTAL  : return 3.0;
-    case BASE_DECIMAL: return 3.321928094887362345;
-    case BASE_HEX    : return 4.0;
-    default          : return TrioLogarithm((double)base, 2);
-    }
-}
-
-/*************************************************************************
- * TrioParse
- *
- * Description:
- *  Parse the format string
- */
-TRIO_PRIVATE int
-TrioParse
-TRIO_ARGS5((type, format, parameters, arglist, argarray),
-	   int type,
-	   TRIO_CONST char *format,
-	   trio_parameter_t *parameters,
-	   TRIO_VA_LIST_PTR arglist,
-	   trio_pointer_t *argarray)
-{
-  /* Count the number of times a parameter is referenced */
-  unsigned short usedEntries[MAX_PARAMETERS];
-  /* Parameter counters */
-  int parameterPosition;
-  int currentParam;
-  int maxParam = -1;
-  /* Utility variables */
-  trio_flags_t flags;
-  int width;
-  int precision;
-  int varsize;
-  int base;
-  int index;  /* Index into formatting string */
-  int dots;  /* Count number of dots in modifier part */
-  BOOLEAN_T positional;  /* Does the specifier have a positional? */
-  BOOLEAN_T gotSticky = FALSE;  /* Are there any sticky modifiers at all? */
-  /*
-   * indices specifies the order in which the parameters must be
-   * read from the va_args (this is necessary to handle positionals)
-   */
-  int indices[MAX_PARAMETERS];
-  int pos = 0;
-  /* Various variables */
-  char ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int save_errno;
-  int i = -1;
-  int num;
-  char *tmpformat;
-
-  /* One and only one of arglist and argarray must be used */
-  assert((arglist != NULL) ^ (argarray != NULL));
-
-  /*
-   * The 'parameters' array is not initialized, but we need to
-   * know which entries we have used.
-   */
-  memset(usedEntries, 0, sizeof(usedEntries));
-
-  save_errno = errno;
-  index = 0;
-  parameterPosition = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  (void)mblen(NULL, 0);
-#endif
-
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-	{
-	  /*
-	   * Multibyte characters cannot be legal specifiers or
-	   * modifiers, so we skip over them.
-	   */
-	  charlen = mblen(&format[index], MB_LEN_MAX);
-	  index += (charlen > 0) ? charlen : 1;
-	  continue; /* while */
-	}
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index++])
-	{
-	  if (CHAR_IDENTIFIER == format[index])
-	    {
-	      index++;
-	      continue; /* while */
-	    }
-
-	  flags = FLAGS_NEW;
-	  dots = 0;
-	  currentParam = TrioGetPosition(format, &index);
-	  positional = (NO_POSITION != currentParam);
-	  if (!positional)
-	    {
-	      /* We have no positional, get the next counter */
-	      currentParam = parameterPosition;
-	    }
-          if(currentParam >= MAX_PARAMETERS)
-	    {
-	      /* Bail out completely to make the error more obvious */
-	      return TRIO_ERROR_RETURN(TRIO_ETOOMANY, index);
-	    }
-
-	  if (currentParam > maxParam)
-	    maxParam = currentParam;
-
-	  /* Default values */
-	  width = NO_WIDTH;
-	  precision = NO_PRECISION;
-	  base = NO_BASE;
-	  varsize = NO_SIZE;
-
-	  while (TrioIsQualifier(format[index]))
-	    {
-	      ch = format[index++];
-
-	      switch (ch)
-		{
-		case QUALIFIER_SPACE:
-		  flags |= FLAGS_SPACE;
-		  break;
-
-		case QUALIFIER_PLUS:
-		  flags |= FLAGS_SHOWSIGN;
-		  break;
-
-		case QUALIFIER_MINUS:
-		  flags |= FLAGS_LEFTADJUST;
-		  flags &= ~FLAGS_NILPADDING;
-		  break;
-
-		case QUALIFIER_ALTERNATIVE:
-		  flags |= FLAGS_ALTERNATIVE;
-		  break;
-
-		case QUALIFIER_DOT:
-		  if (dots == 0) /* Precision */
-		    {
-		      dots++;
-
-		      /* Skip if no precision */
-		      if (QUALIFIER_DOT == format[index])
-			break;
-
-		      /* After the first dot we have the precision */
-		      flags |= FLAGS_PRECISION;
-		      if ((QUALIFIER_STAR == format[index])
-#if defined(QUALIFIER_PARAM)
-			  || (QUALIFIER_PARAM == format[index])
-#endif
-			  )
-			{
-			  index++;
-			  flags |= FLAGS_PRECISION_PARAMETER;
-
-			  precision = TrioGetPosition(format, &index);
-			  if (precision == NO_POSITION)
-			    {
-			      parameterPosition++;
-			      if (positional)
-				precision = parameterPosition;
-			      else
-				{
-				  precision = currentParam;
-				  currentParam = precision + 1;
-				}
-			    }
-			  else
-			    {
-			      if (! positional)
-				currentParam = precision + 1;
-			      if (width > maxParam)
-				maxParam = precision;
-			    }
-			  if (currentParam > maxParam)
-			    maxParam = currentParam;
-			}
-		      else
-			{
-			  precision = trio_to_long(&format[index],
-						   &tmpformat,
-						   BASE_DECIMAL);
-			  index = (int)(tmpformat - format);
-			}
-		    }
-		  else if (dots == 1) /* Base */
-		    {
-		      dots++;
-
-		      /* After the second dot we have the base */
-		      flags |= FLAGS_BASE;
-		      if ((QUALIFIER_STAR == format[index])
-#if defined(QUALIFIER_PARAM)
-			  || (QUALIFIER_PARAM == format[index])
-#endif
-			  )
-			{
-			  index++;
-			  flags |= FLAGS_BASE_PARAMETER;
-			  base = TrioGetPosition(format, &index);
-			  if (base == NO_POSITION)
-			    {
-			      parameterPosition++;
-			      if (positional)
-				base = parameterPosition;
-			      else
-				{
-				  base = currentParam;
-				  currentParam = base + 1;
-				}
-			    }
-			  else
-			    {
-			      if (! positional)
-				currentParam = base + 1;
-			      if (base > maxParam)
-				maxParam = base;
-			    }
-			  if (currentParam > maxParam)
-			    maxParam = currentParam;
-			}
-		      else
-			{
-			  base = trio_to_long(&format[index],
-					      &tmpformat,
-					      BASE_DECIMAL);
-			  if (base > MAX_BASE)
-			    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-			  index = (int)(tmpformat - format);
-			}
-		    }
-		  else
-		    {
-		      return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-		    }
-		  break; /* QUALIFIER_DOT */
-
-#if defined(QUALIFIER_PARAM)
-		case QUALIFIER_PARAM:
-		  type = TYPE_PRINT;
-		  /* FALLTHROUGH */
-#endif
-		case QUALIFIER_STAR:
-		  /* This has different meanings for print and scan */
-		  if (TYPE_PRINT == type)
-		    {
-		      /* Read with from parameter */
-		      flags |= (FLAGS_WIDTH | FLAGS_WIDTH_PARAMETER);
-		      width = TrioGetPosition(format, &index);
-		      if (width == NO_POSITION)
-			{
-			  parameterPosition++;
-			  if (positional)
-			    width = parameterPosition;
-			  else
-			    {
-			      width = currentParam;
-			      currentParam = width + 1;
-			    }
-			}
-		      else
-			{
-			  if (! positional)
-			    currentParam = width + 1;
-			  if (width > maxParam)
-			    maxParam = width;
-			}
-		      if (currentParam > maxParam)
-			maxParam = currentParam;
-		    }
-		  else
-		    {
-		      /* Scan, but do not store result */
-		      flags |= FLAGS_IGNORE;
-		    }
-
-		  break; /* QUALIFIER_STAR */
-
-		case '0':
-		  if (! (flags & FLAGS_LEFTADJUST))
-		    flags |= FLAGS_NILPADDING;
-		  /* FALLTHROUGH */
-		case '1': case '2': case '3': case '4':
-		case '5': case '6': case '7': case '8': case '9':
-		  flags |= FLAGS_WIDTH;
-		  /* &format[index - 1] is used to "rewind" the read
-		   * character from format
-		   */
-		  width = trio_to_long(&format[index - 1],
-				       &tmpformat,
-				       BASE_DECIMAL);
-		  index = (int)(tmpformat - format);
-		  break;
-
-		case QUALIFIER_SHORT:
-		  if (flags & FLAGS_SHORTSHORT)
-		    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-		  else if (flags & FLAGS_SHORT)
-		    flags |= FLAGS_SHORTSHORT;
-		  else
-		    flags |= FLAGS_SHORT;
-		  break;
-
-		case QUALIFIER_LONG:
-		  if (flags & FLAGS_QUAD)
-		    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-		  else if (flags & FLAGS_LONG)
-		    flags |= FLAGS_QUAD;
-		  else
-		    flags |= FLAGS_LONG;
-		  break;
-
-		case QUALIFIER_LONG_UPPER:
-		  flags |= FLAGS_LONGDOUBLE;
-		  break;
-
-#if defined(QUALIFIER_SIZE_T)
-		case QUALIFIER_SIZE_T:
-		  flags |= FLAGS_SIZE_T;
-		  /* Modify flags for later truncation of number */
-		  if (sizeof(size_t) == sizeof(trio_ulonglong_t))
-		    flags |= FLAGS_QUAD;
-		  else if (sizeof(size_t) == sizeof(long))
-		    flags |= FLAGS_LONG;
-		  break;
-#endif
-
-#if defined(QUALIFIER_PTRDIFF_T)
-		case QUALIFIER_PTRDIFF_T:
-		  flags |= FLAGS_PTRDIFF_T;
-		  if (sizeof(ptrdiff_t) == sizeof(trio_ulonglong_t))
-		    flags |= FLAGS_QUAD;
-		  else if (sizeof(ptrdiff_t) == sizeof(long))
-		    flags |= FLAGS_LONG;
-		  break;
-#endif
-
-#if defined(QUALIFIER_INTMAX_T)
-		case QUALIFIER_INTMAX_T:
-		  flags |= FLAGS_INTMAX_T;
-		  if (sizeof(trio_intmax_t) == sizeof(trio_ulonglong_t))
-		    flags |= FLAGS_QUAD;
-		  else if (sizeof(trio_intmax_t) == sizeof(long))
-		    flags |= FLAGS_LONG;
-		  break;
-#endif
-
-#if defined(QUALIFIER_QUAD)
-		case QUALIFIER_QUAD:
-		  flags |= FLAGS_QUAD;
-		  break;
-#endif
-
-#if defined(QUALIFIER_FIXED_SIZE)
-		case QUALIFIER_FIXED_SIZE:
-		  if (flags & FLAGS_FIXED_SIZE)
-		    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-		  if (flags & (FLAGS_ALL_SIZES | FLAGS_LONGDOUBLE |
-			       FLAGS_WIDECHAR | FLAGS_VARSIZE_PARAMETER))
-		    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-		  if ((format[index] == '6') &&
-		      (format[index + 1] == '4'))
-		    {
-		      varsize = sizeof(trio_int64_t);
-		      index += 2;
-		    }
-		  else if ((format[index] == '3') &&
-			   (format[index + 1] == '2'))
-		    {
-		      varsize = sizeof(trio_int32_t);
-		      index += 2;
-		    }
-		  else if ((format[index] == '1') &&
-			   (format[index + 1] == '6'))
-		    {
-		      varsize = sizeof(trio_int16_t);
-		      index += 2;
-		    }
-		  else if (format[index] == '8')
-		    {
-		      varsize = sizeof(trio_int8_t);
-		      index++;
-		    }
-		  else
-		    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
-		  flags |= FLAGS_FIXED_SIZE;
-		  break;
-#endif
-
-#if defined(QUALIFIER_WIDECHAR)
-		case QUALIFIER_WIDECHAR:
-		  flags |= FLAGS_WIDECHAR;
-		  break;
-#endif
-
-#if defined(QUALIFIER_SIZE_T_UPPER)
-		case QUALIFIER_SIZE_T_UPPER:
-		  break;
-#endif
-
-#if defined(QUALIFIER_QUOTE)
-		case QUALIFIER_QUOTE:
-		  flags |= FLAGS_QUOTE;
-		  break;
-#endif
-
-#if defined(QUALIFIER_STICKY)
-		case QUALIFIER_STICKY:
-		  flags |= FLAGS_STICKY;
-		  gotSticky = TRUE;
-		  break;
-#endif
-
-#if defined(QUALIFIER_VARSIZE)
-		case QUALIFIER_VARSIZE:
-		  flags |= FLAGS_VARSIZE_PARAMETER;
-		  parameterPosition++;
-		  if (positional)
-		    varsize = parameterPosition;
-		  else
-		    {
-		      varsize = currentParam;
-		      currentParam = varsize + 1;
-		    }
-		  if (currentParam > maxParam)
-		    maxParam = currentParam;
-		  break;
-#endif
-
-#if defined(QUALIFIER_ROUNDING_UPPER)
-		case QUALIFIER_ROUNDING_UPPER:
-		  flags |= FLAGS_ROUNDING;
-		  break;
-#endif
-
-		default:
-		  /* Bail out completely to make the error more obvious */
-                  return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-		}
-	    } /* while qualifier */
-
-	  /*
-	   * Parameters only need the type and value. The value is
-	   * read later.
-	   */
-	  if (flags & FLAGS_WIDTH_PARAMETER)
-	    {
-	      usedEntries[width] += 1;
-	      parameters[pos].type = FORMAT_PARAMETER;
-	      parameters[pos].flags = 0;
-	      indices[width] = pos;
-	      width = pos++;
-	    }
-	  if (flags & FLAGS_PRECISION_PARAMETER)
-	    {
-	      usedEntries[precision] += 1;
-	      parameters[pos].type = FORMAT_PARAMETER;
-	      parameters[pos].flags = 0;
-	      indices[precision] = pos;
-	      precision = pos++;
-	    }
-	  if (flags & FLAGS_BASE_PARAMETER)
-	    {
-	      usedEntries[base] += 1;
-	      parameters[pos].type = FORMAT_PARAMETER;
-	      parameters[pos].flags = 0;
-	      indices[base] = pos;
-	      base = pos++;
-	    }
-	  if (flags & FLAGS_VARSIZE_PARAMETER)
-	    {
-	      usedEntries[varsize] += 1;
-	      parameters[pos].type = FORMAT_PARAMETER;
-	      parameters[pos].flags = 0;
-	      indices[varsize] = pos;
-	      varsize = pos++;
-	    }
-
-	  indices[currentParam] = pos;
-
-	  switch (format[index++])
-	    {
-#if defined(SPECIFIER_CHAR_UPPER)
-	    case SPECIFIER_CHAR_UPPER:
-	      flags |= FLAGS_WIDECHAR;
-	      /* FALLTHROUGH */
-#endif
-	    case SPECIFIER_CHAR:
-	      if (flags & FLAGS_LONG)
-		flags |= FLAGS_WIDECHAR;
-	      else if (flags & FLAGS_SHORT)
-		flags &= ~FLAGS_WIDECHAR;
-	      parameters[pos].type = FORMAT_CHAR;
-	      break;
-
-#if defined(SPECIFIER_STRING_UPPER)
-	    case SPECIFIER_STRING_UPPER:
-	      flags |= FLAGS_WIDECHAR;
-	      /* FALLTHROUGH */
-#endif
-	    case SPECIFIER_STRING:
-	      if (flags & FLAGS_LONG)
-		flags |= FLAGS_WIDECHAR;
-	      else if (flags & FLAGS_SHORT)
-		flags &= ~FLAGS_WIDECHAR;
-	      parameters[pos].type = FORMAT_STRING;
-	      break;
-
-	    case SPECIFIER_GROUP:
-	      if (TYPE_SCAN == type)
-		{
-		  int depth = 1;
-		  parameters[pos].type = FORMAT_GROUP;
-		  if (format[index] == QUALIFIER_CIRCUMFLEX)
-		    index++;
-		  if (format[index] == SPECIFIER_UNGROUP)
-		    index++;
-		  if (format[index] == QUALIFIER_MINUS)
-		    index++;
-		  /* Skip nested brackets */
-		  while (format[index] != NIL)
-		    {
-		      if (format[index] == SPECIFIER_GROUP)
-			{
-			  depth++;
-			}
-		      else if (format[index] == SPECIFIER_UNGROUP)
-			{
-			  if (--depth <= 0)
-			    {
-			      index++;
-			      break;
-			    }
-			}
-		      index++;
-		    }
-		}
-	      break;
-
-	    case SPECIFIER_INTEGER:
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-
-	    case SPECIFIER_UNSIGNED:
-	      flags |= FLAGS_UNSIGNED;
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-
-	    case SPECIFIER_DECIMAL:
-	      /* Disable base modifier */
-	      flags &= ~FLAGS_BASE_PARAMETER;
-	      base = BASE_DECIMAL;
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-
-	    case SPECIFIER_OCTAL:
-	      flags |= FLAGS_UNSIGNED;
-	      flags &= ~FLAGS_BASE_PARAMETER;
-	      base = BASE_OCTAL;
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-
-#if defined(SPECIFIER_BINARY)
-	    case SPECIFIER_BINARY_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-	    case SPECIFIER_BINARY:
-	      flags |= FLAGS_NILPADDING;
-	      flags &= ~FLAGS_BASE_PARAMETER;
-	      base = BASE_BINARY;
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-#endif
-
-	    case SPECIFIER_HEX_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-	    case SPECIFIER_HEX:
-	      flags |= FLAGS_UNSIGNED;
-	      flags &= ~FLAGS_BASE_PARAMETER;
-	      base = BASE_HEX;
-	      parameters[pos].type = FORMAT_INT;
-	      break;
-
-	    case SPECIFIER_FLOAT_E_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-	    case SPECIFIER_FLOAT_E:
-	      flags |= FLAGS_FLOAT_E;
-	      parameters[pos].type = FORMAT_DOUBLE;
-	      break;
-
-	    case SPECIFIER_FLOAT_G_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-	    case SPECIFIER_FLOAT_G:
-	      flags |= FLAGS_FLOAT_G;
-	      parameters[pos].type = FORMAT_DOUBLE;
-	      break;
-
-	    case SPECIFIER_FLOAT_F_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-	    case SPECIFIER_FLOAT_F:
-	      parameters[pos].type = FORMAT_DOUBLE;
-	      break;
-
-	    case SPECIFIER_POINTER:
-	      if (sizeof(trio_pointer_t) == sizeof(trio_ulonglong_t))
-		flags |= FLAGS_QUAD;
-	      else if (sizeof(trio_pointer_t) == sizeof(long))
-		flags |= FLAGS_LONG;
-	      parameters[pos].type = FORMAT_POINTER;
-	      break;
-
-	    case SPECIFIER_COUNT:
-	      parameters[pos].type = FORMAT_COUNT;
-	      break;
-
-#if defined(SPECIFIER_HEXFLOAT)
-# if defined(SPECIFIER_HEXFLOAT_UPPER)
-	    case SPECIFIER_HEXFLOAT_UPPER:
-	      flags |= FLAGS_UPPER;
-	      /* FALLTHROUGH */
-# endif
-	    case SPECIFIER_HEXFLOAT:
-	      base = BASE_HEX;
-	      parameters[pos].type = FORMAT_DOUBLE;
-	      break;
-#endif
-
-#if defined(FORMAT_ERRNO)
-	    case SPECIFIER_ERRNO:
-	      parameters[pos].type = FORMAT_ERRNO;
-	      break;
-#endif
-
-#if defined(SPECIFIER_USER_DEFINED_BEGIN)
-	    case SPECIFIER_USER_DEFINED_BEGIN:
-	      {
-		unsigned int max;
-		int without_namespace = TRUE;
-
-		parameters[pos].type = FORMAT_USER_DEFINED;
-		parameters[pos].user_name[0] = NIL;
-		tmpformat = (char *)&format[index];
-
-		while ((ch = format[index]))
-		  {
-		    index++;
-		    if (ch == SPECIFIER_USER_DEFINED_END)
-		      {
-			if (without_namespace)
-			  {
-			    /* We must get the handle first */
-			    parameters[pos].type = FORMAT_PARAMETER;
-			    parameters[pos].indexAfterSpecifier = index;
-			    parameters[pos].flags = FLAGS_USER_DEFINED;
-			    /* Adjust parameters for insertion of new one */
-			    pos++;
-			    usedEntries[currentParam] += 1;
-			    parameters[pos].type = FORMAT_USER_DEFINED;
-			    currentParam++;
-			    indices[currentParam] = pos;
-			    if (currentParam > maxParam)
-			      maxParam = currentParam;
-			  }
-			/* Copy the user data */
-			max = (unsigned int)(&format[index] - tmpformat);
-			if (max > MAX_USER_DATA)
-			  max = MAX_USER_DATA;
-			trio_copy_max(parameters[pos].user_data,
-				      max,
-				      tmpformat);
-			break; /* while */
-		      }
-		    if (ch == SPECIFIER_USER_DEFINED_SEPARATOR)
-		      {
-			without_namespace = FALSE;
-			/* Copy the namespace for later looking-up */
-			max = (int)(&format[index] - tmpformat);
-			if (max > MAX_USER_NAME)
-			  max = MAX_USER_NAME;
-			trio_copy_max(parameters[pos].user_name,
-				      max,
-				      tmpformat);
-			tmpformat = (char *)&format[index];
-		      }
-		  }
-		if (ch != SPECIFIER_USER_DEFINED_END)
-		  return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-	      }
-	      break;
-#endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
-
-	    default:
-	      /* Bail out completely to make the error more obvious */
-              return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-	    }
-
-	  /*  Count the number of times this entry has been used */
-	  usedEntries[currentParam] += 1;
-
-	  /* Find last sticky parameters */
-	  if (gotSticky && !(flags & FLAGS_STICKY))
-	    {
-	      for (i = pos - 1; i >= 0; i--)
-		{
-		  if (parameters[i].type == FORMAT_PARAMETER)
-		    continue;
-		  if ((parameters[i].flags & FLAGS_STICKY) &&
-		      (parameters[i].type == parameters[pos].type))
-		    {
-		      /* Do not overwrite current qualifiers */
-		      flags |= (parameters[i].flags & (unsigned long)~FLAGS_STICKY);
-		      if (width == NO_WIDTH)
-			width = parameters[i].width;
-		      if (precision == NO_PRECISION)
-			precision = parameters[i].precision;
-		      if (base == NO_BASE)
-			base = parameters[i].base;
-		      break;
-		    }
-		}
-	    }
-
-	  parameters[pos].indexAfterSpecifier = index;
-	  parameters[pos].flags = flags;
-	  parameters[pos].width = width;
-	  parameters[pos].precision = precision;
-	  parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
-	  parameters[pos].varsize = varsize;
-	  pos++;
-
-	  if (! positional)
-	    parameterPosition++;
-
-	} /* if identifier */
-
-    } /* while format characters left */
-
-  for (num = 0; num <= maxParam; num++)
-    {
-      if (usedEntries[num] != 1)
-	{
-	  if (usedEntries[num] == 0) /* gap detected */
-	    return TRIO_ERROR_RETURN(TRIO_EGAP, num);
-	  else /* double references detected */
-	    return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
-	}
-
-      i = indices[num];
-
-      /*
-       * FORMAT_PARAMETERS are only present if they must be read,
-       * so it makes no sense to check the ignore flag (besides,
-       * the flags variable is not set for that particular type)
-       */
-      if ((parameters[i].type != FORMAT_PARAMETER) &&
-	  (parameters[i].flags & FLAGS_IGNORE))
-	continue; /* for all arguments */
-
-      /*
-       * The stack arguments are read according to ANSI C89
-       * default argument promotions:
-       *
-       *  char           = int
-       *  short          = int
-       *  unsigned char  = unsigned int
-       *  unsigned short = unsigned int
-       *  float          = double
-       *
-       * In addition to the ANSI C89 these types are read (the
-       * default argument promotions of C99 has not been
-       * considered yet)
-       *
-       *  long long
-       *  long double
-       *  size_t
-       *  ptrdiff_t
-       *  intmax_t
-       */
-      switch (parameters[i].type)
-	{
-	case FORMAT_GROUP:
-	case FORMAT_STRING:
-#if TRIO_WIDECHAR
-	  if (flags & FLAGS_WIDECHAR)
-	    {
-	      parameters[i].data.wstring = (argarray == NULL)
-		? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_wchar_t *)
-		: (trio_wchar_t *)(argarray[num]);
-	    }
-	  else
-#endif
-	    {
-	      parameters[i].data.string = (argarray == NULL)
-		? va_arg(TRIO_VA_LIST_DEREF(arglist), char *)
-		: (char *)(argarray[num]);
-	    }
-	  break;
-
-#if defined(FORMAT_USER_DEFINED)
-	case FORMAT_USER_DEFINED:
-#endif
-	case FORMAT_POINTER:
-	case FORMAT_COUNT:
-	case FORMAT_UNKNOWN:
-	  parameters[i].data.pointer = (argarray == NULL)
-	    ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
-	    : argarray[num];
-	  break;
-
-	case FORMAT_CHAR:
-	case FORMAT_INT:
-	  if (TYPE_SCAN == type)
-	    {
-              if (argarray == NULL)
-                parameters[i].data.pointer =
-                  (trio_pointer_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t);
-              else
-                {
-                  if (parameters[i].type == FORMAT_CHAR)
-                    parameters[i].data.pointer =
-                      (trio_pointer_t)((char *)argarray[num]);
-                  else if (parameters[i].flags & FLAGS_SHORT)
-                    parameters[i].data.pointer =
-                      (trio_pointer_t)((short *)argarray[num]);
-                  else
-                    parameters[i].data.pointer =
-                      (trio_pointer_t)((int *)argarray[num]);
-                }
-	    }
-	  else
-	    {
-#if defined(QUALIFIER_VARSIZE) || defined(QUALIFIER_FIXED_SIZE)
-	      if (parameters[i].flags
-		  & (FLAGS_VARSIZE_PARAMETER | FLAGS_FIXED_SIZE))
-		{
-		  if (parameters[i].flags & FLAGS_VARSIZE_PARAMETER)
-		    {
-		      /*
-		       * Variable sizes are mapped onto the fixed sizes, in
-		       * accordance with integer promotion.
-		       *
-		       * Please note that this may not be portable, as we
-		       * only guess the size, not the layout of the numbers.
-		       * For example, if int is little-endian, and long is
-		       * big-endian, then this will fail.
-		       */
-		      varsize = (int)parameters[parameters[i].varsize].data.number.as_unsigned;
-		    }
-		  else
-		    {
-		      /* Used for the I<bits> modifiers */
-		      varsize = parameters[i].varsize;
-		    }
-		  parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
-
-		  if (varsize <= (int)sizeof(int))
-		    ;
-		  else if (varsize <= (int)sizeof(long))
-		    parameters[i].flags |= FLAGS_LONG;
-#if defined(QUALIFIER_INTMAX_T)
-		  else if (varsize <= (int)sizeof(trio_longlong_t))
-		    parameters[i].flags |= FLAGS_QUAD;
-		  else
-		    parameters[i].flags |= FLAGS_INTMAX_T;
-#else
-		  else
-		    parameters[i].flags |= FLAGS_QUAD;
-#endif
-		}
-#endif /* defined(QUALIFIER_VARSIZE) */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-	      if (parameters[i].flags & FLAGS_SIZE_T)
-		parameters[i].data.number.as_unsigned = (argarray == NULL)
-		  ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), size_t)
-		  : (trio_uintmax_t)(*((size_t *)argarray[num]));
-	      else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-	      if (parameters[i].flags & FLAGS_PTRDIFF_T)
-		parameters[i].data.number.as_unsigned = (argarray == NULL)
-		  ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), ptrdiff_t)
-		  : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
-	      else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-	      if (parameters[i].flags & FLAGS_INTMAX_T)
-		parameters[i].data.number.as_unsigned = (argarray == NULL)
-		  ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_intmax_t)
-		  : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
-	      else
-#endif
-	      if (parameters[i].flags & FLAGS_QUAD)
-		parameters[i].data.number.as_unsigned = (argarray == NULL)
-		  ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_ulonglong_t)
-		  : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
-	      else if (parameters[i].flags & FLAGS_LONG)
-		parameters[i].data.number.as_unsigned = (argarray == NULL)
-		  ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), long)
-		  : (trio_uintmax_t)(*((long *)argarray[num]));
-	      else
-		{
-		  if (argarray == NULL)
-		    parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int);
-		  else
-		    {
-		      if (parameters[i].type == FORMAT_CHAR)
-			parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((char *)argarray[num]));
-		      else if (parameters[i].flags & FLAGS_SHORT)
-			parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((short *)argarray[num]));
-		      else
-			parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((int *)argarray[num]));
-		    }
-		}
-	    }
-	  break;
-
-	case FORMAT_PARAMETER:
-	  /*
-	   * The parameter for the user-defined specifier is a pointer,
-	   * whereas the rest (width, precision, base) uses an integer.
-	   */
-	  if (parameters[i].flags & FLAGS_USER_DEFINED)
-	    parameters[i].data.pointer = (argarray == NULL)
-	      ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
-	      : argarray[num];
-	  else
-	    parameters[i].data.number.as_unsigned = (argarray == NULL)
-	      ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int)
-	      : (trio_uintmax_t)(*((int *)argarray[num]));
-	  break;
-
-	case FORMAT_DOUBLE:
-	  if (TYPE_SCAN == type)
-	    {
-	      if (parameters[i].flags & FLAGS_LONGDOUBLE)
-		parameters[i].data.longdoublePointer = (argarray == NULL)
-		  ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t *)
-		  : (trio_long_double_t *)argarray[num];
-	      else
-                {
-		  if (parameters[i].flags & FLAGS_LONG)
-		    parameters[i].data.doublePointer = (argarray == NULL)
-		      ? va_arg(TRIO_VA_LIST_DEREF(arglist), double *)
-		      : (double *)argarray[num];
-		  else
-		    parameters[i].data.doublePointer = (argarray == NULL)
-		      ? (double *)va_arg(TRIO_VA_LIST_DEREF(arglist), float *)
-		      : (double *)((float *)argarray[num]);
-                }
-	    }
-	  else
-	    {
-	      if (parameters[i].flags & FLAGS_LONGDOUBLE)
-		parameters[i].data.longdoubleNumber = (argarray == NULL)
-		  ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t)
-		  : (trio_long_double_t)(*((trio_long_double_t *)argarray[num]));
-	      else
-		{
-		  if (argarray == NULL)
-		    parameters[i].data.longdoubleNumber =
-		      (trio_long_double_t)va_arg(TRIO_VA_LIST_DEREF(arglist), double);
-		  else
-		    {
-		      if (parameters[i].flags & FLAGS_SHORT)
-			parameters[i].data.longdoubleNumber =
-			  (trio_long_double_t)(*((float *)argarray[num]));
-		      else
-			parameters[i].data.longdoubleNumber =
-			  (trio_long_double_t)(*((double *)argarray[num]));
-		    }
-		}
-	    }
-	  break;
-
-#if defined(FORMAT_ERRNO)
-	case FORMAT_ERRNO:
-	  parameters[i].data.errorNumber = save_errno;
-	  break;
-#endif
-
-	default:
-	  break;
-	}
-    } /* for all specifiers */
-  return num;
-}
-
-
-/*************************************************************************
- *
- * FORMATTING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioWriteNumber
- *
- * Description:
- *  Output a number.
- *  The complexity of this function is a result of the complexity
- *  of the dependencies of the flags.
- */
-TRIO_PRIVATE void
-TrioWriteNumber
-TRIO_ARGS6((self, number, flags, width, precision, base),
-	   trio_class_t *self,
-	   trio_uintmax_t number,
-	   trio_flags_t flags,
-	   int width,
-	   int precision,
-	   int base)
-{
-  BOOLEAN_T isNegative;
-  BOOLEAN_T isNumberZero;
-  BOOLEAN_T isPrecisionZero;
-  BOOLEAN_T ignoreNumber;
-  char buffer[MAX_CHARS_IN(trio_uintmax_t) * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
-  char *bufferend;
-  char *pointer;
-  TRIO_CONST char *digits;
-  int i;
-  int length;
-  char *p;
-  int count;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
-
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-  if (base == NO_BASE)
-    base = BASE_DECIMAL;
-
-  isNumberZero = (number == 0);
-  isPrecisionZero = (precision == 0);
-  ignoreNumber = (isNumberZero
-		  && isPrecisionZero
-		  && !((flags & FLAGS_ALTERNATIVE) && (base == BASE_OCTAL)));
-
-  if (flags & FLAGS_UNSIGNED)
-    {
-      isNegative = FALSE;
-      flags &= ~FLAGS_SHOWSIGN;
-    }
-  else
-    {
-      isNegative = ((trio_intmax_t)number < 0);
-      if (isNegative)
-	number = -((trio_intmax_t)number);
-    }
-
-  if (flags & FLAGS_QUAD)
-    number &= (trio_ulonglong_t)-1;
-  else if (flags & FLAGS_LONG)
-    number &= (unsigned long)-1;
-  else
-    number &= (unsigned int)-1;
-
-  /* Build number */
-  pointer = bufferend = &buffer[sizeof(buffer) - 1];
-  *pointer-- = NIL;
-  for (i = 1; i < (int)sizeof(buffer); i++)
-    {
-      *pointer-- = digits[number % base];
-      number /= base;
-      if (number == 0)
-	break;
-
-      if ((flags & FLAGS_QUOTE) && TrioFollowedBySeparator(i + 1))
-	{
-	  /*
-	   * We are building the number from the least significant
-	   * to the most significant digit, so we have to copy the
-	   * thousand separator backwards
-	   */
-	  length = internalThousandSeparatorLength;
-	  if (((int)(pointer - buffer) - length) > 0)
-	    {
-	      p = &internalThousandSeparator[length - 1];
-	      while (length-- > 0)
-		*pointer-- = *p--;
-	    }
-	}
-    }
-
-  if (! ignoreNumber)
-    {
-      /* Adjust width */
-      width -= (bufferend - pointer) - 1;
-    }
-
-  /* Adjust precision */
-  if (NO_PRECISION != precision)
-    {
-      precision -= (bufferend - pointer) - 1;
-      if (precision < 0)
-	precision = 0;
-      flags |= FLAGS_NILPADDING;
-    }
-
-  /* Calculate padding */
-  count = (! ((flags & FLAGS_LEFTADJUST) || (precision == NO_PRECISION)))
-    ? precision
-    : 0;
-
-  /* Adjust width further */
-  if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
-    width--;
-  if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
-    {
-      switch (base)
-	{
-	case BASE_BINARY:
-	case BASE_HEX:
-	  width -= 2;
-	  break;
-	case BASE_OCTAL:
-	  if (!(flags & FLAGS_NILPADDING) || (count == 0))
-	    width--;
-	  break;
-	default:
-	  break;
-	}
-    }
-
-  /* Output prefixes spaces if needed */
-  if (! ((flags & FLAGS_LEFTADJUST) ||
-	 ((flags & FLAGS_NILPADDING) && (precision == NO_PRECISION))))
-    {
-      while (width-- > count)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-
-  /* width has been adjusted for signs and alternatives */
-  if (isNegative)
-    self->OutStream(self, '-');
-  else if (flags & FLAGS_SHOWSIGN)
-    self->OutStream(self, '+');
-  else if (flags & FLAGS_SPACE)
-    self->OutStream(self, ' ');
-
-  /* Prefix is not written when the value is zero */
-  if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
-    {
-      switch (base)
-	{
-	case BASE_BINARY:
-	  self->OutStream(self, '0');
-	  self->OutStream(self, (flags & FLAGS_UPPER) ? 'B' : 'b');
-	  break;
-
-	case BASE_OCTAL:
-	  if (!(flags & FLAGS_NILPADDING) || (count == 0))
-	    self->OutStream(self, '0');
-	  break;
-
-	case BASE_HEX:
-	  self->OutStream(self, '0');
-	  self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-	  break;
-
-	default:
-	  break;
-	} /* switch base */
-    }
-
-  /* Output prefixed zero padding if needed */
-  if (flags & FLAGS_NILPADDING)
-    {
-      if (precision == NO_PRECISION)
-	precision = width;
-      while (precision-- > 0)
-	{
-	  self->OutStream(self, '0');
-	  width--;
-	}
-    }
-
-  if (! ignoreNumber)
-    {
-      /* Output the number itself */
-      while (*(++pointer))
-	{
-	  self->OutStream(self, *pointer);
-	}
-    }
-
-  /* Output trailing spaces if needed */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-}
-
-/*************************************************************************
- * TrioWriteStringCharacter
- *
- * Description:
- *  Output a single character of a string
- */
-TRIO_PRIVATE void
-TrioWriteStringCharacter
-TRIO_ARGS3((self, ch, flags),
-	   trio_class_t *self,
-	   int ch,
-	   trio_flags_t flags)
-{
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      if (! isprint(ch))
-	{
-	  /*
-	   * Non-printable characters are converted to C escapes or
-	   * \number, if no C escape exists.
-	   */
-	  self->OutStream(self, CHAR_BACKSLASH);
-	  switch (ch)
-	    {
-	    case '\007': self->OutStream(self, 'a'); break;
-	    case '\b': self->OutStream(self, 'b'); break;
-	    case '\f': self->OutStream(self, 'f'); break;
-	    case '\n': self->OutStream(self, 'n'); break;
-	    case '\r': self->OutStream(self, 'r'); break;
-	    case '\t': self->OutStream(self, 't'); break;
-	    case '\v': self->OutStream(self, 'v'); break;
-	    case '\\': self->OutStream(self, '\\'); break;
-	    default:
-	      self->OutStream(self, 'x');
-	      TrioWriteNumber(self, (trio_uintmax_t)ch,
-			      FLAGS_UNSIGNED | FLAGS_NILPADDING,
-			      2, 2, BASE_HEX);
-	      break;
-	    }
-	}
-      else if (ch == CHAR_BACKSLASH)
-	{
-	  self->OutStream(self, CHAR_BACKSLASH);
-	  self->OutStream(self, CHAR_BACKSLASH);
-	}
-      else
-	{
-	  self->OutStream(self, ch);
-	}
-    }
-  else
-    {
-      self->OutStream(self, ch);
-    }
-}
-
-/*************************************************************************
- * TrioWriteString
- *
- * Description:
- *  Output a string
- */
-TRIO_PRIVATE void
-TrioWriteString
-TRIO_ARGS5((self, string, flags, width, precision),
-	   trio_class_t *self,
-	   TRIO_CONST char *string,
-	   trio_flags_t flags,
-	   int width,
-	   int precision)
-{
-  int length;
-  int ch;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-  if (string == NULL)
-    {
-      string = internalNullString;
-      length = sizeof(internalNullString) - 1;
-      /* Disable quoting for the null pointer */
-      flags &= (~FLAGS_QUOTE);
-      width = 0;
-    }
-  else
-    {
-      length = trio_length(string);
-    }
-  if ((NO_PRECISION != precision) &&
-      (precision < length))
-    {
-      length = precision;
-    }
-  width -= length;
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length-- > 0)
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-
-/*************************************************************************
- * TrioWriteWideStringCharacter
- *
- * Description:
- *  Output a wide string as a multi-byte sequence
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE int
-TrioWriteWideStringCharacter
-TRIO_ARGS4((self, wch, flags, width),
-	   trio_class_t *self,
-	   trio_wchar_t wch,
-	   trio_flags_t flags,
-	   int width)
-{
-  int size;
-  int i;
-  int ch;
-  char *string;
-  char buffer[MB_LEN_MAX + 1];
-
-  if (width == NO_WIDTH)
-    width = sizeof(buffer);
-
-  size = wctomb(buffer, wch);
-  if ((size <= 0) || (size > width) || (buffer[0] == NIL))
-    return 0;
-
-  string = buffer;
-  i = size;
-  while ((width >= i) && (width-- > 0) && (i-- > 0))
-    {
-      /* The ctype parameters must be an unsigned char (or EOF) */
-      ch = (int)((unsigned char)(*string++));
-      TrioWriteStringCharacter(self, ch, flags);
-    }
-  return size;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteWideString
- *
- * Description:
- *  Output a wide character string as a multi-byte string
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE void
-TrioWriteWideString
-TRIO_ARGS5((self, wstring, flags, width, precision),
-	   trio_class_t *self,
-	   TRIO_CONST trio_wchar_t *wstring,
-	   trio_flags_t flags,
-	   int width,
-	   int precision)
-{
-  int length;
-  int size;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  (void)mblen(NULL, 0);
-#endif
-
-  if (wstring == NULL)
-    {
-      TrioWriteString(self, NULL, flags, width, precision);
-      return;
-    }
-
-  if (NO_PRECISION == precision)
-    {
-      length = INT_MAX;
-    }
-  else
-    {
-      length = precision;
-      width -= length;
-    }
-
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-
-  if (! (flags & FLAGS_LEFTADJUST))
-    {
-      while (width-- > 0)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-
-  while (length > 0)
-    {
-      size = TrioWriteWideStringCharacter(self, *wstring++, flags, length);
-      if (size == 0)
-	break; /* while */
-      length -= size;
-    }
-
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      while (width-- > 0)
-	self->OutStream(self, CHAR_ADJUST);
-    }
-  if (flags & FLAGS_QUOTE)
-    self->OutStream(self, CHAR_QUOTE);
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteDouble
- *
- * http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/dr_211.htm
- *
- * "5.2.4.2.2 paragraph #4
- *
- *  The accuracy [...] is implementation defined, as is the accuracy
- *  of the conversion between floating-point internal representations
- *  and string representations performed by the libray routine in
- *  <stdio.h>"
- */
-/* FIXME: handle all instances of constant long-double number (L)
- *   and *l() math functions.
- */
-TRIO_PRIVATE void
-TrioWriteDouble
-TRIO_ARGS6((self, number, flags, width, precision, base),
-	   trio_class_t *self,
-	   trio_long_double_t number,
-	   trio_flags_t flags,
-	   int width,
-	   int precision,
-	   int base)
-{
-  trio_long_double_t integerNumber;
-  trio_long_double_t fractionNumber;
-  trio_long_double_t workNumber;
-  int integerDigits;
-  int fractionDigits;
-  int exponentDigits;
-  int baseDigits;
-  int integerThreshold;
-  int fractionThreshold;
-  int expectedWidth;
-  int exponent = 0;
-  unsigned int uExponent = 0;
-  int exponentBase;
-  trio_long_double_t dblBase;
-  trio_long_double_t dblIntegerBase;
-  trio_long_double_t dblFractionBase;
-  trio_long_double_t integerAdjust;
-  trio_long_double_t fractionAdjust;
-  BOOLEAN_T isNegative;
-  BOOLEAN_T isExponentNegative = FALSE;
-  BOOLEAN_T requireTwoDigitExponent;
-  BOOLEAN_T isHex;
-  TRIO_CONST char *digits;
-  char *groupingPointer;
-  int i;
-  int index;
-  BOOLEAN_T hasOnlyZeroes;
-  int zeroes = 0;
-  register int trailingZeroes;
-  BOOLEAN_T keepTrailingZeroes;
-  BOOLEAN_T keepDecimalPoint;
-  trio_long_double_t epsilon;
-
-  assert(VALID(self));
-  assert(VALID(self->OutStream));
-  assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
-
-  /* Determine sign and look for special quantities */
-  switch (trio_fpclassify_and_signbit(number, &isNegative))
-    {
-    case TRIO_FP_NAN:
-      TrioWriteString(self,
-		      (flags & FLAGS_UPPER)
-		      ? NAN_UPPER
-		      : NAN_LOWER,
-		      flags, width, precision);
-      return;
-
-    case TRIO_FP_INFINITE:
-      if (isNegative)
-	{
-	  /* Negative infinity */
-	  TrioWriteString(self,
-			  (flags & FLAGS_UPPER)
-			  ? "-" INFINITE_UPPER
-			  : "-" INFINITE_LOWER,
-			  flags, width, precision);
-	  return;
-	}
-      else
-	{
-	  /* Positive infinity */
-	  TrioWriteString(self,
-			  (flags & FLAGS_UPPER)
-			  ? INFINITE_UPPER
-			  : INFINITE_LOWER,
-			  flags, width, precision);
-	  return;
-	}
-
-    default:
-      /* Finitude */
-      break;
-    }
-
-  /* Normal numbers */
-  if (flags & FLAGS_LONGDOUBLE)
-    {
-      baseDigits = (base == 10)
-	? LDBL_DIG
-	: (int)floor(LDBL_MANT_DIG / TrioLogarithmBase(base));
-      epsilon = LDBL_EPSILON;
-    }
-  else if (flags & FLAGS_SHORT)
-    {
-      baseDigits = (base == BASE_DECIMAL)
-	? FLT_DIG
-	: (int)floor(FLT_MANT_DIG / TrioLogarithmBase(base));
-      epsilon = FLT_EPSILON;
-    }
-  else
-    {
-      baseDigits = (base == BASE_DECIMAL)
-	? DBL_DIG
-	: (int)floor(DBL_MANT_DIG / TrioLogarithmBase(base));
-      epsilon = DBL_EPSILON;
-    }
-
-  digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
-  isHex = (base == BASE_HEX);
-  if (base == NO_BASE)
-    base = BASE_DECIMAL;
-  dblBase = (trio_long_double_t)base;
-  keepTrailingZeroes = !( (flags & FLAGS_ROUNDING) ||
-			  ( (flags & FLAGS_FLOAT_G) &&
-			    !(flags & FLAGS_ALTERNATIVE) ) );
-
-  if (flags & FLAGS_ROUNDING)
-    precision = baseDigits;
-
-  if (precision == NO_PRECISION)
-    {
-      if (isHex)
-	{
-	  keepTrailingZeroes = FALSE;
-	  precision = FLT_MANT_DIG;
-	}
-      else
-	{
-	  precision = FLT_DIG;
-	}
-    }
-
-  if (isNegative)
-    number = -number;
-
-  if (isHex)
-    flags |= FLAGS_FLOAT_E;
-
-  if (flags & FLAGS_FLOAT_G)
-    {
-      if (precision == 0)
-	precision = 1;
-
-      if ((number < 1.0E-4) || (number > powl(base,
-					      (trio_long_double_t)precision)))
-	{
-	  /* Use scientific notation */
-	  flags |= FLAGS_FLOAT_E;
-	}
-      else if (number < 1.0)
-	{
-	  /*
-	   * Use normal notation. If the integer part of the number is
-	   * zero, then adjust the precision to include leading fractional
-	   * zeros.
-	   */
-	  workNumber = TrioLogarithm(number, base);
-	  workNumber = TRIO_FABS(workNumber);
-	  if (workNumber - floorl(workNumber) < 0.001)
-	    workNumber--;
-	  zeroes = (int)floorl(workNumber);
-	}
-    }
-
-  if (flags & FLAGS_FLOAT_E)
-    {
-      /* Scale the number */
-      workNumber = TrioLogarithm(number, base);
-      if (trio_isinf(workNumber) == -1)
-	{
-	  exponent = 0;
-	  /* Undo setting */
-	  if (flags & FLAGS_FLOAT_G)
-	    flags &= ~FLAGS_FLOAT_E;
-	}
-      else
-	{
-	  exponent = (int)floorl(workNumber);
-	  number /= powl(dblBase, (trio_long_double_t)exponent);
-	  isExponentNegative = (exponent < 0);
-	  uExponent = (isExponentNegative) ? -exponent : exponent;
-	  if (isHex)
-	    uExponent *= 4; /* log16(2) */
-	  /* No thousand separators */
-	  flags &= ~FLAGS_QUOTE;
-	}
-    }
-
-  integerNumber = floorl(number);
-  fractionNumber = number - integerNumber;
-
-  /*
-   * Truncated number.
-   *
-   * Precision is number of significant digits for FLOAT_G
-   * and number of fractional digits for others.
-   */
-  integerDigits = (integerNumber > epsilon)
-    ? 1 + (int)TrioLogarithm(integerNumber, base)
-    : 1;
-  fractionDigits = ((flags & FLAGS_FLOAT_G) && (zeroes == 0))
-    ? precision - integerDigits
-    : zeroes + precision;
-
-  dblFractionBase = TrioPower(base, fractionDigits);
-
-  workNumber = number + 0.5 / dblFractionBase;
-  if (floorl(number) != floorl(workNumber))
-    {
-      if (flags & FLAGS_FLOAT_E)
-	{
-	  /* Adjust if number was rounded up one digit (ie. 0.99 to 1.00) */
-	  exponent++;
-	  isExponentNegative = (exponent < 0);
-	  uExponent = (isExponentNegative) ? -exponent : exponent;
-	  if (isHex)
-	    uExponent *= 4; /* log16(2) */
-	  workNumber = (number + 0.5 / dblFractionBase) / dblBase;
-	  integerNumber = floorl(workNumber);
-	  fractionNumber = workNumber - integerNumber;
-	}
-      else
-	{
-	  /* Adjust if number was rounded up one digit (ie. 99 to 100) */
-	  integerNumber = floorl(number + 0.5);
-	  fractionNumber = 0.0;
-	  integerDigits = (integerNumber > epsilon)
-	    ? 1 + (int)TrioLogarithm(integerNumber, base)
-	    : 1;
-	}
-    }
-
-  /* Estimate accuracy */
-  integerAdjust = fractionAdjust = 0.5;
-  if (flags & FLAGS_ROUNDING)
-    {
-      if (integerDigits > baseDigits)
-	{
-	  integerThreshold = baseDigits;
-	  fractionDigits = 0;
-	  dblFractionBase = 1.0;
-	  fractionThreshold = 0;
-	  precision = 0; /* Disable decimal-point */
-	  integerAdjust = TrioPower(base, integerDigits - integerThreshold - 1);
-	  fractionAdjust = 0.0;
-	}
-      else
-	{
-	  integerThreshold = integerDigits;
-	  fractionThreshold = fractionDigits - integerThreshold;
-	  fractionAdjust = 1.0;
-	}
-    }
-  else
-    {
-      integerThreshold = INT_MAX;
-      fractionThreshold = INT_MAX;
-    }
-
-  /*
-   * Calculate expected width.
-   *  sign + integer part + thousands separators + decimal point
-   *  + fraction + exponent
-   */
-  fractionAdjust /= dblFractionBase;
-  hasOnlyZeroes = (floorl((fractionNumber + fractionAdjust) * dblFractionBase) < epsilon);
-  keepDecimalPoint = ( (flags & FLAGS_ALTERNATIVE) ||
-		       !((precision == 0) ||
-			 (!keepTrailingZeroes && hasOnlyZeroes)) );
-  if (flags & FLAGS_FLOAT_E)
-    {
-      exponentDigits = (uExponent == 0)
-	? 1
-	: (int)ceil(TrioLogarithm((double)(uExponent + 1),
-				  (isHex) ? 10.0 : base));
-    }
-  else
-    exponentDigits = 0;
-  requireTwoDigitExponent = ((base == BASE_DECIMAL) && (exponentDigits == 1));
-
-  expectedWidth = integerDigits + fractionDigits
-    + (keepDecimalPoint
-       ? internalDecimalPointLength
-       : 0)
-    + ((flags & FLAGS_QUOTE)
-       ? TrioCalcThousandSeparatorLength(integerDigits)
-       : 0);
-  if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
-    expectedWidth += sizeof("-") - 1;
-  if (exponentDigits > 0)
-    expectedWidth += exponentDigits +
-      ((requireTwoDigitExponent ? sizeof("E+0") : sizeof("E+")) - 1);
-  if (isHex)
-    expectedWidth += sizeof("0X") - 1;
-
-  /* Output prefixing */
-  if (flags & FLAGS_NILPADDING)
-    {
-      /* Leading zeros must be after sign */
-      if (isNegative)
-	self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-	self->OutStream(self, '+');
-      else if (flags & FLAGS_SPACE)
-	self->OutStream(self, ' ');
-      if (isHex)
-	{
-	  self->OutStream(self, '0');
-	  self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-	}
-      if (!(flags & FLAGS_LEFTADJUST))
-	{
-	  for (i = expectedWidth; i < width; i++)
-	    {
-	      self->OutStream(self, '0');
-	    }
-	}
-    }
-  else
-    {
-      /* Leading spaces must be before sign */
-      if (!(flags & FLAGS_LEFTADJUST))
-	{
-	  for (i = expectedWidth; i < width; i++)
-	    {
-	      self->OutStream(self, CHAR_ADJUST);
-	    }
-	}
-      if (isNegative)
-	self->OutStream(self, '-');
-      else if (flags & FLAGS_SHOWSIGN)
-	self->OutStream(self, '+');
-      else if (flags & FLAGS_SPACE)
-	self->OutStream(self, ' ');
-      if (isHex)
-	{
-	  self->OutStream(self, '0');
-	  self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
-	}
-    }
-
-  /* Output the integer part and thousand separators */
-  dblIntegerBase = 1.0 / TrioPower(base, integerDigits - 1);
-  for (i = 0; i < integerDigits; i++)
-    {
-      workNumber = floorl(((integerNumber + integerAdjust) * dblIntegerBase));
-      if (i > integerThreshold)
-	{
-	  /* Beyond accuracy */
-	  self->OutStream(self, digits[0]);
-	}
-      else
-	{
-	  self->OutStream(self, digits[(int)fmodl(workNumber, dblBase)]);
-	}
-      dblIntegerBase *= dblBase;
-
-      if (((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
-	  && TrioFollowedBySeparator(integerDigits - i))
-	{
-	  for (groupingPointer = internalThousandSeparator;
-	       *groupingPointer != NIL;
-	       groupingPointer++)
-	    {
-	      self->OutStream(self, *groupingPointer);
-	    }
-	}
-    }
-
-  /* Insert decimal point and build the fraction part */
-  trailingZeroes = 0;
-
-  if (keepDecimalPoint)
-    {
-      if (internalDecimalPoint)
-	{
-	  self->OutStream(self, internalDecimalPoint);
-	}
-      else
-	{
-	  for (i = 0; i < internalDecimalPointLength; i++)
-	    {
-	      self->OutStream(self, internalDecimalPointString[i]);
-	    }
-	}
-    }
-
-  for (i = 0; i < fractionDigits; i++)
-    {
-      if ((integerDigits > integerThreshold) || (i > fractionThreshold))
-	{
-	  /* Beyond accuracy */
-	  trailingZeroes++;
-	}
-      else
-	{
-	  fractionNumber *= dblBase;
-	  fractionAdjust *= dblBase;
-	  workNumber = floorl(fractionNumber + fractionAdjust);
-	  fractionNumber -= workNumber;
-	  index = (int)fmodl(workNumber, dblBase);
-	  if (index == 0)
-	    {
-	      trailingZeroes++;
-	    }
-	  else
-	    {
-	      while (trailingZeroes > 0)
-		{
-		  /* Not trailing zeroes after all */
-		  self->OutStream(self, digits[0]);
-		  trailingZeroes--;
-		}
-	      self->OutStream(self, digits[index]);
-	    }
-	}
-    }
-
-  if (keepTrailingZeroes)
-    {
-      while (trailingZeroes > 0)
-	{
-	  self->OutStream(self, digits[0]);
-	  trailingZeroes--;
-	}
-    }
-
-  /* Output exponent */
-  if (exponentDigits > 0)
-    {
-      self->OutStream(self,
-		      isHex
-		      ? ((flags & FLAGS_UPPER) ? 'P' : 'p')
-		      : ((flags & FLAGS_UPPER) ? 'E' : 'e'));
-      self->OutStream(self, (isExponentNegative) ? '-' : '+');
-
-      /* The exponent must contain at least two digits */
-      if (requireTwoDigitExponent)
-        self->OutStream(self, '0');
-
-      if (isHex)
-	base = 10.0;
-      exponentBase = (int)TrioPower(base, exponentDigits - 1);
-      for (i = 0; i < exponentDigits; i++)
-	{
-	  self->OutStream(self, digits[(uExponent / exponentBase) % base]);
-	  exponentBase /= base;
-	}
-    }
-  /* Output trailing spaces */
-  if (flags & FLAGS_LEFTADJUST)
-    {
-      for (i = expectedWidth; i < width; i++)
-	{
-	  self->OutStream(self, CHAR_ADJUST);
-	}
-    }
-}
-
-/*************************************************************************
- * TrioFormatProcess
- *
- * Description:
- *  This is the main engine for formatting output
- */
-TRIO_PRIVATE int
-TrioFormatProcess
-TRIO_ARGS3((data, format, parameters),
-	   trio_class_t *data,
-	   TRIO_CONST char *format,
-	   trio_parameter_t *parameters)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-#endif
-  int i;
-  TRIO_CONST char *string;
-  trio_pointer_t pointer;
-  trio_flags_t flags;
-  int width;
-  int precision;
-  int base;
-  int index;
-
-  index = 0;
-  i = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  (void)mblen(NULL, 0);
-#endif
-
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-	{
-	  charlen = mblen(&format[index], MB_LEN_MAX);
-	  /*
-	   * Only valid multibyte characters are handled here. Invalid
-	   * multibyte characters (charlen == -1) are handled as normal
-	   * characters.
-	   */
-	  if (charlen != -1)
-	    {
-	      while (charlen-- > 0)
-		{
-		  data->OutStream(data, format[index++]);
-		}
-	      continue; /* while characters left in formatting string */
-	    }
-	}
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      if (CHAR_IDENTIFIER == format[index])
-	{
-	  if (CHAR_IDENTIFIER == format[index + 1])
-	    {
-	      data->OutStream(data, CHAR_IDENTIFIER);
-	      index += 2;
-	    }
-	  else
-	    {
-	      /* Skip the parameter entries */
-	      while (parameters[i].type == FORMAT_PARAMETER)
-		i++;
-
-	      flags = parameters[i].flags;
-
-	      /* Find width */
-	      width = parameters[i].width;
-	      if (flags & FLAGS_WIDTH_PARAMETER)
-		{
-		  /* Get width from parameter list */
-		  width = (int)parameters[width].data.number.as_signed;
-		  if (width < 0)
-		    {
-		      /*
-		       * A negative width is the same as the - flag and
-		       * a positive width.
-		       */
-		      flags |= FLAGS_LEFTADJUST;
-		      flags &= ~FLAGS_NILPADDING;
-		      width = -width;
-		    }
-		}
-
-	      /* Find precision */
-	      if (flags & FLAGS_PRECISION)
-		{
-		  precision = parameters[i].precision;
-		  if (flags & FLAGS_PRECISION_PARAMETER)
-		    {
-		      /* Get precision from parameter list */
-		      precision = (int)parameters[precision].data.number.as_signed;
-		      if (precision < 0)
-			{
-			  /*
-			   * A negative precision is the same as no
-			   * precision
-			   */
-			  precision = NO_PRECISION;
-			}
-		    }
-		}
-	      else
-		{
-		  precision = NO_PRECISION;
-		}
-
-	      /* Find base */
-	      base = parameters[i].base;
-	      if (flags & FLAGS_BASE_PARAMETER)
-		{
-		  /* Get base from parameter list */
-		  base = (int)parameters[base].data.number.as_signed;
-		}
-
-	      switch (parameters[i].type)
-		{
-		case FORMAT_CHAR:
-		  if (flags & FLAGS_QUOTE)
-		    data->OutStream(data, CHAR_QUOTE);
-		  if (! (flags & FLAGS_LEFTADJUST))
-		    {
-		      while (--width > 0)
-			data->OutStream(data, CHAR_ADJUST);
-		    }
-#if TRIO_WIDECHAR
-		  if (flags & FLAGS_WIDECHAR)
-		    {
-		      TrioWriteWideStringCharacter(data,
-						   (trio_wchar_t)parameters[i].data.number.as_signed,
-						   flags,
-						   NO_WIDTH);
-		    }
-		  else
-#endif
-		    {
-		      TrioWriteStringCharacter(data,
-					       (int)parameters[i].data.number.as_signed,
-					       flags);
-		    }
-
-		  if (flags & FLAGS_LEFTADJUST)
-		    {
-		      while(--width > 0)
-			data->OutStream(data, CHAR_ADJUST);
-		    }
-		  if (flags & FLAGS_QUOTE)
-		    data->OutStream(data, CHAR_QUOTE);
-
-		  break; /* FORMAT_CHAR */
-
-		case FORMAT_INT:
-		  TrioWriteNumber(data,
-				  parameters[i].data.number.as_unsigned,
-				  flags,
-				  width,
-				  precision,
-				  base);
-
-		  break; /* FORMAT_INT */
-
-		case FORMAT_DOUBLE:
-		  TrioWriteDouble(data,
-				  parameters[i].data.longdoubleNumber,
-				  flags,
-				  width,
-				  precision,
-				  base);
-		  break; /* FORMAT_DOUBLE */
-
-		case FORMAT_STRING:
-#if TRIO_WIDECHAR
-		  if (flags & FLAGS_WIDECHAR)
-		    {
-		      TrioWriteWideString(data,
-					  parameters[i].data.wstring,
-					  flags,
-					  width,
-					  precision);
-		    }
-		  else
-#endif
-		    {
-		      TrioWriteString(data,
-				      parameters[i].data.string,
-				      flags,
-				      width,
-				      precision);
-		    }
-		  break; /* FORMAT_STRING */
-
-		case FORMAT_POINTER:
-		  {
-		    trio_reference_t reference;
-
-		    reference.data = data;
-		    reference.parameter = &parameters[i];
-		    trio_print_pointer(&reference, parameters[i].data.pointer);
-		  }
-		  break; /* FORMAT_POINTER */
-
-		case FORMAT_COUNT:
-		  pointer = parameters[i].data.pointer;
-		  if (NULL != pointer)
-		    {
-		      /*
-		       * C99 paragraph 7.19.6.1.8 says "the number of
-		       * characters written to the output stream so far by
-		       * this call", which is data->committed
-		       */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-		      if (flags & FLAGS_SIZE_T)
-			*(size_t *)pointer = (size_t)data->committed;
-		      else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-		      if (flags & FLAGS_PTRDIFF_T)
-			*(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
-		      else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-		      if (flags & FLAGS_INTMAX_T)
-			*(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
-		      else
-#endif
-		      if (flags & FLAGS_QUAD)
-			{
-			  *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
-			}
-		      else if (flags & FLAGS_LONG)
-			{
-			  *(long int *)pointer = (long int)data->committed;
-			}
-		      else if (flags & FLAGS_SHORT)
-			{
-			  *(short int *)pointer = (short int)data->committed;
-			}
-		      else
-			{
-			  *(int *)pointer = (int)data->committed;
-			}
-		    }
-		  break; /* FORMAT_COUNT */
-
-		case FORMAT_PARAMETER:
-		  break; /* FORMAT_PARAMETER */
-
-#if defined(FORMAT_ERRNO)
-		case FORMAT_ERRNO:
-		  string = trio_error(parameters[i].data.errorNumber);
-		  if (string)
-		    {
-		      TrioWriteString(data,
-				      string,
-				      flags,
-				      width,
-				      precision);
-		    }
-		  else
-		    {
-		      data->OutStream(data, '#');
-		      TrioWriteNumber(data,
-				      (trio_uintmax_t)parameters[i].data.errorNumber,
-				      flags,
-				      width,
-				      precision,
-				      BASE_DECIMAL);
-		    }
-		  break; /* FORMAT_ERRNO */
-#endif /* defined(FORMAT_ERRNO) */
-
-#if defined(FORMAT_USER_DEFINED)
-		case FORMAT_USER_DEFINED:
-		  {
-		    trio_reference_t reference;
-		    trio_userdef_t *def = NULL;
-
-		    if (parameters[i].user_name[0] == NIL)
-		      {
-			/* Use handle */
-			if ((i > 0) ||
-			    (parameters[i - 1].type == FORMAT_PARAMETER))
-			  def = (trio_userdef_t *)parameters[i - 1].data.pointer;
-		      }
-		    else
-		      {
-			/* Look up namespace */
-			def = TrioFindNamespace(parameters[i].user_name, NULL);
-		      }
-		    if (def) {
-		      reference.data = data;
-		      reference.parameter = &parameters[i];
-		      def->callback(&reference);
-		    }
-		  }
-		  break;
-#endif /* defined(FORMAT_USER_DEFINED) */
-
-		default:
-		  break;
-		} /* switch parameter type */
-
-	      /* Prepare for next */
-	      index = parameters[i].indexAfterSpecifier;
-	      i++;
-	    }
-	}
-      else /* not identifier */
-	{
-	  data->OutStream(data, format[index++]);
-	}
-    }
-  return data->processed;
-}
-
-/*************************************************************************
- * TrioFormatRef
- */
-TRIO_PRIVATE int
-TrioFormatRef
-TRIO_ARGS4((reference, format, arglist, argarray),
-	   trio_reference_t *reference,
-	   TRIO_CONST char *format,
-	   TRIO_VA_LIST_PTR arglist,
-	   trio_pointer_t *argarray)
-{
-  int status;
-  trio_parameter_t parameters[MAX_PARAMETERS];
-
-  status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  status = TrioFormatProcess(reference->data, format, parameters);
-  if (reference->data->error != 0)
-    {
-      status = reference->data->error;
-    }
-  return status;
-}
-
-/*************************************************************************
- * TrioFormat
- */
-TRIO_PRIVATE int
-TrioFormat
-TRIO_ARGS6((destination, destinationSize, OutStream, format, arglist, argarray),
-	   trio_pointer_t destination,
-	   size_t destinationSize,
-	   void (*OutStream) TRIO_PROTO((trio_class_t *, int)),
-	   TRIO_CONST char *format,
-	   TRIO_VA_LIST_PTR arglist,
-	   trio_pointer_t *argarray)
-{
-  int status;
-  trio_class_t data;
-  trio_parameter_t parameters[MAX_PARAMETERS];
-
-  assert(VALID(OutStream));
-  assert(VALID(format));
-
-  memset(&data, 0, sizeof(data));
-  data.OutStream = OutStream;
-  data.location = destination;
-  data.max = destinationSize;
-  data.error = 0;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-
-  status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  status = TrioFormatProcess(&data, format, parameters);
-  if (data.error != 0)
-    {
-      status = data.error;
-    }
-  return status;
-}
-
-/*************************************************************************
- * TrioOutStreamFile
- */
-TRIO_PRIVATE void
-TrioOutStreamFile
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  FILE *file;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  file = (FILE *)self->location;
-  self->processed++;
-  if (fputc(output, file) == EOF)
-    {
-      self->error = TRIO_ERROR_RETURN(TRIO_EOF, 0);
-    }
-  else
-    {
-      self->committed++;
-    }
-}
-
-/*************************************************************************
- * TrioOutStreamFileDescriptor
- */
-TRIO_PRIVATE void
-TrioOutStreamFileDescriptor
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  int fd;
-  char ch;
-
-  assert(VALID(self));
-
-  fd = *((int *)self->location);
-  ch = (char)output;
-  self->processed++;
-  if (write(fd, &ch, sizeof(char)) == -1)
-    {
-      self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
-    }
-  else
-    {
-      self->committed++;
-    }
-}
-
-/*************************************************************************
- * TrioOutStreamCustom
- */
-TRIO_PRIVATE void
-TrioOutStreamCustom
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  int status;
-  trio_custom_t *data;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  data = (trio_custom_t *)self->location;
-  if (data->stream.out)
-    {
-      status = (data->stream.out)(data->closure, output);
-      if (status >= 0)
-	{
-	  self->committed++;
-	}
-      else
-	{
-	  if (self->error == 0)
-	    {
-	      self->error = TRIO_ERROR_RETURN(TRIO_ECUSTOM, -status);
-	    }
-	}
-    }
-  self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamString
- */
-TRIO_PRIVATE void
-TrioOutStreamString
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  char **buffer;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  buffer = (char **)self->location;
-  **buffer = (char)output;
-  (*buffer)++;
-  self->processed++;
-  self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringMax
- */
-TRIO_PRIVATE void
-TrioOutStreamStringMax
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  char **buffer;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  buffer = (char **)self->location;
-
-  if (self->processed < self->max)
-    {
-      **buffer = (char)output;
-      (*buffer)++;
-      self->committed++;
-    }
-  self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringDynamic
- */
-TRIO_PRIVATE void
-TrioOutStreamStringDynamic
-TRIO_ARGS2((self, output),
-	   trio_class_t *self,
-	   int output)
-{
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  if (self->error == 0)
-    {
-      trio_xstring_append_char((trio_string_t *)self->location,
-			       (char)output);
-      self->committed++;
-    }
-  /* The processed variable must always be increased */
-  self->processed++;
-}
-
-/*************************************************************************
- *
- * Formatted printing functions
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_printf.h"
-#endif
-/** @addtogroup Printf
-    @{
-*/
-
-/*************************************************************************
- * printf
- */
-
-/**
-   Print to standard output stream.
-
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_printf
-TRIO_VARGS2((format, va_alist),
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-/**
-   Print to standard output stream.
-
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vprintf
-TRIO_ARGS2((format, args),
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
-   Print to standard output stream.
-
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_printfv
-TRIO_ARGS2((format, args),
-	   TRIO_CONST char *format,
-	   trio_pointer_t * args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, NULL, args);
-}
-
-/*************************************************************************
- * fprintf
- */
-
-/**
-   Print to file.
-
-   @param file File pointer.
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_fprintf
-TRIO_VARGS3((file, format, va_alist),
-	    FILE *file,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-/**
-   Print to file.
-
-   @param file File pointer.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vfprintf
-TRIO_ARGS3((file, format, args),
-	   FILE *file,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-
-  return TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
-   Print to file.
-
-   @param file File pointer.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_fprintfv
-TRIO_ARGS3((file, format, args),
-	   FILE *file,
-	   TRIO_CONST char *format,
-	   trio_pointer_t * args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-
-  return TrioFormat(file, 0, TrioOutStreamFile, format, NULL, args);
-}
-
-/*************************************************************************
- * dprintf
- */
-
-/**
-   Print to file descriptor.
-
-   @param fd File descriptor.
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_dprintf
-TRIO_VARGS3((fd, format, va_alist),
-	    int fd,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-/**
-   Print to file descriptor.
-
-   @param fd File descriptor.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vdprintf
-TRIO_ARGS3((fd, format, args),
-	   int fd,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
-   Print to file descriptor.
-
-   @param fd File descriptor.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_dprintfv
-TRIO_ARGS3((fd, format, args),
-	   int fd,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  assert(VALID(format));
-
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, NULL, args);
-}
-
-/*************************************************************************
- * cprintf
- */
-TRIO_PUBLIC int
-trio_cprintf
-TRIO_VARGS4((stream, closure, format, va_alist),
-	    trio_outstream_t stream,
-	    trio_pointer_t closure,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  data.stream.out = stream;
-  data.closure = closure;
-  status = TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vcprintf
-TRIO_ARGS4((stream, closure, format, args),
-	   trio_outstream_t stream,
-	   trio_pointer_t closure,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  data.stream.out = stream;
-  data.closure = closure;
-  return TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_cprintfv
-TRIO_ARGS4((stream, closure, format, args),
-	   trio_outstream_t stream,
-	   trio_pointer_t closure,
-	   TRIO_CONST char *format,
-	   void **args)
-{
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  data.stream.out = stream;
-  data.closure = closure;
-  return TrioFormat(&data, 0, TrioOutStreamCustom, format, NULL, args);
-}
-
-/*************************************************************************
- * sprintf
- */
-
-/**
-   Print to string.
-
-   @param buffer Output string.
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_sprintf
-TRIO_VARGS3((buffer, format, va_alist),
-	    char *buffer,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
-  *buffer = NIL; /* Terminate with NIL character */
-  TRIO_VA_END(args);
-  return status;
-}
-
-/**
-   Print to string.
-
-   @param buffer Output string.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vsprintf
-TRIO_ARGS3((buffer, format, args),
-	   char *buffer,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
-  *buffer = NIL;
-  return status;
-}
-
-/**
-   Print to string.
-
-   @param buffer Output string.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_sprintfv
-TRIO_ARGS3((buffer, format, args),
-	   char *buffer,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, NULL, args);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintf
- */
-
-/**
-   Print at most @p max characters to string.
-
-   @param buffer Output string.
-   @param max Maximum number of characters to print.
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_snprintf
-TRIO_VARGS4((buffer, max, format, va_alist),
-	    char *buffer,
-	    size_t max,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-		      TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
-  if (max > 0)
-    *buffer = NIL;
-  TRIO_VA_END(args);
-  return status;
-}
-
-/**
-   Print at most @p max characters to string.
-
-   @param buffer Output string.
-   @param max Maximum number of characters to print.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vsnprintf
-TRIO_ARGS4((buffer, max, format, args),
-	   char *buffer,
-	   size_t max,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-		      TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
-  if (max > 0)
-    *buffer = NIL;
-  return status;
-}
-
-/**
-   Print at most @p max characters to string.
-
-   @param buffer Output string.
-   @param max Maximum number of characters to print.
-   @param format Formatting string.
-   @param args Arguments.
-   @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_snprintfv
-TRIO_ARGS4((buffer, max, format, args),
-	   char *buffer,
-	   size_t max,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  int status;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-		      TrioOutStreamStringMax, format, NULL, args);
-  if (max > 0)
-    *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * snprintfcat
- * Appends the new string to the buffer string overwriting the '\0'
- * character at the end of buffer.
- */
-TRIO_PUBLIC int
-trio_snprintfcat
-TRIO_VARGS4((buffer, max, format, va_alist),
-	    char *buffer,
-	    size_t max,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-  size_t buf_len;
-
-  TRIO_VA_START(args, format);
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = trio_length(buffer);
-  buffer = &buffer[buf_len];
-
-  status = TrioFormat(&buffer, max - 1 - buf_len,
-		      TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  *buffer = NIL;
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vsnprintfcat
-TRIO_ARGS4((buffer, max, format, args),
-	   char *buffer,
-	   size_t max,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  int status;
-  size_t buf_len;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  buf_len = trio_length(buffer);
-  buffer = &buffer[buf_len];
-  status = TrioFormat(&buffer, max - 1 - buf_len,
-		      TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
-  *buffer = NIL;
-  return status;
-}
-
-/*************************************************************************
- * trio_aprintf
- */
-
-/* Deprecated */
-TRIO_PUBLIC char *
-trio_aprintf
-TRIO_VARGS2((format, va_alist),
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  va_list args;
-  trio_string_t *info;
-  char *result = NULL;
-
-  assert(VALID(format));
-
-  info = trio_xstring_duplicate("");
-  if (info)
-    {
-      TRIO_VA_START(args, format);
-      (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-		       format, TRIO_VA_LIST_ADDR(args), NULL);
-      TRIO_VA_END(args);
-
-      trio_string_terminate(info);
-      result = trio_string_extract(info);
-      trio_string_destroy(info);
-    }
-  return result;
-}
-
-/* Deprecated */
-TRIO_PUBLIC char *
-trio_vaprintf
-TRIO_ARGS2((format, args),
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  trio_string_t *info;
-  char *result = NULL;
-
-  assert(VALID(format));
-
-  info = trio_xstring_duplicate("");
-  if (info)
-    {
-      (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-		       format, TRIO_VA_LIST_ADDR(args), NULL);
-      trio_string_terminate(info);
-      result = trio_string_extract(info);
-      trio_string_destroy(info);
-    }
-  return result;
-}
-
-TRIO_PUBLIC int
-trio_asprintf
-TRIO_VARGS3((result, format, va_alist),
-	    char **result,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  va_list args;
-  int status;
-  trio_string_t *info;
-
-  assert(VALID(format));
-
-  *result = NULL;
-
-  info = trio_xstring_duplicate("");
-  if (info == NULL)
-    {
-      status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  else
-    {
-      TRIO_VA_START(args, format);
-      status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-			  format, TRIO_VA_LIST_ADDR(args), NULL);
-      TRIO_VA_END(args);
-      if (status >= 0)
-	{
-	  trio_string_terminate(info);
-	  *result = trio_string_extract(info);
-	}
-      trio_string_destroy(info);
-    }
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vasprintf
-TRIO_ARGS3((result, format, args),
-	   char **result,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  int status;
-  trio_string_t *info;
-
-  assert(VALID(format));
-
-  *result = NULL;
-
-  info = trio_xstring_duplicate("");
-  if (info == NULL)
-    {
-      status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
-    }
-  else
-    {
-      status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-			  format, TRIO_VA_LIST_ADDR(args), NULL);
-      if (status >= 0)
-	{
-	  trio_string_terminate(info);
-	  *result = trio_string_extract(info);
-	}
-      trio_string_destroy(info);
-    }
-  return status;
-}
-
-/** @} End of Printf documentation module */
-
-/*************************************************************************
- *
- * CALLBACK
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_register.h"
-#endif
-/**
-   @addtogroup UserDefined
-   @{
-*/
-
-#if TRIO_EXTENSION
-
-/*************************************************************************
- * trio_register
- */
-
-/**
-   Register new user-defined specifier.
-
-   @param callback
-   @param name
-   @return Handle.
- */
-TRIO_PUBLIC trio_pointer_t
-trio_register
-TRIO_ARGS2((callback, name),
-	   trio_callback_t callback,
-	   TRIO_CONST char *name)
-{
-  trio_userdef_t *def;
-  trio_userdef_t *prev = NULL;
-
-  if (callback == NULL)
-    return NULL;
-
-  if (name)
-    {
-      /* Handle built-in namespaces */
-      if (name[0] == ':')
-	{
-	  if (trio_equal(name, ":enter"))
-	    {
-	      internalEnterCriticalRegion = callback;
-	    }
-	  else if (trio_equal(name, ":leave"))
-	    {
-	      internalLeaveCriticalRegion = callback;
-	    }
-	  return NULL;
-	}
-
-      /* Bail out if namespace is too long */
-      if (trio_length(name) >= MAX_USER_NAME)
-	return NULL;
-
-      /* Bail out if namespace already is registered */
-      def = TrioFindNamespace(name, &prev);
-      if (def)
-	return NULL;
-    }
-
-  def = (trio_userdef_t *)TRIO_MALLOC(sizeof(trio_userdef_t));
-  if (def)
-    {
-      if (internalEnterCriticalRegion)
-	(void)internalEnterCriticalRegion(NULL);
-
-      if (name)
-	{
-	  /* Link into internal list */
-	  if (prev == NULL)
-	    internalUserDef = def;
-	  else
-	    prev->next = def;
-	}
-      /* Initialize */
-      def->callback = callback;
-      def->name = (name == NULL)
-	? NULL
-	: trio_duplicate(name);
-      def->next = NULL;
-
-      if (internalLeaveCriticalRegion)
-	(void)internalLeaveCriticalRegion(NULL);
-    }
-  return (trio_pointer_t)def;
-}
-
-/**
-   Unregister an existing user-defined specifier.
-
-   @param handle
- */
-void
-trio_unregister
-TRIO_ARGS1((handle),
-	   trio_pointer_t handle)
-{
-  trio_userdef_t *self = (trio_userdef_t *)handle;
-  trio_userdef_t *def;
-  trio_userdef_t *prev = NULL;
-
-  assert(VALID(self));
-
-  if (self->name)
-    {
-      def = TrioFindNamespace(self->name, &prev);
-      if (def)
-	{
-	  if (internalEnterCriticalRegion)
-	    (void)internalEnterCriticalRegion(NULL);
-
-	  if (prev == NULL)
-	    internalUserDef = NULL;
-	  else
-	    prev->next = def->next;
-
-	  if (internalLeaveCriticalRegion)
-	    (void)internalLeaveCriticalRegion(NULL);
-	}
-      trio_destroy(self->name);
-    }
-  TRIO_FREE(self);
-}
-
-/*************************************************************************
- * trio_get_format [public]
- */
-TRIO_CONST char *
-trio_get_format
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-#if defined(FORMAT_USER_DEFINED)
-  assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
-#endif
-
-  return (((trio_reference_t *)ref)->parameter->user_data);
-}
-
-/*************************************************************************
- * trio_get_argument [public]
- */
-trio_pointer_t
-trio_get_argument
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-#if defined(FORMAT_USER_DEFINED)
-  assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
-#endif
-
-  return ((trio_reference_t *)ref)->parameter->data.pointer;
-}
-
-/*************************************************************************
- * trio_get_width / trio_set_width [public]
- */
-int
-trio_get_width
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return ((trio_reference_t *)ref)->parameter->width;
-}
-
-void
-trio_set_width
-TRIO_ARGS2((ref, width),
-	   trio_pointer_t ref,
-	   int width)
-{
-  ((trio_reference_t *)ref)->parameter->width = width;
-}
-
-/*************************************************************************
- * trio_get_precision / trio_set_precision [public]
- */
-int
-trio_get_precision
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->precision);
-}
-
-void
-trio_set_precision
-TRIO_ARGS2((ref, precision),
-	   trio_pointer_t ref,
-	   int precision)
-{
-  ((trio_reference_t *)ref)->parameter->precision = precision;
-}
-
-/*************************************************************************
- * trio_get_base / trio_set_base [public]
- */
-int
-trio_get_base
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->base);
-}
-
-void
-trio_set_base
-TRIO_ARGS2((ref, base),
-	   trio_pointer_t ref,
-	   int base)
-{
-  ((trio_reference_t *)ref)->parameter->base = base;
-}
-
-/*************************************************************************
- * trio_get_long / trio_set_long [public]
- */
-int
-trio_get_long
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONG)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_long
-TRIO_ARGS2((ref, is_long),
-	   trio_pointer_t ref,
-	   int is_long)
-{
-  if (is_long)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONG;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONG;
-}
-
-/*************************************************************************
- * trio_get_longlong / trio_set_longlong [public]
- */
-int
-trio_get_longlong
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUAD)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_longlong
-TRIO_ARGS2((ref, is_longlong),
-	   trio_pointer_t ref,
-	   int is_longlong)
-{
-  if (is_longlong)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUAD;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUAD;
-}
-
-/*************************************************************************
- * trio_get_longdouble / trio_set_longdouble [public]
- */
-int
-trio_get_longdouble
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONGDOUBLE)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_longdouble
-TRIO_ARGS2((ref, is_longdouble),
-	   trio_pointer_t ref,
-	   int is_longdouble)
-{
-  if (is_longdouble)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONGDOUBLE;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONGDOUBLE;
-}
-
-/*************************************************************************
- * trio_get_short / trio_set_short [public]
- */
-int
-trio_get_short
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORT)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_short
-TRIO_ARGS2((ref, is_short),
-	   trio_pointer_t ref,
-	   int is_short)
-{
-  if (is_short)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORT;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORT;
-}
-
-/*************************************************************************
- * trio_get_shortshort / trio_set_shortshort [public]
- */
-int
-trio_get_shortshort
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORTSHORT)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_shortshort
-TRIO_ARGS2((ref, is_shortshort),
-	   trio_pointer_t ref,
-	   int is_shortshort)
-{
-  if (is_shortshort)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORTSHORT;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORTSHORT;
-}
-
-/*************************************************************************
- * trio_get_alternative / trio_set_alternative [public]
- */
-int
-trio_get_alternative
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_ALTERNATIVE)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_alternative
-TRIO_ARGS2((ref, is_alternative),
-	   trio_pointer_t ref,
-	   int is_alternative)
-{
-  if (is_alternative)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_ALTERNATIVE;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_ALTERNATIVE;
-}
-
-/*************************************************************************
- * trio_get_alignment / trio_set_alignment [public]
- */
-int
-trio_get_alignment
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LEFTADJUST)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_alignment
-TRIO_ARGS2((ref, is_leftaligned),
-	   trio_pointer_t ref,
-	   int is_leftaligned)
-{
-  if (is_leftaligned)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LEFTADJUST;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LEFTADJUST;
-}
-
-/*************************************************************************
- * trio_get_spacing /trio_set_spacing [public]
- */
-int
-trio_get_spacing
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SPACE)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_spacing
-TRIO_ARGS2((ref, is_space),
-	   trio_pointer_t ref,
-	   int is_space)
-{
-  if (is_space)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SPACE;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SPACE;
-}
-
-/*************************************************************************
- * trio_get_sign / trio_set_sign [public]
- */
-int
-trio_get_sign
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHOWSIGN)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_sign
-TRIO_ARGS2((ref, is_sign),
-	   trio_pointer_t ref,
-	   int is_sign)
-{
-  if (is_sign)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHOWSIGN;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHOWSIGN;
-}
-
-/*************************************************************************
- * trio_get_padding / trio_set_padding [public]
- */
-int
-trio_get_padding
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_NILPADDING)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_padding
-TRIO_ARGS2((ref, is_padding),
-	   trio_pointer_t ref,
-	   int is_padding)
-{
-  if (is_padding)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_NILPADDING;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_NILPADDING;
-}
-
-/*************************************************************************
- * trio_get_quote / trio_set_quote [public]
- */
-int
-trio_get_quote
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUOTE)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_quote
-TRIO_ARGS2((ref, is_quote),
-	   trio_pointer_t ref,
-	   int is_quote)
-{
-  if (is_quote)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUOTE;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUOTE;
-}
-
-/*************************************************************************
- * trio_get_upper / trio_set_upper [public]
- */
-int
-trio_get_upper
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_UPPER)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_upper
-TRIO_ARGS2((ref, is_upper),
-	   trio_pointer_t ref,
-	   int is_upper)
-{
-  if (is_upper)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_UPPER;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_UPPER;
-}
-
-/*************************************************************************
- * trio_get_largest / trio_set_largest [public]
- */
-#if TRIO_C99
-int
-trio_get_largest
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_INTMAX_T)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_largest
-TRIO_ARGS2((ref, is_largest),
-	   trio_pointer_t ref,
-	   int is_largest)
-{
-  if (is_largest)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_INTMAX_T;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_INTMAX_T;
-}
-#endif
-
-/*************************************************************************
- * trio_get_ptrdiff / trio_set_ptrdiff [public]
- */
-int
-trio_get_ptrdiff
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_PTRDIFF_T)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_ptrdiff
-TRIO_ARGS2((ref, is_ptrdiff),
-	   trio_pointer_t ref,
-	   int is_ptrdiff)
-{
-  if (is_ptrdiff)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_PTRDIFF_T;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_PTRDIFF_T;
-}
-
-/*************************************************************************
- * trio_get_size / trio_set_size [public]
- */
-#if TRIO_C99
-int
-trio_get_size
-TRIO_ARGS1((ref),
-	   trio_pointer_t ref)
-{
-  return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SIZE_T)
-    ? TRUE
-    : FALSE;
-}
-
-void
-trio_set_size
-TRIO_ARGS2((ref, is_size),
-	   trio_pointer_t ref,
-	   int is_size)
-{
-  if (is_size)
-    ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SIZE_T;
-  else
-    ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SIZE_T;
-}
-#endif
-
-/*************************************************************************
- * trio_print_int [public]
- */
-void
-trio_print_int
-TRIO_ARGS2((ref, number),
-	   trio_pointer_t ref,
-	   int number)
-{
-  trio_reference_t *self = (trio_reference_t *)ref;
-
-  TrioWriteNumber(self->data,
-		  (trio_uintmax_t)number,
-		  self->parameter->flags,
-		  self->parameter->width,
-		  self->parameter->precision,
-		  self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_uint [public]
- */
-void
-trio_print_uint
-TRIO_ARGS2((ref, number),
-	   trio_pointer_t ref,
-	   unsigned int number)
-{
-  trio_reference_t *self = (trio_reference_t *)ref;
-
-  TrioWriteNumber(self->data,
-		  (trio_uintmax_t)number,
-		  self->parameter->flags | FLAGS_UNSIGNED,
-		  self->parameter->width,
-		  self->parameter->precision,
-		  self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_double [public]
- */
-void
-trio_print_double
-TRIO_ARGS2((ref, number),
-	   trio_pointer_t ref,
-	   double number)
-{
-  trio_reference_t *self = (trio_reference_t *)ref;
-
-  TrioWriteDouble(self->data,
-		  number,
-		  self->parameter->flags,
-		  self->parameter->width,
-		  self->parameter->precision,
-		  self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_string [public]
- */
-void
-trio_print_string
-TRIO_ARGS2((ref, string),
-	   trio_pointer_t ref,
-	   char *string)
-{
-  trio_reference_t *self = (trio_reference_t *)ref;
-
-  TrioWriteString(self->data,
-		  string,
-		  self->parameter->flags,
-		  self->parameter->width,
-		  self->parameter->precision);
-}
-
-/*************************************************************************
- * trio_print_ref [public]
- */
-int
-trio_print_ref
-TRIO_VARGS3((ref, format, va_alist),
-	    trio_pointer_t ref,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list arglist;
-
-  assert(VALID(format));
-
-  TRIO_VA_START(arglist, format);
-  status = TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
-  TRIO_VA_END(arglist);
-  return status;
-}
-
-/*************************************************************************
- * trio_vprint_ref [public]
- */
-int
-trio_vprint_ref
-TRIO_ARGS3((ref, format, arglist),
-	   trio_pointer_t ref,
-	   TRIO_CONST char *format,
-	   va_list arglist)
-{
-  assert(VALID(format));
-
-  return TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
-}
-
-/*************************************************************************
- * trio_printv_ref [public]
- */
-int
-trio_printv_ref
-TRIO_ARGS3((ref, format, argarray),
-	   trio_pointer_t ref,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *argarray)
-{
-  assert(VALID(format));
-
-  return TrioFormatRef((trio_reference_t *)ref, format, NULL, argarray);
-}
-
-#endif /* TRIO_EXTENSION */
-
-/*************************************************************************
- * trio_print_pointer [public]
- */
-void
-trio_print_pointer
-TRIO_ARGS2((ref, pointer),
-	   trio_pointer_t ref,
-	   trio_pointer_t pointer)
-{
-  trio_reference_t *self = (trio_reference_t *)ref;
-  trio_flags_t flags;
-  trio_uintmax_t number;
-
-  if (NULL == pointer)
-    {
-      TRIO_CONST char *string = internalNullString;
-      while (*string)
-	self->data->OutStream(self->data, *string++);
-    }
-  else
-    {
-      /*
-       * The subtraction of the null pointer is a workaround
-       * to avoid a compiler warning. The performance overhead
-       * is negligible (and likely to be removed by an
-       * optimizing compiler). The (char *) casting is done
-       * to please ANSI C++.
-       */
-      number = (trio_uintmax_t)((char *)pointer - (char *)0);
-      /* Shrink to size of pointer */
-      number &= (trio_uintmax_t)-1;
-      flags = self->parameter->flags;
-      flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE |
-	        FLAGS_NILPADDING);
-      TrioWriteNumber(self->data,
-		      number,
-		      flags,
-		      POINTER_WIDTH,
-		      NO_PRECISION,
-		      BASE_HEX);
-    }
-}
-
-/** @} End of UserDefined documentation module */
-
-/*************************************************************************
- *
- * LOCALES
- *
- ************************************************************************/
-
-/*************************************************************************
- * trio_locale_set_decimal_point
- *
- * Decimal point can only be one character. The input argument is a
- * string to enable multibyte characters. At most MB_LEN_MAX characters
- * will be used.
- */
-TRIO_PUBLIC void
-trio_locale_set_decimal_point
-TRIO_ARGS1((decimalPoint),
-	   char *decimalPoint)
-{
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-  internalDecimalPointLength = trio_length(decimalPoint);
-  if (internalDecimalPointLength == 1)
-    {
-      internalDecimalPoint = *decimalPoint;
-    }
-  else
-    {
-      internalDecimalPoint = NIL;
-      trio_copy_max(internalDecimalPointString,
-		    sizeof(internalDecimalPointString),
-		    decimalPoint);
-    }
-}
-
-/*************************************************************************
- * trio_locale_set_thousand_separator
- *
- * See trio_locale_set_decimal_point
- */
-TRIO_PUBLIC void
-trio_locale_set_thousand_separator
-TRIO_ARGS1((thousandSeparator),
-	   char *thousandSeparator)
-{
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-  trio_copy_max(internalThousandSeparator,
-		sizeof(internalThousandSeparator),
-		thousandSeparator);
-  internalThousandSeparatorLength = trio_length(internalThousandSeparator);
-}
-
-/*************************************************************************
- * trio_locale_set_grouping
- *
- * Array of bytes. Reversed order.
- *
- *  CHAR_MAX : No further grouping
- *  0        : Repeat last group for the remaining digits (not necessary
- *             as C strings are zero-terminated)
- *  n        : Set current group to n
- *
- * Same order as the grouping attribute in LC_NUMERIC.
- */
-TRIO_PUBLIC void
-trio_locale_set_grouping
-TRIO_ARGS1((grouping),
-	   char *grouping)
-{
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-  trio_copy_max(internalGrouping,
-		sizeof(internalGrouping),
-		grouping);
-}
-
-
-/*************************************************************************
- *
- * SCANNING
- *
- ************************************************************************/
-
-/*************************************************************************
- * TrioSkipWhitespaces
- */
-TRIO_PRIVATE int
-TrioSkipWhitespaces
-TRIO_ARGS1((self),
-	   trio_class_t *self)
-{
-  int ch;
-
-  ch = self->current;
-  while (isspace(ch))
-    {
-      self->InStream(self, &ch);
-    }
-  return ch;
-}
-
-/*************************************************************************
- * TrioGetCollation
- */
-#if TRIO_EXTENSION
-TRIO_PRIVATE void
-TrioGetCollation(TRIO_NOARGS)
-{
-  int i;
-  int j;
-  int k;
-  char first[2];
-  char second[2];
-
-  /* This is computationally expensive */
-  first[1] = NIL;
-  second[1] = NIL;
-  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-    {
-      k = 0;
-      first[0] = (char)i;
-      for (j = 0; j < MAX_CHARACTER_CLASS; j++)
-	{
-	  second[0] = (char)j;
-	  if (trio_equal_locale(first, second))
-	    internalCollationArray[i][k++] = (char)j;
-	}
-      internalCollationArray[i][k] = NIL;
-    }
-}
-#endif
-
-/*************************************************************************
- * TrioGetCharacterClass
- *
- * FIXME:
- *  multibyte
- */
-TRIO_PRIVATE int
-TrioGetCharacterClass
-TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
-	   TRIO_CONST char *format,
-	   int *indexPointer,
-	   trio_flags_t *flagsPointer,
-	   int *characterclass)
-{
-  int index = *indexPointer;
-  int i;
-  char ch;
-  char range_begin;
-  char range_end;
-
-  *flagsPointer &= ~FLAGS_EXCLUDE;
-
-  if (format[index] == QUALIFIER_CIRCUMFLEX)
-    {
-      *flagsPointer |= FLAGS_EXCLUDE;
-      index++;
-    }
-  /*
-   * If the ungroup character is at the beginning of the scanlist,
-   * it will be part of the class, and a second ungroup character
-   * must follow to end the group.
-   */
-  if (format[index] == SPECIFIER_UNGROUP)
-    {
-      characterclass[(int)SPECIFIER_UNGROUP]++;
-      index++;
-    }
-  /*
-   * Minus is used to specify ranges. To include minus in the class,
-   * it must be at the beginning of the list
-   */
-  if (format[index] == QUALIFIER_MINUS)
-    {
-      characterclass[(int)QUALIFIER_MINUS]++;
-      index++;
-    }
-  /* Collect characters */
-  for (ch = format[index];
-       (ch != SPECIFIER_UNGROUP) && (ch != NIL);
-       ch = format[++index])
-    {
-      switch (ch)
-	{
-	case QUALIFIER_MINUS: /* Scanlist ranges */
-
-	  /*
-	   * Both C99 and UNIX98 describes ranges as implementation-
-	   * defined.
-	   *
-	   * We support the following behaviour (although this may
-	   * change as we become wiser)
-	   * - only increasing ranges, ie. [a-b] but not [b-a]
-	   * - transitive ranges, ie. [a-b-c] == [a-c]
-	   * - trailing minus, ie. [a-] is interpreted as an 'a'
-	   *   and a '-'
-	   * - duplicates (although we can easily convert these
-	   *   into errors)
-	   */
-	  range_begin = format[index - 1];
-	  range_end = format[++index];
-	  if (range_end == SPECIFIER_UNGROUP)
-	    {
-	      /* Trailing minus is included */
-	      characterclass[(int)ch]++;
-	      ch = range_end;
-	      break; /* for */
-	    }
-	  if (range_end == NIL)
-	    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-	  if (range_begin > range_end)
-	    return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
-
-	  for (i = (int)range_begin; i <= (int)range_end; i++)
-	    characterclass[i]++;
-
-	  ch = range_end;
-	  break;
-
-#if TRIO_EXTENSION
-
-	case SPECIFIER_GROUP:
-
-	  switch (format[index + 1])
-	    {
-	    case QUALIFIER_DOT: /* Collating symbol */
-	      /*
-	       * FIXME: This will be easier to implement when multibyte
-	       * characters have been implemented. Until now, we ignore
-	       * this feature.
-	       */
-	      for (i = index + 2; ; i++)
-		{
-		  if (format[i] == NIL)
-		    /* Error in syntax */
-		    return -1;
-		  else if (format[i] == QUALIFIER_DOT)
-		    break; /* for */
-		}
-	      if (format[++i] != SPECIFIER_UNGROUP)
-		return -1;
-
-	      index = i;
-	      break;
-
-	    case QUALIFIER_EQUAL: /* Equivalence class expressions */
-	      {
-		unsigned int j;
-		unsigned int k;
-
-		if (internalCollationUnconverted)
-		  {
-		    /* Lazy evaluation of collation array */
-		    TrioGetCollation();
-		    internalCollationUnconverted = FALSE;
-		  }
-		for (i = index + 2; ; i++)
-		  {
-		    if (format[i] == NIL)
-		      /* Error in syntax */
-		      return -1;
-		    else if (format[i] == QUALIFIER_EQUAL)
-		      break; /* for */
-		    else
-		      {
-			/* Mark any equivalent character */
-			k = (unsigned int)format[i];
-			for (j = 0; internalCollationArray[k][j] != NIL; j++)
-			  characterclass[(int)internalCollationArray[k][j]]++;
-		      }
-		  }
-		if (format[++i] != SPECIFIER_UNGROUP)
-		  return -1;
-
-		index = i;
-	      }
-	      break;
-
-	    case QUALIFIER_COLON: /* Character class expressions */
-
-	      if (trio_equal_max(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
-				 &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isalnum(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_ALNUM) - 1;
-		}
-	      else if (trio_equal_max(CLASS_ALPHA, sizeof(CLASS_ALPHA) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isalpha(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_ALPHA) - 1;
-		}
-	      else if (trio_equal_max(CLASS_CNTRL, sizeof(CLASS_CNTRL) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (iscntrl(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_CNTRL) - 1;
-		}
-	      else if (trio_equal_max(CLASS_DIGIT, sizeof(CLASS_DIGIT) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isdigit(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_DIGIT) - 1;
-		}
-	      else if (trio_equal_max(CLASS_GRAPH, sizeof(CLASS_GRAPH) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isgraph(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_GRAPH) - 1;
-		}
-	      else if (trio_equal_max(CLASS_LOWER, sizeof(CLASS_LOWER) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (islower(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_LOWER) - 1;
-		}
-	      else if (trio_equal_max(CLASS_PRINT, sizeof(CLASS_PRINT) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isprint(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_PRINT) - 1;
-		}
-	      else if (trio_equal_max(CLASS_PUNCT, sizeof(CLASS_PUNCT) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (ispunct(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_PUNCT) - 1;
-		}
-	      else if (trio_equal_max(CLASS_SPACE, sizeof(CLASS_SPACE) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isspace(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_SPACE) - 1;
-		}
-	      else if (trio_equal_max(CLASS_UPPER, sizeof(CLASS_UPPER) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isupper(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_UPPER) - 1;
-		}
-	      else if (trio_equal_max(CLASS_XDIGIT, sizeof(CLASS_XDIGIT) - 1,
-				      &format[index]))
-		{
-		  for (i = 0; i < MAX_CHARACTER_CLASS; i++)
-		    if (isxdigit(i))
-		      characterclass[i]++;
-		  index += sizeof(CLASS_XDIGIT) - 1;
-		}
-	      else
-		{
-		  characterclass[(int)ch]++;
-		}
-	      break;
-
-	    default:
-	      characterclass[(int)ch]++;
-	      break;
-	    }
-	  break;
-
-#endif /* TRIO_EXTENSION */
-
-	default:
-	  characterclass[(int)ch]++;
-	  break;
-	}
-    }
-  return 0;
-}
-
-/*************************************************************************
- * TrioReadNumber
- *
- * We implement our own number conversion in preference of strtol and
- * strtoul, because we must handle 'long long' and thousand separators.
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadNumber
-TRIO_ARGS5((self, target, flags, width, base),
-	   trio_class_t *self,
-	   trio_uintmax_t *target,
-	   trio_flags_t flags,
-	   int width,
-	   int base)
-{
-  trio_uintmax_t number = 0;
-  int digit;
-  int count;
-  BOOLEAN_T isNegative = FALSE;
-  BOOLEAN_T gotNumber = FALSE;
-  int j;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-  assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
-  if (internalDigitsUnconverted)
-    {
-      /* Lazy evaluation of digits array */
-      memset(internalDigitArray, -1, sizeof(internalDigitArray));
-      for (j = 0; j < (int)sizeof(internalDigitsLower) - 1; j++)
-	{
-	  internalDigitArray[(int)internalDigitsLower[j]] = j;
-	  internalDigitArray[(int)internalDigitsUpper[j]] = j;
-	}
-      internalDigitsUnconverted = FALSE;
-    }
-
-  TrioSkipWhitespaces(self);
-
-  if (!(flags & FLAGS_UNSIGNED))
-    {
-      /* Leading sign */
-      if (self->current == '+')
-	{
-	  self->InStream(self, NULL);
-	}
-      else if (self->current == '-')
-	{
-	  self->InStream(self, NULL);
-	  isNegative = TRUE;
-	}
-    }
-
-  count = self->processed;
-
-  if (flags & FLAGS_ALTERNATIVE)
-    {
-      switch (base)
-	{
-	case NO_BASE:
-	case BASE_OCTAL:
-	case BASE_HEX:
-	case BASE_BINARY:
-	  if (self->current == '0')
-	    {
-	      self->InStream(self, NULL);
-	      if (self->current)
-		{
-		  if ((base == BASE_HEX) &&
-		      (trio_to_upper(self->current) == 'X'))
-		    {
-		      self->InStream(self, NULL);
-		    }
-		  else if ((base == BASE_BINARY) &&
-			   (trio_to_upper(self->current) == 'B'))
-		    {
-		      self->InStream(self, NULL);
-		    }
-		}
-	    }
-	  else
-	    return FALSE;
-	  break;
-	default:
-	  break;
-	}
-    }
-
-  while (((width == NO_WIDTH) || (self->processed - count < width)) &&
-	 (! ((self->current == EOF) || isspace(self->current))))
-    {
-      if (isascii(self->current))
-	{
-	  digit = internalDigitArray[self->current];
-	  /* Abort if digit is not allowed in the specified base */
-	  if ((digit == -1) || (digit >= base))
-	    break;
-	}
-      else if (flags & FLAGS_QUOTE)
-	{
-	  /* Compare with thousands separator */
-	  for (j = 0; internalThousandSeparator[j] && self->current; j++)
-	    {
-	      if (internalThousandSeparator[j] != self->current)
-		break;
-
-	      self->InStream(self, NULL);
-	    }
-	  if (internalThousandSeparator[j])
-	    break; /* Mismatch */
-	  else
-	    continue; /* Match */
-	}
-      else
-	break;
-
-      number *= base;
-      number += digit;
-      gotNumber = TRUE; /* we need at least one digit */
-
-      self->InStream(self, NULL);
-    }
-
-  /* Was anything read at all? */
-  if (!gotNumber)
-    return FALSE;
-
-  if (target)
-    *target = (isNegative) ? -((trio_intmax_t)number) : number;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadChar
- */
-TRIO_PRIVATE int
-TrioReadChar
-TRIO_ARGS4((self, target, flags, width),
-	   trio_class_t *self,
-	   char *target,
-	   trio_flags_t flags,
-	   int width)
-{
-  int i;
-  char ch;
-  trio_uintmax_t number;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      ch = (char)self->current;
-      self->InStream(self, NULL);
-      if ((flags & FLAGS_ALTERNATIVE) && (ch == CHAR_BACKSLASH))
-	{
-	  switch (self->current)
-	    {
-	    case '\\': ch = '\\'; break;
-	    case 'a': ch = '\007'; break;
-	    case 'b': ch = '\b'; break;
-	    case 'f': ch = '\f'; break;
-	    case 'n': ch = '\n'; break;
-	    case 'r': ch = '\r'; break;
-	    case 't': ch = '\t'; break;
-	    case 'v': ch = '\v'; break;
-	    default:
-	      if (isdigit(self->current))
-		{
-		  /* Read octal number */
-		  if (!TrioReadNumber(self, &number, 0, 3, BASE_OCTAL))
-		    return 0;
-		  ch = (char)number;
-		}
-	      else if (trio_to_upper(self->current) == 'X')
-		{
-		  /* Read hexadecimal number */
-		  self->InStream(self, NULL);
-		  if (!TrioReadNumber(self, &number, 0, 2, BASE_HEX))
-		    return 0;
-		  ch = (char)number;
-		}
-	      else
-		{
-		  ch = (char)self->current;
-		}
-	      break;
-	    }
-	}
-
-      if (target)
-	target[i] = ch;
-    }
-  return i + 1;
-}
-
-/*************************************************************************
- * TrioReadString
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadString
-TRIO_ARGS4((self, target, flags, width),
-	   trio_class_t *self,
-	   char *target,
-	   trio_flags_t flags,
-	   int width)
-{
-  int i;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       i++)
-    {
-      if (TrioReadChar(self, (target ? &target[i] : 0), flags, 1) == 0)
-	break; /* for */
-    }
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadWideChar
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE int
-TrioReadWideChar
-TRIO_ARGS4((self, target, flags, width),
-	   trio_class_t *self,
-	   trio_wchar_t *target,
-	   trio_flags_t flags,
-	   int width)
-{
-  int i;
-  int j;
-  int size;
-  int amount = 0;
-  trio_wchar_t wch;
-  char buffer[MB_LEN_MAX + 1];
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  for (i = 0;
-       (self->current != EOF) && (i < width);
-       i++)
-    {
-      if (isascii(self->current))
-	{
-	  if (TrioReadChar(self, buffer, flags, 1) == 0)
-	    return 0;
-	  buffer[1] = NIL;
-	}
-      else
-	{
-	  /*
-	   * Collect a multibyte character, by enlarging buffer until
-	   * it contains a fully legal multibyte character, or the
-	   * buffer is full.
-	   */
-	  j = 0;
-	  do
-	    {
-	      buffer[j++] = (char)self->current;
-	      buffer[j] = NIL;
-	      self->InStream(self, NULL);
-	    }
-	  while ((j < (int)sizeof(buffer)) && (mblen(buffer, (size_t)j) != j));
-	}
-      if (target)
-	{
-	  size = mbtowc(&wch, buffer, sizeof(buffer));
-	  if (size > 0)
-	    target[i] = wch;
-	}
-      amount += size;
-      self->InStream(self, NULL);
-    }
-  return amount;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadWideString
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE BOOLEAN_T
-TrioReadWideString
-TRIO_ARGS4((self, target, flags, width),
-	   trio_class_t *self,
-	   trio_wchar_t *target,
-	   trio_flags_t flags,
-	   int width)
-{
-  int i;
-  int size;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  TrioSkipWhitespaces(self);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  (void)mblen(NULL, 0);
-#endif
-
-  /*
-   * Continue until end of string is reached, a whitespace is encountered,
-   * or width is exceeded
-   */
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((self->current == EOF) || isspace(self->current)));
-       )
-    {
-      size = TrioReadWideChar(self, &target[i], flags, 1);
-      if (size == 0)
-	break; /* for */
-
-      i += size;
-    }
-  if (target)
-    target[i] = WCONST('\0');
-  return TRUE;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadGroup
- *
- * FIXME: characterclass does not work with multibyte characters
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadGroup
-TRIO_ARGS5((self, target, characterclass, flags, width),
-	   trio_class_t *self,
-	   char *target,
-	   int *characterclass,
-	   trio_flags_t flags,
-	   int width)
-{
-  int ch;
-  int i;
-
-  assert(VALID(self));
-  assert(VALID(self->InStream));
-
-  ch = self->current;
-  for (i = 0;
-       ((width == NO_WIDTH) || (i < width)) &&
-       (! ((ch == EOF) ||
-	   (((flags & FLAGS_EXCLUDE) != 0) ^ (characterclass[ch] == 0))));
-       i++)
-    {
-      if (target)
-	target[i] = (char)ch;
-      self->InStream(self, &ch);
-    }
-
-  if (target)
-    target[i] = NIL;
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadDouble
- *
- * FIXME:
- *  add long double
- *  handle base
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadDouble
-TRIO_ARGS4((self, target, flags, width),
-	   trio_class_t *self,
-	   trio_pointer_t target,
-	   trio_flags_t flags,
-	   int width)
-{
-  int ch;
-  char doubleString[512];
-  int index = 0;
-  int start;
-  int j;
-  BOOLEAN_T isHex = FALSE;
-
-  doubleString[0] = 0;
-
-  if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
-    width = sizeof(doubleString) - 1;
-
-  TrioSkipWhitespaces(self);
-
-  /*
-   * Read entire double number from stream. trio_to_double requires
-   * a string as input, but InStream can be anything, so we have to
-   * collect all characters.
-   */
-  ch = self->current;
-  if ((ch == '+') || (ch == '-'))
-    {
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      width--;
-    }
-
-  start = index;
-  switch (ch)
-    {
-    case 'n':
-    case 'N':
-      /* Not-a-number */
-      if (index != 0)
-	break;
-      /* FALLTHROUGH */
-    case 'i':
-    case 'I':
-      /* Infinity */
-      while (isalpha(ch) && (index - start < width))
-	{
-	  doubleString[index++] = (char)ch;
-	  self->InStream(self, &ch);
-	}
-      doubleString[index] = NIL;
-
-      /* Case insensitive string comparison */
-      if (trio_equal(&doubleString[start], INFINITE_UPPER) ||
-	  trio_equal(&doubleString[start], LONG_INFINITE_UPPER))
-	{
-	  if (flags & FLAGS_LONGDOUBLE)
-	    {
-	      if ((start == 1) && (doubleString[0] == '-'))
-		{
-		  *((trio_long_double_t *)target) = trio_ninf();
-		}
-	      else
-		{
-		  *((trio_long_double_t *)target) = trio_pinf();
-		}
-	    }
-	  else
-	    {
-	      if ((start == 1) && (doubleString[0] == '-'))
-		{
-		  *((double *)target) = trio_ninf();
-		}
-	      else
-		{
-		  *((double *)target) = trio_pinf();
-		}
-	    }
-	  return TRUE;
-	}
-      if (trio_equal(doubleString, NAN_UPPER))
-	{
-	  /* NaN must not have a preceeding + nor - */
-	  if (flags & FLAGS_LONGDOUBLE)
-	    {
-	      *((trio_long_double_t *)target) = trio_nan();
-	    }
-	  else
-	    {
-	      *((double *)target) = trio_nan();
-	    }
-	  return TRUE;
-	}
-      return FALSE;
-
-    case '0':
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      if (trio_to_upper(ch) == 'X')
-	{
-	  isHex = TRUE;
-	  doubleString[index++] = (char)ch;
-	  self->InStream(self, &ch);
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  while ((ch != EOF) && (index - start < width))
-    {
-      /* Integer part */
-      if (isHex ? isxdigit(ch) : isdigit(ch))
-	{
-	  doubleString[index++] = (char)ch;
-	  self->InStream(self, &ch);
-	}
-      else if (flags & FLAGS_QUOTE)
-	{
-	  /* Compare with thousands separator */
-	  for (j = 0; internalThousandSeparator[j] && self->current; j++)
-	    {
-	      if (internalThousandSeparator[j] != self->current)
-		break;
-
-	      self->InStream(self, &ch);
-	    }
-	  if (internalThousandSeparator[j])
-	    break; /* Mismatch */
-	  else
-	    continue; /* Match */
-	}
-      else
-	break; /* while */
-    }
-  if (ch == '.')
-    {
-      /* Decimal part */
-      doubleString[index++] = (char)ch;
-      self->InStream(self, &ch);
-      while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
-	     (index - start < width))
-	{
-	  doubleString[index++] = (char)ch;
-	  self->InStream(self, &ch);
-	}
-      if (isHex ? (trio_to_upper(ch) == 'P') : (trio_to_upper(ch) == 'E'))
-	{
-	  /* Exponent */
-	  doubleString[index++] = (char)ch;
-	  self->InStream(self, &ch);
-	  if ((ch == '+') || (ch == '-'))
-	    {
-	      doubleString[index++] = (char)ch;
-	      self->InStream(self, &ch);
-	    }
-	  while (isdigit(ch) && (index - start < width))
-	    {
-	      doubleString[index++] = (char)ch;
-	      self->InStream(self, &ch);
-	    }
-	}
-    }
-
-  if ((index == start) || (*doubleString == NIL))
-    return FALSE;
-
-  doubleString[index] = 0;
-
-  if (flags & FLAGS_LONGDOUBLE)
-    {
-      *((trio_long_double_t *)target) = trio_to_long_double(doubleString, NULL);
-    }
-  else
-    {
-      *((double *)target) = trio_to_double(doubleString, NULL);
-    }
-  return TRUE;
-}
-
-/*************************************************************************
- * TrioReadPointer
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadPointer
-TRIO_ARGS3((self, target, flags),
-	   trio_class_t *self,
-	   trio_pointer_t *target,
-	   trio_flags_t flags)
-{
-  trio_uintmax_t number;
-  char buffer[sizeof(internalNullString)];
-
-  flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
-
-  if (TrioReadNumber(self,
-		     &number,
-		     flags,
-		     POINTER_WIDTH,
-		     BASE_HEX))
-    {
-      /*
-       * The strange assignment of number is a workaround for a compiler
-       * warning
-       */
-      if (target)
-	*target = (char *)0 + number;
-      return TRUE;
-    }
-  else if (TrioReadString(self,
-			  (flags & FLAGS_IGNORE)
-			  ? NULL
-			  : buffer,
-			  0,
-			  sizeof(internalNullString) - 1))
-    {
-      if (trio_equal_case(buffer, internalNullString))
-	{
-	  if (target)
-	    *target = NULL;
-	  return TRUE;
-	}
-    }
-  return FALSE;
-}
-
-/*************************************************************************
- * TrioScanProcess
- */
-TRIO_PRIVATE int
-TrioScanProcess
-TRIO_ARGS3((data, format, parameters),
-	   trio_class_t *data,
-	   TRIO_CONST char *format,
-	   trio_parameter_t *parameters)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  int charlen;
-  int cnt;
-#endif
-  int assignment;
-  int ch;
-  int index; /* Index of format string */
-  int i; /* Index of current parameter */
-  trio_flags_t flags;
-  int width;
-  int base;
-  trio_pointer_t pointer;
-
-  assignment = 0;
-  i = 0;
-  index = 0;
-  data->InStream(data, &ch);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-  (void)mblen(NULL, 0);
-#endif
-
-  while (format[index])
-    {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
-      if (! isascii(format[index]))
-	{
-	  charlen = mblen(&format[index], MB_LEN_MAX);
-	  if (charlen != -1)
-	    {
-	      /* Compare multibyte characters in format string */
-	      for (cnt = 0; cnt < charlen - 1; cnt++)
-		{
-		  if (ch != format[index + cnt])
-		    {
-		      return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-		    }
-		  data->InStream(data, &ch);
-		}
-	      continue; /* while characters left in formatting string */
-	    }
-	}
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-
-      if ((EOF == ch) && (parameters[i].type != FORMAT_COUNT))
-	{
-	  return (assignment > 0) ? assignment : EOF;
-	}
-
-      if (CHAR_IDENTIFIER == format[index])
-	{
-	  if (CHAR_IDENTIFIER == format[index + 1])
-	    {
-	      /* Two % in format matches one % in input stream */
-	      if (CHAR_IDENTIFIER == ch)
-		{
-		  data->InStream(data, &ch);
-		  index += 2;
-		  continue; /* while format chars left */
-		}
-	      else
-		return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-	    }
-
-	  /* Skip the parameter entries */
-	  while (parameters[i].type == FORMAT_PARAMETER)
-	    i++;
-
-	  flags = parameters[i].flags;
-	  /* Find width */
-	  width = parameters[i].width;
-	  if (flags & FLAGS_WIDTH_PARAMETER)
-	    {
-	      /* Get width from parameter list */
-	      width = (int)parameters[width].data.number.as_signed;
-	    }
-	  /* Find base */
-	  base = parameters[i].base;
-	  if (flags & FLAGS_BASE_PARAMETER)
-	    {
-	      /* Get base from parameter list */
-	      base = (int)parameters[base].data.number.as_signed;
-	    }
-
-	  switch (parameters[i].type)
-	    {
-	    case FORMAT_INT:
-	      {
-		trio_uintmax_t number;
-
-		if (0 == base)
-		  base = BASE_DECIMAL;
-
-		if (!TrioReadNumber(data,
-				    &number,
-				    flags,
-				    width,
-				    base))
-		  return assignment;
-
-		if (!(flags & FLAGS_IGNORE))
-		  {
-		    assignment++;
-
-		    pointer = parameters[i].data.pointer;
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-		    if (flags & FLAGS_SIZE_T)
-		      *(size_t *)pointer = (size_t)number;
-		    else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-		    if (flags & FLAGS_PTRDIFF_T)
-		      *(ptrdiff_t *)pointer = (ptrdiff_t)number;
-		    else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-		    if (flags & FLAGS_INTMAX_T)
-		      *(trio_intmax_t *)pointer = (trio_intmax_t)number;
-		    else
-#endif
-		    if (flags & FLAGS_QUAD)
-		      *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)number;
-		    else if (flags & FLAGS_LONG)
-		      *(long int *)pointer = (long int)number;
-		    else if (flags & FLAGS_SHORT)
-		      *(short int *)pointer = (short int)number;
-		    else
-		      *(int *)pointer = (int)number;
-		  }
-	      }
-	      break; /* FORMAT_INT */
-
-	    case FORMAT_STRING:
-#if TRIO_WIDECHAR
-	      if (flags & FLAGS_WIDECHAR)
-		{
-		  if (!TrioReadWideString(data,
-					  (flags & FLAGS_IGNORE)
-					  ? NULL
-					  : parameters[i].data.wstring,
-					  flags,
-					  width))
-		    return assignment;
-		}
-	      else
-#endif
-		{
-		  if (!TrioReadString(data,
-				      (flags & FLAGS_IGNORE)
-				      ? NULL
-				      : parameters[i].data.string,
-				      flags,
-				      width))
-		    return assignment;
-		}
-	      if (!(flags & FLAGS_IGNORE))
-		assignment++;
-	      break; /* FORMAT_STRING */
-
-	    case FORMAT_DOUBLE:
-	      {
-		trio_pointer_t pointer;
-
-		if (flags & FLAGS_IGNORE)
-		  {
-		    pointer = NULL;
-		  }
-		else
-		  {
-		    pointer = (flags & FLAGS_LONGDOUBLE)
-		      ? (trio_pointer_t)parameters[i].data.longdoublePointer
-		      : (trio_pointer_t)parameters[i].data.doublePointer;
-		  }
-		if (!TrioReadDouble(data, pointer, flags, width))
-		  {
-		    return assignment;
-		  }
-		if (!(flags & FLAGS_IGNORE))
-		  {
-		    assignment++;
-		  }
-		break; /* FORMAT_DOUBLE */
-	      }
-	    case FORMAT_GROUP:
-	      {
-		int characterclass[MAX_CHARACTER_CLASS + 1];
-		int rc;
-
-		/* Skip over modifiers */
-		while (format[index] != SPECIFIER_GROUP)
-		  {
-		    index++;
-		  }
-		/* Skip over group specifier */
-		index++;
-
-		memset(characterclass, 0, sizeof(characterclass));
-		rc = TrioGetCharacterClass(format,
-					   &index,
-					   &flags,
-					   characterclass);
-		if (rc < 0)
-		  return rc;
-
-		if (!TrioReadGroup(data,
-				   (flags & FLAGS_IGNORE)
-				   ? NULL
-				   : parameters[i].data.string,
-				   characterclass,
-				   flags,
-				   parameters[i].width))
-		  return assignment;
-		if (!(flags & FLAGS_IGNORE))
-		  assignment++;
-	      }
-	      break; /* FORMAT_GROUP */
-
-	    case FORMAT_COUNT:
-	      pointer = parameters[i].data.pointer;
-	      if (NULL != pointer)
-		{
-		  int count = data->committed;
-		  if (ch != EOF)
-		    count--; /* a character is read, but is not consumed yet */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
-		  if (flags & FLAGS_SIZE_T)
-		    *(size_t *)pointer = (size_t)count;
-		  else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
-		  if (flags & FLAGS_PTRDIFF_T)
-		    *(ptrdiff_t *)pointer = (ptrdiff_t)count;
-		  else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
-		  if (flags & FLAGS_INTMAX_T)
-		    *(trio_intmax_t *)pointer = (trio_intmax_t)count;
-		  else
-#endif
-		  if (flags & FLAGS_QUAD)
-		    {
-		      *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)count;
-		    }
-		  else if (flags & FLAGS_LONG)
-		    {
-		      *(long int *)pointer = (long int)count;
-		    }
-		  else if (flags & FLAGS_SHORT)
-		    {
-		      *(short int *)pointer = (short int)count;
-		    }
-		  else
-		    {
-		      *(int *)pointer = (int)count;
-		    }
-		}
-	      break; /* FORMAT_COUNT */
-
-	    case FORMAT_CHAR:
-#if TRIO_WIDECHAR
-	      if (flags & FLAGS_WIDECHAR)
-		{
-		  if (TrioReadWideChar(data,
-				       (flags & FLAGS_IGNORE)
-				       ? NULL
-				       : parameters[i].data.wstring,
-				       flags,
-				       (width == NO_WIDTH) ? 1 : width) == 0)
-		    return assignment;
-		}
-	      else
-#endif
-		{
-		  if (TrioReadChar(data,
-				   (flags & FLAGS_IGNORE)
-				   ? NULL
-				   : parameters[i].data.string,
-				   flags,
-				   (width == NO_WIDTH) ? 1 : width) == 0)
-		    return assignment;
-		}
-	      if (!(flags & FLAGS_IGNORE))
-		assignment++;
-	      break; /* FORMAT_CHAR */
-
-	    case FORMAT_POINTER:
-	      if (!TrioReadPointer(data,
-				   (flags & FLAGS_IGNORE)
-				   ? NULL
-				   : (trio_pointer_t *)parameters[i].data.pointer,
-				   flags))
-		return assignment;
-	      if (!(flags & FLAGS_IGNORE))
-		assignment++;
-	      break; /* FORMAT_POINTER */
-
-	    case FORMAT_PARAMETER:
-	      break; /* FORMAT_PARAMETER */
-
-	    default:
-	      return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-	    }
-	  ch = data->current;
-	  index = parameters[i].indexAfterSpecifier;
-	  i++;
-	}
-      else /* Not an % identifier */
-	{
-	  if (isspace((int)format[index]))
-	    {
-	      /* Whitespaces may match any amount of whitespaces */
-	      ch = TrioSkipWhitespaces(data);
-	    }
-	  else if (ch == format[index])
-	    {
-	      data->InStream(data, &ch);
-	    }
-	  else
-	    return assignment;
-
-	  index++;
-	}
-    }
-  return assignment;
-}
-
-/*************************************************************************
- * TrioScan
- */
-TRIO_PRIVATE int
-TrioScan
-TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
-	   trio_pointer_t source,
-	   size_t sourceSize,
-	   void (*InStream) TRIO_PROTO((trio_class_t *, int *)),
-	   TRIO_CONST char *format,
-	   TRIO_VA_LIST_PTR arglist,
-	   trio_pointer_t *argarray)
-{
-  int status;
-  trio_parameter_t parameters[MAX_PARAMETERS];
-  trio_class_t data;
-
-  assert(VALID(InStream));
-  assert(VALID(format));
-
-  memset(&data, 0, sizeof(data));
-  data.InStream = InStream;
-  data.location = (trio_pointer_t)source;
-  data.max = sourceSize;
-  data.error = 0;
-
-#if defined(USE_LOCALE)
-  if (NULL == internalLocaleValues)
-    {
-      TrioSetLocale();
-    }
-#endif
-
-  status = TrioParse(TYPE_SCAN, format, parameters, arglist, argarray);
-  if (status < 0)
-    return status;
-
-  status = TrioScanProcess(&data, format, parameters);
-  if (data.error != 0)
-    {
-      status = data.error;
-    }
-  return status;
-}
-
-/*************************************************************************
- * TrioInStreamFile
- */
-TRIO_PRIVATE void
-TrioInStreamFile
-TRIO_ARGS2((self, intPointer),
-	   trio_class_t *self,
-	   int *intPointer)
-{
-  FILE *file;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-  assert(VALID(file));
-
-  file = (FILE *)self->location;
-
-  self->current = fgetc(file);
-  if (self->current == EOF)
-    {
-      self->error = (ferror(file))
-	? TRIO_ERROR_RETURN(TRIO_ERRNO, 0)
-	: TRIO_ERROR_RETURN(TRIO_EOF, 0);
-    }
-  else
-    {
-      self->processed++;
-      self->committed++;
-    }
-
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamFileDescriptor
- */
-TRIO_PRIVATE void
-TrioInStreamFileDescriptor
-TRIO_ARGS2((self, intPointer),
-	   trio_class_t *self,
-	   int *intPointer)
-{
-  int fd;
-  int size;
-  unsigned char input;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  fd = *((int *)self->location);
-
-  size = read(fd, &input, sizeof(char));
-  if (size == -1)
-    {
-      self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
-      self->current = EOF;
-    }
-  else
-    {
-      self->current = (size == 0) ? EOF : input;
-    }
-  if (self->current != EOF)
-    {
-      self->committed++;
-      self->processed++;
-    }
-
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamCustom
- */
-TRIO_PRIVATE void
-TrioInStreamCustom
-TRIO_ARGS2((self, intPointer),
-	   trio_class_t *self,
-	   int *intPointer)
-{
-  trio_custom_t *data;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  data = (trio_custom_t *)self->location;
-
-  self->current = (data->stream.in == NULL)
-    ? NIL
-    : (data->stream.in)(data->closure);
-
-  if (self->current == NIL)
-    {
-      self->current = EOF;
-    }
-  else
-    {
-      self->processed++;
-      self->committed++;
-    }
-
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- * TrioInStreamString
- */
-TRIO_PRIVATE void
-TrioInStreamString
-TRIO_ARGS2((self, intPointer),
-	   trio_class_t *self,
-	   int *intPointer)
-{
-  unsigned char **buffer;
-
-  assert(VALID(self));
-  assert(VALID(self->location));
-
-  buffer = (unsigned char **)self->location;
-  self->current = (*buffer)[0];
-  if (self->current == NIL)
-    {
-      self->current = EOF;
-    }
-  else
-    {
-      (*buffer)++;
-      self->processed++;
-      self->committed++;
-    }
-
-  if (VALID(intPointer))
-    {
-      *intPointer = self->current;
-    }
-}
-
-/*************************************************************************
- *
- * Formatted scanning functions
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_scanf.h"
-#endif
-/** @addtogroup Scanf
-    @{
-*/
-
-/*************************************************************************
- * scanf
- */
-
-/**
-   Scan characters from standard input stream.
-
-   @param format Formatting string.
-   @param ... Arguments.
-   @return Number of scanned characters.
- */
-TRIO_PUBLIC int
-trio_scanf
-TRIO_VARGS2((format, va_alist),
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioScan((trio_pointer_t)stdin, 0,
-		    TrioInStreamFile,
-		    format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vscanf
-TRIO_ARGS2((format, args),
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)stdin, 0,
-		  TrioInStreamFile,
-		  format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_scanfv
-TRIO_ARGS2((format, args),
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)stdin, 0,
-		  TrioInStreamFile,
-		  format, NULL, args);
-}
-
-/*************************************************************************
- * fscanf
- */
-TRIO_PUBLIC int
-trio_fscanf
-TRIO_VARGS3((file, format, va_alist),
-	    FILE *file,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(file));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioScan((trio_pointer_t)file, 0,
-		    TrioInStreamFile,
-		    format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vfscanf
-TRIO_ARGS3((file, format, args),
-	   FILE *file,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)file, 0,
-		  TrioInStreamFile,
-		  format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_fscanfv
-TRIO_ARGS3((file, format, args),
-	   FILE *file,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  assert(VALID(file));
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)file, 0,
-		  TrioInStreamFile,
-		  format, NULL, args);
-}
-
-/*************************************************************************
- * dscanf
- */
-TRIO_PUBLIC int
-trio_dscanf
-TRIO_VARGS3((fd, format, va_alist),
-	    int fd,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioScan((trio_pointer_t)&fd, 0,
-		    TrioInStreamFileDescriptor,
-		    format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vdscanf
-TRIO_ARGS3((fd, format, args),
-	   int fd,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)&fd, 0,
-		  TrioInStreamFileDescriptor,
-		  format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_dscanfv
-TRIO_ARGS3((fd, format, args),
-	   int fd,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)&fd, 0,
-		  TrioInStreamFileDescriptor,
-		  format, NULL, args);
-}
-
-/*************************************************************************
- * cscanf
- */
-TRIO_PUBLIC int
-trio_cscanf
-TRIO_VARGS4((stream, closure, format, va_alist),
-	    trio_instream_t stream,
-	    trio_pointer_t closure,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  data.stream.in = stream;
-  data.closure = closure;
-  status = TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vcscanf
-TRIO_ARGS4((stream, closure, format, args),
-	   trio_instream_t stream,
-	   trio_pointer_t closure,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  data.stream.in = stream;
-  data.closure = closure;
-  return TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_cscanfv
-TRIO_ARGS4((stream, closure, format, args),
-	   trio_instream_t stream,
-	   trio_pointer_t closure,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  trio_custom_t data;
-
-  assert(VALID(stream));
-  assert(VALID(format));
-
-  data.stream.in = stream;
-  data.closure = closure;
-  return TrioScan(&data, 0, TrioInStreamCustom, format, NULL, args);
-}
-
-/*************************************************************************
- * sscanf
- */
-TRIO_PUBLIC int
-trio_sscanf
-TRIO_VARGS3((buffer, format, va_alist),
-	    TRIO_CONST char *buffer,
-	    TRIO_CONST char *format,
-	    TRIO_VA_DECL)
-{
-  int status;
-  va_list args;
-
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  TRIO_VA_START(args, format);
-  status = TrioScan((trio_pointer_t)&buffer, 0,
-		    TrioInStreamString,
-		    format, TRIO_VA_LIST_ADDR(args), NULL);
-  TRIO_VA_END(args);
-  return status;
-}
-
-TRIO_PUBLIC int
-trio_vsscanf
-TRIO_ARGS3((buffer, format, args),
-	   TRIO_CONST char *buffer,
-	   TRIO_CONST char *format,
-	   va_list args)
-{
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)&buffer, 0,
-		  TrioInStreamString,
-		  format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_sscanfv
-TRIO_ARGS3((buffer, format, args),
-	   TRIO_CONST char *buffer,
-	   TRIO_CONST char *format,
-	   trio_pointer_t *args)
-{
-  assert(VALID(buffer));
-  assert(VALID(format));
-
-  return TrioScan((trio_pointer_t)&buffer, 0,
-		  TrioInStreamString,
-		  format, NULL, args);
-}
-
-/** @} End of Scanf documentation module */
-
-/*************************************************************************
- * trio_strerror
- */
-TRIO_PUBLIC TRIO_CONST char *
-trio_strerror
-TRIO_ARGS1((errorcode),
-	   int errorcode)
-{
-  /* Textual versions of the error codes */
-  switch (TRIO_ERROR_CODE(errorcode))
-    {
-    case TRIO_EOF:
-      return "End of file";
-    case TRIO_EINVAL:
-      return "Invalid argument";
-    case TRIO_ETOOMANY:
-      return "Too many arguments";
-    case TRIO_EDBLREF:
-      return "Double reference";
-    case TRIO_EGAP:
-      return "Reference gap";
-    case TRIO_ENOMEM:
-      return "Out of memory";
-    case TRIO_ERANGE:
-      return "Invalid range";
-    case TRIO_ECUSTOM:
-      return "Custom error";
-    default:
-      return "Unknown";
-    }
-}
diff --git a/src/third_party/libxml/src/trio.h b/src/third_party/libxml/src/trio.h
deleted file mode 100644
index 99d2127..0000000
--- a/src/third_party/libxml/src/trio.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * http://ctrio.sourceforge.net/
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIO_H
-#define TRIO_TRIO_H
-
-#if !defined(WITHOUT_TRIO)
-
-/*
- * Use autoconf defines if present. Packages using trio must define
- * HAVE_CONFIG_H as a compiler option themselves.
- */
-#if defined(TRIO_HAVE_CONFIG_H)
-# include "config.h"
-#endif
-
-#include "triodef.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Error codes.
- *
- * Remember to add a textual description to trio_strerror.
- */
-enum {
-  TRIO_EOF      = 1,
-  TRIO_EINVAL   = 2,
-  TRIO_ETOOMANY = 3,
-  TRIO_EDBLREF  = 4,
-  TRIO_EGAP     = 5,
-  TRIO_ENOMEM   = 6,
-  TRIO_ERANGE   = 7,
-  TRIO_ERRNO    = 8,
-  TRIO_ECUSTOM  = 9
-};
-
-/* Error macros */
-#define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
-#define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
-#define TRIO_ERROR_NAME(x) trio_strerror(x)
-
-typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int));
-typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t));
-
-TRIO_CONST char *trio_strerror TRIO_PROTO((int));
-
-/*************************************************************************
- * Print Functions
- */
-
-int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...));
-int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args));
-
-int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
-int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
-int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
-
-int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
-int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
-int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
-
-int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
-			     TRIO_CONST char *format, ...));
-int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
-			      TRIO_CONST char *format, va_list args));
-int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
-			      TRIO_CONST char *format, void **args));
-
-int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...));
-int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args));
-int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args));
-
-int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
-int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
-		   va_list args));
-int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
-		   void **args));
-
-int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
-int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
-                      va_list args));
-
-char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...));
-char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-
-int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...));
-int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args));
-
-/*************************************************************************
- * Scan Functions
- */
-int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...));
-int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args));
-
-int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
-int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
-int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
-
-int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
-int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
-int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
-
-int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
-			    TRIO_CONST char *format, ...));
-int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
-			     TRIO_CONST char *format, va_list args));
-int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
-			     TRIO_CONST char *format, void **args));
-
-int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...));
-int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args));
-int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args));
-
-/*************************************************************************
- * Locale Functions
- */
-void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint));
-void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator));
-void trio_locale_set_grouping TRIO_PROTO((char *grouping));
-
-/*************************************************************************
- * Renaming
- */
-#ifdef TRIO_REPLACE_STDIO
-/* Replace the <stdio.h> functions */
-#ifndef HAVE_PRINTF
-# undef printf
-# define printf trio_printf
-#endif
-#ifndef HAVE_VPRINTF
-# undef vprintf
-# define vprintf trio_vprintf
-#endif
-#ifndef HAVE_FPRINTF
-# undef fprintf
-# define fprintf trio_fprintf
-#endif
-#ifndef HAVE_VFPRINTF
-# undef vfprintf
-# define vfprintf trio_vfprintf
-#endif
-#ifndef HAVE_SPRINTF
-# undef sprintf
-# define sprintf trio_sprintf
-#endif
-#ifndef HAVE_VSPRINTF
-# undef vsprintf
-# define vsprintf trio_vsprintf
-#endif
-#ifndef HAVE_SNPRINTF
-# undef snprintf
-# define snprintf trio_snprintf
-#endif
-#ifndef HAVE_VSNPRINTF
-# undef vsnprintf
-# define vsnprintf trio_vsnprintf
-#endif
-#ifndef HAVE_SCANF
-# undef scanf
-# define scanf trio_scanf
-#endif
-#ifndef HAVE_VSCANF
-# undef vscanf
-# define vscanf trio_vscanf
-#endif
-#ifndef HAVE_FSCANF
-# undef fscanf
-# define fscanf trio_fscanf
-#endif
-#ifndef HAVE_VFSCANF
-# undef vfscanf
-# define vfscanf trio_vfscanf
-#endif
-#ifndef HAVE_SSCANF
-# undef sscanf
-# define sscanf trio_sscanf
-#endif
-#ifndef HAVE_VSSCANF
-# undef vsscanf
-# define vsscanf trio_vsscanf
-#endif
-/* These aren't stdio functions, but we make them look similar */
-#define dprintf trio_dprintf
-#define vdprintf trio_vdprintf
-#define aprintf trio_aprintf
-#define vaprintf trio_vaprintf
-#define asprintf trio_asprintf
-#define vasprintf trio_vasprintf
-#define dscanf trio_dscanf
-#define vdscanf trio_vdscanf
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* WITHOUT_TRIO */
-
-#endif /* TRIO_TRIO_H */
diff --git a/src/third_party/libxml/src/triop.h b/src/third_party/libxml/src/triop.h
deleted file mode 100644
index 8462c56..0000000
--- a/src/third_party/libxml/src/triop.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************
- *
- * Private functions, types, etc. used for callback functions.
- *
- * The ref pointer is an opaque type and should remain as such.
- * Private data must only be accessible through the getter and
- * setter functions.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOP_H
-#define TRIO_TRIOP_H
-
-#include "triodef.h"
-
-#include <stdlib.h>
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TRIO_C99
-# define TRIO_C99 1
-#endif
-#ifndef TRIO_BSD
-# define TRIO_BSD 1
-#endif
-#ifndef TRIO_GNU
-# define TRIO_GNU 1
-#endif
-#ifndef TRIO_MISC
-# define TRIO_MISC 1
-#endif
-#ifndef TRIO_UNIX98
-# define TRIO_UNIX98 1
-#endif
-#ifndef TRIO_MICROSOFT
-# define TRIO_MICROSOFT 1
-#endif
-#ifndef TRIO_EXTENSION
-# define TRIO_EXTENSION 1
-#endif
-#ifndef TRIO_WIDECHAR /* Does not work yet. Do not enable */
-# define TRIO_WIDECHAR 0
-#endif
-#ifndef TRIO_ERRORS
-# define TRIO_ERRORS 1
-#endif
-
-#ifndef TRIO_MALLOC
-# define TRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef TRIO_REALLOC
-# define TRIO_REALLOC(x,n) realloc((x),(n))
-#endif
-#ifndef TRIO_FREE
-# define TRIO_FREE(x) free(x)
-#endif
-
-
-/*************************************************************************
- * User-defined specifiers
- */
-
-typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t));
-
-trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name));
-void trio_unregister TRIO_PROTO((trio_pointer_t handle));
-
-TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref));
-trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref));
-
-/* Modifiers */
-int  trio_get_width TRIO_PROTO((trio_pointer_t ref));
-void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width));
-int  trio_get_precision TRIO_PROTO((trio_pointer_t ref));
-void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision));
-int  trio_get_base TRIO_PROTO((trio_pointer_t ref));
-void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base));
-int  trio_get_padding TRIO_PROTO((trio_pointer_t ref));
-void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding));
-int  trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */
-void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort));
-int  trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */
-void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short));
-int  trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */
-void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long));
-int  trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */
-void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong));
-int  trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */
-void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble));
-int  trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */
-void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative));
-int  trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */
-void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned));
-int  trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /*  TRIO_PROTO((space) */
-void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space));
-int  trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */
-void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign));
-int  trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */
-void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote));
-int  trio_get_upper TRIO_PROTO((trio_pointer_t ref));
-void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper));
-#if TRIO_C99
-int  trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */
-void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest));
-int  trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */
-void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff));
-int  trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */
-void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size));
-#endif
-
-/* Printing */
-int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...));
-int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args));
-int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args));
-
-void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number));
-void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number));
-/*  void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */
-/*  void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */
-void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number));
-void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string));
-void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer));
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIOP_H */
diff --git a/src/third_party/libxml/src/triostr.c b/src/third_party/libxml/src/triostr.c
deleted file mode 100644
index 123bbeb..0000000
--- a/src/third_party/libxml/src/triostr.c
+++ /dev/null
@@ -1,2112 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-/*************************************************************************
- * Include files
- */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "triodef.h"
-#include "triostr.h"
-
-/*************************************************************************
- * Definitions
- */
-
-#if !defined(TRIO_STRING_PUBLIC)
-# define TRIO_STRING_PUBLIC TRIO_PUBLIC
-#endif
-#if !defined(TRIO_STRING_PRIVATE)
-# define TRIO_STRING_PRIVATE TRIO_PRIVATE
-#endif
-
-#if !defined(NULL)
-# define NULL 0
-#endif
-#if !defined(NIL)
-# define NIL ((char)0)
-#endif
-#if !defined(FALSE)
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#if !defined(BOOLEAN_T)
-# define BOOLEAN_T int
-#endif
-
-#ifdef __VMS
-# define USE_STRTOD
-#elif defined(TRIO_COMPILER_SUPPORTS_C99)
-# define USE_STRTOD
-# define USE_STRTOF
-#elif defined(TRIO_COMPILER_MSVC)
-# define USE_STRTOD
-#endif
-
-#if defined(TRIO_PLATFORM_UNIX)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# if defined(TRIO_PLATFORM_SUNOS)
-#  define USE_SYS_ERRLIST
-# else
-#  define USE_STRERROR
-# endif
-# if defined(TRIO_PLATFORM_QNX)
-#  define strcasecmp(x,y) stricmp(x,y)
-#  define strncasecmp(x,y,n) strnicmp(x,y,n)
-# endif
-#elif defined(TRIO_PLATFORM_WIN32)
-# define USE_STRCASECMP
-# if defined(_WIN32_WCE)
-#  define strcasecmp(x,y) _stricmp(x,y)
-# else
-#  define strcasecmp(x,y) strcmpi(x,y)
-# endif
-#elif defined(TRIO_PLATFORM_OS400)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# include <strings.h>
-#endif
-
-#if !(defined(TRIO_PLATFORM_SUNOS))
-# define USE_TOLOWER
-# define USE_TOUPPER
-#endif
-
-/*************************************************************************
- * Structures
- */
-
-struct _trio_string_t
-{
-  char *content;
-  size_t length;
-  size_t allocated;
-};
-
-/*************************************************************************
- * Constants
- */
-
-#if !defined(TRIO_MINIMAL)
-static TRIO_CONST char rcsid[] = "@(#)$Id$";
-#endif
-
-/*************************************************************************
- * Static String Functions
- */
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_static.h"
-#endif
-/** @addtogroup StaticStrings
-    @{
-*/
-
-/**
-   Create new string.
-
-   @param size Size of new string.
-   @return Pointer to string, or NULL if allocation failed.
-*/
-TRIO_STRING_PUBLIC char *
-trio_create
-TRIO_ARGS1((size),
-	   size_t size)
-{
-  return (char *)TRIO_MALLOC(size);
-}
-
-
-/**
-   Destroy string.
-
-   @param string String to be freed.
-*/
-TRIO_STRING_PUBLIC void
-trio_destroy
-TRIO_ARGS1((string),
-	   char *string)
-{
-  if (string)
-    {
-      TRIO_FREE(string);
-    }
-}
-
-
-/**
-   Count the number of characters in a string.
-
-   @param string String to measure.
-   @return Number of characters in @string.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_length
-TRIO_ARGS1((string),
-	   TRIO_CONST char *string)
-{
-  return strlen(string);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Append @p source at the end of @p target.
-
-   @param target Target string.
-   @param source Source string.
-   @return Boolean value indicating success or failure.
-
-   @pre @p target must point to a memory chunk with sufficient room to
-   contain the @p target string and @p source string.
-   @pre No boundary checking is performed, so insufficient memory will
-   result in a buffer overrun.
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_append
-TRIO_ARGS2((target, source),
-	   char *target,
-	   TRIO_CONST char *source)
-{
-  assert(target);
-  assert(source);
-
-  return (strcat(target, source) != NULL);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Append at most @p max characters from @p source to @p target.
-
-   @param target Target string.
-   @param max Maximum number of characters to append.
-   @param source Source string.
-   @return Boolean value indicating success or failure.
-
-   @pre @p target must point to a memory chuck with sufficient room to
-   contain the @p target string and the @p source string (at most @p max
-   characters).
-   @pre No boundary checking is performed, so insufficient memory will
-   result in a buffer overrun.
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_append_max
-TRIO_ARGS3((target, max, source),
-	   char *target,
-	   size_t max,
-	   TRIO_CONST char *source)
-{
-  size_t length;
-
-  assert(target);
-  assert(source);
-
-  length = trio_length(target);
-
-  if (max > length)
-    {
-      strncat(target, source, max - length - 1);
-    }
-  return TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Determine if a string contains a substring.
-
-   @param string String to be searched.
-   @param substring String to be found.
-   @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_contains
-TRIO_ARGS2((string, substring),
-	   TRIO_CONST char *string,
-	   TRIO_CONST char *substring)
-{
-  assert(string);
-  assert(substring);
-
-  return (0 != strstr(string, substring));
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Copy @p source to @p target.
-
-   @param target Target string.
-   @param source Source string.
-   @return Boolean value indicating success or failure.
-
-   @pre @p target must point to a memory chunk with sufficient room to
-   contain the @p source string.
-   @pre No boundary checking is performed, so insufficient memory will
-   result in a buffer overrun.
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_copy
-TRIO_ARGS2((target, source),
-	   char *target,
-	   TRIO_CONST char *source)
-{
-  assert(target);
-  assert(source);
-
-  (void)strcpy(target, source);
-  return TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Copy at most @p max characters from @p source to @p target.
-
-   @param target Target string.
-   @param max Maximum number of characters to append.
-   @param source Source string.
-   @return Boolean value indicating success or failure.
-
-   @pre @p target must point to a memory chunk with sufficient room to
-   contain the @p source string (at most @p max characters).
-   @pre No boundary checking is performed, so insufficient memory will
-   result in a buffer overrun.
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_copy_max
-TRIO_ARGS3((target, max, source),
-	   char *target,
-	   size_t max,
-	   TRIO_CONST char *source)
-{
-  assert(target);
-  assert(source);
-  assert(max > 0); /* Includes != 0 */
-
-  (void)strncpy(target, source, max - 1);
-  target[max - 1] = (char)0;
-  return TRUE;
-}
-
-
-/*
- * TrioDuplicateMax
- */
-TRIO_STRING_PRIVATE char *
-TrioDuplicateMax
-TRIO_ARGS2((source, size),
-	   TRIO_CONST char *source,
-	   size_t size)
-{
-  char *target;
-
-  assert(source);
-
-  /* Make room for string plus a terminating zero */
-  size++;
-  target = trio_create(size);
-  if (target)
-    {
-      trio_copy_max(target, size, source);
-    }
-  return target;
-}
-
-
-/**
-   Duplicate @p source.
-
-   @param source Source string.
-   @return A copy of the @p source string.
-
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC char *
-trio_duplicate
-TRIO_ARGS1((source),
-	   TRIO_CONST char *source)
-{
-  return TrioDuplicateMax(source, trio_length(source));
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Duplicate at most @p max characters of @p source.
-
-   @param source Source string.
-   @param max Maximum number of characters to duplicate.
-   @return A copy of the @p source string.
-
-   @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC char *
-trio_duplicate_max TRIO_ARGS2((source, max),
-			      TRIO_CONST char *source,
-			      size_t max)
-{
-  size_t length;
-
-  assert(source);
-  assert(max > 0);
-
-  length = trio_length(source);
-  if (length > max)
-    {
-      length = max;
-    }
-  return TrioDuplicateMax(source, length);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Compare if two strings are equal.
-
-   @param first First string.
-   @param second Second string.
-   @return Boolean indicating whether the two strings are equal or not.
-
-   Case-insensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal
-TRIO_ARGS2((first, second),
-	   TRIO_CONST char *first,
-	   TRIO_CONST char *second)
-{
-  assert(first);
-  assert(second);
-
-  if ((first != NULL) && (second != NULL))
-    {
-#if defined(USE_STRCASECMP)
-      return (0 == strcasecmp(first, second));
-#else
-      while ((*first != NIL) && (*second != NIL))
-	{
-	  if (trio_to_upper(*first) != trio_to_upper(*second))
-	    {
-	      break;
-	    }
-	  first++;
-	  second++;
-	}
-      return ((*first == NIL) && (*second == NIL));
-#endif
-    }
-  return FALSE;
-}
-
-
-/**
-   Compare if two strings are equal.
-
-   @param first First string.
-   @param second Second string.
-   @return Boolean indicating whether the two strings are equal or not.
-
-   Case-sensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_case
-TRIO_ARGS2((first, second),
-	   TRIO_CONST char *first,
-	   TRIO_CONST char *second)
-{
-  assert(first);
-  assert(second);
-
-  if ((first != NULL) && (second != NULL))
-    {
-      return (0 == strcmp(first, second));
-    }
-  return FALSE;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Compare if two strings up until the first @p max characters are equal.
-
-   @param first First string.
-   @param max Maximum number of characters to compare.
-   @param second Second string.
-   @return Boolean indicating whether the two strings are equal or not.
-
-   Case-sensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_case_max
-TRIO_ARGS3((first, max, second),
-	   TRIO_CONST char *first,
-	   size_t max,
-	   TRIO_CONST char *second)
-{
-  assert(first);
-  assert(second);
-
-  if ((first != NULL) && (second != NULL))
-    {
-      return (0 == strncmp(first, second, max));
-    }
-  return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Compare if two strings are equal.
-
-   @param first First string.
-   @param second Second string.
-   @return Boolean indicating whether the two strings are equal or not.
-
-   Collating characters are considered equal.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_locale
-TRIO_ARGS2((first, second),
-	   TRIO_CONST char *first,
-	   TRIO_CONST char *second)
-{
-  assert(first);
-  assert(second);
-
-#if defined(LC_COLLATE)
-  return (strcoll(first, second) == 0);
-#else
-  return trio_equal(first, second);
-#endif
-}
-
-
-/**
-   Compare if two strings up until the first @p max characters are equal.
-
-   @param first First string.
-   @param max Maximum number of characters to compare.
-   @param second Second string.
-   @return Boolean indicating whether the two strings are equal or not.
-
-   Case-insensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_max
-TRIO_ARGS3((first, max, second),
-	   TRIO_CONST char *first,
-	   size_t max,
-	   TRIO_CONST char *second)
-{
-  assert(first);
-  assert(second);
-
-  if ((first != NULL) && (second != NULL))
-    {
-#if defined(USE_STRNCASECMP)
-      return (0 == strncasecmp(first, second, max));
-#else
-      /* Not adequately tested yet */
-      size_t cnt = 0;
-      while ((*first != NIL) && (*second != NIL) && (cnt <= max))
-	{
-	  if (trio_to_upper(*first) != trio_to_upper(*second))
-	    {
-	      break;
-	    }
-	  first++;
-	  second++;
-	  cnt++;
-	}
-      return ((cnt == max) || ((*first == NIL) && (*second == NIL)));
-#endif
-    }
-  return FALSE;
-}
-
-
-/**
-   Provide a textual description of an error code (errno).
-
-   @param error_number Error number.
-   @return Textual description of @p error_number.
-*/
-TRIO_STRING_PUBLIC TRIO_CONST char *
-trio_error
-TRIO_ARGS1((error_number),
-	   int error_number)
-{
-#if defined(USE_STRERROR)
-
-  return strerror(error_number);
-
-#elif defined(USE_SYS_ERRLIST)
-
-  extern char *sys_errlist[];
-  extern int sys_nerr;
-
-  return ((error_number < 0) || (error_number >= sys_nerr))
-    ? "unknown"
-    : sys_errlist[error_number];
-
-#else
-
-  return "unknown";
-
-#endif
-}
-
-
-#if !defined(TRIO_MINIMAL) && !defined(_WIN32_WCE)
-/**
-   Format the date/time according to @p format.
-
-   @param target Target string.
-   @param max Maximum number of characters to format.
-   @param format Formatting string.
-   @param datetime Date/time structure.
-   @return Number of formatted characters.
-
-   The formatting string accepts the same specifiers as the standard C
-   function strftime.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_format_date_max
-TRIO_ARGS4((target, max, format, datetime),
-	   char *target,
-	   size_t max,
-	   TRIO_CONST char *format,
-	   TRIO_CONST struct tm *datetime)
-{
-  assert(target);
-  assert(format);
-  assert(datetime);
-  assert(max > 0);
-
-  return strftime(target, max, format, datetime);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Calculate a hash value for a string.
-
-   @param string String to be calculated on.
-   @param type Hash function.
-   @return Calculated hash value.
-
-   @p type can be one of the following
-   @li @c TRIO_HASH_PLAIN Plain hash function.
-*/
-TRIO_STRING_PUBLIC unsigned long
-trio_hash
-TRIO_ARGS2((string, type),
-	   TRIO_CONST char *string,
-	   int type)
-{
-  unsigned long value = 0L;
-  char ch;
-
-  assert(string);
-
-  switch (type)
-    {
-    case TRIO_HASH_PLAIN:
-      while ( (ch = *string++) != NIL )
-	{
-	  value *= 31;
-	  value += (unsigned long)ch;
-	}
-      break;
-    default:
-      assert(FALSE);
-      break;
-    }
-  return value;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Find first occurrence of a character in a string.
-
-   @param string String to be searched.
-   @param character Character to be found.
-   @param A pointer to the found character, or NULL if character was not found.
- */
-TRIO_STRING_PUBLIC char *
-trio_index
-TRIO_ARGS2((string, character),
-	   TRIO_CONST char *string,
-	   int character)
-{
-  assert(string);
-
-  return strchr(string, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Find last occurrence of a character in a string.
-
-   @param string String to be searched.
-   @param character Character to be found.
-   @param A pointer to the found character, or NULL if character was not found.
- */
-TRIO_STRING_PUBLIC char *
-trio_index_last
-TRIO_ARGS2((string, character),
-	   TRIO_CONST char *string,
-	   int character)
-{
-  assert(string);
-
-  return strchr(string, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Convert the alphabetic letters in the string to lower-case.
-
-   @param target String to be converted.
-   @return Number of processed characters (converted or not).
-*/
-TRIO_STRING_PUBLIC int
-trio_lower
-TRIO_ARGS1((target),
-	   char *target)
-{
-  assert(target);
-
-  return trio_span_function(target, target, trio_to_lower);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Compare two strings using wildcards.
-
-   @param string String to be searched.
-   @param pattern Pattern, including wildcards, to search for.
-   @return Boolean value indicating success or failure.
-
-   Case-insensitive comparison.
-
-   The following wildcards can be used
-   @li @c * Match any number of characters.
-   @li @c ? Match a single character.
-*/
-TRIO_STRING_PUBLIC int
-trio_match
-TRIO_ARGS2((string, pattern),
-	   TRIO_CONST char *string,
-	   TRIO_CONST char *pattern)
-{
-  assert(string);
-  assert(pattern);
-
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-	{
-	  return (NIL == *pattern);
-	}
-      if ((trio_to_upper((int)*string) != trio_to_upper((int)*pattern))
-	  && ('?' != *pattern))
-	{
-	  return FALSE;
-	}
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( trio_match(string, &pattern[1]) )
-	{
-	  return TRUE;
-	}
-    }
-  while (*string++);
-
-  return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Compare two strings using wildcards.
-
-   @param string String to be searched.
-   @param pattern Pattern, including wildcards, to search for.
-   @return Boolean value indicating success or failure.
-
-   Case-sensitive comparison.
-
-   The following wildcards can be used
-   @li @c * Match any number of characters.
-   @li @c ? Match a single character.
-*/
-TRIO_STRING_PUBLIC int
-trio_match_case
-TRIO_ARGS2((string, pattern),
-	   TRIO_CONST char *string,
-	   TRIO_CONST char *pattern)
-{
-  assert(string);
-  assert(pattern);
-
-  for (; ('*' != *pattern); ++pattern, ++string)
-    {
-      if (NIL == *string)
-	{
-	  return (NIL == *pattern);
-	}
-      if ((*string != *pattern)
-	  && ('?' != *pattern))
-	{
-	  return FALSE;
-	}
-    }
-  /* two-line patch to prevent *too* much recursiveness: */
-  while ('*' == pattern[1])
-    pattern++;
-
-  do
-    {
-      if ( trio_match_case(string, &pattern[1]) )
-	{
-	  return TRUE;
-	}
-    }
-  while (*string++);
-
-  return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Execute a function on each character in string.
-
-   @param target Target string.
-   @param source Source string.
-   @param Function Function to be executed.
-   @return Number of processed characters.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_span_function
-TRIO_ARGS3((target, source, Function),
-	   char *target,
-	   TRIO_CONST char *source,
-	   int (*Function) TRIO_PROTO((int)))
-{
-  size_t count = 0;
-
-  assert(target);
-  assert(source);
-  assert(Function);
-
-  while (*source != NIL)
-    {
-      *target++ = Function(*source++);
-      count++;
-    }
-  return count;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Search for a substring in a string.
-
-   @param string String to be searched.
-   @param substring String to be found.
-   @return Pointer to first occurrence of @p substring in @p string, or NULL
-   if no match was found.
-*/
-TRIO_STRING_PUBLIC char *
-trio_substring
-TRIO_ARGS2((string, substring),
-	   TRIO_CONST char *string,
-	   TRIO_CONST char *substring)
-{
-  assert(string);
-  assert(substring);
-
-  return strstr(string, substring);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Search for a substring in the first @p max characters of a string.
-
-   @param string String to be searched.
-   @param max Maximum characters to be searched.
-   @param substring String to be found.
-   @return Pointer to first occurrence of @p substring in @p string, or NULL
-   if no match was found.
-*/
-TRIO_STRING_PUBLIC char *
-trio_substring_max
-TRIO_ARGS3((string, max, substring),
-	   TRIO_CONST char *string,
-	   size_t max,
-	   TRIO_CONST char *substring)
-{
-  size_t count;
-  size_t size;
-  char *result = NULL;
-
-  assert(string);
-  assert(substring);
-
-  size = trio_length(substring);
-  if (size <= max)
-    {
-      for (count = 0; count <= max - size; count++)
-	{
-	  if (trio_equal_max(substring, size, &string[count]))
-	    {
-	      result = (char *)&string[count];
-	      break;
-	    }
-	}
-    }
-  return result;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Tokenize string.
-
-   @param string String to be tokenized.
-   @param tokens String containing list of delimiting characters.
-   @return Start of new token.
-
-   @warning @p string will be destroyed.
-*/
-TRIO_STRING_PUBLIC char *
-trio_tokenize
-TRIO_ARGS2((string, delimiters),
-	   char *string,
-	   TRIO_CONST char *delimiters)
-{
-  assert(delimiters);
-
-  return strtok(string, delimiters);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Convert string to floating-point number.
-
-   @param source String to be converted.
-   @param endp Pointer to end of the converted string.
-   @return A floating-point number.
-
-   The following Extended Backus-Naur form is used
-   @verbatim
-   double        ::= [ <sign> ]
-                     ( <number> |
-                       <number> <decimal_point> <number> |
-                       <decimal_point> <number> )
-                     [ <exponential> [ <sign> ] <number> ]
-   number        ::= 1*( <digit> )
-   digit         ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
-   exponential   ::= ( 'e' | 'E' )
-   sign          ::= ( '-' | '+' )
-   decimal_point ::= '.'
-   @endverbatim
-*/
-/* FIXME: Add EBNF for hex-floats */
-TRIO_STRING_PUBLIC trio_long_double_t
-trio_to_long_double
-TRIO_ARGS2((source, endp),
-	   TRIO_CONST char *source,
-	   char **endp)
-{
-#if defined(USE_STRTOLD)
-  return strtold(source, endp);
-#else
-  int isNegative = FALSE;
-  int isExponentNegative = FALSE;
-  trio_long_double_t integer = 0.0;
-  trio_long_double_t fraction = 0.0;
-  unsigned long exponent = 0;
-  trio_long_double_t base;
-  trio_long_double_t fracdiv = 1.0;
-  trio_long_double_t value = 0.0;
-
-  /* First try hex-floats */
-  if ((source[0] == '0') && ((source[1] == 'x') || (source[1] == 'X')))
-    {
-      base = 16.0;
-      source += 2;
-      while (isxdigit((int)*source))
-	{
-	  integer *= base;
-	  integer += (isdigit((int)*source)
-		      ? (*source - '0')
-		      : 10 + (trio_to_upper((int)*source) - 'A'));
-	  source++;
-	}
-      if (*source == '.')
-	{
-	  source++;
-	  while (isxdigit((int)*source))
-	    {
-	      fracdiv /= base;
-	      fraction += fracdiv * (isdigit((int)*source)
-				     ? (*source - '0')
-				     : 10 + (trio_to_upper((int)*source) - 'A'));
-	      source++;
-	    }
-	  if ((*source == 'p') || (*source == 'P'))
-	    {
-	      source++;
-	      if ((*source == '+') || (*source == '-'))
-		{
-		  isExponentNegative = (*source == '-');
-		  source++;
-		}
-	      while (isdigit((int)*source))
-		{
-		  exponent *= 10;
-		  exponent += (*source - '0');
-		  source++;
-		}
-	    }
-	}
-      /* For later use with exponent */
-      base = 2.0;
-    }
-  else /* Then try normal decimal floats */
-    {
-      base = 10.0;
-      isNegative = (*source == '-');
-      /* Skip sign */
-      if ((*source == '+') || (*source == '-'))
-	source++;
-
-      /* Integer part */
-      while (isdigit((int)*source))
-	{
-	  integer *= base;
-	  integer += (*source - '0');
-	  source++;
-	}
-
-      if (*source == '.')
-	{
-	  source++; /* skip decimal point */
-	  while (isdigit((int)*source))
-	    {
-	      fracdiv /= base;
-	      fraction += (*source - '0') * fracdiv;
-	      source++;
-	    }
-	}
-      if ((*source == 'e')
-	  || (*source == 'E')
-#if TRIO_MICROSOFT
-	  || (*source == 'd')
-	  || (*source == 'D')
-#endif
-	  )
-	{
-	  source++; /* Skip exponential indicator */
-	  isExponentNegative = (*source == '-');
-	  if ((*source == '+') || (*source == '-'))
-	    source++;
-	  while (isdigit((int)*source))
-	    {
-	      exponent *= (int)base;
-	      exponent += (*source - '0');
-	      source++;
-	    }
-	}
-    }
-
-  value = integer + fraction;
-  if (exponent != 0)
-    {
-      if (isExponentNegative)
-	value /= pow(base, (double)exponent);
-      else
-	value *= pow(base, (double)exponent);
-    }
-  if (isNegative)
-    value = -value;
-
-  if (endp)
-    *endp = (char *)source;
-  return value;
-#endif
-}
-
-
-/**
-   Convert string to floating-point number.
-
-   @param source String to be converted.
-   @param endp Pointer to end of the converted string.
-   @return A floating-point number.
-
-   See @ref trio_to_long_double.
-*/
-TRIO_STRING_PUBLIC double
-trio_to_double
-TRIO_ARGS2((source, endp),
-	   TRIO_CONST char *source,
-	   char **endp)
-{
-#if defined(USE_STRTOD)
-  return strtod(source, endp);
-#else
-  return (double)trio_to_long_double(source, endp);
-#endif
-}
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Convert string to floating-point number.
-
-   @param source String to be converted.
-   @param endp Pointer to end of the converted string.
-   @return A floating-point number.
-
-   See @ref trio_to_long_double.
-*/
-TRIO_STRING_PUBLIC float
-trio_to_float
-TRIO_ARGS2((source, endp),
-	   TRIO_CONST char *source,
-	   char **endp)
-{
-#if defined(USE_STRTOF)
-  return strtof(source, endp);
-#else
-  return (float)trio_to_long_double(source, endp);
-#endif
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Convert string to signed integer.
-
-   @param string String to be converted.
-   @param endp Pointer to end of converted string.
-   @param base Radix number of number.
-*/
-TRIO_STRING_PUBLIC long
-trio_to_long
-TRIO_ARGS3((string, endp, base),
-	   TRIO_CONST char *string,
-	   char **endp,
-	   int base)
-{
-  assert(string);
-  assert((base >= 2) && (base <= 36));
-
-  return strtol(string, endp, base);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Convert one alphabetic letter to lower-case.
-
-   @param source The letter to be converted.
-   @return The converted letter.
-*/
-TRIO_STRING_PUBLIC int
-trio_to_lower
-TRIO_ARGS1((source),
-	   int source)
-{
-#if defined(USE_TOLOWER)
-
-  return tolower(source);
-
-#else
-
-  /* Does not handle locales or non-contiguous alphabetic characters */
-  return ((source >= (int)'A') && (source <= (int)'Z'))
-    ? source - 'A' + 'a'
-    : source;
-
-#endif
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Convert string to unsigned integer.
-
-   @param string String to be converted.
-   @param endp Pointer to end of converted string.
-   @param base Radix number of number.
-*/
-TRIO_STRING_PUBLIC unsigned long
-trio_to_unsigned_long
-TRIO_ARGS3((string, endp, base),
-	   TRIO_CONST char *string,
-	   char **endp,
-	   int base)
-{
-  assert(string);
-  assert((base >= 2) && (base <= 36));
-
-  return strtoul(string, endp, base);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Convert one alphabetic letter to upper-case.
-
-   @param source The letter to be converted.
-   @return The converted letter.
-*/
-TRIO_STRING_PUBLIC int
-trio_to_upper
-TRIO_ARGS1((source),
-	   int source)
-{
-#if defined(USE_TOUPPER)
-
-  return toupper(source);
-
-#else
-
-  /* Does not handle locales or non-contiguous alphabetic characters */
-  return ((source >= (int)'a') && (source <= (int)'z'))
-    ? source - 'a' + 'A'
-    : source;
-
-#endif
-}
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Convert the alphabetic letters in the string to upper-case.
-
-   @param target The string to be converted.
-   @return The number of processed characters (converted or not).
-*/
-TRIO_STRING_PUBLIC int
-trio_upper
-TRIO_ARGS1((target),
-	   char *target)
-{
-  assert(target);
-
-  return trio_span_function(target, target, trio_to_upper);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/** @} End of StaticStrings */
-
-
-/*************************************************************************
- * Dynamic String Functions
- */
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_dynamic.h"
-#endif
-/** @addtogroup DynamicStrings
-    @{
-*/
-
-/*
- * TrioStringAlloc
- */
-TRIO_STRING_PRIVATE trio_string_t *
-TrioStringAlloc(TRIO_NOARGS)
-{
-  trio_string_t *self;
-
-  self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t));
-  if (self)
-    {
-      self->content = NULL;
-      self->length = 0;
-      self->allocated = 0;
-    }
-  return self;
-}
-
-
-/*
- * TrioStringGrow
- *
- * The size of the string will be increased by 'delta' characters. If
- * 'delta' is zero, the size will be doubled.
- */
-TRIO_STRING_PRIVATE BOOLEAN_T
-TrioStringGrow
-TRIO_ARGS2((self, delta),
-	   trio_string_t *self,
-	   size_t delta)
-{
-  BOOLEAN_T status = FALSE;
-  char *new_content;
-  size_t new_size;
-
-  new_size = (delta == 0)
-    ? ( (self->allocated == 0) ? 1 : self->allocated * 2 )
-    : self->allocated + delta;
-
-  new_content = (char *)TRIO_REALLOC(self->content, new_size);
-  if (new_content)
-    {
-      self->content = new_content;
-      self->allocated = new_size;
-      status = TRUE;
-    }
-  return status;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * TrioStringGrowTo
- *
- * The size of the string will be increased to 'length' plus one characters.
- * If 'length' is less than the original size, the original size will be
- * used (that is, the size of the string is never decreased).
- */
-TRIO_STRING_PRIVATE BOOLEAN_T
-TrioStringGrowTo
-TRIO_ARGS2((self, length),
-	   trio_string_t *self,
-	   size_t length)
-{
-  length++; /* Room for terminating zero */
-  return (self->allocated < length)
-    ? TrioStringGrow(self, length - self->allocated)
-    : TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Create a new dynamic string.
-
-   @param initial_size Initial size of the buffer.
-   @return Newly allocated dynamic string, or NULL if memory allocation failed.
-*/
-TRIO_STRING_PUBLIC trio_string_t *
-trio_string_create
-TRIO_ARGS1((initial_size),
-	   int initial_size)
-{
-  trio_string_t *self;
-
-  self = TrioStringAlloc();
-  if (self)
-    {
-      if (TrioStringGrow(self,
-			 (size_t)((initial_size > 0) ? initial_size : 1)))
-	{
-	  self->content[0] = (char)0;
-	  self->allocated = initial_size;
-	}
-      else
-	{
-	  trio_string_destroy(self);
-	  self = NULL;
-	}
-    }
-  return self;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Deallocate the dynamic string and its contents.
-
-   @param self Dynamic string
-*/
-TRIO_STRING_PUBLIC void
-trio_string_destroy
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  assert(self);
-
-  if (self)
-    {
-      trio_destroy(self->content);
-      TRIO_FREE(self);
-    }
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Get a pointer to the content.
-
-   @param self Dynamic string.
-   @param offset Offset into content.
-   @return Pointer to the content.
-
-   @p Offset can be zero, positive, or negative. If @p offset is zero,
-   then the start of the content will be returned. If @p offset is positive,
-   then a pointer to @p offset number of characters from the beginning of the
-   content is returned. If @p offset is negative, then a pointer to @p offset
-   number of characters from the ending of the string, starting at the
-   terminating zero, is returned.
-*/
-TRIO_STRING_PUBLIC char *
-trio_string_get
-TRIO_ARGS2((self, offset),
-	   trio_string_t *self,
-	   int offset)
-{
-  char *result = NULL;
-
-  assert(self);
-
-  if (self->content != NULL)
-    {
-      if (self->length == 0)
-	{
-	  (void)trio_string_length(self);
-	}
-      if (offset >= 0)
-	{
-	  if (offset > (int)self->length)
-	    {
-	      offset = self->length;
-	    }
-	}
-      else
-	{
-	  offset += self->length + 1;
-	  if (offset < 0)
-	    {
-	      offset = 0;
-	    }
-	}
-      result = &(self->content[offset]);
-    }
-  return result;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
-   Extract the content.
-
-   @param self Dynamic String
-   @return Content of dynamic string.
-
-   The content is removed from the dynamic string. This enables destruction
-   of the dynamic string without deallocation of the content.
-*/
-TRIO_STRING_PUBLIC char *
-trio_string_extract
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  char *result;
-
-  assert(self);
-
-  result = self->content;
-  /* FIXME: Allocate new empty buffer? */
-  self->content = NULL;
-  self->length = self->allocated = 0;
-  return result;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Set the content of the dynamic string.
-
-   @param self Dynamic String
-   @param buffer The new content.
-
-   Sets the content of the dynamic string to a copy @p buffer.
-   An existing content will be deallocated first, if necessary.
-
-   @remark
-   This function will make a copy of @p buffer.
-   You are responsible for deallocating @p buffer yourself.
-*/
-TRIO_STRING_PUBLIC void
-trio_xstring_set
-TRIO_ARGS2((self, buffer),
-	   trio_string_t *self,
-	   char *buffer)
-{
-  assert(self);
-
-  trio_destroy(self->content);
-  self->content = trio_duplicate(buffer);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_string_size
- */
-TRIO_STRING_PUBLIC int
-trio_string_size
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  assert(self);
-
-  return self->allocated;
-}
-
-
-/*
- * trio_string_terminate
- */
-TRIO_STRING_PUBLIC void
-trio_string_terminate
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  trio_xstring_append_char(self, 0);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Append the second string to the first.
-
-   @param self Dynamic string to be modified.
-   @param other Dynamic string to copy from.
-   @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_string_append
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  size_t length;
-
-  assert(self);
-  assert(other);
-
-  length = self->length + other->length;
-  if (!TrioStringGrowTo(self, length))
-    goto error;
-  trio_copy(&self->content[self->length], other->content);
-  self->length = length;
-  return TRUE;
-
- error:
-  return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_append
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_append
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  size_t length;
-
-  assert(self);
-  assert(other);
-
-  length = self->length + trio_length(other);
-  if (!TrioStringGrowTo(self, length))
-    goto error;
-  trio_copy(&self->content[self->length], other);
-  self->length = length;
-  return TRUE;
-
- error:
-  return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_xstring_append_char
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_append_char
-TRIO_ARGS2((self, character),
-	   trio_string_t *self,
-	   char character)
-{
-  assert(self);
-
-  if ((int)self->length >= trio_string_size(self))
-    {
-      if (!TrioStringGrow(self, 0))
-	goto error;
-    }
-  self->content[self->length] = character;
-  self->length++;
-  return TRUE;
-
- error:
-  return FALSE;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
-   Search for the first occurrence of second parameter in the first.
-
-   @param self Dynamic string to be modified.
-   @param other Dynamic string to copy from.
-   @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_string_contains
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_contains(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_contains
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_contains
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_contains(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_copy
- */
-TRIO_STRING_PUBLIC int
-trio_string_copy
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  self->length = 0;
-  return trio_string_append(self, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_copy
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_copy
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  self->length = 0;
-  return trio_xstring_append(self, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_duplicate
- */
-TRIO_STRING_PUBLIC trio_string_t *
-trio_string_duplicate
-TRIO_ARGS1((other),
-	   trio_string_t *other)
-{
-  trio_string_t *self;
-
-  assert(other);
-
-  self = TrioStringAlloc();
-  if (self)
-    {
-      self->content = TrioDuplicateMax(other->content, other->length);
-      if (self->content)
-	{
-	  self->length = other->length;
-	  self->allocated = self->length + 1;
-	}
-      else
-	{
-	  self->length = self->allocated = 0;
-	}
-    }
-  return self;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_xstring_duplicate
- */
-TRIO_STRING_PUBLIC trio_string_t *
-trio_xstring_duplicate
-TRIO_ARGS1((other),
-	   TRIO_CONST char *other)
-{
-  trio_string_t *self;
-
-  assert(other);
-
-  self = TrioStringAlloc();
-  if (self)
-    {
-      self->content = TrioDuplicateMax(other, trio_length(other));
-      if (self->content)
-	{
-	  self->length = trio_length(self->content);
-	  self->allocated = self->length + 1;
-	}
-      else
-	{
-	  self->length = self->allocated = 0;
-	}
-    }
-  return self;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_max
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_max
-TRIO_ARGS3((self, max, other),
-	   trio_string_t *self,
-	   size_t max,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_max(self->content, max, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_max
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_max
-TRIO_ARGS3((self, max, other),
-	   trio_string_t *self,
-	   size_t max,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_max(self->content, max, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_case
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_case
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_case(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_case
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_case
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_case(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_case_max
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_case_max
-TRIO_ARGS3((self, max, other),
-	   trio_string_t *self,
-	   size_t max,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_case_max(self->content, max, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_case_max
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_case_max
-TRIO_ARGS3((self, max, other),
-	   trio_string_t *self,
-	   size_t max,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_equal_case_max(self->content, max, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL) && !defined(_WIN32_WCE)
-/*
- * trio_string_format_data_max
- */
-TRIO_STRING_PUBLIC size_t
-trio_string_format_date_max
-TRIO_ARGS4((self, max, format, datetime),
-	   trio_string_t *self,
-	   size_t max,
-	   TRIO_CONST char *format,
-	   TRIO_CONST struct tm *datetime)
-{
-  assert(self);
-
-  return trio_format_date_max(self->content, max, format, datetime);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_index
- */
-TRIO_STRING_PUBLIC char *
-trio_string_index
-TRIO_ARGS2((self, character),
-	   trio_string_t *self,
-	   int character)
-{
-  assert(self);
-
-  return trio_index(self->content, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_index_last
- */
-TRIO_STRING_PUBLIC char *
-trio_string_index_last
-TRIO_ARGS2((self, character),
-	   trio_string_t *self,
-	   int character)
-{
-  assert(self);
-
-  return trio_index_last(self->content, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_length
- */
-TRIO_STRING_PUBLIC int
-trio_string_length
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  assert(self);
-
-  if (self->length == 0)
-    {
-      self->length = trio_length(self->content);
-    }
-  return self->length;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_lower
- */
-TRIO_STRING_PUBLIC int
-trio_string_lower
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  assert(self);
-
-  return trio_lower(self->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_match
- */
-TRIO_STRING_PUBLIC int
-trio_string_match
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_match(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_match
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_match
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_match(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_match_case
- */
-TRIO_STRING_PUBLIC int
-trio_string_match_case
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_match_case(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_match_case
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_match_case
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_match_case(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_substring
- */
-TRIO_STRING_PUBLIC char *
-trio_string_substring
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   trio_string_t *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_substring(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_substring
- */
-TRIO_STRING_PUBLIC char *
-trio_xstring_substring
-TRIO_ARGS2((self, other),
-	   trio_string_t *self,
-	   TRIO_CONST char *other)
-{
-  assert(self);
-  assert(other);
-
-  return trio_substring(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_upper
- */
-TRIO_STRING_PUBLIC int
-trio_string_upper
-TRIO_ARGS1((self),
-	   trio_string_t *self)
-{
-  assert(self);
-
-  return trio_upper(self->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-/** @} End of DynamicStrings */
diff --git a/src/third_party/libxml/src/triostr.h b/src/third_party/libxml/src/triostr.h
deleted file mode 100644
index 27f4ace..0000000
--- a/src/third_party/libxml/src/triostr.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOSTR_H
-#define TRIO_TRIOSTR_H
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "triodef.h"
-#include "triop.h"
-
-enum {
-  TRIO_HASH_NONE = 0,
-  TRIO_HASH_PLAIN,
-  TRIO_HASH_TWOSIGNED
-};
-
-#if !defined(TRIO_STRING_PUBLIC)
-# if !defined(TRIO_PUBLIC)
-#  define TRIO_PUBLIC
-# endif
-# define TRIO_STRING_PUBLIC TRIO_PUBLIC
-#endif
-
-/*************************************************************************
- * String functions
- */
-
-TRIO_STRING_PUBLIC int trio_copy_max TRIO_PROTO((char *target, size_t max, const char *source));
-TRIO_STRING_PUBLIC char *trio_create TRIO_PROTO((size_t size));
-TRIO_STRING_PUBLIC void trio_destroy TRIO_PROTO((char *string));
-TRIO_STRING_PUBLIC char *trio_duplicate TRIO_PROTO((const char *source));
-TRIO_STRING_PUBLIC int trio_equal TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_case TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_locale TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_max TRIO_PROTO((const char *first, size_t max, const char *second));
-TRIO_STRING_PUBLIC TRIO_CONST char *trio_error TRIO_PROTO((int));
-TRIO_STRING_PUBLIC size_t trio_length TRIO_PROTO((const char *string));
-TRIO_STRING_PUBLIC double trio_to_double TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC long trio_to_long TRIO_PROTO((const char *source, char **endp, int base));
-TRIO_STRING_PUBLIC trio_long_double_t trio_to_long_double TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC int trio_to_upper TRIO_PROTO((int source));
-
-#if !defined(TRIO_MINIMAL)
-
-TRIO_STRING_PUBLIC int trio_append TRIO_PROTO((char *target, const char *source));
-TRIO_STRING_PUBLIC int trio_append_max TRIO_PROTO((char *target, size_t max, const char *source));
-TRIO_STRING_PUBLIC int trio_contains TRIO_PROTO((const char *string, const char *substring));
-TRIO_STRING_PUBLIC int trio_copy TRIO_PROTO((char *target, const char *source));
-TRIO_STRING_PUBLIC char *trio_duplicate_max TRIO_PROTO((const char *source, size_t max));
-TRIO_STRING_PUBLIC int trio_equal_case_max TRIO_PROTO((const char *first, size_t max, const char *second));
-#if !defined(_WIN32_WCE)
-TRIO_STRING_PUBLIC size_t trio_format_date_max TRIO_PROTO((char *target, size_t max, const char *format, const struct tm *datetime));
-#endif
-TRIO_STRING_PUBLIC unsigned long trio_hash TRIO_PROTO((const char *string, int type));
-TRIO_STRING_PUBLIC char *trio_index TRIO_PROTO((const char *string, int character));
-TRIO_STRING_PUBLIC char *trio_index_last TRIO_PROTO((const char *string, int character));
-TRIO_STRING_PUBLIC int trio_lower TRIO_PROTO((char *target));
-TRIO_STRING_PUBLIC int trio_match TRIO_PROTO((const char *string, const char *pattern));
-TRIO_STRING_PUBLIC int trio_match_case TRIO_PROTO((const char *string, const char *pattern));
-TRIO_STRING_PUBLIC size_t trio_span_function TRIO_PROTO((char *target, const char *source, int (*Function) TRIO_PROTO((int))));
-TRIO_STRING_PUBLIC char *trio_substring TRIO_PROTO((const char *string, const char *substring));
-TRIO_STRING_PUBLIC char *trio_substring_max TRIO_PROTO((const char *string, size_t max, const char *substring));
-TRIO_STRING_PUBLIC float trio_to_float TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC int trio_to_lower TRIO_PROTO((int source));
-TRIO_STRING_PUBLIC unsigned long trio_to_unsigned_long TRIO_PROTO((const char *source, char **endp, int base));
-TRIO_STRING_PUBLIC char *trio_tokenize TRIO_PROTO((char *string, const char *delimiters));
-TRIO_STRING_PUBLIC int trio_upper TRIO_PROTO((char *target));
-
-#endif /* !defined(TRIO_MINIMAL) */
-
-/*************************************************************************
- * Dynamic string functions
- */
-
-/*
- * Opaque type for dynamic strings
- */
-
-typedef struct _trio_string_t trio_string_t;
-
-TRIO_STRING_PUBLIC void trio_string_destroy TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC char *trio_string_extract TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_size TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC void trio_string_terminate TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_xstring_append_char TRIO_PROTO((trio_string_t *self, char character));
-TRIO_STRING_PUBLIC trio_string_t *trio_xstring_duplicate TRIO_PROTO((const char *other));
-
-#if !defined(TRIO_MINIMAL)
-
-TRIO_STRING_PUBLIC trio_string_t *trio_string_create TRIO_PROTO((int initial_size));
-TRIO_STRING_PUBLIC char *trio_string_get TRIO_PROTO((trio_string_t *self, int offset));
-TRIO_STRING_PUBLIC void trio_xstring_set TRIO_PROTO((trio_string_t *self, char *buffer));
-
-TRIO_STRING_PUBLIC int trio_string_append TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_contains TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_copy TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC trio_string_t *trio_string_duplicate TRIO_PROTO((trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *second));
-TRIO_STRING_PUBLIC int trio_string_equal_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *other));
-#if !defined(_WIN32_WCE)
-TRIO_STRING_PUBLIC size_t trio_string_format_date_max TRIO_PROTO((trio_string_t *self, size_t max, const char *format, const struct tm *datetime));
-#endif
-TRIO_STRING_PUBLIC char *trio_string_index TRIO_PROTO((trio_string_t *self, int character));
-TRIO_STRING_PUBLIC char *trio_string_index_last TRIO_PROTO((trio_string_t *self, int character));
-TRIO_STRING_PUBLIC int trio_string_length TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_lower TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_match TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_match_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC char *trio_string_substring TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_upper TRIO_PROTO((trio_string_t *self));
-
-TRIO_STRING_PUBLIC int trio_xstring_append TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_contains TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_copy TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_case TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_match TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_match_case TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC char *trio_xstring_substring TRIO_PROTO((trio_string_t *self, const char *other));
-
-#endif /* !defined(TRIO_MINIMAL) */
-
-#endif /* TRIO_TRIOSTR_H */
diff --git a/src/third_party/libxml/src/uri.c b/src/third_party/libxml/src/uri.c
index 2bd5720..4b24b13 100644
--- a/src/third_party/libxml/src/uri.c
+++ b/src/third_party/libxml/src/uri.c
@@ -12,6 +12,7 @@
 #include "libxml.h"
 
 #include <string.h>
+#include <limits.h>
 
 #include <libxml/xmlmemory.h>
 #include <libxml/uri.h>
@@ -334,7 +335,7 @@
 	    cur++;
 	}
 	if (uri != NULL)
-	    uri->port = port & INT_MAX; /* port value modulo INT_MAX+1 */
+	    uri->port = port & USHRT_MAX; /* port value modulo USHRT_MAX+1 */
 	*str = cur;
 	return(0);
     }
diff --git a/src/third_party/libxml/src/valid.c b/src/third_party/libxml/src/valid.c
index 19f84b8..26d7221 100644
--- a/src/third_party/libxml/src/valid.c
+++ b/src/third_party/libxml/src/valid.c
@@ -1172,12 +1172,14 @@
 	    xmlBufferWriteCHAR(buf, content->name);
 	    break;
 	case XML_ELEMENT_CONTENT_SEQ:
+	    if (content->c1 == NULL) return;
 	    if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
 	        (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
 		xmlDumpElementContent(buf, content->c1, 1);
 	    else
 		xmlDumpElementContent(buf, content->c1, 0);
             xmlBufferWriteChar(buf, " , ");
+	    if (content->c2 == NULL) return;
 	    if ((content->c2->type == XML_ELEMENT_CONTENT_OR) ||
 	        ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) &&
 		 (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
@@ -1186,12 +1188,14 @@
 		xmlDumpElementContent(buf, content->c2, 0);
 	    break;
 	case XML_ELEMENT_CONTENT_OR:
+	    if (content->c1 == NULL) return;
 	    if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
 	        (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
 		xmlDumpElementContent(buf, content->c1, 1);
 	    else
 		xmlDumpElementContent(buf, content->c1, 0);
             xmlBufferWriteChar(buf, " | ");
+	    if (content->c2 == NULL) return;
 	    if ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) ||
 	        ((content->c2->type == XML_ELEMENT_CONTENT_OR) &&
 		 (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
diff --git a/src/third_party/libxml/src/xinclude.c b/src/third_party/libxml/src/xinclude.c
deleted file mode 100644
index e3bb43e..0000000
--- a/src/third_party/libxml/src/xinclude.c
+++ /dev/null
@@ -1,2624 +0,0 @@
-/*
- * xinclude.c : Code to implement XInclude processing
- *
- * World Wide Web Consortium W3C Last Call Working Draft 10 November 2003
- * http://www.w3.org/TR/2003/WD-xinclude-20031110
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpointer.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/encoding.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_XINCLUDE_ENABLED
-#include <libxml/xinclude.h>
-
-#include "buf.h"
-
-#define XINCLUDE_MAX_DEPTH 40
-
-/* #define DEBUG_XINCLUDE */
-#ifdef DEBUG_XINCLUDE
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-#endif
-
-/************************************************************************
- *									*
- *			XInclude context handling			*
- *									*
- ************************************************************************/
-
-/*
- * An XInclude context
- */
-typedef xmlChar *xmlURL;
-
-typedef struct _xmlXIncludeRef xmlXIncludeRef;
-typedef xmlXIncludeRef *xmlXIncludeRefPtr;
-struct _xmlXIncludeRef {
-    xmlChar              *URI; /* the fully resolved resource URL */
-    xmlChar         *fragment; /* the fragment in the URI */
-    xmlDocPtr		  doc; /* the parsed document */
-    xmlNodePtr            ref; /* the node making the reference in the source */
-    xmlNodePtr            inc; /* the included copy */
-    int                   xml; /* xml or txt */
-    int                 count; /* how many refs use that specific doc */
-    xmlXPathObjectPtr    xptr; /* the xpointer if needed */
-    int		      emptyFb; /* flag to show fallback empty */
-};
-
-struct _xmlXIncludeCtxt {
-    xmlDocPtr             doc; /* the source document */
-    int               incBase; /* the first include for this document */
-    int                 incNr; /* number of includes */
-    int                incMax; /* size of includes tab */
-    xmlXIncludeRefPtr *incTab; /* array of included references */
-
-    int                 txtNr; /* number of unparsed documents */
-    int                txtMax; /* size of unparsed documents tab */
-    xmlNodePtr        *txtTab; /* array of unparsed text nodes */
-    xmlURL         *txturlTab; /* array of unparsed text URLs */
-
-    xmlChar *             url; /* the current URL processed */
-    int                 urlNr; /* number of URLs stacked */
-    int                urlMax; /* size of URL stack */
-    xmlChar *         *urlTab; /* URL stack */
-
-    int              nbErrors; /* the number of errors detected */
-    int                legacy; /* using XINCLUDE_OLD_NS */
-    int            parseFlags; /* the flags used for parsing XML documents */
-    xmlChar *		 base; /* the current xml:base */
-
-    void            *_private; /* application data */
-};
-
-static int
-xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree);
-
-
-/************************************************************************
- *									*
- *			XInclude error handler				*
- *									*
- ************************************************************************/
-
-/**
- * xmlXIncludeErrMemory:
- * @extra:  extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlXIncludeErrMemory(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node,
-                     const char *extra)
-{
-    if (ctxt != NULL)
-	ctxt->nbErrors++;
-    __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
-                    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
-		    extra, NULL, NULL, 0, 0,
-		    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlXIncludeErr:
- * @ctxt: the XInclude context
- * @node: the context node
- * @msg:  the error message
- * @extra:  extra information
- *
- * Handle an XInclude error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlXIncludeErr(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
-               const char *msg, const xmlChar *extra)
-{
-    if (ctxt != NULL)
-	ctxt->nbErrors++;
-    __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
-                    error, XML_ERR_ERROR, NULL, 0,
-		    (const char *) extra, NULL, NULL, 0, 0,
-		    msg, (const char *) extra);
-}
-
-#if 0
-/**
- * xmlXIncludeWarn:
- * @ctxt: the XInclude context
- * @node: the context node
- * @msg:  the error message
- * @extra:  extra information
- *
- * Emit an XInclude warning.
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlXIncludeWarn(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
-               const char *msg, const xmlChar *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
-                    error, XML_ERR_WARNING, NULL, 0,
-		    (const char *) extra, NULL, NULL, 0, 0,
-		    msg, (const char *) extra);
-}
-#endif
-
-/**
- * xmlXIncludeGetProp:
- * @ctxt:  the XInclude context
- * @cur:  the node
- * @name:  the attribute name
- *
- * Get an XInclude attribute
- *
- * Returns the value (to be freed) or NULL if not found
- */
-static xmlChar *
-xmlXIncludeGetProp(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur,
-                   const xmlChar *name) {
-    xmlChar *ret;
-
-    ret = xmlGetNsProp(cur, XINCLUDE_NS, name);
-    if (ret != NULL)
-        return(ret);
-    if (ctxt->legacy != 0) {
-	ret = xmlGetNsProp(cur, XINCLUDE_OLD_NS, name);
-	if (ret != NULL)
-	    return(ret);
-    }
-    ret = xmlGetProp(cur, name);
-    return(ret);
-}
-/**
- * xmlXIncludeFreeRef:
- * @ref: the XInclude reference
- *
- * Free an XInclude reference
- */
-static void
-xmlXIncludeFreeRef(xmlXIncludeRefPtr ref) {
-    if (ref == NULL)
-	return;
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Freeing ref\n");
-#endif
-    if (ref->doc != NULL) {
-#ifdef DEBUG_XINCLUDE
-	xmlGenericError(xmlGenericErrorContext, "Freeing doc %s\n", ref->URI);
-#endif
-	xmlFreeDoc(ref->doc);
-    }
-    if (ref->URI != NULL)
-	xmlFree(ref->URI);
-    if (ref->fragment != NULL)
-	xmlFree(ref->fragment);
-    if (ref->xptr != NULL)
-	xmlXPathFreeObject(ref->xptr);
-    xmlFree(ref);
-}
-
-/**
- * xmlXIncludeNewRef:
- * @ctxt: the XInclude context
- * @URI:  the resource URI
- *
- * Creates a new reference within an XInclude context
- *
- * Returns the new set
- */
-static xmlXIncludeRefPtr
-xmlXIncludeNewRef(xmlXIncludeCtxtPtr ctxt, const xmlChar *URI,
-	          xmlNodePtr ref) {
-    xmlXIncludeRefPtr ret;
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "New ref %s\n", URI);
-#endif
-    ret = (xmlXIncludeRefPtr) xmlMalloc(sizeof(xmlXIncludeRef));
-    if (ret == NULL) {
-        xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlXIncludeRef));
-    if (URI == NULL)
-	ret->URI = NULL;
-    else
-	ret->URI = xmlStrdup(URI);
-    ret->fragment = NULL;
-    ret->ref = ref;
-    ret->doc = NULL;
-    ret->count = 0;
-    ret->xml = 0;
-    ret->inc = NULL;
-    if (ctxt->incMax == 0) {
-	ctxt->incMax = 4;
-        ctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(ctxt->incMax *
-					      sizeof(ctxt->incTab[0]));
-        if (ctxt->incTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
-	    xmlXIncludeFreeRef(ret);
-	    return(NULL);
-	}
-    }
-    if (ctxt->incNr >= ctxt->incMax) {
-	ctxt->incMax *= 2;
-        ctxt->incTab = (xmlXIncludeRefPtr *) xmlRealloc(ctxt->incTab,
-	             ctxt->incMax * sizeof(ctxt->incTab[0]));
-        if (ctxt->incTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
-	    xmlXIncludeFreeRef(ret);
-	    return(NULL);
-	}
-    }
-    ctxt->incTab[ctxt->incNr++] = ret;
-    return(ret);
-}
-
-/**
- * xmlXIncludeNewContext:
- * @doc:  an XML Document
- *
- * Creates a new XInclude context
- *
- * Returns the new set
- */
-xmlXIncludeCtxtPtr
-xmlXIncludeNewContext(xmlDocPtr doc) {
-    xmlXIncludeCtxtPtr ret;
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "New context\n");
-#endif
-    if (doc == NULL)
-	return(NULL);
-    ret = (xmlXIncludeCtxtPtr) xmlMalloc(sizeof(xmlXIncludeCtxt));
-    if (ret == NULL) {
-	xmlXIncludeErrMemory(NULL, (xmlNodePtr) doc,
-	                     "creating XInclude context");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlXIncludeCtxt));
-    ret->doc = doc;
-    ret->incNr = 0;
-    ret->incBase = 0;
-    ret->incMax = 0;
-    ret->incTab = NULL;
-    ret->nbErrors = 0;
-    return(ret);
-}
-
-/**
- * xmlXIncludeURLPush:
- * @ctxt:  the parser context
- * @value:  the url
- *
- * Pushes a new url on top of the url stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-static int
-xmlXIncludeURLPush(xmlXIncludeCtxtPtr ctxt,
-	           const xmlChar *value)
-{
-    if (ctxt->urlNr > XINCLUDE_MAX_DEPTH) {
-	xmlXIncludeErr(ctxt, NULL, XML_XINCLUDE_RECURSION,
-	               "detected a recursion in %s\n", value);
-	return(-1);
-    }
-    if (ctxt->urlTab == NULL) {
-	ctxt->urlMax = 4;
-	ctxt->urlNr = 0;
-	ctxt->urlTab = (xmlChar * *) xmlMalloc(
-		        ctxt->urlMax * sizeof(ctxt->urlTab[0]));
-        if (ctxt->urlTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
-            return (-1);
-        }
-    }
-    if (ctxt->urlNr >= ctxt->urlMax) {
-        ctxt->urlMax *= 2;
-        ctxt->urlTab =
-            (xmlChar * *) xmlRealloc(ctxt->urlTab,
-                                      ctxt->urlMax *
-                                      sizeof(ctxt->urlTab[0]));
-        if (ctxt->urlTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
-            return (-1);
-        }
-    }
-    ctxt->url = ctxt->urlTab[ctxt->urlNr] = xmlStrdup(value);
-    return (ctxt->urlNr++);
-}
-
-/**
- * xmlXIncludeURLPop:
- * @ctxt: the parser context
- *
- * Pops the top URL from the URL stack
- */
-static void
-xmlXIncludeURLPop(xmlXIncludeCtxtPtr ctxt)
-{
-    xmlChar * ret;
-
-    if (ctxt->urlNr <= 0)
-        return;
-    ctxt->urlNr--;
-    if (ctxt->urlNr > 0)
-        ctxt->url = ctxt->urlTab[ctxt->urlNr - 1];
-    else
-        ctxt->url = NULL;
-    ret = ctxt->urlTab[ctxt->urlNr];
-    ctxt->urlTab[ctxt->urlNr] = NULL;
-    if (ret != NULL)
-	xmlFree(ret);
-}
-
-/**
- * xmlXIncludeFreeContext:
- * @ctxt: the XInclude context
- *
- * Free an XInclude context
- */
-void
-xmlXIncludeFreeContext(xmlXIncludeCtxtPtr ctxt) {
-    int i;
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Freeing context\n");
-#endif
-    if (ctxt == NULL)
-	return;
-    while (ctxt->urlNr > 0)
-	xmlXIncludeURLPop(ctxt);
-    if (ctxt->urlTab != NULL)
-	xmlFree(ctxt->urlTab);
-    for (i = 0;i < ctxt->incNr;i++) {
-	if (ctxt->incTab[i] != NULL)
-	    xmlXIncludeFreeRef(ctxt->incTab[i]);
-    }
-    if (ctxt->txturlTab != NULL) {
-	for (i = 0;i < ctxt->txtNr;i++) {
-	    if (ctxt->txturlTab[i] != NULL)
-		xmlFree(ctxt->txturlTab[i]);
-	}
-    }
-    if (ctxt->incTab != NULL)
-	xmlFree(ctxt->incTab);
-    if (ctxt->txtTab != NULL)
-	xmlFree(ctxt->txtTab);
-    if (ctxt->txturlTab != NULL)
-	xmlFree(ctxt->txturlTab);
-    if (ctxt->base != NULL) {
-        xmlFree(ctxt->base);
-    }
-    xmlFree(ctxt);
-}
-
-/**
- * xmlXIncludeParseFile:
- * @ctxt:  the XInclude context
- * @URL:  the URL or file path
- *
- * parse a document for XInclude
- */
-static xmlDocPtr
-xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
-    xmlDocPtr ret;
-    xmlParserCtxtPtr pctxt;
-    xmlParserInputPtr inputStream;
-
-    xmlInitParser();
-
-    pctxt = xmlNewParserCtxt();
-    if (pctxt == NULL) {
-	xmlXIncludeErrMemory(ctxt, NULL, "cannot allocate parser context");
-	return(NULL);
-    }
-
-    /*
-     * pass in the application data to the parser context.
-     */
-    pctxt->_private = ctxt->_private;
-
-    /*
-     * try to ensure that new documents included are actually
-     * built with the same dictionary as the including document.
-     */
-    if ((ctxt->doc != NULL) && (ctxt->doc->dict != NULL)) {
-       if (pctxt->dict != NULL)
-            xmlDictFree(pctxt->dict);
-	pctxt->dict = ctxt->doc->dict;
-	xmlDictReference(pctxt->dict);
-    }
-
-    xmlCtxtUseOptions(pctxt, ctxt->parseFlags | XML_PARSE_DTDLOAD);
-
-    inputStream = xmlLoadExternalEntity(URL, NULL, pctxt);
-    if (inputStream == NULL) {
-	xmlFreeParserCtxt(pctxt);
-	return(NULL);
-    }
-
-    inputPush(pctxt, inputStream);
-
-    if (pctxt->directory == NULL)
-        pctxt->directory = xmlParserGetDirectory(URL);
-
-    pctxt->loadsubset |= XML_DETECT_IDS;
-
-    xmlParseDocument(pctxt);
-
-    if (pctxt->wellFormed) {
-        ret = pctxt->myDoc;
-    }
-    else {
-        ret = NULL;
-	if (pctxt->myDoc != NULL)
-	    xmlFreeDoc(pctxt->myDoc);
-        pctxt->myDoc = NULL;
-    }
-    xmlFreeParserCtxt(pctxt);
-
-    return(ret);
-}
-
-/**
- * xmlXIncludeAddNode:
- * @ctxt:  the XInclude context
- * @cur:  the new node
- *
- * Add a new node to process to an XInclude context
- */
-static int
-xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) {
-    xmlXIncludeRefPtr ref;
-    xmlURIPtr uri;
-    xmlChar *URL;
-    xmlChar *fragment = NULL;
-    xmlChar *href;
-    xmlChar *parse;
-    xmlChar *base;
-    xmlChar *URI;
-    int xml = 1, i; /* default Issue 64 */
-    int local = 0;
-
-
-    if (ctxt == NULL)
-	return(-1);
-    if (cur == NULL)
-	return(-1);
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Add node\n");
-#endif
-    /*
-     * read the attributes
-     */
-    href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
-    if (href == NULL) {
-	href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
-	if (href == NULL)
-	    return(-1);
-    }
-    if ((href[0] == '#') || (href[0] == 0))
-	local = 1;
-    parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
-    if (parse != NULL) {
-	if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
-	    xml = 1;
-	else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
-	    xml = 0;
-	else {
-	    xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_PARSE_VALUE,
-	                   "invalid value %s for 'parse'\n", parse);
-	    if (href != NULL)
-		xmlFree(href);
-	    if (parse != NULL)
-		xmlFree(parse);
-	    return(-1);
-	}
-    }
-
-    /*
-     * compute the URI
-     */
-    base = xmlNodeGetBase(ctxt->doc, cur);
-    if (base == NULL) {
-	URI = xmlBuildURI(href, ctxt->doc->URL);
-    } else {
-	URI = xmlBuildURI(href, base);
-    }
-    if (URI == NULL) {
-	xmlChar *escbase;
-	xmlChar *eschref;
-	/*
-	 * Some escaping may be needed
-	 */
-	escbase = xmlURIEscape(base);
-	eschref = xmlURIEscape(href);
-	URI = xmlBuildURI(eschref, escbase);
-	if (escbase != NULL)
-	    xmlFree(escbase);
-	if (eschref != NULL)
-	    xmlFree(eschref);
-    }
-    if (parse != NULL)
-	xmlFree(parse);
-    if (href != NULL)
-	xmlFree(href);
-    if (base != NULL)
-	xmlFree(base);
-    if (URI == NULL) {
-	xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
-	               "failed build URL\n", NULL);
-	return(-1);
-    }
-    fragment = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE_XPOINTER);
-
-    /*
-     * Check the URL and remove any fragment identifier
-     */
-    uri = xmlParseURI((const char *)URI);
-    if (uri == NULL) {
-	xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
-	               "invalid value URI %s\n", URI);
-	if (fragment != NULL)
-	    xmlFree(fragment);
-	xmlFree(URI);
-	return(-1);
-    }
-
-    if (uri->fragment != NULL) {
-        if (ctxt->legacy != 0) {
-	    if (fragment == NULL) {
-		fragment = (xmlChar *) uri->fragment;
-	    } else {
-		xmlFree(uri->fragment);
-	    }
-	} else {
-	    xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_FRAGMENT_ID,
-       "Invalid fragment identifier in URI %s use the xpointer attribute\n",
-                           URI);
-	    if (fragment != NULL)
-	        xmlFree(fragment);
-	    xmlFreeURI(uri);
-	    xmlFree(URI);
-	    return(-1);
-	}
-	uri->fragment = NULL;
-    }
-    URL = xmlSaveUri(uri);
-    xmlFreeURI(uri);
-    xmlFree(URI);
-    if (URL == NULL) {
-	xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
-	               "invalid value URI %s\n", URI);
-	if (fragment != NULL)
-	    xmlFree(fragment);
-	return(-1);
-    }
-
-    /*
-     * If local and xml then we need a fragment
-     */
-    if ((local == 1) && (xml == 1) &&
-        ((fragment == NULL) || (fragment[0] == 0))) {
-	xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_RECURSION,
-	               "detected a local recursion with no xpointer in %s\n",
-		       URL);
-	if (fragment != NULL)
-	    xmlFree(fragment);
-	return(-1);
-    }
-
-    /*
-     * Check the URL against the stack for recursions
-     */
-    if ((!local) && (xml == 1)) {
-	for (i = 0;i < ctxt->urlNr;i++) {
-	    if (xmlStrEqual(URL, ctxt->urlTab[i])) {
-		xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_RECURSION,
-		               "detected a recursion in %s\n", URL);
-		return(-1);
-	    }
-	}
-    }
-
-    ref = xmlXIncludeNewRef(ctxt, URL, cur);
-    if (ref == NULL) {
-	return(-1);
-    }
-    ref->fragment = fragment;
-    ref->doc = NULL;
-    ref->xml = xml;
-    ref->count = 1;
-    xmlFree(URL);
-    return(0);
-}
-
-/**
- * xmlXIncludeRecurseDoc:
- * @ctxt:  the XInclude context
- * @doc:  the new document
- * @url:  the associated URL
- *
- * The XInclude recursive nature is handled at this point.
- */
-static void
-xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
-	              const xmlURL url ATTRIBUTE_UNUSED) {
-    xmlXIncludeCtxtPtr newctxt;
-    int i;
-
-    /*
-     * Avoid recursion in already substitued resources
-    for (i = 0;i < ctxt->urlNr;i++) {
-	if (xmlStrEqual(doc->URL, ctxt->urlTab[i]))
-	    return;
-    }
-     */
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Recursing in doc %s\n", doc->URL);
-#endif
-    /*
-     * Handle recursion here.
-     */
-
-    newctxt = xmlXIncludeNewContext(doc);
-    if (newctxt != NULL) {
-	/*
-	 * Copy the private user data
-	 */
-	newctxt->_private = ctxt->_private;
-	/*
-	 * Copy the existing document set
-	 */
-	newctxt->incMax = ctxt->incMax;
-	newctxt->incNr = ctxt->incNr;
-        newctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(newctxt->incMax *
-		                          sizeof(newctxt->incTab[0]));
-        if (newctxt->incTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, (xmlNodePtr) doc, "processing doc");
-	    xmlFree(newctxt);
-	    return;
-	}
-	/*
-	 * copy the urlTab
-	 */
-	newctxt->urlMax = ctxt->urlMax;
-	newctxt->urlNr = ctxt->urlNr;
-	newctxt->urlTab = ctxt->urlTab;
-
-	/*
-	 * Inherit the existing base
-	 */
-	newctxt->base = xmlStrdup(ctxt->base);
-
-	/*
-	 * Inherit the documents already in use by other includes
-	 */
-	newctxt->incBase = ctxt->incNr;
-	for (i = 0;i < ctxt->incNr;i++) {
-	    newctxt->incTab[i] = ctxt->incTab[i];
-	    newctxt->incTab[i]->count++; /* prevent the recursion from
-					    freeing it */
-	}
-	/*
-	 * The new context should also inherit the Parse Flags
-	 * (bug 132597)
-	 */
-	newctxt->parseFlags = ctxt->parseFlags;
-	xmlXIncludeDoProcess(newctxt, doc, xmlDocGetRootElement(doc));
-	for (i = 0;i < ctxt->incNr;i++) {
-	    newctxt->incTab[i]->count--;
-	    newctxt->incTab[i] = NULL;
-	}
-
-	/* urlTab may have been reallocated */
-	ctxt->urlTab = newctxt->urlTab;
-	ctxt->urlMax = newctxt->urlMax;
-
-	newctxt->urlMax = 0;
-	newctxt->urlNr = 0;
-	newctxt->urlTab = NULL;
-
-	xmlXIncludeFreeContext(newctxt);
-    }
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Done recursing in doc %s\n", url);
-#endif
-}
-
-/**
- * xmlXIncludeAddTxt:
- * @ctxt:  the XInclude context
- * @txt:  the new text node
- * @url:  the associated URL
- *
- * Add a new txtument to the list
- */
-static void
-xmlXIncludeAddTxt(xmlXIncludeCtxtPtr ctxt, xmlNodePtr txt, const xmlURL url) {
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Adding text %s\n", url);
-#endif
-    if (ctxt->txtMax == 0) {
-	ctxt->txtMax = 4;
-        ctxt->txtTab = (xmlNodePtr *) xmlMalloc(ctxt->txtMax *
-		                          sizeof(ctxt->txtTab[0]));
-        if (ctxt->txtTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "processing text");
-	    return;
-	}
-        ctxt->txturlTab = (xmlURL *) xmlMalloc(ctxt->txtMax *
-		                          sizeof(ctxt->txturlTab[0]));
-        if (ctxt->txturlTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "processing text");
-	    return;
-	}
-    }
-    if (ctxt->txtNr >= ctxt->txtMax) {
-	ctxt->txtMax *= 2;
-        ctxt->txtTab = (xmlNodePtr *) xmlRealloc(ctxt->txtTab,
-	             ctxt->txtMax * sizeof(ctxt->txtTab[0]));
-        if (ctxt->txtTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "processing text");
-	    return;
-	}
-        ctxt->txturlTab = (xmlURL *) xmlRealloc(ctxt->txturlTab,
-	             ctxt->txtMax * sizeof(ctxt->txturlTab[0]));
-        if (ctxt->txturlTab == NULL) {
-	    xmlXIncludeErrMemory(ctxt, NULL, "processing text");
-	    return;
-	}
-    }
-    ctxt->txtTab[ctxt->txtNr] = txt;
-    ctxt->txturlTab[ctxt->txtNr] = xmlStrdup(url);
-    ctxt->txtNr++;
-}
-
-/************************************************************************
- *									*
- *			Node copy with specific semantic		*
- *									*
- ************************************************************************/
-
-static xmlNodePtr
-xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
-	                xmlDocPtr source, xmlNodePtr elem);
-
-/**
- * xmlXIncludeCopyNode:
- * @ctxt:  the XInclude context
- * @target:  the document target
- * @source:  the document source
- * @elem:  the element
- *
- * Make a copy of the node while preserving the XInclude semantic
- * of the Infoset copy
- */
-static xmlNodePtr
-xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
-	            xmlDocPtr source, xmlNodePtr elem) {
-    xmlNodePtr result = NULL;
-
-    if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
-	(elem == NULL))
-	return(NULL);
-    if (elem->type == XML_DTD_NODE)
-	return(NULL);
-    if (elem->type == XML_DOCUMENT_NODE)
-	result = xmlXIncludeCopyNodeList(ctxt, target, source, elem->children);
-    else
-        result = xmlDocCopyNode(elem, target, 1);
-    return(result);
-}
-
-/**
- * xmlXIncludeCopyNodeList:
- * @ctxt:  the XInclude context
- * @target:  the document target
- * @source:  the document source
- * @elem:  the element list
- *
- * Make a copy of the node list while preserving the XInclude semantic
- * of the Infoset copy
- */
-static xmlNodePtr
-xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
-	                xmlDocPtr source, xmlNodePtr elem) {
-    xmlNodePtr cur, res, result = NULL, last = NULL;
-
-    if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
-	(elem == NULL))
-	return(NULL);
-    cur = elem;
-    while (cur != NULL) {
-	res = xmlXIncludeCopyNode(ctxt, target, source, cur);
-	if (res != NULL) {
-	    if (result == NULL) {
-		result = last = res;
-	    } else {
-		last->next = res;
-		res->prev = last;
-		last = res;
-	    }
-	}
-	cur = cur->next;
-    }
-    return(result);
-}
-
-/**
- * xmlXIncludeGetNthChild:
- * @cur:  the node
- * @no:  the child number
- *
- * Returns the @n'th element child of @cur or NULL
- */
-static xmlNodePtr
-xmlXIncludeGetNthChild(xmlNodePtr cur, int no) {
-    int i;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-        return(NULL);
-    cur = cur->children;
-    for (i = 0;i <= no;cur = cur->next) {
-	if (cur == NULL)
-	    return(cur);
-	if ((cur->type == XML_ELEMENT_NODE) ||
-	    (cur->type == XML_DOCUMENT_NODE) ||
-	    (cur->type == XML_HTML_DOCUMENT_NODE)) {
-	    i++;
-	    if (i == no)
-		break;
-	}
-    }
-    return(cur);
-}
-
-xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level); /* in xpointer.c */
-/**
- * xmlXIncludeCopyRange:
- * @ctxt:  the XInclude context
- * @target:  the document target
- * @source:  the document source
- * @obj:  the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- *
- * Returns an xmlNodePtr list or NULL.
- *         The caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
-	                xmlDocPtr source, xmlXPathObjectPtr range) {
-    /* pointers to generated nodes */
-    xmlNodePtr list = NULL, last = NULL, listParent = NULL;
-    xmlNodePtr tmp, tmp2;
-    /* pointers to traversal nodes */
-    xmlNodePtr start, cur, end;
-    int index1, index2;
-    int level = 0, lastLevel = 0, endLevel = 0, endFlag = 0;
-
-    if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
-	(range == NULL))
-	return(NULL);
-    if (range->type != XPATH_RANGE)
-	return(NULL);
-    start = (xmlNodePtr) range->user;
-
-    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
-	return(NULL);
-    end = range->user2;
-    if (end == NULL)
-	return(xmlDocCopyNode(start, target, 1));
-    if (end->type == XML_NAMESPACE_DECL)
-        return(NULL);
-
-    cur = start;
-    index1 = range->index;
-    index2 = range->index2;
-    /*
-     * level is depth of the current node under consideration
-     * list is the pointer to the root of the output tree
-     * listParent is a pointer to the parent of output tree (within
-       the included file) in case we need to add another level
-     * last is a pointer to the last node added to the output tree
-     * lastLevel is the depth of last (relative to the root)
-     */
-    while (cur != NULL) {
-	/*
-	 * Check if our output tree needs a parent
-	 */
-	if (level < 0) {
-	    while (level < 0) {
-	        /* copy must include namespaces and properties */
-	        tmp2 = xmlDocCopyNode(listParent, target, 2);
-	        xmlAddChild(tmp2, list);
-	        list = tmp2;
-	        listParent = listParent->parent;
-	        level++;
-	    }
-	    last = list;
-	    lastLevel = 0;
-	}
-	/*
-	 * Check whether we need to change our insertion point
-	 */
-	while (level < lastLevel) {
-	    last = last->parent;
-	    lastLevel --;
-	}
-	if (cur == end) {	/* Are we at the end of the range? */
-	    if (cur->type == XML_TEXT_NODE) {
-		const xmlChar *content = cur->content;
-		int len;
-
-		if (content == NULL) {
-		    tmp = xmlNewTextLen(NULL, 0);
-		} else {
-		    len = index2;
-		    if ((cur == start) && (index1 > 1)) {
-			content += (index1 - 1);
-			len -= (index1 - 1);
-		    } else {
-			len = index2;
-		    }
-		    tmp = xmlNewTextLen(content, len);
-		}
-		/* single sub text node selection */
-		if (list == NULL)
-		    return(tmp);
-		/* prune and return full set */
-		if (level == lastLevel)
-		    xmlAddNextSibling(last, tmp);
-		else
-		    xmlAddChild(last, tmp);
-		return(list);
-	    } else {	/* ending node not a text node */
-	        endLevel = level;	/* remember the level of the end node */
-		endFlag = 1;
-		/* last node - need to take care of properties + namespaces */
-		tmp = xmlDocCopyNode(cur, target, 2);
-		if (list == NULL) {
-		    list = tmp;
-		    listParent = cur->parent;
-		} else {
-		    if (level == lastLevel)
-			xmlAddNextSibling(last, tmp);
-		    else {
-			xmlAddChild(last, tmp);
-			lastLevel = level;
-		    }
-		}
-		last = tmp;
-
-		if (index2 > 1) {
-		    end = xmlXIncludeGetNthChild(cur, index2 - 1);
-		    index2 = 0;
-		}
-		if ((cur == start) && (index1 > 1)) {
-		    cur = xmlXIncludeGetNthChild(cur, index1 - 1);
-		    index1 = 0;
-		}  else {
-		    cur = cur->children;
-		}
-		level++;	/* increment level to show change */
-		/*
-		 * Now gather the remaining nodes from cur to end
-		 */
-		continue;	/* while */
-	    }
-	} else if (cur == start) {	/* Not at the end, are we at start? */
-	    if ((cur->type == XML_TEXT_NODE) ||
-		(cur->type == XML_CDATA_SECTION_NODE)) {
-		const xmlChar *content = cur->content;
-
-		if (content == NULL) {
-		    tmp = xmlNewTextLen(NULL, 0);
-		} else {
-		    if (index1 > 1) {
-			content += (index1 - 1);
-			index1 = 0;
-		    }
-		    tmp = xmlNewText(content);
-		}
-		last = list = tmp;
-		listParent = cur->parent;
-	    } else {		/* Not text node */
-	        /*
-		 * start of the range - need to take care of
-		 * properties and namespaces
-		 */
-		tmp = xmlDocCopyNode(cur, target, 2);
-		list = last = tmp;
-		listParent = cur->parent;
-		if (index1 > 1) {	/* Do we need to position? */
-		    cur = xmlXIncludeGetNthChild(cur, index1 - 1);
-		    level = lastLevel = 1;
-		    index1 = 0;
-		    /*
-		     * Now gather the remaining nodes from cur to end
-		     */
-		    continue; /* while */
-		}
-	    }
-	} else {
-	    tmp = NULL;
-	    switch (cur->type) {
-		case XML_DTD_NODE:
-		case XML_ELEMENT_DECL:
-		case XML_ATTRIBUTE_DECL:
-		case XML_ENTITY_NODE:
-		    /* Do not copy DTD informations */
-		    break;
-		case XML_ENTITY_DECL:
-		    /* handle crossing entities -> stack needed */
-		    break;
-		case XML_XINCLUDE_START:
-		case XML_XINCLUDE_END:
-		    /* don't consider it part of the tree content */
-		    break;
-		case XML_ATTRIBUTE_NODE:
-		    /* Humm, should not happen ! */
-		    break;
-		default:
-		    /*
-		     * Middle of the range - need to take care of
-		     * properties and namespaces
-		     */
-		    tmp = xmlDocCopyNode(cur, target, 2);
-		    break;
-	    }
-	    if (tmp != NULL) {
-		if (level == lastLevel)
-		    xmlAddNextSibling(last, tmp);
-		else {
-		    xmlAddChild(last, tmp);
-		    lastLevel = level;
-		}
-		last = tmp;
-	    }
-	}
-	/*
-	 * Skip to next node in document order
-	 */
-	cur = xmlXPtrAdvanceNode(cur, &level);
-	if (endFlag && (level >= endLevel))
-	    break;
-    }
-    return(list);
-}
-
-/**
- * xmlXIncludeBuildNodeList:
- * @ctxt:  the XInclude context
- * @target:  the document target
- * @source:  the document source
- * @obj:  the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- * This will drop Attributes and Namespace declarations.
- *
- * Returns an xmlNodePtr list or NULL.
- *         the caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
-	                xmlDocPtr source, xmlXPathObjectPtr obj) {
-    xmlNodePtr list = NULL, last = NULL;
-    int i;
-
-    if (source == NULL)
-	source = ctxt->doc;
-    if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
-	(obj == NULL))
-	return(NULL);
-    switch (obj->type) {
-        case XPATH_NODESET: {
-	    xmlNodeSetPtr set = obj->nodesetval;
-	    if (set == NULL)
-		return(NULL);
-	    for (i = 0;i < set->nodeNr;i++) {
-		if (set->nodeTab[i] == NULL)
-		    continue;
-		switch (set->nodeTab[i]->type) {
-		    case XML_TEXT_NODE:
-		    case XML_CDATA_SECTION_NODE:
-		    case XML_ELEMENT_NODE:
-		    case XML_ENTITY_REF_NODE:
-		    case XML_ENTITY_NODE:
-		    case XML_PI_NODE:
-		    case XML_COMMENT_NODE:
-		    case XML_DOCUMENT_NODE:
-		    case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
-		    case XML_DOCB_DOCUMENT_NODE:
-#endif
-		    case XML_XINCLUDE_END:
-			break;
-		    case XML_XINCLUDE_START: {
-	                xmlNodePtr tmp, cur = set->nodeTab[i];
-
-			cur = cur->next;
-			while (cur != NULL) {
-			    switch(cur->type) {
-				case XML_TEXT_NODE:
-				case XML_CDATA_SECTION_NODE:
-				case XML_ELEMENT_NODE:
-				case XML_ENTITY_REF_NODE:
-				case XML_ENTITY_NODE:
-				case XML_PI_NODE:
-				case XML_COMMENT_NODE:
-				    tmp = xmlXIncludeCopyNode(ctxt, target,
-							      source, cur);
-				    if (last == NULL) {
-					list = last = tmp;
-				    } else {
-					xmlAddNextSibling(last, tmp);
-					last = tmp;
-				    }
-				    cur = cur->next;
-				    continue;
-				default:
-				    break;
-			    }
-			    break;
-			}
-			continue;
-		    }
-		    case XML_ATTRIBUTE_NODE:
-		    case XML_NAMESPACE_DECL:
-		    case XML_DOCUMENT_TYPE_NODE:
-		    case XML_DOCUMENT_FRAG_NODE:
-		    case XML_NOTATION_NODE:
-		    case XML_DTD_NODE:
-		    case XML_ELEMENT_DECL:
-		    case XML_ATTRIBUTE_DECL:
-		    case XML_ENTITY_DECL:
-			continue; /* for */
-		}
-		if (last == NULL)
-		    list = last = xmlXIncludeCopyNode(ctxt, target, source,
-			                              set->nodeTab[i]);
-		else {
-		    xmlAddNextSibling(last,
-			    xmlXIncludeCopyNode(ctxt, target, source,
-				                set->nodeTab[i]));
-		    if (last->next != NULL)
-			last = last->next;
-		}
-	    }
-	    break;
-	}
-#ifdef LIBXML_XPTR_ENABLED
-	case XPATH_LOCATIONSET: {
-	    xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
-	    if (set == NULL)
-		return(NULL);
-	    for (i = 0;i < set->locNr;i++) {
-		if (last == NULL)
-		    list = last = xmlXIncludeCopyXPointer(ctxt, target, source,
-			                                  set->locTab[i]);
-		else
-		    xmlAddNextSibling(last,
-			    xmlXIncludeCopyXPointer(ctxt, target, source,
-				                    set->locTab[i]));
-		if (last != NULL) {
-		    while (last->next != NULL)
-			last = last->next;
-		}
-	    }
-	    break;
-	}
-	case XPATH_RANGE:
-	    return(xmlXIncludeCopyRange(ctxt, target, source, obj));
-#endif
-	case XPATH_POINT:
-	    /* points are ignored in XInclude */
-	    break;
-	default:
-	    break;
-    }
-    return(list);
-}
-/************************************************************************
- *									*
- *			XInclude I/O handling				*
- *									*
- ************************************************************************/
-
-typedef struct _xmlXIncludeMergeData xmlXIncludeMergeData;
-typedef xmlXIncludeMergeData *xmlXIncludeMergeDataPtr;
-struct _xmlXIncludeMergeData {
-    xmlDocPtr doc;
-    xmlXIncludeCtxtPtr ctxt;
-};
-
-/**
- * xmlXIncludeMergeOneEntity:
- * @ent: the entity
- * @doc:  the including doc
- * @nr: the entity name
- *
- * Inplements the merge of one entity
- */
-static void
-xmlXIncludeMergeEntity(xmlEntityPtr ent, xmlXIncludeMergeDataPtr data,
-	               xmlChar *name ATTRIBUTE_UNUSED) {
-    xmlEntityPtr ret, prev;
-    xmlDocPtr doc;
-    xmlXIncludeCtxtPtr ctxt;
-
-    if ((ent == NULL) || (data == NULL))
-	return;
-    ctxt = data->ctxt;
-    doc = data->doc;
-    if ((ctxt == NULL) || (doc == NULL))
-	return;
-    switch (ent->etype) {
-        case XML_INTERNAL_PARAMETER_ENTITY:
-        case XML_EXTERNAL_PARAMETER_ENTITY:
-        case XML_INTERNAL_PREDEFINED_ENTITY:
-	    return;
-        case XML_INTERNAL_GENERAL_ENTITY:
-        case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
-        case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
-	    break;
-    }
-    ret = xmlAddDocEntity(doc, ent->name, ent->etype, ent->ExternalID,
-			  ent->SystemID, ent->content);
-    if (ret != NULL) {
-	if (ent->URI != NULL)
-	    ret->URI = xmlStrdup(ent->URI);
-    } else {
-	prev = xmlGetDocEntity(doc, ent->name);
-	if (prev != NULL) {
-	    if (ent->etype != prev->etype)
-		goto error;
-
-	    if ((ent->SystemID != NULL) && (prev->SystemID != NULL)) {
-		if (!xmlStrEqual(ent->SystemID, prev->SystemID))
-		    goto error;
-	    } else if ((ent->ExternalID != NULL) &&
-		       (prev->ExternalID != NULL)) {
-		if (!xmlStrEqual(ent->ExternalID, prev->ExternalID))
-		    goto error;
-	    } else if ((ent->content != NULL) && (prev->content != NULL)) {
-		if (!xmlStrEqual(ent->content, prev->content))
-		    goto error;
-	    } else {
-		goto error;
-	    }
-
-	}
-    }
-    return;
-error:
-    switch (ent->etype) {
-        case XML_INTERNAL_PARAMETER_ENTITY:
-        case XML_EXTERNAL_PARAMETER_ENTITY:
-        case XML_INTERNAL_PREDEFINED_ENTITY:
-        case XML_INTERNAL_GENERAL_ENTITY:
-        case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
-	    return;
-        case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
-	    break;
-    }
-    xmlXIncludeErr(ctxt, (xmlNodePtr) ent, XML_XINCLUDE_ENTITY_DEF_MISMATCH,
-                   "mismatch in redefinition of entity %s\n",
-		   ent->name);
-}
-
-/**
- * xmlXIncludeMergeEntities:
- * @ctxt: an XInclude context
- * @doc:  the including doc
- * @from:  the included doc
- *
- * Inplements the entity merge
- *
- * Returns 0 if merge succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeMergeEntities(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
-	                 xmlDocPtr from) {
-    xmlNodePtr cur;
-    xmlDtdPtr target, source;
-
-    if (ctxt == NULL)
-	return(-1);
-
-    if ((from == NULL) || (from->intSubset == NULL))
-	return(0);
-
-    target = doc->intSubset;
-    if (target == NULL) {
-	cur = xmlDocGetRootElement(doc);
-	if (cur == NULL)
-	    return(-1);
-        target = xmlCreateIntSubset(doc, cur->name, NULL, NULL);
-	if (target == NULL)
-	    return(-1);
-    }
-
-    source = from->intSubset;
-    if ((source != NULL) && (source->entities != NULL)) {
-	xmlXIncludeMergeData data;
-
-	data.ctxt = ctxt;
-	data.doc = doc;
-
-	xmlHashScan((xmlHashTablePtr) source->entities,
-		    (xmlHashScanner) xmlXIncludeMergeEntity, &data);
-    }
-    source = from->extSubset;
-    if ((source != NULL) && (source->entities != NULL)) {
-	xmlXIncludeMergeData data;
-
-	data.ctxt = ctxt;
-	data.doc = doc;
-
-	/*
-	 * don't duplicate existing stuff when external subsets are the same
-	 */
-	if ((!xmlStrEqual(target->ExternalID, source->ExternalID)) &&
-	    (!xmlStrEqual(target->SystemID, source->SystemID))) {
-	    xmlHashScan((xmlHashTablePtr) source->entities,
-			(xmlHashScanner) xmlXIncludeMergeEntity, &data);
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlXIncludeLoadDoc:
- * @ctxt:  the XInclude context
- * @url:  the associated URL
- * @nr:  the xinclude node number
- *
- * Load the document, and store the result in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
-    xmlDocPtr doc;
-    xmlURIPtr uri;
-    xmlChar *URL;
-    xmlChar *fragment = NULL;
-    int i = 0;
-#ifdef LIBXML_XPTR_ENABLED
-    int saveFlags;
-#endif
-
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
-#endif
-    /*
-     * Check the URL and remove any fragment identifier
-     */
-    uri = xmlParseURI((const char *)url);
-    if (uri == NULL) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	               XML_XINCLUDE_HREF_URI,
-		       "invalid value URI %s\n", url);
-	return(-1);
-    }
-    if (uri->fragment != NULL) {
-	fragment = (xmlChar *) uri->fragment;
-	uri->fragment = NULL;
-    }
-    if ((ctxt->incTab != NULL) && (ctxt->incTab[nr] != NULL) &&
-        (ctxt->incTab[nr]->fragment != NULL)) {
-	if (fragment != NULL) xmlFree(fragment);
-	fragment = xmlStrdup(ctxt->incTab[nr]->fragment);
-    }
-    URL = xmlSaveUri(uri);
-    xmlFreeURI(uri);
-    if (URL == NULL) {
-        if (ctxt->incTab != NULL)
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-			   XML_XINCLUDE_HREF_URI,
-			   "invalid value URI %s\n", url);
-	else
-	    xmlXIncludeErr(ctxt, NULL,
-			   XML_XINCLUDE_HREF_URI,
-			   "invalid value URI %s\n", url);
-	if (fragment != NULL)
-	    xmlFree(fragment);
-	return(-1);
-    }
-
-    /*
-     * Handling of references to the local document are done
-     * directly through ctxt->doc.
-     */
-    if ((URL[0] == 0) || (URL[0] == '#') ||
-	((ctxt->doc != NULL) && (xmlStrEqual(URL, ctxt->doc->URL)))) {
-	doc = NULL;
-        goto loaded;
-    }
-
-    /*
-     * Prevent reloading twice the document.
-     */
-    for (i = 0; i < ctxt->incNr; i++) {
-	if ((xmlStrEqual(URL, ctxt->incTab[i]->URI)) &&
-	    (ctxt->incTab[i]->doc != NULL)) {
-	    doc = ctxt->incTab[i]->doc;
-#ifdef DEBUG_XINCLUDE
-	    printf("Already loaded %s\n", URL);
-#endif
-	    goto loaded;
-	}
-    }
-
-    /*
-     * Load it.
-     */
-#ifdef DEBUG_XINCLUDE
-    printf("loading %s\n", URL);
-#endif
-#ifdef LIBXML_XPTR_ENABLED
-    /*
-     * If this is an XPointer evaluation, we want to assure that
-     * all entities have been resolved prior to processing the
-     * referenced document
-     */
-    saveFlags = ctxt->parseFlags;
-    if (fragment != NULL) {	/* if this is an XPointer eval */
-	ctxt->parseFlags |= XML_PARSE_NOENT;
-    }
-#endif
-
-    doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
-#ifdef LIBXML_XPTR_ENABLED
-    ctxt->parseFlags = saveFlags;
-#endif
-    if (doc == NULL) {
-	xmlFree(URL);
-	if (fragment != NULL)
-	    xmlFree(fragment);
-	return(-1);
-    }
-    ctxt->incTab[nr]->doc = doc;
-    /*
-     * It's possible that the requested URL has been mapped to a
-     * completely different location (e.g. through a catalog entry).
-     * To check for this, we compare the URL with that of the doc
-     * and change it if they disagree (bug 146988).
-     */
-   if (!xmlStrEqual(URL, doc->URL)) {
-       xmlFree(URL);
-       URL = xmlStrdup(doc->URL);
-   }
-    for (i = nr + 1; i < ctxt->incNr; i++) {
-	if (xmlStrEqual(URL, ctxt->incTab[i]->URI)) {
-	    ctxt->incTab[nr]->count++;
-#ifdef DEBUG_XINCLUDE
-	    printf("Increasing %s count since reused\n", URL);
-#endif
-            break;
-	}
-    }
-
-    /*
-     * Make sure we have all entities fixed up
-     */
-    xmlXIncludeMergeEntities(ctxt, ctxt->doc, doc);
-
-    /*
-     * We don't need the DTD anymore, free up space
-    if (doc->intSubset != NULL) {
-	xmlUnlinkNode((xmlNodePtr) doc->intSubset);
-	xmlFreeNode((xmlNodePtr) doc->intSubset);
-	doc->intSubset = NULL;
-    }
-    if (doc->extSubset != NULL) {
-	xmlUnlinkNode((xmlNodePtr) doc->extSubset);
-	xmlFreeNode((xmlNodePtr) doc->extSubset);
-	doc->extSubset = NULL;
-    }
-     */
-    xmlXIncludeRecurseDoc(ctxt, doc, URL);
-
-loaded:
-    if (fragment == NULL) {
-	/*
-	 * Add the top children list as the replacement copy.
-	 */
-	if (doc == NULL)
-	{
-	    /* Hopefully a DTD declaration won't be copied from
-	     * the same document */
-	    ctxt->incTab[nr]->inc = xmlCopyNodeList(ctxt->doc->children);
-	} else {
-	    ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc,
-		                                       doc, doc->children);
-	}
-    }
-#ifdef LIBXML_XPTR_ENABLED
-    else {
-	/*
-	 * Computes the XPointer expression and make a copy used
-	 * as the replacement copy.
-	 */
-	xmlXPathObjectPtr xptr;
-	xmlXPathContextPtr xptrctxt;
-	xmlNodeSetPtr set;
-
-	if (doc == NULL) {
-	    xptrctxt = xmlXPtrNewContext(ctxt->doc, ctxt->incTab[nr]->ref,
-		                         NULL);
-	} else {
-	    xptrctxt = xmlXPtrNewContext(doc, NULL, NULL);
-	}
-	if (xptrctxt == NULL) {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_XPTR_FAILED,
-			   "could not create XPointer context\n", NULL);
-	    xmlFree(URL);
-	    xmlFree(fragment);
-	    return(-1);
-	}
-	xptr = xmlXPtrEval(fragment, xptrctxt);
-	if (xptr == NULL) {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_XPTR_FAILED,
-			   "XPointer evaluation failed: #%s\n",
-			   fragment);
-	    xmlXPathFreeContext(xptrctxt);
-	    xmlFree(URL);
-	    xmlFree(fragment);
-	    return(-1);
-	}
-	switch (xptr->type) {
-	    case XPATH_UNDEFINED:
-	    case XPATH_BOOLEAN:
-	    case XPATH_NUMBER:
-	    case XPATH_STRING:
-	    case XPATH_POINT:
-	    case XPATH_USERS:
-	    case XPATH_XSLT_TREE:
-		xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-		               XML_XINCLUDE_XPTR_RESULT,
-			       "XPointer is not a range: #%s\n",
-			       fragment);
-		xmlXPathFreeContext(xptrctxt);
-		xmlFree(URL);
-		xmlFree(fragment);
-		return(-1);
-	    case XPATH_NODESET:
-	        if ((xptr->nodesetval == NULL) ||
-		    (xptr->nodesetval->nodeNr <= 0)) {
-		    xmlXPathFreeContext(xptrctxt);
-		    xmlFree(URL);
-		    xmlFree(fragment);
-		    return(-1);
-		}
-
-	    case XPATH_RANGE:
-	    case XPATH_LOCATIONSET:
-		break;
-	}
-	set = xptr->nodesetval;
-	if (set != NULL) {
-	    for (i = 0;i < set->nodeNr;i++) {
-		if (set->nodeTab[i] == NULL)
-		    continue;
-		switch (set->nodeTab[i]->type) {
-		    case XML_ELEMENT_NODE:
-		    case XML_TEXT_NODE:
-		    case XML_CDATA_SECTION_NODE:
-		    case XML_ENTITY_REF_NODE:
-		    case XML_ENTITY_NODE:
-		    case XML_PI_NODE:
-		    case XML_COMMENT_NODE:
-		    case XML_DOCUMENT_NODE:
-		    case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
-		    case XML_DOCB_DOCUMENT_NODE:
-#endif
-			continue;
-
-		    case XML_ATTRIBUTE_NODE:
-			xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-			               XML_XINCLUDE_XPTR_RESULT,
-				       "XPointer selects an attribute: #%s\n",
-				       fragment);
-			set->nodeTab[i] = NULL;
-			continue;
-		    case XML_NAMESPACE_DECL:
-			xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-			               XML_XINCLUDE_XPTR_RESULT,
-				       "XPointer selects a namespace: #%s\n",
-				       fragment);
-			set->nodeTab[i] = NULL;
-			continue;
-		    case XML_DOCUMENT_TYPE_NODE:
-		    case XML_DOCUMENT_FRAG_NODE:
-		    case XML_NOTATION_NODE:
-		    case XML_DTD_NODE:
-		    case XML_ELEMENT_DECL:
-		    case XML_ATTRIBUTE_DECL:
-		    case XML_ENTITY_DECL:
-		    case XML_XINCLUDE_START:
-		    case XML_XINCLUDE_END:
-			xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-			               XML_XINCLUDE_XPTR_RESULT,
-				   "XPointer selects unexpected nodes: #%s\n",
-				       fragment);
-			set->nodeTab[i] = NULL;
-			set->nodeTab[i] = NULL;
-			continue; /* for */
-		}
-	    }
-	}
-	if (doc == NULL) {
-	    ctxt->incTab[nr]->xptr = xptr;
-	    ctxt->incTab[nr]->inc = NULL;
-	} else {
-	    ctxt->incTab[nr]->inc =
-		xmlXIncludeCopyXPointer(ctxt, ctxt->doc, doc, xptr);
-	    xmlXPathFreeObject(xptr);
-	}
-	xmlXPathFreeContext(xptrctxt);
-	xmlFree(fragment);
-    }
-#endif
-
-    /*
-     * Do the xml:base fixup if needed
-     */
-    if ((doc != NULL) && (URL != NULL) &&
-        (!(ctxt->parseFlags & XML_PARSE_NOBASEFIX)) &&
-	(!(doc->parseFlags & XML_PARSE_NOBASEFIX))) {
-	xmlNodePtr node;
-	xmlChar *base;
-	xmlChar *curBase;
-
-	/*
-	 * The base is only adjusted if "necessary", i.e. if the xinclude node
-	 * has a base specified, or the URL is relative
-	 */
-	base = xmlGetNsProp(ctxt->incTab[nr]->ref, BAD_CAST "base",
-			XML_XML_NAMESPACE);
-	if (base == NULL) {
-	    /*
-	     * No xml:base on the xinclude node, so we check whether the
-	     * URI base is different than (relative to) the context base
-	     */
-	    curBase = xmlBuildRelativeURI(URL, ctxt->base);
-	    if (curBase == NULL) {	/* Error return */
-	        xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	               XML_XINCLUDE_HREF_URI,
-		       "trying to build relative URI from %s\n", URL);
-	    } else {
-		/* If the URI doesn't contain a slash, it's not relative */
-	        if (!xmlStrchr(curBase, (xmlChar) '/'))
-		    xmlFree(curBase);
-		else
-		    base = curBase;
-	    }
-	}
-	if (base != NULL) {	/* Adjustment may be needed */
-	    node = ctxt->incTab[nr]->inc;
-	    while (node != NULL) {
-		/* Only work on element nodes */
-		if (node->type == XML_ELEMENT_NODE) {
-		    curBase = xmlNodeGetBase(node->doc, node);
-		    /* If no current base, set it */
-		    if (curBase == NULL) {
-			xmlNodeSetBase(node, base);
-		    } else {
-			/*
-			 * If the current base is the same as the
-			 * URL of the document, then reset it to be
-			 * the specified xml:base or the relative URI
-			 */
-			if (xmlStrEqual(curBase, node->doc->URL)) {
-			    xmlNodeSetBase(node, base);
-			} else {
-			    /*
-			     * If the element already has an xml:base
-			     * set, then relativise it if necessary
-			     */
-			    xmlChar *xmlBase;
-			    xmlBase = xmlGetNsProp(node,
-					    BAD_CAST "base",
-					    XML_XML_NAMESPACE);
-			    if (xmlBase != NULL) {
-				xmlChar *relBase;
-				relBase = xmlBuildURI(xmlBase, base);
-				if (relBase == NULL) { /* error */
-				    xmlXIncludeErr(ctxt,
-						ctxt->incTab[nr]->ref,
-						XML_XINCLUDE_HREF_URI,
-					"trying to rebuild base from %s\n",
-						xmlBase);
-				} else {
-				    xmlNodeSetBase(node, relBase);
-				    xmlFree(relBase);
-				}
-				xmlFree(xmlBase);
-			    }
-			}
-			xmlFree(curBase);
-		    }
-		}
-	        node = node->next;
-	    }
-	    xmlFree(base);
-	}
-    }
-    if ((nr < ctxt->incNr) && (ctxt->incTab[nr]->doc != NULL) &&
-	(ctxt->incTab[nr]->count <= 1)) {
-#ifdef DEBUG_XINCLUDE
-        printf("freeing %s\n", ctxt->incTab[nr]->doc->URL);
-#endif
-	xmlFreeDoc(ctxt->incTab[nr]->doc);
-	ctxt->incTab[nr]->doc = NULL;
-    }
-    xmlFree(URL);
-    return(0);
-}
-
-/**
- * xmlXIncludeLoadTxt:
- * @ctxt:  the XInclude context
- * @url:  the associated URL
- * @nr:  the xinclude node number
- *
- * Load the content, and store the result in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
-    xmlParserInputBufferPtr buf;
-    xmlNodePtr node;
-    xmlURIPtr uri;
-    xmlChar *URL;
-    int i;
-    xmlChar *encoding = NULL;
-    xmlCharEncoding enc = (xmlCharEncoding) 0;
-    xmlParserCtxtPtr pctxt;
-    xmlParserInputPtr inputStream;
-    int xinclude_multibyte_fallback_used = 0;
-
-    /*
-     * Check the URL and remove any fragment identifier
-     */
-    uri = xmlParseURI((const char *)url);
-    if (uri == NULL) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
-	               "invalid value URI %s\n", url);
-	return(-1);
-    }
-    if (uri->fragment != NULL) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_TEXT_FRAGMENT,
-	               "fragment identifier forbidden for text: %s\n",
-		       (const xmlChar *) uri->fragment);
-	xmlFreeURI(uri);
-	return(-1);
-    }
-    URL = xmlSaveUri(uri);
-    xmlFreeURI(uri);
-    if (URL == NULL) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
-	               "invalid value URI %s\n", url);
-	return(-1);
-    }
-
-    /*
-     * Handling of references to the local document are done
-     * directly through ctxt->doc.
-     */
-    if (URL[0] == 0) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	               XML_XINCLUDE_TEXT_DOCUMENT,
-		       "text serialization of document not available\n", NULL);
-	xmlFree(URL);
-	return(-1);
-    }
-
-    /*
-     * Prevent reloading twice the document.
-     */
-    for (i = 0; i < ctxt->txtNr; i++) {
-	if (xmlStrEqual(URL, ctxt->txturlTab[i])) {
-	    node = xmlCopyNode(ctxt->txtTab[i], 1);
-	    goto loaded;
-	}
-    }
-    /*
-     * Try to get the encoding if available
-     */
-    if ((ctxt->incTab[nr] != NULL) && (ctxt->incTab[nr]->ref != NULL)) {
-	encoding = xmlGetProp(ctxt->incTab[nr]->ref, XINCLUDE_PARSE_ENCODING);
-    }
-    if (encoding != NULL) {
-	/*
-	 * TODO: we should not have to remap to the xmlCharEncoding
-	 *       predefined set, a better interface than
-	 *       xmlParserInputBufferCreateFilename should allow any
-	 *       encoding supported by iconv
-	 */
-        enc = xmlParseCharEncoding((const char *) encoding);
-	if (enc == XML_CHAR_ENCODING_ERROR) {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_UNKNOWN_ENCODING,
-			   "encoding %s not supported\n", encoding);
-	    xmlFree(encoding);
-	    xmlFree(URL);
-	    return(-1);
-	}
-	xmlFree(encoding);
-    }
-
-    /*
-     * Load it.
-     */
-    pctxt = xmlNewParserCtxt();
-    inputStream = xmlLoadExternalEntity((const char*)URL, NULL, pctxt);
-    if(inputStream == NULL) {
-	xmlFreeParserCtxt(pctxt);
-	xmlFree(URL);
-	return(-1);
-    }
-    buf = inputStream->buf;
-    if (buf == NULL) {
-	xmlFreeInputStream (inputStream);
-	xmlFreeParserCtxt(pctxt);
-	xmlFree(URL);
-	return(-1);
-    }
-    if (buf->encoder)
-	xmlCharEncCloseFunc(buf->encoder);
-    buf->encoder = xmlGetCharEncodingHandler(enc);
-    node = xmlNewText(NULL);
-
-    /*
-     * Scan all chars from the resource and add the to the node
-     */
-xinclude_multibyte_fallback:
-    while (xmlParserInputBufferRead(buf, 128) > 0) {
-	int len;
-	const xmlChar *content;
-
-	content = xmlBufContent(buf->buffer);
-	len = xmlBufLength(buf->buffer);
-	for (i = 0;i < len;) {
-	    int cur;
-	    int l;
-
-	    cur = xmlStringCurrentChar(NULL, &content[i], &l);
-	    if (!IS_CHAR(cur)) {
-		/* Handle splitted multibyte char at buffer boundary */
-		if (((len - i) < 4) && (!xinclude_multibyte_fallback_used)) {
-		    xinclude_multibyte_fallback_used = 1;
-		    xmlBufShrink(buf->buffer, i);
-		    goto xinclude_multibyte_fallback;
-		} else {
-		    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-				   XML_XINCLUDE_INVALID_CHAR,
-				   "%s contains invalid char\n", URL);
-		    xmlFreeParserInputBuffer(buf);
-		    xmlFree(URL);
-		    return(-1);
-		}
-	    } else {
-		xinclude_multibyte_fallback_used = 0;
-		xmlNodeAddContentLen(node, &content[i], l);
-	    }
-	    i += l;
-	}
-	xmlBufShrink(buf->buffer, len);
-    }
-    xmlFreeParserCtxt(pctxt);
-    xmlXIncludeAddTxt(ctxt, node, URL);
-    xmlFreeInputStream(inputStream);
-
-loaded:
-    /*
-     * Add the element as the replacement copy.
-     */
-    ctxt->incTab[nr]->inc = node;
-    xmlFree(URL);
-    return(0);
-}
-
-/**
- * xmlXIncludeLoadFallback:
- * @ctxt:  the XInclude context
- * @fallback:  the fallback node
- * @nr:  the xinclude node number
- *
- * Load the content of the fallback node, and store the result
- * in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
-    xmlXIncludeCtxtPtr newctxt;
-    int ret = 0;
-
-    if ((fallback == NULL) || (fallback->type == XML_NAMESPACE_DECL) ||
-        (ctxt == NULL))
-	return(-1);
-    if (fallback->children != NULL) {
-	/*
-	 * It's possible that the fallback also has 'includes'
-	 * (Bug 129969), so we re-process the fallback just in case
-	 */
-	newctxt = xmlXIncludeNewContext(ctxt->doc);
-	if (newctxt == NULL)
-	    return (-1);
-	newctxt->_private = ctxt->_private;
-	newctxt->base = xmlStrdup(ctxt->base);	/* Inherit the base from the existing context */
-	xmlXIncludeSetFlags(newctxt, ctxt->parseFlags);
-	ret = xmlXIncludeDoProcess(newctxt, ctxt->doc, fallback->children);
-	if (ctxt->nbErrors > 0)
-	    ret = -1;
-	else if (ret > 0)
-	    ret = 0;	/* xmlXIncludeDoProcess can return +ve number */
-	xmlXIncludeFreeContext(newctxt);
-
-	ctxt->incTab[nr]->inc = xmlDocCopyNodeList(ctxt->doc,
-	                                           fallback->children);
-    } else {
-        ctxt->incTab[nr]->inc = NULL;
-	ctxt->incTab[nr]->emptyFb = 1;	/* flag empty callback */
-    }
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *			XInclude Processing				*
- *									*
- ************************************************************************/
-
-/**
- * xmlXIncludePreProcessNode:
- * @ctxt: an XInclude context
- * @node: an XInclude node
- *
- * Implement the XInclude preprocessing, currently just adding the element
- * for further processing.
- *
- * Returns the result list or NULL in case of error
- */
-static xmlNodePtr
-xmlXIncludePreProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
-    xmlXIncludeAddNode(ctxt, node);
-    return(NULL);
-}
-
-/**
- * xmlXIncludeLoadNode:
- * @ctxt: an XInclude context
- * @nr: the node number
- *
- * Find and load the infoset replacement for the given node.
- *
- * Returns 0 if substitution succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
-    xmlNodePtr cur;
-    xmlChar *href;
-    xmlChar *parse;
-    xmlChar *base;
-    xmlChar *oldBase;
-    xmlChar *URI;
-    int xml = 1; /* default Issue 64 */
-    int ret;
-
-    if (ctxt == NULL)
-	return(-1);
-    if ((nr < 0) || (nr >= ctxt->incNr))
-	return(-1);
-    cur = ctxt->incTab[nr]->ref;
-    if (cur == NULL)
-	return(-1);
-
-    /*
-     * read the attributes
-     */
-    href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
-    if (href == NULL) {
-	href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
-	if (href == NULL)
-	    return(-1);
-    }
-    parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
-    if (parse != NULL) {
-	if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
-	    xml = 1;
-	else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
-	    xml = 0;
-	else {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_PARSE_VALUE,
-			   "invalid value %s for 'parse'\n", parse);
-	    if (href != NULL)
-		xmlFree(href);
-	    if (parse != NULL)
-		xmlFree(parse);
-	    return(-1);
-	}
-    }
-
-    /*
-     * compute the URI
-     */
-    base = xmlNodeGetBase(ctxt->doc, cur);
-    if (base == NULL) {
-	URI = xmlBuildURI(href, ctxt->doc->URL);
-    } else {
-	URI = xmlBuildURI(href, base);
-    }
-    if (URI == NULL) {
-	xmlChar *escbase;
-	xmlChar *eschref;
-	/*
-	 * Some escaping may be needed
-	 */
-	escbase = xmlURIEscape(base);
-	eschref = xmlURIEscape(href);
-	URI = xmlBuildURI(eschref, escbase);
-	if (escbase != NULL)
-	    xmlFree(escbase);
-	if (eschref != NULL)
-	    xmlFree(eschref);
-    }
-    if (URI == NULL) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	               XML_XINCLUDE_HREF_URI, "failed build URL\n", NULL);
-	if (parse != NULL)
-	    xmlFree(parse);
-	if (href != NULL)
-	    xmlFree(href);
-	if (base != NULL)
-	    xmlFree(base);
-	return(-1);
-    }
-#ifdef DEBUG_XINCLUDE
-    xmlGenericError(xmlGenericErrorContext, "parse: %s\n",
-	    xml ? "xml": "text");
-    xmlGenericError(xmlGenericErrorContext, "URI: %s\n", URI);
-#endif
-
-    /*
-     * Save the base for this include (saving the current one)
-     */
-    oldBase = ctxt->base;
-    ctxt->base = base;
-
-    if (xml) {
-	ret = xmlXIncludeLoadDoc(ctxt, URI, nr);
-	/* xmlXIncludeGetFragment(ctxt, cur, URI); */
-    } else {
-	ret = xmlXIncludeLoadTxt(ctxt, URI, nr);
-    }
-
-    /*
-     * Restore the original base before checking for fallback
-     */
-    ctxt->base = oldBase;
-
-    if (ret < 0) {
-	xmlNodePtr children;
-
-	/*
-	 * Time to try a fallback if availble
-	 */
-#ifdef DEBUG_XINCLUDE
-	xmlGenericError(xmlGenericErrorContext, "error looking for fallback\n");
-#endif
-	children = cur->children;
-	while (children != NULL) {
-	    if ((children->type == XML_ELEMENT_NODE) &&
-		(children->ns != NULL) &&
-		(xmlStrEqual(children->name, XINCLUDE_FALLBACK)) &&
-		((xmlStrEqual(children->ns->href, XINCLUDE_NS)) ||
-		 (xmlStrEqual(children->ns->href, XINCLUDE_OLD_NS)))) {
-		ret = xmlXIncludeLoadFallback(ctxt, children, nr);
-		if (ret == 0)
-		    break;
-	    }
-	    children = children->next;
-	}
-    }
-    if (ret < 0) {
-	xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	               XML_XINCLUDE_NO_FALLBACK,
-		       "could not load %s, and no fallback was found\n",
-		       URI);
-    }
-
-    /*
-     * Cleanup
-     */
-    if (URI != NULL)
-	xmlFree(URI);
-    if (parse != NULL)
-	xmlFree(parse);
-    if (href != NULL)
-	xmlFree(href);
-    if (base != NULL)
-	xmlFree(base);
-    return(0);
-}
-
-/**
- * xmlXIncludeIncludeNode:
- * @ctxt: an XInclude context
- * @nr: the node number
- *
- * Inplement the infoset replacement for the given node
- *
- * Returns 0 if substitution succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
-    xmlNodePtr cur, end, list, tmp;
-
-    if (ctxt == NULL)
-	return(-1);
-    if ((nr < 0) || (nr >= ctxt->incNr))
-	return(-1);
-    cur = ctxt->incTab[nr]->ref;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(-1);
-
-    /*
-     * If we stored an XPointer a late computation may be needed
-     */
-    if ((ctxt->incTab[nr]->inc == NULL) &&
-	(ctxt->incTab[nr]->xptr != NULL)) {
-	ctxt->incTab[nr]->inc =
-	    xmlXIncludeCopyXPointer(ctxt, ctxt->doc, ctxt->doc,
-		                    ctxt->incTab[nr]->xptr);
-	xmlXPathFreeObject(ctxt->incTab[nr]->xptr);
-	ctxt->incTab[nr]->xptr = NULL;
-    }
-    list = ctxt->incTab[nr]->inc;
-    ctxt->incTab[nr]->inc = NULL;
-
-    /*
-     * Check against the risk of generating a multi-rooted document
-     */
-    if ((cur->parent != NULL) &&
-	(cur->parent->type != XML_ELEMENT_NODE)) {
-	int nb_elem = 0;
-
-	tmp = list;
-	while (tmp != NULL) {
-	    if (tmp->type == XML_ELEMENT_NODE)
-		nb_elem++;
-	    tmp = tmp->next;
-	}
-	if (nb_elem > 1) {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_MULTIPLE_ROOT,
-		       "XInclude error: would result in multiple root nodes\n",
-			   NULL);
-	    return(-1);
-	}
-    }
-
-    if (ctxt->parseFlags & XML_PARSE_NOXINCNODE) {
-	/*
-	 * Add the list of nodes
-	 */
-	while (list != NULL) {
-	    end = list;
-	    list = list->next;
-
-	    xmlAddPrevSibling(cur, end);
-	}
-	xmlUnlinkNode(cur);
-	xmlFreeNode(cur);
-    } else {
-	/*
-	 * Change the current node as an XInclude start one, and add an
-	 * XInclude end one
-	 */
-	cur->type = XML_XINCLUDE_START;
-	end = xmlNewDocNode(cur->doc, cur->ns, cur->name, NULL);
-	if (end == NULL) {
-	    xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-	                   XML_XINCLUDE_BUILD_FAILED,
-			   "failed to build node\n", NULL);
-	    return(-1);
-	}
-	end->type = XML_XINCLUDE_END;
-	xmlAddNextSibling(cur, end);
-
-	/*
-	 * Add the list of nodes
-	 */
-	while (list != NULL) {
-	    cur = list;
-	    list = list->next;
-
-	    xmlAddPrevSibling(end, cur);
-	}
-    }
-
-
-    return(0);
-}
-
-/**
- * xmlXIncludeTestNode:
- * @ctxt: the XInclude processing context
- * @node: an XInclude node
- *
- * test if the node is an XInclude node
- *
- * Returns 1 true, 0 otherwise
- */
-static int
-xmlXIncludeTestNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
-    if (node == NULL)
-	return(0);
-    if (node->type != XML_ELEMENT_NODE)
-	return(0);
-    if (node->ns == NULL)
-	return(0);
-    if ((xmlStrEqual(node->ns->href, XINCLUDE_NS)) ||
-        (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS))) {
-	if (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS)) {
-	    if (ctxt->legacy == 0) {
-#if 0 /* wait for the XML Core Working Group to get something stable ! */
-		xmlXIncludeWarn(ctxt, node, XML_XINCLUDE_DEPRECATED_NS,
-	               "Deprecated XInclude namespace found, use %s",
-		                XINCLUDE_NS);
-#endif
-	        ctxt->legacy = 1;
-	    }
-	}
-	if (xmlStrEqual(node->name, XINCLUDE_NODE)) {
-	    xmlNodePtr child = node->children;
-	    int nb_fallback = 0;
-
-	    while (child != NULL) {
-		if ((child->type == XML_ELEMENT_NODE) &&
-		    (child->ns != NULL) &&
-		    ((xmlStrEqual(child->ns->href, XINCLUDE_NS)) ||
-		     (xmlStrEqual(child->ns->href, XINCLUDE_OLD_NS)))) {
-		    if (xmlStrEqual(child->name, XINCLUDE_NODE)) {
-			xmlXIncludeErr(ctxt, node,
-			               XML_XINCLUDE_INCLUDE_IN_INCLUDE,
-				       "%s has an 'include' child\n",
-				       XINCLUDE_NODE);
-			return(0);
-		    }
-		    if (xmlStrEqual(child->name, XINCLUDE_FALLBACK)) {
-			nb_fallback++;
-		    }
-		}
-		child = child->next;
-	    }
-	    if (nb_fallback > 1) {
-		xmlXIncludeErr(ctxt, node, XML_XINCLUDE_FALLBACKS_IN_INCLUDE,
-			       "%s has multiple fallback children\n",
-		               XINCLUDE_NODE);
-		return(0);
-	    }
-	    return(1);
-	}
-	if (xmlStrEqual(node->name, XINCLUDE_FALLBACK)) {
-	    if ((node->parent == NULL) ||
-		(node->parent->type != XML_ELEMENT_NODE) ||
-		(node->parent->ns == NULL) ||
-		((!xmlStrEqual(node->parent->ns->href, XINCLUDE_NS)) &&
-		 (!xmlStrEqual(node->parent->ns->href, XINCLUDE_OLD_NS))) ||
-		(!xmlStrEqual(node->parent->name, XINCLUDE_NODE))) {
-		xmlXIncludeErr(ctxt, node,
-		               XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE,
-			       "%s is not the child of an 'include'\n",
-			       XINCLUDE_FALLBACK);
-	    }
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlXIncludeDoProcess:
- * @ctxt: the XInclude processing context
- * @doc: an XML document
- * @tree: the top of the tree to process
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-static int
-xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
-    xmlNodePtr cur;
-    int ret = 0;
-    int i, start;
-
-    if ((doc == NULL) || (tree == NULL) || (tree->type == XML_NAMESPACE_DECL))
-	return(-1);
-    if (ctxt == NULL)
-	return(-1);
-
-    if (doc->URL != NULL) {
-	ret = xmlXIncludeURLPush(ctxt, doc->URL);
-	if (ret < 0)
-	    return(-1);
-    }
-    start = ctxt->incNr;
-
-    /*
-     * First phase: lookup the elements in the document
-     */
-    cur = tree;
-    if (xmlXIncludeTestNode(ctxt, cur) == 1)
-	xmlXIncludePreProcessNode(ctxt, cur);
-    while ((cur != NULL) && (cur != tree->parent)) {
-	/* TODO: need to work on entities -> stack */
-	if ((cur->children != NULL) &&
-	    (cur->children->type != XML_ENTITY_DECL) &&
-	    (cur->children->type != XML_XINCLUDE_START) &&
-	    (cur->children->type != XML_XINCLUDE_END)) {
-	    cur = cur->children;
-	    if (xmlXIncludeTestNode(ctxt, cur))
-		xmlXIncludePreProcessNode(ctxt, cur);
-	} else if (cur->next != NULL) {
-	    cur = cur->next;
-	    if (xmlXIncludeTestNode(ctxt, cur))
-		xmlXIncludePreProcessNode(ctxt, cur);
-	} else {
-	    if (cur == tree)
-	        break;
-	    do {
-		cur = cur->parent;
-		if ((cur == NULL) || (cur == tree->parent))
-		    break; /* do */
-		if (cur->next != NULL) {
-		    cur = cur->next;
-		    if (xmlXIncludeTestNode(ctxt, cur))
-			xmlXIncludePreProcessNode(ctxt, cur);
-		    break; /* do */
-		}
-	    } while (cur != NULL);
-	}
-    }
-
-    /*
-     * Second Phase : collect the infosets fragments
-     */
-    for (i = start;i < ctxt->incNr; i++) {
-        xmlXIncludeLoadNode(ctxt, i);
-	ret++;
-    }
-
-    /*
-     * Third phase: extend the original document infoset.
-     *
-     * Originally we bypassed the inclusion if there were any errors
-     * encountered on any of the XIncludes.  A bug was raised (bug
-     * 132588) requesting that we output the XIncludes without error,
-     * so the check for inc!=NULL || xptr!=NULL was put in.  This may
-     * give some other problems in the future, but for now it seems to
-     * work ok.
-     *
-     */
-    for (i = ctxt->incBase;i < ctxt->incNr; i++) {
-	if ((ctxt->incTab[i]->inc != NULL) ||
-		(ctxt->incTab[i]->xptr != NULL) ||
-		(ctxt->incTab[i]->emptyFb != 0))	/* (empty fallback) */
-	    xmlXIncludeIncludeNode(ctxt, i);
-    }
-
-    if (doc->URL != NULL)
-	xmlXIncludeURLPop(ctxt);
-    return(ret);
-}
-
-/**
- * xmlXIncludeSetFlags:
- * @ctxt:  an XInclude processing context
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Set the flags used for further processing of XML resources.
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlXIncludeSetFlags(xmlXIncludeCtxtPtr ctxt, int flags) {
-    if (ctxt == NULL)
-        return(-1);
-    ctxt->parseFlags = flags;
-    return(0);
-}
-
-/**
- * xmlXIncludeProcessTreeFlagsData:
- * @tree: an XML node
- * @flags: a set of xmlParserOption used for parsing XML includes
- * @data: application data that will be passed to the parser context
- *        in the _private field of the parser context(s)
- *
- * Implement the XInclude substitution on the XML node @tree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-
-int
-xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, int flags, void *data) {
-    xmlXIncludeCtxtPtr ctxt;
-    int ret = 0;
-
-    if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
-        (tree->doc == NULL))
-        return(-1);
-
-    ctxt = xmlXIncludeNewContext(tree->doc);
-    if (ctxt == NULL)
-        return(-1);
-    ctxt->_private = data;
-    ctxt->base = xmlStrdup((xmlChar *)tree->doc->URL);
-    xmlXIncludeSetFlags(ctxt, flags);
-    ret = xmlXIncludeDoProcess(ctxt, tree->doc, tree);
-    if ((ret >= 0) && (ctxt->nbErrors > 0))
-        ret = -1;
-
-    xmlXIncludeFreeContext(ctxt);
-    return(ret);
-}
-
-/**
- * xmlXIncludeProcessFlagsData:
- * @doc: an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- * @data: application data that will be passed to the parser context
- *        in the _private field of the parser context(s)
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcessFlagsData(xmlDocPtr doc, int flags, void *data) {
-    xmlNodePtr tree;
-
-    if (doc == NULL)
-	return(-1);
-    tree = xmlDocGetRootElement(doc);
-    if (tree == NULL)
-	return(-1);
-    return(xmlXIncludeProcessTreeFlagsData(tree, flags, data));
-}
-
-/**
- * xmlXIncludeProcessFlags:
- * @doc: an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcessFlags(xmlDocPtr doc, int flags) {
-    return xmlXIncludeProcessFlagsData(doc, flags, NULL);
-}
-
-/**
- * xmlXIncludeProcess:
- * @doc: an XML document
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcess(xmlDocPtr doc) {
-    return(xmlXIncludeProcessFlags(doc, 0));
-}
-
-/**
- * xmlXIncludeProcessTreeFlags:
- * @tree: a node in an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Implement the XInclude substitution for the given subtree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcessTreeFlags(xmlNodePtr tree, int flags) {
-    xmlXIncludeCtxtPtr ctxt;
-    int ret = 0;
-
-    if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
-        (tree->doc == NULL))
-	return(-1);
-    ctxt = xmlXIncludeNewContext(tree->doc);
-    if (ctxt == NULL)
-	return(-1);
-    ctxt->base = xmlNodeGetBase(tree->doc, tree);
-    xmlXIncludeSetFlags(ctxt, flags);
-    ret = xmlXIncludeDoProcess(ctxt, tree->doc, tree);
-    if ((ret >= 0) && (ctxt->nbErrors > 0))
-	ret = -1;
-
-    xmlXIncludeFreeContext(ctxt);
-    return(ret);
-}
-
-/**
- * xmlXIncludeProcessTree:
- * @tree: a node in an XML document
- *
- * Implement the XInclude substitution for the given subtree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcessTree(xmlNodePtr tree) {
-    return(xmlXIncludeProcessTreeFlags(tree, 0));
-}
-
-/**
- * xmlXIncludeProcessNode:
- * @ctxt: an existing XInclude context
- * @node: a node in an XML document
- *
- * Implement the XInclude substitution for the given subtree reusing
- * the informations and data coming from the given context.
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- *    or the number of substitutions done.
- */
-int
-xmlXIncludeProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
-    int ret = 0;
-
-    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) ||
-        (node->doc == NULL) || (ctxt == NULL))
-	return(-1);
-    ret = xmlXIncludeDoProcess(ctxt, node->doc, node);
-    if ((ret >= 0) && (ctxt->nbErrors > 0))
-	ret = -1;
-    return(ret);
-}
-
-#else /* !LIBXML_XINCLUDE_ENABLED */
-#endif
-#define bottom_xinclude
-#include "elfgcchack.h"
diff --git a/src/third_party/libxml/src/xlink.c b/src/third_party/libxml/src/xlink.c
deleted file mode 100644
index c0e4ff3..0000000
--- a/src/third_party/libxml/src/xlink.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * xlink.c : implementation of the hyperlinks detection module
- *           This version supports both XML XLinks and HTML simple links
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_XPTR_ENABLED
-#include <string.h> /* for memset() only */
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/valid.h>
-#include <libxml/xlink.h>
-#include <libxml/globals.h>
-
-#define XLINK_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xlink/namespace/")
-#define XHTML_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xhtml/")
-
-/****************************************************************
- *								*
- *           Default setting and related functions		*
- *								*
- ****************************************************************/
-
-static xlinkHandlerPtr xlinkDefaultHandler = NULL;
-static xlinkNodeDetectFunc	xlinkDefaultDetect = NULL;
-
-/**
- * xlinkGetDefaultHandler:
- *
- * Get the default xlink handler.
- *
- * Returns the current xlinkHandlerPtr value.
- */
-xlinkHandlerPtr
-xlinkGetDefaultHandler(void) {
-    return(xlinkDefaultHandler);
-}
-
-
-/**
- * xlinkSetDefaultHandler:
- * @handler:  the new value for the xlink handler block
- *
- * Set the default xlink handlers
- */
-void
-xlinkSetDefaultHandler(xlinkHandlerPtr handler) {
-    xlinkDefaultHandler = handler;
-}
-
-/**
- * xlinkGetDefaultDetect:
- *
- * Get the default xlink detection routine
- *
- * Returns the current function or NULL;
- */
-xlinkNodeDetectFunc
-xlinkGetDefaultDetect	(void) {
-    return(xlinkDefaultDetect);
-}
-
-/**
- * xlinkSetDefaultDetect:
- * @func: pointer to the new detection routine.
- *
- * Set the default xlink detection routine
- */
-void
-xlinkSetDefaultDetect	(xlinkNodeDetectFunc func) {
-    xlinkDefaultDetect = func;
-}
-
-/****************************************************************
- *								*
- *                  The detection routines			*
- *								*
- ****************************************************************/
-
-
-/**
- * xlinkIsLink:
- * @doc:  the document containing the node
- * @node:  the node pointer itself
- *
- * Check whether the given node carries the attributes needed
- * to be a link element (or is one of the linking elements issued
- * from the (X)HTML DtDs).
- * This routine don't try to do full checking of the link validity
- * but tries to detect and return the appropriate link type.
- *
- * Returns the xlinkType of the node (XLINK_TYPE_NONE if there is no
- *         link detected.
- */
-xlinkType
-xlinkIsLink	(xmlDocPtr doc, xmlNodePtr node) {
-    xmlChar *type = NULL, *role = NULL;
-    xlinkType ret = XLINK_TYPE_NONE;
-
-    if (node == NULL) return(XLINK_TYPE_NONE);
-    if (doc == NULL) doc = node->doc;
-    if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
-        /*
-	 * This is an HTML document.
-	 */
-    } else if ((node->ns != NULL) &&
-               (xmlStrEqual(node->ns->href, XHTML_NAMESPACE))) {
-	/*
-	 * !!!! We really need an IS_XHTML_ELEMENT function from HTMLtree.h @@@
-	 */
-        /*
-	 * This is an XHTML element within an XML document
-	 * Check whether it's one of the element able to carry links
-	 * and in that case if it holds the attributes.
-	 */
-    }
-
-    /*
-     * We don't prevent a-priori having XML Linking constructs on
-     * XHTML elements
-     */
-    type = xmlGetNsProp(node, BAD_CAST"type", XLINK_NAMESPACE);
-    if (type != NULL) {
-	if (xmlStrEqual(type, BAD_CAST "simple")) {
-            ret = XLINK_TYPE_SIMPLE;
-	} else if (xmlStrEqual(type, BAD_CAST "extended")) {
-	    role = xmlGetNsProp(node, BAD_CAST "role", XLINK_NAMESPACE);
-	    if (role != NULL) {
-		xmlNsPtr xlink;
-		xlink = xmlSearchNs(doc, node, XLINK_NAMESPACE);
-		if (xlink == NULL) {
-		    /* Humm, fallback method */
-		    if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset"))
-			ret = XLINK_TYPE_EXTENDED_SET;
-		} else {
-		    xmlChar buf[200];
-		    snprintf((char *) buf, sizeof(buf), "%s:external-linkset",
-			     (char *) xlink->prefix);
-                    buf[sizeof(buf) - 1] = 0;
-		    if (xmlStrEqual(role, buf))
-			ret = XLINK_TYPE_EXTENDED_SET;
-
-		}
-
-	    }
-	    ret = XLINK_TYPE_EXTENDED;
-	}
-    }
-
-    if (type != NULL) xmlFree(type);
-    if (role != NULL) xmlFree(role);
-    return(ret);
-}
-#endif /* LIBXML_XPTR_ENABLED */
-#define bottom_xlink
-#include "elfgcchack.h"
diff --git a/src/third_party/libxml/src/xmlmodule.c b/src/third_party/libxml/src/xmlmodule.c
deleted file mode 100644
index 50ed666..0000000
--- a/src/third_party/libxml/src/xmlmodule.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * xmlmodule.c : basic API for dynamic module loading added 2.6.17
- *
- * See Copyright for the status of this software.
- *
- * joelwreed@comcast.net
- *
- * http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlmodule.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_MODULES_ENABLED
-
-struct _xmlModule {
-    unsigned char *name;
-    void *handle;
-};
-
-static void *xmlModulePlatformOpen(const char *name);
-static int xmlModulePlatformClose(void *handle);
-static int xmlModulePlatformSymbol(void *handle, const char *name, void **result);
-
-/************************************************************************
- *									*
- *		module memory error handler				*
- *									*
- ************************************************************************/
-
-/**
- * xmlModuleErrMemory:
- * @extra:  extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlModuleErrMemory(xmlModulePtr module, const char *extra)
-{
-    const char *name = NULL;
-
-    if (module != NULL) {
-        name = (const char *) module->name;
-    }
-
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
-                    name, NULL, 0, 0,
-                    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlModuleOpen:
- * @name: the module name
- * @options: a set of xmlModuleOption
- *
- * Opens a module/shared library given its name or path
- * NOTE: that due to portability issues, behaviour can only be
- * guaranteed with @name using ASCII. We canot guarantee that
- * an UTF-8 string would work, which is why name is a const char *
- * and not a const xmlChar * .
- * TODO: options are not yet implemented.
- *
- * Returns a handle for the module or NULL in case of error
- */
-xmlModulePtr
-xmlModuleOpen(const char *name, int options ATTRIBUTE_UNUSED)
-{
-    xmlModulePtr module;
-
-    module = (xmlModulePtr) xmlMalloc(sizeof(xmlModule));
-    if (module == NULL) {
-        xmlModuleErrMemory(NULL, "creating module");
-        return (NULL);
-    }
-
-    memset(module, 0, sizeof(xmlModule));
-
-    module->handle = xmlModulePlatformOpen(name);
-
-    if (module->handle == NULL) {
-        xmlFree(module);
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
-                        name, NULL, 0, 0, "failed to open %s\n", name);
-        return(NULL);
-    }
-
-    module->name = xmlStrdup((const xmlChar *) name);
-    return (module);
-}
-
-/**
- * xmlModuleSymbol:
- * @module: the module
- * @name: the name of the symbol
- * @symbol: the resulting symbol address
- *
- * Lookup for a symbol address in the given module
- * NOTE: that due to portability issues, behaviour can only be
- * guaranteed with @name using ASCII. We canot guarantee that
- * an UTF-8 string would work, which is why name is a const char *
- * and not a const xmlChar * .
- *
- * Returns 0 if the symbol was found, or -1 in case of error
- */
-int
-xmlModuleSymbol(xmlModulePtr module, const char *name, void **symbol)
-{
-    int rc = -1;
-
-    if ((NULL == module) || (symbol == NULL) || (name == NULL)) {
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
-                        NULL, NULL, 0, 0, "null parameter\n");
-        return rc;
-    }
-
-    rc = xmlModulePlatformSymbol(module->handle, name, symbol);
-
-    if (rc == -1) {
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
-                        name, NULL, 0, 0,
-                        "failed to find symbol: %s\n",
-			(name == NULL ? "NULL" : name));
-        return rc;
-    }
-
-    return rc;
-}
-
-/**
- * xmlModuleClose:
- * @module: the module handle
- *
- * The close operations unload the associated module and free the
- * data associated to the module.
- *
- * Returns 0 in case of success, -1 in case of argument error and -2
- *         if the module could not be closed/unloaded.
- */
-int
-xmlModuleClose(xmlModulePtr module)
-{
-    int rc;
-
-    if (NULL == module) {
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, 0,
-                        NULL, NULL, 0, 0, "null module pointer\n");
-        return -1;
-    }
-
-    rc = xmlModulePlatformClose(module->handle);
-
-    if (rc != 0) {
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, 0,
-                        (const char *) module->name, NULL, 0, 0,
-                        "failed to close: %s\n", module->name);
-        return -2;
-    }
-
-    rc = xmlModuleFree(module);
-    return (rc);
-}
-
-/**
- * xmlModuleFree:
- * @module: the module handle
- *
- * The free operations free the data associated to the module
- * but does not unload the associated shared library which may still
- * be in use.
- *
- * Returns 0 in case of success, -1 in case of argument error
- */
-int
-xmlModuleFree(xmlModulePtr module)
-{
-    if (NULL == module) {
-        __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
-                        XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, NULL,
-                        NULL, NULL, 0, 0, "null module pointer\n");
-        return -1;
-    }
-
-    xmlFree(module->name);
-    xmlFree(module);
-
-    return (0);
-}
-
-#if defined(HAVE_DLOPEN) && !defined(_WIN32)
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#ifndef RTLD_GLOBAL            /* For Tru64 UNIX 4.0 */
-#define RTLD_GLOBAL 0
-#endif
-
-/**
- * xmlModulePlatformOpen:
- * @name: path to the module
- *
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
-    return dlopen(name, RTLD_GLOBAL | RTLD_NOW);
-}
-
-/*
- * xmlModulePlatformClose:
- * @handle: handle to the module
- *
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
-    return dlclose(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-    *symbol = dlsym(handle, name);
-    if (dlerror() != NULL) {
-	return -1;
-    }
-    return 0;
-}
-
-#else /* ! HAVE_DLOPEN */
-
-#ifdef HAVE_SHLLOAD             /* HAVE_SHLLOAD */
-#ifdef HAVE_DL_H
-#include <dl.h>
-#endif
-/*
- * xmlModulePlatformOpen:
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
-    return shl_load(name, BIND_IMMEDIATE, 0L);
-}
-
-/*
- * xmlModulePlatformClose:
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
-    return shl_unload(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://docs.hp.com/en/B2355-90683/shl_load.3X.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-    int rc;
-
-    errno = 0;
-    rc = shl_findsym(&handle, name, TYPE_UNDEFINED, symbol);
-    return rc;
-}
-
-#endif /* HAVE_SHLLOAD */
-#endif /* ! HAVE_DLOPEN */
-
-#ifdef _WIN32
-
-#include <windows.h>
-
-/*
- * xmlModulePlatformOpen:
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
-    return LoadLibraryA(name);
-}
-
-/*
- * xmlModulePlatformClose:
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
-    int rc;
-
-    rc = FreeLibrary(handle);
-    return (0 == rc);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-#ifdef _WIN32_WCE
-    /*
-     * GetProcAddressA seems only available on WinCE
-     */
-    *symbol = GetProcAddressA(handle, name);
-#else
-    *symbol = GetProcAddress(handle, name);
-#endif
-    return (NULL == *symbol) ? -1 : 0;
-}
-
-#endif /* _WIN32 */
-
-#ifdef HAVE_BEOS
-
-#include <kernel/image.h>
-
-/*
- * xmlModulePlatformOpen:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
-    return (void *) load_add_on(name);
-}
-
-/*
- * xmlModulePlatformClose:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
-    status_t rc;
-
-    rc = unload_add_on((image_id) handle);
-
-    if (rc == B_OK)
-        return 0;
-    else
-        return -1;
-}
-
-/*
- * xmlModulePlatformSymbol:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-    status_t rc;
-
-    rc = get_image_symbol((image_id) handle, name, B_SYMBOL_TYPE_ANY, symbol);
-
-    return (rc == B_OK) ? 0 : -1;
-}
-
-#endif /* HAVE_BEOS */
-
-#ifdef HAVE_OS2
-
-#include <os2.h>
-
-/*
- * xmlModulePlatformOpen:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosLoadModule.html
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
-    char errbuf[256];
-    void *handle;
-    int rc;
-
-    rc = DosLoadModule(errbuf, sizeof(errbuf) - 1, name, &handle);
-
-    if (rc)
-        return 0;
-    else
-        return (handle);
-}
-
-/*
- * xmlModulePlatformClose:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosFreeModule.html
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
-    return DosFreeModule(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosQueryProcAddr.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-    int rc;
-
-    rc = DosQueryProcAddr(handle, 0, name, symbol);
-
-    return (rc == NO_ERROR) ? 0 : -1;
-}
-
-#endif /* HAVE_OS2 */
-
-#define bottom_xmlmodule
-#include "elfgcchack.h"
-#endif /* LIBXML_MODULES_ENABLED */
diff --git a/src/third_party/libxml/src/xmlregexp.c b/src/third_party/libxml/src/xmlregexp.c
deleted file mode 100644
index ca3b4f4..0000000
--- a/src/third_party/libxml/src/xmlregexp.c
+++ /dev/null
@@ -1,8173 +0,0 @@
-/*
- * regexp.c: generic and extensible Regular Expression engine
- *
- * Basically designed with the purpose of compiling regexps for
- * the variety of validation/shemas mechanisms now available in
- * XML related specifications these include:
- *    - XML-1.0 DTD validation
- *    - XML Schemas structure part 1
- *    - XML Schemas Datatypes part 2 especially Appendix F
- *    - RELAX-NG/TREX i.e. the counter proposal
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-/* #define DEBUG_ERR */
-
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <libxml/tree.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlunicode.h>
-
-#ifndef INT_MAX
-#define INT_MAX 123456789 /* easy to flag and big enough for our needs */
-#endif
-
-/* #define DEBUG_REGEXP_GRAPH */
-/* #define DEBUG_REGEXP_EXEC */
-/* #define DEBUG_PUSH */
-/* #define DEBUG_COMPACTION */
-
-#define MAX_PUSH 10000000
-
-#ifdef ERROR
-#undef ERROR
-#endif
-#define ERROR(str)							\
-    ctxt->error = XML_REGEXP_COMPILE_ERROR;				\
-    xmlRegexpErrCompile(ctxt, str);
-#define NEXT ctxt->cur++
-#define CUR (*(ctxt->cur))
-#define NXT(index) (ctxt->cur[index])
-
-#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
-#define NEXTL(l) ctxt->cur += l;
-#define XML_REG_STRING_SEPARATOR '|'
-/*
- * Need PREV to check on a '-' within a Character Group. May only be used
- * when it's guaranteed that cur is not at the beginning of ctxt->string!
- */
-#define PREV (ctxt->cur[-1])
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-/************************************************************************
- *									*
- *			Datatypes and structures			*
- *									*
- ************************************************************************/
-
-/*
- * Note: the order of the enums below is significant, do not shuffle
- */
-typedef enum {
-    XML_REGEXP_EPSILON = 1,
-    XML_REGEXP_CHARVAL,
-    XML_REGEXP_RANGES,
-    XML_REGEXP_SUBREG,  /* used for () sub regexps */
-    XML_REGEXP_STRING,
-    XML_REGEXP_ANYCHAR, /* . */
-    XML_REGEXP_ANYSPACE, /* \s */
-    XML_REGEXP_NOTSPACE, /* \S */
-    XML_REGEXP_INITNAME, /* \l */
-    XML_REGEXP_NOTINITNAME, /* \L */
-    XML_REGEXP_NAMECHAR, /* \c */
-    XML_REGEXP_NOTNAMECHAR, /* \C */
-    XML_REGEXP_DECIMAL, /* \d */
-    XML_REGEXP_NOTDECIMAL, /* \D */
-    XML_REGEXP_REALCHAR, /* \w */
-    XML_REGEXP_NOTREALCHAR, /* \W */
-    XML_REGEXP_LETTER = 100,
-    XML_REGEXP_LETTER_UPPERCASE,
-    XML_REGEXP_LETTER_LOWERCASE,
-    XML_REGEXP_LETTER_TITLECASE,
-    XML_REGEXP_LETTER_MODIFIER,
-    XML_REGEXP_LETTER_OTHERS,
-    XML_REGEXP_MARK,
-    XML_REGEXP_MARK_NONSPACING,
-    XML_REGEXP_MARK_SPACECOMBINING,
-    XML_REGEXP_MARK_ENCLOSING,
-    XML_REGEXP_NUMBER,
-    XML_REGEXP_NUMBER_DECIMAL,
-    XML_REGEXP_NUMBER_LETTER,
-    XML_REGEXP_NUMBER_OTHERS,
-    XML_REGEXP_PUNCT,
-    XML_REGEXP_PUNCT_CONNECTOR,
-    XML_REGEXP_PUNCT_DASH,
-    XML_REGEXP_PUNCT_OPEN,
-    XML_REGEXP_PUNCT_CLOSE,
-    XML_REGEXP_PUNCT_INITQUOTE,
-    XML_REGEXP_PUNCT_FINQUOTE,
-    XML_REGEXP_PUNCT_OTHERS,
-    XML_REGEXP_SEPAR,
-    XML_REGEXP_SEPAR_SPACE,
-    XML_REGEXP_SEPAR_LINE,
-    XML_REGEXP_SEPAR_PARA,
-    XML_REGEXP_SYMBOL,
-    XML_REGEXP_SYMBOL_MATH,
-    XML_REGEXP_SYMBOL_CURRENCY,
-    XML_REGEXP_SYMBOL_MODIFIER,
-    XML_REGEXP_SYMBOL_OTHERS,
-    XML_REGEXP_OTHER,
-    XML_REGEXP_OTHER_CONTROL,
-    XML_REGEXP_OTHER_FORMAT,
-    XML_REGEXP_OTHER_PRIVATE,
-    XML_REGEXP_OTHER_NA,
-    XML_REGEXP_BLOCK_NAME
-} xmlRegAtomType;
-
-typedef enum {
-    XML_REGEXP_QUANT_EPSILON = 1,
-    XML_REGEXP_QUANT_ONCE,
-    XML_REGEXP_QUANT_OPT,
-    XML_REGEXP_QUANT_MULT,
-    XML_REGEXP_QUANT_PLUS,
-    XML_REGEXP_QUANT_ONCEONLY,
-    XML_REGEXP_QUANT_ALL,
-    XML_REGEXP_QUANT_RANGE
-} xmlRegQuantType;
-
-typedef enum {
-    XML_REGEXP_START_STATE = 1,
-    XML_REGEXP_FINAL_STATE,
-    XML_REGEXP_TRANS_STATE,
-    XML_REGEXP_SINK_STATE,
-    XML_REGEXP_UNREACH_STATE
-} xmlRegStateType;
-
-typedef enum {
-    XML_REGEXP_MARK_NORMAL = 0,
-    XML_REGEXP_MARK_START,
-    XML_REGEXP_MARK_VISITED
-} xmlRegMarkedType;
-
-typedef struct _xmlRegRange xmlRegRange;
-typedef xmlRegRange *xmlRegRangePtr;
-
-struct _xmlRegRange {
-    int neg;		/* 0 normal, 1 not, 2 exclude */
-    xmlRegAtomType type;
-    int start;
-    int end;
-    xmlChar *blockName;
-};
-
-typedef struct _xmlRegAtom xmlRegAtom;
-typedef xmlRegAtom *xmlRegAtomPtr;
-
-typedef struct _xmlAutomataState xmlRegState;
-typedef xmlRegState *xmlRegStatePtr;
-
-struct _xmlRegAtom {
-    int no;
-    xmlRegAtomType type;
-    xmlRegQuantType quant;
-    int min;
-    int max;
-
-    void *valuep;
-    void *valuep2;
-    int neg;
-    int codepoint;
-    xmlRegStatePtr start;
-    xmlRegStatePtr start0;
-    xmlRegStatePtr stop;
-    int maxRanges;
-    int nbRanges;
-    xmlRegRangePtr *ranges;
-    void *data;
-};
-
-typedef struct _xmlRegCounter xmlRegCounter;
-typedef xmlRegCounter *xmlRegCounterPtr;
-
-struct _xmlRegCounter {
-    int min;
-    int max;
-};
-
-typedef struct _xmlRegTrans xmlRegTrans;
-typedef xmlRegTrans *xmlRegTransPtr;
-
-struct _xmlRegTrans {
-    xmlRegAtomPtr atom;
-    int to;
-    int counter;
-    int count;
-    int nd;
-};
-
-struct _xmlAutomataState {
-    xmlRegStateType type;
-    xmlRegMarkedType mark;
-    xmlRegMarkedType markd;
-    xmlRegMarkedType reached;
-    int no;
-    int maxTrans;
-    int nbTrans;
-    xmlRegTrans *trans;
-    /*  knowing states ponting to us can speed things up */
-    int maxTransTo;
-    int nbTransTo;
-    int *transTo;
-};
-
-typedef struct _xmlAutomata xmlRegParserCtxt;
-typedef xmlRegParserCtxt *xmlRegParserCtxtPtr;
-
-#define AM_AUTOMATA_RNG 1
-
-struct _xmlAutomata {
-    xmlChar *string;
-    xmlChar *cur;
-
-    int error;
-    int neg;
-
-    xmlRegStatePtr start;
-    xmlRegStatePtr end;
-    xmlRegStatePtr state;
-
-    xmlRegAtomPtr atom;
-
-    int maxAtoms;
-    int nbAtoms;
-    xmlRegAtomPtr *atoms;
-
-    int maxStates;
-    int nbStates;
-    xmlRegStatePtr *states;
-
-    int maxCounters;
-    int nbCounters;
-    xmlRegCounter *counters;
-
-    int determinist;
-    int negs;
-    int flags;
-};
-
-struct _xmlRegexp {
-    xmlChar *string;
-    int nbStates;
-    xmlRegStatePtr *states;
-    int nbAtoms;
-    xmlRegAtomPtr *atoms;
-    int nbCounters;
-    xmlRegCounter *counters;
-    int determinist;
-    int flags;
-    /*
-     * That's the compact form for determinists automatas
-     */
-    int nbstates;
-    int *compact;
-    void **transdata;
-    int nbstrings;
-    xmlChar **stringMap;
-};
-
-typedef struct _xmlRegExecRollback xmlRegExecRollback;
-typedef xmlRegExecRollback *xmlRegExecRollbackPtr;
-
-struct _xmlRegExecRollback {
-    xmlRegStatePtr state;/* the current state */
-    int index;		/* the index in the input stack */
-    int nextbranch;	/* the next transition to explore in that state */
-    int *counts;	/* save the automata state if it has some */
-};
-
-typedef struct _xmlRegInputToken xmlRegInputToken;
-typedef xmlRegInputToken *xmlRegInputTokenPtr;
-
-struct _xmlRegInputToken {
-    xmlChar *value;
-    void *data;
-};
-
-struct _xmlRegExecCtxt {
-    int status;		/* execution status != 0 indicate an error */
-    int determinist;	/* did we find an indeterministic behaviour */
-    xmlRegexpPtr comp;	/* the compiled regexp */
-    xmlRegExecCallbacks callback;
-    void *data;
-
-    xmlRegStatePtr state;/* the current state */
-    int transno;	/* the current transition on that state */
-    int transcount;	/* the number of chars in char counted transitions */
-
-    /*
-     * A stack of rollback states
-     */
-    int maxRollbacks;
-    int nbRollbacks;
-    xmlRegExecRollback *rollbacks;
-
-    /*
-     * The state of the automata if any
-     */
-    int *counts;
-
-    /*
-     * The input stack
-     */
-    int inputStackMax;
-    int inputStackNr;
-    int index;
-    int *charStack;
-    const xmlChar *inputString; /* when operating on characters */
-    xmlRegInputTokenPtr inputStack;/* when operating on strings */
-
-    /*
-     * error handling
-     */
-    int errStateNo;		/* the error state number */
-    xmlRegStatePtr errState;    /* the error state */
-    xmlChar *errString;		/* the string raising the error */
-    int *errCounts;		/* counters at the error state */
-    int nbPush;
-};
-
-#define REGEXP_ALL_COUNTER	0x123456
-#define REGEXP_ALL_LAX_COUNTER	0x123457
-
-static void xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top);
-static void xmlRegFreeState(xmlRegStatePtr state);
-static void xmlRegFreeAtom(xmlRegAtomPtr atom);
-static int xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr);
-static int xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint);
-static int xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint,
-                  int neg, int start, int end, const xmlChar *blockName);
-
-void xmlAutomataSetFlags(xmlAutomataPtr am, int flags);
-
-/************************************************************************
- *									*
- *		Regexp memory error handler				*
- *									*
- ************************************************************************/
-/**
- * xmlRegexpErrMemory:
- * @extra:  extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlRegexpErrMemory(xmlRegParserCtxtPtr ctxt, const char *extra)
-{
-    const char *regexp = NULL;
-    if (ctxt != NULL) {
-        regexp = (const char *) ctxt->string;
-	ctxt->error = XML_ERR_NO_MEMORY;
-    }
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
-		    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
-		    regexp, NULL, 0, 0,
-		    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlRegexpErrCompile:
- * @extra:  extra information
- *
- * Handle a compilation failure
- */
-static void
-xmlRegexpErrCompile(xmlRegParserCtxtPtr ctxt, const char *extra)
-{
-    const char *regexp = NULL;
-    int idx = 0;
-
-    if (ctxt != NULL) {
-        regexp = (const char *) ctxt->string;
-	idx = ctxt->cur - ctxt->string;
-	ctxt->error = XML_REGEXP_COMPILE_ERROR;
-    }
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
-		    XML_REGEXP_COMPILE_ERROR, XML_ERR_FATAL, NULL, 0, extra,
-		    regexp, NULL, idx, 0,
-		    "failed to compile: %s\n", extra);
-}
-
-/************************************************************************
- *									*
- *			Allocation/Deallocation				*
- *									*
- ************************************************************************/
-
-static int xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt);
-/**
- * xmlRegEpxFromParse:
- * @ctxt:  the parser context used to build it
- *
- * Allocate a new regexp and fill it with the result from the parser
- *
- * Returns the new regexp or NULL in case of error
- */
-static xmlRegexpPtr
-xmlRegEpxFromParse(xmlRegParserCtxtPtr ctxt) {
-    xmlRegexpPtr ret;
-
-    ret = (xmlRegexpPtr) xmlMalloc(sizeof(xmlRegexp));
-    if (ret == NULL) {
-	xmlRegexpErrMemory(ctxt, "compiling regexp");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlRegexp));
-    ret->string = ctxt->string;
-    ret->nbStates = ctxt->nbStates;
-    ret->states = ctxt->states;
-    ret->nbAtoms = ctxt->nbAtoms;
-    ret->atoms = ctxt->atoms;
-    ret->nbCounters = ctxt->nbCounters;
-    ret->counters = ctxt->counters;
-    ret->determinist = ctxt->determinist;
-    ret->flags = ctxt->flags;
-    if (ret->determinist == -1) {
-        xmlRegexpIsDeterminist(ret);
-    }
-
-    if ((ret->determinist != 0) &&
-	(ret->nbCounters == 0) &&
-	(ctxt->negs == 0) &&
-	(ret->atoms != NULL) &&
-	(ret->atoms[0] != NULL) &&
-	(ret->atoms[0]->type == XML_REGEXP_STRING)) {
-	int i, j, nbstates = 0, nbatoms = 0;
-	int *stateRemap;
-	int *stringRemap;
-	int *transitions;
-	void **transdata;
-	xmlChar **stringMap;
-        xmlChar *value;
-
-	/*
-	 * Switch to a compact representation
-	 * 1/ counting the effective number of states left
-	 * 2/ counting the unique number of atoms, and check that
-	 *    they are all of the string type
-	 * 3/ build a table state x atom for the transitions
-	 */
-
-	stateRemap = xmlMalloc(ret->nbStates * sizeof(int));
-	if (stateRemap == NULL) {
-	    xmlRegexpErrMemory(ctxt, "compiling regexp");
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	for (i = 0;i < ret->nbStates;i++) {
-	    if (ret->states[i] != NULL) {
-		stateRemap[i] = nbstates;
-		nbstates++;
-	    } else {
-		stateRemap[i] = -1;
-	    }
-	}
-#ifdef DEBUG_COMPACTION
-	printf("Final: %d states\n", nbstates);
-#endif
-	stringMap = xmlMalloc(ret->nbAtoms * sizeof(char *));
-	if (stringMap == NULL) {
-	    xmlRegexpErrMemory(ctxt, "compiling regexp");
-	    xmlFree(stateRemap);
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	stringRemap = xmlMalloc(ret->nbAtoms * sizeof(int));
-	if (stringRemap == NULL) {
-	    xmlRegexpErrMemory(ctxt, "compiling regexp");
-	    xmlFree(stringMap);
-	    xmlFree(stateRemap);
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	for (i = 0;i < ret->nbAtoms;i++) {
-	    if ((ret->atoms[i]->type == XML_REGEXP_STRING) &&
-		(ret->atoms[i]->quant == XML_REGEXP_QUANT_ONCE)) {
-		value = ret->atoms[i]->valuep;
-                for (j = 0;j < nbatoms;j++) {
-		    if (xmlStrEqual(stringMap[j], value)) {
-			stringRemap[i] = j;
-			break;
-		    }
-		}
-		if (j >= nbatoms) {
-		    stringRemap[i] = nbatoms;
-		    stringMap[nbatoms] = xmlStrdup(value);
-		    if (stringMap[nbatoms] == NULL) {
-			for (i = 0;i < nbatoms;i++)
-			    xmlFree(stringMap[i]);
-			xmlFree(stringRemap);
-			xmlFree(stringMap);
-			xmlFree(stateRemap);
-			xmlFree(ret);
-			return(NULL);
-		    }
-		    nbatoms++;
-		}
-	    } else {
-		xmlFree(stateRemap);
-		xmlFree(stringRemap);
-		for (i = 0;i < nbatoms;i++)
-		    xmlFree(stringMap[i]);
-		xmlFree(stringMap);
-		xmlFree(ret);
-		return(NULL);
-	    }
-	}
-#ifdef DEBUG_COMPACTION
-	printf("Final: %d atoms\n", nbatoms);
-#endif
-	transitions = (int *) xmlMalloc((nbstates + 1) *
-	                                (nbatoms + 1) * sizeof(int));
-	if (transitions == NULL) {
-	    xmlFree(stateRemap);
-	    xmlFree(stringRemap);
-	    xmlFree(stringMap);
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	memset(transitions, 0, (nbstates + 1) * (nbatoms + 1) * sizeof(int));
-
-	/*
-	 * Allocate the transition table. The first entry for each
-	 * state corresponds to the state type.
-	 */
-	transdata = NULL;
-
-	for (i = 0;i < ret->nbStates;i++) {
-	    int stateno, atomno, targetno, prev;
-	    xmlRegStatePtr state;
-	    xmlRegTransPtr trans;
-
-	    stateno = stateRemap[i];
-	    if (stateno == -1)
-		continue;
-	    state = ret->states[i];
-
-	    transitions[stateno * (nbatoms + 1)] = state->type;
-
-	    for (j = 0;j < state->nbTrans;j++) {
-		trans = &(state->trans[j]);
-		if ((trans->to == -1) || (trans->atom == NULL))
-		    continue;
-                atomno = stringRemap[trans->atom->no];
-		if ((trans->atom->data != NULL) && (transdata == NULL)) {
-		    transdata = (void **) xmlMalloc(nbstates * nbatoms *
-			                            sizeof(void *));
-		    if (transdata != NULL)
-			memset(transdata, 0,
-			       nbstates * nbatoms * sizeof(void *));
-		    else {
-			xmlRegexpErrMemory(ctxt, "compiling regexp");
-			break;
-		    }
-		}
-		targetno = stateRemap[trans->to];
-		/*
-		 * if the same atom can generate transitions to 2 different
-		 * states then it means the automata is not determinist and
-		 * the compact form can't be used !
-		 */
-		prev = transitions[stateno * (nbatoms + 1) + atomno + 1];
-		if (prev != 0) {
-		    if (prev != targetno + 1) {
-			ret->determinist = 0;
-#ifdef DEBUG_COMPACTION
-			printf("Indet: state %d trans %d, atom %d to %d : %d to %d\n",
-			       i, j, trans->atom->no, trans->to, atomno, targetno);
-			printf("       previous to is %d\n", prev);
-#endif
-			if (transdata != NULL)
-			    xmlFree(transdata);
-			xmlFree(transitions);
-			xmlFree(stateRemap);
-			xmlFree(stringRemap);
-			for (i = 0;i < nbatoms;i++)
-			    xmlFree(stringMap[i]);
-			xmlFree(stringMap);
-			goto not_determ;
-		    }
-		} else {
-#if 0
-		    printf("State %d trans %d: atom %d to %d : %d to %d\n",
-			   i, j, trans->atom->no, trans->to, atomno, targetno);
-#endif
-		    transitions[stateno * (nbatoms + 1) + atomno + 1] =
-			targetno + 1; /* to avoid 0 */
-		    if (transdata != NULL)
-			transdata[stateno * nbatoms + atomno] =
-			    trans->atom->data;
-		}
-	    }
-	}
-	ret->determinist = 1;
-#ifdef DEBUG_COMPACTION
-	/*
-	 * Debug
-	 */
-	for (i = 0;i < nbstates;i++) {
-	    for (j = 0;j < nbatoms + 1;j++) {
-                printf("%02d ", transitions[i * (nbatoms + 1) + j]);
-	    }
-	    printf("\n");
-	}
-	printf("\n");
-#endif
-	/*
-	 * Cleanup of the old data
-	 */
-	if (ret->states != NULL) {
-	    for (i = 0;i < ret->nbStates;i++)
-		xmlRegFreeState(ret->states[i]);
-	    xmlFree(ret->states);
-	}
-	ret->states = NULL;
-	ret->nbStates = 0;
-	if (ret->atoms != NULL) {
-	    for (i = 0;i < ret->nbAtoms;i++)
-		xmlRegFreeAtom(ret->atoms[i]);
-	    xmlFree(ret->atoms);
-	}
-	ret->atoms = NULL;
-	ret->nbAtoms = 0;
-
-	ret->compact = transitions;
-	ret->transdata = transdata;
-	ret->stringMap = stringMap;
-	ret->nbstrings = nbatoms;
-	ret->nbstates = nbstates;
-	xmlFree(stateRemap);
-	xmlFree(stringRemap);
-    }
-not_determ:
-    ctxt->string = NULL;
-    ctxt->nbStates = 0;
-    ctxt->states = NULL;
-    ctxt->nbAtoms = 0;
-    ctxt->atoms = NULL;
-    ctxt->nbCounters = 0;
-    ctxt->counters = NULL;
-    return(ret);
-}
-
-/**
- * xmlRegNewParserCtxt:
- * @string:  the string to parse
- *
- * Allocate a new regexp parser context
- *
- * Returns the new context or NULL in case of error
- */
-static xmlRegParserCtxtPtr
-xmlRegNewParserCtxt(const xmlChar *string) {
-    xmlRegParserCtxtPtr ret;
-
-    ret = (xmlRegParserCtxtPtr) xmlMalloc(sizeof(xmlRegParserCtxt));
-    if (ret == NULL)
-	return(NULL);
-    memset(ret, 0, sizeof(xmlRegParserCtxt));
-    if (string != NULL)
-	ret->string = xmlStrdup(string);
-    ret->cur = ret->string;
-    ret->neg = 0;
-    ret->negs = 0;
-    ret->error = 0;
-    ret->determinist = -1;
-    return(ret);
-}
-
-/**
- * xmlRegNewRange:
- * @ctxt:  the regexp parser context
- * @neg:  is that negative
- * @type:  the type of range
- * @start:  the start codepoint
- * @end:  the end codepoint
- *
- * Allocate a new regexp range
- *
- * Returns the new range or NULL in case of error
- */
-static xmlRegRangePtr
-xmlRegNewRange(xmlRegParserCtxtPtr ctxt,
-	       int neg, xmlRegAtomType type, int start, int end) {
-    xmlRegRangePtr ret;
-
-    ret = (xmlRegRangePtr) xmlMalloc(sizeof(xmlRegRange));
-    if (ret == NULL) {
-	xmlRegexpErrMemory(ctxt, "allocating range");
-	return(NULL);
-    }
-    ret->neg = neg;
-    ret->type = type;
-    ret->start = start;
-    ret->end = end;
-    return(ret);
-}
-
-/**
- * xmlRegFreeRange:
- * @range:  the regexp range
- *
- * Free a regexp range
- */
-static void
-xmlRegFreeRange(xmlRegRangePtr range) {
-    if (range == NULL)
-	return;
-
-    if (range->blockName != NULL)
-	xmlFree(range->blockName);
-    xmlFree(range);
-}
-
-/**
- * xmlRegCopyRange:
- * @range:  the regexp range
- *
- * Copy a regexp range
- *
- * Returns the new copy or NULL in case of error.
- */
-static xmlRegRangePtr
-xmlRegCopyRange(xmlRegParserCtxtPtr ctxt, xmlRegRangePtr range) {
-    xmlRegRangePtr ret;
-
-    if (range == NULL)
-	return(NULL);
-
-    ret = xmlRegNewRange(ctxt, range->neg, range->type, range->start,
-                         range->end);
-    if (ret == NULL)
-        return(NULL);
-    if (range->blockName != NULL) {
-	ret->blockName = xmlStrdup(range->blockName);
-	if (ret->blockName == NULL) {
-	    xmlRegexpErrMemory(ctxt, "allocating range");
-	    xmlRegFreeRange(ret);
-	    return(NULL);
-	}
-    }
-    return(ret);
-}
-
-/**
- * xmlRegNewAtom:
- * @ctxt:  the regexp parser context
- * @type:  the type of atom
- *
- * Allocate a new atom
- *
- * Returns the new atom or NULL in case of error
- */
-static xmlRegAtomPtr
-xmlRegNewAtom(xmlRegParserCtxtPtr ctxt, xmlRegAtomType type) {
-    xmlRegAtomPtr ret;
-
-    ret = (xmlRegAtomPtr) xmlMalloc(sizeof(xmlRegAtom));
-    if (ret == NULL) {
-	xmlRegexpErrMemory(ctxt, "allocating atom");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlRegAtom));
-    ret->type = type;
-    ret->quant = XML_REGEXP_QUANT_ONCE;
-    ret->min = 0;
-    ret->max = 0;
-    return(ret);
-}
-
-/**
- * xmlRegFreeAtom:
- * @atom:  the regexp atom
- *
- * Free a regexp atom
- */
-static void
-xmlRegFreeAtom(xmlRegAtomPtr atom) {
-    int i;
-
-    if (atom == NULL)
-	return;
-
-    for (i = 0;i < atom->nbRanges;i++)
-	xmlRegFreeRange(atom->ranges[i]);
-    if (atom->ranges != NULL)
-	xmlFree(atom->ranges);
-    if ((atom->type == XML_REGEXP_STRING) && (atom->valuep != NULL))
-	xmlFree(atom->valuep);
-    if ((atom->type == XML_REGEXP_STRING) && (atom->valuep2 != NULL))
-	xmlFree(atom->valuep2);
-    if ((atom->type == XML_REGEXP_BLOCK_NAME) && (atom->valuep != NULL))
-	xmlFree(atom->valuep);
-    xmlFree(atom);
-}
-
-/**
- * xmlRegCopyAtom:
- * @ctxt:  the regexp parser context
- * @atom:  the oiginal atom
- *
- * Allocate a new regexp range
- *
- * Returns the new atom or NULL in case of error
- */
-static xmlRegAtomPtr
-xmlRegCopyAtom(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
-    xmlRegAtomPtr ret;
-
-    ret = (xmlRegAtomPtr) xmlMalloc(sizeof(xmlRegAtom));
-    if (ret == NULL) {
-	xmlRegexpErrMemory(ctxt, "copying atom");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlRegAtom));
-    ret->type = atom->type;
-    ret->quant = atom->quant;
-    ret->min = atom->min;
-    ret->max = atom->max;
-    if (atom->nbRanges > 0) {
-        int i;
-
-        ret->ranges = (xmlRegRangePtr *) xmlMalloc(sizeof(xmlRegRangePtr) *
-	                                           atom->nbRanges);
-	if (ret->ranges == NULL) {
-	    xmlRegexpErrMemory(ctxt, "copying atom");
-	    goto error;
-	}
-	for (i = 0;i < atom->nbRanges;i++) {
-	    ret->ranges[i] = xmlRegCopyRange(ctxt, atom->ranges[i]);
-	    if (ret->ranges[i] == NULL)
-	        goto error;
-	    ret->nbRanges = i + 1;
-	}
-    }
-    return(ret);
-
-error:
-    xmlRegFreeAtom(ret);
-    return(NULL);
-}
-
-static xmlRegStatePtr
-xmlRegNewState(xmlRegParserCtxtPtr ctxt) {
-    xmlRegStatePtr ret;
-
-    ret = (xmlRegStatePtr) xmlMalloc(sizeof(xmlRegState));
-    if (ret == NULL) {
-	xmlRegexpErrMemory(ctxt, "allocating state");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlRegState));
-    ret->type = XML_REGEXP_TRANS_STATE;
-    ret->mark = XML_REGEXP_MARK_NORMAL;
-    return(ret);
-}
-
-/**
- * xmlRegFreeState:
- * @state:  the regexp state
- *
- * Free a regexp state
- */
-static void
-xmlRegFreeState(xmlRegStatePtr state) {
-    if (state == NULL)
-	return;
-
-    if (state->trans != NULL)
-	xmlFree(state->trans);
-    if (state->transTo != NULL)
-	xmlFree(state->transTo);
-    xmlFree(state);
-}
-
-/**
- * xmlRegFreeParserCtxt:
- * @ctxt:  the regexp parser context
- *
- * Free a regexp parser context
- */
-static void
-xmlRegFreeParserCtxt(xmlRegParserCtxtPtr ctxt) {
-    int i;
-    if (ctxt == NULL)
-	return;
-
-    if (ctxt->string != NULL)
-	xmlFree(ctxt->string);
-    if (ctxt->states != NULL) {
-	for (i = 0;i < ctxt->nbStates;i++)
-	    xmlRegFreeState(ctxt->states[i]);
-	xmlFree(ctxt->states);
-    }
-    if (ctxt->atoms != NULL) {
-	for (i = 0;i < ctxt->nbAtoms;i++)
-	    xmlRegFreeAtom(ctxt->atoms[i]);
-	xmlFree(ctxt->atoms);
-    }
-    if (ctxt->counters != NULL)
-	xmlFree(ctxt->counters);
-    xmlFree(ctxt);
-}
-
-/************************************************************************
- *									*
- *			Display of Data structures			*
- *									*
- ************************************************************************/
-
-static void
-xmlRegPrintAtomType(FILE *output, xmlRegAtomType type) {
-    switch (type) {
-        case XML_REGEXP_EPSILON:
-	    fprintf(output, "epsilon "); break;
-        case XML_REGEXP_CHARVAL:
-	    fprintf(output, "charval "); break;
-        case XML_REGEXP_RANGES:
-	    fprintf(output, "ranges "); break;
-        case XML_REGEXP_SUBREG:
-	    fprintf(output, "subexpr "); break;
-        case XML_REGEXP_STRING:
-	    fprintf(output, "string "); break;
-        case XML_REGEXP_ANYCHAR:
-	    fprintf(output, "anychar "); break;
-        case XML_REGEXP_ANYSPACE:
-	    fprintf(output, "anyspace "); break;
-        case XML_REGEXP_NOTSPACE:
-	    fprintf(output, "notspace "); break;
-        case XML_REGEXP_INITNAME:
-	    fprintf(output, "initname "); break;
-        case XML_REGEXP_NOTINITNAME:
-	    fprintf(output, "notinitname "); break;
-        case XML_REGEXP_NAMECHAR:
-	    fprintf(output, "namechar "); break;
-        case XML_REGEXP_NOTNAMECHAR:
-	    fprintf(output, "notnamechar "); break;
-        case XML_REGEXP_DECIMAL:
-	    fprintf(output, "decimal "); break;
-        case XML_REGEXP_NOTDECIMAL:
-	    fprintf(output, "notdecimal "); break;
-        case XML_REGEXP_REALCHAR:
-	    fprintf(output, "realchar "); break;
-        case XML_REGEXP_NOTREALCHAR:
-	    fprintf(output, "notrealchar "); break;
-        case XML_REGEXP_LETTER:
-            fprintf(output, "LETTER "); break;
-        case XML_REGEXP_LETTER_UPPERCASE:
-            fprintf(output, "LETTER_UPPERCASE "); break;
-        case XML_REGEXP_LETTER_LOWERCASE:
-            fprintf(output, "LETTER_LOWERCASE "); break;
-        case XML_REGEXP_LETTER_TITLECASE:
-            fprintf(output, "LETTER_TITLECASE "); break;
-        case XML_REGEXP_LETTER_MODIFIER:
-            fprintf(output, "LETTER_MODIFIER "); break;
-        case XML_REGEXP_LETTER_OTHERS:
-            fprintf(output, "LETTER_OTHERS "); break;
-        case XML_REGEXP_MARK:
-            fprintf(output, "MARK "); break;
-        case XML_REGEXP_MARK_NONSPACING:
-            fprintf(output, "MARK_NONSPACING "); break;
-        case XML_REGEXP_MARK_SPACECOMBINING:
-            fprintf(output, "MARK_SPACECOMBINING "); break;
-        case XML_REGEXP_MARK_ENCLOSING:
-            fprintf(output, "MARK_ENCLOSING "); break;
-        case XML_REGEXP_NUMBER:
-            fprintf(output, "NUMBER "); break;
-        case XML_REGEXP_NUMBER_DECIMAL:
-            fprintf(output, "NUMBER_DECIMAL "); break;
-        case XML_REGEXP_NUMBER_LETTER:
-            fprintf(output, "NUMBER_LETTER "); break;
-        case XML_REGEXP_NUMBER_OTHERS:
-            fprintf(output, "NUMBER_OTHERS "); break;
-        case XML_REGEXP_PUNCT:
-            fprintf(output, "PUNCT "); break;
-        case XML_REGEXP_PUNCT_CONNECTOR:
-            fprintf(output, "PUNCT_CONNECTOR "); break;
-        case XML_REGEXP_PUNCT_DASH:
-            fprintf(output, "PUNCT_DASH "); break;
-        case XML_REGEXP_PUNCT_OPEN:
-            fprintf(output, "PUNCT_OPEN "); break;
-        case XML_REGEXP_PUNCT_CLOSE:
-            fprintf(output, "PUNCT_CLOSE "); break;
-        case XML_REGEXP_PUNCT_INITQUOTE:
-            fprintf(output, "PUNCT_INITQUOTE "); break;
-        case XML_REGEXP_PUNCT_FINQUOTE:
-            fprintf(output, "PUNCT_FINQUOTE "); break;
-        case XML_REGEXP_PUNCT_OTHERS:
-            fprintf(output, "PUNCT_OTHERS "); break;
-        case XML_REGEXP_SEPAR:
-            fprintf(output, "SEPAR "); break;
-        case XML_REGEXP_SEPAR_SPACE:
-            fprintf(output, "SEPAR_SPACE "); break;
-        case XML_REGEXP_SEPAR_LINE:
-            fprintf(output, "SEPAR_LINE "); break;
-        case XML_REGEXP_SEPAR_PARA:
-            fprintf(output, "SEPAR_PARA "); break;
-        case XML_REGEXP_SYMBOL:
-            fprintf(output, "SYMBOL "); break;
-        case XML_REGEXP_SYMBOL_MATH:
-            fprintf(output, "SYMBOL_MATH "); break;
-        case XML_REGEXP_SYMBOL_CURRENCY:
-            fprintf(output, "SYMBOL_CURRENCY "); break;
-        case XML_REGEXP_SYMBOL_MODIFIER:
-            fprintf(output, "SYMBOL_MODIFIER "); break;
-        case XML_REGEXP_SYMBOL_OTHERS:
-            fprintf(output, "SYMBOL_OTHERS "); break;
-        case XML_REGEXP_OTHER:
-            fprintf(output, "OTHER "); break;
-        case XML_REGEXP_OTHER_CONTROL:
-            fprintf(output, "OTHER_CONTROL "); break;
-        case XML_REGEXP_OTHER_FORMAT:
-            fprintf(output, "OTHER_FORMAT "); break;
-        case XML_REGEXP_OTHER_PRIVATE:
-            fprintf(output, "OTHER_PRIVATE "); break;
-        case XML_REGEXP_OTHER_NA:
-            fprintf(output, "OTHER_NA "); break;
-        case XML_REGEXP_BLOCK_NAME:
-	    fprintf(output, "BLOCK "); break;
-    }
-}
-
-static void
-xmlRegPrintQuantType(FILE *output, xmlRegQuantType type) {
-    switch (type) {
-        case XML_REGEXP_QUANT_EPSILON:
-	    fprintf(output, "epsilon "); break;
-        case XML_REGEXP_QUANT_ONCE:
-	    fprintf(output, "once "); break;
-        case XML_REGEXP_QUANT_OPT:
-	    fprintf(output, "? "); break;
-        case XML_REGEXP_QUANT_MULT:
-	    fprintf(output, "* "); break;
-        case XML_REGEXP_QUANT_PLUS:
-	    fprintf(output, "+ "); break;
-	case XML_REGEXP_QUANT_RANGE:
-	    fprintf(output, "range "); break;
-	case XML_REGEXP_QUANT_ONCEONLY:
-	    fprintf(output, "onceonly "); break;
-	case XML_REGEXP_QUANT_ALL:
-	    fprintf(output, "all "); break;
-    }
-}
-static void
-xmlRegPrintRange(FILE *output, xmlRegRangePtr range) {
-    fprintf(output, "  range: ");
-    if (range->neg)
-	fprintf(output, "negative ");
-    xmlRegPrintAtomType(output, range->type);
-    fprintf(output, "%c - %c\n", range->start, range->end);
-}
-
-static void
-xmlRegPrintAtom(FILE *output, xmlRegAtomPtr atom) {
-    fprintf(output, " atom: ");
-    if (atom == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    if (atom->neg)
-        fprintf(output, "not ");
-    xmlRegPrintAtomType(output, atom->type);
-    xmlRegPrintQuantType(output, atom->quant);
-    if (atom->quant == XML_REGEXP_QUANT_RANGE)
-	fprintf(output, "%d-%d ", atom->min, atom->max);
-    if (atom->type == XML_REGEXP_STRING)
-	fprintf(output, "'%s' ", (char *) atom->valuep);
-    if (atom->type == XML_REGEXP_CHARVAL)
-	fprintf(output, "char %c\n", atom->codepoint);
-    else if (atom->type == XML_REGEXP_RANGES) {
-	int i;
-	fprintf(output, "%d entries\n", atom->nbRanges);
-	for (i = 0; i < atom->nbRanges;i++)
-	    xmlRegPrintRange(output, atom->ranges[i]);
-    } else if (atom->type == XML_REGEXP_SUBREG) {
-	fprintf(output, "start %d end %d\n", atom->start->no, atom->stop->no);
-    } else {
-	fprintf(output, "\n");
-    }
-}
-
-static void
-xmlRegPrintTrans(FILE *output, xmlRegTransPtr trans) {
-    fprintf(output, "  trans: ");
-    if (trans == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    if (trans->to < 0) {
-	fprintf(output, "removed\n");
-	return;
-    }
-    if (trans->nd != 0) {
-	if (trans->nd == 2)
-	    fprintf(output, "last not determinist, ");
-	else
-	    fprintf(output, "not determinist, ");
-    }
-    if (trans->counter >= 0) {
-	fprintf(output, "counted %d, ", trans->counter);
-    }
-    if (trans->count == REGEXP_ALL_COUNTER) {
-	fprintf(output, "all transition, ");
-    } else if (trans->count >= 0) {
-	fprintf(output, "count based %d, ", trans->count);
-    }
-    if (trans->atom == NULL) {
-	fprintf(output, "epsilon to %d\n", trans->to);
-	return;
-    }
-    if (trans->atom->type == XML_REGEXP_CHARVAL)
-	fprintf(output, "char %c ", trans->atom->codepoint);
-    fprintf(output, "atom %d, to %d\n", trans->atom->no, trans->to);
-}
-
-static void
-xmlRegPrintState(FILE *output, xmlRegStatePtr state) {
-    int i;
-
-    fprintf(output, " state: ");
-    if (state == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    if (state->type == XML_REGEXP_START_STATE)
-	fprintf(output, "START ");
-    if (state->type == XML_REGEXP_FINAL_STATE)
-	fprintf(output, "FINAL ");
-
-    fprintf(output, "%d, %d transitions:\n", state->no, state->nbTrans);
-    for (i = 0;i < state->nbTrans; i++) {
-	xmlRegPrintTrans(output, &(state->trans[i]));
-    }
-}
-
-#ifdef DEBUG_REGEXP_GRAPH
-static void
-xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) {
-    int i;
-
-    fprintf(output, " ctxt: ");
-    if (ctxt == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    fprintf(output, "'%s' ", ctxt->string);
-    if (ctxt->error)
-	fprintf(output, "error ");
-    if (ctxt->neg)
-	fprintf(output, "neg ");
-    fprintf(output, "\n");
-    fprintf(output, "%d atoms:\n", ctxt->nbAtoms);
-    for (i = 0;i < ctxt->nbAtoms; i++) {
-	fprintf(output, " %02d ", i);
-	xmlRegPrintAtom(output, ctxt->atoms[i]);
-    }
-    if (ctxt->atom != NULL) {
-	fprintf(output, "current atom:\n");
-	xmlRegPrintAtom(output, ctxt->atom);
-    }
-    fprintf(output, "%d states:", ctxt->nbStates);
-    if (ctxt->start != NULL)
-	fprintf(output, " start: %d", ctxt->start->no);
-    if (ctxt->end != NULL)
-	fprintf(output, " end: %d", ctxt->end->no);
-    fprintf(output, "\n");
-    for (i = 0;i < ctxt->nbStates; i++) {
-	xmlRegPrintState(output, ctxt->states[i]);
-    }
-    fprintf(output, "%d counters:\n", ctxt->nbCounters);
-    for (i = 0;i < ctxt->nbCounters; i++) {
-	fprintf(output, " %d: min %d max %d\n", i, ctxt->counters[i].min,
-		                                ctxt->counters[i].max);
-    }
-}
-#endif
-
-/************************************************************************
- *									*
- *		 Finite Automata structures manipulations		*
- *									*
- ************************************************************************/
-
-static void
-xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom,
-	           int neg, xmlRegAtomType type, int start, int end,
-		   xmlChar *blockName) {
-    xmlRegRangePtr range;
-
-    if (atom == NULL) {
-	ERROR("add range: atom is NULL");
-	return;
-    }
-    if (atom->type != XML_REGEXP_RANGES) {
-	ERROR("add range: atom is not ranges");
-	return;
-    }
-    if (atom->maxRanges == 0) {
-	atom->maxRanges = 4;
-	atom->ranges = (xmlRegRangePtr *) xmlMalloc(atom->maxRanges *
-		                             sizeof(xmlRegRangePtr));
-	if (atom->ranges == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding ranges");
-	    atom->maxRanges = 0;
-	    return;
-	}
-    } else if (atom->nbRanges >= atom->maxRanges) {
-	xmlRegRangePtr *tmp;
-	atom->maxRanges *= 2;
-	tmp = (xmlRegRangePtr *) xmlRealloc(atom->ranges, atom->maxRanges *
-		                             sizeof(xmlRegRangePtr));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding ranges");
-	    atom->maxRanges /= 2;
-	    return;
-	}
-	atom->ranges = tmp;
-    }
-    range = xmlRegNewRange(ctxt, neg, type, start, end);
-    if (range == NULL)
-	return;
-    range->blockName = blockName;
-    atom->ranges[atom->nbRanges++] = range;
-
-}
-
-static int
-xmlRegGetCounter(xmlRegParserCtxtPtr ctxt) {
-    if (ctxt->maxCounters == 0) {
-	ctxt->maxCounters = 4;
-	ctxt->counters = (xmlRegCounter *) xmlMalloc(ctxt->maxCounters *
-		                             sizeof(xmlRegCounter));
-	if (ctxt->counters == NULL) {
-	    xmlRegexpErrMemory(ctxt, "allocating counter");
-	    ctxt->maxCounters = 0;
-	    return(-1);
-	}
-    } else if (ctxt->nbCounters >= ctxt->maxCounters) {
-	xmlRegCounter *tmp;
-	ctxt->maxCounters *= 2;
-	tmp = (xmlRegCounter *) xmlRealloc(ctxt->counters, ctxt->maxCounters *
-		                           sizeof(xmlRegCounter));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "allocating counter");
-	    ctxt->maxCounters /= 2;
-	    return(-1);
-	}
-	ctxt->counters = tmp;
-    }
-    ctxt->counters[ctxt->nbCounters].min = -1;
-    ctxt->counters[ctxt->nbCounters].max = -1;
-    return(ctxt->nbCounters++);
-}
-
-static int
-xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
-    if (atom == NULL) {
-	ERROR("atom push: atom is NULL");
-	return(-1);
-    }
-    if (ctxt->maxAtoms == 0) {
-	ctxt->maxAtoms = 4;
-	ctxt->atoms = (xmlRegAtomPtr *) xmlMalloc(ctxt->maxAtoms *
-		                             sizeof(xmlRegAtomPtr));
-	if (ctxt->atoms == NULL) {
-	    xmlRegexpErrMemory(ctxt, "pushing atom");
-	    ctxt->maxAtoms = 0;
-	    return(-1);
-	}
-    } else if (ctxt->nbAtoms >= ctxt->maxAtoms) {
-	xmlRegAtomPtr *tmp;
-	ctxt->maxAtoms *= 2;
-	tmp = (xmlRegAtomPtr *) xmlRealloc(ctxt->atoms, ctxt->maxAtoms *
-		                             sizeof(xmlRegAtomPtr));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "allocating counter");
-	    ctxt->maxAtoms /= 2;
-	    return(-1);
-	}
-	ctxt->atoms = tmp;
-    }
-    atom->no = ctxt->nbAtoms;
-    ctxt->atoms[ctxt->nbAtoms++] = atom;
-    return(0);
-}
-
-static void
-xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target,
-                      int from) {
-    if (target->maxTransTo == 0) {
-	target->maxTransTo = 8;
-	target->transTo = (int *) xmlMalloc(target->maxTransTo *
-		                             sizeof(int));
-	if (target->transTo == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding transition");
-	    target->maxTransTo = 0;
-	    return;
-	}
-    } else if (target->nbTransTo >= target->maxTransTo) {
-	int *tmp;
-	target->maxTransTo *= 2;
-	tmp = (int *) xmlRealloc(target->transTo, target->maxTransTo *
-		                             sizeof(int));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding transition");
-	    target->maxTransTo /= 2;
-	    return;
-	}
-	target->transTo = tmp;
-    }
-    target->transTo[target->nbTransTo] = from;
-    target->nbTransTo++;
-}
-
-static void
-xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
-	            xmlRegAtomPtr atom, xmlRegStatePtr target,
-		    int counter, int count) {
-
-    int nrtrans;
-
-    if (state == NULL) {
-	ERROR("add state: state is NULL");
-	return;
-    }
-    if (target == NULL) {
-	ERROR("add state: target is NULL");
-	return;
-    }
-    /*
-     * Other routines follow the philosophy 'When in doubt, add a transition'
-     * so we check here whether such a transition is already present and, if
-     * so, silently ignore this request.
-     */
-
-    for (nrtrans = state->nbTrans - 1; nrtrans >= 0; nrtrans--) {
-	xmlRegTransPtr trans = &(state->trans[nrtrans]);
-	if ((trans->atom == atom) &&
-	    (trans->to == target->no) &&
-	    (trans->counter == counter) &&
-	    (trans->count == count)) {
-#ifdef DEBUG_REGEXP_GRAPH
-	    printf("Ignoring duplicate transition from %d to %d\n",
-		    state->no, target->no);
-#endif
-	    return;
-	}
-    }
-
-    if (state->maxTrans == 0) {
-	state->maxTrans = 8;
-	state->trans = (xmlRegTrans *) xmlMalloc(state->maxTrans *
-		                             sizeof(xmlRegTrans));
-	if (state->trans == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding transition");
-	    state->maxTrans = 0;
-	    return;
-	}
-    } else if (state->nbTrans >= state->maxTrans) {
-	xmlRegTrans *tmp;
-	state->maxTrans *= 2;
-	tmp = (xmlRegTrans *) xmlRealloc(state->trans, state->maxTrans *
-		                             sizeof(xmlRegTrans));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding transition");
-	    state->maxTrans /= 2;
-	    return;
-	}
-	state->trans = tmp;
-    }
-#ifdef DEBUG_REGEXP_GRAPH
-    printf("Add trans from %d to %d ", state->no, target->no);
-    if (count == REGEXP_ALL_COUNTER)
-	printf("all transition\n");
-    else if (count >= 0)
-	printf("count based %d\n", count);
-    else if (counter >= 0)
-	printf("counted %d\n", counter);
-    else if (atom == NULL)
-	printf("epsilon transition\n");
-    else if (atom != NULL)
-        xmlRegPrintAtom(stdout, atom);
-#endif
-
-    state->trans[state->nbTrans].atom = atom;
-    state->trans[state->nbTrans].to = target->no;
-    state->trans[state->nbTrans].counter = counter;
-    state->trans[state->nbTrans].count = count;
-    state->trans[state->nbTrans].nd = 0;
-    state->nbTrans++;
-    xmlRegStateAddTransTo(ctxt, target, state->no);
-}
-
-static int
-xmlRegStatePush(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state) {
-    if (state == NULL) return(-1);
-    if (ctxt->maxStates == 0) {
-	ctxt->maxStates = 4;
-	ctxt->states = (xmlRegStatePtr *) xmlMalloc(ctxt->maxStates *
-		                             sizeof(xmlRegStatePtr));
-	if (ctxt->states == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding state");
-	    ctxt->maxStates = 0;
-	    return(-1);
-	}
-    } else if (ctxt->nbStates >= ctxt->maxStates) {
-	xmlRegStatePtr *tmp;
-	ctxt->maxStates *= 2;
-	tmp = (xmlRegStatePtr *) xmlRealloc(ctxt->states, ctxt->maxStates *
-		                             sizeof(xmlRegStatePtr));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(ctxt, "adding state");
-	    ctxt->maxStates /= 2;
-	    return(-1);
-	}
-	ctxt->states = tmp;
-    }
-    state->no = ctxt->nbStates;
-    ctxt->states[ctxt->nbStates++] = state;
-    return(0);
-}
-
-/**
- * xmlFAGenerateAllTransition:
- * @ctxt:  a regexp parser context
- * @from:  the from state
- * @to:  the target state or NULL for building a new one
- * @lax:
- *
- */
-static void
-xmlFAGenerateAllTransition(xmlRegParserCtxtPtr ctxt,
-			   xmlRegStatePtr from, xmlRegStatePtr to,
-			   int lax) {
-    if (to == NULL) {
-	to = xmlRegNewState(ctxt);
-	xmlRegStatePush(ctxt, to);
-	ctxt->state = to;
-    }
-    if (lax)
-	xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_LAX_COUNTER);
-    else
-	xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_COUNTER);
-}
-
-/**
- * xmlFAGenerateEpsilonTransition:
- * @ctxt:  a regexp parser context
- * @from:  the from state
- * @to:  the target state or NULL for building a new one
- *
- */
-static void
-xmlFAGenerateEpsilonTransition(xmlRegParserCtxtPtr ctxt,
-			       xmlRegStatePtr from, xmlRegStatePtr to) {
-    if (to == NULL) {
-	to = xmlRegNewState(ctxt);
-	xmlRegStatePush(ctxt, to);
-	ctxt->state = to;
-    }
-    xmlRegStateAddTrans(ctxt, from, NULL, to, -1, -1);
-}
-
-/**
- * xmlFAGenerateCountedEpsilonTransition:
- * @ctxt:  a regexp parser context
- * @from:  the from state
- * @to:  the target state or NULL for building a new one
- * counter:  the counter for that transition
- *
- */
-static void
-xmlFAGenerateCountedEpsilonTransition(xmlRegParserCtxtPtr ctxt,
-	    xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
-    if (to == NULL) {
-	to = xmlRegNewState(ctxt);
-	xmlRegStatePush(ctxt, to);
-	ctxt->state = to;
-    }
-    xmlRegStateAddTrans(ctxt, from, NULL, to, counter, -1);
-}
-
-/**
- * xmlFAGenerateCountedTransition:
- * @ctxt:  a regexp parser context
- * @from:  the from state
- * @to:  the target state or NULL for building a new one
- * counter:  the counter for that transition
- *
- */
-static void
-xmlFAGenerateCountedTransition(xmlRegParserCtxtPtr ctxt,
-	    xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
-    if (to == NULL) {
-	to = xmlRegNewState(ctxt);
-	xmlRegStatePush(ctxt, to);
-	ctxt->state = to;
-    }
-    xmlRegStateAddTrans(ctxt, from, NULL, to, -1, counter);
-}
-
-/**
- * xmlFAGenerateTransitions:
- * @ctxt:  a regexp parser context
- * @from:  the from state
- * @to:  the target state or NULL for building a new one
- * @atom:  the atom generating the transition
- *
- * Returns 0 if success and -1 in case of error.
- */
-static int
-xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
-	                 xmlRegStatePtr to, xmlRegAtomPtr atom) {
-    xmlRegStatePtr end;
-    int nullable = 0;
-
-    if (atom == NULL) {
-	ERROR("genrate transition: atom == NULL");
-	return(-1);
-    }
-    if (atom->type == XML_REGEXP_SUBREG) {
-	/*
-	 * this is a subexpression handling one should not need to
-	 * create a new node except for XML_REGEXP_QUANT_RANGE.
-	 */
-	if (xmlRegAtomPush(ctxt, atom) < 0) {
-	    return(-1);
-	}
-	if ((to != NULL) && (atom->stop != to) &&
-	    (atom->quant != XML_REGEXP_QUANT_RANGE)) {
-	    /*
-	     * Generate an epsilon transition to link to the target
-	     */
-	    xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
-#ifdef DV
-	} else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) &&
-		   (atom->quant != XML_REGEXP_QUANT_ONCE)) {
-	    to = xmlRegNewState(ctxt);
-	    xmlRegStatePush(ctxt, to);
-	    ctxt->state = to;
-	    xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
-#endif
-	}
-	switch (atom->quant) {
-	    case XML_REGEXP_QUANT_OPT:
-		atom->quant = XML_REGEXP_QUANT_ONCE;
-		/*
-		 * transition done to the state after end of atom.
-		 *      1. set transition from atom start to new state
-		 *      2. set transition from atom end to this state.
-		 */
-                if (to == NULL) {
-                    xmlFAGenerateEpsilonTransition(ctxt, atom->start, 0);
-                    xmlFAGenerateEpsilonTransition(ctxt, atom->stop,
-                                                   ctxt->state);
-                } else {
-                    xmlFAGenerateEpsilonTransition(ctxt, atom->start, to);
-                }
-		break;
-	    case XML_REGEXP_QUANT_MULT:
-		atom->quant = XML_REGEXP_QUANT_ONCE;
-		xmlFAGenerateEpsilonTransition(ctxt, atom->start, atom->stop);
-		xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
-		break;
-	    case XML_REGEXP_QUANT_PLUS:
-		atom->quant = XML_REGEXP_QUANT_ONCE;
-		xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
-		break;
-	    case XML_REGEXP_QUANT_RANGE: {
-		int counter;
-		xmlRegStatePtr inter, newstate;
-
-		/*
-		 * create the final state now if needed
-		 */
-		if (to != NULL) {
-		    newstate = to;
-		} else {
-		    newstate = xmlRegNewState(ctxt);
-		    xmlRegStatePush(ctxt, newstate);
-		}
-
-		/*
-		 * The principle here is to use counted transition
-		 * to avoid explosion in the number of states in the
-		 * graph. This is clearly more complex but should not
-		 * be exploitable at runtime.
-		 */
-		if ((atom->min == 0) && (atom->start0 == NULL)) {
-		    xmlRegAtomPtr copy;
-		    /*
-		     * duplicate a transition based on atom to count next
-		     * occurences after 1. We cannot loop to atom->start
-		     * directly because we need an epsilon transition to
-		     * newstate.
-		     */
-		     /* ???? For some reason it seems we never reach that
-		        case, I suppose this got optimized out before when
-			building the automata */
-		    copy = xmlRegCopyAtom(ctxt, atom);
-		    if (copy == NULL)
-		        return(-1);
-		    copy->quant = XML_REGEXP_QUANT_ONCE;
-		    copy->min = 0;
-		    copy->max = 0;
-
-		    if (xmlFAGenerateTransitions(ctxt, atom->start, NULL, copy)
-		        < 0)
-			return(-1);
-		    inter = ctxt->state;
-		    counter = xmlRegGetCounter(ctxt);
-		    ctxt->counters[counter].min = atom->min - 1;
-		    ctxt->counters[counter].max = atom->max - 1;
-		    /* count the number of times we see it again */
-		    xmlFAGenerateCountedEpsilonTransition(ctxt, inter,
-						   atom->stop, counter);
-		    /* allow a way out based on the count */
-		    xmlFAGenerateCountedTransition(ctxt, inter,
-			                           newstate, counter);
-		    /* and also allow a direct exit for 0 */
-		    xmlFAGenerateEpsilonTransition(ctxt, atom->start,
-		                                   newstate);
-		} else {
-		    /*
-		     * either we need the atom at least once or there
-		     * is an atom->start0 allowing to easilly plug the
-		     * epsilon transition.
-		     */
-		    counter = xmlRegGetCounter(ctxt);
-		    ctxt->counters[counter].min = atom->min - 1;
-		    ctxt->counters[counter].max = atom->max - 1;
-		    /* count the number of times we see it again */
-		    xmlFAGenerateCountedEpsilonTransition(ctxt, atom->stop,
-						   atom->start, counter);
-		    /* allow a way out based on the count */
-		    xmlFAGenerateCountedTransition(ctxt, atom->stop,
-			                           newstate, counter);
-		    /* and if needed allow a direct exit for 0 */
-		    if (atom->min == 0)
-			xmlFAGenerateEpsilonTransition(ctxt, atom->start0,
-						       newstate);
-
-		}
-		atom->min = 0;
-		atom->max = 0;
-		atom->quant = XML_REGEXP_QUANT_ONCE;
-		ctxt->state = newstate;
-	    }
-	    default:
-		break;
-	}
-	return(0);
-    }
-    if ((atom->min == 0) && (atom->max == 0) &&
-               (atom->quant == XML_REGEXP_QUANT_RANGE)) {
-        /*
-	 * we can discard the atom and generate an epsilon transition instead
-	 */
-	if (to == NULL) {
-	    to = xmlRegNewState(ctxt);
-	    if (to != NULL)
-		xmlRegStatePush(ctxt, to);
-	    else {
-		return(-1);
-	    }
-	}
-	xmlFAGenerateEpsilonTransition(ctxt, from, to);
-	ctxt->state = to;
-	xmlRegFreeAtom(atom);
-	return(0);
-    }
-    if (to == NULL) {
-	to = xmlRegNewState(ctxt);
-	if (to != NULL)
-	    xmlRegStatePush(ctxt, to);
-	else {
-	    return(-1);
-	}
-    }
-    end = to;
-    if ((atom->quant == XML_REGEXP_QUANT_MULT) ||
-        (atom->quant == XML_REGEXP_QUANT_PLUS)) {
-	/*
-	 * Do not pollute the target state by adding transitions from
-	 * it as it is likely to be the shared target of multiple branches.
-	 * So isolate with an epsilon transition.
-	 */
-        xmlRegStatePtr tmp;
-
-	tmp = xmlRegNewState(ctxt);
-	if (tmp != NULL)
-	    xmlRegStatePush(ctxt, tmp);
-	else {
-	    return(-1);
-	}
-	xmlFAGenerateEpsilonTransition(ctxt, tmp, to);
-	to = tmp;
-    }
-    if (xmlRegAtomPush(ctxt, atom) < 0) {
-	return(-1);
-    }
-    if ((atom->quant == XML_REGEXP_QUANT_RANGE) &&
-        (atom->min == 0) && (atom->max > 0)) {
-	nullable = 1;
-	atom->min = 1;
-        if (atom->max == 1)
-	    atom->quant = XML_REGEXP_QUANT_OPT;
-    }
-    xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1);
-    ctxt->state = end;
-    switch (atom->quant) {
-	case XML_REGEXP_QUANT_OPT:
-	    atom->quant = XML_REGEXP_QUANT_ONCE;
-	    xmlFAGenerateEpsilonTransition(ctxt, from, to);
-	    break;
-	case XML_REGEXP_QUANT_MULT:
-	    atom->quant = XML_REGEXP_QUANT_ONCE;
-	    xmlFAGenerateEpsilonTransition(ctxt, from, to);
-	    xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
-	    break;
-	case XML_REGEXP_QUANT_PLUS:
-	    atom->quant = XML_REGEXP_QUANT_ONCE;
-	    xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
-	    break;
-	case XML_REGEXP_QUANT_RANGE:
-	    if (nullable)
-		xmlFAGenerateEpsilonTransition(ctxt, from, to);
-	    break;
-	default:
-	    break;
-    }
-    return(0);
-}
-
-/**
- * xmlFAReduceEpsilonTransitions:
- * @ctxt:  a regexp parser context
- * @fromnr:  the from state
- * @tonr:  the to state
- * @counter:  should that transition be associated to a counted
- *
- */
-static void
-xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
-	                      int tonr, int counter) {
-    int transnr;
-    xmlRegStatePtr from;
-    xmlRegStatePtr to;
-
-#ifdef DEBUG_REGEXP_GRAPH
-    printf("xmlFAReduceEpsilonTransitions(%d, %d)\n", fromnr, tonr);
-#endif
-    from = ctxt->states[fromnr];
-    if (from == NULL)
-	return;
-    to = ctxt->states[tonr];
-    if (to == NULL)
-	return;
-    if ((to->mark == XML_REGEXP_MARK_START) ||
-	(to->mark == XML_REGEXP_MARK_VISITED))
-	return;
-
-    to->mark = XML_REGEXP_MARK_VISITED;
-    if (to->type == XML_REGEXP_FINAL_STATE) {
-#ifdef DEBUG_REGEXP_GRAPH
-	printf("State %d is final, so %d becomes final\n", tonr, fromnr);
-#endif
-	from->type = XML_REGEXP_FINAL_STATE;
-    }
-    for (transnr = 0;transnr < to->nbTrans;transnr++) {
-        if (to->trans[transnr].to < 0)
-	    continue;
-	if (to->trans[transnr].atom == NULL) {
-	    /*
-	     * Don't remove counted transitions
-	     * Don't loop either
-	     */
-	    if (to->trans[transnr].to != fromnr) {
-		if (to->trans[transnr].count >= 0) {
-		    int newto = to->trans[transnr].to;
-
-		    xmlRegStateAddTrans(ctxt, from, NULL,
-					ctxt->states[newto],
-					-1, to->trans[transnr].count);
-		} else {
-#ifdef DEBUG_REGEXP_GRAPH
-		    printf("Found epsilon trans %d from %d to %d\n",
-			   transnr, tonr, to->trans[transnr].to);
-#endif
-		    if (to->trans[transnr].counter >= 0) {
-			xmlFAReduceEpsilonTransitions(ctxt, fromnr,
-					      to->trans[transnr].to,
-					      to->trans[transnr].counter);
-		    } else {
-			xmlFAReduceEpsilonTransitions(ctxt, fromnr,
-					      to->trans[transnr].to,
-					      counter);
-		    }
-		}
-	    }
-	} else {
-	    int newto = to->trans[transnr].to;
-
-	    if (to->trans[transnr].counter >= 0) {
-		xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
-				    ctxt->states[newto],
-				    to->trans[transnr].counter, -1);
-	    } else {
-		xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
-				    ctxt->states[newto], counter, -1);
-	    }
-	}
-    }
-    to->mark = XML_REGEXP_MARK_NORMAL;
-}
-
-/**
- * xmlFAEliminateSimpleEpsilonTransitions:
- * @ctxt:  a regexp parser context
- *
- * Eliminating general epsilon transitions can get costly in the general
- * algorithm due to the large amount of generated new transitions and
- * associated comparisons. However for simple epsilon transition used just
- * to separate building blocks when generating the automata this can be
- * reduced to state elimination:
- *    - if there exists an epsilon from X to Y
- *    - if there is no other transition from X
- * then X and Y are semantically equivalent and X can be eliminated
- * If X is the start state then make Y the start state, else replace the
- * target of all transitions to X by transitions to Y.
- */
-static void
-xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
-    int statenr, i, j, newto;
-    xmlRegStatePtr state, tmp;
-
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if (state == NULL)
-	    continue;
-	if (state->nbTrans != 1)
-	    continue;
-	if (state->type == XML_REGEXP_UNREACH_STATE)
-	    continue;
-	/* is the only transition out a basic transition */
-	if ((state->trans[0].atom == NULL) &&
-	    (state->trans[0].to >= 0) &&
-	    (state->trans[0].to != statenr) &&
-	    (state->trans[0].counter < 0) &&
-	    (state->trans[0].count < 0)) {
-	    newto = state->trans[0].to;
-
-            if (state->type == XML_REGEXP_START_STATE) {
-#ifdef DEBUG_REGEXP_GRAPH
-		printf("Found simple epsilon trans from start %d to %d\n",
-		       statenr, newto);
-#endif
-            } else {
-#ifdef DEBUG_REGEXP_GRAPH
-		printf("Found simple epsilon trans from %d to %d\n",
-		       statenr, newto);
-#endif
-	        for (i = 0;i < state->nbTransTo;i++) {
-		    tmp = ctxt->states[state->transTo[i]];
-		    for (j = 0;j < tmp->nbTrans;j++) {
-			if (tmp->trans[j].to == statenr) {
-#ifdef DEBUG_REGEXP_GRAPH
-			    printf("Changed transition %d on %d to go to %d\n",
-				   j, tmp->no, newto);
-#endif
-			    tmp->trans[j].to = -1;
-			    xmlRegStateAddTrans(ctxt, tmp, tmp->trans[j].atom,
-						ctxt->states[newto],
-					        tmp->trans[j].counter,
-						tmp->trans[j].count);
-			}
-		    }
-		}
-		if (state->type == XML_REGEXP_FINAL_STATE)
-		    ctxt->states[newto]->type = XML_REGEXP_FINAL_STATE;
-		/* eliminate the transition completely */
-		state->nbTrans = 0;
-
-                state->type = XML_REGEXP_UNREACH_STATE;
-
-	    }
-
-	}
-    }
-}
-/**
- * xmlFAEliminateEpsilonTransitions:
- * @ctxt:  a regexp parser context
- *
- */
-static void
-xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
-    int statenr, transnr;
-    xmlRegStatePtr state;
-    int has_epsilon;
-
-    if (ctxt->states == NULL) return;
-
-    /*
-     * Eliminate simple epsilon transition and the associated unreachable
-     * states.
-     */
-    xmlFAEliminateSimpleEpsilonTransitions(ctxt);
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if ((state != NULL) && (state->type == XML_REGEXP_UNREACH_STATE)) {
-#ifdef DEBUG_REGEXP_GRAPH
-	    printf("Removed unreachable state %d\n", statenr);
-#endif
-	    xmlRegFreeState(state);
-	    ctxt->states[statenr] = NULL;
-	}
-    }
-
-    has_epsilon = 0;
-
-    /*
-     * Build the completed transitions bypassing the epsilons
-     * Use a marking algorithm to avoid loops
-     * Mark sink states too.
-     * Process from the latests states backward to the start when
-     * there is long cascading epsilon chains this minimize the
-     * recursions and transition compares when adding the new ones
-     */
-    for (statenr = ctxt->nbStates - 1;statenr >= 0;statenr--) {
-	state = ctxt->states[statenr];
-	if (state == NULL)
-	    continue;
-	if ((state->nbTrans == 0) &&
-	    (state->type != XML_REGEXP_FINAL_STATE)) {
-	    state->type = XML_REGEXP_SINK_STATE;
-	}
-	for (transnr = 0;transnr < state->nbTrans;transnr++) {
-	    if ((state->trans[transnr].atom == NULL) &&
-		(state->trans[transnr].to >= 0)) {
-		if (state->trans[transnr].to == statenr) {
-		    state->trans[transnr].to = -1;
-#ifdef DEBUG_REGEXP_GRAPH
-		    printf("Removed loopback epsilon trans %d on %d\n",
-			   transnr, statenr);
-#endif
-		} else if (state->trans[transnr].count < 0) {
-		    int newto = state->trans[transnr].to;
-
-#ifdef DEBUG_REGEXP_GRAPH
-		    printf("Found epsilon trans %d from %d to %d\n",
-			   transnr, statenr, newto);
-#endif
-		    has_epsilon = 1;
-		    state->trans[transnr].to = -2;
-		    state->mark = XML_REGEXP_MARK_START;
-		    xmlFAReduceEpsilonTransitions(ctxt, statenr,
-				      newto, state->trans[transnr].counter);
-		    state->mark = XML_REGEXP_MARK_NORMAL;
-#ifdef DEBUG_REGEXP_GRAPH
-		} else {
-		    printf("Found counted transition %d on %d\n",
-			   transnr, statenr);
-#endif
-	        }
-	    }
-	}
-    }
-    /*
-     * Eliminate the epsilon transitions
-     */
-    if (has_epsilon) {
-	for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	    state = ctxt->states[statenr];
-	    if (state == NULL)
-		continue;
-	    for (transnr = 0;transnr < state->nbTrans;transnr++) {
-		xmlRegTransPtr trans = &(state->trans[transnr]);
-		if ((trans->atom == NULL) &&
-		    (trans->count < 0) &&
-		    (trans->to >= 0)) {
-		    trans->to = -1;
-		}
-	    }
-	}
-    }
-
-    /*
-     * Use this pass to detect unreachable states too
-     */
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if (state != NULL)
-	    state->reached = XML_REGEXP_MARK_NORMAL;
-    }
-    state = ctxt->states[0];
-    if (state != NULL)
-	state->reached = XML_REGEXP_MARK_START;
-    while (state != NULL) {
-	xmlRegStatePtr target = NULL;
-	state->reached = XML_REGEXP_MARK_VISITED;
-	/*
-	 * Mark all states reachable from the current reachable state
-	 */
-	for (transnr = 0;transnr < state->nbTrans;transnr++) {
-	    if ((state->trans[transnr].to >= 0) &&
-		((state->trans[transnr].atom != NULL) ||
-		 (state->trans[transnr].count >= 0))) {
-		int newto = state->trans[transnr].to;
-
-		if (ctxt->states[newto] == NULL)
-		    continue;
-		if (ctxt->states[newto]->reached == XML_REGEXP_MARK_NORMAL) {
-		    ctxt->states[newto]->reached = XML_REGEXP_MARK_START;
-		    target = ctxt->states[newto];
-		}
-	    }
-	}
-
-	/*
-	 * find the next accessible state not explored
-	 */
-	if (target == NULL) {
-	    for (statenr = 1;statenr < ctxt->nbStates;statenr++) {
-		state = ctxt->states[statenr];
-		if ((state != NULL) && (state->reached ==
-			XML_REGEXP_MARK_START)) {
-		    target = state;
-		    break;
-		}
-	    }
-	}
-	state = target;
-    }
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if ((state != NULL) && (state->reached == XML_REGEXP_MARK_NORMAL)) {
-#ifdef DEBUG_REGEXP_GRAPH
-	    printf("Removed unreachable state %d\n", statenr);
-#endif
-	    xmlRegFreeState(state);
-	    ctxt->states[statenr] = NULL;
-	}
-    }
-
-}
-
-static int
-xmlFACompareRanges(xmlRegRangePtr range1, xmlRegRangePtr range2) {
-    int ret = 0;
-
-    if ((range1->type == XML_REGEXP_RANGES) ||
-        (range2->type == XML_REGEXP_RANGES) ||
-        (range2->type == XML_REGEXP_SUBREG) ||
-        (range1->type == XML_REGEXP_SUBREG) ||
-        (range1->type == XML_REGEXP_STRING) ||
-        (range2->type == XML_REGEXP_STRING))
-	return(-1);
-
-    /* put them in order */
-    if (range1->type > range2->type) {
-        xmlRegRangePtr tmp;
-
-	tmp = range1;
-	range1 = range2;
-	range2 = tmp;
-    }
-    if ((range1->type == XML_REGEXP_ANYCHAR) ||
-        (range2->type == XML_REGEXP_ANYCHAR)) {
-	ret = 1;
-    } else if ((range1->type == XML_REGEXP_EPSILON) ||
-               (range2->type == XML_REGEXP_EPSILON)) {
-	return(0);
-    } else if (range1->type == range2->type) {
-        if (range1->type != XML_REGEXP_CHARVAL)
-            ret = 1;
-        else if ((range1->end < range2->start) ||
-	         (range2->end < range1->start))
-	    ret = 0;
-	else
-	    ret = 1;
-    } else if (range1->type == XML_REGEXP_CHARVAL) {
-        int codepoint;
-	int neg = 0;
-
-	/*
-	 * just check all codepoints in the range for acceptance,
-	 * this is usually way cheaper since done only once at
-	 * compilation than testing over and over at runtime or
-	 * pushing too many states when evaluating.
-	 */
-	if (((range1->neg == 0) && (range2->neg != 0)) ||
-	    ((range1->neg != 0) && (range2->neg == 0)))
-	    neg = 1;
-
-	for (codepoint = range1->start;codepoint <= range1->end ;codepoint++) {
-	    ret = xmlRegCheckCharacterRange(range2->type, codepoint,
-					    0, range2->start, range2->end,
-					    range2->blockName);
-	    if (ret < 0)
-	        return(-1);
-	    if (((neg == 1) && (ret == 0)) ||
-	        ((neg == 0) && (ret == 1)))
-		return(1);
-	}
-	return(0);
-    } else if ((range1->type == XML_REGEXP_BLOCK_NAME) ||
-               (range2->type == XML_REGEXP_BLOCK_NAME)) {
-	if (range1->type == range2->type) {
-	    ret = xmlStrEqual(range1->blockName, range2->blockName);
-	} else {
-	    /*
-	     * comparing a block range with anything else is way
-	     * too costly, and maintining the table is like too much
-	     * memory too, so let's force the automata to save state
-	     * here.
-	     */
-	    return(1);
-	}
-    } else if ((range1->type < XML_REGEXP_LETTER) ||
-               (range2->type < XML_REGEXP_LETTER)) {
-	if ((range1->type == XML_REGEXP_ANYSPACE) &&
-	    (range2->type == XML_REGEXP_NOTSPACE))
-	    ret = 0;
-	else if ((range1->type == XML_REGEXP_INITNAME) &&
-	         (range2->type == XML_REGEXP_NOTINITNAME))
-	    ret = 0;
-	else if ((range1->type == XML_REGEXP_NAMECHAR) &&
-	         (range2->type == XML_REGEXP_NOTNAMECHAR))
-	    ret = 0;
-	else if ((range1->type == XML_REGEXP_DECIMAL) &&
-	         (range2->type == XML_REGEXP_NOTDECIMAL))
-	    ret = 0;
-	else if ((range1->type == XML_REGEXP_REALCHAR) &&
-	         (range2->type == XML_REGEXP_NOTREALCHAR))
-	    ret = 0;
-	else {
-	    /* same thing to limit complexity */
-	    return(1);
-	}
-    } else {
-        ret = 0;
-        /* range1->type < range2->type here */
-        switch (range1->type) {
-	    case XML_REGEXP_LETTER:
-	         /* all disjoint except in the subgroups */
-	         if ((range2->type == XML_REGEXP_LETTER_UPPERCASE) ||
-		     (range2->type == XML_REGEXP_LETTER_LOWERCASE) ||
-		     (range2->type == XML_REGEXP_LETTER_TITLECASE) ||
-		     (range2->type == XML_REGEXP_LETTER_MODIFIER) ||
-		     (range2->type == XML_REGEXP_LETTER_OTHERS))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_MARK:
-	         if ((range2->type == XML_REGEXP_MARK_NONSPACING) ||
-		     (range2->type == XML_REGEXP_MARK_SPACECOMBINING) ||
-		     (range2->type == XML_REGEXP_MARK_ENCLOSING))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_NUMBER:
-	         if ((range2->type == XML_REGEXP_NUMBER_DECIMAL) ||
-		     (range2->type == XML_REGEXP_NUMBER_LETTER) ||
-		     (range2->type == XML_REGEXP_NUMBER_OTHERS))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_PUNCT:
-	         if ((range2->type == XML_REGEXP_PUNCT_CONNECTOR) ||
-		     (range2->type == XML_REGEXP_PUNCT_DASH) ||
-		     (range2->type == XML_REGEXP_PUNCT_OPEN) ||
-		     (range2->type == XML_REGEXP_PUNCT_CLOSE) ||
-		     (range2->type == XML_REGEXP_PUNCT_INITQUOTE) ||
-		     (range2->type == XML_REGEXP_PUNCT_FINQUOTE) ||
-		     (range2->type == XML_REGEXP_PUNCT_OTHERS))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_SEPAR:
-	         if ((range2->type == XML_REGEXP_SEPAR_SPACE) ||
-		     (range2->type == XML_REGEXP_SEPAR_LINE) ||
-		     (range2->type == XML_REGEXP_SEPAR_PARA))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_SYMBOL:
-	         if ((range2->type == XML_REGEXP_SYMBOL_MATH) ||
-		     (range2->type == XML_REGEXP_SYMBOL_CURRENCY) ||
-		     (range2->type == XML_REGEXP_SYMBOL_MODIFIER) ||
-		     (range2->type == XML_REGEXP_SYMBOL_OTHERS))
-		     ret = 1;
-		 break;
-	    case XML_REGEXP_OTHER:
-	         if ((range2->type == XML_REGEXP_OTHER_CONTROL) ||
-		     (range2->type == XML_REGEXP_OTHER_FORMAT) ||
-		     (range2->type == XML_REGEXP_OTHER_PRIVATE))
-		     ret = 1;
-		 break;
-            default:
-	         if ((range2->type >= XML_REGEXP_LETTER) &&
-		     (range2->type < XML_REGEXP_BLOCK_NAME))
-		     ret = 0;
-		 else {
-		     /* safety net ! */
-		     return(1);
-		 }
-	}
-    }
-    if (((range1->neg == 0) && (range2->neg != 0)) ||
-        ((range1->neg != 0) && (range2->neg == 0)))
-	ret = !ret;
-    return(ret);
-}
-
-/**
- * xmlFACompareAtomTypes:
- * @type1:  an atom type
- * @type2:  an atom type
- *
- * Compares two atoms type to check whether they intersect in some ways,
- * this is used by xmlFACompareAtoms only
- *
- * Returns 1 if they may intersect and 0 otherwise
- */
-static int
-xmlFACompareAtomTypes(xmlRegAtomType type1, xmlRegAtomType type2) {
-    if ((type1 == XML_REGEXP_EPSILON) ||
-        (type1 == XML_REGEXP_CHARVAL) ||
-	(type1 == XML_REGEXP_RANGES) ||
-	(type1 == XML_REGEXP_SUBREG) ||
-	(type1 == XML_REGEXP_STRING) ||
-	(type1 == XML_REGEXP_ANYCHAR))
-	return(1);
-    if ((type2 == XML_REGEXP_EPSILON) ||
-        (type2 == XML_REGEXP_CHARVAL) ||
-	(type2 == XML_REGEXP_RANGES) ||
-	(type2 == XML_REGEXP_SUBREG) ||
-	(type2 == XML_REGEXP_STRING) ||
-	(type2 == XML_REGEXP_ANYCHAR))
-	return(1);
-
-    if (type1 == type2) return(1);
-
-    /* simplify subsequent compares by making sure type1 < type2 */
-    if (type1 > type2) {
-        xmlRegAtomType tmp = type1;
-	type1 = type2;
-	type2 = tmp;
-    }
-    switch (type1) {
-        case XML_REGEXP_ANYSPACE: /* \s */
-	    /* can't be a letter, number, mark, pontuation, symbol */
-	    if ((type2 == XML_REGEXP_NOTSPACE) ||
-		((type2 >= XML_REGEXP_LETTER) &&
-		 (type2 <= XML_REGEXP_LETTER_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_NUMBER) &&
-		 (type2 <= XML_REGEXP_NUMBER_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_MARK) &&
-		 (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
-	        ((type2 >= XML_REGEXP_PUNCT) &&
-		 (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_SYMBOL) &&
-		 (type2 <= XML_REGEXP_SYMBOL_OTHERS))
-	        ) return(0);
-	    break;
-        case XML_REGEXP_NOTSPACE: /* \S */
-	    break;
-        case XML_REGEXP_INITNAME: /* \l */
-	    /* can't be a number, mark, separator, pontuation, symbol or other */
-	    if ((type2 == XML_REGEXP_NOTINITNAME) ||
-	        ((type2 >= XML_REGEXP_NUMBER) &&
-		 (type2 <= XML_REGEXP_NUMBER_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_MARK) &&
-		 (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
-	        ((type2 >= XML_REGEXP_SEPAR) &&
-		 (type2 <= XML_REGEXP_SEPAR_PARA)) ||
-	        ((type2 >= XML_REGEXP_PUNCT) &&
-		 (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_SYMBOL) &&
-		 (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_OTHER) &&
-		 (type2 <= XML_REGEXP_OTHER_NA))
-		) return(0);
-	    break;
-        case XML_REGEXP_NOTINITNAME: /* \L */
-	    break;
-        case XML_REGEXP_NAMECHAR: /* \c */
-	    /* can't be a mark, separator, pontuation, symbol or other */
-	    if ((type2 == XML_REGEXP_NOTNAMECHAR) ||
-	        ((type2 >= XML_REGEXP_MARK) &&
-		 (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
-	        ((type2 >= XML_REGEXP_PUNCT) &&
-		 (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_SEPAR) &&
-		 (type2 <= XML_REGEXP_SEPAR_PARA)) ||
-	        ((type2 >= XML_REGEXP_SYMBOL) &&
-		 (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_OTHER) &&
-		 (type2 <= XML_REGEXP_OTHER_NA))
-		) return(0);
-	    break;
-        case XML_REGEXP_NOTNAMECHAR: /* \C */
-	    break;
-        case XML_REGEXP_DECIMAL: /* \d */
-	    /* can't be a letter, mark, separator, pontuation, symbol or other */
-	    if ((type2 == XML_REGEXP_NOTDECIMAL) ||
-	        (type2 == XML_REGEXP_REALCHAR) ||
-		((type2 >= XML_REGEXP_LETTER) &&
-		 (type2 <= XML_REGEXP_LETTER_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_MARK) &&
-		 (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
-	        ((type2 >= XML_REGEXP_PUNCT) &&
-		 (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_SEPAR) &&
-		 (type2 <= XML_REGEXP_SEPAR_PARA)) ||
-	        ((type2 >= XML_REGEXP_SYMBOL) &&
-		 (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_OTHER) &&
-		 (type2 <= XML_REGEXP_OTHER_NA))
-		)return(0);
-	    break;
-        case XML_REGEXP_NOTDECIMAL: /* \D */
-	    break;
-        case XML_REGEXP_REALCHAR: /* \w */
-	    /* can't be a mark, separator, pontuation, symbol or other */
-	    if ((type2 == XML_REGEXP_NOTDECIMAL) ||
-	        ((type2 >= XML_REGEXP_MARK) &&
-		 (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
-	        ((type2 >= XML_REGEXP_PUNCT) &&
-		 (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_SEPAR) &&
-		 (type2 <= XML_REGEXP_SEPAR_PARA)) ||
-	        ((type2 >= XML_REGEXP_SYMBOL) &&
-		 (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
-	        ((type2 >= XML_REGEXP_OTHER) &&
-		 (type2 <= XML_REGEXP_OTHER_NA))
-		)return(0);
-	    break;
-        case XML_REGEXP_NOTREALCHAR: /* \W */
-	    break;
-	/*
-	 * at that point we know both type 1 and type2 are from
-	 * character categories are ordered and are different,
-	 * it becomes simple because this is a partition
-	 */
-        case XML_REGEXP_LETTER:
-	    if (type2 <= XML_REGEXP_LETTER_OTHERS)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_LETTER_UPPERCASE:
-        case XML_REGEXP_LETTER_LOWERCASE:
-        case XML_REGEXP_LETTER_TITLECASE:
-        case XML_REGEXP_LETTER_MODIFIER:
-        case XML_REGEXP_LETTER_OTHERS:
-	    return(0);
-        case XML_REGEXP_MARK:
-	    if (type2 <= XML_REGEXP_MARK_ENCLOSING)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_MARK_NONSPACING:
-        case XML_REGEXP_MARK_SPACECOMBINING:
-        case XML_REGEXP_MARK_ENCLOSING:
-	    return(0);
-        case XML_REGEXP_NUMBER:
-	    if (type2 <= XML_REGEXP_NUMBER_OTHERS)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_NUMBER_DECIMAL:
-        case XML_REGEXP_NUMBER_LETTER:
-        case XML_REGEXP_NUMBER_OTHERS:
-	    return(0);
-        case XML_REGEXP_PUNCT:
-	    if (type2 <= XML_REGEXP_PUNCT_OTHERS)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_PUNCT_CONNECTOR:
-        case XML_REGEXP_PUNCT_DASH:
-        case XML_REGEXP_PUNCT_OPEN:
-        case XML_REGEXP_PUNCT_CLOSE:
-        case XML_REGEXP_PUNCT_INITQUOTE:
-        case XML_REGEXP_PUNCT_FINQUOTE:
-        case XML_REGEXP_PUNCT_OTHERS:
-	    return(0);
-        case XML_REGEXP_SEPAR:
-	    if (type2 <= XML_REGEXP_SEPAR_PARA)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_SEPAR_SPACE:
-        case XML_REGEXP_SEPAR_LINE:
-        case XML_REGEXP_SEPAR_PARA:
-	    return(0);
-        case XML_REGEXP_SYMBOL:
-	    if (type2 <= XML_REGEXP_SYMBOL_OTHERS)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_SYMBOL_MATH:
-        case XML_REGEXP_SYMBOL_CURRENCY:
-        case XML_REGEXP_SYMBOL_MODIFIER:
-        case XML_REGEXP_SYMBOL_OTHERS:
-	    return(0);
-        case XML_REGEXP_OTHER:
-	    if (type2 <= XML_REGEXP_OTHER_NA)
-	        return(1);
-	    return(0);
-        case XML_REGEXP_OTHER_CONTROL:
-        case XML_REGEXP_OTHER_FORMAT:
-        case XML_REGEXP_OTHER_PRIVATE:
-        case XML_REGEXP_OTHER_NA:
-	    return(0);
-	default:
-	    break;
-    }
-    return(1);
-}
-
-/**
- * xmlFAEqualAtoms:
- * @atom1:  an atom
- * @atom2:  an atom
- * @deep: if not set only compare string pointers
- *
- * Compares two atoms to check whether they are the same exactly
- * this is used to remove equivalent transitions
- *
- * Returns 1 if same and 0 otherwise
- */
-static int
-xmlFAEqualAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2, int deep) {
-    int ret = 0;
-
-    if (atom1 == atom2)
-	return(1);
-    if ((atom1 == NULL) || (atom2 == NULL))
-	return(0);
-
-    if (atom1->type != atom2->type)
-        return(0);
-    switch (atom1->type) {
-        case XML_REGEXP_EPSILON:
-	    ret = 0;
-	    break;
-        case XML_REGEXP_STRING:
-            if (!deep)
-                ret = (atom1->valuep == atom2->valuep);
-            else
-                ret = xmlStrEqual((xmlChar *)atom1->valuep,
-                                  (xmlChar *)atom2->valuep);
-	    break;
-        case XML_REGEXP_CHARVAL:
-	    ret = (atom1->codepoint == atom2->codepoint);
-	    break;
-	case XML_REGEXP_RANGES:
-	    /* too hard to do in the general case */
-	    ret = 0;
-	default:
-	    break;
-    }
-    return(ret);
-}
-
-/**
- * xmlFACompareAtoms:
- * @atom1:  an atom
- * @atom2:  an atom
- * @deep: if not set only compare string pointers
- *
- * Compares two atoms to check whether they intersect in some ways,
- * this is used by xmlFAComputesDeterminism and xmlFARecurseDeterminism only
- *
- * Returns 1 if yes and 0 otherwise
- */
-static int
-xmlFACompareAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2, int deep) {
-    int ret = 1;
-
-    if (atom1 == atom2)
-	return(1);
-    if ((atom1 == NULL) || (atom2 == NULL))
-	return(0);
-
-    if ((atom1->type == XML_REGEXP_ANYCHAR) ||
-        (atom2->type == XML_REGEXP_ANYCHAR))
-	return(1);
-
-    if (atom1->type > atom2->type) {
-	xmlRegAtomPtr tmp;
-	tmp = atom1;
-	atom1 = atom2;
-	atom2 = tmp;
-    }
-    if (atom1->type != atom2->type) {
-        ret = xmlFACompareAtomTypes(atom1->type, atom2->type);
-	/* if they can't intersect at the type level break now */
-	if (ret == 0)
-	    return(0);
-    }
-    switch (atom1->type) {
-        case XML_REGEXP_STRING:
-            if (!deep)
-                ret = (atom1->valuep != atom2->valuep);
-            else
-                ret = xmlRegStrEqualWildcard((xmlChar *)atom1->valuep,
-                                             (xmlChar *)atom2->valuep);
-	    break;
-        case XML_REGEXP_EPSILON:
-	    goto not_determinist;
-        case XML_REGEXP_CHARVAL:
-	    if (atom2->type == XML_REGEXP_CHARVAL) {
-		ret = (atom1->codepoint == atom2->codepoint);
-	    } else {
-	        ret = xmlRegCheckCharacter(atom2, atom1->codepoint);
-		if (ret < 0)
-		    ret = 1;
-	    }
-	    break;
-        case XML_REGEXP_RANGES:
-	    if (atom2->type == XML_REGEXP_RANGES) {
-	        int i, j, res;
-		xmlRegRangePtr r1, r2;
-
-		/*
-		 * need to check that none of the ranges eventually matches
-		 */
-		for (i = 0;i < atom1->nbRanges;i++) {
-		    for (j = 0;j < atom2->nbRanges;j++) {
-			r1 = atom1->ranges[i];
-			r2 = atom2->ranges[j];
-			res = xmlFACompareRanges(r1, r2);
-			if (res == 1) {
-			    ret = 1;
-			    goto done;
-			}
-		    }
-		}
-		ret = 0;
-	    }
-	    break;
-	default:
-	    goto not_determinist;
-    }
-done:
-    if (atom1->neg != atom2->neg) {
-        ret = !ret;
-    }
-    if (ret == 0)
-        return(0);
-not_determinist:
-    return(1);
-}
-
-/**
- * xmlFARecurseDeterminism:
- * @ctxt:  a regexp parser context
- *
- * Check whether the associated regexp is determinist,
- * should be called after xmlFAEliminateEpsilonTransitions()
- *
- */
-static int
-xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
-	                 int to, xmlRegAtomPtr atom) {
-    int ret = 1;
-    int res;
-    int transnr, nbTrans;
-    xmlRegTransPtr t1;
-    int deep = 1;
-
-    if (state == NULL)
-	return(ret);
-    if (state->markd == XML_REGEXP_MARK_VISITED)
-	return(ret);
-
-    if (ctxt->flags & AM_AUTOMATA_RNG)
-        deep = 0;
-
-    /*
-     * don't recurse on transitions potentially added in the course of
-     * the elimination.
-     */
-    nbTrans = state->nbTrans;
-    for (transnr = 0;transnr < nbTrans;transnr++) {
-	t1 = &(state->trans[transnr]);
-	/*
-	 * check transitions conflicting with the one looked at
-	 */
-	if (t1->atom == NULL) {
-	    if (t1->to < 0)
-		continue;
-	    state->markd = XML_REGEXP_MARK_VISITED;
-	    res = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
-		                           to, atom);
-	    state->markd = 0;
-	    if (res == 0) {
-	        ret = 0;
-		/* t1->nd = 1; */
-	    }
-	    continue;
-	}
-	if (t1->to != to)
-	    continue;
-	if (xmlFACompareAtoms(t1->atom, atom, deep)) {
-	    ret = 0;
-	    /* mark the transition as non-deterministic */
-	    t1->nd = 1;
-	}
-    }
-    return(ret);
-}
-
-/**
- * xmlFAComputesDeterminism:
- * @ctxt:  a regexp parser context
- *
- * Check whether the associated regexp is determinist,
- * should be called after xmlFAEliminateEpsilonTransitions()
- *
- */
-static int
-xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
-    int statenr, transnr;
-    xmlRegStatePtr state;
-    xmlRegTransPtr t1, t2, last;
-    int i;
-    int ret = 1;
-    int deep = 1;
-
-#ifdef DEBUG_REGEXP_GRAPH
-    printf("xmlFAComputesDeterminism\n");
-    xmlRegPrintCtxt(stdout, ctxt);
-#endif
-    if (ctxt->determinist != -1)
-	return(ctxt->determinist);
-
-    if (ctxt->flags & AM_AUTOMATA_RNG)
-        deep = 0;
-
-    /*
-     * First cleanup the automata removing cancelled transitions
-     */
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if (state == NULL)
-	    continue;
-	if (state->nbTrans < 2)
-	    continue;
-	for (transnr = 0;transnr < state->nbTrans;transnr++) {
-	    t1 = &(state->trans[transnr]);
-	    /*
-	     * Determinism checks in case of counted or all transitions
-	     * will have to be handled separately
-	     */
-	    if (t1->atom == NULL) {
-		/* t1->nd = 1; */
-		continue;
-	    }
-	    if (t1->to == -1) /* eliminated */
-		continue;
-	    for (i = 0;i < transnr;i++) {
-		t2 = &(state->trans[i]);
-		if (t2->to == -1) /* eliminated */
-		    continue;
-		if (t2->atom != NULL) {
-		    if (t1->to == t2->to) {
-                        /*
-                         * Here we use deep because we want to keep the
-                         * transitions which indicate a conflict
-                         */
-			if (xmlFAEqualAtoms(t1->atom, t2->atom, deep) &&
-                            (t1->counter == t2->counter) &&
-                            (t1->count == t2->count))
-			    t2->to = -1; /* eliminated */
-		    }
-		}
-	    }
-	}
-    }
-
-    /*
-     * Check for all states that there aren't 2 transitions
-     * with the same atom and a different target.
-     */
-    for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
-	state = ctxt->states[statenr];
-	if (state == NULL)
-	    continue;
-	if (state->nbTrans < 2)
-	    continue;
-	last = NULL;
-	for (transnr = 0;transnr < state->nbTrans;transnr++) {
-	    t1 = &(state->trans[transnr]);
-	    /*
-	     * Determinism checks in case of counted or all transitions
-	     * will have to be handled separately
-	     */
-	    if (t1->atom == NULL) {
-		continue;
-	    }
-	    if (t1->to == -1) /* eliminated */
-		continue;
-	    for (i = 0;i < transnr;i++) {
-		t2 = &(state->trans[i]);
-		if (t2->to == -1) /* eliminated */
-		    continue;
-		if (t2->atom != NULL) {
-                    /*
-                     * But here we don't use deep because we want to
-                     * find transitions which indicate a conflict
-                     */
-		    if (xmlFACompareAtoms(t1->atom, t2->atom, 1)) {
-			ret = 0;
-			/* mark the transitions as non-deterministic ones */
-			t1->nd = 1;
-			t2->nd = 1;
-			last = t1;
-		    }
-		} else if (t1->to != -1) {
-		    /*
-		     * do the closure in case of remaining specific
-		     * epsilon transitions like choices or all
-		     */
-		    ret = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
-						   t2->to, t2->atom);
-		    /* don't shortcut the computation so all non deterministic
-		       transition get marked down
-		    if (ret == 0)
-			return(0);
-		     */
-		    if (ret == 0) {
-			t1->nd = 1;
-			/* t2->nd = 1; */
-			last = t1;
-		    }
-		}
-	    }
-	    /* don't shortcut the computation so all non deterministic
-	       transition get marked down
-	    if (ret == 0)
-		break; */
-	}
-
-	/*
-	 * mark specifically the last non-deterministic transition
-	 * from a state since there is no need to set-up rollback
-	 * from it
-	 */
-	if (last != NULL) {
-	    last->nd = 2;
-	}
-
-	/* don't shortcut the computation so all non deterministic
-	   transition get marked down
-	if (ret == 0)
-	    break; */
-    }
-
-    ctxt->determinist = ret;
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *	Routines to check input against transition atoms		*
- *									*
- ************************************************************************/
-
-static int
-xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint, int neg,
-	                  int start, int end, const xmlChar *blockName) {
-    int ret = 0;
-
-    switch (type) {
-        case XML_REGEXP_STRING:
-        case XML_REGEXP_SUBREG:
-        case XML_REGEXP_RANGES:
-        case XML_REGEXP_EPSILON:
-	    return(-1);
-        case XML_REGEXP_ANYCHAR:
-	    ret = ((codepoint != '\n') && (codepoint != '\r'));
-	    break;
-        case XML_REGEXP_CHARVAL:
-	    ret = ((codepoint >= start) && (codepoint <= end));
-	    break;
-        case XML_REGEXP_NOTSPACE:
-	    neg = !neg;
-        case XML_REGEXP_ANYSPACE:
-	    ret = ((codepoint == '\n') || (codepoint == '\r') ||
-		   (codepoint == '\t') || (codepoint == ' '));
-	    break;
-        case XML_REGEXP_NOTINITNAME:
-	    neg = !neg;
-        case XML_REGEXP_INITNAME:
-	    ret = (IS_LETTER(codepoint) ||
-		   (codepoint == '_') || (codepoint == ':'));
-	    break;
-        case XML_REGEXP_NOTNAMECHAR:
-	    neg = !neg;
-        case XML_REGEXP_NAMECHAR:
-	    ret = (IS_LETTER(codepoint) || IS_DIGIT(codepoint) ||
-		   (codepoint == '.') || (codepoint == '-') ||
-		   (codepoint == '_') || (codepoint == ':') ||
-		   IS_COMBINING(codepoint) || IS_EXTENDER(codepoint));
-	    break;
-        case XML_REGEXP_NOTDECIMAL:
-	    neg = !neg;
-        case XML_REGEXP_DECIMAL:
-	    ret = xmlUCSIsCatNd(codepoint);
-	    break;
-        case XML_REGEXP_REALCHAR:
-	    neg = !neg;
-        case XML_REGEXP_NOTREALCHAR:
-	    ret = xmlUCSIsCatP(codepoint);
-	    if (ret == 0)
-		ret = xmlUCSIsCatZ(codepoint);
-	    if (ret == 0)
-		ret = xmlUCSIsCatC(codepoint);
-	    break;
-        case XML_REGEXP_LETTER:
-	    ret = xmlUCSIsCatL(codepoint);
-	    break;
-        case XML_REGEXP_LETTER_UPPERCASE:
-	    ret = xmlUCSIsCatLu(codepoint);
-	    break;
-        case XML_REGEXP_LETTER_LOWERCASE:
-	    ret = xmlUCSIsCatLl(codepoint);
-	    break;
-        case XML_REGEXP_LETTER_TITLECASE:
-	    ret = xmlUCSIsCatLt(codepoint);
-	    break;
-        case XML_REGEXP_LETTER_MODIFIER:
-	    ret = xmlUCSIsCatLm(codepoint);
-	    break;
-        case XML_REGEXP_LETTER_OTHERS:
-	    ret = xmlUCSIsCatLo(codepoint);
-	    break;
-        case XML_REGEXP_MARK:
-	    ret = xmlUCSIsCatM(codepoint);
-	    break;
-        case XML_REGEXP_MARK_NONSPACING:
-	    ret = xmlUCSIsCatMn(codepoint);
-	    break;
-        case XML_REGEXP_MARK_SPACECOMBINING:
-	    ret = xmlUCSIsCatMc(codepoint);
-	    break;
-        case XML_REGEXP_MARK_ENCLOSING:
-	    ret = xmlUCSIsCatMe(codepoint);
-	    break;
-        case XML_REGEXP_NUMBER:
-	    ret = xmlUCSIsCatN(codepoint);
-	    break;
-        case XML_REGEXP_NUMBER_DECIMAL:
-	    ret = xmlUCSIsCatNd(codepoint);
-	    break;
-        case XML_REGEXP_NUMBER_LETTER:
-	    ret = xmlUCSIsCatNl(codepoint);
-	    break;
-        case XML_REGEXP_NUMBER_OTHERS:
-	    ret = xmlUCSIsCatNo(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT:
-	    ret = xmlUCSIsCatP(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_CONNECTOR:
-	    ret = xmlUCSIsCatPc(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_DASH:
-	    ret = xmlUCSIsCatPd(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_OPEN:
-	    ret = xmlUCSIsCatPs(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_CLOSE:
-	    ret = xmlUCSIsCatPe(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_INITQUOTE:
-	    ret = xmlUCSIsCatPi(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_FINQUOTE:
-	    ret = xmlUCSIsCatPf(codepoint);
-	    break;
-        case XML_REGEXP_PUNCT_OTHERS:
-	    ret = xmlUCSIsCatPo(codepoint);
-	    break;
-        case XML_REGEXP_SEPAR:
-	    ret = xmlUCSIsCatZ(codepoint);
-	    break;
-        case XML_REGEXP_SEPAR_SPACE:
-	    ret = xmlUCSIsCatZs(codepoint);
-	    break;
-        case XML_REGEXP_SEPAR_LINE:
-	    ret = xmlUCSIsCatZl(codepoint);
-	    break;
-        case XML_REGEXP_SEPAR_PARA:
-	    ret = xmlUCSIsCatZp(codepoint);
-	    break;
-        case XML_REGEXP_SYMBOL:
-	    ret = xmlUCSIsCatS(codepoint);
-	    break;
-        case XML_REGEXP_SYMBOL_MATH:
-	    ret = xmlUCSIsCatSm(codepoint);
-	    break;
-        case XML_REGEXP_SYMBOL_CURRENCY:
-	    ret = xmlUCSIsCatSc(codepoint);
-	    break;
-        case XML_REGEXP_SYMBOL_MODIFIER:
-	    ret = xmlUCSIsCatSk(codepoint);
-	    break;
-        case XML_REGEXP_SYMBOL_OTHERS:
-	    ret = xmlUCSIsCatSo(codepoint);
-	    break;
-        case XML_REGEXP_OTHER:
-	    ret = xmlUCSIsCatC(codepoint);
-	    break;
-        case XML_REGEXP_OTHER_CONTROL:
-	    ret = xmlUCSIsCatCc(codepoint);
-	    break;
-        case XML_REGEXP_OTHER_FORMAT:
-	    ret = xmlUCSIsCatCf(codepoint);
-	    break;
-        case XML_REGEXP_OTHER_PRIVATE:
-	    ret = xmlUCSIsCatCo(codepoint);
-	    break;
-        case XML_REGEXP_OTHER_NA:
-	    /* ret = xmlUCSIsCatCn(codepoint); */
-	    /* Seems it doesn't exist anymore in recent Unicode releases */
-	    ret = 0;
-	    break;
-        case XML_REGEXP_BLOCK_NAME:
-	    ret = xmlUCSIsBlock(codepoint, (const char *) blockName);
-	    break;
-    }
-    if (neg)
-	return(!ret);
-    return(ret);
-}
-
-static int
-xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint) {
-    int i, ret = 0;
-    xmlRegRangePtr range;
-
-    if ((atom == NULL) || (!IS_CHAR(codepoint)))
-	return(-1);
-
-    switch (atom->type) {
-        case XML_REGEXP_SUBREG:
-        case XML_REGEXP_EPSILON:
-	    return(-1);
-        case XML_REGEXP_CHARVAL:
-            return(codepoint == atom->codepoint);
-        case XML_REGEXP_RANGES: {
-	    int accept = 0;
-
-	    for (i = 0;i < atom->nbRanges;i++) {
-		range = atom->ranges[i];
-		if (range->neg == 2) {
-		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
-						0, range->start, range->end,
-						range->blockName);
-		    if (ret != 0)
-			return(0); /* excluded char */
-		} else if (range->neg) {
-		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
-						0, range->start, range->end,
-						range->blockName);
-		    if (ret == 0)
-		        accept = 1;
-		    else
-		        return(0);
-		} else {
-		    ret = xmlRegCheckCharacterRange(range->type, codepoint,
-						0, range->start, range->end,
-						range->blockName);
-		    if (ret != 0)
-			accept = 1; /* might still be excluded */
-		}
-	    }
-	    return(accept);
-	}
-        case XML_REGEXP_STRING:
-	    printf("TODO: XML_REGEXP_STRING\n");
-	    return(-1);
-        case XML_REGEXP_ANYCHAR:
-        case XML_REGEXP_ANYSPACE:
-        case XML_REGEXP_NOTSPACE:
-        case XML_REGEXP_INITNAME:
-        case XML_REGEXP_NOTINITNAME:
-        case XML_REGEXP_NAMECHAR:
-        case XML_REGEXP_NOTNAMECHAR:
-        case XML_REGEXP_DECIMAL:
-        case XML_REGEXP_NOTDECIMAL:
-        case XML_REGEXP_REALCHAR:
-        case XML_REGEXP_NOTREALCHAR:
-        case XML_REGEXP_LETTER:
-        case XML_REGEXP_LETTER_UPPERCASE:
-        case XML_REGEXP_LETTER_LOWERCASE:
-        case XML_REGEXP_LETTER_TITLECASE:
-        case XML_REGEXP_LETTER_MODIFIER:
-        case XML_REGEXP_LETTER_OTHERS:
-        case XML_REGEXP_MARK:
-        case XML_REGEXP_MARK_NONSPACING:
-        case XML_REGEXP_MARK_SPACECOMBINING:
-        case XML_REGEXP_MARK_ENCLOSING:
-        case XML_REGEXP_NUMBER:
-        case XML_REGEXP_NUMBER_DECIMAL:
-        case XML_REGEXP_NUMBER_LETTER:
-        case XML_REGEXP_NUMBER_OTHERS:
-        case XML_REGEXP_PUNCT:
-        case XML_REGEXP_PUNCT_CONNECTOR:
-        case XML_REGEXP_PUNCT_DASH:
-        case XML_REGEXP_PUNCT_OPEN:
-        case XML_REGEXP_PUNCT_CLOSE:
-        case XML_REGEXP_PUNCT_INITQUOTE:
-        case XML_REGEXP_PUNCT_FINQUOTE:
-        case XML_REGEXP_PUNCT_OTHERS:
-        case XML_REGEXP_SEPAR:
-        case XML_REGEXP_SEPAR_SPACE:
-        case XML_REGEXP_SEPAR_LINE:
-        case XML_REGEXP_SEPAR_PARA:
-        case XML_REGEXP_SYMBOL:
-        case XML_REGEXP_SYMBOL_MATH:
-        case XML_REGEXP_SYMBOL_CURRENCY:
-        case XML_REGEXP_SYMBOL_MODIFIER:
-        case XML_REGEXP_SYMBOL_OTHERS:
-        case XML_REGEXP_OTHER:
-        case XML_REGEXP_OTHER_CONTROL:
-        case XML_REGEXP_OTHER_FORMAT:
-        case XML_REGEXP_OTHER_PRIVATE:
-        case XML_REGEXP_OTHER_NA:
-	case XML_REGEXP_BLOCK_NAME:
-	    ret = xmlRegCheckCharacterRange(atom->type, codepoint, 0, 0, 0,
-		                            (const xmlChar *)atom->valuep);
-	    if (atom->neg)
-		ret = !ret;
-	    break;
-    }
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *	Saving and restoring state of an execution context		*
- *									*
- ************************************************************************/
-
-#ifdef DEBUG_REGEXP_EXEC
-static void
-xmlFARegDebugExec(xmlRegExecCtxtPtr exec) {
-    printf("state: %d:%d:idx %d", exec->state->no, exec->transno, exec->index);
-    if (exec->inputStack != NULL) {
-	int i;
-	printf(": ");
-	for (i = 0;(i < 3) && (i < exec->inputStackNr);i++)
-	    printf("%s ", (const char *)
-	           exec->inputStack[exec->inputStackNr - (i + 1)].value);
-    } else {
-	printf(": %s", &(exec->inputString[exec->index]));
-    }
-    printf("\n");
-}
-#endif
-
-static void
-xmlFARegExecSave(xmlRegExecCtxtPtr exec) {
-#ifdef DEBUG_REGEXP_EXEC
-    printf("saving ");
-    exec->transno++;
-    xmlFARegDebugExec(exec);
-    exec->transno--;
-#endif
-#ifdef MAX_PUSH
-    if (exec->nbPush > MAX_PUSH) {
-        return;
-    }
-    exec->nbPush++;
-#endif
-
-    if (exec->maxRollbacks == 0) {
-	exec->maxRollbacks = 4;
-	exec->rollbacks = (xmlRegExecRollback *) xmlMalloc(exec->maxRollbacks *
-		                             sizeof(xmlRegExecRollback));
-	if (exec->rollbacks == NULL) {
-	    xmlRegexpErrMemory(NULL, "saving regexp");
-	    exec->maxRollbacks = 0;
-	    return;
-	}
-	memset(exec->rollbacks, 0,
-	       exec->maxRollbacks * sizeof(xmlRegExecRollback));
-    } else if (exec->nbRollbacks >= exec->maxRollbacks) {
-	xmlRegExecRollback *tmp;
-	int len = exec->maxRollbacks;
-
-	exec->maxRollbacks *= 2;
-	tmp = (xmlRegExecRollback *) xmlRealloc(exec->rollbacks,
-			exec->maxRollbacks * sizeof(xmlRegExecRollback));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(NULL, "saving regexp");
-	    exec->maxRollbacks /= 2;
-	    return;
-	}
-	exec->rollbacks = tmp;
-	tmp = &exec->rollbacks[len];
-	memset(tmp, 0, (exec->maxRollbacks - len) * sizeof(xmlRegExecRollback));
-    }
-    exec->rollbacks[exec->nbRollbacks].state = exec->state;
-    exec->rollbacks[exec->nbRollbacks].index = exec->index;
-    exec->rollbacks[exec->nbRollbacks].nextbranch = exec->transno + 1;
-    if (exec->comp->nbCounters > 0) {
-	if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
-	    exec->rollbacks[exec->nbRollbacks].counts = (int *)
-		xmlMalloc(exec->comp->nbCounters * sizeof(int));
-	    if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
-		xmlRegexpErrMemory(NULL, "saving regexp");
-		exec->status = -5;
-		return;
-	    }
-	}
-	memcpy(exec->rollbacks[exec->nbRollbacks].counts, exec->counts,
-	       exec->comp->nbCounters * sizeof(int));
-    }
-    exec->nbRollbacks++;
-}
-
-static void
-xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) {
-    if (exec->nbRollbacks <= 0) {
-	exec->status = -1;
-#ifdef DEBUG_REGEXP_EXEC
-	printf("rollback failed on empty stack\n");
-#endif
-	return;
-    }
-    exec->nbRollbacks--;
-    exec->state = exec->rollbacks[exec->nbRollbacks].state;
-    exec->index = exec->rollbacks[exec->nbRollbacks].index;
-    exec->transno = exec->rollbacks[exec->nbRollbacks].nextbranch;
-    if (exec->comp->nbCounters > 0) {
-	if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
-	    fprintf(stderr, "exec save: allocation failed");
-	    exec->status = -6;
-	    return;
-	}
-	if (exec->counts) {
-	    memcpy(exec->counts, exec->rollbacks[exec->nbRollbacks].counts,
-	       exec->comp->nbCounters * sizeof(int));
-	}
-    }
-
-#ifdef DEBUG_REGEXP_EXEC
-    printf("restored ");
-    xmlFARegDebugExec(exec);
-#endif
-}
-
-/************************************************************************
- *									*
- *	Verifier, running an input against a compiled regexp		*
- *									*
- ************************************************************************/
-
-static int
-xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) {
-    xmlRegExecCtxt execval;
-    xmlRegExecCtxtPtr exec = &execval;
-    int ret, codepoint = 0, len, deter;
-
-    exec->inputString = content;
-    exec->index = 0;
-    exec->nbPush = 0;
-    exec->determinist = 1;
-    exec->maxRollbacks = 0;
-    exec->nbRollbacks = 0;
-    exec->rollbacks = NULL;
-    exec->status = 0;
-    exec->comp = comp;
-    exec->state = comp->states[0];
-    exec->transno = 0;
-    exec->transcount = 0;
-    exec->inputStack = NULL;
-    exec->inputStackMax = 0;
-    if (comp->nbCounters > 0) {
-	exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int));
-	if (exec->counts == NULL) {
-	    xmlRegexpErrMemory(NULL, "running regexp");
-	    return(-1);
-	}
-        memset(exec->counts, 0, comp->nbCounters * sizeof(int));
-    } else
-	exec->counts = NULL;
-    while ((exec->status == 0) && (exec->state != NULL) &&
-	   ((exec->inputString[exec->index] != 0) ||
-	    ((exec->state != NULL) &&
-	     (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
-	xmlRegTransPtr trans;
-	xmlRegAtomPtr atom;
-
-	/*
-	 * If end of input on non-terminal state, rollback, however we may
-	 * still have epsilon like transition for counted transitions
-	 * on counters, in that case don't break too early.  Additionally,
-	 * if we are working on a range like "AB{0,2}", where B is not present,
-	 * we don't want to break.
-	 */
-	len = 1;
-	if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL)) {
-	    /*
-	     * if there is a transition, we must check if
-	     *  atom allows minOccurs of 0
-	     */
-	    if (exec->transno < exec->state->nbTrans) {
-	        trans = &exec->state->trans[exec->transno];
-		if (trans->to >=0) {
-		    atom = trans->atom;
-		    if (!((atom->min == 0) && (atom->max > 0)))
-		        goto rollback;
-		}
-	    } else
-	        goto rollback;
-	}
-
-	exec->transcount = 0;
-	for (;exec->transno < exec->state->nbTrans;exec->transno++) {
-	    trans = &exec->state->trans[exec->transno];
-	    if (trans->to < 0)
-		continue;
-	    atom = trans->atom;
-	    ret = 0;
-	    deter = 1;
-	    if (trans->count >= 0) {
-		int count;
-		xmlRegCounterPtr counter;
-
-		if (exec->counts == NULL) {
-		    exec->status = -1;
-		    goto error;
-		}
-		/*
-		 * A counted transition.
-		 */
-
-		count = exec->counts[trans->count];
-		counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_REGEXP_EXEC
-		printf("testing count %d: val %d, min %d, max %d\n",
-		       trans->count, count, counter->min,  counter->max);
-#endif
-		ret = ((count >= counter->min) && (count <= counter->max));
-		if ((ret) && (counter->min != counter->max))
-		    deter = 0;
-	    } else if (atom == NULL) {
-		fprintf(stderr, "epsilon transition left at runtime\n");
-		exec->status = -2;
-		break;
-	    } else if (exec->inputString[exec->index] != 0) {
-                codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
-		ret = xmlRegCheckCharacter(atom, codepoint);
-		if ((ret == 1) && (atom->min >= 0) && (atom->max > 0)) {
-		    xmlRegStatePtr to = comp->states[trans->to];
-
-		    /*
-		     * this is a multiple input sequence
-		     * If there is a counter associated increment it now.
-		     * before potentially saving and rollback
-		     * do not increment if the counter is already over the
-		     * maximum limit in which case get to next transition
-		     */
-		    if (trans->counter >= 0) {
-			xmlRegCounterPtr counter;
-
-			if ((exec->counts == NULL) ||
-			    (exec->comp == NULL) ||
-			    (exec->comp->counters == NULL)) {
-			    exec->status = -1;
-			    goto error;
-			}
-			counter = &exec->comp->counters[trans->counter];
-			if (exec->counts[trans->counter] >= counter->max)
-			    continue; /* for loop on transitions */
-
-#ifdef DEBUG_REGEXP_EXEC
-			printf("Increasing count %d\n", trans->counter);
-#endif
-			exec->counts[trans->counter]++;
-		    }
-		    if (exec->state->nbTrans > exec->transno + 1) {
-			xmlFARegExecSave(exec);
-		    }
-		    exec->transcount = 1;
-		    do {
-			/*
-			 * Try to progress as much as possible on the input
-			 */
-			if (exec->transcount == atom->max) {
-			    break;
-			}
-			exec->index += len;
-			/*
-			 * End of input: stop here
-			 */
-			if (exec->inputString[exec->index] == 0) {
-			    exec->index -= len;
-			    break;
-			}
-			if (exec->transcount >= atom->min) {
-			    int transno = exec->transno;
-			    xmlRegStatePtr state = exec->state;
-
-			    /*
-			     * The transition is acceptable save it
-			     */
-			    exec->transno = -1; /* trick */
-			    exec->state = to;
-			    xmlFARegExecSave(exec);
-			    exec->transno = transno;
-			    exec->state = state;
-			}
-			codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
-				              len);
-			ret = xmlRegCheckCharacter(atom, codepoint);
-			exec->transcount++;
-		    } while (ret == 1);
-		    if (exec->transcount < atom->min)
-			ret = 0;
-
-		    /*
-		     * If the last check failed but one transition was found
-		     * possible, rollback
-		     */
-		    if (ret < 0)
-			ret = 0;
-		    if (ret == 0) {
-			goto rollback;
-		    }
-		    if (trans->counter >= 0) {
-			if (exec->counts == NULL) {
-			    exec->status = -1;
-			    goto error;
-			}
-#ifdef DEBUG_REGEXP_EXEC
-			printf("Decreasing count %d\n", trans->counter);
-#endif
-			exec->counts[trans->counter]--;
-		    }
-		} else if ((ret == 0) && (atom->min == 0) && (atom->max > 0)) {
-		    /*
-		     * we don't match on the codepoint, but minOccurs of 0
-		     * says that's ok.  Setting len to 0 inhibits stepping
-		     * over the codepoint.
-		     */
-		    exec->transcount = 1;
-		    len = 0;
-		    ret = 1;
-		}
-	    } else if ((atom->min == 0) && (atom->max > 0)) {
-	        /* another spot to match when minOccurs is 0 */
-		exec->transcount = 1;
-		len = 0;
-		ret = 1;
-	    }
-	    if (ret == 1) {
-		if ((trans->nd == 1) ||
-		    ((trans->count >= 0) && (deter == 0) &&
-		     (exec->state->nbTrans > exec->transno + 1))) {
-#ifdef DEBUG_REGEXP_EXEC
-		    if (trans->nd == 1)
-		        printf("Saving on nd transition atom %d for %c at %d\n",
-			       trans->atom->no, codepoint, exec->index);
-		    else
-		        printf("Saving on counted transition count %d for %c at %d\n",
-			       trans->count, codepoint, exec->index);
-#endif
-		    xmlFARegExecSave(exec);
-		}
-		if (trans->counter >= 0) {
-		    xmlRegCounterPtr counter;
-
-                    /* make sure we don't go over the counter maximum value */
-		    if ((exec->counts == NULL) ||
-			(exec->comp == NULL) ||
-			(exec->comp->counters == NULL)) {
-			exec->status = -1;
-			goto error;
-		    }
-		    counter = &exec->comp->counters[trans->counter];
-		    if (exec->counts[trans->counter] >= counter->max)
-			continue; /* for loop on transitions */
-#ifdef DEBUG_REGEXP_EXEC
-		    printf("Increasing count %d\n", trans->counter);
-#endif
-		    exec->counts[trans->counter]++;
-		}
-		if ((trans->count >= 0) &&
-		    (trans->count < REGEXP_ALL_COUNTER)) {
-		    if (exec->counts == NULL) {
-		        exec->status = -1;
-			goto error;
-		    }
-#ifdef DEBUG_REGEXP_EXEC
-		    printf("resetting count %d on transition\n",
-		           trans->count);
-#endif
-		    exec->counts[trans->count] = 0;
-		}
-#ifdef DEBUG_REGEXP_EXEC
-		printf("entering state %d\n", trans->to);
-#endif
-		exec->state = comp->states[trans->to];
-		exec->transno = 0;
-		if (trans->atom != NULL) {
-		    exec->index += len;
-		}
-		goto progress;
-	    } else if (ret < 0) {
-		exec->status = -4;
-		break;
-	    }
-	}
-	if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
-	    /*
-	     * Failed to find a way out
-	     */
-	    exec->determinist = 0;
-#ifdef DEBUG_REGEXP_EXEC
-	    printf("rollback from state %d on %d:%c\n", exec->state->no,
-	           codepoint,codepoint);
-#endif
-	    xmlFARegExecRollBack(exec);
-	}
-progress:
-	continue;
-    }
-error:
-    if (exec->rollbacks != NULL) {
-	if (exec->counts != NULL) {
-	    int i;
-
-	    for (i = 0;i < exec->maxRollbacks;i++)
-		if (exec->rollbacks[i].counts != NULL)
-		    xmlFree(exec->rollbacks[i].counts);
-	}
-	xmlFree(exec->rollbacks);
-    }
-    if (exec->state == NULL)
-        return(-1);
-    if (exec->counts != NULL)
-	xmlFree(exec->counts);
-    if (exec->status == 0)
-	return(1);
-    if (exec->status == -1) {
-	if (exec->nbPush > MAX_PUSH)
-	    return(-1);
-	return(0);
-    }
-    return(exec->status);
-}
-
-/************************************************************************
- *									*
- *	Progressive interface to the verifier one atom at a time	*
- *									*
- ************************************************************************/
-#ifdef DEBUG_ERR
-static void testerr(xmlRegExecCtxtPtr exec);
-#endif
-
-/**
- * xmlRegNewExecCtxt:
- * @comp: a precompiled regular expression
- * @callback: a callback function used for handling progresses in the
- *            automata matching phase
- * @data: the context data associated to the callback in this context
- *
- * Build a context used for progressive evaluation of a regexp.
- *
- * Returns the new context
- */
-xmlRegExecCtxtPtr
-xmlRegNewExecCtxt(xmlRegexpPtr comp, xmlRegExecCallbacks callback, void *data) {
-    xmlRegExecCtxtPtr exec;
-
-    if (comp == NULL)
-	return(NULL);
-    if ((comp->compact == NULL) && (comp->states == NULL))
-        return(NULL);
-    exec = (xmlRegExecCtxtPtr) xmlMalloc(sizeof(xmlRegExecCtxt));
-    if (exec == NULL) {
-	xmlRegexpErrMemory(NULL, "creating execution context");
-	return(NULL);
-    }
-    memset(exec, 0, sizeof(xmlRegExecCtxt));
-    exec->inputString = NULL;
-    exec->index = 0;
-    exec->determinist = 1;
-    exec->maxRollbacks = 0;
-    exec->nbRollbacks = 0;
-    exec->rollbacks = NULL;
-    exec->status = 0;
-    exec->comp = comp;
-    if (comp->compact == NULL)
-	exec->state = comp->states[0];
-    exec->transno = 0;
-    exec->transcount = 0;
-    exec->callback = callback;
-    exec->data = data;
-    if (comp->nbCounters > 0) {
-        /*
-	 * For error handling, exec->counts is allocated twice the size
-	 * the second half is used to store the data in case of rollback
-	 */
-	exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int)
-	                                 * 2);
-	if (exec->counts == NULL) {
-	    xmlRegexpErrMemory(NULL, "creating execution context");
-	    xmlFree(exec);
-	    return(NULL);
-	}
-        memset(exec->counts, 0, comp->nbCounters * sizeof(int) * 2);
-	exec->errCounts = &exec->counts[comp->nbCounters];
-    } else {
-	exec->counts = NULL;
-	exec->errCounts = NULL;
-    }
-    exec->inputStackMax = 0;
-    exec->inputStackNr = 0;
-    exec->inputStack = NULL;
-    exec->errStateNo = -1;
-    exec->errString = NULL;
-    exec->nbPush = 0;
-    return(exec);
-}
-
-/**
- * xmlRegFreeExecCtxt:
- * @exec: a regular expression evaulation context
- *
- * Free the structures associated to a regular expression evaulation context.
- */
-void
-xmlRegFreeExecCtxt(xmlRegExecCtxtPtr exec) {
-    if (exec == NULL)
-	return;
-
-    if (exec->rollbacks != NULL) {
-	if (exec->counts != NULL) {
-	    int i;
-
-	    for (i = 0;i < exec->maxRollbacks;i++)
-		if (exec->rollbacks[i].counts != NULL)
-		    xmlFree(exec->rollbacks[i].counts);
-	}
-	xmlFree(exec->rollbacks);
-    }
-    if (exec->counts != NULL)
-	xmlFree(exec->counts);
-    if (exec->inputStack != NULL) {
-	int i;
-
-	for (i = 0;i < exec->inputStackNr;i++) {
-	    if (exec->inputStack[i].value != NULL)
-		xmlFree(exec->inputStack[i].value);
-	}
-	xmlFree(exec->inputStack);
-    }
-    if (exec->errString != NULL)
-        xmlFree(exec->errString);
-    xmlFree(exec);
-}
-
-static void
-xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value,
-	                    void *data) {
-#ifdef DEBUG_PUSH
-    printf("saving value: %d:%s\n", exec->inputStackNr, value);
-#endif
-    if (exec->inputStackMax == 0) {
-	exec->inputStackMax = 4;
-	exec->inputStack = (xmlRegInputTokenPtr)
-	    xmlMalloc(exec->inputStackMax * sizeof(xmlRegInputToken));
-	if (exec->inputStack == NULL) {
-	    xmlRegexpErrMemory(NULL, "pushing input string");
-	    exec->inputStackMax = 0;
-	    return;
-	}
-    } else if (exec->inputStackNr + 1 >= exec->inputStackMax) {
-	xmlRegInputTokenPtr tmp;
-
-	exec->inputStackMax *= 2;
-	tmp = (xmlRegInputTokenPtr) xmlRealloc(exec->inputStack,
-			exec->inputStackMax * sizeof(xmlRegInputToken));
-	if (tmp == NULL) {
-	    xmlRegexpErrMemory(NULL, "pushing input string");
-	    exec->inputStackMax /= 2;
-	    return;
-	}
-	exec->inputStack = tmp;
-    }
-    exec->inputStack[exec->inputStackNr].value = xmlStrdup(value);
-    exec->inputStack[exec->inputStackNr].data = data;
-    exec->inputStackNr++;
-    exec->inputStack[exec->inputStackNr].value = NULL;
-    exec->inputStack[exec->inputStackNr].data = NULL;
-}
-
-/**
- * xmlRegStrEqualWildcard:
- * @expStr:  the string to be evaluated
- * @valStr:  the validation string
- *
- * Checks if both strings are equal or have the same content. "*"
- * can be used as a wildcard in @valStr; "|" is used as a seperator of
- * substrings in both @expStr and @valStr.
- *
- * Returns 1 if the comparison is satisfied and the number of substrings
- * is equal, 0 otherwise.
- */
-
-static int
-xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr) {
-    if (expStr == valStr) return(1);
-    if (expStr == NULL) return(0);
-    if (valStr == NULL) return(0);
-    do {
-	/*
-	* Eval if we have a wildcard for the current item.
-	*/
-        if (*expStr != *valStr) {
-	    /* if one of them starts with a wildcard make valStr be it */
-	    if (*valStr == '*') {
-	        const xmlChar *tmp;
-
-		tmp = valStr;
-		valStr = expStr;
-		expStr = tmp;
-	    }
-	    if ((*valStr != 0) && (*expStr != 0) && (*expStr++ == '*')) {
-		do {
-		    if (*valStr == XML_REG_STRING_SEPARATOR)
-			break;
-		    valStr++;
-		} while (*valStr != 0);
-		continue;
-	    } else
-		return(0);
-	}
-	expStr++;
-	valStr++;
-    } while (*valStr != 0);
-    if (*expStr != 0)
-	return (0);
-    else
-	return (1);
-}
-
-/**
- * xmlRegCompactPushString:
- * @exec: a regexp execution context
- * @comp:  the precompiled exec with a compact table
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- *     a negative value in case of error.
- */
-static int
-xmlRegCompactPushString(xmlRegExecCtxtPtr exec,
-	                xmlRegexpPtr comp,
-	                const xmlChar *value,
-	                void *data) {
-    int state = exec->index;
-    int i, target;
-
-    if ((comp == NULL) || (comp->compact == NULL) || (comp->stringMap == NULL))
-	return(-1);
-
-    if (value == NULL) {
-	/*
-	 * are we at a final state ?
-	 */
-	if (comp->compact[state * (comp->nbstrings + 1)] ==
-            XML_REGEXP_FINAL_STATE)
-	    return(1);
-	return(0);
-    }
-
-#ifdef DEBUG_PUSH
-    printf("value pushed: %s\n", value);
-#endif
-
-    /*
-     * Examine all outside transitions from current state
-     */
-    for (i = 0;i < comp->nbstrings;i++) {
-	target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
-	if ((target > 0) && (target <= comp->nbstates)) {
-	    target--; /* to avoid 0 */
-	    if (xmlRegStrEqualWildcard(comp->stringMap[i], value)) {
-		exec->index = target;
-		if ((exec->callback != NULL) && (comp->transdata != NULL)) {
-		    exec->callback(exec->data, value,
-			  comp->transdata[state * comp->nbstrings + i], data);
-		}
-#ifdef DEBUG_PUSH
-		printf("entering state %d\n", target);
-#endif
-		if (comp->compact[target * (comp->nbstrings + 1)] ==
-		    XML_REGEXP_SINK_STATE)
-		    goto error;
-
-		if (comp->compact[target * (comp->nbstrings + 1)] ==
-		    XML_REGEXP_FINAL_STATE)
-		    return(1);
-		return(0);
-	    }
-	}
-    }
-    /*
-     * Failed to find an exit transition out from current state for the
-     * current token
-     */
-#ifdef DEBUG_PUSH
-    printf("failed to find a transition for %s on state %d\n", value, state);
-#endif
-error:
-    if (exec->errString != NULL)
-        xmlFree(exec->errString);
-    exec->errString = xmlStrdup(value);
-    exec->errStateNo = state;
-    exec->status = -1;
-#ifdef DEBUG_ERR
-    testerr(exec);
-#endif
-    return(-1);
-}
-
-/**
- * xmlRegExecPushStringInternal:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- * @compound: value was assembled from 2 strings
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- *     a negative value in case of error.
- */
-static int
-xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value,
-	                     void *data, int compound) {
-    xmlRegTransPtr trans;
-    xmlRegAtomPtr atom;
-    int ret;
-    int final = 0;
-    int progress = 1;
-
-    if (exec == NULL)
-	return(-1);
-    if (exec->comp == NULL)
-	return(-1);
-    if (exec->status != 0)
-	return(exec->status);
-
-    if (exec->comp->compact != NULL)
-	return(xmlRegCompactPushString(exec, exec->comp, value, data));
-
-    if (value == NULL) {
-        if (exec->state->type == XML_REGEXP_FINAL_STATE)
-	    return(1);
-	final = 1;
-    }
-
-#ifdef DEBUG_PUSH
-    printf("value pushed: %s\n", value);
-#endif
-    /*
-     * If we have an active rollback stack push the new value there
-     * and get back to where we were left
-     */
-    if ((value != NULL) && (exec->inputStackNr > 0)) {
-	xmlFARegExecSaveInputString(exec, value, data);
-	value = exec->inputStack[exec->index].value;
-	data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
-	printf("value loaded: %s\n", value);
-#endif
-    }
-
-    while ((exec->status == 0) &&
-	   ((value != NULL) ||
-	    ((final == 1) &&
-	     (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
-
-	/*
-	 * End of input on non-terminal state, rollback, however we may
-	 * still have epsilon like transition for counted transitions
-	 * on counters, in that case don't break too early.
-	 */
-	if ((value == NULL) && (exec->counts == NULL))
-	    goto rollback;
-
-	exec->transcount = 0;
-	for (;exec->transno < exec->state->nbTrans;exec->transno++) {
-	    trans = &exec->state->trans[exec->transno];
-	    if (trans->to < 0)
-		continue;
-	    atom = trans->atom;
-	    ret = 0;
-	    if (trans->count == REGEXP_ALL_LAX_COUNTER) {
-		int i;
-		int count;
-		xmlRegTransPtr t;
-		xmlRegCounterPtr counter;
-
-		ret = 0;
-
-#ifdef DEBUG_PUSH
-		printf("testing all lax %d\n", trans->count);
-#endif
-		/*
-		 * Check all counted transitions from the current state
-		 */
-		if ((value == NULL) && (final)) {
-		    ret = 1;
-		} else if (value != NULL) {
-		    for (i = 0;i < exec->state->nbTrans;i++) {
-			t = &exec->state->trans[i];
-			if ((t->counter < 0) || (t == trans))
-			    continue;
-			counter = &exec->comp->counters[t->counter];
-			count = exec->counts[t->counter];
-			if ((count < counter->max) &&
-		            (t->atom != NULL) &&
-			    (xmlStrEqual(value, t->atom->valuep))) {
-			    ret = 0;
-			    break;
-			}
-			if ((count >= counter->min) &&
-			    (count < counter->max) &&
-			    (t->atom != NULL) &&
-			    (xmlStrEqual(value, t->atom->valuep))) {
-			    ret = 1;
-			    break;
-			}
-		    }
-		}
-	    } else if (trans->count == REGEXP_ALL_COUNTER) {
-		int i;
-		int count;
-		xmlRegTransPtr t;
-		xmlRegCounterPtr counter;
-
-		ret = 1;
-
-#ifdef DEBUG_PUSH
-		printf("testing all %d\n", trans->count);
-#endif
-		/*
-		 * Check all counted transitions from the current state
-		 */
-		for (i = 0;i < exec->state->nbTrans;i++) {
-                    t = &exec->state->trans[i];
-		    if ((t->counter < 0) || (t == trans))
-			continue;
-                    counter = &exec->comp->counters[t->counter];
-		    count = exec->counts[t->counter];
-		    if ((count < counter->min) || (count > counter->max)) {
-			ret = 0;
-			break;
-		    }
-		}
-	    } else if (trans->count >= 0) {
-		int count;
-		xmlRegCounterPtr counter;
-
-		/*
-		 * A counted transition.
-		 */
-
-		count = exec->counts[trans->count];
-		counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_PUSH
-		printf("testing count %d: val %d, min %d, max %d\n",
-		       trans->count, count, counter->min,  counter->max);
-#endif
-		ret = ((count >= counter->min) && (count <= counter->max));
-	    } else if (atom == NULL) {
-		fprintf(stderr, "epsilon transition left at runtime\n");
-		exec->status = -2;
-		break;
-	    } else if (value != NULL) {
-		ret = xmlRegStrEqualWildcard(atom->valuep, value);
-		if (atom->neg) {
-		    ret = !ret;
-		    if (!compound)
-		        ret = 0;
-		}
-		if ((ret == 1) && (trans->counter >= 0)) {
-		    xmlRegCounterPtr counter;
-		    int count;
-
-		    count = exec->counts[trans->counter];
-		    counter = &exec->comp->counters[trans->counter];
-		    if (count >= counter->max)
-			ret = 0;
-		}
-
-		if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
-		    xmlRegStatePtr to = exec->comp->states[trans->to];
-
-		    /*
-		     * this is a multiple input sequence
-		     */
-		    if (exec->state->nbTrans > exec->transno + 1) {
-			if (exec->inputStackNr <= 0) {
-			    xmlFARegExecSaveInputString(exec, value, data);
-			}
-			xmlFARegExecSave(exec);
-		    }
-		    exec->transcount = 1;
-		    do {
-			/*
-			 * Try to progress as much as possible on the input
-			 */
-			if (exec->transcount == atom->max) {
-			    break;
-			}
-			exec->index++;
-			value = exec->inputStack[exec->index].value;
-			data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
-			printf("value loaded: %s\n", value);
-#endif
-
-			/*
-			 * End of input: stop here
-			 */
-			if (value == NULL) {
-			    exec->index --;
-			    break;
-			}
-			if (exec->transcount >= atom->min) {
-			    int transno = exec->transno;
-			    xmlRegStatePtr state = exec->state;
-
-			    /*
-			     * The transition is acceptable save it
-			     */
-			    exec->transno = -1; /* trick */
-			    exec->state = to;
-			    if (exec->inputStackNr <= 0) {
-				xmlFARegExecSaveInputString(exec, value, data);
-			    }
-			    xmlFARegExecSave(exec);
-			    exec->transno = transno;
-			    exec->state = state;
-			}
-			ret = xmlStrEqual(value, atom->valuep);
-			exec->transcount++;
-		    } while (ret == 1);
-		    if (exec->transcount < atom->min)
-			ret = 0;
-
-		    /*
-		     * If the last check failed but one transition was found
-		     * possible, rollback
-		     */
-		    if (ret < 0)
-			ret = 0;
-		    if (ret == 0) {
-			goto rollback;
-		    }
-		}
-	    }
-	    if (ret == 1) {
-		if ((exec->callback != NULL) && (atom != NULL) &&
-			(data != NULL)) {
-		    exec->callback(exec->data, atom->valuep,
-			           atom->data, data);
-		}
-		if (exec->state->nbTrans > exec->transno + 1) {
-		    if (exec->inputStackNr <= 0) {
-			xmlFARegExecSaveInputString(exec, value, data);
-		    }
-		    xmlFARegExecSave(exec);
-		}
-		if (trans->counter >= 0) {
-#ifdef DEBUG_PUSH
-		    printf("Increasing count %d\n", trans->counter);
-#endif
-		    exec->counts[trans->counter]++;
-		}
-		if ((trans->count >= 0) &&
-		    (trans->count < REGEXP_ALL_COUNTER)) {
-#ifdef DEBUG_REGEXP_EXEC
-		    printf("resetting count %d on transition\n",
-		           trans->count);
-#endif
-		    exec->counts[trans->count] = 0;
-		}
-#ifdef DEBUG_PUSH
-		printf("entering state %d\n", trans->to);
-#endif
-                if ((exec->comp->states[trans->to] != NULL) &&
-		    (exec->comp->states[trans->to]->type ==
-		     XML_REGEXP_SINK_STATE)) {
-		    /*
-		     * entering a sink state, save the current state as error
-		     * state.
-		     */
-		    if (exec->errString != NULL)
-			xmlFree(exec->errString);
-		    exec->errString = xmlStrdup(value);
-		    exec->errState = exec->state;
-		    memcpy(exec->errCounts, exec->counts,
-			   exec->comp->nbCounters * sizeof(int));
-		}
-		exec->state = exec->comp->states[trans->to];
-		exec->transno = 0;
-		if (trans->atom != NULL) {
-		    if (exec->inputStack != NULL) {
-			exec->index++;
-			if (exec->index < exec->inputStackNr) {
-			    value = exec->inputStack[exec->index].value;
-			    data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
-			    printf("value loaded: %s\n", value);
-#endif
-			} else {
-			    value = NULL;
-			    data = NULL;
-#ifdef DEBUG_PUSH
-			    printf("end of input\n");
-#endif
-			}
-		    } else {
-			value = NULL;
-			data = NULL;
-#ifdef DEBUG_PUSH
-			printf("end of input\n");
-#endif
-		    }
-		}
-		goto progress;
-	    } else if (ret < 0) {
-		exec->status = -4;
-		break;
-	    }
-	}
-	if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
-            /*
-	     * if we didn't yet rollback on the current input
-	     * store the current state as the error state.
-	     */
-	    if ((progress) && (exec->state != NULL) &&
-	        (exec->state->type != XML_REGEXP_SINK_STATE)) {
-	        progress = 0;
-		if (exec->errString != NULL)
-		    xmlFree(exec->errString);
-		exec->errString = xmlStrdup(value);
-		exec->errState = exec->state;
-		memcpy(exec->errCounts, exec->counts,
-		       exec->comp->nbCounters * sizeof(int));
-	    }
-
-	    /*
-	     * Failed to find a way out
-	     */
-	    exec->determinist = 0;
-	    xmlFARegExecRollBack(exec);
-	    if ((exec->inputStack != NULL ) && (exec->status == 0)) {
-		value = exec->inputStack[exec->index].value;
-		data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
-		printf("value loaded: %s\n", value);
-#endif
-	    }
-	}
-	continue;
-progress:
-        progress = 1;
-	continue;
-    }
-    if (exec->status == 0) {
-        return(exec->state->type == XML_REGEXP_FINAL_STATE);
-    }
-#ifdef DEBUG_ERR
-    if (exec->status < 0) {
-	testerr(exec);
-    }
-#endif
-    return(exec->status);
-}
-
-/**
- * xmlRegExecPushString:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- *     a negative value in case of error.
- */
-int
-xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
-	             void *data) {
-    return(xmlRegExecPushStringInternal(exec, value, data, 0));
-}
-
-/**
- * xmlRegExecPushString2:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: the first string token input
- * @value2: the second string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- *     a negative value in case of error.
- */
-int
-xmlRegExecPushString2(xmlRegExecCtxtPtr exec, const xmlChar *value,
-                      const xmlChar *value2, void *data) {
-    xmlChar buf[150];
-    int lenn, lenp, ret;
-    xmlChar *str;
-
-    if (exec == NULL)
-	return(-1);
-    if (exec->comp == NULL)
-	return(-1);
-    if (exec->status != 0)
-	return(exec->status);
-
-    if (value2 == NULL)
-        return(xmlRegExecPushString(exec, value, data));
-
-    lenn = strlen((char *) value2);
-    lenp = strlen((char *) value);
-
-    if (150 < lenn + lenp + 2) {
-	str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
-	if (str == NULL) {
-	    exec->status = -1;
-	    return(-1);
-	}
-    } else {
-	str = buf;
-    }
-    memcpy(&str[0], value, lenp);
-    str[lenp] = XML_REG_STRING_SEPARATOR;
-    memcpy(&str[lenp + 1], value2, lenn);
-    str[lenn + lenp + 1] = 0;
-
-    if (exec->comp->compact != NULL)
-	ret = xmlRegCompactPushString(exec, exec->comp, str, data);
-    else
-        ret = xmlRegExecPushStringInternal(exec, str, data, 1);
-
-    if (str != buf)
-        xmlFree(str);
-    return(ret);
-}
-
-/**
- * xmlRegExecGetValues:
- * @exec: a regexp execution context
- * @err: error extraction or normal one
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract informations from the regexp execution, internal routine to
- * implement xmlRegExecNextValues() and xmlRegExecErrInfo()
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-static int
-xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
-                    int *nbval, int *nbneg,
-		    xmlChar **values, int *terminal) {
-    int maxval;
-    int nb = 0;
-
-    if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) ||
-        (values == NULL) || (*nbval <= 0))
-        return(-1);
-
-    maxval = *nbval;
-    *nbval = 0;
-    *nbneg = 0;
-    if ((exec->comp != NULL) && (exec->comp->compact != NULL)) {
-        xmlRegexpPtr comp;
-	int target, i, state;
-
-        comp = exec->comp;
-
-	if (err) {
-	    if (exec->errStateNo == -1) return(-1);
-	    state = exec->errStateNo;
-	} else {
-	    state = exec->index;
-	}
-	if (terminal != NULL) {
-	    if (comp->compact[state * (comp->nbstrings + 1)] ==
-	        XML_REGEXP_FINAL_STATE)
-		*terminal = 1;
-	    else
-		*terminal = 0;
-	}
-	for (i = 0;(i < comp->nbstrings) && (nb < maxval);i++) {
-	    target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
-	    if ((target > 0) && (target <= comp->nbstates) &&
-	        (comp->compact[(target - 1) * (comp->nbstrings + 1)] !=
-		 XML_REGEXP_SINK_STATE)) {
-	        values[nb++] = comp->stringMap[i];
-		(*nbval)++;
-	    }
-	}
-	for (i = 0;(i < comp->nbstrings) && (nb < maxval);i++) {
-	    target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
-	    if ((target > 0) && (target <= comp->nbstates) &&
-	        (comp->compact[(target - 1) * (comp->nbstrings + 1)] ==
-		 XML_REGEXP_SINK_STATE)) {
-	        values[nb++] = comp->stringMap[i];
-		(*nbneg)++;
-	    }
-	}
-    } else {
-        int transno;
-	xmlRegTransPtr trans;
-	xmlRegAtomPtr atom;
-	xmlRegStatePtr state;
-
-	if (terminal != NULL) {
-	    if (exec->state->type == XML_REGEXP_FINAL_STATE)
-		*terminal = 1;
-	    else
-		*terminal = 0;
-	}
-
-	if (err) {
-	    if (exec->errState == NULL) return(-1);
-	    state = exec->errState;
-	} else {
-	    if (exec->state == NULL) return(-1);
-	    state = exec->state;
-	}
-	for (transno = 0;
-	     (transno < state->nbTrans) && (nb < maxval);
-	     transno++) {
-	    trans = &state->trans[transno];
-	    if (trans->to < 0)
-		continue;
-	    atom = trans->atom;
-	    if ((atom == NULL) || (atom->valuep == NULL))
-		continue;
-	    if (trans->count == REGEXP_ALL_LAX_COUNTER) {
-	        /* this should not be reached but ... */
-	        TODO;
-	    } else if (trans->count == REGEXP_ALL_COUNTER) {
-	        /* this should not be reached but ... */
-	        TODO;
-	    } else if (trans->counter >= 0) {
-		xmlRegCounterPtr counter = NULL;
-		int count;
-
-		if (err)
-		    count = exec->errCounts[trans->counter];
-		else
-		    count = exec->counts[trans->counter];
-		if (exec->comp != NULL)
-		    counter = &exec->comp->counters[trans->counter];
-		if ((counter == NULL) || (count < counter->max)) {
-		    if (atom->neg)
-			values[nb++] = (xmlChar *) atom->valuep2;
-		    else
-			values[nb++] = (xmlChar *) atom->valuep;
-		    (*nbval)++;
-		}
-	    } else {
-                if ((exec->comp != NULL) && (exec->comp->states[trans->to] != NULL) &&
-		    (exec->comp->states[trans->to]->type !=
-		     XML_REGEXP_SINK_STATE)) {
-		    if (atom->neg)
-			values[nb++] = (xmlChar *) atom->valuep2;
-		    else
-			values[nb++] = (xmlChar *) atom->valuep;
-		    (*nbval)++;
-		}
-	    }
-	}
-	for (transno = 0;
-	     (transno < state->nbTrans) && (nb < maxval);
-	     transno++) {
-	    trans = &state->trans[transno];
-	    if (trans->to < 0)
-		continue;
-	    atom = trans->atom;
-	    if ((atom == NULL) || (atom->valuep == NULL))
-		continue;
-	    if (trans->count == REGEXP_ALL_LAX_COUNTER) {
-	        continue;
-	    } else if (trans->count == REGEXP_ALL_COUNTER) {
-	        continue;
-	    } else if (trans->counter >= 0) {
-	        continue;
-	    } else {
-                if ((exec->comp->states[trans->to] != NULL) &&
-		    (exec->comp->states[trans->to]->type ==
-		     XML_REGEXP_SINK_STATE)) {
-		    if (atom->neg)
-			values[nb++] = (xmlChar *) atom->valuep2;
-		    else
-			values[nb++] = (xmlChar *) atom->valuep;
-		    (*nbneg)++;
-		}
-	    }
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlRegExecNextValues:
- * @exec: a regexp execution context
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract informations from the regexp execution,
- * the parameter @values must point to an array of @nbval string pointers
- * on return nbval will contain the number of possible strings in that
- * state and the @values array will be updated with them. The string values
- * returned will be freed with the @exec context and don't need to be
- * deallocated.
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-int
-xmlRegExecNextValues(xmlRegExecCtxtPtr exec, int *nbval, int *nbneg,
-                     xmlChar **values, int *terminal) {
-    return(xmlRegExecGetValues(exec, 0, nbval, nbneg, values, terminal));
-}
-
-/**
- * xmlRegExecErrInfo:
- * @exec: a regexp execution context generating an error
- * @string: return value for the error string
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract error informations from the regexp execution, the parameter
- * @string will be updated with the value pushed and not accepted,
- * the parameter @values must point to an array of @nbval string pointers
- * on return nbval will contain the number of possible strings in that
- * state and the @values array will be updated with them. The string values
- * returned will be freed with the @exec context and don't need to be
- * deallocated.
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-int
-xmlRegExecErrInfo(xmlRegExecCtxtPtr exec, const xmlChar **string,
-                  int *nbval, int *nbneg, xmlChar **values, int *terminal) {
-    if (exec == NULL)
-        return(-1);
-    if (string != NULL) {
-        if (exec->status != 0)
-	    *string = exec->errString;
-	else
-	    *string = NULL;
-    }
-    return(xmlRegExecGetValues(exec, 1, nbval, nbneg, values, terminal));
-}
-
-#ifdef DEBUG_ERR
-static void testerr(xmlRegExecCtxtPtr exec) {
-    const xmlChar *string;
-    xmlChar *values[5];
-    int nb = 5;
-    int nbneg;
-    int terminal;
-    xmlRegExecErrInfo(exec, &string, &nb, &nbneg, &values[0], &terminal);
-}
-#endif
-
-#if 0
-static int
-xmlRegExecPushChar(xmlRegExecCtxtPtr exec, int UCS) {
-    xmlRegTransPtr trans;
-    xmlRegAtomPtr atom;
-    int ret;
-    int codepoint, len;
-
-    if (exec == NULL)
-	return(-1);
-    if (exec->status != 0)
-	return(exec->status);
-
-    while ((exec->status == 0) &&
-	   ((exec->inputString[exec->index] != 0) ||
-	    (exec->state->type != XML_REGEXP_FINAL_STATE))) {
-
-	/*
-	 * End of input on non-terminal state, rollback, however we may
-	 * still have epsilon like transition for counted transitions
-	 * on counters, in that case don't break too early.
-	 */
-	if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL))
-	    goto rollback;
-
-	exec->transcount = 0;
-	for (;exec->transno < exec->state->nbTrans;exec->transno++) {
-	    trans = &exec->state->trans[exec->transno];
-	    if (trans->to < 0)
-		continue;
-	    atom = trans->atom;
-	    ret = 0;
-	    if (trans->count >= 0) {
-		int count;
-		xmlRegCounterPtr counter;
-
-		/*
-		 * A counted transition.
-		 */
-
-		count = exec->counts[trans->count];
-		counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_REGEXP_EXEC
-		printf("testing count %d: val %d, min %d, max %d\n",
-		       trans->count, count, counter->min,  counter->max);
-#endif
-		ret = ((count >= counter->min) && (count <= counter->max));
-	    } else if (atom == NULL) {
-		fprintf(stderr, "epsilon transition left at runtime\n");
-		exec->status = -2;
-		break;
-	    } else if (exec->inputString[exec->index] != 0) {
-                codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
-		ret = xmlRegCheckCharacter(atom, codepoint);
-		if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
-		    xmlRegStatePtr to = exec->comp->states[trans->to];
-
-		    /*
-		     * this is a multiple input sequence
-		     */
-		    if (exec->state->nbTrans > exec->transno + 1) {
-			xmlFARegExecSave(exec);
-		    }
-		    exec->transcount = 1;
-		    do {
-			/*
-			 * Try to progress as much as possible on the input
-			 */
-			if (exec->transcount == atom->max) {
-			    break;
-			}
-			exec->index += len;
-			/*
-			 * End of input: stop here
-			 */
-			if (exec->inputString[exec->index] == 0) {
-			    exec->index -= len;
-			    break;
-			}
-			if (exec->transcount >= atom->min) {
-			    int transno = exec->transno;
-			    xmlRegStatePtr state = exec->state;
-
-			    /*
-			     * The transition is acceptable save it
-			     */
-			    exec->transno = -1; /* trick */
-			    exec->state = to;
-			    xmlFARegExecSave(exec);
-			    exec->transno = transno;
-			    exec->state = state;
-			}
-			codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
-				              len);
-			ret = xmlRegCheckCharacter(atom, codepoint);
-			exec->transcount++;
-		    } while (ret == 1);
-		    if (exec->transcount < atom->min)
-			ret = 0;
-
-		    /*
-		     * If the last check failed but one transition was found
-		     * possible, rollback
-		     */
-		    if (ret < 0)
-			ret = 0;
-		    if (ret == 0) {
-			goto rollback;
-		    }
-		}
-	    }
-	    if (ret == 1) {
-		if (exec->state->nbTrans > exec->transno + 1) {
-		    xmlFARegExecSave(exec);
-		}
-		/*
-		 * restart count for expressions like this ((abc){2})*
-		 */
-		if (trans->count >= 0) {
-#ifdef DEBUG_REGEXP_EXEC
-		    printf("Reset count %d\n", trans->count);
-#endif
-		    exec->counts[trans->count] = 0;
-		}
-		if (trans->counter >= 0) {
-#ifdef DEBUG_REGEXP_EXEC
-		    printf("Increasing count %d\n", trans->counter);
-#endif
-		    exec->counts[trans->counter]++;
-		}
-#ifdef DEBUG_REGEXP_EXEC
-		printf("entering state %d\n", trans->to);
-#endif
-		exec->state = exec->comp->states[trans->to];
-		exec->transno = 0;
-		if (trans->atom != NULL) {
-		    exec->index += len;
-		}
-		goto progress;
-	    } else if (ret < 0) {
-		exec->status = -4;
-		break;
-	    }
-	}
-	if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
-	    /*
-	     * Failed to find a way out
-	     */
-	    exec->determinist = 0;
-	    xmlFARegExecRollBack(exec);
-	}
-progress:
-	continue;
-    }
-}
-#endif
-/************************************************************************
- *									*
- *	Parser for the Schemas Datatype Regular Expressions		*
- *	http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#regexs	*
- *									*
- ************************************************************************/
-
-/**
- * xmlFAIsChar:
- * @ctxt:  a regexp parser context
- *
- * [10]   Char   ::=   [^.\?*+()|#x5B#x5D]
- */
-static int
-xmlFAIsChar(xmlRegParserCtxtPtr ctxt) {
-    int cur;
-    int len;
-
-    cur = CUR_SCHAR(ctxt->cur, len);
-    if ((cur == '.') || (cur == '\\') || (cur == '?') ||
-	(cur == '*') || (cur == '+') || (cur == '(') ||
-	(cur == ')') || (cur == '|') || (cur == 0x5B) ||
-	(cur == 0x5D) || (cur == 0))
-	return(-1);
-    return(cur);
-}
-
-/**
- * xmlFAParseCharProp:
- * @ctxt:  a regexp parser context
- *
- * [27]   charProp   ::=   IsCategory | IsBlock
- * [28]   IsCategory ::= Letters | Marks | Numbers | Punctuation |
- *                       Separators | Symbols | Others
- * [29]   Letters   ::=   'L' [ultmo]?
- * [30]   Marks   ::=   'M' [nce]?
- * [31]   Numbers   ::=   'N' [dlo]?
- * [32]   Punctuation   ::=   'P' [cdseifo]?
- * [33]   Separators   ::=   'Z' [slp]?
- * [34]   Symbols   ::=   'S' [mcko]?
- * [35]   Others   ::=   'C' [cfon]?
- * [36]   IsBlock   ::=   'Is' [a-zA-Z0-9#x2D]+
- */
-static void
-xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
-    int cur;
-    xmlRegAtomType type = (xmlRegAtomType) 0;
-    xmlChar *blockName = NULL;
-
-    cur = CUR;
-    if (cur == 'L') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'u') {
-	    NEXT;
-	    type = XML_REGEXP_LETTER_UPPERCASE;
-	} else if (cur == 'l') {
-	    NEXT;
-	    type = XML_REGEXP_LETTER_LOWERCASE;
-	} else if (cur == 't') {
-	    NEXT;
-	    type = XML_REGEXP_LETTER_TITLECASE;
-	} else if (cur == 'm') {
-	    NEXT;
-	    type = XML_REGEXP_LETTER_MODIFIER;
-	} else if (cur == 'o') {
-	    NEXT;
-	    type = XML_REGEXP_LETTER_OTHERS;
-	} else {
-	    type = XML_REGEXP_LETTER;
-	}
-    } else if (cur == 'M') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'n') {
-	    NEXT;
-	    /* nonspacing */
-	    type = XML_REGEXP_MARK_NONSPACING;
-	} else if (cur == 'c') {
-	    NEXT;
-	    /* spacing combining */
-	    type = XML_REGEXP_MARK_SPACECOMBINING;
-	} else if (cur == 'e') {
-	    NEXT;
-	    /* enclosing */
-	    type = XML_REGEXP_MARK_ENCLOSING;
-	} else {
-	    /* all marks */
-	    type = XML_REGEXP_MARK;
-	}
-    } else if (cur == 'N') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'd') {
-	    NEXT;
-	    /* digital */
-	    type = XML_REGEXP_NUMBER_DECIMAL;
-	} else if (cur == 'l') {
-	    NEXT;
-	    /* letter */
-	    type = XML_REGEXP_NUMBER_LETTER;
-	} else if (cur == 'o') {
-	    NEXT;
-	    /* other */
-	    type = XML_REGEXP_NUMBER_OTHERS;
-	} else {
-	    /* all numbers */
-	    type = XML_REGEXP_NUMBER;
-	}
-    } else if (cur == 'P') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'c') {
-	    NEXT;
-	    /* connector */
-	    type = XML_REGEXP_PUNCT_CONNECTOR;
-	} else if (cur == 'd') {
-	    NEXT;
-	    /* dash */
-	    type = XML_REGEXP_PUNCT_DASH;
-	} else if (cur == 's') {
-	    NEXT;
-	    /* open */
-	    type = XML_REGEXP_PUNCT_OPEN;
-	} else if (cur == 'e') {
-	    NEXT;
-	    /* close */
-	    type = XML_REGEXP_PUNCT_CLOSE;
-	} else if (cur == 'i') {
-	    NEXT;
-	    /* initial quote */
-	    type = XML_REGEXP_PUNCT_INITQUOTE;
-	} else if (cur == 'f') {
-	    NEXT;
-	    /* final quote */
-	    type = XML_REGEXP_PUNCT_FINQUOTE;
-	} else if (cur == 'o') {
-	    NEXT;
-	    /* other */
-	    type = XML_REGEXP_PUNCT_OTHERS;
-	} else {
-	    /* all punctuation */
-	    type = XML_REGEXP_PUNCT;
-	}
-    } else if (cur == 'Z') {
-	NEXT;
-	cur = CUR;
-	if (cur == 's') {
-	    NEXT;
-	    /* space */
-	    type = XML_REGEXP_SEPAR_SPACE;
-	} else if (cur == 'l') {
-	    NEXT;
-	    /* line */
-	    type = XML_REGEXP_SEPAR_LINE;
-	} else if (cur == 'p') {
-	    NEXT;
-	    /* paragraph */
-	    type = XML_REGEXP_SEPAR_PARA;
-	} else {
-	    /* all separators */
-	    type = XML_REGEXP_SEPAR;
-	}
-    } else if (cur == 'S') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'm') {
-	    NEXT;
-	    type = XML_REGEXP_SYMBOL_MATH;
-	    /* math */
-	} else if (cur == 'c') {
-	    NEXT;
-	    type = XML_REGEXP_SYMBOL_CURRENCY;
-	    /* currency */
-	} else if (cur == 'k') {
-	    NEXT;
-	    type = XML_REGEXP_SYMBOL_MODIFIER;
-	    /* modifiers */
-	} else if (cur == 'o') {
-	    NEXT;
-	    type = XML_REGEXP_SYMBOL_OTHERS;
-	    /* other */
-	} else {
-	    /* all symbols */
-	    type = XML_REGEXP_SYMBOL;
-	}
-    } else if (cur == 'C') {
-	NEXT;
-	cur = CUR;
-	if (cur == 'c') {
-	    NEXT;
-	    /* control */
-	    type = XML_REGEXP_OTHER_CONTROL;
-	} else if (cur == 'f') {
-	    NEXT;
-	    /* format */
-	    type = XML_REGEXP_OTHER_FORMAT;
-	} else if (cur == 'o') {
-	    NEXT;
-	    /* private use */
-	    type = XML_REGEXP_OTHER_PRIVATE;
-	} else if (cur == 'n') {
-	    NEXT;
-	    /* not assigned */
-	    type = XML_REGEXP_OTHER_NA;
-	} else {
-	    /* all others */
-	    type = XML_REGEXP_OTHER;
-	}
-    } else if (cur == 'I') {
-	const xmlChar *start;
-	NEXT;
-	cur = CUR;
-	if (cur != 's') {
-	    ERROR("IsXXXX expected");
-	    return;
-	}
-	NEXT;
-	start = ctxt->cur;
-	cur = CUR;
-	if (((cur >= 'a') && (cur <= 'z')) ||
-	    ((cur >= 'A') && (cur <= 'Z')) ||
-	    ((cur >= '0') && (cur <= '9')) ||
-	    (cur == 0x2D)) {
-	    NEXT;
-	    cur = CUR;
-	    while (((cur >= 'a') && (cur <= 'z')) ||
-		((cur >= 'A') && (cur <= 'Z')) ||
-		((cur >= '0') && (cur <= '9')) ||
-		(cur == 0x2D)) {
-		NEXT;
-		cur = CUR;
-	    }
-	}
-	type = XML_REGEXP_BLOCK_NAME;
-	blockName = xmlStrndup(start, ctxt->cur - start);
-    } else {
-	ERROR("Unknown char property");
-	return;
-    }
-    if (ctxt->atom == NULL) {
-	ctxt->atom = xmlRegNewAtom(ctxt, type);
-	if (ctxt->atom != NULL)
-	    ctxt->atom->valuep = blockName;
-    } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
-        xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-		           type, 0, 0, blockName);
-    }
-}
-
-/**
- * xmlFAParseCharClassEsc:
- * @ctxt:  a regexp parser context
- *
- * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc )
- * [24] SingleCharEsc ::= '\' [nrt\|.?*+(){}#x2D#x5B#x5D#x5E]
- * [25] catEsc   ::=   '\p{' charProp '}'
- * [26] complEsc ::=   '\P{' charProp '}'
- * [37] MultiCharEsc ::= '.' | ('\' [sSiIcCdDwW])
- */
-static void
-xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
-    int cur;
-
-    if (CUR == '.') {
-	if (ctxt->atom == NULL) {
-	    ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_ANYCHAR);
-	} else if (ctxt->atom->type == XML_REGEXP_RANGES) {
-	    xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-			       XML_REGEXP_ANYCHAR, 0, 0, NULL);
-	}
-	NEXT;
-	return;
-    }
-    if (CUR != '\\') {
-	ERROR("Escaped sequence: expecting \\");
-	return;
-    }
-    NEXT;
-    cur = CUR;
-    if (cur == 'p') {
-	NEXT;
-	if (CUR != '{') {
-	    ERROR("Expecting '{'");
-	    return;
-	}
-	NEXT;
-	xmlFAParseCharProp(ctxt);
-	if (CUR != '}') {
-	    ERROR("Expecting '}'");
-	    return;
-	}
-	NEXT;
-    } else if (cur == 'P') {
-	NEXT;
-	if (CUR != '{') {
-	    ERROR("Expecting '{'");
-	    return;
-	}
-	NEXT;
-	xmlFAParseCharProp(ctxt);
-	ctxt->atom->neg = 1;
-	if (CUR != '}') {
-	    ERROR("Expecting '}'");
-	    return;
-	}
-	NEXT;
-    } else if ((cur == 'n') || (cur == 'r') || (cur == 't') || (cur == '\\') ||
-	(cur == '|') || (cur == '.') || (cur == '?') || (cur == '*') ||
-	(cur == '+') || (cur == '(') || (cur == ')') || (cur == '{') ||
-	(cur == '}') || (cur == 0x2D) || (cur == 0x5B) || (cur == 0x5D) ||
-	(cur == 0x5E)) {
-	if (ctxt->atom == NULL) {
-	    ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
-	    if (ctxt->atom != NULL) {
-	        switch (cur) {
-		    case 'n':
-		        ctxt->atom->codepoint = '\n';
-			break;
-		    case 'r':
-		        ctxt->atom->codepoint = '\r';
-			break;
-		    case 't':
-		        ctxt->atom->codepoint = '\t';
-			break;
-		    default:
-			ctxt->atom->codepoint = cur;
-		}
-	    }
-	} else if (ctxt->atom->type == XML_REGEXP_RANGES) {
-            switch (cur) {
-                case 'n':
-                    cur = '\n';
-                    break;
-                case 'r':
-                    cur = '\r';
-                    break;
-                case 't':
-                    cur = '\t';
-                    break;
-            }
-	    xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-			       XML_REGEXP_CHARVAL, cur, cur, NULL);
-	}
-	NEXT;
-    } else if ((cur == 's') || (cur == 'S') || (cur == 'i') || (cur == 'I') ||
-	(cur == 'c') || (cur == 'C') || (cur == 'd') || (cur == 'D') ||
-	(cur == 'w') || (cur == 'W')) {
-	xmlRegAtomType type = XML_REGEXP_ANYSPACE;
-
-	switch (cur) {
-	    case 's':
-		type = XML_REGEXP_ANYSPACE;
-		break;
-	    case 'S':
-		type = XML_REGEXP_NOTSPACE;
-		break;
-	    case 'i':
-		type = XML_REGEXP_INITNAME;
-		break;
-	    case 'I':
-		type = XML_REGEXP_NOTINITNAME;
-		break;
-	    case 'c':
-		type = XML_REGEXP_NAMECHAR;
-		break;
-	    case 'C':
-		type = XML_REGEXP_NOTNAMECHAR;
-		break;
-	    case 'd':
-		type = XML_REGEXP_DECIMAL;
-		break;
-	    case 'D':
-		type = XML_REGEXP_NOTDECIMAL;
-		break;
-	    case 'w':
-		type = XML_REGEXP_REALCHAR;
-		break;
-	    case 'W':
-		type = XML_REGEXP_NOTREALCHAR;
-		break;
-	}
-	NEXT;
-	if (ctxt->atom == NULL) {
-	    ctxt->atom = xmlRegNewAtom(ctxt, type);
-	} else if (ctxt->atom->type == XML_REGEXP_RANGES) {
-	    xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-			       type, 0, 0, NULL);
-	}
-    } else {
-	ERROR("Wrong escape sequence, misuse of character '\\'");
-    }
-}
-
-/**
- * xmlFAParseCharRange:
- * @ctxt:  a regexp parser context
- *
- * [17]   charRange   ::=     seRange | XmlCharRef | XmlCharIncDash
- * [18]   seRange   ::=   charOrEsc '-' charOrEsc
- * [20]   charOrEsc   ::=   XmlChar | SingleCharEsc
- * [21]   XmlChar   ::=   [^\#x2D#x5B#x5D]
- * [22]   XmlCharIncDash   ::=   [^\#x5B#x5D]
- */
-static void
-xmlFAParseCharRange(xmlRegParserCtxtPtr ctxt) {
-    int cur, len;
-    int start = -1;
-    int end = -1;
-
-    if (CUR == '\0') {
-        ERROR("Expecting ']'");
-	return;
-    }
-
-    cur = CUR;
-    if (cur == '\\') {
-	NEXT;
-	cur = CUR;
-	switch (cur) {
-	    case 'n': start = 0xA; break;
-	    case 'r': start = 0xD; break;
-	    case 't': start = 0x9; break;
-	    case '\\': case '|': case '.': case '-': case '^': case '?':
-	    case '*': case '+': case '{': case '}': case '(': case ')':
-	    case '[': case ']':
-		start = cur; break;
-	    default:
-		ERROR("Invalid escape value");
-		return;
-	}
-	end = start;
-        len = 1;
-    } else if ((cur != 0x5B) && (cur != 0x5D)) {
-        end = start = CUR_SCHAR(ctxt->cur, len);
-    } else {
-	ERROR("Expecting a char range");
-	return;
-    }
-    /*
-     * Since we are "inside" a range, we can assume ctxt->cur is past
-     * the start of ctxt->string, and PREV should be safe
-     */
-    if ((start == '-') && (NXT(1) != ']') && (PREV != '[') && (PREV != '^')) {
-	NEXTL(len);
-	return;
-    }
-    NEXTL(len);
-    cur = CUR;
-    if ((cur != '-') || (NXT(1) == ']')) {
-        xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-		              XML_REGEXP_CHARVAL, start, end, NULL);
-	return;
-    }
-    NEXT;
-    cur = CUR;
-    if (cur == '\\') {
-	NEXT;
-	cur = CUR;
-	switch (cur) {
-	    case 'n': end = 0xA; break;
-	    case 'r': end = 0xD; break;
-	    case 't': end = 0x9; break;
-	    case '\\': case '|': case '.': case '-': case '^': case '?':
-	    case '*': case '+': case '{': case '}': case '(': case ')':
-	    case '[': case ']':
-		end = cur; break;
-	    default:
-		ERROR("Invalid escape value");
-		return;
-	}
-        len = 1;
-    } else if ((cur != 0x5B) && (cur != 0x5D)) {
-        end = CUR_SCHAR(ctxt->cur, len);
-    } else {
-	ERROR("Expecting the end of a char range");
-	return;
-    }
-
-    /* TODO check that the values are acceptable character ranges for XML */
-    if (end < start) {
-	ERROR("End of range is before start of range");
-    } else {
-        NEXTL(len);
-        xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
-		           XML_REGEXP_CHARVAL, start, end, NULL);
-    }
-    return;
-}
-
-/**
- * xmlFAParsePosCharGroup:
- * @ctxt:  a regexp parser context
- *
- * [14]   posCharGroup ::= ( charRange | charClassEsc  )+
- */
-static void
-xmlFAParsePosCharGroup(xmlRegParserCtxtPtr ctxt) {
-    do {
-	if (CUR == '\\') {
-	    xmlFAParseCharClassEsc(ctxt);
-	} else {
-	    xmlFAParseCharRange(ctxt);
-	}
-    } while ((CUR != ']') && (CUR != '^') && (CUR != '-') &&
-             (CUR != 0) && (ctxt->error == 0));
-}
-
-/**
- * xmlFAParseCharGroup:
- * @ctxt:  a regexp parser context
- *
- * [13]   charGroup    ::= posCharGroup | negCharGroup | charClassSub
- * [15]   negCharGroup ::= '^' posCharGroup
- * [16]   charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr
- * [12]   charClassExpr ::= '[' charGroup ']'
- */
-static void
-xmlFAParseCharGroup(xmlRegParserCtxtPtr ctxt) {
-    int n = ctxt->neg;
-    while ((CUR != ']') && (ctxt->error == 0)) {
-	if (CUR == '^') {
-	    int neg = ctxt->neg;
-
-	    NEXT;
-	    ctxt->neg = !ctxt->neg;
-	    xmlFAParsePosCharGroup(ctxt);
-	    ctxt->neg = neg;
-	} else if ((CUR == '-') && (NXT(1) == '[')) {
-	    int neg = ctxt->neg;
-	    ctxt->neg = 2;
-	    NEXT;	/* eat the '-' */
-	    NEXT;	/* eat the '[' */
-	    xmlFAParseCharGroup(ctxt);
-	    if (CUR == ']') {
-		NEXT;
-	    } else {
-		ERROR("charClassExpr: ']' expected");
-		break;
-	    }
-	    ctxt->neg = neg;
-	    break;
-	} else if (CUR != ']') {
-	    xmlFAParsePosCharGroup(ctxt);
-	}
-    }
-    ctxt->neg = n;
-}
-
-/**
- * xmlFAParseCharClass:
- * @ctxt:  a regexp parser context
- *
- * [11]   charClass   ::=     charClassEsc | charClassExpr
- * [12]   charClassExpr   ::=   '[' charGroup ']'
- */
-static void
-xmlFAParseCharClass(xmlRegParserCtxtPtr ctxt) {
-    if (CUR == '[') {
-	NEXT;
-	ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_RANGES);
-	if (ctxt->atom == NULL)
-	    return;
-	xmlFAParseCharGroup(ctxt);
-	if (CUR == ']') {
-	    NEXT;
-	} else {
-	    ERROR("xmlFAParseCharClass: ']' expected");
-	}
-    } else {
-	xmlFAParseCharClassEsc(ctxt);
-    }
-}
-
-/**
- * xmlFAParseQuantExact:
- * @ctxt:  a regexp parser context
- *
- * [8]   QuantExact   ::=   [0-9]+
- *
- * Returns 0 if success or -1 in case of error
- */
-static int
-xmlFAParseQuantExact(xmlRegParserCtxtPtr ctxt) {
-    int ret = 0;
-    int ok = 0;
-
-    while ((CUR >= '0') && (CUR <= '9')) {
-	ret = ret * 10 + (CUR - '0');
-	ok = 1;
-	NEXT;
-    }
-    if (ok != 1) {
-	return(-1);
-    }
-    return(ret);
-}
-
-/**
- * xmlFAParseQuantifier:
- * @ctxt:  a regexp parser context
- *
- * [4]   quantifier   ::=   [?*+] | ( '{' quantity '}' )
- * [5]   quantity   ::=   quantRange | quantMin | QuantExact
- * [6]   quantRange   ::=   QuantExact ',' QuantExact
- * [7]   quantMin   ::=   QuantExact ','
- * [8]   QuantExact   ::=   [0-9]+
- */
-static int
-xmlFAParseQuantifier(xmlRegParserCtxtPtr ctxt) {
-    int cur;
-
-    cur = CUR;
-    if ((cur == '?') || (cur == '*') || (cur == '+')) {
-	if (ctxt->atom != NULL) {
-	    if (cur == '?')
-		ctxt->atom->quant = XML_REGEXP_QUANT_OPT;
-	    else if (cur == '*')
-		ctxt->atom->quant = XML_REGEXP_QUANT_MULT;
-	    else if (cur == '+')
-		ctxt->atom->quant = XML_REGEXP_QUANT_PLUS;
-	}
-	NEXT;
-	return(1);
-    }
-    if (cur == '{') {
-	int min = 0, max = 0;
-
-	NEXT;
-	cur = xmlFAParseQuantExact(ctxt);
-	if (cur >= 0)
-	    min = cur;
-	if (CUR == ',') {
-	    NEXT;
-	    if (CUR == '}')
-	        max = INT_MAX;
-	    else {
-	        cur = xmlFAParseQuantExact(ctxt);
-	        if (cur >= 0)
-		    max = cur;
-		else {
-		    ERROR("Improper quantifier");
-		}
-	    }
-	}
-	if (CUR == '}') {
-	    NEXT;
-	} else {
-	    ERROR("Unterminated quantifier");
-	}
-	if (max == 0)
-	    max = min;
-	if (ctxt->atom != NULL) {
-	    ctxt->atom->quant = XML_REGEXP_QUANT_RANGE;
-	    ctxt->atom->min = min;
-	    ctxt->atom->max = max;
-	}
-	return(1);
-    }
-    return(0);
-}
-
-/**
- * xmlFAParseAtom:
- * @ctxt:  a regexp parser context
- *
- * [9]   atom   ::=   Char | charClass | ( '(' regExp ')' )
- */
-static int
-xmlFAParseAtom(xmlRegParserCtxtPtr ctxt) {
-    int codepoint, len;
-
-    codepoint = xmlFAIsChar(ctxt);
-    if (codepoint > 0) {
-	ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
-	if (ctxt->atom == NULL)
-	    return(-1);
-	codepoint = CUR_SCHAR(ctxt->cur, len);
-	ctxt->atom->codepoint = codepoint;
-	NEXTL(len);
-	return(1);
-    } else if (CUR == '|') {
-	return(0);
-    } else if (CUR == 0) {
-	return(0);
-    } else if (CUR == ')') {
-	return(0);
-    } else if (CUR == '(') {
-	xmlRegStatePtr start, oldend, start0;
-
-	NEXT;
-	/*
-	 * this extra Epsilon transition is needed if we count with 0 allowed
-	 * unfortunately this can't be known at that point
-	 */
-	xmlFAGenerateEpsilonTransition(ctxt, ctxt->state, NULL);
-	start0 = ctxt->state;
-	xmlFAGenerateEpsilonTransition(ctxt, ctxt->state, NULL);
-	start = ctxt->state;
-	oldend = ctxt->end;
-	ctxt->end = NULL;
-	ctxt->atom = NULL;
-	xmlFAParseRegExp(ctxt, 0);
-	if (CUR == ')') {
-	    NEXT;
-	} else {
-	    ERROR("xmlFAParseAtom: expecting ')'");
-	}
-	ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_SUBREG);
-	if (ctxt->atom == NULL)
-	    return(-1);
-	ctxt->atom->start = start;
-	ctxt->atom->start0 = start0;
-	ctxt->atom->stop = ctxt->state;
-	ctxt->end = oldend;
-	return(1);
-    } else if ((CUR == '[') || (CUR == '\\') || (CUR == '.')) {
-	xmlFAParseCharClass(ctxt);
-	return(1);
-    }
-    return(0);
-}
-
-/**
- * xmlFAParsePiece:
- * @ctxt:  a regexp parser context
- *
- * [3]   piece   ::=   atom quantifier?
- */
-static int
-xmlFAParsePiece(xmlRegParserCtxtPtr ctxt) {
-    int ret;
-
-    ctxt->atom = NULL;
-    ret = xmlFAParseAtom(ctxt);
-    if (ret == 0)
-	return(0);
-    if (ctxt->atom == NULL) {
-	ERROR("internal: no atom generated");
-    }
-    xmlFAParseQuantifier(ctxt);
-    return(1);
-}
-
-/**
- * xmlFAParseBranch:
- * @ctxt:  a regexp parser context
- * @to: optional target to the end of the branch
- *
- * @to is used to optimize by removing duplicate path in automata
- * in expressions like (a|b)(c|d)
- *
- * [2]   branch   ::=   piece*
- */
-static int
-xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) {
-    xmlRegStatePtr previous;
-    int ret;
-
-    previous = ctxt->state;
-    ret = xmlFAParsePiece(ctxt);
-    if (ret != 0) {
-	if (xmlFAGenerateTransitions(ctxt, previous,
-	        (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
-	    return(-1);
-	previous = ctxt->state;
-	ctxt->atom = NULL;
-    }
-    while ((ret != 0) && (ctxt->error == 0)) {
-	ret = xmlFAParsePiece(ctxt);
-	if (ret != 0) {
-	    if (xmlFAGenerateTransitions(ctxt, previous,
-	            (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
-		    return(-1);
-	    previous = ctxt->state;
-	    ctxt->atom = NULL;
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlFAParseRegExp:
- * @ctxt:  a regexp parser context
- * @top:  is this the top-level expression ?
- *
- * [1]   regExp   ::=     branch  ( '|' branch )*
- */
-static void
-xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) {
-    xmlRegStatePtr start, end;
-
-    /* if not top start should have been generated by an epsilon trans */
-    start = ctxt->state;
-    ctxt->end = NULL;
-    xmlFAParseBranch(ctxt, NULL);
-    if (top) {
-#ifdef DEBUG_REGEXP_GRAPH
-	printf("State %d is final\n", ctxt->state->no);
-#endif
-	ctxt->state->type = XML_REGEXP_FINAL_STATE;
-    }
-    if (CUR != '|') {
-	ctxt->end = ctxt->state;
-	return;
-    }
-    end = ctxt->state;
-    while ((CUR == '|') && (ctxt->error == 0)) {
-	NEXT;
-	if (CUR == 0) {
-	    ERROR("expecting a branch after |")
-	    return;
-	}
-	ctxt->state = start;
-	ctxt->end = NULL;
-	xmlFAParseBranch(ctxt, end);
-    }
-    if (!top) {
-	ctxt->state = end;
-	ctxt->end = end;
-    }
-}
-
-/************************************************************************
- *									*
- *			The basic API					*
- *									*
- ************************************************************************/
-
-/**
- * xmlRegexpPrint:
- * @output: the file for the output debug
- * @regexp: the compiled regexp
- *
- * Print the content of the compiled regular expression
- */
-void
-xmlRegexpPrint(FILE *output, xmlRegexpPtr regexp) {
-    int i;
-
-    if (output == NULL)
-        return;
-    fprintf(output, " regexp: ");
-    if (regexp == NULL) {
-	fprintf(output, "NULL\n");
-	return;
-    }
-    fprintf(output, "'%s' ", regexp->string);
-    fprintf(output, "\n");
-    fprintf(output, "%d atoms:\n", regexp->nbAtoms);
-    for (i = 0;i < regexp->nbAtoms; i++) {
-	fprintf(output, " %02d ", i);
-	xmlRegPrintAtom(output, regexp->atoms[i]);
-    }
-    fprintf(output, "%d states:", regexp->nbStates);
-    fprintf(output, "\n");
-    for (i = 0;i < regexp->nbStates; i++) {
-	xmlRegPrintState(output, regexp->states[i]);
-    }
-    fprintf(output, "%d counters:\n", regexp->nbCounters);
-    for (i = 0;i < regexp->nbCounters; i++) {
-	fprintf(output, " %d: min %d max %d\n", i, regexp->counters[i].min,
-		                                regexp->counters[i].max);
-    }
-}
-
-/**
- * xmlRegexpCompile:
- * @regexp:  a regular expression string
- *
- * Parses a regular expression conforming to XML Schemas Part 2 Datatype
- * Appendix F and builds an automata suitable for testing strings against
- * that regular expression
- *
- * Returns the compiled expression or NULL in case of error
- */
-xmlRegexpPtr
-xmlRegexpCompile(const xmlChar *regexp) {
-    xmlRegexpPtr ret;
-    xmlRegParserCtxtPtr ctxt;
-
-    ctxt = xmlRegNewParserCtxt(regexp);
-    if (ctxt == NULL)
-	return(NULL);
-
-    /* initialize the parser */
-    ctxt->end = NULL;
-    ctxt->start = ctxt->state = xmlRegNewState(ctxt);
-    xmlRegStatePush(ctxt, ctxt->start);
-
-    /* parse the expression building an automata */
-    xmlFAParseRegExp(ctxt, 1);
-    if (CUR != 0) {
-	ERROR("xmlFAParseRegExp: extra characters");
-    }
-    if (ctxt->error != 0) {
-	xmlRegFreeParserCtxt(ctxt);
-	return(NULL);
-    }
-    ctxt->end = ctxt->state;
-    ctxt->start->type = XML_REGEXP_START_STATE;
-    ctxt->end->type = XML_REGEXP_FINAL_STATE;
-
-    /* remove the Epsilon except for counted transitions */
-    xmlFAEliminateEpsilonTransitions(ctxt);
-
-
-    if (ctxt->error != 0) {
-	xmlRegFreeParserCtxt(ctxt);
-	return(NULL);
-    }
-    ret = xmlRegEpxFromParse(ctxt);
-    xmlRegFreeParserCtxt(ctxt);
-    return(ret);
-}
-
-/**
- * xmlRegexpExec:
- * @comp:  the compiled regular expression
- * @content:  the value to check against the regular expression
- *
- * Check if the regular expression generates the value
- *
- * Returns 1 if it matches, 0 if not and a negative value in case of error
- */
-int
-xmlRegexpExec(xmlRegexpPtr comp, const xmlChar *content) {
-    if ((comp == NULL) || (content == NULL))
-	return(-1);
-    return(xmlFARegExec(comp, content));
-}
-
-/**
- * xmlRegexpIsDeterminist:
- * @comp:  the compiled regular expression
- *
- * Check if the regular expression is determinist
- *
- * Returns 1 if it yes, 0 if not and a negative value in case of error
- */
-int
-xmlRegexpIsDeterminist(xmlRegexpPtr comp) {
-    xmlAutomataPtr am;
-    int ret;
-
-    if (comp == NULL)
-	return(-1);
-    if (comp->determinist != -1)
-	return(comp->determinist);
-
-    am = xmlNewAutomata();
-    if (am->states != NULL) {
-	int i;
-
-	for (i = 0;i < am->nbStates;i++)
-	    xmlRegFreeState(am->states[i]);
-	xmlFree(am->states);
-    }
-    am->nbAtoms = comp->nbAtoms;
-    am->atoms = comp->atoms;
-    am->nbStates = comp->nbStates;
-    am->states = comp->states;
-    am->determinist = -1;
-    am->flags = comp->flags;
-    ret = xmlFAComputesDeterminism(am);
-    am->atoms = NULL;
-    am->states = NULL;
-    xmlFreeAutomata(am);
-    comp->determinist = ret;
-    return(ret);
-}
-
-/**
- * xmlRegFreeRegexp:
- * @regexp:  the regexp
- *
- * Free a regexp
- */
-void
-xmlRegFreeRegexp(xmlRegexpPtr regexp) {
-    int i;
-    if (regexp == NULL)
-	return;
-
-    if (regexp->string != NULL)
-	xmlFree(regexp->string);
-    if (regexp->states != NULL) {
-	for (i = 0;i < regexp->nbStates;i++)
-	    xmlRegFreeState(regexp->states[i]);
-	xmlFree(regexp->states);
-    }
-    if (regexp->atoms != NULL) {
-	for (i = 0;i < regexp->nbAtoms;i++)
-	    xmlRegFreeAtom(regexp->atoms[i]);
-	xmlFree(regexp->atoms);
-    }
-    if (regexp->counters != NULL)
-	xmlFree(regexp->counters);
-    if (regexp->compact != NULL)
-	xmlFree(regexp->compact);
-    if (regexp->transdata != NULL)
-	xmlFree(regexp->transdata);
-    if (regexp->stringMap != NULL) {
-	for (i = 0; i < regexp->nbstrings;i++)
-	    xmlFree(regexp->stringMap[i]);
-	xmlFree(regexp->stringMap);
-    }
-
-    xmlFree(regexp);
-}
-
-#ifdef LIBXML_AUTOMATA_ENABLED
-/************************************************************************
- *									*
- *			The Automata interface				*
- *									*
- ************************************************************************/
-
-/**
- * xmlNewAutomata:
- *
- * Create a new automata
- *
- * Returns the new object or NULL in case of failure
- */
-xmlAutomataPtr
-xmlNewAutomata(void) {
-    xmlAutomataPtr ctxt;
-
-    ctxt = xmlRegNewParserCtxt(NULL);
-    if (ctxt == NULL)
-	return(NULL);
-
-    /* initialize the parser */
-    ctxt->end = NULL;
-    ctxt->start = ctxt->state = xmlRegNewState(ctxt);
-    if (ctxt->start == NULL) {
-	xmlFreeAutomata(ctxt);
-	return(NULL);
-    }
-    ctxt->start->type = XML_REGEXP_START_STATE;
-    if (xmlRegStatePush(ctxt, ctxt->start) < 0) {
-        xmlRegFreeState(ctxt->start);
-	xmlFreeAutomata(ctxt);
-	return(NULL);
-    }
-    ctxt->flags = 0;
-
-    return(ctxt);
-}
-
-/**
- * xmlFreeAutomata:
- * @am: an automata
- *
- * Free an automata
- */
-void
-xmlFreeAutomata(xmlAutomataPtr am) {
-    if (am == NULL)
-	return;
-    xmlRegFreeParserCtxt(am);
-}
-
-/**
- * xmlAutomataSetFlags:
- * @am: an automata
- * @flags:  a set of internal flags
- *
- * Set some flags on the automata
- */
-void
-xmlAutomataSetFlags(xmlAutomataPtr am, int flags) {
-    if (am == NULL)
-	return;
-    am->flags |= flags;
-}
-
-/**
- * xmlAutomataGetInitState:
- * @am: an automata
- *
- * Initial state lookup
- *
- * Returns the initial state of the automata
- */
-xmlAutomataStatePtr
-xmlAutomataGetInitState(xmlAutomataPtr am) {
-    if (am == NULL)
-	return(NULL);
-    return(am->start);
-}
-
-/**
- * xmlAutomataSetFinalState:
- * @am: an automata
- * @state: a state in this automata
- *
- * Makes that state a final state
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlAutomataSetFinalState(xmlAutomataPtr am, xmlAutomataStatePtr state) {
-    if ((am == NULL) || (state == NULL))
-	return(-1);
-    state->type = XML_REGEXP_FINAL_STATE;
-    return(0);
-}
-
-/**
- * xmlAutomataNewTransition:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by the value of @token
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewTransition(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			 xmlAutomataStatePtr to, const xmlChar *token,
-			 void *data) {
-    xmlRegAtomPtr atom;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-        return(NULL);
-    atom->data = data;
-    atom->valuep = xmlStrdup(token);
-
-    if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
-        xmlRegFreeAtom(atom);
-	return(NULL);
-    }
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewTransition2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the first input string associated to that transition
- * @token2: the second input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by the value of @token
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewTransition2(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			  xmlAutomataStatePtr to, const xmlChar *token,
-			  const xmlChar *token2, void *data) {
-    xmlRegAtomPtr atom;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    atom->data = data;
-    if ((token2 == NULL) || (*token2 == 0)) {
-	atom->valuep = xmlStrdup(token);
-    } else {
-	int lenn, lenp;
-	xmlChar *str;
-
-	lenn = strlen((char *) token2);
-	lenp = strlen((char *) token);
-
-	str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
-	if (str == NULL) {
-	    xmlRegFreeAtom(atom);
-	    return(NULL);
-	}
-	memcpy(&str[0], token, lenp);
-	str[lenp] = '|';
-	memcpy(&str[lenp + 1], token2, lenn);
-	str[lenn + lenp + 1] = 0;
-
-	atom->valuep = str;
-    }
-
-    if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
-        xmlRegFreeAtom(atom);
-	return(NULL);
-    }
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewNegTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the first input string associated to that transition
- * @token2: the second input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by any value except (@token,@token2)
- * Note that if @token2 is not NULL, then (X, NULL) won't match to follow
- # the semantic of XSD ##other
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewNegTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-		       xmlAutomataStatePtr to, const xmlChar *token,
-		       const xmlChar *token2, void *data) {
-    xmlRegAtomPtr atom;
-    xmlChar err_msg[200];
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    atom->data = data;
-    atom->neg = 1;
-    if ((token2 == NULL) || (*token2 == 0)) {
-	atom->valuep = xmlStrdup(token);
-    } else {
-	int lenn, lenp;
-	xmlChar *str;
-
-	lenn = strlen((char *) token2);
-	lenp = strlen((char *) token);
-
-	str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
-	if (str == NULL) {
-	    xmlRegFreeAtom(atom);
-	    return(NULL);
-	}
-	memcpy(&str[0], token, lenp);
-	str[lenp] = '|';
-	memcpy(&str[lenp + 1], token2, lenn);
-	str[lenn + lenp + 1] = 0;
-
-	atom->valuep = str;
-    }
-    snprintf((char *) err_msg, 199, "not %s", (const char *) atom->valuep);
-    err_msg[199] = 0;
-    atom->valuep2 = xmlStrdup(err_msg);
-
-    if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
-        xmlRegFreeAtom(atom);
-	return(NULL);
-    }
-    am->negs++;
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewCountTrans2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @token2: the second input string associated to that transition
- * @min:  the minimum successive occurences of token
- * @max:  the maximum successive occurences of token
- * @data:  data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and
- * whose number is between @min and @max
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			 xmlAutomataStatePtr to, const xmlChar *token,
-			 const xmlChar *token2,
-			 int min, int max, void *data) {
-    xmlRegAtomPtr atom;
-    int counter;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    if (min < 0)
-	return(NULL);
-    if ((max < min) || (max < 1))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    if ((token2 == NULL) || (*token2 == 0)) {
-	atom->valuep = xmlStrdup(token);
-    } else {
-	int lenn, lenp;
-	xmlChar *str;
-
-	lenn = strlen((char *) token2);
-	lenp = strlen((char *) token);
-
-	str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
-	if (str == NULL) {
-	    xmlRegFreeAtom(atom);
-	    return(NULL);
-	}
-	memcpy(&str[0], token, lenp);
-	str[lenp] = '|';
-	memcpy(&str[lenp + 1], token2, lenn);
-	str[lenn + lenp + 1] = 0;
-
-	atom->valuep = str;
-    }
-    atom->data = data;
-    if (min == 0)
-	atom->min = 1;
-    else
-	atom->min = min;
-    atom->max = max;
-
-    /*
-     * associate a counter to the transition.
-     */
-    counter = xmlRegGetCounter(am);
-    am->counters[counter].min = min;
-    am->counters[counter].max = max;
-
-    /* xmlFAGenerateTransitions(am, from, to, atom); */
-    if (to == NULL) {
-        to = xmlRegNewState(am);
-	xmlRegStatePush(am, to);
-    }
-    xmlRegStateAddTrans(am, from, atom, to, counter, -1);
-    xmlRegAtomPush(am, atom);
-    am->state = to;
-
-    if (to == NULL)
-	to = am->state;
-    if (to == NULL)
-	return(NULL);
-    if (min == 0)
-	xmlFAGenerateEpsilonTransition(am, from, to);
-    return(to);
-}
-
-/**
- * xmlAutomataNewCountTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @min:  the minimum successive occurences of token
- * @max:  the maximum successive occurences of token
- * @data:  data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and whose number
- * is between @min and @max
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			 xmlAutomataStatePtr to, const xmlChar *token,
-			 int min, int max, void *data) {
-    xmlRegAtomPtr atom;
-    int counter;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    if (min < 0)
-	return(NULL);
-    if ((max < min) || (max < 1))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    atom->valuep = xmlStrdup(token);
-    atom->data = data;
-    if (min == 0)
-	atom->min = 1;
-    else
-	atom->min = min;
-    atom->max = max;
-
-    /*
-     * associate a counter to the transition.
-     */
-    counter = xmlRegGetCounter(am);
-    am->counters[counter].min = min;
-    am->counters[counter].max = max;
-
-    /* xmlFAGenerateTransitions(am, from, to, atom); */
-    if (to == NULL) {
-        to = xmlRegNewState(am);
-	xmlRegStatePush(am, to);
-    }
-    xmlRegStateAddTrans(am, from, atom, to, counter, -1);
-    xmlRegAtomPush(am, atom);
-    am->state = to;
-
-    if (to == NULL)
-	to = am->state;
-    if (to == NULL)
-	return(NULL);
-    if (min == 0)
-	xmlFAGenerateEpsilonTransition(am, from, to);
-    return(to);
-}
-
-/**
- * xmlAutomataNewOnceTrans2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @token2: the second input string associated to that transition
- * @min:  the minimum successive occurences of token
- * @max:  the maximum successive occurences of token
- * @data:  data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and whose
- * number is between @min and @max, moreover that transition can only be
- * crossed once.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			 xmlAutomataStatePtr to, const xmlChar *token,
-			 const xmlChar *token2,
-			 int min, int max, void *data) {
-    xmlRegAtomPtr atom;
-    int counter;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    if (min < 1)
-	return(NULL);
-    if ((max < min) || (max < 1))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    if ((token2 == NULL) || (*token2 == 0)) {
-	atom->valuep = xmlStrdup(token);
-    } else {
-	int lenn, lenp;
-	xmlChar *str;
-
-	lenn = strlen((char *) token2);
-	lenp = strlen((char *) token);
-
-	str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
-	if (str == NULL) {
-	    xmlRegFreeAtom(atom);
-	    return(NULL);
-	}
-	memcpy(&str[0], token, lenp);
-	str[lenp] = '|';
-	memcpy(&str[lenp + 1], token2, lenn);
-	str[lenn + lenp + 1] = 0;
-
-	atom->valuep = str;
-    }
-    atom->data = data;
-    atom->quant = XML_REGEXP_QUANT_ONCEONLY;
-    atom->min = min;
-    atom->max = max;
-    /*
-     * associate a counter to the transition.
-     */
-    counter = xmlRegGetCounter(am);
-    am->counters[counter].min = 1;
-    am->counters[counter].max = 1;
-
-    /* xmlFAGenerateTransitions(am, from, to, atom); */
-    if (to == NULL) {
-	to = xmlRegNewState(am);
-	xmlRegStatePush(am, to);
-    }
-    xmlRegStateAddTrans(am, from, atom, to, counter, -1);
-    xmlRegAtomPush(am, atom);
-    am->state = to;
-    return(to);
-}
-
-
-
-/**
- * xmlAutomataNewOnceTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @min:  the minimum successive occurences of token
- * @max:  the maximum successive occurences of token
- * @data:  data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and whose number
- * is between @min and @max, moreover that transition can only be crossed
- * once.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-			 xmlAutomataStatePtr to, const xmlChar *token,
-			 int min, int max, void *data) {
-    xmlRegAtomPtr atom;
-    int counter;
-
-    if ((am == NULL) || (from == NULL) || (token == NULL))
-	return(NULL);
-    if (min < 1)
-	return(NULL);
-    if ((max < min) || (max < 1))
-	return(NULL);
-    atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
-    if (atom == NULL)
-	return(NULL);
-    atom->valuep = xmlStrdup(token);
-    atom->data = data;
-    atom->quant = XML_REGEXP_QUANT_ONCEONLY;
-    atom->min = min;
-    atom->max = max;
-    /*
-     * associate a counter to the transition.
-     */
-    counter = xmlRegGetCounter(am);
-    am->counters[counter].min = 1;
-    am->counters[counter].max = 1;
-
-    /* xmlFAGenerateTransitions(am, from, to, atom); */
-    if (to == NULL) {
-	to = xmlRegNewState(am);
-	xmlRegStatePush(am, to);
-    }
-    xmlRegStateAddTrans(am, from, atom, to, counter, -1);
-    xmlRegAtomPush(am, atom);
-    am->state = to;
-    return(to);
-}
-
-/**
- * xmlAutomataNewState:
- * @am: an automata
- *
- * Create a new disconnected state in the automata
- *
- * Returns the new state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewState(xmlAutomataPtr am) {
-    xmlAutomataStatePtr to;
-
-    if (am == NULL)
-	return(NULL);
-    to = xmlRegNewState(am);
-    xmlRegStatePush(am, to);
-    return(to);
-}
-
-/**
- * xmlAutomataNewEpsilon:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the
- * target state
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewEpsilon(xmlAutomataPtr am, xmlAutomataStatePtr from,
-		      xmlAutomataStatePtr to) {
-    if ((am == NULL) || (from == NULL))
-	return(NULL);
-    xmlFAGenerateEpsilonTransition(am, from, to);
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewAllTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @lax: allow to transition if not all all transitions have been activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a an ALL transition from the @from state to the
- * target state. That transition is an epsilon transition allowed only when
- * all transitions from the @from node have been activated.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewAllTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-		       xmlAutomataStatePtr to, int lax) {
-    if ((am == NULL) || (from == NULL))
-	return(NULL);
-    xmlFAGenerateAllTransition(am, from, to, lax);
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewCounter:
- * @am: an automata
- * @min:  the minimal value on the counter
- * @max:  the maximal value on the counter
- *
- * Create a new counter
- *
- * Returns the counter number or -1 in case of error
- */
-int
-xmlAutomataNewCounter(xmlAutomataPtr am, int min, int max) {
-    int ret;
-
-    if (am == NULL)
-	return(-1);
-
-    ret = xmlRegGetCounter(am);
-    if (ret < 0)
-	return(-1);
-    am->counters[ret].min = min;
-    am->counters[ret].max = max;
-    return(ret);
-}
-
-/**
- * xmlAutomataNewCountedTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @counter: the counter associated to that transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the target state
- * which will increment the counter provided
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountedTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-		xmlAutomataStatePtr to, int counter) {
-    if ((am == NULL) || (from == NULL) || (counter < 0))
-	return(NULL);
-    xmlFAGenerateCountedEpsilonTransition(am, from, to, counter);
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataNewCounterTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @counter: the counter associated to that transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the target state
- * which will be allowed only if the counter is within the right range.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCounterTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
-		xmlAutomataStatePtr to, int counter) {
-    if ((am == NULL) || (from == NULL) || (counter < 0))
-	return(NULL);
-    xmlFAGenerateCountedTransition(am, from, to, counter);
-    if (to == NULL)
-	return(am->state);
-    return(to);
-}
-
-/**
- * xmlAutomataCompile:
- * @am: an automata
- *
- * Compile the automata into a Reg Exp ready for being executed.
- * The automata should be free after this point.
- *
- * Returns the compiled regexp or NULL in case of error
- */
-xmlRegexpPtr
-xmlAutomataCompile(xmlAutomataPtr am) {
-    xmlRegexpPtr ret;
-
-    if ((am == NULL) || (am->error != 0)) return(NULL);
-    xmlFAEliminateEpsilonTransitions(am);
-    /* xmlFAComputesDeterminism(am); */
-    ret = xmlRegEpxFromParse(am);
-
-    return(ret);
-}
-
-/**
- * xmlAutomataIsDeterminist:
- * @am: an automata
- *
- * Checks if an automata is determinist.
- *
- * Returns 1 if true, 0 if not, and -1 in case of error
- */
-int
-xmlAutomataIsDeterminist(xmlAutomataPtr am) {
-    int ret;
-
-    if (am == NULL)
-	return(-1);
-
-    ret = xmlFAComputesDeterminism(am);
-    return(ret);
-}
-#endif /* LIBXML_AUTOMATA_ENABLED */
-
-#ifdef LIBXML_EXPR_ENABLED
-/************************************************************************
- *									*
- *		Formal Expression handling code				*
- *									*
- ************************************************************************/
-/************************************************************************
- *									*
- *		Expression handling context				*
- *									*
- ************************************************************************/
-
-struct _xmlExpCtxt {
-    xmlDictPtr dict;
-    xmlExpNodePtr *table;
-    int size;
-    int nbElems;
-    int nb_nodes;
-    int maxNodes;
-    const char *expr;
-    const char *cur;
-    int nb_cons;
-    int tabSize;
-};
-
-/**
- * xmlExpNewCtxt:
- * @maxNodes:  the maximum number of nodes
- * @dict:  optional dictionary to use internally
- *
- * Creates a new context for manipulating expressions
- *
- * Returns the context or NULL in case of error
- */
-xmlExpCtxtPtr
-xmlExpNewCtxt(int maxNodes, xmlDictPtr dict) {
-    xmlExpCtxtPtr ret;
-    int size = 256;
-
-    if (maxNodes <= 4096)
-        maxNodes = 4096;
-
-    ret = (xmlExpCtxtPtr) xmlMalloc(sizeof(xmlExpCtxt));
-    if (ret == NULL)
-        return(NULL);
-    memset(ret, 0, sizeof(xmlExpCtxt));
-    ret->size = size;
-    ret->nbElems = 0;
-    ret->maxNodes = maxNodes;
-    ret->table = xmlMalloc(size * sizeof(xmlExpNodePtr));
-    if (ret->table == NULL) {
-        xmlFree(ret);
-	return(NULL);
-    }
-    memset(ret->table, 0, size * sizeof(xmlExpNodePtr));
-    if (dict == NULL) {
-        ret->dict = xmlDictCreate();
-	if (ret->dict == NULL) {
-	    xmlFree(ret->table);
-	    xmlFree(ret);
-	    return(NULL);
-	}
-    } else {
-        ret->dict = dict;
-	xmlDictReference(ret->dict);
-    }
-    return(ret);
-}
-
-/**
- * xmlExpFreeCtxt:
- * @ctxt:  an expression context
- *
- * Free an expression context
- */
-void
-xmlExpFreeCtxt(xmlExpCtxtPtr ctxt) {
-    if (ctxt == NULL)
-        return;
-    xmlDictFree(ctxt->dict);
-    if (ctxt->table != NULL)
-	xmlFree(ctxt->table);
-    xmlFree(ctxt);
-}
-
-/************************************************************************
- *									*
- *		Structure associated to an expression node		*
- *									*
- ************************************************************************/
-#define MAX_NODES 10000
-
-/* #define DEBUG_DERIV */
-
-/*
- * TODO:
- * - Wildcards
- * - public API for creation
- *
- * Started
- * - regression testing
- *
- * Done
- * - split into module and test tool
- * - memleaks
- */
-
-typedef enum {
-    XML_EXP_NILABLE = (1 << 0)
-} xmlExpNodeInfo;
-
-#define IS_NILLABLE(node) ((node)->info & XML_EXP_NILABLE)
-
-struct _xmlExpNode {
-    unsigned char type;/* xmlExpNodeType */
-    unsigned char info;/* OR of xmlExpNodeInfo */
-    unsigned short key;	/* the hash key */
-    unsigned int ref;	/* The number of references */
-    int c_max;		/* the maximum length it can consume */
-    xmlExpNodePtr exp_left;
-    xmlExpNodePtr next;/* the next node in the hash table or free list */
-    union {
-	struct {
-	    int f_min;
-	    int f_max;
-	} count;
-	struct {
-	    xmlExpNodePtr f_right;
-	} children;
-        const xmlChar *f_str;
-    } field;
-};
-
-#define exp_min field.count.f_min
-#define exp_max field.count.f_max
-/* #define exp_left field.children.f_left */
-#define exp_right field.children.f_right
-#define exp_str field.f_str
-
-static xmlExpNodePtr xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type);
-static xmlExpNode forbiddenExpNode = {
-    XML_EXP_FORBID, 0, 0, 0, 0, NULL, NULL, {{ 0, 0}}
-};
-xmlExpNodePtr forbiddenExp = &forbiddenExpNode;
-static xmlExpNode emptyExpNode = {
-    XML_EXP_EMPTY, 1, 0, 0, 0, NULL, NULL, {{ 0, 0}}
-};
-xmlExpNodePtr emptyExp = &emptyExpNode;
-
-/************************************************************************
- *									*
- *  The custom hash table for unicity and canonicalization		*
- *  of sub-expressions pointers						*
- *									*
- ************************************************************************/
-/*
- * xmlExpHashNameComputeKey:
- * Calculate the hash key for a token
- */
-static unsigned short
-xmlExpHashNameComputeKey(const xmlChar *name) {
-    unsigned short value = 0L;
-    char ch;
-
-    if (name != NULL) {
-	value += 30 * (*name);
-	while ((ch = *name++) != 0) {
-	    value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
-	}
-    }
-    return (value);
-}
-
-/*
- * xmlExpHashComputeKey:
- * Calculate the hash key for a compound expression
- */
-static unsigned short
-xmlExpHashComputeKey(xmlExpNodeType type, xmlExpNodePtr left,
-                     xmlExpNodePtr right) {
-    unsigned long value;
-    unsigned short ret;
-
-    switch (type) {
-        case XML_EXP_SEQ:
-	    value = left->key;
-	    value += right->key;
-	    value *= 3;
-	    ret = (unsigned short) value;
-	    break;
-        case XML_EXP_OR:
-	    value = left->key;
-	    value += right->key;
-	    value *= 7;
-	    ret = (unsigned short) value;
-	    break;
-        case XML_EXP_COUNT:
-	    value = left->key;
-	    value += right->key;
-	    ret = (unsigned short) value;
-	    break;
-	default:
-	    ret = 0;
-    }
-    return(ret);
-}
-
-
-static xmlExpNodePtr
-xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type) {
-    xmlExpNodePtr ret;
-
-    if (ctxt->nb_nodes >= MAX_NODES)
-        return(NULL);
-    ret = (xmlExpNodePtr) xmlMalloc(sizeof(xmlExpNode));
-    if (ret == NULL)
-        return(NULL);
-    memset(ret, 0, sizeof(xmlExpNode));
-    ret->type = type;
-    ret->next = NULL;
-    ctxt->nb_nodes++;
-    ctxt->nb_cons++;
-    return(ret);
-}
-
-/**
- * xmlExpHashGetEntry:
- * @table: the hash table
- *
- * Get the unique entry from the hash table. The entry is created if
- * needed. @left and @right are consumed, i.e. their ref count will
- * be decremented by the operation.
- *
- * Returns the pointer or NULL in case of error
- */
-static xmlExpNodePtr
-xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type,
-                   xmlExpNodePtr left, xmlExpNodePtr right,
-		   const xmlChar *name, int min, int max) {
-    unsigned short kbase, key;
-    xmlExpNodePtr entry;
-    xmlExpNodePtr insert;
-
-    if (ctxt == NULL)
-	return(NULL);
-
-    /*
-     * Check for duplicate and insertion location.
-     */
-    if (type == XML_EXP_ATOM) {
-	kbase = xmlExpHashNameComputeKey(name);
-    } else if (type == XML_EXP_COUNT) {
-        /* COUNT reduction rule 1 */
-	/* a{1} -> a */
-	if (min == max) {
-	    if (min == 1) {
-		return(left);
-	    }
-	    if (min == 0) {
-		xmlExpFree(ctxt, left);
-	        return(emptyExp);
-	    }
-	}
-	if (min < 0) {
-	    xmlExpFree(ctxt, left);
-	    return(forbiddenExp);
-	}
-        if (max == -1)
-	    kbase = min + 79;
-	else
-	    kbase = max - min;
-	kbase += left->key;
-    } else if (type == XML_EXP_OR) {
-        /* Forbid reduction rules */
-        if (left->type == XML_EXP_FORBID) {
-	    xmlExpFree(ctxt, left);
-	    return(right);
-	}
-        if (right->type == XML_EXP_FORBID) {
-	    xmlExpFree(ctxt, right);
-	    return(left);
-	}
-
-        /* OR reduction rule 1 */
-	/* a | a reduced to a */
-        if (left == right) {
-	    left->ref--;
-	    return(left);
-	}
-        /* OR canonicalization rule 1 */
-	/* linearize (a | b) | c into a | (b | c) */
-        if ((left->type == XML_EXP_OR) && (right->type != XML_EXP_OR)) {
-	    xmlExpNodePtr tmp = left;
-            left = right;
-	    right = tmp;
-	}
-        /* OR reduction rule 2 */
-	/* a | (a | b) and b | (a | b) are reduced to a | b */
-        if (right->type == XML_EXP_OR) {
-	    if ((left == right->exp_left) ||
-	        (left == right->exp_right)) {
-		xmlExpFree(ctxt, left);
-		return(right);
-	    }
-	}
-        /* OR canonicalization rule 2 */
-	/* linearize (a | b) | c into a | (b | c) */
-        if (left->type == XML_EXP_OR) {
-	    xmlExpNodePtr tmp;
-
-	    /* OR canonicalization rule 2 */
-	    if ((left->exp_right->type != XML_EXP_OR) &&
-	        (left->exp_right->key < left->exp_left->key)) {
-	        tmp = left->exp_right;
-		left->exp_right = left->exp_left;
-		left->exp_left = tmp;
-	    }
-	    left->exp_right->ref++;
-	    tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_right, right,
-	                             NULL, 0, 0);
-	    left->exp_left->ref++;
-	    tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_left, tmp,
-	                             NULL, 0, 0);
-
-	    xmlExpFree(ctxt, left);
-	    return(tmp);
-	}
-	if (right->type == XML_EXP_OR) {
-	    /* Ordering in the tree */
-	    /* C | (A | B) -> A | (B | C) */
-	    if (left->key > right->exp_right->key) {
-		xmlExpNodePtr tmp;
-		right->exp_right->ref++;
-		tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_right,
-		                         left, NULL, 0, 0);
-		right->exp_left->ref++;
-		tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
-		                         tmp, NULL, 0, 0);
-		xmlExpFree(ctxt, right);
-		return(tmp);
-	    }
-	    /* Ordering in the tree */
-	    /* B | (A | C) -> A | (B | C) */
-	    if (left->key > right->exp_left->key) {
-		xmlExpNodePtr tmp;
-		right->exp_right->ref++;
-		tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left,
-		                         right->exp_right, NULL, 0, 0);
-		right->exp_left->ref++;
-		tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
-		                         tmp, NULL, 0, 0);
-		xmlExpFree(ctxt, right);
-		return(tmp);
-	    }
-	}
-	/* we know both types are != XML_EXP_OR here */
-        else if (left->key > right->key) {
-	    xmlExpNodePtr tmp = left;
-            left = right;
-	    right = tmp;
-	}
-	kbase = xmlExpHashComputeKey(type, left, right);
-    } else if (type == XML_EXP_SEQ) {
-        /* Forbid reduction rules */
-        if (left->type == XML_EXP_FORBID) {
-	    xmlExpFree(ctxt, right);
-	    return(left);
-	}
-        if (right->type == XML_EXP_FORBID) {
-	    xmlExpFree(ctxt, left);
-	    return(right);
-	}
-        /* Empty reduction rules */
-        if (right->type == XML_EXP_EMPTY) {
-	    return(left);
-	}
-        if (left->type == XML_EXP_EMPTY) {
-	    return(right);
-	}
-	kbase = xmlExpHashComputeKey(type, left, right);
-    } else
-        return(NULL);
-
-    key = kbase % ctxt->size;
-    if (ctxt->table[key] != NULL) {
-	for (insert = ctxt->table[key]; insert != NULL;
-	     insert = insert->next) {
-	    if ((insert->key == kbase) &&
-	        (insert->type == type)) {
-		if (type == XML_EXP_ATOM) {
-		    if (name == insert->exp_str) {
-			insert->ref++;
-			return(insert);
-		    }
-		} else if (type == XML_EXP_COUNT) {
-		    if ((insert->exp_min == min) && (insert->exp_max == max) &&
-		        (insert->exp_left == left)) {
-			insert->ref++;
-			left->ref--;
-			return(insert);
-		    }
-		} else if ((insert->exp_left == left) &&
-			   (insert->exp_right == right)) {
-		    insert->ref++;
-		    left->ref--;
-		    right->ref--;
-		    return(insert);
-		}
-	    }
-	}
-    }
-
-    entry = xmlExpNewNode(ctxt, type);
-    if (entry == NULL)
-        return(NULL);
-    entry->key = kbase;
-    if (type == XML_EXP_ATOM) {
-	entry->exp_str = name;
-	entry->c_max = 1;
-    } else if (type == XML_EXP_COUNT) {
-        entry->exp_min = min;
-        entry->exp_max = max;
-	entry->exp_left = left;
-	if ((min == 0) || (IS_NILLABLE(left)))
-	    entry->info |= XML_EXP_NILABLE;
-	if (max < 0)
-	    entry->c_max = -1;
-	else
-	    entry->c_max = max * entry->exp_left->c_max;
-    } else {
-	entry->exp_left = left;
-	entry->exp_right = right;
-	if (type == XML_EXP_OR) {
-	    if ((IS_NILLABLE(left)) || (IS_NILLABLE(right)))
-		entry->info |= XML_EXP_NILABLE;
-	    if ((entry->exp_left->c_max == -1) ||
-	        (entry->exp_right->c_max == -1))
-		entry->c_max = -1;
-	    else if (entry->exp_left->c_max > entry->exp_right->c_max)
-	        entry->c_max = entry->exp_left->c_max;
-	    else
-	        entry->c_max = entry->exp_right->c_max;
-	} else {
-	    if ((IS_NILLABLE(left)) && (IS_NILLABLE(right)))
-		entry->info |= XML_EXP_NILABLE;
-	    if ((entry->exp_left->c_max == -1) ||
-	        (entry->exp_right->c_max == -1))
-		entry->c_max = -1;
-	    else
-	        entry->c_max = entry->exp_left->c_max + entry->exp_right->c_max;
-	}
-    }
-    entry->ref = 1;
-    if (ctxt->table[key] != NULL)
-        entry->next = ctxt->table[key];
-
-    ctxt->table[key] = entry;
-    ctxt->nbElems++;
-
-    return(entry);
-}
-
-/**
- * xmlExpFree:
- * @ctxt: the expression context
- * @exp: the expression
- *
- * Dereference the expression
- */
-void
-xmlExpFree(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp) {
-    if ((exp == NULL) || (exp == forbiddenExp) || (exp == emptyExp))
-        return;
-    exp->ref--;
-    if (exp->ref == 0) {
-        unsigned short key;
-
-        /* Unlink it first from the hash table */
-	key = exp->key % ctxt->size;
-	if (ctxt->table[key] == exp) {
-	    ctxt->table[key] = exp->next;
-	} else {
-	    xmlExpNodePtr tmp;
-
-	    tmp = ctxt->table[key];
-	    while (tmp != NULL) {
-	        if (tmp->next == exp) {
-		    tmp->next = exp->next;
-		    break;
-		}
-	        tmp = tmp->next;
-	    }
-	}
-
-        if ((exp->type == XML_EXP_SEQ) || (exp->type == XML_EXP_OR)) {
-	    xmlExpFree(ctxt, exp->exp_left);
-	    xmlExpFree(ctxt, exp->exp_right);
-	} else if (exp->type == XML_EXP_COUNT) {
-	    xmlExpFree(ctxt, exp->exp_left);
-	}
-        xmlFree(exp);
-	ctxt->nb_nodes--;
-    }
-}
-
-/**
- * xmlExpRef:
- * @exp: the expression
- *
- * Increase the reference count of the expression
- */
-void
-xmlExpRef(xmlExpNodePtr exp) {
-    if (exp != NULL)
-        exp->ref++;
-}
-
-/**
- * xmlExpNewAtom:
- * @ctxt: the expression context
- * @name: the atom name
- * @len: the atom name length in byte (or -1);
- *
- * Get the atom associated to this name from that context
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewAtom(xmlExpCtxtPtr ctxt, const xmlChar *name, int len) {
-    if ((ctxt == NULL) || (name == NULL))
-        return(NULL);
-    name = xmlDictLookup(ctxt->dict, name, len);
-    if (name == NULL)
-        return(NULL);
-    return(xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, name, 0, 0));
-}
-
-/**
- * xmlExpNewOr:
- * @ctxt: the expression context
- * @left: left expression
- * @right: right expression
- *
- * Get the atom associated to the choice @left | @right
- * Note that @left and @right are consumed in the operation, to keep
- * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewOr(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
-    if (ctxt == NULL)
-        return(NULL);
-    if ((left == NULL) || (right == NULL)) {
-        xmlExpFree(ctxt, left);
-        xmlExpFree(ctxt, right);
-        return(NULL);
-    }
-    return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, left, right, NULL, 0, 0));
-}
-
-/**
- * xmlExpNewSeq:
- * @ctxt: the expression context
- * @left: left expression
- * @right: right expression
- *
- * Get the atom associated to the sequence @left , @right
- * Note that @left and @right are consumed in the operation, to keep
- * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewSeq(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
-    if (ctxt == NULL)
-        return(NULL);
-    if ((left == NULL) || (right == NULL)) {
-        xmlExpFree(ctxt, left);
-        xmlExpFree(ctxt, right);
-        return(NULL);
-    }
-    return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, left, right, NULL, 0, 0));
-}
-
-/**
- * xmlExpNewRange:
- * @ctxt: the expression context
- * @subset: the expression to be repeated
- * @min: the lower bound for the repetition
- * @max: the upper bound for the repetition, -1 means infinite
- *
- * Get the atom associated to the range (@subset){@min, @max}
- * Note that @subset is consumed in the operation, to keep
- * an handle on it use xmlExpRef() and use xmlExpFree() to release it,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) {
-    if (ctxt == NULL)
-        return(NULL);
-    if ((subset == NULL) || (min < 0) || (max < -1) ||
-        ((max >= 0) && (min > max))) {
-	xmlExpFree(ctxt, subset);
-        return(NULL);
-    }
-    return(xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, subset,
-                              NULL, NULL, min, max));
-}
-
-/************************************************************************
- *									*
- *		Public API for operations on expressions		*
- *									*
- ************************************************************************/
-
-static int
-xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-                     const xmlChar**list, int len, int nb) {
-    int tmp, tmp2;
-tail:
-    switch (exp->type) {
-        case XML_EXP_EMPTY:
-	    return(0);
-        case XML_EXP_ATOM:
-	    for (tmp = 0;tmp < nb;tmp++)
-	        if (list[tmp] == exp->exp_str)
-		    return(0);
-            if (nb >= len)
-	        return(-2);
-	    list[nb] = exp->exp_str;
-	    return(1);
-        case XML_EXP_COUNT:
-	    exp = exp->exp_left;
-	    goto tail;
-        case XML_EXP_SEQ:
-        case XML_EXP_OR:
-	    tmp = xmlExpGetLanguageInt(ctxt, exp->exp_left, list, len, nb);
-	    if (tmp < 0)
-	        return(tmp);
-	    tmp2 = xmlExpGetLanguageInt(ctxt, exp->exp_right, list, len,
-	                                nb + tmp);
-	    if (tmp2 < 0)
-	        return(tmp2);
-            return(tmp + tmp2);
-    }
-    return(-1);
-}
-
-/**
- * xmlExpGetLanguage:
- * @ctxt: the expression context
- * @exp: the expression
- * @langList: where to store the tokens
- * @len: the allocated length of @list
- *
- * Find all the strings used in @exp and store them in @list
- *
- * Returns the number of unique strings found, -1 in case of errors and
- *         -2 if there is more than @len strings
- */
-int
-xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-                  const xmlChar**langList, int len) {
-    if ((ctxt == NULL) || (exp == NULL) || (langList == NULL) || (len <= 0))
-        return(-1);
-    return(xmlExpGetLanguageInt(ctxt, exp, langList, len, 0));
-}
-
-static int
-xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-                  const xmlChar**list, int len, int nb) {
-    int tmp, tmp2;
-tail:
-    switch (exp->type) {
-        case XML_EXP_FORBID:
-	    return(0);
-        case XML_EXP_EMPTY:
-	    return(0);
-        case XML_EXP_ATOM:
-	    for (tmp = 0;tmp < nb;tmp++)
-	        if (list[tmp] == exp->exp_str)
-		    return(0);
-            if (nb >= len)
-	        return(-2);
-	    list[nb] = exp->exp_str;
-	    return(1);
-        case XML_EXP_COUNT:
-	    exp = exp->exp_left;
-	    goto tail;
-        case XML_EXP_SEQ:
-	    tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
-	    if (tmp < 0)
-	        return(tmp);
-	    if (IS_NILLABLE(exp->exp_left)) {
-		tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
-					    nb + tmp);
-		if (tmp2 < 0)
-		    return(tmp2);
-		tmp += tmp2;
-	    }
-            return(tmp);
-        case XML_EXP_OR:
-	    tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
-	    if (tmp < 0)
-	        return(tmp);
-	    tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
-	                                nb + tmp);
-	    if (tmp2 < 0)
-	        return(tmp2);
-            return(tmp + tmp2);
-    }
-    return(-1);
-}
-
-/**
- * xmlExpGetStart:
- * @ctxt: the expression context
- * @exp: the expression
- * @tokList: where to store the tokens
- * @len: the allocated length of @list
- *
- * Find all the strings that appears at the start of the languages
- * accepted by @exp and store them in @list. E.g. for (a, b) | c
- * it will return the list [a, c]
- *
- * Returns the number of unique strings found, -1 in case of errors and
- *         -2 if there is more than @len strings
- */
-int
-xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-               const xmlChar**tokList, int len) {
-    if ((ctxt == NULL) || (exp == NULL) || (tokList == NULL) || (len <= 0))
-        return(-1);
-    return(xmlExpGetStartInt(ctxt, exp, tokList, len, 0));
-}
-
-/**
- * xmlExpIsNillable:
- * @exp: the expression
- *
- * Finds if the expression is nillable, i.e. if it accepts the empty sequqnce
- *
- * Returns 1 if nillable, 0 if not and -1 in case of error
- */
-int
-xmlExpIsNillable(xmlExpNodePtr exp) {
-    if (exp == NULL)
-        return(-1);
-    return(IS_NILLABLE(exp) != 0);
-}
-
-static xmlExpNodePtr
-xmlExpStringDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar *str)
-{
-    xmlExpNodePtr ret;
-
-    switch (exp->type) {
-	case XML_EXP_EMPTY:
-	    return(forbiddenExp);
-	case XML_EXP_FORBID:
-	    return(forbiddenExp);
-	case XML_EXP_ATOM:
-	    if (exp->exp_str == str) {
-#ifdef DEBUG_DERIV
-		printf("deriv atom: equal => Empty\n");
-#endif
-	        ret = emptyExp;
-	    } else {
-#ifdef DEBUG_DERIV
-		printf("deriv atom: mismatch => forbid\n");
-#endif
-	        /* TODO wildcards here */
-		ret = forbiddenExp;
-	    }
-	    return(ret);
-	case XML_EXP_OR: {
-	    xmlExpNodePtr tmp;
-
-#ifdef DEBUG_DERIV
-	    printf("deriv or: => or(derivs)\n");
-#endif
-	    tmp = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
-	    if (tmp == NULL) {
-		return(NULL);
-	    }
-	    ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
-	    if (ret == NULL) {
-	        xmlExpFree(ctxt, tmp);
-		return(NULL);
-	    }
-            ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret,
-			     NULL, 0, 0);
-	    return(ret);
-	}
-	case XML_EXP_SEQ:
-#ifdef DEBUG_DERIV
-	    printf("deriv seq: starting with left\n");
-#endif
-	    ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
-	    if (ret == NULL) {
-	        return(NULL);
-	    } else if (ret == forbiddenExp) {
-	        if (IS_NILLABLE(exp->exp_left)) {
-#ifdef DEBUG_DERIV
-		    printf("deriv seq: left failed but nillable\n");
-#endif
-		    ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
-		}
-	    } else {
-#ifdef DEBUG_DERIV
-		printf("deriv seq: left match => sequence\n");
-#endif
-	        exp->exp_right->ref++;
-	        ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, exp->exp_right,
-		                         NULL, 0, 0);
-	    }
-	    return(ret);
-	case XML_EXP_COUNT: {
-	    int min, max;
-	    xmlExpNodePtr tmp;
-
-	    if (exp->exp_max == 0)
-		return(forbiddenExp);
-	    ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
-	    if (ret == NULL)
-	        return(NULL);
-	    if (ret == forbiddenExp) {
-#ifdef DEBUG_DERIV
-		printf("deriv count: pattern mismatch => forbid\n");
-#endif
-	        return(ret);
-	    }
-	    if (exp->exp_max == 1)
-		return(ret);
-	    if (exp->exp_max < 0) /* unbounded */
-		max = -1;
-	    else
-		max = exp->exp_max - 1;
-	    if (exp->exp_min > 0)
-		min = exp->exp_min - 1;
-	    else
-		min = 0;
-	    exp->exp_left->ref++;
-	    tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left, NULL,
-				     NULL, min, max);
-	    if (ret == emptyExp) {
-#ifdef DEBUG_DERIV
-		printf("deriv count: match to empty => new count\n");
-#endif
-	        return(tmp);
-	    }
-#ifdef DEBUG_DERIV
-	    printf("deriv count: match => sequence with new count\n");
-#endif
-	    return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, tmp,
-	                              NULL, 0, 0));
-	}
-    }
-    return(NULL);
-}
-
-/**
- * xmlExpStringDerive:
- * @ctxt: the expression context
- * @exp: the expression
- * @str: the string
- * @len: the string len in bytes if available
- *
- * Do one step of Brzozowski derivation of the expression @exp with
- * respect to the input string
- *
- * Returns the resulting expression or NULL in case of internal error
- */
-xmlExpNodePtr
-xmlExpStringDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-                   const xmlChar *str, int len) {
-    const xmlChar *input;
-
-    if ((exp == NULL) || (ctxt == NULL) || (str == NULL)) {
-        return(NULL);
-    }
-    /*
-     * check the string is in the dictionary, if yes use an interned
-     * copy, otherwise we know it's not an acceptable input
-     */
-    input = xmlDictExists(ctxt->dict, str, len);
-    if (input == NULL) {
-        return(forbiddenExp);
-    }
-    return(xmlExpStringDeriveInt(ctxt, exp, input));
-}
-
-static int
-xmlExpCheckCard(xmlExpNodePtr exp, xmlExpNodePtr sub) {
-    int ret = 1;
-
-    if (sub->c_max == -1) {
-        if (exp->c_max != -1)
-	    ret = 0;
-    } else if ((exp->c_max >= 0) && (exp->c_max < sub->c_max)) {
-        ret = 0;
-    }
-#if 0
-    if ((IS_NILLABLE(sub)) && (!IS_NILLABLE(exp)))
-        ret = 0;
-#endif
-    return(ret);
-}
-
-static xmlExpNodePtr xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
-                                        xmlExpNodePtr sub);
-/**
- * xmlExpDivide:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- * @mult: the multiple expression
- * @remain: the remain from the derivation of the multiple
- *
- * Check if exp is a multiple of sub, i.e. if there is a finite number n
- * so that sub{n} subsume exp
- *
- * Returns the multiple value if successful, 0 if it is not a multiple
- *         and -1 in case of internel error.
- */
-
-static int
-xmlExpDivide(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub,
-             xmlExpNodePtr *mult, xmlExpNodePtr *remain) {
-    int i;
-    xmlExpNodePtr tmp, tmp2;
-
-    if (mult != NULL) *mult = NULL;
-    if (remain != NULL) *remain = NULL;
-    if (exp->c_max == -1) return(0);
-    if (IS_NILLABLE(exp) && (!IS_NILLABLE(sub))) return(0);
-
-    for (i = 1;i <= exp->c_max;i++) {
-        sub->ref++;
-        tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
-				 sub, NULL, NULL, i, i);
-	if (tmp == NULL) {
-	    return(-1);
-	}
-	if (!xmlExpCheckCard(tmp, exp)) {
-	    xmlExpFree(ctxt, tmp);
-	    continue;
-	}
-	tmp2 = xmlExpExpDeriveInt(ctxt, tmp, exp);
-	if (tmp2 == NULL) {
-	    xmlExpFree(ctxt, tmp);
-	    return(-1);
-	}
-	if ((tmp2 != forbiddenExp) && (IS_NILLABLE(tmp2))) {
-	    if (remain != NULL)
-	        *remain = tmp2;
-	    else
-	        xmlExpFree(ctxt, tmp2);
-	    if (mult != NULL)
-	        *mult = tmp;
-	    else
-	        xmlExpFree(ctxt, tmp);
-#ifdef DEBUG_DERIV
-	    printf("Divide succeeded %d\n", i);
-#endif
-	    return(i);
-	}
-	xmlExpFree(ctxt, tmp);
-	xmlExpFree(ctxt, tmp2);
-    }
-#ifdef DEBUG_DERIV
-    printf("Divide failed\n");
-#endif
-    return(0);
-}
-
-/**
- * xmlExpExpDeriveInt:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Try to do a step of Brzozowski derivation but at a higher level
- * the input being a subexpression.
- *
- * Returns the resulting expression or NULL in case of internal error
- */
-static xmlExpNodePtr
-xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
-    xmlExpNodePtr ret, tmp, tmp2, tmp3;
-    const xmlChar **tab;
-    int len, i;
-
-    /*
-     * In case of equality and if the expression can only consume a finite
-     * amount, then the derivation is empty
-     */
-    if ((exp == sub) && (exp->c_max >= 0)) {
-#ifdef DEBUG_DERIV
-        printf("Equal(exp, sub) and finite -> Empty\n");
-#endif
-        return(emptyExp);
-    }
-    /*
-     * decompose sub sequence first
-     */
-    if (sub->type == XML_EXP_EMPTY) {
-#ifdef DEBUG_DERIV
-        printf("Empty(sub) -> Empty\n");
-#endif
-	exp->ref++;
-        return(exp);
-    }
-    if (sub->type == XML_EXP_SEQ) {
-#ifdef DEBUG_DERIV
-        printf("Seq(sub) -> decompose\n");
-#endif
-        tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
-	if (tmp == NULL)
-	    return(NULL);
-	if (tmp == forbiddenExp)
-	    return(tmp);
-	ret = xmlExpExpDeriveInt(ctxt, tmp, sub->exp_right);
-	xmlExpFree(ctxt, tmp);
-	return(ret);
-    }
-    if (sub->type == XML_EXP_OR) {
-#ifdef DEBUG_DERIV
-        printf("Or(sub) -> decompose\n");
-#endif
-        tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
-	if (tmp == forbiddenExp)
-	    return(tmp);
-	if (tmp == NULL)
-	    return(NULL);
-	ret = xmlExpExpDeriveInt(ctxt, exp, sub->exp_right);
-	if ((ret == NULL) || (ret == forbiddenExp)) {
-	    xmlExpFree(ctxt, tmp);
-	    return(ret);
-	}
-	return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret, NULL, 0, 0));
-    }
-    if (!xmlExpCheckCard(exp, sub)) {
-#ifdef DEBUG_DERIV
-        printf("CheckCard(exp, sub) failed -> Forbid\n");
-#endif
-        return(forbiddenExp);
-    }
-    switch (exp->type) {
-        case XML_EXP_EMPTY:
-	    if (sub == emptyExp)
-	        return(emptyExp);
-#ifdef DEBUG_DERIV
-	    printf("Empty(exp) -> Forbid\n");
-#endif
-	    return(forbiddenExp);
-        case XML_EXP_FORBID:
-#ifdef DEBUG_DERIV
-	    printf("Forbid(exp) -> Forbid\n");
-#endif
-	    return(forbiddenExp);
-        case XML_EXP_ATOM:
-	    if (sub->type == XML_EXP_ATOM) {
-	        /* TODO: handle wildcards */
-	        if (exp->exp_str == sub->exp_str) {
-#ifdef DEBUG_DERIV
-		    printf("Atom match -> Empty\n");
-#endif
-		    return(emptyExp);
-                }
-#ifdef DEBUG_DERIV
-		printf("Atom mismatch -> Forbid\n");
-#endif
-	        return(forbiddenExp);
-	    }
-	    if ((sub->type == XML_EXP_COUNT) &&
-	        (sub->exp_max == 1) &&
-	        (sub->exp_left->type == XML_EXP_ATOM)) {
-	        /* TODO: handle wildcards */
-	        if (exp->exp_str == sub->exp_left->exp_str) {
-#ifdef DEBUG_DERIV
-		    printf("Atom match -> Empty\n");
-#endif
-		    return(emptyExp);
-		}
-#ifdef DEBUG_DERIV
-		printf("Atom mismatch -> Forbid\n");
-#endif
-	        return(forbiddenExp);
-	    }
-#ifdef DEBUG_DERIV
-	    printf("Compex exp vs Atom -> Forbid\n");
-#endif
-	    return(forbiddenExp);
-        case XML_EXP_SEQ:
-	    /* try to get the sequence consumed only if possible */
-	    if (xmlExpCheckCard(exp->exp_left, sub)) {
-		/* See if the sequence can be consumed directly */
-#ifdef DEBUG_DERIV
-		printf("Seq trying left only\n");
-#endif
-		ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
-		if ((ret != forbiddenExp) && (ret != NULL)) {
-#ifdef DEBUG_DERIV
-		    printf("Seq trying left only worked\n");
-#endif
-		    /*
-		     * TODO: assumption here that we are determinist
-		     *       i.e. we won't get to a nillable exp left
-		     *       subset which could be matched by the right
-		     *       part too.
-		     * e.g.: (a | b)+,(a | c) and 'a+,a'
-		     */
-		    exp->exp_right->ref++;
-		    return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
-					      exp->exp_right, NULL, 0, 0));
-		}
-#ifdef DEBUG_DERIV
-	    } else {
-		printf("Seq: left too short\n");
-#endif
-	    }
-	    /* Try instead to decompose */
-	    if (sub->type == XML_EXP_COUNT) {
-		int min, max;
-
-#ifdef DEBUG_DERIV
-		printf("Seq: sub is a count\n");
-#endif
-	        ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
-		if (ret == NULL)
-		    return(NULL);
-		if (ret != forbiddenExp) {
-#ifdef DEBUG_DERIV
-		    printf("Seq , Count match on left\n");
-#endif
-		    if (sub->exp_max < 0)
-		        max = -1;
-	            else
-		        max = sub->exp_max -1;
-		    if (sub->exp_min > 0)
-		        min = sub->exp_min -1;
-		    else
-		        min = 0;
-		    exp->exp_right->ref++;
-		    tmp = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
-		                             exp->exp_right, NULL, 0, 0);
-		    if (tmp == NULL)
-		        return(NULL);
-
-		    sub->exp_left->ref++;
-		    tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
-				      sub->exp_left, NULL, NULL, min, max);
-		    if (tmp2 == NULL) {
-		        xmlExpFree(ctxt, tmp);
-			return(NULL);
-		    }
-		    ret = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
-		    xmlExpFree(ctxt, tmp);
-		    xmlExpFree(ctxt, tmp2);
-		    return(ret);
-		}
-	    }
-	    /* we made no progress on structured operations */
-	    break;
-        case XML_EXP_OR:
-#ifdef DEBUG_DERIV
-	    printf("Or , trying both side\n");
-#endif
-	    ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
-	    if (ret == NULL)
-	        return(NULL);
-	    tmp = xmlExpExpDeriveInt(ctxt, exp->exp_right, sub);
-	    if (tmp == NULL) {
-		xmlExpFree(ctxt, ret);
-	        return(NULL);
-	    }
-	    return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp, NULL, 0, 0));
-        case XML_EXP_COUNT: {
-	    int min, max;
-
-	    if (sub->type == XML_EXP_COUNT) {
-	        /*
-		 * Try to see if the loop is completely subsumed
-		 */
-	        tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
-		if (tmp == NULL)
-		    return(NULL);
-		if (tmp == forbiddenExp) {
-		    int mult;
-
-#ifdef DEBUG_DERIV
-		    printf("Count, Count inner don't subsume\n");
-#endif
-		    mult = xmlExpDivide(ctxt, sub->exp_left, exp->exp_left,
-		                        NULL, &tmp);
-		    if (mult <= 0) {
-#ifdef DEBUG_DERIV
-			printf("Count, Count not multiple => forbidden\n");
-#endif
-                        return(forbiddenExp);
-		    }
-		    if (sub->exp_max == -1) {
-		        max = -1;
-			if (exp->exp_max == -1) {
-			    if (exp->exp_min <= sub->exp_min * mult)
-			        min = 0;
-			    else
-			        min = exp->exp_min - sub->exp_min * mult;
-			} else {
-#ifdef DEBUG_DERIV
-			    printf("Count, Count finite can't subsume infinite\n");
-#endif
-                            xmlExpFree(ctxt, tmp);
-			    return(forbiddenExp);
-			}
-		    } else {
-			if (exp->exp_max == -1) {
-#ifdef DEBUG_DERIV
-			    printf("Infinite loop consume mult finite loop\n");
-#endif
-			    if (exp->exp_min > sub->exp_min * mult) {
-				max = -1;
-				min = exp->exp_min - sub->exp_min * mult;
-			    } else {
-				max = -1;
-				min = 0;
-			    }
-			} else {
-			    if (exp->exp_max < sub->exp_max * mult) {
-#ifdef DEBUG_DERIV
-				printf("loops max mult mismatch => forbidden\n");
-#endif
-				xmlExpFree(ctxt, tmp);
-				return(forbiddenExp);
-			    }
-			    if (sub->exp_max * mult > exp->exp_min)
-				min = 0;
-			    else
-				min = exp->exp_min - sub->exp_max * mult;
-			    max = exp->exp_max - sub->exp_max * mult;
-			}
-		    }
-		} else if (!IS_NILLABLE(tmp)) {
-		    /*
-		     * TODO: loop here to try to grow if working on finite
-		     *       blocks.
-		     */
-#ifdef DEBUG_DERIV
-		    printf("Count, Count remain not nillable => forbidden\n");
-#endif
-		    xmlExpFree(ctxt, tmp);
-		    return(forbiddenExp);
-		} else if (sub->exp_max == -1) {
-		    if (exp->exp_max == -1) {
-		        if (exp->exp_min <= sub->exp_min) {
-#ifdef DEBUG_DERIV
-			    printf("Infinite loops Okay => COUNT(0,Inf)\n");
-#endif
-                            max = -1;
-			    min = 0;
-			} else {
-#ifdef DEBUG_DERIV
-			    printf("Infinite loops min => Count(X,Inf)\n");
-#endif
-                            max = -1;
-			    min = exp->exp_min - sub->exp_min;
-			}
-		    } else if (exp->exp_min > sub->exp_min) {
-#ifdef DEBUG_DERIV
-			printf("loops min mismatch 1 => forbidden ???\n");
-#endif
-		        xmlExpFree(ctxt, tmp);
-		        return(forbiddenExp);
-		    } else {
-			max = -1;
-			min = 0;
-		    }
-		} else {
-		    if (exp->exp_max == -1) {
-#ifdef DEBUG_DERIV
-			printf("Infinite loop consume finite loop\n");
-#endif
-		        if (exp->exp_min > sub->exp_min) {
-			    max = -1;
-			    min = exp->exp_min - sub->exp_min;
-			} else {
-			    max = -1;
-			    min = 0;
-			}
-		    } else {
-		        if (exp->exp_max < sub->exp_max) {
-#ifdef DEBUG_DERIV
-			    printf("loops max mismatch => forbidden\n");
-#endif
-			    xmlExpFree(ctxt, tmp);
-			    return(forbiddenExp);
-			}
-			if (sub->exp_max > exp->exp_min)
-			    min = 0;
-			else
-			    min = exp->exp_min - sub->exp_max;
-			max = exp->exp_max - sub->exp_max;
-		    }
-		}
-#ifdef DEBUG_DERIV
-		printf("loops match => SEQ(COUNT())\n");
-#endif
-		exp->exp_left->ref++;
-		tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
-		                          NULL, NULL, min, max);
-		if (tmp2 == NULL) {
-		    return(NULL);
-		}
-                ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
-		                         NULL, 0, 0);
-		return(ret);
-	    }
-	    tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
-	    if (tmp == NULL)
-		return(NULL);
-	    if (tmp == forbiddenExp) {
-#ifdef DEBUG_DERIV
-		printf("loop mismatch => forbidden\n");
-#endif
-		return(forbiddenExp);
-	    }
-	    if (exp->exp_min > 0)
-		min = exp->exp_min - 1;
-	    else
-		min = 0;
-	    if (exp->exp_max < 0)
-		max = -1;
-	    else
-		max = exp->exp_max - 1;
-
-#ifdef DEBUG_DERIV
-	    printf("loop match => SEQ(COUNT())\n");
-#endif
-	    exp->exp_left->ref++;
-	    tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
-				      NULL, NULL, min, max);
-	    if (tmp2 == NULL)
-		return(NULL);
-	    ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
-				     NULL, 0, 0);
-	    return(ret);
-	}
-    }
-
-#ifdef DEBUG_DERIV
-    printf("Fallback to derivative\n");
-#endif
-    if (IS_NILLABLE(sub)) {
-        if (!(IS_NILLABLE(exp)))
-	    return(forbiddenExp);
-	else
-	    ret = emptyExp;
-    } else
-	ret = NULL;
-    /*
-     * here the structured derivation made no progress so
-     * we use the default token based derivation to force one more step
-     */
-    if (ctxt->tabSize == 0)
-        ctxt->tabSize = 40;
-
-    tab = (const xmlChar **) xmlMalloc(ctxt->tabSize *
-	                               sizeof(const xmlChar *));
-    if (tab == NULL) {
-	return(NULL);
-    }
-
-    /*
-     * collect all the strings accepted by the subexpression on input
-     */
-    len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
-    while (len < 0) {
-        const xmlChar **temp;
-	temp = (const xmlChar **) xmlRealloc((xmlChar **) tab, ctxt->tabSize * 2 *
-	                                     sizeof(const xmlChar *));
-	if (temp == NULL) {
-	    xmlFree((xmlChar **) tab);
-	    return(NULL);
-	}
-	tab = temp;
-	ctxt->tabSize *= 2;
-	len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
-    }
-    for (i = 0;i < len;i++) {
-        tmp = xmlExpStringDeriveInt(ctxt, exp, tab[i]);
-	if ((tmp == NULL) || (tmp == forbiddenExp)) {
-	    xmlExpFree(ctxt, ret);
-	    xmlFree((xmlChar **) tab);
-	    return(tmp);
-	}
-	tmp2 = xmlExpStringDeriveInt(ctxt, sub, tab[i]);
-	if ((tmp2 == NULL) || (tmp2 == forbiddenExp)) {
-	    xmlExpFree(ctxt, tmp);
-	    xmlExpFree(ctxt, ret);
-	    xmlFree((xmlChar **) tab);
-	    return(tmp);
-	}
-	tmp3 = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
-	xmlExpFree(ctxt, tmp);
-	xmlExpFree(ctxt, tmp2);
-
-	if ((tmp3 == NULL) || (tmp3 == forbiddenExp)) {
-	    xmlExpFree(ctxt, ret);
-	    xmlFree((xmlChar **) tab);
-	    return(tmp3);
-	}
-
-	if (ret == NULL)
-	    ret = tmp3;
-	else {
-	    ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp3, NULL, 0, 0);
-	    if (ret == NULL) {
-		xmlFree((xmlChar **) tab);
-	        return(NULL);
-	    }
-	}
-    }
-    xmlFree((xmlChar **) tab);
-    return(ret);
-}
-
-/**
- * xmlExpExpDerive:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Evaluates the expression resulting from @exp consuming a sub expression @sub
- * Based on algebraic derivation and sometimes direct Brzozowski derivation
- * it usually tatkes less than linear time and can handle expressions generating
- * infinite languages.
- *
- * Returns the resulting expression or NULL in case of internal error, the
- *         result must be freed
- */
-xmlExpNodePtr
-xmlExpExpDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
-    if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
-        return(NULL);
-
-    /*
-     * O(1) speedups
-     */
-    if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
-#ifdef DEBUG_DERIV
-	printf("Sub nillable and not exp : can't subsume\n");
-#endif
-        return(forbiddenExp);
-    }
-    if (xmlExpCheckCard(exp, sub) == 0) {
-#ifdef DEBUG_DERIV
-	printf("sub generate longuer sequances than exp : can't subsume\n");
-#endif
-        return(forbiddenExp);
-    }
-    return(xmlExpExpDeriveInt(ctxt, exp, sub));
-}
-
-/**
- * xmlExpSubsume:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Check whether @exp accepts all the languages accexpted by @sub
- * the input being a subexpression.
- *
- * Returns 1 if true 0 if false and -1 in case of failure.
- */
-int
-xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
-    xmlExpNodePtr tmp;
-
-    if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
-        return(-1);
-
-    /*
-     * TODO: speedup by checking the language of sub is a subset of the
-     *       language of exp
-     */
-    /*
-     * O(1) speedups
-     */
-    if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
-#ifdef DEBUG_DERIV
-	printf("Sub nillable and not exp : can't subsume\n");
-#endif
-        return(0);
-    }
-    if (xmlExpCheckCard(exp, sub) == 0) {
-#ifdef DEBUG_DERIV
-	printf("sub generate longuer sequances than exp : can't subsume\n");
-#endif
-        return(0);
-    }
-    tmp = xmlExpExpDeriveInt(ctxt, exp, sub);
-#ifdef DEBUG_DERIV
-    printf("Result derivation :\n");
-    PRINT_EXP(tmp);
-#endif
-    if (tmp == NULL)
-        return(-1);
-    if (tmp == forbiddenExp)
-	return(0);
-    if (tmp == emptyExp)
-	return(1);
-    if ((tmp != NULL) && (IS_NILLABLE(tmp))) {
-        xmlExpFree(ctxt, tmp);
-        return(1);
-    }
-    xmlExpFree(ctxt, tmp);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *			Parsing expression				*
- *									*
- ************************************************************************/
-
-static xmlExpNodePtr xmlExpParseExpr(xmlExpCtxtPtr ctxt);
-
-#undef CUR
-#define CUR (*ctxt->cur)
-#undef NEXT
-#define NEXT ctxt->cur++;
-#undef IS_BLANK
-#define IS_BLANK(c) ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t'))
-#define SKIP_BLANKS while (IS_BLANK(*ctxt->cur)) ctxt->cur++;
-
-static int
-xmlExpParseNumber(xmlExpCtxtPtr ctxt) {
-    int ret = 0;
-
-    SKIP_BLANKS
-    if (CUR == '*') {
-	NEXT
-	return(-1);
-    }
-    if ((CUR < '0') || (CUR > '9'))
-        return(-1);
-    while ((CUR >= '0') && (CUR <= '9')) {
-        ret = ret * 10 + (CUR - '0');
-	NEXT
-    }
-    return(ret);
-}
-
-static xmlExpNodePtr
-xmlExpParseOr(xmlExpCtxtPtr ctxt) {
-    const char *base;
-    xmlExpNodePtr ret;
-    const xmlChar *val;
-
-    SKIP_BLANKS
-    base = ctxt->cur;
-    if (*ctxt->cur == '(') {
-        NEXT
-	ret = xmlExpParseExpr(ctxt);
-	SKIP_BLANKS
-	if (*ctxt->cur != ')') {
-	    fprintf(stderr, "unbalanced '(' : %s\n", base);
-	    xmlExpFree(ctxt, ret);
-	    return(NULL);
-	}
-	NEXT;
-	SKIP_BLANKS
-	goto parse_quantifier;
-    }
-    while ((CUR != 0) && (!(IS_BLANK(CUR))) && (CUR != '(') &&
-           (CUR != ')') && (CUR != '|') && (CUR != ',') && (CUR != '{') &&
-	   (CUR != '*') && (CUR != '+') && (CUR != '?') && (CUR != '}'))
-	NEXT;
-    val = xmlDictLookup(ctxt->dict, BAD_CAST base, ctxt->cur - base);
-    if (val == NULL)
-        return(NULL);
-    ret = xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, val, 0, 0);
-    if (ret == NULL)
-        return(NULL);
-    SKIP_BLANKS
-parse_quantifier:
-    if (CUR == '{') {
-        int min, max;
-
-        NEXT
-	min = xmlExpParseNumber(ctxt);
-	if (min < 0) {
-	    xmlExpFree(ctxt, ret);
-	    return(NULL);
-	}
-	SKIP_BLANKS
-	if (CUR == ',') {
-	    NEXT
-	    max = xmlExpParseNumber(ctxt);
-	    SKIP_BLANKS
-	} else
-	    max = min;
-	if (CUR != '}') {
-	    xmlExpFree(ctxt, ret);
-	    return(NULL);
-	}
-        NEXT
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
-	                         min, max);
-	SKIP_BLANKS
-    } else if (CUR == '?') {
-        NEXT
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
-	                         0, 1);
-	SKIP_BLANKS
-    } else if (CUR == '+') {
-        NEXT
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
-	                         1, -1);
-	SKIP_BLANKS
-    } else if (CUR == '*') {
-        NEXT
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
-	                         0, -1);
-	SKIP_BLANKS
-    }
-    return(ret);
-}
-
-
-static xmlExpNodePtr
-xmlExpParseSeq(xmlExpCtxtPtr ctxt) {
-    xmlExpNodePtr ret, right;
-
-    ret = xmlExpParseOr(ctxt);
-    SKIP_BLANKS
-    while (CUR == '|') {
-        NEXT
-	right = xmlExpParseOr(ctxt);
-	if (right == NULL) {
-	    xmlExpFree(ctxt, ret);
-	    return(NULL);
-	}
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, right, NULL, 0, 0);
-	if (ret == NULL)
-	    return(NULL);
-    }
-    return(ret);
-}
-
-static xmlExpNodePtr
-xmlExpParseExpr(xmlExpCtxtPtr ctxt) {
-    xmlExpNodePtr ret, right;
-
-    ret = xmlExpParseSeq(ctxt);
-    SKIP_BLANKS
-    while (CUR == ',') {
-        NEXT
-	right = xmlExpParseSeq(ctxt);
-	if (right == NULL) {
-	    xmlExpFree(ctxt, ret);
-	    return(NULL);
-	}
-	ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, right, NULL, 0, 0);
-	if (ret == NULL)
-	    return(NULL);
-    }
-    return(ret);
-}
-
-/**
- * xmlExpParse:
- * @ctxt: the expressions context
- * @expr: the 0 terminated string
- *
- * Minimal parser for regexps, it understand the following constructs
- *  - string terminals
- *  - choice operator |
- *  - sequence operator ,
- *  - subexpressions (...)
- *  - usual cardinality operators + * and ?
- *  - finite sequences  { min, max }
- *  - infinite sequences { min, * }
- * There is minimal checkings made especially no checking on strings values
- *
- * Returns a new expression or NULL in case of failure
- */
-xmlExpNodePtr
-xmlExpParse(xmlExpCtxtPtr ctxt, const char *expr) {
-    xmlExpNodePtr ret;
-
-    ctxt->expr = expr;
-    ctxt->cur = expr;
-
-    ret = xmlExpParseExpr(ctxt);
-    SKIP_BLANKS
-    if (*ctxt->cur != 0) {
-        xmlExpFree(ctxt, ret);
-        return(NULL);
-    }
-    return(ret);
-}
-
-static void
-xmlExpDumpInt(xmlBufferPtr buf, xmlExpNodePtr expr, int glob) {
-    xmlExpNodePtr c;
-
-    if (expr == NULL) return;
-    if (glob) xmlBufferWriteChar(buf, "(");
-    switch (expr->type) {
-        case XML_EXP_EMPTY:
-	    xmlBufferWriteChar(buf, "empty");
-	    break;
-        case XML_EXP_FORBID:
-	    xmlBufferWriteChar(buf, "forbidden");
-	    break;
-        case XML_EXP_ATOM:
-	    xmlBufferWriteCHAR(buf, expr->exp_str);
-	    break;
-        case XML_EXP_SEQ:
-	    c = expr->exp_left;
-	    if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
-	        xmlExpDumpInt(buf, c, 1);
-	    else
-	        xmlExpDumpInt(buf, c, 0);
-	    xmlBufferWriteChar(buf, " , ");
-	    c = expr->exp_right;
-	    if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
-	        xmlExpDumpInt(buf, c, 1);
-	    else
-	        xmlExpDumpInt(buf, c, 0);
-            break;
-        case XML_EXP_OR:
-	    c = expr->exp_left;
-	    if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
-	        xmlExpDumpInt(buf, c, 1);
-	    else
-	        xmlExpDumpInt(buf, c, 0);
-	    xmlBufferWriteChar(buf, " | ");
-	    c = expr->exp_right;
-	    if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
-	        xmlExpDumpInt(buf, c, 1);
-	    else
-	        xmlExpDumpInt(buf, c, 0);
-            break;
-        case XML_EXP_COUNT: {
-	    char rep[40];
-
-	    c = expr->exp_left;
-	    if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
-	        xmlExpDumpInt(buf, c, 1);
-	    else
-	        xmlExpDumpInt(buf, c, 0);
-	    if ((expr->exp_min == 0) && (expr->exp_max == 1)) {
-		rep[0] = '?';
-		rep[1] = 0;
-	    } else if ((expr->exp_min == 0) && (expr->exp_max == -1)) {
-		rep[0] = '*';
-		rep[1] = 0;
-	    } else if ((expr->exp_min == 1) && (expr->exp_max == -1)) {
-		rep[0] = '+';
-		rep[1] = 0;
-	    } else if (expr->exp_max == expr->exp_min) {
-	        snprintf(rep, 39, "{%d}", expr->exp_min);
-	    } else if (expr->exp_max < 0) {
-	        snprintf(rep, 39, "{%d,inf}", expr->exp_min);
-	    } else {
-	        snprintf(rep, 39, "{%d,%d}", expr->exp_min, expr->exp_max);
-	    }
-	    rep[39] = 0;
-	    xmlBufferWriteChar(buf, rep);
-	    break;
-	}
-	default:
-	    fprintf(stderr, "Error in tree\n");
-    }
-    if (glob)
-        xmlBufferWriteChar(buf, ")");
-}
-/**
- * xmlExpDump:
- * @buf:  a buffer to receive the output
- * @expr:  the compiled expression
- *
- * Serialize the expression as compiled to the buffer
- */
-void
-xmlExpDump(xmlBufferPtr buf, xmlExpNodePtr expr) {
-    if ((buf == NULL) || (expr == NULL))
-        return;
-    xmlExpDumpInt(buf, expr, 0);
-}
-
-/**
- * xmlExpMaxToken:
- * @expr: a compiled expression
- *
- * Indicate the maximum number of input a expression can accept
- *
- * Returns the maximum length or -1 in case of error
- */
-int
-xmlExpMaxToken(xmlExpNodePtr expr) {
-    if (expr == NULL)
-        return(-1);
-    return(expr->c_max);
-}
-
-/**
- * xmlExpCtxtNbNodes:
- * @ctxt: an expression context
- *
- * Debugging facility provides the number of allocated nodes at a that point
- *
- * Returns the number of nodes in use or -1 in case of error
- */
-int
-xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt) {
-    if (ctxt == NULL)
-        return(-1);
-    return(ctxt->nb_nodes);
-}
-
-/**
- * xmlExpCtxtNbCons:
- * @ctxt: an expression context
- *
- * Debugging facility provides the number of allocated nodes over lifetime
- *
- * Returns the number of nodes ever allocated or -1 in case of error
- */
-int
-xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt) {
-    if (ctxt == NULL)
-        return(-1);
-    return(ctxt->nb_cons);
-}
-
-#endif /* LIBXML_EXPR_ENABLED */
-#define bottom_xmlregexp
-#include "elfgcchack.h"
-#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/src/third_party/libxml/src/xmlschemas.c b/src/third_party/libxml/src/xmlschemas.c
deleted file mode 100644
index d42afb7..0000000
--- a/src/third_party/libxml/src/xmlschemas.c
+++ /dev/null
@@ -1,28947 +0,0 @@
-/*
- * schemas.c : implementation of the XML Schema handling and
- *             schema validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-/*
- * TODO:
- *   - when types are redefined in includes, check that all
- *     types in the redef list are equal
- *     -> need a type equality operation.
- *   - if we don't intend to use the schema for schemas, we
- *     need to validate all schema attributes (ref, type, name)
- *     against their types.
- *   - Eliminate item creation for: ??
- *
- * URGENT TODO:
- *   - For xsi-driven schema acquisition, augment the IDCs after every
- *     acquisition episode (xmlSchemaAugmentIDC).
- *
- * NOTES:
- *   - Elimated item creation for: <restriction>, <extension>,
- *     <simpleContent>, <complexContent>, <list>, <union>
- *
- * PROBLEMS:
- *   - http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0337.html
- *     IDC XPath expression and chameleon includes: the targetNamespace is changed, so
- *     XPath will have trouble to resolve to this namespace, since not known.
- *
- *
- * CONSTRAINTS:
- *
- * Schema Component Constraint:
- *   All Group Limited (cos-all-limited)
- *   Status: complete
- *   (1.2)
- *     In xmlSchemaGroupDefReferenceTermFixup() and
- *   (2)
- *     In xmlSchemaParseModelGroup()
- *     TODO: Actually this should go to component-level checks,
- *     but is done here due to performance. Move it to an other layer
- *     is schema construction via an API is implemented.
- */
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/dict.h>
-#include <libxml/encoding.h>
-#include <libxml/xmlIO.h>
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-#ifdef LIBXML_READER_ENABLED
-#include <libxml/xmlreader.h>
-#endif
-
-/* #define DEBUG 1 */
-
-/* #define DEBUG_CONTENT 1 */
-
-/* #define DEBUG_TYPE 1 */
-
-/* #define DEBUG_CONTENT_REGEXP 1 */
-
-/* #define DEBUG_AUTOMATA 1 */
-
-/* #define DEBUG_IDC */
-
-/* #define DEBUG_IDC_NODE_TABLE */
-
-/* #define WXS_ELEM_DECL_CONS_ENABLED */
-
-#ifdef DEBUG_IDC
- #ifndef DEBUG_IDC_NODE_TABLE
-  #define DEBUG_IDC_NODE_TABLE
- #endif
-#endif
-
-/* #define ENABLE_PARTICLE_RESTRICTION 1 */
-
-#define ENABLE_REDEFINE
-
-/* #define ENABLE_NAMED_LOCALS */
-
-/* #define ENABLE_IDC_NODE_TABLES_TEST */
-
-#define DUMP_CONTENT_MODEL
-
-#ifdef LIBXML_READER_ENABLED
-/* #define XML_SCHEMA_READER_ENABLED */
-#endif
-
-#define UNBOUNDED (1 << 30)
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-#define XML_SCHEMAS_NO_NAMESPACE (const xmlChar *) "##"
-
-/*
- * The XML Schemas namespaces
- */
-static const xmlChar *xmlSchemaNs = (const xmlChar *)
-    "http://www.w3.org/2001/XMLSchema";
-
-static const xmlChar *xmlSchemaInstanceNs = (const xmlChar *)
-    "http://www.w3.org/2001/XMLSchema-instance";
-
-static const xmlChar *xmlNamespaceNs = (const xmlChar *)
-    "http://www.w3.org/2000/xmlns/";
-
-/*
-* Come casting macros.
-*/
-#define ACTXT_CAST (xmlSchemaAbstractCtxtPtr)
-#define PCTXT_CAST (xmlSchemaParserCtxtPtr)
-#define VCTXT_CAST (xmlSchemaValidCtxtPtr)
-#define WXS_BASIC_CAST (xmlSchemaBasicItemPtr)
-#define WXS_TREE_CAST (xmlSchemaTreeItemPtr)
-#define WXS_PTC_CAST (xmlSchemaParticlePtr)
-#define WXS_TYPE_CAST (xmlSchemaTypePtr)
-#define WXS_ELEM_CAST (xmlSchemaElementPtr)
-#define WXS_ATTR_GROUP_CAST (xmlSchemaAttributeGroupPtr)
-#define WXS_ATTR_CAST (xmlSchemaAttributePtr)
-#define WXS_ATTR_USE_CAST (xmlSchemaAttributeUsePtr)
-#define WXS_ATTR_PROHIB_CAST (xmlSchemaAttributeUseProhibPtr)
-#define WXS_MODEL_GROUPDEF_CAST (xmlSchemaModelGroupDefPtr)
-#define WXS_MODEL_GROUP_CAST (xmlSchemaModelGroupPtr)
-#define WXS_IDC_CAST (xmlSchemaIDCPtr)
-#define WXS_QNAME_CAST (xmlSchemaQNameRefPtr)
-#define WXS_LIST_CAST (xmlSchemaItemListPtr)
-
-/*
-* Macros to query common properties of components.
-*/
-#define WXS_ITEM_NODE(i) xmlSchemaGetComponentNode(WXS_BASIC_CAST (i))
-
-#define WXS_ITEM_TYPE_NAME(i) xmlSchemaGetComponentTypeStr(WXS_BASIC_CAST (i))
-/*
-* Macros for element declarations.
-*/
-#define WXS_ELEM_TYPEDEF(e) (e)->subtypes
-
-#define WXS_SUBST_HEAD(item) (item)->refDecl
-/*
-* Macros for attribute declarations.
-*/
-#define WXS_ATTR_TYPEDEF(a) (a)->subtypes
-/*
-* Macros for attribute uses.
-*/
-#define WXS_ATTRUSE_DECL(au) WXS_ATTR_CAST (WXS_ATTR_USE_CAST (au))->attrDecl
-
-#define WXS_ATTRUSE_TYPEDEF(au) WXS_ATTR_TYPEDEF(WXS_ATTRUSE_DECL( WXS_ATTR_USE_CAST au))
-
-#define WXS_ATTRUSE_DECL_NAME(au) (WXS_ATTRUSE_DECL(au))->name
-
-#define WXS_ATTRUSE_DECL_TNS(au) (WXS_ATTRUSE_DECL(au))->targetNamespace
-/*
-* Macros for attribute groups.
-*/
-#define WXS_ATTR_GROUP_HAS_REFS(ag) ((WXS_ATTR_GROUP_CAST (ag))->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS)
-#define WXS_ATTR_GROUP_EXPANDED(ag) ((WXS_ATTR_GROUP_CAST (ag))->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED)
-/*
-* Macros for particles.
-*/
-#define WXS_PARTICLE(p) WXS_PTC_CAST (p)
-
-#define WXS_PARTICLE_TERM(p) (WXS_PARTICLE(p))->children
-
-#define WXS_PARTICLE_TERM_AS_ELEM(p) (WXS_ELEM_CAST WXS_PARTICLE_TERM(p))
-
-#define WXS_PARTICLE_MODEL(p) WXS_MODEL_GROUP_CAST WXS_PARTICLE(p)->children
-/*
-* Macros for model groups definitions.
-*/
-#define WXS_MODELGROUPDEF_MODEL(mgd) (WXS_MODEL_GROUP_CAST (mgd))->children
-/*
-* Macros for model groups.
-*/
-#define WXS_IS_MODEL_GROUP(i) \
-    (((i)->type == XML_SCHEMA_TYPE_SEQUENCE) || \
-     ((i)->type == XML_SCHEMA_TYPE_CHOICE) || \
-     ((i)->type == XML_SCHEMA_TYPE_ALL))
-
-#define WXS_MODELGROUP_PARTICLE(mg) WXS_PTC_CAST (mg)->children
-/*
-* Macros for schema buckets.
-*/
-#define WXS_IS_BUCKET_INCREDEF(t) (((t) == XML_SCHEMA_SCHEMA_INCLUDE) || \
-    ((t) == XML_SCHEMA_SCHEMA_REDEFINE))
-
-#define WXS_IS_BUCKET_IMPMAIN(t) (((t) == XML_SCHEMA_SCHEMA_MAIN) || \
-    ((t) == XML_SCHEMA_SCHEMA_IMPORT))
-
-#define WXS_IMPBUCKET(b) ((xmlSchemaImportPtr) (b))
-
-#define WXS_INCBUCKET(b) ((xmlSchemaIncludePtr) (b))
-/*
-* Macros for complex/simple types.
-*/
-#define WXS_IS_ANYTYPE(i) \
-     (( (i)->type == XML_SCHEMA_TYPE_BASIC) && \
-      ( (WXS_TYPE_CAST (i))->builtInType == XML_SCHEMAS_ANYTYPE))
-
-#define WXS_IS_COMPLEX(i) \
-    (((i)->type == XML_SCHEMA_TYPE_COMPLEX) || \
-     ((i)->builtInType == XML_SCHEMAS_ANYTYPE))
-
-#define WXS_IS_SIMPLE(item) \
-    ((item->type == XML_SCHEMA_TYPE_SIMPLE) || \
-     ((item->type == XML_SCHEMA_TYPE_BASIC) && \
-      (item->builtInType != XML_SCHEMAS_ANYTYPE)))
-
-#define WXS_IS_ANY_SIMPLE_TYPE(i) \
-    (((i)->type == XML_SCHEMA_TYPE_BASIC) && \
-      ((i)->builtInType == XML_SCHEMAS_ANYSIMPLETYPE))
-
-#define WXS_IS_RESTRICTION(t) \
-    ((t)->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION)
-
-#define WXS_IS_EXTENSION(t) \
-    ((t)->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION)
-
-#define WXS_IS_TYPE_NOT_FIXED(i) \
-    (((i)->type != XML_SCHEMA_TYPE_BASIC) && \
-     (((i)->flags & XML_SCHEMAS_TYPE_INTERNAL_RESOLVED) == 0))
-
-#define WXS_IS_TYPE_NOT_FIXED_1(item) \
-    (((item)->type != XML_SCHEMA_TYPE_BASIC) && \
-     (((item)->flags & XML_SCHEMAS_TYPE_FIXUP_1) == 0))
-
-#define WXS_TYPE_IS_GLOBAL(t) ((t)->flags & XML_SCHEMAS_TYPE_GLOBAL)
-
-#define WXS_TYPE_IS_LOCAL(t) (((t)->flags & XML_SCHEMAS_TYPE_GLOBAL) == 0)
-/*
-* Macros for exclusively for complex types.
-*/
-#define WXS_HAS_COMPLEX_CONTENT(item) \
-    ((item->contentType == XML_SCHEMA_CONTENT_MIXED) || \
-     (item->contentType == XML_SCHEMA_CONTENT_EMPTY) || \
-     (item->contentType == XML_SCHEMA_CONTENT_ELEMENTS))
-
-#define WXS_HAS_SIMPLE_CONTENT(item) \
-    ((item->contentType == XML_SCHEMA_CONTENT_SIMPLE) || \
-     (item->contentType == XML_SCHEMA_CONTENT_BASIC))
-
-#define WXS_HAS_MIXED_CONTENT(item) \
-    (item->contentType == XML_SCHEMA_CONTENT_MIXED)
-
-#define WXS_EMPTIABLE(t) \
-    (xmlSchemaIsParticleEmptiable(WXS_PTC_CAST (t)->subtypes))
-
-#define WXS_TYPE_CONTENTTYPE(t) (t)->subtypes
-
-#define WXS_TYPE_PARTICLE(t) WXS_PTC_CAST (t)->subtypes
-
-#define WXS_TYPE_PARTICLE_TERM(t) WXS_PARTICLE_TERM(WXS_TYPE_PARTICLE(t))
-/*
-* Macros for exclusively for simple types.
-*/
-#define WXS_LIST_ITEMTYPE(t) (t)->subtypes
-
-#define WXS_IS_ATOMIC(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_ATOMIC)
-
-#define WXS_IS_LIST(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_LIST)
-
-#define WXS_IS_UNION(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_UNION)
-/*
-* Misc parser context macros.
-*/
-#define WXS_CONSTRUCTOR(ctx) (ctx)->constructor
-
-#define WXS_HAS_BUCKETS(ctx) \
-( (WXS_CONSTRUCTOR((ctx))->buckets != NULL) && \
-(WXS_CONSTRUCTOR((ctx))->buckets->nbItems > 0) )
-
-#define WXS_SUBST_GROUPS(ctx) WXS_CONSTRUCTOR((ctx))->substGroups
-
-#define WXS_BUCKET(ctx) WXS_CONSTRUCTOR((ctx))->bucket
-
-#define WXS_SCHEMA(ctx) (ctx)->schema
-
-#define WXS_ADD_LOCAL(ctx, item) \
-    xmlSchemaAddItemSize(&(WXS_BUCKET(ctx)->locals), 10, item)
-
-#define WXS_ADD_GLOBAL(ctx, item) \
-    xmlSchemaAddItemSize(&(WXS_BUCKET(ctx)->globals), 5, item)
-
-#define WXS_ADD_PENDING(ctx, item) \
-    xmlSchemaAddItemSize(&((ctx)->constructor->pending), 10, item)
-/*
-* xmlSchemaItemList macros.
-*/
-#define WXS_ILIST_IS_EMPTY(l) ((l == NULL) || ((l)->nbItems == 0))
-/*
-* Misc macros.
-*/
-#define IS_SCHEMA(node, type) \
-   ((node != NULL) && (node->ns != NULL) && \
-    (xmlStrEqual(node->name, (const xmlChar *) type)) && \
-    (xmlStrEqual(node->ns->href, xmlSchemaNs)))
-
-#define FREE_AND_NULL(str) if ((str) != NULL) { xmlFree((xmlChar *) (str)); str = NULL; }
-
-/*
-* Since we put the default/fixed values into the dict, we can
-* use pointer comparison for those values.
-* REMOVED: (xmlStrEqual((v1), (v2)))
-*/
-#define WXS_ARE_DEFAULT_STR_EQUAL(v1, v2) ((v1) == (v2))
-
-#define INODE_NILLED(item) (item->flags & XML_SCHEMA_ELEM_INFO_NILLED)
-
-#define CAN_PARSE_SCHEMA(b) (((b)->doc != NULL) && ((b)->parsed == 0))
-
-#define HFAILURE if (res == -1) goto exit_failure;
-
-#define HERROR if (res != 0) goto exit_error;
-
-#define HSTOP(ctx) if ((ctx)->stop) goto exit;
-/*
-* Some flags used for various schema constraints.
-*/
-#define SUBSET_RESTRICTION  1<<0
-#define SUBSET_EXTENSION    1<<1
-#define SUBSET_SUBSTITUTION 1<<2
-#define SUBSET_LIST         1<<3
-#define SUBSET_UNION        1<<4
-
-typedef struct _xmlSchemaNodeInfo xmlSchemaNodeInfo;
-typedef xmlSchemaNodeInfo *xmlSchemaNodeInfoPtr;
-
-typedef struct _xmlSchemaItemList xmlSchemaItemList;
-typedef xmlSchemaItemList *xmlSchemaItemListPtr;
-struct _xmlSchemaItemList {
-    void **items;  /* used for dynamic addition of schemata */
-    int nbItems; /* used for dynamic addition of schemata */
-    int sizeItems; /* used for dynamic addition of schemata */
-};
-
-#define XML_SCHEMA_CTXT_PARSER 1
-#define XML_SCHEMA_CTXT_VALIDATOR 2
-
-typedef struct _xmlSchemaAbstractCtxt xmlSchemaAbstractCtxt;
-typedef xmlSchemaAbstractCtxt *xmlSchemaAbstractCtxtPtr;
-struct _xmlSchemaAbstractCtxt {
-    int type; /* E.g. XML_SCHEMA_CTXT_VALIDATOR */
-};
-
-typedef struct _xmlSchemaBucket xmlSchemaBucket;
-typedef xmlSchemaBucket *xmlSchemaBucketPtr;
-
-#define XML_SCHEMA_SCHEMA_MAIN 0
-#define XML_SCHEMA_SCHEMA_IMPORT 1
-#define XML_SCHEMA_SCHEMA_INCLUDE 2
-#define XML_SCHEMA_SCHEMA_REDEFINE 3
-
-/**
- * xmlSchemaSchemaRelation:
- *
- * Used to create a graph of schema relationships.
- */
-typedef struct _xmlSchemaSchemaRelation xmlSchemaSchemaRelation;
-typedef xmlSchemaSchemaRelation *xmlSchemaSchemaRelationPtr;
-struct _xmlSchemaSchemaRelation {
-    xmlSchemaSchemaRelationPtr next;
-    int type; /* E.g. XML_SCHEMA_SCHEMA_IMPORT */
-    const xmlChar *importNamespace;
-    xmlSchemaBucketPtr bucket;
-};
-
-#define XML_SCHEMA_BUCKET_MARKED 1<<0
-#define XML_SCHEMA_BUCKET_COMPS_ADDED 1<<1
-
-struct _xmlSchemaBucket {
-    int type;
-    int flags;
-    const xmlChar *schemaLocation;
-    const xmlChar *origTargetNamespace;
-    const xmlChar *targetNamespace;
-    xmlDocPtr doc;
-    xmlSchemaSchemaRelationPtr relations;
-    int located;
-    int parsed;
-    int imported;
-    int preserveDoc;
-    xmlSchemaItemListPtr globals; /* Global components. */
-    xmlSchemaItemListPtr locals; /* Local components. */
-};
-
-/**
- * xmlSchemaImport:
- * (extends xmlSchemaBucket)
- *
- * Reflects a schema. Holds some information
- * about the schema and its toplevel components. Duplicate
- * toplevel components are not checked at this level.
- */
-typedef struct _xmlSchemaImport xmlSchemaImport;
-typedef xmlSchemaImport *xmlSchemaImportPtr;
-struct _xmlSchemaImport {
-    int type; /* Main OR import OR include. */
-    int flags;
-    const xmlChar *schemaLocation; /* The URI of the schema document. */
-    /* For chameleon includes, @origTargetNamespace will be NULL */
-    const xmlChar *origTargetNamespace;
-    /*
-    * For chameleon includes, @targetNamespace will be the
-    * targetNamespace of the including schema.
-    */
-    const xmlChar *targetNamespace;
-    xmlDocPtr doc; /* The schema node-tree. */
-    /* @relations will hold any included/imported/redefined schemas. */
-    xmlSchemaSchemaRelationPtr relations;
-    int located;
-    int parsed;
-    int imported;
-    int preserveDoc;
-    xmlSchemaItemListPtr globals;
-    xmlSchemaItemListPtr locals;
-    /* The imported schema. */
-    xmlSchemaPtr schema;
-};
-
-/*
-* (extends xmlSchemaBucket)
-*/
-typedef struct _xmlSchemaInclude xmlSchemaInclude;
-typedef xmlSchemaInclude *xmlSchemaIncludePtr;
-struct _xmlSchemaInclude {
-    int type;
-    int flags;
-    const xmlChar *schemaLocation;
-    const xmlChar *origTargetNamespace;
-    const xmlChar *targetNamespace;
-    xmlDocPtr doc;
-    xmlSchemaSchemaRelationPtr relations;
-    int located;
-    int parsed;
-    int imported;
-    int preserveDoc;
-    xmlSchemaItemListPtr globals; /* Global components. */
-    xmlSchemaItemListPtr locals; /* Local components. */
-
-    /* The owning main or import schema bucket. */
-    xmlSchemaImportPtr ownerImport;
-};
-
-/**
- * xmlSchemaBasicItem:
- *
- * The abstract base type for schema components.
- */
-typedef struct _xmlSchemaBasicItem xmlSchemaBasicItem;
-typedef xmlSchemaBasicItem *xmlSchemaBasicItemPtr;
-struct _xmlSchemaBasicItem {
-    xmlSchemaTypeType type;
-};
-
-/**
- * xmlSchemaAnnotItem:
- *
- * The abstract base type for annotated schema components.
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaAnnotItem xmlSchemaAnnotItem;
-typedef xmlSchemaAnnotItem *xmlSchemaAnnotItemPtr;
-struct _xmlSchemaAnnotItem {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-};
-
-/**
- * xmlSchemaTreeItem:
- *
- * The abstract base type for tree-like structured schema components.
- * (Extends xmlSchemaAnnotItem)
- */
-typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
-typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
-struct _xmlSchemaTreeItem {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next;
-    xmlSchemaTreeItemPtr children;
-};
-
-
-#define XML_SCHEMA_ATTR_USE_FIXED 1<<0
-/**
- * xmlSchemaAttributeUsePtr:
- *
- * The abstract base type for tree-like structured schema components.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaAttributeUse xmlSchemaAttributeUse;
-typedef xmlSchemaAttributeUse *xmlSchemaAttributeUsePtr;
-struct _xmlSchemaAttributeUse {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaAttributeUsePtr next; /* The next attr. use. */
-    /*
-    * The attr. decl. OR a QName-ref. to an attr. decl. OR
-    * a QName-ref. to an attribute group definition.
-    */
-    xmlSchemaAttributePtr attrDecl;
-
-    int flags;
-    xmlNodePtr node;
-    int occurs; /* required, optional */
-    const xmlChar * defValue;
-    xmlSchemaValPtr defVal;
-};
-
-/**
- * xmlSchemaAttributeUseProhibPtr:
- *
- * A helper component to reflect attribute prohibitions.
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaAttributeUseProhib xmlSchemaAttributeUseProhib;
-typedef xmlSchemaAttributeUseProhib *xmlSchemaAttributeUseProhibPtr;
-struct _xmlSchemaAttributeUseProhib {
-    xmlSchemaTypeType type; /* == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB */
-    xmlNodePtr node;
-    const xmlChar *name;
-    const xmlChar *targetNamespace;
-    int isRef;
-};
-
-/**
- * xmlSchemaRedef:
- */
-typedef struct _xmlSchemaRedef xmlSchemaRedef;
-typedef xmlSchemaRedef *xmlSchemaRedefPtr;
-struct _xmlSchemaRedef {
-    xmlSchemaRedefPtr next;
-    xmlSchemaBasicItemPtr item; /* The redefining component. */
-    xmlSchemaBasicItemPtr reference; /* The referencing component. */
-    xmlSchemaBasicItemPtr target; /* The to-be-redefined component. */
-    const xmlChar *refName; /* The name of the to-be-redefined component. */
-    const xmlChar *refTargetNs; /* The target namespace of the
-                                   to-be-redefined comp. */
-    xmlSchemaBucketPtr targetBucket; /* The redefined schema. */
-};
-
-/**
- * xmlSchemaConstructionCtxt:
- */
-typedef struct _xmlSchemaConstructionCtxt xmlSchemaConstructionCtxt;
-typedef xmlSchemaConstructionCtxt *xmlSchemaConstructionCtxtPtr;
-struct _xmlSchemaConstructionCtxt {
-    xmlSchemaPtr mainSchema; /* The main schema. */
-    xmlSchemaBucketPtr mainBucket; /* The main schema bucket */
-    xmlDictPtr dict;
-    xmlSchemaItemListPtr buckets; /* List of schema buckets. */
-    /* xmlSchemaItemListPtr relations; */ /* List of schema relations. */
-    xmlSchemaBucketPtr bucket; /* The current schema bucket */
-    xmlSchemaItemListPtr pending; /* All Components of all schemas that
-                                     need to be fixed. */
-    xmlHashTablePtr substGroups;
-    xmlSchemaRedefPtr redefs;
-    xmlSchemaRedefPtr lastRedef;
-};
-
-#define XML_SCHEMAS_PARSE_ERROR		1
-#define SCHEMAS_PARSE_OPTIONS XML_PARSE_NOENT
-
-struct _xmlSchemaParserCtxt {
-    int type;
-    void *errCtxt;             /* user specific error context */
-    xmlSchemaValidityErrorFunc error;   /* the callback in case of errors */
-    xmlSchemaValidityWarningFunc warning;       /* the callback in case of warning */
-    int err;
-    int nberrors;
-    xmlStructuredErrorFunc serror;
-
-    xmlSchemaConstructionCtxtPtr constructor;
-    int ownsConstructor; /* TODO: Move this to parser *flags*. */
-
-    /* xmlSchemaPtr topschema;	*/
-    /* xmlHashTablePtr namespaces;  */
-
-    xmlSchemaPtr schema;        /* The main schema in use */
-    int counter;
-
-    const xmlChar *URL;
-    xmlDocPtr doc;
-    int preserve;		/* Whether the doc should be freed  */
-
-    const char *buffer;
-    int size;
-
-    /*
-     * Used to build complex element content models
-     */
-    xmlAutomataPtr am;
-    xmlAutomataStatePtr start;
-    xmlAutomataStatePtr end;
-    xmlAutomataStatePtr state;
-
-    xmlDictPtr dict;		/* dictionary for interned string names */
-    xmlSchemaTypePtr ctxtType; /* The current context simple/complex type */
-    int options;
-    xmlSchemaValidCtxtPtr vctxt;
-    int isS4S;
-    int isRedefine;
-    int xsiAssemble;
-    int stop; /* If the parser should stop; i.e. a critical error. */
-    const xmlChar *targetNamespace;
-    xmlSchemaBucketPtr redefined; /* The schema to be redefined. */
-
-    xmlSchemaRedefPtr redef; /* Used for redefinitions. */
-    int redefCounter; /* Used for redefinitions. */
-    xmlSchemaItemListPtr attrProhibs;
-};
-
-/**
- * xmlSchemaQNameRef:
- *
- * A component reference item (not a schema component)
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaQNameRef xmlSchemaQNameRef;
-typedef xmlSchemaQNameRef *xmlSchemaQNameRefPtr;
-struct _xmlSchemaQNameRef {
-    xmlSchemaTypeType type;
-    xmlSchemaBasicItemPtr item; /* The resolved referenced item. */
-    xmlSchemaTypeType itemType;
-    const xmlChar *name;
-    const xmlChar *targetNamespace;
-    xmlNodePtr node;
-};
-
-/**
- * xmlSchemaParticle:
- *
- * A particle component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaParticle xmlSchemaParticle;
-typedef xmlSchemaParticle *xmlSchemaParticlePtr;
-struct _xmlSchemaParticle {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next; /* next particle */
-    xmlSchemaTreeItemPtr children; /* the "term" (e.g. a model group,
-	a group definition, a XML_SCHEMA_EXTRA_QNAMEREF (if a reference),
-        etc.) */
-    int minOccurs;
-    int maxOccurs;
-    xmlNodePtr node;
-};
-
-/**
- * xmlSchemaModelGroup:
- *
- * A model group component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
-typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
-struct _xmlSchemaModelGroup {
-    xmlSchemaTypeType type; /* XML_SCHEMA_TYPE_SEQUENCE, XML_SCHEMA_TYPE_CHOICE, XML_SCHEMA_TYPE_ALL */
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next; /* not used */
-    xmlSchemaTreeItemPtr children; /* first particle (OR "element decl" OR "wildcard") */
-    xmlNodePtr node;
-};
-
-#define XML_SCHEMA_MODEL_GROUP_DEF_MARKED 1<<0
-#define XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED 1<<1
-/**
- * xmlSchemaModelGroupDef:
- *
- * A model group definition component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaModelGroupDef xmlSchemaModelGroupDef;
-typedef xmlSchemaModelGroupDef *xmlSchemaModelGroupDefPtr;
-struct _xmlSchemaModelGroupDef {
-    xmlSchemaTypeType type; /* XML_SCHEMA_TYPE_GROUP */
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next; /* not used */
-    xmlSchemaTreeItemPtr children; /* the "model group" */
-    const xmlChar *name;
-    const xmlChar *targetNamespace;
-    xmlNodePtr node;
-    int flags;
-};
-
-typedef struct _xmlSchemaIDC xmlSchemaIDC;
-typedef xmlSchemaIDC *xmlSchemaIDCPtr;
-
-/**
- * xmlSchemaIDCSelect:
- *
- * The identity-constraint "field" and "selector" item, holding the
- * XPath expression.
- */
-typedef struct _xmlSchemaIDCSelect xmlSchemaIDCSelect;
-typedef xmlSchemaIDCSelect *xmlSchemaIDCSelectPtr;
-struct _xmlSchemaIDCSelect {
-    xmlSchemaIDCSelectPtr next;
-    xmlSchemaIDCPtr idc;
-    int index; /* an index position if significant for IDC key-sequences */
-    const xmlChar *xpath; /* the XPath expression */
-    void *xpathComp; /* the compiled XPath expression */
-};
-
-/**
- * xmlSchemaIDC:
- *
- * The identity-constraint definition component.
- * (Extends xmlSchemaAnnotItem)
- */
-
-struct _xmlSchemaIDC {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaIDCPtr next;
-    xmlNodePtr node;
-    const xmlChar *name;
-    const xmlChar *targetNamespace;
-    xmlSchemaIDCSelectPtr selector;
-    xmlSchemaIDCSelectPtr fields;
-    int nbFields;
-    xmlSchemaQNameRefPtr ref;
-};
-
-/**
- * xmlSchemaIDCAug:
- *
- * The augmented IDC information used for validation.
- */
-typedef struct _xmlSchemaIDCAug xmlSchemaIDCAug;
-typedef xmlSchemaIDCAug *xmlSchemaIDCAugPtr;
-struct _xmlSchemaIDCAug {
-    xmlSchemaIDCAugPtr next; /* next in a list */
-    xmlSchemaIDCPtr def; /* the IDC definition */
-    int keyrefDepth; /* the lowest tree level to which IDC
-                        tables need to be bubbled upwards */
-};
-
-/**
- * xmlSchemaPSVIIDCKeySequence:
- *
- * The key sequence of a node table item.
- */
-typedef struct _xmlSchemaPSVIIDCKey xmlSchemaPSVIIDCKey;
-typedef xmlSchemaPSVIIDCKey *xmlSchemaPSVIIDCKeyPtr;
-struct _xmlSchemaPSVIIDCKey {
-    xmlSchemaTypePtr type;
-    xmlSchemaValPtr val;
-};
-
-/**
- * xmlSchemaPSVIIDCNode:
- *
- * The node table item of a node table.
- */
-typedef struct _xmlSchemaPSVIIDCNode xmlSchemaPSVIIDCNode;
-typedef xmlSchemaPSVIIDCNode *xmlSchemaPSVIIDCNodePtr;
-struct _xmlSchemaPSVIIDCNode {
-    xmlNodePtr node;
-    xmlSchemaPSVIIDCKeyPtr *keys;
-    int nodeLine;
-    int nodeQNameID;
-
-};
-
-/**
- * xmlSchemaPSVIIDCBinding:
- *
- * The identity-constraint binding item of the [identity-constraint table].
- */
-typedef struct _xmlSchemaPSVIIDCBinding xmlSchemaPSVIIDCBinding;
-typedef xmlSchemaPSVIIDCBinding *xmlSchemaPSVIIDCBindingPtr;
-struct _xmlSchemaPSVIIDCBinding {
-    xmlSchemaPSVIIDCBindingPtr next; /* next binding of a specific node */
-    xmlSchemaIDCPtr definition; /* the IDC definition */
-    xmlSchemaPSVIIDCNodePtr *nodeTable; /* array of key-sequences */
-    int nbNodes; /* number of entries in the node table */
-    int sizeNodes; /* size of the node table */
-    xmlSchemaItemListPtr dupls;
-};
-
-
-#define XPATH_STATE_OBJ_TYPE_IDC_SELECTOR 1
-#define XPATH_STATE_OBJ_TYPE_IDC_FIELD 2
-
-#define XPATH_STATE_OBJ_MATCHES -2
-#define XPATH_STATE_OBJ_BLOCKED -3
-
-typedef struct _xmlSchemaIDCMatcher xmlSchemaIDCMatcher;
-typedef xmlSchemaIDCMatcher *xmlSchemaIDCMatcherPtr;
-
-/**
- * xmlSchemaIDCStateObj:
- *
- * The state object used to evaluate XPath expressions.
- */
-typedef struct _xmlSchemaIDCStateObj xmlSchemaIDCStateObj;
-typedef xmlSchemaIDCStateObj *xmlSchemaIDCStateObjPtr;
-struct _xmlSchemaIDCStateObj {
-    int type;
-    xmlSchemaIDCStateObjPtr next; /* next if in a list */
-    int depth; /* depth of creation */
-    int *history; /* list of (depth, state-id) tuples */
-    int nbHistory;
-    int sizeHistory;
-    xmlSchemaIDCMatcherPtr matcher; /* the correspondent field/selector
-                                       matcher */
-    xmlSchemaIDCSelectPtr sel;
-    void *xpathCtxt;
-};
-
-#define IDC_MATCHER 0
-
-/**
- * xmlSchemaIDCMatcher:
- *
- * Used to evaluate IDC selectors (and fields).
- */
-struct _xmlSchemaIDCMatcher {
-    int type;
-    int depth; /* the tree depth at creation time */
-    xmlSchemaIDCMatcherPtr next; /* next in the list */
-    xmlSchemaIDCMatcherPtr nextCached; /* next in the cache list */
-    xmlSchemaIDCAugPtr aidc; /* the augmented IDC item */
-    int idcType;
-    xmlSchemaPSVIIDCKeyPtr **keySeqs; /* the key-sequences of the target
-                                         elements */
-    int sizeKeySeqs;
-    xmlSchemaItemListPtr targets; /* list of target-node
-                                     (xmlSchemaPSVIIDCNodePtr) entries */
-};
-
-/*
-* Element info flags.
-*/
-#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES  1<<0
-#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES 1<<1
-#define XML_SCHEMA_ELEM_INFO_NILLED	       1<<2
-#define XML_SCHEMA_ELEM_INFO_LOCAL_TYPE	       1<<3
-
-#define XML_SCHEMA_NODE_INFO_VALUE_NEEDED      1<<4
-#define XML_SCHEMA_ELEM_INFO_EMPTY             1<<5
-#define XML_SCHEMA_ELEM_INFO_HAS_CONTENT       1<<6
-
-#define XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT  1<<7
-#define XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT  1<<8
-#define XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED  1<<9
-#define XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE  1<<10
-
-/**
- * xmlSchemaNodeInfo:
- *
- * Holds information of an element node.
- */
-struct _xmlSchemaNodeInfo {
-    int nodeType;
-    xmlNodePtr node;
-    int nodeLine;
-    const xmlChar *localName;
-    const xmlChar *nsName;
-    const xmlChar *value;
-    xmlSchemaValPtr val; /* the pre-computed value if any */
-    xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */
-
-    int flags; /* combination of node info flags */
-
-    int valNeeded;
-    int normVal;
-
-    xmlSchemaElementPtr decl; /* the element/attribute declaration */
-    int depth;
-    xmlSchemaPSVIIDCBindingPtr idcTable; /* the table of PSVI IDC bindings
-                                            for the scope element*/
-    xmlSchemaIDCMatcherPtr idcMatchers; /* the IDC matchers for the scope
-                                           element */
-    xmlRegExecCtxtPtr regexCtxt;
-
-    const xmlChar **nsBindings; /* Namespace bindings on this element */
-    int nbNsBindings;
-    int sizeNsBindings;
-
-    int hasKeyrefs;
-    int appliedXPath; /* Indicates that an XPath has been applied. */
-};
-
-#define XML_SCHEMAS_ATTR_UNKNOWN 1
-#define XML_SCHEMAS_ATTR_ASSESSED 2
-#define XML_SCHEMAS_ATTR_PROHIBITED 3
-#define XML_SCHEMAS_ATTR_ERR_MISSING 4
-#define XML_SCHEMAS_ATTR_INVALID_VALUE 5
-#define XML_SCHEMAS_ATTR_ERR_NO_TYPE 6
-#define XML_SCHEMAS_ATTR_ERR_FIXED_VALUE 7
-#define XML_SCHEMAS_ATTR_DEFAULT 8
-#define XML_SCHEMAS_ATTR_VALIDATE_VALUE 9
-#define XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL 10
-#define XML_SCHEMAS_ATTR_HAS_ATTR_USE 11
-#define XML_SCHEMAS_ATTR_HAS_ATTR_DECL 12
-#define XML_SCHEMAS_ATTR_WILD_SKIP 13
-#define XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL 14
-#define XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID 15
-#define XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID 16
-#define XML_SCHEMAS_ATTR_META 17
-/*
-* @metaType values of xmlSchemaAttrInfo.
-*/
-#define XML_SCHEMA_ATTR_INFO_META_XSI_TYPE 1
-#define XML_SCHEMA_ATTR_INFO_META_XSI_NIL 2
-#define XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC 3
-#define XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC 4
-#define XML_SCHEMA_ATTR_INFO_META_XMLNS 5
-
-typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo;
-typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr;
-struct _xmlSchemaAttrInfo {
-    int nodeType;
-    xmlNodePtr node;
-    int nodeLine;
-    const xmlChar *localName;
-    const xmlChar *nsName;
-    const xmlChar *value;
-    xmlSchemaValPtr val; /* the pre-computed value if any */
-    xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */
-    int flags; /* combination of node info flags */
-
-    xmlSchemaAttributePtr decl; /* the attribute declaration */
-    xmlSchemaAttributeUsePtr use;  /* the attribute use */
-    int state;
-    int metaType;
-    const xmlChar *vcValue; /* the value constraint value */
-    xmlSchemaNodeInfoPtr parent;
-};
-
-
-#define XML_SCHEMA_VALID_CTXT_FLAG_STREAM 1
-/**
- * xmlSchemaValidCtxt:
- *
- * A Schemas validation context
- */
-struct _xmlSchemaValidCtxt {
-    int type;
-    void *errCtxt;             /* user specific data block */
-    xmlSchemaValidityErrorFunc error;   /* the callback in case of errors */
-    xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */
-    xmlStructuredErrorFunc serror;
-
-    xmlSchemaPtr schema;        /* The schema in use */
-    xmlDocPtr doc;
-    xmlParserInputBufferPtr input;
-    xmlCharEncoding enc;
-    xmlSAXHandlerPtr sax;
-    xmlParserCtxtPtr parserCtxt;
-    void *user_data; /* TODO: What is this for? */
-    char *filename;
-
-    int err;
-    int nberrors;
-
-    xmlNodePtr node;
-    xmlNodePtr cur;
-    /* xmlSchemaTypePtr type; */
-
-    xmlRegExecCtxtPtr regexp;
-    xmlSchemaValPtr value;
-
-    int valueWS;
-    int options;
-    xmlNodePtr validationRoot;
-    xmlSchemaParserCtxtPtr pctxt;
-    int xsiAssemble;
-
-    int depth;
-    xmlSchemaNodeInfoPtr *elemInfos; /* array of element informations */
-    int sizeElemInfos;
-    xmlSchemaNodeInfoPtr inode; /* the current element information */
-
-    xmlSchemaIDCAugPtr aidcs; /* a list of augmented IDC informations */
-
-    xmlSchemaIDCStateObjPtr xpathStates; /* first active state object. */
-    xmlSchemaIDCStateObjPtr xpathStatePool; /* first stored state object. */
-    xmlSchemaIDCMatcherPtr idcMatcherCache; /* Cache for IDC matcher objects. */
-
-    xmlSchemaPSVIIDCNodePtr *idcNodes; /* list of all IDC node-table entries*/
-    int nbIdcNodes;
-    int sizeIdcNodes;
-
-    xmlSchemaPSVIIDCKeyPtr *idcKeys; /* list of all IDC node-table entries */
-    int nbIdcKeys;
-    int sizeIdcKeys;
-
-    int flags;
-
-    xmlDictPtr dict;
-
-#ifdef LIBXML_READER_ENABLED
-    xmlTextReaderPtr reader;
-#endif
-
-    xmlSchemaAttrInfoPtr *attrInfos;
-    int nbAttrInfos;
-    int sizeAttrInfos;
-
-    int skipDepth;
-    xmlSchemaItemListPtr nodeQNames;
-    int hasKeyrefs;
-    int createIDCNodeTables;
-    int psviExposeIDCNodeTables;
-
-    /* Locator for error reporting in streaming mode */
-    xmlSchemaValidityLocatorFunc locFunc;
-    void *locCtxt;
-};
-
-/**
- * xmlSchemaSubstGroup:
- *
- *
- */
-typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup;
-typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr;
-struct _xmlSchemaSubstGroup {
-    xmlSchemaElementPtr head;
-    xmlSchemaItemListPtr members;
-};
-
-/************************************************************************
- *									*
- *			Some predeclarations				*
- *									*
- ************************************************************************/
-
-static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,
-                                 xmlSchemaPtr schema,
-                                 xmlNodePtr node);
-static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt,
-                                 xmlSchemaPtr schema,
-                                 xmlNodePtr node);
-static int
-xmlSchemaTypeFixup(xmlSchemaTypePtr type,
-                   xmlSchemaAbstractCtxtPtr ctxt);
-static const xmlChar *
-xmlSchemaFacetTypeToString(xmlSchemaTypeType type);
-static int
-xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                     xmlNodePtr node);
-static int
-xmlSchemaCheckFacetValues(xmlSchemaTypePtr typeDecl,
-                       xmlSchemaParserCtxtPtr ctxt);
-static void
-xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt);
-static xmlSchemaWhitespaceValueType
-xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type);
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-			 xmlNodePtr node, xmlSchemaTypeType type,
-			 int withParticle);
-static const xmlChar *
-xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item);
-static xmlSchemaTypeLinkPtr
-xmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type);
-static void
-xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
-		     const char *funcName,
-		     const char *message) LIBXML_ATTR_FORMAT(3,0);
-static int
-xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr ctxt,
-			     xmlSchemaTypePtr type,
-			     xmlSchemaTypePtr baseType,
-			     int subset);
-static void
-xmlSchemaCheckElementDeclComponent(xmlSchemaElementPtr elemDecl,
-				   xmlSchemaParserCtxtPtr ctxt);
-static void
-xmlSchemaComponentListFree(xmlSchemaItemListPtr list);
-static xmlSchemaQNameRefPtr
-xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
-				xmlSchemaPtr schema,
-				xmlNodePtr node);
-
-/************************************************************************
- *									*
- *			Helper functions			        *
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaItemTypeToStr:
- * @type: the type of the schema item
- *
- * Returns the component name of a schema item.
- */
-static const xmlChar *
-xmlSchemaItemTypeToStr(xmlSchemaTypeType type)
-{
-    switch (type) {
-	case XML_SCHEMA_TYPE_BASIC:
-	    return(BAD_CAST "simple type definition");
-	case XML_SCHEMA_TYPE_SIMPLE:
-	    return(BAD_CAST "simple type definition");
-	case XML_SCHEMA_TYPE_COMPLEX:
-	    return(BAD_CAST "complex type definition");
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return(BAD_CAST "element declaration");
-	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-	    return(BAD_CAST "attribute use");
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    return(BAD_CAST "attribute declaration");
-	case XML_SCHEMA_TYPE_GROUP:
-	    return(BAD_CAST "model group definition");
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    return(BAD_CAST "attribute group definition");
-	case XML_SCHEMA_TYPE_NOTATION:
-	    return(BAD_CAST "notation declaration");
-	case XML_SCHEMA_TYPE_SEQUENCE:
-	    return(BAD_CAST "model group (sequence)");
-	case XML_SCHEMA_TYPE_CHOICE:
-	    return(BAD_CAST "model group (choice)");
-	case XML_SCHEMA_TYPE_ALL:
-	    return(BAD_CAST "model group (all)");
-	case XML_SCHEMA_TYPE_PARTICLE:
-	    return(BAD_CAST "particle");
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	    return(BAD_CAST "unique identity-constraint");
-	    /* return(BAD_CAST "IDC (unique)"); */
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	    return(BAD_CAST "key identity-constraint");
-	    /* return(BAD_CAST "IDC (key)"); */
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    return(BAD_CAST "keyref identity-constraint");
-	    /* return(BAD_CAST "IDC (keyref)"); */
-	case XML_SCHEMA_TYPE_ANY:
-	    return(BAD_CAST "wildcard (any)");
-	case XML_SCHEMA_EXTRA_QNAMEREF:
-	    return(BAD_CAST "[helper component] QName reference");
-	case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
-	    return(BAD_CAST "[helper component] attribute use prohibition");
-	default:
-	    return(BAD_CAST "Not a schema component");
-    }
-}
-
-/**
- * xmlSchemaGetComponentTypeStr:
- * @type: the type of the schema item
- *
- * Returns the component name of a schema item.
- */
-static const xmlChar *
-xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_BASIC:
-	    if (WXS_IS_COMPLEX(WXS_TYPE_CAST item))
-		return(BAD_CAST "complex type definition");
-	    else
-		return(BAD_CAST "simple type definition");
-	default:
-	    return(xmlSchemaItemTypeToStr(item->type));
-    }
-}
-
-/**
- * xmlSchemaGetComponentNode:
- * @item: a schema component
- *
- * Returns node associated with the schema component.
- * NOTE that such a node need not be available; plus, a component's
- * node need not to reflect the component directly, since there is no
- * one-to-one relationship between the XML Schema representation and
- * the component representation.
- */
-static xmlNodePtr
-xmlSchemaGetComponentNode(xmlSchemaBasicItemPtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return (((xmlSchemaElementPtr) item)->node);
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    return (((xmlSchemaAttributePtr) item)->node);
-	case XML_SCHEMA_TYPE_COMPLEX:
-	case XML_SCHEMA_TYPE_SIMPLE:
-	    return (((xmlSchemaTypePtr) item)->node);
-	case XML_SCHEMA_TYPE_ANY:
-	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
-	    return (((xmlSchemaWildcardPtr) item)->node);
-	case XML_SCHEMA_TYPE_PARTICLE:
-	    return (((xmlSchemaParticlePtr) item)->node);
-	case XML_SCHEMA_TYPE_SEQUENCE:
-	case XML_SCHEMA_TYPE_CHOICE:
-	case XML_SCHEMA_TYPE_ALL:
-	    return (((xmlSchemaModelGroupPtr) item)->node);
-	case XML_SCHEMA_TYPE_GROUP:
-	    return (((xmlSchemaModelGroupDefPtr) item)->node);
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    return (((xmlSchemaAttributeGroupPtr) item)->node);
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    return (((xmlSchemaIDCPtr) item)->node);
-	case XML_SCHEMA_EXTRA_QNAMEREF:
-	    return(((xmlSchemaQNameRefPtr) item)->node);
-	/* TODO: What to do with NOTATIONs?
-	case XML_SCHEMA_TYPE_NOTATION:
-	    return (((xmlSchemaNotationPtr) item)->node);
-	*/
-	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-	    return (((xmlSchemaAttributeUsePtr) item)->node);
-	default:
-	    return (NULL);
-    }
-}
-
-#if 0
-/**
- * xmlSchemaGetNextComponent:
- * @item: a schema component
- *
- * Returns the next sibling of the schema component.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaGetNextComponent(xmlSchemaBasicItemPtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaElementPtr) item)->next);
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributePtr) item)->next);
-	case XML_SCHEMA_TYPE_COMPLEX:
-	case XML_SCHEMA_TYPE_SIMPLE:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaTypePtr) item)->next);
-	case XML_SCHEMA_TYPE_ANY:
-	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
-	    return (NULL);
-	case XML_SCHEMA_TYPE_PARTICLE:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaParticlePtr) item)->next);
-	case XML_SCHEMA_TYPE_SEQUENCE:
-	case XML_SCHEMA_TYPE_CHOICE:
-	case XML_SCHEMA_TYPE_ALL:
-	    return (NULL);
-	case XML_SCHEMA_TYPE_GROUP:
-	    return (NULL);
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributeGroupPtr) item)->next);
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaIDCPtr) item)->next);
-	default:
-	    return (NULL);
-    }
-}
-#endif
-
-
-/**
- * xmlSchemaFormatQName:
- * @buf: the string buffer
- * @namespaceName:  the namespace name
- * @localName: the local name
- *
- * Returns the given QName in the format "{namespaceName}localName" or
- * just "localName" if @namespaceName is NULL.
- *
- * Returns the localName if @namespaceName is NULL, a formatted
- * string otherwise.
- */
-static const xmlChar*
-xmlSchemaFormatQName(xmlChar **buf,
-		     const xmlChar *namespaceName,
-		     const xmlChar *localName)
-{
-    FREE_AND_NULL(*buf)
-    if (namespaceName != NULL) {
-	*buf = xmlStrdup(BAD_CAST "{");
-	*buf = xmlStrcat(*buf, namespaceName);
-	*buf = xmlStrcat(*buf, BAD_CAST "}");
-    }
-    if (localName != NULL) {
-	if (namespaceName == NULL)
-	    return(localName);
-	*buf = xmlStrcat(*buf, localName);
-    } else {
-	*buf = xmlStrcat(*buf, BAD_CAST "(NULL)");
-    }
-    return ((const xmlChar *) *buf);
-}
-
-static const xmlChar*
-xmlSchemaFormatQNameNs(xmlChar **buf, xmlNsPtr ns, const xmlChar *localName)
-{
-    if (ns != NULL)
-	return (xmlSchemaFormatQName(buf, ns->href, localName));
-    else
-	return (xmlSchemaFormatQName(buf, NULL, localName));
-}
-
-static const xmlChar *
-xmlSchemaGetComponentName(xmlSchemaBasicItemPtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return (((xmlSchemaElementPtr) item)->name);
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    return (((xmlSchemaAttributePtr) item)->name);
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    return (((xmlSchemaAttributeGroupPtr) item)->name);
-	case XML_SCHEMA_TYPE_BASIC:
-	case XML_SCHEMA_TYPE_SIMPLE:
-	case XML_SCHEMA_TYPE_COMPLEX:
-	    return (((xmlSchemaTypePtr) item)->name);
-	case XML_SCHEMA_TYPE_GROUP:
-	    return (((xmlSchemaModelGroupDefPtr) item)->name);
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    return (((xmlSchemaIDCPtr) item)->name);
-	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-	    if (WXS_ATTRUSE_DECL(item) != NULL) {
-		return(xmlSchemaGetComponentName(
-		    WXS_BASIC_CAST WXS_ATTRUSE_DECL(item)));
-	    } else
-		return(NULL);
-	case XML_SCHEMA_EXTRA_QNAMEREF:
-	    return (((xmlSchemaQNameRefPtr) item)->name);
-	case XML_SCHEMA_TYPE_NOTATION:
-	    return (((xmlSchemaNotationPtr) item)->name);
-	default:
-	    /*
-	    * Other components cannot have names.
-	    */
-	    break;
-    }
-    return (NULL);
-}
-
-#define xmlSchemaGetQNameRefName(r) (WXS_QNAME_CAST (r))->name
-#define xmlSchemaGetQNameRefTargetNs(r) (WXS_QNAME_CAST (r))->targetNamespace
-/*
-static const xmlChar *
-xmlSchemaGetQNameRefName(void *ref)
-{
-    return(((xmlSchemaQNameRefPtr) ref)->name);
-}
-
-static const xmlChar *
-xmlSchemaGetQNameRefTargetNs(void *ref)
-{
-    return(((xmlSchemaQNameRefPtr) ref)->targetNamespace);
-}
-*/
-
-static const xmlChar *
-xmlSchemaGetComponentTargetNs(xmlSchemaBasicItemPtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return (((xmlSchemaElementPtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    return (((xmlSchemaAttributePtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    return (((xmlSchemaAttributeGroupPtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_BASIC:
-	    return (BAD_CAST "http://www.w3.org/2001/XMLSchema");
-	case XML_SCHEMA_TYPE_SIMPLE:
-	case XML_SCHEMA_TYPE_COMPLEX:
-	    return (((xmlSchemaTypePtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_GROUP:
-	    return (((xmlSchemaModelGroupDefPtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    return (((xmlSchemaIDCPtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-	    if (WXS_ATTRUSE_DECL(item) != NULL) {
-		return(xmlSchemaGetComponentTargetNs(
-		    WXS_BASIC_CAST WXS_ATTRUSE_DECL(item)));
-	    }
-	    /* TODO: Will returning NULL break something? */
-	    break;
-	case XML_SCHEMA_EXTRA_QNAMEREF:
-	    return (((xmlSchemaQNameRefPtr) item)->targetNamespace);
-	case XML_SCHEMA_TYPE_NOTATION:
-	    return (((xmlSchemaNotationPtr) item)->targetNamespace);
-	default:
-	    /*
-	    * Other components cannot have names.
-	    */
-	    break;
-    }
-    return (NULL);
-}
-
-static const xmlChar*
-xmlSchemaGetComponentQName(xmlChar **buf,
-			   void *item)
-{
-    return (xmlSchemaFormatQName(buf,
-	xmlSchemaGetComponentTargetNs((xmlSchemaBasicItemPtr) item),
-	xmlSchemaGetComponentName((xmlSchemaBasicItemPtr) item)));
-}
-
-static const xmlChar*
-xmlSchemaGetComponentDesignation(xmlChar **buf, void *item)
-{
-    xmlChar *str = NULL;
-
-    *buf = xmlStrcat(*buf, WXS_ITEM_TYPE_NAME(item));
-    *buf = xmlStrcat(*buf, BAD_CAST " '");
-    *buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str,
-	(xmlSchemaBasicItemPtr) item));
-    *buf = xmlStrcat(*buf, BAD_CAST "'");
-    FREE_AND_NULL(str);
-    return(*buf);
-}
-
-static const xmlChar*
-xmlSchemaGetIDCDesignation(xmlChar **buf, xmlSchemaIDCPtr idc)
-{
-    return(xmlSchemaGetComponentDesignation(buf, idc));
-}
-
-/**
- * xmlSchemaWildcardPCToString:
- * @pc: the type of processContents
- *
- * Returns a string representation of the type of
- * processContents.
- */
-static const xmlChar *
-xmlSchemaWildcardPCToString(int pc)
-{
-    switch (pc) {
-	case XML_SCHEMAS_ANY_SKIP:
-	    return (BAD_CAST "skip");
-	case XML_SCHEMAS_ANY_LAX:
-	    return (BAD_CAST "lax");
-	case XML_SCHEMAS_ANY_STRICT:
-	    return (BAD_CAST "strict");
-	default:
-	    return (BAD_CAST "invalid process contents");
-    }
-}
-
-/**
- * xmlSchemaGetCanonValueWhtspExt:
- * @val: the precomputed value
- * @retValue: the returned value
- * @ws: the whitespace type of the value
- *
- * Get a the canonical representation of the value.
- * The caller has to free the returned retValue.
- *
- * Returns 0 if the value could be built and -1 in case of
- *         API errors or if the value type is not supported yet.
- */
-static int
-xmlSchemaGetCanonValueWhtspExt(xmlSchemaValPtr val,
-			       xmlSchemaWhitespaceValueType ws,
-			       xmlChar **retValue)
-{
-    int list;
-    xmlSchemaValType valType;
-    const xmlChar *value, *value2 = NULL;
-
-
-    if ((retValue == NULL) || (val == NULL))
-	return (-1);
-    list = xmlSchemaValueGetNext(val) ? 1 : 0;
-    *retValue = NULL;
-    do {
-	value = NULL;
-	valType = xmlSchemaGetValType(val);
-	switch (valType) {
-	    case XML_SCHEMAS_STRING:
-	    case XML_SCHEMAS_NORMSTRING:
-	    case XML_SCHEMAS_ANYSIMPLETYPE:
-		value = xmlSchemaValueGetAsString(val);
-		if (value != NULL) {
-		    if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			value2 = xmlSchemaCollapseString(value);
-		    else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
-			value2 = xmlSchemaWhiteSpaceReplace(value);
-		    if (value2 != NULL)
-			value = value2;
-		}
-		break;
-	    default:
-		if (xmlSchemaGetCanonValue(val, &value2) == -1) {
-		    if (value2 != NULL)
-			xmlFree((xmlChar *) value2);
-		    goto internal_error;
-		}
-		value = value2;
-	}
-	if (*retValue == NULL)
-	    if (value == NULL) {
-		if (! list)
-		    *retValue = xmlStrdup(BAD_CAST "");
-	    } else
-		*retValue = xmlStrdup(value);
-	else if (value != NULL) {
-	    /* List. */
-	    *retValue = xmlStrcat((xmlChar *) *retValue, BAD_CAST " ");
-	    *retValue = xmlStrcat((xmlChar *) *retValue, value);
-	}
-	FREE_AND_NULL(value2)
-	val = xmlSchemaValueGetNext(val);
-    } while (val != NULL);
-
-    return (0);
-internal_error:
-    if (*retValue != NULL)
-	xmlFree((xmlChar *) (*retValue));
-    if (value2 != NULL)
-	xmlFree((xmlChar *) value2);
-    return (-1);
-}
-
-/**
- * xmlSchemaFormatItemForReport:
- * @buf: the string buffer
- * @itemDes: the designation of the item
- * @itemName: the name of the item
- * @item: the item as an object
- * @itemNode: the node of the item
- * @local: the local name
- * @parsing: if the function is used during the parse
- *
- * Returns a representation of the given item used
- * for error reports.
- *
- * The following order is used to build the resulting
- * designation if the arguments are not NULL:
- * 1a. If itemDes not NULL -> itemDes
- * 1b. If (itemDes not NULL) and (itemName not NULL)
- *     -> itemDes + itemName
- * 2. If the preceding was NULL and (item not NULL) -> item
- * 3. If the preceding was NULL and (itemNode not NULL) -> itemNode
- *
- * If the itemNode is an attribute node, the name of the attribute
- * will be appended to the result.
- *
- * Returns the formatted string and sets @buf to the resulting value.
- */
-static xmlChar*
-xmlSchemaFormatItemForReport(xmlChar **buf,
-		     const xmlChar *itemDes,
-		     xmlSchemaBasicItemPtr item,
-		     xmlNodePtr itemNode)
-{
-    xmlChar *str = NULL;
-    int named = 1;
-
-    if (*buf != NULL) {
-	xmlFree(*buf);
-	*buf = NULL;
-    }
-
-    if (itemDes != NULL) {
-	*buf = xmlStrdup(itemDes);
-    } else if (item != NULL) {
-	switch (item->type) {
-	case XML_SCHEMA_TYPE_BASIC: {
-	    xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
-	    if (WXS_IS_ATOMIC(type))
-		*buf = xmlStrdup(BAD_CAST "atomic type 'xs:");
-	    else if (WXS_IS_LIST(type))
-		*buf = xmlStrdup(BAD_CAST "list type 'xs:");
-	    else if (WXS_IS_UNION(type))
-		*buf = xmlStrdup(BAD_CAST "union type 'xs:");
-	    else
-		*buf = xmlStrdup(BAD_CAST "simple type 'xs:");
-	    *buf = xmlStrcat(*buf, type->name);
-	    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_SIMPLE: {
-	    xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
-	    if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
-		*buf = xmlStrdup(BAD_CAST"");
-	    } else {
-		*buf = xmlStrdup(BAD_CAST "local ");
-	    }
-	    if (WXS_IS_ATOMIC(type))
-		*buf = xmlStrcat(*buf, BAD_CAST "atomic type");
-	    else if (WXS_IS_LIST(type))
-		*buf = xmlStrcat(*buf, BAD_CAST "list type");
-	    else if (WXS_IS_UNION(type))
-		*buf = xmlStrcat(*buf, BAD_CAST "union type");
-	    else
-		*buf = xmlStrcat(*buf, BAD_CAST "simple type");
-	    if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, type->name);
-		*buf = xmlStrcat(*buf, BAD_CAST "'");
-	    }
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_COMPLEX: {
-	    xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
-	    if (type->flags & XML_SCHEMAS_TYPE_GLOBAL)
-		*buf = xmlStrdup(BAD_CAST "");
-	    else
-		*buf = xmlStrdup(BAD_CAST "local ");
-	    *buf = xmlStrcat(*buf, BAD_CAST "complex type");
-	    if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, type->name);
-		*buf = xmlStrcat(*buf, BAD_CAST "'");
-	    }
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTE_USE: {
-		xmlSchemaAttributeUsePtr ause;
-
-		ause = WXS_ATTR_USE_CAST item;
-		*buf = xmlStrdup(BAD_CAST "attribute use ");
-		if (WXS_ATTRUSE_DECL(ause) != NULL) {
-		    *buf = xmlStrcat(*buf, BAD_CAST "'");
-		    *buf = xmlStrcat(*buf,
-			xmlSchemaGetComponentQName(&str, WXS_ATTRUSE_DECL(ause)));
-		    FREE_AND_NULL(str)
-			*buf = xmlStrcat(*buf, BAD_CAST "'");
-		} else {
-		    *buf = xmlStrcat(*buf, BAD_CAST "(unknown)");
-		}
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTE: {
-		xmlSchemaAttributePtr attr;
-
-		attr = (xmlSchemaAttributePtr) item;
-		*buf = xmlStrdup(BAD_CAST "attribute decl.");
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
-		    attr->targetNamespace, attr->name));
-		FREE_AND_NULL(str)
-		    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    xmlSchemaGetComponentDesignation(buf, item);
-	    break;
-	case XML_SCHEMA_TYPE_ELEMENT: {
-		xmlSchemaElementPtr elem;
-
-		elem = (xmlSchemaElementPtr) item;
-		*buf = xmlStrdup(BAD_CAST "element decl.");
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
-		    elem->targetNamespace, elem->name));
-		*buf = xmlStrcat(*buf, BAD_CAST "'");
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	    if (item->type == XML_SCHEMA_TYPE_IDC_UNIQUE)
-		*buf = xmlStrdup(BAD_CAST "unique '");
-	    else if (item->type == XML_SCHEMA_TYPE_IDC_KEY)
-		*buf = xmlStrdup(BAD_CAST "key '");
-	    else
-		*buf = xmlStrdup(BAD_CAST "keyRef '");
-	    *buf = xmlStrcat(*buf, ((xmlSchemaIDCPtr) item)->name);
-	    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	    break;
-	case XML_SCHEMA_TYPE_ANY:
-	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
-	    *buf = xmlStrdup(xmlSchemaWildcardPCToString(
-		    ((xmlSchemaWildcardPtr) item)->processContents));
-	    *buf = xmlStrcat(*buf, BAD_CAST " wildcard");
-	    break;
-	case XML_SCHEMA_FACET_MININCLUSIVE:
-	case XML_SCHEMA_FACET_MINEXCLUSIVE:
-	case XML_SCHEMA_FACET_MAXINCLUSIVE:
-	case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-	case XML_SCHEMA_FACET_TOTALDIGITS:
-	case XML_SCHEMA_FACET_FRACTIONDIGITS:
-	case XML_SCHEMA_FACET_PATTERN:
-	case XML_SCHEMA_FACET_ENUMERATION:
-	case XML_SCHEMA_FACET_WHITESPACE:
-	case XML_SCHEMA_FACET_LENGTH:
-	case XML_SCHEMA_FACET_MAXLENGTH:
-	case XML_SCHEMA_FACET_MINLENGTH:
-	    *buf = xmlStrdup(BAD_CAST "facet '");
-	    *buf = xmlStrcat(*buf, xmlSchemaFacetTypeToString(item->type));
-	    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	    break;
-	case XML_SCHEMA_TYPE_GROUP: {
-		*buf = xmlStrdup(BAD_CAST "model group def.");
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str, item));
-		*buf = xmlStrcat(*buf, BAD_CAST "'");
-		FREE_AND_NULL(str)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_SEQUENCE:
-	case XML_SCHEMA_TYPE_CHOICE:
-	case XML_SCHEMA_TYPE_ALL:
-	case XML_SCHEMA_TYPE_PARTICLE:
-	    *buf = xmlStrdup(WXS_ITEM_TYPE_NAME(item));
-	    break;
-	case XML_SCHEMA_TYPE_NOTATION: {
-		*buf = xmlStrdup(WXS_ITEM_TYPE_NAME(item));
-		*buf = xmlStrcat(*buf, BAD_CAST " '");
-		*buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str, item));
-		*buf = xmlStrcat(*buf, BAD_CAST "'");
-		FREE_AND_NULL(str);
-	    }
-	default:
-	    named = 0;
-	}
-    } else
-	named = 0;
-
-    if ((named == 0) && (itemNode != NULL)) {
-	xmlNodePtr elem;
-
-	if (itemNode->type == XML_ATTRIBUTE_NODE)
-	    elem = itemNode->parent;
-	else
-	    elem = itemNode;
-	*buf = xmlStrdup(BAD_CAST "Element '");
-	if (elem->ns != NULL) {
-	    *buf = xmlStrcat(*buf,
-		xmlSchemaFormatQName(&str, elem->ns->href, elem->name));
-	    FREE_AND_NULL(str)
-	} else
-	    *buf = xmlStrcat(*buf, elem->name);
-	*buf = xmlStrcat(*buf, BAD_CAST "'");
-
-    }
-    if ((itemNode != NULL) && (itemNode->type == XML_ATTRIBUTE_NODE)) {
-	*buf = xmlStrcat(*buf, BAD_CAST ", attribute '");
-	if (itemNode->ns != NULL) {
-	    *buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
-		itemNode->ns->href, itemNode->name));
-	    FREE_AND_NULL(str)
-	} else
-	    *buf = xmlStrcat(*buf, itemNode->name);
-	*buf = xmlStrcat(*buf, BAD_CAST "'");
-    }
-    FREE_AND_NULL(str)
-
-    return (xmlEscapeFormatString(buf));
-}
-
-/**
- * xmlSchemaFormatFacetEnumSet:
- * @buf: the string buffer
- * @type: the type holding the enumeration facets
- *
- * Builds a string consisting of all enumeration elements.
- *
- * Returns a string of all enumeration elements.
- */
-static const xmlChar *
-xmlSchemaFormatFacetEnumSet(xmlSchemaAbstractCtxtPtr actxt,
-			    xmlChar **buf, xmlSchemaTypePtr type)
-{
-    xmlSchemaFacetPtr facet;
-    xmlSchemaWhitespaceValueType ws;
-    xmlChar *value = NULL;
-    int res, found = 0;
-
-    if (*buf != NULL)
-	xmlFree(*buf);
-    *buf = NULL;
-
-    do {
-	/*
-	* Use the whitespace type of the base type.
-	*/
-	ws = xmlSchemaGetWhiteSpaceFacetValue(type->baseType);
-	for (facet = type->facets; facet != NULL; facet = facet->next) {
-	    if (facet->type != XML_SCHEMA_FACET_ENUMERATION)
-		continue;
-	    found = 1;
-	    res = xmlSchemaGetCanonValueWhtspExt(facet->val,
-		ws, &value);
-	    if (res == -1) {
-		xmlSchemaInternalErr(actxt,
-		    "xmlSchemaFormatFacetEnumSet",
-		    "compute the canonical lexical representation");
-		if (*buf != NULL)
-		    xmlFree(*buf);
-		*buf = NULL;
-		return (NULL);
-	    }
-	    if (*buf == NULL)
-		*buf = xmlStrdup(BAD_CAST "'");
-	    else
-		*buf = xmlStrcat(*buf, BAD_CAST ", '");
-	    *buf = xmlStrcat(*buf, BAD_CAST value);
-	    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	    if (value != NULL) {
-		xmlFree((xmlChar *)value);
-		value = NULL;
-	    }
-	}
-	/*
-	* The enumeration facet of a type restricts the enumeration
-	* facet of the ancestor type; i.e., such restricted enumerations
-	* do not belong to the set of the given type. Thus we break
-	* on the first found enumeration.
-	*/
-	if (found)
-	    break;
-	type = type->baseType;
-    } while ((type != NULL) && (type->type != XML_SCHEMA_TYPE_BASIC));
-
-    return ((const xmlChar *) *buf);
-}
-
-/************************************************************************
- *									*
- *			Error functions				        *
- *									*
- ************************************************************************/
-
-#if 0
-static void
-xmlSchemaErrMemory(const char *msg)
-{
-    __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL,
-                     msg);
-}
-#endif
-
-static void
-xmlSchemaPSimpleErr(const char *msg)
-{
-    __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL,
-                     msg);
-}
-
-/**
- * xmlSchemaPErrMemory:
- * @node: a context node
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaPErrMemory(xmlSchemaParserCtxtPtr ctxt,
-                    const char *extra, xmlNodePtr node)
-{
-    if (ctxt != NULL)
-        ctxt->nberrors++;
-    __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
-                     extra);
-}
-
-/**
- * xmlSchemaPErr:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaPErr(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error,
-              const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
-    xmlGenericErrorFunc channel = NULL;
-    xmlStructuredErrorFunc schannel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        ctxt->nberrors++;
-	ctxt->err = error;
-        channel = ctxt->error;
-        data = ctxt->errCtxt;
-	schannel = ctxt->serror;
-    }
-    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
-                    error, XML_ERR_ERROR, NULL, 0,
-                    (const char *) str1, (const char *) str2, NULL, 0, 0,
-                    msg, str1, str2);
-}
-
-/**
- * xmlSchemaPErr2:
- * @ctxt: the parsing context
- * @node: the context node
- * @node: the current child
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPErr2(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
-               xmlNodePtr child, int error,
-               const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
-    if (child != NULL)
-        xmlSchemaPErr(ctxt, child, error, msg, str1, str2);
-    else
-        xmlSchemaPErr(ctxt, node, error, msg, str1, str2);
-}
-
-
-/**
- * xmlSchemaPErrExt:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @strData1: extra data
- * @strData2: extra data
- * @strData3: extra data
- * @msg: the message
- * @str1:  extra parameter for the message display
- * @str2:  extra parameter for the message display
- * @str3:  extra parameter for the message display
- * @str4:  extra parameter for the message display
- * @str5:  extra parameter for the message display
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(7,0)
-xmlSchemaPErrExt(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error,
-		const xmlChar * strData1, const xmlChar * strData2,
-		const xmlChar * strData3, const char *msg, const xmlChar * str1,
-		const xmlChar * str2, const xmlChar * str3, const xmlChar * str4,
-		const xmlChar * str5)
-{
-
-    xmlGenericErrorFunc channel = NULL;
-    xmlStructuredErrorFunc schannel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-        ctxt->nberrors++;
-	ctxt->err = error;
-        channel = ctxt->error;
-        data = ctxt->errCtxt;
-	schannel = ctxt->serror;
-    }
-    __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
-                    error, XML_ERR_ERROR, NULL, 0,
-                    (const char *) strData1, (const char *) strData2,
-		    (const char *) strData3, 0, 0, msg, str1, str2,
-		    str3, str4, str5);
-}
-
-/************************************************************************
- *									*
- *			Allround error functions			*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaVTypeErrMemory:
- * @node: a context node
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaVErrMemory(xmlSchemaValidCtxtPtr ctxt,
-                    const char *extra, xmlNodePtr node)
-{
-    if (ctxt != NULL) {
-        ctxt->nberrors++;
-        ctxt->err = XML_SCHEMAV_INTERNAL;
-    }
-    __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
-                     extra);
-}
-
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlSchemaPSimpleInternalErr(xmlNodePtr node,
-			    const char *msg, const xmlChar *str)
-{
-     __xmlSimpleError(XML_FROM_SCHEMASP, XML_SCHEMAP_INTERNAL, node,
-	 msg, (const char *) str);
-}
-
-#define WXS_ERROR_TYPE_ERROR 1
-#define WXS_ERROR_TYPE_WARNING 2
-/**
- * xmlSchemaErr4Line:
- * @ctxt: the validation context
- * @errorLevel: the error level
- * @error: the error code
- * @node: the context node
- * @line: the line number
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- * @str3: extra data
- * @str4: extra data
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(6,0)
-xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt,
-		  xmlErrorLevel errorLevel,
-		  int error, xmlNodePtr node, int line, const char *msg,
-		  const xmlChar *str1, const xmlChar *str2,
-		  const xmlChar *str3, const xmlChar *str4)
-{
-    xmlStructuredErrorFunc schannel = NULL;
-    xmlGenericErrorFunc channel = NULL;
-    void *data = NULL;
-
-    if (ctxt != NULL) {
-	if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
-	    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt;
-	    const char *file = NULL;
-	    int col = 0;
-	    if (errorLevel != XML_ERR_WARNING) {
-		vctxt->nberrors++;
-		vctxt->err = error;
-		channel = vctxt->error;
-	    } else {
-		channel = vctxt->warning;
-	    }
-	    schannel = vctxt->serror;
-	    data = vctxt->errCtxt;
-
-	    /*
-	    * Error node. If we specify a line number, then
-	    * do not channel any node to the error function.
-	    */
-	    if (line == 0) {
-		if ((node == NULL) &&
-		    (vctxt->depth >= 0) &&
-		    (vctxt->inode != NULL)) {
-		    node = vctxt->inode->node;
-		}
-		/*
-		* Get filename and line if no node-tree.
-		*/
-		if ((node == NULL) &&
-		    (vctxt->parserCtxt != NULL) &&
-		    (vctxt->parserCtxt->input != NULL)) {
-		    file = vctxt->parserCtxt->input->filename;
-		    line = vctxt->parserCtxt->input->line;
-		    col = vctxt->parserCtxt->input->col;
-		}
-	    } else {
-		/*
-		* Override the given node's (if any) position
-		* and channel only the given line number.
-		*/
-		node = NULL;
-		/*
-		* Get filename.
-		*/
-		if (vctxt->doc != NULL)
-		    file = (const char *) vctxt->doc->URL;
-		else if ((vctxt->parserCtxt != NULL) &&
-		    (vctxt->parserCtxt->input != NULL))
-		    file = vctxt->parserCtxt->input->filename;
-	    }
-	    if (vctxt->locFunc != NULL) {
-	        if ((file == NULL) || (line == 0)) {
-		    unsigned long l;
-		    const char *f;
-		    vctxt->locFunc(vctxt->locCtxt, &f, &l);
-		    if (file == NULL)
-		        file = f;
-		    if (line == 0)
-		        line = (int) l;
-		}
-	    }
-	    if ((file == NULL) && (vctxt->filename != NULL))
-	        file = vctxt->filename;
-
-	    __xmlRaiseError(schannel, channel, data, ctxt,
-		node, XML_FROM_SCHEMASV,
-		error, errorLevel, file, line,
-		(const char *) str1, (const char *) str2,
-		(const char *) str3, 0, col, msg, str1, str2, str3, str4);
-
-	} else if (ctxt->type == XML_SCHEMA_CTXT_PARSER) {
-	    xmlSchemaParserCtxtPtr pctxt = (xmlSchemaParserCtxtPtr) ctxt;
-	    if (errorLevel != XML_ERR_WARNING) {
-		pctxt->nberrors++;
-		pctxt->err = error;
-		channel = pctxt->error;
-	    } else {
-		channel = pctxt->warning;
-	    }
-	    schannel = pctxt->serror;
-	    data = pctxt->errCtxt;
-	    __xmlRaiseError(schannel, channel, data, ctxt,
-		node, XML_FROM_SCHEMASP, error,
-		errorLevel, NULL, 0,
-		(const char *) str1, (const char *) str2,
-		(const char *) str3, 0, 0, msg, str1, str2, str3, str4);
-	} else {
-	    TODO
-	}
-    }
-}
-
-/**
- * xmlSchemaErr3:
- * @ctxt: the validation context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- * @str3: extra data
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr3(xmlSchemaAbstractCtxtPtr actxt,
-	      int error, xmlNodePtr node, const char *msg,
-	      const xmlChar *str1, const xmlChar *str2, const xmlChar *str3)
-{
-    xmlSchemaErr4Line(actxt, XML_ERR_ERROR, error, node, 0,
-	msg, str1, str2, str3, NULL);
-}
-
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr4(xmlSchemaAbstractCtxtPtr actxt,
-	      int error, xmlNodePtr node, const char *msg,
-	      const xmlChar *str1, const xmlChar *str2,
-	      const xmlChar *str3, const xmlChar *str4)
-{
-    xmlSchemaErr4Line(actxt, XML_ERR_ERROR, error, node, 0,
-	msg, str1, str2, str3, str4);
-}
-
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr(xmlSchemaAbstractCtxtPtr actxt,
-	     int error, xmlNodePtr node, const char *msg,
-	     const xmlChar *str1, const xmlChar *str2)
-{
-    xmlSchemaErr4(actxt, error, node, msg, str1, str2, NULL, NULL);
-}
-
-static xmlChar *
-xmlSchemaFormatNodeForError(xmlChar ** msg,
-			    xmlSchemaAbstractCtxtPtr actxt,
-			    xmlNodePtr node)
-{
-    xmlChar *str = NULL;
-
-    *msg = NULL;
-    if ((node != NULL) &&
-	(node->type != XML_ELEMENT_NODE) &&
-	(node->type != XML_ATTRIBUTE_NODE))
-    {
-	/*
-	* Don't try to format other nodes than element and
-	* attribute nodes.
-	* Play safe and return an empty string.
-	*/
-	*msg = xmlStrdup(BAD_CAST "");
-	return(*msg);
-    }
-    if (node != NULL) {
-	/*
-	* Work on tree nodes.
-	*/
-	if (node->type == XML_ATTRIBUTE_NODE) {
-	    xmlNodePtr elem = node->parent;
-
-	    *msg = xmlStrdup(BAD_CAST "Element '");
-	    if (elem->ns != NULL)
-		*msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-		    elem->ns->href, elem->name));
-	    else
-		*msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-		    NULL, elem->name));
-	    FREE_AND_NULL(str);
-	    *msg = xmlStrcat(*msg, BAD_CAST "', ");
-	    *msg = xmlStrcat(*msg, BAD_CAST "attribute '");
-	} else {
-	    *msg = xmlStrdup(BAD_CAST "Element '");
-	}
-	if (node->ns != NULL)
-	    *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-	    node->ns->href, node->name));
-	else
-	    *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-	    NULL, node->name));
-	FREE_AND_NULL(str);
-	*msg = xmlStrcat(*msg, BAD_CAST "': ");
-    } else if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
-	xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) actxt;
-	/*
-	* Work on node infos.
-	*/
-	if (vctxt->inode->nodeType == XML_ATTRIBUTE_NODE) {
-	    xmlSchemaNodeInfoPtr ielem =
-		vctxt->elemInfos[vctxt->depth];
-
-	    *msg = xmlStrdup(BAD_CAST "Element '");
-	    *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-		ielem->nsName, ielem->localName));
-	    FREE_AND_NULL(str);
-	    *msg = xmlStrcat(*msg, BAD_CAST "', ");
-	    *msg = xmlStrcat(*msg, BAD_CAST "attribute '");
-	} else {
-	    *msg = xmlStrdup(BAD_CAST "Element '");
-	}
-	*msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
-	    vctxt->inode->nsName, vctxt->inode->localName));
-	FREE_AND_NULL(str);
-	*msg = xmlStrcat(*msg, BAD_CAST "': ");
-    } else if (actxt->type == XML_SCHEMA_CTXT_PARSER) {
-	/*
-	* Hmm, no node while parsing?
-	* Return an empty string, in case NULL will break something.
-	*/
-	*msg = xmlStrdup(BAD_CAST "");
-    } else {
-	TODO
-	return (NULL);
-    }
-
-    /*
-     * xmlSchemaFormatItemForReport() also returns an escaped format
-     * string, so do this before calling it below (in the future).
-     */
-    xmlEscapeFormatString(msg);
-
-    /*
-    * VAL TODO: The output of the given schema component is currently
-    * disabled.
-    */
-#if 0
-    if ((type != NULL) && (xmlSchemaIsGlobalItem(type))) {
-	*msg = xmlStrcat(*msg, BAD_CAST " [");
-	*msg = xmlStrcat(*msg, xmlSchemaFormatItemForReport(&str,
-	    NULL, type, NULL, 0));
-	FREE_AND_NULL(str)
-	*msg = xmlStrcat(*msg, BAD_CAST "]");
-    }
-#endif
-    return (*msg);
-}
-
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaInternalErr2(xmlSchemaAbstractCtxtPtr actxt,
-		     const char *funcName,
-		     const char *message,
-		     const xmlChar *str1,
-		     const xmlChar *str2)
-{
-    xmlChar *msg = NULL;
-
-    if (actxt == NULL)
-        return;
-    msg = xmlStrdup(BAD_CAST "Internal error: %s, ");
-    msg = xmlStrcat(msg, BAD_CAST message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-
-    if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR)
-	xmlSchemaErr3(actxt, XML_SCHEMAV_INTERNAL, NULL,
-	    (const char *) msg, (const xmlChar *) funcName, str1, str2);
-    else if (actxt->type == XML_SCHEMA_CTXT_PARSER)
-	xmlSchemaErr3(actxt, XML_SCHEMAP_INTERNAL, NULL,
-	    (const char *) msg, (const xmlChar *) funcName, str1, str2);
-
-    FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
-		     const char *funcName,
-		     const char *message)
-{
-    xmlSchemaInternalErr2(actxt, funcName, message, NULL, NULL);
-}
-
-#if 0
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaPInternalErr(xmlSchemaParserCtxtPtr pctxt,
-		     const char *funcName,
-		     const char *message,
-		     const xmlChar *str1,
-		     const xmlChar *str2)
-{
-    xmlSchemaInternalErr2(ACTXT_CAST pctxt, funcName, message,
-	str1, str2);
-}
-#endif
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomErr4(xmlSchemaAbstractCtxtPtr actxt,
-		   xmlParserErrors error,
-		   xmlNodePtr node,
-		   xmlSchemaBasicItemPtr item,
-		   const char *message,
-		   const xmlChar *str1, const xmlChar *str2,
-		   const xmlChar *str3, const xmlChar *str4)
-{
-    xmlChar *msg = NULL;
-
-    if ((node == NULL) && (item != NULL) &&
-	(actxt->type == XML_SCHEMA_CTXT_PARSER)) {
-	node = WXS_ITEM_NODE(item);
-	xmlSchemaFormatItemForReport(&msg, NULL, item, NULL);
-	msg = xmlStrcat(msg, BAD_CAST ": ");
-    } else
-	xmlSchemaFormatNodeForError(&msg, actxt, node);
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-    xmlSchemaErr4(actxt, error, node,
-	(const char *) msg, str1, str2, str3, str4);
-    FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomErr(xmlSchemaAbstractCtxtPtr actxt,
-		   xmlParserErrors error,
-		   xmlNodePtr node,
-		   xmlSchemaBasicItemPtr item,
-		   const char *message,
-		   const xmlChar *str1,
-		   const xmlChar *str2)
-{
-    xmlSchemaCustomErr4(actxt, error, node, item,
-	message, str1, str2, NULL, NULL);
-}
-
-
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomWarning(xmlSchemaAbstractCtxtPtr actxt,
-		   xmlParserErrors error,
-		   xmlNodePtr node,
-		   xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
-		   const char *message,
-		   const xmlChar *str1,
-		   const xmlChar *str2,
-		   const xmlChar *str3)
-{
-    xmlChar *msg = NULL;
-
-    xmlSchemaFormatNodeForError(&msg, actxt, node);
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-
-    /* URGENT TODO: Set the error code to something sane. */
-    xmlSchemaErr4Line(actxt, XML_ERR_WARNING, error, node, 0,
-	(const char *) msg, str1, str2, str3, NULL);
-
-    FREE_AND_NULL(msg)
-}
-
-
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaKeyrefErr(xmlSchemaValidCtxtPtr vctxt,
-		   xmlParserErrors error,
-		   xmlSchemaPSVIIDCNodePtr idcNode,
-		   xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
-		   const char *message,
-		   const xmlChar *str1,
-		   const xmlChar *str2)
-{
-    xmlChar *msg = NULL, *qname = NULL;
-
-    msg = xmlStrdup(BAD_CAST "Element '%s': ");
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-    xmlSchemaErr4Line(ACTXT_CAST vctxt, XML_ERR_ERROR,
-	error, NULL, idcNode->nodeLine, (const char *) msg,
-	xmlSchemaFormatQName(&qname,
-	    vctxt->nodeQNames->items[idcNode->nodeQNameID +1],
-	    vctxt->nodeQNames->items[idcNode->nodeQNameID]),
-	str1, str2, NULL);
-    FREE_AND_NULL(qname);
-    FREE_AND_NULL(msg);
-}
-
-static int
-xmlSchemaEvalErrorNodeType(xmlSchemaAbstractCtxtPtr actxt,
-			   xmlNodePtr node)
-{
-    if (node != NULL)
-	return (node->type);
-    if ((actxt->type == XML_SCHEMA_CTXT_VALIDATOR) &&
-	(((xmlSchemaValidCtxtPtr) actxt)->inode != NULL))
-	return ( ((xmlSchemaValidCtxtPtr) actxt)->inode->nodeType);
-    return (-1);
-}
-
-static int
-xmlSchemaIsGlobalItem(xmlSchemaTypePtr item)
-{
-    switch (item->type) {
-	case XML_SCHEMA_TYPE_COMPLEX:
-	case XML_SCHEMA_TYPE_SIMPLE:
-	    if (item->flags & XML_SCHEMAS_TYPE_GLOBAL)
-		return(1);
-	    break;
-	case XML_SCHEMA_TYPE_GROUP:
-	    return (1);
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    if ( ((xmlSchemaElementPtr) item)->flags &
-		XML_SCHEMAS_ELEM_GLOBAL)
-		return(1);
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTE:
-	    if ( ((xmlSchemaAttributePtr) item)->flags &
-		XML_SCHEMAS_ATTR_GLOBAL)
-		return(1);
-	    break;
-	/* Note that attribute groups are always global. */
-	default:
-	    return(1);
-    }
-    return (0);
-}
-
-static void
-xmlSchemaSimpleTypeErr(xmlSchemaAbstractCtxtPtr actxt,
-		       xmlParserErrors error,
-		       xmlNodePtr node,
-		       const xmlChar *value,
-		       xmlSchemaTypePtr type,
-		       int displayValue)
-{
-    xmlChar *msg = NULL;
-
-    xmlSchemaFormatNodeForError(&msg, actxt, node);
-
-    if (displayValue || (xmlSchemaEvalErrorNodeType(actxt, node) ==
-	    XML_ATTRIBUTE_NODE))
-	msg = xmlStrcat(msg, BAD_CAST "'%s' is not a valid value of ");
-    else
-	msg = xmlStrcat(msg, BAD_CAST "The character content is not a valid "
-	    "value of ");
-
-    if (! xmlSchemaIsGlobalItem(type))
-	msg = xmlStrcat(msg, BAD_CAST "the local ");
-    else
-	msg = xmlStrcat(msg, BAD_CAST "the ");
-
-    if (WXS_IS_ATOMIC(type))
-	msg = xmlStrcat(msg, BAD_CAST "atomic type");
-    else if (WXS_IS_LIST(type))
-	msg = xmlStrcat(msg, BAD_CAST "list type");
-    else if (WXS_IS_UNION(type))
-	msg = xmlStrcat(msg, BAD_CAST "union type");
-
-    if (xmlSchemaIsGlobalItem(type)) {
-	xmlChar *str = NULL;
-	msg = xmlStrcat(msg, BAD_CAST " '");
-	if (type->builtInType != 0) {
-	    msg = xmlStrcat(msg, BAD_CAST "xs:");
-	    str = xmlStrdup(type->name);
-	} else {
-	    const xmlChar *qName = xmlSchemaFormatQName(&str, type->targetNamespace, type->name);
-	    if (!str)
-		str = xmlStrdup(qName);
-	}
-	msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
-	msg = xmlStrcat(msg, BAD_CAST "'");
-	FREE_AND_NULL(str);
-    }
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-    if (displayValue || (xmlSchemaEvalErrorNodeType(actxt, node) ==
-	    XML_ATTRIBUTE_NODE))
-	xmlSchemaErr(actxt, error, node, (const char *) msg, value, NULL);
-    else
-	xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
-    FREE_AND_NULL(msg)
-}
-
-static const xmlChar *
-xmlSchemaFormatErrorNodeQName(xmlChar ** str,
-			      xmlSchemaNodeInfoPtr ni,
-			      xmlNodePtr node)
-{
-    if (node != NULL) {
-	if (node->ns != NULL)
-	    return (xmlSchemaFormatQName(str, node->ns->href, node->name));
-	else
-	    return (xmlSchemaFormatQName(str, NULL, node->name));
-    } else if (ni != NULL)
-	return (xmlSchemaFormatQName(str, ni->nsName, ni->localName));
-    return (NULL);
-}
-
-static void
-xmlSchemaIllegalAttrErr(xmlSchemaAbstractCtxtPtr actxt,
-			xmlParserErrors error,
-			xmlSchemaAttrInfoPtr ni,
-			xmlNodePtr node)
-{
-    xmlChar *msg = NULL, *str = NULL;
-
-    xmlSchemaFormatNodeForError(&msg, actxt, node);
-    msg = xmlStrcat(msg, BAD_CAST "The attribute '%s' is not allowed.\n");
-    xmlSchemaErr(actxt, error, node, (const char *) msg,
-	xmlSchemaFormatErrorNodeQName(&str, (xmlSchemaNodeInfoPtr) ni, node),
-	NULL);
-    FREE_AND_NULL(str)
-    FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaComplexTypeErr(xmlSchemaAbstractCtxtPtr actxt,
-		        xmlParserErrors error,
-		        xmlNodePtr node,
-			xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
-			const char *message,
-			int nbval,
-			int nbneg,
-			xmlChar **values)
-{
-    xmlChar *str = NULL, *msg = NULL;
-    xmlChar *localName, *nsName;
-    const xmlChar *cur, *end;
-    int i;
-
-    xmlSchemaFormatNodeForError(&msg, actxt, node);
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".");
-    /*
-    * Note that is does not make sense to report that we have a
-    * wildcard here, since the wildcard might be unfolded into
-    * multiple transitions.
-    */
-    if (nbval + nbneg > 0) {
-	if (nbval + nbneg > 1) {
-	    str = xmlStrdup(BAD_CAST " Expected is one of ( ");
-	} else
-	    str = xmlStrdup(BAD_CAST " Expected is ( ");
-	nsName = NULL;
-
-	for (i = 0; i < nbval + nbneg; i++) {
-	    cur = values[i];
-	    if (cur == NULL)
-	        continue;
-	    if ((cur[0] == 'n') && (cur[1] == 'o') && (cur[2] == 't') &&
-	        (cur[3] == ' ')) {
-		cur += 4;
-		str = xmlStrcat(str, BAD_CAST "##other");
-	    }
-	    /*
-	    * Get the local name.
-	    */
-	    localName = NULL;
-
-	    end = cur;
-	    if (*end == '*') {
-		localName = xmlStrdup(BAD_CAST "*");
-		end++;
-	    } else {
-		while ((*end != 0) && (*end != '|'))
-		    end++;
-		localName = xmlStrncat(localName, BAD_CAST cur, end - cur);
-	    }
-	    if (*end != 0) {
-		end++;
-		/*
-		* Skip "*|*" if they come with negated expressions, since
-		* they represent the same negated wildcard.
-		*/
-		if ((nbneg == 0) || (*end != '*') || (*localName != '*')) {
-		    /*
-		    * Get the namespace name.
-		    */
-		    cur = end;
-		    if (*end == '*') {
-			nsName = xmlStrdup(BAD_CAST "{*}");
-		    } else {
-			while (*end != 0)
-			    end++;
-
-			if (i >= nbval)
-			    nsName = xmlStrdup(BAD_CAST "{##other:");
-			else
-			    nsName = xmlStrdup(BAD_CAST "{");
-
-			nsName = xmlStrncat(nsName, BAD_CAST cur, end - cur);
-			nsName = xmlStrcat(nsName, BAD_CAST "}");
-		    }
-		    str = xmlStrcat(str, BAD_CAST nsName);
-		    FREE_AND_NULL(nsName)
-		} else {
-		    FREE_AND_NULL(localName);
-		    continue;
-		}
-	    }
-	    str = xmlStrcat(str, BAD_CAST localName);
-	    FREE_AND_NULL(localName);
-
-	    if (i < nbval + nbneg -1)
-		str = xmlStrcat(str, BAD_CAST ", ");
-	}
-	str = xmlStrcat(str, BAD_CAST " ).\n");
-	msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
-	FREE_AND_NULL(str)
-    } else
-      msg = xmlStrcat(msg, BAD_CAST "\n");
-    xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
-    xmlFree(msg);
-}
-
-static void LIBXML_ATTR_FORMAT(8,0)
-xmlSchemaFacetErr(xmlSchemaAbstractCtxtPtr actxt,
-		  xmlParserErrors error,
-		  xmlNodePtr node,
-		  const xmlChar *value,
-		  unsigned long length,
-		  xmlSchemaTypePtr type,
-		  xmlSchemaFacetPtr facet,
-		  const char *message,
-		  const xmlChar *str1,
-		  const xmlChar *str2)
-{
-    xmlChar *str = NULL, *msg = NULL;
-    xmlSchemaTypeType facetType;
-    int nodeType = xmlSchemaEvalErrorNodeType(actxt, node);
-
-    xmlSchemaFormatNodeForError(&msg, actxt, node);
-    if (error == XML_SCHEMAV_CVC_ENUMERATION_VALID) {
-	facetType = XML_SCHEMA_FACET_ENUMERATION;
-	/*
-	* If enumerations are validated, one must not expect the
-	* facet to be given.
-	*/
-    } else
-	facetType = facet->type;
-    msg = xmlStrcat(msg, BAD_CAST "[");
-    msg = xmlStrcat(msg, BAD_CAST "facet '");
-    msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facetType));
-    msg = xmlStrcat(msg, BAD_CAST "'] ");
-    if (message == NULL) {
-	/*
-	* Use a default message.
-	*/
-	if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
-	    (facetType == XML_SCHEMA_FACET_MINLENGTH) ||
-	    (facetType == XML_SCHEMA_FACET_MAXLENGTH)) {
-
-	    char len[25], actLen[25];
-
-	    /* FIXME, TODO: What is the max expected string length of the
-	    * this value?
-	    */
-	    if (nodeType == XML_ATTRIBUTE_NODE)
-		msg = xmlStrcat(msg, BAD_CAST "The value '%s' has a length of '%s'; ");
-	    else
-		msg = xmlStrcat(msg, BAD_CAST "The value has a length of '%s'; ");
-
-	    snprintf(len, 24, "%lu", xmlSchemaGetFacetValueAsULong(facet));
-	    snprintf(actLen, 24, "%lu", length);
-
-	    if (facetType == XML_SCHEMA_FACET_LENGTH)
-		msg = xmlStrcat(msg,
-		BAD_CAST "this differs from the allowed length of '%s'.\n");
-	    else if (facetType == XML_SCHEMA_FACET_MAXLENGTH)
-		msg = xmlStrcat(msg,
-		BAD_CAST "this exceeds the allowed maximum length of '%s'.\n");
-	    else if (facetType == XML_SCHEMA_FACET_MINLENGTH)
-		msg = xmlStrcat(msg,
-		BAD_CAST "this underruns the allowed minimum length of '%s'.\n");
-
-	    if (nodeType == XML_ATTRIBUTE_NODE)
-		xmlSchemaErr3(actxt, error, node, (const char *) msg,
-		    value, (const xmlChar *) actLen, (const xmlChar *) len);
-	    else
-		xmlSchemaErr(actxt, error, node, (const char *) msg,
-		    (const xmlChar *) actLen, (const xmlChar *) len);
-
-	} else if (facetType == XML_SCHEMA_FACET_ENUMERATION) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not an element "
-		"of the set {%s}.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		xmlSchemaFormatFacetEnumSet(actxt, &str, type));
-	} else if (facetType == XML_SCHEMA_FACET_PATTERN) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not accepted "
-		"by the pattern '%s'.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_MININCLUSIVE) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' is less than the "
-		"minimum value allowed ('%s').\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' is greater than the "
-		"maximum value allowed ('%s').\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' must be greater than "
-		"'%s'.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' must be less than "
-		"'%s'.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_TOTALDIGITS) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' has more "
-		"digits than are allowed ('%s').\n");
-	    xmlSchemaErr(actxt, error, node, (const char*) msg, value,
-		facet->value);
-	} else if (facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' has more fractional "
-		"digits than are allowed ('%s').\n");
-	    xmlSchemaErr(actxt, error, node, (const char*) msg, value,
-		facet->value);
-	} else if (nodeType == XML_ATTRIBUTE_NODE) {
-	    msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not facet-valid.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, value, NULL);
-	} else {
-	    msg = xmlStrcat(msg, BAD_CAST "The value is not facet-valid.\n");
-	    xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
-	}
-    } else {
-	msg = xmlStrcat(msg, (const xmlChar *) message);
-	msg = xmlStrcat(msg, BAD_CAST ".\n");
-	xmlSchemaErr(actxt, error, node, (const char *) msg, str1, str2);
-    }
-    FREE_AND_NULL(str)
-    xmlFree(msg);
-}
-
-#define VERROR(err, type, msg) \
-    xmlSchemaCustomErr(ACTXT_CAST vctxt, err, NULL, type, msg, NULL, NULL);
-
-#define VERROR_INT(func, msg) xmlSchemaInternalErr(ACTXT_CAST vctxt, func, msg);
-
-#define PERROR_INT(func, msg) xmlSchemaInternalErr(ACTXT_CAST pctxt, func, msg);
-#define PERROR_INT2(func, msg) xmlSchemaInternalErr(ACTXT_CAST ctxt, func, msg);
-
-#define AERROR_INT(func, msg) xmlSchemaInternalErr(actxt, func, msg);
-
-
-/**
- * xmlSchemaPMissingAttrErr:
- * @ctxt: the schema validation context
- * @ownerDes: the designation of  the owner
- * @ownerName: the name of the owner
- * @ownerItem: the owner as a schema object
- * @ownerElem: the owner as an element node
- * @node: the parent element node of the missing attribute node
- * @type: the corresponding type of the attribute node
- *
- * Reports an illegal attribute.
- */
-static void
-xmlSchemaPMissingAttrErr(xmlSchemaParserCtxtPtr ctxt,
-			 xmlParserErrors error,
-			 xmlSchemaBasicItemPtr ownerItem,
-			 xmlNodePtr ownerElem,
-			 const char *name,
-			 const char *message)
-{
-    xmlChar *des = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
-
-    if (message != NULL)
-	xmlSchemaPErr(ctxt, ownerElem, error, "%s: %s.\n", BAD_CAST des, BAD_CAST message);
-    else
-	xmlSchemaPErr(ctxt, ownerElem, error,
-	    "%s: The attribute '%s' is required but missing.\n",
-	    BAD_CAST des, BAD_CAST name);
-    FREE_AND_NULL(des);
-}
-
-
-/**
- * xmlSchemaPResCompAttrErr:
- * @ctxt: the schema validation context
- * @error: the error code
- * @ownerDes: the designation of  the owner
- * @ownerItem: the owner as a schema object
- * @ownerElem: the owner as an element node
- * @name: the name of the attribute holding the QName
- * @refName: the referenced local name
- * @refURI: the referenced namespace URI
- * @message: optional message
- *
- * Used to report QName attribute values that failed to resolve
- * to schema components.
- */
-static void
-xmlSchemaPResCompAttrErr(xmlSchemaParserCtxtPtr ctxt,
-			 xmlParserErrors error,
-			 xmlSchemaBasicItemPtr ownerItem,
-			 xmlNodePtr ownerElem,
-			 const char *name,
-			 const xmlChar *refName,
-			 const xmlChar *refURI,
-			 xmlSchemaTypeType refType,
-			 const char *refTypeStr)
-{
-    xmlChar *des = NULL, *strA = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
-    if (refTypeStr == NULL)
-	refTypeStr = (const char *) xmlSchemaItemTypeToStr(refType);
-	xmlSchemaPErrExt(ctxt, ownerElem, error,
-	    NULL, NULL, NULL,
-	    "%s, attribute '%s': The QName value '%s' does not resolve to a(n) "
-	    "%s.\n", BAD_CAST des, BAD_CAST name,
-	    xmlSchemaFormatQName(&strA, refURI, refName),
-	    BAD_CAST refTypeStr, NULL);
-    FREE_AND_NULL(des)
-    FREE_AND_NULL(strA)
-}
-
-/**
- * xmlSchemaPCustomAttrErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @ownerDes: the designation of the owner
- * @ownerItem: the owner as a schema object
- * @attr: the illegal attribute node
- *
- * Reports an illegal attribute during the parse.
- */
-static void
-xmlSchemaPCustomAttrErr(xmlSchemaParserCtxtPtr ctxt,
-			xmlParserErrors error,
-			xmlChar **ownerDes,
-			xmlSchemaBasicItemPtr ownerItem,
-			xmlAttrPtr attr,
-			const char *msg)
-{
-    xmlChar *des = NULL;
-
-    if (ownerDes == NULL)
-	xmlSchemaFormatItemForReport(&des, NULL, ownerItem, attr->parent);
-    else if (*ownerDes == NULL) {
-	xmlSchemaFormatItemForReport(ownerDes, NULL, ownerItem, attr->parent);
-	des = *ownerDes;
-    } else
-	des = *ownerDes;
-    if (attr == NULL) {
-	xmlSchemaPErrExt(ctxt, NULL, error, NULL, NULL, NULL,
-	    "%s, attribute '%s': %s.\n",
-	    BAD_CAST des, (const xmlChar *) "Unknown",
-	    (const xmlChar *) msg, NULL, NULL);
-    } else {
-	xmlSchemaPErrExt(ctxt, (xmlNodePtr) attr, error, NULL, NULL, NULL,
-	    "%s, attribute '%s': %s.\n",
-	    BAD_CAST des, attr->name, (const xmlChar *) msg, NULL, NULL);
-    }
-    if (ownerDes == NULL)
-	FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPIllegalAttrErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @ownerDes: the designation of the attribute's owner
- * @ownerItem: the attribute's owner item
- * @attr: the illegal attribute node
- *
- * Reports an illegal attribute during the parse.
- */
-static void
-xmlSchemaPIllegalAttrErr(xmlSchemaParserCtxtPtr ctxt,
-			 xmlParserErrors error,
-			 xmlSchemaBasicItemPtr ownerComp ATTRIBUTE_UNUSED,
-			 xmlAttrPtr attr)
-{
-    xmlChar *strA = NULL, *strB = NULL;
-
-    xmlSchemaFormatNodeForError(&strA, ACTXT_CAST ctxt, attr->parent);
-    xmlSchemaErr4(ACTXT_CAST ctxt, error, (xmlNodePtr) attr,
-	"%sThe attribute '%s' is not allowed.\n", BAD_CAST strA,
-	xmlSchemaFormatQNameNs(&strB, attr->ns, attr->name),
-	NULL, NULL);
-    FREE_AND_NULL(strA);
-    FREE_AND_NULL(strB);
-}
-
-/**
- * xmlSchemaPCustomErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item
- * @item: the schema item
- * @itemElem: the node of the schema item
- * @message: the error message
- * @str1: an optional param for the error message
- * @str2: an optional param for the error message
- * @str3: an optional param for the error message
- *
- * Reports an error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPCustomErrExt(xmlSchemaParserCtxtPtr ctxt,
-		    xmlParserErrors error,
-		    xmlSchemaBasicItemPtr item,
-		    xmlNodePtr itemElem,
-		    const char *message,
-		    const xmlChar *str1,
-		    const xmlChar *str2,
-		    const xmlChar *str3)
-{
-    xmlChar *des = NULL, *msg = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, item, itemElem);
-    msg = xmlStrdup(BAD_CAST "%s: ");
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-    if ((itemElem == NULL) && (item != NULL))
-	itemElem = WXS_ITEM_NODE(item);
-    xmlSchemaPErrExt(ctxt, itemElem, error, NULL, NULL, NULL,
-	(const char *) msg, BAD_CAST des, str1, str2, str3, NULL);
-    FREE_AND_NULL(des);
-    FREE_AND_NULL(msg);
-}
-
-/**
- * xmlSchemaPCustomErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item
- * @item: the schema item
- * @itemElem: the node of the schema item
- * @message: the error message
- * @str1: the optional param for the error message
- *
- * Reports an error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPCustomErr(xmlSchemaParserCtxtPtr ctxt,
-		    xmlParserErrors error,
-		    xmlSchemaBasicItemPtr item,
-		    xmlNodePtr itemElem,
-		    const char *message,
-		    const xmlChar *str1)
-{
-    xmlSchemaPCustomErrExt(ctxt, error, item, itemElem, message,
-	str1, NULL, NULL);
-}
-
-/**
- * xmlSchemaPAttrUseErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema type
- * @item: the schema type
- * @itemElem: the node of the schema type
- * @attr: the invalid schema attribute
- * @message: the error message
- * @str1: the optional param for the error message
- *
- * Reports an attribute use error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(6,0)
-xmlSchemaPAttrUseErr4(xmlSchemaParserCtxtPtr ctxt,
-		    xmlParserErrors error,
-		    xmlNodePtr node,
-		    xmlSchemaBasicItemPtr ownerItem,
-		    const xmlSchemaAttributeUsePtr attruse,
-		    const char *message,
-		    const xmlChar *str1, const xmlChar *str2,
-		    const xmlChar *str3,const xmlChar *str4)
-{
-    xmlChar *str = NULL, *msg = NULL;
-
-    xmlSchemaFormatItemForReport(&msg, NULL, ownerItem, NULL);
-    msg = xmlStrcat(msg, BAD_CAST ", ");
-    msg = xmlStrcat(msg,
-	BAD_CAST xmlSchemaFormatItemForReport(&str, NULL,
-	WXS_BASIC_CAST attruse, NULL));
-    FREE_AND_NULL(str);
-    msg = xmlStrcat(msg, BAD_CAST ": ");
-    msg = xmlStrcat(msg, (const xmlChar *) message);
-    msg = xmlStrcat(msg, BAD_CAST ".\n");
-    xmlSchemaErr4(ACTXT_CAST ctxt, error, node,
-	(const char *) msg, str1, str2, str3, str4);
-    xmlFree(msg);
-}
-
-/**
- * xmlSchemaPIllegalFacetAtomicErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @type: the schema type
- * @baseType: the base type of type
- * @facet: the illegal facet
- *
- * Reports an illegal facet for atomic simple types.
- */
-static void
-xmlSchemaPIllegalFacetAtomicErr(xmlSchemaParserCtxtPtr ctxt,
-			  xmlParserErrors error,
-			  xmlSchemaTypePtr type,
-			  xmlSchemaTypePtr baseType,
-			  xmlSchemaFacetPtr facet)
-{
-    xmlChar *des = NULL, *strT = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST type, type->node);
-    xmlSchemaPErrExt(ctxt, type->node, error, NULL, NULL, NULL,
-	"%s: The facet '%s' is not allowed on types derived from the "
-	"type %s.\n",
-	BAD_CAST des, xmlSchemaFacetTypeToString(facet->type),
-	xmlSchemaFormatItemForReport(&strT, NULL, WXS_BASIC_CAST baseType, NULL),
-	NULL, NULL);
-    FREE_AND_NULL(des);
-    FREE_AND_NULL(strT);
-}
-
-/**
- * xmlSchemaPIllegalFacetListUnionErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item involved
- * @item: the schema item involved
- * @facet: the illegal facet
- *
- * Reports an illegal facet for <list> and <union>.
- */
-static void
-xmlSchemaPIllegalFacetListUnionErr(xmlSchemaParserCtxtPtr ctxt,
-			  xmlParserErrors error,
-			  xmlSchemaTypePtr type,
-			  xmlSchemaFacetPtr facet)
-{
-    xmlChar *des = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST type,
-	type->node);
-    xmlSchemaPErr(ctxt, type->node, error,
-	"%s: The facet '%s' is not allowed.\n",
-	BAD_CAST des, xmlSchemaFacetTypeToString(facet->type));
-    FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPMutualExclAttrErr:
- * @ctxt: the schema validation context
- * @error: the error code
- * @elemDes: the designation of the parent element node
- * @attr: the bad attribute node
- * @type: the corresponding type of the attribute node
- *
- * Reports an illegal attribute.
- */
-static void
-xmlSchemaPMutualExclAttrErr(xmlSchemaParserCtxtPtr ctxt,
-			 xmlParserErrors error,
-			 xmlSchemaBasicItemPtr ownerItem,
-			 xmlAttrPtr attr,
-			 const char *name1,
-			 const char *name2)
-{
-    xmlChar *des = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST ownerItem, attr->parent);
-    xmlSchemaPErrExt(ctxt, (xmlNodePtr) attr, error, NULL, NULL, NULL,
-	"%s: The attributes '%s' and '%s' are mutually exclusive.\n",
-	BAD_CAST des, BAD_CAST name1, BAD_CAST name2, NULL, NULL);
-    FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPSimpleTypeErr:
- * @ctxt:  the schema validation context
- * @error: the error code
- * @type: the type specifier
- * @ownerDes: the designation of the owner
- * @ownerItem: the schema object if existent
- * @node: the validated node
- * @value: the validated value
- *
- * Reports a simple type validation error.
- * TODO: Should this report the value of an element as well?
- */
-static void LIBXML_ATTR_FORMAT(8,0)
-xmlSchemaPSimpleTypeErr(xmlSchemaParserCtxtPtr ctxt,
-			xmlParserErrors error,
-			xmlSchemaBasicItemPtr ownerItem ATTRIBUTE_UNUSED,
-			xmlNodePtr node,
-			xmlSchemaTypePtr type,
-			const char *expected,
-			const xmlChar *value,
-			const char *message,
-			const xmlChar *str1,
-			const xmlChar *str2)
-{
-    xmlChar *msg = NULL;
-
-    xmlSchemaFormatNodeForError(&msg, ACTXT_CAST ctxt, node);
-    if (message == NULL) {
-	/*
-	* Use default messages.
-	*/
-	if (type != NULL) {
-	    if (node->type == XML_ATTRIBUTE_NODE)
-		msg = xmlStrcat(msg, BAD_CAST "'%s' is not a valid value of ");
-	    else
-		msg = xmlStrcat(msg, BAD_CAST "The character content is not a "
-		"valid value of ");
-	    if (! xmlSchemaIsGlobalItem(type))
-		msg = xmlStrcat(msg, BAD_CAST "the local ");
-	    else
-		msg = xmlStrcat(msg, BAD_CAST "the ");
-
-	    if (WXS_IS_ATOMIC(type))
-		msg = xmlStrcat(msg, BAD_CAST "atomic type");
-	    else if (WXS_IS_LIST(type))
-		msg = xmlStrcat(msg, BAD_CAST "list type");
-	    else if (WXS_IS_UNION(type))
-		msg = xmlStrcat(msg, BAD_CAST "union type");
-
-	    if (xmlSchemaIsGlobalItem(type)) {
-		xmlChar *str = NULL;
-		msg = xmlStrcat(msg, BAD_CAST " '");
-		if (type->builtInType != 0) {
-		    msg = xmlStrcat(msg, BAD_CAST "xs:");
-		    str = xmlStrdup(type->name);
-		} else {
-		    const xmlChar *qName = xmlSchemaFormatQName(&str, type->targetNamespace, type->name);
-		    if (!str)
-			str = xmlStrdup(qName);
-		}
-		msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
-		msg = xmlStrcat(msg, BAD_CAST "'.");
-		FREE_AND_NULL(str);
-	    }
-	} else {
-	    if (node->type == XML_ATTRIBUTE_NODE)
-		msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not valid.");
-	    else
-		msg = xmlStrcat(msg, BAD_CAST "The character content is not "
-		"valid.");
-	}
-	if (expected) {
-	    xmlChar *expectedEscaped = xmlCharStrdup(expected);
-	    msg = xmlStrcat(msg, BAD_CAST " Expected is '");
-	    msg = xmlStrcat(msg, xmlEscapeFormatString(&expectedEscaped));
-	    FREE_AND_NULL(expectedEscaped);
-	    msg = xmlStrcat(msg, BAD_CAST "'.\n");
-	} else
-	    msg = xmlStrcat(msg, BAD_CAST "\n");
-	if (node->type == XML_ATTRIBUTE_NODE)
-	    xmlSchemaPErr(ctxt, node, error, (const char *) msg, value, NULL);
-	else
-	    xmlSchemaPErr(ctxt, node, error, (const char *) msg, NULL, NULL);
-    } else {
-	msg = xmlStrcat(msg, BAD_CAST message);
-	msg = xmlStrcat(msg, BAD_CAST ".\n");
-	xmlSchemaPErrExt(ctxt, node, error, NULL, NULL, NULL,
-	     (const char*) msg, str1, str2, NULL, NULL, NULL);
-    }
-    /* Cleanup. */
-    FREE_AND_NULL(msg)
-}
-
-/**
- * xmlSchemaPContentErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @onwerDes: the designation of the holder of the content
- * @ownerItem: the owner item of the holder of the content
- * @ownerElem: the node of the holder of the content
- * @child: the invalid child node
- * @message: the optional error message
- * @content: the optional string describing the correct content
- *
- * Reports an error concerning the content of a schema element.
- */
-static void
-xmlSchemaPContentErr(xmlSchemaParserCtxtPtr ctxt,
-		     xmlParserErrors error,
-		     xmlSchemaBasicItemPtr ownerItem,
-		     xmlNodePtr ownerElem,
-		     xmlNodePtr child,
-		     const char *message,
-		     const char *content)
-{
-    xmlChar *des = NULL;
-
-    xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
-    if (message != NULL)
-	xmlSchemaPErr2(ctxt, ownerElem, child, error,
-	    "%s: %s.\n",
-	    BAD_CAST des, BAD_CAST message);
-    else {
-	if (content != NULL) {
-	    xmlSchemaPErr2(ctxt, ownerElem, child, error,
-		"%s: The content is not valid. Expected is %s.\n",
-		BAD_CAST des, BAD_CAST content);
-	} else {
-	    xmlSchemaPErr2(ctxt, ownerElem, child, error,
-		"%s: The content is not valid.\n",
-		BAD_CAST des, NULL);
-	}
-    }
-    FREE_AND_NULL(des)
-}
-
-/************************************************************************
- *									*
- *			Streamable error functions                      *
- *									*
- ************************************************************************/
-
-
-
-
-/************************************************************************
- *									*
- *			Validation helper functions			*
- *									*
- ************************************************************************/
-
-
-/************************************************************************
- *									*
- *			Allocation functions				*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaNewSchemaForParserCtxt:
- * @ctxt:  a schema validation context
- *
- * Allocate a new Schema structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchemaPtr
-xmlSchemaNewSchema(xmlSchemaParserCtxtPtr ctxt)
-{
-    xmlSchemaPtr ret;
-
-    ret = (xmlSchemaPtr) xmlMalloc(sizeof(xmlSchema));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating schema", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchema));
-    ret->dict = ctxt->dict;
-    xmlDictReference(ret->dict);
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewFacet:
- *
- * Allocate a new Facet structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-xmlSchemaFacetPtr
-xmlSchemaNewFacet(void)
-{
-    xmlSchemaFacetPtr ret;
-
-    ret = (xmlSchemaFacetPtr) xmlMalloc(sizeof(xmlSchemaFacet));
-    if (ret == NULL) {
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaFacet));
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewAnnot:
- * @ctxt:  a schema validation context
- * @node:  a node
- *
- * Allocate a new annotation structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchemaAnnotPtr
-xmlSchemaNewAnnot(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlSchemaAnnotPtr ret;
-
-    ret = (xmlSchemaAnnotPtr) xmlMalloc(sizeof(xmlSchemaAnnot));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating annotation", node);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaAnnot));
-    ret->content = node;
-    return (ret);
-}
-
-static xmlSchemaItemListPtr
-xmlSchemaItemListCreate(void)
-{
-    xmlSchemaItemListPtr ret;
-
-    ret = xmlMalloc(sizeof(xmlSchemaItemList));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(NULL,
-	    "allocating an item list structure", NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaItemList));
-    return (ret);
-}
-
-static void
-xmlSchemaItemListClear(xmlSchemaItemListPtr list)
-{
-    if (list->items != NULL) {
-	xmlFree(list->items);
-	list->items = NULL;
-    }
-    list->nbItems = 0;
-    list->sizeItems = 0;
-}
-
-static int
-xmlSchemaItemListAdd(xmlSchemaItemListPtr list, void *item)
-{
-    if (list->items == NULL) {
-	list->items = (void **) xmlMalloc(
-	    20 * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
-	    return(-1);
-	}
-	list->sizeItems = 20;
-    } else if (list->sizeItems <= list->nbItems) {
-	list->sizeItems *= 2;
-	list->items = (void **) xmlRealloc(list->items,
-	    list->sizeItems * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "growing item list", NULL);
-	    list->sizeItems = 0;
-	    return(-1);
-	}
-    }
-    list->items[list->nbItems++] = item;
-    return(0);
-}
-
-static int
-xmlSchemaItemListAddSize(xmlSchemaItemListPtr list,
-			 int initialSize,
-			 void *item)
-{
-    if (list->items == NULL) {
-	if (initialSize <= 0)
-	    initialSize = 1;
-	list->items = (void **) xmlMalloc(
-	    initialSize * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
-	    return(-1);
-	}
-	list->sizeItems = initialSize;
-    } else if (list->sizeItems <= list->nbItems) {
-	list->sizeItems *= 2;
-	list->items = (void **) xmlRealloc(list->items,
-	    list->sizeItems * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "growing item list", NULL);
-	    list->sizeItems = 0;
-	    return(-1);
-	}
-    }
-    list->items[list->nbItems++] = item;
-    return(0);
-}
-
-static int
-xmlSchemaItemListInsert(xmlSchemaItemListPtr list, void *item, int idx)
-{
-    if (list->items == NULL) {
-	list->items = (void **) xmlMalloc(
-	    20 * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
-	    return(-1);
-	}
-	list->sizeItems = 20;
-    } else if (list->sizeItems <= list->nbItems) {
-	list->sizeItems *= 2;
-	list->items = (void **) xmlRealloc(list->items,
-	    list->sizeItems * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "growing item list", NULL);
-	    list->sizeItems = 0;
-	    return(-1);
-	}
-    }
-    /*
-    * Just append if the index is greater/equal than the item count.
-    */
-    if (idx >= list->nbItems) {
-	list->items[list->nbItems++] = item;
-    } else {
-	int i;
-	for (i = list->nbItems; i > idx; i--)
-	    list->items[i] = list->items[i-1];
-	list->items[idx] = item;
-	list->nbItems++;
-    }
-    return(0);
-}
-
-#if 0 /* enable if ever needed */
-static int
-xmlSchemaItemListInsertSize(xmlSchemaItemListPtr list,
-			    int initialSize,
-			    void *item,
-			    int idx)
-{
-    if (list->items == NULL) {
-	if (initialSize <= 0)
-	    initialSize = 1;
-	list->items = (void **) xmlMalloc(
-	    initialSize * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
-	    return(-1);
-	}
-	list->sizeItems = initialSize;
-    } else if (list->sizeItems <= list->nbItems) {
-	list->sizeItems *= 2;
-	list->items = (void **) xmlRealloc(list->items,
-	    list->sizeItems * sizeof(void *));
-	if (list->items == NULL) {
-	    xmlSchemaPErrMemory(NULL, "growing item list", NULL);
-	    list->sizeItems = 0;
-	    return(-1);
-	}
-    }
-    /*
-    * Just append if the index is greater/equal than the item count.
-    */
-    if (idx >= list->nbItems) {
-	list->items[list->nbItems++] = item;
-    } else {
-	int i;
-	for (i = list->nbItems; i > idx; i--)
-	    list->items[i] = list->items[i-1];
-	list->items[idx] = item;
-	list->nbItems++;
-    }
-    return(0);
-}
-#endif
-
-static int
-xmlSchemaItemListRemove(xmlSchemaItemListPtr list, int idx)
-{
-    int i;
-    if ((list->items == NULL) || (idx >= list->nbItems)) {
-	xmlSchemaPSimpleErr("Internal error: xmlSchemaItemListRemove, "
-	    "index error.\n");
-	return(-1);
-    }
-
-    if (list->nbItems == 1) {
-	/* TODO: Really free the list? */
-	xmlFree(list->items);
-	list->items = NULL;
-	list->nbItems = 0;
-	list->sizeItems = 0;
-    } else if (list->nbItems -1 == idx) {
-	list->nbItems--;
-    } else {
-	for (i = idx; i < list->nbItems -1; i++)
-	    list->items[i] = list->items[i+1];
-	list->nbItems--;
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaItemListFree:
- * @annot:  a schema type structure
- *
- * Deallocate a annotation structure
- */
-static void
-xmlSchemaItemListFree(xmlSchemaItemListPtr list)
-{
-    if (list == NULL)
-	return;
-    if (list->items != NULL)
-	xmlFree(list->items);
-    xmlFree(list);
-}
-
-static void
-xmlSchemaBucketFree(xmlSchemaBucketPtr bucket)
-{
-    if (bucket == NULL)
-	return;
-    if (bucket->globals != NULL) {
-	xmlSchemaComponentListFree(bucket->globals);
-	xmlSchemaItemListFree(bucket->globals);
-    }
-    if (bucket->locals != NULL) {
-	xmlSchemaComponentListFree(bucket->locals);
-	xmlSchemaItemListFree(bucket->locals);
-    }
-    if (bucket->relations != NULL) {
-	xmlSchemaSchemaRelationPtr prev, cur = bucket->relations;
-	do {
-	    prev = cur;
-	    cur = cur->next;
-	    xmlFree(prev);
-	} while (cur != NULL);
-    }
-    if ((! bucket->preserveDoc) && (bucket->doc != NULL)) {
-	xmlFreeDoc(bucket->doc);
-    }
-    if (bucket->type == XML_SCHEMA_SCHEMA_IMPORT) {
-	if (WXS_IMPBUCKET(bucket)->schema != NULL)
-	    xmlSchemaFree(WXS_IMPBUCKET(bucket)->schema);
-    }
-    xmlFree(bucket);
-}
-
-static xmlSchemaBucketPtr
-xmlSchemaBucketCreate(xmlSchemaParserCtxtPtr pctxt,
-			 int type, const xmlChar *targetNamespace)
-{
-    xmlSchemaBucketPtr ret;
-    int size;
-    xmlSchemaPtr mainSchema;
-
-    if (WXS_CONSTRUCTOR(pctxt)->mainSchema == NULL) {
-	PERROR_INT("xmlSchemaBucketCreate",
-	    "no main schema on constructor");
-	return(NULL);
-    }
-    mainSchema = WXS_CONSTRUCTOR(pctxt)->mainSchema;
-    /* Create the schema bucket. */
-    if (WXS_IS_BUCKET_INCREDEF(type))
-	size = sizeof(xmlSchemaInclude);
-    else
-	size = sizeof(xmlSchemaImport);
-    ret = (xmlSchemaBucketPtr) xmlMalloc(size);
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(NULL, "allocating schema bucket", NULL);
-	return(NULL);
-    }
-    memset(ret, 0, size);
-    ret->targetNamespace = targetNamespace;
-    ret->type = type;
-    ret->globals = xmlSchemaItemListCreate();
-    if (ret->globals == NULL) {
-	xmlFree(ret);
-	return(NULL);
-    }
-    ret->locals = xmlSchemaItemListCreate();
-    if (ret->locals == NULL) {
-	xmlFree(ret);
-	return(NULL);
-    }
-    /*
-    * The following will assure that only the first bucket is marked as
-    * XML_SCHEMA_SCHEMA_MAIN and it points to the *main* schema.
-    * For each following import buckets an xmlSchema will be created.
-    * An xmlSchema will be created for every distinct targetNamespace.
-    * We assign the targetNamespace to the schemata here.
-    */
-    if (! WXS_HAS_BUCKETS(pctxt)) {
-	if (WXS_IS_BUCKET_INCREDEF(type)) {
-	    PERROR_INT("xmlSchemaBucketCreate",
-		"first bucket but it's an include or redefine");
-	    xmlSchemaBucketFree(ret);
-	    return(NULL);
-	}
-	/* Force the type to be XML_SCHEMA_SCHEMA_MAIN. */
-	ret->type = XML_SCHEMA_SCHEMA_MAIN;
-	/* Point to the *main* schema. */
-	WXS_CONSTRUCTOR(pctxt)->mainBucket = ret;
-	WXS_IMPBUCKET(ret)->schema = mainSchema;
-	/*
-	* Ensure that the main schema gets a targetNamespace.
-	*/
-	mainSchema->targetNamespace = targetNamespace;
-    } else {
-	if (type == XML_SCHEMA_SCHEMA_MAIN) {
-	    PERROR_INT("xmlSchemaBucketCreate",
-		"main bucket but it's not the first one");
-	    xmlSchemaBucketFree(ret);
-	    return(NULL);
-	} else if (type == XML_SCHEMA_SCHEMA_IMPORT) {
-	    /*
-	    * Create a schema for imports and assign the
-	    * targetNamespace.
-	    */
-	    WXS_IMPBUCKET(ret)->schema = xmlSchemaNewSchema(pctxt);
-	    if (WXS_IMPBUCKET(ret)->schema == NULL) {
-		xmlSchemaBucketFree(ret);
-		return(NULL);
-	    }
-	    WXS_IMPBUCKET(ret)->schema->targetNamespace = targetNamespace;
-	}
-    }
-    if (WXS_IS_BUCKET_IMPMAIN(type)) {
-	int res;
-	/*
-	* Imports go into the "schemasImports" slot of the main *schema*.
-	* Note that we create an import entry for the main schema as well; i.e.,
-	* even if there's only one schema, we'll get an import.
-	*/
-	if (mainSchema->schemasImports == NULL) {
-	    mainSchema->schemasImports = xmlHashCreateDict(5,
-		WXS_CONSTRUCTOR(pctxt)->dict);
-	    if (mainSchema->schemasImports == NULL) {
-		xmlSchemaBucketFree(ret);
-		return(NULL);
-	    }
-	}
-	if (targetNamespace == NULL)
-	    res = xmlHashAddEntry(mainSchema->schemasImports,
-		XML_SCHEMAS_NO_NAMESPACE, ret);
-	else
-	    res = xmlHashAddEntry(mainSchema->schemasImports,
-		targetNamespace, ret);
-	if (res != 0) {
-	    PERROR_INT("xmlSchemaBucketCreate",
-		"failed to add the schema bucket to the hash");
-	    xmlSchemaBucketFree(ret);
-	    return(NULL);
-	}
-    } else {
-	/* Set the @ownerImport of an include bucket. */
-	if (WXS_IS_BUCKET_IMPMAIN(WXS_CONSTRUCTOR(pctxt)->bucket->type))
-	    WXS_INCBUCKET(ret)->ownerImport =
-		WXS_IMPBUCKET(WXS_CONSTRUCTOR(pctxt)->bucket);
-	else
-	    WXS_INCBUCKET(ret)->ownerImport =
-		WXS_INCBUCKET(WXS_CONSTRUCTOR(pctxt)->bucket)->ownerImport;
-
-	/* Includes got into the "includes" slot of the *main* schema. */
-	if (mainSchema->includes == NULL) {
-	    mainSchema->includes = xmlSchemaItemListCreate();
-	    if (mainSchema->includes == NULL) {
-		xmlSchemaBucketFree(ret);
-		return(NULL);
-	    }
-	}
-	xmlSchemaItemListAdd(mainSchema->includes, ret);
-    }
-    /*
-    * Add to list of all buckets; this is used for lookup
-    * during schema construction time only.
-    */
-    if (xmlSchemaItemListAdd(WXS_CONSTRUCTOR(pctxt)->buckets, ret) == -1)
-	return(NULL);
-    return(ret);
-}
-
-static int
-xmlSchemaAddItemSize(xmlSchemaItemListPtr *list, int initialSize, void *item)
-{
-    if (*list == NULL) {
-	*list = xmlSchemaItemListCreate();
-	if (*list == NULL)
-	    return(-1);
-    }
-    xmlSchemaItemListAddSize(*list, initialSize, item);
-    return(0);
-}
-
-/**
- * xmlSchemaFreeAnnot:
- * @annot:  a schema type structure
- *
- * Deallocate a annotation structure
- */
-static void
-xmlSchemaFreeAnnot(xmlSchemaAnnotPtr annot)
-{
-    if (annot == NULL)
-        return;
-    if (annot->next == NULL) {
-	xmlFree(annot);
-    } else {
-	xmlSchemaAnnotPtr prev;
-
-	do {
-	    prev = annot;
-	    annot = annot->next;
-	    xmlFree(prev);
-	} while (annot != NULL);
-    }
-}
-
-/**
- * xmlSchemaFreeNotation:
- * @schema:  a schema notation structure
- *
- * Deallocate a Schema Notation structure.
- */
-static void
-xmlSchemaFreeNotation(xmlSchemaNotationPtr nota)
-{
-    if (nota == NULL)
-        return;
-    xmlFree(nota);
-}
-
-/**
- * xmlSchemaFreeAttribute:
- * @attr:  an attribute declaration
- *
- * Deallocates an attribute declaration structure.
- */
-static void
-xmlSchemaFreeAttribute(xmlSchemaAttributePtr attr)
-{
-    if (attr == NULL)
-        return;
-    if (attr->annot != NULL)
-	xmlSchemaFreeAnnot(attr->annot);
-    if (attr->defVal != NULL)
-	xmlSchemaFreeValue(attr->defVal);
-    xmlFree(attr);
-}
-
-/**
- * xmlSchemaFreeAttributeUse:
- * @use:  an attribute use
- *
- * Deallocates an attribute use structure.
- */
-static void
-xmlSchemaFreeAttributeUse(xmlSchemaAttributeUsePtr use)
-{
-    if (use == NULL)
-        return;
-    if (use->annot != NULL)
-	xmlSchemaFreeAnnot(use->annot);
-    if (use->defVal != NULL)
-	xmlSchemaFreeValue(use->defVal);
-    xmlFree(use);
-}
-
-/**
- * xmlSchemaFreeAttributeUseProhib:
- * @prohib:  an attribute use prohibition
- *
- * Deallocates an attribute use structure.
- */
-static void
-xmlSchemaFreeAttributeUseProhib(xmlSchemaAttributeUseProhibPtr prohib)
-{
-    if (prohib == NULL)
-        return;
-    xmlFree(prohib);
-}
-
-/**
- * xmlSchemaFreeWildcardNsSet:
- * set:  a schema wildcard namespace
- *
- * Deallocates a list of wildcard constraint structures.
- */
-static void
-xmlSchemaFreeWildcardNsSet(xmlSchemaWildcardNsPtr set)
-{
-    xmlSchemaWildcardNsPtr next;
-
-    while (set != NULL) {
-	next = set->next;
-	xmlFree(set);
-	set = next;
-    }
-}
-
-/**
- * xmlSchemaFreeWildcard:
- * @wildcard:  a wildcard structure
- *
- * Deallocates a wildcard structure.
- */
-void
-xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard)
-{
-    if (wildcard == NULL)
-        return;
-    if (wildcard->annot != NULL)
-        xmlSchemaFreeAnnot(wildcard->annot);
-    if (wildcard->nsSet != NULL)
-	xmlSchemaFreeWildcardNsSet(wildcard->nsSet);
-    if (wildcard->negNsSet != NULL)
-	xmlFree(wildcard->negNsSet);
-    xmlFree(wildcard);
-}
-
-/**
- * xmlSchemaFreeAttributeGroup:
- * @schema:  a schema attribute group structure
- *
- * Deallocate a Schema Attribute Group structure.
- */
-static void
-xmlSchemaFreeAttributeGroup(xmlSchemaAttributeGroupPtr attrGr)
-{
-    if (attrGr == NULL)
-        return;
-    if (attrGr->annot != NULL)
-        xmlSchemaFreeAnnot(attrGr->annot);
-    if (attrGr->attrUses != NULL)
-	xmlSchemaItemListFree(WXS_LIST_CAST attrGr->attrUses);
-    xmlFree(attrGr);
-}
-
-/**
- * xmlSchemaFreeQNameRef:
- * @item: a QName reference structure
- *
- * Deallocatea a QName reference structure.
- */
-static void
-xmlSchemaFreeQNameRef(xmlSchemaQNameRefPtr item)
-{
-    xmlFree(item);
-}
-
-/**
- * xmlSchemaFreeTypeLinkList:
- * @alink: a type link
- *
- * Deallocate a list of types.
- */
-static void
-xmlSchemaFreeTypeLinkList(xmlSchemaTypeLinkPtr link)
-{
-    xmlSchemaTypeLinkPtr next;
-
-    while (link != NULL) {
-	next = link->next;
-	xmlFree(link);
-	link = next;
-    }
-}
-
-static void
-xmlSchemaFreeIDCStateObjList(xmlSchemaIDCStateObjPtr sto)
-{
-    xmlSchemaIDCStateObjPtr next;
-    while (sto != NULL) {
-	next = sto->next;
-	if (sto->history != NULL)
-	    xmlFree(sto->history);
-	if (sto->xpathCtxt != NULL)
-	    xmlFreeStreamCtxt((xmlStreamCtxtPtr) sto->xpathCtxt);
-	xmlFree(sto);
-	sto = next;
-    }
-}
-
-/**
- * xmlSchemaFreeIDC:
- * @idc: a identity-constraint definition
- *
- * Deallocates an identity-constraint definition.
- */
-static void
-xmlSchemaFreeIDC(xmlSchemaIDCPtr idcDef)
-{
-    xmlSchemaIDCSelectPtr cur, prev;
-
-    if (idcDef == NULL)
-	return;
-    if (idcDef->annot != NULL)
-        xmlSchemaFreeAnnot(idcDef->annot);
-    /* Selector */
-    if (idcDef->selector != NULL) {
-	if (idcDef->selector->xpathComp != NULL)
-	    xmlFreePattern((xmlPatternPtr) idcDef->selector->xpathComp);
-	xmlFree(idcDef->selector);
-    }
-    /* Fields */
-    if (idcDef->fields != NULL) {
-	cur = idcDef->fields;
-	do {
-	    prev = cur;
-	    cur = cur->next;
-	    if (prev->xpathComp != NULL)
-		xmlFreePattern((xmlPatternPtr) prev->xpathComp);
-	    xmlFree(prev);
-	} while (cur != NULL);
-    }
-    xmlFree(idcDef);
-}
-
-/**
- * xmlSchemaFreeElement:
- * @schema:  a schema element structure
- *
- * Deallocate a Schema Element structure.
- */
-static void
-xmlSchemaFreeElement(xmlSchemaElementPtr elem)
-{
-    if (elem == NULL)
-        return;
-    if (elem->annot != NULL)
-        xmlSchemaFreeAnnot(elem->annot);
-    if (elem->contModel != NULL)
-        xmlRegFreeRegexp(elem->contModel);
-    if (elem->defVal != NULL)
-	xmlSchemaFreeValue(elem->defVal);
-    xmlFree(elem);
-}
-
-/**
- * xmlSchemaFreeFacet:
- * @facet:  a schema facet structure
- *
- * Deallocate a Schema Facet structure.
- */
-void
-xmlSchemaFreeFacet(xmlSchemaFacetPtr facet)
-{
-    if (facet == NULL)
-        return;
-    if (facet->val != NULL)
-        xmlSchemaFreeValue(facet->val);
-    if (facet->regexp != NULL)
-        xmlRegFreeRegexp(facet->regexp);
-    if (facet->annot != NULL)
-        xmlSchemaFreeAnnot(facet->annot);
-    xmlFree(facet);
-}
-
-/**
- * xmlSchemaFreeType:
- * @type:  a schema type structure
- *
- * Deallocate a Schema Type structure.
- */
-void
-xmlSchemaFreeType(xmlSchemaTypePtr type)
-{
-    if (type == NULL)
-        return;
-    if (type->annot != NULL)
-        xmlSchemaFreeAnnot(type->annot);
-    if (type->facets != NULL) {
-        xmlSchemaFacetPtr facet, next;
-
-        facet = type->facets;
-        while (facet != NULL) {
-            next = facet->next;
-            xmlSchemaFreeFacet(facet);
-            facet = next;
-        }
-    }
-    if (type->attrUses != NULL)
-	xmlSchemaItemListFree((xmlSchemaItemListPtr) type->attrUses);
-    if (type->memberTypes != NULL)
-	xmlSchemaFreeTypeLinkList(type->memberTypes);
-    if (type->facetSet != NULL) {
-	xmlSchemaFacetLinkPtr next, link;
-
-	link = type->facetSet;
-	do {
-	    next = link->next;
-	    xmlFree(link);
-	    link = next;
-	} while (link != NULL);
-    }
-    if (type->contModel != NULL)
-        xmlRegFreeRegexp(type->contModel);
-    xmlFree(type);
-}
-
-/**
- * xmlSchemaFreeModelGroupDef:
- * @item:  a schema model group definition
- *
- * Deallocates a schema model group definition.
- */
-static void
-xmlSchemaFreeModelGroupDef(xmlSchemaModelGroupDefPtr item)
-{
-    if (item->annot != NULL)
-	xmlSchemaFreeAnnot(item->annot);
-    xmlFree(item);
-}
-
-/**
- * xmlSchemaFreeModelGroup:
- * @item:  a schema model group
- *
- * Deallocates a schema model group structure.
- */
-static void
-xmlSchemaFreeModelGroup(xmlSchemaModelGroupPtr item)
-{
-    if (item->annot != NULL)
-	xmlSchemaFreeAnnot(item->annot);
-    xmlFree(item);
-}
-
-static void
-xmlSchemaComponentListFree(xmlSchemaItemListPtr list)
-{
-    if ((list == NULL) || (list->nbItems == 0))
-	return;
-    {
-	xmlSchemaTreeItemPtr item;
-	xmlSchemaTreeItemPtr *items = (xmlSchemaTreeItemPtr *) list->items;
-	int i;
-
-	for (i = 0; i < list->nbItems; i++) {
-	    item = items[i];
-	    if (item == NULL)
-		continue;
-	    switch (item->type) {
-		case XML_SCHEMA_TYPE_SIMPLE:
-		case XML_SCHEMA_TYPE_COMPLEX:
-		    xmlSchemaFreeType((xmlSchemaTypePtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_ATTRIBUTE:
-		    xmlSchemaFreeAttribute((xmlSchemaAttributePtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-		    xmlSchemaFreeAttributeUse((xmlSchemaAttributeUsePtr) item);
-		    break;
-		case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
-		    xmlSchemaFreeAttributeUseProhib(
-			(xmlSchemaAttributeUseProhibPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_ELEMENT:
-		    xmlSchemaFreeElement((xmlSchemaElementPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_PARTICLE:
-		    if (item->annot != NULL)
-			xmlSchemaFreeAnnot(item->annot);
-		    xmlFree(item);
-		    break;
-		case XML_SCHEMA_TYPE_SEQUENCE:
-		case XML_SCHEMA_TYPE_CHOICE:
-		case XML_SCHEMA_TYPE_ALL:
-		    xmlSchemaFreeModelGroup((xmlSchemaModelGroupPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		    xmlSchemaFreeAttributeGroup(
-			(xmlSchemaAttributeGroupPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_GROUP:
-		    xmlSchemaFreeModelGroupDef(
-			(xmlSchemaModelGroupDefPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_ANY:
-		case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
-		    xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_IDC_KEY:
-		case XML_SCHEMA_TYPE_IDC_UNIQUE:
-		case XML_SCHEMA_TYPE_IDC_KEYREF:
-		    xmlSchemaFreeIDC((xmlSchemaIDCPtr) item);
-		    break;
-		case XML_SCHEMA_TYPE_NOTATION:
-		    xmlSchemaFreeNotation((xmlSchemaNotationPtr) item);
-		    break;
-		case XML_SCHEMA_EXTRA_QNAMEREF:
-		    xmlSchemaFreeQNameRef((xmlSchemaQNameRefPtr) item);
-		    break;
-		default: {
-		    /* TODO: This should never be hit. */
-		    xmlSchemaPSimpleInternalErr(NULL,
-			"Internal error: xmlSchemaComponentListFree, "
-			"unexpected component type '%s'\n",
-			(const xmlChar *) WXS_ITEM_TYPE_NAME(item));
-			 }
-		    break;
-	    }
-	}
-	list->nbItems = 0;
-    }
-}
-
-/**
- * xmlSchemaFree:
- * @schema:  a schema structure
- *
- * Deallocate a Schema structure.
- */
-void
-xmlSchemaFree(xmlSchemaPtr schema)
-{
-    if (schema == NULL)
-        return;
-    /* @volatiles is not used anymore :-/ */
-    if (schema->volatiles != NULL)
-	TODO
-    /*
-    * Note that those slots are not responsible for freeing
-    * schema components anymore; this will now be done by
-    * the schema buckets.
-    */
-    if (schema->notaDecl != NULL)
-        xmlHashFree(schema->notaDecl, NULL);
-    if (schema->attrDecl != NULL)
-        xmlHashFree(schema->attrDecl, NULL);
-    if (schema->attrgrpDecl != NULL)
-        xmlHashFree(schema->attrgrpDecl, NULL);
-    if (schema->elemDecl != NULL)
-        xmlHashFree(schema->elemDecl, NULL);
-    if (schema->typeDecl != NULL)
-        xmlHashFree(schema->typeDecl, NULL);
-    if (schema->groupDecl != NULL)
-        xmlHashFree(schema->groupDecl, NULL);
-    if (schema->idcDef != NULL)
-        xmlHashFree(schema->idcDef, NULL);
-
-    if (schema->schemasImports != NULL)
-	xmlHashFree(schema->schemasImports,
-		    (xmlHashDeallocator) xmlSchemaBucketFree);
-    if (schema->includes != NULL) {
-	xmlSchemaItemListPtr list = (xmlSchemaItemListPtr) schema->includes;
-	int i;
-	for (i = 0; i < list->nbItems; i++) {
-	    xmlSchemaBucketFree((xmlSchemaBucketPtr) list->items[i]);
-	}
-	xmlSchemaItemListFree(list);
-    }
-    if (schema->annot != NULL)
-        xmlSchemaFreeAnnot(schema->annot);
-    /* Never free the doc here, since this will be done by the buckets. */
-
-    xmlDictFree(schema->dict);
-    xmlFree(schema);
-}
-
-/************************************************************************
- *									*
- *			Debug functions					*
- *									*
- ************************************************************************/
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-static void
-xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output); /* forward */
-
-/**
- * xmlSchemaElementDump:
- * @elem:  an element
- * @output:  the file output
- *
- * Dump the element
- */
-static void
-xmlSchemaElementDump(xmlSchemaElementPtr elem, FILE * output,
-                     const xmlChar * name ATTRIBUTE_UNUSED,
-		     const xmlChar * namespace ATTRIBUTE_UNUSED,
-                     const xmlChar * context ATTRIBUTE_UNUSED)
-{
-    if (elem == NULL)
-        return;
-
-
-    fprintf(output, "Element");
-    if (elem->flags & XML_SCHEMAS_ELEM_GLOBAL)
-	fprintf(output, " (global)");
-    fprintf(output, ": '%s' ", elem->name);
-    if (namespace != NULL)
-	fprintf(output, "ns '%s'", namespace);
-    fprintf(output, "\n");
-#if 0
-    if ((elem->minOccurs != 1) || (elem->maxOccurs != 1)) {
-	fprintf(output, "  min %d ", elem->minOccurs);
-        if (elem->maxOccurs >= UNBOUNDED)
-            fprintf(output, "max: unbounded\n");
-        else if (elem->maxOccurs != 1)
-            fprintf(output, "max: %d\n", elem->maxOccurs);
-        else
-            fprintf(output, "\n");
-    }
-#endif
-    /*
-    * Misc other properties.
-    */
-    if ((elem->flags & XML_SCHEMAS_ELEM_NILLABLE) ||
-	(elem->flags & XML_SCHEMAS_ELEM_ABSTRACT) ||
-	(elem->flags & XML_SCHEMAS_ELEM_FIXED) ||
-	(elem->flags & XML_SCHEMAS_ELEM_DEFAULT)) {
-	fprintf(output, "  props: ");
-	if (elem->flags & XML_SCHEMAS_ELEM_FIXED)
-	    fprintf(output, "[fixed] ");
-	if (elem->flags & XML_SCHEMAS_ELEM_DEFAULT)
-	    fprintf(output, "[default] ");
-	if (elem->flags & XML_SCHEMAS_ELEM_ABSTRACT)
-	    fprintf(output, "[abstract] ");
-	if (elem->flags & XML_SCHEMAS_ELEM_NILLABLE)
-	    fprintf(output, "[nillable] ");
-	fprintf(output, "\n");
-    }
-    /*
-    * Default/fixed value.
-    */
-    if (elem->value != NULL)
-	fprintf(output, "  value: '%s'\n", elem->value);
-    /*
-    * Type.
-    */
-    if (elem->namedType != NULL) {
-	fprintf(output, "  type: '%s' ", elem->namedType);
-	if (elem->namedTypeNs != NULL)
-	    fprintf(output, "ns '%s'\n", elem->namedTypeNs);
-	else
-	    fprintf(output, "\n");
-    } else if (elem->subtypes != NULL) {
-	/*
-	* Dump local types.
-	*/
-	xmlSchemaTypeDump(elem->subtypes, output);
-    }
-    /*
-    * Substitution group.
-    */
-    if (elem->substGroup != NULL) {
-	fprintf(output, "  substitutionGroup: '%s' ", elem->substGroup);
-	if (elem->substGroupNs != NULL)
-	    fprintf(output, "ns '%s'\n", elem->substGroupNs);
-	else
-	    fprintf(output, "\n");
-    }
-}
-
-/**
- * xmlSchemaAnnotDump:
- * @output:  the file output
- * @annot:  a annotation
- *
- * Dump the annotation
- */
-static void
-xmlSchemaAnnotDump(FILE * output, xmlSchemaAnnotPtr annot)
-{
-    xmlChar *content;
-
-    if (annot == NULL)
-        return;
-
-    content = xmlNodeGetContent(annot->content);
-    if (content != NULL) {
-        fprintf(output, "  Annot: %s\n", content);
-        xmlFree(content);
-    } else
-        fprintf(output, "  Annot: empty\n");
-}
-
-/**
- * xmlSchemaContentModelDump:
- * @particle: the schema particle
- * @output: the file output
- * @depth: the depth used for intentation
- *
- * Dump a SchemaType structure
- */
-static void
-xmlSchemaContentModelDump(xmlSchemaParticlePtr particle, FILE * output, int depth)
-{
-    xmlChar *str = NULL;
-    xmlSchemaTreeItemPtr term;
-    char shift[100];
-    int i;
-
-    if (particle == NULL)
-	return;
-    for (i = 0;((i < depth) && (i < 25));i++)
-        shift[2 * i] = shift[2 * i + 1] = ' ';
-    shift[2 * i] = shift[2 * i + 1] = 0;
-    fprintf(output, "%s", shift);
-    if (particle->children == NULL) {
-	fprintf(output, "MISSING particle term\n");
-	return;
-    }
-    term = particle->children;
-    if (term == NULL) {
-	fprintf(output, "(NULL)");
-    } else {
-	switch (term->type) {
-	    case XML_SCHEMA_TYPE_ELEMENT:
-		fprintf(output, "ELEM '%s'", xmlSchemaFormatQName(&str,
-		    ((xmlSchemaElementPtr)term)->targetNamespace,
-		    ((xmlSchemaElementPtr)term)->name));
-		FREE_AND_NULL(str);
-		break;
-	    case XML_SCHEMA_TYPE_SEQUENCE:
-		fprintf(output, "SEQUENCE");
-		break;
-	    case XML_SCHEMA_TYPE_CHOICE:
-		fprintf(output, "CHOICE");
-		break;
-	    case XML_SCHEMA_TYPE_ALL:
-		fprintf(output, "ALL");
-		break;
-	    case XML_SCHEMA_TYPE_ANY:
-		fprintf(output, "ANY");
-		break;
-	    default:
-		fprintf(output, "UNKNOWN\n");
-		return;
-	}
-    }
-    if (particle->minOccurs != 1)
-	fprintf(output, " min: %d", particle->minOccurs);
-    if (particle->maxOccurs >= UNBOUNDED)
-	fprintf(output, " max: unbounded");
-    else if (particle->maxOccurs != 1)
-	fprintf(output, " max: %d", particle->maxOccurs);
-    fprintf(output, "\n");
-    if (term &&
-	((term->type == XML_SCHEMA_TYPE_SEQUENCE) ||
-	 (term->type == XML_SCHEMA_TYPE_CHOICE) ||
-	 (term->type == XML_SCHEMA_TYPE_ALL)) &&
-	 (term->children != NULL)) {
-	xmlSchemaContentModelDump((xmlSchemaParticlePtr) term->children,
-	    output, depth +1);
-    }
-    if (particle->next != NULL)
-	xmlSchemaContentModelDump((xmlSchemaParticlePtr) particle->next,
-		output, depth);
-}
-
-/**
- * xmlSchemaAttrUsesDump:
- * @uses:  attribute uses list
- * @output:  the file output
- *
- * Dumps a list of attribute use components.
- */
-static void
-xmlSchemaAttrUsesDump(xmlSchemaItemListPtr uses, FILE * output)
-{
-    xmlSchemaAttributeUsePtr use;
-    xmlSchemaAttributeUseProhibPtr prohib;
-    xmlSchemaQNameRefPtr ref;
-    const xmlChar *name, *tns;
-    xmlChar *str = NULL;
-    int i;
-
-    if ((uses == NULL) || (uses->nbItems == 0))
-        return;
-
-    fprintf(output, "  attributes:\n");
-    for (i = 0; i < uses->nbItems; i++) {
-	use = uses->items[i];
-	if (use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) {
-	    fprintf(output, "  [prohibition] ");
-	    prohib = (xmlSchemaAttributeUseProhibPtr) use;
-	    name = prohib->name;
-	    tns = prohib->targetNamespace;
-	} else if (use->type == XML_SCHEMA_EXTRA_QNAMEREF) {
-	    fprintf(output, "  [reference] ");
-	    ref = (xmlSchemaQNameRefPtr) use;
-	    name = ref->name;
-	    tns = ref->targetNamespace;
-	} else {
-	    fprintf(output, "  [use] ");
-	    name = WXS_ATTRUSE_DECL_NAME(use);
-	    tns = WXS_ATTRUSE_DECL_TNS(use);
-	}
-	fprintf(output, "'%s'\n",
-	    (const char *) xmlSchemaFormatQName(&str, tns, name));
-	FREE_AND_NULL(str);
-    }
-}
-
-/**
- * xmlSchemaTypeDump:
- * @output:  the file output
- * @type:  a type structure
- *
- * Dump a SchemaType structure
- */
-static void
-xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output)
-{
-    if (type == NULL) {
-        fprintf(output, "Type: NULL\n");
-        return;
-    }
-    fprintf(output, "Type: ");
-    if (type->name != NULL)
-        fprintf(output, "'%s' ", type->name);
-    else
-        fprintf(output, "(no name) ");
-    if (type->targetNamespace != NULL)
-	fprintf(output, "ns '%s' ", type->targetNamespace);
-    switch (type->type) {
-        case XML_SCHEMA_TYPE_BASIC:
-            fprintf(output, "[basic] ");
-            break;
-        case XML_SCHEMA_TYPE_SIMPLE:
-            fprintf(output, "[simple] ");
-            break;
-        case XML_SCHEMA_TYPE_COMPLEX:
-            fprintf(output, "[complex] ");
-            break;
-        case XML_SCHEMA_TYPE_SEQUENCE:
-            fprintf(output, "[sequence] ");
-            break;
-        case XML_SCHEMA_TYPE_CHOICE:
-            fprintf(output, "[choice] ");
-            break;
-        case XML_SCHEMA_TYPE_ALL:
-            fprintf(output, "[all] ");
-            break;
-        case XML_SCHEMA_TYPE_UR:
-            fprintf(output, "[ur] ");
-            break;
-        case XML_SCHEMA_TYPE_RESTRICTION:
-            fprintf(output, "[restriction] ");
-            break;
-        case XML_SCHEMA_TYPE_EXTENSION:
-            fprintf(output, "[extension] ");
-            break;
-        default:
-            fprintf(output, "[unknown type %d] ", type->type);
-            break;
-    }
-    fprintf(output, "content: ");
-    switch (type->contentType) {
-        case XML_SCHEMA_CONTENT_UNKNOWN:
-            fprintf(output, "[unknown] ");
-            break;
-        case XML_SCHEMA_CONTENT_EMPTY:
-            fprintf(output, "[empty] ");
-            break;
-        case XML_SCHEMA_CONTENT_ELEMENTS:
-            fprintf(output, "[element] ");
-            break;
-        case XML_SCHEMA_CONTENT_MIXED:
-            fprintf(output, "[mixed] ");
-            break;
-        case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
-	/* not used. */
-            break;
-        case XML_SCHEMA_CONTENT_BASIC:
-            fprintf(output, "[basic] ");
-            break;
-        case XML_SCHEMA_CONTENT_SIMPLE:
-            fprintf(output, "[simple] ");
-            break;
-        case XML_SCHEMA_CONTENT_ANY:
-            fprintf(output, "[any] ");
-            break;
-    }
-    fprintf(output, "\n");
-    if (type->base != NULL) {
-        fprintf(output, "  base type: '%s'", type->base);
-	if (type->baseNs != NULL)
-	    fprintf(output, " ns '%s'\n", type->baseNs);
-	else
-	    fprintf(output, "\n");
-    }
-    if (type->attrUses != NULL)
-	xmlSchemaAttrUsesDump(type->attrUses, output);
-    if (type->annot != NULL)
-        xmlSchemaAnnotDump(output, type->annot);
-#ifdef DUMP_CONTENT_MODEL
-    if ((type->type == XML_SCHEMA_TYPE_COMPLEX) &&
-	(type->subtypes != NULL)) {
-	xmlSchemaContentModelDump((xmlSchemaParticlePtr) type->subtypes,
-	    output, 1);
-    }
-#endif
-}
-
-/**
- * xmlSchemaDump:
- * @output:  the file output
- * @schema:  a schema structure
- *
- * Dump a Schema structure.
- */
-void
-xmlSchemaDump(FILE * output, xmlSchemaPtr schema)
-{
-    if (output == NULL)
-        return;
-    if (schema == NULL) {
-        fprintf(output, "Schemas: NULL\n");
-        return;
-    }
-    fprintf(output, "Schemas: ");
-    if (schema->name != NULL)
-        fprintf(output, "%s, ", schema->name);
-    else
-        fprintf(output, "no name, ");
-    if (schema->targetNamespace != NULL)
-        fprintf(output, "%s", (const char *) schema->targetNamespace);
-    else
-        fprintf(output, "no target namespace");
-    fprintf(output, "\n");
-    if (schema->annot != NULL)
-        xmlSchemaAnnotDump(output, schema->annot);
-    xmlHashScan(schema->typeDecl, (xmlHashScanner) xmlSchemaTypeDump,
-                output);
-    xmlHashScanFull(schema->elemDecl,
-                    (xmlHashScannerFull) xmlSchemaElementDump, output);
-}
-
-#ifdef DEBUG_IDC_NODE_TABLE
-/**
- * xmlSchemaDebugDumpIDCTable:
- * @vctxt: the WXS validation context
- *
- * Displays the current IDC table for debug purposes.
- */
-static void
-xmlSchemaDebugDumpIDCTable(FILE * output,
-			   const xmlChar *namespaceName,
-			   const xmlChar *localName,
-			   xmlSchemaPSVIIDCBindingPtr bind)
-{
-    xmlChar *str = NULL;
-    const xmlChar *value;
-    xmlSchemaPSVIIDCNodePtr tab;
-    xmlSchemaPSVIIDCKeyPtr key;
-    int i, j, res;
-
-    fprintf(output, "IDC: TABLES on '%s'\n",
-	xmlSchemaFormatQName(&str, namespaceName, localName));
-    FREE_AND_NULL(str)
-
-    if (bind == NULL)
-	return;
-    do {
-	fprintf(output, "IDC:   BINDING '%s' (%d)\n",
-	    xmlSchemaGetComponentQName(&str,
-		bind->definition), bind->nbNodes);
-	FREE_AND_NULL(str)
-	for (i = 0; i < bind->nbNodes; i++) {
-	    tab = bind->nodeTable[i];
-	    fprintf(output, "         ( ");
-	    for (j = 0; j < bind->definition->nbFields; j++) {
-		key = tab->keys[j];
-		if ((key != NULL) && (key->val != NULL)) {
-		    res = xmlSchemaGetCanonValue(key->val, &value);
-		    if (res >= 0)
-			fprintf(output, "'%s' ", value);
-		    else
-			fprintf(output, "CANON-VALUE-FAILED ");
-		    if (res == 0)
-			FREE_AND_NULL(value)
-		} else if (key != NULL)
-		    fprintf(output, "(no val), ");
-		else
-		    fprintf(output, "(key missing), ");
-	    }
-	    fprintf(output, ")\n");
-	}
-	if (bind->dupls && bind->dupls->nbItems) {
-	    fprintf(output, "IDC:     dupls (%d):\n", bind->dupls->nbItems);
-	    for (i = 0; i < bind->dupls->nbItems; i++) {
-		tab = bind->dupls->items[i];
-		fprintf(output, "         ( ");
-		for (j = 0; j < bind->definition->nbFields; j++) {
-		    key = tab->keys[j];
-		    if ((key != NULL) && (key->val != NULL)) {
-			res = xmlSchemaGetCanonValue(key->val, &value);
-			if (res >= 0)
-			    fprintf(output, "'%s' ", value);
-			else
-			    fprintf(output, "CANON-VALUE-FAILED ");
-			if (res == 0)
-			    FREE_AND_NULL(value)
-		    } else if (key != NULL)
-		    fprintf(output, "(no val), ");
-			else
-			    fprintf(output, "(key missing), ");
-		}
-		fprintf(output, ")\n");
-	    }
-	}
-	bind = bind->next;
-    } while (bind != NULL);
-}
-#endif /* DEBUG_IDC */
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- *									*
- *			Utilities					*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaGetPropNode:
- * @node: the element node
- * @name: the name of the attribute
- *
- * Seeks an attribute with a name of @name in
- * no namespace.
- *
- * Returns the attribute or NULL if not present.
- */
-static xmlAttrPtr
-xmlSchemaGetPropNode(xmlNodePtr node, const char *name)
-{
-    xmlAttrPtr prop;
-
-    if ((node == NULL) || (name == NULL))
-	return(NULL);
-    prop = node->properties;
-    while (prop != NULL) {
-        if ((prop->ns == NULL) && xmlStrEqual(prop->name, BAD_CAST name))
-	    return(prop);
-	prop = prop->next;
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaGetPropNodeNs:
- * @node: the element node
- * @uri: the uri
- * @name: the name of the attribute
- *
- * Seeks an attribute with a local name of @name and
- * a namespace URI of @uri.
- *
- * Returns the attribute or NULL if not present.
- */
-static xmlAttrPtr
-xmlSchemaGetPropNodeNs(xmlNodePtr node, const char *uri, const char *name)
-{
-    xmlAttrPtr prop;
-
-    if ((node == NULL) || (name == NULL))
-	return(NULL);
-    prop = node->properties;
-    while (prop != NULL) {
-	if ((prop->ns != NULL) &&
-	    xmlStrEqual(prop->name, BAD_CAST name) &&
-	    xmlStrEqual(prop->ns->href, BAD_CAST uri))
-	    return(prop);
-	prop = prop->next;
-    }
-    return (NULL);
-}
-
-static const xmlChar *
-xmlSchemaGetNodeContent(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
-{
-    xmlChar *val;
-    const xmlChar *ret;
-
-    val = xmlNodeGetContent(node);
-    if (val == NULL)
-	val = xmlStrdup((xmlChar *)"");
-    ret = xmlDictLookup(ctxt->dict, val, -1);
-    xmlFree(val);
-    return(ret);
-}
-
-static const xmlChar *
-xmlSchemaGetNodeContentNoDict(xmlNodePtr node)
-{
-    return((const xmlChar*) xmlNodeGetContent(node));
-}
-
-/**
- * xmlSchemaGetProp:
- * @ctxt: the parser context
- * @node: the node
- * @name: the property name
- *
- * Read a attribute value and internalize the string
- *
- * Returns the string or NULL if not present.
- */
-static const xmlChar *
-xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
-                 const char *name)
-{
-    xmlChar *val;
-    const xmlChar *ret;
-
-    val = xmlGetNoNsProp(node, BAD_CAST name);
-    if (val == NULL)
-        return(NULL);
-    ret = xmlDictLookup(ctxt->dict, val, -1);
-    xmlFree(val);
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *			Parsing functions				*
- *									*
- ************************************************************************/
-
-#define WXS_FIND_GLOBAL_ITEM(slot)			\
-    if (xmlStrEqual(nsName, schema->targetNamespace)) { \
-	ret = xmlHashLookup(schema->slot, name); \
-	if (ret != NULL) goto exit; \
-    } \
-    if (xmlHashSize(schema->schemasImports) > 1) { \
-	xmlSchemaImportPtr import; \
-	if (nsName == NULL) \
-	    import = xmlHashLookup(schema->schemasImports, \
-		XML_SCHEMAS_NO_NAMESPACE); \
-	else \
-	    import = xmlHashLookup(schema->schemasImports, nsName); \
-	if (import == NULL) \
-	    goto exit; \
-	ret = xmlHashLookup(import->schema->slot, name); \
-    }
-
-/**
- * xmlSchemaGetElem:
- * @schema:  the schema context
- * @name:  the element name
- * @ns:  the element namespace
- *
- * Lookup a global element declaration in the schema.
- *
- * Returns the element declaration or NULL if not found.
- */
-static xmlSchemaElementPtr
-xmlSchemaGetElem(xmlSchemaPtr schema, const xmlChar * name,
-                 const xmlChar * nsName)
-{
-    xmlSchemaElementPtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return(NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(elemDecl)
-    }
-exit:
-#ifdef DEBUG
-    if (ret == NULL) {
-        if (nsName == NULL)
-            fprintf(stderr, "Unable to lookup element decl. %s", name);
-        else
-            fprintf(stderr, "Unable to lookup element decl. %s:%s", name,
-                    nsName);
-    }
-#endif
-    return (ret);
-}
-
-/**
- * xmlSchemaGetType:
- * @schema:  the main schema
- * @name:  the type's name
- * nsName:  the type's namespace
- *
- * Lookup a type in the schemas or the predefined types
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetType(xmlSchemaPtr schema, const xmlChar * name,
-                 const xmlChar * nsName)
-{
-    xmlSchemaTypePtr ret = NULL;
-
-    if (name == NULL)
-        return (NULL);
-    /* First try the built-in types. */
-    if ((nsName != NULL) && xmlStrEqual(nsName, xmlSchemaNs)) {
-	ret = xmlSchemaGetPredefinedType(name, nsName);
-	if (ret != NULL)
-	    goto exit;
-	/*
-	* Note that we try the parsed schemas as well here
-	* since one might have parsed the S4S, which contain more
-	* than the built-in types.
-	* TODO: Can we optimize this?
-	*/
-    }
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(typeDecl)
-    }
-exit:
-
-#ifdef DEBUG
-    if (ret == NULL) {
-        if (nsName == NULL)
-            fprintf(stderr, "Unable to lookup type %s", name);
-        else
-            fprintf(stderr, "Unable to lookup type %s:%s", name,
-                    nsName);
-    }
-#endif
-    return (ret);
-}
-
-/**
- * xmlSchemaGetAttributeDecl:
- * @schema:  the context of the schema
- * @name:  the name of the attribute
- * @ns:  the target namespace of the attribute
- *
- * Lookup a an attribute in the schema or imported schemas
- *
- * Returns the attribute declaration or NULL if not found.
- */
-static xmlSchemaAttributePtr
-xmlSchemaGetAttributeDecl(xmlSchemaPtr schema, const xmlChar * name,
-                 const xmlChar * nsName)
-{
-    xmlSchemaAttributePtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return (NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(attrDecl)
-    }
-exit:
-#ifdef DEBUG
-    if (ret == NULL) {
-        if (nsName == NULL)
-            fprintf(stderr, "Unable to lookup attribute %s", name);
-        else
-            fprintf(stderr, "Unable to lookup attribute %s:%s", name,
-                    nsName);
-    }
-#endif
-    return (ret);
-}
-
-/**
- * xmlSchemaGetAttributeGroup:
- * @schema:  the context of the schema
- * @name:  the name of the attribute group
- * @ns:  the target namespace of the attribute group
- *
- * Lookup a an attribute group in the schema or imported schemas
- *
- * Returns the attribute group definition or NULL if not found.
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaGetAttributeGroup(xmlSchemaPtr schema, const xmlChar * name,
-                 const xmlChar * nsName)
-{
-    xmlSchemaAttributeGroupPtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return (NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(attrgrpDecl)
-    }
-exit:
-    /* TODO:
-    if ((ret != NULL) && (ret->redef != NULL)) {
-	* Return the last redefinition. *
-	ret = ret->redef;
-    }
-    */
-#ifdef DEBUG
-    if (ret == NULL) {
-        if (nsName == NULL)
-            fprintf(stderr, "Unable to lookup attribute group %s", name);
-        else
-            fprintf(stderr, "Unable to lookup attribute group %s:%s", name,
-                    nsName);
-    }
-#endif
-    return (ret);
-}
-
-/**
- * xmlSchemaGetGroup:
- * @schema:  the context of the schema
- * @name:  the name of the group
- * @ns:  the target namespace of the group
- *
- * Lookup a group in the schema or imported schemas
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaGetGroup(xmlSchemaPtr schema, const xmlChar * name,
-                 const xmlChar * nsName)
-{
-    xmlSchemaModelGroupDefPtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return (NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(groupDecl)
-    }
-exit:
-
-#ifdef DEBUG
-    if (ret == NULL) {
-        if (nsName == NULL)
-            fprintf(stderr, "Unable to lookup group %s", name);
-        else
-            fprintf(stderr, "Unable to lookup group %s:%s", name,
-                    nsName);
-    }
-#endif
-    return (ret);
-}
-
-static xmlSchemaNotationPtr
-xmlSchemaGetNotation(xmlSchemaPtr schema,
-		     const xmlChar *name,
-		     const xmlChar *nsName)
-{
-    xmlSchemaNotationPtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return (NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(notaDecl)
-    }
-exit:
-    return (ret);
-}
-
-static xmlSchemaIDCPtr
-xmlSchemaGetIDC(xmlSchemaPtr schema,
-		const xmlChar *name,
-		const xmlChar *nsName)
-{
-    xmlSchemaIDCPtr ret = NULL;
-
-    if ((name == NULL) || (schema == NULL))
-        return (NULL);
-    if (schema != NULL) {
-	WXS_FIND_GLOBAL_ITEM(idcDef)
-    }
-exit:
-    return (ret);
-}
-
-/**
- * xmlSchemaGetNamedComponent:
- * @schema:  the schema
- * @name:  the name of the group
- * @ns:  the target namespace of the group
- *
- * Lookup a group in the schema or imported schemas
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaGetNamedComponent(xmlSchemaPtr schema,
-			   xmlSchemaTypeType itemType,
-			   const xmlChar *name,
-			   const xmlChar *targetNs)
-{
-    switch (itemType) {
-	case XML_SCHEMA_TYPE_GROUP:
-	    return ((xmlSchemaBasicItemPtr) xmlSchemaGetGroup(schema,
-		name, targetNs));
-	case XML_SCHEMA_TYPE_ELEMENT:
-	    return ((xmlSchemaBasicItemPtr) xmlSchemaGetElem(schema,
-		name, targetNs));
-	default:
-	    TODO
-	    return (NULL);
-    }
-}
-
-/************************************************************************
- *									*
- *			Parsing functions				*
- *									*
- ************************************************************************/
-
-#define IS_BLANK_NODE(n)						\
-    (((n)->type == XML_TEXT_NODE) && (xmlSchemaIsBlank((n)->content, -1)))
-
-/**
- * xmlSchemaIsBlank:
- * @str:  a string
- * @len: the length of the string or -1
- *
- * Check if a string is ignorable
- *
- * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
- */
-static int
-xmlSchemaIsBlank(xmlChar * str, int len)
-{
-    if (str == NULL)
-        return (1);
-    if (len < 0) {
-	while (*str != 0) {
-	    if (!(IS_BLANK_CH(*str)))
-		return (0);
-	    str++;
-	}
-    } else while ((*str != 0) && (len != 0)) {
-	if (!(IS_BLANK_CH(*str)))
-	    return (0);
-	str++;
-	len--;
-    }
-
-    return (1);
-}
-
-#define WXS_COMP_NAME(c, t) ((t) (c))->name
-#define WXS_COMP_TNS(c, t) ((t) (c))->targetNamespace
-/*
-* xmlSchemaFindRedefCompInGraph:
-* ATTENTION TODO: This uses pointer comp. for strings.
-*/
-static xmlSchemaBasicItemPtr
-xmlSchemaFindRedefCompInGraph(xmlSchemaBucketPtr bucket,
-			      xmlSchemaTypeType type,
-			      const xmlChar *name,
-			      const xmlChar *nsName)
-{
-    xmlSchemaBasicItemPtr ret;
-    int i;
-
-    if ((bucket == NULL) || (name == NULL))
-	return(NULL);
-    if ((bucket->globals == NULL) ||
-	(bucket->globals->nbItems == 0))
-	goto subschemas;
-    /*
-    * Search in global components.
-    */
-    for (i = 0; i < bucket->globals->nbItems; i++) {
-	ret = bucket->globals->items[i];
-	if (ret->type == type) {
-	    switch (type) {
-		case XML_SCHEMA_TYPE_COMPLEX:
-		case XML_SCHEMA_TYPE_SIMPLE:
-		    if ((WXS_COMP_NAME(ret, xmlSchemaTypePtr) == name) &&
-			(WXS_COMP_TNS(ret, xmlSchemaTypePtr) ==
-			nsName))
-		    {
-			return(ret);
-		    }
-		    break;
-		case XML_SCHEMA_TYPE_GROUP:
-		    if ((WXS_COMP_NAME(ret,
-			    xmlSchemaModelGroupDefPtr) == name) &&
-			(WXS_COMP_TNS(ret,
-			    xmlSchemaModelGroupDefPtr) == nsName))
-		    {
-			return(ret);
-		    }
-		    break;
-		case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		    if ((WXS_COMP_NAME(ret,
-			    xmlSchemaAttributeGroupPtr) == name) &&
-			(WXS_COMP_TNS(ret,
-			    xmlSchemaAttributeGroupPtr) == nsName))
-		    {
-			return(ret);
-		    }
-		    break;
-		default:
-		    /* Should not be hit. */
-		    return(NULL);
-	    }
-	}
-    }
-subschemas:
-    /*
-    * Process imported/included schemas.
-    */
-    if (bucket->relations != NULL) {
-	xmlSchemaSchemaRelationPtr rel = bucket->relations;
-
-	/*
-	* TODO: Marking the bucket will not avoid multiple searches
-	* in the same schema, but avoids at least circularity.
-	*/
-	bucket->flags |= XML_SCHEMA_BUCKET_MARKED;
-	do {
-	    if ((rel->bucket != NULL) &&
-		((rel->bucket->flags & XML_SCHEMA_BUCKET_MARKED) == 0)) {
-		ret = xmlSchemaFindRedefCompInGraph(rel->bucket,
-		    type, name, nsName);
-		if (ret != NULL)
-		    return(ret);
-	    }
-	    rel = rel->next;
-	} while (rel != NULL);
-	 bucket->flags ^= XML_SCHEMA_BUCKET_MARKED;
-    }
-    return(NULL);
-}
-
-/**
- * xmlSchemaAddNotation:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the item name
- *
- * Add an XML schema annotation declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaNotationPtr
-xmlSchemaAddNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                     const xmlChar *name, const xmlChar *nsName,
-		     xmlNodePtr node ATTRIBUTE_UNUSED)
-{
-    xmlSchemaNotationPtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaNotationPtr) xmlMalloc(sizeof(xmlSchemaNotation));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "add annotation", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaNotation));
-    ret->type = XML_SCHEMA_TYPE_NOTATION;
-    ret->name = name;
-    ret->targetNamespace = nsName;
-    /* TODO: do we need the node to be set?
-    * ret->node = node;*/
-    WXS_ADD_GLOBAL(ctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaAddAttribute:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the item name
- * @namespace:  the namespace
- *
- * Add an XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributePtr
-xmlSchemaAddAttribute(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                      const xmlChar * name, const xmlChar * nsName,
-		      xmlNodePtr node, int topLevel)
-{
-    xmlSchemaAttributePtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaAttributePtr) xmlMalloc(sizeof(xmlSchemaAttribute));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating attribute", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaAttribute));
-    ret->type = XML_SCHEMA_TYPE_ATTRIBUTE;
-    ret->node = node;
-    ret->name = name;
-    ret->targetNamespace = nsName;
-
-    if (topLevel)
-	WXS_ADD_GLOBAL(ctxt, ret);
-    else
-	WXS_ADD_LOCAL(ctxt, ret);
-    WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaAddAttributeUse:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the item name
- * @namespace:  the namespace
- *
- * Add an XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributeUsePtr
-xmlSchemaAddAttributeUse(xmlSchemaParserCtxtPtr pctxt,
-			 xmlNodePtr node)
-{
-    xmlSchemaAttributeUsePtr ret = NULL;
-
-    if (pctxt == NULL)
-        return (NULL);
-
-    ret = (xmlSchemaAttributeUsePtr) xmlMalloc(sizeof(xmlSchemaAttributeUse));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(pctxt, "allocating attribute", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaAttributeUse));
-    ret->type = XML_SCHEMA_TYPE_ATTRIBUTE_USE;
-    ret->node = node;
-
-    WXS_ADD_LOCAL(pctxt, ret);
-    return (ret);
-}
-
-/*
-* xmlSchemaAddRedef:
-*
-* Adds a redefinition information. This is used at a later stage to:
-* resolve references to the redefined components and to check constraints.
-*/
-static xmlSchemaRedefPtr
-xmlSchemaAddRedef(xmlSchemaParserCtxtPtr pctxt,
-		  xmlSchemaBucketPtr targetBucket,
-		  void *item,
-		  const xmlChar *refName,
-		  const xmlChar *refTargetNs)
-{
-    xmlSchemaRedefPtr ret;
-
-    ret = (xmlSchemaRedefPtr)
-	xmlMalloc(sizeof(xmlSchemaRedef));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(pctxt,
-	    "allocating redefinition info", NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaRedef));
-    ret->item = item;
-    ret->targetBucket = targetBucket;
-    ret->refName = refName;
-    ret->refTargetNs = refTargetNs;
-    if (WXS_CONSTRUCTOR(pctxt)->redefs == NULL)
-	WXS_CONSTRUCTOR(pctxt)->redefs = ret;
-    else
-	WXS_CONSTRUCTOR(pctxt)->lastRedef->next = ret;
-    WXS_CONSTRUCTOR(pctxt)->lastRedef = ret;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaAddAttributeGroupDefinition:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the item name
- * @nsName:  the target namespace
- * @node: the corresponding node
- *
- * Add an XML schema Attrribute Group definition.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaAddAttributeGroupDefinition(xmlSchemaParserCtxtPtr pctxt,
-                           xmlSchemaPtr schema ATTRIBUTE_UNUSED,
-			   const xmlChar *name,
-			   const xmlChar *nsName,
-			   xmlNodePtr node)
-{
-    xmlSchemaAttributeGroupPtr ret = NULL;
-
-    if ((pctxt == NULL) || (name == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaAttributeGroupPtr)
-        xmlMalloc(sizeof(xmlSchemaAttributeGroup));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(pctxt, "allocating attribute group", NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaAttributeGroup));
-    ret->type = XML_SCHEMA_TYPE_ATTRIBUTEGROUP;
-    ret->name = name;
-    ret->targetNamespace = nsName;
-    ret->node = node;
-
-    /* TODO: Remove the flag. */
-    ret->flags |= XML_SCHEMAS_ATTRGROUP_GLOBAL;
-    if (pctxt->isRedefine) {
-	pctxt->redef = xmlSchemaAddRedef(pctxt, pctxt->redefined,
-	    ret, name, nsName);
-	if (pctxt->redef == NULL) {
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	pctxt->redefCounter = 0;
-    }
-    WXS_ADD_GLOBAL(pctxt, ret);
-    WXS_ADD_PENDING(pctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaAddElement:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the type name
- * @namespace:  the type namespace
- *
- * Add an XML schema Element declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaElementPtr
-xmlSchemaAddElement(xmlSchemaParserCtxtPtr ctxt,
-                    const xmlChar * name, const xmlChar * nsName,
-		    xmlNodePtr node, int topLevel)
-{
-    xmlSchemaElementPtr ret = NULL;
-
-    if ((ctxt == NULL) || (name == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaElementPtr) xmlMalloc(sizeof(xmlSchemaElement));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating element", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaElement));
-    ret->type = XML_SCHEMA_TYPE_ELEMENT;
-    ret->name = name;
-    ret->targetNamespace = nsName;
-    ret->node = node;
-
-    if (topLevel)
-	WXS_ADD_GLOBAL(ctxt, ret);
-    else
-	WXS_ADD_LOCAL(ctxt, ret);
-    WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaAddType:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @name:  the item name
- * @namespace:  the namespace
- *
- * Add an XML schema item
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-		 xmlSchemaTypeType type,
-                 const xmlChar * name, const xmlChar * nsName,
-		 xmlNodePtr node, int topLevel)
-{
-    xmlSchemaTypePtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating type", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaType));
-    ret->type = type;
-    ret->name = name;
-    ret->targetNamespace = nsName;
-    ret->node = node;
-    if (topLevel) {
-	if (ctxt->isRedefine) {
-	    ctxt->redef = xmlSchemaAddRedef(ctxt, ctxt->redefined,
-		ret, name, nsName);
-	    if (ctxt->redef == NULL) {
-		xmlFree(ret);
-		return(NULL);
-	    }
-	    ctxt->redefCounter = 0;
-	}
-	WXS_ADD_GLOBAL(ctxt, ret);
-    } else
-	WXS_ADD_LOCAL(ctxt, ret);
-    WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-static xmlSchemaQNameRefPtr
-xmlSchemaNewQNameRef(xmlSchemaParserCtxtPtr pctxt,
-		     xmlSchemaTypeType refType,
-		     const xmlChar *refName,
-		     const xmlChar *refNs)
-{
-    xmlSchemaQNameRefPtr ret;
-
-    ret = (xmlSchemaQNameRefPtr)
-	xmlMalloc(sizeof(xmlSchemaQNameRef));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(pctxt,
-	    "allocating QName reference item", NULL);
-	return (NULL);
-    }
-    ret->node = NULL;
-    ret->type = XML_SCHEMA_EXTRA_QNAMEREF;
-    ret->name = refName;
-    ret->targetNamespace = refNs;
-    ret->item = NULL;
-    ret->itemType = refType;
-    /*
-    * Store the reference item in the schema.
-    */
-    WXS_ADD_LOCAL(pctxt, ret);
-    return (ret);
-}
-
-static xmlSchemaAttributeUseProhibPtr
-xmlSchemaAddAttributeUseProhib(xmlSchemaParserCtxtPtr pctxt)
-{
-    xmlSchemaAttributeUseProhibPtr ret;
-
-    ret = (xmlSchemaAttributeUseProhibPtr)
-	xmlMalloc(sizeof(xmlSchemaAttributeUseProhib));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(pctxt,
-	    "allocating attribute use prohibition", NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaAttributeUseProhib));
-    ret->type = XML_SCHEMA_EXTRA_ATTR_USE_PROHIB;
-    WXS_ADD_LOCAL(pctxt, ret);
-    return (ret);
-}
-
-
-/**
- * xmlSchemaAddModelGroup:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @type: the "compositor" type of the model group
- * @node: the node in the schema doc
- *
- * Adds a schema model group
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaModelGroupPtr
-xmlSchemaAddModelGroup(xmlSchemaParserCtxtPtr ctxt,
-		       xmlSchemaPtr schema,
-		       xmlSchemaTypeType type,
-		       xmlNodePtr node)
-{
-    xmlSchemaModelGroupPtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaModelGroupPtr)
-	xmlMalloc(sizeof(xmlSchemaModelGroup));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(ctxt, "allocating model group component",
-	    NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaModelGroup));
-    ret->type = type;
-    ret->node = node;
-    WXS_ADD_LOCAL(ctxt, ret);
-    if ((type == XML_SCHEMA_TYPE_SEQUENCE) ||
-	(type == XML_SCHEMA_TYPE_CHOICE))
-	WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-
-/**
- * xmlSchemaAddParticle:
- * @ctxt:  a schema parser context
- * @schema:  the schema being built
- * @node: the corresponding node in the schema doc
- * @min: the minOccurs
- * @max: the maxOccurs
- *
- * Adds an XML schema particle component.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaParticlePtr
-xmlSchemaAddParticle(xmlSchemaParserCtxtPtr ctxt,
-		     xmlNodePtr node, int min, int max)
-{
-    xmlSchemaParticlePtr ret = NULL;
-    if (ctxt == NULL)
-        return (NULL);
-
-#ifdef DEBUG
-    fprintf(stderr, "Adding particle component\n");
-#endif
-    ret = (xmlSchemaParticlePtr)
-	xmlMalloc(sizeof(xmlSchemaParticle));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(ctxt, "allocating particle component",
-	    NULL);
-	return (NULL);
-    }
-    ret->type = XML_SCHEMA_TYPE_PARTICLE;
-    ret->annot = NULL;
-    ret->node = node;
-    ret->minOccurs = min;
-    ret->maxOccurs = max;
-    ret->next = NULL;
-    ret->children = NULL;
-
-    WXS_ADD_LOCAL(ctxt, ret);
-    /*
-    * Note that addition to pending components will be done locally
-    * to the specific parsing function, since the most particles
-    * need not to be fixed up (i.e. the reference to be resolved).
-    * REMOVED: WXS_ADD_PENDING(ctxt, ret);
-    */
-    return (ret);
-}
-
-/**
- * xmlSchemaAddModelGroupDefinition:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @name:  the group name
- *
- * Add an XML schema Group definition
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaAddModelGroupDefinition(xmlSchemaParserCtxtPtr ctxt,
-				 xmlSchemaPtr schema,
-				 const xmlChar *name,
-				 const xmlChar *nsName,
-				 xmlNodePtr node)
-{
-    xmlSchemaModelGroupDefPtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaModelGroupDefPtr)
-	xmlMalloc(sizeof(xmlSchemaModelGroupDef));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "adding group", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaModelGroupDef));
-    ret->name = name;
-    ret->type = XML_SCHEMA_TYPE_GROUP;
-    ret->node = node;
-    ret->targetNamespace = nsName;
-
-    if (ctxt->isRedefine) {
-	ctxt->redef = xmlSchemaAddRedef(ctxt, ctxt->redefined,
-	    ret, name, nsName);
-	if (ctxt->redef == NULL) {
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	ctxt->redefCounter = 0;
-    }
-    WXS_ADD_GLOBAL(ctxt, ret);
-    WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaNewWildcardNs:
- * @ctxt:  a schema validation context
- *
- * Creates a new wildcard namespace constraint.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaWildcardNsPtr
-xmlSchemaNewWildcardNsConstraint(xmlSchemaParserCtxtPtr ctxt)
-{
-    xmlSchemaWildcardNsPtr ret;
-
-    ret = (xmlSchemaWildcardNsPtr)
-	xmlMalloc(sizeof(xmlSchemaWildcardNs));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(ctxt, "creating wildcard namespace constraint", NULL);
-	return (NULL);
-    }
-    ret->value = NULL;
-    ret->next = NULL;
-    return (ret);
-}
-
-static xmlSchemaIDCPtr
-xmlSchemaAddIDC(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                  const xmlChar *name, const xmlChar *nsName,
-		  int category, xmlNodePtr node)
-{
-    xmlSchemaIDCPtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaIDCPtr) xmlMalloc(sizeof(xmlSchemaIDC));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt,
-	    "allocating an identity-constraint definition", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaIDC));
-    /* The target namespace of the parent element declaration. */
-    ret->targetNamespace = nsName;
-    ret->name = name;
-    ret->type = category;
-    ret->node = node;
-
-    WXS_ADD_GLOBAL(ctxt, ret);
-    /*
-    * Only keyrefs need to be fixup up.
-    */
-    if (category == XML_SCHEMA_TYPE_IDC_KEYREF)
-	WXS_ADD_PENDING(ctxt, ret);
-    return (ret);
-}
-
-/**
- * xmlSchemaAddWildcard:
- * @ctxt:  a schema validation context
- * @schema: a schema
- *
- * Adds a wildcard.
- * It corresponds to a xsd:anyAttribute and xsd:any.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaWildcardPtr
-xmlSchemaAddWildcard(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-		     xmlSchemaTypeType type, xmlNodePtr node)
-{
-    xmlSchemaWildcardPtr ret = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL))
-        return (NULL);
-
-    ret = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "adding wildcard", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaWildcard));
-    ret->type = type;
-    ret->node = node;
-    WXS_ADD_LOCAL(ctxt, ret);
-    return (ret);
-}
-
-static void
-xmlSchemaSubstGroupFree(xmlSchemaSubstGroupPtr group)
-{
-    if (group == NULL)
-	return;
-    if (group->members != NULL)
-	xmlSchemaItemListFree(group->members);
-    xmlFree(group);
-}
-
-static xmlSchemaSubstGroupPtr
-xmlSchemaSubstGroupAdd(xmlSchemaParserCtxtPtr pctxt,
-		       xmlSchemaElementPtr head)
-{
-    xmlSchemaSubstGroupPtr ret;
-
-    /* Init subst group hash. */
-    if (WXS_SUBST_GROUPS(pctxt) == NULL) {
-	WXS_SUBST_GROUPS(pctxt) = xmlHashCreateDict(10, pctxt->dict);
-	if (WXS_SUBST_GROUPS(pctxt) == NULL)
-	    return(NULL);
-    }
-    /* Create a new substitution group. */
-    ret = (xmlSchemaSubstGroupPtr) xmlMalloc(sizeof(xmlSchemaSubstGroup));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(NULL,
-	    "allocating a substitution group container", NULL);
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaSubstGroup));
-    ret->head = head;
-    /* Create list of members. */
-    ret->members = xmlSchemaItemListCreate();
-    if (ret->members == NULL) {
-	xmlSchemaSubstGroupFree(ret);
-	return(NULL);
-    }
-    /* Add subst group to hash. */
-    if (xmlHashAddEntry2(WXS_SUBST_GROUPS(pctxt),
-	head->name, head->targetNamespace, ret) != 0) {
-	PERROR_INT("xmlSchemaSubstGroupAdd",
-	    "failed to add a new substitution container");
-	xmlSchemaSubstGroupFree(ret);
-	return(NULL);
-    }
-    return(ret);
-}
-
-static xmlSchemaSubstGroupPtr
-xmlSchemaSubstGroupGet(xmlSchemaParserCtxtPtr pctxt,
-		       xmlSchemaElementPtr head)
-{
-    if (WXS_SUBST_GROUPS(pctxt) == NULL)
-	return(NULL);
-    return(xmlHashLookup2(WXS_SUBST_GROUPS(pctxt),
-	head->name, head->targetNamespace));
-
-}
-
-/**
- * xmlSchemaAddElementSubstitutionMember:
- * @pctxt:  a schema parser context
- * @head:  the head of the substitution group
- * @member: the new member of the substitution group
- *
- * Allocate a new annotation structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static int
-xmlSchemaAddElementSubstitutionMember(xmlSchemaParserCtxtPtr pctxt,
-				      xmlSchemaElementPtr head,
-				      xmlSchemaElementPtr member)
-{
-    xmlSchemaSubstGroupPtr substGroup = NULL;
-
-    if ((pctxt == NULL) || (head == NULL) || (member == NULL))
-	return (-1);
-
-    substGroup = xmlSchemaSubstGroupGet(pctxt, head);
-    if (substGroup == NULL)
-	substGroup = xmlSchemaSubstGroupAdd(pctxt, head);
-    if (substGroup == NULL)
-	return(-1);
-    if (xmlSchemaItemListAdd(substGroup->members, member) == -1)
-	return(-1);
-    return(0);
-}
-
-/************************************************************************
- *									*
- *		Utilities for parsing					*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaPValAttrNodeQNameValue:
- * @ctxt:  a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the parent as a schema object
- * @value:  the QName value
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri:  the resulting namespace URI if found
- *
- * Extracts the local name and the URI of a QName value and validates it.
- * This one is intended to be used on attribute values that
- * should resolve to schema components.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeQNameValue(xmlSchemaParserCtxtPtr ctxt,
-				       xmlSchemaPtr schema,
-				       xmlSchemaBasicItemPtr ownerItem,
-				       xmlAttrPtr attr,
-				       const xmlChar *value,
-				       const xmlChar **uri,
-				       const xmlChar **local)
-{
-    const xmlChar *pref;
-    xmlNsPtr ns;
-    int len, ret;
-
-    *uri = NULL;
-    *local = NULL;
-    ret = xmlValidateQName(value, 1);
-    if (ret > 0) {
-	xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    ownerItem, (xmlNodePtr) attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
-	    NULL, value, NULL, NULL, NULL);
-	*local = value;
-	return (ctxt->err);
-    } else if (ret < 0)
-	return (-1);
-
-    if (!strchr((char *) value, ':')) {
-	ns = xmlSearchNs(attr->doc, attr->parent, NULL);
-	if (ns)
-	    *uri = xmlDictLookup(ctxt->dict, ns->href, -1);
-	else if (schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) {
-	    /* TODO: move XML_SCHEMAS_INCLUDING_CONVERT_NS to the
-	    * parser context. */
-	    /*
-	    * This one takes care of included schemas with no
-	    * target namespace.
-	    */
-	    *uri = ctxt->targetNamespace;
-	}
-	*local = xmlDictLookup(ctxt->dict, value, -1);
-	return (0);
-    }
-    /*
-    * At this point xmlSplitQName3 has to return a local name.
-    */
-    *local = xmlSplitQName3(value, &len);
-    *local = xmlDictLookup(ctxt->dict, *local, -1);
-    pref = xmlDictLookup(ctxt->dict, value, len);
-    ns = xmlSearchNs(attr->doc, attr->parent, pref);
-    if (ns == NULL) {
-	xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    ownerItem, (xmlNodePtr) attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME), NULL, value,
-	    "The value '%s' of simple type 'xs:QName' has no "
-	    "corresponding namespace declaration in scope", value, NULL);
-	return (ctxt->err);
-    } else {
-        *uri = xmlDictLookup(ctxt->dict, ns->href, -1);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaPValAttrNodeQName:
- * @ctxt:  a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the owner element
- * @ownerItem: the owner as a schema object
- * @attr:  the attribute node
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri:  the resulting namespace URI if found
- *
- * Extracts and validates the QName of an attribute value.
- * This one is intended to be used on attribute values that
- * should resolve to schema components.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeQName(xmlSchemaParserCtxtPtr ctxt,
-				       xmlSchemaPtr schema,
-				       xmlSchemaBasicItemPtr ownerItem,
-				       xmlAttrPtr attr,
-				       const xmlChar **uri,
-				       const xmlChar **local)
-{
-    const xmlChar *value;
-
-    value = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-    return (xmlSchemaPValAttrNodeQNameValue(ctxt, schema,
-	ownerItem, attr, value, uri, local));
-}
-
-/**
- * xmlSchemaPValAttrQName:
- * @ctxt:  a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the owner as a schema object
- * @ownerElem:  the parent node of the attribute
- * @name:  the name of the attribute
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri:  the resulting namespace URI if found
- *
- * Extracts and validates the QName of an attribute value.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrQName(xmlSchemaParserCtxtPtr ctxt,
-				   xmlSchemaPtr schema,
-				   xmlSchemaBasicItemPtr ownerItem,
-				   xmlNodePtr ownerElem,
-				   const char *name,
-				   const xmlChar **uri,
-				   const xmlChar **local)
-{
-    xmlAttrPtr attr;
-
-    attr = xmlSchemaGetPropNode(ownerElem, name);
-    if (attr == NULL) {
-	*local = NULL;
-	*uri = NULL;
-	return (0);
-    }
-    return (xmlSchemaPValAttrNodeQName(ctxt, schema,
-	ownerItem, attr, uri, local));
-}
-
-/**
- * xmlSchemaPValAttrID:
- * @ctxt:  a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the owner as a schema object
- * @ownerElem:  the parent node of the attribute
- * @name:  the name of the attribute
- *
- * Extracts and validates the ID of an attribute value.
- *
- * Returns 0, in case the ID is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeID(xmlSchemaParserCtxtPtr ctxt, xmlAttrPtr attr)
-{
-    int ret;
-    const xmlChar *value;
-
-    if (attr == NULL)
-	return(0);
-    value = xmlSchemaGetNodeContentNoDict((xmlNodePtr) attr);
-    ret = xmlValidateNCName(value, 1);
-    if (ret == 0) {
-	/*
-	* NOTE: the IDness might have already be declared in the DTD
-	*/
-	if (attr->atype != XML_ATTRIBUTE_ID) {
-	    xmlIDPtr res;
-	    xmlChar *strip;
-
-	    /*
-	    * TODO: Use xmlSchemaStrip here; it's not exported at this
-	    * moment.
-	    */
-	    strip = xmlSchemaCollapseString(value);
-	    if (strip != NULL) {
-		xmlFree((xmlChar *) value);
-		value = strip;
-	    }
-	    res = xmlAddID(NULL, attr->doc, value, attr);
-	    if (res == NULL) {
-		ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
-		xmlSchemaPSimpleTypeErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		    NULL, (xmlNodePtr) attr,
-		    xmlSchemaGetBuiltInType(XML_SCHEMAS_ID),
-		    NULL, NULL, "Duplicate value '%s' of simple "
-		    "type 'xs:ID'", value, NULL);
-	    } else
-		attr->atype = XML_ATTRIBUTE_ID;
-	}
-    } else if (ret > 0) {
-	ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
-	xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    NULL, (xmlNodePtr) attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_ID),
-	    NULL, NULL, "The value '%s' of simple type 'xs:ID' is "
-	    "not a valid 'xs:NCName'",
-	    value, NULL);
-    }
-    if (value != NULL)
-	xmlFree((xmlChar *)value);
-
-    return (ret);
-}
-
-static int
-xmlSchemaPValAttrID(xmlSchemaParserCtxtPtr ctxt,
-		    xmlNodePtr ownerElem,
-		    const xmlChar *name)
-{
-    xmlAttrPtr attr;
-
-    attr = xmlSchemaGetPropNode(ownerElem, (const char *) name);
-    if (attr == NULL)
-	return(0);
-    return(xmlSchemaPValAttrNodeID(ctxt, attr));
-
-}
-
-/**
- * xmlGetMaxOccurs:
- * @ctxt:  a schema validation context
- * @node:  a subtree containing XML Schema informations
- *
- * Get the maxOccurs property
- *
- * Returns the default if not found, or the value
- */
-static int
-xmlGetMaxOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
-		int min, int max, int def, const char *expected)
-{
-    const xmlChar *val, *cur;
-    int ret = 0;
-    xmlAttrPtr attr;
-
-    attr = xmlSchemaGetPropNode(node, "maxOccurs");
-    if (attr == NULL)
-	return (def);
-    val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-
-    if (xmlStrEqual(val, (const xmlChar *) "unbounded")) {
-	if (max != UNBOUNDED) {
-	    xmlSchemaPSimpleTypeErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		/* XML_SCHEMAP_INVALID_MINOCCURS, */
-		NULL, (xmlNodePtr) attr, NULL, expected,
-		val, NULL, NULL, NULL);
-	    return (def);
-	} else
-	    return (UNBOUNDED);  /* encoding it with -1 might be another option */
-    }
-
-    cur = val;
-    while (IS_BLANK_CH(*cur))
-        cur++;
-    if (*cur == 0) {
-        xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    /* XML_SCHEMAP_INVALID_MINOCCURS, */
-	    NULL, (xmlNodePtr) attr, NULL, expected,
-	    val, NULL, NULL, NULL);
-	return (def);
-    }
-    while ((*cur >= '0') && (*cur <= '9')) {
-        ret = ret * 10 + (*cur - '0');
-        cur++;
-    }
-    while (IS_BLANK_CH(*cur))
-        cur++;
-    /*
-    * TODO: Restrict the maximal value to Integer.
-    */
-    if ((*cur != 0) || (ret < min) || ((max != -1) && (ret > max))) {
-	xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    /* XML_SCHEMAP_INVALID_MINOCCURS, */
-	    NULL, (xmlNodePtr) attr, NULL, expected,
-	    val, NULL, NULL, NULL);
-        return (def);
-    }
-    return (ret);
-}
-
-/**
- * xmlGetMinOccurs:
- * @ctxt:  a schema validation context
- * @node:  a subtree containing XML Schema informations
- *
- * Get the minOccurs property
- *
- * Returns the default if not found, or the value
- */
-static int
-xmlGetMinOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
-		int min, int max, int def, const char *expected)
-{
-    const xmlChar *val, *cur;
-    int ret = 0;
-    xmlAttrPtr attr;
-
-    attr = xmlSchemaGetPropNode(node, "minOccurs");
-    if (attr == NULL)
-	return (def);
-    val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-    cur = val;
-    while (IS_BLANK_CH(*cur))
-        cur++;
-    if (*cur == 0) {
-        xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    /* XML_SCHEMAP_INVALID_MINOCCURS, */
-	    NULL, (xmlNodePtr) attr, NULL, expected,
-	    val, NULL, NULL, NULL);
-        return (def);
-    }
-    while ((*cur >= '0') && (*cur <= '9')) {
-        ret = ret * 10 + (*cur - '0');
-        cur++;
-    }
-    while (IS_BLANK_CH(*cur))
-        cur++;
-    /*
-    * TODO: Restrict the maximal value to Integer.
-    */
-    if ((*cur != 0) || (ret < min) || ((max != -1) && (ret > max))) {
-	xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    /* XML_SCHEMAP_INVALID_MINOCCURS, */
-	    NULL, (xmlNodePtr) attr, NULL, expected,
-	    val, NULL, NULL, NULL);
-        return (def);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchemaPGetBoolNodeValue:
- * @ctxt:  a schema validation context
- * @ownerDes:  owner designation
- * @ownerItem:  the owner as a schema item
- * @node: the node holding the value
- *
- * Converts a boolean string value into 1 or 0.
- *
- * Returns 0 or 1.
- */
-static int
-xmlSchemaPGetBoolNodeValue(xmlSchemaParserCtxtPtr ctxt,
-			   xmlSchemaBasicItemPtr ownerItem,
-			   xmlNodePtr node)
-{
-    xmlChar *value = NULL;
-    int res = 0;
-
-    value = xmlNodeGetContent(node);
-    /*
-    * 3.2.2.1 Lexical representation
-    * An instance of a datatype that is defined as `boolean`
-    * can have the following legal literals {true, false, 1, 0}.
-    */
-    if (xmlStrEqual(BAD_CAST value, BAD_CAST "true"))
-        res = 1;
-    else if (xmlStrEqual(BAD_CAST value, BAD_CAST "false"))
-        res = 0;
-    else if (xmlStrEqual(BAD_CAST value, BAD_CAST "1"))
-	res = 1;
-    else if (xmlStrEqual(BAD_CAST value, BAD_CAST "0"))
-        res = 0;
-    else {
-        xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_INVALID_BOOLEAN,
-	    ownerItem, node,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
-	    NULL, BAD_CAST value,
-	    NULL, NULL, NULL);
-    }
-    if (value != NULL)
-	xmlFree(value);
-    return (res);
-}
-
-/**
- * xmlGetBooleanProp:
- * @ctxt:  a schema validation context
- * @node:  a subtree containing XML Schema informations
- * @name:  the attribute name
- * @def:  the default value
- *
- * Evaluate if a boolean property is set
- *
- * Returns the default if not found, 0 if found to be false,
- * 1 if found to be true
- */
-static int
-xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt,
-		  xmlNodePtr node,
-                  const char *name, int def)
-{
-    const xmlChar *val;
-
-    val = xmlSchemaGetProp(ctxt, node, name);
-    if (val == NULL)
-        return (def);
-    /*
-    * 3.2.2.1 Lexical representation
-    * An instance of a datatype that is defined as `boolean`
-    * can have the following legal literals {true, false, 1, 0}.
-    */
-    if (xmlStrEqual(val, BAD_CAST "true"))
-        def = 1;
-    else if (xmlStrEqual(val, BAD_CAST "false"))
-        def = 0;
-    else if (xmlStrEqual(val, BAD_CAST "1"))
-	def = 1;
-    else if (xmlStrEqual(val, BAD_CAST "0"))
-        def = 0;
-    else {
-        xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_INVALID_BOOLEAN,
-	    NULL,
-	    (xmlNodePtr) xmlSchemaGetPropNode(node, name),
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
-	    NULL, val, NULL, NULL, NULL);
-    }
-    return (def);
-}
-
-/************************************************************************
- *									*
- *		Shema extraction from an Infoset			*
- *									*
- ************************************************************************/
-static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr
-                                                 ctxt, xmlSchemaPtr schema,
-                                                 xmlNodePtr node,
-						 int topLevel);
-static xmlSchemaTypePtr xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr
-                                                  ctxt,
-                                                  xmlSchemaPtr schema,
-                                                  xmlNodePtr node,
-						  int topLevel);
-static xmlSchemaTypePtr xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr
-                                                  ctxt,
-                                                  xmlSchemaPtr schema,
-                                                  xmlNodePtr node,
-						  xmlSchemaTypeType parentType);
-static xmlSchemaBasicItemPtr
-xmlSchemaParseLocalAttribute(xmlSchemaParserCtxtPtr pctxt,
-			     xmlSchemaPtr schema,
-			     xmlNodePtr node,
-			     xmlSchemaItemListPtr uses,
-			     int parentType);
-static xmlSchemaTypePtr xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt,
-                                           xmlSchemaPtr schema,
-                                           xmlNodePtr node);
-static xmlSchemaWildcardPtr
-xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
-                           xmlSchemaPtr schema, xmlNodePtr node);
-
-/**
- * xmlSchemaPValAttrNodeValue:
- *
- * @ctxt:  a schema parser context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @attr:  the schema attribute node being validated
- * @value: the value
- * @type: the built-in type to be validated against
- *
- * Validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttrNodeValue(xmlSchemaParserCtxtPtr pctxt,
-			   xmlSchemaBasicItemPtr ownerItem,
-			   xmlAttrPtr attr,
-			   const xmlChar *value,
-			   xmlSchemaTypePtr type)
-{
-
-    int ret = 0;
-
-    /*
-    * NOTE: Should we move this to xmlschematypes.c? Hmm, but this
-    * one is really meant to be used internally, so better not.
-    */
-    if ((pctxt == NULL) || (type == NULL) || (attr == NULL))
-	return (-1);
-    if (type->type != XML_SCHEMA_TYPE_BASIC) {
-	PERROR_INT("xmlSchemaPValAttrNodeValue",
-	    "the given type is not a built-in type");
-	return (-1);
-    }
-    switch (type->builtInType) {
-	case XML_SCHEMAS_NCNAME:
-	case XML_SCHEMAS_QNAME:
-	case XML_SCHEMAS_ANYURI:
-	case XML_SCHEMAS_TOKEN:
-	case XML_SCHEMAS_LANGUAGE:
-	    ret = xmlSchemaValPredefTypeNode(type, value, NULL,
-		(xmlNodePtr) attr);
-	    break;
-	default: {
-	    PERROR_INT("xmlSchemaPValAttrNodeValue",
-		"validation using the given type is not supported while "
-		"parsing a schema");
-	    return (-1);
-	}
-    }
-    /*
-    * TODO: Should we use the S4S error codes instead?
-    */
-    if (ret < 0) {
-	PERROR_INT("xmlSchemaPValAttrNodeValue",
-	    "failed to validate a schema attribute value");
-	return (-1);
-    } else if (ret > 0) {
-	if (WXS_IS_LIST(type))
-	    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
-	else
-	    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
-	xmlSchemaPSimpleTypeErr(pctxt,
-	    ret, ownerItem, (xmlNodePtr) attr,
-	    type, NULL, value, NULL, NULL, NULL);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchemaPValAttrNode:
- *
- * @ctxt:  a schema parser context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @attr:  the schema attribute node being validated
- * @type: the built-in type to be validated against
- * @value: the resulting value if any
- *
- * Extracts and validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttrNode(xmlSchemaParserCtxtPtr ctxt,
-			   xmlSchemaBasicItemPtr ownerItem,
-			   xmlAttrPtr attr,
-			   xmlSchemaTypePtr type,
-			   const xmlChar **value)
-{
-    const xmlChar *val;
-
-    if ((ctxt == NULL) || (type == NULL) || (attr == NULL))
-	return (-1);
-
-    val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-    if (value != NULL)
-	*value = val;
-
-    return (xmlSchemaPValAttrNodeValue(ctxt, ownerItem, attr,
-	val, type));
-}
-
-/**
- * xmlSchemaPValAttr:
- *
- * @ctxt:  a schema parser context
- * @node: the element node of the attribute
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @ownerElem: the owner element node
- * @name:  the name of the schema attribute node
- * @type: the built-in type to be validated against
- * @value: the resulting value if any
- *
- * Extracts and validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttr(xmlSchemaParserCtxtPtr ctxt,
-		       xmlSchemaBasicItemPtr ownerItem,
-		       xmlNodePtr ownerElem,
-		       const char *name,
-		       xmlSchemaTypePtr type,
-		       const xmlChar **value)
-{
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (type == NULL)) {
-	if (value != NULL)
-	    *value = NULL;
-	return (-1);
-    }
-    if (type->type != XML_SCHEMA_TYPE_BASIC) {
-	if (value != NULL)
-	    *value = NULL;
-	xmlSchemaPErr(ctxt, ownerElem,
-	    XML_SCHEMAP_INTERNAL,
-	    "Internal error: xmlSchemaPValAttr, the given "
-	    "type '%s' is not a built-in type.\n",
-	    type->name, NULL);
-	return (-1);
-    }
-    attr = xmlSchemaGetPropNode(ownerElem, name);
-    if (attr == NULL) {
-	if (value != NULL)
-	    *value = NULL;
-	return (0);
-    }
-    return (xmlSchemaPValAttrNode(ctxt, ownerItem, attr,
-	type, value));
-}
-
-static int
-xmlSchemaCheckReference(xmlSchemaParserCtxtPtr pctxt,
-		  xmlSchemaPtr schema ATTRIBUTE_UNUSED,
-		  xmlNodePtr node,
-		  xmlAttrPtr attr,
-		  const xmlChar *namespaceName)
-{
-    /* TODO: Pointer comparison instead? */
-    if (xmlStrEqual(pctxt->targetNamespace, namespaceName))
-	return (0);
-    if (xmlStrEqual(xmlSchemaNs, namespaceName))
-	return (0);
-    /*
-    * Check if the referenced namespace was <import>ed.
-    */
-    if (WXS_BUCKET(pctxt)->relations != NULL) {
-	xmlSchemaSchemaRelationPtr rel;
-
-	rel = WXS_BUCKET(pctxt)->relations;
-	do {
-	    if (WXS_IS_BUCKET_IMPMAIN(rel->type) &&
-		xmlStrEqual(namespaceName, rel->importNamespace))
-		return (0);
-	    rel = rel->next;
-	} while (rel != NULL);
-    }
-    /*
-    * No matching <import>ed namespace found.
-    */
-    {
-	xmlNodePtr n = (attr != NULL) ? (xmlNodePtr) attr : node;
-
-	if (namespaceName == NULL)
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_SRC_RESOLVE, n, NULL,
-		"References from this schema to components in no "
-		"namespace are not allowed, since not indicated by an "
-		"import statement", NULL, NULL);
-	else
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_SRC_RESOLVE, n, NULL,
-		"References from this schema to components in the "
-		"namespace '%s' are not allowed, since not indicated by an "
-		"import statement", namespaceName, NULL);
-    }
-    return (XML_SCHEMAP_SRC_RESOLVE);
-}
-
-/**
- * xmlSchemaParseLocalAttributes:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- * @type:  the hosting type where the attributes will be anchored
- *
- * Parses attribute uses and attribute declarations and
- * attribute group references.
- */
-static int
-xmlSchemaParseLocalAttributes(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                        xmlNodePtr *child, xmlSchemaItemListPtr *list,
-			int parentType, int *hasRefs)
-{
-    void *item;
-
-    while ((IS_SCHEMA((*child), "attribute")) ||
-           (IS_SCHEMA((*child), "attributeGroup"))) {
-        if (IS_SCHEMA((*child), "attribute")) {
-	    item = xmlSchemaParseLocalAttribute(ctxt, schema, *child,
-		*list, parentType);
-        } else {
-            item = xmlSchemaParseAttributeGroupRef(ctxt, schema, *child);
-	    if ((item != NULL) && (hasRefs != NULL))
-		*hasRefs = 1;
-        }
-	if (item != NULL) {
-	    if (*list == NULL) {
-		/* TODO: Customize grow factor. */
-		*list = xmlSchemaItemListCreate();
-		if (*list == NULL)
-		    return(-1);
-	    }
-	    if (xmlSchemaItemListAddSize(*list, 2, item) == -1)
-		return(-1);
-	}
-        *child = (*child)->next;
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaParseAnnotation:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- *         1 in case of success.
- */
-static xmlSchemaAnnotPtr
-xmlSchemaParseAnnotation(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int needed)
-{
-    xmlSchemaAnnotPtr ret;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    int barked = 0;
-
-    /*
-    * INFO: S4S completed.
-    */
-    /*
-    * id = ID
-    * {any attributes with non-schema namespace . . .}>
-    * Content: (appinfo | documentation)*
-    */
-    if ((ctxt == NULL) || (node == NULL))
-        return (NULL);
-    if (needed)
-	ret = xmlSchemaNewAnnot(ctxt, node);
-    else
-	ret = NULL;
-    attr = node->properties;
-    while (attr != NULL) {
-	if (((attr->ns == NULL) &&
-	    (!xmlStrEqual(attr->name, BAD_CAST "id"))) ||
-	    ((attr->ns != NULL) &&
-	    xmlStrEqual(attr->ns->href, xmlSchemaNs))) {
-
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    while (child != NULL) {
-	if (IS_SCHEMA(child, "appinfo")) {
-	    /* TODO: make available the content of "appinfo". */
-	    /*
-	    * source = anyURI
-	    * {any attributes with non-schema namespace . . .}>
-	    * Content: ({any})*
-	    */
-	    attr = child->properties;
-	    while (attr != NULL) {
-		if (((attr->ns == NULL) &&
-		     (!xmlStrEqual(attr->name, BAD_CAST "source"))) ||
-		     ((attr->ns != NULL) &&
-		      xmlStrEqual(attr->ns->href, xmlSchemaNs))) {
-
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-		attr = attr->next;
-	    }
-	    xmlSchemaPValAttr(ctxt, NULL, child, "source",
-		xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), NULL);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "documentation")) {
-	    /* TODO: make available the content of "documentation". */
-	    /*
-	    * source = anyURI
-	    * {any attributes with non-schema namespace . . .}>
-	    * Content: ({any})*
-	    */
-	    attr = child->properties;
-	    while (attr != NULL) {
-		if (attr->ns == NULL) {
-		    if (!xmlStrEqual(attr->name, BAD_CAST "source")) {
-			xmlSchemaPIllegalAttrErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		    }
-		} else {
-		    if (xmlStrEqual(attr->ns->href, xmlSchemaNs) ||
-			(xmlStrEqual(attr->name, BAD_CAST "lang") &&
-			(!xmlStrEqual(attr->ns->href, XML_XML_NAMESPACE)))) {
-
-			xmlSchemaPIllegalAttrErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		    }
-		}
-		attr = attr->next;
-	    }
-	    /*
-	    * Attribute "xml:lang".
-	    */
-	    attr = xmlSchemaGetPropNodeNs(child, (const char *) XML_XML_NAMESPACE, "lang");
-	    if (attr != NULL)
-		xmlSchemaPValAttrNode(ctxt, NULL, attr,
-		xmlSchemaGetBuiltInType(XML_SCHEMAS_LANGUAGE), NULL);
-	    child = child->next;
-	} else {
-	    if (!barked)
-		xmlSchemaPContentErr(ctxt,
-		    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		    NULL, node, child, NULL, "(appinfo | documentation)*");
-	    barked = 1;
-	    child = child->next;
-	}
-    }
-
-    return (ret);
-}
-
-/**
- * xmlSchemaParseFacet:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Facet declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new type structure or NULL in case of error
- */
-static xmlSchemaFacetPtr
-xmlSchemaParseFacet(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                    xmlNodePtr node)
-{
-    xmlSchemaFacetPtr facet;
-    xmlNodePtr child = NULL;
-    const xmlChar *value;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    facet = xmlSchemaNewFacet();
-    if (facet == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating facet", node);
-        return (NULL);
-    }
-    facet->node = node;
-    value = xmlSchemaGetProp(ctxt, node, "value");
-    if (value == NULL) {
-        xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_FACET_NO_VALUE,
-                       "Facet %s has no value\n", node->name, NULL);
-        xmlSchemaFreeFacet(facet);
-        return (NULL);
-    }
-    if (IS_SCHEMA(node, "minInclusive")) {
-        facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
-    } else if (IS_SCHEMA(node, "minExclusive")) {
-        facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
-    } else if (IS_SCHEMA(node, "maxInclusive")) {
-        facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
-    } else if (IS_SCHEMA(node, "maxExclusive")) {
-        facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
-    } else if (IS_SCHEMA(node, "totalDigits")) {
-        facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
-    } else if (IS_SCHEMA(node, "fractionDigits")) {
-        facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
-    } else if (IS_SCHEMA(node, "pattern")) {
-        facet->type = XML_SCHEMA_FACET_PATTERN;
-    } else if (IS_SCHEMA(node, "enumeration")) {
-        facet->type = XML_SCHEMA_FACET_ENUMERATION;
-    } else if (IS_SCHEMA(node, "whiteSpace")) {
-        facet->type = XML_SCHEMA_FACET_WHITESPACE;
-    } else if (IS_SCHEMA(node, "length")) {
-        facet->type = XML_SCHEMA_FACET_LENGTH;
-    } else if (IS_SCHEMA(node, "maxLength")) {
-        facet->type = XML_SCHEMA_FACET_MAXLENGTH;
-    } else if (IS_SCHEMA(node, "minLength")) {
-        facet->type = XML_SCHEMA_FACET_MINLENGTH;
-    } else {
-        xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_TYPE,
-                       "Unknown facet type %s\n", node->name, NULL);
-        xmlSchemaFreeFacet(facet);
-        return (NULL);
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    facet->value = value;
-    if ((facet->type != XML_SCHEMA_FACET_PATTERN) &&
-	(facet->type != XML_SCHEMA_FACET_ENUMERATION)) {
-	const xmlChar *fixed;
-
-	fixed = xmlSchemaGetProp(ctxt, node, "fixed");
-	if (fixed != NULL) {
-	    if (xmlStrEqual(fixed, BAD_CAST "true"))
-		facet->fixed = 1;
-	}
-    }
-    child = node->children;
-
-    if (IS_SCHEMA(child, "annotation")) {
-        facet->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (child != NULL) {
-        xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_CHILD,
-                       "Facet %s has unexpected child content\n",
-                       node->name, NULL);
-    }
-    return (facet);
-}
-
-/**
- * xmlSchemaParseWildcardNs:
- * @ctxt:  a schema parser context
- * @wildc:  the wildcard, already created
- * @node:  a subtree containing XML Schema informations
- *
- * Parses the attribute "processContents" and "namespace"
- * of a xsd:anyAttribute and xsd:any.
- * *WARNING* this interface is highly subject to change
- *
- * Returns 0 if everything goes fine, a positive error code
- * if something is not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaParseWildcardNs(xmlSchemaParserCtxtPtr ctxt,
-			 xmlSchemaPtr schema ATTRIBUTE_UNUSED,
-			 xmlSchemaWildcardPtr wildc,
-			 xmlNodePtr node)
-{
-    const xmlChar *pc, *ns, *dictnsItem;
-    int ret = 0;
-    xmlChar *nsItem;
-    xmlSchemaWildcardNsPtr tmp, lastNs = NULL;
-    xmlAttrPtr attr;
-
-    pc = xmlSchemaGetProp(ctxt, node, "processContents");
-    if ((pc == NULL)
-        || (xmlStrEqual(pc, (const xmlChar *) "strict"))) {
-        wildc->processContents = XML_SCHEMAS_ANY_STRICT;
-    } else if (xmlStrEqual(pc, (const xmlChar *) "skip")) {
-        wildc->processContents = XML_SCHEMAS_ANY_SKIP;
-    } else if (xmlStrEqual(pc, (const xmlChar *) "lax")) {
-        wildc->processContents = XML_SCHEMAS_ANY_LAX;
-    } else {
-        xmlSchemaPSimpleTypeErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    NULL, node,
-	    NULL, "(strict | skip | lax)", pc,
-	    NULL, NULL, NULL);
-        wildc->processContents = XML_SCHEMAS_ANY_STRICT;
-	ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
-    }
-    /*
-     * Build the namespace constraints.
-     */
-    attr = xmlSchemaGetPropNode(node, "namespace");
-    ns = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-    if ((attr == NULL) || (xmlStrEqual(ns, BAD_CAST "##any")))
-	wildc->any = 1;
-    else if (xmlStrEqual(ns, BAD_CAST "##other")) {
-	wildc->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
-	if (wildc->negNsSet == NULL) {
-	    return (-1);
-	}
-	wildc->negNsSet->value = ctxt->targetNamespace;
-    } else {
-	const xmlChar *end, *cur;
-
-	cur = ns;
-	do {
-	    while (IS_BLANK_CH(*cur))
-		cur++;
-	    end = cur;
-	    while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-		end++;
-	    if (end == cur)
-		break;
-	    nsItem = xmlStrndup(cur, end - cur);
-	    if ((xmlStrEqual(nsItem, BAD_CAST "##other")) ||
-		    (xmlStrEqual(nsItem, BAD_CAST "##any"))) {
-		xmlSchemaPSimpleTypeErr(ctxt,
-		    XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER,
-		    NULL, (xmlNodePtr) attr,
-		    NULL,
-		    "((##any | ##other) | List of (xs:anyURI | "
-		    "(##targetNamespace | ##local)))",
-		    nsItem, NULL, NULL, NULL);
-		ret = XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER;
-	    } else {
-		if (xmlStrEqual(nsItem, BAD_CAST "##targetNamespace")) {
-		    dictnsItem = ctxt->targetNamespace;
-		} else if (xmlStrEqual(nsItem, BAD_CAST "##local")) {
-		    dictnsItem = NULL;
-		} else {
-		    /*
-		    * Validate the item (anyURI).
-		    */
-		    xmlSchemaPValAttrNodeValue(ctxt, NULL, attr,
-			nsItem, xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI));
-		    dictnsItem = xmlDictLookup(ctxt->dict, nsItem, -1);
-		}
-		/*
-		* Avoid dublicate namespaces.
-		*/
-		tmp = wildc->nsSet;
-		while (tmp != NULL) {
-		    if (dictnsItem == tmp->value)
-			break;
-		    tmp = tmp->next;
-		}
-		if (tmp == NULL) {
-		    tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
-		    if (tmp == NULL) {
-			xmlFree(nsItem);
-			return (-1);
-		    }
-		    tmp->value = dictnsItem;
-		    tmp->next = NULL;
-		    if (wildc->nsSet == NULL)
-			wildc->nsSet = tmp;
-		    else if (lastNs != NULL)
-			lastNs->next = tmp;
-		    lastNs = tmp;
-		}
-
-	    }
-	    xmlFree(nsItem);
-	    cur = end;
-	} while (*cur != 0);
-    }
-    return (ret);
-}
-
-static int
-xmlSchemaPCheckParticleCorrect_2(xmlSchemaParserCtxtPtr ctxt,
-				 xmlSchemaParticlePtr item ATTRIBUTE_UNUSED,
-				 xmlNodePtr node,
-				 int minOccurs,
-				 int maxOccurs) {
-
-    if ((maxOccurs == 0) && ( minOccurs == 0))
-	return (0);
-    if (maxOccurs != UNBOUNDED) {
-	/*
-	* TODO: Maybe we should better not create the particle,
-	* if min/max is invalid, since it could confuse the build of the
-	* content model.
-	*/
-	/*
-	* 3.9.6 Schema Component Constraint: Particle Correct
-	*
-	*/
-	if (maxOccurs < 1) {
-	    /*
-	    * 2.2 {max occurs} must be greater than or equal to 1.
-	    */
-	    xmlSchemaPCustomAttrErr(ctxt,
-		XML_SCHEMAP_P_PROPS_CORRECT_2_2,
-		NULL, NULL,
-		xmlSchemaGetPropNode(node, "maxOccurs"),
-		"The value must be greater than or equal to 1");
-	    return (XML_SCHEMAP_P_PROPS_CORRECT_2_2);
-	} else if (minOccurs > maxOccurs) {
-	    /*
-	    * 2.1 {min occurs} must not be greater than {max occurs}.
-	    */
-	    xmlSchemaPCustomAttrErr(ctxt,
-		XML_SCHEMAP_P_PROPS_CORRECT_2_1,
-		NULL, NULL,
-		xmlSchemaGetPropNode(node, "minOccurs"),
-		"The value must not be greater than the value of 'maxOccurs'");
-	    return (XML_SCHEMAP_P_PROPS_CORRECT_2_1);
-	}
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaParseAny:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parsea a XML schema <any> element. A particle and wildcard
- * will be created (except if minOccurs==maxOccurs==0, in this case
- * nothing will be created).
- * *WARNING* this interface is highly subject to change
- *
- * Returns the particle or NULL in case of error or if minOccurs==maxOccurs==0
- */
-static xmlSchemaParticlePtr
-xmlSchemaParseAny(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                  xmlNodePtr node)
-{
-    xmlSchemaParticlePtr particle;
-    xmlNodePtr child = NULL;
-    xmlSchemaWildcardPtr wild;
-    int min, max;
-    xmlAttrPtr attr;
-    xmlSchemaAnnotPtr annot = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
-	        (!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "processContents"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * minOccurs/maxOccurs.
-    */
-    max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
-	"(xs:nonNegativeInteger | unbounded)");
-    min = xmlGetMinOccurs(ctxt, node, 0, -1, 1,
-	"xs:nonNegativeInteger");
-    xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
-    /*
-    * Create & parse the wildcard.
-    */
-    wild = xmlSchemaAddWildcard(ctxt, schema, XML_SCHEMA_TYPE_ANY, node);
-    if (wild == NULL)
-	return (NULL);
-    xmlSchemaParseWildcardNs(ctxt, schema, wild, node);
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?)");
-    }
-    /*
-    * No component if minOccurs==maxOccurs==0.
-    */
-    if ((min == 0) && (max == 0)) {
-	/* Don't free the wildcard, since it's already on the list. */
-	return (NULL);
-    }
-    /*
-    * Create the particle.
-    */
-    particle = xmlSchemaAddParticle(ctxt, node, min, max);
-    if (particle == NULL)
-        return (NULL);
-    particle->annot = annot;
-    particle->children = (xmlSchemaTreeItemPtr) wild;
-
-    return (particle);
-}
-
-/**
- * xmlSchemaParseNotation:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Notation declaration
- *
- * Returns the new structure or NULL in case of error
- */
-static xmlSchemaNotationPtr
-xmlSchemaParseNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                       xmlNodePtr node)
-{
-    const xmlChar *name;
-    xmlSchemaNotationPtr ret;
-    xmlNodePtr child = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    name = xmlSchemaGetProp(ctxt, node, "name");
-    if (name == NULL) {
-        xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_NOTATION_NO_NAME,
-                       "Notation has no name\n", NULL, NULL);
-        return (NULL);
-    }
-    ret = xmlSchemaAddNotation(ctxt, schema, name,
-	ctxt->targetNamespace, node);
-    if (ret == NULL)
-        return (NULL);
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        ret->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?)");
-    }
-
-    return (ret);
-}
-
-/**
- * xmlSchemaParseAnyAttribute:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema AnyAttrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns a wildcard or NULL.
- */
-static xmlSchemaWildcardPtr
-xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
-                           xmlSchemaPtr schema, xmlNodePtr node)
-{
-    xmlSchemaWildcardPtr ret;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    ret = xmlSchemaAddWildcard(ctxt, schema, XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
-	node);
-    if (ret == NULL) {
-        return (NULL);
-    }
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-	        (!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "processContents"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * Parse the namespace list.
-    */
-    if (xmlSchemaParseWildcardNs(ctxt, schema, ret, node) != 0)
-	return (NULL);
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        ret->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?)");
-    }
-
-    return (ret);
-}
-
-
-/**
- * xmlSchemaParseAttribute:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute declaration.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaParseLocalAttribute(xmlSchemaParserCtxtPtr pctxt,
-			     xmlSchemaPtr schema,
-			     xmlNodePtr node,
-			     xmlSchemaItemListPtr uses,
-			     int parentType)
-{
-    const xmlChar *attrValue, *name = NULL, *ns = NULL;
-    xmlSchemaAttributeUsePtr use = NULL;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *tmpNs = NULL, *tmpName = NULL, *defValue = NULL;
-    int isRef = 0, occurs = XML_SCHEMAS_ATTR_USE_OPTIONAL;
-    int	nberrors, hasForm = 0, defValueType = 0;
-
-#define WXS_ATTR_DEF_VAL_DEFAULT 1
-#define WXS_ATTR_DEF_VAL_FIXED 2
-
-    /*
-     * 3.2.3 Constraints on XML Representations of Attribute Declarations
-     */
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    attr = xmlSchemaGetPropNode(node, "ref");
-    if (attr != NULL) {
-	if (xmlSchemaPValAttrNodeQName(pctxt, schema,
-	    NULL, attr, &tmpNs, &tmpName) != 0) {
-	    return (NULL);
-	}
-	if (xmlSchemaCheckReference(pctxt, schema, node, attr, tmpNs) != 0)
-	    return(NULL);
-	isRef = 1;
-    }
-    nberrors = pctxt->nberrors;
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if (isRef) {
-		if (xmlStrEqual(attr->name, BAD_CAST "id")) {
-		    xmlSchemaPValAttrNodeID(pctxt, attr);
-		    goto attr_next;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "ref")) {
-		    goto attr_next;
-		}
-	    } else {
-		if (xmlStrEqual(attr->name, BAD_CAST "name")) {
-		    goto attr_next;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "id")) {
-		    xmlSchemaPValAttrNodeID(pctxt, attr);
-		    goto attr_next;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "type")) {
-		    xmlSchemaPValAttrNodeQName(pctxt, schema, NULL,
-			attr, &tmpNs, &tmpName);
-		    goto attr_next;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "form")) {
-		    /*
-		    * Evaluate the target namespace
-		    */
-		    hasForm = 1;
-		    attrValue = xmlSchemaGetNodeContent(pctxt,
-			(xmlNodePtr) attr);
-		    if (xmlStrEqual(attrValue, BAD_CAST "qualified")) {
-			ns = pctxt->targetNamespace;
-		    } else if (!xmlStrEqual(attrValue, BAD_CAST "unqualified"))
-		    {
-			xmlSchemaPSimpleTypeErr(pctxt,
-			    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-			    NULL, (xmlNodePtr) attr,
-			    NULL, "(qualified | unqualified)",
-			    attrValue, NULL, NULL, NULL);
-		    }
-		    goto attr_next;
-		}
-	    }
-	    if (xmlStrEqual(attr->name, BAD_CAST "use")) {
-
-		attrValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
-		/* TODO: Maybe we need to normalize the value beforehand. */
-		if (xmlStrEqual(attrValue, BAD_CAST "optional"))
-		    occurs = XML_SCHEMAS_ATTR_USE_OPTIONAL;
-		else if (xmlStrEqual(attrValue, BAD_CAST "prohibited"))
-		    occurs = XML_SCHEMAS_ATTR_USE_PROHIBITED;
-		else if (xmlStrEqual(attrValue, BAD_CAST "required"))
-		    occurs = XML_SCHEMAS_ATTR_USE_REQUIRED;
-		else {
-		    xmlSchemaPSimpleTypeErr(pctxt,
-			XML_SCHEMAP_INVALID_ATTR_USE,
-			NULL, (xmlNodePtr) attr,
-			NULL, "(optional | prohibited | required)",
-			attrValue, NULL, NULL, NULL);
-		}
-		goto attr_next;
-	    } else if (xmlStrEqual(attr->name, BAD_CAST "default")) {
-		/*
-		* 3.2.3 : 1
-		* default and fixed must not both be present.
-		*/
-		if (defValue) {
-		    xmlSchemaPMutualExclAttrErr(pctxt,
-			XML_SCHEMAP_SRC_ATTRIBUTE_1,
-			NULL, attr, "default", "fixed");
-		} else {
-		    defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
-		    defValueType = WXS_ATTR_DEF_VAL_DEFAULT;
-		}
-		goto attr_next;
-	    } else if (xmlStrEqual(attr->name, BAD_CAST "fixed")) {
-		/*
-		* 3.2.3 : 1
-		* default and fixed must not both be present.
-		*/
-		if (defValue) {
-		    xmlSchemaPMutualExclAttrErr(pctxt,
-			XML_SCHEMAP_SRC_ATTRIBUTE_1,
-			NULL, attr, "default", "fixed");
-		} else {
-		    defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
-		    defValueType = WXS_ATTR_DEF_VAL_FIXED;
-		}
-		goto attr_next;
-	    }
-	} else if (! xmlStrEqual(attr->ns->href, xmlSchemaNs))
-	    goto attr_next;
-
-	xmlSchemaPIllegalAttrErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-
-attr_next:
-	attr = attr->next;
-    }
-    /*
-    * 3.2.3 : 2
-    * If default and use are both present, use must have
-    * the actual value optional.
-    */
-    if ((defValueType == WXS_ATTR_DEF_VAL_DEFAULT) &&
-	(occurs != XML_SCHEMAS_ATTR_USE_OPTIONAL)) {
-	xmlSchemaPSimpleTypeErr(pctxt,
-	    XML_SCHEMAP_SRC_ATTRIBUTE_2,
-	    NULL, node, NULL,
-	    "(optional | prohibited | required)", NULL,
-	    "The value of the attribute 'use' must be 'optional' "
-	    "if the attribute 'default' is present",
-	    NULL, NULL);
-    }
-    /*
-    * We want correct attributes.
-    */
-    if (nberrors != pctxt->nberrors)
-	return(NULL);
-    if (! isRef) {
-	xmlSchemaAttributePtr attrDecl;
-
-	/* TODO: move XML_SCHEMAS_QUALIF_ATTR to the parser. */
-	if ((! hasForm) && (schema->flags & XML_SCHEMAS_QUALIF_ATTR))
-	    ns = pctxt->targetNamespace;
-	/*
-	* 3.2.6 Schema Component Constraint: xsi: Not Allowed
-	* TODO: Move this to the component layer.
-	*/
-	if (xmlStrEqual(ns, xmlSchemaInstanceNs)) {
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_NO_XSI,
-		node, NULL,
-		"The target namespace must not match '%s'",
-		xmlSchemaInstanceNs, NULL);
-	}
-	attr = xmlSchemaGetPropNode(node, "name");
-	if (attr == NULL) {
-	    xmlSchemaPMissingAttrErr(pctxt, XML_SCHEMAP_S4S_ATTR_MISSING,
-		NULL, node, "name", NULL);
-	    return (NULL);
-	}
-	if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
-	    return (NULL);
-	}
-	/*
-	* 3.2.6 Schema Component Constraint: xmlns Not Allowed
-	* TODO: Move this to the component layer.
-	*/
-	if (xmlStrEqual(name, BAD_CAST "xmlns")) {
-	    xmlSchemaPSimpleTypeErr(pctxt,
-		XML_SCHEMAP_NO_XMLNS,
-		NULL, (xmlNodePtr) attr,
-		xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), NULL, NULL,
-		"The value of the attribute must not match 'xmlns'",
-		NULL, NULL);
-	    return (NULL);
-	}
-	if (occurs == XML_SCHEMAS_ATTR_USE_PROHIBITED)
-	    goto check_children;
-	/*
-	* Create the attribute use component.
-	*/
-	use = xmlSchemaAddAttributeUse(pctxt, node);
-	if (use == NULL)
-	    return(NULL);
-	use->occurs = occurs;
-	/*
-	* Create the attribute declaration.
-	*/
-	attrDecl = xmlSchemaAddAttribute(pctxt, schema, name, ns, node, 0);
-	if (attrDecl == NULL)
-	    return (NULL);
-	if (tmpName != NULL) {
-	    attrDecl->typeName = tmpName;
-	    attrDecl->typeNs = tmpNs;
-	}
-	use->attrDecl = attrDecl;
-	/*
-	* Value constraint.
-	*/
-	if (defValue != NULL) {
-	    attrDecl->defValue = defValue;
-	    if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
-		attrDecl->flags |= XML_SCHEMAS_ATTR_FIXED;
-	}
-    } else if (occurs != XML_SCHEMAS_ATTR_USE_PROHIBITED) {
-	xmlSchemaQNameRefPtr ref;
-
-	/*
-	* Create the attribute use component.
-	*/
-	use = xmlSchemaAddAttributeUse(pctxt, node);
-	if (use == NULL)
-	    return(NULL);
-	/*
-	* We need to resolve the reference at later stage.
-	*/
-	WXS_ADD_PENDING(pctxt, use);
-	use->occurs = occurs;
-	/*
-	* Create a QName reference to the attribute declaration.
-	*/
-	ref = xmlSchemaNewQNameRef(pctxt, XML_SCHEMA_TYPE_ATTRIBUTE,
-	    tmpName, tmpNs);
-	if (ref == NULL)
-	    return(NULL);
-	/*
-	* Assign the reference. This will be substituted for the
-	* referenced attribute declaration when the QName is resolved.
-	*/
-	use->attrDecl = WXS_ATTR_CAST ref;
-	/*
-	* Value constraint.
-	*/
-	if (defValue != NULL)
-	    use->defValue = defValue;
-	    if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
-		use->flags |= XML_SCHEMA_ATTR_USE_FIXED;
-    }
-
-check_children:
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (occurs == XML_SCHEMAS_ATTR_USE_PROHIBITED) {
-	xmlSchemaAttributeUseProhibPtr prohib;
-
-	if (IS_SCHEMA(child, "annotation")) {
-	    xmlSchemaParseAnnotation(pctxt, child, 0);
-	    child = child->next;
-	}
-	if (child != NULL) {
-	    xmlSchemaPContentErr(pctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?)");
-	}
-	/*
-	* Check for pointlessness of attribute prohibitions.
-	*/
-	if (parentType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP) {
-	    xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-		XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
-		node, NULL,
-		"Skipping attribute use prohibition, since it is "
-		"pointless inside an <attributeGroup>",
-		NULL, NULL, NULL);
-	    return(NULL);
-	} else if (parentType == XML_SCHEMA_TYPE_EXTENSION) {
-	    xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-		XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
-		node, NULL,
-		"Skipping attribute use prohibition, since it is "
-		"pointless when extending a type",
-		NULL, NULL, NULL);
-	    return(NULL);
-	}
-	if (! isRef) {
-	    tmpName = name;
-	    tmpNs = ns;
-	}
-	/*
-	* Check for duplicate attribute prohibitions.
-	*/
-	if (uses) {
-	    int i;
-
-	    for (i = 0; i < uses->nbItems; i++) {
-		use = uses->items[i];
-		if ((use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) &&
-		    (tmpName == (WXS_ATTR_PROHIB_CAST use)->name) &&
-		    (tmpNs == (WXS_ATTR_PROHIB_CAST use)->targetNamespace))
-		{
-		    xmlChar *str = NULL;
-
-		    xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-			XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
-			node, NULL,
-			"Skipping duplicate attribute use prohibition '%s'",
-			xmlSchemaFormatQName(&str, tmpNs, tmpName),
-			NULL, NULL);
-		    FREE_AND_NULL(str)
-		    return(NULL);
-		}
-	    }
-	}
-	/*
-	* Create the attribute prohibition helper component.
-	*/
-	prohib = xmlSchemaAddAttributeUseProhib(pctxt);
-	if (prohib == NULL)
-	    return(NULL);
-	prohib->node = node;
-	prohib->name = tmpName;
-	prohib->targetNamespace = tmpNs;
-	if (isRef) {
-	    /*
-	    * We need at least to resolve to the attribute declaration.
-	    */
-	    WXS_ADD_PENDING(pctxt, prohib);
-	}
-	return(WXS_BASIC_CAST prohib);
-    } else {
-	if (IS_SCHEMA(child, "annotation")) {
-	    /*
-	    * TODO: Should this go into the attr decl?
-	    */
-	    use->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
-	    child = child->next;
-	}
-	if (isRef) {
-	    if (child != NULL) {
-		if (IS_SCHEMA(child, "simpleType"))
-		    /*
-		    * 3.2.3 : 3.2
-		    * If ref is present, then all of <simpleType>,
-		    * form and type must be absent.
-		    */
-		    xmlSchemaPContentErr(pctxt,
-			XML_SCHEMAP_SRC_ATTRIBUTE_3_2,
-			NULL, node, child, NULL,
-			"(annotation?)");
-		else
-		    xmlSchemaPContentErr(pctxt,
-			XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-			NULL, node, child, NULL,
-			"(annotation?)");
-	    }
-	} else {
-	    if (IS_SCHEMA(child, "simpleType")) {
-		if (WXS_ATTRUSE_DECL(use)->typeName != NULL) {
-		    /*
-		    * 3.2.3 : 4
-		    * type and <simpleType> must not both be present.
-		    */
-		    xmlSchemaPContentErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_4,
-			NULL, node, child,
-			"The attribute 'type' and the <simpleType> child "
-			"are mutually exclusive", NULL);
-		} else
-		    WXS_ATTRUSE_TYPEDEF(use) =
-			xmlSchemaParseSimpleType(pctxt, schema, child, 0);
-		child = child->next;
-	    }
-	    if (child != NULL)
-		xmlSchemaPContentErr(pctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, simpleType?)");
-	}
-    }
-    return (WXS_BASIC_CAST use);
-}
-
-
-static xmlSchemaAttributePtr
-xmlSchemaParseGlobalAttribute(xmlSchemaParserCtxtPtr pctxt,
-			      xmlSchemaPtr schema,
-			      xmlNodePtr node)
-{
-    const xmlChar *attrValue;
-    xmlSchemaAttributePtr ret;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    /*
-     * Note that the w3c spec assumes the schema to be validated with schema
-     * for schemas beforehand.
-     *
-     * 3.2.3 Constraints on XML Representations of Attribute Declarations
-     */
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /*
-    * 3.2.3 : 3.1
-    * One of ref or name must be present, but not both
-    */
-    attr = xmlSchemaGetPropNode(node, "name");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(pctxt, XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "name", NULL);
-	return (NULL);
-    }
-    if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
-	xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &attrValue) != 0) {
-	return (NULL);
-    }
-    /*
-    * 3.2.6 Schema Component Constraint: xmlns Not Allowed
-    * TODO: Move this to the component layer.
-    */
-    if (xmlStrEqual(attrValue, BAD_CAST "xmlns")) {
-	xmlSchemaPSimpleTypeErr(pctxt,
-	    XML_SCHEMAP_NO_XMLNS,
-	    NULL, (xmlNodePtr) attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), NULL, NULL,
-	    "The value of the attribute must not match 'xmlns'",
-	    NULL, NULL);
-	return (NULL);
-    }
-    /*
-    * 3.2.6 Schema Component Constraint: xsi: Not Allowed
-    * TODO: Move this to the component layer.
-    *       Or better leave it here and add it to the component layer
-    *       if we have a schema construction API.
-    */
-    if (xmlStrEqual(pctxt->targetNamespace, xmlSchemaInstanceNs)) {
-	xmlSchemaCustomErr(ACTXT_CAST pctxt,
-	    XML_SCHEMAP_NO_XSI, node, NULL,
-	    "The target namespace must not match '%s'",
-	    xmlSchemaInstanceNs, NULL);
-    }
-
-    ret = xmlSchemaAddAttribute(pctxt, schema, attrValue,
-	pctxt->targetNamespace, node, 1);
-    if (ret == NULL)
-	return (NULL);
-    ret->flags |= XML_SCHEMAS_ATTR_GLOBAL;
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "default")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "fixed")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "type")))
-	    {
-		xmlSchemaPIllegalAttrErr(pctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(pctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrQName(pctxt, schema, NULL,
-	node, "type", &ret->typeNs, &ret->typeName);
-
-    xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
-    /*
-    * Attribute "fixed".
-    */
-    ret->defValue = xmlSchemaGetProp(pctxt, node, "fixed");
-    if (ret->defValue != NULL)
-	ret->flags |= XML_SCHEMAS_ATTR_FIXED;
-    /*
-    * Attribute "default".
-    */
-    attr = xmlSchemaGetPropNode(node, "default");
-    if (attr != NULL) {
-	/*
-	* 3.2.3 : 1
-	* default and fixed must not both be present.
-	*/
-	if (ret->flags & XML_SCHEMAS_ATTR_FIXED) {
-	    xmlSchemaPMutualExclAttrErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_1,
-		WXS_BASIC_CAST ret, attr, "default", "fixed");
-	} else
-	    ret->defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        ret->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
-        child = child->next;
-    }
-    if (IS_SCHEMA(child, "simpleType")) {
-	if (ret->typeName != NULL) {
-	    /*
-	    * 3.2.3 : 4
-	    * type and <simpleType> must not both be present.
-	    */
-	    xmlSchemaPContentErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_4,
-		NULL, node, child,
-		"The attribute 'type' and the <simpleType> child "
-		"are mutually exclusive", NULL);
-	} else
-	    ret->subtypes = xmlSchemaParseSimpleType(pctxt, schema, child, 0);
-	child = child->next;
-    }
-    if (child != NULL)
-	xmlSchemaPContentErr(pctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?, simpleType?)");
-
-    return (ret);
-}
-
-/**
- * xmlSchemaParseAttributeGroupRef:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parse an attribute group definition reference.
- * Note that a reference to an attribute group does not
- * correspond to any component at all.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute group or NULL in case of error.
- */
-static xmlSchemaQNameRefPtr
-xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
-				xmlSchemaPtr schema,
-				xmlNodePtr node)
-{
-    xmlSchemaQNameRefPtr ret;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *refNs = NULL, *ref = NULL;
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    attr = xmlSchemaGetPropNode(node, "ref");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "ref", NULL);
-	return (NULL);
-    }
-    xmlSchemaPValAttrNodeQName(pctxt, schema,
-	NULL, attr, &refNs, &ref);
-    if (xmlSchemaCheckReference(pctxt, schema, node, attr, refNs) != 0)
-	return(NULL);
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "ref")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "id")))
-	    {
-		xmlSchemaPIllegalAttrErr(pctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(pctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /* Attribute ID */
-    xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
-
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* TODO: We do not have a place to store the annotation, do we?
-	*/
-        xmlSchemaParseAnnotation(pctxt, child, 0);
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(pctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?)");
-    }
-
-    /*
-    * Handle attribute group redefinitions.
-    */
-    if (pctxt->isRedefine && pctxt->redef &&
-	(pctxt->redef->item->type ==
-	    XML_SCHEMA_TYPE_ATTRIBUTEGROUP) &&
-	(ref == pctxt->redef->refName) &&
-	(refNs == pctxt->redef->refTargetNs))
-    {
-	/*
-	* SPEC src-redefine:
-	* (7.1) "If it has an <attributeGroup> among its contents
-	* the `actual value` of whose ref [attribute] is the same
-	* as the `actual value` of its own name attribute plus
-	* target namespace, then it must have exactly one such group."
-	*/
-	if (pctxt->redefCounter != 0) {
-	    xmlChar *str = NULL;
-
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_SRC_REDEFINE, node, NULL,
-		"The redefining attribute group definition "
-		"'%s' must not contain more than one "
-		"reference to the redefined definition",
-		xmlSchemaFormatQName(&str, refNs, ref), NULL);
-	    FREE_AND_NULL(str);
-	    return(NULL);
-	}
-	pctxt->redefCounter++;
-	/*
-	* URGENT TODO: How to ensure that the reference will not be
-	* handled by the normal component resolution mechanism?
-	*/
-	ret = xmlSchemaNewQNameRef(pctxt,
-	    XML_SCHEMA_TYPE_ATTRIBUTEGROUP, ref, refNs);
-	if (ret == NULL)
-	    return(NULL);
-	ret->node = node;
-	pctxt->redef->reference = WXS_BASIC_CAST ret;
-    } else {
-	/*
-	* Create a QName-reference helper component. We will substitute this
-	* component for the attribute uses of the referenced attribute group
-	* definition.
-	*/
-	ret = xmlSchemaNewQNameRef(pctxt,
-	    XML_SCHEMA_TYPE_ATTRIBUTEGROUP, ref, refNs);
-	if (ret == NULL)
-	    return(NULL);
-	ret->node = node;
-	/* Add to pending items, to be able to resolve the reference. */
-	WXS_ADD_PENDING(pctxt, ret);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchemaParseAttributeGroupDefinition:
- * @pctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Attribute Group declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute group definition or NULL in case of error.
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaParseAttributeGroupDefinition(xmlSchemaParserCtxtPtr pctxt,
-				       xmlSchemaPtr schema,
-				       xmlNodePtr node)
-{
-    const xmlChar *name;
-    xmlSchemaAttributeGroupPtr ret;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    int hasRefs = 0;
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    attr = xmlSchemaGetPropNode(node, "name");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "name", NULL);
-	return (NULL);
-    }
-    /*
-    * The name is crucial, exit if invalid.
-    */
-    if (xmlSchemaPValAttrNode(pctxt,
-	NULL, attr,
-	xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
-	return (NULL);
-    }
-    ret = xmlSchemaAddAttributeGroupDefinition(pctxt, schema,
-	name, pctxt->targetNamespace, node);
-    if (ret == NULL)
-	return (NULL);
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "id")))
-	    {
-		xmlSchemaPIllegalAttrErr(pctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(pctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /* Attribute ID */
-    xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        ret->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
-        child = child->next;
-    }
-    /*
-    * Parse contained attribute decls/refs.
-    */
-    if (xmlSchemaParseLocalAttributes(pctxt, schema, &child,
-	(xmlSchemaItemListPtr *) &(ret->attrUses),
-	XML_SCHEMA_TYPE_ATTRIBUTEGROUP, &hasRefs) == -1)
-	return(NULL);
-    if (hasRefs)
-	ret->flags |= XML_SCHEMAS_ATTRGROUP_HAS_REFS;
-    /*
-    * Parse the attribute wildcard.
-    */
-    if (IS_SCHEMA(child, "anyAttribute")) {
-	ret->attributeWildcard = xmlSchemaParseAnyAttribute(pctxt,
-	    schema, child);
-	child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(pctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?, ((attribute | attributeGroup)*, anyAttribute?))");
-    }
-    return (ret);
-}
-
-/**
- * xmlSchemaPValAttrFormDefault:
- * @value:  the value
- * @flags: the flags to be modified
- * @flagQualified: the specific flag for "qualified"
- *
- * Returns 0 if the value is valid, 1 otherwise.
- */
-static int
-xmlSchemaPValAttrFormDefault(const xmlChar *value,
-			     int *flags,
-			     int flagQualified)
-{
-    if (xmlStrEqual(value, BAD_CAST "qualified")) {
-	if  ((*flags & flagQualified) == 0)
-	    *flags |= flagQualified;
-    } else if (!xmlStrEqual(value, BAD_CAST "unqualified"))
-	return (1);
-
-    return (0);
-}
-
-/**
- * xmlSchemaPValAttrBlockFinal:
- * @value:  the value
- * @flags: the flags to be modified
- * @flagAll: the specific flag for "#all"
- * @flagExtension: the specific flag for "extension"
- * @flagRestriction: the specific flag for "restriction"
- * @flagSubstitution: the specific flag for "substitution"
- * @flagList: the specific flag for "list"
- * @flagUnion: the specific flag for "union"
- *
- * Validates the value of the attribute "final" and "block". The value
- * is converted into the specified flag values and returned in @flags.
- *
- * Returns 0 if the value is valid, 1 otherwise.
- */
-
-static int
-xmlSchemaPValAttrBlockFinal(const xmlChar *value,
-			    int *flags,
-			    int flagAll,
-			    int flagExtension,
-			    int flagRestriction,
-			    int flagSubstitution,
-			    int flagList,
-			    int flagUnion)
-{
-    int ret = 0;
-
-    /*
-    * TODO: This does not check for dublicate entries.
-    */
-    if ((flags == NULL) || (value == NULL))
-	return (-1);
-    if (value[0] == 0)
-	return (0);
-    if (xmlStrEqual(value, BAD_CAST "#all")) {
-	if (flagAll != -1)
-	    *flags |= flagAll;
-	else {
-	    if (flagExtension != -1)
-		*flags |= flagExtension;
-	    if (flagRestriction != -1)
-		*flags |= flagRestriction;
-	    if (flagSubstitution != -1)
-		*flags |= flagSubstitution;
-	    if (flagList != -1)
-		*flags |= flagList;
-	    if (flagUnion != -1)
-		*flags |= flagUnion;
-	}
-    } else {
-	const xmlChar *end, *cur = value;
-	xmlChar *item;
-
-	do {
-	    while (IS_BLANK_CH(*cur))
-		cur++;
-	    end = cur;
-	    while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-		end++;
-	    if (end == cur)
-		break;
-	    item = xmlStrndup(cur, end - cur);
-	    if (xmlStrEqual(item, BAD_CAST "extension")) {
-		if (flagExtension != -1) {
-		    if ((*flags & flagExtension) == 0)
-			*flags |= flagExtension;
-		} else
-		    ret = 1;
-	    } else if (xmlStrEqual(item, BAD_CAST "restriction")) {
-		if (flagRestriction != -1) {
-		    if ((*flags & flagRestriction) == 0)
-			*flags |= flagRestriction;
-		} else
-		    ret = 1;
-	    } else if (xmlStrEqual(item, BAD_CAST "substitution")) {
-		if (flagSubstitution != -1) {
-		    if ((*flags & flagSubstitution) == 0)
-			*flags |= flagSubstitution;
-		} else
-		    ret = 1;
-	    } else if (xmlStrEqual(item, BAD_CAST "list")) {
-		if (flagList != -1) {
-		    if ((*flags & flagList) == 0)
-			*flags |= flagList;
-		} else
-		    ret = 1;
-	    } else if (xmlStrEqual(item, BAD_CAST "union")) {
-		if (flagUnion != -1) {
-		    if ((*flags & flagUnion) == 0)
-			*flags |= flagUnion;
-		} else
-		    ret = 1;
-	    } else
-		ret = 1;
-	    if (item != NULL)
-		xmlFree(item);
-	    cur = end;
-	} while ((ret == 0) && (*cur != 0));
-    }
-
-    return (ret);
-}
-
-static int
-xmlSchemaCheckCSelectorXPath(xmlSchemaParserCtxtPtr ctxt,
-			     xmlSchemaIDCPtr idc,
-			     xmlSchemaIDCSelectPtr selector,
-			     xmlAttrPtr attr,
-			     int isField)
-{
-    xmlNodePtr node;
-
-    /*
-    * c-selector-xpath:
-    * Schema Component Constraint: Selector Value OK
-    *
-    * TODO: 1 The {selector} must be a valid XPath expression, as defined
-    * in [XPath].
-    */
-    if (selector == NULL) {
-	xmlSchemaPErr(ctxt, idc->node,
-	    XML_SCHEMAP_INTERNAL,
-	    "Internal error: xmlSchemaCheckCSelectorXPath, "
-	    "the selector is not specified.\n", NULL, NULL);
-	return (-1);
-    }
-    if (attr == NULL)
-	node = idc->node;
-    else
-	node = (xmlNodePtr) attr;
-    if (selector->xpath == NULL) {
-	xmlSchemaPCustomErr(ctxt,
-	    /* TODO: Adjust error code. */
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    NULL, node,
-	    "The XPath expression of the selector is not valid", NULL);
-	return (XML_SCHEMAP_S4S_ATTR_INVALID_VALUE);
-    } else {
-	const xmlChar **nsArray = NULL;
-	xmlNsPtr *nsList = NULL;
-	/*
-	* Compile the XPath expression.
-	*/
-	/*
-	* TODO: We need the array of in-scope namespaces for compilation.
-	* TODO: Call xmlPatterncompile with different options for selector/
-	* field.
-	*/
-	if (attr == NULL)
-	    nsList = NULL;
-	else
-	    nsList = xmlGetNsList(attr->doc, attr->parent);
-	/*
-	* Build an array of prefixes and namespaces.
-	*/
-	if (nsList != NULL) {
-	    int i, count = 0;
-
-	    for (i = 0; nsList[i] != NULL; i++)
-		count++;
-
-	    nsArray = (const xmlChar **) xmlMalloc(
-		(count * 2 + 1) * sizeof(const xmlChar *));
-	    if (nsArray == NULL) {
-		xmlSchemaPErrMemory(ctxt, "allocating a namespace array",
-		    NULL);
-		xmlFree(nsList);
-		return (-1);
-	    }
-	    for (i = 0; i < count; i++) {
-		nsArray[2 * i] = nsList[i]->href;
-		nsArray[2 * i + 1] = nsList[i]->prefix;
-	    }
-	    nsArray[count * 2] = NULL;
-	    xmlFree(nsList);
-	}
-	/*
-	* TODO: Differentiate between "selector" and "field".
-	*/
-	if (isField)
-	    selector->xpathComp = (void *) xmlPatterncompile(selector->xpath,
-		NULL, XML_PATTERN_XSFIELD, nsArray);
-	else
-	    selector->xpathComp = (void *) xmlPatterncompile(selector->xpath,
-		NULL, XML_PATTERN_XSSEL, nsArray);
-	if (nsArray != NULL)
-	    xmlFree((xmlChar **) nsArray);
-
-	if (selector->xpathComp == NULL) {
-	    xmlSchemaPCustomErr(ctxt,
-		/* TODO: Adjust error code? */
-		XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		NULL, node,
-		"The XPath expression '%s' could not be "
-		"compiled", selector->xpath);
-	    return (XML_SCHEMAP_S4S_ATTR_INVALID_VALUE);
-	}
-    }
-    return (0);
-}
-
-#define ADD_ANNOTATION(annot)   \
-    xmlSchemaAnnotPtr cur = item->annot; \
-    if (item->annot == NULL) {  \
-	item->annot = annot;    \
-	return (annot);         \
-    }                           \
-    cur = item->annot;          \
-    if (cur->next != NULL) {    \
-	cur = cur->next;	\
-    }                           \
-    cur->next = annot;
-
-/**
- * xmlSchemaAssignAnnotation:
- * @item: the schema component
- * @annot: the annotation
- *
- * Adds the annotation to the given schema component.
- *
- * Returns the given annotaion.
- */
-static xmlSchemaAnnotPtr
-xmlSchemaAddAnnotation(xmlSchemaAnnotItemPtr annItem,
-		       xmlSchemaAnnotPtr annot)
-{
-    if ((annItem == NULL) || (annot == NULL))
-	return (NULL);
-    switch (annItem->type) {
-	case XML_SCHEMA_TYPE_ELEMENT: {
-		xmlSchemaElementPtr item = (xmlSchemaElementPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTE: {
-		xmlSchemaAttributePtr item = (xmlSchemaAttributePtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
-	case XML_SCHEMA_TYPE_ANY: {
-		xmlSchemaWildcardPtr item = (xmlSchemaWildcardPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_PARTICLE:
-	case XML_SCHEMA_TYPE_IDC_KEY:
-	case XML_SCHEMA_TYPE_IDC_KEYREF:
-	case XML_SCHEMA_TYPE_IDC_UNIQUE: {
-		xmlSchemaAnnotItemPtr item = (xmlSchemaAnnotItemPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP: {
-		xmlSchemaAttributeGroupPtr item =
-		    (xmlSchemaAttributeGroupPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_NOTATION: {
-		xmlSchemaNotationPtr item = (xmlSchemaNotationPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_FACET_MININCLUSIVE:
-	case XML_SCHEMA_FACET_MINEXCLUSIVE:
-	case XML_SCHEMA_FACET_MAXINCLUSIVE:
-	case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-	case XML_SCHEMA_FACET_TOTALDIGITS:
-	case XML_SCHEMA_FACET_FRACTIONDIGITS:
-	case XML_SCHEMA_FACET_PATTERN:
-	case XML_SCHEMA_FACET_ENUMERATION:
-	case XML_SCHEMA_FACET_WHITESPACE:
-	case XML_SCHEMA_FACET_LENGTH:
-	case XML_SCHEMA_FACET_MAXLENGTH:
-	case XML_SCHEMA_FACET_MINLENGTH: {
-		xmlSchemaFacetPtr item = (xmlSchemaFacetPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_SIMPLE:
-	case XML_SCHEMA_TYPE_COMPLEX: {
-		xmlSchemaTypePtr item = (xmlSchemaTypePtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_GROUP: {
-		xmlSchemaModelGroupDefPtr item = (xmlSchemaModelGroupDefPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	case XML_SCHEMA_TYPE_SEQUENCE:
-	case XML_SCHEMA_TYPE_CHOICE:
-	case XML_SCHEMA_TYPE_ALL: {
-		xmlSchemaModelGroupPtr item = (xmlSchemaModelGroupPtr) annItem;
-		ADD_ANNOTATION(annot)
-	    }
-	    break;
-	default:
-	     xmlSchemaPCustomErr(NULL,
-		XML_SCHEMAP_INTERNAL,
-		NULL, NULL,
-		"Internal error: xmlSchemaAddAnnotation, "
-		"The item is not a annotated schema component", NULL);
-	     break;
-    }
-    return (annot);
-}
-
-/**
- * xmlSchemaParseIDCSelectorAndField:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parses a XML Schema identity-contraint definition's
- * <selector> and <field> elements.
- *
- * Returns the parsed identity-constraint definition.
- */
-static xmlSchemaIDCSelectPtr
-xmlSchemaParseIDCSelectorAndField(xmlSchemaParserCtxtPtr ctxt,
-			  xmlSchemaIDCPtr idc,
-			  xmlNodePtr node,
-			  int isField)
-{
-    xmlSchemaIDCSelectPtr item;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "xpath"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /*
-    * Create the item.
-    */
-    item = (xmlSchemaIDCSelectPtr) xmlMalloc(sizeof(xmlSchemaIDCSelect));
-    if (item == NULL) {
-        xmlSchemaPErrMemory(ctxt,
-	    "allocating a 'selector' of an identity-constraint definition",
-	    NULL);
-        return (NULL);
-    }
-    memset(item, 0, sizeof(xmlSchemaIDCSelect));
-    /*
-    * Attribute "xpath" (mandatory).
-    */
-    attr = xmlSchemaGetPropNode(node, "xpath");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node,
-	    "name", NULL);
-    } else {
-	item->xpath = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	/*
-	* URGENT TODO: "field"s have an other syntax than "selector"s.
-	*/
-
-	if (xmlSchemaCheckCSelectorXPath(ctxt, idc, item, attr,
-	    isField) == -1) {
-	    xmlSchemaPErr(ctxt,
-		(xmlNodePtr) attr,
-		XML_SCHEMAP_INTERNAL,
-		"Internal error: xmlSchemaParseIDCSelectorAndField, "
-		"validating the XPath expression of a IDC selector.\n",
-		NULL, NULL);
-	}
-
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the parent IDC.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) idc,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-	child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?)");
-    }
-
-    return (item);
-}
-
-/**
- * xmlSchemaParseIDC:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parses a XML Schema identity-contraint definition.
- *
- * Returns the parsed identity-constraint definition.
- */
-static xmlSchemaIDCPtr
-xmlSchemaParseIDC(xmlSchemaParserCtxtPtr ctxt,
-		  xmlSchemaPtr schema,
-		  xmlNodePtr node,
-		  xmlSchemaTypeType idcCategory,
-		  const xmlChar *targetNamespace)
-{
-    xmlSchemaIDCPtr item = NULL;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *name = NULL;
-    xmlSchemaIDCSelectPtr field = NULL, lastField = NULL;
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		((idcCategory != XML_SCHEMA_TYPE_IDC_KEYREF) ||
-		 (!xmlStrEqual(attr->name, BAD_CAST "refer")))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /*
-    * Attribute "name" (mandatory).
-    */
-    attr = xmlSchemaGetPropNode(node, "name");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node,
-	    "name", NULL);
-	return (NULL);
-    } else if (xmlSchemaPValAttrNode(ctxt,
-	NULL, attr,
-	xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
-	return (NULL);
-    }
-    /* Create the component. */
-    item = xmlSchemaAddIDC(ctxt, schema, name, targetNamespace,
-	idcCategory, node);
-    if (item == NULL)
-	return(NULL);
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    if (idcCategory == XML_SCHEMA_TYPE_IDC_KEYREF) {
-	/*
-	* Attribute "refer" (mandatory).
-	*/
-	attr = xmlSchemaGetPropNode(node, "refer");
-	if (attr == NULL) {
-	    xmlSchemaPMissingAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_MISSING,
-		NULL, node,
-		"refer", NULL);
-	} else {
-	    /*
-	    * Create a reference item.
-	    */
-	    item->ref = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_IDC_KEY,
-		NULL, NULL);
-	    if (item->ref == NULL)
-		return (NULL);
-	    xmlSchemaPValAttrNodeQName(ctxt, schema,
-		NULL, attr,
-		&(item->ref->targetNamespace),
-		&(item->ref->name));
-	    xmlSchemaCheckReference(ctxt, schema, node, attr,
-		item->ref->targetNamespace);
-	}
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	child = child->next;
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_MISSING,
-		NULL, node, child,
-		"A child element is missing",
-		"(annotation?, (selector, field+))");
-    }
-    /*
-    * Child element <selector>.
-    */
-    if (IS_SCHEMA(child, "selector")) {
-	item->selector = xmlSchemaParseIDCSelectorAndField(ctxt,
-	    item, child, 0);
-	child = child->next;
-	/*
-	* Child elements <field>.
-	*/
-	if (IS_SCHEMA(child, "field")) {
-	    do {
-		field = xmlSchemaParseIDCSelectorAndField(ctxt,
-		    item, child, 1);
-		if (field != NULL) {
-		    field->index = item->nbFields;
-		    item->nbFields++;
-		    if (lastField != NULL)
-			lastField->next = field;
-		    else
-			item->fields = field;
-		    lastField = field;
-		}
-		child = child->next;
-	    } while (IS_SCHEMA(child, "field"));
-	} else {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child,
-		NULL, "(annotation?, (selector, field+))");
-	}
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?, (selector, field+))");
-    }
-
-    return (item);
-}
-
-/**
- * xmlSchemaParseElement:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- * @topLevel: indicates if this is global declaration
- *
- * Parses a XML schema element declaration.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the element declaration or a particle; NULL in case
- * of an error or if the particle has minOccurs==maxOccurs==0.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaParseElement(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                      xmlNodePtr node, int *isElemRef, int topLevel)
-{
-    xmlSchemaElementPtr decl = NULL;
-    xmlSchemaParticlePtr particle = NULL;
-    xmlSchemaAnnotPtr annot = NULL;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr, nameAttr;
-    int min, max, isRef = 0;
-    xmlChar *des = NULL;
-
-    /* 3.3.3 Constraints on XML Representations of Element Declarations */
-    /* TODO: Complete implementation of 3.3.6 */
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    if (isElemRef != NULL)
-	*isElemRef = 0;
-    /*
-    * If we get a "ref" attribute on a local <element> we will assume it's
-    * a reference - even if there's a "name" attribute; this seems to be more
-    * robust.
-    */
-    nameAttr = xmlSchemaGetPropNode(node, "name");
-    attr = xmlSchemaGetPropNode(node, "ref");
-    if ((topLevel) || (attr == NULL)) {
-	if (nameAttr == NULL) {
-	    xmlSchemaPMissingAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_MISSING,
-		NULL, node, "name", NULL);
-	    return (NULL);
-	}
-    } else
-	isRef = 1;
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	child = child->next;
-    }
-    /*
-    * Skip particle part if a global declaration.
-    */
-    if (topLevel)
-	goto declaration_part;
-    /*
-    * The particle part ==================================================
-    */
-    min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
-    max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1, "(xs:nonNegativeInteger | unbounded)");
-    xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
-    particle = xmlSchemaAddParticle(ctxt, node, min, max);
-    if (particle == NULL)
-	goto return_null;
-
-    /* ret->flags |= XML_SCHEMAS_ELEM_REF; */
-
-    if (isRef) {
-	const xmlChar *refNs = NULL, *ref = NULL;
-	xmlSchemaQNameRefPtr refer = NULL;
-	/*
-	* The reference part =============================================
-	*/
-	if (isElemRef != NULL)
-	    *isElemRef = 1;
-
-	xmlSchemaPValAttrNodeQName(ctxt, schema,
-	    NULL, attr, &refNs, &ref);
-	xmlSchemaCheckReference(ctxt, schema, node, attr, refNs);
-	/*
-	* SPEC (3.3.3 : 2.1) "One of ref or name must be present, but not both"
-	*/
-	if (nameAttr != NULL) {
-	    xmlSchemaPMutualExclAttrErr(ctxt,
-		XML_SCHEMAP_SRC_ELEMENT_2_1, NULL, nameAttr, "ref", "name");
-	}
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if (xmlStrEqual(attr->name, BAD_CAST "ref") ||
-		    xmlStrEqual(attr->name, BAD_CAST "name") ||
-		    xmlStrEqual(attr->name, BAD_CAST "id") ||
-		    xmlStrEqual(attr->name, BAD_CAST "maxOccurs") ||
-		    xmlStrEqual(attr->name, BAD_CAST "minOccurs"))
-		{
-		    attr = attr->next;
-		    continue;
-		} else {
-		    /* SPEC (3.3.3 : 2.2) */
-		    xmlSchemaPCustomAttrErr(ctxt,
-			XML_SCHEMAP_SRC_ELEMENT_2_2,
-			NULL, NULL, attr,
-			"Only the attributes 'minOccurs', 'maxOccurs' and "
-			"'id' are allowed in addition to 'ref'");
-		    break;
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-	/*
-	* No children except <annotation> expected.
-	*/
-	if (child != NULL) {
-	    xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL, "(annotation?)");
-	}
-	if ((min == 0) && (max == 0))
-	    goto return_null;
-	/*
-	* Create the reference item and attach it to the particle.
-	*/
-	refer = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_ELEMENT,
-	    ref, refNs);
-	if (refer == NULL)
-	    goto return_null;
-	particle->children = (xmlSchemaTreeItemPtr) refer;
-	particle->annot = annot;
-	/*
-	* Add the particle to pending components, since the reference
-	* need to be resolved.
-	*/
-	WXS_ADD_PENDING(ctxt, particle);
-	return ((xmlSchemaBasicItemPtr) particle);
-    }
-    /*
-    * The declaration part ===============================================
-    */
-declaration_part:
-    {
-	const xmlChar *ns = NULL, *fixed, *name, *attrValue;
-	xmlSchemaIDCPtr curIDC = NULL, lastIDC = NULL;
-
-	if (xmlSchemaPValAttrNode(ctxt, NULL, nameAttr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0)
-	    goto return_null;
-	/*
-	* Evaluate the target namespace.
-	*/
-	if (topLevel) {
-	    ns = ctxt->targetNamespace;
-	} else {
-	    attr = xmlSchemaGetPropNode(node, "form");
-	    if (attr != NULL) {
-		attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-		if (xmlStrEqual(attrValue, BAD_CAST "qualified")) {
-		    ns = ctxt->targetNamespace;
-		} else if (!xmlStrEqual(attrValue, BAD_CAST "unqualified")) {
-		    xmlSchemaPSimpleTypeErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-			NULL, (xmlNodePtr) attr,
-			NULL, "(qualified | unqualified)",
-			attrValue, NULL, NULL, NULL);
-		}
-	    } else if (schema->flags & XML_SCHEMAS_QUALIF_ELEM)
-		ns = ctxt->targetNamespace;
-	}
-	decl = xmlSchemaAddElement(ctxt, name, ns, node, topLevel);
-	if (decl == NULL) {
-	    goto return_null;
-	}
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "type")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "default")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "fixed")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "block")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "nillable")))
-		{
-		    if (topLevel == 0) {
-			if ((!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
-			    (!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
-			    (!xmlStrEqual(attr->name, BAD_CAST "form")))
-			{
-			    xmlSchemaPIllegalAttrErr(ctxt,
-				XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-			}
-		    } else if ((!xmlStrEqual(attr->name, BAD_CAST "final")) &&
-			(!xmlStrEqual(attr->name, BAD_CAST "abstract")) &&
-			(!xmlStrEqual(attr->name, BAD_CAST "substitutionGroup"))) {
-
-			xmlSchemaPIllegalAttrErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		    }
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-	/*
-	* Extract/validate attributes.
-	*/
-	if (topLevel) {
-	    /*
-	    * Process top attributes of global element declarations here.
-	    */
-	    decl->flags |= XML_SCHEMAS_ELEM_GLOBAL;
-	    decl->flags |= XML_SCHEMAS_ELEM_TOPLEVEL;
-	    xmlSchemaPValAttrQName(ctxt, schema,
-		NULL, node, "substitutionGroup",
-		&(decl->substGroupNs), &(decl->substGroup));
-	    if (xmlGetBooleanProp(ctxt, node, "abstract", 0))
-		decl->flags |= XML_SCHEMAS_ELEM_ABSTRACT;
-	    /*
-	    * Attribute "final".
-	    */
-	    attr = xmlSchemaGetPropNode(node, "final");
-	    if (attr == NULL) {
-		if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
-		    decl->flags |= XML_SCHEMAS_ELEM_FINAL_EXTENSION;
-		if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
-		    decl->flags |= XML_SCHEMAS_ELEM_FINAL_RESTRICTION;
-	    } else {
-		attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-		if (xmlSchemaPValAttrBlockFinal(attrValue, &(decl->flags),
-		    -1,
-		    XML_SCHEMAS_ELEM_FINAL_EXTENSION,
-		    XML_SCHEMAS_ELEM_FINAL_RESTRICTION, -1, -1, -1) != 0) {
-		    xmlSchemaPSimpleTypeErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-			NULL, (xmlNodePtr) attr,
-			NULL, "(#all | List of (extension | restriction))",
-			attrValue, NULL, NULL, NULL);
-		}
-	    }
-	}
-	/*
-	* Attribute "block".
-	*/
-	attr = xmlSchemaGetPropNode(node, "block");
-	if (attr == NULL) {
-	    /*
-	    * Apply default "block" values.
-	    */
-	    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
-		decl->flags |= XML_SCHEMAS_ELEM_BLOCK_RESTRICTION;
-	    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
-		decl->flags |= XML_SCHEMAS_ELEM_BLOCK_EXTENSION;
-	    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION)
-		decl->flags |= XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION;
-	} else {
-	    attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	    if (xmlSchemaPValAttrBlockFinal(attrValue, &(decl->flags),
-		-1,
-		XML_SCHEMAS_ELEM_BLOCK_EXTENSION,
-		XML_SCHEMAS_ELEM_BLOCK_RESTRICTION,
-		XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION, -1, -1) != 0) {
-		xmlSchemaPSimpleTypeErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		    NULL, (xmlNodePtr) attr,
-		    NULL, "(#all | List of (extension | "
-		    "restriction | substitution))", attrValue,
-		    NULL, NULL, NULL);
-	    }
-	}
-	if (xmlGetBooleanProp(ctxt, node, "nillable", 0))
-	    decl->flags |= XML_SCHEMAS_ELEM_NILLABLE;
-
-	attr = xmlSchemaGetPropNode(node, "type");
-	if (attr != NULL) {
-	    xmlSchemaPValAttrNodeQName(ctxt, schema,
-		NULL, attr,
-		&(decl->namedTypeNs), &(decl->namedType));
-	    xmlSchemaCheckReference(ctxt, schema, node,
-		attr, decl->namedTypeNs);
-	}
-	decl->value = xmlSchemaGetProp(ctxt, node, "default");
-	attr = xmlSchemaGetPropNode(node, "fixed");
-	if (attr != NULL) {
-	    fixed = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	    if (decl->value != NULL) {
-		/*
-		* 3.3.3 : 1
-		* default and fixed must not both be present.
-		*/
-		xmlSchemaPMutualExclAttrErr(ctxt,
-		    XML_SCHEMAP_SRC_ELEMENT_1,
-		    NULL, attr, "default", "fixed");
-	    } else {
-		decl->flags |= XML_SCHEMAS_ELEM_FIXED;
-		decl->value = fixed;
-	    }
-	}
-	/*
-	* And now for the children...
-	*/
-	if (IS_SCHEMA(child, "complexType")) {
-	    /*
-	    * 3.3.3 : 3
-	    * "type" and either <simpleType> or <complexType> are mutually
-	    * exclusive
-	    */
-	    if (decl->namedType != NULL) {
-		xmlSchemaPContentErr(ctxt,
-		    XML_SCHEMAP_SRC_ELEMENT_3,
-		    NULL, node, child,
-		    "The attribute 'type' and the <complexType> child are "
-		    "mutually exclusive", NULL);
-	    } else
-		WXS_ELEM_TYPEDEF(decl) = xmlSchemaParseComplexType(ctxt, schema, child, 0);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "simpleType")) {
-	    /*
-	    * 3.3.3 : 3
-	    * "type" and either <simpleType> or <complexType> are
-	    * mutually exclusive
-	    */
-	    if (decl->namedType != NULL) {
-		xmlSchemaPContentErr(ctxt,
-		    XML_SCHEMAP_SRC_ELEMENT_3,
-		    NULL, node, child,
-		    "The attribute 'type' and the <simpleType> child are "
-		    "mutually exclusive", NULL);
-	    } else
-		WXS_ELEM_TYPEDEF(decl) = xmlSchemaParseSimpleType(ctxt, schema, child, 0);
-	    child = child->next;
-	}
-	while ((IS_SCHEMA(child, "unique")) ||
-	    (IS_SCHEMA(child, "key")) || (IS_SCHEMA(child, "keyref"))) {
-	    if (IS_SCHEMA(child, "unique")) {
-		curIDC = xmlSchemaParseIDC(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_IDC_UNIQUE, decl->targetNamespace);
-	    } else if (IS_SCHEMA(child, "key")) {
-		curIDC = xmlSchemaParseIDC(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_IDC_KEY, decl->targetNamespace);
-	    } else if (IS_SCHEMA(child, "keyref")) {
-		curIDC = xmlSchemaParseIDC(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_IDC_KEYREF, decl->targetNamespace);
-	    }
-	    if (lastIDC != NULL)
-		lastIDC->next = curIDC;
-	    else
-		decl->idcs = (void *) curIDC;
-	    lastIDC = curIDC;
-	    child = child->next;
-	}
-	if (child != NULL) {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child,
-		NULL, "(annotation?, ((simpleType | complexType)?, "
-		"(unique | key | keyref)*))");
-	}
-	decl->annot = annot;
-    }
-    /*
-    * NOTE: Element Declaration Representation OK 4. will be checked at a
-    * different layer.
-    */
-    FREE_AND_NULL(des)
-    if (topLevel)
-	return ((xmlSchemaBasicItemPtr) decl);
-    else {
-	particle->children = (xmlSchemaTreeItemPtr) decl;
-	return ((xmlSchemaBasicItemPtr) particle);
-    }
-
-return_null:
-    FREE_AND_NULL(des);
-    if (annot != NULL) {
-	if (particle != NULL)
-	    particle->annot = NULL;
-	if (decl != NULL)
-	    decl->annot = NULL;
-	xmlSchemaFreeAnnot(annot);
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaParseUnion:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Union definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of internal error, 0 in case of success and a positive
- * error code otherwise.
- */
-static int
-xmlSchemaParseUnion(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                    xmlNodePtr node)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *cur = NULL;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (-1);
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    /*
-    * Mark the simple type as being of variety "union".
-    */
-    type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION;
-    /*
-    * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
-    * then the `simple ur-type definition`."
-    */
-    type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "memberTypes"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * Attribute "memberTypes". This is a list of QNames.
-    * TODO: Check the value to contain anything.
-    */
-    attr = xmlSchemaGetPropNode(node, "memberTypes");
-    if (attr != NULL) {
-	const xmlChar *end;
-	xmlChar *tmp;
-	const xmlChar *localName, *nsName;
-	xmlSchemaTypeLinkPtr link, lastLink = NULL;
-	xmlSchemaQNameRefPtr ref;
-
-	cur = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	type->base = cur;
-	do {
-	    while (IS_BLANK_CH(*cur))
-		cur++;
-	    end = cur;
-	    while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-		end++;
-	    if (end == cur)
-		break;
-	    tmp = xmlStrndup(cur, end - cur);
-	    if (xmlSchemaPValAttrNodeQNameValue(ctxt, schema,
-		NULL, attr, BAD_CAST tmp, &nsName, &localName) == 0) {
-		/*
-		* Create the member type link.
-		*/
-		link = (xmlSchemaTypeLinkPtr)
-		    xmlMalloc(sizeof(xmlSchemaTypeLink));
-		if (link == NULL) {
-		    xmlSchemaPErrMemory(ctxt, "xmlSchemaParseUnion, "
-			"allocating a type link", NULL);
-		    return (-1);
-		}
-		link->type = NULL;
-		link->next = NULL;
-		if (lastLink == NULL)
-		    type->memberTypes = link;
-		else
-		    lastLink->next = link;
-		lastLink = link;
-		/*
-		* Create a reference item.
-		*/
-		ref = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_SIMPLE,
-		    localName, nsName);
-		if (ref == NULL) {
-		    FREE_AND_NULL(tmp)
-		    return (-1);
-		}
-		/*
-		* Assign the reference to the link, it will be resolved
-		* later during fixup of the union simple type.
-		*/
-		link->type = (xmlSchemaTypePtr) ref;
-	    }
-	    FREE_AND_NULL(tmp)
-	    cur = end;
-	} while (*cur != 0);
-
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the simple type ancestor.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (IS_SCHEMA(child, "simpleType")) {
-	xmlSchemaTypePtr subtype, last = NULL;
-
-	/*
-	* Anchor the member types in the "subtypes" field of the
-	* simple type.
-	*/
-	while (IS_SCHEMA(child, "simpleType")) {
-	    subtype = (xmlSchemaTypePtr)
-		xmlSchemaParseSimpleType(ctxt, schema, child, 0);
-	    if (subtype != NULL) {
-		if (last == NULL) {
-		    type->subtypes = subtype;
-		    last = subtype;
-		} else {
-		    last->next = subtype;
-		    last = subtype;
-		}
-		last->next = NULL;
-	    }
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL, "(annotation?, simpleType*)");
-    }
-    if ((attr == NULL) && (type->subtypes == NULL)) {
-	 /*
-	* src-union-memberTypes-or-simpleTypes
-	* Either the memberTypes [attribute] of the <union> element must
-	* be non-empty or there must be at least one simpleType [child].
-	*/
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES,
-	    NULL, node,
-	    "Either the attribute 'memberTypes' or "
-	    "at least one <simpleType> child must be present", NULL);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaParseList:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema List definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- *         1 in case of success.
- */
-static xmlSchemaTypePtr
-xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                   xmlNodePtr node)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    /*
-    * Mark the type as being of variety "list".
-    */
-    type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
-    /*
-    * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
-    * then the `simple ur-type definition`."
-    */
-    type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "itemType"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
-    /*
-    * Attribute "itemType". NOTE that we will use the "ref" and "refNs"
-    * fields for holding the reference to the itemType.
-    *
-    * REVAMP TODO: Use the "base" and "baseNs" fields, since we will remove
-    * the "ref" fields.
-    */
-    xmlSchemaPValAttrQName(ctxt, schema, NULL,
-	node, "itemType", &(type->baseNs), &(type->base));
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (IS_SCHEMA(child, "simpleType")) {
-	/*
-	* src-list-itemType-or-simpleType
-	* Either the itemType [attribute] or the <simpleType> [child] of
-	* the <list> element must be present, but not both.
-	*/
-	if (type->base != NULL) {
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
-		NULL, node,
-		"The attribute 'itemType' and the <simpleType> child "
-		"are mutually exclusive", NULL);
-	} else {
-	    type->subtypes = xmlSchemaParseSimpleType(ctxt, schema, child, 0);
-	}
-        child = child->next;
-    } else if (type->base == NULL) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
-	    NULL, node,
-	    "Either the attribute 'itemType' or the <simpleType> child "
-	    "must be present", NULL);
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL, "(annotation?, simpleType?)");
-    }
-    if ((type->base == NULL) &&
-	(type->subtypes == NULL) &&
-	(xmlSchemaGetPropNode(node, "itemType") == NULL)) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
-	    NULL, node,
-	    "Either the attribute 'itemType' or the <simpleType> child "
-	    "must be present", NULL);
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaParseSimpleType:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Simple Type definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaTypePtr
-xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                         xmlNodePtr node, int topLevel)
-{
-    xmlSchemaTypePtr type, oldCtxtType;
-    xmlNodePtr child = NULL;
-    const xmlChar *attrValue = NULL;
-    xmlAttrPtr attr;
-    int hasRestriction = 0;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    if (topLevel) {
-	attr = xmlSchemaGetPropNode(node, "name");
-	if (attr == NULL) {
-	    xmlSchemaPMissingAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_MISSING,
-		NULL, node,
-		"name", NULL);
-	    return (NULL);
-	} else {
-	    if (xmlSchemaPValAttrNode(ctxt,
-		NULL, attr,
-		xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &attrValue) != 0)
-		return (NULL);
-	    /*
-	    * Skip built-in types.
-	    */
-	    if (ctxt->isS4S) {
-		xmlSchemaTypePtr biType;
-
-		if (ctxt->isRedefine) {
-		    /*
-		    * REDEFINE: Disallow redefinition of built-in-types.
-		    * TODO: It seems that the spec does not say anything
-		    * about this case.
-		    */
-		    xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
-			NULL, node,
-			"Redefinition of built-in simple types is not "
-			"supported", NULL);
-		    return(NULL);
-		}
-		biType = xmlSchemaGetPredefinedType(attrValue, xmlSchemaNs);
-		if (biType != NULL)
-		    return (biType);
-	    }
-	}
-    }
-    /*
-    * TargetNamespace:
-    * SPEC "The `actual value` of the targetNamespace [attribute]
-    * of the <schema> ancestor element information item if present,
-    * otherwise `absent`.
-    */
-    if (topLevel == 0) {
-#ifdef ENABLE_NAMED_LOCALS
-        char buf[40];
-#endif
-	/*
-	* Parse as local simple type definition.
-	*/
-#ifdef ENABLE_NAMED_LOCALS
-        snprintf(buf, 39, "#ST%d", ctxt->counter++ + 1);
-	type = xmlSchemaAddType(ctxt, schema,
-	    XML_SCHEMA_TYPE_SIMPLE,
-	    xmlDictLookup(ctxt->dict, (const xmlChar *)buf, -1),
-	    ctxt->targetNamespace, node, 0);
-#else
-	type = xmlSchemaAddType(ctxt, schema,
-	    XML_SCHEMA_TYPE_SIMPLE,
-	    NULL, ctxt->targetNamespace, node, 0);
-#endif
-	if (type == NULL)
-	    return (NULL);
-	type->type = XML_SCHEMA_TYPE_SIMPLE;
-	type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if (!xmlStrEqual(attr->name, BAD_CAST "id")) {
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-    } else {
-	/*
-	* Parse as global simple type definition.
-	*
-	* Note that attrValue is the value of the attribute "name" here.
-	*/
-	type = xmlSchemaAddType(ctxt, schema, XML_SCHEMA_TYPE_SIMPLE,
-	    attrValue, ctxt->targetNamespace, node, 1);
-	if (type == NULL)
-	    return (NULL);
-	type->type = XML_SCHEMA_TYPE_SIMPLE;
-	type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
-	type->flags |= XML_SCHEMAS_TYPE_GLOBAL;
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "final"))) {
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-	/*
-	* Attribute "final".
-	*/
-	attr = xmlSchemaGetPropNode(node, "final");
-	if (attr == NULL) {
-	    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
-		type->flags |= XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
-	    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_LIST)
-		type->flags |= XML_SCHEMAS_TYPE_FINAL_LIST;
-	    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_UNION)
-		type->flags |= XML_SCHEMAS_TYPE_FINAL_UNION;
-	} else {
-	    attrValue = xmlSchemaGetProp(ctxt, node, "final");
-	    if (xmlSchemaPValAttrBlockFinal(attrValue, &(type->flags),
-		-1, -1, XML_SCHEMAS_TYPE_FINAL_RESTRICTION, -1,
-		XML_SCHEMAS_TYPE_FINAL_LIST,
-		XML_SCHEMAS_TYPE_FINAL_UNION) != 0) {
-
-		xmlSchemaPSimpleTypeErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		    WXS_BASIC_CAST type, (xmlNodePtr) attr,
-		    NULL, "(#all | List of (list | union | restriction)",
-		    attrValue, NULL, NULL, NULL);
-	    }
-	}
-    }
-    type->targetNamespace = ctxt->targetNamespace;
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    oldCtxtType = ctxt->ctxtType;
-
-    ctxt->ctxtType = type;
-
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        type->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_MISSING,
-	    NULL, node, child, NULL,
-	    "(annotation?, (restriction | list | union))");
-    } else if (IS_SCHEMA(child, "restriction")) {
-        xmlSchemaParseRestriction(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_SIMPLE);
-	hasRestriction = 1;
-        child = child->next;
-    } else if (IS_SCHEMA(child, "list")) {
-        xmlSchemaParseList(ctxt, schema, child);
-        child = child->next;
-    } else if (IS_SCHEMA(child, "union")) {
-        xmlSchemaParseUnion(ctxt, schema, child);
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?, (restriction | list | union))");
-    }
-    /*
-    * REDEFINE: SPEC src-redefine (5)
-    * "Within the [children], each <simpleType> must have a
-    * <restriction> among its [children] ... the `actual value` of whose
-    * base [attribute] must be the same as the `actual value` of its own
-    * name attribute plus target namespace;"
-    */
-    if (topLevel && ctxt->isRedefine && (! hasRestriction)) {
-	xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
-	    NULL, node, "This is a redefinition, thus the "
-	    "<simpleType> must have a <restriction> child", NULL);
-    }
-
-    ctxt->ctxtType = oldCtxtType;
-    return (type);
-}
-
-/**
- * xmlSchemaParseModelGroupDefRef:
- * @ctxt:  the parser context
- * @schema: the schema being built
- * @node:  the node
- *
- * Parses a reference to a model group definition.
- *
- * We will return a particle component with a qname-component or
- * NULL in case of an error.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroupDefRef(xmlSchemaParserCtxtPtr ctxt,
-			       xmlSchemaPtr schema,
-			       xmlNodePtr node)
-{
-    xmlSchemaParticlePtr item;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *ref = NULL, *refNs = NULL;
-    int min, max;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    attr = xmlSchemaGetPropNode(node, "ref");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "ref", NULL);
-	return (NULL);
-    } else if (xmlSchemaPValAttrNodeQName(ctxt, schema, NULL,
-	attr, &refNs, &ref) != 0) {
-	return (NULL);
-    }
-    xmlSchemaCheckReference(ctxt, schema, node, attr, refNs);
-    min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
-    max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
-	"(xs:nonNegativeInteger | unbounded)");
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "ref")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "maxOccurs"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    item = xmlSchemaAddParticle(ctxt, node, min, max);
-    if (item == NULL)
-	return (NULL);
-    /*
-    * Create a qname-reference and set as the term; it will be substituted
-    * for the model group after the reference has been resolved.
-    */
-    item->children = (xmlSchemaTreeItemPtr)
-	xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_GROUP, ref, refNs);
-    xmlSchemaPCheckParticleCorrect_2(ctxt, item, node, min, max);
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    /* TODO: Is annotation even allowed for a model group reference? */
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* TODO: What to do exactly with the annotation?
-	*/
-	item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?)");
-    }
-    /*
-    * Corresponds to no component at all if minOccurs==maxOccurs==0.
-    */
-    if ((min == 0) && (max == 0))
-	return (NULL);
-
-    return ((xmlSchemaTreeItemPtr) item);
-}
-
-/**
- * xmlSchemaParseModelGroupDefinition:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parses a XML schema model group definition.
- *
- * Note that the contraint src-redefine (6.2) can't be applied until
- * references have been resolved. So we will do this at the
- * component fixup level.
- *
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- *         1 in case of success.
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaParseModelGroupDefinition(xmlSchemaParserCtxtPtr ctxt,
-				   xmlSchemaPtr schema,
-				   xmlNodePtr node)
-{
-    xmlSchemaModelGroupDefPtr item;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *name;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    attr = xmlSchemaGetPropNode(node, "name");
-    if (attr == NULL) {
-	xmlSchemaPMissingAttrErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node,
-	    "name", NULL);
-	return (NULL);
-    } else if (xmlSchemaPValAttrNode(ctxt, NULL, attr,
-	xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
-	return (NULL);
-    }
-    item = xmlSchemaAddModelGroupDefinition(ctxt, schema, name,
-	ctxt->targetNamespace, node);
-    if (item == NULL)
-	return (NULL);
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "id"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	child = child->next;
-    }
-    if (IS_SCHEMA(child, "all")) {
-	item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_ALL, 0);
-	child = child->next;
-    } else if (IS_SCHEMA(child, "choice")) {
-	item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_CHOICE, 0);
-	child = child->next;
-    } else if (IS_SCHEMA(child, "sequence")) {
-	item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_SEQUENCE, 0);
-	child = child->next;
-    }
-
-
-
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?, (all | choice | sequence)?)");
-    }
-    return (item);
-}
-
-/**
- * xmlSchemaCleanupDoc:
- * @ctxt:  a schema validation context
- * @node:  the root of the document.
- *
- * removes unwanted nodes in a schemas document tree
- */
-static void
-xmlSchemaCleanupDoc(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr root)
-{
-    xmlNodePtr delete, cur;
-
-    if ((ctxt == NULL) || (root == NULL)) return;
-
-    /*
-     * Remove all the blank text nodes
-     */
-    delete = NULL;
-    cur = root;
-    while (cur != NULL) {
-        if (delete != NULL) {
-            xmlUnlinkNode(delete);
-            xmlFreeNode(delete);
-            delete = NULL;
-        }
-        if (cur->type == XML_TEXT_NODE) {
-            if (IS_BLANK_NODE(cur)) {
-                if (xmlNodeGetSpacePreserve(cur) != 1) {
-                    delete = cur;
-                }
-            }
-        } else if ((cur->type != XML_ELEMENT_NODE) &&
-                   (cur->type != XML_CDATA_SECTION_NODE)) {
-            delete = cur;
-            goto skip_children;
-        }
-
-        /*
-         * Skip to next node
-         */
-        if (cur->children != NULL) {
-            if ((cur->children->type != XML_ENTITY_DECL) &&
-                (cur->children->type != XML_ENTITY_REF_NODE) &&
-                (cur->children->type != XML_ENTITY_NODE)) {
-                cur = cur->children;
-                continue;
-            }
-        }
-      skip_children:
-        if (cur->next != NULL) {
-            cur = cur->next;
-            continue;
-        }
-
-        do {
-            cur = cur->parent;
-            if (cur == NULL)
-                break;
-            if (cur == root) {
-                cur = NULL;
-                break;
-            }
-            if (cur->next != NULL) {
-                cur = cur->next;
-                break;
-            }
-        } while (cur != NULL);
-    }
-    if (delete != NULL) {
-        xmlUnlinkNode(delete);
-        xmlFreeNode(delete);
-        delete = NULL;
-    }
-}
-
-
-static void
-xmlSchemaClearSchemaDefaults(xmlSchemaPtr schema)
-{
-    if (schema->flags & XML_SCHEMAS_QUALIF_ELEM)
-	schema->flags ^= XML_SCHEMAS_QUALIF_ELEM;
-
-    if (schema->flags & XML_SCHEMAS_QUALIF_ATTR)
-	schema->flags ^= XML_SCHEMAS_QUALIF_ATTR;
-
-    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
-	schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_EXTENSION;
-    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
-	schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION;
-    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_LIST)
-	schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_LIST;
-    if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_UNION)
-	schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_UNION;
-
-    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
-	schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION;
-    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
-	schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION;
-    if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION)
-	schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION;
-}
-
-static int
-xmlSchemaParseSchemaElement(xmlSchemaParserCtxtPtr ctxt,
-			     xmlSchemaPtr schema,
-			     xmlNodePtr node)
-{
-    xmlAttrPtr attr;
-    const xmlChar *val;
-    int res = 0, oldErrs = ctxt->nberrors;
-
-    /*
-    * Those flags should be moved to the parser context flags,
-    * since they are not visible at the component level. I.e.
-    * they are used if processing schema *documents* only.
-    */
-    res = xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    HFAILURE;
-
-    /*
-    * Since the version is of type xs:token, we won't bother to
-    * check it.
-    */
-    /* REMOVED:
-    attr = xmlSchemaGetPropNode(node, "version");
-    if (attr != NULL) {
-	res = xmlSchemaPValAttrNode(ctxt, NULL, NULL, attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_TOKEN), &val);
-	HFAILURE;
-    }
-    */
-    attr = xmlSchemaGetPropNode(node, "targetNamespace");
-    if (attr != NULL) {
-	res = xmlSchemaPValAttrNode(ctxt, NULL, attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), NULL);
-	HFAILURE;
-	if (res != 0) {
-	    ctxt->stop = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
-	    goto exit;
-	}
-    }
-    attr = xmlSchemaGetPropNode(node, "elementFormDefault");
-    if (attr != NULL) {
-	val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	res = xmlSchemaPValAttrFormDefault(val, &schema->flags,
-	    XML_SCHEMAS_QUALIF_ELEM);
-	HFAILURE;
-	if (res != 0) {
-	    xmlSchemaPSimpleTypeErr(ctxt,
-		XML_SCHEMAP_ELEMFORMDEFAULT_VALUE,
-		NULL, (xmlNodePtr) attr, NULL,
-		"(qualified | unqualified)", val, NULL, NULL, NULL);
-	}
-    }
-    attr = xmlSchemaGetPropNode(node, "attributeFormDefault");
-    if (attr != NULL) {
-	val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	res = xmlSchemaPValAttrFormDefault(val, &schema->flags,
-	    XML_SCHEMAS_QUALIF_ATTR);
-	HFAILURE;
-	if (res != 0) {
-	    xmlSchemaPSimpleTypeErr(ctxt,
-		XML_SCHEMAP_ATTRFORMDEFAULT_VALUE,
-		NULL, (xmlNodePtr) attr, NULL,
-		"(qualified | unqualified)", val, NULL, NULL, NULL);
-	}
-    }
-    attr = xmlSchemaGetPropNode(node, "finalDefault");
-    if (attr != NULL) {
-	val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	res = xmlSchemaPValAttrBlockFinal(val, &(schema->flags), -1,
-	    XML_SCHEMAS_FINAL_DEFAULT_EXTENSION,
-	    XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION,
-	    -1,
-	    XML_SCHEMAS_FINAL_DEFAULT_LIST,
-	    XML_SCHEMAS_FINAL_DEFAULT_UNION);
-	HFAILURE;
-	if (res != 0) {
-	    xmlSchemaPSimpleTypeErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		NULL, (xmlNodePtr) attr, NULL,
-		"(#all | List of (extension | restriction | list | union))",
-		val, NULL, NULL, NULL);
-	}
-    }
-    attr = xmlSchemaGetPropNode(node, "blockDefault");
-    if (attr != NULL) {
-	val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-	res = xmlSchemaPValAttrBlockFinal(val, &(schema->flags), -1,
-	    XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION,
-	    XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION,
-	    XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION, -1, -1);
-	HFAILURE;
-	if (res != 0) {
-	    xmlSchemaPSimpleTypeErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-		NULL, (xmlNodePtr) attr, NULL,
-		"(#all | List of (extension | restriction | substitution))",
-		val, NULL, NULL, NULL);
-	}
-    }
-
-exit:
-    if (oldErrs != ctxt->nberrors)
-	res = ctxt->err;
-    return(res);
-exit_failure:
-    return(-1);
-}
-
-/**
- * xmlSchemaParseSchemaTopLevel:
- * @ctxt:  a schema validation context
- * @schema:  the schemas
- * @nodes:  the list of top level nodes
- *
- * Returns the internal XML Schema structure built from the resource or
- *         NULL in case of error
- */
-static int
-xmlSchemaParseSchemaTopLevel(xmlSchemaParserCtxtPtr ctxt,
-                             xmlSchemaPtr schema, xmlNodePtr nodes)
-{
-    xmlNodePtr child;
-    xmlSchemaAnnotPtr annot;
-    int res = 0, oldErrs, tmpOldErrs;
-
-    if ((ctxt == NULL) || (schema == NULL) || (nodes == NULL))
-        return(-1);
-
-    oldErrs = ctxt->nberrors;
-    child = nodes;
-    while ((IS_SCHEMA(child, "include")) ||
-	   (IS_SCHEMA(child, "import")) ||
-	   (IS_SCHEMA(child, "redefine")) ||
-	   (IS_SCHEMA(child, "annotation"))) {
-	if (IS_SCHEMA(child, "annotation")) {
-	    annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	    if (schema->annot == NULL)
-		schema->annot = annot;
-	    else
-		xmlSchemaFreeAnnot(annot);
-	} else if (IS_SCHEMA(child, "import")) {
-	    tmpOldErrs = ctxt->nberrors;
-	    res = xmlSchemaParseImport(ctxt, schema, child);
-	    HFAILURE;
-	    HSTOP(ctxt);
-	    if (tmpOldErrs != ctxt->nberrors)
-		goto exit;
-	} else if (IS_SCHEMA(child, "include")) {
-	    tmpOldErrs = ctxt->nberrors;
-	    res = xmlSchemaParseInclude(ctxt, schema, child);
-	    HFAILURE;
-	    HSTOP(ctxt);
-	    if (tmpOldErrs != ctxt->nberrors)
-		goto exit;
-	} else if (IS_SCHEMA(child, "redefine")) {
-	    tmpOldErrs = ctxt->nberrors;
-	    res = xmlSchemaParseRedefine(ctxt, schema, child);
-	    HFAILURE;
-	    HSTOP(ctxt);
-	    if (tmpOldErrs != ctxt->nberrors)
-		goto exit;
-	}
-	child = child->next;
-    }
-    /*
-    * URGENT TODO: Change the functions to return int results.
-    * We need especially to catch internal errors.
-    */
-    while (child != NULL) {
-	if (IS_SCHEMA(child, "complexType")) {
-	    xmlSchemaParseComplexType(ctxt, schema, child, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "simpleType")) {
-	    xmlSchemaParseSimpleType(ctxt, schema, child, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "element")) {
-	    xmlSchemaParseElement(ctxt, schema, child, NULL, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "attribute")) {
-	    xmlSchemaParseGlobalAttribute(ctxt, schema, child);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "attributeGroup")) {
-	    xmlSchemaParseAttributeGroupDefinition(ctxt, schema, child);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "group")) {
-	    xmlSchemaParseModelGroupDefinition(ctxt, schema, child);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "notation")) {
-	    xmlSchemaParseNotation(ctxt, schema, child);
-	    child = child->next;
-	} else {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, child->parent, child,
-		NULL, "((include | import | redefine | annotation)*, "
-		"(((simpleType | complexType | group | attributeGroup) "
-		"| element | attribute | notation), annotation*)*)");
-	    child = child->next;
-	}
-	while (IS_SCHEMA(child, "annotation")) {
-	    /*
-	    * TODO: We should add all annotations.
-	    */
-	    annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-	    if (schema->annot == NULL)
-		schema->annot = annot;
-	    else
-		xmlSchemaFreeAnnot(annot);
-	    child = child->next;
-	}
-    }
-exit:
-    ctxt->ctxtType = NULL;
-    if (oldErrs != ctxt->nberrors)
-	res = ctxt->err;
-    return(res);
-exit_failure:
-    return(-1);
-}
-
-static xmlSchemaSchemaRelationPtr
-xmlSchemaSchemaRelationCreate(void)
-{
-    xmlSchemaSchemaRelationPtr ret;
-
-    ret = (xmlSchemaSchemaRelationPtr)
-	xmlMalloc(sizeof(xmlSchemaSchemaRelation));
-    if (ret == NULL) {
-	xmlSchemaPErrMemory(NULL, "allocating schema relation", NULL);
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaSchemaRelation));
-    return(ret);
-}
-
-#if 0
-static void
-xmlSchemaSchemaRelationFree(xmlSchemaSchemaRelationPtr rel)
-{
-    xmlFree(rel);
-}
-#endif
-
-static void
-xmlSchemaRedefListFree(xmlSchemaRedefPtr redef)
-{
-    xmlSchemaRedefPtr prev;
-
-    while (redef != NULL) {
-	prev = redef;
-	redef = redef->next;
-	xmlFree(prev);
-    }
-}
-
-static void
-xmlSchemaConstructionCtxtFree(xmlSchemaConstructionCtxtPtr con)
-{
-    /*
-    * After the construction context has been freed, there will be
-    * no schema graph available any more. Only the schema buckets
-    * will stay alive, which are put into the "schemasImports" and
-    * "includes" slots of the xmlSchema.
-    */
-    if (con->buckets != NULL)
-	xmlSchemaItemListFree(con->buckets);
-    if (con->pending != NULL)
-	xmlSchemaItemListFree(con->pending);
-    if (con->substGroups != NULL)
-	xmlHashFree(con->substGroups,
-	    (xmlHashDeallocator) xmlSchemaSubstGroupFree);
-    if (con->redefs != NULL)
-	xmlSchemaRedefListFree(con->redefs);
-    if (con->dict != NULL)
-	xmlDictFree(con->dict);
-    xmlFree(con);
-}
-
-static xmlSchemaConstructionCtxtPtr
-xmlSchemaConstructionCtxtCreate(xmlDictPtr dict)
-{
-    xmlSchemaConstructionCtxtPtr ret;
-
-    ret = (xmlSchemaConstructionCtxtPtr)
-	xmlMalloc(sizeof(xmlSchemaConstructionCtxt));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(NULL,
-	    "allocating schema construction context", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaConstructionCtxt));
-
-    ret->buckets = xmlSchemaItemListCreate();
-    if (ret->buckets == NULL) {
-	xmlSchemaPErrMemory(NULL,
-	    "allocating list of schema buckets", NULL);
-	xmlFree(ret);
-        return (NULL);
-    }
-    ret->pending = xmlSchemaItemListCreate();
-    if (ret->pending == NULL) {
-	xmlSchemaPErrMemory(NULL,
-	    "allocating list of pending global components", NULL);
-	xmlSchemaConstructionCtxtFree(ret);
-        return (NULL);
-    }
-    ret->dict = dict;
-    xmlDictReference(dict);
-    return(ret);
-}
-
-static xmlSchemaParserCtxtPtr
-xmlSchemaParserCtxtCreate(void)
-{
-    xmlSchemaParserCtxtPtr ret;
-
-    ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(NULL, "allocating schema parser context",
-                            NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaParserCtxt));
-    ret->type = XML_SCHEMA_CTXT_PARSER;
-    ret->attrProhibs = xmlSchemaItemListCreate();
-    if (ret->attrProhibs == NULL) {
-	xmlFree(ret);
-	return(NULL);
-    }
-    return(ret);
-}
-
-/**
- * xmlSchemaNewParserCtxtUseDict:
- * @URL:  the location of the schema
- * @dict: the dictionary to be used
- *
- * Create an XML Schemas parse context for that file/resource expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-static xmlSchemaParserCtxtPtr
-xmlSchemaNewParserCtxtUseDict(const char *URL, xmlDictPtr dict)
-{
-    xmlSchemaParserCtxtPtr ret;
-
-    ret = xmlSchemaParserCtxtCreate();
-    if (ret == NULL)
-        return (NULL);
-    ret->dict = dict;
-    xmlDictReference(dict);
-    if (URL != NULL)
-	ret->URL = xmlDictLookup(dict, (const xmlChar *) URL, -1);
-    return (ret);
-}
-
-static int
-xmlSchemaCreatePCtxtOnVCtxt(xmlSchemaValidCtxtPtr vctxt)
-{
-    if (vctxt->pctxt == NULL) {
-        if (vctxt->schema != NULL)
-	    vctxt->pctxt =
-		xmlSchemaNewParserCtxtUseDict("*", vctxt->schema->dict);
-	else
-	    vctxt->pctxt = xmlSchemaNewParserCtxt("*");
-	if (vctxt->pctxt == NULL) {
-	    VERROR_INT("xmlSchemaCreatePCtxtOnVCtxt",
-		"failed to create a temp. parser context");
-	    return (-1);
-	}
-	/* TODO: Pass user data. */
-	xmlSchemaSetParserErrors(vctxt->pctxt, vctxt->error,
-	    vctxt->warning, vctxt->errCtxt);
-	xmlSchemaSetParserStructuredErrors(vctxt->pctxt, vctxt->serror,
-	    vctxt->errCtxt);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaGetSchemaBucket:
- * @pctxt: the schema parser context
- * @schemaLocation: the URI of the schema document
- *
- * Returns a schema bucket if it was already parsed.
- *
- * Returns a schema bucket if it was already parsed from
- *         @schemaLocation, NULL otherwise.
- */
-static xmlSchemaBucketPtr
-xmlSchemaGetSchemaBucket(xmlSchemaParserCtxtPtr pctxt,
-			    const xmlChar *schemaLocation)
-{
-    xmlSchemaBucketPtr cur;
-    xmlSchemaItemListPtr list;
-
-    list = pctxt->constructor->buckets;
-    if (list->nbItems == 0)
-	return(NULL);
-    else {
-	int i;
-	for (i = 0; i < list->nbItems; i++) {
-	    cur = (xmlSchemaBucketPtr) list->items[i];
-	    /* Pointer comparison! */
-	    if (cur->schemaLocation == schemaLocation)
-		return(cur);
-	}
-    }
-    return(NULL);
-}
-
-static xmlSchemaBucketPtr
-xmlSchemaGetChameleonSchemaBucket(xmlSchemaParserCtxtPtr pctxt,
-				     const xmlChar *schemaLocation,
-				     const xmlChar *targetNamespace)
-{
-    xmlSchemaBucketPtr cur;
-    xmlSchemaItemListPtr list;
-
-    list = pctxt->constructor->buckets;
-    if (list->nbItems == 0)
-	return(NULL);
-    else {
-	int i;
-	for (i = 0; i < list->nbItems; i++) {
-	    cur = (xmlSchemaBucketPtr) list->items[i];
-	    /* Pointer comparison! */
-	    if ((cur->origTargetNamespace == NULL) &&
-		(cur->schemaLocation == schemaLocation) &&
-		(cur->targetNamespace == targetNamespace))
-		return(cur);
-	}
-    }
-    return(NULL);
-}
-
-
-#define IS_BAD_SCHEMA_DOC(b) \
-    (((b)->doc == NULL) && ((b)->schemaLocation != NULL))
-
-static xmlSchemaBucketPtr
-xmlSchemaGetSchemaBucketByTNS(xmlSchemaParserCtxtPtr pctxt,
-				 const xmlChar *targetNamespace,
-				 int imported)
-{
-    xmlSchemaBucketPtr cur;
-    xmlSchemaItemListPtr list;
-
-    list = pctxt->constructor->buckets;
-    if (list->nbItems == 0)
-	return(NULL);
-    else {
-	int i;
-	for (i = 0; i < list->nbItems; i++) {
-	    cur = (xmlSchemaBucketPtr) list->items[i];
-	    if ((! IS_BAD_SCHEMA_DOC(cur)) &&
-		(cur->origTargetNamespace == targetNamespace) &&
-		((imported && cur->imported) ||
-		 ((!imported) && (!cur->imported))))
-		return(cur);
-	}
-    }
-    return(NULL);
-}
-
-static int
-xmlSchemaParseNewDocWithContext(xmlSchemaParserCtxtPtr pctxt,
-		     xmlSchemaPtr schema,
-		     xmlSchemaBucketPtr bucket)
-{
-    int oldFlags;
-    xmlDocPtr oldDoc;
-    xmlNodePtr node;
-    int ret, oldErrs;
-    xmlSchemaBucketPtr oldbucket = pctxt->constructor->bucket;
-
-    /*
-    * Save old values; reset the *main* schema.
-    * URGENT TODO: This is not good; move the per-document information
-    * to the parser. Get rid of passing the main schema to the
-    * parsing functions.
-    */
-    oldFlags = schema->flags;
-    oldDoc = schema->doc;
-    if (schema->flags != 0)
-	xmlSchemaClearSchemaDefaults(schema);
-    schema->doc = bucket->doc;
-    pctxt->schema = schema;
-    /*
-    * Keep the current target namespace on the parser *not* on the
-    * main schema.
-    */
-    pctxt->targetNamespace = bucket->targetNamespace;
-    WXS_CONSTRUCTOR(pctxt)->bucket = bucket;
-
-    if ((bucket->targetNamespace != NULL) &&
-	xmlStrEqual(bucket->targetNamespace, xmlSchemaNs)) {
-	/*
-	* We are parsing the schema for schemas!
-	*/
-	pctxt->isS4S = 1;
-    }
-    /* Mark it as parsed, even if parsing fails. */
-    bucket->parsed++;
-    /* Compile the schema doc. */
-    node = xmlDocGetRootElement(bucket->doc);
-    ret = xmlSchemaParseSchemaElement(pctxt, schema, node);
-    if (ret != 0)
-	goto exit;
-    /* An empty schema; just get out. */
-    if (node->children == NULL)
-	goto exit;
-    oldErrs = pctxt->nberrors;
-    ret = xmlSchemaParseSchemaTopLevel(pctxt, schema, node->children);
-    if (ret != 0)
-	goto exit;
-    /*
-    * TODO: Not nice, but I'm not 100% sure we will get always an error
-    * as a result of the obove functions; so better rely on pctxt->err
-    * as well.
-    */
-    if ((ret == 0) && (oldErrs != pctxt->nberrors)) {
-	ret = pctxt->err;
-	goto exit;
-    }
-
-exit:
-    WXS_CONSTRUCTOR(pctxt)->bucket = oldbucket;
-    /* Restore schema values. */
-    schema->doc = oldDoc;
-    schema->flags = oldFlags;
-    return(ret);
-}
-
-static int
-xmlSchemaParseNewDoc(xmlSchemaParserCtxtPtr pctxt,
-		     xmlSchemaPtr schema,
-		     xmlSchemaBucketPtr bucket)
-{
-    xmlSchemaParserCtxtPtr newpctxt;
-    int res = 0;
-
-    if (bucket == NULL)
-	return(0);
-    if (bucket->parsed) {
-	PERROR_INT("xmlSchemaParseNewDoc",
-	    "reparsing a schema doc");
-	return(-1);
-    }
-    if (bucket->doc == NULL) {
-	PERROR_INT("xmlSchemaParseNewDoc",
-	    "parsing a schema doc, but there's no doc");
-	return(-1);
-    }
-    if (pctxt->constructor == NULL) {
-	PERROR_INT("xmlSchemaParseNewDoc",
-	    "no constructor");
-	return(-1);
-    }
-    /* Create and init the temporary parser context. */
-    newpctxt = xmlSchemaNewParserCtxtUseDict(
-	(const char *) bucket->schemaLocation, pctxt->dict);
-    if (newpctxt == NULL)
-	return(-1);
-    newpctxt->constructor = pctxt->constructor;
-    /*
-    * TODO: Can we avoid that the parser knows about the main schema?
-    * It would be better if he knows about the current schema bucket
-    * only.
-    */
-    newpctxt->schema = schema;
-    xmlSchemaSetParserErrors(newpctxt, pctxt->error, pctxt->warning,
-	pctxt->errCtxt);
-    xmlSchemaSetParserStructuredErrors(newpctxt, pctxt->serror,
-	pctxt->errCtxt);
-    newpctxt->counter = pctxt->counter;
-
-
-    res = xmlSchemaParseNewDocWithContext(newpctxt, schema, bucket);
-
-    /* Channel back errors and cleanup the temporary parser context. */
-    if (res != 0)
-	pctxt->err = res;
-    pctxt->nberrors += newpctxt->nberrors;
-    pctxt->counter = newpctxt->counter;
-    newpctxt->constructor = NULL;
-    /* Free the parser context. */
-    xmlSchemaFreeParserCtxt(newpctxt);
-    return(res);
-}
-
-static void
-xmlSchemaSchemaRelationAddChild(xmlSchemaBucketPtr bucket,
-				xmlSchemaSchemaRelationPtr rel)
-{
-    xmlSchemaSchemaRelationPtr cur = bucket->relations;
-
-    if (cur == NULL) {
-	bucket->relations = rel;
-	return;
-    }
-    while (cur->next != NULL)
-	cur = cur->next;
-    cur->next = rel;
-}
-
-
-static const xmlChar *
-xmlSchemaBuildAbsoluteURI(xmlDictPtr dict, const xmlChar* location,
-			  xmlNodePtr ctxtNode)
-{
-    /*
-    * Build an absolue location URI.
-    */
-    if (location != NULL) {
-	if (ctxtNode == NULL)
-	    return(location);
-	else {
-	    xmlChar *base, *URI;
-	    const xmlChar *ret = NULL;
-
-	    base = xmlNodeGetBase(ctxtNode->doc, ctxtNode);
-	    if (base == NULL) {
-		URI = xmlBuildURI(location, ctxtNode->doc->URL);
-	    } else {
-		URI = xmlBuildURI(location, base);
-		xmlFree(base);
-	    }
-	    if (URI != NULL) {
-		ret = xmlDictLookup(dict, URI, -1);
-		xmlFree(URI);
-		return(ret);
-	    }
-	}
-    }
-    return(NULL);
-}
-
-
-
-/**
- * xmlSchemaAddSchemaDoc:
- * @pctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parse an included (and to-be-redefined) XML schema document.
- *
- * Returns 0 on success, a positive error code on errors and
- *         -1 in case of an internal or API error.
- */
-
-static int
-xmlSchemaAddSchemaDoc(xmlSchemaParserCtxtPtr pctxt,
-		int type, /* import or include or redefine */
-		const xmlChar *schemaLocation,
-		xmlDocPtr schemaDoc,
-		const char *schemaBuffer,
-		int schemaBufferLen,
-		xmlNodePtr invokingNode,
-		const xmlChar *sourceTargetNamespace,
-		const xmlChar *importNamespace,
-		xmlSchemaBucketPtr *bucket)
-{
-    const xmlChar *targetNamespace = NULL;
-    xmlSchemaSchemaRelationPtr relation = NULL;
-    xmlDocPtr doc = NULL;
-    int res = 0, err = 0, located = 0, preserveDoc = 0;
-    xmlSchemaBucketPtr bkt = NULL;
-
-    if (bucket != NULL)
-	*bucket = NULL;
-
-    switch (type) {
-	case XML_SCHEMA_SCHEMA_IMPORT:
-	case XML_SCHEMA_SCHEMA_MAIN:
-	    err = XML_SCHEMAP_SRC_IMPORT;
-	    break;
-	case XML_SCHEMA_SCHEMA_INCLUDE:
-	    err = XML_SCHEMAP_SRC_INCLUDE;
-	    break;
-	case XML_SCHEMA_SCHEMA_REDEFINE:
-	    err = XML_SCHEMAP_SRC_REDEFINE;
-	    break;
-    }
-
-
-    /* Special handling for the main schema:
-    * skip the location and relation logic and just parse the doc.
-    * We need just a bucket to be returned in this case.
-    */
-    if ((type == XML_SCHEMA_SCHEMA_MAIN) || (! WXS_HAS_BUCKETS(pctxt)))
-	goto doc_load;
-
-    /* Note that we expect the location to be an absulute URI. */
-    if (schemaLocation != NULL) {
-	bkt = xmlSchemaGetSchemaBucket(pctxt, schemaLocation);
-	if ((bkt != NULL) &&
-	    (pctxt->constructor->bucket == bkt)) {
-	    /* Report self-imports/inclusions/redefinitions. */
-
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
-		invokingNode, NULL,
-		"The schema must not import/include/redefine itself",
-		NULL, NULL);
-	    goto exit;
-	}
-    }
-    /*
-    * Create a relation for the graph of schemas.
-    */
-    relation = xmlSchemaSchemaRelationCreate();
-    if (relation == NULL)
-	return(-1);
-    xmlSchemaSchemaRelationAddChild(pctxt->constructor->bucket,
-	relation);
-    relation->type = type;
-
-    /*
-    * Save the namespace import information.
-    */
-    if (WXS_IS_BUCKET_IMPMAIN(type)) {
-	relation->importNamespace = importNamespace;
-	if (schemaLocation == NULL) {
-	    /*
-	    * No location; this is just an import of the namespace.
-	    * Note that we don't assign a bucket to the relation
-	    * in this case.
-	    */
-	    goto exit;
-	}
-	targetNamespace = importNamespace;
-    }
-
-    /* Did we already fetch the doc? */
-    if (bkt != NULL) {
-	if ((WXS_IS_BUCKET_IMPMAIN(type)) && (! bkt->imported)) {
-	    /*
-	    * We included/redefined and then try to import a schema,
-	    * but the new location provided for import was different.
-	    */
-	    if (schemaLocation == NULL)
-		schemaLocation = BAD_CAST "in_memory_buffer";
-	    if (!xmlStrEqual(schemaLocation,
-		bkt->schemaLocation)) {
-		xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
-		    invokingNode, NULL,
-		    "The schema document '%s' cannot be imported, since "
-		    "it was already included or redefined",
-		    schemaLocation, NULL);
-		goto exit;
-	    }
-	} else if ((! WXS_IS_BUCKET_IMPMAIN(type)) && (bkt->imported)) {
-	    /*
-	    * We imported and then try to include/redefine a schema,
-	    * but the new location provided for the include/redefine
-	    * was different.
-	    */
-	    if (schemaLocation == NULL)
-		schemaLocation = BAD_CAST "in_memory_buffer";
-	    if (!xmlStrEqual(schemaLocation,
-		bkt->schemaLocation)) {
-		xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
-		    invokingNode, NULL,
-		    "The schema document '%s' cannot be included or "
-		    "redefined, since it was already imported",
-		    schemaLocation, NULL);
-		goto exit;
-	    }
-	}
-    }
-
-    if (WXS_IS_BUCKET_IMPMAIN(type)) {
-	/*
-	* Given that the schemaLocation [attribute] is only a hint, it is open
-	* to applications to ignore all but the first <import> for a given
-	* namespace, regardless of the `actual value` of schemaLocation, but
-	* such a strategy risks missing useful information when new
-	* schemaLocations are offered.
-	*
-	* We will use the first <import> that comes with a location.
-	* Further <import>s *with* a location, will result in an error.
-	* TODO: Better would be to just report a warning here, but
-	* we'll try it this way until someone complains.
-	*
-	* Schema Document Location Strategy:
-	* 3 Based on the namespace name, identify an existing schema document,
-	* either as a resource which is an XML document or a <schema> element
-	* information item, in some local schema repository;
-	* 5 Attempt to resolve the namespace name to locate such a resource.
-	*
-	* NOTE: (3) and (5) are not supported.
-	*/
-	if (bkt != NULL) {
-	    relation->bucket = bkt;
-	    goto exit;
-	}
-	bkt = xmlSchemaGetSchemaBucketByTNS(pctxt,
-	    importNamespace, 1);
-
-	if (bkt != NULL) {
-	    relation->bucket = bkt;
-	    if (bkt->schemaLocation == NULL) {
-		/* First given location of the schema; load the doc. */
-		bkt->schemaLocation = schemaLocation;
-	    } else {
-		if (!xmlStrEqual(schemaLocation,
-		    bkt->schemaLocation)) {
-		    /*
-		    * Additional location given; just skip it.
-		    * URGENT TODO: We should report a warning here.
-		    * res = XML_SCHEMAP_SRC_IMPORT;
-		    */
-		    if (schemaLocation == NULL)
-			schemaLocation = BAD_CAST "in_memory_buffer";
-
-		    xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-			XML_SCHEMAP_WARN_SKIP_SCHEMA,
-			invokingNode, NULL,
-			"Skipping import of schema located at '%s' for the "
-			"namespace '%s', since this namespace was already "
-			"imported with the schema located at '%s'",
-			schemaLocation, importNamespace, bkt->schemaLocation);
-		}
-		goto exit;
-	    }
-	}
-	/*
-	* No bucket + first location: load the doc and create a
-	* bucket.
-	*/
-    } else {
-	/* <include> and <redefine> */
-	if (bkt != NULL) {
-
-	    if ((bkt->origTargetNamespace == NULL) &&
-		(bkt->targetNamespace != sourceTargetNamespace)) {
-		xmlSchemaBucketPtr chamel;
-
-		/*
-		* Chameleon include/redefine: skip loading only if it was
-		* aleady build for the targetNamespace of the including
-		* schema.
-		*/
-		/*
-		* URGENT TODO: If the schema is a chameleon-include then copy
-		* the components into the including schema and modify the
-		* targetNamespace of those components, do nothing otherwise.
-		* NOTE: This is currently worked-around by compiling the
-		* chameleon for every destinct including targetNamespace; thus
-		* not performant at the moment.
-		* TODO: Check when the namespace in wildcards for chameleons
-		* needs to be converted: before we built wildcard intersections
-		* or after.
-		*   Answer: after!
-		*/
-		chamel = xmlSchemaGetChameleonSchemaBucket(pctxt,
-		    schemaLocation, sourceTargetNamespace);
-		if (chamel != NULL) {
-		    /* A fitting chameleon was already parsed; NOP. */
-		    relation->bucket = chamel;
-		    goto exit;
-		}
-		/*
-		* We need to parse the chameleon again for a different
-		* targetNamespace.
-		* CHAMELEON TODO: Optimize this by only parsing the
-		* chameleon once, and then copying the components to
-		* the new targetNamespace.
-		*/
-		bkt = NULL;
-	    } else {
-		relation->bucket = bkt;
-		goto exit;
-	    }
-	}
-    }
-    if ((bkt != NULL) && (bkt->doc != NULL)) {
-	PERROR_INT("xmlSchemaAddSchemaDoc",
-	    "trying to load a schema doc, but a doc is already "
-	    "assigned to the schema bucket");
-	goto exit_failure;
-    }
-
-doc_load:
-    /*
-    * Load the document.
-    */
-    if (schemaDoc != NULL) {
-	doc = schemaDoc;
-	/* Don' free this one, since it was provided by the caller. */
-	preserveDoc = 1;
-	/* TODO: Does the context or the doc hold the location? */
-	if (schemaDoc->URL != NULL)
-	    schemaLocation = xmlDictLookup(pctxt->dict,
-		schemaDoc->URL, -1);
-        else
-	    schemaLocation = BAD_CAST "in_memory_buffer";
-    } else if ((schemaLocation != NULL) || (schemaBuffer != NULL)) {
-	xmlParserCtxtPtr parserCtxt;
-
-	parserCtxt = xmlNewParserCtxt();
-	if (parserCtxt == NULL) {
-	    xmlSchemaPErrMemory(NULL, "xmlSchemaGetDoc, "
-		"allocating a parser context", NULL);
-	    goto exit_failure;
-	}
-	if ((pctxt->dict != NULL) && (parserCtxt->dict != NULL)) {
-	    /*
-	    * TODO: Do we have to burden the schema parser dict with all
-	    * the content of the schema doc?
-	    */
-	    xmlDictFree(parserCtxt->dict);
-	    parserCtxt->dict = pctxt->dict;
-	    xmlDictReference(parserCtxt->dict);
-	}
-	if (schemaLocation != NULL) {
-	    /* Parse from file. */
-	    doc = xmlCtxtReadFile(parserCtxt, (const char *) schemaLocation,
-		NULL, SCHEMAS_PARSE_OPTIONS);
-	} else if (schemaBuffer != NULL) {
-	    /* Parse from memory buffer. */
-	    doc = xmlCtxtReadMemory(parserCtxt, schemaBuffer, schemaBufferLen,
-		NULL, NULL, SCHEMAS_PARSE_OPTIONS);
-	    schemaLocation = BAD_CAST "in_memory_buffer";
-	    if (doc != NULL)
-		doc->URL = xmlStrdup(schemaLocation);
-	}
-	/*
-	* For <import>:
-	* 2.1 The referent is (a fragment of) a resource which is an
-	* XML document (see clause 1.1), which in turn corresponds to
-	* a <schema> element information item in a well-formed information
-	* set, which in turn corresponds to a valid schema.
-	* TODO: (2.1) fragments of XML documents are not supported.
-	*
-	* 2.2 The referent is a <schema> element information item in
-	* a well-formed information set, which in turn corresponds
-	* to a valid schema.
-	* TODO: (2.2) is not supported.
-	*/
-	if (doc == NULL) {
-	    xmlErrorPtr lerr;
-	    lerr = xmlGetLastError();
-	    /*
-	    * Check if this a parser error, or if the document could
-	    * just not be located.
-	    * TODO: Try to find specific error codes to react only on
-	    * localisation failures.
-	    */
-	    if ((lerr == NULL) || (lerr->domain != XML_FROM_IO)) {
-		/*
-		* We assume a parser error here.
-		*/
-		located = 1;
-		/* TODO: Error code ?? */
-		res = XML_SCHEMAP_SRC_IMPORT_2_1;
-		xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
-		    invokingNode, NULL,
-		    "Failed to parse the XML resource '%s'",
-		    schemaLocation, NULL);
-	    }
-	}
-	xmlFreeParserCtxt(parserCtxt);
-	if ((doc == NULL) && located)
-	    goto exit_error;
-    } else {
-	xmlSchemaPErr(pctxt, NULL,
-	    XML_SCHEMAP_NOTHING_TO_PARSE,
-	    "No information for parsing was provided with the "
-	    "given schema parser context.\n",
-	    NULL, NULL);
-	goto exit_failure;
-    }
-    /*
-    * Preprocess the document.
-    */
-    if (doc != NULL) {
-	xmlNodePtr docElem = NULL;
-
-	located = 1;
-	docElem = xmlDocGetRootElement(doc);
-	if (docElem == NULL) {
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt, XML_SCHEMAP_NOROOT,
-		invokingNode, NULL,
-		"The document '%s' has no document element",
-		schemaLocation, NULL);
-	    goto exit_error;
-	}
-	/*
-	* Remove all the blank text nodes.
-	*/
-	xmlSchemaCleanupDoc(pctxt, docElem);
-	/*
-	* Check the schema's top level element.
-	*/
-	if (!IS_SCHEMA(docElem, "schema")) {
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt, XML_SCHEMAP_NOT_SCHEMA,
-		invokingNode, NULL,
-		"The XML document '%s' is not a schema document",
-		schemaLocation, NULL);
-	    goto exit_error;
-	}
-	/*
-	* Note that we don't apply a type check for the
-	* targetNamespace value here.
-	*/
-	targetNamespace = xmlSchemaGetProp(pctxt, docElem,
-	    "targetNamespace");
-    }
-
-/* after_doc_loading: */
-    if ((bkt == NULL) && located) {
-	/* Only create a bucket if the schema was located. */
-        bkt = xmlSchemaBucketCreate(pctxt, type,
-	    targetNamespace);
-	if (bkt == NULL)
-	    goto exit_failure;
-    }
-    if (bkt != NULL) {
-	bkt->schemaLocation = schemaLocation;
-	bkt->located = located;
-	if (doc != NULL) {
-	    bkt->doc = doc;
-	    bkt->targetNamespace = targetNamespace;
-	    bkt->origTargetNamespace = targetNamespace;
-	    if (preserveDoc)
-		bkt->preserveDoc = 1;
-	}
-	if (WXS_IS_BUCKET_IMPMAIN(type))
-	    bkt->imported++;
-	    /*
-	    * Add it to the graph of schemas.
-	    */
-	if (relation != NULL)
-	    relation->bucket = bkt;
-    }
-
-exit:
-    /*
-    * Return the bucket explicitely; this is needed for the
-    * main schema.
-    */
-    if (bucket != NULL)
-	*bucket = bkt;
-    return (0);
-
-exit_error:
-    if ((doc != NULL) && (! preserveDoc)) {
-	xmlFreeDoc(doc);
-	if (bkt != NULL)
-	    bkt->doc = NULL;
-    }
-    return(pctxt->err);
-
-exit_failure:
-    if ((doc != NULL) && (! preserveDoc)) {
-	xmlFreeDoc(doc);
-	if (bkt != NULL)
-	    bkt->doc = NULL;
-    }
-    return (-1);
-}
-
-/**
- * xmlSchemaParseImport:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Import definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns 0 in case of success, a positive error code if
- * not valid and -1 in case of an internal error.
- */
-static int
-xmlSchemaParseImport(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
-                     xmlNodePtr node)
-{
-    xmlNodePtr child;
-    const xmlChar *namespaceName = NULL, *schemaLocation = NULL;
-    const xmlChar *thisTargetNamespace;
-    xmlAttrPtr attr;
-    int ret = 0;
-    xmlSchemaBucketPtr bucket = NULL;
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (-1);
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
-		xmlSchemaPIllegalAttrErr(pctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(pctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /*
-    * Extract and validate attributes.
-    */
-    if (xmlSchemaPValAttr(pctxt, NULL, node,
-	"namespace", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-	&namespaceName) != 0) {
-	xmlSchemaPSimpleTypeErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    NULL, node,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-	    NULL, namespaceName, NULL, NULL, NULL);
-	return (pctxt->err);
-    }
-
-    if (xmlSchemaPValAttr(pctxt, NULL, node,
-	"schemaLocation", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-	&schemaLocation) != 0) {
-	xmlSchemaPSimpleTypeErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-	    NULL, node,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-	    NULL, schemaLocation, NULL, NULL, NULL);
-	return (pctxt->err);
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        /*
-         * the annotation here is simply discarded ...
-	 * TODO: really?
-         */
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(pctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?)");
-    }
-    /*
-    * Apply additional constraints.
-    *
-    * Note that it is important to use the original @targetNamespace
-    * (or none at all), to rule out imports of schemas _with_ a
-    * @targetNamespace if the importing schema is a chameleon schema
-    * (with no @targetNamespace).
-    */
-    thisTargetNamespace = WXS_BUCKET(pctxt)->origTargetNamespace;
-    if (namespaceName != NULL) {
-	/*
-	* 1.1 If the namespace [attribute] is present, then its `actual value`
-	* must not match the `actual value` of the enclosing <schema>'s
-	* targetNamespace [attribute].
-	*/
-	if (xmlStrEqual(thisTargetNamespace, namespaceName)) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_SRC_IMPORT_1_1,
-		NULL, node,
-		"The value of the attribute 'namespace' must not match "
-		"the target namespace '%s' of the importing schema",
-		thisTargetNamespace);
-	    return (pctxt->err);
-	}
-    } else {
-	/*
-	* 1.2 If the namespace [attribute] is not present, then the enclosing
-	* <schema> must have a targetNamespace [attribute].
-	*/
-	if (thisTargetNamespace == NULL) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_SRC_IMPORT_1_2,
-		NULL, node,
-		"The attribute 'namespace' must be existent if "
-		"the importing schema has no target namespace",
-		NULL);
-	    return (pctxt->err);
-	}
-    }
-    /*
-    * Locate and acquire the schema document.
-    */
-    if (schemaLocation != NULL)
-	schemaLocation = xmlSchemaBuildAbsoluteURI(pctxt->dict,
-	    schemaLocation, node);
-    ret = xmlSchemaAddSchemaDoc(pctxt, XML_SCHEMA_SCHEMA_IMPORT,
-	schemaLocation, NULL, NULL, 0, node, thisTargetNamespace,
-	namespaceName, &bucket);
-
-    if (ret != 0)
-	return(ret);
-
-    /*
-    * For <import>: "It is *not* an error for the application
-    * schema reference strategy to fail."
-    * So just don't parse if no schema document was found.
-    * Note that we will get no bucket if the schema could not be
-    * located or if there was no schemaLocation.
-    */
-    if ((bucket == NULL) && (schemaLocation != NULL)) {
-	xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-	    XML_SCHEMAP_WARN_UNLOCATED_SCHEMA,
-	    node, NULL,
-	    "Failed to locate a schema at location '%s'. "
-	    "Skipping the import", schemaLocation, NULL, NULL);
-    }
-
-    if ((bucket != NULL) && CAN_PARSE_SCHEMA(bucket)) {
-	ret = xmlSchemaParseNewDoc(pctxt, schema, bucket);
-    }
-
-    return (ret);
-}
-
-static int
-xmlSchemaParseIncludeOrRedefineAttrs(xmlSchemaParserCtxtPtr pctxt,
-				     xmlSchemaPtr schema,
-				     xmlNodePtr node,
-				     xmlChar **schemaLocation,
-				     int type)
-{
-    xmlAttrPtr attr;
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL) ||
-	(schemaLocation == NULL))
-        return (-1);
-
-    *schemaLocation = NULL;
-    /*
-    * Check for illegal attributes.
-    * Applies for both <include> and <redefine>.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
-		xmlSchemaPIllegalAttrErr(pctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(pctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
-    /*
-    * Preliminary step, extract the URI-Reference and make an URI
-    * from the base.
-    */
-    /*
-    * Attribute "schemaLocation" is mandatory.
-    */
-    attr = xmlSchemaGetPropNode(node, "schemaLocation");
-    if (attr != NULL) {
-        xmlChar *base = NULL;
-        xmlChar *uri = NULL;
-
-	if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-	    (const xmlChar **) schemaLocation) != 0)
-	    goto exit_error;
-	base = xmlNodeGetBase(node->doc, node);
-	if (base == NULL) {
-	    uri = xmlBuildURI(*schemaLocation, node->doc->URL);
-	} else {
-	    uri = xmlBuildURI(*schemaLocation, base);
-	    xmlFree(base);
-	}
-	if (uri == NULL) {
-	    PERROR_INT("xmlSchemaParseIncludeOrRedefine",
-		"could not build an URI from the schemaLocation")
-	    goto exit_failure;
-	}
-	(*schemaLocation) = (xmlChar *) xmlDictLookup(pctxt->dict, uri, -1);
-	xmlFree(uri);
-    } else {
-	xmlSchemaPMissingAttrErr(pctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "schemaLocation", NULL);
-	goto exit_error;
-    }
-    /*
-    * Report self-inclusion and self-redefinition.
-    */
-    if (xmlStrEqual(*schemaLocation, pctxt->URL)) {
-	if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_SRC_REDEFINE,
-		NULL, node,
-		"The schema document '%s' cannot redefine itself.",
-		*schemaLocation);
-	} else {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_SRC_INCLUDE,
-		NULL, node,
-		"The schema document '%s' cannot include itself.",
-		*schemaLocation);
-	}
-	goto exit_error;
-    }
-
-    return(0);
-exit_error:
-    return(pctxt->err);
-exit_failure:
-    return(-1);
-}
-
-static int
-xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
-				xmlSchemaPtr schema,
-				xmlNodePtr node,
-				int type)
-{
-    xmlNodePtr child = NULL;
-    const xmlChar *schemaLocation = NULL;
-    int res = 0; /* hasRedefinitions = 0 */
-    int isChameleon = 0, wasChameleon = 0;
-    xmlSchemaBucketPtr bucket = NULL;
-
-    if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (-1);
-
-    /*
-    * Parse attributes. Note that the returned schemaLocation will
-    * be already converted to an absolute URI.
-    */
-    res = xmlSchemaParseIncludeOrRedefineAttrs(pctxt, schema,
-	node, (xmlChar **) (&schemaLocation), type);
-    if (res != 0)
-	return(res);
-    /*
-    * Load and add the schema document.
-    */
-    res = xmlSchemaAddSchemaDoc(pctxt, type, schemaLocation, NULL,
-	NULL, 0, node, pctxt->targetNamespace, NULL, &bucket);
-    if (res != 0)
-	return(res);
-    /*
-    * If we get no schema bucket back, then this means that the schema
-    * document could not be located or was broken XML or was not
-    * a schema document.
-    */
-    if ((bucket == NULL) || (bucket->doc == NULL)) {
-	if (type == XML_SCHEMA_SCHEMA_INCLUDE) {
-	    /*
-	    * WARNING for <include>:
-	    * We will raise an error if the schema cannot be located
-	    * for inclusions, since the that was the feedback from the
-	    * schema people. I.e. the following spec piece will *not* be
-	    * satisfied:
-	    * SPEC src-include: "It is not an error for the `actual value` of the
-	    * schemaLocation [attribute] to fail to resolve it all, in which
-	    * case no corresponding inclusion is performed.
-	    * So do we need a warning report here?"
-	    */
-	    res = XML_SCHEMAP_SRC_INCLUDE;
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
-		node, NULL,
-		"Failed to load the document '%s' for inclusion",
-		schemaLocation, NULL);
-	} else {
-	    /*
-	    * NOTE: This was changed to raise an error even if no redefinitions
-	    * are specified.
-	    *
-	    * SPEC src-redefine (1)
-	    * "If there are any element information items among the [children]
-	    * other than <annotation> then the `actual value` of the
-	    * schemaLocation [attribute] must successfully resolve."
-	    * TODO: Ask the WG if a the location has always to resolve
-	    * here as well!
-	    */
-	    res = XML_SCHEMAP_SRC_REDEFINE;
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
-		node, NULL,
-		"Failed to load the document '%s' for redefinition",
-		schemaLocation, NULL);
-	}
-    } else {
-	/*
-	* Check targetNamespace sanity before parsing the new schema.
-	* TODO: Note that we won't check further content if the
-	* targetNamespace was bad.
-	*/
-	if (bucket->origTargetNamespace != NULL) {
-	    /*
-	    * SPEC src-include (2.1)
-	    * "SII has a targetNamespace [attribute], and its `actual
-	    * value` is identical to the `actual value` of the targetNamespace
-	    * [attribute] of SII' (which must have such an [attribute])."
-	    */
-	    if (pctxt->targetNamespace == NULL) {
-		xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_SRC_INCLUDE,
-		    node, NULL,
-		    "The target namespace of the included/redefined schema "
-		    "'%s' has to be absent, since the including/redefining "
-		    "schema has no target namespace",
-		    schemaLocation, NULL);
-		goto exit_error;
-	    } else if (!xmlStrEqual(bucket->origTargetNamespace,
-		pctxt->targetNamespace)) {
-		/* TODO: Change error function. */
-		xmlSchemaPCustomErrExt(pctxt,
-		    XML_SCHEMAP_SRC_INCLUDE,
-		    NULL, node,
-		    "The target namespace '%s' of the included/redefined "
-		    "schema '%s' differs from '%s' of the "
-		    "including/redefining schema",
-		    bucket->origTargetNamespace, schemaLocation,
-		    pctxt->targetNamespace);
-		goto exit_error;
-	    }
-	} else if (pctxt->targetNamespace != NULL) {
-	    /*
-	    * Chameleons: the original target namespace will
-	    * differ from the resulting namespace.
-	    */
-	    isChameleon = 1;
-	    if (bucket->parsed &&
-		bucket->origTargetNamespace != NULL) {
-		xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_SRC_INCLUDE,
-		    node, NULL,
-		    "The target namespace of the included/redefined schema "
-		    "'%s' has to be absent or the same as the "
-		    "including/redefining schema's target namespace",
-		    schemaLocation, NULL);
-		goto exit_error;
-	    }
-	    bucket->targetNamespace = pctxt->targetNamespace;
-	}
-    }
-    /*
-    * Parse the schema.
-    */
-    if (bucket && (!bucket->parsed) && (bucket->doc != NULL)) {
-	if (isChameleon) {
-	    /* TODO: Get rid of this flag on the schema itself. */
-	    if ((schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) == 0) {
-		schema->flags |= XML_SCHEMAS_INCLUDING_CONVERT_NS;
-	    } else
-		wasChameleon = 1;
-	}
-	xmlSchemaParseNewDoc(pctxt, schema, bucket);
-	/* Restore chameleon flag. */
-	if (isChameleon && (!wasChameleon))
-	    schema->flags ^= XML_SCHEMAS_INCLUDING_CONVERT_NS;
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
-	/*
-	* Parse (simpleType | complexType | group | attributeGroup))*
-	*/
-	pctxt->redefined = bucket;
-	/*
-	* How to proceed if the redefined schema was not located?
-	*/
-	pctxt->isRedefine = 1;
-	while (IS_SCHEMA(child, "annotation") ||
-	    IS_SCHEMA(child, "simpleType") ||
-	    IS_SCHEMA(child, "complexType") ||
-	    IS_SCHEMA(child, "group") ||
-	    IS_SCHEMA(child, "attributeGroup")) {
-	    if (IS_SCHEMA(child, "annotation")) {
-		/*
-		* TODO: discard or not?
-		*/
-	    } else if (IS_SCHEMA(child, "simpleType")) {
-		xmlSchemaParseSimpleType(pctxt, schema, child, 1);
-	    } else if (IS_SCHEMA(child, "complexType")) {
-		xmlSchemaParseComplexType(pctxt, schema, child, 1);
-		/* hasRedefinitions = 1; */
-	    } else if (IS_SCHEMA(child, "group")) {
-		/* hasRedefinitions = 1; */
-		xmlSchemaParseModelGroupDefinition(pctxt,
-		    schema, child);
-	    } else if (IS_SCHEMA(child, "attributeGroup")) {
-		/* hasRedefinitions = 1; */
-		xmlSchemaParseAttributeGroupDefinition(pctxt, schema,
-		    child);
-	    }
-	    child = child->next;
-	}
-	pctxt->redefined = NULL;
-	pctxt->isRedefine = 0;
-    } else {
-	if (IS_SCHEMA(child, "annotation")) {
-	    /*
-	    * TODO: discard or not?
-	    */
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	res = XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED;
-	if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
-	    xmlSchemaPContentErr(pctxt, res,
-		NULL, node, child, NULL,
-		"(annotation | (simpleType | complexType | group | attributeGroup))*");
-	} else {
-	     xmlSchemaPContentErr(pctxt, res,
-		NULL, node, child, NULL,
-		"(annotation?)");
-	}
-    }
-    return(res);
-
-exit_error:
-    return(pctxt->err);
-}
-
-static int
-xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
-                       xmlNodePtr node)
-{
-    int res;
-#ifndef ENABLE_REDEFINE
-    TODO
-    return(0);
-#endif
-    res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node,
-	XML_SCHEMA_SCHEMA_REDEFINE);
-    if (res != 0)
-	return(res);
-    return(0);
-}
-
-static int
-xmlSchemaParseInclude(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
-                       xmlNodePtr node)
-{
-    int res;
-
-    res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node,
-	XML_SCHEMA_SCHEMA_INCLUDE);
-    if (res != 0)
-	return(res);
-    return(0);
-}
-
-/**
- * xmlSchemaParseModelGroup:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- * @type: the "compositor" type
- * @particleNeeded: if a a model group with a particle
- *
- * parse a XML schema Sequence definition.
- * Applies parts of:
- *   Schema Representation Constraint:
- *     Redefinition Constraints and Semantics (src-redefine)
- *     (6.1), (6.1.1), (6.1.2)
- *
- *   Schema Component Constraint:
- *     All Group Limited (cos-all-limited) (2)
- *     TODO: Actually this should go to component-level checks,
- *     but is done here due to performance. Move it to an other layer
- *     is schema construction via an API is implemented.
- *
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- *         1 in case of success.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-			 xmlNodePtr node, xmlSchemaTypeType type,
-			 int withParticle)
-{
-    xmlSchemaModelGroupPtr item;
-    xmlSchemaParticlePtr particle = NULL;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-    int min = 1, max = 1, isElemRef, hasRefs = 0;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /*
-    * Create a model group with the given compositor.
-    */
-    item = xmlSchemaAddModelGroup(ctxt, schema, type, node);
-    if (item == NULL)
-	return (NULL);
-
-    if (withParticle) {
-	if (type == XML_SCHEMA_TYPE_ALL) {
-	    min = xmlGetMinOccurs(ctxt, node, 0, 1, 1, "(0 | 1)");
-	    max = xmlGetMaxOccurs(ctxt, node, 1, 1, 1, "1");
-	} else {
-	    /* choice + sequence */
-	    min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
-	    max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
-		"(xs:nonNegativeInteger | unbounded)");
-	}
-	xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
-	/*
-	* Create a particle
-	*/
-	particle = xmlSchemaAddParticle(ctxt, node, min, max);
-	if (particle == NULL)
-	    return (NULL);
-	particle->children = (xmlSchemaTreeItemPtr) item;
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
-		    (!xmlStrEqual(attr->name, BAD_CAST "minOccurs"))) {
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-    } else {
-	/*
-	* Check for illegal attributes.
-	*/
-	attr = node->properties;
-	while (attr != NULL) {
-	    if (attr->ns == NULL) {
-		if (!xmlStrEqual(attr->name, BAD_CAST "id")) {
-		    xmlSchemaPIllegalAttrErr(ctxt,
-			XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-	    } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	    attr = attr->next;
-	}
-    }
-
-    /*
-    * Extract and validate attributes.
-    */
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    if (type == XML_SCHEMA_TYPE_ALL) {
-	xmlSchemaParticlePtr part, last = NULL;
-
-	while (IS_SCHEMA(child, "element")) {
-	    part = (xmlSchemaParticlePtr) xmlSchemaParseElement(ctxt,
-		schema, child, &isElemRef, 0);
-	    /*
-	    * SPEC cos-all-limited (2)
-	    * "The {max occurs} of all the particles in the {particles}
-	    * of the ('all') group must be 0 or 1.
-	    */
-	    if (part != NULL) {
-		if (isElemRef)
-		    hasRefs++;
-		if (part->minOccurs > 1) {
-		    xmlSchemaPCustomErr(ctxt,
-			XML_SCHEMAP_COS_ALL_LIMITED,
-			NULL, child,
-			"Invalid value for minOccurs (must be 0 or 1)",
-			NULL);
-		    /* Reset to 1. */
-		    part->minOccurs = 1;
-		}
-		if (part->maxOccurs > 1) {
-		    xmlSchemaPCustomErr(ctxt,
-			XML_SCHEMAP_COS_ALL_LIMITED,
-			NULL, child,
-			"Invalid value for maxOccurs (must be 0 or 1)",
-			NULL);
-		    /* Reset to 1. */
-		    part->maxOccurs = 1;
-		}
-		if (last == NULL)
-		    item->children = (xmlSchemaTreeItemPtr) part;
-		else
-		    last->next = (xmlSchemaTreeItemPtr) part;
-		last = part;
-	    }
-	    child = child->next;
-	}
-	if (child != NULL) {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, (annotation?, element*)");
-	}
-    } else {
-	/* choice + sequence */
-	xmlSchemaTreeItemPtr part = NULL, last = NULL;
-
-	while ((IS_SCHEMA(child, "element")) ||
-	    (IS_SCHEMA(child, "group")) ||
-	    (IS_SCHEMA(child, "any")) ||
-	    (IS_SCHEMA(child, "choice")) ||
-	    (IS_SCHEMA(child, "sequence"))) {
-
-	    if (IS_SCHEMA(child, "element")) {
-		part = (xmlSchemaTreeItemPtr)
-		    xmlSchemaParseElement(ctxt, schema, child, &isElemRef, 0);
-		if (part && isElemRef)
-		    hasRefs++;
-	    } else if (IS_SCHEMA(child, "group")) {
-		part =
-		    xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
-		if (part != NULL)
-		    hasRefs++;
-		/*
-		* Handle redefinitions.
-		*/
-		if (ctxt->isRedefine && ctxt->redef &&
-		    (ctxt->redef->item->type == XML_SCHEMA_TYPE_GROUP) &&
-		    part && part->children)
-		{
-		    if ((xmlSchemaGetQNameRefName(part->children) ==
-			    ctxt->redef->refName) &&
-			(xmlSchemaGetQNameRefTargetNs(part->children) ==
-			    ctxt->redef->refTargetNs))
-		    {
-			/*
-			* SPEC src-redefine:
-			* (6.1) "If it has a <group> among its contents at
-			* some level the `actual value` of whose ref
-			* [attribute] is the same as the `actual value` of
-			* its own name attribute plus target namespace, then
-			* all of the following must be true:"
-			* (6.1.1) "It must have exactly one such group."
-			*/
-			if (ctxt->redefCounter != 0) {
-			    xmlChar *str = NULL;
-
-			    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-				XML_SCHEMAP_SRC_REDEFINE, child, NULL,
-				"The redefining model group definition "
-				"'%s' must not contain more than one "
-				"reference to the redefined definition",
-				xmlSchemaFormatQName(&str,
-				    ctxt->redef->refTargetNs,
-				    ctxt->redef->refName),
-				NULL);
-			    FREE_AND_NULL(str)
-			    part = NULL;
-			} else if (((WXS_PARTICLE(part))->minOccurs != 1) ||
-			    ((WXS_PARTICLE(part))->maxOccurs != 1))
-			{
-			    xmlChar *str = NULL;
-			    /*
-			    * SPEC src-redefine:
-			    * (6.1.2) "The `actual value` of both that
-			    * group's minOccurs and maxOccurs [attribute]
-			    * must be 1 (or `absent`).
-			    */
-			    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-				XML_SCHEMAP_SRC_REDEFINE, child, NULL,
-				"The redefining model group definition "
-				"'%s' must not contain a reference to the "
-				"redefined definition with a "
-				"maxOccurs/minOccurs other than 1",
-				xmlSchemaFormatQName(&str,
-				    ctxt->redef->refTargetNs,
-				    ctxt->redef->refName),
-				NULL);
-			    FREE_AND_NULL(str)
-			    part = NULL;
-			}
-			ctxt->redef->reference = WXS_BASIC_CAST part;
-			ctxt->redefCounter++;
-		    }
-		}
-	    } else if (IS_SCHEMA(child, "any")) {
-		part = (xmlSchemaTreeItemPtr)
-		    xmlSchemaParseAny(ctxt, schema, child);
-	    } else if (IS_SCHEMA(child, "choice")) {
-		part = xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_CHOICE, 1);
-	    } else if (IS_SCHEMA(child, "sequence")) {
-		part = xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_SEQUENCE, 1);
-	    }
-	    if (part != NULL) {
-		if (last == NULL)
-		    item->children = part;
-		else
-		    last->next = part;
-		last = part;
-	    }
-	    child = child->next;
-	}
-	if (child != NULL) {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, (element | group | choice | sequence | any)*)");
-	}
-    }
-    if ((max == 0) && (min == 0))
-	return (NULL);
-    if (hasRefs) {
-	/*
-	* We need to resolve references.
-	*/
-	WXS_ADD_PENDING(ctxt, item);
-    }
-    if (withParticle)
-	return ((xmlSchemaTreeItemPtr) particle);
-    else
-	return ((xmlSchemaTreeItemPtr) item);
-}
-
-/**
- * xmlSchemaParseRestriction:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Restriction definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                          xmlNodePtr node, xmlSchemaTypeType parentType)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "base"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    /*
-    * Extract and validate attributes.
-    */
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-    /*
-    * Attribute
-    */
-    /*
-    * Extract the base type. The "base" attribute is mandatory if inside
-    * a complex type or if redefining.
-    *
-    * SPEC (1.2) "...otherwise (<restriction> has no <simpleType> "
-    * among its [children]), the simple type definition which is
-    * the {content type} of the type definition `resolved` to by
-    * the `actual value` of the base [attribute]"
-    */
-    if (xmlSchemaPValAttrQName(ctxt, schema, NULL, node, "base",
-	&(type->baseNs), &(type->base)) == 0)
-    {
-	if ((type->base == NULL) && (type->type == XML_SCHEMA_TYPE_COMPLEX)) {
-	    xmlSchemaPMissingAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_MISSING,
-		NULL, node, "base", NULL);
-	} else if ((ctxt->isRedefine) &&
-	    (type->flags & XML_SCHEMAS_TYPE_GLOBAL))
-	{
-	    if (type->base == NULL) {
-		xmlSchemaPMissingAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_MISSING,
-		    NULL, node, "base", NULL);
-	    } else if ((! xmlStrEqual(type->base, type->name)) ||
-		(! xmlStrEqual(type->baseNs, type->targetNamespace)))
-	    {
-		xmlChar *str1 = NULL, *str2 = NULL;
-		/*
-		* REDEFINE: SPEC src-redefine (5)
-		* "Within the [children], each <simpleType> must have a
-		* <restriction> among its [children] ... the `actual value` of
-		* whose base [attribute] must be the same as the `actual value`
-		* of its own name attribute plus target namespace;"
-		*/
-		xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE,
-		    NULL, node, "This is a redefinition, but the QName "
-		    "value '%s' of the 'base' attribute does not match the "
-		    "type's designation '%s'",
-		    xmlSchemaFormatQName(&str1, type->baseNs, type->base),
-		    xmlSchemaFormatQName(&str2, type->targetNamespace,
-			type->name), NULL);
-		FREE_AND_NULL(str1);
-		FREE_AND_NULL(str2);
-		/* Avoid confusion and erase the values. */
-		type->base = NULL;
-		type->baseNs = NULL;
-	    }
-	}
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the simple type ancestor.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (parentType == XML_SCHEMA_TYPE_SIMPLE) {
-	/*
-	* Corresponds to <simpleType><restriction><simpleType>.
-	*/
-	if (IS_SCHEMA(child, "simpleType")) {
-	    if (type->base != NULL) {
-		/*
-		* src-restriction-base-or-simpleType
-		* Either the base [attribute] or the simpleType [child] of the
-		* <restriction> element must be present, but not both.
-		*/
-		xmlSchemaPContentErr(ctxt,
-		    XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE,
-		    NULL, node, child,
-		    "The attribute 'base' and the <simpleType> child are "
-		    "mutually exclusive", NULL);
-	    } else {
-		type->baseType = (xmlSchemaTypePtr)
-		    xmlSchemaParseSimpleType(ctxt, schema, child, 0);
-	    }
-	    child = child->next;
-	} else if (type->base == NULL) {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE,
-		NULL, node, child,
-		"Either the attribute 'base' or a <simpleType> child "
-		"must be present", NULL);
-	}
-    } else if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
-	/*
-	* Corresponds to <complexType><complexContent><restriction>...
-	* followed by:
-	*
-	* Model groups <all>, <choice> and <sequence>.
-	*/
-	if (IS_SCHEMA(child, "all")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_ALL, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "choice")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt,
-		    schema, child, XML_SCHEMA_TYPE_CHOICE, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "sequence")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_SEQUENCE, 1);
-	    child = child->next;
-	/*
-	* Model group reference <group>.
-	*/
-	} else if (IS_SCHEMA(child, "group")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
-	    /*
-	    * Note that the reference will be resolved in
-	    * xmlSchemaResolveTypeReferences();
-	    */
-	    child = child->next;
-	}
-    } else if (parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT) {
-	/*
-	* Corresponds to <complexType><simpleContent><restriction>...
-	*
-	* "1.1 the simple type definition corresponding to the <simpleType>
-	* among the [children] of <restriction> if there is one;"
-	*/
-	if (IS_SCHEMA(child, "simpleType")) {
-	    /*
-	    * We will store the to-be-restricted simple type in
-	    * type->contentTypeDef *temporarily*.
-	    */
-	    type->contentTypeDef = (xmlSchemaTypePtr)
-		xmlSchemaParseSimpleType(ctxt, schema, child, 0);
-	    if ( type->contentTypeDef == NULL)
-		return (NULL);
-	    child = child->next;
-	}
-    }
-
-    if ((parentType == XML_SCHEMA_TYPE_SIMPLE) ||
-	(parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT)) {
-	xmlSchemaFacetPtr facet, lastfacet = NULL;
-	/*
-	* Corresponds to <complexType><simpleContent><restriction>...
-	* <simpleType><restriction>...
-	*/
-
-	/*
-	* Add the facets to the simple type ancestor.
-	*/
-	/*
-	* TODO: Datatypes: 4.1.3 Constraints on XML Representation of
-	* Simple Type Definition Schema Representation Constraint:
-	* *Single Facet Value*
-	*/
-	while ((IS_SCHEMA(child, "minInclusive")) ||
-	    (IS_SCHEMA(child, "minExclusive")) ||
-	    (IS_SCHEMA(child, "maxInclusive")) ||
-	    (IS_SCHEMA(child, "maxExclusive")) ||
-	    (IS_SCHEMA(child, "totalDigits")) ||
-	    (IS_SCHEMA(child, "fractionDigits")) ||
-	    (IS_SCHEMA(child, "pattern")) ||
-	    (IS_SCHEMA(child, "enumeration")) ||
-	    (IS_SCHEMA(child, "whiteSpace")) ||
-	    (IS_SCHEMA(child, "length")) ||
-	    (IS_SCHEMA(child, "maxLength")) ||
-	    (IS_SCHEMA(child, "minLength"))) {
-	    facet = xmlSchemaParseFacet(ctxt, schema, child);
-	    if (facet != NULL) {
-		if (lastfacet == NULL)
-		    type->facets = facet;
-		else
-		    lastfacet->next = facet;
-		lastfacet = facet;
-		lastfacet->next = NULL;
-	    }
-	    child = child->next;
-	}
-	/*
-	* Create links for derivation and validation.
-	*/
-	if (type->facets != NULL) {
-	    xmlSchemaFacetLinkPtr facetLink, lastFacetLink = NULL;
-
-	    facet = type->facets;
-	    do {
-		facetLink = (xmlSchemaFacetLinkPtr)
-		    xmlMalloc(sizeof(xmlSchemaFacetLink));
-		if (facetLink == NULL) {
-		    xmlSchemaPErrMemory(ctxt, "allocating a facet link", NULL);
-		    xmlFree(facetLink);
-		    return (NULL);
-		}
-		facetLink->facet = facet;
-		facetLink->next = NULL;
-		if (lastFacetLink == NULL)
-		    type->facetSet = facetLink;
-		else
-		    lastFacetLink->next = facetLink;
-		lastFacetLink = facetLink;
-		facet = facet->next;
-	    } while (facet != NULL);
-	}
-    }
-    if (type->type == XML_SCHEMA_TYPE_COMPLEX) {
-	/*
-	* Attribute uses/declarations.
-	*/
-	if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
-	    (xmlSchemaItemListPtr *) &(type->attrUses),
-	    XML_SCHEMA_TYPE_RESTRICTION, NULL) == -1)
-	    return(NULL);
-	/*
-	* Attribute wildcard.
-	*/
-	if (IS_SCHEMA(child, "anyAttribute")) {
-	    type->attributeWildcard =
-		xmlSchemaParseAnyAttribute(ctxt, schema, child);
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"annotation?, (group | all | choice | sequence)?, "
-		"((attribute | attributeGroup)*, anyAttribute?))");
-	} else if (parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT) {
-	     xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, (simpleType?, (minExclusive | minInclusive | "
-		"maxExclusive | maxInclusive | totalDigits | fractionDigits | "
-		"length | minLength | maxLength | enumeration | whiteSpace | "
-		"pattern)*)?, ((attribute | attributeGroup)*, anyAttribute?))");
-	} else {
-	    /* Simple type */
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, (simpleType?, (minExclusive | minInclusive | "
-		"maxExclusive | maxInclusive | totalDigits | fractionDigits | "
-		"length | minLength | maxLength | enumeration | whiteSpace | "
-		"pattern)*))");
-	}
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaParseExtension:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * Parses an <extension>, which is found inside a
- * <simpleContent> or <complexContent>.
- * *WARNING* this interface is highly subject to change.
- *
- * TODO: Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseExtension(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                        xmlNodePtr node, xmlSchemaTypeType parentType)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION;
-
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "base"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
-    /*
-    * Attribute "base" - mandatory.
-    */
-    if ((xmlSchemaPValAttrQName(ctxt, schema, NULL, node,
-	"base", &(type->baseNs), &(type->base)) == 0) &&
-	(type->base == NULL)) {
-	xmlSchemaPMissingAttrErr(ctxt,
-	    XML_SCHEMAP_S4S_ATTR_MISSING,
-	    NULL, node, "base", NULL);
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the type ancestor.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
-	/*
-	* Corresponds to <complexType><complexContent><extension>... and:
-	*
-	* Model groups <all>, <choice>, <sequence> and <group>.
-	*/
-	if (IS_SCHEMA(child, "all")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema,
-		    child, XML_SCHEMA_TYPE_ALL, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "choice")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema,
-		    child, XML_SCHEMA_TYPE_CHOICE, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "sequence")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema,
-		child, XML_SCHEMA_TYPE_SEQUENCE, 1);
-	    child = child->next;
-	} else if (IS_SCHEMA(child, "group")) {
-	    type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
-	    /*
-	    * Note that the reference will be resolved in
-	    * xmlSchemaResolveTypeReferences();
-	    */
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	/*
-	* Attribute uses/declarations.
-	*/
-	if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
-	    (xmlSchemaItemListPtr *) &(type->attrUses),
-	    XML_SCHEMA_TYPE_EXTENSION, NULL) == -1)
-	    return(NULL);
-	/*
-	* Attribute wildcard.
-	*/
-	if (IS_SCHEMA(child, "anyAttribute")) {
-	    ctxt->ctxtType->attributeWildcard =
-		xmlSchemaParseAnyAttribute(ctxt, schema, child);
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
-	    /* Complex content extension. */
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, ((group | all | choice | sequence)?, "
-		"((attribute | attributeGroup)*, anyAttribute?)))");
-	} else {
-	    /* Simple content extension. */
-	    xmlSchemaPContentErr(ctxt,
-		XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-		NULL, node, child, NULL,
-		"(annotation?, ((attribute | attributeGroup)*, "
-		"anyAttribute?))");
-	}
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaParseSimpleContent:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema SimpleContent definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static int
-xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
-                            xmlSchemaPtr schema, xmlNodePtr node,
-			    int *hasRestrictionOrExtension)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
-	(hasRestrictionOrExtension == NULL))
-        return (-1);
-    *hasRestrictionOrExtension = 0;
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id"))) {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the complex type ancestor.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_MISSING,
-	    NULL, node, NULL, NULL,
-	    "(annotation?, (restriction | extension))");
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_MISSING,
-	    NULL, node, NULL, NULL,
-	    "(annotation?, (restriction | extension))");
-    }
-    if (IS_SCHEMA(child, "restriction")) {
-        xmlSchemaParseRestriction(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_SIMPLE_CONTENT);
-	(*hasRestrictionOrExtension) = 1;
-        child = child->next;
-    } else if (IS_SCHEMA(child, "extension")) {
-        xmlSchemaParseExtension(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_SIMPLE_CONTENT);
-	(*hasRestrictionOrExtension) = 1;
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child, NULL,
-	    "(annotation?, (restriction | extension))");
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaParseComplexContent:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema ComplexContent definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static int
-xmlSchemaParseComplexContent(xmlSchemaParserCtxtPtr ctxt,
-                             xmlSchemaPtr schema, xmlNodePtr node,
-			     int *hasRestrictionOrExtension)
-{
-    xmlSchemaTypePtr type;
-    xmlNodePtr child = NULL;
-    xmlAttrPtr attr;
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
-	(hasRestrictionOrExtension == NULL))
-        return (-1);
-    *hasRestrictionOrExtension = 0;
-    /* Not a component, don't create it. */
-    type = ctxt->ctxtType;
-    /*
-    * Check for illegal attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
-		(!xmlStrEqual(attr->name, BAD_CAST "mixed")))
-	    {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-
-    xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
-    /*
-    * Set the 'mixed' on the complex type ancestor.
-    */
-    if (xmlGetBooleanProp(ctxt, node, "mixed", 0))  {
-	if ((type->flags & XML_SCHEMAS_TYPE_MIXED) == 0)
-	    type->flags |= XML_SCHEMAS_TYPE_MIXED;
-    }
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-	/*
-	* Add the annotation to the complex type ancestor.
-	*/
-	xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
-	    xmlSchemaParseAnnotation(ctxt, child, 1));
-        child = child->next;
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_MISSING,
-	    NULL, node, NULL,
-	    NULL, "(annotation?, (restriction | extension))");
-    }
-    if (child == NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_MISSING,
-	    NULL, node, NULL,
-	    NULL, "(annotation?, (restriction | extension))");
-    }
-    if (IS_SCHEMA(child, "restriction")) {
-        xmlSchemaParseRestriction(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_COMPLEX_CONTENT);
-	(*hasRestrictionOrExtension) = 1;
-        child = child->next;
-    } else if (IS_SCHEMA(child, "extension")) {
-        xmlSchemaParseExtension(ctxt, schema, child,
-	    XML_SCHEMA_TYPE_COMPLEX_CONTENT);
-	(*hasRestrictionOrExtension) = 1;
-        child = child->next;
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?, (restriction | extension))");
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaParseComplexType:
- * @ctxt:  a schema validation context
- * @schema:  the schema being built
- * @node:  a subtree containing XML Schema informations
- *
- * parse a XML schema Complex Type definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                          xmlNodePtr node, int topLevel)
-{
-    xmlSchemaTypePtr type, ctxtType;
-    xmlNodePtr child = NULL;
-    const xmlChar *name = NULL;
-    xmlAttrPtr attr;
-    const xmlChar *attrValue;
-#ifdef ENABLE_NAMED_LOCALS
-    char buf[40];
-#endif
-    int final = 0, block = 0, hasRestrictionOrExtension = 0;
-
-
-    if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
-        return (NULL);
-
-    ctxtType = ctxt->ctxtType;
-
-    if (topLevel) {
-	attr = xmlSchemaGetPropNode(node, "name");
-	if (attr == NULL) {
-	    xmlSchemaPMissingAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_MISSING, NULL, node, "name", NULL);
-	    return (NULL);
-	} else if (xmlSchemaPValAttrNode(ctxt, NULL, attr,
-	    xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
-	    return (NULL);
-	}
-    }
-
-    if (topLevel == 0) {
-	/*
-	* Parse as local complex type definition.
-	*/
-#ifdef ENABLE_NAMED_LOCALS
-        snprintf(buf, 39, "#CT%d", ctxt->counter++ + 1);
-	type = xmlSchemaAddType(ctxt, schema,
-	    XML_SCHEMA_TYPE_COMPLEX,
-	    xmlDictLookup(ctxt->dict, (const xmlChar *)buf, -1),
-	    ctxt->targetNamespace, node, 0);
-#else
-	type = xmlSchemaAddType(ctxt, schema,
-	    XML_SCHEMA_TYPE_COMPLEX,
-	    NULL, ctxt->targetNamespace, node, 0);
-#endif
-	if (type == NULL)
-	    return (NULL);
-	name = type->name;
-	type->node = node;
-	type->type = XML_SCHEMA_TYPE_COMPLEX;
-	/*
-	* TODO: We need the target namespace.
-	*/
-    } else {
-	/*
-	* Parse as global complex type definition.
-	*/
-	type = xmlSchemaAddType(ctxt, schema,
-	    XML_SCHEMA_TYPE_COMPLEX,
-	    name, ctxt->targetNamespace, node, 1);
-	if (type == NULL)
-	    return (NULL);
-	type->node = node;
-	type->type = XML_SCHEMA_TYPE_COMPLEX;
-	type->flags |= XML_SCHEMAS_TYPE_GLOBAL;
-    }
-    type->targetNamespace = ctxt->targetNamespace;
-    /*
-    * Handle attributes.
-    */
-    attr = node->properties;
-    while (attr != NULL) {
-	if (attr->ns == NULL) {
-	    if (xmlStrEqual(attr->name, BAD_CAST "id")) {
-		/*
-		* Attribute "id".
-		*/
-		xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-	    } else if (xmlStrEqual(attr->name, BAD_CAST "mixed")) {
-		/*
-		* Attribute "mixed".
-		*/
-		if (xmlSchemaPGetBoolNodeValue(ctxt,
-			NULL, (xmlNodePtr) attr))
-		    type->flags |= XML_SCHEMAS_TYPE_MIXED;
-	    } else if (topLevel) {
-		/*
-		* Attributes of global complex type definitions.
-		*/
-		if (xmlStrEqual(attr->name, BAD_CAST "name")) {
-		    /* Pass. */
-		} else if (xmlStrEqual(attr->name, BAD_CAST "abstract")) {
-		    /*
-		    * Attribute "abstract".
-		    */
-		    if (xmlSchemaPGetBoolNodeValue(ctxt,
-			    NULL, (xmlNodePtr) attr))
-			type->flags |= XML_SCHEMAS_TYPE_ABSTRACT;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "final")) {
-		    /*
-		    * Attribute "final".
-		    */
-		    attrValue = xmlSchemaGetNodeContent(ctxt,
-			(xmlNodePtr) attr);
-		    if (xmlSchemaPValAttrBlockFinal(attrValue,
-			&(type->flags),
-			-1,
-			XML_SCHEMAS_TYPE_FINAL_EXTENSION,
-			XML_SCHEMAS_TYPE_FINAL_RESTRICTION,
-			-1, -1, -1) != 0)
-		    {
-			xmlSchemaPSimpleTypeErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-			    NULL, (xmlNodePtr) attr, NULL,
-			    "(#all | List of (extension | restriction))",
-			    attrValue, NULL, NULL, NULL);
-		    } else
-			final = 1;
-		} else if (xmlStrEqual(attr->name, BAD_CAST "block")) {
-		    /*
-		    * Attribute "block".
-		    */
-		    attrValue = xmlSchemaGetNodeContent(ctxt,
-			(xmlNodePtr) attr);
-		    if (xmlSchemaPValAttrBlockFinal(attrValue, &(type->flags),
-			-1,
-			XML_SCHEMAS_TYPE_BLOCK_EXTENSION,
-			XML_SCHEMAS_TYPE_BLOCK_RESTRICTION,
-			-1, -1, -1) != 0) {
-			xmlSchemaPSimpleTypeErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
-			    NULL, (xmlNodePtr) attr, NULL,
-			    "(#all | List of (extension | restriction)) ",
-			    attrValue, NULL, NULL, NULL);
-		    } else
-			block = 1;
-		} else {
-			xmlSchemaPIllegalAttrErr(ctxt,
-			    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-		}
-	    } else {
-		xmlSchemaPIllegalAttrErr(ctxt,
-		    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	    }
-	} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-	    xmlSchemaPIllegalAttrErr(ctxt,
-		XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-	}
-	attr = attr->next;
-    }
-    if (! block) {
-	/*
-	* Apply default "block" values.
-	*/
-	if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
-	    type->flags |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
-	if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
-	    type->flags |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
-    }
-    if (! final) {
-	/*
-	* Apply default "block" values.
-	*/
-	if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
-	    type->flags |= XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
-	if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
-	    type->flags |= XML_SCHEMAS_TYPE_FINAL_EXTENSION;
-    }
-    /*
-    * And now for the children...
-    */
-    child = node->children;
-    if (IS_SCHEMA(child, "annotation")) {
-        type->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
-        child = child->next;
-    }
-    ctxt->ctxtType = type;
-    if (IS_SCHEMA(child, "simpleContent")) {
-	/*
-	* <complexType><simpleContent>...
-	* 3.4.3 : 2.2
-	* Specifying mixed='true' when the <simpleContent>
-	* alternative is chosen has no effect
-	*/
-	if (type->flags & XML_SCHEMAS_TYPE_MIXED)
-	    type->flags ^= XML_SCHEMAS_TYPE_MIXED;
-        xmlSchemaParseSimpleContent(ctxt, schema, child,
-	    &hasRestrictionOrExtension);
-        child = child->next;
-    } else if (IS_SCHEMA(child, "complexContent")) {
-	/*
-	* <complexType><complexContent>...
-	*/
-	type->contentType = XML_SCHEMA_CONTENT_EMPTY;
-        xmlSchemaParseComplexContent(ctxt, schema, child,
-	    &hasRestrictionOrExtension);
-        child = child->next;
-    } else {
-	/*
-	* E.g <complexType><sequence>... or <complexType><attribute>... etc.
-	*
-	* SPEC
-	* "...the third alternative (neither <simpleContent> nor
-	* <complexContent>) is chosen. This case is understood as shorthand
-	* for complex content restricting the `ur-type definition`, and the
-	* details of the mappings should be modified as necessary.
-	*/
-	type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
-	type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
-	/*
-	* Parse model groups.
-	*/
-        if (IS_SCHEMA(child, "all")) {
-            type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_ALL, 1);
-            child = child->next;
-        } else if (IS_SCHEMA(child, "choice")) {
-            type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_CHOICE, 1);
-            child = child->next;
-        } else if (IS_SCHEMA(child, "sequence")) {
-            type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroup(ctxt, schema, child,
-		    XML_SCHEMA_TYPE_SEQUENCE, 1);
-            child = child->next;
-        } else if (IS_SCHEMA(child, "group")) {
-            type->subtypes = (xmlSchemaTypePtr)
-		xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
-	    /*
-	    * Note that the reference will be resolved in
-	    * xmlSchemaResolveTypeReferences();
-	    */
-            child = child->next;
-        }
-	/*
-	* Parse attribute decls/refs.
-	*/
-        if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
-	    (xmlSchemaItemListPtr *) &(type->attrUses),
-	    XML_SCHEMA_TYPE_RESTRICTION, NULL) == -1)
-	    return(NULL);
-	/*
-	* Parse attribute wildcard.
-	*/
-	if (IS_SCHEMA(child, "anyAttribute")) {
-	    type->attributeWildcard = xmlSchemaParseAnyAttribute(ctxt, schema, child);
-	    child = child->next;
-	}
-    }
-    if (child != NULL) {
-	xmlSchemaPContentErr(ctxt,
-	    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
-	    NULL, node, child,
-	    NULL, "(annotation?, (simpleContent | complexContent | "
-	    "((group | all | choice | sequence)?, ((attribute | "
-	    "attributeGroup)*, anyAttribute?))))");
-    }
-    /*
-    * REDEFINE: SPEC src-redefine (5)
-    */
-    if (topLevel && ctxt->isRedefine && (! hasRestrictionOrExtension)) {
-	xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
-	    NULL, node, "This is a redefinition, thus the "
-	    "<complexType> must have a <restriction> or <extension> "
-	    "grand-child", NULL);
-    }
-    ctxt->ctxtType = ctxtType;
-    return (type);
-}
-
-/************************************************************************
- *									*
- *			Validating using Schemas			*
- *									*
- ************************************************************************/
-
-/************************************************************************
- *									*
- *			Reading/Writing Schemas				*
- *									*
- ************************************************************************/
-
-#if 0 /* Will be enabled if it is clear what options are needed. */
-/**
- * xmlSchemaParserCtxtSetOptions:
- * @ctxt:	a schema parser context
- * @options: a combination of xmlSchemaParserOption
- *
- * Sets the options to be used during the parse.
- *
- * Returns 0 in case of success, -1 in case of an
- * API error.
- */
-static int
-xmlSchemaParserCtxtSetOptions(xmlSchemaParserCtxtPtr ctxt,
-			      int options)
-
-{
-    int i;
-
-    if (ctxt == NULL)
-	return (-1);
-    /*
-    * WARNING: Change the start value if adding to the
-    * xmlSchemaParseOption.
-    */
-    for (i = 1; i < (int) sizeof(int) * 8; i++) {
-        if (options & 1<<i) {
-	    return (-1);
-        }
-    }
-    ctxt->options = options;
-    return (0);
-}
-
-/**
- * xmlSchemaValidCtxtGetOptions:
- * @ctxt: a schema parser context
- *
- * Returns the option combination of the parser context.
- */
-static int
-xmlSchemaParserCtxtGetOptions(xmlSchemaParserCtxtPtr ctxt)
-
-{
-    if (ctxt == NULL)
-	return (-1);
-    else
-	return (ctxt->options);
-}
-#endif
-
-/**
- * xmlSchemaNewParserCtxt:
- * @URL:  the location of the schema
- *
- * Create an XML Schemas parse context for that file/resource expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewParserCtxt(const char *URL)
-{
-    xmlSchemaParserCtxtPtr ret;
-
-    if (URL == NULL)
-        return (NULL);
-
-    ret = xmlSchemaParserCtxtCreate();
-    if (ret == NULL)
-	return(NULL);
-    ret->dict = xmlDictCreate();
-    ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
-    return (ret);
-}
-
-/**
- * xmlSchemaNewMemParserCtxt:
- * @buffer:  a pointer to a char array containing the schemas
- * @size:  the size of the array
- *
- * Create an XML Schemas parse context for that memory buffer expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewMemParserCtxt(const char *buffer, int size)
-{
-    xmlSchemaParserCtxtPtr ret;
-
-    if ((buffer == NULL) || (size <= 0))
-        return (NULL);
-    ret = xmlSchemaParserCtxtCreate();
-    if (ret == NULL)
-	return(NULL);
-    ret->buffer = buffer;
-    ret->size = size;
-    ret->dict = xmlDictCreate();
-    return (ret);
-}
-
-/**
- * xmlSchemaNewDocParserCtxt:
- * @doc:  a preparsed document tree
- *
- * Create an XML Schemas parse context for that document.
- * NB. The document may be modified during the parsing process.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewDocParserCtxt(xmlDocPtr doc)
-{
-    xmlSchemaParserCtxtPtr ret;
-
-    if (doc == NULL)
-      return (NULL);
-    ret = xmlSchemaParserCtxtCreate();
-    if (ret == NULL)
-	return(NULL);
-    ret->doc = doc;
-    ret->dict = xmlDictCreate();
-    /* The application has responsibility for the document */
-    ret->preserve = 1;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaFreeParserCtxt:
- * @ctxt:  the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlSchemaFreeParserCtxt(xmlSchemaParserCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->doc != NULL && !ctxt->preserve)
-        xmlFreeDoc(ctxt->doc);
-    if (ctxt->vctxt != NULL) {
-	xmlSchemaFreeValidCtxt(ctxt->vctxt);
-    }
-    if (ctxt->ownsConstructor && (ctxt->constructor != NULL)) {
-	xmlSchemaConstructionCtxtFree(ctxt->constructor);
-	ctxt->constructor = NULL;
-	ctxt->ownsConstructor = 0;
-    }
-    if (ctxt->attrProhibs != NULL)
-	xmlSchemaItemListFree(ctxt->attrProhibs);
-    xmlDictFree(ctxt->dict);
-    xmlFree(ctxt);
-}
-
-/************************************************************************
- *									*
- *			Building the content models			*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaBuildContentModelForSubstGroup:
- *
- * Returns 1 if nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
-	xmlSchemaParticlePtr particle, int counter, xmlAutomataStatePtr end)
-{
-    xmlAutomataStatePtr start, tmp;
-    xmlSchemaElementPtr elemDecl, member;
-    xmlSchemaSubstGroupPtr substGroup;
-    int i;
-    int ret = 0;
-
-    elemDecl = (xmlSchemaElementPtr) particle->children;
-    /*
-    * Wrap the substitution group with a CHOICE.
-    */
-    start = pctxt->state;
-    if (end == NULL)
-	end = xmlAutomataNewState(pctxt->am);
-    substGroup = xmlSchemaSubstGroupGet(pctxt, elemDecl);
-    if (substGroup == NULL) {
-	xmlSchemaPErr(pctxt, WXS_ITEM_NODE(particle),
-	    XML_SCHEMAP_INTERNAL,
-	    "Internal error: xmlSchemaBuildContentModelForSubstGroup, "
-	    "declaration is marked having a subst. group but none "
-	    "available.\n", elemDecl->name, NULL);
-	return(0);
-    }
-    if (counter >= 0) {
-	/*
-	* NOTE that we put the declaration in, even if it's abstract.
-	* However, an error will be raised during *validation* if an element
-	* information item shall be validated against an abstract element
-	* declaration.
-	*/
-	tmp = xmlAutomataNewCountedTrans(pctxt->am, start, NULL, counter);
-        xmlAutomataNewTransition2(pctxt->am, tmp, end,
-	            elemDecl->name, elemDecl->targetNamespace, elemDecl);
-	/*
-	* Add subst. group members.
-	*/
-	for (i = 0; i < substGroup->members->nbItems; i++) {
-	    member = (xmlSchemaElementPtr) substGroup->members->items[i];
-            xmlAutomataNewTransition2(pctxt->am, tmp, end,
-		               member->name, member->targetNamespace, member);
-	}
-    } else if (particle->maxOccurs == 1) {
-	/*
-	* NOTE that we put the declaration in, even if it's abstract,
-	*/
-	xmlAutomataNewEpsilon(pctxt->am,
-	    xmlAutomataNewTransition2(pctxt->am,
-	    start, NULL,
-	    elemDecl->name, elemDecl->targetNamespace, elemDecl), end);
-	/*
-	* Add subst. group members.
-	*/
-	for (i = 0; i < substGroup->members->nbItems; i++) {
-	    member = (xmlSchemaElementPtr) substGroup->members->items[i];
-	    /*
-	    * NOTE: This fixes bug #341150. xmlAutomataNewOnceTrans2()
-	    *  was incorrectly used instead of xmlAutomataNewTransition2()
-	    *  (seems like a copy&paste bug from the XML_SCHEMA_TYPE_ALL
-	    *  section in xmlSchemaBuildAContentModel() ).
-	    * TODO: Check if xmlAutomataNewOnceTrans2() was instead
-	    *  intended for the above "counter" section originally. I.e.,
-	    *  check xs:all with subst-groups.
-	    *
-	    * tmp = xmlAutomataNewOnceTrans2(pctxt->am, start, NULL,
-	    *	               member->name, member->targetNamespace,
-	    *		       1, 1, member);
-	    */
-	    tmp = xmlAutomataNewTransition2(pctxt->am, start, NULL,
-		member->name, member->targetNamespace, member);
-	    xmlAutomataNewEpsilon(pctxt->am, tmp, end);
-	}
-    } else {
-	xmlAutomataStatePtr hop;
-	int maxOccurs = particle->maxOccurs == UNBOUNDED ?
-	    UNBOUNDED : particle->maxOccurs - 1;
-	int minOccurs = particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
-	counter =
-	    xmlAutomataNewCounter(pctxt->am, minOccurs,
-	    maxOccurs);
-	hop = xmlAutomataNewState(pctxt->am);
-
-	xmlAutomataNewEpsilon(pctxt->am,
-	    xmlAutomataNewTransition2(pctxt->am,
-	    start, NULL,
-	    elemDecl->name, elemDecl->targetNamespace, elemDecl),
-	    hop);
-	/*
-	 * Add subst. group members.
-	 */
-	for (i = 0; i < substGroup->members->nbItems; i++) {
-	    member = (xmlSchemaElementPtr) substGroup->members->items[i];
-	    xmlAutomataNewEpsilon(pctxt->am,
-		xmlAutomataNewTransition2(pctxt->am,
-		start, NULL,
-		member->name, member->targetNamespace, member),
-		hop);
-	}
-	xmlAutomataNewCountedTrans(pctxt->am, hop, start, counter);
-	xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
-    }
-    if (particle->minOccurs == 0) {
-	xmlAutomataNewEpsilon(pctxt->am, start, end);
-        ret = 1;
-    }
-    pctxt->state = end;
-    return(ret);
-}
-
-/**
- * xmlSchemaBuildContentModelForElement:
- *
- * Returns 1 if nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildContentModelForElement(xmlSchemaParserCtxtPtr ctxt,
-				     xmlSchemaParticlePtr particle)
-{
-    int ret = 0;
-
-    if (((xmlSchemaElementPtr) particle->children)->flags &
-	XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) {
-	/*
-	* Substitution groups.
-	*/
-	ret = xmlSchemaBuildContentModelForSubstGroup(ctxt, particle, -1, NULL);
-    } else {
-	xmlSchemaElementPtr elemDecl;
-	xmlAutomataStatePtr start;
-
-	elemDecl = (xmlSchemaElementPtr) particle->children;
-
-	if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT)
-	    return(0);
-	if (particle->maxOccurs == 1) {
-	    start = ctxt->state;
-	    ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
-		    elemDecl->name, elemDecl->targetNamespace, elemDecl);
-	} else if ((particle->maxOccurs >= UNBOUNDED) &&
-	           (particle->minOccurs < 2)) {
-	    /* Special case. */
-	    start = ctxt->state;
-	    ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
-		elemDecl->name, elemDecl->targetNamespace, elemDecl);
-	    ctxt->state = xmlAutomataNewTransition2(ctxt->am, ctxt->state, ctxt->state,
-		elemDecl->name, elemDecl->targetNamespace, elemDecl);
-	} else {
-	    int counter;
-	    int maxOccurs = particle->maxOccurs == UNBOUNDED ?
-			    UNBOUNDED : particle->maxOccurs - 1;
-	    int minOccurs = particle->minOccurs < 1 ?
-			    0 : particle->minOccurs - 1;
-
-	    start = xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
-	    counter = xmlAutomataNewCounter(ctxt->am, minOccurs, maxOccurs);
-	    ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
-		elemDecl->name, elemDecl->targetNamespace, elemDecl);
-	    xmlAutomataNewCountedTrans(ctxt->am, ctxt->state, start, counter);
-	    ctxt->state = xmlAutomataNewCounterTrans(ctxt->am, ctxt->state,
-		NULL, counter);
-	}
-	if (particle->minOccurs == 0) {
-	    xmlAutomataNewEpsilon(ctxt->am, start, ctxt->state);
-            ret = 1;
-        }
-    }
-    return(ret);
-}
-
-/**
- * xmlSchemaBuildAContentModel:
- * @ctxt:  the schema parser context
- * @particle:  the particle component
- * @name:  the complex type's name whose content is being built
- *
- * Create the automaton for the {content type} of a complex type.
- *
- * Returns 1 if the content is nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr pctxt,
-			    xmlSchemaParticlePtr particle)
-{
-    int ret = 0, tmp2;
-
-    if (particle == NULL) {
-	PERROR_INT("xmlSchemaBuildAContentModel", "particle is NULL");
-	return(1);
-    }
-    if (particle->children == NULL) {
-	/*
-	* Just return in this case. A missing "term" of the particle
-	* might arise due to an invalid "term" component.
-	*/
-	return(1);
-    }
-
-    switch (particle->children->type) {
-	case XML_SCHEMA_TYPE_ANY: {
-	    xmlAutomataStatePtr start, end;
-	    xmlSchemaWildcardPtr wild;
-	    xmlSchemaWildcardNsPtr ns;
-
-	    wild = (xmlSchemaWildcardPtr) particle->children;
-
-	    start = pctxt->state;
-	    end = xmlAutomataNewState(pctxt->am);
-
-	    if (particle->maxOccurs == 1) {
-		if (wild->any == 1) {
-		    /*
-		    * We need to add both transitions:
-		    *
-		    * 1. the {"*", "*"} for elements in a namespace.
-		    */
-		    pctxt->state =
-			xmlAutomataNewTransition2(pctxt->am,
-			start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
-		    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
-		    /*
-		    * 2. the {"*"} for elements in no namespace.
-		    */
-		    pctxt->state =
-			xmlAutomataNewTransition2(pctxt->am,
-			start, NULL, BAD_CAST "*", NULL, wild);
-		    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
-
-		} else if (wild->nsSet != NULL) {
-		    ns = wild->nsSet;
-		    do {
-			pctxt->state = start;
-			pctxt->state = xmlAutomataNewTransition2(pctxt->am,
-			    pctxt->state, NULL, BAD_CAST "*", ns->value, wild);
-			xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
-			ns = ns->next;
-		    } while (ns != NULL);
-
-		} else if (wild->negNsSet != NULL) {
-		    pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
-			start, end, BAD_CAST "*", wild->negNsSet->value,
-			wild);
-		}
-	    } else {
-		int counter;
-		xmlAutomataStatePtr hop;
-		int maxOccurs =
-		    particle->maxOccurs == UNBOUNDED ? UNBOUNDED :
-                                           particle->maxOccurs - 1;
-		int minOccurs =
-		    particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
-		counter = xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
-		hop = xmlAutomataNewState(pctxt->am);
-		if (wild->any == 1) {
-		    pctxt->state =
-			xmlAutomataNewTransition2(pctxt->am,
-			start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
-		    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
-		    pctxt->state =
-			xmlAutomataNewTransition2(pctxt->am,
-			start, NULL, BAD_CAST "*", NULL, wild);
-		    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
-		} else if (wild->nsSet != NULL) {
-		    ns = wild->nsSet;
-		    do {
-			pctxt->state =
-			    xmlAutomataNewTransition2(pctxt->am,
-				start, NULL, BAD_CAST "*", ns->value, wild);
-			xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
-			ns = ns->next;
-		    } while (ns != NULL);
-
-		} else if (wild->negNsSet != NULL) {
-		    pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
-			start, hop, BAD_CAST "*", wild->negNsSet->value,
-			wild);
-		}
-		xmlAutomataNewCountedTrans(pctxt->am, hop, start, counter);
-		xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
-	    }
-	    if (particle->minOccurs == 0) {
-		xmlAutomataNewEpsilon(pctxt->am, start, end);
-                ret = 1;
-	    }
-	    pctxt->state = end;
-            break;
-	}
-        case XML_SCHEMA_TYPE_ELEMENT:
-	    ret = xmlSchemaBuildContentModelForElement(pctxt, particle);
-	    break;
-        case XML_SCHEMA_TYPE_SEQUENCE:{
-            xmlSchemaTreeItemPtr sub;
-
-            ret = 1;
-            /*
-             * If max and min occurances are default (1) then
-             * simply iterate over the particles of the <sequence>.
-             */
-            if ((particle->minOccurs == 1) && (particle->maxOccurs == 1)) {
-                sub = particle->children->children;
-
-                while (sub != NULL) {
-                    tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                    if (tmp2 != 1) ret = 0;
-                    sub = sub->next;
-                }
-            } else {
-                xmlAutomataStatePtr oldstate = pctxt->state;
-
-                if (particle->maxOccurs >= UNBOUNDED) {
-                    if (particle->minOccurs > 1) {
-                        xmlAutomataStatePtr tmp;
-                        int counter;
-
-                        pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
-                            oldstate, NULL);
-                        oldstate = pctxt->state;
-
-                        counter = xmlAutomataNewCounter(pctxt->am,
-                            particle->minOccurs - 1, UNBOUNDED);
-
-                        sub = particle->children->children;
-                        while (sub != NULL) {
-                            tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                            (xmlSchemaParticlePtr) sub);
-                            if (tmp2 != 1) ret = 0;
-                            sub = sub->next;
-                        }
-                        tmp = pctxt->state;
-                        xmlAutomataNewCountedTrans(pctxt->am, tmp,
-                                                   oldstate, counter);
-                        pctxt->state =
-                            xmlAutomataNewCounterTrans(pctxt->am, tmp,
-                                                       NULL, counter);
-                        if (ret == 1)
-                            xmlAutomataNewEpsilon(pctxt->am,
-                                                oldstate, pctxt->state);
-
-                    } else {
-                        pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
-                            oldstate, NULL);
-                        oldstate = pctxt->state;
-
-                        sub = particle->children->children;
-                        while (sub != NULL) {
-                            tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                            if (tmp2 != 1) ret = 0;
-                            sub = sub->next;
-                        }
-                        xmlAutomataNewEpsilon(pctxt->am, pctxt->state,
-                                              oldstate);
-                        /*
-                         * epsilon needed to block previous trans from
-                         * being allowed to enter back from another
-                         * construct
-                         */
-                        pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
-                                            pctxt->state, NULL);
-                        if (particle->minOccurs == 0) {
-                            xmlAutomataNewEpsilon(pctxt->am,
-                                oldstate, pctxt->state);
-                            ret = 1;
-                        }
-                    }
-                } else if ((particle->maxOccurs > 1)
-                           || (particle->minOccurs > 1)) {
-                    xmlAutomataStatePtr tmp;
-                    int counter;
-
-                    pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
-                        oldstate, NULL);
-                    oldstate = pctxt->state;
-
-                    counter = xmlAutomataNewCounter(pctxt->am,
-                        particle->minOccurs - 1,
-                        particle->maxOccurs - 1);
-
-                    sub = particle->children->children;
-                    while (sub != NULL) {
-                        tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                        if (tmp2 != 1) ret = 0;
-                        sub = sub->next;
-                    }
-                    tmp = pctxt->state;
-                    xmlAutomataNewCountedTrans(pctxt->am,
-                        tmp, oldstate, counter);
-                    pctxt->state =
-                        xmlAutomataNewCounterTrans(pctxt->am, tmp, NULL,
-                                                   counter);
-                    if ((particle->minOccurs == 0) || (ret == 1)) {
-                        xmlAutomataNewEpsilon(pctxt->am,
-                                            oldstate, pctxt->state);
-                        ret = 1;
-                    }
-                } else {
-                    sub = particle->children->children;
-                    while (sub != NULL) {
-                        tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                        if (tmp2 != 1) ret = 0;
-                        sub = sub->next;
-                    }
-
-		    /*
-		     * epsilon needed to block previous trans from
-		     * being allowed to enter back from another
-		     * construct
-		     */
-		    pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
-					pctxt->state, NULL);
-
-                    if (particle->minOccurs == 0) {
-                        xmlAutomataNewEpsilon(pctxt->am, oldstate,
-                                              pctxt->state);
-                        ret = 1;
-                    }
-                }
-            }
-            break;
-        }
-        case XML_SCHEMA_TYPE_CHOICE:{
-            xmlSchemaTreeItemPtr sub;
-            xmlAutomataStatePtr start, end;
-
-            ret = 0;
-            start = pctxt->state;
-            end = xmlAutomataNewState(pctxt->am);
-
-            /*
-             * iterate over the subtypes and remerge the end with an
-             * epsilon transition
-             */
-            if (particle->maxOccurs == 1) {
-                sub = particle->children->children;
-                while (sub != NULL) {
-                    pctxt->state = start;
-                    tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                    if (tmp2 == 1) ret = 1;
-                    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
-                    sub = sub->next;
-                }
-            } else {
-                int counter;
-                xmlAutomataStatePtr hop, base;
-                int maxOccurs = particle->maxOccurs == UNBOUNDED ?
-                    UNBOUNDED : particle->maxOccurs - 1;
-                int minOccurs =
-                    particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
-                /*
-                 * use a counter to keep track of the number of transtions
-                 * which went through the choice.
-                 */
-                counter =
-                    xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
-                hop = xmlAutomataNewState(pctxt->am);
-                base = xmlAutomataNewState(pctxt->am);
-
-                sub = particle->children->children;
-                while (sub != NULL) {
-                    pctxt->state = base;
-                    tmp2 = xmlSchemaBuildAContentModel(pctxt,
-                                        (xmlSchemaParticlePtr) sub);
-                    if (tmp2 == 1) ret = 1;
-                    xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
-                    sub = sub->next;
-                }
-                xmlAutomataNewEpsilon(pctxt->am, start, base);
-                xmlAutomataNewCountedTrans(pctxt->am, hop, base, counter);
-                xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
-                if (ret == 1)
-                    xmlAutomataNewEpsilon(pctxt->am, base, end);
-            }
-            if (particle->minOccurs == 0) {
-                xmlAutomataNewEpsilon(pctxt->am, start, end);
-                ret = 1;
-            }
-            pctxt->state = end;
-            break;
-        }
-        case XML_SCHEMA_TYPE_ALL:{
-            xmlAutomataStatePtr start, tmp;
-            xmlSchemaParticlePtr sub;
-            xmlSchemaElementPtr elemDecl;
-
-            ret = 1;
-
-            sub = (xmlSchemaParticlePtr) particle->children->children;
-            if (sub == NULL)
-                break;
-
-            ret = 0;
-
-            start = pctxt->state;
-            tmp = xmlAutomataNewState(pctxt->am);
-            xmlAutomataNewEpsilon(pctxt->am, pctxt->state, tmp);
-            pctxt->state = tmp;
-            while (sub != NULL) {
-                pctxt->state = tmp;
-
-                elemDecl = (xmlSchemaElementPtr) sub->children;
-                if (elemDecl == NULL) {
-                    PERROR_INT("xmlSchemaBuildAContentModel",
-                        "<element> particle has no term");
-                    return(ret);
-                };
-                /*
-                * NOTE: The {max occurs} of all the particles in the
-                * {particles} of the group must be 0 or 1; this is
-                * already ensured during the parse of the content of
-                * <all>.
-                */
-                if (elemDecl->flags & XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) {
-                    int counter;
-
-                    /*
-                     * This is an abstract group, we need to share
-                     * the same counter for all the element transitions
-                     * derived from the group
-                     */
-                    counter = xmlAutomataNewCounter(pctxt->am,
-                                       sub->minOccurs, sub->maxOccurs);
-                    xmlSchemaBuildContentModelForSubstGroup(pctxt,
-                                       sub, counter, pctxt->state);
-                } else {
-                    if ((sub->minOccurs == 1) &&
-                        (sub->maxOccurs == 1)) {
-                        xmlAutomataNewOnceTrans2(pctxt->am, pctxt->state,
-                                                pctxt->state,
-                                                elemDecl->name,
-                                                elemDecl->targetNamespace,
-                                                1, 1, elemDecl);
-                    } else if ((sub->minOccurs == 0) &&
-                        (sub->maxOccurs == 1)) {
-
-                        xmlAutomataNewCountTrans2(pctxt->am, pctxt->state,
-                                                 pctxt->state,
-                                                 elemDecl->name,
-                                                 elemDecl->targetNamespace,
-                                                 0,
-                                                 1,
-                                                 elemDecl);
-                    }
-                }
-                sub = (xmlSchemaParticlePtr) sub->next;
-            }
-            pctxt->state =
-                xmlAutomataNewAllTrans(pctxt->am, pctxt->state, NULL, 0);
-            if (particle->minOccurs == 0) {
-                xmlAutomataNewEpsilon(pctxt->am, start, pctxt->state);
-                ret = 1;
-            }
-            break;
-        }
-	case XML_SCHEMA_TYPE_GROUP:
-	    /*
-	    * If we hit a model group definition, then this means that
-	    * it was empty, thus was not substituted for the containing
-	    * model group. Just do nothing in this case.
-	    * TODO: But the group should be substituted and not occur at
-	    * all in the content model at this point. Fix this.
-	    */
-            ret = 1;
-	    break;
-        default:
-	    xmlSchemaInternalErr2(ACTXT_CAST pctxt,
-		"xmlSchemaBuildAContentModel",
-		"found unexpected term of type '%s' in content model",
-		WXS_ITEM_TYPE_NAME(particle->children), NULL);
-            return(ret);
-    }
-    return(ret);
-}
-
-/**
- * xmlSchemaBuildContentModel:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- * @name:  the element name
- *
- * Builds the content model of the complex type.
- */
-static void
-xmlSchemaBuildContentModel(xmlSchemaTypePtr type,
-			   xmlSchemaParserCtxtPtr ctxt)
-{
-    if ((type->type != XML_SCHEMA_TYPE_COMPLEX) ||
-	(type->contModel != NULL) ||
-	((type->contentType != XML_SCHEMA_CONTENT_ELEMENTS) &&
-	(type->contentType != XML_SCHEMA_CONTENT_MIXED)))
-	return;
-
-#ifdef DEBUG_CONTENT
-    xmlGenericError(xmlGenericErrorContext,
-                    "Building content model for %s\n", name);
-#endif
-    ctxt->am = NULL;
-    ctxt->am = xmlNewAutomata();
-    if (ctxt->am == NULL) {
-        xmlGenericError(xmlGenericErrorContext,
-	    "Cannot create automata for complex type %s\n", type->name);
-        return;
-    }
-    ctxt->state = xmlAutomataGetInitState(ctxt->am);
-    /*
-    * Build the automaton.
-    */
-    xmlSchemaBuildAContentModel(ctxt, WXS_TYPE_PARTICLE(type));
-    xmlAutomataSetFinalState(ctxt->am, ctxt->state);
-    type->contModel = xmlAutomataCompile(ctxt->am);
-    if (type->contModel == NULL) {
-        xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_INTERNAL,
-	    WXS_BASIC_CAST type, type->node,
-	    "Failed to compile the content model", NULL);
-    } else if (xmlRegexpIsDeterminist(type->contModel) != 1) {
-        xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_NOT_DETERMINISTIC,
-	    /* XML_SCHEMAS_ERR_NOTDETERMINIST, */
-	    WXS_BASIC_CAST type, type->node,
-	    "The content model is not determinist", NULL);
-    } else {
-#ifdef DEBUG_CONTENT_REGEXP
-        xmlGenericError(xmlGenericErrorContext,
-                        "Content model of %s:\n", type->name);
-        xmlRegexpPrint(stderr, type->contModel);
-#endif
-    }
-    ctxt->state = NULL;
-    xmlFreeAutomata(ctxt->am);
-    ctxt->am = NULL;
-}
-
-/**
- * xmlSchemaResolveElementReferences:
- * @elem:  the schema element context
- * @ctxt:  the schema parser context
- *
- * Resolves the references of an element declaration
- * or particle, which has an element declaration as it's
- * term.
- */
-static void
-xmlSchemaResolveElementReferences(xmlSchemaElementPtr elemDecl,
-				  xmlSchemaParserCtxtPtr ctxt)
-{
-    if ((ctxt == NULL) || (elemDecl == NULL) ||
-	((elemDecl != NULL) &&
-	(elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_RESOLVED)))
-        return;
-    elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_RESOLVED;
-
-    if ((elemDecl->subtypes == NULL) && (elemDecl->namedType != NULL)) {
-	xmlSchemaTypePtr type;
-
-	/* (type definition) ... otherwise the type definition `resolved`
-	* to by the `actual value` of the type [attribute] ...
-	*/
-	type = xmlSchemaGetType(ctxt->schema, elemDecl->namedType,
-	    elemDecl->namedTypeNs);
-	if (type == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST elemDecl, elemDecl->node,
-		"type", elemDecl->namedType, elemDecl->namedTypeNs,
-		XML_SCHEMA_TYPE_BASIC, "type definition");
-	} else
-	    elemDecl->subtypes = type;
-    }
-    if (elemDecl->substGroup != NULL) {
-	xmlSchemaElementPtr substHead;
-
-	/*
-	* FIXME TODO: Do we need a new field in _xmlSchemaElement for
-	* substitutionGroup?
-	*/
-	substHead = xmlSchemaGetElem(ctxt->schema, elemDecl->substGroup,
-	    elemDecl->substGroupNs);
-	if (substHead == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST elemDecl, NULL,
-		"substitutionGroup", elemDecl->substGroup,
-		elemDecl->substGroupNs, XML_SCHEMA_TYPE_ELEMENT, NULL);
-	} else {
-	    xmlSchemaResolveElementReferences(substHead, ctxt);
-	    /*
-	    * Set the "substitution group affiliation".
-	    * NOTE that now we use the "refDecl" field for this.
-	    */
-	    WXS_SUBST_HEAD(elemDecl) = substHead;
-	    /*
-	    * The type definitions is set to:
-	    * SPEC "...the {type definition} of the element
-	    * declaration `resolved` to by the `actual value`
-	    * of the substitutionGroup [attribute], if present"
-	    */
-	    if (elemDecl->subtypes == NULL)
-		elemDecl->subtypes = substHead->subtypes;
-	}
-    }
-    /*
-    * SPEC "The definition of anyType serves as the default type definition
-    * for element declarations whose XML representation does not specify one."
-    */
-    if ((elemDecl->subtypes == NULL) &&
-	(elemDecl->namedType == NULL) &&
-	(elemDecl->substGroup == NULL))
-	elemDecl->subtypes = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
-}
-
-/**
- * xmlSchemaResolveUnionMemberTypes:
- * @ctxt:  the schema parser context
- * @type:  the schema simple type definition
- *
- * Checks and builds the "member type definitions" property of the union
- * simple type. This handles part (1), part (2) is done in
- * xmlSchemaFinishMemberTypeDefinitionsProperty()
- *
- * Returns -1 in case of an internal error, 0 otherwise.
- */
-static int
-xmlSchemaResolveUnionMemberTypes(xmlSchemaParserCtxtPtr ctxt,
-				 xmlSchemaTypePtr type)
-{
-
-    xmlSchemaTypeLinkPtr link, lastLink, newLink;
-    xmlSchemaTypePtr memberType;
-
-    /*
-    * SPEC (1) "If the <union> alternative is chosen, then [Definition:]
-    * define the explicit members as the type definitions `resolved`
-    * to by the items in the `actual value` of the memberTypes [attribute],
-    * if any, followed by the type definitions corresponding to the
-    * <simpleType>s among the [children] of <union>, if any."
-    */
-    /*
-    * Resolve references.
-    */
-    link = type->memberTypes;
-    lastLink = NULL;
-    while (link != NULL) {
-	const xmlChar *name, *nsName;
-
-	name = ((xmlSchemaQNameRefPtr) link->type)->name;
-	nsName = ((xmlSchemaQNameRefPtr) link->type)->targetNamespace;
-
-	memberType = xmlSchemaGetType(ctxt->schema, name, nsName);
-	if ((memberType == NULL) || (! WXS_IS_SIMPLE(memberType))) {
-	    xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST type, type->node, "memberTypes",
-		name, nsName, XML_SCHEMA_TYPE_SIMPLE, NULL);
-	    /*
-	    * Remove the member type link.
-	    */
-	    if (lastLink == NULL)
-		type->memberTypes = link->next;
-	    else
-		lastLink->next = link->next;
-	    newLink = link;
-	    link = link->next;
-	    xmlFree(newLink);
-	} else {
-	    link->type = memberType;
-	    lastLink = link;
-	    link = link->next;
-	}
-    }
-    /*
-    * Add local simple types,
-    */
-    memberType = type->subtypes;
-    while (memberType != NULL) {
-	link = (xmlSchemaTypeLinkPtr) xmlMalloc(sizeof(xmlSchemaTypeLink));
-	if (link == NULL) {
-	    xmlSchemaPErrMemory(ctxt, "allocating a type link", NULL);
-	    return (-1);
-	}
-	link->type = memberType;
-	link->next = NULL;
-	if (lastLink == NULL)
-	    type->memberTypes = link;
-	else
-	    lastLink->next = link;
-	lastLink = link;
-	memberType = memberType->next;
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaIsDerivedFromBuiltInType:
- * @ctxt:  the schema parser context
- * @type:  the type definition
- * @valType: the value type
- *
- *
- * Returns 1 if the type has the given value type, or
- * is derived from such a type.
- */
-static int
-xmlSchemaIsDerivedFromBuiltInType(xmlSchemaTypePtr type, int valType)
-{
-    if (type == NULL)
-	return (0);
-    if (WXS_IS_COMPLEX(type))
-	return (0);
-    if (type->type == XML_SCHEMA_TYPE_BASIC) {
-	if (type->builtInType == valType)
-	    return(1);
-	if ((type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) ||
-	    (type->builtInType == XML_SCHEMAS_ANYTYPE))
-	    return (0);
-	return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
-    }
-    return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
-}
-
-#if 0
-/**
- * xmlSchemaIsDerivedFromBuiltInType:
- * @ctxt:  the schema parser context
- * @type:  the type definition
- * @valType: the value type
- *
- *
- * Returns 1 if the type has the given value type, or
- * is derived from such a type.
- */
-static int
-xmlSchemaIsUserDerivedFromBuiltInType(xmlSchemaTypePtr type, int valType)
-{
-    if (type == NULL)
-	return (0);
-    if (WXS_IS_COMPLEX(type))
-	return (0);
-    if (type->type == XML_SCHEMA_TYPE_BASIC) {
-	if (type->builtInType == valType)
-	    return(1);
-	return (0);
-    } else
-	return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
-
-    return (0);
-}
-
-static xmlSchemaTypePtr
-xmlSchemaQueryBuiltInType(xmlSchemaTypePtr type)
-{
-    if (type == NULL)
-	return (NULL);
-    if (WXS_IS_COMPLEX(type))
-	return (NULL);
-    if (type->type == XML_SCHEMA_TYPE_BASIC)
-	return(type);
-    return(xmlSchemaQueryBuiltInType(type->subtypes));
-}
-#endif
-
-/**
- * xmlSchemaGetPrimitiveType:
- * @type:  the simpleType definition
- *
- * Returns the primitive type of the given type or
- * NULL in case of error.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetPrimitiveType(xmlSchemaTypePtr type)
-{
-
-    while (type != NULL) {
-	/*
-	* Note that anySimpleType is actually not a primitive type
-	* but we need that here.
-	*/
-	if ((type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) ||
-	   (type->flags & XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE))
-	    return (type);
-	type = type->baseType;
-    }
-
-    return (NULL);
-}
-
-#if 0
-/**
- * xmlSchemaGetBuiltInTypeAncestor:
- * @type:  the simpleType definition
- *
- * Returns the primitive type of the given type or
- * NULL in case of error.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetBuiltInTypeAncestor(xmlSchemaTypePtr type)
-{
-    if (WXS_IS_LIST(type) || WXS_IS_UNION(type))
-	return (0);
-    while (type != NULL) {
-	if (type->type == XML_SCHEMA_TYPE_BASIC)
-	    return (type);
-	type = type->baseType;
-    }
-
-    return (NULL);
-}
-#endif
-
-/**
- * xmlSchemaCloneWildcardNsConstraints:
- * @ctxt:  the schema parser context
- * @dest:  the destination wildcard
- * @source: the source wildcard
- *
- * Clones the namespace constraints of source
- * and assignes them to dest.
- * Returns -1 on internal error, 0 otherwise.
- */
-static int
-xmlSchemaCloneWildcardNsConstraints(xmlSchemaParserCtxtPtr ctxt,
-				    xmlSchemaWildcardPtr dest,
-				    xmlSchemaWildcardPtr source)
-{
-    xmlSchemaWildcardNsPtr cur, tmp, last;
-
-    if ((source == NULL) || (dest == NULL))
-	return(-1);
-    dest->any = source->any;
-    cur = source->nsSet;
-    last = NULL;
-    while (cur != NULL) {
-	tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
-	if (tmp == NULL)
-	    return(-1);
-	tmp->value = cur->value;
-	if (last == NULL)
-	    dest->nsSet = tmp;
-	else
-	    last->next = tmp;
-	last = tmp;
-	cur = cur->next;
-    }
-    if (dest->negNsSet != NULL)
-	xmlSchemaFreeWildcardNsSet(dest->negNsSet);
-    if (source->negNsSet != NULL) {
-	dest->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
-	if (dest->negNsSet == NULL)
-	    return(-1);
-	dest->negNsSet->value = source->negNsSet->value;
-    } else
-	dest->negNsSet = NULL;
-    return(0);
-}
-
-/**
- * xmlSchemaUnionWildcards:
- * @ctxt:  the schema parser context
- * @completeWild:  the first wildcard
- * @curWild: the second wildcard
- *
- * Unions the namespace constraints of the given wildcards.
- * @completeWild will hold the resulting union.
- * Returns a positive error code on failure, -1 in case of an
- * internal error, 0 otherwise.
- */
-static int
-xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
-			    xmlSchemaWildcardPtr completeWild,
-			    xmlSchemaWildcardPtr curWild)
-{
-    xmlSchemaWildcardNsPtr cur, curB, tmp;
-
-    /*
-    * 1 If O1 and O2 are the same value, then that value must be the
-    * value.
-    */
-    if ((completeWild->any == curWild->any) &&
-	((completeWild->nsSet == NULL) == (curWild->nsSet == NULL)) &&
-	((completeWild->negNsSet == NULL) == (curWild->negNsSet == NULL))) {
-
-	if ((completeWild->negNsSet == NULL) ||
-	    (completeWild->negNsSet->value == curWild->negNsSet->value)) {
-
-	    if (completeWild->nsSet != NULL) {
-		int found = 0;
-
-		/*
-		* Check equality of sets.
-		*/
-		cur = completeWild->nsSet;
-		while (cur != NULL) {
-		    found = 0;
-		    curB = curWild->nsSet;
-		    while (curB != NULL) {
-			if (cur->value == curB->value) {
-			    found = 1;
-			    break;
-			}
-			curB = curB->next;
-		    }
-		    if (!found)
-			break;
-		    cur = cur->next;
-		}
-		if (found)
-		    return(0);
-	    } else
-		return(0);
-	}
-    }
-    /*
-    * 2 If either O1 or O2 is any, then any must be the value
-    */
-    if (completeWild->any != curWild->any) {
-	if (completeWild->any == 0) {
-	    completeWild->any = 1;
-	    if (completeWild->nsSet != NULL) {
-		xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		completeWild->nsSet = NULL;
-	    }
-	    if (completeWild->negNsSet != NULL) {
-		xmlFree(completeWild->negNsSet);
-		completeWild->negNsSet = NULL;
-	    }
-	}
-	return (0);
-    }
-    /*
-    * 3 If both O1 and O2 are sets of (namespace names or `absent`),
-    * then the union of those sets must be the value.
-    */
-    if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
-	int found;
-	xmlSchemaWildcardNsPtr start;
-
-	cur = curWild->nsSet;
-	start = completeWild->nsSet;
-	while (cur != NULL) {
-	    found = 0;
-	    curB = start;
-	    while (curB != NULL) {
-		if (cur->value == curB->value) {
-		    found = 1;
-		    break;
-		}
-		curB = curB->next;
-	    }
-	    if (!found) {
-		tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
-		if (tmp == NULL)
-		    return (-1);
-		tmp->value = cur->value;
-		tmp->next = completeWild->nsSet;
-		completeWild->nsSet = tmp;
-	    }
-	    cur = cur->next;
-	}
-
-	return(0);
-    }
-    /*
-    * 4 If the two are negations of different values (namespace names
-    * or `absent`), then a pair of not and `absent` must be the value.
-    */
-    if ((completeWild->negNsSet != NULL) &&
-	(curWild->negNsSet != NULL) &&
-	(completeWild->negNsSet->value != curWild->negNsSet->value)) {
-	completeWild->negNsSet->value = NULL;
-
-	return(0);
-    }
-    /*
-     * 5.
-     */
-    if (((completeWild->negNsSet != NULL) &&
-	(completeWild->negNsSet->value != NULL) &&
-	(curWild->nsSet != NULL)) ||
-	((curWild->negNsSet != NULL) &&
-	(curWild->negNsSet->value != NULL) &&
-	(completeWild->nsSet != NULL))) {
-
-	int nsFound, absentFound = 0;
-
-	if (completeWild->nsSet != NULL) {
-	    cur = completeWild->nsSet;
-	    curB = curWild->negNsSet;
-	} else {
-	    cur = curWild->nsSet;
-	    curB = completeWild->negNsSet;
-	}
-	nsFound = 0;
-	while (cur != NULL) {
-	    if (cur->value == NULL)
-		absentFound = 1;
-	    else if (cur->value == curB->value)
-		nsFound = 1;
-	    if (nsFound && absentFound)
-		break;
-	    cur = cur->next;
-	}
-
-	if (nsFound && absentFound) {
-	    /*
-	    * 5.1 If the set S includes both the negated namespace
-	    * name and `absent`, then any must be the value.
-	    */
-	    completeWild->any = 1;
-	    if (completeWild->nsSet != NULL) {
-		xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		completeWild->nsSet = NULL;
-	    }
-	    if (completeWild->negNsSet != NULL) {
-		xmlFree(completeWild->negNsSet);
-		completeWild->negNsSet = NULL;
-	    }
-	} else if (nsFound && (!absentFound)) {
-	    /*
-	    * 5.2 If the set S includes the negated namespace name
-	    * but not `absent`, then a pair of not and `absent` must
-	    * be the value.
-	    */
-	    if (completeWild->nsSet != NULL) {
-		xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		completeWild->nsSet = NULL;
-	    }
-	    if (completeWild->negNsSet == NULL) {
-		completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
-		if (completeWild->negNsSet == NULL)
-		    return (-1);
-	    }
-	    completeWild->negNsSet->value = NULL;
-	} else if ((!nsFound) && absentFound) {
-	    /*
-	    * 5.3 If the set S includes `absent` but not the negated
-	    * namespace name, then the union is not expressible.
-	    */
-	    xmlSchemaPErr(ctxt, completeWild->node,
-		XML_SCHEMAP_UNION_NOT_EXPRESSIBLE,
-		"The union of the wilcard is not expressible.\n",
-		NULL, NULL);
-	    return(XML_SCHEMAP_UNION_NOT_EXPRESSIBLE);
-	} else if ((!nsFound) && (!absentFound)) {
-	    /*
-	    * 5.4 If the set S does not include either the negated namespace
-	    * name or `absent`, then whichever of O1 or O2 is a pair of not
-	    * and a namespace name must be the value.
-	    */
-	    if (completeWild->negNsSet == NULL) {
-		if (completeWild->nsSet != NULL) {
-		    xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		    completeWild->nsSet = NULL;
-		}
-		completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
-		if (completeWild->negNsSet == NULL)
-		    return (-1);
-		completeWild->negNsSet->value = curWild->negNsSet->value;
-	    }
-	}
-	return (0);
-    }
-    /*
-     * 6.
-     */
-    if (((completeWild->negNsSet != NULL) &&
-	(completeWild->negNsSet->value == NULL) &&
-	(curWild->nsSet != NULL)) ||
-	((curWild->negNsSet != NULL) &&
-	(curWild->negNsSet->value == NULL) &&
-	(completeWild->nsSet != NULL))) {
-
-	if (completeWild->nsSet != NULL) {
-	    cur = completeWild->nsSet;
-	} else {
-	    cur = curWild->nsSet;
-	}
-	while (cur != NULL) {
-	    if (cur->value == NULL) {
-		/*
-		* 6.1 If the set S includes `absent`, then any must be the
-		* value.
-		*/
-		completeWild->any = 1;
-		if (completeWild->nsSet != NULL) {
-		    xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		    completeWild->nsSet = NULL;
-		}
-		if (completeWild->negNsSet != NULL) {
-		    xmlFree(completeWild->negNsSet);
-		    completeWild->negNsSet = NULL;
-		}
-		return (0);
-	    }
-	    cur = cur->next;
-	}
-	if (completeWild->negNsSet == NULL) {
-	    /*
-	    * 6.2 If the set S does not include `absent`, then a pair of not
-	    * and `absent` must be the value.
-	    */
-	    if (completeWild->nsSet != NULL) {
-		xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
-		completeWild->nsSet = NULL;
-	    }
-	    completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
-	    if (completeWild->negNsSet == NULL)
-		return (-1);
-	    completeWild->negNsSet->value = NULL;
-	}
-	return (0);
-    }
-    return (0);
-
-}
-
-/**
- * xmlSchemaIntersectWildcards:
- * @ctxt:  the schema parser context
- * @completeWild:  the first wildcard
- * @curWild: the second wildcard
- *
- * Intersects the namespace constraints of the given wildcards.
- * @completeWild will hold the resulting intersection.
- * Returns a positive error code on failure, -1 in case of an
- * internal error, 0 otherwise.
- */
-static int
-xmlSchemaIntersectWildcards(xmlSchemaParserCtxtPtr ctxt,
-			    xmlSchemaWildcardPtr completeWild,
-			    xmlSchemaWildcardPtr curWild)
-{
-    xmlSchemaWildcardNsPtr cur, curB, prev,  tmp;
-
-    /*
-    * 1 If O1 and O2 are the same value, then that value must be the
-    * value.
-    */
-    if ((completeWild->any == curWild->any) &&
-	((completeWild->nsSet == NULL) == (curWild->nsSet == NULL)) &&
-	((completeWild->negNsSet == NULL) == (curWild->negNsSet == NULL))) {
-
-	if ((completeWild->negNsSet == NULL) ||
-	    (completeWild->negNsSet->value == curWild->negNsSet->value)) {
-
-	    if (completeWild->nsSet != NULL) {
-		int found = 0;
-
-		/*
-		* Check equality of sets.
-		*/
-		cur = completeWild->nsSet;
-		while (cur != NULL) {
-		    found = 0;
-		    curB = curWild->nsSet;
-		    while (curB != NULL) {
-			if (cur->value == curB->value) {
-			    found = 1;
-			    break;
-			}
-			curB = curB->next;
-		    }
-		    if (!found)
-			break;
-		    cur = cur->next;
-		}
-		if (found)
-		    return(0);
-	    } else
-		return(0);
-	}
-    }
-    /*
-    * 2 If either O1 or O2 is any, then the other must be the value.
-    */
-    if ((completeWild->any != curWild->any) && (completeWild->any)) {
-	if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) == -1)
-	    return(-1);
-	return(0);
-    }
-    /*
-    * 3 If either O1 or O2 is a pair of not and a value (a namespace
-    * name or `absent`) and the other is a set of (namespace names or
-    * `absent`), then that set, minus the negated value if it was in
-    * the set, minus `absent` if it was in the set, must be the value.
-    */
-    if (((completeWild->negNsSet != NULL) && (curWild->nsSet != NULL)) ||
-	((curWild->negNsSet != NULL) && (completeWild->nsSet != NULL))) {
-	const xmlChar *neg;
-
-	if (completeWild->nsSet == NULL) {
-	    neg = completeWild->negNsSet->value;
-	    if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) == -1)
-		return(-1);
-	} else
-	    neg = curWild->negNsSet->value;
-	/*
-	* Remove absent and negated.
-	*/
-	prev = NULL;
-	cur = completeWild->nsSet;
-	while (cur != NULL) {
-	    if (cur->value == NULL) {
-		if (prev == NULL)
-		    completeWild->nsSet = cur->next;
-		else
-		    prev->next = cur->next;
-		xmlFree(cur);
-		break;
-	    }
-	    prev = cur;
-	    cur = cur->next;
-	}
-	if (neg != NULL) {
-	    prev = NULL;
-	    cur = completeWild->nsSet;
-	    while (cur != NULL) {
-		if (cur->value == neg) {
-		    if (prev == NULL)
-			completeWild->nsSet = cur->next;
-		    else
-			prev->next = cur->next;
-		    xmlFree(cur);
-		    break;
-		}
-		prev = cur;
-		cur = cur->next;
-	    }
-	}
-
-	return(0);
-    }
-    /*
-    * 4 If both O1 and O2 are sets of (namespace names or `absent`),
-    * then the intersection of those sets must be the value.
-    */
-    if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
-	int found;
-
-	cur = completeWild->nsSet;
-	prev = NULL;
-	while (cur != NULL) {
-	    found = 0;
-	    curB = curWild->nsSet;
-	    while (curB != NULL) {
-		if (cur->value == curB->value) {
-		    found = 1;
-		    break;
-		}
-		curB = curB->next;
-	    }
-	    if (!found) {
-		if (prev == NULL)
-		    completeWild->nsSet = cur->next;
-		else
-		    prev->next = cur->next;
-		tmp = cur->next;
-		xmlFree(cur);
-		cur = tmp;
-		continue;
-	    }
-	    prev = cur;
-	    cur = cur->next;
-	}
-
-	return(0);
-    }
-    /* 5 If the two are negations of different namespace names,
-    * then the intersection is not expressible
-    */
-    if ((completeWild->negNsSet != NULL) &&
-	(curWild->negNsSet != NULL) &&
-	(completeWild->negNsSet->value != curWild->negNsSet->value) &&
-	(completeWild->negNsSet->value != NULL) &&
-	(curWild->negNsSet->value != NULL)) {
-
-	xmlSchemaPErr(ctxt, completeWild->node, XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE,
-	    "The intersection of the wilcard is not expressible.\n",
-	    NULL, NULL);
-	return(XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE);
-    }
-    /*
-    * 6 If the one is a negation of a namespace name and the other
-    * is a negation of `absent`, then the one which is the negation
-    * of a namespace name must be the value.
-    */
-    if ((completeWild->negNsSet != NULL) && (curWild->negNsSet != NULL) &&
-	(completeWild->negNsSet->value != curWild->negNsSet->value) &&
-	(completeWild->negNsSet->value == NULL)) {
-	completeWild->negNsSet->value =  curWild->negNsSet->value;
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaIsWildcardNsConstraintSubset:
- * @ctxt:  the schema parser context
- * @sub:  the first wildcard
- * @super: the second wildcard
- *
- * Schema Component Constraint: Wildcard Subset (cos-ns-subset)
- *
- * Returns 0 if the namespace constraint of @sub is an intensional
- * subset of @super, 1 otherwise.
- */
-static int
-xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub,
-			  xmlSchemaWildcardPtr super)
-{
-    /*
-    * 1 super must be any.
-    */
-    if (super->any)
-	return (0);
-    /*
-    * 2.1 sub must be a pair of not and a namespace name or `absent`.
-    * 2.2 super must be a pair of not and the same value.
-    */
-    if ((sub->negNsSet != NULL) &&
-	(super->negNsSet != NULL) &&
-	(sub->negNsSet->value == super->negNsSet->value))
-	return (0);
-    /*
-    * 3.1 sub must be a set whose members are either namespace names or `absent`.
-    */
-    if (sub->nsSet != NULL) {
-	/*
-	* 3.2.1 super must be the same set or a superset thereof.
-	*/
-	if (super->nsSet != NULL) {
-	    xmlSchemaWildcardNsPtr cur, curB;
-	    int found = 0;
-
-	    cur = sub->nsSet;
-	    while (cur != NULL) {
-		found = 0;
-		curB = super->nsSet;
-		while (curB != NULL) {
-		    if (cur->value == curB->value) {
-			found = 1;
-			break;
-		    }
-		    curB = curB->next;
-		}
-		if (!found)
-		    return (1);
-		cur = cur->next;
-	    }
-	    if (found)
-		return (0);
-	} else if (super->negNsSet != NULL) {
-	    xmlSchemaWildcardNsPtr cur;
-	    /*
-	    * 3.2.2 super must be a pair of not and a namespace name or
-	    * `absent` and that value must not be in sub's set.
-	    */
-	    cur = sub->nsSet;
-	    while (cur != NULL) {
-		if (cur->value == super->negNsSet->value)
-		    return (1);
-		cur = cur->next;
-	    }
-	    return (0);
-	}
-    }
-    return (1);
-}
-
-static int
-xmlSchemaGetEffectiveValueConstraint(xmlSchemaAttributeUsePtr attruse,
-				     int *fixed,
-				     const xmlChar **value,
-				     xmlSchemaValPtr *val)
-{
-    *fixed = 0;
-    *value = NULL;
-    if (val != 0)
-	*val = NULL;
-
-    if (attruse->defValue != NULL) {
-	*value = attruse->defValue;
-	if (val != NULL)
-	    *val = attruse->defVal;
-	if (attruse->flags & XML_SCHEMA_ATTR_USE_FIXED)
-	    *fixed = 1;
-	return(1);
-    } else if ((attruse->attrDecl != NULL) &&
-	(attruse->attrDecl->defValue != NULL)) {
-	*value = attruse->attrDecl->defValue;
-	if (val != NULL)
-	    *val = attruse->attrDecl->defVal;
-	if (attruse->attrDecl->flags & XML_SCHEMAS_ATTR_FIXED)
-	    *fixed = 1;
-	return(1);
-    }
-    return(0);
-}
-/**
- * xmlSchemaCheckCVCWildcardNamespace:
- * @wild:  the wildcard
- * @ns:  the namespace
- *
- * Validation Rule: Wildcard allows Namespace Name
- * (cvc-wildcard-namespace)
- *
- * Returns 0 if the given namespace matches the wildcard,
- * 1 otherwise and -1 on API errors.
- */
-static int
-xmlSchemaCheckCVCWildcardNamespace(xmlSchemaWildcardPtr wild,
-				   const xmlChar* ns)
-{
-    if (wild == NULL)
-	return(-1);
-
-    if (wild->any)
-	return(0);
-    else if (wild->nsSet != NULL) {
-	xmlSchemaWildcardNsPtr cur;
-
-	cur = wild->nsSet;
-	while (cur != NULL) {
-	    if (xmlStrEqual(cur->value, ns))
-		return(0);
-	    cur = cur->next;
-	}
-    } else if ((wild->negNsSet != NULL) && (ns != NULL) &&
-	(!xmlStrEqual(wild->negNsSet->value, ns)))
-	return(0);
-
-    return(1);
-}
-
-#define XML_SCHEMA_ACTION_DERIVE 0
-#define XML_SCHEMA_ACTION_REDEFINE 1
-
-#define WXS_ACTION_STR(a) \
-((a) == XML_SCHEMA_ACTION_DERIVE) ? (const xmlChar *) "base" : (const xmlChar *) "redefined"
-
-/*
-* Schema Component Constraint:
-*   Derivation Valid (Restriction, Complex)
-*   derivation-ok-restriction (2) - (4)
-*
-* ATTENTION:
-* In XML Schema 1.1 this will be:
-* Validation Rule:
-*     Checking complex type subsumption (practicalSubsumption) (1, 2 and 3)
-*
-*/
-static int
-xmlSchemaCheckDerivationOKRestriction2to4(xmlSchemaParserCtxtPtr pctxt,
-				       int action,
-				       xmlSchemaBasicItemPtr item,
-				       xmlSchemaBasicItemPtr baseItem,
-				       xmlSchemaItemListPtr uses,
-				       xmlSchemaItemListPtr baseUses,
-				       xmlSchemaWildcardPtr wild,
-				       xmlSchemaWildcardPtr baseWild)
-{
-    xmlSchemaAttributeUsePtr cur = NULL, bcur;
-    int i, j, found; /* err = 0; */
-    const xmlChar *bEffValue;
-    int effFixed;
-
-    if (uses != NULL) {
-	for (i = 0; i < uses->nbItems; i++) {
-	    cur = uses->items[i];
-	    found = 0;
-	    if (baseUses == NULL)
-		goto not_found;
-	    for (j = 0; j < baseUses->nbItems; j++) {
-		bcur = baseUses->items[j];
-		if ((WXS_ATTRUSE_DECL_NAME(cur) ==
-			WXS_ATTRUSE_DECL_NAME(bcur)) &&
-		    (WXS_ATTRUSE_DECL_TNS(cur) ==
-			WXS_ATTRUSE_DECL_TNS(bcur)))
-		{
-		    /*
-		    * (2.1) "If there is an attribute use in the {attribute
-		    * uses} of the {base type definition} (call this B) whose
-		    * {attribute declaration} has the same {name} and {target
-		    * namespace}, then  all of the following must be true:"
-		    */
-		    found = 1;
-
-		    if ((cur->occurs == XML_SCHEMAS_ATTR_USE_OPTIONAL) &&
-			(bcur->occurs == XML_SCHEMAS_ATTR_USE_REQUIRED))
-		    {
-			xmlChar *str = NULL;
-			/*
-			* (2.1.1) "one of the following must be true:"
-			* (2.1.1.1) "B's {required} is false."
-			* (2.1.1.2) "R's {required} is true."
-			*/
-			xmlSchemaPAttrUseErr4(pctxt,
-			    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1,
-			    WXS_ITEM_NODE(item), item, cur,
-			    "The 'optional' attribute use is inconsistent "
-			    "with the corresponding 'required' attribute use of "
-			    "the %s %s",
-			    WXS_ACTION_STR(action),
-			    xmlSchemaGetComponentDesignation(&str, baseItem),
-			    NULL, NULL);
-			FREE_AND_NULL(str);
-			/* err = pctxt->err; */
-		    } else if (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt,
-			WXS_ATTRUSE_TYPEDEF(cur),
-			WXS_ATTRUSE_TYPEDEF(bcur), 0) != 0)
-		    {
-			xmlChar *strA = NULL, *strB = NULL, *strC = NULL;
-
-			/*
-			* SPEC (2.1.2) "R's {attribute declaration}'s
-			* {type definition} must be validly derived from
-			* B's {type definition} given the empty set as
-			* defined in Type Derivation OK (Simple) ($3.14.6)."
-			*/
-			xmlSchemaPAttrUseErr4(pctxt,
-			    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2,
-			    WXS_ITEM_NODE(item), item, cur,
-			    "The attribute declaration's %s "
-			    "is not validly derived from "
-			    "the corresponding %s of the "
-			    "attribute declaration in the %s %s",
-			    xmlSchemaGetComponentDesignation(&strA,
-				WXS_ATTRUSE_TYPEDEF(cur)),
-			    xmlSchemaGetComponentDesignation(&strB,
-				WXS_ATTRUSE_TYPEDEF(bcur)),
-			    WXS_ACTION_STR(action),
-			    xmlSchemaGetComponentDesignation(&strC, baseItem));
-			    /* xmlSchemaGetComponentDesignation(&str, baseItem), */
-			FREE_AND_NULL(strA);
-			FREE_AND_NULL(strB);
-			FREE_AND_NULL(strC);
-			/* err = pctxt->err; */
-		    } else {
-			/*
-			* 2.1.3 [Definition:]  Let the effective value
-			* constraint of an attribute use be its {value
-			* constraint}, if present, otherwise its {attribute
-			* declaration}'s {value constraint} .
-			*/
-			xmlSchemaGetEffectiveValueConstraint(bcur,
-			    &effFixed, &bEffValue, NULL);
-			/*
-			* 2.1.3 ... one of the following must be true
-			*
-			* 2.1.3.1 B's `effective value constraint` is
-			* `absent` or default.
-			*/
-			if ((bEffValue != NULL) &&
-			    (effFixed == 1)) {
-			    const xmlChar *rEffValue = NULL;
-
-			    xmlSchemaGetEffectiveValueConstraint(bcur,
-				&effFixed, &rEffValue, NULL);
-			    /*
-			    * 2.1.3.2 R's `effective value constraint` is
-			    * fixed with the same string as B's.
-			    * MAYBE TODO: Compare the computed values.
-			    *       Hmm, it says "same string" so
-			    *       string-equality might really be sufficient.
-			    */
-			    if ((effFixed == 0) ||
-				(! WXS_ARE_DEFAULT_STR_EQUAL(rEffValue, bEffValue)))
-			    {
-				xmlChar *str = NULL;
-
-				xmlSchemaPAttrUseErr4(pctxt,
-				    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3,
-				    WXS_ITEM_NODE(item), item, cur,
-				    "The effective value constraint of the "
-				    "attribute use is inconsistent with "
-				    "its correspondent in the %s %s",
-				    WXS_ACTION_STR(action),
-				    xmlSchemaGetComponentDesignation(&str,
-					baseItem),
-				    NULL, NULL);
-				FREE_AND_NULL(str);
-				/* err = pctxt->err; */
-			    }
-			}
-		    }
-		    break;
-		}
-	    }
-not_found:
-	    if (!found) {
-		/*
-		* (2.2) "otherwise the {base type definition} must have an
-		* {attribute wildcard} and the {target namespace} of the
-		* R's {attribute declaration} must be `valid` with respect
-		* to that wildcard, as defined in Wildcard allows Namespace
-		* Name ($3.10.4)."
-		*/
-		if ((baseWild == NULL) ||
-		    (xmlSchemaCheckCVCWildcardNamespace(baseWild,
-		    (WXS_ATTRUSE_DECL(cur))->targetNamespace) != 0))
-		{
-		    xmlChar *str = NULL;
-
-		    xmlSchemaPAttrUseErr4(pctxt,
-			XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2,
-			WXS_ITEM_NODE(item), item, cur,
-			"Neither a matching attribute use, "
-			"nor a matching wildcard exists in the %s %s",
-			WXS_ACTION_STR(action),
-			xmlSchemaGetComponentDesignation(&str, baseItem),
-			NULL, NULL);
-		    FREE_AND_NULL(str);
-		    /* err = pctxt->err; */
-		}
-	    }
-	}
-    }
-    /*
-    * SPEC derivation-ok-restriction (3):
-    * (3) "For each attribute use in the {attribute uses} of the {base type
-    * definition} whose {required} is true, there must be an attribute
-    * use with an {attribute declaration} with the same {name} and
-    * {target namespace} as its {attribute declaration} in the {attribute
-    * uses} of the complex type definition itself whose {required} is true.
-    */
-    if (baseUses != NULL) {
-	for (j = 0; j < baseUses->nbItems; j++) {
-	    bcur = baseUses->items[j];
-	    if (bcur->occurs != XML_SCHEMAS_ATTR_USE_REQUIRED)
-		continue;
-	    found = 0;
-	    if (uses != NULL) {
-		for (i = 0; i < uses->nbItems; i++) {
-		    cur = uses->items[i];
-		    if ((WXS_ATTRUSE_DECL_NAME(cur) ==
-			WXS_ATTRUSE_DECL_NAME(bcur)) &&
-			(WXS_ATTRUSE_DECL_TNS(cur) ==
-			WXS_ATTRUSE_DECL_TNS(bcur))) {
-			found = 1;
-			break;
-		    }
-		}
-	    }
-	    if (!found) {
-		xmlChar *strA = NULL, *strB = NULL;
-
-		xmlSchemaCustomErr4(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3,
-		    NULL, item,
-		    "A matching attribute use for the "
-		    "'required' %s of the %s %s is missing",
-		    xmlSchemaGetComponentDesignation(&strA, bcur),
-		    WXS_ACTION_STR(action),
-		    xmlSchemaGetComponentDesignation(&strB, baseItem),
-		    NULL);
-		FREE_AND_NULL(strA);
-		FREE_AND_NULL(strB);
-	    }
-	}
-    }
-    /*
-    * derivation-ok-restriction (4)
-    */
-    if (wild != NULL) {
-	/*
-	* (4) "If there is an {attribute wildcard}, all of the
-	* following must be true:"
-	*/
-	if (baseWild == NULL) {
-	    xmlChar *str = NULL;
-
-	    /*
-	    * (4.1) "The {base type definition} must also have one."
-	    */
-	    xmlSchemaCustomErr4(ACTXT_CAST pctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1,
-		NULL, item,
-		"The %s has an attribute wildcard, "
-		"but the %s %s '%s' does not have one",
-		WXS_ITEM_TYPE_NAME(item),
-		WXS_ACTION_STR(action),
-		WXS_ITEM_TYPE_NAME(baseItem),
-		xmlSchemaGetComponentQName(&str, baseItem));
-	    FREE_AND_NULL(str);
-	    return(pctxt->err);
-	} else if ((baseWild->any == 0) &&
-		xmlSchemaCheckCOSNSSubset(wild, baseWild))
-	{
-	    xmlChar *str = NULL;
-	    /*
-	    * (4.2) "The complex type definition's {attribute wildcard}'s
-	    * {namespace constraint} must be a subset of the {base type
-	    * definition}'s {attribute wildcard}'s {namespace constraint},
-	    * as defined by Wildcard Subset ($3.10.6)."
-	    */
-	    xmlSchemaCustomErr4(ACTXT_CAST pctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2,
-		NULL, item,
-		"The attribute wildcard is not a valid "
-		"subset of the wildcard in the %s %s '%s'",
-		WXS_ACTION_STR(action),
-		WXS_ITEM_TYPE_NAME(baseItem),
-		xmlSchemaGetComponentQName(&str, baseItem),
-		NULL);
-	    FREE_AND_NULL(str);
-	    return(pctxt->err);
-	}
-	/* 4.3 Unless the {base type definition} is the `ur-type
-	* definition`, the complex type definition's {attribute
-	* wildcard}'s {process contents} must be identical to or
-	* stronger than the {base type definition}'s {attribute
-	* wildcard}'s {process contents}, where strict is stronger
-	* than lax is stronger than skip.
-	*/
-	if ((! WXS_IS_ANYTYPE(baseItem)) &&
-	    (wild->processContents < baseWild->processContents)) {
-	    xmlChar *str = NULL;
-	    xmlSchemaCustomErr4(ACTXT_CAST pctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3,
-		NULL, baseItem,
-		"The {process contents} of the attribute wildcard is "
-		"weaker than the one in the %s %s '%s'",
-		WXS_ACTION_STR(action),
-		WXS_ITEM_TYPE_NAME(baseItem),
-		xmlSchemaGetComponentQName(&str, baseItem),
-		NULL);
-	    FREE_AND_NULL(str)
-		return(pctxt->err);
-	}
-    }
-    return(0);
-}
-
-
-static int
-xmlSchemaExpandAttributeGroupRefs(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaBasicItemPtr item,
-				  xmlSchemaWildcardPtr *completeWild,
-				  xmlSchemaItemListPtr list,
-				  xmlSchemaItemListPtr prohibs);
-/**
- * xmlSchemaFixupTypeAttributeUses:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- *
- * Builds the wildcard and the attribute uses on the given complex type.
- * Returns -1 if an internal error occurs, 0 otherwise.
- *
- * ATTENTION TODO: Experimantally this uses pointer comparisons for
- * strings, so recheck this if we start to hardcode some schemata, since
- * they might not be in the same dict.
- * NOTE: It is allowed to "extend" the xs:anyType type.
- */
-static int
-xmlSchemaFixupTypeAttributeUses(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr baseType = NULL;
-    xmlSchemaAttributeUsePtr use;
-    xmlSchemaItemListPtr uses, baseUses, prohibs = NULL;
-
-    if (type->baseType == NULL) {
-	PERROR_INT("xmlSchemaFixupTypeAttributeUses",
-	    "no base type");
-        return (-1);
-    }
-    baseType = type->baseType;
-    if (WXS_IS_TYPE_NOT_FIXED(baseType))
-	if (xmlSchemaTypeFixup(baseType, ACTXT_CAST pctxt) == -1)
-	    return(-1);
-
-    uses = type->attrUses;
-    baseUses = baseType->attrUses;
-    /*
-    * Expand attribute group references. And build the 'complete'
-    * wildcard, i.e. intersect multiple wildcards.
-    * Move attribute prohibitions into a separate list.
-    */
-    if (uses != NULL) {
-	if (WXS_IS_RESTRICTION(type)) {
-	    /*
-	    * This one will transfer all attr. prohibitions
-	    * into pctxt->attrProhibs.
-	    */
-	    if (xmlSchemaExpandAttributeGroupRefs(pctxt,
-		WXS_BASIC_CAST type, &(type->attributeWildcard), uses,
-		pctxt->attrProhibs) == -1)
-	    {
-		PERROR_INT("xmlSchemaFixupTypeAttributeUses",
-		"failed to expand attributes");
-	    }
-	    if (pctxt->attrProhibs->nbItems != 0)
-		prohibs = pctxt->attrProhibs;
-	} else {
-	    if (xmlSchemaExpandAttributeGroupRefs(pctxt,
-		WXS_BASIC_CAST type, &(type->attributeWildcard), uses,
-		NULL) == -1)
-	    {
-		PERROR_INT("xmlSchemaFixupTypeAttributeUses",
-		"failed to expand attributes");
-	    }
-	}
-    }
-    /*
-    * Inherit the attribute uses of the base type.
-    */
-    if (baseUses != NULL) {
-	int i, j;
-	xmlSchemaAttributeUseProhibPtr pro;
-
-	if (WXS_IS_RESTRICTION(type)) {
-	    int usesCount;
-	    xmlSchemaAttributeUsePtr tmp;
-
-	    if (uses != NULL)
-		usesCount = uses->nbItems;
-	    else
-		usesCount = 0;
-
-	    /* Restriction. */
-	    for (i = 0; i < baseUses->nbItems; i++) {
-		use = baseUses->items[i];
-		if (prohibs) {
-		    /*
-		    * Filter out prohibited uses.
-		    */
-		    for (j = 0; j < prohibs->nbItems; j++) {
-			pro = prohibs->items[j];
-			if ((WXS_ATTRUSE_DECL_NAME(use) == pro->name) &&
-			    (WXS_ATTRUSE_DECL_TNS(use) ==
-				pro->targetNamespace))
-			{
-			    goto inherit_next;
-			}
-		    }
-		}
-		if (usesCount) {
-		    /*
-		    * Filter out existing uses.
-		    */
-		    for (j = 0; j < usesCount; j++) {
-			tmp = uses->items[j];
-			if ((WXS_ATTRUSE_DECL_NAME(use) ==
-				WXS_ATTRUSE_DECL_NAME(tmp)) &&
-			    (WXS_ATTRUSE_DECL_TNS(use) ==
-				WXS_ATTRUSE_DECL_TNS(tmp)))
-			{
-			    goto inherit_next;
-			}
-		    }
-		}
-		if (uses == NULL) {
-		    type->attrUses = xmlSchemaItemListCreate();
-		    if (type->attrUses == NULL)
-			goto exit_failure;
-		    uses = type->attrUses;
-		}
-		xmlSchemaItemListAddSize(uses, 2, use);
-inherit_next: {}
-	    }
-	} else {
-	    /* Extension. */
-	    for (i = 0; i < baseUses->nbItems; i++) {
-		use = baseUses->items[i];
-		if (uses == NULL) {
-		    type->attrUses = xmlSchemaItemListCreate();
-		    if (type->attrUses == NULL)
-			goto exit_failure;
-		    uses = type->attrUses;
-		}
-		xmlSchemaItemListAddSize(uses, baseUses->nbItems, use);
-	    }
-	}
-    }
-    /*
-    * Shrink attr. uses.
-    */
-    if (uses) {
-	if (uses->nbItems == 0) {
-	    xmlSchemaItemListFree(uses);
-	    type->attrUses = NULL;
-	}
-	/*
-	* TODO: We could shrink the size of the array
-	* to fit the actual number of items.
-	*/
-    }
-    /*
-    * Compute the complete wildcard.
-    */
-    if (WXS_IS_EXTENSION(type)) {
-	if (baseType->attributeWildcard != NULL) {
-	    /*
-	    * (3.2.2.1) "If the `base wildcard` is non-`absent`, then
-	    * the appropriate case among the following:"
-	    */
-	    if (type->attributeWildcard != NULL) {
-		/*
-		* Union the complete wildcard with the base wildcard.
-		* SPEC {attribute wildcard}
-		* (3.2.2.1.2) "otherwise a wildcard whose {process contents}
-		* and {annotation} are those of the `complete wildcard`,
-		* and whose {namespace constraint} is the intensional union
-		* of the {namespace constraint} of the `complete wildcard`
-		* and of the `base wildcard`, as defined in Attribute
-		* Wildcard Union ($3.10.6)."
-		*/
-		if (xmlSchemaUnionWildcards(pctxt, type->attributeWildcard,
-		    baseType->attributeWildcard) == -1)
-		    goto exit_failure;
-	    } else {
-		/*
-		* (3.2.2.1.1) "If the `complete wildcard` is `absent`,
-		* then the `base wildcard`."
-		*/
-		type->attributeWildcard = baseType->attributeWildcard;
-	    }
-	} else {
-	    /*
-	    * (3.2.2.2) "otherwise (the `base wildcard` is `absent`) the
-	    * `complete wildcard`"
-	    * NOOP
-	    */
-	}
-    } else {
-	/*
-	* SPEC {attribute wildcard}
-	* (3.1) "If the <restriction> alternative is chosen, then the
-	* `complete wildcard`;"
-	* NOOP
-	*/
-    }
-
-    return (0);
-
-exit_failure:
-    return(-1);
-}
-
-/**
- * xmlSchemaTypeFinalContains:
- * @schema:  the schema
- * @type:  the type definition
- * @final: the final
- *
- * Evaluates if a type definition contains the given "final".
- * This does take "finalDefault" into account as well.
- *
- * Returns 1 if the type does containt the given "final",
- * 0 otherwise.
- */
-static int
-xmlSchemaTypeFinalContains(xmlSchemaTypePtr type, int final)
-{
-    if (type == NULL)
-	return (0);
-    if (type->flags & final)
-	return (1);
-    else
-	return (0);
-}
-
-/**
- * xmlSchemaGetUnionSimpleTypeMemberTypes:
- * @type:  the Union Simple Type
- *
- * Returns a list of member types of @type if existing,
- * returns NULL otherwise.
- */
-static xmlSchemaTypeLinkPtr
-xmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type)
-{
-    while ((type != NULL) && (type->type == XML_SCHEMA_TYPE_SIMPLE)) {
-	if (type->memberTypes != NULL)
-	    return (type->memberTypes);
-	else
-	    type = type->baseType;
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaGetParticleTotalRangeMin:
- * @particle: the particle
- *
- * Schema Component Constraint: Effective Total Range
- * (all and sequence) + (choice)
- *
- * Returns the minimun Effective Total Range.
- */
-static int
-xmlSchemaGetParticleTotalRangeMin(xmlSchemaParticlePtr particle)
-{
-    if ((particle->children == NULL) ||
-	(particle->minOccurs == 0))
-	return (0);
-    if (particle->children->type == XML_SCHEMA_TYPE_CHOICE) {
-	int min = -1, cur;
-	xmlSchemaParticlePtr part =
-	    (xmlSchemaParticlePtr) particle->children->children;
-
-	if (part == NULL)
-	    return (0);
-	while (part != NULL) {
-	    if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
-		(part->children->type == XML_SCHEMA_TYPE_ANY))
-		cur = part->minOccurs;
-	    else
-		cur = xmlSchemaGetParticleTotalRangeMin(part);
-	    if (cur == 0)
-		return (0);
-	    if ((min > cur) || (min == -1))
-		min = cur;
-	    part = (xmlSchemaParticlePtr) part->next;
-	}
-	return (particle->minOccurs * min);
-    } else {
-	/* <all> and <sequence> */
-	int sum = 0;
-	xmlSchemaParticlePtr part =
-	    (xmlSchemaParticlePtr) particle->children->children;
-
-	if (part == NULL)
-	    return (0);
-	do {
-	    if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
-		(part->children->type == XML_SCHEMA_TYPE_ANY))
-		sum += part->minOccurs;
-	    else
-		sum += xmlSchemaGetParticleTotalRangeMin(part);
-	    part = (xmlSchemaParticlePtr) part->next;
-	} while (part != NULL);
-	return (particle->minOccurs * sum);
-    }
-}
-
-#if 0
-/**
- * xmlSchemaGetParticleTotalRangeMax:
- * @particle: the particle
- *
- * Schema Component Constraint: Effective Total Range
- * (all and sequence) + (choice)
- *
- * Returns the maximum Effective Total Range.
- */
-static int
-xmlSchemaGetParticleTotalRangeMax(xmlSchemaParticlePtr particle)
-{
-    if ((particle->children == NULL) ||
-	(particle->children->children == NULL))
-	return (0);
-    if (particle->children->type == XML_SCHEMA_TYPE_CHOICE) {
-	int max = -1, cur;
-	xmlSchemaParticlePtr part =
-	    (xmlSchemaParticlePtr) particle->children->children;
-
-	for (; part != NULL; part = (xmlSchemaParticlePtr) part->next) {
-	    if (part->children == NULL)
-		continue;
-	    if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
-		(part->children->type == XML_SCHEMA_TYPE_ANY))
-		cur = part->maxOccurs;
-	    else
-		cur = xmlSchemaGetParticleTotalRangeMax(part);
-	    if (cur == UNBOUNDED)
-		return (UNBOUNDED);
-	    if ((max < cur) || (max == -1))
-		max = cur;
-	}
-	/* TODO: Handle overflows? */
-	return (particle->maxOccurs * max);
-    } else {
-	/* <all> and <sequence> */
-	int sum = 0, cur;
-	xmlSchemaParticlePtr part =
-	    (xmlSchemaParticlePtr) particle->children->children;
-
-	for (; part != NULL; part = (xmlSchemaParticlePtr) part->next) {
-	    if (part->children == NULL)
-		continue;
-	    if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
-		(part->children->type == XML_SCHEMA_TYPE_ANY))
-		cur = part->maxOccurs;
-	    else
-		cur = xmlSchemaGetParticleTotalRangeMax(part);
-	    if (cur == UNBOUNDED)
-		return (UNBOUNDED);
-	    if ((cur > 0) && (particle->maxOccurs == UNBOUNDED))
-		return (UNBOUNDED);
-	    sum += cur;
-	}
-	/* TODO: Handle overflows? */
-	return (particle->maxOccurs * sum);
-    }
-}
-#endif
-
-/**
- * xmlSchemaIsParticleEmptiable:
- * @particle: the particle
- *
- * Schema Component Constraint: Particle Emptiable
- * Checks whether the given particle is emptiable.
- *
- * Returns 1 if emptiable, 0 otherwise.
- */
-static int
-xmlSchemaIsParticleEmptiable(xmlSchemaParticlePtr particle)
-{
-    /*
-    * SPEC (1) "Its {min occurs} is 0."
-    */
-    if ((particle == NULL) || (particle->minOccurs == 0) ||
-	(particle->children == NULL))
-	return (1);
-    /*
-    * SPEC (2) "Its {term} is a group and the minimum part of the
-    * effective total range of that group, [...] is 0."
-    */
-    if (WXS_IS_MODEL_GROUP(particle->children)) {
-	if (xmlSchemaGetParticleTotalRangeMin(particle) == 0)
-	    return (1);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaCheckCOSSTDerivedOK:
- * @actxt: a context
- * @type:  the derived simple type definition
- * @baseType:  the base type definition
- * @subset: the subset of ('restriction', ect.)
- *
- * Schema Component Constraint:
- * Type Derivation OK (Simple) (cos-st-derived-OK)
- *
- * Checks wheter @type can be validly
- * derived from @baseType.
- *
- * Returns 0 on success, an positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
-			     xmlSchemaTypePtr type,
-			     xmlSchemaTypePtr baseType,
-			     int subset)
-{
-    /*
-    * 1 They are the same type definition.
-    * TODO: The identy check might have to be more complex than this.
-    */
-    if (type == baseType)
-	return (0);
-    /*
-    * 2.1 restriction is not in the subset, or in the {final}
-    * of its own {base type definition};
-    *
-    * NOTE that this will be used also via "xsi:type".
-    *
-    * TODO: Revise this, it looks strange. How can the "type"
-    * not be fixed or *in* fixing?
-    */
-    if (WXS_IS_TYPE_NOT_FIXED(type))
-	if (xmlSchemaTypeFixup(type, actxt) == -1)
-	    return(-1);
-    if (WXS_IS_TYPE_NOT_FIXED(baseType))
-	if (xmlSchemaTypeFixup(baseType, actxt) == -1)
-	    return(-1);
-    if ((subset & SUBSET_RESTRICTION) ||
-	(xmlSchemaTypeFinalContains(type->baseType,
-	    XML_SCHEMAS_TYPE_FINAL_RESTRICTION))) {
-	return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_1);
-    }
-    /* 2.2 */
-    if (type->baseType == baseType) {
-	/*
-	* 2.2.1 D's `base type definition` is B.
-	*/
-	return (0);
-    }
-    /*
-    * 2.2.2 D's `base type definition` is not the `ur-type definition`
-    * and is validly derived from B given the subset, as defined by this
-    * constraint.
-    */
-    if ((! WXS_IS_ANYTYPE(type->baseType)) &&
-	(xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType,
-	    baseType, subset) == 0)) {
-	return (0);
-    }
-    /*
-    * 2.2.3 D's {variety} is list or union and B is the `simple ur-type
-    * definition`.
-    */
-    if (WXS_IS_ANY_SIMPLE_TYPE(baseType) &&
-	(WXS_IS_LIST(type) || WXS_IS_UNION(type))) {
-	return (0);
-    }
-    /*
-    * 2.2.4 B's {variety} is union and D is validly derived from a type
-    * definition in B's {member type definitions} given the subset, as
-    * defined by this constraint.
-    *
-    * NOTE: This seems not to involve built-in types, since there is no
-    * built-in Union Simple Type.
-    */
-    if (WXS_IS_UNION(baseType)) {
-	xmlSchemaTypeLinkPtr cur;
-
-	cur = baseType->memberTypes;
-	while (cur != NULL) {
-	    if (WXS_IS_TYPE_NOT_FIXED(cur->type))
-		if (xmlSchemaTypeFixup(cur->type, actxt) == -1)
-		    return(-1);
-	    if (xmlSchemaCheckCOSSTDerivedOK(actxt,
-		    type, cur->type, subset) == 0)
-	    {
-		/*
-		* It just has to be validly derived from at least one
-		* member-type.
-		*/
-		return (0);
-	    }
-	    cur = cur->next;
-	}
-    }
-    return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_2);
-}
-
-/**
- * xmlSchemaCheckTypeDefCircularInternal:
- * @pctxt:  the schema parser context
- * @ctxtType:  the type definition
- * @ancestor: an ancestor of @ctxtType
- *
- * Checks st-props-correct (2) + ct-props-correct (3).
- * Circular type definitions are not allowed.
- *
- * Returns XML_SCHEMAP_ST_PROPS_CORRECT_2 if the given type is
- * circular, 0 otherwise.
- */
-static int
-xmlSchemaCheckTypeDefCircularInternal(xmlSchemaParserCtxtPtr pctxt,
-			   xmlSchemaTypePtr ctxtType,
-			   xmlSchemaTypePtr ancestor)
-{
-    int ret;
-
-    if ((ancestor == NULL) || (ancestor->type == XML_SCHEMA_TYPE_BASIC))
-	return (0);
-
-    if (ctxtType == ancestor) {
-	xmlSchemaPCustomErr(pctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_2,
-	    WXS_BASIC_CAST ctxtType, WXS_ITEM_NODE(ctxtType),
-	    "The definition is circular", NULL);
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_2);
-    }
-    if (ancestor->flags & XML_SCHEMAS_TYPE_MARKED) {
-	/*
-	* Avoid inifinite recursion on circular types not yet checked.
-	*/
-	return (0);
-    }
-    ancestor->flags |= XML_SCHEMAS_TYPE_MARKED;
-    ret = xmlSchemaCheckTypeDefCircularInternal(pctxt, ctxtType,
-	ancestor->baseType);
-    ancestor->flags ^= XML_SCHEMAS_TYPE_MARKED;
-    return (ret);
-}
-
-/**
- * xmlSchemaCheckTypeDefCircular:
- * @item:  the complex/simple type definition
- * @ctxt:  the parser context
- * @name:  the name
- *
- * Checks for circular type definitions.
- */
-static void
-xmlSchemaCheckTypeDefCircular(xmlSchemaTypePtr item,
-			      xmlSchemaParserCtxtPtr ctxt)
-{
-    if ((item == NULL) ||
-	(item->type == XML_SCHEMA_TYPE_BASIC) ||
-	(item->baseType == NULL))
-	return;
-    xmlSchemaCheckTypeDefCircularInternal(ctxt, item,
-	item->baseType);
-}
-
-/*
-* Simple Type Definition Representation OK (src-simple-type) 4
-*
-* "4 Circular union type definition is disallowed. That is, if the
-* <union> alternative is chosen, there must not be any entries in the
-* memberTypes [attribute] at any depth which resolve to the component
-* corresponding to the <simpleType>."
-*
-* Note that this should work on the *representation* of a component,
-* thus assumes any union types in the member types not being yet
-* substituted. At this stage we need the variety of the types
-* to be already computed.
-*/
-static int
-xmlSchemaCheckUnionTypeDefCircularRecur(xmlSchemaParserCtxtPtr pctxt,
-					xmlSchemaTypePtr ctxType,
-					xmlSchemaTypeLinkPtr members)
-{
-    xmlSchemaTypeLinkPtr member;
-    xmlSchemaTypePtr memberType;
-
-    member = members;
-    while (member != NULL) {
-	memberType = member->type;
-	while ((memberType != NULL) &&
-	    (memberType->type != XML_SCHEMA_TYPE_BASIC)) {
-	    if (memberType == ctxType) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_SRC_SIMPLE_TYPE_4,
-		    WXS_BASIC_CAST ctxType, NULL,
-		    "The union type definition is circular", NULL);
-		return (XML_SCHEMAP_SRC_SIMPLE_TYPE_4);
-	    }
-	    if ((WXS_IS_UNION(memberType)) &&
-		((memberType->flags & XML_SCHEMAS_TYPE_MARKED) == 0))
-	    {
-		int res;
-		memberType->flags |= XML_SCHEMAS_TYPE_MARKED;
-		res = xmlSchemaCheckUnionTypeDefCircularRecur(pctxt,
-		    ctxType,
-		    xmlSchemaGetUnionSimpleTypeMemberTypes(memberType));
-		memberType->flags ^= XML_SCHEMAS_TYPE_MARKED;
-		if (res != 0)
-		    return(res);
-	    }
-	    memberType = memberType->baseType;
-	}
-	member = member->next;
-    }
-    return(0);
-}
-
-static int
-xmlSchemaCheckUnionTypeDefCircular(xmlSchemaParserCtxtPtr pctxt,
-				   xmlSchemaTypePtr type)
-{
-    if (! WXS_IS_UNION(type))
-	return(0);
-    return(xmlSchemaCheckUnionTypeDefCircularRecur(pctxt, type,
-	type->memberTypes));
-}
-
-/**
- * xmlSchemaResolveTypeReferences:
- * @item:  the complex/simple type definition
- * @ctxt:  the parser context
- * @name:  the name
- *
- * Resolvese type definition references
- */
-static void
-xmlSchemaResolveTypeReferences(xmlSchemaTypePtr typeDef,
-			 xmlSchemaParserCtxtPtr ctxt)
-{
-    if (typeDef == NULL)
-	return;
-
-    /*
-    * Resolve the base type.
-    */
-    if (typeDef->baseType == NULL) {
-	typeDef->baseType = xmlSchemaGetType(ctxt->schema,
-	    typeDef->base, typeDef->baseNs);
-	if (typeDef->baseType == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST typeDef, typeDef->node,
-		"base", typeDef->base, typeDef->baseNs,
-		XML_SCHEMA_TYPE_SIMPLE, NULL);
-	    return;
-	}
-    }
-    if (WXS_IS_SIMPLE(typeDef)) {
-	if (WXS_IS_UNION(typeDef)) {
-	    /*
-	    * Resolve the memberTypes.
-	    */
-	    xmlSchemaResolveUnionMemberTypes(ctxt, typeDef);
-	    return;
-	} else if (WXS_IS_LIST(typeDef)) {
-	    /*
-	    * Resolve the itemType.
-	    */
-	    if ((typeDef->subtypes == NULL) && (typeDef->base != NULL)) {
-
-		typeDef->subtypes = xmlSchemaGetType(ctxt->schema,
-		    typeDef->base, typeDef->baseNs);
-
-		if ((typeDef->subtypes == NULL) ||
-		    (! WXS_IS_SIMPLE(typeDef->subtypes)))
-		{
-		    typeDef->subtypes = NULL;
-		    xmlSchemaPResCompAttrErr(ctxt,
-			XML_SCHEMAP_SRC_RESOLVE,
-			WXS_BASIC_CAST typeDef, typeDef->node,
-			"itemType", typeDef->base, typeDef->baseNs,
-			XML_SCHEMA_TYPE_SIMPLE, NULL);
-		}
-	    }
-	    return;
-	}
-    }
-    /*
-    * The ball of letters below means, that if we have a particle
-    * which has a QName-helper component as its {term}, we want
-    * to resolve it...
-    */
-    else if ((WXS_TYPE_CONTENTTYPE(typeDef) != NULL) &&
-	((WXS_TYPE_CONTENTTYPE(typeDef))->type ==
-	    XML_SCHEMA_TYPE_PARTICLE) &&
-	(WXS_TYPE_PARTICLE_TERM(typeDef) != NULL) &&
-	((WXS_TYPE_PARTICLE_TERM(typeDef))->type ==
-	    XML_SCHEMA_EXTRA_QNAMEREF))
-    {
-	xmlSchemaQNameRefPtr ref =
-	    WXS_QNAME_CAST WXS_TYPE_PARTICLE_TERM(typeDef);
-	xmlSchemaModelGroupDefPtr groupDef;
-
-	/*
-	* URGENT TODO: Test this.
-	*/
-	WXS_TYPE_PARTICLE_TERM(typeDef) = NULL;
-	/*
-	* Resolve the MG definition reference.
-	*/
-	groupDef =
-	    WXS_MODEL_GROUPDEF_CAST xmlSchemaGetNamedComponent(ctxt->schema,
-		ref->itemType, ref->name, ref->targetNamespace);
-	if (groupDef == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
-		NULL, WXS_ITEM_NODE(WXS_TYPE_PARTICLE(typeDef)),
-		"ref", ref->name, ref->targetNamespace, ref->itemType,
-		NULL);
-	    /* Remove the particle. */
-	    WXS_TYPE_CONTENTTYPE(typeDef) = NULL;
-	} else if (WXS_MODELGROUPDEF_MODEL(groupDef) == NULL)
-	    /* Remove the particle. */
-	    WXS_TYPE_CONTENTTYPE(typeDef) = NULL;
-	else {
-	    /*
-	    * Assign the MG definition's {model group} to the
-	    * particle's {term}.
-	    */
-	    WXS_TYPE_PARTICLE_TERM(typeDef) = WXS_MODELGROUPDEF_MODEL(groupDef);
-
-	    if (WXS_MODELGROUPDEF_MODEL(groupDef)->type == XML_SCHEMA_TYPE_ALL) {
-		/*
-		* SPEC cos-all-limited (1.2)
-		* "1.2 the {term} property of a particle with
-		* {max occurs}=1 which is part of a pair which constitutes
-		* the {content type} of a complex type definition."
-		*/
-		if ((WXS_TYPE_PARTICLE(typeDef))->maxOccurs != 1) {
-		    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-			/* TODO: error code */
-			XML_SCHEMAP_COS_ALL_LIMITED,
-			WXS_ITEM_NODE(WXS_TYPE_PARTICLE(typeDef)), NULL,
-			"The particle's {max occurs} must be 1, since the "
-			"reference resolves to an 'all' model group",
-			NULL, NULL);
-		}
-	    }
-	}
-    }
-}
-
-
-
-/**
- * xmlSchemaCheckSTPropsCorrect:
- * @ctxt:  the schema parser context
- * @type:  the simple type definition
- *
- * Checks st-props-correct.
- *
- * Returns 0 if the properties are correct,
- * if not, a positive error code and -1 on internal
- * errors.
- */
-static int
-xmlSchemaCheckSTPropsCorrect(xmlSchemaParserCtxtPtr ctxt,
-			     xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr baseType = type->baseType;
-    xmlChar *str = NULL;
-
-    /* STATE: error funcs converted. */
-    /*
-    * Schema Component Constraint: Simple Type Definition Properties Correct
-    *
-    * NOTE: This is somehow redundant, since we actually built a simple type
-    * to have all the needed information; this acts as an self test.
-    */
-    /* Base type: If the datatype has been `derived` by `restriction`
-    * then the Simple Type Definition component from which it is `derived`,
-    * otherwise the Simple Type Definition for anySimpleType ($4.1.6).
-    */
-    if (baseType == NULL) {
-	/*
-	* TODO: Think about: "modulo the impact of Missing
-	* Sub-components ($5.3)."
-	*/
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_1,
-	    WXS_BASIC_CAST type, NULL,
-	    "No base type existent", NULL);
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
-
-    }
-    if (! WXS_IS_SIMPLE(baseType)) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_1,
-	    WXS_BASIC_CAST type, NULL,
-	    "The base type '%s' is not a simple type",
-	    xmlSchemaGetComponentQName(&str, baseType));
-	FREE_AND_NULL(str)
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
-    }
-    if ((WXS_IS_LIST(type) || WXS_IS_UNION(type)) &&
-	(WXS_IS_RESTRICTION(type) == 0) &&
-	((! WXS_IS_ANY_SIMPLE_TYPE(baseType)) &&
-         (baseType->type != XML_SCHEMA_TYPE_SIMPLE))) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_1,
-	    WXS_BASIC_CAST type, NULL,
-	    "A type, derived by list or union, must have "
-	    "the simple ur-type definition as base type, not '%s'",
-	    xmlSchemaGetComponentQName(&str, baseType));
-	FREE_AND_NULL(str)
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
-    }
-    /*
-    * Variety: One of {atomic, list, union}.
-    */
-    if ((! WXS_IS_ATOMIC(type)) && (! WXS_IS_UNION(type)) &&
-	(! WXS_IS_LIST(type))) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_1,
-	    WXS_BASIC_CAST type, NULL,
-	    "The variety is absent", NULL);
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
-    }
-    /* TODO: Finish this. Hmm, is this finished? */
-
-    /*
-    * 3 The {final} of the {base type definition} must not contain restriction.
-    */
-    if (xmlSchemaTypeFinalContains(baseType,
-	XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_ST_PROPS_CORRECT_3,
-	    WXS_BASIC_CAST type, NULL,
-	    "The 'final' of its base type '%s' must not contain "
-	    "'restriction'",
-	    xmlSchemaGetComponentQName(&str, baseType));
-	FREE_AND_NULL(str)
-	return (XML_SCHEMAP_ST_PROPS_CORRECT_3);
-    }
-
-    /*
-    * 2 All simple type definitions must be derived ultimately from the `simple
-    * ur-type definition` (so circular definitions are disallowed). That is, it
-    * must be possible to reach a built-in primitive datatype or the `simple
-    * ur-type definition` by repeatedly following the {base type definition}.
-    *
-    * NOTE: this is done in xmlSchemaCheckTypeDefCircular().
-    */
-    return (0);
-}
-
-/**
- * xmlSchemaCheckCOSSTRestricts:
- * @ctxt:  the schema parser context
- * @type:  the simple type definition
- *
- * Schema Component Constraint:
- * Derivation Valid (Restriction, Simple) (cos-st-restricts)
-
- * Checks if the given @type (simpleType) is derived validly by restriction.
- * STATUS:
- *
- * Returns -1 on internal errors, 0 if the type is validly derived,
- * a positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
-			     xmlSchemaTypePtr type)
-{
-    xmlChar *str = NULL;
-
-    if (type->type != XML_SCHEMA_TYPE_SIMPLE) {
-	PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-	    "given type is not a user-derived simpleType");
-	return (-1);
-    }
-
-    if (WXS_IS_ATOMIC(type)) {
-	xmlSchemaTypePtr primitive;
-	/*
-	* 1.1 The {base type definition} must be an atomic simple
-	* type definition or a built-in primitive datatype.
-	*/
-	if (! WXS_IS_ATOMIC(type->baseType)) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_COS_ST_RESTRICTS_1_1,
-		WXS_BASIC_CAST type, NULL,
-		"The base type '%s' is not an atomic simple type",
-		xmlSchemaGetComponentQName(&str, type->baseType));
-	    FREE_AND_NULL(str)
-	    return (XML_SCHEMAP_COS_ST_RESTRICTS_1_1);
-	}
-	/* 1.2 The {final} of the {base type definition} must not contain
-	* restriction.
-	*/
-	/* OPTIMIZE TODO : This is already done in xmlSchemaCheckStPropsCorrect */
-	if (xmlSchemaTypeFinalContains(type->baseType,
-	    XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_COS_ST_RESTRICTS_1_2,
-		WXS_BASIC_CAST type, NULL,
-		"The final of its base type '%s' must not contain 'restriction'",
-		xmlSchemaGetComponentQName(&str, type->baseType));
-	    FREE_AND_NULL(str)
-	    return (XML_SCHEMAP_COS_ST_RESTRICTS_1_2);
-	}
-
-	/*
-	* 1.3.1 DF must be an allowed constraining facet for the {primitive
-	* type definition}, as specified in the appropriate subsection of 3.2
-	* Primitive datatypes.
-	*/
-	if (type->facets != NULL) {
-	    xmlSchemaFacetPtr facet;
-	    int ok = 1;
-
-	    primitive = xmlSchemaGetPrimitiveType(type);
-	    if (primitive == NULL) {
-		PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-		    "failed to get primitive type");
-		return (-1);
-	    }
-	    facet = type->facets;
-	    do {
-		if (xmlSchemaIsBuiltInTypeFacet(primitive, facet->type) == 0) {
-		    ok = 0;
-		    xmlSchemaPIllegalFacetAtomicErr(pctxt,
-			XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1,
-			type, primitive, facet);
-		}
-		facet = facet->next;
-	    } while (facet != NULL);
-	    if (ok == 0)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1);
-	}
-	/*
-	* SPEC (1.3.2) "If there is a facet of the same kind in the {facets}
-	* of the {base type definition} (call this BF),then the DF's {value}
-	* must be a valid restriction of BF's {value} as defined in
-	* [XML Schemas: Datatypes]."
-	*
-	* NOTE (1.3.2) Facet derivation constraints are currently handled in
-	* xmlSchemaDeriveAndValidateFacets()
-	*/
-    } else if (WXS_IS_LIST(type)) {
-	xmlSchemaTypePtr itemType = NULL;
-
-	itemType = type->subtypes;
-	if ((itemType == NULL) || (! WXS_IS_SIMPLE(itemType))) {
-	    PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-		"failed to evaluate the item type");
-	    return (-1);
-	}
-	if (WXS_IS_TYPE_NOT_FIXED(itemType))
-	    xmlSchemaTypeFixup(itemType, ACTXT_CAST pctxt);
-	/*
-	* 2.1 The {item type definition} must have a {variety} of atomic or
-	* union (in which case all the {member type definitions}
-	* must be atomic).
-	*/
-	if ((! WXS_IS_ATOMIC(itemType)) &&
-	    (! WXS_IS_UNION(itemType))) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_COS_ST_RESTRICTS_2_1,
-		WXS_BASIC_CAST type, NULL,
-		"The item type '%s' does not have a variety of atomic or union",
-		xmlSchemaGetComponentQName(&str, itemType));
-	    FREE_AND_NULL(str)
-	    return (XML_SCHEMAP_COS_ST_RESTRICTS_2_1);
-	} else if (WXS_IS_UNION(itemType)) {
-	    xmlSchemaTypeLinkPtr member;
-
-	    member = itemType->memberTypes;
-	    while (member != NULL) {
-		if (! WXS_IS_ATOMIC(member->type)) {
-		    xmlSchemaPCustomErr(pctxt,
-			XML_SCHEMAP_COS_ST_RESTRICTS_2_1,
-			WXS_BASIC_CAST type, NULL,
-			"The item type is a union type, but the "
-			"member type '%s' of this item type is not atomic",
-			xmlSchemaGetComponentQName(&str, member->type));
-		    FREE_AND_NULL(str)
-		    return (XML_SCHEMAP_COS_ST_RESTRICTS_2_1);
-		}
-		member = member->next;
-	    }
-	}
-
-	if (WXS_IS_ANY_SIMPLE_TYPE(type->baseType)) {
-	    xmlSchemaFacetPtr facet;
-	    /*
-	    * This is the case if we have: <simpleType><list ..
-	    */
-	    /*
-	    * 2.3.1
-	    * 2.3.1.1 The {final} of the {item type definition} must not
-	    * contain list.
-	    */
-	    if (xmlSchemaTypeFinalContains(itemType,
-		XML_SCHEMAS_TYPE_FINAL_LIST)) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "The final of its item type '%s' must not contain 'list'",
-		    xmlSchemaGetComponentQName(&str, itemType));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1);
-	    }
-	    /*
-	    * 2.3.1.2 The {facets} must only contain the whiteSpace
-	    * facet component.
-	    * OPTIMIZE TODO: the S4S already disallows any facet
-	    * to be specified.
-	    */
-	    if (type->facets != NULL) {
-		facet = type->facets;
-		do {
-		    if (facet->type != XML_SCHEMA_FACET_WHITESPACE) {
-			xmlSchemaPIllegalFacetListUnionErr(pctxt,
-			    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2,
-			    type, facet);
-			return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2);
-		    }
-		    facet = facet->next;
-		} while (facet != NULL);
-	    }
-	    /*
-	    * MAYBE TODO: (Hmm, not really) Datatypes states:
-	    * A `list` datatype can be `derived` from an `atomic` datatype
-	    * whose `lexical space` allows space (such as string or anyURI)or
-	    * a `union` datatype any of whose {member type definitions}'s
-	    * `lexical space` allows space.
-	    */
-	} else {
-	    /*
-	    * This is the case if we have: <simpleType><restriction ...
-	    * I.e. the variety of "list" is inherited.
-	    */
-	    /*
-	    * 2.3.2
-	    * 2.3.2.1 The {base type definition} must have a {variety} of list.
-	    */
-	    if (! WXS_IS_LIST(type->baseType)) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "The base type '%s' must be a list type",
-		    xmlSchemaGetComponentQName(&str, type->baseType));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1);
-	    }
-	    /*
-	    * 2.3.2.2 The {final} of the {base type definition} must not
-	    * contain restriction.
-	    */
-	    if (xmlSchemaTypeFinalContains(type->baseType,
-		XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2,
-		    WXS_BASIC_CAST type, NULL,
-		    "The 'final' of the base type '%s' must not contain 'restriction'",
-		    xmlSchemaGetComponentQName(&str, type->baseType));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2);
-	    }
-	    /*
-	    * 2.3.2.3 The {item type definition} must be validly derived
-	    * from the {base type definition}'s {item type definition} given
-	    * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6).
-	    */
-	    {
-		xmlSchemaTypePtr baseItemType;
-
-		baseItemType = type->baseType->subtypes;
-		if ((baseItemType == NULL) || (! WXS_IS_SIMPLE(baseItemType))) {
-		    PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-			"failed to eval the item type of a base type");
-		    return (-1);
-		}
-		if ((itemType != baseItemType) &&
-		    (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt, itemType,
-			baseItemType, 0) != 0)) {
-		    xmlChar *strBIT = NULL, *strBT = NULL;
-		    xmlSchemaPCustomErrExt(pctxt,
-			XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3,
-			WXS_BASIC_CAST type, NULL,
-			"The item type '%s' is not validly derived from "
-			"the item type '%s' of the base type '%s'",
-			xmlSchemaGetComponentQName(&str, itemType),
-			xmlSchemaGetComponentQName(&strBIT, baseItemType),
-			xmlSchemaGetComponentQName(&strBT, type->baseType));
-
-		    FREE_AND_NULL(str)
-		    FREE_AND_NULL(strBIT)
-		    FREE_AND_NULL(strBT)
-		    return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3);
-		}
-	    }
-
-	    if (type->facets != NULL) {
-		xmlSchemaFacetPtr facet;
-		int ok = 1;
-		/*
-		* 2.3.2.4 Only length, minLength, maxLength, whiteSpace, pattern
-		* and enumeration facet components are allowed among the {facets}.
-		*/
-		facet = type->facets;
-		do {
-		    switch (facet->type) {
-			case XML_SCHEMA_FACET_LENGTH:
-			case XML_SCHEMA_FACET_MINLENGTH:
-			case XML_SCHEMA_FACET_MAXLENGTH:
-			case XML_SCHEMA_FACET_WHITESPACE:
-			    /*
-			    * TODO: 2.5.1.2 List datatypes
-			    * The value of `whiteSpace` is fixed to the value collapse.
-			    */
-			case XML_SCHEMA_FACET_PATTERN:
-			case XML_SCHEMA_FACET_ENUMERATION:
-			    break;
-			default: {
-			    xmlSchemaPIllegalFacetListUnionErr(pctxt,
-				XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4,
-				type, facet);
-			    /*
-			    * We could return, but it's nicer to report all
-			    * invalid facets.
-			    */
-			    ok = 0;
-			}
-		    }
-		    facet = facet->next;
-		} while (facet != NULL);
-		if (ok == 0)
-		    return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4);
-		/*
-		* SPEC (2.3.2.5) (same as 1.3.2)
-		*
-		* NOTE (2.3.2.5) This is currently done in
-		* xmlSchemaDeriveAndValidateFacets()
-		*/
-	    }
-	}
-    } else if (WXS_IS_UNION(type)) {
-	/*
-	* 3.1 The {member type definitions} must all have {variety} of
-	* atomic or list.
-	*/
-	xmlSchemaTypeLinkPtr member;
-
-	member = type->memberTypes;
-	while (member != NULL) {
-	    if (WXS_IS_TYPE_NOT_FIXED(member->type))
-		xmlSchemaTypeFixup(member->type, ACTXT_CAST pctxt);
-
-	    if ((! WXS_IS_ATOMIC(member->type)) &&
-		(! WXS_IS_LIST(member->type))) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_3_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "The member type '%s' is neither an atomic, nor a list type",
-		    xmlSchemaGetComponentQName(&str, member->type));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_3_1);
-	    }
-	    member = member->next;
-	}
-	/*
-	* 3.3.1 If the {base type definition} is the `simple ur-type
-	* definition`
-	*/
-	if (type->baseType->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) {
-	    /*
-	    * 3.3.1.1 All of the {member type definitions} must have a
-	    * {final} which does not contain union.
-	    */
-	    member = type->memberTypes;
-	    while (member != NULL) {
-		if (xmlSchemaTypeFinalContains(member->type,
-		    XML_SCHEMAS_TYPE_FINAL_UNION)) {
-		    xmlSchemaPCustomErr(pctxt,
-			XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1,
-			WXS_BASIC_CAST type, NULL,
-			"The 'final' of member type '%s' contains 'union'",
-			xmlSchemaGetComponentQName(&str, member->type));
-		    FREE_AND_NULL(str)
-		    return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1);
-		}
-		member = member->next;
-	    }
-	    /*
-	    * 3.3.1.2 The {facets} must be empty.
-	    */
-	    if (type->facetSet != NULL) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2,
-		    WXS_BASIC_CAST type, NULL,
-		    "No facets allowed", NULL);
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2);
-	    }
-	} else {
-	    /*
-	    * 3.3.2.1 The {base type definition} must have a {variety} of union.
-	    * I.e. the variety of "list" is inherited.
-	    */
-	    if (! WXS_IS_UNION(type->baseType)) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "The base type '%s' is not a union type",
-		    xmlSchemaGetComponentQName(&str, type->baseType));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1);
-	    }
-	    /*
-	    * 3.3.2.2 The {final} of the {base type definition} must not contain restriction.
-	    */
-	    if (xmlSchemaTypeFinalContains(type->baseType,
-		XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2,
-		    WXS_BASIC_CAST type, NULL,
-		    "The 'final' of its base type '%s' must not contain 'restriction'",
-		    xmlSchemaGetComponentQName(&str, type->baseType));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2);
-	    }
-	    /*
-	    * 3.3.2.3 The {member type definitions}, in order, must be validly
-	    * derived from the corresponding type definitions in the {base
-	    * type definition}'s {member type definitions} given the empty set,
-	    * as defined in Type Derivation OK (Simple) ($3.14.6).
-	    */
-	    {
-		xmlSchemaTypeLinkPtr baseMember;
-
-		/*
-		* OPTIMIZE: if the type is restricting, it has no local defined
-		* member types and inherits the member types of the base type;
-		* thus a check for equality can be skipped.
-		*/
-		/*
-		* Even worse: I cannot see a scenario where a restricting
-		* union simple type can have other member types as the member
-		* types of it's base type. This check seems not necessary with
-		* respect to the derivation process in libxml2.
-		* But necessary if constructing types with an API.
-		*/
-		if (type->memberTypes != NULL) {
-		    member = type->memberTypes;
-		    baseMember = xmlSchemaGetUnionSimpleTypeMemberTypes(type->baseType);
-		    if ((member == NULL) && (baseMember != NULL)) {
-			PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-			    "different number of member types in base");
-		    }
-		    while (member != NULL) {
-			if (baseMember == NULL) {
-			    PERROR_INT("xmlSchemaCheckCOSSTRestricts",
-			    "different number of member types in base");
-			} else if ((member->type != baseMember->type) &&
-			    (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt,
-				member->type, baseMember->type, 0) != 0)) {
-			    xmlChar *strBMT = NULL, *strBT = NULL;
-
-			    xmlSchemaPCustomErrExt(pctxt,
-				XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3,
-				WXS_BASIC_CAST type, NULL,
-				"The member type %s is not validly "
-				"derived from its corresponding member "
-				"type %s of the base type %s",
-				xmlSchemaGetComponentQName(&str, member->type),
-				xmlSchemaGetComponentQName(&strBMT, baseMember->type),
-				xmlSchemaGetComponentQName(&strBT, type->baseType));
-			    FREE_AND_NULL(str)
-			    FREE_AND_NULL(strBMT)
-			    FREE_AND_NULL(strBT)
-			    return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3);
-			}
-			member = member->next;
-                        if (baseMember != NULL)
-                            baseMember = baseMember->next;
-		    }
-		}
-	    }
-	    /*
-	    * 3.3.2.4 Only pattern and enumeration facet components are
-	    * allowed among the {facets}.
-	    */
-	    if (type->facets != NULL) {
-		xmlSchemaFacetPtr facet;
-		int ok = 1;
-
-		facet = type->facets;
-		do {
-		    if ((facet->type != XML_SCHEMA_FACET_PATTERN) &&
-			(facet->type != XML_SCHEMA_FACET_ENUMERATION)) {
-			xmlSchemaPIllegalFacetListUnionErr(pctxt,
-				XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4,
-				type, facet);
-			ok = 0;
-		    }
-		    facet = facet->next;
-		} while (facet != NULL);
-		if (ok == 0)
-		    return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4);
-
-	    }
-	    /*
-	    * SPEC (3.3.2.5) (same as 1.3.2)
-	    *
-	    * NOTE (3.3.2.5) This is currently done in
-	    * xmlSchemaDeriveAndValidateFacets()
-	    */
-	}
-    }
-
-    return (0);
-}
-
-/**
- * xmlSchemaCheckSRCSimpleType:
- * @ctxt:  the schema parser context
- * @type:  the simple type definition
- *
- * Checks crc-simple-type constraints.
- *
- * Returns 0 if the constraints are satisfied,
- * if not a positive error code and -1 on internal
- * errors.
- */
-#if 0
-static int
-xmlSchemaCheckSRCSimpleType(xmlSchemaParserCtxtPtr ctxt,
-			    xmlSchemaTypePtr type)
-{
-    /*
-    * src-simple-type.1 The corresponding simple type definition, if any,
-    * must satisfy the conditions set out in Constraints on Simple Type
-    * Definition Schema Components ($3.14.6).
-    */
-    if (WXS_IS_RESTRICTION(type)) {
-	/*
-	* src-simple-type.2 "If the <restriction> alternative is chosen,
-	* either it must have a base [attribute] or a <simpleType> among its
-	* [children], but not both."
-	* NOTE: This is checked in the parse function of <restriction>.
-	*/
-	/*
-	*
-	*/
-    } else if (WXS_IS_LIST(type)) {
-	/* src-simple-type.3 "If the <list> alternative is chosen, either it must have
-	* an itemType [attribute] or a <simpleType> among its [children],
-	* but not both."
-	*
-	* NOTE: This is checked in the parse function of <list>.
-	*/
-    } else if (WXS_IS_UNION(type)) {
-	/*
-	* src-simple-type.4 is checked in xmlSchemaCheckUnionTypeDefCircular().
-	*/
-    }
-    return (0);
-}
-#endif
-
-static int
-xmlSchemaCreateVCtxtOnPCtxt(xmlSchemaParserCtxtPtr ctxt)
-{
-   if (ctxt->vctxt == NULL) {
-	ctxt->vctxt = xmlSchemaNewValidCtxt(NULL);
-	if (ctxt->vctxt == NULL) {
-	    xmlSchemaPErr(ctxt, NULL,
-		XML_SCHEMAP_INTERNAL,
-		"Internal error: xmlSchemaCreateVCtxtOnPCtxt, "
-		"failed to create a temp. validation context.\n",
-		NULL, NULL);
-	    return (-1);
-	}
-	/* TODO: Pass user data. */
-	xmlSchemaSetValidErrors(ctxt->vctxt,
-	    ctxt->error, ctxt->warning, ctxt->errCtxt);
-	xmlSchemaSetValidStructuredErrors(ctxt->vctxt,
-	    ctxt->serror, ctxt->errCtxt);
-    }
-    return (0);
-}
-
-static int
-xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
-			     xmlNodePtr node,
-			     xmlSchemaTypePtr type,
-			     const xmlChar *value,
-			     xmlSchemaValPtr *retVal,
-			     int fireErrors,
-			     int normalize,
-			     int isNormalized);
-
-/**
- * xmlSchemaParseCheckCOSValidDefault:
- * @pctxt:  the schema parser context
- * @type:  the simple type definition
- * @value: the default value
- * @node: an optional node (the holder of the value)
- *
- * Schema Component Constraint: Element Default Valid (Immediate)
- * (cos-valid-default)
- * This will be used by the parser only. For the validator there's
- * an other version.
- *
- * Returns 0 if the constraints are satisfied,
- * if not, a positive error code and -1 on internal
- * errors.
- */
-static int
-xmlSchemaParseCheckCOSValidDefault(xmlSchemaParserCtxtPtr pctxt,
-				   xmlNodePtr node,
-				   xmlSchemaTypePtr type,
-				   const xmlChar *value,
-				   xmlSchemaValPtr *val)
-{
-    int ret = 0;
-
-    /*
-    * cos-valid-default:
-    * Schema Component Constraint: Element Default Valid (Immediate)
-    * For a string to be a valid default with respect to a type
-    * definition the appropriate case among the following must be true:
-    */
-    if WXS_IS_COMPLEX(type) {
-	/*
-	* Complex type.
-	*
-	* SPEC (2.1) "its {content type} must be a simple type definition
-	* or mixed."
-	* SPEC (2.2.2) "If the {content type} is mixed, then the {content
-	* type}'s particle must be `emptiable` as defined by
-	* Particle Emptiable ($3.9.6)."
-	*/
-	if ((! WXS_HAS_SIMPLE_CONTENT(type)) &&
-	    ((! WXS_HAS_MIXED_CONTENT(type)) || (! WXS_EMPTIABLE(type)))) {
-	    /* NOTE that this covers (2.2.2) as well. */
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_COS_VALID_DEFAULT_2_1,
-		WXS_BASIC_CAST type, type->node,
-		"For a string to be a valid default, the type definition "
-		"must be a simple type or a complex type with mixed content "
-		"and a particle emptiable", NULL);
-	    return(XML_SCHEMAP_COS_VALID_DEFAULT_2_1);
-	}
-    }
-    /*
-    * 1 If the type definition is a simple type definition, then the string
-    * must be `valid` with respect to that definition as defined by String
-    * Valid ($3.14.4).
-    *
-    * AND
-    *
-    * 2.2.1 If the {content type} is a simple type definition, then the
-    * string must be `valid` with respect to that simple type definition
-    * as defined by String Valid ($3.14.4).
-    */
-    if (WXS_IS_SIMPLE(type))
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node,
-	    type, value, val, 1, 1, 0);
-    else if (WXS_HAS_SIMPLE_CONTENT(type))
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node,
-	    type->contentTypeDef, value, val, 1, 1, 0);
-    else
-	return (ret);
-
-    if (ret < 0) {
-	PERROR_INT("xmlSchemaParseCheckCOSValidDefault",
-	    "calling xmlSchemaVCheckCVCSimpleType()");
-    }
-
-    return (ret);
-}
-
-/**
- * xmlSchemaCheckCTPropsCorrect:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- *.(4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Complex Type Definition Properties Correct (ct-props-correct)
- * STATUS: (seems) complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
-			     xmlSchemaTypePtr type)
-{
-    /*
-    * TODO: Correct the error code; XML_SCHEMAP_SRC_CT_1 is used temporarily.
-    *
-    * SPEC (1) "The values of the properties of a complex type definition must
-    * be as described in the property tableau in The Complex Type Definition
-    * Schema Component ($3.4.1), modulo the impact of Missing
-    * Sub-components ($5.3)."
-    */
-    if ((type->baseType != NULL) &&
-	(WXS_IS_SIMPLE(type->baseType)) &&
-	(WXS_IS_EXTENSION(type) == 0)) {
-	/*
-	* SPEC (2) "If the {base type definition} is a simple type definition,
-	* the {derivation method} must be extension."
-	*/
-	xmlSchemaCustomErr(ACTXT_CAST pctxt,
-	    XML_SCHEMAP_SRC_CT_1,
-	    NULL, WXS_BASIC_CAST type,
-	    "If the base type is a simple type, the derivation method must be "
-	    "'extension'", NULL, NULL);
-	return (XML_SCHEMAP_SRC_CT_1);
-    }
-    /*
-    * SPEC (3) "Circular definitions are disallowed, except for the `ur-type
-    * definition`. That is, it must be possible to reach the `ur-type
-    * definition` by repeatedly following the {base type definition}."
-    *
-    * NOTE (3) is done in xmlSchemaCheckTypeDefCircular().
-    */
-    /*
-    * NOTE that (4) and (5) need the following:
-    *   - attribute uses need to be already inherited (apply attr. prohibitions)
-    *   - attribute group references need to be expanded already
-    *   - simple types need to be typefixed already
-    */
-    if (type->attrUses &&
-	(((xmlSchemaItemListPtr) type->attrUses)->nbItems > 1))
-    {
-	xmlSchemaItemListPtr uses = (xmlSchemaItemListPtr) type->attrUses;
-	xmlSchemaAttributeUsePtr use, tmp;
-	int i, j, hasId = 0;
-
-	for (i = uses->nbItems -1; i >= 0; i--) {
-	    use = uses->items[i];
-
-	    /*
-	    * SPEC ct-props-correct
-	    * (4) "Two distinct attribute declarations in the
-	    * {attribute uses} must not have identical {name}s and
-	    * {target namespace}s."
-	    */
-	    if (i > 0) {
-		for (j = i -1; j >= 0; j--) {
-		    tmp = uses->items[j];
-		    if ((WXS_ATTRUSE_DECL_NAME(use) ==
-			WXS_ATTRUSE_DECL_NAME(tmp)) &&
-			(WXS_ATTRUSE_DECL_TNS(use) ==
-			WXS_ATTRUSE_DECL_TNS(tmp)))
-		    {
-			xmlChar *str = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    XML_SCHEMAP_AG_PROPS_CORRECT,
-			    NULL, WXS_BASIC_CAST type,
-			    "Duplicate %s",
-			    xmlSchemaGetComponentDesignation(&str, use),
-			    NULL);
-			FREE_AND_NULL(str);
-			/*
-			* Remove the duplicate.
-			*/
-			if (xmlSchemaItemListRemove(uses, i) == -1)
-			    goto exit_failure;
-			goto next_use;
-		    }
-		}
-	    }
-	    /*
-	    * SPEC ct-props-correct
-	    * (5) "Two distinct attribute declarations in the
-	    * {attribute uses} must not have {type definition}s which
-	    * are or are derived from ID."
-	    */
-	    if (WXS_ATTRUSE_TYPEDEF(use) != NULL) {
-		if (xmlSchemaIsDerivedFromBuiltInType(
-		    WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
-		{
-		    if (hasId) {
-			xmlChar *str = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    XML_SCHEMAP_AG_PROPS_CORRECT,
-			    NULL, WXS_BASIC_CAST type,
-			    "There must not exist more than one attribute "
-			    "declaration of type 'xs:ID' "
-			    "(or derived from 'xs:ID'). The %s violates this "
-			    "constraint",
-			    xmlSchemaGetComponentDesignation(&str, use),
-			    NULL);
-			FREE_AND_NULL(str);
-			if (xmlSchemaItemListRemove(uses, i) == -1)
-			    goto exit_failure;
-		    }
-
-		    hasId = 1;
-		}
-	    }
-next_use: {}
-	}
-    }
-    return (0);
-exit_failure:
-    return(-1);
-}
-
-static int
-xmlSchemaAreEqualTypes(xmlSchemaTypePtr typeA,
-		       xmlSchemaTypePtr typeB)
-{
-    /*
-    * TODO: This should implement component-identity
-    * in the future.
-    */
-    if ((typeA == NULL) || (typeB == NULL))
-	return (0);
-    return (typeA == typeB);
-}
-
-/**
- * xmlSchemaCheckCOSCTDerivedOK:
- * @ctxt:  the schema parser context
- * @type:  the to-be derived complex type definition
- * @baseType:  the base complex type definition
- * @set: the given set
- *
- * Schema Component Constraint:
- * Type Derivation OK (Complex) (cos-ct-derived-ok)
- *
- * STATUS: completed
- *
- * Returns 0 if the constraints are satisfied, or 1
- * if not.
- */
-static int
-xmlSchemaCheckCOSCTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
-			     xmlSchemaTypePtr type,
-			     xmlSchemaTypePtr baseType,
-			     int set)
-{
-    int equal = xmlSchemaAreEqualTypes(type, baseType);
-    /* TODO: Error codes. */
-    /*
-    * SPEC "For a complex type definition (call it D, for derived)
-    * to be validly derived from a type definition (call this
-    * B, for base) given a subset of {extension, restriction}
-    * all of the following must be true:"
-    */
-    if (! equal) {
-	/*
-	* SPEC (1) "If B and D are not the same type definition, then the
-	* {derivation method} of D must not be in the subset."
-	*/
-	if (((set & SUBSET_EXTENSION) && (WXS_IS_EXTENSION(type))) ||
-	    ((set & SUBSET_RESTRICTION) && (WXS_IS_RESTRICTION(type))))
-	    return (1);
-    } else {
-	/*
-	* SPEC (2.1) "B and D must be the same type definition."
-	*/
-	return (0);
-    }
-    /*
-    * SPEC (2.2) "B must be D's {base type definition}."
-    */
-    if (type->baseType == baseType)
-	return (0);
-    /*
-    * SPEC (2.3.1) "D's {base type definition} must not be the `ur-type
-    * definition`."
-    */
-    if (WXS_IS_ANYTYPE(type->baseType))
-	return (1);
-
-    if (WXS_IS_COMPLEX(type->baseType)) {
-	/*
-	* SPEC (2.3.2.1) "If D's {base type definition} is complex, then it
-	* must be validly derived from B given the subset as defined by this
-	* constraint."
-	*/
-	return (xmlSchemaCheckCOSCTDerivedOK(actxt, type->baseType,
-	    baseType, set));
-    } else {
-	/*
-	* SPEC (2.3.2.2) "If D's {base type definition} is simple, then it
-	* must be validly derived from B given the subset as defined in Type
-	* Derivation OK (Simple) ($3.14.6).
-	*/
-	return (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType,
-	    baseType, set));
-    }
-}
-
-/**
- * xmlSchemaCheckCOSDerivedOK:
- * @type:  the derived simple type definition
- * @baseType:  the base type definition
- *
- * Calls:
- * Type Derivation OK (Simple) AND Type Derivation OK (Complex)
- *
- * Checks wheter @type can be validly derived from @baseType.
- *
- * Returns 0 on success, an positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
-			   xmlSchemaTypePtr type,
-			   xmlSchemaTypePtr baseType,
-			   int set)
-{
-    if (WXS_IS_SIMPLE(type))
-	return (xmlSchemaCheckCOSSTDerivedOK(actxt, type, baseType, set));
-    else
-	return (xmlSchemaCheckCOSCTDerivedOK(actxt, type, baseType, set));
-}
-
-/**
- * xmlSchemaCheckCOSCTExtends:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Derivation Valid (Extension) (cos-ct-extends)
- *
- * STATUS:
- *   missing:
- *     (1.5)
- *     (1.4.3.2.2.2) "Particle Valid (Extension)"
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCOSCTExtends(xmlSchemaParserCtxtPtr ctxt,
-			   xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr base = type->baseType;
-    /*
-    * TODO: Correct the error code; XML_SCHEMAP_COS_CT_EXTENDS_1_1 is used
-    * temporarily only.
-    */
-    /*
-    * SPEC (1) "If the {base type definition} is a complex type definition,
-    * then all of the following must be true:"
-    */
-    if (WXS_IS_COMPLEX(base)) {
-	/*
-	* SPEC (1.1) "The {final} of the {base type definition} must not
-	* contain extension."
-	*/
-	if (base->flags & XML_SCHEMAS_TYPE_FINAL_EXTENSION) {
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_COS_CT_EXTENDS_1_1,
-		WXS_BASIC_CAST type, NULL,
-		"The 'final' of the base type definition "
-		"contains 'extension'", NULL);
-	    return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
-	}
-
-	/*
-	* ATTENTION: The constrains (1.2) and (1.3) are not applied,
-	* since they are automatically satisfied through the
-	* inheriting mechanism.
-	* Note that even if redefining components, the inheriting mechanism
-	* is used.
-	*/
-#if 0
-	/*
-	* SPEC (1.2) "Its {attribute uses} must be a subset of the {attribute
-	* uses}
-	* of the complex type definition itself, that is, for every attribute
-	* use in the {attribute uses} of the {base type definition}, there
-	* must be an attribute use in the {attribute uses} of the complex
-	* type definition itself whose {attribute declaration} has the same
-	* {name}, {target namespace} and {type definition} as its attribute
-	* declaration"
-	*/
-	if (base->attrUses != NULL) {
-	    int i, j, found;
-	    xmlSchemaAttributeUsePtr use, buse;
-
-	    for (i = 0; i < (WXS_LIST_CAST base->attrUses)->nbItems; i ++) {
-		buse = (WXS_LIST_CAST base->attrUses)->items[i];
-		found = 0;
-		if (type->attrUses != NULL) {
-		    use = (WXS_LIST_CAST type->attrUses)->items[j];
-		    for (j = 0; j < (WXS_LIST_CAST type->attrUses)->nbItems; j ++)
-		    {
-			if ((WXS_ATTRUSE_DECL_NAME(use) ==
-				WXS_ATTRUSE_DECL_NAME(buse)) &&
-			    (WXS_ATTRUSE_DECL_TNS(use) ==
-				WXS_ATTRUSE_DECL_TNS(buse)) &&
-			    (WXS_ATTRUSE_TYPEDEF(use) ==
-				WXS_ATTRUSE_TYPEDEF(buse))
-			{
-			    found = 1;
-			    break;
-			}
-		    }
-		}
-		if (! found) {
-		    xmlChar *str = NULL;
-
-		    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-			XML_SCHEMAP_COS_CT_EXTENDS_1_2,
-			NULL, WXS_BASIC_CAST type,
-			/*
-			* TODO: The report does not indicate that also the
-			* type needs to be the same.
-			*/
-			"This type is missing a matching correspondent "
-			"for its {base type}'s %s in its {attribute uses}",
-			xmlSchemaGetComponentDesignation(&str,
-			    buse->children),
-			NULL);
-		    FREE_AND_NULL(str)
-		}
-	    }
-	}
-	/*
-	* SPEC (1.3) "If it has an {attribute wildcard}, the complex type
-	* definition must also have one, and the base type definition's
-	* {attribute  wildcard}'s {namespace constraint} must be a subset
-	* of the complex  type definition's {attribute wildcard}'s {namespace
-	* constraint}, as defined by Wildcard Subset ($3.10.6)."
-	*/
-
-	/*
-	* MAYBE TODO: Enable if ever needed. But this will be needed only
-	* if created the type via a schema construction API.
-	*/
-	if (base->attributeWildcard != NULL) {
-	    if (type->attributeWilcard == NULL) {
-		xmlChar *str = NULL;
-
-		xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_COS_CT_EXTENDS_1_3,
-		    NULL, type,
-		    "The base %s has an attribute wildcard, "
-		    "but this type is missing an attribute wildcard",
-		    xmlSchemaGetComponentDesignation(&str, base));
-		FREE_AND_NULL(str)
-
-	    } else if (xmlSchemaCheckCOSNSSubset(
-		base->attributeWildcard, type->attributeWildcard))
-	    {
-		xmlChar *str = NULL;
-
-		xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_COS_CT_EXTENDS_1_3,
-		    NULL, type,
-		    "The attribute wildcard is not a valid "
-		    "superset of the one in the base %s",
-		    xmlSchemaGetComponentDesignation(&str, base));
-		FREE_AND_NULL(str)
-	    }
-	}
-#endif
-	/*
-	* SPEC (1.4) "One of the following must be true:"
-	*/
-	if ((type->contentTypeDef != NULL) &&
-	    (type->contentTypeDef == base->contentTypeDef)) {
-	    /*
-	    * SPEC (1.4.1) "The {content type} of the {base type definition}
-	    * and the {content type} of the complex type definition itself
-	    * must be the same simple type definition"
-	    * PASS
-	    */
-	} else if ((type->contentType == XML_SCHEMA_CONTENT_EMPTY) &&
-	    (base->contentType == XML_SCHEMA_CONTENT_EMPTY) ) {
-	    /*
-	    * SPEC (1.4.2) "The {content type} of both the {base type
-	    * definition} and the complex type definition itself must
-	    * be empty."
-	    * PASS
-	    */
-	} else {
-	    /*
-	    * SPEC (1.4.3) "All of the following must be true:"
-	    */
-	    if (type->subtypes == NULL) {
-		/*
-		* SPEC 1.4.3.1 The {content type} of the complex type
-		* definition itself must specify a particle.
-		*/
-		xmlSchemaPCustomErr(ctxt,
-		    XML_SCHEMAP_COS_CT_EXTENDS_1_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "The content type must specify a particle", NULL);
-		return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
-	    }
-	    /*
-	    * SPEC (1.4.3.2) "One of the following must be true:"
-	    */
-	    if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) {
-		/*
-		* SPEC (1.4.3.2.1) "The {content type} of the {base type
-		* definition} must be empty.
-		* PASS
-		*/
-	    } else {
-		/*
-		* SPEC (1.4.3.2.2) "All of the following must be true:"
-		*/
-		if ((type->contentType != base->contentType) ||
-		    ((type->contentType != XML_SCHEMA_CONTENT_MIXED) &&
-		    (type->contentType != XML_SCHEMA_CONTENT_ELEMENTS))) {
-		    /*
-		    * SPEC (1.4.3.2.2.1) "Both {content type}s must be mixed
-		    * or both must be element-only."
-		    */
-		    xmlSchemaPCustomErr(ctxt,
-			XML_SCHEMAP_COS_CT_EXTENDS_1_1,
-			WXS_BASIC_CAST type, NULL,
-			"The content type of both, the type and its base "
-			"type, must either 'mixed' or 'element-only'", NULL);
-		    return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
-		}
-		/*
-		* URGENT TODO SPEC (1.4.3.2.2.2) "The particle of the
-		* complex type definition must be a `valid extension`
-		* of the {base type definition}'s particle, as defined
-		* in Particle Valid (Extension) ($3.9.6)."
-		*
-		* NOTE that we won't check "Particle Valid (Extension)",
-		* since it is ensured by the derivation process in
-		* xmlSchemaTypeFixup(). We need to implement this when heading
-		* for a construction API
-		* TODO: !! This is needed to be checked if redefining a type !!
-		*/
-	    }
-	    /*
-	    * URGENT TODO (1.5)
-	    */
-	}
-    } else {
-	/*
-	* SPEC (2) "If the {base type definition} is a simple type definition,
-	* then all of the following must be true:"
-	*/
-	if (type->contentTypeDef != base) {
-	    /*
-	    * SPEC (2.1) "The {content type} must be the same simple type
-	    * definition."
-	    */
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_COS_CT_EXTENDS_1_1,
-		WXS_BASIC_CAST type, NULL,
-		"The content type must be the simple base type", NULL);
-	    return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
-	}
-	if (base->flags & XML_SCHEMAS_TYPE_FINAL_EXTENSION) {
-	    /*
-	    * SPEC (2.2) "The {final} of the {base type definition} must not
-	    * contain extension"
-	    * NOTE that this is the same as (1.1).
-	    */
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_COS_CT_EXTENDS_1_1,
-		WXS_BASIC_CAST type, NULL,
-		"The 'final' of the base type definition "
-		"contains 'extension'", NULL);
-	    return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
-	}
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaCheckDerivationOKRestriction:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Derivation Valid (Restriction, Complex) (derivation-ok-restriction)
- *
- * STATUS:
- *   missing:
- *     (5.4.2) ???
- *
- * ATTENTION:
- * In XML Schema 1.1 this will be:
- * Validation Rule: Checking complex type subsumption
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
-				      xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr base;
-
-    /*
-    * TODO: Correct the error code; XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 is used
-    * temporarily only.
-    */
-    base = type->baseType;
-    if (! WXS_IS_COMPLEX(base)) {
-	xmlSchemaCustomErr(ACTXT_CAST ctxt,
-	    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-	    type->node, WXS_BASIC_CAST type,
-	    "The base type must be a complex type", NULL, NULL);
-	return(ctxt->err);
-    }
-    if (base->flags & XML_SCHEMAS_TYPE_FINAL_RESTRICTION) {
-	/*
-	* SPEC (1) "The {base type definition} must be a complex type
-	* definition whose {final} does not contain restriction."
-	*/
-	xmlSchemaCustomErr(ACTXT_CAST ctxt,
-	    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-	    type->node, WXS_BASIC_CAST type,
-	    "The 'final' of the base type definition "
-	    "contains 'restriction'", NULL, NULL);
-	return (ctxt->err);
-    }
-    /*
-    * SPEC (2), (3) and (4)
-    * Those are handled in a separate function, since the
-    * same constraints are needed for redefinition of
-    * attribute groups as well.
-    */
-    if (xmlSchemaCheckDerivationOKRestriction2to4(ctxt,
-	XML_SCHEMA_ACTION_DERIVE,
-	WXS_BASIC_CAST type, WXS_BASIC_CAST base,
-	type->attrUses, base->attrUses,
-	type->attributeWildcard,
-	base->attributeWildcard) == -1)
-    {
-	return(-1);
-    }
-    /*
-    * SPEC (5) "One of the following must be true:"
-    */
-    if (base->builtInType == XML_SCHEMAS_ANYTYPE) {
-	/*
-	* SPEC (5.1) "The {base type definition} must be the
-	* `ur-type definition`."
-	* PASS
-	*/
-    } else if ((type->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
-	    (type->contentType == XML_SCHEMA_CONTENT_BASIC)) {
-	/*
-	* SPEC (5.2.1) "The {content type} of the complex type definition
-	* must be a simple type definition"
-	*
-	* SPEC (5.2.2) "One of the following must be true:"
-	*/
-	if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
-	    (base->contentType == XML_SCHEMA_CONTENT_BASIC))
-	{
-	    int err;
-	    /*
-	    * SPEC (5.2.2.1) "The {content type} of the {base type
-	    * definition} must be a simple type definition from which
-	    * the {content type} is validly derived given the empty
-	    * set as defined in Type Derivation OK (Simple) ($3.14.6)."
-	    *
-	    * ATTENTION TODO: This seems not needed if the type implicitely
-	    * derived from the base type.
-	    *
-	    */
-	    err = xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST ctxt,
-		type->contentTypeDef, base->contentTypeDef, 0);
-	    if (err != 0) {
-		xmlChar *strA = NULL, *strB = NULL;
-
-		if (err == -1)
-		    return(-1);
-		xmlSchemaCustomErr(ACTXT_CAST ctxt,
-		    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-		    NULL, WXS_BASIC_CAST type,
-		    "The {content type} %s is not validly derived from the "
-		    "base type's {content type} %s",
-		    xmlSchemaGetComponentDesignation(&strA,
-			type->contentTypeDef),
-		    xmlSchemaGetComponentDesignation(&strB,
-			base->contentTypeDef));
-		FREE_AND_NULL(strA);
-		FREE_AND_NULL(strB);
-		return(ctxt->err);
-	    }
-	} else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) &&
-	    (xmlSchemaIsParticleEmptiable(
-		(xmlSchemaParticlePtr) base->subtypes))) {
-	    /*
-	    * SPEC (5.2.2.2) "The {base type definition} must be mixed
-	    * and have a particle which is `emptiable` as defined in
-	    * Particle Emptiable ($3.9.6)."
-	    * PASS
-	    */
-	} else {
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-		WXS_BASIC_CAST type, NULL,
-		"The content type of the base type must be either "
-		"a simple type or 'mixed' and an emptiable particle", NULL);
-	    return (ctxt->err);
-	}
-    } else if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) {
-	/*
-	* SPEC (5.3.1) "The {content type} of the complex type itself must
-	* be empty"
-	*/
-	if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) {
-	    /*
-	    * SPEC (5.3.2.1) "The {content type} of the {base type
-	    * definition} must also be empty."
-	    * PASS
-	    */
-	} else if (((base->contentType == XML_SCHEMA_CONTENT_ELEMENTS) ||
-	    (base->contentType == XML_SCHEMA_CONTENT_MIXED)) &&
-	    xmlSchemaIsParticleEmptiable(
-		(xmlSchemaParticlePtr) base->subtypes)) {
-	    /*
-	    * SPEC (5.3.2.2) "The {content type} of the {base type
-	    * definition} must be elementOnly or mixed and have a particle
-	    * which is `emptiable` as defined in Particle Emptiable ($3.9.6)."
-	    * PASS
-	    */
-	} else {
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-		WXS_BASIC_CAST type, NULL,
-		"The content type of the base type must be either "
-		"empty or 'mixed' (or 'elements-only') and an emptiable "
-		"particle", NULL);
-	    return (ctxt->err);
-	}
-    } else if ((type->contentType == XML_SCHEMA_CONTENT_ELEMENTS) ||
-	WXS_HAS_MIXED_CONTENT(type)) {
-	/*
-	* SPEC (5.4.1.1) "The {content type} of the complex type definition
-	* itself must be element-only"
-	*/
-	if (WXS_HAS_MIXED_CONTENT(type) && (! WXS_HAS_MIXED_CONTENT(base))) {
-	    /*
-	    * SPEC (5.4.1.2) "The {content type} of the complex type
-	    * definition itself and of the {base type definition} must be
-	    * mixed"
-	    */
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-		WXS_BASIC_CAST type, NULL,
-		"If the content type is 'mixed', then the content type of the "
-		"base type must also be 'mixed'", NULL);
-	    return (ctxt->err);
-	}
-	/*
-	* SPEC (5.4.2) "The particle of the complex type definition itself
-	* must be a `valid restriction` of the particle of the {content
-	* type} of the {base type definition} as defined in Particle Valid
-	* (Restriction) ($3.9.6).
-	*
-	* URGENT TODO: (5.4.2)
-	*/
-    } else {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
-	    WXS_BASIC_CAST type, NULL,
-	    "The type is not a valid restriction of its base type", NULL);
-	return (ctxt->err);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaCheckCTComponent:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCTComponent(xmlSchemaParserCtxtPtr ctxt,
-			  xmlSchemaTypePtr type)
-{
-    int ret;
-    /*
-    * Complex Type Definition Properties Correct
-    */
-    ret = xmlSchemaCheckCTPropsCorrect(ctxt, type);
-    if (ret != 0)
-	return (ret);
-    if (WXS_IS_EXTENSION(type))
-	ret = xmlSchemaCheckCOSCTExtends(ctxt, type);
-    else
-	ret = xmlSchemaCheckDerivationOKRestriction(ctxt, type);
-    return (ret);
-}
-
-/**
- * xmlSchemaCheckSRCCT:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.4.3) Constraints on XML Representations of Complex Type Definitions:
- * Schema Representation Constraint:
- * Complex Type Definition Representation OK (src-ct)
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckSRCCT(xmlSchemaParserCtxtPtr ctxt,
-		    xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr base;
-    int ret = 0;
-
-    /*
-    * TODO: Adjust the error codes here, as I used
-    * XML_SCHEMAP_SRC_CT_1 only yet.
-    */
-    base = type->baseType;
-    if (! WXS_HAS_SIMPLE_CONTENT(type)) {
-	/*
-	* 1 If the <complexContent> alternative is chosen, the type definition
-	* `resolved` to by the `actual value` of the base [attribute]
-	* must be a complex type definition;
-	*/
-	if (! WXS_IS_COMPLEX(base)) {
-	    xmlChar *str = NULL;
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_SRC_CT_1,
-		WXS_BASIC_CAST type, type->node,
-		"If using <complexContent>, the base type is expected to be "
-		"a complex type. The base type '%s' is a simple type",
-		xmlSchemaFormatQName(&str, base->targetNamespace,
-		base->name));
-	    FREE_AND_NULL(str)
-	    return (XML_SCHEMAP_SRC_CT_1);
-	}
-    } else {
-	/*
-	* SPEC
-	* 2 If the <simpleContent> alternative is chosen, all of the
-	* following must be true:
-	* 2.1 The type definition `resolved` to by the `actual value` of the
-	* base [attribute] must be one of the following:
-	*/
-	if (WXS_IS_SIMPLE(base)) {
-	    if (WXS_IS_EXTENSION(type) == 0) {
-		xmlChar *str = NULL;
-		/*
-		* 2.1.3 only if the <extension> alternative is also
-		* chosen, a simple type definition.
-		*/
-		/* TODO: Change error code to ..._SRC_CT_2_1_3. */
-		xmlSchemaPCustomErr(ctxt,
-		    XML_SCHEMAP_SRC_CT_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "If using <simpleContent> and <restriction>, the base "
-		    "type must be a complex type. The base type '%s' is "
-		    "a simple type",
-		    xmlSchemaFormatQName(&str, base->targetNamespace,
-			base->name));
-		FREE_AND_NULL(str)
-		return (XML_SCHEMAP_SRC_CT_1);
-	    }
-	} else {
-	    /* Base type is a complex type. */
-	    if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
-		(base->contentType == XML_SCHEMA_CONTENT_BASIC)) {
-		/*
-		* 2.1.1 a complex type definition whose {content type} is a
-		* simple type definition;
-		* PASS
-		*/
-		if (base->contentTypeDef == NULL) {
-		    xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_INTERNAL,
-			WXS_BASIC_CAST type, NULL,
-			"Internal error: xmlSchemaCheckSRCCT, "
-			"'%s', base type has no content type",
-			type->name);
-		    return (-1);
-		}
-	    } else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) &&
-		(WXS_IS_RESTRICTION(type))) {
-
-		/*
-		* 2.1.2 only if the <restriction> alternative is also
-		* chosen, a complex type definition whose {content type}
-		* is mixed and a particle emptiable.
-		*/
-		if (! xmlSchemaIsParticleEmptiable(
-		    (xmlSchemaParticlePtr) base->subtypes)) {
-		    ret = XML_SCHEMAP_SRC_CT_1;
-		} else
-		    /*
-		    * Attention: at this point the <simpleType> child is in
-		    * ->contentTypeDef (put there during parsing).
-		    */
-		    if (type->contentTypeDef == NULL) {
-		    xmlChar *str = NULL;
-		    /*
-		    * 2.2 If clause 2.1.2 above is satisfied, then there
-		    * must be a <simpleType> among the [children] of
-		    * <restriction>.
-		    */
-		    /* TODO: Change error code to ..._SRC_CT_2_2. */
-		    xmlSchemaPCustomErr(ctxt,
-			XML_SCHEMAP_SRC_CT_1,
-			WXS_BASIC_CAST type, NULL,
-			"A <simpleType> is expected among the children "
-			"of <restriction>, if <simpleContent> is used and "
-			"the base type '%s' is a complex type",
-			xmlSchemaFormatQName(&str, base->targetNamespace,
-			base->name));
-		    FREE_AND_NULL(str)
-		    return (XML_SCHEMAP_SRC_CT_1);
-		}
-	    } else {
-		ret = XML_SCHEMAP_SRC_CT_1;
-	    }
-	}
-	if (ret > 0) {
-	    xmlChar *str = NULL;
-	    if (WXS_IS_RESTRICTION(type)) {
-		xmlSchemaPCustomErr(ctxt,
-		    XML_SCHEMAP_SRC_CT_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "If <simpleContent> and <restriction> is used, the "
-		    "base type must be a simple type or a complex type with "
-		    "mixed content and particle emptiable. The base type "
-		    "'%s' is none of those",
-		    xmlSchemaFormatQName(&str, base->targetNamespace,
-		    base->name));
-	    } else {
-		xmlSchemaPCustomErr(ctxt,
-		    XML_SCHEMAP_SRC_CT_1,
-		    WXS_BASIC_CAST type, NULL,
-		    "If <simpleContent> and <extension> is used, the "
-		    "base type must be a simple type. The base type '%s' "
-		    "is a complex type",
-		    xmlSchemaFormatQName(&str, base->targetNamespace,
-		    base->name));
-	    }
-	    FREE_AND_NULL(str)
-	}
-    }
-    /*
-    * SPEC (3) "The corresponding complex type definition component must
-    * satisfy the conditions set out in Constraints on Complex Type
-    * Definition Schema Components ($3.4.6);"
-    * NOTE (3) will be done in xmlSchemaTypeFixup().
-    */
-    /*
-    * SPEC (4) If clause 2.2.1 or clause 2.2.2 in the correspondence specification
-    * above for {attribute wildcard} is satisfied, the intensional
-    * intersection must be expressible, as defined in Attribute Wildcard
-    * Intersection ($3.10.6).
-    * NOTE (4) is done in xmlSchemaFixupTypeAttributeUses().
-    */
-    return (ret);
-}
-
-#ifdef ENABLE_PARTICLE_RESTRICTION
-/**
- * xmlSchemaCheckParticleRangeOK:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Occurrence Range OK (range-ok)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckParticleRangeOK(int rmin, int rmax,
-			      int bmin, int bmax)
-{
-    if (rmin < bmin)
-	return (1);
-    if ((bmax != UNBOUNDED) &&
-	(rmax > bmax))
-	return (1);
-    return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNameAndTypeOK:
- * @ctxt:  the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base element declaration particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Restriction OK (Elt:Elt -- NameAndTypeOK)
- * (rcase-NameAndTypeOK)
- *
- * STATUS:
- *   MISSING (3.2.3)
- *   CLARIFY: (3.2.2)
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNameAndTypeOK(xmlSchemaParserCtxtPtr ctxt,
-				 xmlSchemaParticlePtr r,
-				 xmlSchemaParticlePtr b)
-{
-    xmlSchemaElementPtr elemR, elemB;
-
-    /* TODO: Error codes (rcase-NameAndTypeOK). */
-    elemR = (xmlSchemaElementPtr) r->children;
-    elemB = (xmlSchemaElementPtr) b->children;
-    /*
-    * SPEC (1) "The declarations' {name}s and {target namespace}s are
-    * the same."
-    */
-    if ((elemR != elemB) &&
-	((! xmlStrEqual(elemR->name, elemB->name)) ||
-	(! xmlStrEqual(elemR->targetNamespace, elemB->targetNamespace))))
-	return (1);
-    /*
-    * SPEC (2) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
-    */
-    if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
-	    b->minOccurs, b->maxOccurs) != 0)
-	return (1);
-    /*
-    * SPEC (3.1) "Both B's declaration's {scope} and R's declaration's
-    * {scope} are global."
-    */
-    if (elemR == elemB)
-	return (0);
-    /*
-    * SPEC (3.2.1) "Either B's {nillable} is true or R's {nillable} is false."
-    */
-    if (((elemB->flags & XML_SCHEMAS_ELEM_NILLABLE) == 0) &&
-	(elemR->flags & XML_SCHEMAS_ELEM_NILLABLE))
-	 return (1);
-    /*
-    * SPEC (3.2.2) "either B's declaration's {value constraint} is absent,
-    * or is not fixed, or R's declaration's {value constraint} is fixed
-    * with the same value."
-    */
-    if ((elemB->value != NULL) && (elemB->flags & XML_SCHEMAS_ELEM_FIXED) &&
-	((elemR->value == NULL) ||
-	 ((elemR->flags & XML_SCHEMAS_ELEM_FIXED) == 0) ||
-	 /* TODO: Equality of the initial value or normalized or canonical? */
-	 (! xmlStrEqual(elemR->value, elemB->value))))
-	 return (1);
-    /*
-    * TODO: SPEC (3.2.3) "R's declaration's {identity-constraint
-    * definitions} is a subset of B's declaration's {identity-constraint
-    * definitions}, if any."
-    */
-    if (elemB->idcs != NULL) {
-	/* TODO */
-    }
-    /*
-    * SPEC (3.2.4) "R's declaration's {disallowed substitutions} is a
-    * superset of B's declaration's {disallowed substitutions}."
-    */
-    if (((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) &&
-	 ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) == 0)) ||
-	((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) &&
-	 ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) == 0)) ||
-	((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) &&
-	 ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) == 0)))
-	 return (1);
-    /*
-    * SPEC (3.2.5) "R's {type definition} is validly derived given
-    * {extension, list, union} from B's {type definition}"
-    *
-    * BADSPEC TODO: What's the point of adding "list" and "union" to the
-    * set, if the corresponding constraints handle "restriction" and
-    * "extension" only?
-    *
-    */
-    {
-	int set = 0;
-
-	set |= SUBSET_EXTENSION;
-	set |= SUBSET_LIST;
-	set |= SUBSET_UNION;
-	if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST ctxt, elemR->subtypes,
-	    elemB->subtypes, set) != 0)
-	    return (1);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNSCompat:
- * @ctxt:  the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Elt:Any -- NSCompat)
- * (rcase-NSCompat)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSCompat(xmlSchemaParserCtxtPtr ctxt,
-			    xmlSchemaParticlePtr r,
-			    xmlSchemaParticlePtr b)
-{
-    /* TODO:Error codes (rcase-NSCompat). */
-    /*
-    * SPEC "For an element declaration particle to be a `valid restriction`
-    * of a wildcard particle all of the following must be true:"
-    *
-    * SPEC (1) "The element declaration's {target namespace} is `valid`
-    * with respect to the wildcard's {namespace constraint} as defined by
-    * Wildcard allows Namespace Name ($3.10.4)."
-    */
-    if (xmlSchemaCheckCVCWildcardNamespace((xmlSchemaWildcardPtr) b->children,
-	((xmlSchemaElementPtr) r->children)->targetNamespace) != 0)
-	return (1);
-    /*
-    * SPEC (2) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
-    */
-    if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
-	    b->minOccurs, b->maxOccurs) != 0)
-	return (1);
-
-    return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseRecurseAsIfGroup:
- * @ctxt:  the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base model group particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Elt:All/Choice/Sequence -- RecurseAsIfGroup)
- * (rcase-RecurseAsIfGroup)
- *
- * STATUS: TODO
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseRecurseAsIfGroup(xmlSchemaParserCtxtPtr ctxt,
-				    xmlSchemaParticlePtr r,
-				    xmlSchemaParticlePtr b)
-{
-    /* TODO: Error codes (rcase-RecurseAsIfGroup). */
-    TODO
-    return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNSSubset:
- * @ctxt:  the schema parser context
- * @r: the restricting wildcard particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Any:Any -- NSSubset)
- * (rcase-NSSubset)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSSubset(xmlSchemaParserCtxtPtr ctxt,
-				    xmlSchemaParticlePtr r,
-				    xmlSchemaParticlePtr b,
-				    int isAnyTypeBase)
-{
-    /* TODO: Error codes (rcase-NSSubset). */
-    /*
-    * SPEC (1) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
-    */
-    if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
-	    b->minOccurs, b->maxOccurs))
-	return (1);
-    /*
-    * SPEC (2) "R's {namespace constraint} must be an intensional subset
-    * of B's {namespace constraint} as defined by Wildcard Subset ($3.10.6)."
-    */
-    if (xmlSchemaCheckCOSNSSubset((xmlSchemaWildcardPtr) r->children,
-	(xmlSchemaWildcardPtr) b->children))
-	return (1);
-    /*
-    * SPEC (3) "Unless B is the content model wildcard of the `ur-type
-    * definition`, R's {process contents} must be identical to or stronger
-    * than B's {process contents}, where strict is stronger than lax is
-    * stronger than skip."
-    */
-    if (! isAnyTypeBase) {
-	if ( ((xmlSchemaWildcardPtr) r->children)->processContents <
-	    ((xmlSchemaWildcardPtr) b->children)->processContents)
-	    return (1);
-    }
-
-    return (0);
-}
-
-/**
- * xmlSchemaCheckCOSParticleRestrict:
- * @ctxt:  the schema parser context
- * @type:  the complex type definition
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Valid (Restriction) (cos-particle-restrict)
- *
- * STATUS: TODO
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCOSParticleRestrict(xmlSchemaParserCtxtPtr ctxt,
-				  xmlSchemaParticlePtr r,
-				  xmlSchemaParticlePtr b)
-{
-    int ret = 0;
-
-    /*part = WXS_TYPE_PARTICLE(type);
-    basePart = WXS_TYPE_PARTICLE(base);
-    */
-
-    TODO
-
-    /*
-    * SPEC (1) "They are the same particle."
-    */
-    if (r == b)
-	return (0);
-
-
-    return (0);
-}
-
-#if 0
-/**
- * xmlSchemaCheckRCaseNSRecurseCheckCardinality:
- * @ctxt:  the schema parser context
- * @r: the model group particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (All/Choice/Sequence:Any --
- *                         NSRecurseCheckCardinality)
- * (rcase-NSRecurseCheckCardinality)
- *
- * STATUS: TODO: subst-groups
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt,
-					     xmlSchemaParticlePtr r,
-					     xmlSchemaParticlePtr b)
-{
-    xmlSchemaParticlePtr part;
-    /* TODO: Error codes (rcase-NSRecurseCheckCardinality). */
-    if ((r->children == NULL) || (r->children->children == NULL))
-	return (-1);
-    /*
-    * SPEC "For a group particle to be a `valid restriction` of a
-    * wildcard particle..."
-    *
-    * SPEC (1) "Every member of the {particles} of the group is a `valid
-    * restriction` of the wildcard as defined by
-    * Particle Valid (Restriction) ($3.9.6)."
-    */
-    part = (xmlSchemaParticlePtr) r->children->children;
-    do {
-	if (xmlSchemaCheckCOSParticleRestrict(ctxt, part, b))
-	    return (1);
-	part = (xmlSchemaParticlePtr) part->next;
-    } while (part != NULL);
-    /*
-    * SPEC (2) "The effective total range of the group [...] is a
-    * valid restriction of B's occurrence range as defined by
-    * Occurrence Range OK ($3.9.6)."
-    */
-    if (xmlSchemaCheckParticleRangeOK(
-	    xmlSchemaGetParticleTotalRangeMin(r),
-	    xmlSchemaGetParticleTotalRangeMax(r),
-	    b->minOccurs, b->maxOccurs) != 0)
-	return (1);
-    return (0);
-}
-#endif
-
-/**
- * xmlSchemaCheckRCaseRecurse:
- * @ctxt:  the schema parser context
- * @r: the <all> or <sequence> model group particle
- * @b: the base <all> or <sequence> model group particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (All:All,Sequence:Sequence --
-                           Recurse)
- * (rcase-Recurse)
- *
- * STATUS:  ?
- * TODO: subst-groups
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseRecurse(xmlSchemaParserCtxtPtr ctxt,
-			   xmlSchemaParticlePtr r,
-			   xmlSchemaParticlePtr b)
-{
-    /* xmlSchemaParticlePtr part; */
-    /* TODO: Error codes (rcase-Recurse). */
-    if ((r->children == NULL) || (b->children == NULL) ||
-	(r->children->type != b->children->type))
-	return (-1);
-    /*
-    * SPEC "For an all or sequence group particle to be a `valid
-    * restriction` of another group particle with the same {compositor}..."
-    *
-    * SPEC (1) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
-    */
-    if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
-	    b->minOccurs, b->maxOccurs))
-	return (1);
-
-
-    return (0);
-}
-
-#endif
-
-#define FACET_RESTR_MUTUAL_ERR(fac1, fac2) \
-    xmlSchemaPCustomErrExt(pctxt,      \
-	XML_SCHEMAP_INVALID_FACET_VALUE, \
-	WXS_BASIC_CAST fac1, fac1->node, \
-	"It is an error for both '%s' and '%s' to be specified on the "\
-	"same type definition", \
-	BAD_CAST xmlSchemaFacetTypeToString(fac1->type), \
-	BAD_CAST xmlSchemaFacetTypeToString(fac2->type), NULL);
-
-#define FACET_RESTR_ERR(fac1, msg) \
-    xmlSchemaPCustomErr(pctxt,      \
-	XML_SCHEMAP_INVALID_FACET_VALUE, \
-	WXS_BASIC_CAST fac1, fac1->node, \
-	msg, NULL);
-
-#define FACET_RESTR_FIXED_ERR(fac) \
-    xmlSchemaPCustomErr(pctxt, \
-	XML_SCHEMAP_INVALID_FACET_VALUE, \
-	WXS_BASIC_CAST fac, fac->node, \
-	"The base type's facet is 'fixed', thus the value must not " \
-	"differ", NULL);
-
-static void
-xmlSchemaDeriveFacetErr(xmlSchemaParserCtxtPtr pctxt,
-			xmlSchemaFacetPtr facet1,
-			xmlSchemaFacetPtr facet2,
-			int lessGreater,
-			int orEqual,
-			int ofBase)
-{
-    xmlChar *msg = NULL;
-
-    msg = xmlStrdup(BAD_CAST "'");
-    msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facet1->type));
-    msg = xmlStrcat(msg, BAD_CAST "' has to be");
-    if (lessGreater == 0)
-	msg = xmlStrcat(msg, BAD_CAST " equal to");
-    if (lessGreater == 1)
-	msg = xmlStrcat(msg, BAD_CAST " greater than");
-    else
-	msg = xmlStrcat(msg, BAD_CAST " less than");
-
-    if (orEqual)
-	msg = xmlStrcat(msg, BAD_CAST " or equal to");
-    msg = xmlStrcat(msg, BAD_CAST " '");
-    msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facet2->type));
-    if (ofBase)
-	msg = xmlStrcat(msg, BAD_CAST "' of the base type");
-    else
-	msg = xmlStrcat(msg, BAD_CAST "'");
-
-    xmlSchemaPCustomErr(pctxt,
-	XML_SCHEMAP_INVALID_FACET_VALUE,
-	WXS_BASIC_CAST facet1, NULL,
-	(const char *) msg, NULL);
-
-    if (msg != NULL)
-	xmlFree(msg);
-}
-
-/*
-* xmlSchemaDeriveAndValidateFacets:
-*
-* Schema Component Constraint: Simple Type Restriction (Facets)
-* (st-restrict-facets)
-*/
-static int
-xmlSchemaDeriveAndValidateFacets(xmlSchemaParserCtxtPtr pctxt,
-				 xmlSchemaTypePtr type)
-{
-    xmlSchemaTypePtr base = type->baseType;
-    xmlSchemaFacetLinkPtr link, cur, last = NULL;
-    xmlSchemaFacetPtr facet, bfacet,
-	flength = NULL, ftotdig = NULL, ffracdig = NULL,
-	fmaxlen = NULL, fminlen = NULL, /* facets of the current type */
-	fmininc = NULL, fmaxinc = NULL,
-	fminexc = NULL, fmaxexc = NULL,
-	bflength = NULL, bftotdig = NULL, bffracdig = NULL,
-	bfmaxlen = NULL, bfminlen = NULL, /* facets of the base type */
-	bfmininc = NULL, bfmaxinc = NULL,
-	bfminexc = NULL, bfmaxexc = NULL;
-    int res; /* err = 0, fixedErr; */
-
-    /*
-    * SPEC st-restrict-facets 1:
-    * "The {variety} of R is the same as that of B."
-    */
-    /*
-    * SPEC st-restrict-facets 2:
-    * "If {variety} is atomic, the {primitive type definition}
-    * of R is the same as that of B."
-    *
-    * NOTE: we leave 1 & 2 out for now, since this will be
-    * satisfied by the derivation process.
-    * CONSTRUCTION TODO: Maybe needed if using a construction API.
-    */
-    /*
-    * SPEC st-restrict-facets 3:
-    * "The {facets} of R are the union of S and the {facets}
-    * of B, eliminating duplicates. To eliminate duplicates,
-    * when a facet of the same kind occurs in both S and the
-    * {facets} of B, the one in the {facets} of B is not
-    * included, with the exception of enumeration and pattern
-    * facets, for which multiple occurrences with distinct values
-    * are allowed."
-    */
-
-    if ((type->facetSet == NULL) && (base->facetSet == NULL))
-	return (0);
-
-    last = type->facetSet;
-    if (last != NULL)
-	while (last->next != NULL)
-	    last = last->next;
-
-    for (cur = type->facetSet; cur != NULL; cur = cur->next) {
-	facet = cur->facet;
-	switch (facet->type) {
-	    case XML_SCHEMA_FACET_LENGTH:
-		flength = facet; break;
-	    case XML_SCHEMA_FACET_MINLENGTH:
-		fminlen = facet; break;
-	    case XML_SCHEMA_FACET_MININCLUSIVE:
-		fmininc = facet; break;
-	    case XML_SCHEMA_FACET_MINEXCLUSIVE:
-		fminexc = facet; break;
-	    case XML_SCHEMA_FACET_MAXLENGTH:
-		fmaxlen = facet; break;
-	    case XML_SCHEMA_FACET_MAXINCLUSIVE:
-		fmaxinc = facet; break;
-	    case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-		fmaxexc = facet; break;
-	    case XML_SCHEMA_FACET_TOTALDIGITS:
-		ftotdig = facet; break;
-	    case XML_SCHEMA_FACET_FRACTIONDIGITS:
-		ffracdig = facet; break;
-	    default:
-		break;
-	}
-    }
-    for (cur = base->facetSet; cur != NULL; cur = cur->next) {
-	facet = cur->facet;
-	switch (facet->type) {
-	    case XML_SCHEMA_FACET_LENGTH:
-		bflength = facet; break;
-	    case XML_SCHEMA_FACET_MINLENGTH:
-		bfminlen = facet; break;
-	    case XML_SCHEMA_FACET_MININCLUSIVE:
-		bfmininc = facet; break;
-	    case XML_SCHEMA_FACET_MINEXCLUSIVE:
-		bfminexc = facet; break;
-	    case XML_SCHEMA_FACET_MAXLENGTH:
-		bfmaxlen = facet; break;
-	    case XML_SCHEMA_FACET_MAXINCLUSIVE:
-		bfmaxinc = facet; break;
-	    case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-		bfmaxexc = facet; break;
-	    case XML_SCHEMA_FACET_TOTALDIGITS:
-		bftotdig = facet; break;
-	    case XML_SCHEMA_FACET_FRACTIONDIGITS:
-		bffracdig = facet; break;
-	    default:
-		break;
-	}
-    }
-    /*
-    * length and minLength or maxLength (2.2) + (3.2)
-    */
-    if (flength && (fminlen || fmaxlen)) {
-	FACET_RESTR_ERR(flength, "It is an error for both 'length' and "
-	    "either of 'minLength' or 'maxLength' to be specified on "
-	    "the same type definition")
-    }
-    /*
-    * Mutual exclusions in the same derivation step.
-    */
-    if ((fmaxinc) && (fmaxexc)) {
-	/*
-	* SCC "maxInclusive and maxExclusive"
-	*/
-	FACET_RESTR_MUTUAL_ERR(fmaxinc, fmaxexc)
-    }
-    if ((fmininc) && (fminexc)) {
-	/*
-	* SCC "minInclusive and minExclusive"
-	*/
-	FACET_RESTR_MUTUAL_ERR(fmininc, fminexc)
-    }
-
-    if (flength && bflength) {
-	/*
-	* SCC "length valid restriction"
-	* The values have to be equal.
-	*/
-	res = xmlSchemaCompareValues(flength->val, bflength->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res != 0)
-	    xmlSchemaDeriveFacetErr(pctxt, flength, bflength, 0, 0, 1);
-	if ((res != 0) && (bflength->fixed)) {
-	    FACET_RESTR_FIXED_ERR(flength)
-	}
-
-    }
-    if (fminlen && bfminlen) {
-	/*
-	* SCC "minLength valid restriction"
-	* minLength >= BASE minLength
-	*/
-	res = xmlSchemaCompareValues(fminlen->val, bfminlen->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res == -1)
-	    xmlSchemaDeriveFacetErr(pctxt, fminlen, bfminlen, 1, 1, 1);
-	if ((res != 0) && (bfminlen->fixed)) {
-	    FACET_RESTR_FIXED_ERR(fminlen)
-	}
-    }
-    if (fmaxlen && bfmaxlen) {
-	/*
-	* SCC "maxLength valid restriction"
-	* maxLength <= BASE minLength
-	*/
-	res = xmlSchemaCompareValues(fmaxlen->val, bfmaxlen->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res == 1)
-	    xmlSchemaDeriveFacetErr(pctxt, fmaxlen, bfmaxlen, -1, 1, 1);
-	if ((res != 0) && (bfmaxlen->fixed)) {
-	    FACET_RESTR_FIXED_ERR(fmaxlen)
-	}
-    }
-    /*
-    * SCC "length and minLength or maxLength"
-    */
-    if (! flength)
-	flength = bflength;
-    if (flength) {
-	if (! fminlen)
-	    fminlen = bfminlen;
-	if (fminlen) {
-	    /* (1.1) length >= minLength */
-	    res = xmlSchemaCompareValues(flength->val, fminlen->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1)
-		xmlSchemaDeriveFacetErr(pctxt, flength, fminlen, 1, 1, 0);
-	}
-	if (! fmaxlen)
-	    fmaxlen = bfmaxlen;
-	if (fmaxlen) {
-	    /* (2.1) length <= maxLength */
-	    res = xmlSchemaCompareValues(flength->val, fmaxlen->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1)
-		xmlSchemaDeriveFacetErr(pctxt, flength, fmaxlen, -1, 1, 0);
-	}
-    }
-    if (fmaxinc) {
-	/*
-	* "maxInclusive"
-	*/
-	if (fmininc) {
-	    /* SCC "maxInclusive >= minInclusive" */
-	    res = xmlSchemaCompareValues(fmaxinc->val, fmininc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxinc, fmininc, 1, 1, 0);
-	    }
-	}
-	/*
-	* SCC "maxInclusive valid restriction"
-	*/
-	if (bfmaxinc) {
-	    /* maxInclusive <= BASE maxInclusive */
-	    res = xmlSchemaCompareValues(fmaxinc->val, bfmaxinc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1)
-		xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmaxinc, -1, 1, 1);
-	    if ((res != 0) && (bfmaxinc->fixed)) {
-		FACET_RESTR_FIXED_ERR(fmaxinc)
-	    }
-	}
-	if (bfmaxexc) {
-	    /* maxInclusive < BASE maxExclusive */
-	    res = xmlSchemaCompareValues(fmaxinc->val, bfmaxexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmaxexc, -1, 0, 1);
-	    }
-	}
-	if (bfmininc) {
-	    /* maxInclusive >= BASE minInclusive */
-	    res = xmlSchemaCompareValues(fmaxinc->val, bfmininc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmininc, 1, 1, 1);
-	    }
-	}
-	if (bfminexc) {
-	    /* maxInclusive > BASE minExclusive */
-	    res = xmlSchemaCompareValues(fmaxinc->val, bfminexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfminexc, 1, 0, 1);
-	    }
-	}
-    }
-    if (fmaxexc) {
-	/*
-	* "maxExclusive >= minExclusive"
-	*/
-	if (fminexc) {
-	    res = xmlSchemaCompareValues(fmaxexc->val, fminexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxexc, fminexc, 1, 1, 0);
-	    }
-	}
-	/*
-	* "maxExclusive valid restriction"
-	*/
-	if (bfmaxexc) {
-	    /* maxExclusive <= BASE maxExclusive */
-	    res = xmlSchemaCompareValues(fmaxexc->val, bfmaxexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmaxexc, -1, 1, 1);
-	    }
-	    if ((res != 0) && (bfmaxexc->fixed)) {
-		FACET_RESTR_FIXED_ERR(fmaxexc)
-	    }
-	}
-	if (bfmaxinc) {
-	    /* maxExclusive <= BASE maxInclusive */
-	    res = xmlSchemaCompareValues(fmaxexc->val, bfmaxinc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmaxinc, -1, 1, 1);
-	    }
-	}
-	if (bfmininc) {
-	    /* maxExclusive > BASE minInclusive */
-	    res = xmlSchemaCompareValues(fmaxexc->val, bfmininc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmininc, 1, 0, 1);
-	    }
-	}
-	if (bfminexc) {
-	    /* maxExclusive > BASE minExclusive */
-	    res = xmlSchemaCompareValues(fmaxexc->val, bfminexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfminexc, 1, 0, 1);
-	    }
-	}
-    }
-    if (fminexc) {
-	/*
-	* "minExclusive < maxInclusive"
-	*/
-	if (fmaxinc) {
-	    res = xmlSchemaCompareValues(fminexc->val, fmaxinc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fminexc, fmaxinc, -1, 0, 0);
-	    }
-	}
-	/*
-	* "minExclusive valid restriction"
-	*/
-	if (bfminexc) {
-	    /* minExclusive >= BASE minExclusive */
-	    res = xmlSchemaCompareValues(fminexc->val, bfminexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fminexc, bfminexc, 1, 1, 1);
-	    }
-	    if ((res != 0) && (bfminexc->fixed)) {
-		FACET_RESTR_FIXED_ERR(fminexc)
-	    }
-	}
-	if (bfmaxinc) {
-	    /* minExclusive <= BASE maxInclusive */
-	    res = xmlSchemaCompareValues(fminexc->val, bfmaxinc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmaxinc, -1, 1, 1);
-	    }
-	}
-	if (bfmininc) {
-	    /* minExclusive >= BASE minInclusive */
-	    res = xmlSchemaCompareValues(fminexc->val, bfmininc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmininc, 1, 1, 1);
-	    }
-	}
-	if (bfmaxexc) {
-	    /* minExclusive < BASE maxExclusive */
-	    res = xmlSchemaCompareValues(fminexc->val, bfmaxexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmaxexc, -1, 0, 1);
-	    }
-	}
-    }
-    if (fmininc) {
-	/*
-	* "minInclusive < maxExclusive"
-	*/
-	if (fmaxexc) {
-	    res = xmlSchemaCompareValues(fmininc->val, fmaxexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmininc, fmaxexc, -1, 0, 0);
-	    }
-	}
-	/*
-	* "minExclusive valid restriction"
-	*/
-	if (bfmininc) {
-	    /* minInclusive >= BASE minInclusive */
-	    res = xmlSchemaCompareValues(fmininc->val, bfmininc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == -1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmininc, 1, 1, 1);
-	    }
-	    if ((res != 0) && (bfmininc->fixed)) {
-		FACET_RESTR_FIXED_ERR(fmininc)
-	    }
-	}
-	if (bfmaxinc) {
-	    /* minInclusive <= BASE maxInclusive */
-	    res = xmlSchemaCompareValues(fmininc->val, bfmaxinc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res == 1) {
-		xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmaxinc, -1, 1, 1);
-	    }
-	}
-	if (bfminexc) {
-	    /* minInclusive > BASE minExclusive */
-	    res = xmlSchemaCompareValues(fmininc->val, bfminexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != 1)
-		xmlSchemaDeriveFacetErr(pctxt, fmininc, bfminexc, 1, 0, 1);
-	}
-	if (bfmaxexc) {
-	    /* minInclusive < BASE maxExclusive */
-	    res = xmlSchemaCompareValues(fmininc->val, bfmaxexc->val);
-	    if (res == -2)
-		goto internal_error;
-	    if (res != -1)
-		xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmaxexc, -1, 0, 1);
-	}
-    }
-    if (ftotdig && bftotdig) {
-	/*
-	* SCC " totalDigits valid restriction"
-	* totalDigits <= BASE totalDigits
-	*/
-	res = xmlSchemaCompareValues(ftotdig->val, bftotdig->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res == 1)
-	    xmlSchemaDeriveFacetErr(pctxt, ftotdig, bftotdig,
-	    -1, 1, 1);
-	if ((res != 0) && (bftotdig->fixed)) {
-	    FACET_RESTR_FIXED_ERR(ftotdig)
-	}
-    }
-    if (ffracdig && bffracdig) {
-	/*
-	* SCC  "fractionDigits valid restriction"
-	* fractionDigits <= BASE fractionDigits
-	*/
-	res = xmlSchemaCompareValues(ffracdig->val, bffracdig->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res == 1)
-	    xmlSchemaDeriveFacetErr(pctxt, ffracdig, bffracdig,
-	    -1, 1, 1);
-	if ((res != 0) && (bffracdig->fixed)) {
-	    FACET_RESTR_FIXED_ERR(ffracdig)
-	}
-    }
-    /*
-    * SCC "fractionDigits less than or equal to totalDigits"
-    */
-    if (! ftotdig)
-	ftotdig = bftotdig;
-    if (! ffracdig)
-	ffracdig = bffracdig;
-    if (ftotdig && ffracdig) {
-	res = xmlSchemaCompareValues(ffracdig->val, ftotdig->val);
-	if (res == -2)
-	    goto internal_error;
-	if (res == 1)
-	    xmlSchemaDeriveFacetErr(pctxt, ffracdig, ftotdig,
-		-1, 1, 0);
-    }
-    /*
-    * *Enumerations* won' be added here, since only the first set
-    * of enumerations in the ancestor-or-self axis is used
-    * for validation, plus we need to use the base type of those
-    * enumerations for whitespace.
-    *
-    * *Patterns*: won't be add here, since they are ORed at
-    * type level and ANDed at ancestor level. This will
-    * happed during validation by walking the base axis
-    * of the type.
-    */
-    for (cur = base->facetSet; cur != NULL; cur = cur->next) {
-	bfacet = cur->facet;
-	/*
-	* Special handling of enumerations and patterns.
-	* TODO: hmm, they should not appear in the set, so remove this.
-	*/
-	if ((bfacet->type == XML_SCHEMA_FACET_PATTERN) ||
-	    (bfacet->type == XML_SCHEMA_FACET_ENUMERATION))
-	    continue;
-	/*
-	* Search for a duplicate facet in the current type.
-	*/
-	link = type->facetSet;
-	/* err = 0; */
-	/* fixedErr = 0; */
-	while (link != NULL) {
-	    facet = link->facet;
-	    if (facet->type == bfacet->type) {
-		switch (facet->type) {
-		    case XML_SCHEMA_FACET_WHITESPACE:
-			/*
-			* The whitespace must be stronger.
-			*/
-			if (facet->whitespace < bfacet->whitespace) {
-			    FACET_RESTR_ERR(facet,
-				"The 'whitespace' value has to be equal to "
-				"or stronger than the 'whitespace' value of "
-				"the base type")
-			}
-			if ((bfacet->fixed) &&
-			    (facet->whitespace != bfacet->whitespace)) {
-			    FACET_RESTR_FIXED_ERR(facet)
-			}
-			break;
-		    default:
-			break;
-		}
-		/* Duplicate found. */
-		break;
-	    }
-	    link = link->next;
-	}
-	/*
-	* If no duplicate was found: add the base types's facet
-	* to the set.
-	*/
-	if (link == NULL) {
-	    link = (xmlSchemaFacetLinkPtr)
-		xmlMalloc(sizeof(xmlSchemaFacetLink));
-	    if (link == NULL) {
-		xmlSchemaPErrMemory(pctxt,
-		    "deriving facets, creating a facet link", NULL);
-		return (-1);
-	    }
-	    link->facet = cur->facet;
-	    link->next = NULL;
-	    if (last == NULL)
-		type->facetSet = link;
-	    else
-		last->next = link;
-	    last = link;
-	}
-
-    }
-
-    return (0);
-internal_error:
-    PERROR_INT("xmlSchemaDeriveAndValidateFacets",
-	"an error occured");
-    return (-1);
-}
-
-static int
-xmlSchemaFinishMemberTypeDefinitionsProperty(xmlSchemaParserCtxtPtr pctxt,
-					     xmlSchemaTypePtr type)
-{
-    xmlSchemaTypeLinkPtr link, lastLink, prevLink, subLink, newLink;
-    /*
-    * The actual value is then formed by replacing any union type
-    * definition in the `explicit members` with the members of their
-    * {member type definitions}, in order.
-    *
-    * TODO: There's a bug entry at
-    * "http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0287.html"
-    * which indicates that we'll keep the union types the future.
-    */
-    link = type->memberTypes;
-    while (link != NULL) {
-
-	if (WXS_IS_TYPE_NOT_FIXED(link->type))
-	    xmlSchemaTypeFixup(link->type, ACTXT_CAST pctxt);
-
-	if (WXS_IS_UNION(link->type)) {
-	    subLink = xmlSchemaGetUnionSimpleTypeMemberTypes(link->type);
-	    if (subLink != NULL) {
-		link->type = subLink->type;
-		if (subLink->next != NULL) {
-		    lastLink = link->next;
-		    subLink = subLink->next;
-		    prevLink = link;
-		    while (subLink != NULL) {
-			newLink = (xmlSchemaTypeLinkPtr)
-			    xmlMalloc(sizeof(xmlSchemaTypeLink));
-			if (newLink == NULL) {
-			    xmlSchemaPErrMemory(pctxt, "allocating a type link",
-				NULL);
-			    return (-1);
-			}
-			newLink->type = subLink->type;
-			prevLink->next = newLink;
-			prevLink = newLink;
-			newLink->next = lastLink;
-
-			subLink = subLink->next;
-		    }
-		}
-	    }
-	}
-	link = link->next;
-    }
-    return (0);
-}
-
-static void
-xmlSchemaTypeFixupOptimFacets(xmlSchemaTypePtr type)
-{
-    int has = 0, needVal = 0, normVal = 0;
-
-    has	= (type->baseType->flags & XML_SCHEMAS_TYPE_HAS_FACETS) ? 1 : 0;
-    if (has) {
-	needVal = (type->baseType->flags &
-	    XML_SCHEMAS_TYPE_FACETSNEEDVALUE) ? 1 : 0;
-	normVal = (type->baseType->flags &
-	    XML_SCHEMAS_TYPE_NORMVALUENEEDED) ? 1 : 0;
-    }
-    if (type->facets != NULL) {
-	xmlSchemaFacetPtr fac;
-
-	for (fac = type->facets; fac != NULL; fac = fac->next) {
-	    switch (fac->type) {
-		case XML_SCHEMA_FACET_WHITESPACE:
-		    break;
-		case XML_SCHEMA_FACET_PATTERN:
-		    normVal = 1;
-		    has = 1;
-		    break;
-		case XML_SCHEMA_FACET_ENUMERATION:
-		    needVal = 1;
-		    normVal = 1;
-		    has = 1;
-		    break;
-		default:
-		    has = 1;
-		    break;
-	    }
-	}
-    }
-    if (normVal)
-	type->flags |= XML_SCHEMAS_TYPE_NORMVALUENEEDED;
-    if (needVal)
-	type->flags |= XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
-    if (has)
-	type->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
-
-    if (has && (! needVal) && WXS_IS_ATOMIC(type)) {
-	xmlSchemaTypePtr prim = xmlSchemaGetPrimitiveType(type);
-	/*
-	* OPTIMIZE VAL TODO: Some facets need a computed value.
-	*/
-	if ((prim->builtInType != XML_SCHEMAS_ANYSIMPLETYPE) &&
-	    (prim->builtInType != XML_SCHEMAS_STRING)) {
-	    type->flags |= XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
-	}
-    }
-}
-
-static int
-xmlSchemaTypeFixupWhitespace(xmlSchemaTypePtr type)
-{
-
-
-    /*
-    * Evaluate the whitespace-facet value.
-    */
-    if (WXS_IS_LIST(type)) {
-	type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
-	return (0);
-    } else if (WXS_IS_UNION(type))
-	return (0);
-
-    if (type->facetSet != NULL) {
-	xmlSchemaFacetLinkPtr lin;
-
-	for (lin = type->facetSet; lin != NULL; lin = lin->next) {
-	    if (lin->facet->type == XML_SCHEMA_FACET_WHITESPACE) {
-		switch (lin->facet->whitespace) {
-		case XML_SCHEMAS_FACET_PRESERVE:
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
-		    break;
-		case XML_SCHEMAS_FACET_REPLACE:
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
-		    break;
-		case XML_SCHEMAS_FACET_COLLAPSE:
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
-		    break;
-		default:
-		    return (-1);
-		}
-		return (0);
-	    }
-	}
-    }
-    /*
-    * For all `atomic` datatypes other than string (and types `derived`
-    * by `restriction` from it) the value of whiteSpace is fixed to
-    * collapse
-    */
-    {
-	xmlSchemaTypePtr anc;
-
-	for (anc = type->baseType; anc != NULL &&
-		anc->builtInType != XML_SCHEMAS_ANYTYPE;
-		anc = anc->baseType) {
-
-	    if (anc->type == XML_SCHEMA_TYPE_BASIC) {
-		if (anc->builtInType == XML_SCHEMAS_NORMSTRING) {
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
-
-		} else if ((anc->builtInType == XML_SCHEMAS_STRING) ||
-		    (anc->builtInType == XML_SCHEMAS_ANYSIMPLETYPE)) {
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
-
-		} else
-		    type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
-		break;
-	    }
-	}
-    }
-    return (0);
-}
-
-static int
-xmlSchemaFixupSimpleTypeStageOne(xmlSchemaParserCtxtPtr pctxt,
-			  xmlSchemaTypePtr type)
-{
-    if (type->type != XML_SCHEMA_TYPE_SIMPLE)
-	return(0);
-    if (! WXS_IS_TYPE_NOT_FIXED_1(type))
-	return(0);
-    type->flags |= XML_SCHEMAS_TYPE_FIXUP_1;
-
-    if (WXS_IS_LIST(type)) {
-	/*
-	* Corresponds to <simpleType><list>...
-	*/
-	if (type->subtypes == NULL) {
-	    /*
-	    * This one is really needed, so get out.
-	    */
-	    PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
-		"list type has no item-type assigned");
-	    return(-1);
-	}
-    } else if (WXS_IS_UNION(type)) {
-	/*
-	* Corresponds to <simpleType><union>...
-	*/
-	if (type->memberTypes == NULL) {
-	    /*
-	    * This one is really needed, so get out.
-	    */
-	    PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
-		"union type has no member-types assigned");
-	    return(-1);
-	}
-    } else {
-	/*
-	* Corresponds to <simpleType><restriction>...
-	*/
-	if (type->baseType == NULL) {
-	    PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
-		"type has no base-type assigned");
-	    return(-1);
-	}
-	if (WXS_IS_TYPE_NOT_FIXED_1(type->baseType))
-	    if (xmlSchemaFixupSimpleTypeStageOne(pctxt, type->baseType) == -1)
-		return(-1);
-	/*
-	* Variety
-	* If the <restriction> alternative is chosen, then the
-	* {variety} of the {base type definition}.
-	*/
-	if (WXS_IS_ATOMIC(type->baseType))
-	    type->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
-	else if (WXS_IS_LIST(type->baseType)) {
-	    type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
-	    /*
-	    * Inherit the itemType.
-	    */
-	    type->subtypes = type->baseType->subtypes;
-	} else if (WXS_IS_UNION(type->baseType)) {
-	    type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION;
-	    /*
-	    * NOTE that we won't assign the memberTypes of the base,
-	    * since this will make trouble when freeing them; we will
-	    * use a lookup function to access them instead.
-	    */
-	}
-    }
-    return(0);
-}
-
-#ifdef DEBUG_TYPE
-static void
-xmlSchemaDebugFixedType(xmlSchemaParserCtxtPtr pctxt,
-		       xmlSchemaTypePtr type)
-{
-    if (type->node != NULL) {
-        xmlGenericError(xmlGenericErrorContext,
-                        "Type of %s : %s:%d :", name,
-                        type->node->doc->URL,
-                        xmlGetLineNo(type->node));
-    } else {
-        xmlGenericError(xmlGenericErrorContext, "Type of %s :", name);
-    }
-    if ((WXS_IS_SIMPLE(type)) || (WXS_IS_COMPLEX(type))) {
-	switch (type->contentType) {
-	    case XML_SCHEMA_CONTENT_SIMPLE:
-		xmlGenericError(xmlGenericErrorContext, "simple\n");
-		break;
-	    case XML_SCHEMA_CONTENT_ELEMENTS:
-		xmlGenericError(xmlGenericErrorContext, "elements\n");
-		break;
-	    case XML_SCHEMA_CONTENT_UNKNOWN:
-		xmlGenericError(xmlGenericErrorContext, "unknown !!!\n");
-		break;
-	    case XML_SCHEMA_CONTENT_EMPTY:
-		xmlGenericError(xmlGenericErrorContext, "empty\n");
-		break;
-	    case XML_SCHEMA_CONTENT_MIXED:
-		if (xmlSchemaIsParticleEmptiable((xmlSchemaParticlePtr)
-		    type->subtypes))
-		    xmlGenericError(xmlGenericErrorContext,
-			"mixed as emptiable particle\n");
-		else
-		    xmlGenericError(xmlGenericErrorContext, "mixed\n");
-		break;
-		/* Removed, since not used. */
-		/*
-		case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
-		xmlGenericError(xmlGenericErrorContext, "mixed or elems\n");
-		break;
-		*/
-	    case XML_SCHEMA_CONTENT_BASIC:
-		xmlGenericError(xmlGenericErrorContext, "basic\n");
-		break;
-	    default:
-		xmlGenericError(xmlGenericErrorContext,
-		    "not registered !!!\n");
-		break;
-	}
-    }
-}
-#endif
-
-/*
-* 3.14.6 Constraints on Simple Type Definition Schema Components
-*/
-static int
-xmlSchemaFixupSimpleTypeStageTwo(xmlSchemaParserCtxtPtr pctxt,
-				 xmlSchemaTypePtr type)
-{
-    int res, olderrs = pctxt->nberrors;
-
-    if (type->type != XML_SCHEMA_TYPE_SIMPLE)
-	return(-1);
-
-    if (! WXS_IS_TYPE_NOT_FIXED(type))
-	return(0);
-
-    type->flags |= XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
-    type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
-
-    if (type->baseType == NULL) {
-	PERROR_INT("xmlSchemaFixupSimpleTypeStageTwo",
-	    "missing baseType");
-	goto exit_failure;
-    }
-    if (WXS_IS_TYPE_NOT_FIXED(type->baseType))
-	xmlSchemaTypeFixup(type->baseType, ACTXT_CAST pctxt);
-    /*
-    * If a member type of a union is a union itself, we need to substitute
-    * that member type for its member types.
-    * NOTE that this might change in WXS 1.1; i.e. we will keep the union
-    * types in WXS 1.1.
-    */
-    if ((type->memberTypes != NULL) &&
-	(xmlSchemaFinishMemberTypeDefinitionsProperty(pctxt, type) == -1))
-	return(-1);
-    /*
-    * SPEC src-simple-type 1
-    * "The corresponding simple type definition, if any, must satisfy
-    * the conditions set out in Constraints on Simple Type Definition
-    * Schema Components ($3.14.6)."
-    */
-    /*
-    * Schema Component Constraint: Simple Type Definition Properties Correct
-    * (st-props-correct)
-    */
-    res = xmlSchemaCheckSTPropsCorrect(pctxt, type);
-    HFAILURE HERROR
-    /*
-    * Schema Component Constraint: Derivation Valid (Restriction, Simple)
-    * (cos-st-restricts)
-    */
-    res = xmlSchemaCheckCOSSTRestricts(pctxt, type);
-    HFAILURE HERROR
-    /*
-    * TODO: Removed the error report, since it got annoying to get an
-    * extra error report, if anything failed until now.
-    * Enable this if needed.
-    *
-    * xmlSchemaPErr(ctxt, type->node,
-    *    XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
-    *    "Simple type '%s' does not satisfy the constraints "
-    *    "on simple type definitions.\n",
-    *    type->name, NULL);
-    */
-    /*
-    * Schema Component Constraint: Simple Type Restriction (Facets)
-    * (st-restrict-facets)
-    */
-    res = xmlSchemaCheckFacetValues(type, pctxt);
-    HFAILURE HERROR
-    if ((type->facetSet != NULL) ||
-	(type->baseType->facetSet != NULL)) {
-	res = xmlSchemaDeriveAndValidateFacets(pctxt, type);
-	HFAILURE HERROR
-    }
-    /*
-    * Whitespace value.
-    */
-    res = xmlSchemaTypeFixupWhitespace(type);
-    HFAILURE HERROR
-    xmlSchemaTypeFixupOptimFacets(type);
-
-exit_error:
-#ifdef DEBUG_TYPE
-    xmlSchemaDebugFixedType(pctxt, type);
-#endif
-    if (olderrs != pctxt->nberrors)
-	return(pctxt->err);
-    return(0);
-
-exit_failure:
-#ifdef DEBUG_TYPE
-    xmlSchemaDebugFixedType(pctxt, type);
-#endif
-    return(-1);
-}
-
-static int
-xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt,
-			  xmlSchemaTypePtr type)
-{
-    int res = 0, olderrs = pctxt->nberrors;
-    xmlSchemaTypePtr baseType = type->baseType;
-
-    if (! WXS_IS_TYPE_NOT_FIXED(type))
-	return(0);
-    type->flags |= XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
-    if (baseType == NULL) {
-	PERROR_INT("xmlSchemaFixupComplexType",
-	    "missing baseType");
-	goto exit_failure;
-    }
-    /*
-    * Fixup the base type.
-    */
-    if (WXS_IS_TYPE_NOT_FIXED(baseType))
-	xmlSchemaTypeFixup(baseType, ACTXT_CAST pctxt);
-    if (baseType->flags & XML_SCHEMAS_TYPE_INTERNAL_INVALID) {
-	/*
-	* Skip fixup if the base type is invalid.
-	* TODO: Generate a warning!
-	*/
-	return(0);
-    }
-    /*
-    * This basically checks if the base type can be derived.
-    */
-    res = xmlSchemaCheckSRCCT(pctxt, type);
-    HFAILURE HERROR
-    /*
-    * Fixup the content type.
-    */
-    if (type->contentType == XML_SCHEMA_CONTENT_SIMPLE) {
-	/*
-	* Corresponds to <complexType><simpleContent>...
-	*/
-	if ((WXS_IS_COMPLEX(baseType)) &&
-	    (baseType->contentTypeDef != NULL) &&
-	    (WXS_IS_RESTRICTION(type))) {
-	    xmlSchemaTypePtr contentBase, content;
-#ifdef ENABLE_NAMED_LOCALS
-	    char buf[30];
-	    const xmlChar *tmpname;
-#endif
-	    /*
-	    * SPEC (1) If <restriction> + base type is <complexType>,
-	    * "whose own {content type} is a simple type..."
-	    */
-	    if (type->contentTypeDef != NULL) {
-		/*
-		* SPEC (1.1) "the simple type definition corresponding to the
-		* <simpleType> among the [children] of <restriction> if there
-		* is one;"
-		* Note that this "<simpleType> among the [children]" was put
-		* into ->contentTypeDef during parsing.
-		*/
-		contentBase = type->contentTypeDef;
-		type->contentTypeDef = NULL;
-	    } else {
-		/*
-		* (1.2) "...otherwise (<restriction> has no <simpleType>
-		* among its [children]), the simple type definition which
-		* is the {content type} of the ... base type."
-		*/
-		contentBase = baseType->contentTypeDef;
-	    }
-	    /*
-	    * SPEC
-	    * "... a simple type definition which restricts the simple
-	    * type definition identified in clause 1.1 or clause 1.2
-	    * with a set of facet components"
-	    *
-	    * Create the anonymous simple type, which will be the content
-	    * type of the complex type.
-	    */
-#ifdef ENABLE_NAMED_LOCALS
-	    snprintf(buf, 29, "#scST%d", ++(pctxt->counter));
-	    tmpname = xmlDictLookup(pctxt->dict, BAD_CAST buf, -1);
-	    content = xmlSchemaAddType(pctxt, pctxt->schema,
-		XML_SCHEMA_TYPE_SIMPLE, tmpname, type->targetNamespace,
-		type->node, 0);
-#else
-	    content = xmlSchemaAddType(pctxt, pctxt->schema,
-		XML_SCHEMA_TYPE_SIMPLE, NULL, type->targetNamespace,
-		type->node, 0);
-#endif
-	    if (content == NULL)
-		goto exit_failure;
-	    /*
-	    * We will use the same node as for the <complexType>
-	    * to have it somehow anchored in the schema doc.
-	    */
-	    content->type = XML_SCHEMA_TYPE_SIMPLE;
-	    content->baseType = contentBase;
-	    /*
-	    * Move the facets, previously anchored on the
-	    * complexType during parsing.
-	    */
-	    content->facets = type->facets;
-	    type->facets = NULL;
-	    content->facetSet = type->facetSet;
-	    type->facetSet = NULL;
-
-	    type->contentTypeDef = content;
-	    if (WXS_IS_TYPE_NOT_FIXED(contentBase))
-		xmlSchemaTypeFixup(contentBase, ACTXT_CAST pctxt);
-	    /*
-	    * Fixup the newly created type. We don't need to check
-	    * for circularity here.
-	    */
-	    res = xmlSchemaFixupSimpleTypeStageOne(pctxt, content);
-	    HFAILURE HERROR
-	    res = xmlSchemaFixupSimpleTypeStageTwo(pctxt, content);
-	    HFAILURE HERROR
-
-	} else if ((WXS_IS_COMPLEX(baseType)) &&
-	    (baseType->contentType == XML_SCHEMA_CONTENT_MIXED) &&
-	    (WXS_IS_RESTRICTION(type))) {
-	    /*
-	    * SPEC (2) If <restriction> + base is a mixed <complexType> with
-	    * an emptiable particle, then a simple type definition which
-	    * restricts the <restriction>'s <simpleType> child.
-	    */
-	    if ((type->contentTypeDef == NULL) ||
-		(type->contentTypeDef->baseType == NULL)) {
-		/*
-		* TODO: Check if this ever happens.
-		*/
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_INTERNAL,
-		    WXS_BASIC_CAST type, NULL,
-		    "Internal error: xmlSchemaTypeFixup, "
-		    "complex type '%s': the <simpleContent><restriction> "
-		    "is missing a <simpleType> child, but was not catched "
-		    "by xmlSchemaCheckSRCCT()", type->name);
-		goto exit_failure;
-	    }
-	} else if ((WXS_IS_COMPLEX(baseType)) && WXS_IS_EXTENSION(type)) {
-	    /*
-	    * SPEC (3) If <extension> + base is <complexType> with
-	    * <simpleType> content, "...then the {content type} of that
-	    * complex type definition"
-	    */
-	    if (baseType->contentTypeDef == NULL) {
-		/*
-		* TODO: Check if this ever happens. xmlSchemaCheckSRCCT
-		* should have catched this already.
-		*/
-		xmlSchemaPCustomErr(pctxt,
-		    XML_SCHEMAP_INTERNAL,
-		    WXS_BASIC_CAST type, NULL,
-		    "Internal error: xmlSchemaTypeFixup, "
-		    "complex type '%s': the <extension>ed base type is "
-		    "a complex type with no simple content type",
-		    type->name);
-		goto exit_failure;
-	    }
-	    type->contentTypeDef = baseType->contentTypeDef;
-	} else if ((WXS_IS_SIMPLE(baseType)) && WXS_IS_EXTENSION(type)) {
-	    /*
-	    * SPEC (4) <extension> + base is <simpleType>
-	    * "... then that simple type definition"
-	    */
-	    type->contentTypeDef = baseType;
-	} else {
-	    /*
-	    * TODO: Check if this ever happens.
-	    */
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_INTERNAL,
-		WXS_BASIC_CAST type, NULL,
-		"Internal error: xmlSchemaTypeFixup, "
-		"complex type '%s' with <simpleContent>: unhandled "
-		"derivation case", type->name);
-	    goto exit_failure;
-	}
-    } else {
-	int dummySequence = 0;
-	xmlSchemaParticlePtr particle =
-	    (xmlSchemaParticlePtr) type->subtypes;
-	/*
-	* Corresponds to <complexType><complexContent>...
-	*
-	* NOTE that the effective mixed was already set during parsing of
-	* <complexType> and <complexContent>; its flag value is
-	* XML_SCHEMAS_TYPE_MIXED.
-	*
-	* Compute the "effective content":
-	* (2.1.1) + (2.1.2) + (2.1.3)
-	*/
-	if ((particle == NULL) ||
-	    ((particle->type == XML_SCHEMA_TYPE_PARTICLE) &&
-	    ((particle->children->type == XML_SCHEMA_TYPE_ALL) ||
-	    (particle->children->type == XML_SCHEMA_TYPE_SEQUENCE) ||
-	    ((particle->children->type == XML_SCHEMA_TYPE_CHOICE) &&
-	    (particle->minOccurs == 0))) &&
-	    ( ((xmlSchemaTreeItemPtr) particle->children)->children == NULL))) {
-	    if (type->flags & XML_SCHEMAS_TYPE_MIXED) {
-		/*
-		* SPEC (2.1.4) "If the `effective mixed` is true, then
-		* a particle whose properties are as follows:..."
-		*
-		* Empty sequence model group with
-		* minOccurs/maxOccurs = 1 (i.e. a "particle emptiable").
-		* NOTE that we sill assign it the <complexType> node to
-		* somehow anchor it in the doc.
-		*/
-		if ((particle == NULL) ||
-		    (particle->children->type != XML_SCHEMA_TYPE_SEQUENCE)) {
-		    /*
-		    * Create the particle.
-		    */
-		    particle = xmlSchemaAddParticle(pctxt,
-			type->node, 1, 1);
-		    if (particle == NULL)
-			goto exit_failure;
-		    /*
-		    * Create the model group.
-		    */ /* URGENT TODO: avoid adding to pending items. */
-		    particle->children = (xmlSchemaTreeItemPtr)
-			xmlSchemaAddModelGroup(pctxt, pctxt->schema,
-			XML_SCHEMA_TYPE_SEQUENCE, type->node);
-		    if (particle->children == NULL)
-			goto exit_failure;
-
-		    type->subtypes = (xmlSchemaTypePtr) particle;
-		}
-		dummySequence = 1;
-		type->contentType = XML_SCHEMA_CONTENT_ELEMENTS;
-	    } else {
-		/*
-		* SPEC (2.1.5) "otherwise empty"
-		*/
-		type->contentType = XML_SCHEMA_CONTENT_EMPTY;
-	    }
-	} else {
-	    /*
-	    * SPEC (2.2) "otherwise the particle corresponding to the
-	    * <all>, <choice>, <group> or <sequence> among the
-	    * [children]."
-	    */
-	    type->contentType = XML_SCHEMA_CONTENT_ELEMENTS;
-	}
-	/*
-	* Compute the "content type".
-	*/
-	if (WXS_IS_RESTRICTION(type)) {
-	    /*
-	    * SPEC (3.1) "If <restriction>..."
-	    * (3.1.1) + (3.1.2) */
-	    if (type->contentType != XML_SCHEMA_CONTENT_EMPTY) {
-		if (type->flags & XML_SCHEMAS_TYPE_MIXED)
-		    type->contentType = XML_SCHEMA_CONTENT_MIXED;
-	    }
-	} else {
-	    /*
-	    * SPEC (3.2) "If <extension>..."
-	    */
-	    if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) {
-		/*
-		* SPEC (3.2.1)
-		* "If the `effective content` is empty, then the
-		*  {content type} of the [...] base ..."
-		*/
-		type->contentType = baseType->contentType;
-		type->subtypes = baseType->subtypes;
-		/*
-		* Fixes bug #347316:
-		* This is the case when the base type has a simple
-		* type definition as content.
-		*/
-		type->contentTypeDef = baseType->contentTypeDef;
-		/*
-		* NOTE that the effective mixed is ignored here.
-		*/
-	    } else if (baseType->contentType == XML_SCHEMA_CONTENT_EMPTY) {
-		/*
-		* SPEC (3.2.2)
-		*/
-		if (type->flags & XML_SCHEMAS_TYPE_MIXED)
-		    type->contentType = XML_SCHEMA_CONTENT_MIXED;
-	    } else {
-		/*
-		* SPEC (3.2.3)
-		*/
-		if (type->flags & XML_SCHEMAS_TYPE_MIXED)
-		    type->contentType = XML_SCHEMA_CONTENT_MIXED;
-		    /*
-		    * "A model group whose {compositor} is sequence and whose
-		    * {particles} are..."
-		    */
-		if ((WXS_TYPE_PARTICLE(type) != NULL) &&
-		    (WXS_TYPE_PARTICLE_TERM(type) != NULL) &&
-		    ((WXS_TYPE_PARTICLE_TERM(type))->type ==
-			XML_SCHEMA_TYPE_ALL))
-		{
-		    /*
-		    * SPEC cos-all-limited (1)
-		    */
-		    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			/* TODO: error code */
-			XML_SCHEMAP_COS_ALL_LIMITED,
-			WXS_ITEM_NODE(type), NULL,
-			"The type has an 'all' model group in its "
-			"{content type} and thus cannot be derived from "
-			"a non-empty type, since this would produce a "
-			"'sequence' model group containing the 'all' "
-			"model group; 'all' model groups are not "
-			"allowed to appear inside other model groups",
-			NULL, NULL);
-
-		} else if ((WXS_TYPE_PARTICLE(baseType) != NULL) &&
-		    (WXS_TYPE_PARTICLE_TERM(baseType) != NULL) &&
-		    ((WXS_TYPE_PARTICLE_TERM(baseType))->type ==
-			XML_SCHEMA_TYPE_ALL))
-		{
-		    /*
-		    * SPEC cos-all-limited (1)
-		    */
-		    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			/* TODO: error code */
-			XML_SCHEMAP_COS_ALL_LIMITED,
-			WXS_ITEM_NODE(type), NULL,
-			"A type cannot be derived by extension from a type "
-			"which has an 'all' model group in its "
-			"{content type}, since this would produce a "
-			"'sequence' model group containing the 'all' "
-			"model group; 'all' model groups are not "
-			"allowed to appear inside other model groups",
-			NULL, NULL);
-
-		} else if (! dummySequence) {
-		    xmlSchemaTreeItemPtr effectiveContent =
-			(xmlSchemaTreeItemPtr) type->subtypes;
-		    /*
-		    * Create the particle.
-		    */
-		    particle = xmlSchemaAddParticle(pctxt,
-			type->node, 1, 1);
-		    if (particle == NULL)
-			goto exit_failure;
-		    /*
-		    * Create the "sequence" model group.
-		    */
-		    particle->children = (xmlSchemaTreeItemPtr)
-			xmlSchemaAddModelGroup(pctxt, pctxt->schema,
-			XML_SCHEMA_TYPE_SEQUENCE, type->node);
-		    if (particle->children == NULL)
-			goto exit_failure;
-		    WXS_TYPE_CONTENTTYPE(type) = (xmlSchemaTypePtr) particle;
-		    /*
-		    * SPEC "the particle of the {content type} of
-		    * the ... base ..."
-		    * Create a duplicate of the base type's particle
-		    * and assign its "term" to it.
-		    */
-		    particle->children->children =
-			(xmlSchemaTreeItemPtr) xmlSchemaAddParticle(pctxt,
-			type->node,
-			((xmlSchemaParticlePtr) baseType->subtypes)->minOccurs,
-			((xmlSchemaParticlePtr) baseType->subtypes)->maxOccurs);
-		    if (particle->children->children == NULL)
-			goto exit_failure;
-		    particle = (xmlSchemaParticlePtr)
-			particle->children->children;
-		    particle->children =
-			((xmlSchemaParticlePtr) baseType->subtypes)->children;
-		    /*
-		    * SPEC "followed by the `effective content`."
-		    */
-		    particle->next = effectiveContent;
-		    /*
-		    * This all will result in:
-		    * new-particle
-		    *   --> new-sequence(
-		    *         new-particle
-		    *           --> base-model,
-		    *         this-particle
-		    *	        --> this-model
-		    *	    )
-		    */
-		} else {
-		    /*
-		    * This is the case when there is already an empty
-		    * <sequence> with minOccurs==maxOccurs==1.
-		    * Just add the base types's content type.
-		    * NOTE that, although we miss to add an intermediate
-		    * <sequence>, this should produce no difference to
-		    * neither the regex compilation of the content model,
-		    * nor to the complex type contraints.
-		    */
-		    particle->children->children =
-			(xmlSchemaTreeItemPtr) baseType->subtypes;
-		}
-	    }
-	}
-    }
-    /*
-    * Now fixup attribute uses:
-    *   - expand attr. group references
-    *     - intersect attribute wildcards
-    *   - inherit attribute uses of the base type
-    *   - inherit or union attr. wildcards if extending
-    *   - apply attr. use prohibitions if restricting
-    */
-    res = xmlSchemaFixupTypeAttributeUses(pctxt, type);
-    HFAILURE HERROR
-    /*
-    * Apply the complex type component constraints; this will not
-    * check attributes, since this is done in
-    * xmlSchemaFixupTypeAttributeUses().
-    */
-    res = xmlSchemaCheckCTComponent(pctxt, type);
-    HFAILURE HERROR
-
-#ifdef DEBUG_TYPE
-    xmlSchemaDebugFixedType(pctxt, type);
-#endif
-    if (olderrs != pctxt->nberrors)
-	return(pctxt->err);
-    else
-	return(0);
-
-exit_error:
-    type->flags |= XML_SCHEMAS_TYPE_INTERNAL_INVALID;
-#ifdef DEBUG_TYPE
-    xmlSchemaDebugFixedType(pctxt, type);
-#endif
-    return(pctxt->err);
-
-exit_failure:
-    type->flags |= XML_SCHEMAS_TYPE_INTERNAL_INVALID;
-#ifdef DEBUG_TYPE
-    xmlSchemaDebugFixedType(pctxt, type);
-#endif
-    return(-1);
-}
-
-
-/**
- * xmlSchemaTypeFixup:
- * @typeDecl:  the schema type definition
- * @ctxt:  the schema parser context
- *
- * Fixes the content model of the type.
- * URGENT TODO: We need an int result!
- */
-static int
-xmlSchemaTypeFixup(xmlSchemaTypePtr type,
-                   xmlSchemaAbstractCtxtPtr actxt)
-{
-    if (type == NULL)
-        return(0);
-    if (actxt->type != XML_SCHEMA_CTXT_PARSER) {
-	AERROR_INT("xmlSchemaTypeFixup",
-	    "this function needs a parser context");
-	return(-1);
-    }
-    if (! WXS_IS_TYPE_NOT_FIXED(type))
-	return(0);
-    if (type->type == XML_SCHEMA_TYPE_COMPLEX)
-	return(xmlSchemaFixupComplexType(PCTXT_CAST actxt, type));
-    else if (type->type == XML_SCHEMA_TYPE_SIMPLE)
-	return(xmlSchemaFixupSimpleTypeStageTwo(PCTXT_CAST actxt, type));
-    return(0);
-}
-
-/**
- * xmlSchemaCheckFacet:
- * @facet:  the facet
- * @typeDecl:  the schema type definition
- * @pctxt:  the schema parser context or NULL
- * @name: the optional name of the type
- *
- * Checks and computes the values of facets.
- *
- * Returns 0 if valid, a positive error code if not valid and
- *         -1 in case of an internal or API error.
- */
-int
-xmlSchemaCheckFacet(xmlSchemaFacetPtr facet,
-                    xmlSchemaTypePtr typeDecl,
-                    xmlSchemaParserCtxtPtr pctxt,
-		    const xmlChar * name ATTRIBUTE_UNUSED)
-{
-    int ret = 0, ctxtGiven;
-
-    if ((facet == NULL) || (typeDecl == NULL))
-        return(-1);
-    /*
-    * TODO: will the parser context be given if used from
-    * the relaxNG module?
-    */
-    if (pctxt == NULL)
-	ctxtGiven = 0;
-    else
-	ctxtGiven = 1;
-
-    switch (facet->type) {
-        case XML_SCHEMA_FACET_MININCLUSIVE:
-        case XML_SCHEMA_FACET_MINEXCLUSIVE:
-        case XML_SCHEMA_FACET_MAXINCLUSIVE:
-        case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-	case XML_SCHEMA_FACET_ENUMERATION: {
-                /*
-                 * Okay we need to validate the value
-                 * at that point.
-                 */
-		xmlSchemaTypePtr base;
-
-		/* 4.3.5.5 Constraints on enumeration Schema Components
-		* Schema Component Constraint: enumeration valid restriction
-		* It is an `error` if any member of {value} is not in the
-		* `value space` of {base type definition}.
-		*
-		* minInclusive, maxInclusive, minExclusive, maxExclusive:
-		* The value `must` be in the
-		* `value space` of the `base type`.
-		*/
-		/*
-		* This function is intended to deliver a compiled value
-		* on the facet. In this implementation of XML Schemata the
-		* type holding a facet, won't be a built-in type.
-		* Thus to ensure that other API
-		* calls (relaxng) do work, if the given type is a built-in
-		* type, we will assume that the given built-in type *is
-		* already* the base type.
-		*/
-		if (typeDecl->type != XML_SCHEMA_TYPE_BASIC) {
-		    base = typeDecl->baseType;
-		    if (base == NULL) {
-			PERROR_INT("xmlSchemaCheckFacet",
-			    "a type user derived type has no base type");
-			return (-1);
-		    }
-		} else
-		    base = typeDecl;
-
-		if (! ctxtGiven) {
-		    /*
-		    * A context is needed if called from RelaxNG.
-		    */
-		    pctxt = xmlSchemaNewParserCtxt("*");
-		    if (pctxt == NULL)
-			return (-1);
-		}
-		/*
-		* NOTE: This call does not check the content nodes,
-		* since they are not available:
-		* facet->node is just the node holding the facet
-		* definition, *not* the attribute holding the *value*
-		* of the facet.
-		*/
-		ret = xmlSchemaVCheckCVCSimpleType(
-		    ACTXT_CAST pctxt, facet->node, base,
-		    facet->value, &(facet->val), 1, 1, 0);
-                if (ret != 0) {
-		    if (ret < 0) {
-			/* No error message for RelaxNG. */
-			if (ctxtGiven) {
-			    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-				XML_SCHEMAP_INTERNAL, facet->node, NULL,
-				"Internal error: xmlSchemaCheckFacet, "
-				"failed to validate the value '%s' of the "
-				"facet '%s' against the base type",
-				facet->value, xmlSchemaFacetTypeToString(facet->type));
-			}
-			goto internal_error;
-		    }
-		    ret = XML_SCHEMAP_INVALID_FACET_VALUE;
-		    /* No error message for RelaxNG. */
-		    if (ctxtGiven) {
-			xmlChar *str = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    ret, facet->node, WXS_BASIC_CAST facet,
-			    "The value '%s' of the facet does not validate "
-			    "against the base type '%s'",
-			    facet->value,
-			    xmlSchemaFormatQName(&str,
-				base->targetNamespace, base->name));
-			FREE_AND_NULL(str);
-		    }
-		    goto exit;
-                } else if (facet->val == NULL) {
-		    if (ctxtGiven) {
-			PERROR_INT("xmlSchemaCheckFacet",
-			    "value was not computed");
-		    }
-		    TODO
-		}
-                break;
-            }
-        case XML_SCHEMA_FACET_PATTERN:
-            facet->regexp = xmlRegexpCompile(facet->value);
-            if (facet->regexp == NULL) {
-		ret = XML_SCHEMAP_REGEXP_INVALID;
-		/* No error message for RelaxNG. */
-		if (ctxtGiven) {
-		    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			ret, facet->node, WXS_BASIC_CAST typeDecl,
-			"The value '%s' of the facet 'pattern' is not a "
-			"valid regular expression",
-			facet->value, NULL);
-		}
-            }
-            break;
-        case XML_SCHEMA_FACET_TOTALDIGITS:
-        case XML_SCHEMA_FACET_FRACTIONDIGITS:
-        case XML_SCHEMA_FACET_LENGTH:
-        case XML_SCHEMA_FACET_MAXLENGTH:
-        case XML_SCHEMA_FACET_MINLENGTH:
-
-	    if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
-		ret = xmlSchemaValidatePredefinedType(
-		    xmlSchemaGetBuiltInType(XML_SCHEMAS_PINTEGER),
-		    facet->value, &(facet->val));
-	    } else {
-		ret = xmlSchemaValidatePredefinedType(
-		    xmlSchemaGetBuiltInType(XML_SCHEMAS_NNINTEGER),
-		    facet->value, &(facet->val));
-	    }
-	    if (ret != 0) {
-		if (ret < 0) {
-		    /* No error message for RelaxNG. */
-		    if (ctxtGiven) {
-			PERROR_INT("xmlSchemaCheckFacet",
-			    "validating facet value");
-		    }
-		    goto internal_error;
-		}
-		ret = XML_SCHEMAP_INVALID_FACET_VALUE;
-		/* No error message for RelaxNG. */
-		if (ctxtGiven) {
-		    /* error code */
-		    xmlSchemaCustomErr4(ACTXT_CAST pctxt,
-			ret, facet->node, WXS_BASIC_CAST typeDecl,
-			"The value '%s' of the facet '%s' is not a valid '%s'",
-			facet->value,
-			xmlSchemaFacetTypeToString(facet->type),
-			(facet->type != XML_SCHEMA_FACET_TOTALDIGITS) ?
-			    BAD_CAST "nonNegativeInteger" :
-			    BAD_CAST "positiveInteger",
-			NULL);
-		}
-	    }
-	    break;
-
-        case XML_SCHEMA_FACET_WHITESPACE:{
-                if (xmlStrEqual(facet->value, BAD_CAST "preserve")) {
-                    facet->whitespace = XML_SCHEMAS_FACET_PRESERVE;
-                } else if (xmlStrEqual(facet->value, BAD_CAST "replace")) {
-                    facet->whitespace = XML_SCHEMAS_FACET_REPLACE;
-                } else if (xmlStrEqual(facet->value, BAD_CAST "collapse")) {
-                    facet->whitespace = XML_SCHEMAS_FACET_COLLAPSE;
-                } else {
-		    ret = XML_SCHEMAP_INVALID_FACET_VALUE;
-                    /* No error message for RelaxNG. */
-		    if (ctxtGiven) {
-			/* error was previously: XML_SCHEMAP_INVALID_WHITE_SPACE */
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    ret, facet->node, WXS_BASIC_CAST typeDecl,
-			    "The value '%s' of the facet 'whitespace' is not "
-			    "valid", facet->value, NULL);
-                    }
-                }
-            }
-        default:
-            break;
-    }
-exit:
-    if ((! ctxtGiven) && (pctxt != NULL))
-	xmlSchemaFreeParserCtxt(pctxt);
-    return (ret);
-internal_error:
-    if ((! ctxtGiven) && (pctxt != NULL))
-	xmlSchemaFreeParserCtxt(pctxt);
-    return (-1);
-}
-
-/**
- * xmlSchemaCheckFacetValues:
- * @typeDecl:  the schema type definition
- * @ctxt:  the schema parser context
- *
- * Checks the default values types, especially for facets
- */
-static int
-xmlSchemaCheckFacetValues(xmlSchemaTypePtr typeDecl,
-			  xmlSchemaParserCtxtPtr pctxt)
-{
-    int res, olderrs = pctxt->nberrors;
-    const xmlChar *name = typeDecl->name;
-    /*
-    * NOTE: It is intended to use the facets list, instead
-    * of facetSet.
-    */
-    if (typeDecl->facets != NULL) {
-	xmlSchemaFacetPtr facet = typeDecl->facets;
-
-	/*
-	* Temporarily assign the "schema" to the validation context
-	* of the parser context. This is needed for NOTATION validation.
-	*/
-	if (pctxt->vctxt == NULL) {
-	    if (xmlSchemaCreateVCtxtOnPCtxt(pctxt) == -1)
-		return(-1);
-	}
-	pctxt->vctxt->schema = pctxt->schema;
-	while (facet != NULL) {
-	    res = xmlSchemaCheckFacet(facet, typeDecl, pctxt, name);
-	    HFAILURE
-	    facet = facet->next;
-	}
-	pctxt->vctxt->schema = NULL;
-    }
-    if (olderrs != pctxt->nberrors)
-	return(pctxt->err);
-    return(0);
-exit_failure:
-    return(-1);
-}
-
-/**
- * xmlSchemaGetCircModelGrDefRef:
- * @ctxtMGroup: the searched model group
- * @selfMGroup: the second searched model group
- * @particle: the first particle
- *
- * This one is intended to be used by
- * xmlSchemaCheckGroupDefCircular only.
- *
- * Returns the particle with the circular model group definition reference,
- * otherwise NULL.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaGetCircModelGrDefRef(xmlSchemaModelGroupDefPtr groupDef,
-			      xmlSchemaTreeItemPtr particle)
-{
-    xmlSchemaTreeItemPtr circ = NULL;
-    xmlSchemaTreeItemPtr term;
-    xmlSchemaModelGroupDefPtr gdef;
-
-    for (; particle != NULL; particle = particle->next) {
-	term = particle->children;
-	if (term == NULL)
-	    continue;
-	switch (term->type) {
-	    case XML_SCHEMA_TYPE_GROUP:
-		gdef = (xmlSchemaModelGroupDefPtr) term;
-		if (gdef == groupDef)
-		    return (particle);
-		/*
-		* Mark this model group definition to avoid infinite
-		* recursion on circular references not yet examined.
-		*/
-		if (gdef->flags & XML_SCHEMA_MODEL_GROUP_DEF_MARKED)
-		    continue;
-		if (gdef->children != NULL) {
-		    gdef->flags |= XML_SCHEMA_MODEL_GROUP_DEF_MARKED;
-		    circ = xmlSchemaGetCircModelGrDefRef(groupDef,
-			gdef->children->children);
-		    gdef->flags ^= XML_SCHEMA_MODEL_GROUP_DEF_MARKED;
-		    if (circ != NULL)
-			return (circ);
-		}
-		break;
-	    case XML_SCHEMA_TYPE_SEQUENCE:
-	    case XML_SCHEMA_TYPE_CHOICE:
-	    case XML_SCHEMA_TYPE_ALL:
-		circ = xmlSchemaGetCircModelGrDefRef(groupDef, term->children);
-		if (circ != NULL)
-		    return (circ);
-		break;
-	    default:
-		break;
-	}
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaCheckGroupDefCircular:
- * @item:  the model group definition
- * @ctxt:  the parser context
- * @name:  the name
- *
- * Checks for circular references to model group definitions.
- */
-static void
-xmlSchemaCheckGroupDefCircular(xmlSchemaModelGroupDefPtr item,
-			       xmlSchemaParserCtxtPtr ctxt)
-{
-    /*
-    * Schema Component Constraint: Model Group Correct
-    * 2 Circular groups are disallowed. That is, within the {particles}
-    * of a group there must not be at any depth a particle whose {term}
-    * is the group itself.
-    */
-    if ((item == NULL) ||
-	(item->type != XML_SCHEMA_TYPE_GROUP) ||
-	(item->children == NULL))
-	return;
-    {
-	xmlSchemaTreeItemPtr circ;
-
-	circ = xmlSchemaGetCircModelGrDefRef(item, item->children->children);
-	if (circ != NULL) {
-	    xmlChar *str = NULL;
-	    /*
-	    * TODO: The error report is not adequate: this constraint
-	    * is defined for model groups but not definitions, but since
-	    * there cannot be any circular model groups without a model group
-	    * definition (if not using a construction API), we check those
-	    * defintions only.
-	    */
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_MG_PROPS_CORRECT_2,
-		NULL, WXS_ITEM_NODE(circ),
-		"Circular reference to the model group definition '%s' "
-		"defined", xmlSchemaFormatQName(&str,
-		    item->targetNamespace, item->name));
-	    FREE_AND_NULL(str)
-	    /*
-	    * NOTE: We will cut the reference to avoid further
-	    * confusion of the processor. This is a fatal error.
-	    */
-	    circ->children = NULL;
-	}
-    }
-}
-
-/**
- * xmlSchemaModelGroupToModelGroupDefFixup:
- * @ctxt:  the parser context
- * @mg:  the model group
- *
- * Assigns the model group of model group definitions to the "term"
- * of the referencing particle.
- * In xmlSchemaResolveModelGroupParticleReferences the model group
- * definitions were assigned to the "term", since needed for the
- * circularity check.
- *
- * Schema Component Constraint:
- *     All Group Limited (cos-all-limited) (1.2)
- */
-static void
-xmlSchemaModelGroupToModelGroupDefFixup(
-    xmlSchemaParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
-    xmlSchemaModelGroupPtr mg)
-{
-    xmlSchemaParticlePtr particle = WXS_MODELGROUP_PARTICLE(mg);
-
-    while (particle != NULL) {
-	if ((WXS_PARTICLE_TERM(particle) == NULL) ||
-	    ((WXS_PARTICLE_TERM(particle))->type !=
-		XML_SCHEMA_TYPE_GROUP))
-	{
-	    particle = WXS_PTC_CAST particle->next;
-	    continue;
-	}
-	if (WXS_MODELGROUPDEF_MODEL(WXS_PARTICLE_TERM(particle)) == NULL) {
-	    /*
-	    * TODO: Remove the particle.
-	    */
-	    WXS_PARTICLE_TERM(particle) = NULL;
-	    particle = WXS_PTC_CAST particle->next;
-	    continue;
-	}
-	/*
-	* Assign the model group to the {term} of the particle.
-	*/
-	WXS_PARTICLE_TERM(particle) =
-	    WXS_TREE_CAST WXS_MODELGROUPDEF_MODEL(WXS_PARTICLE_TERM(particle));
-
-	particle = WXS_PTC_CAST particle->next;
-    }
-}
-
-/**
- * xmlSchemaCheckAttrGroupCircularRecur:
- * @ctxtGr: the searched attribute group
- * @attr: the current attribute list to be processed
- *
- * This one is intended to be used by
- * xmlSchemaCheckAttrGroupCircular only.
- *
- * Returns the circular attribute grou reference, otherwise NULL.
- */
-static xmlSchemaQNameRefPtr
-xmlSchemaCheckAttrGroupCircularRecur(xmlSchemaAttributeGroupPtr ctxtGr,
-				     xmlSchemaItemListPtr list)
-{
-    xmlSchemaAttributeGroupPtr gr;
-    xmlSchemaQNameRefPtr ref, circ;
-    int i;
-    /*
-    * We will search for an attribute group reference which
-    * references the context attribute group.
-    */
-    for (i = 0; i < list->nbItems; i++) {
-	ref = list->items[i];
-	if ((ref->type == XML_SCHEMA_EXTRA_QNAMEREF) &&
-	    (ref->itemType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP) &&
-	    (ref->item != NULL))
-	{
-	    gr = WXS_ATTR_GROUP_CAST ref->item;
-	    if (gr == ctxtGr)
-		return(ref);
-	    if (gr->flags & XML_SCHEMAS_ATTRGROUP_MARKED)
-		continue;
-	    /*
-	    * Mark as visited to avoid infinite recursion on
-	    * circular references not yet examined.
-	    */
-	    if ((gr->attrUses) &&
-		(gr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS))
-	    {
-		gr->flags |= XML_SCHEMAS_ATTRGROUP_MARKED;
-		circ = xmlSchemaCheckAttrGroupCircularRecur(ctxtGr,
-		    (xmlSchemaItemListPtr) gr->attrUses);
-		gr->flags ^= XML_SCHEMAS_ATTRGROUP_MARKED;
-		if (circ != NULL)
-		    return (circ);
-	    }
-
-	}
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaCheckAttrGroupCircular:
- * attrGr:  the attribute group definition
- * @ctxt:  the parser context
- * @name:  the name
- *
- * Checks for circular references of attribute groups.
- */
-static int
-xmlSchemaCheckAttrGroupCircular(xmlSchemaAttributeGroupPtr attrGr,
-				xmlSchemaParserCtxtPtr ctxt)
-{
-    /*
-    * Schema Representation Constraint:
-    * Attribute Group Definition Representation OK
-    * 3 Circular group reference is disallowed outside <redefine>.
-    * That is, unless this element information item's parent is
-    * <redefine>, then among the [children], if any, there must
-    * not be an <attributeGroup> with ref [attribute] which resolves
-    * to the component corresponding to this <attributeGroup>. Indirect
-    * circularity is also ruled out. That is, when QName resolution
-    * (Schema Document) ($3.15.3) is applied to a `QName` arising from
-    * any <attributeGroup>s with a ref [attribute] among the [children],
-    * it must not be the case that a `QName` is encountered at any depth
-    * which resolves to the component corresponding to this <attributeGroup>.
-    */
-    if (attrGr->attrUses == NULL)
-	return(0);
-    else if ((attrGr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS) == 0)
-	return(0);
-    else {
-	xmlSchemaQNameRefPtr circ;
-
-	circ = xmlSchemaCheckAttrGroupCircularRecur(attrGr,
-	    (xmlSchemaItemListPtr) attrGr->attrUses);
-	if (circ != NULL) {
-	    xmlChar *str = NULL;
-	    /*
-	    * TODO: Report the referenced attr group as QName.
-	    */
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3,
-		NULL, WXS_ITEM_NODE(WXS_BASIC_CAST circ),
-		"Circular reference to the attribute group '%s' "
-		"defined", xmlSchemaGetComponentQName(&str, attrGr));
-	    FREE_AND_NULL(str);
-	    /*
-	    * NOTE: We will cut the reference to avoid further
-	    * confusion of the processor.
-	    * BADSPEC TODO: The spec should define how to process in this case.
-	    */
-	    circ->item = NULL;
-	    return(ctxt->err);
-	}
-    }
-    return(0);
-}
-
-static int
-xmlSchemaAttributeGroupExpandRefs(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaAttributeGroupPtr attrGr);
-
-/**
- * xmlSchemaExpandAttributeGroupRefs:
- * @pctxt: the parser context
- * @node: the node of the component holding the attribute uses
- * @completeWild: the intersected wildcard to be returned
- * @list: the attribute uses
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- * Attribute use prohibitions are removed from the list
- * and returned via the @prohibs list.
- * Pointlessness of attr. prohibs, if a matching attr. decl
- * is existent a well, are checked.
- */
-static int
-xmlSchemaExpandAttributeGroupRefs(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaBasicItemPtr item,
-				  xmlSchemaWildcardPtr *completeWild,
-				  xmlSchemaItemListPtr list,
-				  xmlSchemaItemListPtr prohibs)
-{
-    xmlSchemaAttributeGroupPtr gr;
-    xmlSchemaAttributeUsePtr use;
-    xmlSchemaItemListPtr sublist;
-    int i, j;
-    int created = (*completeWild == NULL) ? 0 : 1;
-
-    if (prohibs)
-	prohibs->nbItems = 0;
-
-    for (i = 0; i < list->nbItems; i++) {
-	use = list->items[i];
-
-	if (use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) {
-	    if (prohibs == NULL) {
-		PERROR_INT("xmlSchemaExpandAttributeGroupRefs",
-		    "unexpected attr prohibition found");
-		return(-1);
-	    }
-	    /*
-	    * Remove from attribute uses.
-	    */
-	    if (xmlSchemaItemListRemove(list, i) == -1)
-		return(-1);
-	    i--;
-	    /*
-	    * Note that duplicate prohibitions were already
-	    * handled at parsing time.
-	    */
-	    /*
-	    * Add to list of prohibitions.
-	    */
-	    xmlSchemaItemListAddSize(prohibs, 2, use);
-	    continue;
-	}
-	if ((use->type == XML_SCHEMA_EXTRA_QNAMEREF) &&
-	    ((WXS_QNAME_CAST use)->itemType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP))
-	{
-	    if ((WXS_QNAME_CAST use)->item == NULL)
-		return(-1);
-	    gr = WXS_ATTR_GROUP_CAST (WXS_QNAME_CAST use)->item;
-	    /*
-	    * Expand the referenced attr. group.
-	    * TODO: remove this, this is done in a previous step, so
-	    * already done here.
-	    */
-	    if ((gr->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED) == 0) {
-		if (xmlSchemaAttributeGroupExpandRefs(pctxt, gr) == -1)
-		    return(-1);
-	    }
-	    /*
-	    * Build the 'complete' wildcard; i.e. intersect multiple
-	    * wildcards.
-	    */
-	    if (gr->attributeWildcard != NULL) {
-		if (*completeWild == NULL) {
-		    *completeWild = gr->attributeWildcard;
-		} else {
-		    if (! created) {
-			xmlSchemaWildcardPtr tmpWild;
-
-			 /*
-			* Copy the first encountered wildcard as context,
-			* except for the annotation.
-			*
-			* Although the complete wildcard might not correspond
-			* to any node in the schema, we will anchor it on
-			* the node of the owner component.
-			*/
-			tmpWild =  xmlSchemaAddWildcard(pctxt, pctxt->schema,
-			    XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
-			    WXS_ITEM_NODE(item));
-			if (tmpWild == NULL)
-			    return(-1);
-			if (xmlSchemaCloneWildcardNsConstraints(pctxt,
-			    tmpWild, *completeWild) == -1)
-			    return (-1);
-			tmpWild->processContents = (*completeWild)->processContents;
-			*completeWild = tmpWild;
-			created = 1;
-		    }
-
-		    if (xmlSchemaIntersectWildcards(pctxt, *completeWild,
-			gr->attributeWildcard) == -1)
-			return(-1);
-		}
-	    }
-	    /*
-	    * Just remove the reference if the referenced group does not
-	    * contain any attribute uses.
-	    */
-	    sublist = ((xmlSchemaItemListPtr) gr->attrUses);
-	    if ((sublist == NULL) || sublist->nbItems == 0) {
-		if (xmlSchemaItemListRemove(list, i) == -1)
-		    return(-1);
-		i--;
-		continue;
-	    }
-	    /*
-	    * Add the attribute uses.
-	    */
-	    list->items[i] = sublist->items[0];
-	    if (sublist->nbItems != 1) {
-		for (j = 1; j < sublist->nbItems; j++) {
-		    i++;
-		    if (xmlSchemaItemListInsert(list,
-			    sublist->items[j], i) == -1)
-			return(-1);
-		}
-	    }
-	}
-
-    }
-    /*
-    * Handle pointless prohibitions of declared attributes.
-    */
-    if (prohibs && (prohibs->nbItems != 0) && (list->nbItems != 0)) {
-	xmlSchemaAttributeUseProhibPtr prohib;
-
-	for (i = prohibs->nbItems -1; i >= 0; i--) {
-	    prohib = prohibs->items[i];
-	    for (j = 0; j < list->nbItems; j++) {
-		use = list->items[j];
-
-		if ((prohib->name == WXS_ATTRUSE_DECL_NAME(use)) &&
-		    (prohib->targetNamespace == WXS_ATTRUSE_DECL_TNS(use)))
-		{
-		    xmlChar *str = NULL;
-
-		    xmlSchemaCustomWarning(ACTXT_CAST pctxt,
-			XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
-			prohib->node, NULL,
-			"Skipping pointless attribute use prohibition "
-			"'%s', since a corresponding attribute use "
-			"exists already in the type definition",
-			xmlSchemaFormatQName(&str,
-			    prohib->targetNamespace, prohib->name),
-			NULL, NULL);
-		    FREE_AND_NULL(str);
-		    /*
-		    * Remove the prohibition.
-		    */
-		    if (xmlSchemaItemListRemove(prohibs, i) == -1)
-			return(-1);
-		    break;
-		}
-	    }
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaAttributeGroupExpandRefs:
- * @pctxt:  the parser context
- * @attrGr:  the attribute group definition
- *
- * Computation of:
- * {attribute uses} property
- * {attribute wildcard} property
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- */
-static int
-xmlSchemaAttributeGroupExpandRefs(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaAttributeGroupPtr attrGr)
-{
-    if ((attrGr->attrUses == NULL) ||
-	(attrGr->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED))
-	return(0);
-
-    attrGr->flags |= XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED;
-    if (xmlSchemaExpandAttributeGroupRefs(pctxt, WXS_BASIC_CAST attrGr,
-	&(attrGr->attributeWildcard), attrGr->attrUses, NULL) == -1)
-	return(-1);
-    return(0);
-}
-
-/**
- * xmlSchemaAttributeGroupExpandRefs:
- * @pctxt:  the parser context
- * @attrGr:  the attribute group definition
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- *
- * Schema Component Constraint:
- *    Attribute Group Definition Properties Correct (ag-props-correct)
- */
-static int
-xmlSchemaCheckAGPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
-				  xmlSchemaAttributeGroupPtr attrGr)
-{
-    /*
-    * SPEC ag-props-correct
-    * (1) "The values of the properties of an attribute group definition
-    * must be as described in the property tableau in The Attribute
-    * Group Definition Schema Component ($3.6.1), modulo the impact of
-    * Missing Sub-components ($5.3);"
-    */
-
-    if ((attrGr->attrUses != NULL) &&
-	(WXS_LIST_CAST attrGr->attrUses)->nbItems > 1)
-    {
-	xmlSchemaItemListPtr uses = WXS_LIST_CAST attrGr->attrUses;
-	xmlSchemaAttributeUsePtr use, tmp;
-	int i, j, hasId = 0;
-
-	for (i = uses->nbItems -1; i >= 0; i--) {
-	    use = uses->items[i];
-	    /*
-	    * SPEC ag-props-correct
-	    * (2) "Two distinct members of the {attribute uses} must not have
-	    * {attribute declaration}s both of whose {name}s match and whose
-	    * {target namespace}s are identical."
-	    */
-	    if (i > 0) {
-		for (j = i -1; j >= 0; j--) {
-		    tmp = uses->items[j];
-		    if ((WXS_ATTRUSE_DECL_NAME(use) ==
-			WXS_ATTRUSE_DECL_NAME(tmp)) &&
-			(WXS_ATTRUSE_DECL_TNS(use) ==
-			WXS_ATTRUSE_DECL_TNS(tmp)))
-		    {
-			xmlChar *str = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    XML_SCHEMAP_AG_PROPS_CORRECT,
-			    attrGr->node, WXS_BASIC_CAST attrGr,
-			    "Duplicate %s",
-			    xmlSchemaGetComponentDesignation(&str, use),
-			    NULL);
-			FREE_AND_NULL(str);
-			/*
-			* Remove the duplicate.
-			*/
-			if (xmlSchemaItemListRemove(uses, i) == -1)
-			    return(-1);
-			goto next_use;
-		    }
-		}
-	    }
-	    /*
-	    * SPEC ag-props-correct
-	    * (3) "Two distinct members of the {attribute uses} must not have
-	    * {attribute declaration}s both of whose {type definition}s are or
-	    * are derived from ID."
-	    * TODO: Does 'derived' include member-types of unions?
-	    */
-	    if (WXS_ATTRUSE_TYPEDEF(use) != NULL) {
-		if (xmlSchemaIsDerivedFromBuiltInType(
-		    WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
-		{
-		    if (hasId) {
-			xmlChar *str = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    XML_SCHEMAP_AG_PROPS_CORRECT,
-			    attrGr->node, WXS_BASIC_CAST attrGr,
-			    "There must not exist more than one attribute "
-			    "declaration of type 'xs:ID' "
-			    "(or derived from 'xs:ID'). The %s violates this "
-			    "constraint",
-			    xmlSchemaGetComponentDesignation(&str, use),
-			    NULL);
-			FREE_AND_NULL(str);
-			if (xmlSchemaItemListRemove(uses, i) == -1)
-			    return(-1);
-		    }
-		    hasId = 1;
-		}
-	    }
-next_use: {}
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaResolveAttrGroupReferences:
- * @attrgrpDecl:  the schema attribute definition
- * @ctxt:  the schema parser context
- * @name:  the attribute name
- *
- * Resolves references to attribute group definitions.
- */
-static int
-xmlSchemaResolveAttrGroupReferences(xmlSchemaQNameRefPtr ref,
-				    xmlSchemaParserCtxtPtr ctxt)
-{
-    xmlSchemaAttributeGroupPtr group;
-
-    if (ref->item != NULL)
-        return(0);
-    group = xmlSchemaGetAttributeGroup(ctxt->schema,
-	ref->name,
-	ref->targetNamespace);
-    if (group == NULL) {
-	xmlSchemaPResCompAttrErr(ctxt,
-	    XML_SCHEMAP_SRC_RESOLVE,
-	    NULL, ref->node,
-	    "ref", ref->name, ref->targetNamespace,
-	    ref->itemType, NULL);
-	return(ctxt->err);
-    }
-    ref->item = WXS_BASIC_CAST group;
-    return(0);
-}
-
-/**
- * xmlSchemaCheckAttrPropsCorrect:
- * @item:  an schema attribute declaration/use
- * @ctxt:  a schema parser context
- * @name:  the name of the attribute
- *
- *
- * Schema Component Constraint:
- *    Attribute Declaration Properties Correct (a-props-correct)
- *
- * Validates the value constraints of an attribute declaration/use.
- * NOTE that this needs the simle type definitions to be already
- *   builded and checked.
- */
-static int
-xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
-			       xmlSchemaAttributePtr attr)
-{
-
-    /*
-    * SPEC a-props-correct (1)
-    * "The values of the properties of an attribute declaration must
-    * be as described in the property tableau in The Attribute
-    * Declaration Schema Component ($3.2.1), modulo the impact of
-    * Missing Sub-components ($5.3)."
-    */
-
-    if (WXS_ATTR_TYPEDEF(attr) == NULL)
-	return(0);
-
-    if (attr->defValue != NULL) {
-	int ret;
-
-	/*
-	* SPEC a-props-correct (3)
-	* "If the {type definition} is or is derived from ID then there
-	* must not be a {value constraint}."
-	*/
-	if (xmlSchemaIsDerivedFromBuiltInType(
-	    WXS_ATTR_TYPEDEF(attr), XML_SCHEMAS_ID))
-	{
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_A_PROPS_CORRECT_3,
-		NULL, WXS_BASIC_CAST attr,
-		"Value constraints are not allowed if the type definition "
-		"is or is derived from xs:ID",
-		NULL, NULL);
-	    return(pctxt->err);
-	}
-	/*
-	* SPEC a-props-correct (2)
-	* "if there is a {value constraint}, the canonical lexical
-	* representation of its value must be `valid` with respect
-	* to the {type definition} as defined in String Valid ($3.14.4)."
-	* TODO: Don't care about the *canonical* stuff here, this requirement
-	* will be removed in WXS 1.1 anyway.
-	*/
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt,
-	    attr->node, WXS_ATTR_TYPEDEF(attr),
-	    attr->defValue, &(attr->defVal),
-	    1, 1, 0);
-	if (ret != 0) {
-	    if (ret < 0) {
-		PERROR_INT("xmlSchemaCheckAttrPropsCorrect",
-		    "calling xmlSchemaVCheckCVCSimpleType()");
-		return(-1);
-	    }
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_A_PROPS_CORRECT_2,
-		NULL, WXS_BASIC_CAST attr,
-		"The value of the value constraint is not valid",
-		NULL, NULL);
-	    return(pctxt->err);
-	}
-    }
-
-    return(0);
-}
-
-static xmlSchemaElementPtr
-xmlSchemaCheckSubstGroupCircular(xmlSchemaElementPtr elemDecl,
-				 xmlSchemaElementPtr ancestor)
-{
-    xmlSchemaElementPtr ret;
-
-    if (WXS_SUBST_HEAD(ancestor) == NULL)
-	return (NULL);
-    if (WXS_SUBST_HEAD(ancestor) == elemDecl)
-	return (ancestor);
-
-    if (WXS_SUBST_HEAD(ancestor)->flags & XML_SCHEMAS_ELEM_CIRCULAR)
-	return (NULL);
-    WXS_SUBST_HEAD(ancestor)->flags |= XML_SCHEMAS_ELEM_CIRCULAR;
-    ret = xmlSchemaCheckSubstGroupCircular(elemDecl,
-	WXS_SUBST_HEAD(ancestor));
-    WXS_SUBST_HEAD(ancestor)->flags ^= XML_SCHEMAS_ELEM_CIRCULAR;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaCheckElemPropsCorrect:
- * @ctxt:  a schema parser context
- * @decl: the element declaration
- * @name:  the name of the attribute
- *
- * Schema Component Constraint:
- * Element Declaration Properties Correct (e-props-correct)
- *
- * STATUS:
- *   missing: (6)
- */
-static int
-xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
-			       xmlSchemaElementPtr elemDecl)
-{
-    int ret = 0;
-    xmlSchemaTypePtr typeDef = WXS_ELEM_TYPEDEF(elemDecl);
-    /*
-    * SPEC (1) "The values of the properties of an element declaration
-    * must be as described in the property tableau in The Element
-    * Declaration Schema Component ($3.3.1), modulo the impact of Missing
-    * Sub-components ($5.3)."
-    */
-    if (WXS_SUBST_HEAD(elemDecl) != NULL) {
-	xmlSchemaElementPtr head = WXS_SUBST_HEAD(elemDecl), circ;
-
-	xmlSchemaCheckElementDeclComponent(head, pctxt);
-	/*
-	* SPEC (3) "If there is a non-`absent` {substitution group
-	* affiliation}, then {scope} must be global."
-	*/
-	if ((elemDecl->flags & XML_SCHEMAS_ELEM_GLOBAL) == 0) {
-	    xmlSchemaPCustomErr(pctxt,
-		XML_SCHEMAP_E_PROPS_CORRECT_3,
-		WXS_BASIC_CAST elemDecl, NULL,
-		"Only global element declarations can have a "
-		"substitution group affiliation", NULL);
-	    ret = XML_SCHEMAP_E_PROPS_CORRECT_3;
-	}
-	/*
-	* TODO: SPEC (6) "Circular substitution groups are disallowed.
-	* That is, it must not be possible to return to an element declaration
-	* by repeatedly following the {substitution group affiliation}
-	* property."
-	*/
-	if (head == elemDecl)
-	    circ = head;
-	else if (WXS_SUBST_HEAD(head) != NULL)
-	    circ = xmlSchemaCheckSubstGroupCircular(head, head);
-	else
-	    circ = NULL;
-	if (circ != NULL) {
-	    xmlChar *strA = NULL, *strB = NULL;
-
-	    xmlSchemaPCustomErrExt(pctxt,
-		XML_SCHEMAP_E_PROPS_CORRECT_6,
-		WXS_BASIC_CAST circ, NULL,
-		"The element declaration '%s' defines a circular "
-		"substitution group to element declaration '%s'",
-		xmlSchemaGetComponentQName(&strA, circ),
-		xmlSchemaGetComponentQName(&strB, head),
-		NULL);
-	    FREE_AND_NULL(strA)
-	    FREE_AND_NULL(strB)
-	    ret = XML_SCHEMAP_E_PROPS_CORRECT_6;
-	}
-	/*
-	* SPEC (4) "If there is a {substitution group affiliation},
-	* the {type definition}
-	* of the element declaration must be validly derived from the {type
-	* definition} of the {substitution group affiliation}, given the value
-	* of the {substitution group exclusions} of the {substitution group
-	* affiliation}, as defined in Type Derivation OK (Complex) ($3.4.6)
-	* (if the {type definition} is complex) or as defined in
-	* Type Derivation OK (Simple) ($3.14.6) (if the {type definition} is
-	* simple)."
-	*
-	* NOTE: {substitution group exclusions} means the values of the
-	* attribute "final".
-	*/
-
-	if (typeDef != WXS_ELEM_TYPEDEF(WXS_SUBST_HEAD(elemDecl))) {
-	    int set = 0;
-
-	    if (head->flags & XML_SCHEMAS_ELEM_FINAL_EXTENSION)
-		set |= SUBSET_EXTENSION;
-	    if (head->flags & XML_SCHEMAS_ELEM_FINAL_RESTRICTION)
-		set |= SUBSET_RESTRICTION;
-
-	    if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST pctxt, typeDef,
-		WXS_ELEM_TYPEDEF(head), set) != 0) {
-		xmlChar *strA = NULL, *strB = NULL, *strC = NULL;
-
-		ret = XML_SCHEMAP_E_PROPS_CORRECT_4;
-		xmlSchemaPCustomErrExt(pctxt,
-		    XML_SCHEMAP_E_PROPS_CORRECT_4,
-		    WXS_BASIC_CAST elemDecl, NULL,
-		    "The type definition '%s' was "
-		    "either rejected by the substitution group "
-		    "affiliation '%s', or not validly derived from its type "
-		    "definition '%s'",
-		    xmlSchemaGetComponentQName(&strA, typeDef),
-		    xmlSchemaGetComponentQName(&strB, head),
-		    xmlSchemaGetComponentQName(&strC, WXS_ELEM_TYPEDEF(head)));
-		FREE_AND_NULL(strA)
-		FREE_AND_NULL(strB)
-		FREE_AND_NULL(strC)
-	    }
-	}
-    }
-    /*
-    * SPEC (5) "If the {type definition} or {type definition}'s
-    * {content type}
-    * is or is derived from ID then there must not be a {value constraint}.
-    * Note: The use of ID as a type definition for elements goes beyond
-    * XML 1.0, and should be avoided if backwards compatibility is desired"
-    */
-    if ((elemDecl->value != NULL) &&
-	((WXS_IS_SIMPLE(typeDef) &&
-	  xmlSchemaIsDerivedFromBuiltInType(typeDef, XML_SCHEMAS_ID)) ||
-	 (WXS_IS_COMPLEX(typeDef) &&
-	  WXS_HAS_SIMPLE_CONTENT(typeDef) &&
-	  xmlSchemaIsDerivedFromBuiltInType(typeDef->contentTypeDef,
-	    XML_SCHEMAS_ID)))) {
-
-	ret = XML_SCHEMAP_E_PROPS_CORRECT_5;
-	xmlSchemaPCustomErr(pctxt,
-	    XML_SCHEMAP_E_PROPS_CORRECT_5,
-	    WXS_BASIC_CAST elemDecl, NULL,
-	    "The type definition (or type definition's content type) is or "
-	    "is derived from ID; value constraints are not allowed in "
-	    "conjunction with such a type definition", NULL);
-    } else if (elemDecl->value != NULL) {
-	int vcret;
-	xmlNodePtr node = NULL;
-
-	/*
-	* SPEC (2) "If there is a {value constraint}, the canonical lexical
-	* representation of its value must be `valid` with respect to the
-	* {type definition} as defined in Element Default Valid (Immediate)
-	* ($3.3.6)."
-	*/
-	if (typeDef == NULL) {
-	    xmlSchemaPErr(pctxt, elemDecl->node,
-		XML_SCHEMAP_INTERNAL,
-		"Internal error: xmlSchemaCheckElemPropsCorrect, "
-		"type is missing... skipping validation of "
-		"the value constraint", NULL, NULL);
-	    return (-1);
-	}
-	if (elemDecl->node != NULL) {
-	    if (elemDecl->flags & XML_SCHEMAS_ELEM_FIXED)
-		node = (xmlNodePtr) xmlHasProp(elemDecl->node,
-		    BAD_CAST "fixed");
-	    else
-		node = (xmlNodePtr) xmlHasProp(elemDecl->node,
-		    BAD_CAST "default");
-	}
-	vcret = xmlSchemaParseCheckCOSValidDefault(pctxt, node,
-	    typeDef, elemDecl->value, &(elemDecl->defVal));
-	if (vcret != 0) {
-	    if (vcret < 0) {
-		PERROR_INT("xmlSchemaElemCheckValConstr",
-		    "failed to validate the value constraint of an "
-		    "element declaration");
-		return (-1);
-	    }
-	    return (vcret);
-	}
-    }
-
-    return (ret);
-}
-
-/**
- * xmlSchemaCheckElemSubstGroup:
- * @ctxt:  a schema parser context
- * @decl: the element declaration
- * @name:  the name of the attribute
- *
- * Schema Component Constraint:
- * Substitution Group (cos-equiv-class)
- *
- * In Libxml2 the subst. groups will be precomputed, in terms of that
- * a list will be built for each subst. group head, holding all direct
- * referents to this head.
- * NOTE that this function needs:
- *   1. circular subst. groups to be checked beforehand
- *   2. the declaration's type to be derived from the head's type
- *
- * STATUS:
- *
- */
-static void
-xmlSchemaCheckElemSubstGroup(xmlSchemaParserCtxtPtr ctxt,
-			     xmlSchemaElementPtr elemDecl)
-{
-    if ((WXS_SUBST_HEAD(elemDecl) == NULL) ||
-	/* SPEC (1) "Its {abstract} is false." */
-	(elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT))
-	return;
-    {
-	xmlSchemaElementPtr head;
-	xmlSchemaTypePtr headType, type;
-	int set, methSet;
-	/*
-	* SPEC (2) "It is validly substitutable for HEAD subject to HEAD's
-	* {disallowed substitutions} as the blocking constraint, as defined in
-	* Substitution Group OK (Transitive) ($3.3.6)."
-	*/
-	for (head = WXS_SUBST_HEAD(elemDecl); head != NULL;
-	    head = WXS_SUBST_HEAD(head)) {
-	    set = 0;
-	    methSet = 0;
-	    /*
-	    * The blocking constraints.
-	    */
-	    if (head->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION)
-		continue;
-	    headType = head->subtypes;
-	    type = elemDecl->subtypes;
-	    if (headType == type)
-		goto add_member;
-	    if (head->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION)
-		set |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
-	    if (head->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION)
-		set |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
-	    /*
-	    * SPEC: Substitution Group OK (Transitive) (2.3)
-	    * "The set of all {derivation method}s involved in the
-	    * derivation of D's {type definition} from C's {type definition}
-	    * does not intersect with the union of the blocking constraint,
-	    * C's {prohibited substitutions} (if C is complex, otherwise the
-	    * empty set) and the {prohibited substitutions} (respectively the
-	    * empty set) of any intermediate {type definition}s in the
-	    * derivation of D's {type definition} from C's {type definition}."
-	    */
-	    /*
-	    * OPTIMIZE TODO: Optimize this a bit, since, if traversing the
-	    * subst.head axis, the methSet does not need to be computed for
-	    * the full depth over and over.
-	    */
-	    /*
-	    * The set of all {derivation method}s involved in the derivation
-	    */
-	    while ((type != NULL) && (type != headType)) {
-		if ((WXS_IS_EXTENSION(type)) &&
-		    ((methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
-		    methSet |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
-
-		if (WXS_IS_RESTRICTION(type) &&
-		    ((methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
-		    methSet |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
-
-		type = type->baseType;
-	    }
-	    /*
-	    * The {prohibited substitutions} of all intermediate types +
-	    * the head's type.
-	    */
-	    type = elemDecl->subtypes->baseType;
-	    while (type != NULL) {
-		if (WXS_IS_COMPLEX(type)) {
-		    if ((type->flags &
-			    XML_SCHEMAS_TYPE_BLOCK_EXTENSION) &&
-			((set & XML_SCHEMAS_TYPE_BLOCK_EXTENSION) == 0))
-		    set |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
-		    if ((type->flags &
-			    XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) &&
-			((set & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
-		    set |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
-		} else
-		    break;
-		if (type == headType)
-		    break;
-		type = type->baseType;
-	    }
-	    if ((set != 0) &&
-		(((set & XML_SCHEMAS_TYPE_BLOCK_EXTENSION) &&
-		(methSet & XML_SCHEMAS_TYPE_BLOCK_EXTENSION)) ||
-		((set & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) &&
-		(methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION)))) {
-		continue;
-	    }
-add_member:
-	    xmlSchemaAddElementSubstitutionMember(ctxt, head, elemDecl);
-	    if ((head->flags & XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) == 0)
-		head->flags |= XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD;
-	}
-    }
-}
-
-#ifdef WXS_ELEM_DECL_CONS_ENABLED /* enable when finished */
-/**
- * xmlSchemaCheckElementDeclComponent
- * @pctxt: the schema parser context
- * @ctxtComponent: the context component (an element declaration)
- * @ctxtParticle: the first particle of the context component
- * @searchParticle: the element declaration particle to be analysed
- *
- * Schema Component Constraint: Element Declarations Consistent
- */
-static int
-xmlSchemaCheckElementDeclConsistent(xmlSchemaParserCtxtPtr pctxt,
-				    xmlSchemaBasicItemPtr ctxtComponent,
-				    xmlSchemaParticlePtr ctxtParticle,
-				    xmlSchemaParticlePtr searchParticle,
-				    xmlSchemaParticlePtr curParticle,
-				    int search)
-{
-    return(0);
-
-    int ret = 0;
-    xmlSchemaParticlePtr cur = curParticle;
-    if (curParticle == NULL) {
-	return(0);
-    }
-    if (WXS_PARTICLE_TERM(curParticle) == NULL) {
-	/*
-	* Just return in this case. A missing "term" of the particle
-	* might arise due to an invalid "term" component.
-	*/
-	return(0);
-    }
-    while (cur != NULL) {
-	switch (WXS_PARTICLE_TERM(cur)->type) {
-	    case XML_SCHEMA_TYPE_ANY:
-		break;
-	    case XML_SCHEMA_TYPE_ELEMENT:
-		if (search == 0) {
-		    ret = xmlSchemaCheckElementDeclConsistent(pctxt,
-			ctxtComponent, ctxtParticle, cur, ctxtParticle, 1);
-		    if (ret != 0)
-			return(ret);
-		} else {
-		    xmlSchemaElementPtr elem =
-			WXS_ELEM_CAST(WXS_PARTICLE_TERM(cur));
-		    /*
-		    * SPEC Element Declarations Consistent:
-		    * "If the {particles} contains, either directly,
-		    * indirectly (that is, within the {particles} of a
-		    * contained model group, recursively) or `implicitly`
-		    * two or more element declaration particles with
-		    * the same {name} and {target namespace}, then
-		    * all their type definitions must be the same
-		    * top-level definition [...]"
-		    */
-		    if (xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->name,
-			    WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->name) &&
-			xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamespace,
-			    WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->targetNamespace))
-		    {
-			xmlChar *strA = NULL, *strB = NULL;
-
-			xmlSchemaCustomErr(ACTXT_CAST pctxt,
-			    /* TODO: error code */
-			    XML_SCHEMAP_COS_NONAMBIG,
-			    WXS_ITEM_NODE(cur), NULL,
-			    "In the content model of %s, there are multiple "
-			    "element declarations for '%s' with different "
-			    "type definitions",
-			    xmlSchemaGetComponentDesignation(&strA,
-				ctxtComponent),
-			    xmlSchemaFormatQName(&strB,
-				WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamespace,
-				WXS_PARTICLE_TERM_AS_ELEM(cur)->name));
-			FREE_AND_NULL(strA);
-			FREE_AND_NULL(strB);
-			return(XML_SCHEMAP_COS_NONAMBIG);
-		    }
-		}
-		break;
-	    case XML_SCHEMA_TYPE_SEQUENCE: {
-		break;
-		}
-	    case XML_SCHEMA_TYPE_CHOICE:{
-		/*
-		xmlSchemaTreeItemPtr sub;
-
-		sub = WXS_PARTICLE_TERM(particle)->children;  (xmlSchemaParticlePtr)
-		while (sub != NULL) {
-		    ret = xmlSchemaCheckElementDeclConsistent(pctxt, ctxtComponent,
-			ctxtParticle, ctxtElem);
-		    if (ret != 0)
-			return(ret);
-		    sub = sub->next;
-		}
-		*/
-		break;
-		}
-	    case XML_SCHEMA_TYPE_ALL:
-		break;
-	    case XML_SCHEMA_TYPE_GROUP:
-		break;
-	    default:
-		xmlSchemaInternalErr2(ACTXT_CAST pctxt,
-		    "xmlSchemaCheckElementDeclConsistent",
-		    "found unexpected term of type '%s' in content model",
-		    WXS_ITEM_TYPE_NAME(WXS_PARTICLE_TERM(cur)), NULL);
-		return(-1);
-	}
-	cur = (xmlSchemaParticlePtr) cur->next;
-    }
-
-exit:
-    return(ret);
-}
-#endif
-
-/**
- * xmlSchemaCheckElementDeclComponent
- * @item:  an schema element declaration/particle
- * @ctxt:  a schema parser context
- * @name:  the name of the attribute
- *
- * Validates the value constraints of an element declaration.
- * Adds substitution group members.
- */
-static void
-xmlSchemaCheckElementDeclComponent(xmlSchemaElementPtr elemDecl,
-				   xmlSchemaParserCtxtPtr ctxt)
-{
-    if (elemDecl == NULL)
-	return;
-    if (elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_CHECKED)
-	return;
-    elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_CHECKED;
-    if (xmlSchemaCheckElemPropsCorrect(ctxt, elemDecl) == 0) {
-	/*
-	* Adds substitution group members.
-	*/
-	xmlSchemaCheckElemSubstGroup(ctxt, elemDecl);
-    }
-}
-
-/**
- * xmlSchemaResolveModelGroupParticleReferences:
- * @particle:  a particle component
- * @ctxt:  a parser context
- *
- * Resolves references of a model group's {particles} to
- * model group definitions and to element declarations.
- */
-static void
-xmlSchemaResolveModelGroupParticleReferences(
-    xmlSchemaParserCtxtPtr ctxt,
-    xmlSchemaModelGroupPtr mg)
-{
-    xmlSchemaParticlePtr particle = WXS_MODELGROUP_PARTICLE(mg);
-    xmlSchemaQNameRefPtr ref;
-    xmlSchemaBasicItemPtr refItem;
-
-    /*
-    * URGENT TODO: Test this.
-    */
-    while (particle != NULL) {
-	if ((WXS_PARTICLE_TERM(particle) == NULL) ||
-	    ((WXS_PARTICLE_TERM(particle))->type !=
-		XML_SCHEMA_EXTRA_QNAMEREF))
-	{
-	    goto next_particle;
-	}
-	ref = WXS_QNAME_CAST WXS_PARTICLE_TERM(particle);
-	/*
-	* Resolve the reference.
-	* NULL the {term} by default.
-	*/
-	particle->children = NULL;
-
-	refItem = xmlSchemaGetNamedComponent(ctxt->schema,
-	    ref->itemType, ref->name, ref->targetNamespace);
-	if (refItem == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
-		NULL, WXS_ITEM_NODE(particle), "ref", ref->name,
-		ref->targetNamespace, ref->itemType, NULL);
-	    /* TODO: remove the particle. */
-	    goto next_particle;
-	}
-	if (refItem->type == XML_SCHEMA_TYPE_GROUP) {
-	    if (WXS_MODELGROUPDEF_MODEL(refItem) == NULL)
-		/* TODO: remove the particle. */
-		goto next_particle;
-	    /*
-	    * NOTE that we will assign the model group definition
-	    * itself to the "term" of the particle. This will ease
-	    * the check for circular model group definitions. After
-	    * that the "term" will be assigned the model group of the
-	    * model group definition.
-	    */
-	    if ((WXS_MODELGROUPDEF_MODEL(refItem))->type ==
-		    XML_SCHEMA_TYPE_ALL) {
-		/*
-		* SPEC cos-all-limited (1)
-		* SPEC cos-all-limited (1.2)
-		* "It appears only as the value of one or both of the
-		* following properties:"
-		* (1.1) "the {model group} property of a model group
-		*        definition."
-		* (1.2) "the {term} property of a particle [... of] the "
-		* {content type} of a complex type definition."
-		*/
-		xmlSchemaCustomErr(ACTXT_CAST ctxt,
-		    /* TODO: error code */
-		    XML_SCHEMAP_COS_ALL_LIMITED,
-		    WXS_ITEM_NODE(particle), NULL,
-		    "A model group definition is referenced, but "
-		    "it contains an 'all' model group, which "
-		    "cannot be contained by model groups",
-		    NULL, NULL);
-		/* TODO: remove the particle. */
-		goto next_particle;
-	    }
-	    particle->children = (xmlSchemaTreeItemPtr) refItem;
-	} else {
-	    /*
-	    * TODO: Are referenced element declarations the only
-	    * other components we expect here?
-	    */
-	    particle->children = (xmlSchemaTreeItemPtr) refItem;
-	}
-next_particle:
-	particle = WXS_PTC_CAST particle->next;
-    }
-}
-
-static int
-xmlSchemaAreValuesEqual(xmlSchemaValPtr x,
-		       xmlSchemaValPtr y)
-{
-    xmlSchemaTypePtr tx, ty, ptx, pty;
-    int ret;
-
-    while (x != NULL) {
-	/* Same types. */
-	tx = xmlSchemaGetBuiltInType(xmlSchemaGetValType(x));
-	ty = xmlSchemaGetBuiltInType(xmlSchemaGetValType(y));
-	ptx = xmlSchemaGetPrimitiveType(tx);
-	pty = xmlSchemaGetPrimitiveType(ty);
-	/*
-	* (1) if a datatype T' is `derived` by `restriction` from an
-	* atomic datatype T then the `value space` of T' is a subset of
-	* the `value space` of T. */
-	/*
-	* (2) if datatypes T' and T'' are `derived` by `restriction`
-	* from a common atomic ancestor T then the `value space`s of T'
-	* and T'' may overlap.
-	*/
-	if (ptx != pty)
-	    return(0);
-	/*
-	* We assume computed values to be normalized, so do a fast
-	* string comparison for string based types.
-	*/
-	if ((ptx->builtInType == XML_SCHEMAS_STRING) ||
-	    WXS_IS_ANY_SIMPLE_TYPE(ptx)) {
-	    if (! xmlStrEqual(
-		xmlSchemaValueGetAsString(x),
-		xmlSchemaValueGetAsString(y)))
-		return (0);
-	} else {
-	    ret = xmlSchemaCompareValuesWhtsp(
-		x, XML_SCHEMA_WHITESPACE_PRESERVE,
-		y, XML_SCHEMA_WHITESPACE_PRESERVE);
-	    if (ret == -2)
-		return(-1);
-	    if (ret != 0)
-		return(0);
-	}
-	/*
-	* Lists.
-	*/
-	x = xmlSchemaValueGetNext(x);
-	if (x != NULL) {
-	    y = xmlSchemaValueGetNext(y);
-	    if (y == NULL)
-		return (0);
-	} else if (xmlSchemaValueGetNext(y) != NULL)
-	    return (0);
-	else
-	    return (1);
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaResolveAttrUseReferences:
- * @item:  an attribute use
- * @ctxt:  a parser context
- *
- * Resolves the referenced attribute declaration.
- */
-static int
-xmlSchemaResolveAttrUseReferences(xmlSchemaAttributeUsePtr ause,
-				  xmlSchemaParserCtxtPtr ctxt)
-{
-    if ((ctxt == NULL) || (ause == NULL))
-	return(-1);
-    if ((ause->attrDecl == NULL) ||
-	(ause->attrDecl->type != XML_SCHEMA_EXTRA_QNAMEREF))
-	return(0);
-
-    {
-	xmlSchemaQNameRefPtr ref = WXS_QNAME_CAST ause->attrDecl;
-
-	/*
-	* TODO: Evaluate, what errors could occur if the declaration is not
-	* found.
-	*/
-	ause->attrDecl = xmlSchemaGetAttributeDecl(ctxt->schema,
-	    ref->name, ref->targetNamespace);
-        if (ause->attrDecl == NULL) {
-	    xmlSchemaPResCompAttrErr(ctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST ause, ause->node,
-		"ref", ref->name, ref->targetNamespace,
-		XML_SCHEMA_TYPE_ATTRIBUTE, NULL);
-            return(ctxt->err);;
-        }
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaCheckAttrUsePropsCorrect:
- * @ctxt:  a parser context
- * @use:  an attribute use
- *
- * Schema Component Constraint:
- * Attribute Use Correct (au-props-correct)
- *
- */
-static int
-xmlSchemaCheckAttrUsePropsCorrect(xmlSchemaParserCtxtPtr ctxt,
-			     xmlSchemaAttributeUsePtr use)
-{
-    if ((ctxt == NULL) || (use == NULL))
-	return(-1);
-    if ((use->defValue == NULL) || (WXS_ATTRUSE_DECL(use) == NULL) ||
-	((WXS_ATTRUSE_DECL(use))->type != XML_SCHEMA_TYPE_ATTRIBUTE))
-	return(0);
-
-    /*
-    * SPEC au-props-correct (1)
-    * "The values of the properties of an attribute use must be as
-    * described in the property tableau in The Attribute Use Schema
-    * Component ($3.5.1), modulo the impact of Missing
-    * Sub-components ($5.3)."
-    */
-
-    if (((WXS_ATTRUSE_DECL(use))->defValue != NULL) &&
-	((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMAS_ATTR_FIXED) &&
-        ((use->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0))
-    {
-	xmlSchemaPCustomErr(ctxt,
-	    XML_SCHEMAP_AU_PROPS_CORRECT_2,
-	    WXS_BASIC_CAST use, NULL,
-	    "The attribute declaration has a 'fixed' value constraint "
-	    ", thus the attribute use must also have a 'fixed' value "
-	    "constraint",
-	    NULL);
-	return(ctxt->err);
-    }
-    /*
-    * Compute and check the value constraint's value.
-    */
-    if ((use->defVal != NULL) && (WXS_ATTRUSE_TYPEDEF(use) != NULL)) {
-	int ret;
-	/*
-	* TODO: The spec seems to be missing a check of the
-	* value constraint of the attribute use. We will do it here.
-	*/
-	/*
-	* SPEC a-props-correct (3)
-	*/
-	if (xmlSchemaIsDerivedFromBuiltInType(
-	    WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
-	{
-	    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-		XML_SCHEMAP_AU_PROPS_CORRECT,
-		NULL, WXS_BASIC_CAST use,
-		"Value constraints are not allowed if the type definition "
-		"is or is derived from xs:ID",
-		NULL, NULL);
-	    return(ctxt->err);
-	}
-
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST ctxt,
-	    use->node, WXS_ATTRUSE_TYPEDEF(use),
-	    use->defValue, &(use->defVal),
-	    1, 1, 0);
-	if (ret != 0) {
-	    if (ret < 0) {
-		PERROR_INT2("xmlSchemaCheckAttrUsePropsCorrect",
-		    "calling xmlSchemaVCheckCVCSimpleType()");
-		return(-1);
-	    }
-	    xmlSchemaCustomErr(ACTXT_CAST ctxt,
-		XML_SCHEMAP_AU_PROPS_CORRECT,
-		NULL, WXS_BASIC_CAST use,
-		"The value of the value constraint is not valid",
-		NULL, NULL);
-	    return(ctxt->err);
-	}
-    }
-    /*
-    * SPEC au-props-correct (2)
-    * "If the {attribute declaration} has a fixed
-    * {value constraint}, then if the attribute use itself has a
-    * {value constraint}, it must also be fixed and its value must match
-    * that of the {attribute declaration}'s {value constraint}."
-    */
-    if (((WXS_ATTRUSE_DECL(use))->defVal != NULL) &&
-	(((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0))
-    {
-	if (! xmlSchemaAreValuesEqual(use->defVal,
-		(WXS_ATTRUSE_DECL(use))->defVal))
-	{
-	    xmlSchemaPCustomErr(ctxt,
-		XML_SCHEMAP_AU_PROPS_CORRECT_2,
-		WXS_BASIC_CAST use, NULL,
-		"The 'fixed' value constraint of the attribute use "
-		"must match the attribute declaration's value "
-		"constraint '%s'",
-		(WXS_ATTRUSE_DECL(use))->defValue);
-	}
-	return(ctxt->err);
-    }
-    return(0);
-}
-
-
-
-
-/**
- * xmlSchemaResolveAttrTypeReferences:
- * @item:  an attribute declaration
- * @ctxt:  a parser context
- *
- * Resolves the referenced type definition component.
- */
-static int
-xmlSchemaResolveAttrTypeReferences(xmlSchemaAttributePtr item,
-				   xmlSchemaParserCtxtPtr ctxt)
-{
-    /*
-    * The simple type definition corresponding to the <simpleType> element
-    * information item in the [children], if present, otherwise the simple
-    * type definition `resolved` to by the `actual value` of the type
-    * [attribute], if present, otherwise the `simple ur-type definition`.
-    */
-    if (item->flags & XML_SCHEMAS_ATTR_INTERNAL_RESOLVED)
-	return(0);
-    item->flags |= XML_SCHEMAS_ATTR_INTERNAL_RESOLVED;
-    if (item->subtypes != NULL)
-        return(0);
-    if (item->typeName != NULL) {
-        xmlSchemaTypePtr type;
-
-	type = xmlSchemaGetType(ctxt->schema, item->typeName,
-	    item->typeNs);
-	if ((type == NULL) || (! WXS_IS_SIMPLE(type))) {
-	    xmlSchemaPResCompAttrErr(ctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST item, item->node,
-		"type", item->typeName, item->typeNs,
-		XML_SCHEMA_TYPE_SIMPLE, NULL);
-	    return(ctxt->err);
-	} else
-	    item->subtypes = type;
-
-    } else {
-	/*
-	* The type defaults to the xs:anySimpleType.
-	*/
-	item->subtypes = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaResolveIDCKeyReferences:
- * @idc:  the identity-constraint definition
- * @ctxt:  the schema parser context
- * @name:  the attribute name
- *
- * Resolve keyRef references to key/unique IDCs.
- * Schema Component Constraint:
- *   Identity-constraint Definition Properties Correct (c-props-correct)
- */
-static int
-xmlSchemaResolveIDCKeyReferences(xmlSchemaIDCPtr idc,
-			  xmlSchemaParserCtxtPtr pctxt)
-{
-    if (idc->type != XML_SCHEMA_TYPE_IDC_KEYREF)
-        return(0);
-    if (idc->ref->name != NULL) {
-	idc->ref->item = (xmlSchemaBasicItemPtr)
-	    xmlSchemaGetIDC(pctxt->schema, idc->ref->name,
-		idc->ref->targetNamespace);
-        if (idc->ref->item == NULL) {
-	    /*
-	    * TODO: It is actually not an error to fail to resolve
-	    * at this stage. BUT we need to be that strict!
-	    */
-	    xmlSchemaPResCompAttrErr(pctxt,
-		XML_SCHEMAP_SRC_RESOLVE,
-		WXS_BASIC_CAST idc, idc->node,
-		"refer", idc->ref->name,
-		idc->ref->targetNamespace,
-		XML_SCHEMA_TYPE_IDC_KEY, NULL);
-            return(pctxt->err);
-	} else if (idc->ref->item->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
-	    /*
-	    * SPEC c-props-correct (1)
-	    */
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_C_PROPS_CORRECT,
-		NULL, WXS_BASIC_CAST idc,
-		"The keyref references a keyref",
-		NULL, NULL);
-	    idc->ref->item = NULL;
-	    return(pctxt->err);
-	} else {
-	    if (idc->nbFields !=
-		((xmlSchemaIDCPtr) idc->ref->item)->nbFields) {
-		xmlChar *str = NULL;
-		xmlSchemaIDCPtr refer;
-
-		refer = (xmlSchemaIDCPtr) idc->ref->item;
-		/*
-		* SPEC c-props-correct(2)
-		* "If the {identity-constraint category} is keyref,
-		* the cardinality of the {fields} must equal that of
-		* the {fields} of the {referenced key}.
-		*/
-		xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		    XML_SCHEMAP_C_PROPS_CORRECT,
-		    NULL, WXS_BASIC_CAST idc,
-		    "The cardinality of the keyref differs from the "
-		    "cardinality of the referenced key/unique '%s'",
-		    xmlSchemaFormatQName(&str, refer->targetNamespace,
-			refer->name),
-		    NULL);
-		FREE_AND_NULL(str)
-		return(pctxt->err);
-	    }
-	}
-    }
-    return(0);
-}
-
-static int
-xmlSchemaResolveAttrUseProhibReferences(xmlSchemaAttributeUseProhibPtr prohib,
-				       xmlSchemaParserCtxtPtr pctxt)
-{
-    if (xmlSchemaGetAttributeDecl(pctxt->schema, prohib->name,
-	prohib->targetNamespace) == NULL) {
-
-	xmlSchemaPResCompAttrErr(pctxt,
-	    XML_SCHEMAP_SRC_RESOLVE,
-	    NULL, prohib->node,
-	    "ref", prohib->name, prohib->targetNamespace,
-	    XML_SCHEMA_TYPE_ATTRIBUTE, NULL);
-	return(XML_SCHEMAP_SRC_RESOLVE);
-    }
-    return(0);
-}
-
-#define WXS_REDEFINED_TYPE(c) \
-(((xmlSchemaTypePtr) item)->flags & XML_SCHEMAS_TYPE_REDEFINED)
-
-#define WXS_REDEFINED_MODEL_GROUP_DEF(c) \
-(((xmlSchemaModelGroupDefPtr) item)->flags & XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED)
-
-#define WXS_REDEFINED_ATTR_GROUP(c) \
-(((xmlSchemaAttributeGroupPtr) item)->flags & XML_SCHEMAS_ATTRGROUP_REDEFINED)
-
-static int
-xmlSchemaCheckSRCRedefineFirst(xmlSchemaParserCtxtPtr pctxt)
-{
-    int err = 0;
-    xmlSchemaRedefPtr redef = WXS_CONSTRUCTOR(pctxt)->redefs;
-    xmlSchemaBasicItemPtr prev, item;
-    int wasRedefined;
-
-    if (redef == NULL)
-	return(0);
-
-    do {
-	item = redef->item;
-	/*
-	* First try to locate the redefined component in the
-	* schema graph starting with the redefined schema.
-	* NOTE: According to this schema bug entry:
-	*   http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005OctDec/0019.html
-	*   it's not clear if the referenced component needs to originate
-	*   from the <redefine>d schema _document_ or the schema; the latter
-	*   would include all imported and included sub-schemas of the
-	*   <redefine>d schema. Currenlty we latter approach is used.
-	*   SUPPLEMENT: It seems that the WG moves towards the latter
-	*   approach, so we are doing it right.
-	*
-	*/
-	prev = xmlSchemaFindRedefCompInGraph(
-	    redef->targetBucket, item->type,
-	    redef->refName, redef->refTargetNs);
-	if (prev == NULL) {
-	    xmlChar *str = NULL;
-	    xmlNodePtr node;
-
-	    /*
-	    * SPEC src-redefine:
-	    * (6.2.1) "The `actual value` of its own name attribute plus
-	    * target namespace must successfully `resolve` to a model
-	    * group definition in I."
-	    * (7.2.1) "The `actual value` of its own name attribute plus
-	    * target namespace must successfully `resolve` to an attribute
-	    * group definition in I."
-
-	    *
-	    * Note that, if we are redefining with the use of references
-	    * to components, the spec assumes the src-resolve to be used;
-	    * but this won't assure that we search only *inside* the
-	    * redefined schema.
-	    */
-	    if (redef->reference)
-		node = WXS_ITEM_NODE(redef->reference);
-	    else
-		node = WXS_ITEM_NODE(item);
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		/*
-		* TODO: error code.
-		* Probably XML_SCHEMAP_SRC_RESOLVE, if this is using the
-		* reference kind.
-		*/
-		XML_SCHEMAP_SRC_REDEFINE, node, NULL,
-		"The %s '%s' to be redefined could not be found in "
-		"the redefined schema",
-		WXS_ITEM_TYPE_NAME(item),
-		xmlSchemaFormatQName(&str, redef->refTargetNs,
-		    redef->refName));
-	    FREE_AND_NULL(str);
-	    err = pctxt->err;
-	    redef = redef->next;
-	    continue;
-	}
-	/*
-	* TODO: Obtaining and setting the redefinition state is really
-	* clumsy.
-	*/
-	wasRedefined = 0;
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_COMPLEX:
-	    case XML_SCHEMA_TYPE_SIMPLE:
-		if ((WXS_TYPE_CAST prev)->flags &
-		    XML_SCHEMAS_TYPE_REDEFINED)
-		{
-		    wasRedefined = 1;
-		    break;
-		}
-		/* Mark it as redefined. */
-		(WXS_TYPE_CAST prev)->flags |= XML_SCHEMAS_TYPE_REDEFINED;
-		/*
-		* Assign the redefined type to the
-		* base type of the redefining type.
-		* TODO: How
-		*/
-		((xmlSchemaTypePtr) item)->baseType =
-		    (xmlSchemaTypePtr) prev;
-		break;
-	    case XML_SCHEMA_TYPE_GROUP:
-		if ((WXS_MODEL_GROUPDEF_CAST prev)->flags &
-		    XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED)
-		{
-		    wasRedefined = 1;
-		    break;
-		}
-		/* Mark it as redefined. */
-		(WXS_MODEL_GROUPDEF_CAST prev)->flags |=
-		    XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED;
-		if (redef->reference != NULL) {
-		    /*
-		    * Overwrite the QName-reference with the
-		    * referenced model group def.
-		    */
-		    (WXS_PTC_CAST redef->reference)->children =
-			WXS_TREE_CAST prev;
-		}
-		redef->target = prev;
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		if ((WXS_ATTR_GROUP_CAST prev)->flags &
-		    XML_SCHEMAS_ATTRGROUP_REDEFINED)
-		{
-		    wasRedefined = 1;
-		    break;
-		}
-		(WXS_ATTR_GROUP_CAST prev)->flags |=
-		    XML_SCHEMAS_ATTRGROUP_REDEFINED;
-		if (redef->reference != NULL) {
-		    /*
-		    * Assign the redefined attribute group to the
-		    * QName-reference component.
-		    * This is the easy case, since we will just
-		    * expand the redefined group.
-		    */
-		    (WXS_QNAME_CAST redef->reference)->item = prev;
-		    redef->target = NULL;
-		} else {
-		    /*
-		    * This is the complicated case: we need
-		    * to apply src-redefine (7.2.2) at a later
-		    * stage, i.e. when attribute group references
-		    * have beed expanded and simple types have
-		    * beed fixed.
-		    */
-		    redef->target = prev;
-		}
-		break;
-	    default:
-		PERROR_INT("xmlSchemaResolveRedefReferences",
-		    "Unexpected redefined component type");
-		return(-1);
-	}
-	if (wasRedefined) {
-	    xmlChar *str = NULL;
-	    xmlNodePtr node;
-
-	    if (redef->reference)
-		node = WXS_ITEM_NODE(redef->reference);
-	    else
-		node = WXS_ITEM_NODE(redef->item);
-
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		/* TODO: error code. */
-		XML_SCHEMAP_SRC_REDEFINE,
-		node, NULL,
-		"The referenced %s was already redefined. Multiple "
-		"redefinition of the same component is not supported",
-		xmlSchemaGetComponentDesignation(&str, prev),
-		NULL);
-	    FREE_AND_NULL(str)
-	    err = pctxt->err;
-	    redef = redef->next;
-	    continue;
-	}
-	redef = redef->next;
-    } while (redef != NULL);
-
-    return(err);
-}
-
-static int
-xmlSchemaCheckSRCRedefineSecond(xmlSchemaParserCtxtPtr pctxt)
-{
-    int err = 0;
-    xmlSchemaRedefPtr redef = WXS_CONSTRUCTOR(pctxt)->redefs;
-    xmlSchemaBasicItemPtr item;
-
-    if (redef == NULL)
-	return(0);
-
-    do {
-	if (redef->target == NULL) {
-	    redef = redef->next;
-	    continue;
-	}
-	item = redef->item;
-
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_SIMPLE:
-	    case XML_SCHEMA_TYPE_COMPLEX:
-		/*
-		* Since the spec wants the {name} of the redefined
-		* type to be 'absent', we'll NULL it.
-		*/
-		(WXS_TYPE_CAST redef->target)->name = NULL;
-
-		/*
-		* TODO: Seems like there's nothing more to do. The normal
-		* inheritance mechanism is used. But not 100% sure.
-		*/
-		break;
-	    case XML_SCHEMA_TYPE_GROUP:
-		/*
-		* URGENT TODO:
-		* SPEC src-redefine:
-		* (6.2.2) "The {model group} of the model group definition
-		* which corresponds to it per XML Representation of Model
-		* Group Definition Schema Components ($3.7.2) must be a
-		* `valid restriction` of the {model group} of that model
-		* group definition in I, as defined in Particle Valid
-		* (Restriction) ($3.9.6)."
-		*/
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		/*
-		* SPEC src-redefine:
-		* (7.2.2) "The {attribute uses} and {attribute wildcard} of
-		* the attribute group definition which corresponds to it
-		* per XML Representation of Attribute Group Definition Schema
-		* Components ($3.6.2) must be `valid restrictions` of the
-		* {attribute uses} and {attribute wildcard} of that attribute
-		* group definition in I, as defined in clause 2, clause 3 and
-		* clause 4 of Derivation Valid (Restriction, Complex)
-		* ($3.4.6) (where references to the base type definition are
-		* understood as references to the attribute group definition
-		* in I)."
-		*/
-		err = xmlSchemaCheckDerivationOKRestriction2to4(pctxt,
-		    XML_SCHEMA_ACTION_REDEFINE,
-		    item, redef->target,
-		    (WXS_ATTR_GROUP_CAST item)->attrUses,
-		    (WXS_ATTR_GROUP_CAST redef->target)->attrUses,
-		    (WXS_ATTR_GROUP_CAST item)->attributeWildcard,
-		    (WXS_ATTR_GROUP_CAST redef->target)->attributeWildcard);
-		if (err == -1)
-		    return(-1);
-		break;
-	    default:
-		break;
-	}
-	redef = redef->next;
-    } while (redef != NULL);
-    return(0);
-}
-
-
-static int
-xmlSchemaAddComponents(xmlSchemaParserCtxtPtr pctxt,
-		       xmlSchemaBucketPtr bucket)
-{
-    xmlSchemaBasicItemPtr item;
-    int err;
-    xmlHashTablePtr *table;
-    const xmlChar *name;
-    int i;
-
-#define WXS_GET_GLOBAL_HASH(c, slot) { \
-    if (WXS_IS_BUCKET_IMPMAIN((c)->type)) \
-	table = &(WXS_IMPBUCKET((c))->schema->slot); \
-    else \
-	table = &(WXS_INCBUCKET((c))->ownerImport->schema->slot); }
-
-    /*
-    * Add global components to the schema's hash tables.
-    * This is the place where duplicate components will be
-    * detected.
-    * TODO: I think normally we should support imports of the
-    *   same namespace from multiple locations. We don't do currently,
-    *   but if we do then according to:
-    *   http://www.w3.org/Bugs/Public/show_bug.cgi?id=2224
-    *   we would need, if imported directly, to import redefined
-    *   components as well to be able to catch clashing components.
-    *   (I hope I'll still know what this means after some months :-()
-    */
-    if (bucket == NULL)
-	return(-1);
-    if (bucket->flags & XML_SCHEMA_BUCKET_COMPS_ADDED)
-	return(0);
-    bucket->flags |= XML_SCHEMA_BUCKET_COMPS_ADDED;
-
-    for (i = 0; i < bucket->globals->nbItems; i++) {
-	item = bucket->globals->items[i];
-	table = NULL;
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_COMPLEX:
-	    case XML_SCHEMA_TYPE_SIMPLE:
-		if (WXS_REDEFINED_TYPE(item))
-		    continue;
-		name = (WXS_TYPE_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, typeDecl)
-		break;
-	    case XML_SCHEMA_TYPE_ELEMENT:
-		name = (WXS_ELEM_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, elemDecl)
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTE:
-		name = (WXS_ATTR_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, attrDecl)
-		break;
-	    case XML_SCHEMA_TYPE_GROUP:
-		if (WXS_REDEFINED_MODEL_GROUP_DEF(item))
-		    continue;
-		name = (WXS_MODEL_GROUPDEF_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, groupDecl)
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		if (WXS_REDEFINED_ATTR_GROUP(item))
-		    continue;
-		name = (WXS_ATTR_GROUP_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, attrgrpDecl)
-		break;
-	    case XML_SCHEMA_TYPE_IDC_KEY:
-	    case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	    case XML_SCHEMA_TYPE_IDC_KEYREF:
-		name = (WXS_IDC_CAST item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, idcDef)
-		break;
-	    case XML_SCHEMA_TYPE_NOTATION:
-		name = ((xmlSchemaNotationPtr) item)->name;
-		WXS_GET_GLOBAL_HASH(bucket, notaDecl)
-		break;
-	    default:
-		PERROR_INT("xmlSchemaAddComponents",
-		    "Unexpected global component type");
-		continue;
-	}
-	if (*table == NULL) {
-	    *table = xmlHashCreateDict(10, pctxt->dict);
-	    if (*table == NULL) {
-		PERROR_INT("xmlSchemaAddComponents",
-		    "failed to create a component hash table");
-		return(-1);
-	    }
-	}
-	err = xmlHashAddEntry(*table, name, item);
-	if (err != 0) {
-	    xmlChar *str = NULL;
-
-	    xmlSchemaCustomErr(ACTXT_CAST pctxt,
-		XML_SCHEMAP_REDEFINED_TYPE,
-		WXS_ITEM_NODE(item),
-		WXS_BASIC_CAST item,
-		"A global %s '%s' does already exist",
-		WXS_ITEM_TYPE_NAME(item),
-		xmlSchemaGetComponentQName(&str, item));
-	    FREE_AND_NULL(str);
-	}
-    }
-    /*
-    * Process imported/included schemas.
-    */
-    if (bucket->relations != NULL) {
-	xmlSchemaSchemaRelationPtr rel = bucket->relations;
-	do {
-	    if ((rel->bucket != NULL) &&
-		((rel->bucket->flags & XML_SCHEMA_BUCKET_COMPS_ADDED) == 0)) {
-		if (xmlSchemaAddComponents(pctxt, rel->bucket) == -1)
-		    return(-1);
-	    }
-	    rel = rel->next;
-	} while (rel != NULL);
-    }
-    return(0);
-}
-
-static int
-xmlSchemaFixupComponents(xmlSchemaParserCtxtPtr pctxt,
-			 xmlSchemaBucketPtr rootBucket)
-{
-    xmlSchemaConstructionCtxtPtr con = pctxt->constructor;
-    xmlSchemaTreeItemPtr item, *items;
-    int nbItems, i, ret = 0;
-    xmlSchemaBucketPtr oldbucket = con->bucket;
-    xmlSchemaElementPtr elemDecl;
-
-#define FIXHFAILURE if (pctxt->err == XML_SCHEMAP_INTERNAL) goto exit_failure;
-
-    if ((con->pending == NULL) ||
-	(con->pending->nbItems == 0))
-	return(0);
-
-    /*
-    * Since xmlSchemaFixupComplexType() will create new particles
-    * (local components), and those particle components need a bucket
-    * on the constructor, we'll assure here that the constructor has
-    * a bucket.
-    * TODO: Think about storing locals _only_ on the main bucket.
-    */
-    if (con->bucket == NULL)
-	con->bucket = rootBucket;
-
-    /* TODO:
-    * SPEC (src-redefine):
-    * (6.2) "If it has no such self-reference, then all of the
-    * following must be true:"
-
-    * (6.2.2) The {model group} of the model group definition which
-    * corresponds to it per XML Representation of Model Group
-    * Definition Schema Components ($3.7.2) must be a `valid
-    * restriction` of the {model group} of that model group definition
-    * in I, as defined in Particle Valid (Restriction) ($3.9.6)."
-    */
-    xmlSchemaCheckSRCRedefineFirst(pctxt);
-
-    /*
-    * Add global components to the schemata's hash tables.
-    */
-    xmlSchemaAddComponents(pctxt, rootBucket);
-
-    pctxt->ctxtType = NULL;
-    items = (xmlSchemaTreeItemPtr *) con->pending->items;
-    nbItems = con->pending->nbItems;
-    /*
-    * Now that we have parsed *all* the schema document(s) and converted
-    * them to schema components, we can resolve references, apply component
-    * constraints, create the FSA from the content model, etc.
-    */
-    /*
-    * Resolve references of..
-    *
-    * 1. element declarations:
-    *   - the type definition
-    *   - the substitution group affiliation
-    * 2. simple/complex types:
-    *   - the base type definition
-    *   - the memberTypes of union types
-    *   - the itemType of list types
-    * 3. attributes declarations and attribute uses:
-    *   - the type definition
-    *   - if an attribute use, then the attribute declaration
-    * 4. attribute group references:
-    *   - the attribute group definition
-    * 5. particles:
-    *   - the term of the particle (e.g. a model group)
-    * 6. IDC key-references:
-    *   - the referenced IDC 'key' or 'unique' definition
-    * 7. Attribute prohibitions which had a "ref" attribute.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_ELEMENT:
-		xmlSchemaResolveElementReferences(
-		    (xmlSchemaElementPtr) item, pctxt);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_TYPE_COMPLEX:
-	    case XML_SCHEMA_TYPE_SIMPLE:
-		xmlSchemaResolveTypeReferences(
-		    (xmlSchemaTypePtr) item, pctxt);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTE:
-		xmlSchemaResolveAttrTypeReferences(
-		    (xmlSchemaAttributePtr) item, pctxt);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-		xmlSchemaResolveAttrUseReferences(
-		    (xmlSchemaAttributeUsePtr) item, pctxt);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_EXTRA_QNAMEREF:
-		if ((WXS_QNAME_CAST item)->itemType ==
-		    XML_SCHEMA_TYPE_ATTRIBUTEGROUP)
-		{
-		    xmlSchemaResolveAttrGroupReferences(
-			WXS_QNAME_CAST item, pctxt);
-		}
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_TYPE_SEQUENCE:
-	    case XML_SCHEMA_TYPE_CHOICE:
-	    case XML_SCHEMA_TYPE_ALL:
-		xmlSchemaResolveModelGroupParticleReferences(pctxt,
-		    WXS_MODEL_GROUP_CAST item);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_TYPE_IDC_KEY:
-	    case XML_SCHEMA_TYPE_IDC_UNIQUE:
-	    case XML_SCHEMA_TYPE_IDC_KEYREF:
-		xmlSchemaResolveIDCKeyReferences(
-		    (xmlSchemaIDCPtr) item, pctxt);
-		FIXHFAILURE;
-		break;
-	    case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
-		/*
-		* Handle attribue prohibition which had a
-		* "ref" attribute.
-		*/
-		xmlSchemaResolveAttrUseProhibReferences(
-		    WXS_ATTR_PROHIB_CAST item, pctxt);
-		FIXHFAILURE;
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Now that all references are resolved we
-    * can check for circularity of...
-    * 1. the base axis of type definitions
-    * 2. nested model group definitions
-    * 3. nested attribute group definitions
-    * TODO: check for circual substitution groups.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	/*
-	* Let's better stop on the first error here.
-	*/
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_COMPLEX:
-	    case XML_SCHEMA_TYPE_SIMPLE:
-		xmlSchemaCheckTypeDefCircular(
-		    (xmlSchemaTypePtr) item, pctxt);
-		FIXHFAILURE;
-		if (pctxt->nberrors != 0)
-		    goto exit_error;
-		break;
-	    case XML_SCHEMA_TYPE_GROUP:
-		xmlSchemaCheckGroupDefCircular(
-		    (xmlSchemaModelGroupDefPtr) item, pctxt);
-		FIXHFAILURE;
-		if (pctxt->nberrors != 0)
-		    goto exit_error;
-		break;
-	    case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		xmlSchemaCheckAttrGroupCircular(
-		    (xmlSchemaAttributeGroupPtr) item, pctxt);
-		FIXHFAILURE;
-		if (pctxt->nberrors != 0)
-		    goto exit_error;
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * Model group definition references:
-    * Such a reference is reflected by a particle at the component
-    * level. Until now the 'term' of such particles pointed
-    * to the model group definition; this was done, in order to
-    * ease circularity checks. Now we need to set the 'term' of
-    * such particles to the model group of the model group definition.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_SEQUENCE:
-	    case XML_SCHEMA_TYPE_CHOICE:
-		xmlSchemaModelGroupToModelGroupDefFixup(pctxt,
-		    WXS_MODEL_GROUP_CAST item);
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * Expand attribute group references of attribute group definitions.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-            case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-		if ((! WXS_ATTR_GROUP_EXPANDED(item)) &&
-		    WXS_ATTR_GROUP_HAS_REFS(item))
-		{
-		    xmlSchemaAttributeGroupExpandRefs(pctxt,
-			WXS_ATTR_GROUP_CAST item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * First compute the variety of simple types. This is needed as
-    * a seperate step, since otherwise we won't be able to detect
-    * circular union types in all cases.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-            case XML_SCHEMA_TYPE_SIMPLE:
-		if (WXS_IS_TYPE_NOT_FIXED_1((xmlSchemaTypePtr) item)) {
-		    xmlSchemaFixupSimpleTypeStageOne(pctxt,
-			(xmlSchemaTypePtr) item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * Detect circular union types. Note that this needs the variety to
-    * be already computed.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-            case XML_SCHEMA_TYPE_SIMPLE:
-		if (((xmlSchemaTypePtr) item)->memberTypes != NULL) {
-		    xmlSchemaCheckUnionTypeDefCircular(pctxt,
-			(xmlSchemaTypePtr) item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Do the complete type fixup for simple types.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-            case XML_SCHEMA_TYPE_SIMPLE:
-		if (WXS_IS_TYPE_NOT_FIXED(WXS_TYPE_CAST item)) {
-		    xmlSchemaFixupSimpleTypeStageTwo(pctxt, WXS_TYPE_CAST item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * At this point we need build and check all simple types.
-    */
-    /*
-    * Apply contraints for attribute declarations.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_ATTRIBUTE:
-		xmlSchemaCheckAttrPropsCorrect(pctxt, WXS_ATTR_CAST item);
-		FIXHFAILURE;
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * Apply constraints for attribute uses.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
-		if (((xmlSchemaAttributeUsePtr)item)->defValue != NULL) {
-		    xmlSchemaCheckAttrUsePropsCorrect(pctxt,
-			WXS_ATTR_USE_CAST item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Apply constraints for attribute group definitions.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
-	    if (( (WXS_ATTR_GROUP_CAST item)->attrUses != NULL) &&
-		( (WXS_LIST_CAST (WXS_ATTR_GROUP_CAST item)->attrUses)->nbItems > 1))
-	    {
-		xmlSchemaCheckAGPropsCorrect(pctxt, WXS_ATTR_GROUP_CAST item);
-		FIXHFAILURE;
-	    }
-	    break;
-	default:
-	    break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Apply constraints for redefinitions.
-    */
-    if (WXS_CONSTRUCTOR(pctxt)->redefs != NULL)
-	xmlSchemaCheckSRCRedefineSecond(pctxt);
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Complex types are builded and checked.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = con->pending->items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_COMPLEX:
-		if (WXS_IS_TYPE_NOT_FIXED(WXS_TYPE_CAST item)) {
-		    xmlSchemaFixupComplexType(pctxt, WXS_TYPE_CAST item);
-		    FIXHFAILURE;
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * The list could have changed, since xmlSchemaFixupComplexType()
-    * will create particles and model groups in some cases.
-    */
-    items = (xmlSchemaTreeItemPtr *) con->pending->items;
-    nbItems = con->pending->nbItems;
-
-    /*
-    * Apply some constraints for element declarations.
-    */
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_ELEMENT:
-		elemDecl = (xmlSchemaElementPtr) item;
-
-		if ((elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_CHECKED) == 0)
-		{
-		    xmlSchemaCheckElementDeclComponent(
-			(xmlSchemaElementPtr) elemDecl, pctxt);
-		    FIXHFAILURE;
-		}
-
-#ifdef WXS_ELEM_DECL_CONS_ENABLED
-		/*
-		* Schema Component Constraint: Element Declarations Consistent
-		* Apply this constraint to local types of element declarations.
-		*/
-		if ((WXS_ELEM_TYPEDEF(elemDecl) != NULL) &&
-		    (WXS_IS_COMPLEX(WXS_ELEM_TYPEDEF(elemDecl))) &&
-		    (WXS_TYPE_IS_LOCAL(WXS_ELEM_TYPEDEF(elemDecl))))
-		{
-		    xmlSchemaCheckElementDeclConsistent(pctxt,
-			WXS_BASIC_CAST elemDecl,
-			WXS_TYPE_PARTICLE(WXS_ELEM_TYPEDEF(elemDecl)),
-			NULL, NULL, 0);
-		}
-#endif
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-
-    /*
-    * Finally we can build the automaton from the content model of
-    * complex types.
-    */
-
-    for (i = 0; i < nbItems; i++) {
-	item = items[i];
-	switch (item->type) {
-	    case XML_SCHEMA_TYPE_COMPLEX:
-		xmlSchemaBuildContentModel((xmlSchemaTypePtr) item, pctxt);
-		/* FIXHFAILURE; */
-		break;
-	    default:
-		break;
-	}
-    }
-    if (pctxt->nberrors != 0)
-	goto exit_error;
-    /*
-    * URGENT TODO: cos-element-consistent
-    */
-    goto exit;
-
-exit_error:
-    ret = pctxt->err;
-    goto exit;
-
-exit_failure:
-    ret = -1;
-
-exit:
-    /*
-    * Reset the constructor. This is needed for XSI acquisition, since
-    * those items will be processed over and over again for every XSI
-    * if not cleared here.
-    */
-    con->bucket = oldbucket;
-    con->pending->nbItems = 0;
-    if (con->substGroups != NULL) {
-	xmlHashFree(con->substGroups,
-	    (xmlHashDeallocator) xmlSchemaSubstGroupFree);
-	con->substGroups = NULL;
-    }
-    if (con->redefs != NULL) {
-	xmlSchemaRedefListFree(con->redefs);
-	con->redefs = NULL;
-    }
-    return(ret);
-}
-/**
- * xmlSchemaParse:
- * @ctxt:  a schema validation context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML Schema structure built from the resource or
- *         NULL in case of error
- */
-xmlSchemaPtr
-xmlSchemaParse(xmlSchemaParserCtxtPtr ctxt)
-{
-    xmlSchemaPtr mainSchema = NULL;
-    xmlSchemaBucketPtr bucket = NULL;
-    int res;
-
-    /*
-    * This one is used if the schema to be parsed was specified via
-    * the API; i.e. not automatically by the validated instance document.
-    */
-
-    xmlSchemaInitTypes();
-
-    if (ctxt == NULL)
-        return (NULL);
-
-    /* TODO: Init the context. Is this all we need?*/
-    ctxt->nberrors = 0;
-    ctxt->err = 0;
-    ctxt->counter = 0;
-
-    /* Create the *main* schema. */
-    mainSchema = xmlSchemaNewSchema(ctxt);
-    if (mainSchema == NULL)
-	goto exit_failure;
-    /*
-    * Create the schema constructor.
-    */
-    if (ctxt->constructor == NULL) {
-	ctxt->constructor = xmlSchemaConstructionCtxtCreate(ctxt->dict);
-	if (ctxt->constructor == NULL)
-	    return(NULL);
-	/* Take ownership of the constructor to be able to free it. */
-	ctxt->ownsConstructor = 1;
-    }
-    ctxt->constructor->mainSchema = mainSchema;
-    /*
-    * Locate and add the schema document.
-    */
-    res = xmlSchemaAddSchemaDoc(ctxt, XML_SCHEMA_SCHEMA_MAIN,
-	ctxt->URL, ctxt->doc, ctxt->buffer, ctxt->size, NULL,
-	NULL, NULL, &bucket);
-    if (res == -1)
-	goto exit_failure;
-    if (res != 0)
-	goto exit;
-
-    if (bucket == NULL) {
-	/* TODO: Error code, actually we failed to *locate* the schema. */
-	if (ctxt->URL)
-	    xmlSchemaCustomErr(ACTXT_CAST ctxt, XML_SCHEMAP_FAILED_LOAD,
-		NULL, NULL,
-		"Failed to locate the main schema resource at '%s'",
-		ctxt->URL, NULL);
-	else
-	    xmlSchemaCustomErr(ACTXT_CAST ctxt, XML_SCHEMAP_FAILED_LOAD,
-		NULL, NULL,
-		"Failed to locate the main schema resource",
-		    NULL, NULL);
-	goto exit;
-    }
-    /* Then do the parsing for good. */
-    if (xmlSchemaParseNewDocWithContext(ctxt, mainSchema, bucket) == -1)
-	goto exit_failure;
-    if (ctxt->nberrors != 0)
-	goto exit;
-
-    mainSchema->doc = bucket->doc;
-    mainSchema->preserve = ctxt->preserve;
-
-    ctxt->schema = mainSchema;
-
-    if (xmlSchemaFixupComponents(ctxt, WXS_CONSTRUCTOR(ctxt)->mainBucket) == -1)
-	goto exit_failure;
-
-    /*
-    * TODO: This is not nice, since we cannot distinguish from the
-    * result if there was an internal error or not.
-    */
-exit:
-    if (ctxt->nberrors != 0) {
-	if (mainSchema) {
-	    xmlSchemaFree(mainSchema);
-	    mainSchema = NULL;
-	}
-	if (ctxt->constructor) {
-	    xmlSchemaConstructionCtxtFree(ctxt->constructor);
-	    ctxt->constructor = NULL;
-	    ctxt->ownsConstructor = 0;
-	}
-    }
-    ctxt->schema = NULL;
-    return(mainSchema);
-exit_failure:
-    /*
-    * Quite verbose, but should catch internal errors, which were
-    * not communitated.
-    */
-    if (mainSchema) {
-        xmlSchemaFree(mainSchema);
-	mainSchema = NULL;
-    }
-    if (ctxt->constructor) {
-	xmlSchemaConstructionCtxtFree(ctxt->constructor);
-	ctxt->constructor = NULL;
-	ctxt->ownsConstructor = 0;
-    }
-    PERROR_INT2("xmlSchemaParse",
-	"An internal error occured");
-    ctxt->schema = NULL;
-    return(NULL);
-}
-
-/**
- * xmlSchemaSetParserErrors:
- * @ctxt:  a schema validation context
- * @err:  the error callback
- * @warn:  the warning callback
- * @ctx:  contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a validation context
- */
-void
-xmlSchemaSetParserErrors(xmlSchemaParserCtxtPtr ctxt,
-                         xmlSchemaValidityErrorFunc err,
-                         xmlSchemaValidityWarningFunc warn, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->error = err;
-    ctxt->warning = warn;
-    ctxt->errCtxt = ctx;
-    if (ctxt->vctxt != NULL)
-	xmlSchemaSetValidErrors(ctxt->vctxt, err, warn, ctx);
-}
-
-/**
- * xmlSchemaSetParserStructuredErrors:
- * @ctxt:  a schema parser context
- * @serror:  the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
-				   xmlStructuredErrorFunc serror,
-				   void *ctx)
-{
-    if (ctxt == NULL)
-	return;
-    ctxt->serror = serror;
-    ctxt->errCtxt = ctx;
-    if (ctxt->vctxt != NULL)
-	xmlSchemaSetValidStructuredErrors(ctxt->vctxt, serror, ctx);
-}
-
-/**
- * xmlSchemaGetParserErrors:
- * @ctxt:  a XMl-Schema parser context
- * @err: the error callback result
- * @warn: the warning callback result
- * @ctx: contextual data for the callbacks result
- *
- * Get the callback information used to handle errors for a parser context
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-int
-xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
-			 xmlSchemaValidityErrorFunc * err,
-			 xmlSchemaValidityWarningFunc * warn, void **ctx)
-{
-	if (ctxt == NULL)
-		return(-1);
-	if (err != NULL)
-		*err = ctxt->error;
-	if (warn != NULL)
-		*warn = ctxt->warning;
-	if (ctx != NULL)
-		*ctx = ctxt->errCtxt;
-	return(0);
-}
-
-/**
- * xmlSchemaFacetTypeToString:
- * @type:  the facet type
- *
- * Convert the xmlSchemaTypeType to a char string.
- *
- * Returns the char string representation of the facet type if the
- *     type is a facet and an "Internal Error" string otherwise.
- */
-static const xmlChar *
-xmlSchemaFacetTypeToString(xmlSchemaTypeType type)
-{
-    switch (type) {
-        case XML_SCHEMA_FACET_PATTERN:
-            return (BAD_CAST "pattern");
-        case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-            return (BAD_CAST "maxExclusive");
-        case XML_SCHEMA_FACET_MAXINCLUSIVE:
-            return (BAD_CAST "maxInclusive");
-        case XML_SCHEMA_FACET_MINEXCLUSIVE:
-            return (BAD_CAST "minExclusive");
-        case XML_SCHEMA_FACET_MININCLUSIVE:
-            return (BAD_CAST "minInclusive");
-        case XML_SCHEMA_FACET_WHITESPACE:
-            return (BAD_CAST "whiteSpace");
-        case XML_SCHEMA_FACET_ENUMERATION:
-            return (BAD_CAST "enumeration");
-        case XML_SCHEMA_FACET_LENGTH:
-            return (BAD_CAST "length");
-        case XML_SCHEMA_FACET_MAXLENGTH:
-            return (BAD_CAST "maxLength");
-        case XML_SCHEMA_FACET_MINLENGTH:
-            return (BAD_CAST "minLength");
-        case XML_SCHEMA_FACET_TOTALDIGITS:
-            return (BAD_CAST "totalDigits");
-        case XML_SCHEMA_FACET_FRACTIONDIGITS:
-            return (BAD_CAST "fractionDigits");
-        default:
-            break;
-    }
-    return (BAD_CAST "Internal Error");
-}
-
-static xmlSchemaWhitespaceValueType
-xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type)
-{
-    /*
-    * The normalization type can be changed only for types which are derived
-    * from xsd:string.
-    */
-    if (type->type == XML_SCHEMA_TYPE_BASIC) {
-	/*
-	* Note that we assume a whitespace of preserve for anySimpleType.
-	*/
-	if ((type->builtInType == XML_SCHEMAS_STRING) ||
-	    (type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE))
-	    return(XML_SCHEMA_WHITESPACE_PRESERVE);
-	else if (type->builtInType == XML_SCHEMAS_NORMSTRING)
-	    return(XML_SCHEMA_WHITESPACE_REPLACE);
-	else {
-	    /*
-	    * For all `atomic` datatypes other than string (and types `derived`
-	    * by `restriction` from it) the value of whiteSpace is fixed to
-	    * collapse
-	    * Note that this includes built-in list datatypes.
-	    */
-	    return(XML_SCHEMA_WHITESPACE_COLLAPSE);
-	}
-    } else if (WXS_IS_LIST(type)) {
-	/*
-	* For list types the facet "whiteSpace" is fixed to "collapse".
-	*/
-	return (XML_SCHEMA_WHITESPACE_COLLAPSE);
-    } else if (WXS_IS_UNION(type)) {
-	return (XML_SCHEMA_WHITESPACE_UNKNOWN);
-    } else if (WXS_IS_ATOMIC(type)) {
-	if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE)
-	    return (XML_SCHEMA_WHITESPACE_PRESERVE);
-	else if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_REPLACE)
-	    return (XML_SCHEMA_WHITESPACE_REPLACE);
-	else
-	    return (XML_SCHEMA_WHITESPACE_COLLAPSE);
-    }
-    return (-1);
-}
-
-/************************************************************************
- *									*
- *			Simple type validation				*
- *									*
- ************************************************************************/
-
-
-/************************************************************************
- *									*
- *			DOM Validation code				*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaAssembleByLocation:
- * @pctxt:  a schema parser context
- * @vctxt:  a schema validation context
- * @schema: the existing schema
- * @node: the node that fired the assembling
- * @nsName: the namespace name of the new schema
- * @location: the location of the schema
- *
- * Expands an existing schema by an additional schema.
- *
- * Returns 0 if the new schema is correct, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaAssembleByLocation(xmlSchemaValidCtxtPtr vctxt,
-			    xmlSchemaPtr schema,
-			    xmlNodePtr node,
-			    const xmlChar *nsName,
-			    const xmlChar *location)
-{
-    int ret = 0;
-    xmlSchemaParserCtxtPtr pctxt;
-    xmlSchemaBucketPtr bucket = NULL;
-
-    if ((vctxt == NULL) || (schema == NULL))
-	return (-1);
-
-    if (vctxt->pctxt == NULL) {
-	VERROR_INT("xmlSchemaAssembleByLocation",
-	    "no parser context available");
-	return(-1);
-    }
-    pctxt = vctxt->pctxt;
-    if (pctxt->constructor == NULL) {
-	PERROR_INT("xmlSchemaAssembleByLocation",
-	    "no constructor");
-	return(-1);
-    }
-    /*
-    * Acquire the schema document.
-    */
-    location = xmlSchemaBuildAbsoluteURI(pctxt->dict,
-	location, node);
-    /*
-    * Note that we pass XML_SCHEMA_SCHEMA_IMPORT here;
-    * the process will automatically change this to
-    * XML_SCHEMA_SCHEMA_MAIN if it is the first schema document.
-    */
-    ret = xmlSchemaAddSchemaDoc(pctxt, XML_SCHEMA_SCHEMA_IMPORT,
-	location, NULL, NULL, 0, node, NULL, nsName,
-	&bucket);
-    if (ret != 0)
-	return(ret);
-    if (bucket == NULL) {
-	/*
-	* Generate a warning that the document could not be located.
-	*/
-	xmlSchemaCustomWarning(ACTXT_CAST vctxt, XML_SCHEMAV_MISC,
-	    node, NULL,
-	    "The document at location '%s' could not be acquired",
-	    location, NULL, NULL);
-	return(ret);
-    }
-    /*
-    * The first located schema will be handled as if all other
-    * schemas imported by XSI were imported by this first schema.
-    */
-    if ((bucket != NULL) &&
-	(WXS_CONSTRUCTOR(pctxt)->bucket == NULL))
-	WXS_CONSTRUCTOR(pctxt)->bucket = bucket;
-    /*
-    * TODO: Is this handled like an import? I.e. is it not an error
-    * if the schema cannot be located?
-    */
-    if ((bucket == NULL) || (! CAN_PARSE_SCHEMA(bucket)))
-	return(0);
-    /*
-    * We will reuse the parser context for every schema imported
-    * directly via XSI. So reset the context.
-    */
-    pctxt->nberrors = 0;
-    pctxt->err = 0;
-    pctxt->doc = bucket->doc;
-
-    ret = xmlSchemaParseNewDocWithContext(pctxt, schema, bucket);
-    if (ret == -1) {
-	pctxt->doc = NULL;
-	goto exit_failure;
-    }
-    /* Paranoid error channelling. */
-    if ((ret == 0) && (pctxt->nberrors != 0))
-	ret = pctxt->err;
-    if (pctxt->nberrors == 0) {
-	/*
-	* Only bother to fixup pending components, if there was
-	* no error yet.
-	* For every XSI acquired schema (and its sub-schemata) we will
-	* fixup the components.
-	*/
-	xmlSchemaFixupComponents(pctxt, bucket);
-	ret = pctxt->err;
-	/*
-	* Not nice, but we need somehow to channel the schema parser
-	* error to the validation context.
-	*/
-	if ((ret != 0) && (vctxt->err == 0))
-	    vctxt->err = ret;
-	vctxt->nberrors += pctxt->nberrors;
-    } else {
-	/* Add to validation error sum. */
-	vctxt->nberrors += pctxt->nberrors;
-    }
-    pctxt->doc = NULL;
-    return(ret);
-exit_failure:
-    pctxt->doc = NULL;
-    return (-1);
-}
-
-static xmlSchemaAttrInfoPtr
-xmlSchemaGetMetaAttrInfo(xmlSchemaValidCtxtPtr vctxt,
-			 int metaType)
-{
-    if (vctxt->nbAttrInfos == 0)
-	return (NULL);
-    {
-	int i;
-	xmlSchemaAttrInfoPtr iattr;
-
-	for (i = 0; i < vctxt->nbAttrInfos; i++) {
-	    iattr = vctxt->attrInfos[i];
-	    if (iattr->metaType == metaType)
-		return (iattr);
-	}
-
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaAssembleByXSI:
- * @vctxt:  a schema validation context
- *
- * Expands an existing schema by an additional schema using
- * the xsi:schemaLocation or xsi:noNamespaceSchemaLocation attribute
- * of an instance. If xsi:noNamespaceSchemaLocation is used, @noNamespace
- * must be set to 1.
- *
- * Returns 0 if the new schema is correct, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaAssembleByXSI(xmlSchemaValidCtxtPtr vctxt)
-{
-    const xmlChar *cur, *end;
-    const xmlChar *nsname = NULL, *location;
-    int count = 0;
-    int ret = 0;
-    xmlSchemaAttrInfoPtr iattr;
-
-    /*
-    * Parse the value; we will assume an even number of values
-    * to be given (this is how Xerces and XSV work).
-    *
-    * URGENT TODO: !! This needs to work for both
-    * @noNamespaceSchemaLocation AND @schemaLocation on the same
-    * element !!
-    */
-    iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-	XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC);
-    if (iattr == NULL)
-	iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-	XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC);
-    if (iattr == NULL)
-	return (0);
-    cur = iattr->value;
-    do {
-	/*
-	* TODO: Move the string parsing mechanism away from here.
-	*/
-	if (iattr->metaType == XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC) {
-	    /*
-	    * Get the namespace name.
-	    */
-	    while (IS_BLANK_CH(*cur))
-		cur++;
-	    end = cur;
-	    while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-		end++;
-	    if (end == cur)
-		break;
-	    count++; /* TODO: Don't use the schema's dict. */
-	    nsname = xmlDictLookup(vctxt->schema->dict, cur, end - cur);
-	    cur = end;
-	}
-	/*
-	* Get the URI.
-	*/
-	while (IS_BLANK_CH(*cur))
-	    cur++;
-	end = cur;
-	while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-	    end++;
-	if (end == cur) {
-	    if (iattr->metaType ==
-		XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC)
-	    {
-		/*
-		* If using @schemaLocation then tuples are expected.
-		* I.e. the namespace name *and* the document's URI.
-		*/
-		xmlSchemaCustomWarning(ACTXT_CAST vctxt, XML_SCHEMAV_MISC,
-		    iattr->node, NULL,
-		    "The value must consist of tuples: the target namespace "
-		    "name and the document's URI", NULL, NULL, NULL);
-	    }
-	    break;
-	}
-	count++; /* TODO: Don't use the schema's dict. */
-	location = xmlDictLookup(vctxt->schema->dict, cur, end - cur);
-	cur = end;
-	ret = xmlSchemaAssembleByLocation(vctxt, vctxt->schema,
-	    iattr->node, nsname, location);
-	if (ret == -1) {
-	    VERROR_INT("xmlSchemaAssembleByXSI",
-		"assembling schemata");
-	    return (-1);
-	}
-    } while (*cur != 0);
-    return (ret);
-}
-
-static const xmlChar *
-xmlSchemaLookupNamespace(xmlSchemaValidCtxtPtr vctxt,
-			 const xmlChar *prefix)
-{
-    if (vctxt->sax != NULL) {
-	int i, j;
-	xmlSchemaNodeInfoPtr inode;
-
-	for (i = vctxt->depth; i >= 0; i--) {
-	    if (vctxt->elemInfos[i]->nbNsBindings != 0) {
-		inode = vctxt->elemInfos[i];
-		for (j = 0; j < inode->nbNsBindings * 2; j += 2) {
-		    if (((prefix == NULL) &&
-			    (inode->nsBindings[j] == NULL)) ||
-			((prefix != NULL) && xmlStrEqual(prefix,
-			    inode->nsBindings[j]))) {
-
-			/*
-			* Note that the namespace bindings are already
-			* in a string dict.
-			*/
-			return (inode->nsBindings[j+1]);
-		    }
-		}
-	    }
-	}
-	return (NULL);
-#ifdef LIBXML_READER_ENABLED
-    } else if (vctxt->reader != NULL) {
-	xmlChar *nsName;
-
-	nsName = xmlTextReaderLookupNamespace(vctxt->reader, prefix);
-	if (nsName != NULL) {
-	    const xmlChar *ret;
-
-	    ret = xmlDictLookup(vctxt->dict, nsName, -1);
-	    xmlFree(nsName);
-	    return (ret);
-	} else
-	    return (NULL);
-#endif
-    } else {
-	xmlNsPtr ns;
-
-	if ((vctxt->inode->node == NULL) ||
-	    (vctxt->inode->node->doc == NULL)) {
-	    VERROR_INT("xmlSchemaLookupNamespace",
-		"no node or node's doc avaliable");
-	    return (NULL);
-	}
-	ns = xmlSearchNs(vctxt->inode->node->doc,
-	    vctxt->inode->node, prefix);
-	if (ns != NULL)
-	    return (ns->href);
-	return (NULL);
-    }
-}
-
-/*
-* This one works on the schema of the validation context.
-*/
-static int
-xmlSchemaValidateNotation(xmlSchemaValidCtxtPtr vctxt,
-			  xmlSchemaPtr schema,
-			  xmlNodePtr node,
-			  const xmlChar *value,
-			  xmlSchemaValPtr *val,
-			  int valNeeded)
-{
-    int ret;
-
-    if (vctxt && (vctxt->schema == NULL)) {
-	VERROR_INT("xmlSchemaValidateNotation",
-	    "a schema is needed on the validation context");
-	return (-1);
-    }
-    ret = xmlValidateQName(value, 1);
-    if (ret != 0)
-	return (ret);
-    {
-	xmlChar *localName = NULL;
-	xmlChar *prefix = NULL;
-
-	localName = xmlSplitQName2(value, &prefix);
-	if (prefix != NULL) {
-	    const xmlChar *nsName = NULL;
-
-	    if (vctxt != NULL)
-		nsName = xmlSchemaLookupNamespace(vctxt, BAD_CAST prefix);
-	    else if (node != NULL) {
-		xmlNsPtr ns = xmlSearchNs(node->doc, node, prefix);
-		if (ns != NULL)
-		    nsName = ns->href;
-	    } else {
-		xmlFree(prefix);
-		xmlFree(localName);
-		return (1);
-	    }
-	    if (nsName == NULL) {
-		xmlFree(prefix);
-		xmlFree(localName);
-		return (1);
-	    }
-	    if (xmlSchemaGetNotation(schema, localName, nsName) != NULL) {
-		if ((valNeeded) && (val != NULL)) {
-		    (*val) = xmlSchemaNewNOTATIONValue(xmlStrdup(localName),
-						       xmlStrdup(nsName));
-		    if (*val == NULL)
-			ret = -1;
-		}
-	    } else
-		ret = 1;
-	    xmlFree(prefix);
-	    xmlFree(localName);
-	} else {
-	    if (xmlSchemaGetNotation(schema, value, NULL) != NULL) {
-		if (valNeeded && (val != NULL)) {
-		    (*val) = xmlSchemaNewNOTATIONValue(
-			BAD_CAST xmlStrdup(value), NULL);
-		    if (*val == NULL)
-			ret = -1;
-		}
-	    } else
-		return (1);
-	}
-    }
-    return (ret);
-}
-
-static int
-xmlSchemaVAddNodeQName(xmlSchemaValidCtxtPtr vctxt,
-		       const xmlChar* lname,
-		       const xmlChar* nsname)
-{
-    int i;
-
-    lname = xmlDictLookup(vctxt->dict, lname, -1);
-    if (lname == NULL)
-	return(-1);
-    if (nsname != NULL) {
-	nsname = xmlDictLookup(vctxt->dict, nsname, -1);
-	if (nsname == NULL)
-	    return(-1);
-    }
-    for (i = 0; i < vctxt->nodeQNames->nbItems; i += 2) {
-	if ((vctxt->nodeQNames->items [i] == lname) &&
-	    (vctxt->nodeQNames->items[i +1] == nsname))
-	    /* Already there */
-	    return(i);
-    }
-    /* Add new entry. */
-    i = vctxt->nodeQNames->nbItems;
-    xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) lname);
-    xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) nsname);
-    return(i);
-}
-
-/************************************************************************
- *									*
- *  Validation of identity-constraints (IDC)                            *
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaAugmentIDC:
- * @idcDef: the IDC definition
- *
- * Creates an augmented IDC definition item.
- *
- * Returns the item, or NULL on internal errors.
- */
-static void
-xmlSchemaAugmentIDC(xmlSchemaIDCPtr idcDef,
-		    xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaIDCAugPtr aidc;
-
-    aidc = (xmlSchemaIDCAugPtr) xmlMalloc(sizeof(xmlSchemaIDCAug));
-    if (aidc == NULL) {
-	xmlSchemaVErrMemory(vctxt,
-	    "xmlSchemaAugmentIDC: allocating an augmented IDC definition",
-	    NULL);
-	return;
-    }
-    aidc->keyrefDepth = -1;
-    aidc->def = idcDef;
-    aidc->next = NULL;
-    if (vctxt->aidcs == NULL)
-	vctxt->aidcs = aidc;
-    else {
-	aidc->next = vctxt->aidcs;
-	vctxt->aidcs = aidc;
-    }
-    /*
-    * Save if we have keyrefs at all.
-    */
-    if ((vctxt->hasKeyrefs == 0) &&
-	(idcDef->type == XML_SCHEMA_TYPE_IDC_KEYREF))
-	vctxt->hasKeyrefs = 1;
-}
-
-/**
- * xmlSchemaAugmentImportedIDC:
- * @imported: the imported schema
- *
- * Creates an augmented IDC definition for the imported schema.
- */
-static void
-xmlSchemaAugmentImportedIDC(xmlSchemaImportPtr imported, xmlSchemaValidCtxtPtr vctxt) {
-    if (imported->schema->idcDef != NULL) {
-	    xmlHashScan(imported->schema->idcDef ,
-	    (xmlHashScanner) xmlSchemaAugmentIDC, vctxt);
-    }
-}
-
-/**
- * xmlSchemaIDCNewBinding:
- * @idcDef: the IDC definition of this binding
- *
- * Creates a new IDC binding.
- *
- * Returns the new IDC binding, NULL on internal errors.
- */
-static xmlSchemaPSVIIDCBindingPtr
-xmlSchemaIDCNewBinding(xmlSchemaIDCPtr idcDef)
-{
-    xmlSchemaPSVIIDCBindingPtr ret;
-
-    ret = (xmlSchemaPSVIIDCBindingPtr) xmlMalloc(
-	    sizeof(xmlSchemaPSVIIDCBinding));
-    if (ret == NULL) {
-	xmlSchemaVErrMemory(NULL,
-	    "allocating a PSVI IDC binding item", NULL);
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaPSVIIDCBinding));
-    ret->definition = idcDef;
-    return (ret);
-}
-
-/**
- * xmlSchemaIDCStoreNodeTableItem:
- * @vctxt: the WXS validation context
- * @item: the IDC node table item
- *
- * The validation context is used to store IDC node table items.
- * They are stored to avoid copying them if IDC node-tables are merged
- * with corresponding parent IDC node-tables (bubbling).
- *
- * Returns 0 if succeeded, -1 on internal errors.
- */
-static int
-xmlSchemaIDCStoreNodeTableItem(xmlSchemaValidCtxtPtr vctxt,
-			       xmlSchemaPSVIIDCNodePtr item)
-{
-    /*
-    * Add to gobal list.
-    */
-    if (vctxt->idcNodes == NULL) {
-	vctxt->idcNodes = (xmlSchemaPSVIIDCNodePtr *)
-	    xmlMalloc(20 * sizeof(xmlSchemaPSVIIDCNodePtr));
-	if (vctxt->idcNodes == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"allocating the IDC node table item list", NULL);
-	    return (-1);
-	}
-	vctxt->sizeIdcNodes = 20;
-    } else if (vctxt->sizeIdcNodes <= vctxt->nbIdcNodes) {
-	vctxt->sizeIdcNodes *= 2;
-	vctxt->idcNodes = (xmlSchemaPSVIIDCNodePtr *)
-	    xmlRealloc(vctxt->idcNodes, vctxt->sizeIdcNodes *
-	    sizeof(xmlSchemaPSVIIDCNodePtr));
-	if (vctxt->idcNodes == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"re-allocating the IDC node table item list", NULL);
-	    return (-1);
-	}
-    }
-    vctxt->idcNodes[vctxt->nbIdcNodes++] = item;
-
-    return (0);
-}
-
-/**
- * xmlSchemaIDCStoreKey:
- * @vctxt: the WXS validation context
- * @item: the IDC key
- *
- * The validation context is used to store an IDC key.
- *
- * Returns 0 if succeeded, -1 on internal errors.
- */
-static int
-xmlSchemaIDCStoreKey(xmlSchemaValidCtxtPtr vctxt,
-		     xmlSchemaPSVIIDCKeyPtr key)
-{
-    /*
-    * Add to gobal list.
-    */
-    if (vctxt->idcKeys == NULL) {
-	vctxt->idcKeys = (xmlSchemaPSVIIDCKeyPtr *)
-	    xmlMalloc(40 * sizeof(xmlSchemaPSVIIDCKeyPtr));
-	if (vctxt->idcKeys == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"allocating the IDC key storage list", NULL);
-	    return (-1);
-	}
-	vctxt->sizeIdcKeys = 40;
-    } else if (vctxt->sizeIdcKeys <= vctxt->nbIdcKeys) {
-	vctxt->sizeIdcKeys *= 2;
-	vctxt->idcKeys = (xmlSchemaPSVIIDCKeyPtr *)
-	    xmlRealloc(vctxt->idcKeys, vctxt->sizeIdcKeys *
-	    sizeof(xmlSchemaPSVIIDCKeyPtr));
-	if (vctxt->idcKeys == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"re-allocating the IDC key storage list", NULL);
-	    return (-1);
-	}
-    }
-    vctxt->idcKeys[vctxt->nbIdcKeys++] = key;
-
-    return (0);
-}
-
-/**
- * xmlSchemaIDCAppendNodeTableItem:
- * @bind: the IDC binding
- * @ntItem: the node-table item
- *
- * Appends the IDC node-table item to the binding.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaIDCAppendNodeTableItem(xmlSchemaPSVIIDCBindingPtr bind,
-				xmlSchemaPSVIIDCNodePtr ntItem)
-{
-    if (bind->nodeTable == NULL) {
-	bind->sizeNodes = 10;
-	bind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
-	    xmlMalloc(10 * sizeof(xmlSchemaPSVIIDCNodePtr));
-	if (bind->nodeTable == NULL) {
-	    xmlSchemaVErrMemory(NULL,
-		"allocating an array of IDC node-table items", NULL);
-	    return(-1);
-	}
-    } else if (bind->sizeNodes <= bind->nbNodes) {
-	bind->sizeNodes *= 2;
-	bind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
-	    xmlRealloc(bind->nodeTable, bind->sizeNodes *
-		sizeof(xmlSchemaPSVIIDCNodePtr));
-	if (bind->nodeTable == NULL) {
-	    xmlSchemaVErrMemory(NULL,
-		"re-allocating an array of IDC node-table items", NULL);
-	    return(-1);
-	}
-    }
-    bind->nodeTable[bind->nbNodes++] = ntItem;
-    return(0);
-}
-
-/**
- * xmlSchemaIDCAcquireBinding:
- * @vctxt: the WXS validation context
- * @matcher: the IDC matcher
- *
- * Looks up an PSVI IDC binding, for the IDC definition and
- * of the given matcher. If none found, a new one is created
- * and added to the IDC table.
- *
- * Returns an IDC binding or NULL on internal errors.
- */
-static xmlSchemaPSVIIDCBindingPtr
-xmlSchemaIDCAcquireBinding(xmlSchemaValidCtxtPtr vctxt,
-			  xmlSchemaIDCMatcherPtr matcher)
-{
-    xmlSchemaNodeInfoPtr ielem;
-
-    ielem = vctxt->elemInfos[matcher->depth];
-
-    if (ielem->idcTable == NULL) {
-	ielem->idcTable = xmlSchemaIDCNewBinding(matcher->aidc->def);
-	if (ielem->idcTable == NULL)
-	    return (NULL);
-	return(ielem->idcTable);
-    } else {
-	xmlSchemaPSVIIDCBindingPtr bind = NULL;
-
-	bind = ielem->idcTable;
-	do {
-	    if (bind->definition == matcher->aidc->def)
-		return(bind);
-	    if (bind->next == NULL) {
-		bind->next = xmlSchemaIDCNewBinding(matcher->aidc->def);
-		if (bind->next == NULL)
-		    return (NULL);
-		return(bind->next);
-	    }
-	    bind = bind->next;
-	} while (bind != NULL);
-    }
-    return (NULL);
-}
-
-static xmlSchemaItemListPtr
-xmlSchemaIDCAcquireTargetList(xmlSchemaValidCtxtPtr vctxt ATTRIBUTE_UNUSED,
-			     xmlSchemaIDCMatcherPtr matcher)
-{
-    if (matcher->targets == NULL)
-	matcher->targets = xmlSchemaItemListCreate();
-    return(matcher->targets);
-}
-
-/**
- * xmlSchemaIDCFreeKey:
- * @key: the IDC key
- *
- * Frees an IDC key together with its compiled value.
- */
-static void
-xmlSchemaIDCFreeKey(xmlSchemaPSVIIDCKeyPtr key)
-{
-    if (key->val != NULL)
-	xmlSchemaFreeValue(key->val);
-    xmlFree(key);
-}
-
-/**
- * xmlSchemaIDCFreeBinding:
- *
- * Frees an IDC binding. Note that the node table-items
- * are not freed.
- */
-static void
-xmlSchemaIDCFreeBinding(xmlSchemaPSVIIDCBindingPtr bind)
-{
-    if (bind->nodeTable != NULL)
-	xmlFree(bind->nodeTable);
-    if (bind->dupls != NULL)
-	xmlSchemaItemListFree(bind->dupls);
-    xmlFree(bind);
-}
-
-/**
- * xmlSchemaIDCFreeIDCTable:
- * @bind: the first IDC binding in the list
- *
- * Frees an IDC table, i.e. all the IDC bindings in the list.
- */
-static void
-xmlSchemaIDCFreeIDCTable(xmlSchemaPSVIIDCBindingPtr bind)
-{
-    xmlSchemaPSVIIDCBindingPtr prev;
-
-    while (bind != NULL) {
-	prev = bind;
-	bind = bind->next;
-	xmlSchemaIDCFreeBinding(prev);
-    }
-}
-
-/**
- * xmlSchemaIDCFreeMatcherList:
- * @matcher: the first IDC matcher in the list
- *
- * Frees a list of IDC matchers.
- */
-static void
-xmlSchemaIDCFreeMatcherList(xmlSchemaIDCMatcherPtr matcher)
-{
-    xmlSchemaIDCMatcherPtr next;
-
-    while (matcher != NULL) {
-	next = matcher->next;
-	if (matcher->keySeqs != NULL) {
-	    int i;
-	    for (i = 0; i < matcher->sizeKeySeqs; i++)
-		if (matcher->keySeqs[i] != NULL)
-		    xmlFree(matcher->keySeqs[i]);
-	    xmlFree(matcher->keySeqs);
-	}
-	if (matcher->targets != NULL) {
-	    if (matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) {
-		int i;
-		xmlSchemaPSVIIDCNodePtr idcNode;
-		/*
-		* Node-table items for keyrefs are not stored globally
-		* to the validation context, since they are not bubbled.
-		* We need to free them here.
-		*/
-		for (i = 0; i < matcher->targets->nbItems; i++) {
-		    idcNode =
-			(xmlSchemaPSVIIDCNodePtr) matcher->targets->items[i];
-		    xmlFree(idcNode->keys);
-		    xmlFree(idcNode);
-		}
-	    }
-	    xmlSchemaItemListFree(matcher->targets);
-	}
-	xmlFree(matcher);
-	matcher = next;
-    }
-}
-
-/**
- * xmlSchemaIDCReleaseMatcherList:
- * @vctxt: the WXS validation context
- * @matcher: the first IDC matcher in the list
- *
- * Caches a list of IDC matchers for reuse.
- */
-static void
-xmlSchemaIDCReleaseMatcherList(xmlSchemaValidCtxtPtr vctxt,
-			       xmlSchemaIDCMatcherPtr matcher)
-{
-    xmlSchemaIDCMatcherPtr next;
-
-    while (matcher != NULL) {
-	next = matcher->next;
-	if (matcher->keySeqs != NULL) {
-	    int i;
-	    /*
-	    * Don't free the array, but only the content.
-	    */
-	    for (i = 0; i < matcher->sizeKeySeqs; i++)
-		if (matcher->keySeqs[i] != NULL) {
-		    xmlFree(matcher->keySeqs[i]);
-		    matcher->keySeqs[i] = NULL;
-		}
-	}
-	if (matcher->targets) {
-	    if (matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) {
-		int i;
-		xmlSchemaPSVIIDCNodePtr idcNode;
-		/*
-		* Node-table items for keyrefs are not stored globally
-		* to the validation context, since they are not bubbled.
-		* We need to free them here.
-		*/
-		for (i = 0; i < matcher->targets->nbItems; i++) {
-		    idcNode =
-			(xmlSchemaPSVIIDCNodePtr) matcher->targets->items[i];
-		    xmlFree(idcNode->keys);
-		    xmlFree(idcNode);
-		}
-	    }
-	    xmlSchemaItemListFree(matcher->targets);
-	    matcher->targets = NULL;
-	}
-	matcher->next = NULL;
-	/*
-	* Cache the matcher.
-	*/
-	if (vctxt->idcMatcherCache != NULL)
-	    matcher->nextCached = vctxt->idcMatcherCache;
-	vctxt->idcMatcherCache = matcher;
-
-	matcher = next;
-    }
-}
-
-/**
- * xmlSchemaIDCAddStateObject:
- * @vctxt: the WXS validation context
- * @matcher: the IDC matcher
- * @sel: the XPath information
- * @parent: the parent "selector" state object if any
- * @type: "selector" or "field"
- *
- * Creates/reuses and activates state objects for the given
- * XPath information; if the XPath expression consists of unions,
- * multiple state objects are created for every unioned expression.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaIDCAddStateObject(xmlSchemaValidCtxtPtr vctxt,
-			xmlSchemaIDCMatcherPtr matcher,
-			xmlSchemaIDCSelectPtr sel,
-			int type)
-{
-    xmlSchemaIDCStateObjPtr sto;
-
-    /*
-    * Reuse the state objects from the pool.
-    */
-    if (vctxt->xpathStatePool != NULL) {
-	sto = vctxt->xpathStatePool;
-	vctxt->xpathStatePool = sto->next;
-	sto->next = NULL;
-    } else {
-	/*
-	* Create a new state object.
-	*/
-	sto = (xmlSchemaIDCStateObjPtr) xmlMalloc(sizeof(xmlSchemaIDCStateObj));
-	if (sto == NULL) {
-	    xmlSchemaVErrMemory(NULL,
-		"allocating an IDC state object", NULL);
-	    return (-1);
-	}
-	memset(sto, 0, sizeof(xmlSchemaIDCStateObj));
-    }
-    /*
-    * Add to global list.
-    */
-    if (vctxt->xpathStates != NULL)
-	sto->next = vctxt->xpathStates;
-    vctxt->xpathStates = sto;
-
-    /*
-    * Free the old xpath validation context.
-    */
-    if (sto->xpathCtxt != NULL)
-	xmlFreeStreamCtxt((xmlStreamCtxtPtr) sto->xpathCtxt);
-
-    /*
-    * Create a new XPath (pattern) validation context.
-    */
-    sto->xpathCtxt = (void *) xmlPatternGetStreamCtxt(
-	(xmlPatternPtr) sel->xpathComp);
-    if (sto->xpathCtxt == NULL) {
-	VERROR_INT("xmlSchemaIDCAddStateObject",
-	    "failed to create an XPath validation context");
-	return (-1);
-    }
-    sto->type = type;
-    sto->depth = vctxt->depth;
-    sto->matcher = matcher;
-    sto->sel = sel;
-    sto->nbHistory = 0;
-
-#ifdef DEBUG_IDC
-    xmlGenericError(xmlGenericErrorContext, "IDC:   STO push '%s'\n",
-	sto->sel->xpath);
-#endif
-    return (0);
-}
-
-/**
- * xmlSchemaXPathEvaluate:
- * @vctxt: the WXS validation context
- * @nodeType: the nodeType of the current node
- *
- * Evaluates all active XPath state objects.
- *
- * Returns the number of IC "field" state objects which resolved to
- * this node, 0 if none resolved and -1 on internal errors.
- */
-static int
-xmlSchemaXPathEvaluate(xmlSchemaValidCtxtPtr vctxt,
-		       xmlElementType nodeType)
-{
-    xmlSchemaIDCStateObjPtr sto, head = NULL, first;
-    int res, resolved = 0, depth = vctxt->depth;
-
-    if (vctxt->xpathStates == NULL)
-	return (0);
-
-    if (nodeType == XML_ATTRIBUTE_NODE)
-	depth++;
-#ifdef DEBUG_IDC
-    {
-	xmlChar *str = NULL;
-	xmlGenericError(xmlGenericErrorContext,
-	    "IDC: EVAL on %s, depth %d, type %d\n",
-	    xmlSchemaFormatQName(&str, vctxt->inode->nsName,
-		vctxt->inode->localName), depth, nodeType);
-	FREE_AND_NULL(str)
-    }
-#endif
-    /*
-    * Process all active XPath state objects.
-    */
-    first = vctxt->xpathStates;
-    sto = first;
-    while (sto != head) {
-#ifdef DEBUG_IDC
-	if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR)
-	    xmlGenericError(xmlGenericErrorContext, "IDC:   ['%s'] selector '%s'\n",
-		sto->matcher->aidc->def->name, sto->sel->xpath);
-	else
-	    xmlGenericError(xmlGenericErrorContext, "IDC:   ['%s'] field '%s'\n",
-		sto->matcher->aidc->def->name, sto->sel->xpath);
-#endif
-	if (nodeType == XML_ELEMENT_NODE)
-	    res = xmlStreamPush((xmlStreamCtxtPtr) sto->xpathCtxt,
-		vctxt->inode->localName, vctxt->inode->nsName);
-	else
-	    res = xmlStreamPushAttr((xmlStreamCtxtPtr) sto->xpathCtxt,
-		vctxt->inode->localName, vctxt->inode->nsName);
-
-	if (res == -1) {
-	    VERROR_INT("xmlSchemaXPathEvaluate",
-		"calling xmlStreamPush()");
-	    return (-1);
-	}
-	if (res == 0)
-	    goto next_sto;
-	/*
-	* Full match.
-	*/
-#ifdef DEBUG_IDC
-	xmlGenericError(xmlGenericErrorContext, "IDC:     "
-	    "MATCH\n");
-#endif
-	/*
-	* Register a match in the state object history.
-	*/
-	if (sto->history == NULL) {
-	    sto->history = (int *) xmlMalloc(5 * sizeof(int));
-	    if (sto->history == NULL) {
-		xmlSchemaVErrMemory(NULL,
-		    "allocating the state object history", NULL);
-		return(-1);
-	    }
-	    sto->sizeHistory = 5;
-	} else if (sto->sizeHistory <= sto->nbHistory) {
-	    sto->sizeHistory *= 2;
-	    sto->history = (int *) xmlRealloc(sto->history,
-		sto->sizeHistory * sizeof(int));
-	    if (sto->history == NULL) {
-		xmlSchemaVErrMemory(NULL,
-		    "re-allocating the state object history", NULL);
-		return(-1);
-	    }
-	}
-	sto->history[sto->nbHistory++] = depth;
-
-#ifdef DEBUG_IDC
-	xmlGenericError(xmlGenericErrorContext, "IDC:       push match '%d'\n",
-	    vctxt->depth);
-#endif
-
-	if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) {
-	    xmlSchemaIDCSelectPtr sel;
-	    /*
-	    * Activate state objects for the IDC fields of
-	    * the IDC selector.
-	    */
-#ifdef DEBUG_IDC
-	    xmlGenericError(xmlGenericErrorContext, "IDC:     "
-		"activating field states\n");
-#endif
-	    sel = sto->matcher->aidc->def->fields;
-	    while (sel != NULL) {
-		if (xmlSchemaIDCAddStateObject(vctxt, sto->matcher,
-		    sel, XPATH_STATE_OBJ_TYPE_IDC_FIELD) == -1)
-		    return (-1);
-		sel = sel->next;
-	    }
-	} else if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_FIELD) {
-	    /*
-	    * An IDC key node was found by the IDC field.
-	    */
-#ifdef DEBUG_IDC
-	    xmlGenericError(xmlGenericErrorContext,
-		"IDC:     key found\n");
-#endif
-	    /*
-	    * Notify that the character value of this node is
-	    * needed.
-	    */
-	    if (resolved == 0) {
-		if ((vctxt->inode->flags &
-		    XML_SCHEMA_NODE_INFO_VALUE_NEEDED) == 0)
-		vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED;
-	    }
-	    resolved++;
-	}
-next_sto:
-	if (sto->next == NULL) {
-	    /*
-	    * Evaluate field state objects created on this node as well.
-	    */
-	    head = first;
-	    sto = vctxt->xpathStates;
-	} else
-	    sto = sto->next;
-    }
-    return (resolved);
-}
-
-static const xmlChar *
-xmlSchemaFormatIDCKeySequence(xmlSchemaValidCtxtPtr vctxt,
-			      xmlChar **buf,
-			      xmlSchemaPSVIIDCKeyPtr *seq,
-			      int count)
-{
-    int i, res;
-    xmlChar *value = NULL;
-
-    *buf = xmlStrdup(BAD_CAST "[");
-    for (i = 0; i < count; i++) {
-	*buf = xmlStrcat(*buf, BAD_CAST "'");
-	res = xmlSchemaGetCanonValueWhtspExt(seq[i]->val,
-	    xmlSchemaGetWhiteSpaceFacetValue(seq[i]->type),
-	    &value);
-	if (res == 0)
-	    *buf = xmlStrcat(*buf, BAD_CAST value);
-	else {
-	    VERROR_INT("xmlSchemaFormatIDCKeySequence",
-		"failed to compute a canonical value");
-	    *buf = xmlStrcat(*buf, BAD_CAST "???");
-	}
-	if (i < count -1)
-	    *buf = xmlStrcat(*buf, BAD_CAST "', ");
-	else
-	    *buf = xmlStrcat(*buf, BAD_CAST "'");
-	if (value != NULL) {
-	    xmlFree(value);
-	    value = NULL;
-	}
-    }
-    *buf = xmlStrcat(*buf, BAD_CAST "]");
-
-    return (BAD_CAST *buf);
-}
-
-/**
- * xmlSchemaXPathPop:
- * @vctxt: the WXS validation context
- *
- * Pops all XPath states.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaXPathPop(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaIDCStateObjPtr sto;
-    int res;
-
-    if (vctxt->xpathStates == NULL)
-	return(0);
-    sto = vctxt->xpathStates;
-    do {
-	res = xmlStreamPop((xmlStreamCtxtPtr) sto->xpathCtxt);
-	if (res == -1)
-	    return (-1);
-	sto = sto->next;
-    } while (sto != NULL);
-    return(0);
-}
-
-/**
- * xmlSchemaXPathProcessHistory:
- * @vctxt: the WXS validation context
- * @type: the simple/complex type of the current node if any at all
- * @val: the precompiled value
- *
- * Processes and pops the history items of the IDC state objects.
- * IDC key-sequences are validated/created on IDC bindings.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaXPathProcessHistory(xmlSchemaValidCtxtPtr vctxt,
-			     int depth)
-{
-    xmlSchemaIDCStateObjPtr sto, nextsto;
-    int res, matchDepth;
-    xmlSchemaPSVIIDCKeyPtr key = NULL;
-    xmlSchemaTypePtr type = vctxt->inode->typeDef, simpleType = NULL;
-
-    if (vctxt->xpathStates == NULL)
-	return (0);
-    sto = vctxt->xpathStates;
-
-#ifdef DEBUG_IDC
-    {
-	xmlChar *str = NULL;
-	xmlGenericError(xmlGenericErrorContext,
-	    "IDC: BACK on %s, depth %d\n",
-	    xmlSchemaFormatQName(&str, vctxt->inode->nsName,
-		vctxt->inode->localName), vctxt->depth);
-	FREE_AND_NULL(str)
-    }
-#endif
-    /*
-    * Evaluate the state objects.
-    */
-    while (sto != NULL) {
-	res = xmlStreamPop((xmlStreamCtxtPtr) sto->xpathCtxt);
-	if (res == -1) {
-	    VERROR_INT("xmlSchemaXPathProcessHistory",
-		"calling xmlStreamPop()");
-	    return (-1);
-	}
-#ifdef DEBUG_IDC
-	xmlGenericError(xmlGenericErrorContext, "IDC:   stream pop '%s'\n",
-	    sto->sel->xpath);
-#endif
-	if (sto->nbHistory == 0)
-	    goto deregister_check;
-
-	matchDepth = sto->history[sto->nbHistory -1];
-
-	/*
-	* Only matches at the current depth are of interest.
-	*/
-	if (matchDepth != depth) {
-	    sto = sto->next;
-	    continue;
-	}
-	if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_FIELD) {
-	    /*
-	    * NOTE: According to
-	    *   http://www.w3.org/Bugs/Public/show_bug.cgi?id=2198
-	    *   ... the simple-content of complex types is also allowed.
-	    */
-
-	    if (WXS_IS_COMPLEX(type)) {
-		if (WXS_HAS_SIMPLE_CONTENT(type)) {
-		    /*
-		    * Sanity check for complex types with simple content.
-		    */
-		    simpleType = type->contentTypeDef;
-		    if (simpleType == NULL) {
-			VERROR_INT("xmlSchemaXPathProcessHistory",
-			    "field resolves to a CT with simple content "
-			    "but the CT is missing the ST definition");
-			return (-1);
-		    }
-		} else
-		    simpleType = NULL;
-	    } else
-		simpleType = type;
-	    if (simpleType == NULL) {
-		xmlChar *str = NULL;
-
-		/*
-		* Not qualified if the field resolves to a node of non
-		* simple type.
-		*/
-		xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_CVC_IDC, NULL,
-		    WXS_BASIC_CAST sto->matcher->aidc->def,
-		    "The XPath '%s' of a field of %s does evaluate to a node of "
-		    "non-simple type",
-		    sto->sel->xpath,
-		    xmlSchemaGetIDCDesignation(&str, sto->matcher->aidc->def));
-		FREE_AND_NULL(str);
-		sto->nbHistory--;
-		goto deregister_check;
-	    }
-
-	    if ((key == NULL) && (vctxt->inode->val == NULL)) {
-		/*
-		* Failed to provide the normalized value; maybe
-		* the value was invalid.
-		*/
-		VERROR(XML_SCHEMAV_CVC_IDC,
-		    WXS_BASIC_CAST sto->matcher->aidc->def,
-		    "Warning: No precomputed value available, the value "
-		    "was either invalid or something strange happend");
-		sto->nbHistory--;
-		goto deregister_check;
-	    } else {
-		xmlSchemaIDCMatcherPtr matcher = sto->matcher;
-		xmlSchemaPSVIIDCKeyPtr *keySeq;
-		int pos, idx;
-
-		/*
-		* The key will be anchored on the matcher's list of
-		* key-sequences. The position in this list is determined
-		* by the target node's depth relative to the matcher's
-		* depth of creation (i.e. the depth of the scope element).
-		*
-		* Element        Depth    Pos   List-entries
-		* <scope>          0              NULL
-		*   <bar>          1              NULL
-		*     <target/>    2       2      target
-		*   <bar>
-                * </scope>
-		*
-		* The size of the list is only dependant on the depth of
-		* the tree.
-		* An entry will be NULLed in selector_leave, i.e. when
-		* we hit the target's
-		*/
-		pos = sto->depth - matcher->depth;
-		idx = sto->sel->index;
-
-		/*
-		* Create/grow the array of key-sequences.
-		*/
-		if (matcher->keySeqs == NULL) {
-		    if (pos > 9)
-			matcher->sizeKeySeqs = pos * 2;
-		    else
-			matcher->sizeKeySeqs = 10;
-		    matcher->keySeqs = (xmlSchemaPSVIIDCKeyPtr **)
-			xmlMalloc(matcher->sizeKeySeqs *
-			sizeof(xmlSchemaPSVIIDCKeyPtr *));
-		    if (matcher->keySeqs == NULL) {
-			xmlSchemaVErrMemory(NULL,
-			    "allocating an array of key-sequences",
-			    NULL);
-			return(-1);
-		    }
-		    memset(matcher->keySeqs, 0,
-			matcher->sizeKeySeqs *
-			sizeof(xmlSchemaPSVIIDCKeyPtr *));
-		} else if (pos >= matcher->sizeKeySeqs) {
-		    int i = matcher->sizeKeySeqs;
-
-		    matcher->sizeKeySeqs *= 2;
-		    matcher->keySeqs = (xmlSchemaPSVIIDCKeyPtr **)
-			xmlRealloc(matcher->keySeqs,
-			matcher->sizeKeySeqs *
-			sizeof(xmlSchemaPSVIIDCKeyPtr *));
-		    if (matcher->keySeqs == NULL) {
-			xmlSchemaVErrMemory(NULL,
-			    "reallocating an array of key-sequences",
-			    NULL);
-			return (-1);
-		    }
-		    /*
-		    * The array needs to be NULLed.
-		    * TODO: Use memset?
-		    */
-		    for (; i < matcher->sizeKeySeqs; i++)
-			matcher->keySeqs[i] = NULL;
-		}
-
-		/*
-		* Get/create the key-sequence.
-		*/
-		keySeq = matcher->keySeqs[pos];
-		if (keySeq == NULL) {
-		    goto create_sequence;
-		} else if (keySeq[idx] != NULL) {
-		    xmlChar *str = NULL;
-		    /*
-		    * cvc-identity-constraint:
-		    * 3 For each node in the `target node set` all
-		    * of the {fields}, with that node as the context
-		    * node, evaluate to either an empty node-set or
-		    * a node-set with exactly one member, which must
-		    * have a simple type.
-		    *
-		    * The key was already set; report an error.
-		    */
-		    xmlSchemaCustomErr(ACTXT_CAST vctxt,
-			XML_SCHEMAV_CVC_IDC, NULL,
-			WXS_BASIC_CAST matcher->aidc->def,
-			"The XPath '%s' of a field of %s evaluates to a "
-			"node-set with more than one member",
-			sto->sel->xpath,
-			xmlSchemaGetIDCDesignation(&str, matcher->aidc->def));
-		    FREE_AND_NULL(str);
-		    sto->nbHistory--;
-		    goto deregister_check;
-		} else
-		    goto create_key;
-
-create_sequence:
-		/*
-		* Create a key-sequence.
-		*/
-		keySeq = (xmlSchemaPSVIIDCKeyPtr *) xmlMalloc(
-		    matcher->aidc->def->nbFields *
-		    sizeof(xmlSchemaPSVIIDCKeyPtr));
-		if (keySeq == NULL) {
-		    xmlSchemaVErrMemory(NULL,
-			"allocating an IDC key-sequence", NULL);
-		    return(-1);
-		}
-		memset(keySeq, 0, matcher->aidc->def->nbFields *
-		    sizeof(xmlSchemaPSVIIDCKeyPtr));
-		matcher->keySeqs[pos] = keySeq;
-create_key:
-		/*
-		* Create a key once per node only.
-		*/
-		if (key == NULL) {
-		    key = (xmlSchemaPSVIIDCKeyPtr) xmlMalloc(
-			sizeof(xmlSchemaPSVIIDCKey));
-		    if (key == NULL) {
-			xmlSchemaVErrMemory(NULL,
-			    "allocating a IDC key", NULL);
-			xmlFree(keySeq);
-			matcher->keySeqs[pos] = NULL;
-			return(-1);
-		    }
-		    /*
-		    * Consume the compiled value.
-		    */
-		    key->type = simpleType;
-		    key->val = vctxt->inode->val;
-		    vctxt->inode->val = NULL;
-		    /*
-		    * Store the key in a global list.
-		    */
-		    if (xmlSchemaIDCStoreKey(vctxt, key) == -1) {
-			xmlSchemaIDCFreeKey(key);
-			return (-1);
-		    }
-		}
-		keySeq[idx] = key;
-	    }
-	} else if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) {
-
-	    xmlSchemaPSVIIDCKeyPtr **keySeq = NULL;
-	    /* xmlSchemaPSVIIDCBindingPtr bind; */
-	    xmlSchemaPSVIIDCNodePtr ntItem;
-	    xmlSchemaIDCMatcherPtr matcher;
-	    xmlSchemaIDCPtr idc;
-	    xmlSchemaItemListPtr targets;
-	    int pos, i, j, nbKeys;
-	    /*
-	    * Here we have the following scenario:
-	    * An IDC 'selector' state object resolved to a target node,
-	    * during the time this target node was in the
-	    * ancestor-or-self axis, the 'field' state object(s) looked
-	    * out for matching nodes to create a key-sequence for this
-	    * target node. Now we are back to this target node and need
-	    * to put the key-sequence, together with the target node
-	    * itself, into the node-table of the corresponding IDC
-	    * binding.
-	    */
-	    matcher = sto->matcher;
-	    idc = matcher->aidc->def;
-	    nbKeys = idc->nbFields;
-	    pos = depth - matcher->depth;
-	    /*
-	    * Check if the matcher has any key-sequences at all, plus
-	    * if it has a key-sequence for the current target node.
-	    */
-	    if ((matcher->keySeqs == NULL) ||
-		(matcher->sizeKeySeqs <= pos)) {
-		if (idc->type == XML_SCHEMA_TYPE_IDC_KEY)
-		    goto selector_key_error;
-		else
-		    goto selector_leave;
-	    }
-
-	    keySeq = &(matcher->keySeqs[pos]);
-	    if (*keySeq == NULL) {
-		if (idc->type == XML_SCHEMA_TYPE_IDC_KEY)
-		    goto selector_key_error;
-		else
-		    goto selector_leave;
-	    }
-
-	    for (i = 0; i < nbKeys; i++) {
-		if ((*keySeq)[i] == NULL) {
-		    /*
-		    * Not qualified, if not all fields did resolve.
-		    */
-		    if (idc->type == XML_SCHEMA_TYPE_IDC_KEY) {
-			/*
-			* All fields of a "key" IDC must resolve.
-			*/
-			goto selector_key_error;
-		    }
-		    goto selector_leave;
-		}
-	    }
-	    /*
-	    * All fields did resolve.
-	    */
-
-	    /*
-	    * 4.1 If the {identity-constraint category} is unique(/key),
-	    * then no two members of the `qualified node set` have
-	    * `key-sequences` whose members are pairwise equal, as
-	    * defined by Equal in [XML Schemas: Datatypes].
-	    *
-	    * Get the IDC binding from the matcher and check for
-	    * duplicate key-sequences.
-	    */
-#if 0
-	    bind = xmlSchemaIDCAcquireBinding(vctxt, matcher);
-#endif
-	    targets = xmlSchemaIDCAcquireTargetList(vctxt, matcher);
-	    if ((idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) &&
-		(targets->nbItems != 0)) {
-		xmlSchemaPSVIIDCKeyPtr ckey, bkey, *bkeySeq;
-
-		i = 0;
-		res = 0;
-		/*
-		* Compare the key-sequences, key by key.
-		*/
-		do {
-		    bkeySeq =
-			((xmlSchemaPSVIIDCNodePtr) targets->items[i])->keys;
-		    for (j = 0; j < nbKeys; j++) {
-			ckey = (*keySeq)[j];
-			bkey = bkeySeq[j];
-			res = xmlSchemaAreValuesEqual(ckey->val, bkey->val);
-			if (res == -1) {
-			    return (-1);
-			} else if (res == 0) {
-			    /*
-			    * One of the keys differs, so the key-sequence
-			    * won't be equal; get out.
-			    */
-			    break;
-			}
-		    }
-		    if (res == 1) {
-			/*
-			* Duplicate key-sequence found.
-			*/
-			break;
-		    }
-		    i++;
-		} while (i < targets->nbItems);
-		if (i != targets->nbItems) {
-		    xmlChar *str = NULL, *strB = NULL;
-		    /*
-		    * TODO: Try to report the key-sequence.
-		    */
-		    xmlSchemaCustomErr(ACTXT_CAST vctxt,
-			XML_SCHEMAV_CVC_IDC, NULL,
-			WXS_BASIC_CAST idc,
-			"Duplicate key-sequence %s in %s",
-			xmlSchemaFormatIDCKeySequence(vctxt, &str,
-			    (*keySeq), nbKeys),
-			xmlSchemaGetIDCDesignation(&strB, idc));
-		    FREE_AND_NULL(str);
-		    FREE_AND_NULL(strB);
-		    goto selector_leave;
-		}
-	    }
-	    /*
-	    * Add a node-table item to the IDC binding.
-	    */
-	    ntItem = (xmlSchemaPSVIIDCNodePtr) xmlMalloc(
-		sizeof(xmlSchemaPSVIIDCNode));
-	    if (ntItem == NULL) {
-		xmlSchemaVErrMemory(NULL,
-		    "allocating an IDC node-table item", NULL);
-		xmlFree(*keySeq);
-		*keySeq = NULL;
-		return(-1);
-	    }
-	    memset(ntItem, 0, sizeof(xmlSchemaPSVIIDCNode));
-
-	    /*
-	    * Store the node-table item in a global list.
-	    */
-	    if (idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) {
-		if (xmlSchemaIDCStoreNodeTableItem(vctxt, ntItem) == -1) {
-		    xmlFree(ntItem);
-		    xmlFree(*keySeq);
-		    *keySeq = NULL;
-		    return (-1);
-		}
-		ntItem->nodeQNameID = -1;
-	    } else {
-		/*
-		* Save a cached QName for this node on the IDC node, to be
-		* able to report it, even if the node is not saved.
-		*/
-		ntItem->nodeQNameID = xmlSchemaVAddNodeQName(vctxt,
-		    vctxt->inode->localName, vctxt->inode->nsName);
-		if (ntItem->nodeQNameID == -1) {
-		    xmlFree(ntItem);
-		    xmlFree(*keySeq);
-		    *keySeq = NULL;
-		    return (-1);
-		}
-	    }
-	    /*
-	    * Init the node-table item: Save the node, position and
-	    * consume the key-sequence.
-	    */
-	    ntItem->node = vctxt->node;
-	    ntItem->nodeLine = vctxt->inode->nodeLine;
-	    ntItem->keys = *keySeq;
-	    *keySeq = NULL;
-#if 0
-	    if (xmlSchemaIDCAppendNodeTableItem(bind, ntItem) == -1)
-#endif
-	    if (xmlSchemaItemListAdd(targets, ntItem) == -1) {
-		if (idc->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
-		    /*
-		    * Free the item, since keyref items won't be
-		    * put on a global list.
-		    */
-		    xmlFree(ntItem->keys);
-		    xmlFree(ntItem);
-		}
-		return (-1);
-	    }
-
-	    goto selector_leave;
-selector_key_error:
-	    {
-		xmlChar *str = NULL;
-		/*
-		* 4.2.1 (KEY) The `target node set` and the
-		* `qualified node set` are equal, that is, every
-		* member of the `target node set` is also a member
-		* of the `qualified node set` and vice versa.
-		*/
-		xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_CVC_IDC, NULL,
-		    WXS_BASIC_CAST idc,
-		    "Not all fields of %s evaluate to a node",
-		    xmlSchemaGetIDCDesignation(&str, idc), NULL);
-		FREE_AND_NULL(str);
-	    }
-selector_leave:
-	    /*
-	    * Free the key-sequence if not added to the IDC table.
-	    */
-	    if ((keySeq != NULL) && (*keySeq != NULL)) {
-		xmlFree(*keySeq);
-		*keySeq = NULL;
-	    }
-	} /* if selector */
-
-	sto->nbHistory--;
-
-deregister_check:
-	/*
-	* Deregister state objects if they reach the depth of creation.
-	*/
-	if ((sto->nbHistory == 0) && (sto->depth == depth)) {
-#ifdef DEBUG_IDC
-	    xmlGenericError(xmlGenericErrorContext, "IDC:   STO pop '%s'\n",
-		sto->sel->xpath);
-#endif
-	    if (vctxt->xpathStates != sto) {
-		VERROR_INT("xmlSchemaXPathProcessHistory",
-		    "The state object to be removed is not the first "
-		    "in the list");
-	    }
-	    nextsto = sto->next;
-	    /*
-	    * Unlink from the list of active XPath state objects.
-	    */
-	    vctxt->xpathStates = sto->next;
-	    sto->next = vctxt->xpathStatePool;
-	    /*
-	    * Link it to the pool of reusable state objects.
-	    */
-	    vctxt->xpathStatePool = sto;
-	    sto = nextsto;
-	} else
-	    sto = sto->next;
-    } /* while (sto != NULL) */
-    return (0);
-}
-
-/**
- * xmlSchemaIDCRegisterMatchers:
- * @vctxt: the WXS validation context
- * @elemDecl: the element declaration
- *
- * Creates helper objects to evaluate IDC selectors/fields
- * successively.
- *
- * Returns 0 if OK and -1 on internal errors.
- */
-static int
-xmlSchemaIDCRegisterMatchers(xmlSchemaValidCtxtPtr vctxt,
-			     xmlSchemaElementPtr elemDecl)
-{
-    xmlSchemaIDCMatcherPtr matcher, last = NULL;
-    xmlSchemaIDCPtr idc, refIdc;
-    xmlSchemaIDCAugPtr aidc;
-
-    idc = (xmlSchemaIDCPtr) elemDecl->idcs;
-    if (idc == NULL)
-	return (0);
-
-#ifdef DEBUG_IDC
-    {
-	xmlChar *str = NULL;
-	xmlGenericError(xmlGenericErrorContext,
-	    "IDC: REGISTER on %s, depth %d\n",
-	    (char *) xmlSchemaFormatQName(&str, vctxt->inode->nsName,
-		vctxt->inode->localName), vctxt->depth);
-	FREE_AND_NULL(str)
-    }
-#endif
-    if (vctxt->inode->idcMatchers != NULL) {
-	VERROR_INT("xmlSchemaIDCRegisterMatchers",
-	    "The chain of IDC matchers is expected to be empty");
-	return (-1);
-    }
-    do {
-	if (idc->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
-	    /*
-	    * Since IDCs bubbles are expensive we need to know the
-	    * depth at which the bubbles should stop; this will be
-	    * the depth of the top-most keyref IDC. If no keyref
-	    * references a key/unique IDC, the keyrefDepth will
-	    * be -1, indicating that no bubbles are needed.
-	    */
-	    refIdc = (xmlSchemaIDCPtr) idc->ref->item;
-	    if (refIdc != NULL) {
-		/*
-		* Remember that we have keyrefs on this node.
-		*/
-		vctxt->inode->hasKeyrefs = 1;
-		/*
-		* Lookup the referenced augmented IDC info.
-		*/
-		aidc = vctxt->aidcs;
-		while (aidc != NULL) {
-		    if (aidc->def == refIdc)
-			break;
-		    aidc = aidc->next;
-		}
-		if (aidc == NULL) {
-		    VERROR_INT("xmlSchemaIDCRegisterMatchers",
-			"Could not find an augmented IDC item for an IDC "
-			"definition");
-		    return (-1);
-		}
-		if ((aidc->keyrefDepth == -1) ||
-		    (vctxt->depth < aidc->keyrefDepth))
-		    aidc->keyrefDepth = vctxt->depth;
-	    }
-	}
-	/*
-	* Lookup the augmented IDC item for the IDC definition.
-	*/
-	aidc = vctxt->aidcs;
-	while (aidc != NULL) {
-	    if (aidc->def == idc)
-		break;
-	    aidc = aidc->next;
-	}
-	if (aidc == NULL) {
-	    VERROR_INT("xmlSchemaIDCRegisterMatchers",
-		"Could not find an augmented IDC item for an IDC definition");
-	    return (-1);
-	}
-	/*
-	* Create an IDC matcher for every IDC definition.
-	*/
-	if (vctxt->idcMatcherCache != NULL) {
-	    /*
-	    * Reuse a cached matcher.
-	    */
-	    matcher = vctxt->idcMatcherCache;
-	    vctxt->idcMatcherCache = matcher->nextCached;
-	    matcher->nextCached = NULL;
-	} else {
-	    matcher = (xmlSchemaIDCMatcherPtr)
-		xmlMalloc(sizeof(xmlSchemaIDCMatcher));
-	    if (matcher == NULL) {
-		xmlSchemaVErrMemory(vctxt,
-		    "allocating an IDC matcher", NULL);
-		return (-1);
-	    }
-	    memset(matcher, 0, sizeof(xmlSchemaIDCMatcher));
-	}
-	if (last == NULL)
-	    vctxt->inode->idcMatchers = matcher;
-	else
-	    last->next = matcher;
-	last = matcher;
-
-	matcher->type = IDC_MATCHER;
-	matcher->depth = vctxt->depth;
-	matcher->aidc = aidc;
-	matcher->idcType = aidc->def->type;
-#ifdef DEBUG_IDC
-	xmlGenericError(xmlGenericErrorContext, "IDC:   register matcher\n");
-#endif
-	/*
-	* Init the automaton state object.
-	*/
-	if (xmlSchemaIDCAddStateObject(vctxt, matcher,
-	    idc->selector, XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) == -1)
-	    return (-1);
-
-	idc = idc->next;
-    } while (idc != NULL);
-    return (0);
-}
-
-static int
-xmlSchemaIDCFillNodeTables(xmlSchemaValidCtxtPtr vctxt,
-			   xmlSchemaNodeInfoPtr ielem)
-{
-    xmlSchemaPSVIIDCBindingPtr bind;
-    int res, i, j, k, nbTargets, nbFields, nbDupls, nbNodeTable;
-    xmlSchemaPSVIIDCKeyPtr *keys, *ntkeys;
-    xmlSchemaPSVIIDCNodePtr *targets, *dupls;
-
-    xmlSchemaIDCMatcherPtr matcher = ielem->idcMatchers;
-    /* vctxt->createIDCNodeTables */
-    while (matcher != NULL) {
-	/*
-	* Skip keyref IDCs and empty IDC target-lists.
-	*/
-	if ((matcher->aidc->def->type == XML_SCHEMA_TYPE_IDC_KEYREF) ||
-	    WXS_ILIST_IS_EMPTY(matcher->targets))
-	{
-	    matcher = matcher->next;
-	    continue;
-	}
-	/*
-	* If we _want_ the IDC node-table to be created in any case
-	* then do so. Otherwise create them only if keyrefs need them.
-	*/
-	if ((! vctxt->createIDCNodeTables) &&
-	    ((matcher->aidc->keyrefDepth == -1) ||
-	     (matcher->aidc->keyrefDepth > vctxt->depth)))
-	{
-	    matcher = matcher->next;
-	    continue;
-	}
-	/*
-	* Get/create the IDC binding on this element for the IDC definition.
-	*/
-	bind = xmlSchemaIDCAcquireBinding(vctxt, matcher);
-
-	if (! WXS_ILIST_IS_EMPTY(bind->dupls)) {
-	    dupls = (xmlSchemaPSVIIDCNodePtr *) bind->dupls->items;
-	    nbDupls = bind->dupls->nbItems;
-	} else {
-	    dupls = NULL;
-	    nbDupls = 0;
-	}
-	if (bind->nodeTable != NULL) {
-	    nbNodeTable = bind->nbNodes;
-	} else {
-	    nbNodeTable = 0;
-	}
-
-	if ((nbNodeTable == 0) && (nbDupls == 0)) {
-	    /*
-	    * Transfer all IDC target-nodes to the IDC node-table.
-	    */
-	    bind->nodeTable =
-		(xmlSchemaPSVIIDCNodePtr *) matcher->targets->items;
-	    bind->sizeNodes = matcher->targets->sizeItems;
-	    bind->nbNodes = matcher->targets->nbItems;
-
-	    matcher->targets->items = NULL;
-	    matcher->targets->sizeItems = 0;
-	    matcher->targets->nbItems = 0;
-	} else {
-	    /*
-	    * Compare the key-sequences and add to the IDC node-table.
-	    */
-	    nbTargets = matcher->targets->nbItems;
-	    targets = (xmlSchemaPSVIIDCNodePtr *) matcher->targets->items;
-	    nbFields = matcher->aidc->def->nbFields;
-	    i = 0;
-	    do {
-		keys = targets[i]->keys;
-		if (nbDupls) {
-		    /*
-		    * Search in already found duplicates first.
-		    */
-		    j = 0;
-		    do {
-			if (nbFields == 1) {
-			    res = xmlSchemaAreValuesEqual(keys[0]->val,
-				dupls[j]->keys[0]->val);
-			    if (res == -1)
-				goto internal_error;
-			    if (res == 1) {
-				/*
-				* Equal key-sequence.
-				*/
-				goto next_target;
-			    }
-			} else {
-			    res = 0;
-			    ntkeys = dupls[j]->keys;
-			    for (k = 0; k < nbFields; k++) {
-				res = xmlSchemaAreValuesEqual(keys[k]->val,
-				    ntkeys[k]->val);
-				if (res == -1)
-				    goto internal_error;
-				if (res == 0) {
-				    /*
-				    * One of the keys differs.
-				    */
-				    break;
-				}
-			    }
-			    if (res == 1) {
-				/*
-				* Equal key-sequence found.
-				*/
-				goto next_target;
-			    }
-			}
-			j++;
-		    } while (j < nbDupls);
-		}
-		if (nbNodeTable) {
-		    j = 0;
-		    do {
-			if (nbFields == 1) {
-			    res = xmlSchemaAreValuesEqual(keys[0]->val,
-				bind->nodeTable[j]->keys[0]->val);
-			    if (res == -1)
-				goto internal_error;
-			    if (res == 0) {
-				/*
-				* The key-sequence differs.
-				*/
-				goto next_node_table_entry;
-			    }
-			} else {
-			    res = 0;
-			    ntkeys = bind->nodeTable[j]->keys;
-			    for (k = 0; k < nbFields; k++) {
-				res = xmlSchemaAreValuesEqual(keys[k]->val,
-				    ntkeys[k]->val);
-				if (res == -1)
-				    goto internal_error;
-				if (res == 0) {
-				    /*
-				    * One of the keys differs.
-				    */
-				    goto next_node_table_entry;
-				}
-			    }
-			}
-			/*
-			* Add the duplicate to the list of duplicates.
-			*/
-			if (bind->dupls == NULL) {
-			    bind->dupls = xmlSchemaItemListCreate();
-			    if (bind->dupls == NULL)
-				goto internal_error;
-			}
-			if (xmlSchemaItemListAdd(bind->dupls, bind->nodeTable[j]) == -1)
-			    goto internal_error;
-			/*
-			* Remove the duplicate entry from the IDC node-table.
-			*/
-			bind->nodeTable[j] = bind->nodeTable[bind->nbNodes -1];
-			bind->nbNodes--;
-
-			goto next_target;
-
-next_node_table_entry:
-			j++;
-		    } while (j < nbNodeTable);
-		}
-		/*
-		* If everything is fine, then add the IDC target-node to
-		* the IDC node-table.
-		*/
-		if (xmlSchemaIDCAppendNodeTableItem(bind, targets[i]) == -1)
-		    goto internal_error;
-
-next_target:
-		i++;
-	    } while (i < nbTargets);
-	}
-	matcher = matcher->next;
-    }
-    return(0);
-
-internal_error:
-    return(-1);
-}
-
-/**
- * xmlSchemaBubbleIDCNodeTables:
- * @depth: the current tree depth
- *
- * Merges IDC bindings of an element at @depth into the corresponding IDC
- * bindings of its parent element. If a duplicate note-table entry is found,
- * both, the parent node-table entry and child entry are discarded from the
- * node-table of the parent.
- *
- * Returns 0 if OK and -1 on internal errors.
- */
-static int
-xmlSchemaBubbleIDCNodeTables(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaPSVIIDCBindingPtr bind; /* IDC bindings of the current node. */
-    xmlSchemaPSVIIDCBindingPtr *parTable, parBind = NULL; /* parent IDC bindings. */
-    xmlSchemaPSVIIDCNodePtr node, parNode = NULL, *dupls, *parNodes; /* node-table entries. */
-    xmlSchemaIDCAugPtr aidc;
-    int i, j, k, ret = 0, nbFields, oldNum, oldDupls;
-
-    bind = vctxt->inode->idcTable;
-    if (bind == NULL) {
-	/* Fine, no table, no bubbles. */
-	return (0);
-    }
-
-    parTable = &(vctxt->elemInfos[vctxt->depth -1]->idcTable);
-    /*
-    * Walk all bindings; create new or add to existing bindings.
-    * Remove duplicate key-sequences.
-    */
-    while (bind != NULL) {
-
-	if ((bind->nbNodes == 0) && WXS_ILIST_IS_EMPTY(bind->dupls))
-	    goto next_binding;
-	/*
-	* Check if the key/unique IDC table needs to be bubbled.
-	*/
-	if (! vctxt->createIDCNodeTables) {
-	    aidc = vctxt->aidcs;
-	    do {
-		if (aidc->def == bind->definition) {
-		    if ((aidc->keyrefDepth == -1) ||
-			(aidc->keyrefDepth >= vctxt->depth)) {
-			goto next_binding;
-		    }
-		    break;
-		}
-		aidc = aidc->next;
-	    } while (aidc != NULL);
-	}
-
-	if (parTable != NULL)
-	    parBind = *parTable;
-	/*
-	* Search a matching parent binding for the
-	* IDC definition.
-	*/
-	while (parBind != NULL) {
-	    if (parBind->definition == bind->definition)
-		break;
-	    parBind = parBind->next;
-	}
-
-	if (parBind != NULL) {
-	    /*
-	    * Compare every node-table entry of the child node,
-	    * i.e. the key-sequence within, ...
-	    */
-	    oldNum = parBind->nbNodes; /* Skip newly added items. */
-
-	    if (! WXS_ILIST_IS_EMPTY(parBind->dupls)) {
-		oldDupls = parBind->dupls->nbItems;
-		dupls = (xmlSchemaPSVIIDCNodePtr *) parBind->dupls->items;
-	    } else {
-		dupls = NULL;
-		oldDupls = 0;
-	    }
-
-	    parNodes = parBind->nodeTable;
-	    nbFields = bind->definition->nbFields;
-
-	    for (i = 0; i < bind->nbNodes; i++) {
-		node = bind->nodeTable[i];
-		if (node == NULL)
-		    continue;
-		/*
-		* ...with every key-sequence of the parent node, already
-		* evaluated to be a duplicate key-sequence.
-		*/
-		if (oldDupls) {
-		    j = 0;
-		    while (j < oldDupls) {
-			if (nbFields == 1) {
-			    ret = xmlSchemaAreValuesEqual(
-				node->keys[0]->val,
-				dupls[j]->keys[0]->val);
-			    if (ret == -1)
-				goto internal_error;
-			    if (ret == 0) {
-				j++;
-				continue;
-			    }
-			} else {
-			    parNode = dupls[j];
-			    for (k = 0; k < nbFields; k++) {
-				ret = xmlSchemaAreValuesEqual(
-				    node->keys[k]->val,
-				    parNode->keys[k]->val);
-				if (ret == -1)
-				    goto internal_error;
-				if (ret == 0)
-				    break;
-			    }
-			}
-			if (ret == 1)
-			    /* Duplicate found. */
-			    break;
-			j++;
-		    }
-		    if (j != oldDupls) {
-			/* Duplicate found. Skip this entry. */
-			continue;
-		    }
-		}
-		/*
-		* ... and with every key-sequence of the parent node.
-		*/
-		if (oldNum) {
-		    j = 0;
-		    while (j < oldNum) {
-			parNode = parNodes[j];
-			if (nbFields == 1) {
-			    ret = xmlSchemaAreValuesEqual(
-				node->keys[0]->val,
-				parNode->keys[0]->val);
-			    if (ret == -1)
-				goto internal_error;
-			    if (ret == 0) {
-				j++;
-				continue;
-			    }
-			} else {
-			    for (k = 0; k < nbFields; k++) {
-				ret = xmlSchemaAreValuesEqual(
-				    node->keys[k]->val,
-				    parNode->keys[k]->val);
-				if (ret == -1)
-				    goto internal_error;
-				if (ret == 0)
-				    break;
-			    }
-			}
-			if (ret == 1)
-			    /* Duplicate found. */
-			    break;
-			j++;
-		    }
-		    if (j != oldNum) {
-			/*
-			* Handle duplicates. Move the duplicate in
-			* the parent's node-table to the list of
-			* duplicates.
-			*/
-			oldNum--;
-			parBind->nbNodes--;
-			/*
-			* Move last old item to pos of duplicate.
-			*/
-			parNodes[j] = parNodes[oldNum];
-
-			if (parBind->nbNodes != oldNum) {
-			    /*
-			    * If new items exist, move last new item to
-			    * last of old items.
-			    */
-			    parNodes[oldNum] =
-				parNodes[parBind->nbNodes];
-			}
-			if (parBind->dupls == NULL) {
-			    parBind->dupls = xmlSchemaItemListCreate();
-			    if (parBind->dupls == NULL)
-				goto internal_error;
-			}
-			xmlSchemaItemListAdd(parBind->dupls, parNode);
-		    } else {
-			/*
-			* Add the node-table entry (node and key-sequence) of
-			* the child node to the node table of the parent node.
-			*/
-			if (parBind->nodeTable == NULL) {
-			    parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
-				xmlMalloc(10 * sizeof(xmlSchemaPSVIIDCNodePtr));
-			    if (parBind->nodeTable == NULL) {
-				xmlSchemaVErrMemory(NULL,
-				    "allocating IDC list of node-table items", NULL);
-				goto internal_error;
-			    }
-			    parBind->sizeNodes = 1;
-			} else if (parBind->nbNodes >= parBind->sizeNodes) {
-			    parBind->sizeNodes *= 2;
-			    parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
-				xmlRealloc(parBind->nodeTable, parBind->sizeNodes *
-				sizeof(xmlSchemaPSVIIDCNodePtr));
-			    if (parBind->nodeTable == NULL) {
-				xmlSchemaVErrMemory(NULL,
-				    "re-allocating IDC list of node-table items", NULL);
-				goto internal_error;
-			    }
-			}
-			parNodes = parBind->nodeTable;
-			/*
-			* Append the new node-table entry to the 'new node-table
-			* entries' section.
-			*/
-			parNodes[parBind->nbNodes++] = node;
-		    }
-
-		}
-
-	    }
-	} else {
-	    /*
-	    * No binding for the IDC was found: create a new one and
-	    * copy all node-tables.
-	    */
-	    parBind = xmlSchemaIDCNewBinding(bind->definition);
-	    if (parBind == NULL)
-		goto internal_error;
-
-	    /*
-	    * TODO: Hmm, how to optimize the initial number of
-	    * allocated entries?
-	    */
-	    if (bind->nbNodes != 0) {
-		/*
-		* Add all IDC node-table entries.
-		*/
-		if (! vctxt->psviExposeIDCNodeTables) {
-		    /*
-		    * Just move the entries.
-		    * NOTE: this is quite save here, since
-		    * all the keyref lookups have already been
-		    * performed.
-		    */
-		    parBind->nodeTable = bind->nodeTable;
-		    bind->nodeTable = NULL;
-		    parBind->sizeNodes = bind->sizeNodes;
-		    bind->sizeNodes = 0;
-		    parBind->nbNodes = bind->nbNodes;
-		    bind->nbNodes = 0;
-		} else {
-		    /*
-		    * Copy the entries.
-		    */
-		    parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
-			xmlMalloc(bind->nbNodes *
-			sizeof(xmlSchemaPSVIIDCNodePtr));
-		    if (parBind->nodeTable == NULL) {
-			xmlSchemaVErrMemory(NULL,
-			    "allocating an array of IDC node-table "
-			    "items", NULL);
-			xmlSchemaIDCFreeBinding(parBind);
-			goto internal_error;
-		    }
-		    parBind->sizeNodes = bind->nbNodes;
-		    parBind->nbNodes = bind->nbNodes;
-		    memcpy(parBind->nodeTable, bind->nodeTable,
-			bind->nbNodes * sizeof(xmlSchemaPSVIIDCNodePtr));
-		}
-	    }
-	    if (bind->dupls) {
-		/*
-		* Move the duplicates.
-		*/
-		if (parBind->dupls != NULL)
-		    xmlSchemaItemListFree(parBind->dupls);
-		parBind->dupls = bind->dupls;
-		bind->dupls = NULL;
-	    }
-            if (parTable != NULL) {
-                if (*parTable == NULL)
-                    *parTable = parBind;
-                else {
-                    parBind->next = *parTable;
-                    *parTable = parBind;
-                }
-            }
-	}
-
-next_binding:
-	bind = bind->next;
-    }
-    return (0);
-
-internal_error:
-    return(-1);
-}
-
-/**
- * xmlSchemaCheckCVCIDCKeyRef:
- * @vctxt: the WXS validation context
- * @elemDecl: the element declaration
- *
- * Check the cvc-idc-keyref constraints.
- */
-static int
-xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaIDCMatcherPtr matcher;
-    xmlSchemaPSVIIDCBindingPtr bind;
-
-    matcher = vctxt->inode->idcMatchers;
-    /*
-    * Find a keyref.
-    */
-    while (matcher != NULL) {
-	if ((matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) &&
-	    matcher->targets &&
-	    matcher->targets->nbItems)
-	{
-	    int i, j, k, res, nbFields, hasDupls;
-	    xmlSchemaPSVIIDCKeyPtr *refKeys, *keys;
-	    xmlSchemaPSVIIDCNodePtr refNode = NULL;
-
-	    nbFields = matcher->aidc->def->nbFields;
-
-	    /*
-	    * Find the IDC node-table for the referenced IDC key/unique.
-	    */
-	    bind = vctxt->inode->idcTable;
-	    while (bind != NULL) {
-		if ((xmlSchemaIDCPtr) matcher->aidc->def->ref->item ==
-		    bind->definition)
-		    break;
-		bind = bind->next;
-	    }
-	    hasDupls = (bind && bind->dupls && bind->dupls->nbItems) ? 1 : 0;
-	    /*
-	    * Search for a matching key-sequences.
-	    */
-	    for (i = 0; i < matcher->targets->nbItems; i++) {
-		res = 0;
-		refNode = matcher->targets->items[i];
-		if (bind != NULL) {
-		    refKeys = refNode->keys;
-		    for (j = 0; j < bind->nbNodes; j++) {
-			keys = bind->nodeTable[j]->keys;
-			for (k = 0; k < nbFields; k++) {
-			    res = xmlSchemaAreValuesEqual(keys[k]->val,
-				refKeys[k]->val);
-			    if (res == 0)
-				break;
-			    else if (res == -1) {
-				return (-1);
-			    }
-			}
-			if (res == 1) {
-			    /*
-			    * Match found.
-			    */
-			    break;
-			}
-		    }
-		    if ((res == 0) && hasDupls) {
-			/*
-			* Search in duplicates
-			*/
-			for (j = 0; j < bind->dupls->nbItems; j++) {
-			    keys = ((xmlSchemaPSVIIDCNodePtr)
-				bind->dupls->items[j])->keys;
-			    for (k = 0; k < nbFields; k++) {
-				res = xmlSchemaAreValuesEqual(keys[k]->val,
-				    refKeys[k]->val);
-				if (res == 0)
-				    break;
-				else if (res == -1) {
-				    return (-1);
-				}
-			    }
-			    if (res == 1) {
-				/*
-				* Match in duplicates found.
-				*/
-				xmlChar *str = NULL, *strB = NULL;
-				xmlSchemaKeyrefErr(vctxt,
-				    XML_SCHEMAV_CVC_IDC, refNode,
-				    (xmlSchemaTypePtr) matcher->aidc->def,
-				    "More than one match found for "
-				    "key-sequence %s of keyref '%s'",
-				    xmlSchemaFormatIDCKeySequence(vctxt, &str,
-					refNode->keys, nbFields),
-				    xmlSchemaGetComponentQName(&strB,
-					matcher->aidc->def));
-				FREE_AND_NULL(str);
-				FREE_AND_NULL(strB);
-				break;
-			    }
-			}
-		    }
-		}
-
-		if (res == 0) {
-		    xmlChar *str = NULL, *strB = NULL;
-		    xmlSchemaKeyrefErr(vctxt,
-			XML_SCHEMAV_CVC_IDC, refNode,
-			(xmlSchemaTypePtr) matcher->aidc->def,
-			"No match found for key-sequence %s of keyref '%s'",
-			xmlSchemaFormatIDCKeySequence(vctxt, &str,
-			    refNode->keys, nbFields),
-			xmlSchemaGetComponentQName(&strB, matcher->aidc->def));
-		    FREE_AND_NULL(str);
-		    FREE_AND_NULL(strB);
-		}
-	    }
-	}
-	matcher = matcher->next;
-    }
-    /* TODO: Return an error if any error encountered. */
-    return (0);
-}
-
-/************************************************************************
- *									*
- *			XML Reader validation code                      *
- *									*
- ************************************************************************/
-
-static xmlSchemaAttrInfoPtr
-xmlSchemaGetFreshAttrInfo(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaAttrInfoPtr iattr;
-    /*
-    * Grow/create list of attribute infos.
-    */
-    if (vctxt->attrInfos == NULL) {
-	vctxt->attrInfos = (xmlSchemaAttrInfoPtr *)
-	    xmlMalloc(sizeof(xmlSchemaAttrInfoPtr));
-	vctxt->sizeAttrInfos = 1;
-	if (vctxt->attrInfos == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"allocating attribute info list", NULL);
-	    return (NULL);
-	}
-    } else if (vctxt->sizeAttrInfos <= vctxt->nbAttrInfos) {
-	vctxt->sizeAttrInfos++;
-	vctxt->attrInfos = (xmlSchemaAttrInfoPtr *)
-	    xmlRealloc(vctxt->attrInfos,
-		vctxt->sizeAttrInfos * sizeof(xmlSchemaAttrInfoPtr));
-	if (vctxt->attrInfos == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"re-allocating attribute info list", NULL);
-	    return (NULL);
-	}
-    } else {
-	iattr = vctxt->attrInfos[vctxt->nbAttrInfos++];
-	if (iattr->localName != NULL) {
-	    VERROR_INT("xmlSchemaGetFreshAttrInfo",
-		"attr info not cleared");
-	    return (NULL);
-	}
-	iattr->nodeType = XML_ATTRIBUTE_NODE;
-	return (iattr);
-    }
-    /*
-    * Create an attribute info.
-    */
-    iattr = (xmlSchemaAttrInfoPtr)
-	xmlMalloc(sizeof(xmlSchemaAttrInfo));
-    if (iattr == NULL) {
-	xmlSchemaVErrMemory(vctxt, "creating new attribute info", NULL);
-	return (NULL);
-    }
-    memset(iattr, 0, sizeof(xmlSchemaAttrInfo));
-    iattr->nodeType = XML_ATTRIBUTE_NODE;
-    vctxt->attrInfos[vctxt->nbAttrInfos++] = iattr;
-
-    return (iattr);
-}
-
-static int
-xmlSchemaValidatorPushAttribute(xmlSchemaValidCtxtPtr vctxt,
-			xmlNodePtr attrNode,
-			int nodeLine,
-			const xmlChar *localName,
-			const xmlChar *nsName,
-			int ownedNames,
-			xmlChar *value,
-			int ownedValue)
-{
-    xmlSchemaAttrInfoPtr attr;
-
-    attr = xmlSchemaGetFreshAttrInfo(vctxt);
-    if (attr == NULL) {
-	VERROR_INT("xmlSchemaPushAttribute",
-	    "calling xmlSchemaGetFreshAttrInfo()");
-	return (-1);
-    }
-    attr->node = attrNode;
-    attr->nodeLine = nodeLine;
-    attr->state = XML_SCHEMAS_ATTR_UNKNOWN;
-    attr->localName = localName;
-    attr->nsName = nsName;
-    if (ownedNames)
-	attr->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES;
-    /*
-    * Evaluate if it's an XSI attribute.
-    */
-    if (nsName != NULL) {
-	if (xmlStrEqual(localName, BAD_CAST "nil")) {
-	    if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
-		attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_NIL;
-	    }
-	} else if (xmlStrEqual(localName, BAD_CAST "type")) {
-	    if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
-		attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_TYPE;
-	    }
-	} else if (xmlStrEqual(localName, BAD_CAST "schemaLocation")) {
-	    if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
-		attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC;
-	    }
-	} else if (xmlStrEqual(localName, BAD_CAST "noNamespaceSchemaLocation")) {
-	    if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
-		attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC;
-	    }
-	} else if (xmlStrEqual(attr->nsName, xmlNamespaceNs)) {
-	    attr->metaType = XML_SCHEMA_ATTR_INFO_META_XMLNS;
-	}
-    }
-    attr->value = value;
-    if (ownedValue)
-	attr->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
-    if (attr->metaType != 0)
-	attr->state = XML_SCHEMAS_ATTR_META;
-    return (0);
-}
-
-/**
- * xmlSchemaClearElemInfo:
- * @vctxt: the WXS validation context
- * @ielem: the element information item
- */
-static void
-xmlSchemaClearElemInfo(xmlSchemaValidCtxtPtr vctxt,
-		       xmlSchemaNodeInfoPtr ielem)
-{
-    ielem->hasKeyrefs = 0;
-    ielem->appliedXPath = 0;
-    if (ielem->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES) {
-	FREE_AND_NULL(ielem->localName);
-	FREE_AND_NULL(ielem->nsName);
-    } else {
-	ielem->localName = NULL;
-	ielem->nsName = NULL;
-    }
-    if (ielem->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
-	FREE_AND_NULL(ielem->value);
-    } else {
-	ielem->value = NULL;
-    }
-    if (ielem->val != NULL) {
-	/*
-	* PSVI TODO: Be careful not to free it when the value is
-	* exposed via PSVI.
-	*/
-	xmlSchemaFreeValue(ielem->val);
-	ielem->val = NULL;
-    }
-    if (ielem->idcMatchers != NULL) {
-	/*
-	* REVISIT OPTIMIZE TODO: Use a pool of IDC matchers.
-	*   Does it work?
-	*/
-	xmlSchemaIDCReleaseMatcherList(vctxt, ielem->idcMatchers);
-#if 0
-	xmlSchemaIDCFreeMatcherList(ielem->idcMatchers);
-#endif
-	ielem->idcMatchers = NULL;
-    }
-    if (ielem->idcTable != NULL) {
-	/*
-	* OPTIMIZE TODO: Use a pool of IDC tables??.
-	*/
-	xmlSchemaIDCFreeIDCTable(ielem->idcTable);
-	ielem->idcTable = NULL;
-    }
-    if (ielem->regexCtxt != NULL) {
-	xmlRegFreeExecCtxt(ielem->regexCtxt);
-	ielem->regexCtxt = NULL;
-    }
-    if (ielem->nsBindings != NULL) {
-	xmlFree((xmlChar **)ielem->nsBindings);
-	ielem->nsBindings = NULL;
-	ielem->nbNsBindings = 0;
-	ielem->sizeNsBindings = 0;
-    }
-}
-
-/**
- * xmlSchemaGetFreshElemInfo:
- * @vctxt: the schema validation context
- *
- * Creates/reuses and initializes the element info item for
- * the currect tree depth.
- *
- * Returns the element info item or NULL on API or internal errors.
- */
-static xmlSchemaNodeInfoPtr
-xmlSchemaGetFreshElemInfo(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaNodeInfoPtr info = NULL;
-
-    if (vctxt->depth > vctxt->sizeElemInfos) {
-	VERROR_INT("xmlSchemaGetFreshElemInfo",
-	    "inconsistent depth encountered");
-	return (NULL);
-    }
-    if (vctxt->elemInfos == NULL) {
-	vctxt->elemInfos = (xmlSchemaNodeInfoPtr *)
-	    xmlMalloc(10 * sizeof(xmlSchemaNodeInfoPtr));
-	if (vctxt->elemInfos == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"allocating the element info array", NULL);
-	    return (NULL);
-	}
-	memset(vctxt->elemInfos, 0, 10 * sizeof(xmlSchemaNodeInfoPtr));
-	vctxt->sizeElemInfos = 10;
-    } else if (vctxt->sizeElemInfos <= vctxt->depth) {
-	int i = vctxt->sizeElemInfos;
-
-	vctxt->sizeElemInfos *= 2;
-	vctxt->elemInfos = (xmlSchemaNodeInfoPtr *)
-	    xmlRealloc(vctxt->elemInfos, vctxt->sizeElemInfos *
-	    sizeof(xmlSchemaNodeInfoPtr));
-	if (vctxt->elemInfos == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"re-allocating the element info array", NULL);
-	    return (NULL);
-	}
-	/*
-	* We need the new memory to be NULLed.
-	* TODO: Use memset instead?
-	*/
-	for (; i < vctxt->sizeElemInfos; i++)
-	    vctxt->elemInfos[i] = NULL;
-    } else
-	info = vctxt->elemInfos[vctxt->depth];
-
-    if (info == NULL) {
-	info = (xmlSchemaNodeInfoPtr)
-	    xmlMalloc(sizeof(xmlSchemaNodeInfo));
-	if (info == NULL) {
-	    xmlSchemaVErrMemory(vctxt,
-		"allocating an element info", NULL);
-	    return (NULL);
-	}
-	vctxt->elemInfos[vctxt->depth] = info;
-    } else {
-	if (info->localName != NULL) {
-	    VERROR_INT("xmlSchemaGetFreshElemInfo",
-		"elem info has not been cleared");
-	    return (NULL);
-	}
-    }
-    memset(info, 0, sizeof(xmlSchemaNodeInfo));
-    info->nodeType = XML_ELEMENT_NODE;
-    info->depth = vctxt->depth;
-
-    return (info);
-}
-
-#define ACTIVATE_ATTRIBUTE(item) vctxt->inode = (xmlSchemaNodeInfoPtr) item;
-#define ACTIVATE_ELEM vctxt->inode = vctxt->elemInfos[vctxt->depth];
-#define ACTIVATE_PARENT_ELEM vctxt->inode = vctxt->elemInfos[vctxt->depth -1];
-
-static int
-xmlSchemaValidateFacets(xmlSchemaAbstractCtxtPtr actxt,
-			xmlNodePtr node,
-			xmlSchemaTypePtr type,
-			xmlSchemaValType valType,
-			const xmlChar * value,
-			xmlSchemaValPtr val,
-			unsigned long length,
-			int fireErrors)
-{
-    int ret, error = 0;
-
-    xmlSchemaTypePtr tmpType;
-    xmlSchemaFacetLinkPtr facetLink;
-    xmlSchemaFacetPtr facet;
-    unsigned long len = 0;
-    xmlSchemaWhitespaceValueType ws;
-
-    /*
-    * In Libxml2, derived built-in types have currently no explicit facets.
-    */
-    if (type->type == XML_SCHEMA_TYPE_BASIC)
-	return (0);
-
-    /*
-    * NOTE: Do not jump away, if the facetSet of the given type is
-    * empty: until now, "pattern" and "enumeration" facets of the
-    * *base types* need to be checked as well.
-    */
-    if (type->facetSet == NULL)
-	goto pattern_and_enum;
-
-    if (! WXS_IS_ATOMIC(type)) {
-	if (WXS_IS_LIST(type))
-	    goto WXS_IS_LIST;
-	else
-	    goto pattern_and_enum;
-    }
-
-    /*
-    * Whitespace handling is only of importance for string-based
-    * types.
-    */
-    tmpType = xmlSchemaGetPrimitiveType(type);
-    if ((tmpType->builtInType == XML_SCHEMAS_STRING) ||
-	WXS_IS_ANY_SIMPLE_TYPE(tmpType)) {
-	ws = xmlSchemaGetWhiteSpaceFacetValue(type);
-    } else
-	ws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
-    /*
-    * If the value was not computed (for string or
-    * anySimpleType based types), then use the provided
-    * type.
-    */
-    if (val != NULL)
-	valType = xmlSchemaGetValType(val);
-
-    ret = 0;
-    for (facetLink = type->facetSet; facetLink != NULL;
-	facetLink = facetLink->next) {
-	/*
-	* Skip the pattern "whiteSpace": it is used to
-	* format the character content beforehand.
-	*/
-	switch (facetLink->facet->type) {
-	    case XML_SCHEMA_FACET_WHITESPACE:
-	    case XML_SCHEMA_FACET_PATTERN:
-	    case XML_SCHEMA_FACET_ENUMERATION:
-		continue;
-	    case XML_SCHEMA_FACET_LENGTH:
-	    case XML_SCHEMA_FACET_MINLENGTH:
-	    case XML_SCHEMA_FACET_MAXLENGTH:
-		ret = xmlSchemaValidateLengthFacetWhtsp(facetLink->facet,
-		    valType, value, val, &len, ws);
-		break;
-	    default:
-		ret = xmlSchemaValidateFacetWhtsp(facetLink->facet, ws,
-		    valType, value, val, ws);
-		break;
-	}
-	if (ret < 0) {
-	    AERROR_INT("xmlSchemaValidateFacets",
-		"validating against a atomic type facet");
-	    return (-1);
-	} else if (ret > 0) {
-	    if (fireErrors)
-		xmlSchemaFacetErr(actxt, ret, node,
-		value, len, type, facetLink->facet, NULL, NULL, NULL);
-	    else
-		return (ret);
-	    if (error == 0)
-		error = ret;
-	}
-	ret = 0;
-    }
-
-WXS_IS_LIST:
-    if (! WXS_IS_LIST(type))
-	goto pattern_and_enum;
-    /*
-    * "length", "minLength" and "maxLength" of list types.
-    */
-    ret = 0;
-    for (facetLink = type->facetSet; facetLink != NULL;
-	facetLink = facetLink->next) {
-
-	switch (facetLink->facet->type) {
-	    case XML_SCHEMA_FACET_LENGTH:
-	    case XML_SCHEMA_FACET_MINLENGTH:
-	    case XML_SCHEMA_FACET_MAXLENGTH:
-		ret = xmlSchemaValidateListSimpleTypeFacet(facetLink->facet,
-		    value, length, NULL);
-		break;
-	    default:
-		continue;
-	}
-	if (ret < 0) {
-	    AERROR_INT("xmlSchemaValidateFacets",
-		"validating against a list type facet");
-	    return (-1);
-	} else if (ret > 0) {
-	    if (fireErrors)
-		xmlSchemaFacetErr(actxt, ret, node,
-		value, length, type, facetLink->facet, NULL, NULL, NULL);
-	    else
-		return (ret);
-	    if (error == 0)
-		error = ret;
-	}
-	ret = 0;
-    }
-
-pattern_and_enum:
-    if (error >= 0) {
-	int found = 0;
-	/*
-	* Process enumerations. Facet values are in the value space
-	* of the defining type's base type. This seems to be a bug in the
-	* XML Schema 1.0 spec. Use the whitespace type of the base type.
-	* Only the first set of enumerations in the ancestor-or-self axis
-	* is used for validation.
-	*/
-	ret = 0;
-	tmpType = type;
-	do {
-	    for (facet = tmpType->facets; facet != NULL; facet = facet->next) {
-		if (facet->type != XML_SCHEMA_FACET_ENUMERATION)
-		    continue;
-		found = 1;
-		ret = xmlSchemaAreValuesEqual(facet->val, val);
-		if (ret == 1)
-		    break;
-		else if (ret < 0) {
-		    AERROR_INT("xmlSchemaValidateFacets",
-			"validating against an enumeration facet");
-		    return (-1);
-		}
-	    }
-	    if (ret != 0)
-		break;
-	    /*
-	    * Break on the first set of enumerations. Any additional
-	    *  enumerations which might be existent on the ancestors
-	    *  of the current type are restricted by this set; thus
-	    *  *must* *not* be taken into account.
-	    */
-	    if (found)
-		break;
-	    tmpType = tmpType->baseType;
-	} while ((tmpType != NULL) &&
-	    (tmpType->type != XML_SCHEMA_TYPE_BASIC));
-	if (found && (ret == 0)) {
-	    ret = XML_SCHEMAV_CVC_ENUMERATION_VALID;
-	    if (fireErrors) {
-		xmlSchemaFacetErr(actxt, ret, node,
-		    value, 0, type, NULL, NULL, NULL, NULL);
-	    } else
-		return (ret);
-	    if (error == 0)
-		error = ret;
-	}
-    }
-
-    if (error >= 0) {
-	int found;
-	/*
-	* Process patters. Pattern facets are ORed at type level
-	* and ANDed if derived. Walk the base type axis.
-	*/
-	tmpType = type;
-	facet = NULL;
-	do {
-	    found = 0;
-	    for (facetLink = tmpType->facetSet; facetLink != NULL;
-		facetLink = facetLink->next) {
-		if (facetLink->facet->type != XML_SCHEMA_FACET_PATTERN)
-		    continue;
-		found = 1;
-		/*
-		* NOTE that for patterns, @value needs to be the
-		* normalized vaule.
-		*/
-		ret = xmlRegexpExec(facetLink->facet->regexp, value);
-		if (ret == 1)
-		    break;
-		else if (ret < 0) {
-		    AERROR_INT("xmlSchemaValidateFacets",
-			"validating against a pattern facet");
-		    return (-1);
-		} else {
-		    /*
-		    * Save the last non-validating facet.
-		    */
-		    facet = facetLink->facet;
-		}
-	    }
-	    if (found && (ret != 1)) {
-		ret = XML_SCHEMAV_CVC_PATTERN_VALID;
-		if (fireErrors) {
-		    xmlSchemaFacetErr(actxt, ret, node,
-			value, 0, type, facet, NULL, NULL, NULL);
-		} else
-		    return (ret);
-		if (error == 0)
-		    error = ret;
-		break;
-	    }
-	    tmpType = tmpType->baseType;
-	} while ((tmpType != NULL) && (tmpType->type != XML_SCHEMA_TYPE_BASIC));
-    }
-
-    return (error);
-}
-
-static xmlChar *
-xmlSchemaNormalizeValue(xmlSchemaTypePtr type,
-			const xmlChar *value)
-{
-    switch (xmlSchemaGetWhiteSpaceFacetValue(type)) {
-	case XML_SCHEMA_WHITESPACE_COLLAPSE:
-	    return (xmlSchemaCollapseString(value));
-	case XML_SCHEMA_WHITESPACE_REPLACE:
-	    return (xmlSchemaWhiteSpaceReplace(value));
-	default:
-	    return (NULL);
-    }
-}
-
-static int
-xmlSchemaValidateQName(xmlSchemaValidCtxtPtr vctxt,
-		       const xmlChar *value,
-		       xmlSchemaValPtr *val,
-		       int valNeeded)
-{
-    int ret;
-    const xmlChar *nsName;
-    xmlChar *local, *prefix = NULL;
-
-    ret = xmlValidateQName(value, 1);
-    if (ret != 0) {
-	if (ret == -1) {
-	    VERROR_INT("xmlSchemaValidateQName",
-		"calling xmlValidateQName()");
-	    return (-1);
-	}
-	return( XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1);
-    }
-    /*
-    * NOTE: xmlSplitQName2 will always return a duplicated
-    * strings.
-    */
-    local = xmlSplitQName2(value, &prefix);
-    if (local == NULL)
-	local = xmlStrdup(value);
-    /*
-    * OPTIMIZE TODO: Use flags for:
-    *  - is there any namespace binding?
-    *  - is there a default namespace?
-    */
-    nsName = xmlSchemaLookupNamespace(vctxt, prefix);
-
-    if (prefix != NULL) {
-	xmlFree(prefix);
-	/*
-	* A namespace must be found if the prefix is
-	* NOT NULL.
-	*/
-	if (nsName == NULL) {
-	    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
-	    xmlSchemaCustomErr(ACTXT_CAST vctxt, ret, NULL,
-		WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
-		"The QName value '%s' has no "
-		"corresponding namespace declaration in "
-		"scope", value, NULL);
-	    if (local != NULL)
-		xmlFree(local);
-	    return (ret);
-	}
-    }
-    if (valNeeded && val) {
-	if (nsName != NULL)
-	    *val = xmlSchemaNewQNameValue(
-		BAD_CAST xmlStrdup(nsName), BAD_CAST local);
-	else
-	    *val = xmlSchemaNewQNameValue(NULL,
-		BAD_CAST local);
-    } else
-	xmlFree(local);
-    return (0);
-}
-
-/*
-* cvc-simple-type
-*/
-static int
-xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
-			     xmlNodePtr node,
-			     xmlSchemaTypePtr type,
-			     const xmlChar *value,
-			     xmlSchemaValPtr *retVal,
-			     int fireErrors,
-			     int normalize,
-			     int isNormalized)
-{
-    int ret = 0, valNeeded = (retVal) ? 1 : 0;
-    xmlSchemaValPtr val = NULL;
-    /* xmlSchemaWhitespaceValueType ws; */
-    xmlChar *normValue = NULL;
-
-#define NORMALIZE(atype) \
-    if ((! isNormalized) && \
-    (normalize || (type->flags & XML_SCHEMAS_TYPE_NORMVALUENEEDED))) { \
-	normValue = xmlSchemaNormalizeValue(atype, value); \
-	if (normValue != NULL) \
-	    value = normValue; \
-	isNormalized = 1; \
-    }
-
-    if ((retVal != NULL) && (*retVal != NULL)) {
-	xmlSchemaFreeValue(*retVal);
-	*retVal = NULL;
-    }
-    /*
-    * 3.14.4 Simple Type Definition Validation Rules
-    * Validation Rule: String Valid
-    */
-    /*
-    * 1 It is schema-valid with respect to that definition as defined
-    * by Datatype Valid in [XML Schemas: Datatypes].
-    */
-    /*
-    * 2.1 If The definition is ENTITY or is validly derived from ENTITY given
-    * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6), then
-    * the string must be a `declared entity name`.
-    */
-    /*
-    * 2.2 If The definition is ENTITIES or is validly derived from ENTITIES
-    * given the empty set, as defined in Type Derivation OK (Simple) ($3.14.6),
-    * then every whitespace-delimited substring of the string must be a `declared
-    * entity name`.
-    */
-    /*
-    * 2.3 otherwise no further condition applies.
-    */
-    if ((! valNeeded) && (type->flags & XML_SCHEMAS_TYPE_FACETSNEEDVALUE))
-	valNeeded = 1;
-    if (value == NULL)
-	value = BAD_CAST "";
-    if (WXS_IS_ANY_SIMPLE_TYPE(type) || WXS_IS_ATOMIC(type)) {
-	xmlSchemaTypePtr biType; /* The built-in type. */
-	/*
-	* SPEC (1.2.1) "if {variety} is `atomic` then the string must `match`
-	* a literal in the `lexical space` of {base type definition}"
-	*/
-	/*
-	* Whitespace-normalize.
-	*/
-	NORMALIZE(type);
-	if (type->type != XML_SCHEMA_TYPE_BASIC) {
-	    /*
-	    * Get the built-in type.
-	    */
-	    biType = type->baseType;
-	    while ((biType != NULL) &&
-		(biType->type != XML_SCHEMA_TYPE_BASIC))
-		biType = biType->baseType;
-
-	    if (biType == NULL) {
-		AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-		    "could not get the built-in type");
-		goto internal_error;
-	    }
-	} else
-	    biType = type;
-	/*
-	* NOTATIONs need to be processed here, since they need
-	* to lookup in the hashtable of NOTATION declarations of the schema.
-	*/
-	if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
-	    switch (biType->builtInType) {
-		case XML_SCHEMAS_NOTATION:
-		    ret = xmlSchemaValidateNotation(
-			(xmlSchemaValidCtxtPtr) actxt,
-			((xmlSchemaValidCtxtPtr) actxt)->schema,
-			NULL, value, &val, valNeeded);
-		    break;
-		case XML_SCHEMAS_QNAME:
-		    ret = xmlSchemaValidateQName((xmlSchemaValidCtxtPtr) actxt,
-			value, &val, valNeeded);
-		    break;
-		default:
-		    /* ws = xmlSchemaGetWhiteSpaceFacetValue(type); */
-		    if (valNeeded)
-			ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
-			    value, &val, node);
-		    else
-			ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
-			    value, NULL, node);
-		    break;
-	    }
-	} else if (actxt->type == XML_SCHEMA_CTXT_PARSER) {
-	    switch (biType->builtInType) {
-		case XML_SCHEMAS_NOTATION:
-		    ret = xmlSchemaValidateNotation(NULL,
-			((xmlSchemaParserCtxtPtr) actxt)->schema, node,
-			value, &val, valNeeded);
-		    break;
-		default:
-		    /* ws = xmlSchemaGetWhiteSpaceFacetValue(type); */
-		    if (valNeeded)
-			ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
-			    value, &val, node);
-		    else
-			ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
-			    value, NULL, node);
-		    break;
-	    }
-	} else {
-	    /*
-	    * Validation via a public API is not implemented yet.
-	    */
-	    TODO
-	    goto internal_error;
-	}
-	if (ret != 0) {
-	    if (ret < 0) {
-		AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-		    "validating against a built-in type");
-		goto internal_error;
-	    }
-	    if (WXS_IS_LIST(type))
-		ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
-	    else
-		ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
-	}
-	if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
-	    /*
-	    * Check facets.
-	    */
-	    ret = xmlSchemaValidateFacets(actxt, node, type,
-		(xmlSchemaValType) biType->builtInType, value, val,
-		0, fireErrors);
-	    if (ret != 0) {
-		if (ret < 0) {
-		    AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-			"validating facets of atomic simple type");
-		    goto internal_error;
-		}
-		if (WXS_IS_LIST(type))
-		    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
-		else
-		    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
-	    }
-	}
-	if (fireErrors && (ret > 0))
-	    xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
-    } else if (WXS_IS_LIST(type)) {
-
-	xmlSchemaTypePtr itemType;
-	const xmlChar *cur, *end;
-	xmlChar *tmpValue = NULL;
-	unsigned long len = 0;
-	xmlSchemaValPtr prevVal = NULL, curVal = NULL;
-	/* 1.2.2 if {variety} is `list` then the string must be a sequence
-	* of white space separated tokens, each of which `match`es a literal
-	* in the `lexical space` of {item type definition}
-	*/
-	/*
-	* Note that XML_SCHEMAS_TYPE_NORMVALUENEEDED will be set if
-	* the list type has an enum or pattern facet.
-	*/
-	NORMALIZE(type);
-	/*
-	* VAL TODO: Optimize validation of empty values.
-	* VAL TODO: We do not have computed values for lists.
-	*/
-	itemType = WXS_LIST_ITEMTYPE(type);
-	cur = value;
-	do {
-	    while (IS_BLANK_CH(*cur))
-		cur++;
-	    end = cur;
-	    while ((*end != 0) && (!(IS_BLANK_CH(*end))))
-		end++;
-	    if (end == cur)
-		break;
-	    tmpValue = xmlStrndup(cur, end - cur);
-	    len++;
-
-	    if (valNeeded)
-		ret = xmlSchemaVCheckCVCSimpleType(actxt, node, itemType,
-		    tmpValue, &curVal, fireErrors, 0, 1);
-	    else
-		ret = xmlSchemaVCheckCVCSimpleType(actxt, node, itemType,
-		    tmpValue, NULL, fireErrors, 0, 1);
-	    FREE_AND_NULL(tmpValue);
-	    if (curVal != NULL) {
-		/*
-		* Add to list of computed values.
-		*/
-		if (val == NULL)
-		    val = curVal;
-		else
-		    xmlSchemaValueAppend(prevVal, curVal);
-		prevVal = curVal;
-		curVal = NULL;
-	    }
-	    if (ret != 0) {
-		if (ret < 0) {
-		    AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-			"validating an item of list simple type");
-		    goto internal_error;
-		}
-		ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
-		break;
-	    }
-	    cur = end;
-	} while (*cur != 0);
-	FREE_AND_NULL(tmpValue);
-	if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
-	    /*
-	    * Apply facets (pattern, enumeration).
-	    */
-	    ret = xmlSchemaValidateFacets(actxt, node, type,
-		XML_SCHEMAS_UNKNOWN, value, val,
-		len, fireErrors);
-	    if (ret != 0) {
-		if (ret < 0) {
-		    AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-			"validating facets of list simple type");
-		    goto internal_error;
-		}
-		ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
-	    }
-	}
-	if (fireErrors && (ret > 0)) {
-	    /*
-	    * Report the normalized value.
-	    */
-	    normalize = 1;
-	    NORMALIZE(type);
-	    xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
-	}
-    } else if (WXS_IS_UNION(type)) {
-	xmlSchemaTypeLinkPtr memberLink;
-	/*
-	* TODO: For all datatypes `derived` by `union`  whiteSpace does
-	* not apply directly; however, the normalization behavior of `union`
-	* types is controlled by the value of whiteSpace on that one of the
-	* `memberTypes` against which the `union` is successfully validated.
-	*
-	* This means that the value is normalized by the first validating
-	* member type, then the facets of the union type are applied. This
-	* needs changing of the value!
-	*/
-
-	/*
-	* 1.2.3 if {variety} is `union` then the string must `match` a
-	* literal in the `lexical space` of at least one member of
-	* {member type definitions}
-	*/
-	memberLink = xmlSchemaGetUnionSimpleTypeMemberTypes(type);
-	if (memberLink == NULL) {
-	    AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-		"union simple type has no member types");
-	    goto internal_error;
-	}
-	/*
-	* Always normalize union type values, since we currently
-	* cannot store the whitespace information with the value
-	* itself; otherwise a later value-comparison would be
-	* not possible.
-	*/
-	while (memberLink != NULL) {
-	    if (valNeeded)
-		ret = xmlSchemaVCheckCVCSimpleType(actxt, node,
-		    memberLink->type, value, &val, 0, 1, 0);
-	    else
-		ret = xmlSchemaVCheckCVCSimpleType(actxt, node,
-		    memberLink->type, value, NULL, 0, 1, 0);
-	    if (ret <= 0)
-		break;
-	    memberLink = memberLink->next;
-	}
-	if (ret != 0) {
-	    if (ret < 0) {
-		AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-		    "validating members of union simple type");
-		goto internal_error;
-	    }
-	    ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3;
-	}
-	/*
-	* Apply facets (pattern, enumeration).
-	*/
-	if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
-	    /*
-	    * The normalization behavior of `union` types is controlled by
-	    * the value of whiteSpace on that one of the `memberTypes`
-	    * against which the `union` is successfully validated.
-	    */
-	    NORMALIZE(memberLink->type);
-	    ret = xmlSchemaValidateFacets(actxt, node, type,
-		XML_SCHEMAS_UNKNOWN, value, val,
-		0, fireErrors);
-	    if (ret != 0) {
-		if (ret < 0) {
-		    AERROR_INT("xmlSchemaVCheckCVCSimpleType",
-			"validating facets of union simple type");
-		    goto internal_error;
-		}
-		ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3;
-	    }
-	}
-	if (fireErrors && (ret > 0))
-	    xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
-    }
-
-    if (normValue != NULL)
-	xmlFree(normValue);
-    if (ret == 0) {
-	if (retVal != NULL)
-	    *retVal = val;
-	else if (val != NULL)
-	    xmlSchemaFreeValue(val);
-    } else if (val != NULL)
-	xmlSchemaFreeValue(val);
-    return (ret);
-internal_error:
-    if (normValue != NULL)
-	xmlFree(normValue);
-    if (val != NULL)
-	xmlSchemaFreeValue(val);
-    return (-1);
-}
-
-static int
-xmlSchemaVExpandQName(xmlSchemaValidCtxtPtr vctxt,
-			   const xmlChar *value,
-			   const xmlChar **nsName,
-			   const xmlChar **localName)
-{
-    int ret = 0;
-
-    if ((nsName == NULL) || (localName == NULL))
-	return (-1);
-    *nsName = NULL;
-    *localName = NULL;
-
-    ret = xmlValidateQName(value, 1);
-    if (ret == -1)
-	return (-1);
-    if (ret > 0) {
-	xmlSchemaSimpleTypeErr(ACTXT_CAST vctxt,
-	    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, NULL,
-	    value, xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME), 1);
-	return (1);
-    }
-    {
-	xmlChar *local = NULL;
-	xmlChar *prefix;
-
-	/*
-	* NOTE: xmlSplitQName2 will return a duplicated
-	* string.
-	*/
-	local = xmlSplitQName2(value, &prefix);
-	if (local == NULL)
-	    *localName = xmlDictLookup(vctxt->dict, value, -1);
-	else {
-	    *localName = xmlDictLookup(vctxt->dict, local, -1);
-	    xmlFree(local);
-	}
-
-	*nsName = xmlSchemaLookupNamespace(vctxt, prefix);
-
-	if (prefix != NULL) {
-	    xmlFree(prefix);
-	    /*
-	    * A namespace must be found if the prefix is NOT NULL.
-	    */
-	    if (*nsName == NULL) {
-		xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, NULL,
-		    WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
-		    "The QName value '%s' has no "
-		    "corresponding namespace declaration in scope",
-		    value, NULL);
-		return (2);
-	    }
-	}
-    }
-    return (0);
-}
-
-static int
-xmlSchemaProcessXSIType(xmlSchemaValidCtxtPtr vctxt,
-			xmlSchemaAttrInfoPtr iattr,
-			xmlSchemaTypePtr *localType,
-			xmlSchemaElementPtr elemDecl)
-{
-    int ret = 0;
-    /*
-    * cvc-elt (3.3.4) : (4)
-    * AND
-    * Schema-Validity Assessment (Element) (cvc-assess-elt)
-    *   (1.2.1.2.1) - (1.2.1.2.4)
-    * Handle 'xsi:type'.
-    */
-    if (localType == NULL)
-	return (-1);
-    *localType = NULL;
-    if (iattr == NULL)
-	return (0);
-    else {
-	const xmlChar *nsName = NULL, *local = NULL;
-	/*
-	* TODO: We should report a *warning* that the type was overriden
-	* by the instance.
-	*/
-	ACTIVATE_ATTRIBUTE(iattr);
-	/*
-	* (cvc-elt) (3.3.4) : (4.1)
-	* (cvc-assess-elt) (1.2.1.2.2)
-	*/
-	ret = xmlSchemaVExpandQName(vctxt, iattr->value,
-	    &nsName, &local);
-	if (ret != 0) {
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidateElementByDeclaration",
-		    "calling xmlSchemaQNameExpand() to validate the "
-		    "attribute 'xsi:type'");
-		goto internal_error;
-	    }
-	    goto exit;
-	}
-	/*
-	* (cvc-elt) (3.3.4) : (4.2)
-	* (cvc-assess-elt) (1.2.1.2.3)
-	*/
-	*localType = xmlSchemaGetType(vctxt->schema, local, nsName);
-	if (*localType == NULL) {
-	    xmlChar *str = NULL;
-
-	    xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		XML_SCHEMAV_CVC_ELT_4_2, NULL,
-		WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
-		"The QName value '%s' of the xsi:type attribute does not "
-		"resolve to a type definition",
-		xmlSchemaFormatQName(&str, nsName, local), NULL);
-	    FREE_AND_NULL(str);
-	    ret = vctxt->err;
-	    goto exit;
-	}
-	if (elemDecl != NULL) {
-	    int set = 0;
-
-	    /*
-	    * SPEC cvc-elt (3.3.4) : (4.3) (Type Derivation OK)
-	    * "The `local type definition` must be validly
-	    * derived from the {type definition} given the union of
-	    * the {disallowed substitutions} and the {type definition}'s
-	    * {prohibited substitutions}, as defined in
-	    * Type Derivation OK (Complex) ($3.4.6)
-	    * (if it is a complex type definition),
-	    * or given {disallowed substitutions} as defined in Type
-	    * Derivation OK (Simple) ($3.14.6) (if it is a simple type
-	    * definition)."
-	    *
-	    * {disallowed substitutions}: the "block" on the element decl.
-	    * {prohibited substitutions}: the "block" on the type def.
-	    */
-	    /*
-	    * OPTIMIZE TODO: We could map types already evaluated
-	    * to be validly derived from other types to avoid checking
-	    * this over and over for the same types.
-	    */
-	    if ((elemDecl->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) ||
-		(elemDecl->subtypes->flags &
-		    XML_SCHEMAS_TYPE_BLOCK_EXTENSION))
-		set |= SUBSET_EXTENSION;
-
-	    if ((elemDecl->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) ||
-		(elemDecl->subtypes->flags &
-		    XML_SCHEMAS_TYPE_BLOCK_RESTRICTION))
-		set |= SUBSET_RESTRICTION;
-
-	    /*
-	    * REMOVED and CHANGED since this produced a parser context
-	    * which adds to the string dict of the schema. So this would
-	    * change the schema and we don't want this. We don't need
-	    * the parser context anymore.
-	    *
-	    * if ((vctxt->pctxt == NULL) &&
-	    *	(xmlSchemaCreatePCtxtOnVCtxt(vctxt) == -1))
-	    *	    return (-1);
-	    */
-
-	    if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST vctxt, *localType,
-		elemDecl->subtypes, set) != 0) {
-		xmlChar *str = NULL;
-
-		xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_CVC_ELT_4_3, NULL, NULL,
-		    "The type definition '%s', specified by xsi:type, is "
-		    "blocked or not validly derived from the type definition "
-		    "of the element declaration",
-		    xmlSchemaFormatQName(&str,
-			(*localType)->targetNamespace,
-			(*localType)->name),
-		    NULL);
-		FREE_AND_NULL(str);
-		ret = vctxt->err;
-		*localType = NULL;
-	    }
-	}
-    }
-exit:
-    ACTIVATE_ELEM;
-    return (ret);
-internal_error:
-    ACTIVATE_ELEM;
-    return (-1);
-}
-
-static int
-xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaElementPtr elemDecl = vctxt->inode->decl;
-    xmlSchemaTypePtr actualType;
-
-    /*
-    * cvc-elt (3.3.4) : 1
-    */
-    if (elemDecl == NULL) {
-	VERROR(XML_SCHEMAV_CVC_ELT_1, NULL,
-	    "No matching declaration available");
-        return (vctxt->err);
-    }
-    actualType = WXS_ELEM_TYPEDEF(elemDecl);
-    /*
-    * cvc-elt (3.3.4) : 2
-    */
-    if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) {
-	VERROR(XML_SCHEMAV_CVC_ELT_2, NULL,
-	    "The element declaration is abstract");
-        return (vctxt->err);
-    }
-    if (actualType == NULL) {
-	VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
-	    "The type definition is absent");
-	return (XML_SCHEMAV_CVC_TYPE_1);
-    }
-    if (vctxt->nbAttrInfos != 0) {
-	int ret;
-	xmlSchemaAttrInfoPtr iattr;
-	/*
-	* cvc-elt (3.3.4) : 3
-	* Handle 'xsi:nil'.
-	*/
-	iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-	    XML_SCHEMA_ATTR_INFO_META_XSI_NIL);
-	if (iattr) {
-	    ACTIVATE_ATTRIBUTE(iattr);
-	    /*
-	    * Validate the value.
-	    */
-	    ret = xmlSchemaVCheckCVCSimpleType(
-		ACTXT_CAST vctxt, NULL,
-		xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
-		iattr->value, &(iattr->val), 1, 0, 0);
-	    ACTIVATE_ELEM;
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidateElemDecl",
-		    "calling xmlSchemaVCheckCVCSimpleType() to "
-		    "validate the attribute 'xsi:nil'");
-		return (-1);
-	    }
-	    if (ret == 0) {
-		if ((elemDecl->flags & XML_SCHEMAS_ELEM_NILLABLE) == 0) {
-		    /*
-		    * cvc-elt (3.3.4) : 3.1
-		    */
-		    VERROR(XML_SCHEMAV_CVC_ELT_3_1, NULL,
-			"The element is not 'nillable'");
-		    /* Does not return an error on purpose. */
-		} else {
-		    if (xmlSchemaValueGetAsBoolean(iattr->val)) {
-			/*
-			* cvc-elt (3.3.4) : 3.2.2
-			*/
-			if ((elemDecl->flags & XML_SCHEMAS_ELEM_FIXED) &&
-			    (elemDecl->value != NULL)) {
-			    VERROR(XML_SCHEMAV_CVC_ELT_3_2_2, NULL,
-				"The element cannot be 'nilled' because "
-				"there is a fixed value constraint defined "
-				"for it");
-			     /* Does not return an error on purpose. */
-			} else
-			    vctxt->inode->flags |=
-				XML_SCHEMA_ELEM_INFO_NILLED;
-		    }
-		}
-	    }
-	}
-	/*
-	* cvc-elt (3.3.4) : 4
-	* Handle 'xsi:type'.
-	*/
-	iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-	    XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
-	if (iattr) {
-	    xmlSchemaTypePtr localType = NULL;
-
-	    ret = xmlSchemaProcessXSIType(vctxt, iattr, &localType,
-		elemDecl);
-	    if (ret != 0) {
-		if (ret == -1) {
-		    VERROR_INT("xmlSchemaValidateElemDecl",
-			"calling xmlSchemaProcessXSIType() to "
-			"process the attribute 'xsi:type'");
-		    return (-1);
-		}
-		/* Does not return an error on purpose. */
-	    }
-	    if (localType != NULL) {
-		vctxt->inode->flags |= XML_SCHEMA_ELEM_INFO_LOCAL_TYPE;
-		actualType = localType;
-	    }
-	}
-    }
-    /*
-    * IDC: Register identity-constraint XPath matchers.
-    */
-    if ((elemDecl->idcs != NULL) &&
-	(xmlSchemaIDCRegisterMatchers(vctxt, elemDecl) == -1))
-	    return (-1);
-    /*
-    * No actual type definition.
-    */
-    if (actualType == NULL) {
-	VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
-	    "The type definition is absent");
-	return (XML_SCHEMAV_CVC_TYPE_1);
-    }
-    /*
-    * Remember the actual type definition.
-    */
-    vctxt->inode->typeDef = actualType;
-
-    return (0);
-}
-
-static int
-xmlSchemaVAttributesSimple(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaAttrInfoPtr iattr;
-    int ret = 0, i;
-
-    /*
-    * SPEC cvc-type (3.1.1)
-    * "The attributes of must be empty, excepting those whose namespace
-    * name is identical to http://www.w3.org/2001/XMLSchema-instance and
-    * whose local name is one of type, nil, schemaLocation or
-    * noNamespaceSchemaLocation."
-    */
-    if (vctxt->nbAttrInfos == 0)
-	return (0);
-    for (i = 0; i < vctxt->nbAttrInfos; i++) {
-	iattr = vctxt->attrInfos[i];
-	if (! iattr->metaType) {
-	    ACTIVATE_ATTRIBUTE(iattr)
-	    xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
-		XML_SCHEMAV_CVC_TYPE_3_1_1, iattr, NULL);
-	    ret = XML_SCHEMAV_CVC_TYPE_3_1_1;
-        }
-    }
-    ACTIVATE_ELEM
-    return (ret);
-}
-
-/*
-* Cleanup currently used attribute infos.
-*/
-static void
-xmlSchemaClearAttrInfos(xmlSchemaValidCtxtPtr vctxt)
-{
-    int i;
-    xmlSchemaAttrInfoPtr attr;
-
-    if (vctxt->nbAttrInfos == 0)
-	return;
-    for (i = 0; i < vctxt->nbAttrInfos; i++) {
-	attr = vctxt->attrInfos[i];
-	if (attr->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES) {
-	    if (attr->localName != NULL)
-		xmlFree((xmlChar *) attr->localName);
-	    if (attr->nsName != NULL)
-		xmlFree((xmlChar *) attr->nsName);
-	}
-	if (attr->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
-	    if (attr->value != NULL)
-		xmlFree((xmlChar *) attr->value);
-	}
-	if (attr->val != NULL) {
-	    xmlSchemaFreeValue(attr->val);
-	    attr->val = NULL;
-	}
-	memset(attr, 0, sizeof(xmlSchemaAttrInfo));
-    }
-    vctxt->nbAttrInfos = 0;
-}
-
-/*
-* 3.4.4 Complex Type Definition Validation Rules
-*   Element Locally Valid (Complex Type) (cvc-complex-type)
-* 3.2.4 Attribute Declaration Validation Rules
-*   Validation Rule: Attribute Locally Valid (cvc-attribute)
-*   Attribute Locally Valid (Use) (cvc-au)
-*
-* Only "assessed" attribute information items will be visible to
-* IDCs. I.e. not "lax" (without declaration) and "skip" wild attributes.
-*/
-static int
-xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaTypePtr type = vctxt->inode->typeDef;
-    xmlSchemaItemListPtr attrUseList;
-    xmlSchemaAttributeUsePtr attrUse = NULL;
-    xmlSchemaAttributePtr attrDecl = NULL;
-    xmlSchemaAttrInfoPtr iattr, tmpiattr;
-    int i, j, found, nbAttrs, nbUses;
-    int xpathRes = 0, res, wildIDs = 0, fixed;
-    xmlNodePtr defAttrOwnerElem = NULL;
-
-    /*
-    * SPEC (cvc-attribute)
-    * (1) "The declaration must not be `absent` (see Missing
-    * Sub-components ($5.3) for how this can fail to be
-    * the case)."
-    * (2) "Its {type definition} must not be absent."
-    *
-    * NOTE (1) + (2): This is not handled here, since we currently do not
-    * allow validation against schemas which have missing sub-components.
-    *
-    * SPEC (cvc-complex-type)
-    * (3) "For each attribute information item in the element information
-    * item's [attributes] excepting those whose [namespace name] is
-    * identical to http://www.w3.org/2001/XMLSchema-instance and whose
-    * [local name] is one of type, nil, schemaLocation or
-    * noNamespaceSchemaLocation, the appropriate case among the following
-    * must be true:
-    *
-    */
-    attrUseList = (xmlSchemaItemListPtr) type->attrUses;
-    /*
-    * @nbAttrs is the number of attributes present in the instance.
-    */
-    nbAttrs = vctxt->nbAttrInfos;
-    if (attrUseList != NULL)
-	nbUses = attrUseList->nbItems;
-    else
-	nbUses = 0;
-    for (i = 0; i < nbUses; i++) {
-        found = 0;
-	attrUse = attrUseList->items[i];
-	attrDecl = WXS_ATTRUSE_DECL(attrUse);
-        for (j = 0; j < nbAttrs; j++) {
-	    iattr = vctxt->attrInfos[j];
-	    /*
-	    * SPEC (cvc-complex-type) (3)
-	    * Skip meta attributes.
-	    */
-	    if (iattr->metaType)
-		continue;
-	    if (iattr->localName[0] != attrDecl->name[0])
-		continue;
-	    if (!xmlStrEqual(iattr->localName, attrDecl->name))
-		continue;
-	    if (!xmlStrEqual(iattr->nsName, attrDecl->targetNamespace))
-		continue;
-	    found = 1;
-	    /*
-	    * SPEC (cvc-complex-type)
-	    * (3.1) "If there is among the {attribute uses} an attribute
-	    * use with an {attribute declaration} whose {name} matches
-	    * the attribute information item's [local name] and whose
-	    * {target namespace} is identical to the attribute information
-	    * item's [namespace name] (where an `absent` {target namespace}
-	    * is taken to be identical to a [namespace name] with no value),
-	    * then the attribute information must be `valid` with respect
-	    * to that attribute use as per Attribute Locally Valid (Use)
-	    * ($3.5.4). In this case the {attribute declaration} of that
-	    * attribute use is the `context-determined declaration` for the
-	    * attribute information item with respect to Schema-Validity
-	    * Assessment (Attribute) ($3.2.4) and
-	    * Assessment Outcome (Attribute) ($3.2.5).
-	    */
-	    iattr->state = XML_SCHEMAS_ATTR_ASSESSED;
-	    iattr->use = attrUse;
-	    /*
-	    * Context-determined declaration.
-	    */
-	    iattr->decl = attrDecl;
-	    iattr->typeDef = attrDecl->subtypes;
-	    break;
-	}
-
-	if (found)
-	    continue;
-
-	if (attrUse->occurs == XML_SCHEMAS_ATTR_USE_REQUIRED) {
-	    /*
-	    * Handle non-existent, required attributes.
-	    *
-	    * SPEC (cvc-complex-type)
-	    * (4) "The {attribute declaration} of each attribute use in
-	    * the {attribute uses} whose {required} is true matches one
-	    * of the attribute information items in the element information
-	    * item's [attributes] as per clause 3.1 above."
-	    */
-	    tmpiattr = xmlSchemaGetFreshAttrInfo(vctxt);
-	    if (tmpiattr == NULL) {
-		VERROR_INT(
-		    "xmlSchemaVAttributesComplex",
-		    "calling xmlSchemaGetFreshAttrInfo()");
-		return (-1);
-	    }
-	    tmpiattr->state = XML_SCHEMAS_ATTR_ERR_MISSING;
-	    tmpiattr->use = attrUse;
-	    tmpiattr->decl = attrDecl;
-	} else if ((attrUse->occurs == XML_SCHEMAS_ATTR_USE_OPTIONAL) &&
-	    ((attrUse->defValue != NULL) ||
-	     (attrDecl->defValue != NULL))) {
-	    /*
-	    * Handle non-existent, optional, default/fixed attributes.
-	    */
-	    tmpiattr = xmlSchemaGetFreshAttrInfo(vctxt);
-	    if (tmpiattr == NULL) {
-		VERROR_INT(
-		    "xmlSchemaVAttributesComplex",
-		    "calling xmlSchemaGetFreshAttrInfo()");
-		return (-1);
-	    }
-	    tmpiattr->state = XML_SCHEMAS_ATTR_DEFAULT;
-	    tmpiattr->use = attrUse;
-	    tmpiattr->decl = attrDecl;
-	    tmpiattr->typeDef = attrDecl->subtypes;
-	    tmpiattr->localName = attrDecl->name;
-	    tmpiattr->nsName = attrDecl->targetNamespace;
-	}
-    }
-
-    if (vctxt->nbAttrInfos == 0)
-	return (0);
-    /*
-    * Validate against the wildcard.
-    */
-    if (type->attributeWildcard != NULL) {
-	/*
-	* SPEC (cvc-complex-type)
-	* (3.2.1) "There must be an {attribute wildcard}."
-	*/
-	for (i = 0; i < nbAttrs; i++) {
-	    iattr = vctxt->attrInfos[i];
-	    /*
-	    * SPEC (cvc-complex-type) (3)
-	    * Skip meta attributes.
-	    */
-	    if (iattr->state != XML_SCHEMAS_ATTR_UNKNOWN)
-		continue;
-	    /*
-	    * SPEC (cvc-complex-type)
-	    * (3.2.2) "The attribute information item must be `valid` with
-	    * respect to it as defined in Item Valid (Wildcard) ($3.10.4)."
-	    *
-	    * SPEC Item Valid (Wildcard) (cvc-wildcard)
-	    * "... its [namespace name] must be `valid` with respect to
-	    * the wildcard constraint, as defined in Wildcard allows
-	    * Namespace Name ($3.10.4)."
-	    */
-	    if (xmlSchemaCheckCVCWildcardNamespace(type->attributeWildcard,
-		    iattr->nsName) == 0) {
-		/*
-		* Handle processContents.
-		*
-		* SPEC (cvc-wildcard):
-		* processContents | context-determined declaration:
-		* "strict"          "mustFind"
-		* "lax"             "none"
-		* "skip"            "skip"
-		*/
-		if (type->attributeWildcard->processContents ==
-		    XML_SCHEMAS_ANY_SKIP) {
-		     /*
-		    * context-determined declaration = "skip"
-		    *
-		    * SPEC PSVI Assessment Outcome (Attribute)
-		    * [validity] = "notKnown"
-		    * [validation attempted] = "none"
-		    */
-		    iattr->state = XML_SCHEMAS_ATTR_WILD_SKIP;
-		    continue;
-		}
-		/*
-		* Find an attribute declaration.
-		*/
-		iattr->decl = xmlSchemaGetAttributeDecl(vctxt->schema,
-		    iattr->localName, iattr->nsName);
-		if (iattr->decl != NULL) {
-		    iattr->state = XML_SCHEMAS_ATTR_ASSESSED;
-		    /*
-		    * SPEC (cvc-complex-type)
-		    * (5) "Let [Definition:]  the wild IDs be the set of
-		    * all attribute information item to which clause 3.2
-		    * applied and whose `validation` resulted in a
-		    * `context-determined declaration` of mustFind or no
-		    * `context-determined declaration` at all, and whose
-		    * [local name] and [namespace name] resolve (as
-		    * defined by QName resolution (Instance) ($3.15.4)) to
-		    * an attribute declaration whose {type definition} is
-		    * or is derived from ID. Then all of the following
-		    * must be true:"
-		    */
-		    iattr->typeDef = WXS_ATTR_TYPEDEF(iattr->decl);
-		    if (xmlSchemaIsDerivedFromBuiltInType(
-			iattr->typeDef, XML_SCHEMAS_ID)) {
-			/*
-			* SPEC (5.1) "There must be no more than one
-			* item in `wild IDs`."
-			*/
-			if (wildIDs != 0) {
-			    /* VAL TODO */
-			    iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID;
-			    TODO
-			    continue;
-			}
-			wildIDs++;
-			/*
-			* SPEC (cvc-complex-type)
-			* (5.2) "If `wild IDs` is non-empty, there must not
-			* be any attribute uses among the {attribute uses}
-			* whose {attribute declaration}'s {type definition}
-			* is or is derived from ID."
-			*/
-                        if (attrUseList != NULL) {
-                            for (j = 0; j < attrUseList->nbItems; j++) {
-                                if (xmlSchemaIsDerivedFromBuiltInType(
-                                    WXS_ATTRUSE_TYPEDEF(attrUseList->items[j]),
-                                    XML_SCHEMAS_ID)) {
-                                    /* URGENT VAL TODO: implement */
-                            iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID;
-                                    TODO
-                                    break;
-                                }
-                            }
-                        }
-		    }
-		} else if (type->attributeWildcard->processContents ==
-		    XML_SCHEMAS_ANY_LAX) {
-		    iattr->state = XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL;
-		    /*
-		    * SPEC PSVI Assessment Outcome (Attribute)
-		    * [validity] = "notKnown"
-		    * [validation attempted] = "none"
-		    */
-		} else {
-		    iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL;
-		}
-	    }
-	}
-    }
-
-    if (vctxt->nbAttrInfos == 0)
-	return (0);
-
-    /*
-    * Get the owner element; needed for creation of default attributes.
-    * This fixes bug #341337, reported by David Grohmann.
-    */
-    if (vctxt->options & XML_SCHEMA_VAL_VC_I_CREATE) {
-	xmlSchemaNodeInfoPtr ielem = vctxt->elemInfos[vctxt->depth];
-	if (ielem && ielem->node && ielem->node->doc)
-	    defAttrOwnerElem = ielem->node;
-    }
-    /*
-    * Validate values, create default attributes, evaluate IDCs.
-    */
-    for (i = 0; i < vctxt->nbAttrInfos; i++) {
-	iattr = vctxt->attrInfos[i];
-	/*
-	* VAL TODO: Note that we won't try to resolve IDCs to
-	* "lax" and "skip" validated attributes. Check what to
-	* do in this case.
-	*/
-	if ((iattr->state != XML_SCHEMAS_ATTR_ASSESSED) &&
-	    (iattr->state != XML_SCHEMAS_ATTR_DEFAULT))
-	    continue;
-	/*
-	* VAL TODO: What to do if the type definition is missing?
-	*/
-	if (iattr->typeDef == NULL) {
-	    iattr->state = XML_SCHEMAS_ATTR_ERR_NO_TYPE;
-	    continue;
-	}
-
-	ACTIVATE_ATTRIBUTE(iattr);
-	fixed = 0;
-	xpathRes = 0;
-
-	if (vctxt->xpathStates != NULL) {
-	    /*
-	    * Evaluate IDCs.
-	    */
-	    xpathRes = xmlSchemaXPathEvaluate(vctxt,
-		XML_ATTRIBUTE_NODE);
-	    if (xpathRes == -1) {
-		VERROR_INT("xmlSchemaVAttributesComplex",
-		    "calling xmlSchemaXPathEvaluate()");
-		goto internal_error;
-	    }
-	}
-
-	if (iattr->state == XML_SCHEMAS_ATTR_DEFAULT) {
-	    /*
-	    * Default/fixed attributes.
-	    * We need the value only if we need to resolve IDCs or
-	    * will create default attributes.
-	    */
-	    if ((xpathRes) || (defAttrOwnerElem)) {
-		if (iattr->use->defValue != NULL) {
-		    iattr->value = (xmlChar *) iattr->use->defValue;
-		    iattr->val = iattr->use->defVal;
-		} else {
-		    iattr->value = (xmlChar *) iattr->decl->defValue;
-		    iattr->val = iattr->decl->defVal;
-		}
-		/*
-		* IDCs will consume the precomputed default value,
-		* so we need to clone it.
-		*/
-		if (iattr->val == NULL) {
-		    VERROR_INT("xmlSchemaVAttributesComplex",
-			"default/fixed value on an attribute use was "
-			"not precomputed");
-		    goto internal_error;
-		}
-		iattr->val = xmlSchemaCopyValue(iattr->val);
-		if (iattr->val == NULL) {
-		    VERROR_INT("xmlSchemaVAttributesComplex",
-			"calling xmlSchemaCopyValue()");
-		    goto internal_error;
-		}
-	    }
-	    /*
-	    * PSVI: Add the default attribute to the current element.
-	    * VAL TODO: Should we use the *normalized* value? This currently
-	    *   uses the *initial* value.
-	    */
-
-	    if (defAttrOwnerElem) {
-		xmlChar *normValue;
-		const xmlChar *value;
-
-		value = iattr->value;
-		/*
-		* Normalize the value.
-		*/
-		normValue = xmlSchemaNormalizeValue(iattr->typeDef,
-		    iattr->value);
-		if (normValue != NULL)
-		    value = BAD_CAST normValue;
-
-		if (iattr->nsName == NULL) {
-		    if (xmlNewProp(defAttrOwnerElem,
-			iattr->localName, value) == NULL) {
-			VERROR_INT("xmlSchemaVAttributesComplex",
-			    "calling xmlNewProp()");
-			if (normValue != NULL)
-			    xmlFree(normValue);
-			goto internal_error;
-		    }
-		} else {
-		    xmlNsPtr ns;
-
-		    ns = xmlSearchNsByHref(defAttrOwnerElem->doc,
-			defAttrOwnerElem, iattr->nsName);
-		    if (ns == NULL) {
-			xmlChar prefix[12];
-			int counter = 0;
-
-			/*
-			* Create a namespace declaration on the validation
-			* root node if no namespace declaration is in scope.
-			*/
-			do {
-			    snprintf((char *) prefix, 12, "p%d", counter++);
-			    ns = xmlSearchNs(defAttrOwnerElem->doc,
-				defAttrOwnerElem, BAD_CAST prefix);
-			    if (counter > 1000) {
-				VERROR_INT(
-				    "xmlSchemaVAttributesComplex",
-				    "could not compute a ns prefix for a "
-				    "default/fixed attribute");
-				if (normValue != NULL)
-				    xmlFree(normValue);
-				goto internal_error;
-			    }
-			} while (ns != NULL);
-			ns = xmlNewNs(vctxt->validationRoot,
-			    iattr->nsName, BAD_CAST prefix);
-		    }
-		    /*
-		    * TODO:
-		    * http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0406.html
-		    * If we have QNames: do we need to ensure there's a
-		    * prefix defined for the QName?
-		    */
-		    xmlNewNsProp(defAttrOwnerElem, ns, iattr->localName, value);
-		}
-		if (normValue != NULL)
-		    xmlFree(normValue);
-	    }
-	    /*
-	    * Go directly to IDC evaluation.
-	    */
-	    goto eval_idcs;
-	}
-	/*
-	* Validate the value.
-	*/
-	if (vctxt->value != NULL) {
-	    /*
-	    * Free last computed value; just for safety reasons.
-	    */
-	    xmlSchemaFreeValue(vctxt->value);
-	    vctxt->value = NULL;
-	}
-	/*
-	* Note that the attribute *use* can be unavailable, if
-	* the attribute was a wild attribute.
-	*/
-	if ((iattr->decl->flags & XML_SCHEMAS_ATTR_FIXED) ||
-	    ((iattr->use != NULL) &&
-	     (iattr->use->flags & XML_SCHEMAS_ATTR_FIXED)))
-	    fixed = 1;
-	else
-	    fixed = 0;
-	/*
-	* SPEC (cvc-attribute)
-	* (3) "The item's `normalized value` must be locally `valid`
-	* with respect to that {type definition} as per
-	* String Valid ($3.14.4)."
-	*
-	* VAL TODO: Do we already have the
-	* "normalized attribute value" here?
-	*/
-	if (xpathRes || fixed) {
-	    iattr->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED;
-	    /*
-	    * Request a computed value.
-	    */
-	    res = xmlSchemaVCheckCVCSimpleType(
-		ACTXT_CAST vctxt,
-		iattr->node, iattr->typeDef, iattr->value, &(iattr->val),
-		1, 1, 0);
-	} else {
-	    res = xmlSchemaVCheckCVCSimpleType(
-		ACTXT_CAST vctxt,
-		iattr->node, iattr->typeDef, iattr->value, NULL,
-		1, 0, 0);
-	}
-
-	if (res != 0) {
-	    if (res == -1) {
-		VERROR_INT("xmlSchemaVAttributesComplex",
-		    "calling xmlSchemaStreamValidateSimpleTypeValue()");
-		goto internal_error;
-	    }
-	    iattr->state = XML_SCHEMAS_ATTR_INVALID_VALUE;
-	    /*
-	    * SPEC PSVI Assessment Outcome (Attribute)
-	    * [validity] = "invalid"
-	    */
-	    goto eval_idcs;
-	}
-
-	if (fixed) {
-	    /*
-	    * SPEC Attribute Locally Valid (Use) (cvc-au)
-	    * "For an attribute information item to be `valid`
-	    * with respect to an attribute use its *normalized*
-	    * value must match the *canonical* lexical
-	    * representation of the attribute use's {value
-	    * constraint}value, if it is present and fixed."
-	    *
-	    * VAL TODO: The requirement for the *canonical* value
-	    * will be removed in XML Schema 1.1.
-	    */
-	    /*
-	    * SPEC Attribute Locally Valid (cvc-attribute)
-	    * (4) "The item's *actual* value must match the *value* of
-	    * the {value constraint}, if it is present and fixed."
-	    */
-	    if (iattr->val == NULL) {
-		/* VAL TODO: A value was not precomputed. */
-		TODO
-		goto eval_idcs;
-	    }
-	    if ((iattr->use != NULL) &&
-		(iattr->use->defValue != NULL)) {
-		if (iattr->use->defVal == NULL) {
-		    /* VAL TODO: A default value was not precomputed. */
-		    TODO
-		    goto eval_idcs;
-		}
-		iattr->vcValue = iattr->use->defValue;
-		/*
-		if (xmlSchemaCompareValuesWhtsp(attr->val,
-		    (xmlSchemaWhitespaceValueType) ws,
-		    attr->use->defVal,
-		    (xmlSchemaWhitespaceValueType) ws) != 0) {
-		*/
-		if (! xmlSchemaAreValuesEqual(iattr->val, iattr->use->defVal))
-		    iattr->state = XML_SCHEMAS_ATTR_ERR_FIXED_VALUE;
-	    } else {
-		if (iattr->decl->defVal == NULL) {
-		    /* VAL TODO: A default value was not precomputed. */
-		    TODO
-		    goto eval_idcs;
-		}
-		iattr->vcValue = iattr->decl->defValue;
-		/*
-		if (xmlSchemaCompareValuesWhtsp(attr->val,
-		    (xmlSchemaWhitespaceValueType) ws,
-		    attrDecl->defVal,
-		    (xmlSchemaWhitespaceValueType) ws) != 0) {
-		*/
-		if (! xmlSchemaAreValuesEqual(iattr->val, iattr->decl->defVal))
-		    iattr->state = XML_SCHEMAS_ATTR_ERR_FIXED_VALUE;
-	    }
-	    /*
-	    * [validity] = "valid"
-	    */
-	}
-eval_idcs:
-	/*
-	* Evaluate IDCs.
-	*/
-	if (xpathRes) {
-	    if (xmlSchemaXPathProcessHistory(vctxt,
-		vctxt->depth +1) == -1) {
-		VERROR_INT("xmlSchemaVAttributesComplex",
-		    "calling xmlSchemaXPathEvaluate()");
-		goto internal_error;
-	    }
-	} else if (vctxt->xpathStates != NULL)
-	    xmlSchemaXPathPop(vctxt);
-    }
-
-    /*
-    * Report errors.
-    */
-    for (i = 0; i < vctxt->nbAttrInfos; i++) {
-	iattr = vctxt->attrInfos[i];
-	if ((iattr->state == XML_SCHEMAS_ATTR_META) ||
-	    (iattr->state == XML_SCHEMAS_ATTR_ASSESSED) ||
-	    (iattr->state == XML_SCHEMAS_ATTR_WILD_SKIP) ||
-	    (iattr->state == XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL))
-	    continue;
-	ACTIVATE_ATTRIBUTE(iattr);
-	switch (iattr->state) {
-	    case XML_SCHEMAS_ATTR_ERR_MISSING: {
-		    xmlChar *str = NULL;
-		    ACTIVATE_ELEM;
-		    xmlSchemaCustomErr(ACTXT_CAST vctxt,
-			XML_SCHEMAV_CVC_COMPLEX_TYPE_4, NULL, NULL,
-			"The attribute '%s' is required but missing",
-			xmlSchemaFormatQName(&str,
-			    iattr->decl->targetNamespace,
-			    iattr->decl->name),
-			NULL);
-		    FREE_AND_NULL(str)
-		    break;
-		}
-	    case XML_SCHEMAS_ATTR_ERR_NO_TYPE:
-		VERROR(XML_SCHEMAV_CVC_ATTRIBUTE_2, NULL,
-		    "The type definition is absent");
-		break;
-	    case XML_SCHEMAS_ATTR_ERR_FIXED_VALUE:
-		xmlSchemaCustomErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_CVC_AU, NULL, NULL,
-		    "The value '%s' does not match the fixed "
-		    "value constraint '%s'",
-		    iattr->value, iattr->vcValue);
-		break;
-	    case XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL:
-		VERROR(XML_SCHEMAV_CVC_WILDCARD, NULL,
-		    "No matching global attribute declaration available, but "
-		    "demanded by the strict wildcard");
-		break;
-	    case XML_SCHEMAS_ATTR_UNKNOWN:
-		if (iattr->metaType)
-		    break;
-		/*
-		* MAYBE VAL TODO: One might report different error messages
-		* for the following errors.
-		*/
-		if (type->attributeWildcard == NULL) {
-		    xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
-			XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, iattr, NULL);
-		} else {
-		    xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
-			XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, iattr, NULL);
-		}
-		break;
-	    default:
-		break;
-	}
-    }
-
-    ACTIVATE_ELEM;
-    return (0);
-internal_error:
-    ACTIVATE_ELEM;
-    return (-1);
-}
-
-static int
-xmlSchemaValidateElemWildcard(xmlSchemaValidCtxtPtr vctxt,
-			      int *skip)
-{
-    xmlSchemaWildcardPtr wild = (xmlSchemaWildcardPtr) vctxt->inode->decl;
-    /*
-    * The namespace of the element was already identified to be
-    * matching the wildcard.
-    */
-    if ((skip == NULL) || (wild == NULL) ||
-	(wild->type != XML_SCHEMA_TYPE_ANY)) {
-	VERROR_INT("xmlSchemaValidateElemWildcard",
-	    "bad arguments");
-	return (-1);
-    }
-    *skip = 0;
-    if (wild->processContents == XML_SCHEMAS_ANY_SKIP) {
-	/*
-	* URGENT VAL TODO: Either we need to position the stream to the
-	* next sibling, or walk the whole subtree.
-	*/
-	*skip = 1;
-	return (0);
-    }
-    {
-	xmlSchemaElementPtr decl = NULL;
-
-	decl = xmlSchemaGetElem(vctxt->schema,
-	    vctxt->inode->localName, vctxt->inode->nsName);
-	if (decl != NULL) {
-	    vctxt->inode->decl = decl;
-	    return (0);
-	}
-    }
-    if (wild->processContents == XML_SCHEMAS_ANY_STRICT) {
-	/* VAL TODO: Change to proper error code. */
-	VERROR(XML_SCHEMAV_CVC_ELT_1, NULL, /* WXS_BASIC_CAST wild */
-	    "No matching global element declaration available, but "
-	    "demanded by the strict wildcard");
-	return (vctxt->err);
-    }
-    if (vctxt->nbAttrInfos != 0) {
-	xmlSchemaAttrInfoPtr iattr;
-	/*
-	* SPEC Validation Rule: Schema-Validity Assessment (Element)
-	* (1.2.1.2.1) - (1.2.1.2.3 )
-	*
-	* Use the xsi:type attribute for the type definition.
-	*/
-	iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-	    XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
-	if (iattr != NULL) {
-	    if (xmlSchemaProcessXSIType(vctxt, iattr,
-		&(vctxt->inode->typeDef), NULL) == -1) {
-		VERROR_INT("xmlSchemaValidateElemWildcard",
-		    "calling xmlSchemaProcessXSIType() to "
-		    "process the attribute 'xsi:nil'");
-		return (-1);
-	    }
-	    /*
-	    * Don't return an error on purpose.
-	    */
-	    return (0);
-	}
-    }
-    /*
-    * SPEC Validation Rule: Schema-Validity Assessment (Element)
-    *
-    * Fallback to "anyType".
-    */
-    vctxt->inode->typeDef =
-	xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
-    return (0);
-}
-
-/*
-* xmlSchemaCheckCOSValidDefault:
-*
-* This will be called if: not nilled, no content and a default/fixed
-* value is provided.
-*/
-
-static int
-xmlSchemaCheckCOSValidDefault(xmlSchemaValidCtxtPtr vctxt,
-			      const xmlChar *value,
-			      xmlSchemaValPtr *val)
-{
-    int ret = 0;
-    xmlSchemaNodeInfoPtr inode = vctxt->inode;
-
-    /*
-    * cos-valid-default:
-    * Schema Component Constraint: Element Default Valid (Immediate)
-    * For a string to be a valid default with respect to a type
-    * definition the appropriate case among the following must be true:
-    */
-    if WXS_IS_COMPLEX(inode->typeDef) {
-	/*
-	* Complex type.
-	*
-	* SPEC (2.1) "its {content type} must be a simple type definition
-	* or mixed."
-	* SPEC (2.2.2) "If the {content type} is mixed, then the {content
-	* type}'s particle must be `emptiable` as defined by
-	* Particle Emptiable ($3.9.6)."
-	*/
-	if ((! WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) &&
-	    ((! WXS_HAS_MIXED_CONTENT(inode->typeDef)) ||
-	     (! WXS_EMPTIABLE(inode->typeDef)))) {
-	    ret = XML_SCHEMAP_COS_VALID_DEFAULT_2_1;
-	    /* NOTE that this covers (2.2.2) as well. */
-	    VERROR(ret, NULL,
-		"For a string to be a valid default, the type definition "
-		"must be a simple type or a complex type with simple content "
-		"or mixed content and a particle emptiable");
-	    return(ret);
-	}
-    }
-    /*
-    * 1 If the type definition is a simple type definition, then the string
-    * must be `valid` with respect to that definition as defined by String
-    * Valid ($3.14.4).
-    *
-    * AND
-    *
-    * 2.2.1 If the {content type} is a simple type definition, then the
-    * string must be `valid` with respect to that simple type definition
-    * as defined by String Valid ($3.14.4).
-    */
-    if (WXS_IS_SIMPLE(inode->typeDef)) {
-
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt,
-	    NULL, inode->typeDef, value, val, 1, 1, 0);
-
-    } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-
-	ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt,
-	    NULL, inode->typeDef->contentTypeDef, value, val, 1, 1, 0);
-    }
-    if (ret < 0) {
-	VERROR_INT("xmlSchemaCheckCOSValidDefault",
-	    "calling xmlSchemaVCheckCVCSimpleType()");
-    }
-    return (ret);
-}
-
-static void
-xmlSchemaVContentModelCallback(xmlSchemaValidCtxtPtr vctxt ATTRIBUTE_UNUSED,
-			       const xmlChar * name ATTRIBUTE_UNUSED,
-			       xmlSchemaElementPtr item,
-			       xmlSchemaNodeInfoPtr inode)
-{
-    inode->decl = item;
-#ifdef DEBUG_CONTENT
-    {
-	xmlChar *str = NULL;
-
-	if (item->type == XML_SCHEMA_TYPE_ELEMENT) {
-	    xmlGenericError(xmlGenericErrorContext,
-		"AUTOMATON callback for '%s' [declaration]\n",
-		xmlSchemaFormatQName(&str,
-		inode->localName, inode->nsName));
-	} else {
-	    xmlGenericError(xmlGenericErrorContext,
-		    "AUTOMATON callback for '%s' [wildcard]\n",
-		    xmlSchemaFormatQName(&str,
-		    inode->localName, inode->nsName));
-
-	}
-	FREE_AND_NULL(str)
-    }
-#endif
-}
-
-static int
-xmlSchemaValidatorPushElem(xmlSchemaValidCtxtPtr vctxt)
-{
-    vctxt->inode = xmlSchemaGetFreshElemInfo(vctxt);
-    if (vctxt->inode == NULL) {
-	VERROR_INT("xmlSchemaValidatorPushElem",
-	    "calling xmlSchemaGetFreshElemInfo()");
-	return (-1);
-    }
-    vctxt->nbAttrInfos = 0;
-    return (0);
-}
-
-static int
-xmlSchemaVCheckINodeDataType(xmlSchemaValidCtxtPtr vctxt,
-			     xmlSchemaNodeInfoPtr inode,
-			     xmlSchemaTypePtr type,
-			     const xmlChar *value)
-{
-    if (inode->flags & XML_SCHEMA_NODE_INFO_VALUE_NEEDED)
-	return (xmlSchemaVCheckCVCSimpleType(
-	    ACTXT_CAST vctxt, NULL,
-	    type, value, &(inode->val), 1, 1, 0));
-    else
-	return (xmlSchemaVCheckCVCSimpleType(
-	    ACTXT_CAST vctxt, NULL,
-	    type, value, NULL, 1, 0, 0));
-}
-
-
-
-/*
-* Process END of element.
-*/
-static int
-xmlSchemaValidatorPopElem(xmlSchemaValidCtxtPtr vctxt)
-{
-    int ret = 0;
-    xmlSchemaNodeInfoPtr inode = vctxt->inode;
-
-    if (vctxt->nbAttrInfos != 0)
-	xmlSchemaClearAttrInfos(vctxt);
-    if (inode->flags & XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED) {
-	/*
-	* This element was not expected;
-	* we will not validate child elements of broken parents.
-	* Skip validation of all content of the parent.
-	*/
-	vctxt->skipDepth = vctxt->depth -1;
-	goto end_elem;
-    }
-    if ((inode->typeDef == NULL) ||
-	(inode->flags & XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE)) {
-	/*
-	* 1. the type definition might be missing if the element was
-	*    error prone
-	* 2. it might be abstract.
-	*/
-	goto end_elem;
-    }
-    /*
-    * Check the content model.
-    */
-    if ((inode->typeDef->contentType == XML_SCHEMA_CONTENT_MIXED) ||
-	(inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS)) {
-
-	/*
-	* Workaround for "anyType".
-	*/
-	if (inode->typeDef->builtInType == XML_SCHEMAS_ANYTYPE)
-	    goto character_content;
-
-	if ((inode->flags & XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT) == 0) {
-	    xmlChar *values[10];
-	    int terminal, nbval = 10, nbneg;
-
-	    if (inode->regexCtxt == NULL) {
-		/*
-		* Create the regex context.
-		*/
-		inode->regexCtxt =
-		    xmlRegNewExecCtxt(inode->typeDef->contModel,
-		    (xmlRegExecCallbacks) xmlSchemaVContentModelCallback,
-		    vctxt);
-		if (inode->regexCtxt == NULL) {
-		    VERROR_INT("xmlSchemaValidatorPopElem",
-			"failed to create a regex context");
-		    goto internal_error;
-		}
-#ifdef DEBUG_AUTOMATA
-		xmlGenericError(xmlGenericErrorContext,
-		    "AUTOMATON create on '%s'\n", inode->localName);
-#endif
-	    }
-
-	    /*
-	     * Do not check further content if the node has been nilled
-	     */
-	    if (INODE_NILLED(inode)) {
-		ret = 0;
-#ifdef DEBUG_AUTOMATA
-		xmlGenericError(xmlGenericErrorContext,
-		    "AUTOMATON succeeded on nilled '%s'\n",
-		    inode->localName);
-#endif
-                goto skip_nilled;
-	    }
-
-	    /*
-	    * Get hold of the still expected content, since a further
-	    * call to xmlRegExecPushString() will loose this information.
-	    */
-	    xmlRegExecNextValues(inode->regexCtxt,
-		&nbval, &nbneg, &values[0], &terminal);
-	    ret = xmlRegExecPushString(inode->regexCtxt, NULL, NULL);
-	    if ((ret<0) || ((ret==0) && (!INODE_NILLED(inode)))) {
-		/*
-		* Still missing something.
-		*/
-		ret = 1;
-		inode->flags |=
-		    XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT;
-		xmlSchemaComplexTypeErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_ELEMENT_CONTENT, NULL, NULL,
-		    "Missing child element(s)",
-		    nbval, nbneg, values);
-#ifdef DEBUG_AUTOMATA
-		xmlGenericError(xmlGenericErrorContext,
-		    "AUTOMATON missing ERROR on '%s'\n",
-		    inode->localName);
-#endif
-	    } else {
-		/*
-		* Content model is satisfied.
-		*/
-		ret = 0;
-#ifdef DEBUG_AUTOMATA
-		xmlGenericError(xmlGenericErrorContext,
-		    "AUTOMATON succeeded on '%s'\n",
-		    inode->localName);
-#endif
-	    }
-
-	}
-    }
-
-skip_nilled:
-
-    if (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS)
-	goto end_elem;
-
-character_content:
-
-    if (vctxt->value != NULL) {
-	xmlSchemaFreeValue(vctxt->value);
-	vctxt->value = NULL;
-    }
-    /*
-    * Check character content.
-    */
-    if (inode->decl == NULL) {
-	/*
-	* Speedup if no declaration exists.
-	*/
-	if (WXS_IS_SIMPLE(inode->typeDef)) {
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		inode, inode->typeDef, inode->value);
-	} else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		inode, inode->typeDef->contentTypeDef,
-		inode->value);
-	}
-	if (ret < 0) {
-	    VERROR_INT("xmlSchemaValidatorPopElem",
-		"calling xmlSchemaVCheckCVCSimpleType()");
-	    goto internal_error;
-	}
-	goto end_elem;
-    }
-    /*
-    * cvc-elt (3.3.4) : 5
-    * The appropriate case among the following must be true:
-    */
-    /*
-    * cvc-elt (3.3.4) : 5.1
-    * If the declaration has a {value constraint},
-    * the item has neither element nor character [children] and
-    * clause 3.2 has not applied, then all of the following must be true:
-    */
-    if ((inode->decl->value != NULL) &&
-	(inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY) &&
-	(! INODE_NILLED(inode))) {
-	/*
-	* cvc-elt (3.3.4) : 5.1.1
-	* If the `actual type definition` is a `local type definition`
-	* then the canonical lexical representation of the {value constraint}
-	* value must be a valid default for the `actual type definition` as
-	* defined in Element Default Valid (Immediate) ($3.3.6).
-	*/
-	/*
-	* NOTE: 'local' above means types acquired by xsi:type.
-	* NOTE: Although the *canonical* value is stated, it is not
-	* relevant if canonical or not. Additionally XML Schema 1.1
-	* will removed this requirement as well.
-	*/
-	if (inode->flags & XML_SCHEMA_ELEM_INFO_LOCAL_TYPE) {
-
-	    ret = xmlSchemaCheckCOSValidDefault(vctxt,
-		inode->decl->value, &(inode->val));
-	    if (ret != 0) {
-		if (ret < 0) {
-		    VERROR_INT("xmlSchemaValidatorPopElem",
-			"calling xmlSchemaCheckCOSValidDefault()");
-		    goto internal_error;
-		}
-		goto end_elem;
-	    }
-	    /*
-	    * Stop here, to avoid redundant validation of the value
-	    * (see following).
-	    */
-	    goto default_psvi;
-	}
-	/*
-	* cvc-elt (3.3.4) : 5.1.2
-	* The element information item with the canonical lexical
-	* representation of the {value constraint} value used as its
-	* `normalized value` must be `valid` with respect to the
-	* `actual type definition` as defined by Element Locally Valid (Type)
-	* ($3.3.4).
-	*/
-	if (WXS_IS_SIMPLE(inode->typeDef)) {
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		inode, inode->typeDef, inode->decl->value);
-	} else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		inode, inode->typeDef->contentTypeDef,
-		inode->decl->value);
-	}
-	if (ret != 0) {
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidatorPopElem",
-		    "calling xmlSchemaVCheckCVCSimpleType()");
-		goto internal_error;
-	    }
-	    goto end_elem;
-	}
-
-default_psvi:
-	/*
-	* PSVI: Create a text node on the instance element.
-	*/
-	if ((vctxt->options & XML_SCHEMA_VAL_VC_I_CREATE) &&
-	    (inode->node != NULL)) {
-	    xmlNodePtr textChild;
-	    xmlChar *normValue;
-	    /*
-	    * VAL TODO: Normalize the value.
-	    */
-	    normValue = xmlSchemaNormalizeValue(inode->typeDef,
-		inode->decl->value);
-	    if (normValue != NULL) {
-		textChild = xmlNewText(BAD_CAST normValue);
-		xmlFree(normValue);
-	    } else
-		textChild = xmlNewText(inode->decl->value);
-	    if (textChild == NULL) {
-		VERROR_INT("xmlSchemaValidatorPopElem",
-		    "calling xmlNewText()");
-		goto internal_error;
-	    } else
-		xmlAddChild(inode->node, textChild);
-	}
-
-    } else if (! INODE_NILLED(inode)) {
-	/*
-	* 5.2.1 The element information item must be `valid` with respect
-	* to the `actual type definition` as defined by Element Locally
-	* Valid (Type) ($3.3.4).
-	*/
-	if (WXS_IS_SIMPLE(inode->typeDef)) {
-	     /*
-	    * SPEC (cvc-type) (3.1)
-	    * "If the type definition is a simple type definition, ..."
-	    * (3.1.3) "If clause 3.2 of Element Locally Valid
-	    * (Element) ($3.3.4) did not apply, then the `normalized value`
-	    * must be `valid` with respect to the type definition as defined
-	    * by String Valid ($3.14.4).
-	    */
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		    inode, inode->typeDef, inode->value);
-	} else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-	    /*
-	    * SPEC (cvc-type) (3.2) "If the type definition is a complex type
-	    * definition, then the element information item must be
-	    * `valid` with respect to the type definition as per
-	    * Element Locally Valid (Complex Type) ($3.4.4);"
-	    *
-	    * SPEC (cvc-complex-type) (2.2)
-	    * "If the {content type} is a simple type definition, ...
-	    * the `normalized value` of the element information item is
-	    * `valid` with respect to that simple type definition as
-	    * defined by String Valid ($3.14.4)."
-	    */
-	    ret = xmlSchemaVCheckINodeDataType(vctxt,
-		inode, inode->typeDef->contentTypeDef, inode->value);
-	}
-	if (ret != 0) {
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidatorPopElem",
-		    "calling xmlSchemaVCheckCVCSimpleType()");
-		goto internal_error;
-	    }
-	    goto end_elem;
-	}
-	/*
-	* 5.2.2 If there is a fixed {value constraint} and clause 3.2 has
-	* not applied, all of the following must be true:
-	*/
-	if ((inode->decl->value != NULL) &&
-	    (inode->decl->flags & XML_SCHEMAS_ELEM_FIXED)) {
-
-	    /*
-	    * TODO: We will need a computed value, when comparison is
-	    * done on computed values.
-	    */
-	    /*
-	    * 5.2.2.1 The element information item must have no element
-	    * information item [children].
-	    */
-	    if (inode->flags &
-		    XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT) {
-		ret = XML_SCHEMAV_CVC_ELT_5_2_2_1;
-		VERROR(ret, NULL,
-		    "The content must not containt element nodes since "
-		    "there is a fixed value constraint");
-		goto end_elem;
-	    } else {
-		/*
-		* 5.2.2.2 The appropriate case among the following must
-		* be true:
-		*/
-		if (WXS_HAS_MIXED_CONTENT(inode->typeDef)) {
-		    /*
-		    * 5.2.2.2.1 If the {content type} of the `actual type
-		    * definition` is mixed, then the *initial value* of the
-		    * item must match the canonical lexical representation
-		    * of the {value constraint} value.
-		    *
-		    * ... the *initial value* of an element information
-		    * item is the string composed of, in order, the
-		    * [character code] of each character information item in
-		    * the [children] of that element information item.
-		    */
-		    if (! xmlStrEqual(inode->value, inode->decl->value)){
-			/*
-			* VAL TODO: Report invalid & expected values as well.
-			* VAL TODO: Implement the canonical stuff.
-			*/
-			ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_1;
-			xmlSchemaCustomErr(ACTXT_CAST vctxt,
-			    ret, NULL, NULL,
-			    "The initial value '%s' does not match the fixed "
-			    "value constraint '%s'",
-			    inode->value, inode->decl->value);
-			goto end_elem;
-		    }
-		} else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-		    /*
-		    * 5.2.2.2.2 If the {content type} of the `actual type
-		    * definition` is a simple type definition, then the
-		    * *actual value* of the item must match the canonical
-		    * lexical representation of the {value constraint} value.
-		    */
-		    /*
-		    * VAL TODO: *actual value* is the normalized value, impl.
-		    *           this.
-		    * VAL TODO: Report invalid & expected values as well.
-		    * VAL TODO: Implement a comparison with the computed values.
-		    */
-		    if (! xmlStrEqual(inode->value,
-			    inode->decl->value)) {
-			ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_2;
-			xmlSchemaCustomErr(ACTXT_CAST vctxt,
-			    ret, NULL, NULL,
-			    "The actual value '%s' does not match the fixed "
-			    "value constraint '%s'",
-			    inode->value,
-			    inode->decl->value);
-			goto end_elem;
-		    }
-		}
-	    }
-	}
-    }
-
-end_elem:
-    if (vctxt->depth < 0) {
-	/* TODO: raise error? */
-	return (0);
-    }
-    if (vctxt->depth == vctxt->skipDepth)
-	vctxt->skipDepth = -1;
-    /*
-    * Evaluate the history of XPath state objects.
-    */
-    if (inode->appliedXPath &&
-	(xmlSchemaXPathProcessHistory(vctxt, vctxt->depth) == -1))
-	goto internal_error;
-    /*
-    * MAYBE TODO:
-    * SPEC (6) "The element information item must be `valid` with
-    * respect to each of the {identity-constraint definitions} as per
-    * Identity-constraint Satisfied ($3.11.4)."
-    */
-    /*
-    * PSVI TODO: If we expose IDC node-tables via PSVI then the tables
-    *   need to be built in any case.
-    *   We will currently build IDC node-tables and bubble them only if
-    *   keyrefs do exist.
-    */
-
-    /*
-    * Add the current IDC target-nodes to the IDC node-tables.
-    */
-    if ((inode->idcMatchers != NULL) &&
-	(vctxt->hasKeyrefs || vctxt->createIDCNodeTables))
-    {
-	if (xmlSchemaIDCFillNodeTables(vctxt, inode) == -1)
-	    goto internal_error;
-    }
-    /*
-    * Validate IDC keyrefs.
-    */
-    if (vctxt->inode->hasKeyrefs)
-	if (xmlSchemaCheckCVCIDCKeyRef(vctxt) == -1)
-	    goto internal_error;
-    /*
-    * Merge/free the IDC table.
-    */
-    if (inode->idcTable != NULL) {
-#ifdef DEBUG_IDC_NODE_TABLE
-	xmlSchemaDebugDumpIDCTable(stdout,
-	    inode->nsName,
-	    inode->localName,
-	    inode->idcTable);
-#endif
-	if ((vctxt->depth > 0) &&
-	    (vctxt->hasKeyrefs || vctxt->createIDCNodeTables))
-	{
-	    /*
-	    * Merge the IDC node table with the table of the parent node.
-	    */
-	    if (xmlSchemaBubbleIDCNodeTables(vctxt) == -1)
-		goto internal_error;
-	}
-    }
-    /*
-    * Clear the current ielem.
-    * VAL TODO: Don't free the PSVI IDC tables if they are
-    * requested for the PSVI.
-    */
-    xmlSchemaClearElemInfo(vctxt, inode);
-    /*
-    * Skip further processing if we are on the validation root.
-    */
-    if (vctxt->depth == 0) {
-	vctxt->depth--;
-	vctxt->inode = NULL;
-	return (0);
-    }
-    /*
-    * Reset the keyrefDepth if needed.
-    */
-    if (vctxt->aidcs != NULL) {
-	xmlSchemaIDCAugPtr aidc = vctxt->aidcs;
-	do {
-	    if (aidc->keyrefDepth == vctxt->depth) {
-		/*
-		* A 'keyrefDepth' of a key/unique IDC matches the current
-		* depth, this means that we are leaving the scope of the
-		* top-most keyref IDC which refers to this IDC.
-		*/
-		aidc->keyrefDepth = -1;
-	    }
-	    aidc = aidc->next;
-	} while (aidc != NULL);
-    }
-    vctxt->depth--;
-    vctxt->inode = vctxt->elemInfos[vctxt->depth];
-    /*
-    * VAL TODO: 7 If the element information item is the `validation root`, it must be
-    * `valid` per Validation Root Valid (ID/IDREF) ($3.3.4).
-    */
-    return (ret);
-
-internal_error:
-    vctxt->err = -1;
-    return (-1);
-}
-
-/*
-* 3.4.4 Complex Type Definition Validation Rules
-* Validation Rule: Element Locally Valid (Complex Type) (cvc-complex-type)
-*/
-static int
-xmlSchemaValidateChildElem(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlSchemaNodeInfoPtr pielem;
-    xmlSchemaTypePtr ptype;
-    int ret = 0;
-
-    if (vctxt->depth <= 0) {
-	VERROR_INT("xmlSchemaValidateChildElem",
-	    "not intended for the validation root");
-	return (-1);
-    }
-    pielem = vctxt->elemInfos[vctxt->depth -1];
-    if (pielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
-	pielem->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
-    /*
-    * Handle 'nilled' elements.
-    */
-    if (INODE_NILLED(pielem)) {
-	/*
-	* SPEC (cvc-elt) (3.3.4) : (3.2.1)
-	*/
-	ACTIVATE_PARENT_ELEM;
-	ret = XML_SCHEMAV_CVC_ELT_3_2_1;
-	VERROR(ret, NULL,
-	    "Neither character nor element content is allowed, "
-	    "because the element was 'nilled'");
-	ACTIVATE_ELEM;
-	goto unexpected_elem;
-    }
-
-    ptype = pielem->typeDef;
-
-    if (ptype->builtInType == XML_SCHEMAS_ANYTYPE) {
-	/*
-	* Workaround for "anyType": we have currently no content model
-	* assigned for "anyType", so handle it explicitely.
-	* "anyType" has an unbounded, lax "any" wildcard.
-	*/
-	vctxt->inode->decl = xmlSchemaGetElem(vctxt->schema,
-	    vctxt->inode->localName,
-	    vctxt->inode->nsName);
-
-	if (vctxt->inode->decl == NULL) {
-	    xmlSchemaAttrInfoPtr iattr;
-	    /*
-	    * Process "xsi:type".
-	    * SPEC (cvc-assess-elt) (1.2.1.2.1) - (1.2.1.2.3)
-	    */
-	    iattr = xmlSchemaGetMetaAttrInfo(vctxt,
-		XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
-	    if (iattr != NULL) {
-		ret = xmlSchemaProcessXSIType(vctxt, iattr,
-		    &(vctxt->inode->typeDef), NULL);
-		if (ret != 0) {
-		    if (ret == -1) {
-			VERROR_INT("xmlSchemaValidateChildElem",
-			    "calling xmlSchemaProcessXSIType() to "
-			    "process the attribute 'xsi:nil'");
-			return (-1);
-		    }
-		    return (ret);
-		}
-	    } else {
-		 /*
-		 * Fallback to "anyType".
-		 *
-		 * SPEC (cvc-assess-elt)
-		 * "If the item cannot be `strictly assessed`, [...]
-		 * an element information item's schema validity may be laxly
-		 * assessed if its `context-determined declaration` is not
-		 * skip by `validating` with respect to the `ur-type
-		 * definition` as per Element Locally Valid (Type) ($3.3.4)."
-		*/
-		vctxt->inode->typeDef =
-		    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
-	    }
-	}
-	return (0);
-    }
-
-    switch (ptype->contentType) {
-	case XML_SCHEMA_CONTENT_EMPTY:
-	    /*
-	    * SPEC (2.1) "If the {content type} is empty, then the
-	    * element information item has no character or element
-	    * information item [children]."
-	    */
-	    ACTIVATE_PARENT_ELEM
-	    ret = XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1;
-	    VERROR(ret, NULL,
-		"Element content is not allowed, "
-		"because the content type is empty");
-	    ACTIVATE_ELEM
-	    goto unexpected_elem;
-	    break;
-
-	case XML_SCHEMA_CONTENT_MIXED:
-        case XML_SCHEMA_CONTENT_ELEMENTS: {
-	    xmlRegExecCtxtPtr regexCtxt;
-	    xmlChar *values[10];
-	    int terminal, nbval = 10, nbneg;
-
-	    /* VAL TODO: Optimized "anyType" validation.*/
-
-	    if (ptype->contModel == NULL) {
-		VERROR_INT("xmlSchemaValidateChildElem",
-		    "type has elem content but no content model");
-		return (-1);
-	    }
-	    /*
-	    * Safety belf for evaluation if the cont. model was already
-	    * examined to be invalid.
-	    */
-	    if (pielem->flags & XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT) {
-		VERROR_INT("xmlSchemaValidateChildElem",
-		    "validating elem, but elem content is already invalid");
-		return (-1);
-	    }
-
-	    regexCtxt = pielem->regexCtxt;
-	    if (regexCtxt == NULL) {
-		/*
-		* Create the regex context.
-		*/
-		regexCtxt = xmlRegNewExecCtxt(ptype->contModel,
-		    (xmlRegExecCallbacks) xmlSchemaVContentModelCallback,
-		    vctxt);
-		if (regexCtxt == NULL) {
-		    VERROR_INT("xmlSchemaValidateChildElem",
-			"failed to create a regex context");
-		    return (-1);
-		}
-		pielem->regexCtxt = regexCtxt;
-#ifdef DEBUG_AUTOMATA
-		xmlGenericError(xmlGenericErrorContext, "AUTOMATA create on '%s'\n",
-		    pielem->localName);
-#endif
-	    }
-
-	    /*
-	    * SPEC (2.4) "If the {content type} is element-only or mixed,
-	    * then the sequence of the element information item's
-	    * element information item [children], if any, taken in
-	    * order, is `valid` with respect to the {content type}'s
-	    * particle, as defined in Element Sequence Locally Valid
-	    * (Particle) ($3.9.4)."
-	    */
-	    ret = xmlRegExecPushString2(regexCtxt,
-		vctxt->inode->localName,
-		vctxt->inode->nsName,
-		vctxt->inode);
-#ifdef DEBUG_AUTOMATA
-	    if (ret < 0)
-		xmlGenericError(xmlGenericErrorContext,
-		"AUTOMATON push ERROR for '%s' on '%s'\n",
-		vctxt->inode->localName, pielem->localName);
-	    else
-		xmlGenericError(xmlGenericErrorContext,
-		"AUTOMATON push OK for '%s' on '%s'\n",
-		vctxt->inode->localName, pielem->localName);
-#endif
-	    if (vctxt->err == XML_SCHEMAV_INTERNAL) {
-		VERROR_INT("xmlSchemaValidateChildElem",
-		    "calling xmlRegExecPushString2()");
-		return (-1);
-	    }
-	    if (ret < 0) {
-		xmlRegExecErrInfo(regexCtxt, NULL, &nbval, &nbneg,
-		    &values[0], &terminal);
-		xmlSchemaComplexTypeErr(ACTXT_CAST vctxt,
-		    XML_SCHEMAV_ELEMENT_CONTENT, NULL,NULL,
-		    "This element is not expected",
-		    nbval, nbneg, values);
-		ret = vctxt->err;
-		goto unexpected_elem;
-	    } else
-		ret = 0;
-	}
-	    break;
-	case XML_SCHEMA_CONTENT_SIMPLE:
-	case XML_SCHEMA_CONTENT_BASIC:
-	    ACTIVATE_PARENT_ELEM
-	    if (WXS_IS_COMPLEX(ptype)) {
-		/*
-		* SPEC (cvc-complex-type) (2.2)
-		* "If the {content type} is a simple type definition, then
-		* the element information item has no element information
-		* item [children], ..."
-		*/
-		ret = XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2;
-		VERROR(ret, NULL, "Element content is not allowed, "
-		    "because the content type is a simple type definition");
-	    } else {
-		/*
-		* SPEC (cvc-type) (3.1.2) "The element information item must
-		* have no element information item [children]."
-		*/
-		ret = XML_SCHEMAV_CVC_TYPE_3_1_2;
-		VERROR(ret, NULL, "Element content is not allowed, "
-		    "because the type definition is simple");
-	    }
-	    ACTIVATE_ELEM
-	    ret = vctxt->err;
-	    goto unexpected_elem;
-	    break;
-
-	default:
-	    break;
-    }
-    return (ret);
-unexpected_elem:
-    /*
-    * Pop this element and set the skipDepth to skip
-    * all further content of the parent element.
-    */
-    vctxt->skipDepth = vctxt->depth;
-    vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED;
-    pielem->flags |= XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT;
-    return (ret);
-}
-
-#define XML_SCHEMA_PUSH_TEXT_PERSIST 1
-#define XML_SCHEMA_PUSH_TEXT_CREATED 2
-#define XML_SCHEMA_PUSH_TEXT_VOLATILE 3
-
-static int
-xmlSchemaVPushText(xmlSchemaValidCtxtPtr vctxt,
-		  int nodeType, const xmlChar *value, int len,
-		  int mode, int *consumed)
-{
-    /*
-    * Unfortunately we have to duplicate the text sometimes.
-    * OPTIMIZE: Maybe we could skip it, if:
-    *   1. content type is simple
-    *   2. whitespace is "collapse"
-    *   3. it consists of whitespace only
-    *
-    * Process character content.
-    */
-    if (consumed != NULL)
-	*consumed = 0;
-    if (INODE_NILLED(vctxt->inode)) {
-	/*
-	* SPEC cvc-elt (3.3.4 - 3.2.1)
-	* "The element information item must have no character or
-	* element information item [children]."
-	*/
-	VERROR(XML_SCHEMAV_CVC_ELT_3_2_1, NULL,
-	    "Neither character nor element content is allowed "
-	    "because the element is 'nilled'");
-	return (vctxt->err);
-    }
-    /*
-    * SPEC (2.1) "If the {content type} is empty, then the
-    * element information item has no character or element
-    * information item [children]."
-    */
-    if (vctxt->inode->typeDef->contentType ==
-	    XML_SCHEMA_CONTENT_EMPTY) {
-	VERROR(XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, NULL,
-	    "Character content is not allowed, "
-	    "because the content type is empty");
-	return (vctxt->err);
-    }
-
-    if (vctxt->inode->typeDef->contentType ==
-	    XML_SCHEMA_CONTENT_ELEMENTS) {
-	if ((nodeType != XML_TEXT_NODE) ||
-	    (! xmlSchemaIsBlank((xmlChar *) value, len))) {
-	    /*
-	    * SPEC cvc-complex-type (2.3)
-	    * "If the {content type} is element-only, then the
-	    * element information item has no character information
-	    * item [children] other than those whose [character
-	    * code] is defined as a white space in [XML 1.0 (Second
-	    * Edition)]."
-	    */
-	    VERROR(XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, NULL,
-		"Character content other than whitespace is not allowed "
-		"because the content type is 'element-only'");
-	    return (vctxt->err);
-	}
-	return (0);
-    }
-
-    if ((value == NULL) || (value[0] == 0))
-	return (0);
-    /*
-    * Save the value.
-    * NOTE that even if the content type is *mixed*, we need the
-    * *initial value* for default/fixed value constraints.
-    */
-    if ((vctxt->inode->typeDef->contentType == XML_SCHEMA_CONTENT_MIXED) &&
-	((vctxt->inode->decl == NULL) ||
-	(vctxt->inode->decl->value == NULL)))
-	return (0);
-
-    if (vctxt->inode->value == NULL) {
-	/*
-	* Set the value.
-	*/
-	switch (mode) {
-	    case XML_SCHEMA_PUSH_TEXT_PERSIST:
-		/*
-		* When working on a tree.
-		*/
-		vctxt->inode->value = value;
-		break;
-	    case XML_SCHEMA_PUSH_TEXT_CREATED:
-		/*
-		* When working with the reader.
-		* The value will be freed by the element info.
-		*/
-		vctxt->inode->value = value;
-		if (consumed != NULL)
-		    *consumed = 1;
-		vctxt->inode->flags |=
-		    XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
-		break;
-	    case XML_SCHEMA_PUSH_TEXT_VOLATILE:
-		/*
-		* When working with SAX.
-		* The value will be freed by the element info.
-		*/
-		if (len != -1)
-		    vctxt->inode->value = BAD_CAST xmlStrndup(value, len);
-		else
-		    vctxt->inode->value = BAD_CAST xmlStrdup(value);
-		vctxt->inode->flags |=
-		    XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
-		break;
-	    default:
-		break;
-	}
-    } else {
-	if (len < 0)
-	    len = xmlStrlen(value);
-	/*
-	* Concat the value.
-	*/
-	if (vctxt->inode->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
-	    vctxt->inode->value = BAD_CAST xmlStrncat(
-		(xmlChar *) vctxt->inode->value, value, len);
-	} else {
-	    vctxt->inode->value =
-		BAD_CAST xmlStrncatNew(vctxt->inode->value, value, len);
-	    vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
-	}
-    }
-
-    return (0);
-}
-
-static int
-xmlSchemaValidateElem(xmlSchemaValidCtxtPtr vctxt)
-{
-    int ret = 0;
-
-    if ((vctxt->skipDepth != -1) &&
-	(vctxt->depth >= vctxt->skipDepth)) {
-	VERROR_INT("xmlSchemaValidateElem",
-	    "in skip-state");
-	goto internal_error;
-    }
-    if (vctxt->xsiAssemble) {
-	/*
-	* We will stop validation if there was an error during
-	* dynamic schema construction.
-	* Note that we simply set @skipDepth to 0, this could
-	* mean that a streaming document via SAX would be
-	* still read to the end but it won't be validated any more.
-	* TODO: If we are sure how to stop the validation at once
-	*   for all input scenarios, then this should be changed to
-	*   instantly stop the validation.
-	*/
-	ret = xmlSchemaAssembleByXSI(vctxt);
-	if (ret != 0) {
-	    if (ret == -1)
-		goto internal_error;
-	    vctxt->skipDepth = 0;
-	    return(ret);
-	}
-        /*
-         * Augment the IDC definitions for the main schema and all imported ones
-         * NOTE: main schema is the first in the imported list
-         */
-        xmlHashScan(vctxt->schema->schemasImports,(xmlHashScanner)xmlSchemaAugmentImportedIDC, vctxt);
-    }
-    if (vctxt->depth > 0) {
-	/*
-	* Validate this element against the content model
-	* of the parent.
-	*/
-	ret = xmlSchemaValidateChildElem(vctxt);
-	if (ret != 0) {
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidateElem",
-		    "calling xmlSchemaStreamValidateChildElement()");
-		goto internal_error;
-	    }
-	    goto exit;
-	}
-	if (vctxt->depth == vctxt->skipDepth)
-	    goto exit;
-	if ((vctxt->inode->decl == NULL) &&
-	    (vctxt->inode->typeDef == NULL)) {
-	    VERROR_INT("xmlSchemaValidateElem",
-		"the child element was valid but neither the "
-		"declaration nor the type was set");
-	    goto internal_error;
-	}
-    } else {
-	/*
-	* Get the declaration of the validation root.
-	*/
-	vctxt->inode->decl = xmlSchemaGetElem(vctxt->schema,
-	    vctxt->inode->localName,
-	    vctxt->inode->nsName);
-	if (vctxt->inode->decl == NULL) {
-	    ret = XML_SCHEMAV_CVC_ELT_1;
-	    VERROR(ret, NULL,
-		"No matching global declaration available "
-		"for the validation root");
-	    goto exit;
-	}
-    }
-
-    if (vctxt->inode->decl == NULL)
-	goto type_validation;
-
-    if (vctxt->inode->decl->type == XML_SCHEMA_TYPE_ANY) {
-	int skip;
-	/*
-	* Wildcards.
-	*/
-	ret = xmlSchemaValidateElemWildcard(vctxt, &skip);
-	if (ret != 0) {
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaValidateElem",
-		    "calling xmlSchemaValidateElemWildcard()");
-		goto internal_error;
-	    }
-	    goto exit;
-	}
-	if (skip) {
-	    vctxt->skipDepth = vctxt->depth;
-	    goto exit;
-	}
-	/*
-	* The declaration might be set by the wildcard validation,
-	* when the processContents is "lax" or "strict".
-	*/
-	if (vctxt->inode->decl->type != XML_SCHEMA_TYPE_ELEMENT) {
-	    /*
-	    * Clear the "decl" field to not confuse further processing.
-	    */
-	    vctxt->inode->decl = NULL;
-	    goto type_validation;
-	}
-    }
-    /*
-    * Validate against the declaration.
-    */
-    ret = xmlSchemaValidateElemDecl(vctxt);
-    if (ret != 0) {
-	if (ret < 0) {
-	    VERROR_INT("xmlSchemaValidateElem",
-		"calling xmlSchemaValidateElemDecl()");
-	    goto internal_error;
-	}
-	goto exit;
-    }
-    /*
-    * Validate against the type definition.
-    */
-type_validation:
-
-    if (vctxt->inode->typeDef == NULL) {
-	vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
-	ret = XML_SCHEMAV_CVC_TYPE_1;
-	VERROR(ret, NULL,
-	    "The type definition is absent");
-	goto exit;
-    }
-    if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) {
-	vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
-	ret = XML_SCHEMAV_CVC_TYPE_2;
-	    VERROR(ret, NULL,
-	    "The type definition is abstract");
-	goto exit;
-    }
-    /*
-    * Evaluate IDCs. Do it here, since new IDC matchers are registered
-    * during validation against the declaration. This must be done
-    * _before_ attribute validation.
-    */
-    if (vctxt->xpathStates != NULL) {
-	ret = xmlSchemaXPathEvaluate(vctxt, XML_ELEMENT_NODE);
-	vctxt->inode->appliedXPath = 1;
-	if (ret == -1) {
-	    VERROR_INT("xmlSchemaValidateElem",
-		"calling xmlSchemaXPathEvaluate()");
-	    goto internal_error;
-	}
-    }
-    /*
-    * Validate attributes.
-    */
-    if (WXS_IS_COMPLEX(vctxt->inode->typeDef)) {
-	if ((vctxt->nbAttrInfos != 0) ||
-	    (vctxt->inode->typeDef->attrUses != NULL)) {
-
-	    ret = xmlSchemaVAttributesComplex(vctxt);
-	}
-    } else if (vctxt->nbAttrInfos != 0) {
-
-	ret = xmlSchemaVAttributesSimple(vctxt);
-    }
-    /*
-    * Clear registered attributes.
-    */
-    if (vctxt->nbAttrInfos != 0)
-	xmlSchemaClearAttrInfos(vctxt);
-    if (ret == -1) {
-	VERROR_INT("xmlSchemaValidateElem",
-	    "calling attributes validation");
-	goto internal_error;
-    }
-    /*
-    * Don't return an error if attributes are invalid on purpose.
-    */
-    ret = 0;
-
-exit:
-    if (ret != 0)
-	vctxt->skipDepth = vctxt->depth;
-    return (ret);
-internal_error:
-    return (-1);
-}
-
-#ifdef XML_SCHEMA_READER_ENABLED
-static int
-xmlSchemaVReaderWalk(xmlSchemaValidCtxtPtr vctxt)
-{
-    const int WHTSP = 13, SIGN_WHTSP = 14, END_ELEM = 15;
-    int depth, nodeType, ret = 0, consumed;
-    xmlSchemaNodeInfoPtr ielem;
-
-    vctxt->depth = -1;
-    ret = xmlTextReaderRead(vctxt->reader);
-    /*
-    * Move to the document element.
-    */
-    while (ret == 1) {
-	nodeType = xmlTextReaderNodeType(vctxt->reader);
-	if (nodeType == XML_ELEMENT_NODE)
-	    goto root_found;
-	ret = xmlTextReaderRead(vctxt->reader);
-    }
-    goto exit;
-
-root_found:
-
-    do {
-	depth = xmlTextReaderDepth(vctxt->reader);
-	nodeType = xmlTextReaderNodeType(vctxt->reader);
-
-	if (nodeType == XML_ELEMENT_NODE) {
-
-	    vctxt->depth++;
-	    if (xmlSchemaValidatorPushElem(vctxt) == -1) {
-		VERROR_INT("xmlSchemaVReaderWalk",
-		    "calling xmlSchemaValidatorPushElem()");
-		goto internal_error;
-	    }
-	    ielem = vctxt->inode;
-	    ielem->localName = xmlTextReaderLocalName(vctxt->reader);
-	    ielem->nsName = xmlTextReaderNamespaceUri(vctxt->reader);
-	    ielem->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES;
-	    /*
-	    * Is the element empty?
-	    */
-	    ret = xmlTextReaderIsEmptyElement(vctxt->reader);
-	    if (ret == -1) {
-		VERROR_INT("xmlSchemaVReaderWalk",
-		    "calling xmlTextReaderIsEmptyElement()");
-		goto internal_error;
-	    }
-	    if (ret) {
-		ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
-	    }
-	    /*
-	    * Register attributes.
-	    */
-	    vctxt->nbAttrInfos = 0;
-	    ret = xmlTextReaderMoveToFirstAttribute(vctxt->reader);
-	    if (ret == -1) {
-		VERROR_INT("xmlSchemaVReaderWalk",
-		    "calling xmlTextReaderMoveToFirstAttribute()");
-		goto internal_error;
-	    }
-	    if (ret == 1) {
-		do {
-		    /*
-		    * VAL TODO: How do we know that the reader works on a
-		    * node tree, to be able to pass a node here?
-		    */
-		    if (xmlSchemaValidatorPushAttribute(vctxt, NULL,
-			(const xmlChar *) xmlTextReaderLocalName(vctxt->reader),
-			xmlTextReaderNamespaceUri(vctxt->reader), 1,
-			xmlTextReaderValue(vctxt->reader), 1) == -1) {
-
-			VERROR_INT("xmlSchemaVReaderWalk",
-			    "calling xmlSchemaValidatorPushAttribute()");
-			goto internal_error;
-		    }
-		    ret = xmlTextReaderMoveToNextAttribute(vctxt->reader);
-		    if (ret == -1) {
-			VERROR_INT("xmlSchemaVReaderWalk",
-			    "calling xmlTextReaderMoveToFirstAttribute()");
-			goto internal_error;
-		    }
-		} while (ret == 1);
-		/*
-		* Back to element position.
-		*/
-		ret = xmlTextReaderMoveToElement(vctxt->reader);
-		if (ret == -1) {
-		    VERROR_INT("xmlSchemaVReaderWalk",
-			"calling xmlTextReaderMoveToElement()");
-		    goto internal_error;
-		}
-	    }
-	    /*
-	    * Validate the element.
-	    */
-	    ret= xmlSchemaValidateElem(vctxt);
-	    if (ret != 0) {
-		if (ret == -1) {
-		    VERROR_INT("xmlSchemaVReaderWalk",
-			"calling xmlSchemaValidateElem()");
-		    goto internal_error;
-		}
-		goto exit;
-	    }
-	    if (vctxt->depth == vctxt->skipDepth) {
-		int curDepth;
-		/*
-		* Skip all content.
-		*/
-		if ((ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY) == 0) {
-		    ret = xmlTextReaderRead(vctxt->reader);
-		    curDepth = xmlTextReaderDepth(vctxt->reader);
-		    while ((ret == 1) && (curDepth != depth)) {
-			ret = xmlTextReaderRead(vctxt->reader);
-			curDepth = xmlTextReaderDepth(vctxt->reader);
-		    }
-		    if (ret < 0) {
-			/*
-			* VAL TODO: A reader error occured; what to do here?
-			*/
-			ret = 1;
-			goto exit;
-		    }
-		}
-		goto leave_elem;
-	    }
-	    /*
-	    * READER VAL TODO: Is an END_ELEM really never called
-	    * if the elem is empty?
-	    */
-	    if (ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
-		goto leave_elem;
-	} else if (nodeType == END_ELEM) {
-	    /*
-	    * Process END of element.
-	    */
-leave_elem:
-	    ret = xmlSchemaValidatorPopElem(vctxt);
-	    if (ret != 0) {
-		if (ret < 0) {
-		    VERROR_INT("xmlSchemaVReaderWalk",
-			"calling xmlSchemaValidatorPopElem()");
-		    goto internal_error;
-		}
-		goto exit;
-	    }
-	    if (vctxt->depth >= 0)
-		ielem = vctxt->inode;
-	    else
-		ielem = NULL;
-	} else if ((nodeType == XML_TEXT_NODE) ||
-	    (nodeType == XML_CDATA_SECTION_NODE) ||
-	    (nodeType == WHTSP) ||
-	    (nodeType == SIGN_WHTSP)) {
-	    /*
-	    * Process character content.
-	    */
-	    xmlChar *value;
-
-	    if ((nodeType == WHTSP) || (nodeType == SIGN_WHTSP))
-		nodeType = XML_TEXT_NODE;
-
-	    value = xmlTextReaderValue(vctxt->reader);
-	    ret = xmlSchemaVPushText(vctxt, nodeType, BAD_CAST value,
-		-1, XML_SCHEMA_PUSH_TEXT_CREATED, &consumed);
-	    if (! consumed)
-		xmlFree(value);
-	    if (ret == -1) {
-		VERROR_INT("xmlSchemaVReaderWalk",
-		    "calling xmlSchemaVPushText()");
-		goto internal_error;
-	    }
-	} else if ((nodeType == XML_ENTITY_NODE) ||
-	    (nodeType == XML_ENTITY_REF_NODE)) {
-	    /*
-	    * VAL TODO: What to do with entities?
-	    */
-	    TODO
-	}
-	/*
-	* Read next node.
-	*/
-	ret = xmlTextReaderRead(vctxt->reader);
-    } while (ret == 1);
-
-exit:
-    return (ret);
-internal_error:
-    return (-1);
-}
-#endif
-
-/************************************************************************
- *									*
- *			SAX validation handlers				*
- *									*
- ************************************************************************/
-
-/*
-* Process text content.
-*/
-static void
-xmlSchemaSAXHandleText(void *ctx,
-		       const xmlChar * ch,
-		       int len)
-{
-    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
-    if (vctxt->depth < 0)
-	return;
-    if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
-	return;
-    if (vctxt->inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
-	vctxt->inode->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
-    if (xmlSchemaVPushText(vctxt, XML_TEXT_NODE, ch, len,
-	XML_SCHEMA_PUSH_TEXT_VOLATILE, NULL) == -1) {
-	VERROR_INT("xmlSchemaSAXHandleCDataSection",
-	    "calling xmlSchemaVPushText()");
-	vctxt->err = -1;
-	xmlStopParser(vctxt->parserCtxt);
-    }
-}
-
-/*
-* Process CDATA content.
-*/
-static void
-xmlSchemaSAXHandleCDataSection(void *ctx,
-			     const xmlChar * ch,
-			     int len)
-{
-    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
-    if (vctxt->depth < 0)
-	return;
-    if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
-	return;
-    if (vctxt->inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
-	vctxt->inode->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
-    if (xmlSchemaVPushText(vctxt, XML_CDATA_SECTION_NODE, ch, len,
-	XML_SCHEMA_PUSH_TEXT_VOLATILE, NULL) == -1) {
-	VERROR_INT("xmlSchemaSAXHandleCDataSection",
-	    "calling xmlSchemaVPushText()");
-	vctxt->err = -1;
-	xmlStopParser(vctxt->parserCtxt);
-    }
-}
-
-static void
-xmlSchemaSAXHandleReference(void *ctx ATTRIBUTE_UNUSED,
-			    const xmlChar * name ATTRIBUTE_UNUSED)
-{
-    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
-    if (vctxt->depth < 0)
-	return;
-    if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
-	return;
-    /* SAX VAL TODO: What to do here? */
-    TODO
-}
-
-static void
-xmlSchemaSAXHandleStartElementNs(void *ctx,
-				 const xmlChar * localname,
-				 const xmlChar * prefix ATTRIBUTE_UNUSED,
-				 const xmlChar * URI,
-				 int nb_namespaces,
-				 const xmlChar ** namespaces,
-				 int nb_attributes,
-				 int nb_defaulted ATTRIBUTE_UNUSED,
-				 const xmlChar ** attributes)
-{
-    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-    int ret;
-    xmlSchemaNodeInfoPtr ielem;
-    int i, j;
-
-    /*
-    * SAX VAL TODO: What to do with nb_defaulted?
-    */
-    /*
-    * Skip elements if inside a "skip" wildcard or invalid.
-    */
-    vctxt->depth++;
-    if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
-	return;
-    /*
-    * Push the element.
-    */
-    if (xmlSchemaValidatorPushElem(vctxt) == -1) {
-	VERROR_INT("xmlSchemaSAXHandleStartElementNs",
-	    "calling xmlSchemaValidatorPushElem()");
-	goto internal_error;
-    }
-    ielem = vctxt->inode;
-    /*
-    * TODO: Is this OK?
-    */
-    ielem->nodeLine = xmlSAX2GetLineNumber(vctxt->parserCtxt);
-    ielem->localName = localname;
-    ielem->nsName = URI;
-    ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
-    /*
-    * Register namespaces on the elem info.
-    */
-    if (nb_namespaces != 0) {
-	/*
-	* Although the parser builds its own namespace list,
-	* we have no access to it, so we'll use an own one.
-	*/
-        for (i = 0, j = 0; i < nb_namespaces; i++, j += 2) {
-	    /*
-	    * Store prefix and namespace name.
-	    */
-	    if (ielem->nsBindings == NULL) {
-		ielem->nsBindings =
-		    (const xmlChar **) xmlMalloc(10 *
-			sizeof(const xmlChar *));
-		if (ielem->nsBindings == NULL) {
-		    xmlSchemaVErrMemory(vctxt,
-			"allocating namespace bindings for SAX validation",
-			NULL);
-		    goto internal_error;
-		}
-		ielem->nbNsBindings = 0;
-		ielem->sizeNsBindings = 5;
-	    } else if (ielem->sizeNsBindings <= ielem->nbNsBindings) {
-		ielem->sizeNsBindings *= 2;
-		ielem->nsBindings =
-		    (const xmlChar **) xmlRealloc(
-			(void *) ielem->nsBindings,
-			ielem->sizeNsBindings * 2 * sizeof(const xmlChar *));
-		if (ielem->nsBindings == NULL) {
-		    xmlSchemaVErrMemory(vctxt,
-			"re-allocating namespace bindings for SAX validation",
-			NULL);
-		    goto internal_error;
-		}
-	    }
-
-	    ielem->nsBindings[ielem->nbNsBindings * 2] = namespaces[j];
-	    if (namespaces[j+1][0] == 0) {
-		/*
-		* Handle xmlns="".
-		*/
-		ielem->nsBindings[ielem->nbNsBindings * 2 + 1] = NULL;
-	    } else
-		ielem->nsBindings[ielem->nbNsBindings * 2 + 1] =
-		    namespaces[j+1];
-	    ielem->nbNsBindings++;
-	}
-    }
-    /*
-    * Register attributes.
-    * SAX VAL TODO: We are not adding namespace declaration
-    * attributes yet.
-    */
-    if (nb_attributes != 0) {
-	int valueLen, k, l;
-	xmlChar *value;
-
-        for (j = 0, i = 0; i < nb_attributes; i++, j += 5) {
-	    /*
-	    * Duplicate the value, changing any &#38; to a literal ampersand.
-	    *
-	    * libxml2 differs from normal SAX here in that it escapes all ampersands
-	    * as &#38; instead of delivering the raw converted string. Changing the
-	    * behavior at this point would break applications that use this API, so
-	    * we are forced to work around it.
-	    */
-	    valueLen = attributes[j+4] - attributes[j+3];
-	    value = xmlMallocAtomic(valueLen + 1);
-	    if (value == NULL) {
-		xmlSchemaVErrMemory(vctxt,
-		    "allocating string for decoded attribute",
-		    NULL);
-		goto internal_error;
-	    }
-	    for (k = 0, l = 0; k < valueLen; l++) {
-		if (k < valueLen - 4 &&
-		    attributes[j+3][k+0] == '&' &&
-		    attributes[j+3][k+1] == '#' &&
-		    attributes[j+3][k+2] == '3' &&
-		    attributes[j+3][k+3] == '8' &&
-		    attributes[j+3][k+4] == ';') {
-		    value[l] = '&';
-		    k += 5;
-		} else {
-		    value[l] = attributes[j+3][k];
-		    k++;
-		}
-	    }
-	    value[l] = '\0';
-	    /*
-	    * TODO: Set the node line.
-	    */
-	    ret = xmlSchemaValidatorPushAttribute(vctxt,
-		NULL, ielem->nodeLine, attributes[j], attributes[j+2], 0,
-		value, 1);
-	    if (ret == -1) {
-		VERROR_INT("xmlSchemaSAXHandleStartElementNs",
-		    "calling xmlSchemaValidatorPushAttribute()");
-		goto internal_error;
-	    }
-	}
-    }
-    /*
-    * Validate the element.
-    */
-    ret = xmlSchemaValidateElem(vctxt);
-    if (ret != 0) {
-	if (ret == -1) {
-	    VERROR_INT("xmlSchemaSAXHandleStartElementNs",
-		"calling xmlSchemaValidateElem()");
-	    goto internal_error;
-	}
-	goto exit;
-    }
-
-exit:
-    return;
-internal_error:
-    vctxt->err = -1;
-    xmlStopParser(vctxt->parserCtxt);
-    return;
-}
-
-static void
-xmlSchemaSAXHandleEndElementNs(void *ctx,
-			       const xmlChar * localname ATTRIBUTE_UNUSED,
-			       const xmlChar * prefix ATTRIBUTE_UNUSED,
-			       const xmlChar * URI ATTRIBUTE_UNUSED)
-{
-    xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-    int res;
-
-    /*
-    * Skip elements if inside a "skip" wildcard or if invalid.
-    */
-    if (vctxt->skipDepth != -1) {
-	if (vctxt->depth > vctxt->skipDepth) {
-	    vctxt->depth--;
-	    return;
-	} else
-	    vctxt->skipDepth = -1;
-    }
-    /*
-    * SAX VAL TODO: Just a temporary check.
-    */
-    if ((!xmlStrEqual(vctxt->inode->localName, localname)) ||
-	(!xmlStrEqual(vctxt->inode->nsName, URI))) {
-	VERROR_INT("xmlSchemaSAXHandleEndElementNs",
-	    "elem pop mismatch");
-    }
-    res = xmlSchemaValidatorPopElem(vctxt);
-    if (res != 0) {
-	if (res < 0) {
-	    VERROR_INT("xmlSchemaSAXHandleEndElementNs",
-		"calling xmlSchemaValidatorPopElem()");
-	    goto internal_error;
-	}
-	goto exit;
-    }
-exit:
-    return;
-internal_error:
-    vctxt->err = -1;
-    xmlStopParser(vctxt->parserCtxt);
-    return;
-}
-
-/************************************************************************
- *									*
- *			Validation interfaces				*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaNewValidCtxt:
- * @schema:  a precompiled XML Schemas
- *
- * Create an XML Schemas validation context based on the given schema.
- *
- * Returns the validation context or NULL in case of error
- */
-xmlSchemaValidCtxtPtr
-xmlSchemaNewValidCtxt(xmlSchemaPtr schema)
-{
-    xmlSchemaValidCtxtPtr ret;
-
-    ret = (xmlSchemaValidCtxtPtr) xmlMalloc(sizeof(xmlSchemaValidCtxt));
-    if (ret == NULL) {
-        xmlSchemaVErrMemory(NULL, "allocating validation context", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaValidCtxt));
-    ret->type = XML_SCHEMA_CTXT_VALIDATOR;
-    ret->dict = xmlDictCreate();
-    ret->nodeQNames = xmlSchemaItemListCreate();
-    ret->schema = schema;
-    return (ret);
-}
-
-/**
- * xmlSchemaValidateSetFilename:
- * @vctxt: the schema validation context
- * @filename: the file name
- *
- * Workaround to provide file error reporting information when this is
- * not provided by current APIs
- */
-void
-xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, const char *filename) {
-    if (vctxt == NULL)
-        return;
-    if (vctxt->filename != NULL)
-        xmlFree(vctxt->filename);
-    if (filename != NULL)
-        vctxt->filename = (char *) xmlStrdup((const xmlChar *) filename);
-    else
-        vctxt->filename = NULL;
-}
-
-/**
- * xmlSchemaClearValidCtxt:
- * @vctxt: the schema validation context
- *
- * Free the resources associated to the schema validation context;
- * leaves some fields alive intended for reuse of the context.
- */
-static void
-xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt)
-{
-    if (vctxt == NULL)
-        return;
-
-    /*
-    * TODO: Should we clear the flags?
-    *   Might be problematic if one reuses the context
-    *   and assumes that the options remain the same.
-    */
-    vctxt->flags = 0;
-    vctxt->validationRoot = NULL;
-    vctxt->doc = NULL;
-#ifdef LIBXML_READER_ENABLED
-    vctxt->reader = NULL;
-#endif
-    vctxt->hasKeyrefs = 0;
-
-    if (vctxt->value != NULL) {
-        xmlSchemaFreeValue(vctxt->value);
-	vctxt->value = NULL;
-    }
-    /*
-    * Augmented IDC information.
-    */
-    if (vctxt->aidcs != NULL) {
-	xmlSchemaIDCAugPtr cur = vctxt->aidcs, next;
-	do {
-	    next = cur->next;
-	    xmlFree(cur);
-	    cur = next;
-	} while (cur != NULL);
-	vctxt->aidcs = NULL;
-    }
-    if (vctxt->idcMatcherCache != NULL) {
-	xmlSchemaIDCMatcherPtr matcher = vctxt->idcMatcherCache, tmp;
-
-	while (matcher) {
-	    tmp = matcher;
-	    matcher = matcher->nextCached;
-	    xmlSchemaIDCFreeMatcherList(tmp);
-	}
-	vctxt->idcMatcherCache = NULL;
-    }
-
-
-    if (vctxt->idcNodes != NULL) {
-	int i;
-	xmlSchemaPSVIIDCNodePtr item;
-
-	for (i = 0; i < vctxt->nbIdcNodes; i++) {
-	    item = vctxt->idcNodes[i];
-	    xmlFree(item->keys);
-	    xmlFree(item);
-	}
-	xmlFree(vctxt->idcNodes);
-	vctxt->idcNodes = NULL;
-	vctxt->nbIdcNodes = 0;
-	vctxt->sizeIdcNodes = 0;
-    }
-    /*
-    * Note that we won't delete the XPath state pool here.
-    */
-    if (vctxt->xpathStates != NULL) {
-	xmlSchemaFreeIDCStateObjList(vctxt->xpathStates);
-	vctxt->xpathStates = NULL;
-    }
-    /*
-    * Attribute info.
-    */
-    if (vctxt->nbAttrInfos != 0) {
-	xmlSchemaClearAttrInfos(vctxt);
-    }
-    /*
-    * Element info.
-    */
-    if (vctxt->elemInfos != NULL) {
-	int i;
-	xmlSchemaNodeInfoPtr ei;
-
-	for (i = 0; i < vctxt->sizeElemInfos; i++) {
-	    ei = vctxt->elemInfos[i];
-	    if (ei == NULL)
-		break;
-	    xmlSchemaClearElemInfo(vctxt, ei);
-	}
-    }
-    xmlSchemaItemListClear(vctxt->nodeQNames);
-    /* Recreate the dict. */
-    xmlDictFree(vctxt->dict);
-    /*
-    * TODO: Is is save to recreate it? Do we have a scenario
-    * where the user provides the dict?
-    */
-    vctxt->dict = xmlDictCreate();
-
-    if (vctxt->filename != NULL) {
-        xmlFree(vctxt->filename);
-	vctxt->filename = NULL;
-    }
-}
-
-/**
- * xmlSchemaFreeValidCtxt:
- * @ctxt:  the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return;
-    if (ctxt->value != NULL)
-        xmlSchemaFreeValue(ctxt->value);
-    if (ctxt->pctxt != NULL)
-	xmlSchemaFreeParserCtxt(ctxt->pctxt);
-    if (ctxt->idcNodes != NULL) {
-	int i;
-	xmlSchemaPSVIIDCNodePtr item;
-
-	for (i = 0; i < ctxt->nbIdcNodes; i++) {
-	    item = ctxt->idcNodes[i];
-	    xmlFree(item->keys);
-	    xmlFree(item);
-	}
-	xmlFree(ctxt->idcNodes);
-    }
-    if (ctxt->idcKeys != NULL) {
-	int i;
-	for (i = 0; i < ctxt->nbIdcKeys; i++)
-	    xmlSchemaIDCFreeKey(ctxt->idcKeys[i]);
-	xmlFree(ctxt->idcKeys);
-    }
-
-    if (ctxt->xpathStates != NULL) {
-	xmlSchemaFreeIDCStateObjList(ctxt->xpathStates);
-	ctxt->xpathStates = NULL;
-    }
-    if (ctxt->xpathStatePool != NULL) {
-	xmlSchemaFreeIDCStateObjList(ctxt->xpathStatePool);
-	ctxt->xpathStatePool = NULL;
-    }
-
-    /*
-    * Augmented IDC information.
-    */
-    if (ctxt->aidcs != NULL) {
-	xmlSchemaIDCAugPtr cur = ctxt->aidcs, next;
-	do {
-	    next = cur->next;
-	    xmlFree(cur);
-	    cur = next;
-	} while (cur != NULL);
-    }
-    if (ctxt->attrInfos != NULL) {
-	int i;
-	xmlSchemaAttrInfoPtr attr;
-
-	/* Just a paranoid call to the cleanup. */
-	if (ctxt->nbAttrInfos != 0)
-	    xmlSchemaClearAttrInfos(ctxt);
-	for (i = 0; i < ctxt->sizeAttrInfos; i++) {
-	    attr = ctxt->attrInfos[i];
-	    xmlFree(attr);
-	}
-	xmlFree(ctxt->attrInfos);
-    }
-    if (ctxt->elemInfos != NULL) {
-	int i;
-	xmlSchemaNodeInfoPtr ei;
-
-	for (i = 0; i < ctxt->sizeElemInfos; i++) {
-	    ei = ctxt->elemInfos[i];
-	    if (ei == NULL)
-		break;
-	    xmlSchemaClearElemInfo(ctxt, ei);
-	    xmlFree(ei);
-	}
-	xmlFree(ctxt->elemInfos);
-    }
-    if (ctxt->nodeQNames != NULL)
-	xmlSchemaItemListFree(ctxt->nodeQNames);
-    if (ctxt->dict != NULL)
-	xmlDictFree(ctxt->dict);
-    if (ctxt->filename != NULL)
-	xmlFree(ctxt->filename);
-    xmlFree(ctxt);
-}
-
-/**
- * xmlSchemaIsValid:
- * @ctxt: the schema validation context
- *
- * Check if any error was detected during validation.
- *
- * Returns 1 if valid so far, 0 if errors were detected, and -1 in case
- *         of internal error.
- */
-int
-xmlSchemaIsValid(xmlSchemaValidCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return(-1);
-    return(ctxt->err == 0);
-}
-
-/**
- * xmlSchemaSetValidErrors:
- * @ctxt:  a schema validation context
- * @err:  the error function
- * @warn: the warning function
- * @ctx: the functions context
- *
- * Set the error and warning callback informations
- */
-void
-xmlSchemaSetValidErrors(xmlSchemaValidCtxtPtr ctxt,
-                        xmlSchemaValidityErrorFunc err,
-                        xmlSchemaValidityWarningFunc warn, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-    ctxt->error = err;
-    ctxt->warning = warn;
-    ctxt->errCtxt = ctx;
-    if (ctxt->pctxt != NULL)
-	xmlSchemaSetParserErrors(ctxt->pctxt, err, warn, ctx);
-}
-
-/**
- * xmlSchemaSetValidStructuredErrors:
- * @ctxt:  a schema validation context
- * @serror:  the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
-				  xmlStructuredErrorFunc serror, void *ctx)
-{
-    if (ctxt == NULL)
-        return;
-	ctxt->serror = serror;
-    ctxt->error = NULL;
-    ctxt->warning = NULL;
-    ctxt->errCtxt = ctx;
-    if (ctxt->pctxt != NULL)
-	xmlSchemaSetParserStructuredErrors(ctxt->pctxt, serror, ctx);
-}
-
-/**
- * xmlSchemaGetValidErrors:
- * @ctxt: a XML-Schema validation context
- * @err: the error function result
- * @warn: the warning function result
- * @ctx: the functions context result
- *
- * Get the error and warning callback informations
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlSchemaGetValidErrors(xmlSchemaValidCtxtPtr ctxt,
-			xmlSchemaValidityErrorFunc * err,
-			xmlSchemaValidityWarningFunc * warn, void **ctx)
-{
-	if (ctxt == NULL)
-		return (-1);
-	if (err != NULL)
-		*err = ctxt->error;
-	if (warn != NULL)
-		*warn = ctxt->warning;
-	if (ctx != NULL)
-		*ctx = ctxt->errCtxt;
-	return (0);
-}
-
-
-/**
- * xmlSchemaSetValidOptions:
- * @ctxt:	a schema validation context
- * @options: a combination of xmlSchemaValidOption
- *
- * Sets the options to be used during the validation.
- *
- * Returns 0 in case of success, -1 in case of an
- * API error.
- */
-int
-xmlSchemaSetValidOptions(xmlSchemaValidCtxtPtr ctxt,
-			 int options)
-
-{
-    int i;
-
-    if (ctxt == NULL)
-	return (-1);
-    /*
-    * WARNING: Change the start value if adding to the
-    * xmlSchemaValidOption.
-    * TODO: Is there an other, more easy to maintain,
-    * way?
-    */
-    for (i = 1; i < (int) sizeof(int) * 8; i++) {
-        if (options & 1<<i)
-	    return (-1);
-    }
-    ctxt->options = options;
-    return (0);
-}
-
-/**
- * xmlSchemaValidCtxtGetOptions:
- * @ctxt: a schema validation context
- *
- * Get the validation context options.
- *
- * Returns the option combination or -1 on error.
- */
-int
-xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt)
-
-{
-    if (ctxt == NULL)
-	return (-1);
-    else
-	return (ctxt->options);
-}
-
-static int
-xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt)
-{
-    xmlAttrPtr attr;
-    int ret = 0;
-    xmlSchemaNodeInfoPtr ielem = NULL;
-    xmlNodePtr node, valRoot;
-    const xmlChar *nsName;
-
-    /* DOC VAL TODO: Move this to the start function. */
-    if (vctxt->validationRoot != NULL)
-        valRoot = vctxt->validationRoot;
-    else
-	valRoot = xmlDocGetRootElement(vctxt->doc);
-    if (valRoot == NULL) {
-	/* VAL TODO: Error code? */
-	VERROR(1, NULL, "The document has no document element");
-	return (1);
-    }
-    vctxt->depth = -1;
-    vctxt->validationRoot = valRoot;
-    node = valRoot;
-    while (node != NULL) {
-	if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
-	    goto next_sibling;
-	if (node->type == XML_ELEMENT_NODE) {
-
-	    /*
-	    * Init the node-info.
-	    */
-	    vctxt->depth++;
-	    if (xmlSchemaValidatorPushElem(vctxt) == -1)
-		goto internal_error;
-	    ielem = vctxt->inode;
-	    ielem->node = node;
-	    ielem->nodeLine = node->line;
-	    ielem->localName = node->name;
-	    if (node->ns != NULL)
-		ielem->nsName = node->ns->href;
-	    ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
-	    /*
-	    * Register attributes.
-	    * DOC VAL TODO: We do not register namespace declaration
-	    * attributes yet.
-	    */
-	    vctxt->nbAttrInfos = 0;
-	    if (node->properties != NULL) {
-		attr = node->properties;
-		do {
-		    if (attr->ns != NULL)
-			nsName = attr->ns->href;
-		    else
-			nsName = NULL;
-		    ret = xmlSchemaValidatorPushAttribute(vctxt,
-			(xmlNodePtr) attr,
-			/*
-			* Note that we give it the line number of the
-			* parent element.
-			*/
-			ielem->nodeLine,
-			attr->name, nsName, 0,
-			xmlNodeListGetString(attr->doc, attr->children, 1), 1);
-		    if (ret == -1) {
-			VERROR_INT("xmlSchemaDocWalk",
-			    "calling xmlSchemaValidatorPushAttribute()");
-			goto internal_error;
-		    }
-		    attr = attr->next;
-		} while (attr);
-	    }
-	    /*
-	    * Validate the element.
-	    */
-	    ret = xmlSchemaValidateElem(vctxt);
-	    if (ret != 0) {
-		if (ret == -1) {
-		    VERROR_INT("xmlSchemaDocWalk",
-			"calling xmlSchemaValidateElem()");
-		    goto internal_error;
-		}
-		/*
-		* Don't stop validation; just skip the content
-		* of this element.
-		*/
-		goto leave_node;
-	    }
-	    if ((vctxt->skipDepth != -1) &&
-		(vctxt->depth >= vctxt->skipDepth))
-		goto leave_node;
-	} else if ((node->type == XML_TEXT_NODE) ||
-	    (node->type == XML_CDATA_SECTION_NODE)) {
-	    /*
-	    * Process character content.
-	    */
-	    if ((ielem != NULL) && (ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY))
-		ielem->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
-	    ret = xmlSchemaVPushText(vctxt, node->type, node->content,
-		-1, XML_SCHEMA_PUSH_TEXT_PERSIST, NULL);
-	    if (ret < 0) {
-		VERROR_INT("xmlSchemaVDocWalk",
-		    "calling xmlSchemaVPushText()");
-		goto internal_error;
-	    }
-	    /*
-	    * DOC VAL TODO: Should we skip further validation of the
-	    * element content here?
-	    */
-	} else if ((node->type == XML_ENTITY_NODE) ||
-	    (node->type == XML_ENTITY_REF_NODE)) {
-	    /*
-	    * DOC VAL TODO: What to do with entities?
-	    */
-	    VERROR_INT("xmlSchemaVDocWalk",
-		"there is at least one entity reference in the node-tree "
-		"currently being validated. Processing of entities with "
-		"this XML Schema processor is not supported (yet). Please "
-		"substitute entities before validation.");
-	    goto internal_error;
-	} else {
-	    goto leave_node;
-	    /*
-	    * DOC VAL TODO: XInclude nodes, etc.
-	    */
-	}
-	/*
-	* Walk the doc.
-	*/
-	if (node->children != NULL) {
-	    node = node->children;
-	    continue;
-	}
-leave_node:
-	if (node->type == XML_ELEMENT_NODE) {
-	    /*
-	    * Leaving the scope of an element.
-	    */
-	    if (node != vctxt->inode->node) {
-		VERROR_INT("xmlSchemaVDocWalk",
-		    "element position mismatch");
-		goto internal_error;
-	    }
-	    ret = xmlSchemaValidatorPopElem(vctxt);
-	    if (ret != 0) {
-		if (ret < 0) {
-		    VERROR_INT("xmlSchemaVDocWalk",
-			"calling xmlSchemaValidatorPopElem()");
-		    goto internal_error;
-		}
-	    }
-	    if (node == valRoot)
-		goto exit;
-	}
-next_sibling:
-	if (node->next != NULL)
-	    node = node->next;
-	else {
-	    node = node->parent;
-	    goto leave_node;
-	}
-    }
-
-exit:
-    return (ret);
-internal_error:
-    return (-1);
-}
-
-static int
-xmlSchemaPreRun(xmlSchemaValidCtxtPtr vctxt) {
-    /*
-    * Some initialization.
-    */
-    vctxt->err = 0;
-    vctxt->nberrors = 0;
-    vctxt->depth = -1;
-    vctxt->skipDepth = -1;
-    vctxt->xsiAssemble = 0;
-    vctxt->hasKeyrefs = 0;
-#ifdef ENABLE_IDC_NODE_TABLES_TEST
-    vctxt->createIDCNodeTables = 1;
-#else
-    vctxt->createIDCNodeTables = 0;
-#endif
-    /*
-    * Create a schema + parser if necessary.
-    */
-    if (vctxt->schema == NULL) {
-	xmlSchemaParserCtxtPtr pctxt;
-
-	vctxt->xsiAssemble = 1;
-	/*
-	* If not schema was given then we will create a schema
-	* dynamically using XSI schema locations.
-	*
-	* Create the schema parser context.
-	*/
-	if ((vctxt->pctxt == NULL) &&
-	   (xmlSchemaCreatePCtxtOnVCtxt(vctxt) == -1))
-	   return (-1);
-	pctxt = vctxt->pctxt;
-	pctxt->xsiAssemble = 1;
-	/*
-	* Create the schema.
-	*/
-	vctxt->schema = xmlSchemaNewSchema(pctxt);
-	if (vctxt->schema == NULL)
-	    return (-1);
-	/*
-	* Create the schema construction context.
-	*/
-	pctxt->constructor = xmlSchemaConstructionCtxtCreate(pctxt->dict);
-	if (pctxt->constructor == NULL)
-	    return(-1);
-	pctxt->constructor->mainSchema = vctxt->schema;
-	/*
-	* Take ownership of the constructor to be able to free it.
-	*/
-	pctxt->ownsConstructor = 1;
-    }
-    /*
-    * Augment the IDC definitions for the main schema and all imported ones
-    * NOTE: main schema if the first in the imported list
-    */
-    xmlHashScan(vctxt->schema->schemasImports,(xmlHashScanner)xmlSchemaAugmentImportedIDC, vctxt);
-
-    return(0);
-}
-
-static void
-xmlSchemaPostRun(xmlSchemaValidCtxtPtr vctxt) {
-    if (vctxt->xsiAssemble) {
-	if (vctxt->schema != NULL) {
-	    xmlSchemaFree(vctxt->schema);
-	    vctxt->schema = NULL;
-	}
-    }
-    xmlSchemaClearValidCtxt(vctxt);
-}
-
-static int
-xmlSchemaVStart(xmlSchemaValidCtxtPtr vctxt)
-{
-    int ret = 0;
-
-    if (xmlSchemaPreRun(vctxt) < 0)
-        return(-1);
-
-    if (vctxt->doc != NULL) {
-	/*
-	 * Tree validation.
-	 */
-	ret = xmlSchemaVDocWalk(vctxt);
-#ifdef LIBXML_READER_ENABLED
-    } else if (vctxt->reader != NULL) {
-	/*
-	 * XML Reader validation.
-	 */
-#ifdef XML_SCHEMA_READER_ENABLED
-	ret = xmlSchemaVReaderWalk(vctxt);
-#endif
-#endif
-    } else if ((vctxt->sax != NULL) && (vctxt->parserCtxt != NULL)) {
-	/*
-	 * SAX validation.
-	 */
-	ret = xmlParseDocument(vctxt->parserCtxt);
-    } else {
-	VERROR_INT("xmlSchemaVStart",
-	    "no instance to validate");
-	ret = -1;
-    }
-
-    xmlSchemaPostRun(vctxt);
-    if (ret == 0)
-	ret = vctxt->err;
-    return (ret);
-}
-
-/**
- * xmlSchemaValidateOneElement:
- * @ctxt:  a schema validation context
- * @elem:  an element node
- *
- * Validate a branch of a tree, starting with the given @elem.
- *
- * Returns 0 if the element and its subtree is valid, a positive error
- * code number otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateOneElement(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr elem)
-{
-    if ((ctxt == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE))
-	return (-1);
-
-    if (ctxt->schema == NULL)
-	return (-1);
-
-    ctxt->doc = elem->doc;
-    ctxt->node = elem;
-    ctxt->validationRoot = elem;
-    return(xmlSchemaVStart(ctxt));
-}
-
-/**
- * xmlSchemaValidateDoc:
- * @ctxt:  a schema validation context
- * @doc:  a parsed document tree
- *
- * Validate a document tree in memory.
- *
- * Returns 0 if the document is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateDoc(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc)
-{
-    if ((ctxt == NULL) || (doc == NULL))
-        return (-1);
-
-    ctxt->doc = doc;
-    ctxt->node = xmlDocGetRootElement(doc);
-    if (ctxt->node == NULL) {
-        xmlSchemaCustomErr(ACTXT_CAST ctxt,
-	    XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING,
-	    (xmlNodePtr) doc, NULL,
-	    "The document has no document element", NULL, NULL);
-        return (ctxt->err);
-    }
-    ctxt->validationRoot = ctxt->node;
-    return (xmlSchemaVStart(ctxt));
-}
-
-
-/************************************************************************
- *									*
- *		Function and data for SAX streaming API			*
- *									*
- ************************************************************************/
-typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData;
-typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr;
-
-struct _xmlSchemaSplitSAXData {
-    xmlSAXHandlerPtr      user_sax;
-    void                 *user_data;
-    xmlSchemaValidCtxtPtr ctxt;
-    xmlSAXHandlerPtr      schemas_sax;
-};
-
-#define XML_SAX_PLUG_MAGIC 0xdc43ba21
-
-struct _xmlSchemaSAXPlug {
-    unsigned int magic;
-
-    /* the original callbacks informations */
-    xmlSAXHandlerPtr     *user_sax_ptr;
-    xmlSAXHandlerPtr      user_sax;
-    void                **user_data_ptr;
-    void                 *user_data;
-
-    /* the block plugged back and validation informations */
-    xmlSAXHandler         schemas_sax;
-    xmlSchemaValidCtxtPtr ctxt;
-};
-
-/* All those functions just bounces to the user provided SAX handlers */
-static void
-internalSubsetSplit(void *ctx, const xmlChar *name,
-	       const xmlChar *ExternalID, const xmlChar *SystemID)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->internalSubset != NULL))
-	ctxt->user_sax->internalSubset(ctxt->user_data, name, ExternalID,
-	                               SystemID);
-}
-
-static int
-isStandaloneSplit(void *ctx)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->isStandalone != NULL))
-	return(ctxt->user_sax->isStandalone(ctxt->user_data));
-    return(0);
-}
-
-static int
-hasInternalSubsetSplit(void *ctx)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->hasInternalSubset != NULL))
-	return(ctxt->user_sax->hasInternalSubset(ctxt->user_data));
-    return(0);
-}
-
-static int
-hasExternalSubsetSplit(void *ctx)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->hasExternalSubset != NULL))
-	return(ctxt->user_sax->hasExternalSubset(ctxt->user_data));
-    return(0);
-}
-
-static void
-externalSubsetSplit(void *ctx, const xmlChar *name,
-	       const xmlChar *ExternalID, const xmlChar *SystemID)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->externalSubset != NULL))
-	ctxt->user_sax->externalSubset(ctxt->user_data, name, ExternalID,
-	                               SystemID);
-}
-
-static xmlParserInputPtr
-resolveEntitySplit(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->resolveEntity != NULL))
-	return(ctxt->user_sax->resolveEntity(ctxt->user_data, publicId,
-	                                     systemId));
-    return(NULL);
-}
-
-static xmlEntityPtr
-getEntitySplit(void *ctx, const xmlChar *name)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->getEntity != NULL))
-	return(ctxt->user_sax->getEntity(ctxt->user_data, name));
-    return(NULL);
-}
-
-static xmlEntityPtr
-getParameterEntitySplit(void *ctx, const xmlChar *name)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->getParameterEntity != NULL))
-	return(ctxt->user_sax->getParameterEntity(ctxt->user_data, name));
-    return(NULL);
-}
-
-
-static void
-entityDeclSplit(void *ctx, const xmlChar *name, int type,
-          const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->entityDecl != NULL))
-	ctxt->user_sax->entityDecl(ctxt->user_data, name, type, publicId,
-	                           systemId, content);
-}
-
-static void
-attributeDeclSplit(void *ctx, const xmlChar * elem,
-                   const xmlChar * name, int type, int def,
-                   const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->attributeDecl != NULL)) {
-	ctxt->user_sax->attributeDecl(ctxt->user_data, elem, name, type,
-	                              def, defaultValue, tree);
-    } else {
-	xmlFreeEnumeration(tree);
-    }
-}
-
-static void
-elementDeclSplit(void *ctx, const xmlChar *name, int type,
-	    xmlElementContentPtr content)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->elementDecl != NULL))
-	ctxt->user_sax->elementDecl(ctxt->user_data, name, type, content);
-}
-
-static void
-notationDeclSplit(void *ctx, const xmlChar *name,
-	     const xmlChar *publicId, const xmlChar *systemId)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->notationDecl != NULL))
-	ctxt->user_sax->notationDecl(ctxt->user_data, name, publicId,
-	                             systemId);
-}
-
-static void
-unparsedEntityDeclSplit(void *ctx, const xmlChar *name,
-		   const xmlChar *publicId, const xmlChar *systemId,
-		   const xmlChar *notationName)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->unparsedEntityDecl != NULL))
-	ctxt->user_sax->unparsedEntityDecl(ctxt->user_data, name, publicId,
-	                                   systemId, notationName);
-}
-
-static void
-setDocumentLocatorSplit(void *ctx, xmlSAXLocatorPtr loc)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->setDocumentLocator != NULL))
-	ctxt->user_sax->setDocumentLocator(ctxt->user_data, loc);
-}
-
-static void
-startDocumentSplit(void *ctx)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->startDocument != NULL))
-	ctxt->user_sax->startDocument(ctxt->user_data);
-}
-
-static void
-endDocumentSplit(void *ctx)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->endDocument != NULL))
-	ctxt->user_sax->endDocument(ctxt->user_data);
-}
-
-static void
-processingInstructionSplit(void *ctx, const xmlChar *target,
-                      const xmlChar *data)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->processingInstruction != NULL))
-	ctxt->user_sax->processingInstruction(ctxt->user_data, target, data);
-}
-
-static void
-commentSplit(void *ctx, const xmlChar *value)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->comment != NULL))
-	ctxt->user_sax->comment(ctxt->user_data, value);
-}
-
-/*
- * Varargs error callbacks to the user application, harder ...
- */
-
-static void XMLCDECL
-warningSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->warning != NULL)) {
-	TODO
-    }
-}
-static void XMLCDECL
-errorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->error != NULL)) {
-	TODO
-    }
-}
-static void XMLCDECL
-fatalErrorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->fatalError != NULL)) {
-	TODO
-    }
-}
-
-/*
- * Those are function where both the user handler and the schemas handler
- * need to be called.
- */
-static void
-charactersSplit(void *ctx, const xmlChar *ch, int len)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt->user_sax != NULL) && (ctxt->user_sax->characters != NULL))
-	ctxt->user_sax->characters(ctxt->user_data, ch, len);
-    if (ctxt->ctxt != NULL)
-	xmlSchemaSAXHandleText(ctxt->ctxt, ch, len);
-}
-
-static void
-ignorableWhitespaceSplit(void *ctx, const xmlChar *ch, int len)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->ignorableWhitespace != NULL))
-	ctxt->user_sax->ignorableWhitespace(ctxt->user_data, ch, len);
-    if (ctxt->ctxt != NULL)
-	xmlSchemaSAXHandleText(ctxt->ctxt, ch, len);
-}
-
-static void
-cdataBlockSplit(void *ctx, const xmlChar *value, int len)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->cdataBlock != NULL))
-	ctxt->user_sax->cdataBlock(ctxt->user_data, value, len);
-    if (ctxt->ctxt != NULL)
-	xmlSchemaSAXHandleCDataSection(ctxt->ctxt, value, len);
-}
-
-static void
-referenceSplit(void *ctx, const xmlChar *name)
-{
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->reference != NULL))
-	ctxt->user_sax->reference(ctxt->user_data, name);
-    if (ctxt->ctxt != NULL)
-        xmlSchemaSAXHandleReference(ctxt->user_data, name);
-}
-
-static void
-startElementNsSplit(void *ctx, const xmlChar * localname,
-		    const xmlChar * prefix, const xmlChar * URI,
-		    int nb_namespaces, const xmlChar ** namespaces,
-		    int nb_attributes, int nb_defaulted,
-		    const xmlChar ** attributes) {
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->startElementNs != NULL))
-	ctxt->user_sax->startElementNs(ctxt->user_data, localname, prefix,
-	                               URI, nb_namespaces, namespaces,
-				       nb_attributes, nb_defaulted,
-				       attributes);
-    if (ctxt->ctxt != NULL)
-	xmlSchemaSAXHandleStartElementNs(ctxt->ctxt, localname, prefix,
-	                                 URI, nb_namespaces, namespaces,
-					 nb_attributes, nb_defaulted,
-					 attributes);
-}
-
-static void
-endElementNsSplit(void *ctx, const xmlChar * localname,
-		    const xmlChar * prefix, const xmlChar * URI) {
-    xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
-    if (ctxt == NULL)
-        return;
-    if ((ctxt->user_sax != NULL) &&
-        (ctxt->user_sax->endElementNs != NULL))
-	ctxt->user_sax->endElementNs(ctxt->user_data, localname, prefix, URI);
-    if (ctxt->ctxt != NULL)
-	xmlSchemaSAXHandleEndElementNs(ctxt->ctxt, localname, prefix, URI);
-}
-
-/**
- * xmlSchemaSAXPlug:
- * @ctxt:  a schema validation context
- * @sax:  a pointer to the original xmlSAXHandlerPtr
- * @user_data:  a pointer to the original SAX user data pointer
- *
- * Plug a SAX based validation layer in a SAX parsing event flow.
- * The original @saxptr and @dataptr data are replaced by new pointers
- * but the calls to the original will be maintained.
- *
- * Returns a pointer to a data structure needed to unplug the validation layer
- *         or NULL in case of errors.
- */
-xmlSchemaSAXPlugPtr
-xmlSchemaSAXPlug(xmlSchemaValidCtxtPtr ctxt,
-		 xmlSAXHandlerPtr *sax, void **user_data)
-{
-    xmlSchemaSAXPlugPtr ret;
-    xmlSAXHandlerPtr old_sax;
-
-    if ((ctxt == NULL) || (sax == NULL) || (user_data == NULL))
-        return(NULL);
-
-    /*
-     * We only allow to plug into SAX2 event streams
-     */
-    old_sax = *sax;
-    if ((old_sax != NULL) && (old_sax->initialized != XML_SAX2_MAGIC))
-        return(NULL);
-    if ((old_sax != NULL) &&
-        (old_sax->startElementNs == NULL) && (old_sax->endElementNs == NULL) &&
-        ((old_sax->startElement != NULL) || (old_sax->endElement != NULL)))
-        return(NULL);
-
-    /*
-     * everything seems right allocate the local data needed for that layer
-     */
-    ret = (xmlSchemaSAXPlugPtr) xmlMalloc(sizeof(xmlSchemaSAXPlugStruct));
-    if (ret == NULL) {
-        return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaSAXPlugStruct));
-    ret->magic = XML_SAX_PLUG_MAGIC;
-    ret->schemas_sax.initialized = XML_SAX2_MAGIC;
-    ret->ctxt = ctxt;
-    ret->user_sax_ptr = sax;
-    ret->user_sax = old_sax;
-    if (old_sax == NULL) {
-        /*
-	 * go direct, no need for the split block and functions.
-	 */
-	ret->schemas_sax.startElementNs = xmlSchemaSAXHandleStartElementNs;
-	ret->schemas_sax.endElementNs = xmlSchemaSAXHandleEndElementNs;
-	/*
-	 * Note that we use the same text-function for both, to prevent
-	 * the parser from testing for ignorable whitespace.
-	 */
-	ret->schemas_sax.ignorableWhitespace = xmlSchemaSAXHandleText;
-	ret->schemas_sax.characters = xmlSchemaSAXHandleText;
-
-	ret->schemas_sax.cdataBlock = xmlSchemaSAXHandleCDataSection;
-	ret->schemas_sax.reference = xmlSchemaSAXHandleReference;
-
-	ret->user_data = ctxt;
-	*user_data = ctxt;
-    } else {
-       /*
-        * for each callback unused by Schemas initialize it to the Split
-	* routine only if non NULL in the user block, this can speed up
-	* things at the SAX level.
-	*/
-        if (old_sax->internalSubset != NULL)
-            ret->schemas_sax.internalSubset = internalSubsetSplit;
-        if (old_sax->isStandalone != NULL)
-            ret->schemas_sax.isStandalone = isStandaloneSplit;
-        if (old_sax->hasInternalSubset != NULL)
-            ret->schemas_sax.hasInternalSubset = hasInternalSubsetSplit;
-        if (old_sax->hasExternalSubset != NULL)
-            ret->schemas_sax.hasExternalSubset = hasExternalSubsetSplit;
-        if (old_sax->resolveEntity != NULL)
-            ret->schemas_sax.resolveEntity = resolveEntitySplit;
-        if (old_sax->getEntity != NULL)
-            ret->schemas_sax.getEntity = getEntitySplit;
-        if (old_sax->entityDecl != NULL)
-            ret->schemas_sax.entityDecl = entityDeclSplit;
-        if (old_sax->notationDecl != NULL)
-            ret->schemas_sax.notationDecl = notationDeclSplit;
-        if (old_sax->attributeDecl != NULL)
-            ret->schemas_sax.attributeDecl = attributeDeclSplit;
-        if (old_sax->elementDecl != NULL)
-            ret->schemas_sax.elementDecl = elementDeclSplit;
-        if (old_sax->unparsedEntityDecl != NULL)
-            ret->schemas_sax.unparsedEntityDecl = unparsedEntityDeclSplit;
-        if (old_sax->setDocumentLocator != NULL)
-            ret->schemas_sax.setDocumentLocator = setDocumentLocatorSplit;
-        if (old_sax->startDocument != NULL)
-            ret->schemas_sax.startDocument = startDocumentSplit;
-        if (old_sax->endDocument != NULL)
-            ret->schemas_sax.endDocument = endDocumentSplit;
-        if (old_sax->processingInstruction != NULL)
-            ret->schemas_sax.processingInstruction = processingInstructionSplit;
-        if (old_sax->comment != NULL)
-            ret->schemas_sax.comment = commentSplit;
-        if (old_sax->warning != NULL)
-            ret->schemas_sax.warning = warningSplit;
-        if (old_sax->error != NULL)
-            ret->schemas_sax.error = errorSplit;
-        if (old_sax->fatalError != NULL)
-            ret->schemas_sax.fatalError = fatalErrorSplit;
-        if (old_sax->getParameterEntity != NULL)
-            ret->schemas_sax.getParameterEntity = getParameterEntitySplit;
-        if (old_sax->externalSubset != NULL)
-            ret->schemas_sax.externalSubset = externalSubsetSplit;
-
-	/*
-	 * the 6 schemas callback have to go to the splitter functions
-	 * Note that we use the same text-function for ignorableWhitespace
-	 * if possible, to prevent the parser from testing for ignorable
-	 * whitespace.
-	 */
-        ret->schemas_sax.characters = charactersSplit;
-	if ((old_sax->ignorableWhitespace != NULL) &&
-	    (old_sax->ignorableWhitespace != old_sax->characters))
-	    ret->schemas_sax.ignorableWhitespace = ignorableWhitespaceSplit;
-	else
-	    ret->schemas_sax.ignorableWhitespace = charactersSplit;
-        ret->schemas_sax.cdataBlock = cdataBlockSplit;
-        ret->schemas_sax.reference = referenceSplit;
-        ret->schemas_sax.startElementNs = startElementNsSplit;
-        ret->schemas_sax.endElementNs = endElementNsSplit;
-
-	ret->user_data_ptr = user_data;
-	ret->user_data = *user_data;
-	*user_data = ret;
-    }
-
-    /*
-     * plug the pointers back.
-     */
-    *sax = &(ret->schemas_sax);
-    ctxt->sax = *sax;
-    ctxt->flags |= XML_SCHEMA_VALID_CTXT_FLAG_STREAM;
-    xmlSchemaPreRun(ctxt);
-    return(ret);
-}
-
-/**
- * xmlSchemaSAXUnplug:
- * @plug:  a data structure returned by xmlSchemaSAXPlug
- *
- * Unplug a SAX based validation layer in a SAX parsing event flow.
- * The original pointers used in the call are restored.
- *
- * Returns 0 in case of success and -1 in case of failure.
- */
-int
-xmlSchemaSAXUnplug(xmlSchemaSAXPlugPtr plug)
-{
-    xmlSAXHandlerPtr *sax;
-    void **user_data;
-
-    if ((plug == NULL) || (plug->magic != XML_SAX_PLUG_MAGIC))
-        return(-1);
-    plug->magic = 0;
-
-    xmlSchemaPostRun(plug->ctxt);
-    /* restore the data */
-    sax = plug->user_sax_ptr;
-    *sax = plug->user_sax;
-    if (plug->user_sax != NULL) {
-	user_data = plug->user_data_ptr;
-	*user_data = plug->user_data;
-    }
-
-    /* free and return */
-    xmlFree(plug);
-    return(0);
-}
-
-/**
- * xmlSchemaValidateSetLocator:
- * @vctxt: a schema validation context
- * @f: the locator function pointer
- * @ctxt: the locator context
- *
- * Allows to set a locator function to the validation context,
- * which will be used to provide file and line information since
- * those are not provided as part of the SAX validation flow
- * Setting @f to NULL disable the locator.
- */
-
-void
-xmlSchemaValidateSetLocator(xmlSchemaValidCtxtPtr vctxt,
-                            xmlSchemaValidityLocatorFunc f,
-			    void *ctxt)
-{
-    if (vctxt == NULL) return;
-    vctxt->locFunc = f;
-    vctxt->locCtxt = ctxt;
-}
-
-/**
- * xmlSchemaValidateStreamLocator:
- * @ctx: the xmlTextReaderPtr used
- * @file: returned file information
- * @line: returned line information
- *
- * Internal locator function for the readers
- *
- * Returns 0 in case the Schema validation could be (des)activated and
- *         -1 in case of error.
- */
-static int
-xmlSchemaValidateStreamLocator(void *ctx, const char **file,
-                               unsigned long *line) {
-    xmlParserCtxtPtr ctxt;
-
-    if ((ctx == NULL) || ((file == NULL) && (line == NULL)))
-        return(-1);
-
-    if (file != NULL)
-        *file = NULL;
-    if (line != NULL)
-        *line = 0;
-
-    ctxt = (xmlParserCtxtPtr) ctx;
-    if (ctxt->input != NULL) {
-       if (file != NULL)
-           *file = ctxt->input->filename;
-       if (line != NULL)
-           *line = ctxt->input->line;
-       return(0);
-    }
-    return(-1);
-}
-
-/**
- * xmlSchemaValidateStream:
- * @ctxt:  a schema validation context
- * @input:  the input to use for reading the data
- * @enc:  an optional encoding information
- * @sax:  a SAX handler for the resulting events
- * @user_data:  the context to provide to the SAX handler.
- *
- * Validate an input based on a flow of SAX event from the parser
- * and forward the events to the @sax handler with the provided @user_data
- * the user provided @sax handler must be a SAX2 one.
- *
- * Returns 0 if the document is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateStream(xmlSchemaValidCtxtPtr ctxt,
-                        xmlParserInputBufferPtr input, xmlCharEncoding enc,
-                        xmlSAXHandlerPtr sax, void *user_data)
-{
-    xmlSchemaSAXPlugPtr plug = NULL;
-    xmlSAXHandlerPtr old_sax = NULL;
-    xmlParserCtxtPtr pctxt = NULL;
-    xmlParserInputPtr inputStream = NULL;
-    int ret;
-
-    if ((ctxt == NULL) || (input == NULL))
-        return (-1);
-
-    /*
-     * prepare the parser
-     */
-    pctxt = xmlNewParserCtxt();
-    if (pctxt == NULL)
-        return (-1);
-    old_sax = pctxt->sax;
-    pctxt->sax = sax;
-    pctxt->userData = user_data;
-#if 0
-    if (options)
-        xmlCtxtUseOptions(pctxt, options);
-#endif
-    pctxt->linenumbers = 1;
-    xmlSchemaValidateSetLocator(ctxt, xmlSchemaValidateStreamLocator, pctxt);
-
-    inputStream = xmlNewIOInputStream(pctxt, input, enc);;
-    if (inputStream == NULL) {
-        ret = -1;
-	goto done;
-    }
-    inputPush(pctxt, inputStream);
-    ctxt->parserCtxt = pctxt;
-    ctxt->input = input;
-
-    /*
-     * Plug the validation and launch the parsing
-     */
-    plug = xmlSchemaSAXPlug(ctxt, &(pctxt->sax), &(pctxt->userData));
-    if (plug == NULL) {
-        ret = -1;
-	goto done;
-    }
-    ctxt->input = input;
-    ctxt->enc = enc;
-    ctxt->sax = pctxt->sax;
-    ctxt->flags |= XML_SCHEMA_VALID_CTXT_FLAG_STREAM;
-    ret = xmlSchemaVStart(ctxt);
-
-    if ((ret == 0) && (! ctxt->parserCtxt->wellFormed)) {
-	ret = ctxt->parserCtxt->errNo;
-	if (ret == 0)
-	    ret = 1;
-    }
-
-done:
-    ctxt->parserCtxt = NULL;
-    ctxt->sax = NULL;
-    ctxt->input = NULL;
-    if (plug != NULL) {
-        xmlSchemaSAXUnplug(plug);
-    }
-    /* cleanup */
-    if (pctxt != NULL) {
-	pctxt->sax = old_sax;
-	xmlFreeParserCtxt(pctxt);
-    }
-    return (ret);
-}
-
-/**
- * xmlSchemaValidateFile:
- * @ctxt: a schema validation context
- * @filename: the URI of the instance
- * @options: a future set of options, currently unused
- *
- * Do a schemas validation of the given resource, it will use the
- * SAX streamable validation internally.
- *
- * Returns 0 if the document is valid, a positive error code
- *     number otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateFile(xmlSchemaValidCtxtPtr ctxt,
-                      const char * filename,
-		      int options ATTRIBUTE_UNUSED)
-{
-    int ret;
-    xmlParserInputBufferPtr input;
-
-    if ((ctxt == NULL) || (filename == NULL))
-        return (-1);
-
-    input = xmlParserInputBufferCreateFilename(filename,
-	XML_CHAR_ENCODING_NONE);
-    if (input == NULL)
-	return (-1);
-    ret = xmlSchemaValidateStream(ctxt, input, XML_CHAR_ENCODING_NONE,
-	NULL, NULL);
-    return (ret);
-}
-
-/**
- * xmlSchemaValidCtxtGetParserCtxt:
- * @ctxt: a schema validation context
- *
- * allow access to the parser context of the schema validation context
- *
- * Returns the parser context of the schema validation context or NULL
- *         in case of error.
- */
-xmlParserCtxtPtr
-xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt)
-{
-    if (ctxt == NULL)
-        return(NULL);
-    return (ctxt->parserCtxt);
-}
-
-#define bottom_xmlschemas
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/src/third_party/libxml/src/xmlschemastypes.c b/src/third_party/libxml/src/xmlschemastypes.c
deleted file mode 100644
index 5f38599..0000000
--- a/src/third_party/libxml/src/xmlschemastypes.c
+++ /dev/null
@@ -1,6152 +0,0 @@
-/*
- * schemastypes.c : implementation of the XML Schema Datatypes
- *             definition and validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/valid.h>
-#include <libxml/xpath.h>
-#include <libxml/uri.h>
-
-#include <libxml/xmlschemas.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/xmlschemastypes.h>
-
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-
-#define DEBUG
-
-#ifndef LIBXML_XPATH_ENABLED
-extern double xmlXPathNAN;
-extern double xmlXPathPINF;
-extern double xmlXPathNINF;
-#endif
-
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-#define XML_SCHEMAS_NAMESPACE_NAME \
-    (const xmlChar *)"http://www.w3.org/2001/XMLSchema"
-
-#define IS_WSP_REPLACE_CH(c)	((((c) == 0x9) || ((c) == 0xa)) || \
-				 ((c) == 0xd))
-
-#define IS_WSP_SPACE_CH(c)	((c) == 0x20)
-
-#define IS_WSP_BLANK_CH(c) IS_BLANK_CH(c)
-
-/* Date value */
-typedef struct _xmlSchemaValDate xmlSchemaValDate;
-typedef xmlSchemaValDate *xmlSchemaValDatePtr;
-struct _xmlSchemaValDate {
-    long		year;
-    unsigned int	mon	:4;	/* 1 <=  mon    <= 12   */
-    unsigned int	day	:5;	/* 1 <=  day    <= 31   */
-    unsigned int	hour	:5;	/* 0 <=  hour   <= 24   */
-    unsigned int	min	:6;	/* 0 <=  min    <= 59	*/
-    double		sec;
-    unsigned int	tz_flag	:1;	/* is tzo explicitely set? */
-    signed int		tzo	:12;	/* -1440 <= tzo <= 1440;
-					   currently only -840 to +840 are needed */
-};
-
-/* Duration value */
-typedef struct _xmlSchemaValDuration xmlSchemaValDuration;
-typedef xmlSchemaValDuration *xmlSchemaValDurationPtr;
-struct _xmlSchemaValDuration {
-    long	        mon;		/* mon stores years also */
-    long	day;
-    double		sec;            /* sec stores min and hour also */
-};
-
-typedef struct _xmlSchemaValDecimal xmlSchemaValDecimal;
-typedef xmlSchemaValDecimal *xmlSchemaValDecimalPtr;
-struct _xmlSchemaValDecimal {
-    /* would use long long but not portable */
-    unsigned long lo;
-    unsigned long mi;
-    unsigned long hi;
-    unsigned int extra;
-    unsigned int sign:1;
-    unsigned int frac:7;
-    unsigned int total:8;
-};
-
-typedef struct _xmlSchemaValQName xmlSchemaValQName;
-typedef xmlSchemaValQName *xmlSchemaValQNamePtr;
-struct _xmlSchemaValQName {
-    xmlChar *name;
-    xmlChar *uri;
-};
-
-typedef struct _xmlSchemaValHex xmlSchemaValHex;
-typedef xmlSchemaValHex *xmlSchemaValHexPtr;
-struct _xmlSchemaValHex {
-    xmlChar     *str;
-    unsigned int total;
-};
-
-typedef struct _xmlSchemaValBase64 xmlSchemaValBase64;
-typedef xmlSchemaValBase64 *xmlSchemaValBase64Ptr;
-struct _xmlSchemaValBase64 {
-    xmlChar     *str;
-    unsigned int total;
-};
-
-struct _xmlSchemaVal {
-    xmlSchemaValType type;
-    struct _xmlSchemaVal *next;
-    union {
-	xmlSchemaValDecimal     decimal;
-        xmlSchemaValDate        date;
-        xmlSchemaValDuration    dur;
-	xmlSchemaValQName	qname;
-	xmlSchemaValHex		hex;
-	xmlSchemaValBase64	base64;
-	float			f;
-	double			d;
-	int			b;
-	xmlChar                *str;
-    } value;
-};
-
-static int xmlSchemaTypesInitialized = 0;
-static xmlHashTablePtr xmlSchemaTypesBank = NULL;
-
-/*
- * Basic types
- */
-static xmlSchemaTypePtr xmlSchemaTypeStringDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnyTypeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnySimpleTypeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDecimalDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDatetimeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDateDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeTimeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGYearDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGYearMonthDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGDayDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGMonthDayDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGMonthDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDurationDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeFloatDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeBooleanDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDoubleDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeHexBinaryDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeBase64BinaryDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnyURIDef = NULL;
-
-/*
- * Derived types
- */
-static xmlSchemaTypePtr xmlSchemaTypePositiveIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNonPositiveIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNegativeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNonNegativeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeLongDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIntDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeShortDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeByteDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedLongDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedIntDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedShortDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedByteDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNormStringDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeTokenDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeLanguageDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeQNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNCNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdrefDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdrefsDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeEntityDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeEntitiesDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNotationDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNmtokenDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL;
-
-/************************************************************************
- *									*
- *			Datatype error handlers				*
- *									*
- ************************************************************************/
-/**
- * xmlSchemaTypeErrMemory:
- * @extra:  extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra)
-{
-    __xmlSimpleError(XML_FROM_DATATYPE, XML_ERR_NO_MEMORY, node, NULL, extra);
-}
-
-/************************************************************************
- *									*
- *			Base types support				*
- *									*
- ************************************************************************/
-
-/**
- * xmlSchemaNewValue:
- * @type:  the value type
- *
- * Allocate a new simple type value
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-static xmlSchemaValPtr
-xmlSchemaNewValue(xmlSchemaValType type) {
-    xmlSchemaValPtr value;
-
-    value = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal));
-    if (value == NULL) {
-	return(NULL);
-    }
-    memset(value, 0, sizeof(xmlSchemaVal));
-    value->type = type;
-    return(value);
-}
-
-static xmlSchemaFacetPtr
-xmlSchemaNewMinLengthFacet(int value)
-{
-    xmlSchemaFacetPtr ret;
-
-    ret = xmlSchemaNewFacet();
-    if (ret == NULL) {
-        return(NULL);
-    }
-    ret->type = XML_SCHEMA_FACET_MINLENGTH;
-    ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER);
-    if (ret->val == NULL) {
-        xmlFree(ret);
-	return(NULL);
-    }
-    ret->val->value.decimal.lo = value;
-    return (ret);
-}
-
-/*
- * xmlSchemaInitBasicType:
- * @name:  the type name
- * @type:  the value type associated
- *
- * Initialize one primitive built-in type
- */
-static xmlSchemaTypePtr
-xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
-		       xmlSchemaTypePtr baseType) {
-    xmlSchemaTypePtr ret;
-
-    ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
-    if (ret == NULL) {
-        xmlSchemaTypeErrMemory(NULL, "could not initialize basic types");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaType));
-    ret->name = (const xmlChar *)name;
-    ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME;
-    ret->type = XML_SCHEMA_TYPE_BASIC;
-    ret->baseType = baseType;
-    ret->contentType = XML_SCHEMA_CONTENT_BASIC;
-    /*
-    * Primitive types.
-    */
-    switch (type) {
-	case XML_SCHEMAS_STRING:
-	case XML_SCHEMAS_DECIMAL:
-	case XML_SCHEMAS_DATE:
-	case XML_SCHEMAS_DATETIME:
-	case XML_SCHEMAS_TIME:
-	case XML_SCHEMAS_GYEAR:
-	case XML_SCHEMAS_GYEARMONTH:
-	case XML_SCHEMAS_GMONTH:
-	case XML_SCHEMAS_GMONTHDAY:
-	case XML_SCHEMAS_GDAY:
-	case XML_SCHEMAS_DURATION:
-	case XML_SCHEMAS_FLOAT:
-	case XML_SCHEMAS_DOUBLE:
-	case XML_SCHEMAS_BOOLEAN:
-	case XML_SCHEMAS_ANYURI:
-	case XML_SCHEMAS_HEXBINARY:
-	case XML_SCHEMAS_BASE64BINARY:
-	case XML_SCHEMAS_QNAME:
-	case XML_SCHEMAS_NOTATION:
-	    ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
-	    break;
-	default:
-	    break;
-    }
-    /*
-    * Set variety.
-    */
-    switch (type) {
-	case XML_SCHEMAS_ANYTYPE:
-	case XML_SCHEMAS_ANYSIMPLETYPE:
-	    break;
-	case XML_SCHEMAS_IDREFS:
-	case XML_SCHEMAS_NMTOKENS:
-	case XML_SCHEMAS_ENTITIES:
-	    ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
-	    ret->facets = xmlSchemaNewMinLengthFacet(1);
-	    ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
-	    break;
-	default:
-	    ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
-	    break;
-    }
-    xmlHashAddEntry2(xmlSchemaTypesBank, ret->name,
-	             XML_SCHEMAS_NAMESPACE_NAME, ret);
-    ret->builtInType = type;
-    return(ret);
-}
-
-/*
-* WARNING: Those type reside normally in xmlschemas.c but are
-* redefined here locally in oder of being able to use them for xs:anyType-
-* TODO: Remove those definition if we move the types to a header file.
-* TODO: Always keep those structs up-to-date with the originals.
-*/
-#define UNBOUNDED (1 << 30)
-
-typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
-typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
-struct _xmlSchemaTreeItem {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next;
-    xmlSchemaTreeItemPtr children;
-};
-
-typedef struct _xmlSchemaParticle xmlSchemaParticle;
-typedef xmlSchemaParticle *xmlSchemaParticlePtr;
-struct _xmlSchemaParticle {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next;
-    xmlSchemaTreeItemPtr children;
-    int minOccurs;
-    int maxOccurs;
-    xmlNodePtr node;
-};
-
-typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
-typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
-struct _xmlSchemaModelGroup {
-    xmlSchemaTypeType type;
-    xmlSchemaAnnotPtr annot;
-    xmlSchemaTreeItemPtr next;
-    xmlSchemaTreeItemPtr children;
-    xmlNodePtr node;
-};
-
-static xmlSchemaParticlePtr
-xmlSchemaAddParticle(void)
-{
-    xmlSchemaParticlePtr ret = NULL;
-
-    ret = (xmlSchemaParticlePtr)
-	xmlMalloc(sizeof(xmlSchemaParticle));
-    if (ret == NULL) {
-	xmlSchemaTypeErrMemory(NULL, "allocating particle component");
-	return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaParticle));
-    ret->type = XML_SCHEMA_TYPE_PARTICLE;
-    ret->minOccurs = 1;
-    ret->maxOccurs = 1;
-    return (ret);
-}
-
-/*
- * xmlSchemaInitTypes:
- *
- * Initialize the default XML Schemas type library
- */
-void
-xmlSchemaInitTypes(void)
-{
-    if (xmlSchemaTypesInitialized != 0)
-        return;
-    xmlSchemaTypesBank = xmlHashCreate(40);
-
-
-    /*
-    * 3.4.7 Built-in Complex Type Definition
-    */
-    xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType",
-                                                     XML_SCHEMAS_ANYTYPE,
-						     NULL);
-    xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef;
-    xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
-    /*
-    * Init the content type.
-    */
-    xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
-    {
-	xmlSchemaParticlePtr particle;
-	xmlSchemaModelGroupPtr sequence;
-	xmlSchemaWildcardPtr wild;
-	/* First particle. */
-	particle = xmlSchemaAddParticle();
-	if (particle == NULL)
-	    return;
-	xmlSchemaTypeAnyTypeDef->subtypes = (xmlSchemaTypePtr) particle;
-	/* Sequence model group. */
-	sequence = (xmlSchemaModelGroupPtr)
-	    xmlMalloc(sizeof(xmlSchemaModelGroup));
-	if (sequence == NULL) {
-	    xmlSchemaTypeErrMemory(NULL, "allocating model group component");
-	    return;
-	}
-	memset(sequence, 0, sizeof(xmlSchemaModelGroup));
-	sequence->type = XML_SCHEMA_TYPE_SEQUENCE;
-	particle->children = (xmlSchemaTreeItemPtr) sequence;
-	/* Second particle. */
-	particle = xmlSchemaAddParticle();
-	if (particle == NULL)
-	    return;
-	particle->minOccurs = 0;
-	particle->maxOccurs = UNBOUNDED;
-	sequence->children = (xmlSchemaTreeItemPtr) particle;
-	/* The wildcard */
-	wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
-	if (wild == NULL) {
-	    xmlSchemaTypeErrMemory(NULL, "allocating wildcard component");
-	    return;
-	}
-	memset(wild, 0, sizeof(xmlSchemaWildcard));
-	wild->type = XML_SCHEMA_TYPE_ANY;
-	wild->any = 1;
-	wild->processContents = XML_SCHEMAS_ANY_LAX;
-	particle->children = (xmlSchemaTreeItemPtr) wild;
-	/*
-	* Create the attribute wildcard.
-	*/
-	wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
-	if (wild == NULL) {
-	    xmlSchemaTypeErrMemory(NULL, "could not create an attribute "
-		"wildcard on anyType");
-	    return;
-	}
-	memset(wild, 0, sizeof(xmlSchemaWildcard));
-	wild->any = 1;
-	wild->processContents = XML_SCHEMAS_ANY_LAX;
-	xmlSchemaTypeAnyTypeDef->attributeWildcard = wild;
-    }
-    xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType",
-                                                           XML_SCHEMAS_ANYSIMPLETYPE,
-							   xmlSchemaTypeAnyTypeDef);
-    /*
-    * primitive datatypes
-    */
-    xmlSchemaTypeStringDef = xmlSchemaInitBasicType("string",
-                                                    XML_SCHEMAS_STRING,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeDecimalDef = xmlSchemaInitBasicType("decimal",
-                                                     XML_SCHEMAS_DECIMAL,
-						     xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeDateDef = xmlSchemaInitBasicType("date",
-                                                  XML_SCHEMAS_DATE,
-						  xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeDatetimeDef = xmlSchemaInitBasicType("dateTime",
-                                                      XML_SCHEMAS_DATETIME,
-						      xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeTimeDef = xmlSchemaInitBasicType("time",
-                                                  XML_SCHEMAS_TIME,
-						  xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeGYearDef = xmlSchemaInitBasicType("gYear",
-                                                   XML_SCHEMAS_GYEAR,
-						   xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeGYearMonthDef = xmlSchemaInitBasicType("gYearMonth",
-                                                        XML_SCHEMAS_GYEARMONTH,
-							xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeGMonthDef = xmlSchemaInitBasicType("gMonth",
-                                                    XML_SCHEMAS_GMONTH,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeGMonthDayDef = xmlSchemaInitBasicType("gMonthDay",
-                                                       XML_SCHEMAS_GMONTHDAY,
-						       xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeGDayDef = xmlSchemaInitBasicType("gDay",
-                                                  XML_SCHEMAS_GDAY,
-						  xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeDurationDef = xmlSchemaInitBasicType("duration",
-                                                      XML_SCHEMAS_DURATION,
-						      xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeFloatDef = xmlSchemaInitBasicType("float",
-                                                   XML_SCHEMAS_FLOAT,
-						   xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeDoubleDef = xmlSchemaInitBasicType("double",
-                                                    XML_SCHEMAS_DOUBLE,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeBooleanDef = xmlSchemaInitBasicType("boolean",
-                                                     XML_SCHEMAS_BOOLEAN,
-						     xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeAnyURIDef = xmlSchemaInitBasicType("anyURI",
-                                                    XML_SCHEMAS_ANYURI,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeHexBinaryDef = xmlSchemaInitBasicType("hexBinary",
-                                                     XML_SCHEMAS_HEXBINARY,
-						     xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeBase64BinaryDef
-        = xmlSchemaInitBasicType("base64Binary", XML_SCHEMAS_BASE64BINARY,
-	xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION",
-                                                    XML_SCHEMAS_NOTATION,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName",
-                                                   XML_SCHEMAS_QNAME,
-						   xmlSchemaTypeAnySimpleTypeDef);
-
-    /*
-     * derived datatypes
-     */
-    xmlSchemaTypeIntegerDef = xmlSchemaInitBasicType("integer",
-                                                     XML_SCHEMAS_INTEGER,
-						     xmlSchemaTypeDecimalDef);
-    xmlSchemaTypeNonPositiveIntegerDef =
-        xmlSchemaInitBasicType("nonPositiveInteger",
-                               XML_SCHEMAS_NPINTEGER,
-			       xmlSchemaTypeIntegerDef);
-    xmlSchemaTypeNegativeIntegerDef =
-        xmlSchemaInitBasicType("negativeInteger", XML_SCHEMAS_NINTEGER,
-	xmlSchemaTypeNonPositiveIntegerDef);
-    xmlSchemaTypeLongDef =
-        xmlSchemaInitBasicType("long", XML_SCHEMAS_LONG,
-	xmlSchemaTypeIntegerDef);
-    xmlSchemaTypeIntDef = xmlSchemaInitBasicType("int", XML_SCHEMAS_INT,
-	xmlSchemaTypeLongDef);
-    xmlSchemaTypeShortDef = xmlSchemaInitBasicType("short",
-                                                   XML_SCHEMAS_SHORT,
-						   xmlSchemaTypeIntDef);
-    xmlSchemaTypeByteDef = xmlSchemaInitBasicType("byte",
-                                                  XML_SCHEMAS_BYTE,
-						  xmlSchemaTypeShortDef);
-    xmlSchemaTypeNonNegativeIntegerDef =
-        xmlSchemaInitBasicType("nonNegativeInteger",
-                               XML_SCHEMAS_NNINTEGER,
-			       xmlSchemaTypeIntegerDef);
-    xmlSchemaTypeUnsignedLongDef =
-        xmlSchemaInitBasicType("unsignedLong", XML_SCHEMAS_ULONG,
-	xmlSchemaTypeNonNegativeIntegerDef);
-    xmlSchemaTypeUnsignedIntDef =
-        xmlSchemaInitBasicType("unsignedInt", XML_SCHEMAS_UINT,
-	xmlSchemaTypeUnsignedLongDef);
-    xmlSchemaTypeUnsignedShortDef =
-        xmlSchemaInitBasicType("unsignedShort", XML_SCHEMAS_USHORT,
-	xmlSchemaTypeUnsignedIntDef);
-    xmlSchemaTypeUnsignedByteDef =
-        xmlSchemaInitBasicType("unsignedByte", XML_SCHEMAS_UBYTE,
-	xmlSchemaTypeUnsignedShortDef);
-    xmlSchemaTypePositiveIntegerDef =
-        xmlSchemaInitBasicType("positiveInteger", XML_SCHEMAS_PINTEGER,
-	xmlSchemaTypeNonNegativeIntegerDef);
-    xmlSchemaTypeNormStringDef = xmlSchemaInitBasicType("normalizedString",
-                                                        XML_SCHEMAS_NORMSTRING,
-							xmlSchemaTypeStringDef);
-    xmlSchemaTypeTokenDef = xmlSchemaInitBasicType("token",
-                                                   XML_SCHEMAS_TOKEN,
-						   xmlSchemaTypeNormStringDef);
-    xmlSchemaTypeLanguageDef = xmlSchemaInitBasicType("language",
-                                                      XML_SCHEMAS_LANGUAGE,
-						      xmlSchemaTypeTokenDef);
-    xmlSchemaTypeNameDef = xmlSchemaInitBasicType("Name",
-                                                  XML_SCHEMAS_NAME,
-						  xmlSchemaTypeTokenDef);
-    xmlSchemaTypeNmtokenDef = xmlSchemaInitBasicType("NMTOKEN",
-                                                     XML_SCHEMAS_NMTOKEN,
-						     xmlSchemaTypeTokenDef);
-    xmlSchemaTypeNCNameDef = xmlSchemaInitBasicType("NCName",
-                                                    XML_SCHEMAS_NCNAME,
-						    xmlSchemaTypeNameDef);
-    xmlSchemaTypeIdDef = xmlSchemaInitBasicType("ID", XML_SCHEMAS_ID,
-						    xmlSchemaTypeNCNameDef);
-    xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF",
-                                                   XML_SCHEMAS_IDREF,
-						   xmlSchemaTypeNCNameDef);
-    xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY",
-                                                    XML_SCHEMAS_ENTITY,
-						    xmlSchemaTypeNCNameDef);
-    /*
-    * Derived list types.
-    */
-    /* ENTITIES */
-    xmlSchemaTypeEntitiesDef = xmlSchemaInitBasicType("ENTITIES",
-                                                      XML_SCHEMAS_ENTITIES,
-						      xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeEntitiesDef->subtypes = xmlSchemaTypeEntityDef;
-    /* IDREFS */
-    xmlSchemaTypeIdrefsDef = xmlSchemaInitBasicType("IDREFS",
-                                                    XML_SCHEMAS_IDREFS,
-						    xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeIdrefsDef->subtypes = xmlSchemaTypeIdrefDef;
-
-    /* NMTOKENS */
-    xmlSchemaTypeNmtokensDef = xmlSchemaInitBasicType("NMTOKENS",
-                                                      XML_SCHEMAS_NMTOKENS,
-						      xmlSchemaTypeAnySimpleTypeDef);
-    xmlSchemaTypeNmtokensDef->subtypes = xmlSchemaTypeNmtokenDef;
-
-    xmlSchemaTypesInitialized = 1;
-}
-
-/**
- * xmlSchemaCleanupTypes:
- *
- * Cleanup the default XML Schemas type library
- */
-void
-xmlSchemaCleanupTypes(void) {
-    if (xmlSchemaTypesInitialized == 0)
-	return;
-    /*
-    * Free xs:anyType.
-    */
-    {
-	xmlSchemaParticlePtr particle;
-	/* Attribute wildcard. */
-	xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard);
-	/* Content type. */
-	particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes;
-	/* Wildcard. */
-	xmlSchemaFreeWildcard((xmlSchemaWildcardPtr)
-	    particle->children->children->children);
-	xmlFree((xmlSchemaParticlePtr) particle->children->children);
-	/* Sequence model group. */
-	xmlFree((xmlSchemaModelGroupPtr) particle->children);
-	xmlFree((xmlSchemaParticlePtr) particle);
-	xmlSchemaTypeAnyTypeDef->subtypes = NULL;
-    }
-    xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType);
-    xmlSchemaTypesInitialized = 0;
-}
-
-/**
- * xmlSchemaIsBuiltInTypeFacet:
- * @type: the built-in type
- * @facetType:  the facet type
- *
- * Evaluates if a specific facet can be
- * used in conjunction with a type.
- *
- * Returns 1 if the facet can be used with the given built-in type,
- * 0 otherwise and -1 in case the type is not a built-in type.
- */
-int
-xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType)
-{
-    if (type == NULL)
-	return (-1);
-    if (type->type != XML_SCHEMA_TYPE_BASIC)
-	return (-1);
-    switch (type->builtInType) {
-	case XML_SCHEMAS_BOOLEAN:
-	    if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
-		(facetType == XML_SCHEMA_FACET_WHITESPACE))
-		return (1);
-	    else
-		return (0);
-	case XML_SCHEMAS_STRING:
-	case XML_SCHEMAS_NOTATION:
-	case XML_SCHEMAS_QNAME:
-	case XML_SCHEMAS_ANYURI:
-	case XML_SCHEMAS_BASE64BINARY:
-	case XML_SCHEMAS_HEXBINARY:
-	    if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
-		(facetType == XML_SCHEMA_FACET_MINLENGTH) ||
-		(facetType == XML_SCHEMA_FACET_MAXLENGTH) ||
-		(facetType == XML_SCHEMA_FACET_PATTERN) ||
-		(facetType == XML_SCHEMA_FACET_ENUMERATION) ||
-		(facetType == XML_SCHEMA_FACET_WHITESPACE))
-		return (1);
-	    else
-		return (0);
-	case XML_SCHEMAS_DECIMAL:
-	    if ((facetType == XML_SCHEMA_FACET_TOTALDIGITS) ||
-		(facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) ||
-		(facetType == XML_SCHEMA_FACET_PATTERN) ||
-		(facetType == XML_SCHEMA_FACET_WHITESPACE) ||
-		(facetType == XML_SCHEMA_FACET_ENUMERATION) ||
-		(facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
-		return (1);
-	    else
-		return (0);
-	case XML_SCHEMAS_TIME:
-	case XML_SCHEMAS_GDAY:
-	case XML_SCHEMAS_GMONTH:
-	case XML_SCHEMAS_GMONTHDAY:
-	case XML_SCHEMAS_GYEAR:
-	case XML_SCHEMAS_GYEARMONTH:
-	case XML_SCHEMAS_DATE:
-	case XML_SCHEMAS_DATETIME:
-	case XML_SCHEMAS_DURATION:
-	case XML_SCHEMAS_FLOAT:
-	case XML_SCHEMAS_DOUBLE:
-	    if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
-		(facetType == XML_SCHEMA_FACET_ENUMERATION) ||
-		(facetType == XML_SCHEMA_FACET_WHITESPACE) ||
-		(facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
-		(facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
-		return (1);
-	    else
-		return (0);
-	default:
-	    break;
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaGetBuiltInType:
- * @type:  the type of the built in type
- *
- * Gives you the type struct for a built-in
- * type by its type id.
- *
- * Returns the type if found, NULL otherwise.
- */
-xmlSchemaTypePtr
-xmlSchemaGetBuiltInType(xmlSchemaValType type)
-{
-    if (xmlSchemaTypesInitialized == 0)
-	xmlSchemaInitTypes();
-    switch (type) {
-
-	case XML_SCHEMAS_ANYSIMPLETYPE:
-	    return (xmlSchemaTypeAnySimpleTypeDef);
-	case XML_SCHEMAS_STRING:
-	    return (xmlSchemaTypeStringDef);
-	case XML_SCHEMAS_NORMSTRING:
-	    return (xmlSchemaTypeNormStringDef);
-	case XML_SCHEMAS_DECIMAL:
-	    return (xmlSchemaTypeDecimalDef);
-	case XML_SCHEMAS_TIME:
-	    return (xmlSchemaTypeTimeDef);
-	case XML_SCHEMAS_GDAY:
-	    return (xmlSchemaTypeGDayDef);
-	case XML_SCHEMAS_GMONTH:
-	    return (xmlSchemaTypeGMonthDef);
-	case XML_SCHEMAS_GMONTHDAY:
-	    return (xmlSchemaTypeGMonthDayDef);
-	case XML_SCHEMAS_GYEAR:
-	    return (xmlSchemaTypeGYearDef);
-	case XML_SCHEMAS_GYEARMONTH:
-	    return (xmlSchemaTypeGYearMonthDef);
-	case XML_SCHEMAS_DATE:
-	    return (xmlSchemaTypeDateDef);
-	case XML_SCHEMAS_DATETIME:
-	    return (xmlSchemaTypeDatetimeDef);
-	case XML_SCHEMAS_DURATION:
-	    return (xmlSchemaTypeDurationDef);
-	case XML_SCHEMAS_FLOAT:
-	    return (xmlSchemaTypeFloatDef);
-	case XML_SCHEMAS_DOUBLE:
-	    return (xmlSchemaTypeDoubleDef);
-	case XML_SCHEMAS_BOOLEAN:
-	    return (xmlSchemaTypeBooleanDef);
-	case XML_SCHEMAS_TOKEN:
-	    return (xmlSchemaTypeTokenDef);
-	case XML_SCHEMAS_LANGUAGE:
-	    return (xmlSchemaTypeLanguageDef);
-	case XML_SCHEMAS_NMTOKEN:
-	    return (xmlSchemaTypeNmtokenDef);
-	case XML_SCHEMAS_NMTOKENS:
-	    return (xmlSchemaTypeNmtokensDef);
-	case XML_SCHEMAS_NAME:
-	    return (xmlSchemaTypeNameDef);
-	case XML_SCHEMAS_QNAME:
-	    return (xmlSchemaTypeQNameDef);
-	case XML_SCHEMAS_NCNAME:
-	    return (xmlSchemaTypeNCNameDef);
-	case XML_SCHEMAS_ID:
-	    return (xmlSchemaTypeIdDef);
-	case XML_SCHEMAS_IDREF:
-	    return (xmlSchemaTypeIdrefDef);
-	case XML_SCHEMAS_IDREFS:
-	    return (xmlSchemaTypeIdrefsDef);
-	case XML_SCHEMAS_ENTITY:
-	    return (xmlSchemaTypeEntityDef);
-	case XML_SCHEMAS_ENTITIES:
-	    return (xmlSchemaTypeEntitiesDef);
-	case XML_SCHEMAS_NOTATION:
-	    return (xmlSchemaTypeNotationDef);
-	case XML_SCHEMAS_ANYURI:
-	    return (xmlSchemaTypeAnyURIDef);
-	case XML_SCHEMAS_INTEGER:
-	    return (xmlSchemaTypeIntegerDef);
-	case XML_SCHEMAS_NPINTEGER:
-	    return (xmlSchemaTypeNonPositiveIntegerDef);
-	case XML_SCHEMAS_NINTEGER:
-	    return (xmlSchemaTypeNegativeIntegerDef);
-	case XML_SCHEMAS_NNINTEGER:
-	    return (xmlSchemaTypeNonNegativeIntegerDef);
-	case XML_SCHEMAS_PINTEGER:
-	    return (xmlSchemaTypePositiveIntegerDef);
-	case XML_SCHEMAS_INT:
-	    return (xmlSchemaTypeIntDef);
-	case XML_SCHEMAS_UINT:
-	    return (xmlSchemaTypeUnsignedIntDef);
-	case XML_SCHEMAS_LONG:
-	    return (xmlSchemaTypeLongDef);
-	case XML_SCHEMAS_ULONG:
-	    return (xmlSchemaTypeUnsignedLongDef);
-	case XML_SCHEMAS_SHORT:
-	    return (xmlSchemaTypeShortDef);
-	case XML_SCHEMAS_USHORT:
-	    return (xmlSchemaTypeUnsignedShortDef);
-	case XML_SCHEMAS_BYTE:
-	    return (xmlSchemaTypeByteDef);
-	case XML_SCHEMAS_UBYTE:
-	    return (xmlSchemaTypeUnsignedByteDef);
-	case XML_SCHEMAS_HEXBINARY:
-	    return (xmlSchemaTypeHexBinaryDef);
-	case XML_SCHEMAS_BASE64BINARY:
-	    return (xmlSchemaTypeBase64BinaryDef);
-	case XML_SCHEMAS_ANYTYPE:
-	    return (xmlSchemaTypeAnyTypeDef);
-	default:
-	    return (NULL);
-    }
-}
-
-/**
- * xmlSchemaValueAppend:
- * @prev: the value
- * @cur: the value to be appended
- *
- * Appends a next sibling to a list of computed values.
- *
- * Returns 0 if succeeded and -1 on API errors.
- */
-int
-xmlSchemaValueAppend(xmlSchemaValPtr prev, xmlSchemaValPtr cur) {
-
-    if ((prev == NULL) || (cur == NULL))
-	return (-1);
-    prev->next = cur;
-    return (0);
-}
-
-/**
- * xmlSchemaValueGetNext:
- * @cur: the value
- *
- * Accessor for the next sibling of a list of computed values.
- *
- * Returns the next value or NULL if there was none, or on
- *         API errors.
- */
-xmlSchemaValPtr
-xmlSchemaValueGetNext(xmlSchemaValPtr cur) {
-
-    if (cur == NULL)
-	return (NULL);
-    return (cur->next);
-}
-
-/**
- * xmlSchemaValueGetAsString:
- * @val: the value
- *
- * Accessor for the string value of a computed value.
- *
- * Returns the string value or NULL if there was none, or on
- *         API errors.
- */
-const xmlChar *
-xmlSchemaValueGetAsString(xmlSchemaValPtr val)
-{
-    if (val == NULL)
-	return (NULL);
-    switch (val->type) {
-	case XML_SCHEMAS_STRING:
-	case XML_SCHEMAS_NORMSTRING:
-	case XML_SCHEMAS_ANYSIMPLETYPE:
-	case XML_SCHEMAS_TOKEN:
-        case XML_SCHEMAS_LANGUAGE:
-        case XML_SCHEMAS_NMTOKEN:
-        case XML_SCHEMAS_NAME:
-        case XML_SCHEMAS_NCNAME:
-        case XML_SCHEMAS_ID:
-        case XML_SCHEMAS_IDREF:
-        case XML_SCHEMAS_ENTITY:
-        case XML_SCHEMAS_ANYURI:
-	    return (BAD_CAST val->value.str);
-	default:
-	    break;
-    }
-    return (NULL);
-}
-
-/**
- * xmlSchemaValueGetAsBoolean:
- * @val: the value
- *
- * Accessor for the boolean value of a computed value.
- *
- * Returns 1 if true and 0 if false, or in case of an error. Hmm.
- */
-int
-xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val)
-{
-    if ((val == NULL) || (val->type != XML_SCHEMAS_BOOLEAN))
-	return (0);
-    return (val->value.b);
-}
-
-/**
- * xmlSchemaNewStringValue:
- * @type:  the value type
- * @value:  the value
- *
- * Allocate a new simple type value. The type can be
- * of XML_SCHEMAS_STRING.
- * WARNING: This one is intended to be expanded for other
- * string based types. We need this for anySimpleType as well.
- * The given value is consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-xmlSchemaValPtr
-xmlSchemaNewStringValue(xmlSchemaValType type,
-			const xmlChar *value)
-{
-    xmlSchemaValPtr val;
-
-    if (type != XML_SCHEMAS_STRING)
-	return(NULL);
-    val = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal));
-    if (val == NULL) {
-	return(NULL);
-    }
-    memset(val, 0, sizeof(xmlSchemaVal));
-    val->type = type;
-    val->value.str = (xmlChar *) value;
-    return(val);
-}
-
-/**
- * xmlSchemaNewNOTATIONValue:
- * @name:  the notation name
- * @ns: the notation namespace name or NULL
- *
- * Allocate a new NOTATION value.
- * The given values are consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-xmlSchemaValPtr
-xmlSchemaNewNOTATIONValue(const xmlChar *name,
-			  const xmlChar *ns)
-{
-    xmlSchemaValPtr val;
-
-    val = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
-    if (val == NULL)
-	return (NULL);
-
-    val->value.qname.name = (xmlChar *)name;
-    if (ns != NULL)
-	val->value.qname.uri = (xmlChar *)ns;
-    return(val);
-}
-
-/**
- * xmlSchemaNewQNameValue:
- * @namespaceName: the namespace name
- * @localName: the local name
- *
- * Allocate a new QName value.
- * The given values are consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of an error.
- */
-xmlSchemaValPtr
-xmlSchemaNewQNameValue(const xmlChar *namespaceName,
-		       const xmlChar *localName)
-{
-    xmlSchemaValPtr val;
-
-    val = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
-    if (val == NULL)
-	return (NULL);
-
-    val->value.qname.name = (xmlChar *) localName;
-    val->value.qname.uri = (xmlChar *) namespaceName;
-    return(val);
-}
-
-/**
- * xmlSchemaFreeValue:
- * @value:  the value to free
- *
- * Cleanup the default XML Schemas type library
- */
-void
-xmlSchemaFreeValue(xmlSchemaValPtr value) {
-    xmlSchemaValPtr prev;
-
-    while (value != NULL) {
-	switch (value->type) {
-	    case XML_SCHEMAS_STRING:
-	    case XML_SCHEMAS_NORMSTRING:
-	    case XML_SCHEMAS_TOKEN:
-	    case XML_SCHEMAS_LANGUAGE:
-	    case XML_SCHEMAS_NMTOKEN:
-	    case XML_SCHEMAS_NMTOKENS:
-	    case XML_SCHEMAS_NAME:
-	    case XML_SCHEMAS_NCNAME:
-	    case XML_SCHEMAS_ID:
-	    case XML_SCHEMAS_IDREF:
-	    case XML_SCHEMAS_IDREFS:
-	    case XML_SCHEMAS_ENTITY:
-	    case XML_SCHEMAS_ENTITIES:
-	    case XML_SCHEMAS_ANYURI:
-	    case XML_SCHEMAS_ANYSIMPLETYPE:
-		if (value->value.str != NULL)
-		    xmlFree(value->value.str);
-		break;
-	    case XML_SCHEMAS_NOTATION:
-	    case XML_SCHEMAS_QNAME:
-		if (value->value.qname.uri != NULL)
-		    xmlFree(value->value.qname.uri);
-		if (value->value.qname.name != NULL)
-		    xmlFree(value->value.qname.name);
-		break;
-	    case XML_SCHEMAS_HEXBINARY:
-		if (value->value.hex.str != NULL)
-		    xmlFree(value->value.hex.str);
-		break;
-	    case XML_SCHEMAS_BASE64BINARY:
-		if (value->value.base64.str != NULL)
-		    xmlFree(value->value.base64.str);
-		break;
-	    default:
-		break;
-	}
-	prev = value;
-	value = value->next;
-	xmlFree(prev);
-    }
-}
-
-/**
- * xmlSchemaGetPredefinedType:
- * @name: the type name
- * @ns:  the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"
- *
- * Lookup a type in the default XML Schemas type library
- *
- * Returns the type if found, NULL otherwise
- */
-xmlSchemaTypePtr
-xmlSchemaGetPredefinedType(const xmlChar *name, const xmlChar *ns) {
-    if (xmlSchemaTypesInitialized == 0)
-	xmlSchemaInitTypes();
-    if (name == NULL)
-	return(NULL);
-    return((xmlSchemaTypePtr) xmlHashLookup2(xmlSchemaTypesBank, name, ns));
-}
-
-/**
- * xmlSchemaGetBuiltInListSimpleTypeItemType:
- * @type: the built-in simple type.
- *
- * Lookup function
- *
- * Returns the item type of @type as defined by the built-in datatype
- * hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error.
- */
-xmlSchemaTypePtr
-xmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr type)
-{
-    if ((type == NULL) || (type->type != XML_SCHEMA_TYPE_BASIC))
-	return (NULL);
-    switch (type->builtInType) {
-	case XML_SCHEMAS_NMTOKENS:
-	    return (xmlSchemaTypeNmtokenDef );
-	case XML_SCHEMAS_IDREFS:
-	    return (xmlSchemaTypeIdrefDef);
-	case XML_SCHEMAS_ENTITIES:
-	    return (xmlSchemaTypeEntityDef);
-	default:
-	    return (NULL);
-    }
-}
-
-/****************************************************************
- *								*
- *		Convenience macros and functions		*
- *								*
- ****************************************************************/
-
-#define IS_TZO_CHAR(c)						\
-	((c == 0) || (c == 'Z') || (c == '+') || (c == '-'))
-
-#define VALID_YEAR(yr)          (yr != 0)
-#define VALID_MONTH(mon)        ((mon >= 1) && (mon <= 12))
-/* VALID_DAY should only be used when month is unknown */
-#define VALID_DAY(day)          ((day >= 1) && (day <= 31))
-#define VALID_HOUR(hr)          ((hr >= 0) && (hr <= 23))
-#define VALID_MIN(min)          ((min >= 0) && (min <= 59))
-#define VALID_SEC(sec)          ((sec >= 0) && (sec < 60))
-#define VALID_TZO(tzo)          ((tzo > -840) && (tzo < 840))
-#define IS_LEAP(y)						\
-	(((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
-
-static const unsigned int daysInMonth[12] =
-	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-static const unsigned int daysInMonthLeap[12] =
-	{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-#define MAX_DAYINMONTH(yr,mon)                                  \
-        (IS_LEAP(yr) ? daysInMonthLeap[mon - 1] : daysInMonth[mon - 1])
-
-#define VALID_MDAY(dt)						\
-	(IS_LEAP(dt->year) ?				        \
-	    (dt->day <= daysInMonthLeap[dt->mon - 1]) :	        \
-	    (dt->day <= daysInMonth[dt->mon - 1]))
-
-#define VALID_DATE(dt)						\
-	(VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt))
-
-#define VALID_END_OF_DAY(dt)					\
-	((dt)->hour == 24 && (dt)->min == 0 && (dt)->sec == 0)
-
-#define VALID_TIME(dt)						\
-	(((VALID_HOUR(dt->hour) && VALID_MIN(dt->min) &&	\
-	  VALID_SEC(dt->sec)) || VALID_END_OF_DAY(dt)) &&	\
-	 VALID_TZO(dt->tzo))
-
-#define VALID_DATETIME(dt)					\
-	(VALID_DATE(dt) && VALID_TIME(dt))
-
-#define SECS_PER_MIN            (60)
-#define SECS_PER_HOUR           (60 * SECS_PER_MIN)
-#define SECS_PER_DAY            (24 * SECS_PER_HOUR)
-
-static const long dayInYearByMonth[12] =
-	{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
-static const long dayInLeapYearByMonth[12] =
-	{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
-
-#define DAY_IN_YEAR(day, month, year)				\
-        ((IS_LEAP(year) ?					\
-                dayInLeapYearByMonth[month - 1] :		\
-                dayInYearByMonth[month - 1]) + day)
-
-#ifdef DEBUG
-#define DEBUG_DATE(dt)                                                  \
-    xmlGenericError(xmlGenericErrorContext,                             \
-        "type=%o %04ld-%02u-%02uT%02u:%02u:%03f",                       \
-        dt->type,dt->value.date.year,dt->value.date.mon,                \
-        dt->value.date.day,dt->value.date.hour,dt->value.date.min,      \
-        dt->value.date.sec);                                            \
-    if (dt->value.date.tz_flag)                                         \
-        if (dt->value.date.tzo != 0)                                    \
-            xmlGenericError(xmlGenericErrorContext,                     \
-                "%+05d\n",dt->value.date.tzo);                          \
-        else                                                            \
-            xmlGenericError(xmlGenericErrorContext, "Z\n");             \
-    else                                                                \
-        xmlGenericError(xmlGenericErrorContext,"\n")
-#else
-#define DEBUG_DATE(dt)
-#endif
-
-/**
- * _xmlSchemaParseGYear:
- * @dt:  pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gYear without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gYear. It is supposed that @dt->year is big enough to contain
- * the year.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGYear (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur = *str, *firstChar;
-    int isneg = 0, digcnt = 0;
-
-    if (((*cur < '0') || (*cur > '9')) &&
-	(*cur != '-') && (*cur != '+'))
-	return -1;
-
-    if (*cur == '-') {
-	isneg = 1;
-	cur++;
-    }
-
-    firstChar = cur;
-
-    while ((*cur >= '0') && (*cur <= '9')) {
-	dt->year = dt->year * 10 + (*cur - '0');
-	cur++;
-	digcnt++;
-    }
-
-    /* year must be at least 4 digits (CCYY); over 4
-     * digits cannot have a leading zero. */
-    if ((digcnt < 4) || ((digcnt > 4) && (*firstChar == '0')))
-	return 1;
-
-    if (isneg)
-	dt->year = - dt->year;
-
-    if (!VALID_YEAR(dt->year))
-	return 2;
-
-    *str = cur;
-    return 0;
-}
-
-/**
- * PARSE_2_DIGITS:
- * @num:  the integer to fill in
- * @cur:  an #xmlChar *
- * @invalid: an integer
- *
- * Parses a 2-digits integer and updates @num with the value. @cur is
- * updated to point just after the integer.
- * In case of error, @invalid is set to %TRUE, values of @num and
- * @cur are undefined.
- */
-#define PARSE_2_DIGITS(num, cur, invalid)			\
-	if ((cur[0] < '0') || (cur[0] > '9') ||			\
-	    (cur[1] < '0') || (cur[1] > '9'))			\
-	    invalid = 1;					\
-	else							\
-	    num = (cur[0] - '0') * 10 + (cur[1] - '0');		\
-	cur += 2;
-
-/**
- * PARSE_FLOAT:
- * @num:  the double to fill in
- * @cur:  an #xmlChar *
- * @invalid: an integer
- *
- * Parses a float and updates @num with the value. @cur is
- * updated to point just after the float. The float must have a
- * 2-digits integer part and may or may not have a decimal part.
- * In case of error, @invalid is set to %TRUE, values of @num and
- * @cur are undefined.
- */
-#define PARSE_FLOAT(num, cur, invalid)				\
-	PARSE_2_DIGITS(num, cur, invalid);			\
-	if (!invalid && (*cur == '.')) {			\
-	    double mult = 1;				        \
-	    cur++;						\
-	    if ((*cur < '0') || (*cur > '9'))			\
-		invalid = 1;					\
-	    while ((*cur >= '0') && (*cur <= '9')) {		\
-		mult /= 10;					\
-		num += (*cur - '0') * mult;			\
-		cur++;						\
-	    }							\
-	}
-
-/**
- * _xmlSchemaParseGMonth:
- * @dt:  pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gMonth without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gMonth.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGMonth (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur = *str;
-    int ret = 0;
-    unsigned int value = 0;
-
-    PARSE_2_DIGITS(value, cur, ret);
-    if (ret != 0)
-	return ret;
-
-    if (!VALID_MONTH(value))
-	return 2;
-
-    dt->mon = value;
-
-    *str = cur;
-    return 0;
-}
-
-/**
- * _xmlSchemaParseGDay:
- * @dt:  pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gDay without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gDay.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur = *str;
-    int ret = 0;
-    unsigned int value = 0;
-
-    PARSE_2_DIGITS(value, cur, ret);
-    if (ret != 0)
-	return ret;
-
-    if (!VALID_DAY(value))
-	return 2;
-
-    dt->day = value;
-    *str = cur;
-    return 0;
-}
-
-/**
- * _xmlSchemaParseTime:
- * @dt:  pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:time without time zone and fills in the appropriate
- * fields of the @dt structure. @str is updated to point just after the
- * xs:time.
- * In case of error, values of @dt fields are undefined.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur = *str;
-    int ret = 0;
-    int value = 0;
-
-    PARSE_2_DIGITS(value, cur, ret);
-    if (ret != 0)
-	return ret;
-    if (*cur != ':')
-	return 1;
-    if (!VALID_HOUR(value) && value != 24 /* Allow end-of-day hour */)
-	return 2;
-    cur++;
-
-    /* the ':' insures this string is xs:time */
-    dt->hour = value;
-
-    PARSE_2_DIGITS(value, cur, ret);
-    if (ret != 0)
-	return ret;
-    if (!VALID_MIN(value))
-	return 2;
-    dt->min = value;
-
-    if (*cur != ':')
-	return 1;
-    cur++;
-
-    PARSE_FLOAT(dt->sec, cur, ret);
-    if (ret != 0)
-	return ret;
-
-    if (!VALID_TIME(dt))
-	return 2;
-
-    *str = cur;
-    return 0;
-}
-
-/**
- * _xmlSchemaParseTimeZone:
- * @dt:  pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a time zone without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * time zone.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseTimeZone (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur;
-    int ret = 0;
-
-    if (str == NULL)
-	return -1;
-    cur = *str;
-
-    switch (*cur) {
-    case 0:
-	dt->tz_flag = 0;
-	dt->tzo = 0;
-	break;
-
-    case 'Z':
-	dt->tz_flag = 1;
-	dt->tzo = 0;
-	cur++;
-	break;
-
-    case '+':
-    case '-': {
-	int isneg = 0, tmp = 0;
-	isneg = (*cur == '-');
-
-	cur++;
-
-	PARSE_2_DIGITS(tmp, cur, ret);
-	if (ret != 0)
-	    return ret;
-	if (!VALID_HOUR(tmp))
-	    return 2;
-
-	if (*cur != ':')
-	    return 1;
-	cur++;
-
-	dt->tzo = tmp * 60;
-
-	PARSE_2_DIGITS(tmp, cur, ret);
-	if (ret != 0)
-	    return ret;
-	if (!VALID_MIN(tmp))
-	    return 2;
-
-	dt->tzo += tmp;
-	if (isneg)
-	    dt->tzo = - dt->tzo;
-
-	if (!VALID_TZO(dt->tzo))
-	    return 2;
-
-	dt->tz_flag = 1;
-	break;
-      }
-    default:
-	return 1;
-    }
-
-    *str = cur;
-    return 0;
-}
-
-/**
- * _xmlSchemaBase64Decode:
- * @ch: a character
- *
- * Converts a base64 encoded character to its base 64 value.
- *
- * Returns 0-63 (value), 64 (pad), or -1 (not recognized)
- */
-static int
-_xmlSchemaBase64Decode (const xmlChar ch) {
-    if (('A' <= ch) && (ch <= 'Z')) return ch - 'A';
-    if (('a' <= ch) && (ch <= 'z')) return ch - 'a' + 26;
-    if (('0' <= ch) && (ch <= '9')) return ch - '0' + 52;
-    if ('+' == ch) return 62;
-    if ('/' == ch) return 63;
-    if ('=' == ch) return 64;
-    return -1;
-}
-
-/****************************************************************
- *								*
- *	XML Schema Dates/Times Datatypes Handling		*
- *								*
- ****************************************************************/
-
-/**
- * PARSE_DIGITS:
- * @num:  the integer to fill in
- * @cur:  an #xmlChar *
- * @num_type: an integer flag
- *
- * Parses a digits integer and updates @num with the value. @cur is
- * updated to point just after the integer.
- * In case of error, @num_type is set to -1, values of @num and
- * @cur are undefined.
- */
-#define PARSE_DIGITS(num, cur, num_type)	                \
-	if ((*cur < '0') || (*cur > '9'))			\
-	    num_type = -1;					\
-        else                                                    \
-	    while ((*cur >= '0') && (*cur <= '9')) {		\
-	        num = num * 10 + (*cur - '0');		        \
-	        cur++;                                          \
-            }
-
-/**
- * PARSE_NUM:
- * @num:  the double to fill in
- * @cur:  an #xmlChar *
- * @num_type: an integer flag
- *
- * Parses a float or integer and updates @num with the value. @cur is
- * updated to point just after the number. If the number is a float,
- * then it must have an integer part and a decimal part; @num_type will
- * be set to 1. If there is no decimal part, @num_type is set to zero.
- * In case of error, @num_type is set to -1, values of @num and
- * @cur are undefined.
- */
-#define PARSE_NUM(num, cur, num_type)				\
-        num = 0;                                                \
-	PARSE_DIGITS(num, cur, num_type);	                \
-	if (!num_type && (*cur == '.')) {			\
-	    double mult = 1;				        \
-	    cur++;						\
-	    if ((*cur < '0') || (*cur > '9'))			\
-		num_type = -1;					\
-            else                                                \
-                num_type = 1;                                   \
-	    while ((*cur >= '0') && (*cur <= '9')) {		\
-		mult /= 10;					\
-		num += (*cur - '0') * mult;			\
-		cur++;						\
-	    }							\
-	}
-
-/**
- * xmlSchemaValidateDates:
- * @type: the expected type or XML_SCHEMAS_UNKNOWN
- * @dateTime:  string to analyze
- * @val:  the return computed value
- *
- * Check that @dateTime conforms to the lexical space of one of the date types.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateDates (xmlSchemaValType type,
-	                const xmlChar *dateTime, xmlSchemaValPtr *val,
-			int collapse) {
-    xmlSchemaValPtr dt;
-    int ret;
-    const xmlChar *cur = dateTime;
-
-#define RETURN_TYPE_IF_VALID(t)					\
-    if (IS_TZO_CHAR(*cur)) {					\
-	ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur);	\
-	if (ret == 0) {						\
-	    if (*cur != 0)					\
-		goto error;					\
-	    dt->type = t;					\
-	    goto done;						\
-	}							\
-    }
-
-    if (dateTime == NULL)
-	return -1;
-
-    if (collapse)
-	while IS_WSP_BLANK_CH(*cur) cur++;
-
-    if ((*cur != '-') && (*cur < '0') && (*cur > '9'))
-	return 1;
-
-    dt = xmlSchemaNewValue(XML_SCHEMAS_UNKNOWN);
-    if (dt == NULL)
-	return -1;
-
-    if ((cur[0] == '-') && (cur[1] == '-')) {
-	/*
-	 * It's an incomplete date (xs:gMonthDay, xs:gMonth or
-	 * xs:gDay)
-	 */
-	cur += 2;
-
-	/* is it an xs:gDay? */
-	if (*cur == '-') {
-	    if (type == XML_SCHEMAS_GMONTH)
-		goto error;
-	  ++cur;
-	    ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
-	    if (ret != 0)
-		goto error;
-
-	    RETURN_TYPE_IF_VALID(XML_SCHEMAS_GDAY);
-
-	    goto error;
-	}
-
-	/*
-	 * it should be an xs:gMonthDay or xs:gMonth
-	 */
-	ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
-	if (ret != 0)
-	    goto error;
-
-        /*
-         * a '-' char could indicate this type is xs:gMonthDay or
-         * a negative time zone offset. Check for xs:gMonthDay first.
-         * Also the first three char's of a negative tzo (-MM:SS) can
-         * appear to be a valid day; so even if the day portion
-         * of the xs:gMonthDay verifies, we must insure it was not
-         * a tzo.
-         */
-        if (*cur == '-') {
-            const xmlChar *rewnd = cur;
-            cur++;
-
-	    ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
-            if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) {
-
-                /*
-                 * we can use the VALID_MDAY macro to validate the month
-                 * and day because the leap year test will flag year zero
-                 * as a leap year (even though zero is an invalid year).
-		 * FUTURE TODO: Zero will become valid in XML Schema 1.1
-		 * probably.
-                 */
-                if (VALID_MDAY((&(dt->value.date)))) {
-
-	            RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTHDAY);
-
-                    goto error;
-                }
-            }
-
-            /*
-             * not xs:gMonthDay so rewind and check if just xs:gMonth
-             * with an optional time zone.
-             */
-            cur = rewnd;
-        }
-
-	RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTH);
-
-	goto error;
-    }
-
-    /*
-     * It's a right-truncated date or an xs:time.
-     * Try to parse an xs:time then fallback on right-truncated dates.
-     */
-    if ((*cur >= '0') && (*cur <= '9')) {
-	ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
-	if (ret == 0) {
-	    /* it's an xs:time */
-	    RETURN_TYPE_IF_VALID(XML_SCHEMAS_TIME);
-	}
-    }
-
-    /* fallback on date parsing */
-    cur = dateTime;
-
-    ret = _xmlSchemaParseGYear(&(dt->value.date), &cur);
-    if (ret != 0)
-	goto error;
-
-    /* is it an xs:gYear? */
-    RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEAR);
-
-    if (*cur != '-')
-	goto error;
-    cur++;
-
-    ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
-    if (ret != 0)
-	goto error;
-
-    /* is it an xs:gYearMonth? */
-    RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEARMONTH);
-
-    if (*cur != '-')
-	goto error;
-    cur++;
-
-    ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
-    if ((ret != 0) || !VALID_DATE((&(dt->value.date))))
-	goto error;
-
-    /* is it an xs:date? */
-    RETURN_TYPE_IF_VALID(XML_SCHEMAS_DATE);
-
-    if (*cur != 'T')
-	goto error;
-    cur++;
-
-    /* it should be an xs:dateTime */
-    ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
-    if (ret != 0)
-	goto error;
-
-    ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur);
-    if (collapse)
-	while IS_WSP_BLANK_CH(*cur) cur++;
-    if ((ret != 0) || (*cur != 0) || (!(VALID_DATETIME((&(dt->value.date))))))
-	goto error;
-
-
-    dt->type = XML_SCHEMAS_DATETIME;
-
-done:
-#if 1
-    if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type))
-        goto error;
-#else
-    /*
-     * insure the parsed type is equal to or less significant (right
-     * truncated) than the desired type.
-     */
-    if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type)) {
-
-        /* time only matches time */
-        if ((type == XML_SCHEMAS_TIME) && (dt->type == XML_SCHEMAS_TIME))
-            goto error;
-
-        if ((type == XML_SCHEMAS_DATETIME) &&
-            ((dt->type != XML_SCHEMAS_DATE) ||
-             (dt->type != XML_SCHEMAS_GYEARMONTH) ||
-             (dt->type != XML_SCHEMAS_GYEAR)))
-            goto error;
-
-        if ((type == XML_SCHEMAS_DATE) &&
-            ((dt->type != XML_SCHEMAS_GYEAR) ||
-             (dt->type != XML_SCHEMAS_GYEARMONTH)))
-            goto error;
-
-        if ((type == XML_SCHEMAS_GYEARMONTH) && (dt->type != XML_SCHEMAS_GYEAR))
-            goto error;
-
-        if ((type == XML_SCHEMAS_GMONTHDAY) && (dt->type != XML_SCHEMAS_GMONTH))
-            goto error;
-    }
-#endif
-
-    if (val != NULL)
-        *val = dt;
-    else
-	xmlSchemaFreeValue(dt);
-
-    return 0;
-
-error:
-    if (dt != NULL)
-	xmlSchemaFreeValue(dt);
-    return 1;
-}
-
-/**
- * xmlSchemaValidateDuration:
- * @type: the predefined type
- * @duration:  string to analyze
- * @val:  the return computed value
- *
- * Check that @duration conforms to the lexical space of the duration type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
-	                   const xmlChar *duration, xmlSchemaValPtr *val,
-			   int collapse) {
-    const xmlChar  *cur = duration;
-    xmlSchemaValPtr dur;
-    int isneg = 0;
-    unsigned int seq = 0;
-    double         num;
-    int            num_type = 0;  /* -1 = invalid, 0 = int, 1 = floating */
-    const xmlChar  desig[]  = {'Y', 'M', 'D', 'H', 'M', 'S'};
-    const double   multi[]  = { 0.0, 0.0, 86400.0, 3600.0, 60.0, 1.0, 0.0};
-
-    if (duration == NULL)
-	return -1;
-
-    if (collapse)
-	while IS_WSP_BLANK_CH(*cur) cur++;
-
-    if (*cur == '-') {
-        isneg = 1;
-        cur++;
-    }
-
-    /* duration must start with 'P' (after sign) */
-    if (*cur++ != 'P')
-	return 1;
-
-    if (*cur == 0)
-	return 1;
-
-    dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
-    if (dur == NULL)
-	return -1;
-
-    while (*cur != 0) {
-
-        /* input string should be empty or invalid date/time item */
-        if (seq >= sizeof(desig))
-            goto error;
-
-        /* T designator must be present for time items */
-        if (*cur == 'T') {
-            if (seq <= 3) {
-                seq = 3;
-                cur++;
-            } else
-                return 1;
-        } else if (seq == 3)
-            goto error;
-
-        /* parse the number portion of the item */
-        PARSE_NUM(num, cur, num_type);
-
-        if ((num_type == -1) || (*cur == 0))
-            goto error;
-
-        /* update duration based on item type */
-        while (seq < sizeof(desig)) {
-            if (*cur == desig[seq]) {
-
-                /* verify numeric type; only seconds can be float */
-                if ((num_type != 0) && (seq < (sizeof(desig)-1)))
-                    goto error;
-
-                switch (seq) {
-                    case 0:
-                        dur->value.dur.mon = (long)num * 12;
-                        break;
-                    case 1:
-                        dur->value.dur.mon += (long)num;
-                        break;
-                    default:
-                        /* convert to seconds using multiplier */
-                        dur->value.dur.sec += num * multi[seq];
-                        seq++;
-                        break;
-                }
-
-                break;          /* exit loop */
-            }
-            /* no date designators found? */
-            if ((++seq == 3) || (seq == 6))
-                goto error;
-        }
-	cur++;
-	if (collapse)
-	    while IS_WSP_BLANK_CH(*cur) cur++;
-    }
-
-    if (isneg) {
-        dur->value.dur.mon = -dur->value.dur.mon;
-        dur->value.dur.day = -dur->value.dur.day;
-        dur->value.dur.sec = -dur->value.dur.sec;
-    }
-
-    if (val != NULL)
-        *val = dur;
-    else
-	xmlSchemaFreeValue(dur);
-
-    return 0;
-
-error:
-    if (dur != NULL)
-	xmlSchemaFreeValue(dur);
-    return 1;
-}
-
-/**
- * xmlSchemaStrip:
- * @value: a value
- *
- * Removes the leading and ending spaces of a string
- *
- * Returns the new string or NULL if no change was required.
- */
-static xmlChar *
-xmlSchemaStrip(const xmlChar *value) {
-    const xmlChar *start = value, *end, *f;
-
-    if (value == NULL) return(NULL);
-    while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
-    end = start;
-    while (*end != 0) end++;
-    f = end;
-    end--;
-    while ((end > start) && (IS_BLANK_CH(*end))) end--;
-    end++;
-    if ((start == value) && (f == end)) return(NULL);
-    return(xmlStrndup(start, end - start));
-}
-
-/**
- * xmlSchemaWhiteSpaceReplace:
- * @value: a value
- *
- * Replaces 0xd, 0x9 and 0xa with a space.
- *
- * Returns the new string or NULL if no change was required.
- */
-xmlChar *
-xmlSchemaWhiteSpaceReplace(const xmlChar *value) {
-    const xmlChar *cur = value;
-    xmlChar *ret = NULL, *mcur;
-
-    if (value == NULL)
-	return(NULL);
-
-    while ((*cur != 0) &&
-	(((*cur) != 0xd) && ((*cur) != 0x9) && ((*cur) != 0xa))) {
-	cur++;
-    }
-    if (*cur == 0)
-	return (NULL);
-    ret = xmlStrdup(value);
-    /* TODO FIXME: I guess gcc will bark at this. */
-    mcur = (xmlChar *)  (ret + (cur - value));
-    do {
-	if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) )
-	    *mcur = ' ';
-	mcur++;
-    } while (*mcur != 0);
-    return(ret);
-}
-
-/**
- * xmlSchemaCollapseString:
- * @value: a value
- *
- * Removes and normalize white spaces in the string
- *
- * Returns the new string or NULL if no change was required.
- */
-xmlChar *
-xmlSchemaCollapseString(const xmlChar *value) {
-    const xmlChar *start = value, *end, *f;
-    xmlChar *g;
-    int col = 0;
-
-    if (value == NULL) return(NULL);
-    while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
-    end = start;
-    while (*end != 0) {
-	if ((*end == ' ') && (IS_BLANK_CH(end[1]))) {
-	    col = end - start;
-	    break;
-	} else if ((*end == 0xa) || (*end == 0x9) || (*end == 0xd)) {
-	    col = end - start;
-	    break;
-	}
-	end++;
-    }
-    if (col == 0) {
-	f = end;
-	end--;
-	while ((end > start) && (IS_BLANK_CH(*end))) end--;
-	end++;
-	if ((start == value) && (f == end)) return(NULL);
-	return(xmlStrndup(start, end - start));
-    }
-    start = xmlStrdup(start);
-    if (start == NULL) return(NULL);
-    g = (xmlChar *) (start + col);
-    end = g;
-    while (*end != 0) {
-	if (IS_BLANK_CH(*end)) {
-	    end++;
-	    while (IS_BLANK_CH(*end)) end++;
-	    if (*end != 0)
-		*g++ = ' ';
-	} else
-	    *g++ = *end++;
-    }
-    *g = 0;
-    return((xmlChar *) start);
-}
-
-/**
- * xmlSchemaValAtomicListNode:
- * @type: the predefined atomic type for a token in the list
- * @value: the list value to check
- * @ret:  the return computed value
- * @node:  the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined
- * list type. if true a value is computed and returned in @ret.
- *
- * Returns the number of items if this validates, a negative error code
- *         number otherwise
- */
-static int
-xmlSchemaValAtomicListNode(xmlSchemaTypePtr type, const xmlChar *value,
-	                   xmlSchemaValPtr *ret, xmlNodePtr node) {
-    xmlChar *val, *cur, *endval;
-    int nb_values = 0;
-    int tmp = 0;
-
-    if (value == NULL) {
-	return(-1);
-    }
-    val = xmlStrdup(value);
-    if (val == NULL) {
-	return(-1);
-    }
-    if (ret != NULL) {
-        *ret = NULL;
-    }
-    cur = val;
-    /*
-     * Split the list
-     */
-    while (IS_BLANK_CH(*cur)) *cur++ = 0;
-    while (*cur != 0) {
-	if (IS_BLANK_CH(*cur)) {
-	    *cur = 0;
-	    cur++;
-	    while (IS_BLANK_CH(*cur)) *cur++ = 0;
-	} else {
-	    nb_values++;
-	    cur++;
-	    while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
-	}
-    }
-    if (nb_values == 0) {
-	xmlFree(val);
-	return(nb_values);
-    }
-    endval = cur;
-    cur = val;
-    while ((*cur == 0) && (cur != endval)) cur++;
-    while (cur != endval) {
-	tmp = xmlSchemaValPredefTypeNode(type, cur, NULL, node);
-	if (tmp != 0)
-	    break;
-	while (*cur != 0) cur++;
-	while ((*cur == 0) && (cur != endval)) cur++;
-    }
-    /* TODO what return value ? c.f. bug #158628
-    if (ret != NULL) {
-	TODO
-    } */
-    xmlFree(val);
-    if (tmp == 0)
-	return(nb_values);
-    return(-1);
-}
-
-/**
- * xmlSchemaParseUInt:
- * @str: pointer to the string R/W
- * @llo: pointer to the low result
- * @lmi: pointer to the mid result
- * @lhi: pointer to the high result
- *
- * Parse an unsigned long into 3 fields.
- *
- * Returns the number of significant digits in the number or
- * -1 if overflow of the capacity and -2 if it's not a number.
- */
-static int
-xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo,
-                   unsigned long *lmi, unsigned long *lhi) {
-    unsigned long lo = 0, mi = 0, hi = 0;
-    const xmlChar *tmp, *cur = *str;
-    int ret = 0, i = 0;
-
-    if (!((*cur >= '0') && (*cur <= '9')))
-        return(-2);
-
-    while (*cur == '0') {        /* ignore leading zeroes */
-        cur++;
-    }
-    tmp = cur;
-    while ((*tmp != 0) && (*tmp >= '0') && (*tmp <= '9')) {
-        i++;tmp++;ret++;
-    }
-    if (i > 24) {
-        *str = tmp;
-        return(-1);
-    }
-    while (i > 16) {
-        hi = hi * 10 + (*cur++ - '0');
-        i--;
-    }
-    while (i > 8) {
-        mi = mi * 10 + (*cur++ - '0');
-        i--;
-    }
-    while (i > 0) {
-        lo = lo * 10 + (*cur++ - '0');
-        i--;
-    }
-
-    *str = cur;
-    *llo = lo;
-    *lmi = mi;
-    *lhi = hi;
-    return(ret);
-}
-
-/**
- * xmlSchemaValAtomicType:
- * @type: the predefined type
- * @value: the value to check
- * @val:  the return computed value
- * @node:  the node containing the value
- * flags:  flags to control the vlidation
- *
- * Check that a value conforms to the lexical space of the atomic type.
- * if true a value is computed and returned in @val.
- * This checks the value space for list types as well (IDREFS, NMTOKENS).
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
-                       xmlSchemaValPtr * val, xmlNodePtr node, int flags,
-		       xmlSchemaWhitespaceValueType ws,
-		       int normOnTheFly, int applyNorm, int createStringValue)
-{
-    xmlSchemaValPtr v;
-    xmlChar *norm = NULL;
-    int ret = 0;
-
-    if (xmlSchemaTypesInitialized == 0)
-        xmlSchemaInitTypes();
-    if (type == NULL)
-        return (-1);
-
-    /*
-     * validating a non existant text node is similar to validating
-     * an empty one.
-     */
-    if (value == NULL)
-        value = BAD_CAST "";
-
-    if (val != NULL)
-        *val = NULL;
-    if ((flags == 0) && (value != NULL)) {
-
-        if ((type->builtInType != XML_SCHEMAS_STRING) &&
-	  (type->builtInType != XML_SCHEMAS_ANYTYPE) &&
-	  (type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) {
-	    if (type->builtInType == XML_SCHEMAS_NORMSTRING)
-		norm = xmlSchemaWhiteSpaceReplace(value);
-            else
-		norm = xmlSchemaCollapseString(value);
-            if (norm != NULL)
-                value = norm;
-        }
-    }
-
-    switch (type->builtInType) {
-        case XML_SCHEMAS_UNKNOWN:
-            goto error;
-	case XML_SCHEMAS_ANYTYPE:
-	case XML_SCHEMAS_ANYSIMPLETYPE:
-	    if ((createStringValue) && (val != NULL)) {
-		v = xmlSchemaNewValue(XML_SCHEMAS_ANYSIMPLETYPE);
-		if (v != NULL) {
-		    v->value.str = xmlStrdup(value);
-		    *val = v;
-		} else {
-		    goto error;
-		}
-	    }
-	    goto return0;
-        case XML_SCHEMAS_STRING:
-	    if (! normOnTheFly) {
-		const xmlChar *cur = value;
-
-		if (ws == XML_SCHEMA_WHITESPACE_REPLACE) {
-		    while (*cur != 0) {
-			if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
-			    goto return1;
-			} else {
-			    cur++;
-			}
-		    }
-		} else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
-		    while (*cur != 0) {
-			if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
-			    goto return1;
-			} else if IS_WSP_SPACE_CH(*cur) {
-			    cur++;
-			    if IS_WSP_SPACE_CH(*cur)
-				goto return1;
-			} else {
-			    cur++;
-			}
-		    }
-		}
-	    }
-	    if (createStringValue && (val != NULL)) {
-		if (applyNorm) {
-		    if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			norm = xmlSchemaCollapseString(value);
-		    else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
-			norm = xmlSchemaWhiteSpaceReplace(value);
-		    if (norm != NULL)
-			value = norm;
-		}
-		v = xmlSchemaNewValue(XML_SCHEMAS_STRING);
-		if (v != NULL) {
-		    v->value.str = xmlStrdup(value);
-		    *val = v;
-		} else {
-		    goto error;
-		}
-	    }
-            goto return0;
-        case XML_SCHEMAS_NORMSTRING:{
-		if (normOnTheFly) {
-		    if (applyNorm) {
-			if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			    norm = xmlSchemaCollapseString(value);
-			else
-			    norm = xmlSchemaWhiteSpaceReplace(value);
-			if (norm != NULL)
-			    value = norm;
-		    }
-		} else {
-		    const xmlChar *cur = value;
-		    while (*cur != 0) {
-			if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
-			    goto return1;
-			} else {
-			    cur++;
-			}
-		    }
-		}
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_NORMSTRING);
-                    if (v != NULL) {
-                        v->value.str = xmlStrdup(value);
-                        *val = v;
-                    } else {
-                        goto error;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_DECIMAL:{
-                const xmlChar *cur = value;
-                unsigned int len, neg, integ, hasLeadingZeroes;
-		xmlChar cval[25];
-		xmlChar *cptr = cval;
-
-                if ((cur == NULL) || (*cur == 0))
-                    goto return1;
-
-		/*
-		* xs:decimal has a whitespace-facet value of 'collapse'.
-		*/
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-
-		/*
-		* First we handle an optional sign.
-		*/
-		neg = 0;
-                if (*cur == '-') {
-		    neg = 1;
-                    cur++;
-		} else if (*cur == '+')
-                    cur++;
-		/*
-		* Disallow: "", "-", "- "
-		*/
-		if (*cur == 0)
-		    goto return1;
-		/*
-		 * Next we "pre-parse" the number, in preparation for calling
-		 * the common routine xmlSchemaParseUInt.  We get rid of any
-		 * leading zeroes (because we have reserved only 25 chars),
-		 * and note the position of a decimal point.
-		 */
-		len = 0;
-		integ = ~0u;
-		hasLeadingZeroes = 0;
-		/*
-		* Skip leading zeroes.
-		*/
-		while (*cur == '0') {
-		    cur++;
-		    hasLeadingZeroes = 1;
-		}
-		if (*cur != 0) {
-		    do {
-			if ((*cur >= '0') && (*cur <= '9')) {
-			    *cptr++ = *cur++;
-			    len++;
-			} else if (*cur == '.') {
-			    cur++;
-			    integ = len;
-			    do {
-				if ((*cur >= '0') && (*cur <= '9')) {
-				    *cptr++ = *cur++;
-				    len++;
-				} else
-				    break;
-			    } while (len < 24);
-			    /*
-			    * Disallow "." but allow "00."
-			    */
-			    if ((len == 0) && (!hasLeadingZeroes))
-				goto return1;
-			    break;
-			} else
-			    break;
-		    } while (len < 24);
-		}
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-		if (*cur != 0)
-		    goto return1; /* error if any extraneous chars */
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL);
-                    if (v != NULL) {
-			/*
-			* Now evaluate the significant digits of the number
-			*/
-			if (len != 0) {
-
-			    if (integ != ~0u) {
-				/*
-				* Get rid of trailing zeroes in the
-				* fractional part.
-				*/
-				while ((len != integ) && (*(cptr-1) == '0')) {
-				    cptr--;
-				    len--;
-				}
-			    }
-			    /*
-			    * Terminate the (preparsed) string.
-			    */
-			    if (len != 0) {
-				*cptr = 0;
-				cptr = cval;
-
-				xmlSchemaParseUInt((const xmlChar **)&cptr,
-				    &v->value.decimal.lo,
-				    &v->value.decimal.mi,
-				    &v->value.decimal.hi);
-			    }
-			}
-			/*
-			* Set the total digits to 1 if a zero value.
-			*/
-                        v->value.decimal.sign = neg;
-			if (len == 0) {
-			    /* Speedup for zero values. */
-			    v->value.decimal.total = 1;
-			} else {
-			    v->value.decimal.total = len;
-			    if (integ == ~0u)
-				v->value.decimal.frac = 0;
-			    else
-				v->value.decimal.frac = len - integ;
-			}
-                        *val = v;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_TIME:
-        case XML_SCHEMAS_GDAY:
-        case XML_SCHEMAS_GMONTH:
-        case XML_SCHEMAS_GMONTHDAY:
-        case XML_SCHEMAS_GYEAR:
-        case XML_SCHEMAS_GYEARMONTH:
-        case XML_SCHEMAS_DATE:
-        case XML_SCHEMAS_DATETIME:
-            ret = xmlSchemaValidateDates(type->builtInType, value, val,
-		normOnTheFly);
-            break;
-        case XML_SCHEMAS_DURATION:
-            ret = xmlSchemaValidateDuration(type, value, val,
-		normOnTheFly);
-            break;
-        case XML_SCHEMAS_FLOAT:
-        case XML_SCHEMAS_DOUBLE: {
-                const xmlChar *cur = value;
-                int neg = 0;
-                int digits_before = 0;
-                int digits_after = 0;
-
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-
-                if ((cur[0] == 'N') && (cur[1] == 'a') && (cur[2] == 'N')) {
-                    cur += 3;
-                    if (*cur != 0)
-                        goto return1;
-                    if (val != NULL) {
-                        if (type == xmlSchemaTypeFloatDef) {
-                            v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
-                            if (v != NULL) {
-                                v->value.f = (float) xmlXPathNAN;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto error;
-                            }
-                        } else {
-                            v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
-                            if (v != NULL) {
-                                v->value.d = xmlXPathNAN;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto error;
-                            }
-                        }
-                        *val = v;
-                    }
-                    goto return0;
-                }
-                if (*cur == '-') {
-                    neg = 1;
-                    cur++;
-                }
-                if ((cur[0] == 'I') && (cur[1] == 'N') && (cur[2] == 'F')) {
-                    cur += 3;
-                    if (*cur != 0)
-                        goto return1;
-                    if (val != NULL) {
-                        if (type == xmlSchemaTypeFloatDef) {
-                            v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
-                            if (v != NULL) {
-                                if (neg)
-                                    v->value.f = (float) xmlXPathNINF;
-                                else
-                                    v->value.f = (float) xmlXPathPINF;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto error;
-                            }
-                        } else {
-                            v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
-                            if (v != NULL) {
-                                if (neg)
-                                    v->value.d = xmlXPathNINF;
-                                else
-                                    v->value.d = xmlXPathPINF;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto error;
-                            }
-                        }
-                        *val = v;
-                    }
-                    goto return0;
-                }
-                if ((neg == 0) && (*cur == '+'))
-                    cur++;
-                if ((cur[0] == 0) || (cur[0] == '+') || (cur[0] == '-'))
-                    goto return1;
-                while ((*cur >= '0') && (*cur <= '9')) {
-                    cur++;
-                    digits_before++;
-                }
-                if (*cur == '.') {
-                    cur++;
-                    while ((*cur >= '0') && (*cur <= '9')) {
-                        cur++;
-                        digits_after++;
-                    }
-                }
-                if ((digits_before == 0) && (digits_after == 0))
-                    goto return1;
-                if ((*cur == 'e') || (*cur == 'E')) {
-                    cur++;
-                    if ((*cur == '-') || (*cur == '+'))
-                        cur++;
-                    while ((*cur >= '0') && (*cur <= '9'))
-                        cur++;
-                }
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-
-                if (*cur != 0)
-                    goto return1;
-                if (val != NULL) {
-                    if (type == xmlSchemaTypeFloatDef) {
-                        v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
-                        if (v != NULL) {
-			    /*
-			    * TODO: sscanf seems not to give the correct
-			    * value for extremely high/low values.
-			    * E.g. "1E-149" results in zero.
-			    */
-                            if (sscanf((const char *) value, "%f",
-                                 &(v->value.f)) == 1) {
-                                *val = v;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto return1;
-                            }
-                        } else {
-                            goto error;
-                        }
-                    } else {
-                        v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
-                        if (v != NULL) {
-			    /*
-			    * TODO: sscanf seems not to give the correct
-			    * value for extremely high/low values.
-			    */
-                            if (sscanf((const char *) value, "%lf",
-                                 &(v->value.d)) == 1) {
-                                *val = v;
-                            } else {
-                                xmlSchemaFreeValue(v);
-                                goto return1;
-                            }
-                        } else {
-                            goto error;
-                        }
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_BOOLEAN:{
-                const xmlChar *cur = value;
-
-		if (normOnTheFly) {
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-		    if (*cur == '0') {
-			ret = 0;
-			cur++;
-		    } else if (*cur == '1') {
-			ret = 1;
-			cur++;
-		    } else if (*cur == 't') {
-			cur++;
-			if ((*cur++ == 'r') && (*cur++ == 'u') &&
-			    (*cur++ == 'e')) {
-			    ret = 1;
-			} else
-			    goto return1;
-		    } else if (*cur == 'f') {
-			cur++;
-			if ((*cur++ == 'a') && (*cur++ == 'l') &&
-			    (*cur++ == 's') && (*cur++ == 'e')) {
-			    ret = 0;
-			} else
-			    goto return1;
-		    } else
-			goto return1;
-		    if (*cur != 0) {
-			while IS_WSP_BLANK_CH(*cur) cur++;
-			if (*cur != 0)
-			    goto return1;
-		    }
-		} else {
-		    if ((cur[0] == '0') && (cur[1] == 0))
-			ret = 0;
-		    else if ((cur[0] == '1') && (cur[1] == 0))
-			ret = 1;
-		    else if ((cur[0] == 't') && (cur[1] == 'r')
-			&& (cur[2] == 'u') && (cur[3] == 'e')
-			&& (cur[4] == 0))
-			ret = 1;
-		    else if ((cur[0] == 'f') && (cur[1] == 'a')
-			&& (cur[2] == 'l') && (cur[3] == 's')
-			&& (cur[4] == 'e') && (cur[5] == 0))
-			ret = 0;
-		    else
-			goto return1;
-		}
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN);
-                    if (v != NULL) {
-                        v->value.b = ret;
-                        *val = v;
-                    } else {
-                        goto error;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_TOKEN:{
-                const xmlChar *cur = value;
-
-		if (! normOnTheFly) {
-		    while (*cur != 0) {
-			if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
-			    goto return1;
-			} else if (*cur == ' ') {
-			    cur++;
-			    if (*cur == 0)
-				goto return1;
-			    if (*cur == ' ')
-				goto return1;
-			} else {
-			    cur++;
-			}
-		    }
-		}
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);
-                    if (v != NULL) {
-                        v->value.str = xmlStrdup(value);
-                        *val = v;
-                    } else {
-                        goto error;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_LANGUAGE:
-	    if (normOnTheFly) {
-		norm = xmlSchemaCollapseString(value);
-		if (norm != NULL)
-		    value = norm;
-	    }
-            if (xmlCheckLanguageID(value) == 1) {
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE);
-                    if (v != NULL) {
-                        v->value.str = xmlStrdup(value);
-                        *val = v;
-                    } else {
-                        goto error;
-                    }
-                }
-                goto return0;
-            }
-            goto return1;
-        case XML_SCHEMAS_NMTOKEN:
-            if (xmlValidateNMToken(value, 1) == 0) {
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN);
-                    if (v != NULL) {
-                        v->value.str = xmlStrdup(value);
-                        *val = v;
-                    } else {
-                        goto error;
-                    }
-                }
-                goto return0;
-            }
-            goto return1;
-        case XML_SCHEMAS_NMTOKENS:
-            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef,
-                                             value, val, node);
-            if (ret > 0)
-                ret = 0;
-            else
-                ret = 1;
-            goto done;
-        case XML_SCHEMAS_NAME:
-            ret = xmlValidateName(value, 1);
-            if ((ret == 0) && (val != NULL) && (value != NULL)) {
-		v = xmlSchemaNewValue(XML_SCHEMAS_NAME);
-		if (v != NULL) {
-		     const xmlChar *start = value, *end;
-		     while (IS_BLANK_CH(*start)) start++;
-		     end = start;
-		     while ((*end != 0) && (!IS_BLANK_CH(*end))) end++;
-		     v->value.str = xmlStrndup(start, end - start);
-		    *val = v;
-		} else {
-		    goto error;
-		}
-            }
-            goto done;
-        case XML_SCHEMAS_QNAME:{
-                const xmlChar *uri = NULL;
-                xmlChar *local = NULL;
-
-                ret = xmlValidateQName(value, 1);
-		if (ret != 0)
-		    goto done;
-                if (node != NULL) {
-                    xmlChar *prefix;
-		    xmlNsPtr ns;
-
-                    local = xmlSplitQName2(value, &prefix);
-		    ns = xmlSearchNs(node->doc, node, prefix);
-		    if ((ns == NULL) && (prefix != NULL)) {
-			xmlFree(prefix);
-			if (local != NULL)
-			    xmlFree(local);
-			goto return1;
-		    }
-		    if (ns != NULL)
-			uri = ns->href;
-                    if (prefix != NULL)
-                        xmlFree(prefix);
-                }
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
-                    if (v == NULL) {
-			if (local != NULL)
-			    xmlFree(local);
-			goto error;
-		    }
-		    if (local != NULL)
-			v->value.qname.name = local;
-		    else
-			v->value.qname.name = xmlStrdup(value);
-		    if (uri != NULL)
-			v->value.qname.uri = xmlStrdup(uri);
-		    *val = v;
-                } else
-		    if (local != NULL)
-			xmlFree(local);
-                goto done;
-            }
-        case XML_SCHEMAS_NCNAME:
-            ret = xmlValidateNCName(value, 1);
-            if ((ret == 0) && (val != NULL)) {
-                v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME);
-                if (v != NULL) {
-                    v->value.str = xmlStrdup(value);
-                    *val = v;
-                } else {
-                    goto error;
-                }
-            }
-            goto done;
-        case XML_SCHEMAS_ID:
-            ret = xmlValidateNCName(value, 1);
-            if ((ret == 0) && (val != NULL)) {
-                v = xmlSchemaNewValue(XML_SCHEMAS_ID);
-                if (v != NULL) {
-                    v->value.str = xmlStrdup(value);
-                    *val = v;
-                } else {
-                    goto error;
-                }
-            }
-            if ((ret == 0) && (node != NULL) &&
-                (node->type == XML_ATTRIBUTE_NODE)) {
-                xmlAttrPtr attr = (xmlAttrPtr) node;
-
-                /*
-                 * NOTE: the IDness might have already be declared in the DTD
-                 */
-                if (attr->atype != XML_ATTRIBUTE_ID) {
-                    xmlIDPtr res;
-                    xmlChar *strip;
-
-                    strip = xmlSchemaStrip(value);
-                    if (strip != NULL) {
-                        res = xmlAddID(NULL, node->doc, strip, attr);
-                        xmlFree(strip);
-                    } else
-                        res = xmlAddID(NULL, node->doc, value, attr);
-                    if (res == NULL) {
-                        ret = 2;
-                    } else {
-                        attr->atype = XML_ATTRIBUTE_ID;
-                    }
-                }
-            }
-            goto done;
-        case XML_SCHEMAS_IDREF:
-            ret = xmlValidateNCName(value, 1);
-            if ((ret == 0) && (val != NULL)) {
-		v = xmlSchemaNewValue(XML_SCHEMAS_IDREF);
-		if (v == NULL)
-		    goto error;
-		v->value.str = xmlStrdup(value);
-		*val = v;
-            }
-            if ((ret == 0) && (node != NULL) &&
-                (node->type == XML_ATTRIBUTE_NODE)) {
-                xmlAttrPtr attr = (xmlAttrPtr) node;
-                xmlChar *strip;
-
-                strip = xmlSchemaStrip(value);
-                if (strip != NULL) {
-                    xmlAddRef(NULL, node->doc, strip, attr);
-                    xmlFree(strip);
-                } else
-                    xmlAddRef(NULL, node->doc, value, attr);
-                attr->atype = XML_ATTRIBUTE_IDREF;
-            }
-            goto done;
-        case XML_SCHEMAS_IDREFS:
-            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef,
-                                             value, val, node);
-            if (ret < 0)
-                ret = 2;
-            else
-                ret = 0;
-            if ((ret == 0) && (node != NULL) &&
-                (node->type == XML_ATTRIBUTE_NODE)) {
-                xmlAttrPtr attr = (xmlAttrPtr) node;
-
-                attr->atype = XML_ATTRIBUTE_IDREFS;
-            }
-            goto done;
-        case XML_SCHEMAS_ENTITY:{
-                xmlChar *strip;
-
-                ret = xmlValidateNCName(value, 1);
-                if ((node == NULL) || (node->doc == NULL))
-                    ret = 3;
-                if (ret == 0) {
-                    xmlEntityPtr ent;
-
-                    strip = xmlSchemaStrip(value);
-                    if (strip != NULL) {
-                        ent = xmlGetDocEntity(node->doc, strip);
-                        xmlFree(strip);
-                    } else {
-                        ent = xmlGetDocEntity(node->doc, value);
-                    }
-                    if ((ent == NULL) ||
-                        (ent->etype !=
-                         XML_EXTERNAL_GENERAL_UNPARSED_ENTITY))
-                        ret = 4;
-                }
-                if ((ret == 0) && (val != NULL)) {
-                    TODO;
-                }
-                if ((ret == 0) && (node != NULL) &&
-                    (node->type == XML_ATTRIBUTE_NODE)) {
-                    xmlAttrPtr attr = (xmlAttrPtr) node;
-
-                    attr->atype = XML_ATTRIBUTE_ENTITY;
-                }
-                goto done;
-            }
-        case XML_SCHEMAS_ENTITIES:
-            if ((node == NULL) || (node->doc == NULL))
-                goto return3;
-            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef,
-                                             value, val, node);
-            if (ret <= 0)
-                ret = 1;
-            else
-                ret = 0;
-            if ((ret == 0) && (node != NULL) &&
-                (node->type == XML_ATTRIBUTE_NODE)) {
-                xmlAttrPtr attr = (xmlAttrPtr) node;
-
-                attr->atype = XML_ATTRIBUTE_ENTITIES;
-            }
-            goto done;
-        case XML_SCHEMAS_NOTATION:{
-                xmlChar *uri = NULL;
-                xmlChar *local = NULL;
-
-                ret = xmlValidateQName(value, 1);
-                if ((ret == 0) && (node != NULL)) {
-                    xmlChar *prefix;
-
-                    local = xmlSplitQName2(value, &prefix);
-                    if (prefix != NULL) {
-                        xmlNsPtr ns;
-
-                        ns = xmlSearchNs(node->doc, node, prefix);
-                        if (ns == NULL)
-                            ret = 1;
-                        else if (val != NULL)
-                            uri = xmlStrdup(ns->href);
-                    }
-                    if ((local != NULL) && ((val == NULL) || (ret != 0)))
-                        xmlFree(local);
-                    if (prefix != NULL)
-                        xmlFree(prefix);
-                }
-                if ((node == NULL) || (node->doc == NULL))
-                    ret = 3;
-                if (ret == 0) {
-                    ret = xmlValidateNotationUse(NULL, node->doc, value);
-                    if (ret == 1)
-                        ret = 0;
-                    else
-                        ret = 1;
-                }
-                if ((ret == 0) && (val != NULL)) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
-                    if (v != NULL) {
-                        if (local != NULL)
-                            v->value.qname.name = local;
-                        else
-                            v->value.qname.name = xmlStrdup(value);
-                        if (uri != NULL)
-                            v->value.qname.uri = uri;
-
-                        *val = v;
-                    } else {
-                        if (local != NULL)
-                            xmlFree(local);
-                        if (uri != NULL)
-                            xmlFree(uri);
-                        goto error;
-                    }
-                }
-                goto done;
-            }
-        case XML_SCHEMAS_ANYURI:{
-                if (*value != 0) {
-		    xmlURIPtr uri;
-		    xmlChar *tmpval, *cur;
-		    if (normOnTheFly) {
-			norm = xmlSchemaCollapseString(value);
-			if (norm != NULL)
-			    value = norm;
-		    }
-		    tmpval = xmlStrdup(value);
-		    for (cur = tmpval; *cur; ++cur) {
-			if (*cur < 32 || *cur >= 127 || *cur == ' ' ||
-			    *cur == '<' || *cur == '>' || *cur == '"' ||
-			    *cur == '{' || *cur == '}' || *cur == '|' ||
-			    *cur == '\\' || *cur == '^' || *cur == '`' ||
-			    *cur == '\'')
-			    *cur = '_';
-		    }
-                    uri = xmlParseURI((const char *) tmpval);
-		    xmlFree(tmpval);
-                    if (uri == NULL)
-                        goto return1;
-                    xmlFreeURI(uri);
-                }
-
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI);
-                    if (v == NULL)
-                        goto error;
-                    v->value.str = xmlStrdup(value);
-                    *val = v;
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_HEXBINARY:{
-                const xmlChar *cur = value, *start;
-                xmlChar *base;
-                int total, i = 0;
-
-                if (cur == NULL)
-                    goto return1;
-
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-
-		start = cur;
-                while (((*cur >= '0') && (*cur <= '9')) ||
-                       ((*cur >= 'A') && (*cur <= 'F')) ||
-                       ((*cur >= 'a') && (*cur <= 'f'))) {
-                    i++;
-                    cur++;
-                }
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-
-                if (*cur != 0)
-                    goto return1;
-                if ((i % 2) != 0)
-                    goto return1;
-
-                if (val != NULL) {
-
-                    v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY);
-                    if (v == NULL)
-                        goto error;
-		    /*
-		    * Copy only the normalized piece.
-		    * CRITICAL TODO: Check this.
-		    */
-                    cur = xmlStrndup(start, i);
-                    if (cur == NULL) {
-		        xmlSchemaTypeErrMemory(node, "allocating hexbin data");
-                        xmlFree(v);
-                        goto return1;
-                    }
-
-                    total = i / 2;      /* number of octets */
-
-                    base = (xmlChar *) cur;
-                    while (i-- > 0) {
-                        if (*base >= 'a')
-                            *base = *base - ('a' - 'A');
-                        base++;
-                    }
-
-                    v->value.hex.str = (xmlChar *) cur;
-                    v->value.hex.total = total;
-                    *val = v;
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_BASE64BINARY:{
-                /* ISSUE:
-                 *
-                 * Ignore all stray characters? (yes, currently)
-                 * Worry about long lines? (no, currently)
-                 *
-                 * rfc2045.txt:
-                 *
-                 * "The encoded output stream must be represented in lines of
-                 * no more than 76 characters each.  All line breaks or other
-                 * characters not found in Table 1 must be ignored by decoding
-                 * software.  In base64 data, characters other than those in
-                 * Table 1, line breaks, and other white space probably
-                 * indicate a transmission error, about which a warning
-                 * message or even a message rejection might be appropriate
-                 * under some circumstances." */
-                const xmlChar *cur = value;
-                xmlChar *base;
-                int total, i = 0, pad = 0;
-
-                if (cur == NULL)
-                    goto return1;
-
-                for (; *cur; ++cur) {
-                    int decc;
-
-                    decc = _xmlSchemaBase64Decode(*cur);
-                    if (decc < 0) ;
-                    else if (decc < 64)
-                        i++;
-                    else
-                        break;
-                }
-                for (; *cur; ++cur) {
-                    int decc;
-
-                    decc = _xmlSchemaBase64Decode(*cur);
-                    if (decc < 0) ;
-                    else if (decc < 64)
-                        goto return1;
-                    if (decc == 64)
-                        pad++;
-                }
-
-                /* rfc2045.txt: "Special processing is performed if fewer than
-                 * 24 bits are available at the end of the data being encoded.
-                 * A full encoding quantum is always completed at the end of a
-                 * body.  When fewer than 24 input bits are available in an
-                 * input group, zero bits are added (on the right) to form an
-                 * integral number of 6-bit groups.  Padding at the end of the
-                 * data is performed using the "=" character.  Since all
-                 * base64 input is an integral number of octets, only the
-                 * following cases can arise: (1) the final quantum of
-                 * encoding input is an integral multiple of 24 bits; here,
-                 * the final unit of encoded output will be an integral
-                 * multiple ofindent: Standard input:701: Warning:old style
-		 * assignment ambiguity in "=*".  Assuming "= *" 4 characters
-		 * with no "=" padding, (2) the final
-                 * quantum of encoding input is exactly 8 bits; here, the
-                 * final unit of encoded output will be two characters
-                 * followed by two "=" padding characters, or (3) the final
-                 * quantum of encoding input is exactly 16 bits; here, the
-                 * final unit of encoded output will be three characters
-                 * followed by one "=" padding character." */
-
-                total = 3 * (i / 4);
-                if (pad == 0) {
-                    if (i % 4 != 0)
-                        goto return1;
-                } else if (pad == 1) {
-                    int decc;
-
-                    if (i % 4 != 3)
-                        goto return1;
-                    for (decc = _xmlSchemaBase64Decode(*cur);
-                         (decc < 0) || (decc > 63);
-                         decc = _xmlSchemaBase64Decode(*cur))
-                        --cur;
-                    /* 16bits in 24bits means 2 pad bits: nnnnnn nnmmmm mmmm00*/
-                    /* 00111100 -> 0x3c */
-                    if (decc & ~0x3c)
-                        goto return1;
-                    total += 2;
-                } else if (pad == 2) {
-                    int decc;
-
-                    if (i % 4 != 2)
-                        goto return1;
-                    for (decc = _xmlSchemaBase64Decode(*cur);
-                         (decc < 0) || (decc > 63);
-                         decc = _xmlSchemaBase64Decode(*cur))
-                        --cur;
-                    /* 8bits in 12bits means 4 pad bits: nnnnnn nn0000 */
-                    /* 00110000 -> 0x30 */
-                    if (decc & ~0x30)
-                        goto return1;
-                    total += 1;
-                } else
-                    goto return1;
-
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(XML_SCHEMAS_BASE64BINARY);
-                    if (v == NULL)
-                        goto error;
-                    base =
-                        (xmlChar *) xmlMallocAtomic((i + pad + 1) *
-                                                    sizeof(xmlChar));
-                    if (base == NULL) {
-		        xmlSchemaTypeErrMemory(node, "allocating base64 data");
-                        xmlFree(v);
-                        goto return1;
-                    }
-                    v->value.base64.str = base;
-                    for (cur = value; *cur; ++cur)
-                        if (_xmlSchemaBase64Decode(*cur) >= 0) {
-                            *base = *cur;
-                            ++base;
-                        }
-                    *base = 0;
-                    v->value.base64.total = total;
-                    *val = v;
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_INTEGER:
-        case XML_SCHEMAS_PINTEGER:
-        case XML_SCHEMAS_NPINTEGER:
-        case XML_SCHEMAS_NINTEGER:
-        case XML_SCHEMAS_NNINTEGER:{
-                const xmlChar *cur = value;
-                unsigned long lo, mi, hi;
-                int sign = 0;
-
-                if (cur == NULL)
-                    goto return1;
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-                if (*cur == '-') {
-                    sign = 1;
-                    cur++;
-                } else if (*cur == '+')
-                    cur++;
-                ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
-                if (ret < 0)
-                    goto return1;
-		if (normOnTheFly)
-		    while IS_WSP_BLANK_CH(*cur) cur++;
-                if (*cur != 0)
-                    goto return1;
-                if (type->builtInType == XML_SCHEMAS_NPINTEGER) {
-                    if ((sign == 0) &&
-                        ((hi != 0) || (mi != 0) || (lo != 0)))
-                        goto return1;
-                } else if (type->builtInType == XML_SCHEMAS_PINTEGER) {
-                    if (sign == 1)
-                        goto return1;
-                    if ((hi == 0) && (mi == 0) && (lo == 0))
-                        goto return1;
-                } else if (type->builtInType == XML_SCHEMAS_NINTEGER) {
-                    if (sign == 0)
-                        goto return1;
-                    if ((hi == 0) && (mi == 0) && (lo == 0))
-                        goto return1;
-                } else if (type->builtInType == XML_SCHEMAS_NNINTEGER) {
-                    if ((sign == 1) &&
-                        ((hi != 0) || (mi != 0) || (lo != 0)))
-                        goto return1;
-                }
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(type->builtInType);
-                    if (v != NULL) {
-			if (ret == 0)
-			    ret++;
-                        v->value.decimal.lo = lo;
-                        v->value.decimal.mi = mi;
-                        v->value.decimal.hi = hi;
-                        v->value.decimal.sign = sign;
-                        v->value.decimal.frac = 0;
-                        v->value.decimal.total = ret;
-                        *val = v;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_LONG:
-        case XML_SCHEMAS_BYTE:
-        case XML_SCHEMAS_SHORT:
-        case XML_SCHEMAS_INT:{
-                const xmlChar *cur = value;
-                unsigned long lo, mi, hi;
-                int sign = 0;
-
-                if (cur == NULL)
-                    goto return1;
-                if (*cur == '-') {
-                    sign = 1;
-                    cur++;
-                } else if (*cur == '+')
-                    cur++;
-                ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
-                if (ret < 0)
-                    goto return1;
-                if (*cur != 0)
-                    goto return1;
-                if (type->builtInType == XML_SCHEMAS_LONG) {
-                    if (hi >= 922) {
-                        if (hi > 922)
-                            goto return1;
-                        if (mi >= 33720368) {
-                            if (mi > 33720368)
-                                goto return1;
-                            if ((sign == 0) && (lo > 54775807))
-                                goto return1;
-                            if ((sign == 1) && (lo > 54775808))
-                                goto return1;
-                        }
-                    }
-                } else if (type->builtInType == XML_SCHEMAS_INT) {
-                    if (hi != 0)
-                        goto return1;
-                    if (mi >= 21) {
-                        if (mi > 21)
-                            goto return1;
-                        if ((sign == 0) && (lo > 47483647))
-                            goto return1;
-                        if ((sign == 1) && (lo > 47483648))
-                            goto return1;
-                    }
-                } else if (type->builtInType == XML_SCHEMAS_SHORT) {
-                    if ((mi != 0) || (hi != 0))
-                        goto return1;
-                    if ((sign == 1) && (lo > 32768))
-                        goto return1;
-                    if ((sign == 0) && (lo > 32767))
-                        goto return1;
-                } else if (type->builtInType == XML_SCHEMAS_BYTE) {
-                    if ((mi != 0) || (hi != 0))
-                        goto return1;
-                    if ((sign == 1) && (lo > 128))
-                        goto return1;
-                    if ((sign == 0) && (lo > 127))
-                        goto return1;
-                }
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(type->builtInType);
-                    if (v != NULL) {
-                        v->value.decimal.lo = lo;
-                        v->value.decimal.mi = mi;
-                        v->value.decimal.hi = hi;
-                        v->value.decimal.sign = sign;
-                        v->value.decimal.frac = 0;
-                        v->value.decimal.total = ret;
-                        *val = v;
-                    }
-                }
-                goto return0;
-            }
-        case XML_SCHEMAS_UINT:
-        case XML_SCHEMAS_ULONG:
-        case XML_SCHEMAS_USHORT:
-        case XML_SCHEMAS_UBYTE:{
-                const xmlChar *cur = value;
-                unsigned long lo, mi, hi;
-
-                if (cur == NULL)
-                    goto return1;
-                ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
-                if (ret < 0)
-                    goto return1;
-                if (*cur != 0)
-                    goto return1;
-                if (type->builtInType == XML_SCHEMAS_ULONG) {
-                    if (hi >= 1844) {
-                        if (hi > 1844)
-                            goto return1;
-                        if (mi >= 67440737) {
-                            if (mi > 67440737)
-                                goto return1;
-                            if (lo > 9551615)
-                                goto return1;
-                        }
-                    }
-                } else if (type->builtInType == XML_SCHEMAS_UINT) {
-                    if (hi != 0)
-                        goto return1;
-                    if (mi >= 42) {
-                        if (mi > 42)
-                            goto return1;
-                        if (lo > 94967295)
-                            goto return1;
-                    }
-                } else if (type->builtInType == XML_SCHEMAS_USHORT) {
-                    if ((mi != 0) || (hi != 0))
-                        goto return1;
-                    if (lo > 65535)
-                        goto return1;
-                } else if (type->builtInType == XML_SCHEMAS_UBYTE) {
-                    if ((mi != 0) || (hi != 0))
-                        goto return1;
-                    if (lo > 255)
-                        goto return1;
-                }
-                if (val != NULL) {
-                    v = xmlSchemaNewValue(type->builtInType);
-                    if (v != NULL) {
-                        v->value.decimal.lo = lo;
-                        v->value.decimal.mi = mi;
-                        v->value.decimal.hi = hi;
-                        v->value.decimal.sign = 0;
-                        v->value.decimal.frac = 0;
-                        v->value.decimal.total = ret;
-                        *val = v;
-                    }
-                }
-                goto return0;
-            }
-    }
-
-  done:
-    if (norm != NULL)
-        xmlFree(norm);
-    return (ret);
-  return3:
-    if (norm != NULL)
-        xmlFree(norm);
-    return (3);
-  return1:
-    if (norm != NULL)
-        xmlFree(norm);
-    return (1);
-  return0:
-    if (norm != NULL)
-        xmlFree(norm);
-    return (0);
-  error:
-    if (norm != NULL)
-        xmlFree(norm);
-    return (-1);
-}
-
-/**
- * xmlSchemaValPredefTypeNode:
- * @type: the predefined type
- * @value: the value to check
- * @val:  the return computed value
- * @node:  the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-int
-xmlSchemaValPredefTypeNode(xmlSchemaTypePtr type, const xmlChar *value,
-	                   xmlSchemaValPtr *val, xmlNodePtr node) {
-    return(xmlSchemaValAtomicType(type, value, val, node, 0,
-	XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 1, 0));
-}
-
-/**
- * xmlSchemaValPredefTypeNodeNoNorm:
- * @type: the predefined type
- * @value: the value to check
- * @val:  the return computed value
- * @node:  the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- * This one does apply any normalization to the value.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-int
-xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, const xmlChar *value,
-				 xmlSchemaValPtr *val, xmlNodePtr node) {
-    return(xmlSchemaValAtomicType(type, value, val, node, 1,
-	XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 0, 1));
-}
-
-/**
- * xmlSchemaValidatePredefinedType:
- * @type: the predefined type
- * @value: the value to check
- * @val:  the return computed value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- *         and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidatePredefinedType(xmlSchemaTypePtr type, const xmlChar *value,
-	                        xmlSchemaValPtr *val) {
-    return(xmlSchemaValPredefTypeNode(type, value, val, NULL));
-}
-
-/**
- * xmlSchemaCompareDecimals:
- * @x:  a first decimal value
- * @y:  a second decimal value
- *
- * Compare 2 decimals
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y and -2 in case of error
- */
-static int
-xmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
-    xmlSchemaValPtr swp;
-    int order = 1, integx, integy, dlen;
-    unsigned long hi, mi, lo;
-
-    /*
-     * First test: If x is -ve and not zero
-     */
-    if ((x->value.decimal.sign) &&
-	((x->value.decimal.lo != 0) ||
-	 (x->value.decimal.mi != 0) ||
-	 (x->value.decimal.hi != 0))) {
-	/*
-	 * Then if y is -ve and not zero reverse the compare
-	 */
-	if ((y->value.decimal.sign) &&
-	    ((y->value.decimal.lo != 0) ||
-	     (y->value.decimal.mi != 0) ||
-	     (y->value.decimal.hi != 0)))
-	    order = -1;
-	/*
-	 * Otherwise (y >= 0) we have the answer
-	 */
-	else
-	    return (-1);
-    /*
-     * If x is not -ve and y is -ve we have the answer
-     */
-    } else if ((y->value.decimal.sign) &&
-	       ((y->value.decimal.lo != 0) ||
-		(y->value.decimal.mi != 0) ||
-		(y->value.decimal.hi != 0))) {
-        return (1);
-    }
-    /*
-     * If it's not simply determined by a difference in sign,
-     * then we need to compare the actual values of the two nums.
-     * To do this, we start by looking at the integral parts.
-     * If the number of integral digits differ, then we have our
-     * answer.
-     */
-    integx = x->value.decimal.total - x->value.decimal.frac;
-    integy = y->value.decimal.total - y->value.decimal.frac;
-    /*
-    * NOTE: We changed the "total" for values like "0.1"
-    *   (or "-0.1" or ".1") to be 1, which was 2 previously.
-    *   Therefore the special case, when such values are
-    *   compared with 0, needs to be handled separately;
-    *   otherwise a zero would be recognized incorrectly as
-    *   greater than those values. This has the nice side effect
-    *   that we gain an overall optimized comparison with zeroes.
-    * Note that a "0" has a "total" of 1 already.
-    */
-    if (integx == 1) {
-	if (x->value.decimal.lo == 0) {
-	    if (integy != 1)
-		return -order;
-	    else if (y->value.decimal.lo != 0)
-		return -order;
-	    else
-		return(0);
-	}
-    }
-    if (integy == 1) {
-	if (y->value.decimal.lo == 0) {
-	    if (integx != 1)
-		return order;
-	    else if (x->value.decimal.lo != 0)
-		return order;
-	    else
-		return(0);
-	}
-    }
-
-    if (integx > integy)
-	return order;
-    else if (integy > integx)
-	return -order;
-
-    /*
-     * If the number of integral digits is the same for both numbers,
-     * then things get a little more complicated.  We need to "normalize"
-     * the numbers in order to properly compare them.  To do this, we
-     * look at the total length of each number (length => number of
-     * significant digits), and divide the "shorter" by 10 (decreasing
-     * the length) until they are of equal length.
-     */
-    dlen = x->value.decimal.total - y->value.decimal.total;
-    if (dlen < 0) {	/* y has more digits than x */
-	swp = x;
-	hi = y->value.decimal.hi;
-	mi = y->value.decimal.mi;
-	lo = y->value.decimal.lo;
-	dlen = -dlen;
-	order = -order;
-    } else {		/* x has more digits than y */
-	swp = y;
-	hi = x->value.decimal.hi;
-	mi = x->value.decimal.mi;
-	lo = x->value.decimal.lo;
-    }
-    while (dlen > 8) {	/* in effect, right shift by 10**8 */
-	lo = mi;
-	mi = hi;
-	hi = 0;
-	dlen -= 8;
-    }
-    while (dlen > 0) {
-	unsigned long rem1, rem2;
-	rem1 = (hi % 10) * 100000000L;
-	hi = hi / 10;
-	rem2 = (mi % 10) * 100000000L;
-	mi = (mi + rem1) / 10;
-	lo = (lo + rem2) / 10;
-	dlen--;
-    }
-    if (hi > swp->value.decimal.hi) {
-	return order;
-    } else if (hi == swp->value.decimal.hi) {
-	if (mi > swp->value.decimal.mi) {
-	    return order;
-	} else if (mi == swp->value.decimal.mi) {
-	    if (lo > swp->value.decimal.lo) {
-		return order;
-	    } else if (lo == swp->value.decimal.lo) {
-		if (x->value.decimal.total == y->value.decimal.total) {
-		    return 0;
-		} else {
-		    return order;
-		}
-	    }
-	}
-    }
-    return -order;
-}
-
-/**
- * xmlSchemaCompareDurations:
- * @x:  a first duration value
- * @y:  a second duration value
- *
- * Compare 2 durations
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
-    long carry, mon, day;
-    double sec;
-    int invert = 1;
-    long xmon, xday, myear, minday, maxday;
-    static const long dayRange [2][12] = {
-        { 0, 28, 59, 89, 120, 150, 181, 212, 242, 273, 303, 334, },
-        { 0, 31, 62, 92, 123, 153, 184, 215, 245, 276, 306, 337} };
-
-    if ((x == NULL) || (y == NULL))
-        return -2;
-
-    /* months */
-    mon = x->value.dur.mon - y->value.dur.mon;
-
-    /* seconds */
-    sec = x->value.dur.sec - y->value.dur.sec;
-    carry = (long)(sec / SECS_PER_DAY);
-    sec -= ((double)carry) * SECS_PER_DAY;
-
-    /* days */
-    day = x->value.dur.day - y->value.dur.day + carry;
-
-    /* easy test */
-    if (mon == 0) {
-        if (day == 0)
-            if (sec == 0.0)
-                return 0;
-            else if (sec < 0.0)
-                return -1;
-            else
-                return 1;
-        else if (day < 0)
-            return -1;
-        else
-            return 1;
-    }
-
-    if (mon > 0) {
-        if ((day >= 0) && (sec >= 0.0))
-            return 1;
-        else {
-            xmon = mon;
-            xday = -day;
-        }
-    } else if ((day <= 0) && (sec <= 0.0)) {
-        return -1;
-    } else {
-	invert = -1;
-        xmon = -mon;
-        xday = day;
-    }
-
-    myear = xmon / 12;
-    if (myear == 0) {
-	minday = 0;
-	maxday = 0;
-    } else {
-	maxday = 366 * ((myear + 3) / 4) +
-	         365 * ((myear - 1) % 4);
-	minday = maxday - 1;
-    }
-
-    xmon = xmon % 12;
-    minday += dayRange[0][xmon];
-    maxday += dayRange[1][xmon];
-
-    if ((maxday == minday) && (maxday == xday))
-	return(0); /* can this really happen ? */
-    if (maxday < xday)
-        return(-invert);
-    if (minday > xday)
-        return(invert);
-
-    /* indeterminate */
-    return 2;
-}
-
-/*
- * macros for adding date/times and durations
- */
-#define FQUOTIENT(a,b)                  (floor(((double)a/(double)b)))
-#define MODULO(a,b)                     (a - FQUOTIENT(a,b) * b)
-#define FQUOTIENT_RANGE(a,low,high)     (FQUOTIENT((a-low),(high-low)))
-#define MODULO_RANGE(a,low,high)        ((MODULO((a-low),(high-low)))+low)
-
-/**
- * xmlSchemaDupVal:
- * @v: the #xmlSchemaValPtr value to duplicate
- *
- * Makes a copy of @v. The calling program is responsible for freeing
- * the returned value.
- *
- * returns a pointer to a duplicated #xmlSchemaValPtr or NULL if error.
- */
-static xmlSchemaValPtr
-xmlSchemaDupVal (xmlSchemaValPtr v)
-{
-    xmlSchemaValPtr ret = xmlSchemaNewValue(v->type);
-    if (ret == NULL)
-        return NULL;
-
-    memcpy(ret, v, sizeof(xmlSchemaVal));
-    ret->next = NULL;
-    return ret;
-}
-
-/**
- * xmlSchemaCopyValue:
- * @val:  the precomputed value to be copied
- *
- * Copies the precomputed value. This duplicates any string within.
- *
- * Returns the copy or NULL if a copy for a data-type is not implemented.
- */
-xmlSchemaValPtr
-xmlSchemaCopyValue(xmlSchemaValPtr val)
-{
-    xmlSchemaValPtr ret = NULL, prev = NULL, cur;
-
-    /*
-    * Copy the string values.
-    */
-    while (val != NULL) {
-	switch (val->type) {
-	    case XML_SCHEMAS_ANYTYPE:
-	    case XML_SCHEMAS_IDREFS:
-	    case XML_SCHEMAS_ENTITIES:
-	    case XML_SCHEMAS_NMTOKENS:
-		xmlSchemaFreeValue(ret);
-		return (NULL);
-	    case XML_SCHEMAS_ANYSIMPLETYPE:
-	    case XML_SCHEMAS_STRING:
-	    case XML_SCHEMAS_NORMSTRING:
-	    case XML_SCHEMAS_TOKEN:
-	    case XML_SCHEMAS_LANGUAGE:
-	    case XML_SCHEMAS_NAME:
-	    case XML_SCHEMAS_NCNAME:
-	    case XML_SCHEMAS_ID:
-	    case XML_SCHEMAS_IDREF:
-	    case XML_SCHEMAS_ENTITY:
-	    case XML_SCHEMAS_NMTOKEN:
-	    case XML_SCHEMAS_ANYURI:
-		cur = xmlSchemaDupVal(val);
-		if (val->value.str != NULL)
-		    cur->value.str = xmlStrdup(BAD_CAST val->value.str);
-		break;
-	    case XML_SCHEMAS_QNAME:
-	    case XML_SCHEMAS_NOTATION:
-		cur = xmlSchemaDupVal(val);
-		if (val->value.qname.name != NULL)
-		    cur->value.qname.name =
-                    xmlStrdup(BAD_CAST val->value.qname.name);
-		if (val->value.qname.uri != NULL)
-		    cur->value.qname.uri =
-                    xmlStrdup(BAD_CAST val->value.qname.uri);
-		break;
-	    case XML_SCHEMAS_HEXBINARY:
-		cur = xmlSchemaDupVal(val);
-		if (val->value.hex.str != NULL)
-		    cur->value.hex.str = xmlStrdup(BAD_CAST val->value.hex.str);
-		break;
-	    case XML_SCHEMAS_BASE64BINARY:
-		cur = xmlSchemaDupVal(val);
-		if (val->value.base64.str != NULL)
-		    cur->value.base64.str =
-                    xmlStrdup(BAD_CAST val->value.base64.str);
-		break;
-	    default:
-		cur = xmlSchemaDupVal(val);
-		break;
-	}
-	if (ret == NULL)
-	    ret = cur;
-	else
-	    prev->next = cur;
-	prev = cur;
-	val = val->next;
-    }
-    return (ret);
-}
-
-/**
- * _xmlSchemaDateAdd:
- * @dt: an #xmlSchemaValPtr
- * @dur: an #xmlSchemaValPtr of type #XS_DURATION
- *
- * Compute a new date/time from @dt and @dur. This function assumes @dt
- * is either #XML_SCHEMAS_DATETIME, #XML_SCHEMAS_DATE, #XML_SCHEMAS_GYEARMONTH,
- * or #XML_SCHEMAS_GYEAR. The returned #xmlSchemaVal is the same type as
- * @dt. The calling program is responsible for freeing the returned value.
- *
- * Returns a pointer to a new #xmlSchemaVal or NULL if error.
- */
-static xmlSchemaValPtr
-_xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
-{
-    xmlSchemaValPtr ret, tmp;
-    long carry, tempdays, temp;
-    xmlSchemaValDatePtr r, d;
-    xmlSchemaValDurationPtr u;
-
-    if ((dt == NULL) || (dur == NULL))
-        return NULL;
-
-    ret = xmlSchemaNewValue(dt->type);
-    if (ret == NULL)
-        return NULL;
-
-    /* make a copy so we don't alter the original value */
-    tmp = xmlSchemaDupVal(dt);
-    if (tmp == NULL) {
-        xmlSchemaFreeValue(ret);
-        return NULL;
-    }
-
-    r = &(ret->value.date);
-    d = &(tmp->value.date);
-    u = &(dur->value.dur);
-
-    /* normalization */
-    if (d->mon == 0)
-        d->mon = 1;
-
-    /* normalize for time zone offset */
-    u->sec -= (d->tzo * 60);
-    d->tzo = 0;
-
-    /* normalization */
-    if (d->day == 0)
-        d->day = 1;
-
-    /* month */
-    carry  = d->mon + u->mon;
-    r->mon = (unsigned int) MODULO_RANGE(carry, 1, 13);
-    carry  = (long) FQUOTIENT_RANGE(carry, 1, 13);
-
-    /* year (may be modified later) */
-    r->year = d->year + carry;
-    if (r->year == 0) {
-        if (d->year > 0)
-            r->year--;
-        else
-            r->year++;
-    }
-
-    /* time zone */
-    r->tzo     = d->tzo;
-    r->tz_flag = d->tz_flag;
-
-    /* seconds */
-    r->sec = d->sec + u->sec;
-    carry  = (long) FQUOTIENT((long)r->sec, 60);
-    if (r->sec != 0.0) {
-        r->sec = MODULO(r->sec, 60.0);
-    }
-
-    /* minute */
-    carry += d->min;
-    r->min = (unsigned int) MODULO(carry, 60);
-    carry  = (long) FQUOTIENT(carry, 60);
-
-    /* hours */
-    carry  += d->hour;
-    r->hour = (unsigned int) MODULO(carry, 24);
-    carry   = (long)FQUOTIENT(carry, 24);
-
-    /*
-     * days
-     * Note we use tempdays because the temporary values may need more
-     * than 5 bits
-     */
-    if ((VALID_YEAR(r->year)) && (VALID_MONTH(r->mon)) &&
-                  (d->day > MAX_DAYINMONTH(r->year, r->mon)))
-        tempdays = MAX_DAYINMONTH(r->year, r->mon);
-    else if (d->day < 1)
-        tempdays = 1;
-    else
-        tempdays = d->day;
-
-    tempdays += u->day + carry;
-
-    while (1) {
-        if (tempdays < 1) {
-            long tmon = (long) MODULO_RANGE((int)r->mon-1, 1, 13);
-            long tyr  = r->year + (long)FQUOTIENT_RANGE((int)r->mon-1, 1, 13);
-            if (tyr == 0)
-                tyr--;
-	    /*
-	     * Coverity detected an overrun in daysInMonth
-	     * of size 12 at position 12 with index variable "((r)->mon - 1)"
-	     */
-	    if (tmon < 1)
-	        tmon = 1;
-	    if (tmon > 12)
-	        tmon = 12;
-            tempdays += MAX_DAYINMONTH(tyr, tmon);
-            carry = -1;
-        } else if (VALID_YEAR(r->year) && VALID_MONTH(r->mon) &&
-                   tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
-            tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
-            carry = 1;
-        } else
-            break;
-
-        temp = r->mon + carry;
-        r->mon = (unsigned int) MODULO_RANGE(temp, 1, 13);
-        r->year = r->year + (unsigned int) FQUOTIENT_RANGE(temp, 1, 13);
-        if (r->year == 0) {
-            if (temp < 1)
-                r->year--;
-            else
-                r->year++;
-	}
-    }
-
-    r->day = tempdays;
-
-    /*
-     * adjust the date/time type to the date values
-     */
-    if (ret->type != XML_SCHEMAS_DATETIME) {
-        if ((r->hour) || (r->min) || (r->sec))
-            ret->type = XML_SCHEMAS_DATETIME;
-        else if (ret->type != XML_SCHEMAS_DATE) {
-            if ((r->mon != 1) && (r->day != 1))
-                ret->type = XML_SCHEMAS_DATE;
-            else if ((ret->type != XML_SCHEMAS_GYEARMONTH) && (r->mon != 1))
-                ret->type = XML_SCHEMAS_GYEARMONTH;
-        }
-    }
-
-    xmlSchemaFreeValue(tmp);
-
-    return ret;
-}
-
-/**
- * xmlSchemaDateNormalize:
- * @dt: an #xmlSchemaValPtr of a date/time type value.
- * @offset: number of seconds to adjust @dt by.
- *
- * Normalize @dt to GMT time. The @offset parameter is subtracted from
- * the return value is a time-zone offset is present on @dt.
- *
- * Returns a normalized copy of @dt or NULL if error.
- */
-static xmlSchemaValPtr
-xmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset)
-{
-    xmlSchemaValPtr dur, ret;
-
-    if (dt == NULL)
-        return NULL;
-
-    if (((dt->type != XML_SCHEMAS_TIME) &&
-         (dt->type != XML_SCHEMAS_DATETIME) &&
-	 (dt->type != XML_SCHEMAS_DATE)) || (dt->value.date.tzo == 0))
-        return xmlSchemaDupVal(dt);
-
-    dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
-    if (dur == NULL)
-        return NULL;
-
-    dur->value.date.sec -= offset;
-
-    ret = _xmlSchemaDateAdd(dt, dur);
-    if (ret == NULL)
-        return NULL;
-
-    xmlSchemaFreeValue(dur);
-
-    /* ret->value.date.tzo = 0; */
-    return ret;
-}
-
-/**
- * _xmlSchemaDateCastYMToDays:
- * @dt: an #xmlSchemaValPtr
- *
- * Convert mon and year of @dt to total number of days. Take the
- * number of years since (or before) 1 AD and add the number of leap
- * years. This is a function  because negative
- * years must be handled a little differently and there is no zero year.
- *
- * Returns number of days.
- */
-static long
-_xmlSchemaDateCastYMToDays (const xmlSchemaValPtr dt)
-{
-    long ret;
-    int mon;
-
-    mon = dt->value.date.mon;
-    if (mon <= 0) mon = 1; /* normalization */
-
-    if (dt->value.date.year <= 0)
-        ret = (dt->value.date.year * 365) +
-              (((dt->value.date.year+1)/4)-((dt->value.date.year+1)/100)+
-               ((dt->value.date.year+1)/400)) +
-              DAY_IN_YEAR(0, mon, dt->value.date.year);
-    else
-        ret = ((dt->value.date.year-1) * 365) +
-              (((dt->value.date.year-1)/4)-((dt->value.date.year-1)/100)+
-               ((dt->value.date.year-1)/400)) +
-              DAY_IN_YEAR(0, mon, dt->value.date.year);
-
-    return ret;
-}
-
-/**
- * TIME_TO_NUMBER:
- * @dt:  an #xmlSchemaValPtr
- *
- * Calculates the number of seconds in the time portion of @dt.
- *
- * Returns seconds.
- */
-#define TIME_TO_NUMBER(dt)                              \
-    ((double)((dt->value.date.hour * SECS_PER_HOUR) +   \
-              (dt->value.date.min * SECS_PER_MIN) +	\
-              (dt->value.date.tzo * SECS_PER_MIN)) +	\
-               dt->value.date.sec)
-
-/**
- * xmlSchemaCompareDates:
- * @x:  a first date/time value
- * @y:  a second date/time value
- *
- * Compare 2 date/times
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
-    unsigned char xmask, ymask, xor_mask, and_mask;
-    xmlSchemaValPtr p1, p2, q1, q2;
-    long p1d, p2d, q1d, q2d;
-
-    if ((x == NULL) || (y == NULL))
-        return -2;
-
-    if (x->value.date.tz_flag) {
-
-        if (!y->value.date.tz_flag) {
-            p1 = xmlSchemaDateNormalize(x, 0);
-            p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
-            /* normalize y + 14:00 */
-            q1 = xmlSchemaDateNormalize(y, (14 * SECS_PER_HOUR));
-
-            q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
-            if (p1d < q1d) {
-		xmlSchemaFreeValue(p1);
-		xmlSchemaFreeValue(q1);
-                return -1;
-	    } else if (p1d == q1d) {
-                double sec;
-
-                sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
-                if (sec < 0.0) {
-		    xmlSchemaFreeValue(p1);
-		    xmlSchemaFreeValue(q1);
-                    return -1;
-		} else {
-		    int ret = 0;
-                    /* normalize y - 14:00 */
-                    q2 = xmlSchemaDateNormalize(y, -(14 * SECS_PER_HOUR));
-                    q2d = _xmlSchemaDateCastYMToDays(q2) + q2->value.date.day;
-                    if (p1d > q2d)
-                        ret = 1;
-                    else if (p1d == q2d) {
-                        sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q2);
-                        if (sec > 0.0)
-                            ret = 1;
-                        else
-                            ret = 2; /* indeterminate */
-                    }
-		    xmlSchemaFreeValue(p1);
-		    xmlSchemaFreeValue(q1);
-		    xmlSchemaFreeValue(q2);
-		    if (ret != 0)
-		        return(ret);
-                }
-            } else {
-		xmlSchemaFreeValue(p1);
-		xmlSchemaFreeValue(q1);
-	    }
-        }
-    } else if (y->value.date.tz_flag) {
-        q1 = xmlSchemaDateNormalize(y, 0);
-        q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
-
-        /* normalize x - 14:00 */
-        p1 = xmlSchemaDateNormalize(x, -(14 * SECS_PER_HOUR));
-        p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
-
-        if (p1d < q1d) {
-	    xmlSchemaFreeValue(p1);
-	    xmlSchemaFreeValue(q1);
-            return -1;
-	} else if (p1d == q1d) {
-            double sec;
-
-            sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
-            if (sec < 0.0) {
-		xmlSchemaFreeValue(p1);
-		xmlSchemaFreeValue(q1);
-                return -1;
-	    } else {
-	        int ret = 0;
-                /* normalize x + 14:00 */
-                p2 = xmlSchemaDateNormalize(x, (14 * SECS_PER_HOUR));
-                p2d = _xmlSchemaDateCastYMToDays(p2) + p2->value.date.day;
-
-                if (p2d > q1d) {
-                    ret = 1;
-		} else if (p2d == q1d) {
-                    sec = TIME_TO_NUMBER(p2) - TIME_TO_NUMBER(q1);
-                    if (sec > 0.0)
-                        ret = 1;
-                    else
-                        ret = 2; /* indeterminate */
-                }
-		xmlSchemaFreeValue(p1);
-		xmlSchemaFreeValue(q1);
-		xmlSchemaFreeValue(p2);
-		if (ret != 0)
-		    return(ret);
-            }
-	} else {
-	    xmlSchemaFreeValue(p1);
-	    xmlSchemaFreeValue(q1);
-        }
-    }
-
-    /*
-     * if the same type then calculate the difference
-     */
-    if (x->type == y->type) {
-        int ret = 0;
-        q1 = xmlSchemaDateNormalize(y, 0);
-        q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
-
-        p1 = xmlSchemaDateNormalize(x, 0);
-        p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
-
-        if (p1d < q1d) {
-            ret = -1;
-	} else if (p1d > q1d) {
-            ret = 1;
-	} else {
-            double sec;
-
-            sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
-            if (sec < 0.0)
-                ret = -1;
-            else if (sec > 0.0)
-                ret = 1;
-
-        }
-	xmlSchemaFreeValue(p1);
-	xmlSchemaFreeValue(q1);
-        return(ret);
-    }
-
-    switch (x->type) {
-        case XML_SCHEMAS_DATETIME:
-            xmask = 0xf;
-            break;
-        case XML_SCHEMAS_DATE:
-            xmask = 0x7;
-            break;
-        case XML_SCHEMAS_GYEAR:
-            xmask = 0x1;
-            break;
-        case XML_SCHEMAS_GMONTH:
-            xmask = 0x2;
-            break;
-        case XML_SCHEMAS_GDAY:
-            xmask = 0x3;
-            break;
-        case XML_SCHEMAS_GYEARMONTH:
-            xmask = 0x3;
-            break;
-        case XML_SCHEMAS_GMONTHDAY:
-            xmask = 0x6;
-            break;
-        case XML_SCHEMAS_TIME:
-            xmask = 0x8;
-            break;
-        default:
-            xmask = 0;
-            break;
-    }
-
-    switch (y->type) {
-        case XML_SCHEMAS_DATETIME:
-            ymask = 0xf;
-            break;
-        case XML_SCHEMAS_DATE:
-            ymask = 0x7;
-            break;
-        case XML_SCHEMAS_GYEAR:
-            ymask = 0x1;
-            break;
-        case XML_SCHEMAS_GMONTH:
-            ymask = 0x2;
-            break;
-        case XML_SCHEMAS_GDAY:
-            ymask = 0x3;
-            break;
-        case XML_SCHEMAS_GYEARMONTH:
-            ymask = 0x3;
-            break;
-        case XML_SCHEMAS_GMONTHDAY:
-            ymask = 0x6;
-            break;
-        case XML_SCHEMAS_TIME:
-            ymask = 0x8;
-            break;
-        default:
-            ymask = 0;
-            break;
-    }
-
-    xor_mask = xmask ^ ymask;           /* mark type differences */
-    and_mask = xmask & ymask;           /* mark field specification */
-
-    /* year */
-    if (xor_mask & 1)
-        return 2; /* indeterminate */
-    else if (and_mask & 1) {
-        if (x->value.date.year < y->value.date.year)
-            return -1;
-        else if (x->value.date.year > y->value.date.year)
-            return 1;
-    }
-
-    /* month */
-    if (xor_mask & 2)
-        return 2; /* indeterminate */
-    else if (and_mask & 2) {
-        if (x->value.date.mon < y->value.date.mon)
-            return -1;
-        else if (x->value.date.mon > y->value.date.mon)
-            return 1;
-    }
-
-    /* day */
-    if (xor_mask & 4)
-        return 2; /* indeterminate */
-    else if (and_mask & 4) {
-        if (x->value.date.day < y->value.date.day)
-            return -1;
-        else if (x->value.date.day > y->value.date.day)
-            return 1;
-    }
-
-    /* time */
-    if (xor_mask & 8)
-        return 2; /* indeterminate */
-    else if (and_mask & 8) {
-        if (x->value.date.hour < y->value.date.hour)
-            return -1;
-        else if (x->value.date.hour > y->value.date.hour)
-            return 1;
-        else if (x->value.date.min < y->value.date.min)
-            return -1;
-        else if (x->value.date.min > y->value.date.min)
-            return 1;
-        else if (x->value.date.sec < y->value.date.sec)
-            return -1;
-        else if (x->value.date.sec > y->value.date.sec)
-            return 1;
-    }
-
-    return 0;
-}
-
-/**
- * xmlSchemaComparePreserveReplaceStrings:
- * @x:  a first string value
- * @y:  a second string value
- * @invert: inverts the result if x < y or x > y.
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "replace". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaComparePreserveReplaceStrings(const xmlChar *x,
-				       const xmlChar *y,
-				       int invert)
-{
-    int tmp;
-
-    while ((*x != 0) && (*y != 0)) {
-	if (IS_WSP_REPLACE_CH(*y)) {
-	    if (! IS_WSP_SPACE_CH(*x)) {
-		if ((*x - 0x20) < 0) {
-		    if (invert)
-			return(1);
-		    else
-			return(-1);
-		} else {
-		    if (invert)
-			return(-1);
-		    else
-			return(1);
-		}
-	    }
-	} else {
-	    tmp = *x - *y;
-	    if (tmp < 0) {
-		if (invert)
-		    return(1);
-		else
-		    return(-1);
-	    }
-	    if (tmp > 0) {
-		if (invert)
-		    return(-1);
-		else
-		    return(1);
-	    }
-	}
-	x++;
-	y++;
-    }
-    if (*x != 0) {
-	if (invert)
-	    return(-1);
-	else
-	    return(1);
-    }
-    if (*y != 0) {
-	if (invert)
-	    return(1);
-	else
-	    return(-1);
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaComparePreserveCollapseStrings:
- * @x:  a first string value
- * @y:  a second string value
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "collapse". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaComparePreserveCollapseStrings(const xmlChar *x,
-				        const xmlChar *y,
-					int invert)
-{
-    int tmp;
-
-    /*
-    * Skip leading blank chars of the collapsed string.
-    */
-    while IS_WSP_BLANK_CH(*y)
-	y++;
-
-    while ((*x != 0) && (*y != 0)) {
-	if IS_WSP_BLANK_CH(*y) {
-	    if (! IS_WSP_SPACE_CH(*x)) {
-		/*
-		* The yv character would have been replaced to 0x20.
-		*/
-		if ((*x - 0x20) < 0) {
-		    if (invert)
-			return(1);
-		    else
-			return(-1);
-		} else {
-		    if (invert)
-			return(-1);
-		    else
-			return(1);
-		}
-	    }
-	    x++;
-	    y++;
-	    /*
-	    * Skip contiguous blank chars of the collapsed string.
-	    */
-	    while IS_WSP_BLANK_CH(*y)
-		y++;
-	} else {
-	    tmp = *x++ - *y++;
-	    if (tmp < 0) {
-		if (invert)
-		    return(1);
-		else
-		    return(-1);
-	    }
-	    if (tmp > 0) {
-		if (invert)
-		    return(-1);
-		else
-		    return(1);
-	    }
-	}
-    }
-    if (*x != 0) {
-	 if (invert)
-	     return(-1);
-	 else
-	     return(1);
-    }
-    if (*y != 0) {
-	/*
-	* Skip trailing blank chars of the collapsed string.
-	*/
-	while IS_WSP_BLANK_CH(*y)
-	    y++;
-	if (*y != 0) {
-	    if (invert)
-		return(1);
-	    else
-		return(-1);
-	}
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaComparePreserveCollapseStrings:
- * @x:  a first string value
- * @y:  a second string value
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "collapse". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x,
-				       const xmlChar *y,
-				       int invert)
-{
-    int tmp;
-
-    /*
-    * Skip leading blank chars of the collapsed string.
-    */
-    while IS_WSP_BLANK_CH(*y)
-	y++;
-
-    while ((*x != 0) && (*y != 0)) {
-	if IS_WSP_BLANK_CH(*y) {
-	    if (! IS_WSP_BLANK_CH(*x)) {
-		/*
-		* The yv character would have been replaced to 0x20.
-		*/
-		if ((*x - 0x20) < 0) {
-		    if (invert)
-			return(1);
-		    else
-			return(-1);
-		} else {
-		    if (invert)
-			return(-1);
-		    else
-			return(1);
-		}
-	    }
-	    x++;
-	    y++;
-	    /*
-	    * Skip contiguous blank chars of the collapsed string.
-	    */
-	    while IS_WSP_BLANK_CH(*y)
-		y++;
-	} else {
-	    if IS_WSP_BLANK_CH(*x) {
-		/*
-		* The xv character would have been replaced to 0x20.
-		*/
-		if ((0x20 - *y) < 0) {
-		    if (invert)
-			return(1);
-		    else
-			return(-1);
-		} else {
-		    if (invert)
-			return(-1);
-		    else
-			return(1);
-		}
-	    }
-	    tmp = *x++ - *y++;
-	    if (tmp < 0)
-		return(-1);
-	    if (tmp > 0)
-		return(1);
-	}
-    }
-    if (*x != 0) {
-	 if (invert)
-	     return(-1);
-	 else
-	     return(1);
-    }
-    if (*y != 0) {
-	/*
-	* Skip trailing blank chars of the collapsed string.
-	*/
-	while IS_WSP_BLANK_CH(*y)
-	    y++;
-	if (*y != 0) {
-	    if (invert)
-		return(1);
-	    else
-		return(-1);
-	}
-    }
-    return(0);
-}
-
-
-/**
- * xmlSchemaCompareReplacedStrings:
- * @x:  a first string value
- * @y:  a second string value
- *
- * Compare 2 string for their normalized values.
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareReplacedStrings(const xmlChar *x,
-				const xmlChar *y)
-{
-    int tmp;
-
-    while ((*x != 0) && (*y != 0)) {
-	if IS_WSP_BLANK_CH(*y) {
-	    if (! IS_WSP_BLANK_CH(*x)) {
-		if ((*x - 0x20) < 0)
-		    return(-1);
-		else
-		    return(1);
-	    }
-	} else {
-	    if IS_WSP_BLANK_CH(*x) {
-		if ((0x20 - *y) < 0)
-		    return(-1);
-		else
-		    return(1);
-	    }
-	    tmp = *x - *y;
-	    if (tmp < 0)
-		return(-1);
-	    if (tmp > 0)
-		return(1);
-	}
-	x++;
-	y++;
-    }
-    if (*x != 0)
-        return(1);
-    if (*y != 0)
-        return(-1);
-    return(0);
-}
-
-/**
- * xmlSchemaCompareNormStrings:
- * @x:  a first string value
- * @y:  a second string value
- *
- * Compare 2 string for their normalized values.
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareNormStrings(const xmlChar *x,
-			    const xmlChar *y) {
-    int tmp;
-
-    while (IS_BLANK_CH(*x)) x++;
-    while (IS_BLANK_CH(*y)) y++;
-    while ((*x != 0) && (*y != 0)) {
-	if (IS_BLANK_CH(*x)) {
-	    if (!IS_BLANK_CH(*y)) {
-		tmp = *x - *y;
-		return(tmp);
-	    }
-	    while (IS_BLANK_CH(*x)) x++;
-	    while (IS_BLANK_CH(*y)) y++;
-	} else {
-	    tmp = *x++ - *y++;
-	    if (tmp < 0)
-		return(-1);
-	    if (tmp > 0)
-		return(1);
-	}
-    }
-    if (*x != 0) {
-	while (IS_BLANK_CH(*x)) x++;
-	if (*x != 0)
-	    return(1);
-    }
-    if (*y != 0) {
-	while (IS_BLANK_CH(*y)) y++;
-	if (*y != 0)
-	    return(-1);
-    }
-    return(0);
-}
-
-/**
- * xmlSchemaCompareFloats:
- * @x:  a first float or double value
- * @y:  a second float or double value
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareFloats(xmlSchemaValPtr x, xmlSchemaValPtr y) {
-    double d1, d2;
-
-    if ((x == NULL) || (y == NULL))
-	return(-2);
-
-    /*
-     * Cast everything to doubles.
-     */
-    if (x->type == XML_SCHEMAS_DOUBLE)
-	d1 = x->value.d;
-    else if (x->type == XML_SCHEMAS_FLOAT)
-	d1 = x->value.f;
-    else
-	return(-2);
-
-    if (y->type == XML_SCHEMAS_DOUBLE)
-	d2 = y->value.d;
-    else if (y->type == XML_SCHEMAS_FLOAT)
-	d2 = y->value.f;
-    else
-	return(-2);
-
-    /*
-     * Check for special cases.
-     */
-    if (xmlXPathIsNaN(d1)) {
-	if (xmlXPathIsNaN(d2))
-	    return(0);
-	return(1);
-    }
-    if (xmlXPathIsNaN(d2))
-	return(-1);
-    if (d1 == xmlXPathPINF) {
-	if (d2 == xmlXPathPINF)
-	    return(0);
-        return(1);
-    }
-    if (d2 == xmlXPathPINF)
-        return(-1);
-    if (d1 == xmlXPathNINF) {
-	if (d2 == xmlXPathNINF)
-	    return(0);
-        return(-1);
-    }
-    if (d2 == xmlXPathNINF)
-        return(1);
-
-    /*
-     * basic tests, the last one we should have equality, but
-     * portability is more important than speed and handling
-     * NaN or Inf in a portable way is always a challenge, so ...
-     */
-    if (d1 < d2)
-	return(-1);
-    if (d1 > d2)
-	return(1);
-    if (d1 == d2)
-	return(0);
-    return(2);
-}
-
-/**
- * xmlSchemaCompareValues:
- * @x:  a first value
- * @xvalue: the first value as a string (optional)
- * @xwtsp: the whitespace type
- * @y:  a second value
- * @xvalue: the second value as a string (optional)
- * @ywtsp: the whitespace type
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, 3 if not
- * comparable and -2 in case of error
- */
-static int
-xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
-			       xmlSchemaValPtr x,
-			       const xmlChar *xvalue,
-			       xmlSchemaWhitespaceValueType xws,
-			       xmlSchemaValType ytype,
-			       xmlSchemaValPtr y,
-			       const xmlChar *yvalue,
-			       xmlSchemaWhitespaceValueType yws)
-{
-    switch (xtype) {
-	case XML_SCHEMAS_UNKNOWN:
-	case XML_SCHEMAS_ANYTYPE:
-	    return(-2);
-        case XML_SCHEMAS_INTEGER:
-        case XML_SCHEMAS_NPINTEGER:
-        case XML_SCHEMAS_NINTEGER:
-        case XML_SCHEMAS_NNINTEGER:
-        case XML_SCHEMAS_PINTEGER:
-        case XML_SCHEMAS_INT:
-        case XML_SCHEMAS_UINT:
-        case XML_SCHEMAS_LONG:
-        case XML_SCHEMAS_ULONG:
-        case XML_SCHEMAS_SHORT:
-        case XML_SCHEMAS_USHORT:
-        case XML_SCHEMAS_BYTE:
-        case XML_SCHEMAS_UBYTE:
-	case XML_SCHEMAS_DECIMAL:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-	    if (ytype == xtype)
-		return(xmlSchemaCompareDecimals(x, y));
-	    if ((ytype == XML_SCHEMAS_DECIMAL) ||
-		(ytype == XML_SCHEMAS_INTEGER) ||
-		(ytype == XML_SCHEMAS_NPINTEGER) ||
-		(ytype == XML_SCHEMAS_NINTEGER) ||
-		(ytype == XML_SCHEMAS_NNINTEGER) ||
-		(ytype == XML_SCHEMAS_PINTEGER) ||
-		(ytype == XML_SCHEMAS_INT) ||
-		(ytype == XML_SCHEMAS_UINT) ||
-		(ytype == XML_SCHEMAS_LONG) ||
-		(ytype == XML_SCHEMAS_ULONG) ||
-		(ytype == XML_SCHEMAS_SHORT) ||
-		(ytype == XML_SCHEMAS_USHORT) ||
-		(ytype == XML_SCHEMAS_BYTE) ||
-		(ytype == XML_SCHEMAS_UBYTE))
-		return(xmlSchemaCompareDecimals(x, y));
-	    return(-2);
-        case XML_SCHEMAS_DURATION:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-	    if (ytype == XML_SCHEMAS_DURATION)
-                return(xmlSchemaCompareDurations(x, y));
-            return(-2);
-        case XML_SCHEMAS_TIME:
-        case XML_SCHEMAS_GDAY:
-        case XML_SCHEMAS_GMONTH:
-        case XML_SCHEMAS_GMONTHDAY:
-        case XML_SCHEMAS_GYEAR:
-        case XML_SCHEMAS_GYEARMONTH:
-        case XML_SCHEMAS_DATE:
-        case XML_SCHEMAS_DATETIME:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if ((ytype == XML_SCHEMAS_DATETIME)  ||
-                (ytype == XML_SCHEMAS_TIME)      ||
-                (ytype == XML_SCHEMAS_GDAY)      ||
-                (ytype == XML_SCHEMAS_GMONTH)    ||
-                (ytype == XML_SCHEMAS_GMONTHDAY) ||
-                (ytype == XML_SCHEMAS_GYEAR)     ||
-                (ytype == XML_SCHEMAS_DATE)      ||
-                (ytype == XML_SCHEMAS_GYEARMONTH))
-                return (xmlSchemaCompareDates(x, y));
-            return (-2);
-	/*
-	* Note that we will support comparison of string types against
-	* anySimpleType as well.
-	*/
-	case XML_SCHEMAS_ANYSIMPLETYPE:
-	case XML_SCHEMAS_STRING:
-        case XML_SCHEMAS_NORMSTRING:
-        case XML_SCHEMAS_TOKEN:
-        case XML_SCHEMAS_LANGUAGE:
-        case XML_SCHEMAS_NMTOKEN:
-        case XML_SCHEMAS_NAME:
-        case XML_SCHEMAS_NCNAME:
-        case XML_SCHEMAS_ID:
-        case XML_SCHEMAS_IDREF:
-        case XML_SCHEMAS_ENTITY:
-        case XML_SCHEMAS_ANYURI:
-	{
-	    const xmlChar *xv, *yv;
-
-	    if (x == NULL)
-		xv = xvalue;
-	    else
-		xv = x->value.str;
-	    if (y == NULL)
-		yv = yvalue;
-	    else
-		yv = y->value.str;
-	    /*
-	    * TODO: Compare those against QName.
-	    */
-	    if (ytype == XML_SCHEMAS_QNAME) {
-		TODO
-		if (y == NULL)
-		    return(-2);
-		return (-2);
-	    }
-            if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) ||
-		(ytype == XML_SCHEMAS_STRING) ||
-		(ytype == XML_SCHEMAS_NORMSTRING) ||
-                (ytype == XML_SCHEMAS_TOKEN) ||
-                (ytype == XML_SCHEMAS_LANGUAGE) ||
-                (ytype == XML_SCHEMAS_NMTOKEN) ||
-                (ytype == XML_SCHEMAS_NAME) ||
-                (ytype == XML_SCHEMAS_NCNAME) ||
-                (ytype == XML_SCHEMAS_ID) ||
-                (ytype == XML_SCHEMAS_IDREF) ||
-                (ytype == XML_SCHEMAS_ENTITY) ||
-                (ytype == XML_SCHEMAS_ANYURI)) {
-
-		if (xws == XML_SCHEMA_WHITESPACE_PRESERVE) {
-
-		    if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) {
-			/* TODO: What about x < y or x > y. */
-			if (xmlStrEqual(xv, yv))
-			    return (0);
-			else
-			    return (2);
-		    } else if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
-			return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0));
-		    else if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			return (xmlSchemaComparePreserveCollapseStrings(xv, yv, 0));
-
-		} else if (xws == XML_SCHEMA_WHITESPACE_REPLACE) {
-
-		    if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
-			return (xmlSchemaComparePreserveReplaceStrings(yv, xv, 1));
-		    if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
-			return (xmlSchemaCompareReplacedStrings(xv, yv));
-		    if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			return (xmlSchemaCompareReplaceCollapseStrings(xv, yv, 0));
-
-		} else if (xws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
-
-		    if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
-			return (xmlSchemaComparePreserveCollapseStrings(yv, xv, 1));
-		    if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
-			return (xmlSchemaCompareReplaceCollapseStrings(yv, xv, 1));
-		    if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			return (xmlSchemaCompareNormStrings(xv, yv));
-		} else
-		    return (-2);
-
-	    }
-            return (-2);
-	}
-        case XML_SCHEMAS_QNAME:
-	case XML_SCHEMAS_NOTATION:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if ((ytype == XML_SCHEMAS_QNAME) ||
-		(ytype == XML_SCHEMAS_NOTATION)) {
-		if ((xmlStrEqual(x->value.qname.name, y->value.qname.name)) &&
-		    (xmlStrEqual(x->value.qname.uri, y->value.qname.uri)))
-		    return(0);
-		return(2);
-	    }
-	    return (-2);
-        case XML_SCHEMAS_FLOAT:
-        case XML_SCHEMAS_DOUBLE:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if ((ytype == XML_SCHEMAS_FLOAT) ||
-                (ytype == XML_SCHEMAS_DOUBLE))
-                return (xmlSchemaCompareFloats(x, y));
-            return (-2);
-        case XML_SCHEMAS_BOOLEAN:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if (ytype == XML_SCHEMAS_BOOLEAN) {
-		if (x->value.b == y->value.b)
-		    return(0);
-		if (x->value.b == 0)
-		    return(-1);
-		return(1);
-	    }
-	    return (-2);
-        case XML_SCHEMAS_HEXBINARY:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if (ytype == XML_SCHEMAS_HEXBINARY) {
-	        if (x->value.hex.total == y->value.hex.total) {
-		    int ret = xmlStrcmp(x->value.hex.str, y->value.hex.str);
-		    if (ret > 0)
-			return(1);
-		    else if (ret == 0)
-			return(0);
-		}
-		else if (x->value.hex.total > y->value.hex.total)
-		    return(1);
-
-		return(-1);
-            }
-            return (-2);
-        case XML_SCHEMAS_BASE64BINARY:
-	    if ((x == NULL) || (y == NULL))
-		return(-2);
-            if (ytype == XML_SCHEMAS_BASE64BINARY) {
-                if (x->value.base64.total == y->value.base64.total) {
-                    int ret = xmlStrcmp(x->value.base64.str,
-		                        y->value.base64.str);
-                    if (ret > 0)
-                        return(1);
-                    else if (ret == 0)
-                        return(0);
-		    else
-		        return(-1);
-                }
-                else if (x->value.base64.total > y->value.base64.total)
-                    return(1);
-                else
-                    return(-1);
-            }
-            return (-2);
-        case XML_SCHEMAS_IDREFS:
-        case XML_SCHEMAS_ENTITIES:
-        case XML_SCHEMAS_NMTOKENS:
-	    TODO
-	    break;
-    }
-    return -2;
-}
-
-/**
- * xmlSchemaCompareValues:
- * @x:  a first value
- * @y:  a second value
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-int
-xmlSchemaCompareValues(xmlSchemaValPtr x, xmlSchemaValPtr y) {
-    xmlSchemaWhitespaceValueType xws, yws;
-
-    if ((x == NULL) || (y == NULL))
-        return(-2);
-    if (x->type == XML_SCHEMAS_STRING)
-	xws = XML_SCHEMA_WHITESPACE_PRESERVE;
-    else if (x->type == XML_SCHEMAS_NORMSTRING)
-        xws = XML_SCHEMA_WHITESPACE_REPLACE;
-    else
-        xws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
-    if (y->type == XML_SCHEMAS_STRING)
-	yws = XML_SCHEMA_WHITESPACE_PRESERVE;
-    else if (y->type == XML_SCHEMAS_NORMSTRING)
-        yws = XML_SCHEMA_WHITESPACE_REPLACE;
-    else
-        yws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
-    return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type,
-	y, NULL, yws));
-}
-
-/**
- * xmlSchemaCompareValuesWhtsp:
- * @x:  a first value
- * @xws: the whitespace value of x
- * @y:  a second value
- * @yws: the whitespace value of y
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-int
-xmlSchemaCompareValuesWhtsp(xmlSchemaValPtr x,
-			    xmlSchemaWhitespaceValueType xws,
-			    xmlSchemaValPtr y,
-			    xmlSchemaWhitespaceValueType yws)
-{
-    if ((x == NULL) || (y == NULL))
-	return(-2);
-    return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type,
-	y, NULL, yws));
-}
-
-/**
- * xmlSchemaCompareValuesWhtspExt:
- * @x:  a first value
- * @xws: the whitespace value of x
- * @y:  a second value
- * @yws: the whitespace value of y
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareValuesWhtspExt(xmlSchemaValType xtype,
-			       xmlSchemaValPtr x,
-			       const xmlChar *xvalue,
-			       xmlSchemaWhitespaceValueType xws,
-			       xmlSchemaValType ytype,
-			       xmlSchemaValPtr y,
-			       const xmlChar *yvalue,
-			       xmlSchemaWhitespaceValueType yws)
-{
-    return(xmlSchemaCompareValuesInternal(xtype, x, xvalue, xws, ytype, y,
-	yvalue, yws));
-}
-
-/**
- * xmlSchemaNormLen:
- * @value:  a string
- *
- * Computes the UTF8 length of the normalized value of the string
- *
- * Returns the length or -1 in case of error.
- */
-static int
-xmlSchemaNormLen(const xmlChar *value) {
-    const xmlChar *utf;
-    int ret = 0;
-
-    if (value == NULL)
-	return(-1);
-    utf = value;
-    while (IS_BLANK_CH(*utf)) utf++;
-    while (*utf != 0) {
-	if (utf[0] & 0x80) {
-	    if ((utf[1] & 0xc0) != 0x80)
-		return(-1);
-	    if ((utf[0] & 0xe0) == 0xe0) {
-		if ((utf[2] & 0xc0) != 0x80)
-		    return(-1);
-		if ((utf[0] & 0xf0) == 0xf0) {
-		    if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
-			return(-1);
-		    utf += 4;
-		} else {
-		    utf += 3;
-		}
-	    } else {
-		utf += 2;
-	    }
-	} else if (IS_BLANK_CH(*utf)) {
-	    while (IS_BLANK_CH(*utf)) utf++;
-	    if (*utf == 0)
-		break;
-	} else {
-	    utf++;
-	}
-	ret++;
-    }
-    return(ret);
-}
-
-/**
- * xmlSchemaGetFacetValueAsULong:
- * @facet: an schemas type facet
- *
- * Extract the value of a facet
- *
- * Returns the value as a long
- */
-unsigned long
-xmlSchemaGetFacetValueAsULong(xmlSchemaFacetPtr facet)
-{
-    /*
-    * TODO: Check if this is a decimal.
-    */
-    if (facet == NULL)
-        return 0;
-    return ((unsigned long) facet->val->value.decimal.lo);
-}
-
-/**
- * xmlSchemaValidateListSimpleTypeFacet:
- * @facet:  the facet to check
- * @value:  the lexical repr of the value to validate
- * @actualLen:  the number of list items
- * @expectedLen: the resulting expected number of list items
- *
- * Checks the value of a list simple type against a facet.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal error.
- */
-int
-xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
-				     const xmlChar *value,
-				     unsigned long actualLen,
-				     unsigned long *expectedLen)
-{
-    if (facet == NULL)
-        return(-1);
-    /*
-    * TODO: Check if this will work with large numbers.
-    * (compare value.decimal.mi and value.decimal.hi as well?).
-    */
-    if (facet->type == XML_SCHEMA_FACET_LENGTH) {
-	if (actualLen != facet->val->value.decimal.lo) {
-	    if (expectedLen != NULL)
-		*expectedLen = facet->val->value.decimal.lo;
-	    return (XML_SCHEMAV_CVC_LENGTH_VALID);
-	}
-    } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
-	if (actualLen < facet->val->value.decimal.lo) {
-	    if (expectedLen != NULL)
-		*expectedLen = facet->val->value.decimal.lo;
-	    return (XML_SCHEMAV_CVC_MINLENGTH_VALID);
-	}
-    } else if (facet->type == XML_SCHEMA_FACET_MAXLENGTH) {
-	if (actualLen > facet->val->value.decimal.lo) {
-	    if (expectedLen != NULL)
-		*expectedLen = facet->val->value.decimal.lo;
-	    return (XML_SCHEMAV_CVC_MAXLENGTH_VALID);
-	}
-    } else
-	/*
-	* NOTE: That we can pass NULL as xmlSchemaValPtr to
-	* xmlSchemaValidateFacet, since the remaining facet types
-	* are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION.
-	*/
-	return(xmlSchemaValidateFacet(NULL, facet, value, NULL));
-    return (0);
-}
-
-/**
- * xmlSchemaValidateLengthFacet:
- * @type:  the built-in type
- * @facet:  the facet to check
- * @value:  the lexical repr. of the value to be validated
- * @val:  the precomputed value
- * @ws: the whitespace type of the value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
-				     xmlSchemaValType valType,
-				     const xmlChar *value,
-				     xmlSchemaValPtr val,
-				     unsigned long *length,
-				     xmlSchemaWhitespaceValueType ws)
-{
-    unsigned int len = 0;
-
-    if ((length == NULL) || (facet == NULL))
-        return (-1);
-    *length = 0;
-    if ((facet->type != XML_SCHEMA_FACET_LENGTH) &&
-	(facet->type != XML_SCHEMA_FACET_MAXLENGTH) &&
-	(facet->type != XML_SCHEMA_FACET_MINLENGTH))
-	return (-1);
-
-    /*
-    * TODO: length, maxLength and minLength must be of type
-    * nonNegativeInteger only. Check if decimal is used somehow.
-    */
-    if ((facet->val == NULL) ||
-	((facet->val->type != XML_SCHEMAS_DECIMAL) &&
-	 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
-	(facet->val->value.decimal.frac != 0)) {
-	return(-1);
-    }
-    if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY))
-	len = val->value.hex.total;
-    else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY))
-	len = val->value.base64.total;
-    else {
-	switch (valType) {
-	    case XML_SCHEMAS_STRING:
-	    case XML_SCHEMAS_NORMSTRING:
-		if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
-		    /*
-		    * This is to ensure API compatibility with the old
-		    * xmlSchemaValidateLengthFacet(). Anyway, this was and
-		    * is not the correct handling.
-		    * TODO: Get rid of this case somehow.
-		    */
-		    if (valType == XML_SCHEMAS_STRING)
-			len = xmlUTF8Strlen(value);
-		    else
-			len = xmlSchemaNormLen(value);
-		} else if (value != NULL) {
-		    if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-			len = xmlSchemaNormLen(value);
-		    else
-		    /*
-		    * Should be OK for "preserve" as well.
-		    */
-		    len = xmlUTF8Strlen(value);
-		}
-		break;
-	    case XML_SCHEMAS_IDREF:
-	    case XML_SCHEMAS_TOKEN:
-	    case XML_SCHEMAS_LANGUAGE:
-	    case XML_SCHEMAS_NMTOKEN:
-	    case XML_SCHEMAS_NAME:
-	    case XML_SCHEMAS_NCNAME:
-	    case XML_SCHEMAS_ID:
-		/*
-		* FIXME: What exactly to do with anyURI?
-		*/
-	    case XML_SCHEMAS_ANYURI:
-		if (value != NULL)
-		    len = xmlSchemaNormLen(value);
-		break;
-	    case XML_SCHEMAS_QNAME:
-	    case XML_SCHEMAS_NOTATION:
-		/*
-		* For QName and NOTATION, those facets are
-		* deprecated and should be ignored.
-		*/
-		return (0);
-	    default:
-		TODO
-	}
-    }
-    *length = (unsigned long) len;
-    /*
-    * TODO: Return the whole expected value, i.e. "lo", "mi" and "hi".
-    */
-    if (facet->type == XML_SCHEMA_FACET_LENGTH) {
-	if (len != facet->val->value.decimal.lo)
-	    return(XML_SCHEMAV_CVC_LENGTH_VALID);
-    } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
-	if (len < facet->val->value.decimal.lo)
-	    return(XML_SCHEMAV_CVC_MINLENGTH_VALID);
-    } else {
-	if (len > facet->val->value.decimal.lo)
-	    return(XML_SCHEMAV_CVC_MAXLENGTH_VALID);
-    }
-
-    return (0);
-}
-
-/**
- * xmlSchemaValidateLengthFacet:
- * @type:  the built-in type
- * @facet:  the facet to check
- * @value:  the lexical repr. of the value to be validated
- * @val:  the precomputed value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type,
-			     xmlSchemaFacetPtr facet,
-			     const xmlChar *value,
-			     xmlSchemaValPtr val,
-			     unsigned long *length)
-{
-    if (type == NULL)
-        return(-1);
-    return (xmlSchemaValidateLengthFacetInternal(facet,
-	type->builtInType, value, val, length,
-	XML_SCHEMA_WHITESPACE_UNKNOWN));
-}
-
-/**
- * xmlSchemaValidateLengthFacetWhtsp:
- * @facet:  the facet to check
- * @valType:  the built-in type
- * @value:  the lexical repr. of the value to be validated
- * @val:  the precomputed value
- * @ws: the whitespace type of the value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
-				  xmlSchemaValType valType,
-				  const xmlChar *value,
-				  xmlSchemaValPtr val,
-				  unsigned long *length,
-				  xmlSchemaWhitespaceValueType ws)
-{
-    return (xmlSchemaValidateLengthFacetInternal(facet, valType, value, val,
-	length, ws));
-}
-
-/**
- * xmlSchemaValidateFacetInternal:
- * @facet:  the facet to check
- * @fws: the whitespace type of the facet's value
- * @valType: the built-in type of the value
- * @value:  the lexical repr of the value to validate
- * @val:  the precomputed value
- * @ws: the whitespace type of the value
- *
- * Check a value against a facet condition
- *
- * Returns 0 if the element is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
-			       xmlSchemaWhitespaceValueType fws,
-			       xmlSchemaValType valType,
-			       const xmlChar *value,
-			       xmlSchemaValPtr val,
-			       xmlSchemaWhitespaceValueType ws)
-{
-    int ret;
-    int stringType;
-
-    if (facet == NULL)
-	return(-1);
-
-    switch (facet->type) {
-	case XML_SCHEMA_FACET_PATTERN:
-	    /*
-	    * NOTE that for patterns, the @value needs to be the normalized
-	    * value, *not* the lexical initial value or the canonical value.
-	    */
-	    if (value == NULL)
-		return(-1);
-	    /*
-	    * If string-derived type, regexp must be tested on the value space of
-	    * the datatype.
-	    * See https://www.w3.org/TR/xmlschema-2/#rf-pattern
-	    */
-	    stringType = val && ((val->type >= XML_SCHEMAS_STRING && val->type <= XML_SCHEMAS_NORMSTRING)
-			      || (val->type >= XML_SCHEMAS_TOKEN && val->type <= XML_SCHEMAS_NCNAME));
-	    ret = xmlRegexpExec(facet->regexp,
-	                        (stringType && val->value.str) ? val->value.str : value);
-	    if (ret == 1)
-		return(0);
-	    if (ret == 0)
-		return(XML_SCHEMAV_CVC_PATTERN_VALID);
-	    return(ret);
-	case XML_SCHEMA_FACET_MAXEXCLUSIVE:
-	    ret = xmlSchemaCompareValues(val, facet->val);
-	    if (ret == -2)
-		return(-1);
-	    if (ret == -1)
-		return(0);
-	    return(XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID);
-	case XML_SCHEMA_FACET_MAXINCLUSIVE:
-	    ret = xmlSchemaCompareValues(val, facet->val);
-	    if (ret == -2)
-		return(-1);
-	    if ((ret == -1) || (ret == 0))
-		return(0);
-	    return(XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID);
-	case XML_SCHEMA_FACET_MINEXCLUSIVE:
-	    ret = xmlSchemaCompareValues(val, facet->val);
-	    if (ret == -2)
-		return(-1);
-	    if (ret == 1)
-		return(0);
-	    return(XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID);
-	case XML_SCHEMA_FACET_MININCLUSIVE:
-	    ret = xmlSchemaCompareValues(val, facet->val);
-	    if (ret == -2)
-		return(-1);
-	    if ((ret == 1) || (ret == 0))
-		return(0);
-	    return(XML_SCHEMAV_CVC_MININCLUSIVE_VALID);
-	case XML_SCHEMA_FACET_WHITESPACE:
-	    /* TODO whitespaces */
-	    /*
-	    * NOTE: Whitespace should be handled to normalize
-	    * the value to be validated against a the facets;
-	    * not to normalize the value in-between.
-	    */
-	    return(0);
-	case  XML_SCHEMA_FACET_ENUMERATION:
-	    if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
-		/*
-		* This is to ensure API compatibility with the old
-		* xmlSchemaValidateFacet().
-		* TODO: Get rid of this case.
-		*/
-		if ((facet->value != NULL) &&
-		    (xmlStrEqual(facet->value, value)))
-		    return(0);
-	    } else {
-		ret = xmlSchemaCompareValuesWhtspExt(facet->val->type,
-		    facet->val, facet->value, fws, valType, val,
-		    value, ws);
-		if (ret == -2)
-		    return(-1);
-		if (ret == 0)
-		    return(0);
-	    }
-	    return(XML_SCHEMAV_CVC_ENUMERATION_VALID);
-	case XML_SCHEMA_FACET_LENGTH:
-	    /*
-	    * SPEC (1.3) "if {primitive type definition} is QName or NOTATION,
-	    * then any {value} is facet-valid."
-	    */
-	    if ((valType == XML_SCHEMAS_QNAME) ||
-		(valType == XML_SCHEMAS_NOTATION))
-		return (0);
-	    /* No break on purpose. */
-	case XML_SCHEMA_FACET_MAXLENGTH:
-	case XML_SCHEMA_FACET_MINLENGTH: {
-	    unsigned int len = 0;
-
-	    if ((valType == XML_SCHEMAS_QNAME) ||
-		(valType == XML_SCHEMAS_NOTATION))
-		return (0);
-	    /*
-	    * TODO: length, maxLength and minLength must be of type
-	    * nonNegativeInteger only. Check if decimal is used somehow.
-	    */
-	    if ((facet->val == NULL) ||
-		((facet->val->type != XML_SCHEMAS_DECIMAL) &&
-		 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
-		(facet->val->value.decimal.frac != 0)) {
-		return(-1);
-	    }
-	    if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY))
-		len = val->value.hex.total;
-	    else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY))
-		len = val->value.base64.total;
-	    else {
-		switch (valType) {
-		    case XML_SCHEMAS_STRING:
-		    case XML_SCHEMAS_NORMSTRING:
-			if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
-			    /*
-			    * This is to ensure API compatibility with the old
-			    * xmlSchemaValidateFacet(). Anyway, this was and
-			    * is not the correct handling.
-			    * TODO: Get rid of this case somehow.
-			    */
-			    if (valType == XML_SCHEMAS_STRING)
-				len = xmlUTF8Strlen(value);
-			    else
-				len = xmlSchemaNormLen(value);
-			} else if (value != NULL) {
-			    if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-				len = xmlSchemaNormLen(value);
-			    else
-				/*
-				* Should be OK for "preserve" as well.
-				*/
-				len = xmlUTF8Strlen(value);
-			}
-			break;
-		    case XML_SCHEMAS_IDREF:
-		    case XML_SCHEMAS_TOKEN:
-		    case XML_SCHEMAS_LANGUAGE:
-		    case XML_SCHEMAS_NMTOKEN:
-		    case XML_SCHEMAS_NAME:
-		    case XML_SCHEMAS_NCNAME:
-		    case XML_SCHEMAS_ID:
-		    case XML_SCHEMAS_ANYURI:
-			if (value != NULL)
-			    len = xmlSchemaNormLen(value);
-			break;
-		    default:
-		        TODO
-		}
-	    }
-	    if (facet->type == XML_SCHEMA_FACET_LENGTH) {
-		if (len != facet->val->value.decimal.lo)
-		    return(XML_SCHEMAV_CVC_LENGTH_VALID);
-	    } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
-		if (len < facet->val->value.decimal.lo)
-		    return(XML_SCHEMAV_CVC_MINLENGTH_VALID);
-	    } else {
-		if (len > facet->val->value.decimal.lo)
-		    return(XML_SCHEMAV_CVC_MAXLENGTH_VALID);
-	    }
-	    break;
-	}
-	case XML_SCHEMA_FACET_TOTALDIGITS:
-	case XML_SCHEMA_FACET_FRACTIONDIGITS:
-
-	    if ((facet->val == NULL) ||
-		((facet->val->type != XML_SCHEMAS_PINTEGER) &&
-		 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
-		(facet->val->value.decimal.frac != 0)) {
-		return(-1);
-	    }
-	    if ((val == NULL) ||
-		((val->type != XML_SCHEMAS_DECIMAL) &&
-		 (val->type != XML_SCHEMAS_INTEGER) &&
-		 (val->type != XML_SCHEMAS_NPINTEGER) &&
-		 (val->type != XML_SCHEMAS_NINTEGER) &&
-		 (val->type != XML_SCHEMAS_NNINTEGER) &&
-		 (val->type != XML_SCHEMAS_PINTEGER) &&
-		 (val->type != XML_SCHEMAS_INT) &&
-		 (val->type != XML_SCHEMAS_UINT) &&
-		 (val->type != XML_SCHEMAS_LONG) &&
-		 (val->type != XML_SCHEMAS_ULONG) &&
-		 (val->type != XML_SCHEMAS_SHORT) &&
-		 (val->type != XML_SCHEMAS_USHORT) &&
-		 (val->type != XML_SCHEMAS_BYTE) &&
-		 (val->type != XML_SCHEMAS_UBYTE))) {
-		return(-1);
-	    }
-	    if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
-	        if (val->value.decimal.total > facet->val->value.decimal.lo)
-	            return(XML_SCHEMAV_CVC_TOTALDIGITS_VALID);
-
-	    } else if (facet->type == XML_SCHEMA_FACET_FRACTIONDIGITS) {
-	        if (val->value.decimal.frac > facet->val->value.decimal.lo)
-		    return(XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID);
-	    }
-	    break;
-	default:
-	    TODO
-    }
-    return(0);
-
-}
-
-/**
- * xmlSchemaValidateFacet:
- * @base:  the base type
- * @facet:  the facet to check
- * @value:  the lexical repr of the value to validate
- * @val:  the precomputed value
- *
- * Check a value against a facet condition
- *
- * Returns 0 if the element is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateFacet(xmlSchemaTypePtr base,
-	               xmlSchemaFacetPtr facet,
-	               const xmlChar *value,
-		       xmlSchemaValPtr val)
-{
-    /*
-    * This tries to ensure API compatibility regarding the old
-    * xmlSchemaValidateFacet() and the new xmlSchemaValidateFacetInternal() and
-    * xmlSchemaValidateFacetWhtsp().
-    */
-    if (val != NULL)
-	return(xmlSchemaValidateFacetInternal(facet,
-	    XML_SCHEMA_WHITESPACE_UNKNOWN, val->type, value, val,
-	    XML_SCHEMA_WHITESPACE_UNKNOWN));
-    else if (base != NULL)
-	return(xmlSchemaValidateFacetInternal(facet,
-	    XML_SCHEMA_WHITESPACE_UNKNOWN, base->builtInType, value, val,
-	    XML_SCHEMA_WHITESPACE_UNKNOWN));
-    return(-1);
-}
-
-/**
- * xmlSchemaValidateFacetWhtsp:
- * @facet:  the facet to check
- * @fws: the whitespace type of the facet's value
- * @valType: the built-in type of the value
- * @value:  the lexical (or normalized for pattern) repr of the value to validate
- * @val:  the precomputed value
- * @ws: the whitespace type of the value
- *
- * Check a value against a facet condition. This takes value normalization
- * according to the specified whitespace types into account.
- * Note that @value needs to be the *normalized* value if the facet
- * is of type "pattern".
- *
- * Returns 0 if the element is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet,
-			    xmlSchemaWhitespaceValueType fws,
-			    xmlSchemaValType valType,
-			    const xmlChar *value,
-			    xmlSchemaValPtr val,
-			    xmlSchemaWhitespaceValueType ws)
-{
-     return(xmlSchemaValidateFacetInternal(facet, fws, valType,
-	 value, val, ws));
-}
-
-#if 0
-#ifndef DBL_DIG
-#define DBL_DIG 16
-#endif
-#ifndef DBL_EPSILON
-#define DBL_EPSILON 1E-9
-#endif
-
-#define INTEGER_DIGITS DBL_DIG
-#define FRACTION_DIGITS (DBL_DIG + 1)
-#define EXPONENT_DIGITS (3 + 2)
-
-/**
- * xmlXPathFormatNumber:
- * @number:     number to format
- * @buffer:     output buffer
- * @buffersize: size of output buffer
- *
- * Convert the number into a string representation.
- */
-static void
-xmlSchemaFormatFloat(double number, char buffer[], int buffersize)
-{
-    switch (xmlXPathIsInf(number)) {
-    case 1:
-	if (buffersize > (int)sizeof("INF"))
-	    snprintf(buffer, buffersize, "INF");
-	break;
-    case -1:
-	if (buffersize > (int)sizeof("-INF"))
-	    snprintf(buffer, buffersize, "-INF");
-	break;
-    default:
-	if (xmlXPathIsNaN(number)) {
-	    if (buffersize > (int)sizeof("NaN"))
-		snprintf(buffer, buffersize, "NaN");
-	} else if (number == 0) {
-	    snprintf(buffer, buffersize, "0.0E0");
-	} else {
-	    /* 3 is sign, decimal point, and terminating zero */
-	    char work[DBL_DIG + EXPONENT_DIGITS + 3];
-	    int integer_place, fraction_place;
-	    char *ptr;
-	    char *after_fraction;
-	    double absolute_value;
-	    int size;
-
-	    absolute_value = fabs(number);
-
-	    /*
-	     * Result is in work, and after_fraction points
-	     * just past the fractional part.
-	     * Use scientific notation
-	    */
-	    integer_place = DBL_DIG + EXPONENT_DIGITS + 1;
-	    fraction_place = DBL_DIG - 1;
-	    snprintf(work, sizeof(work),"%*.*e",
-		integer_place, fraction_place, number);
-	    after_fraction = strchr(work + DBL_DIG, 'e');
-	    /* Remove fractional trailing zeroes */
-	    ptr = after_fraction;
-	    while (*(--ptr) == '0')
-		;
-	    if (*ptr != '.')
-	        ptr++;
-	    while ((*ptr++ = *after_fraction++) != 0);
-
-	    /* Finally copy result back to caller */
-	    size = strlen(work) + 1;
-	    if (size > buffersize) {
-		work[buffersize - 1] = 0;
-		size = buffersize;
-	    }
-	    memmove(buffer, work, size);
-	}
-	break;
-    }
-}
-#endif
-
-/**
- * xmlSchemaGetCanonValue:
- * @val: the precomputed value
- * @retValue: the returned value
- *
- * Get the canonical lexical representation of the value.
- * The caller has to FREE the returned retValue.
- *
- * WARNING: Some value types are not supported yet, resulting
- * in a @retValue of "???".
- *
- * TODO: XML Schema 1.0 does not define canonical representations
- * for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay,
- * anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.
- *
- *
- * Returns 0 if the value could be built, 1 if the value type is
- * not supported yet and -1 in case of API errors.
- */
-int
-xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
-{
-    if ((retValue == NULL) || (val == NULL))
-	return (-1);
-    *retValue = NULL;
-    switch (val->type) {
-	case XML_SCHEMAS_STRING:
-	    if (val->value.str == NULL)
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "");
-	    else
-		*retValue =
-		    BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
-	    break;
-	case XML_SCHEMAS_NORMSTRING:
-	    if (val->value.str == NULL)
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "");
-	    else {
-		*retValue = xmlSchemaWhiteSpaceReplace(
-		    (const xmlChar *) val->value.str);
-		if ((*retValue) == NULL)
-		    *retValue = BAD_CAST xmlStrdup(
-			(const xmlChar *) val->value.str);
-	    }
-	    break;
-	case XML_SCHEMAS_TOKEN:
-	case XML_SCHEMAS_LANGUAGE:
-	case XML_SCHEMAS_NMTOKEN:
-	case XML_SCHEMAS_NAME:
-	case XML_SCHEMAS_NCNAME:
-	case XML_SCHEMAS_ID:
-	case XML_SCHEMAS_IDREF:
-	case XML_SCHEMAS_ENTITY:
-	case XML_SCHEMAS_NOTATION: /* Unclear */
-	case XML_SCHEMAS_ANYURI:   /* Unclear */
-	    if (val->value.str == NULL)
-		return (-1);
-	    *retValue =
-		BAD_CAST xmlSchemaCollapseString(BAD_CAST val->value.str);
-	    if (*retValue == NULL)
-		*retValue =
-		    BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
-	    break;
-	case XML_SCHEMAS_QNAME:
-	    /* TODO: Unclear in XML Schema 1.0. */
-	    if (val->value.qname.uri == NULL) {
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.qname.name);
-		return (0);
-	    } else {
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "{");
-		*retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
-		    BAD_CAST val->value.qname.uri);
-		*retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
-		    BAD_CAST "}");
-		*retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
-		    BAD_CAST val->value.qname.uri);
-	    }
-	    break;
-	case XML_SCHEMAS_DECIMAL:
-	    /*
-	    * TODO: Lookout for a more simple implementation.
-	    */
-	    if ((val->value.decimal.total == 1) &&
-		(val->value.decimal.lo == 0)) {
-		*retValue = xmlStrdup(BAD_CAST "0.0");
-	    } else {
-		xmlSchemaValDecimal dec = val->value.decimal;
-		int bufsize;
-		char *buf = NULL, *offs;
-
-		/* Add room for the decimal point as well. */
-		bufsize = dec.total + 2;
-		if (dec.sign)
-		    bufsize++;
-		/* Add room for leading/trailing zero. */
-		if ((dec.frac == 0) || (dec.frac == dec.total))
-		    bufsize++;
-		buf = xmlMalloc(bufsize);
-		if (buf == NULL)
-		    return(-1);
-		offs = buf;
-		if (dec.sign)
-		    *offs++ = '-';
-		if (dec.frac == dec.total) {
-		    *offs++ = '0';
-		    *offs++ = '.';
-		}
-		if (dec.hi != 0)
-		    snprintf(offs, bufsize - (offs - buf),
-			"%lu%lu%lu", dec.hi, dec.mi, dec.lo);
-		else if (dec.mi != 0)
-		    snprintf(offs, bufsize - (offs - buf),
-			"%lu%lu", dec.mi, dec.lo);
-		else
-		    snprintf(offs, bufsize - (offs - buf),
-			"%lu", dec.lo);
-
-		if (dec.frac != 0) {
-		    if (dec.frac != dec.total) {
-			int diff = dec.total - dec.frac;
-			/*
-			* Insert the decimal point.
-			*/
-			memmove(offs + diff + 1, offs + diff, dec.frac +1);
-			offs[diff] = '.';
-		    } else {
-			unsigned int i = 0;
-			/*
-			* Insert missing zeroes behind the decimal point.
-			*/
-			while (*(offs + i) != 0)
-			    i++;
-			if (i < dec.total) {
-			    memmove(offs + (dec.total - i), offs, i +1);
-			    memset(offs, '0', dec.total - i);
-			}
-		    }
-		} else {
-		    /*
-		    * Append decimal point and zero.
-		    */
-		    offs = buf + bufsize - 1;
-		    *offs-- = 0;
-		    *offs-- = '0';
-		    *offs-- = '.';
-		}
-		*retValue = BAD_CAST buf;
-	    }
-	    break;
-	case XML_SCHEMAS_INTEGER:
-        case XML_SCHEMAS_PINTEGER:
-        case XML_SCHEMAS_NPINTEGER:
-        case XML_SCHEMAS_NINTEGER:
-        case XML_SCHEMAS_NNINTEGER:
-	case XML_SCHEMAS_LONG:
-        case XML_SCHEMAS_BYTE:
-        case XML_SCHEMAS_SHORT:
-        case XML_SCHEMAS_INT:
-	case XML_SCHEMAS_UINT:
-        case XML_SCHEMAS_ULONG:
-        case XML_SCHEMAS_USHORT:
-        case XML_SCHEMAS_UBYTE:
-	    if ((val->value.decimal.total == 1) &&
-		(val->value.decimal.lo == 0))
-		*retValue = xmlStrdup(BAD_CAST "0");
-	    else {
-		xmlSchemaValDecimal dec = val->value.decimal;
-		int bufsize = dec.total + 1;
-
-		/* Add room for the decimal point as well. */
-		if (dec.sign)
-		    bufsize++;
-		*retValue = xmlMalloc(bufsize);
-		if (*retValue == NULL)
-		    return(-1);
-		if (dec.hi != 0) {
-		    if (dec.sign)
-			snprintf((char *) *retValue, bufsize,
-			    "-%lu%lu%lu", dec.hi, dec.mi, dec.lo);
-		    else
-			snprintf((char *) *retValue, bufsize,
-			    "%lu%lu%lu", dec.hi, dec.mi, dec.lo);
-		} else if (dec.mi != 0) {
-		    if (dec.sign)
-			snprintf((char *) *retValue, bufsize,
-			    "-%lu%lu", dec.mi, dec.lo);
-		    else
-			snprintf((char *) *retValue, bufsize,
-			    "%lu%lu", dec.mi, dec.lo);
-		} else {
-		    if (dec.sign)
-			snprintf((char *) *retValue, bufsize, "-%lu", dec.lo);
-		    else
-			snprintf((char *) *retValue, bufsize, "%lu", dec.lo);
-		}
-	    }
-	    break;
-	case XML_SCHEMAS_BOOLEAN:
-	    if (val->value.b)
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "true");
-	    else
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "false");
-	    break;
-	case XML_SCHEMAS_DURATION: {
-		char buf[100];
-		unsigned long year;
-		unsigned long mon, day, hour = 0, min = 0;
-		double sec = 0, left;
-
-		/* TODO: Unclear in XML Schema 1.0 */
-		/*
-		* TODO: This results in a normalized output of the value
-		* - which is NOT conformant to the spec -
-		* since the exact values of each property are not
-		* recoverable. Think about extending the structure to
-		* provide a field for every property.
-		*/
-		year = (unsigned long) FQUOTIENT(labs(val->value.dur.mon), 12);
-		mon = labs(val->value.dur.mon) - 12 * year;
-
-		day = (unsigned long) FQUOTIENT(fabs(val->value.dur.sec), 86400);
-		left = fabs(val->value.dur.sec) - day * 86400;
-		if (left > 0) {
-		    hour = (unsigned long) FQUOTIENT(left, 3600);
-		    left = left - (hour * 3600);
-		    if (left > 0) {
-			min = (unsigned long) FQUOTIENT(left, 60);
-			sec = left - (min * 60);
-		    }
-		}
-		if ((val->value.dur.mon < 0) || (val->value.dur.sec < 0))
-		    snprintf(buf, 100, "P%luY%luM%luDT%luH%luM%.14gS",
-			year, mon, day, hour, min, sec);
-		else
-		    snprintf(buf, 100, "-P%luY%luM%luDT%luH%luM%.14gS",
-			year, mon, day, hour, min, sec);
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	case XML_SCHEMAS_GYEAR: {
-		char buf[30];
-		/* TODO: Unclear in XML Schema 1.0 */
-		/* TODO: What to do with the timezone? */
-		snprintf(buf, 30, "%04ld", val->value.date.year);
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	case XML_SCHEMAS_GMONTH: {
-		/* TODO: Unclear in XML Schema 1.0 */
-		/* TODO: What to do with the timezone? */
-		*retValue = xmlMalloc(6);
-		if (*retValue == NULL)
-		    return(-1);
-		snprintf((char *) *retValue, 6, "--%02u",
-		    val->value.date.mon);
-	    }
-	    break;
-        case XML_SCHEMAS_GDAY: {
-		/* TODO: Unclear in XML Schema 1.0 */
-		/* TODO: What to do with the timezone? */
-		*retValue = xmlMalloc(6);
-		if (*retValue == NULL)
-		    return(-1);
-		snprintf((char *) *retValue, 6, "---%02u",
-		    val->value.date.day);
-	    }
-	    break;
-        case XML_SCHEMAS_GMONTHDAY: {
-		/* TODO: Unclear in XML Schema 1.0 */
-		/* TODO: What to do with the timezone? */
-		*retValue = xmlMalloc(8);
-		if (*retValue == NULL)
-		    return(-1);
-		snprintf((char *) *retValue, 8, "--%02u-%02u",
-		    val->value.date.mon, val->value.date.day);
-	    }
-	    break;
-        case XML_SCHEMAS_GYEARMONTH: {
-		char buf[35];
-		/* TODO: Unclear in XML Schema 1.0 */
-		/* TODO: What to do with the timezone? */
-		if (val->value.date.year < 0)
-		    snprintf(buf, 35, "-%04ld-%02u",
-			labs(val->value.date.year),
-			val->value.date.mon);
-		else
-		    snprintf(buf, 35, "%04ld-%02u",
-			val->value.date.year, val->value.date.mon);
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	case XML_SCHEMAS_TIME:
-	    {
-		char buf[30];
-
-		if (val->value.date.tz_flag) {
-		    xmlSchemaValPtr norm;
-
-		    norm = xmlSchemaDateNormalize(val, 0);
-		    if (norm == NULL)
-			return (-1);
-		    /*
-		    * TODO: Check if "%.14g" is portable.
-		    */
-		    snprintf(buf, 30,
-			"%02u:%02u:%02.14gZ",
-			norm->value.date.hour,
-			norm->value.date.min,
-			norm->value.date.sec);
-		    xmlSchemaFreeValue(norm);
-		} else {
-		    snprintf(buf, 30,
-			"%02u:%02u:%02.14g",
-			val->value.date.hour,
-			val->value.date.min,
-			val->value.date.sec);
-		}
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-        case XML_SCHEMAS_DATE:
-	    {
-		char buf[30];
-
-		if (val->value.date.tz_flag) {
-		    xmlSchemaValPtr norm;
-
-		    norm = xmlSchemaDateNormalize(val, 0);
-		    if (norm == NULL)
-			return (-1);
-		    /*
-		    * TODO: Append the canonical value of the
-		    * recoverable timezone and not "Z".
-		    */
-		    snprintf(buf, 30,
-			"%04ld:%02u:%02uZ",
-			norm->value.date.year, norm->value.date.mon,
-			norm->value.date.day);
-		    xmlSchemaFreeValue(norm);
-		} else {
-		    snprintf(buf, 30,
-			"%04ld:%02u:%02u",
-			val->value.date.year, val->value.date.mon,
-			val->value.date.day);
-		}
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-        case XML_SCHEMAS_DATETIME:
-	    {
-		char buf[50];
-
-		if (val->value.date.tz_flag) {
-		    xmlSchemaValPtr norm;
-
-		    norm = xmlSchemaDateNormalize(val, 0);
-		    if (norm == NULL)
-			return (-1);
-		    /*
-		    * TODO: Check if "%.14g" is portable.
-		    */
-		    snprintf(buf, 50,
-			"%04ld:%02u:%02uT%02u:%02u:%02.14gZ",
-			norm->value.date.year, norm->value.date.mon,
-			norm->value.date.day, norm->value.date.hour,
-			norm->value.date.min, norm->value.date.sec);
-		    xmlSchemaFreeValue(norm);
-		} else {
-		    snprintf(buf, 50,
-			"%04ld:%02u:%02uT%02u:%02u:%02.14g",
-			val->value.date.year, val->value.date.mon,
-			val->value.date.day, val->value.date.hour,
-			val->value.date.min, val->value.date.sec);
-		}
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	case XML_SCHEMAS_HEXBINARY:
-	    *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.hex.str);
-	    break;
-	case XML_SCHEMAS_BASE64BINARY:
-	    /*
-	    * TODO: Is the following spec piece implemented?:
-	    * SPEC: "Note: For some values the canonical form defined
-	    * above does not conform to [RFC 2045], which requires breaking
-	    * with linefeeds at appropriate intervals."
-	    */
-	    *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.base64.str);
-	    break;
-	case XML_SCHEMAS_FLOAT: {
-		char buf[30];
-		/*
-		* |m| < 16777216, -149 <= e <= 104.
-		* TODO: Handle, NaN, INF, -INF. The format is not
-		* yet conformant. The c type float does not cover
-		* the whole range.
-		*/
-		snprintf(buf, 30, "%01.14e", val->value.f);
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	case XML_SCHEMAS_DOUBLE: {
-		char buf[40];
-		/* |m| < 9007199254740992, -1075 <= e <= 970 */
-		/*
-		* TODO: Handle, NaN, INF, -INF. The format is not
-		* yet conformant. The c type float does not cover
-		* the whole range.
-		*/
-		snprintf(buf, 40, "%01.14e", val->value.d);
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-	    }
-	    break;
-	default:
-	    *retValue = BAD_CAST xmlStrdup(BAD_CAST "???");
-	    return (1);
-    }
-    if (*retValue == NULL)
-	return(-1);
-    return (0);
-}
-
-/**
- * xmlSchemaGetCanonValueWhtsp:
- * @val: the precomputed value
- * @retValue: the returned value
- * @ws: the whitespace type of the value
- *
- * Get the canonical representation of the value.
- * The caller has to free the returned @retValue.
- *
- * Returns 0 if the value could be built, 1 if the value type is
- * not supported yet and -1 in case of API errors.
- */
-int
-xmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr val,
-			    const xmlChar **retValue,
-			    xmlSchemaWhitespaceValueType ws)
-{
-    if ((retValue == NULL) || (val == NULL))
-	return (-1);
-    if ((ws == XML_SCHEMA_WHITESPACE_UNKNOWN) ||
-	(ws > XML_SCHEMA_WHITESPACE_COLLAPSE))
-	return (-1);
-
-    *retValue = NULL;
-    switch (val->type) {
-	case XML_SCHEMAS_STRING:
-	    if (val->value.str == NULL)
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "");
-	    else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-		*retValue = xmlSchemaCollapseString(val->value.str);
-	    else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
-		*retValue = xmlSchemaWhiteSpaceReplace(val->value.str);
-	    if ((*retValue) == NULL)
-		*retValue = BAD_CAST xmlStrdup(val->value.str);
-	    break;
-	case XML_SCHEMAS_NORMSTRING:
-	    if (val->value.str == NULL)
-		*retValue = BAD_CAST xmlStrdup(BAD_CAST "");
-	    else {
-		if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
-		    *retValue = xmlSchemaCollapseString(val->value.str);
-		else
-		    *retValue = xmlSchemaWhiteSpaceReplace(val->value.str);
-		if ((*retValue) == NULL)
-		    *retValue = BAD_CAST xmlStrdup(val->value.str);
-	    }
-	    break;
-	default:
-	    return (xmlSchemaGetCanonValue(val, retValue));
-    }
-    return (0);
-}
-
-/**
- * xmlSchemaGetValType:
- * @val: a schemas value
- *
- * Accessor for the type of a value
- *
- * Returns the xmlSchemaValType of the value
- */
-xmlSchemaValType
-xmlSchemaGetValType(xmlSchemaValPtr val)
-{
-    if (val == NULL)
-        return(XML_SCHEMAS_UNKNOWN);
-    return (val->type);
-}
-
-#define bottom_xmlschemastypes
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/src/third_party/libxml/src/xpath.c b/src/third_party/libxml/src/xpath.c
index 79ea535..38f4bd1 100644
--- a/src/third_party/libxml/src/xpath.c
+++ b/src/third_party/libxml/src/xpath.c
@@ -4368,7 +4368,7 @@
     }
     memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
     ret->type = XPATH_XSLT_TREE;
-    ret->boolval = 1;
+    ret->boolval = 0;
     ret->user = (void *) val;
     ret->nodesetval = xmlXPathNodeSetCreate(val);
 #ifdef XP_DEBUG_OBJ_USAGE
diff --git a/src/third_party/libxml/src/xpointer.c b/src/third_party/libxml/src/xpointer.c
deleted file mode 100644
index e643ee9..0000000
--- a/src/third_party/libxml/src/xpointer.c
+++ /dev/null
@@ -1,2932 +0,0 @@
-/*
- * xpointer.c : Code to handle XML Pointer
- *
- * Base implementation was made accordingly to
- * W3C Candidate Recommendation 7 June 2000
- * http://www.w3.org/TR/2000/CR-xptr-20000607
- *
- * Added support for the element() scheme described in:
- * W3C Proposed Recommendation 13 November 2002
- * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-/*
- * TODO: better handling of error cases, the full expression should
- *       be parsed beforehand instead of a progressive evaluation
- * TODO: Access into entities references are not supported now ...
- *       need a start to be able to pop out of entities refs since
- *       parent is the endity declaration, not the ref.
- */
-
-#include <string.h>
-#include <libxml/xpointer.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parserInternals.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_XPTR_ENABLED
-
-/* Add support of the xmlns() xpointer scheme to initialize the namespaces */
-#define XPTR_XMLNS_SCHEME
-
-/* #define DEBUG_RANGES */
-#ifdef DEBUG_RANGES
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-#endif
-
-#define TODO								\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Unimplemented block at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-#define STRANGE							\
-    xmlGenericError(xmlGenericErrorContext,				\
-	    "Internal error at %s:%d\n",				\
-            __FILE__, __LINE__);
-
-/************************************************************************
- *									*
- *		Some factorized error routines				*
- *									*
- ************************************************************************/
-
-/**
- * xmlXPtrErrMemory:
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlXPtrErrMemory(const char *extra)
-{
-    __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_XPOINTER,
-		    XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
-		    NULL, NULL, 0, 0,
-		    "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlXPtrErr:
- * @ctxt:  an XPTR evaluation context
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlXPtrErr(xmlXPathParserContextPtr ctxt, int error,
-           const char * msg, const xmlChar *extra)
-{
-    if (ctxt != NULL)
-        ctxt->error = error;
-    if ((ctxt == NULL) || (ctxt->context == NULL)) {
-	__xmlRaiseError(NULL, NULL, NULL,
-			NULL, NULL, XML_FROM_XPOINTER, error,
-			XML_ERR_ERROR, NULL, 0,
-			(const char *) extra, NULL, NULL, 0, 0,
-			msg, extra);
-	return;
-    }
-    ctxt->context->lastError.domain = XML_FROM_XPOINTER;
-    ctxt->context->lastError.code = error;
-    ctxt->context->lastError.level = XML_ERR_ERROR;
-    ctxt->context->lastError.str1 = (char *) xmlStrdup(ctxt->base);
-    ctxt->context->lastError.int1 = ctxt->cur - ctxt->base;
-    ctxt->context->lastError.node = ctxt->context->debugNode;
-    if (ctxt->context->error != NULL) {
-	ctxt->context->error(ctxt->context->userData,
-	                     &ctxt->context->lastError);
-    } else {
-	__xmlRaiseError(NULL, NULL, NULL,
-			NULL, ctxt->context->debugNode, XML_FROM_XPOINTER,
-			error, XML_ERR_ERROR, NULL, 0,
-			(const char *) extra, (const char *) ctxt->base, NULL,
-			ctxt->cur - ctxt->base, 0,
-			msg, extra);
-    }
-}
-
-/************************************************************************
- *									*
- *		A few helper functions for child sequences		*
- *									*
- ************************************************************************/
-/* xmlXPtrAdvanceNode is a private function, but used by xinclude.c */
-xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level);
-/**
- * xmlXPtrGetArity:
- * @cur:  the node
- *
- * Returns the number of child for an element, -1 in case of error
- */
-static int
-xmlXPtrGetArity(xmlNodePtr cur) {
-    int i;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(-1);
-    cur = cur->children;
-    for (i = 0;cur != NULL;cur = cur->next) {
-	if ((cur->type == XML_ELEMENT_NODE) ||
-	    (cur->type == XML_DOCUMENT_NODE) ||
-	    (cur->type == XML_HTML_DOCUMENT_NODE)) {
-	    i++;
-	}
-    }
-    return(i);
-}
-
-/**
- * xmlXPtrGetIndex:
- * @cur:  the node
- *
- * Returns the index of the node in its parent children list, -1
- *         in case of error
- */
-static int
-xmlXPtrGetIndex(xmlNodePtr cur) {
-    int i;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(-1);
-    for (i = 1;cur != NULL;cur = cur->prev) {
-	if ((cur->type == XML_ELEMENT_NODE) ||
-	    (cur->type == XML_DOCUMENT_NODE) ||
-	    (cur->type == XML_HTML_DOCUMENT_NODE)) {
-	    i++;
-	}
-    }
-    return(i);
-}
-
-/**
- * xmlXPtrGetNthChild:
- * @cur:  the node
- * @no:  the child number
- *
- * Returns the @no'th element child of @cur or NULL
- */
-static xmlNodePtr
-xmlXPtrGetNthChild(xmlNodePtr cur, int no) {
-    int i;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(cur);
-    cur = cur->children;
-    for (i = 0;i <= no;cur = cur->next) {
-	if (cur == NULL)
-	    return(cur);
-	if ((cur->type == XML_ELEMENT_NODE) ||
-	    (cur->type == XML_DOCUMENT_NODE) ||
-	    (cur->type == XML_HTML_DOCUMENT_NODE)) {
-	    i++;
-	    if (i == no)
-		break;
-	}
-    }
-    return(cur);
-}
-
-/************************************************************************
- *									*
- *		Handling of XPointer specific types			*
- *									*
- ************************************************************************/
-
-/**
- * xmlXPtrCmpPoints:
- * @node1:  the first node
- * @index1:  the first index
- * @node2:  the second node
- * @index2:  the second index
- *
- * Compare two points w.r.t document order
- *
- * Returns -2 in case of error 1 if first point < second point, 0 if
- *         that's the same point, -1 otherwise
- */
-static int
-xmlXPtrCmpPoints(xmlNodePtr node1, int index1, xmlNodePtr node2, int index2) {
-    if ((node1 == NULL) || (node2 == NULL))
-	return(-2);
-    /*
-     * a couple of optimizations which will avoid computations in most cases
-     */
-    if (node1 == node2) {
-	if (index1 < index2)
-	    return(1);
-	if (index1 > index2)
-	    return(-1);
-	return(0);
-    }
-    return(xmlXPathCmpNodes(node1, node2));
-}
-
-/**
- * xmlXPtrNewPoint:
- * @node:  the xmlNodePtr
- * @indx:  the indx within the node
- *
- * Create a new xmlXPathObjectPtr of type point
- *
- * Returns the newly created object.
- */
-static xmlXPathObjectPtr
-xmlXPtrNewPoint(xmlNodePtr node, int indx) {
-    xmlXPathObjectPtr ret;
-
-    if (node == NULL)
-	return(NULL);
-    if (indx < 0)
-	return(NULL);
-
-    ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating point");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
-    ret->type = XPATH_POINT;
-    ret->user = (void *) node;
-    ret->index = indx;
-    return(ret);
-}
-
-/**
- * xmlXPtrRangeCheckOrder:
- * @range:  an object range
- *
- * Make sure the points in the range are in the right order
- */
-static void
-xmlXPtrRangeCheckOrder(xmlXPathObjectPtr range) {
-    int tmp;
-    xmlNodePtr tmp2;
-    if (range == NULL)
-	return;
-    if (range->type != XPATH_RANGE)
-	return;
-    if (range->user2 == NULL)
-	return;
-    tmp = xmlXPtrCmpPoints(range->user, range->index,
-	                     range->user2, range->index2);
-    if (tmp == -1) {
-	tmp2 = range->user;
-	range->user = range->user2;
-	range->user2 = tmp2;
-	tmp = range->index;
-	range->index = range->index2;
-	range->index2 = tmp;
-    }
-}
-
-/**
- * xmlXPtrRangesEqual:
- * @range1:  the first range
- * @range2:  the second range
- *
- * Compare two ranges
- *
- * Returns 1 if equal, 0 otherwise
- */
-static int
-xmlXPtrRangesEqual(xmlXPathObjectPtr range1, xmlXPathObjectPtr range2) {
-    if (range1 == range2)
-	return(1);
-    if ((range1 == NULL) || (range2 == NULL))
-	return(0);
-    if (range1->type != range2->type)
-	return(0);
-    if (range1->type != XPATH_RANGE)
-	return(0);
-    if (range1->user != range2->user)
-	return(0);
-    if (range1->index != range2->index)
-	return(0);
-    if (range1->user2 != range2->user2)
-	return(0);
-    if (range1->index2 != range2->index2)
-	return(0);
-    return(1);
-}
-
-/**
- * xmlXPtrNewRangeInternal:
- * @start:  the starting node
- * @startindex:  the start index
- * @end:  the ending point
- * @endindex:  the ending index
- *
- * Internal function to create a new xmlXPathObjectPtr of type range
- *
- * Returns the newly created object.
- */
-static xmlXPathObjectPtr
-xmlXPtrNewRangeInternal(xmlNodePtr start, int startindex,
-                        xmlNodePtr end, int endindex) {
-    xmlXPathObjectPtr ret;
-
-    /*
-     * Namespace nodes must be copied (see xmlXPathNodeSetDupNs).
-     * Disallow them for now.
-     */
-    if ((start != NULL) && (start->type == XML_NAMESPACE_DECL))
-	return(NULL);
-    if ((end != NULL) && (end->type == XML_NAMESPACE_DECL))
-	return(NULL);
-
-    ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating range");
-	return(NULL);
-    }
-    memset(ret, 0, sizeof(xmlXPathObject));
-    ret->type = XPATH_RANGE;
-    ret->user = start;
-    ret->index = startindex;
-    ret->user2 = end;
-    ret->index2 = endindex;
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRange:
- * @start:  the starting node
- * @startindex:  the start index
- * @end:  the ending point
- * @endindex:  the ending index
- *
- * Create a new xmlXPathObjectPtr of type range
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRange(xmlNodePtr start, int startindex,
-	        xmlNodePtr end, int endindex) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-    if (startindex < 0)
-	return(NULL);
-    if (endindex < 0)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start, startindex, end, endindex);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRangePoints:
- * @start:  the starting point
- * @end:  the ending point
- *
- * Create a new xmlXPathObjectPtr of type range using 2 Points
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangePoints(xmlXPathObjectPtr start, xmlXPathObjectPtr end) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-    if (start->type != XPATH_POINT)
-	return(NULL);
-    if (end->type != XPATH_POINT)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start->user, start->index, end->user,
-                                  end->index);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRangePointNode:
- * @start:  the starting point
- * @end:  the ending node
- *
- * Create a new xmlXPathObjectPtr of type range from a point to a node
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangePointNode(xmlXPathObjectPtr start, xmlNodePtr end) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-    if (start->type != XPATH_POINT)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start->user, start->index, end, -1);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodePoint:
- * @start:  the starting node
- * @end:  the ending point
- *
- * Create a new xmlXPathObjectPtr of type range from a node to a point
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodePoint(xmlNodePtr start, xmlXPathObjectPtr end) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-    if (start->type != XPATH_POINT)
-	return(NULL);
-    if (end->type != XPATH_POINT)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start, -1, end->user, end->index);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodes:
- * @start:  the starting node
- * @end:  the ending node
- *
- * Create a new xmlXPathObjectPtr of type range using 2 nodes
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodes(xmlNodePtr start, xmlNodePtr end) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start, -1, end, -1);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewCollapsedRange:
- * @start:  the starting and ending node
- *
- * Create a new xmlXPathObjectPtr of type range using a single nodes
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewCollapsedRange(xmlNodePtr start) {
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-
-    ret = xmlXPtrNewRangeInternal(start, -1, NULL, -1);
-    return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodeObject:
- * @start:  the starting node
- * @end:  the ending object
- *
- * Create a new xmlXPathObjectPtr of type range from a not to an object
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathObjectPtr end) {
-    xmlNodePtr endNode;
-    int endIndex;
-    xmlXPathObjectPtr ret;
-
-    if (start == NULL)
-	return(NULL);
-    if (end == NULL)
-	return(NULL);
-    switch (end->type) {
-	case XPATH_POINT:
-	    endNode = end->user;
-	    endIndex = end->index;
-	    break;
-	case XPATH_RANGE:
-	    endNode = end->user2;
-	    endIndex = end->index2;
-	    break;
-	case XPATH_NODESET:
-	    /*
-	     * Empty set ...
-	     */
-	    if ((end->nodesetval == NULL) || (end->nodesetval->nodeNr <= 0))
-		return(NULL);
-	    endNode = end->nodesetval->nodeTab[end->nodesetval->nodeNr - 1];
-	    endIndex = -1;
-	    break;
-	default:
-	    /* TODO */
-	    return(NULL);
-    }
-
-    ret = xmlXPtrNewRangeInternal(start, -1, endNode, endIndex);
-    xmlXPtrRangeCheckOrder(ret);
-    return(ret);
-}
-
-#define XML_RANGESET_DEFAULT	10
-
-/**
- * xmlXPtrLocationSetCreate:
- * @val:  an initial xmlXPathObjectPtr, or NULL
- *
- * Create a new xmlLocationSetPtr of type double and of value @val
- *
- * Returns the newly created object.
- */
-xmlLocationSetPtr
-xmlXPtrLocationSetCreate(xmlXPathObjectPtr val) {
-    xmlLocationSetPtr ret;
-
-    ret = (xmlLocationSetPtr) xmlMalloc(sizeof(xmlLocationSet));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating locationset");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlLocationSet));
-    if (val != NULL) {
-        ret->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
-					     sizeof(xmlXPathObjectPtr));
-	if (ret->locTab == NULL) {
-	    xmlXPtrErrMemory("allocating locationset");
-	    xmlFree(ret);
-	    return(NULL);
-	}
-	memset(ret->locTab, 0 ,
-	       XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
-        ret->locMax = XML_RANGESET_DEFAULT;
-	ret->locTab[ret->locNr++] = val;
-    }
-    return(ret);
-}
-
-/**
- * xmlXPtrLocationSetAdd:
- * @cur:  the initial range set
- * @val:  a new xmlXPathObjectPtr
- *
- * add a new xmlXPathObjectPtr to an existing LocationSet
- * If the location already exist in the set @val is freed.
- */
-void
-xmlXPtrLocationSetAdd(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
-    int i;
-
-    if ((cur == NULL) || (val == NULL)) return;
-
-    /*
-     * check against doublons
-     */
-    for (i = 0;i < cur->locNr;i++) {
-	if (xmlXPtrRangesEqual(cur->locTab[i], val)) {
-	    xmlXPathFreeObject(val);
-	    return;
-	}
-    }
-
-    /*
-     * grow the locTab if needed
-     */
-    if (cur->locMax == 0) {
-        cur->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
-					     sizeof(xmlXPathObjectPtr));
-	if (cur->locTab == NULL) {
-	    xmlXPtrErrMemory("adding location to set");
-	    return;
-	}
-	memset(cur->locTab, 0 ,
-	       XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
-        cur->locMax = XML_RANGESET_DEFAULT;
-    } else if (cur->locNr == cur->locMax) {
-        xmlXPathObjectPtr *temp;
-
-        cur->locMax *= 2;
-	temp = (xmlXPathObjectPtr *) xmlRealloc(cur->locTab, cur->locMax *
-				      sizeof(xmlXPathObjectPtr));
-	if (temp == NULL) {
-	    xmlXPtrErrMemory("adding location to set");
-	    return;
-	}
-	cur->locTab = temp;
-    }
-    cur->locTab[cur->locNr++] = val;
-}
-
-/**
- * xmlXPtrLocationSetMerge:
- * @val1:  the first LocationSet
- * @val2:  the second LocationSet
- *
- * Merges two rangesets, all ranges from @val2 are added to @val1
- *
- * Returns val1 once extended or NULL in case of error.
- */
-xmlLocationSetPtr
-xmlXPtrLocationSetMerge(xmlLocationSetPtr val1, xmlLocationSetPtr val2) {
-    int i;
-
-    if (val1 == NULL) return(NULL);
-    if (val2 == NULL) return(val1);
-
-    /*
-     * !!!!! this can be optimized a lot, knowing that both
-     *       val1 and val2 already have unicity of their values.
-     */
-
-    for (i = 0;i < val2->locNr;i++)
-        xmlXPtrLocationSetAdd(val1, val2->locTab[i]);
-
-    return(val1);
-}
-
-/**
- * xmlXPtrLocationSetDel:
- * @cur:  the initial range set
- * @val:  an xmlXPathObjectPtr
- *
- * Removes an xmlXPathObjectPtr from an existing LocationSet
- */
-void
-xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
-    int i;
-
-    if (cur == NULL) return;
-    if (val == NULL) return;
-
-    /*
-     * check against doublons
-     */
-    for (i = 0;i < cur->locNr;i++)
-        if (cur->locTab[i] == val) break;
-
-    if (i >= cur->locNr) {
-#ifdef DEBUG
-        xmlGenericError(xmlGenericErrorContext,
-	        "xmlXPtrLocationSetDel: Range wasn't found in RangeList\n");
-#endif
-        return;
-    }
-    cur->locNr--;
-    for (;i < cur->locNr;i++)
-        cur->locTab[i] = cur->locTab[i + 1];
-    cur->locTab[cur->locNr] = NULL;
-}
-
-/**
- * xmlXPtrLocationSetRemove:
- * @cur:  the initial range set
- * @val:  the index to remove
- *
- * Removes an entry from an existing LocationSet list.
- */
-void
-xmlXPtrLocationSetRemove(xmlLocationSetPtr cur, int val) {
-    if (cur == NULL) return;
-    if (val >= cur->locNr) return;
-    cur->locNr--;
-    for (;val < cur->locNr;val++)
-        cur->locTab[val] = cur->locTab[val + 1];
-    cur->locTab[cur->locNr] = NULL;
-}
-
-/**
- * xmlXPtrFreeLocationSet:
- * @obj:  the xmlLocationSetPtr to free
- *
- * Free the LocationSet compound (not the actual ranges !).
- */
-void
-xmlXPtrFreeLocationSet(xmlLocationSetPtr obj) {
-    int i;
-
-    if (obj == NULL) return;
-    if (obj->locTab != NULL) {
-	for (i = 0;i < obj->locNr; i++) {
-            xmlXPathFreeObject(obj->locTab[i]);
-	}
-	xmlFree(obj->locTab);
-    }
-    xmlFree(obj);
-}
-
-/**
- * xmlXPtrNewLocationSetNodes:
- * @start:  the start NodePtr value
- * @end:  the end NodePtr value or NULL
- *
- * Create a new xmlXPathObjectPtr of type LocationSet and initialize
- * it with the single range made of the two nodes @start and @end
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewLocationSetNodes(xmlNodePtr start, xmlNodePtr end) {
-    xmlXPathObjectPtr ret;
-
-    ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating locationset");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
-    ret->type = XPATH_LOCATIONSET;
-    if (end == NULL)
-	ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewCollapsedRange(start));
-    else
-	ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewRangeNodes(start,end));
-    return(ret);
-}
-
-/**
- * xmlXPtrNewLocationSetNodeSet:
- * @set:  a node set
- *
- * Create a new xmlXPathObjectPtr of type LocationSet and initialize
- * it with all the nodes from @set
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set) {
-    xmlXPathObjectPtr ret;
-
-    ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating locationset");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
-    ret->type = XPATH_LOCATIONSET;
-    if (set != NULL) {
-	int i;
-	xmlLocationSetPtr newset;
-
-	newset = xmlXPtrLocationSetCreate(NULL);
-	if (newset == NULL)
-	    return(ret);
-
-	for (i = 0;i < set->nodeNr;i++)
-	    xmlXPtrLocationSetAdd(newset,
-		        xmlXPtrNewCollapsedRange(set->nodeTab[i]));
-
-	ret->user = (void *) newset;
-    }
-    return(ret);
-}
-
-/**
- * xmlXPtrWrapLocationSet:
- * @val:  the LocationSet value
- *
- * Wrap the LocationSet @val in a new xmlXPathObjectPtr
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrWrapLocationSet(xmlLocationSetPtr val) {
-    xmlXPathObjectPtr ret;
-
-    ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
-    if (ret == NULL) {
-        xmlXPtrErrMemory("allocating locationset");
-	return(NULL);
-    }
-    memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
-    ret->type = XPATH_LOCATIONSET;
-    ret->user = (void *) val;
-    return(ret);
-}
-
-/************************************************************************
- *									*
- *			The parser					*
- *									*
- ************************************************************************/
-
-static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
-
-/*
- * Macros for accessing the content. Those should be used only by the parser,
- * and not exported.
- *
- * Dirty macros, i.e. one need to make assumption on the context to use them
- *
- *   CUR_PTR return the current pointer to the xmlChar to be parsed.
- *   CUR     returns the current xmlChar value, i.e. a 8 bit value
- *           in ISO-Latin or UTF-8.
- *           This should be used internally by the parser
- *           only to compare to ASCII values otherwise it would break when
- *           running with UTF-8 encoding.
- *   NXT(n)  returns the n'th next xmlChar. Same as CUR is should be used only
- *           to compare on ASCII based substring.
- *   SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
- *           strings within the parser.
- *   CURRENT Returns the current char value, with the full decoding of
- *           UTF-8 if we are using this mode. It returns an int.
- *   NEXT    Skip to the next character, this does the proper decoding
- *           in UTF-8 mode. It also pop-up unfinished entities on the fly.
- *           It returns the pointer to the current xmlChar.
- */
-
-#define CUR (*ctxt->cur)
-#define SKIP(val) ctxt->cur += (val)
-#define NXT(val) ctxt->cur[(val)]
-#define CUR_PTR ctxt->cur
-
-#define SKIP_BLANKS							\
-    while (IS_BLANK_CH(*(ctxt->cur))) NEXT
-
-#define CURRENT (*ctxt->cur)
-#define NEXT ((*ctxt->cur) ?  ctxt->cur++: ctxt->cur)
-
-/*
- * xmlXPtrGetChildNo:
- * @ctxt:  the XPointer Parser context
- * @index:  the child number
- *
- * Move the current node of the nodeset on the stack to the
- * given child if found
- */
-static void
-xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
-    xmlNodePtr cur = NULL;
-    xmlXPathObjectPtr obj;
-    xmlNodeSetPtr oldset;
-
-    CHECK_TYPE(XPATH_NODESET);
-    obj = valuePop(ctxt);
-    oldset = obj->nodesetval;
-    if ((indx <= 0) || (oldset == NULL) || (oldset->nodeNr != 1)) {
-	xmlXPathFreeObject(obj);
-	valuePush(ctxt, xmlXPathNewNodeSet(NULL));
-	return;
-    }
-    cur = xmlXPtrGetNthChild(oldset->nodeTab[0], indx);
-    if (cur == NULL) {
-	xmlXPathFreeObject(obj);
-	valuePush(ctxt, xmlXPathNewNodeSet(NULL));
-	return;
-    }
-    oldset->nodeTab[0] = cur;
-    valuePush(ctxt, obj);
-}
-
-/**
- * xmlXPtrEvalXPtrPart:
- * @ctxt:  the XPointer Parser context
- * @name:  the preparsed Scheme for the XPtrPart
- *
- * XPtrPart ::= 'xpointer' '(' XPtrExpr ')'
- *            | Scheme '(' SchemeSpecificExpr ')'
- *
- * Scheme   ::=  NCName - 'xpointer' [VC: Non-XPointer schemes]
- *
- * SchemeSpecificExpr ::= StringWithBalancedParens
- *
- * StringWithBalancedParens ::=
- *              [^()]* ('(' StringWithBalancedParens ')' [^()]*)*
- *              [VC: Parenthesis escaping]
- *
- * XPtrExpr ::= Expr [VC: Parenthesis escaping]
- *
- * VC: Parenthesis escaping:
- *   The end of an XPointer part is signaled by the right parenthesis ")"
- *   character that is balanced with the left parenthesis "(" character
- *   that began the part. Any unbalanced parenthesis character inside the
- *   expression, even within literals, must be escaped with a circumflex (^)
- *   character preceding it. If the expression contains any literal
- *   occurrences of the circumflex, each must be escaped with an additional
- *   circumflex (that is, ^^). If the unescaped parentheses in the expression
- *   are not balanced, a syntax error results.
- *
- * Parse and evaluate an XPtrPart. Basically it generates the unescaped
- * string and if the scheme is 'xpointer' it will call the XPath interpreter.
- *
- * TODO: there is no new scheme registration mechanism
- */
-
-static void
-xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
-    xmlChar *buffer, *cur;
-    int len;
-    int level;
-
-    if (name == NULL)
-    name = xmlXPathParseName(ctxt);
-    if (name == NULL)
-	XP_ERROR(XPATH_EXPR_ERROR);
-
-    if (CUR != '(')
-	XP_ERROR(XPATH_EXPR_ERROR);
-    NEXT;
-    level = 1;
-
-    len = xmlStrlen(ctxt->cur);
-    len++;
-    buffer = (xmlChar *) xmlMallocAtomic(len * sizeof (xmlChar));
-    if (buffer == NULL) {
-        xmlXPtrErrMemory("allocating buffer");
-	return;
-    }
-
-    cur = buffer;
-    while (CUR != 0) {
-	if (CUR == ')') {
-	    level--;
-	    if (level == 0) {
-		NEXT;
-		break;
-	    }
-	} else if (CUR == '(') {
-	    level++;
-	} else if (CUR == '^') {
-            if ((NXT(1) == ')') || (NXT(1) == '(') || (NXT(1) == '^')) {
-                NEXT;
-            }
-	}
-        *cur++ = CUR;
-	NEXT;
-    }
-    *cur = 0;
-
-    if ((level != 0) && (CUR == 0)) {
-	xmlFree(buffer);
-	XP_ERROR(XPTR_SYNTAX_ERROR);
-    }
-
-    if (xmlStrEqual(name, (xmlChar *) "xpointer")) {
-	const xmlChar *left = CUR_PTR;
-
-	CUR_PTR = buffer;
-	/*
-	 * To evaluate an xpointer scheme element (4.3) we need:
-	 *   context initialized to the root
-	 *   context position initalized to 1
-	 *   context size initialized to 1
-	 */
-	ctxt->context->node = (xmlNodePtr)ctxt->context->doc;
-	ctxt->context->proximityPosition = 1;
-	ctxt->context->contextSize = 1;
-	xmlXPathEvalExpr(ctxt);
-	CUR_PTR=left;
-    } else if (xmlStrEqual(name, (xmlChar *) "element")) {
-	const xmlChar *left = CUR_PTR;
-	xmlChar *name2;
-
-	CUR_PTR = buffer;
-	if (buffer[0] == '/') {
-	    xmlXPathRoot(ctxt);
-	    xmlXPtrEvalChildSeq(ctxt, NULL);
-	} else {
-	    name2 = xmlXPathParseName(ctxt);
-	    if (name2 == NULL) {
-		CUR_PTR = left;
-		xmlFree(buffer);
-		XP_ERROR(XPATH_EXPR_ERROR);
-	    }
-	    xmlXPtrEvalChildSeq(ctxt, name2);
-	}
-	CUR_PTR = left;
-#ifdef XPTR_XMLNS_SCHEME
-    } else if (xmlStrEqual(name, (xmlChar *) "xmlns")) {
-	const xmlChar *left = CUR_PTR;
-	xmlChar *prefix;
-	xmlChar *URI;
-	xmlURIPtr value;
-
-	CUR_PTR = buffer;
-        prefix = xmlXPathParseNCName(ctxt);
-	if (prefix == NULL) {
-	    xmlFree(buffer);
-	    xmlFree(name);
-	    XP_ERROR(XPTR_SYNTAX_ERROR);
-	}
-	SKIP_BLANKS;
-	if (CUR != '=') {
-	    xmlFree(prefix);
-	    xmlFree(buffer);
-	    xmlFree(name);
-	    XP_ERROR(XPTR_SYNTAX_ERROR);
-	}
-	NEXT;
-	SKIP_BLANKS;
-	/* @@ check escaping in the XPointer WD */
-
-	value = xmlParseURI((const char *)ctxt->cur);
-	if (value == NULL) {
-	    xmlFree(prefix);
-	    xmlFree(buffer);
-	    xmlFree(name);
-	    XP_ERROR(XPTR_SYNTAX_ERROR);
-	}
-	URI = xmlSaveUri(value);
-	xmlFreeURI(value);
-	if (URI == NULL) {
-	    xmlFree(prefix);
-	    xmlFree(buffer);
-	    xmlFree(name);
-	    XP_ERROR(XPATH_MEMORY_ERROR);
-	}
-
-	xmlXPathRegisterNs(ctxt->context, prefix, URI);
-	CUR_PTR = left;
-	xmlFree(URI);
-	xmlFree(prefix);
-#endif /* XPTR_XMLNS_SCHEME */
-    } else {
-        xmlXPtrErr(ctxt, XML_XPTR_UNKNOWN_SCHEME,
-		   "unsupported scheme '%s'\n", name);
-    }
-    xmlFree(buffer);
-    xmlFree(name);
-}
-
-/**
- * xmlXPtrEvalFullXPtr:
- * @ctxt:  the XPointer Parser context
- * @name:  the preparsed Scheme for the first XPtrPart
- *
- * FullXPtr ::= XPtrPart (S? XPtrPart)*
- *
- * As the specs says:
- * -----------
- * When multiple XPtrParts are provided, they must be evaluated in
- * left-to-right order. If evaluation of one part fails, the nexti
- * is evaluated. The following conditions cause XPointer part failure:
- *
- * - An unknown scheme
- * - A scheme that does not locate any sub-resource present in the resource
- * - A scheme that is not applicable to the media type of the resource
- *
- * The XPointer application must consume a failed XPointer part and
- * attempt to evaluate the next one, if any. The result of the first
- * XPointer part whose evaluation succeeds is taken to be the fragment
- * located by the XPointer as a whole. If all the parts fail, the result
- * for the XPointer as a whole is a sub-resource error.
- * -----------
- *
- * Parse and evaluate a Full XPtr i.e. possibly a cascade of XPath based
- * expressions or other schemes.
- */
-static void
-xmlXPtrEvalFullXPtr(xmlXPathParserContextPtr ctxt, xmlChar *name) {
-    if (name == NULL)
-    name = xmlXPathParseName(ctxt);
-    if (name == NULL)
-	XP_ERROR(XPATH_EXPR_ERROR);
-    while (name != NULL) {
-	ctxt->error = XPATH_EXPRESSION_OK;
-	xmlXPtrEvalXPtrPart(ctxt, name);
-
-	/* in case of syntax error, break here */
-	if ((ctxt->error != XPATH_EXPRESSION_OK) &&
-            (ctxt->error != XML_XPTR_UNKNOWN_SCHEME))
-	    return;
-
-	/*
-	 * If the returned value is a non-empty nodeset
-	 * or location set, return here.
-	 */
-	if (ctxt->value != NULL) {
-	    xmlXPathObjectPtr obj = ctxt->value;
-
-	    switch (obj->type) {
-		case XPATH_LOCATIONSET: {
-		    xmlLocationSetPtr loc = ctxt->value->user;
-		    if ((loc != NULL) && (loc->locNr > 0))
-			return;
-		    break;
-		}
-		case XPATH_NODESET: {
-		    xmlNodeSetPtr loc = ctxt->value->nodesetval;
-		    if ((loc != NULL) && (loc->nodeNr > 0))
-			return;
-		    break;
-		}
-		default:
-		    break;
-	    }
-
-	    /*
-	     * Evaluating to improper values is equivalent to
-	     * a sub-resource error, clean-up the stack
-	     */
-	    do {
-		obj = valuePop(ctxt);
-		if (obj != NULL) {
-		    xmlXPathFreeObject(obj);
-		}
-	    } while (obj != NULL);
-	}
-
-	/*
-	 * Is there another XPointer part.
-	 */
-	SKIP_BLANKS;
-	name = xmlXPathParseName(ctxt);
-    }
-}
-
-/**
- * xmlXPtrEvalChildSeq:
- * @ctxt:  the XPointer Parser context
- * @name:  a possible ID name of the child sequence
- *
- *  ChildSeq ::= '/1' ('/' [0-9]*)*
- *             | Name ('/' [0-9]*)+
- *
- * Parse and evaluate a Child Sequence. This routine also handle the
- * case of a Bare Name used to get a document ID.
- */
-static void
-xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name) {
-    /*
-     * XPointer don't allow by syntax to address in mutirooted trees
-     * this might prove useful in some cases, warn about it.
-     */
-    if ((name == NULL) && (CUR == '/') && (NXT(1) != '1')) {
-        xmlXPtrErr(ctxt, XML_XPTR_CHILDSEQ_START,
-		   "warning: ChildSeq not starting by /1\n", NULL);
-    }
-
-    if (name != NULL) {
-	valuePush(ctxt, xmlXPathNewString(name));
-	xmlFree(name);
-	xmlXPathIdFunction(ctxt, 1);
-	CHECK_ERROR;
-    }
-
-    while (CUR == '/') {
-	int child = 0;
-	NEXT;
-
-	while ((CUR >= '0') && (CUR <= '9')) {
-	    child = child * 10 + (CUR - '0');
-	    NEXT;
-	}
-	xmlXPtrGetChildNo(ctxt, child);
-    }
-}
-
-
-/**
- * xmlXPtrEvalXPointer:
- * @ctxt:  the XPointer Parser context
- *
- *  XPointer ::= Name
- *             | ChildSeq
- *             | FullXPtr
- *
- * Parse and evaluate an XPointer
- */
-static void
-xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) {
-    if (ctxt->valueTab == NULL) {
-	/* Allocate the value stack */
-	ctxt->valueTab = (xmlXPathObjectPtr *)
-			 xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
-	if (ctxt->valueTab == NULL) {
-	    xmlXPtrErrMemory("allocating evaluation context");
-	    return;
-	}
-	ctxt->valueNr = 0;
-	ctxt->valueMax = 10;
-	ctxt->value = NULL;
-	ctxt->valueFrame = 0;
-    }
-    SKIP_BLANKS;
-    if (CUR == '/') {
-	xmlXPathRoot(ctxt);
-        xmlXPtrEvalChildSeq(ctxt, NULL);
-    } else {
-	xmlChar *name;
-
-	name = xmlXPathParseName(ctxt);
-	if (name == NULL)
-	    XP_ERROR(XPATH_EXPR_ERROR);
-	if (CUR == '(') {
-	    xmlXPtrEvalFullXPtr(ctxt, name);
-	    /* Short evaluation */
-	    return;
-	} else {
-	    /* this handle both Bare Names and Child Sequences */
-	    xmlXPtrEvalChildSeq(ctxt, name);
-	}
-    }
-    SKIP_BLANKS;
-    if (CUR != 0)
-	XP_ERROR(XPATH_EXPR_ERROR);
-}
-
-
-/************************************************************************
- *									*
- *			General routines				*
- *									*
- ************************************************************************/
-
-static
-void xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-
-/**
- * xmlXPtrNewContext:
- * @doc:  the XML document
- * @here:  the node that directly contains the XPointer being evaluated or NULL
- * @origin:  the element from which a user or program initiated traversal of
- *           the link, or NULL.
- *
- * Create a new XPointer context
- *
- * Returns the xmlXPathContext just allocated.
- */
-xmlXPathContextPtr
-xmlXPtrNewContext(xmlDocPtr doc, xmlNodePtr here, xmlNodePtr origin) {
-    xmlXPathContextPtr ret;
-
-    ret = xmlXPathNewContext(doc);
-    if (ret == NULL)
-	return(ret);
-    ret->xptr = 1;
-    ret->here = here;
-    ret->origin = origin;
-
-    xmlXPathRegisterFunc(ret, (xmlChar *)"range",
-	                 xmlXPtrRangeFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)"range-inside",
-	                 xmlXPtrRangeInsideFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)"string-range",
-	                 xmlXPtrStringRangeFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)"start-point",
-	                 xmlXPtrStartPointFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)"end-point",
-	                 xmlXPtrEndPointFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)"here",
-	                 xmlXPtrHereFunction);
-    xmlXPathRegisterFunc(ret, (xmlChar *)" origin",
-	                 xmlXPtrOriginFunction);
-
-    return(ret);
-}
-
-/**
- * xmlXPtrEval:
- * @str:  the XPointer expression
- * @ctx:  the XPointer context
- *
- * Evaluate the XPath Location Path in the given context.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- *         the caller has to free the object.
- */
-xmlXPathObjectPtr
-xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
-    xmlXPathParserContextPtr ctxt;
-    xmlXPathObjectPtr res = NULL, tmp;
-    xmlXPathObjectPtr init = NULL;
-    int stack = 0;
-
-    xmlXPathInit();
-
-    if ((ctx == NULL) || (str == NULL))
-	return(NULL);
-
-    ctxt = xmlXPathNewParserContext(str, ctx);
-    if (ctxt == NULL)
-	return(NULL);
-    ctxt->xptr = 1;
-    xmlXPtrEvalXPointer(ctxt);
-
-    if ((ctxt->value != NULL) &&
-	(ctxt->value->type != XPATH_NODESET) &&
-	(ctxt->value->type != XPATH_LOCATIONSET)) {
-        xmlXPtrErr(ctxt, XML_XPTR_EVAL_FAILED,
-		"xmlXPtrEval: evaluation failed to return a node set\n",
-		   NULL);
-    } else {
-	res = valuePop(ctxt);
-    }
-
-    do {
-        tmp = valuePop(ctxt);
-	if (tmp != NULL) {
-	    if (tmp != init) {
-		if (tmp->type == XPATH_NODESET) {
-		    /*
-		     * Evaluation may push a root nodeset which is unused
-		     */
-		    xmlNodeSetPtr set;
-		    set = tmp->nodesetval;
-		    if ((set == NULL) || (set->nodeNr != 1) ||
-			(set->nodeTab[0] != (xmlNodePtr) ctx->doc))
-			stack++;
-		} else
-		    stack++;
-	    }
-	    xmlXPathFreeObject(tmp);
-        }
-    } while (tmp != NULL);
-    if (stack != 0) {
-        xmlXPtrErr(ctxt, XML_XPTR_EXTRA_OBJECTS,
-		   "xmlXPtrEval: object(s) left on the eval stack\n",
-		   NULL);
-    }
-    if (ctxt->error != XPATH_EXPRESSION_OK) {
-	xmlXPathFreeObject(res);
-	res = NULL;
-    }
-
-    xmlXPathFreeParserContext(ctxt);
-    return(res);
-}
-
-/**
- * xmlXPtrBuildRangeNodeList:
- * @range:  a range object
- *
- * Build a node list tree copy of the range
- *
- * Returns an xmlNodePtr list or NULL.
- *         the caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
-    /* pointers to generated nodes */
-    xmlNodePtr list = NULL, last = NULL, parent = NULL, tmp;
-    /* pointers to traversal nodes */
-    xmlNodePtr start, cur, end;
-    int index1, index2;
-
-    if (range == NULL)
-	return(NULL);
-    if (range->type != XPATH_RANGE)
-	return(NULL);
-    start = (xmlNodePtr) range->user;
-
-    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
-	return(NULL);
-    end = range->user2;
-    if (end == NULL)
-	return(xmlCopyNode(start, 1));
-    if (end->type == XML_NAMESPACE_DECL)
-        return(NULL);
-
-    cur = start;
-    index1 = range->index;
-    index2 = range->index2;
-    while (cur != NULL) {
-	if (cur == end) {
-	    if (cur->type == XML_TEXT_NODE) {
-		const xmlChar *content = cur->content;
-		int len;
-
-		if (content == NULL) {
-		    tmp = xmlNewTextLen(NULL, 0);
-		} else {
-		    len = index2;
-		    if ((cur == start) && (index1 > 1)) {
-			content += (index1 - 1);
-			len -= (index1 - 1);
-			index1 = 0;
-		    } else {
-			len = index2;
-		    }
-		    tmp = xmlNewTextLen(content, len);
-		}
-		/* single sub text node selection */
-		if (list == NULL)
-		    return(tmp);
-		/* prune and return full set */
-		if (last != NULL)
-		    xmlAddNextSibling(last, tmp);
-		else
-		    xmlAddChild(parent, tmp);
-		return(list);
-	    } else {
-		tmp = xmlCopyNode(cur, 0);
-		if (list == NULL)
-		    list = tmp;
-		else {
-		    if (last != NULL)
-			xmlAddNextSibling(last, tmp);
-		    else
-			xmlAddChild(parent, tmp);
-		}
-		last = NULL;
-		parent = tmp;
-
-		if (index2 > 1) {
-		    end = xmlXPtrGetNthChild(cur, index2 - 1);
-		    index2 = 0;
-		}
-		if ((cur == start) && (index1 > 1)) {
-		    cur = xmlXPtrGetNthChild(cur, index1 - 1);
-		    index1 = 0;
-		} else {
-		    cur = cur->children;
-		}
-		/*
-		 * Now gather the remaining nodes from cur to end
-		 */
-		continue; /* while */
-	    }
-	} else if ((cur == start) &&
-		   (list == NULL) /* looks superfluous but ... */ ) {
-	    if ((cur->type == XML_TEXT_NODE) ||
-		(cur->type == XML_CDATA_SECTION_NODE)) {
-		const xmlChar *content = cur->content;
-
-		if (content == NULL) {
-		    tmp = xmlNewTextLen(NULL, 0);
-		} else {
-		    if (index1 > 1) {
-			content += (index1 - 1);
-		    }
-		    tmp = xmlNewText(content);
-		}
-		last = list = tmp;
-	    } else {
-		if ((cur == start) && (index1 > 1)) {
-		    tmp = xmlCopyNode(cur, 0);
-		    list = tmp;
-		    parent = tmp;
-		    last = NULL;
-		    cur = xmlXPtrGetNthChild(cur, index1 - 1);
-		    index1 = 0;
-		    /*
-		     * Now gather the remaining nodes from cur to end
-		     */
-		    continue; /* while */
-		}
-		tmp = xmlCopyNode(cur, 1);
-		list = tmp;
-		parent = NULL;
-		last = tmp;
-	    }
-	} else {
-	    tmp = NULL;
-	    switch (cur->type) {
-		case XML_DTD_NODE:
-		case XML_ELEMENT_DECL:
-		case XML_ATTRIBUTE_DECL:
-		case XML_ENTITY_NODE:
-		    /* Do not copy DTD informations */
-		    break;
-		case XML_ENTITY_DECL:
-		    TODO /* handle crossing entities -> stack needed */
-		    break;
-		case XML_XINCLUDE_START:
-		case XML_XINCLUDE_END:
-		    /* don't consider it part of the tree content */
-		    break;
-		case XML_ATTRIBUTE_NODE:
-		    /* Humm, should not happen ! */
-		    STRANGE
-		    break;
-		default:
-		    tmp = xmlCopyNode(cur, 1);
-		    break;
-	    }
-	    if (tmp != NULL) {
-		if ((list == NULL) || ((last == NULL) && (parent == NULL)))  {
-		    STRANGE
-		    return(NULL);
-		}
-		if (last != NULL)
-		    xmlAddNextSibling(last, tmp);
-		else {
-		    xmlAddChild(parent, tmp);
-		    last = tmp;
-		}
-	    }
-	}
-	/*
-	 * Skip to next node in document order
-	 */
-	if ((list == NULL) || ((last == NULL) && (parent == NULL)))  {
-	    STRANGE
-	    return(NULL);
-	}
-	cur = xmlXPtrAdvanceNode(cur, NULL);
-    }
-    return(list);
-}
-
-/**
- * xmlXPtrBuildNodeList:
- * @obj:  the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- * This will drop Attributes and Namespace declarations.
- *
- * Returns an xmlNodePtr list or NULL.
- *         the caller has to free the node tree.
- */
-xmlNodePtr
-xmlXPtrBuildNodeList(xmlXPathObjectPtr obj) {
-    xmlNodePtr list = NULL, last = NULL;
-    int i;
-
-    if (obj == NULL)
-	return(NULL);
-    switch (obj->type) {
-        case XPATH_NODESET: {
-	    xmlNodeSetPtr set = obj->nodesetval;
-	    if (set == NULL)
-		return(NULL);
-	    for (i = 0;i < set->nodeNr;i++) {
-		if (set->nodeTab[i] == NULL)
-		    continue;
-		switch (set->nodeTab[i]->type) {
-		    case XML_TEXT_NODE:
-		    case XML_CDATA_SECTION_NODE:
-		    case XML_ELEMENT_NODE:
-		    case XML_ENTITY_REF_NODE:
-		    case XML_ENTITY_NODE:
-		    case XML_PI_NODE:
-		    case XML_COMMENT_NODE:
-		    case XML_DOCUMENT_NODE:
-		    case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
-		    case XML_DOCB_DOCUMENT_NODE:
-#endif
-		    case XML_XINCLUDE_START:
-		    case XML_XINCLUDE_END:
-			break;
-		    case XML_ATTRIBUTE_NODE:
-		    case XML_NAMESPACE_DECL:
-		    case XML_DOCUMENT_TYPE_NODE:
-		    case XML_DOCUMENT_FRAG_NODE:
-		    case XML_NOTATION_NODE:
-		    case XML_DTD_NODE:
-		    case XML_ELEMENT_DECL:
-		    case XML_ATTRIBUTE_DECL:
-		    case XML_ENTITY_DECL:
-			continue; /* for */
-		}
-		if (last == NULL)
-		    list = last = xmlCopyNode(set->nodeTab[i], 1);
-		else {
-		    xmlAddNextSibling(last, xmlCopyNode(set->nodeTab[i], 1));
-		    if (last->next != NULL)
-			last = last->next;
-		}
-	    }
-	    break;
-	}
-	case XPATH_LOCATIONSET: {
-	    xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
-	    if (set == NULL)
-		return(NULL);
-	    for (i = 0;i < set->locNr;i++) {
-		if (last == NULL)
-		    list = last = xmlXPtrBuildNodeList(set->locTab[i]);
-		else
-		    xmlAddNextSibling(last,
-			    xmlXPtrBuildNodeList(set->locTab[i]));
-		if (last != NULL) {
-		    while (last->next != NULL)
-			last = last->next;
-		}
-	    }
-	    break;
-	}
-	case XPATH_RANGE:
-	    return(xmlXPtrBuildRangeNodeList(obj));
-	case XPATH_POINT:
-	    return(xmlCopyNode(obj->user, 0));
-	default:
-	    break;
-    }
-    return(list);
-}
-
-/************************************************************************
- *									*
- *			XPointer functions				*
- *									*
- ************************************************************************/
-
-/**
- * xmlXPtrNbLocChildren:
- * @node:  an xmlNodePtr
- *
- * Count the number of location children of @node or the length of the
- * string value in case of text/PI/Comments nodes
- *
- * Returns the number of location children
- */
-static int
-xmlXPtrNbLocChildren(xmlNodePtr node) {
-    int ret = 0;
-    if (node == NULL)
-	return(-1);
-    switch (node->type) {
-        case XML_HTML_DOCUMENT_NODE:
-        case XML_DOCUMENT_NODE:
-        case XML_ELEMENT_NODE:
-	    node = node->children;
-	    while (node != NULL) {
-		if (node->type == XML_ELEMENT_NODE)
-		    ret++;
-		node = node->next;
-	    }
-	    break;
-        case XML_ATTRIBUTE_NODE:
-	    return(-1);
-
-        case XML_PI_NODE:
-        case XML_COMMENT_NODE:
-        case XML_TEXT_NODE:
-        case XML_CDATA_SECTION_NODE:
-        case XML_ENTITY_REF_NODE:
-	    ret = xmlStrlen(node->content);
-	    break;
-	default:
-	    return(-1);
-    }
-    return(ret);
-}
-
-/**
- * xmlXPtrHereFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing here() operation
- * as described in 5.4.3
- */
-static void
-xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    CHECK_ARITY(0);
-
-    if (ctxt->context->here == NULL)
-	XP_ERROR(XPTR_SYNTAX_ERROR);
-
-    valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL));
-}
-
-/**
- * xmlXPtrOriginFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing origin() operation
- * as described in 5.4.3
- */
-static void
-xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    CHECK_ARITY(0);
-
-    if (ctxt->context->origin == NULL)
-	XP_ERROR(XPTR_SYNTAX_ERROR);
-
-    valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL));
-}
-
-/**
- * xmlXPtrStartPointFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing start-point() operation
- * as described in 5.4.3
- * ----------------
- * location-set start-point(location-set)
- *
- * For each location x in the argument location-set, start-point adds a
- * location of type point to the result location-set. That point represents
- * the start point of location x and is determined by the following rules:
- *
- * - If x is of type point, the start point is x.
- * - If x is of type range, the start point is the start point of x.
- * - If x is of type root, element, text, comment, or processing instruction,
- * - the container node of the start point is x and the index is 0.
- * - If x is of type attribute or namespace, the function must signal a
- *   syntax error.
- * ----------------
- *
- */
-static void
-xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    xmlXPathObjectPtr tmp, obj, point;
-    xmlLocationSetPtr newset = NULL;
-    xmlLocationSetPtr oldset = NULL;
-
-    CHECK_ARITY(1);
-    if ((ctxt->value == NULL) ||
-	((ctxt->value->type != XPATH_LOCATIONSET) &&
-	 (ctxt->value->type != XPATH_NODESET)))
-        XP_ERROR(XPATH_INVALID_TYPE)
-
-    obj = valuePop(ctxt);
-    if (obj->type == XPATH_NODESET) {
-	/*
-	 * First convert to a location set
-	 */
-	tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
-	xmlXPathFreeObject(obj);
-	if (tmp == NULL)
-            XP_ERROR(XPATH_MEMORY_ERROR)
-	obj = tmp;
-    }
-
-    newset = xmlXPtrLocationSetCreate(NULL);
-    if (newset == NULL) {
-	xmlXPathFreeObject(obj);
-        XP_ERROR(XPATH_MEMORY_ERROR);
-    }
-    oldset = (xmlLocationSetPtr) obj->user;
-    if (oldset != NULL) {
-	int i;
-
-	for (i = 0; i < oldset->locNr; i++) {
-	    tmp = oldset->locTab[i];
-	    if (tmp == NULL)
-		continue;
-	    point = NULL;
-	    switch (tmp->type) {
-		case XPATH_POINT:
-		    point = xmlXPtrNewPoint(tmp->user, tmp->index);
-		    break;
-		case XPATH_RANGE: {
-		    xmlNodePtr node = tmp->user;
-		    if (node != NULL) {
-			if ((node->type == XML_ATTRIBUTE_NODE) ||
-                            (node->type == XML_NAMESPACE_DECL)) {
-			    xmlXPathFreeObject(obj);
-			    xmlXPtrFreeLocationSet(newset);
-			    XP_ERROR(XPTR_SYNTAX_ERROR);
-			}
-			point = xmlXPtrNewPoint(node, tmp->index);
-		    }
-		    break;
-	        }
-		default:
-		    /*** Should we raise an error ?
-		    xmlXPathFreeObject(obj);
-		    xmlXPathFreeObject(newset);
-		    XP_ERROR(XPATH_INVALID_TYPE)
-		    ***/
-		    break;
-	    }
-            if (point != NULL)
-		xmlXPtrLocationSetAdd(newset, point);
-	}
-    }
-    xmlXPathFreeObject(obj);
-    valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-}
-
-/**
- * xmlXPtrEndPointFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing end-point() operation
- * as described in 5.4.3
- * ----------------------------
- * location-set end-point(location-set)
- *
- * For each location x in the argument location-set, end-point adds a
- * location of type point to the result location-set. That point represents
- * the end point of location x and is determined by the following rules:
- *
- * - If x is of type point, the resulting point is x.
- * - If x is of type range, the resulting point is the end point of x.
- * - If x is of type root or element, the container node of the resulting
- *   point is x and the index is the number of location children of x.
- * - If x is of type text, comment, or processing instruction, the container
- *   node of the resulting point is x and the index is the length of the
- *   string-value of x.
- * - If x is of type attribute or namespace, the function must signal a
- *   syntax error.
- * ----------------------------
- */
-static void
-xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    xmlXPathObjectPtr tmp, obj, point;
-    xmlLocationSetPtr newset = NULL;
-    xmlLocationSetPtr oldset = NULL;
-
-    CHECK_ARITY(1);
-    if ((ctxt->value == NULL) ||
-	((ctxt->value->type != XPATH_LOCATIONSET) &&
-	 (ctxt->value->type != XPATH_NODESET)))
-        XP_ERROR(XPATH_INVALID_TYPE)
-
-    obj = valuePop(ctxt);
-    if (obj->type == XPATH_NODESET) {
-	/*
-	 * First convert to a location set
-	 */
-	tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
-	xmlXPathFreeObject(obj);
-	if (tmp == NULL)
-            XP_ERROR(XPATH_MEMORY_ERROR)
-	obj = tmp;
-    }
-
-    newset = xmlXPtrLocationSetCreate(NULL);
-    if (newset == NULL) {
-	xmlXPathFreeObject(obj);
-        XP_ERROR(XPATH_MEMORY_ERROR);
-    }
-    oldset = (xmlLocationSetPtr) obj->user;
-    if (oldset != NULL) {
-	int i;
-
-	for (i = 0; i < oldset->locNr; i++) {
-	    tmp = oldset->locTab[i];
-	    if (tmp == NULL)
-		continue;
-	    point = NULL;
-	    switch (tmp->type) {
-		case XPATH_POINT:
-		    point = xmlXPtrNewPoint(tmp->user, tmp->index);
-		    break;
-		case XPATH_RANGE: {
-		    xmlNodePtr node = tmp->user2;
-		    if (node != NULL) {
-			if ((node->type == XML_ATTRIBUTE_NODE) ||
-                            (node->type == XML_NAMESPACE_DECL)) {
-			    xmlXPathFreeObject(obj);
-			    xmlXPtrFreeLocationSet(newset);
-			    XP_ERROR(XPTR_SYNTAX_ERROR);
-			}
-			point = xmlXPtrNewPoint(node, tmp->index2);
-		    } else if (tmp->user == NULL) {
-			point = xmlXPtrNewPoint(node,
-				       xmlXPtrNbLocChildren(node));
-		    }
-		    break;
-	        }
-		default:
-		    /*** Should we raise an error ?
-		    xmlXPathFreeObject(obj);
-		    xmlXPathFreeObject(newset);
-		    XP_ERROR(XPATH_INVALID_TYPE)
-		    ***/
-		    break;
-	    }
-            if (point != NULL)
-		xmlXPtrLocationSetAdd(newset, point);
-	}
-    }
-    xmlXPathFreeObject(obj);
-    valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-}
-
-
-/**
- * xmlXPtrCoveringRange:
- * @ctxt:  the XPointer Parser context
- * @loc:  the location for which the covering range must be computed
- *
- * A covering range is a range that wholly encompasses a location
- * Section 5.3.3. Covering Ranges for All Location Types
- *        http://www.w3.org/TR/xptr#N2267
- *
- * Returns a new location or NULL in case of error
- */
-static xmlXPathObjectPtr
-xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
-    if (loc == NULL)
-	return(NULL);
-    if ((ctxt == NULL) || (ctxt->context == NULL) ||
-	(ctxt->context->doc == NULL))
-	return(NULL);
-    switch (loc->type) {
-        case XPATH_POINT:
-	    return(xmlXPtrNewRange(loc->user, loc->index,
-			           loc->user, loc->index));
-        case XPATH_RANGE:
-	    if (loc->user2 != NULL) {
-		return(xmlXPtrNewRange(loc->user, loc->index,
-			              loc->user2, loc->index2));
-	    } else {
-		xmlNodePtr node = (xmlNodePtr) loc->user;
-		if (node == (xmlNodePtr) ctxt->context->doc) {
-		    return(xmlXPtrNewRange(node, 0, node,
-					   xmlXPtrGetArity(node)));
-		} else {
-		    switch (node->type) {
-			case XML_ATTRIBUTE_NODE:
-			/* !!! our model is slightly different than XPath */
-			    return(xmlXPtrNewRange(node, 0, node,
-					           xmlXPtrGetArity(node)));
-			case XML_ELEMENT_NODE:
-			case XML_TEXT_NODE:
-			case XML_CDATA_SECTION_NODE:
-			case XML_ENTITY_REF_NODE:
-			case XML_PI_NODE:
-			case XML_COMMENT_NODE:
-			case XML_DOCUMENT_NODE:
-			case XML_NOTATION_NODE:
-			case XML_HTML_DOCUMENT_NODE: {
-			    int indx = xmlXPtrGetIndex(node);
-
-			    node = node->parent;
-			    return(xmlXPtrNewRange(node, indx - 1,
-					           node, indx + 1));
-			}
-			default:
-			    return(NULL);
-		    }
-		}
-	    }
-	default:
-	    TODO /* missed one case ??? */
-    }
-    return(NULL);
-}
-
-/**
- * xmlXPtrRangeFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing the range() function 5.4.3
- *  location-set range(location-set )
- *
- *  The range function returns ranges covering the locations in
- *  the argument location-set. For each location x in the argument
- *  location-set, a range location representing the covering range of
- *  x is added to the result location-set.
- */
-static void
-xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    int i;
-    xmlXPathObjectPtr set;
-    xmlLocationSetPtr oldset;
-    xmlLocationSetPtr newset;
-
-    CHECK_ARITY(1);
-    if ((ctxt->value == NULL) ||
-	((ctxt->value->type != XPATH_LOCATIONSET) &&
-	 (ctxt->value->type != XPATH_NODESET)))
-        XP_ERROR(XPATH_INVALID_TYPE)
-
-    set = valuePop(ctxt);
-    if (set->type == XPATH_NODESET) {
-	xmlXPathObjectPtr tmp;
-
-	/*
-	 * First convert to a location set
-	 */
-	tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
-	xmlXPathFreeObject(set);
-	if (tmp == NULL)
-            XP_ERROR(XPATH_MEMORY_ERROR)
-	set = tmp;
-    }
-    oldset = (xmlLocationSetPtr) set->user;
-
-    /*
-     * The loop is to compute the covering range for each item and add it
-     */
-    newset = xmlXPtrLocationSetCreate(NULL);
-    if (newset == NULL) {
-	xmlXPathFreeObject(set);
-        XP_ERROR(XPATH_MEMORY_ERROR);
-    }
-    if (oldset != NULL) {
-        for (i = 0;i < oldset->locNr;i++) {
-            xmlXPtrLocationSetAdd(newset,
-                    xmlXPtrCoveringRange(ctxt, oldset->locTab[i]));
-        }
-    }
-
-    /*
-     * Save the new value and cleanup
-     */
-    valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-    xmlXPathFreeObject(set);
-}
-
-/**
- * xmlXPtrInsideRange:
- * @ctxt:  the XPointer Parser context
- * @loc:  the location for which the inside range must be computed
- *
- * A inside range is a range described in the range-inside() description
- *
- * Returns a new location or NULL in case of error
- */
-static xmlXPathObjectPtr
-xmlXPtrInsideRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
-    if (loc == NULL)
-	return(NULL);
-    if ((ctxt == NULL) || (ctxt->context == NULL) ||
-	(ctxt->context->doc == NULL))
-	return(NULL);
-    switch (loc->type) {
-        case XPATH_POINT: {
-	    xmlNodePtr node = (xmlNodePtr) loc->user;
-	    switch (node->type) {
-		case XML_PI_NODE:
-		case XML_COMMENT_NODE:
-		case XML_TEXT_NODE:
-		case XML_CDATA_SECTION_NODE: {
-		    if (node->content == NULL) {
-			return(xmlXPtrNewRange(node, 0, node, 0));
-		    } else {
-			return(xmlXPtrNewRange(node, 0, node,
-					       xmlStrlen(node->content)));
-		    }
-		}
-		case XML_ATTRIBUTE_NODE:
-		case XML_ELEMENT_NODE:
-		case XML_ENTITY_REF_NODE:
-		case XML_DOCUMENT_NODE:
-		case XML_NOTATION_NODE:
-		case XML_HTML_DOCUMENT_NODE: {
-		    return(xmlXPtrNewRange(node, 0, node,
-					   xmlXPtrGetArity(node)));
-		}
-		default:
-		    break;
-	    }
-	    return(NULL);
-	}
-        case XPATH_RANGE: {
-	    xmlNodePtr node = (xmlNodePtr) loc->user;
-	    if (loc->user2 != NULL) {
-		return(xmlXPtrNewRange(node, loc->index,
-			               loc->user2, loc->index2));
-	    } else {
-		switch (node->type) {
-		    case XML_PI_NODE:
-		    case XML_COMMENT_NODE:
-		    case XML_TEXT_NODE:
-		    case XML_CDATA_SECTION_NODE: {
-			if (node->content == NULL) {
-			    return(xmlXPtrNewRange(node, 0, node, 0));
-			} else {
-			    return(xmlXPtrNewRange(node, 0, node,
-						   xmlStrlen(node->content)));
-			}
-		    }
-		    case XML_ATTRIBUTE_NODE:
-		    case XML_ELEMENT_NODE:
-		    case XML_ENTITY_REF_NODE:
-		    case XML_DOCUMENT_NODE:
-		    case XML_NOTATION_NODE:
-		    case XML_HTML_DOCUMENT_NODE: {
-			return(xmlXPtrNewRange(node, 0, node,
-					       xmlXPtrGetArity(node)));
-		    }
-		    default:
-			break;
-		}
-		return(NULL);
-	    }
-        }
-	default:
-	    TODO /* missed one case ??? */
-    }
-    return(NULL);
-}
-
-/**
- * xmlXPtrRangeInsideFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing the range-inside() function 5.4.3
- *  location-set range-inside(location-set )
- *
- *  The range-inside function returns ranges covering the contents of
- *  the locations in the argument location-set. For each location x in
- *  the argument location-set, a range location is added to the result
- *  location-set. If x is a range location, then x is added to the
- *  result location-set. If x is not a range location, then x is used
- *  as the container location of the start and end points of the range
- *  location to be added; the index of the start point of the range is
- *  zero; if the end point is a character point then its index is the
- *  length of the string-value of x, and otherwise is the number of
- *  location children of x.
- *
- */
-static void
-xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    int i;
-    xmlXPathObjectPtr set;
-    xmlLocationSetPtr oldset;
-    xmlLocationSetPtr newset;
-
-    CHECK_ARITY(1);
-    if ((ctxt->value == NULL) ||
-	((ctxt->value->type != XPATH_LOCATIONSET) &&
-	 (ctxt->value->type != XPATH_NODESET)))
-        XP_ERROR(XPATH_INVALID_TYPE)
-
-    set = valuePop(ctxt);
-    if (set->type == XPATH_NODESET) {
-	xmlXPathObjectPtr tmp;
-
-	/*
-	 * First convert to a location set
-	 */
-	tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
-	xmlXPathFreeObject(set);
-	if (tmp == NULL)
-	     XP_ERROR(XPATH_MEMORY_ERROR)
-	set = tmp;
-    }
-    oldset = (xmlLocationSetPtr) set->user;
-
-    /*
-     * The loop is to compute the covering range for each item and add it
-     */
-    newset = xmlXPtrLocationSetCreate(NULL);
-    if (newset == NULL) {
-	xmlXPathFreeObject(set);
-        XP_ERROR(XPATH_MEMORY_ERROR);
-    }
-    for (i = 0;i < oldset->locNr;i++) {
-	xmlXPtrLocationSetAdd(newset,
-		xmlXPtrInsideRange(ctxt, oldset->locTab[i]));
-    }
-
-    /*
-     * Save the new value and cleanup
-     */
-    valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-    xmlXPathFreeObject(set);
-}
-
-/**
- * xmlXPtrRangeToFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Implement the range-to() XPointer function
- *
- * Obsolete. range-to is not a real function but a special type of location
- * step which is handled in xpath.c.
- */
-void
-xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
-                       int nargs ATTRIBUTE_UNUSED) {
-    XP_ERROR(XPATH_EXPR_ERROR);
-}
-
-/**
- * xmlXPtrAdvanceNode:
- * @cur:  the node
- * @level: incremented/decremented to show level in tree
- *
- * Advance to the next element or text node in document order
- * TODO: add a stack for entering/exiting entities
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-xmlNodePtr
-xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) {
-next:
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(NULL);
-    if (cur->children != NULL) {
-        cur = cur->children ;
-	if (level != NULL)
-	    (*level)++;
-	goto found;
-    }
-skip:		/* This label should only be needed if something is wrong! */
-    if (cur->next != NULL) {
-	cur = cur->next;
-	goto found;
-    }
-    do {
-        cur = cur->parent;
-	if (level != NULL)
-	    (*level)--;
-        if (cur == NULL) return(NULL);
-        if (cur->next != NULL) {
-	    cur = cur->next;
-	    goto found;
-	}
-    } while (cur != NULL);
-
-found:
-    if ((cur->type != XML_ELEMENT_NODE) &&
-	(cur->type != XML_TEXT_NODE) &&
-	(cur->type != XML_DOCUMENT_NODE) &&
-	(cur->type != XML_HTML_DOCUMENT_NODE) &&
-	(cur->type != XML_CDATA_SECTION_NODE)) {
-	    if (cur->type == XML_ENTITY_REF_NODE) {	/* Shouldn't happen */
-		TODO
-		goto skip;
-	    }
-	    goto next;
-	}
-    return(cur);
-}
-
-/**
- * xmlXPtrAdvanceChar:
- * @node:  the node
- * @indx:  the indx
- * @bytes:  the number of bytes
- *
- * Advance a point of the associated number of bytes (not UTF8 chars)
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
-    xmlNodePtr cur;
-    int pos;
-    int len;
-
-    if ((node == NULL) || (indx == NULL))
-	return(-1);
-    cur = *node;
-    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
-	return(-1);
-    pos = *indx;
-
-    while (bytes >= 0) {
-	/*
-	 * First position to the beginning of the first text node
-	 * corresponding to this point
-	 */
-	while ((cur != NULL) &&
-	       ((cur->type == XML_ELEMENT_NODE) ||
-	        (cur->type == XML_DOCUMENT_NODE) ||
-	        (cur->type == XML_HTML_DOCUMENT_NODE))) {
-	    if (pos > 0) {
-		cur = xmlXPtrGetNthChild(cur, pos);
-		pos = 0;
-	    } else {
-		cur = xmlXPtrAdvanceNode(cur, NULL);
-		pos = 0;
-	    }
-	}
-
-	if (cur == NULL) {
-	    *node = NULL;
-	    *indx = 0;
-	    return(-1);
-	}
-
-	/*
-	 * if there is no move needed return the current value.
-	 */
-	if (pos == 0) pos = 1;
-	if (bytes == 0) {
-	    *node = cur;
-	    *indx = pos;
-	    return(0);
-	}
-	/*
-	 * We should have a text (or cdata) node ...
-	 */
-	len = 0;
-	if ((cur->type != XML_ELEMENT_NODE) &&
-            (cur->content != NULL)) {
-	    len = xmlStrlen(cur->content);
-	}
-	if (pos > len) {
-	    /* Strange, the indx in the text node is greater than it's len */
-	    STRANGE
-	    pos = len;
-	}
-	if (pos + bytes >= len) {
-	    bytes -= (len - pos);
-	    cur = xmlXPtrAdvanceNode(cur, NULL);
-	    pos = 0;
-	} else if (pos + bytes < len) {
-	    pos += bytes;
-	    *node = cur;
-	    *indx = pos;
-	    return(0);
-	}
-    }
-    return(-1);
-}
-
-/**
- * xmlXPtrMatchString:
- * @string:  the string to search
- * @start:  the start textnode
- * @startindex:  the start index
- * @end:  the end textnode IN/OUT
- * @endindex:  the end index IN/OUT
- *
- * Check whether the document contains @string at the position
- * (@start, @startindex) and limited by the (@end, @endindex) point
- *
- * Returns -1 in case of failure, 0 if not found, 1 if found in which case
- *            (@start, @startindex) will indicate the position of the beginning
- *            of the range and (@end, @endindex) will indicate the end
- *            of the range
- */
-static int
-xmlXPtrMatchString(const xmlChar *string, xmlNodePtr start, int startindex,
-	            xmlNodePtr *end, int *endindex) {
-    xmlNodePtr cur;
-    int pos; /* 0 based */
-    int len; /* in bytes */
-    int stringlen; /* in bytes */
-    int match;
-
-    if (string == NULL)
-	return(-1);
-    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
-	return(-1);
-    if ((end == NULL) || (*end == NULL) ||
-        ((*end)->type == XML_NAMESPACE_DECL) || (endindex == NULL))
-	return(-1);
-    cur = start;
-    pos = startindex - 1;
-    stringlen = xmlStrlen(string);
-
-    while (stringlen > 0) {
-	if ((cur == *end) && (pos + stringlen > *endindex))
-	    return(0);
-
-	if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
-	    len = xmlStrlen(cur->content);
-	    if (len >= pos + stringlen) {
-		match = (!xmlStrncmp(&cur->content[pos], string, stringlen));
-		if (match) {
-#ifdef DEBUG_RANGES
-		    xmlGenericError(xmlGenericErrorContext,
-			    "found range %d bytes at index %d of ->",
-			    stringlen, pos + 1);
-		    xmlDebugDumpString(stdout, cur->content);
-		    xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-		    *end = cur;
-		    *endindex = pos + stringlen;
-		    return(1);
-		} else {
-		    return(0);
-		}
-	    } else {
-                int sub = len - pos;
-		match = (!xmlStrncmp(&cur->content[pos], string, sub));
-		if (match) {
-#ifdef DEBUG_RANGES
-		    xmlGenericError(xmlGenericErrorContext,
-			    "found subrange %d bytes at index %d of ->",
-			    sub, pos + 1);
-		    xmlDebugDumpString(stdout, cur->content);
-		    xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-                    string = &string[sub];
-		    stringlen -= sub;
-		} else {
-		    return(0);
-		}
-	    }
-	}
-	cur = xmlXPtrAdvanceNode(cur, NULL);
-	if (cur == NULL)
-	    return(0);
-	pos = 0;
-    }
-    return(1);
-}
-
-/**
- * xmlXPtrSearchString:
- * @string:  the string to search
- * @start:  the start textnode IN/OUT
- * @startindex:  the start index IN/OUT
- * @end:  the end textnode
- * @endindex:  the end index
- *
- * Search the next occurrence of @string within the document content
- * until the (@end, @endindex) point is reached
- *
- * Returns -1 in case of failure, 0 if not found, 1 if found in which case
- *            (@start, @startindex) will indicate the position of the beginning
- *            of the range and (@end, @endindex) will indicate the end
- *            of the range
- */
-static int
-xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex,
-	            xmlNodePtr *end, int *endindex) {
-    xmlNodePtr cur;
-    const xmlChar *str;
-    int pos; /* 0 based */
-    int len; /* in bytes */
-    xmlChar first;
-
-    if (string == NULL)
-	return(-1);
-    if ((start == NULL) || (*start == NULL) ||
-        ((*start)->type == XML_NAMESPACE_DECL) || (startindex == NULL))
-	return(-1);
-    if ((end == NULL) || (endindex == NULL))
-	return(-1);
-    cur = *start;
-    pos = *startindex - 1;
-    first = string[0];
-
-    while (cur != NULL) {
-	if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
-	    len = xmlStrlen(cur->content);
-	    while (pos <= len) {
-		if (first != 0) {
-		    str = xmlStrchr(&cur->content[pos], first);
-		    if (str != NULL) {
-			pos = (str - (xmlChar *)(cur->content));
-#ifdef DEBUG_RANGES
-			xmlGenericError(xmlGenericErrorContext,
-				"found '%c' at index %d of ->",
-				first, pos + 1);
-			xmlDebugDumpString(stdout, cur->content);
-			xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-			if (xmlXPtrMatchString(string, cur, pos + 1,
-					       end, endindex)) {
-			    *start = cur;
-			    *startindex = pos + 1;
-			    return(1);
-			}
-			pos++;
-		    } else {
-			pos = len + 1;
-		    }
-		} else {
-		    /*
-		     * An empty string is considered to match before each
-		     * character of the string-value and after the final
-		     * character.
-		     */
-#ifdef DEBUG_RANGES
-		    xmlGenericError(xmlGenericErrorContext,
-			    "found '' at index %d of ->",
-			    pos + 1);
-		    xmlDebugDumpString(stdout, cur->content);
-		    xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-		    *start = cur;
-		    *startindex = pos + 1;
-		    *end = cur;
-		    *endindex = pos + 1;
-		    return(1);
-		}
-	    }
-	}
-	if ((cur == *end) && (pos >= *endindex))
-	    return(0);
-	cur = xmlXPtrAdvanceNode(cur, NULL);
-	if (cur == NULL)
-	    return(0);
-	pos = 1;
-    }
-    return(0);
-}
-
-/**
- * xmlXPtrGetLastChar:
- * @node:  the node
- * @index:  the index
- *
- * Computes the point coordinates of the last char of this point
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
-    xmlNodePtr cur;
-    int pos, len = 0;
-
-    if ((node == NULL) || (*node == NULL) ||
-        ((*node)->type == XML_NAMESPACE_DECL) || (indx == NULL))
-	return(-1);
-    cur = *node;
-    pos = *indx;
-
-    if ((cur->type == XML_ELEMENT_NODE) ||
-	(cur->type == XML_DOCUMENT_NODE) ||
-	(cur->type == XML_HTML_DOCUMENT_NODE)) {
-	if (pos > 0) {
-	    cur = xmlXPtrGetNthChild(cur, pos);
-	}
-    }
-    while (cur != NULL) {
-	if (cur->last != NULL)
-	    cur = cur->last;
-	else if ((cur->type != XML_ELEMENT_NODE) &&
-	         (cur->content != NULL)) {
-	    len = xmlStrlen(cur->content);
-	    break;
-	} else {
-	    return(-1);
-	}
-    }
-    if (cur == NULL)
-	return(-1);
-    *node = cur;
-    *indx = len;
-    return(0);
-}
-
-/**
- * xmlXPtrGetStartPoint:
- * @obj:  an range
- * @node:  the resulting node
- * @indx:  the resulting index
- *
- * read the object and return the start point coordinates.
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetStartPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
-    if ((obj == NULL) || (node == NULL) || (indx == NULL))
-	return(-1);
-
-    switch (obj->type) {
-        case XPATH_POINT:
-	    *node = obj->user;
-	    if (obj->index <= 0)
-		*indx = 0;
-	    else
-		*indx = obj->index;
-	    return(0);
-        case XPATH_RANGE:
-	    *node = obj->user;
-	    if (obj->index <= 0)
-		*indx = 0;
-	    else
-		*indx = obj->index;
-	    return(0);
-	default:
-	    break;
-    }
-    return(-1);
-}
-
-/**
- * xmlXPtrGetEndPoint:
- * @obj:  an range
- * @node:  the resulting node
- * @indx:  the resulting indx
- *
- * read the object and return the end point coordinates.
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
-    if ((obj == NULL) || (node == NULL) || (indx == NULL))
-	return(-1);
-
-    switch (obj->type) {
-        case XPATH_POINT:
-	    *node = obj->user;
-	    if (obj->index <= 0)
-		*indx = 0;
-	    else
-		*indx = obj->index;
-	    return(0);
-        case XPATH_RANGE:
-	    *node = obj->user;
-	    if (obj->index <= 0)
-		*indx = 0;
-	    else
-		*indx = obj->index;
-	    return(0);
-	default:
-	    break;
-    }
-    return(-1);
-}
-
-/**
- * xmlXPtrStringRangeFunction:
- * @ctxt:  the XPointer Parser context
- * @nargs:  the number of args
- *
- * Function implementing the string-range() function
- * range as described in 5.4.2
- *
- * ------------------------------
- * [Definition: For each location in the location-set argument,
- * string-range returns a set of string ranges, a set of substrings in a
- * string. Specifically, the string-value of the location is searched for
- * substrings that match the string argument, and the resulting location-set
- * will contain a range location for each non-overlapping match.]
- * An empty string is considered to match before each character of the
- * string-value and after the final character. Whitespace in a string
- * is matched literally, with no normalization except that provided by
- * XML for line ends. The third argument gives the position of the first
- * character to be in the resulting range, relative to the start of the
- * match. The default value is 1, which makes the range start immediately
- * before the first character of the matched string. The fourth argument
- * gives the number of characters in the range; the default is that the
- * range extends to the end of the matched string.
- *
- * Element boundaries, as well as entire embedded nodes such as processing
- * instructions and comments, are ignored as defined in [XPath].
- *
- * If the string in the second argument is not found in the string-value
- * of the location, or if a value in the third or fourth argument indicates
- * a string that is beyond the beginning or end of the document, the
- * expression fails.
- *
- * The points of the range-locations in the returned location-set will
- * all be character points.
- * ------------------------------
- */
-static void
-xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
-    int i, startindex, endindex = 0, fendindex;
-    xmlNodePtr start, end = 0, fend;
-    xmlXPathObjectPtr set;
-    xmlLocationSetPtr oldset;
-    xmlLocationSetPtr newset;
-    xmlXPathObjectPtr string;
-    xmlXPathObjectPtr position = NULL;
-    xmlXPathObjectPtr number = NULL;
-    int found, pos = 0, num = 0;
-
-    /*
-     * Grab the arguments
-     */
-    if ((nargs < 2) || (nargs > 4))
-	XP_ERROR(XPATH_INVALID_ARITY);
-
-    if (nargs >= 4) {
-	CHECK_TYPE(XPATH_NUMBER);
-	number = valuePop(ctxt);
-	if (number != NULL)
-	    num = (int) number->floatval;
-    }
-    if (nargs >= 3) {
-	CHECK_TYPE(XPATH_NUMBER);
-	position = valuePop(ctxt);
-	if (position != NULL)
-	    pos = (int) position->floatval;
-    }
-    CHECK_TYPE(XPATH_STRING);
-    string = valuePop(ctxt);
-    if ((ctxt->value == NULL) ||
-	((ctxt->value->type != XPATH_LOCATIONSET) &&
-	 (ctxt->value->type != XPATH_NODESET)))
-        XP_ERROR(XPATH_INVALID_TYPE)
-
-    set = valuePop(ctxt);
-    newset = xmlXPtrLocationSetCreate(NULL);
-    if (newset == NULL) {
-	xmlXPathFreeObject(set);
-        XP_ERROR(XPATH_MEMORY_ERROR);
-    }
-    if (set->nodesetval == NULL) {
-        goto error;
-    }
-    if (set->type == XPATH_NODESET) {
-	xmlXPathObjectPtr tmp;
-
-	/*
-	 * First convert to a location set
-	 */
-	tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
-	xmlXPathFreeObject(set);
-	if (tmp == NULL)
-	     XP_ERROR(XPATH_MEMORY_ERROR)
-	set = tmp;
-    }
-    oldset = (xmlLocationSetPtr) set->user;
-
-    /*
-     * The loop is to search for each element in the location set
-     * the list of location set corresponding to that search
-     */
-    for (i = 0;i < oldset->locNr;i++) {
-#ifdef DEBUG_RANGES
-	xmlXPathDebugDumpObject(stdout, oldset->locTab[i], 0);
-#endif
-
-	xmlXPtrGetStartPoint(oldset->locTab[i], &start, &startindex);
-	xmlXPtrGetEndPoint(oldset->locTab[i], &end, &endindex);
-	xmlXPtrAdvanceChar(&start, &startindex, 0);
-	xmlXPtrGetLastChar(&end, &endindex);
-
-#ifdef DEBUG_RANGES
-	xmlGenericError(xmlGenericErrorContext,
-		"from index %d of ->", startindex);
-	xmlDebugDumpString(stdout, start->content);
-	xmlGenericError(xmlGenericErrorContext, "\n");
-	xmlGenericError(xmlGenericErrorContext,
-		"to index %d of ->", endindex);
-	xmlDebugDumpString(stdout, end->content);
-	xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
-	do {
-            fend = end;
-            fendindex = endindex;
-	    found = xmlXPtrSearchString(string->stringval, &start, &startindex,
-		                        &fend, &fendindex);
-	    if (found == 1) {
-		if (position == NULL) {
-		    xmlXPtrLocationSetAdd(newset,
-			 xmlXPtrNewRange(start, startindex, fend, fendindex));
-		} else if (xmlXPtrAdvanceChar(&start, &startindex,
-			                      pos - 1) == 0) {
-		    if ((number != NULL) && (num > 0)) {
-			int rindx;
-			xmlNodePtr rend;
-			rend = start;
-			rindx = startindex - 1;
-			if (xmlXPtrAdvanceChar(&rend, &rindx,
-				               num) == 0) {
-			    xmlXPtrLocationSetAdd(newset,
-					xmlXPtrNewRange(start, startindex,
-							rend, rindx));
-			}
-		    } else if ((number != NULL) && (num <= 0)) {
-			xmlXPtrLocationSetAdd(newset,
-				    xmlXPtrNewRange(start, startindex,
-						    start, startindex));
-		    } else {
-			xmlXPtrLocationSetAdd(newset,
-				    xmlXPtrNewRange(start, startindex,
-						    fend, fendindex));
-		    }
-		}
-		start = fend;
-		startindex = fendindex;
-		if (string->stringval[0] == 0)
-		    startindex++;
-	    }
-	} while (found == 1);
-    }
-
-    /*
-     * Save the new value and cleanup
-     */
-error:
-    valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-    xmlXPathFreeObject(set);
-    xmlXPathFreeObject(string);
-    if (position) xmlXPathFreeObject(position);
-    if (number) xmlXPathFreeObject(number);
-}
-
-/**
- * xmlXPtrEvalRangePredicate:
- * @ctxt:  the XPointer Parser context
- *
- *  [8]   Predicate ::=   '[' PredicateExpr ']'
- *  [9]   PredicateExpr ::=   Expr
- *
- * Evaluate a predicate as in xmlXPathEvalPredicate() but for
- * a Location Set instead of a node set
- */
-void
-xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) {
-    const xmlChar *cur;
-    xmlXPathObjectPtr res;
-    xmlXPathObjectPtr obj, tmp;
-    xmlLocationSetPtr newset = NULL;
-    xmlLocationSetPtr oldset;
-    int i;
-
-    if (ctxt == NULL) return;
-
-    SKIP_BLANKS;
-    if (CUR != '[') {
-	XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
-    }
-    NEXT;
-    SKIP_BLANKS;
-
-    /*
-     * Extract the old set, and then evaluate the result of the
-     * expression for all the element in the set. use it to grow
-     * up a new set.
-     */
-    CHECK_TYPE(XPATH_LOCATIONSET);
-    obj = valuePop(ctxt);
-    oldset = obj->user;
-    ctxt->context->node = NULL;
-
-    if ((oldset == NULL) || (oldset->locNr == 0)) {
-	ctxt->context->contextSize = 0;
-	ctxt->context->proximityPosition = 0;
-	xmlXPathEvalExpr(ctxt);
-	res = valuePop(ctxt);
-	if (res != NULL)
-	    xmlXPathFreeObject(res);
-	valuePush(ctxt, obj);
-	CHECK_ERROR;
-    } else {
-	/*
-	 * Save the expression pointer since we will have to evaluate
-	 * it multiple times. Initialize the new set.
-	 */
-        cur = ctxt->cur;
-	newset = xmlXPtrLocationSetCreate(NULL);
-
-        for (i = 0; i < oldset->locNr; i++) {
-	    ctxt->cur = cur;
-
-	    /*
-	     * Run the evaluation with a node list made of a single item
-	     * in the nodeset.
-	     */
-	    ctxt->context->node = oldset->locTab[i]->user;
-	    tmp = xmlXPathNewNodeSet(ctxt->context->node);
-	    valuePush(ctxt, tmp);
-	    ctxt->context->contextSize = oldset->locNr;
-	    ctxt->context->proximityPosition = i + 1;
-
-	    xmlXPathEvalExpr(ctxt);
-	    CHECK_ERROR;
-
-	    /*
-	     * The result of the evaluation need to be tested to
-	     * decided whether the filter succeeded or not
-	     */
-	    res = valuePop(ctxt);
-	    if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
-	        xmlXPtrLocationSetAdd(newset,
-			xmlXPathObjectCopy(oldset->locTab[i]));
-	    }
-
-	    /*
-	     * Cleanup
-	     */
-	    if (res != NULL)
-		xmlXPathFreeObject(res);
-	    if (ctxt->value == tmp) {
-		res = valuePop(ctxt);
-		xmlXPathFreeObject(res);
-	    }
-
-	    ctxt->context->node = NULL;
-	}
-
-	/*
-	 * The result is used as the new evaluation set.
-	 */
-	xmlXPathFreeObject(obj);
-	ctxt->context->node = NULL;
-	ctxt->context->contextSize = -1;
-	ctxt->context->proximityPosition = -1;
-	valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-    }
-    if (CUR != ']') {
-	XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
-    }
-
-    NEXT;
-    SKIP_BLANKS;
-}
-
-#define bottom_xpointer
-#include "elfgcchack.h"
-#endif
-
diff --git a/src/third_party/libxml/src/xzlib.c b/src/third_party/libxml/src/xzlib.c
deleted file mode 100644
index 782957f..0000000
--- a/src/third_party/libxml/src/xzlib.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/**
- * xzlib.c: front end for the transparent suport of lzma compression
- *          at the I/O layer, based on an example file from lzma project
- *
- * See Copyright for the status of this software.
- *
- * Anders F Bjorklund <afb@users.sourceforge.net>
- */
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_LZMA_ENABLED
-
-#include <string.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#ifdef HAVE_LZMA_H
-#include <lzma.h>
-#endif
-
-#include "xzlib.h"
-#include <libxml/xmlmemory.h>
-
-/* values for xz_state how */
-#define LOOK 0                  /* look for a gzip/lzma header */
-#define COPY 1                  /* copy input directly */
-#define GZIP 2                  /* decompress a gzip stream */
-#define LZMA 3                  /* decompress a lzma stream */
-
-/* internal lzma file state data structure */
-typedef struct {
-    int mode;                   /* see lzma modes above */
-    int fd;                     /* file descriptor */
-    char *path;                 /* path or fd for error messages */
-    uint64_t pos;               /* current position in uncompressed data */
-    unsigned int size;          /* buffer size, zero if not allocated yet */
-    unsigned int want;          /* requested buffer size, default is BUFSIZ */
-    unsigned char *in;          /* input buffer */
-    unsigned char *out;         /* output buffer (double-sized when reading) */
-    unsigned char *next;        /* next output data to deliver or write */
-    unsigned int have;          /* amount of output data unused at next */
-    int eof;                    /* true if end of input file reached */
-    uint64_t start;             /* where the lzma data started, for rewinding */
-    uint64_t raw;               /* where the raw data started, for seeking */
-    int how;                    /* 0: get header, 1: copy, 2: decompress */
-    int direct;                 /* true if last read direct, false if lzma */
-    /* seek request */
-    uint64_t skip;              /* amount to skip (already rewound if backwards) */
-    int seek;                   /* true if seek request pending */
-    /* error information */
-    int err;                    /* error code */
-    char *msg;                  /* error message */
-    /* lzma stream */
-    int init;                   /* is the iniflate stream initialized */
-    lzma_stream strm;           /* stream structure in-place (not a pointer) */
-    char padding1[32];          /* padding allowing to cope with possible
-                                   extensions of above structure without
-				   too much side effect */
-#ifdef HAVE_ZLIB_H
-    /* zlib inflate or deflate stream */
-    z_stream zstrm;             /* stream structure in-place (not a pointer) */
-#endif
-    char padding2[32];          /* padding allowing to cope with possible
-                                   extensions of above structure without
-				   too much side effect */
-} xz_state, *xz_statep;
-
-static void
-xz_error(xz_statep state, int err, const char *msg)
-{
-    /* free previously allocated message and clear */
-    if (state->msg != NULL) {
-        if (state->err != LZMA_MEM_ERROR)
-            xmlFree(state->msg);
-        state->msg = NULL;
-    }
-
-    /* set error code, and if no message, then done */
-    state->err = err;
-    if (msg == NULL)
-        return;
-
-    /* for an out of memory error, save as static string */
-    if (err == LZMA_MEM_ERROR) {
-        state->msg = (char *) msg;
-        return;
-    }
-
-    /* construct error message with path */
-    if ((state->msg =
-         xmlMalloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
-        state->err = LZMA_MEM_ERROR;
-        state->msg = (char *) "out of memory";
-        return;
-    }
-    strcpy(state->msg, state->path);
-    strcat(state->msg, ": ");
-    strcat(state->msg, msg);
-    return;
-}
-
-static void
-xz_reset(xz_statep state)
-{
-    state->have = 0;            /* no output data available */
-    state->eof = 0;             /* not at end of file */
-    state->how = LOOK;          /* look for gzip header */
-    state->direct = 1;          /* default for empty file */
-    state->seek = 0;            /* no seek request pending */
-    xz_error(state, LZMA_OK, NULL);     /* clear error */
-    state->pos = 0;             /* no uncompressed data yet */
-    state->strm.avail_in = 0;   /* no input data yet */
-#ifdef HAVE_ZLIB_H
-    state->zstrm.avail_in = 0;  /* no input data yet */
-#endif
-}
-
-static xzFile
-xz_open(const char *path, int fd, const char *mode ATTRIBUTE_UNUSED)
-{
-    xz_statep state;
-
-    /* allocate xzFile structure to return */
-    state = xmlMalloc(sizeof(xz_state));
-    if (state == NULL)
-        return NULL;
-    state->size = 0;            /* no buffers allocated yet */
-    state->want = BUFSIZ;       /* requested buffer size */
-    state->msg = NULL;          /* no error message yet */
-    state->init = 0;            /* initialization of zlib data */
-
-    /* save the path name for error messages */
-    state->path = xmlMalloc(strlen(path) + 1);
-    if (state->path == NULL) {
-        xmlFree(state);
-        return NULL;
-    }
-    strcpy(state->path, path);
-
-    /* open the file with the appropriate mode (or just use fd) */
-    state->fd = fd != -1 ? fd : open(path,
-#ifdef O_LARGEFILE
-                                     O_LARGEFILE |
-#endif
-#ifdef O_BINARY
-                                     O_BINARY |
-#endif
-                                     O_RDONLY, 0666);
-    if (state->fd == -1) {
-        xmlFree(state->path);
-        xmlFree(state);
-        return NULL;
-    }
-
-    /* save the current position for rewinding (only if reading) */
-    state->start = lseek(state->fd, 0, SEEK_CUR);
-    if (state->start == (uint64_t) - 1)
-        state->start = 0;
-
-    /* initialize stream */
-    xz_reset(state);
-
-    /* return stream */
-    return (xzFile) state;
-}
-
-static int
-xz_compressed(xzFile f) {
-    xz_statep state;
-
-    if (f == NULL)
-        return(-1);
-    state = (xz_statep) f;
-    if (state->init <= 0)
-        return(-1);
-
-    switch (state->how) {
-        case COPY:
-	    return(0);
-	case GZIP:
-	case LZMA:
-	    return(1);
-    }
-    return(-1);
-}
-
-xzFile
-__libxml2_xzopen(const char *path, const char *mode)
-{
-    return xz_open(path, -1, mode);
-}
-
-int
-__libxml2_xzcompressed(xzFile f) {
-    return xz_compressed(f);
-}
-
-xzFile
-__libxml2_xzdopen(int fd, const char *mode)
-{
-    char *path;                 /* identifier for error messages */
-    xzFile xz;
-
-    if (fd == -1 || (path = xmlMalloc(7 + 3 * sizeof(int))) == NULL)
-        return NULL;
-    sprintf(path, "<fd:%d>", fd);       /* for debugging */
-    xz = xz_open(path, fd, mode);
-    xmlFree(path);
-    return xz;
-}
-
-static int
-xz_load(xz_statep state, unsigned char *buf, unsigned int len,
-        unsigned int *have)
-{
-    int ret;
-
-    *have = 0;
-    do {
-        ret = read(state->fd, buf + *have, len - *have);
-        if (ret <= 0)
-            break;
-        *have += ret;
-    } while (*have < len);
-    if (ret < 0) {
-        xz_error(state, -1, strerror(errno));
-        return -1;
-    }
-    if (ret == 0)
-        state->eof = 1;
-    return 0;
-}
-
-static int
-xz_avail(xz_statep state)
-{
-    lzma_stream *strm = &(state->strm);
-
-    if (state->err != LZMA_OK)
-        return -1;
-    if (state->eof == 0) {
-        /* avail_in is size_t, which is not necessary sizeof(unsigned) */
-        unsigned tmp = strm->avail_in;
-
-        if (xz_load(state, state->in, state->size, &tmp) == -1) {
-            strm->avail_in = tmp;
-            return -1;
-        }
-        strm->avail_in = tmp;
-        strm->next_in = state->in;
-    }
-    return 0;
-}
-
-#ifdef HAVE_ZLIB_H
-static int
-xz_avail_zstrm(xz_statep state)
-{
-    int ret;
-    state->strm.avail_in = state->zstrm.avail_in;
-    state->strm.next_in = state->zstrm.next_in;
-    ret = xz_avail(state);
-    state->zstrm.avail_in = (uInt) state->strm.avail_in;
-    state->zstrm.next_in = (Bytef *) state->strm.next_in;
-    return ret;
-}
-#endif
-
-static int
-is_format_xz(xz_statep state)
-{
-    lzma_stream *strm = &(state->strm);
-
-    return strm->avail_in >= 6 && memcmp(state->in, "\3757zXZ", 6) == 0;
-}
-
-static int
-is_format_lzma(xz_statep state)
-{
-    lzma_stream *strm = &(state->strm);
-
-    lzma_filter filter;
-    lzma_options_lzma *opt;
-    uint32_t dict_size;
-    uint64_t uncompressed_size;
-    size_t i;
-
-    if (strm->avail_in < 13)
-        return 0;
-
-    filter.id = LZMA_FILTER_LZMA1;
-    if (lzma_properties_decode(&filter, NULL, state->in, 5) != LZMA_OK)
-        return 0;
-
-    opt = filter.options;
-    dict_size = opt->dict_size;
-    free(opt); /* we can't use xmlFree on a string returned by zlib */
-
-    /* A hack to ditch tons of false positives: We allow only dictionary
-     * sizes that are 2^n or 2^n + 2^(n-1) or UINT32_MAX. LZMA_Alone
-     * created only files with 2^n, but accepts any dictionary size.
-     * If someone complains, this will be reconsidered.
-     */
-    if (dict_size != UINT32_MAX) {
-        uint32_t d = dict_size - 1;
-
-        d |= d >> 2;
-        d |= d >> 3;
-        d |= d >> 4;
-        d |= d >> 8;
-        d |= d >> 16;
-        ++d;
-        if (d != dict_size || dict_size == 0)
-            return 0;
-    }
-
-    /* Another hack to ditch false positives: Assume that if the
-     * uncompressed size is known, it must be less than 256 GiB.
-     * Again, if someone complains, this will be reconsidered.
-     */
-    uncompressed_size = 0;
-    for (i = 0; i < 8; ++i)
-        uncompressed_size |= (uint64_t) (state->in[5 + i]) << (i * 8);
-
-    if (uncompressed_size != UINT64_MAX
-        && uncompressed_size > (UINT64_C(1) << 38))
-        return 0;
-
-    return 1;
-}
-
-#ifdef HAVE_ZLIB_H
-
-/* Get next byte from input, or -1 if end or error. */
-#define NEXT() ((strm->avail_in == 0 && xz_avail(state) == -1) ? -1 : \
-                (strm->avail_in == 0 ? -1 : \
-                 (strm->avail_in--, *(strm->next_in)++)))
-/* Same thing, but from zstrm */
-#define NEXTZ() ((strm->avail_in == 0 && xz_avail_zstrm(state) == -1) ? -1 : \
-                (strm->avail_in == 0 ? -1 : \
-                 (strm->avail_in--, *(strm->next_in)++)))
-
-/* Get a four-byte little-endian integer and return 0 on success and the value
-   in *ret.  Otherwise -1 is returned and *ret is not modified. */
-static int
-gz_next4(xz_statep state, unsigned long *ret)
-{
-    int ch;
-    unsigned long val;
-    z_streamp strm = &(state->zstrm);
-
-    val = NEXTZ();
-    val += (unsigned) NEXTZ() << 8;
-    val += (unsigned long) NEXTZ() << 16;
-    ch = NEXTZ();
-    if (ch == -1)
-        return -1;
-    val += (unsigned long) ch << 24;
-    *ret = val;
-    return 0;
-}
-#endif
-
-static int
-xz_head(xz_statep state)
-{
-    lzma_stream *strm = &(state->strm);
-    lzma_stream init = LZMA_STREAM_INIT;
-    int flags;
-    unsigned len;
-
-    /* allocate read buffers and inflate memory */
-    if (state->size == 0) {
-        /* allocate buffers */
-        state->in = xmlMalloc(state->want);
-        state->out = xmlMalloc(state->want << 1);
-        if (state->in == NULL || state->out == NULL) {
-            if (state->out != NULL)
-                xmlFree(state->out);
-            if (state->in != NULL)
-                xmlFree(state->in);
-            xz_error(state, LZMA_MEM_ERROR, "out of memory");
-            return -1;
-        }
-        state->size = state->want;
-
-        /* allocate decoder memory */
-        state->strm = init;
-        state->strm.avail_in = 0;
-        state->strm.next_in = NULL;
-        if (lzma_auto_decoder(&state->strm, UINT64_MAX, 0) != LZMA_OK) {
-            xmlFree(state->out);
-            xmlFree(state->in);
-            state->size = 0;
-            xz_error(state, LZMA_MEM_ERROR, "out of memory");
-            return -1;
-        }
-#ifdef HAVE_ZLIB_H
-        /* allocate inflate memory */
-        state->zstrm.zalloc = Z_NULL;
-        state->zstrm.zfree = Z_NULL;
-        state->zstrm.opaque = Z_NULL;
-        state->zstrm.avail_in = 0;
-        state->zstrm.next_in = Z_NULL;
-        if (state->init == 0) {
-            if (inflateInit2(&(state->zstrm), -15) != Z_OK) {/* raw inflate */
-                xmlFree(state->out);
-                xmlFree(state->in);
-                state->size = 0;
-                xz_error(state, LZMA_MEM_ERROR, "out of memory");
-                return -1;
-            }
-            state->init = 1;
-        }
-#endif
-    }
-
-    /* get some data in the input buffer */
-    if (strm->avail_in == 0) {
-        if (xz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in == 0)
-            return 0;
-    }
-
-    /* look for the xz magic header bytes */
-    if (is_format_xz(state) || is_format_lzma(state)) {
-        state->how = LZMA;
-        state->direct = 0;
-        return 0;
-    }
-#ifdef HAVE_ZLIB_H
-    /* look for the gzip magic header bytes 31 and 139 */
-    if (strm->next_in[0] == 31) {
-        strm->avail_in--;
-        strm->next_in++;
-        if (strm->avail_in == 0 && xz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in && strm->next_in[0] == 139) {
-            /* we have a gzip header, woo hoo! */
-            strm->avail_in--;
-            strm->next_in++;
-
-            /* skip rest of header */
-            if (NEXT() != 8) {  /* compression method */
-                xz_error(state, LZMA_DATA_ERROR,
-                         "unknown compression method");
-                return -1;
-            }
-            flags = NEXT();
-            if (flags & 0xe0) { /* reserved flag bits */
-                xz_error(state, LZMA_DATA_ERROR,
-                         "unknown header flags set");
-                return -1;
-            }
-            NEXT();             /* modification time */
-            NEXT();
-            NEXT();
-            NEXT();
-            NEXT();             /* extra flags */
-            NEXT();             /* operating system */
-            if (flags & 4) {    /* extra field */
-                len = (unsigned) NEXT();
-                len += (unsigned) NEXT() << 8;
-                while (len--)
-                    if (NEXT() < 0)
-                        break;
-            }
-            if (flags & 8)      /* file name */
-                while (NEXT() > 0) ;
-            if (flags & 16)     /* comment */
-                while (NEXT() > 0) ;
-            if (flags & 2) {    /* header crc */
-                NEXT();
-                NEXT();
-            }
-            /* an unexpected end of file is not checked for here -- it will be
-             * noticed on the first request for uncompressed data */
-
-            /* set up for decompression */
-            inflateReset(&state->zstrm);
-            state->zstrm.adler = crc32(0L, Z_NULL, 0);
-            state->how = GZIP;
-            state->direct = 0;
-            return 0;
-        } else {
-            /* not a gzip file -- save first byte (31) and fall to raw i/o */
-            state->out[0] = 31;
-            state->have = 1;
-        }
-    }
-#endif
-
-    /* doing raw i/o, save start of raw data for seeking, copy any leftover
-     * input to output -- this assumes that the output buffer is larger than
-     * the input buffer, which also assures space for gzungetc() */
-    state->raw = state->pos;
-    state->next = state->out;
-    if (strm->avail_in) {
-        memcpy(state->next + state->have, strm->next_in, strm->avail_in);
-        state->have += strm->avail_in;
-        strm->avail_in = 0;
-    }
-    state->how = COPY;
-    state->direct = 1;
-    return 0;
-}
-
-static int
-xz_decomp(xz_statep state)
-{
-    int ret;
-    unsigned had;
-    unsigned long crc, len;
-    lzma_stream *strm = &(state->strm);
-
-    lzma_action action = LZMA_RUN;
-
-    /* fill output buffer up to end of deflate stream */
-    had = strm->avail_out;
-    do {
-        /* get more input for inflate() */
-        if (strm->avail_in == 0 && xz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in == 0) {
-            xz_error(state, LZMA_DATA_ERROR, "unexpected end of file");
-            return -1;
-        }
-        if (state->eof)
-            action = LZMA_FINISH;
-
-        /* decompress and handle errors */
-#ifdef HAVE_ZLIB_H
-        if (state->how == GZIP) {
-            state->zstrm.avail_in = (uInt) state->strm.avail_in;
-            state->zstrm.next_in = (Bytef *) state->strm.next_in;
-            state->zstrm.avail_out = (uInt) state->strm.avail_out;
-            state->zstrm.next_out = (Bytef *) state->strm.next_out;
-            ret = inflate(&state->zstrm, Z_NO_FLUSH);
-            if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
-                xz_error(state, Z_STREAM_ERROR,
-                         "internal error: inflate stream corrupt");
-                return -1;
-            }
-            if (ret == Z_MEM_ERROR)
-                ret = LZMA_MEM_ERROR;
-            if (ret == Z_DATA_ERROR)
-                ret = LZMA_DATA_ERROR;
-            if (ret == Z_STREAM_END)
-                ret = LZMA_STREAM_END;
-            state->strm.avail_in = state->zstrm.avail_in;
-            state->strm.next_in = state->zstrm.next_in;
-            state->strm.avail_out = state->zstrm.avail_out;
-            state->strm.next_out = state->zstrm.next_out;
-        } else                  /* state->how == LZMA */
-#endif
-            ret = lzma_code(strm, action);
-        if (ret == LZMA_MEM_ERROR) {
-            xz_error(state, LZMA_MEM_ERROR, "out of memory");
-            return -1;
-        }
-        if (ret == LZMA_DATA_ERROR) {
-            xz_error(state, LZMA_DATA_ERROR, "compressed data error");
-            return -1;
-        }
-        if (ret == LZMA_PROG_ERROR) {
-            xz_error(state, LZMA_PROG_ERROR, "compression error");
-            return -1;
-        }
-    } while (strm->avail_out && ret != LZMA_STREAM_END);
-
-    /* update available output and crc check value */
-    state->have = had - strm->avail_out;
-    state->next = strm->next_out - state->have;
-#ifdef HAVE_ZLIB_H
-    state->zstrm.adler =
-        crc32(state->zstrm.adler, state->next, state->have);
-#endif
-
-    if (ret == LZMA_STREAM_END) {
-#ifdef HAVE_ZLIB_H
-        if (state->how == GZIP) {
-            if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {
-                xz_error(state, LZMA_DATA_ERROR, "unexpected end of file");
-                return -1;
-            }
-            if (crc != state->zstrm.adler) {
-                xz_error(state, LZMA_DATA_ERROR, "incorrect data check");
-                return -1;
-            }
-            if (len != (state->zstrm.total_out & 0xffffffffL)) {
-                xz_error(state, LZMA_DATA_ERROR, "incorrect length check");
-                return -1;
-            }
-            state->strm.avail_in = 0;
-            state->strm.next_in = NULL;
-            state->strm.avail_out = 0;
-            state->strm.next_out = NULL;
-        } else
-#endif
-        if (strm->avail_in != 0 || !state->eof) {
-            xz_error(state, LZMA_DATA_ERROR, "trailing garbage");
-            return -1;
-        }
-        state->how = LOOK;      /* ready for next stream, once have is 0 (leave
-                                 * state->direct unchanged to remember how) */
-    }
-
-    /* good decompression */
-    return 0;
-}
-
-static int
-xz_make(xz_statep state)
-{
-    lzma_stream *strm = &(state->strm);
-
-    if (state->how == LOOK) {   /* look for lzma / gzip header */
-        if (xz_head(state) == -1)
-            return -1;
-        if (state->have)        /* got some data from xz_head() */
-            return 0;
-    }
-    if (state->how == COPY) {   /* straight copy */
-        if (xz_load(state, state->out, state->size << 1, &(state->have)) ==
-            -1)
-            return -1;
-        state->next = state->out;
-    } else if (state->how == LZMA || state->how == GZIP) {      /* decompress */
-        strm->avail_out = state->size << 1;
-        strm->next_out = state->out;
-        if (xz_decomp(state) == -1)
-            return -1;
-    }
-    return 0;
-}
-
-static int
-xz_skip(xz_statep state, uint64_t len)
-{
-    unsigned n;
-
-    /* skip over len bytes or reach end-of-file, whichever comes first */
-    while (len)
-        /* skip over whatever is in output buffer */
-        if (state->have) {
-            n = (uint64_t) state->have > len ?
-                (unsigned) len : state->have;
-            state->have -= n;
-            state->next += n;
-            state->pos += n;
-            len -= n;
-        }
-
-    /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && state->strm.avail_in == 0)
-            break;
-
-    /* need more data to skip -- load up output buffer */
-        else {
-            /* get more output, looking for header if required */
-            if (xz_make(state) == -1)
-                return -1;
-        }
-    return 0;
-}
-
-int
-__libxml2_xzread(xzFile file, void *buf, unsigned len)
-{
-    unsigned got, n;
-    xz_statep state;
-    lzma_stream *strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (xz_statep) file;
-    strm = &(state->strm);
-
-    /* check that we're reading and that there's no error */
-    if (state->err != LZMA_OK)
-        return -1;
-
-    /* since an int is returned, make sure len fits in one, otherwise return
-     * with an error (this avoids the flaw in the interface) */
-    if ((int) len < 0) {
-        xz_error(state, LZMA_BUF_ERROR,
-                 "requested length does not fit in int");
-        return -1;
-    }
-
-    /* if len is zero, avoid unnecessary operations */
-    if (len == 0)
-        return 0;
-
-    /* process a skip request */
-    if (state->seek) {
-        state->seek = 0;
-        if (xz_skip(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* get len bytes to buf, or less than len if at the end */
-    got = 0;
-    do {
-        /* first just try copying data from the output buffer */
-        if (state->have) {
-            n = state->have > len ? len : state->have;
-            memcpy(buf, state->next, n);
-            state->next += n;
-            state->have -= n;
-        }
-
-        /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && strm->avail_in == 0)
-            break;
-
-        /* need output data -- for small len or new stream load up our output
-         * buffer */
-        else if (state->how == LOOK || len < (state->size << 1)) {
-            /* get more output, looking for header if required */
-            if (xz_make(state) == -1)
-                return -1;
-            continue;           /* no progress yet -- go back to memcpy() above */
-            /* the copy above assures that we will leave with space in the
-             * output buffer, allowing at least one gzungetc() to succeed */
-        }
-
-        /* large len -- read directly into user buffer */
-        else if (state->how == COPY) {  /* read directly */
-            if (xz_load(state, buf, len, &n) == -1)
-                return -1;
-        }
-
-        /* large len -- decompress directly into user buffer */
-        else {                  /* state->how == LZMA */
-            strm->avail_out = len;
-            strm->next_out = buf;
-            if (xz_decomp(state) == -1)
-                return -1;
-            n = state->have;
-            state->have = 0;
-        }
-
-        /* update progress */
-        len -= n;
-        buf = (char *) buf + n;
-        got += n;
-        state->pos += n;
-    } while (len);
-
-    /* return number of bytes read into user buffer (will fit in int) */
-    return (int) got;
-}
-
-int
-__libxml2_xzclose(xzFile file)
-{
-    int ret;
-    xz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return LZMA_DATA_ERROR;
-    state = (xz_statep) file;
-
-    /* free memory and close file */
-    if (state->size) {
-        lzma_end(&(state->strm));
-#ifdef HAVE_ZLIB_H
-        if (state->init == 1)
-            inflateEnd(&(state->zstrm));
-        state->init = 0;
-#endif
-        xmlFree(state->out);
-        xmlFree(state->in);
-    }
-    xmlFree(state->path);
-    ret = close(state->fd);
-    xmlFree(state);
-    return ret ? ret : LZMA_OK;
-}
-#endif /* LIBXML_LZMA_ENABLED */
diff --git a/src/third_party/libxml/win32/include/libxml/xmlversion.h b/src/third_party/libxml/win32/include/libxml/xmlversion.h
index 337ee3b..ef885be 100644
--- a/src/third_party/libxml/win32/include/libxml/xmlversion.h
+++ b/src/third_party/libxml/win32/include/libxml/xmlversion.h
@@ -210,7 +210,7 @@
  *
  * Whether the deprecated APIs are compiled in for compatibility
  */
-#if 1
+#if 0
 #define LIBXML_LEGACY_ENABLED
 #endif
 
@@ -219,7 +219,7 @@
  *
  * Whether the Canonicalization support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_C14N_ENABLED
 #endif
 
@@ -228,7 +228,7 @@
  *
  * Whether the Catalog support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_CATALOG_ENABLED
 #endif
 
@@ -237,7 +237,7 @@
  *
  * Whether the SGML Docbook support is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DOCB_ENABLED
 #endif
 
@@ -255,7 +255,7 @@
  *
  * Whether XPointer is configured in
  */
-#if 1
+#if 0
 #define LIBXML_XPTR_ENABLED
 #endif
 
@@ -300,7 +300,7 @@
  *
  * Whether Debugging module is configured in
  */
-#if 1
+#if 0
 #define LIBXML_DEBUG_ENABLED
 #endif
 
@@ -327,7 +327,7 @@
  *
  * Whether the Unicode related interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_UNICODE_ENABLED
 #endif
 
@@ -336,7 +336,7 @@
  *
  * Whether the regular expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_REGEXP_ENABLED
 #endif
 
@@ -345,7 +345,7 @@
  *
  * Whether the automata interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_AUTOMATA_ENABLED
 #endif
 
@@ -354,7 +354,7 @@
  *
  * Whether the formal expressions interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_EXPR_ENABLED
 #endif
 
@@ -372,7 +372,7 @@
  *
  * Whether the Schematron validation interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_SCHEMATRON_ENABLED
 #endif
 
@@ -381,7 +381,7 @@
  *
  * Whether the module interfaces are compiled in
  */
-#if 1
+#if 0
 #define LIBXML_MODULES_ENABLED
 /**
  * LIBXML_MODULE_EXTENSION:
diff --git a/src/third_party/zlib/BUILD.gn b/src/third_party/zlib/BUILD.gn
index d625a23..ea31201 100644
--- a/src/third_party/zlib/BUILD.gn
+++ b/src/third_party/zlib/BUILD.gn
@@ -117,7 +117,7 @@
       "contrib/minizip/iowin32.h",
     ]
   }
-  if (is_mac || is_ios || is_android) {
+  if (is_mac || is_ios || is_android || is_nacl) {
     # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We
     # use fopen, ftell, and fseek instead on these systems.
     defines = [ "USE_FILE32API" ]
diff --git a/src/third_party/zlib/google/zip_reader_unittest.cc b/src/third_party/zlib/google/zip_reader_unittest.cc
index 4e023dc..3056aba 100644
--- a/src/third_party/zlib/google/zip_reader_unittest.cc
+++ b/src/third_party/zlib/google/zip_reader_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -188,7 +189,7 @@
 
   base::ScopedTempDir temp_dir_;
 
-  base::MessageLoop message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_;
 };
 
 TEST_F(ZipReaderTest, Open_ValidZipFile) {
diff --git a/src/tools/OWNERS b/src/tools/OWNERS
index ac607d4..f096352 100644
--- a/src/tools/OWNERS
+++ b/src/tools/OWNERS
@@ -9,6 +9,12 @@
 scottmg@chromium.org
 thakis@chromium.org
 
+# These aren't actually great contact points for this directory, but
+# changes in this directory are rare and most changes happen in better-owned
+# subdirectories.
+#
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
 
 per-file bisect*.py=anantha@chromium.org
 per-file bisect*.py=prasadv@chromium.org
diff --git a/src/tools/accessibility/rebase_dump_accessibility_tree_test.py b/src/tools/accessibility/rebase_dump_accessibility_tree_test.py
index 837d5b8..ba5162c 100755
--- a/src/tools/accessibility/rebase_dump_accessibility_tree_test.py
+++ b/src/tools/accessibility/rebase_dump_accessibility_tree_test.py
@@ -22,6 +22,7 @@
 import sys
 import time
 import urllib
+import urlparse
 
 # Load BeautifulSoup. It's checked into two places in the Chromium tree.
 sys.path.append('third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/')
@@ -44,11 +45,14 @@
   '''Parse given the name of a failing trybot and the url of its build log.'''
   print
   print "Checking trybot: %s" % name
-  url = url.replace('/builders/', '/json/builders/')
+  parse_result = urlparse.urlsplit(url)
+  url = "http://chrome-build-extract.appspot.com" + parse_result.path + "?json=1"
   response = urllib.urlopen(url)
-  if response.getcode() == 200:
-    jsondata = response.read()
+  if response.getcode() != 200:
+    print 'Error code %d accessing trybot url: %s' % (response.getcode(), url)
+    return
 
+  jsondata = response.read()
   if not jsondata:
     print "Failed to fetch from: " + url
     return
@@ -69,15 +73,16 @@
       print "Found content_browsertests logs"
       for log in step["logs"]:
         (log_name, log_url) = log
-        if log_name == "stdio":
+        if log_name == "stdio" or log_name == "swarming.summary" or log_name == "step_metadata":
           continue
         log_url += '/text'
         log_response = urllib.urlopen(log_url)
         if log_response.getcode() == 200:
           logdata = log_response.read()
+          print "Parsing test log: %s" % log_name
           ParseLog(logdata)
         else:
-          print "Failed to fetch test log data from: " + url
+          print "Error code %d when fetching test log data from url: %s" % (log_response.getcode(), url)
 
 def Fix(line):
   if line[:3] == '@@@':
diff --git a/src/tools/binary_size/README.md b/src/tools/binary_size/README.md
index c3f86ec..54ddf40 100644
--- a/src/tools/binary_size/README.md
+++ b/src/tools/binary_size/README.md
@@ -1,17 +1,17 @@
 # map2size.py
 
-Parses a linker .map(.gz) file and outputs the result as a .size(.gz) file.
+Parses a linker .map file and outputs the result as a .size file.
 
 ## Example Usage:
 
     # Android:
     gn gen out/Release --args='target_os="android" is_official_build=true'
     ninja -C out/Release -j 1000 libchrome.so
-    tools/binary_size/map2size.py out/Release/lib.unstripped/libchrome.so.map.gz chrome.size -v
+    tools/binary_size/map2size.py out/Release/lib.unstripped/libchrome.so chrome.size -v
     # Linux:
     gn gen out/Release --args='is_official_build=true'
     ninja -C out/Release -j 1000 chrome
-    tools/binary_size/map2size.py out/Release/chrome.map.gz chrome.size -v
+    tools/binary_size/map2size.py out/Release/chrome chrome.size -v
 
 # create_html_breakdown.py
 
@@ -34,6 +34,18 @@
     # Enters a Python REPL (it will print more guidance).
     tools/binary_size/console.py chrome.size
 
+# diagnose_apk_bloat.py
+
+Determine the cause of binary size bloat for a patch.
+
+## Example Usage:
+
+    # Sync, build, and store MonochromePublic.apk for HEAD and HEAD^.
+    tools/binary_size/diagnose_apk_bloat.py -v
+
+    # Display detailed usage info (there are many options).
+    tools/binary_size/diagnose_apk_bloat.py -h
+
 # Roadmap:
 
   Tracked in https://crbug.com/681694
@@ -45,13 +57,15 @@
       * Per-class / namespace size (no way to distinguish class vs namespace).
       * Per-Chrome package (Chrome-specific grouping. e.g. name prefixes).
       * CSV output (for pasting into a spreadsheet).
-      * Allow Print() to not sort.
   1. More create_html_breakdown.py features:
       * Break down by other groupings (e.g. create from nested `SymbolGroups`)
   1. More `map2size.py` features:
       * Find out more about 0xffffffffffffffff addresses, and why such large
         gaps exist after them.
       * Use nm to get the full list of symbols that share the same address.
+  1. More diagnose_apk_bloat.py features:
+      * Add diffing functionality to see diff stats for two commits.
+      * Add --cloud option for using artifacts from perf builders.
   1. Integrate with `resource_sizes.py` so that it tracks size of major
      components separately: chrome vs blink vs skia vs v8.
   1. Speed up some steps (like normalizing names) via multiprocessing.
diff --git a/src/tools/binary_size/console.py b/src/tools/binary_size/console.py
index 7bf8776..b354a68 100755
--- a/src/tools/binary_size/console.py
+++ b/src/tools/binary_size/console.py
@@ -28,7 +28,9 @@
 import file_format
 import helpers
 import map2size
+import match_util
 import models
+import paths
 
 
 # Number of lines before using less for Print().
@@ -42,7 +44,6 @@
     proc = subprocess.Popen(['less'], stdin=subprocess.PIPE, stdout=sys.stdout)
     yield proc.stdin
     proc.stdin.close()
-
     proc.wait()
   except IOError:
     pass  # Happens when less is quit before all data is written.
@@ -50,88 +51,156 @@
     pass  # Assume used to break out of less.
 
 
+def _WriteToStream(lines, use_pager=None, to_file=None):
+  if to_file:
+    use_pager = False
+  if use_pager is None and sys.stdout.isatty():
+    # Does not take into account line-wrapping... Oh well.
+    first_lines = list(itertools.islice(lines, _THRESHOLD_FOR_PAGER))
+    if len(first_lines) == _THRESHOLD_FOR_PAGER:
+      use_pager = True
+    lines = itertools.chain(first_lines, lines)
+
+  if use_pager:
+    with _LessPipe() as stdin:
+      describe.WriteLines(lines, stdin.write)
+  elif to_file:
+    with open(to_file, 'w') as file_obj:
+      describe.WriteLines(lines, file_obj.write)
+  else:
+    describe.WriteLines(lines, sys.stdout.write)
+
+
 class _Session(object):
   _readline_initialized = False
 
-  def __init__(self, extra_vars):
+  def __init__(self, size_infos, lazy_paths):
     self._variables = {
         'Print': self._PrintFunc,
-        'Write': self._WriteFunc,
         'Diff': models.Diff,
+        'Disassemble': self._DisassembleFunc,
+        'ExpandRegex': match_util.ExpandRegexIdentifierPlaceholder,
+        'ShowExamples': self._ShowExamplesFunc,
     }
-    self._variables.update(extra_vars)
+    self._lazy_paths = lazy_paths
+    self._size_infos = size_infos
 
-  def _PrintFunc(self, obj, verbose=False, use_pager=None):
+    if len(size_infos) == 1:
+      self._variables['size_info'] = size_infos[0]
+      self._variables['symbols'] = size_infos[0].symbols
+    else:
+      for i, size_info in enumerate(size_infos):
+        self._variables['size_info%d' % (i + 1)] = size_info
+        self._variables['symbols%d' % (i + 1)] = size_info.symbols
+
+  def _PrintFunc(self, obj, verbose=False, use_pager=None, to_file=None):
     """Prints out the given Symbol / SymbolGroup / SymbolDiff / SizeInfo.
 
     Args:
       obj: The object to be printed.
-      use_pager: Whether to pipe output through `less`. Ignored when |obj| is a
-          Symbol.
+      verbose: Show more detailed output.
+      use_pager: Pipe output through `less`. Ignored when |obj| is a Symbol.
+          default is to automatically pipe when output is long.
+      to_file: Rather than print to stdio, write to the given file.
     """
     lines = describe.GenerateLines(obj, verbose=verbose)
-    if use_pager is None and sys.stdout.isatty():
-      # Does not take into account line-wrapping... Oh well.
-      first_lines = list(itertools.islice(lines, _THRESHOLD_FOR_PAGER))
-      if len(first_lines) == _THRESHOLD_FOR_PAGER:
-        use_pager = True
-      lines = itertools.chain(first_lines, lines)
+    _WriteToStream(lines, use_pager=use_pager, to_file=to_file)
 
-    if use_pager:
-      with _LessPipe() as stdin:
-        describe.WriteLines(lines, stdin.write)
+  def _ElfPathForSymbol(self, symbol):
+    size_info = None
+    for size_info in self._size_infos:
+      if symbol in size_info.symbols:
+        break
     else:
-      describe.WriteLines(lines, sys.stdout.write)
+      assert False, 'Symbol does not belong to a size_info.'
 
+    filename = size_info.metadata.get(models.METADATA_ELF_FILENAME)
+    output_dir = self._lazy_paths.output_directory or ''
+    path = os.path.normpath(os.path.join(output_dir, filename))
 
-  def _WriteFunc(self, obj, path, verbose=False):
-    """Same as Print(), but writes to a file.
+    found_build_id = map2size.BuildIdFromElf(
+        path, self._lazy_paths.tool_prefix)
+    expected_build_id = size_info.metadata.get(models.METADATA_ELF_BUILD_ID)
+    assert found_build_id == expected_build_id, (
+        'Build ID does not match for %s' % path)
+    return path
 
-    Example: Write(Diff(size_info2, size_info1), 'output.txt')
+  def _DisassembleFunc(self, symbol, elf_path=None, use_pager=None,
+                       to_file=None):
+    """Shows objdump disassembly for the given symbol.
+
+    Args:
+      symbol: Must be a .text symbol and not a SymbolGroup.
+      elf_path: Path to the executable containing the symbol. Required only
+          when auto-detection fails.
     """
-    parent_dir = os.path.dirname(path)
-    if parent_dir and not os.path.exists(parent_dir):
-      os.makedirs(parent_dir)
-    with file_format.OpenMaybeGz(path, 'w') as file_obj:
-      lines = describe.GenerateLines(obj, verbose=verbose)
-      describe.WriteLines(lines, file_obj.write)
+    assert symbol.address and symbol.section_name == '.text'
+    if not elf_path:
+      elf_path = self._ElfPathForSymbol(symbol)
+    tool_prefix = self._lazy_paths.tool_prefix
+    args = [tool_prefix + 'objdump', '--disassemble', '--source',
+            '--line-numbers', '--demangle',
+            '--start-address=0x%x' % symbol.address,
+            '--stop-address=0x%x' % symbol.end_address, elf_path]
+    proc = subprocess.Popen(args, stdout=subprocess.PIPE)
+    lines = itertools.chain(('Showing disassembly for %r' % symbol,
+                             'Command: %s' % ' '.join(args)),
+                            (l.rstrip() for l in proc.stdout))
+    _WriteToStream(lines, use_pager=use_pager, to_file=to_file)
+    proc.kill()
 
-
-  def _CreateBanner(self):
-    symbol_info_keys = sorted(m for m in dir(models.SizeInfo) if m[0] != '_')
-    symbol_group_keys = sorted(m for m in dir(models.SymbolGroup)
-                               if m[0] != '_')
-    symbol_diff_keys = sorted(m for m in dir(models.SymbolDiff)
-                              if m[0] != '_' and m not in symbol_group_keys)
-    functions = sorted(k for k in self._variables if k[0].isupper())
-    variables = sorted(k for k in self._variables if k[0].islower())
-    return '\n'.join([
-        '*' * 80,
-        'Entering interactive Python shell. Here is some inspiration:',
-        '',
+  def _ShowExamplesFunc(self):
+    print '\n'.join([
         '# Show pydoc for main types:',
         'import models',
         'help(models)',
         '',
+        '# Show all attributes of all symbols & per-section totals:',
+        'Print(size_info, verbose=True)',
+        '',
         '# Show two levels of .text, grouped by first two subdirectories',
-        'text_syms = size_info1.symbols.WhereInSection("t")',
+        'text_syms = symbols.WhereInSection("t")',
         'by_path = text_syms.GroupBySourcePath(depth=2)',
         'Print(by_path.WhereBiggerThan(1024))',
         '',
         '# Show all non-vtable generated symbols',
-        'generated_syms = size_info1.symbols.WhereIsGenerated()',
-        'Print(generated_syms.WhereNameMatches("vtable").Inverted())',
+        'generated_syms = symbols.WhereIsGenerated()',
+        'Print(generated_syms.WhereNameMatches(r"vtable").Inverted())',
         '',
+        '# Show all symbols that have "print" in their name or path, except',
+        '# those within components/.',
+        '# Note: Could have also used Inverted(), as above.',
+        '# Note: Use "help(ExpandRegex)" for more about what {{_print_}} does.',
+        'print_syms = symbols.WhereMatches(r"{{_print_}}")',
+        'Print(print_syms - print_syms.WherePathMatches(r"^components/"))',
+        '',
+        '# Diff two .size files and save result to a file:',
+        'Print(Diff(size_info1, size_info2), to_file="output.txt")',
+        '',
+    ])
+
+  def _CreateBanner(self):
+    symbol_info_keys = sorted(m for m in dir(models.SizeInfo) if m[0] != '_')
+    symbol_keys = sorted(m for m in dir(models.Symbol) if m[0] != '_')
+    symbol_group_keys = [m for m in dir(models.SymbolGroup) if m[0] != '_']
+    symbol_diff_keys = sorted(m for m in dir(models.SymbolDiff)
+                              if m[0] != '_' and m not in symbol_group_keys)
+    symbol_group_keys = sorted(m for m in symbol_group_keys
+                               if m not in symbol_keys)
+    functions = sorted(k for k in self._variables if k[0].isupper())
+    variables = sorted(k for k in self._variables if k[0].islower())
+    return '\n'.join([
         '*' * 80,
-        'Here is some quick reference:',
+        'Entering interactive Python shell. Quick reference:',
         '',
         'SizeInfo: %s' % ', '.join(symbol_info_keys),
-        'SymbolGroup: %s' % ', '.join(symbol_group_keys),
+        'Symbol: %s' % ', '.join(symbol_keys),
+        'SymbolGroup (extends Symbol): %s' % ', '.join(symbol_group_keys),
         'SymbolDiff (extends SymbolGroup): %s' % ', '.join(symbol_diff_keys),
         '',
         'Functions: %s' % ', '.join('%s()' % f for f in functions),
         'Variables: %s' % ', '.join(variables),
-        '',
+        '*' * 80,
     ])
 
   @classmethod
@@ -159,23 +228,26 @@
 
 def main(argv):
   parser = argparse.ArgumentParser()
-  parser.add_argument('inputs', nargs='*',
-                      help='Input .size/.map files to load. They will be '
-                           'mapped to variables as: size_info1, size_info2,'
-                           ' etc.')
+  parser.add_argument('inputs', nargs='+',
+                      help='Input .size files to load. For a single file, '
+                           'it will be mapped to variables as: size_info & '
+                           'symbols (where symbols = size_info.symbols). For '
+                           'multiple inputs, the names will be size_info1, '
+                           'symbols1, etc.')
   parser.add_argument('--query',
                       help='Print the result of the given snippet. Example: '
-                           'size_info1.symbols.WhereInSection("d").'
+                           'symbols.WhereInSection("d").'
                            'WhereBiggerThan(100)')
-  map2size.AddOptions(parser)
+  paths.AddOptions(parser)
   args = helpers.AddCommonOptionsAndParseArgs(parser, argv)
 
-  info_variables = {}
-  for i, path in enumerate(args.inputs):
-    size_info = map2size.AnalyzeWithArgs(args, path)
-    info_variables['size_info%d' % (i + 1)] = size_info
+  for path in args.inputs:
+    if not path.endswith('.size'):
+      parser.error('All inputs must end with ".size"')
 
-  session = _Session(info_variables)
+  size_infos = [map2size.Analyze(p) for p in args.inputs]
+  lazy_paths = paths.LazyPaths(args=args, input_file=args.inputs[0])
+  session = _Session(size_infos, lazy_paths)
 
   if args.query:
     logging.info('Running query from command-line.')
diff --git a/src/tools/binary_size/create_html_breakdown.py b/src/tools/binary_size/create_html_breakdown.py
index 4f62031..44a6d11 100755
--- a/src/tools/binary_size/create_html_breakdown.py
+++ b/src/tools/binary_size/create_html_breakdown.py
@@ -14,6 +14,7 @@
 
 import helpers
 import map2size
+import paths
 
 
 # Node dictionary keys. These are output in json read by the webapp so
@@ -176,10 +177,11 @@
                            'space)')
   parser.add_argument('--include-symbols', action='store_true',
                       help='Use per-symbol granularity rather than per-file.')
-  map2size.AddOptions(parser)
+  paths.AddOptions(parser)
   args = helpers.AddCommonOptionsAndParseArgs(parser, argv)
 
-  size_info = map2size.AnalyzeWithArgs(args, args.input_file)
+  lazy_paths = paths.LazyPaths(args=args, input_file=args.input_file)
+  size_info = map2size.Analyze(args.input_file, lazy_paths)
   symbols = size_info.symbols
   if not args.include_bss:
     symbols = symbols.WhereInSection('b').Inverted()
diff --git a/src/tools/binary_size/describe.py b/src/tools/binary_size/describe.py
index 8e4a066..d3edd8f 100644
--- a/src/tools/binary_size/describe.py
+++ b/src/tools/binary_size/describe.py
@@ -10,6 +10,25 @@
 import models
 
 
+def _PrettySize(size):
+  # Arbitrarily chosen cut-off.
+  if abs(size) < 2000:
+    return '%d bytes' % size
+  # Always show 3 digits.
+  size /= 1024.0
+  if abs(size) < 10:
+    return '%.2fkb' % size
+  elif abs(size) < 100:
+    return '%.1fkb' % size
+  elif abs(size) < 1024:
+    return '%dkb' % size
+  size /= 1024.0
+  if abs(size) < 10:
+    return '%.2fmb' % size
+  # We shouldn't be seeing sizes > 100mb.
+  return '%.1fmb' % size
+
+
 class Describer(object):
   def __init__(self, verbose=False):
     self.verbose = verbose
@@ -20,51 +39,116 @@
                            if k in relevant_names or k.startswith('.data'))
     total_bytes = sum(v for k, v in section_sizes.iteritems()
                       if k in section_names and k != '.bss')
+    yield ''
     yield 'Section Sizes (Total={:,} bytes):'.format(total_bytes)
     for name in section_names:
       size = section_sizes[name]
       if name == '.bss':
-        yield '{}: {:,} bytes (not included in totals)'.format(name, size)
+        yield '    {}: {:,} bytes (not included in totals)'.format(name, size)
       else:
         percent = float(size) / total_bytes if total_bytes else 0
-        yield '{}: {:,} bytes ({:.1%})'.format(name, size, percent)
+        yield '    {}: {:,} bytes ({:.1%})'.format(name, size, percent)
+
+    if self.verbose:
+      yield ''
+      yield 'Other section sizes:'
+      section_names = sorted(k for k in section_sizes.iterkeys()
+                             if k not in section_names)
+      for name in section_names:
+        yield '    {}: {:,} bytes'.format(name, section_sizes[name])
 
   def _DescribeSymbol(self, sym):
     # SymbolGroups are passed here when we don't want to expand them.
     if sym.IsGroup():
-      yield '{} {:<8} {} (count={})'.format(sym.section, sym.size, sym.name,
-                                            len(sym))
+      if self.verbose:
+        yield ('{} {:<8} {} (count={})  padding={}  '
+               'size_without_padding={}').format(
+                    sym.section, sym.size, sym.name, len(sym), sym.padding,
+                    sym.size_without_padding)
+      else:
+        yield '{} {:<8} {} (count={})'.format(sym.section, sym.size, sym.name,
+                                              len(sym))
       return
 
-    yield '{}@0x{:<8x}  {:<7} {}'.format(
-        sym.section, sym.address, sym.size,
-        sym.source_path or sym.object_path or '{no path}')
-    if sym.name:
-      yield '{:22}{}'.format('', sym.name)
+    if self.verbose:
+      yield '{}@0x{:<8x}  size={}  padding={}  size_without_padding={}'.format(
+          sym.section, sym.address, sym.size, sym.padding,
+          sym.size_without_padding)
+      yield '    source_path={} \tobject_path={}'.format(
+          sym.source_path, sym.object_path)
+      if sym.full_name:
+        yield '    is_anonymous={}  full_name={}'.format(
+            int(sym.is_anonymous), sym.full_name)
+      if sym.name:
+        yield '    is_anonymous={}  name={}'.format(
+            int(sym.is_anonymous), sym.name)
+    else:
+      yield '{}@0x{:<8x}  {:<7} {}'.format(
+          sym.section, sym.address, sym.size,
+          sym.source_path or sym.object_path or '{no path}')
+      if sym.name:
+        yield '    {}'.format(sym.name)
 
   def _DescribeSymbolGroup(self, group, prefix_func=None):
-    yield 'Showing {:,} symbols with total size: {:} bytes'.format(
-        len(group), group.size)
+    total_size = group.size
+    yield 'Showing {:,} symbols with total size: {} bytes'.format(
+        len(group), total_size)
+    code_syms = group.WhereInSection('t')
+    code_size = code_syms.size
+    ro_size = code_syms.Inverted().WhereInSection('r').size
+    yield '.text={:<10} .rodata={:<10} other={:<10} total={}'.format(
+        _PrettySize(code_size), _PrettySize(ro_size),
+        _PrettySize(total_size - code_size - ro_size),
+        _PrettySize(total_size))
+    unique_paths = set(s.object_path for s in group)
+    yield 'Number of object files: {}'.format(len(unique_paths))
+    yield ''
     yield 'First columns are: running total, type, size'
 
     running_total = 0
     prefix = ''
+    sorted_syms = group if group.is_sorted else group.Sorted()
 
-    for s in group.Sorted():
+    prefix = ''
+    for s in sorted_syms:
       if group.IsBss() or not s.IsBss():
         running_total += s.size
-      if prefix_func:
-        prefix = prefix_func(s)
       for l in self._DescribeSymbol(s):
-        yield '{}{:8} {}'.format(prefix, running_total, l)
+        if l[:4].isspace():
+          yield '{} {}'.format(' ' * (8 + len(prefix)), l)
+        else:
+          if prefix_func:
+            prefix = prefix_func(s)
+          yield '{}{:8} {}'.format(prefix, running_total, l)
 
   def _DescribeSymbolDiff(self, diff):
-    template = ('{} symbols added (+), {} changed (~), {} removed (-), '
-                '{} unchanged ({})')
+    header_template = ('{} symbols added (+), {} changed (~), {} removed (-), '
+                       '{} unchanged ({})')
     unchanged_msg = '=' if self.verbose else 'not shown'
-    header_str = (template.format(
-            diff.added_count, diff.changed_count, diff.removed_count,
-            diff.unchanged_count, unchanged_msg))
+    symbol_delta_desc = [header_template.format(
+        diff.added_count, diff.changed_count, diff.removed_count,
+        diff.unchanged_count, unchanged_msg)]
+
+    similar_paths = set()
+    added_paths = set()
+    removed_paths = set()
+    for s in diff:
+      if diff.IsAdded(s):
+        added_paths.add(s.object_path)
+      elif diff.IsRemoved(s):
+        removed_paths.add(s.object_path)
+      else:
+        similar_paths.add(s.object_path)
+    added_paths.difference_update(similar_paths)
+    removed_paths.difference_update(similar_paths)
+    path_delta_desc = ['{} object files added, {} removed'.format(
+        len(added_paths), len(removed_paths))]
+    if self.verbose and len(added_paths):
+      path_delta_desc.append('Added files:')
+      path_delta_desc.extend('  ' + p for p in sorted(added_paths))
+    if self.verbose and len(removed_paths):
+      path_delta_desc.append('Removed files:')
+      path_delta_desc.extend('  ' + p for p in sorted(removed_paths))
 
     def prefix_func(sym):
       if diff.IsAdded(sym):
@@ -77,24 +161,51 @@
 
     diff = diff if self.verbose else diff.WhereNotUnchanged()
     group_desc = self._DescribeSymbolGroup(diff, prefix_func=prefix_func)
-    return itertools.chain((header_str,), group_desc)
+    return itertools.chain(symbol_delta_desc, path_delta_desc, ('',),
+                           group_desc)
+
+  def _DescribeSizeInfoDiff(self, diff):
+    common_metadata = {k: v for k, v in diff.old_metadata.iteritems()
+                       if diff.new_metadata[k] == v}
+    old_metadata = {k: v for k, v in diff.old_metadata.iteritems()
+                    if k not in common_metadata}
+    new_metadata = {k: v for k, v in diff.new_metadata.iteritems()
+                    if k not in common_metadata}
+    metadata_desc = itertools.chain(
+        ('Common Metadata:',),
+        ('    %s' % line for line in DescribeMetadata(common_metadata)),
+        ('Old Metadata:',),
+        ('    %s' % line for line in DescribeMetadata(old_metadata)),
+        ('New Metadata:',),
+        ('    %s' % line for line in DescribeMetadata(new_metadata)))
+    section_desc = self._DescribeSectionSizes(diff.section_sizes)
+    group_desc = self.GenerateLines(diff.symbols)
+    return itertools.chain(metadata_desc, section_desc, ('',), group_desc)
+
+  def _DescribeSizeInfo(self, size_info):
+    metadata_desc = itertools.chain(
+        ('Metadata:',),
+        ('    %s' % line for line in DescribeMetadata(size_info.metadata)))
+    section_desc = self._DescribeSectionSizes(size_info.section_sizes)
+    coverage_desc = ()
+    if self.verbose:
+      coverage_desc = itertools.chain(
+          ('',), DescribeSizeInfoCoverage(size_info))
+    group_desc = self.GenerateLines(size_info.symbols)
+    return itertools.chain(metadata_desc, section_desc, coverage_desc, ('',),
+                           group_desc)
 
   def GenerateLines(self, obj):
+    if isinstance(obj, models.SizeInfoDiff):
+      return self._DescribeSizeInfoDiff(obj)
     if isinstance(obj, models.SizeInfo):
-      metadata_desc = 'Metadata: %s' % DescribeSizeInfoMetadata(obj)
-      section_desc = self._DescribeSectionSizes(obj.section_sizes)
-      group_desc = self.GenerateLines(obj.symbols)
-      return itertools.chain((metadata_desc,), section_desc, ('',), group_desc)
-
+      return self._DescribeSizeInfo(obj)
     if isinstance(obj, models.SymbolDiff):
       return self._DescribeSymbolDiff(obj)
-
     if isinstance(obj, models.SymbolGroup):
       return self._DescribeSymbolGroup(obj)
-
     if isinstance(obj, models.Symbol):
       return self._DescribeSymbol(obj)
-
     return (repr(obj),)
 
 
@@ -134,17 +245,23 @@
 
 
 def _UtcToLocal(utc):
-    epoch = time.mktime(utc.timetuple())
-    offset = (datetime.datetime.fromtimestamp(epoch) -
-              datetime.datetime.utcfromtimestamp(epoch))
-    return utc + offset
+  epoch = time.mktime(utc.timetuple())
+  offset = (datetime.datetime.fromtimestamp(epoch) -
+            datetime.datetime.utcfromtimestamp(epoch))
+  return utc + offset
 
 
-def DescribeSizeInfoMetadata(size_info):
-  time_str = 'Unknown'
-  if size_info.timestamp:
-    time_str = _UtcToLocal(size_info.timestamp).strftime('%Y-%m-%d %H:%M:%S')
-  return 'time=%s tag=%s' % (time_str, size_info.tag)
+def DescribeMetadata(metadata):
+  display_dict = metadata.copy()
+  timestamp = display_dict.get(models.METADATA_ELF_MTIME)
+  if timestamp:
+    timestamp_obj = datetime.datetime.utcfromtimestamp(timestamp)
+    display_dict[models.METADATA_ELF_MTIME] = (
+        _UtcToLocal(timestamp_obj).strftime('%Y-%m-%d %H:%M:%S'))
+  gn_args = display_dict.get(models.METADATA_GN_ARGS)
+  if gn_args:
+    display_dict[models.METADATA_GN_ARGS] = '; '.join(gn_args)
+  return sorted('%s=%s' % t for t in display_dict.iteritems())
 
 
 def GenerateLines(obj, verbose=False):
diff --git a/src/tools/binary_size/diagnose_apk_bloat.py b/src/tools/binary_size/diagnose_apk_bloat.py
new file mode 100755
index 0000000..847c305
--- /dev/null
+++ b/src/tools/binary_size/diagnose_apk_bloat.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Tool for finding the cause of APK bloat.
+
+Run diagnose_apk_bloat.py -h for detailed usage help.
+"""
+
+import argparse
+import logging
+import multiprocessing
+import os
+import shutil
+import subprocess
+import sys
+
+import helpers
+
+_DEFAULT_OUT_DIR = os.path.join(helpers.SRC_ROOT, 'out', 'diagnose-apk-bloat')
+_DEFAULT_TARGET = 'monochrome_public_apk'
+_DEFAULT_ARCHIVE_DIR = os.path.join(helpers.SRC_ROOT, 'binary-size-bloat')
+
+
+class _BuildHelper(object):
+  """Helper class for generating and building targets."""
+
+  def __init__(self, args):
+    self.enable_chrome_android_internal = args.enable_chrome_android_internal
+    self.max_jobs = args.max_jobs
+    self.max_load_average = args.max_load_average
+    self.output_directory = args.output_directory
+    self.target = args.target
+    self.target_os = args.target_os
+    self.use_goma = args.use_goma
+    self._SetDefaults()
+
+  def _SetDefaults(self):
+    has_goma_dir = os.path.exists(os.path.join(os.path.expanduser('~'), 'goma'))
+    self.use_goma = self.use_goma or has_goma_dir
+    self.max_load_average = (self.max_load_average or
+                             str(multiprocessing.cpu_count()))
+    if not self.max_jobs:
+      self.max_jobs = '10000' if self.use_goma else '500'
+
+  def _GenGnCmd(self):
+    gn_args = 'is_official_build = true'
+    # Excludes some debug info, see crbug/610994.
+    gn_args += ' is_chrome_branded = true'
+    gn_args += ' use_goma = %s' % str(self.use_goma).lower()
+    gn_args += ' target_os = "%s"' % self.target_os
+    gn_args += (' enable_chrome_android_internal = %s' %
+                str(self.enable_chrome_android_internal).lower())
+    return ['gn', 'gen', self.output_directory, '--args=%s' % gn_args]
+
+  def _GenNinjaCmd(self):
+    cmd = ['ninja', '-C', self.output_directory]
+    cmd += ['-j', self.max_jobs] if self.max_jobs else []
+    cmd += ['-l', self.max_load_average] if self.max_load_average else []
+    cmd += [self.target]
+    return cmd
+
+  def Build(self):
+    logging.info('Building %s. This may take a while (run with -vv for '
+                 'detailed ninja output).', self.target)
+    _RunCmd(self._GenGnCmd())
+    _RunCmd(self._GenNinjaCmd(), print_stdout=True)
+
+
+def _GetLinkerMapPath(target_os, target):
+  # TODO(estevenson): Get this from GN instead of hardcoding.
+  if target_os == 'linux':
+    return 'chrome.map.gz'
+  elif 'monochrome' in target:
+    return 'lib.unstripped/libmonochrome.so.map.gz'
+  else:
+    return 'lib.unstripped/libchrome.so.map.gz'
+
+
+def _ApkPathFromTarget(target):
+  # Only works on apk targets that follow: my_great_apk naming convention.
+  apk_name = ''.join(s.title() for s in target.split('_')[:-1]) + '.apk'
+  return os.path.join('apks', apk_name)
+
+
+def _RunCmd(cmd, print_stdout=False):
+  """Convenience function for running commands.
+
+  Args:
+    cmd: the command to run.
+    print_stdout: if this is True, then the stdout of the process will be
+        printed (to stdout if log level is DEBUG otherwise to /dev/null).
+        If false, stdout will be returned.
+
+  Returns:
+    Command stdout if |print_stdout| is False otherwise ''.
+  """
+  cmd_str = ' '.join(c for c in cmd)
+  logging.debug('Running: %s', cmd_str)
+  if not print_stdout:
+    proc_stdout = subprocess.PIPE
+  elif logging.getLogger().isEnabledFor(logging.DEBUG):
+    proc_stdout = sys.stdout
+  else:
+    proc_stdout = open(os.devnull, 'wb')
+
+  proc = subprocess.Popen(cmd, stdout=proc_stdout, stderr=subprocess.PIPE)
+  stdout, stderr = proc.communicate()
+
+  if proc.returncode != 0:
+    logging.error('Command failed: %s\nstderr:\n%s' % (cmd_str, stderr))
+    sys.exit(1)
+
+  return stdout.strip() if stdout else ''
+
+
+def _GitCmd(args):
+  return _RunCmd(['git', '-C', helpers.SRC_ROOT] + args)
+
+
+def _GclientSyncCmd(rev):
+  cwd = os.getcwd()
+  os.chdir(helpers.SRC_ROOT)
+  logging.info('gclient sync to %s', rev)
+  _RunCmd(['gclient', 'sync', '-r', 'src@' + rev], print_stdout=True)
+  os.chdir(cwd)
+
+
+def _ArchiveBuildResult(archive_dir, build_helper):
+  """Save resulting APK and mapping file."""
+  def ArchiveFile(file_path):
+    file_path = os.path.join(build_helper.output_directory, file_path)
+    if os.path.exists(file_path):
+      if not os.path.exists(archive_dir):
+        os.makedirs(archive_dir)
+      shutil.copy(file_path, archive_dir)
+    else:
+      logging.error('Expected file: %s not found.' % file_path)
+      sys.exit(1)
+
+  logging.info('Saving build results to: %s', archive_dir)
+  ArchiveFile(_GetLinkerMapPath(build_helper.target_os, build_helper.target))
+  if build_helper.target_os == 'android':
+    ArchiveFile(_ApkPathFromTarget(build_helper.target))
+
+
+def _SyncAndBuild(rev_with_patch, rev_without_patch, archive_dir, build_helper):
+  rev_with_patch = _GitCmd(['rev-parse', rev_with_patch])
+  rev_without_patch = _GitCmd([
+      'rev-parse', rev_without_patch or rev_with_patch + '^'])
+
+  # Move to a detached state since gclient sync doesn't work with local commits
+  # on a branch.
+  _GitCmd(['checkout', '--detach'])
+
+  _GclientSyncCmd(rev_with_patch)
+  build_helper.Build()
+  _ArchiveBuildResult(
+      os.path.join(archive_dir, 'with_patch_%s' % rev_with_patch), build_helper)
+
+  _GclientSyncCmd(rev_without_patch)
+  build_helper.Build()
+  _ArchiveBuildResult(
+      os.path.join(archive_dir, 'without_patch_%s' % rev_without_patch),
+      build_helper)
+
+
+def _EnsureDirectoryClean():
+  logging.info('Checking source directory')
+  stdout = _GitCmd(['status', '--porcelain'])
+  # Ignore untracked files.
+  if stdout and stdout[:2] != '??':
+    logging.error('Failure: please ensure working directory is clean.')
+    sys.exit(1)
+
+
+def main():
+  parser = argparse.ArgumentParser(
+      description='Find the cause of APK size bloat.',
+      formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+  parser.add_argument('--archive-dir',
+                      default=_DEFAULT_ARCHIVE_DIR,
+                      help='Where results are stored.')
+  parser.add_argument('--rev-with-patch',
+                      default='HEAD',
+                      help='Commit with patch.')
+  parser.add_argument('--rev-without-patch',
+                      help='Older patch to diff against. If not supplied, '
+                      'the previous commit to rev_with_patch will be used.')
+
+  build_group = parser.add_argument_group('ninja', 'Args to use with ninja/gn')
+  build_group.add_argument('-j',
+                           dest='max_jobs',
+                           help='Run N jobs in parallel.')
+  build_group.add_argument('-l',
+                           dest='max_load_average',
+                           help='Do not start new jobs if the load average is '
+                           'greater than N.')
+  build_group.add_argument('--no-goma',
+                           action='store_false',
+                           dest='use_goma',
+                           default=True,
+                           help='Use goma when building with ninja.')
+  build_group.add_argument('--target-os',
+                           default='android',
+                           choices=['android', 'linux'],
+                           help='target_os gn arg.')
+  build_group.add_argument('--output-directory',
+                           default=_DEFAULT_OUT_DIR,
+                           help='ninja output directory.')
+  build_group.add_argument('--enable_chrome_android_internal',
+                           action='store_true',
+                           help='Allow downstream targets to be built.')
+  build_group.add_argument('--target',
+                           default=_DEFAULT_TARGET,
+                           help='GN APK target to build.')
+  args = helpers.AddCommonOptionsAndParseArgs(parser, sys.argv, pypy_warn=False)
+
+  _EnsureDirectoryClean()
+  build_helper = _BuildHelper(args)
+  _SyncAndBuild(args.rev_with_patch, args.rev_without_patch, args.archive_dir,
+                build_helper)
+
+
+if __name__ == '__main__':
+  sys.exit(main())
+
diff --git a/src/tools/binary_size/file_format.py b/src/tools/binary_size/file_format.py
index 2f66395..0db5df2 100644
--- a/src/tools/binary_size/file_format.py
+++ b/src/tools/binary_size/file_format.py
@@ -32,11 +32,9 @@
   file_obj.write('# Created by //tools/binary_size\n')
   file_obj.write('%s\n' % _SERIALIZATION_VERSION)
   headers = {
-      'tag': size_info.tag,
+      'metadata': size_info.metadata,
       'section_sizes': size_info.section_sizes,
   }
-  if size_info.timestamp:
-    headers['timestamp'] = calendar.timegm(size_info.timestamp.timetuple())
   metadata_str = json.dumps(headers, file_obj, indent=2, sort_keys=True)
   file_obj.write('%d\n' % len(metadata_str))
   file_obj.write(metadata_str)
@@ -99,13 +97,9 @@
       'Version mismatch. Need to write some upgrade code.')
   json_len = int(next(lines))
   json_str = file_obj.read(json_len)
-  metadata = json.loads(json_str)
-  timestamp = metadata.get('timestamp')
-  if timestamp is not None:
-    timestamp = datetime.datetime.utcfromtimestamp(timestamp)
-  tag = metadata['tag']
-  section_sizes = metadata['section_sizes']
-
+  headers = json.loads(json_str)
+  section_sizes = headers['section_sizes']
+  metadata = headers.get('metadata')
   lines = iter(file_obj)
   next(lines)  # newline after closing } of json.
 
@@ -156,7 +150,7 @@
       symbol_idx += 1
 
   symbols = models.SymbolGroup(symbol_list)
-  return models.SizeInfo(section_sizes, symbols, timestamp=timestamp, tag=tag)
+  return models.SizeInfo(section_sizes, symbols, metadata=metadata)
 
 
 def SaveSizeInfo(size_info, path):
diff --git a/src/tools/binary_size/helpers.py b/src/tools/binary_size/helpers.py
index c1f9f00..c82a6ba 100644
--- a/src/tools/binary_size/helpers.py
+++ b/src/tools/binary_size/helpers.py
@@ -16,7 +16,7 @@
 SRC_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
 
 
-def AddCommonOptionsAndParseArgs(parser, argv):
+def AddCommonOptionsAndParseArgs(parser, argv, pypy_warn=True):
   parser.add_argument('--no-pypy', action='store_true',
                       help='Do not automatically switch to pypy when available')
   parser.add_argument('-v',
@@ -36,7 +36,9 @@
       logging.debug('Switching to pypy.')
       os.execv(pypy_path, [pypy_path] + sys.argv)
     # NOTE! Running with python: 6s. Running with pypy: 3s
-    logging.warning('This script runs more than 2x faster if you install pypy.')
+    if pypy_warn:
+      logging.warning(
+          'This script runs more than 2x faster if you install pypy.')
 
   if logging.getLogger().isEnabledFor(logging.DEBUG):
     atexit.register(_LogPeakRamUsage)
diff --git a/src/tools/binary_size/integration_test.py b/src/tools/binary_size/integration_test.py
index 670cb97..179d22b 100755
--- a/src/tools/binary_size/integration_test.py
+++ b/src/tools/binary_size/integration_test.py
@@ -14,8 +14,10 @@
 import tempfile
 
 import describe
+import file_format
 import map2size
 import models
+import paths
 
 
 _SCRIPT_DIR = os.path.dirname(__file__)
@@ -58,17 +60,17 @@
 class IntegrationTest(unittest.TestCase):
   size_info = None
 
-  def _GetParsedMap(self):
+  def _CloneSizeInfo(self):
     if not IntegrationTest.size_info:
-      IntegrationTest.size_info = map2size.Analyze(
-          _TEST_MAP_PATH, output_directory=_TEST_DATA_DIR)
+      lazy_paths = paths.LazyPaths(output_directory=_TEST_DATA_DIR)
+      IntegrationTest.size_info = map2size.Analyze(_TEST_MAP_PATH, lazy_paths)
     return copy.deepcopy(IntegrationTest.size_info)
 
   @_CompareWithGolden
   def test_Map2Size(self):
     with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
       _RunApp('map2size.py', '--output-directory', _TEST_DATA_DIR,
-              _TEST_MAP_PATH, temp_file.name)
+              '--map-file', _TEST_MAP_PATH, '', temp_file.name)
       size_info = map2size.Analyze(temp_file.name)
     sym_strs = (repr(sym) for sym in size_info.symbols)
     stats = describe.DescribeSizeInfoCoverage(size_info)
@@ -76,30 +78,33 @@
 
   @_CompareWithGolden
   def test_ConsoleNullDiff(self):
-    return _RunApp('console.py', '--output-directory', _TEST_DATA_DIR,
-                   '--query', 'Diff(size_info1, size_info2)',
-                   _TEST_MAP_PATH, _TEST_MAP_PATH)
+    with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
+      file_format.SaveSizeInfo(self._CloneSizeInfo(), temp_file.name)
+      return _RunApp('console.py', '--query', 'Diff(size_info1, size_info2)',
+                     temp_file.name, temp_file.name)
 
   @_CompareWithGolden
   def test_ActualDiff(self):
-    map1 = self._GetParsedMap()
-    map2 = self._GetParsedMap()
-    map1.symbols.symbols.pop(-1)
-    map2.symbols.symbols.pop(0)
-    map1.symbols[1].size -= 10
-    diff = models.Diff(map1, map2)
-    return describe.GenerateLines(diff)
+    size_info1 = self._CloneSizeInfo()
+    size_info2 = self._CloneSizeInfo()
+    size_info1.metadata = {"foo": 1, "bar": [1,2,3], "baz": "yes"}
+    size_info2.metadata = {"foo": 1, "bar": [1,3], "baz": "yes"}
+    size_info1.symbols -= size_info1.symbols[:2]
+    size_info2.symbols -= size_info2.symbols[-3:]
+    size_info1.symbols[1].size -= 10
+    diff = models.Diff(size_info1, size_info2)
+    return describe.GenerateLines(diff, verbose=True)
 
   @_CompareWithGolden
   def test_SymbolGroupMethods(self):
-    all_syms = self._GetParsedMap().symbols
+    all_syms = self._CloneSizeInfo().symbols
     global_syms = all_syms.WhereNameMatches('GLOBAL')
     # Tests Filter(), Inverted(), and __sub__().
     non_global_syms = global_syms.Inverted()
-    self.assertEqual(non_global_syms.symbols, (all_syms - global_syms).symbols)
+    self.assertEqual(non_global_syms, (all_syms - global_syms))
     # Tests Sorted() and __add__().
-    self.assertEqual(all_syms.Sorted().symbols,
-                     (global_syms + non_global_syms).Sorted().symbols)
+    self.assertEqual(all_syms.Sorted(),
+                     (global_syms + non_global_syms).Sorted())
     # Tests GroupByNamespace() and __len__().
     return itertools.chain(
         ['GroupByNamespace()'],
diff --git a/src/tools/binary_size/linker_map_parser.py b/src/tools/binary_size/linker_map_parser.py
index 5cbb106..5c6eca4 100644
--- a/src/tools/binary_size/linker_map_parser.py
+++ b/src/tools/binary_size/linker_map_parser.py
@@ -175,10 +175,16 @@
                 # There seems to be no corelation between where these gaps occur
                 # and the symbols they come in-between.
                 # TODO(agrieve): Learn more about why this happens.
-                address = -1
-                if syms and syms[-1].address > 0:
-                  merge_symbol_start_address = syms[-1].end_address
-                merge_symbol_start_address += size
+                if address_str2:
+                  address = int(address_str2[2:], 16) - 1
+                elif syms and syms[-1].address > 0:
+                  # Merge sym with no second line showing real address.
+                  address = syms[-1].end_address
+                else:
+                  logging.warning('First symbol of section had address -1')
+                  address = 0
+
+                merge_symbol_start_address = address + size
               else:
                 address = int(address_str[2:], 16)
                 # Finish off active address gap / merge section.
@@ -186,20 +192,16 @@
                   merge_size = address - merge_symbol_start_address
                   logging.debug('Merge symbol of size %d found at:\n  %r',
                                 merge_size, syms[-1])
+                  # Set size=0 so that it will show up as padding.
                   sym = models.Symbol(
-                      section_name, merge_size,
-                      address=merge_symbol_start_address,
+                      section_name, 0,
+                      address=address,
                       name='** symbol gap %d' % symbol_gap_count,
                       object_path=path)
                   symbol_gap_count += 1
                   syms.append(sym)
                   merge_symbol_start_address = 0
 
-              if address == -1 and address_str2:
-                address = int(address_str2[2:], 16) - 1
-              # Merge sym with no second line showing real address.
-              if address == -1:
-                address = syms[-1].end_address
               syms.append(models.Symbol(section_name, size, address=address,
                                         name=name or mangled_name,
                                         object_path=path))
diff --git a/src/tools/binary_size/map2size.py b/src/tools/binary_size/map2size.py
index 03f4483..205baff 100755
--- a/src/tools/binary_size/map2size.py
+++ b/src/tools/binary_size/map2size.py
@@ -6,8 +6,8 @@
 """Main Python API for analyzing binary size."""
 
 import argparse
+import calendar
 import datetime
-import distutils.spawn
 import gzip
 import logging
 import os
@@ -22,6 +22,7 @@
 import linker_map_parser
 import models
 import ninja_parser
+import paths
 
 
 def _OpenMaybeGz(path, mode=None):
@@ -95,6 +96,10 @@
       symbol.full_name = symbol.name
       symbol.name = re.sub(r'\(.*\)', '', symbol.full_name)
 
+    # Don't bother storing both if they are the same.
+    if symbol.full_name == symbol.name:
+      symbol.full_name = ''
+
   logging.debug('Found name prefixes of: %r', found_prefixes)
 
 
@@ -109,9 +114,9 @@
       # Convert ../../third_party/... -> third_party/...
       path = path[6:]
     if path.endswith(')'):
-      # Convert foo/bar.a(baz.o) -> foo/bar.a/(baz.o)
+      # Convert foo/bar.a(baz.o) -> foo/bar.a/baz.o
       start_idx = path.index('(')
-      path = os.path.join(path[:start_idx], path[start_idx:])
+      path = os.path.join(path[:start_idx], path[start_idx + 1:-1])
     symbol.object_path = path
 
 
@@ -126,7 +131,11 @@
 
 
 def _ExtractSourcePaths(symbol_group, output_directory):
-  """Fills in the .source_path attribute of all symbols."""
+  """Fills in the .source_path attribute of all symbols.
+
+  Returns True if source paths were found.
+  """
+  all_found = True
   mapper = ninja_parser.SourceFileMapper(output_directory)
 
   for symbol in symbol_group:
@@ -139,8 +148,10 @@
       if source_path:
         symbol.source_path = _NormalizeSourcePath(source_path)
       else:
+        all_found = False
         logging.warning('Could not find source path for %s', object_path)
   logging.debug('Parsed %d .ninja files.', mapper.GetParsedFileCount())
+  return all_found
 
 
 def _RemoveDuplicatesAndCalculatePadding(symbol_group):
@@ -148,94 +159,60 @@
 
   Symbols must already be sorted by |address|.
   """
-  to_remove = set()
-  all_symbols = symbol_group.symbols
-  for i, symbol in enumerate(all_symbols[1:]):
-    prev_symbol = all_symbols[i]
+  to_remove = []
+  seen_sections = []
+  for i, symbol in enumerate(symbol_group[1:]):
+    prev_symbol = symbol_group[i]
     if prev_symbol.section_name != symbol.section_name:
+      assert symbol.section_name not in seen_sections, (
+          'Input symbols must be sorted by section, then address.')
+      seen_sections.append(symbol.section_name)
       continue
-    if symbol.address > 0 and prev_symbol.address > 0:
-      # Fold symbols that are at the same address (happens in nm output).
-      if symbol.address == prev_symbol.address:
-        symbol.size = max(prev_symbol.size, symbol.size)
-        to_remove.add(i + 1)
-        continue
-      # Even with symbols at the same address removed, overlaps can still
-      # happen. In this case, padding will be negative (and this is fine).
-      padding = symbol.address - prev_symbol.end_address
-      # These thresholds were found by manually auditing arm32 Chrome.
-      # E.g.: Set them to 0 and see what warnings get logged.
-      # TODO(agrieve): See if these thresholds make sense for architectures
-      #     other than arm32.
-      if (symbol.section in 'rd' and padding >= 256 or
-          symbol.section in 't' and padding >= 64):
-        # For nm data, this is caused by data that has no associated symbol.
-        # The linker map file lists them with no name, but with a file.
-        # Example:
-        #   .data 0x02d42764 0x120 .../V8SharedWorkerGlobalScope.o
-        # Where as most look like:
-        #   .data.MANGLED_NAME...
-        logging.debug('Large padding of %d between:\n  A) %r\n  B) %r' % (
-                      padding, prev_symbol, symbol))
-        continue
-      symbol.padding = padding
-      symbol.size += padding
-      assert symbol.size >= 0, 'Symbol has negative size: ' + (
-          '%r\nprev symbol: %r' % (symbol, prev_symbol))
+    if symbol.address <= 0 or prev_symbol.address <= 0:
+      continue
+    # Fold symbols that are at the same address (happens in nm output).
+    prev_is_padding_only = prev_symbol.size_without_padding == 0
+    if symbol.address == prev_symbol.address and not prev_is_padding_only:
+      symbol.size = max(prev_symbol.size, symbol.size)
+      to_remove.add(symbol)
+      continue
+    # Even with symbols at the same address removed, overlaps can still
+    # happen. In this case, padding will be negative (and this is fine).
+    padding = symbol.address - prev_symbol.end_address
+    # These thresholds were found by manually auditing arm32 Chrome.
+    # E.g.: Set them to 0 and see what warnings get logged.
+    # TODO(agrieve): See if these thresholds make sense for architectures
+    #     other than arm32.
+    if not symbol.name.startswith('*') and (
+        symbol.section in 'rd' and padding >= 256 or
+        symbol.section in 't' and padding >= 64):
+      # For nm data, this is caused by data that has no associated symbol.
+      # The linker map file lists them with no name, but with a file.
+      # Example:
+      #   .data 0x02d42764 0x120 .../V8SharedWorkerGlobalScope.o
+      # Where as most look like:
+      #   .data.MANGLED_NAME...
+      logging.debug('Large padding of %d between:\n  A) %r\n  B) %r' % (
+                    padding, prev_symbol, symbol))
+      continue
+    symbol.padding = padding
+    symbol.size += padding
+    assert symbol.size >= 0, (
+        'Symbol has negative size (likely not sorted propertly): '
+        '%r\nprev symbol: %r' % (symbol, prev_symbol))
   # Map files have no overlaps, so worth special-casing the no-op case.
   if to_remove:
     logging.info('Removing %d overlapping symbols', len(to_remove))
-    symbol_group.symbols = (
-        [s for i, s in enumerate(all_symbols) if i not in to_remove])
+    symbol_group -= models.SymbolGroup(to_remove)
 
 
-def AddOptions(parser):
-  parser.add_argument('--tool-prefix', default='',
-                      help='Path prefix for c++filt.')
-  parser.add_argument('--output-directory',
-                      help='Path to the root build directory.')
+def Analyze(path, lazy_paths=None):
+  """Returns a SizeInfo for the given |path|.
 
-
-def _DetectToolPrefix(tool_prefix, input_file, output_directory=None):
-  """Detects values for --tool-prefix and --output-directory."""
-  if not output_directory:
-    abs_path = os.path.abspath(input_file)
-    release_idx = abs_path.find('Release')
-    if release_idx != -1:
-      output_directory = abs_path[:release_idx] + 'Release'
-      output_directory = os.path.relpath(abs_path[:release_idx] + '/Release')
-      logging.debug('Detected --output-directory=%s', output_directory)
-
-  if not tool_prefix and output_directory:
-    # Auto-detect from build_vars.txt
-    build_vars_path = os.path.join(output_directory, 'build_vars.txt')
-    if os.path.exists(build_vars_path):
-      with open(build_vars_path) as f:
-        build_vars = dict(l.rstrip().split('=', 1) for l in f if '=' in l)
-      logging.debug('Found --tool-prefix from build_vars.txt')
-      tool_prefix = os.path.join(output_directory,
-                                 build_vars['android_tool_prefix'])
-
-  if os.path.sep not in tool_prefix:
-    full_path = distutils.spawn.find_executable(tool_prefix + 'c++filt')
-  else:
-    full_path = tool_prefix + 'c++filt'
-
-  if not full_path or not os.path.isfile(full_path):
-    raise Exception('Bad --tool-prefix. Path not found: %s' % full_path)
-  if not output_directory or not os.path.isdir(output_directory):
-    raise Exception('Bad --output-directory. Path not found: %s' %
-                    output_directory)
-  logging.info('Using --output-directory=%s', output_directory)
-  logging.info('Using --tool-prefix=%s', tool_prefix)
-  return output_directory, tool_prefix
-
-
-def AnalyzeWithArgs(args, input_path):
-  return Analyze(input_path, args.output_directory, args.tool_prefix)
-
-
-def Analyze(path, output_directory=None, tool_prefix=''):
+  Args:
+    path: Can be a .size file, or a .map(.gz). If the latter, then lazy_paths
+        must be provided as well.
+  """
   if path.endswith('.size'):
     logging.debug('Loading results from: %s', path)
     size_info = file_format.LoadSizeInfo(path)
@@ -249,23 +226,26 @@
   elif not path.endswith('.map') and not path.endswith('.map.gz'):
     raise Exception('Expected input to be a .map or a .size')
   else:
-    # Verify tool_prefix early.
-    output_directory, tool_prefix = (
-        _DetectToolPrefix(tool_prefix, path, output_directory))
+    # output_directory needed for source file information.
+    lazy_paths.VerifyOutputDirectory()
+    # tool_prefix needed for c++filt.
+    lazy_paths.VerifyToolPrefix()
 
     with _OpenMaybeGz(path) as map_file:
       section_sizes, symbols = linker_map_parser.MapFileParser().Parse(map_file)
-    timestamp = datetime.datetime.utcfromtimestamp(os.path.getmtime(path))
-    size_info = models.SizeInfo(section_sizes, models.SymbolGroup(symbols),
-                                timestamp=timestamp)
+    size_info = models.SizeInfo(section_sizes, models.SymbolGroup(symbols))
 
     # Map file for some reason doesn't unmangle all names.
     logging.info('Calculating padding')
     _RemoveDuplicatesAndCalculatePadding(size_info.symbols)
     # Unmangle prints its own log statement.
-    _UnmangleRemainingSymbols(size_info.symbols, tool_prefix)
+    _UnmangleRemainingSymbols(size_info.symbols, lazy_paths.tool_prefix)
     logging.info('Extracting source paths from .ninja files')
-    _ExtractSourcePaths(size_info.symbols, output_directory)
+    all_found = _ExtractSourcePaths(size_info.symbols,
+                                    lazy_paths.output_directory)
+    assert all_found, (
+        'One or more source file paths could not be found. Likely caused by '
+        '.ninja files being generated at a different time than the .map file.')
     # Resolve paths prints its own log statement.
     logging.info('Normalizing names')
     _NormalizeNames(size_info.symbols)
@@ -279,35 +259,112 @@
   return size_info
 
 
-def _DetectGitRevision(path):
+def _DetectGitRevision(directory):
   try:
     git_rev = subprocess.check_output(
-        ['git', '-C', os.path.dirname(path), 'rev-parse', 'HEAD'])
+        ['git', '-C', directory, 'rev-parse', 'HEAD'])
     return git_rev.rstrip()
   except Exception:
     logging.warning('Failed to detect git revision for file metadata.')
     return None
 
 
+def BuildIdFromElf(elf_path, tool_prefix):
+  args = [tool_prefix + 'readelf', '-n', elf_path]
+  stdout = subprocess.check_output(args)
+  match = re.search(r'Build ID: (\w+)', stdout)
+  assert match, 'Build ID not found from running: ' + ' '.join(args)
+  return match.group(1)
+
+
+def _SectionSizesFromElf(elf_path, tool_prefix):
+  args = [tool_prefix + 'readelf', '-S', '--wide', elf_path]
+  stdout = subprocess.check_output(args)
+  section_sizes = {}
+  # Matches  [ 2] .hash HASH 00000000006681f0 0001f0 003154 04   A  3   0  8
+  for match in re.finditer(r'\[[\s\d]+\] (\..*)$', stdout, re.MULTILINE):
+    items = match.group(1).split()
+    section_sizes[items[0]] = int(items[4], 16)
+  return section_sizes
+
+
+def _ParseGnArgs(args_path):
+  """Returns a list of normalized "key=value" strings."""
+  args = {}
+  with open(args_path) as f:
+    for l in f:
+      # Strips #s even if within string literal. Not a problem in practice.
+      parts = l.split('#')[0].split('=')
+      if len(parts) != 2:
+        continue
+      args[parts[0].strip()] = parts[1].strip()
+  return ["%s=%s" % x for x in sorted(args.iteritems())]
+
+
 def main(argv):
   parser = argparse.ArgumentParser(argv)
-  parser.add_argument('input_file', help='Path to input .map file.')
+  parser.add_argument('elf_file', help='Path to input ELF file.')
   parser.add_argument('output_file', help='Path to output .size(.gz) file.')
-  AddOptions(parser)
+  parser.add_argument('--map-file',
+                      help='Path to input .map(.gz) file. Defaults to '
+                           '{{elf_file}}.map(.gz)?')
+  paths.AddOptions(parser)
   args = helpers.AddCommonOptionsAndParseArgs(parser, argv)
   if not args.output_file.endswith('.size'):
     parser.error('output_file must end with .size')
 
-  size_info = AnalyzeWithArgs(args, args.input_file)
-  if not args.input_file.endswith('.size'):
-    git_rev = _DetectGitRevision(args.input_file)
-    size_info.tag = 'Filename=%s git_rev=%s' % (
-        os.path.basename(args.input_file), git_rev)
-  logging.info('Recording metadata: %s',
-               describe.DescribeSizeInfoMetadata(size_info))
+  if args.map_file:
+    map_file_path = args.map_file
+  elif args.elf_file.endswith('.size'):
+    # Allow a .size file to be passed as input as well. Useful for measuring
+    # serialization speed.
+    pass
+  else:
+    map_file_path = args.elf_file + '.map'
+    if not os.path.exists(map_file_path):
+      map_file_path += '.gz'
+    if not os.path.exists(map_file_path):
+      parser.error('Could not find .map(.gz)? file. Use --map-file.')
+
+  lazy_paths = paths.LazyPaths(args=args, input_file=args.elf_file)
+  metadata = None
+  if args.elf_file and not args.elf_file.endswith('.size'):
+    logging.debug('Constructing metadata')
+    git_rev = _DetectGitRevision(os.path.dirname(args.elf_file))
+    build_id = BuildIdFromElf(args.elf_file, lazy_paths.tool_prefix)
+    timestamp_obj = datetime.datetime.utcfromtimestamp(os.path.getmtime(
+        args.elf_file))
+    timestamp = calendar.timegm(timestamp_obj.timetuple())
+    gn_args = _ParseGnArgs(os.path.join(lazy_paths.output_directory, 'args.gn'))
+
+    def relative_to_out(path):
+      return os.path.relpath(path, lazy_paths.VerifyOutputDirectory())
+
+    metadata = {
+        models.METADATA_GIT_REVISION: git_rev,
+        models.METADATA_MAP_FILENAME: relative_to_out(map_file_path),
+        models.METADATA_ELF_FILENAME: relative_to_out(args.elf_file),
+        models.METADATA_ELF_MTIME: timestamp,
+        models.METADATA_ELF_BUILD_ID: build_id,
+        models.METADATA_GN_ARGS: gn_args,
+    }
+
+  size_info = Analyze(map_file_path, lazy_paths)
+
+  if metadata:
+    logging.debug('Validating section sizes')
+    elf_section_sizes = _SectionSizesFromElf(args.elf_file,
+                                             lazy_paths.tool_prefix)
+    for k, v in elf_section_sizes.iteritems():
+      assert v == size_info.section_sizes.get(k), (
+          'ELF file and .map file do not match.')
+
+    size_info.metadata = metadata
+
+  logging.info('Recording metadata: \n  %s',
+               '\n  '.join(describe.DescribeMetadata(size_info.metadata)))
   logging.info('Saving result to %s', args.output_file)
   file_format.SaveSizeInfo(size_info, args.output_file)
-
   logging.info('Done')
 
 
diff --git a/src/tools/binary_size/match_util.py b/src/tools/binary_size/match_util.py
new file mode 100644
index 0000000..67840a1
--- /dev/null
+++ b/src/tools/binary_size/match_util.py
@@ -0,0 +1,58 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Regular expression helpers."""
+
+import re
+
+
+def _CreateIdentifierRegex(parts):
+  assert parts
+  if parts[0]:
+    # Allow word boundary or a _ prefix.
+    prefix_pattern = r'\b_?'
+  else:
+    # Allow word boundary, _, or a case transition.
+    prefix_pattern = r'(?:\b|(?<=_)|(?<=[a-z])(?=[A-Z]))'
+    parts = parts[1:]
+    assert parts
+
+  if parts[-1]:
+    # Allow word boundary, trailing _, or single trailing digit.
+    suffix_pattern = r'\d?_?\b'
+  else:
+    # Allow word boundary, _, or a case transition.
+    suffix_pattern = r'(?:\b|(?=_|\d)|(?<=[a-z])(?=[A-Z]))'
+    parts = parts[:-1]
+    assert parts
+
+  shouty_pattern = '_'.join(a.upper() for a in parts)
+  snake_pattern = '_'.join(a.lower() for a in parts)
+  camel_remainder = parts[0][1:]
+  for token in parts[1:]:
+    camel_remainder += token.title()
+  first_letter = parts[0][0]
+  prefixed_pattern = '[a-z]' + first_letter.upper() + camel_remainder
+  camel_pattern = '[%s%s]%s' % (first_letter.lower(), first_letter.upper(),
+                                camel_remainder)
+  middle_patterns = '|'.join(
+      (shouty_pattern, snake_pattern, prefixed_pattern, camel_pattern))
+  return r'(?:%s(?:%s)%s)' % (prefix_pattern, middle_patterns, suffix_pattern)
+
+
+def ExpandRegexIdentifierPlaceholder(pattern):
+  """Expands {{identifier}} within a given regular expression.
+
+  Returns |pattern|, with the addition that {{some_name}} is expanded to match:
+      SomeName, kSomeName, SOME_NAME, etc.
+
+  To match part of a name, use {{_some_name_}}. This will additionally match:
+       kPrefixSomeNameSuffix, PREFIX_SOME_NAME_SUFFIX, etc.
+
+  Note: SymbolGroup.Where* methods call this function already, so there is
+  generally no need to call it directly.
+  """
+  return re.sub(r'\{\{(.*?)\}\}',
+                lambda m: _CreateIdentifierRegex(m.group(1).split('_')),
+                pattern)
diff --git a/src/tools/binary_size/match_util_test.py b/src/tools/binary_size/match_util_test.py
new file mode 100755
index 0000000..1505399
--- /dev/null
+++ b/src/tools/binary_size/match_util_test.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+import match_util
+import re
+
+
+class MatchHelperTest(unittest.TestCase):
+
+  def testExpandRegexIdentifierPlaceholder(self):
+    def matches(pattern, target):
+      regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
+      return bool(regex.search(target) and regex.search(' %s ' % target))
+
+    self.assertTrue(matches(r'{{hello_world}}', 'helloWorld'))
+    self.assertTrue(matches(r'{{hello_world}}', 'HelloWorld'))
+    self.assertTrue(matches(r'{{hello_world}}', 'kHelloWorld'))
+    self.assertTrue(matches(r'{{hello_world}}', 'hello_world'))
+    self.assertTrue(matches(r'{{hello_world}}', '_hello_world'))
+    self.assertTrue(matches(r'{{hello_world}}', 'hello_world_}}'))
+    self.assertTrue(matches(r'{{hello_world}}', 'HELLO_WORLD'))
+    self.assertTrue(matches(r'{{hello_world}}', 'HELLO_WORLD1'))
+    self.assertTrue(matches(r'{{hello_world}}', 'kHelloWorld1'))
+    self.assertFalse(matches(r'{{hello_world}}', 'hello world'))
+    self.assertFalse(matches(r'{{hello_world}}', 'helloworld'))
+    self.assertFalse(matches(r'{{hello_world}}', 'f_hello_world'))
+    self.assertFalse(matches(r'{{hello_world}}', 'hello_world_f'))
+    self.assertFalse(matches(r'{{hello_world}}', 'hello/world'))
+    self.assertFalse(matches(r'{{hello_world}}', 'helloWORLD'))
+    self.assertFalse(matches(r'{{hello_world}}', 'HELLOworld'))
+    self.assertFalse(matches(r'{{hello_world}}', 'HELLOWORLD'))
+    self.assertFalse(matches(r'{{hello_world}}', 'FOO_HELLO_WORLD'))
+    self.assertFalse(matches(r'{{hello_world}}', 'HELLO_WORLD_BAR'))
+    self.assertFalse(matches(r'{{hello_world}}', 'FooHelloWorld'))
+    self.assertFalse(matches(r'{{hello_world}}', 'HelloWorldBar'))
+    self.assertFalse(matches(r'{{hello_world}}', 'foohello/world'))
+    self.assertFalse(matches(r'{{hello_world}}', '1HELLO_WORLD'))
+
+    self.assertTrue(matches(r'{{_hello_world_}}', 'helloWorld'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'HelloWorld'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'kHelloWorld'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'hello_world'))
+    self.assertTrue(matches(r'{{_hello_world_}}', '_hello_world'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'hello_world_'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'HELLO_WORLD'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'HELLO_WORLD1'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'kHelloWorld1'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'hello world'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'helloworld'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'f_hello_world'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'hello_world_f'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'hello/world'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'helloWORLD'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'HELLOworld'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'HELLOWORLD'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'FOO_HELLO_WORLD'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'HELLO_WORLD_BAR'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'FooHelloWorld'))
+    self.assertTrue(matches(r'{{_hello_world_}}', 'HelloWorldBar'))
+    self.assertFalse(matches(r'{{_hello_world_}}', 'foohello/world'))
+    self.assertFalse(matches(r'{{_hello_world_}}', '1HELLO_WORLD'))
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/src/tools/binary_size/models.py b/src/tools/binary_size/models.py
index f73b0fe..ee0481e 100644
--- a/src/tools/binary_size/models.py
+++ b/src/tools/binary_size/models.py
@@ -1,13 +1,42 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-"""Classes that comprise the data model for binary size analysis."""
+"""Classes that comprise the data model for binary size analysis.
+
+The primary classes are Symbol, and SymbolGroup.
+
+Description of common properties:
+  * address: The start address of the symbol.
+        May be 0 (e.g. for .bss or for SymbolGroups).
+  * size: The number of bytes this symbol takes up, including padding that comes
+       before |address|.
+  * padding: The number of bytes of padding before |address| due to this symbol.
+  * name: Symbol names with parameter list removed.
+        Never None, but will be '' for anonymous symbols.
+  * full_name: Symbols names with parameter list left in.
+       Never None, but will be '' for anonymous symbols, and for symbols that do
+       not contain a parameter list.
+  * is_anonymous: True when the symbol exists in an anonymous namespace (which
+       are removed from both full_name and name during normalization).
+  * section_name: E.g. ".text", ".rodata", ".data.rel.local"
+  * section: The second character of |section_name|. E.g. "t", "r", "d".
+"""
 
 import collections
 import copy
 import os
 import re
 
+import match_util
+
+
+METADATA_GIT_REVISION = 'git_revision'
+METADATA_MAP_FILENAME = 'map_file_name'  # Path relative to output_directory.
+METADATA_ELF_FILENAME = 'elf_file_name'  # Path relative to output_directory.
+METADATA_ELF_MTIME = 'elf_mtime'  # int timestamp in utc.
+METADATA_ELF_BUILD_ID = 'elf_build_id'
+METADATA_GN_ARGS = 'gn_args'
+
 
 SECTION_TO_SECTION_NAME = {
     'b': '.bss',
@@ -22,26 +51,50 @@
 
   Fields:
     section_sizes: A dict of section_name -> size.
-    symbols: A SymbolGroup (or SymbolDiff) with all symbols in it.
+    symbols: A SymbolGroup with all symbols in it.
+    metadata: A dict.
   """
   __slots__ = (
       'section_sizes',
       'symbols',
-      'tag',
-      'timestamp',
+      'metadata',
   )
 
   """Root size information."""
-  def __init__(self, section_sizes, symbols, timestamp=None, tag=''):
+  def __init__(self, section_sizes, symbols, metadata=None):
     self.section_sizes = section_sizes  # E.g. {'.text': 0}
     self.symbols = symbols  # List of symbols sorted by address per-section.
-    self.timestamp = timestamp  # UTC datetime object.
-    self.tag = tag  # E.g. git revision.
-    assert not tag or '\n' not in tag  # Simplifies file format.
+    self.metadata = metadata or {}
+
+
+class SizeInfoDiff(object):
+  """What you get when you Diff() two SizeInfo objects.
+
+  Fields:
+    section_sizes: A dict of section_name -> size delta.
+    symbols: A SymbolDiff with all symbols in it.
+    old_metadata: metadata of the "old" SizeInfo.
+    new_metadata: metadata of the "new" SizeInfo.
+  """
+  __slots__ = (
+      'section_sizes',
+      'symbols',
+      'old_metadata',
+      'new_metadata',
+  )
+
+  def __init__(self, section_sizes, symbols, old_metadata, new_metadata):
+    self.section_sizes = section_sizes
+    self.symbols = symbols
+    self.old_metadata = old_metadata
+    self.new_metadata = new_metadata
 
 
 class BaseSymbol(object):
-  """Base class for Symbol and SymbolGroup."""
+  """Base class for Symbol and SymbolGroup.
+
+  Refer to module docs for field descriptions.
+  """
   __slots__ = ()
 
   @property
@@ -81,7 +134,10 @@
 
 
 class Symbol(BaseSymbol):
-  """Represents a single symbol within a binary."""
+  """Represents a single symbol within a binary.
+
+  Refer to module docs for field descriptions.
+  """
 
   __slots__ = (
       'address',
@@ -89,7 +145,6 @@
       'is_anonymous',
       'object_path',
       'name',
-      'flags',
       'padding',
       'section_name',
       'source_path',
@@ -112,10 +167,10 @@
     self.padding = 0
 
   def __repr__(self):
-    return '%s@%x(size=%d,padding=%d,name=%s,path=%s,anon=%d)' % (
-        self.section_name, self.address, self.size_without_padding,
-        self.padding, self.name, self.source_path or self.object_path,
-        int(self.is_anonymous))
+    return ('%s@%x(size_without_padding=%d,padding=%d,name=%s,path=%s,anon=%d)'
+            % (self.section_name, self.address, self.size_without_padding,
+               self.padding, self.name, self.source_path or self.object_path,
+               int(self.is_anonymous)))
 
 
 class SymbolGroup(BaseSymbol):
@@ -123,34 +178,62 @@
 
   SymbolGroups are immutable. All filtering / sorting will return new
   SymbolGroups objects.
+
+  Overrides many __functions__. E.g. the following are all valid:
+  * len(group)
+  * iter(group)
+  * group[0]
+  * group['0x1234']  # By symbol address
+  * without_group2 = group1 - group2
+  * unioned = group1 + group2
   """
 
   __slots__ = (
-      'symbols',
-      'filtered_symbols',
+      '_padding',
+      '_size',
+      '_symbols',
+      '_filtered_symbols',
       'name',
       'section_name',
+      'is_sorted',
   )
 
   def __init__(self, symbols, filtered_symbols=None, name=None,
-               section_name=None):
-    self.symbols = symbols
-    self.filtered_symbols = filtered_symbols or []
+               section_name=None, is_sorted=False):
+    self._padding = None
+    self._size = None
+    self._symbols = symbols
+    self._filtered_symbols = filtered_symbols or []
     self.name = name or ''
     self.section_name = section_name or '.*'
+    self.is_sorted = is_sorted
 
   def __repr__(self):
     return 'Group(name=%s,count=%d,size=%d)' % (
         self.name, len(self), self.size)
 
   def __iter__(self):
-    return iter(self.symbols)
+    return iter(self._symbols)
 
   def __len__(self):
-    return len(self.symbols)
+    return len(self._symbols)
 
-  def __getitem__(self, index):
-    return self.symbols[index]
+  def __eq__(self, other):
+    return self._symbols == other._symbols
+
+  def __getitem__(self, key):
+    """|key| can be an index or an address.
+
+    Raises if multiple symbols map to the address.
+    """
+    if isinstance(key, slice):
+      return self._symbols.__getitem__(key)
+    if isinstance(key, basestring) or key > len(self._symbols):
+      found = self.WhereAddressInRange(key)
+      if len(found) != 1:
+        raise KeyError('%d symbols found at address %s.' % (len(found), key))
+      return found[0]
+    return self._symbols[key]
 
   def __sub__(self, other):
     other_ids = set(id(s) for s in other)
@@ -159,8 +242,9 @@
 
   def __add__(self, other):
     self_ids = set(id(s) for s in self)
-    new_symbols = self.symbols + [s for s in other if id(s) not in self_ids]
-    return self._CreateTransformed(new_symbols, section_name=self.section_name)
+    new_symbols = self._symbols + [s for s in other if id(s) not in self_ids]
+    return self._CreateTransformed(new_symbols, section_name=self.section_name,
+                                   is_sorted=False)
 
   @property
   def address(self):
@@ -175,26 +259,36 @@
     return False
 
   @property
+  def object_path(self):
+    return None
+
+  @property
   def source_path(self):
     return None
 
   @property
   def size(self):
-    if self.IsBss():
-      return sum(s.size for s in self)
-    return sum(s.size for s in self if not s.IsBss())
+    if self._size is None:
+      if self.IsBss():
+        self._size = sum(s.size for s in self)
+      self._size = sum(s.size for s in self if not s.IsBss())
+    return self._size
 
   @property
   def padding(self):
-    return sum(s.padding for s in self)
+    if self._padding is None:
+      self._padding = sum(s.padding for s in self)
+    return self._padding
 
   def IsGroup(self):
     return True
 
   def _CreateTransformed(self, symbols, filtered_symbols=None, name=None,
-                         section_name=None):
+                         section_name=None, is_sorted=None):
+    if is_sorted is None:
+      is_sorted = self.is_sorted
     return SymbolGroup(symbols, filtered_symbols=filtered_symbols, name=name,
-                       section_name=section_name)
+                       section_name=section_name, is_sorted=is_sorted)
 
   def Sorted(self, cmp_func=None, key=None, reverse=False):
     # Default to sorting by abs(size) then name.
@@ -202,10 +296,10 @@
       cmp_func = lambda a, b: cmp((a.IsBss(), abs(b.size), a.name),
                                   (b.IsBss(), abs(a.size), b.name))
 
-    new_symbols = sorted(self.symbols, cmp_func, key, reverse)
-    return self._CreateTransformed(new_symbols,
-                                   filtered_symbols=self.filtered_symbols,
-                                   section_name=self.section_name)
+    new_symbols = sorted(self._symbols, cmp_func, key, reverse)
+    return self._CreateTransformed(
+        new_symbols, filtered_symbols=self._filtered_symbols,
+        section_name=self.section_name, is_sorted=True)
 
   def SortedByName(self, reverse=False):
     return self.Sorted(key=(lambda s:s.name), reverse=reverse)
@@ -241,30 +335,57 @@
     return self.Filter(lambda s: s.IsGenerated())
 
   def WhereNameMatches(self, pattern):
-    regex = re.compile(pattern)
+    regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
     return self.Filter(lambda s: regex.search(s.name))
 
   def WhereObjectPathMatches(self, pattern):
-    regex = re.compile(pattern)
+    regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
     return self.Filter(lambda s: regex.search(s.object_path))
 
   def WhereSourcePathMatches(self, pattern):
-    regex = re.compile(pattern)
+    regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
     return self.Filter(lambda s: regex.search(s.source_path))
 
   def WherePathMatches(self, pattern):
-    regex = re.compile(pattern)
-    return self.Filter(lambda s: regex.search(s.source_path or s.object_path))
+    regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
+    return self.Filter(lambda s: (regex.search(s.source_path) or
+                                  regex.search(s.object_path)))
 
-  def WhereAddressInRange(self, start, end):
-    return self.Filter(lambda s: s.address >= start and s.address <= end)
+  def WhereMatches(self, pattern):
+    """Looks for |pattern| within all paths & names."""
+    regex = re.compile(match_util.ExpandRegexIdentifierPlaceholder(pattern))
+    return self.Filter(lambda s: (regex.search(s.source_path) or
+                                  regex.search(s.object_path) or
+                                  regex.search(s.full_name or '') or
+                                  regex.search(s.name)))
+
+  def WhereAddressInRange(self, start, end=None):
+    """Searches for addesses within [start, end).
+
+    Args may be ints or hex strings. Default value for |end| is |start| + 1.
+    """
+    if isinstance(start, basestring):
+      start = int(start, 16)
+    if end is None:
+      end = start + 1
+    return self.Filter(lambda s: s.address >= start and s.address < end)
 
   def WhereHasAnyAttribution(self):
     return self.Filter(lambda s: s.name or s.source_path or s.object_path)
 
   def Inverted(self):
-    return self._CreateTransformed(self.filtered_symbols,
-                                   filtered_symbols=self.symbols)
+    """Returns the symbols that were filtered out by the previous filter.
+
+    Applies only when the previous call was a filter.
+
+    Example:
+        # Symbols that do not have "third_party" in their path.
+        symbols.WherePathMatches(r'third_party').Inverted()
+        # Symbols within third_party that do not contain the string "foo".
+        symbols.WherePathMatches(r'third_party').WhereMatches('foo').Inverted()
+    """
+    return self._CreateTransformed(
+        self._filtered_symbols, filtered_symbols=self._symbols, is_sorted=False)
 
   def GroupBy(self, func, min_count=0):
     """Returns a SymbolGroup of SymbolGroups, indexed by |func|.
@@ -292,14 +413,16 @@
     min_count = abs(min_count)
     for token, symbols in symbols_by_token.iteritems():
       if len(symbols) >= min_count:
-        new_syms.append(self._CreateTransformed(symbols, name=token,
-                                                section_name=self.section_name))
+        new_syms.append(self._CreateTransformed(
+            symbols, name=token, section_name=self.section_name,
+            is_sorted=False))
       elif include_singles:
         new_syms.extend(symbols)
       else:
         filtered_symbols.extend(symbols)
-    return self._CreateTransformed(new_syms, filtered_symbols=filtered_symbols,
-                                   section_name=self.section_name)
+    return self._CreateTransformed(
+        new_syms, filtered_symbols=filtered_symbols,
+        section_name=self.section_name, is_sorted=False)
 
   def GroupBySectionName(self):
     return self.GroupBy(lambda s: s.section_name)
@@ -402,18 +525,18 @@
         self.unchanged_count, self.size)
 
   def _CreateTransformed(self, symbols, filtered_symbols=None, name=None,
-                         section_name=None):
+                         section_name=None, is_sorted=None):
     ret = SymbolDiff.__new__(SymbolDiff)
     # Printing sorts, so fast-path the same symbols case.
-    if len(symbols) == len(self.symbols):
+    if len(symbols) == len(self._symbols):
       ret._added_ids = self._added_ids
       ret._removed_ids = self._removed_ids
     else:
       ret._added_ids = set(id(s) for s in symbols if self.IsAdded(s))
       ret._removed_ids = set(id(s) for s in symbols if self.IsRemoved(s))
-    super(SymbolDiff, ret).__init__(symbols, filtered_symbols=filtered_symbols,
-                                    name=name, section_name=section_name)
-
+    super(SymbolDiff, ret).__init__(
+        symbols, filtered_symbols=filtered_symbols, name=name,
+        section_name=section_name, is_sorted=is_sorted)
     return ret
 
   @property
@@ -450,9 +573,7 @@
 def Diff(new, old):
   """Diffs two SizeInfo or SymbolGroup objects.
 
-  When diffing SizeInfos, ret.section_sizes are the result of |new| - |old|, and
-  ret.symbols will be a SymbolDiff.
-
+  When diffing SizeInfos, a SizeInfoDiff is returned.
   When diffing SymbolGroups, a SymbolDiff is returned.
 
   Returns:
@@ -464,7 +585,7 @@
     section_sizes = {
         k:new.section_sizes[k] - v for k, v in old.section_sizes.iteritems()}
     symbol_diff = Diff(new.symbols, old.symbols)
-    return SizeInfo(section_sizes, symbol_diff)
+    return SizeInfoDiff(section_sizes, symbol_diff, old.metadata, new.metadata)
 
   assert isinstance(new, SymbolGroup) and isinstance(old, SymbolGroup)
   symbols_by_key = collections.defaultdict(list)
@@ -505,7 +626,7 @@
 
   for section_name, padding in padding_by_section_name.iteritems():
     similar.append(Symbol(section_name, padding,
-                          name='** aggregate padding of delta symbols'))
+                          name="** aggregate padding of diff'ed symbols"))
   return SymbolDiff(added, removed, similar)
 
 
diff --git a/src/tools/binary_size/paths.py b/src/tools/binary_size/paths.py
new file mode 100644
index 0000000..360ab32
--- /dev/null
+++ b/src/tools/binary_size/paths.py
@@ -0,0 +1,97 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Functions for dealing with determining --tool-prefix."""
+
+import distutils.spawn
+import logging
+import os
+
+_STATUS_DETECTED = 1
+_STATUS_VERIFIED = 2
+
+
+def AddOptions(parser):
+  parser.add_argument('--tool-prefix', default='',
+                      help='Path prefix for c++filt.')
+  parser.add_argument('--output-directory',
+                      help='Path to the root build directory.')
+
+
+class LazyPaths(object):
+  def __init__(self, args=None, tool_prefix=None, output_directory=None,
+               input_file=None):
+    tool_prefix = tool_prefix or (args and args.tool_prefix)
+    output_directory = output_directory or (args and args.output_directory)
+    self._tool_prefix = tool_prefix
+    self._output_directory = output_directory
+    self._input_file = input_file
+    self._output_directory_status = _STATUS_DETECTED if output_directory else 0
+    self._tool_prefix_status = _STATUS_DETECTED if tool_prefix else 0
+
+  @property
+  def tool_prefix(self):
+    if self._tool_prefix_status < _STATUS_DETECTED:
+      self._tool_prefix_status = _STATUS_DETECTED
+      self._tool_prefix = self._DetectToolPrefix() or ''
+      logging.debug('Detected --tool-prefix=%s', self._tool_prefix)
+    return self._tool_prefix
+
+  @property
+  def output_directory(self):
+    if self._output_directory_status < _STATUS_DETECTED:
+      self._output_directory_status = _STATUS_DETECTED
+      self._output_directory = self._DetectOutputDirectory()
+      logging.debug('Detected --output-directory=%s', self._output_directory)
+    return self._output_directory
+
+  def VerifyOutputDirectory(self):
+    output_directory = self.output_directory
+    if self._output_directory_status < _STATUS_VERIFIED:
+      self._output_directory_status = _STATUS_VERIFIED
+      if not output_directory or not os.path.isdir(output_directory):
+        raise Exception('Bad --output-directory. Path not found: %s' %
+                        output_directory)
+      logging.info('Using --output-directory=%s', output_directory)
+    return output_directory
+
+  def VerifyToolPrefix(self):
+    tool_prefix = self.tool_prefix
+    if self._tool_prefix_status < _STATUS_VERIFIED:
+      self._tool_prefix_status = _STATUS_VERIFIED
+      if os.path.sep not in tool_prefix:
+        full_path = distutils.spawn.find_executable(tool_prefix + 'c++filt')
+      else:
+        full_path = tool_prefix + 'c++filt'
+
+      if not full_path or not os.path.isfile(full_path):
+        raise Exception('Bad --tool-prefix. Path not found: %s' % full_path)
+      logging.info('Using --tool-prefix=%s', self._tool_prefix)
+    return tool_prefix
+
+  def _DetectOutputDirectory(self):
+    # See if input file is in out/Release.
+    abs_path = os.path.abspath(self._input_file)
+    release_idx = abs_path.find('Release')
+    if release_idx != -1:
+      output_directory = abs_path[:release_idx] + 'Release'
+      output_directory = os.path.relpath(abs_path[:release_idx] + '/Release')
+      return output_directory
+
+    # See if CWD=output directory.
+    if os.path.exists('build.ninja'):
+      return '.'
+    return None
+
+  def _DetectToolPrefix(self):
+    output_directory = self.output_directory
+    if output_directory:
+      # Auto-detect from build_vars.txt
+      build_vars_path = os.path.join(output_directory, 'build_vars.txt')
+      if os.path.exists(build_vars_path):
+        with open(build_vars_path) as f:
+          build_vars = dict(l.rstrip().split('=', 1) for l in f if '=' in l)
+        return os.path.normpath(
+            os.path.join(output_directory, build_vars['android_tool_prefix']))
+    return None
diff --git a/src/tools/binary_size/testdata/ActualDiff.golden b/src/tools/binary_size/testdata/ActualDiff.golden
index ee75fba..89a3926 100644
--- a/src/tools/binary_size/testdata/ActualDiff.golden
+++ b/src/tools/binary_size/testdata/ActualDiff.golden
@@ -1,18 +1,203 @@
-Metadata: time=Unknown tag=
-Section Sizes (Total=0 bytes):
-.bss: 0 bytes (not included in totals)
-.data: 0 bytes (0.0%)
-.data.rel.ro: 0 bytes (0.0%)
-.data.rel.ro.local: 0 bytes (0.0%)
-.rodata: 0 bytes (0.0%)
-.text: 0 bytes (0.0%)
+Common Metadata:
+    baz=yes
+    foo=1
+Old Metadata:
+    bar=[1, 3]
+New Metadata:
+    bar=[1, 2, 3]
 
-1 symbols added (+), 1 changed (~), 1 removed (-), 42 unchanged (not shown)
-Showing 3 symbols with total size: 0 bytes
+Section Sizes (Total=0 bytes):
+    .bss: 0 bytes (not included in totals)
+    .data: 0 bytes (0.0%)
+    .data.rel.ro: 0 bytes (0.0%)
+    .data.rel.ro.local: 0 bytes (0.0%)
+    .rodata: 0 bytes (0.0%)
+    .text: 0 bytes (0.0%)
+
+Other section sizes:
+    .ARM.attributes: 0 bytes
+    .ARM.exidx: 0 bytes
+    .ARM.extab: 0 bytes
+    .comment: 0 bytes
+    .debug_abbrev: 0 bytes
+    .debug_aranges: 0 bytes
+    .debug_frame: 0 bytes
+    .debug_info: 0 bytes
+    .debug_line: 0 bytes
+    .debug_loc: 0 bytes
+    .debug_pubnames: 0 bytes
+    .debug_pubtypes: 0 bytes
+    .debug_ranges: 0 bytes
+    .debug_str: 0 bytes
+    .dynamic: 0 bytes
+    .dynstr: 0 bytes
+    .dynsym: 0 bytes
+    .fini_array: 0 bytes
+    .gnu.version: 0 bytes
+    .gnu.version_d: 0 bytes
+    .gnu.version_r: 0 bytes
+    .got: 0 bytes
+    .hash: 0 bytes
+    .init_array: 0 bytes
+    .interp: 0 bytes
+    .note.gnu.build-id: 0 bytes
+    .note.gnu.gold-version: 0 bytes
+    .plt: 0 bytes
+    .rel.dyn: 0 bytes
+    .rel.plt: 0 bytes
+    .shstrtab: 0 bytes
+    .strtab: 0 bytes
+    .symtab: 0 bytes
+
+3 symbols added (+), 1 changed (~), 2 removed (-), 39 unchanged (=)
+0 object files added, 1 removed
+Removed files:
+  third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
+
+Showing 45 symbols with total size: -10 bytes
+.text=-10 bytes  .rodata=0 bytes    other=0 bytes    total=-10 bytes
+Number of object files: 9
+
 First columns are: running total, type, size
-+        0 b@0x0         262144  third_party/fft_float.cc
-+        0                       ff_cos_131072
-~        0 b@0x0         -10     third_party/fft_fixed.cc
-~        0                       ff_cos_131072_fixed
--        0 b@0x2dffe84   -4      third_party/icu/ucnv_ext.c
--        0                       g_AnimationFrameTimeHistogram_clazz
+~      -10 t@0x28d900    size=-10  padding=0  size_without_padding=-10
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=startup._GLOBAL__sub_I_page_allocator.cc
+=      -10 r@0x284e364   size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+=      -10 r@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 d@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 d@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 d@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 t@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 r@0x266e600   size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** merge strings
+=      -10 r@0x284e518   size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** merge strings
+=      -10 t@0x28f000    size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=** symbol gap 0
+=      -10 t@0x2a1000    size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=** symbol gap 1
+=      -10 d@0x2cd84e0   size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
+               is_anonymous=0  name=.Lswitch.table.45
+=      -10 d@0x2c176f0   size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=ChromeMainDelegate [vtable]
+=      -10 d@0x2cd8500   size=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               is_anonymous=0  name=ChromeMainDelegateAndroid [vtable]
+=      -10 r@0x284e370   size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=Name
+=      -10 d@0x2de70a0   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=1  name=base::android::g_renderer_histogram_code
+=      -10 r@0x28f3480   size=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               is_anonymous=1  full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list
+               is_anonymous=1  name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list
+=      -10 t@0x2a0020    size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
+               is_anonymous=0  name=blink::ContiguousContainerBase::ContiguousContainerBase
+=      -10 t@0x2a0000    size=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               is_anonymous=0  full_name=blink::ContiguousContainerBase::shrinkToFit()
+               is_anonymous=0  name=blink::ContiguousContainerBase::shrinkToFit
+=      -10 t@0x2a1000    size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=1  full_name=blink::PaintChunker::releasePaintChunks()
+               is_anonymous=1  name=blink::PaintChunker::releasePaintChunks
+=      -10 d@0x2c17740   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=chrome::mojom::FieldTrialRecorderProxy [vtable]
+=      -10 d@0x2c17728   size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=chrome::mojom::FieldTrialRecorderRequestValidator [vtable]
+=      -10 r@0x284e398   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=chrome::mojom::FilePatcher::Name_
+=      -10 t@0x28d964    size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  full_name=extFromUUseMapping(signed char, unsigned int, int)
+               is_anonymous=0  name=extFromUUseMapping
+=      -10 t@0x28d98a    size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  full_name=extFromUUseMapping(aj, int)
+               is_anonymous=0  name=extFromUUseMapping
+=      -10 d@0x2de7000   size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=google::protobuf::internal::pLinuxKernelCmpxchg
+=      -10 d@0x2de7004   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=google::protobuf::internal::pLinuxKernelMemoryBarrier
+=      -10 r@0x28f3450   size=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               is_anonymous=1  name=kAnimationFrameTimeHistogramClassPath
+=      -10 d@0x2cd8550   size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=kMethodsAnimationFrameTimeHistogram
+=      -10 d@0x2cd84f0   size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
+               is_anonymous=1  name=kSystemClassPrefixes
+=      -10 d@0x2cd8538   size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=mojo::MessageReceiver [vtable]
+=      -10 d@0x2de7008   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=rel._ZN4base7androidL22kBaseRegisteredMethodsE
+=      -10 d@0x2de70a4   size=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               is_anonymous=0  name=rel.local._ZN4base7android12_GLOBAL__N_124g_library_version_numberE
+=      -10 t@0x28f1c8    size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=startup._GLOBAL__sub_I_SkDeviceProfile.cpp
+=      -10 t@0x28f1e0    size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=startup._GLOBAL__sub_I_SkDiscardableMemoryPool.cpp
+=      -10 t@0x28d910    size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=startup._GLOBAL__sub_I_bbr_sender.cc
+=      -10 t@0x28d948    size=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               is_anonymous=0  name=startup._GLOBAL__sub_I_pacing_sender.cc
+=      -10 t@0x28f000    size=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char)
+               is_anonymous=0  name=ucnv_extMatchFromU
+-      -10 b@0x0         size=-262144  padding=0  size_without_padding=-262144
+               source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+               is_anonymous=0  name=ff_cos_131072
+-      -10 b@0x0         size=-131072  padding=0  size_without_padding=-131072
+               source_path=third_party/fft_fixed.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
+               is_anonymous=0  name=ff_cos_131072_fixed
++      -10 b@0x2dffe80   size=200  padding=196  size_without_padding=4
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  full_name=SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jlongArray*> const&, int)::atomic_histogram_pointer
+               is_anonymous=0  name=SaveHistogram::atomic_histogram_pointer
++      -10 b@0x2dffda0   size=28  padding=0  size_without_padding=28
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=0  name=g_chrome_content_browser_client
++      -10 b@0x2dffe84   size=4  padding=0  size_without_padding=4
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               is_anonymous=1  name=g_AnimationFrameTimeHistogram_clazz
+=      -10 b@0x0         size=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               is_anonymous=0  name=** aggregate padding of diff'ed symbols
+=      -10 b@0x0         size=0  padding=0  size_without_padding=0
+               source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+               is_anonymous=0  name=ff_cos_65536
diff --git a/src/tools/binary_size/testdata/ConsoleNullDiff.golden b/src/tools/binary_size/testdata/ConsoleNullDiff.golden
index cfe7c66..12180ca 100644
--- a/src/tools/binary_size/testdata/ConsoleNullDiff.golden
+++ b/src/tools/binary_size/testdata/ConsoleNullDiff.golden
@@ -1,12 +1,20 @@
-Metadata: time=Unknown tag=
+Common Metadata:
+Old Metadata:
+New Metadata:
+
 Section Sizes (Total=0 bytes):
-.bss: 0 bytes (not included in totals)
-.data: 0 bytes (0.0%)
-.data.rel.ro: 0 bytes (0.0%)
-.data.rel.ro.local: 0 bytes (0.0%)
-.rodata: 0 bytes (0.0%)
-.text: 0 bytes (0.0%)
+    .bss: 0 bytes (not included in totals)
+    .data: 0 bytes (0.0%)
+    .data.rel.ro: 0 bytes (0.0%)
+    .data.rel.ro.local: 0 bytes (0.0%)
+    .rodata: 0 bytes (0.0%)
+    .text: 0 bytes (0.0%)
 
 0 symbols added (+), 0 changed (~), 0 removed (-), 45 unchanged (not shown)
+0 object files added, 0 removed
+
 Showing 0 symbols with total size: 0 bytes
+.text=0 bytes    .rodata=0 bytes    other=0 bytes    total=0 bytes
+Number of object files: 0
+
 First columns are: running total, type, size
diff --git a/src/tools/binary_size/testdata/Map2Size.golden b/src/tools/binary_size/testdata/Map2Size.golden
index e43fc62..7365359 100644
--- a/src/tools/binary_size/testdata/Map2Size.golden
+++ b/src/tools/binary_size/testdata/Map2Size.golden
@@ -1,47 +1,47 @@
-Section r has 44.6% of 2641188 bytes accounted for from 7 symbols. 3286464 bytes are unaccounted for. Padding accounts for 14 bytes
-+ Without 2 merge sections and 0 anonymous entries (accounting for 2641042 bytes):
+Section r has 44.6% of 2641540 bytes accounted for from 7 symbols. 3286112 bytes are unaccounted for. Padding accounts for 366 bytes
++ Without 2 merge sections and 0 anonymous entries (accounting for 2641394 bytes):
 + Section r has 0.0% of 146 bytes accounted for from 5 symbols. 5927506 bytes are unaccounted for. Padding accounts for 14 bytes
-Section b has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 bytes are unaccounted for. Padding accounts for 196 bytes
+Section b has 0.0% of 0 bytes accounted for from 6 symbols. 1300456 bytes are unaccounted for. Padding accounts for 196 bytes
 Section d has 0.0% of 388 bytes accounted for from 13 symbols. 1956628 bytes are unaccounted for. Padding accounts for 0 bytes
-Section t has 0.0% of 10578 bytes accounted for from 13 symbols. 35890134 bytes are unaccounted for. Padding accounts for 12 bytes
+Section t has 0.0% of 10578 bytes accounted for from 13 symbols. 35890134 bytes are unaccounted for. Padding accounts for 9774 bytes
 + Without 2 merge sections and 0 anonymous entries (accounting for 9758 bytes):
 + Section t has 0.0% of 820 bytes accounted for from 11 symbols. 35899892 bytes are unaccounted for. Padding accounts for 16 bytes
-.bss@0(size=262144,padding=0,name=ff_cos_131072,path=third_party/fft_float.cc,anon=0)
-.bss@0(size=131072,padding=0,name=ff_cos_131072_fixed,path=third_party/fft_fixed.cc,anon=0)
-.bss@0(size=131072,padding=0,name=ff_cos_65536,path=third_party/fft_float.cc,anon=0)
-.bss@2dffda0(size=28,padding=0,name=g_chrome_content_browser_client,path=third_party/icu/ucnv_ext.c,anon=0)
-.bss@2dffe80(size=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,path=third_party/icu/ucnv_ext.c,anon=0)
-.bss@2dffe84(size=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,path=third_party/icu/ucnv_ext.c,anon=1)
-.data@2de7000(size=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,path=base/page_allocator.cc,anon=0)
-.data@2de7004(size=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,path=third_party/container.c,anon=0)
-.data@2de7008(size=152,padding=0,name=rel._ZN4base7androidL22kBaseRegisteredMethodsE,path=third_party/container.c,anon=0)
-.data@2de70a0(size=4,padding=0,name=base::android::g_renderer_histogram_code,path=third_party/container.c,anon=1)
-.data@2de70a4(size=4,padding=0,name=rel.local._ZN4base7android12_GLOBAL__N_124g_library_version_numberE,path=third_party/container.c,anon=0)
-.data.rel.ro@2cd8500(size=56,padding=0,name=ChromeMainDelegateAndroid [vtable],path=third_party/paint.cc,anon=0)
-.data.rel.ro@2cd8538(size=24,padding=0,name=mojo::MessageReceiver [vtable],path=base/page_allocator.cc,anon=0)
-.data.rel.ro@2cd8550(size=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,path=base/page_allocator.cc,anon=0)
-.data.rel.ro.local@2c176f0(size=56,padding=0,name=ChromeMainDelegate [vtable],path=third_party/icu/ucnv_ext.c,anon=0)
-.data.rel.ro.local@2c17728(size=24,padding=0,name=chrome::mojom::FieldTrialRecorderRequestValidator [vtable],path=third_party/icu/ucnv_ext.c,anon=0)
-.data.rel.ro.local@2c17740(size=24,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],path=third_party/container.c,anon=0)
-.data.rel.ro.local@2cd84e0(size=16,padding=0,name=.Lswitch.table.45,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/(libcontroller_api_impl.a_controller_api_impl.o),anon=0)
-.data.rel.ro.local@2cd84f0(size=8,padding=0,name=kSystemClassPrefixes,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/(libport_android_jni.a_jni_utils.o),anon=1)
-.rodata@266e600(size=1965409,padding=0,name=** merge strings,path=,anon=0)
-.rodata@284e364(size=8,padding=3,name=,path=base/page_allocator.cc,anon=0)
-.rodata@284e370(size=40,padding=4,name=Name,path=base/page_allocator.cc,anon=0)
-.rodata@284e398(size=32,padding=0,name=chrome::mojom::FilePatcher::Name_,path=third_party/container.c,anon=0)
-.rodata@284e518(size=675633,padding=0,name=** merge strings,path=,anon=0)
-.rodata@28f3450(size=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,path=third_party/paint.cc,anon=1)
-.rodata@28f3480(size=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,path=third_party/paint.cc,anon=1)
-.text@28d900(size=16,padding=0,name=startup._GLOBAL__sub_I_page_allocator.cc,path=base/page_allocator.cc,anon=0)
-.text@28d910(size=56,padding=0,name=startup._GLOBAL__sub_I_bbr_sender.cc,path=base/page_allocator.cc,anon=0)
-.text@28d948(size=28,padding=0,name=startup._GLOBAL__sub_I_pacing_sender.cc,path=base/page_allocator.cc,anon=0)
-.text@28d964(size=38,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,anon=0)
-.text@28d98a(size=32,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,anon=0)
-.text@28d9aa(size=5718,padding=0,name=** symbol gap 0,path=third_party/icu/ucnv_ext.c,anon=0)
-.text@28f000(size=448,padding=0,name=ucnv_extMatchFromU,path=third_party/icu/ucnv_ext.c,anon=0)
-.text@28f1c8(size=20,padding=8,name=startup._GLOBAL__sub_I_SkDeviceProfile.cpp,path=third_party/icu/ucnv_ext.c,anon=0)
-.text@28f1e0(size=20,padding=4,name=startup._GLOBAL__sub_I_SkDiscardableMemoryPool.cpp,path=third_party/icu/ucnv_ext.c,anon=0)
-.text@2a0000(size=28,padding=0,name=blink::ContiguousContainerBase::shrinkToFit,path=third_party/paint.cc,anon=0)
-.text@2a0020(size=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,path=third_party/container.c,anon=0)
-.text@2a0034(size=4044,padding=-4,name=** symbol gap 1,path=third_party/container.c,anon=0)
-.text@2a1000(size=94,padding=0,name=blink::PaintChunker::releasePaintChunks,path=third_party/container.c,anon=1)
+.bss@0(size_without_padding=262144,padding=0,name=ff_cos_131072,path=third_party/fft_float.cc,anon=0)
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_131072_fixed,path=third_party/fft_fixed.cc,anon=0)
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_65536,path=third_party/fft_float.cc,anon=0)
+.bss@2dffda0(size_without_padding=28,padding=0,name=g_chrome_content_browser_client,path=third_party/icu/ucnv_ext.c,anon=0)
+.bss@2dffe80(size_without_padding=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,path=third_party/icu/ucnv_ext.c,anon=0)
+.bss@2dffe84(size_without_padding=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,path=third_party/icu/ucnv_ext.c,anon=1)
+.data@2de7000(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,path=base/page_allocator.cc,anon=0)
+.data@2de7004(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,path=third_party/container.c,anon=0)
+.data@2de7008(size_without_padding=152,padding=0,name=rel._ZN4base7androidL22kBaseRegisteredMethodsE,path=third_party/container.c,anon=0)
+.data@2de70a0(size_without_padding=4,padding=0,name=base::android::g_renderer_histogram_code,path=third_party/container.c,anon=1)
+.data@2de70a4(size_without_padding=4,padding=0,name=rel.local._ZN4base7android12_GLOBAL__N_124g_library_version_numberE,path=third_party/container.c,anon=0)
+.data.rel.ro@2cd8500(size_without_padding=56,padding=0,name=ChromeMainDelegateAndroid [vtable],path=third_party/paint.cc,anon=0)
+.data.rel.ro@2cd8538(size_without_padding=24,padding=0,name=mojo::MessageReceiver [vtable],path=base/page_allocator.cc,anon=0)
+.data.rel.ro@2cd8550(size_without_padding=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,path=base/page_allocator.cc,anon=0)
+.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,name=ChromeMainDelegate [vtable],path=third_party/icu/ucnv_ext.c,anon=0)
+.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorderRequestValidator [vtable],path=third_party/icu/ucnv_ext.c,anon=0)
+.data.rel.ro.local@2c17740(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],path=third_party/container.c,anon=0)
+.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=0,name=.Lswitch.table.45,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,anon=0)
+.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,name=kSystemClassPrefixes,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,anon=1)
+.rodata@266e600(size_without_padding=1965409,padding=0,name=** merge strings,path=,anon=0)
+.rodata@284e364(size_without_padding=8,padding=3,name=,path=base/page_allocator.cc,anon=0)
+.rodata@284e370(size_without_padding=40,padding=4,name=Name,path=base/page_allocator.cc,anon=0)
+.rodata@284e398(size_without_padding=32,padding=0,name=chrome::mojom::FilePatcher::Name_,path=third_party/container.c,anon=0)
+.rodata@284e518(size_without_padding=675633,padding=352,name=** merge strings,path=,anon=0)
+.rodata@28f3450(size_without_padding=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,path=third_party/paint.cc,anon=1)
+.rodata@28f3480(size_without_padding=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,path=third_party/paint.cc,anon=1)
+.text@28d900(size_without_padding=16,padding=0,name=startup._GLOBAL__sub_I_page_allocator.cc,path=base/page_allocator.cc,anon=0)
+.text@28d910(size_without_padding=56,padding=0,name=startup._GLOBAL__sub_I_bbr_sender.cc,path=base/page_allocator.cc,anon=0)
+.text@28d948(size_without_padding=28,padding=0,name=startup._GLOBAL__sub_I_pacing_sender.cc,path=base/page_allocator.cc,anon=0)
+.text@28d964(size_without_padding=38,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,anon=0)
+.text@28d98a(size_without_padding=32,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,anon=0)
+.text@28f000(size_without_padding=0,padding=5718,name=** symbol gap 0,path=third_party/icu/ucnv_ext.c,anon=0)
+.text@28f000(size_without_padding=448,padding=0,name=ucnv_extMatchFromU,path=third_party/icu/ucnv_ext.c,anon=0)
+.text@28f1c8(size_without_padding=20,padding=8,name=startup._GLOBAL__sub_I_SkDeviceProfile.cpp,path=third_party/icu/ucnv_ext.c,anon=0)
+.text@28f1e0(size_without_padding=20,padding=4,name=startup._GLOBAL__sub_I_SkDiscardableMemoryPool.cpp,path=third_party/icu/ucnv_ext.c,anon=0)
+.text@2a0000(size_without_padding=28,padding=0,name=blink::ContiguousContainerBase::shrinkToFit,path=third_party/paint.cc,anon=0)
+.text@2a0020(size_without_padding=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,path=third_party/container.c,anon=0)
+.text@2a1000(size_without_padding=0,padding=4040,name=** symbol gap 1,path=third_party/container.c,anon=0)
+.text@2a1000(size_without_padding=94,padding=0,name=blink::PaintChunker::releasePaintChunks,path=third_party/container.c,anon=1)
diff --git a/src/tools/binary_size/testdata/SymbolGroupMethods.golden b/src/tools/binary_size/testdata/SymbolGroupMethods.golden
index d43c4c5..e59d05c 100644
--- a/src/tools/binary_size/testdata/SymbolGroupMethods.golden
+++ b/src/tools/binary_size/testdata/SymbolGroupMethods.golden
@@ -1,46 +1,58 @@
 GroupByNamespace()
-Showing 10 symbols with total size: 2652154 bytes
+Showing 10 symbols with total size: 2652506 bytes
+.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Number of object files: 1
+
 First columns are: running total, type, size
- 2651884 * 2651884  {global} (count=27)
- 2651978 * 94       blink::PaintChunker (count=1)
- 2652034 * 56       blink::ContiguousContainerBase (count=2)
- 2652082 * 48       chrome::mojom (count=2)
- 2652114 * 32       chrome::mojom::FilePatcher (count=1)
- 2652138 * 24       mojo (count=1)
- 2652146 * 8        google::protobuf::internal (count=2)
- 2652150 * 4        base::android (count=1)
- 2652154 * 4        blink::CSSValueKeywordsHash::findValueImpl (count=1)
- 2652154 * 0        SaveHistogram (count=1)
+ 2652236 * 2652236  {global} (count=27)
+ 2652330 * 94       blink::PaintChunker (count=1)
+ 2652386 * 56       blink::ContiguousContainerBase (count=2)
+ 2652434 * 48       chrome::mojom (count=2)
+ 2652466 * 32       chrome::mojom::FilePatcher (count=1)
+ 2652490 * 24       mojo (count=1)
+ 2652498 * 8        google::protobuf::internal (count=2)
+ 2652502 * 4        base::android (count=1)
+ 2652506 * 4        blink::CSSValueKeywordsHash::findValueImpl (count=1)
+ 2652506 * 0        SaveHistogram (count=1)
 GroupByNamespace(depth=1)
-Showing 7 symbols with total size: 2652154 bytes
+Showing 7 symbols with total size: 2652506 bytes
+.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Number of object files: 1
+
 First columns are: running total, type, size
- 2651884 * 2651884  {global} (count=27)
- 2652038 * 154      blink (count=4)
- 2652118 * 80       chrome (count=3)
- 2652142 * 24       mojo (count=1)
- 2652150 * 8        google (count=2)
- 2652154 * 4        base (count=1)
- 2652154 * 0        SaveHistogram (count=1)
+ 2652236 * 2652236  {global} (count=27)
+ 2652390 * 154      blink (count=4)
+ 2652470 * 80       chrome (count=3)
+ 2652494 * 24       mojo (count=1)
+ 2652502 * 8        google (count=2)
+ 2652506 * 4        base (count=1)
+ 2652506 * 0        SaveHistogram (count=1)
 GroupByNamespace(depth=1, fallback=None)
-Showing 7 symbols with total size: 2652154 bytes
+Showing 7 symbols with total size: 2652506 bytes
+.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Number of object files: 1
+
 First columns are: running total, type, size
- 2651884 * 2651884   (count=27)
- 2652038 * 154      blink (count=4)
- 2652118 * 80       chrome (count=3)
- 2652142 * 24       mojo (count=1)
- 2652150 * 8        google (count=2)
- 2652154 * 4        base (count=1)
- 2652154 * 0        SaveHistogram (count=1)
+ 2652236 * 2652236   (count=27)
+ 2652390 * 154      blink (count=4)
+ 2652470 * 80       chrome (count=3)
+ 2652494 * 24       mojo (count=1)
+ 2652502 * 8        google (count=2)
+ 2652506 * 4        base (count=1)
+ 2652506 * 0        SaveHistogram (count=1)
 GroupByNamespace(depth=1, min_count=2)
-Showing 7 symbols with total size: 2652154 bytes
+Showing 7 symbols with total size: 2652506 bytes
+.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Number of object files: 4
+
 First columns are: running total, type, size
- 2651884 * 2651884  {global} (count=27)
- 2652038 * 154      blink (count=4)
- 2652118 * 80       chrome (count=3)
- 2652142 d@0x2cd8538   24      base/page_allocator.cc
- 2652142                       mojo::MessageReceiver [vtable]
- 2652150 * 8        google (count=2)
- 2652154 d@0x2de70a0   4       third_party/container.c
- 2652154                       base::android::g_renderer_histogram_code
- 2652154 b@0x2dffe80   200     third_party/icu/ucnv_ext.c
- 2652154                       SaveHistogram::atomic_histogram_pointer
+ 2652236 * 2652236  {global} (count=27)
+ 2652390 * 154      blink (count=4)
+ 2652470 * 80       chrome (count=3)
+ 2652494 d@0x2cd8538   24      base/page_allocator.cc
+             mojo::MessageReceiver [vtable]
+ 2652502 * 8        google (count=2)
+ 2652506 d@0x2de70a0   4       third_party/container.c
+             base::android::g_renderer_histogram_code
+ 2652506 b@0x2dffe80   200     third_party/icu/ucnv_ext.c
+             SaveHistogram::atomic_histogram_pointer
diff --git a/src/tools/blink_rename_merge_helper/.gitignore b/src/tools/blink_rename_merge_helper/.gitignore
new file mode 100644
index 0000000..dcd5906
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/.gitignore
@@ -0,0 +1 @@
+staging
diff --git a/src/tools/blink_rename_merge_helper/COMPONENTS b/src/tools/blink_rename_merge_helper/COMPONENTS
new file mode 100644
index 0000000..b573832
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/COMPONENTS
@@ -0,0 +1,11 @@
+{
+  "pylib": "2af6a38142b87bc78f57f65030de579820406c4b",
+  "data": "2a75d6c41ca69e5278a46eb271296b9354d2728d",
+  "bin-darwin": "f45f58ccbf42a26b0704f63d8740cf008b84afcc",
+  "include-darwin": "1a5693595308ffc3c2cd826ac21e538aeafe5345",
+  "lib-darwin": "29baf57b55dd0ab060baf0cd6461a7e0fa0105f4",
+  "bin-linux*": "c7c76f202a6d0feb77dd946b2e605a1ba56d3046",
+  "lib-linux*": "508b0ba0de0b4191a54360330f74cea8afd5ee93",
+  "bin-win32": "f8ff17a5f080cef7639140b057a0f61b4d1a4f8f",
+  "lib-win32": "afb47503a4fd442c353ddaba6f17a81e6aa5a20f"
+}
diff --git a/src/tools/blink_rename_merge_helper/OWNERS b/src/tools/blink_rename_merge_helper/OWNERS
new file mode 100644
index 0000000..a4eaaa5
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/OWNERS
@@ -0,0 +1,6 @@
+danakj@chromium.org
+dcheng@chromium.org
+lukasza@chromium.org
+nasko@chromium.org
+
+# COMPONENT: Tools
diff --git a/src/tools/blink_rename_merge_helper/README.md b/src/tools/blink_rename_merge_helper/README.md
new file mode 100644
index 0000000..d9bc67e
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/README.md
@@ -0,0 +1,14 @@
+Tool to help manage merge conflicts from the Blink rename. The tool is committed
+into the Chromium repository. However, with the exception of the `run.py` loader
+stub, everything else is fetched from the chromium-blink-rename Google Storage
+bucket at runtime.
+
+COMPONENTS is a list of component names and hashes; the tool always fetches the
+latest COMPONENTS manifest from Google Storage. The checked-in copy exists as a
+reference, so that changes can be reviewed and tracked. In addition, if the
+component name is of the form `name-platform`, `name` is used as the actual
+component name, while `platform` is passed to `download_from_google_storage.py`
+as the platform argument. This is used to version per-platform binaries.
+
+Use `upload_to_google_storage.py -b chromium-blink-rename -a pylib` to upload
+new versions of the pylib.
diff --git a/src/tools/blink_rename_merge_helper/pylib/__init__.py b/src/tools/blink_rename_merge_helper/pylib/__init__.py
new file mode 100644
index 0000000..a22a6ee
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/pylib/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/__init__.py b/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/__init__.py
new file mode 100644
index 0000000..a22a6ee
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/driver.py b/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/driver.py
new file mode 100644
index 0000000..79b024f
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/pylib/blink_rename_merge_helper/driver.py
@@ -0,0 +1,10 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+
+def run():
+  print 'Hello World!'
+  print sys.argv
diff --git a/src/tools/blink_rename_merge_helper/run.py b/src/tools/blink_rename_merge_helper/run.py
new file mode 100755
index 0000000..cff45fb
--- /dev/null
+++ b/src/tools/blink_rename_merge_helper/run.py
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Tool to help developers rebase branches across the Blink rename."""
+
+import argparse
+import json
+import os
+import subprocess
+import shutil
+import sys
+import tempfile
+
+
+class _DepotToolsNotFoundException(Exception):
+  pass
+
+
+def _whereis(name):
+  """Find and return the first entry in $PATH containing a file named |name|.
+
+  Returns the path if found; otherwise returns nothing.
+  """
+  for path in os.environ['PATH'].split(os.pathsep):
+    if os.path.exists(os.path.join(path, name)):
+      return path
+
+
+def _find_depot_tools():
+  """Attempts to configure and return a wrapper for invoking depot tools.
+
+  Returns:
+    A helper object for invoking depot tools.
+
+  Raises:
+    _DepotToolsNotFoundException: An error occurred trying to find depot tools.
+  """
+
+  class DepotToolsWrapper(object):
+
+    def __init__(self, path):
+      self.__download_from_google_storage = os.path.join(
+          path, 'download_from_google_storage.py')
+      self.__gsutil = os.path.join(path, 'gsutil.py')
+
+    def call_download_from_google_storage(self, *args):
+      """Runs download_from_google_storage with the given args."""
+      subprocess.check_call(['python', self.__download_from_google_storage] +
+                            list(args))
+
+    def call_gsutil(self, *args):
+      """Runs gsutil with the given args."""
+      subprocess.check_call(['python', self.__gsutil] + list(args))
+
+  # Attempt to find download_from_google_storage.py from depot_tools
+  path = _whereis('download_from_google_storage.py')
+  if not path:
+    raise _DepotToolsNotFoundException(
+        'download_from_google_storage.py not found. Make sure depot_tools is '
+        'in $PATH.')
+
+  # Make sure gsutil.py is in the same location
+  path2 = _whereis('download_from_google_storage.py')
+  if not path2:
+    raise _DepotToolsNotFoundException(
+        'gsutil.py not found. Make sure depot_tools is in $PATH.')
+
+  if path != path2:
+    raise _DepotToolsNotFoundException(
+        'download_from_google_storage.py found in %s but gsutil.py found in %s.'
+        % (path, path2))
+
+  return DepotToolsWrapper(path)
+
+
+class Bootstrapper(object):
+  """Helper class for bootstrapping startup of the rebase helper.
+
+  Performs update checks and stages any required binaries."""
+
+  def __init__(self, depot_tools, components_path_override):
+    """Bootstrapper constructor.
+
+    Args:
+      depot_tools: a wrapper for invoking depot_tools.
+      components_path_override: If set, used as the path for the COMPONENTS file
+          rather than using the copy in the Google Storage bucket.
+    """
+    self.__depot_tools = depot_tools
+    self.__components_path_override = components_path_override
+    self.__tmpdir = None
+
+  def __enter__(self):
+    self.__tmpdir = tempfile.mkdtemp()
+    return self
+
+  def __exit__(self, exc_type, exc_value, traceback):
+    shutil.rmtree(self.__tmpdir, ignore_errors=True)
+
+  def update(self):
+    """Performs an update check for various components."""
+    components = self._get_latest_components()
+    for name, sha1_hash in components.iteritems():
+      args = [
+          '--no_auth', '--no_resume', '-b', 'chromium-blink-rename',
+          '--extract', sha1_hash
+      ]
+      if '-' in name:
+        name, platform = name.split('-', 1)
+        args.append('-p')
+        args.append(platform)
+      args.append('-o')
+      args.append(os.path.join('staging', '%s.tar.gz' % name))
+      self.__depot_tools.call_download_from_google_storage(*args)
+
+  def _get_latest_components(self):
+    """Fetches info about the latest components from google storage.
+
+    The return value should be a dict of component names to SHA1 hashes."""
+    components_path = self.__components_path_override
+    if not components_path:
+      components_path = os.path.join(self.__tmpdir, 'COMPONENTS')
+      self.__depot_tools.call_gsutil(
+          'cp', 'gs://chromium-blink-rename/COMPONENTS', components_path)
+    with open(components_path) as f:
+      return json.loads(f.read())
+
+
+def main():
+  # Intentionally suppress help. These are internal testing flags.
+  parser = argparse.ArgumentParser(add_help=False)
+  parser.add_argument('--components-file')
+  args, remaining_argv = parser.parse_known_args()
+
+  script_dir = os.path.dirname(os.path.realpath(__file__))
+  os.chdir(script_dir)
+
+  try:
+    depot_tools = _find_depot_tools()
+  except _DepotToolsNotFoundException as e:
+    print e.message
+    return 1
+
+  print 'Checking for updates...'
+  with Bootstrapper(depot_tools, args.components_file) as bootstrapper:
+    bootstrapper.update()
+
+  # Import stage 2 and launch it.
+  tool_pylib = os.path.abspath(os.path.join(script_dir, 'staging/pylib'))
+  sys.path.insert(0, tool_pylib)
+  from blink_rename_merge_helper import driver
+  # Note: for compatibility with older versions of run.py, set sys.argv to the
+  # unconsumed args.
+  sys.argv = sys.argv[:1] + remaining_argv
+  driver.run()
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/src/tools/check_grd_for_unused_strings.py b/src/tools/check_grd_for_unused_strings.py
index 8124b57..21afc8a 100755
--- a/src/tools/check_grd_for_unused_strings.py
+++ b/src/tools/check_grd_for_unused_strings.py
@@ -152,7 +152,7 @@
       os.path.join(chrome_dir, 'renderer', 'resources',
                    'renderer_resources.grd'),
       os.path.join(device_base_dir, 'bluetooth', 'bluetooth_strings.grd'),
-      os.path.join(src_dir, 'extensions', 'extensions_strings.grd'),
+      os.path.join(src_dir, 'extensions', 'strings', 'extensions_strings.grd'),
       os.path.join(src_dir, 'ui', 'resources', 'ui_resources.grd'),
       os.path.join(src_dir, 'ui', 'webui', 'resources', 'webui_resources.grd'),
       os.path.join(ui_strings_dir, 'app_locale_settings.grd'),
diff --git a/src/tools/chrome_proxy/webdriver/fallback.py b/src/tools/chrome_proxy/webdriver/fallback.py
index 86025e2..2b60ee9 100644
--- a/src/tools/chrome_proxy/webdriver/fallback.py
+++ b/src/tools/chrome_proxy/webdriver/fallback.py
@@ -68,6 +68,30 @@
       self.assertEqual(1, histogram['count'])
       self.assertIn({'count': 1, 'high': 6, 'low': 5}, histogram['buckets'])
 
+  # DataSaver uses a https proxy by default, if that fails it will fall back to 
+  # a http proxy; and if that fails, it will fall back to a direct connection
+  def testHTTPToDirectFallback(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+      # set the primary (https) proxy to a bad one.  
+      # That will force DataSaver to the http proxy for normal page requests.
+      test_driver.AddChromeArg('--spdy-proxy-auth-origin='
+                               'https://nonexistent.googlezip.net')
+      test_driver.AddChromeArg('--data-reduction-proxy-http-proxies='
+                               'http://nonexistent.googlezip.net;'
+                               'http://compress.googlezip.net')  
+          
+      test_driver.LoadURL('http://check.googlezip.net/fallback/')
+      responses = test_driver.GetHTTPResponses()      
+      self.assertNotEqual(0, len(responses))
+      for response in responses:        
+        self.assertEqual(80, response.port)
 
+      test_driver.LoadURL('http://check.googlezip.net/block/')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertNotHasChromeProxyViaHeader(response)
+        
 if __name__ == '__main__':
   IntegrationTest.RunAllTests()
diff --git a/src/tools/chrome_proxy/webdriver/reenable_after_bypass.py b/src/tools/chrome_proxy/webdriver/reenable_after_bypass.py
new file mode 100644
index 0000000..b5e9daf
--- /dev/null
+++ b/src/tools/chrome_proxy/webdriver/reenable_after_bypass.py
@@ -0,0 +1,83 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import time
+
+import common
+from common import TestDriver
+from common import IntegrationTest
+
+
+class ReenableAfterBypass(IntegrationTest):
+  """Tests for ensuring that DRPs are reenabled after bypasses expire.
+
+  These tests take a very long time to run since they wait for their respective
+  bypasses to expire. These tests have been separated out into their own file in
+  order to make it easier to run these tests separately from the others.
+  """
+
+  # Verify that longer bypasses triggered by the Data Reduction Proxy only last
+  # as long as they're supposed to, and that the proxy is used once again after
+  # the bypass has ended.
+  def testReenableAfterSetBypass(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+
+      # Load URL that triggers a 20-second bypass of all proxies.
+      test_driver.LoadURL('http://check.googlezip.net/block20/')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertNotHasChromeProxyViaHeader(response)
+
+      # Verify that the Data Reduction Proxy is still bypassed.
+      test_driver.LoadURL('http://check.googlezip.net/test.html')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertNotHasChromeProxyViaHeader(response)
+
+      # Verify that the Data Reduction Proxy is no longer bypassed after 20
+      # seconds.
+      time.sleep(20)
+      test_driver.LoadURL('http://check.googlezip.net/test.html')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertHasChromeProxyViaHeader(response)
+
+  # Verify that when the Data Reduction Proxy responds with the "block=0"
+  # directive, Chrome bypasses all proxies for the next 1-5 minutes.
+  def testReenableAfterBypass(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+
+      # Load URL that triggers a bypass of all proxies that lasts between 1 and
+      # 5 minutes.
+      test_driver.LoadURL('http://check.googlezip.net/block/')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertNotHasChromeProxyViaHeader(response)
+
+      # Verify that the Data Reduction Proxy is still bypassed after 30 seconds.
+      time.sleep(30)
+      test_driver.LoadURL('http://check.googlezip.net/test.html')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertNotHasChromeProxyViaHeader(response)
+
+      # Verify that the Data Reduction Proxy is no longer bypassed 5 minutes
+      # after the original bypass was triggered.
+      time.sleep(60 * 4 + 30)
+      test_driver.LoadURL('http://check.googlezip.net/test.html')
+      responses = test_driver.GetHTTPResponses()
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertHasChromeProxyViaHeader(response)
+
+
+if __name__ == '__main__':
+  IntegrationTest.RunAllTests()
diff --git a/src/tools/clang/pylib/clang/compile_db.py b/src/tools/clang/pylib/clang/compile_db.py
index 8bae555..cb8a39f 100755
--- a/src/tools/clang/pylib/clang/compile_db.py
+++ b/src/tools/clang/pylib/clang/compile_db.py
@@ -5,22 +5,93 @@
 
 import json
 import os
+import re
+import shlex
+import sys
 import subprocess
 
 
+_RSP_RE = re.compile(r' (@(.+?\.rsp)) ')
+_debugging = False
+
+
+def _ProcessEntry(entry):
+  """Transforms one entry in the compile database to be clang-tool friendly."""
+  # Escape backslashes to prevent shlex from interpreting them.
+  escaped_command = entry['command'].replace('\\', '\\\\')
+  split_command = shlex.split(escaped_command)
+  # Drop gomacc.exe from the front, if present.
+  if split_command[0].endswith('gomacc.exe'):
+    split_command = split_command[1:]
+  # Insert --driver-mode=cl as the first argument.
+  split_command = split_command[:1] + ['--driver-mode=cl'] + split_command[1:]
+  entry['command'] = ' '.join(split_command)
+
+  # Expand the contents of the response file, if any.
+  # http://llvm.org/bugs/show_bug.cgi?id=21634
+  try:
+    match = _RSP_RE.search(entry['command'])
+    if match:
+      rsp_path = os.path.join(entry['directory'], match.group(2))
+      rsp_contents = file(rsp_path).read()
+      entry['command'] = ''.join([
+          entry['command'][:match.start(1)],
+          rsp_contents,
+          entry['command'][match.end(1):]])
+  except IOError:
+    if _debugging:
+      print 'Couldn\'t read response file for %s' % entry['file']
+
+  return entry
+
+
+def _ProcessCompileDatabaseForWindows(compile_db):
+  """Make the compile db generated by ninja on Windows more clang-tool friendly.
+
+  Args:
+    compile_db: The compile database parsed as a Python dictionary.
+
+  Returns:
+    A postprocessed compile db that clang tooling can use.
+  """
+  if _debugging > 0:
+    print 'Read in %d entries from the compile db' % len(compile_db)
+  compile_db = [_ProcessEntry(e) for e in compile_db]
+  original_length = len(compile_db)
+
+  # Filter out NaCl stuff. The clang tooling chokes on them.
+  # TODO(dcheng): This doesn't appear to do anything anymore, remove?
+  compile_db = [e for e in compile_db if '_nacl.cc.pdb' not in e['command']
+      and '_nacl_win64.cc.pdb' not in e['command']]
+  if _debugging > 0:
+    print 'Filtered out %d entries...' % (original_length - len(compile_db))
+
+  # TODO(dcheng): Also filter out multiple commands for the same file. Not sure
+  # how that happens, but apparently it's an issue on Windows.
+  return compile_db
+
+
 def GenerateWithNinja(path):
   """Generates a compile database using ninja.
 
   Args:
     path: The build directory to generate a compile database for.
   """
-  # TODO(dcheng): Incorporate Windows-specific compile DB munging from
-  # https://codereview.chromium.org/718873004
-  print 'Generating compile database in %s...' % path
-  args = ['ninja', '-C', path, '-t', 'compdb', 'cc', 'cxx', 'objc', 'objcxx']
-  output = subprocess.check_output(args)
-  with file(os.path.join(path, 'compile_commands.json'), 'w') as f:
-    f.write(output)
+  # TODO(dcheng): Ensure that clang is enabled somehow.
+
+  # First, generate the compile database.
+  json_compile_db = subprocess.check_output([
+      'ninja', '-C', path, '-t', 'compdb', 'cc', 'cxx', 'objc', 'objcxx'])
+  compile_db = json.loads(json_compile_db)
+
+  # TODO(dcheng): Ideally this would check target_os... but not sure there's an
+  # easy way to do that, and (for now) cross-compiles don't work without custom
+  # patches anyway.
+  if sys.platform == 'win32':
+    compile_db = _ProcessCompileDatabaseForWindows(compile_db)
+
+  with open(os.path.join(path, 'compile_commands.json'), 'w') as f:
+    f.write(json.dumps(compile_db, indent=2))
 
 
 def Read(path):
diff --git a/src/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/src/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
index 4180e15..d97c7ea 100644
--- a/src/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
+++ b/src/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
@@ -26,8 +26,8 @@
 #include "clang/Basic/SourceManager.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Frontend/FrontendActions.h"
-#include "clang/Lex/MacroArgs.h"
 #include "clang/Lex/Lexer.h"
+#include "clang/Lex/MacroArgs.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/Tooling/CommonOptionsParser.h"
@@ -37,6 +37,7 @@
 #include "llvm/Support/ErrorOr.h"
 #include "llvm/Support/LineIterator.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
 #include "llvm/Support/TargetSelect.h"
 
 #include "EditTracker.h"
@@ -50,9 +51,6 @@
 
 const char kBlinkFieldPrefix[] = "m_";
 const char kBlinkStaticMemberPrefix[] = "s_";
-const char kGeneratedFileRegex[] = "^gen/|/gen/";
-const char kGeneratedFileExclusionRegex[] =
-    "(^gen/|/gen/).*/ComputedStyleBase\\.h$";
 const char kGMockMethodNamePrefix[] = "gmock_";
 const char kMethodBlocklistParamName[] = "method-blocklist";
 
@@ -425,7 +423,7 @@
 
       // https://crbug.com/672902: Should not rewrite names that mimick methods
       // from std library.
-      "back", "empty", "erase", "front", "insert", "length", "size",
+      "at", "back", "empty", "erase", "front", "insert", "length", "size",
   };
   for (const auto& b : kBlacklistedNames) {
     if (name == b)
@@ -516,12 +514,22 @@
   if (!file_entry)
     return false;
 
-  static llvm::Regex exclusion_regex(kGeneratedFileExclusionRegex);
-  if (exclusion_regex.match(file_entry->getName()))
-    return false;
-
-  static llvm::Regex generated_file_regex(kGeneratedFileRegex);
-  return generated_file_regex.match(file_entry->getName());
+  bool is_generated_file = false;
+  bool is_computed_style_base_cpp =
+      llvm::sys::path::filename(file_entry->getName())
+          .equals("ComputedStyleBase.h");
+  for (auto it = llvm::sys::path::begin(file_entry->getName());
+       it != llvm::sys::path::end(file_entry->getName()); ++it) {
+    if (it->equals("gen")) {
+      is_generated_file = true;
+      break;
+    }
+  }
+  // ComputedStyleBase is intentionally not treated as a generated file, since
+  // style definitions are split between generated and non-generated code. It's
+  // easier to have the tool just automatically rewrite references to generated
+  // code as well, with a small manual patch to fix the code generators.
+  return is_generated_file && !is_computed_style_base_cpp;
 }
 
 // Helper to convert from a camelCaseName to camel_case_name. It uses some
@@ -657,93 +665,118 @@
 bool ShouldPrefixFunctionName(const std::string& old_method_name) {
   // Functions that are named similarily to a type - they should be prefixed
   // with a "Get" prefix.
-  static const char* kConflictingMethods[] = {
-      "animationWorklet",
-      "audioWorklet",
-      "binaryType",
-      "blob",
-      "channelCountMode",
-      "color",
-      "compositorElementId",
-      "counterDirectives",
-      "document",
-      "element",
-      "emptyChromeClient",
-      "emptyEditorClient",
-      "emptySpellCheckerClient",
-      "entryType",
-      "error",
-      "fileUtilities",
-      "font",
-      "frame",
-      "frameBlameContext",
-      "frontend",
-      "gridCell",
-      "hash",
-      "heapObjectHeader",
-      "iconURL",
-      "image",
-      "inputMethodController",
-      "inputType",
-      "interpolationTypes",
-      "layout",
-      "layoutBlock",
-      "layoutObject",
-      "layoutSize",
-      "lineCap",
-      "lineEndings",
-      "lineJoin",
-      "listItems",
-      "matchedProperties",
-      "midpointState",
-      "modifiers",
-      "mouseEvent",
-      "name",
-      "navigationType",
-      "node",
-      "notificationManager",
-      "outcome",
-      "pagePopup",
-      "paintWorklet",
-      "path",
-      "position",
-      "processingInstruction",
-      "readyState",
-      "relList",
-      "referrer",
-      "referrerPolicy",
-      "resource",
-      "response",
-      "restrictedKeyMap",
-      "sandboxSupport",
-      "screenInfo",
-      "screenOrientationController",
-      "scrollAnimator",
-      "selectionInDOMTree",
-      "selectionInFlatTree",
-      "settings",
-      "signalingState",
-      "snapshotById",
-      "state",
-      "string",
-      "styleSheet",
-      "supplementable",
-      "text",
-      "textAlign",
-      "textBaseline",
-      "theme",
-      "thread",
-      "timing",
-      "topLevelBlameContext",
-      "type",
-      "vector",
-      "visibleSelection",
-      "visibleSelectionInFlatTree",
-      "webFrame",
-      "widget",
-      "wordBoundaries",
-      "wrapperTypeInfo",
-  };
+  static const char* kConflictingMethods[] = {"accumulatorMap",
+                                              "animationWorklet",
+                                              "attrNodeList",
+                                              "audioWorklet",
+                                              "binaryType",
+                                              "blob",
+                                              "channelCountMode",
+                                              "color",
+                                              "compositorElementId",
+                                              "constructionStack",
+                                              "controlSize",
+                                              "counterDirectives",
+                                              "counterMaps",
+                                              "document",
+                                              "dragOperation",
+                                              "element",
+                                              "emptyChromeClient",
+                                              "emptyEditorClient",
+                                              "emptySpellCheckerClient",
+                                              "entryType",
+                                              "error",
+                                              "eventTargetDataMap",
+                                              "fileUtilities",
+                                              "font",
+                                              "frame",
+                                              "frameBlameContext",
+                                              "frontend",
+                                              "gridCell",
+                                              "harfBuzzFontCache",
+                                              "hash",
+                                              "heapObjectHeader",
+                                              "heapObjectSet",
+                                              "iconURL",
+                                              "image",
+                                              "infoMap",
+                                              "inputMethodController",
+                                              "inputType",
+                                              "interpolationTypes",
+                                              "intervalArena",
+                                              "layout",
+                                              "layoutBlock",
+                                              "layoutObject",
+                                              "layoutSize",
+                                              "lineCap",
+                                              "lineEndings",
+                                              "lineJoin",
+                                              "listItems",
+                                              "locationInBackingMap",
+                                              "matchedProperties",
+                                              "midpointState",
+                                              "modifiers",
+                                              "mouseEvent",
+                                              "name",
+                                              "navigationType",
+                                              "node",
+                                              "notificationManager",
+                                              "originAccessMap",
+                                              "outcome",
+                                              "pagePopup",
+                                              "paintWorklet",
+                                              "path",
+                                              "position",
+                                              "presentationAttributeCache",
+                                              "processingInstruction",
+                                              "qualifiedNameCache",
+                                              "readyState",
+                                              "referrer",
+                                              "referrerPolicy",
+                                              "relList",
+                                              "resource",
+                                              "response",
+                                              "restrictedKeyMap",
+                                              "sandboxSupport",
+                                              "screenInfo",
+                                              "screenOrientationController",
+                                              "scrollAnimator",
+                                              "scrollbarPainterMap",
+                                              "scrollbarSet",
+                                              "selectionInDOMTree",
+                                              "selectionInFlatTree",
+                                              "selectionVisualRectMap",
+                                              "selectorTextCache",
+                                              "settings",
+                                              "shadowRootType",
+                                              "signalingState",
+                                              "snapshotById",
+                                              "state",
+                                              "stickyConstraintsMap",
+                                              "string",
+                                              "styleSharingList",
+                                              "styleSheet",
+                                              "supplementable",
+                                              "text",
+                                              "textAlign",
+                                              "textBaseline",
+                                              "textDirection",
+                                              "theme",
+                                              "thread",
+                                              "timing",
+                                              "topLevelBlameContext",
+                                              "type",
+                                              "vector",
+                                              "visibleSelection",
+                                              "visibleSelectionInFlatTree",
+                                              "weakHeapObjectSet",
+                                              "webFrame",
+                                              "widget",
+                                              "wordBoundaries",
+                                              "workerThread",
+                                              "worldId",
+                                              "worldMap",
+                                              "wrapperTypeInfo"};
   for (const auto& conflicting_method : kConflictingMethods) {
     if (old_method_name == conflicting_method)
       return true;
diff --git a/src/tools/clang/scripts/generate_compdb.py b/src/tools/clang/scripts/generate_compdb.py
new file mode 100755
index 0000000..a33e409
--- /dev/null
+++ b/src/tools/clang/scripts/generate_compdb.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Helper for generating compile DBs for clang tooling. On non-Windows platforms,
+this is pretty straightforward. On Windows, the tool does a bit of extra work to
+integrate the content of response files, force clang tooling to run in clang-cl
+mode, etc.
+"""
+
+import argparse
+import os
+import sys
+
+script_dir = os.path.dirname(os.path.realpath(__file__))
+tool_dir = os.path.abspath(os.path.join(script_dir, '../pylib'))
+sys.path.insert(0, tool_dir)
+
+from clang import compile_db
+
+
+def main(argv):
+  parser = argparse.ArgumentParser()
+  parser.add_argument(
+      'build_path',
+      nargs='?',
+      help='Path to build directory',
+      default='out/Debug')
+  args = parser.parse_args()
+
+  compile_db.GenerateWithNinja(args.build_path)
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/src/tools/clang/scripts/generate_win_compdb.py b/src/tools/clang/scripts/generate_win_compdb.py
deleted file mode 100755
index 6edd593..0000000
--- a/src/tools/clang/scripts/generate_win_compdb.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Clang tools on Windows are still a bit busted. The tooling can't handle
-backslashes in paths, doesn't understand how to read .rsp files, etc. In
-addition, ninja generates compile commands prefixed with the ninja msvc helper,
-which also confuses clang. This script generates a compile DB that should mostly
-work until clang tooling can be improved upstream.
-"""
-
-import argparse
-import os
-import re
-import json
-import shlex
-import subprocess
-import sys
-
-
-_NINJA_MSVC_WRAPPER = re.compile('ninja -t msvc -e .+? -- ')
-_RSP_RE = re.compile(r' (@(.+?\.rsp)) ')
-
-
-def _ProcessEntry(e):
-  # Strip off the ninja -t msvc wrapper.
-  e['command'] = _NINJA_MSVC_WRAPPER.sub('', e['command'])
-
-  # Prepend --driver-mode=cl to the command's arguments.
-  # Escape backslashes so shlex doesn't try to interpret them.
-  escaped_command = e['command'].replace('\\', '\\\\')
-  split_command = shlex.split(escaped_command)
-  e['command'] = ' '.join(
-      split_command[:1] + ['--driver-mode=cl'] + split_command[1:])
-
-  # Expand the contents of the response file, if any.
-  # http://llvm.org/bugs/show_bug.cgi?id=21634
-  try:
-    match = _RSP_RE.search(e['command'])
-    rsp_path = os.path.join(e['directory'], match.group(2))
-    rsp_contents = file(rsp_path).read()
-    e['command'] = ''.join([
-        e['command'][:match.start(1)],
-        rsp_contents,
-        e['command'][match.end(1):]])
-  except IOError:
-    pass
-
-  return e
-
-
-def main(argv):
-  # Parse argument
-  parser = argparse.ArgumentParser()
-  parser.add_argument(
-      'build_path',
-      nargs='?',
-      help='Path to build directory',
-      default='out/Debug')
-  args = parser.parse_args()
-  # First, generate the compile database.
-  print 'Generating compile DB with ninja...'
-  compile_db_as_json = subprocess.check_output(shlex.split(
-      'ninja -C %s -t compdb cc cxx objc objcxx' % args.build_path))
-
-  compile_db = json.loads(compile_db_as_json)
-  print 'Read in %d entries from the compile db' % len(compile_db)
-  compile_db = [_ProcessEntry(e) for e in compile_db]
-  original_length = len(compile_db)
-
-  # Filter out NaCl stuff. The clang tooling chokes on them.
-  compile_db = [e for e in compile_db if '_nacl.cc.pdb' not in e['command']
-      and '_nacl_win64.cc.pdb' not in e['command']]
-  print 'Filtered out %d entries...' % (original_length - len(compile_db))
-  f = file('%s/compile_commands.json' % args.build_path, 'w')
-  f.write(json.dumps(compile_db, indent=2))
-  print 'Done!'
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/src/tools/clang/scripts/package.py b/src/tools/clang/scripts/package.py
index 85840cd..151cb35 100755
--- a/src/tools/clang/scripts/package.py
+++ b/src/tools/clang/scripts/package.py
@@ -186,8 +186,8 @@
 
   # Check if Google Cloud Storage already has the artifacts we want to build.
   if (args.upload and GsutilArchiveExists(pdir, platform) and
-      not sys.platform.startswith('linux') or
-      GsutilArchiveExists(golddir, platform)):
+      (not sys.platform.startswith('linux') or
+      GsutilArchiveExists(golddir, platform))):
     print ('Desired toolchain revision %s is already available '
            'in Google Cloud Storage:') % expected_stamp
     print 'gs://chromium-browser-clang-staging/%s/%s.tgz' % (platform, pdir)
diff --git a/src/tools/clang/scripts/run_tool.py b/src/tools/clang/scripts/run_tool.py
index 53c7d0f..37ff3cc 100755
--- a/src/tools/clang/scripts/run_tool.py
+++ b/src/tools/clang/scripts/run_tool.py
@@ -195,6 +195,9 @@
       action='store_true',
       help='regenerate the compile database before running the tool')
   parser.add_argument(
+      '--shard',
+      metavar='<n>-of-<count>')
+  parser.add_argument(
       'compile_database',
       help='path to the directory that contains the compile database')
   parser.add_argument(
@@ -226,6 +229,19 @@
                         for f in git_filenames
                         if os.path.splitext(f)[1] in extensions]
 
+  if args.shard:
+    total_length = len(source_filenames)
+    match = re.match(r'(\d+)-of-(\d+)$', args.shard)
+    # Input is 1-based, but modular arithmetic is 0-based.
+    shard_number = int(match.group(1)) - 1
+    shard_count = int(match.group(2))
+    source_filenames = [
+        f[1] for f in enumerate(sorted(source_filenames))
+        if f[0] % shard_count == shard_number
+    ]
+    print 'Shard %d-of-%d will process %d entries out of %d' % (
+        shard_number, shard_count, len(source_filenames), total_length)
+
   dispatcher = _CompilerDispatcher(args.tool, args.tool_args,
                                    args.compile_database,
                                    source_filenames)
diff --git a/src/tools/clang/scripts/update.py b/src/tools/clang/scripts/update.py
index 2ea0d6d..c820517 100755
--- a/src/tools/clang/scripts/update.py
+++ b/src/tools/clang/scripts/update.py
@@ -283,7 +283,6 @@
     f.write('# two arg version to specify where build artifacts go. CMake\n')
     f.write('# disallows reuse of the same binary dir for multiple source\n')
     f.write('# dirs, so the build artifacts need to go into a subdirectory.\n')
-    f.write('# dirs, so the build artifacts need to go into a subdirectory.\n')
     f.write('if (CHROMIUM_TOOLS_SRC)\n')
     f.write('  add_subdirectory(${CHROMIUM_TOOLS_SRC} ' +
               '${CMAKE_CURRENT_BINARY_DIR}/a)\n')
@@ -647,9 +646,6 @@
       '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags),
       '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags),
       '-DCMAKE_INSTALL_PREFIX=' + LLVM_BUILD_DIR,
-      # TODO(thakis): Remove this once official builds pass -Wl,--build-id
-      # explicitly, https://crbug.com/622775
-      '-DENABLE_LINKER_BUILD_ID=ON',
       '-DCHROMIUM_TOOLS_SRC=%s' % os.path.join(CHROMIUM_DIR, 'tools', 'clang'),
       '-DCHROMIUM_TOOLS=%s' % ';'.join(chrome_tools)]
 
diff --git a/src/tools/git/mass-rename.py b/src/tools/git/mass-rename.py
index 21fbef7..d6aa8ef 100755
--- a/src/tools/git/mass-rename.py
+++ b/src/tools/git/mass-rename.py
@@ -28,13 +28,18 @@
   out, _ = popen.communicate()
   if popen.returncode != 0:
     return 1
-  for line in out.splitlines():
+  lines = out.splitlines()
+  for item, line in enumerate(lines, 1):
+    # Print progress
+    print '[%d/%d]' % (item, len(lines)),
+
     parts = line.split('\t')
     if len(parts) != 3:
       print 'Skipping: %s -- not a rename?' % parts
       continue
     attrs, fro, to = parts
     if attrs.split()[4].startswith('R'):
+      print 'Moving: %s' % fro
       subprocess.check_call([
         sys.executable,
         os.path.join(BASE_DIR, 'move_source_file.py'),
diff --git a/src/tools/gn/bootstrap/bootstrap.py b/src/tools/gn/bootstrap/bootstrap.py
index b680217..8252799 100755
--- a/src/tools/gn/bootstrap/bootstrap.py
+++ b/src/tools/gn/bootstrap/bootstrap.py
@@ -171,7 +171,8 @@
   write_buildflag_header_manually(root_gen_dir, 'base/debug/debugging_flags.h',
       {
           'ENABLE_PROFILING': 'false',
-          'ENABLE_MEMORY_TASK_PROFILER': 'false'
+          'ENABLE_MEMORY_TASK_PROFILER': 'false',
+          'CAN_UNWIND_WITH_FRAME_POINTERS': 'false'
       })
 
   write_build_date_header(root_gen_dir)
@@ -522,6 +523,7 @@
       'base/trace_event/memory_dump_scheduler.cc',
       'base/trace_event/memory_dump_session_state.cc',
       'base/trace_event/memory_infra_background_whitelist.cc',
+      'base/trace_event/memory_peak_detector.cc',
       'base/trace_event/process_memory_dump.cc',
       'base/trace_event/process_memory_maps.cc',
       'base/trace_event/process_memory_totals.cc',
diff --git a/src/tools/gn/desc_builder.cc b/src/tools/gn/desc_builder.cc
index c04fad6..965ec92 100644
--- a/src/tools/gn/desc_builder.cc
+++ b/src/tools/gn/desc_builder.cc
@@ -122,17 +122,17 @@
   }
 
   ValuePtr RenderValue(const std::string& s, bool optional = false) {
-    return (s.empty() && optional) ? base::Value::CreateNullValue()
+    return (s.empty() && optional) ? base::MakeUnique<base::Value>()
                                    : ValuePtr(new base::Value(s));
   }
 
   ValuePtr RenderValue(const SourceDir& d) {
-    return d.is_null() ? base::Value::CreateNullValue()
+    return d.is_null() ? base::MakeUnique<base::Value>()
                        : ValuePtr(new base::Value(FormatSourceDir(d)));
   }
 
   ValuePtr RenderValue(const SourceFile& f) {
-    return f.is_null() ? base::Value::CreateNullValue()
+    return f.is_null() ? base::MakeUnique<base::Value>()
                        : ValuePtr(new base::Value(f.value()));
   }
 
diff --git a/src/tools/gn/docs/reference.md b/src/tools/gn/docs/reference.md
index 3929fc4..9c318b8 100644
--- a/src/tools/gn/docs/reference.md
+++ b/src/tools/gn/docs/reference.md
@@ -211,15 +211,12 @@
   "error" key is non-empty and a non-fatal error occurred. In other words, it
   tries really hard to always write something to the output JSON and convey
   errors that way rather than via return codes.
-
-
 ```
 ### <a name="args"></a>**gn args <out_dir> [\--list] [\--short] [\--args]**
 
 ```
   See also "gn help buildargs" for a more high-level overview of how
   build arguments work.
-
 ```
 
 #### **Usage**
@@ -251,7 +248,6 @@
 
       If --short is specified, only the names and current values will be
       printed.
-
 ```
 
 #### **Examples**
@@ -273,8 +269,6 @@
     Prints all arguments with the default values for a build with the
     given arguments set (which may affect the values of other
     arguments).
-
-
 ```
 ### <a name="check"></a>**gn check <out_dir> [<label_pattern>] [\--force]**
 
@@ -289,7 +283,6 @@
   The <label_pattern> can take exact labels or patterns that match more than
   one (although not general regular expressions). If specified, only those
   matching targets will be checked. See "gn help label_pattern" for details.
-
 ```
 
 #### **Command-specific switches**
@@ -298,7 +291,6 @@
   --force
       Ignores specifications of "check_includes = false" and checks all
       target's files that match the target label.
-
 ```
 
 #### **What gets checked**
@@ -354,7 +346,6 @@
     - A target can include headers from a target that depends on it if the
       other target is annotated accordingly. See "gn help
       allow_circular_includes_from".
-
 ```
 
 #### **Advice on fixing problems**
@@ -382,7 +373,6 @@
 
   In rare cases it makes sense to list a header in more than one target if it
   could be considered conceptually a member of both.
-
 ```
 
 #### **Examples**
@@ -396,16 +386,12 @@
 
   gn check out/Default "//foo/*
       Check only the files in targets in the //foo directory tree.
-
-
 ```
 ### <a name="clean"></a>**gn clean <out_dir>**
 
 ```
   Deletes the contents of the output directory except for args.gn and
   creates a Ninja build environment sufficient to regenerate the build.
-
-
 ```
 ### <a name="desc"></a>**gn desc <out_dir> <label or pattern> [<what to show>] [\--blame] "**
 #### **[\--format=json]**
@@ -417,7 +403,6 @@
   The <label or pattern> can be a target label, a config label, or a label
   pattern (see "gn help label_pattern"). A label pattern will only match
   targets.
-
 ```
 
 #### **Possibilities for <what to show>**
@@ -458,7 +443,6 @@
       The output is a list of file names relative to the build directory. See
       "gn help runtime_deps" for how this is computed. This also works with
       "--blame" to see the source of the dependency.
-
 ```
 
 #### **Shared flags**
@@ -474,7 +458,6 @@
 
   --format=json
       Format the output as JSON instead of text.
-
 ```
 
 #### **Target flags**
@@ -485,7 +468,6 @@
       cause that target to get the flag. This doesn't currently work for libs
       and lib_dirs because those are inherited and are more complicated to
       figure out the blame (patches welcome).
-
 ```
 
 #### **Configs**
@@ -496,7 +478,6 @@
   configs pushed onto this target via public or "all dependent" configs.
 
   Configs can have child configs. Specifying --tree will show the hierarchy.
-
 ```
 
 #### **Printing outputs**
@@ -505,7 +486,6 @@
   The "outputs" section will list all outputs that apply, including the outputs
   computed from the tool definition (eg for "executable", "static_library", ...
   targets).
-
 ```
 
 #### **Printing deps**
@@ -556,7 +536,6 @@
   when directories and source paths are written to the build file, they will be
   adjusted to be relative to the build directory. So the values for paths
   displayed by this command won't match (but should mean the same thing).
-
 ```
 
 #### **Examples**
@@ -572,8 +551,6 @@
   gn desc out/Debug //base defines --blame
       Shows defines set for the //base:base target, annotated by where
       each one was set from.
-
-
 ```
 ### <a name="format"></a>**gn format [\--dump-tree] (\--stdin | <build_file>)**
 
@@ -589,7 +566,6 @@
     "z.cc",
     "a.cc",
   ]
-
 ```
 
 #### **Arguments**
@@ -610,7 +586,6 @@
   --stdin
       Read input from stdin and write to stdout rather than update a file
       in-place.
-
 ```
 
 #### **Examples**
@@ -619,8 +594,6 @@
   gn format some\\BUILD.gn
   gn format /abspath/some/BUILD.gn
   gn format --stdin
-
-
 ```
 ### <a name="gen:"></a>**gn gen**: Generate ninja files.
 
@@ -636,7 +609,6 @@
       out/foo
 
   See "gn help switches" for the common command-line switches.
-
 ```
 
 #### **IDE options**
@@ -661,7 +633,6 @@
       generated projects (see "gn help label_pattern"). Only matching targets
       and their dependencies will be included in the solution. Only used for
       Visual Studio, Xcode and JSON.
-
 ```
 
 #### **Visual Studio Flags**
@@ -674,7 +645,6 @@
   --no-deps
       Don't include targets dependencies to the solution. Changes the way how
       --filters option works. Only directly matching targets are included.
-
 ```
 
 #### **Xcode Flags**
@@ -692,7 +662,6 @@
   --root-target=<target_name>
       Name of the target corresponding to "All" target in Xcode. If unset,
       "All" invokes ninja without any target and builds everything.
-
 ```
 
 #### **QtCreator Flags**
@@ -702,8 +671,6 @@
       Name of the root target for which the QtCreator project will be generated
       to contain files of it and its dependencies. If unset, the whole build
       graph will be emitted.
-
-
 ```
 
 #### **Eclipse IDE Support**
@@ -716,7 +683,6 @@
   for each file individually. Instead, one set of includes/defines is generated
   for the entire project. This works fairly well but may still result in a few
   indexer issues here and there.
-
 ```
 
 #### **Generic JSON Output**
@@ -737,8 +703,6 @@
 
   --json-ide-script-args=<argument>
       Optional second argument that will passed to executed script.
-
-
 ```
 ### <a name="help"></a>**gn help <anything>**
 
@@ -747,7 +711,6 @@
   help.
 
   You can also use "all" as the parameter to get all help at once.
-
 ```
 
 #### **Switches**
@@ -755,7 +718,6 @@
 ```
   --markdown
       Format output in markdown syntax.
-
 ```
 
 #### **Example**
@@ -763,8 +725,6 @@
 ```
   gn help --markdown all
       Dump all help to stdout in markdown format.
-
-
 ```
 ### <a name="ls"></a>**gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\--as=...]**
 ```
@@ -777,7 +737,6 @@
   If the label pattern is unspecified, list all targets. The label pattern is
   not a general regular expression (see "gn help label_pattern"). If you need
   more complex expressions, pipe the result through grep.
-
 ```
 
 #### **Options**
@@ -813,7 +772,6 @@
           source_set|static_library)
       Restrict outputs to targets matching the given type. If
       unspecified, no filtering will be performed.
-
 ```
 
 #### **Examples**
@@ -840,8 +798,6 @@
   gn ls out/Debug //base --all-toolchains
       Lists all variants of the target //base:base (it may be referenced
       in multiple toolchains).
-
-
 ```
 ### <a name="path"></a>**gn path <out_dir> <target_one> <target_two>**
 
@@ -856,7 +812,6 @@
   shortest path using either public or private dependencies will be printed. If
   --with-data is specified, data deps will also be considered. If there are
   multiple shortest paths, an arbitrary one will be selected.
-
 ```
 
 #### **Interesting paths**
@@ -866,7 +821,6 @@
   very high level and a common low-level target. To make the output more useful
   (and terminate in a reasonable time), GN will not revisit sub-paths
   previously known to lead to the target.
-
 ```
 
 #### **Options**
@@ -883,15 +837,12 @@
   --with-data
      Additionally follows data deps. Without this flag, only public and private
      linked deps will be followed. Can't be used with --public.
-
 ```
 
 #### **Example**
 
 ```
   gn path out/Default //base //tools/gn
-
-
 ```
 ### <a name="refs"></a>**gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)***
 ```
@@ -918,7 +869,6 @@
      a path to a file containing a list of labels or file names, one per line.
      This allows us to handle long lists of inputs without worrying about
      command line limits.
-
 ```
 
 #### **Options**
@@ -972,8 +922,6 @@
           source_set|static_library)
       Restrict outputs to targets matching the given type. If
       unspecified, no filtering will be performed.
-
-
 ```
 
 #### **Examples (target input)**
@@ -998,7 +946,6 @@
 
   gn refs out/Debug //base --tree
       Print a reverse dependency tree of //base:base
-
 ```
 
 #### **Examples (file input)**
@@ -1019,8 +966,6 @@
           --all --as=output
       Display the executable file names of all test executables
       potentially affected by a change to the given file.
-
-
 ```
 ## <a name="targets"></a>Target declarations
 
@@ -1030,7 +975,6 @@
   This target type allows you to run a script a single time to produce one or
   more output files. If you want to run a script once for each of a set of
   input files, see "gn help action_foreach".
-
 ```
 
 #### **Inputs**
@@ -1060,7 +1004,6 @@
   action is built, but may not have completed before all steps of the
   action are started. This can give additional parallelism in the build
   for runtime-only dependencies.
-
 ```
 
 #### **Outputs**
@@ -1074,7 +1017,6 @@
   file names to be relative to the build directory (file names in the
   sources, outputs, and inputs will be all treated as relative to the
   current build file and converted as needed automatically).
-
 ```
 
 #### **File name handling**
@@ -1083,7 +1025,6 @@
   You would generally use |$target_out_dir| or |$target_gen_dir| to
   reference the output or generated intermediate file directories,
   respectively.
-
 ```
 
 #### **Variables**
@@ -1092,7 +1033,6 @@
   args, console, data, data_deps, depfile, deps, inputs, outputs*,
   response_file_contents, script*, sources
   * = required
-
 ```
 
 #### **Example**
@@ -1111,8 +1051,6 @@
     args = [ "--out", rebase_path(target_gen_dir, root_build_dir) ] +
            rebase_path(sources, root_build_dir)
   }
-
-
 ```
 ### <a name="action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files.
 
@@ -1120,7 +1058,6 @@
   This target type allows you to run a script once-per-file over a set of
   sources. If you want to run a script once that takes many files as input, see
   "gn help action".
-
 ```
 
 #### **Inputs**
@@ -1148,7 +1085,6 @@
   action is built, but may not have completed before all steps of the
   action are started. This can give additional parallelism in the build
   for runtime-only dependencies.
-
 ```
 
 #### **Outputs**
@@ -1159,7 +1095,6 @@
   file names to be relative to the build directory (file names in the
   sources, outputs, and inputs will be all treated as relative to the
   current build file and converted as needed automatically).
-
 ```
 
 #### **File name handling**
@@ -1168,7 +1103,6 @@
   You would generally use |$target_out_dir| or |$target_gen_dir| to
   reference the output or generated intermediate file directories,
   respectively.
-
 ```
 
 #### **Variables**
@@ -1177,7 +1111,6 @@
   args, console, data, data_deps, depfile, deps, inputs, outputs*,
   response_file_contents, script*, sources*
   * = required
-
 ```
 
 #### **Example**
@@ -1206,8 +1139,6 @@
       rebase_path(relative_target_gen_dir, root_build_dir) +
         "/{{source_name_part}}.h" ]
   }
-
-
 ```
 ### <a name="bundle_data"></a>**bundle_data**: [iOS/OS X] Declare a target without output.
 
@@ -1225,7 +1156,6 @@
   behind iOS/Mac conditionals.
 
   See "gn help create_bundle" for more information.
-
 ```
 
 #### **Variables**
@@ -1233,7 +1163,6 @@
 ```
   sources*, outputs*, deps, data_deps, public_deps, visibility
   * = required
-
 ```
 
 #### **Examples**
@@ -1264,8 +1193,6 @@
           "{{source_file_part}}"
     ]
   }
-
-
 ```
 ### <a name="copy"></a>**copy**: Declare a target that copies files.
 
@@ -1284,7 +1211,6 @@
   mapping from each source file to an output file name using source expansion
   (see "gn help source_expansion"). The placeholders will look like
   "{{source_name_part}}", for example.
-
 ```
 
 #### **Examples**
@@ -1304,8 +1230,6 @@
     # names in the gen dir. This will just copy each file.
     outputs = [ "$target_gen_dir/{{source_file_part}}" ]
   }
-
-
 ```
 ### <a name="create_bundle"></a>**create_bundle**: [iOS/OS X] Build an OS X / iOS bundle.
 
@@ -1327,7 +1251,6 @@
   contribute to any data or data_deps. Required runtime dependencies should be
   placed in the bundle. A create_bundle can declare its own explicit data and
   data_deps, however.
-
 ```
 
 #### **Code signing**
@@ -1346,7 +1269,6 @@
   code_signing_args will be passed as is to the script (so path have to be
   rebased) and additional inputs may be listed with the variable
   code_signing_sources.
-
 ```
 
 #### **Variables**
@@ -1357,7 +1279,6 @@
   visibility, product_type, code_signing_args, code_signing_script,
   code_signing_sources, code_signing_outputs
   * = required
-
 ```
 
 #### **Example**
@@ -1452,8 +1373,6 @@
       }
     }
   }
-
-
 ```
 ### <a name="executable"></a>**executable**: Declare an executable target.
 
@@ -1467,8 +1386,6 @@
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
-
-
 ```
 ### <a name="group"></a>**group**: Declare a named group of targets.
 
@@ -1476,7 +1393,6 @@
   This target type allows you to create meta-targets that just collect a set of
   dependencies into one named target. Groups can additionally specify configs
   that apply to their dependents.
-
 ```
 
 #### **Variables**
@@ -1484,7 +1400,6 @@
 ```
   Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
-
 ```
 
 #### **Example**
@@ -1496,8 +1411,6 @@
       "//project:unit_tests",
     ]
   }
-
-
 ```
 ### <a name="loadable_module"></a>**loadable_module**: Declare a loadable module target.
 
@@ -1509,7 +1422,6 @@
   the loadable module in its "deps". If you don't want this (if you don't need
   to dynamically load the library at runtime), then you should use a
   "shared_library" target type instead.
-
 ```
 
 #### **Variables**
@@ -1522,8 +1434,6 @@
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
-
-
 ```
 ### <a name="shared_library"></a>**shared_library**: Declare a shared library target.
 
@@ -1533,7 +1443,6 @@
   load the library at runtime), then you should depend on the shared library
   via "data_deps" or, on Darwin platforms, use a "loadable_module" target type
   instead.
-
 ```
 
 #### **Variables**
@@ -1546,8 +1455,6 @@
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
-
-
 ```
 ### <a name="source_set"></a>**source_set**: Declare a source set target.
 
@@ -1572,7 +1479,6 @@
   "exported symbol" notation indicate "export from the final shared library and
   not from the intermediate targets." There is no way to express this concept
   when linking multiple static libraries into a shared library.
-
 ```
 
 #### **Variables**
@@ -1585,8 +1491,6 @@
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
-
-
 ```
 ### <a name="static_library"></a>**static_library**: Declare a static library target.
 
@@ -1596,7 +1500,6 @@
   If you only need the static library for intermediate results in the build,
   you should consider a source_set instead since it will skip the (potentially
   slow) step of creating the intermediate library file.
-
 ```
 
 #### **Variables**
@@ -1610,8 +1513,6 @@
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
-
-
 ```
 ### <a name="target"></a>**target**: Declare an target with the given programmatic type.
 
@@ -1630,7 +1531,6 @@
     target("source_set", "doom_melon") {
   Is equivalent to:
     source_set("doom_melon") {
-
 ```
 
 #### **Example**
@@ -1645,8 +1545,6 @@
   target(my_type, "foo") {
     ...
   }
-
-
 ```
 ## <a name="functions"></a>Buildfile functions
 
@@ -1658,7 +1556,6 @@
   If the condition is false, the build will fail with an error. If the
   optional second argument is provided, that string will be printed
   with the error message.
-
 ```
 
 #### **Examples**
@@ -1666,8 +1563,6 @@
 ```
   assert(is_win)
   assert(defined(sources), "Sources must be defined");
-
-
 ```
 ### <a name="config"></a>**config**: Defines a configuration object.
 
@@ -1688,7 +1583,6 @@
       the order that the targets appear in "deps".
    4. All dependent configs from a breadth-first traversal of the dependency
       tree in the order that the targets appear in "deps".
-
 ```
 
 #### **Variables valid in a config definition**
@@ -1697,14 +1591,12 @@
          asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
   Nested configs: configs
-
 ```
 
 #### **Variables on a target used to apply configs**
 
 ```
   all_dependent_configs, configs, public_configs
-
 ```
 
 #### **Example**
@@ -1718,8 +1610,6 @@
   executable("mything") {
     configs = [ ":myconfig" ]
   }
-
-
 ```
 ### <a name="declare_args"></a>**declare_args**: Declare build arguments.
 
@@ -1766,7 +1656,6 @@
           # Bar defaults to same user-overridden state as foo.
           enable_bar = enable_foo
         }
-
 ```
 
 #### **Example**
@@ -1781,8 +1670,6 @@
     gn --args="enable_doom_melon=true enable_teleporter=true"
   This also sets the teleporter, but it's already defaulted to on so it will
   have no effect.
-
-
 ```
 ### <a name="defined"></a>**defined**: Returns whether an identifier is defined.
 
@@ -1800,7 +1687,6 @@
   which will return true or false depending on whether bar is defined in the
   named scope foo. It will throw an error if foo is not defined or is not a
   scope.
-
 ```
 
 #### **Example**
@@ -1818,8 +1704,6 @@
       values = "some default value"
     }
   }
-
-
 ```
 ### <a name="exec_script"></a>**exec_script**: Synchronously run a script and return the output.
 
@@ -1837,7 +1721,6 @@
   directory. If you are passing file names, you will want to use the
   rebase_path() function to make file names relative to this path (see "gn help
   rebase_path").
-
 ```
 
 #### **Arguments**:
@@ -1865,7 +1748,6 @@
 
       The script itself will be an implicit dependency so you do not need to
       list it.
-
 ```
 
 #### **Example**
@@ -1878,8 +1760,6 @@
   # This example just calls the script with no arguments and discards the
   # result.
   exec_script("//foo/bar/myscript.py")
-
-
 ```
 ### <a name="foreach"></a>**foreach**: Iterate over a list.
 
@@ -1899,7 +1779,6 @@
   same name for the duration of the loop. After the loop terminates the loop
   variable will no longer be in scope, and the previous value (if any) will be
   restored.
-
 ```
 
 #### **Example**
@@ -1914,8 +1793,6 @@
   a
   b
   c
-
-
 ```
 ### <a name="forward_variables_from"></a>**forward_variables_from**: Copies variables from a different scope.
 
@@ -1950,7 +1827,6 @@
   If variables_to_not_forward_list is non-empty, then it must contains a list
   of variable names that will not be forwarded. This is mostly useful when
   variable_list_or_star has a value of "*".
-
 ```
 
 #### **Examples**
@@ -1994,8 +1870,6 @@
       extra_substitutions += [ "BUNDLE_ID_TEST_NAME=$test_bundle_name" ]
     }
   }
-
-
 ```
 ### <a name="get_label_info"></a>**get_label_info**: Get an attribute from a target's label.
 
@@ -2007,7 +1881,6 @@
   the attributes depend on the actual target definition, only the label itself.
 
   See also "gn help get_target_outputs".
-
 ```
 
 #### **Possible values for the "what" parameter**
@@ -2051,7 +1924,6 @@
   "toolchain"
       The label of the toolchain. This will match the value of the
       "current_toolchain" variable when inside that target's declaration.
-
 ```
 
 #### **Examples**
@@ -2062,8 +1934,6 @@
 
   get_label_info("//foo/bar:baz", "gen_dir")
   # Returns string "//out/Debug/gen/foo/bar".
-
-
 ```
 ### <a name="get_path_info"></a>**get_path_info**: Extract parts of a file or directory name.
 
@@ -2073,7 +1943,6 @@
   The first argument is either a string representing a file or directory name,
   or a list of such strings. If the input is a list the return value will be a
   list containing the result of applying the rule to each item in the input.
-
 ```
 
 #### **Possible values for the "what" parameter**
@@ -2132,7 +2001,6 @@
 
       If you want to make the path relative to another directory, or to be
       system-absolute, see rebase_path().
-
 ```
 
 #### **Examples**
@@ -2146,8 +2014,6 @@
 
   # Extract the source-absolute directory name,
   result = get_path_info(get_path_info(path, "dir"), "abspath"
-
-
 ```
 ### <a name="get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target.
 
@@ -2164,7 +2030,6 @@
   will depend on the toolchain definition which won't necessarily have been
   loaded by the time a given line of code has run, and source sets and groups
   have no useful output file.
-
 ```
 
 #### **Return value**
@@ -2191,7 +2056,6 @@
   source sets and groups: this will return a list containing the path of the
   "stamp" file that Ninja will produce once all outputs are generated. This
   probably isn't very useful.
-
 ```
 
 #### **Example**
@@ -2207,8 +2071,6 @@
   source_set("my_lib") {
     sources = get_target_outputs(":my_action")
   }
-
-
 ```
 ### <a name="getenv"></a>**getenv**: Get an environment variable.
 
@@ -2223,15 +2085,12 @@
   If the environment variable is not found, the empty string will be returned.
   Note: it might be nice to extend this if we had the concept of "none" in the
   language to indicate lookup failure.
-
 ```
 
 #### **Example**
 
 ```
   home_dir = getenv("HOME")
-
-
 ```
 ### <a name="import"></a>**import**: Import a file into the current scope.
 
@@ -2258,7 +2117,6 @@
   Variables and templates beginning with an underscore '_' are considered
   private and will not be imported. Imported files can use such variables for
   internal computation without affecting other files.
-
 ```
 
 #### **Examples**
@@ -2268,8 +2126,6 @@
 
   # Looks in the current directory.
   import("my_vars.gni")
-
-
 ```
 ### <a name="pool"></a>**pool**: Defines a pool object.
 
@@ -2283,7 +2139,6 @@
   explicit toolchain when defining and referencing a pool.
 
   A pool is referenced by its label just like a target.
-
 ```
 
 #### **Variables**
@@ -2291,7 +2146,6 @@
 ```
   depth*
   * = required
-
 ```
 
 #### **Example**
@@ -2309,8 +2163,6 @@
       pool = ":link_pool($default_toolchain)")
     }
   }
-
-
 ```
 ### <a name="print"></a>**print**: Prints to the console.
 
@@ -2323,7 +2175,6 @@
   more than once in parallel in the context of different toolchains so the
   prints from one file may be duplicated or
   interleaved with itself.
-
 ```
 
 #### **Examples**
@@ -2332,8 +2183,6 @@
   print("Hello world")
 
   print(sources, deps)
-
-
 ```
 ### <a name="process_file_template"></a>**process_file_template**: Do template expansion over a list of files.
 
@@ -2348,7 +2197,6 @@
   more maintainable code. This function should only be used when that function
   can't be used (like there's no target or the target is defined in another
   build file).
-
 ```
 
 #### **Arguments**
@@ -2361,7 +2209,6 @@
 
   The template should contain source expansions to which each name in the
   source list is applied. See "gn help source_expansion".
-
 ```
 
 #### **Example**
@@ -2381,8 +2228,6 @@
       "//out/Debug/foo.h"
       "//out/Debug/bar.cc"
       "//out/Debug/bar.h" ]
-
-
 ```
 ### <a name="read_file"></a>**read_file**: Read a file into a variable.
 
@@ -2391,7 +2236,6 @@
 
   Whitespace will be trimmed from the end of the file. Throws an error if the
   file can not be opened.
-
 ```
 
 #### **Arguments**
@@ -2402,15 +2246,12 @@
 
   input_conversion
       Controls how the file is read and parsed. See "gn help input_conversion".
-
 ```
 
 #### **Example**
 
 ```
   lines = read_file("foo.txt", "list lines")
-
-
 ```
 ### <a name="rebase_path"></a>**rebase_path**: Rebase a file or directory to another location.
 
@@ -2437,7 +2278,6 @@
   function. This function won't work because it will always make relative
   paths, and it needs to support making paths relative to the source root, so
   can't also generate source-absolute paths without more special-cases.
-
 ```
 
 #### **Arguments**
@@ -2462,7 +2302,6 @@
       is not an absolute path, it will be treated as being relative to the
       current build file. Use "." (the default) to convert paths from the
       current BUILD-file's directory.
-
 ```
 
 #### **Return value**
@@ -2478,7 +2317,6 @@
   (depending on whether the input ends in a slash) to avoid returning empty
   strings. This means if you want a root path ("//" or "/") not ending in a
   slash, you can add a dot ("//.").
-
 ```
 
 #### **Example**
@@ -2510,8 +2348,6 @@
       rebase_path("relative_path.txt", root_build_dir)
     ] + rebase_path(sources, root_build_dir)
   }
-
-
 ```
 ### <a name="set_default_toolchain"></a>**set_default_toolchain**: Sets the default toolchain name.
 
@@ -2532,7 +2368,6 @@
   target with a 64-bit toolchain, we wouldn't want processing of the build
   config file for the 64-bit toolchain to reset the default toolchain to
   64-bit, we want to keep it 32-bits.
-
 ```
 
 #### **Argument**
@@ -2540,7 +2375,6 @@
 ```
   toolchain_label
       Toolchain name.
-
 ```
 
 #### **Example**
@@ -2554,8 +2388,6 @@
   } else if (target_cpu == "x86") {
     set_default_toolchain("//toolchains:32")
   }
-
-
 ```
 ### <a name="set_defaults"></a>**set_defaults**: Set default values for a target type.
 
@@ -2576,7 +2408,6 @@
   apply, but there is no way to refer to the previous defaults and modify them
   (each call to set_defaults must supply a complete list of all defaults it
   wants). If you want to share defaults, store them in a separate variable.
-
 ```
 
 #### **Example**
@@ -2591,8 +2422,6 @@
     # you don't want the default for a particular default:
     configs -= [ "//tools/mything:settings" ]
   }
-
-
 ```
 ### <a name="set_sources_assignment_filter"></a>**set_sources_assignment_filter**: Set a pattern to filter source files.
 
@@ -2612,7 +2441,6 @@
   If you want to bypass the filter and add a file even if it might be filtered
   out, call set_sources_assignment_filter([]) to clear the list of filters.
   This will apply until the current scope exits
-
 ```
 
 #### **How to use patterns**
@@ -2632,7 +2460,6 @@
 
    - "\b" Matches a path boundary. This will match the beginning or end of a
      string, or a slash.
-
 ```
 
 #### **Pattern examples**
@@ -2649,7 +2476,6 @@
 
   "\bwin/*"
       Matches "win/foo" and "foo/win/bar.cc" but not "iwin/foo".
-
 ```
 
 #### **Sources assignment example**
@@ -2660,8 +2486,6 @@
   sources = [ "a.cc", "b_win.cc" ]
   print(sources)
   # Will print [ "a.cc" ]. b_win one was filtered out.
-
-
 ```
 ### <a name="split_list"></a>**split_list**: Splits a list into N different sub-lists.
 
@@ -2674,7 +2498,6 @@
   elements in the input, it will be padded with empty lists.
 
   The expected use is to divide source files into smaller uniform chunks.
-
 ```
 
 #### **Example**
@@ -2686,8 +2509,6 @@
 
   Will print:
     [[1, 2], [3, 4], [5, 6]
-
-
 ```
 ### <a name="template"></a>**template**: Define a template rule.
 
@@ -2701,7 +2522,6 @@
   Often you will want to declare your template in a special file that other
   files will import (see "gn help import") so your template rule can be shared
   across build files.
-
 ```
 
 #### **Variables and templates**:
@@ -2733,7 +2553,6 @@
   more or possibly all variables in this manner:
 
     forward_variables_from(invoker, ["deps", "public_deps"])
-
 ```
 
 #### **Target naming**
@@ -2761,7 +2580,6 @@
   targets to depend on to link your code. And you would name the action
   something like "${target_name}_action" to make it unique. The source set
   would have a dependency on the action to make it run.
-
 ```
 
 #### **Example of defining a template**
@@ -2817,7 +2635,6 @@
       deps = [ ":$code_gen_target_name" ]
     }
   }
-
 ```
 
 #### **Example of invoking the resulting template**
@@ -2839,8 +2656,6 @@
     # gen action.
     deps = [ ":foo_idl_files" ]
   }
-
-
 ```
 ### <a name="tool"></a>**tool**: Specify arguments to a toolchain tool.
 
@@ -2850,7 +2665,6 @@
   tool(<tool type>) {
     <tool variables...>
   }
-
 ```
 
 #### **Tool types**
@@ -2876,7 +2690,6 @@
     Platform specific tools:
       "copy_bundle_data": [iOS, OS X] Tool to copy files in a bundle.
       "compile_xcassets": [iOS, OS X] Tool to compile asset catalogs.
-
 ```
 
 #### **Tool variables**
@@ -3079,7 +2892,6 @@
         If specified, this list is the subset of the outputs that should be
         added to runtime deps (see "gn help runtime_deps"). By default (if
         runtime_outputs is empty or unspecified), it will be the link_output.
-
 ```
 
 #### **Expansions for tool variables**
@@ -3248,7 +3060,6 @@
         Expands to the product_type of the bundle that will contain the
         compiled asset catalog. Usually corresponds to the product_type
         property of the corresponding create_bundle target.
-
 ```
 
 #### **Separate linking and dependencies for shared libraries**
@@ -3284,7 +3095,6 @@
             "{{output_extension}}.TOC"
       restat = true
     }
-
 ```
 
 #### **Example**
@@ -3306,15 +3116,12 @@
       description = "G++ {{source}}"
     }
   };
-
-
 ```
 ### <a name="toolchain"></a>**toolchain**: Defines a toolchain.
 
 ```
   A toolchain is a set of commands and build flags used to compile the source
   code. The toolchain() function defines these commands.
-
 ```
 
 #### **Toolchain overview**
@@ -3354,7 +3161,6 @@
   set_default_toolchain()). In secondary toolchains, the configuration flows
   from the toolchain to the build config file: the "toolchain_args" in the
   toolchain definition specifies the arguments to re-invoke the build.
-
 ```
 
 #### **Functions and variables**
@@ -3394,7 +3200,6 @@
 
     This concept is somewhat inefficient to express in Ninja (it requires a lot
     of duplicate of rules) so should only be used when absolutely necessary.
-
 ```
 
 #### **Example of defining a toolchain**
@@ -3423,7 +3228,6 @@
       current_cpu = "x64"
     }
   }
-
 ```
 
 #### **Example of cross-toolchain dependencies**
@@ -3448,8 +3252,6 @@
         ...
       }
     }
-
-
 ```
 ### <a name="write_file"></a>**write_file**: Write a file to disk.
 
@@ -3469,7 +3271,6 @@
 
   TODO(brettw) we probably need an optional third argument to control list
   formatting.
-
 ```
 
 #### **Arguments**
@@ -3480,8 +3281,6 @@
 
   data
       The list or string to write.
-
-
 ```
 ## <a name="predefined_variables"></a>Built-in predefined variables
 
@@ -3498,7 +3297,6 @@
   the command line if so desired.
 
   See "gn help target_cpu" for a list of common values returned.
-
 ```
 ### <a name="current_os"></a>**current_os**: The operating system of the current toolchain.
 
@@ -3513,8 +3311,6 @@
   the command line if so desired.
 
   See "gn help target_os" for a list of common values returned.
-
-
 ```
 ### <a name="current_toolchain"></a>**current_toolchain**: Label of the current toolchain.
 
@@ -3522,7 +3318,6 @@
   A fully-qualified label representing the current toolchain. You can use this
   to make toolchain-related decisions in the build. See also
   "default_toolchain".
-
 ```
 
 #### **Example**
@@ -3531,16 +3326,12 @@
   if (current_toolchain == "//build:64_bit_toolchain") {
     executable("output_thats_64_bit_only") {
       ...
-
-
 ```
 ### <a name="default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain.
 
 ```
   A fully-qualified label representing the default toolchain, which may not
   necessarily be the current one (see "current_toolchain").
-
-
 ```
 ### <a name="host_cpu"></a>**host_cpu**: The processor architecture that GN is running on.
 
@@ -3552,7 +3343,6 @@
   in order to handle unusual cases where there might be multiple plausible
   values for the host architecture (e.g., if you can do either 32-bit or 64-bit
   builds). The value is not used internally by GN for any purpose.
-
 ```
 
 #### **Some possible values**
@@ -3560,8 +3350,6 @@
 ```
   - "x64"
   - "x86"
-
-
 ```
 ### <a name="host_os"></a>**host_os**: [string] The operating system that GN is running on.
 
@@ -3571,7 +3359,6 @@
 
   This value should generally be treated as read-only. It, however, is not used
   internally by GN for any purpose.
-
 ```
 
 #### **Some possible values**
@@ -3580,8 +3367,6 @@
   - "linux"
   - "mac"
   - "win"
-
-
 ```
 ### <a name="invoker"></a>**invoker**: [string] The invoking scope inside a template.
 
@@ -3598,7 +3383,6 @@
   scope.
 
   See "gn help template" for more examples.
-
 ```
 
 #### **Example**
@@ -3614,8 +3398,6 @@
     sources = [ "a.cc", "b.cc" ]
     bar = 123
   }
-
-
 ```
 ### <a name="python_path"></a>**python_path**: Absolute path of Python.
 
@@ -3623,8 +3405,6 @@
   Normally used in toolchain definitions if running some command requires
   Python. You will normally not need this when invoking scripts since GN
   automatically finds it for you.
-
-
 ```
 ### <a name="root_build_dir"></a>**root_build_dir**: [string] Directory where build commands are run.
 
@@ -3634,8 +3414,6 @@
 
   Most often this is used with rebase_path (see "gn help rebase_path") to
   convert arguments to be relative to a script's current directory.
-
-
 ```
 ### <a name="root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's generated files.
 
@@ -3651,8 +3429,6 @@
 
   See also "target_gen_dir" which is usually a better location for generated
   files. It will be inside the root generated dir.
-
-
 ```
 ### <a name="root_out_dir"></a>**root_out_dir**: [string] Root directory for toolchain output files.
 
@@ -3670,7 +3446,6 @@
 
   See also "target_out_dir" which is usually a better location for output
   files. It will be inside the root output dir.
-
 ```
 
 #### **Example**
@@ -3680,8 +3455,6 @@
     # Pass the output dir to the script.
     args = [ "-o", rebase_path(root_out_dir, root_build_dir) ]
   }
-
-
 ```
 ### <a name="target_cpu"></a>**target_cpu**: The desired cpu architecture for the build.
 
@@ -3701,7 +3474,6 @@
   string ("") and the configuration files should set it to an appropriate value
   (e.g., setting it to the value of "host_cpu") if it is not overridden on the
   command line or in the args.gn file.
-
 ```
 
 #### **Possible values**
@@ -3712,8 +3484,6 @@
   - "arm"
   - "arm64"
   - "mipsel"
-
-
 ```
 ### <a name="target_gen_dir"></a>**target_gen_dir**: Directory for a target's generated files.
 
@@ -3729,7 +3499,6 @@
   build directory.
 
   See also "gn help root_gen_dir".
-
 ```
 
 #### **Example**
@@ -3739,8 +3508,6 @@
     # Pass the generated output dir to the script.
     args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]"
   }
-
-
 ```
 ### <a name="target_name"></a>**target_name**: [string] The name of the current target.
 
@@ -3761,7 +3528,6 @@
   outside of any target definitions.
 
   See "gn help template" for more examples.
-
 ```
 
 #### **Example**
@@ -3781,8 +3547,6 @@
 
   my_template("space_ray") {
   }
-
-
 ```
 ### <a name="target_os"></a>**target_os**: The desired operating system for the build.
 
@@ -3812,7 +3576,6 @@
   string ("") and the configuration files should set it to an appropriate value
   (e.g., setting it to the value of "host_os") if it is not set via the command
   line or in the args.gn file.
-
 ```
 
 #### **Possible values**
@@ -3825,8 +3588,6 @@
   - "nacl"
   - "mac"
   - "win"
-
-
 ```
 ### <a name="target_out_dir"></a>**target_out_dir**: [string] Directory for target output files.
 
@@ -3841,7 +3602,6 @@
   directory.
 
   See also "gn help root_out_dir".
-
 ```
 
 #### **Example**
@@ -3852,8 +3612,6 @@
     args = [ "-o", rebase_path(target_out_dir, root_build_dir) ]"
 
   }
-
-
 ```
 ## <a name="target_variables"></a>Variables you set in targets
 
@@ -3874,7 +3632,6 @@
   target's headers.
 
   See also "public_configs".
-
 ```
 
 #### **Ordering of flags and values**
@@ -3893,8 +3650,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps.
 
@@ -3908,7 +3663,6 @@
   external dependencies depend only on one of the two targets, and to set the
   visibility on the other to enforce this. Thus the targets will always be
   linked together in any output.
-
 ```
 
 #### **Details**
@@ -3930,7 +3684,6 @@
   allow_circular_includes_from list. Normally includes must follow the
   direction of dependencies, this flag allows them to go in the opposite
   direction.
-
 ```
 
 #### **Danger**
@@ -3950,7 +3703,6 @@
   (consider putting such things in a shared config they can both reference).
   Make sure the dependencies are also the same (you might consider a group to
   collect such dependencies they both depend on).
-
 ```
 
 #### **Example**
@@ -3971,8 +3723,6 @@
   group("a_b_shared_deps") {
     public_deps = [ ":c" ]
   }
-
-
 ```
 ### <a name="arflags"></a>**arflags**: Arguments passed to static_library archiver.
 
@@ -3988,7 +3738,6 @@
   to other static libraries. Due to the nature of how arflags are typically
   used, you will normally want to apply them directly on static_library targets
   themselves.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4007,8 +3756,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="args"></a>**args**: Arguments passed to an action.
 
@@ -4018,8 +3765,6 @@
   source_expansion") to insert the source file names.
 
   See also "gn help action" and "gn help action_foreach".
-
-
 ```
 ### <a name="asmflags"></a>**asmflags**: Flags passed to the assembler.
 
@@ -4028,7 +3773,6 @@
 
   "asmflags" are passed to any invocation of a tool that takes an .asm or .S
   file as input.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4047,8 +3791,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these targets.
 
@@ -4076,7 +3818,6 @@
   on a target or set of targets. One efficient way to express this is to create
   a group with the assert_no_deps rule on it, and make that group depend on all
   targets you want to apply that assertion to.
-
 ```
 
 #### **Example**
@@ -4090,8 +3831,6 @@
       "//foo:test_support",  # This target is also disallowed.
     ]
   }
-
-
 ```
 ### <a name="bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out.
 
@@ -4107,7 +3846,6 @@
   bundle and thus do not require a second copy.
 
   See "gn help create_bundle" for more information.
-
 ```
 
 #### **Example**
@@ -4124,8 +3862,6 @@
       "//third_party/icu:icudata",
     ]
   }
-
-
 ```
 ### <a name="bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in
 ```
@@ -4138,8 +3874,6 @@
   must correspond to a path under "bundle_root_dir".
 
   See "gn help bundle_root_dir" for examples.
-
-
 ```
 ### <a name="bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle.
 
@@ -4151,8 +3885,6 @@
   correspond to a path under "bundle_root_dir".
 
   See "gn help bundle_root_dir" for examples.
-
-
 ```
 ### <a name="bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in
 ```
@@ -4165,8 +3897,6 @@
   correspond to a path under "bundle_root_dir".
 
   See "gn help bundle_root_dir" for examples.
-
-
 ```
 ### <a name="bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle.
 
@@ -4176,7 +3906,6 @@
   This string is used by the "create_bundle" target to expand the
   {{bundle_root_dir}} of the "bundle_data" target it depends on. This must
   correspond to a path under root_build_dir.
-
 ```
 
 #### **Example**
@@ -4194,8 +3923,6 @@
     bundle_executable_dir = bundle_root_dir + "/MacOS"
     bundle_plugins_dir = bundle_root_dir + "/PlugIns"
   }
-
-
 ```
 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
 
@@ -4211,7 +3938,6 @@
   "cflags".
 
   See also "asmflags" for flags for assembly-language files.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4230,8 +3956,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
 
@@ -4247,7 +3971,6 @@
   "cflags".
 
   See also "asmflags" for flags for assembly-language files.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4266,8 +3989,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
 
@@ -4283,7 +4004,6 @@
   "cflags".
 
   See also "asmflags" for flags for assembly-language files.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4302,8 +4022,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
 
@@ -4319,7 +4037,6 @@
   "cflags".
 
   See also "asmflags" for flags for assembly-language files.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4338,8 +4055,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
 
@@ -4355,7 +4070,6 @@
   "cflags".
 
   See also "asmflags" for flags for assembly-language files.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4374,8 +4088,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked.
 
@@ -4394,7 +4106,6 @@
 
   The topic "gn help check" has general information on how checking works and
   advice on how to pass a check in problematic cases.
-
 ```
 
 #### **Example**
@@ -4405,8 +4116,6 @@
     check_includes = false
     ...
   }
-
-
 ```
 ### <a name="code_signing_args"></a>**code_signing_args**: [string list] Arguments passed to code signing script.
 
@@ -4416,8 +4125,6 @@
   help source_expansion") to insert the source file names.
 
   See also "gn help create_bundle".
-
-
 ```
 ### <a name="code_signing_outputs"></a>**code_signing_outputs**: [file list] Output files for code signing step.
 
@@ -4426,8 +4133,6 @@
   files in the build directory.
 
   See also "gn help create_bundle".
-
-
 ```
 ### <a name="code_signing_script"></a>**code_signing_script**: [file name] Script for code signing."
 
@@ -4436,8 +4141,6 @@
   create_bundle target to perform code signing step.
 
   See also "gn help create_bundle".
-
-
 ```
 ### <a name="code_signing_sources"></a>**code_signing_sources**: [file list] Sources for code signing step.
 
@@ -4447,8 +4150,6 @@
   file.
 
   See also "gn help create_bundle".
-
-
 ```
 ### <a name="complete_static_lib"></a>**complete_static_lib**: [boolean] Links all deps into a static library.
 
@@ -4475,7 +4176,6 @@
 
   In rare cases it makes sense to list a header in more than one target if it
   could be considered conceptually a member of both. libraries.
-
 ```
 
 #### **Example**
@@ -4485,14 +4185,11 @@
     complete_static_lib = true
     deps = [ "bar" ]
   }
-
-
 ```
 ### <a name="configs"></a>**configs**: Configs applying to this target or config.
 
 ```
   A list of config labels.
-
 ```
 
 #### **Configs on a target**
@@ -4511,7 +4208,6 @@
   The build configuration script will generally set up the default configs
   applying to a given target type (see "set_defaults"). When a target is being
   defined, it can add to or remove from this list.
-
 ```
 
 #### **Configs on a config**
@@ -4536,7 +4232,6 @@
      listed as a sub-config that it is only used in that context. (Note that
      it's possible to fix this and de-dupe, but it's not normally relevant and
      complicates the implementation.)
-
 ```
 
 #### **Ordering of flags and values**
@@ -4555,7 +4250,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
 ```
 
 #### **Example**
@@ -4584,8 +4278,6 @@
       configs = [ ":no_optimization" ]
     }
   }
-
-
 ```
 ### <a name="console"></a>**console**: Run this action in the console pool.
 
@@ -4599,7 +4291,6 @@
 
   Only one console pool target can run at any one time in Ninja. Refer to the
   Ninja documentation on the console pool for more info.
-
 ```
 
 #### **Example**
@@ -4608,8 +4299,6 @@
   action("long_action_with_progress_logs") {
     console = true
   }
-
-
 ```
 ### <a name="data"></a>**data**: Runtime data file dependencies.
 
@@ -4639,8 +4328,6 @@
   gathering data. See "gn help create_bundle" for details.
 
   See "gn help runtime_deps" for how these are used.
-
-
 ```
 ### <a name="data_deps"></a>**data_deps**: Non-linked dependencies.
 
@@ -4658,7 +4345,6 @@
   gathering data_deps. See "gn help create_bundle" for details.
 
   See also "gn help deps" and "gn help data".
-
 ```
 
 #### **Example**
@@ -4668,8 +4354,6 @@
     deps = [ "//base" ]
     data_deps = [ "//plugins:my_runtime_plugin" ]
   }
-
-
 ```
 ### <a name="defines"></a>**defines**: C preprocessor defines.
 
@@ -4678,7 +4362,6 @@
 
   These strings will be passed to the C/C++ compiler as #defines. The strings
   may or may not include an "=" to assign a value.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4697,15 +4380,12 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
 ```
 
 #### **Example**
 
 ```
   defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ]
-
-
 ```
 ### <a name="depfile"></a>**depfile**: [string] File name for input dependencies for actions.
 
@@ -4729,7 +4409,6 @@
 
   Although depfiles are created by an action, they should not be listed in the
   action's "outputs" unless another target will use the file as an input.
-
 ```
 
 #### **Example**
@@ -4746,8 +4425,6 @@
     # Say our script uses "-o <d file>" to indicate the depfile.
     args = [ "{{source}}", "-o", depfile ]
   }
-
-
 ```
 ### <a name="deps"></a>**deps**: Private linked dependencies.
 
@@ -4758,7 +4435,6 @@
   propagated up the dependency tree and linked to dependant targets, but do not
   grant the ability to include headers from the dependency. Public configs are
   not forwarded.
-
 ```
 
 #### **Details of dependency propagation**
@@ -4782,8 +4458,6 @@
   "gn help runtime_deps".
 
   See also "public_deps".
-
-
 ```
 ### <a name="include_dirs"></a>**include_dirs**: Additional include directories.
 
@@ -4792,7 +4466,6 @@
 
   The directories in this list will be added to the include path for the files
   in the affected target.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4811,15 +4484,12 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
 ```
 
 #### **Example**
 
 ```
   include_dirs = [ "src/include", "//third_party/foo" ]
-
-
 ```
 ### <a name="inputs"></a>**inputs**: Additional compile-time dependencies.
 
@@ -4829,7 +4499,6 @@
   any actions.
 
   Inputs are typically only used for action and action_foreach targets.
-
 ```
 
 #### **Inputs for actions**
@@ -4851,7 +4520,6 @@
   executing the script. This is more efficient than doing processing while
   running GN to determine the inputs, and is easier to keep in-sync than
   hardcoding the list.
-
 ```
 
 #### **Script input gotchas**
@@ -4869,7 +4537,6 @@
   script, or if there are many, create a separate list file that the script
   reads. As long as this file is listed in the inputs, the build will detect
   when it has changed in any way and the action will re-run.
-
 ```
 
 #### **Inputs for binary targets**
@@ -4884,7 +4551,6 @@
   that changes in any of the inputs will force all sources in the target to be
   recompiled. If an input only applies to a subset of source files, you may
   want to split those into a separate target to avoid unnecessary recompiles.
-
 ```
 
 #### **Example**
@@ -4894,8 +4560,6 @@
     script = "domything.py"
     inputs = [ "input.data" ]
   }
-
-
 ```
 ### <a name="ldflags"></a>**ldflags**: Flags passed to the linker.
 
@@ -4910,7 +4574,6 @@
   static libraries will be a no-op. If you want to apply ldflags to dependent
   targets, put them in a config and set it in the all_dependent_configs or
   public_configs.
-
 ```
 
 #### **Ordering of flags and values**
@@ -4929,8 +4592,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="lib_dirs"></a>**lib_dirs**: Additional library directories.
 
@@ -4946,7 +4607,6 @@
   shared library or executable target is reached. Second, they are
   uniquified so each one is only passed once (the first instance of it
   will be the one used).
-
 ```
 
 #### **Ordering of flags and values**
@@ -4969,15 +4629,12 @@
   For "libs" and "lib_dirs" only, the values propagated from
   dependencies (as described above) are applied last assuming they
   are not already in the list.
-
 ```
 
 #### **Example**
 
 ```
   lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ]
-
-
 ```
 ### <a name="libs"></a>**libs**: Additional libraries to link.
 
@@ -4992,7 +4649,6 @@
   shared library or executable target is reached. Second, they are
   uniquified so each one is only passed once (the first instance of it
   will be the one used).
-
 ```
 
 #### **Types of libs**
@@ -5020,7 +4676,6 @@
       "-framework" will be prepended instead of the lib_prefix, and the
       ".framework" suffix will be trimmed. This is to support the way Mac links
       framework dependencies.
-
 ```
 
 #### **Ordering of flags and values**
@@ -5043,7 +4698,6 @@
   For "libs" and "lib_dirs" only, the values propagated from
   dependencies (as described above) are applied last assuming they
   are not already in the list.
-
 ```
 
 #### **Examples**
@@ -5054,8 +4708,6 @@
 
   On Linux:
     libs = [ "ld" ]
-
-
 ```
 ### <a name="output_dir"></a>**output_dir**: [directory] Directory to put output file in.
 
@@ -5074,7 +4726,6 @@
   executables (see "gn help tool"). You will have to consult that for the
   default location. The default location will be used if output_dir is
   undefined or empty.
-
 ```
 
 #### **Example**
@@ -5084,8 +4735,6 @@
     output_dir = "$root_out_dir/plugin_libs"
     ...
   }
-
-
 ```
 ### <a name="output_extension"></a>**output_extension**: Value to use for the output's file extension.
 
@@ -5101,7 +4750,6 @@
   The output_extension will be used to set the "{{output_extension}}" expansion
   which the linker tool will generally use to specify the output file name. See
   "gn help tool".
-
 ```
 
 #### **Example**
@@ -5123,8 +4771,6 @@
       ...
     }
   }
-
-
 ```
 ### <a name="output_name"></a>**output_name**: Define a name for the output file other than the default.
 
@@ -5143,7 +4789,6 @@
   flexibility, create a copy target to produce the file you want.
 
   This variable is valid for all binary output target types.
-
 ```
 
 #### **Example**
@@ -5152,8 +4797,6 @@
   static_library("doom_melon") {
     output_name = "fluffy_bunny"
   }
-
-
 ```
 ### <a name="output_prefix_override"></a>**output_prefix_override**: Don't use prefix for output name.
 
@@ -5167,7 +4810,6 @@
   (see "gn help tool"). Sometimes this prefix is undesired.
 
   See also "gn help output_extension".
-
 ```
 
 #### **Example**
@@ -5179,8 +4821,6 @@
     output_prefix_override = true
     ...
   }
-
-
 ```
 ### <a name="outputs"></a>**outputs**: Output files for actions and copy targets.
 
@@ -5204,8 +4844,6 @@
   action
     Action targets (excluding action_foreach) must list literal output file(s)
     with no source expansions. See "gn help action".
-
-
 ```
 ### <a name="precompiled_header"></a>**precompiled_header**: [string] Header file to precompile.
 
@@ -5223,7 +4861,6 @@
   If you use both C and C++ sources, the precompiled header and source file
   will be compiled once per language. You will want to make sure to wrap C++
   includes in __cplusplus #ifdefs so the file will compile in C mode.
-
 ```
 
 #### **GCC precompiled headers**
@@ -5235,7 +4872,6 @@
 
   The value of "precompiled_header" is not used with GCC-style precompiled
   headers.
-
 ```
 
 #### **MSVC precompiled headers**
@@ -5276,15 +4912,11 @@
     executable("doom_melon") {
       configs += [ ":use_precompiled_headers" ]
       ...
-
-
 ```
 ### <a name="precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc".
 
 ```
   See "gn help precompiled_header".
-
-
 ```
 ### <a name="precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile.
 
@@ -5292,8 +4924,6 @@
   The source file that goes along with the precompiled_header when using
   "msvc"-style precompiled headers. It will be implicitly added to the sources
   of the target. See "gn help precompiled_header".
-
-
 ```
 ### <a name="product_type"></a>**product_type**: Product type for Xcode projects.
 
@@ -5303,8 +4933,6 @@
 
   When generating Xcode project files, only create_bundle target with a
   non-empty product_type will have a corresponding target in Xcode project.
-
-
 ```
 ### <a name="public"></a>**public**: Declare public header files for a target.
 
@@ -5330,7 +4958,6 @@
   GN only knows about files declared in the "sources" and "public" sections of
   targets. If a file is included that is not known to the build, it will be
   allowed.
-
 ```
 
 #### **Examples**
@@ -5341,8 +4968,6 @@
 
   No files are public (no targets may include headers from this one):
     public = []
-
-
 ```
 ### <a name="public_configs"></a>**public_configs**: Configs to be applied on dependents.
 
@@ -5360,7 +4985,6 @@
   target's headers.
 
   See also "all_dependent_configs".
-
 ```
 
 #### **Ordering of flags and values**
@@ -5379,8 +5003,6 @@
   6. public_configs pulled from dependencies, in the order of the
      "deps" list. If a dependency is public, they will be applied
      recursively.
-
-
 ```
 ### <a name="public_deps"></a>**public_deps**: Declare public dependencies.
 
@@ -5400,7 +5022,6 @@
     - If the current target is a shared library, other shared libraries that it
       publicly depends on (directly or indirectly) are propagated up the
       dependency tree to dependents for linking.
-
 ```
 
 #### **Discussion**
@@ -5416,7 +5037,6 @@
   Generally if you are writing a target B and you include C's headers as part
   of B's public headers, or targets depending on B should consider B and C to
   be part of a unit, you should use public_deps instead of deps.
-
 ```
 
 #### **Example**
@@ -5432,8 +5052,6 @@
     deps = [ ":super_secret_implementation_details" ]
     public_deps = [ ":c" ]
   }
-
-
 ```
 ### <a name="response_file_contents"></a>**response_file_contents**: Contents of a response file for actions.
 
@@ -5453,7 +5071,6 @@
   The response file contents will always be quoted and escaped according to
   Unix shell rules. To parse the response file, the Python script should use
   "shlex.split(file_contents)".
-
 ```
 
 #### **Example**
@@ -5473,8 +5090,6 @@
       "--file-list={{response_file_name}}",
     ]
   }
-
-
 ```
 ### <a name="script"></a>**script**: Script file for actions.
 
@@ -5482,15 +5097,12 @@
   An absolute or buildfile-relative file name of a Python script to run for a
   action and action_foreach targets (see "gn help action" and "gn help
   action_foreach").
-
-
 ```
 ### <a name="sources"></a>**sources**: Source files for a target
 
 ```
   A list of files. Non-absolute paths will be resolved relative to the current
   build file.
-
 ```
 
 #### **Sources for binary targets**
@@ -5508,7 +5120,6 @@
   and they do not cross dependency boundaries (so specifying a .def file in a
   static library or source set will have no effect on the executable or shared
   library they're linked into).
-
 ```
 
 #### **Sources for non-binary targets**
@@ -5524,8 +5135,6 @@
 
   copy
     The source are the source files to copy.
-
-
 ```
 ### <a name="testonly"></a>**testonly**: Declares a target must only be used for testing.
 
@@ -5538,7 +5147,6 @@
 
   This feature is intended to prevent accidentally shipping test code in a
   final product.
-
 ```
 
 #### **Example**
@@ -5548,8 +5156,6 @@
     testonly = true
     ...
   }
-
-
 ```
 ### <a name="visibility"></a>**visibility**: A list of labels that can depend on a target.
 
@@ -5567,7 +5173,6 @@
   Tip: Often you will want the same visibility for all targets in a BUILD file.
   In this case you can just put the definition at the top, outside of any
   target, and the targets will inherit that scope and see the definition.
-
 ```
 
 #### **Patterns**
@@ -5577,7 +5182,6 @@
   supported. If a toolchain is specified, only targets in that toolchain will
   be matched. If a toolchain is not specified on a pattern, targets in all
   toolchains will be matched.
-
 ```
 
 #### **Examples**
@@ -5607,8 +5211,6 @@
   Any target in the current directory and any subdirectory thereof, plus
   any targets in "//bar/" and any subdirectory thereof.
     visibility = [ "./*", "//bar/*" ]
-
-
 ```
 ### <a name="write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path.
 
@@ -5629,8 +5231,6 @@
   be the main output file of the target itself. The file contents will be the
   same as requesting the runtime deps be written on the command line (see "gn
   help --runtime-deps-list-file").
-
-
 ```
 ## <a name="other"></a>Other help topics
 
@@ -5639,7 +5239,6 @@
 ```
   Build arguments are variables passed in from outside of the build that build
   files can query to determine how the build works.
-
 ```
 
 #### **How build arguments are set**
@@ -5669,7 +5268,6 @@
 
   If you specify an override for a build argument that never appears in a
   "declare_args" call, a nonfatal error will be displayed.
-
 ```
 
 #### **Examples**
@@ -5685,7 +5283,6 @@
       This will overwrite the build directory with the given arguments. (Note
       that the quotes inside the args command will usually need to be escaped
       for your shell to pass through strings values.)
-
 ```
 
 #### **How build arguments are used**
@@ -5700,8 +5297,6 @@
   passed to all buildfiles. Individual build files can also specify arguments
   that apply only to those files. It is also useful to specify build args in an
   "import"-ed file if you want such arguments to apply to multiple buildfiles.
-
-
 ```
 ### <a name="dotfile"></a>**.gn file**
 
@@ -5718,7 +5313,6 @@
   --dotfile:
 
     gn gen out/Debug --root=/home/build --dotfile=/home/my_gn_file.gn
-
 ```
 
 #### **Variables**
@@ -5784,7 +5378,6 @@
 
       This is intended to be used when subprojects declare arguments with
       default values that need to be changed for whatever reason.
-
 ```
 
 #### **Example .gn file contents**
@@ -5806,8 +5399,6 @@
     is_debug = false
     is_component_build = false
   }
-
-
 ```
 ### <a name="execution"></a>**Build graph and execution overview**
 
@@ -5834,7 +5425,6 @@
      file to disk.
 
   6. When all targets are resolved, write out the root build.ninja file.
-
 ```
 
 #### **Executing target definitions and templates**
@@ -5862,7 +5452,6 @@
   definitions that can be overridden by the target code as necessary. Typically
   this mechanism is used to inject a default set of configs that define the
   global compiler and linker flags.
-
 ```
 
 #### **Which targets are built**
@@ -5878,7 +5467,6 @@
   toolchain.
 
   See also "gn help ninja_rules".
-
 ```
 
 #### **Dependencies**
@@ -5894,8 +5482,6 @@
   is linked, but this is not semantically guaranteed and this is undesirable
   from a build performance perspective. Since we hope to change this in the
   future, do not rely on this behavior.
-
-
 ```
 ### <a name="grammar"></a>**Language and grammar for GN build files**
 
@@ -5905,7 +5491,6 @@
   GN build files are read as sequences of tokens.  While splitting the file
   into tokens, the next token is the longest sequence of characters that form a
   valid token.
-
 ```
 
 #### **White space and comments**
@@ -5918,7 +5503,6 @@
 
   White space and comments are ignored except that they may separate tokens
   that would otherwise combine into a single token.
-
 ```
 
 #### **Identifiers**
@@ -5929,7 +5513,6 @@
       identifier = letter { letter | digit } .
       letter     = "A" ... "Z" | "a" ... "z" | "_" .
       digit      = "0" ... "9" .
-
 ```
 
 #### **Keywords**
@@ -5938,7 +5521,6 @@
   The following keywords are reserved and may not be used as identifiers:
 
           else    false   if      true
-
 ```
 
 #### **Integer literals**
@@ -5949,7 +5531,6 @@
       integer = [ "-" ] digit { digit } .
 
   Leading zeros and negative zero are disallowed.
-
 ```
 
 #### **String literals**
@@ -5984,7 +5565,6 @@
     "$var_one/$var_two"
   Use the "${var_one}" format to be explicitly deliniate the variable for
   otherwise-ambiguous cases.
-
 ```
 
 #### **Punctuation**
@@ -5996,7 +5576,6 @@
           -       -=      <       <=      [       ]
           !       =       >       >=      {       }
                           &&      ||      .       ,
-
 ```
 
 #### **Grammar**
@@ -6034,7 +5613,6 @@
                | "||" .                     // lowest priority
 
   All binary operators are left-associative.
-
 ```
 
 #### **Types**
@@ -6057,7 +5635,6 @@
 
    - Scopes: Scopes are like dictionaries that use variable names for keys. See
      "Scopes" below for more.
-
 ```
 
 #### **Lists**
@@ -6094,7 +5671,6 @@
   When assigning to a list named 'sources' using '=' or '+=', list items may be
   automatically filtered out. See "gn help set_sources_assignment_filter" for
   more.
-
 ```
 
 #### **Scopes**
@@ -6129,8 +5705,6 @@
 
     myvalues.foo += 2
     empty_scope.new_thing = [ 1, 2, 3 ]
-
-
 ```
 ### <a name="input_conversion"></a>**input_conversion**: Specifies how to transform input to a variable.
 
@@ -6183,8 +5757,6 @@
 
       Note that "trim value" is useless because the value parser skips
       whitespace anyway.
-
-
 ```
 ### <a name="label_pattern"></a>**Label patterns**
 
@@ -6220,8 +5792,6 @@
     "//foo/*(//build/toolchain:win)"
         All targets in //foo and any subdirectory using the Windows
         toolchain.
-
-
 ```
 ### <a name="labels"></a>**About labels**
 
@@ -6240,7 +5810,6 @@
 
     /usr/local/foo:bar    (Posix)
     /C:/Program Files/MyLibs:bar   (Windows)
-
 ```
 
 #### **Toolchains**
@@ -6254,7 +5823,6 @@
 
   Here GN will look for the toolchain definition called "msvc" in the file
   "//build/toolchain/win" to know how to compile this target.
-
 ```
 
 #### **Relative labels**
@@ -6274,7 +5842,6 @@
 
     source/plugin:myplugin
     ../net:url_request
-
 ```
 
 #### **Implicit names**
@@ -6285,8 +5852,6 @@
 
     //net  ->  //net:net
     //tools/gn  ->  //tools/gn:gn
-
-
 ```
 ### <a name="ninja_rules"></a>**Ninja build rules**
 
@@ -6298,7 +5863,6 @@
   default rule will be used by Ninja if no specific target is specified (just
   typing "ninja"). If there is a target named "//:default" it will be the
   default build rule, otherwise the implicit "all" rule will be used.
-
 ```
 
 #### **Phony rules**
@@ -6336,8 +5900,6 @@
 
   To explicitly compile a target in a non-default toolchain, you must give
   Ninja the exact name of the output file relative to the build directory.
-
-
 ```
 ### <a name="nogncheck"></a>**nogncheck**: Skip an include line from checking.
 
@@ -6367,7 +5929,6 @@
   But GN's header checker does not understand preprocessor directives, won't
   know it matches the build dependencies, and will flag this include as
   incorrect when the condition is false.
-
 ```
 
 #### **More information**
@@ -6376,8 +5937,6 @@
   The topic "gn help check" has general information on how checking works and
   advice on fixing problems. Targets can also opt-out of checking, see
   "gn help check_includes".
-
-
 ```
 ### <a name="runtime_deps"></a>**Runtime dependencies**
 
@@ -6391,7 +5950,6 @@
   "data" files, data directories, and the shared libraries from all transitive
   dependencies. Executables, shared libraries, and loadable modules are
   considered runtime dependencies of themselves.
-
 ```
 
 #### **Executables**
@@ -6401,7 +5959,6 @@
   not considered unless that executable is listed in "data_deps". Otherwise, GN
   assumes that the executable (and everything it requires) is a build-time
   dependency only.
-
 ```
 
 #### **Actions and copies**
@@ -6437,7 +5994,6 @@
      list of files required at runtime).
    - Split B into run-time and build-time versions with the appropriate "deps"
      for each.
-
 ```
 
 #### **Static libraries and source sets**
@@ -6449,7 +6005,6 @@
   manually compute the .a/.lib file name for the current platform and list it
   in the "data" list of a target (possibly on the static library target
   itself).
-
 ```
 
 #### **Multiple outputs**
@@ -6458,8 +6013,6 @@
   Linker tools can specify which of their outputs should be considered when
   computing the runtime deps by setting runtime_outputs. If this is unset on
   the tool, the default will be the first output only.
-
-
 ```
 ### <a name="source_expansion"></a>**How Source Expansion Works**
 
@@ -6480,7 +6033,6 @@
 
   See "gn help copy" and "gn help action_foreach" for more on how this is
   applied.
-
 ```
 
 #### **Placeholders**
@@ -6535,7 +6087,6 @@
       output directory. This can only be used in actions and it is an error to
       use in process_file_template where there is no "target".
         "//foo/bar/baz.txt" => "baz.txt"
-
 ```
 
 #### **(*) Note on directories**
@@ -6552,7 +6103,6 @@
   relative to the build directory for the script to find. In the other cases,
   the directories will be source- absolute (begin with a "//") because the
   results of those expansions will be handled by GN internally.
-
 ```
 
 #### **Examples**
@@ -6577,8 +6127,6 @@
     //out/Debug/obj/mydirectory/input1.cc
     //out/Debug/obj/mydirectory/input2.h
     //out/Debug/obj/mydirectory/input2.cc
-
-
 ```
 ## <a name="switches"></a>Command Line Switches
 
@@ -6588,7 +6136,6 @@
   help on your specific command for more.
 
 ```
-
     *   [--args: Specifies build arguments overrides.](#--args)
     *   [--color: Force colored output.](#--color)
     *   [--dotfile: Override the name of the ".gn" file.](#--dotfile)
@@ -6604,6 +6151,5 @@
     *   [--tracelog: Writes a Chrome-compatible trace log to the given file.](#--tracelog)
     *   [-v: Verbose logging.](#-v)
     *   [--version: Prints the GN version number and exits.](#--version)
-
 ```
 
diff --git a/src/tools/gn/docs/standalone.md b/src/tools/gn/docs/standalone.md
index faeb426..81dd896 100644
--- a/src/tools/gn/docs/standalone.md
+++ b/src/tools/gn/docs/standalone.md
@@ -35,7 +35,10 @@
 your subproject rather than for all of Chrome. This could be an
 advantage or a disadvantage.
 
-If you would rather avoid using this file, you can use the command-line
-flags `--root` and `--dotfile` to set these values.
+If you are in a directory with such a file and you want to not use it
+(e.g., to do the full Chrome build instead), you can use the command-line
+flags `--root` and `--dotfile` to set the values you want.
 
-# How the standalone and Chrome builds interact
+If you want a completely standalone build that has nothing to do w/ Chrome
+and doesn't use Chrome's //build files, you can look at an example in
+[//tools/gn/example](../example).
diff --git a/src/tools/gn/visual_studio_writer.cc b/src/tools/gn/visual_studio_writer.cc
index 8a8cf52..76ebc56 100644
--- a/src/tools/gn/visual_studio_writer.cc
+++ b/src/tools/gn/visual_studio_writer.cc
@@ -37,9 +37,41 @@
 
 namespace {
 
+std::string EscapeString(const std::string& value) {
+  std::string result;
+  for (char c : value) {
+    switch (c) {
+      case '\n':
+        result += "&#10;";
+        break;
+      case '\r':
+        result += "&#13;";
+        break;
+      case '\t':
+        result += "&#9;";
+        break;
+      case '"':
+        result += "&quot;";
+        break;
+      case '<':
+        result += "&lt;";
+        break;
+      case '>':
+        result += "&gt;";
+        break;
+      case '&':
+        result += "&amp;";
+        break;
+      default:
+        result += c;
+    }
+  }
+  return result;
+}
+
 struct SemicolonSeparatedWriter {
   void operator()(const std::string& value, std::ostream& out) const {
-    out << value + ';';
+    out << EscapeString(value) + ';';
   }
 };
 
diff --git a/src/tools/ipc_fuzzer/message_lib/BUILD.gn b/src/tools/ipc_fuzzer/message_lib/BUILD.gn
index 6ee6480..90ee0bc 100644
--- a/src/tools/ipc_fuzzer/message_lib/BUILD.gn
+++ b/src/tools/ipc_fuzzer/message_lib/BUILD.gn
@@ -11,7 +11,6 @@
     "//chrome/common",
     "//chrome/common/safe_browsing:proto",
     "//components/network_hints/common",
-    "//components/pdf/common",
     "//components/spellcheck/common",
     "//components/tracing",
     "//content/child",
diff --git a/src/tools/ipc_fuzzer/message_lib/all_messages.h b/src/tools/ipc_fuzzer/message_lib/all_messages.h
index ba130c0..f69b497 100644
--- a/src/tools/ipc_fuzzer/message_lib/all_messages.h
+++ b/src/tools/ipc_fuzzer/message_lib/all_messages.h
@@ -19,7 +19,6 @@
 #include "components/nacl/common/nacl_host_messages.h"
 #endif
 #include "components/network_hints/common/network_hints_message_generator.h"
-#include "components/pdf/common/pdf_message_generator.h"
 #include "components/spellcheck/common/spellcheck_message_generator.h"
 #include "components/tracing/common/tracing_messages.h"
 #include "content/common/all_messages.h"
diff --git a/src/tools/json_schema_compiler/json_schema_api.gni b/src/tools/json_schema_compiler/json_schema_api.gni
index 6f4620e..46cb996 100644
--- a/src/tools/json_schema_compiler/json_schema_api.gni
+++ b/src/tools/json_schema_compiler/json_schema_api.gni
@@ -152,7 +152,8 @@
     bundle_generator_schema_name = target_name + "_bundle_generator_schema"
     action(bundle_generator_schema_name) {
       script = compiler_script
-      inputs = compiler_sources + invoker.sources + uncompiled_sources
+      inputs = compiler_sources + invoker.sources + uncompiled_sources +
+               uncompiled_bundle_schema_sources
       outputs = [
         "$target_gen_dir/generated_schemas.cc",
         "$target_gen_dir/generated_schemas.h",
diff --git a/src/tools/json_schema_compiler/test/error_generation_unittest.cc b/src/tools/json_schema_compiler/test/error_generation_unittest.cc
index e55ecb9..9c22682 100644
--- a/src/tools/json_schema_compiler/test/error_generation_unittest.cc
+++ b/src/tools/json_schema_compiler/test/error_generation_unittest.cc
@@ -100,8 +100,7 @@
     EXPECT_TRUE(TestFunction::Params::Create(*params_value, &error));
   }
   {
-    std::unique_ptr<base::ListValue> params_value =
-        List(base::Value::CreateNullValue().release());
+    std::unique_ptr<base::ListValue> params_value = List(new Value());
     base::string16 error;
     EXPECT_FALSE(TestFunction::Params::Create(*params_value, &error));
     EXPECT_TRUE(EqualsUtf16("'num' is required", error));
diff --git a/src/tools/json_schema_compiler/test/simple_api_unittest.cc b/src/tools/json_schema_compiler/test/simple_api_unittest.cc
index 29d7637..54c773f 100644
--- a/src/tools/json_schema_compiler/test/simple_api_unittest.cc
+++ b/src/tools/json_schema_compiler/test/simple_api_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "tools/json_schema_compiler/test/simple_api.h"
 
+#include "base/memory/ptr_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using namespace test::api::simple_api;
@@ -77,7 +78,7 @@
 TEST(JsonSchemaCompilerSimpleTest, OptionalParamsTakingNull) {
   {
     std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(base::Value::CreateNullValue());
+    params_value->Append(base::MakeUnique<base::Value>());
     std::unique_ptr<OptionalString::Params> params(
         OptionalString::Params::Create(*params_value));
     EXPECT_TRUE(params.get());
@@ -98,7 +99,7 @@
 TEST(JsonSchemaCompilerSimpleTest, OptionalBeforeRequired) {
   {
     std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    params_value->Append(base::Value::CreateNullValue());
+    params_value->Append(base::MakeUnique<base::Value>());
     params_value->AppendString("asdf");
     std::unique_ptr<OptionalBeforeRequired::Params> params(
         OptionalBeforeRequired::Params::Create(*params_value));
diff --git a/src/tools/licenses.py b/src/tools/licenses.py
index 0da272c..75d9f1b 100755
--- a/src/tools/licenses.py
+++ b/src/tools/licenses.py
@@ -358,7 +358,7 @@
         readme_path = os.path.join(root, path, 'README.chromium')
         if not os.path.exists(readme_path):
             raise LicenseError("missing README.chromium or licenses.py "
-                               "SPECIAL_CASES entry")
+                               "SPECIAL_CASES entry in %s" % path)
 
         for line in open(readme_path):
             line = line.strip()
diff --git a/src/tools/mb/OWNERS b/src/tools/mb/OWNERS
index 2140fa5..f7dae03 100644
--- a/src/tools/mb/OWNERS
+++ b/src/tools/mb/OWNERS
@@ -1,4 +1,8 @@
-brettw@chromium.org
-phajdan.jr@chromium.org
 dpranke@chromium.org
+jbudorick@chromium.org
+phajdan.jr@chromium.org
 scottmg@chromium.org
+tansell@chromium.org
+
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/src/tools/mb/mb.py b/src/tools/mb/mb.py
index 675021d..1aea7a3 100755
--- a/src/tools/mb/mb.py
+++ b/src/tools/mb/mb.py
@@ -748,6 +748,11 @@
 
       if 'cros_passthrough' in mixin_vals:
         vals['cros_passthrough'] = mixin_vals['cros_passthrough']
+      if 'args_file' in mixin_vals:
+        if vals['args_file']:
+            raise MBErr('args_file specified multiple times in mixins '
+                        'for %s on %s' % (self.args.builder, self.args.master))
+        vals['args_file'] = mixin_vals['args_file']
       if 'gn_args' in mixin_vals:
         if vals['gn_args']:
           vals['gn_args'] += ' ' + mixin_vals['gn_args']
@@ -1091,7 +1096,8 @@
           '../../build/android/test_wrapper/logdog_wrapper.py',
           '--target', target,
           '--target-devices-file', '${SWARMING_BOT_FILE}',
-          '--logdog-bin-cmd', '../../bin/logdog_butler']
+          '--logdog-bin-cmd', '../../bin/logdog_butler',
+          '--logcat-output-file', '${ISOLATED_OUTDIR}/logcats']
     elif use_xvfb and test_type == 'windowed_test_launcher':
       extra_files = [
           '../../testing/test_env.py',
diff --git a/src/tools/mb/mb_config.pyl b/src/tools/mb/mb_config.pyl
index ee4740b..9cd079e 100644
--- a/src/tools/mb/mb_config.pyl
+++ b/src/tools/mb/mb_config.pyl
@@ -237,6 +237,7 @@
       'Android Release (Nexus 6P)': 'android_release_trybot_arm64',
       'Android Release (Nexus 9)': 'android_release_trybot_arm64',
       'Android Release (Pixel C)': 'android_release_trybot_arm64',
+      'Android Release (NVIDIA Shield TV)': 'android_release_trybot_arm64',
       'GPU Linux Builder (dbg)': 'gpu_fyi_tests_debug_trybot',
       'GPU Linux Builder': 'gpu_fyi_tests_release_trybot',
       'GPU Mac Builder': 'gpu_fyi_tests_release_trybot',
@@ -365,9 +366,6 @@
     'client.v8.fyi': {
       'Android Builder': 'official_goma_minimal_symbols_android',
       'Android Release (Nexus 5X)': 'gpu_tests_deqp_android_release_trybot_arm64',
-      'Chromium ASAN - debug': 'asan_lsan_edge_debug_bot',
-      'Chromium ASAN (symbolized)': 'asan_lsan_release_bot',
-      'Chromium Win SyzyASAN': 'syzyasan_no_pch_release_x86',
       'Linux ASAN Builder': 'asan_lsan_release_bot',
       'Linux Debug Builder': 'debug_bot',
       'Linux Release (NVIDIA)': 'gpu_tests_release_trybot',
@@ -435,7 +433,7 @@
     'official.desktop': {
       'linux64': 'official',
       'mac64': 'official',
-      'precise64': 'official',
+      'precise64': 'official_six_concurrent_links',
 
       # Currently the official bots set mini_installer_official_deps=1
       # but it's not clear if that's actually used anywhere.
@@ -452,6 +450,12 @@
         '1': 'official_chrome_pgo_phase_1',
         '2': 'official_chrome_pgo_phase_2',
       },
+      # TODO(mmoss): Remove this once official recipes are working and this
+      # just becomes the regular "win64-pgo" builder.
+      'win64-pgo-recipes': {
+        '1': 'official_chrome_pgo_phase_1',
+        '2': 'official_chrome_pgo_phase_2',
+      },
     },
 
     'official.desktop.continuous': {
@@ -574,11 +578,12 @@
       'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot',
       'linux_chromium_ubsan_rel_ng': 'ubsan_vptr_release_trybot',
 
-      # This is 'release_bot' rather than 'release_trybot' because
+      # These are 'release_bot' rather than 'release_trybot' because
       # 'release_trybot' includes 'dcheck_always_on', which might cause
       # some layout test results to be different than for normal release
       # builds (and we only store baselines for release builds).
       'linux_layout_tests_slimming_paint_v2': 'release_bot',
+      'linux_layout_tests_layout_ng': 'release_bot',
 
       'linux_nacl_sdk_build': 'release_bot',
       'linux_nacl_sdk': 'release_bot',
diff --git a/src/tools/mb/mb_unittest.py b/src/tools/mb/mb_unittest.py
index c5780ee..690b5a2 100755
--- a/src/tools/mb/mb_unittest.py
+++ b/src/tools/mb/mb_unittest.py
@@ -118,9 +118,13 @@
       'fake_gyp_builder': 'gyp_debug',
       'fake_gn_args_bot': '//build/args/bots/fake_master/fake_gn_args_bot.gn',
       'fake_multi_phase': { 'phase_1': 'gn_phase_1', 'phase_2': 'gn_phase_2'},
+      'fake_args_file': 'args_file_goma',
+      'fake_args_file_twice': 'args_file_twice',
     },
   },
   'configs': {
+    'args_file_goma': ['args_file', 'goma'],
+    'args_file_twice': ['args_file', 'args_file'],
     'gyp_rel_bot': ['gyp', 'rel', 'goma'],
     'gn_debug_goma': ['gn', 'debug', 'goma'],
     'gyp_debug': ['gyp', 'debug', 'fake_feature1'],
@@ -143,6 +147,9 @@
       'gn_args': 'use_goma=true',
       'gyp_defines': 'goma=1',
     },
+    'args_file': {
+      'args_file': '//build/args/fake.gn',
+    },
     'phase_1': {
       'gn_args': 'phase=1',
       'gyp_args': 'phase=1',
@@ -335,6 +342,19 @@
         mbw.files['/fake_src/out/Debug/args.gn'],
         'import("//build/args/bots/fake_master/fake_gn_args_bot.gn")\n')
 
+  def test_gn_gen_args_file_mixins(self):
+    mbw = self.fake_mbw()
+    self.check(['gen', '-m', 'fake_master', '-b', 'fake_args_file',
+                '//out/Debug'], mbw=mbw, ret=0)
+
+    self.assertEqual(
+        mbw.files['/fake_src/out/Debug/args.gn'],
+        ('import("//build/args/fake.gn")\n'
+         'use_goma = true\n'))
+
+    mbw = self.fake_mbw()
+    self.check(['gen', '-m', 'fake_master', '-b', 'fake_args_file_twice',
+                '//out/Debug'], mbw=mbw, ret=1)
 
   def test_gn_gen_fails(self):
     mbw = self.fake_mbw()
diff --git a/src/tools/md_browser/OWNERS b/src/tools/md_browser/OWNERS
index 3fc266c..5279ad8 100644
--- a/src/tools/md_browser/OWNERS
+++ b/src/tools/md_browser/OWNERS
@@ -1,2 +1,5 @@
 dpranke@chromium.org
 nodir@chromium.org
+
+# TEAM: infra-dev@chromium.org
+# COMPONENT: Build
diff --git a/src/tools/metrics/BUILD.gn b/src/tools/metrics/BUILD.gn
new file mode 100644
index 0000000..01b1653
--- /dev/null
+++ b/src/tools/metrics/BUILD.gn
@@ -0,0 +1,38 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+copy("histograms_xml") {
+  sources = [
+    "histograms/histograms.xml",
+  ]
+  outputs = [
+    "$root_out_dir/histograms.xml",
+  ]
+}
+
+copy("actions_xml") {
+  sources = [
+    "actions/actions.xml",
+  ]
+  outputs = [
+    "$root_out_dir/actions.xml",
+  ]
+}
+
+copy("rappor_xml") {
+  sources = [
+    "rappor/rappor.xml",
+  ]
+  outputs = [
+    "$root_out_dir/rappor.xml",
+  ]
+}
+
+group("metrics_metadata") {
+  deps = [
+    ":actions_xml",
+    ":histograms_xml",
+    ":rappor_xml",
+  ]
+}
diff --git a/src/tools/metrics/actions/actions.xml b/src/tools/metrics/actions/actions.xml
index 91a7f45..ca44f8b 100644
--- a/src/tools/metrics/actions/actions.xml
+++ b/src/tools/metrics/actions/actions.xml
@@ -3565,6 +3565,7 @@
 <action name="CreateShortcut">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>Deprecated as of 04/2017 (replaced by CreateHostedApp).</obsolete>
 </action>
 
 <action name="CredentialManager_AccountChooser_Accepted">
@@ -9524,6 +9525,21 @@
   <obsolete>Deprecated as of at least 2017/02/28.</obsolete>
 </action>
 
+<action name="MobileClipboardChanged">
+  <owner>jif@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <description>
+    Emitted when Chrome detects that the clipboard contains new content.
+
+    On iOS: this occurs either when Chrome enters the foreground and notices
+    that the content of the clipboard changed, or when the users selects the
+    omnibox and Chrome notices that the content of the clipboard changed.
+
+    On Android: this occurs when Chrome starts up or when the clipboard changes
+    while Chrome is running (in the foreground or not).
+  </description>
+</action>
+
 <action name="MobileComeToForeground">
   <owner>tedchoc@chromium.org</owner>
   <description>
@@ -9794,6 +9810,11 @@
   <obsolete>This menu item was never added to the app menu.</obsolete>
 </action>
 
+<action name="MobileMenuDataSaverOpened">
+  <owner>megjablon@chromium.org</owner>
+  <description>User opened the data saver item in the app menu.</description>
+</action>
+
 <action name="MobileMenuDirectShare">
   <owner>aurimas@chromium.org</owner>
   <description>
@@ -9898,6 +9919,11 @@
   </description>
 </action>
 
+<action name="MobileMenuReportAnIssue">
+  <owner>rohitrao@chromium.org</owner>
+  <description>User pressed 'Report an Issue' in the app menu.</description>
+</action>
+
 <action name="MobileMenuRequestDesktopSite">
   <owner>aurimas@chromium.org</owner>
   <description>
@@ -10112,6 +10138,9 @@
     On Android: this occurs when Chrome starts up or when the clipboard changes
     while Chrome is running (in the foreground or not).
   </description>
+  <obsolete>
+    Replaced with MobileOmniboxClipboardChanged in April 2017.
+  </obsolete>
 </action>
 
 <action name="MobileOmniboxDeleteGesture">
@@ -15599,6 +15628,28 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="StatusArea_StickyKeysDisabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Disable sticky keys</description>
+</action>
+
+<action name="StatusArea_StickyKeysEnabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Enable sticky keys</description>
+</action>
+
+<action name="StatusArea_TapDraggingDisabled">
+  <owner>minch@chromium.org</owner>
+  <description>
+    Ash system menu: Accessibility: Disable tap dragging
+  </description>
+</action>
+
+<action name="StatusArea_TapDraggingEnabled">
+  <owner>minch@chromium.org</owner>
+  <description>Ash system menu: Accessibility: Enable tap dragging</description>
+</action>
+
 <action name="StatusArea_Tracing_Default_Selected">
   <owner>bruthig@chromium.org</owner>
   <owner>tbuckley@chromium.org</owner>
diff --git a/src/tools/metrics/common/models.py b/src/tools/metrics/common/models.py
index dfae14e..70cf90b 100644
--- a/src/tools/metrics/common/models.py
+++ b/src/tools/metrics/common/models.py
@@ -76,17 +76,22 @@
     extra_newlines: None or a triple of integers describing the number of
         newlines that should be printed (after_open, before_close, after_close)
     single_line: True iff this node may be squashed into a single line.
+    alphabetization: A (tag, keyfn) pair, which specifies the tag of the
+       children that should be sorted, and a function to get the sort key from
+       the xml node.
   """
   __metaclass__ = abc.ABCMeta
 
   def __init__(self, tag,
                indent=True,
                extra_newlines=None,
-               single_line=False):
+               single_line=False,
+               alphabetization=None):
     self.tag = tag
     self.indent = indent
     self.extra_newlines = extra_newlines
     self.single_line = single_line
+    self.alphabetization = alphabetization
 
   @abc.abstractmethod
   def Unmarshall(self, node):
@@ -369,7 +374,8 @@
                                       if types[t].extra_newlines},
         tags_that_dont_indent=[t for t in types if not types[t].indent],
         tags_that_allow_single_line=[t for t in types if types[t].single_line],
-        tags_alphabetization_rules={})
+        tags_alphabetization_rules={t: types[t].alphabetization for t in types
+                                    if types[t].alphabetization})
 
   def _ToXML(self, obj):
     """Converts an object into an XML document.
@@ -393,4 +399,4 @@
     Returns:
       A string containing pretty printed XML.
     """
-    return self.GetPrintStyle().PrettyPrintNode(self._ToXML(obj))
+    return self.GetPrintStyle().PrettyPrintXml(self._ToXML(obj))
diff --git a/src/tools/metrics/histograms/histograms.before.pretty-print.xml b/src/tools/metrics/histograms/histograms.before.pretty-print.xml
deleted file mode 100644
index 70a186a..0000000
--- a/src/tools/metrics/histograms/histograms.before.pretty-print.xml
+++ /dev/null
@@ -1,123048 +0,0 @@
-<!--
-Copyright 2013 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<!--
-This file is used to generate a comprehensive list of Chrome histograms along
-with a detailed description for each histogram.
-
-For best practices on writing histogram descriptions, see
-https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
-For details on how to modify this file to add your description, keep reading.
-
-Please pretty-print and validate your edits by running the pretty_print.py
-and validate_format.py scripts in the same directory as this file before
-uploading your change for review.
-
-Take a moment to page through the contents of this file. You will find
-three sections:
-
-* The histograms section describes base histograms, giving their name,
-  and optionally their units or enum type, a short one-line summary,
-  and optionally a more detailed description.
-* The enums section defines and documents the enumerated types referred to by
-  the histograms.
-* The histogram_suffixes section provides a compact way of defining histograms
-  by applying affixes to existing histograms. This could be done recursively
-  and the max recursion depth is 5. See the example below for details on how it
-  works.
-
-Each histogram_suffixes tag lists the histograms that it affects. The complete
-list of histograms is computed by appending (or prepending - see below) the
-histogram_suffixes suffix names to each of the affected histograms. For example,
-define the following:
-
-  <histogram name="FileLoadLatency"/>
-
-  <histogram_suffixes name="SuperHttpExperiment">
-    <suffix name="SuperHttpEnabled"/>
-    <suffix name="SuperHttpDisabled"/>
-    <affected-histogram name="FileLoadLatency"/>
-  </histogram_suffixes>
-
-The complete list of histograms will be:
-
-  FileLoadLatency
-  FileLoadLatency_SuperHttpEnabled
-  FileLoadLatency_SuperHttpDisabled
-
-histogram_suffixes can also be used to insert affix in the middle. Example:
-
-  <histogram name="Prerender.Events"/>
-
-  <histogram_suffixes name="SuperHttpExperiment" ordering="prefix">
-    <suffix name="HoverStats50"/>
-    <affected-histogram name="Prerender.Events"/>
-  </histogram_suffixes>
-
-The complete list of histograms will be:
-
-  Prerender.Events
-  Prerender.HoverStats50_Events
-
-When 'ordering="prefix"' is present in the histogram_suffixes tag, the suffix
-will be inserted after the first dot separator of the affected-histogram name.
-Optionally, ordering can be specified as "prefix,N" where N indicates after
-how many dots the suffix should be inserted (default=1). The affected-histogram
-name has to have at least N dots in it.
-
-Googlers: There are also a small number of private internal histograms found at
-http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
--->
-
-<histogram-configuration>
-
-<!-- Histogram definitions -->
-
-<histograms>
-
-<histogram name="Accessibility.CrosAlwaysShowA11yMenu" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS Accessibility Menu is set to be shown regardless of
-    the state of a11y features.(checked once 45 secs after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosAutoclick" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>tengs@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS Autoclick feature is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosAutoclickDelay" units="ms">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>tengs@chromium.org</owner>
-  <summary>
-    If the user has enabled Autoclick, this is the delay set by the user for
-    autoclicks to occur, in milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosCaretHighlight" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS caret highlighting is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosChromeVoxNext" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Set when a Chrome OS user has spoken feedback enabled, recorded once each
-    time ChromeVox starts up. True if the user has enabled &quot;ChromeVox
-    Next&quot;, a new ChromeVox experience that became the default in Chrome 56
-    (but can be toggled on or off by the user), false otherwise.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosCursorHighlight" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS cursor highlighting is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosFocusHighlight" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS focus highlighting is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosHighContrast" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS High Contrast mode feature is on (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosLargeCursor" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS Large Cursor feature is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosScreenMagnifier" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS Screen Magnifier feature is on (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosSelectToSpeak" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS select-to-speak is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosSpokenFeedback" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS Spoken Feedback feature is on (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosStickyKeys" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>tengs@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS Sticky Keys feature is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosSwitchAccess" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <summary>
-    Whether the Chrome OS switch access is on (checked once 45 secs after
-    startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosVirtualKeyboard" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the Chrome OS Virtual Keyboard feature is on (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.InvertedColors" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Windows system settings show that high-contrast mode is enabled and
-    the user has selected a light-on-dark color scheme (checked once 45 secs
-    after startup). This causes Chrome to prompt the user with a bubble to
-    optionally install a High Contrast extension and theme.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.Mac.DifferentiateWithoutColor"
-    enum="BooleanEnabled">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Whether the &quot;differentiate without color&quot; Mac system setting is
-    enabled. This is checked once, 45 seconds after startup.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.Mac.FullKeyboardAccessEnabled"
-    enum="BooleanEnabled">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Whether the &quot;full keyboard access&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.Mac.IncreaseContrast" enum="BooleanEnabled">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Whether the &quot;increase contrast&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.Mac.ReduceTransparency" enum="BooleanEnabled">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Whether the &quot;reduce transparency&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.ManuallyEnabled" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Chrome has enabled accessibility support because the user passed the
-    --force-renderer-accessibility flag on the command-line (checked once 45
-    secs after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>aboxhall@chromium.org</owner>
-  <summary>
-    Whether individual accessibility mode flags are set. Tracked when each mode
-    flag is flipped from false to true. These flags are flipped automatically
-    when software communicates with Chrome via accessibility APIs. Flags can
-    only be flipped off by advanced users or for debugging using
-    chrome://accessibility/ - and that isn't tracked in this histogram.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.State" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 12/2016 in Issue 672205 with the addition of
-    Accessibility.ModeFlag.
-  </obsolete>
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Chrome has enabled accessibility support because it detects
-    supported assistive technology running, or due to being manually enabled via
-    a command-line flag (checked once 45 secs after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>nektar@chromium.org</owner>
-  <summary>Tracks usage of all public Windows accessibility APIs.</summary>
-</histogram>
-
-<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Windows system settings show that audio descriptions are enabled
-    (checked once 45 secs after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the third-party JAWS screen reader is running (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the third-party NVDA screen reader is running (checked once 45 secs
-    after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the third-party System Access To Go screen reader is running
-    (checked once 45 secs after startup).
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Windows system settings show that a screen reader is running
-    (checked once 45 secs after startup). Note that this does not necessarily
-    mean that Chrome has detected a supported screen reader and has enabled its
-    accessibility mode.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether Windows system settings show that Sticky Keys are enabled.
-  </summary>
-</histogram>
-
-<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled">
-  <owner>dmazzoni@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Whether the third-party ZoomText screen magnifier is running.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.InitStatus"
-    enum="ActivityTrackerCollectInitStatus">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Status of the initialization to collect stability debug files. Logged once,
-    during the initialization of the stability debug file collection.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.StabilityFileCount" units="count">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Number of files found during stability file collection. Logged each time the
-    stability file collection proceeds (at most once per launch).
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.Status"
-    enum="ActivityTrackerCollectStatus">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Status for the collection of a stability debug file. Logged each time a
-    debug file collection attempt is made.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.SystemSessionAnalysisStatus"
-    enum="ActivityTrackerSystemSessionAnalysisStatus">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Status for the analysis of the system session state. Logged each time a
-    debug file is collected.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.TotalTime" units="ms">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Time spent collecting stability debug information. Logged each time a
-    collection is performed.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Collect.WriteDumpStatus"
-    enum="ActivityTrackerWriteDumpStatus">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Status of the minidump writing. Logged each time a writing a minidump is
-    attempted.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Record.InitStatus"
-    enum="ActivityTrackerRecordInitStatus">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Status of internal activity tracking initialization. Logged once, during the
-    activity tracking initialization.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.Record.SetupTime" units="ms">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Time spent setting up the stability debugging instrumentation. Logged once,
-    during setup of the stability debugging instrumentation.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.ThreadTrackers.Count" units="count">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The number of threads being tracked for activities such as waiting for a
-    lock/event, a thread to join, or a task to run. Analysis of this data can
-    reveal why a thread will not exit. This value is updated every time a new
-    thread gets an activity tracked for the first time so will show one count
-    for every permanent thread but multiple counts for a thread than exits and
-    is replaced.
-  </summary>
-</histogram>
-
-<histogram name="ActivityTracker.ThreadTrackers.MemLimitTrackerCount"
-    units="count">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The limit on the number of thread trackers that could be allocated from the
-    persistent memory segment. Trackers beyond this number were allocated from
-    the heap and thus were not available for analysis. This value is updated on
-    every &quot;memory full&quot; failure.
-  </summary>
-</histogram>
-
-<histogram name="Android.Activity.ChromeTabbedActivity.StopReason"
-    enum="AndroidActivityStopReason">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    What caused ChromeTabbedActivity#onStop() to be called, which indicates that
-    Chrome is sent to the background.
-  </summary>
-</histogram>
-
-<histogram name="Android.Activity.ChromeTabbedActivity.SystemBackAction"
-    enum="AndroidActivitySystemBackAction">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    What happened when the user hit the system back button in
-    ChromeTabbedActivity.
-  </summary>
-</histogram>
-
-<histogram name="Android.ArmFpu" enum="AndroidArmFpu">
-  <owner>fdegans@chromium.org</owner>
-  <summary>
-    Reports the FPU capabilities of the Android ARM device. This is recorded
-    once per browser session during startup.
-  </summary>
-</histogram>
-
-<histogram name="Android.CustomFeedback.Category"
-    enum="AndroidFeedbackCategory">
-  <owner>jwanda@chromium.org</owner>
-  <summary>
-    Recorded when the user selects a category button when in the Custom Feedback
-    UI.
-  </summary>
-</histogram>
-
-<histogram name="Android.CustomFeedback.CategoryDetails"
-    enum="AndroidFeedbackCategoryDetails">
-  <owner>jwanda@chromium.org</owner>
-  <summary>
-    Recorded when a user selects an option related to their problem within the
-    Custom Feedback UI.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.Filter"
-    enum="AndroidDownloadFilterType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Recorded when the user selects a filter from the Chrome download manager
-    navigation drawer.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.InitialCount">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    The number of non-incognito download items displayed when the download UI is
-    initialized.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.Item.OpenFailed"
-    enum="AndroidDownloadFilterType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>Recorded when a download fails to open.</summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.Item.OpenSucceeded"
-    enum="AndroidDownloadFilterType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>Recorded when a download is opened.</summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.OtherExtensions.InitialCount"
-    enum="AndroidDownloadExtensionType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The extension type for non-incognito download items that match the
-    &quot;other&quot; filter type. Recorded when the download UI is initialized.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.OtherExtensions.OpenFailed"
-    enum="AndroidDownloadExtensionType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The extension type for downloads that match the &quot;other&quot; filter
-    type. Recorded when a download fails to open.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.OtherExtensions.OpenSucceeded"
-    enum="AndroidDownloadExtensionType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The extension type for downloads that match the &quot;other&quot; filter
-    type. Recorded when a download is opened.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.OtherExtensions.Share"
-    enum="AndroidDownloadExtensionType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The extension type for downloads that match the &quot;other&quot; filter
-    type. Recorded when downloads are shared through the download manager.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.Share.Count">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>The number of downloads shared at the same time.</summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.Share.FileTypes"
-    enum="AndroidDownloadFilterType">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Recorded when downloads are shared through the download manager. A recorded
-    value of &quot;All&quot; indicates that multiple types of downloads were
-    shared.
-  </summary>
-</histogram>
-
-<histogram name="Android.DownloadManager.SpaceUsed" units="%">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>The percentage of total storage downloads consume.</summary>
-</histogram>
-
-<histogram name="Android.HistoryPage.OpenSelected">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of selected items the user opened in new tabs from the native
-    Android history page.
-  </summary>
-</histogram>
-
-<histogram name="Android.HistoryPage.RemoveSelected">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of selected items the user removed from the native Android
-    history page.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.ApiCallDuration2" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Measures the amount of time spent in the getInstantAppIntent() API call.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.ApiCallDurationWithApp" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Measures the amount of time spent in the getInstantAppIntent() API call when
-    the API was able to find an Instant App for the URL.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.ApiCallDurationWithoutApp" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Measures the amount of time spent in the getInstantAppIntent() API call when
-    the API was not able to find an Instant App for the URL.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.CallSource" enum="InstantAppsCallSource">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    For intents to load a web page in browser from Instant Apps, records where
-    the request to load came from.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.FallbackDuration" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Measures the time from when we first received an eligible intent for Instant
-    Apps to the time we processed it in the case where the  Instant Apps
-    activity had to invoke a fallback intent.
-  </summary>
-</histogram>
-
-<histogram name="Android.InstantApps.HandleIntentDuration" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Measures the amount of time spent triaging an incoming event to decide
-    whether it needs to be routed to Instant Apps.
-  </summary>
-</histogram>
-
-<histogram name="Android.IsLastSharedAppInfoRetrieved"
-    enum="BooleanIsLastSharedAppInfoRetrieved">
-  <owner>jaekyun@chromium.org</owner>
-  <summary>
-    Signifies whether the last shared app information is retrieved successfully
-    or not. This is logged when configuring the direct sharing menu item.
-  </summary>
-</histogram>
-
-<histogram name="Android.KernelVersion" enum="AndroidKernelVersion">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    Reports the kernel major and minor version from the utsname.release field.
-    The low 16 bits of each version are combined into a 32-bit integer. The
-    range is from [0x00020006,0x0004000a] to track kernel versions 2.6 through
-    4.10.
-  </summary>
-</histogram>
-
-<histogram name="Android.ManageSpace.ActionTaken"
-    enum="AndroidManageSpaceButton">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the user presses a button in the 'Manage Space' screen for
-    Chrome. Note: the 'Clear App Data' option is likely incorrect, as the result
-    of that button disables UMA recording (as we factory reset the app).
-  </summary>
-</histogram>
-
-<histogram name="Android.ModerateBindingCount" units="bindings">
-  <owner>jaekyun@chromium.org</owner>
-  <summary>
-    The number of moderate bindings which were kept while Chrome process is in
-    the foreground. This is logged right before Chrome process goes into the
-    background.
-  </summary>
-</histogram>
-
-<histogram name="Android.MultiInstanceMigration.FailedToRenameMetadataFile"
-    enum="Boolean">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Renaming the old tab metadata file failed during multi-instance migration.
-    Only true is recorded.
-  </summary>
-</histogram>
-
-<histogram name="Android.MultiInstanceMigration.NewMetadataFileExists"
-    enum="Boolean">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The new tab metadata file already existed when multi-instance migration was
-    attempted. Only true is recorded.
-  </summary>
-</histogram>
-
-<histogram name="Android.MultiWindowMode.Active" enum="BooleanEnabled">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Records on every metrics upload whether the activity is running in Android N
-    multi-window mode or not.
-  </summary>
-</histogram>
-
-<histogram name="Android.MultiWindowMode.IsTabletScreenWidthBelow600"
-    enum="Boolean">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Records whether the screen width is below 600dp when the activity is in
-    Android N multi-window mode. True if the screen width is less than 600dp and
-    false if is greater than or equal to 600dp.
-  </summary>
-</histogram>
-
-<histogram name="Android.MultiWindowMode.TabletScreenWidth" units="dp">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Records the screen width in dp when the activity is in Android N
-    multi-window mode and the width is below 600dp.
-  </summary>
-</histogram>
-
-<histogram name="Android.NativeLibraryPreloader.Result.Browser"
-    enum="NativeLibraryPreloaderResult">
-  <owner>michaelbai@chromium.org</owner>
-  <summary>
-    The return value of NativeLibraryPreloader.loadLibrary() in browser process,
-    is recorded once per browser process start.
-  </summary>
-</histogram>
-
-<histogram name="Android.NativeLibraryPreloader.Result.Renderer"
-    enum="NativeLibraryPreloaderResult">
-  <owner>michaelbai@chromium.org</owner>
-  <summary>
-    The return value of NativeLibraryPreloader.loadLibrary() in renderer
-    process, is recorded once per renderer process start.
-  </summary>
-</histogram>
-
-<histogram name="Android.NTP.Impression" enum="NTPImpressionType">
-  <owner>finkm@chromium.org</owner>
-  <summary>
-    Counts impressions of the NTP on Android. It also counts potential
-    impressions. A potential impression is a place where it would make sense to
-    open the NTP instead of the current view. E.g. the no-tab view is counted as
-    a potential impression since this view could be replaced with the NTP. For
-    better comparison regular impressions are also counted. The no-tab view
-    counting happens right after the user closed the last tab and the regular
-    impression counting happens at construction time of the NTP (=whenever a new
-    tab is opened).
-  </summary>
-</histogram>
-
-<histogram name="Android.PrepareMenu.OpenWebApkVisibilityCheck" units="ms">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Measures the amount of time spent querying for whether a WebAPK is already
-    installed.
-  </summary>
-</histogram>
-
-<histogram name="Android.SeccompStatus.Prctl" enum="AndroidSeccompStatus">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    Reports the level of kernel support for the seccomp-bpf sandbox using
-    prctl(PR_SET_SECCOMP).
-  </summary>
-</histogram>
-
-<histogram name="Android.SeccompStatus.RendererSandbox"
-    enum="AndroidSeccompSandboxStatus">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    Reports the status of the seccomp-bpf sandbox in renderer processes.
-    Anything other than &quot;Sandbox Engaged&quot; indicates the sandbox is not
-    turned on. See https://crbug.com/477049.
-  </summary>
-</histogram>
-
-<histogram name="Android.SeccompStatus.Syscall" enum="AndroidSeccompStatus">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    Reports the level of kernel support for the seccomp-bpf sandbox using the
-    seccomp system call.
-  </summary>
-</histogram>
-
-<histogram name="Android.SelectFileDialogScope" enum="SelectFileDialogScope">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the scope of accepted content for a select file dialog when shown by
-    a Web developer.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.CheckGooglePlayServicesTime" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from checking for
-    whether play services is available.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.CheckGoogleSignedTime" units="ms">
-  <owner>estevenson@chromium.org</owner>
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from checking for
-    whether a package is Google signed.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.DocumentModeSharedPrefs" units="ms">
-  <obsolete>
-    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
-  </obsolete>
-  <owner>hartmanng@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from fetching the
-    DocumentMode shared preferences file.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.DocumentTabStateLoad" units="ms">
-  <obsolete>
-    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
-  </obsolete>
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from document mode
-    loading its prioritized tab's state.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.DownloadsDir" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from fetching and
-    possibly creating the downloads directory.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.NotificationUIBuildTime" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from custom
-    notification builder through date formatting.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from calling out
-    to Android activity manager.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.SnippetUIBuildTime" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from snippet UI
-    through date formatting.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.TabPersistentStore" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures time spent during StrictMode-whitelisted code in
-    TabPersistentStore.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.ThumbnailCacheDir" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from fetching for
-    the thumbnail cache directory.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.WebappAuthenticatorMac" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from looking up a
-    webapp's MAC on startup.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.WebappDir" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from fetching for
-    creating the webapp directory.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.WebappSaveState" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from reading and
-    saving webapp state.
-  </summary>
-</histogram>
-
-<histogram name="Android.StrictMode.WebappSharedPrefs" units="ms">
-  <owner>hartmanng@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Measures the amount of time due to a StrictMode violation from fetching the
-    Webapp shared preferences file.
-  </summary>
-</histogram>
-
-<histogram name="Android.TabNavigationInterceptResult"
-    enum="NavigationInterceptResult">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    The distribution of results when running ExternalNavigationHandler, this
-    shows how often we send intents to be handled by other applications.
-  </summary>
-</histogram>
-
-<histogram name="Android.TabPersistentStore.MergeStateMetadataFileSize"
-    units="bytes">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of bytes read for the other tab state's metadata file when
-    merging tab states in Android N+.
-  </summary>
-</histogram>
-
-<histogram name="Android.TabPersistentStore.MergeStateTabCount" units="tabs">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of normal and incognito tabs merged (for Android N+
-    multi-instance). This will be logged for both cold-start and non-cold-start
-    merging assuming that the native library is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Android.TabPersistentStore.MergeStateTimePerTab" units="ms">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Measures the amount of time it takes to restore state for each merged tab
-    (for Android N+ multi-instance). This will only be logged for non-cold-start
-    merging, because restoring merged tabs is not distingushed from restoring
-    regular tabs on cold start.
-  </summary>
-</histogram>
-
-<histogram name="Android.TabPersistentStore.MetadataFileSize">
-  <owner>wnwen@chromium.org</owner>
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>The number of bytes written for the tab metadata file.</summary>
-</histogram>
-
-<histogram name="AndroidTabCloseUndo.Toast"
-    enum="AndroidTabCloseUndoToastEvent">
-  <owner>dtrainor@chromium.org</owner>
-  <summary>
-    When a user closes a tab an undo toast will popup on certain devices giving
-    the user the chance to undo closing that tab.  This stat tracks how the user
-    interacts with that UI and what actions they take.  A cold start means that
-    the undo bar wasn't showing when it was triggered to show again.  A warm
-    start means that it was.  Warm starts can happen when the user closes
-    multiple tabs close together.  When the undo bar is dismissed, all closes
-    that were queued up to be undone are committed.  This can happen either by a
-    timeout or by an action by the user to move to another part of the UI.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.BeforeInstallEvent"
-    enum="AppBannersBeforeInstallEvent">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    usage of the BeforeInstallPromptEvent, which allows developers to control
-    when an app banner appears. The events in this histogram are not mutually
-    exclusive - for example, preventDefault() must be called if prompt() is
-    called.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.DismissEvent" enum="AppBannersDismissEvent">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    the different ways that an app banner left the screen, e.g. through an
-    automatic dismissal after navigation or an explicit user action.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    when an app banner was requested and how the request was handled, e.g. the
-    user blocked its appearance or the banner was ultimately created.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.InstallableStatusCode"
-    enum="AppBannersInstallableStatusCode">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    the status code logged by the app banner system as it processes a site's
-    eligibility for an app banner. Every request for a banner will be logged in
-    a bucket of this histogram.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.InstallEvent" enum="AppBannersInstallEvent">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    when a user triggers an install dialog for the app promoted by the banner,
-    as well as whether or not the user ultimately decided to install the app.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.MinutesFromFirstVisitToBannerShown" units="minutes">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat tracks
-    the number of minutes between the first recorded visit to an origin and the
-    time when the banner is actually shown.
-  </summary>
-</histogram>
-
-<histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    App banners promote an application related to the current website, and are
-    requested specifically through the current page's HTML.  This stat
-    specifically tracks a user's response to a displayed banner.
-  </summary>
-</histogram>
-
-<histogram name="appcache.CheckResponseResult"
-    enum="AppCacheCheckResponseResult">
-  <owner>michaeln@chromium.org</owner>
-  <summary>AppCache check response result code.</summary>
-</histogram>
-
-<histogram name="appcache.CompletionQueueTime" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time elapsed between a completion task being queued and run.
-  </summary>
-</histogram>
-
-<histogram name="appcache.CompletionRunTime" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The amount of time taken to run a completion task on the IO thread.
-  </summary>
-</histogram>
-
-<histogram name="appcache.CorruptionDetected">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Tracks the number of times corruption is detected in the sql database.
-  </summary>
-</histogram>
-
-<histogram name="appcache.InitResult" enum="AppCacheInitResult">
-  <owner>michaeln@chromium.org</owner>
-  <summary>AppCache initialization result code.</summary>
-</histogram>
-
-<histogram name="appcache.JobStartDelay.AppCache" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    How long URLRequests to be retrieved from the appcache are delayed.
-  </summary>
-</histogram>
-
-<histogram name="appcache.JobStartDelay.Error" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    How long URLRequests that result in a synthesized error are delayed.
-  </summary>
-</histogram>
-
-<histogram name="appcache.JobStartDelay.Network" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    How long URLRequests to be retrieved over the network are delayed.
-  </summary>
-</histogram>
-
-<histogram name="appcache.MainPageLoad" enum="BooleanSecure">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Counts the number of appcached page loads for secure vs insecure origins.
-  </summary>
-</histogram>
-
-<histogram name="appcache.MainResourceResponseRetrieval" enum="BooleanSuccess">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Tracks the success rate of retrieving a main resource from the appcache.
-  </summary>
-</histogram>
-
-<histogram name="appcache.MissingManifestDetectedAtCallsite"
-    enum="AppCacheErrorSite">
-  <owner>michaeln@chromium.org</owner>
-  <summary>Identifies where a missing manifest was detected occured.</summary>
-</histogram>
-
-<histogram name="appcache.MissingManifestEntry" enum="BooleanSuccess">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Logged on each occurrence of there being no record for the manifest file in
-    the entries table.
-  </summary>
-</histogram>
-
-<histogram name="appcache.ReinitAttempt">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Tracks the number of times the appcache reinit process occurs. The boolean
-    value indicates whether it was a repeated attempt to reinitialize during a
-    browsing session.
-  </summary>
-</histogram>
-
-<histogram name="appcache.SubResourceResponseRetrieval" enum="BooleanSuccess">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Tracks the success rate of retrieving a sub resource from the appcache.
-  </summary>
-</histogram>
-
-<histogram name="appcache.TaskQueueTime" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time elapsed between a background task being queued and run.
-  </summary>
-</histogram>
-
-<histogram name="appcache.TaskRunTime" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>The amount of time taken to run a background task.</summary>
-</histogram>
-
-<histogram name="appcache.UpdateJobResult" enum="AppCacheUpdateJobResult">
-  <owner>michaeln@chromium.org</owner>
-  <summary>AppCache update job result code.</summary>
-</histogram>
-
-<histogram name="appcache.UpdateProgressAtPointOfFaliure" units="%">
-  <owner>michaeln@chromium.org</owner>
-  <summary>Percent completion at point of failure of an update job.</summary>
-</histogram>
-
-<histogram name="appcache.UpdateWasOffOriginAtPointOfFailure" enum="Boolean">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Whether the resource causing the failure was from a different origin.
-  </summary>
-</histogram>
-
-<histogram name="appcache.UpdateWasStalledAtPointOfFailure" enum="Boolean">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Whether any progresss had been made in the 5 minutes preceeding failure.
-  </summary>
-</histogram>
-
-<histogram name="AppleScript.CommandEvent" enum="AppleScriptCommandEvents">
-  <owner>spqchan@chromium.org</owner>
-  <summary>The number of times an AppleScript event gets called.</summary>
-</histogram>
-
-<histogram name="Apps.AppInfoDialog.Launches" enum="AppInfoDialogLaunchOrigin">
-  <owner>sashab@chromium.org</owner>
-  <summary>
-    The number of times the app info dialog is launched. This is gathered each
-    time the app info dialog is opened, from each of the places the dialog can
-    be opened from.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppInfoDialog.OpenedForLocation" enum="AppLocation">
-  <owner>sashab@chromium.org</owner>
-  <summary>
-    The location of the app that the dialog was opened for. This is gathered
-    each time the app info dialog is opened.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppInfoDialog.OpenedForType" enum="ExtensionType">
-  <owner>sashab@chromium.org</owner>
-  <summary>
-    The type of the app that the dialog was opened for. This is gathered each
-    time the app info dialog is opened.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppLaunch" enum="AppLaunch">
-  <owner>tapted@chromium.org</owner>
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    The number of times v2 packaged apps are launched grouped by
-    extension_misc::AppLaunchBuckets. See also Extensions.AppLaunch.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo">
-  <owner>mad@chromium.org</owner>
-  <summary>Interactions with the App Launcher promo dialog.</summary>
-</histogram>
-
-<histogram name="Apps.AppListCreationTime" units="ms">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The amount of time it takes to build the app list UI. This is logged each
-    time the app list is built from scratch.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListDoodleAction" enum="AppListDoodleAction">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The number of user interactions with the app list doodle. This is logged
-    once per action.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListHowEnabled" enum="AppListEnableSource">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The trigger that caused the app list to be enabled. Recorded when the user
-    first shows the app list. If not shown after one hour, will be recorded
-    then. If Chrome was not running at the one-hour mark, will be recorded
-    during the next Chrome startup.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListPageOpened" enum="AppListPage">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The page that the app list goes to. This is gathered every time the user
-    initiates a transition to another page in the launcher.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchCommenced" units="searches">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The number of searches that are started in the app list. This is gathered
-    each time the app list search box transitions from empty to non-empty.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchQueryLength" units="characters">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The length of the app list search query when a result is opened. This is
-    gathered per click of a search result.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchResultDistanceFromOrigin" units="keystrokes">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The minimum number of arrow keys a user would need to press to navigate to
-    the opened search result. This is gathered per click of a search result.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchResultOpenDisplayType"
-    enum="AppListSearchResultDisplayType">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The display type of the app list search result that was opened by the user.
-    This is gathered per click of a search result.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The type of app list search result that was opened by the user. This is
-    gathered per click of a search result.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListTimeToDiscover" units="ms">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    Time between enabling the app list, and a user explicitly choosing to show
-    it. If the app list is not shown after one hour, an entry in the last bucket
-    is recorded. If the user installs a second packaged app within one hour, or
-    if the app list was not enabled by installing a packaged app from the Web
-    Store, no time value is recorded - only Apps.AppListHowEnabled.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppListWarmupDuration" units="ms">
-  <obsolete>
-    Deprecated 07/2016 in Issue 600915 with the removal of the app list on
-    Windows.
-  </obsolete>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The amount of time spent in warmup (in WarmupForProfile call). This will
-    tell us how long warmup blocks the UI.
-  </summary>
-</histogram>
-
-<histogram name="Apps.AppShimErrorVersion">
-  <owner>jackhou@chromium.org</owner>
-  <summary>
-    Counts which major milestone versions of app_mode_loader are sending
-    --app-shim-error. --app-shim-error is sent as a command line argument to
-    Chrome when app_mode_loader was unable to dyload the Chrome Framework and
-    call ChromeAppModeMain. For example, when Chrome updates from 32-bit to
-    64-bit, an older shim will find the new framework version but fail to dyload
-    it.
-  </summary>
-</histogram>
-
-<histogram name="Apps.NoteTakingApp.DefaultLaunchResult"
-    enum="NoteTakingAppLaunchResult">
-  <owner>derat@chromium.org</owner>
-  <owner>jdufault@chromium.org</owner>
-  <summary>
-    The result of attempting to launch a default note-taking app on Chrome OS.
-    Only reported if the preferred app was unspecified or failed to launch.
-  </summary>
-</histogram>
-
-<histogram name="Apps.NoteTakingApp.PreferredLaunchResult"
-    enum="NoteTakingAppLaunchResult">
-  <owner>derat@chromium.org</owner>
-  <owner>jdufault@chromium.org</owner>
-  <summary>
-    The result of attempting to launch the user-specified preferred note-taking
-    app, if any, on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Arc.AndroidBootTime" units="ms">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>The time elapsed for booting up the ARC instance.</summary>
-</histogram>
-
-<histogram name="Arc.AppCount">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    The number of ARC apps open at any given time. Collected every 5 minutes.
-    This indicates both how many users are engaging with apps and, when they do
-    engage, how many apps they are engaging with at a time.
-  </summary>
-</histogram>
-
-<histogram name="Arc.AppsInstalledAtStartup" units="App Count">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    Total number of ARC apps installed on a device measured at startup. Note:
-    This includes launchable apps that are installed by default, such as Play
-    Store and Settings, as well as any vendor specific apps.
-  </summary>
-</histogram>
-
-<histogram name="Arc.boot_progress" units="ms">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    The relative time of a boot progress event since the ARC starts.
-  </summary>
-</histogram>
-
-<histogram name="Arc.ComplianceReportSinceUpdateNotificationTime" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>emaxx@google.com</owner>
-  <summary>
-    Elapsed time from the policy update notification sent to ARC to the
-    corresponding successfully obtained compliance report from CloudDPS.
-  </summary>
-</histogram>
-
-<histogram name="Arc.CumulativeUseTime" units="seconds">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    ARC use time. The use time is incremented in regular intervals while android
-    container is active. Reported at most once a day, at which point accumulated
-    time is reset (which means that sum of reported times for a OS version would
-    give an estimate of ARC usage time per OS version).
-  </summary>
-</histogram>
-
-<histogram name="Arc.FirstComplianceReportTime.SinceSignIn" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>emaxx@google.com</owner>
-  <summary>
-    Elapsed time from the signing in process start to a successfully obtained
-    compliance report from CloudDPS.
-  </summary>
-</histogram>
-
-<histogram name="Arc.FirstComplianceReportTime.SinceStartup" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>emaxx@google.com</owner>
-  <summary>
-    Elapsed time from ARC startup to a successfully obtained compliance report
-    from CloudDPS. This value is not reported during the first startup when
-    signing in happens.
-  </summary>
-</histogram>
-
-<histogram name="Arc.IntentHandlerAction" enum="ArcIntentHandlerAction">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>ARC intent handler action taken by user.</summary>
-</histogram>
-
-<histogram name="Arc.IntentHandlerDestinationPlatform"
-    enum="ArcIntentHandlerDestinationPlatform">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    ARC intent handler destination platform. The destination may be specified
-    due to the user explicit selection or a previously stored preference.
-  </summary>
-</histogram>
-
-<histogram name="Arc.LowMemoryKiller.Count">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>Cumulative count of low memory kills in one user session.</summary>
-</histogram>
-
-<histogram name="Arc.LowMemoryKiller.FreedSize" units="KB">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>The memory size freed by each low memory kill event.</summary>
-</histogram>
-
-<histogram name="Arc.LowMemoryKiller.TimeDelta" units="ms">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>The elapsed time to last low memory kill event.</summary>
-</histogram>
-
-<histogram name="Arc.OOMKills.Count" units="kills">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>Cumulative count of OOM kills in one user session.</summary>
-</histogram>
-
-<histogram name="Arc.OOMKills.Score" units="badness score">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    The oom_badness score of a OOM killed process as reported by kernel.
-  </summary>
-</histogram>
-
-<histogram name="Arc.OOMKills.TimeDelta" units="ms">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>The elapsed time since last OOM kill event.</summary>
-</histogram>
-
-<histogram name="Arc.OptInAction" enum="ArcOptInAction">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>Arc OptIn action taken by user.</summary>
-</histogram>
-
-<histogram name="Arc.OptInCancel" enum="ArcOptInCancel">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>Arc OptIn cancelation reason.</summary>
-</histogram>
-
-<histogram name="Arc.OptInSilentAuthCode" enum="ArcOptInSilentAuthCode">
-  <owner>elijahtaylor@google.com</owner>
-  <summary>
-    Arc Silent Auth Code status. This status is set during the ARC OptIn flow.
-    Retrieving Auth Code silently is optional feature. If it is not activated,
-    Disabled state is reported. Once it active, Auth code is retrieved silently.
-    In no error occurs, Success is reported. Otherwise specific error is sent.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.Result" enum="ArcProvisioningResult">
-  <obsolete>
-    Deprecated on 2016-09-15 and replaced by Arc.Provisioning.Result.Managed and
-    Arc.Provisioning.Result.Unmanaged.
-  </obsolete>
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    The result (success or the type of failure) of ARC provisioning.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.Result.Managed" enum="ArcProvisioningResult">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    The result (success or the type of failure) of ARC provisioning on managed
-    devices.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.Result.Unmanaged"
-    enum="ArcProvisioningResult">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    The result (success or the type of failure) of ARC provisioning on unmanaged
-    devices.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.TimeDelta.Failure.Managed" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    Elapsed time from the signing in process start to call to onSignInFailed for
-    managed users.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.TimeDelta.Failure.Unmanaged" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    Elapsed time from the signing in process start to call to onSignInFailed for
-    unmanaged users.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.TimeDelta.Success.Managed" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    Elapsed time from the signing in process start to successful call to
-    onSignInComplete for managed users.
-  </summary>
-</histogram>
-
-<histogram name="Arc.Provisioning.TimeDelta.Success.Unmanaged" units="ms">
-  <owner>alexchau@google.com</owner>
-  <owner>phweiss@google.com</owner>
-  <summary>
-    Elapsed time from the signing in process start to successful call to
-    onSignInComplete for unmanaged users.
-  </summary>
-</histogram>
-
-<histogram name="Arc.ShutdownTime" units="ms">
-  <owner>elijahtaylor@google.com</owner>
-  <summary>
-    The time it takes for ARC to shut down. This value is recorded on ARC
-    shutdown as the time is takes for the init process to exit after setting
-    'sys.powerctl shutdown'. It is reported on the next ARC startup to avoid
-    sending data during shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Arc.State" enum="BooleanEnabled">
-  <owner>elijahtaylor@google.com</owner>
-  <owner>mitsuji@google.com</owner>
-  <summary>
-    Whether ARC is enabled or not.  Before M56 this was collected only on login
-    and when ARC was enabled or disabled.  From M56 forward this is collected
-    during every metrics recording interval, so it is in every record uploaded
-    to the server.  This is required because this value is used to categorize
-    all other data in the dashboard as collected with ARC enabled or not.
-  </summary>
-</histogram>
-
-<histogram name="ArcAuth.CheckinAttempts" units="attempts">
-  <owner>elijahtaylor@chromium.org</owner>
-  <summary>
-    Number of attempts done while waiting for the check-in task to be completed.
-    0 means that device was already checked-in. This is recorded in case
-    check-in task is completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="ArcAuth.CheckinTime" units="ms">
-  <owner>elijahtaylor@chromium.org</owner>
-  <summary>
-    Elapsed time waiting for the check-in task to be completed. This is recorded
-    in case check-in task is completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="ArcAuth.NetworkWaitTime" units="ms">
-  <owner>elijahtaylor@chromium.org</owner>
-  <summary>
-    Elapsed time waiting for network connection before starting other
-    authorization operations.
-  </summary>
-</histogram>
-
-<histogram name="ArcAuth.SignInTime" units="ms">
-  <owner>elijahtaylor@chromium.org</owner>
-  <summary>Elapsed time waiting for GMS sign-in to complete.</summary>
-</histogram>
-
-<histogram name="ArcRuntime.LowMemoryKiller.FreedSize" units="KB">
-  <obsolete>
-    Renamed to Arc.LowMemoryKiller.FreedSize on 2016/03/24.
-  </obsolete>
-  <owner>elijahtaylor@google.com</owner>
-  <summary>The memory size freed by each low memory kill event.</summary>
-</histogram>
-
-<histogram name="ArcRuntime.LowMemoryKiller.TimeDelta" units="ms">
-  <obsolete>
-    Renamed to Arc.LowMemoryKiller.TimeDelta on 2016/03/24.
-  </obsolete>
-  <owner>elijahtaylor@google.com</owner>
-  <summary>The elapsed time to last low memory kill event.</summary>
-</histogram>
-
-<histogram name="Ash.Accelerators.Deprecated.LockScreen"
-    enum="DeprecatedAcceleratorUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The lock screen action has two accelerators:   - Ctrl+Shift+L which is
-    deprecated.   - Search+L which is new. This histogram shows the number of
-    times each accelerator (deprecated and new) is used.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Accelerators.Deprecated.NextIME"
-    enum="DeprecatedAcceleratorUsage">
-  <obsolete>
-    Deprecated 01/2017 for Issue 672905.
-  </obsolete>
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The switch to the next IME action has two accelerators: - Shift+Alt which is
-    deprecated.   - Ctrl+Shift+Space which is new. This histogram shows the
-    number of times each accelerator (deprecated and new) is used.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Accelerators.Deprecated.ShowTaskManager"
-    enum="DeprecatedAcceleratorUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    Opening the task manager has two accelerators:   - Shift+Esc which is
-    deprecated.   - Search+Esc which is new. This histogram shows the number of
-    times each accelerator (deprecated and new) is used.
-  </summary>
-</histogram>
-
-<histogram name="Ash.ActiveTouchPoints">
-  <obsolete>
-    Deprecated 02/2017 due to lack of usage.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Number of active touch-points when a new touch-point is added.
-  </summary>
-</histogram>
-
-<histogram name="Ash.ActiveWindowShowTypeOverTime" enum="ActiveWindowShowType">
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The show type of the active window tracked over time by logging on a regular
-    basis (30 minutes).
-  </summary>
-</histogram>
-
-<histogram name="Ash.AppList.TimeBetweenTaskSwitches" units="seconds">
-  <obsolete>
-    Deprecated 10/2016 for Issue 616581.
-  </obsolete>
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The amount of time between selecting an item from the Ash app list. Not
-    recorded on the first time an item is selected from the app list after
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Desktop.TimeBetweenNavigateToTaskSwitches" units="seconds">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of seconds between task window activations triggered by users
-    clicking or tapping on a window, as recorded by the Desktop_SwitchTask user
-    action. Recorded on ChromeOS only. Task switches from other sources are
-    ignored and do not affect this metric. In other words, if a user performs
-    the following steps (1) click on task window 'A' (2) Alt+Tab to task 'Z'(3)
-    click on task window 'B', then this will result in a sample recorded for the
-    time delta between activating task window 'A'and 'B'.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.Action" enum="DockedAction">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    User-initiated action taken that affects docked windows such as docking,
-    undocking, minimizing, restoring, closing or just dragging a docked window.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ActionSource" enum="DockedActionSource">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Source (mouse, touch, keyboard or unknown) of the user-initiated action for
-    docked windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsAll">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Number of all docked windows or panels including hidden or minimized.
-    Recorded on every user action that interacts with docked windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsLarge">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Number of large (wider than dock maximum width) windows that had to be
-    shrunk to get docked among the visible docked windows. Recorded on every
-    user action that interacts with docked windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsPanels">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Number of docked visible panels. Recorded on every user action that
-    interacts with docked windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsVisible">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Number of visible docked windows or panels. Recorded on every user action
-    that interacts with docked windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.TimeBetweenUse" units="seconds">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Time elapsed between instances of docking, undocking or any other action
-    affecting docked state of a window.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Dock.Width" units="pixels">
-  <owner>kuscher@google.com</owner>
-  <owner>varkha@chromium.org</owner>
-  <summary>
-    Width of the docked area in pixels. Recorded every time it changes after a
-    user window resize operation is completed.
-  </summary>
-</histogram>
-
-<histogram name="Ash.GestureCreated" enum="UIEventType">
-  <obsolete>
-    Deprecated 08/2014 in Issue 352654, and replaced by Event.GestureCreated.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    The gesture-events recognized and dispatched by the browser gesture
-    recognizer.
-  </summary>
-</histogram>
-
-<histogram name="Ash.GestureTarget" enum="GestureActionType">
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    The gesture-events recognized and dispatched by the browser gesture
-    recognizer for various UI components.
-  </summary>
-</histogram>
-
-<histogram name="Ash.ImmersiveFullscreen.WindowType" enum="WindowType">
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The type of the window which is put into immersive fullscreen. Immersive
-    fullscreen is entered via the F4 key.
-  </summary>
-</histogram>
-
-<histogram name="Ash.NumberOfVisibleWindowsInPrimaryDisplay" units="Windows">
-  <owner>tdanderson@google.com</owner>
-  <owner>bruthig@google.com</owner>
-  <summary>
-    An upper bound on the number of windows visible to the user on the primary
-    display. Determined by processing the windows in increasing z-order and
-    counting all non-minimized windows until a maximized or fullscreen window is
-    processed. This metric is logged periodically every 30 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Menu.NumItemsEnabledUponSelection" units="Count">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    Tracks the number of menu items that are enabled in a shelf item's secondary
-    menu. This metric is only recorded when a menu item is selected.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Menu.SelectedMenuItemIndex" units="Index">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    Tracks the index of the selected menu item in a shelf item's secondary menu.
-    This metric is only recorded when a menu item is selected.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.NumberOfItems" units="Icons">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    The number of icons in the shelf, not including the App Launcher icon. This
-    metric is recorded every 30 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.NumberOfPinnedItems" units="Icons">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    The number of pinned icons in the shelf, not including the App Launcher
-    icon. This metric is recorded every 30 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.NumberOfUnpinnedItems" units="Icons">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    The number of unpinned icons in the shelf. This metric is recorded every 30
-    minutes.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Palette.InLaserPointerMode" units="ms">
-  <owner>xiaoyinh@chromium.org</owner>
-  <summary>
-    Tracks the amount of time spend in Palette laser point mode.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Palette.InMagnifyMode" units="ms">
-  <owner>xiaoyinh@chromium.org</owner>
-  <summary>Tracks the amount of time spend in Palette Magnify mode.</summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Palette.ModeCancellation"
-    enum="PaletteModeCancelType">
-  <owner>xiaoyinh@chromium.org</owner>
-  <summary>
-    Tracks the number of times a palette mode is explicitly cancelled or
-    switched out of.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Palette.Usage" enum="PaletteTrayOptions">
-  <owner>xiaoyinh@chromium.org</owner>
-  <summary>
-    Tracks the usage of each pen palette option when palette is not
-    automatically opened by a stylus eject event.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.Palette.Usage.AutoOpened" enum="PaletteTrayOptions">
-  <owner>xiaoyinh@chromium.org</owner>
-  <summary>
-    Tracks the usage of each pen palette option when palette is automatically
-    opened by a stylus eject event.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.TimeBetweenNavigateToTaskSwitches" units="seconds">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    The number of seconds between contiguous task switch user actions triggered
-    by the Shelf buttons where the user activates a different user-predictable
-    task. Task switches from other sources are ignored and do not affect this
-    metric. In other words, if a user performs the following steps (1) launch
-    task 'A' from the Shelf (2) Alt+Tab to task 'Z' (3) launch task 'B' from the
-    Shelf, then this will result in a sample recorded for the time delta between
-    launching tasks 'A' and 'B'.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions"
-    units="ms">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    Tracks the amount of time between a window being minimized by the shelf and
-    subsequently activated. In other words this metric is only recorded if a
-    shelf button pressed action causes a window to be minimized and the very
-    next shelf button pressed action causes the same window to be activated.
-  </summary>
-</histogram>
-
-<histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue">
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The current state of the shelf (alignment) tracked over time by logging on a
-    regular basis (30 minutes), this is used instead of log in or shelf usage to
-    track users that do not lock/unlock or log in frequently and use a small
-    number of browser instances or otherwise infrequently interact with the
-    shelf launcher.
-  </summary>
-</histogram>
-
-<histogram name="Ash.ShelfAlignmentUsage" enum="ShelfAlignmentValue">
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The current state of the shelf (alignment) when the shelf launcher is used
-    to launch an app/window/etc, this is used instead of log in to give data on
-    users that do not lock/unlock or log in frequently.
-  </summary>
-</histogram>
-
-<histogram name="Ash.StationaryTouchDuration" units="seconds">
-  <obsolete>
-    Deprecated 02/2017 due to lack of usage.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>The duration of mostly stationary long-duration touches.</summary>
-</histogram>
-
-<histogram name="Ash.SystemMenu.DefaultView.VisibleRows"
-    enum="SystemMenuDefaultViewRows">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    The visible rows displayed in the system menu's default view. Recorded each
-    time the menu is opened.
-  </summary>
-</histogram>
-
-<histogram name="Ash.SystemMenu.PercentageOfWorkAreaHeightCoveredByMenu"
-    units="%">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    The height of the system menu divided by the height of the Ash desktop work
-    area; a value over 100% indicates that a portion of the system menu is not
-    visible to the user. Recorded each time the menu is opened.
-  </summary>
-</histogram>
-
-<histogram name="Ash.SystemMenu.Rows" units="rows">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    The number of user-visible rows in the system menu's default view. Recorded
-    each time the menu is opened.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Tab.TimeBetweenSwitchToExistingTabUserActions"
-    units="seconds">
-  <obsolete>
-    Deprecated 10/2016 for Issue 616581.
-  </obsolete>
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of seconds between tab switches triggered by a user gesture (e.g.
-    Ctrl+T, Ctrl+1, tapping or clicking the tab strip, etc).
-  </summary>
-</histogram>
-
-<histogram name="Ash.TimeBetweenTaskSwitches" units="seconds">
-  <owner>bruthig@google.com</owner>
-  <owner>tdanderson@google.com</owner>
-  <summary>
-    The number of seconds between contiguous task switch user actions triggered
-    by any of the other task switch actions that are tracked. (e.g.,
-    Ash.Shelf.TimeBetweenNavigateToTaskSwitches,
-    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions,
-    Ash.WindowCycleController.TimeBetweenTaskSwitches,
-    Ash.AppList.TimeBetweenTaskSwitches,
-    Ash.WindowSelector.TimeBetweenActiveWindowChanges, etc). Note the
-    Ash.AppList.TimeBetweenTaskSwitches and
-    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions histograms were deprecated
-    and removed in 10/2016.
-  </summary>
-</histogram>
-
-<histogram name="Ash.TouchDuration" units="ms">
-  <obsolete>
-    Deprecated 12/2013 in r239809, and replaced by Ash.TouchDuration2.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <summary>The duration of a touch-sequence.</summary>
-</histogram>
-
-<histogram name="Ash.TouchDuration2" units="ms">
-  <obsolete>
-    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchDuration.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>The duration of a touch-sequence.</summary>
-</histogram>
-
-<histogram name="Ash.TouchMaxDistance" units="pixels">
-  <obsolete>
-    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchMaxDistance.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    The maximum euclidean distance in dips which a touch point has travelled
-    away from its starting point. Only measured for single finger gestures.
-  </summary>
-</histogram>
-
-<histogram name="Ash.TouchMoveInterval" units="ms">
-  <obsolete>
-    Deprecated 02/2017 due to lack of usage.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>The interval between touch-move events.</summary>
-</histogram>
-
-<histogram name="Ash.TouchMoveSteps" units="pixels">
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>The distance between touch-move events.</summary>
-</histogram>
-
-<histogram name="Ash.TouchPositionX" units="pixels">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>The position of the touch-events along the X axis.</summary>
-</histogram>
-
-<histogram name="Ash.TouchPositionY" units="pixels">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>The position of the touch-events along the Y axis.</summary>
-</histogram>
-
-<histogram name="Ash.TouchRadius" units="pixels">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>The radius of a touch event.</summary>
-</histogram>
-
-<histogram name="Ash.TouchStartAfterEnd" units="ms">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The interval between the end of a touch-sequence and the start of the next
-    touch-sequence.
-  </summary>
-</histogram>
-
-<histogram name="Ash.TouchStartBurst">
-  <obsolete>
-    Deprecated 02/2017 due to lack of usage.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    The number of rapid touch-starts that happened within a short interval.
-    Logged once for each such burst group.
-  </summary>
-</histogram>
-
-<histogram name="Ash.TouchView.TouchViewActive" units="ms">
-  <owner>girard@chromium.org</owner>
-  <summary>
-    The length of time that TouchView is active, for each activation.
-  </summary>
-</histogram>
-
-<histogram name="Ash.TouchView.TouchViewActivePercentage" units="%">
-  <owner>girard@chromium.org</owner>
-  <summary>The proportion of time spent in TouchView during a session.</summary>
-</histogram>
-
-<histogram name="Ash.TouchView.TouchViewActiveTotal" units="seconds">
-  <owner>girard@chromium.org</owner>
-  <summary>The total time that TouchView is active during a session.</summary>
-</histogram>
-
-<histogram name="Ash.TouchView.TouchViewInactive" units="ms">
-  <owner>girard@chromium.org</owner>
-  <summary>The length of time between TouchView activations.</summary>
-</histogram>
-
-<histogram name="Ash.TouchView.TouchViewInactiveTotal" units="seconds">
-  <owner>girard@chromium.org</owner>
-  <summary>
-    The total time that TouchView is not active during a session.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.Apps" enum="WallpaperApps">
-  <owner>xdai@chromium.org</owner>
-  <summary>
-    The Wallpaper App that the user is using right now on Chrome OS. It's the
-    app that is used when the user right clicks on desktop and selects &quot;Set
-    wallpaper&quot; or when the user selects &quot;Set wallpaper&quot; from
-    chrome://settings page. This is recorded at user login.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.CustomLayout" enum="WallpaperLayout">
-  <owner>xdai@chromium.org</owner>
-  <summary>
-    The custom wallpaper layout type. Recorded when the user sets a new custom
-    wallpaper or changes the existing custom wallpaper's layout.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.DefaultIndex">
-  <obsolete>
-    Deprecated as of 11/2012. Use of indices has been removed.
-  </obsolete>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The wallpaper index if one of the default wallpapers has been selected.
-    Recorded at user login. Currently only for the old wallpaper picker UI.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.Source" enum="WallpaperType">
-  <owner>xdai@chromium.org</owner>
-  <summary>
-    Recorded when a new wallpaper is set, either by the built-in Wallpaper
-    Picker App, or by a third party App. Note the wallpaper change triggered by
-    Sync file system event doesn't count.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.TimeSpentExtractingColors" units="ms">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    The time taken to extract colors from wallpapers. Recorded each time the
-    wallpaper image changes.
-  </summary>
-</histogram>
-
-<histogram name="Ash.Wallpaper.Type" enum="WallpaperType">
-  <owner>kuscher@google.com</owner>
-  <summary>The wallpaper type. Recorded at user login.</summary>
-</histogram>
-
-<histogram name="Ash.WindowCycleController.CycleTime" units="ms">
-  <owner>varkha@chromium.org</owner>
-  <owner>tbuckley@google.com</owner>
-  <summary>
-    The amount of time the Alt key is held after pressing Alt+Tab to begin
-    cycling through windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowCycleController.Items" units="items">
-  <owner>varkha@chromium.org</owner>
-  <owner>tbuckley@google.com</owner>
-  <summary>
-    The number of windows in the Alt+Tab selector. Only recorded once when
-    cycling starts, not every time when Tab is pressed without releasing Alt.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowCycleController.SelectionDepth" units="items">
-  <owner>varkha@chromium.org</owner>
-  <owner>tbuckley@google.com</owner>
-  <summary>
-    When a window is selected after pressing Alt+Tab, records that window's
-    position in the global MRU ordering. 1 represents the most-recently used
-    window, 2 represents the next most-recently used window, and so on. Recorded
-    when Alt+Tab cycling stops, i.e., when Alt key is released.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowCycleController.TimeBetweenTaskSwitches"
-    units="seconds">
-  <owner>varkha@chromium.org</owner>
-  <owner>tbuckley@google.com</owner>
-  <summary>
-    The number of seconds between task switches triggered by the next window and
-    previous window accelerator keys (ie Alt+Tab, Alt+Shift+Tab).
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowManager.Lock.Success" units="ms">
-  <owner>jdufault@chromium.org</owner>
-  <summary>
-    How long it took for the screen lock process to complete. This does not
-    include timeouts.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowManager.Lock.Timeout" units="ms">
-  <owner>jdufault@chromium.org</owner>
-  <summary>
-    How long it took for the screen lock process to complete, for timeouts only.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.AnimationSmoothness.Close" units="%">
-  <owner>varkha@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    Relative smoothness of animations when closing a window in overview mode.
-    100% represents ideally smooth 60 frames per second.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.AnimationSmoothness.Enter" units="%">
-  <owner>varkha@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    Relative smoothness of animations when entering overview mode. 100%
-    represents ideally smooth 60 frames per second.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.AnimationSmoothness.Exit" units="%">
-  <owner>varkha@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    Relative smoothness of animations when exiting overview mode. 100%
-    represents ideally smooth 60 frames per second.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.ArrowKeyPresses">
-  <owner>flackr@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of times the arrow keys are pressed in overview mode per session,
-    i.e. between bringing up overview mode and ending it. This is only measured
-    for the sessions that end by selecting a window with the enter key.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.CycleTime" units="ms">
-  <obsolete>
-    Deprecated as of 06/2014. No longer relevant since alt-tab switching was
-    separated from WindowSelector.
-  </obsolete>
-  <owner>flackr@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The amount of time the Alt key is held after pressing Alt+Tab to begin
-    cycling through windows.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.Items">
-  <owner>flackr@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The number of items (single windows or groups of windows such as panels) in
-    the overview mode, present at the start of each session.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.ItemsWhenTextFilteringUsed" units="items">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>flackr@chromium.org</owner>
-  <summary>
-    The number of items showing in overview mode at the moment when an item is
-    selected or when selection is canceled. Only recorded if the text filtering
-    textfield contains a non-empty string.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.KeyPressesOverItemsRatio" units="%">
-  <owner>flackr@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The ratio between the arrow key presses and the number of overview items,
-    expressed as a percentage for a single session.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.OverviewClosedItems">
-  <owner>flackr@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of items closed from the window overview for a single session.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.SelectionDepth" units="items">
-  <owner>varkha@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    When a window is selected in overview mode, records that window's position
-    in the global MRU ordering. 1 represents the most-recently used window, 2
-    represents the next most-recently used window, and so on.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TextFilteringStringLength"
-    units="characters">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>flackr@chromium.org</owner>
-  <summary>
-    The length of the string entered into the text filtering textfield at the
-    moment when an item is selected or when selection is canceled.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TextFilteringTextfieldCleared">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>flackr@chromium.org</owner>
-  <summary>
-    The number of times the text filtering textfield has had all of its text
-    removed within a single overview mode session. Measured from the time
-    overview mode is invoked to when an item is selected or when selection is
-    canceled.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeBetweenActiveWindowChanges"
-    units="seconds">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The amount of time between endings of overview mode sessions which were
-    caused by the user selecting a window which was not previously active. Only
-    recorded on the second and later times after startup that the user selected
-    a window which was not previously active.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeBetweenUse" units="ms">
-  <owner>flackr@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The amount of time between uses of overview mode, recorded when overview
-    mode is entered. Only recorded on the second and later times after startup
-    that the user entered overview mode.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeInOverview" units="ms">
-  <owner>flackr@chromium.org</owner>
-  <owner>kuscher@google.com</owner>
-  <summary>
-    The amount of time spent in overview mode. Overview mode is engaged by
-    pressing the overview button. The time is measured from the moment the
-    windows begin animating to a thumbnail size preview to when a window is
-    selected or selection is canceled.
-  </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeInOverviewWithTextFiltering" units="ms">
-  <owner>tdanderson@chromium.org</owner>
-  <owner>flackr@chromium.org</owner>
-  <summary>
-    The amount of time spent in overview mode when text filtering is used. The
-    time is measured from the moment the windows begin animating to a thumbnail
-    size preview to when a window is selected or selection is canceled. Only
-    recorded if the text filtering textfield contains a non-empty string.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.AttemptCountFail">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of DnsAttempts before DnsTransaction completes with failure.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.AttemptCountSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of DnsAttempts before DnsTransaction completes successfully.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigChange" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether DnsConfigService::OnConfigChange actually corresponded to a change
-    in DnsConfig.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigNotifyInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time between calls to DnsConfigService::InvalidateConfig.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Duration of time spent parsing DnsConfig.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of results of parsing DnsConfig in DnsConfigServicePosix.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Whether DnsConfig was parsed successfully.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of results of parsing DnsConfig in DnsConfigServiceWin.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether the first valid DnsConfig included a rogue nameserver.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
-    succeeded, at the end of a streak of failures after which the DnsClient was
-    disabled.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    TRUE counts the events when a valid DnsConfig is received and used to enable
-    DnsClient, while FALSE counts the events when DnsClient is disabled after a
-    series of successful fallbacks from DnsTask to ProcTask.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.FallbackFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time spent by ProcTask in failing fallback resolutions.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.FallbackSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time spent by ProcTask in successful fallback resolutions.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether there was a valid DNS configuration at the start of a job which
-    eventually completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Whether DnsHosts were parsed successfully.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether DnsConfigService::OnHostsChange actually corresponded to a change in
-    DnsHosts.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsNotifyInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time between calls to DnsConfigService::InvalidateHosts.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsParseDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Duration of time spent parsing DnsHosts.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of results of parsing DnsHosts in DnsConfigServiceWin.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsSize" units="bytes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The size of the HOSTS file observed before each attempt to parse it.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient). Includes only Jobs which had
-    priority HIGHEST when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_IDLE" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient). Includes only Jobs which had
-    priority IDLE when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_LOW" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient). Includes only Jobs which had
-    priority LOW when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient). Includes only Jobs which had
-    priority LOWEST when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (using DnsClient). Includes only Jobs which had
-    priority MEDIUM when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient). Includes only Jobs which had priority HIGHEST
-    when started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient). Includes only Jobs which had priority IDLE when
-    started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient). Includes only Jobs which had priority LOW when
-    started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient). Includes only Jobs which had priority LOWEST when
-    started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (using DnsClient). Includes only Jobs which had priority MEDIUM when
-    started.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.NameServersType" enum="AsyncDNSNameServersType">
-  <obsolete>
-    Deprecated as of 4/2016.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Type of nameservers in the DNS config, recorded each time the config is read
-    by the DNSConfigService.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of results of parsing addresses out of DNS responses in successful
-    DnsTransactions.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.PrefDefaultSource" enum="AsyncDNSPrefDefaultSource">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The source of the async DNS preference's default. Logged at startup, when
-    the IO thread is created.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.PrefSource" enum="AsyncDNSPrefSource">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The source of the async DNS preference's value. Logged at startup, when the
-    IO thread is created.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsTask in resolutions that failed. Excludes time
-    spent in the subsequent fallback.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of the overall results of using asynchronous DNS in HostResolverImpl.
-    This only includes jobs started with valid DNS configuration and excludes
-    synchronous resolutions (as IP literals, from cache, and from HOSTS).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsTask in resolutions that succeeded.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv4 lookups.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv6 lookups.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as AsyncDNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerCount">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of servers in DnsConfig. Recorded on every new DnsSession, which is
-    created on DNS change.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailureIndex">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Index in DnsConfig of the failing server, recorded at the time of failure.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of server failures after network change before first success in the
-    DnsSession. Recorded at the time of first success.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresAfterSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of server failures after success until the end of the session. Server
-    has reported success at some point during the session. Recorded at the end
-    of the DnsSession.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresBeforeSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of server failures before success. This is NOT the first success in
-    the DnsSession. Recorded at the time of success.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresWithoutSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of server failures without success until the end of the session.
-    Server has never reported success during the DnsSession. Recorded at the end
-    of the DnsSession.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerIsGood" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The current server is &quot;good&quot; and does not have to be skipped.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SortFailure" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in failing calls to AddressSorter in dual-stack
-    resolutions using DnsTask.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SortSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in successful calls to AddressSorter in dual-stack
-    resolutions using DnsTask.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchDone">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The number of names from the search name list consumed during a successful
-    transaction (QTYPE A only).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchRemain">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The number of names left on the search name list at the end of a successful
-    transaction (QTYPE A only).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchStart">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The number of names on the search name list at the start of a transaction
-    (QTYPE A only).
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TCPAttemptFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsTCPAttempt in failed attempts. Excludes
-    timeouts.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsTCPAttempt in successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Difference between RTT and timeout calculated using Histogram algorithm.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Difference between timeout calculated using Histogram algorithm and RTT.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Difference between RTT and timeout calculated using Jacobson algorithm.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Difference between timeout calculated using Jacobson algorithm and RTT.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time that would be spent waiting for lost request using
-    Histogram algorithm.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time that would be spent waiting for lost request using Jacobson
-    algorithm.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TotalTime" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since a HostResolverImpl::Resolve request to the time a
-    result is posted. Excludes canceled, evicted, and aborted requests. Includes
-    cache hits (recorded as 0). Excludes speculative requests.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TotalTime_speculative" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since a HostResolverImpl::Resolve request to the time a
-    result is posted. Excludes canceled, evicted, and aborted requests. Includes
-    cache hits (recorded as 0). Speculative requests only.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionFailure" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in failing DnsTransactions. This includes server
-    failures, timeouts and NXDOMAIN results.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in successful DnsTransactions. This includes all
-    NOERROR answers, even if they indicate the name has no addresses or they
-    cannot be parsed.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess_A" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as AsyncDNS.TransactionSuccess but limited to A query type.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as AsyncDNS.TransactionSuccess but limited to AAAA query type.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TTL" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    TTL of the resolved addresses, as in the response received from the server.
-    For results served from local cache, the TTL is from the original response.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UDPAttemptFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsUDPAttempt in failed attempts. Excludes
-    timeouts.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken by DnsUDPAttempt in successful attempts. Includes
-    responses arriving after timeout, if multiple attempts are allowed.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UnchangedConfigInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since the last empty config result to the time a non-change
-    OnConfigChange is received.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UnchangedHostsInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since the last empty config result to the time a non-change
-    OnHostsChange is received.
-  </summary>
-</histogram>
-
-<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The result of DnsConfigService watch. Counts STARTED on every initialization
-    and FAILED_* on any failure.
-  </summary>
-</histogram>
-
-<histogram name="Aura.CreatedGpuBrowserCompositor" enum="CompositorType">
-  <owner>jbauman@chromium.org</owner>
-  <summary>
-    Whether the browser compositor uses GPU or the software renderer.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.ErrorTypeOfAuthenticateUser"
-    enum="AuthPolicyErrorType">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Result from an attempt to authenticate a user to an Active Directory domain.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.ErrorTypeOfJoinADDomain" enum="AuthPolicyErrorType">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Result from an attempt to join a machine to an Active Directory domain.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.ErrorTypeOfRefreshDevicePolicy"
-    enum="AuthPolicyErrorType">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Result from an attempt to fetch device policy from an Active Directory
-    domain and store it on disk.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.ErrorTypeOfRefreshUserPolicy"
-    enum="AuthPolicyErrorType">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Result from an attempt to fetch user policy from an Active Directory domain
-    and store it on disk.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.FailedTriesOfKinit">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Number of times 'kinit' failed until the next try succeeded or the method
-    gave up because a maximum number of tries was exceeded. 'kinit' is run for
-    Active Directory enrolled devices during user authentication and device
-    policy fetch.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.FailedTriesOfSmbClient">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Number of times 'smbclient' failed until it the next try succeeded or the
-    method gave up because a maximum number of tries was exceeded. 'smbclient'
-    is run for Active Directory enrolled devices during policy fetch.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.NumGposToDownload">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Number of group policy objects attached to a specific user or machine on an
-    Active Directory domain. This value is recorded when user or device policy
-    is fetched from an Active Directory server.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToAuthenticateUser" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to authenticate a user to an Active Directory domain.
-    The value is recorded no matter if the operation was successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToJoinADDomain" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to join a machine to an Active Directory domain. Domain
-    join is part of the Active Directory enrollment process. The value is
-    recorded no matter if the operation was successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRefreshDevicePolicy" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to fetch device policy from an Active Directory domain
-    and store it on disk. The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRefreshUserPolicy" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to fetch user policy from an Active Directory domain
-    and store it on disk. The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunKinit" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'kinit' (request Kerberos ticket-granting-
-    ticket). TGTs are requested regularly for accessing services on Active
-    Directory domains. The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunNetAdsInfo" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'net ads info' (query Active Directory
-    information). The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunNetAdsJoin" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'net ads join' (join machine to an Active
-    Directory domain). The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunNetAdsSearch" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'net ads search' (query information about an
-    Active Directory account). The value is recorded no matter if the operation
-    was successful or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunNetAdsWorkgroup" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'net ads workgroup' (query Active Directory
-    workgroup). The value is recorded no matter if the operation was successful
-    or not.
-  </summary>
-</histogram>
-
-<histogram name="AuthPolicy.TimeToRunSmbclient" units="ms">
-  <owner>ljusten@chromium.org</owner>
-  <summary>
-    Time in milliseconds to call 'smbclient' (download policy from an Active
-    Directory domain). The value is recorded no matter if the operation was
-    successful or not.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the frequency of user interactions with the Autocheckout bubble,
-    which prompts users to invoke Autocheckout on supported websites.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the frequency of final states reached in Autocheckout buy flow.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.DismissalState"
-    enum="AutofillDialogDismissalState">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The state of the Autocheckout dialog when it was dismissed.</summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user submitted the Autocheckout
-    dialog and when the Autocheckout flow, or filling process, concluded.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration.Failed" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user submitted the Autocheckout
-    dialog and when the Autocheckout flow concluded, in cases where the flow
-    failed.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user submitted the Autocheckout
-    dialog and when the Autocheckout flow concluded, in cases where the flow
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.InitialUserState"
-    enum="AutofillDialogInitialUserState">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The initial state of a user that's interacting with a freshly shown
-    Autocheckout dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    User interactions with the Autofill popup shown while filling an
-    Autocheckout dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the frequency of security warnings and errors in the Autocheckout
-    dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the duration for which an Autocheckout dialog was shown.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration.Cancel" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the duration for which an Autocheckout dialog was shown, in cases
-    where the user ended up canceling out of the dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration.Submit" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the duration for which an Autocheckout dialog was shown, in cases
-    where the user ended up accepting the dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures how users are interacting with the Autocheckout dialog UI.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiLatencyToShow" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the duration of time it takes for the Autocheckout UI to be
-    actionable by the user after it is shown.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.WalletErrors" enum="WalletErrors">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the frequency of errors in communicating with the Google Online
-    Wallet server.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.WalletRequiredActions"
-    enum="WalletRequiredActions">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the frequency of required user actions returned by the Google
-    Online Wallet server.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures time taken to download the Autocheckout whitelist file.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures time taken to download the Autocheckout whitelist file in case the
-    download was failed.
-  </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures time taken to download the Autocheckout whitelist file in case the
-    download was succeeded.
-  </summary>
-</histogram>
-
-<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted">
-  <obsolete>
-    Deprecated as of 2/2016.
-  </obsolete>
-  <owner>jinsukkim@chromium.org</owner>
-  <summary>
-    Whether the text encoding auto detection logic was attempted for a web page.
-    The logic is triggered when the parser fails to find the encoding method
-    from other signals such as http header, meta tag, BOM, etc.
-
-    If the logic successfully detects a new encoding method which is different
-    from the default one, the result is reported through
-    AutodetectEncoding.Detected with the encoding method (see below). Otherwise
-    - i.e. detection logic somehow fails to work for the page or the detected
-    one is same as the default - no result is reported.
-  </summary>
-</histogram>
-
-<histogram name="AutodetectEncoding.Detected" enum="EncodingMethod"
-    units="pages">
-  <obsolete>
-    Deprecated as of 2/2016.
-  </obsolete>
-  <owner>jinsukkim@chromium.org</owner>
-  <summary>
-    The number of web pages whose encoding method is found by the auto detection
-    logic. Grouped by the encoding methods defined in EncodingMethod.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.AddressBook.AccessSkipped" enum="BooleanSkipped">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Whether an attempt to access the Mac AddressBook was skipped because doing
-    so would incorrectly cause the appearance of the permissions dialog. This
-    happens when Chrome auto-update changes the binary on disk before the first
-    AddressBook access attempt.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.AddressBookAvailable" enum="BooleanAvailable">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Whether the Mac AddressBook was available on an attempt to read data from
-    it.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.AddressBookAvailableOnFirstAttempt"
-    enum="BooleanAvailable">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Whether the Mac AddressBook was available on the *first* attempt to read
-    data from it.  This is only recorded once per Chrome profile.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.AddressSuggestionsCount">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The number of address suggestions shown in the Autofill popup.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.AutomaticProfileCreation" enum="BooleanCreated">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Autofill.ProfileActionOnFormSubmitted.
-  </obsolete>
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether a new Autofill profile was created automatically. In the
-    &quot;false&quot; case, an existing profile was used (and possibly updated).
-  </summary>
-</histogram>
-
-<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision">
-  <obsolete>
-    Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionExpanded.
-  </obsolete>
-  <owner>jdonnelly@chromium.org</owner>
-  <summary>
-    Whether upload was offered upon detecting a form submission with credit card
-    data and a reason if it wasn't.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.CardUploadDecisionExpanded"
-    enum="AutofillCardUploadDecisionExpanded">
-  <owner>jdonnelly@chromium.org</owner>
-  <summary>
-    Whether upload was offered upon detecting a form submission with credit card
-    data and a detailed reason if it wasn't.
-  </summary>
-</histogram>
-
-<histogram name="AutoFill.CCInfoBarAccepted">
-  <obsolete>
-    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The Autofill credit card info bar was accepted.</summary>
-</histogram>
-
-<histogram name="AutoFill.CCInfoBarDenied">
-  <obsolete>
-    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The Autofill credit card info bar was denied.</summary>
-</histogram>
-
-<histogram name="Autofill.CreditCardFillingInfoBar"
-    enum="AutofillCreditCardInfoBar">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The relative frequency with which users accept, deny, or ignore the Autofill
-    credit card assisted filling infobar prompt.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Autofill.CreditCardInfoBar"
-    enum="AutofillCreditCardInfoBar">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The relative frequency with which users accept, deny, or ignore the Autofill
-    credit card info bar prompt.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.DaysSinceLastUse.CreditCard" units="days">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Logs the number of days that have passed since the credit card was last
-    used.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.DaysSinceLastUse.Profile" units="days">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Logs the number of days that have passed since the profile was last used.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.DeveloperEngagement"
-    enum="AutofillDeveloperEngagement">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Measures the adoption of the HTML autocomplete type hint specification (see
-    http://is.gd/whatwg_autocomplete for more details).  For each fillable form
-    detected, logs whether that form includes author-specified type hints.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromInteraction.WithAutofill">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Time elapsed between the user's first interaction with a form and the form's
-    submission, for an autofilled form.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromInteraction.WithoutAutofill">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Time elapsed between the user's first interaction with a form and the form's
-    submission, for a non-autofilled form.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromLoad.WithAutofill">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Time elapsed between form load and form submission, for an autofilled form.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromLoad.WithoutAutofill">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Time elapsed between form load and form submission, for a non-autofilled
-    form.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.FormEvents.Address" enum="AutofillFormEvent">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Autofill form events for address forms. These are recorded when the user
-    interacts with a form requesting an address.
-  </summary>
-  <details>
-    Important caveat about submission metrics: - Submission using autofill data
-    is determined by simply evaluating if there was a fill operation in this
-    page. So, if the user filled with local data, completed erased or modified
-    the data after and then submitted, we would only emit one &quot;Submitted
-    with server suggestion filled (once)&quot;; - The submission segmentation
-    works by checking what kind of data was last filled for this type of form in
-    the page load. So, if a user initially filled with local data and after that
-    filled with server, we will only emit &quot;Submitted with server suggestion
-    filled (once)&quot;.
-  </details>
-</histogram>
-
-<histogram name="Autofill.FormEvents.CreditCard" enum="AutofillFormEvent">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Autofill form events for credit card forms. These are recorded when the user
-    interacts with a form requesting a credit card.
-  </summary>
-  <details>
-    Important caveat about submission metrics: - Submission using autofill data
-    is determined by simply evaluating if there was a fill operation in this
-    page. So, if the user filled with local data, completed erased or modified
-    the data after and then submitted, we would only emit one &quot;Submitted
-    with server suggestion filled (once)&quot;; - The submission segmentation
-    works by checking what kind of data was last filled for this type of form in
-    the page load. So, if a user initially filled with local data and after that
-    filled with server, we will only emit &quot;Submitted with server suggestion
-    filled (once)&quot;.
-  </details>
-</histogram>
-
-<histogram name="Autofill.FormEvents.CreditCard.OnNonsecurePage"
-    enum="AutofillFormEvent">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Autofill form events for credit card forms on nonsecure pages. These are
-    recorded when the user interacts with a form requesting a credit card.
-  </summary>
-  <details>
-    Important caveat about submission metrics: - Submission using autofill data
-    is determined by simply evaluating if there was a fill operation in this
-    page. So, if the user filled with local data, completed erased or modified
-    the data after and then submitted, we would only emit one &quot;Submitted
-    with server suggestion filled (once)&quot;; - The submission segmentation
-    works by checking what kind of data was last filled for this type of form in
-    the page load. So, if a user initially filled with local data and after that
-    filled with server, we will only emit &quot;Submitted with server suggestion
-    filled (once)&quot;.
-  </details>
-</histogram>
-
-<histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState">
-  <owner>sebsg@chromium.org</owner>
-  <summary>The autofill state related to a submitted form.</summary>
-</histogram>
-
-<histogram name="Autofill.IcuCollatorCreationSuccess" enum="BooleanSuccess">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    Tracks whether Autofill was able to create the ICU collator successfully.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Tracks whether Autofill is enabled on page load for a page containing forms.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled">
-  <owner>isherman@chromium.org</owner>
-  <summary>Tracks whether Autofill is enabled when Chrome launches.</summary>
-</histogram>
-
-<histogram name="Autofill.KeyboardAccessoryButtonsIOS"
-    enum="AutofillKeyboardAccessoryButtonsIOS">
-  <owner>bondd@chromium.org</owner>
-  <summary>
-    [iOS] Measures the frequency of button presses on the iOS Autofill keyboard
-    accessory.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook" enum="AutofillMacAddressBook">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    When Chrome tries to access the user's Address Book, OSX presents a blocking
-    dialog which disrupts the user experience. A new Chrome feature has been
-    introduced wherein Chrome only shows this blocking dialog if the user
-    explicitly asked Chrome to access the user's Address Book. If a form's field
-    looks like it might support Autofill suggestions from the user's Address
-    Book and there are no other suggestions, Chrome shows an Autofill entry that
-    prompts the user to give Chrome access to the user's Address Book. This
-    histogram tracks the frequency that this Autofill entry is presented, and
-    the frequency that this Autofill entry is selected.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.AcceptedSuggestionIsFromAddressBook"
-    enum="BooleanFromAddressBook">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This metric is emitted each time the user accepts an Autofill suggestion. It
-    records whether the result is from the Address Book.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.AccessTime" units="ms">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time spent accessing the OSX Address Book the first time after
-    Chrome was launched. If this time is larger than ~100ms, this it is likely
-    that the user was shown a blocking, modal dialog.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.ContainedMeCard"
-    enum="BooleanContainedMeCard">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    After a Chrome is given access to the Mac Address Book, whether the Address
-    Book contained a Me card.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.MeCard.HadAddress"
-    enum="BooleanHadAddress">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    When Chrome is given access to the Me Card of the Address Book, whether the
-    card has an address that contained a street number and either a city or zip
-    code.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.MeCard.HadEmail"
-    enum="BooleanHadEmail">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    When Chrome is given access to the Me Card of the Address Book, whether the
-    card has an email.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.MeCard.HadName" enum="BooleanHadName">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    When Chrome is given access to the Me Card of the Address Book, whether the
-    card has a name.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.MeCard.HadPhoneNumber"
-    enum="BooleanHadPhoneNumber">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    When Chrome is given access to the Me Card of the Address Book, whether the
-    card has a phone number.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.MacAddressBook.NumShowsBeforeSelected">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The number of times that the access Address Book prompt has been shown when
-    the user selects the prompt.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"
-    units="fields">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of autofilled fields that were subsequently edited prior to the
-    form being submitted.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.NumberOfProfilesConsideredForDedupe" units="profiles">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of Autofill profiles that have been considered for deduplication.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.NumberOfProfilesRemovedDuringDedupe" units="profiles">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of Autofill profiles that have been removed during deduplication.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.PasswordFormQueryVolume"
-    enum="PasswordFormQueryVolume">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>dvadym@chromium.org</owner>
-  <owner>gcasto@chromium.org</owner>
-  <summary>
-    Tracks the increased load on the Autofill server if the restriction on
-    querying for password forms with fewer than 3 fields were omitted.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.PayloadCompressionRatio" units="%">
-  <obsolete>
-    Deprecated as of 1/2016, autofill payload compression was removed.
-  </obsolete>
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    Compression ratio of the query and upload payload that are sent to the
-    Autofill server. The payload is compressed using gzip.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.ProfileActionOnFormSubmitted"
-    enum="AutofillProfileAction">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The profile action that took place when a form was submitted.
-  </summary>
-</histogram>
-
-<histogram name="AutoFill.ProfileCount">
-  <obsolete>
-    Deprecated as of 3/2011, replaced by Autofill.StoredProfileCount.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The number of Autofill address profiles a user has.</summary>
-</histogram>
-
-<histogram name="AutoFill.Quality" enum="AutofillQuality">
-  <obsolete>
-    Deprecated as of 3/2011, replaced by Autofill.Quality.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The quality of the AutoFill implementation.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality" enum="AutofillQuality">
-  <obsolete>
-    Deprecated as of 2/2014 (M35), replaced by Autofill.UserHappiness.
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>The quality of the Autofill implementation.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality">
-  <owner>isherman@chromium.org</owner>
-  <summary>The quality of Autofill's heuristic field type detection.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.HeuristicType.ByFieldType"
-    enum="AutofillTypeQualityByFieldType">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The quality of Autofill's heuristic field type detection, broken down by the
-    specific field type.  Fields with multiple possible types (based on the
-    stored Autofill data) are logged as having ambiguous type.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality">
-  <owner>isherman@chromium.org</owner>
-  <summary>The overall quality of the Autofill field type predictions.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.PredictedType.ByFieldType"
-    enum="AutofillTypeQualityByFieldType">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The overall quality of the Autofill field type predictions, broken down by
-    the specific field type.  Fields with multiple possible types (based on the
-    stored Autofill data) are logged as having ambiguous type.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality">
-  <owner>isherman@chromium.org</owner>
-  <summary>The quality of the Autofill server's field type detection.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.ServerType.ByFieldType"
-    enum="AutofillTypeQualityByFieldType">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The quality of the Autofill server's field type detection, broken down by
-    the specific field type.  Fields with multiple possible types (based on the
-    stored Autofill data) are logged as having ambiguous type.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.QueriedCreditCardFormIsSecure" enum="BooleanSecure">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    For credit card forms that are queried for Autofill, a ratio of how many are
-    within secure contexts (which includes mixed passive content).
-  </summary>
-</histogram>
-
-<histogram name="Autofill.SaveCreditCardPrompt"
-    enum="AutofillSaveCreditCardPrompt">
-  <owner>jdonnelly@chromium.org</owner>
-  <summary>
-    The relative frequency with which users accept or deny the Autofill save
-    credit card prompt.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.ScanCreditCard.Completed" enum="BooleanCompleted">
-  <owner>rouslan@chromium.org</owner>
-  <summary>Whether a credit card scan was completed or cancelled.</summary>
-</histogram>
-
-<histogram name="Autofill.ScanCreditCard.Duration" units="ms">
-  <owner>rouslan@chromium.org</owner>
-  <summary>How long a credit card took to scan.</summary>
-</histogram>
-
-<histogram name="Autofill.ScanCreditCardPrompt"
-    enum="AutofillScanCreditCardPrompt">
-  <owner>estade@chromium.org</owner>
-  <summary>Usage of the &quot;Scan card&quot; control item.</summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId">
-  <obsolete>
-    Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query.
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The experiment ID received in response to an Autofill server query.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId">
-  <obsolete>
-    Deprecated as of 2/2014 (M35).
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The experiment ID received in response to an Autofill server query.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId.Upload"
-    enum="AutofillExperimentId">
-  <obsolete>
-    Deprecated as of 2/2014 (M35).
-  </obsolete>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The experiment ID received at the time of an Autofill upload.
-  </summary>
-</histogram>
-
-<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult">
-  <obsolete>
-    Deprecated as of 3/2011, replaced by Autofill.ServerQueryResponse.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The usefulness of AutoFill server information.</summary>
-</histogram>
-
-<histogram name="Autofill.ServerQueryResponse" enum="AutofillQueryResult">
-  <owner>isherman@chromium.org</owner>
-  <summary>The usefulness of Autofill server information.</summary>
-</histogram>
-
-<histogram name="Autofill.ServerResponseHasDataForForm"
-    enum="BooleanHadPredictions">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    Tracks whether Autofill server had at least some prediction data for a given
-    form at query response time.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.StoredLocalCreditCardCount" units="cards">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of local credit cards a user has stored, measured at Chrome
-    profile launch time.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.StoredProfileCount">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The number of Autofill addresses a user has stored, measured at launch time.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.StoredProfileCountAtAutofillableFormSubmission">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of Autofill addresses a user has stored, measured when an
-    autofillable form is submitted.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.StoredServerCreditCardCount" units="cards">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The number of server credit cards a user has stored, measured at Chrome
-    profile launch time.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.SuggestionAcceptedIndex" units="position">
-  <owner>mathp@chromium.org</owner>
-  <summary>The index of the accepted Autofill suggestion in the popup.</summary>
-</histogram>
-
-<histogram name="Autofill.SuggestionAcceptedIndex.Autocomplete"
-    units="position">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The index of the accepted Autocomplete suggestion in the popup.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.Timing.DetermineHeuristicTypes" units="ms">
-  <owner>kenjitoyama@chromium.org</owner>
-  <summary>
-    Number of milliseconds passed between the start and end of
-    FormStructure::DetermineHeuristicTypes().
-  </summary>
-</histogram>
-
-<histogram name="Autofill.Timing.ParseForm" units="ms">
-  <owner>kenjitoyama@chromium.org</owner>
-  <summary>
-    Number of milliseconds passed between the start and end of parsing a single
-    form.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.Duration" units="ms">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Duration of the interaction with the UnmaskPrompt since it was shown until
-    it was closed. This prompt is triggered when a user selects a masked card in
-    an autofill dropdown.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.Events" enum="AutofillUnmaskPromptEvent">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Events tracking the usage of the unmasking prompt. This prompt is triggered
-    when a user selects a masked card in a autofill dropdown.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.GetRealPanDuration" units="ms">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Duration of the GetRealPan API call. This API call is triggered by the
-    unmasking prompt when the user types information to verify their ownership
-    of the card being fetched.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.GetRealPanResult"
-    enum="AutofillGetRealPanResult">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Tracks the result of the GetRealPan API call. This API call is triggered by
-    the unmasking prompt when the user types information to verify their
-    ownership of the card being fetched.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.TimeBeforeAbandonUnmasking" units="ms">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Time the user waited before abandoning an unmasking operation. In such a
-    scenario, the user is cancelling a pending unmasking operation (possibly
-    because it is taking too long).  The time measured here corresponds to the
-    time between the user clicking the &quot;Verify&quot; button and then
-    clicking &quot;Cancel&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UnmaskPrompt.UnmaskingDuration" units="ms">
-  <owner>waltercacau@chromium.org</owner>
-  <summary>
-    Duration between the user clicking the Verify button within the unmasking
-    prompt until we get a response back from the server. This prompt is
-    triggered when a user selects a masked card in an autofill dropdown.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.UserHappiness" enum="AutofillUserHappiness">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Measures the frequency of various events in the Autofill user interaction
-    flow.  By comparing frequencies, we can compute several interesting
-    &quot;user happiness&quot; metrics.
-  </summary>
-</histogram>
-
-<histogram name="Autofill.WalletAddressConversionType"
-    enum="AutofillWalletAddressConversionType">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Tracks how the different wallet addresses are converted to local autofill
-    profiles.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.BackgroundApplicationsCount">
-  <owner>atwilson@chromium.org</owner>
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The number of background applications (extensions) for a profile that were
-    loaded after the profile was registered with the BackgroundModeManager.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.BackgroundModeEnabledPrefChanged"
-    enum="BooleanEnabled">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Logged if BackgroundModeManager is running and listening for pref changes,
-    and the pref does indeed change. The new value is logged.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.MenuItemClick" enum="BackgroundModeMenuItem">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Logged when an item in the system tray icon menu is clicked.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.OnStartup.AutoLaunchState"
-    enum="AutoLaunchState">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged during BackgroundModeManager's initialization. Indicates the
-    AutoLaunchState the current browser process was launched in.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.OnStartup.IsBackgroundModePrefEnabled"
-    enum="BooleanEnabled">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged during BackgroundModeManager's initialization. Indicates the state of
-    the kBackgroundModeEnabled pref on startup.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundMode.TimeBeforeOptimizedRestart" units="ms">
-  <owner>dgn@chromium.org</owner>
-  <summary>
-    The duration of a session before the browser got restarted in the background
-    by the BackgroundOptimizer to purge the memory.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.BatchSize">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the number of sync events which were fired in a batch. A batch is
-    defined as the set of sync events dispatched at the same time by the
-    BackgroundSyncManager. One-shots usually run individually (a batch of one),
-    unless the device was offline and multiple are waiting for the device to go
-    back online.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.OneShotResult" enum="BooleanSuccess">
-  <obsolete>
-    As of 10/2015 this has been replaced by
-    BackgroundSync.Event.OneShotResultPattern.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>Records whether a one-shot sync event succeeded or failed.</summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.OneShotResultPattern"
-    enum="BackgroundSyncResultPattern">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records whether a periodic sync event succeeded or failed and whether the
-    sync event finished in the foreground or background.
-  </summary>
-  <details>
-    A sync event finished in the foreground if the associated Service Worker
-    Registration has a client at the time that the event finished.
-  </details>
-</histogram>
-
-<histogram name="BackgroundSync.Event.OneShotStartedInForeground"
-    enum="BooleanInForeground">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records whether a one-shot sync started firing in the foreground or
-    background. Called shortly before the event is fired.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.PeriodicResult" enum="BooleanSuccess">
-  <obsolete>
-    As of 10/2015 this has been replaced by
-    BackgroundSync.Event.PeriodicResultPattern.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>Records whether a periodic sync event succeeded or failed.</summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.PeriodicResultPattern"
-    enum="BackgroundSyncResultPattern">
-  <obsolete>
-    Stopped recording as of 1/2016.
-  </obsolete>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records whether a one-shot sync event succeeded or failed and whether the
-    sync event finished in the foreground or background.
-  </summary>
-  <details>
-    A sync event finished in the foreground if the associated Service Worker
-    Registration has a client at the time that the event finished.
-  </details>
-</histogram>
-
-<histogram name="BackgroundSync.Event.PeriodicStartedInForeground"
-    enum="BooleanInForeground">
-  <obsolete>
-    Stopped recording as of 1/2016.
-  </obsolete>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records whether a periodic sync event started firing in the foreground or
-    background. Called shortly before the event is fired.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Event.Time" units="ms">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Time taken to execute a batch of sync events. A batch is defined as the set
-    of sync events dispatched at the same time by the BackgroundSyncManager.
-    Periodic syncs often run in a batch. One-shots usually run individually (a
-    batch of one), unless the device was offline and multiple are waiting for
-    the device to go back online.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.LaunchTask.CancelSuccess" enum="BooleanSuccess">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to cancel a future browser launch using the
-    GCM Network Manager on Android.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.LaunchTask.PlayServicesAvailable"
-    enum="Boolean">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records whether Google Play Services is available to the Background Sync
-    system on Android, for scheduling future sync events when the browser is not
-    running. This will be logged at most once per run.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.LaunchTask.ScheduleSuccess"
-    enum="BooleanSuccess">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to schedule a future browser launch using
-    the GCM Network Manager on Android.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.NetworkObserver.HasPermission" enum="Boolean">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records whether the browser has sufficient permissions to create a
-    BackgroundSyncNetworkObserver object on Android, at the point when it tries
-    to create it. This should never be false, but is being tracked in order to
-    help resolve crbug.com/545473.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Registration.OneShot"
-    enum="BackgroundSyncStatus">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to register a one-shot sync.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Registration.OneShot.CouldFire"
-    enum="BooleanCouldFireImmediately">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to register a one-shot sync in a situation
-    where the sync could fire immediately.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Registration.OneShot.IsDuplicate"
-    enum="BooleanRegistrationIsDuplicate">
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records whether a one-shot sync registration exactly duplicates an existing
-    registered sync.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Registration.Periodic"
-    enum="BackgroundSyncStatus">
-  <obsolete>
-    Stopped recording as of 1/2016.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to register a periodic sync.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Registration.Periodic.IsDuplicate"
-    enum="BooleanRegistrationIsDuplicate">
-  <obsolete>
-    Stopped recording as of 1/2016.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records whether a periodic sync registration exactly duplicates an existing
-    registered sync.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Unregistration.OneShot"
-    enum="BackgroundSyncStatus">
-  <obsolete>
-    Stopped recording as of 2/2016.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to unregister a one-shot sync.
-  </summary>
-</histogram>
-
-<histogram name="BackgroundSync.Unregistration.Periodic"
-    enum="BackgroundSyncStatus">
-  <obsolete>
-    Stopped recording as of 1/2016.
-  </obsolete>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Records the result of attempting to unregister a periodic sync.
-  </summary>
-</histogram>
-
-<histogram name="BatteryStatus.NumberBatteriesLinux"
-    enum="BatteryStatusNumberBatteries">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Number of batteries reported by the UPower service on Linux at the start of
-    the Battery Status API.
-  </summary>
-</histogram>
-
-<histogram name="BatteryStatus.NumberBatteriesMac"
-    enum="BatteryStatusNumberBatteries">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Number of internal batteries reported by MacOS at the start of the Battery
-    Status API.
-  </summary>
-</histogram>
-
-<histogram name="BatteryStatus.NumberBatteriesWin"
-    enum="BatteryStatusNumberBatteriesWin">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Number of batteries reported by Windows at the start of the Battery Status
-    API.
-  </summary>
-</histogram>
-
-<histogram name="BatteryStatus.StartAndroid" enum="BooleanSuccess">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Battery Status API was successfully started up on Android.
-  </summary>
-</histogram>
-
-<histogram name="Blacklist.Blocked" enum="DllHash">
-  <owner>csharp@chromium.org</owner>
-  <summary>
-    Records the name hashes of all the dlls that are blocked from the browser
-    process.
-  </summary>
-</histogram>
-
-<histogram name="Blacklist.PatchedInRenderer" enum="BooleanHit">
-  <obsolete>
-    Removed at 2015 July.
-  </obsolete>
-  <owner>csharp@chromium.org</owner>
-  <summary>
-    Counts the number of times a renderer process is started with the browser
-    blacklist patch. This should never be hit.
-  </summary>
-</histogram>
-
-<histogram name="Blacklist.RetryAttempts.Success">
-  <owner>csharp@chromium.org</owner>
-  <owner>krstnmnlsn@chromium.org</owner>
-  <summary>
-    Records the number of attempts needed before the blacklist is properly set
-    up. This is logged immediately after a successful setup.
-  </summary>
-</histogram>
-
-<histogram name="Blacklist.Setup" enum="BlacklistSetup">
-  <owner>csharp@chromium.org</owner>
-  <summary>
-    Records the successes and failures when running the browser blacklist setup
-    code. Used to determine if the blacklist is working as intended during
-    startup (since the blacklist runs before crash reporting is set up). This
-    only occurs on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Blimp.Compositor.CommitSizeKb" units="KB">
-  <owner>shaktisahu@chromium.org</owner>
-  <summary>
-    Records the size of the uncompressed commit messages received by Blimp
-    compositor.
-  </summary>
-</histogram>
-
-<histogram name="Blimp.Connected" enum="BooleanConnected">
-  <owner>shaktisahu@chromium.org</owner>
-  <summary>
-    Records whether connection attempt to the Blimp engine was successful.
-  </summary>
-</histogram>
-
-<histogram name="Blimp.Supported" enum="BooleanSupported">
-  <owner>shaktisahu@chromium.org</owner>
-  <summary>Records whether Blimp is supported.</summary>
-</histogram>
-
-<histogram name="Blimp.Tab.Visible" enum="BooleanVisible">
-  <owner>shaktisahu@chromium.org</owner>
-  <summary>Records whenever a Blimp tab toggles visibility.</summary>
-</histogram>
-
-<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds">
-  <owner>peria@chromium.org</owner>
-  <summary>
-    Time spent initializing WindowProxy during a page loading in main windows.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Binding.InitializeNonMainWindowProxy"
-    units="microseconds">
-  <owner>peria@chromium.org</owner>
-  <summary>
-    Time spent initializing WindowProxy during a page loading in non-main
-    windows, e.g. iframe.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds">
-  <obsolete>
-    Deprecated as of 10/2016.  This metric was split into two metrics depending
-    if it figures time for main windows.
-  </obsolete>
-  <owner>peria@chromium.org</owner>
-  <summary>Time spent initializing WindowProxy during a page loading.</summary>
-</histogram>
-
-<histogram name="Blink.BudgetAPI.QueryBudget" units="budget">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    Whenever the Budget API framework receives a query for the current budget,
-    this records the total budget available to the origin, which is an internal
-    Chrome value for the amount of background processing an origin can do
-    without visibly alerting the user. Scale for the budget is 0 to 100. Care
-    should be taken when drawing conclusions from this metric, as budget is
-    based on both engagement and usage, so could vary significantly based on
-    user behaviour and origin.
-  </summary>
-</histogram>
-
-<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    Whenever the Budget API framework receives a request to reserve budget for a
-    future background operation, this records whether the reserve request
-    succeeded or not.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Canvas.DrawImage" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <summary>Time spent on 2D canvas drawImage API call.</summary>
-</histogram>
-
-<histogram name="Blink.Canvas.GetImageData" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <summary>Time spent on 2D canvas getImageData API call.</summary>
-</histogram>
-
-<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <owner>xidachen@chromium.org</owner>
-  <summary>Wall clock durations of OffscreenCanvas.commit() calls.</summary>
-</histogram>
-
-<histogram name="Blink.Canvas.PutImageData" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <summary>Time spent on 2D canvas putImageData API call.</summary>
-</histogram>
-
-<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <owner>xlai@chromium.org</owner>
-  <summary>
-    This metric measures the total time spent on encoding all the rows of an
-    image (jpeg or png), as part of a canvas.toBlob API call. Encoding occurs
-    during one or more idle periods on the main thread.
-
-    This metric is useful in helping us adjust the IdleTaskCompleteTimeoutDelay
-    in canvas.toBlob. When the encoding idle task is delayed for longer than
-    IdleTaskCompleteTimeoutDelay, the browser will switch to a non-idle task to
-    force encoding to happen on the main thread.
-
-    In addition, metric values from OffscreenCanvas.convertToBlob API call are
-    also gathered into this histogram, because the logic flow is exactly the
-    same as canvas.toBlob. It's worth to note that the values can come from idle
-    tasks on either main or worker thread.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Canvas.ToBlob.IdleTaskStatus" enum="IdleTaskStatus">
-  <owner>junov@chromium.org</owner>
-  <owner>xlai@chromium.org</owner>
-  <summary>
-    Records the status of the idle task when finishing a toBlob call.
-
-    In addition, metric values from OffscreenCanvas.convertToBlob API call are
-    also gathered into this histogram, because the logic flow is exactly the
-    same as canvas.toBlob. It's worth to note that the values can come from idle
-    tasks on either main or worker thread.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"
-    units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <owner>xlai@chromium.org</owner>
-  <summary>
-    This metric measures the time spent from initiating image encoding (jpeg or
-    png) on idle task to the actual execution time of initiation, as part of a
-    canvas.toBlob API call.
-
-    This metric is useful in helping us adjust the IdleTaskStartTimeoutDelay in
-    canvas.toBlob. When the initialization idle task is delayed for longer than
-    IdleTaskStartTimeoutDelay, the browser will switch to a non-idle task to
-    force initialization and encoding to occur on the main thread.
-
-    In addition, metric values from OffscreenCanvas.convertToBlob API call are
-    also gathered into this histogram, because the logic flow is exactly the
-    same as canvas.toBlob. It's worth to note that the values can come from idle
-    tasks on either main or worker thread.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <owner>xlai@chromium.org</owner>
-  <summary>
-    Time spent on 2D canvas toBlob API call.
-
-    In addition, metric values from OffscreenCanvas.convertToBlob API call are
-    also gathered into this histogram, because the logic flow is exactly the
-    same as canvas.toBlob. It's worth to note that the values can come from idle
-    tasks on either main or worker thread.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Canvas.ToDataURL" units="microseconds">
-  <owner>junov@chromium.org</owner>
-  <summary>Time spent on 2D canvas toDataURL API call.</summary>
-</histogram>
-
-<histogram name="Blink.ColorGamut.Destination" enum="Gamut">
-  <owner>hubbe@chromium.org</owner>
-  <summary>Gamut properties of destination color space.</summary>
-</histogram>
-
-<histogram name="Blink.ColorGamut.Source" enum="Gamut">
-  <owner>hubbe@chromium.org</owner>
-  <summary>Gamut properties of image color space.</summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination" enum="Gamma">
-  <owner>msarett@chromium.org</owner>
-  <summary>Gamma properties of destination color space.</summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.ExtractedRawData"
-    enum="ColorSpaceExtractedRawDataResult">
-  <obsolete>
-    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    Whether or not the output color space ICC profile was able to produce raw
-    transfer function tables.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.ICCResult"
-    enum="ICCProfileAnalyzeResult">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The result of analyzing the destiation color space's ICC profile.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.LinearFitError">
-  <obsolete>
-    Linear fit found to be always inaccurate on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The L-infinity error (in 8-bit values) of the numerical approximation of
-    table-based ICC profile transfer functions, when falling back to a linear
-    approximation.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.Matrix"
-    enum="ColorSpaceMatrixResult">
-  <obsolete>
-    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    Whether or not to-XYZD50 matrix was extracted from the output color space
-    ICC profile.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.NonlinearFitConverged"
-    enum="ColorSpaceNonlinearFitConverged">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    Whether or not the nonlinear least squares fit of the table-based ICC
-    profile transfer function for a single channel converged.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.NonlinearFitError">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The L-infinity error (in 8-bit values) of the numerical approximation of
-    table-based ICC profile transfer functions for a single channel, when the
-    nonlinear approximation converged.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.NonlinearFitErrorCombined">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The L-infinity error (in 8-bit values) of the numerical approximation of
-    table-based ICC profile transfer functions for all channels combined, when
-    the nonlinear approximation converged.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.Numerical"
-    enum="ColorSpaceNumericalResult">
-  <obsolete>
-    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    Whether or not the output color space ICC profile has a numerical transfer
-    function.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.OneMinusTMax">
-  <obsolete>
-    TMax found to almost always be 1 on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    One minus the maximum value of table-based ICC profile transfer functions as
-    an 8-bit fixed-point value. This histogram is temporary, to see if we can
-    bake in the assumption that it will almost always be 255.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Destination.TMin">
-  <obsolete>
-    TMin found to almost always be 0 on 2017-02-28.
-  </obsolete>
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The minimum value of table-based ICC profile transfer functions as an 8-bit
-    fixed-point value. This histogram is temporary, to see if we can bake in the
-    assumption that it will almost always be 0.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ColorSpace.Source" enum="Gamma">
-  <owner>ccameron@chromium.org</owner>
-  <summary>Gamma properties of image color space.</summary>
-</histogram>
-
-<histogram name="Blink.Compositing.UpdateTime" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating compositing in the Blink document lifecyce.
-  </summary>
-</histogram>
-
-<histogram name="Blink.DecodedImage.CanvasExpanded"
-    enum="BooleanCanvasExpanded">
-  <obsolete>
-    Deprecated as of 11/29/2016.
-  </obsolete>
-  <owner>ryansturm@chromium.org</owner>
-  <owner>bengr@google.com</owner>
-  <summary>
-    The original canvas dimensions were sufficient to determine image size. This
-    is logged once per image header decode, which happens typically twice per
-    image on the page.
-  </summary>
-</histogram>
-
-<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes">
-  <obsolete>
-    Deprecated as of 11/29/2016.
-  </obsolete>
-  <owner>ryansturm@chromium.org</owner>
-  <owner>bengr@google.com</owner>
-  <summary>
-    How many bytes of the file were read before an image width and height were
-    determined. This is logged once per image header decode, which happens
-    typically twice per image on the page.
-  </summary>
-</histogram>
-
-<histogram name="Blink.DecodedImage.Orientation" enum="DecodedImageOrientation">
-  <owner>rob.buis@samsung.org</owner>
-  <summary>Image orientation inferred during decode.</summary>
-</histogram>
-
-<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels">
-  <obsolete>
-    Deprecated as of 11/29/2016.
-  </obsolete>
-  <owner>ryansturm@chromium.org</owner>
-  <owner>bengr@google.com</owner>
-  <summary>
-    How much the canvas width needed to be expanded as a result of the first
-    frame's width and x-offset being larger than the initial canvas width. This
-    is logged once per image header decode, which happens typically twice per
-    image on the page.
-  </summary>
-</histogram>
-
-<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels">
-  <obsolete>
-    Deprecated as of 11/29/2016.
-  </obsolete>
-  <owner>ryansturm@chromium.org</owner>
-  <owner>bengr@google.com</owner>
-  <summary>
-    How much the canvas height needed to be expanded as a result of the first
-    frame's height and y-offset being larger than the initial canvas height.
-    This is logged once per image header decode, which happens typically twice
-    per image on the page.
-  </summary>
-</histogram>
-
-<histogram name="Blink.DecodedImageType" enum="DecodedImageType">
-  <owner>urvang@chromium.org</owner>
-  <summary>Image codec inferred during decode.</summary>
-</histogram>
-
-<histogram name="Blink.EventListenerDuration.Resize" units="microseconds">
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    Time it takes to execute all the `resize` event listeners on a page when a
-    resize event is fired. Tracked only for the main frame.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Fetch.RequestResourceTime" units="microseconds">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The total microseconds spent in ResourceFetcher::requestResource.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Fonts.HarfBuzzFaceZeroCopyAccess" enum="BooleanSuccess">
-  <owner>drott@chromium.org</owner>
-  <summary>
-    Counts success or failure of attempting to access font tables using the zero
-    copy instantiation method in the HarfBuzz integration layer. This value is
-    only recorded on non-Mac platforms. Reported each time a HarfBuzz face
-    object is created.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Fonts.ShapeCache">
-  <owner>eae@chromium.org</owner>
-  <summary>
-    Total number of entries in all Blink ShapeCache instances. The value is
-    reported each time the FontCache::purge() method is called.
-  </summary>
-</histogram>
-
-<histogram name="Blink.Gesture.Merged" enum="GestureMergeState">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>domenic@google.com</owner>
-  <summary>
-    How many times two user gesture tokens were merged by UserGestureIndicator,
-    and whether each token had an active gesture. One of the new token's
-    gestures, if any, is moved to the old token.
-  </summary>
-</histogram>
-
-<histogram name="Blink.MediaDocument.DownloadButton"
-    enum="MediaDocumentDownloadButtonType">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Records how the download button on the MediaDocument is used.
-  </summary>
-</histogram>
-
-<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay">
-  <obsolete>
-    Deprecated 11/2016 in Issue 666370 with the deprecation of Autoplay
-    experiment.
-  </obsolete>
-  <owner>oysteine@chromium.org</owner>
-  <summary>
-    Records user observation and interaction with Media HTML elements that
-    feature autoplay, either script-controlled or through the attribute.
-  </summary>
-</histogram>
-
-<histogram name="Blink.MemoryCache.RevalidationPolicy"
-    enum="RevalidationPolicy">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    RevalidationPolicy used for non-preloading requests for each resource type.
-    https://crbug.com/579496
-  </summary>
-</histogram>
-
-<histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"
-    enum="RevalidationPolicy">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    RevalidationPolicy used for requests that hit Resource only referenced from
-    MemoryCache for each resource type. https://crbug.com/579496 Requests
-    counted by this are also counted by Blink.MemoryCache.RevalidationPolicy or
-    Blink.MemoryCache.RevalidationPolicy.Preload.
-  </summary>
-</histogram>
-
-<histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"
-    enum="RevalidationPolicy">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    RevalidationPolicy used for preloading requests for each resource type.
-    https://crbug.com/579496
-  </summary>
-</histogram>
-
-<histogram name="Blink.Paint.UpdateTime" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>Time spent updating paint in the Blink document lifecycle.</summary>
-</histogram>
-
-<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating paint invalidation in the Blink document lifecycle. Not
-    available when SlimmingPaintInvalidation or SlimmingPaintV2 is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.PrePaint.UpdateTime" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating paint properties and paint invalidation in the Blink
-    document lifecycle. Available when SlimmingPaintInvalidation or
-    SlimmingPaintV2 is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Blink.RestoredCachedStyleSheet"
-    enum="RestoredCachedStyleSheet">
-  <obsolete>
-    Deprecated 01/2016 and replaced by Blink.RestoredCachedStyleSheet2
-  </obsolete>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    On each link stylesheet tag resolve, record whether a Blink MemoryCached
-    StyleSheetContents was reused.
-  </summary>
-</histogram>
-
-<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus">
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    On each link stylesheet tag resolve, record which cache Blink hit.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ScanPendingActivityDuration" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of time taken to scan pending activities of all V8 wrappers in a
-    worker thread.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects">
-  <obsolete>
-    Used to justify distribution of serialized data in the wild, but unlikely to
-    be useful to track long-term.
-  </obsolete>
-  <owner>platform-architecture-dev@chromium.org</owner>
-  <summary>
-    Number of DOM wrappers serialized as part of an object passed to
-    postMessage, IndexedDB, or another API that serializes script values.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects">
-  <obsolete>
-    Used to justify distribution of serialized data in the wild, but unlikely to
-    be useful to track long-term.
-  </obsolete>
-  <owner>platform-architecture-dev@chromium.org</owner>
-  <summary>
-    Number of JavaScript objects (other than DOM wrappers) serialized as part of
-    an object passed to postMessage, IndexedDB, or another API that serializes
-    script values.
-  </summary>
-</histogram>
-
-<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values">
-  <obsolete>
-    Used to justify distribution of serialized data in the wild, but unlikely to
-    be useful to track long-term.
-  </obsolete>
-  <owner>platform-architecture-dev@chromium.org</owner>
-  <summary>
-    Number of primitive values (numbers, strings, etc.) serialized as part of an
-    object passed to postMessage, IndexedDB, or another API that serializes
-    script values.
-  </summary>
-</histogram>
-
-<histogram name="Blink.SharedBuffer.FailedLock" enum="ResourceType">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    Number of failed SharedBuffer::lock() calls for each resource type.
-    https://crbug.com/603791
-  </summary>
-</histogram>
-
-<histogram name="Blink.SharedBuffer.SuccessfulLock" enum="ResourceType">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    Number of successful SharedBuffer::lock() calls for each resource type.
-    https://crbug.com/603791
-  </summary>
-</histogram>
-
-<histogram name="Blink.SharedBuffer.Unlock" enum="ResourceType">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    Number of SharedBuffer::unlock() calls for each resource type.
-    https://crbug.com/603791
-  </summary>
-</histogram>
-
-<histogram name="Blink.StyleAndLayout.UpdateTime" units="microseconds">
-  <owner>layout-dev@chromium.org</owner>
-  <summary>
-    Time spent updating style and layout in the Blink document lifecycle.
-  </summary>
-</histogram>
-
-<histogram name="Blink.UseCounter.CSSProperties" enum="MappedCSSProperties">
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Records usage of CSS properties used on a page, either statically or
-    dynamically, from the time the page is initialised to when it is closed or
-    navigated away from. Each property is counted at most once per page per
-    view.
-  </summary>
-  <details>
-    The first time a CSS property is parsed on a page, the histogram is updated
-    to increment the counter.  Each histogram bucket corresponds to a CSS
-    property (eg. width, border-radius). The exception is the 'Total pages
-    measured' bucket - this counts the number of pages that CSS properties were
-    counted on.  When a page navigation occurs the page count bucket is
-    incremented and tracking of the set of which properties have been seen is
-    reset.
-
-    These numbers give the percentage of pages that use a CSS property. For
-    example, if the 'border-radius' histogram bucket has a count of 250, and the
-    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
-    that 1000 pages were recorded, and border-radius was used on 25% of those
-    pages.
-
-    Note that CSS properties used inside of SVG images are tracked separately in
-    the Blink.UseCounter.SVGImage.CSSProperties histogram.
-
-    As of M57 this histogram supercedes WebCore.FeatureObserver.CSSProperties.
-  </details>
-</histogram>
-
-<histogram name="Blink.UseCounter.Features" enum="FeatureObserver">
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Count of how many page loads use various features. The PageVisits bucket is
-    incremented for each page load, and the other buckets incremented at most
-    once per PageVisit via the WebCore::UseCounter class.
-  </summary>
-  <details>
-    Note that features used inside of SVG images are tracked separately in the
-    Blink.UseCounter.SVGImage.Features histogram.
-
-    As of M57 this histograms supercedes WebCore.FeatureObserver.
-  </details>
-</histogram>
-
-<histogram name="Blink.UseCounter.SVGImage.CSSProperties"
-    enum="MappedCSSProperties">
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Like Blink.UseCounter.CSSProperties but specifically for the case of CSS
-    properties used inside of an SVG image.
-  </summary>
-  <details>
-    The 'Total pages measured' bucket is incremented each time a new SVG image
-    is created.  Note that the same SVG image can be used across multiple tabs
-    in a single renderer but this counts as a single usage. See
-    http://crbug.com/236262.
-  </details>
-</histogram>
-
-<histogram name="Blink.UseCounter.SVGImage.Features" enum="FeatureObserver">
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Like Blink.UseCounter.Features except specifically for the case of SVG
-    Images.
-  </summary>
-  <details>
-    Count of how many SVG images use various features. The PageVisits bucket is
-    incremented each time a new SVG image is created.  Note that the same SVG
-    image can be used across multiple tabs in a single renderer but this counts
-    as a single usage.  See http://crbug.com/236262.
-  </details>
-</histogram>
-
-<histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230"
-    enum="XMLHttpRequestHeaderValueCategoryInRFC7230">
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    The count of XMLHttpRequest.setRequestHeader() calls where header values are
-    invalid/valid but affected by normalization/valid in RFC 7230.
-    https://crbug.com/455099.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.CollectGarbage" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>Duration of time taken to run Heap::collectGarbage().</summary>
-</histogram>
-
-<histogram name="BlinkGC.CollectionRate" units="%">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The percentage of objects that have been collected by a Blink GC. 0 is
-    passed if there were no objects when a Blink GC started.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.CommittedSize" units="MB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The committed memory size in Blink GC. The value is reported when we see the
-    highest memory usage we've ever seen in the renderer process.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.CompleteSweep" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>Duration of time taken to run ThreadState::completeSweep().</summary>
-</histogram>
-
-<histogram name="BlinkGC.GCReason" enum="GCReason">
-  <owner>haraken@chromium.org</owner>
-  <summary>A type of Blink GC.</summary>
-</histogram>
-
-<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The size of allocated objects just after Blink GC is triggered.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The size of allocated objects just before Blink GC is triggered.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.ObjectSizeFreedByHeapCompaction" units="KB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The total size of objects freed by BlinkGC's heap compaction.   This is
-    recorded once following each compaction.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.PerformPendingSweep" units="ms">
-  <obsolete>
-    Removed at 2014 Jan.
-  </obsolete>
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of time taken to run ThreadState::performPendingSweep().
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of time taken to run global weak processing of Blink GC.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForHeapCompaction" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of wall time taken to run BlinkGC's heap compaction.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of time taken to run ThreadState::invokePreFinalizers().
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForStoppingThreads" units="ms">
-  <obsolete>
-    As of 02/2017, the code to stop Blink threads was removed.
-  </obsolete>
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    Duration of time taken to stop all Blink threads before starting a GC.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForSweepingAllObjects" units="ms">
-  <owner>haraken@chromium.org</owner>
-  <summary>Accumulated time taken to sweep all objects.</summary>
-</histogram>
-
-<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms">
-  <obsolete>
-    As of 02/2017, the code for thread-local weak processing was removed.
-  </obsolete>
-  <owner>haraken@chromium.org</owner>
-  <summary>Duration of time taken to run thread-local weak processing.</summary>
-</histogram>
-
-<histogram name="BlinkGC.TotalAllocatedSpace" units="KB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The total size of allocated space in OS when a Blink GC is triggered.
-  </summary>
-</histogram>
-
-<histogram name="BlinkGC.TotalObjectSpace" units="KB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The total size of object space in all threads when a Blink GC is triggered.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Android.GATTConnection.Disconnected.Result"
-    enum="AndroidGATTConnectionErrorCodes">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Disconnected GATT connection status codes. Used to better understand errors
-    seen in Android.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Android.GATTConnection.Failure.Result"
-    enum="AndroidGATTConnectionErrorCodes">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Failed GATT connection error codes. Used to better understand errors seen in
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Android.GATTConnection.Success.Result"
-    enum="AndroidGATTConnectionErrorCodes">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Successful GATT connection result codes. Used to better understand Android
-    results.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.ConnectedDeviceCount" units="devices">
-  <owner>keybuk@chromium.org</owner>
-  <summary>
-    Counts the number of simulataneously connected Bluetooth devices. Used to
-    direct testing efforts, and by our UI team to determine appropriate UI
-    sizes.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.DiscoverySession.Start.Outcome"
-    enum="BluetoothDiscoveryOutcomes">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of calls to BluetoothAdapter::StartDiscoverySession.
-    Used to prioritize efforts to fix failures of this function.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.DiscoverySession.Stop.Outcome"
-    enum="BluetoothDiscoveryOutcomes">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of calls to BluetoothDiscoverySession::Stop. Used to
-    prioritize efforts to fix failures of this function.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.GATTErrors" enum="BluetoothGATTErrors">
-  <obsolete>
-    As of 08/2015 this has been replaced by
-    Bluetooth.Web.Characteristic.ReadValue and
-    Bluetooth.Web.Characteristic.WriteValue.
-  </obsolete>
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how many times each GATT Error has occured. The results will be used
-    to determine how common this errors are and if we need to provide better
-    error messages to the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.PairingMethod" enum="BluetoothPairingMethod">
-  <owner>keybuk@chromium.org</owner>
-  <summary>
-    Records the method used to pair each Bluetooth Device. Used to direct our
-    testing efforts.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.PairingResult" enum="BluetoothPairingResult">
-  <owner>keybuk@chromium.org</owner>
-  <summary>
-    Records the result of pairing each Bluetooth Device. Used to understand
-    whether we are having significant problems with Bluetooth pairing and seeing
-    errors more commonly than we should.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.RequestDevice.Outcome"
-    enum="WebBluetoothRequestDeviceOutcome">
-  <obsolete>
-    Deprecated 08/2015 and replaced by Bluetooth.Web.RequestDevice.Outcome.
-  </obsolete>
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of a navigator.bluetooth.requestDevice() call. Used to
-    understand what errors developers are getting so we can target efforts
-    toward the most common ones. Multiple outcomes may result for a given
-    RequestDevice, such as rescan multiple times and then select a device.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Android" enum="AndroidGATTStatusResult">
-<!-- Name completed by histogram_suffixes name="AndroidGATTEvents" -->
-
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>'status' values returned by Android GATT event.</summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Blacklist.ParsedNonEmptyString"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of 11/2016, replaced by
-    Bluetooth.Web.Blocklist.ParsedNonEmptyString.
-  </obsolete>
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of BluetoothBlacklist::Add parsing a non-empty string.
-    These strings will be updated dynamically by a server, and this histogram
-    provides feedback that parsing is functioning correctly on clients.
-
-    False values are BAD, a blacklist is failing to be applied correctly.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Blocklist.ParsedNonEmptyString"
-    enum="BooleanSuccess">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of BluetoothBlocklist::Add parsing a non-empty string.
-    These strings will be updated dynamically by a server, and this histogram
-    provides feedback that parsing is functioning correctly on clients.
-
-    False values are BAD, a blocklist is failing to be applied correctly.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Characteristic.ReadValue.Outcome"
-    enum="WebBluetoothGATTOperationOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to characteristic.readValue(). Used to know
-    what types of errors users are seeing. The results will be used to determine
-    how common these errors are and if we need to provide better error messages
-    to the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Characteristic.StartNotifications.Outcome"
-    enum="WebBluetoothGATTOperationOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to characteristic.startNofications(). Used to
-    know what types of errors users are seeing. The results will be used to
-    determine how common these errors are and if we need to provide better error
-    messages to the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Characteristic.WriteValue.Outcome"
-    enum="WebBluetoothGATTOperationOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to characteristic.writeValue(). Used to know
-    what types of errors users are seeing. The results will be used to determine
-    how common these errors are and if we need to provide better error messages
-    to the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.ChooserInteraction" enum="BooleanInvalid">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Counts how many times users interact with a regular chooser vs. an invalid
-    chooser. (A chooser is invalid when it's event handler becomes null.)
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.ConnectGATT.Outcome"
-    enum="WebBluetoothConnectGATTOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of a device.gatt.connect() call. Used to understand what
-    errors developers are getting so we can target efforts toward the most
-    common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.ConnectGATT.TimeFailed" units="ms">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how long it takes for a connection attempt to fail. Use to let
-    developers know how to better wait for and handle connection errors.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.ConnectGATT.TimeSuccess" units="ms">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how long it takes for a device to successfully connect. Use to let
-    developers know how long it should take to connect to a BLE device.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Descriptor.ReadValue.Outcome"
-    enum="WebBluetoothGATTOperationOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to descriptor.readValue(). Used to know what
-    types of errors users are seeing. The results will be used to determine how
-    common these errors are and if we need to provide better error messages to
-    the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.Descriptor.WriteValue.Outcome"
-    enum="WebBluetoothGATTOperationOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to descriptor.writeValue(). Used to know what
-    types of errors users are seeing. The results will be used to determine how
-    common these errors are and if we need to provide better error messages to
-    the users.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.FunctionCall.Count" enum="WebBluetoothFunction">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Counts the number of times each call to a WebBluetooth function is done.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetCharacteristic.Characteristic"
-    enum="GATTCharacteristicHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the UUIDs used when getting a characteristic. The recorded value is
-    a 31-bit hash of the UUID. Used to know what types of characteristics to
-    target when building libraries that use the Web Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetCharacteristic.Outcome"
-    enum="WebBluetoothGetCharacteristicOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to getCharacteristic(). Used to understand
-    what errors developers are getting so we can target efforts toward the most
-    common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetCharacteristics.Characteristic"
-    enum="GATTCharacteristicHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the UUIDs used when getting characteristics. The recorded value is a
-    31-bit hash of the UUID. Used to know what types of characteristics to
-    target when building libraries that use the Web Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetCharacteristics.Outcome"
-    enum="WebBluetoothGetCharacteristicOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to getCharacteristics(). Used to understand
-    what errors developers are getting so we can target efforts toward the most
-    common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetDescriptor.Descriptor"
-    enum="GATTDescriptorHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the UUIDs used when getting a descriptor. The recorded value is a
-    31-bit hash of the UUID. Used to know what types of descriptors to target
-    when building libraries that use the Web Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetDescriptor.Outcome"
-    enum="WebBluetoothGetDescriptorOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to getDescriptor(). Used to understand what
-    errors developers are getting so we can target efforts toward the most
-    common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetDescriptors.Descriptor"
-    enum="GATTDescriptorHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the UUIDs used when getting descriptors. The recorded value is a
-    31-bit hash of the UUID. Used to know what types of descriptors to target
-    when building libraries that use the Web Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetDescriptors.Outcome"
-    enum="WebBluetoothGetDescriptorOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the outcome of a call to getDescriptors(). Used to understand what
-    errors developers are getting so we can target efforts toward the most
-    common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetPrimaryService.Outcome"
-    enum="WebBluetoothGetPrimaryServiceOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of a GATTServer.getPrimaryService() call. Used to
-    understand what errors developers are getting so we can target efforts
-    toward the most common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetPrimaryService.Services"
-    enum="GATTServiceHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records what GATT Services are used when connected. The record value is a
-    31-bit hash of the Service UUID. This will help us know if we should build
-    an API for specific services rather than a general Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetPrimaryServices.Outcome"
-    enum="WebBluetoothGetPrimaryServiceOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of a GATTServer.getPrimaryServices() call. Used to
-    understand what errors developers are getting so we can target efforts
-    toward the most common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.GetPrimaryServices.Services"
-    enum="GATTServiceHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records what GATT Services are used when connected. The record value is a
-    31-bit hash of the Service UUID. This will help us know if we should build
-    an API for specific services rather than a general Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.Filters.Count" units="filters">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how many filters are used when scanning. These results will help us
-    better understand the uses of the API and make changes according to
-    developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.Filters.Services"
-    enum="GATTServiceHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records a 31-bit hash of the GATT Service UUIDs used when scanning. This
-    will help us know if we should build an API for specific services rather
-    than a general Bluetooth API.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.FilterSize" units="services">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how many services are used in a filter. These results will help us
-    better understand the uses of the API and make changes according to
-    developers' behavior.
-  </summary>
-</histogram>
-
-<histogram
-    name="Bluetooth.Web.RequestDevice.NumOfDevicesInChooserWhenNotAcceptingAllDevices"
-    units="devices">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    In the case of not accepting all devices, records the number of devices that
-    are in the chooser when a device is paired.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Count"
-    units="filters">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how many optional services are used when scanning. These results
-    will help us better understand the uses of the API and make changes
-    according to developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Services"
-    enum="GATTServiceHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records what optional services are used. The recorded value is a 31-bit hash
-    of the Service UUID. These results will help us better understand the uses
-    of the API and make changes according to developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.Options.AcceptAllDevices"
-    enum="Boolean">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the value of 'acceptAllDevices' in RequestDeviceOptions. These
-    results will help us better understand the uses of the API and make changes
-    according to developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.Outcome"
-    enum="WebBluetoothRequestDeviceOutcome">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records the result of a navigator.bluetooth.requestDevice() call. Used to
-    understand what errors developers are getting so we can target efforts
-    toward the most common ones.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrength" units="dBm">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Raw RSSI values provided to chooser, before processing them for display in
-    the Web Bluetooth chooser.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrengthLevel"
-    enum="WebBluetoothRSSISignalStrengthLevel">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Displayed RSSI levels, after processing and as displayed to users in the Web
-    Bluetooth chooser.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.ScanningDuration" units="ms">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Records the duration scanning for devices is run, terminated by events such
-    as the chooser being closed with a selected device, cancelled, or the scan
-    duration timing out.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Count"
-    units="services">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records how many services are used when scanning. This results will help us
-    better understand the uses of the API and make changes according to
-    developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Services"
-    enum="GATTServiceHash">
-  <owner>jyasskin@chromium.org</owner>
-  <owner>ortuno@chromium.org</owner>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Records what services are used from either required or optional sets. The
-    recorded value is a 31-bit hash of the Service UUID. These results will help
-    us better understand the uses of the API and make changes according to
-    developers' behavior.
-  </summary>
-</histogram>
-
-<histogram name="BookmarkManager.NumDragged" units="bookmarks">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    Logs the number of bookmarks that were dragged simultaneously by a user.
-  </summary>
-</histogram>
-
-<histogram name="BookmarkManager.ResultsRenderedTime" units="ms">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    Records the time taken to load the bookmarks Web UI and render. This is
-    roughly equivalent to 'time to first meaningful paint' for the bookmark
-    manager.
-  </summary>
-</histogram>
-
-<histogram name="Bookmarks.BookmarksInFolder" units="bookmarks">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    Logs the number of bookmark items inside a folder every time a folder is
-    opened inside the bookmark manager.
-  </summary>
-</histogram>
-
-<histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint">
-  <owner>ianwen@chromium.org</owner>
-  <summary>How users add a new bookmark.</summary>
-</histogram>
-
-<histogram name="Bookmarks.LaunchDepth">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Logs the depth of the bookmark in the bookmark tree hierarchy every time a
-    bookmark is launched. Depth indicates how many levels below a permanent
-    bookmark folder the bookmark was found in (e.g. a bookmark immediately in
-    the bookmark bar has depth 1).
-  </summary>
-</histogram>
-
-<histogram name="Bookmarks.LaunchLocation" enum="BookmarkLaunchLocation">
-  <owner>ianwen@chromium.org</owner>
-  <summary>Logs a UI location from which a bookmark is launched.</summary>
-</histogram>
-
-<histogram name="Bookmarks.OnFaviconsChangedIconURL" enum="BooleanHit">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Logs how frequently BookmarkModel::OnFaviconsChanged() is called with a
-    non-empty |icon_url| to determine whether BookmarkNodes should be cached
-    based on their favicon URLs (e.g. http://www.google.com/favicon.ico) in
-    addition to their page URLs (e.g. http://www.google.com). OnFaviconChanged()
-    is expected to be called less than 10 times per user per day with a
-    non-empty |icon_url|.
-  </summary>
-</histogram>
-
-<histogram name="Bookmarks.OpenAction" enum="BookmarksOpenAction">
-  <obsolete>
-    Deprecated as of 1/2016.
-  </obsolete>
-  <owner>kkimlabs@chromium.org</owner>
-  <summary>
-    Logs how user is opening a bookmark on Android. For example, user can long
-    press and select &quot;Open in a new tab&quot; or &quot;Open in incognito
-    tab&quot;.
-  </summary>
-</histogram>
-
-<histogram name="BrotliFilter.CompressionPercent" units="%">
-  <owner>eustas@chromium.org</owner>
-  <summary>Compressed/Decompressed size ratio.</summary>
-</histogram>
-
-<histogram name="BrotliFilter.ErrorCode" enum="BrotliFilterErrorCode">
-  <owner>eustas@chromium.org</owner>
-  <summary>More detailed failure reason.</summary>
-</histogram>
-
-<histogram name="BrotliFilter.GzipHeaderDetected" enum="BooleanPresent">
-  <owner>eustas@chromium.org</owner>
-  <summary>Indicates whether the gzip-like header was detected.</summary>
-</histogram>
-
-<histogram name="BrotliFilter.Status" enum="BrotliFilterDecodingStatus">
-  <owner>eustas@chromium.org</owner>
-  <summary>The final state of BrotliFilter.</summary>
-</histogram>
-
-<histogram name="BrotliFilter.UsedMemoryKB" units="KiB">
-  <owner>eustas@chromium.org</owner>
-  <summary>Maximal amount of memory allocated by decoder.</summary>
-</histogram>
-
-<histogram name="BrowserDialogs.ExternalProtocol.HandleState"
-    enum="HandleStateType">
-  <owner>ramyasharma@chromium.org</owner>
-  <summary>
-    Whether or not the user checked the option in the external protocol dialog
-    to remember their choice of opening or not opening the specified app.
-    Recorded each time the user interacts with the External Protocol Dialog,
-    when making a decision.
-  </summary>
-</histogram>
-
-<histogram name="BrowserDialogs.ExternalProtocol.RememberCheckbox"
-    enum="BooleanChecked">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Whether or not the user checked the option in the external protocol dialog
-    to remember their choice of opening or not opening the specified app.
-    Recorded each time the user interacts with the External Protocol Dialog
-    (either accepting or cancelling/dismissing).
-  </summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.ChildCrashes" enum="RendererType">
-  <owner>wfh@chromium.org</owner>
-  <summary>Count of renderer process crashes grouped by type.</summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.ChildKills" enum="RendererType">
-  <owner>wfh@chromium.org</owner>
-  <summary>Count of renderer process kills grouped by type.</summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.ChildKills.OOM" enum="RendererType">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Out of BrowserRenderProcessHost.ChildKills, numer of kills due to SIGKILL,
-    which is a strong signal of out of memory on ChromeOS, grouped by renderer
-    type.
-  </summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.ChildLaunchFailureCodes"
-    enum="LaunchErrorCodes">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    The launch error codes for failed renderer process launches.
-  </summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.ChildLaunchFailures"
-    enum="RendererType">
-  <owner>wfh@chromium.org</owner>
-  <summary>Count of renderer process launch failures grouped by type.</summary>
-</histogram>
-
-<histogram name="BrowserRenderProcessHost.DisconnectedAlive"
-    enum="RendererType">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Count of renderer process crashes that we miscounted because we took the
-    exit code too early. Grouped by type.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.Close.Accepted" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was closed because the user accepted it.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.Canceled" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>
-    An open bubble was closed because the user didn't accept it.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.Close.FocusLost" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was closed because of a focus change.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.Forced" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was forced to close.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.FrameDestroyed" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was dismissed because a frame was destroyed.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.FullscreenToggled" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>
-    An open bubble was dismissed because fullscreen was toggled.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.Close.Navigated" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>
-    An open bubble was dismissed because the page was navigated.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.Close.TabDetached" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was closed because a tab was detached.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.TabSwitched" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>An open bubble was closed because a tab was switched.</summary>
-</histogram>
-
-<histogram name="Bubbles.Close.UserDismissed" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>
-    An open bubble was dismissed by the user without making a decission.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.DisplayTime.All" units="ms">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>
-    Log the amount of time any bubble was visible. Only bubbles that are shown
-    will have a visible time.
-  </summary>
-</histogram>
-
-<histogram name="Bubbles.NeverShown" enum="BubbleType">
-  <owner>hcarmona@chromium.org</owner>
-  <summary>A bubble was given to the bubble manager but not shown.</summary>
-</histogram>
-
-<histogram name="Canvas.ContextType" enum="CanvasContextType">
-  <owner>junov@chromium.org</owner>
-  <owner>kbr@chromium.org</owner>
-  <summary>
-    Records the context type names used to create canvas rendering contexts.
-  </summary>
-</histogram>
-
-<histogram name="Canvas.DisplayListFallbackReason"
-    enum="CanvasDisplayListFallbackReason">
-  <owner>junov@chromium.org</owner>
-  <summary>
-    The reasons why a canvas initially set to display list mode had to fall back
-    to direct rasterization mode.
-  </summary>
-</histogram>
-
-<histogram name="Canvas.GPUAccelerated2DCanvasDisableDeferralReason"
-    enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason">
-  <owner>junov@chromium.org</owner>
-  <summary>
-    The reasons why a GPU accelerated canvas stopped deferring its rendering
-    operations.
-  </summary>
-</histogram>
-
-<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent">
-  <owner>junov@chromium.org</owner>
-  <summary>
-    Records the occurrence of events related to 2D canvas GPU resource
-    hibernation.
-  </summary>
-</histogram>
-
-<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType">
-  <owner>xidachen@chromium.org</owner>
-  <owner>junov@chromium.org</owner>
-  <summary>
-    The type of code path that OffscreenCanvas's commit API goes through.
-  </summary>
-</histogram>
-
-<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType">
-  <owner>xlai@chromium.org</owner>
-  <summary>
-    Records the occurence of image file formats passed into toDataURL and toBlob
-    functions in canvas.
-  </summary>
-</histogram>
-
-<histogram name="CAPSUpdater.Step" enum="CAPSUpdaterStep">
-  <obsolete>
-    Deprecated 08/2016 with removal of Chrome Crash Service component.
-  </obsolete>
-  <owner>scottmg@chromium.org</owner>
-  <summary>
-    Tracks the component updater steps for the Chrome Crash Service.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.DetectResult" enum="CaptivePortalDetectResult">
-  <owner>meacer@chromium.org</owner>
-  <summary>Records the result of a captive portal probe.</summary>
-</histogram>
-
-<histogram name="CaptivePortal.Notification.Status"
-    enum="CaptivePortalNotificationStatus">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Count of displayed and not displayed due to errors notifications about
-    captive portal.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.Notification.UserAction"
-    enum="CaptivePortalNotificationUserAction">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Count of clicked, closed and ignored captive portal notifications.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.OOBE.DetectionDuration" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Duration of the captive portal detection process for a particular network at
-    OOBE. Detection duration is recorded each time portal detection is completed
-    for an active network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.OOBE.DetectionResult" enum="CaptivePortalStatus">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The result of captive portal detection attempts performed at OOBE. Detection
-    result is recorded when portal detection is completed for an active network
-    and when it differs from the previous result for the same network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"
-    enum="CaptivePortalStatus">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The result of captive portal detection attempts at OOBE if it diverges from
-    network manager results. Detection result is recorded each time portal
-    detection is completed for an active network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.OOBE.PortalToOnlineTransition" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Number of milliseconds passed between consecutive reports for the same
-    network about portal and online states.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.RedirectTime" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Number of milliseconds between start of request to gstatic.com/generate_204
-    and receipt of response with redirect to captive portal login page.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.Session.DetectionDuration" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Duration of the captive portal detection process for a particular network in
-    user session. Detection duration is recorded each time portal detection is
-    completed for an active network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.Session.DetectionResult"
-    enum="CaptivePortalStatus">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The result of captive portal detection attempts performed in user session.
-    Detection result is recorded when portal detection is completed for an
-    active network and when it differs from the previous result for the same
-    network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.Session.DiscrepancyWithShill"
-    enum="CaptivePortalStatus">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The result of captive portal detection attempts in session if it diverges
-    from network manager results. Detection result is recorded each time portal
-    detection is completed for an active network.
-  </summary>
-</histogram>
-
-<histogram name="CaptivePortal.Session.PortalToOnlineTransition" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Number of milliseconds passed between consecutive reports for the same
-    network about portal and online states.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Channel.Certificate" enum="CastCertificateStatus">
-  <owner>ryanchung@google.com</owner>
-  <summary>
-    Records the result of the Cast certificate verification on the Cast sender.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Network.Down.Duration.In.Seconds" units="seconds">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Records the time the network has been down on a Cast device.  Recorded when
-    network goes up.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Network.Up.Duration.In.Minutes" units="minutes">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Records the time the network has been up on a Cast device.  Recorded when
-    network goes down.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastButtonShown" enum="BooleanEnabled">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Records the number of times the cast button was shown to the user. The value
-    will be true if the button is enabled, and false if the button is disabled.
-    Note that depending on the current UX, it's possible that we hide the button
-    entirely if it's disabled, so it's possible for the false values to be 0.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastButtonShownInitialFullscreen"
-    enum="BooleanEnabled">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Records the number of times the cast button was shown to the user when the
-    video is fullscreened. The value will only be recorded on entering
-    fullscreen. The value will be true if the button is enabled, and false if
-    the button is disabled. Note that depending on the current UX,it's possible
-    that we hide the button entirely if it's disabled, so it's possible for the
-    false values to be 0.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastMediaType" enum="MediaContainers">
-  <owner>miguelg@chromium.org</owner>
-  <summary>Records the media type of every video being cast.</summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastPlayerResult" enum="CastPlayBackState">
-  <owner>maybelle@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Records the result of a request to play remotely on a per player app basis
-    within Chrome for Android.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2014, and replaced by Cast.Sender.CastPlayerResult.
-  </obsolete>
-  <owner>maybelle@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Records the result of a request to play remotely. The value will be true if
-    the playback succeeded, and false if there was an error.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastTimeRemainingPercentage" units="%">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Records the percentage of the video left at the time the remote playback is
-    stopped. This will be recorded when the playback is stopped by the user, or
-    when it's stopped by the cast device.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.DeviceType" enum="RemotePlaybackDeviceType">
-  <owner>avayvod@google.com</owner>
-  <summary>
-    Records the type of the remote playback device selected by the user. This
-    will be recorded when the user has chosen the device from the media route
-    chooser dialog.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.FullscreenControlsActionWithMediaElement"
-    enum="MediaCommand">
-  <owner>aberent@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <summary>
-    Record each interaction with the fullscreen remote playback controls in
-    cases when the corresponding media element on the page was present.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.FullscreenControlsActionWithoutMediaElement"
-    enum="MediaCommand">
-  <owner>aberent@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <summary>
-    Record each interaction with the fullscreen remote playback controls in
-    cases when the corresponding media element on the page was not present.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.MediaElementPresentWhenShowFullscreenControls"
-    enum="BooleanPresent">
-  <owner>aberent@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <summary>
-    Indicates whether the corresponding media element on the page was present
-    when the fullscreen remote playback controls were shown.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.Overlay" enum="CastOverlayEvents">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records events and user interactions related to the Cast overlay shown on
-    video elements.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.SessionTimeWithoutMediaElementPercentage"
-    units="%">
-  <owner>aberent@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <summary>
-    Records the ratio of the time the media element was detached from the remote
-    playback session to the total duration of the session (as from when the
-    element has been attached till when the session stopped or disconnected), in
-    percents.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.UrlResolveResult"
-    enum="RemotePlaybackUrlResolveResult">
-  <owner>aberent@google.com</owner>
-  <summary>
-    Records the result of resolving the video URL for cast, including checking
-    its CORS header.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess"
-    enum="BooleanSuccess">
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Indicates whether initialization of a video encode accelerator for Cast
-    sender was successful.
-  </summary>
-</histogram>
-
-<histogram name="CastV2.Transport.Connect.Latency.Unknown" units="ms">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    The latency between when a Cast V2 connection is established and the first
-    message is received on that connection. &quot;Unknown&quot; is the peer
-    type, which is not known at this point in the CastV2 connection
-    establishment.  Naming conforms to the CastV2 sender-side histogram naming
-    convention &quot;CastV2.[action].[name].[peer_type]&quot;.
-  </summary>
-</histogram>
-
-<histogram name="CastV2.Transport.SslHandshake.Error.Unknown"
-    enum="NetErrorCodes">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    On accepting a Cast V2 transport socket connection, if an error is
-    encountered, the error code is logged here. &quot;Unknown&quot; is the peer
-    type, which is not known at this point in the CastV2 connection
-    establishment.  &quot;SslHandshake.Error&quot; is the name of the action.
-    Naming conforms to the CastV2 sender-side histogram naming convention
-    &quot;CastV2.[action].[name].[peer_type]&quot;.
-  </summary>
-</histogram>
-
-<histogram name="CastV2.Transport.SslHandshake.Unknown" units="ms">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    The time taken to do the handshake during Cast V2 transport socket creation.
-    &quot;Unknown&quot; is the peer type, which is not known at this point in
-    the CastV2 connection establishment.  Naming conforms to the CastV2
-    sender-side histogram naming convention
-    &quot;CastV2.[action].[name].[peer_type]&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Cellular.ActivationFailure">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of cellular device activation failures (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Cellular.ActivationTry">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The count of cellular device activation tries (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.ConnectionFailed">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of cellular reconnect failures during activation (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Cellular.ConnectionRetry">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of cellular device reconnect tries during activation (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupFailed">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of successful cellular plan established (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupStart">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of initiated cellular device setup starts (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupSucceeded">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The count of failed cellular plan setup tries (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.PaymentFailed">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The count of failed cellular plan purchases (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.PaymentReceived">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of successfully completed cellular plan purchases (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="CertificateType">
-  <obsolete>
-    Deprecated as of 8/2013. This histogram only considered the leaf certificate
-    expiry date as a proxy for whether a certificate was in-scope for the BRs,
-    but did not consider the issuance date. As some CAs have issued long-lived
-    certs prior to the BRs, this disproportionately reported those certs as
-    being subject to the BRs, but non-compliant, when in reality they're not
-    subject.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Information about the certificate algorithms and sizes in use on the web, to
-    examine compliance with the CA/Browser Forum requirements and security best
-    practice.
-  </summary>
-</histogram>
-
-<histogram name="CertificateType2">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Information about the certificate algorithms and sizes in use on the web, to
-    examine compliance with the CA/Browser Forum requirements and security best
-    practice. This histogram considers the notBefore as the issuance date, for
-    purposes of what requirements apply.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.BadMessgeTerminated" enum="ProcessType2">
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Count of child processes killed because they sent an IPC that couldn't be
-    deserialized.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Crashed" enum="ProcessType">
-  <obsolete>
-    Deprecated 3/2013. Renamed to ChildProcess.Crashed2.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Count of child process crashes grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.Crashed2" enum="ProcessType2">
-  <owner>wfh@chromium.org</owner>
-  <summary>Count of child process crashes grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.CrashedWasAlive" enum="ProcessType">
-  <obsolete>
-    Deprecated as of 10/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process crashes that we miscounted because we took the exit
-    code too early. Grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Crashes" enum="ProcessType">
-  <obsolete>
-    Deprecated 10/2011. Renamed to ChildProcess.Crashed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Count of child process crashes grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.CrashesWasAlive" enum="ProcessType">
-  <obsolete>
-    Deprecated 10/2011. Renamed to ChildProcess.CrashedWasAlive.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process crashes that we miscounted because we took the exit
-    code too early. Grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.DefaultCase" enum="ProcessType">
-  <obsolete>
-    Deprecated as of 10/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process crashes for which we were not able to understand the
-    exit code, grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Disconnected" enum="ProcessType">
-  <obsolete>
-    Deprecated 3/2013. Renamed to ChildProcess.Disconnected2.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process abnormal channel disconnects grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Disconnected2" enum="ProcessType2">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Count of child process abnormal channel disconnects grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.DisconnectedAlive" enum="ProcessType">
-  <obsolete>
-    Deprecated 3/2013. Renamed to ChildProcess.DisconnectedAlive2.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process abnormal channel disconnects that are not classified
-    and reported because we took the exit code too early. Grouped by process
-    type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.DisconnectedAlive2" enum="ProcessType2">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Count of child process abnormal channel disconnects that are not classified
-    and reported because we took the exit code too early. Grouped by process
-    type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.HangRendererType" enum="RendererUnresponsiveType">
-  <obsolete>
-    Deprecated 3/2017.
-  </obsolete>
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    What the browser was waiting for from the renderer when it was reported as
-    hung.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.InvalidSandboxStateCrash.NoStartupWindow"
-    enum="BooleanPresent">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Whether the browser command line had the switch --no-startup-window when a
-    child process crashed due to invalid sandbox state. Recorded when a child
-    process crashes if the exit code from the child process is
-    RESULT_CODE_INVALID_SANDBOX_STATE.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Killed" enum="ProcessType">
-  <obsolete>
-    Deprecated 3/2013. Renamed to ChildProcess.Killed2.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Count of child process kills grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.Killed2" enum="ProcessType2">
-  <owner>wfh@chromium.org</owner>
-  <summary>Count of child process kills grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.Killed2.OOM" enum="ProcessType2">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Out of ChildProcess.Killled, number of kills due to SIGKILL, which is a
-    strong signal of out of memory on ChromeOS, grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.KilledByExtensionAPI">
-  <owner>nasko@chromium.org</owner>
-  <summary>
-    Count of child processes killed by the extension API (processes.terminate).
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.KilledWasAlive" enum="ProcessType">
-  <obsolete>
-    Deprecated as of 10/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process kills that we miscounted because we took the exit
-    code too early. Grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="ChildProcess.Kills" enum="ProcessType">
-  <obsolete>
-    Deprecated 10/2011. Renamed to ChildProcess.Killed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Count of child process kills grouped by process type.</summary>
-</histogram>
-
-<histogram name="ChildProcess.KillsWasAlive" enum="ProcessType">
-  <obsolete>
-    Deprecated 10/2011. Renamed to ChildProcess.KilledWasAlive.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of child process kills that we miscounted because we took the exit
-    code too early. Grouped by process type.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.Android.Activity.CrashCounts" enum="AndroidActivityId">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates how many times each particular type of Activity was in the
-    foreground when a UMA session was terminated abnormally. UMA sessions last
-    as long as Chrome remains in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.Android.Activity.LaunchCounts" enum="AndroidActivityId">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates how many times each particular type of Activity was brought to the
-    foreground when a UMA session was active (i.e. launched at some point). UMA
-    sessions last as long as Chrome remains in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Indicates the execution phase the browser was in when the browser crashed.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase">
-  <obsolete>
-    Deprecated as of 11/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates the execution phase the browser was in when browser didn't exit
-    cleanly.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserCrashDumpAttempts">
-  <obsolete>
-    Deprecated as of 04/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total number of times the browser process has attempted to generate a
-    crash dump. This should be the sum of Chrome.BrowserDumpsWithCrash and
-    Chrome.BrowserDumpsWithNoCrash.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserDumpsWithCrash">
-  <obsolete>
-    Deprecated as of 04/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times the browser process has attempted to generate a crash
-    dump because of an actual browser crash.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserDumpsWithNoCrash">
-  <obsolete>
-    Deprecated as of 04/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times the browser process has attempted to generate a crash
-    dump in a non-crashing (i.e., reporting only) context.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.MessageLoopProblem" enum="MessageLoopProblems">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Track set of Windows errors inside the meessage loop/pump system, where
-    system calls fail, and we try to gracefully recover.  These errors should
-    really never happen, so we should be sure to look closer if they do.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.ProcessSingleton.NotifyResult" enum="NotifyResult">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The result of every rendez-vous reported once per browser process launch.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.ProcessSingleton.TimeToCreate" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time it takes to grab the process singleton. Reported once per successful
-    attempt at obtaining the singleton.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.ProcessSingleton.TimeToFailure" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time it takes to return an error from the process singleton algorithm (nor
-    succeeding in obtaining it, nor in generating a rendez-vous). This does not
-    include time spent in the fast notification path (chrome_exe_main_win.cc).
-  </summary>
-</histogram>
-
-<histogram name="Chrome.ProcessSingleton.TimeToNotify" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time it takes to find the process singleton owner and notify it. Reported
-    once per successful rendez-vous. This does not include time spent in the
-    fast notification path (chrome_exe_main_win.cc).
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user not in the search engine dialog
-    experiment.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user in the search engine dialog
-    experiment.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user in slot 1 of a randomized
-    search engine dialog.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user in slot 2 of a randomized
-    search engine dialog.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user in slot 3 of a randomized
-    search engine dialog.
-  </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The default search engine selected by a user in slot 4 of a randomized
-    search engine dialog.
-  </summary>
-</histogram>
-
-<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime"
-    units="ms">
-  <obsolete>
-    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
-  </obsolete>
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Time between the intent arrival in a Chrome generated CCT and the first
-    navigation commit, if the navigation is successful. Similar in principle to
-    Startup.FirstCommitNavigationTime.
-  </summary>
-</histogram>
-
-<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"
-    units="ms">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    In &quot;Herb&quot; mode shows the time between the intent arrival in a
-    Chrome generated CCT and the first navigation commit, if the navigation is
-    successful. Similar in principle to Startup.FirstCommitNavigationTime.
-  </summary>
-</histogram>
-
-<histogram name="ChromeGeneratedCustomTab.IntentToPageLoadedTime" units="ms">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    In &quot;Herb&quot; mode shows time between the intent arrival in a Chrome
-    generated CCT and the first &quot;page loaded&quot; event, if the navigation
-    is successful.
-  </summary>
-</histogram>
-
-<histogram name="ChromeNotifierService.Actions"
-    enum="ChromeNotifierServiceActionType">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The actions to enable or disable services sending synced notifications.
-    Synced Notification Sending services can be individually disabled by the
-    user in the Chrome Notification center settings dialog.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.Display.ColorProfile" enum="ChromeOSColorProfile">
-  <owner>xiaowenx@chromium.org</owner>
-  <owner>mukai@chromium.org</owner>
-  <summary>
-    The name of the current color calibration of the display on ChromeOS. This
-    value is sent when the color calibration is changed by the user.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.GAIA.WebViewFlow" enum="BooleanGAIAWebViewFlow">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Whether a user signed in using the new WebView-based GAIA flow. This value
-    is sent after the GAIA screen has completed user authentication.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.MachineIdRegen.AgeSeconds" units="seconds">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of seconds of uptime since the last time the ChromeOS machine-id
-    was regenerated. This is reported every time the machine-id is regenerated
-    except for the first time since reboot.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.MachineIdRegen.Reason" enum="ChromeOSMachineIdReason">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The reason why the ChromeOS machine-id was regenerated. This is reported
-    when the machine-id is re-generated.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.MemoryPressureLevel" enum="MemoryPressureLevel">
-  <owner>xdai@chromium.org</owner>
-  <summary>
-    The memory pressure level in ChromeOS, which is recorded periodically (once
-    per second). This is used to show the relative frequency of the system being
-    in a critical vs relaxed memory pressure state.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.PlatformVerification.Available"
-    enum="BooleanAvailable">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    Whether platform verification subsystem features are available at the time a
-    platform verification request is made for content protection on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.PlatformVerification.ExpiryStatus"
-    enum="ChromeOSPlatformVerificationExpiryStatus">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The result of a certificate expiry check during a platform verification
-    attempt for content protection on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.PlatformVerification.Result"
-    enum="ChromeOSPlatformVerificationResult">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The result of a platform verification attempt for content protection on
-    Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.SAML.APIUsed" enum="BooleanUsage">
-  <owner>bartfab@chromium.org</owner>
-  <summary>
-    Whether a Chrome OS login via SAML used the principals API. This is recorded
-    during login on Chrome OS if SAML is being used for authentication.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.SAML.Scraping.PasswordCount">
-  <owner>bartfab@chromium.org</owner>
-  <summary>
-    The number of passwords that were scraped during a Chrome OS login via SAML.
-    This is set only when the principals API is not used.
-  </summary>
-</histogram>
-
-<histogram name="ChromeOS.SAML.Scraping.VerificationResult"
-    enum="BooleanSuccess">
-  <owner>bartfab@chromium.org</owner>
-  <summary>
-    Whether one of the scraped passwords was successfully verified as the user's
-    password. This is set only when the principals API is not used.
-  </summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.BrowserLoadTime" units="ms">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    The amount of time it took to load the native libraries in the browser
-    process.
-  </summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.BrowserStates"
-    enum="ChromiumAndroidLinkerBrowserState">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Whether relro sharing was attempted for the browser process, and if
-    attempted, whether it succeeded.
-  </summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.IsLowMemoryDevice" enum="Boolean">
-  <obsolete>
-    Deprecated 10/2014 in Issue 419010, and replaced by
-    ChromiumAndroidLinker.BrowserStates.
-  </obsolete>
-  <owner>simonb@chromium.org</owner>
-  <summary>Is low memory device.</summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.LibraryLoadFromApkStatus"
-    enum="LibraryLoadFromApkStatus">
-  <owner>petrcermak@chromium.org</owner>
-  <summary>
-    Whether the device supports loading a library directly from the APK file.
-    The functionality is checked and reported during every Chromium browser
-    process start up.
-  </summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.LoadedAtFixedAddressFailed"
-    enum="Boolean">
-  <obsolete>
-    Deprecated 10/2014 in Issue 419010, and replaced by
-    ChromiumAndroidLinker.RendererStates.
-  </obsolete>
-  <owner>simonb@chromium.org</owner>
-  <summary>Load at fixed address failed.</summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.RendererLoadTime" units="ms">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    The amount of time it took to load the native libraries in the renderer
-    process.
-  </summary>
-</histogram>
-
-<histogram name="ChromiumAndroidLinker.RendererStates"
-    enum="ChromiumAndroidLinkerRendererState">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Whether relro sharing was attempted for a renderer process, and if
-    attempted, whether it succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Connections" enum="State">
-  <owner>anandc@chromium.com</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Recorded every time a Chromoting connection enters a new state.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Connections.Durations.Closed" units="minutes">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The duration of sessions that were closed, normally by a user-initiated
-    action.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Connections.Durations.Failed" units="minutes">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>The duration of sessions that failed to connect.</summary>
-</histogram>
-
-<histogram name="Chromoting.Connections.Times.ToAuthenticate" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time taken to authenticate as part of a Chromoting connection request.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Connections.Times.ToConnect" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time taken to connect to a remote-host, after a request has been
-    authenticated.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Input.EventLatency" units="microseconds">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Input event delivery latency from the browser to the plugin.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.Bandwidth" units="Bytes/second">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The bandwidth of non-empty packets in Chromoting remote sessions, updated
-    every time a video packet is processed and logged every 1s.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.CaptureLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time to capture a video frame on the host, returned as part of a video
-    packet.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.CaptureOverhead" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Amount of time wasted on IPC and threading overhead when capturing a video
-    frame.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.CapturePendingLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time from when an input event is received to when the next frame is
-    captured.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.DecodeLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>The time to decode a video packet on the client.</summary>
-</histogram>
-
-<histogram name="Chromoting.Video.EncodeLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time to encode a video packet on the host, returned as part of a video
-    packet.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.EncodePendingLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Delay before a newly captured frame is passed to the encoder.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.FrameRate" units="fps">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The frame-rate of non-empty packets in Chromoting remote sessions, updated
-    every time a video packet is processed and logged every 1s.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.NetworkLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Estimated network roundtrip latency calculated by subtracting total
-    processing time on host and client from the total roundtrip time.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.PacketRate" units="packets/second">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The packets/sec, including empty packets, in Chromoting remote sessions,
-    updated every time a video packet is processed and logged every 1s.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.PaintLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>The time to paint a decoded video packet on the client.</summary>
-</histogram>
-
-<histogram name="Chromoting.Video.RoundTripLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    The time from an input being sent from the client to a response being
-    received by the client after it is processed by the host.
-  </summary>
-</histogram>
-
-<histogram name="Chromoting.Video.SendPendingLatency" units="ms">
-  <owner>anandc@chromium.org</owner>
-  <owner>sergeyu@chromium.org</owner>
-  <summary>
-    Delay before an encoded video packet is written to the send buffer.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.discard_download" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The length of time between a dangerous download appearing on the downloads
-    shelf, and the &quot;Discard&quot; button being clicked.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.dismiss_download" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The length of time between a dangerous download appearing on the downloads
-    shelf, and the &quot;Dismiss&quot; button being clicked. Deprecated since
-    M54.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.launch_url" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The length of time between the external protocol dialog being shown and the
-    &quot;Launch Application&quot; button being clicked.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.open_download" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The length of time between a download appearing on the download shelf, and
-    the user opening it by clicking the item or pressing return.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.report_and_discard_download" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time between &quot;Report and Discard&quot; button being shown and it being
-    clicked.
-  </summary>
-</histogram>
-
-<histogram name="clickjacking.save_download" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The length of time between a dangerous download appearing on the download
-    shelf, and the &quot;Keep&quot; button being clicked.
-  </summary>
-</histogram>
-
-<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction">
-  <obsolete>
-    Deprecated as of 4/2013, experiment confirmed correctness of our patch.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Counts how often the user writes or reads from the clipboard and whether the
-    write was from an incognito window or not.
-  </summary>
-</histogram>
-
-<histogram name="Clipboard.X11StoreCopyPasteDuration" units="ms">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    The length of time that it takes to transfer ownership of Chrome's CLIPBOARD
-    selection to the clipboard manager when Chrome exits.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.AuthEvent" enum="CloudPrintAuthEventType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Event counts in CloudPrintAuth.</summary>
-</histogram>
-
-<histogram name="CloudPrint.AvailablePrinters">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of printers availible for registration.</summary>
-</histogram>
-
-<histogram name="CloudPrint.AvailablePrintersList">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The number of printers availible for registration in Windows Service.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.CapsUpdateInterval" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time between capabilities updates.</summary>
-</histogram>
-
-<histogram name="CloudPrint.JobHandlerEvent"
-    enum="CloudPrintJobHandlerEventType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Event counts in PrinterJobHandler.</summary>
-</histogram>
-
-<histogram name="CloudPrint.JobsDonePerInterval">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of jobs successfully completed per hour.</summary>
-</histogram>
-
-<histogram name="CloudPrint.JobsStartedPerInterval">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of jobs started per hour.</summary>
-</histogram>
-
-<histogram name="CloudPrint.JobStatus" enum="CloudPrintJobStatusType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Then number of job completion statuses.</summary>
-</histogram>
-
-<histogram name="CloudPrint.NativeJobStatus"
-    enum="CloudPrintNativeJobStatusType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Event counts in PrintSystem.</summary>
-</histogram>
-
-<histogram name="CloudPrint.PrepareTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time needed to prepare job for spooling.</summary>
-</histogram>
-
-<histogram name="CloudPrint.PrinterBlacklistSize">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of printers user has blacklisted.</summary>
-</histogram>
-
-<histogram name="CloudPrint.PrinterWhitelistSize">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of printers user has whitelisted.</summary>
-</histogram>
-
-<histogram name="CloudPrint.PrintingTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time needed to finish print job.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceEvents" enum="ServiceProcessEventType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Event counts in ServiceProcessControl.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceProcessSocketLength">
-  <obsolete>
-    Removed 12/2015. http://crbug.com/466644
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Temporarily histogram with size of IPC sockets in default location.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityCapsFailTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The amount of time used to fail to collect printer capabilities.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityCapsTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time used to collect printer capabilities.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityDisconnectTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The amount of time the utility process runs before disconnect.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityMetafileFailTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time used to fail to generate metafile.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityMetafileTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time used to generate metafile.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilityProcessHostEvent"
-    enum="ServiceUtilityProcessHostEventType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Event counts in ServiceUtilityProcessHost.</summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilitySemanticCapsFailTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The amount of time used to fail to collect printer capabilities.
-  </summary>
-</histogram>
-
-<histogram name="CloudPrint.ServiceUtilitySemanticCapsTime" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time used to collect printer capabilities.</summary>
-</histogram>
-
-<histogram name="CloudPrint.SpoolingTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time needed to spool print job.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UnregisterPrinters">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of printers to unregister.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UrlFetcherDownloadSize" units="KB">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of data downloaded on cloud print request.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UrlFetcherRequestTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of time needed for cloud print request.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UrlFetcherRequestType"
-    enum="CloudPrintUrlFetcherRequestType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Request counts to cloud print service.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UrlFetcherRetries">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The number of retries used to complete cloud print request.</summary>
-</histogram>
-
-<histogram name="CloudPrint.UrlFetcherUploadSize" units="KB">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>The amount of data uploaded with cloud print request.</summary>
-</histogram>
-
-<histogram name="CloudPrint.XmppPingTry">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Number of tries before successful ping. 99 means giving up.</summary>
-</histogram>
-
-<histogram name="CloudPrint.XmppTimeout" units="ms">
-  <obsolete>
-    Removed 02/2017. http://crbug.com/643570
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Xmpp timeout option value provided by server.</summary>
-</histogram>
-
-<histogram name="ComponentUpdater.Calls" enum="ComponentUpdaterCalls">
-  <owner>sorin@chromium.org</owner>
-  <summary>
-    The number of times the component updater called UpdateClient::Install or
-    UpdateClient::Update. These correspond to the number of manual component
-    update checks performed as a result of a user action, and the number of
-    automated component update checks.
-  </summary>
-</histogram>
-
-<histogram name="ComponentUpdater.UpdateCompleteResult" enum="BooleanError">
-  <owner>sorin@chromium.org</owner>
-  <summary>The result of an install or an update check.</summary>
-</histogram>
-
-<histogram name="ComponentUpdater.UpdateCompleteTime" units="ms">
-  <owner>sorin@chromium.org</owner>
-  <summary>
-    Time to complete an Install or an Update component update call.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Browser.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
-    metric.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when display list recording source is updated (in a
-    browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.DisplayListRecordingSource.UpdateUs"
-    units="microseconds">
-  <obsolete>
-    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
-    metric.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a display list, in microseconds.
-    Recorded when display list is updated (in a browser process).
-  </summary>
-</histogram>
-
-<histogram base="true" name="Compositing.Browser.LayersUpdateTime"
-    units="microseconds">
-  <owner>threaded-rendering@chromium.org</owner>
-  <summary>
-    Time spent updating layers, in microseconds. Recorded when layers are
-    updated (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.LayerTreeImpl.CalculateDrawPropertiesUs"
-    units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating layer draw properties, in microseconds. Recorded when a
-    LayerTreeImpl's draw properties are updated (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.NumActiveLayers" units="layers">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    The number of layers in the active tree for each compositor frame. This is
-    logged once per frame, before the frame is drawn (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.NumRenderSurfaces" units="surfaces">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    The number of render surfaces in the render surface layer list. Recorded
-    each time the render surface layer list is constructed (in a browser
-    process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.PictureMemoryUsageKb" units="KB">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
-    Recorded once per frame, before the frame is drawn (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.PicturePile.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when picture pile is updated (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.PicturePile.UpdateUs" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a picture pile, in microseconds.
-    Recorded when picture pile is updated (in a browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 11/2016. Increased the max tracking range to accomendate GPU
-    raster, and will require new baskets.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
-    of a compositor rasterization task. Recorded after the task finishes (in a
-    browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs2"
-    units="pixels/ms">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
-    of a compositor rasterization task. Recorded after the task finishes (in a
-    browser process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Browser.RasterTask.RasterUs" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent completing a compositor rasterization task, in microseconds.
-    Recorded after the task finishes (in a browser process).
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
-  <obsolete>
-    Deprecated 02/2016. We'd learned as much as we could from this metric and it
-    made no sense to keep it around.
-  </obsolete>
-  <owner>vollick@chromium.org</owner>
-  <summary>
-    Tracks the number of missing tiles that had some image content in the
-    browser process.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
-  <obsolete>
-    Deprecated 02/2016. We'd learned as much as we could from this metric and it
-    made no sense to keep it around.
-  </obsolete>
-  <owner>vollick@chromium.org</owner>
-  <summary>
-    Tracks the number of missing tiles that did not have any image content in
-    the browser process.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.CopyFromSurfaceTime" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The turn around time taken for the async readback of pixels is measured
-    here.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.CopyFromSurfaceTimeSynchronous" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time taken for the sync readback of pixels is measured here.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.DirectRenderer.GL.DrawFrameUs"
-    units="microseconds">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Time spent drawing of composited layers by GLRenderer, in microseconds. This
-    is logged once per frame, when a frame should be drawn.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.DirectRenderer.Software.DrawFrameUs"
-    units="microseconds">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Time spent drawing of composited layers by SoftwareRenderer, in
-    microseconds. This is logged once per frame, when a frame should be drawn.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when display list recording source is updated.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.DisplayListRecordingSource.UpdateUs"
-    units="microseconds">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a display list, in microseconds.
-    Recorded when display list is updated.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.LayerTreeImpl.FindClosestMatchingLayerUs"
-    units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent finding the closest matching layer to a given point, in
-    microseconds. Recorded each time we do hit testing on LayerTreeImpl.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.NumActiveLayers">
-  <obsolete>
-    Deprecated 04/2016, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>dneto@chromium.org</owner>
-  <summary>
-    The number of layers in the active tree for each compositor frame. This is
-    logged once per frame, before the frame is drawn.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.PictureMemoryUsageKb" units="KB">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
-    Recorded once per frame, before the frame is drawn.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.PicturePile.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when picture pile is updated.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.PicturePile.UpdateUs" units="microseconds">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a picture pile, in microseconds.
-    Recorded when picture pile is updated.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.RasterTask.RasterPixelsPerMs" units="pixels/ms">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
-    of a compositor rasterization task. Recorded after the task finishes.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.RasterTask.RasterUs" units="microseconds">
-  <obsolete>
-    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
-    and Compositing.Browser, depending on which process it occurs in.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent completing a compositor rasterization task, in microseconds.
-    Recorded after the task finishes.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.CALayerResult" enum="CALayerResult">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The outcome of attempting to replace all renderer tiles with CALayers.
-    Either success, or the first reason why a DrawQuad couldn't be replaced by a
-    CALayer.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Renderer.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
-    metric.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when display list recording source is updated (in a
-    renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.DisplayListRecordingSource.UpdateUs"
-    units="microseconds">
-  <obsolete>
-    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
-    metric.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a display list, in microseconds.
-    Recorded when display list is updated (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram base="true" name="Compositing.Renderer.LayersUpdateTime"
-    units="microseconds">
-  <owner>threaded-rendering@chromium.org</owner>
-  <summary>
-    Time spent updating layers, in microseconds. Recorded when layers are
-    updated (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.LayerTreeImpl.CalculateDrawPropertiesUs"
-    units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating layer draw properties, in microseconds. Recorded when a
-    LayerTreeImpl's draw properties are updated (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.NumActiveLayers" units="layers">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    The number of layers in the active tree for each compositor frame. This is
-    logged once per frame, before the frame is drawn (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.NumRenderSurfaces" units="surfaces">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    The number of render surfaces in the render surface layer list. Recorded
-    each time the render surface layer list is constructed (in a renderer
-    process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.PictureMemoryUsageKb" units="KB">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
-    Recorded once per frame, before the frame is drawn (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.PicturePile.UpdateInvalidatedAreaPerMs"
-    units="pixels/ms">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Area of invalidated content, in pixels, divided by update (i.e. record), in
-    milliseconds. Recorded when picture pile is updated (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.PicturePile.UpdateUs"
-    units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent updating (i.e. recording) a picture pile, in microseconds.
-    Recorded when picture pile is updated (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"
-    units="pixels/ms">
-  <obsolete>
-    Deprecated 11/2016. Increased the max tracking range to accomendate GPU
-    raster, and will require new baskets.
-  </obsolete>
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
-    of a compositor rasterization task. Recorded after the task finishes (in a
-    renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs2"
-    units="pixels/ms">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
-    of a compositor rasterization task. Recorded after the task finishes (in a
-    renderer process).
-  </summary>
-</histogram>
-
-<histogram name="Compositing.Renderer.RasterTask.RasterUs" units="microseconds">
-  <owner>paint-dev@chromium.org</owner>
-  <summary>
-    Time spent completing a compositor rasterization task, in microseconds.
-    Recorded after the task finishes (in a renderer process).
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
-  <obsolete>
-    Deprecated 02/2016. We'd learned as much as we could from this metric and it
-    made no sense to keep it around.
-  </obsolete>
-  <owner>vollick@chromium.org</owner>
-  <summary>
-    Tracks the number of missing tiles that had some image content in the
-    renderer process.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
-  <obsolete>
-    Deprecated 02/2016. We'd learned as much as we could from this metric and it
-    made no sense to keep it around.
-  </obsolete>
-  <owner>vollick@chromium.org</owner>
-  <summary>
-    Tracks the number of missing tiles that did not have any image content in
-    the renderer process.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNeedRasterContentArea"
-    units="pixels/frame">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Checkerboarded area, in number of pixels, that has recording but does not
-    have time to finish rastering yet. A sample is recorded everytime a frame is
-    drawn while a scroll is in progress. Tracking bug 535732.
-  </summary>
-</histogram>
-
-<histogram
-    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNoRecordingContentArea"
-    units="pixels/frame">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Checkerboarded area, in number of pixels, that has no recording to raster
-    from. A sample is recorded everytime a frame is drawn while a scroll is in
-    progress. Tracking bug 535732.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.RenderPass.AppendQuadData.NumIncompleteTiles">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Keeps track of number of incomplete tiles in a drawn compositor frame while
-    scrolling. This is a rough measurement of ugliness during user interaction.
-    Incomplete tiles are non ideal scaled. A sample is recorded everytime a
-    frame is drawn while a scroll is in progress. Tracking bug 381695.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.RenderPass.AppendQuadData.NumMissingTiles">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Keeps track of number of missing tiles in a drawn compositor frame while
-    scrolling. This is a rough measurement of ugliness during user interaction.
-    Incomplete tiles are checkerboard or solid color. A sample is recorded
-    everytime a frame is drawn while a scroll is in progress. Tracking bug
-    381695.
-  </summary>
-</histogram>
-
-<histogram name="Compositing.SurfaceAggregator.AggregateUs"
-    units="microseconds">
-  <owner>weiliangc@chromium.org</owner>
-  <summary>
-    Time spent aggregating compositor frames from different surfaces in
-    microseconds. This is logged once per frame.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.ConfirmedBadModules" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The number of confirmed bad modules found during module enumeration.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.EnumerateLoadedModules" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The length of time it takes to enumerate the loaded modules in the browser
-    process.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.EnumerateShellExtensions" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The length of time it takes to enumerate the shell extensions.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.EnumerateWinsockModules" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The length of time it takes to enumerate the Winsock LSP modules.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.EnumerationInspectionTime" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The cumulative length of time it takes to inspect all modules on disk,
-    extracting their certificates and version information. This work is actually
-    spread out over a much longer period of time so as not to impact the user.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.EnumerationTotalTime" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The cumulative length of time it takes to enumerate and inspect all modules.
-    This work is actually spread out over a much longer period of time so as not
-    to impact the user.
-  </summary>
-</histogram>
-
-<histogram name="Conflicts.SuspectedBadModules" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The number of suspected bad modules found during module enumeration.
-  </summary>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.ChromeOsSignalStrength" units="%">
-  <owner>ebeach@google.com</owner>
-  <summary>
-    Connectivity Diagnostics App: WiFi signal strength recorded during
-    NIC_SIGNAL_STRENGTH test.
-  </summary>
-  <details>
-    The &quot;Strength&quot; property of a WiFi signal is a partially-reversible
-    function that linearly maps the RSSI range -120dBm to -20dBm to Strength
-    values from 0 to 100.
-  </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.HTTP_LATENCY" units="ms">
-  <owner>ebeach@google.com</owner>
-  <summary>HTTP latency seen by the Connectivity Diagnostics.</summary>
-  <details>
-    HTTP latency is computed using the chrome.socket API to make an HTTP GET
-    request to the /generate_204 page of three randomly generated Google
-    hostnames (*-ccd-testing-v4.metric.gstatic.com). The time taken from issuing
-    the HTTP request to receiving a response is clocked in JavaScript and the
-    arithmetic mean of the three times is used as the HTTP latency.
-  </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.RESOLVER_LATENCY" units="ms">
-  <owner>ebeach@google.com</owner>
-  <summary>Resolution latency seen by the Connectivity Diagnostics.</summary>
-  <details>
-    Resolver latency is computed by using the chrome.dns API to query three
-    randomly generated Google hostnames (*-ccd-testing-v4.metric.gstatic.com).
-    The random hostnames guarantees that there will be no caching of DNS
-    hostnames. The time taken from issuing the DNS request to receiving a
-    response is clocked in JavaScript and the arithmetic mean of the three times
-    is used as the resolver latency.
-  </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.TestVerdict"
-    enum="ConnectivityDiagnosticsTestVerdict">
-  <owner>ebeach@google.com</owner>
-  <summary>
-    Connectivity Diagnostics App: Outcome of the connectivity tests.
-  </summary>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.TimeTaken" units="ms">
-  <owner>ebeach@google.com</owner>
-  <summary>
-    Connectivity Diagnostics App: Amount of time taken to run each of the
-    connectivity tests.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultAutoplaySetting" enum="ContentSetting">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>The default autoplay setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultCookiesSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default cookies setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultHandlersSetting" enum="ContentSetting">
-  <obsolete>
-    Deprecated 07/2014 since it is not referenced anywhere in the code.
-  </obsolete>
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default handler setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultImagesSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default image setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultJavaScriptSetting"
-    enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default JavaScript setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultKeygenSetting" enum="ContentSetting">
-  <obsolete>
-    Support for keygen was removed.
-  </obsolete>
-  <owner>svaldez@chromium.org</owner>
-  <summary>
-    The default setting for using key generation in forms at profile open.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultLocationSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default location setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultMediaStreamCameraSetting"
-    enum="ContentSetting">
-  <owner>msramek@chromium.org</owner>
-  <summary>The default camera setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultMediaStreamMicSetting"
-    enum="ContentSetting">
-  <owner>msramek@chromium.org</owner>
-  <summary>The default microphone setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultMediaStreamSetting"
-    enum="ContentSetting">
-  <obsolete>
-    This setting was deprecated in r322364 and replaced with separate settings
-    for camera and microphone. See
-    ContentSettings.DefaultMediaStreamCameraSetting and
-    ContentSettings.DefaultMediaStreamMicSetting.
-  </obsolete>
-  <owner>toyoshim@chromium.org</owner>
-  <owner>msramek@chromium.org</owner>
-  <summary>The default MediaStream setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultMIDISysExSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>
-    The default MIDI permission setting on sysex (system exclusive) messages at
-    profile open.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultMouseCursorSetting"
-    enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default mouse cursor setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultNotificationsSetting"
-    enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default notification setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultPluginsSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default plugins setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultPopupsSetting" enum="ContentSetting">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The default popups setting at profile open.</summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultPushMessagingSetting"
-    enum="ContentSetting">
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    The default permission setting for push messages at profile open.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.DefaultWebBluetoothGuardSetting"
-    enum="ContentSetting">
-  <owner>jyasskin@chromium.org</owner>
-  <summary>
-    The default permission setting for Web Bluetooth at profile open.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.Exceptions">
-  <owner>lshang@chromium.org</owner>
-  <summary>
-    The number of user defined content setting exceptions at browser start.
-    Suffixed with the name of content setting types.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionScheme" enum="ContentSettingScheme">
-  <owner>lshang@chromium.org</owner>
-  <summary>
-    Records the schemes of content setting exceptions at browser start. Each
-    exception provides one sample.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.HasPath"
-    enum="BooleanHasPath">
-  <owner>alexmos@chromium.org</owner>
-  <summary>
-    Records how often a content settings exception for the file: scheme has a
-    non-empty path. Recorded once per exception at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithoutPath"
-    enum="ContentType">
-  <owner>alexmos@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type has a content settings exception
-    defined for a file: scheme with no path (i.e., wildcard path). Recorded once
-    per exception at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithPath"
-    enum="ContentType">
-  <owner>alexmos@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type has a content settings exception
-    defined for a file: scheme with a valid, non-empty path. Recorded once per
-    exception at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.LastSettingParsed" enum="LastSettingParsed">
-  <obsolete>
-    Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for
-    diagnosing crash causes.
-  </obsolete>
-  <owner>scheib@chromium.org</owner>
-  <summary>
-    Numer of results of parsing WebsiteSettingsHandler::last_setting_ success or
-    failure in WebsiteSettingsHandler methods.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.MixedScript"
-    enum="ContentSettingMixedScriptAction">
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks whether the mixed content shield was shown, and how the user
-    interacted with it.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.NumberOfAllowCookiesExceptions">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    The number of user defined cookies setting exceptions for allowing cookies
-    at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.NumberOfBlockCookiesExceptions">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    The number of user defined cookies setting exceptions for blocking cookies
-    at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.NumberOfExceptions">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    The number of user defined hostname patterns for content settings at browser
-    start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    The number of user defined cookies setting exceptions for 'clearing cookies
-    on browser exit' at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionActions" enum="PermissionAction">
-  <obsolete>
-    Removed 11/2015 in favor of Permissions.Action.*
-  </obsolete>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc. The suffix of the
-    histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionActionsInsecureOrigin"
-    enum="PermissionAction">
-  <obsolete>
-    Removed 11/2015 in favor of Permissions.Action.InsecureOrigin.*
-  </obsolete>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc on an insecure
-    origin. The suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionActionsSecureOrigin"
-    enum="PermissionAction">
-  <obsolete>
-    Removed 11/2015 in favor of Permissions.Action.SecureOrigin.*
-  </obsolete>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc on a secure origin.
-    The suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionRequested" enum="PermissionType">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Number of times a given permission was requested by a website and the user
-    has the permission set to prompt (i.e. not blocked or allowed).
-
-    Note this is probably not the metric you want - it does not correspond to
-    the total number of times websites request a permission. Also, because
-    specific permissions have code that can automatically block or grant
-    permissions based on things like incognito, installed extensions etc., this
-    does also not correspond to the number of times users are prompted to allow
-    permissions.
-
-    For a better metric to track how often users are prompted, either use
-    ContentSettings.PermissionsActions*, or Permissions.Prompt.*.
-
-    See https://crbug.com/638076 for more details.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionRequested_InsecureOrigin"
-    enum="PermissionType">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Number of times a given permission was requested by an insecure origin and
-    the user has the permission set to prompt (i.e. not blocked or allowed).
-
-    Note this is probably not the metric you want - it does not correspond to
-    the total number of times websites request a permission. Also, because
-    specific permissions have code that can automatically block or grant
-    permissions based on things like incognito, installed extensions etc., this
-    does also not correspond to the number of times users are prompted to allow
-    permissions.
-
-    For a better metric to track how often users are prompted, use
-    ContentSettings.PermissionsActions*.
-
-    See https://crbug.com/638076 for more details.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.PermissionRequested_SecureOrigin"
-    enum="PermissionType">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Number of times a given permission was requested by a secure origin and the
-    user has the permission set to prompt (i.e. not blocked or allowed).
-
-    Note this is probably not the metric you want - it does not correspond to
-    the total number of times websites request a permission. Also, because
-    specific permissions have code that can automatically block or grant
-    permissions based on things like incognito, installed extensions etc., this
-    does also not correspond to the number of times users are prompted to allow
-    permissions.
-
-    For a better metric to track how often users are prompted, use
-    ContentSettings.PermissionsActions*.
-
-    See https://crbug.com/638076 for more details.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.Plugins" enum="ContentSettingPluginsAction">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Tracks whether the plugin content blocked puzzle piece was shown in the
-    Omnibox, and how the user interacted with it.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.Popups" enum="ContentSettingPopupAction">
-  <owner>charleszhao@chromium.org</owner>
-  <summary>
-    Tracks whether the popup content blocked puzzle piece was shown in the
-    Omnibox, and how the user interacted with it.
-  </summary>
-</histogram>
-
-<histogram name="ContextMenu.SaveLinkType" enum="ContextMenuSaveLinkType">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Type of the url when user saves the content through the save link context
-    menu.
-  </summary>
-</histogram>
-
-<histogram name="ContextMenu.SelectedOption" enum="ContextMenuOption">
-  <owner>newt@chromium.org</owner>
-  <summary>The option that the user selected from a context menu.</summary>
-</histogram>
-
-<histogram name="ContextMenu.Shown" enum="BooleanPresent">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Recorded when a context menu is shown, sliced by whether a web contents was
-    present.  (It generally should be; indeed, this code path should not be
-    followed when it is absent.  For instance, invoking a context menu from the
-    new tab page or from the sad tab page will not cause an emission to this
-    histogram.)  Note that this refers to link context menus, not the
-    cut-copy-paste context menus that can appear during long presses on text on
-    a web page or long presses in the omnibox.  The value of this histogram for
-    &quot;present&quot; could be usefully compared with the total count of
-    ContextMenu.SelectedOption to determine the clickthrough rate for context
-    menus.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.BackingStoreUpdateResults" enum="BackingStoreResults">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether or not updates to the backing store succeeded or failed, recorded
-    every update.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.BetweenAccessIntervalMinutes" units="minutes">
-  <obsolete>
-    Deprecated 2015-08-17 as part of cookie histogram cleanup
-    (https://crbug.com/521135).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Intervals between access time updates for each cookie.</summary>
-</histogram>
-
-<histogram name="Cookie.CookieDeleteEquivalent" enum="CookieDeleteEquivalent">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    Record when at attempt is made to delete an equivalent cookie on a set
-    cookie operation and when such a cookie is found and deleted. Also measure
-    when strict secure cookie rules affect this outcome and prevent a cookie
-    from being deleted.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CookieLineCookieValueValidity" enum="BooleanValid">
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    Indicates whether a cookie initialised from a Set-Cookie header value was
-    valid or not. This is only logged after cookies containing control
-    characters have already been rejected, so &quot;Invalid&quot; here means
-    that the cookie contains quotes, commas, backslashes or top-bit-set
-    characters.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CookiePrefix" enum="CookiePrefix">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Number of times a cookie was set with a name prefixed by
-    &quot;__Secure-&quot; or &quot;__Host-&quot; (prefixes reserved by
-    https://tools.ietf.org/html/draft-west-cookie-prefixes).
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CookiePrefixBlocked" enum="CookiePrefix">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Number of times a cookie was set with a name prefixed by
-    &quot;__Secure-&quot; or &quot;__Host-&quot; that violate cookie prefix
-    rules. That is, a __Secure- cookie must be set over a secure connection with
-    the Secure attribute, and a __Host- cookie must be set over a secure
-    connection, with the Secure attribute, with no Domain attribute, and with a
-    Path attribute of &quot;/&quot;. (As defined in
-    https://tools.ietf.org/html/draft-west-cookie-prefixes.)
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CookieSourceScheme" enum="CookieSourceScheme">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    For each cookie added to the store, record whether its source URL has a
-    cryptographic scheme, broken down by Secure and not Secure.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CorruptMetaTable">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Records the detection of a corrupted meta table. See http://crbug.com/111376
-    .
-  </summary>
-</histogram>
-
-<histogram name="Cookie.CorruptMetaTableRecoveryFailed">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records a failure to recover a corrupted meta table. See
-    http://crbug.com/111376 .
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Count">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    Number of cookies in the store (recorded every 10 minutes of active browsing
-    time)
-  </summary>
-</histogram>
-
-<histogram name="Cookie.DBSizeInKB" units="KB">
-  <owner>dmikurube@chromium.org</owner>
-  <summary>
-    The size, on disk, of the cookie database as it is being loaded.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.DeletionCause" enum="CookieDeletionCause">
-  <owner>rdsmith@chromium.org</owner>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    For each cookie removed from the store, the reason it was removed.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.DomainCount">
-  <obsolete>
-    Deprecated 2015-08-17 as part of cookie histogram cleanup
-    (https://crbug.com/521135).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For each domain, number of cookies in that domain (recorded every 10 minutes
-    of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="Cookie.DomainPerEtldp1Count">
-  <obsolete>
-    Deprecated 2015-08-17 as part of cookie histogram cleanup
-    (https://crbug.com/521135).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For every top level domain, number of subdomains in that top level domain
-    (recorded every 10 minutes of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Etldp1Count">
-  <obsolete>
-    Deprecated 2015-08-17 as part of cookie histogram cleanup
-    (https://crbug.com/521135).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For every top level domain, number of cookies in that domain (recorded every
-    10 minutes of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="Cookie.EvictedLastAccessMinutes" units="minutes">
-  <owner>rdsmith@chromium.org</owner>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    For each evicted (not expired) cookie, the amount of time since it was last
-    used
-  </summary>
-</histogram>
-
-<histogram name="Cookie.ExpirationDurationMinutes" units="minutes">
-  <owner>battre@chromium.org</owner>
-  <summary>Number of minutes until cookie expires when set.</summary>
-</histogram>
-
-<histogram name="Cookie.KillDatabaseResult" enum="BooleanSuccess">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether killing the database because it was corrupted beyond repair
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.NumberOfLoadedCookies">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This histogram records the total number of cookies loaded from disk,
-    including any cookies that are discarded during loading (for whatever
-    reason).
-  </summary>
-</histogram>
-
-<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus">
-  <obsolete>
-    Deprecated as of 9/2013. Experiment to measure control characters in cookies
-    is finished.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When parsing a cookie, indicates if control characters were present in any
-    of the cookie values and if any of the cookie values were invalid.
-    Specifically, checks that all of the parsed values are valid according to
-    the valid token definition in Section 2.2 of RFC2616 which specifies a token
-    must have no separators (i.e. no characters from the following string,
-    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
-    \t') and no control characters.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.PriorityBlockingTime" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    This histogram records the total duration of time during which at least one
-    web request was blocked waiting for the cookie store to load. If no requests
-    were affected, the value is 0. If two requests are simultaneously blocked
-    for 1 second, the value is 1 second. If two requests are consecutively
-    blocked for 1 second each, the value is two seconds.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.PriorityLoadCount">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The number of distinct Effective Top-Level Domains Plus One (ETLD+1, i.e.,
-    google.com, bbc.co.uk) for which a priority cookie load occurred.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.ReinstatedCookies" units="seconds">
-  <obsolete>
-    Deprecated as of 8/2015.
-  </obsolete>
-  <owner>huangs@chromium.org</owner>
-  <summary>
-    The duration in seconds between a cookie getting evicted (due to the number
-    of cookies exceeding a domain limit), and subsequently reinstated.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid">
-  <obsolete>
-    Deprecated as of 9/2013. Experiment to measure control characters in cookies
-    is finished.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates whether a cookie attribute pair was set with both a valid key and
-    a valid attribute value or not. For the key, this implies that it was a
-    valid token as defined in Section 2.2 of RFC2616 which specifies a token
-    must have no separators (i.e. no characters from the following string,
-    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
-    \t') and no control characters. For the value, this implies that it
-    contained no control characters and no semicolon.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.SetNameValidity" enum="BooleanValid">
-  <obsolete>
-    Deprecated as of 9/2013. Experiment to measure control characters in cookies
-    is finished.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates whether a cookie name was set with a valid token. A valid token is
-    defined in Section 2.2 of RFC2616 which specifies a token must have no
-    separators (i.e. no characters from the following string, ignoring the
-    starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={} \t') and no
-    control characters.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid">
-  <obsolete>
-    Deprecated as of 9/2013. Experiment to measure control characters in cookies
-    is finished.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicates whether a cookie value was valid or invalid when there was an
-    attempt to set it, where a valid value is defined in RFC 6265 as ASCII
-    characters excluding controls, whitspace, comma, semicolon, and backslash.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Shutdown.NumberOfCookiesDeleted">
-  <obsolete>
-    Deprecated as of 9/2015. The associated experiment was flawed.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The number of session cookies deleted on shutdown. This metric is emitted
-    even if no cookies are deleted.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Shutdown.TimeSpentDeletingCookies" units="ms">
-  <obsolete>
-    Deprecated as of 9/2015. The associated experiment was flawed.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time required to delete session cookies on shutdown. This
-    metric is emitted even if no cookies are deleted.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Startup.NumberOfCookiesDeleted">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The number of session cookies deleted on startup. This metric is emitted
-    even if no cookies are deleted. This metric is not emitted if session
-    cookies are restored, rather than deleted on startup.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Startup.TimeSpentDeletingCookies" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time required to delete session cookies on startup. This
-    metric is emitted even if no cookies are deleted. This metric is not emitted
-    if session cookies are restored, rather than deleted on startup.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeBlockedOnLoad" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time (ms) between the cookie store load starting and
-    completing.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeDatabaseMigrationToV5" units="ms">
-  <obsolete>
-    Deprecated as of 04/2015. The migration has finished for most users.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>The amount of time (ms) to migrate a v4 database to v5.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeDatabaseMigrationToV6" units="ms">
-  <obsolete>
-    Deprecated as of 04/2015. The migration has finished for most users.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>The amount of time (ms) to migrate a v5 database to v6.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeDatabaseMigrationToV7" units="ms">
-  <obsolete>
-    Deprecated as of 04/2015. The migration has finished for most users.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>The amount of time (ms) to migrate a v6 database to v7.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeDatabaseMigrationToV8" units="ms">
-  <obsolete>
-    Deprecated as of 04/2015. The migration has finished for most users.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>The amount of time (ms) to migrate a v7 database to v8.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeDatabaseMigrationToV9" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>The amount of time (ms) to migrate a v8 database to v9.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeGet" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time (ms) to get cookies for each URL request.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeInitializeDB" units="ms">
-  <owner>nyquist@chromium.org</owner>
-  <summary>The amount of time (ms) to initialize the cookies database.</summary>
-</histogram>
-
-<histogram name="Cookie.TimeInitializeDomainMap" units="ms">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    The amount of time (ms) to read and parse the domain map from the cookies
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeKeyLoadDBQueueWait" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    This histogram records the wall-clock delay between a priority load task
-    being posted to the DB-thread and its execution.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeKeyLoadTotalWait" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This histogram records the the total amount of time spent fetching the
-    cookies associated with an eTLD+1 from disk, including time spent waiting in
-    task queues.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeLoad" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    This histogram records the sum of the durations of all initial tasks loading
-    cookies from the database.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeLoadDBQueueWait" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This histogram records the wall-clock delay between the Load task being
-    posted to the DB-thread and its execution.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeLoadDomains" units="ms">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    The amount of time (ms) to read the domain map from the cookies database.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.TimeParseDomains" units="ms">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    The amount of time (ms) to parse the domains already loaded from the cookies
-    database and put them in the domain map.
-  </summary>
-</histogram>
-
-<histogram name="Cookie.Type" enum="CookieType">
-  <owner>mkwst@chromium.org</owner>
-  <summary>For each cookie added to the store, record it's type(s).</summary>
-</histogram>
-
-<histogram name="CopylessPaste.ExtractionUs" units="microseconds">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    The time spent on scanning the document in the main frame to extract the
-    metadata. The metadata would be used to feed Icing for CopylessPaste feature
-    on Android.
-  </summary>
-</histogram>
-
-<histogram name="Cras.StreamTimeoutMilliSeconds" units="ms">
-  <owner>hychao@chromium.org</owner>
-  <summary>
-    The longest additional time CRAS(Chrome OS audio server) ever waits for a
-    stream exceeding the timeout threshold. This value is recorded per stream
-    when it gets removed and used to investigate the audio glitch/skip problem
-    on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="CrashExitCodes.Extension" enum="CrashExitCodes">
-  <owner>wfh@chromium.org</owner>
-  <summary>The exit codes for crashed extension processes.</summary>
-</histogram>
-
-<histogram name="CrashExitCodes.Renderer" enum="CrashExitCodes">
-  <owner>wfh@chromium.org</owner>
-  <summary>The exit codes for crashed renderer processes.</summary>
-</histogram>
-
-<histogram name="Crashpad.CrashReportPending" enum="CrashpadReportPending">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>
-    The reason that a crash report entered the upload pending state.
-  </summary>
-</histogram>
-
-<histogram name="Crashpad.CrashReportSize" units="bytes">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>The size of a crash report minidump on disk when captured.</summary>
-</histogram>
-
-<histogram name="Crashpad.CrashUpload.AttemptSuccessful"
-    enum="CrashpadUploadAttemptStatus">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>Logs whether a crash uploaded succeeded or failed.</summary>
-</histogram>
-
-<histogram name="Crashpad.CrashUpload.Skipped"
-    enum="CrashpadUploadSkippedReason">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>The reason that a crash report upload was skipped.</summary>
-</histogram>
-
-<histogram name="Crashpad.ExceptionCaptureResult"
-    enum="CrashpadExceptionCaptureResult">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>The outcome of execution of the Crashpad exception handler.</summary>
-</histogram>
-
-<histogram name="Crashpad.ExceptionCode.Mac" enum="CrashpadMacExceptionCodes">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>The exception code encountered in a crash on Mac OS X.</summary>
-</histogram>
-
-<histogram name="Crashpad.ExceptionCode.Win" enum="CrashpadWinExceptionCodes">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>The exception code encountered in a crash on Windows.</summary>
-</histogram>
-
-<histogram name="Crashpad.ExceptionEncountered"
-    enum="CrashpadExceptionProcessingState">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>
-    A count of the number of exceptions handled by Crashpad with two buckets for
-    starting and finishing.
-  </summary>
-</histogram>
-
-<histogram name="Crashpad.HandlerCrash.ExceptionCode.Mac"
-    enum="CrashpadMacExceptionCodes">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>
-    The exception code encountered for a crash of the crash handler process on
-    Mac OS X.
-  </summary>
-</histogram>
-
-<histogram name="Crashpad.HandlerCrash.ExceptionCode.Win"
-    enum="CrashpadWinExceptionCodes">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>
-    The exception code encountered for a crash of the crash handler process on
-    Windows.
-  </summary>
-</histogram>
-
-<histogram name="Crashpad.HandlerLifetimeMilestone"
-    enum="CrashpadLifetimeMilestone">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>Handler start/crash/exit events.</summary>
-</histogram>
-
-<histogram name="CrashReport.BreakpadCrashDumpOutcome" enum="DumpOutcome">
-  <obsolete>
-    Deprecated as of 04/2016 as CrashPad does not implement this.
-  </obsolete>
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Reports the result of an attempt to report a crash dump via Breakpad.
-    Success indicates only that the out-of-process crash reporter succesfully
-    generated a dump. The success or failure of the eventual upload is not
-    measured. This stability metric is logged from the first Chrome launch
-    post-dump.
-  </summary>
-</histogram>
-
-<histogram name="CrashReport.BreakpadDumpWithoutCrashOutcome"
-    enum="DumpOutcome">
-  <obsolete>
-    Deprecated as of 04/2016 as CrashPad does not implement this.
-  </obsolete>
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Reports the result of an attempt to report a dump via Breakpad without
-    crashing. Success indicates only that the out-of-process crash reporter
-    succesfully generated a dump. The success or failure of the eventual upload
-    is not measured. This stability metric is logged from the first Chrome
-    launch post-dump.
-  </summary>
-</histogram>
-
-<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms">
-  <owner>olivierrobin@chromium.org</owner>
-  <owner>pkl@chromium.org</owner>
-  <summary>
-    Time delta between when the crash took place and when the crash was uploaded
-    by the app as a background task. Only logged on iOS.
-  </summary>
-</histogram>
-
-<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp">
-  <owner>olivierrobin@chromium.org</owner>
-  <owner>pkl@chromium.org</owner>
-  <summary>
-    The number of crash reports present when the app wakes up as a background
-    task to upload crash reports. Only logged on iOS.
-  </summary>
-</histogram>
-
-<histogram name="CrashReport.PermanentUploadFailure" enum="BooleanHit">
-  <obsolete>
-    Deprecated 01/2017 in Issue 680162 with the removal of Kasko.
-  </obsolete>
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Counts crash reports that the Kasko crash reporter fails to upload and hands
-    off to Chrome. Kasko stores the failed reports in a location specified by
-    Chrome. Chrome records this metric when it detects new minidump files in
-    that location. Currently the reports are discarded, but they could
-    eventually be uploaded via the Chrome network stack.
-  </summary>
-</histogram>
-
-<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget">
-  <obsolete>
-    Deprecated as of 12/2013. Default pinned apps trial is finished.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Chrome OS shelf clicks.</summary>
-</histogram>
-
-<histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The type of archive file that Chrome OS cros-disks daemon is requested to
-    mount.
-  </summary>
-</histogram>
-
-<histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The media type of removable device that Chrome OS cros-disks daemon is
-    requested to mount.
-  </summary>
-</histogram>
-
-<histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The type of file system that Chrome OS cros-disks daemon is requested to
-    mount.
-  </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.DialogShown">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Records the number of times when first-run dialog was shown.
-  </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.FurthestStep">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Index of furthest step that was reached during tutorial. Since order of
-    steps could change eventially and new steps could apear we use index here
-    instead of step name.
-  </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TimeSpent" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>The total time that user spent on first-run tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TimeSpentOnStep" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>The time that user spent on some step of tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TutorialCompletion"
-    enum="CrosFirstRunTutorialCompletionType">
-  <owner>alemate@chromium.org</owner>
-  <summary>Tracks the way how user left tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TutorialLaunched">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Records the number of times when first-run tutorial has been launched.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.ChecksumStatus" enum="CryptohomeChecksumStatus">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    Checksum status of critical persistent data used by Cryptohome. This status
-    is recorded every time the cryptohomed daemon reads a file.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.Errors" enum="CryptohomeError">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>Cryptohome errors.</summary>
-</histogram>
-
-<histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB">
-  <owner>oka@chromium.org</owner>
-  <summary>
-    The amount of drive cache (MB) which was evicted by cryptohome due to
-    shortage of remaining disk space.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.MigrationToGaiaId"
-    enum="CryptohomeMigrationToGaiaId">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    This is the status of cryptohome migration to GaiaId. Every time user logs
-    in current migration status is recorded.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToInitPkcs11" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome daemon to initialize the
-    PKCS#11. Initializations under 1 second represent checks on a previously
-    initialized PKCS#11, and should be discarded for analysis.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToMountAsync" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
-    directory asynchronously.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToMountGuestAsync" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
-    guest home directory asynchronously.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToMountGuestSync" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
-    guest home directory synchronously.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToMountSync" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
-    directory synchronously.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TimeToTakeTpmOwnership" units="ms">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    The amount of time (ms) for Chrome OS cryptohome daemon to take ownership of
-    the TPM.
-  </summary>
-</histogram>
-
-<histogram name="Cryptohome.TpmResults" enum="CryptohomeTpmResults">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The errors resulting from interacting with the Trusted Platform Module (TPM)
-    device.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.ClientAppId" enum="ClientAppId">
-  <owner>yusufo@chromium.org</owner>
-  <summary>
-    Android: AppId declared by the launching application in EXTRA_APPLICATION_ID
-    in a custom tab. This histogram is used as a means to count the total
-    instances of custom tabs created meanwhile binning them across launching
-    apps that have identified themselves.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms">
-  <obsolete>
-    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
-  </obsolete>
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Time between the intent arrival in Chrome and the first navigation commit,
-    if the navigation is successful. Similar in principle to
-    Startup.FirstCommitNavigationTime.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.IntentToFirstCommitNavigationTime2" units="ms">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Time between the intent arrival to a Custom Tab and the first navigation
-    commit, if the navigation is successful. Similar in principle to
-    Startup.FirstCommitNavigationTime. Non-&quot;Herb&quot; mode.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.IntentToPageLoadedTime" units="ms">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Time between the intent arrival in Chrome and the first &quot;page
-    loaded&quot; event, if the navigation is successful. Non-&quot;Herb&quot;
-    mode.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.MayLaunchUrlType" enum="MayLaunchUrlType">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Android only. Which flavors of mayLaunchUrl() were used before a tab launch.
-    Can be low and/or high confidence. Recorded at the same time as
-    CustomTabs.WarmupStateOnLaunch for the buckets &quot;Session, No Warmup,
-    Warmup called from another UID&quot;, &quot;Session, No Warmup&quot; and
-    &quot;Session, Warmup&quot;.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.NonDefaultSessionPrerenderMatched"
-    enum="BooleanMatched">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Android: When there is a prerender for a session with non-default
-    parameters, whether the prerender was matched when navigating.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.PredictionStatus" enum="PredictionStatus">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    For Custom Tabs, records whether mayLaunchUrl() has been called, and if so,
-    whether the call was later matched by a URL launch.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.PredictionToLaunch" units="ms">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    When a URL prediction succeeds, time in ms between the prediction and the
-    actual launch.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.PrerenderSessionUsesDefaultParameters"
-    enum="BooleanDefault">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Android: When prerendering a URL for Custom Tabs, whether the client session
-    uses the default parameters.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.Visible" enum="VisibleTab">
-  <owner>yusufo@chromium.org</owner>
-  <summary>
-    Recorded only for Android. Records on every metrics upload whether the
-    currently visible tab is a custom tab. The custom tab is launched by a
-    client app with customized UI. Some metrics like page load time will behave
-    differently for these tabs since it will be possible to warm up the browser
-    process and prepare resources for specific urls ahead of time via a service
-    connection. This histogram can be used to cluster these metric differently.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.WarmupStateOnLaunch" enum="WarmupStateOnLaunch">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Recorded only on Android. Reports whether warmup() has been called when a
-    Custom Tabs Intent is received from an application, and if so, whether the
-    call could be matched with a session.
-  </summary>
-</histogram>
-
-<histogram name="CustomTabs.WebContentsStateOnLaunch" enum="WebContentsState">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Android: When a CustomTabActivity creates its Tab, whether we use a
-    prerendered WebContents, a spare renderer or create a new WebContents.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.AutoLoFiAccuracy"
-    enum="DataReductionProxyAutoLoFiAccuracy">
-  <obsolete>
-    Replaced by DataReductionProxy.LoFi.Accuracy.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Counts the accuracy of estimated network quality when using Lo-Fi. Counters
-    are incremented when a main frame URL request is handled by Data Reduction
-    Proxy and session was in Auto Lo-Fi enabled field trial.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"
-    enum="DataReductionProxyAutoLoFiRequestHeaderState">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Counts the changes in the state of Lo-Fi request header (q=low) being added
-    to the Chrome proxy request header. Counters are incremented when a main
-    frame URL request is handled by Data Reduction Proxy and session was in Auto
-    Lo-Fi enabled field trial.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BlockTypeFallback"
-    enum="DataReductionProxyBypassType">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to block the fallback
-    configuration of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BlockTypePrimary"
-    enum="DataReductionProxyBypassType">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to block the primary configuration
-    of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassedBytes" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts the response bytes that did not go through the data reduction proxy
-    as the result of a bypass event.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassedBytes.NotBypassed" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts the response bytes that went through the data reduction proxy and
-    were not bypassed.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassInfoFallback"
-    enum="DataReductionProxyBypassEventType_Deprecated">
-  <obsolete>
-    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypeFallback.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to bypass the fallback
-    configuration of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassInfoPrimary"
-    enum="DataReductionProxyBypassEventType_Deprecated">
-  <obsolete>
-    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypePrimary.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to bypass the primary
-    configuration of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassOnNetworkErrorFallback"
-    enum="NetErrorCodes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Positive net error code that caused the fallback data reduction proxy to be
-    bypassed and put on the proxy retry list. Called after a failure to connect
-    or resolve a host name.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassOnNetworkErrorPrimary"
-    enum="NetErrorCodes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Positive net error code that caused the primary data reduction proxy to be
-    bypassed and put on the proxy retry list. Called after a failure to connect
-    or resolve a host name.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassTypeFallback"
-    enum="DataReductionProxyBypassType">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to bypass the fallback
-    configuration of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassTypePrimary"
-    enum="DataReductionProxyBypassType">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts various events that trigger Chrome to bypass the primary
-    configuration of the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.CaptivePortalDetected.Platform"
-    enum="BooleanPresent">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records if the platform detected that a captive portal is present on the
-    current network. Recorded at the time of Chrome startup and on IP change
-    event. Recorded only for users that have data saver enabled.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigFetchLostBytesCL">
-  <obsolete>
-    Removed in Feb. 2016
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body. This is the actual number of bytes received,
-    which usually agrees with but is not necessarily the same as the size
-    specified by the Content-Length header. Only recorded if the request is sent
-    while a simulated Data Reduction Proxy configuration fetch is taking place.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigFetchLostBytesDiff">
-  <obsolete>
-    Removed in Feb. 2016
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The difference between the size specified in the X-Original-Content-Length
-    header and the size of the response body. Only recorded if the request is
-    sent while a simulated Data Reduction Proxy configuration fetch is taking
-    place. Only positive values are logged, so if X-Original-Content-Length is
-    not specified or if it equals or exceeds the content length, it is not
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigFetchLostBytesOCL">
-  <obsolete>
-    Removed in Feb. 2016
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size specified in the X-Original-Content-Length header. If this header is
-    not present in the response, the size of the response body is used. Only
-    recorded if the request is sent while a simulated Data Reduction Proxy
-    configuration fetch is taking place.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.AuthExpired"
-    enum="BooleanExpired">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Total number of authentication required responses received from the Data
-    Reduction Proxy.
-
-    An &quot;Unexpired&quot; value is recorded every time a new client config is
-    fetched and parsed successfully. An &quot;Expired&quot; value is recorded
-    every time Chrome receives an authentication failure from the data saver
-    proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.AuthExpiredSessionKey"
-    enum="DataReductionProxyConfigServiceAuthExpiredSessionKey">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    On receiving an authentication failure from the data reduction proxy,
-    records whether the session key used in the request matches the current
-    session key.
-
-    Recorded every time Chrome receives an authentication failure from the data
-    saver proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.AuthFailure.LatencyPenalty"
-    units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Time from when the request starts to the time when the auth failure is
-    received from the data saver proxy.
-
-    Recorded every time an auth failure is received from the data saver proxy.
-  </summary>
-</histogram>
-
-<histogram
-    name="DataReductionProxy.ConfigService.FetchFailedAttemptsBeforeSuccess">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of failed attempts when retrieving the configuration from the
-    Data Reduction Proxy API before a successful attempt took place.
-
-    Recorded every time a new client config is fetched and parsed successfully.
-    If the device has a valid connection type but no Internet connectivity, this
-    count will keep increasing.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.FetchLatency" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Time from when the Data Reduction Proxy configuration request starts until
-    it completes.
-
-    Recorded every time a new client config is fetched and parsed successfully.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.FetchResponseCode"
-    enum="HttpResponseCode">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Count per HttpResponseCode when attempting to retrieve the Data Reduction
-    Proxy configuration from the Data Reduction Proxy API.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ConfigService.HTTPRequests"
-    enum="DataReductionProxyConfigServiceHTTPRequests">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Upper bound on the count of HTTP requests that did or did not go through the
-    data saver proxy.
-
-    An HTTP request may not go through data saver proxy if the config was
-    unavailable, due to local bypass rules, or due to server side bypasses. If
-    data saver is turned on, this metric is recorded every time proxy is
-    resolved for an HTTP request.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.DaysSinceEnabled" units="days">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the number of days since data reduction proxy was last enabled by
-    the user. Recorded only if the data reduction proxy was last enabled since
-    this metric was added to Chromium (M-56). Recorded at Chrome startup if data
-    reduction proxy is already enabled, and when the user enables the data
-    reduction proxy.
-  </summary>
-</histogram>
-
-<histogram
-    name="DataReductionProxy.DaysSinceSavingsCleared.NegativeSystemClock"
-    units="days">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the number of days since the data reduction savings were cleared
-    because the system clock moved back by more than 1 day. Recorded at Chrome
-    startup if data reduction proxy is enabled, and if the data reduction proxy
-    savings were cleared in some previous Chrome session.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.EnabledState"
-    enum="DataReductionProxyEnabledState">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    Samples of user interactions with the Data Saver settings menu across all
-    platforms (android, IOS, desktop extension). Data is collected whenever user
-    toggles the ON/OFF switch in the settings menu for reducing data usage.
-
-    For desktop, Off-to-On/On-to-Off histogram count will increment when the
-    data saver extension is installed/uninstalled respectively as well.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperDetectionHTTP">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    For each carrier, the total number of HTTP responses that have been checked
-    for tampering. This assumes the data reduction proxy injected fingerprints
-    have not been tampered with. Only the data reduction proxy responses with
-    200 OK response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    For each carrier, the total number of HTTPS responses that have been checked
-    for tampering. This assumes the data reduction proxy injected fingerprints
-    have not been tampered with. Only the data reduction proxy responses with
-    200 OK response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    For each carrier, the total number of HTTP responses that passed the tamper
-    detection. This assumes the data reduction proxy injected fingerprints have
-    not been tampered with. Only the data reduction proxy responses with 200 OK
-    response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    For each carrier, the total number of HTTPs responses that passed the tamper
-    detection. This assumes the data reduction proxy injected fingerprints have
-    not been tampered with. Only the data reduction proxy responses with 200 OK
-    response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperedHTTP">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of HTTP responses that some part (specified by suffix name)
-    have been tampered with. This assumes the data reduction proxy injected
-    fingerprints have not been tampered with. Only the data reduction proxy
-    responses with 200 OK response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HeaderTamperedHTTPS">
-  <owner>xingx@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of HTTPS responses that some part (specified by suffix
-    name) have been tampered with. This assumes the data reduction proxy
-    injected fingerprints have not been tampered with. Only the data reduction
-    proxy responses with 200 OK response code are checked.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.HistoricalDataUsageLoadTime" units="ms">
-  <owner>kundaji@chromium.org</owner>
-  <summary>
-    Time taken to load historical data usage from Level DB into memory. This UMA
-    is reported each time the method to load historical data usage is called,
-    which happens when user views data usage history.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LevelDBOpenStatus"
-    enum="DataReductionProxyStoreStatus">
-  <owner>kundaji@chromium.org</owner>
-  <summary>Status of calling Open() on Data Reduction Proxy LevelDB.</summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LevelDBSize" units="KB">
-  <owner>kundaji@chromium.org</owner>
-  <summary>Size of Data Reduction Proxy LevelDB measured at startup.</summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LoFi.Accuracy"
-    enum="DataReductionProxyAutoLoFiAccuracy">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the accuracy of estimated network quality when using Lo-Fi. Network
-    quality predicted at the time of navigation start is compared with the
-    network quality observed during the specified time interval following the
-    start of the navigation. This metric is recorded only when the session is in
-    Lo-Fi enabled field trial.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"
-    enum="DataReductionProxyLoFiImplicitOptOutAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts of Lo-Fi implicit opt out actions. If the user chooses to &quot;Load
-    image&quot; for k pages in a session, LoFi is disabled for the remainder of
-    that session. If Lo-Fi is disabled for j consecutive sessions, Lo-Fi is
-    disabled for that user until the next implicit opt out epoch, which may be
-    in a later session, or never. k and j default to 3 and are assigned via the
-    DataReductionProxyLoFi field trial.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LoFi.SessionState"
-    enum="DataReductionProxyLoFiSessionState">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Tracks Lo-Fi usage at the granularity of browser sessions. Counts for each
-    session if Lo-Fi was used or not. In the case where Lo-Fi was not used,
-    records if it was because the network quality was always good or because the
-    user had implicitly opted out. The session where a user permanently opts out
-    is counted in the Lo-Fi used bucket.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LoFi.TransformationType"
-    enum="DataReductionProxyLoFiTransformationType">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts of pageloads that received or requested, but did not receive, various
-    Lo-Fi lite page transformations. Recorded when a lite page is requested or
-    received through Data compression proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.LoFi.UIAction"
-    enum="DataReductionProxyLoFiUIAction">
-  <obsolete>
-    Deprecated as of 9/2016, replaced by Previews.ContextMenuAction.LoFi.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    User interactions with the Lo-Fi snackbar and context menu option. These
-    include:
-
-    Displays and clicks on the &quot;Load images&quot; snackbar. Displays and
-    clicks on the &quot;Load image&quot; and &quot;Load images&quot;context menu
-    options. Count of pages where the user has clicked &quot;Load image&quot; at
-    least once.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.MissingViaHeader.Bytes" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <owner>sclittle@chromium.org</owner>
-  <summary>
-    Counts the response bytes of responses that Chrome expected to come through
-    a data reduction proxy and have the data reduction proxy via header, but
-    where the data reduction proxy via header was missing. Note that this does
-    not include responses that were bypassed.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.MissingViaHeader.ResponseCode">
-  <owner>bengr@chromium.org</owner>
-  <owner>sclittle@chromium.org</owner>
-  <summary>
-    Counts the different HTTP response codes of responses that Chrome expected
-    to come through a data reduction proxy and have the data reduction proxy via
-    header, but where the data reduction proxy via header was missing.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.NetworkChangeEvents"
-    enum="DataReductionProxyNetworkChangeEvent">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Counts the number of times various events occur when the data reduction
-    proxy is enabled and the IP address of the client changes.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.Pingback.Attempted" enum="BooleanAttempted">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    Counts the number of times that pageload metrics were queued to be attempted
-    or not queued based on the reporting fraction. Recorded once per pageload.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.Pingback.Succeeded" enum="BooleanSuccess">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    Counts the number of times that a batched pingback request succeeded or
-    failed at being sent to the server. Recorded everytime a pingback request is
-    attempted.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ProbeURL"
-    enum="DataReductionProxyProbeURLFetchResult">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Counts various outcomes of requesting the data reduction proxy's probe URL.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ProbeURLNetError" enum="NetErrorCodes">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Reports the type of network error when the data reduction proxy probe fails
-    due to a network error.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.PromoAction"
-    enum="DataReductionProxyPromoAction">
-  <obsolete>
-    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Samples which method was used by the user to dismiss the proxy promo. This
-    is sampled when the promo leaves view, with the sampled value depending on
-    which of four possible controls the user used.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ProxyPrefMigrationResult"
-    enum="DataReductionProxyProxyPrefMigrationResult">
-  <owner>sclittle@chromium.org</owner>
-  <summary>
-    Records the result of migrating the Data Reduction Proxy away from being
-    configured via a proxy preference, including cases when no migration action
-    was taken.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ProxySchemeUsed"
-    enum="DataReductionProxyProxySchemeUsed">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the scheme of the data reduction proxy server. Recorded for every
-    request that is fetched successfully through a data reduction proxy server.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.Quic.DefaultAlternativeProxy"
-    enum="DataReductionProxyQuicDefaultAlternativeProxy">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Status of the availability of valid alternative data reduction proxy
-    servers. This metric is recorded only when data reduction proxy delegate is
-    queried for the value of the supported alternative proxy server.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.Quic.OnAlternativeProxyBroken"
-    units="count">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Number of times an alternative QUIC proxy was marked as broken.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.Quic.ProxyStatus"
-    enum="DataReductionProxyQuicProxyStatus">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the result of the attempt to use a data reduction proxy that
-    supports QUIC. The metric is logged for every request for which the resolved
-    proxy is a data reduction HTTPS proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.RequestCompletionErrorCodes"
-    enum="NetErrorCodes">
-  <obsolete>
-    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
-    codes when it should have been recorded, and
-    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
-    filtering for clients with the Data Reduction Proxy enabled.
-  </obsolete>
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Reports the different network errors that requests that try to use the data
-    reduction proxy are completing with, including OK and ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"
-    enum="NetErrorCodes">
-  <obsolete>
-    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
-    codes when it should have been recorded, and
-    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
-    filtering for clients with the Data Reduction Proxy enabled.
-  </obsolete>
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Reports the different network errors that main frame resource requests that
-    try to use the data reduction proxy are completing with, including OK and
-    ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ResourceContentType"
-    enum="DataReductionProxyResourceContentType">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Content type of the resource determined by data reduction proxy. Used for
-    determining the data reduction proxy that should be used for fetching the
-    resource. Logged once per resource for only the resources that are eligible
-    for fetching by data reduction proxies.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ResponseProxyServerStatus"
-    enum="DataReductionProxyResponseProxyServerStatus">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Reports the state of the proxy server field in the response seen by the Data
-    Reduction Proxy bypass logic.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SavingsCleared.NegativeSystemClock"
-    enum="BooleanCleared">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records if the data reduction savings were cleared because the system clock
-    moved back by more than 1 day. Recorded at Chrome startup if the data
-    reduction proxy is enabled.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SecureProxyCheck.Latency" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Time from when the Data Reduction Proxy secure proxy check starts until it
-    completes.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SettingsConversion"
-    enum="DataReductionProxySettingsConversion">
-  <obsolete>
-    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Samples of user interactions with the ON/OFF switch in the settings menu for
-    reducing data usage. Only the setting changes between entering the reducing
-    data usage setting menu and leaving the menu will be sampled. So if a user
-    enters the menu with OFF and leaves it with OFF, it is counted as one OFF to
-    OFF conversion regardless of how many times they toggle the ON/OFF switch.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SnackbarPromo.DataSavings" units="MB">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Logs the data savings in MB of the data reduction proxy snackbar promo that
-    was shown. The snackbar promo shows the user the amount of data Chrome has
-    saved them using Data Saver.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.StartupState"
-    enum="DataReductionProxyStartupState">
-  <owner>bengr@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    Samples of the state of the data reduction proxy on Chrome startup. The
-    proxy will either be unavailable (the feature hasn't been rolled out to this
-    user yet), not enabled (the feature is available but the user doesn't have
-    it turned on), or enabled (the feature is enabled and turned on).
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SuccessfulRequestCompletionCounts"
-    units="count">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Count of the number of requests that were successfully fetched via data
-    reduction proxy. The bucket represents the index of the data reduction proxy
-    in the data reduction proxy list.
-  </summary>
-</histogram>
-
-<histogram
-    name="DataReductionProxy.SuccessfulRequestCompletionCounts.MainFrame"
-    units="count">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Count of the number of main frame requests that were successfully fetched
-    via data reduction proxy. The bucket represents the index of the data
-    reduction proxy in the data reduction proxy list.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.TimeToFirstDataSaverRequest" units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the time duration between the data saver initialization and the
-    first HTTP request that is resolved through the data saver proxy. On IP
-    address changes, time duration between the IP address change event and the
-    next subsequent HTTP request that resolves through the data saver proxy is
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.UIAction" enum="DataReductionProxyUIAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Samples of user interactions with the Data Reduction Proxy promos, First Run
-    Experience, and settings menu. All samples are mutually exclusive. These
-    samples include:
-
-    The user interactions with the second run promo. On Android, there are three
-    actions that dismiss this promo (enable, dismiss, and learn more) and on iOS
-    there is a toggle to enable the proxy. This is sampled when the promo leaves
-    view. If the user clicks the link to the settings menu, the state of the
-    ON/OFF switch in the menu is sampled when the view is exited.
-
-    Any other user interaction with the the ON/OFF switch in the settings menu
-    for reducing data usage. Only the setting changes between entering the
-    reducing data usage setting menu and leaving the menu will be sampled
-    regardless of how many times they toggle the ON/OFF switch. Other samples
-    that report ON/OFF settings menu changes are not also reported here.
-
-    The user interactions with the First Run Experience. On Android when the
-    user sees the FRE card, the Data Reduction Proxy defaults to ON. The user
-    can disable the proxy via a switch on the card. The state of the proxy is
-    sampled when the First Run Experience is completed and only reported if the
-    Data Reduction Proxy card was shown.
-
-    The user interactions with the Infobar promo. On Android, there are two
-    actions that dismiss the promo (enable, dismiss). This is sampled when the
-    promo leaves view.
-
-    The user interactions with the Snackbar promo. The user can either ignore
-    the promo or click the action to the Settings menu. From the settings menu,
-    the user may enable or disable the proxy.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.UserViewedOriginalSize" units="KB">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    The total original content size displayed to the user. Computed over the
-    last 30 days. Recorded when the user views the data savings in the UI.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.UserViewedSavingsPercent" units="%">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    The percentage of data savings displayed to users. Computed over the last 30
-    days. Recorded when the user views the data savings in the UI.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.UserViewedSavingsSize" units="KB">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    The total data saved displayed to the user. Computed over the last 30 days.
-    Recorded when the user views the data savings in the UI.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.WarmupURL.FetchInitiated" units="count">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Number of times the data reduction proxy warm up URL was fetched.
-  </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.WarmupURL.FetchSuccessful"
-    enum="BooleanSuccess">
-  <owner>tbansal@chromium.org</owner>
-  <summary>Whether the warm up URL was fetched succesfully.</summary>
-</histogram>
-
-<histogram name="DataUsage.MatchingRulesCount.Invalid" units="count">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The number of invalid matching rules fetched from the platform external data
-    use observer. A sample is recorded everytime fetch done callback is called.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.MatchingRulesCount.Valid" units="count">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The number of valid matching rules fetched from the platform external data
-    use observer. A sample is recorded everytime fetch done callback is called.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.Perf.MatchingRuleFirstFetchDuration" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The time taken in milliseconds to fetch the matching rules for the first
-    time from the platform external data use observer. This measures the
-    duration from the start time of Chromium to the time the rules are returned
-    asynchronously. A sample is recorded when the first fetch done callback is
-    called.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.Perf.ReportSubmissionDuration" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The time taken in milliseconds to submit the data use reports to the
-    platform external data use observer. This measures the duration from the
-    time of report submission to the time report submission done asynchronous
-    callback is received. A sample is recorded everytime report submission done
-    callback is received.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.Perf.URLRegexMatchDuration" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The time taken in milliseconds for a regular expression to parse an URL. A
-    sample is recorded evertime regular expression parsing is done for an URL.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.ReportSubmission.Bytes" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Count of bytes in the data use reports that were intended to be submitted to
-    the platform external data use observer.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.ReportSubmissionResult"
-    enum="DataUsageReportSubmissionResult">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>Result of data usage report submission.</summary>
-</histogram>
-
-<histogram name="DataUsage.TabModel.ExpiredActiveTabEntryRemovalDuration"
-    units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The duration from the start time of a tab entry's latest data usage tracking
-    session, till when the entry is expired and removed from the tab model. This
-    is for tab entries that are still actively tracking data usage for a
-    Chromium tab.
-
-    Tab model maintains the tab entries, each pertaining to tracking sessions of
-    a single Chromium tab. These entries are considered expired after some
-    duration and can be removed from the tab model after that. The sample is
-    taken when an expired tab entry still tracking data usage is removed from
-    the tab model.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.TabModel.ExpiredInactiveTabEntryRemovalDuration"
-    units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The duration from the end time of a tab entry's latest data usage tracking
-    session, till when the entry is expired and removed from the tab model. This
-    is for tab entries that are not actively tracking data usage for a Chromium
-    tab.
-
-    Tab model maintains the tab entries, each pertaining to tracking sessions of
-    a single Chromium tab. These entries are considered expired after some
-    duration and can be removed from the tab model after that. The sample is
-    taken when an expired inactive tab entry is removed from the tab model.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.TabModel.OldInactiveSessionRemovalDuration"
-    units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The duration from the end time of a data usage tracking session, till when
-    the tracking session is removed from the tab model. This is for old tracking
-    sessions that are not actively tracking data usage.
-
-    Tab model maintains a limited number of tracking sessions per Chromium tab.
-    When this limit is reached oldest inactive tracking sessions are removed.
-    The sample is taken when an old inactive tracking session of a tab is
-    removed from the tab model.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.TabModel.TrackingSessionLifetime" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The lifetime of a data usage tracking session of a Chromium tab, maintained
-    by the tab model. This is the duration between the time tracking started due
-    to an entry event and ended with an exit event. The sample is taken when the
-    data usage tracking session ends.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.TabModel.UnexpiredTabEntryRemovalDuration"
-    units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The duration from the end time (start time, if still active) of a tab
-    entry's latest data usage tracking session, till when the entry is removed
-    from the tab model. This is for tab entries that are not expired yet, and
-    removed from the tab model.
-
-    Tab model maintains a limited number of entries, each pertaining to tracking
-    sessions of a single Chromium tab. When this limit is reached even after
-    removing expired tab entries, then oldest unexpired tab entries are removed.
-    The sample is taken when an unexpired tab entry is removed from the tab
-    model.
-  </summary>
-</histogram>
-
-<histogram name="DataUsage.UIAction" enum="DataUsageUIAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    Samples of user interactions with the Data Use snackbar and dialog. These
-    samples include:
-
-    Displays of the snackbar that indicates the start of data use tracking and
-    clicks on its &quot;More&quot; button. Displays of snackbar that indicates
-    the end of data use tracking and clicks on its &quot;More&quot; button.
-    Displays of the dialog that indicates the end of data use tracking and the
-    user interactions with it, which include: clicking &quot;Continue&quot;,
-    clicking &quot;Cancel&quot;, clicking &quot;Learn more&quot;, and opting out
-    of seeing the dialog. If the user opts out of seeing the dialog, they will
-    see the snackbar that indicates the end of data use tracking from then on.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.AppTabState" units="bytes">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the data use of Chrome user traffic by the foregound vs. background
-    state of the app and tab.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.BackgroundToDataRecievedPerByte" units="ms">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The time since Chrome is in background when background data use happens.
-    Recorded for each byte of background data use. The source of traffic whether
-    from user browsing or chrome services is added as suffix to this histogram.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.BackgroundToFirstDownstream" units="ms">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The time since Chrome is in background when first background data use
-    happens. Recorded when first background downstream data use after Chrome is
-    in background. The source of traffic whether from user browsing or chrome
-    services is added as suffix to this histogram.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.BytesReceived" units="bytes">
-  <owner>tbansal@chromium.org</owner>
-  <summary>Count of total bytes received by the Chrome on the network.</summary>
-</histogram>
-
-<histogram name="DataUse.BytesSent" units="bytes">
-  <owner>tbansal@chromium.org</owner>
-  <summary>Count of total bytes sent by the Chrome on the network.</summary>
-</histogram>
-
-<histogram name="DataUse.ContentType.Services" enum="DataUseContentType"
-    units="bytes">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Data use of Chrome services traffic by different content types. Recorded
-    when network bytes are received by Chrome.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.ContentType.UserTraffic" enum="DataUseContentType"
-    units="bytes">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Data use of user traffic by different content types. Recorded when network
-    bytes are received by Chrome.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.MessageSize" units="bytes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The request and reponse size of the messages exchanged by a service. It is
-    logged when the URLReqeust of a service is completed. The service name is
-    added as a suffix to this histogram name.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.MessageSize.AllServices" enum="DataUseServices">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The request and reponse size of the messages exchanged by all the services.
-    Whenever a URLRequest of a service is completed, the number of exchanged
-    bytes is logged in this histogram. The buckets in this histogram are
-    services, so it makes it possible to compare the use of different services
-    in different conditions. Different conditions are added as suffixes to this
-    histogram. If the OS is not Android all the requests are considered
-    foreground.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.Sync.Download.Bytes" enum="SyncModelTypes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of downloaded bytes of different data types in Sync service for
-    received updates. It is updated when an update message is received from sync
-    server.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.Sync.Download.Count" enum="SyncModelTypes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of downloaded entities of different data types in Sync service for
-    received updates. It is updated when an update message is received from sync
-    server.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.Sync.ProgressMarker.Bytes" enum="SyncModelTypes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of downloaded bytes of ProgressMarker of different data types in Sync
-    service for received updates. It is updated when an update message is
-    received from sync server.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.Sync.Upload.Bytes" enum="SyncModelTypes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of uploaded bytes of different data types in Sync service for sent
-    commits. Updated when a commit message is sent to sync server.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.Sync.Upload.Count" enum="SyncModelTypes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of uploaded entities of different data types in Sync service for sent
-    commits. Updated when a commit message is sent to sync server.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.TrafficSize.System" units="bytes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total data use of Chrome's services. There is no ResourceRequestInfo
-    attached to these requests. If the OS is not Android all the requests are
-    considered foreground.
-  </summary>
-</histogram>
-
-<histogram name="DataUse.TrafficSize.User" units="bytes">
-  <owner>amohammadkhan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total amount of data use of Chrome for user traffic. This traffic has
-    content::ResourceRequestInfo attached to its request. If the OS is not
-    Android all the requests are considered foreground.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.ActivateSettings.ErrorHresult" enum="Hresult">
-  <owner>pmonette@chromium.org</owner>
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The HRESULT from ActivateApplication when opening the Win10+ settings page
-    fails.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.AsyncSetAsDefault.Duration" units="ms">
-  <obsolete>
-    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultAsyncDuration.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    How long it took to set Chrome as the default browser asynchronously in
-    Windows 10+. The duration is recorded only on Success, Failure, Abandoned
-    and Retry result codes.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.AsyncSetAsDefault.Result"
-    enum="DefaultBrowserAsyncAttemptResult">
-  <obsolete>
-    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultResult.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The count of how many times users were successfully able to set Chrome as
-    the default browser asynchronously in Windows 10+.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.InfoBar.UserInteraction"
-    enum="DefaultBrowserInfoBarUserInteraction">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    Possible user interactions with the default browser info bar.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.InteractionResult"
-    enum="MakeChromeDefaultResult">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Results of interaction with set-as-default dialog in Win8+ first run flow.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.SetDefaultAsyncDuration" units="ms">
-  <obsolete>
-    Deprecated 2016/03. The async set-as-default experiments are finished.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    How long it took to set Chrome as the default browser asynchronously in
-    Windows 10+. The duration is recorded only on Success, Failure, Abandoned,
-    Retry and NoErrorsNotDefault result codes.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.SetDefaultResult"
-    enum="SetDefaultAttemptResult">
-  <obsolete>
-    Deprecated 2016/03.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The outcome of an attempt to set Chrome as the user's default browser.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.SetDefaultResult2" enum="DefaultWebClientState">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The outcome of an attempt to set Chrome as the user's default browser.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.SettingsInteraction.ConcludeReason"
-    enum="SettingsInteractionConcludeReason">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The reason why the default browser settings interaction concluded on Windows
-    10.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.SettingsInteraction.RegistryWatcherDuration"
-    units="ms">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The registry keys for the default browser protocols (http/https) are
-    monitored to know when the user finished interacting with the system
-    settings. This is how long it took for the last registry watcher to get
-    signaled.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowser.State" enum="DefaultBrowserState">
-  <owner>gab@chromium.org</owner>
-  <summary>Whether Chrome was the default browser when it started up.</summary>
-</histogram>
-
-<histogram name="DefaultBrowserWarning.DontSetAsDefault" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2015/11. The same information is available as the value Failure
-    in DefaultBrowser.SetDefaultResult.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    In the make-default infobar, the user explicitly declined to set Chrome as
-    default. Or, on OSes requiring the SetAsDefaultUI, the user explicitly chose
-    another browser as default from the interactive UI. TODO(gab): Split the
-    interactive signal into a separate histogram.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowserWarning.Ignored" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2015/11. Renamed to DefaultBrowser.InfoBar.UserInteraction.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The user ignored the make-default infobar (it was eventually dismissed along
-    with its associated web content without the user interacting with it).
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowserWarning.SetAsDefault" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
-    is no longer a distinction between interactive or not.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    In the make-default infobar, the user clicked a button making Chrome the
-    default.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowserWarning.SetAsDefaultUI" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
-    is no longer a distinction between interactive or not.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Same as SetAsDefault, but in Win8+ (resulting in interactive UI instead of
-    automatic takeover). Successes == these reports minus reports for
-    DefaultBrowserWarning.SetAsDefaultUIFailed and some
-    DefaultBrowserWarning.DontSetAsDefault. TODO(gab): Improve reporting here.
-  </summary>
-</histogram>
-
-<histogram name="DefaultBrowserWarning.SetAsDefaultUIFailed" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2015/11. The same information is available as the value Failure
-    in DefaultBrowser.SetDefaultResult.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The user dismissed the interactive SetAsDefaultUI without making an explicit
-    choice (or the UI failed to come up for another reason).
-  </summary>
-</histogram>
-
-<histogram name="DefaultProtocolClient.SetDefaultResult"
-    enum="SetDefaultAttemptResult">
-  <obsolete>
-    Deprecated 2016/03.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The outcome of an attempt to set Chrome as the user's default client for a
-    protocol.
-  </summary>
-</histogram>
-
-<histogram name="DefaultProtocolClient.SetDefaultResult2"
-    enum="DefaultWebClientState">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The outcome of an attempt to set Chrome as the user's default client for a
-    protocol.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.DismissalReason"
-    enum="DesktopIOSPromotionDismissalReason">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    The dimissal reason of the desktop to iOS promotion entry point.
-    DismissalReason will be prefixed by the entry point promotion name that the
-    user interacted with.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.ImpressionFromEntryPoint"
-    enum="DesktopIOSPromotionEntryPoint">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    The type of the desktop to iOS promotion that was shown to the user. This
-    will be logged every time the user sees the desktop to iOS promotion.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.IOSSigninReason"
-    enum="DesktopIOSPromotionEntryPoint">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    [IOS] For users who sign-in on Chrome for iOS, log the type of the desktop
-    iOS promotions that was shown to the user. Only recorded if the user has
-    seen at least one desktop iOS promotion in the last 7 days and is signing
-    into chrome on iOS. The last promotion entry point that sent an SMS (if any)
-    is logged as DesktopIOSPromotion.SMSSent.IOSSigninReason; all other
-    promotions that the user has seen are logged as
-    DesktopIOSPromotion.NoSMS.IOSSigninReason.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.OAuthTokenCompletion"
-    enum="BooleanSuccess">
-  <owner>justincohen@chromium.org</owner>
-  <summary>
-    Whether getting the OAuth token was successful for a desktop to iOS
-    promotion query.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.OAuthTokenResponseCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>justincohen@chromium.org</owner>
-  <summary>
-    HTTP Response code returned by the server when trying to fetch the OAuth
-    token for a desktop ios promotion query.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.QueryPhoneNumberSucceeded"
-    enum="BooleanSuccess">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    Whether the SMS service api called from the desktop to iOS promotion
-    returned a phone number or failed. This phone number is presented to the
-    user so they know that Chrome will send the SMS to this number.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.SendSMSSucceeded" enum="BooleanSuccess">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    Whether the SMS service api initiated SMS sending successfully from the
-    desktop to iOS promotion.
-  </summary>
-</histogram>
-
-<histogram name="DesktopIOSPromotion.SMSToSigninTime" units="hours">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    [IOS] The difference between the client time of triggering the SMS action on
-    a specific entry point promotion on desktop and client time of signing in
-    Chrome iOS app. This will only be logged if at least one promotion was shown
-    to the user on the last 7 days and if at least one SMS was sent. If multiple
-    SMSs were sent (at any time), it uses the time from the most recently sent
-    one. If the  is negative due to bad clock on one of the clients it will be
-    logged as 0. SMSToSigninTime will be prefixed by the entry point promotion
-    name that was responsible for the SMS sending.
-  </summary>
-</histogram>
-
-<histogram base="true" name="DesktopIOSPromotion.VariationSigninReason">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    [IOS] For users who sign-in on Chrome for iOS, log which variation of the
-    desktop iOS promotions was shown to the user. The variation number is a
-    unique identifier that is set for each group on the DesktopIOSPromotion
-    study, and will be only recorded if the user has seen at least one desktop
-    iOS promotion in the last 7 days and is signing into Chrome on iOS. The last
-    variation that sent an SMS (if any) is logged as
-    DesktopIOSPromotion.SMSSent.VariationSigninReason. If no SMS was sent, then
-    the last variation the user has seen is logged as
-    DesktopIOSPromotion.NoSMS.VariationSigninReason.
-  </summary>
-</histogram>
-
-<histogram name="DevTools.ActionTaken" enum="DevToolsAction">
-  <owner>alph@chromium.org</owner>
-  <owner>pfeldman@chromium.org</owner>
-  <summary>Specified DevTools action has been taken.</summary>
-</histogram>
-
-<histogram name="DevTools.InspectElement" units="ms">
-  <owner>alph@chromium.org</owner>
-  <owner>pfeldman@chromium.org</owner>
-  <summary>
-    Time to load Developer Tools when user clicks Inspect Element in the context
-    menu.
-  </summary>
-</histogram>
-
-<histogram name="DevTools.PanelShown" enum="DevToolsPanel">
-  <owner>alph@chromium.org</owner>
-  <owner>pfeldman@chromium.org</owner>
-  <summary>Specified DevTools panel was shown.</summary>
-</histogram>
-
-<histogram name="DevTools.SettingChanged" enum="DevToolsSetting">
-  <owner>alph@chromium.org</owner>
-  <owner>pfeldman@chromium.org</owner>
-  <summary>Specified DevTools setting was changed.</summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.DiskSpace" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the DiskSpace recovery step that runs
-    on recovery startups.  The recovery step attempts to guarantee the DiskSpace
-    test, which checks that the disk space in the volume where the user data
-    directory normally lives is not dangerously low, would pass on the next
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.InstallType" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONBookmarks" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the JSONBookmarks recovery step that
-    runs on recovery startups. The recovery step attempts to guarantee the
-    JSONBookmarks test, which makes sure that the JSON-encoded Bookmarks file is
-    properly formed, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONLocalState" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the JSONLocalState recovery step that
-    runs on recovery startups. The recovery step attempts to guarantee the
-    JSONLocalState test, which makes sure that the JSON-encoded Local State file
-    is properly formed, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONPreferences" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the JSONPreferences recovery step
-    that runs on recovery startups. The recovery step attempts to guarantee the
-    JSONPreferences test, which makes sure that the JSON-encoded Preferences
-    file is properly formed, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathDictionaries"
-    enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the PathDictionaries recovery step
-    that runs on recovery startups. The recovery step attempts to guarantee the
-    PathDictionaries test, which makes sure that the path to the Dictionaries
-    directory exists and has the right permissions, would pass on the next
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathLocalState" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the PathLocalState recovery step that
-    runs on recovery startups. The recovery step attempts to guarantee the
-    PathLocalState test, which makes sure that the path to the Local State file
-    exists and has the right permissions, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathResources" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the PathResources recovery step that
-    runs on recovery startups. The recovery step attempts to guarantee the
-    PathResources test, which makes sure that the path to the Resources
-    directory exists and has the right permissions, would pass on the next
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathUserData" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the PathUserData recovery step that
-    runs on recovery startups. The recovery step attempts to guarantee the
-    PathUserData test, which makes sure that the path to the User Data directory
-    exists and has the right permissions, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityAppCache"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityAppCache recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityAppCache test, which checks the integrity of
-    the App Cache database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityArchivedHistory"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Removed as of Jun 2014: we no longer have an archived database.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
-    recovery step that runs on recovery startups. The recovery step attempts to
-    guarantee the SQLiteIntegrityArchivedHistory test, which checks the
-    integrity of the Archived History database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityCookie"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityCookie recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityCookie test, which checks the integrity of the
-    Cookie database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityDatabaseTracker"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
-    recovery step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityDatabaseTracker test, which checks the
-    integrity of the Database Tracker database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityFavicons"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityFavicons recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityFavicons test, which checks the integrity of
-    the Favicons database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityHistory"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityHistory recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityHistory test, which checks the integrity of the
-    History database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSCert"
-    enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityNSSCert recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityNSSCert test, which checks the integrity of the
-    NSS Certificate database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSKey"
-    enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityNSSKey recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityNSSKey test, which checks the integrity of the
-    NSS Key database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityThumbnails"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityThumbnails
-    recovery step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityThumbnails test, which checks the integrity of
-    the Thumbnails database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityTopSites"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityTopSites recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityTopSites test, which checks the integrity of
-    the TopSites database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityWebData"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityWebData recovery
-    step that runs on recovery startups.  The recovery step attempts to
-    guarantee the SQLiteIntegrityWebData test, which checks the integrity of the
-    Web Data database, would pass on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.Version" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.RecoveryRun" enum="DiagnosticsRecoveryRun">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of the number of times diagnostics recovery is invoked or not, and how
-    it was invoked.  A sample is added to this histogram once for each startup
-    of Chrome.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.DiskSpace" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the DiskSpace test
-    that runs on recovery startups.  The DiskSpace test checks that the disk
-    space in the volume where the user data directory normally lives is not
-    dangerously low.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.InstallType" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONBookmarks" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the JSONBookmarks
-    test that runs on recovery startups.  The JSONBookmarks test checks to make
-    sure that the JSON encoded bookmarks file is properly formed.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONLocalState" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the JSONLocalState
-    test that runs on recovery startups.  The JSONLocalState test checks to make
-    sure that the JSON encoded Local State file is properly formed.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONPreferences" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the JSONPreferences
-    test that runs on recovery startups.  The JSONPreferences test checks to
-    make sure that the Preferences file is properly formed.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathDictionaries" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the PathDictionaries
-    test that runs on recovery startups.  The PathDictionaries test checks makes
-    sure that the path to the Dictionaries folder exists and has the right
-    permissions.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathLocalState" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the PathLocalState
-    test that runs on recovery startups.   The PathLocalState test checks makes
-    sure that the path to the Local State folder exists and has the right
-    permissions.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathResources" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the PathResources
-    test that runs on recovery startups.  The PathResources test checks makes
-    sure that the path to the Resources folder exists and has the right
-    permissions.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathUserData" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of diagnostics for the PathUserData test
-    that runs on recovery startups. The PathUserData test checks makes sure that
-    the path to the User Data folder exists and has the right permissions.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityAppCache"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityAppCache test that
-    runs on recovery startups.  The test checks the integrity of the App Cache
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityArchivedHistory"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Removed as of Jun 2014: we no longer have an archived database.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
-    test that runs on recovery startups.  The test checks the integrity of the
-    Archived History database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityCookie"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityCookie test that
-    runs on recovery startups.  The test checks the integrity of the Cookie
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityDatabaseTracker"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
-    test that runs on recovery startups.  The test checks the integrity of the
-    Database Tracker database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityFavicons"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityFavicons test that
-    runs on recovery startups.  The test checks the integrity of the Favicons
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityHistory"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityHistory test that
-    runs on recovery startups.  The test checks the integrity of the History
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityNSSCert"
-    enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityNSSCert test that
-    runs on recovery startups.  The test checks the integrity of the NSS
-    Certificate database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityNSSKey"
-    enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityNSSKey test that
-    runs on recovery startups.  The test checks the integrity of the NSS Key
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityThumbnails"
-    enum="DiagnosticsResult">
-  <obsolete>
-    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityThumbnails test
-    that runs on recovery startups.  The test checks the integrity of the
-    Thumbnails database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityTopSites"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityTopSites test that
-    runs on recovery startups.  The test checks the integrity of the TopSites
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityWebData"
-    enum="DiagnosticsResult">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Shows the success and failure rates of the SQLiteIntegrityWebData test that
-    runs on recovery startups.  The test checks the integrity of the Web Data
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.Version" enum="DiagnosticsResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    TBD - Not run automatically yet, so this is just a placeholder for future
-    metrics collection.  Any samples collected here represent users running
-    diagnostics manually.
-  </summary>
-</histogram>
-
-<histogram name="Diagnostics.TestFailures" enum="DiagnosticsTestName">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Histogram comparing the various types of diagnostic test failures when
-    diagnostic tests are run.  Note that some types of test failures cause the
-    rest of the tests to be skipped.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.BuildCache.File.Size" units="KB">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Reports size of font cache file. This is reported every time we rebuild font
-    cache.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.BuildCache.Ignored">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Reports the total number of fonts that will be ignored while building static
-    font cache due to size limitation. During cache building phase if our logic
-    suggests that we need to put more than 70% of font file contents into cache
-    file then we don't cache that particular font file. These ignored font files
-    are directly picked up from system fonts folder during Direct Write cache
-    building process. Our end goal is to minimize costly open and close
-    operations on font files in system folder.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Ignored">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Reports the total number of fonts that will be ignored while loading a
-    custom font collection. With current criteria fonts that are not in
-    system-font location will be ignored.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Loaded">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Reports the total number of fonts to be loaded through a custom font
-    collection. This actually reports total font entries from registry excluding
-    font entries that point to non-system location.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.LoadTime" units="ms">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Measures the total time spent in loading a custom font collection in
-    non-cache-file mode. We load system fonts as a custom font collection to
-    avoid any interaction with windows font cache service from sandboxed
-    renderer process. Please note that windows font cache services is different
-    from our cache file approach (later referred here as cache-file mode).
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.LoadTime.Cached" units="ms">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Measures the total time spent in loading a custom font collection in
-    cache-file mode. We load system fonts as a custom font collection to avoid
-    any interaction with windows font cache service from sandboxed renderer
-    process. Please note that windows font cache services is different from our
-    cache file approach (later referred here as cache-file mode)
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.CreateFontFaceResult" enum="Hresult">
-  <owner>kulshin@chromium.org</owner>
-  <summary>Records the error returned from CreateFontFace.</summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.Fallback.CacheSize" units="Count">
-  <owner>kulshin@chromium.org</owner>
-  <summary>Records how many font families are in the fallback cache.</summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.FallbackResult"
-    enum="DirectWriteFontFallbackResult">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    Measures the effectiveness of the font fallback proxy. This tracks if we
-    were able to find a suitable font to render the character, and whether an
-    IPC was necessary.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.FamilyCount" units="families">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The number of font families as seen by the font proxy in the renderer.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.FontProxyError"
-    enum="DirectWriteFontProxyError">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The errors encountered by the DirectWrite font proxy while loading fonts.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.GetSystemFontCollectionResult"
-    enum="Hresult">
-  <owner>kulshin@chromium.org</owner>
-  <summary>Records the error returned from GetSystemFontCollection.</summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.LastResortFontCount" units="fonts">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The number of last resort fallback fonts found on the system as seen by the
-    browser.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.LastResortFontFileCount" units="files">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The number of font files found for a last resort fallback font.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.LoaderType"
-    enum="DirectWriteFontLoaderType">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The codepath that was used to load a font family. This is logged in the
-    browser every time a renderer attempts to load a font family, once per font
-    file.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyResult"
-    enum="DirectWriteLoadFamilyResult">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The outcome of attempting to load a font family in the renderer (success vs
-    failure and number of families). This is logged in the renderer once per
-    family that is loaded.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyTime" units="ms">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    The time taken to load a font family, excluding glyph data. This is logged
-    in the renderer once per family that is loaded.
-  </summary>
-</histogram>
-
-<histogram name="DirectWrite.Fonts.Proxy.MessageFilterError"
-    enum="DirectWriteMessageFilterError">
-  <owner>kulshin@chromium.org</owner>
-  <summary>
-    Errors, if any, encountered by the DirectWrite font proxy message filter.
-  </summary>
-</histogram>
-
-<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Whether an extension has been wiped out.</summary>
-</histogram>
-
-<histogram name="DisabledExtension.SideloadWipeoutCount">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How many external extensions get wiped out as a result of the Sideload
-    Wipeout one-time initiative.
-  </summary>
-</histogram>
-
-<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether any extension got wiped out as a result of the Sideload Wipeout
-    one-time initiative.
-  </summary>
-</histogram>
-
-<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The user selection in the Sideload Wipeout bubble, grouped by the
-    UmaWipeoutHistogramOptions enum.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.CertIo" enum="CertificateChainPosition">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Records information about DiskBasedCertCache operations with respect to
-    certificate chain positions. Zero indicates that a certificate is root, one
-    indicates that it is the first intermediate certificate, etc.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.CertIoCacheResult" enum="CacheResult">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Records the outcome of requests to retrieve certificates from the disk
-    cache.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.CertIoReadSuccessLeaf"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Whether or not the leaf certificate of a certificate chain was successfuly
-    read from the disk cache.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.CertIoWriteSuccessLeaf"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Whether or not the leaf certificate of a certificate chain was successfully
-    written to the disk cache.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.ChainReadTime" units="ms">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Measures the wall clock time spent reading a certificate chain. The starting
-    time is when the read command is issued, and the ending time is when all of
-    the  certificates in the chain have been read into memory.
-  </summary>
-</histogram>
-
-<histogram name="DiskBasedCertCache.ChainWriteTime" units="ms">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <owner>brandonsalmon@chromium.org</owner>
-  <summary>
-    Measures the wall clock time spent writing a certificate chain to disk. The
-    starting time is when the write command is issued, and the ending time is
-    when all the certificates in the chain have been written to disk.
-  </summary>
-</histogram>
-
-<histogram name="DiskCache.0.FilesAge" units="hours">
-  <owner>rvargas@chromium.org</owner>
-  <summary>The age of the cache's files (wall time).</summary>
-</histogram>
-
-<histogram name="DiskCache.2.FilesAge" units="hours">
-  <owner>rvargas@chromium.org</owner>
-  <summary>
-    The age of the cache's files (wall time). Media-specific cache.
-  </summary>
-</histogram>
-
-<histogram name="DiskCache.3.FilesAge" units="hours">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The age of the cache's files (wall time). AppCache.</summary>
-</histogram>
-
-<histogram name="DiskCache.4.FilesAge" units="hours">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The age of the cache's files (wall time). ShaderCache.</summary>
-</histogram>
-
-<histogram name="DiskCache.SizeStats2" units="KB">
-  <owner>rvargas@chromium.org</owner>
-  <summary>The size distribution of data stored in the HTTP cache.</summary>
-</histogram>
-
-<histogram name="DiskCache.TotalIOTime" units="ms">
-  <obsolete>
-    Deprecated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time it takes to perform a payload IO operation, for the regular
-    disk cache.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptCancelled">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The attempt which completed after the job was already cancelled.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptDiscarded">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The attempt which completed after the job was already cancelled OR the
-    attempt that has finished after host resolution was already completed by an
-    earlier attempt.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFailDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in OS resolutions for actual navigations. These
-    attempts which completed after the job was already canceled OR after the job
-    was already completed by an earlier attempt. Note that cached resolutions
-    may provide low (0ms?) resolution times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFailure">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>The attempt that has not resolved the host successfully.</summary>
-</histogram>
-
-<histogram name="DNS.AttemptFirstFailure">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The attempt that resolved the host first and the resolution was not
-    successful.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFirstSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The attempt that resolved the host first and the resolution was successful.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>The attempt that has resolved the host successfully.</summary>
-</histogram>
-
-<histogram name="DNS.AttemptSuccessDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in OS resolutions that succeeded and were requested
-    for actual navigations. These attempts which completed after the job was
-    already canceled OR after the job was already completed by an earlier
-    attempt. Note that cached resolutions may provide low (0ms?) resolution
-    times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.AttemptTimeSavedByRetry" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    This histogram shows the time saved by having spawned an extra attempt, when
-    the first attempt didn't finish before retry attempt.
-  </summary>
-</histogram>
-
-<histogram name="DNS.CacheEvicted" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time left to expiration of an entry when it is removed while compacting
-    the HostCache.
-  </summary>
-</histogram>
-
-<histogram name="DNS.CacheExpired" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time since expiration of an entry when it is removed while compacting
-    the HostCache.
-  </summary>
-</histogram>
-
-<histogram name="DNS.CacheExpiredOnGet" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time since expiration of an entry when it is removed on lookup.
-  </summary>
-</histogram>
-
-<histogram name="DNS.EmptyAddressListAndNoError"
-    enum="DNSEmptyAddressListAndNoError">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Error status when an empty address list was found in OnLookupComplete().
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>The reason for erasing a DNS entry from the host cache.</summary>
-</histogram>
-
-<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When erasing a stale (expired or old-network) DNS entry from the host cache,
-    how long past the expiration time it is.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When erasing a stale (expired or old-network) DNS entry from the host cache
-    how many network changes happened between setting and erasing it.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When erasing a stale (expired or old-network) DNS entry from the host cache
-    how many hits it received while stale.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When erasing a valid DNS entry from the host cache, for how much longer it
-    would have remained valid.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>The outcome of looking up a DNS entry in the host cache.</summary>
-</histogram>
-
-<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When looking up a stale DNS entry in the host cache, how long past the
-    expiration time it is.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When looking up a stale DNS entry in the host cache, how many network
-    changes happened between setting it and looking it up.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>The outcome of setting a DNS entry in the host cache.</summary>
-</histogram>
-
-<histogram name="DNS.HostCache.UpdateStale.AddressListDelta"
-    enum="DNS.AddressListDeltaType">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When updating a stale (expired or old-network) DNS entry in the host cache,
-    and both results are successful, how the address list differs between the
-    old and new entries.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When updating a stale (expired or old-network) DNS entry in the host cache,
-    how long past the expiration time the old entry was.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When updating a stale (expired or old-nework) DNS entry in the host cache,
-    how many network changes happened between setting the old entry and setting
-    the new entry.
-  </summary>
-</histogram>
-
-<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The number of hits received to an updated stale DNS entry in the host cache
-    while it was stale.
-  </summary>
-</histogram>
-
-<histogram name="DNS.IndependentFailedNavigation" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When either a pre-resolution was not done recently enough to provide
-    benefit, or the corresponding pre-resolution is still pending, this
-    histogram shows the duration of time used to resolve a hostname as not
-    existing during a failed attempt to navigate to (GET) a URL.  In newer
-    versions, if the hostname has never been found as a link during a page scan,
-    and it has a referring URL, then it is added to referrer list data structure
-    (hoping we'll do better next time).
-  </summary>
-</histogram>
-
-<histogram name="DNS.IndependentNavigation" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When either a pre-resolution was not done recently enough to provide
-    benefit, or the corresponding pre-resolution is still pending, this
-    histogram shows the duration of the duration of time used to resolve a
-    hostname to navigate to (GET) a URL.  In newer versions, if the hostname has
-    never been found as a link during a page scan, and it has a referring URL,
-    then it is added to referrer list data structure (hoping we'll do better
-    next time).
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool).
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_HIGHEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool). Includes only Jobs which had priority HIGHEST when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_IDLE" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool). Includes only Jobs which had priority IDLE when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_LOW" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool). Includes only Jobs which had priority LOW when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_LOWEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool). Includes only Jobs which had priority LOWEST when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_MEDIUM" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the time the HostResolverImpl::Job was created and the
-    time the Job was started (a getaddrinfo call was dispatched to the thread
-    pool). Includes only Jobs which had priority MEDIUM when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool).
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool). Includes
-    only Jobs which had priority HIGHEST when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool). Includes
-    only Jobs which had priority IDLE when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool). Includes
-    only Jobs which had priority LOW when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool). Includes
-    only Jobs which had priority LOWEST when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time elapsed between the last time the priority of a HostResolverImpl::Job
-    changed (when a Request was attached or detached) and the time the Job was
-    started (a getaddrinfo call was dispatched to the thread pool). Includes
-    only Jobs which had priority MEDIUM when started.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchCacheEviction" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time used (most recently) to pre-resolve a hostname, when
-    the prefetched resolution was apparently evicted from the cache.  The
-    included samples only list pre-resolution times when the later
-    navigations/fetches took in excess of 15ms.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchCacheEvictionL" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time used (most recently) to pre-resolve a hostname, when
-    the prefetched resolution was apparently evicted from the cache.  The
-    included samples only list pre-resolution times when the later
-    navigations/fetches took in excess of 15ms.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchFoundName">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Replaced by DNS.PrefetchFoundNameL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchFoundNameL" units="ms">
-  <obsolete>
-    Deprecated 2/2010, and replaced by DNS.PrefetchResolution
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time used by the DNS pre-resolving threads to resolve a host
-    name via the network.  Any resolutions that are faster than 15ms are
-    considered to be local cache hits, not requiring network access, and are not
-    included in this histogram. This histogram is most useful for estimating the
-    typical cost of a name resolution, but it also estimates the total number of
-    network-based resolutions induced by this feature.  Not all these
-    resolutions prove helpful (i.e., the user does not always actually visit the
-    resolved hostnames).
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchNegativeHit">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Replaced by DNS.PrefetchNegativeHitL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchNegativeHitL" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time saved due to DNS pre-resolving in the &quot;name not
-    found&quot; case.  Time &quot;savings&quot; shown in the histogram are
-    defined to be the difference between the DNS pre-resolution duration, and
-    the DNS resolution duration seen during a navigation.  These cache hits only
-    list events where the DNS pre-resolve duration for a host was in excess of
-    15ms (i.e., the network was consulted), and the actual DNS resolution (when
-    a user attempted to navigate to a link with the same host name) took less
-    than 15ms (i.e., the network was not consulted), which means the gain was a
-    result of a &quot;cache hit&quot; in the OS cache.  For some users with
-    LANs, all negative results (even when the DNS cache might otherwise help)
-    take about 2.5 seconds (due to timeouts for netbios broadcasts), and hence
-    no savings are possible (or shown) for such users in this category.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchPositiveHit">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Replaced by DNS.PrefetchPositiveHitL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchPositiveHitL" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time saved due to DNS pre-resolving in the &quot;name was
-    found&quot; case, and induced by either a page scan for a link or an omnibox
-    entry by the user. Time &quot;savings&quot; shown in the histogram are
-    defined to be the difference between the DNS pre-resolution duration, and
-    the DNS resolution duration seen during a navigation.  These cache hits only
-    list events where the DNS pre-resolve duration for a host was in excess of
-    15ms (i.e., the network was consulted), and the actual DNS resolution (when
-    a user attempted to navigate to a link with the same host name) took less
-    than 15ms (i.e., the network was not consulted), which means the gain was a
-    result of a &quot;cache hit&quot; in the OS cache.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchQueue" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time spent by a proposed resolution waiting in the queue to
-    be resolved.  This number is in addition to any DNS resolution time that may
-    come later.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchReferredPositiveHit" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time saved due to DNS pre-resolving in the &quot;name was
-    found&quot; case, and induced by predicting (using referrer lists) that a
-    resolution was needed. Time &quot;savings&quot; shown in the histogram are
-    defined to be the difference between the DNS pre-resolution duration, and
-    the DNS resolution duration seen during a navigation.  These cache hits only
-    list events where the DNS pre-resolve duration for a host was in excess of
-    15ms (i.e., the network was consulted), and the actual DNS resolution (when
-    a user attempted to navigate to a link with the same host name) took less
-    than 15ms (i.e., the network was not consulted), which means the gain was a
-    result of a &quot;cache hit&quot; in the OS cache.
-  </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchResolution" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The duration of time used by the DNS pre-resolving threads to resolve a host
-    name via the network.  Any resolutions that are faster than 15ms are
-    considered to be local cache hits, not requiring network access, and are not
-    included in this histogram. This histogram is most useful for estimating the
-    typical cost of a name resolution, but it also estimates the total number of
-    network-based resolutions induced by this feature.  Not all these
-    resolutions prove helpful (i.e., the user does not always actually visit the
-    resolved hostnames).
-  </summary>
-</histogram>
-
-<histogram name="DNS.QueueRecycledDeltaOver2">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When, due to congestion avoidance, a queued pre-resolution is abandoned
-    (recycled) without actually being resolved, this histograms records the age
-    in the queue of that entry.  Only times over 2 seconds are recorded in this
-    histogram.
-  </summary>
-</histogram>
-
-<histogram name="DNS.QueueRecycledUnder2">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When, due to congestion avoidance, a queued pre-resolution is abandoned
-    (recycled) without actually being resolved, this histograms records the age
-    in the queue of that entry.  Only times less than or equal to 2 seconds are
-    recorded in this histogram.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveCategory" enum="ResolutionCategory">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of successes and failures of OS resolutions in various categories.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in OS resolutions for actual navigations.  Note that
-    cached OS resolutions may provide low (0ms?) resolution times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Same as DNS.ResolveFail, but limited to pure IPv4 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Same as DNS.ResolveFail, but limited to pure IPv6 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Same as DNS.ResolveFail, but limited to IPv4/IPv6 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveSpeculativeFail" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in speculative OS resolutions.  Note that cached OS
-    resolutions may provide low (0ms?) resolution times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSpeculativeSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in speculative OS resolution that succeeded.  Note
-    that cached resolutions may provide low (0ms?) resolution times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time taken in OS resolutions that succeeded and were requested
-    for actual navigations.  Note that cached resolutions may provide low (0ms?)
-    resolution times.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as DNS.ResolveSuccess, but limited to pure IPv4 lookups.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as DNS.ResolveSuccess, but limited to pure IPv6 lookups.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Same as DNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
-  </summary>
-</histogram>
-
-<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory">
-  <obsolete>
-    Deprecated as of 5/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Counts of hits and misses in the DNS cache and DNS jobs pool of wasted
-    HostResolverImpl::Jobs that could be avoided by always resolving using
-    AF_UNSPEC.
-  </summary>
-</histogram>
-
-<histogram name="DNS.StaleHostResolver.NetworkEarly" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When a DNS request made through StaleHostResolver returns, a stale cached
-    result was available, and the network responded before or exactly at the
-    stale delay, how much earlier it responded.
-  </summary>
-</histogram>
-
-<histogram name="DNS.StaleHostResolver.NetworkLate" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When a DNS request made through StaleHostResolver returns, a stale cached
-    result was available, and the network responded after the stale delay, how
-    much later it responded.
-  </summary>
-</histogram>
-
-<histogram name="DNS.StaleHostResolver.RequestOutcome"
-    enum="DNS.StaleHostResolverRequestOutcome">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When a DNS request made through StaleHostResolver returns or is canceled,
-    the outcome of the request.
-  </summary>
-</histogram>
-
-<histogram name="DNS.StaleHostResolver.StaleAddressListDelta"
-    enum="DNS.AddressListDeltaType">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When a DNS request made through StaleHostResolver had a stale cached result
-    and both the stale and network results were successful, the difference
-    between the old and new address lists.
-  </summary>
-</histogram>
-
-<histogram name="DNS.TotalTime" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since a HostResolverImpl::Resolve request to the time a
-    result is posted. Excludes canceled, evicted, and aborted requests. Includes
-    cache hits (recorded as 0). Excludes speculative requests.
-  </summary>
-</histogram>
-
-<histogram name="DNS.TotalTime_speculative" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Duration of time since a HostResolverImpl::Resolve request to the time a
-    result is posted. Excludes canceled, evicted, and aborted requests. Includes
-    cache hits (recorded as 0). Speculative requests only.
-  </summary>
-</histogram>
-
-<histogram name="DNS.UnexpectedResolution">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    In some cases, such as when content arrives with embedded references to
-    other servers, the prefetch system can't (or doesn't) attempt to pre-resolve
-    the hostnames.  As an example, a visit to www.cnn.com will fetch content
-    with references to about 12 additional hostnames, none of which are
-    currently anticipated.  Such resolutions are termed &quot;Unexpected
-    Resolutions,&quot; and the durations associated with those DNS resolutions
-    are shown below.  Future features may attempt to learn (from prior
-    experience locally, or from server provided hints), what secondary hostname
-    resolutions should be done when a primary resolution (or navigation) takes
-    place.  This histogram shows what the potential savings are that
-    &quot;remain on the table&quot; until we employ some of these more advanced
-    features.
-  </summary>
-</histogram>
-
-<histogram name="DNS.UnexpectedResolutionL">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    In some cases, such as when content arrives with embedded references to
-    other servers, or when a page (such as one in SSL) preclude scanning and
-    prefetching, the prefetch system can't (or doesn't) attempt to pre-resolve
-    the hostnames.  As an example, a visit to www.cnn.com will fetch content
-    with references to about 12 additional hostnames, none of which might be
-    anticipated.  Similarly, clicking on a link in an SSL page won't be
-    anticipated (since scanning in not allowed by default). Such resolutions are
-    termed &quot;Unexpected Resolutions,&quot; and the durations associated with
-    those navigation induced DNS resolutions are shown below.  If a referring
-    URL is available for the navigation, the relationship to the referring URL
-    was recorded, and future navigations to the referring hostname would have
-    induced a pre-resolution of hostname that caused an entry below.  Such any
-    entry may facilitate future listing in the ReferredPositiveHit histogram.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.ErrorPageUpdateStatus" enum="DnsProbe.ProbeStatus">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Status of DNS probe updates sent to a DNS error page.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.Elapsed" units="ms">
-  <obsolete>
-    Renamed 7/2013 to DnsProbe.ProbeDuration.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Time between starting and finishing DNS probe.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time between starting and finishing DNS probe when NCN says we're offline.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOffline.Result"
-    enum="DnsProbe.ObsoleteProbeResult">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Result of DNS probes sent by the probe service when NCN says we're offline.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Time between starting and finishing DNS probe when NCN says we're online.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOnline.Result"
-    enum="DnsProbe.ObsoleteProbeResult">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Result of DNS probes sent by the probe service when NCN says we're online.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult">
-  <obsolete>
-    Renamed 7/2013 to DnsProbe.ProbeResult.  (Also switched to the full
-    DnsProbe.ProbeStatus enum.)
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Result of DNS probes sent by the probe service.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Elapsed time of DNS probes that return PROBE_BAD_CONFIG.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemIsLocalhost"
-    enum="DnsProbe.SystemIsLocalhost">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether the only nameserver in the system DNS config was 127.0.0.1 when the
-    probe result was BAD_CONFIG.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemJobResult"
-    enum="DnsProbe.JobResult">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The result of the system probe job when the overall probe result was
-    BAD_CONFIG.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The number of nameservers in the system DNS config when the probe result was
-    BAD_CONFIG.
-  </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Elapsed time of DNS probes that return PROBE_NO_INTERNET.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Elapsed time of DNS probes that return PROBE_NXDOMAIN.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms">
-  <obsolete>
-    Removed 7/2013.
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Elapsed time of DNS probes that return PROBE_UNKNOWN.</summary>
-</histogram>
-
-<histogram name="DnsProbe.ProbeDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Time between starting and finishing DNS probe.</summary>
-</histogram>
-
-<histogram name="DnsProbe.ProbeResult" enum="DnsProbe.ProbeStatus">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Result of DNS probes sent by the probe service.</summary>
-</histogram>
-
-<histogram name="DocumentActivity.Enabled" enum="RunningMode">
-  <obsolete>
-    Removed 9/2016.
-  </obsolete>
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Recorded only for Android. Records on every metrics upload whether document
-    mode is enabled.
-  </summary>
-</histogram>
-
-<histogram name="DocumentScan.ConverterResult" enum="BooleanSuccess">
-  <owner>pstew@chromium.org</owner>
-  <summary>
-    Chrome OS document scan metric that tracks whether a document scan call to
-    the image conversion process suceeded.
-  </summary>
-</histogram>
-
-<histogram name="DocumentScan.ScanResult" enum="BooleanSuccess">
-  <owner>pstew@chromium.org</owner>
-  <summary>
-    Chrome OS document scan metric that tracks whether a document scan call to
-    the sane backend process suceeded.
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBLoadedCount">
-  <owner>mattm@chromium.org</owner>
-  <summary>Number of certs loaded from domain bound cert database.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBLoadTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>Time spent loading domain bound cert database.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBSizeInKB" units="KB">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    The size, on disk, of the domain bound cert database as it is being loaded.
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GenerateCertTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>Time spent generating a domain bound cert.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Combined time for GetDomainBoundCert retrieval (both synchronous and
-    asynchronous).
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Time for asynchronous retrieval (from the GetDomainBoundCert call until
-    completion callback is called).
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>Time for synchronous GetDomainBoundCert cert retrieval.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetDomainBoundCertResult"
-    enum="DomainBoundCerts.GetCertResult">
-  <owner>mattm@chromium.org</owner>
-  <summary>Result of GetDomainBoundCert function.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.KillDatabaseResult" enum="BooleanSuccess">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Whether the domain-bound certs sqlite database was killed succesfully when
-    an unrecoverable error was detected.
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Counts of SSL client sockets broken down by support for Domain Bound
-    Certificates TLS extension.  Counts only connections with full handshakes,
-    resumed sessions are not counted.
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Longest time spent by requests waiting for load of domain bound cert
-    database.
-  </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.TaskWaitCount">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Number of requests that waited for load of domain bound cert database.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.BeaconInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time between successive Domain Reliability beacons being queued in the
-    same context. (Can be arbitrarily long if no beacons are queued in a while.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.BeaconIntervalGlobal" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time between successive Domain Reliability beacons being queued across
-    all contexts. (Can be arbitrarily long if no beacons are queued in a while.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.BeaconReported" enum="BooleanReported">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether a beacon added to a Domain Reliability context was saved to be
-    uploaded to the collector.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.OnBeaconDidEvict" enum="BooleanDidEvict">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether adding a beacon to a Domain Reliability context caused it to evict
-    an older beacon to stay within memory limits.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.ReportedBeaconError" enum="NetErrorCodes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The Chrome error code included in a beacon saved to be uploaded to the
-    collector.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.ReportedBeaconError_HasServerIP"
-    enum="NetErrorCodes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The Chrome error code included in a beacon with a non-empty server_ip field
-    saved to be uploaded to the collector.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.ReportedBeaconUploadDepth" units="levels">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The upload depth included in a beacon saved to be uploaded to the collector.
-    (Zero means the beacon was not about a report upload; n+1 means the beacon
-    was about a report with upload depth n.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.SetConfigRecreatedContext"
-    enum="BooleanCreated">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When Domain Reliability receives a valid NEL configuration header for an
-    origin with Domain Reliability active, whether or not it needed to recreate
-    the origin's context to apply a changed config.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadCollectorIndex">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The index of the collector that a Domain Reliability upload was sent to.
-    (Later collectors are only used when earlier collectors have failed.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadCollectorRetryDelay" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    After an upload to a collector finishes (successfully or not), the delay
-    before the scheduler can send another upload to that collector. (If recent
-    uploads were successful, this will be 0; if not, it will be based on the
-    BackoffEntry and any Retry-After header received.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadDuration" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The elapsed time between starting and finishing a Domain Reliability upload.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadFailover"
-    enum="DomainReliability.BooleanFailover">
-  <obsolete>
-    Deprecated 11/2014; see UploadCollectorIndex
-  </obsolete>
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether a Domain Reliability upload was sent to a collector other than the
-    first one listed in the config. (This only happens when an upload to the
-    first collector fails.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadInterval" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time between successive Domain Reliability uploads being started in the
-    same context. (Can be arbitrarily long if no beacons are reported in a
-    while.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadIntervalGlobal" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time between successive Domain Reliability uploads being started across
-    all contexts. (Can be arbitrarily long if no beacons are reported in a
-    while.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadLatency" units="ms">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The time from the first beacon in a Domain Reliability upload being recorded
-    and that upload completing successfully. (Note that if some beacons are
-    never uploaded successfully, they will not feature in this histogram at
-    all.)
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadNetError" enum="NetErrorCodes">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The network error code (or OK if none) returned by the URLFetcher when a
-    Domain Reliability report is uploaded.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadResponseCode" enum="HttpResponseCode">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    The HTTP response code returned by the Domain Reliability collector when a
-    report is uploaded.
-  </summary>
-</histogram>
-
-<histogram name="DomainReliability.UploadSuccess" enum="BooleanSuccess">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>Whether a Domain Reliability upload succeeded.</summary>
-</histogram>
-
-<histogram name="DomDistiller.BarCloseButtonUsage" enum="BooleanPanelWasOpen">
-  <owner>mdjones@chromium.org</owner>
-  <summary>
-    Records if the close button was used before or after opening and viewing
-    Reader Mode content.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.DistillabilityRejection" enum="DistillRejection">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    The reason to reject distillability at PageDistillableAfterParsing time.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.DistillabilityScoreNMF.Negative" units="score">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Score of distillability from AdaBoost model, non-mobile-friendly only. The
-    score shown here is multiplied by 100.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.DistillabilityScoreNMF.Positive" units="score">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Score of distillability from AdaBoost model, non-mobile-friendly only. The
-    score shown here is multiplied by 100.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.DistillationQuality" enum="BooleanSuccess">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    Whether the perceived quality of the distillation of a web page was good.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.LongArticleScoreNMF.Negative" units="score">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Score of long article from AdaBoost model, distillable and
-    non-mobile-friendly only. The score shown here is multiplied by 100.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.LongArticleScoreNMF.Positive" units="score">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Score of long article from AdaBoost model, distillable and
-    non-mobile-friendly only. The score shown here is multiplied by 100.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.PageDistillable" enum="DistillableType">
-  <obsolete>
-    PageDistillableAfterLoading and PageDistillableAfterParsing provide more
-    details since 02/2016.
-  </obsolete>
-  <owner>cjhopman@chromium.org</owner>
-  <summary>
-    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
-    distillable, non-mobile-friendly distillable, etc) for each analyzed page.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.PageDistillableAfterLoading"
-    enum="DistillableType2">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
-    mobile-friendly distillable, non-mobile-friendly not distillable,
-    non-mobile-friendly distillable) for each analyzed page after loading.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.PageDistillableAfterParsing"
-    enum="DistillableType2">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
-    mobile-friendly distillable, non-mobile-friendly not distillable,
-    non-mobile-friendly distillable) for each analyzed page after parsing.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.PageDistilledType" enum="DistillableType">
-  <obsolete>
-    Not collected anymore.
-  </obsolete>
-  <owner>cjhopman@chromium.org</owner>
-  <summary>
-    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
-    distillable, non-mobile-friendly distillable, etc) for each distilled page.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.PageHasDistilledData"
-    enum="BooleanHasDistilledData">
-  <owner>kuan@chromium.org</owner>
-  <summary>Records whether a page has distilled data.</summary>
-</histogram>
-
-<histogram name="DomDistiller.ReaderShownForPageLoad" enum="Boolean">
-  <owner>mdjones@chromium.org</owner>
-  <summary>
-    Records if the panel became visible at any point after a page was navigated.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Statistics.FirstPageWordCount" units="words">
-  <owner>mdjones@chromium.org</owner>
-  <summary>
-    Records the number of words in a distilled page. This only records the first
-    page of a multi-page article.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Statistics.WordCount" units="words">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    Records the number of words in a distilled page. For articles with multiple
-    pages, each page is counted separately.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.ArticleProcessing" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Time spent in DomDistiller's identification of text content.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.DistillationTotal" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>Complete time spent in DomDistiller's processing of a page.</summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.DistillPage" units="ms">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Time spent in DistillPageImpl(), mostly ExecuteJavaScript(), including
-    compilation and execution.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.DocumentConstruction" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Time spent in creating DomDistiller's internal representation of the HTML
-    document.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.Formatting" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Time spent in DomDistiller's final processing of article content/formatting.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.MarkupParsing" units="ms">
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Time spent in DomDistiller's processing of article metadata.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.RunJavaScript" units="ms">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Time spent in ExecuteJavaScript() in DomDistiller. It includes JavaScript
-    code transmission through IPC, parsing, compilation, execution, and
-    returning the JSON back through IPC.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.SwipeToPaint" units="ms">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Records the time from a swipe-up gesture on ReaderModePanel to the first
-    paint of the empty template.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.ViewerLoading" units="ms">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    Records the time from the Reader Mode panel opening to the viewer loaded.
-  </summary>
-</histogram>
-
-<histogram name="DomDistiller.Time.ViewingReaderModePanel" units="ms">
-  <owner>mdjones@chromium.org</owner>
-  <summary>
-    Records the amount of time between the Reader Mode panel opening and it
-    closing or returning to the peeking state.
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.clear" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.clear() or sessionStorage.clear().
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.getItem" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.getItem() or sessionStorage.getItem().
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.key" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.key() or sessionStorage.key().
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.length" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.length() or sessionStorage.length().
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.removeItem" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.removeItem() or
-    sessionStorage.removeItem().
-  </summary>
-</histogram>
-
-<histogram name="DOMStorage.setItem" units="ms">
-  <obsolete>
-    Deprecated 2012.
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Duration to execute localStorage.setItem() or sessionStorage.setItem().
-  </summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesBytes.KBytes" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>The length of downloads for serves that accept byte ranges.</summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The length of downloads for serves that do not specify whether the accept
-    ranges, or have invalid ranges specified.
-  </summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesNone.KBytes" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The length of downloads for serves that do not accept ranges.
-  </summary>
-</histogram>
-
-<histogram name="Download.ActualBandwidth" units="Bytes/second">
-  <obsolete>
-    Deprecated January 2017.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>The actual bandwidth (per read) of a download.</summary>
-</histogram>
-
-<histogram name="Download.ApiFunctions" enum="DownloadFunctions">
-  <owner>asanka@chromium.org</owner>
-  <summary>Downloads extension API function calls.</summary>
-</histogram>
-
-<histogram name="Download.AttachmentServices.Duration" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Time taken to invoke IAttachmentExecute::Save() excluding the time taken to
-    instantiate CLSID_AttachmentServices.
-  </summary>
-</histogram>
-
-<histogram name="Download.AttachmentServices.Result"
-    enum="AttachmentServicesResult">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Result of invoking (or attempting to invoke) Windows Attachment Services API
-    via IAttachmentExecute::Save().
-  </summary>
-</histogram>
-
-<histogram name="Download.BandwidthDiskBytesPerSecond">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Disk bandwidth (defined as total bytes divided by the amount of time blocked
-    on write or close on the file descriptor) seen for a single download.
-  </summary>
-</histogram>
-
-<histogram name="Download.BandwidthOverallBytesPerSecond">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Overall bandwidth seen for the download.  Note that this is measured at the
-    point at which the file is written, and so will not take into account the
-    time costs of activities that occur after file write is completed (e.g. safe
-    browsing scanning).
-  </summary>
-</histogram>
-
-<histogram name="Download.BandwidthUsed" units="%">
-  <obsolete>
-    Deprecated January 2017.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The percentage of the potential bandwidth actually used (per read) of a
-    download.  An entry of 100% implies that Chrome was the limiting factor in
-    download speed.
-  </summary>
-</histogram>
-
-<histogram name="Download.ClearAllSize">
-  <obsolete>
-    Deprecated 1/2017.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of downloads in history at the time it is cleared.
-  </summary>
-</histogram>
-
-<histogram name="Download.ContentDisposition" enum="DownloadContentDisposition">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Content-Disposition header features. The presence of a Content-Disposition
-    header, use of 'filename' and 'filename*' parameters, and string encoding
-    schemes are counted for each unthrottled download. The total number
-    downloads is Download.Counts[5] (Initiated and Unthrottled).
-  </summary>
-</histogram>
-
-<histogram name="Download.ContentImageType" enum="DownloadImageType">
-  <owner>asanka@chromium.org</owner>
-  <summary>Types of images that are downloaded.</summary>
-</histogram>
-
-<histogram name="Download.ContentType" enum="DownloadContentType">
-  <owner>asanka@chromium.org</owner>
-  <summary>Content types that are downloaded.</summary>
-</histogram>
-
-<histogram name="Download.Counts" enum="DownloadCountType">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Various individual counts in the download system; see DownloadCountType for
-    details.
-  </summary>
-</histogram>
-
-<histogram name="Download.CountsChrome" enum="ChromeDownloadCountType">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Various individual counts in the download system, for example the number of
-    downloads blocked by throttling from the DownloadRequestLimiter.
-  </summary>
-</histogram>
-
-<histogram name="Download.DangerousDownloadValidated"
-    enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User chose to save a download which was marked dangerous. Grouped by the
-    type of danger.
-  </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.DangerousDownloadValidated"
-    enum="DownloadItem.DangerousFileType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User chose to save a download which was marked DANGEROUS_FILE. Grouped by
-    the type of file.
-  </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.Discard"
-    enum="DownloadItem.DangerousFileType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    A download which was marked DANGEROUS_FILE was discarded without the user
-    directly choosing, because the browser was closed.  Grouped by the file
-    extension.
-  </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.Reason" enum="DangerousFile.Reason">
-  <owner>jialiul@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Indicates why a download is marked as DANGEROUS_FILE. Grouped by reason,
-    such as Safe Browsing (SB) service is not available, and SB returns UNKOWN
-    or SAFE verdict. The sum of all reasons should roughly equal to the
-    DANGEROUS_FILE bucket count in Download.DownloadWarningShown.
-  </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.UserDiscard"
-    enum="DownloadItem.DangerousFileType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User chose to discard a download which was marked DANGEROUS_FILE. Grouped by
-    the file extension.
-  </summary>
-</histogram>
-
-<histogram name="Download.Database.CreateDownloadDuration" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>Time taken to create a single download in the history DB.</summary>
-</histogram>
-
-<histogram name="Download.Database.QueryDownloadDuration" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>Time taken to query all downloads from history DB.</summary>
-</histogram>
-
-<histogram name="Download.Database.UpdateDownloadDuration" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>Time taken to update a single download in the history DB.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseDownloadExistsForDownloadSlice"
-    units="Boolean">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Whether a download can be found for a download slice in the DB. This
-    histogram is recorded for each download slice row every time the database is
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Download.DatabaseRecordDropped"
-    enum="DownloadDatabaseRecordDroppedType">
-  <owner>asanka@chromium.org</owner>
-  <summary>Reason for dropping a record read in from the DB.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsCount">
-  <owner>asanka@chromium.org</owner>
-  <summary>Number of downloads removed from the history at once.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds">
-  <obsolete>
-    Deprecated 2/2017
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    How long it took to delete a batch of downloads from history.
-  </summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsTimePerRecord"
-    units="nanoseconds/record">
-  <obsolete>
-    Deprecated 2/2017
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    How long it took to delete some downloads from history, per download.
-  </summary>
-</histogram>
-
-<histogram name="Download.Discard" enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    A download which was marked dangerous was discarded without the user
-    directly choosing, because the browser was closed.  Grouped by the type of
-    danger.
-  </summary>
-</histogram>
-
-<histogram name="Download.DiskBandwidthUsedPercentage" units="%">
-  <obsolete>
-    Deprecated 1/2017.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The percentage of the available disk bandwidth that was used by the
-    download.  100% indicates that the disk bandwidth was the limiting factor
-    for the download.
-  </summary>
-</histogram>
-
-<histogram name="Download.DOMEvent" enum="DownloadDOMEvent">
-  <owner>asanka@chromium.org</owner>
-  <summary>User actions in chrome://downloads</summary>
-</histogram>
-
-<histogram name="Download.DownloadDangerPrompt"
-    enum="SBClientDownloadExtensions">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Records when user is shown the download danger prompt while attempting to
-    recover a blocked download from chrome://downloads, grouped by the type of
-    file.
-  </summary>
-</histogram>
-
-<histogram name="Download.DownloadSize" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>The size of successfully completed downloads.</summary>
-</histogram>
-
-<histogram name="Download.DownloadWarningShown" enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    A download warning was shown in the shelf. Note that some downloads may not
-    be shown on the shelf, e.g., if chrome://downloads is already open when the
-    download completes, or if an extension is using the downloads API. Grouped
-    by the type of danger.
-  </summary>
-</histogram>
-
-<histogram name="Download.FeedbackDialogEnabled" enum="BooleanEnabled">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Whether the user enables dangerous download feedback reporting after viewing
-    the opt-in dialog.
-  </summary>
-</histogram>
-
-<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    How the user interacts with the file chooser when doing a &quot;Save
-    As&quot; for non-full-page saves.
-  </summary>
-</histogram>
-
-<histogram name="Download.FileThreadBlockedTime">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The amount of time in milliseconds the file thread blocks for each set of
-    buffers drained from the incoming pipe (ms).
-  </summary>
-</histogram>
-
-<histogram name="Download.FileThreadReceiveBuffers">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of buffers in a call to DownloadManager::UpdateDownload.
-  </summary>
-</histogram>
-
-<histogram name="Download.FirstOpenTime" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The time between a download completing and the file being opened for the
-    first time.
-  </summary>
-</histogram>
-
-<histogram name="Download.HistorySize">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of items in the History database, at the time a new download is
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="Download.HistorySize2">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of items in the History database, at the time a new download is
-    recorded. Higher maximum, more buckets than Download.HistorySize.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedAtEndError" enum="NetErrorCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Positive net error code that caused a download to be interrupted at the
-    *end* of a download (when the number of bytes is known). This is only
-    triggered when the total content size is known before any bytes are
-    transferred, such as when a Content-Length header is supplied.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedAtEndReason" enum="InterruptReason">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The reason that a download was interrupted at the *end* of a download (when
-    the number of bytes is known). This is only triggered when the total content
-    size is known before any bytes are transferred, such as when a
-    Content-Length header is supplied.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedError" enum="NetErrorCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Positive net error code that caused a download to be interrupted.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedOverrunBytes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The total number of bytes minus the received number of bytes at the time
-    that a download is interrupted. This is only triggered when the total
-    content size is known before any bytes are transferred, such as when a
-    Content-Length header is supplied.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedReason" enum="InterruptReason">
-  <owner>asanka@chromium.org</owner>
-  <summary>The reason that a download was interrupted.</summary>
-</histogram>
-
-<histogram name="Download.InterruptedReceivedSizeK" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of kilobytes received for a download at the time it is
-    interrupted.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedTotalSizeK" units="KB">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The reported total size in kilobytes for a download at the time it is
-    interrupted. This is essentially the size reported by the Content-Length
-    header. If no size is specified up-front, it is not recorded in the
-    histogram. For example, a download transferred with chunked encoding will
-    not be recorded.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedUnderrunBytes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The excessive number of bytes which have been received at the time that a
-    download is interrupted. This is only triggered when the total content size
-    is known before any bytes are transferred, such as when a Content-Length
-    header is supplied.
-  </summary>
-</histogram>
-
-<histogram name="Download.InterruptedUnknownSize"
-    enum="DownloadInterruptedUnknownSizeType">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    True if the size of an interrupted download is unknown, false if it is
-    known.
-  </summary>
-</histogram>
-
-<histogram name="Download.IOSDownloadPassKitResult"
-    enum="DownloadPassKitResult">
-  <owner>gchatz@chromium.org</owner>
-  <summary>
-    Result when a user attempts to download a PassKit file on iOS with
-    WKWebView.
-  </summary>
-</histogram>
-
-<histogram name="Download.MaliciousDownloadClassified"
-    enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    A download has been marked as malicious. Grouped by the type of danger. Each
-    download can only be recorded once; it will be labeled with the first type
-    of danger spotted.
-  </summary>
-</histogram>
-
-<histogram name="Download.MapErrorNetworkFailed" enum="NetErrorCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Network error that produced a DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED
-    result in DownloadResourceHandler::OnResponseCompleted().
-  </summary>
-</histogram>
-
-<histogram name="Download.MapWinShErrorAccessDenied"
-    enum="SpecialShFileOperationCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_ACCESS_DENIED result
-    in MapShFileOperationCodes().
-  </summary>
-</histogram>
-
-<histogram name="Download.MapWinShErrorFileFailed"
-    enum="SpecialShFileOperationCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_FAILED result
-    in MapShFileOperationCodes().
-  </summary>
-</histogram>
-
-<histogram name="Download.MapWinShErrorTransientError"
-    enum="SpecialShFileOperationCodes">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR
-    result in MapShFileOperationCodes().
-  </summary>
-</histogram>
-
-<histogram name="Download.OnChanged">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Percentage of DownloadItem::Observer::OnDownloadUpdated events that
-    signified a change in the extension API representation of the download.
-  </summary>
-</histogram>
-
-<histogram name="Download.OpenMethod" enum="DownloadOpenMethod">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Invocation count for methods of opening a download. For some file types,
-    Chrome defaults to opening the file in the browser instead of invoking the
-    system handler. The user has the option of overriding this behavior.
-  </summary>
-</histogram>
-
-<histogram name="Download.OpensOutstanding">
-  <owner>asanka@chromium.org</owner>
-  <summary>The number of unopened downloads, when one is opened.</summary>
-</histogram>
-
-<histogram name="Download.OpenTime" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The time between a download completing and the file being opened.
-  </summary>
-</histogram>
-
-<histogram name="Download.OriginStateOnFullResumption"
-    enum="DownloadOriginStateOnResumption">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Changes observed when a response is received for a full download resumption
-    request.
-  </summary>
-</histogram>
-
-<histogram name="Download.OriginStateOnPartialResumption"
-    enum="DownloadOriginStateOnResumption">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Changes observed when a response is received for a partial (byte-range)
-    download resumption request.
-  </summary>
-</histogram>
-
-<histogram name="Download.PageTransition" enum="CorePageTransition">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The core page transition type for navigation initiated downloads. Not
-    recorded for programmatic downloads. This metric is recorded when the
-    response headers were received and processed for a download. The number of
-    samples here should correspond to Download.Counts[8] (Started) -
-    (programmatic downloads that don't have a page transition type).
-  </summary>
-</histogram>
-
-<histogram name="Download.PotentialBandwidth" units="Bytes/second">
-  <obsolete>
-    Deprecated January 2017.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The maximum bandwidth (per read) that Chrome could have provided for the
-    download.  If the actual bandwidth equals the potential bandwidth, that
-    means that Chrome was the limiting factor for download bandwidth.
-  </summary>
-</histogram>
-
-<histogram name="Download.ResourceHandlerBlockedPercentage" units="%">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The percentage of the lifetime of the DownloadResourceHandler for which it
-    was blocked by downstream flow control.  0% indicates that the network
-    bandwidth was the limiting factor for the download.
-  </summary>
-</histogram>
-
-<histogram name="Download.ResultsRenderedTime" units="ms">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    Records the time taken to load the downloads Web UI and render (at least) a
-    screen full of items. This is roughly equivalent to 'time to first
-    meaningful paint' for the downloads page.
-  </summary>
-</histogram>
-
-<histogram name="Download.SavePackage" enum="DownloadSavePackageEvent">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Events (e.g. Started, Cancelled, Finished, Write to Completed file, Write to
-    Failed file) occuring within the state machine of a SavePackage operation.
-  </summary>
-</histogram>
-
-<histogram name="Download.ShelfInProgressSizeOnAutoClose">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of download items in progress on the shelf when it closes
-    automatically.
-  </summary>
-</histogram>
-
-<histogram name="Download.ShelfInProgressSizeOnUserClose">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of download items in progress on the shelf when the user closes
-    it.
-  </summary>
-</histogram>
-
-<histogram name="Download.ShelfSizeOnAutoClose">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of download items on the shelf when it closes automatically.
-  </summary>
-</histogram>
-
-<histogram name="Download.ShelfSizeOnUserClose">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of download items on the shelf when the user closes it.
-  </summary>
-</histogram>
-
-<histogram name="Download.ShowDangerousDownloadConfirmationPrompt"
-    enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    User saw the confirm prompt to save a download which was marked dangerous.
-    Grouped by the type of danger.
-  </summary>
-</histogram>
-
-<histogram name="Download.Sources" enum="DownloadSource">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The initiation source (if initiated within the content layer of chrome) for
-    a download.
-  </summary>
-</histogram>
-
-<histogram name="Download.SourcesChrome" enum="ChromeDownloadSource">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The initiation source (if initiated within the above-content layer of
-    chrome) for a download.
-  </summary>
-</histogram>
-
-<histogram name="Download.TargetConnectionSecurity"
-    enum="DownloadConnectionSecurity">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The connection security state of a download, indicating whether its final
-    resolved url and the redirects before final url are secure.
-  </summary>
-</histogram>
-
-<histogram name="Download.Time" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>Time between the start of a download and its completion.</summary>
-</histogram>
-
-<histogram name="Download.TimeToRenameFailureAfterInitialFailure" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Time elapsed until a retried download file rename operation failed for the
-    last time after the initial rename failed.
-  </summary>
-</histogram>
-
-<histogram name="Download.TimeToRenameSuccessAfterInitialFailure" units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Time elapsed until a retried download file rename operation succeeded after
-    the initial rename failed.
-  </summary>
-</histogram>
-
-<histogram name="Download.UserDiscard" enum="DownloadItem.DangerType">
-  <owner>asanka@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User chose to discard a download which was marked dangerous.  Grouped by the
-    type of danger.
-  </summary>
-</histogram>
-
-<histogram name="Download.WriteLoopCount">
-  <obsolete>
-    Deprecated 1/2017
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    The number of iterations for the write loop in BaseFile::AppendDataTofile().
-  </summary>
-</histogram>
-
-<histogram name="Download.WriteSize" units="Bytes">
-  <obsolete>
-    Deprecated 1/2017
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>The write size for calls to BaseFile::AppendDataTofile().</summary>
-</histogram>
-
-<histogram name="Drive.BatchUploadResponseCode" enum="HttpResponseCode">
-  <owner>hirono@chromium.org</owner>
-  <summary>Respose code of batch upload request.</summary>
-</histogram>
-
-<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus">
-  <obsolete>
-    Deprecated 8/2013.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>Status of drive cache metadata database open.</summary>
-</histogram>
-
-<histogram name="Drive.DirectoryFeedLoadTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Time spent to load the list of files in a single directory from Google Drive
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Drive.DownloadFromDriveFileSize" units="KB">
-  <owner>mtomasz@chromium.org</owner>
-  <summary>
-    Sizes of files being downloaded from Drive. Temporary histogram for
-    gathering data for http://crbug.com/229650.
-  </summary>
-</histogram>
-
-<histogram name="Drive.EntireFeedLoadTime" units="microseconds">
-  <obsolete>
-    Deprecated 12/2013 due to the UMA stat bucket layout change. We'll use
-    Drive.FullFeedLoadTime instead.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Time spent to load the entire file system information from the server
-  </summary>
-</histogram>
-
-<histogram name="Drive.EntryKind" enum="DriveEntryKind">
-  <obsolete>
-    Deprecated 10/2012.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Provides breakdown of specific formats for hosted documents. Recorded when
-    feed is loaded from the server.
-  </summary>
-</histogram>
-
-<histogram name="Drive.FileFormat" enum="DriveFileFormat">
-  <obsolete>
-    Deprecated 10/2012.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Provides breakdown of specific file formats for regular files. Recorded when
-    feed is loaded from the server.
-  </summary>
-</histogram>
-
-<histogram name="Drive.FilesListRequestRunner.ApiErrorCode"
-    enum="DriveApiErrorCode">
-  <owner>mtomasz@chromium.org</owner>
-  <summary>
-    Error codes returned by the Drive API for files list requests executed via
-    the FilesListRequestRunner class.
-  </summary>
-</histogram>
-
-<histogram name="Drive.FilesListRequestRunner.MaxResults">
-  <owner>mtomasz@chromium.org</owner>
-  <summary>
-    Maximum number of results for each files list request using the Drive API.
-  </summary>
-</histogram>
-
-<histogram name="Drive.FullFeedLoadTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Time spent to load the entire file system information from the server
-  </summary>
-</histogram>
-
-<histogram name="Drive.InitialFeedLoadTime" units="microseconds">
-  <obsolete>
-    Deperecated 12/2013 since it did not record meaningful information.
-    Drive.DirectoryFeedLoadTime should be checked for measuring the time until
-    the user sees the first response of file lists.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Time spent to load the initial part of the file system information from the
-    server
-  </summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBInitResult" enum="DriveMetadataDBInitStatus">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Result of drive resource metadata database initialization.</summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBOpenExistingResult"
-    enum="DriveMetadataDBInitStatus">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Result of attempt to open existing drive resource metadata database.
-  </summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBValidityCheckFailureReason"
-    enum="DriveMetadataDBValidityCheckFailureReason">
-  <owner>bengold@chromium.org</owner>
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Reason of drive resource metadata database validity check failure. Recorded
-    when the validity check fails during Drive metadata initialization triggered
-    by profile initialization.
-  </summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBVersionBeforeUpgradeCheck">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Version number of drive resource metadata DB found on the disk before
-    checking whether it should be upgraded. Recorded during Drive metadata
-    initialization triggered by profile initialization.
-  </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfCacheFilesRecoveredAfterDBCorruption">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Number of files recovered from Drive cache directory. Recorded when file
-    recovery takes place after metadata DB corruption is found during metadata
-    DB initialization.
-  </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfHostedDocuments">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
-    is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfRegularFiles">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Number of regualr files on Drive.  Logged when Drive is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfTotalFiles">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Number of total files (regualr files + hosted documents) on Drive.  Logged
-    when Drive is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="Drive.PushNotificationInitiallyEnabled" enum="BooleanEnabled">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Tracks whether the push notification is initially enabled for Drive.
-    Recorded when the first notification is processed. Notification is emulated
-    by polling if the push notication is disabled.
-  </summary>
-</histogram>
-
-<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Tracks whether the push notification request is registered correctly for
-    Drive. Recorded when the push notification manager is initialized.
-  </summary>
-</histogram>
-
-<histogram name="Drive.SearchMetadataTime" units="microseconds">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Time spent to perform an incremental search for auto completion of files on
-    Drive. This time is collected for every partial query the user types for
-    auto completion.  For instance, if the user types &quot;faq&quot;,
-    incremental searches are performed for &quot;f&quot;, &quot;fa&quot;, and
-    &quot;faq&quot; respectively.
-  </summary>
-</histogram>
-
-<histogram name="Drive.TotalFileCountInBatchUpload">
-  <owner>hirono@chromium.org</owner>
-  <summary>Total file count contained in a drive batch upload request.</summary>
-</histogram>
-
-<histogram name="Drive.TotalFileSizeInBatchUpload" units="KB">
-  <owner>hirono@chromium.org</owner>
-  <summary>Total file size contained in a drive batch upload request.</summary>
-</histogram>
-
-<histogram name="Drive.TransferBlockedOnJobs" units="jobs">
-  <owner>mtomasz@chromium.org</owner>
-  <summary>
-    Number of jobs which have to be completed before a newly added download or
-    download from or to Drive is requested. Temporary histogram for gathering
-    data for http://crbug.com/229650.
-  </summary>
-</histogram>
-
-<histogram name="Drive.UploadProtocol" enum="DriveUploadProtocol">
-  <owner>hirono@chromium.org</owner>
-  <summary>
-    Upload protocol for each file. e.g. Batch upload including 5 files triggers
-    the metric 5 times.
-  </summary>
-</histogram>
-
-<histogram name="Drive.UploadToDriveFileSize" units="KB">
-  <owner>mtomasz@chromium.org</owner>
-  <summary>
-    Sizes of files being uploaded to Drive. Temporary histogram for gathering
-    data for http://crbug.com/229650.
-  </summary>
-</histogram>
-
-<histogram name="DriveOffline.CrosAutoEnableOutcome"
-    enum="CrosEnableDriveOfflineOutcome">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Outcome of enabling Google Drive offline mode automatically when a user
-    first logs into a Chrome OS device. This process involves opening a hidden
-    web page in the context of the Google Drive hosted app to perform the
-    initialization of offline mode.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthenticationSuccess" enum="BooleanSuccess">
-  <owner>joshwoodward@google.com</owner>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    When Easy Unlock attempts to authenticate the secure connection between a
-    Chromebook (or other Chrome device) and an Android phone, whether the
-    authentication succeeded.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthEvent.DidUserManuallyUnlockPhone"
-    enum="EasyUnlockDidUserManuallyUnlockPhone">
-  <owner>isherman@google.com</owner>
-  <owner>xiaowenx@google.com</owner>
-  <owner>xiyuan@google.com</owner>
-  <summary>
-    Upon a successful Smart Lock unlock or signin, records whether the user's
-    phone was locked during any point while the lock screen was up. This can be
-    used to get a sense for whether users are using Smart Lock for Chromebook
-    without something like Smart Lock for Android to keep their phones unlocked.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthEvent.SignIn" enum="EasyUnlockAuthEvent">
-  <owner>isherman@google.com</owner>
-  <owner>xiaowenx@google.com</owner>
-  <owner>xiyuan@google.com</owner>
-  <summary>
-    Measures the use of Smart Lock on the sign-in screen: records whether a
-    Smart Lock login succeeded or failed; or if a password fallback was used,
-    the reason why. Recorded upon a login attempt for users who have the Smart
-    Lock feature enabled.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthEvent.SignIn.Duration" units="ms">
-  <owner>isherman@google.com</owner>
-  <owner>tengs@google.com</owner>
-  <owner>xiaowenx@google.com</owner>
-  <summary>
-    Measures the time elapsed between the user focusing their user pod and
-    signing in using Smart Lock.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthEvent.Unlock" enum="EasyUnlockAuthEvent">
-  <owner>isherman@google.com</owner>
-  <owner>xiaowenx@google.com</owner>
-  <owner>xiyuan@google.com</owner>
-  <summary>
-    Measures the use of Smart Lock on the lock screen: records whether a Smart
-    Lock unlock attempt succeeded or failed; or if a password fallback was used,
-    the reason why. Recorded upon an unlock attempt for users who have the Smart
-    Lock feature enabled.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthEvent.Unlock.Duration" units="ms">
-  <owner>isherman@google.com</owner>
-  <owner>tengs@google.com</owner>
-  <owner>xiaowenx@google.com</owner>
-  <summary>
-    Measures the time elapsed between the lock screen being shown and the user
-    unlocking the device using Smart Lock. The lock screen is typically shown
-    when the user opens their Chromebook's lid (or otherwise wakes the
-    computer), but can also be shown when the user manually locks the device.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.AuthProximity.RemoteDeviceModelHash"
-    enum="EasyUnlockDeviceModelHash">
-  <owner>tengs@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    The hash of the phone model used to successfully sign in or unlock using
-    Smart Lock.
-  </summary>
-  <details>
-    This hash is calculated by taking the first 4 bytes of the MD5 hash of the
-    device model.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.AuthProximity.RollingRssi" units="dBm">
-  <owner>tengs@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Measures the exponentially weighted rolling average of the received signal
-    strength indicator (RSSI) of the phone when the user successfully unlocks or
-    signs in using Smart Lock.
-  </summary>
-  <details>
-    The exponentially weighted averaging formula is:
-
-      rollingRssi = (1 - weight) * rollingRssi + weight * currentRssi;
-
-    RSSI readings are inherently noisy, so this averaging gives a smoothed RSSI
-    value to work with as a heuristic for proximity.
-
-    If no RSSI was read, then a sentinel value of 127 will be recorded.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms">
-  <owner>tengs@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Measures the time delta in milliseconds since the last zero RSSI value was
-    read to when the user successfully unlocks or signs in using Smart Lock.
-  </summary>
-  <details>
-    A zero RSSI value is special because both Bluetooth devices in a connection
-    attempt to maintain by adjusting their transmit power levels. This time
-    delta can be used as a possible heuristic to determine that the phone is
-    close to the local device.
-
-    If no RSSI was read, then an overflow value will be recorded.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm">
-  <owner>tengs@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Measures the difference between the current transmit power and the maximum
-    transmit power of the local device when the user successfully unlocks or
-    signs in using Smart Lock.
-  </summary>
-  <details>
-    Devices connected using classic Bluetooth adjust their transmit power
-    dynamically to optimize power and signal strength. The difference between
-    the current transmit power and maximum transmit power can be used as a
-    heurstic to determine if the phone is close to the local device.
-
-    According to the Bluetooth specs, there are three classes of devices, with a
-    maximum transmit power of 20, 4, and 0 dBm respectively.
-
-    If no transmit power was read, then a sentinel value of 127 will be
-    recorded.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.BluetoothAvailability"
-    enum="EasyUnlockBluetoothType">
-  <obsolete>
-    Deprecated as of 02/2017.
-  </obsolete>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Reports the type of Bluetooth adapter present in the device.
-  </summary>
-  <details>
-    Statistics about what Bluetooth capabilities are available will determine
-    how the EasyUnlock feature gets developed and deployed across platforms.
-
-    This value is logged only once during the lifetime of the Chrome process,
-    shortly after it starts up.  If a Bluetooth USB adapter is inserted after
-    that point, the change will not be registered until Chrome restarts.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.ClickedButton" enum="EasyUnlockButton">
-  <owner>joshwoodward@google.com</owner>
-  <owner>tbarzic@chromium.org</owner>
-  <summary>Button clicked in EasyUnlock app during setup process.</summary>
-</histogram>
-
-<histogram name="EasyUnlock.NotificationEvent"
-    enum="EasyUnlockNotificationEvent">
-  <obsolete>
-    Deprecated 02/2015. Replaced by EasyUnlock.Setup.PromoNotificationEvent.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <owner>tbarzic@chromium.org</owner>
-  <summary>
-    Tracks events related to notifications used by EasyUnlock feature. For
-    example a specific EasyUnlock notification being shown or clicked.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.RemoteLockScreenState"
-    enum="EasyUnlockRemoteLockScreenState">
-  <owner>joshwoodward@google.com</owner>
-  <owner>tengs@chromium.org</owner>
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    Whether a lock screen and a trust agent are enabled on the remote device
-    (Android phone) for Easy Unlock. Recorded once per status update message
-    from the remote device. A status update message is expected to be sent once
-    when the secure channel between the local and the remote device is
-    established, and also each time the user-presence status changes on the
-    remote side.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.Devices.Count.Eligible">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    The number of eligible devices that the CryptAuth server returns during the
-    Smart Lock setup flow.
-  </summary>
-  <details>
-    Note that a single user might report multiple values, for example if they
-    try to complete the setup flow with a device in airplane mode, and then try
-    again taking the device out of airplane mode.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.Devices.Count.Ineligible">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    The number of ineligible devices that the CryptAuth server returns during
-    the Smart Lock setup flow.
-  </summary>
-  <details>
-    Note that a single user might report multiple values, for example if they
-    try to complete the setup flow with a device in airplane mode, and then try
-    again taking the device out of airplane mode.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.Devices.HasSecureScreenLock"
-    enum="EasyUnlockHasSecureScreenLock">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Whether the user's phone has a secure screen lock installed. Recorded during
-    Smart Lock setup, when the user's phone first connects to the Chromebook.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.Devices.HasTrustAgentEnabled"
-    enum="EasyUnlockHasTrustAgentEnabled">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Whether the user's phone has a trust agent -- e.g. Smart Lock for Android --
-    enabled. Recorded during Smart Lock (for Chrome) setup, when the user's
-    phone first connects to the Chromebook.
-  </summary>
-  <details>
-    Note that this histogram tracks whether the setting under Settings ~&gt;
-    Security ~&gt; Trust agents ~&gt; Smart Lock (Google) (or any other trust
-    agent) is enabled. The Smart Lock trust agent is enabled by default for
-    users who have ascure lock screen. This metric does _not_ measure whether
-    users have any Smart Lock trustlets enabled.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.Devices.IneligibilityReason"
-    enum="EasyUnlockDeviceIneligibilityReason">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Records the most actionable reason why none of a user's devices were
-    eligible as unlock keys for Smart Lock. This is recorded during the Smart
-    Lock setup flow, only if the CryptAuth server returns no eligible devices
-    for the user.
-  </summary>
-  <details>
-    To be precise, this metric tracks the _least_ actionable _reason_ why the
-    _most_ actionable _device_ is not eligible as an unlock key. For example,
-    suppose that the user has 10 ineligible devices returned. This metric tries
-    to identify the most likely candidate device for use as a Smart Lock key,
-    and then records the most confounding reason why that device is still not
-    eligible to be used as an unlock key.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.Setup.PromoNotificationEvent"
-    enum="EasyUnlockPromoNotificationEvent">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Measures user interactions with the Smart Lock promo notification.
-  </summary>
-  <details>
-    Due to technical limitations of the implementation, it is hard to track
-    precisely which users opened the setup app as a result of interacting with
-    the promo notification. This metric measures setup app interactions from all
-    users who click on the promo notification, and subsequently launch the setup
-    app.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.SetupStateOnClose" enum="EasyUnlockSetupState">
-  <owner>joshwoodward@google.com</owner>
-  <owner>tbarzic@chromium.org</owner>
-  <summary>
-    The state of EasyUnlock setup when the app window was closed by user.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.SignIn.LoginEvent" enum="EasyUnlockAuthEvent">
-  <obsolete>
-    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.SignIn.
-  </obsolete>
-  <owner>xiaowenx@google.com</owner>
-  <owner>xiyuan@google.com</owner>
-  <summary>
-    Measures the use of Easy sign-in: records whether an Easy sign-in login
-    succeeded or failed; or if a password fallback was used, the reason why.
-    Recorded upon a login attempt for users who have the Easy sign-in feature
-    enabled.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.StartupTimeFromSuspend" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <owner>tengs@chromium.org</owner>
-  <summary>
-    The time it takes after resuming from a suspended state (ie. opening the
-    Chromebook lid) to when a remote device is connected and a request is made.
-    Note that it is possible for the remote device not to be present when
-    resuming from suspend, and the device may be connected at a later time.
-    Therefore, large values for this metric may not be too meaningful due to
-    meddling users.
-  </summary>
-</histogram>
-
-<histogram name="EasyUnlock.TrialRun.Events" enum="EasyUnlockTrialRunEvents">
-  <owner>isherman@chromium.org</owner>
-  <owner>xiaowenx@chromium.org</owner>
-  <summary>
-    Records when the Easy Unlock trial run is launched, and when the user
-    attempts to click on the lock icon during the trial run.
-  </summary>
-  <details>
-    If a user clicks on the lock icon more than once, then the &quot;clicked
-    lock icon&quot; event counter will be incremented more than once as well.
-    Hence, the &quot;user count&quot; data shows how many users ever clicked on
-    the lock icon during the trial run. From the raw (non-&quot;user
-    count&quot;) data, we can also see whether users click on the icon multiple
-    times.
-  </details>
-</histogram>
-
-<histogram name="EasyUnlock.UnlockEvent" enum="EasyUnlockUnlockEvent">
-  <obsolete>
-    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.Unlock.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <owner>tbarzic@chromium.org</owner>
-  <summary>Screen unlock events detected while EasyUnlock was enabled.</summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ExistingProcessAllocation" units="ms">
-  <obsolete>
-    Deprecated 03/2016; replaced by
-    EmbeddedWorkerInstance.Start.SendStartWorker_ExistingProcess and
-    EmbeddedWorkerInstance.Start.TimeToURLJob_ExistingProcess.
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time taken to allocate a process to start the EmbeddedWorkerInstance.
-    Recorded when an existing process was used.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.NewProcessAllocation" units="ms">
-  <obsolete>
-    Deprecated 03/2016; replaced by
-    EmbeddedWorkerInstance.Start.SendStartWorker_NewProcess and
-    EmbeddedWorkerInstance.Start.TimeToURLJob_NewProcess.
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time taken to allocate a process to start the EmbeddedWorkerInstance.
-    Recorded when a new process was created.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ProcessAllocation" units="ms">
-  <obsolete>
-    Deprecated as of 05/2015. Replaced by
-    EmbeddedWorkerInstance.NewProcessAllocation and
-    EmbeddedWorkerInstance.ExistingProcessAllocation.
-  </obsolete>
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken to allocate a process to start the EmbeddedWorkerInstance.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ProcessCreated" enum="BooleanCreated">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether a new renderer process was created for the EmbeddedWorkerInstance or
-    existing one was used. Only recorded for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ScriptEvaluate" units="ms">
-  <obsolete>
-    Deprecated as of 03/2016. Replaced by
-    EmbeddedWorkerInstance.Start.TimeToEvaluateScript.
-  </obsolete>
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken to evaluate the script to start the EmbeddedWorkerInstance.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ScriptLoadWithNetworkAccess" units="ms">
-  <obsolete>
-    Deprecated as of 03/2016. Replaced by
-    EmbeddedWorkerInstance.Start.TimeToLoad_Network.
-  </obsolete>
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken to load the script file for the EmbeddedWorkerInstance with
-    network access.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.ScriptLoadWithoutNetworkAccess"
-    units="ms">
-  <obsolete>
-    Deprecated as of 03/2016. Replaced by
-    EmbeddedWorkerInstance.Start.TimeToLoad_HttpCache and
-    EmbeddedWorkerInstance.Start.TimeToLoad_InstalledScript.
-  </obsolete>
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken to load the script file for the EmbeddedWorkerInstance
-    without network access.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken for initial evaluation of the service worker script.
-    Specifically, the time between ACK from the renderer that the thread started
-    and ACK that the script evaluation finished. Only recorded for installed
-    workers.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken to load a new (not installed) service worker, when it came
-    from the HTTP cache.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"
-    units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>The time taken to load an installed service worker.</summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken to load a new (not installed) service worker, when it came
-    from the network.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken between deciding to start a worker and sending the start
-    worker IPC. Only recorded for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken to start the service worker thread. Specifically, the time
-    between ACK from the renderer that load finished and ACK that the thread
-    started. Does not include script evaluation time. Only recorded for
-    installed workers.
-  </summary>
-</histogram>
-
-<histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The round-trip time between asking the renderer process to start a worker
-    and receiving the corresponding resource request. Only recorded for
-    installed workers.
-  </summary>
-</histogram>
-
-<histogram name="EnhancedBookmarks.AllBookmarksCount">
-  <obsolete>
-    Removed 4/2016 after we no longer show &quot;all bookamrks&quot; in bookmark
-    manager.
-  </obsolete>
-  <owner>ianwen@chromium.org</owner>
-  <summary>Number of bookmarks the user has. Android only.</summary>
-</histogram>
-
-<histogram name="EnhancedBookmarks.SyncExperimentState"
-    enum="BookmarksExperimentState">
-  <obsolete>
-    Removed 3/2015 along with the enhanced bookmarks sync experiment.
-  </obsolete>
-  <owner>noyau@chromium.org</owner>
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Captures the state the enhanced bookmark experiment is in. Recorded on
-    startup. To be removed once the enhanced bookmark experiment is finished.
-    see crbug/323423.
-  </summary>
-</histogram>
-
-<histogram name="EnhancedBookmarks.ViewMode" enum="EnhancedBookmarkViewMode">
-  <obsolete>
-    Removed 9/2015 after list view became the only view mode.
-  </obsolete>
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Record which Enhanced Bookmark UI mode users are in. This will be recorded
-    everytime the user opens the bookmark manager UI.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AppRestrictionLoadTime" units="ms">
-  <owner>aberent@chromium.org</owner>
-  <summary>
-    Android Only - Time to load the App Restrictions from the O.S..
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AppRestrictionsCacheLoad" enum="BooleanSuccess">
-  <owner>aberent@chromium.org</owner>
-  <summary>
-    Android Only - Whether Chrome was able to read and decode the
-    AppRestrictions policy cache on startup.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AttributesTPMConsistency"
-    enum="EnterpriseAttributesTPMConsistencyType">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Consistency between TPM lock state and absence/presence of install
-    attributes at boot.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentExtraTime" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Time since the user logged in until the auto-enrollment protocol completed.
-    0 is sampled when the protocol is done by the time the user logs in.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentProtocolTime" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Total duration time of the auto-enrollment protocol.</summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"
-    enum="NetErrorCodes">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Network error code (if applicable) for auto-enrollment requests.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentRequestStatus"
-    enum="EnterpriseDeviceManagementStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>URL fetcher status for auto-enrollment requests.</summary>
-</histogram>
-
-<histogram name="Enterprise.DevicePolicyInvalidations"
-    enum="EnterprisePolicyInvalidations">
-  <owner>bartfab@chromium.org</owner>
-  <summary>
-    Events for counting device policy invalidations received with and without
-    payloads. Invalidations indicate that a policy has been updated and should
-    be refreshed. Payloads provide context about the policy update, but may be
-    absent if dropped by the invalidation service.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DevicePolicyRefresh" enum="EnterprisePolicyRefresh">
-  <owner>bartfab@chromium.org</owner>
-  <summary>
-    Events measuring effectiveness of refreshing device policy when
-    invalidations are received from a service. For each refresh, indicates
-    whether the policy changed, and whether the policy was invalidated at the
-    time of the refresh.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DMServerRequestSuccess"
-    enum="EnterpriseDMServerRequestSuccess">
-  <owner>hunyadym@chromium.org</owner>
-  <summary>
-    Number of retries the client did to execute a DeviceManagementServer
-    request. It's recorded after the request has been completed, either
-    successfully after 0 or more retries, with a failure (too many retries or
-    non-retriable error) or with a server error.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Events related to fetching, saving and loading DM server tokens. These are
-    used to retrieve cloud policies.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DomainWhitelistRegexFailure"
-    enum="EnterpriseDomainRegex">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Temporary metric tracking which regex caused an icu::RegexMatcher
-    initialization failure, to help figure out the cause of
-    http://crbug.com/365351 which we can't repro locally.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DomainWhitelistRegexFailureStatus"
-    units="icu error">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Temporary metric tracking the type of an icu::RegexMatcher initialization
-    failure, to help figure out the cause of http://crbug.com/365351 which we
-    can't repro locally.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.DomainWhitelistRegexSuccess" enum="BooleanSuccess">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Temporary metric tracking the success of icu::RegexMatcher IcuMatcher
-    initialization, to help figure out the cause of http://crbug.com/365351.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrolledPolicyHasDMToken" enum="Boolean">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Whether loading of device policy from file on an enterprise-enrolled
-    (checked against install_attributes.pb) Chrome OS device yields an
-    enterprise policy with a DM token.  Filled once during session startup,
-    after first successful device policy read.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.Enrollment" enum="EnterpriseEnrollmentType">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Events related to device enrollment on new installs of Chrome OS devices.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrollmentForced" enum="EnterpriseEnrollmentType">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Events related to forced re-enrollment (FRE) of Chrome OS devices.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrollmentRecovery" enum="EnterpriseEnrollmentType">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Events related to Chrome OS enterprise enrollment recovery.  Note that this
-    only covers cases in which prior to recovery, the &quot;private owner&quot;
-    of the device had UMA stats enabled.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrollmentTime.Cancel" units="ms">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Elapsed time from *after* GAIA login until enrollment was cancelled.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrollmentTime.Failure" units="ms">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Elapsed time from *after* GAIA login until enrollment failed.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.EnrollmentTime.Success" units="ms">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    Elapsed time from *after* GAIA login until enrollment succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.IOSPolicies">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Number of policies loaded at startup on iOS, and when a change is detected
-    at runtime.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.ONC.PolicyValidation" enum="BooleanSuccess">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Result of the OpenNetworkConfiguration policy validation.</summary>
-</histogram>
-
-<histogram name="Enterprise.Policies" enum="EnterprisePolicies">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    A set of enterprise policy rules that are in use. This is recorded every 24
-    hours and at startup, if the last recording was earlier than a day before.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.Policy" enum="EnterprisePolicyType">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Events related to fetching, saving and loading user policies, and also
-    device policies on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyHasVerifiedCachedKey"
-    enum="BooleanValidKeyExists">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Boolean tracking whether there is a valid policy signing key on disk.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyInvalidations"
-    enum="EnterprisePolicyInvalidations">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Events for counting user policy invalidations received with and without
-    payloads. Invalidations indicate that a policy has been updated and should
-    be refreshed. Payloads provide context about the policy update, but may be
-    absent if dropped by the invalidation service.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyInvalidationsStartupTime" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Time since startup of the cloud policy code until the policy invalidation
-    service first reported its online status.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyKeyVerification"
-    enum="EnterprisePolicyKeyVerification">
-  <owner>atwilson@chromium.org</owner>
-  <summary>Tracking the results of policy key verification.</summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyLoadStatus" enum="EnterprisePolicyLoadStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Load status from the policy loaders which pull policy settings from the
-    underlying platform, such as Windows Group Policy.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyRefresh" enum="EnterprisePolicyRefresh">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Events measuring effectiveness of refreshing user policy when invalidations
-    are received from a service. For each refresh, indicates whether the policy
-    changed, and whether the policy was invalidated at the time of the refresh.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.PublicSession.SessionLength" units="minutes">
-  <owner>xiyuan@chromium.org</owner>
-  <owner>sduraisamy@chromium.org</owner>
-  <summary>
-    A public session starts when a user signs in using the policy configured
-    public account. It stops when the user signs out. Session length is the
-    duration between the start and stop events. It is recorded during signing
-    out and reported on the next chrome run. This metric tracks the recorded
-    session length rounded down to the nearest 10-minute bucket and capped at 24
-    hours.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.RegularUserSession.SessionLength" units="minutes">
-  <owner>xiyuan@chromium.org</owner>
-  <owner>sduraisamy@chromium.org</owner>
-  <summary>
-    A regular user session starts when a user signs in using his/her user
-    account. It stops when the user signs out. Session length is the duration
-    between the start and stop events. It is recorded during signing out and
-    reported on the next chrome run. This metric tracks the recorded session
-    length on an enrolled device rouned down to the nearest 10-minute bucket and
-    capped at 24 hours.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType">
-  <obsolete>
-    Deprecated and removed from code as of 01/2016.
-  </obsolete>
-  <owner>pbond@chromium.org</owner>
-  <summary>
-    Events for counting sensitive data occurrences in system logs to upload.
-    (Email addresses, IP addresses, SSIDs, URLs). The lines with this data will
-    be removed before upload.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UploadJobSuccess" enum="EnterpriseUploadJobSuccess">
-  <owner>hunyadym@chromium.org</owner>
-  <summary>
-    Number of retries the client did to execute an UploadJob. It's recorded
-    after the request has been completed, either successfully after 0 or more
-    retries, with a failure because of too many retries or if the UploadJob is
-    interrupted (destroyed before it could succeed or fail).
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserCloudPolicyStore.LoadStatus"
-    enum="PolicyLoadStatus">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Result of the attempted policy load during profile initialization.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserCloudPolicyStore.LoadValidationStatus"
-    enum="PolicyValidationStatus">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Result of validating the policy that has just been loaded from disk.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserCloudPolicyStore.StoreValidationStatus"
-    enum="PolicyValidationStatus">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Result of validating the policy sent down from the server, before writing to
-    disk.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.DelayInitialization" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Initialization delay due to loading the user policy cache.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.ClientError"
-    enum="EnterpriseDeviceManagementStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Policy client error during initial policy fetch.</summary>
-</histogram>
-
-<histogram
-    name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayClientRegister"
-    units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Delay for registering the client with the policy server.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayOAuth2Token"
-    units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Delay for minting an OAuth2 acccess token.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayPolicyFetch"
-    units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Delay for fetching policy from the policy server.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayTotal"
-    units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Total delay for the initial policy fetch.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2Error"
-    enum="GoogleServiceAuthError">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Service error during OAuth2 access token fetch.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError"
-    enum="NetErrorCodes">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Network error during OAuth2 access token fetch.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyValidationFailure"
-    enum="ValidationFailures">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Source of policy validation errors on ChromeOS.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyValidationLoadStatus"
-    enum="PolicyValidationStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Validation result when loading user policy from the policy store.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyValidationStoreStatus"
-    enum="PolicyValidationStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Validation result when writing user policy to the policy store.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.UserSession.Logins"
-    enum="EnterpriseUserSessionLogins">
-  <owner>xiyuan@chromium.org</owner>
-  <owner>sduraisamy@chromium.org</owner>
-  <summary>Tracks the sign-in events on an enrolled device.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserSigninChoice" enum="SigninChoice">
-  <owner>atwilson@chromium.org</owner>
-  <summary>
-    Choice the user made when presented with enterprise signin dialog.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.VpdCheck">
-  <owner>igorcov@chromium.org</owner>
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    The status code (exit code or signal) from sanity check of RW_VPD read and
-    matching the contents with data from dump_vpd_log (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.VpdUpdateStatus">
-  <owner>igorcov@chromium.org</owner>
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    The status code (exit code or signal) from VPD update operation (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.WildcardLoginCheck.DelayPolicyTokenFetch"
-    units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Delay incurred by the token fetching step of the wildcard login check.
-  </summary>
-</histogram>
-
-<histogram name="Enterprise.WildcardLoginCheck.DelayTotal" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Total delay incurred by the wildcard login check.</summary>
-</histogram>
-
-<histogram name="Enterprise.WildcardLoginCheck.DelayUserInfoFetch" units="ms">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Delay incurred by the user info fetching step of the wildcard login check.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.DeprecatedDomainBindSucceeded"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 07/2016 in Issue 621270.
-  </obsolete>
-  <owner>mnissler@chromium.org</owner>
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Whether we were able to contact the AD Domain Controller. This check is
-    performed once at start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.DeprecatedDomainCheckFailed"
-    enum="EnterpriseCheckError">
-  <obsolete>
-    Deprecated 07/2016 in Issue 621270.
-  </obsolete>
-  <owner>mnissler@chromium.org</owner>
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Enum of possible things that can fail while checking for enterprise env.
-    This check is performed once at start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.InDomain" enum="BooleanEnabled">
-  <owner>mnissler@chromium.org</owner>
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Whether the machine is part of an AD domain. This check is performed once at
-    start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.InvalidPolicies" enum="EnterprisePolicies">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    A set of policy rules that were ignored due to integrity violations while
-    parsing the policy data which happens on start-up and when the policy has
-    changed.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.InvalidPoliciesDetected"
-    units="disabled policies">
-  <owner>mnissler@chromium.org</owner>
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    The number of disabled policy entries on Windows due to integrity violations
-    while parsing the policy data which happens on start-up and when the policy
-    has changed.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.IsEnterpriseUser" enum="BooleanEnabled">
-  <owner>rogerta@chromium.org</owner>
-  <summary>
-    Whether the machine is considered an enterprise user. An enterprise user is
-    either in a domain or is managed via MDM. This check is performed once at
-    start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.IsManaged" enum="BooleanEnabled">
-  <owner>rogerta@chromium.org</owner>
-  <summary>
-    Whether the machine is managed via MDM. This check is performed once at
-    start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="EnterpriseCheck.OSType" enum="OsSuite">
-  <owner>mnissler@chromium.org</owner>
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    The rough Windows suite we are running on. This check is performed once at
-    start-up on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    On non-mobile sites, gesture taps are delayed to prevent double taps from
-    sending a click event. This stat tracks the user's first action within 5
-    seconds after a double tap gesture when the gesture tap delay is disabled.
-  </summary>
-</histogram>
-
-<histogram name="Event.ActionAfterDoubleTapWithDelay"
-    enum="ActionAfterDoubleTap">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    On non-mobile sites, gesture taps are delayed to prevent double taps from
-    sending a click event. This stat tracks the user's first action within 5
-    seconds after a double tap gesture when gesture tap events are delayed.
-  </summary>
-</histogram>
-
-<histogram name="Event.AggregatedLatency.Renderer2" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of any input event and the renderer receiving and
-    starting to process it.
-  </summary>
-</histogram>
-
-<histogram name="Event.AndroidActionDown.ToolType" enum="MotionEventToolType">
-  <owner>mustaq@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Tracks the number of Android MotionEvents with ACTION_DOWN or
-    ACTION_POINTER_DOWN or ACTION_BUTTON_PRESS for each ToolType (unknown,
-    finger, mouse or stylus).
-  </summary>
-</histogram>
-
-<histogram name="Event.CoalescedCount.Mouse">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>Number of Mouse events coalesced.</summary>
-</histogram>
-
-<histogram name="Event.CoalescedCount.Touch">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>Number of Touch events coalesced.</summary>
-</histogram>
-
-<histogram name="Event.CoalescedLatency.Mouse" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the first and last events in a coalesced mouse events group.
-  </summary>
-</histogram>
-
-<histogram name="Event.CoalescedLatency.Touch" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the first and last events in a coalesced touch events group.
-  </summary>
-</histogram>
-
-<histogram name="Event.CompositorThreadEventQueue.CoalescedCount"
-    units="events">
-  <owner>chongz@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Number of continuous gesture events (GestureScrollUpdate,
-    GesturePinchUpdate) coalesced inside the compositor thread event queue per
-    event. This field is recorded just before the event is processed on the
-    compositor thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.CompositorThreadEventQueue.Continuous.HeadQueueingTime"
-    units="microseconds">
-  <owner>chongz@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the first event in a coalesced continuous gesture events group
-    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
-    compositor thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.CompositorThreadEventQueue.Continuous.TailQueueingTime"
-    units="microseconds">
-  <owner>chongz@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the last event in a coalesced continuous gesture events group
-    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
-    compositor thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.CompositorThreadEventQueue.NonContinuous.QueueingTime"
-    units="microseconds">
-  <owner>chongz@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a non-continuous gesture event (GestureScrollStart/End,
-    GesturePinchStart/End) was placed into the queue and when it was processed
-    on the compositor thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.DownEventCount.PerDestination"
-    enum="DownEventDestination">
-  <owner>xiaoyinh@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    The number of down events received per destination. Every down event that is
-    targeted to each destination will be counted, including those that don't
-    have an effect. For example: Tapping on a disabled button inside the browser
-    frame will be treated as down events on browser window.
-  </summary>
-</histogram>
-
-<histogram name="Event.DownEventCount.PerFormFactor" enum="DownEventFormFactor">
-  <owner>xiaoyinh@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    Counts the number of down events generated by clamshell/touchview.
-  </summary>
-</histogram>
-
-<histogram name="Event.DownEventCount.PerInput" enum="DownEventSource">
-  <owner>xiaoyinh@chromium.org</owner>
-  <owner>tbuckley@chromium.org</owner>
-  <summary>
-    Counts the number of down events generated by Mouse/Touch/Stylus.
-  </summary>
-</histogram>
-
-<histogram name="Event.DragDrop.Cancel" enum="DragDropEventSource">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Counts the number of times the user cancelled a drag and drop operation.
-  </summary>
-</histogram>
-
-<histogram name="Event.DragDrop.Drop" enum="DragDropEventSource">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Counts the number of times the user completed a drag and drop operation.
-  </summary>
-</histogram>
-
-<histogram name="Event.DragDrop.ExternalOriginDrop">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Counts the number of times a drag and drop operation originating outside of
-    a Chrome window successfuly drops.
-  </summary>
-</histogram>
-
-<histogram name="Event.DragDrop.Start" enum="DragDropEventSource">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Counts the number of times the user started a drag and drop operation.
-  </summary>
-</histogram>
-
-<histogram name="Event.FrameEventRouting.NoGestureTarget">
-  <owner>wjmaclean@chromium.org</owner>
-  <summary>
-    Record whether we unexpectedly encounter an empty gesture queue while
-    routing gesture events to frames' renderers: true =&gt; empty queue, false
-    =&gt; non-empty queue.
-  </summary>
-</histogram>
-
-<histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Emitted after a renderer process main-thread fling curve animation
-    terminates, for any reason, reporting the average animation frequency
-    (animations/second) of the fling instance over its lifetime. This is
-    computed as the number of fling animation ticks divided by the fling
-    animation duration.
-  </summary>
-</histogram>
-
-<histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Emitted after a renderer process impl-thread fling curve animation
-    terminates, for any reason, reporting the average animation frequency
-    (animations/second) of the fling instance over its lifetime. This is
-    computed as the number of fling animation ticks divided by the fling
-    animation duration.
-  </summary>
-</histogram>
-
-<histogram name="Event.GestureCreated" enum="UIEventType">
-  <owner>kuscher@google.com</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    The gesture-events recognized and dispatched by the browser gesture
-    recognizer. This replaces Ash.GestureCreated, which did not record events on
-    Android and Windows.
-  </summary>
-</histogram>
-
-<histogram name="Event.HitTest" enum="EventHitTest">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    For each hit test, records whether it was a hit or miss, and why.
-  </summary>
-</histogram>
-
-<histogram name="Event.HitTestValidity" enum="EventHitTestValidity">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    For hit tests that are validated, records whether it was correct or not, and
-    why.
-  </summary>
-</histogram>
-
-<histogram name="Event.HitTestValidityScore" enum="EventHitTestValidityScore">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    For hit tests that are invalid, records the score (a series of bits
-    indicating what was matched and what wasn't).
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchEndDefaultAllowed" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchend event and acking
-    it, for events which were not preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchEndDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchend event and acking
-    it, for events which were preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultAllowed" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchmove event and acking
-    it, for events which were not preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchmove event and acking
-    it, for events which were preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchStartDefaultAllowed"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchstart event and
-    acking it, for events which were not preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.BlockingTime.TouchStartDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer main thread receiving a touchstart event and
-    acking it, for events which were preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of all input events and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of input event and browser processing.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between touch events sent from RWH to renderer and acked by renderer.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.TouchUI" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between touch events received by Chrome and sent from RWH to renderer.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.WheelAcked" units="microseconds">
-  <owner>ccameron@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between wheel events sent from RWH to renderer and acked by renderer.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.WheelUI" units="microseconds">
-  <owner>ccameron@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between wheel events received by Chrome and sent from RWH to renderer.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.HitTest" units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Duration of a non-resurive hitTest operation. The hit test is non-recursive
-    when the AllowChildFrameContent flag is clear. See also
-    Event.Latency.HitTestRecusrive.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.HitTestRecursive" units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Duration of a recursive hitTest operation. The hit test is recursive when
-    the AllowChildFrameContent flag is set. See also Event.Latency.HitTest.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.OS" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>Time between input event received by OS and sent to Chrome.</summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchEndDefaultAllowed" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchend event to the renderer main thread and when
-    the renderer begins to process that event, for events which were not
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchEndDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchend event to the renderer main thread and when
-    the renderer begins to process that event, for events which were
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultAllowed" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchmove event to the renderer main thread and when
-    the renderer begins to process that event, for events which were not
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchmove event to the renderer main thread and when
-    the renderer begins to process that event, for events which were
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchStartDefaultAllowed"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchstart event to the renderer main thread and when
-    the renderer begins to process that event, for events which were not
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.QueueingTime.TouchStartDefaultPrevented"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between sending a touchstart event to the renderer main thread and when
-    the renderer begins to process that event, for events which were
-    preventDefaulted.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initiation of all input events and renderer processing. This is
-    soon to be replaced by Event.Latency.Renderer2.*
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer2" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between input event creation and the renderer receiving and starting to
-    process the event. For touch events on Windows, we measure from when the
-    event reaches Chrome, whereas on other platforms we use the timestamp from
-    the kernel. On Windows, this metric is only reported when |IsHighResolution|
-    is true, which will introduce some sampling bias.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.RendererImpl" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between input event creation and the renderer impl thread receiving and
-    starting to process the event. For touch events on Windows, we measure from
-    when the event reaches Chrome, whereas on other platforms we use the
-    timestamp from the kernel. On Windows, this metric is only reported when
-    |IsHighResolution| is true, which will introduce some sampling bias.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds">
-  <obsolete>
-    Deprecated 12/2013 and replaced by Event.Latency.RendererImpl.GestureScroll2
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between initial creation of touch event and when the resulting
-    ScrollGesture reaches Impl thread. Maximum is 200ms.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.RendererImpl.GestureScroll2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between touch event creation and when the resulting GestureScroll
-    reaches the Impl thread. Maximum is 1000ms. On Windows, we measure from when
-    the touch event reaches Chrome, whereas on other platforms we use the
-    timestamp from the kernel. On Windows, this metric is only reported when
-    |IsHighResolution| is true, which will introduce some sampling bias. This
-    supersedes the Event.Latency.RendererImpl.GestureScroll metric.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the browser receives the notification of the first ScrollUpdate
-    gesture event in a given scroll gesture event sequence with touch source
-    induced renderer swap and GPU starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Touch.GpuSwap2" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between gpu starts to swap the first ScrollUpdate gesture event in a
-    given scroll gesture event sequence with touch source induced frame and the
-    swap finishes.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the first ScrollUpdate gesture event in a given scroll gesture
-    event sequence with touch source, is handled on main/impl thread (specified
-    by suffix) and before renderer starts to swap.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollBegin.Touch.RendererSwapToBrowserNotified2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer starts to swap a frame induced by the first
-    ScrollUpdate gesture event in a given scroll gesture event sequence with
-    touch source, and browser receives the swap notification.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the first generated
-    ScrollUpdate gesture event in a given scroll gesture event sequence is
-    handled on main/impl thread (specified by suffix). If no swap was induced by
-    the ScrollUpdate gesture event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollBegin.Wheel.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the browser receives the notification of the first ScrollUpdate
-    gesture event in a given scroll gesture event sequence with wheel source
-    induced renderer swap and GPU starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Wheel.GpuSwap2" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between gpu starts to swap the first ScrollUpdate gesture event in a
-    given scroll gesture event sequence with wheel source induced frame and the
-    swap finishes.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the first ScrollUpdate gesture event in a given scroll gesture
-    event sequence with wheel source, is handled on main/impl thread (specified
-    by suffix) and before renderer starts to swap.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollBegin.Wheel.RendererSwapToBrowserNotified2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer starts to swap a frame induced by the first
-    ScrollUpdate gesture event in a given scroll gesture event sequence with
-    wheel source, and browser receives the swap notification.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a wheel event and the first generated
-    ScrollUpdate gesture event in a given scroll gesture event sequence is
-    handled on main/impl thread (specified by suffix). If no swap was induced by
-    the ScrollBegin gesture event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a wheel event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap"
-    units="microseconds">
-  <obsolete>
-    To be replaced by
-    Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2,
-    Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2 in M56.
-    https://crbug.com/649754
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between the browser receives the notification of a ScrollUpdate gesture
-    event induced renderer swap and GPU starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.GpuSwap" units="microseconds">
-  <obsolete>
-    To be replaced by Event.Latency.ScrollUpdate.Touch.GpuSwap2,
-    Event.Latency.ScrollUpdate.wheel.GpuSwap2 in M56. https://crbug.com/649754
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between gpu starts to swap a ScrollUpdate gesture event induced frame
-    and the swap finishes.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"
-    units="microseconds">
-  <obsolete>
-    To be replaced by Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2,
-    Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2 in M56.
-    https://crbug.com/649754
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between the ScrollUpdate gesture event is handled on main/impl thread
-    (specified by suffix) and before renderer starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified"
-    units="microseconds">
-  <obsolete>
-    To be replaced by
-    Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2,
-    Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2 in M56.
-    https://crbug.com/649754
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between the renderer starts to swap a frame induced by ScrollUpdate
-    gesture event and browser receives the swap notification.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the browser receives the notification of a ScrollUpdate gesture
-    event with touch source induced renderer swap and GPU starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Touch.GpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between gpu starts to swap a ScrollUpdate gesture event with touch
-    source induced frame and the swap finishes.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the ScrollUpdate gesture event with touch source, is handled on
-    main/impl thread (specified by suffix) and before renderer starts to swap.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer starts to swap a frame induced by ScrollUpdate
-    gesture event with touch source, and browser receives the swap notification.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-
-    To be replaced by
-    Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2 in M57.
-    https://crbug.com/669618
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the generated
-    ScrollUpdate gesture event is handled on main/impl thread (specified by
-    suffix). If no swap was induced by the ScrollUpdate gesture event, no
-    recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and start of the frame swap
-    on the GPU service caused by the generated ScrollUpdate gesture event. If no
-    swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.TouchToHandled"
-    units="microseconds">
-  <obsolete>
-    To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToHandled2 in M56.
-    https://crbug.com/649754
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the generated
-    ScrollUpdate gesture event is handled on main/impl thread (specified by
-    suffix). If no swap was induced by the ScrollUpdate gesture event, no
-    recording is made.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the browser receives the notification of a ScrollUpdate gesture
-    event with wheel source induced renderer swap and GPU starts to swap.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Wheel.GpuSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between gpu starts to swap a ScrollUpdate gesture event with wheel
-    source induced frame and the swap finishes.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the ScrollUpdate gesture event with wheel source, is handled on
-    main/impl thread (specified by suffix) and before renderer starts to swap.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between the renderer starts to swap a frame induced by ScrollUpdate
-    gesture event with wheel source, and browser receives the swap notification.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a wheel event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-
-    To be replaced by
-    Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2 in M57.
-    https://crbug.com/669618
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a wheel event and the generated
-    ScrollUpdate gesture event is handled on main/impl thread (specified by
-    suffix). If no swap was induced by the ScrollUpdate gesture event, no
-    recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Touch.TimeToFirstScrollUpdateSwapBegin2"
-    units="microseconds">
-  <obsolete>
-    Replaced by
-    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Touch.TimeToScrollUpdateSwapBegin2"
-    units="microseconds">
-  <obsolete>
-    Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and start of the frame swap
-    on the GPU service caused by the generated ScrollUpdate gesture event. If no
-    swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.TouchToFirstScrollUpdateSwap"
-    units="microseconds">
-  <obsolete>
-    Replaced by Event.Latency.TouchToFirstScrollUpdateSwapBegin.
-    crbug.com/478845
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the frame swap caused by
-    by the generated ScrollUpdate gesture event if that ScrollUpdate is the
-    first such in a given scroll gesture event sequence. If no swap was induced
-    by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-
-    To be replaced by
-    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2 in M56.
-    https://crbug.com/649754
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds">
-  <obsolete>
-    Replaced by Event.Latency.TouchToScrollUpdateSwapBegin. crbug.com/478845
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and the frame swap caused by
-    by the generated ScrollUpdate gesture event. If no swap was induced by the
-    event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between initial creation of a touch event and start of the frame swap
-    on the GPU service caused by the generated ScrollUpdate gesture event. If no
-    swap was induced by the event, no recording is made.
-
-    To be replaced by
-    Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2 in M56.
-    https://crbug.com/649754
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.Wheel.TimeToFirstScrollUpdateSwapBegin2"
-    units="microseconds">
-  <obsolete>
-    Replaced by
-    Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between initial creation of a wheel event and the start of the frame
-    swap on the GPU service caused by the generated ScrollUpdate gesture event
-    if that ScrollUpdate is the first such event in a given scroll gesture event
-    sequence. If no swap was induced by the event, no recording is made.
-  </summary>
-</histogram>
-
-<histogram name="Event.Latency.X11EventSource.UpdateServerTime"
-    units="microseconds">
-  <obsolete>
-    Deprecated 08/2016, and replaced by Linux.X11.ServerRTT.
-  </obsolete>
-  <owner>thomasanderson@chromium.org</owner>
-  <summary>Time to request a timestamp from the X server.</summary>
-</histogram>
-
-<histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Number of continuous events (touchmove, mousemove, mousewheel) coalesced
-    inside the main thread event queue per event. This field is recorded just
-    before the event is processed on the main thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.MainThreadEventQueue.Continuous.FreshnessTime"
-    units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a continuous event (touchmove, mousemove, mousewheel) was
-    placed into the queue (or coalesced with another event) and when it was
-    processed on the main thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.MainThreadEventQueue.Continuous.QueueingTime"
-    units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a continuous event (touchmove, mousemove, mousewheel) was
-    placed into the queue and when it was processed on the main thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime"
-    units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a non-continuous event (not touchmove, mousemove,
-    mousewheel) was placed into the queue and when it was processed on the main
-    thread.
-  </summary>
-</histogram>
-
-<histogram name="Event.PassiveForcedEventDispatchCancelled"
-    enum="PassiveForcedListenerResultType">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Counts the number of event listener invocations that were forced to be
-    passive due to interventions and whether the invocation of the listener
-    called prevent default or not.
-  </summary>
-</histogram>
-
-<histogram name="Event.PassiveListeners" enum="EventResultType">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    The result of handling of MouseWheel, TouchStart, TouchMove, TouchEnd events
-    in the renderer.
-  </summary>
-</histogram>
-
-<histogram name="Event.PassiveListeners.ForcedNonBlockingLatency"
-    units="microseconds">
-  <obsolete>
-    Deprecated 08/2016 in Issue 595327, and replaced by
-    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
-  </obsolete>
-  <owner>dtapuska@chromium.org</owner>
-  <summary>
-    Time between when a forced non-blocking event was generated and the event
-    processed. This histogram tracks the benefit of forcing non-blocking events
-    listeners.
-  </summary>
-</histogram>
-
-<histogram name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling"
-    units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a touchstart or first touchmove event per scroll was
-    generated and the event processed, for events which were forced non-blocking
-    since they occurred during fling. This histogram tracks the benefit of
-    forcing events non-blocking during fling.
-  </summary>
-</histogram>
-
-<histogram
-    name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToUnresponsiveMainThread"
-    units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a touchstart or first touchmove event per scroll was
-    generated and the event processed, for events which were forced non-blocking
-    since they occurred while the main thread was unresponsive. This histogram
-    tracks the benefit of forcing events non-blocking when the main thread is
-    unresponsive.
-  </summary>
-</histogram>
-
-<histogram name="Event.PassiveListeners.Latency" units="microseconds">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a cancelable event was generated and the event processed
-    yet no action was executed for the event. This histogram tracks the
-    potential benefit of using passive events listeners.
-  </summary>
-</histogram>
-
-<histogram name="Event.RenderView.DiscardInput" enum="BooleanHit">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Whether the input IPC messages were discarded before being fully processed
-    in RenderView's IPC message handler.
-  </summary>
-</histogram>
-
-<histogram name="Event.SingleTapType" enum="TapDelayType">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    On non-mobile sites, gesture taps are delayed to prevent double taps from
-    sending a click event. This stat counts the number of taps that are delayed
-    by the double-tap delay versus those that are sent immediately on mobile
-    sites.
-  </summary>
-</histogram>
-
-<histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity">
-  <owner>majidvp@chromium.org</owner>
-  <owner>caseq@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Whether the timestamps on input events produced by the windowing system
-    appear to be sharing the same time base as TimeTicks, modulo possible
-    roll-over.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TargetAndDispatchResult"
-    enum="TouchTargetAndDispatchResultType">
-  <obsolete>
-    Deprecated 05/2016, and replaced by Event.Touch.TargetAndDispatchResult2.
-  </obsolete>
-  <owner>dtapuska@chromium.org</owner>
-  <summary>
-    An enumeration identifying 3 properties: 1) a classification of the event
-    target whether it is a root scroll listener (window, document, body) or not;
-    2) the result of the dispatch; 3) whether the document was scrollable or
-    not.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TargetAndDispatchResult2"
-    enum="TouchTargetAndDispatchResultType2">
-  <owner>dtapuska@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    An enumeration identifying 4 properties: 1) a classification of the current
-    target whether it is a root scroll listener (window, document, body) or not;
-    2) the result of the dispatch or whether it was previously canceled 3)
-    whether the document was scrollable or not 4) what phase the listener was
-    encountered at. This metric is logged during the dispatch of the touch
-    events. It will only be reported for main frame events that block scrolling,
-    have only one touch point and current targets that fired an event listener
-    at that phase.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TimedOutOnDesktopSite" enum="BooleanTimedOut">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    On non-mobile-optimized (desktop) sites, whether the ack response from the
-    renderer for any event in a contiguous touch sequence exceeds the
-    desktop-specific timeout threshold.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TimedOutOnMobileSite" enum="BooleanTimedOut">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    On mobile-optimized sites, whether the ack response from the renderer for
-    any event in a contiguous touch sequence exceeds the mobile-specific timeout
-    threshold.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsAfterPageLoad"
-    enum="TouchEventDispatchResultType">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart events and
-    the first touchmove events per scroll. Only recorded after the page is fully
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsBeforePageLoad"
-    enum="TouchEventDispatchResultType">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart events and
-    the first touchmove events per scroll. Only recorded before the page is
-    fully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsDuringFling"
-    enum="TouchEventDispatchResultType">
-  <obsolete>
-    Deprecated 08/2016 in Issue 595327, and replaced by
-    Event.Touch.TouchDispositionsDuringFling2.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart events. Only
-    recorded while there is an active fling animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsDuringFling2"
-    enum="TouchEventDispatchResultType">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart and first
-    touchmove events per scroll. Only recorded while there is an active fling
-    animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsOutsideFling"
-    enum="TouchEventDispatchResultType">
-  <obsolete>
-    Deprecated 08/2016 in Issue 595327, and replaced by
-    Event.Touch.TouchDispositionsOutsideFling2.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart events. Only
-    recorded while there is no active fling animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchDispositionsOutsideFling2"
-    enum="TouchEventDispatchResultType">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Records the disposition (handled or not handled) of touchstart and first
-    touchmove events per scroll events. Only recorded while there is no active
-    fling animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a touch event was generated and the event was processed.
-    Recorded only for touchstart events and the first touchmove events per
-    scroll that occur after the page is fully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a touch event was generated and the event was processed.
-    Recorded only for touchstart events and the first touchmove events per
-    scroll that occur before the page is fully loaded. This histogram tracks the
-    benefit of forcing passive event listeners before the page is fully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Time between when a touch event was generated and the event was processed.
-    Recorded only for touchstart events and the first touchmove events per
-    scroll when there was no active fling animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchStartLatencyDuringFling" units="microseconds">
-  <obsolete>
-    Deprecated 08/2016 in Issue 595327, and replaced by
-    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between when a touchstart event was generated and the event was
-    processed. Recorded only when there was an active fling animation. This
-    histogram tracks the benefit of forcing passive event listeners during
-    fling.
-  </summary>
-</histogram>
-
-<histogram name="Event.Touch.TouchStartLatencyOutsideFling"
-    units="microseconds">
-  <obsolete>
-    Deprecated 08/2016 in Issue 595327, and replaced by
-    Event.Touch.TouchLatencyOutsideFling.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Time between when a touchstart event was generated and the event was
-    processed. Recorded only when there was no active fling animation.
-  </summary>
-</histogram>
-
-<histogram name="Event.TouchDuration" units="ms">
-  <owner>kuscher@google.com</owner>
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    The duration of a touch-sequence. Only measured for single finger gestures.
-    This replaces Ash.TouchDuration2, which did not record events on Android and
-    Windows.
-  </summary>
-</histogram>
-
-<histogram name="Event.TouchMaxDistance" units="pixels">
-  <owner>kuscher@google.com</owner>
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    The maximum euclidean distance in dips (device independent pixel) which a
-    touch point has travelled away from its starting point. Only measured for
-    single finger gestures. This replaces Ash.TouchMaxDistance, which did not
-    record events on Android and Windows.
-  </summary>
-</histogram>
-
-<histogram name="Event.TouchSelection.Duration" units="ms">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Duration of touch selection sequence which finished with the user selecting
-    one of the text manipulation actions, such as copy, cut, or paste. The
-    duration is measured from the moment the text selection handles are shown,
-    and until the action is executed.
-  </summary>
-</histogram>
-
-<histogram name="Event.TouchSelection.EndedWithAction" enum="BooleanSuccess">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Whether the touch selection sequence ended with the user selecting one of
-    the text manipulation actions, such as copy, cut, or paste. after startup).
-    Sequences ending with such action are considered successful.
-  </summary>
-</histogram>
-
-<histogram name="Event.TouchSelection.WasDraggedDuration" units="ms">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Duration of touch selection sequence which involved dragging a text
-    selection handle. The duration is measured from the moment the text
-    selection handles are shown, and until they are dismissed.
-  </summary>
-</histogram>
-
-<histogram name="ExclusiveAccess.BubbleReshowsPerSession.Fullscreen">
-  <owner>mgiuca@chromium.org</owner>
-  <summary>
-    The number of times the fullscreen bubble was re-shown due to inactivity
-    during a session of fullscreen mode (not including mouse lock). If the mouse
-    is also locked while a re-show occurs, both this and
-    BubbleReshowsPerSession.MouseLock are incremented. Includes all types of
-    fullscreen (user-triggered, extension-triggered and page-triggered). Only
-    recorded when the simplified-fullscreen-ui flag is enabled.
-  </summary>
-</histogram>
-
-<histogram name="ExclusiveAccess.BubbleReshowsPerSession.MouseLock">
-  <owner>mgiuca@chromium.org</owner>
-  <summary>
-    The number of times the mouse lock bubble was re-shown due to inactivity
-    during a session of mouse lock mode. If also in fullscreen while a re-show
-    occurs, both this and BubbleReshowsPerSession.Fullscreen are incremented.
-    Only recorded when the simplified-fullscreen-ui flag is enabled.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.AdInjected" units="Extension Count">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that inject at least one new ad.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.AdLikelyInjected" units="Extension Count">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that performed an action that
-    heuristically looks like injecting an ad, but could not be confirmed.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.AdLikelyReplaced" units="Extension Count">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that performed an action that
-    heuristically looks like replacing an ad, but could not be confirmed.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.AdRemoved" units="Extension Count">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that remove at least one ad.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.AdReplaced" units="Extension Count">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that replace at least one ad.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ContentScript">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that inject a content script.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedDiv">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create divs to add to the
-    page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedEmbed">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create 'embed' elements to
-    add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedIframe">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create iframes to add to
-    the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedInput">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create inputs to add to the
-    page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedLink">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create links to add to the
-    page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedObject">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create 'object' elements to
-    add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedScript">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that create script tags to add
-    to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.DocumentWrite">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that use document.write.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ContentScript">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that inject a
-    content script.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedDiv">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create divs
-    to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedEmbed">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create
-    'embed' elements to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedIframe">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create
-    iframes to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedInput">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create
-    inputs to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedLink">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create links
-    to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedObject">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create
-    'object' elements to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedScript">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that create
-    script tags to add to the page.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.DocumentWrite">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that use
-    document.write.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.InnerHtml">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that set
-    innerHTML.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.InvokedDomMethod">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that invoke DOM
-    methods.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ModifiedDom">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that set the
-    value of DOM properties via assignments.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ReadDom">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each www.google.com pageload, the number of extensions that read from
-    the DOM.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.InnerHtml">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that set innerHTML.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.InvokedDomMethod">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that invoke DOM methods.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ModifiedDom">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that set the value of DOM
-    properties via assignments.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ReadDom">
-  <obsolete>
-    Deprecated with M46.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    For each pageload, the number of extensions that read from the DOM.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.BlacklistInstalled"
-    enum="ExtensionLocation">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The number of extensions that were blacklisted when already installed,
-    grouped by Extension::Location. Logged when ExtensionService blackists and
-    unloads an installed extension.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The number of extensions that have been blocked from installing grouped by
-    Extension::Location. Logged when ExtensionService refuses to install a
-    blacklisted extension.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.SilentInstall" enum="ExtensionLocation">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The number of extensions that have been silently installed in a blacklisted
-    state, grouped by Extension::Location. Logged when ExtensionService installs
-    a blacklisted extension without blocking it (ExtensionBlacklist.BlockCRX
-    would be logged otherwise). Typically this will be when a user has a
-    blacklisted extension synced.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.UnblacklistInstalled"
-    enum="ExtensionLocation">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The number of extensions that were unblacklisted when installed, grouped by
-    Extension::Location. Logged when ExtensionService unblacklists and loads a
-    blacklisted extension.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBubble.DevModeUserSelection"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, logged right after the
-    action is taken.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBubble.ExtensionsInDevModeCount"
-    units="Developer Mode Extensions">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The total number of extensions found to be loaded under Developer Mode,
-    logged when the devmode bubble is shown (once per startup per profile, if
-    any devmode extension is found).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBubble.ExtensionWipeoutCount" units="Extensions">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The total number of extensions found to be wiped by SideloadWipeout, logged
-    when the wipeout bubble is shown, which is once per startup per profile (as
-    long as wiped extensions were found). Not logged if no extensions of that
-    nature were found.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionBubble.WipeoutUserSelection"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, logged right after the
-    action is taken.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionContentHashFetcher.CreateHashesTime" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The time taken to create the computed_hashes.json file for an extension.
-    This happens once for each extension after we get signed values of the
-    expected root node of a tree hashes for each file from the webstore; we then
-    compute the individual block level hashes of the actual files and cache them
-    in computed_hashes.json (assuming we don't detect any mismatches).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionContentHashReader.InitLatency" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The time taken to initialize the ContentHashReader for an extension resource
-    load. (The work done is to read in the verified contents and computed hashes
-    data, and compare them to make sure they agree.)
-  </summary>
-</histogram>
-
-<histogram name="ExtensionContentVerifyJob.TimeSpentUS" units="microseconds">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The time taken in computation (hashing actual bytes read and comparing
-    against expected computed hashes values) during an extension resource load.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstalledLoader.ForceDisabled"
-    enum="BooleanForceDisabled">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Counts whether we force-disabled an installed extension at startup because a
-    policy provider indicated it must remain disabled.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.InvalidCount">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    This is a count of the number of ids that we asked to be signed which the
-    server response indicated were not in the webstore.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.RequestCount">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    A count of the number of server requests since Chrome started running,
-    recorded each time we do a request. NOTE: when interpreting these values,
-    keep in mind that a user who did 5 server requests during one run of Chrome
-    will log this histogram 5 times with values 1, 2, 3, 4, and 5.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.ResultWasValid">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Whether the server result received by the extensions install signer was
-    valid or invalid.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.SecondsSinceLastRequest"
-    units="seconds">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    This records the number of seconds since the last time we've done a request
-    to the server (only during this run of the browser).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.UptimeAtTimeOfRequest" units="seconds">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Records how many seconds the browser has been running at the time a request
-    to the server is made to get a new install signature.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.ActualStatus"
-    enum="ExtensionInstallVerifierStatus">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Logged during InstallVerifier::Init, to indicate the actual enforcement
-    status used (usually determined by the ExtensionInstallVerifier field trial
-    experiment, but possibly modified by command line flags).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.ExperimentStatus"
-    enum="ExtensionInstallVerifierStatus">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Logged during InstallVerifier::Init to indicate the enforcement status as
-    determined by the ExtensionInstallVerifier field trial experiment.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.GetSignatureResult"
-    enum="ExtensionInstallVerifierGetSignatureResult">
-  <owner>asargent@chromium.org</owner>
-  <summary>The result of the verifier trying to get a new signature.</summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.InitResult"
-    enum="ExtensionInstallVerifierInitResult">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The result of initialization for the extension install verifier.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.MustRemainDisabled"
-    enum="ExtensionInstallVerifierMustRemainDisabled">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The outcome for each call to InstallVerifier::MustRemainDisabled.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionOverrideBubble.NtpOverriddenUserSelection"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, notifing them of an
-    extension overriding their new tab page. Logged right after the action is
-    taken.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionHomePage"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, notifing them of an
-    extension overriding their homepage. Logged right after the action is taken.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionSearchEngine"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, notifing them of an
-    extension overriding their search engine. Logged right after the action is
-    taken.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionStartupPage"
-    enum="ExtensionBubbleAction">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The action taken by the user when seeing the bubble, notifing them of an
-    extension overriding their startup page. Logged right after the action is
-    taken.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ActiveScriptController.DeniedExtensions"
-    units="Extension Count">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions on a page that wanted to execute a script, required
-    explicit user consent, and were denied permission.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ActiveScriptController.PermittedExtensions"
-    units="Extension Count">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions on a page that wanted to execute a script, required
-    explicit user consent, and were granted permission.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ActiveScriptController.PreventableAdInjectors"
-    units="Extension Count">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions per page that injected an ad and could have been
-    stopped if the user had declined script injection. This is related to the
-    ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
-    navigation. Only recorded if there was at least one ad injection detected.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ActiveScriptController.ShownActiveScriptsOnPage"
-    units="Number of Actions">
-  <obsolete>
-    Deprecated 2/2014.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions which would display an Active Script Running
-    indiciation to the user. Recorded at page close.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ActiveScriptController.UnpreventableAdInjectors"
-    units="Extension Count">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions per page that injected an ad and that could not
-    have been stopped through script injection permission. This is related to
-    the ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
-    navigation. Only recorded if there was at least one ad injection detected.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AdInjection.AdType" enum="InjectedAdType">
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The type of ad that was injected.</summary>
-</histogram>
-
-<histogram name="Extensions.AdInjection.InstallLocation"
-    enum="ExtensionLocation">
-  <owner>felt@chromium.org</owner>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The install location of an ad-injecting extension. Recorded upon page close
-    for any extension that injected ads on that page.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ApiBindingGenerationTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time it takes to generate the JavaScript API bindings for a
-    particular extension API. This includes the time from when a JavaScript
-    context tries to access the API, triggering the lazy initializion, to the
-    time when the API object is returned. This is only recorded if the binding
-    is successfully generated. See also Extensions.DidCreateScriptContext_*.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ApiBindingObjectGenerationTime"
-    units="microseconds">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time it takes to create the JavaScript binding object using
-    the binding.js module. This is a strict subset of
-    Extensions.ApiBindingGenerationTime, which includes this work and more.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Captures the results of URL resolution when relative urls are used in the
-    tabs/windows api.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppLaunch" enum="AppLaunch">
-  <owner>benwells@chromium.org</owner>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The number of times v1 apps are launched grouped by
-    extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer">
-  <obsolete>
-    Deprecated as of 12/2014, replaced by Apps.HostedAppLaunchContainer.
-  </obsolete>
-  <owner>benwells@chromium.org</owner>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The number of times apps are launched grouped by
-    extensions::LaunchContainer.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppLaunchSource" enum="AppLaunchSource">
-  <owner>benwells@chromium.org</owner>
-  <owner>cylee@chromium.org</owner>
-  <summary>
-    The number of times times apps are launched grouped by
-    extensions::AppLaunchSource.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppLoadedInTab" enum="AppLoadedInTabSource">
-  <owner>lazyboy@chromium.org</owner>
-  <summary>
-    A platform app ended up in a regular tab either by the app page or its
-    background page. Note that this happens unexpectedly right now and we wish
-    to track its usage before removing the supporting code.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppLocation" enum="ExtensionLocation">
-  <owner>benwells@chromium.org</owner>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The number of apps loaded at startup time grouped by Extension::Location.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppsPromo" enum="AppPromoAction">
-  <owner>benwells@chromium.org</owner>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The actions taken in the NTP apps promo grouped by
-    extension_misc::AppsPromoBuckets.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.AppTabLaunchType" enum="ExtensionLaunchType">
-  <owner>benwells@chromium.org</owner>
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    The number of apps launched grouped by extensions::LaunchType.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundContentsServiceStartupTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to load BackgroundContents for apps at startup when the extension
-    system notifies that it is ready.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundPageLoadTime" units="ms">
-  <obsolete>
-    Replaced by Extensions.BackgroundPageLoadTime2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The time for an extension's background page to load.</summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundPageLoadTime2" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time taken for an extension's persistent background page to load its
-    initial URL.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundPageType"
-    units="ExtensionBackgroundPageType">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The type (if any) of background page the extension has. Recorded for
-    installed extensions on startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BadMessageFunctionName" enum="ExtensionFunctions">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of times each Extension function call sends a bad message,
-    killing the renderer. This may indicate a bug in that API's implementation
-    on the renderer. Note a similar, aggregate metric is BadMessageTerminate_EFD
-    which counts the number of bad messages that are sent overall.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BadSyncDataReason" enum="BadSyncDataReason">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The reason a valid ExtensionSyncData could not be parsed from a SyncData
-    received from sync.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.BookmarkAppLaunchContainer"
-    enum="AppLaunchContainer">
-  <owner>benwells@chromium.org</owner>
-  <summary>Records the container used for a bookmark app launch.</summary>
-</histogram>
-
-<histogram name="Extensions.CheckForExternalUpdatesTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    ExtensionService::CheckForExternalUpdates.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptExtensionBecameDisabled">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Fired each time an extension was detected to be corrupted (contents not
-    matching an expected content hash from the webstore) and was disabled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptExtensionDisabledReason"
-    enum="CorruptExtensionDisabledReason">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    The reason why an extension was detected to be corrupted. Recorded each time
-    an extension is disabled due to corruption detection.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptExtensionTotalDisables">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Logged once at startup, this is the value of a counter that is incremented
-    anytime we disable a corrupted extension because its content didn't match an
-    expected content hash.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptExtensionWouldBeDisabled">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Simiar to Extensions.CorruptExtensionBecameDisabled, but fires when we're in
-    a bootstrapping mode and would have disabled an extension.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Fires when we detect corruption in an enterprise policy forced install
-    extension and begin the process of reinstalling it. Compare to
-    CorruptPolicyExtensionResolved to judge success rate.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Fires when we've successfully resinstalled a corrupt enterprise policy
-    force-installed extension, with a value indicating how long it took
-    end-to-end to complete the reinstall (including download time).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CorruptPolicyExtensionWouldBeDisabled"
-    enum="BooleanHit">
-  <obsolete>
-    Deprecated 9/2016 by fix for Issue 447040.
-  </obsolete>
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Fires when we detect corruption in an enterprise policy forced install
-    extension. See http://crbug.com/447040 for more background on why we don't
-    yet disable these. A useful comparison can be made between this value and
-    the number of policy forced extensions loaded at startup, which is logged in
-    the EXTERNAL_POLICY_DOWNLOAD bucket of the Extensions.ExtensionLocation
-    histogram.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchError" enum="NetErrorCodes">
-  <owner>asargent@chromium.org</owner>
-  <summary>Net error results from URLFetcher.</summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchFailureRetryCountGoogleUrl">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Number of times chrome retried to download an extension with a url on a
-    google.com domain, before eventually giving up.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchFailureRetryCountOtherUrl">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Number of times chrome retried to download an extension with a url on a non
-    google.com domain, before eventually giving up.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchSuccessRetryCountGoogleUrl">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Number of times chrome retried to download an extension with a url on a
-    google.com domain, before eventually succeeding.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchSuccessRetryCountOtherUrl">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Number of times chrome retried to download an extension with a url on a non
-    google.com domain, before eventually succeeding.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.CrxInstallDirPathLength">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Length of the path to the directory under which an extension is installed.
-    This directory is in the user's profile.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Database.Database.Restore"
-    enum="LevelDBDatabaseCorruptionRestoreValue">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The result of an attempt to recover from an attempt to open a database that
-    failed as a result of corruption.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Database.Open" enum="LevelDBStatus">
-  <owner>cmumford@chromium.org</owner>
-  <summary>The result of an open attempt to an Extensions database.</summary>
-</histogram>
-
-<histogram name="Extensions.Database.Restore"
-    enum="LevelDBDatabaseCorruptionRestoreValue">
-  <obsolete>
-    Shipped only in M48. Superceded by Extensions.Database.Database.Restore and
-    Extensions.Database.Value.Restore.
-  </obsolete>
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The result of an attempt to recover from an attempt to open a database that
-    failed as a result of corruption.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Database.Value.Restore"
-    enum="LevelDBValueCorruptionDeleteValue">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The result of an attempt to delete a corrupted value from a database.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DeclarativeRulesStorageInitialization" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time spent until rules storage delegate gets ready.</summary>
-</histogram>
-
-<histogram name="Extensions.DepricatedExternalJsonCount">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of extensions referenced in the depricated external extensions source
-    at path chrome::DIR_DEPRICATED_EXTERNAL_EXTENSIONS.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DialogLoadTime" units="ms">
-  <obsolete>
-    There is no such thing as an extension dialog.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time for a dialog-hosted extension to load.</summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_Blessed" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per blessed
-    extension context (chrome-extension://... origins within Extension
-    processes, like background pages, options pages, popups).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_BlessedWebPage" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per blessed web page
-    context (hosted apps).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_ContentScript" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per content script
-    context.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_Unblessed" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per unblessed
-    extension context (chrome-extension://... origins hosted in iframes).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_Unspecified" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings in an unknown type
-    of context (this should never happen other than in bizarre circumstances).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_WebPage" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per web page context
-    (just the chrome.app, chrome.webstore, and possibly chrome.runtime APIs).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidCreateScriptContext_WebUI" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
-    the time taken to install Extension JavaScript bindings per WebUI context
-    (chrome://extensions and so forth).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidInitializeServiceWorkerContextOnWorkerThread"
-    units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Records the time taken to install Extension JavaScript bindings per service
-    worker context.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DidSuppressJavaScriptException"
-    enum="ChromeChannelForHistogram">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Records the Chrome channel when JavaScript exceptions are not gracefully
-    dealt with, and suppressed by C++ instead. These are exceptions generated
-    (or simply not caught and gracefully recovered) in our own internal
-    JavaScript, not from JavaScript code written by developers (that which is
-    typically hosted in CRX files). This should be 0 for unstable channels like
-    canary and dev, because we try *not* to suppress errors and instead kill the
-    renderer and generate a crash report. However, at times we need to suppress
-    even those. Note that this histogram is intended to be tracked over time,
-    per channel, to observe crash rates. Comparisons between
-    stable/beta/dev/canary are unlikely to be meaningful.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Disabled">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions that are disabled at browser startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledForPermissions">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions that are disabled at browser startup due to
-    permissions increases.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledUIUserResponse"
-    enum="ExtensionDisabledUIUserResponse">
-  <obsolete>
-    Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is
-    fixed with DisabledUIUserResponse2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    User response to the dialog shown when an extension is disabled due to an
-    update requiring more permissions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledUIUserResponse2"
-    enum="ExtensionDisabledUIUserResponse">
-  <owner>catmullings@chromium.org</owner>
-  <summary>
-    User response to the dialog shown when an extension is disabled due to an
-    update requiring more permissions. A count is recorded when the user takes
-    an action on the dialog (re-enable or remove the extension) or ignores the
-    dialog.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledUIUserResponseRemoteInstall"
-    enum="ExtensionDisabledUIUserResponse">
-  <obsolete>
-    Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is
-    fixed with DisabledUIUserResponseRemoteInstall2.
-  </obsolete>
-  <owner>mek@chromium.org</owner>
-  <summary>
-    User response to the dialog shown when an extension is disabled due to it
-    having been installed remotely.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledUIUserResponseRemoteInstall2"
-    enum="ExtensionDisabledUIUserResponse">
-  <owner>catmullings@chromium.org</owner>
-  <summary>
-    User response to the dialog shown when an extension is disabled due to it
-    having been installed remotely. A count is recorded when the user takes an
-    action on the dialog (re-enable or remove the extension) or ignores the
-    dialog.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DisableReason" enum="ExtensionDisableReason">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The count of disabled extensions at startup grouped by disble reason from
-    Extension::DisableReason. When an extension is disabled, it can be for one
-    or more reasons (although typically just one), so the sum of these may be
-    greater than 'Extensions.Disabled' which is a count of the number of unique
-    extensions that are disabled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.DocsOfflineIconState" enum="ExtensionIconState">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The state of the toolbar icon for the docs offline extension (visible in the
-    toolbar, overflowed in the menu, or the extension is disabled). Recorded
-    once per startup per (non-incognito) profile.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners">
-  <obsolete>
-    Obsolete since the enhanced bookmarks manager is no longer using an event
-    page.
-  </obsolete>
-  <owner>wittman@chromium.org</owner>
-  <summary>
-    The number of event listeners the Enhanced Bookmarks Manager has, measured
-    at profile startup. A value of 0 implies that Chrome has a general bug with
-    event page management, since the bookmarks manager should always have at
-    least one event listener - but a bug with event page management that affects
-    the bookmarks manager is particularly dire.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ErrorCodeFromCrxOpen">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    If opening the CRX file for unpacking fails, this integer is the error code
-    given by the OS.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.EventlessEventPages">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions with event pages that have no registered event
-    listeners at profile startup. (This may indicate something has gone wrong;
-    such event pages will never get started.)
-  </summary>
-</histogram>
-
-<histogram name="Extensions.EventPageActiveTime" units="ms">
-  <obsolete>
-    Replaced by Extensions.EventPageActiveTime2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The time an extension's event page has spent loaded.</summary>
-</histogram>
-
-<histogram name="Extensions.EventPageActiveTime2" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time between an extension's event page loading its first URL and the
-    event page later shutting down.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.EventPageIdleTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The time an extension's event page has spent unloaded.</summary>
-</histogram>
-
-<histogram name="Extensions.EventPageLoadTime" units="ms">
-  <obsolete>
-    Replaced by Extensions.EventPageLoadTime2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The time for an extension's event page to load.</summary>
-</histogram>
-
-<histogram name="Extensions.EventPageLoadTime2" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time taken for an extension's event page to load its initial URL.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Events.Dispatch" enum="ExtensionEvents">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Recorded every time an event is dispatched to an extension.</summary>
-</histogram>
-
-<histogram name="Extensions.Events.DispatchToComponent" enum="ExtensionEvents">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded every time an event is dispatched to a *component* extension.
-    Otherwise identical to Extensions.Events.Dispatched.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Events.DispatchToComponentWithSuspendedEventPage"
-    enum="ExtensionEvents">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Recorded every time an event is dispatched to a *component* extension with a
-    suspended event page.  Otherwise identical to
-    Extensions.Events.DispatchWithSuspendedEventPage.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Events.DispatchWithPersistentBackgroundPage"
-    enum="ExtensionEvents">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded every time an event is dispatched to an extension with a persistent
-    background page. The event may or may not have been dispatched to the
-    background page itself, for example it may have been dispatched to its
-    popup. When this metric is recorded, Extensions.Events.Dispatch will also be
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Events.DispatchWithRunningEventPage"
-    enum="ExtensionEvents">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded every time an event is dispatched to an extension with an event
-    page that was already running (i.e. at some point had been woken from its
-    suspended state, see Extensions.Events.DispatchWithSuspendedEventPage). The
-    event may or may not have been dispatched to the event page itself, for
-    example it may have been dispatched to its popup. When this metric is
-    recorded, Extensions.Events.Dispatch will also be recorded.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Events.DispatchWithSuspendedEventPage"
-    enum="ExtensionEvents">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded every time an event is dispatched to an extension with an event
-    page that was suspended. This implies that firing this event woke up the
-    event page. The event may or may not have been dispatched to the event page
-    itself, for example it may have been dispatched to its popup, but regardless
-    it will wake the event page.  When this metric is recorded,
-    Extensions.Events.Dispatch will also be recorded.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionCacheCount">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Number of cached extensions on disk. Reported on Chrome OS during user
-    session start.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionCacheSize" units="MB">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Total size of .crx files in cache on disk. Reported on Chrome OS during user
-    session start.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionCreationTime" units="microseconds">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time taken to create a single extension object. This includes
-    parsing all the different extension manifest keys and initializating the
-    associated manifest data.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionFrameMapCacheHit" units="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    True if the cache of the extension frame map was hit during access on the IO
-    thread.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionFrameMapLookupSuccessful" units="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    True if the lookup for a frame in the extension frame map succeeded after a
-    cache miss.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionHostMonitoring.MaxActiveLoading">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The maximum number of ExtensionHosts (primarily background/event pages) that
-    were actively loading at any one time, within the first minute of Chrome
-    startup. Emitted exactly one minute after startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionHostMonitoring.MaxInQueue">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The maximum number of ExtensionHosts (primarily background/event pages) in
-    the queue awaiting being loaded (via an ExtensionHostQueue), within the
-    first minute of Chrome startup. Emitted exactly one minute after startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionHostMonitoring.NumLoaded">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total number of ExtensionHosts that completed loading in the first
-    minute of Chrome startup. Emitted exactly one minute after startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionHostMonitoring.NumQueued">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total number of ExtensionHosts (primarily background/event pages) that
-    were added to a queue to start loading, within the first minute of Chrome
-    startup. These may or may not end up starting, let alone finishing,
-    depending on the queue behavior. Emitted exactly one minute after startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionInstalled">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>An extension has been installed.</summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions loaded at startup time grouped by
-    Extension::Location.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionManagement_RefreshTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during ExtensionManagement::Refresh.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionRendererStateCacheHit" units="Boolean">
-  <obsolete>
-    Deprecated 4/2016. ExtensionRendererState was replaced with
-    ExtensionFrameMap.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    True if the cache for the ExtensionRendererState was hit during a lookup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionRootPathLength">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Length of the Extensions dir path inside the profile directory.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionServiceInitTime">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken for the ExtensionService to initialize, including the time it
-    takes to load the extensions for the service's profile and parse their
-    manifests. This happens during startup and also any time a new profile is
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionServiceNotifyReadyListenersTime">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken for the ExtensionService to notify all ready listeners that the
-    extension system is now ready. This happens as part of the total
-    initialization time of ExtensionService, measured in
-    Extensions.ExtensionServiceInitTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionUninstalled">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>An extension has been uninstalled.</summary>
-</histogram>
-
-<histogram name="Extensions.ExternalExtensionEvent" enum="SideloadUIEvents">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records what happens to extensions that are sideloaded, grouped by the
-    ExternalExtensionEvent enum.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExternalItemState" enum="ExternalItemState">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of sideloaded apps/extensions loaded on startup grouped by
-    enabled/disabled state.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExternalJsonCount">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of extensions referenced in the external extensions source at path
-    chrome::DIR_EXTERNAL_EXTENSIONS.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ExternalWarningUninstallationResult" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Whether or not the uninstallation of an external extension succeeded.
-    Triggered when the external install warning is shown to the user and the
-    user selects to remove the extension.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FeatureProviderStaticInitTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during extensions::FeatureProvider::Static.
-    Only measured while in the browser process.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FileAccessAllowed">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions (and friends) that could have been given access to
-    the file:// scheme, and were, for users that have at least one extension
-    that could have been given access. This excludes anything that doesn't show
-    up in chrome://extensions (platform apps, hosted apps, component
-    extensions), policy-installed extensions, and unpacked extensions. See also
-    Extensions.FileAccessNotAllowed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FileAccessNotAllowed">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions (and friends) that could have been given access to
-    the file:// scheme, but weren't, for users that have at least one extension
-    that could have been given access. This excludes anything that doesn't show
-    up in chrome://extensions (platform apps, hosted apps, component
-    extensions), policy-installed extensions, and unpacked extensions. See also
-    Extensions.FileAccessAllowed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FileInstallation" units="ms">
-  <owner>xiaohuic@chromium.org</owner>
-  <summary>
-    Record the time taken to physically move the extention files from temporary
-    location to the final installation directory. It includes the time to flush
-    the file system if ExtensionUseSafeInstallation field trial is enabled. This
-    is recorded once per extension install/update.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FontSettingsEventRouterCtorTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the FontSettingsEventRouter
-    construction.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FromWebstoreInconsistency"
-    enum="ExtensionFromWebstoreInconcistencyEnum">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of apps/extensions loaded on startup with an inconsistent &quot;from
-    webstore&quot; state. This means an item that is flagged as from_webstore,
-    but with either a non-webstore update_url or an external install location.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.FunctionCalls" enum="ExtensionFunctions">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Number of calls to extension functions.</summary>
-</histogram>
-
-<histogram name="Extensions.Functions.FailedTime" enum="ExtensionFunctions">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded when an extension function call fails and finishes execution. The
-    suffix indicates the exact bucket the function is in. See also
-    Extensions.Functions.FailedTotalExecutionTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.FailedTotalExecutionTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total amount of time it took to execute an extension function that
-    failed from the time the extension function is called to the time the
-    function responds. Note that since some extension functions are inherently
-    slow (anything that requires user interaction, for instance), this is not a
-    definitive source for function performance.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.HandleResponseElapsedTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time it takes to handle a response for an extension API
-    request. Recorded on the renderer side once we receive the response IPC from
-    the browser and have deserialized the arguments and passed them to the JS
-    context. Only recorded if the response is successfully handled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.StartRequestElapsedTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time it takes to start an extension API request. Recorded on
-    the renderer side after we perform JS pre-processing, but includes all
-    serialization and dispatching. Only recorded if the request is successfully
-    dispatched.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.SucceededTime" enum="ExtensionFunctions">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Recorded when an extension function call succeeds and finishes execution.
-    The suffix indicates the exact bucket the function is in. See also
-    Extensions.Functions.SucceededTotalExecutionTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.SucceededTotalExecutionTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total amount of time it took to execute an extension function that
-    succeeded from the time the extension function is called to the time the
-    function responds. Note that since some extension functions are inherently
-    slow (anything that requires user interaction, for instance), this is not a
-    definitive source for function performance.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Functions.SynchronousExecutionTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The synchronous amount of time an extension function takes. Note that many
-    extension functions run asynchronously; see also
-    Extensions.Functions.[Succeeded|Failed]TotalExecutionTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    What happens when the extensions system tries to get a temp dir to unpack
-    in?
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_AutoDisable3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it is
-    automatically disabled due to a permission increase (e.g., after an
-    extension upgrade). To find places where this histogram may be emitted, look
-    for calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument AutoDisable. For Sync users, this may be reported for each device,
-    depending on whether the Sync update or the extension auto-update happen
-    first.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_Install3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it was
-    installed. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument Install. For Sync users, this is reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_InstallAbort3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when installation
-    was aborted (e.g. because the parent window of the confirmation dialog went
-    away), not including installation errors and user cancels. To find places
-    where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    InstallAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_InstallCancel3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when installation
-    was canceled. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument InstallCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_Load3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it was
-    loaded (which happens at profile open or extension install). To find places
-    where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_ReEnable3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it was
-    re-enabled from a confirmation prompt. To find places where this histogram
-    may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    ReEnable.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_ReEnableAbort3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when the
-    re-enable prompt was aborted (e.g. because the parent window of the
-    confirmation dialog went away), not including installation errors and manual
-    user cancels. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument ReEnableAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_ReEnableCancel3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when the
-    re-enable was canceled from the confirmation prompt. To find places where
-    this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    ReEnableCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_Uninstall3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it was
-    uninstalled. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument Uninstall. For Sync users, this is reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_WebStoreInstall3" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when it was
-    installed through the web store. To find places where this histogram may be
-    emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    WebStoreInstall. Contrary to the more-general HasPermissions_Install3
-    histogram, this one is NOT reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_WebStoreInstallAbort3"
-    enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when installation
-    from the web store was aborted (e.g. because the parent window of the
-    confirmation dialog went away), not including installation errors and user
-    cancels. To find places where this histogram may be emitted, look for calls
-    to ExtensionService::RecordPermissionMessagesHistogram with the argument
-    WebStoreInstallAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HasPermissions_WebStoreInstallCancel3"
-    enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    Whether there were any permissions present in an extension when installation
-    from the web store was canceled. To find places where this histogram may be
-    emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    WebStoreInstallCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer">
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the container used for a hosted app launch. The definition of
-    'launch' for the purposes of this histogram is different to that used for
-    the launch type histograms. This definition is less inclusive, for example
-    it does not include navigations to the hosted app due to normal browsing,
-    which the other definition does include. This definition could be thought of
-    more as explicit launches via a launch surface such as the app launcher,
-    chrome://apps, or a shortcut.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HostedAppUnlimitedStoragePersistentStorageUsage"
-    units="KB">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The usage (in kilobytes) of persistent storage in a hosted app with the
-    unlimitedStorage permission. This is logged each time the storage is used*,
-    so this also serves as a cap of the number of calls that would fail if the
-    app did not have the unlimited storage permission. *Capped at once per 30
-    seconds so as to not impact performance.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HostedAppUnlimitedStorageTemporaryStorageUsage"
-    units="%">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The percentage of &quot;normal&quot; (that is, not unlimited) quota that a
-    hosted app with unlimited storage is currently using. This is logged each
-    time the storage is used*, so the number of times the app would use greater
-    than 100% of the default storage can serve as a cap for the number of calls
-    that would fail if the app did not have the unlimitedStorage permission.
-    *Capped at once per 30 seconds so as to not impact performance.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.HostedAppUnlimitedStorageUsage" units="KB">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The usage (in kilobytes) of a hosted app with the unlimitedStorage api
-    permission, recorded once per run per app the first time we load storage for
-    the hosted app. This is separate from the other metrics on hosted app
-    unlimited storage usage because it is logged once per extension per run.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.IncognitoAllowed">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions (and friends) that could have been allowed in
-    incognito, and were, for users that have at least one extension that could
-    have been allowed. This excludes anything that doesn't show up in
-    chrome://extensions (platform apps, hosted apps, component extensions),
-    policy-installed extensions, and unpacked extensions. See also
-    Extensions.IncognitoNotAllowed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.IncognitoNotAllowed">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions (and friends) that could have been allowed in
-    incognito, but weren't, for users that have at least one extension that
-    could have been allowed. This excludes anything that doesn't show up in
-    chrome://extensions (platform apps, hosted apps, component extensions),
-    policy-installed extensions, and unpacked extensions. See also
-    Extensions.IncognitoAllowed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InitExtensionControlledPrefsTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    ExtensionPrefs::InitExtensionControlledPrefs.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InitPrefGetExtensionsTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the GetExtensions call within
-    ExtensionPrefs::InitPrefStore.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InitPrefStoreTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during ExtensionPrefs::InitPrefStore.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectCssTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time for a CSS file to be injected into a page.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectEnd_BlockingScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Number of blocking scripts injected at document end by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectEnd_ScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Number of scripts injected at document end by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectEnd_Time" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to inject all scripts at document end by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectIdle_BlockingScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Number of blocking scripts injected at document idle by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectIdle_ScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Number of scripts injected at document idle by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectIdle_Time" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to inject all scripts at document idle by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectScriptTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Time taken to inject all scripts by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_BlockingScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Number of blocking scripts injected at document start by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_CssCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Number of css files injected by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_ScriptCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Number of scripts injected at document start by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_Time" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to inject css/scripts at document start by extensions.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InstallPrompt.Accepted" enum="BooleanAccepted">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    Whether the user accepted or aborted an extension installation.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InstallPrompt.Type"
-    enum="ExtensionInstallPromptType">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    Type of the extension install prompt displayed when an extension
-    installation is triggered.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InstallPromptExperiment.ShowDetails"
-    enum="ExtensionInstallPromptExperimentLinkAction">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    Actions on the show details link grouped by action type when the install
-    prompt trial is running.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InstallPromptExperiment.ShowPermissions"
-    enum="ExtensionInstallPromptExperimentLinkAction">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    Actions on the show permissions link grouped by action type when the install
-    prompt trial is running.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.InstallSource" enum="ExtensionLocation">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Installs grouped by the location property in prefs.</summary>
-</histogram>
-
-<histogram name="Extensions.InstallType" enum="ExtensionType">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Installs grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadAll">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The number of extensions and themes loaded at profile open.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadAllComponentTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to load all component extensions at profile open. This happens as
-    part of the total initialization time of ExtensionService, measured in
-    Extensions.ExtensionServiceInitTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadAllTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to load all non-component extensions at profile open. This
-    happens as part of the total initialization time of ExtensionService,
-    measured in Extensions.ExtensionServiceInitTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadAllTime2" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Time taken to load all non-component extensions at profile open and record
-    metrics. This happens as part of the total initialization time of
-    ExtensionService, measured in Extensions.ExtensionServiceInitTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadApp">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The number of apps loaded by each user at profile open.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadAppExternal">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of externally managed apps loaded by each user at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadAppUser">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of user-installed apps loaded by each user at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadBrowserAction">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of browser action extensions loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadContentPack">
-  <obsolete>
-    Deprecated as of 4/2015. Replaced by ManagedUsers.Whitelist.Count.
-  </obsolete>
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The number of content-pack extensions loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadCreationFlags" enum="ExtensionCreationFlags">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The creation flags of all extensions loaded at profile open grouped by
-    Extension::InitFromValueFlags.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtension">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The number of extensions loaded at profile open.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtensionExternal">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of externally managed extensions loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtensionUser">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of user-installed extensions loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExternal">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of externally managed extensions and apps loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadHostedApp">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of hosted apps loaded by each user at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadNoExtensionAction">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions that had neither a page nor browser action
-    specified in their manifest. Recorded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadOffStoreItems" units="Number of items">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of enabled extensions or apps the user has installed that do not
-    update from the Chrome Web Store. Recorded during profile initialization.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadPackagedApp">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of legacy packaged apps loaded by each user at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadPlatformApp">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The number of platform apps loaded at profile open.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadTheme">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The number of themes loaded at profile open.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadType" enum="ExtensionType">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of extensions loaded at profile open grouped by
-    Extension::HistogramType.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.LoadUserScript">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of converted user scripts loaded at profile open.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of times chrome retried to download an extension update manifest with
-    a url on a google.com domain, before eventually giving up.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchFailureRetryCountOtherUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of times chrome retried to download an extension update manifest with
-    a url on a non google.com domain, before eventually giving up.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchSuccessRetryCountGoogleUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of times chrome retried to download an extension update manifest with
-    a url on a google.com domain, before eventually succeeding.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchSuccessRetryCountOtherUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of times chrome retried to download an extension update manifest with
-    a url on a non google.com domain, before eventually succeeding.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadNeedsRelocalization">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of extension loads on startup where it is necessary to reload the
-    mainfest because the locale has changed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadNotNeeded">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of extension loads on startup where it is not necessary to reload the
-    extension's manifest.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadUnpackedDir">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of extension loads on startup where it is necessary to reload the
-    manifest because the extension is unpacked.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestVersion">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The manifest version of each loaded extension.</summary>
-</histogram>
-
-<histogram name="Extensions.Messaging.ExtensionPortsCreated"
-    units="number of ports">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of ports created in a given script context at a specific time.
-    Recorded once at the destruction of the script context (when no more ports
-    could be created) if and only if at least one port was created in the
-    context. Only includes ports to extension contexts (i.e., not ports created
-    to tabs or native apps).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Messaging.GetPortIdAsyncTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total amount of time between when an extension opens a new channel and
-    when it receives the global port id from the browser and can begin sending
-    messages.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Messaging.GetPortIdSyncTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of synchronous time taken for the renderer to request an
-    extension message port id from the browser when a new channel is first
-    opened by an extension.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Messaging.SetPortIdTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time for the renderer to inform the browser process of a new
-    port being created with a certain id. This replaces the flow for
-    Extensions.Messaging.GetPortId[A]SyncTime.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelay" units="ms">
-  <owner>battre@chromium.org</owner>
-  <summary>Time that network requests were blocked due to extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelayPercentage" units="%">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    Percentage of total lifetime a network request was blocked due to an
-    extension.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelayRegistryLoad" units="ms">
-  <owner>battre@chromium.org</owner>
-  <summary>
-    Time that network requests were blocked due to relevant rule registries
-    loading.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelayStartup" units="ms">
-  <obsolete>
-    Never used. Added to source 06/2012. Removed from source and added here
-    09/2016.
-  </obsolete>
-  <summary>
-    Delay of network requests due to waiting for extension declarativeWebRequest
-    rules to be loaded from disk at startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of apps/extensions with a non-webstore update_url loaded at
-    startup time grouped by Extension::Location.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.NonWebStoreNewTabPageOverrides">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of non-WebStore extensions on startup that override the new tab page.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_AutoDisable2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it is automatically disabled
-    due to a permission increase (e.g., after an extension upgrade).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_AutoDisable2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_AutoDisable3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it is automatically disabled
-    due to a permission increase (e.g., after an extension upgrade).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_AutoDisable3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it is automatically disabled
-    due to a permission increase (e.g., after an extension upgrade). To find
-    places where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    AutoDisable. For Sync users, this may be reported for each device, depending
-    on whether the Sync update or the extension auto-update happen first.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_Install2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Install2" enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_Install3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Install3" enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed. To find
-    places where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    Install. For Sync users, this is reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallAbort"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallAbort2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was aborted, not
-    including installation errors and user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallAbort2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallAbort3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was aborted, not
-    including installation errors and user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallAbort3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was aborted (e.g.
-    because the parent window of the confirmation dialog went away), not
-    including installation errors and user cancels. To find places where this
-    histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    InstallAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallCancel"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallCancel2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was canceled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallCancel2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallCancel3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was canceled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallCancel3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation was canceled. To
-    find places where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    InstallCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_Load2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>The permissions present in an extension when it was loaded.</summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Load2" enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_Load3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>The permissions present in an extension when it was loaded.</summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Load3" enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was loaded (which happens at
-    profile open or extension install). To find places where this histogram may
-    be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnable2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was re-enabled from a
-    confirmation prompt.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnable2" enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnable3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was re-enabled from a
-    confirmation prompt.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnable3" enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was re-enabled from a
-    confirmation prompt. To find places where this histogram may be emitted,
-    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
-    the argument ReEnable.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableAbort"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableAbort2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable prompt was
-    aborted, not including installation errors and manual user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableAbort2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableAbort3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable prompt was
-    aborted, not including installation errors and manual user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableAbort3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable prompt was
-    aborted (e.g. because the parent window of the confirmation dialog went
-    away), not including installation errors and manual user cancels. To find
-    places where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    ReEnableAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableCancel"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableCancel2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable was canceled from
-    the confirmation prompt.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableCancel2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableCancel3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable was canceled from
-    the confirmation prompt.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableCancel3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when the re-enable was canceled from
-    the confirmation prompt. To find places where this histogram may be emitted,
-    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
-    the argument ReEnableCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by Extensions.Permissions_Uninstall2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was uninstalled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Uninstall2" enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by Extensions.Permissions_Uninstall3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was uninstalled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Uninstall3" enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was uninstalled. To find
-    places where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    Uninstall. For Sync users, this is reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstall"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by
-    Extensions.Permissions_WebStoreInstall2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed through the
-    web store.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstall2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by
-    Extensions.Permissions_WebStoreInstall3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed through the
-    web store.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstall3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when it was installed through the
-    web store. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument WebStoreInstall. Contrary to the more-general Permissions_Install3
-    histogram, this one is NOT reported for each device.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallAbort"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by
-    Extensions.Permissions_WebStoreInstallAbort2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was aborted, not including installation errors and user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallAbort2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by
-    Extensions.Permissions_WebStoreInstallAbort3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was aborted, not including installation errors and user cancels.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallAbort3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was aborted (e.g. because the parent window of the confirmation dialog went
-    away), not including installation errors and user cancels. To find places
-    where this histogram may be emitted, look for calls to
-    ExtensionService::RecordPermissionMessagesHistogram with the argument
-    WebStoreInstallAbort.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallCancel"
-    enum="ExtensionPermission">
-  <obsolete>
-    Deprecated as of 5/2014, replaced by
-    Extensions.Permissions_WebStoreInstallCancel2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was canceled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallCancel2"
-    enum="ExtensionPermission2">
-  <obsolete>
-    Deprecated as of 6/2015, replaced by
-    Extensions.Permissions_WebStoreInstallCancel3.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was canceled.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallCancel3"
-    enum="ExtensionPermission3">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>rpaquay@chromium.org</owner>
-  <summary>
-    The permissions present in an extension when installation from the web store
-    was canceled. To find places where this histogram may be emitted, look for
-    calls to ExtensionService::RecordPermissionMessagesHistogram with the
-    argument WebStoreInstallCancel.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.PopupCreateTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time taken between a user clicking on a button to open a popup, and the
-    popup finishing loading its initial URL. This is a good way to measure the
-    UI responsiveness of extension popups. It will be strictly larger than
-    Extensions.PopupLoadTime2, which only measures the time it takes to load -
-    there may be a delay between clicking and starting to load, for example, if
-    the popup's host got caught in a queue.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.PopupLoadTime" units="ms">
-  <obsolete>
-    Replaced by Extensions.PopupLoadTime2.
-  </obsolete>
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>The time for an Extension's popup to load.</summary>
-</histogram>
-
-<histogram name="Extensions.PopupLoadTime2" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time taken for an extension popup to load its initial URL. This may not
-    include the time taken for an extension process to start, if the extension
-    already has a background page running. It does not necessarily correlate
-    with the amount of time since the popup was *clicked* either, since there
-    may be a delay between the user clicking and the loading started.
-    Extensions.PopupCreateTime measures this instead.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ProcessManagerStartupHostsTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The time taken to start up persistent background pages for extensions in
-    ExtensionProcessManager when the extension system notifies that it is ready.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ResetPermissionsIncrease" enum="Boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Whether the DISABLE_PERMISSIONS_INCREASE disable reason was removed from an
-    extension while checking for a permissions increase. Recorded during startup
-    and on reload and update, for each extension that has the
-    DISABLE_PERMISSIONS_INCREASE reason.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceDirectoryTimestampQueryLatency" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The initialization latency (in milliseconds) introduced to each extension
-    resource request by querying the directory timestamp.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceLastModifiedDelta" units="seconds">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The difference in seconds between an extension resource's last modification
-    time and its extension base directory's creation time. Recorded on each
-    extension resource request if the difference is non-negative (i.e., the
-    resource's last modification time is more recent than the directory's
-    creation time.) For cases where the directory creation date is more recent,
-    see Extensions.ResourceLastModifiedNegativeDelta instead.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceLastModifiedNegativeDelta" units="seconds">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The absolute difference in seconds between an extension resource's last
-    modification time and extension base directory's creation time. Recorded on
-    each extension resource request if the difference is negative (i.e., the
-    directory's creation time is more recent than the resource's last
-    modification time.) For cases where the resource modification time is more
-    recent, see Extensions.ResourceLastModifiedDelta instead.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailure">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count the number of times a sandboxed extension unpack fails.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailureReason"
-    enum="ExtensionUnpackFailureReason">
-  <owner>asargent@chromium.org</owner>
-  <summary>What caused a sandboxed extension unpack to fail?</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailureTime">
-  <owner>asargent@chromium.org</owner>
-  <summary>Time taken to unpack an extension, when the unpack fails.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackHashCheck" enum="BooleanValidHashSum">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Whether a CRX file hash sum was the same as in an updater manifest.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackInitialCrxPathLength">
-  <owner>asargent@chromium.org</owner>
-  <summary>Length of the initial path to the CRX to be unpacked.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackLinkFreeCrxPathLength">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Length of the normalized (link/junction free) path to the temporary copy of
-    a CRX made during unpacking.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which a CRX file is unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate1To2mB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files 1MB to 2MB are unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate2To5mB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files 2MB to 5MB are unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate50kBTo1mB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files 50kB to 1MB are unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate5To10mB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files 5MB to 10 MB are unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRateOver10mB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files larger than 10MB are unpacked in Kilobytes per
-    second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRateUnder50kB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Rate at which CRX files under 50 KB are unpacked in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccess">
-  <owner>asargent@chromium.org</owner>
-  <summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccessCantGetCrxSize">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count the number of times a sandboxed CRX unpack succeeds, but we can't get
-    the file size.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccessCrxSize">
-  <owner>asargent@chromium.org</owner>
-  <summary>Size of the .crx file, in KB, when the unpack succeeds.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccessTime">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Time taken to unpack an extension, when the unpack succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackTempCrxPathLength">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Length of the path of the temporary copy of a CRX made during unpacking.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackUnpackedCrxPathLength">
-  <owner>asargent@chromium.org</owner>
-  <summary>Length of the path under which a CRX is unpacked.</summary>
-</histogram>
-
-<histogram name="Extensions.SettingsQuotaExceeded.BytesPerSetting">
-  <obsolete>
-    Removed in September, 2016
-  </obsolete>
-  <summary>
-    Emitted when QuotaExceededError was called due to an extension using too
-    many bytes for a given setting.  The number has no natural numerator
-    (normalizing factor) and thus is not particularly useful.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SettingsQuotaExceeded.KeyCount">
-  <obsolete>
-    Removed in September, 2016
-  </obsolete>
-  <summary>
-    Emitted when QuotaExceededError was called due to an extension using too
-    many keys.  The number has no natural numerator (normalizing factor) and
-    thus is not particularly useful.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SettingsQuotaExceeded.TotalBytes">
-  <obsolete>
-    Removed in September, 2016
-  </obsolete>
-  <summary>
-    Emitted when QuotaExceededError was called due to an extension using too
-    many bytes.  The number has no natural numerator (normalizing factor) and
-    thus is not particularly useful.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ShouldAllowOpenURL.Failure"
-    enum="ShouldAllowOpenURLFailureReason">
-  <owner>alexmos@chromium.org</owner>
-  <summary>
-    When the web-accessible resource check in
-    ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL fails, this
-    records the reason for the failure.  This check is performed on navigations
-    that utilize the OpenURL path as well as on transfers.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.StartupDelay" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>The time one extension delays network requests at startup.</summary>
-</histogram>
-
-<histogram name="Extensions.StartupDelay_Total" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total time extensions delay network requests at startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.StorageFrontendInitTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during StorageFrontend::Init.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.SyncGetMessageBundle" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of synchronous time spent retrieving an extension's message
-    bundle (the collection of its i18n resources) from the browser.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ThrottledNetworkRequestDelay" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The duration by which a network request was delayed while waiting for
-    extension user script load. Recorded once per request that is delayed, at
-    the time the resource resumes loading.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ThrottledNetworkRequests" units="requests">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total number of network requests that were delayed by extension user
-    script load. Recorded once each time network requests may have been delayed
-    by user script load (i.e., once at the end of each batch of script loads).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.ToolstripLoadTime" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time taken to load a toolstrip.</summary>
-</histogram>
-
-<histogram name="Extensions.UninstallDialogAction"
-    enum="ExtensionUninstallDialogAction">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The action that was taken from an extension uninstall dialog. Recorded once
-    per dialog shown. Only recorded if all possible actions (including report
-    abuse) were available on the dialog.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UninstallSource" enum="ExtensionUninstallSource">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The source for the extension uninstall. This is only recorded if an
-    uninstall dialog is shown to the user (i.e., it is not recorded for internal
-    &quot;cleanups&quot;).
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UninstallType" enum="ExtensionType">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>Uninstalls grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.UnpackFailureInstallCause"
-    enum="ExtensionInstallCause">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count failing CRX installs, grouped by the way an extension can be
-    installed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackFailureInstallSource"
-    enum="ExtensionLocation">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count successful CRX installs, grouped by the location property in prefs.
-    installed.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackSuccessInstallCause"
-    enum="ExtensionInstallCause">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count successful CRX installs, grouped by the cause of the install.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackSuccessInstallSource"
-    enum="ExtensionLocation">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    Count successful CRX installs, grouped by the location property in prefs.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckApp">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of legacy packaged apps and hosted apps that were checked during
-    an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckExtension">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of extensions that were checked during an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckGap" units="minutes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time in minutes between update checks.</summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckGoogleUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of crx's with a Google-hosted update URL that were checked during
-    an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckNoUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of crx's with no update URL checked during an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckOtherUrl">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of crx's with a non-Google update URL that were checked during an
-    update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckPackagedApp">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of packaged apps that were checked during an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckTheme">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of themes that were checked during an update check.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateOnLoad">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of extensions that were updated at browser startup.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult">
-  <obsolete>
-    Deprecated 10/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    What happened when the extension updater tried to write a file?
-  </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateSource" enum="ExtensionLocation">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Updates grouped by the location property in prefs.</summary>
-</histogram>
-
-<histogram name="Extensions.UpdateType" enum="ExtensionType">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Updates grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.WebRequestAction" enum="RequestAction">
-  <owner>karandeepb@chromium.org</owner>
-  <summary>
-    Counts the number of times an action is requested by extensions as part of
-    the Web Request API. For a given web request stage, multiple actions may be
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebRequestEventFoundFrame" units="boolean">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    Whether or not the render frame lookup for a given webRequest event
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.FileDownload" units="ms">
-  <owner>xiaohuic@chromium.org</owner>
-  <summary>
-    The time spent to download the crx file from the webstore to local disk.
-    This is recorded once per successful download.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptReason"
-    enum="InterruptReason">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The reason a webstore download was interrupted.</summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptReceivedKBytes"
-    units="KB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of KBytes received for a webstore download before it was
-    interrupted.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptTotalKBytes" units="KB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total expected size in KBytes of an interrupted webstore download.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptTotalSizeUnknown"
-    enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks whether the total size of an interrupted webstore download was known.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time between starting the provisional load and fully loading
-    the document in the main frame of the chrome://extensions page. This
-    corresponds to the WebContentsObserver::DocumentLoadedInFrame method.
-  </summary>
-</histogram>
-
-<histogram name="Extensions.WebUi.LoadCompletedInMainFrame" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The amount of time between starting the provisional load and having
-    completed the onload handler in the main frame of the chrome://extensions
-    page. This corresponds to the
-    WebContentsObserver::DocumentOnLoadCompletedInMainFrame method.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionService.AddVerified" enum="BooleanSuccess">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records whether adding a new/updated extension to the install verifier
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionService.VerifyAllSuccess"
-    enum="ExtensionServiceVerifyAllSuccess">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The outcome of a call to ExtensionService::VerifyAllExtensions, whether it
-    was called for bootstrapping or another reason (extension
-    installed/uninstalled, etc.).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionSettings.ShouldDoVerificationCheck" enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When loading the chrome://extensions page, this records whether we decided
-    to do a verification check against the server (because the user had one or
-    more extensions disabled due to verification failure).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionToolbarModel.BrowserActionsCount">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The number of icons the Browser Actions Container knows about (visible or in
-    the overflow bucket). Does not count icons that have been permanently hidden
-    by the user. Measured once per startup per (non-incognito) profile.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionToolbarModel.BrowserActionsPermanentlyHidden">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The number of Browser Action icons the user has elected to permanently hide
-    (as opposed to putting them in the overflow bucket). Measured once per
-    startup per (non-incognito) profile.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionToolbarModel.BrowserActionsVisible">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The number of visible icons in the Browser Actions Container (visible as in
-    number of icons not in the overflow bucket). 0 means all icons are in the
-    overflow bucket. MAX_INT means the toolbar is always showing all icons.
-    Measured once per startup per (non-incognito) profile but only for those
-    profiles that have one or more browser actions showing in the toolbar.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionUrlRequest.Latency" units="ms">
-  <owner>asargent@chromium.org</owner>
-  <summary>The time taken to complete an extension url request.</summary>
-</histogram>
-
-<histogram name="ExtensionUrlRequest.OnReadCompleteError" enum="NetErrorCodes">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The error code for failures of incremental reads of a file stream for a
-    chrome-extension:// URL. (See also ExtensionUrlRequest.OnReadCompleteResult
-    for the success case).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionUrlRequest.OnReadCompleteResult">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The result of an incremental read of a file stream for a chrome-extension://
-    URL, representing a byte count. Logged in success cases (see also
-    ExtensionUrlRequest.OnReadCompleteError).
-  </summary>
-</histogram>
-
-<histogram name="ExtensionUrlRequest.SeekPosition">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    When fetching a chrome-extension:// URL, this indicates the first byte
-    position we read from. This will be greater than 0 in cases such as XHR's
-    with a Range header, but will normally be 0 in the typical case of reading
-    the entire file. This helps identify how frequently partial file reads are
-    taking place.
-  </summary>
-</histogram>
-
-<histogram name="ExtensionUrlRequest.TotalKbRead" units="KB">
-  <owner>asargent@chromium.org</owner>
-  <summary>
-    The total number of bytes read for a chrome-extension:// URL, logged when
-    the job is finished (either successfully or not).
-  </summary>
-</histogram>
-
-<histogram name="FaultTolerantHeap" enum="FaultTolerantHeap">
-  <owner>brucedawson@chromium.org</owner>
-  <summary>
-    Records several bits of information about whether the Windows
-    FaultTolerantHeap might be enabled. This is logged (from a delayed task)
-    when the browser process starts up.
-  </summary>
-</histogram>
-
-<histogram name="Favicons.CandidatesCount">
-  <owner>fhorschig@chromium.org</owner>
-  <summary>
-    Records the number of favicon link tags on a page once the page has finished
-    loading. The count includes the automatically added favicon.ico entry.
-  </summary>
-</histogram>
-
-<histogram name="Favicons.CandidatesWithDefinedSizesCount">
-  <owner>fhorschig@chromium.org</owner>
-  <summary>
-    Records the number of favicon link tags with a non empty sizes attribute
-    once the page has finished loading.
-  </summary>
-</histogram>
-
-<histogram name="Favicons.CandidatesWithTouchIconsCount">
-  <owner>fhorschig@chromium.org</owner>
-  <summary>
-    Records the number of apple-touch-icon and apple-touch-icon-precomposed link
-    tags once the page has finished loading.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.CloudImport.UserAction"
-    enum="CloudImportUserAction">
-  <owner>smckay@google.com</owner>
-  <summary>
-    Chrome OS File Browser - Specific actions taken by user such initiating
-    cloud import, canceling import, selecting a directory, or opting-in to
-    Drive&gt;Photos sync.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.Create" enum="FileDialogType">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS File Browser opening mode.</summary>
-</histogram>
-
-<histogram name="FileBrowser.DirectoryScan" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: time to scan a directory. Measured on every File
-    Browser directory change.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Changed"
-    enum="BooleanEnabled">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Tracks whether download destination is set to a Google Drive folder when the
-    download destination is changed by the user in the settings page.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Started"
-    enum="BooleanEnabled">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Tracks whether download destination is set to a Google Drive folder on
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadsCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: number of files and directories in the Downloads
-    directory (not including the contents of nested directories). Computed every
-    time the File Browser current directory changes to Downloads.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Add">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: this is recorded when the user adds a folder
-    shortcut.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Count">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: number of saved folder shorcuts. This is recorded
-    when the Files app is launched.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Navigate">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: this is recorded when the user clicks or selects a
-    folder shortcut and is navigated to the target folder.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Remove">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: this is recorded when the user removes a folder
-    shortcut.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeSinceResume"
-    units="ms">
-  <obsolete>
-    The bug which the UMA was investigating got fixed.
-  </obsolete>
-  <owner>hirono@chromium.org</owner>
-  <summary>
-    Chrome OS File Browser: time from the SuspendDone event to the DiskRemoved
-    event. The UMA is added temporarily for crbug.com/433734.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeUntilSuspend"
-    units="ms">
-  <obsolete>
-    The bug which the UMA was investigating got fixed.
-  </obsolete>
-  <owner>hirono@chromium.org</owner>
-  <summary>
-    Chrome OS File Browser: time from the DiskRemoved event to the Suspend
-    event. The UMA is added temporarily for crbug.com/433734.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.Load" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser is an built-in extension without a background page.
-    Its main.html file is loaded every time the user opens a File Browser tab or
-    a file chooser dialog. The file is fairly large and the initialization is
-    pretty expensive.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.OpeningFileType" enum="FileType">
-  <obsolete>
-    Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType.
-  </obsolete>
-  <owner>joshwoodward@google.com</owner>
-  <summary>File types that were tried to be opened through browser.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.DisplayTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Editor: time to display an image. Measured from the moment
-    the user selected the image till the moment it is displayed (not counting
-    the low resolution preview).
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.FileType" enum="PhotoEditorFileType">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS Photo Editor: the type of the file opened.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.LoadMode" enum="PhotoEditorLoadMode">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS Photo Editor: the way the image has been loaded.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.LoadTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS Photo Editor: time to load an image from a file.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.SaveResult"
-    enum="PhotoEditorSaveResult">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Editor: the result of a file save operation.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.SaveTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS Photo Editor: time to save an image to a file.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Size.MB" units="MBytes">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Editor: size of an image file in megabytes. Measured on
-    every image load.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Size.MPix" units="MPixels">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Editor: size of an image in megapixels. Measured on every
-    image load.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Tool" enum="PhotoEditorToolType">
-  <owner>joshwoodward@google.com</owner>
-  <summary>Chrome OS Photo Editor: the button which the user clicked.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Import flow: action chosen in the Action Choice dialog for
-    the external device.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.ImportCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Import flow: the number of photos imported. Measured on
-    every successfull import operation.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Import flow: the percent of photos imported among all the
-    photos on the device. Measured on every successfull import operation.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Load" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Import flow: time to load the action dialog. Measured
-    between the moment window appears and the moment user see all available
-    actions for the device.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Scan" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS Photo Import flow: time to scan the external device.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.QuickView.DialogType" enum="FileDialogType">
-  <owner>oka@google.com</owner>
-  <summary>
-    File dialog type (e.g. Full page, Save as file) when quick view is launched.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.QuickView.FileType" enum="ViewFileType">
-  <owner>oka@google.com</owner>
-  <summary>File types that were tried to be opened with quick view.</summary>
-</histogram>
-
-<histogram name="FileBrowser.QuickView.FileTypeOnLaunch" enum="ViewFileType">
-  <owner>oka@google.com</owner>
-  <summary>File types that were selected when quick view is launched.</summary>
-</histogram>
-
-<histogram name="FileBrowser.QuickView.VolumeType" enum="FileManagerVolumeType">
-  <owner>oka@google.com</owner>
-  <summary>The volume type where quick view is opened.</summary>
-</histogram>
-
-<histogram name="FileBrowser.QuickView.WayToOpen"
-    enum="FileManagerQuickViewWayToOpen">
-  <owner>oka@google.com</owner>
-  <summary>How quick view was opened.</summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Close"
-    enum="SuggestAppsDialogCloseReason">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: the reason why the suggest apps dialog was closed.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Install"
-    enum="SuggestAppsDialogInstall">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: whether the Webstore item user selected was
-    successfully installed or not.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Load" enum="SuggestAppsDialogLoad">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: whether the initialization of the dialog succeeded
-    or not.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.LoadTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Chrome OS File Browser: time to load the suggest apps dialog. Measured
-    between the moment window appears and the moment all the contents in the
-    dialog including the Chrome Webstore widget are ready.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.ViewingFileType" enum="ViewFileType">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    File types that were tried to be viewed through browser. This is recorded
-    when the user tries to view a file from the Files app.
-  </summary>
-</histogram>
-
-<histogram name="FileBrowser.VolumeType" enum="FileManagerVolumeType">
-  <owner>kinaba@chromium.org</owner>
-  <summary>
-    Chrome OS File Browser: counts the number of times volumes are mounted for
-    each volume type.
-  </summary>
-</histogram>
-
-<histogram name="FileReaderSync.WorkerType" enum="FileReaderSyncWorkerType">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    For each FileReaderSync instance records the type of the web worker that
-    created the instance.
-  </summary>
-</histogram>
-
-<histogram name="FileSystem.DirectoryDatabaseInit"
-    enum="FileSystemDatabaseInitResult">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of FileSystemDirectoryDatabase initialization.</summary>
-</histogram>
-
-<histogram name="FileSystem.DirectoryDatabaseRepair"
-    enum="DirectoryDatabaseRepairResult">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of FileSystemDirectoryDatabase repair.</summary>
-</histogram>
-
-<histogram name="FileSystem.OpenFileSystem" enum="OpenFileSystemResult">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The success or the cause of failure for each call to OpenFileSystem().
-  </summary>
-</histogram>
-
-<histogram name="FileSystem.OpenFileSystemDetail" enum="FileSystemErrors">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of opening a filesystem.</summary>
-</histogram>
-
-<histogram name="FileSystem.OpenFileSystemDetailNonthrottled"
-    enum="FileSystemErrors">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of opening a non-throttled filesystem.</summary>
-</histogram>
-
-<histogram name="FileSystem.OriginDatabaseInit"
-    enum="FileSystemDatabaseInitResult">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of FileSystemOriginDatabase initialization.</summary>
-</histogram>
-
-<histogram name="FileSystem.OriginFailedCanCommitURL" enum="BooleanHit">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    Logged when we fail the permission validation of the filesystem URL origin,
-    from ChildProcessSecurityPolicy::HasPermissionsForFileSystemFile. This is
-    not expected to happen in normal operation.
-  </summary>
-</histogram>
-
-<histogram name="FileSystem.PersistentOriginsCount">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Number of origins that have persistent filesystem. Measured when the Quota
-    system queries the filesystem subsystem about its entire usage, which
-    usually happens when one of the storage subsystem methods is called for the
-    first time.
-  </summary>
-</histogram>
-
-<histogram name="FileSystem.TemporaryOriginsCount">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Number of origins that have temporary filesystem. Measured when the Quota
-    system queries the filesystem subsystem about its entire usage, which
-    usually happens when one of the storage subsystem methods is called for the
-    first time.
-  </summary>
-</histogram>
-
-<histogram base="true" name="FirstUserAction.BackgroundTime.MainIntent"
-    units="minutes">
-  <owner>tedchoc@chromium.org</owner>
-  <summary>
-    The amount of time (in minutes) that the app was in the background before
-    the user started it (via an ACTION_MAIN intent) and performed a user action
-    that describes the intent of resuming the app.  Only recorded if the action
-    took place within the first 10 seconds of starting Chrome.  The actions are
-    further described in the FirstUserActionTypes suffix.
-  </summary>
-</histogram>
-
-<histogram name="GCM.AndroidGcmReceiverError" enum="GcmReceiverStatus">
-  <obsolete>
-    Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367)
-  </obsolete>
-  <owner>khushalsagar@chromium.org</owner>
-  <summary>Result of a message received by the GcmReceiver on Android.</summary>
-</histogram>
-
-<histogram name="GCM.APICallUnregister">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of times when gcm.unregister API is called.</summary>
-</histogram>
-
-<histogram name="GCM.CheckinCompleteTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time taken to complete a GCM checkin request successfully. If the
-    checkin is retried multiple times, the length of time is counted for the
-    last successful retry.
-  </summary>
-</histogram>
-
-<histogram name="GCM.CheckinRequestStatus" enum="GCMCheckinRequestStatus">
-  <owner>juyik@chromium.org</owner>
-  <summary>Status code of the outcome of a GCM checkin request.</summary>
-</histogram>
-
-<histogram name="GCM.CheckinRetryCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of retries before a GCM checkin succeeds.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectedViaProxy" enum="Boolean">
-  <owner>zea@chromium.org</owner>
-  <summary>Whether the GCM connection was made via a proxy or not.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectionDisconnectErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>zea@chromium.org</owner>
-  <summary>URL response and error codes from GCM disconnect events.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectionEndpoint" enum="GCMEndpoints">
-  <owner>zea@chromium.org</owner>
-  <summary>Number of connections made to each specific MCS endpoint.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectionFailureErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>zea@chromium.org</owner>
-  <summary>URL response and error codes from GCM connection attempts.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectionLatency" units="ms">
-  <owner>juyik@chromium.org</owner>
-  <summary>
-    The time between the initiation of a connection and the successful
-    completion of it.
-  </summary>
-</histogram>
-
-<histogram name="GCM.ConnectionResetReason" enum="GCMConnectionResetReason">
-  <owner>zea@chromium.org</owner>
-  <summary>Reasons for GCM connection resets.</summary>
-</histogram>
-
-<histogram name="GCM.ConnectionSuccessRate" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    GCM connection success rate. Does not take into account login success. See
-    GCM.ConnectionFailureErrorCode for a breakdown of connection failure
-    reasons.
-  </summary>
-</histogram>
-
-<histogram name="GCM.ConnectionUpTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time (from login until reset) that a GCM connection was active.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.CreateKeySuccessRate" enum="BooleanSuccess">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Success rate of writing new keying material to the GCM key store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.DecryptMessageResult" enum="GCMDecryptionResult">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Result of decryption on a received GCM message, which includes unencrypted
-    messages, successfully decrypted messages and decryption failures.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.GetKeySuccessRate" enum="BooleanSuccess">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Success rate of reading keying material from the GCM key store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.InitKeyStoreSuccessRate" enum="BooleanSuccess">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Success rate of initializing the LevelDB back-end of the GCM key store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.LoadKeyStoreSuccessRate" enum="BooleanSuccess">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Success rate of loading existing keying material in the GCM key store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Crypto.RemoveKeySuccessRate" enum="BooleanSuccess">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Success rate of removing keying material from the GCM key store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.Database.Open" enum="LevelDBStatus">
-  <owner>cmumford@chromium.org</owner>
-  <summary>The result of a database open attempt by the GCM store.</summary>
-</histogram>
-
-<histogram name="GCM.DataMessageBurstReceivedInterval" units="ms">
-  <owner>juyik@chromium.org</owner>
-  <summary>
-    Interval between two successive received data message bursts.
-  </summary>
-</histogram>
-
-<histogram name="GCM.DataMessageReceived" enum="BooleanReceived">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Number of DATA_MESSAGE messages received from Google Cloud Messaging for
-    which a matching registration exists. Recorded when processing the received
-    message. Prior to M56 this also counted received DELETED_MESSAGES messages
-    (whether or not a registration existed).
-  </summary>
-</histogram>
-
-<histogram name="GCM.DataMessageReceivedHasCollapseKey"
-    enum="BooleanHasCollapseKey">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records whether a non-empty collapse_key token is set for each received
-    DATA_MESSAGE message from Google Cloud Messaging for which a matching
-    registration exists. Recorded while processing the received message.
-  </summary>
-</histogram>
-
-<histogram name="GCM.DataMessageReceivedHasRegisteredApp"
-    enum="BooleanRegistered">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records whether a matching registration was found for each received
-    DATA_MESSAGE message from Google Cloud Messaging. Recorded while processing
-    the received message. Prior to M56 this also counted received
-    DELETED_MESSAGES messages.
-  </summary>
-</histogram>
-
-<histogram name="GCM.DeletedMessagesReceived" units="messages">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    For every DELETED_MESSAGES message received from Google Cloud Messaging
-    (whether or not a matching registration exists), this records the provided
-    count of how many messages were simultaneously deleted, or zero if the count
-    is unknown.
-  </summary>
-</histogram>
-
-<histogram name="GCM.FirstReceivedDataMessageLatencyAfterConnection" units="ms">
-  <owner>juyik@chromium.org</owner>
-  <summary>
-    The time between the successful completion of the connection and the arrival
-    of the first data message.
-  </summary>
-</histogram>
-
-<histogram name="GCM.HeartbeatMissedDelta" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    If a heartbeat was missed, the time delta by which it was missed (in system
-    time, not ticks).
-  </summary>
-</histogram>
-
-<histogram name="GCM.IncomingSendErrors" units="messages">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Number of SEND_ERROR messages received from Google Cloud Messaging. Recorded
-    when processing the received message.
-  </summary>
-</histogram>
-
-<histogram name="GCM.LoadStatus" enum="GCMLoadStatus">
-  <owner>jianli@chromium.org</owner>
-  <summary>Status code of loading from the persistent GCM store.</summary>
-</histogram>
-
-<histogram name="GCM.LoadSucceeded" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of 2/2015.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Success indicates successfully loading an initialized persistent GCM store
-    at startup time. Failure indicates a failure loading the store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.NumThrottledApps">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of applications hitting GCM per-app outstanding message limits at
-    startup time.
-  </summary>
-</histogram>
-
-<histogram name="GCM.NumUsers">
-  <obsolete>
-    Deprecated as of 3/2014.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of GCM users associated with this client at startup time.
-  </summary>
-</histogram>
-
-<histogram name="GCM.OutgoingMessageTTL" enum="GCMOutgoingMessageTTLCategory">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Category of TTL specified in the outgoing message: 0, less than or equal to
-    1 minute, less than or equal to 1 hour and etc.
-  </summary>
-</histogram>
-
-<histogram name="GCM.PendingConnectionEventsAtShutdown" units="events">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    Number of connection events which have not been sent to GCM. This is
-    recorded only at the time of shutdown to capture the events which are being
-    lost due to shutdown. Because this is recorded at shutdown, this is not
-    guaranteed to be complete and should be treated as a best effort record.
-  </summary>
-</histogram>
-
-<histogram name="GCM.ReceivedDataMessageBurstSize" units="messages">
-  <owner>juyik@chromium.org</owner>
-  <summary>Number of messages in a received GCM data message burst.</summary>
-</histogram>
-
-<histogram name="GCM.ReceivedDataMessageIntervalWithinBurst" units="ms">
-  <owner>juyik@chromium.org</owner>
-  <summary>
-    Interval between messages within a received GCM data message burst.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RegistrationCompleteTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time taken to complete a GCM registration request successfully. If
-    the registration is retried multiple times, the length of time is counted
-    for the last successful retry.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RegistrationRequest" units="requests">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Number of registration requests sent to Google Cloud Messaging. Recorded
-    immediately after the request has started.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RegistrationRequestStatus"
-    enum="GCMRegistrationRequestStatus">
-  <owner>juyik@chromium.org</owner>
-  <summary>
-    Status code of the outcome of a GCM registration request. The Unknown error
-    case was split up in M56 (merged mid-beta to M55) to separate out the
-    Response parsing failed, Internal server error, Quota exceeded, and Device
-    has too many registrations cases.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RegistrationRetryCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of retries before a GCM registration succeeds.</summary>
-</histogram>
-
-<histogram name="GCM.RegistrationSenderIdCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of sender IDs specified in a registration request.</summary>
-</histogram>
-
-<histogram name="GCM.ResetStore" enum="GCMResetStoreError">
-  <obsolete>
-    Deprecated in M56 in favor of GCM.ResetStoreError
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Reports the problem encountered when resetting the GCM store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.ResetStoreError" enum="GCMResetStoreError">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Reports the problem encountered when resetting the GCM store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RestoredIncomingMessages">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of unacknowledged incoming messages restored from the persistent
-    store at startup.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RestoredOutgoingMessages">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of pending outgoing messages restored from the persistent store at
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="GCM.RestoredRegistrations">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of registrations restored from the persistent store at startup.
-  </summary>
-</histogram>
-
-<histogram name="GCM.SendMessageStatus" enum="GCMSendMessageStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Result of sending an upstream message through Google Cloud Messaging.
-    Recorded when the message has either been queued, sent, or has been dropped
-    because it expired or an error happened.
-  </summary>
-</histogram>
-
-<histogram name="GCM.StoreDestroySucceeded" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Success indicates successfully destroying the GCM persistent store. Failure
-    indicates a failure destroying the persistence store. GCM store will be
-    destroyed when the profile has been signed out.
-  </summary>
-</histogram>
-
-<histogram name="GCM.StoreSizeKB" units="KB">
-  <owner>zea@chromium.org</owner>
-  <summary>Size of the GCM persistent store in kilobytes at startup.</summary>
-</histogram>
-
-<histogram name="GCM.StoreUpdateSucceeded" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Success indicates successfully updating the GCM persistent store on message
-    update. Failure indicates a failure updating the persistence store.
-  </summary>
-</histogram>
-
-<histogram name="GCM.SuspendTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time elapsed from machine suspend until resume.</summary>
-</histogram>
-
-<histogram name="GCM.UnregistrationCompleteTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time taken to complete a GCM unregistration request successfully.
-    If the unregistration is retried multiple times, the length of time is
-    counted for the last successful retry.
-  </summary>
-</histogram>
-
-<histogram name="GCM.UnregistrationRequest" units="requests">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Number of unregistration requests sent to Google Cloud Messaging. Recorded
-    immediately after the request has started.
-  </summary>
-</histogram>
-
-<histogram name="GCM.UnregistrationRequestStatus"
-    enum="GCMUnregistrationRequestStatus">
-  <owner>juyik@chromium.org</owner>
-  <summary>Status code of the outcome of a GCM unregistration request.</summary>
-</histogram>
-
-<histogram name="GCM.UnregistrationRetryCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of retries before a GCM unregistration succeeds.</summary>
-</histogram>
-
-<histogram name="GCM.UserSignedIn" enum="Boolean">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Indicates whether the user was signed in when GCM started up.
-  </summary>
-</histogram>
-
-<histogram name="GCMInvalidations.IncomingMessageStatus"
-    enum="GCMInvalidationsIncomingMessageStatus">
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    Status of parsing incoming invalidations message from GCM channel.
-  </summary>
-</histogram>
-
-<histogram name="GCMInvalidations.OutgoingMessageStatus"
-    enum="GCMInvalidationsOutgoingMessageStatus">
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    Status of sending outgoing invalidations message through GCM.
-  </summary>
-</histogram>
-
-<histogram name="GData.AuthSuccess" enum="GDataAuthResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Result of the authentication for Drive.</summary>
-</histogram>
-
-<histogram name="GData.EntireFeedLoadTime" units="microseconds">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.EntireFeedLoadTime
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time spent to load the entire file system information from the server
-  </summary>
-</histogram>
-
-<histogram name="GData.EntryKind" enum="GDataEntryKind">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.EntryKind
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Provides breakdown of specific formats for hosted documents. Recorded when
-    feed is loaded from the server.
-  </summary>
-</histogram>
-
-<histogram name="GData.InitialFeedLoadTime" units="microseconds">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.InitialFeedLoadTime
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time spent to load the initial part of the file system information from the
-    server
-  </summary>
-</histogram>
-
-<histogram name="GData.NumberOfHostedDocuments">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.NumberOfHostedDocuments
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
-    is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="GData.NumberOfRegularFiles">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.NumberOfRegularFiles
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of regualr files on Drive.  Logged when Drive is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="GData.NumberOfTotalFiles">
-  <obsolete>
-    Deprecated 9/2012, and replaced by Drive.NumberOfTotalFiles
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of total files (regualr files + hosted documents) on Drive.  Logged
-    when Drive is first accessed.
-  </summary>
-</histogram>
-
-<histogram name="Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy"
-    enum="BooleanEnabled">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Whether high accuracy geolocation information was requested.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Geolocation.Header.LocationAge" units="seconds">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    For Geolocation requests from the omnibox on Android, the time since the
-    location was most recently acquired. If no location has been acquired, the
-    maximum bucket is incremented.
-  </summary>
-</histogram>
-
-<histogram name="Geolocation.Header.PermissionState"
-    enum="GeolocationHeaderPermissionState">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Counts Geolocation requests for omnibox searches sliced by various
-    permission combinations. The location mode abbreviations indicate one of:
-    High Accuracy, Battery Saving, GPS On or Location Mode Off.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Geolocation.Header.TimeListening" units="ms">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    For Geolocation requests from the omnibox on Android, the time since the
-    location was first acquired. If no location has been acquired, the minimum
-    bucket is incremented.
-  </summary>
-</histogram>
-
-<histogram name="Geolocation.InfoBarDelegate.Event"
-    enum="GeolocationInfoBarDelegateEvent">
-  <obsolete>
-    Deprecated 9/2014, and replaced by
-    ContentSettings.PermissionActions_Geolocation.
-  </obsolete>
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>Events in GeolocationInfoBarDelegate.</summary>
-</histogram>
-
-<histogram name="Geolocation.InfoBarDelegateAndroid.Event"
-    enum="GeolocationInfoBarDelegateAndroidEvent">
-  <obsolete>
-    Deprecated 9/2014, and replaced by
-    ContentSettings.PermissionActions_Geolocation.
-  </obsolete>
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>Events in GeolocationInfoBarDelegateAndroid.</summary>
-</histogram>
-
-<histogram name="Geolocation.LocationUpdate.ErrorCode"
-    enum="GeopositionErrorCode">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>Error code for the geoposition sent to the renderers.</summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.AccessPoints">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The number of WiFi access points used to determine geolocation.
-  </summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.Event"
-    enum="NetworkLocationRequestEvent">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>Events in NetworkLocationRequest.</summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.ResponseCode"
-    units="HTTP response code">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>Http response codes in NetworkLocationRequest.</summary>
-</histogram>
-
-<histogram name="Geolocation.Timeout">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Counts Geolocation request timeout values, bucketing by timeout duration.
-    This is recorded for all requests upon creation, see
-    Geolocation.TimeoutExpired for timeouts that actually expired.
-  </summary>
-</histogram>
-
-<histogram name="Geolocation.TimeoutExpired">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Counts Geolocation request timeout expirations, bucketing by timeout
-    duration. This means no position was received within the allowed time from
-    the browser process due to e.g. a slow network or an unresponsive system
-    location provider.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.DisclosureResult"
-    enum="GeolocationDisclosureResult">
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the action the user took after the geolocation disclosure has been
-    displayed.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.InfoBarVisibleTime" units="ms">
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records how long the search geolocation disclosure infobar was visible for.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.PostDisclosureContentSetting"
-    enum="ContentSetting">
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the geolocation content setting for the default search engine's
-    origin after the search geolocation disclosure has been shown and won't be
-    shown again. This metric is only recorded once per client.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.PostDisclosurePermission"
-    enum="PermissionStatus">
-  <obsolete>
-    Deprecated 2017/01. Replaced by PostDisclosureContentSetting.
-  </obsolete>
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the geolocation permission for the default search engine's origin
-    after the search geolocation disclosure has been shown and won't be shown
-    again. This metric is only recorded once per client.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.PreDisclosureContentSetting"
-    enum="ContentSetting">
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the geolocation content setting for the default search engine's
-    origin immediately before the search geolocation disclosure has been shown.
-    This metric is only recorded once per client.
-  </summary>
-</histogram>
-
-<histogram name="GeolocationDisclosure.PreDisclosurePermission"
-    enum="PermissionStatus">
-  <obsolete>
-    Deprecated 2017/01. Replaced by PreDisclosureContentSetting.
-  </obsolete>
-  <owner>benwells@chromium.org</owner>
-  <summary>
-    Records the geolocation permission for the default search engine's origin
-    immediately before the search geolocation disclosure has been shown. This
-    metric is only recorded once per client.
-  </summary>
-</histogram>
-
-<histogram name="GoogleNow.Card.Button.Clicked0" enum="GoogleNowCardTypeId">
-  <owner>robliao@chromium.org</owner>
-  <owner>skare@chromium.org</owner>
-  <summary>Types of cards which received an index 0 button click.</summary>
-</histogram>
-
-<histogram name="GoogleNow.Card.Button.Clicked1" enum="GoogleNowCardTypeId">
-  <owner>robliao@chromium.org</owner>
-  <owner>skare@chromium.org</owner>
-  <summary>Types of cards which received an index 1 button click.</summary>
-</histogram>
-
-<histogram name="GoogleNow.Card.Clicked" enum="GoogleNowCardTypeId">
-  <owner>robliao@chromium.org</owner>
-  <owner>skare@chromium.org</owner>
-  <summary>Types of cards which received a notification click.</summary>
-</histogram>
-
-<histogram name="GoogleNow.Event" enum="GoogleNowEvent">
-  <owner>robliao@chromium.org</owner>
-  <owner>skare@chromium.org</owner>
-  <summary>Events in Google Now component extension.</summary>
-</histogram>
-
-<histogram name="GoogleNow.MessageCenter.Displayed.NotificationsVisible"
-    units="count">
-  <owner>robliao@chromium.org</owner>
-  <owner>skare@chromium.org</owner>
-  <summary>
-    Count of the number of Google Now notifications visible when the message
-    center/notification center is shown.
-  </summary>
-</histogram>
-
-<histogram name="GooglePlayServices.ConnectionResult"
-    enum="GooglePlayServicesConnectionResult">
-  <owner>andrewhayden@chromium.org</owner>
-  <owner>dgn@chromium.org</owner>
-  <summary>
-    ConnectionResult error codes resulting from attempts to check whether or not
-    Google Play Services is available. Most of these checks are done lazily,
-    when a user accesses a feature that uses Google Play Services. Added for
-    http://crbug.com/490710.
-  </summary>
-</histogram>
-
-<histogram name="GooglePlayServices.ErrorHandlerAction"
-    enum="GooglePlayServicesErrorHandlerAction">
-  <owner>andrewhayden@chromium.org</owner>
-  <summary>
-    Types of action taken in response to Google Play Services user-recoverable
-    errors. Added for http://crbug.com/490710.
-  </summary>
-</histogram>
-
-<histogram name="GoogleSearch.AccessPoint" enum="SearchAccessPoint">
-  <obsolete>
-    Deprecated 2015/08.
-  </obsolete>
-  <owner>kmadhusu@chromium.org</owner>
-  <summary>
-    Counts number of Google searches from various access points in the browser.
-    WARNING: Do not use this histogram as it currently fails to classify a large
-    percentage of Omnibox searches correctly - http://crbug.com/421631.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.EffectivePolicy" enum="UpdatePolicy">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The effective update policy for Chrome on Windows. Recorded once per startup
-    (following a 45 seconds delay).
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.ErrorHresult" enum="Hresult">
-  <owner>grt@chromium.org</owner>
-  <summary>The HRESULT for a failed on-demand update check.</summary>
-</histogram>
-
-<histogram name="GoogleUpdate.InfoBar.ActionTaken"
-    enum="GoogleUpdateInfoBarActions">
-  <obsolete>
-    Deprecated 12/2015 in Issue 566085.
-  </obsolete>
-  <owner>yfriedman@chromium.org</owner>
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    (Android-only) Records what action the user took (if any) on the InfoBar
-    indicating that a new version of Chrome is available.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.InfoBar.InternalStorageSizeAvailable" units="MB">
-  <owner>yfriedman@chromium.org</owner>
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>khushalsagar@chromium.org</owner>
-  <summary>
-    (Android-only) The amount of internal memory storage available on the user's
-    device when the InfoBar or update menu item is shown.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.InfoBar.TimeShown" units="ms">
-  <obsolete>
-    Deprecated 12/2015 in Issue 566085.
-  </obsolete>
-  <owner>yfriedman@chromium.org</owner>
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    (Android-only) The amount of time which the InfoBar indicating a new version
-    is available is visible.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.InstallerExitCode" enum="InstallStatus">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The exit code from Chrome's installer following a failed on-demand update
-    check. All values reported for this histogram fall in the
-    GOOGLE_UPDATE_ERROR_UPDATING bucket of the GoogleUpdate.UpdateErrorCode
-    histogram and the GOOPDATEINSTALL_E_INSTALLER_FAILED bucket of the
-    GoogleUpdate.ErrorHresult histogram.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.MenuItem.ActionTakenAfterItemClicked"
-    enum="GoogleUpdateAfterItemClickedActions">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    (Android-only) Records whether Chrome was updated after the update menu item
-    was clicked.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.MenuItem.ActionTakenOnMenuOpen"
-    enum="GoogleUpdateMenuItemActions">
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    (Android-only) Records whether the update menu item was clicked when the app
-    menu was opened.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.UnexpectedState">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    An unrecognized CurrentState value received from Google Update while polling
-    for the status of an on-demand update check.
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.UpdateErrorCode" enum="GoogleUpdateErrorCode">
-  <owner>grt@chromium.org</owner>
-  <summary>The error code for a failed on-demand update check.</summary>
-</histogram>
-
-<histogram name="GoogleUpdate.UpdatePolicyIsOverridden" enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if the effective update policy for Chrome on Windows is the result of
-    an app-specific override; false if it is the default for all apps. Recorded
-    once per startup (following a 45 seconds delay).
-  </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.UpgradeResult" enum="GoogleUpdateUpgradeStatus">
-  <owner>grt@chromium.org</owner>
-  <summary>The result of an on-demand update check.</summary>
-</histogram>
-
-<histogram name="GPU.AcceleratedSurfaceRefreshRate" units="hz">
-  <owner>vmiura@chromium.org</owner>
-  <summary>
-    Refresh rate of the display in Hz.  This is recorded every time we present a
-    frame.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.Buffer11CPUMemoryMB" units="MB">
-  <owner>cwallez@chromium.org</owner>
-  <summary>
-     The sum of the size of the CPU-side memory allocations of Buffer11's copies
-    (vs. GPU memory allocations). These allocations are used when modifying the
-    buffer data on the CPU or when transfering to GPU memory via DMA.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3D11CreateDeviceError" enum="Hresult">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    An extended Windows error code returned from D3D11CreateDevice on error. Can
-    be almost any valid HRESULT or DXGI error code, which are listed at
-    https://msdn.microsoft.com/en-us/library/windows/desktop/bb509553.aspx.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3D11CreateDeviceMS" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The time that elapses for the initial call to D3D11CreateDevice on D3D11
-    ANGLE. A pure system call, with no ANGLE or Chromium code, called once every
-    GPU process startup.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3D11FeatureLevel" enum="D3DFeatureLevel">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The maxmium supported (or currently requested) Direct3D feature level in
-    D3D11 ANGLE. We support as low as 9.3, and as high as 11.1, though Chrome
-    should only use 10.0+ for D3D11. Gives an indication of how new a user's
-    video card is, what features it supports, and it's general speed tier.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3D11InitializeResult" enum="D3D11InitializeResult">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The result from initializing a D3D11 device in ANGLE. Can be success, or one
-    of several error codes which indicate different reasons for failing.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3D9InitializeResult" enum="D3D9InitializeResult">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The result from initializing a D3D9 device in ANGLE. Can be success, or one
-    of several error codes which indicate different reasons for failing.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.D3DCompileMS" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The time ANGLE spends calling the D3D shader compiler. Tracks total time we
-    spend compiling shaders on startup and during Chrome's lifetime.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.DisplayInitializeMS" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    Time ANGLE spends in eglInitialize, where it spins up a Renderer. This can
-    gives us insight into how much time we're spending initializing the GPU.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.Renderer11InitializeDeviceMS" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    Time ANGLE spends initializing various shaders and internal classes. This is
-    time that isn't purely loading system DLLs and calling OS methods. It might
-    be work we can optimize or defer until later.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.Renderer11InitializeDLLsMS" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    Time ANGLE spends loading system DLLs, such as the D3D compiler DLL, and the
-    D3D11 and DXGI DLLs. Probably unavoidable startup costs, though very useful
-    to keep track of.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ANGLE.SupportsDXGI1_2" enum="BooleanSupported">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    Windows computers running Windows 8+, or running Windows 7 with a platform
-    update, support the newer version of DXGI. This update also indicates the
-    computer is capable of running Direct3D 11.1 if the hardware supports it.
-  </summary>
-</histogram>
-
-<histogram name="GPU.CheckFramebufferValidDuration" units="ms">
-  <obsolete>
-    Deprecated 01/2017.
-  </obsolete>
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The amount of time spent in GLES2DecoderImpl::CheckFramebufferValid.
-  </summary>
-</histogram>
-
-<histogram name="GPU.CollectContextGraphicsInfo" units="microseconds">
-  <owner>vmiura@chromium.org</owner>
-  <summary>
-    The time that the GPU process spends collecting driver information during
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ContextLost" enum="ContextLostReason">
-  <owner>sievers@chromium.org</owner>
-  <summary>
-    The reason a GPU command buffer context of a given type was lost.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ContextMemory" units="MB">
-  <owner>ericrk@chromium.org</owner>
-  <summary>The amount of memory used by a GL Context.</summary>
-</histogram>
-
-<histogram name="GPU.CreateBrowserCompositor" units="microseconds">
-  <owner>vmiura@chromium.org</owner>
-  <summary>
-    The time that the browser process takes to create the compositor from its
-    point of view. One of these is created for each top-level window (browser
-    frame, menus, etc.).
-  </summary>
-</histogram>
-
-<histogram name="GPU.D3DShaderModel" enum="ShaderModel">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    ANGLE's currently active D3D shader model version. Logged once every startup
-    of the GPU process, on Windows only. Note that Shader Models 2 and 3 map to
-    D3D9 with ANGLE, and 4+ map to D3D11 ANGLE.
-  </summary>
-</histogram>
-
-<histogram name="GPU.DestroyProgramManagerPrograms.Elapsed" units="ms">
-  <obsolete>
-    Deprecated 11/2016.
-  </obsolete>
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The amount of time spent destroying programs during ProgramManager::Destroy.
-  </summary>
-</histogram>
-
-<histogram name="GPU.DestroyProgramManagerPrograms.Programs" units="programs">
-  <obsolete>
-    Deprecated 11/2016.
-  </obsolete>
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The number of progams destroyed during ProgramManager::Destroy.
-  </summary>
-</histogram>
-
-<histogram name="GPU.DestroyProgramManagerPrograms.ProgramsPerMs"
-    units="programs per ms">
-  <obsolete>
-    Deprecated 11/2016.
-  </obsolete>
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The number of programs destroyed per millisecond during
-    ProgramManager::Destroy. Only logged if both the number of programs and the
-    elapsed time are greater than zero.
-  </summary>
-</histogram>
-
-<histogram name="GPU.DoLinkProgramTime" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The time we spend in GLES2DecoderImpl::DoLinkProgram. Related to how much
-    time we spend compiling shaders during startup.
-  </summary>
-</histogram>
-
-<histogram name="GPU.EGLDisplayType" enum="EGLDisplayType">
-  <owner>jbauman@chromium.org</owner>
-  <summary>The display type used to ask for an EGLDisplay.</summary>
-</histogram>
-
-<histogram name="GPU.Error" enum="GLError">
-  <owner>junov@chromium.org</owner>
-  <owner>piman@chromium.org</owner>
-  <summary>The error states generated by OpenGL calls.</summary>
-</histogram>
-
-<histogram name="GPU.FenceSupport" enum="BooleanAvailable">
-  <owner>reveman@chromium.org</owner>
-  <summary>
-    Whether GLFence support is available. Recorded each time a new context group
-    is initialized and extensions are detected.
-  </summary>
-</histogram>
-
-<histogram name="GPU.GPUProcessDetailedExitStatus"
-    enum="ProcessDetailedExitStatus">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Breakdown of exit status for gpu processes. Only recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="GPU.GPUProcessExitCode" enum="GPUProcessExitCode">
-  <owner>jbauman@chromium.org</owner>
-  <summary>
-    Counts for the exit codes returned by the GPU process when it terminated.
-  </summary>
-</histogram>
-
-<histogram name="GPU.GPUProcessLaunchCause" enum="GPUProcessLaunchCauses">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>piman@chromium.org</owner>
-  <summary>
-    Counts enumerating the initial cause for the GPU Process to be launched.
-  </summary>
-</histogram>
-
-<histogram name="GPU.GPUProcessLaunchTime" units="ms">
-  <owner>piman@chromium.org</owner>
-  <summary>
-    Startup time of the GPU process as measured by the GPU process host.
-  </summary>
-</histogram>
-
-<histogram name="GPU.InitializeOneOffMediumTime" units="ms">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    The time that the GPU process spends in initializing the GL surface, and
-    collecting graphics information. Records times up to three minutes.
-  </summary>
-</histogram>
-
-<histogram name="GPU.InitializeOneOffTime" units="microseconds">
-  <obsolete>
-    Deprecated 4/2015.
-  </obsolete>
-  <owner>vmiura@chromium.org</owner>
-  <summary>
-    The time that the GPU process spends in initializing the GL surface, and
-    collecting graphics information.
-  </summary>
-</histogram>
-
-<histogram name="GPU.IOSurface.CATransactionTime" units="ms">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The time that it took to update the CALayer tree and commit the transaction.
-    This is often affected by IOSurface paging.
-  </summary>
-</histogram>
-
-<histogram name="GPU.IOSurface.CreateTime" units="ms">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The time that it took for a call to IOSurfaceCreate to complete.
-  </summary>
-</histogram>
-
-<histogram name="GPU.IOSurface.GLFlushTime" units="ms">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The time that it took for a call to glFlush to complete. This is often
-    affected by IOSurface paging.
-  </summary>
-</histogram>
-
-<histogram name="GPU.IOSurface.TexImageTime" units="ms">
-  <owner>ccameron@chromium.org</owner>
-  <summary>
-    The time that it took for a call to CGLTexImageIOSurface2D to complete.
-  </summary>
-</histogram>
-
-<histogram name="GPU.MaxMSAASampleCount" units="samples">
-  <owner>senorblanco@chromium.org</owner>
-  <summary>
-    The maximum number of multisampled anti-aliasing (MSAA) samples per pixel
-    that the user's GPU can render.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ProgramCache.CacheHit" enum="BooleanSuccess">
-  <owner>jmadill@chromium.org</owner>
-  <summary>
-    If a successfully linked program was found in the GPU program cache during a
-    program link call.
-  </summary>
-</histogram>
-
-<histogram name="GPU.ShaderLoadPrefixOK" enum="BooleanMatched">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Whether or not the shader prefix loaded from disk matched the expected
-    prefix for the data and system configuration. False indicates either disk
-    corruption or a system configuration change, and should be rare.
-  </summary>
-</histogram>
-
-<histogram name="GPU.TextureRG" enum="BooleanAvailable">
-  <owner>reveman@chromium.org</owner>
-  <summary>
-    Whether RG texture support is available. Recorded each time a new context
-    group is initialized and extensions are detected.
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Display.Count.OnChange">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The number of displays present right after the user has attached or detached
-    a new display. Excludes mirrored displays, but includes sleeping displays.
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Display.Count.OnStartup">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The number of displays present at start up. Excludes mirrored displays, but
-    includes sleeping displays.
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Drive.HasSeekPenalty" enum="BooleanHasSeekPenalty">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    Whether a drive has a seek penalty (i.e. is a spinning disk). Emitted 0-2
-    times shortly after startup when constructing the initial UMA log.
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Drive.HasSeekPenalty_Success" enum="BooleanSuccess">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    Whether it was possible to determine if a drive has a seek penalty. This can
-    fail for various reasons (device drivers don't offer this information, the
-    drive is still mounting, lack of access, etc.). Emitted twice shortly after
-    startup when constructing the initial UMA log.
-
-    Seek penalty detection is disabled on XP/Vista as of 9/24/2015 because it
-    crashes too much. http://crbug.com/514822
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Drive.HasSeekPenalty_Time" units="ms">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    The amount of time it takes to determine whether a drive has a seek penalty.
-    Emitted twice shortly after startup when constructing the initial UMA log.
-  </summary>
-</histogram>
-
-<histogram name="Hardware.Serial.NewMinusOldDeviceListSize">
-  <owner>charliea@chromium.org</owner>
-  <summary>
-    On Windows and Mac, we're implementing new methods to enumerate serial
-    devices that provide us more information about the actual devices. This
-    metric measures the difference between the number of devices that the new
-    and old enumeration methods find. Once this metric gives us confidence that
-    the new and old methods are at parity, we can cut out the old method
-    altogether.
-  </summary>
-</histogram>
-
-<histogram name="HIDDetection.OOBEDevicesDetectedOnContinuePressed"
-    enum="HIDContinueScenarioType">
-  <owner>merkulova@chromium.org</owner>
-  <summary>
-    Which HID were detected when user pressed Continue on OOBE dialog. This
-    metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="HIDDetection.OOBEDialogShown">
-  <owner>merkulova@chromium.org</owner>
-  <summary>
-    Whether HID detection dialog was shown on OOBE. Logged on screen show or on
-    screen skip respectively. This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="HIDDetection.TimesDialogShownPerOOBECompleted">
-  <owner>merkulova@chromium.org</owner>
-  <summary>
-    Records number of times the dialog was shown by the time OOBE is completed.
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesBrowser" enum="Inconsistencies">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a browser for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
-    found in one histogram examination are added together to summarize the
-    inconsistent event.  Note that the same inconsistency MAY appear time and
-    again as the same corrupt histogram is examined for each potenital UMA
-    upload.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesBrowserUnique" enum="Inconsistencies">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a browser for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
-    found in one histogram examination are added together to summarize the
-    inconsistent event.  Note that the same inconsistency will only appear at
-    most one time for each histogram in a single process (i.e., duplicate
-    corruption in a single histogram is not noted in this chart.)
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesChildProcess" enum="Inconsistencies">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a child process for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
-    found in one histogram examination are added together to summarize the
-    inconsistent event.  Note that the same inconsistency MAY appear time and
-    again as the same corrupt histogram is examined for each potenital UMA
-    upload.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesChildProcessUnique"
-    enum="Inconsistencies">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a child process for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
-    found in one histogram examination are added together to summarize the
-    inconsistent event.  Note that the same inconsistency will only appear at
-    most one time for each histogram in a single process (i.e., duplicate
-    corruption in a single histogram is not noted in this chart.)
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesRenderer" enum="Inconsistencies">
-  <obsolete>
-    Deprecated 7/2012.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a renderer for transmission to the browser.  Inconsistent data is
-    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
-    all bits found in one histogram examination are added together to summarize
-    the inconsistent event.  Note that the same inconsistency MAY appear time
-    and again as the same corrupt histogram is examined for each potenital UMA
-    upload.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistenciesRendererUnique"
-    enum="Inconsistencies">
-  <obsolete>
-    Deprecated 7/2012.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of inconsistency events found when examining a single histogram's
-    data in a renderer for transmission to the browser.  Inconsistent data is
-    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
-    all bits found in one histogram examination are added together to summarize
-    the inconsistent event.  Note that the same inconsistency will only appear
-    at most one time for each histogram in a single renderer process (i.e.,
-    duplicate corruption in a single histogram is not noted in this chart.)
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistentCountHigh">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of extra samples counted in the redundant_count in a histogram
-    that were not found by summing the samples in the buckets.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistentCountLow">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of missing samples in the redundant_count in a histogram that
-    were found by summing the samples in the buckets.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistentSnapshotBrowser">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The amount of discrepancy found when examining a single histogram's data in
-    the browser process for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistentSnapshotChildProcess">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The amount of discrepancy found when examining a single histogram's data in
-    a child process for transmission via UMA.  Inconsistent data is NOT
-    transmitted via UMA.
-  </summary>
-</histogram>
-
-<histogram name="Histogram.InconsistentSnapshotRenderer">
-  <obsolete>
-    Deprecated 7/2012.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The amount of discrepancy found when examining a single histogram's data in
-    a renderer process for transmission via UMA. Inconsistent data is NOT
-    transmitted via UMA.
-  </summary>
-</histogram>
-
-<histogram
-    name="History.ClearBrowsingData.HistoryNoticeShownInFooterWhenUpdated"
-    enum="BooleanShown">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Whether a notice about other forms of browsing history was shown in the
-    footer of the Clear Browsing Data dialog. This is recorded every time the
-    dialog is opened.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.ImportantDeselectedNum">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the user presses the 'clear' button when presented with the
-    list of important sites they might want to exclude from clearing browsing
-    data. We record the number of sites the user deselected, or protected, from
-    clearing. The default has all sites selected.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.ImportantDeselectedPercent"
-    units="%/5">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the user presses the 'clear' button when presented with the
-    list of important sites they might want to exclude from clearing browsing
-    data. We record the percent of sites the user deselected, or protected, from
-    clearing. The default has all sites selected, which is 0%. Note: To reduce
-    the number of empty buckets, the percent is divided by 5.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.ImportantDialogShown"
-    enum="BooleanShown">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the user presses the 'clear' button in the clear browsing
-    dialog. We record 'true' if the important sites dialog is shown.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.NumImportant">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when we successfuly fetched important sites in the clear browsing
-    data screen. This is the number of sites that we think are important to the
-    user.
-  </summary>
-</histogram>
-
-<histogram
-    name="History.ClearBrowsingData.PasswordsDeletion.AdditionalDatatypesCount">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Recorded when the user deletes their passwords in the ClearBrowsingData
-    dialog. Counts how many other data types were selected for deletion.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.ShownHistoryNoticeAfterClearing"
-    enum="BooleanShown">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Whether a dialog with a notice about other forms of browsing history was
-    shown after the user deleted data from the Clear Browsing Data dialog.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCache"
-    enum="CookieOrCacheDeletion">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Recorded when the user deletes their browsing data. Shows whether cookies
-    and/or cache were among the selected data types.
-  </summary>
-</histogram>
-
-<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCacheFromDialog"
-    enum="CookieOrCacheDeletion">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Recorded when the user deletes their browsing data manually from the
-    ClearBrowsingData dialog. Shows whether cookies and/or cache were among the
-    selected data types.
-  </summary>
-</histogram>
-
-<histogram name="History.DatabaseAdvancedMetricsTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Time spent on advanced History DB metrics calculation (weekly and monthly
-    URL, host, and category counts). Advanced metrics are logged on
-    initialization of the History DB on 0.3% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.DatabaseBasicMetricsTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Time spent on basic History DB metrics calculation (file size and table
-    counts). Basic metrics are logged on initialization of the History DB on 1%
-    of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.DatabaseFileMB" units="MB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Size of History DB file. Duplicate of Profile.HistorySize and
-    Sqlite.SizeKB.History. Logged on initialization of the History DB on 1% of
-    starts.
-  </summary>
-</histogram>
-
-<histogram name="History.DeleteFTSIndexDatabases">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of &quot;History Index *&quot; databases deleted.  These databases
-    stored the full-text-search data for history, which was removed at r213442,
-    this histogram tracks cleanup.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconDatabaseAdvancedMetricsTime" units="ticks">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The wall-clock time taken to gather favicon database metrics. Metrics are
-    logged on initialization of the Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconDatabaseSizeMB" units="MB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    Size of the Favicons database in MB. This is calculated as the number of
-    pages consumed by the database multiplied by the page size. Logged on
-    initialization of the Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredPercentage" units="%">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Size of the recovered Favicons database relative to the original corrupt
-    database.  Recovery is VACUUM-like, so the resulting database should always
-    be smaller.  Substantial 100% results would indicate empty databases being
-    recovered, substantial low% results would indicate very little data being
-    recovered.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Rows recovered from [favicon_bitmaps] table in Favicons recovery.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsFavicons">
-  <owner>rpop@google.com</owner>
-  <summary>Rows recovered from [favicons] table in Favicons recovery.</summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsIconMapping">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Rows recovered from [icon_mapping] table in Favicons recovery.
-  </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Track results of SQLite database recovery code in thumbnail_database.cc.
-  </summary>
-</histogram>
-
-<histogram name="History.FirstSetTopSitesDeltaSize">
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    The count of differences between cached top sites and up-to-date top sites
-    when function TopSitesImpl::SetTopSites is firstly called at startup.
-  </summary>
-</histogram>
-
-<histogram name="History.FirstUpdateTime" units="ms">
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    The amount of time for function
-    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute when this
-    function is called during startup. Excludes the case where local
-    TopSitesDatabase db_ is unavailable, i.e. where the update doesn't really
-    happen.
-  </summary>
-</histogram>
-
-<histogram name="History.HistoryPageView" enum="HistoryPageView">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The page of the MD History page shown to the user. Logged each time the user
-    loads the MD History page or switches pages.
-  </summary>
-</histogram>
-
-<histogram name="History.HistoryServiceInitTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during HistoryService::Init.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBItemCount">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of typed URLs in the history database that are read into the
-    &quot;in memory&quot; history database. This in memory copy of the typed
-    URLs is used for synchronous inline autocomplete on the UI thread, while the
-    larger slower service is run off of disk on a background thread. Recorded on
-    profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBKeywordTermsCount">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Number of items in in-memory keyword_search_terms table. Recorded on profile
-    open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBKeywordTermsPopulate" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time to load in-memory keyword_search_terms table from disk. Recorded on
-    profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBKeywordURLItemCount">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Number of items in in-memory urls table. Recorded on profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBKeywordURLPopulate" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time to load in-memory urls table from disk urls table. Recorded on profile
-    open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryDBPopulate">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The time it takes to read the typed URLs from the main history database into
-    the &quot;in memory&quot; history database. This in memory copy of the typed
-    URLs is used for synchronous inline autocomplete on the UI thread, while the
-    larger slower service is run off of disk on a background thread. Recorded on
-    profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryTypedUrlVisitCount">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The sum of the visit_count fields for all URLs in the &quot;in memory&quot;
-    history database. This corresponds to the number of times the user has
-    visited the typed URLs in the last 30 days (excluding page reloads, since
-    the history database does not increment the visit_count in that case).
-    Recorded on profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLCacheSize" units="bytes">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Size of on-disk cache for in-memory url index. Recorded on profile open when
-    restoring from a cache file.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLChars">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Number of items in the in-memory url index char_word_map_. Recorded on
-    profile open when restoring from a cache file and again shortly after
-    profile open when rebuilding the in-memory url index from history.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLHistoryItems">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Number of history items in the in-memory url index. Recorded on profile open
-    when restoring from a cache file and again shortly after profile open when
-    rebuilding the in-memory url index from history.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLIndexingTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time to rebuild in-memory url index from main history database. Recorded
-    once shortly after profile open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLIndexRestoreCacheTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time to restore the in-memory url index from disk cache. Recorded on profile
-    open.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLIndexSaveCacheTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time to write in-memory url index to disk cache. Recorded once shortly after
-    profile open (after rebuilding the in-memory url index from history) and
-    again upon (clean) shutdown.
-  </summary>
-</histogram>
-
-<histogram name="History.InMemoryURLWords">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Number of items in in-memory url index word_map_. Recorded on profile open
-    when restoring from a cache file and again shortly after profile open when
-    rebuilding the in-memory url index from history.
-  </summary>
-</histogram>
-
-<histogram name="History.MonthlyHostCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Unique hostnames in History database urls table with last-visit times in the
-    last 30 days. Metrics are logged on initialization of the History DB on 0.3%
-    of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.MonthlyURLCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Unique URLs in History database urls table with last-visit times in the last
-    30 days. Metrics are logged on initialization of the History DB on 0.3% of
-    starts.
-  </summary>
-</histogram>
-
-<histogram name="History.MonthlyVisitCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Number of rows in History visits table with visit times in the last 30 days.
-    Metrics are logged on initialization of the History DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.NumFaviconBitmapsInDB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The total number of favicon bitmaps (of all sizes) cached in a user's
-    Favicon database. A given favicon URL may be associated with multiple
-    bitmaps (of different sizes). Logged on initialization of the Favicon DB on
-    1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.NumFaviconMappingsInDB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The number of page URL (e.g., http://www.google.com) to favicon URL (e.g.,
-    http://www.google.com/favicon.ico) mappings stored in a user's Favicon
-    database. Logged on initialization of the Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.NumFaviconsInDB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The total number of favicon URLs (e.g. http://www.google.com/favicon.ico)
-    tracked in a user's Favicon database. This metric tracks knowledge of a
-    favicon URL not whether there are cached bitmaps for that favicon URL. See
-    History.NumFaviconBitmapsInDB for that. Logged on initialization of the
-    Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.NumLargeFaviconBitmapsInDB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The total number of large (&gt;= 64 pixels wide) favicons being tracked in a
-    user's Favicon database. This is a subset of History.NumFaviconBitmapsInDB,
-    which includes all sizes in its count. Logged on initialization of the
-    Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.NumTouchIconsInDB">
-  <owner>rogerm@chromium.org</owner>
-  <summary>
-    The total number of touch icons being tracked in a user's Favicon database.
-    This is a subset of History.NumFaviconsInDB, which includes all icon types
-    in its count. Logged on initialization of the Favicon DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.ResultsRenderedTime" units="ms">
-  <owner>tsergeant@chromium.org</owner>
-  <summary>
-    Records the time taken to load the history Web UI and render (at least) a
-    screen full of items. This is roughly equivalent to 'time to first
-    meaningful paint' for the history page.
-  </summary>
-</histogram>
-
-<histogram name="History.ShownHeaderAboutOtherFormsOfBrowsingHistory"
-    enum="BooleanShown">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Whether the notice about other forms of browsing history was shown in the
-    header of the History page when the header was displayed. The header is
-    refreshed with every history query.
-  </summary>
-</histogram>
-
-<histogram name="History.TopHostsVisitsByRank" units="rank">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Page visits to each of a user's top 50 hosts. The bucket is the 1-based rank
-    of the host. Visits to all other hosts go into the 51st bucket.
-    Android-only. Only counts the last URL in a redirect chain. The list of top
-    hosts is computed approximately nightly. This means that a given day will
-    likely include a recalculation of top hosts, and therefore a given bucket
-    may represent two different hosts at different times of day.
-  </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecoveredPercentage" units="%">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Size of the recovered TopSites database relative to the original corrupt
-    database.  Recovery is VACUUM-like, so the resulting database should always
-    be smaller.  Substantial 100% results would indicate empty databases being
-    recovered, substantial low% results would indicate very little data being
-    recovered.
-  </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecoveredRowsThumbnails">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Rows recovered from [thumbnails] table in TopSites recovery.
-  </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecovery" enum="HistoryTopSitesRecoveryEnum">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The TopSites recovery code is written conservatively, with successful
-    recovery committed and any failure leading to rollback. This tracks the
-    outcomes to determine which cases are high-frequency enough to warrant
-    adding additional code to handle them (versus simply deleting the data).
-  </summary>
-</histogram>
-
-<histogram name="History.TopSitesVisitsByRank" units="rank">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page visits to each of a user's top 50 sites. Visits to all other sites go
-    into the 51st bucket. Only count the page visit if it came from user
-    browsing and only count it once when cycling through a redirect chain.
-  </summary>
-</histogram>
-
-<histogram name="History.UpdateTopSitesOnDBThreadTime" units="ms">
-  <obsolete>
-    Deprecated because only the execution time at startup is of interest. See
-    histogram History.UpdateTopSitesOnDBThread_Startup_Time.
-  </obsolete>
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    The amount of time for function
-    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute. Excludes the
-    case where local TopSitesDatabase db_ is unavailable, i.e. where the update
-    doesn't really happen.
-  </summary>
-</histogram>
-
-<histogram name="History.URLTableCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Number of rows in urls table in History DB. Metrics are logged on
-    initialization of the History DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.VisitTableCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Number of rows in visits table in History DB. Metrics are logged on
-    initialization of the History DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.WeeklyHostCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Unique hostnames in History database urls table with last-visit times in the
-    last 7 days. Metrics are logged on initialization of the History DB on 0.3%
-    of starts.
-  </summary>
-</histogram>
-
-<histogram name="History.WeeklyURLCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Unique URLs in History database urls table with last-visit times in the last
-    7 days. Metrics are logged on initialization of the History DB on 0.3% of
-    starts.
-  </summary>
-</histogram>
-
-<histogram name="History.WeeklyVisitCount">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Number of rows in History visits table with visit times in the last 7 days.
-    Metrics are logged on initialization of the History DB on 1% of starts.
-  </summary>
-</histogram>
-
-<histogram name="HistoryPage.ClickPosition">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Number of entries that the clicked entry is older than in History page. Last
-    bucket is any entry of that value or higher.
-  </summary>
-</histogram>
-
-<histogram name="HistoryPage.ClickPositionSubset">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Subset of the Click Position histogram. Contains only the first smaller
-    subset of entries on the page. Number of entries that the clicked entry is
-    older than in History page. Last bucket is entries of that value or higher.
-  </summary>
-</histogram>
-
-<histogram name="HistoryPage.OtherDevicesMenu" enum="OtherSessionsActions">
-  <owner>mad@chromium.org</owner>
-  <owner>rpop@google.com</owner>
-  <summary>
-    Histogram for usage of the section in the history page that allows the user
-    to access tabs from other devices.
-  </summary>
-</histogram>
-
-<histogram name="HistoryPage.RemoveEntryPosition">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Number of entries that the deleted entry is older than in History page. Last
-    bucket is any entry of that value or higher. Confirmed removal is not
-    guaranteed, just an initiation of 'Remove selected items'.
-  </summary>
-</histogram>
-
-<histogram name="HistoryPage.RemoveEntryPositionSubset">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Subset of Remove Entry Position histogram. Contains only the first smaller
-    subset of entries on the page. Number of entries that the deleted entry is
-    older than in History page. Last bucket is any entry of that value or
-    higher. Confirmed removal is not guaranteed, just an initiation of 'Remove
-    selected items'.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.AudioLoggingEnabled" enum="BooleanEnabled">
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    The state of the hotword audio logging preference. This value is emitted
-    each time the hotword availability is requested by the extension if the user
-    is also opted in to hotword voice search. This check typically happens each
-    time a hotword search is initiated.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.Enabled" enum="HotwordPrefState">
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    The state of the hotword preference. This value is emitted during
-    HotwordService initialization which happens during Profile initialization.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.ExtensionAvailability" enum="HotwordAvailability">
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Whether the external component hotword extension exists (i.e., not pending
-    download, disabled, etc.). This value is emitted each time the hotword
-    availability is requested by the extension which typically happens each time
-    a hotword search is initiated.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.HotwordError" enum="HotwordError">
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Errors reported by the hotword service when determining if hotwording is
-    available. Non-errors are also reported so that errors can be seen as a
-    percentage of total requests.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.HotwordMediaStreamResult"
-    enum="HotwordMediaStreamResult">
-  <owner>amistry@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <owner>somast@chromium.org</owner>
-  <summary>
-    Success or error when attempting to open a MediaStream for the microphone.
-    At most one success or error will be logged for an attempt to open a stream.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.HotwordNaClMessageTimeout"
-    enum="HotwordNaClMessageTimeout">
-  <owner>amistry@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <owner>somast@chromium.org</owner>
-  <summary>
-    Timeout occured while waiting for a message from the NaCl hotword detector
-    plugin. This value is the message that was expected to be received from the
-    plugin.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.HotwordNaClPluginLoadResult"
-    enum="HotwordNaClPluginLoadResult">
-  <owner>amistry@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <owner>somast@chromium.org</owner>
-  <summary>
-    Success or error when attempting to load the NaCl hotword detector plugin.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.HotwordTriggerSource" enum="HotwordTriggerSource">
-  <owner>amistry@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <owner>somast@chromium.org</owner>
-  <summary>
-    Location of hotword trigger. Emitted every time the hotword is triggered by
-    the user saying 'Ok Google'.
-  </summary>
-</histogram>
-
-<histogram name="Hotword.SharedModuleReinstallLanguage" enum="LanguageCode">
-  <owner>amistry@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <owner>somast@chromium.org</owner>
-  <summary>
-    Language, switched to by the user, that triggered a hotword shared module
-    reinstall.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.AccessToDone" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For every http cache transaction with a pattern (see HttpCache.Pattern), the
-    time from the first access to the disk cache until the transaction was done.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.AsyncValidationDuration" units="ms">
-  <obsolete>
-    Deprecated as of 3/2015.
-  </obsolete>
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    The time spent performing an asynchronous revalidation that was triggered by
-    a Cache-Control: stale-while-revalidate directive. This is recorded when the
-    asynchronous revalidation completes, either after the response was
-    completely read or an error occurred. One entry is recorded for each
-    asynchronous revalidation that is performed.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.BeforeSend" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For http cache transactions in which a network request was sent, the time
-    elapsed between beginning the request and sending it over the network; this
-    is the time spent accessing the disk cache.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.CantConditionalizeCause"
-    enum="HttpCacheValidationCause">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each request that results in an unconditionalizable network request, the
-    cause for the request.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.EntryLockWait" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The time spent waiting for write lock on a disk cache entry.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.ExternallyConditionalized"
-    enum="ExternallyConditionalizedType">
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    Count of the number of external (ie. from Blink) conditionalized requests,
-    and whether or not those requests could have been served from the browser
-    cache.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus">
-  <obsolete>
-    Deprecated 4/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Result of a main page HttpCacheTransaction if offline mode had been enabled.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.Pattern" enum="HttpCachePattern">
-  <owner>gavinp@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>For each http cache transaction, the recorded pattern.</summary>
-</histogram>
-
-<histogram name="HttpCache.PercentBeforeSend" units="%">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For http cache transactions in which a network request was sent, the
-    percentage of total request time that elapsed before sending the request
-    over the network; this is the time spent accessing the disk cache.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.ReadErrorNonRestartable" enum="NetErrorCodes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Net error results from non-restartable cache read errors.</summary>
-</histogram>
-
-<histogram name="HttpCache.ReadErrorRestartable" enum="NetErrorCodes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Net error results from restartable cache read errors.</summary>
-</histogram>
-
-<histogram name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each http cache transaction for which a cache entry exists but it cannot
-    be used because the entry's age is beyond its freshness: counts how many
-    freshness periods have elapsed since the entry was last used (x1000).
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.StaleEntry.Updated.Age" units="seconds">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each http cache transaction for which a validation attempt is made due
-    to a stale entry and is updated (e.g., 200), records the age of the entry in
-    seconds.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.StaleEntry.Updated.AgeInFreshnessPeriods" units="%">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each http cache transaction for which a validation attempt is made due
-    to a stale entry and is updated (e.g., 200), records the age of the entry as
-    percentage of freshness period.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.StaleEntry.Validated.Age" units="seconds">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each http cache transaction for which a validation attempt is made due
-    to a stale entry and is validated (304), records the age of the entry in
-    seconds.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.StaleEntry.Validated.AgeInFreshnessPeriods"
-    units="%">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    For each http cache transaction for which a validation attempt is made due
-    to a stale entry and is validated (304), records the age of the entry as
-    percentage of freshness period.
-  </summary>
-</histogram>
-
-<histogram name="HttpCache.ValidationCause" enum="HttpCacheValidationCause">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>For each validation attempt, the cause for the validation.</summary>
-</histogram>
-
-<histogram name="HttpCache.Vary" enum="VaryType">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The type of Vary header for a given GET response.</summary>
-</histogram>
-
-<histogram name="Hyphenation.Open" units="ms">
-  <owner>kojii@chromium.org</owner>
-  <summary>The time it takes to open a hyphenation dictionary.</summary>
-</histogram>
-
-<histogram name="Hyphenation.Open.File" units="ms">
-  <owner>kojii@chromium.org</owner>
-  <summary>The time it takes to open a hyphenation dictionary file.</summary>
-</histogram>
-
-<histogram name="Import.ImportedHistorySize.AutoImportFromIE" units="urls">
-  <owner>gcomanici@chromium.org</owner>
-  <summary>
-    The size of the history on Auto Import from IE. This measure is only logged
-    on a succesfull Auto Import.
-  </summary>
-</histogram>
-
-<histogram name="Import.ImporterType.AutoImport" enum="ImporterType">
-  <owner>gab@chromium.org</owner>
-  <summary>The importer used on first run Auto Import.</summary>
-</histogram>
-
-<histogram name="Import.ImporterType.BookmarksAPI" enum="ImporterType">
-  <owner>gab@chromium.org</owner>
-  <summary>The importer used on import from the bookmarks file API.</summary>
-</histogram>
-
-<histogram name="Import.ImporterType.ImportDataHandler" enum="ImporterType">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The importer used on import from the chrome://settings/importData UI.
-  </summary>
-</histogram>
-
-<histogram name="Import.ShowDialog.FromBookmarkBarView" units="seconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time from install time to time that user opens import dialog
-    from BookmarkBarView.
-  </summary>
-</histogram>
-
-<histogram name="Import.ShowDialog.FromFloatingBookmarkBarView" units="seconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time from install time to time that user opens import dialog
-    from NTP floating BookmarkBarView.
-  </summary>
-</histogram>
-
-<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds">
-  <obsolete>
-    Deprecated and replaced by Import.ShowDialog.FromBookmarkBarView
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time from install time to time that user opens import dialog
-    from BookmarkBarView.
-  </summary>
-</histogram>
-
-<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds">
-  <obsolete>
-    Deprecated and replaced by Import.ShowDialog.FromFloatingBookmarkBarView
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time from install time to time that user opens import dialog
-    from NTP floating BookmarkBarView.
-  </summary>
-</histogram>
-
-<histogram name="ImportantFile.TempFileFailures" enum="TempFileFailure">
-  <owner>rvargas@chromium.org</owner>
-  <summary>
-    Count of various failures in ImportantFileWrite when manipulating a temp
-    file to write to before moving it into place (replacing another file).
-  </summary>
-</histogram>
-
-<histogram name="IncognitoModePrefs.WindowsParentalControlsInitThread"
-    enum="ThreadType">
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    The thread used to initialize the Windows parental controls.
-  </summary>
-</histogram>
-
-<histogram name="IncognitoModePrefs.WindowsParentalControlsInitTime" units="ms">
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during a run of
-    PlatformParentalControlsValue::IsParentalControlActivityLoggingOnImpl on
-    Windows 7 and above.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerAndroidAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Sensor.TYPE_LINEAR_ACCELERATION was available at the start of
-    Device Motion.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerIncGravityAndroidAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Sensor.TYPE_ACCELEROMETER was available at the start of Device
-    Motion.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerWindowsAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the SENSOR_TYPE_ACCELEROMETER_3D was available at the start of
-    Device Motion on the Windows platform.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.DeviceOrientationSensorAndroid"
-    enum="DeviceOrientationSensorTypeAndroid">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Provides a histogram of the base sensors (if any) that are used at the start
-    of the Device Orientation API. Currently Sensor.TYPE_GAME_ROTATION_VECTOR is
-    the default sensor for orientation, if it's not available fall-back options
-    are provided by using either Sensor.TYPE_ROTATION_VECTOR or a combination of
-    Sensor.TYPE_ACCELEROMETER and Sensor.TYPE_MAGNETIC_FIELD.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.GyrometerWindowsAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the SENSOR_TYPE_GYROMETER_3D was available at the start of Device
-    Motion on the Windows platform.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.GyroscopeAndroidAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Sensor.TYPE_GYROSCOPE was available at the start of Device
-    Motion.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.InclinometerWindowsAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the SENSOR_TYPE_INCLINOMETER_3D was available at the start of Device
-    Orientation on the Windows platform.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.MotionDefaultAvailable" enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    This histogram counts the number of Device Motion API invocations in the
-    default implementation (Linux and CrOS). The default implementation does not
-    provide any sensors so the result is always false.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.MotionMacAvailable" enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the sudden motion sensor was available at the start of Device Motion
-    on the MacOS platform.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.OrientationDefaultAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    This histogram counts the number of Device Orientation API invocations in
-    the default implementation (Linux and CrOS). The default implementation does
-    not provide any sensors so the result is always false.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.OrientationMacAvailable"
-    enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the sudden motion sensor was available at the start of Device
-    Orientation on the MacOS platform.
-  </summary>
-</histogram>
-
-<histogram name="InertialSensor.RotationVectorAndroidAvailable"
-    enum="BooleanAvailable">
-  <obsolete>
-    Deprecated 11/2014 (crbug.com/347507). Replaced by
-    InertialSensor.DeviceOrientationSensorAndroid.
-  </obsolete>
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Sensor.TYPE_ROTATION_VECTOR was available at the start of Device
-    Orientation.
-  </summary>
-</histogram>
-
-<histogram name="InfoBar.Shown" enum="InfoBarIdentifier">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Records how many times a particular infobar was shown to the user. On
-    Android, the infobar may be partially hidden due to stacking. On desktop, a
-    tab with a visible infobar will increment this histogram every time the user
-    switches away from the tab and back to it with the infobar still visible.
-  </summary>
-</histogram>
-
-<histogram name="InfoBar.Shown.Hidden" enum="InfoBarIdentifier">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Records how many times a particular infobar was displayed in a hidden state
-    due to at least one other infobar existing. If there are no existing
-    infobars, but the user scrolls at the exact moment a new infobar is added,
-    the infobar may be hidden, but not recorded in this metric. Reliably
-    triggering and detecting this combination is tricky so it isn't done. Only
-    recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="InfoBar.Shown.Hiding" enum="InfoBarIdentifier">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Records how many times a particular infobar was visible and hiding a new
-    infobar behind it. Only recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="InfoBar.Shown.Visible" enum="InfoBarIdentifier">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Records how many times a particular infobar was displayed in a visible state
-    due to no other infobars existing. If there are no existing infobars, but
-    the user scrolls at the exact moment a new infobar is added, the infobar may
-    be hidden, but recorded here as visible. Reliably triggering and detecting
-    this combination is tricky so it isn't done. Only recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.ActiveCount">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The number of active input methods. Recorded when the user logs in to Chrome
-    OS or each cold start of Chrome on Android. The active input methods are
-    selected by user in the language settings page on Chrome OS and in system
-    language settings on Android.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.AutoCorrectLevel" enum="IMECorrectionLevel">
-  <owner>shuchen@chromium.org</owner>
-  <summary>The auto-correction level for suggestion engine.</summary>
-</histogram>
-
-<histogram name="InputMethod.Category" enum="InputMethodCategory">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The breakdown of input method usage by input method category. Recorded when
-    the system changes the current input method.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.Commit.Index">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The suggestion index (1-based) of the suggestion list item which user
-    chooses to commit.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.Commit.Type" enum="IMECommitType">
-  <obsolete>
-    Deprecated 03/2015, and replaced by InputMethod.Commit.Type2.
-  </obsolete>
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The suggestion accuracy type which the user chooses to commit.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.Commit.Type2" enum="IMECommitType2">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The suggestion accuracy type which the user chooses to commit.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.CommitLength">
-  <owner>shuchen@chromium.org</owner>
-  <summary>The number of characters committed with composition text.</summary>
-</histogram>
-
-<histogram name="InputMethod.ID" enum="InputMethodID">
-  <obsolete>
-    This is deprecated since M46, InputMethod.ID2 is used since then.
-  </obsolete>
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The breakdown of input method usage by input method IDs. Recorded when the
-    user presses keys on physical or on-screen keyboard.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.ID2" enum="InputMethodID2">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The breakdown of input method usage by input method IDs. Recorded when the
-    user presses keys on physical or on-screen keyboard.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.ImeMenu.ActivationChanged"
-    enum="BooleanActivation">
-  <owner>azurewei@chromium.org</owner>
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    Whether the opt-in IME menu in the shelf has been activated.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.ImeMenu.EmojiHandwritingVoiceButton"
-    enum="ImeMenuButtonType">
-  <owner>azurewei@chromium.org</owner>
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The number of times users click emoji, handwriting or voice button in opt-in
-    IME menu.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.ImeSwitch" enum="IMESwitchType">
-  <owner>shuchen@chromium.org</owner>
-  <summary>The trigger type of input method switches by user.</summary>
-</histogram>
-
-<histogram name="InputMethod.MatchesSystemLanguage" enum="BooleanMatched">
-  <owner>aurimas@chromium.org</owner>
-  <summary>
-    Whether the currently selected keyboard language matches the system
-    language. Recorded once with every cold start of Chrome for Android.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.PkCommit.Index">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The suggestion index (1-based) of the suggestion list item which user
-    chooses to commit for physical keyboard autocorrect.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.PkCommit.Type" enum="IMECommitType2">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The suggestion accuracy type which the user chooses to commit for physical
-    keyboard autocorrect.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.RegisterProxyView" enum="IMERegisterProxyView">
-  <owner>changwan@chromium.org</owner>
-  <summary>The result of registering proxy view to InputMethodManager.</summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.BackspaceCount">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The number of times the backspace key was pressed on the virtual keyboard,
-    while the virtual keyboard was alive. Recorded when the virtual keyboard is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.BackspaceOnLayout"
-    enum="IMEVKLayout">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The layout type of the virtual keyboard, recorded when backspace is pressed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.BackwardsMovesPerSwipe"
-    units="moves">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    ChromeOS histogram that counts the number of times the cursor was moved to
-    the previous word by swiping backwards on the selection track. The count is
-    initialized when the user starts swiping from any side of the virtual
-    keyboard, incremented based on how far they swipe backwards on the selection
-    track, and recorded when they release their finger.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.CharactersBetweenBackspaces">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    Counts the length of text typed by the virtual keyboard between each
-    backspace. This metric provides a rough approximation of an error rate for
-    the virtual keyboard.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.CharactersCommitted">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    The total number of characters committed. Recorded when the virtual keyboard
-    is closed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.Duration" units="seconds">
-  <owner>shuchen@chromium.org</owner>
-  <summary>How long the virtual keyboard was visible.</summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.GestureTypingEvent"
-    enum="IMEGestureTypingEvent">
-  <owner>girard@chromium.org</owner>
-  <summary>Text input events related to gesture typing.</summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.InitLatency" units="ms">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The on-screen keyboard initialization latency in milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.Layout" enum="IMEVKLayout">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The layout of the on-screen keyboard. Logged when the specific layout is
-    shown.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.LayoutSwitch">
-  <owner>shuchen@chromium.org</owner>
-  <summary>
-    The count of layout switching actions while virtual keyboard is alive.
-    Recorded when the virtual keyboard window is hidden or destroyed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.MovesPerSwipe" units="moves">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    ChromeOS histogram that counts the number of times the cursor was moved to
-    the next word by swiping forward on the selection track. The count is
-    initialized when the user starts swiping from any side of the virtual
-    keyboard, incremented based on how far they swipe forwards on the selection
-    track, and recorded when they release their finger.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.TapCount">
-  <owner>girard@chromium.org</owner>
-  <summary>
-    The number of times the virtual keyboard was tapped while the virtual
-    keyboard was alive. Recorded when the virtual keyboard is closed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.WordsDeletedPerSwipe"
-    units="words">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    ChromeOS histogram that tracks the total number of words that were deleted
-    by swiping forward on the deletion track. The count is initialized when the
-    user starts swiping on the backspace key, incremented based on how far they
-    swipe forwards on the deletion track, and recorded when they release their
-    finger.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.WordsPerMinute">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    The number of words typed per minute. Recorded when the virtual keyboard is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="InputMethod.VirtualKeyboard.WordsRestoredPerSwipe"
-    units="words">
-  <owner>rsadam@chromium.org</owner>
-  <summary>
-    ChromeOS histogram that tracks the total number of words that were restored
-    by swiping backwards on the deletion track. The count is initialized when
-    the user starts swiping on the backspace key, incremented based on how far
-    they swipe backwards on the deletion track, and recorded when they release
-    their finger.
-  </summary>
-</histogram>
-
-<histogram name="Installer.AttemptsCount.Total" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of update attempts until the update has been applied. This is
-    reported every time the device has completed an update.
-  </summary>
-</histogram>
-
-<histogram name="Installer.DevModeErrorCodes" enum="UpdateEngineErrorCode">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>Errors from update_engine process when running in dev mode.</summary>
-</histogram>
-
-<histogram name="Installer.DownloadOverheadPercentage" units="%">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The overhead in downloading extra bytes due to errors/interruptions.
-    Expressed as a percentage of the bytes that are actually needed to be
-    downloaded for the update to be successful.
-  </summary>
-</histogram>
-
-<histogram name="Installer.DownloadSourcesUsed"
-    enum="UpdateEngineDownloadSources">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The combinations of protocol and source server that were used to complete a
-    successful update.
-  </summary>
-</histogram>
-
-<histogram name="Installer.FullPayloadAttemptNumber" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of update attempts with a full update payload until the update
-    has been applied. This is reported on every update attempt.
-  </summary>
-</histogram>
-
-<histogram name="Installer.InstallDateProvisioningSource"
-    enum="UpdateEngineInstallDateProvisioningSource">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The source used to provision the install-date-days value sent to Omaha with
-    every request. This is reported when OOBE completes (M34 or later) or when
-    upgrading to a version with install-date-days support.
-  </summary>
-</histogram>
-
-<histogram name="Installer.NormalErrorCodes" enum="UpdateEngineErrorCode">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Errors from update_engine process when running in normal mode.
-  </summary>
-</histogram>
-
-<histogram name="Installer.OSAgeDays" units="days">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The age of the OS, defined as the age of the /etc/lsb-release file. This is
-    reported on every update check but at most once a day.
-  </summary>
-</histogram>
-
-<histogram name="Installer.PayloadAttemptNumber" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of update attempts until the update has been applied. This is
-    reported on every update attempt.
-  </summary>
-</histogram>
-
-<histogram name="Installer.PayloadFormat" enum="UpdateEnginePayloadFormat">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The type of update payload used to update the device. The difference between
-    &quot;Full&quot; and &quot;Forced Full&quot; is that in the latter, the
-    request sent to Omaha included a directive saying that a delta payload
-    wasn't accepted. A &quot;Full&quot; payload is one where a delta payload was
-    accepted but Omaha provided a full payload. This is reported every time the
-    device has completed an update.
-  </summary>
-</histogram>
-
-<histogram name="Installer.RebootToNewPartitionAttempt" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of consecutive times a device has failed to boot an update that
-    successfully applied. This metric is reported every time the firmware fails
-    to boot the slot with the update and fell back to the slot it originally
-    updated from.
-  </summary>
-</histogram>
-
-<histogram name="Installer.SuccessfulMBsDownloadedFrom" units="MB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Number of MBs downloaded from during an update that completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="Installer.TimeToRebootMinutes" units="Minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Wall-clock duration between when an update has successfully completed (and
-    the user is presented with the &quot;reboot arrow&quot;) and when the system
-    has booted into the new update. This is reported every time the device is
-    rebooted after an update has been applied.
-  </summary>
-</histogram>
-
-<histogram name="Installer.TotalMBsDownloadedFrom" units="MB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Total number of MBs downloaded since the last successful update. This also
-    includes all the bytes downloaded during any prior failed attempts.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdateDurationMinutes" units="Minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Absolute wall-clock time duration it took for the update to complete from
-    the time an update first began.  It includes not just the time the device
-    was up, but also includes the time the device spent sleeping.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdateDurationUptimeMinutes" units="Minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Uptime duration it took for the update to complete from the time an update
-    first began.  It does not include the time the device spent sleeping, but it
-    does include the uptime spent in waiting for the hourly update checks to
-    happen.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdateNumReboots" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Number of times the device was rebooted by the user since an update began
-    and until it completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdatesAbandonedCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of update attempts that didn't complete because a newer update
-    was detected during the update operation. This is reported every time the
-    device has completed an update.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdatesAbandonedEventCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of consecutive different abandoned update payloads since the last
-    successful update. This is reported every time an update payload is
-    abandoned because a newer update payload is available.
-  </summary>
-</histogram>
-
-<histogram name="Installer.UpdateURLSwitches" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Number of times the download URLs were switched due to failures.
-  </summary>
-</histogram>
-
-<histogram name="InstallSigner.InvalidCount">
-  <obsolete>
-    Deprecated 4/2015. It appears the code at some point changed to use the
-    histogram name 'ExtensionInstallSigner.InvalidCount' and we forgot to update
-    this histogram name.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This is a count of the number of ids that we asked to be signed which the
-    server response indicated were not in the webstore.
-  </summary>
-</histogram>
-
-<histogram name="InstallSigner.InvalidSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallSigner.ResultWasValid.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extensions install signer got a well-formed result from the server but
-    the signature check on it failed.
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.CallbackInvalidSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.GetSignatureResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier tried to get a new signature and received a
-    response but it wasn't properly signed.
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.CallbackNoSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.GetSignatureResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier tried to get a new signature but was unable
-    to (network error contacting the server, response from server was malformed,
-    etc.).
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.CallbackValidSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.GetSignatureResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier got a new signature from the server that was
-    valid.
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.InitGoodSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.InitResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier found a valid signature at startup, and this
-    is a count of the number of signed ids it contained.
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.InitInvalidSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.InitResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier found a signature in the prefs at startup,
-    and it parsed properly, but it was invalid (some ids may have been
-    added/removed, could not verify it was signed with the correct private key,
-    etc.).
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.InitNoSignature">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.InitResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier did not find any signature in the prefs at
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.InitUnparseablePref">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.InitResult.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier found a signature in the prefs at startup,
-    but it wasn't parseable (missing/wrong format of required keys, etc.).
-  </summary>
-</histogram>
-
-<histogram name="InstallVerifier.SignatureFailedButNotEnforcing">
-  <obsolete>
-    Deprecated 1/2014 (crbug.com/333934). Replaced by
-    ExtensionInstallVerifier.MustRemainDisabled.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The extension install verifier would have disabled an extension but is not
-    in enforcement mode.
-  </summary>
-</histogram>
-
-<histogram name="InstanceID.DeleteToken.CompleteTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time taken to complete the DeleteToken request successfully. If
-    the request is retried multiple times, the length of time is counted for the
-    last successful retry.
-  </summary>
-</histogram>
-
-<histogram name="InstanceID.DeleteToken.RequestStatus"
-    enum="GCMUnregistrationRequestStatus">
-  <owner>juyik@chromium.org</owner>
-  <summary>Status code of the outcome of DeleteToken request.</summary>
-</histogram>
-
-<histogram name="InstanceID.DeleteToken.RetryCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of retries before DeleteToken succeeds.</summary>
-</histogram>
-
-<histogram name="InstanceID.Enabled" enum="BooleanEnabled">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether the Instance ID API is enabled. Checked when a chrome.instanceID
-    function is called.
-  </summary>
-</histogram>
-
-<histogram name="InstanceID.GetToken.CompleteTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time taken to complete the GetToken request successfully. If the
-    request is retried multiple times, the length of time is counted for the
-    last successful retry.
-  </summary>
-</histogram>
-
-<histogram name="InstanceID.GetToken.RequestStatus"
-    enum="GCMRegistrationRequestStatus">
-  <owner>juyik@chromium.org</owner>
-  <summary>Status code of the outcome of GetToken request.</summary>
-</histogram>
-
-<histogram name="InstanceID.GetToken.RetryCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of retries before GetToken succeeds.</summary>
-</histogram>
-
-<histogram name="InstanceID.RestoredIDCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of Instance IDs restored from the persistent store at startup.
-  </summary>
-</histogram>
-
-<histogram name="InstanceID.RestoredTokenCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of InstanceID tokens restored from the persistent store at startup.
-  </summary>
-</histogram>
-
-<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records various events of interest in the InstantController. E.g. When URLs
-    are blacklisted.
-  </summary>
-</histogram>
-
-<histogram name="Instant.SessionsStorageNamespace"
-    enum="InstantSessionStorageNamespace">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How often an Instant preview is committed onto a different tab than it was
-    created from.
-  </summary>
-</histogram>
-
-<histogram name="Instant.TimeToFirstShow" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time between the first Omnibox interaction and when the Instant preview
-    shows. If the instant preview was already showing when the user interacted
-    with the omnibox, this histogram is not recorded.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.CacheableNTPLoad"
-    enum="InstantExtended_CacheableNTPLoad">
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    Records a histogram for how often the Cacheable NTP fails to load.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.FallbackToLocalOverlay"
-    enum="InstantExtended_FallbackCause">
-  <obsolete>
-    Depcreated as of 10/2013. No longer relevant since the HTML overlay was
-    abandoned.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records the cause for falling back to a local overlay at the time of
-    fallback.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.InstantNavigation"
-    enum="InstantExtended_InstantNavigation">
-  <obsolete>
-    Deprecated as of 10/2013. This histogram is no longer relevant since the
-    HTML overlay went away.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records a histogram for instant extended (Local NTP and Online NTP) and
-    non-extended navigations.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.NewOptInState"
-    enum="InstantExtended_NewOptInState">
-  <obsolete>
-    Deprecated as of 11/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records, on startup, whether the user has chosen to opt-in to or opt-out of
-    InstantExtended via chrome://flags.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState">
-  <obsolete>
-    Deprecated 2013-06. As of m30 use InstantExtended.NewOptInState.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records, on startup, whether the user has chosen to opt-in to or opt-out of
-    InstantExtended via chrome://flags.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%">
-  <obsolete>
-    Deprecated 2013-07. Please see
-    InstantExtended.PercentageMatchV2_QuerytoQuery instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a search query to another search query.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%">
-  <obsolete>
-    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoURL
-    instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a search query to a url. Example: Accidental search for
-    google.con, then navigation to google.com.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%">
-  <obsolete>
-    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoQuery
-    instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a url to a search query.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%">
-  <obsolete>
-    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoURL
-    instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a url to another url.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%">
-  <obsolete>
-    Removed in August 2016 with the removal of query in the omnibox code.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a search query to another search query.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%">
-  <obsolete>
-    Removed in August 2016 with the removal of query in the omnibox code.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a search query to a url. Example: Accidental search for
-    google.con, then navigation to google.com.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%">
-  <obsolete>
-    Removed in September 2016 because (i) this measurement was somewhat wrong,
-    (ii) it's difficult to understand the data, and (iii) there are better ways
-    to answer the same question.  The measurement is somewhat wrong because
-    reloads, link drops, and pasting URLs and pressing enter are all incorrectly
-    logged to the URLtoQuery histogram, not the URLtoURL histogram.  Futhermore,
-    this histogram is difficult to analyze because it's not broken up by input
-    length.  Short URLs can by random chance have a sizable percentage match
-    with a query.  Finally, there are better source for data like this; ask
-    mpearson for details.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a url to a search query.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%">
-  <obsolete>
-    Removed in September 2016 because (i) this measurement was somewhat wrong,
-    and (ii) there are better ways to answer the same question.  The measurement
-    is somewhat wrong because reloads, link drops, and pasting URLs and pressing
-    enter are all incorrectly logged to the URLtoQuery histogram, not the
-    URLtoURL histogram.  Furthermore, there are better source for data like
-    this; ask mpearson for details.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the number of matching characters at the start of the user's text as
-    a percentage of average length between the old and new text when the user
-    navigates from a url to another url.
-  </summary>
-</histogram>
-
-<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 2013-06. This preference has not been exposed or used for months,
-    and we do not plan to use it in the future.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records, on startup, the value of the &quot;Allow your search engine to
-    provide Instant result&quot; preference setting for the first profile
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="InstantSearchClicks.PreviewScrollState"
-    enum="InstantSearchClicks_PreviewScrollState">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <owner>ksimbili@chromium.org</owner>
-  <summary>
-    Records the scroll state on the preview page when instant search clicks
-    feature is triggered.
-  </summary>
-</histogram>
-
-<histogram name="InstantSearchClicks.ReasonForSwap"
-    enum="InstantSearchClicks_ReasonForSwap">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <owner>ksimbili@chromium.org</owner>
-  <summary>
-    Records the reason that triggered the page swap when instant search clicks
-    feature is triggered.
-  </summary>
-</histogram>
-
-<histogram name="InstantSearchClicks.TimeInPreview" units="ms">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <owner>ksimbili@chromium.org</owner>
-  <summary>
-    The time spent by the user in preview page before swapping to original or
-    navigating out of preview page.
-  </summary>
-</histogram>
-
-<histogram name="InstantSearchClicks.TimeToSwap" units="ms">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <owner>ksimbili@chromium.org</owner>
-  <summary>
-    The time it took for swap to trigger for all swaps. The is the time between
-    preview page load start to preview page swap with the original page.
-  </summary>
-</histogram>
-
-<histogram name="InterProcessTimeTicks.BrowserAhead" units="ms">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    Estimated additive skew between processes, recorded if the browser process
-    is ahead (higher TimeTicks value) than the renderer process.
-  </summary>
-</histogram>
-
-<histogram name="InterProcessTimeTicks.BrowserBehind" units="ms">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    Estimated additive skew between processes, recorded if the browser process
-    is behind (lower TimeTicks value) than the renderer process.
-  </summary>
-</histogram>
-
-<histogram name="InterProcessTimeTicks.IsSkewAdditive" enum="Boolean">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    True iff the conversion from the browser process TimeTicks to renderer
-    process TimeTicks is done by adding a constant, without scaling.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.authority_invalid_time" units="ms">
-  <obsolete>
-    Removed on 8/1/13.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between the SSL interstitial display and the user decision, which
-    may be either accept or deny.  This is only recorded for overridable SSL
-    warnings with a CERT_AUTHORITY_INVALID warning. Timing begins when user
-    first focuses on the page.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.captive_portal"
-    enum="CaptivePortalBlockingPageEvent">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    User action when the user is shown a captive portal error page.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.common_name_invalid_time" units="ms">
-  <obsolete>
-    Removed on 8/1/13.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between the SSL interstitial display and the user decision, which
-    may be either accept or deny.  This is only recorded for overridable SSL
-    warnings with a CERT_COMMON_NAME_INVALID warning. Timing begins when user
-    first focuses on the page.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.date_invalid_time" units="ms">
-  <obsolete>
-    Removed on 8/1/13.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between the SSL interstitial display and the user decision, which
-    may be either accept or deny.  This is only recorded for overridable SSL
-    warnings with a CERT_DATE_INVALID warning.  Timing begins when user first
-    focuses on the page.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.decision" enum="SecurityInterstitialDecision">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User decision when presented with a security interstitial. As of M44,
-    subresource interstitials were split into their own entries. As of M52,
-    social_engineering_ads* and social_engineering_landing* interstitial reasons
-    are split into their own entries from phishing*.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.decision.repeat_visit"
-    enum="SecurityInterstitialDecision">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User decision when presented with a security interstitial, on a site that
-    the user had previously visited.  As of M44, subresource interstitials were
-    split into their own entries. As of M52, social_engineering_ads* and
-    social_engineering_landing* interstitial reasons are split into their own
-    entries from phishing*.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.interaction"
-    enum="SecurityInterstitialInteraction">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User interactions with a security interstitial.  As of M44, subresource
-    interstitials were split into their own entries. As of M52,
-    social_engineering_ads* and social_engineering_landing* interstitial reasons
-    are split into their own entries from phishing*.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl" enum="SSLResponseTypesV2">
-  <obsolete>
-    Replaced by interstitial.ssl_overridable.* and
-    interstitial.ssl_nonoverridable.* in Jan 2015 (M42).
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    User action when the user is shown a SSL interstitial. SHOW_ALL and MORE
-    refer to the total number of SSL errors; all of the other numbers pertain to
-    the number of actions related to SSL errors that are overridable. The counts
-    do not sum to 100%; SHOW_ALL is a superset of SHOW_OVERRIDABLE, which in
-    turn will be a supserset of the PROCEED/DONT_PROCEED variables.
-    SHOW_UNDERSTAND is only being used by an experimental field trial. The
-    interstitials due to captive portals are now recorded in the
-    &quot;SSLCaptivePortal&quot;.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.captive_portal" enum="SSLCaptivePortal">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    Record possible states of captive portals. This histogram is emitted
-    (possibly multiple times to different buckets) whenever a ssl interstitial
-    page is displayed and captive portal detection is enabled. The captive
-    portal technique forces a client on a network to see a special web page
-    (usually for authentication purposes) before using the internet normally.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.cause.nonoverridable" enum="SSLErrorCauses">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Possible non-attack causes of the non-overridable SSL interstitial. Many
-    errors are not reported in this histogram and new errors may be added over
-    time, therefore one should not look at the breakdown of this histogram (one
-    bucket divided by the sum) because that will be inaccurate. Instead, one
-    should look at each bucket count divided by the count of the ssl errors of
-    that type. E.g. WWW mismatch is recorded only when the ssl error is
-    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
-    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
-    histogram interstitial.ssl_error_type.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.cause.overridable" enum="SSLErrorCauses">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Possible non-attack causes of the overridable SSL interstitial. Many errors
-    are not reported in this histogram and new errors may be added over time,
-    therefore one should not look at the breakdown of this histogram (one bucket
-    divided by the sum) because that will be inaccurate. Instead, one should
-    look at each bucket count divided by the count of the ssl errors of that
-    type. E.g. WWW mismatch is recorded only when the ssl error is
-    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
-    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
-    histogram interstitial.ssl_error_type.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.clockstate.build_time" enum="ClockStates">
-  <owner>mab@chromium.org</owner>
-  <summary>
-    State of the system clock, as inferred from the build timestamp, when an SSL
-    CERT_INVALID_DATE error is seen.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.clockstate.network" enum="ClockStates">
-  <obsolete>
-    Deprecated August 2016. Replaced with interstitial.ssl.clockstate.network2,
-    which records reasons why network time might be unavailable.
-  </obsolete>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    State of the system clock, relative to network time, when an SSL
-    CERT_INVALID_DATE error is seen.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.clockstate.network2"
-    enum="NetworkClockStates">
-  <obsolete>
-    Deprecated October 2016. Due to a bug, data in this histogram is mislabelled
-    and should be disregarded. Replaced with
-    interstitial.ssl.clockstate.network3.
-  </obsolete>
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    State of the system clock, relative to network time, when an SSL
-    CERT_INVALID_DATE error is seen.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.clockstate.network3"
-    enum="NetworkClockStates">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    State of the system clock, relative to network time, when an SSL
-    CERT_INVALID_DATE error is seen.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.connection_type"
-    enum="ResourcePrefetchPredictorNetworkType">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The histogram shows the connection types associated with SSL warnings. E.g.,
-    do more warnings occur on WiFi?
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.did_user_revoke_decisions"
-    enum="BooleanRevoked">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    Specifies when a user enters the page info menu whether or not the user
-    pressed the SSL decisions revoke button. This can only by done if the user
-    is in the &quot;Remember Certificate Error Decisions&quot; experiment. This
-    is logged when the page info UI is closed.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.expiration_and_decision.nonoverridable"
-    enum="SSLIsExpiredAndDecision">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    Records when a user has made a decision to proceed on a nonoverridable SSL
-    interstitial. Also records whether a prior decision had been made but the
-    decision expired.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.expiration_and_decision.overridable"
-    enum="SSLIsExpiredAndDecision">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    Records when a user has made a decision to proceed on an overridable SSL
-    interstitial. Also records whether a prior decision had been made but the
-    decision expired.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.good_cert_seen" enum="SSLGoodCertSeenEvent">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    Emitted when a good certificate is seen, specifying whether the user already
-    gave an exception for a bad certificate for the same host.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.severity_score.authority_invalid" units="%">
-  <obsolete>
-    Deprecated Jan 2015 (M42).
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The likelihood of a |CERT_AUTHORITY_INVALID| error being an attack.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.severity_score.common_name_invalid" units="%">
-  <obsolete>
-    Deprecated Jan 2015 (M42).
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The likelihood of a |CERT_COMMON_NAME_INVALID| error being an attack.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl.severity_score.date_invalid" units="%">
-  <obsolete>
-    Deprecated Jan 2015 (M42).
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The likelihood of a |CERT_DATE_INVALID| error being an attack.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_accept_time" units="ms">
-  <obsolete>
-    Removed on 8/1/13.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between the SSL interstitial display and the user decision, when
-    the user accepts the SSL warning.  This is only recorded for overridable SSL
-    warnings.  Timing begins when user first focuses on the page.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_error_handler" enum="SSLErrorHandlerEvent">
-  <owner>meacer@chromium.org</owner>
-  <summary>The type of action that the SSL error handler takes.</summary>
-</histogram>
-
-<histogram name="interstitial.ssl_error_handler.cert_date_error_delay"
-    units="ms">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    When handling a certificate date error, Chrome (under certain Variations
-    Service experiments) will delay displaying the warning interstitial for up
-    to 3 seconds while querying a network time service. This histogram records
-    the amount of time for which the interstitial was delayed on this check. The
-    histogram is recorded even when a time query is not sent (for example,
-    because Chrome already had an up-to-date network timestamp that it could
-    use, or because the client is not in the experimental group that enables
-    network time queries).
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_error_type" enum="SSLErrorTypes">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The type of SSL error that the user encounters.  This is recorded for all
-    SSL warnings, regardless of whether they are overridable.
-  </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_reject_time" units="ms">
-  <obsolete>
-    Removed on 8/1/13.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between the SSL interstitial display and the user decision, when
-    the user rejects the SSL warning.  This is only recorded for overridable SSL
-    warnings.  Timing begins when user first focuses on the page.
-  </summary>
-</histogram>
-
-<histogram name="Invalidations.GCMUpstreamRequest"
-    enum="GCMUpstreamMessageStatus">
-  <owner>nyquist@chromium.org</owner>
-  <owner>khushalsagar@chromium.org</owner>
-  <summary>
-    Status of sending outgoing invalidation message through GCM upsteam.
-  </summary>
-</histogram>
-
-<histogram name="Invalidations.NetworkChannel"
-    enum="InvalidationNetworkChannel">
-  <owner>pavely@chromium.org</owner>
-  <summary>Network channel used for invalidations.</summary>
-</histogram>
-
-<histogram name="IOS.ShareExtension.ReceivedEntriesCount" units="files">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>
-    The number of items received simultaneously in Chrome from the IOS share
-    extension.
-  </summary>
-</histogram>
-
-<histogram name="IOS.ShareExtension.ReceivedEntry"
-    enum="IOSShareExtensionReceivedEntryType">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>Type of the item received from the iOS share extension.</summary>
-</histogram>
-
-<histogram name="IOS.ShareExtension.ReceivedEntryDelay" units="ms">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>
-    The delay in milliseconds between the item creation in the extension and its
-    processing in Chrome.
-  </summary>
-</histogram>
-
-<histogram name="IOS.ShareExtension.Source"
-    enum="IOSShareExtensionReceivedEntrySource">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>
-    The source application that sent the external command to Chrome.
-  </summary>
-</histogram>
-
-<histogram name="IOS.Spotlight.Action" enum="IOSSpotlightAction">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>The Spotlight Action pressed by the user.</summary>
-</histogram>
-
-<histogram name="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError"
-    enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Errors that the privileged attachment broker encounters while trying to
-    broker attachments.
-  </summary>
-</histogram>
-
-<histogram name="IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError"
-    enum="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Errors that an unprivileged attachment broker encounters while trying to
-    broker attachments.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CharacterCount" units="characters">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of characters in JavaScript dialog messages grouped
-    by site engagement score.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CharacterCountUserSuppressed" units="characters">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of characters in JavaScript dialog messages that
-    were suppressed by the user. Compare with
-    JSDialogs.CountOfJSDialogMessageCharacters.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CountOfJSDialogMessageCharacters" units="characters">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of characters in JavaScript dialog messages.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CountOfJSDialogMessageNewlines">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of newlines in JavaScript dialog messages. (This
-    does not count breaks inserted by the UI toolkit in wrapping the messages.)
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageCharacters"
-    units="characters">
-  <obsolete>
-    Deprecated 2016-02.
-  </obsolete>
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of characters in onbeforeunload messages.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageNewlines">
-  <obsolete>
-    Deprecated 2016-02.
-  </obsolete>
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The count of the number of newlines in onbeforeunload messages. (This does
-    not count breaks inserted by the UI toolkit in wrapping the messages.)
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.DismissalCause"
-    enum="JavaScriptDialogDismissalCause">
-  <owner>avi@chromium.org</owner>
-  <summary>The cause of dismissal of JavaScript dialogs.</summary>
-</histogram>
-
-<histogram
-    name="JSDialogs.FineTiming.TimeBetweenDialogClosedAndNextDialogCreated"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between closing a Javascript dialog and opening
-    another, to track very frequent dialogs.
-  </summary>
-</histogram>
-
-<histogram
-    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndNextDialogCreated"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between opening a Javascript dialog and opening
-    another, to track very frequent dialogs.
-  </summary>
-</histogram>
-
-<histogram
-    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between opening a Javascript dialog and closing
-    it, to track very short-lived dialogs.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.IsForemost" enum="BooleanForemost">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    For dialogs, whether or not they were spawned by a tab that was foremost.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.OnBeforeUnloadStayVsLeave" enum="StayVsLeave">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    For onbeforeunload dialogs, the user's choice between staying on the page
-    and leaving it.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.SiteEngagementOfBeforeUnload" units="%">
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The site engagement values of sites showing onbeforeunload dialogs. Logged
-    once per dialog, whether shown or suppressed.
-  </summary>
-</histogram>
-
-<histogram name="JSDialogs.SiteEngagementOfDialogs" units="%">
-  <obsolete>
-    Deprecated 2016-10. Site engagement needed to be measured in small buckets
-    anyway so it was never high-resolution enough for use.
-  </obsolete>
-  <owner>avi@chromium.org</owner>
-  <summary>
-    The site engagement values of sites showing dialogs. Logged once per dialog,
-    whether shown or suppressed.
-  </summary>
-</histogram>
-
-<histogram name="Keyboard.KeystrokeDeltas" units="ms">
-  <obsolete>
-    Deprecated 07/2016 in crbug.com/631204 with KeyboardUmaEventFilter removal.
-  </obsolete>
-  <owner>girard@chromium.org</owner>
-  <summary>
-    The time between keystrokes in Aura text fields. The only keystrokes that
-    are measured are ones that produce a printable character and are not over 5
-    seconds apart.
-  </summary>
-</histogram>
-
-<histogram name="Keyboard.Shortcuts.CrosSearchKeyDelay" units="ms">
-  <owner>xiaohuic@chromium.org</owner>
-  <owner>zalcorn@chromium.org</owner>
-  <summary>
-    The time between a user pressing the ChromeOS &quot;Search&quot; key and the
-    second key being pressed down to active a shortcut. e.g. Search + L would
-    record the time between Search key down and L key down. If the user pressed
-    multiple keys after Search, we only record the first key down.
-  </summary>
-</histogram>
-
-<histogram name="Kiosk.Launch.CryptohomeFailure" enum="LoginFailureReason">
-  <owner>xiyuan@chromium.org</owner>
-  <summary>Tracks cryptohome failure during kiosk launch.</summary>
-</histogram>
-
-<histogram name="Kiosk.Launch.Error" enum="KioskLaunchError">
-  <owner>xiyuan@chromium.org</owner>
-  <summary>Tracks kiosk launch errors.</summary>
-</histogram>
-
-<histogram name="Kiosk.LaunchType" enum="KioskLaunchType">
-  <owner>xiyuan@chromium.org</owner>
-  <owner>blumberg@chromium.org</owner>
-  <summary>
-    Records kiosk launches, whether it is an enterprise or consumer kiosk and
-    whether it is an auto launch or manual launch.
-  </summary>
-</histogram>
-
-<histogram name="LanguageUsage.AcceptLanguage" enum="LanguageCode">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Accept languages.</summary>
-</histogram>
-
-<histogram name="LanguageUsage.ApplicationLanguage" enum="LanguageCode">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Application languages used for UI.</summary>
-</histogram>
-
-<histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Logs which Chrome flags from about:flags were active on start up.
-  </summary>
-</histogram>
-
-<histogram name="Launch.HomeScreen" enum="LaunchFromHomeScreen">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    Records how Chrome handled a launch from an Android Home screen shortcut.
-  </summary>
-</histogram>
-
-<histogram name="Launch.HomeScreenSource" enum="LaunchFromHomeScreenSource">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Records the source of an Android homescreen launch intent used to launch
-    Chrome.
-
-    The Menu item bucket is deprecated as of M57, and will only contain records
-    up until M56.
-
-    For M57+, the Menu item (standalone) bucket contains all launch intents
-    originating from the add to homescreen menu item that launch to standalone
-    mode and *are not* PWAs. These are sites which do not meet the PWA
-    eligibility criteria, but have an app manifest that specifies either
-    standalone or fullscreen display. This bucket also contains PWA *and*
-    non-PWA intents that were added to the homescreen *prior* to M57, as we
-    cannot distinguish between them after they are added.
-
-    For M57+, the Menu item (shortcut) bucket contains all launch intents
-    originating from the add to homescreen menu item that launch to a browser
-    tab, regardless of when the intent was added.
-  </summary>
-</histogram>
-
-<histogram name="Launch.IntentFlags" enum="LaunchIntentFlags">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    Records flags (and combinations of flags) that were attached to the Intent
-    that started ChromeLauncherActivity.
-  </summary>
-</histogram>
-
-<histogram name="Launch.InvalidIntent" enum="BooleanHit">
-  <obsolete>
-    Deprecated 2016-06 -- hit rate is neglible.
-  </obsolete>
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    Records whether or not an invalid Android Intent was fired to launch Chrome.
-    (http://crbug.com/445136)
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerComplexText" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, at least half of which were
-    complex text fragments, the average number of microseconds spent laying out
-    each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerFloat" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, at least half of which were
-    floats, the average number of microseconds spent laying out each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerNode" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, the average number of
-    microseconds spent laying out each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerPositioned" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, at least half of which were
-    fixed or absolute positioned, the average number of microseconds spent
-    laying out each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerSimpleText" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, at least half of which were
-    simple text fragments, the average number of microseconds spent laying out
-    each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.MicroSecondsPerTD" units="microseconds">
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    For layouts that considered at least 100 nodes, at least half of which were
-    table cells, the average number of microseconds spent laying out each node.
-  </summary>
-</histogram>
-
-<histogram name="Layout.ScrollAnchor.AdjustedScrollOffset" enum="BooleanHit">
-  <owner>skobes@chromium.org</owner>
-  <summary>
-    Records the number of times ScrollAnchor adjusts the scroll offset.
-  </summary>
-</histogram>
-
-<histogram name="Layout.ScrollAnchor.SuppressedBySanaclap" enum="BooleanHit">
-  <owner>ymalik@chromium.org</owner>
-  <summary>
-    Records the number of times scroll anchoring is suppressed because of the
-    SANACLAP bit being set on an ancestor (see bit.ly/sanaclap).
-  </summary>
-</histogram>
-
-<histogram name="Layout.ScrollAnchor.TimeToFindAnchor" units="microseconds">
-  <owner>ymalik@chromium.org</owner>
-  <summary>The time it took to find a suitable anchor element.</summary>
-</histogram>
-
-<histogram name="LevelDB.Open" enum="LevelDBStatus">
-  <owner>cmumford@chromium.org</owner>
-  <summary>The result of an open attempt of a leveldb.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses">
-  <obsolete>
-    Deprecated 2013-10. No thread-unsafety was found.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Linux and CrOS use unlocked_stdio(3). If it is used unsafely, record it
-    here. If there is no record of unsafety after chrome 29 has been in the
-    stable channel for a few weeks then revert this change.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.DeleteTableBackupFile" enum="BooleanSuccess">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    Tracks the success rate of deleting an unused leveldb table backup file.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError" enum="LevelDBIOErrorMethods">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>Methods where leveldb's Chromium environment has IO errors.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError." enum="PlatformFileError">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>PlatformFileErrors encountered by a single leveldb method.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.BFE" enum="PlatformFileError">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    Errors (base::File::Error) encountered by a single leveldb method.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.NewLogger" enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewLogger.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>Errno of errors encountered in NewLogger.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewSequentialFile.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>Errno of errors encountered in NewSequentialFile.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError">
-  <obsolete>
-    Deprecated 2013-04. As of m28 use LevelDBEnv.IOError.NewRandomAccessFile.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    File errors in leveldb ChromiumEnv's NewRandomAccessFile method.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileAppend.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>Errno of errors encountered in WritableFileAppend.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileFlush.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>Errno of errors encountered in WritableFileFlush.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.LockFileAncestorsNotFound" units="directories">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Number of directories missing when Non-IDB LevelDBEnv tries to create a Lock
-    file.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.MaxFDs" units="files">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
-    for clients other than IndexedDB.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.MissingFiles" units="files">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Number of backup files found without corresponding ldb files. As measured by
-    GetChildren when used in LevelDB clients other than IndexedDB.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.RetryRecoveredFromErrorIn" enum="PlatformFileError">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    When Non-IDB LevelDBEnv successfully retries an operation that had failed,
-    record the error from the most recent failed attempt.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.Table" enum="BooleanSuccess">
-  <obsolete>
-    As of M54 no longer creating or using table backup files.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Success indicates a successful backup or restore operation for .ldb table
-    files when used by LevelDB clients other than IndexedDB.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.TimeTo" units="ms">
-  <obsolete>
-    Deprecated 2013-04. As of m28 use LevelDBEnv.TimeUntilSuccessFor.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
-    0 means success on the first try.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.TimeUntilSuccessFor" units="ms">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
-    0 means success on the first try.
-  </summary>
-</histogram>
-
-<histogram name="LevelDBWrapper.CommitDelay" units="ms">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    Delay between the browser process receiving changes and those changes being
-    written to the DB.
-  </summary>
-</histogram>
-
-<histogram name="LibraryLoader.LoadNativeLibraryWindows"
-    enum="LoadLibraryResultCategory">
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric records the LoadLibraryExW and LoadLibraryW Windows API call
-    results, which are used in native_library_win.cc.
-  </summary>
-</histogram>
-
-<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage">
-  <obsolete>
-    Deprecated as of 11/2014, removed from code.
-  </obsolete>
-  <owner>feng@chromium.org</owner>
-  <summary>
-    A boolean that indicates whether the workaround of a Sony framework bug was
-    used. The metric is Android-specific, and is logged when the browser starts.
-    See more details at http://crbug.com/311644.
-  </summary>
-</histogram>
-
-<histogram name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"
-    units="%">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Percentage of the native library code pages resident in memory. Recorded
-    immediately before the library prefetching kicks in, only on Android.
-  </summary>
-</histogram>
-
-<histogram name="LibraryLoader.PrefetchStatus" enum="BooleanSuccess">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Indicates whether the forking of a child process to prefetch the native
-    library succeeded. This metric is Android-specific, and is logged when the
-    browser starts.
-  </summary>
-</histogram>
-
-<histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion">
-  <owner>thestig@chromium.org</owner>
-  <summary>
-    The version of glibc used. (Linux only) Logged on each start up.
-  </summary>
-</histogram>
-
-<histogram name="Linux.SandboxStatus" enum="LinuxSandboxStatus">
-  <owner>rickyz@chromium.org</owner>
-  <summary>
-    The Linux sandbox status. This describes what sandboxing features are
-    enabled (such as the suid/namespace sandboxes, various namespaces, seccomp
-    bpf, ...). Emitted once at startup.
-  </summary>
-</histogram>
-
-<histogram name="Linux.WindowManager" enum="LinuxWindowManagerName">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    The window manager used. (Linux only) Logged on each start up.
-  </summary>
-</histogram>
-
-<histogram name="Linux.X11.ServerRTT" units="microseconds">
-  <owner>thomasanderson@chromium.org</owner>
-  <summary>
-    RTT between Chrome and the X11 server.  Tracked in X11EventSource by
-    measuring the latency to receive a property event after changing a property.
-  </summary>
-</histogram>
-
-<histogram name="LocalDiscovery.ClientRestartAttempts">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Records number of attempts to start local discovery.</summary>
-</histogram>
-
-<histogram name="LocalDiscovery.DetectorRestartTime" units="ms">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Time between detector restarts.</summary>
-</histogram>
-
-<histogram name="LocalDiscovery.DetectorTriggerTime" units="ms">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Time before detector trigger notifications.</summary>
-</histogram>
-
-<histogram name="LocalDiscovery.DevicesPage" enum="DevicesPageEvents">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Records events related to devices page.</summary>
-</histogram>
-
-<histogram name="LocalDiscovery.FirewallAccessTime" units="ms">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Windows only histogram that reports request time spend accessing firewall
-    rules. It's logged once per browser process lifetime, when local discovery
-    is used first time.
-  </summary>
-</histogram>
-
-<histogram name="LocalDiscovery.IsFirewallReady" enum="BooleanEnabled">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Windows only histogram that reports, whether a firewall is set, so we can
-    bind inbound sockets. It's logged once per browser process lifetime, when
-    local discovery is used first time.
-  </summary>
-</histogram>
-
-<histogram name="LocalDiscovery.PrivetNotificationsEvent"
-    enum="PrivetNotificationsEvent">
-  <owner>noamsml@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Records events related to local discovery notifications.</summary>
-</histogram>
-
-<histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB" units="KB">
-  <owner>ssid@chromium.org</owner>
-  <summary>
-    Total size of the HTML5 LocalStorage browser-side cache purged in KB when
-    memory pressure signal was triggered or cache size hit the limits.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.BrowserLocalStorageCacheSizeInKB" units="KB">
-  <owner>ssid@chromium.org</owner>
-  <summary>
-    Total size of the HTML5 LocalStorage databases in KB in the browser-side
-    cache recorded each time a new database is opened in memory.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.BrowserLocalStorageSizeInKB" units="KB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Size of the HTML5 LocalStorage DB in KB in the browser-side cache.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time to load HTML5 LocalStorage into the browser-side cache.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.CommitDelay" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Delay between a page making changes and those changes being written to the
-    DB.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.MojoSizeInKB" units="KB">
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache using
-    Mojo implementation.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.MojoTimeToPrime" units="ms">
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
-    Mojo implementation.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.MojoTimeToPrimeFor" units="ms">
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
-    Mojo implementation, split by size.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.RendererLocalStorageSizeInKB" units="KB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.RendererTimeToPrimeLocalStorage">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time to load HTML5 LocalStorage into the renderer-side cache.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorage.TimeToPrimeLocalStorage">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time to load HTML5 LocalStorage into the renderer-side cache. Note that the
-    name is not 'Renderer' prefixed for continuity with the old naming.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.CommitResult" enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The result of an attempt to commit localstorage data to the database.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.DatabaseOpenError" enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The result of a failed attempt to open a LevelDB database for LocalStorage.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.DatabaseOpenError.Disk"
-    enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The result of a failed attempt to open a LevelDB database for LocalStorage
-    on disk.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.DatabaseOpenError.Memory"
-    enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The result of a failed attempt to open a LevelDB database for LocalStorage
-    in memory.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.DestroyDBResult" enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The result of attempting to delete the LocalStorage database.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.DirectoryOpenError"
-    enum="PlatformFileError">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The reason opening a directory for the LevelDB database that backs
-    LocalStorage failed.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.MapLoadError" enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The reason loading an initial snapshot of the localstorage data for an
-    origin failed.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.OpenError" enum="LocalStorageOpenError">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The reason opening the LevelDB database that backs LocalStorage failed.
-  </summary>
-</histogram>
-
-<histogram name="LocalStorageContext.ReadVersionError" enum="LevelDBStatus">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The reason reading the schema version of the LocalStorage database failed.
-  </summary>
-</histogram>
-
-<histogram name="Login.ConsumerNewUsersAllowed" enum="LoginConsumerWhitelist">
-  <owner>cmasone@chromium.org</owner>
-  <owner>sumit@chromium.org</owner>
-  <summary>
-    Chrome OS histogram tracking, per consumer sign-in, whether the device owner
-    is allowing arbitrary accounts to be used on the device, or only those on a
-    specific whitelist.
-  </summary>
-</histogram>
-
-<histogram name="Login.CustomFlags" enum="LoginCustomFlags">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    A set of chrome flags that required browser restart on Chrome OS user sign
-    in.
-  </summary>
-</histogram>
-
-<histogram name="Login.FailureReason" enum="LoginFailureReason">
-  <owner>achuith@chromium.org</owner>
-  <summary>Chrome OS login failure reason.</summary>
-</histogram>
-
-<histogram name="Login.LeastUsedAccountDays" units="days">
-  <owner>achuith@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <summary>
-    Chrome OS histogram that keeps track of the days since the least frequently
-    used account signed in. Reported on every boot and once a day after that.
-  </summary>
-</histogram>
-
-<histogram name="Login.NewUserPriorityPrefsSyncResult"
-    enum="NewUserPriorityPrefsSyncResult">
-  <owner>alemate@chromeos.org</owner>
-  <summary>Records whether a new user's priority prefs sync timed out.</summary>
-</histogram>
-
-<histogram name="Login.NewUserPriorityPrefsSyncTime" units="ms">
-  <owner>alemate@chromeos.org</owner>
-  <summary>
-    Time spent waiting for priority preferences to sync after new user sign in.
-    The operation will time out after 10s.
-  </summary>
-</histogram>
-
-<histogram name="Login.OfflineFailure.IsKnownUser" enum="LoginIsKnownUser">
-  <owner>glevin@chromium.org</owner>
-  <summary>
-    On offline login failure, records whether it is for an existing user.
-  </summary>
-</histogram>
-
-<histogram name="Login.OfflineSuccess.Attempts">
-  <owner>glevin@chromium.org</owner>
-  <summary>
-    On offline login success, records number of attempts, including success.
-  </summary>
-</histogram>
-
-<histogram name="Login.PasswordChangeFlow" enum="LoginPasswordChangeFlow">
-  <owner>xiyuan@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <summary>
-    Records the UI flow after a possible password change is detected.
-  </summary>
-</histogram>
-
-<histogram name="Login.PolicyFilesStatePerBoot" enum="LoginPolicyFilesState">
-  <owner>cmasone@chromium.org</owner>
-  <summary>The state of Chrome OS owner key and device policy files.</summary>
-</histogram>
-
-<histogram name="Login.PromptToCompleteLoginTime" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Time from first display of the login prompt until the user completes signing
-    in.
-  </summary>
-</histogram>
-
-<histogram name="Login.ReauthReason" enum="LoginReauthReasons">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Tracks the reason why a user was sent through the GAIA re-auth flow.
-  </summary>
-</histogram>
-
-<histogram name="Login.StateKeyGenerationStatus"
-    enum="LoginStateKeyGenerationStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>Result of a state key generation operation.</summary>
-</histogram>
-
-<histogram name="Login.SuccessReason" enum="LoginSuccessReason">
-  <owner>achuith@chromium.org</owner>
-  <summary>Chrome OS login success reason.</summary>
-</histogram>
-
-<histogram name="Login.TokenCheckResponseTime" units="ms">
-  <owner>glevin@chromium.org</owner>
-  <summary>
-    Time between sending a request to, and receiving a reply from, GAIA token
-    endpoint to validate TokenInfo.
-  </summary>
-</histogram>
-
-<histogram name="Login.TokenObtainResponseTime" units="ms">
-  <owner>glevin@chromium.org</owner>
-  <summary>
-    Time between sending a request to, and receiving a reply from, GAIA token
-    endpoint to obtain TokenInfo.
-  </summary>
-</histogram>
-
-<histogram name="Login.UsersActiveWeekly" units="users">
-  <owner>alemate@chromium.org</owner>
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Chrome OS histogram that keeps track of number of users who have logged in
-    in the last 7 days. Reported on every boot and once a day after that.
-  </summary>
-</histogram>
-
-<histogram name="Login.UsersActiveWeekly.Percent" units="%">
-  <owner>alemate@chromium.org</owner>
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Chrome OS histogram that keeps track of percentage of local users who have
-    logged in in the last 7 days. Reported on every boot and once a day after
-    that.
-  </summary>
-</histogram>
-
-<histogram name="Login.UserType" enum="LoginUserType">
-  <owner>cmasone@chromium.org</owner>
-  <summary>
-    Chrome OS histogram that keeps track of the way a user logs in and whether
-    Chrome OS is running normal or developer mode.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.ChromeOS.PasswordChange"
-    enum="ManagedUserPasswordChange">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Chrome OS histogram that keeps track of supervised user password change
-    result.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.FilteringResult"
-    enum="SupervisedUserSafetyFilterResult">
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The counts of results from supervised user URL filtering. Each entry
-    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
-    the page transition type (how the user got there, e.g. typed URL, clicked
-    link).
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.SafeSitesDelay" units="ms">
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The extra page load delays introduced by network requests due to the
-    supervised user SafeSites feature, measured once per page load.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.SafetyFilter"
-    enum="SupervisedUserSafetyFilterResult">
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The counts of results from the supervised user safety filter. Each entry
-    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
-    the page transition type (how the user got there, e.g. typed URL, clicked
-    link). This only includes URL requests that were handled by the SafeSites
-    filter (both online and the static blacklist).
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.Whitelist.Count" units="whitelists">
-  <owner>bauerb@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The number of whitelists installed for a supervised user. Recorded at every
-    profile startup.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.Whitelist.JsonParseDuration" units="ms">
-  <owner>bauerb@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The total amount of time taken to parse the JSON contents of a whitelist out
-    of process.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.Whitelist.ReadDuration" units="ms">
-  <owner>bauerb@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The amount of time taken to read a whitelist file from disk.
-  </summary>
-</histogram>
-
-<histogram name="ManagedUsers.Whitelist.TotalLoadDuration" units="ms">
-  <owner>bauerb@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <owner>pam@chromium.org</owner>
-  <summary>
-    The total amount of time taken to load a whitelist from disk and parse it,
-    including jumps to the blocking thread.
-  </summary>
-</histogram>
-
-<histogram name="Manifest.FetchResult" enum="ManifestFetchResultType">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks whether the Manifest fetch succeed and why it failed if it failed.
-  </summary>
-</histogram>
-
-<histogram name="Manifest.HasProperty" enum="Boolean">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks which properties of a Manifest were present when it was parsed. If a
-    property can't be parsed, it will be recorded as not present. These
-    histograms will only be used if the Manifest was correctly fetched and
-    parsed and the parsed manifest is not empty.
-  </summary>
-</histogram>
-
-<histogram name="Manifest.IsEmpty" enum="Boolean">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>Tracks whether the parsed Manifest is the empty Manifest.</summary>
-</histogram>
-
-<histogram name="Manifest.ParseSuccess" enum="Boolean">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks the Manifest parsing result. A failure will be recorded if the
-    Manifest was incorrectly structured. This doesn't take into account parse
-    failures for each individual properties.
-  </summary>
-</histogram>
-
-<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of July 21, 2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether accelerated compositing was used for HTML5 media rendering.
-  </summary>
-</histogram>
-
-<histogram name="Media.Android.BackgroundVideoTime" units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zhiqiang@chromium.org</owner>
-  <summary>
-    Android-specific metric. The time between the moment the backgrounded video
-    playback is started (meaning the user just resumed the backgrounded video
-    allowing playback) and the moment it stops being background playback by the
-    current playing video either going foreground or being paused by the user.
-    Note: on Android, videos are suspended when backgrounded.
-  </summary>
-</histogram>
-
-<histogram name="Media.Android.IsHttpLiveStreamingMedia" enum="MediaUrlType">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records whether a regular media URL is HLS (HTTP Live Streaming)
-    media or not.
-  </summary>
-</histogram>
-
-<histogram name="Media.Android.IsHttpLiveStreamingMediaPredictionResult"
-    enum="MediaTypePredictionResult">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Android: Records which HLS prediction based on the original URL was best.
-  </summary>
-</histogram>
-
-<histogram name="Media.Android.MediaPlayerSuccess" enum="MediaPlayerExitStatus">
-  <owner>timav@chromium.org</owner>
-  <summary>Android: Whether MediaPlayer exited without errors.</summary>
-</histogram>
-
-<histogram name="Media.Android.NumMediaServerCrashes">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Number of consecutive media server crashes monitored before it is
-    reset to 0. Reset happens if there are no crashes in a minute, or if user
-    hits the &quot;try again&quot; button on the media throttle info bar.
-  </summary>
-</histogram>
-
-<histogram name="Media.Android.ThrottleInfobarResponse"
-    enum="ThrottleInfobarResponse">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: The distribution of responses to the media throttle infobar prompt.
-  </summary>
-</histogram>
-
-<histogram name="Media.ArcGpuVideoDecodeAccelerator.InitializeResult"
-    enum="ArcVideoAcceleratorResult">
-  <owner>johnylin@chromium.org</owner>
-  <summary>
-    Counts of status values returned from calls to
-    ArcGpuVideoDecodeAccelerator::Initialize().
-  </summary>
-</histogram>
-
-<histogram name="Media.Audible.ConcurrentTabsTime" units="ms">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records how long more than one tab is audible at the same time. The
-    concurrent tabs might change during this period. The time recorded starts
-    when the browser goes from one to two audbile tabs and stops when it is back
-    below two.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audible.ConcurrentTabsWhenStarting">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records how many tabs were audible when a new tab started to be audible.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audible.MaxConcurrentTabsInSession">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records how many tabs are audible at the same time during the session. It is
-    recording the maximum audible tab count everytime it increases. In other
-    words, a session with N concurrent audible tabs will record entries from 1
-    through N exactly once.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.ActualInputBufferFrameSizeMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Size (in audio frames) of native I/O buffers that is set by the audio
-    manager when calling AUAudioInputStream::Open(). I.e., it is the actual
-    buffer size and it can differ from the one that the client requested. Only
-    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.AudioUnitRenderHasWorkedMac"
-    enum="BooleanEverWorked">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Stored in combination with Media.Audio.RenderFailsWhenBufferSizeChangesMac.
-    It is set to true if calls to AudioUnitRender has ever worked, i.e., we did
-    not start to see kAudioUnitErr_CannotDoInCurrentContext error messages
-    directly from start but there has been at least on successful call to
-    AudioUnitRender.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.AutomaticGainControlMac" enum="BooleanEnabled">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if the Automatic Gain Control (AGC) is enabled or not. Only
-    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Autoplay" enum="AutoplaySource">
-  <owner>mlamouri@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>Records the autoplay source of audios.</summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.CallbackError" enum="BooleanError">
-  <obsolete>
-    Deprecated as of 02/2017.
-  </obsolete>
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    A boolean that reflects whether or not an error was reported during audio
-    capture.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.FramesProvided" units="frames">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The number of captured audio frames that is provided by the operating system
-    in each callback. Typically, Chrome will want to use a 10 ms buffer (e.g.
-    480 frames for a sample rate of 48 kHz), but the OS may decide to capture
-    e.g. 256 frames of audio at a time. If the desired frame size is used, the
-    emitted value is special-cased to be 0. This histogram then shows how
-    frequent it is that the desired number of frames is used and if not, the
-    number of frames used in practice. The number of frames per callback is
-    normally constant or very rarely changed throughout the lifetime of the
-    audio stream. The first value that differs from the desired value is stored
-    and logged when an audio input stream is closed. Any further differences
-    during the lifetime will be ignored.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.Glitches" units="glitches">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The number of glitches that were detected at the OS level while an audio
-    stream was active. A glitch is detected if the OS has to skip providing a
-    set of frames. This value is logged when an audio input stream is closed.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.HighLatencyCallbackError"
-    enum="BooleanError">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    A boolean that reflects whether or not an error was reported during audio
-    capture for a high latency stream.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.LargestGlitchMs" units="ms">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The length in milliseconds of the largest audio glitch that was detected at
-    the OS level. This value is logged when an audio input stream that has
-    suffered glitches is closed.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.LostFramesInMs" units="ms">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The combined length in milliseconds of audio glitches that was detected at
-    the OS level. This is useful to know in particular for audio processing such
-    as echo cancellation. This value is logged when an audio input stream that
-    has suffered glitches is closed.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.LowLatencyCallbackError"
-    enum="BooleanError">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    A boolean that reflects whether or not an error was reported during audio
-    capture for a low latency stream.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.VirtualCallbackError" enum="BooleanError">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    A boolean that reflects whether or not an error was reported during audio
-    capture for a virtual stream.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.Win.InitError" enum="Hresult">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    Error codes from IAudioClient::Initialize() in
-    WASAPIAudioInputStream::InitializeAudioEngine on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Capture.Win.Open" enum="AudioStreamOpenResult">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    Success/error cases for opening an audio input stream on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputBufferSizeWasChangedAudioWorkedMac"
-    enum="BooleanChanged">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if the size of the audio unit's IO buffer was changed when
-    starting an input audio stream. Sampled each time an AUAudioInputStream
-    instance is closed, i.e., we know that input audio has started as it should
-    when this value is stored. Can be compared with
-    Media.Audio.InputBufferSizeWasChangedMac which is only added when input
-    audio fails to start.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputBufferSizeWasChangedMac"
-    enum="BooleanSuccess">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if the size of the audio unit's IO buffer was changed when
-    starting an input audio stream. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputDevicePropertyChangedMac"
-    enum="AudioDevicePropertyResult">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Lists device properties that have been changed during an audio input stream
-    session. We update a map of different property changes during a session and
-    all these values are recorded when an AUAudioInputStream object is closed,
-    hence multiple enum values can be emitted when the histogram is stored.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputDevicePropertyChangedStartupFailedMac"
-    enum="AudioDevicePropertyResult">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Lists device properties that have been changed during an audio input stream
-    session. Only sampled when Media.Audio.InputStartupSuccessMac reports
-    'Failure' and multiple enum values can be emitted each time that happens.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputRestartAttemptsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Counts the total number of times an attempt to restart input audio has been
-    done. The value is stored once when a stream is closed and updated when it
-    has been detected that input audio callbacks are not generated as expected.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputStartupSuccessMac" enum="BooleanSuccess">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if audio capturing did start after stream startup was requested.
-    Sampled once 5 seconds after a stream has been asked to start.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputStartWasDeferredAudioWorkedMac"
-    enum="BooleanDeferred">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if audio capturing started with a small delay or not. Sampled each
-    time an AUAudioInputStream instance is closed, i.e., we know that input
-    audio has started as it should when this value is stored. Can be compared
-    with Media.Audio.InputStartWasDeferredMac which is only added when input
-    audio fails to start.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.InputStartWasDeferredMac" enum="BooleanDeferred">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if audio capturing started with a small delay or not. Only sampled
-    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.IsOnBatteryPowerMac" enum="BooleanOnBattery">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Indicates if the Mac OSX device is on battery power or not. Only sampled
-    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.LogicalProcessorsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    The number of logical processors/cores available on the Mac OSX device. Only
-    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.NumberOfBasicInputStreamsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Number of created default input audio streams. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.NumberOfLowLatencyInputStreamsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Number of created low-latency input audio streams. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.NumberOfOutputStreamsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Number of created output audio streams. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.OutputDeviceAuthorizationTime" units="ms">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Time delta between the moment output device authorization request is
-    received by the browser and the moment its processessing is finished (and
-    reply is to be sent back to the renderer if IPC is not closed yet).
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.PhysicalProcessorsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    The number of physical processors/cores available on the Mac OSX device.
-    Only sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyExact"
-    units="inputs">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Number of simultaneous inputs coming to the AudioRendererMixer which renders
-    audio with user specified latency. The value is logged each time it reaches
-    a new maximum for the mixer. It is useful for evaluating how mixing audio in
-    renderer reduces the number of output audio streams going from the renderer
-    to the browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyInteractive"
-    units="inputs">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Number of simultaneous inputs coming to the AudioRendererMixer which renders
-    audio with interactive latency. The value is logged each time it reaches a
-    new maximum for the mixer. It is useful for evaluating how mixing audio in
-    renderer reduces the number of output audio streams going from the renderer
-    to the browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyPlayback"
-    units="inputs">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Number of simultaneous inputs coming to the AudioRendererMixer which renders
-    audio with playback latency. The value is logged each time it reaches a new
-    maximum for the mixer. It is useful for evaluating how mixing audio in
-    renderer reduces the number of output audio streams going from the renderer
-    to the browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyRtc"
-    units="inputs">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Number of simultaneous inputs coming to the AudioRendererMixer which renders
-    audio with real time latency. The value is logged each time it reaches a new
-    maximum for the mixer. It is useful for evaluating how mixing audio in
-    renderer reduces the number of output audio streams going from the renderer
-    to the browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.AudioMixing.LatencyMap" units="subsets">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Subset of audio output latencies encountered by the renderer so far. Logged
-    each time an audio output with a new latency starts playing. The values are
-    bitsets where each bit represents corresponding latency according to
-    AudioLatency::LatencyType. Useful for understanding usecases for audio
-    output mixing in renderer.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.BrowserCallbackRegularity">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Reflects how regularly browser issues audio requests to renderer. Depends on
-    how well the system buffer size the browser side renders audio at and the
-    buffer size it requests from renderer are aligned.  When zero, it means
-    renderer buffer size is a multiple of system buffer size, and render calls
-    from browser to renderer are issued evenly. When -1, it means the renderer
-    buffer size is larger than system buffer size, but is not an exact multiple
-    of it; in this case browser periodically skips a call to renderer. When
-    positive, floor(value/2) reflects the number of extra consecutive render
-    requests issued by browser to renderer each time to fulfill the system audio
-    render request; if (value/2) is not integer, then plus one more extra call
-    is issued periodically.   The metric is recorded on the edge between browser
-    and renderer. On Mac the system buffer size may vary dynamically, the metric
-    does not capture that: only the buffer size mismatch introduced by audio
-    output device configuration is captured.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.FramesRequested" units="frames">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    The number of frames audio is actually rendered at if the number is
-    different from the desired number of frames.  If the desired frame size is
-    used, this value will be 0. Typically, Chrome will want to use a 10ms buffer
-    (e.g. 480 frames for a sample rate of 48kHz), but we might have to render
-    audio 256 frames at a time. This histogram gives us an indication as to how
-    frequent that is and what buffer sizes are used in practice. This value is
-    logged when an audio output stream is stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.GetSourceDataTime.WebRTC"
-    units="microseconds">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The time spent to get audio data from the source. For WebRTC, it's the time
-    spent in WebRtcAudioRenderer::SourceCallback. Logged every function call,
-    which is every 10 ms.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.GetSourceDataTimeMax.WebRTC"
-    units="microseconds">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The maximum time spent to get audio data from the source during a session.
-    For WebRTC, it's the time spent in WebRtcAudioRenderer::SourceCallback. A
-    session is between Start() and Stop() of WebRtcAudioRenderer.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.Glitches" units="glitches">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    The number of glitches that were detected at the OS level while an audio
-    stream was active. A glitch is detected if the OS has to skip rendering a
-    set of frames. This value is logged when an audio output stream is stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.LargestGlitchMs" units="ms">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    The length in milliseconds of the largest glitch that was detected at the OS
-    level. This value is logged when an audio output stream that has suffered
-    glitches is stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.LostFramesInMs" units="ms">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    The combined length in milliseconds of audio glitches. This is useful to
-    know in particular for audio processing such as echo cancellation. This
-    value is logged when an audio output stream that has suffered glitches is
-    stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut"
-    enum="BooleanTimedOut">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Whether audio output device timed out waiting for authorization reply from
-    the browser side.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.OutputDeviceStatus"
-    enum="OutputDeviceStatus">
-  <owner>olka@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Device status received in response to device authorization request.
-  </summary>
-</histogram>
-
-<histogram
-    name="Media.Audio.Render.SinkCache.GetOutputDeviceInfoCacheUtilization"
-    enum="GetOutputDeviceInfoCacheHit">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Whether a cached sink was used to get audio output device information, or a
-    new sink was created for that.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.SinkCache.InfoSinkReusedForOutput"
-    enum="BooleanReused">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    When a new sink is created to get output device information, it is cached.
-    This metric shows if such a sink is later reused for audio output (can
-    happen no more than once) or deleted unused after timeout expires. Logged
-    when one of the abovementioned events takes place.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.Render.SinkCache.UsedForSinkCreation"
-    enum="BooleanUsage">
-  <owner>olka@chromium.org</owner>
-  <summary>
-    Whether a sink was created through the sink cache or directly.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.RenderFailsWhenBufferSizeChangesMac"
-    enum="BooleanChanged">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    True if a call to AudioUnitRender failed with an error code of
-    kAudioUnitErr_CannotDoInCurrentContext (-10863) and the call was preceded
-    with a change in the native I/O buffer size. This value is logged while
-    input audio is active but it should be a very rare event.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.RequestedInputBufferFrameSizeMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Size (in audio frames) the client has asked for when creating an
-    AUAudioInputStream object. It might not be able to fulfill this request. The
-    actual size is given by Media.Audio.ActualInputBufferFrameSizeMac. Only
-    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.ResumeEventsMac">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Counts the number of times the system has resumed from power suspension.
-    Counting is reset each time Chrome restarts. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.Audio.UptimeMac" units="hours">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Reports the system uptime in hours for Mac OS X devices. Only sampled when
-    Media.Audio.InputStartupSuccessMac reports 'Failure'.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioBitsPerChannel">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Bits per channel of HTML5 audio sample data.</summary>
-</histogram>
-
-<histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    Whether there is input audio glitches due to dropped input audio data or
-    not. Sampled when a low-latency input audio stream is destructed.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioCapturerDroppedData" units="%">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The percentage of input audio data that was dropped at the browser/renderer
-    boundary due to for example buffer overflow in the writer side buffer or in
-    the socket. Reported at the destruction of low-latency audio input stream.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioCapturerMissedReadDeadline" units="%">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The percentage of input audio data blocks that had to be buffered because
-    there was not room in the shared memory ring buffer on the browser/renderer
-    boundary. This happens if the reading side hasn't read data in time.
-    Reported at the destruction of low-latency audio input stream.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioCapturerRepetition" units="ms">
-  <owner>minyue@chromium.org</owner>
-  <summary>
-    Captures bit-exact audio repetitions with pre-defined look back time. As
-    soon as a repetition is detected, its look back time is reported. Ideally,
-    no reports should be generated.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioChannelLayout" enum="ChannelLayout">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Audio channel layout in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioCodec" enum="AudioCodec">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Audio codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioInputCbErrorMac" units="OSStatus">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Error codes that AudioUnitRender() returns in AUAudioInputStream on Mac.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioInputController" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Measures the time taken for AudioInputController::</summary>
-</histogram>
-
-<histogram name="Media.AudioInputControllerCaptureStartupSuccess"
-    enum="CaptureStartupResult">
-  <obsolete>
-    Deprecated as of 02/2017.
-  </obsolete>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Whether capture started successfully after an input stream startup was
-    requested.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioInputControllerSessionSilenceReport"
-    enum="AudioInputSilenceReport">
-  <owner>grunell@chromium.org</owner>
-  <summary>The silence report for an audio input device session.</summary>
-</histogram>
-
-<histogram name="Media.AudioInputDeviceManager" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Measures the time taken for AudioInputDeviceManager::</summary>
-</histogram>
-
-<histogram name="Media.AudioOutputController" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Measures the time taken for AudioOutputController::</summary>
-</histogram>
-
-<histogram name="Media.AudioOutputControllerDataNotReady" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Time spent waiting in AudioOutputController::WaitTillDataReady() if the data
-    was not initially available.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioOutputControllerPlaybackStartupSuccess"
-    enum="BooleanSuccess">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Whether playback started successfully after stream startup was requested.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioRendererAudioGlitches" enum="AudioGlitchResult">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Captures if render-side audio glitches are detected or not. Sampled when a
-    low-latency output audio stream is destructed.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents">
-  <obsolete>
-    Deprecated Mar 2016 in favor of a new PipelineStatus code.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Captures statistics for various AudioRendererImpl events.</summary>
-</histogram>
-
-<histogram name="Media.AudioRendererIpcStreams">
-  <obsolete>
-    Deprecated 02/2017. No longer needed.
-  </obsolete>
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The maximum number of simultaneous audio render streams over IPC created in
-    AudioRendererHost for a render process. Logged at render process shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioRendererIpcStreamsTotal">
-  <obsolete>
-    Deprecated 02/2017. No longer needed.
-  </obsolete>
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    The maximum number of simultaneous audio render streams over IPC created in
-    AudioRendererHost for all render processes. Logged at render process
-    shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioRendererMissedDeadline" units="%">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Percentage of AudioSyncReader::Read() calls where the renderer missed its
-    realtime deadline.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioSampleFormat" enum="AudioSampleFormat">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Audio sample format in HTML5 media. Logged when Audio Decoder initializes.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioSamplesPerSecond" enum="AudioSampleRate">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Audio samples per second in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioSamplesPerSecondUnexpected" units="Hz">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Audio samples per second in HTML5 media (atypical values, in Hz).
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioThreadStatus" enum="AudioThreadStatus">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    State of the audio thread. A value of &quot;started&quot; is emitted once
-    the hang monitor has been initialized. If the thread is detected as hung
-    later, a value of &quot;hung&quot; is emitted. If the hung thread later
-    recovers a value of &quot;recovered&quot; is emitted.
-  </summary>
-</histogram>
-
-<histogram name="Media.AudioTrackProcessingStates"
-    enum="AudioTrackProcessingStates">
-  <owner>grunell@chromium.org</owner>
-  <summary>
-    State of the media stream audio track processing, sampled once during the
-    life time of a MediaStreamAudioProcessor.
-  </summary>
-</histogram>
-
-<histogram name="Media.Autoplay.CrossOrigin.Result"
-    enum="CrossOriginAutoplayResult">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    The result of autoplaying video elements in cross-origin iframes.
-  </summary>
-</histogram>
-
-<histogram name="Media.AVDA.FrameSentAsOverlay" enum="BooleanFrameAsOverlay">
-  <owner>liberato@chromium.org</owner>
-  <summary>
-    Record a count for each frame sent to the client by AVDA.  True counts
-    indicate that the frame was an overlay (SurfaceView).  False counts are for
-    SurfaceTexture frames.
-  </summary>
-</histogram>
-
-<histogram name="Media.AVDA.InputQueueTime" units="ms">
-  <obsolete>
-    Deprecated 03/2016. No longer needed.
-  </obsolete>
-  <owner>watk@chromium.org</owner>
-  <summary>
-    The time that a bitstream buffer spends in AVDA's pending bitstream buffer
-    queue before it is fed to MediaCodec.
-  </summary>
-</histogram>
-
-<histogram name="Media.AVDA.MissingFormatChanged" enum="BooleanFormatChanged">
-  <obsolete>
-    Deprecated 10/2016. No longer needed.
-  </obsolete>
-  <owner>liberato@chromium.org</owner>
-  <summary>
-    Number of times that AVDA stopped decoding because MediaCodec failed to
-    provide a FORMAT_CHANGED message before sending decoded frames back.  True
-    counts indicate instances where FORMAT_CHANGE was missed, while false
-    instances indicate any MediaCodec initialization by AVDA.
-  </summary>
-</histogram>
-
-<histogram name="Media.AVDA.NumAVDAInstances" units="AVDA instances">
-  <obsolete>
-    Deprecated 10/2016. No longer needed.
-  </obsolete>
-  <owner>watk@chromium.org</owner>
-  <summary>
-    The number of concurrently running AndroidVideoDecodeAccelerators. Logged
-    during each AVDA initialization.
-  </summary>
-</histogram>
-
-<histogram name="Media.AVDA.VirtualContext" enum="BooleanVirtualContext">
-  <obsolete>
-    Deprecated 10/2016. No longer needed.
-  </obsolete>
-  <owner>liberato@chromium.org</owner>
-  <summary>
-    Number of times that AVDA's deferred rendering encountered a virtual GL
-    context.  True counts indicate virtual, false counts indicate not.
-  </summary>
-</histogram>
-
-<histogram name="Media.AvdaCodecImage.WaitTimeForFrame" units="ms">
-  <owner>liberato@chromium.org</owner>
-  <summary>
-    Time spent waiting for a frame to become available in a SurfaceTexture after
-    requesting that MediaCodec renders it.
-  </summary>
-</histogram>
-
-<histogram name="Media.CacheUseful" enum="BooleanSuccess">
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    Whether a media response might be used to satisfy a future request.
-  </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.DelayedAndDroppedFramesPer5Sec"
-    units="frames/5s">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    The average number of delayed and dropped frames for the ChromeCast
-    application.  Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s">
-  <obsolete>
-    Deprecated 07/2015 in issue 508534.
-  </obsolete>
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    The average number of displayed frames for the ChromeCast application.
-    Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAv" units="ms">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Time needed to pre-buffer A/V data before the actual playback for the
-    ChromeCast application.
-  </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAvAfterAbort" units="ms">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Time needed to buffer A/V data after an abort for the ChromeCast
-    application.
-  </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAvAfterUnderrun" units="ms">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Time needed to buffer A/V data after an underrun for the ChromeCast
-    application.
-  </summary>
-</histogram>
-
-<histogram name="Media.Controls.Download" enum="MediaControlsDownloadReason">
-  <owner>mlamouri@chromium.org</owner>
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    Records events and user interactions related to the download button shown on
-    media elements.
-  </summary>
-</histogram>
-
-<histogram name="Media.Controls.Show" enum="MediaControlsShowReason">
-  <obsolete>
-    Deprecated May 19 2016 in favor of Media.Controls.Show.{Audio,Video}
-  </obsolete>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Record whether the default media controls were shown and why every time they
-    could be shown.
-  </summary>
-</histogram>
-
-<histogram name="Media.Controls.Show.Audio" enum="MediaControlsShowReason">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Record whether the default media controls of an audio element were shown and
-    why every time they could be shown. Note that audio elements that were not
-    insterted to the DOM and do not have a controls attribute are not taken into
-    account.
-  </summary>
-</histogram>
-
-<histogram name="Media.Controls.Show.Video" enum="MediaControlsShowReason">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Record whether the default media controls of a video element were shown and
-    why every time they could be shown.
-  </summary>
-</histogram>
-
-<histogram name="Media.CrosBeamformingDeviceState"
-    enum="CrosBeamformingDeviceState">
-  <owner>ajm@chromium.org</owner>
-  <summary>
-    The state of the user selected virtual beamforming audio device on CrOS.
-    It's logged whenever the format of the audio input stream is queried, which
-    at least happens on stream startup, but could happen at other times as well.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs">
-  <obsolete>
-    Deprecated Sep 15 2015 in favor of Media.DetectedAudioCodecHash
-  </obsolete>
-  <owner>jrummell@chromium.org</owner>
-  <summary>Audio codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.DetectedAudioCodecHash" enum="FFmpegCodecHashes">
-  <owner>jrummell@chromium.org</owner>
-  <summary>
-    Audio codec used in HTML5 media. Reporting corrected in M51 to include all
-    detected audio codecs, not just those up to and including the first one
-    supported.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedContainer" enum="MediaContainers">
-  <owner>jrummell@chromium.org</owner>
-  <summary>
-    Container used for HTML5 media. Views that include pre-M34 data will
-    categorize dash (38) and smooth streaming (39) in the &quot;Other&quot;
-    bucket.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedTrackCount.Audio">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected audio tracks in HTML5 media. Not all may be usable by the
-    player.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedTrackCount.Text">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected text tracks in HTML5 media. Not all may be usable by the
-    player.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedTrackCount.Video">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected video tracks in HTML5 media. Not all may be usable by the
-    player.
-  </summary>
-</histogram>
-
-<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs">
-  <obsolete>
-    Deprecated Sep 15 2015 in favor of Media.DetectedVideoCodecHash
-  </obsolete>
-  <owner>jrummell@chromium.org</owner>
-  <summary>Video codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.DetectedVideoCodecHash" enum="FFmpegCodecHashes">
-  <owner>jrummell@chromium.org</owner>
-  <summary>
-    Video codec used in HTML5 media. Reporting corrected in M51 to include all
-    detected video codecs, not just those up to and including the first one
-    supported.
-  </summary>
-</histogram>
-
-<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions">
-  <obsolete>
-    Removed 10/2015 in favor of Permissions.Action.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the actions taken in the media infobar, which prompts the users for
-    device permission.
-  </summary>
-</histogram>
-
-<histogram name="Media.DroppedFrameCount">
-  <owner>prabhur@chromium.org</owner>
-  <summary>
-    Count of dropped frames between pipeline start and stop. Media pipeline
-    starts/stops when an HTML5 video is loaded/unloaded respectively in the
-    browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.Duration" units="ms">
-  <obsolete>
-    Removed 03/2017 in favor of Media.Duration2 with larger max bucket.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Duration in milliseconds of HTML5 media (when known).</summary>
-</histogram>
-
-<histogram name="Media.Duration2" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Duration in milliseconds of HTML5 media (when known).</summary>
-</histogram>
-
-<histogram name="Media.EME.CdmFileIO.FileSizeKBOnError" units="KB">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Size in KB of the last file successfully read by the CDM through CDM FileIO
-    before a specific error happens. This is reported only when the error
-    happens, which should be rare.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.CdmFileIO.FileSizeKBOnFirstRead" units="KB">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Size in KB of the first file successfully read by the CDM through CDM
-    FileIO. This is recorded once per CDM instance.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.CdmInterfaceVersion">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Chromium could support multiple versions of CDM interface. This metric
-    records the CDM interface version that the CDM created by Chromium uses.
-    This is recorded once per CDM instance.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey" enum="CdmPromiseResult">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Result of promises for Clear Key key systems that were handled by Chromium
-    code.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.addKey" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>addKey result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.cancelKeyRequest" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>cancelKeyRequest result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.CreateCdmTime" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to create the CDM instance for Clear Key key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.generateKeyRequest"
-    enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>generateKeyRequest result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.KeyAdded">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyAdded event count using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.KeyError" enum="MediaKeyError">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyError event count using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.TimeTo" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to resolve a CDM promise for Clear Key key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.KeySystemSupport.Widevine"
-    enum="MediaKeySystemSupportStatus">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Key system support query status and result. Each enum value will be reported
-    at most once per renderer process.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.NeedKey">
-  <owner>xhwang@chromium.org</owner>
-  <summary>EME NeedKey event count.</summary>
-</histogram>
-
-<histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Output protection query status and result. One query and one positive (no
-    unprotected external links) result (if any) are reported per CDM instance.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.RequestMediaKeySystemAccess"
-    enum="RequestMediaKeySystemAccessStatus">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Key system support query status and result, as reported by
-    RequestMediaKeySystemAccess. Each value will be reported at most once per
-    renderer process.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown" enum="CdmPromiseResult">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Result of promises for unknown key systems that were handled by Chromium
-    code.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.addKey" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>addKey result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.cancelKeyRequest" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>cancelKeyRequest result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.CreateCdmTime" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to create the CDM instance for an unknown key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.generateKeyRequest" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>generateKeyRequest result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.KeyAdded">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyAdded event count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.KeyError" enum="MediaKeyError">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyError event count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.SystemCode" units="system code">
-  <owner>xhwang@chromium.org</owner>
-  <summary>System code count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.TimeTo" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to resolve a CDM promise for an unknown key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine" enum="CdmPromiseResult">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Result of promises for Widevine key systems that were handled by Chromium
-    code.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.addKey" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>addKey result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.cancelKeyRequest" enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>cancelKeyRequest result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.CreateCdmTime" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to create the CDM instance for the Widevine key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.generateKeyRequest"
-    enum="MediaKeyException">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>generateKeyRequest result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.KeyAdded">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyAdded event count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.KeyError" enum="MediaKeyError">
-  <obsolete>
-    Deprecated 02/2016 with removal of prefixed EME.
-  </obsolete>
-  <owner>xhwang@chromium.org</owner>
-  <summary>KeyError event count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.SystemCode" units="system code">
-  <owner>xhwang@chromium.org</owner>
-  <summary>System code count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.TimeTo" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The time it takes to resolve a CDM promise for the Widevine key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.VideoCapability.HasEmptyRobustness"
-    enum="BooleanEmpty">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Whether the robustness level of any video capability in the supported
-    configuration passed into requestMediaKeySystemAccess() is empty. This is
-    specific to the Widevine key system.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioBitsPerChannel">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Bits per channel of the hardware audio device which failed to open in low
-    latency mode and required high latency fallback.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioChannelCount">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Channel count of the hardware audio device which failed to open in low
-    latency mode and required high latency fallback.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioChannelLayout" enum="ChannelLayout">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Channel layout of the hardware audio device which failed to open in low
-    latency mode and required high latency fallback.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioSamplesPerSecond"
-    enum="AudioSampleRate">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Samples per second of the hardware audio device which failed to open in low
-    latency mode and required high latency fallback.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioSamplesPerSecondUnexpected"
-    units="Hz">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Samples per second of the hardware audio device (atypical values, in Hz)
-    which failed to open in low latency mode and required high latency fallback.
-  </summary>
-</histogram>
-
-<histogram name="Media.FallbackToHighLatencyAudioPath" enum="BooleanSuccess">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Whether Chrome had to fallback to the high latency audio path or not.
-  </summary>
-</histogram>
-
-<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average number of delayed and dropped frames for the Fling application.
-    Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s">
-  <obsolete>
-    Deprecated 07/2015 in issue 508534.
-  </obsolete>
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    The average number of displayed frames for the Fling application.  Reported
-    every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAv" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to pre-buffer A/V data before the actual playback for the Fling
-    application.
-  </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to buffer A/V data after an abort for the Fling application.
-  </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to buffer A/V data after an underrun for the Fling application.
-  </summary>
-</histogram>
-
-<histogram name="Media.GPU.HasEverLostContext" enum="ContextProviderPhase">
-  <owner>dcastagna@chromium.org</owner>
-  <summary>
-    Records when a context provider is acquired in media, and when it's released
-    because a context loss has been detected.
-  </summary>
-</histogram>
-
-<histogram name="Media.GpuVideoDecoderError" enum="VideoDecodeAcceleratorError">
-  <owner>sandersd@chromium.org</owner>
-  <summary>Counts of video decode errors reported to GpuVideoDecoder.</summary>
-</histogram>
-
-<histogram name="Media.GpuVideoDecoderInitializeStatus" enum="PipelineStatus">
-  <owner>posciak@chromium.org</owner>
-  <summary>Results of attempts to GpuVideoDecoder::Initialize().</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioBitsPerChannel">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Bits per channel of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioChannelCount">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Channel count of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioChannelLayout" enum="ChannelLayout">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Channel layout of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioSamplesPerSecond" enum="AudioSampleRate">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Samples per second of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioSamplesPerSecondUnexpected" units="Hz">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Samples per second of the hardware audio device (atypical values, in Hz).
-  </summary>
-</histogram>
-
-<histogram name="Media.HasEverPlayed" enum="BooleanHasPlayed">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Whether a given WebMediaPlayer instance, after preload, started playback;
-    recorded once at time of player destruction.
-  </summary>
-</histogram>
-
-<histogram name="Media.HighLatencyAudioCaptureStartupSuccess"
-    enum="AudioCaptureStartupResult">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    Whether capture started successfully after a high-latency input stream
-    startup was requested.
-  </summary>
-</histogram>
-
-<histogram name="Media.InfoLoadDelay" units="ms">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    The time it takes to perform redirect tracking and a CORS access check while
-    preparing to play a media file.
-  </summary>
-</histogram>
-
-<histogram name="Media.Initialize.Windows" enum="WinGetLastError">
-  <obsolete>
-    Deprecated 05/2015 in Issue 1141703002. FFmpeg is now statically linked.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    Errors returned by LoadLibraryEx on Windows while attempting to load
-    ffmpegsumo.dll.
-  </summary>
-</histogram>
-
-<histogram name="Media.InputErrorMac" units="OSStatus">
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    Error codes that we encounter while setting up an AUAudioInputStream on Mac.
-  </summary>
-</histogram>
-
-<histogram name="Media.InputInvalidSampleRateMac" units="Hz">
-  <obsolete>
-    Deprecated and removed from code as of 02/2016.
-  </obsolete>
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Invalid input sample rate when calling AUAudioInputStream::Open on Mac.
-  </summary>
-</histogram>
-
-<histogram name="Media.InputStreamDuration" units="ms">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Duration in milliseconds of low-latency audio input streams. Sampled when
-    the stream is closed by the AudioInputController.
-  </summary>
-</histogram>
-
-<histogram name="Media.InputStreamDurationWithoutCallback" units="ms">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    Duration in milliseconds of low-latency audio input streams which never got
-    any callbacks.
-  </summary>
-</histogram>
-
-<histogram name="Media.IsStreaming" enum="Boolean">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Whether the WMPI data source is streaming (does not support range requests).
-  </summary>
-</histogram>
-
-<histogram name="Media.LinuxAudioIO" enum="LinuxAudioIO">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Audio IO layer used by the Linux OS, sampled once at startup of the browser.
-  </summary>
-</histogram>
-
-<histogram name="Media.LoadType" enum="MediaLoadType">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Load type of HTML5 media, such as URL, MediaSource and MediaStream.
-  </summary>
-</histogram>
-
-<histogram name="Media.LocalRendererSinkStates" enum="LocalRendererSinkStates">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    State of the WebRtc local renderer, sampled once during the lifetime of a
-    local renderer.
-  </summary>
-</histogram>
-
-<histogram name="Media.LowLatencyAudioCaptureStartupSuccess"
-    enum="AudioCaptureStartupResult">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    Whether capture started successfully after a low-latency input stream
-    startup was requested.
-  </summary>
-</histogram>
-
-<histogram name="Media.MicrophoneMuted" enum="MicrophoneMuteResult">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Heuristically detects if the user has muted the microphone or not. Measured
-    approximately four times per minute.
-  </summary>
-</histogram>
-
-<histogram name="Media.MicrophoneVolume" units="%">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Level of the microphone volume measured in percent. This value can be larger
-    than 100% on Linux. Measured approximately four times per minute.
-  </summary>
-</histogram>
-
-<histogram name="Media.Midi.InputPorts" units="devices">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>Connected input port numbers on the initialization.</summary>
-</histogram>
-
-<histogram name="Media.Midi.OutputPorts" units="devices">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>Connected output port numbers on the initialization.</summary>
-</histogram>
-
-<histogram name="Media.Midi.ResultOnShutdown" enum="MidiResult">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>The final status of MidiManager on browser shutdown.</summary>
-</histogram>
-
-<histogram name="Media.Midi.SysExMessageSizeUpTo1MB" units="bytes">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>Reports sysex message size.</summary>
-</histogram>
-
-<histogram name="Media.Midi.Usage" enum="MidiUsage">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>MidiManager usages to understand the API use case.</summary>
-</histogram>
-
-<histogram name="Media.MSE.AudioCodec" enum="MSECodec">
-  <owner>acolwell@chromium.org</owner>
-  <summary>
-    Audio codec used in Media Source Extensions playback. Set when AddId() is
-    called during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.DetectedTrackCount.Audio">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected audio tracks in Media Source Extensions playback. Not all
-    may be usable by the player.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.DetectedTrackCount.Text">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected text tracks in Media Source Extensions playback. Not all
-    may be usable by the player. This count includes only explicitly signalled
-    tracks in MSE initialization segments parsed from WebM or ISO BMFF
-    bytestreams.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.DetectedTrackCount.Video">
-  <owner>wolenetz@chromium.org</owner>
-  <summary>
-    Number of detected video tracks in Media Source Extensions playback. Not all
-    may be usable by the player.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.LateAudioFrames"
-    units="late frames per million frames">
-  <obsolete>
-    Deleted along with browser side MSE implementation.
-  </obsolete>
-  <owner>qinmin@chromium.org</owner>
-  <owner>timav@chromium.org</owner>
-  <summary>
-    Relative number of late audio frames wrt total number of audio frames in MSE
-    playback, multiplied by one million. The audio frame is considered late if
-    it might cause an underrun, i.e. comes from decoder when audio buffer is
-    already depleted.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.LateVideoFrames"
-    units="late frames per million frames">
-  <obsolete>
-    Deleted along with browser side MSE implementation.
-  </obsolete>
-  <owner>qinmin@chromium.org</owner>
-  <owner>timav@chromium.org</owner>
-  <summary>
-    Relative number of late video frames wrt total number of video frames in MSE
-    playback, multiplied by one million. The video frame is late if it missed
-    its presentation time as determined by PTS when it comes from decoder. The
-    rendering policy (i.e. render or skip) does not affect it.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.NumberOfTracks">
-  <owner>acolwell@chromium.org</owner>
-  <summary>
-    Number of tracks specified to AddId() for Media Source Extensions playback.
-    May be called multiple times per element if playback is dynamically altered.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.Playback" enum="BooleanSuccess">
-  <obsolete>
-    Renamed to Media.LoadType.
-  </obsolete>
-  <owner>acolwell@chromium.org</owner>
-  <summary>
-    Whether Media Source Extensions is specified for playback of Media elements.
-    Sampled when media pipeline starts.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.PlaybackDuration" units="ms">
-  <obsolete>
-    Deleted along with browser side MSE implementation.
-  </obsolete>
-  <owner>qinmin@chromium.org</owner>
-  <owner>timav@chromium.org</owner>
-  <summary>
-    Duration of an uninterrupted MSE playback. This is the time interval between
-    the playback starts or resumes and the moment when user stops the playback
-    by pressing pause, initiating a seek etc. Measured in media time in
-    milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.Starvations" units="starvations per million frames">
-  <obsolete>
-    Deleted along with browser side MSE implementation.
-  </obsolete>
-  <owner>qinmin@chromium.org</owner>
-  <owner>timav@chromium.org</owner>
-  <summary>
-    Relative number of starvations wrt total number of frames in MSE playback,
-    multiplied by one million. Starvation happens when the player interrupts the
-    regular playback and asks for more data, conditions are player-specific.
-  </summary>
-</histogram>
-
-<histogram name="Media.MSE.VideoCodec" enum="MSECodec">
-  <owner>acolwell@chromium.org</owner>
-  <summary>
-    Video codec used in Media Source Extensions playback. Set when AddId() is
-    called during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.AudioBitrate" units="kbps">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The audio bit rate as reported by the Netflix application.  May be reported
-    multiple times as network conditions change during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.AudioNumChannels" units="channels">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of audio channels as reported by the Netflix application. May be
-    reported multiple times as network conditions change during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.DelayedAndDroppedFramesPer5Sec"
-    units="frames/5s">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average number of delayed and dropped frames for the Netflix
-    application.  Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s">
-  <obsolete>
-    Deprecated 07/2015 in issue 508534.
-  </obsolete>
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    The average number of displayed frames for the Netflix application. Reported
-    every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.VideoBitrate" units="kbps">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Video bit rate as reported by the Netflix application.  May be reported
-    multiple times as network conditions change during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.Netflix.VideoHeight" units="pixels">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Video height as reported by the Netflix application.  May be reported
-    multiple times as network conditions change during playback.
-  </summary>
-</histogram>
-
-<histogram name="Media.Notification.Click" enum="MediaNotificationClickSource">
-  <owner>mlamouri@chromium.org</owner>
-  <owner>avayvod@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    The type of media notification the user clicked to go back to Chrome.
-  </summary>
-</histogram>
-
-<histogram name="Media.Pepper.PlayedSound" enum="Boolean">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Whether Pepper players have played sound through its lifetime.
-  </summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderError"
-    enum="VideoDecodeAcceleratorError">
-  <owner>ihf@chromium.org</owner>
-  <owner>posciak@chromium.org</owner>
-  <summary>Counts of video decode errors reported to plugin.</summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderPictureCount">
-  <owner>ihf@chromium.org</owner>
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Number of PictureBuffers/textures requested per hardware decoder creation.
-    This value varies by platform and video. A user visible video may trigger
-    multiple decoder creations (sometimes every 5 seconds) but would normally
-    not hold more than 2 sets of buffers at any given time in memory.
-  </summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderPictureHeight">
-  <owner>ihf@chromium.org</owner>
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Vertical video resolution rounded to the nearest bucket. (Corresponds
-    roughly to the number in 720p.)
-  </summary>
-</histogram>
-
-<histogram name="Media.PipelineStatus" enum="PipelineStatus">
-  <owner>prabhur@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Status of the media pipeline at the end of its lifecycle suffixed by stream
-    and video decoder type.
-  </summary>
-</histogram>
-
-<histogram name="Media.PipelineStatus.Start" enum="PipelineStatus">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Status of the media pipeline starting process (including demuxer and
-    renderer initialization). If the media pipeline is destroyed during the
-    starting process nothing will be reported, but this should relatively rare.
-  </summary>
-</histogram>
-
-<histogram name="Media.PlayMovies.DelayedAndDroppedFramesPer5Sec"
-    units="frames/5s">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average number of delayed and dropped frames for the PlayMovies
-    application.  Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s">
-  <obsolete>
-    Deprecated 07/2015 in issue 508534.
-  </obsolete>
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    The average number of displayed frames for the PlayMovies application.
-    Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.AllowedByPage" enum="BooleanEnabled">
-  <owner>miu@chromium.org</owner>
-  <summary>Tracks whether a web page allows content to be remoted.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.AudioBitrate" units="kbps">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measured audio content transfer bitrate while remoting content.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.AudioChannelLayout" enum="ChannelLayout">
-  <owner>miu@chromium.org</owner>
-  <summary>Audio channel layout used while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.AudioCodec" enum="AudioCodec">
-  <owner>miu@chromium.org</owner>
-  <summary>Audio codec used while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.AudioSamplesPerSecond" enum="AudioSampleRate">
-  <owner>miu@chromium.org</owner>
-  <summary>Audio sampling rate while remoting audio content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.AudioSamplesPerSecondUnexpected" units="Hz">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Audio sampling rate while remoting audio content (atypical values, in Hz).
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.PosterDownloadDuration.Fail" units="ms">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measures the amount of time it took to ultimately fail to download a poster
-    image for an HTML5 video while remoting content.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.PosterDownloadDuration.Success" units="ms">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measures the amount of time it took to successfully download a poster image
-    for an HTML5 video while remoting content.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.SessionDuration" units="ms">
-  <owner>miu@chromium.org</owner>
-  <summary>Measures the duration of each remoting session.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.SessionStartTrigger"
-    enum="RemotingStartTrigger">
-  <owner>miu@chromium.org</owner>
-  <summary>Tracks the trigger for starting a remoting session.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.SessionStopTrigger" enum="RemotingStopTrigger">
-  <owner>miu@chromium.org</owner>
-  <summary>Tracks the trigger for stopping a remoting session.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.TimeUntilFirstPlayout" units="ms">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measures how long, from the start of a remoting session, until content began
-    playing out on the remote device.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.TimeUntilRemoteInitialized" units="ms">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measures how long, from the start of a remoting session, until a message was
-    received from the remote device indicating initialization succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.TrackConfiguration"
-    enum="RemotingTrackConfiguration">
-  <owner>miu@chromium.org</owner>
-  <summary>Tracks whether audio or video or both are remoted.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.VideoAspectRatio" units="%">
-  <owner>miu@chromium.org</owner>
-  <summary>Aspect ratio of video while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.VideoBitrate" units="kbps">
-  <owner>miu@chromium.org</owner>
-  <summary>
-    Measured video content transfer bitrate while remoting content.
-  </summary>
-</histogram>
-
-<histogram name="Media.Remoting.VideoCodec" enum="VideoCodec">
-  <owner>miu@chromium.org</owner>
-  <summary>Video codec used while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.VideoCodecProfile" enum="VideoCodecProfile">
-  <owner>miu@chromium.org</owner>
-  <summary>Video codec profile used while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.Remoting.VideoNaturalWidth" units="pixels">
-  <owner>miu@chromium.org</owner>
-  <summary>Video width while remoting content.</summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderError" enum="VideoDecodeAcceleratorError">
-  <owner>posciak@chromium.org</owner>
-  <summary>Counts of video decode errors reported to RTCVideoDecoder.</summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess">
-  <obsolete>
-    Renamed to Media.RTCVideoDecoderInitDecodeSuccess.
-  </obsolete>
-  <owner>posciak@chromium.org</owner>
-  <summary>Results of attempts to RTCVideoDecoder::InitDecode().</summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderInitDecodeSuccess" enum="BooleanSuccess">
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Indicates whether we were successful in initializing hardware video decoder
-    for use in the RTC pipeline.
-  </summary>
-</histogram>
-
-<histogram name="Media.RTCVideoEncoderInitEncodeSuccess" enum="BooleanSuccess">
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Indicates whether we were successful in initializing hardware video encoder
-    for use in the RTC pipeline.
-  </summary>
-</histogram>
-
-<histogram name="Media.RTCVideoEncoderProfile" enum="VideoCodecProfile">
-  <owner>posciak@chromium.org</owner>
-  <summary>Video codec profile used in RTC video encoder.</summary>
-</histogram>
-
-<histogram name="Media.Session.ActiveTime" units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Time during which a media session has been active, in other words, the time
-    between an activation and deactivation, without counting time while it was
-    suspended. If a session is activated after being deactivated, there will be
-    two entries. For example, if a user plays a song but is interrupted by a
-    phone call, it will only account for the song playing time.
-  </summary>
-</histogram>
-
-<histogram name="Media.Session.Pause" enum="MediaSessionActionSource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    The number of times the user paused playback of a media session using other
-    means than the pause button on the page.
-  </summary>
-</histogram>
-
-<histogram name="Media.Session.Play" enum="MediaSessionActionSource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    The number of times the user started playback of a media session using other
-    means than the play button on the page.
-  </summary>
-</histogram>
-
-<histogram name="Media.Session.RequestAudioFocusResult" enum="BooleanSuccess">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Indicate whether the native requestAudioFocus() call was successful.
-  </summary>
-</histogram>
-
-<histogram name="Media.Session.Stop" enum="MediaSessionActionSource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    The number of times the user stopped a media session using other means than
-    the pause button on the page.
-  </summary>
-</histogram>
-
-<histogram name="Media.Session.Suspended" enum="MediaSessionSuspendedSource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    The number of times a media session is suspended and why it has been
-    suspended.
-  </summary>
-</histogram>
-
-<histogram name="Media.TimeToPipelineStarted" units="ms">
-  <obsolete>
-    Removed from code 2014/6/18.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    Time in milliseconds from HTML5 media pipeline creation to playing event.
-  </summary>
-</histogram>
-
-<histogram name="Media.TotalMBytes" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Size of HTML5 media (when known), in MB.</summary>
-</histogram>
-
-<histogram name="Media.UncacheableReason" enum="UncacheableReason">
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    Reasons a media response won't be used to satisfy a future request.
-  </summary>
-</histogram>
-
-<histogram name="Media.UnderflowCount">
-  <obsolete>
-    Removed Feb 2017. Media.UnderflowDuration provides more useful counts.
-  </obsolete>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    The number of times a src= playback has underflowed; i.e. ran out of data.
-  </summary>
-</histogram>
-
-<histogram name="Media.UnderflowDuration" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    The amount of time taken to leave the underflow state (i.e. resume playback)
-    for src= playbacks.
-  </summary>
-</histogram>
-
-<histogram name="Media.UnderflowDuration.MSE" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    The amount of time taken to leave the underflow state (i.e. resume playback)
-    for Media Source Extensions (MSE) based playbacks.
-  </summary>
-</histogram>
-
-<histogram name="Media.URLScheme" enum="URLSchemeForHistogram">
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    URL scheme used with HTML5 media. (each URL provides one sample)
-  </summary>
-</histogram>
-
-<histogram name="Media.VAJDA.DecoderFailure" enum="VAJDADecoderFailure">
-  <owner>kcwu@chromium.org</owner>
-  <summary>
-    Error codes reported by jpeg decode using VA-API hardware jpeg decoder.
-  </summary>
-</histogram>
-
-<histogram name="Media.VAVDA.DecoderFailure" enum="VAVDADecoderFailure">
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Error codes reported by video decode using VA-API hardware video decoder.
-  </summary>
-</histogram>
-
-<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure">
-  <obsolete>
-    Deprecated as of 4/2015, partially replaced by Media.VAVDA.DecoderFailure.
-  </obsolete>
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Error codes reported by video decode using VA-API hardware video decoder.
-  </summary>
-</histogram>
-
-<histogram name="Media.VAVEA.EncoderFailure" enum="VAVEAEncoderFailure">
-  <owner>posciak@chromium.org</owner>
-  <summary>
-    Error codes reported by video encode using VA-API hardware video encoder.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay" enum="AutoplaySource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Records the autoplay source of videos. This includes
-    Media.Video.Autoplay.Muted.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted" enum="AutoplaySource">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>Records the autoplay source of muted videos.</summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted.Attribute.OffscreenDuration"
-    units="ms">
-  <obsolete>
-    Deprecated as autoplay muted video by attributed is paused when going
-    offscreen since https://crbug.com/683141.
-  </obsolete>
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Records the offscreen playing duration of a muted video autoplaying from
-    autoplay attribute.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted.Blocked"
-    enum="AutoplayBlockedReason">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Records the reason why autoplay of muted videos was blocked.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted.PlayMethod.BecomesVisible"
-    enum="Boolean">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Records muted video started playing with play() become visible at some
-    point. The UMA for false is not complete since it is recorded in a
-    destructor which is garbage-collected. Please subtract
-    Media.Video.Autoplay.Muted &quot;play() method&quot; count with the true
-    count of this histogram to obtain the real false count.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration"
-    units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Records the offscreen playing duration of a muted video autoplaying from
-    play() method.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.Autoplay.Muted.UnmuteAction" enum="BooleanSuccess">
-  <owner>avayvod@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <owner>zqzhang@chromium.org</owner>
-  <summary>
-    Status of the unmute action on a video that autoplayed because it was muted.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.FullscreenOrientationLock.LockResult"
-    enum="VideoFullscreenOrientationLockResult">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Result of the orientation lock attempt when a video enters fullscreen.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.FullscreenOrientationLock.MetadataAvailability"
-    enum="VideoFullscreenOrientationLockMetadataAvailability">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Status of the metadata when attempting to lock the screen orientation for a
-    fullscreen video.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.KeyFrameDistance" units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Records the time distance between consequent keyframes in a video. The new
-    value is recorded for each video key frame decoded.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.TimeFromForegroundToFirstFrame" units="ms">
-  <obsolete>
-    Deprecated as of 01/18/2017 in issue 670150. Replaced by
-    Media.Video.TimeFromForegroundToFirstFrame.DisableTrack and
-    Media.Video.TimeFromForegroundToFirstFrame.Paused.
-  </obsolete>
-  <owner>avayvod@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Records the time between the moment when the video element is brought to the
-    foreground and when the video frame compositor outputs the next frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.TimeFromForegroundToFirstFrame.DisableTrack"
-    units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Records the time between the moment when the video element that had video
-    track disabled in the background is brought to the foreground and when the
-    video frame compositor outputs the next frame. Recorded even if disabling
-    video track in the background is turned off to collect data for the control
-    group.
-  </summary>
-</histogram>
-
-<histogram name="Media.Video.TimeFromForegroundToFirstFrame.Paused" units="ms">
-  <owner>avayvod@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Records the time between the moment when the video element that was paused
-    in the background is brought to the foreground and when the video frame
-    compositor outputs the next frame. Recorded even if disabling pausing video
-    in the background is turned off to collect data for the control group.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.AspectRatio" units="%">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Video Capture Device captured aspect ratio, as a rounded integer multiplied
-    by 100. The collection is made in the VideoCaptureController upon reception
-    of the first frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.BlacklistedDevice"
-    enum="BlacklistedVideoCaptureDeviceNames">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Counts appearances of Blacklisted Video Capture devices during enumeration.
-    This collection happens during first enumeration in the appropriate
-    platforms' VideoCaptureDeviceFactory.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.FrameRate" units="fps">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Video Capture Device frame rate requested by VideoCaptureManager on
-    AllocateAndStart(). The collection is made in the VideoCaptureController
-    upon reception of the first frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.FramesReceived" enum="BooleanReceived">
-  <obsolete>
-    Deprecated as of 10/2014 in issue 422822. Replaced by
-    Media.VideoCaptureManager.Event and the two new values 3 and 4 in the enum
-    VideoCaptureEvent.
-  </obsolete>
-  <owner>grunell@chromium.org</owner>
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Whether any frames were received during a video capture session. This metric
-    is recorded when a video source is stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.Height" units="pixels">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Video Capture Device captured frame height in pixels. The collection is made
-    in the VideoCaptureController upon reception of the first frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.MacBook.HardwareVersionWhenNoCamera"
-    enum="MacBookVersions">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    MacBook hardware version used when Chrome cannot enumerate a video device.
-    This is used for tracking http://crbug.com/582931.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.MacBook.NumberOfDevices" units="devices">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Number of video capture devices detected by Chrome during device
-    enumeration. Zero devices indicate a problem since all MacBooks should have
-    a built-in camera. This is used for tracking http://crbug.com/582931.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.PixelFormat" enum="CapturePixelFormat">
-  <obsolete>
-    Deprecated 10/2014 in Issue 660493002.
-  </obsolete>
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Pixel format provided by a Video Capture Device. The collection is made in
-    the VideoCaptureController upon reception of the first frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCapture.Width" units="pixels">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Video Capture Device captured frame width in pixels. The collection is made
-    in the VideoCaptureController upon reception of the first frame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCaptureApi.Mac" enum="CaptureApiMac">
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Video Capture and device enumeration/monitoring API used for Mac OS Lion or
-    later. Collection is made only once when the flags are parsed and the
-    appropriate library selected and/or loaded, successfully or not.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCaptureGpuJpegDecoder.InitDecodeSuccess"
-    enum="BooleanSuccess">
-  <owner>henryhsu@chromium.org</owner>
-  <summary>
-    Indicates whether we were successful in initializing hardware jpeg decoder
-    for attempts to VideoCaptureGpuJpegDecoder::Initialize().
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCaptureManager" units="ms">
-  <owner>mcasas@chromium.org</owner>
-  <summary>Measures the time taken for VideoCaptureManager::</summary>
-</histogram>
-
-<histogram name="Media.VideoCaptureManager.Event" enum="VideoCaptureEvent">
-  <owner>grunell@chromium.org</owner>
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    Counts video capture event, such as start and stop capture. Note that the
-    ideal case is 50% start events and 50% normal stop events.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoCodec" enum="VideoCodec">
-  <owner>scherkus@chromium.org</owner>
-  <summary>Video codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodecProfile" enum="VideoCodecProfile">
-  <owner>scherkus@chromium.org</owner>
-  <summary>Video codec profile used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodedAspectRatio" units="%">
-  <obsolete>
-    Deprecated 11/2016 in issue 2506533002.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Coded aspect ratio of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodedWidth">
-  <obsolete>
-    Deprecated 11/2016 in issue 2506533002.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Coded width of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoColorRange" enum="FFmpegColorRanges">
-  <owner>scherkus@chromium.org</owner>
-  <summary>
-    Pixel format color range of HTML5 video. Emitted on video load.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoDecoderFallback" enum="BooleanDidFallBack">
-  <owner>watk@chromium.org</owner>
-  <summary>
-    Whether Chrome had to fall back to a secondary video decoder after the
-    primary decoder failed reinitialization.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoFormat" enum="VideoFormat">
-  <obsolete>
-    Replaced by Media.VideoFramePixelFormat 05/2015.
-  </obsolete>
-  <owner>mcasas@chromium.org</owner>
-  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
-</histogram>
-
-<histogram name="Media.VideoFrameColorSpace" enum="VideoFrameColorSpace">
-  <owner>mcasas@chromium.org</owner>
-  <owner>watk@chromium.org</owner>
-  <summary>
-    Color space or range used in HTML5 video. Emitted on video load.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat">
-  <obsolete>
-    Replaced by Media.VideoPixelFormatUnion 08/2015.
-  </obsolete>
-  <owner>mcasas@chromium.org</owner>
-  <owner>watk@chromium.org</owner>
-  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
-</histogram>
-
-<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat">
-  <obsolete>
-    Replaced by Media.VideoFormat 05/2015.
-  </obsolete>
-  <owner>scherkus@chromium.org</owner>
-  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
-</histogram>
-
-<histogram name="Media.VideoPixelFormatUnion" enum="VideoPixelFormatUnion">
-  <owner>mcasas@chromium.org</owner>
-  <owner>emircan@chromium.org</owner>
-  <summary>
-    Pixel format used in capture and HTML5 video. Emitted on video load.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoRenderer.CadenceChanges" units="changes">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Indicates how many cadence changes have occurred during playback, a zero
-    value is emitted at the beginning of playback. Subsequent values are emitted
-    during video rendering for each cadence change (up to a maximum of 10).
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoRenderer.LowDelay" enum="Boolean">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    Indicates whether video is rendering in low delay mode. It's recorded when a
-    video starts playing.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoRotation" enum="VideoRotation">
-  <owner>suderman@chromium.org</owner>
-  <summary>Metadata rotation in mp4 videos. Emitted during demuxing.</summary>
-</histogram>
-
-<histogram name="Media.VideoTrackAdapter.FramesReceived" enum="BooleanReceived">
-  <obsolete>
-    Replaced by Media.VideoCapture.FramesReceived 09/2014.
-  </obsolete>
-  <owner>grunell@chromium.org</owner>
-  <owner>mcasas@chromium.org</owner>
-  <summary>
-    If any frames were received during a video capture session. It's recorded
-    when a video source is stopped.
-  </summary>
-</histogram>
-
-<histogram name="Media.VideoVisibleAspectRatio" units="%">
-  <owner>scherkus@chromium.org</owner>
-  <summary>Visible aspect ratio of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoVisibleWidth">
-  <owner>scherkus@chromium.org</owner>
-  <summary>Visible width of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VirtualAudioCaptureStartupSuccess"
-    enum="AudioCaptureStartupResult">
-  <owner>maxmorin@chromium.org</owner>
-  <summary>
-    Whether capture started successfully after a high-latency input stream
-    startup was requested.
-  </summary>
-</histogram>
-
-<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoder">
-  <obsolete>
-    Deprecated 05/2016.
-  </obsolete>
-  <owner>dcastagna@chromium.org</owner>
-  <summary>Number of frame buffers used by Vpx decoder.</summary>
-</histogram>
-
-<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoderAndVideoFrame">
-  <obsolete>
-    Deprecated 05/2016.
-  </obsolete>
-  <owner>dcastagna@chromium.org</owner>
-  <summary>
-    Number of frame buffers currently in use by both Vpx decoder and a
-    VideoFrame.
-  </summary>
-</histogram>
-
-<histogram name="Media.VpxVideoDecoder.Vp9DecodeTime" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>Amount of time taken to decode one VP9 frame.</summary>
-</histogram>
-
-<histogram name="Media.VTVDA.HardwareAccelerated"
-    enum="BooleanHardwareAccelerated">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Whether a VTDecompressionSession is internally using hardware accelerated
-    decoding.
-  </summary>
-</histogram>
-
-<histogram name="Media.VTVDA.InitializationFailureReason"
-    enum="VTVDAInitializationFailureType">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Count of VideoToolbox initialization failure reasons. Successful
-    initializations are counted as a special failure type. The sum of successes
-    and failures gives a lower bound on the number of attempted initializations.
-  </summary>
-</histogram>
-
-<histogram name="Media.VTVDA.SessionFailureReason"
-    enum="VTVDASessionFailureType">
-  <owner>sandersd@chromium.org</owner>
-  <summary>
-    Count of VTVDA session failure reasons. Successful initializations are
-    counted as a special failure type. Since only successfully initialized
-    session can fail, failures rates are computed as a simple ratio.
-  </summary>
-</histogram>
-
-<histogram name="Media.WatchTime" units="ms">
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Watch time is defined as the amount of elapsed media time for audio+video
-    media aggregated per player instance. A minimum of 7 seconds of unmuted,
-    foreground media must be watched to start watch time monitoring. Watch time
-    is checked on a regular basis and reported to UMA upon one of the stop
-    events mentioned below or at player destruction if none occur prior.
-
-    Any one of paused, hidden, or muted is sufficient to stop watch time metric
-    reports. Each of these has a hysteresis where if the state change is undone
-    within some time, the watch time will be counted as uninterrupted.
-
-    Power events (on/off battery power) have a similar hysteresis, but unlike
-    the aforementioned properties, will not stop metric collection.
-
-    Each seek event will result in a new watch time metric being started and the
-    old metric finalized as accurately as possible.
-  </summary>
-</histogram>
-
-<histogram name="Media.WebAudioSourceProvider.SinkStatus"
-    enum="OutputDeviceStatus">
-  <owner>olka@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <summary>
-    Status of audio sink provided to WebMediaPlayer. If not OK, null sink will
-    be used for audio output instead.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Media.WebMediaPlayerImpl.Memory" units="KB">
-  <owner>servolk@chromium.org</owner>
-  <summary>
-    Amount of memory used by the WebMediaPlayerImpl and its components.
-  </summary>
-</histogram>
-
-<histogram name="Media.WindowsCoreAudioInput" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 01/2017 as Windows Core Audio is now the only audio input
-    implementation on Windows.
-  </obsolete>
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Whether Chrome is using Windows Core Audio for audio input or not. Updated
-    on Windows only when a low-latency audio input stream is created.
-  </summary>
-</histogram>
-
-<histogram name="Media.YouTube.DelayedAndDroppedFramesPer5Sec"
-    units="frames/5s">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average number of delayed and dropped frames for the YouTube
-    application.  Reported every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s">
-  <obsolete>
-    Deprecated 07/2015 in issue 508534.
-  </obsolete>
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    The average number of displayed frames for the YouTube application. Reported
-    every 5 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAv" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to pre-buffer A/V data before the actual playback for the
-    YouTube application.
-  </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to buffer A/V data after an abort for the YouTube application.
-  </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAvAfterUnderrun" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time needed to buffer A/V data after an underrun for the YouTube
-    application.
-  </summary>
-</histogram>
-
-<histogram name="MediaGalleries.ScanCancelTime" units="ms">
-  <owner>vandebo@chromium.org</owner>
-  <summary>If a media scan was cancelled, the duration (in ms) it ran.</summary>
-</histogram>
-
-<histogram name="MediaGalleries.ScanDirectoriesFound">
-  <owner>vandebo@chromium.org</owner>
-  <summary>
-    The number of directories with media files found during a scan.
-  </summary>
-</histogram>
-
-<histogram name="MediaGalleries.ScanFinishedTime" units="ms">
-  <owner>vandebo@chromium.org</owner>
-  <summary>
-    Duration in milliseconds taken to do a media scan that ran to completion.
-  </summary>
-</histogram>
-
-<histogram name="MediaGalleries.ScanGalleriesGranted" units="%">
-  <owner>vandebo@chromium.org</owner>
-  <summary>
-    The percentage of galleries accepted (not deselected) from the scan result
-    dialog.
-  </summary>
-</histogram>
-
-<histogram name="MediaGalleries.ScanGalleriesPopulated">
-  <owner>vandebo@chromium.org</owner>
-  <summary>
-    The number of galleries added or updated in preferences after a scan.
-  </summary>
-</histogram>
-
-<histogram name="MediaGalleries.Usage" enum="MediaGalleriesUsageType">
-  <owner>vandebo@chromium.org</owner>
-  <summary>Various usage counts for media galleries.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Icon.Click.Location"
-    enum="MediaRouterDialogOpenOrigin">
-  <owner>apacible@chromium.org</owner>
-  <summary>Location the user clicked to open the Media Router dialog.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.CreateRoute.Result"
-    enum="MediaRouteProviderResult">
-  <owner>imcheng@chromium.org</owner>
-  <summary>Result of a request to create a route.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.JoinRoute.Result"
-    enum="MediaRouteProviderResult">
-  <owner>imcheng@chromium.org</owner>
-  <summary>Result of a request to join a route.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.TerminateRoute.Result"
-    enum="MediaRouteProviderResult">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>Result of a request to terminate a route.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.Version" enum="MediaRouteProviderVersion">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Records how the major version of the Media Router component extension
-    compares to the major version of the browser.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.WakeReason"
-    enum="MediaRouteProviderWakeReason">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Reason that the Media Router woke the Media Route Provider event page.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Provider.Wakeup" enum="MediaRouteProviderWakeup">
-  <owner>mfoltz@chromium.org</owner>
-  <summary>
-    Records the outcome of waking the Media Router component's event page.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Route.CreationOutcome"
-    units="MediaRouterCreateRouteOutcome">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    The number of times a Media Router create route response succeeds or fails.
-    This breaks down the different failure types in to separate buckets.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.CloseLatency" units="ms">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    Duration in milliseconds taken from the user opening the Media Router dialog
-    to the user closing the dialog. This is only recorded if closing the dialog
-    is the first action the user takes.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StartLocal.Latency" units="ms">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    Duration in milliseconds taken from the Media Router dialog showing the sink
-    list and being populated with at least one device to the user selecting a
-    device immediately after to create a new route.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StartLocalPosition"
-    enum="MediaRouterSinkPositionLabel">
-  <owner>apacible@chromium.org</owner>
-  <summary>The index of the sink that was selected in the sink list.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StartLocalSessionSuccessful"
-    enum="BooleanSuccess">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    The number of times a session was successfully started versus failed.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Action.StopRoute" enum="MediaRouteType">
-  <owner>apacible@chromium.org</owner>
-  <summary>The number of times a user stops different types of routes.</summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Device.Count">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    Counts the number of devices known and populated to the Media Router dialog
-    three seconds after the dialog loads. Always expected to be non-negative.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Dialog.LoadedWithData" units="ms">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    Duration in milliseconds taken from the user click to open the Media Router
-    dialog to initializing the dialog with data.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Dialog.Paint" units="ms">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    Duration in milliseconds taken from a user click to open the Media Router
-    dialog to the initial paint.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.FirstAction" units="MediaRouterUserAction">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    The first action taken by the user after opening the Media Router dialog.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.InitialState" enum="MediaRouterInitialViews">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    The view that was shown when the Media Router dialog is initially opened.
-  </summary>
-</histogram>
-
-<histogram name="MediaRouter.Ui.Navigate.SourceSelection"
-    enum="MediaRouterSourceTypes">
-  <owner>apacible@chromium.org</owner>
-  <summary>
-    The number of times the user selects a specific cast source type.
-  </summary>
-</histogram>
-
-<histogram name="Memory.BackingStore">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>TBD.</summary>
-</histogram>
-
-<histogram name="Memory.Browser" units="KB">
-  <obsolete>
-    Deprecated 06/2016 Replaced with Memory.Browser.Large2.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by the browser process.  Recorded once per UMA
-    ping.  Note the existence of Memory.Browser.Large, which doesn't have
-    overflow issues. TODO(rkaplow): This should be replaced with
-    Memory.Browser.Large2 in M54.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Browser.Committed" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The total committed memory used by the browser process.  Recorded once per
-    UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Browser.Large" units="MB">
-  <obsolete>
-    Deprecated 07/2016 as it reports wrong numbers. crbug.com/629354. Replaced
-    with Memory.Browser.Large2
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The private working set used by the browser process.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Browser.Large2" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by the browser process.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.CachedFontAndDC">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>TBD.</summary>
-</histogram>
-
-<histogram name="Memory.Chrome" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each chrome:// renderer process.  Each
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.ChromeProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active chrome:// renderer processes.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.CompressibleStringCount"
-    enum="CompressibleStringCountType">
-  <obsolete>
-    Deprecated as of Aug 2016. CompressibleString has been reverted once at
-    https://crrev.com/2227933002.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <summary>
-    This records the frequency with which JavaScript source strings are
-    compressed and decompressed in foreground and background tabs.  Compressing
-    runs 10 seconds after the tab goes background and decompressing runs when
-    JavaScript source string is required (e.g. V8 starts to compile). This
-    measurement is a preparation to introduce CompressibleString class for
-    JavaScript source strings to reduce Blink memory usage.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.FreeMemoryUntilCritical" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    Available free memory until the system will be in a critical state. Critical
-    is as defined by the OS (swapping will occur, or physical memory will run
-    out, etc).
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.StateDuration" units="seconds">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>Time elapsed between the global state changes.</summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.StateOnCriticalNotificationReceived"
-    enum="MemoryState">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    The global state of memory coordinator when a critical pressure notification
-    is received.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.StateOnModerateNotificationReceived"
-    enum="MemoryState">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    The global state of memory coordinator when a moderate pressure notification
-    is received.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.TotalPrivate" units="MB">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    The total private working set memory used by the browser and renderer
-    processes when the memory coordinator changes the global memory state.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.TrimMemoryLevel.Normal"
-    enum="TrimMemoryLevel">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    Android: Records trim memory level when the global state is NORMAL.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.TrimMemoryLevel.Suspended"
-    enum="TrimMemoryLevel">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    Android: Records trim memory level when the global state is SUSPENDED.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Coordinator.TrimMemoryLevel.Throttled"
-    enum="TrimMemoryLevel">
-  <obsolete>
-    Obsolete as of 2/2017
-  </obsolete>
-  <owner>bashi@chromium.org</owner>
-  <summary>
-    Android: Records trim memory level when the global state is THROTTLED.
-  </summary>
-</histogram>
-
-<histogram name="Memory.DiscardableAllocationSize" units="KB">
-  <owner>reveman@chromium.org</owner>
-  <summary>
-    The discardable memory allocation size in KB. Recorded each time a new
-    discardable memory instance is created.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Memory.Experimental.Renderer" units="MB">
-<!-- Name completed by histogram_suffixes name="RendererMemoryAllocator" -->
-
-  <owner>keishi@chromium.org</owner>
-  <summary>The renderer process's memory usage after a page load.</summary>
-</histogram>
-
-<histogram name="Memory.Experimental.Renderer.LoadsInMainFrameDuringUptime"
-    units="loads">
-  <owner>keishi@chromium.org</owner>
-  <summary>
-    The number of loads in a main frame during the lifetime of a render process
-    (excludes extensions). Emitted when the processes quits.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Experimental.Renderer.Uptime" units="ms">
-  <owner>keishi@chromium.org</owner>
-  <summary>
-    The uptime of a render process in time ticks (excludes extensions). Emitted
-    when the processes quits.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Extension" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each extension process.  Each process
-    provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.ExtensionProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active extension processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.GlyphPagesPerLoad">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The number of glyph pages present in the renderer when it commits a load.
-    Since this is per-sub-process, you can get the average number of glyph pages
-    in the system by multiplying this number with the average number of
-    renderers. Note that this typically won't count the glyph pages added as a
-    result of the load that just committed, since layout will happen after the
-    commit. There are 512 bytes per glyph page, but this number also very
-    closely approximates the number of glyph width map pages in the same
-    renderer. The only difference is that if you have font fallback, it will
-    make a new glyph page and no width page, but in most common cases there is
-    no fallback). Width pages are 1K each (256 floats), so you could think of
-    this value as being the number of &quot;1.5K units related to glyphs per
-    renderer per page load&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Gpu" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by the GPU process.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Graphics" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    System-wide graphics driver memory consumption.  Recorded on Chrome OS for
-    platforms where it is exposed by the kernel (for example, Intel i915 and
-    Exynos Mali).  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.IPCChannelReader.ReceivedMessageSize" units="bytes">
-  <obsolete>
-    Obsolete as of 11/2015
-  </obsolete>
-  <owner>dskiba@chromium.org</owner>
-  <summary>Size of messages received by IPC::ChannelReader.</summary>
-</histogram>
-
-<histogram name="Memory.NativeClient" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each Native Client loader process.  Each
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.NativeClientBroker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each Native Client broker process.  Each
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Contents.MemAllocatedMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide memory allocation right after a renderer was killed by
-    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
-    in userspace plus graphics driver memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Contents.MemAvailableMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide file-backed memory plus free memory right after a renderer was
-    killed by oom-killer, which should be smaller than or close to what the
-    kernel uses to trigger low-memory notifications for tab discards. If this is
-    higher than the kernel's threshold for tab discards, renderers may be killed
-    due to reasons other than out-of-memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Contents.MemGraphicsMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Graphics driver (GEM object) memory right after a renderer was killed by
-    oom-killer.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Contents.MemShmemMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide shared memory right after a renderer was killed by oom-killer.
-    Used primarily for shared buffers in the graphics system. Tracked because
-    it's a historical source of leaks on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Extensions.MemAllocatedMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide memory allocation right after a renderer was killed by
-    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
-    in userspace plus graphics driver memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Extensions.MemAvailableMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide file-backed memory plus free memory right after a renderer was
-    killed by oom-killer, which should be smaller than or close to what the
-    kernel uses to trigger low-memory notifications for tab discards. If this is
-    higher than the kernel's threshold for tab discards, renderers may be killed
-    due to reasons other than out-of-memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Extensions.MemGraphicsMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Graphics driver (GEM object) memory right after a renderer was killed by
-    oom-killer.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OOMKill.Extensions.MemShmemMB" units="MB">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    System-wide shared memory right after a renderer was killed by oom-killer.
-    Used primarily for shared buffers in the graphics system. Tracked because
-    it's a historical source of leaks on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Memory.OpenFDs" units="files">
-<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" and name="MemoryFDsAllProcesses" -->
-
-  <owner>dcastagna@chromium.org</owner>
-  <owner>primiano@chromium.org</owner>
-  <summary>
-    The total number of open file descriptors opened per process.  Recorded once
-    per UMA ping.
-  </summary>
-</histogram>
-
-<histogram base="true" name="Memory.OpenFDsSoftLimit" units="files">
-<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" -->
-
-  <owner>dcastagna@chromium.org</owner>
-  <owner>primiano@chromium.org</owner>
-  <summary>
-    The limit of open file descriptors that can be opened per process.  Recorded
-    once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.OtherProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of other various utility processes (nacl, gpu, sandbox, zygote,
-    utility).  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PepperFlashPlugin" units="KB">
-  <owner>thestig@chromium.org</owner>
-  <summary>
-    The private working set used by each Pepper Flash plugin process. Each
-    plugin process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PepperPlugin" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each Pepper plugin process.  Each plugin
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginBroker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each Pepper plugin broker process.  Each
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginBrokerProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of Pepper plugin broker processes, recorded once per metrics
-    services (UMA) update.  See MetricsReportingScheduler for details.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active Pepper plugin processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Plugin" units="KB">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each plugin process.  Each plugin process
-    provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PluginProcessCount" units="processes">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active plugin processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PressureLevel" enum="MemoryPressureLevel">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The memory pressure level, which is recorded periodically. This shows the
-    cumulative number of seconds that systems spend in each of the memory
-    pressure states.
-  </summary>
-</histogram>
-
-<histogram name="Memory.PressureLevelChanges" enum="MemoryPressureLevelChanges">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The number of pressure level state changes for each possible pairwise state
-    change.
-  </summary>
-</histogram>
-
-<histogram name="Memory.ProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of all active processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.ProcessLimit">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>The current process limit.  Recorded once per UMA ping.</summary>
-</histogram>
-
-<histogram name="Memory.Renderer" units="KB">
-  <obsolete>
-    Deprecated 06/2016 Replaced with Memory.Renderer.Large2.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each renderer process.  Each renderer
-    process provides one sample.  Recorded once per UMA ping. TODO(rkaplow):
-    This should be replaced with Memory.Renderer.Large2 in M54.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Renderer.Committed" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The total committed memory used by each renderer process.  Each renderer
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Renderer.EstimatedDroppableEncodedSize" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <summary>
-    The esitimated memory size which would be reduced when reusing disk cache is
-    implemented.  If it is 100% sure that the encoded data is in disk cache, the
-    same data in memory can be dropped to reduce memory usage.  This is
-    rencorded when an ImageResource is pruned.  See crbug/664437.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Renderer.Large2" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each renderer process.  Each renderer
-    process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.RendererAll" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>tasak@chromium.org</owner>
-  <summary>
-    The private working set used by each renderer process, including all
-    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
-    well as regular renderer processes.  Each renderer process provides one
-    sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.RendererAll.Committed" units="MB">
-  <owner>bashi@chromium.org</owner>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>tasak@chromium.org</owner>
-  <summary>
-    The total committed memory used by each renderer process, including all
-    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
-    well as regular renderer processes.  Each renderer process provides one
-    sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.RendererGrowthIn30Min" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Growth speed of the private working set used by each renderer process per 30
-    minutes.  The usage and growth speed is recorded at most every 30 minutes,
-    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
-    is normalized to a speed KB per 30 minutes.  Each renderer process provides
-    one sample.  Recorded once per UMA log unless this is the first time the UMA
-    log is recorded after startup of the renderer, 30 minutes have not passed
-    from the last recording of the renderer or the usage goes down. If the usage
-    goes down, the amount of the shrink will be recorded in the
-    Memory.RendererShrinkIn30Min histogram.
-  </summary>
-</histogram>
-
-<histogram name="Memory.RendererProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active renderer processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.RendererShrinkIn30Min" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Shrink speed of the private working set used by each renderer process per 30
-    minutes.  The usage and shrink speed is recorded at most every 30 minutes,
-    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
-    is normalized to a speed KB per 30 minutes.  Each renderer process provides
-    one sample.  Recorded once per UMA log unless this is the first time the UMA
-    log is recorded after startup of the renderer, 30 minutes have not passed
-    from the last recording of the renderer or the usage goes up. If the usage
-    goes up, the amount of the growth will be recorded in the
-    Memory.RendererGrowthIn30Min histogram.
-  </summary>
-</histogram>
-
-<histogram name="Memory.SandboxHelper" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each sandbox helper process.  Each sandbox
-    helper process provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.ShmemDir.AmountOfFreeSpace" units="MB">
-  <owner>reveman@chromium.org</owner>
-  <summary>
-    The amount of free space in temporary directory for shared memory files.
-    Recorded each time a new discardable memory manager instance is created.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailPageFile" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPageFile2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the maximum amount of memory the current
-    process can commit. This value is equal to or smaller than the system-wide
-    available commit value.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailPageFile2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the maximum amount of memory the current
-    process can commit. This value is equal to or smaller than the system-wide
-    available commit value.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailPhys" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPhys2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of physical memory currently
-    available. This is the amount of physical memory that can be immediately
-    reused without having to write its contents to disk first. It is the sum of
-    the size of the standby, free, and zero lists.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailPhys2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of physical memory currently
-    available. This is the amount of physical memory that can be immediately
-    reused without having to write its contents to disk first. It is the sum of
-    the size of the standby, free, and zero lists.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailVirtual" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailVirtual2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of unreserved and uncommitted
-    memory currently in the user-mode portion of the virtual address space of
-    the calling process.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.AvailVirtual2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of unreserved and uncommitted
-    memory currently in the user-mode portion of the virtual address space of
-    the calling process.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.MemoryLoad" units="%">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the approximate percentage of physical
-    memory that was in use (0 indicates no memory use and 100 indicates full
-    memory use).
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalPageFile" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPageFile2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the current committed memory limit for
-    the system or the current process, whichever is smaller.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalPageFile2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the current committed memory limit for
-    the system or the current process, whichever is smaller.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalPhys" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPhys2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of actual physical memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalPhys2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the amount of actual physical memory.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalVirtual" units="MB">
-  <obsolete>
-    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalVirtual2.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the size of the user-mode portion of the
-    virtual address space of the calling process. This value depends on the type
-    of process, the type of processor, and the configuration of the operating
-    system. For example, this value is approximately 2 GB for most 32-bit
-    processes on an x86 processor and approximately 3 GB for 32-bit processes
-    that are large address aware running on a system with 4-gigabyte tuning
-    enabled.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Stats.Win.TotalVirtual2" units="MB">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Windows-only metric that represents the size of the user-mode portion of the
-    virtual address space of the calling process. This value depends on the type
-    of process, the type of processor, and the configuration of the operating
-    system. For example, this value is approximately 2 GB for most 32-bit
-    processes on an x86 processor and approximately 3 GB for 32-bit processes
-    that are large address aware running on a system with 4-gigabyte tuning
-    enabled.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Browser" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by the browser process.  Recorded once per UMA ping if the
-    system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Chrome" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each chrome:// renderer process.  Each process provides one
-    sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.CompressedDataSize" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The amount of memory that swap was compressed into. Recorded once per UMA
-    ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.CompressionRatio">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The ratio of swapped data original size to compressed size. Recorded once
-    per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Extension" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each extension process.  Each process provides one sample.
-    Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Gpu" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by the GPU process.  Recorded once per UMA ping if the system
-    has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.HaveSwapped" enum="BooleanSuccess">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Indicates that the system has swapped memory out at least once since boot.
-    Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.MemUsedTotal" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The amount of memory that is used by swap, including bookkeeping.  Recorded
-    once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NativeClient" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each Native Client loader process.  Each process provides
-    one sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NativeClientBroker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each Native Client broker process.  Each process provides
-    one sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NumReads">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The number of reads from swap.  Recorded once per UMA ping  if the system
-    has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NumWrites">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The number of writes to swap.  Recorded once per UMA ping if the system has
-    swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.OriginalDataSize" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The amount of memory that was swapped out.  Recorded once per UMA ping if
-    the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.PepperPlugin" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each Pepper plugin process.  Each plugin process provides
-    one sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.PepperPluginBroker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each Pepper plugin broker process.  Each process provides
-    one sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Plugin" units="KB">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each plugin process.  Each plugin process provides one
-    sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Renderer" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each renderer process.  Each renderer process provides one
-    sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.SandboxHelper" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each sandbox helper process.  Each sandbox helper process
-    provides one sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Total" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The sum of all processes' swap. Recorded once per UMA ping if the system has
-    swapped. See Memory.Swap.Total2 for the same metric with higher precision
-    bucketing.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Total2" units="MiB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The sum of all processes' swap. Recorded once per UMA ping if the system has
-    swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Utility" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each utility process.  Each utility process provides one
-    sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Worker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by each worker process.  Each worker process provides one
-    sample.  Recorded once per UMA ping if the system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Zygote" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The swap used by the zygote process.  Recorded once per UMA ping if the
-    system has swapped.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Total" units="MB">
-  <obsolete>
-    Deprecated 09/2016. Replaced by Memory.Total2.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The sum of all processes. This is not aware of shared memory so it is just a
-    rough estimate. Recorded once per UMA ping. See Memory.Total2 for the same
-    metric with higher precision bucketing.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Total2" units="MiB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The sum of all processes. This is not aware of shared memory so it is just a
-    rough estimate. Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Utility" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each utility process.  Each utility process
-    provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Worker" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by each worker process.  Each worker process
-    provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.WorkerProcessCount" units="processes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The count of active worker processes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="Memory.Zygote" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    The private working set used by the zygote process.  Each zygote process
-    provides one sample.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.DeviceMemoryClass">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Value of getMemoryClass() recorded once upon startup. This is an integer,
-    device-specific constant correlated with the amount of memory available on
-    Android device.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Reasons behind evictions of individual tabs, recorded upon each tab
-    eviction.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.LowMemoryLoadedTabCount">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of loaded (memory-resident) tabs when LowMemory notification is
-    delivered.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Time between two consecutive LowMemory notification in one foreground
-    session.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Whether Chrome is running in low ram mode. This histogram is reported on
-    every upload by Android devices. A device is considered low-RAM if it has
-    512MiB of RAM or lower (see SysUtils.detectLowEndDevice()).
-
-    Note: The low-RAM determination has changed in M-49, it used to be given
-    directly by the Android OS.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.NotificationBackground"
-    enum="AndroidMemoryNotificationBackground">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Memory notifications delivered through system callbacks to Chrome while in
-    the background.
-  </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.NotificationForeground"
-    enum="AndroidMemoryNotificationForeground">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@google.com</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Memory notifications delivered through system callbacks to Chrome while in
-    the foreground - we count LowMemory notification vs particular levels of
-    TrimMemory foreground notification.
-  </summary>
-</histogram>
-
-<histogram name="MemoryPurgeController.ReclaimedPartitionAllocInactiveTab"
-    units="KB">
-  <owner>bashi@chromium.org</owner>
-  <summary>The amount of reclaimed memory after a tab became inactive.</summary>
-</histogram>
-
-<histogram name="MemoryWarning.EvictedTabTimeSinceActive" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    [iOS] When the OS sends a memory warning and the app evicts a tab, this
-    histogram records the time since the evicted tab was active.
-  </summary>
-</histogram>
-
-<histogram name="MemoryWarning.ProtectedTabTimeSinceActive" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    [iOS] When the OS sends a memory warning and the app protects a tab, this
-    histogram records the time since the protected tab was active.
-  </summary>
-</histogram>
-
-<histogram name="Mist.SwitchResult" enum="MistSwitchResult">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The result (e.g. success or the type of failure) of a modem interface switch
-    operation performed by mist on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Mobile.SystemNotification.Blocked"
-    enum="SystemNotificationType">
-  <owner>dtrainor@chromium.org</owner>
-  <summary>
-    Android: Represents the number of system notifications that were blocked and
-    could not be shown by type.
-  </summary>
-</histogram>
-
-<histogram name="Mobile.SystemNotification.BlockedAfterShown"
-    enum="SystemNotificationType">
-  <owner>dtrainor@chromium.org</owner>
-  <summary>
-    Android: Represents the type of notification that was last shown before the
-    user disabled notification permissions on Chrome.  This is only logged the
-    first time we attempt to show a notification and fail.
-  </summary>
-</histogram>
-
-<histogram name="Mobile.SystemNotification.Shown" enum="SystemNotificationType">
-  <owner>dtrainor@chromium.org</owner>
-  <summary>
-    Android: Represents the number of system notifications that will be
-    successfully shown to the user by type.
-  </summary>
-</histogram>
-
-<histogram name="MobileDownload.BytesDownloaded" units="KB">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the total data downloaded by completion status.
-  </summary>
-</histogram>
-
-<histogram base="true" name="MobileDownload.BytesWasted.ChromeNetworkStack"
-    units="KB">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the total data wasted during download due to resumptions.
-  </summary>
-</histogram>
-
-<histogram name="MobileDownload.CancelReason" enum="MobileDownloadCancelReason">
-  <owner>qinmin@chromium.org</owner>
-  <summary>Android: Records the reason that a download is canceled.</summary>
-</histogram>
-
-<histogram name="MobileDownload.DownloadResumption"
-    enum="MobileDownloadResumption">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records user interaction on the download resumption button.
-  </summary>
-</histogram>
-
-<histogram name="MobileDownload.DownloadTime" units="ms">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the total time for a download by completion status.
-  </summary>
-</histogram>
-
-<histogram name="MobileDownload.InterceptFailureReason"
-    enum="MobileDownloadInterceptFailureReason">
-  <obsolete>
-    Deprecated 09/2016 in Issue 647755 with all downloads going through Chrome.
-  </obsolete>
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the reason that Chrome fails to intercept a download and
-    pass it to the Android DownloadManager.
-  </summary>
-</histogram>
-
-<histogram name="MobileDownload.InterruptionsCount">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the total interruptions for a download by completion
-    status.
-  </summary>
-</histogram>
-
-<histogram name="MobileFre.Progress" enum="MobileFreProgress">
-  <owner>gogerald@chromium.org</owner>
-  <summary>
-    Android: Records which states of the &quot;first run experience&quot; have
-    been reached. Each bucket represents a state and recorded everytime the
-    state changed.
-  </summary>
-</histogram>
-
-<histogram name="MobileFre.SignInChoice" enum="MobileFreSignInChoice">
-  <owner>aruslan@chromium.org</owner>
-  <summary>
-    Android: How the user left the sign-in part of the &quot;first run
-    experience&quot; activity (M-38+).
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.DurationAfterPotraitRotation" units="ms">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the duration that a fullscreen video is played after device
-    rotates from portrait to landscape mode for the first time, and before it
-    exits fullscreen. If there is no device rotation or if the video starts with
-    landscape mode, it is not recorded. If there are mutiple rotations between
-    portrait and landscape mode, only one record is emitted and it is equal to
-    the time period from the first rotation to the moment when the video exits
-    fullscreen.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.LandscapeDuration" units="ms">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the duration that a fullscreen video is played in landscape
-    mode. If a video starts playing in landscape mode, and then it is switched
-    back and forth between landscape and portrait mode, only the time period
-    before the first switch is accounted. If a video starts playing in portrait
-    mode, it is not recorded.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.LandscapeRotation" enum="BooleanEnabled">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records whether a fullscreen video is switched from landscape to
-    portrait mode at any point during playback.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.OrientationPortrait"
-    enum="BooleanEnabled">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the device orientation when a video enters fullscreen. The
-    value is true if device orientation is portrait, or false otherwise. The
-    video doesn't necessarily needs to be in a playing state.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.PortraitDuration" units="ms">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records the duration that a fullscreen video is played in portrait
-    mode. If a video starts playing in portrait mode, and then it is switched
-    back and forth between landscape and portrait mode, only the time period
-    before the first switch is accounted. If a video starts playing in landscape
-    mode, it is not recorded.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.PortraitRotation" enum="BooleanEnabled">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records whether a fullscreen video is switched from portrait to
-    landscape mode at any point during playback.
-  </summary>
-</histogram>
-
-<histogram name="MobileFullscreenVideo.VideoPortrait" enum="BooleanEnabled">
-  <owner>qinmin@chromium.org</owner>
-  <summary>
-    Android: Records whether a video has a larger height than width when it
-    enters the fullscreen mode.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Android: Records the first action the user does within 10s of starting
-    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
-    starting intent is of type MAIN.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.MobileMultiWindowInstances">
-  <owner>dtrainor@chromium.org</owner>
-  <summary>
-    Android: Number of instances of Chrome currently open during a MultiWindow
-    session.  Emitted every time Chrome is paused.  Only emitted on Android
-    MultiWindow devices.
-
-    A MultiWindow session is any period of time that Chrome was not used in a
-    full screen mode but together with another Activity that is visible at the
-    same time. This is only supported in a few Android models.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.MobileMultiWindowSession" units="%">
-  <owner>miguelg@chromium.org</owner>
-  <summary>
-    Android: percent of the screen available for Chrome during a multi-window
-    session. Emitted every time chrome is paused. Only emitted on Android
-    MultiWindow devices.
-
-    A multiwindow session is any period of time that Chrome was not used in full
-    screen mode but together with some other application that is visible at the
-    same time. This is only supported in a few Android models.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.NonMainIntentAction" enum="MobileStartingAction">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Android: Records the first action the user does within 10s of starting
-    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
-    starting intent is not of type MAIN, e.g. VIEW, etc.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.TimeSinceLastUse" units="minutes">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The time since last use until Chrome is launched from the home
-    screen. This is measured from the time the last tab is closed until a Main
-    intent is received. Has a minute level precision for first 10 minutes
-    increasing exponentially till 30 days.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.ToolbarFirstDrawTime" units="ms">
-  <owner>yusufo@chromium.org</owner>
-  <summary>
-    Android: The time it takes from launch to the completion of first draw for
-    Toolbar. This excludes activity creation time spent in framework.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.ToolbarFirstFocusTime" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Android: The time it takes from launch to the first time the user focuses
-    the omnibox if the user does so within first 30s of the launch. This
-    excludes activity creation time spent in framework.
-  </summary>
-</histogram>
-
-<histogram name="MobileStartup.ToolbarInflationTime" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    Android: The time spent performing toolbar layout inflation.
-  </summary>
-</histogram>
-
-<histogram name="ModuleIntegrityVerification.BytesModified" units="bytes">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Represents the amount of bytes in a module that are different on disk and in
-    memory. Logged when the ModuleIntegrityVerifier determines that a module is
-    different on disk and in memory after being triggered by an incident.
-  </summary>
-</histogram>
-
-<histogram name="ModuleIntegrityVerification.Difference" units="bytes">
-  <obsolete>
-    Deprecated and removed from code as of 05/2015.
-  </obsolete>
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Represents the difference in bytes deemed modified by the two
-    ModuleIntegrityVerifier code paths. The suffix indicates which path had a
-    higher value. Logged when the ModuleIntegrityVerifier determines that a
-    module is different on disk and in memory after being triggered by an
-    incident and the reported byte count for both methods is different.
-  </summary>
-</histogram>
-
-<histogram name="ModuleIntegrityVerification.RelocationsUnordered"
-    enum="ModuleIndex">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Logged when the relocations in a module are not ordered causing the module
-    verification to abort.
-  </summary>
-</histogram>
-
-<histogram name="ModuleIntegrityVerification.RelocationsUnorderedModuleIndex">
-  <obsolete>
-    Deprecated 04/2015; replaced by
-    ModuleIntegrityVerification.RelocationsUnordered.
-  </obsolete>
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Logged when the relocations in a module are not ordered causing the module
-    verification to abort. The value is the index of the affected module.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.MachPortRelay.BrokerError"
-    enum="MojoMachPortRelayBrokerError">
-  <owner>amistry@chromium.org</owner>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Errors that the broker process encounters while trying to send or receive
-    Mach ports from a child process.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.MachPortRelay.ChildError"
-    enum="MojoMachPortRelayChildError">
-  <owner>amistry@chromium.org</owner>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Errors that a child process encounters while trying to receive Mach ports
-    from the broker process.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.Shell.ChildConnectionTime" units="ms">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    Measures the time it takes for a new child process to receive an
-    initialization request from the Mojo shell. This is precisely the duration
-    of the MojoShellConnectionImpl::BindToMessagePipe() call in ChildThreadImpl.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.System.GetParentPlatformHandleSyncTime" units="ms">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    Measures the time it takes for a child to receive its parent platform handle
-    synchronously from the broker on startup. This only applies to the subset of
-    platforms on which the sync broker is used.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.System.MessagesAcceptedPerEvent">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    Number of internal Mojo system messages processed synchronously during a
-    single execution of NodeController::AcceptIncomingMessages(). This is called
-    any time an event requires internal Mojo system messages to be pumped.
-    Values below 4 are no longer logged.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.System.Node.ConnectedPeers">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    Number of connected peer nodes tracked by a node. This is emitted any time a
-    peer is added to or dropped from a node.
-  </summary>
-</histogram>
-
-<histogram name="Mojo.System.Node.PendingChildren">
-  <owner>rockot@chromium.org</owner>
-  <summary>
-    Number of connected pending child node connections tracked by a node. This
-    is emitted any time a parent-child node connection is initiated or dropped.
-  </summary>
-</histogram>
-
-<histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks mouse sensitivity setting changes by the user. This replaces the old
-    Mouse.Sensitivity.Changed metric.
-  </summary>
-</histogram>
-
-<histogram name="Mouse.PointerSensitivity.Started" enum="PointerSensitivity">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks mouse sensitivity setting on startup. This replaces the old
-    Mouse.Sensitivity.Started metric.
-  </summary>
-</histogram>
-
-<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity">
-  <obsolete>
-    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Tracks mouse sensitivity setting.</summary>
-</histogram>
-
-<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity">
-  <obsolete>
-    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Started.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Tracks mouse sensitivity setting on startup.</summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user mousedown-ed a link and when
-    the user clicked a link.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDownFollowedByClick"
-    enum="MouseEventFollowedByClick">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For each click handled by an HTML anchor tag link, whether Blink saw a
-    mousedown event preceding it.  This is only measured for clicks handled by
-    the anchor tag's default click event handler.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDowns">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of mousedown events detected at HTML anchor-tag links' default
-    event handler.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user mouseover-ed a link and when
-    the user clicked a link.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user mouseover-ed a link and when
-    the user mouseout-ed a link without click.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOvers">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of mouseover events detected at HTML anchor-tag links' default
-    event handler.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.PreTapEventsFollowedByClick"
-    enum="PreTapEvents">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The tap gesture events detected before click at HTML anchor-tag links'
-    default event handler.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time elapsed between when the user tapdown-ed a link and when
-    the user clicked a link.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapDowns">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of gesturetapdown events detected at HTML anchor-tag links'
-    default event handler.
-  </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapUnconfirmeds">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of gesturetapunconfirmed events detected at HTML anchor-tag
-    links' default event handler.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.ChildProcessLaunchFirst">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    The time it takes to spawn the first child subprocess (including sandbox
-    init).
-  </summary>
-</histogram>
-
-<histogram name="MPArch.ChildProcessLaunchSubsequent">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    The time it takes to spawn child sub processes not counting the first one.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.IIR_InputEventDelta" units="ms">
-  <obsolete>
-    Deprecated 08/2016 due to lack of use (Histogram Eraser).
-  </obsolete>
-  <owner>rvargas@chromium.org</owner>
-  <summary>
-    The time spent waiting for the renderer to acknowledge an input event.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RendererLaunchFirst">
-  <obsolete>
-    Deprecated 2/2013, renamed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time it takes to spawn the first renderer subprocess (including sandbox
-    init).
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RendererLaunchSubsequent">
-  <obsolete>
-    Deprecated 2/2013, renamed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time it takes to spawn renderer sub processes not counting the first
-    one.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RPHCountPerLoad">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    The number of RenderProcessHosts (i.e. renderer processes) present when each
-    load completes. This is basically the average number of sub-processes over
-    time. See also Tabs.TabCountPerLoad.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RWH_InputEventDelta" units="ms">
-  <obsolete>
-    renamed MPArch.IIR_InputEventDelta.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time spent waiting for the renderer to acknowledge an input event.
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RWH_OnMsgPaintRect" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time spent inside RenderWidgetHost::OnMsgPaintRect.</summary>
-</histogram>
-
-<histogram name="MPArch.RWH_OnMsgScrollRect" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time spent inside RenderWidgetHost::OnMsgScrollRect.</summary>
-</histogram>
-
-<histogram name="MPArch.RWH_OnMsgUpdateRect">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="MPArch.RWH_RepaintDelta">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="MPArch.RWH_TabSwitchPaintDuration" units="ms">
-  <owner>jbauman@chromium.org</owner>
-  <summary>
-    Time from tab switch requested to tab appearing on screen (Aura and Mac
-    only).
-  </summary>
-</histogram>
-
-<histogram name="MPArch.RWHH_WhiteoutDuration" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time that the user sees a blank white page after switching to a
-    different tab, while the RenderWidgetHost receives data to paint from the
-    renderer process.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.DiscardedTabsPerUser">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    The relation of discarded tabs vs. the amount of simultaneous users. The
-    counts are the number of discards and the buckets are the number of users.
-    Since the count values are absolute numbers, they need to be normalized
-    before use - so divide the counts by the percentage of users per session
-    found under 'MultiProfile.UsersPerSessionIncremental'.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    The session counter for different multi profile modes which gets stored once
-    per session at the beginning of the session.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.SigninUserUIPath"
-    enum="MultiProfileSigninUserAction">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    Count the number of times each UI path is taken for signing into a new
-    account in a Chrome OS multiprofile session. UI paths include the system
-    tray and the user account switcher on the browser frame.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.SwitchActiveUserUIPath"
-    enum="MultiProfileSwitchActiveUserAction">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    Count the number of times each UI path is taken for switching the active
-    account in a Chrome OS multiprofile session. UI paths include the system
-    tray and the keyboard shortcut.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.TeleportWindow"
-    enum="MultiProfileTeleportWindowAction">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    Counts the number of window teleportations when using separated desktop
-    mode.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.TeleportWindowType"
-    enum="MultiProfileTeleportWindowType">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    Counts the number of teleported windows by types in separated desktop mode.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.UsersPerSession">
-  <obsolete>
-    Deprecated 3/2014, renamed to MultiProfile.UsersPerSessionIncremental.
-  </obsolete>
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    The number of users simultaneously signed into a multiprofile session on
-    Chrome OS. This is recorded upon session end.
-  </summary>
-</histogram>
-
-<histogram name="MultiProfile.UsersPerSessionIncremental">
-  <owner>skuhne@chromium.org</owner>
-  <summary>
-    The number of users simultaneously signed into a multiprofile session on
-    Chrome OS. This is recorded whenever a user gets added to the session. To
-    get the correct count, all following counts must be subtracted. Example: If
-    100 single user, 20 two user and 5 three user sessions, there were
-    100-20-5=75 single user sessions, 100-80=20 dual user sessions and so on.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Client.Helper.InitState" enum="NaClHelperStatus">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    When the browser started, what happened with the NaCl helper process?
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Client.Helper.StateOnFork" enum="NaClHelperStatus">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    When a NaCl application process was created, what had happened with the NaCl
-    helper process when the browser was started?
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Client.OSArch" enum="NaClOSArchEnum">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The OS/Architecture of a nexe that was loaded.</summary>
-</histogram>
-
-<histogram name="NaCl.HttpStatusCodeClass.Manifest.InstalledApp"
-    enum="NaClHttpStatusCodeClass">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The status code returned when trying to load a manifest inside an installed
-    app.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.HttpStatusCodeClass.Manifest.NotInstalledApp"
-    enum="NaClHttpStatusCodeClass">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The status code returned when trying to load a manifest from a source other
-    than an installed app.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.HttpStatusCodeClass.Nexe.InstalledApp"
-    enum="NaClHttpStatusCodeClass">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The status code returned when trying to load a NaCl executable inside an
-    installed app.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp"
-    enum="NaClHttpStatusCodeClass">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The status code returned when trying to load a NaCl executable from a source
-    other than an installed app.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.Plugin" enum="NaClPluginErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The error code returned by NaCl's Chrome plugin.</summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.Plugin.InstalledApp"
-    enum="NaClPluginErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The error code returned by NaCl's Chrome plugin, but only for installed
-    apps.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.Plugin.NotInstalledApp"
-    enum="NaClPluginErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The error code returned by NaCl's Chrome plugin, but excluding installed
-    apps.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.SelLdr" enum="NaClSelLdrErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The error code returned by NaCl's sel_ldr.</summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.SelLdr.InstalledApp"
-    enum="NaClSelLdrErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The error code returned by NaCl's sel_ldr, but only for installed apps.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.LoadStatus.SelLdr.NotInstalledApp"
-    enum="NaClSelLdrErrorCode">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The error code returned by NaCl's sel_ldr, but excluding installed apps.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Manifest.IsDataURI" enum="NaClManifestType">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    Was the manifest specified as a data URI rather than a .nmf file?
-  </summary>
-</histogram>
-
-<histogram name="NaCl.ManifestDownloadTime" units="ms">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to download the manifset file for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.ModuleUptime.Crash" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The time a NaCl module ran before it crashed.</summary>
-</histogram>
-
-<histogram name="NaCl.ModuleUptime.Normal" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The time a NaCl module ran without crashing, at shutdown.</summary>
-</histogram>
-
-<histogram name="NaCl.NexeDownloadTime" units="ms">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to download the main .nexe for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.NexeSize" units="KB">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The size of the main .nexe file downloaded for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.NexeStartupTime" units="ms">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    proxied execution of the NaCl module begins. This is the general startup
-    overhead of running as a NaCl module vs a trusted PPAPI plugin.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.NexeStartupTimePerMB" units="milliseconds/MB">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    proxied execution of the NaCl module begins. This is the general startup
-    overhead of running as a NaCl module vs a trusted PPAPI plugin.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Options.PNaCl.OptLevel" enum="PNaClOptionsOptLevelEnum">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The optimization level set for the initial Portable Native Client
-    translation from bitcode to native code.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.OSArch" enum="NaClOSArchEnum">
-  <obsolete>
-    Deprecated 6/2011, renamed.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The OS/Architecture of a nexe that was loaded.</summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClCache.IsHit" enum="PNaClTranslationCacheEnum">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    Did the Portable Native Client translation cache find an executable
-    translated from bitcode?
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec" units="KB/s">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The rate for compiling a Portable Native Client bitcode file to an object
-    file in Kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.CompileTime" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to compile a Portable Native Client bitcode file to an
-    object file.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.LinkTime" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to link a Portable Native Client generated object file into
-    a Native Client executable.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to load and validate the Portable Native Client compiler.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.LoadLinker" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to load and validate the Portable Native Client linker.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"
-    units="%">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The percentage of a Portable Native Client application that is compiled by
-    the time the application is fully downloaded (compile and download happen in
-    parallel).
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec" units="KB/s">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The rate for completely translating a Portable Native Client bitcode file
-    into a Native Client executable and caching the result in Kilobytes per
-    second.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The total time it took to completely translate a Portable Native Client
-    bitcode file into a Native Client executable, and cache the result.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.ShutdownTime.Total" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The time it took the NaCl module to shut down.</summary>
-</histogram>
-
-<histogram name="NaCl.Perf.Size.Manifest" units="KB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The size of the manifest file.</summary>
-</histogram>
-
-<histogram name="NaCl.Perf.Size.Nexe" units="KB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The size of the main .nexe file downloaded for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.Size.Pexe" units="KB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The size of the main .pexe bitcode file downloaded for a Portable Native
-    Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.Size.PexeNexeSizePct" units="%">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The size of the main .pexe bitcode file divided by the size of the .nexe
-    that is the result of translating the bitcode file, times 100.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.Size.PNaClTranslatedNexe" units="KB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The size of the main .nexe file that is the result of translating a Portable
-    Native Client .pexe bitcode file.  This reflects the amount of cache
-    consumed.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.LoadModule" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>The time it took to load the NaCl module into sel_ldr.</summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.LoadModulePerMB" units="milliseconds/MB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to load the NaCl module into sel_ldr.  Normalized by the
-    size of the .nexe, in megabytes.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.ManifestDownload" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to download the manifset file for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.NaClOverhead" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    proxied execution of the NaCl module begins. This is the general startup
-    overhead of running as a NaCl module vs a trusted PPAPI plugin.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.NaClOverheadPerMB"
-    units="milliseconds/MB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    proxied execution of the NaCl module begins. This is the general startup
-    overhead of running as a NaCl module vs a trusted PPAPI plugin.  Normalized
-    by the size of the .nexe, in megabytes.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.NexeDownload" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to download the main .nexe for a Native Client module.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.NexeDownloadPerMB"
-    units="milliseconds/MB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took to download the main .nexe for a Native Client module.
-    Normalized by the size of the .nexe, in megabytes.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.Total" units="ms">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    the NaCl module is ready to be used.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Perf.StartupTime.TotalPerMB" units="milliseconds/MB">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The time it took between the Native Client plugin initialization and when
-    the NaCl module is ready to be used.  Normalized by the size of the .nexe,
-    in megabytes.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.Startups" enum="NaClStartupEnum">
-  <obsolete>
-    Deprecated 5/2011, data is duplicated by NaCl.NexeStartupTime, and
-    normalizing to 'tab opens' is unusual.
-  </obsolete>
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    The number of times that Native Client has been started by loading a .nexe
-    compared to the number of times that a tab has been opened.
-  </summary>
-</histogram>
-
-<histogram name="NaCl.ValidationCache.Query" enum="NaClValidationCacheEnum">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    Did a validation cache query find a previously known validation result?
-  </summary>
-</histogram>
-
-<histogram name="NaCl.ValidationCache.Set" enum="NaClValidationCacheEnum">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <summary>
-    Was the validation cache updated with a new validation result?
-  </summary>
-</histogram>
-
-<histogram name="Navigation.ClearSiteData.Duration" units="ms">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    Recorded when a navigation is deferred while clearing site data. Indicates
-    how much time the clearing took.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.ClearSiteData.Parameters"
-    enum="ClearSiteDataParameters">
-  <owner>msramek@chromium.org</owner>
-  <summary>
-    The parameters of the Clear-Site-Data header. Recorded when the header is
-    successfully parsed.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.DeferredDocumentLoading.StatesV1"
-    enum="DocumentStateForDeferredLoading">
-  <obsolete>
-    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV2.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Why and if cross-origin documents would be loaded in a world where we defer
-    loading until they are visible.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.DeferredDocumentLoading.StatesV2"
-    enum="DocumentStateForDeferredLoadingV2">
-  <obsolete>
-    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV3.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Why and if cross-origin documents would be loaded if we were to defer
-    loading as long as possible.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.DeferredDocumentLoading.StatesV3"
-    enum="DocumentStateForDeferredLoadingV3">
-  <obsolete>
-    Deprecated 3/2017 in favor of Navigation.DeferredDocumentLoading.StatesV4.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Why and if cross-origin documents would be loaded if we were to defer
-    loading as long as possible. Difference from V2: frames positioned both
-    above and to the left of the page have their own bucket and are no longer
-    counted in the &quot;above&quot; bucket.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.DeferredDocumentLoading.StatesV4"
-    enum="DocumentStateForDeferredLoadingV4">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Why and if cross-origin documents would be loaded if we were to defer
-    loading as long as possible. Changes from V3: replace detailed reasons with
-    summaries for four strategies. E.g. any document that would load under a
-    strategy of loading when a frame is two screens away is logged to the
-    WouldLoad2Screens AND WouldLoad3Screens bucket. We only record documents
-    below the current viewport, not to the right of it.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.EngagementTime.HTTP" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The amount of time that an HTTP page was in the foreground. Recorded on
-    every page close/transition.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.EngagementTime.HTTPS" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The amount of time that an HTTPS page was in the foreground. Recorded on
-    every page close/transition.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.EngagementTime.Ratio" units="%">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The percentage of time that HTTPS pages were in the foreground, as compared
-    to total foreground time. Recorded whenever user metrics are uploaded.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.FrameHasEmbeddedCredentials" enum="Boolean">
-  <owner>palmer@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Whether the navigation was to a URL that had embedded credentials.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.IsMobileOptimized" enum="BooleanIsMobileOptimized">
-  <owner>cjhopman@chromium.org</owner>
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    Signifies whether a succesfully finished page load for the main frame
-    content width fits within the device width and/or has a fixed page scale.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean">
-  <owner>palmer@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Whether the main-frame navigation was to a URL that had embedded
-    credentials.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.MainFrameScheme" enum="NavigationScheme">
-  <owner>cbentzel@chromium.org</owner>
-  <owner>davidben@chromium.org</owner>
-  <summary>The scheme of the URL for each main-frame navigation.</summary>
-</histogram>
-
-<histogram name="Navigation.MainFrameScheme.DataUrl.MimeType"
-    enum="DataUrlMimeType">
-  <owner>meacer@chromium.org</owner>
-  <summary>
-    The mime type of the data: URL for each main-frame navigation. This only
-    contains mime types that can run scripts.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.MainFrameSchemeDifferentPage"
-    enum="NavigationScheme">
-  <owner>cbentzel@chromium.org</owner>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The scheme of the URL for each main-frame navigation that goes to a
-    different page. Transitions like fragment change or history.pushState are
-    excluded.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.OnBeforeUnloadOverheadTime" units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Overhead time spent handling the OnBeforeUnload event from the browser
-    standpoint. More precisely, it is the total time between dispatch and
-    acknowledgment of the BeforeUnload event on the browser side, minus the
-    actual time spent executing the BeforeUnload handlers on the renderer side.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.RedirectChainSize" units="characters">
-  <owner>haitaol@chromium.org</owner>
-  <owner>donnd@chromium.org</owner>
-  <summary>
-    Total length of the redirect URL strings in navigation entry. Logged when
-    entry is committed.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Reload.ReloadMainResourceToReloadDuration"
-    units="ms">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>
-    Reported when a user triggers reload without any other navigations after the
-    previous reload in the same page, and the previous reload variant was
-    RELOAD_MAIN_RESOURCE. Duration time between two reloads is reported.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Reload.ReloadToReloadDuration" units="ms">
-  <owner>toyoshim@chromium.org</owner>
-  <summary>
-    Reported when a user triggers reload without any other navigations after the
-    previous reload in the same page. Duration time between two reloads is
-    reported.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Scheduled.MaybeCausedAbort"
-    enum="ScheduledNavigationType">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    window.location and other scheduled navigation changes can cause the current
-    provisional load to be aborted. Many times these are initiated without user
-    gesture. This histogram logs counts of the various aborters.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Scheduled.MaybeCausedAbort.Time" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    window.location and other scheduled navigation changes can cause the current
-    provisional load to be aborted. Many times these are initiated without user
-    gesture. This histogram logs the time between the aborted navigation start
-    and the scheduled navigation start, if the aborted navigation has a non-zero
-    navigationStart value.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme">
-  <owner>palmer@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The scheme of the URL for the first main-frame navigation per origin per
-    non-OffTheRecord session.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme">
-  <owner>palmer@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The scheme of the URL for the first main-frame navigation per origin per
-    OffTheRecord session.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Start.RendererBrowserDifference.Negative"
-    units="ms">
-  <obsolete>
-    Data collected and posted on issue 675833.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The difference between Now() in the renderer and browser_navigation_start
-    for browser-initiated navigations if the difference is negative. This value
-    should ideally only reflect the IPC time between the browser process and
-    renderer process, but in practice could be skewed by inter-process timing
-    errors. If the clocks used for TimeTicks are monotonic across processes, all
-    samples should fall into the Positive bucket.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.Start.RendererBrowserDifference.Positive"
-    units="ms">
-  <obsolete>
-    Data collected and posted on issue 675833.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The difference between Now() in the renderer and browser_navigation_start
-    for browser-initiated navigations if the difference is positive. This value
-    should ideally only reflect the IPC time between the browser process and
-    renderer process, but in practice could be skewed by inter-process timing
-    errors. If the clocks used for TimeTicks are monotonic across processes, all
-    samples should fall into the Positive bucket.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.TimeToCommit" units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time between the start of a browser-started navigation request in and its
-    commit.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.TimeToURLJobStart" units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time between the start of a browser-started navigation request and the
-    reception of a corresponding ResourceRequest in the network stack.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.UI_OnCommitProvisionalLoad.Intent" units="ms">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Time between receiving an Android Intent and the navigation commit.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.UI_OnCommitProvisionalLoad.Link" units="ms">
-  <owner>clamy@chromium.org</owner>
-  <summary>Time between clicking on a link and the navigation commit.</summary>
-</histogram>
-
-<histogram name="Navigation.UI_OnLoadComplete.Intent" units="ms">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Time between receiving an Android intent and the document load complete
-    event for a navigation in the main frame.
-  </summary>
-</histogram>
-
-<histogram name="Navigation.UI_OnLoadComplete.Link" units="ms">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Time between clicking on a link and the document load complete event for a
-    navigation in the main frame.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CellularConnectionSubtype" enum="ConnectionSubtype">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    The connection subtype of the network the client is connected to, when the
-    client is on a cellular connection. This histogram is logged once per UMA
-    record, if the user is on a cellular connection, at the time the record is
-    finalized.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOn2G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on a 2G connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOn3G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on a 3G connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOn4G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on a 4G connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change. This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOnBluetooth" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on a Bluetooth
-    connection, before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOnEthernet" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on an Ethernet
-    connection, before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOnNone" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen while the
-    NetworkChangeNotifier thought there was no network connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOnUnknown" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on an unknown connection
-    type, before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FastestRTTOnWifi" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time seen on a Wifi connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOn2G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to a 2G connection and receiving the first network
-    data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOn3G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to a 3G connection and receiving the first network
-    data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOn4G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to a 4G connection and receiving the first network
-    data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOnBluetooth" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to a Bluetooth connection and receiving the first
-    network data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOnEthernet" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to an Ethernet connection and receiving the first
-    network data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOnNone" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between disconnecting and receiving the first network data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOnUnknown" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to an unknown connection type and receiving the first
-    network data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.FirstReadOnWifi" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between switching to a Wifi connection and receiving the first network
-    data.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOn2G" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via a 2G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOn3G" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via a 3G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOn4G" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via a 4G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOnBluetooth" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via a Bluetooth connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOnEthernet" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via an Ethernet connection,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOnNone" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while the NetworkChangeNotifier thought there
-    was no network connection, before the NetworkChangeNotifier detected a
-    connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOnUnknown" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via an unknown connection type,
-    before the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.KBTransferedOnWifi" units="KB">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How much data was transfered while connected via a Wifi connection, before
-    the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOn2G" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on a 2G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOn3G" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on a 3G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOn4G" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on a 4G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOnBluetooth" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on a Bluetooth connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOnEthernet" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on an Ethernet connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOnNone" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen while the NetworkChangeNotifier
-    thought there was no network connection, before the NetworkChangeNotifier
-    detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOnUnknown" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on an unknown connection type, before
-    the NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.PeakKbpsOnWifi" units="Kbps">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Rough estimate of peak throughput seen on a Wifi connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOn2G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via a 2G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOn3G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via a 3G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOn4G" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via a 4G connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOnBluetooth" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via a Bluetooth connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOnEthernet" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via an Ethernet connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOnNone" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent disconnected, before the NetworkChangeNotifier detected a
-    connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOnUnknown" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via an unknown connection type, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.CM.TimeOnWifi" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long was spent connected via a Wifi connection, before the
-    NetworkChangeNotifier detected a connectivity change.
-
-    This metric is recorded when the NetworkChangeNotifier detects a
-    connectivity change.  This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NCN.ConnectionTypeChangeToIPAddressChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time from ConnectionTypeChanged message until IPAddressChanged message.
-  </summary>
-</histogram>
-
-<histogram name="NCN.DNSConfigChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>Time between DNS configuration change messages.</summary>
-</histogram>
-
-<histogram name="NCN.GetActiveNetworkInfoResult"
-    enum="NCNGetActiveNetworkInfoResult">
-  <owner>pauljensen@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the result of querying the network info of the current active
-    network. Useful for investigating how frequently the current network was
-    unblocked, and why it was not unblocked. See http://crbug.com/677365.
-  </summary>
-</histogram>
-
-<histogram name="NCN.GetConnectionTypeTime" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    How long does each call to NetworkChangeNotifier::GetConnectionType() take.
-  </summary>
-</histogram>
-
-<histogram name="NCN.getNetInfo1stSuccess"
-    enum="BooleanAvoidedNullPointerException">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    True if the first call to ConnectivityManager.getNetworkInfo(Network) did
-    not throw NullPointerException, false if it did. Useful for investigating
-    and avoiding unexpected exceptions, see http://crbug.com/592131.
-  </summary>
-</histogram>
-
-<histogram name="NCN.getNetInfo2ndSuccess"
-    enum="BooleanAvoidedNullPointerException">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Recorded after the first call to ConnectivityManager.getNetworkInfo(Network)
-    threw a NullPointerException. True if the second call to
-    ConnectivityManager.getNetworkInfo(Network) did not throw
-    NullPointerException, false if it did. Useful for investigating and avoiding
-    unexpected exceptions, see http://crbug.com/592131.
-  </summary>
-</histogram>
-
-<histogram name="NCN.getWifiInfo1stSuccess"
-    enum="BooleanAvoidedNullPointerException">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    True if the first call to WifiManager.getConnectionInfo() did not throw
-    NullPointerException, false if it did. Useful for investigating and avoiding
-    unexpected exceptions, see http://crbug.com/592131.
-  </summary>
-</histogram>
-
-<histogram name="NCN.getWifiInfo2ndSuccess"
-    enum="BooleanAvoidedNullPointerException">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Recorded after the first call to WifiManager.getConnectionInfo() threw a
-    NullPointerException. True if the second call to
-    ConnectivityManager.getNetworkInfo(Network) did not throw
-    NullPointerException, false if it did. Useful for investigating and avoiding
-    unexpected exceptions, see http://crbug.com/592131.
-  </summary>
-</histogram>
-
-<histogram name="NCN.IPAddressChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>Time between IP address change messages.</summary>
-</histogram>
-
-<histogram name="NCN.IPAddressChangeToConnectionTypeChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time from IPAddressChanged message until ConnectionTypeChanged message.
-  </summary>
-</histogram>
-
-<histogram name="NCN.NetworkOfflineChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between going online until we go offline change messages, using new
-    filtered signal.
-  </summary>
-</histogram>
-
-<histogram name="NCN.NetworkOnlineChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between going offline until we go online change messages, using new
-    filtered signal.
-  </summary>
-</histogram>
-
-<histogram name="NCN.NetworkOperatorMCCMNC">
-  <owner>bolian@chromium.org</owner>
-  <owner>bengr@google.com</owner>
-  <owner>marq@google.com</owner>
-  <summary>
-    The MCC (mobile country code) and MNC (mobile network code) of the network
-    operator when a new metrics log is created or when the network connection is
-    changed. A value of zero means a non-mobile network or the operator code is
-    unknown.
-  </summary>
-</histogram>
-
-<histogram name="NCN.OfflineChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between going online until we go offline change messages.
-  </summary>
-</histogram>
-
-<histogram name="NCN.OfflineDataRecv" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between when we thought we went offline and when we received some
-    network data (a URLRequest read completed).
-  </summary>
-</histogram>
-
-<histogram name="NCN.OfflineDataRecvAny5sBeforeOnline">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Count of how many times we received network data (a URLRequest read
-    completed) while offline when some data was received at most five seconds
-    before going online.
-  </summary>
-</histogram>
-
-<histogram name="NCN.OfflineDataRecvUntilOnline" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between when we received the last network data (a URLRequest read
-    completed) while offline and when we thought we went online.
-  </summary>
-</histogram>
-
-<histogram name="NCN.OfflinePolls">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Count of how many times we polled the online/offline status before detecting
-    an offline to online transition.
-  </summary>
-</histogram>
-
-<histogram name="NCN.OnlineChange" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between going offline until we go online change messages.
-  </summary>
-</histogram>
-
-<histogram name="NCN.PollingOfflineDataRecv" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Time between when we thought we went offline and when we received some
-    network data (a URLRequest read completed), while polling
-    NetworkChangeNotifier::GetConnectionType() still told us we were offline.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternateProtocolBrokenLocation"
-    enum="BrokenAlternateProtocolLocation">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Breakdown of the locations when SetBrokenAlternateProtocol is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternateProtocolUsage" enum="AlternateProtocolUsage">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Breakdown of how requests which could potentially make use of an alternate
-    protocol use or don't use the protocol.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternateProtocolUsage.1000Truncated"
-    enum="AlternateProtocolUsage">
-  <obsolete>
-    Deprecated 10/2014.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Breakdown of how requests which could potentially make use of an alternate
-    protocol use or don't use the protocol. Loaded data for 1000 servers and we
-    have persisted 1000 MRU servers.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternateProtocolUsage.200Truncated"
-    enum="AlternateProtocolUsage">
-  <obsolete>
-    Deprecated 10/2014.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Breakdown of how requests which could potentially make use of an alternate
-    protocol use or don't use the protocol. Loaded data for 200 servers and we
-    have persisted 1000 MRU servers.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternateServiceFailed" enum="NetErrorCodes">
-  <owner>tbansal@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Positive net error codes that failed alternative protocol requests end with.
-    Recorded only when an alternative job fails, and the main job succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternativeServiceServers.MoreOrEqualCacheEntries">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The difference between the size of alternative service mappings in cache and
-    preferences. This tracks zero or negative values (when the difference
-    between preferences size is less than or equal to memory cache size).
-    Positive values are tracked by
-    Net.AlternativeServiceServers.MorePrefsEntries.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternativeServiceServers.MorePrefsEntries">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The difference between the size of alternative service mappings in
-    preferences and cache. This tracks positive values (when the difference
-    between preferences size is greater than memory cache size). Non positive
-    values are tracked by Net.AlternativeServiceServers.MoreOrEqualCacheEntries.
-  </summary>
-</histogram>
-
-<histogram name="Net.AlternativeServiceTypeForRequest"
-    enum="AlternativeServiceType">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Information about the AlternativeService used for each request.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_PendingDataCount">
-  <obsolete>
-    Deprecated 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of unacknowledged ResourceMsg_DataReceived messages.  This message
-    is sent once per chunk of data read from the network.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull">
-  <obsolete>
-    Deprecated 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of unacknowledged ResourceMsg_DataReceived messages at the point
-    where we pause network loading.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_RedirectHopTime" units="ms">
-  <obsolete>
-    Data collection finished on 2015-03-31.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The time between the call of AsyncResourceHandler::OnRequestRedirected and
-    the FollowRedirect IPC message from ResourceHost, that is, the length of the
-    redirect browser-renderer-browser hop.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes">
-  <obsolete>
-    Deprecated 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The size of a SharedIOBuffer allocation.</summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes">
-  <obsolete>
-    Deprecated 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The number of bytes copied into a SharedIOBuffer.</summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage"
-    units="%">
-  <obsolete>
-    Deprecated 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The percentage of a SharedIOBuffer allocation that is actually used.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncRevalidation.ReadError" enum="NetErrorCodes">
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    Counts of error codes received while reading the body of an async
-    revalidation before getting a response. Only async revalidations that had a
-    read error are counted.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncRevalidation.ResponseError" enum="NetErrorCodes">
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    Counts of error codes received while performing an async revalidation before
-    getting a response. Only async revalidations that had in a response error
-    are counted.
-  </summary>
-</histogram>
-
-<histogram name="Net.AsyncRevalidation.Result" enum="AsyncRevalidationResult">
-  <owner>ricea@chromium.org</owner>
-  <summary>
-    The result of an async revalidation resulting from application of the
-    Cache-Control: stale-while-revalidate directive. All async revalidations are
-    counted.
-  </summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_basic" units="ms">
-  <obsolete>
-    Deprecated 01/2011 in https://crrev.com/70740
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time to generate a Basic HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_digest" units="ms">
-  <obsolete>
-    Deprecated 01/2011 in https://crrev.com/70740
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time to generate a Digest HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_negotiate" units="ms">
-  <obsolete>
-    Deprecated 01/2011 in https://crrev.com/70740
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time to generate a Negotiate (or SPNEGO) HTTP authentication token.
-  </summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_ntlm" units="ms">
-  <obsolete>
-    Deprecated 01/2011 in https://crrev.com/70740
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time to generate an NTLM HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.AutoReload.CountAtStop">
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Number of times auto-reload has been attempted before auto-reload stopped
-    without succeeding, either because the stop button was pressed or because
-    the renderer was destroyed.
-  </summary>
-</histogram>
-
-<histogram name="Net.AutoReload.CountAtSuccess">
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Number of times auto-reload had to attempt to reload a page before
-    succeeding.
-  </summary>
-</histogram>
-
-<histogram name="Net.AutoReload.ErrorAtFirstSuccess" enum="NetErrorCodes">
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Original error code that started an auto-reload which then succeeded on the
-    first attempt.
-  </summary>
-</histogram>
-
-<histogram name="Net.AutoReload.ErrorAtStop" enum="NetErrorCodes">
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Error code, if any, when auto-reload stopped without succeeding, either
-    because the stop button was pressed or because the renderer was destroyed.
-  </summary>
-</histogram>
-
-<histogram name="Net.AutoReload.ErrorAtSuccess" enum="NetErrorCodes">
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Original error code that started an auto-reload which then eventually
-    succeeded.
-  </summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.ReceivedBytes" units="bytes">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>Number of bytes received over this stream.</summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.SentBytes" units="bytes">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>Number of bytes sent over this stream.</summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.TimeToReadEnd" units="ms">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    How long it takes from starting the request to reading the end of the
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.TimeToReadStart" units="ms">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    How long it takes from starting the request to reading the start of the
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.TimeToSendEnd" units="ms">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    How long it takes from starting the request to when the last byte is sent.
-  </summary>
-</histogram>
-
-<histogram name="Net.BidirectionalStream.TimeToSendStart" units="ms">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    How long it takes from starting the request to when we can start sending
-    data.
-  </summary>
-</histogram>
-
-<histogram name="Net.CacheState.AllBytes">
-  <obsolete>
-    Part of a concluded experiment, 2016-08-02.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>Counts of response bytes by cache state.</summary>
-</histogram>
-
-<histogram name="Net.CacheState.AllRequests" enum="NetCacheState">
-  <obsolete>
-    Part of a concluded experiment, 2016-08-02.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    State of the cache for a request, delta-encoding eligible or otherwise.
-  </summary>
-</histogram>
-
-<histogram name="Net.CacheState.EncodeableBytes">
-  <obsolete>
-    Part of a concluded experiment, 2016-08-02.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Counts of response bytes by cache state for delta-encoding eligible
-    requests.
-  </summary>
-</histogram>
-
-<histogram name="Net.CacheState.EncodeableRequests" enum="NetCacheState">
-  <obsolete>
-    Part of a concluded experiment, 2016-08-02.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>State of the cache for a delta-encoding eligible request.</summary>
-</histogram>
-
-<histogram name="Net.CertCommonNameFallback" enum="BooleanCommonNameMatch">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether the certificate common name was used for matching the hostname,
-    instead of the subjectAlternativeName.
-
-    Measures results for all CAs (internal and publicly-trusted).
-  </summary>
-</histogram>
-
-<histogram name="Net.CertCommonNameFallbackPrivateCA"
-    enum="BooleanCommonNameMatch">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether the certificate common name was used for matching the hostname,
-    instead of the subjectAlternativeName.
-
-    Measures results ony for internal (non-publicly-trusted) CAs.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.AndroidAIAFetchError" enum="NetErrorCodes">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    The net error code returned after attempting an AIA fetch on Android.
-    Recorded once per intermediate that Chrome attempts to fetch via AIA on
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.IgnoreErrors" enum="BooleanEnabled">
-  <owner>martinkr@google.com</owner>
-  <summary>
-    Whether certificate validation was disabled because the
-    --ignore-certificate-errors switch was set on startup.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.SHA1.MainFrame" enum="SHA1Status">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether or not SHA-1 was present in a resource fetched for the main frame,
-    and if so, what its maximum validity period was.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.SHA1.Subresource" enum="SHA1Status">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether or not SHA-1 was present in a subresource fetch, and if so, what its
-    maximum validity period was.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRoot"
-    enum="Boolean">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    This histogram is recorded every time Chrome successfully verifies a
-    certificate that chains to a private root. A value of true indicates that
-    the certificate contains the TLS Feature Extension, and false indicates that
-    it doesn't.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRootHasOCSP"
-    enum="Boolean">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    This histogram is recorded every time Chrome successfully verifies a
-    certificate that chains to a private root and the certificate contains the
-    TLS Feature Extension. A value of true indicates that the connection had an
-    OCSP response stapled, and a value of false indicates that it did not.
-  </summary>
-</histogram>
-
-<histogram name="Net.Certificate.VerificationSuccessAfterAIAFetchingNeeded"
-    enum="BooleanSuccess">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Whether or not certificate verification was successful after attempting AIA
-    fetching on Android. Recorded once per certificate verification on Android
-    that resulted in an untrusted-root error without AIA fetching.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess">
-  <obsolete>
-    Renamed to Net.PublicKeyPinSuccess 28 Oct 2011.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    A validated certificate chain may be subject to additional
-    &quot;pinning&quot; requirements on a per-domain basis. This records the
-    fraction of successful matches between a certificate chain and a pin list.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.CanInclusionCheckSCT"
-    enum="SCTCanBeChecked">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    Whether an observed Signed Certificate Timestamp (SCT) can be checked for
-    inclusion. An SCT can be checked for inclusion if the client has a valid
-    Signed Tree Head (STH) and the STH currently known to the client was issued
-    24 hours after the timestamp in the SCT (24 hours being the typical Maximum
-    Merge Delay).
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.DnsQueryDuration" units="ms">
-  <owner>robpercival@chromium.org</owner>
-  <summary>
-    The time taken to obtain an inclusion proof from a Certificate Transparency
-    log over DNS. This includes the time taken to obtain the leaf index first.
-    Emitted at the end of an attempt.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.DnsQueryStatus"
-    enum="CertificateTransparencyDnsQueryStatus">
-  <owner>robpercival@chromium.org</owner>
-  <summary>
-    The status of each attempt to obtain an inclusion proof from a Certificate
-    Transparency log over DNS. This can consist of more than one DNS request.
-    Emitted at the end of an attempt.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.InclusionCheckResult"
-    enum="CTLogEntryInclusionCheckResult">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    The result of an inclusion check for a Certificate Transparency log entry
-    (composed of a TLS certificate observed together with Signed Certificate
-    Timestamps). Emitted once per (TLS certificate, Signed Certificate
-    Timestamp) pair observed and checked for inclusion (check results are
-    cached).
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.MainFrameValidSCTCount">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    Number of valid Signed Certificate Timestamps (SCTs) present for the
-    main-frame resource. Emitted every time a main-frame resource is fetched.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.PilotSTHAge" units="ms">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    Age of Pilot's Signed Tree Head, as observed by the client, in minutes.
-    Measuring the age of a particular log's Signed Tree Head will allow more
-    informed update frequency of the Component Updater component that provides
-    them. Emitted once for every STH update received by the component updater.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.SCTOrigin" enum="SCTOrigin">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    The origin breakdown of Signed Certificate Timestamps (SCTs). Emitted once
-    for every SCT when first validated, which means 0 or more times during every
-    SSL connection establishment.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.SCTsPerConnection">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    The number of Signed Certificate Timestamps (SCTs) that were available for
-    each SSL connection, including SCTs embedded in the certificate. This metric
-    measures how many SSL connections had SCTs available. Emitted during every
-    SSL connection establishment.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertificateTransparency.SCTStatus" enum="SCTVerifyStatus">
-  <owner>eranm@chromium.org</owner>
-  <summary>
-    Breakdown of Signed Certificate Timestamps (SCTs) validation status. Emitted
-    once for every SCT when first validated, which means 0 or more times during
-    every SSL connection establishment.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertVerifier_First_Job_Latency" units="ms">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The actual amount of time spent verifying a certificate using the underlying
-    cryptographic APIs. Because parallel verifications for the same certificate
-    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
-    skewed, due to later verifications taking less overall time. This records
-    the overall time spent verifying the first job to capture initialization
-    costs.
-  </summary>
-</histogram>
-
-<histogram name="Net.CertVerifier_Job_Latency" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The actual amount of time spent verifying a certificate using the underlying
-    cryptographic APIs. Because parallel verifications for the same certificate
-    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
-    skewed, due to later verifications taking less overall time. This records
-    the overall time spent verifying a single request, regardless of how many
-    parallel requests are being served by the verification.
-  </summary>
-</histogram>
-
-<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times we sent N packets, but could have sent N-1 packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.ComodoDNSExperimentFailureTime" units="ms">
-  <obsolete>
-    This experiment has concluded.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time taken before we failed to  resolve the Comodo test DNS
-    record. This is an experiment, run in conjuction with Comodo, to test the
-    viability of a DNS based certificate revocation mechanism.
-  </summary>
-</histogram>
-
-<histogram name="Net.ComodoDNSExperimentSuccessTime" units="ms">
-  <obsolete>
-    This experiment has concluded.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time taken to successfully resolve the Comodo test DNS record.
-    This is an experiment, run in conjuction with Comodo, to test the viability
-    of a DNS based certificate revocation mechanism.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was compressed.
-    Only includes requests which did not go through an explicit proxy and did
-    not go over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The compressed number of bytes received per request that was compressed.
-    Only includes requests which did not go through an explicit proxy and did
-    not go over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was not
-    compressed but appears to have been compressible.  Only includes requests
-    which did not go through an explicit proxy and did not go over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was compressed.
-    Only includes requests sent through a proxy without SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The compressed number of bytes received per request that was compressed.
-    Only includes requests sent through a proxy without SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was not
-    compressed but appears to have been compressible.  Only includes requests
-    sent through a proxy without SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was compressed.
-    Only includes requests sent over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The compressed number of bytes received per request that was compressed.
-    Only includes requests sent over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes">
-  <obsolete>
-    Removed as of 02/2015
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The uncompressed number of bytes received per request that was not
-    compressed but appears to have been compressible.  Only includes requests
-    sent over SSL.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount" enum="ConnectionType">
-  <obsolete>
-    The count was inaccurate (it counted transactions rather than connections)
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Each bucket is the number of connections of a particular type that the user
-    has had during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType">
-  <obsolete>
-    Renamed to match HadConnectionType.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Each bucket is the number of successful connections of a particular type
-    that the user has had during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType">
-  <obsolete>
-    Removed May 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    Each bucket is the number of successful connections of a particular type
-    that the user has had during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType">
-  <obsolete>
-    No longer collected.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Each bucket is the number of failed connections of a particular type that
-    the user has had during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback"
-    enum="BooleanDeprecatedCiphers">
-  <obsolete>
-    Replaced with Net.ConnectionUsedSSLDeprecatedCipherFallback2 in Chrome 44.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    True if an HTTPS connection was made using the deprecated cipher suite
-    fallback.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback2"
-    enum="BooleanDeprecatedCiphers">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each successful HTTPS request, whether it used the deprecated cipher
-    suite fallback.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLv3Fallback">
-  <obsolete>
-    Replaced by Net.ConnectionUsedSSLVersionFallback in Chrome 21.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if the HTTP request was to a server which requires SSLv3 fallback
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLVersionFallback"
-    enum="FallbackSSLVersion">
-  <obsolete>
-    Replaced with Net.ConnectionUsedSSLVersionFallback2 in Chrome 44.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Nonzero if the HTTP request was to a server which requires SSL version
-    fallback.  The value indicates the SSL version the request fell back on.
-  </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLVersionFallback2"
-    enum="FallbackSSLVersion">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each successful HTTPS request, whether it used the SSL version fallback.
-    The value indicates the SSL version the request fell back on
-  </summary>
-</histogram>
-
-<histogram name="Net.ContentDecodingFailed.FilterType" enum="NetFilterType">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    For each CONTENT_DECODING_FAILED, record the filter that failed.
-  </summary>
-</histogram>
-
-<histogram name="Net.ContentDecodingFailed2.FilterType" enum="NetFilterType2">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    For each CONTENT_DECODING_FAILED, record the filter that failed.
-  </summary>
-</histogram>
-
-<histogram name="net.CookieBackingStoreUpdateResults"
-    enum="BackingStoreResults">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether or not updates to the backing store succeeded or failed, recorded
-    every update.
-  </summary>
-</histogram>
-
-<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Intervals between access time updates for each cookie.</summary>
-</histogram>
-
-<histogram name="net.CookieCount">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of cookies in the store (recorded every 10 minutes of active browsing
-    time)
-  </summary>
-</histogram>
-
-<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For each cookie removed from the store, the reason it was removed.
-  </summary>
-</histogram>
-
-<histogram name="net.CookieDomainCount">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For each domain, number of cookies in that domain (recorded every 10 minutes
-    of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="net.CookieDomainPerEtldp1Count">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For every top level domain, number of subdomains in that top level domain
-    (recorded every 10 minutes of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="net.CookieEtldp1Count">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For every top level domain, number of cookies in that domain (recorded every
-    10 minutes of active browsing time).
-  </summary>
-</histogram>
-
-<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For each evicted (not expired) cookie, the amount of time since it was last
-    used
-  </summary>
-</histogram>
-
-<histogram name="net.CookieExpirationDurationMinutes" units="minutes">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Number of minutes until cookie expires when set.</summary>
-</histogram>
-
-<histogram name="net.CookieTimeGet">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time (ms) to get cookies for each URL request.
-  </summary>
-</histogram>
-
-<histogram name="net.CookieTimeLoad">
-  <obsolete>
-    Initial typo; only here to get results from builds before r59117.  See
-    &quot;Cookie.&quot; group.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time (ms) to load the persistent cookie store at browser
-    start.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfAlternateProtocolServers" units="servers">
-  <owner>bnc@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The total number of servers (HostPortPairs) to which alternative protocol
-    was used. This counts the number of servers persisted to prefs file.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfAlternateProtocolServers.Memory" units="servers">
-  <owner>bnc@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The total number of servers (HostPortPairs in memory) to which alternative
-    protocol was used.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfPipelineCapableServers" units="servers">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total number of servers (HostPortPairs) that support HTTP pipelining.
-    This counts the number of servers persisted to prefs file.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfQuicServerInfos" units="configs">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    This counts the number of server configs persisted in prefs file.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfSpdyServers">
-  <owner>bnc@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The total number of SPDY server names persisted to prefs file.
-  </summary>
-</histogram>
-
-<histogram name="Net.CountOfSpdySettings">
-  <obsolete>
-    Removed on 2016-10-11.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The total number of SPDY Settings properties persisted to prefs file.
-  </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestFailedTimeMs" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to block to fetch one or
-    more revocation lists. This measures the amount of time that failures to get
-    CRL information take.
-  </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to block to fetch one or
-    more revocation lists. This records the fraction of successful requests.
-  </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestTimeMs" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to block to fetch one or
-    more revocation lists. This measures the amount of time that each fetch
-    takes.
-  </summary>
-</histogram>
-
-<histogram name="Net.Cronet.CertVerifierCache.DeserializeTime" units="ms">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Measures time spent to deserialize and populate the
-    net::CachingCertVerifier's cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.Cronet.CertVerifierCache.SerializeTime" units="ms">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Measures time spent to serialize the net::CachingCertVerifier's cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength" units="KB">
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTP/HTTPS response bodies in the
-    previous calendar day. The metric is reported when the first response in the
-    current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled" units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTP/HTTPS response bodies in the
-    previous calendar day while the data reduction proxy setting was enabled.
-    The metric is reported when the first response in the current day is
-    received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Https"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTPS response bodies in the previous
-    calendar day while the data reduction proxy setting was enabled. The metric
-    is reported when the first response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_LongBypass"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all long-bypassed HTTP response bodies in
-    the  previous calendar day while the data reduction proxy setting was
-    enabled. The metric is reported when the first response in the current day
-    is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_ShortBypass"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all short-bypassed HTTP response bodies in
-    the previous calendar day while the data reduction proxy setting was
-    enabled. The metric is reported when the first response in the current day
-    is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Unknown"
-    units="KB">
-  <obsolete>
-    Deprecated. Moved to
-    Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass in M46.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTP response bodies for requests that
-    were not served by the enabled data reduction proxy for unknown reasons in
-    the previous calendar day while the data reduction proxy setting was
-    enabled. The metric is reported when the first response in the current day
-    is received.
-  </summary>
-</histogram>
-
-<histogram
-    name="Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTP response bodies for requests that
-    were not served by the enabled data reduction proxy for unknown reasons in
-    the previous calendar day while the data reduction proxy setting was
-    enabled. The metric is reported when the first response in the current day
-    is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_ViaDataReductionProxy" units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total content size in KB of all HTTP/HTTPS response bodies in the
-    previous calendar day via the data reduction proxy. The metric is reported
-    when the first response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total HTTP/HTTPS response body size while the data
-    reduction proxy is enabled to total HTTP/HTTPS response body size in the
-    previous calendar day. The metric is reported when the first response in the
-    current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Https"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total HTTPS response body size while the data reduction
-    proxy is enabled to total HTTP/HTTPS response body size in the previous
-    calendar day. The metric is reported when the first response in the current
-    day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_LongBypass"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total long-bypassed response body size while the data
-    reduction proxy is enabled to total HTTP/HTTPS response body size in the
-    previous calendar day. The metric is reported when the first response in the
-    current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_ShortBypass"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total short-bypassed response body size while the data
-    reduction proxy is enabled to total HTTP/HTTPS response body size in the
-    previous calendar day. The metric is reported when the first response in the
-    current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Unknown"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total body size of responses that were not served by the
-    data reduction proxy for unknown reason while the data reduction proxy is
-    enabled to total HTTP/HTTPS response body size in the previous calendar day.
-    The metric is reported when the first response in the current day is
-    received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_ViaDataReductionProxy" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of total HTTP/HTTPS response body size via the data reduction
-    proxy to total HTTP/HTTPS response body size in the previous calendar day.
-    The metric is reported when the first response in the current day is
-    received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day. A negative
-    saving will be shown as zero. The metric is reported when the first response
-    in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day while the data
-    reduction proxy was enabled. A negative saving will be shown as zero. This
-    only counts responses while the data reduction proxy is enabled. The metric
-    is reported when the first response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled_Video"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day while the data
-    reduction proxy was enabled. A negative saving will be shown as zero. This
-    only counts responses while the data reduction proxy is enabled. The metric
-    is reported when the first response in the current day is received. If no
-    video bytes were received while the data reduction proxy was enabled, the
-    metric will not be reported.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day via the data
-    reduction proxy. A negative saving will be shown as zero. This only counts
-    responses via the data reduction proxy. The metric is reported when the
-    first response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy_Video"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day via the data
-    reduction proxy. A negative saving will be shown as zero. This only counts
-    responses via the data reduction proxy. The metric is reported when the
-    first response in the current day is received. If no video bytes were
-    received via the data reduction proxy, the metric will not be reported.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB">
-  <obsolete>
-    Deprecated- see Net.DailyContentLength_ViaDataReductionProxy.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Total size in KB of all response bodies in the previous calendar day that
-    were received through the data reduction proxy.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentLengthWithDataReductionProxyEnabled"
-    units="KB">
-  <obsolete>
-    Deprecated- see Net.DailyContentLength_DataReductionProxyEnabled
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Total size in KB of all response bodies in the previous calendar day that
-    were received when the data reduction proxy was enabled.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentSavings" units="%">
-  <obsolete>
-    Deprecated- see Net.DailyContentSavingPercent.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day. A negative
-    saving will be shown as zero.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentSavings_DataReductionProxy" units="%">
-  <obsolete>
-    Deprecated- see Net.DailyContentSavingPercent_DataReductionProxyEnabled.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of data saving in the previous calendar day when the data
-    reduction proxy was enabled for at least some responses during the day. A
-    negative saving will be shown as zero.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpOriginalContentLength" units="KB">
-  <obsolete>
-    Deprecated- see Net.DailyOriginalContentLength.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Total size in KB specified in the X-Original-Content-Length headers of all
-    responses in the previous calendar day. If the header is not present in a
-    response, the size of the response body is used.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpReceivedContentLength" units="KB">
-  <obsolete>
-    Deprecated- see Net.DailyContentLength.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Total size in KB of all response bodies in the previous calendar day.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength" units="KB">
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total size in KB specified in the X-Original-Content-Length headers of
-    all HTTP/HTTPS response bodies in the previous calendar day. If the header
-    is not present in a response, the size of the response body is used. The
-    metric is reported when the first response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total size in KB specified in the X-Original-Content-Length headers of
-    all HTTP/HTTPS response bodies in the previous calendar day while the data
-    reduction proxy is enabled. If the header is not present in a response, the
-    size of the response body is used. The metric is reported when the first
-    response in the current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength_ViaDataReductionProxy"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The total size in KB specified in the X-Original-Content-Length headers of
-    all HTTP/HTTPS response bodies in the previous calendar day via the data
-    reduction proxy. If the header is not present in a response, the size of the
-    response body is used. The metric is reported when the first response in the
-    current day is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="%">
-  <obsolete>
-    Deprecated- see Net.DailyContentPercent_ViaDataReductionProxy.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of Net.DailyHttpContentLengthViaDataReductionProxy in
-    Net.DailyHttpReceivedContentLength.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyReceivedContentWithDataReductionProxyEnabled"
-    units="%">
-  <obsolete>
-    Deprecated- see Net.DailyContentPercent_DataReductionProxyEnabled.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    The percentage of Net.DailyHttpContentLengthWithDataReductionProxyEnabled in
-    Net.DailyHttpReceivedContentLength.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyUserVisibleSavingsPercent_DataReductionProxyEnabled"
-    units="%">
-  <obsolete>
-    Removed in Chrome 57.
-  </obsolete>
-  <owner>kundaji@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The percentage of data savings in past
-    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is
-    displayed to users as their data savings.
-  </summary>
-</histogram>
-
-<histogram name="Net.DailyUserVisibleSavingsSize_DataReductionProxyEnabled"
-    units="KB">
-  <obsolete>
-    Removed in Chrome 57.
-  </obsolete>
-  <owner>kundaji@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total data saved in KB in past
-    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is used to
-    compute the data savings displayed to the user.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadCancelTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
-    cancellation of the fetch. For a given fetch, only one of the cancellation
-    or completion histograms will be added to.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadCompletionTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
-    completion of the fetch. For a given fetch, only one of the cancellation or
-    completion histograms will be added to.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks the net error codes received when the DHCP WPAD fetch fails to
-    retrieve a PAC file (including PAC_NOT_IN_DHCP, which is not really an error
-    but an indication that a PAC URL was not configured in DHCP).
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadGetAdaptersAddressesError"
-    enum="ErrorCodesGetAdaptersAddresses">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks the frequency of each of the different known error codes of calling
-    the GetAdaptersAddresses Win32 API.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Measures the time taken to call the GetAdaptersAddresses Win32 API, to
-    validate our understanding that it should complete quickly enough to call
-    synchronously from the network thread.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Total number of adapters enabled for DHCP as seen when the wait timer in the
-    DHCP WPAD code hits. This timer fires after a timeout from when we get some
-    information from the first adapter to finish.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of adapters enabled for DHCP that we have not completed retrieving
-    information for, as seen when the wait timer in the DHCP WPAD code hits.
-    This timer fires after a timeout from when we get some information from the
-    first adapter to finish.
-  </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadUnhandledDhcpError">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Counts the number of errors from the DhcpRequestParams API that we do not
-    have specific handling for, so that we can see if there is an abnormally
-    high rate.
-  </summary>
-</histogram>
-
-<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency">
-  <obsolete>
-    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-</histogram>
-
-<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency">
-  <obsolete>
-    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-</histogram>
-
-<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency2" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    The time measured before starting DNS lookup until after the connection is
-    complete.
-  </summary>
-</histogram>
-
-<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2">
-  <obsolete>
-    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-</histogram>
-
-<histogram name="Net.DoubleGetExperiment_InitialResponseMethod"
-    enum="DoubleGetExperimentMethods">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of HTTP request responses with MS Office Docs MIME types. The
-    responses are classified based on their method type and cacheability (POST,
-    cacheable GET and non-cacheable GET). The histogram is used in Double GET
-    Experiment, where successful non-cacheable GET requests are intercepted
-    after initial response and repeated in order to determine how much reissuing
-    non-cacheable GET requests influences their error rate. The histogram tracks
-    only initial requests (not the repeated ones).
-  </summary>
-</histogram>
-
-<histogram name="Net.DoubleGetExperiment_ResponseCode">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The response codes encountered for GET request repeated in Double GET
-    Experiment. In the experiment successful non-cacheable GET requests are
-    intercepted after initial response and repeated. The goal of the experiment
-    is to measure how much reissuing non-cacheable GET requests influences their
-    error rate.
-  </summary>
-</histogram>
-
-<histogram name="Net.DownloadBandwidth">
-  <obsolete>
-    Deprecated as of 03/2015.  No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Kbps on download streams exceeding 25KB.  Measures from the beginning of the
-    first byte received until the end of flowing data.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrAborted.CountPerUpload" units="aborts">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The count of the ABORTED bucket in Net.ErrorCodesForMainFrame3 at the time
-    histograms are being uploaded.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrAborted.ProportionPerUpload" units="%">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The bucket proportion of the ABORTED bucket in Net.ErrorCodesForMainFrame3
-    at the time histograms are being uploaded.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrAborted.ReceivedBytes" units="bytes">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The TotalReceivedBytes() at the time the request finishes with ERR_ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrAborted.SentBytes" units="bytes">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The TotalSentBytes() at the time the request finishes with ERR_ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 2012/5/16, replaced by
-    Net.ErrorCodesForHTTPSGoogleMainFrame2, which measures the same data but
-    includes ERR_ABORT and OK.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Errors resulting from loading pages from https://www.google.com. Note that
-    this only counts the errors in &quot;main frames&quot;, so it is a measure
-    of the error pages that users actually see (it does not for example count
-    the error codes for subresoures on a page). This is a temporary histogram,
-    added in order to debug query loss from the SSL Search launch.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame2" enum="NetErrorCodes">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Positive net error codes that requests for pages end with, including net::OK
-    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
-    https://www.google.com. Subresources or main frame navigations to other
-    origins are not included.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes">
-  <owner>skonig@chromium.org</owner>
-  <owner>hbengali@chromium.org</owner>
-  <summary>
-    Net error codes that requests for images end with, including net::OK and
-    net:ERR_ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 2011/5/24, replaced by Net.ErrorCodesForMainFrame2, which
-    measures the same data but uses a different bucket structure (adds guard
-    buckets).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive net error code that a page failed with. Note that this only counts
-    the errors in &quot;main frames&quot;, so it is a measure of the error pages
-    that users actually see (it does not for example count the error codes for
-    subresoures on a page).
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForMainFrame3, which
-    measures the same data but includes ERR_ABORTED and OK.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive net error code that a page failed with. Note that this only counts
-    the errors in &quot;main frames&quot;, so it is a measure of the error pages
-    that users actually see (it does not for example count the error codes for
-    subresoures on a page).
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Positive net error codes that requests for pages end with, including net::OK
-    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; (it
-    does not for example count the error codes for subresoures on a page).
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForSubresources2,
-    which measures the same data but includes ERR_ABORT and OK.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive net error code that a page failed with. Note that this only counts
-    the errors in &quot;subresources&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Net error codes that requests for &quot;subresources&quot; end with,
-    including net::OK and net::ERR_ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorPageButtonPressedWhileInUnexpectedState"
-    enum="ErrorPageButton">
-  <obsolete>
-    Deprecated as of 2015/8/21
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Temporary histogram to investigate http://crbug.com/500556.  Records which
-    button on the network error page was pushed when either the URL Blink
-    reports for the page is not the internal error page URL or the
-    NetErrorHelper core has no error information for the current page (or both).
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorPageButtonPressUnexpectedStates"
-    enum="ErrorPageUnexpectedStates">
-  <obsolete>
-    Deprecated as of 2015/8/21
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Temporary histogram to investigate http://crbug.com/500556.  Records
-    whether, when the handler for a button press on the network error page runs,
-    which of the following are or are not true:  The URL Blink reports for the
-    page is not the internal error page URL or the NetErrorHelper core has no
-    error information for the current page.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents">
-  <owner>rdsmith@chromium.org</owner>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Counts of various events that can occur on the network error page. See the
-    histogram for details.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksShown"
-    enum="NetErrorNavigationCorrectionTypes">
-  <owner>edwardjung@chromium.org</owner>
-  <summary>
-    Counts of the type of navigation correction suggestions shown on the network
-    error page. Multiple suggestions can be shown at the same time.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksUsed"
-    enum="NetErrorNavigationCorrectionTypes">
-  <owner>edwardjung@chromium.org</owner>
-  <summary>
-    Usage of navigation correction suggestions shown on the network error page.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorResponseHasContentMainFrame" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 10/2016.
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    The number of main frame 4xx/5xx responses that have content, to determine
-    if it's worth hooking up an error page for those that don't.  Intended to be
-    removed from the binary soon.
-  </summary>
-</histogram>
-
-<histogram name="Net.ErrorResponseHasContentNonMainFrame" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 10/2016.
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    The number of non-main frame 4xx/5xx responses that have content, to
-    determine if it's worth hooking up an error page for those that don't.
-    Intended to be removed from the binary soon.
-  </summary>
-</histogram>
-
-<histogram name="Net.ExpectCTHeaderResult" enum="ExpectCTHeaderResult">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Sites can send an Expect-CT header to Chrome to indicate that they want a
-    report to be sent when the connection does not comply with Certificate
-    Transparency policy. This histogram is recorded whenever Chrome receives an
-    Expect-CT header, and it records the result of processing the header, such
-    as whether it was ignored due to a bad value.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_Flush">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file Flush failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_GetSize">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file GetSize failed with.  The code is OS
-    dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_Open">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file Open failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_Read">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file Read failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_Seek">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file Seek failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_SetEof">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file SetEof failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileError_Write">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code that a file Write failed with.  The code is OS dependent,
-    so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Flush">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file Flush failed with.  Any value other than
-    0 indicates that we have received errors in a range outside of the one in
-    which we recorded the specific errors in Net.FileError_Flush.  The code is
-    OS dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_GetSize">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file GetSize failed with.  Any value other
-    than 0 indicates that we have received errors in a range outside of the one
-    in which we recorded the specific errors in Net.FileError_GetSize.  The code
-    is OS dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Open">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file Open failed with.  Any value other than
-    0 indicates that we have received errors in a range outside of the one in
-    which we recorded the specific errors in Net.FileError_Open.  The code is OS
-    dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Read">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file Read failed with.  Any value other than
-    0 indicates that we have received errors in a range outside of the one in
-    which we recorded the specific errors in Net.FileError_Read.  The code is OS
-    dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Seek">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file Seek failed with.  Any value other than
-    0 indicates that we have received errors in a range outside of the one in
-    which we recorded the specific errors in Net.FileError_Seek.  The code is OS
-    dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_SetEof">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file SetEof failed with.  Any value other
-    than 0 indicates that we have received errors in a range outside of the one
-    in which we recorded the specific errors in Net.FileError_SetEof.  The code
-    is OS dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Write">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    System error code range that a file Write failed with.  Any value other than
-    0 indicates that we have received errors in a range outside of the one in
-    which we recorded the specific errors in Net.FileError_Write.  The code is
-    OS dependent, so when looking at the histogram don't mix OSes.
-  </summary>
-</histogram>
-
-<histogram name="Net.ForceAlternativeService" enum="BooleanForced">
-  <obsolete>
-    Data collection ended, corresponding feature removed.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Track usage of alternative services forced by the force-alt-protocols
-    command line flag.  Triggered each time alternative services are queried for
-    a given origin and the command line flag would make a difference (that is,
-    there is no advertised alternative service for that origin).
-  </summary>
-</histogram>
-
-<histogram name="Net.FoundSystemTrustRootsAndroid" enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether or not system installed trust anchors could be distinguished from
-    user installed trust anchors. Recorded on first certificate verification on
-    Android 4.2 and later.
-  </summary>
-</histogram>
-
-<histogram name="Net.FtpDataConnectionErrorCount" enum="FtpDataConnectionError">
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>The number of times each FTP Error was observed.</summary>
-</histogram>
-
-<histogram name="Net.FtpDataConnectionErrorHappened"
-    enum="FtpDataConnectionError">
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>
-    The number of Chrome sessions which encountered the indicates FTP Error.
-    This prevents allowing a user that retried a connection many times (getting
-    an error each time) from biasing the tallies.
-  </summary>
-</histogram>
-
-<histogram name="Net.FtpServerTypeCount" enum="FtpServerType">
-  <obsolete>
-    Replaced by Net.FtpServerTypeCount2 on 2012-11-03.
-  </obsolete>
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>
-    Each bucket is the number of times the FTP server type was encountered.
-  </summary>
-</histogram>
-
-<histogram name="Net.FtpServerTypeCount2" enum="FtpServerType2">
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>
-    Each bucket is the number of times the FTP server type was encountered.
-  </summary>
-</histogram>
-
-<histogram name="Net.GetProxyForUrl_FAIL" units="ms">
-  <obsolete>
-    Removed at some time before 2014/09/15.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time spent waiting for WinHttpGetProxyForUrl to return with error.
-  </summary>
-</histogram>
-
-<histogram name="Net.GetProxyForUrl_OK" units="ms">
-  <obsolete>
-    Removed at some time before 2014/09/15.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time spent waiting for WinHttpGetProxyForUrl to return with success.
-  </summary>
-</histogram>
-
-<histogram name="Net.GoogleConnectionInappropriateFallback"
-    enum="BooleanInappropriateFallback">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    Records a sample for each HTTPS request to a Google server that either
-    succeeded or received an inappropriate_fallback alert. This is used to
-    estimate how frequently the fallback is used to recover from a spurious
-    network failure.
-  </summary>
-</histogram>
-
-<histogram name="Net.GoogleConnectionUsedSSLVersionFallback"
-    enum="FallbackSSLVersion">
-  <obsolete>
-    Replaced with Net.GoogleConnectionUsedSSLVersionFallback2 in Chrome 44.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Nonzero if the HTTP request was to a Google server which required SSL
-    version fallback. The value indicates the SSL version the request fell back
-    on. Since Google servers support TLS 1.2, any fallback is an indication of
-    network middleware problems.
-  </summary>
-</histogram>
-
-<histogram name="Net.GoogleConnectionUsedSSLVersionFallback2"
-    enum="FallbackSSLVersion">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each successful HTTPS request to a Google server, whether it used the
-    SSL version fallback. The value indicates the SSL version the request fell
-    back on. Since Google servers support TLS 1.2 and FALLBACK_SCSV, any
-    fallback is an indication of a broken local SSL MITM proxy.
-  </summary>
-</histogram>
-
-<histogram name="Net.GzipEncodingFixupResult" enum="GzipEncodingFixupResult">
-  <obsolete>
-    Removed around 2015/03/18. The code which implemented Gzip encoding fixup
-    was removed.
-  </obsolete>
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Resources are sometimes transferred with an incorrect encoding type of gzip.
-    net::Filter::FixupEncodingTypes() attempts to correct for these situations
-    by applying a set of heuristics. This histogram counts the frequency of
-    usage of these heuristics in the wild.
-  </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType" enum="ConnectionType">
-  <obsolete>
-    The count was inaccurate (it counted transactions rather than connections).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Each bucket is a boolean (0 or 1) indicating whether the user has had a
-    connection of that type during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType2" enum="ConnectionType">
-  <obsolete>
-    This statistic measures successful and failed connections, the new one only
-    measures successful ones.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Each bucket is a boolean (0 or 1) indicating whether the user has had a
-    connection of that type during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType3" enum="ConnectionType">
-  <obsolete>
-    Removed May 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    Each bucket is a boolean (0 or 1) indicating whether the user has had a
-    successful connection of that type during the session.
-  </summary>
-</histogram>
-
-<histogram name="Net.HadFtpServerType" enum="FtpServerType">
-  <obsolete>
-    Replaced by Net.HadFtpServerType2 on 2012-11-13.
-  </obsolete>
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>
-    Each bucket is the number of sessions that encountered a given FTP server
-    type. Each session reports a given server type at most once.
-  </summary>
-</histogram>
-
-<histogram name="Net.HadFtpServerType2" enum="FtpServerType2">
-  <owner>phajdan.jr@chromium.org</owner>
-  <summary>
-    Each bucket is the number of sessions that encountered a given FTP server
-    type. Each session reports a given server type at most once.
-  </summary>
-</histogram>
-
-<histogram name="Net.HasBrokenNEON" enum="BooleanBroken">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    Records, on startup, for ARM devices running Android, whether the CPU is
-    known to have a broken NEON unit. See https://crbug.com/341598.
-  </summary>
-</histogram>
-
-<histogram name="Net.Http2ResponseStatusHeader" enum="StatusHeader">
-  <owner>bnc@chromium.org</owner>
-  <summary>Format of :status header value in HTTP/2 response.</summary>
-</histogram>
-
-<histogram name="Net.Http2SSLCipherSuite" enum="SSLCipherSuite">
-  <obsolete>
-    Removed 2017-02.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The SSL/TLS cipher suite that was negotiated, recorded for each successful
-    HTTP/2 connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheAddEvicted" enum="BooleanDidEvict">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether adding an entry to the HTTP auth cache evicted another entry.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheAddEvictedCreation">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When an HTTP auth cache entry is evicted, the time since it was created.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheAddEvictedLastUse">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When an HTTP auth cache entry is evicted, the time since it was last used.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheAddPathEvicted" enum="BooleanDidEvict">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Whether adding a path to an entry in the HTTP auth cache evicted another
-    path.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheLookupByPathPosition">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When looking up an HTTP auth cache entry by path, the position (1-indexed)
-    of the entry on a hit, or 0 on a miss.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCacheLookupPosition">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    When looking up an HTTP auth cache entry by realm, the position (1-indexed)
-    of the entry on a hit, or 0 on a miss.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCount" enum="HttpAuthCount">
-  <owner>asanka@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Per-authentication-scheme counts of authentication attempts and rejections.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthPromptType" enum="HttpAuthPromptType">
-  <owner>meacer@chromium.org</owner>
-  <summary>Type of the HTTP auth prompt displayed.</summary>
-</histogram>
-
-<histogram name="Net.HttpAuthResource" enum="HttpAuthResource">
-  <obsolete>
-    Removed in https://crrev.com/209100
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Count of authentication requests for top level pages vs. sub-resources, such
-    as images or iframes.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget">
-  <owner>asanka@chromium.org</owner>
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    Per-authentication-scheme counts of authentication targets, such as secure
-    servers or proxies.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpConnectionLatency" units="ms">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time between the HttpNetworkTransaction requesting a connection and the time
-    it connected.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentFreshnessLifetime" units="seconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Length of time that a received resource will be cacheable.</summary>
-</histogram>
-
-<histogram name="Net.HttpContentLength" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body. This is the actual number of bytes received,
-    which usually agrees with but is not necessarily the same as the size
-    specified by the Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body if it is cacheable. This is the actual number of
-    bytes received, which usually agrees with but is not necessarily the same as
-    the size specified by the Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body if it is cacheable for at least 24 hours. This is
-    the actual number of bytes received, which usually agrees with but is not
-    necessarily the same as the size specified by the Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body if it is cacheable for at least 4 hours. This is
-    the actual number of bytes received, which usually agrees with but is not
-    necessarily the same as the size specified by the Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthDifference" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The difference between the size specified in the X-Original-Content-Length
-    header and the size of the response body. This is zero if the
-    X-Original-Content-Length header is not present in the response.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The difference between the size specified in the X-Original-Content-Length
-    header and the size of the response body. Only includes resources that have
-    the X-Original-Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size of the response body. Only includes resources that have the
-    X-Original-Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpHeaderParserEvent" enum="HttpHeaderParserEvent">
-  <obsolete>
-    Deprecated as of 12/2016.
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Records the frequency with which a number of hacky HTTP header parsing rules
-    are invoked.  This histogram should be removed after we have enough data to
-    know if we can remove the hacks.
-  </summary>
-</histogram>
-
-<histogram name="net.HttpIdentSrcURL" units="requests">
-  <owner>tsepez@chromium.org</owner>
-  <summary>
-    Count of requests which contained a basic auth username and password
-    embedded in the URL itself.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.PrefilterBytesRead" units="bytes">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Total prefilter (e.g., before decompression) bytes read for an HttpJob
-    request.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTime" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time it takes to complete an HttpJob, from starting the transaction until we
-    are done reading.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeCached" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time it takes to complete an HttpJob, from starting the transaction until we
-    are done reading, for jobs served from the cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeCancel" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time it takes to complete an HttpJob, from starting the transaction until
-    the job is killed. Note that we didn't detect the end of the data for this
-    job.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeNotCached" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time it takes to complete an HttpJob, from starting the transaction until we
-    are done reading, for jobs not served from the cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeSuccess" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time it takes to complete an HttpJob, from starting the transaction until we
-    are done reading, for jobs when we read until no more data is available.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpOriginalContentLength" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size specified in the X-Original-Content-Length header. If this header is
-    not present in the response, the size of the response body is used.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpOriginalContentLengthWithValidOCL" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Size specified in the X-Original-Content-Length header. Only includes
-    resources that have the X-Original-Content-Length header.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpProxySocketRequestTime" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>mmenke@chromium.org</owner>
-  <summary>Time it takes to request a new (unused) HTTP proxy socket.</summary>
-</histogram>
-
-<histogram name="Net.HttpRequest.ContainsInvalidHeaderValuesInRFC7230"
-    enum="Boolean">
-  <obsolete>
-    Deprecated 06/2016 because this is not continuously tracked.
-  </obsolete>
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    Whether a request contains invalid request header values in RFC 7230. This
-    is counted once for every redirect leg. https://crbug.com/455099.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpRequestCompletionErrorCodes" enum="NetErrorCodes">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The network error code that the HTTP request completes with, including OK
-    and ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpRequestCompletionErrorCodes.MainFrame"
-    enum="NetErrorCodes">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The network error code that the HTTP main frame resource request completes
-    with, including OK and ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpResponse.ContainsInvalidHeaderValuesInRFC7230"
-    enum="Boolean">
-  <obsolete>
-    Deprecated 06/2016 because this is not continuously tracked.
-  </obsolete>
-  <owner>hiroshige@chromium.org</owner>
-  <summary>
-    Whether a response contains invalid response header values in RFC 7230. This
-    is counted once for every redirect leg. https://crbug.com/455099.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpResponseCode">
-  <owner>mmenke@chromium.org</owner>
-  <summary>The count of HTTP Response codes encountered.</summary>
-</histogram>
-
-<histogram name="Net.HttpResponseCode_Nxx_MainFrame">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    The count of HTTP Response codes encountered, in response to MAIN_FRAME
-    requests only; saving only the hundreds digit, e.g. 100-&gt;1, 300-&gt;3.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpResponseInfo.ConnectionInfo" enum="ConnectionInfo">
-  <obsolete>
-    Deprecated as of 06/2016.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Application protocol used in HTTP response.  Recorded every time a
-    URLRequest completes.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpResponseInfo.ConnectionInfo.MainFrame"
-    enum="ConnectionInfo">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Application protocol used in HTTP responses to requests for main frames.
-    Only includes requests that went over the network.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpResponseInfo.ConnectionInfo.SubResource"
-    enum="ConnectionInfo">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Application protocol used in HTTP responses to requests for resources other
-    than main frames. Does not include internal Chrome requests.  Only includes
-    requests that went over the network.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpServerProperties.UpdatePrefs"
-    enum="HttpServerPropertiesUpdatePrefsLocation">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The location in http_server_properties_manager.cc where UpdatePrefs was
-    called.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpSocketType" enum="HttpSocketType">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The counts of the type of sockets (all HTTP sockets, regardless of any proxy
-    used) used for HTTP[s].
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpStatusLineStatus" enum="HttpStatusLineStatus">
-  <obsolete>
-    Deprecated as of 12/2016.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Records how often violations of RFC 7230's header parsing rules are
-    observed.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpStreamFactoryJob.StreamReadyCallbackTime" units="ms">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>Time it takes for OnStreamReadyCallback to be called.</summary>
-</histogram>
-
-<histogram name="Net.HttpTimeToFirstByte" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when an HTTP request is issued to when the first byte is
-    processed.
-  </summary>
-</histogram>
-
-<histogram name="Net.HttpTimeToFirstByte.LargeUpload" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when an HTTP request is issued to when the first byte is
-    processed, for requests with an upload that is &gt; 1 MiB. Excludes chunked
-    uploads.
-  </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of handleable socket errors (connection abort/close/reset) per
-    socket reuse type.
-  </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType_disable_late_binding"
-    enum="HttpSocketType">
-  <obsolete>
-    Late bindings are on by default now.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of handleable socket errors (connection abort/close/reset) per
-    socket reuse type.  Socket late binding is disabled.
-  </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType_enable_late_binding"
-    enum="HttpSocketType">
-  <obsolete>
-    Late bindings are on by default now.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of handleable socket errors (connection abort/close/reset) per
-    socket reuse type.  Socket late binding is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Net.IOThreadCreationToHttpRequestStart" units="ms">
-  <obsolete>
-    Deprecated 11/2014. No longer tracked.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Time from when the IOThread is created to when the first URL request is
-    started. Only requests that are created for a profile while Chrome is
-    starting up are considered.
-  </summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectDuration" units="ms">
-  <obsolete>
-    Deprecated 1/2015. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Duration of time spent during the UDP-connect IPv6 probe.</summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 03/2015. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether the interface-enumeration IPv6 probe method failed given that the
-    UDP-connect IPV6 probe failed.
-  </summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 03/2015. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether the interface-enumeration IPv6 probe method was successful given
-    that the UDP-connect IPV6 probe was successful.
-  </summary>
-</histogram>
-
-<histogram name="Net.IPv6Status" enum="IPV6ProbeResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The probe results when a test for IPv6 support is done.</summary>
-</histogram>
-
-<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The probe results when a test for IPv6 support is done, after a network
-    change event.
-  </summary>
-</histogram>
-
-<histogram name="Net.JobControllerSet.CountOfNonPreconnectAltJob"
-    units="alt_jobs">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>This counts number of alternative jobs which are still alive when HttpStreamFactory is destructed.</summary>
-</histogram>
-
-<histogram name="Net.JobControllerSet.CountOfNonPreconnectMainJob"
-    units="main_jobs">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>This counts number of main jobs which are still alive when HttpStreamFactory is destructed.</summary>
-</histogram>
-
-<histogram name="Net.JobControllerSet.CountOfPreconnect"
-    units="job_controllers">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    This counts number of job controllers which are used for preconnect and are
-    still alive when HttpStreamFactory is destructed.
-  </summary>
-</histogram>
-
-<histogram name="Net.LoadPrefetch.Pattern" enum="PrefetchStatus">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The completion status of prefetches that have finished loading.
-  </summary>
-  <details>
-    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
-    before that point are not registered.
-
-    This applies to requests with net::LOAD_PREFETCH, used by various
-    prefetching features such as no-state prefetch and RESOURCE_TYPE_PREFETCH.
-
-    Note that &quot;success from cache&quot; means that the
-    UrlRequest::was_cached() was true and unused_since_prefetch was false.
-    &quot;success from network&quot; means that was_cached() was false.
-    &quot;success already prefetched&quot; means that both was_cached() and
-    unused_since_prefetch were true. Validated results are considered cached,
-    even though a conditional network request is made.
-  </details>
-</histogram>
-
-<histogram name="Net.MainFrameNoStore" enum="MainFrameStorable">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The distribution of storable vs &quot;cache-control: no-store&quot;
-    main-frame resources.
-
-    Counted after response headers have completed and before the content has
-    completed. Redirects are counted. All HTTP cache transactions are counted,
-    not just those that require the network.
-  </summary>
-</histogram>
-
-<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time that a (non-cancelled) proxy resolution request was stalled waiting
-    for an execution thread, for MultiThreadedProxyResolver.
-  </summary>
-</histogram>
-
-<histogram name="Net.MTPR_GetProxyForUrl_Time" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that it took for a (non-cancelled) proxy resolution request
-    to complete, for MultiThreadedProxyResolver.
-  </summary>
-</histogram>
-
-<histogram name="Net.NetInternalsUi.Feature" enum="NetInternalsUiFeature">
-  <obsolete>
-    Removed in Chrome 44.
-  </obsolete>
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    Counts the number of browser launches where chrome://net-internals and
-    chrome://net-internals/#tests are used.
-  </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How often automatically retrying to download the main frame of a page in
-    response to specific HTTP network errors succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How often automatically retrying to download a subresource in response to
-    specific HTTP network errors succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How often automatically retrying to download the main frame of a page in
-    response to specific HTTP network errors returns another network error.
-    Histogram includes only the error code that triggered the retry.
-  </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    How often automatically retrying to download a subresource in response to
-    specific HTTP network errors returns another network error.  Histogram
-    includes only the error code that triggered the retry.
-  </summary>
-</histogram>
-
-<histogram name="Net.NotifyAddrChangeFailures">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    On Windows, NetworkChangeNotifierWin calls NotifyAddrChange, which can fail
-    for unknown reasons. This records the number of times it fails in a row
-    before a successful call. If it never succeeds, or takes over 100 tries, a
-    value of 100 is recorded. See http://crbug.com/69198
-  </summary>
-</histogram>
-
-<histogram name="Net.NumDuplicateCookiesInDb">
-  <obsolete>
-    Deprecated 2015-08-17 as part of cookie histogram cleanup
-    (https://crbug.com/521135).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of duplicate cookies that were present in the cookie store during
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestFailedTimeMs" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to make one or more HTTP
-    fetches to OCSP responders in order to get revocation information. This
-    measures the amount of time that failures to get OCSP information take.
-  </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to make one or more HTTP
-    fetches to OCSP responders in order to get revocation information. This
-    records the fraction of successful requests.
-  </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestTimeMs" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When validating an HTTPS certificate we may have to make one or more HTTP
-    fetches to OCSP responders in order to get revocation information. This
-    measures the amount of time that each of those requests takes.
-  </summary>
-</histogram>
-
-<histogram name="Net.OCSPResponseStapled" enum="BooleanSuccess">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    When connecting over HTTPS, a server may include an OCSP response as part of
-    the TLS handshake so that clients do not have to fetch it, provided the
-    client requested the server do so. This measures whether or not a server
-    included an OCSP response when it was requested.
-  </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive error code that was returned by the system library
-    &quot;getaddrinfo()&quot;. This error code is platform specific, so when
-    there is a Windows/Linux conflict, both decodings are shown.
-  </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Linux"
-    enum="ErrorCodesGetaddrinfo_Linux">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive error code that was returned by the system library
-    &quot;getaddrinfo()&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Mac"
-    enum="ErrorCodesGetaddrinfo_Mac">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive error code that was returned by the system library
-    &quot;getaddrinfo()&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Win"
-    enum="ErrorCodesGetaddrinfo_Win">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Positive error code that was returned by the system library
-    &quot;getaddrinfo()&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Net.PacResultForStrippedUrl" enum="PacResultForStrippedUrl">
-  <obsolete>
-    Deprecated 4/27/2016. No longer tracked.
-  </obsolete>
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    Proxy Auto Config (PAC) allows specifying an arbitrary javascript program to
-    pick network proxies on a per-request basis (based on the URL). This works
-    by calling the script's FindProxyForURL() function with the target URL as
-    its first argument.
-
-    Traditionally, the URL parameter passed into the script contains the exact
-    URL being loaded, except maybe for having stripped the fragment and embedded
-    identity portions of the URL.
-
-    This histogram records what happens when the URL passed into
-    FindProxyForURL() additionally has had its path component stripped. Does it
-    return the same proxy list as when calling FindProxyForURL() with the
-    original (unmodified) URL?
-
-    This comparison is done only when the URL scheme implies a secure channel
-    (i.e. https:// and wss://), in order to gather data for crbug.com/593759.
-  </summary>
-</histogram>
-
-<histogram name="Net.Ping_ResponseStartedTime" units="ms">
-  <obsolete>
-    Deprecated 4/16/2014. No longer tracked.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    How long it took for an &lt;a ping&gt; request to receive a response. Only
-    recorded if a response was received.
-  </summary>
-</histogram>
-
-<histogram name="Net.Ping_Result" enum="PingResult">
-  <obsolete>
-    Deprecated 4/16/2014. No longer tracked.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The result of an &lt;a ping&gt; request, whether it received a response or
-    timed out or failed for some other reason.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Indicate whether a link navigation was preceded by a recent pre-connect
-    trigger (within 10 seconds). There is a high chance that loading the page
-    used a preconnected TCP session.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Indicate whether a URLRequest was preceded by a recent pre-connect trigger
-    (within 10 seconds). There is a high chance that loading the resource used a
-    preconnected TCP session.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    When a preconnection is made, indicate what the motivation was.
-  </summary>
-  <details>
-    Currently, the most common (only?) motivations are SELF_REFERAL,
-    LEARNED_REFERAL and OMNIBOX. The SELF_REFERAL indicates that we made sure a
-    second connection was available for a resource that either was never before
-    seen, or has historically had no subresources.  The LEARNED_REFERAL
-    indicates that we &quot;learned&quot; that a subresource was commonly
-    needed, and that motivated the TCP/IP preconnect. The OMNIBOX motivation
-    happens when a search is being suggested, and we preconnect to the search
-    provider. (WARNING: Prior to version 7.517.*, enums 7, 8, and 9 may be
-    confused, as EARLY_LOAD_MOTIVATED was inserted new 6 value.)
-  </details>
-</histogram>
-
-<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Indicate whether there was a proxy to preclude preconnection.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectSkippedToProxyServers" units="count">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Indicates number of times a preconnect to proxy server was skipped due to an
-    existing pending preconnection request.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectSubresourceEval"
-    enum="PreconnectSubresourceEval">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    What did we decide to do about a predicted resource, based on the historical
-    expected number of connection that this subresource will require.
-  </summary>
-  <details>
-    This is basically the current thresholding of the SubresourceExpectation,
-    relative to current static thresholds, and taking into account whether
-    preconnection is enabled (i.e., if preconnection is disabled, we'll never
-    decide to preconnect).
-  </details>
-</histogram>
-
-<histogram name="Net.PreconnectSubresourceExpectation">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The expected number of connections, times 100, that we'll make to a given
-    subresource, based on learned history.
-  </summary>
-  <details>
-    By comparing this to thresholds, we decide if we will preconnect,
-    preresolve, or do nothing. This histogram can be used to select those static
-    thresholds.
-  </details>
-</histogram>
-
-<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Indicate whether if a preconnect trigger is followed by a resource request
-    (from link navigations) to the host or not. This is to measure precision of
-    link-based preconnect triggers.
-  </summary>
-</histogram>
-
-<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization">
-  <obsolete>
-    Sourced data corrected, and replaced by NetPreconnectUtilization2
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Indicate final utilization for each attempted socket connection.
-  </summary>
-  <details>
-    We also include stats for non-speculative sockets. Some socket connections
-    may never connect, and others may never be used (as the user may abort
-    before then).
-  </details>
-</histogram>
-
-<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Indicate final utilization for each attempted socket connection.
-  </summary>
-  <details>
-    We also include stats for non-speculative sockets. Some socket connections
-    may never connect, and others may never be used (as the user may abort
-    before then).
-  </details>
-</histogram>
-
-<histogram name="Net.Predictor.MRUIndex">
-  <obsolete>
-    Dev data was collected which was good enough to make a decision on the size
-    of the predictor database.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The index into the predictor's MRU on navigation. This is the size the MRU
-    had to be in order to effectively predict subresources for this navigation.
-  </summary>
-</histogram>
-
-<histogram name="Net.Predictor.Startup.DBSize" units="bytes">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The approximate size in bytes of the predictor's database on startup.
-  </summary>
-</histogram>
-
-<histogram name="Net.Prefetch.HitBytes" units="bytes">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Bytes read for requests that were served from a cache entry whose
-    unused_since_prefetch bit is true.
-  </summary>
-</histogram>
-
-<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The completion status of prefetches that have finished loading.
-  </summary>
-  <details>
-    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
-    before that point are not registered.
-
-    This applies to requests with RESOURCE_TYPE_PREFETCH.
-
-    Note that &quot;success from cache&quot; means that the
-    UrlRequest::was_cached() was true and unused_since_prefetch was false.
-    &quot;success from network&quot; means that was_cached() was false.
-    &quot;success already prefetched&quot; means that both was_cached() and
-    unused_since_prefetch were true. Validated results are considered cached,
-    even though a conditional network request is made.
-  </details>
-</histogram>
-
-<histogram name="Net.Prefetch.PrefilterBytesReadFromNetwork" units="bytes">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Number of bytes read from the network on behalf of prefetch requests.  This
-    is prefilter, so before any decompression.
-  </summary>
-  <details>
-    This applies to requests with RESOURCE_TYPE_PREFETCH.
-  </details>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeBeforeCancel" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Time spent on prefetch requests before the request was canceled.
-  </summary>
-  <details>
-    This applies to requests with RESOURCE_TYPE_PREFETCH.
-  </details>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeSpentOnPrefetchHit" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Time spent on requests that were served from a cache entry whose
-    unused_since_prefetch bit is true.
-  </summary>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>Time spent on prefetch requests when fetched from cache.</summary>
-  <details>
-    This applies to requests with RESOURCE_TYPE_PREFETCH.
-  </details>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Time spent on prefetch requests when fetched from the network, including
-    validation time.
-  </summary>
-</histogram>
-
-<histogram name="Net.PrefProxyConfig.GooglezipProxyRemovalCount">
-  <owner>sclittle@chromium.org</owner>
-  <summary>
-    Records how many *.googlezip.net Data Reduction Proxies were removed from
-    the effective proxy configuration when a proxy reconfiguration occurs.
-  </summary>
-</histogram>
-
-<histogram name="Net.Priority_High_Latency" units="ms">
-  <obsolete>
-    Replaced by Net.Priority_High_Latency_b.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the start of the http transaction until the first byte of the
-    response for high priority (currently frame and subframe) requests.  Only
-    times under 10 minutes are recorded.
-  </summary>
-</histogram>
-
-<histogram name="Net.Priority_High_Latency_b" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the start of the http transaction until the first byte of the
-    response for high priority (currently frame and subframe) requests.
-  </summary>
-</histogram>
-
-<histogram name="Net.Priority_Low_Latency" units="ms">
-  <obsolete>
-    Replaced by Net.Priority_Low_Latency_b.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the start of the http transaction until the first byte of the
-    response for low priority (non-frame/subframe) requests.   Only times under
-    10 minutes are recorded.
-  </summary>
-</histogram>
-
-<histogram name="Net.Priority_Low_Latency_b" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the start of the http transaction until the first byte of the
-    response for low priority (non-frame/subframe) requests.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyAuthRequested.HasConnection">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    When a PROXY_AUTH_REQUESTED error code is handled in
-    net::HttpStreamFactoryImpl::Job::RunLoop, this is true if connection_ has an
-    associated value.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyPollConfigurationTime">
-  <obsolete>
-    Removed at some time before 2014/09/15.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time in milliseconds spent fetch the system proxy configuration, when
-    polling it for changes.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total amount of time that was spent executing the proxy script during
-    &quot;tracing&quot; runs (executions of the script which discovered a new
-    DNS dependency and were subsequently abandoned).
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.AbandonedExecutionTotalTime"
-    units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total amount of time that was spent executing the proxy script during
-    &quot;tracing&quot; runs (executions of the script which discovered a new
-    DNS dependency and were subsequently abandoned).
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total amount of time that was spent in the non-blocking DNS bindings
-    while executing PAC scripts. This includes the times for abandoned
-    executions.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time inside of V8 that the proxy script spent executing for
-    the final pass. This includes the time spent in the javascript bindings.
-    This does not include the time spent in abandoned execution passes.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times that alert() was called in the final execution of the
-    script.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of errors that were seen in the final execution of the script.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times that the PAC script execution was restarted.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that the proxy resolution took. This includes all the time
-    spent waiting for DNS, PAC script execution, and restarts.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that proxy resolution spent waiting for DNS. This also
-    includes any queuing delays on the origin thread waiting for the DNS result
-    to be processed.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of unique DNS hostnames that the PAC script tried to resolve. The
-    *Ex() versions of the bindings count separately.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total amount of time that was spent in the non-blocking DNS bindings
-    while executing PAC scripts. This includes the times for abandoned
-    executions.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.ExecutionTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time inside of V8 that the proxy script spent executing for
-    the final pass. This includes the time spent in the javascript bindings
-    (which is probably dominated by Net.ProxyResolver.DnsWaitTotalTime). This
-    does not include the time spent in abandoned execution passes.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumAlerts">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times that alert() was called in the final execution of the
-    script.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumErrors">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of errors that were seen in the final execution of the script.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumRestarts">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times that the PAC script execution was restarted.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.OriginThreadLatency" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The amount of time it took upon completion to run the final task posted back
-    to the IO thread.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTime" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that the proxy resolution took. This includes all the time
-    spent waiting for DNS, PAC script execution, and restarts.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTimeDNS" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that proxy resolution spent waiting for DNS. This also
-    includes any queuing delays on the origin thread waiting for the DNS result
-    to be processed.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="ms">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The total time that the proxy resolution took, not including the post back
-    to the origin thread. This includes all the time spent waiting for DNS, PAC
-    script execution, and restarts.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.UniqueDNS">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of unique DNS hostnames that the PAC script tried to resolve. The
-    *Ex() versions of the bindings count separately.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.URLSize">
-  <obsolete>
-    Removed in Chrome 39.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The length of the URL that was passed into the PAC script.</summary>
-</histogram>
-
-<histogram name="Net.ProxyScriptFetcher.FirstByteDuration" units="ms">
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    The time taken from requesting a PAC script to receiving the first byte, on
-    successful fetches. This does not include time spent doing proxy
-    auto-discovery, or failed attempts at retrieving PAC  scripts.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyScriptFetcher.SuccessDuration" units="ms">
-  <owner>cbentzel@chromium.org</owner>
-  <summary>
-    The time taken to successfully fetch a PAC script. This does not include
-    time spent doing proxy auto-discovery, or failed attempts at retrieving PAC
-    scripts.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.GetProxyUsingScriptResult"
-    enum="NetErrorCodes">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    The network error code of resolving a URL by forwarding the request to the
-    proxy resolver and executing the PAC script.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.GetProxyUsingScriptTime"
-    units="100s of microseconds">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    The time taken to resolve a URL by forwarding the request to the proxy
-    resolver and executing the PAC script. This includes PAC script execution,
-    DNS queries, and internal retries. This does not include retries initiated
-    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.ResolvedUsingScript" enum="Boolean">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    Whether proxy resolution occured by forwarding the request to the proxy
-    resolver and executing the PAC script. This histogram records all URLs,
-    regardless of whether a proxy configuration is set. Note that in some cases,
-    the system proxy resolver is used. If so, this histogram indicates whether
-    the request was forwarded to the system resolver. However, on desktop
-    platforms, the number of users using the system resolver should be small
-    since the default is to use V8. Hence, the count of emissions to the 'True'
-    bucket on desktop caused by users of the system resolver should be small.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.ResolveProxyTime"
-    units="100s of microseconds">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    The total time taken to resolve a URL. This includes PAC script execution,
-    DNS queries, and internal retries. This does not include retries initiated
-    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.ScriptTerminated" enum="BooleanTerminated">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    Whether a proxy resolution resulted in the PAC script terminating
-    unexpectedly. This does not include terminations that occured during
-    initialization of a new proxy resolver. This only happens when the resolver
-    process crashes when using out-of-process PAC.
-  </summary>
-</histogram>
-
-<histogram name="Net.ProxyService.ScriptTerminatedOnInit"
-    enum="BooleanTerminated">
-  <owner>eroman@chromium.org</owner>
-  <summary>
-    Whether the creation of a new proxy resolver resulted in the PAC script
-    terminating unexpectedly. This only happens when the resolver process
-    crashes when using out-of-process PAC.
-  </summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain">
-  <obsolete>
-    Deprecated as of November 2016 because of disuse. Historical data is likely
-    inaccurate due to changes in the data structure that calculated domain IDs
-    for this histogram.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Second-level domains for which we have observed public key pinning failures.
-  </summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinReportSendingFailure" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 07/2016. Replaced with
-    Net.PublicKeyPinReportSendingFailure2.
-  </obsolete>
-  <owner>estark@chromium.org</owner>
-  <summary>
-    A validated certificate chain may be subject to additional pinning
-    requirements on a per-domain basis. When pinning requirements are violated,
-    Chrome attempts to send a report about the incident. This records the net
-    error code when sending a pinning violation report fails.
-  </summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinReportSendingFailure2" enum="NetErrorCodes">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    A validated certificate chain may be subject to additional pinning
-    requirements on a per-domain basis. When pinning requirements are violated,
-    Chrome attempts to send a report about the incident. This records the net
-    error code when sending a pinning violation report fails.
-  </summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinSuccess" enum="BooleanSuccess">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    A validated certificate chain may be subject to additional
-    &quot;pinning&quot; requirements on a per-domain basis. This records the
-    fraction of successful matches between a certificate chain and a pin list.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicActiveSessions">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of active QUIC sessions before we activate a new QUIC session.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicAlternativeProxy.Usage"
-    enum="QuicAlternativeProxyUsage">
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Breakdown of how requests which could potentially make use of an alternative
-    QUIC proxy server use or don't use the QUIC server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicClientHelloRejectReasons" enum="QuicRejectReasons">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The reject reasons for QUIC's CHLO (client hello) message from server
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicClientHelloServerConfig.HowExpired" units="ms">
-  <obsolete>
-    Deprecated 08/2014, and replaced by
-    Net.QuicClientHelloServerConfig.InvalidDuration.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    How expired server config is for sending inchoate ClientHello to the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicClientHelloServerConfig.InvalidDuration" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The time since expiration of server config when we sent inchoate ClientHello
-    to the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicClientHelloServerConfigState"
-    enum="QuicServerConfigState">
-  <obsolete>
-    Deprecated as of 11/2014. Replaced by Net.QuicInchoateClientHelloReason.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The reason (the state of the server config) for sending inchoate ClientHello
-    to the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicCloseConnection.NullVisitor" enum="BooleanNullVisitor">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of times Connection's visitor is a nullptr when CloseConnection
-    is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicCryptoClientConfig.PopulatedFromCanonicalConfig"
-    enum="BooleanPopulated">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of times CryptoClientConfig's CachedState is populated from
-    canonical config whenever we create a new CryptoClientConfig::CachedState.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicDiskCache.APICall" enum="QuicDiskCacheAPICall">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Tracks number of times data read/parse/write API calls of QuicServerInfo to
-    and from disk cache is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicDiskCache.EntryState" enum="QuicDiskCacheEntryState">
-  <obsolete>
-    Deprecated as of 10/2014.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Tracks the opening and closing of disk cache entries. Recorded each time a
-    disk cache entry is either opened or closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicDiskCache.FailureReason"
-    enum="QuicDiskCacheFailureReason">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Tracks failure reasons to read/load/write of QuicServerInfo to and from disk
-    cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicEphemeralPortsSuggested">
-  <obsolete>
-    Deprecated as of 04/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The number of ports suggested per server.</summary>
-</histogram>
-
-<histogram name="Net.QuicHandshakeNotConfirmedNumPacketsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of QUIC packets received by a QUIC connection whose handshake was
-    not confirmed when that connection is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHandshakeState" enum="QuicHandshakeState">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The state of a QUIC connection's crypto hanshake as it progresses from
-    starting to confirmation or failure.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHpackCompressionPercentage" units="%">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The compression percentage, logged for each sent HPACK compressed header
-    frame.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHpackDecoder.IndexedEntryAge" units="ms">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    For each indexed representation decoded, records the time since the
-    corresponding entry was added to the dynamic table.  This data is being
-    collected to help analyze a proposed solution to HPACK induced head of line
-    blocking.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHpackDecompressionPercentage" units="%">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The decompression percentage, logged for each received HPACK compressed
-    header frame.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHpackEncoder.IndexedEntryAge" units="ms">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    For each indexed representation encoded, records the time since the
-    corresponding entry was added to the dynamic table.  This data is being
-    collected to help analyze a proposed solution to HPACK induced head of line
-    blocking.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicHttpStream::DoStreamRequest.IsNullSession"
-    enum="Boolean">
-  <obsolete>
-    Deprecated 2016. No longer tracked.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of times QuicHttpStream's session_ is a nullptr before
-    StartRequest() is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicInchoateClientHelloReason"
-    enum="QuicServerConfigState">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The reason (the state of the server config) for sending inchoate ClientHello
-    to the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicNumSentClientHellos">
-  <owner>rch@chromium.org</owner>
-  <summary>The number of client hello messages sent.</summary>
-</histogram>
-
-<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed">
-  <obsolete>
-    see Net.QuicSession.Connect*PortForHTTP*
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of client hello messages sent when the crypto handshake was
-    confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicNumServerConfig.UpdateMessagesIgnored"
-    enum="BooleanIgnored">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>The number of times ServerConfigUpdateMessages ignored.</summary>
-</histogram>
-
-<histogram name="Net.QuicNumStreamFramesInPacket">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of stream frames bundled within a received packet.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicNumStreamFramesPerStreamInPacket">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of stream frames per stream ID within a received packet.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicReadAvailableData.NullStream" enum="BooleanNullStream">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of times QuicHttpStream's stream_ is a nullptr before
-    IsDoneReading() is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.DiskCacheLoadTime" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>Time spent to load QUIC server information from disk cache.</summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.DiskCacheReadTime" units="ms">
-  <obsolete>
-    Deprecated as of 10/2014. Replaced by DiskCacheWaitForDataReadyTime.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>Time spent to load QUIC server information from disk cache.</summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.DiskCacheState"
-    enum="QuicServerConfigState">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The state of the QUIC server information when it's loaded from the disk
-    cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Time spent waiting to load QUIC server information from disk cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.ExpectConfigMissingFromDiskCache"
-    enum="BooleanMissingFromDiskCache">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of times AlternateProtocolMap supports QUIC, but there is no QUIC
-    server information in the disk cache. This is recorded whenever QUIC server
-    information is loaded from the disk cache.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime"
-    units="Milliseconds">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The elapsed time between waiting for reading of QUIC server information from
-    disk cache, and receiving crypto handshake confirmation from the server.
-    Will measure the impact of cancelling the WaitForDataReady callback. Logged
-    after crypto handshake is confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicServerInfo.WaitForDataReadyToRtt" units="%">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The ratio of the time spent waiting to load QUIC server information from
-    disk cache to the min rtt. Logged when session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.21CumulativePacketsReceived"
-    units="Received in Ranges">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    This histogram summarizes information about a 21 packet sequence, indicating
-    for each of the 21 possible prefixes of this pattern, how many packets were
-    received in that prefix.  The first range uses buckets 0 and 1, and it
-    describes the 1st packet in the sequence.  It indicates if the first packet
-    was missing (bucket 0), or the first packet was present (bucket 1).  The
-    second range uses buckets 2 through 4, and describes the first 2 packets in
-    the prefix of this sequence.  It indicates if there were no packets received
-    in the first two packets (bucket 2), or there was one out of two packets
-    received (bucket 3), or if there was two out of tow received (bucket 4).
-    etc. etc.  Reading this histogram may require post-processing in a spread
-    sheet, but can indicate the potential value of using FEC packets to convey
-    data.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.6PacketsPatternsReceived"
-    units="Binay of Packets ACKed">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Each of the 64 buckets represents a different binary pattern of 6
-    consecutive packets that were received by the client.  The LSB of the bucket
-    number corresponds to the reception of the oldest packet.  A bit in the
-    bucket-number being 1 indicates the packet was received, and a 0 means the
-    packet was never received (by the client).
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.AbortedPendingStreamRequests"
-    units="stream requests">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The number of pending stream requests aborted when the session is closed.
-    Pending streams are those which could not be created immediately because
-    there were too many active streams.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.AsyncRead" enum="Boolean">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    True if the result of reading a packet from the network was ERR_IO_PENDING.
-    Recorded for each packet when Read() returns.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.BlockedFrames.Received">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of BLOCKED frames recevied by a QuicSession when the session is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.BlockedFrames.Sent">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The number of BLOCKED frames sent by a QuicSession when the session is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CertVerifierJob.CompleteTime"
-    units="Milliseconds">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Time spent verifying a certificate when racing cert veriifcation with host
-    resolution.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ClientSideMtu" units="bytes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The final maximum packet size of the connection used by the client before
-    the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CloseAllSessionsError" enum="NetErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The network error code which resulted in all sessions being closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ClosedDuringInitializeSession" enum="Boolean">
-  <owner>rch@chromium.org</owner>
-  <summary>
-     True if the QUIC session is closed during the call to InitializeSession,
-    logged for each session just after InitializeSession is called.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CloseSessionOnError" enum="NetErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The network error code which resulted in the session being closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.Connect" units="RTTs">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Samples of the number of round-trips needed by a QUIC connection before a
-    request could be sent by the client.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectAfterBroken" enum="BooleanSuccess">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    True if a QUIC connection connected successfully after having been broken.
-    Only emitted after a QUIC connection attempt to a server that was previous
-    marked as broken.
-  </summary>
-</histogram>
-
-<histogram
-    name="Net.QuicSession.ConnectionClose.HandshakeFailureBlackHole.QuicError"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error which caused a QUIC connection to be closed before the
-    hanshake was confirmed, in the case where no packets were received. This
-    provides a breakdown of the entires in
-    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
-    is BLACK_HOLE.
-  </summary>
-</histogram>
-
-<histogram
-    name="Net.QuicSession.ConnectionClose.HandshakeFailureUnknown.QuicError"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error which caused a QUIC connection to be closed before the
-    hanshake was confirmed, in the case where at least 1 packet was received.
-    This provides a breakdown of the entires in
-    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
-    is UNKNOWN.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason"
-    enum="QuicHandshakeFailureReason">
-  <owner>rch@chromium.org</owner>
-  <summary>The reason a QUIC handshake failed.</summary>
-</histogram>
-
-<histogram
-    name="Net.QuicSession.ConnectionClose.NumOpenStreams.HandshakeTimedOut">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of streams open when a QUIC session crypto handshake timed out.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut">
-  <owner>rch@chromium.org</owner>
-  <summary>The number of streams open when a QUIC session timed out.</summary>
-</histogram>
-
-<histogram
-    name="Net.QuicSession.ConnectionClose.NumTotalStreams.HandshakeTimedOut">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of total streams created when a QUIC session crypto handshake
-    timed out.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCode"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in the connection being closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in the connection being closed by the
-    client.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in the connection being closed by the
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionFlowControlBlocked"
-    enum="BooleanBlocked">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Whether QUIC session's connection is flow control blocked when a PING
-    message is sent to server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionMigration"
-    enum="QuicConnectionMigrationStatus">
-  <owner>jri@chromium.org</owner>
-  <summary>The result of a QUIC connection migration attempt.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionTypeFromPeer" enum="AddressFamily">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The IP Address family of this connection, as reported by the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionTypeFromSelf" enum="AddressFamily">
-  <owner>rch@chromium.org</owner>
-  <summary>The IP Address family of this connection, as seen locally.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"
-    units="RTTs">
-  <owner>jri@chromium.org</owner>
-  <summary>
-    Samples of the number of round-trips needed by a QUIC connection before a
-    request could be sent by the client, when handshake confirmation was
-    required. (The operating system randomly selected a source port for the
-    connection.)
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CookieSentToAccountsOverChannelId"
-    enum="BooleanUsage">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Logs whether channel ID was used when a cookie is sent over QUIC to
-    https://accounts.google.com.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CreationError" enum="QuicSessionErrorCodes">
-  <owner>jar@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Count of errors during attempts to create a QUIC session (before even using
-    the session).
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.DuplicatePacketsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of duplicate packets recevied by a QuicSession when the session
-    is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.FinalTcpCwnd">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The value of the TCP cubic sender's CWND when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.GoAwayReceivedForConnectionMigration"
-    enum="BooleanReceived">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    Whether QuicGoAwayFrame is received from server for connection migration due
-    to client's port change. Logged when a QuicGoAwayFrame with error code
-    QUIC_ERROR_MIGRATING_PORT is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HandshakeConfirmedTime" units="Milliseconds">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The elapsed time between starting the crypto handshake, and receiving
-    confirmation from the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HandshakeRoundTrips" units="RTTs">
-  <obsolete>
-    see Net.QuicSession.Connect*PortForHTTP*
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Samples of the number of round-trips needed by a QUIC connection before a
-    request could be sent by the client.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HeadersHOLBlockedTime" units="Milliseconds">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The elapsed time that headers are head of line blocked on others, presumably
-    due to lost headers stream packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HeadersStream.EarlyFramesReceived">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The frames received on the headers stream which arrived early.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HostResolution.HandshakeConfirmedTime"
-    units="Milliseconds">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The elapsed time between the end of resolving the DNS name of the server for
-    a QUIC connection, and receiving crypto handshake confirmation from the
-    server. Logged after crypto handshake is confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.HostResolutionTime" units="ms">
-  <obsolete>
-    Deprecated 08/2016. No longer tracked.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Time spent resolving the DNS name of the server for a QUIC connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.IncorrectConnectionIDsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number packets recevied by a QuicSession with an incorrect connection id
-    when the sesesion is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.InitialRttEsitmateSource"
-    enum="InitialRttEstimateSource">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The source for the initial RTT estimate recorded when a QUIC session is
-    created.
-  </summary>
-</histogram>
-
-<histogram
-    name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    If a QUIC connection timed out locally with open streams, this contains the
-    time since any data was read from the network until the connection was
-    closed. The suffix specifies whether there were any unacked packets pending
-    when the connection timed out.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.MaxReordering">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The maximum packet sequence number reordering observed by a QUIC connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.MaxReorderingTime" units="%">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The ratio of the maximum reordering time of a QUIC packet to the min rtt.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.MaxReorderingTimeLongRtt" units="%">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The ratio of the maximum reordering time of a QUIC packet to the min rtt,
-    only for those sessions with a min rtt larger than 100 ms.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.MinRTT" units="ms">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The minimum RTT observed during the life of a QUIC connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.MtuProbesSent">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of MTU probes sent by the client during the session.  Logged when
-    the connection is destroyed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.NumOpenStreams">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of QUIC streams opened when a new QUIC stream is created.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.NumPendingStreamRequests"
-    units="stream requests">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The number of pending stream requests when a new stream request is added to
-    the pending list.  Pending streams are those which could not be created
-    immediately because there were too many active streams.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.NumTotalStreams">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The total number of streams created by the client when the session is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.OutOfOrderGapReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of missing packets between the current received packet and the
-    previously largest received packet sequence number, when the current
-    received packet had a lower sequence number than the previously received
-    packet sequence number.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.OutOfOrderLargePacketsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of times the current received packet had a lower sequence number
-    than the previously received packet sequence number, and the size of the
-    current packet is larger than the size of the previous packet.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.OutOfOrderPacketsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of times the current received packet had a lower sequence number
-    than the previously received packet sequence number.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketGapReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of missing packets between the current received packet and the
-    previously largest received packet sequence number.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketGapReceivedNearPing" units="count">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    The number of missing packets between the last received packet before a PING
-    frame sent and the first packet received after PING sent.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketGapSent">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of missing packets between the current received packet and the
-    previously largest received packet sequence number, as reported by the
-    remote end of the connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketLossRate" units="1/10th Percent">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The ratio of the number of missing packets, to the maximum packet sequence
-    number received,  for QUIC connections longer than 21 packets received via
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketReceived" units="SequenceNumber">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Each bucket corresponds to a specific packet sequence number that was sent
-    by a server to Chrome at the start of a QUIC connection. This histogram is
-    compared, bucket by bucket, with a second histogram to compute the ratio for
-    each bucket (each packet sequence number).
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The number of packets retransmitted per 1000.  Only sessions with
-    packets_sent &gt;= 100 are included.  Recorded in session destructor.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketWriteTime">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The time taken to Write() a QUIC packet to the socket. Recorded for each
-    packet when it is sent. The suffix specifies if the write completed
-    synchonously or asynchronously.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PendingStreamsWaitTime" units="ms">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The wait time of the pending stream when it is finally serviced. Pending
-    streams are those which could not be created immediately because there were
-    too many active streams.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PreferAesGcm" enum="BooleanPreferred">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    True if the QUIC session prefers to use AES GCM because of hardware support.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PublicResetAddressMismatch"
-    enum="QuicAddressMismatch">
-  <owner>wtc@chromium.org</owner>
-  <summary>
-    When a public reset packet is received, whether the client IP address and
-    port number in it differ from the client IP address and port number in the
-    ServerHello handshake message. In the comparison, the first address is the
-    one in ServerHello and the second address is the one in public reset. Note:
-    this histogram is obsolete because it failed to treat IPv4-mapped IPv6
-    addresses as IPv4 addresses.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PublicResetAddressMismatch2"
-    enum="QuicAddressMismatch">
-  <owner>wtc@chromium.org</owner>
-  <summary>
-    When a public reset packet is received, whether the client IP address and
-    port number in it differ from the client IP address and port number in the
-    ServerHello handshake message. In the comparison, the first address is the
-    one in ServerHello and the second address is the one in public reset.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.Pushed" units="count">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The number of push streams received when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PushedAndClaimed" units="count">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The number of pushed and used streams when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PushedAndUnclaimedBytes" units="count">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    The number of bytes that is pushed but not used when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PushedBytes" units="count">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    The number of bytes that is pushed when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.QuicVersion">
-  <owner>rch@chromium.org</owner>
-  <summary>Version of the QUIC protocol used for this connection.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The network error code returned when attempting to read to a QUIC
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RejectHasProof" enum="Boolean">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    True if the QUIC REJ message received from the server contains a proof.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RejectLength">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The length in bytes of a QUIC REJ message received from the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RstStreamErrorCodeClient"
-    enum="QuicRstStreamErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in a stream being reset by the client.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RstStreamErrorCodeServer"
-    enum="QuicRstStreamErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in a stream being reset by the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.SecureResourceSecureSession">
-  <owner>rch@chromium.org.</owner>
-  <summary>
-    The number of request for secure resources over QUIC sessions. True if the
-    session is secure, false if it is not.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ServerSideMtu" units="bytes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The largest packet which the client received from the server during the
-    session.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.SmoothedRTT" units="ms">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The final smoothed RTT observed during the life of a QUIC connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamCloseErrorCodeClient.HandshakeConfirmed"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in the stream (and connection) being
-    closed by the client after the handshake was confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed"
-    enum="QuicErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The QUIC error code which resulted in the stream (and connection) being
-    closed by the client after the handshake was confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamFlowControlBlocked"
-    enum="BooleanBlocked">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Whether any of QUIC session's streams are flow control blocked when a PING
-    message is sent to server.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamFrameDuplicatedLongConnection"
-    units="1/10th Percent">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of stream frames received which were duplicates, out of every
-    1000 stream frames received. Only for QUIC sessions which received at least
-    100 packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentLongConnection">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The percentage of stream frames received which were duplicates. Only for
-    QUIC sessions which received at least 100 packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentShortConnection">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The percentage of stream frames received which were duplicates. Only for
-    QUIC sessions which received fewer than 100 packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.StreamFrameDuplicatedShortConnection"
-    units="1/10th Percent">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of stream frames received which were duplicates, out of every
-    1000 stream frames received. Only for QUIC sessions which received fewer
-    than 100 packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveRTOCount">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    If a QUIC connection timed out with open streams, this contains a count of
-    consecutive RTOs.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveTLPCount">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    If a QUIC connection timed out with open streams, this contains a count of
-    consecutive TLPs.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TimedOutWithOpenStreams.HasUnackedPackets">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    If a QUIC connection timed out with open streams, this will be true when the
-    connection has unacked packets.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TimedOutWithOpenStreams.LocalPort">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    If a QUIC connection timed out locally with open streams, this contains the
-    local port number for the connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TooManyOpenStream" enum="BooleanTooMany">
-  <obsolete>
-    Deprecated 04/2015. Tracked as Net.QuicSession.TooManyOpenStreams.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    True if more than 100 streams are open when a new stream is activated.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TooManyOpenStreams" enum="BooleanTooMany">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    True if more than 100 streams are open when a new stream is activated.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TruncatedAcksReceived">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The number of truncated ACK frames received.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.TruncatedAcksSent">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The number of truncated ACK frames sent.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.UndecryptablePacketsReceived">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The number of undecryptable packets recevied by a QuicSession when the
-    sesesion is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.UnexpectedNotGoingAway"
-    enum="QuicSessionLocations">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The location in quic_client_session.cc where a session is unexpectedly not
-    going away.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.UnexpectedObservers"
-    enum="QuicSessionLocations">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The location in quic_client_session.cc where there were unexpected
-    observers.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.UnexpectedOpenStreams"
-    enum="QuicSessionLocations">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The location in quic_client_session.cc where there were unexpected open
-    streams.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.VerifyProofTime" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Time spent verifying the signature and certificate chain. This is logged
-    whenever QUIC verifies the certificate chain and signature during crypto
-    handshake.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.WriteError" enum="NetErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The network error code returned when attempting to write to a QUIC
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.BadPacketLossEvents5"
-    enum="QuicBadPacketLossEvents">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    A count of how often a user hits 1, 2, 3, 4 and 5 bad packet loss events for
-    port 443. Recorded whenever QUIC has bad packet loss (high packet loss on
-    multiple consecutive connections).
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.DisabledReasons"
-    enum="QuicDisabledReason">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    Rrecords reasons QUIC is disabled (for all ports), if sufficent recent
-    connections experience: public reset post crypto handshake, or timeouts with
-    streams open. QUIC is disabled until the next reboot of Chrome. Logged
-    during session close.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.PublicResetsPostHandshake"
-    units="resets">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    Captures the maximum number of public resets post handshake that occurred
-    within a window of recent connections (default 20). Will help inform the
-    choice of threshold to disable QUIC for clients that experience pathalogical
-    errors. Logged during session close.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.QuicIsDisabled" enum="Ports">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Recorded whenever QUIC is disabled for a port due to repeated lossy
-    connections (high packet loss on multiple consecutive connections). QUIC is
-    disabled until next reboot of Chrome.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.TimeoutsWithOpenStreams"
-    units="timeouts">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    Captures the maximum number of connection timeouts with streams open that
-    occurred within a window of recent connections (default 20). Will help
-    inform the choice of threshold to disable QUIC for clients that experience
-    pathalogical errors. Logged during session close.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicStreamFactory.TSVIPCliIsLoaded" enum="Boolean">
-  <obsolete>
-    Deprecated 06/2016. No longer tracked.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Whether TSVIPCli DLL is loaded or not on windows when the socket is
-    configured.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicTimeBetweenTwoPacketSent" units="ms">
-  <obsolete>
-    Deprecated 08/2016. No longer tracked.
-  </obsolete>
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    Time duration from last packet sent to a new packet sent in QUIC connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.QuicVerifyProofFailed.HandshakeConfirmed"
-    enum="BooleanHandshakeConfirmed">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Logged whenever proof verification fails and if the failure occurred before
-    or after the crypto handshake is confirmed.
-  </summary>
-</histogram>
-
-<histogram name="Net.RenegotiationExtensionSupported">
-  <obsolete>
-    Deprecated 03/2015. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if the HTTP request was sent to a server which supports the TLS
-    renegotiation extension.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime">
-  <obsolete>
-    Replaced by Net.RequestTime2 due to bug in original implementation.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    success and various different errors.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    success and various different errors.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2.ErrAborted.HttpScheme" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    ERR_ABORTED when the request's scheme is http/s.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2.ErrAborted.NetworkContent" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    ERR_ABORTED when the requests TotalReceivedBytes() &gt; 0.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2.ErrAborted.NoBytesRead" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
-    received_response_content_length() = 0.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2.ErrAborted.NoNetworkContent.CachedContent"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
-    received_response_content_length() &gt; 0.
-  </summary>
-</histogram>
-
-<histogram name="Net.RequestTime2.ErrAborted.NonHttpScheme" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The amount of time between request initiation and request completion for
-    ERR_ABORTED when the request's scheme is not http/s.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResourceLoader.ExpectedContentSizeResult"
-    enum="ResourceLoaderExpectedContentSizeResult">
-  <owner>maksim.sisov@intel.com</owner>
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Records how many times expected content size equals/less/more than size of
-    read body/buffer or content size is unkown. Recorded for each resource load.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResourceLoader.InliningStatus"
-    enum="ResourceLoaderInliningStatus">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Counts whether the chunk inlining is applicable or not to a resource
-    loading. Counts the reason if inapplicable.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResourceLoader.ReadDeferral" units="ms">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    When starting a cross-site navigation, the time between reading the headers
-    and body of the response.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResourceLoader.ResponseStartToEnd" units="microseconds">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Time from the start to the end of receiving a response body. Recorded for
-    each resource load.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResponseSizeByProcess.Browser" units="KB">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
-    the browser process.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResponseSizeByProcess.Renderer" units="KB">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
-    a renderer process.
-  </summary>
-</histogram>
-
-<histogram name="Net.ResponseSizeByProcess.Unknown" units="KB">
-  <owner>juliatuttle@chromium.org</owner>
-  <summary>
-    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
-    a process not covered by one of the other ResponseSizeByProcess histograms.
-  </summary>
-</histogram>
-
-<histogram name="Net.Socket.IdleSocketFate" enum="IdleSocketFate">
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    Whether an idle socket is reused, timed out, or closed to make room for new
-    sockets.
-  </summary>
-</histogram>
-
-<histogram name="Net.Socket.IdleSocketReuseTime" units="seconds">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Seconds a socket was idle before it was reused. Emitted upon reuse. Does not
-    record the times sockets were idle before first use.
-  </summary>
-</histogram>
-
-<histogram name="Net.Socket.IdleSocketTimeSaving" units="ms">
-  <obsolete>
-    Deprecated as of 11/2016.
-  </obsolete>
-  <owner>xunjieli@chromium.org</owner>
-  <summary>
-    Number of milliseconds an idle socket saved in connection establishment
-    because it is reused.
-  </summary>
-</histogram>
-
-<histogram name="Net.Socket.NumIdleSockets">
-  <owner>mmenke@chromium.org</owner>
-  <summary>Number of idle sockets when one of them was reused.</summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time an already used socket sat idle before being used.</summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an unused socket (all HTTP sockets, regardless of any proxy used)
-    sat idle before being used.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time a previously used socket sat idle before encountering a recoverable
-    socket IO error (connection abort/reset/close).
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an unused socket sat idle before encountering a recoverable socket
-    IO error (connection abort/reset/close).
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Net error codes that socket initializations end with, including net::OK and
-    net::ERR_ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketReceiveBufferUnchangeable" units="Bytes">
-  <obsolete>
-    Replaced by Net.SocketUnchangeableReceiveBuffer 3/31/2014.
-  </obsolete>
-  <owner>jar@chromium.org</owner>
-  <summary>
-    The size of a socket's receive buffer when the attempt to change it via
-    setsockopt failed.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketRequestTime">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time in milliseconds from initial RequestSocket() call until successfully
-    acquiring a connected socket.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionEstablish" units="ms">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>The time from the connection start to connection establish.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionLatency" units="ms">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>The time waiting to be ready to start connecting.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionType"
-    enum="SocketStreamConnectionType">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Each bucket is the number of connection type of socket stream.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.Duration" units="ms">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. Replaced by
-    Net.WebSocket.Duration.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>The time a socket stream was open.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Each bucket is the number of protocol type on socket stream.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ReceivedBytes" units="bytes">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>Number of bytes on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ReceivedCounts">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>Number of reads on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.SentBytes" units="bytes">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>Number of bytes on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.SentCounts">
-  <obsolete>
-    Deprecated 2014-10-28. No longer generated. No direct replacement.
-  </obsolete>
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>Number of Write on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketType" enum="HttpSocketType">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The counts of the type of sockets returned by the socket pools.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketUnchangeableReceiveBuffer" units="Bytes">
-  <owner>jar@chromium.org</owner>
-  <summary>
-    The size of a socket's receive buffer when the attempt to change it via
-    setsockopt failed.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocketUnchangeableSendBuffer" units="Bytes">
-  <owner>jar@chromium.org</owner>
-  <summary>
-    The size of a socket's send buffer when the attempt to change it via
-    setsockopt failed.
-  </summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
-  <obsolete>
-    see SocketIdleTimeBeforeNextUse_ReusedSocket_SOCK
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an already used SOCKS socket sat idle before being used.
-  </summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
-  <obsolete>
-    see SocketIdleTimeBeforeNextUse_UnusedSocket_SOCK
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time an unused SOCKS socket sat idle before being used.</summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketRequestTime" units="ms">
-  <obsolete>
-    see SocketRequestTime_SOCK
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from initial SOCKSClientSocketPool::RequestSocket() call until
-    successfully acquiring a connected SOCKS socket.
-  </summary>
-</histogram>
-
-<histogram name="Net.SocksSocketRequestTime">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time it takes to request a new (unused) SOCKS proxy socket.</summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketType" enum="HttpSocketType">
-  <obsolete>
-    see SocketType_SOCK
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The counts of the type of sockets returned by the SOCKS pool.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyConnectionLatency" units="ms">
-  <obsolete>
-    Replaced by Net.SpdyConnectionLatency_2 on 2014-10-21.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SpdyConnectionLatency_2" units="ms">
-  <owner>bnc@chromium.org</owner>
-  <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SpdyFrameStreamAndSessionFlowControlState"
-    enum="SpdyFrameFlowControlState">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The counts of the flow control state of each frame (with stream and session
-    flow control on).
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyFrameStreamFlowControlState"
-    enum="SpdyFrameFlowControlState">
-  <obsolete>
-    The last protocol which would trigger this was deprecated in 2014 November.
-    This histogram is deprecated in 2016 January.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The counts of the flow control state of each frame (with stream flow control
-    on).
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyHeadersCompressionPercentage" units="%">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The percent compression achieved when compressing HEADERS frames.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyHpackDecompressionPercentage" units="%">
-  <owner>ckrasic@chromium.org</owner>
-  <summary>
-    The compression percentage in received HPACK compressed header frames.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyHpackEncodedCharacterFrequency" units="ASCII codes">
-  <obsolete>
-    Obsolete as HTTP/2 standard is finalized.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Frequencies of characters observed in request and response headers.
-    Temporarily being collected to inform the construction of an optimized
-    Huffman code for the HTTP/2 specification. Buckets are ASCII codes offset by
-    1.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
-    units="count">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Status of checking if a SPDY domain can handle a IP match.  If a match is
-    found, we successfully used the IP Pooling.  If a match is not found, we
-    could have used IP Pooling, except the TLS Cert didn't match the IP-pooled
-    domain.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyPing.RTT" units="ms">
-  <owner>bnc@chromium.org</owner>
-  <summary>The RTT for SPDY's PING.</summary>
-</histogram>
-
-<histogram name="Net.SpdyPriorityCount">
-  <obsolete>
-    Removed 2016-05-26.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The count of streams at each priority over Spdy sessions.</summary>
-</histogram>
-
-<histogram name="Net.SpdyRecvBytes" units="bytes">
-  <owner>bnc@chromium.org</owner>
-  <summary>The number of bytes recevied per stream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySendBytes" units="bytes">
-  <owner>bnc@chromium.org</owner>
-  <summary>The number of bytes sent per stream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Total number of bytes recevied per session before closing session due to
-    EOF.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Total number of bytes recevied per session before closing session due to an
-    error during read.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes">
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Net error codes when SpdySession was closed, doesn't inlcuding net::OK.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.CreateStreamWithSocketConnected"
-    enum="BooleanSuccess">
-  <owner>bnc@chromium.org</owner>
-  <summary>Socket connected status in SpdySession::CreateStream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySession.PushedAndUnclaimedBytes" units="count">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    The number of bytes that is pushed but not used when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.PushedBytes" units="count">
-  <owner>zhongyi@chromium.org</owner>
-  <summary>
-    The number of bytes that is pushed when the session is closed.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails" enum="SpdyProtocolErrorDetails"
-    units="count">
-  <obsolete>
-    Replaced by SpdySessionErrorDetails2 on 2013-04-19.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    WARNING: r181910 added an enum value in the middle, so don't trust the
-    counts for values 9 and above for Chrome builds after that revision.
-
-    The type of SPDY Protocol error encountered.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
-    units="count">
-  <owner>bnc@chromium.org</owner>
-  <summary>The type of SPDY Protocol error encountered.</summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails_Google"
-    enum="SpdyProtocolErrorDetails" units="count">
-  <obsolete>
-    Replaced by SpdySessionErrorDetails_Google2 on 2013-04-19.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The type of SPDY Protocol error encountered when talking to a google.com
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails_Google2"
-    enum="SpdyProtocolErrorDetails2" units="count">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    WARNING: r181910 added an enum value in the middle, so don't trust the
-    counts for values 9 and above for Chrome builds after that revision.
-
-    The type of SPDY Protocol error encountered when talking to a google.com
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionGet" enum="SpdySessionGet" units="count">
-  <owner>bnc@chromium.org</owner>
-  <summary>The type of SPDY Session used when looking up a session.</summary>
-</histogram>
-
-<histogram name="Net.SpdySessionGetPeerAddressNotConnected"
-    enum="BooleanSuccess">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    Whether SpdySession::Get{Peer,Local}Address was called when the connection
-    had no socket.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessions_DataReductionProxy"
-    enum="BooleanDataReductionProxy">
-  <obsolete>
-    Deprecated 7/21/2014. No longer tracked.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The count of SPDY sessions using the data reduction proxy and the count of
-    other SPDY sessions.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionSocketNotConnectedGetLocalAddress"
-    enum="BooleanSuccess">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    SpdySession::GetLocalAddress returned ERR_SOCKET_NOT_CONNECTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionSocketNotConnectedGetPeerAddress"
-    enum="BooleanSuccess">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    SpdySession::GetPeerAddress returned ERR_SOCKET_NOT_CONNECTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionsWithStalls">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The count of SPDY Sessions with or without stalls.</summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsCwnd" units="packets">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The congestion window (in pkts) received at the end of a SpdySession.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsCwndSent" units="packets">
-  <obsolete>
-    Deprecated 2016 July with removal of SPDY/3.1.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The congestion window (in pkts) sent at the beginning of a SpdySession.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsReceived" enum="SpdySettingsReceived"
-    units="%">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    Percentage of sessions which received settings from the server.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsRetransRate" units="%">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The Download Retransmission Rate (%) received at the end of a SpdySession.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsRTT" units="ms">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The RTT received at the end of a SpdySession.</summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>Percentage of sessions which sent settings to the server.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamDownloadTime" units="ms">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The time between receiving the first chunk and the last chunk of data on a
-    Spdy stream.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsAbandonedPerSession">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The number of pushed, but abandoned streams over a single session.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPerSession">
-  <owner>bnc@chromium.org</owner>
-  <summary>The number of streams issued over a single session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPushedAndClaimedPerSession">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The number of pushed, and used streams over a single session.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPushedPerSession">
-  <owner>bnc@chromium.org</owner>
-  <summary>The number of push streams received over a single session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamStallsPerSession">
-  <obsolete>
-    Removed on 2016-10-10.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>The number of stream stalls per session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamTime" units="ms">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The time of a Spdy stream.  Measured from sending the first chunk to
-    receiving the last chunk of data.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamTimeToFirstByte" units="ms">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The time between sending the request and receiving the first chunk of data
-    on a Spdy stream.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdySynStreamCompressionPercentage" units="%">
-  <obsolete>
-    Deprecated on 2016-11-28, because SPDY/3 and, accordingly, SYN_STREAM frames
-    are no longer used.  Compression values are now calculated slightly
-    differently.  Replaced by Net.SpdyHeadersCompressionPercentage.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The percent compression achieved when compression SYN_STREAM frames.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyVersion" enum="ProtocolVersion">
-  <obsolete>
-    Deprecated on 2014-09-11, because the uploaded values were changing as
-    protocols were removed, therefore statistics couldn't be combined across
-    different builds.  Replaced by Net.SpdyVersion2.
-  </obsolete>
-  <owner>rch@chromium.org</owner>
-  <summary>
-    The SPDY protocol version that is used to talk to SPDY servers.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyVersion2" enum="SpdyProtocolVersion">
-  <obsolete>
-    Deprecated on 2016-02-01, because the incorrect bucket count caused data
-    corruption.  Replaced by Net.SpdyVersion3.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The SPDY protocol version that is used to talk to SPDY servers.  Logged
-    every time a SPDY session is initialized.
-  </summary>
-</histogram>
-
-<histogram name="Net.SpdyVersion3" enum="SpdyProtocolVersion">
-  <obsolete>
-    Deprecated 2016 July with removal of SPDY/3.1.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    The SPDY protocol version that is used to talk to SPDY servers.  Logged
-    every time a SPDY session is initialized.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_AuthRootConsistency" enum="SSLAuthRootConsistency">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The results of comparing the built-in list of known Windows roots against
-    the CERT_AUTH_ROOT_SHA256_HASH_PROP_ID certificate property. Recorded for
-    each certificate verification on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_CipherSuite" enum="SSLCipherSuite">
-  <owner>agl@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The SSL/TLS cipher suite that was negotiated. Recorded for each SSL/TLS
-    connection in the socket pool where Connect() succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Error" enum="NetErrorCodes">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned when opening an SSL connection.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Error_FastRadioPadding"
-    enum="NetErrorCodes">
-  <obsolete>
-    Removed 7/21/2015. No longer tracked.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned when opening an SSL connection for
-    an endpoint which is eligible for fastradio padding.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Error_Google" units="NetErrorCodes">
-  <owner>svaldez@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned when opening an SSL connection for
-    google.com and any subdomain of it.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Error_TLS13Experiment"
-    units="NetErrorCodes">
-  <owner>svaldez@chromium.org</owner>
-  <summary>
-    Counts of specific error codes returned when opening an SSL connection for
-    an endpoint we are using in the initial TLS 1.3 deployment.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency" units="ms">
-  <obsolete>
-    Replaced by Net.SSL_Connection_Latency_2 on 2014-10-21.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_2" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 7/21/2014. No longer tracked.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes when using the data
-    reduction proxy. This includes certificate retrieval and verification.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Full_Handshake" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for full handshakes.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google" units="ms">
-  <obsolete>
-    Replaced by Net.SSL_Connection_Latency_Google2 on 2014-10-21.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google2" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_Full_Handshake" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it for full handshakes.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_No_Revocation_Checking"
-    units="ms">
-  <obsolete>
-    Removed in 2011.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it. This only includes users in a 50% field trial that
-    disables revocation checking for certificate pinned sites.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_Resume_Handshake" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it for resumption handshakes.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_Revocation_Checking"
-    units="ms">
-  <obsolete>
-    Removed in 2011.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for google.com and
-    any subdomain of it. This only includes users not in a 50% field trail that
-    disables revocation for certificate pinned sites.
-  </summary>
-</histogram>
-
-<histogram
-    name="Net.SSL_Connection_Latency_PostQuantumSupported_Full_Handshake"
-    units="ms">
-  <obsolete>
-    Deprecated as of 2016-12-01.
-  </obsolete>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes (full handshakes
-    only), for a set of domains that we expect to always offer the experimental
-    post-quantum (CECPQ1) ciphersuites.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Resume_Handshake" units="ms">
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for resumption
-    handshakes.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_TLS13Experiment" units="ms">
-  <owner>svaldez@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes for a set of domains
-    that we are using in the initial TLS 1.3 deployment.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_PostQuantum_Negotiated"
-    enum="BooleanSupported">
-  <obsolete>
-    Deprecated as of 2016-12-01.
-  </obsolete>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    For only browsers in the post-quantum (CECPQ1) ciphersuite experiment,
-    counts the full TLS handshakes where CECPQ1 was, or was not, negotiated on
-    hosts where we expect it to be negotiated.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_EVCertificateCTCompliance"
-    enum="CTRequirementCompliance">
-  <obsolete>
-    Deprecated as of 01/2016.
-  </obsolete>
-  <owner>eranm@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The state of compliance with Certificate Transparency presence requirements
-    for each EV certificate. An EV certificate could be non-compliant (in which
-    case it loses the EV status), comply through inclusion in the EV whitelist
-    or have the required number of Signed Certificate Timestamps. This metric
-    will gauge adoption rate of Certificate Transparency and will help identify
-    when the EV whitelist is no longer needed. Emitted during every SSL
-    connection establishment, but only if the client is checking compliance with
-    Certificate Transparency requirements (currently guarded by a Finch
-    experiment).
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_EVCertificateInWhitelist" enum="Boolean">
-  <owner>eranm@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether an EV certificate is present in the Certificate Transparency
-    whitelist. Emitted once for every EV certificate encountered (during SSL
-    connection establishment), but only if the client has a valid whitelist.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_EVCTCompliance" enum="EVCTCompliance">
-  <owner>eranm@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The state of compliance with Certificate Transparency presence requirements
-    for each EV certificate. An EV certificate could be non-compliant (in which
-    case it loses the EV status), comply through inclusion in the EV whitelist
-    or comply with the CT certificate policy. This metric will gauge adoption
-    rate of Certificate Transparency and will help identify when the EV
-    whitelist is no longer needed. Emitted during every SSL connection
-    establishment.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_EVWhitelistValidityForNonCompliantCert"
-    enum="EVWhitelistStatus">
-  <owner>eranm@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether the client holds a valid EV Certificates whitelist or not. Only
-    emitted when an EV cert that is not compliant with the Certificate
-    Transparency requirement is encountered. This histogram is intended to be
-    short-lived and help determine if EV certificates are considered
-    non-compliant because they are not whitelisted or if the client does not
-    hold a valid instance of the whitelist.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_KeyExchange.DHE">
-  <obsolete>
-    Removed September 2016.
-  </obsolete>
-  <owner>sigbjorn@opera.com</owner>
-  <owner>agl@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Bit strength of the key exchange for DHE. Recorded for each SSL/TLS
-    connection in the socket pool where Connect() succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_KeyExchange.ECDHE" enum="ECDHECurves">
-  <owner>sigbjorn@opera.com</owner>
-  <owner>agl@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    The curve used for key exchange for ECDHE. Recorded for each SSL/TLS
-    connection in the socket pool where Connect() succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSL_KeyExchange.RSA">
-  <obsolete>
-    Removed May 2016.
-  </obsolete>
-  <owner>sigbjorn@opera.com</owner>
-  <owner>agl@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Bit strength of the key exchange for RSA. Recorded for each SSL/TLS
-    connection in the socket pool where Connect() succeeds. See |SSL_SESSION|'s
-    key_exchange_info for more information.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLCertBlacklisted">
-  <obsolete>
-    Removed on 01/2016. Only ever measured blacklisted Comodo serials, not any
-    of the other blacklisted certificates and keys.
-  </obsolete>
-  <owner>agl@chromium.org</owner>
-  <summary>
-    Counts the number of times that users have hit blacklisted certificates. The
-    indexes match up to the indexes in
-    net/base/x509_certificate.cc:IsBlacklisted. The details of the certificates
-    in question is confidential.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLCertVerificationTime" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>Time to complete a certificate verification (success case).</summary>
-</histogram>
-
-<histogram name="Net.SSLCertVerificationTimeError" units="ms">
-  <owner>rsleevi@chromium.org</owner>
-  <summary>Time to complete a certificate verification (error case).</summary>
-</histogram>
-
-<histogram name="Net.SSLFallbackErrorCode" enum="NetErrorCodes">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each successful HTTPS request which used the TLS version fallback, the
-    error code of the last failed attempt.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLFallbackFailureState" enum="SSLFailureState">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each successful HTTPS request which used the TLS version fallback, the
-    type of handshake failure of the last failed attempt.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoDNSLookup" units="ms">
-  <obsolete>
-    Removed in 2011.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time to complete a DNS lookup for a DNS CAA record.</summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="ms">
-  <obsolete>
-    Removed in 2011.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time that we would have wasted had we waited for a CAA lookup in order to
-    validate a certificate.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoVerificationTimeMs" units="ms">
-  <obsolete>
-    Removed in 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time to complete a speculative certificate verification.</summary>
-</histogram>
-
-<histogram name="Net.SSLNegotiatedAlpnProtocol"
-    enum="SSLNegotiatedAlpnProtocol">
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    For each TLS handshake, whether ALPN was negotiated; and if so, the
-    negotiated protocol.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLProtocolErrorCipher" enum="SSLCipherSuite">
-  <obsolete>
-    Removed in March 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The cipher suite used when the corresponding operation on an SSLClientSocket
-    fails with ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
-    https://crbug.com/593963 is resolved.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLProtocolErrorReason" enum="BoringSSLReasonCode">
-  <obsolete>
-    Removed in March 2016.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The internal, version-specific BoringSSL error reason reported when the
-    corresponding operation on an SSLClientSocket fails with
-    ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
-    https://crbug.com/593963 is resolved.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLProtocolNegotiation" enum="SSLProtocolNegotiation">
-  <obsolete>
-    Superseded by Net.SSLNegotiatedAlpnProtocol in 2016 August.
-  </obsolete>
-  <owner>bnc@chromium.org</owner>
-  <summary>
-    TLS extension used to negotiate protocol (ALPN or NPN); in case of NPN,
-    whether the protocol is indeed supported by both the client and the server
-    or is a fallback because of no overlap; and the negotiated protocol itself.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLServerKeyExchangeHash" enum="SSLHashAlgorithm">
-  <obsolete>
-    Replaced by Net.SSLSignatureAlgorithm.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each SSL connection with a full handshake using a DHE- or ECDHE-based
-    key exchange, the hash function used in the ServerKeyExchange signature.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLSessionConcurrentLookupCount">
-  <owner>nharper@chromium.org</owner>
-  <summary>
-    For each SSL connection where we resume a session and negotiate HTTP/2, the
-    simulated minimum number of sessions retained per host it would have
-    required with TLS 1.3 single-use sessions. See https://crbug.com/631988.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLSessionVersionMatch" enum="BooleanMatched">
-  <obsolete>
-    Removed on 2015-11-10.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each SSL connection that resumed a session, whether the session was
-    resumed at the same version it was established at. This is only recorded in
-    BoringSSL ports.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLSignatureAlgorithm" enum="SSLSignatureAlgorithm">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    For each SSL connection with a full handshake using a DHE- or ECDHE-based
-    key exchange, the signature algorithm used to authenticate the peer. In TLS
-    1.2, this is the signature on the ServerKeyExchange message. (Note: Although
-    the ECDSA values specify a curve, the curve is only enforced in TLS 1.3.)
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLv3FallbackToRenegoPatchedServer"
-    enum="TLSRenegotiationPatched">
-  <obsolete>
-    Removed on 2014-08-20.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times that we have performed SSLv3 fallback and found a TLS
-    renegotiation patched server.
-  </summary>
-</histogram>
-
-<histogram name="Net.SSLVerificationMerged">
-  <obsolete>
-    Removed in 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Was a speculative certificate verification used?</summary>
-</histogram>
-
-<histogram name="Net.SSLVerificationMergedMsSaved" units="ms">
-  <obsolete>
-    Removed in 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time saved by a speculative certificate vertification.</summary>
-</histogram>
-
-<histogram name="Net.SSLVersion" enum="SSLOrQUICVersion">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The SSL/TLS version that was negotiated. Recorded for each SSL/TLS
-    connection in the socket pool where Connect() succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Idle_Sockets">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Number of idle sockets when the Connect() succeeded.</summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes.  Only times under 10
-    minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv4_No_Race" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes when the network
-    address only contains IPv4 addresses.  Only times under 10 minutes are
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv4_Wins_Race" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes when the IPv4
-    fallback connection won the race against IPv6.  Only times under 10 minutes
-    are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv6_Raceable" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes when we race an IPv6
-    connection against an IPv4 connection with a 300ms delay.  Only times under
-    10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv6_Solo" units="ms">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Time from when the Connect() starts until it completes when the network
-    address only contains IPv6 addresses.  Only times under 10 minutes are
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus">
-  <owner>jri@chromium.org</owner>
-  <summary>
-    For sockets for which a TCP Fast Open protocol might be used, the result of
-    trying to use it.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
-  <obsolete>
-    see SocketIdleTimeBeforeNextUse_ReusedSocket_TCPforSOCKS
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an already used TCP socket sat idle before being used for a SOCKS
-    request.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
-  <obsolete>
-    see SocketIdleTimeBeforeNextUse_UnusedSocket_TCPforSOCKS
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an unused TCP socket sat idle before being used for a SOCKS
-    request.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketRequestTime" units="ms">
-  <obsolete>
-    see SocketRequestTime_TCPforSOCKS
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from initial SOCKSClientSocketPool::RequestSocket() call until
-    successfully acquiring a connected TCP socket.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType">
-  <obsolete>
-    see SocketType_TCPforSOCKS
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The counts of the type of sockets returned by the TCP pool used by the SOCKS
-    pool.
-  </summary>
-</histogram>
-
-<histogram name="Net.TcpRtt.AtDisconnect" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    The kernel's estimated TCP round trip time. Recorded for each TCP socket, at
-    the time it is disconnected.
-  </summary>
-</histogram>
-
-<histogram name="Net.TCPSocketType" enum="HttpSocketType">
-  <obsolete>
-    Was only used for HTTP[S] connections, renamed to Net.HTTPSocketType.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The counts of the type of TCP socket returned.</summary>
-</histogram>
-
-<histogram name="Net.ThreadHopResourceThrottleTime" units="ms">
-  <obsolete>
-    Experiment complete, code removed.
-  </obsolete>
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The time it took to do an IO to UI round-trip in the
-    ThreadHopResourceThrottle. This is part of an experiment to determine the
-    feasibility to moving some high-level resource loading checks to the UI
-    thread.
-  </summary>
-</histogram>
-
-<histogram name="Net.TokenBinding.HeaderCreationTime" units="ms">
-  <owner>nharper@chromium.org</owner>
-  <summary>Time spent creating a Token-Binding header.</summary>
-</histogram>
-
-<histogram name="Net.TokenBinding.KeyMatch" enum="TokenBinding.KeyMatch">
-  <owner>nharper@chromium.org</owner>
-  <summary>
-    Logs on each request that is sent on a connection where Channel ID was sent
-    whether the key that would be used for Token Binding matches the key used
-    for Channel ID.
-  </summary>
-</histogram>
-
-<histogram name="Net.TokenBinding.StoreEphemerality"
-    enum="TokenBinding.StoreEphemerality">
-  <owner>nharper@chromium.org</owner>
-  <summary>
-    For each request to accounts.google.com on a connection where Channel ID was
-    sent, this logs whether the Cookie store and the Channel ID store were
-    ephemeral or persistent.
-  </summary>
-</histogram>
-
-<histogram name="Net.TokenBinding.Support" enum="TokenBinding.Support">
-  <owner>nharper@chromium.org</owner>
-  <summary>
-    The number of secure HTTP requests broken down by support for Token Binding,
-    indicating if Token Binding was negotiated and supported by both client and
-    server, or why it wasn't if not.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Bandwidth" units="KB/s">
-  <obsolete>
-    Discontinued as of 4/12/09
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Effective bandwidth in KByte/Second of transactions logged to
-    Transaction_Latency histogram.  Note that only samples durations greater
-    than zero ms, and less than 1 hour are tallied into this ratio.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the when the network transaction is requested, until the first
-    byte of the header is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_New" units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Connected_New_b.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When a new connection is established, the time from the when the network
-    transaction is requested, until the first byte of the header is received.
-    Only items under 10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_New_b" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When a new connection is established, the time from the when the network
-    transaction is requested, until the first byte of the header is received.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_Under_10" units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Connected.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from the when the network transaction is requested, until the first
-    byte of the header is received.  Only items under 10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency" units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Latency_b.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from first byte sent until last byte received by the new network stack.
-    Only items under 1 hour are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_b" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from first byte sent until last byte received by the new network stack.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a network transaction is requested until last byte received
-    by the new network stack.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_New_Connection" units="ms">
-  <obsolete>
-    Deprecated as of 11/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When an existing TCP/IP connection is NOT reused, the time from when a
-    network transaction is requested until last byte received by the new network
-    stack.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_New_Connection_Under_10"
-    units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Latency_Total_New_Connection.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When an existing TCP/IP connection is NOT reused, the time from when a
-    network transaction is requested until last byte received by the new network
-    stack.  Only items under 10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_Under_10" units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Latency_Total.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a network transaction is requested until last byte received
-    by the new network stack.  Only items under 10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Under_10" units="ms">
-  <obsolete>
-    Replaced by Net.Transaction_Latency.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from first byte sent until last byte received by the new network stack.
-    Only items under 10 minutes are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_WinHTTP" units="ms">
-  <obsolete>
-    Deprecated a long time ago.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from first byte sent until last byte received with old WinHTTP network
-    stack.  Only items under 1 hour are logged.
-  </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket">
-  <obsolete/>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an already used TCP socket sat idle before being used (either for
-    direct or non-socks use).
-  </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket">
-  <obsolete/>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time an unused TCP socket sat idle before being used (either for direct
-    or non-socks use).
-  </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketRequestTime" units="ms">
-  <obsolete/>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from initial ClientSocketPool::RequestSocket() call until successfully
-    acquiring a connected socket (either for direct or non-socks use).
-  </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketType" enum="HttpSocketType">
-  <obsolete/>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The counts of the type of sockets returned by the TCP pool (either for
-    direct or non-socks use).
-  </summary>
-</histogram>
-
-<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Posix error code from call to bind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Windows error code from call to bind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UdpSocketRandomBindErrorCode" enum="NetErrorCodes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Chromium error code from call to RandomBind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UDPSocketWinClose" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
-</histogram>
-
-<histogram name="Net.URLRequest.ReferrerPolicyHeaderPresentOnRedirect"
-    enum="BooleanPresent">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Records the usage of the Referrer-Policy header on redirect responses. This
-    histogram is recorded on each HTTP redirect response, with the value true if
-    a Referrer-Policy header was present and false otherwise.
-  </summary>
-</histogram>
-
-<histogram name="Net.URLRequest_SetReferrer_IsEmptyOrValid" enum="Boolean">
-  <obsolete>
-    Deprecated 6/23/2014. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>True if a URLRequest's referrer is empty or valid when set.</summary>
-</histogram>
-
-<histogram name="Net.WebSocket.DeflateMode"
-    enum="WebSocketNewPerMessageDeflateContextTakeoverMode">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of WebSockets that accepted permessage-deflate extension
-    for each context take over mode. Used by the new Chromium-based WebSocket
-    implementation.
-  </summary>
-</histogram>
-
-<histogram name="Net.WebSocket.Duration" units="ms">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    The time from a WebSocket is successfully opened until it's closed. Used to
-    study how WebSockets are used.
-  </summary>
-</histogram>
-
-<histogram name="Net.WebSocket.ErrorCodes" enum="NetErrorCodes">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Positive net error codes that WebSockets end with, including OK and ABORTED.
-  </summary>
-</histogram>
-
-<histogram name="Net.WebSocket.HandshakeResult"
-    enum="WebSocketNewHandshakeResult">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Results of WebSocket handshakes. Use this histogram as a baseline for
-    investigating feature usage counters.
-  </summary>
-</histogram>
-
-<histogram name="Net.WebSocket.ResponseCode" enum="HttpResponseCode">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>All HTTP status codes seen during WebSocket handshakes.</summary>
-</histogram>
-
-<histogram name="Net.Wifi.InterfaceCount">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The number of Wi-fi adapters on the computer. Because the histogram is
-    logged each time Chrome performs a Wi-fi scan, it's better to see results in
-    the &quot;user count&quot; view.
-  </summary>
-</histogram>
-
-<histogram name="Net.Wifi.LbsLatency" units="ms">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>The time that a request to Location Based Services takes.</summary>
-</histogram>
-
-<histogram name="Net.Wifi.ScanLatency" units="ms">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>The time that a Wi-fi scan takes.</summary>
-</histogram>
-
-<histogram name="Net.WpadQuickCheckFailure" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration of time that a failing WPAD QuickCheck takes. WPAD QuickCheck does
-    a name lookup for &quot;wpad&quot; and times out quickly to fail fast when
-    there's no WPAD server on the network.
-  </summary>
-</histogram>
-
-<histogram name="Net.WpadQuickCheckSuccess" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration of time that a successful WPAD QuickCheck takes. WPAD QuickCheck
-    does a name lookup for &quot;wpad&quot; and times out quickly to fail fast
-    when there's no WPAD server on the network.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the first pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the first pipeline connectivity response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the first pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the second pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the second pipeline connectivity
-    response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the second pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the third pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the third pipeline connectivity response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the third pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the fourth pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the fourth pipeline connectivity
-    response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the fourth pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the fifth pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the fifth pipeline connectivity response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the fifth pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The network error, if any, of the stats pipeline connectivity request.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.ResponseCode">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The HTTP response code, if any, of the stats pipeline connectivity response.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The result of the stats pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if all requests received by the pipelining test server were HTTP/1.1.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if the non-pipelined canary request sent immediately before the
-    pipelining test requests succeeded. Note that if this fails, the rest of the
-    NetConnectivity.Pipeline.* stats are not collected.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.Depth">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The maximum depth of pipelined requests received by the test server.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 05/2014, related field trial already long expired.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>True if the entire pipeline connectivity trial passed.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21">
-  <obsolete>
-    Deprecated 6/25/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
-    rapidly as possible, just after successfully sending an UMA upload. Each
-    packet was numbered, as was its ACK sent back by Google. If no packets (of
-    the 21) were ever ACKed, then the port is assumed to be blocked, and no data
-    is recorded in this histogram. If the port is not blocked, then this
-    histogram shows the number of echo responses received from the first
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket">
-  <obsolete>
-    Deprecated 6/25/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
-    rapidly as possible, just after successfully sending an UMA upload. Each
-    packet was numbered, as was its ACK sent back by Google. This histogram
-    records, for each packet number, how often we received an ACK for that
-    packet.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 6/25/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
-    rapidly as possible, just after successfully sending an UMA upload. If no
-    packets (of the 21) were ever ACKed, then the port is assumed to be blocked.
-    The histogram shows if we ever got an ACK for a packet in our series of 21.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 100 bytes of TCP data unsuccessfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status"
-    enum="NetConnectivityProtocolStatus">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for TCP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for echoing 100 bytes of TCP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for echoing 1K bytes of TCP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for TCP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 100 bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 100 bytes of UDP data unsuccessfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 1K bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.PacketLoss">
-  <obsolete>
-    Deprecated 6/25/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome sends 4 UDP packets in a row to test to see if there is a
-    probabalistic dependency in packet loss for consecutive packets.  We record
-    a bit vector of packets received, where the least significant bit is a 1 if
-    the first packet was received, etc.  For example, if packets 1 and 3 are
-    received, but packets 2 and 4 are lost, then we'd record a sample of binary
-    0101B, or 5.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.PacketLoss6">
-  <obsolete>
-    Deprecated 6/25/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome sends 6 UDP packets in a row to test to see if there is a
-    probabalistic dependency in packet loss for consecutive packets.  We record
-    a bit vector of packets received, where the least significant bit is a 1 if
-    the first packet was received, etc.  For example, if all packets other than
-    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
-    110101B, or 53.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status"
-    enum="NetConnectivityProtocolStatus">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for UDP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for echoing 100 bytes of UDP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Status for echoing 1K bytes of UDP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for UDP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 100 bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms">
-  <obsolete>
-    Deprecated 4/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The RTT for echoing 1k bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Send6.PacketsSent">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This histogram records how many packets (out of 6 attempted) were sent via
-    UDP as rapidly as possible, just after successfully sending an UMA upload.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Send6.SeriesAcked">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome sends 6 UDP packets in a row to test to see if there is a
-    probabalistic dependency in packet loss for consecutive packets.  We record
-    a bit vector of packets received, where the least significant bit is a 1 if
-    the first packet was received, etc.  For example, if all packets other than
-    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
-    110101B, or 53.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP as rapidly as
-    possible, just after successfully sending an UMA upload. Each packet was
-    numbered, as was its ACK sent back by Google. If no packets (of the 21) were
-    ever ACKed, then the port is assumed to be blocked, and no data is recorded
-    in this histogram. If the port is not blocked, then this histogram shows the
-    number of echo responses received from the first
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP as rapidly as
-    possible, just after successfully sending an UMA upload. Each packet was
-    numbered, as was its ACK sent back by Google. This histogram records, for
-    each packet number, how often we received an ACK for that packet.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP as rapidly as
-    possible, just after successfully sending an UMA upload. If no packets (of
-    the 21) were ever ACKed, then the port is assumed to be blocked. The
-    histogram shows if we ever got an ACK for a packet in our series of 21.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.PacketsSent">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This histogram records how many packets (out of 21 attempted) were sent via
-    UDP as rapidly as possible, just after successfully sending an UMA upload.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity3">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, 21 packets were sent to Google via UDP on port 443 or
-    6121.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent">
-  <obsolete>
-    Deprecated 9/2012. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This histogram records how many packets (out of 6 attempted) were sent via
-    UDP as rapidly as possible, just after successfully sending an UMA upload.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.100B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.1200B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.500B.PacketDelay"
-    units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="NetConnectivity4">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, a few packets were sent from Google to clients via UDP
-    on port 443 or 80 to perform net connectivity test.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity5">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    In this experiment, a few packets were sent from Google to clients via UDP
-    on port 443 or 80 to perform net connectivity test.
-  </summary>
-</histogram>
-
-<histogram name="NetConnectivity5.TestFailed.WritePending"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Next NetConnectivity5 experiment weren't started because there is an
-    outstading pending write.
-  </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Activation" units="ms">
-  <owner>benchan@chromium.org</owner>
-  <summary>The time the Gobi modem takes to complete activation.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Connect" units="ms">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The time the Gobi modem takes to connect to the cellular network.
-  </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Disconnect" units="ms">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The time the Gobi modem takes to disconnect from the cellular network.
-  </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.FirmwareDownload.Attempts">
-  <owner>benchan@chromium.org</owner>
-  <summary>Number of attempts taken to install Gobi firmware.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.FirmwareDownload.Time" units="ms">
-  <owner>benchan@chromium.org</owner>
-  <summary>The time it takes to install Gobi firmware.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Registration" units="ms">
-  <owner>benchan@chromium.org</owner>
-  <summary>
-    The time the Gobi modem takes to register on the cellular network.
-  </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.SetPower" enum="Network3GGobiError">
-  <owner>benchan@chromium.org</owner>
-  <summary>Errors experienced during Gobi device powerup.</summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeOnline" units="seconds">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using Cellular to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToConfig" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a 3G/Cellular
-    network and configure Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToOnline" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    3G/Cellular network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToPortal" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    3G/Cellular network is in a captive portal after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Cellular.UsageRequestStatus"
-    enum="NetworkCellularUsageRequestStatus">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Chrome OS cellular usage API request status codes.</summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeOnline" units="seconds">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using Ethernet to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToConfig" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a wired
-    Ethernet network and configure Layer 3 state (typically acquire a DHCP
-    lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToOnline" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    Ethernet network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToPortal" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    Ethernet network is in a captive portal after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.MigrationNssToPem"
-    enum="MigrationNssToPemNetworkTypes">
-  <obsolete>
-    Deprecated 8/2015.
-  </obsolete>
-  <owner>cschuet@chromium.org</owner>
-  <summary>
-    Chrome OS metric counting the number of network configurations that
-    contained a NSS nickname identifying a CA certificate, which triggered the
-    migration to PEM encoding. This metric doesn't consider whether the
-    migration was successful but once a migration was successful the nickname is
-    removed.
-  </summary>
-</histogram>
-
-<histogram name="Network.ServiceErrors" enum="NetworkServiceError">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Chrome OS connection manager service errors seen.</summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop"
-    enum="NetworkCellular3GPPRegistrationDelayedDrop">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of cellular network
-    flakes. A network flake occurs when the signal strength goes below detection
-    level for a short duration.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.AutoConnectTotalTime" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the total amount of time spent
-    from the start of the first auto-connect request until when the cellular
-    modem successfully connects to the network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.AutoConnectTries">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of auto-connect
-    tries that were attempted before the cellular modem successfully connected
-    to the network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.DevicePresenceStatus"
-    enum="BooleanPresent">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of a Cellular device in
-    the system. A sample is emitted once every 3 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.DHCPOptionFailureDetected"
-    enum="NetworkDHCPOptionFailure">
-  <obsolete>
-    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of DHCP option failures
-    encountered by Shill.  This indicates that Shill is using minimal DHCP
-    options due to suspected MTU issues on the return path from the DHCP server
-    back to the client.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.Disconnect"
-    enum="NetworkDisconnectType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric that tracks whether the cellular network was
-    disconnected due to an error or was explicitly disconnected by the user.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS cellular network metric that tracks the number of drops based on
-    the network technology.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds"
-    units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the length of a lease for a
-    cellular network at the time it expired without the DHCP client being able
-    to renew it.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.IPv6ConnectivityStatus"
-    enum="IPv6ConnectivityStatus">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of complete IPv6
-    configuration at the time when cellular connection is established.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.NetworkConnectionIPType"
-    enum="NetworkConnectionIPType">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the types of IP configuration used for
-    establishing cellular connections.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.OutOfCreditsReason"
-    enum="NetworkCellularOutOfCreditsReason">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS cellular network metric that tracks the number of out-of-credits
-    detected based on the cause that triggered the out-of-credits.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalAttempts">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of portal detection
-    attempts per pass for a cellular network. This includes failure, timeout and
-    successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalAttemptsToOnline">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the total number of portal
-    detection attempts performed for a cellular network between the Connected
-    and Online state. This includes failure, timeout and successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalResult"
-    enum="NetworkPortalResult">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the result of portal detections
-    for a cellular network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the signal strength (0-100) of the
-    cellular modem before it dropped from the network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeOnline" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using cellular to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToConfig" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a cellular
-    network and configure Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToConnect" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to connect a cellular
-    modem.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToDisable" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to disable a cellular
-    modem.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToEnable" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to enable a cellular
-    modem.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToInitialize" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to initialize a
-    cellular modem.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    cellular network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToPortal" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    cellular network is in a captive portal after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToScan" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to scan a cellular
-    network and register a modem.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.ConnectionDiagnosticsIssue"
-    enum="ConnectionDiagnosticsIssue">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the connectivity issue diagnosed by the
-    ConnectionDiagnostics class in Shill. This metric is logged each time a
-    ConnectionDiagnostics object completes its diagnostics actions and reports
-    the results to its caller.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.CorruptedProfile" enum="NetworkCorruptedProfile">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS cellular network metric that tracks the number of corrupted
-    profiles encountered by Shill.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DarkResumeActionResult"
-    enum="ShillSuspendTerminationDarkResumeActionResult">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of dark resume
-    actions that successfully complete or fail when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DarkResumeActionsTimeTaken" units="ms">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes dark resume actions to complete when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DarkResumeActionTime" units="ms">
-  <obsolete>
-    Deprecated 01/2015. Migrated to Network.Shill.DarkResumeActionsTimeTaken.
-  </obsolete>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes dark resume actions to complete when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DarkResumeScanNumRetries">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of times a dark resume scan is
-    retried in a single dark resume.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DarkResumeScanRetryResult"
-    enum="DarkResumeScanRetryResult">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks whether dark resume scan retries led to
-    the system suspending from dark resume in a connected state. This metric is
-    only recorded in dark resumes when at least one dark resume scan retry was
-    launched.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DeviceConnectionStatus" enum="ConnectionStatus">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the connection status of
-    the device. A sample is emitted once every 3 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DeviceRemovedEvent" enum="DeviceTechnologyType">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the network device removed events for
-    each device type.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DHCPClientMTUValue" units="bytes">
-  <owner>pstew@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the MTU value proposed by the
-    DHCP server.  A sample is emitted each time the DHCP client completes
-    negotiation with a server.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DHCPClientStatus" enum="NetworkDhcpClientStatus">
-  <owner>pstew@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the current state of the DHCP
-    client.  A sample is emitted each time the DHCP client state changes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.DHCPOptionFailureDetected"
-    enum="NetworkTechnology">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of DHCP option failures
-    encountered by Shill for each network technology.  This indicates that Shill
-    is using minimal DHCP options due to suspected MTU issues on the return path
-    from the DHCP server back to the client.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.DevicePresenceStatus"
-    enum="BooleanPresent">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of an Ethernet device in
-    the system. A sample is emitted once every 3 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.DHCPOptionFailureDetected"
-    enum="NetworkDHCPOptionFailure">
-  <obsolete>
-    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of DHCP option failures
-    encountered by Shill.  This indicates that Shill is using minimal DHCP
-    options due to suspected MTU issues on the return path from the DHCP server
-    back to the client.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.Disconnect"
-    enum="NetworkDisconnectType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric that tracks whether the Ethernet network was
-    disconnected due to an error or was explicitly disconnected by the user.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds"
-    units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the length of a lease for
-    an Ethernet network at the time it expired without the DHCP client being
-    able to renew it.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorBroadcastErrorsAtFailure">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of LinkMonitor
-    broadcast errors that were accrued on an Ethernet network at the time that
-    the link was declaired to be failed.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorFailure"
-    enum="LinkMonitorFailureType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS metric that signals the type of failure the LinkMonitor
-    encountered which caused it to stop monitoring an Ethernet network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorResponseTimeSample"
-    units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of milliseconds
-    between an ARP request and a received reply on an Ethernet network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorSecondsToFailure"
-    units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of seconds from
-    the start of the LinkMonitor until failure on an Ethernet network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorUnicastErrorsAtFailure">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of LinkMonitor
-    unicast errors that were accrued on an Ethernet network at the time that the
-    link was declaired to be failed.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalAttempts">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of portal detection
-    attempts per pass for an Ethernet network. This includes failure, timeout
-    and successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalAttemptsToOnline">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the total number of portal
-    detection attempts performed for an Ethernet network between the Connected
-    and Online state. This includes failure, timeout and successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalResult"
-    enum="NetworkPortalResult">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the result of portal detections
-    for an Ethernet network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeOnline" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using Ethernet to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a wired
-    Ethernet network and configure Layer 3 state (typically acquire a DHCP
-    lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to initialize an
-    Ethernet device.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    Ethernet network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToPortal" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    Ethernet network is in a captive portal after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.PPPMTUValue" units="bytes">
-  <owner>gdk@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the MTU value provided by the
-    upstream PPP peer.  A sample is emitted each time the client successfully
-    negotiates an MTU value via PPP.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.ServiceErrors" enum="NetworkServiceError">
-  <owner>quiche@chromium.org</owner>
-  <summary>Chrome OS connection manager service errors seen.</summary>
-</histogram>
-
-<histogram name="Network.Shill.ServicesOnSameNetwork">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of services that are connected
-    to the currently connected network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.SuspendActionResult"
-    enum="ShillSuspendTerminationDarkResumeActionResult">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of suspend actions
-    that successfully complete or fail when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.SuspendActionsTimeTaken" units="ms">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes suspend actions to complete when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.SuspendActionTime" units="ms">
-  <obsolete>
-    Deprecated 01/2015. Migrated to Network.Shill.SuspendActionsTimeTaken.
-  </obsolete>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes suspend actions to complete when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult"
-    enum="ShillSuspendTerminationDarkResumeActionResult">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of termination
-    actions that successfully complete or fail when shill terminates. Previously
-    deprecated in 10/2012 and brought back in 10/2014.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult.OnSuspend"
-    enum="ShillSuspendTerminationDarkResumeActionResult">
-  <obsolete>
-    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionResult.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of termination
-    actions that successfully complete or fail when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult.OnTerminate"
-    enum="ShillSuspendTerminationDarkResumeActionResult">
-  <obsolete>
-    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionResult.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of termination
-    actions that successfully complete or fail when shill terminates.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionsTimeTaken" units="ms">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes termination actions to complete when shill terminates.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionTime" units="ms">
-  <obsolete>
-    Deprecated 01/2015. Migrated to Network.Shill.TerminationActionsTimeTaken.
-  </obsolete>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes termination actions to complete when shill terminates.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionTime.OnSuspend" units="ms">
-  <obsolete>
-    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionTime.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes termination actions to complete when shill suspends.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionTime.OnTerminate" units="ms">
-  <obsolete>
-    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionTime.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the time in milliseconds it
-    takes termination actions to complete when shill terminates.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.TimeToDrop" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network stability metric sampling the time in seconds between the
-    networking going online to going offline. Offline events due to device
-    shutdown or suspend are ignored (along with the online time before that
-    offline event).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.UserInitiatedEvents" enum="UserInitiatedEvent">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of user-initiated events.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric sampled on each successful VPN connection
-    that tracks the VPN connection type.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.RemoteAuthenticationType"
-    enum="VPNRemoteAuthenticationType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric sampled on each successful VPN connection
-    that tracks the remote authentication method.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.TimeOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using VPN to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).  A sample is emitted
-    every time the system transitions from primary connectivity through a VPN to
-    some other type of connectivity.  The value of the sample is the time delta
-    in seconds from the instant the system transitioned to VPN connectivity.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.TimeToConfig" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on a VPN network (typically acquire a DHCP lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.TimeToOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    WiMax network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.UserAuthenticationType"
-    enum="VPNUserAuthenticationType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric sampled on each successful VPN connection
-    that tracks the user authentication method.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  Reason code reported when the AP
-    disconnects a WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  Broad category of reason AP disconnected a
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.ApMode" enum="WiFiApMode">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  The AP mode setting for each successful
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.AutoConnectableServices">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of wifi services available for
-    auto-connect when auto-connect is initiated for wifi device.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of BSSes (endpoints) available
-    for the currently connecting wifi service.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  The channel used for each successful WiFi
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ClientDisconnectReason"
-    enum="WiFiReasonCode">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  Reason code reported when the client
-    disconnects a WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  Broad category of reason client
-    disconnected a WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.DarkResumeUnmatchedScanResultsReceived"
-    enum="DarkResumeUnmatchedScanResultReceived">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks whether any unmatched scan results are
-    received during dark resume cycles. An unmatched scan result is a set of
-    scan results received by shill in response to a scan request that was not
-    sent directly by shill in the same dark resume cycle.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.DarkResumeWakeReason"
-    enum="DarkResumeWakeReason">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the wake reason for dark resume.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of a WiFi device in the
-    system. A sample is emitted once every 3 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.DHCPOptionFailureDetected"
-    enum="NetworkDHCPOptionFailure">
-  <obsolete>
-    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of DHCP option failures
-    encountered by Shill.  This indicates that Shill is using minimal DHCP
-    options due to suspected MTU issues on the return path from the DHCP server
-    back to the client.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Disconnect" enum="NetworkDisconnectType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric that tracks whether an 802.11 wireless
-    network was disconnected due to an error or was explicitly disconnected by
-    the user.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric sampled on each successful 802.1x wireless
-    connection that tracks the configured inner authentication method.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric sampled on each successful 802.1x wireless
-    connection that tracks the configured outer authentication method.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the length of a lease for a
-    WiFi network at the time it expired without the DHCP client being able to
-    renew it.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.FallbackDNSTestResult"
-    enum="FallbackDNSTestResult">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the result of the fallback
-    DNS test. The fallback DNS test is performed when portal detection failed
-    due to DNS failure.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.FrequenciesConnectedEver">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS metric sampling the number of different frequencies (i.e.
-    channels) on which a device has connected to a WiFi network. This value is
-    sampled every time a WiFi connection is established
-    (WPASupplicant::kInterfaceStateCompleted). Note that the word
-    &quot;Ever&quot; in the metric name is misleading. Chrome OS actually ages
-    out historical information, currently after 3 weeks.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.IPv6ConnectivityStatus"
-    enum="IPv6ConnectivityStatus">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of complete IPv6
-    configuration at the time when WiFi connection is established.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorBroadcastErrorsAtFailure">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of LinkMonitor
-    broadcast errors that were accrued on an 802.11 wireiless network at the
-    time that the link was declaired to be failed.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorFailure"
-    enum="LinkMonitorFailureType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS metric that signals the type of failure the LinkMonitor
-    encountered which caused it to stop monitoring an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorResponseTimeSample" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of milliseconds
-    between an ARP request and a received reply on an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorSecondsToFailure"
-    units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of seconds from
-    the start of the LinkMonitor until failure on an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorUnicastErrorsAtFailure">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the number of LinkMonitor
-    unicast errors that were accrued on an 802.11 wireless network at the time
-    that the link was declaired to be failed.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.NetworkConnectionIPType"
-    enum="NetworkConnectionIPType">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the types of IP configuration used for
-    establishing WiFi connections.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.NetworkProblemDetected"
-    enum="NetworkProblemType">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the network problems
-    encountered by TrafficMonitor after WiFi connection is established.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PhyMode" enum="NetworkPhyModeType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  The channel type used for each successful
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalAttempts">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of portal detection
-    attempts per pass for an 802.11 wireless network. This includes failure,
-    timeout and successful attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalAttemptsToOnline">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the total number of portal
-    detection attempts performed for an 802.11 wireless network between the
-    Connected and Online state. This includes failure, timeout and successful
-    attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the result of portal detections
-    for an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.RememberedNetworkCount">
-  <owner>pstew@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of 802.11 wireless
-    networks known by the connection manager at the time a configuration profile
-    has been loaded.  A configuration profile is loaded at each system startup,
-    and when a user logs in.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of 802.11 wireless networks
-    configured from the system configuration profile. This metric is sampled
-    each time a user configuration profile is loaded, such as when a user logs
-    in.
-
-    It might be surprising to have a system configuration profile metric sampled
-    when a user configuration profile is loaded. But this ensures that we have
-    equal numbers of samples for system and user configuration profiles.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.RememberedUserNetworkCount">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the number of 802.11 wireless networks
-    configured from a user configuration profile. This metric is sampled each
-    time a user configuration profile is loaded, such as when a user logs in.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric describing, for a WiFi scan attempt, what
-    scan method is used and whether it ends in a connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric describing, for a WiFi scan attempt, how many
-    milliseconds were spent waiting to talk to the kernel/drivers.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric.  The security setting for each successful
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.SignalAtDisconnect" units="negative dBm">
-  <owner>silberst@chromium.org</owner>
-  <summary>
-    Chrome OS network metric indicating the negative of the dBm received signal
-    strength recorded at the time of a WiFi disconnect.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric indicating the negative of the dBm received signal
-    strength recorded at the time a successful WiFi connection started.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.StoppedTxQueueLength" units="frames">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric indicating the maximal length of any stopped
-    mac80211 transmit queue. The metric is reported when a queue-status check
-    determines that at least one transmit queue is stopped, and has more than a
-    threshold number of frames queued.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.StoppedTxQueueReason"
-    enum="NetworkQueueStopReason">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric indicating the reason that mac80211 transmit queues
-    were stopped. The metric is reported when a queue-status check determines
-    that at least one queue is stopped, and has more than a threshold number of
-    frames queued.
-
-    One measurement is reported per stop reason, per queue-status check. Reasons
-    that apply to multiple queues are reported only once per queue-status check.
-    Reasons that only apply to queues that have a below-threshold number of
-    frames are skipped.
-
-    Note that, because we may report multiple stop reasons for a single
-    queue-status check, this histogram is not suitable for determining the
-    number of times a queue-status check found that the queues were stopped. To
-    determine that number, use the count of
-    Network.Shill.WiFi.StoppedTxQueueLength reports.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffConnected"
-    units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>kirtika@chromium.org</owner>
-  <summary>
-    Time spent in suspended state, on a resume, for the case when wake on wifi
-    is  disabled (WoWOff), and after resume, the NIC is found to be already
-    connected.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffDisconnected"
-    units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>kirtika@chromium.org</owner>
-  <summary>
-    Time spent in suspended state, on a resume, for the case when wake on wifi
-    is  enabled (WoWOff), and after resume, the NIC is found to be disconnected.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnConnected"
-    units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>kirtika@chromium.org</owner>
-  <summary>
-    Time spent in suspended state, on a resume, for the case when wake on wifi
-    is  enabled (WoWOn), and after resume, the NIC is found to be already
-    connected.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnDisconnected"
-    units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>kirtika@chromium.org</owner>
-  <summary>
-    Time spent in suspended state, on a resume, for the case when wake on wifi
-    is  enabled (WoWOn), and after resume, the NIC is found to be disconnected.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeOnline" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using WiFi to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time from the resume event
-    to the time when an 802.11 wireless network has configured its Layer 3
-    state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToConfig" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on an 802.11 wireless network (typically acquire a DHCP lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToConnect" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to connect to a WiFi
-    Basic Service Set (which consists of the access point and associated
-    stations on a particular WiFi channel for a specific network).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to initialize an
-    802.11 wireless device.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToJoin" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join (associate
-    plus authenticate) an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    802.11 wireless network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToPortal" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    802.11 wireless network is in a captive portal after configuring Layer 3
-    state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToScan" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to scan WiFi until a
-    connection is found.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time between the beginning
-    of a WiFi scan (if the scan includes both a progressive scan and a full
-    scan, the TimeToScanAndConnect starts with the first scan of the series) and
-    the completion of a successful connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the transmit bitrate in
-    Mbps for the wifi device when it is connected to a network. The bitrate is
-    reported once every minute after the wifi connection is established.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.UnreliableLinkSignalStrength">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric sampling the signal strength (0-100) of the wifi
-    network when it becomes unreliable (experiencing multiple link failures in a
-    short period of time).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.UserInitiatedConnectionFailureReason"
-    enum="ConnectionFailureReason">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the reasons of failed
-    user-initiated WiFi connection attempts. The result of the user-initiated
-    WiFi connection attempts are being tracked by
-    Network.Shill.WiFi.UserInitiatedConnectionResult.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult"
-    enum="ConnectionResult">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the result of
-    user-initiated WiFi connection attempts.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.VerifyWakeOnWiFiSettingsResult"
-    enum="VerifyWakeOnWiFiSettingsResult">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network diagnostic metric sampling the number of times NIC wake on
-    WiFi settings verification succeeds or fails in shill. This metric is
-    recorded every time wake on WiFi settings are requested and verified after
-    the NIC is programmed with wake on WiFi settings.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.WakeOnWiFiFeaturesEnabledState"
-    enum="WakeOnWiFiFeaturesEnabledState">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric that tracks the wake on WiFi features that
-    are enabled in shill. Recorded once every 10 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.WakeOnWiFiThrottled"
-    enum="WakeOnWiFiThrottled">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks whether wake on WiFi was disabled
-    during a period of system suspension because of too many dark resume wakes.
-    This metric is only recorded for system suspends where wake on WiFi
-    functionality has been programmed into the NIC.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.WakeReasonReceivedBeforeOnDarkResume"
-    enum="WakeReasonReceivedBeforeOnDarkResume">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks whether a wake reason was received
-    during dark resume before executing WakeOnWiFi::OnDarkResume.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.WiFiConnectionStatusAfterWake"
-    enum="WiFiConnectionStatusAfterWake">
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    Chrome OS network usage metric that tracks the WiFi connection status after
-    waking from suspend, both when wake on WiFi is enabled and disabled.
-    Recorded 1 second after waking from suspend.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.DevicePresenceStatus"
-    enum="BooleanPresent">
-  <owner>zqiu@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the presence of a WiMax device in the
-    system. A sample is emitted once every 3 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.DHCPOptionFailureDetected"
-    enum="NetworkDHCPOptionFailure">
-  <obsolete>
-    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
-  </obsolete>
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network metric that tracks the number of DHCP option failures
-    encountered by Shill.  This indicates that Shill is using minimal DHCP
-    options due to suspected MTU issues on the return path from the DHCP server
-    back to the client.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds" units="seconds">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric that tracks the length of a lease for a
-    WiMax network at the time it expired without the DHCP client being able to
-    renew it.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.TimeToConfig" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on a WiMax network (typically acquire a DHCP lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.TimeToInitialize" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to initialize a WiMax
-    device.
-  </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wimax.TimeToOnline" units="ms">
-  <owner>quiche@chromium.org</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that a
-    WiMax network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Cellular" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a 3G/Cellular
-    network and configure Layer 3 state. Note this metric is deprecated; see
-    Network.Cellular.TimeToConfig.
-  </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Ethernet" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join a wired
-    Ethernet network and configure Layer 3 state (typically acquire a DHCP
-    lease). Note this metric is deprecated; see Network.Ethernet.TimeToConfig.
-  </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Wifi" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on an 802.11 wireless network (typically acquire a DHCP lease). Note
-    this metric is deprecated; see Network.Wifi.TimeToConfig.
-  </summary>
-</histogram>
-
-<histogram name="Network.TimeToDrop" units="seconds">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network stability metric sampling the time in seconds between the
-    networking going online to going offline. Offline events due to device
-    shutdown or suspend are ignored (along with the online time before that
-    offline event).
-  </summary>
-</histogram>
-
-<histogram name="Network.TimeToJoin.Wifi" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join (associate
-    plus authenticate) an 802.11 wireless network. Note this metric is
-    deprecated; see Network.Wifi.TimeToJoin.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on an 802.11 wireless network (typically acquire a DHCP lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.BitRate" units="bps">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Network metric reporting the download speed test results run at setup time.
-    Recorded at least once per day.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Channel" enum="NetworkChannelType">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Chrome OS network usage metric.  The channel used for each successful WiFi
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.PhyMode" enum="NetworkPhyModeType">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Chrome OS network usage metric.  The channel type used for each successful
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.RoundTripTime" units="ms">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Network metric reporting the average round trip time to the WiFi gateway.
-    Recorded at least once per day.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Security" enum="NetworkSecurityType">
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Chrome OS network usage metric.  The security setting for each successful
-    WiFi connection.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeOnline" units="seconds">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network metric sampling the time spent using WiFi to transport
-    data.  These data are mostly useful when summed and compared to TimeOnline
-    for other network technologies (e.g. WiFi vs Cellular).
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeResumeToReady" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time from the resume event
-    to the time when an 802.11 wireless network has configured its Layer 3
-    state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToConfig" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to configure Layer 3
-    state on an 802.11 wireless network (typically acquire a DHCP lease).
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToJoin" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to join (associate
-    plus authenticate) an 802.11 wireless network.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToOnline" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    802.11 wireless network is online after configuring Layer 3 state.
-  </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToPortal" units="ms">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS network performance metric sampling the time to determine that an
-    802.11 wireless network is in a captive portal after configuring Layer 3
-    state.
-  </summary>
-</histogram>
-
-<histogram name="Networks.RememberedShared">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    Number of shared remembered (preferred) networks on Chrome OS. Updated any
-    time the network list changes.
-  </summary>
-</histogram>
-
-<histogram name="Networks.RememberedUnshared">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    Number of private remembered (preferred) networks on Chrome OS. Updated any
-    time the network list changes.
-  </summary>
-</histogram>
-
-<histogram name="Networks.Visible">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    Number of visible (in-range) networks on Chrome OS. Updated any time the
-    network list changes.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.ClockDivergence.Negative" units="seconds">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker observes a tick clock and a wall clock to determine
-    whether a timestamp retrieved from the network in the past can be used to
-    compute a current timestamp. When the tick clock and wall clock diverge from
-    each other, the NetworkTimeTracker must discard the network timestamp
-    because it has no way to compute a reliable current timestamp. Whenever the
-    NetworkTimeTracker discards a network timestamp due to the tick and wall
-    clocks diverging, this histogram records the difference of the tick clock's
-    delta minus the wall clock's delta since the network timestamp was
-    retrieved. For cases where the the tick clock delta is bigger than the wall
-    clock delta, see NetworkTimeTracker.ClockDivergence.Positive.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.ClockDivergence.Positive" units="seconds">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker observes a tick clock and a wall clock to determine
-    whether a timestamp retrieved from the network in the past can be used to
-    compute a current timestamp. When the tick clock and wall clock diverge from
-    each other, the NetworkTimeTracker must discard the network timestamp
-    because it has no way to compute a reliable current timestamp. Whenever the
-    NetworkTimeTracker discards a network timestamp due to the tick and wall
-    clocks diverging, this histogram records the difference of the tick clock's
-    delta minus the wall clock's delta since the network timestamp was
-    retrieved. For cases where the the wall clock delta is bigger than the tick
-    clock delta, see NetworkTimeTracker.ClockDivergence.Negative.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.TimeBetweenFetches" units="ms">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
-    the network. This histogram records the delta between each secure timestamp
-    and the previous one, to measure how often time queries are made. The first
-    time query is not recorded, because there is no previous query from which to
-    compute a delta.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.TimeQueryLatency" units="ms">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
-    the network. This histogram records the latency of each time query.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.UpdateTimeFetchAttempted">
-  <obsolete>
-    Deprecated 08/2016 because it does not provide additional information beyond
-    NetworkTimeTracker.UpdateTimeFetchFailed and
-    NetworkTimeTracker.UpdateTimeFetchValid.
-  </obsolete>
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
-    the network. This histogram increments whenever such a query is attempted.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.UpdateTimeFetchFailed" enum="NetErrorCodes">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
-    the network. This histogram records the request's net error code whenever a
-    secure timestamp fetch results in a network error or a non-200 HTTP status
-    code.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.UpdateTimeFetchValid" enum="BooleanValid">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
-    the network. Whenever one of these requests results in a successful 200
-    status code, this histogram records true if the response parsed and
-    validated successfully, and false otherwise.
-  </summary>
-</histogram>
-
-<histogram name="NetworkTimeTracker.WallClockRanBackwards" units="seconds">
-  <owner>estark@chromium.org</owner>
-  <owner>mab@chromium.org</owner>
-  <summary>
-    NetworkTimeTracker observes a tick clock and a wall clock to determine
-    whether a timestamp retrieved from the network in the past can be used to
-    compute a current timestamp. When the NetworkTimeTracker observes that the
-    wall clock ran backwards, the NetworkTimeTracker must discard the network
-    timestamp because it has no way to compute a reliable current timestamp.
-    Whenever the NetworkTimeTracker discards a network timestamp due to the wall
-    clock running backwards, this histogram records the magnitude of the
-    difference of the current wall clock time minus the wall clock time when the
-    network timestamp was retrieved.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid">
-  <obsolete>
-    Deprecated as of 01/2017. Replaced by NewTabPage.ActionAndroid2.
-  </obsolete>
-  <owner>newt@chromium.org</owner>
-  <summary>
-    Actions taken by users from the new tab page on Android. These actions may
-    navigate away from the NTP (e.g. searching in the omnibox or opening a
-    bookmark), but can also happen without navigating away from the NTP (e.g.
-    opening a bookmark in a new tab).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ActionAndroid2" enum="NewTabPageActionAndroid2">
-  <owner>finkm@chromium.org</owner>
-  <summary>
-    Actions taken from the new tab page on Android. These actions may navigate
-    away from the NTP (e.g. searching in the omnibox or opening a bookmark), but
-    can also happen without navigating away from the NTP (e.g. opening a content
-    suggestion in a new tab).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.AnimatedLogoDownloadTime" units="ms">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    The amount of time it takes to download the animated logo. Android only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.AppsPageDragSource" enum="AppsPageDragSource">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram for the source of app page drags. For any succesful drop onto an
-    apps pane of the NTP, this logs where the drag originated.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.BookmarkActionAndroid"
-    enum="NewTabPageBookmarkActionAndroid">
-  <obsolete>
-    Deprecated on M33 with the change to native NTP.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Actions taken by users on partner bookmarks (editing / renaming) on the NTP
-    on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.BackgroundFetchTrigger"
-    enum="BackgroundFetchTrigger">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The type of trigger that caused a background fetch of NTP content
-    suggestions from a suggestion server. Every background fetch is recorded.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.CategoryDismissed"
-    enum="ContentSuggestionsCategory">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: A category of content suggestions that was dismissed (by swiping
-    away its empty state card).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The number of suggestion cards that were available at the time an
-    NTP was opened.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"
-    units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a suggestion card on the NTP that is dismissed,
-    typically by swiping it away. The suggestion had a URL that was NOT visited
-    before. We track the position the card had in the list when it was first
-    seen by the user. This tracked position can be different from the position
-    observed by the user, e.g. when the user dismissed some suggestions from the
-    list or requested more that got inserted in the middle of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.DismissedVisited" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a suggestion card on the NTP that is dismissed,
-    typically by swiping it away. The suggestion had a URL that was visited
-    before. We track the position the card had in the list when it was first
-    seen by the user. This tracked position can be different from the position
-    observed by the user, e.g. when the user dismissed some suggestions from the
-    list or requested more that got inserted in the middle of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MenuOpened" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a suggestion card whose long-press menu was opened,
-    analogous to NewTabPage.ContentSuggestions.Opened.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The age of a suggestion card on the NTP whose long-press menu was
-    opened, analogous to NewTabPage.ContentSuggestions.OpenedAge.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized.
-  </obsolete>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The relevance score of a suggestion card on the NTP whose
-    long-press menu was opened, analogous to
-    NewTabPage.ContentSuggestions.OpenedScore.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized"
-    enum="NormalizedScore">
-  <owner>tschumann@chromium.org</owner>
-  <summary>
-    Android: The relevance score of a suggestion card on the NTP whose
-    long-press menu was opened, analogous to
-    NewTabPage.ContentSuggestions.OpenedScoreNormalized. Scores (which are
-    typically floats within (0,1]) get reported as discrete integers within
-    [1,10]. For instance, the discrete value 1 represents score values from
-    (0.0, 0.1]. The discrete value 11 is the overflow bucket for unexpectedly
-    high scores.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a &quot;More&quot; suggestion card that was clicked
-    on the NTP. A card is considered shown when at least 1/3 of its height is
-    visible on the screen. We track the position the card had in the list when
-    it was first seen by the user. This tracked position can be different from
-    the position observed by the user, e.g. when the user dismissed some
-    suggestions from the list or requested more that got inserted in the middle
-    of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MoreButtonShown" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a &quot;More&quot; suggestion card that was shown
-    on the NTP. A card is considered shown when at least 1/3 of its height is
-    visible on the screen. For each card, at most one impression is recorded per
-    NTP instance. We track the position the card had in the list when it was
-    first seen by the user. This tracked position can be different from the
-    position observed by the user, e.g. when the user dismissed some suggestions
-    from the list or requested more that got inserted in the middle of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.MovedUpCategoryNewIndex"
-    units="index">
-  <owner>vitaliii@chromium.org</owner>
-  <summary>
-    Android: The new index of a category on the NTP after it has been moved up
-    due to a click. The index of a category, which has been overtaken, is not
-    recorded here. This tracked index can be different from the position
-    observed by the user, e.g. empty categories are not shown. This metric
-    ignores all other order changes (e.g. dismissing a category or clearing
-    history).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.Notifications.Actions"
-    enum="ContentSuggestionsNotificationsAction">
-  <owner>sfiera@chromium.org</owner>
-  <summary>
-    Android: The number of actions taken on displayed notifications, either
-    user-initiated (tapping to open or swiping to dismiss), or automatic (hiding
-    due to a change in circumstances).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.Notifications.Impressions"
-    enum="ContentSuggestionsNotificationsImpression">
-  <owner>sfiera@chromium.org</owner>
-  <summary>
-    Android: The number of notifications that were shown, keyed by category. One
-    bucket counts the server-provided ARTICLES category; the other counts
-    everything else.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.Notifications.OptOuts"
-    enum="ContentSuggestionsNotificationsOptOut">
-  <owner>sfiera@chromium.org</owner>
-  <summary>
-    Android: The number of times a user opted out, keyed by method: IMPLICIT
-    (user ignored enough notifications consecutively that we think they're not
-    interested), or EXPLICIT (via explicit setting).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.OpenDisposition"
-    enum="WindowOpenDisposition">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: How an article linked from a suggestion card on the NTP was opened
-    (e.g. plain click, open in new tab, open in incognito).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.Opened" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of the suggestion card on the NTP, that is clicked
-    through to the host website of the content. We track the position the card
-    had in the list when it was first seen by the user. This tracked position
-    can be different from the position observed by the user, e.g. when the user
-    dismissed some suggestions from the list or requested more that got inserted
-    in the middle of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.OpenedAge" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The age of a suggestion card on the NTP that is clicked through to
-    the host website of the content. The age is measured from the moment the
-    content has been published.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.OpenedCategoryIndex"
-    units="index">
-  <owner>vitaliii@chromium.org</owner>
-  <summary>
-    Android: The index of a category on the NTP, whose suggestion card is
-    clicked through to the host website of the content. This tracked index can
-    be different from the position observed by the user, e.g. for the user a
-    category may be at the top of the NTP, but with index 1, because they
-    dismissed the one that was previously at the top.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.OpenedScore" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.OpenedScoreNormalized.
-  </obsolete>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The score of a suggestion card on the NTP that is clicked through
-    to the host website of the content. The recorded score is from the moment
-    the suggestion was fetched, it could have changed since.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.OpenedScoreNormalized"
-    enum="NormalizedScore">
-  <owner>tschumann@chromium.org</owner>
-  <summary>
-    Android: The score of a suggestion card on the NTP that is clicked through
-    to the host website of the content. The recorded score is from the moment
-    the suggestion was fetched, it could have changed since. Scores (which are
-    typically floats within (0,1]) get reported as discrete integers within
-    [1,10]. For instance, the discrete value 1 represents score values from
-    (0.0, 0.1]. The discrete value 11 is the overflow bucket for unexpectedly
-    high scores.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.Shown" units="index">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The position of a suggestion card that was shown on the NTP. A card
-    is considered shown when at least 1/3 of its height is visible on the
-    screen. For each card, at most one impression is recorded per NTP instance.
-    We track the position the card had in the list when it was first seen by the
-    user. This tracked position can be different from the position observed by
-    the user, e.g. when the user dismissed some suggestions from the list or
-    requested more that got inserted in the middle of the feed.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.ShownAge" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The age of a suggestion card that was shown on the NTP. A card is
-    considered shown when at least 1/3 of its height is visible on the screen.
-    For each card, at most one impression is recorded per NTP instance.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.ShownScore" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.ShownScoreNormalized.
-  </obsolete>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The score of a suggestion card that was shown on the NTP. A card is
-    considered shown when at least 1/3 of its height is visible on the screen.
-    For each card, at most one impression is recorded per NTP instance.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.ShownScoreNormalized"
-    enum="NormalizedScore">
-  <owner>tschumann@chromium.org</owner>
-  <summary>
-    Android: The score of a suggestion card that was shown on the NTP. A card is
-    considered shown when at least 1/3 of its height is visible on the screen.
-    For each card, at most one impression is recorded per NTP instance. Scores
-    (which are typically floats within (0,1]) get reported as discrete integers
-    within [1,10]. For instance, the discrete value 1 represents score values
-    from (0.0, 0.1]. The discrete value 11 is the overflow bucket for
-    unexpectedly high scores.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.TimeSinceLastBackgroundFetch"
-    units="ms">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.TimeSinceSuggestionFetched.
-  </obsolete>
-  <owner>markusheintz@chromium.org</owner>
-  <summary>
-    Android: The time since the last successful background fetch of remote
-    content suggestions. Recorded when the user looks at content suggestions on
-    the NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.TimeSinceSuggestionFetched"
-    units="ms">
-  <owner>markusheintz@chromium.org</owner>
-  <summary>
-    Android: The time since the displayed content suggestions was fetched.
-    Recorded when the user looks at content suggestions on the NTP. The metric
-    is only recorded for suggestions of the Articles for you section.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.UIUpdateResult"
-    enum="ContentSuggestionsUIUpdateResult">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.UIUpdateResult2 in January 2017.
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The result of updating the list of content suggestions in the UI.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.UIUpdateResult2"
-    enum="ContentSuggestionsUIUpdateResult2">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The result of updating the list of content suggestions in one UI
-    section.
-  </summary>
-</histogram>
-
-<histogram
-    name="NewTabPage.ContentSuggestions.UIUpdateSuccessNumberOfSuggestionsSeen"
-    units="suggestions">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The number of content suggestions that have been seen by the user
-    in the UI section before the section was successfully updated. The seen
-    suggestions were not removed in the update so that we do not change visible
-    parts of the UI. This histogram is only recorded when the UIUpdateResult2 is
-    &quot;Success (some suggestions replaced)&quot;.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal">
-  <owner>markusheintz@chromium.org</owner>
-  <summary>
-    Android: The time of day (in the local timezone) when the user used content
-    suggestions. Recorded for example when the user scrolls to the articles
-    suggestions or opens an article suggestions.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ContentSuggestions.VisitDuration" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: Time spent reading the page linked by an opened suggestion card.
-    Exit conditions include the tab not being in the foreground or starting a
-    new navigation.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType">
-  <obsolete>
-    Deprecated 2016-02.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The default pane when the NTP is first opened.</summary>
-</histogram>
-
-<histogram name="NewTabPage.HoverTimeClicked">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram of the time, in milliseconds, users have the cursor over a most
-    visited thumbnail before clicking.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.HoverTimeNotClicked">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram of the time, in milliseconds, users have the cursor over a most
-    visited thumbnail before moving it away from the thumbnail without clicking.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.IconsColor">
-  <owner>newt@chromium.org</owner>
-  <summary>
-    The number of most visited tiles on the new tab page that are displayed
-    using a fallback color (as opposed to having an icon, or simply being gray).
-    Android only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.IconsGray">
-  <owner>newt@chromium.org</owner>
-  <summary>
-    The number of most visited tiles on the new tab page that are displayed as
-    gray (as opposed to having an icon, or a fallback color). Android only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.IconsReal">
-  <owner>newt@chromium.org</owner>
-  <summary>
-    The number of most visited tiles on the new tab page that are displayed with
-    the site's icon (as opposed using a fallback color or just gray). Android
-    only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Interests.ImageDownloadSuccess"
-    enum="BooleanSuccess">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: Whether an attempt to download the image for an interest was
-    successful.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Interests.InterestsFetchSuccess"
-    enum="BooleanSuccess">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: Whether an attempt to fetch the interests for a user was
-    successful.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Interests.NumInterests" units="interests">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The number of interests fetched for a user to display on the NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Languages.UILanguageRatioInTwoTopLanguages"
-    units="%">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: Percentage of how much in browsing is the UI language of Chrome
-    used compared to overall use of the two top languages that are reported to
-    Chrome content suggestion server.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Layout" enum="NTPLayout">
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Android: A histogram detailing how the NewTabPageLayout is laid out on the
-    device (eg, whether it fits fully above the fold or not). This is logged
-    once per NewTabPageLayout creation (so once per NTP).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LoadTime" units="ms">
-  <owner>fserb@chromium.org</owner>
-  <summary>
-    Histogram of the time, in milliseconds, it took for the NTP to load all of
-    its tiles since navigation start.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LoadType" enum="NTPLoadType">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    Android: the type of load for the NTP, such as cold or warm start. It's a
-    warm start if the native library is already loaded and initialized at the
-    time the activity is created. This might happen if for example a service was
-    already running.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LogoClick" enum="NewTabPageLogoClick">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Histogram tracking how many users click on the static logo or animated logo
-    on NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LogoDownloadOutcome"
-    enum="NewTabPageLogoDownloadOutcome">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Outcome of downloading search provider's logos. It measures whether
-    download/parsing is successful, revalidation and parsing work properly, etc.
-    Android only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LogoDownloadTime" units="ms">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    The amount of time it takes to download the static logo. Android only.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.LogoShown" enum="NewTabPageLogoShown">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Histogram tracking how many static logos and animated logos are shown to
-    users.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MobileIsUserOnline" enum="Boolean">
-  <owner>fserb@chromium.org</owner>
-  <owner>zmin@chromium.org</owner>
-  <summary>
-    Record the network status when a new tab page is opened. True if user is
-    online and false for offline.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo">
-  <obsolete>
-    Deprecated on M33 with the change to native NTP.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Android: Tallies counts for how the user interacted with the NTP promo page.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisited" enum="MostVisitedTileIndex">
-  <owner>beaudoin@chromium.org</owner>
-  <owner>justincohen@chromium.org</owner>
-  <owner>newt@chromium.org</owner>
-  <summary>
-    Histogram for user clicks of the most visited tile. The value is equal to
-    the index of the tile.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <owner>justincohen@chromium.org</owner>
-  <owner>newt@chromium.org</owner>
-  <summary>
-    Action taken by the user on the Most Visited NTP pane.  If the user switches
-    panes during this use of the NTP, this action is sometimes not recorded. Ask
-    mpearson@ for details.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedScheme" enum="NtpMostVisitedScheme">
-  <obsolete>
-    Deprecated 2016-05.
-  </obsolete>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    The schemes of URLs of most visited thumbnails that the user clicked on.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedTilePlacementExperiment"
-    enum="NtpTileExperimentActions">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <owner>justincohen@chromium.org</owner>
-  <owner>newt@chromium.org</owner>
-  <summary>
-    Records anomalous events for the Most Visited Tile Placement experiment,
-    where it is unable to operate as expected. These are recorded during New Tab
-    Page load time, once for every NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedTime" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    The time from the New Tab page being shown until the user to clicked on a
-    most visited tile. Only recorded if the user clicked on a tile, as opposed
-    to e.g. searching via the omnibox. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NonVisibleScreenshots">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of screenshots that were cached for the non-visible but ranked
-    suggestions on the Suggested NTP pane.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NonVisibleSuggestedSiteRank">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Given that the user has typed a URL, and given that that specific URL was
-    ranked but not visible on the Suggested pane of the NTP, this is the rank
-    that the Suggested pane had for that URL.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfExternalTileFallbacks">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of tiles for which we relied on external tiles as a fallback
-    because a local screenshot was not available to be used as a thumbnail.
-    External tiles are those for which the visuals are handled by the page
-    itself, not by the iframe. Recorded before reloading the suggestions,
-    navigating to a URL, switching tabs, changing the active window, or closing
-    the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfExternalTiles">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of external tiles that are displayed on the NTP. External tiles
-    are those for which the visuals are handled by the page itself, not by the
-    iframe. Recorded before reloading the suggestions, navigating to a URL,
-    switching tabs, changing the active window or closing the tab/shutting down
-    Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfGrayTileFallbacks">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of tiles for which we displayed a gray tile with the domain name
-    as a fallback because a local screenshot was not available to be used as a
-    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
-    switching tabs, changing the active window or closing the tab/shutting down
-    Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfGrayTiles">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of tiles for which no thumbnail was specified, but a domain was
-    so we displayed a gray tile with the domain name in it. Recorded before
-    reloading the suggestions, navigating to a URL, switching tabs, changing the
-    active window or closing the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfMouseOvers">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The total number of times the user hovered the mouse over Most Visited tile
-    or title elements before changing focus away from the NTP, be it by
-    navigating to a URL, switching tabs, changing the active window or closing
-    the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfThumbnailAttempts">
-  <obsolete>
-    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailTiles.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of tiles for which we attempted to use a local screenshot as a
-    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
-    switching tabs, changing the active window or closing the tab/shutting down
-    Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfThumbnailErrors">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of thumbnails for which a local screenshot was not available so
-    we were not able to display them on the Most Visited section of the NTP.
-    Recorded before reloading the suggestions, navigating to a URL, switching
-    tabs, changing the active window or closing the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfThumbnailTiles">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of tiles for which we attempted to use a local screenshot as a
-    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
-    switching tabs, changing the active window or closing the tab/shutting down
-    Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfTiles">
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The number of tiles that are displayed on the NTP, no matter if they are
-    thumbnails, gray tiles, or external tiles. Recorded before reloading the
-    suggestions, navigating to a URL, switching tabs, changing the active window
-    or closing the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.OfflineUrlsLoadTime" units="ms">
-  <owner>dewittj@chromium.org</owner>
-  <summary>
-    The amount of time spent waiting for the offline page model to return which
-    New Tab Page URLs are available offline.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.OtherSessionsMenu" enum="OtherSessionsActions">
-  <obsolete>
-    Deprecated 05/2015. Feature was removed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram for usage of the menu on the NTP that allows the user to access
-    tabs from other devices.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType">
-  <obsolete>
-    Deprecated 2016-02.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The pane that had been previously selected when the user switches panes in
-    the NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Histogram for NTP bubble promo activity.</summary>
-</histogram>
-
-<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Histogram for NTP notification promo activity.</summary>
-</histogram>
-
-<histogram name="NewTabPage.RecentTabsPage.TimeVisibleAndroid" units="ms">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Records the amount of time that the &quot;Recent Tabs&quot; page is visible
-    and Chrome is in the foreground on Android. The metric is recorded whenever
-    the &quot;Recent Tabs&quot; page moves out of the foreground. The metric is
-    recorded when the &quot;Recent Tabs&quot; page is closed, when the user
-    switches from the &quot;Recent Tabs&quot; page to a different tab and when
-    Chrome is backgrounded.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.RequestThrottler.PerDay" units="requests">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Records how many background requests of the given type the browser tried to
-    perform each day where the type is specified by the _suffix of the
-    histogram. The histogram is emitted only after midnight of the given day
-    passes - right before the first following request (which can be several days
-    later if the user does not use Chrome in the meantime). The histogram counts
-    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
-    can easily exceed the daily quota.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.RequestThrottler.PerDayInteractive"
-    units="requests">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Records how many interactive requests of the given type the browser tried to
-    perform each day where the type is specified by the _suffix of the
-    histogram. The histogram is emitted only after midnight of the given day
-    passes - right before the first following request (which can be several days
-    later if the user does not use Chrome in the meantime). The histogram counts
-    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
-    can easily exceed the daily quota.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.RequestThrottler.RequestStatus"
-    enum="NtpRequestThrottlerStatus">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Records the status w.r.t. the quota for all requests of the given type. The
-    type of request is specified by the _suffix of the histogram.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchAvailableLoadTime.ColdStart" units="ms">
-  <obsolete>
-    Deprecated February 2017.
-  </obsolete>
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The time until the search box became available on the NTP in a cold start.
-    It's a cold start if the native library is not already loaded and
-    initialized at the time the activity is created. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchAvailableLoadTime.WarmStart" units="ms">
-  <obsolete>
-    Deprecated February 2017.
-  </obsolete>
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The time until the search box became available on the NTP in a warm start.
-    It's a warm start if the native library is already loaded and initialized at
-    the time the activity is created. This might happen if for example a service
-    was already running. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchAvailableLoadTime2.ColdStart" units="ms">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The time until the search box became available on the NTP in a cold start.
-    It's a cold start if the native library is not already loaded and
-    initialized at the time the activity is created. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchAvailableLoadTime2.WarmStart" units="ms">
-  <owner>mvanouwerkerk@chromium.org</owner>
-  <summary>
-    The time until the search box became available on the NTP in a warm start.
-    It's a warm start if the native library is already loaded and initialized at
-    the time the activity is created. This might happen if for example a service
-    was already running. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchURLs.Total">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType">
-  <obsolete>
-    Deprecated 2016-02.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The pane selected when the user switches panes in the NTP.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SessionRestore">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram for user clicks of the Recently Closed items. The value is the
-    recency of the entry being restored (0 is most recent).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SingleSessionPageSwitches">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram to track how many times a user switched pages in a single NTP
-    session.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardClicked">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.Opened.
-  </obsolete>
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The position of the snippets card on the NTP, that is clicked
-    through to the host website of the content. We track the position the
-    snippet had in the list when NTP was loaded. This tracked position is thus
-    different from the position observed by the user whenever before scrolling
-    down to the given snippet, the user discards some snippets in the top of the
-    list.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardClickedAge" units="ms">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.OpenedAge.
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The age of the snippets card on the NTP, that is clicked through to
-    the host website of the content. The age is measured from the moment the
-    content has been published. In each &quot;_x_y&quot; suffix of the
-    histogram, only snippets on positions \gt;=x and \lt;=y are tracked. We
-    track the position the snippet had in the list when NTP was loaded. This
-    tracked position is thus different from the position observed by the user
-    whenever before scrolling down to the given snippet, the user discards some
-    snippets in the top of the list.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardClickedScore" units="score">
-  <obsolete>
-    Deprecated as of 6/2016
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The score of the snippets card on the NTP, that is clicked through
-    to the host website of the content. The recorded score is from the moment
-    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
-    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
-    track the position the snippet had in the list when NTP was loaded. This
-    tracked position is thus different from the position observed by the user
-    whenever before scrolling down to the given snippet, the user discards some
-    snippets in the top of the list.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardClickedScoreNew" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.OpenedScore.
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The score of the snippets card on the NTP, that is clicked through
-    to the host website of the content. The recorded score is from the moment
-    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
-    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
-    track the position the snippet had in the list when NTP was loaded. This
-    tracked position is thus different from the position observed by the user
-    whenever before scrolling down to the given snippet, the user discards some
-    snippets in the top of the list. In contrast to CardClickedScore, this
-    histogram has a proper maximal value of 100 000.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardExpanded">
-  <obsolete>
-    Deprecated as of 4/2016
-  </obsolete>
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The position of the snippets card on the NTP, that is expanded to
-    reveal more content.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardHidden">
-  <obsolete>
-    Deprecated as of 4/2016
-  </obsolete>
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The position of the snippets card on the NTP, for which the
-    expanded content was minimized/hidden.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardLongPressed" units="index">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.MenuOpened.
-  </obsolete>
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Android: The position of a snippet card when it is long pressed, analagous
-    to NewTabPage.Snippets.CardClicked.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardLongPressedAge" units="ms">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.MenuOpenedAge.
-  </obsolete>
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Android: The time difference between when a snippet card is long pressed and
-    when its content was published. Analagous to
-    NewTabPage.Snippets.CardClickedAge.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardLongPressedScoreNew" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.MenuOpenedScore.
-  </obsolete>
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Android: The relevance score of an interest card that is long pressed,
-    analagous to NewTabPage.Snippets.CardClickedScoreNew.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardShown">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.Shown.
-  </obsolete>
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The position of the snippets card that is shown on the NTP. Each
-    snippet (its position) is recorded whenever at least 1/3 of its height
-    becomes visible by scrolling through the NTP. Each snippet is recorded at
-    most once for a given instance of NTP and a given data set of snippets that
-    is shown. We track the position the snippet had in the list when NTP was
-    loaded. This tracked position is thus different from the position observed
-    by the user whenever before scrolling down to the given snippet, the user
-    discards some snippets in the top of the list. Previously (in the code
-    before 2016/05/27), this histogram was recorded each time a snippet became
-    visible (e.g. by scrolling up and down) at least by 1px; the first snippet
-    was thus recorded even without scrolling down.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardShownAge" units="ms">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.ShownAge.
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The age of the snippets card that is shown on the NTP. Each snippet
-    (its age) is recorded whenever at least 1/3 of its height becomes visible by
-    scrolling through the NTP. Each snippet is recorded at most once for a given
-    instance of NTP and a given data set of snippets that is shown. The age is
-    measured from the moment the content has been published. In each
-    &quot;_x_y&quot; suffix of the histogram, only snippets on positions \gt;=x
-    and \lt;=y are tracked. By this, we mean the position the snippet had in the
-    list when NTP was loaded. This tracked position is thus different from the
-    position observed by the user whenever before scrolling down to the given
-    snippet, the user discards some snippets in the top of the list.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardShownScore" units="score">
-  <obsolete>
-    Deprecated as of 6/2016
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The score of the snippets card that is shown on the NTP. Each
-    snippet (its score) is recorded whenever at least 1/3 of its height becomes
-    visible by scrolling through the NTP. Each snippet is recorded at most once
-    for a given instance of NTP and a given data set of snippets that is shown.
-    The recorded score is from the moment the snippet was fetched, it could have
-    changed since. In each &quot;_x&quot; suffix  of the histogram, only
-    snippets on positions \lt;=x are tracked. By this, we mean the position the
-    snippet had in the list when NTP was loaded. This tracked position is thus
-    different from the position observed by the user whenever before scrolling
-    down to the given snippet, the user discards some snippets in the top of the
-    list.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.CardShownScoreNew" units="score">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.ShownScore.
-  </obsolete>
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The score of the snippets card that is shown on the NTP. Each
-    snippet (its score) is recorded whenever at least 1/3 of its height becomes
-    visible by scrolling through the NTP. Each snippet is recorded at most once
-    for a given instance of NTP and a given data set of snippets that is shown.
-    The recorded score is from the moment the snippet was fetched, it could have
-    changed since. In each &quot;_x&quot; suffix  of the histogram, only
-    snippets on positions \lt;=x are tracked. By this, we mean the position the
-    snippet had in the list when NTP was loaded. This tracked position is thus
-    different from the position observed by the user whenever before scrolling
-    down to the given snippet, the user discards some snippets in the top of the
-    list. In contrast to CardShownScore, this histogram has a proper maximal
-    value of 100 000.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.DatabaseLoadTime" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Android: The time it took to load the database of persisted content
-    suggestions. Recorded only when the database is loaded successfully.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.EnteredState" enum="NTPSnippetsState">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The state of the RemoteSuggestionsProvider. Recorded when the state
-    changes, typically once at startup and rarely afterwards, e.g. on database
-    errors.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.FetchHttpResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Response or error codes encountered when attempting to fetch snippets.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.FetchResult" enum="NtpSnippetsFetchResult">
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Result of attempting a fetch, logged once per issued trigger.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.FetchTime" units="ms">
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Time spent fetching snippets. Only recorded for fetch attempts that resulted
-    in an actual network request.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.FetchTimeLocal" units="minutes">
-  <owner>finkm@chromium.org</owner>
-  <summary>
-    Records the time of the day in minutes when a snippets background fetch was
-    initiated. Counts minutes since midnight UTC.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.FetchTimeUTC" units="minutes">
-  <owner>finkm@chromium.org</owner>
-  <summary>
-    Records the time of the day in minutes when a snippets background fetch was
-    initiated. Counts minutes since midnight local time.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.IncompleteSnippetsAfterFetch"
-    enum="Boolean">
-  <owner>maybelle@chromium.org</owner>
-  <summary>
-    Whether we discarded any of the snippets after fetching them due to having
-    incomplete metadata.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.Interactions" enum="SnippetsInteractions">
-  <obsolete>
-    Removed 2016-10.
-  </obsolete>
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: A histogram giving an overall summary of important events like
-    impressions, scroll events, clicks etc.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.NumArticles" units="articles">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Android: The number of snippet articles available to show on the NTP, logged
-    once every time the list is updated.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.NumArticlesFetched" units="articles">
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Android: The number of valid snippet articles fetched from the server,
-    logged every time a fetch finishes successfully.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.NumArticlesOnScrolledBelowTheFoldOnce"
-    units="articles">
-  <obsolete>
-    Removed 2016-10.
-  </obsolete>
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Android: The number of snippet articles available to the user in the UI,
-    logged when the user scrolls below the fold (at max once per NTP load).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"
-    units="articles">
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Android: The number of snippet articles discarded by the user, logged every
-    time the list is updated resulting in an empty list (all articles
-    discarded).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.NumIncompleteSnippets" units="snippets">
-  <owner>maybelle@chromium.org</owner>
-  <summary>
-    The number of snippets that we discard per fetch due to having incomplete
-    data.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.OpenMethod" enum="SnippetOpenMethod">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.OpenDisposition.
-  </obsolete>
-  <owner>peconn@chromium.org</owner>
-  <summary>
-    Android: A histogram detailing how the articles linked from snippets are
-    opened (eg, plain click, open in new tab, open in incognito).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.Snippets.VisitDuration" units="ms">
-  <obsolete>
-    Replaced by NewTabPage.ContentSuggestions.VisitDuration.
-  </obsolete>
-  <owner>mastiz@chromium.org</owner>
-  <summary>
-    Android: Time spent reading the page linked by an opened (clicked) snippet
-    card. Exit conditions include the tab not being in the foreground or
-    starting a new navigation.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSite">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Histogram for user clicks of the suggested site thumbnails. The value is
-    equal to the index of the thumbnail.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Action taken by the user on the Suggested Sites NTP pane.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesLoadTime">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time to load the Suggested Sites NTP pane, in milliseconds.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesViewTime">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time spent on the Suggested Sites NTP pane, in seconds.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestionsImpression" enum="MostVisitedTileIndex">
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    Histogram for impressions on the various most visited tiles. The value is
-    equal to the index of the thumbnail.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType">
-  <obsolete>
-    Deprecated 2016-07.
-  </obsolete>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    Indicate, for each impression of the New Tab Page, whether the suggestions
-    were obtained from the client or server. Recorded before changing focus away
-    from the NTP, be it by navigating to a URL, switching tabs, changing the
-    active window or closing the tab/shutting down Chrome.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ThumbnailErrorRate">
-  <obsolete>
-    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailAttempts and
-    NewTabPage.NumberOfThumbnailErrors.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The percentage of errors per attempts to load image thumbnails on the New
-    Tab Page. When an error occurs, a grey tile is shown instead of a thumbnail
-    image. We measure the rate instead of the number of errors because multiple
-    attempts are made to load images at different times during the NTP's
-    lifetime. Each NTP session's error rate is logged after the user navigates
-    to a new URL from that NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.ThumbnailFallbackRate" units="%">
-  <obsolete>
-    Deprecated 01/2014. Replaced by NewTabPage.NumberOfGrayTileFallbacks and
-    NewTabPage.NumberOfExternalFallbacks.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The percentage of times most visited tiles use the fallback thumbnail. Only
-    requests that actually specify a fallback thumbnail are considered here. We
-    measure the rate instead of the number of errors because multiple attempts
-    are made to load thumbnails at different times during the NTP's lifetime.
-    Each NTP session's error rate is logged after the user navigates to a new
-    URL from that NTP.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.TileOfflineAvailable" enum="MostVisitedTileIndex">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    The number of times a tile was available offline, per tile index - compare
-    to the NewTabPage.SuggestionsImpression.* histograms. This is recorded when
-    the NTP finishes loading. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.TilesReceivedTime" units="ms">
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Histogram of the time, in milliseconds since navigation start, it took for
-    the NTP most visited iframe to receive the data for all of its tiles. This
-    does not include actually loading the DOM elements for the tiles, in
-    particular the thumbnail images; see NewTabPage.LoadTime for that.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.TileType" enum="MostVisitedTileType">
-  <owner>newt@chromium.org</owner>
-  <summary>
-    The visual type of each most visited tile displayed on the new tab page,
-    e.g. actual thumbnail or placeholder thumbnail. This is recorded for each
-    most visited item when the NTP is opened. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.TileTypeClicked" enum="MostVisitedTileType">
-  <owner>newt@chromium.org</owner>
-  <summary>
-    The visual type of the most visited item that the user clicked on, e.g.
-    actual thumbnail or placeholder thumbnail. Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.TimeSpent" units="ms">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    The time spent on the new tab page as measured from when it was loaded or
-    last brought to the foreground until it was navigated away from or hidden.
-    Only measured on Android.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.URLState" enum="NewTabURLState">
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    Records the status of the New Tab page URL when an NTP is opened.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.UserClassifier.AverageHoursToOpenNTP" units="hours">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The estimated average number of hours between two successive times
-    when a new tab page is opened. Recorded after each opening of a NTP (and
-    after updating the model used for the estimate).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.UserClassifier.AverageHoursToShowSuggestions"
-    units="hours">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The estimated average number of hours between two successive times
-    when the list of content suggestions on a new tab page is shown (i.e. when
-    the user scrolls below the fold). Recorded after each time the suggestions
-    are shown (and after updating the model used for the estimate).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.UserClassifier.AverageHoursToUseSuggestions"
-    units="hours">
-  <owner>jkrcal@chromium.org</owner>
-  <summary>
-    Android: The estimated average number of hours between two successive times
-    when the user opens a content suggestion or clicks on the &quot;More&quot;
-    button. Recorded after each time a suggestion or a More button is clicked
-    (and after updating the model used for the estimate).
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.VisibleScreenshots">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of screenshots that were cached for the visible suggestions on
-    the Suggested NTP pane.
-  </summary>
-</histogram>
-
-<histogram name="NewTabPage.VisibleSuggestedSiteRank">
-  <obsolete>
-    Deprecated 2016-02 (and not recorded for some time before that).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Given that the user has typed a URL, and given that that specific URL was
-    visible on the Suggested pane of the NTP, this is the rank that the
-    Suggested pane had for that URL.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Actions" enum="NotificationActionType">
-  <owner>dewittj@chromium.org</owner>
-  <summary>
-    The actions taken on notifications, recorded every time they happen.  This
-    histogram will record every single event that happens separately.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.AppNotificationStatus"
-    enum="NotificationAppStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records whether notifications are enabled for Chrome, as the Android app,
-    for each Web Notification that is being shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.AuthorDataSize" units="bytes">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The size, in bytes, of the author-provided data associated with a Web
-    Notification. Recorded when a persistent Web Notification is being shown by
-    the developer.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.AuthorDataSizeKB" units="KB">
-  <obsolete>
-    Replaced by Notifications.AuthorDataSize in February 2016.
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The size, in kilobytes, of the author-provided data associated with a Web
-    Notification. Recorded when a persistent Web Notification is being shown by
-    the developer.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.DeleteBeforeWriteResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of deleting notification data from the Web
-    Notification database that share their tag (replacement identifier) with a
-    notification that's about to be shown.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.DeleteResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of deleting notification data from the Web
-    Notification database.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.DeleteServiceWorkerRegistrationResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of deleting all notification data associated
-    with a Service Worker registration ID.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.DestroyResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of destroying the Web Notification database
-    altogether.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.OpenAfterCorruptionResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of opening the Web Notification database
-    after it has been destroyed in response to data corruption.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.OpenResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of opening the Web Notification database.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.ReadForServiceWorkerResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of reading data of all notifications
-    associated with a Service Worker from the Web Notification database.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.ReadResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of reading data of a single notification
-    from the Web Notification database.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Database.WriteResult"
-    enum="NotificationDatabaseStatus">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records the result status codes of writing data for a notification to the
-    Web Notification database.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.DifferentRequestingEmbeddingOrigins"
-    enum="Boolean">
-  <obsolete>
-    Deprecated July 2015. No longer tracked since M42.
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Records if the requesting and embedding origins are different when
-    requesting permission to display Web Notifications.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Display" enum="NotifierType">
-  <owner>bmalcolm@chromium.org</owner>
-  <summary>
-    Counts the number of times a notification was shown for the various types of
-    sources. The suffix distinguishes between the window state of the app or
-    webpage that sent the notification. This will be used to determine whether a
-    legacy mode is required when we allow apps or webpages to display
-    notifications over fullscreen content in the future.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.ExtensionNotificationActionCount"
-    units="buttons">
-  <owner>dewittj@chromium.org</owner>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The number of action buttons the developer provided for a notification
-    created using the extensions notification API. Logged when creating the
-    notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.ExtensionNotificationType"
-    enum="ExtensionNotificationType">
-  <owner>dewittj@chromium.org</owner>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The type of a notification created using the extensions notification API.
-    Logged when creating the notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Icon.FileSize" units="bytes">
-  <obsolete>
-    Deprecated Nov 2016 in favor of Notifications.LoadFileSize.*
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>The number of bytes loaded for a Web Notification icon.</summary>
-</histogram>
-
-<histogram name="Notifications.Icon.LoadFailTime" units="ms">
-  <obsolete>
-    Deprecated Nov 2016 in favor of Notifications.LoadFailTime.*
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to fail loading an icon for a Web
-    Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Icon.LoadFinishTime" units="ms">
-  <obsolete>
-    Deprecated Nov 2016 in favor of Notifications.LoadFinishTime.*
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to finish successfully loading an icon
-    for a Web Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.Icon.ScaleDownTime" units="ms">
-  <obsolete>
-    Deprecated Nov 2016 in favor of Notifications.LoadScaleDownTime.*
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to scale down an icon for a Web
-    Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.LoadFailTime" units="ms">
-<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->
-
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to fail loading an icon/image for a Web
-    Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.LoadFileSize" units="bytes">
-<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->
-
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The number of bytes loaded for a Web Notification icon/image.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.LoadFinishTime" units="ms">
-<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->
-
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to finish successfully loading an
-    icon/image for a Web Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.LoadScaleDownTime" units="ms">
-<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->
-
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The number of milliseconds it took to scale down an icon/image for a Web
-    Notification.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.PerNotificationActions"
-    enum="NotificationActionType">
-  <owner>dewittj@chromium.org</owner>
-  <summary>
-    The actions taken on notifications, recorded once per notification, when it
-    is closed.  This differs from the Notifications.Actions histogram in that
-    multiple events of the same type on a single notification will only record a
-    single UMA event.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.PersistentNotificationActionCount"
-    units="buttons">
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The number of action buttons the developer provided for a persistent Web
-    Notification. Logged whenever showNotification is called.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.PersistentNotificationDataDeleted"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 01/2016, no longer used.
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <owner>deepak.m1@samsung.com</owner>
-  <summary>
-    Recorded when the data associated with a persistent Web Notification gets
-    deleted. The value will be true if data deletion succeeded, and false if
-    there was an error.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.PersistentWebNotificationClickResult"
-    enum="PlatformNotificationStatus">
-  <owner>peter@chromium.org</owner>
-  <owner>deepak.m1@samsumg.com</owner>
-  <summary>
-    Recorded delivery status for persistent notification clicks to a Service
-    Worker when handling a click on a persistent WebNotification has finished.
-  </summary>
-</histogram>
-
-<histogram name="Notifications.PersistentWebNotificationCloseResult"
-    enum="PlatformNotificationStatus">
-  <owner>peter@chromium.org</owner>
-  <owner>nsatragno@chromium.org</owner>
-  <summary>
-    Records delivery status for persistent notification close events sent to a
-    Service Worker when the event has been handled.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"
-    units="kbps">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated downstream throughput (in
-    kilobits per second) and the observed downstream throughput (in kilobits per
-    second). Downstream throughput estimated by the network quality estimator at
-    the time of navigation start is compared with the downstream throughput
-    observed during the specified time interval following the start of the
-    navigation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"
-    units="Effective connection type">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated effective connection type and
-    the observed effective connection type. Effective connection type is
-    estimated by the network quality estimator at the time of navigation start
-    is compared with the effective connection type observed during the specified
-    time interval following the start of the navigation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff" units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated HTTP RTT and the observed HTTP
-    RTT. HTTP RTT estimated by the network quality estimator at the time of
-    navigation start is compared with the HTTP RTT observed during the specified
-    time interval following the start of the navigation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff" units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated transport RTT and the observed
-    transport RTT. Transport RTT estimated by the network quality estimator at
-    the time of navigation start is compared with the transport RTT observed
-    during the specified time interval following the start of the navigation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.CachedNetworkQualityAvailable" enum="BooleanAvailable">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records if the cached network quality (from memory or from a persistent
-    source) was available. Recorded right after connection change event.
-  </summary>
-</histogram>
-
-<histogram name="NQE.CellularSignalStrengthAvailable" enum="BooleanAvailable">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Whether the signal strength for the cellular network was available or not.
-    Recorded right before a connection change event. Recorded only on cellular
-    connections on Android platform.
-  </summary>
-</histogram>
-
-<histogram name="NQE.CellularSignalStrengthDifference" units="dBm">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Difference between the minimum and the maximum received signal strength
-    since the last connection change event. Recorded only on cellular
-    connections on Android platform when the cellular signal strength was
-    available. Recorded right before a connection change event.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Correlation.ResourceLoadTime.0Kb_128Kb">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records estimated network quality (estimated RTT, estimated downlink
-    bandwidth), resource load size, and the resource load time in a single UMA
-    sample. This metric is recorded randomly when a resource load finishes. Each
-    sample in this sparse histogram consists of multiple metrics (each occupying
-    few bits in the sample). The data in the histogram would be analyzed using
-    custom scripts. A sample is recorded only when the resource size is between
-    0 Kilobits (inclusive) and 128 Kilobits (exclusive).
-  </summary>
-</histogram>
-
-<histogram name="NQE.DifferenceRTTActualAndEstimated" units="ms">
-  <obsolete>
-    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Difference between the actual RTT observation and the estimated RTT. This
-    metric is recorded on every request when the actual observation is higher
-    than the estimated value.
-  </summary>
-</histogram>
-
-<histogram name="NQE.DifferenceRTTEstimatedAndActual" units="ms">
-  <obsolete>
-    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Difference between the estimated RTT and the actual RTT observation. This
-    metric is recorded on every request when the estimated value is higher than
-    the actual observation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.EffectiveConnectionType.OnECTComputation"
-    enum="NQEEffectiveConnectionType">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Effective connection type estimated by the network quality estimator.
-    Recorded every time the effective connection type is computed.
-  </summary>
-</histogram>
-
-<histogram name="NQE.EstimateAvailable.MainFrame" enum="Boolean">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    This histogram records whether the estimate of the network quality metric
-    was available or not. Recorded at every main frame request.
-  </summary>
-</histogram>
-
-<histogram name="NQE.ExternalEstimateProvider.DownlinkBandwidth" units="Kbps">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the estimate of the downlink bandwidth (in Kbps) provided by the
-    external estimate provided. Recorded every time the external estimate
-    provider provides a valid downlink bandwidth estimate to the network quality
-    estimator.
-  </summary>
-</histogram>
-
-<histogram name="NQE.ExternalEstimateProvider.RTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the estimate of the RTT provided by the external estimate provided.
-    Recorded every time the external estimate provider provides a valid RTT
-    estimate to the network quality estimator.
-  </summary>
-</histogram>
-
-<histogram
-    name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"
-    units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the HTTP RTT estimated by the external
-    estimate provider and the observed HTTP RTT. The HTTP RTT estimated by the
-    external estimate provider at the time of navigation start is compared with
-    the HTTP RTT observed during the specified time interval following the start
-    of the navigation.
-  </summary>
-</histogram>
-
-<histogram name="NQE.ExternalEstimateProviderStatus"
-    enum="NQEExternalEstimateProviderStatus">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Records the interaction (availability and query count) of Network Quality
-    Estimator with external estimates provider. Logged on network change events,
-    everytime external estimate provider is queried for an updated estimate, and
-    when it proactively notifies that an updated estimate is available.
-  </summary>
-</histogram>
-
-<histogram name="NQE.FastestRTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the fastest round-trip-time, before a connectivity change
-    is detected.
-
-    This metric is recorded when a connectivity change is detected. This will
-    miss data from users whose connection type never changes and will be biased
-    to users whose connection type changes frequently.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Kbps.ObservationSource" enum="NQEObservationSource">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of Kbps observations indexed by the source of the observation.
-    Recorded by the network quality estimator every time a new observation is
-    made or synthesized.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Kbps.OnECTComputation" units="Kbps">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the downstream peak throughput (in kilobits per second).
-    Recorded by the network quality estimator every time the effective
-    connection type is computed.
-  </summary>
-</histogram>
-
-<histogram name="NQE.MainFrame.EffectiveConnectionType"
-    enum="NQEEffectiveConnectionType">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Effective connection type estimated by network quality estimator. Suffixed
-    with the connection type reported by the operating system.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="NQE.MainFrame.Kbps" units="Kbps">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the downstream peak throughput at different percentiles.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="NQE.MainFrame.RTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the URLRequest layer at
-    different percentiles.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="NQE.MainFrame.TransportRTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the transport layer at
-    different percentiles.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="NQE.NetworkIdAvailable" enum="BooleanAvailable">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Whether the NetworkID (SSID of the Wi-Fi network, or the MCC/MNC operator of
-    the cellular network) was available or not. Recorded only on Wi-Fi and
-    cellular networks. Recorded right after the connection type changes.
-  </summary>
-</histogram>
-
-<histogram name="NQE.PeakKbps" units="Kbps">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of downstream peak throughput, before a connectivity change
-    is detected.
-
-    This metric is recorded when a connectivity change is detected. This will
-    miss data from users whose connection type never changes and will be biased
-    to users whose connection type changes frequently.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Prefs.ReadCount" units="count">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of times the network quality prefs were read by the network quality
-    estimator.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Prefs.ReadSize" units="count">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Count of the number of network IDs in the prefs read by the network quality
-    estimator.
-  </summary>
-</histogram>
-
-<histogram name="NQE.Prefs.WriteCount" units="count">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of times the network quality prefs were written by the network
-    quality estimator.
-  </summary>
-</histogram>
-
-<histogram name="NQE.RatioEstimatedToActualRTT" units="100 times">
-  <obsolete>
-    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Ratio of the estimated RTT to the actual RTT observation multiplied by 100.
-  </summary>
-</histogram>
-
-<histogram name="NQE.RTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the URLRequest layer at
-    different percentiles.
-
-    This metric is recorded immediately after a connectivity change is detected.
-    The metric name is suffixed with the connection type before the connectivity
-    change was detected. This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NQE.RTT.ObservationSource" enum="NQEObservationSource">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Number of RTT observations indexed by the source of the observation.
-    Recorded by the network quality estimator every time a new observation is
-    made or synthesized.
-  </summary>
-</histogram>
-
-<histogram name="NQE.RTT.OnECTComputation" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the round trip time at the URLRequest layer.  Recorded by
-    the network quality estimator every time the effective connection type is
-    computed.
-  </summary>
-</histogram>
-
-<histogram name="NQE.RTTObservations" units="ms">
-  <obsolete>
-    Replaced in May 2016 by NQE.MainFrame.RTT.* metrics.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    RTT observations at the URLRequest layer made by network quality estimator,
-    recorded on every request.
-  </summary>
-</histogram>
-
-<histogram name="NQE.TransportRTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the transport layer at
-    different percentiles.
-
-    This metric is recorded immediately after a connectivity change is detected.
-    The metric name is suffixed with the connection type before the connectivity
-    change was detected. This will miss data from users whose connection type
-    never changes and will be biased to users whose connection type changes
-    frequently.
-  </summary>
-</histogram>
-
-<histogram name="NQE.TransportRTT.OnECTComputation" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the transport layer.
-    Recorded by the network quality estimator every time the effective
-    connection type is computed.
-  </summary>
-</histogram>
-
-<histogram name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"
-    units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated HTTP RTT and the observed HTTP
-    RTT. HTTP RTT estimated by the network quality estimator at the time of
-    navigation start is compared with the HTTP RTT observed during the specified
-    time interval following the start of the navigation. Both the estimated and
-    the observed RTT are computed using average algorithm that assigns equal
-    weight to all observations.
-  </summary>
-</histogram>
-
-<histogram name="NQE.UnweightedAverage.MainFrame.RTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the URLRequest layer
-    computed using average algorithm that assigns equal weight to all
-    observations.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"
-    units="ms">
-  <owner>tbansal@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Records the difference between the estimated HTTP RTT and the observed HTTP
-    RTT. HTTP RTT estimated by the network quality estimator at the time of
-    navigation start is compared with the HTTP RTT observed during the specified
-    time interval following the start of the navigation. Both the estimated and
-    the observed RTT are computed using weighted average algorithm.
-  </summary>
-</histogram>
-
-<histogram name="NQE.WeightedAverage.MainFrame.RTT" units="ms">
-  <owner>bengr@chromium.org</owner>
-  <owner>tbansal@chromium.org</owner>
-  <summary>
-    Rough estimate of the computed round trip time at the URLRequest layer
-    computed using weighted average algorithm.
-
-    This metric is recorded on main-frame requests.
-  </summary>
-</histogram>
-
-<histogram name="ntp.searchurls.total">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType">
-  <obsolete>
-    Deprecated 10/2011. No longer tracked, replaced with
-    NewTabPage.DefaultPageType
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The default pane when the NTP is first opened.</summary>
-</histogram>
-
-<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType">
-  <obsolete>
-    Deprecated 10/2011. No longer tracked, replaced with
-    NewTabPage.SelectedPageType
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The pane selected when the user switches panes in the NTP.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.AccountRevoked.IsEmailId" enum="Boolean">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    This histogram records whether the account ID is actually an email if we
-    detect an account that has an account ID but not email.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.AccountRevoked.MigrationState"
-    enum="OAuth2LoginAccountRevokedMigrationState">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    This histogram records the account ID migration status from email to GAIA ID
-    if we detect an account that has an account ID but not email.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.GetOAuth2AccessTokenFailure"
-    enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Failure reason of final OAuth2 access token retrieval call during Chrome OS
-    login.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.GetOAuth2AccessTokenRetry"
-    enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Retry reason of failed OAuth2 access token retrieval call during Chrome OS
-    login.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError">
-  <obsolete>
-    Deprecated 2015-05-22. Replaced by Signin.ListAccountsFailure.
-  </obsolete>
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Failure reason of final ListAccounts call failure during Chrome OS login.
-    This data is now included in Signin.ListAccountsFailure.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError">
-  <obsolete>
-    Deprecated 2015-05-22. Replaced by Signin.ListAccountsRetry.
-  </obsolete>
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Retry reason of failed ListAccounts call during Chrome OS login. This data
-    is now included in Signin.ListAccountsRetry.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.MergeSessionFailure" enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Failure reason of MergeSession call during Chrome OS login, Chrome Signin or
-    account addition. On all OSes as of M44 (previously CrOS only).
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.MergeSessionRetry" enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Retry reason of failed MergeSession call during Chrome OS login, Chrome
-    Signin or account addition. On all OSes as of M44 (previously CrOS only).
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginGaiaCredFailure"
-    enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Failure reason of final OAuthLogin (with SID+LSID) call during Chrome OS
-    login.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginGaiaCredRetry"
-    enum="GoogleServiceAuthError">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Retry reason of failed OAuthLogin (with SID+LSID) call during Chrome OS
-    login.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginUberTokenFailure"
-    enum="GoogleServiceAuthError">
-  <obsolete>
-    Deprecated 2015-05-22
-  </obsolete>
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Failure reason of final OAuthLogin (with uber token) call during Chrome OS
-    login. This data is now (M44+) included in Signin.UberTokenFailure.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginUberTokenRetry"
-    enum="GoogleServiceAuthError">
-  <obsolete>
-    Deprecated 2015-05-22
-  </obsolete>
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Retry reason of failed OAuthLogin (with uber token) call during Chrome OS
-    login. This data is now (M44+) included in Signin.UberTokenRetry.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.PostMergeVerification"
-    enum="PostMergeVerificationOutcome">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Outcome of Chrome OS GAIA cookie post-merge session verification process. It
-    measures how often /MergeSession request collided with browser session
-    restore process resulting in partially authenticated primary GAIA session.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.PreMergeVerification"
-    enum="PostMergeVerificationOutcome">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    Outcome of Chrome OS GAIA cookie pre-merge session verification process. It
-    measures how often we need to perform /MergeSession request to
-    re-authenticated exisitng user with GAIA.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.SeedState" enum="OAuth2LoginSeedState">
-  <owner>knn@chromium.org</owner>
-  <summary>
-    Only applicable on M47 on Android. Measure the frequency of a suppressed
-    error state when the account is not seeded.
-  </summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>Outcome of Chrome OS GAIA cookie session restore process.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestoreTimeToFailure" units="ms">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>How long it takes for the session restore to fail.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestoreTimeToSuccess" units="ms">
-  <owner>zelidrag@chromium.org</owner>
-  <summary>
-    How long it takes for the session restore to finish succeessfully.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.AggregatedRequestResult"
-    enum="OfflinePagesAggregatedRequestResult">
-  <obsolete>
-    Deprecated 2016-10, and replaced by OfflinePages.AggregatedRequestResult2.
-  </obsolete>
-  <owner>dimich@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>Result of servicing requests that may contain offline page.</summary>
-</histogram>
-
-<histogram name="OfflinePages.AggregatedRequestResult2"
-    enum="OfflinePagesAggregatedRequestResult">
-  <owner>dimich@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>Result of servicing requests that may contain offline page.</summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.CctApiDisableStatus"
-    enum="OfflinePagesCctApiPrerenderAllowedStatus">
-  <owner>petewil@chromium.org</owner>
-  <summary>
-    Reason for the Chrome Custom Tabs API prerender call to be ignored.
-
-    There are several causes for the Chrome Custom Tabs API calls to be ignored,
-    this tracks the potential causes so we can see how often the prerenderer
-    doesn't prerender due to these being switched off.  Since this is checked
-    elsewhere (CCTAPI), this only catches the user switching off the third party
-    cookies or navigation prediction after the CCT API has checked.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.EffectiveConnectionType.PauseRequests"
-    enum="NQEEffectiveConnectionType">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Effective connection type when pausing one or more background loads is
-    requested.
-
-    This metric is recorded for RequestCoordinator::PauseRequests API calls.
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.EffectiveConnectionType.RemoveRequests"
-    enum="NQEEffectiveConnectionType">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Effective connection type when removing one or more background loads is
-    requested.
-
-    This metric is recorded for RequestCoordinator::RemoveRequests API calls.
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.EffectiveConnectionType.ResumeRequests"
-    enum="NQEEffectiveConnectionType">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Effective connection type when resuming one or more background loads is
-    requested.
-
-    This metric is recorded for RequestCoordinator::ResumeRequests API calls.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"
-    enum="NQEEffectiveConnectionType">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Effective connection type when a background load is requested.
-
-    This metric is recorded for RequestCoordinator::SavePageLater API calls.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.ImmediateStart.AvailableRequestCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests available for processing when
-    processing starts immediately (vs. scheduled). This is for non-svelte
-    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ImmediateStart.AvailableRequestCount.Svelte">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests available for processing when
-    processing starts immediately (vs. scheduled). This is for svelte devices
-    (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests unavailable for processing when
-    processing starts immediately (vs. scheduled). This is for non-svelte
-    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount.Svelte">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests unavailable for processing when
-    processing starts immediately (vs. scheduled). This is for svelte devices
-    (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.ImmediateStartStatus"
-    enum="OfflinePagesBackgroundImmediateStartStatus">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Status of attempt to immediately start offlining a page in the background
-    while application is still concurrently using the foreground. This may be
-    attempted when an web page download is initially requested or resumed.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.OfflinerRequestStatus"
-    enum="OfflinePagesBackgroundOfflinerRequestStatus">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Status code of background offlining (loading and saving) requests.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.RequestFailure.StartedAttemptCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of started attempts by failed background load requests.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.RequestSuccess.StartedAttemptCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of started attempts by successful background load requests.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.ScheduledStart.AvailableRequestCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests available for processing when
-    background scheduled processing starts. This is for non-svelte devices
-    (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ScheduledStart.AvailableRequestCount.Svelte">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests available for processing when
-    background scheduled processing starts. This is for svelte devices (where
-    svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests unavailable for processing when
-    background scheduled processing starts. This is for non-svelte devices
-    (where svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount.Svelte">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Number of queued background load requests unavailable for processing when
-    background scheduled processing starts. This is for svelte devices (where
-    svelte is determined by base::SysInfo::IsLowEnd()).
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.TimeToCanceled" units="seconds">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>Time from background request until it was canceled.</summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.TimeToSaved" units="seconds">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Time from background request until it was successfully saved.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.TimeToStart" units="ms">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Time from background request until processing it was first started. This is
-    for non-svelte devices.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.TimeToStart.Svelte" units="ms">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Time from background request until processing it was first started on svelte
-    device. Svelte is determined by base::SysInfo::IsLowEnd().
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Background.UnsupportedScheme.ConnectionType"
-    enum="NetworkConnectionType">
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Connection type when prerenderer reports Unsupported Scheme error.
-
-    To give insight about Unsupported Scheme errors that may be due to lost
-    network connection (as data URL used for rendering an error page will
-    manifest as an Unsupported Scheme error by the prerenderer).
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.BatchDelete.Count">
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of offline pages that are deleted in a batch.</summary>
-</histogram>
-
-<histogram name="OfflinePages.BatchDelete.TotalPageSize" units="KB">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Total size, in kilobytes, of all offline pages that are deleted in a batch.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.CanSaveRecentPage" enum="Boolean">
-  <owner>fgorski@chromium.org</owner>
-  <summary>
-    Can a recent page be saved or not? Logged for all attempts to save
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.ClearAllStatus" enum="OfflinePagesClearAllStatus">
-  <obsolete>
-    Deprecated 3/2016, and replaced by OfflinePages.ClearAllStatus2.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>Status code of wiping out the offline page data.</summary>
-</histogram>
-
-<histogram name="OfflinePages.ClearAllStatus2"
-    enum="OfflinePagesClearAllStatus">
-  <owner>jianli@chromium.org</owner>
-  <summary>Status code of wiping out the offline page data.</summary>
-</histogram>
-
-<histogram name="OfflinePages.ClearStorageBatchSize" units="pages">
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Number of pages deleted in a batch during one clear-storage request.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.ClearStorageResult"
-    enum="OfflinePagesClearStorageResult">
-  <owner>romax@chromium.org</owner>
-  <summary>Result of asking storage manager to clear storage.</summary>
-</histogram>
-
-<histogram name="OfflinePages.Consistency.DeleteOrphanedArchivesResult"
-    enum="BooleanSuccess">
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Whether an attempt to delete archive files without metadata was successful.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Consistency.DeletePagesMissingArchiveFileResult"
-    enum="OfflinePagesDeletePageResult">
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Whether an attempt to delete pages without archives was successful.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Consistency.ExpirePagesMissingArchiveFileResult"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 11/2016, replaced by
-    OfflinePages.Consistency.DeletePagesMissingArchiveFileResult.
-  </obsolete>
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Whether an attempt to expire pages without archives was successful.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Consistency.OrphanedArchivesCount">
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Number of archives without metadata entry when checking consistency.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Consistency.PagesMissingArchiveFileCount">
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Number of offline pages without archive file when checking consistency.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.AccessCount">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of accesses to the offline page since its creation. This is reported
-    when the offline page was deleted.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.FreeSpaceMB" units="MB">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The amount of free space available, in megabytes, on the user's device after
-    the page is deleted.
-
-    Note that before M52 this operation was started before delete operation.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.FreeSpacePercentage" units="%">
-  <obsolete>
-    Deprecated as of 5/2016. Marginal applicability.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The percentage of free space available on the user's device when the page is
-    being deleted.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.LastOpenToCreated" units="minutes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time between when an offline page was created and was opened last
-    time. This is reported when the page was deleted.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.PageSize" units="KB">
-  <owner>jianli@chromium.org</owner>
-  <summary>Size of the offline page, in kilobytes, that was deleted.</summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.TimeSinceLastOpen" units="minutes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time between when an offline page was last opened and was deleted.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace"
-    units="%">
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The percentage of space taken by offline pages from the free space that
-    could be available, if the feature was not present. I.e. considering
-    situation where the user has: Free Space, Offline content, other apps and
-    data. This is a percentage of: Offline content / (Offline content + Free
-    Space).
-
-    The value will be recorded after user deletes a single or multiple offline
-    pages. In case pages are removed in bulk, this value will be reported once.
-    This value is only reported with deleting, as we are trying to infer if lack
-    of free space might have caused the user to delete.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DeletePageResult"
-    enum="OfflinePagesDeletePageResult">
-  <owner>jianli@chromium.org</owner>
-  <summary>Result of removing an offline copy for a page.</summary>
-</histogram>
-
-<histogram name="OfflinePages.DownloadDeletedPageDuplicateCount" units="pages">
-  <owner>dewittj@chromium.org</owner>
-  <owner>dimich@chromium.org</owner>
-  <summary>
-    The number of downloaded pages with the same URL that exist at the time that
-    we delete a downloaded page.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateRequested"
-    units="seconds">
-  <owner>dewittj@chromium.org</owner>
-  <owner>fgorski@chromium.org</owner>
-  <summary>
-    If at request time there is another request with the same URL, this tracks
-    this amount of time between creation of the most recent request and the
-    current request.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateSaved"
-    units="seconds">
-  <owner>dewittj@chromium.org</owner>
-  <owner>fgorski@chromium.org</owner>
-  <summary>
-    If at request time there is another downloaded page with the same URL, this
-    tracks this amount of time between creation of the most recent existing page
-    and the current request.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DownloadSavedPageDuplicateCount" units="pages">
-  <owner>dewittj@chromium.org</owner>
-  <owner>dimich@chromium.org</owner>
-  <summary>
-    The number of downloaded pages with the same URL that exist at the time that
-    we save a downloaded page.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved"
-    units="seconds">
-  <owner>dewittj@chromium.org</owner>
-  <owner>dimich@chromium.org</owner>
-  <summary>
-    If at save time there is another downloaded page with the same URL, this
-    tracks this amount of time between creation of the most recent existing page
-    and the current page.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Edit.BookmarkUrlChangedForOfflinePage"
-    enum="BooleanMatched">
-  <obsolete>
-    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
-  </obsolete>
-  <owner>dougarnett@chromium.org</owner>
-  <summary>
-    Whether a user-edited bookmark URL had a saved offline page.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.ExpirePage.BatchSize">
-  <obsolete>
-    Deprecated 11/2016. Offline pages no longer use two-step expiration.
-  </obsolete>
-  <owner>romax@chromium.org</owner>
-  <summary>Number of pages that are expired in a batch.</summary>
-</histogram>
-
-<histogram name="OfflinePages.ExpirePage.PageLifetime" units="minutes">
-  <obsolete>
-    Deprecated 11/2016. Offline pages no longer use two-step expiration.
-  </obsolete>
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Length of time between when an offline page was created and was expired.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.ExpirePage.StoreUpdateResult"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 11/2016. Offline pages no longer use two-step expiration.
-  </obsolete>
-  <owner>romax@chromium.org</owner>
-  <summary>Result of updating expired page in store.</summary>
-</histogram>
-
-<histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess" units="minutes">
-  <obsolete>
-    Deprecated 11/2016. Offline pages no longer use two-step expiration.
-  </obsolete>
-  <owner>romax@chromium.org</owner>
-  <summary>
-    Length of time between when an offline page was last opened and was expired.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Filter.OnlineWhenEntering" enum="Boolean">
-  <obsolete>
-    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
-  </obsolete>
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether user is connected when entering the filter with offline only
-    content.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Filter.OnlineWhenLeaving" enum="Boolean">
-  <obsolete>
-    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
-  </obsolete>
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether user is connected when leaving the filter with offline only content.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.FirstOpenSinceCreated" units="minutes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The time elapsed between creation of the offline page and the first time it
-    was opened.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.IncognitoSave" enum="Boolean">
-  <obsolete>
-    Deprecated 5/2016. Not longer needed.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether the page that was being saved offline was in incognito mode.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.LaunchLocation" enum="StarsLaunchLocation">
-  <obsolete>
-    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
-  </obsolete>
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>Logs a UI location from which an offline page is launched.</summary>
-</histogram>
-
-<histogram name="OfflinePages.LoadStatus" enum="OfflinePagesLoadStatus">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Status code of loading from the offline pages metadata store.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.LoadSuccess" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 10/2015, and replaced by OfflinePages.LoadStatus.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether an attempt to load the offline pages metadata store was successful.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Model.ArchiveDirCreationTime" units="ms">
-  <owner>dewittj@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The amount of time to create the offline pages archive directory.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Model.ConstructionToLoadedEventTime" units="ms">
-  <owner>dewittj@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The amount of time to create the offline pages archive directory and load
-    the offline page model.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.OfflinePageCount">
-  <obsolete>
-    Deprecated 5/2016. This was the dup of OfflinePages.SavedPageCount.
-  </obsolete>
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>Number of offline pages the user has. Android only.</summary>
-</histogram>
-
-<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean">
-  <obsolete>
-    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether the user was online when a saved page with offline copy was opened.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.OpenSinceLastOpen" units="minutes">
-  <owner>jianli@chromium.org</owner>
-  <summary>Length of time between two consecutive opens.</summary>
-</histogram>
-
-<histogram name="OfflinePages.PageLifetime" units="minutes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Length of time between when an offline page was created and was removed.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.PageSize" units="KB">
-  <owner>jianli@chromium.org</owner>
-  <summary>Size of the saved copy of an offline page.</summary>
-</histogram>
-
-<histogram name="OfflinePages.RedirectResult" enum="OfflinePagesRedirectResult">
-  <obsolete>
-    Deprecated 8/2016. Use OfflinePages.RequestResult instead.
-  </obsolete>
-  <owner>dimich@chromium.org</owner>
-  <summary>
-    Result of automatic redirect to offline version of the page or back. Emitted
-    exactly once when offline-to-online or online-to-offline redirect is
-    determined to be needed and conveys the outcome of redirect.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.RedirectToOfflineCount" units="count">
-  <obsolete>
-    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of times an offline copy was loaded instead when the user is trying
-    to load the online version of a saved page and there is no network
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.RedirectToOnlineCount" units="count">
-  <obsolete>
-    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of times an online version was loaded instead when the user is trying
-    to load the offline copy of a saved page and there is network connection.
-    connection.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.RequestJob.OpenFileErrorCode"
-    enum="NetErrorCodes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Positive net error code for opening the underlying file to serve the offline
-    page, including net::OK.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.RequestJob.ReadFileErrorCode"
-    enum="NetErrorCodes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Positive net error code for the failure to read the underlying file to serve
-    the offline page. net::OK is not included.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.RequestJob.SeekFileErrorCode"
-    enum="NetErrorCodes">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Positive net error code for the failure to seek the underlying file to serve
-    the offline page. net::OK is not included.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SavedPageCount" units="pages">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Number of saved pages restored from the offline pages metadata store when it
-    is logged.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The amount of free space available, in megabytes, on the user's device after
-    the page is saved.
-
-    Note that before M52 this operation was started before save operation.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SavePage.FreeSpacePercentage" units="%">
-  <obsolete>
-    Deprecated as of 5/2016. Marginal applicability.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The percentage of free space available on the user's device when the page is
-    being saved.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SavePage.PercentLoaded" units="%">
-  <owner>dfalcantara@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    The percentage of the page load completed when the button to save an offline
-    page is pressed.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SavePageResult" enum="OfflinePagesSavePageResult">
-  <owner>jianli@chromium.org</owner>
-  <summary>Result of saving an offline copy for a page.</summary>
-</histogram>
-
-<histogram name="OfflinePages.SavePageTime" units="ms">
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    The amount of time taken to save an offline copy for a page.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.SharedPageWasOffline"
-    enum="OfflinePagesSharedPageWasOffline">
-  <owner>dewittj@chromium.org</owner>
-  <summary>Whether a shared page was an offline page or not.</summary>
-</histogram>
-
-<histogram name="OfflinePages.ShowOfflinePageOnBadNetwork" enum="Boolean">
-  <obsolete>
-    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
-  </obsolete>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether an offline page is shown, instead of error page, when the network is
-    disconnected or poor condition.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.TotalPageSize" units="MB">
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Total size of all the offline pages saved by the user.
-
-    This value is recorded whenever the number of pages change, meaning after a
-    page is added or removed. If pages are removed in bulk, this value will be
-    reported only once.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.TotalPageSizePercentage" units="%">
-  <obsolete>
-    Deprecated as of 5/2016. Marginal applicability.
-  </obsolete>
-  <owner>fgorski@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Total size of all the offline pages saved by the user as a percentage of
-    total storage size.
-
-    This value is recorded whenever the number of pages change, meaning after a
-    page is added or removed.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Wakeup.BatteryPercentage" units="%">
-  <owner>petewil@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Percentage of battery remaining when the offline page background loading
-    task wakes up to check for work.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Wakeup.ConnectedToPower" enum="BooleanConnected">
-  <owner>petewil@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Whether the device is plugged in when the offline page background load task
-    wakes up to check or work.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Wakeup.DelayTime" units="ms">
-  <owner>petewil@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Time delay from a dinosaur page to connection being available.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.Wakeup.NetworkAvailable"
-    enum="NetworkConnectionType">
-  <owner>petewil@chromium.org</owner>
-  <owner>jianli@chromium.org</owner>
-  <summary>
-    Which network is available (if any) when the offling page background loading
-    task wakes up to check for work.
-  </summary>
-</histogram>
-
-<histogram
-    name="OfflinePages.WebsiteSettings.ConnectedWhenOpenOnlineButtonClicked"
-    enum="BooleanConnected">
-  <owner>fgorski@chromium.org</owner>
-  <summary>
-    Indicates whether the browser was connected when Open online button was
-    clicked on Website Settings popup, which causes a reload of an offline page
-    to online version.
-  </summary>
-</histogram>
-
-<histogram name="OfflinePages.WebsiteSettings.OpenOnlineButtonVisible"
-    enum="BooleanVisible">
-  <owner>fgorski@chromium.org</owner>
-  <summary>
-    Indicates whether Open online was visible in Website Settings popup, when it
-    was shown for an offline page. (The button is visible only when Chrome is
-    connected when the Website Settings popup is opened for offline page.)
-  </summary>
-</histogram>
-
-<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When a page is loaded in offline mode, the percentage of resources on that
-    page that were successfully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.AggressiveHistoryURLProviderFieldTrialBeacon"
-    enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon">
-  <obsolete>
-    Aggressive HistoryURL provider field trial deleted in spring 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    A number that indicates what omnibox ranking behavior the user is seeing as
-    part of the OmniboxAggressiveHistoryURLProvider field trial
-    (OmniboxAggressiveHistoryURLProvider).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess">
-  <owner>jdonnelly@chromium.org</owner>
-  <summary>
-    For each answer received in suggest responses, the number that are
-    well-formed and contain all the required elements.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.AnswerParseType" enum="SuggestionAnswerType">
-  <owner>jdonnelly@chromium.org</owner>
-  <summary>
-    The number of times each omnibox suggestion answer type (e.g., weather,
-    sports score) was received and parsed successfully. Can be normalized with
-    the count of emits to Omnibox.SuggestRequest.Success.GoogleResponseTime,
-    which counts all successful suggest responses from Google, not just those
-    with answers attached. Note that GoogleResponseTime is technically off given
-    that it will still count cases where we fail to extract, deserialize, or
-    parse the response. But these cases are rare to non-existent.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.CharTypedToRepaintLatency" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the time taken between a keystroke being typed in the omnibox and
-    the text being painted. If there are multiple keystrokes before a paint,
-    logs the time since the earliest one.
-
-    This duration is composed of three parts: a) the time spent processing the
-    initial input event, b) the time spent for the repaint task to be scheduled
-    on the message loop and c) the time spent painting the Omnibox.
-
-    To diagnose a regression, check the following breakdown metrics:
-    Omnibox.QueryTime2 is a good proxy for (a) and Omnibox.PaintTime for (c).
-    (b) does not have a corresponding histogram but can be analyzed on the UMA
-    Task Profiler dashboard by looking at &quot;average queue time&quot; of the
-    task DisplayScheduler::ScheduleBeginFrameDeadline.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.CutOrCopyAllText" units="count">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of cut or copy commands on all selected text in the omnibox.
-    Gathered on desktop platforms (Win, Mac, Linux, Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of times users enter keyword hint mode &quot;Search ___
-    for:&quot; and how.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToEditTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time between when a user focused on the omnibox and first
-    modifies the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToOpenTime" units="ms">
-  <obsolete>
-    Replaced with Omnibox.FocusToOpenTimeAnyPopupState in April 2014.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time between when a user focused on the omnibox and opened an
-    omnibox match (which could be what they typed or a suggestion).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToOpenTimeAnyPopupState" units="ms">
-  <obsolete>
-    Replaced with Omnibox.FocusToOpenTimeAnyPopupState2 in August, 2016.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time between when a user focused on the omnibox and opened an
-    omnibox match (which could be what they typed or a suggestion).  This is
-    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToOpenTimeAnyPopupState2" units="ms">
-  <obsolete>
-    Replaced with Omnibox.FocusToOpenTimeAnyPopupState3 in January, 2017, which
-    only differs in the bucketing and range.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time between when a user focused on the omnibox and opened an
-    omnibox match (which could be what they typed or a suggestion).  This is
-    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
-    It is not recorded if a match is opened without triggering a focus event,
-    e.g., when a user drags a URL to the omnibox to navigate.
-
-    To know how common this last condition is, compare the total count of this
-    histogram to the total number of omnibox events.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToOpenTimeAnyPopupState3" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time between when a user focused on the omnibox and opened an
-    omnibox match (which could be what they typed or a suggestion).  This is
-    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
-    It is not recorded if a match is opened without triggering a focus event,
-    e.g., when a user drags a URL to the omnibox to navigate.
-
-    To know how common this last condition is, compare the total count of this
-    histogram to the total number of omnibox events.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.HardwareKeyboardModeEnabled" enum="BooleanEnabled">
-  <owner>lpromero@chromium.org</owner>
-  <summary>
-    iOS: Records whether a hardware keyboard is used to input text. This is
-    recorded each time a UIKeyboardWillChangeFrameNotification is sent while
-    editing the omnibox text.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.HasLegalDefaultMatchWithoutCompletion" enum="Boolean">
-  <obsolete>
-    Deprecated 2015-01-27
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether there was at least one legal default match without an
-    |inline_autocompletion|.  Recorded every time
-    AutocompleteResult::SortAndCull() is called, which could happen multiple
-    times on each keystroke.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.HistoryQuickHistoryIDSetFromWords" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Times URLIndexPrivateData::HistoryIDSetFromWords(), which is called by the
-    omnibox's HistoryQuick provider.
-    URLIndexPrivateData::HistoryIDSetFromWords() can be called multiple times
-    per keystroke due to, for example, the cursor being in the middle of the
-    input string or SearchProvider's calls to Classify().
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.InputType" enum="OmniboxInputType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The kind of input the user provided when using the omnibox to go somewhere.
-    The type can be misleading.  For example if the user typed 'http:/', it gets
-    marked as a query because it cannot be opened as a URL even though the user
-    probably wanted and selected a URL from the list of suggestions.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.IsPasteAndGo" enum="Boolean">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether an omnibox interaction is a paste-and-search/paste-and-go action.
-    (This histogram records both of these in the &quot;True&quot; bucket for
-    this histogram because both of these are referred to as paste-and-go in the
-    code.)  These typically involve right-clicking in the omnibox and selecting
-    that option from the dropdown.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.IsPopupOpen" enum="Boolean">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether the omnibox popup (a.k.a. dropdown) is open at the time the user
-    used the omnibox to go somewhere.  It can be closed if, for instance, the
-    user clicked in the omnibox and hit return to reload the same page.  Also,
-    because paste-and-search/paste-and-go actions ignore the current content of
-    the omnibox dropdown (if it is open) when they happen, we pretend the
-    dropdown is closed when logging these.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.JustDeletedText" enum="Boolean">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether the user deleted text immediately before selecting an omnibox
-    suggestion.  This is usually the result of pressing backspace or delete.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.NumEvents">
-  <owner>mpearson@chromium.org</owner>
-  <summary>The number of times users used the omnibox to go somewhere.</summary>
-</histogram>
-
-<histogram name="Omnibox.NumTypedTerms" units="terms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of terms in the text the user entered in the omnibox when they
-    used the omnibox to go somewhere.  Terms are defined by splitting on
-    whitespace.  All values larger than 6 are recorded in bucket 6.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.PageContext" enum="OmniboxPageContext">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    What the user was viewing when the user used the omnibox to go somewhere.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.PaintTime" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Records the time to paint the omnibox contents. This is a subcomponent of
-    Omnibox.CharTypedToRepaintLatency. Implemented on desktop platforms.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.Paste" units="count">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of paste commands on the text in the omnibox. Reported every time
-    a paste command is done.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.PasteAndGo" units="count">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of paste-and-go commands on the text in the omnibox. Reported
-    every time a paste-and-go command is done.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus"
-    enum="Boolean">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Records a boolean value indicating whether the Physical Web provider was
-    invoked by focusing the omnibox during the current omnibox session. This is
-    unexpected; it's probably a bug somwhere. Recorded when the user selects an
-    omnibox suggestion. Does not record when the Physical Web omnibox provider
-    is disabled.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.PhysicalWebProviderMatches">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    The number of matches returned by PhysicalWebProvider. Emitted when the
-    omnibox is first focused, unless the user is in incognito mode. Capped at
-    10.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ProgressBarBreakPointUpdateCount"
-    units="break point updates">
-  <owner>kkimlabs@chromium.org</owner>
-  <summary>
-    The number of progress bar break point updates from page load started to
-    page load finished.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ProgressBarUpdateCount" units="frame updates">
-  <owner>kkimlabs@chromium.org</owner>
-  <summary>
-    The number of progress bar frame updates from page load started to page load
-    finished. If there is no animation, this matches
-    Omnibox.ProgressBarBreakPointUpdateCount. Note that there can be additional
-    updates after page load finished, animating to 100%, but this histogram
-    doesn't include them.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ProviderTime" units="ms">
-  <obsolete>
-    Deprecated 2015-06-12. Replaced by Omnibox.ProviderTime2.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time taken by the named provider&quot;s synchronous pass.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ProviderTime2" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of time taken by the named provider&quot;s synchronous pass.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.QueryBookmarksTime">
-  <obsolete>
-    Deprecated 2012-11-14. Replaced by Omnibox.ProviderTime.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time the HistoryContentProvider takes to perform a bookmark search.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.QueryTime" units="ms">
-  <obsolete>
-    Deprecated 2015-06-12. Replaced by Omnibox.QueryTime2.
-  </obsolete>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time it takes for the omnibox to become responsive to user input after the
-    user has typed N characters. This measures the time it takes to start all
-    the asynchronous autocomplete providers (but not wait for them to finish).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.QueryTime2" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time it takes for the omnibox to become responsive to user input after the
-    user has typed N characters. This measures the time it takes to start all
-    the asynchronous autocomplete providers (but not wait for them to finish).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SaveStateForTabSwitch.UserInputInProgress"
-    units="count">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    When a user switches tabs, whether the omnibox had an edit in progress.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine">
-  <obsolete>
-    Made obsolete around Chrome 32.  Use Omnibox.SearchEngineType instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The id of search engine that was used for search in omnibox. See
-    src/chrome/browser/search_engines/template_url_prepopulate_data.cc for more
-    info.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchEngineType" enum="OmniboxSearchEngineType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The type of search engine associated with a match opened from the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchProvider.AddHistoryResultsTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time it takes to add all the raw history results to the list of matches.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchProvider.ConvertResultsTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time it takes to convert all the results to matches and add them to a map,
-    to keep the most relevant match for each result.
-  </summary>
-</histogram>
-
-<histogram
-    name="Omnibox.SearchProvider.GetMostRecentKeywordTermsDefaultProviderTime"
-    units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Time it takes for the omnibox to search the previous query history database
-    for queries that start with the omnibox text.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchProviderMatches">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of matches returned by SearchProvider.  Emitted on every call to
-    SearchProvider::Start(), which effectively means every key stroke in the
-    omnibox.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SelectedPosition" units="position">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The index of the item that the user selected in the omnibox popup (a.k.a.
-    dropdown) list.  0 means the inline suggestion shown within the omnibox.
-    This is also the same suggestion shown as the top item in the dropdown.  The
-    second item in the dropdown will be recorded as bucket 1. The selected
-    position is always set to 0 when the popup is closed at the time of
-    navigation or if the user did a paste-and-search or paste-and-go action.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs">
-  <obsolete>
-    Deprecated in M58, replaced with
-    Omnibox.SuggestionUsed.NearbyURLCount.AtFocus and
-    Omnibox.SuggestionUsed.NearbyURLCount.AtMatchCreation.
-  </obsolete>
-  <summary>
-    The number of nearby Physical Web URLs when the user focused the omnibox.
-    Recorded when the user accepts an omnibox suggestion, regardless of whether
-    the suggestion came from PhysicalWebProvider. Capped at 50.
-
-    In M57, the values recorded by this histogram were determined to be bugged.
-    It's believed that it was recording uninitialized values due to a corner
-    case on Android that allows an omnibox suggestion to be selected without
-    first focusing the omnibox. In addition to the new histograms,
-    Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus was added to
-    detect this case. https://crbug.com/691059
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtFocus" units="URLs">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    The number of nearby Physical Web URLs when Physical Web Provider was last
-    focused (i.e., the start of the current session). Recorded when the user
-    accepts an omnibox suggestion, regardless of whether the suggestion came
-    from PhysicalWebProvider. Capped at 50.
-
-    Does not record if the omnibox was not focused during the current session.
-    Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus records true
-    when we hit this case.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtMatchCreation"
-    units="URLs">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    The number of nearby Physical Web URLs when Physical Web Provider last
-    constructed matches. Recorded when the user accepts an omnibox suggestion,
-    regardless of whether the suggestion came from PhysicalWebProvider. Capped
-    at 50.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.Provider" enum="OmniboxProviderType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The provider of the suggestion the user selected when the user used the
-    omnibox to go somewhere.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.ProviderAndResultType"
-    enum="OmniboxProviderAndResultType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The provider and result type of the suggestion the user selected when the
-    user used the omnibox to go somewhere.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestionUsed.SearchVsUrl"
-    enum="OmniboxSummarizedResultType">
-  <owner>mpearson@google.com</owner>
-  <summary>
-    The rough type of the suggestion the user selected when the user used the
-    omnibox to go somewhere.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The time elapsed between the sending of a suggest request to Google until
-    the time the request was returned with status==failed. Ignores requests that
-    were canceled before being returned.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequest.Success.GoogleResponseTime" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The time elapsed between the sending of a suggest request to Google until
-    the time the request was returned with status==success. Ignores requests
-    that were canceled before being returned.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequests" enum="OmniboxSuggestRequests">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Counts about the number of suggest requests the omnibox sent, invalidated,
-    and replies received.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.TypedLength" units="characters">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The length of the text the user entered in the omnibox when they used the
-    omnibox to go somewhere.  All values larger than 500 are recorded in bucket
-    500.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.TypingDuration" units="ms">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The amount of time, in milliseconds, since the user first began modifying
-    the text in the omnibox until the user used the omnibox to go somewhere. If
-    at some point after modifying the text, the user reverted the modifications
-    (thus seeing the current web page's URL again), then wrote in the omnibox
-    again, this duration starts from the time of the second series of
-    modification.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.UserTextCleared" enum="OmniboxUserTextCleared">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Counts the number of times that the user text is cleared.  IME users are
-    sometimes in the situation that IME was unintentionally turned on and failed
-    to input latin alphabets (ASCII characters) or the opposite case.  In that
-    case, users may delete all the text and the user text gets cleared.  This
-    histogram helps us estimate how often this scenario happens.
-
-    Note that since we don't currently correlate &quot;text cleared&quot; events
-    with IME usage, this also captures many other cases where users clear the
-    text; though it explicitly doesn't log deleting all the permanent text as
-    the first action of an editing sequence (see comments in
-    OnAfterPossibleChange()).
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggest.Eligible.OnFocus"
-    enum="ZeroSuggestEligibleOnFocus">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether the user has settings configured so that the current page URL can be
-    sent to the suggest server to request contextual suggestions.  For example,
-    this is only supported for users who have Google as their default search
-    engine (unmodified version of Google), have search suggest enabled, are
-    signed-in and syncing without a custom passphrase, and don't have an
-    incognito window open.  There are other criteria too.  Recorded on focus in
-    the omnibox if there is default search provider and we've constructed a
-    suggest URL.
-
-    Some additional guidelines: if an incognito window is open, all focus events
-    will go into the &quot;generally ineligible&quot; bucket. Likewise, if the
-    current page is a search results page, we don't allow contextual suggestions
-    either so focus events on those pages go in the &quot;generally
-    ineligible&quot; bucket.  The difference between &quot;eligible&quot; and
-    &quot;generally eligible but not this time&quot; depends only the properties
-    of the current URL.
-
-    Recorded regardless of whether contextual or non-contextual zero suggest is
-    currently enabled on the user's platform.  However, if zero suggest (in all
-    forms) is entirely disabled, the user will be perpetually ineligible.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggest.Eligible.OnProfileOpen"
-    enum="BooleanSupported">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether the user has settings configured so that the current page URL could
-    be sent to the suggest server to request contextual suggestions.  For
-    example, this is only supported for users who have Google as their default
-    search engine (unmodified version of Google), have search suggest enabled,
-    and are signed-in and syncing without a custom passphrase.  There are other
-    criteria too.  Recorded on profile open.  Note that opening an incognito
-    window (if none are currently open under the given profile) counts as
-    opening a new profile.
-
-    Some additional guidelines: unlike Omnibox.ZeroSuggest.Eligible.OnFocus,
-    because this is recorded on profile open, users cannot be declared
-    ineligible because they have an incognito window open (it's impossible to
-    have an incognito window open for a given profile at the time of profile
-    open) and also cannot be declared ineligible because the user is viewing a
-    search results page.  (We test this on-profile-open using an arbitrary URL.)
-
-    Recorded regardless of whether contextual or non-contextual zero suggest is
-    currently enabled on the user's platform.  However, if zero suggest (in all
-    forms) is entirely disabled, the user will be perpetually ineligible.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggest.MostVisitedResultsCounterfactual">
-  <owner>hfung@chromium.org</owner>
-  <summary>
-    The number of most visited suggestions returned when ZeroSuggest would have
-    triggered.  The suggestions appear when the user has focused but not
-    modified the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggestRequests" enum="OmniboxZeroSuggestRequests">
-  <owner>hfung@chromium.org</owner>
-  <summary>
-    Counts about the number of zero suggest requests (requests for suggestions
-    when the user has focused but not modified the omnibox) the omnibox sent,
-    invalidated, and replies received.
-  </summary>
-</histogram>
-
-<histogram name="OOBE.BootToSignInCompleted" units="ms">
-  <owner>merkulova@chromium.org</owner>
-  <summary>Time from boot to sign-in completed.</summary>
-</histogram>
-
-<histogram name="OOBE.ErrorScreensTime.Enrollment" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Time spent on error screens during enrollment or autoenrollment.
-  </summary>
-</histogram>
-
-<histogram name="OOBE.ErrorScreensTime.Signin" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>Time spent on error screens during signin.</summary>
-</histogram>
-
-<histogram name="OOBE.ErrorScreensTime.Supervised" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Time spent on error screens during supervised user creation.
-  </summary>
-</histogram>
-
-<histogram name="OOBE.ErrorScreensTime.Update" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>Time spent on error screens during update.</summary>
-</histogram>
-
-<histogram name="OOBE.NetworkErrorShown.Enrollment" enum="NetworkErrorType">
-  <owner>achuith@google.com</owner>
-  <summary>
-    Number of times error screen has appeared during enrollment or
-    autoenrollment.
-  </summary>
-</histogram>
-
-<histogram name="OOBE.NetworkErrorShown.Signin" enum="NetworkErrorType">
-  <owner>achuith@google.com</owner>
-  <summary>Number of times error screen has appeared during signin.</summary>
-</histogram>
-
-<histogram name="OOBE.NetworkErrorShown.Supervised" enum="NetworkErrorType">
-  <owner>achuith@google.com</owner>
-  <summary>
-    Number of times error screen has appeared during supervised user creation.
-  </summary>
-</histogram>
-
-<histogram name="OOBE.NetworkErrorShown.Update" enum="NetworkErrorType">
-  <owner>achuith@google.com</owner>
-  <summary>Number of times error screen has appeared during update.</summary>
-</histogram>
-
-<histogram name="OOBE.StepCompletionTime" units="ms">
-  <owner>merkulova@chromium.org</owner>
-  <summary>Time spent on specific OOBE screen.</summary>
-</histogram>
-
-<histogram name="OriginChip.Pressed">
-  <obsolete>
-    Deprecated with CL 731423002. OriginChip has been removed.
-  </obsolete>
-  <owner>gbillock@chromium.org</owner>
-  <summary>The number of clicks on the origin chip.</summary>
-</histogram>
-
-<histogram name="OriginTrials.FeatureEnabled" enum="OriginTrialEnableResult">
-  <obsolete>
-    Obsolete as of Chrome 54. Sort of replaced by OriginTrials.ValidationResult.
-  </obsolete>
-  <owner>chasej@chromium.org</owner>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Counts the results of origin trial checks to enable experimental features.
-    The result for each feature check is counted at most once per execution
-    context (e.g. page, worker).
-  </summary>
-</histogram>
-
-<histogram name="OriginTrials.FeatureEnabled.MessageGenerated"
-    enum="OriginTrialMessageGeneratedResult">
-  <obsolete>
-    Obsolete as of Chrome 54.
-  </obsolete>
-  <owner>chasej@chromium.org</owner>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Counts how often an error message is generated for each origin trial check
-    to enable an experimental feature.
-  </summary>
-</histogram>
-
-<histogram name="OriginTrials.ValidationResult" enum="OriginTrialTokenStatus">
-  <owner>chasej@chromium.org</owner>
-  <owner>iclelland@chromium.org</owner>
-  <summary>
-    Counts the results of token validation checks to enable experimental
-    features. The result for each token validation check is counted once per
-    token per execution context (e.g. page, worker).
-  </summary>
-</histogram>
-
-<histogram name="OSX.BluetoothAvailability" enum="BluetoothAvailability">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The availability and capabilities of the Bluetooth driver on OSX devices.
-    This metric is logged on startup.
-  </summary>
-</histogram>
-
-<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour">
-  <obsolete>
-    Obselete as of Chrome 43. See OmahaProxy for more relevant statistics.
-  </obsolete>
-  <owner>mark@chromium.org</owner>
-  <summary>The cat's flavor and how many bits there are in it.</summary>
-</histogram>
-
-<histogram name="OSX.ExceptionHandlerEvents" enum="OSXExceptionHandlerEvents">
-  <owner>mark@chromium.org</owner>
-  <summary>Events seen by the OSX NSException swizzle.</summary>
-</histogram>
-
-<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters">
-  <obsolete>
-    Deprecated as of Chrome 40. See OSX.Fullscreen.Enter.Style,
-    OSX.Fullscreen.Enter.WindowLocation and
-    OSX.Settings.ScreensHaveSeparateSpaces.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This event is recorded each time a user triggers fullscreen for a browser
-    window. The value's bits reflect different parameters. Bit 0: Fullscreen
-    entry mechanism (AppKit vs Immersive). Bit 1: Whether the window was on the
-    primary screen (Primary vs. Secondary). Bit 2: Whether displays have
-    separate spaces options is enabled (Seperate vs Shared). Bit 3: Whether
-    there are multiple screens.
-  </summary>
-</histogram>
-
-<histogram name="OSX.Fullscreen.Enter.Style" enum="OSXFullscreenStyle">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This event is recorded each time a user triggers fullscreen for a browser
-    window. It indicates the mechanism (immersive vs. AppKit) and the type of
-    AppKit Fullscreen (Presentation Mode vs. Canonical Fullscreen).
-  </summary>
-</histogram>
-
-<histogram name="OSX.Fullscreen.Enter.WindowLocation"
-    enum="OSXFullscreenWindowLocation">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This event is recorded each time a user triggers fullscreen for a browser
-    window. It indicates the screen in which the window was fullscreened, and
-    the number of screens available.
-  </summary>
-</histogram>
-
-<histogram name="OSX.Handoff.Origin" enum="OSXHandoffOrigin">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This event is recorded each time a Handoff is received by Chrome on OSX. The
-    enumeration indicates the source of the Handoff.
-  </summary>
-</histogram>
-
-<histogram name="OSX.KeychainReauthorizeIfNeeded" units="count">
-  <owner>kerrnel@chromium.org</owner>
-  <owner>mark@chromium.org</owner>
-  <summary>
-    The number of previous times that the keychain reauthorization did not
-    complete, when run during the main browser launch.
-  </summary>
-</histogram>
-
-<histogram name="OSX.KeychainReauthorizeIfNeededAtUpdate" units="count">
-  <owner>kerrnel@chromium.org</owner>
-  <owner>mark@chromium.org</owner>
-  <summary>
-    The number of previous times that the keychain reauthorization did not
-    complete, when run at update time.
-  </summary>
-</histogram>
-
-<histogram name="OSX.KeychainReauthorizeIfNeededAtUpdateSuccess" units="count">
-  <owner>kerrnel@chromium.org</owner>
-  <owner>mark@chromium.org</owner>
-  <summary>
-    How many times the keychain reauthorization ran before finally succeeding,
-    when run at update time.
-  </summary>
-</histogram>
-
-<histogram name="OSX.KeychainReauthorizeIfNeededSuccess" units="count">
-  <owner>kerrnel@chromium.org</owner>
-  <owner>mark@chromium.org</owner>
-  <summary>
-    How many times the keychain reauthorization ran before finally succeeding,
-    when run during the main browser launch.
-  </summary>
-</histogram>
-
-<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms">
-  <obsolete>
-    Deprecated as of 11/2015.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This event records the amount of time that the browser process main thread
-    blocks, waiting for a frame with the right dimensions to arrive from the gpu
-    process.
-  </summary>
-</histogram>
-
-<histogram name="OSX.Settings.ScreensHaveSeparateSpaces"
-    enum="OSXScreensHaveSeparateSpaces">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The configuration of the setting &quot;Screens Have Separate Spaces&quot;
-    available in OSX 10.9+.
-  </summary>
-</histogram>
-
-<histogram name="OSX.SharedMemory.Mechanism" enum="OSXSharedMemoryMechanism">
-  <obsolete>
-    Deprecated as of Chrome 51 since Mach has become the default mechanism.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    A histogram entry is emitted each time a base::SharedMemory object is
-    constructed. The value of the entry indicates the mechanism used to back the
-    shared memory region.
-  </summary>
-</histogram>
-
-<histogram name="OSX.SystemHotkeyMap.LoadSuccess" enum="BooleanSuccess">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    Whether an attempt to load the system hotkeys on a Mac was successful.
-  </summary>
-</histogram>
-
-<histogram name="OutdatedUpgradeBubble.NumLaterPerEnableAU">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    Counts the number of times the user clicked on the later button of the
-    outdated upgrade bubble, before clicking on the enable updates button in the
-    same Chrome session.
-  </summary>
-</histogram>
-
-<histogram name="OutdatedUpgradeBubble.NumLaterPerReinstall">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    Counts the number of times the user clicked on the later button of the
-    outdated upgrade bubble, before clicking on the reinstall button in the same
-    Chrome session.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Cancelled" enum="NavigationDirection">
-  <obsolete>
-    Deprecated as of Chrome 59 in favour of Overscroll.Cancelled3.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Overscroll gestures that were aborted before they were completed.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Cancelled3" enum="OverscrollNavigationType">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Overscroll gestures that were aborted before they were completed.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Completed" enum="OverscrollMode">
-  <obsolete>
-    Deprecated as of Chrome 44 in favour of Overscroll.Cancelled and
-    Overscroll.Navigated2.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>Completed overscroll gestures.</summary>
-  <details>
-    An overscroll gesture starts when user scrolls past the edge of the web page
-    and continues scrolling in the same direction. An overscroll gesture is
-    completed when user stops scrolling (e.g. by lifting the fingers from the
-    touchscreen or touchpad).
-  </details>
-</histogram>
-
-<histogram name="Overscroll.Navigated" enum="OverscrollMode">
-  <obsolete>
-    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Navigations that were triggered due to completed overscroll gesture. Note
-    that not all completed overscroll gestures trigger a navigation.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Navigated2" enum="NavigationDirection">
-  <obsolete>
-    Deprecated as of Chrome 59 in favour of Overscroll.Navigated3.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Navigations that were triggered due to completed overscroll gesture. Note
-    that not all completed overscroll gestures trigger a navigation.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Navigated3" enum="OverscrollNavigationType">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Navigations that were triggered due to completed overscroll gesture. Note
-    that not all completed overscroll gestures trigger a navigation.
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Started" enum="OverscrollMode">
-  <obsolete>
-    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Overscroll gestures initiated by the user. Note that not all overcroll
-    gestures started are completed (e.g. the overscroll gesture is aborted if
-    user clicks or presses a key during the gesture).
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Started2" enum="NavigationDirection">
-  <obsolete>
-    Deprecated as of Chrome 59 in favour of Overscroll.Started3.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Overscroll gestures initiated by the user. Note that not all overscroll
-    gestures started are completed (e.g. the overscroll gesture is aborted if
-    user clicks or presses a key during the gesture).
-  </summary>
-</histogram>
-
-<histogram name="Overscroll.Started3" enum="OverscrollNavigationType">
-  <owner>mfomitchev@chromium.org</owner>
-  <summary>
-    Overscroll gestures initiated by the user. Note that not all overscroll
-    gestures started are completed (e.g. the overscroll gesture is aborted if
-    user clicks or presses a key during the gesture).
-  </summary>
-</histogram>
-
-<histogram name="Ozone.TouchNoiseFilter.FarApartTapDistance"
-    units="squared pixels">
-  <owner>pkotwicz@google.com</owner>
-  <summary>
-    The squared distance between taps which occur in quick succession. Only
-    reported when the taps are far apart and touch noise filtering is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Ozone.TouchNoiseFilter.HorizontallyAlignedDistance"
-    units="pixels">
-  <owner>pkotwicz@google.com</owner>
-  <summary>
-    The horizontal distance from a &quot;touch press&quot; to the closest other
-    touch. Only reported if there are two or more fingers onscreen and touch
-    noise filtering is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Ozone.TouchNoiseFilter.TimeSinceLastNoiseOccurrence"
-    units="ms">
-  <owner>pkotwicz@google.com</owner>
-  <summary>
-    The amount of time between noisy touches. The amount of time since Chrome
-    startup is recorded for the first noisy touch after startup.
-  </summary>
-</histogram>
-
-<histogram name="Ozone.TouchNoiseFilter.TouchesAtSinglePositionDuration"
-    units="ms">
-  <owner>pkotwicz@google.com</owner>
-  <summary>
-    The time between taps which occur in quick succession at the same screen
-    location. Only reported when touch noise filtering is enabled.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.Canceled.WaitingTimeSeconds" units="seconds">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The wall-clock time spent until a lookup was canceled.  This is reported
-    every time p2p is used to find a candidate but the request was canceled.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.CandidateCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of candidates on the LAN, i.e. the number of peers on the LAN
-    offering at least N bytes of the requested file X. This is reported after
-    examining responses from all peers on the LAN and picking a candidate.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.ConnectionCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of p2p downloads of the peer that the returned URL points to.
-    This is reported after examining responses from all peers on the LAN and
-    picking a candidate.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.WaitingTimeSeconds" units="seconds">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The wall-clock time spent waiting for the LAN-wide number of p2p downloads
-    (i.e. the sum of p2p downloads from each peer on the LAN) to drop below the
-    threshold.  This is reported after examining responses from all peers on the
-    LAN and picking a candidate.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.LookupResult" enum="P2PLookupResult">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The result of the lookup. Possible values include &quot;Found&quot; (if a
-    candidate - i.e. a peer offering at least N bytes of file X - was chosen),
-    &quot;Not Found&quot; (if no candidate could be found), &quot;Vanished&quot;
-    (if a candidate was found but vanished while waiting in line),
-    &quot;Canceled&quot; (if a candidate was found but the request was canceled
-    while waiting in line), and &quot;Filtered&quot; (if it was detected that
-    mDNS was filtered). This is reported after examining responses from all
-    peers on the LAN when p2p is used to find a candidate.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.NumPeers" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of peers implementing p2p file sharing on the network. This is
-    reported every time p2p is used to look up a resource on a network where
-    mDNS is not filtered.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Client.Vanished.WaitingTimeSeconds" units="seconds">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The wall-clock time spent waiting for one or more candidates (i.e. peers
-    offering at least N bytes of file X) that all vanished before the LAN-wide
-    number of p2p downloads dropped below the threshold. This is reported every
-    time candidates were found using p2p but then vanished.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.ClientCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of currently connected HTTP clients. This is reported every time
-    a HTTP client connects.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.ContentServedInterruptedMB" units="MB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
-    where the client disconnects prematurely. This is reported every time a file
-    is served and the client disconnects before receiving all data.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.ContentServedSuccessfullyMB" units="MB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Number of megabytes (1,000,000 bytes) served from the device (via HTTP).
-    This is reported every time a file have been served successfully.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The average speed at which the download was served at, in kB/s. This is
-    reported every time a file have been served successfully.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.FileCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of files available via p2p. This is reported every time a file is
-    added or removed to the /var/cache/p2p directory.
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.RangeBeginPercentage" units="%">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    When a client resumes a download, the HTTP request includes range specifier
-    to skip the bytes it already has. This metric conveys this as a percentage
-    of the file size.  This is reported every time a file is served, even if the
-    request does not include a range specifier (in which case 0 is reported).
-  </summary>
-</histogram>
-
-<histogram name="P2P.Server.RequestResult" enum="P2PServerResult">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The result of the HTTP request. Possible values include &quot;Response
-    Sent&quot; (the resource was found and the response was successfully sent),
-    &quot;Response Interrupted&quot; (the resource was found but the client
-    disconnected), &quot;Malformed&quot; (the request was malformed), &quot;Not
-    Found&quot; (the request was for a resource that was not found), and
-    &quot;Index&quot; (the request was for the '/' or '/index.html' resource).
-    This is reported for every HTTP request handled.
-  </summary>
-</histogram>
-
-<histogram name="PageActionController.ExtensionsWithPageActions">
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    The number of Extensions that have Page Actions. Measured once per startup
-    per profile.
-  </summary>
-</histogram>
-
-<histogram name="PageImportanceSignals.HadFormInteraction.OnCommitLoad"
-    enum="HadFormInteraction">
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of pages that had any HTML form interaction before next page load.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.Background" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted due to being backgrounded.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.ClientRedirect" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a client side redirect (Javascript navigation).
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.Close" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by the user closing the tab or browser.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.ForwardBackNavigation"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a forward or back navigation.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.NewNavigation" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a new navigation.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.Other" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted. The abort cause is unknown.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.Reload" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a reload.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.AbortTiming.Stop" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by the user pressing stop.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.AbortTiming.UnknownNavigation" units="ms">
-  <obsolete>
-    We now have sufficient infrastructure to always characterize aborts that
-    resulted in new navigations.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a navigation with unknown transition type.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.CompressionRatio"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    100 times the ratio of network bytes received to network bytes the user
-    would have seen without data reduction proxy (not including headers) in a
-    page load that had its main resource loaded through data reduction proxy.
-    Recorded as a percent if the data reduction proxy saved the user data.
-    Recorded per page load when the user navigates away, hides the tab, or
-    backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Inflation"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of network kilobytes (not including headers) that the data
-    reduction proxy inflated for the user in a page load that had its main
-    resource was loaded through data reduction proxy. Recorded per page load
-    when the user navigates away, hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.InflationPercent"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The inflation in network kilobytes (not including headers) the user saw due
-    to using data reduction proxy in a page load that had its main resource was
-    loaded through data reduction proxy. Recorded as a percent when the user saw
-    inflated data. Recorded per page load when the user navigates away, hides
-    the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.NonProxied"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of network kilobytes that were not fetched through the data
-    reduction proxy (not including headers) in a page load that had its main
-    resource was loaded through data reduction proxy. Recorded per page load
-    when the user navigates away, hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Original"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of network kilobytes (not including headers) that the user would
-    have seen without using data reduction proxy in a page load that had its
-    main resource was loaded through data reduction proxy. Recorded per page
-    load when the user navigates away, hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.PercentProxied"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The percent of network kilobytes (not including headers) in a page load that
-    went through data reduction proxy when the main resource was loaded through
-    data reduction proxy. Recorded per page load when the user navigates away,
-    hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Proxied"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of network kilobytes that were fetched through the data reduction
-    proxy (not including headers) in a page load that had its main resource was
-    loaded through data reduction proxy. Recorded per page load when the user
-    navigates away, hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Savings"
-    units="KB">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of network kilobytes (not including headers) that the data
-    reduction proxy saved the user in a page load that had its main resource was
-    loaded through data reduction proxy. Recorded per page load when the user
-    navigates away, hides the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network.PercentProxied"
-    units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The percent of completed resources loaded from network in a page load that
-    use data reduction proxy when the main resource was loaded through data
-    reduction proxy.  Recorded per page load when the user navigates away, hides
-    the tab, or backgrounds the app.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.DocWrite.Block.Count" enum="Boolean">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Counts the number of pages where a script loaded via document.write could
-    have been blocked.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.DocWrite.Block.DocumentWriteLoadingBehavior"
-    enum="DocumentWriteLoadingBehavior">
-  <owner>shivanisha@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    This metric measures the counts of pages for various loading behaviors of
-    document.written scripts.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.DocWrite.Block.ReloadCount">
-  <owner>shivanisha@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    This metric measures reloads in pages that have synchronous, cross-origin
-    document.written scripts that could be blocked if document.write script
-    blocking feature is enabled.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.GoogleCaptcha.Events"
-    enum="GoogleCaptchaEvent">
-  <owner>mdw@chromium.org</owner>
-  <summary>Events related to Google CAPTCHA pages being seen by users.</summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.SubresourceFilter.ActivationDecision"
-    enum="SubresourceFilterActivationDecision">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Records the policy decision to activate subresource filtering for a page
-    load. 'Activated' indicates that subresource filtering was activated. All
-    other reasons indicate that subresource filtering was not activated. Page
-    loads where subresource filtering was activated ('Activated') and at least
-    one subresource matched the subresource filter are counted in
-    PageLoad.Clients.SubresourceFilter.Count.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.SubresourceFilter.Count" enum="Boolean">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Records 'true' for page loads where the subresource filter matched a
-    subresource loaded by the page. Includes dryrun matches. To compute the
-    percentage of total page loads affected by subresource filtering, divide by
-    the sum of counts for (PageLoad.ParseTiming.NavigationToParseStart +
-    PageLoad.ParseTiming.NavigationToParseStart.Background).
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The time spent parsing author style sheets before the first contentful
-    paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The sum of CSSTiming.Update and CSSTiming.Parse variants for this page load.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The time spent in Document::updateStyle before the first contentful paint.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    DOMContentLoaded event is fired, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first layout is performed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.DocumentTiming.NavigationToLoadEventFired" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    load event is fired, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.EventCounts" enum="PageLoadEvent">
-  <obsolete>
-    deprecated in favor of PageLoad.Events.*
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Captures counts of various page load events. These are enumerated in the
-    enum page_load_metrics::PageLoadEvent, and include events like 'page load
-    aborted before first layout'
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Events.Committed" enum="CommittedLoadEvent">
-  <obsolete>
-    Deprecated in favor of PageLoad.Timing2.NavigationToCommit and
-    PageLoad.AbortTiming.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Captures counts of load events post-commit, on relevant page loads (i.e.
-    http/https, not same-page, not an error page). These events include aborts
-    before first layout and successful first layouts. Note that the event
-    'Committed load started' when segmented by background/foreground specifies
-    whether the eventually committed load started in the background or
-    foreground, not whether we backgrounded before the actual commit event. This
-    is because we don't have all the data to filter relevant page loads on
-    provisional loads.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Events.InternalError" enum="InternalErrorLoadEvent">
-  <obsolete>
-    Deprecated in favor of PageLoad.Internal.ErrorCode.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Counts of various internal error conditions in the page_load_metrics system.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent">
-  <obsolete>
-    Deprecated Feb 2016 in favor of PageLoad.AbortTiming and
-    PageLoad.Timing2.NavigationToFailedProvisionalLoad. Note that the
-    corresponding background enumerations are no longer being tracked in the
-    timing histograms.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Captures counts of provisional load events. These include aborted, failed,
-    and successful (committed) provisional loads.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.Background"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted due to being backgrounded.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.ClientRedirect"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.Internal.ClientRedirect.*.
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a client side redirect (Javascript navigation).
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.Close"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by the user closing the tab or browser.
-  </summary>
-</histogram>
-
-<histogram base="true"
-    name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a forward or back navigation.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.NewNavigation"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a new navigation.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.Other"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted. The abort cause is unknown.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.Reload"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by a reload.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PageLoad.Experimental.AbortTiming.Stop" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This metric is still experimental and not yet ready to be relied upon.
-    Measures the time from navigation start to the time the page load was
-    aborted by the user pressing stop.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Bytes.Cache" units="KB">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of prefiltered (e.g., compressed) KiloBytes loaded from the cache
-    via the browser process for a page load. Recorded when the page load is
-    terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Bytes.Network" units="KB">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of prefiltered (e.g., compressed) KiloBytes loaded over the
-    network via the browser process for a page load. Recorded when the page load
-    is terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Bytes.Total" units="KB">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of prefiltered (e.g., compressed) KiloBytes loaded via the
-    browser process for a page load. Recorded when the page load is terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Cache.RequestPercent.ParseStop"
-    units="%">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The percent of resources loaded from cache for the given page load. Recorded
-    at the end of HTML parsing.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Cache.TotalRequests.ParseStop"
-    units="requests">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of resources a given page finished loading from cache at parse
-    stop.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.CompletedResources.Cache"
-    units="resources">
-  <owner>csharrison@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of completed resources loaded from the cache via the browser
-    process for a page load. Recorded when the page load is terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.CompletedResources.Network"
-    units="resources">
-  <owner>csharrison@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of completed resources loaded from the network via the browser
-    process for a page load. Recorded when the page load is terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.CompletedResources.Total"
-    units="resources">
-  <owner>csharrison@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The total number of completed resources loaded via the browser process for a
-    page load. Recorded when the page load is terminated.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.PageTiming.FirstPaintToFirstBackground"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the total time the page load was active after first paint, up until
-    being backgrounded, prior to the page load terminating. Recorded only for
-    page loads that started in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.PageTiming.FirstPaintToPageEnd"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the total time the page load was active after first paint, for page
-    loads that spend the entire time in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.PageTiming.NavigationToFirstBackground"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the total time the page load was active, up until being
-    backgrounded, for page loads that started in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.PageTiming.NavigationToPageEnd"
-    units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the total time the page load was active, for page loads that spend
-    the entire time in the foreground.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus"
-    enum="FirstMeaningfulPaintSignalStatus">
-  <obsolete>
-    Deprecated in favor of
-    PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2.
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether the user had any interaction on the page (except mouse move) after
-    first paint, and whether the user left the page before network stable or
-    not.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2"
-    enum="FirstMeaningfulPaintSignalStatus">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether the user had any interaction on the page (except mouse move) after
-    first paint, and whether the user left the page before network stable or
-    not. Not logged if page load was aborted before first paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintStatus"
-    enum="FirstMeaningfulPaintStatus">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Records whether the First Meaningful Paint metric was reported for the page
-    load, or why it wasn't if not. See http://bit.ly/ttfmp-doc for the
-    definition of First Meaningful Paint.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintToNetworkStable"
-    units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time between when the first meaningful paint
-    (http://bit.ly/ttfmp-doc) was computed to have happened, and when we
-    actually logged the metric.
-
-    This metric is useful in helping us tweak when FirstMeaningfulPaintDetector
-    should stop observing layout operations.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"
-    units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the first
-    meaningful paint (http://bit.ly/ttfmp-doc), for main frame documents.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"
-    units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from when the HTML parser started, to the first meaningful
-    paint (http://bit.ly/ttfmp-doc), for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.0-50"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The parse duration of the page load where 0-50% of all subresources (loaded
-    during parsing) were served from the HTTP cache (including 304s).
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.51-100"
-    units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The parse duration of the page load where 51-100% of all subresources
-    (loaded during parsing) were served from the HTTP cache (including 304s).
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.Renderer.FirstMeaningfulPaintDetector.FirstMeaningfulPaintOrdering"
-    enum="FirstMeaningfulPaintOrdering">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether the two variants of First Meaningful Paint reported different
-    values, and if so, which one was reported first.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.Renderer.FirstMeaningfulPaintDetector.HadNetworkQuiet"
-    enum="NetworkQuietStatus">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Recorded when the page load reached network 0-quiet (no active network
-    connection for 0.5 seconds), or network 2-quiet (no more than 2 active
-    network connections for 2 seconds).
-    PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2
-    histogram gives the fraction of page loads that had network 2-quiet, so it
-    can be used as a baseline.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.TotalRequests.ParseStop"
-    units="requests">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of resources a given page finished loading at parse stop.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.InputTiming.NavigationToFirstNonScroll.AfterPaint"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Measures the time to first non-scroll input after the first paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.InputTiming.NavigationToFirstScroll.AfterPaint"
-    units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Measures the time to first scroll input after the first paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ClientRedirect.FirstPaintToNavigation"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    The delay between first paint and a client-side redirect navigation, for
-    pages that reported a first paint. This metric is only intended to help in
-    choosing a heuristic delay to distinguish between client-side redirects and
-    other client initiated navigations, and will be deprecated in M54. Please
-    contact bmcquade@chromium.org before using this metric.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ClientRedirect.NavigationWithoutPaint"
-    enum="Boolean">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Counts how often a client-side redirect was initiated from a page that did
-    not report a first paint. This metric is only intended to help in choosing a
-    heuristic delay to distinguish between client-side redirects and other
-    client initiated navigations, and will be deprecated in M54. Please contact
-    bmcquade@chromium.org before using this metric.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ClientRedirectDelayAfterPaint" units="ms">
-  <obsolete>
-    Deprecated in favor of
-    PageLoad.Internal.ClientRedirect.FirstPaintToNavigation and
-    PageLoad.Internal.ClientRedirect.NavigationWithoutPaint.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    The delay between first paint and a client-side redirection. This metric is
-    only intended to help in choosing a heuristic delay to distinguish between
-    client-side redirects and other client initiated navigations, and will be
-    deprecated in M54. Please contact bmcquade@chromium.org before using this
-    metric.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.CommitToComplete.NoTimingIPCs" units="ms">
-  <obsolete>
-    Deprecated on 10/14/2016. No longer needed.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    The delay between commit and completion, for page loads that did not receive
-    any timing IPCs. This metric is only intended to help understand the cases
-    where committed page loads don't receive timing IPCs. Please contact
-    bmcquade@chromium.org before using this metric.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ErrorCode" enum="InternalErrorLoadEvent">
-  <owner>csharrison@chromium.org</owner>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Counts of various internal error conditions in the page_load_metrics system.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.PageLoadCompleted.AfterAppBackground"
-    enum="BooleanStartedCompleted">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Whether a page load completed after the app entered the background. We log a
-    'Started' value for each PageLoadTracker that is active when the app enters
-    the background, and a 'Completed' value for each of those PageLoadTrackers
-    that successfully runs its destructor. This helps to understand how many
-    trackers are destroyed while the app is in the background before they are
-    able to run their destructor. This metric is only intended to help in
-    understanding how often app background leads to data loss, and will be
-    deprecated in a subsequent release. Please contact bmcquade@chromium.org
-    before using this metric.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.ForwardBack"
-    units="length">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This histogram counts the number of provisional loads aborted by other
-    navigations, until a final forward back navigation commits.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NewNavigation"
-    units="length">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This histogram counts the number of provisional loads aborted by new
-    navigations, until a final new navigation commits.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NoCommit"
-    units="length">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This histogram counts the number of provisional loads aborted by new
-    navigations. In this case the chain never ends with a commit. This is logged
-    on the next abort signal comes in (e.g. tab close or new navigation).
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.Reload"
-    units="length">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This histogram counts the number of provisional loads aborted by other
-    navigations, until a final reload navigation commits.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.SameURL"
-    units="length">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    This histogram counts the number of consecutive provisional loads aborted by
-    other navigations with the same url (before redirects). It's logged when a
-    provisional abort does not share a URL, or when a load finally commits. Note
-    that we don't log chains of length 0.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PageTiming.ForegroundDuration" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    For page loads that start in the foreground, measures the duration of time
-    until one of the following events occurs: the load of the main resource
-    fails, the page load is stopped, the tab hosting the page is closed, the
-    render process hosting the page goes away, a new navigation which later
-    commits is initiated in the same tab, or the tab hosting the page is
-    backgrounded. This metric has a very long tail, for pages that spend a long
-    period of time in the foreground. As such, use of the mean or tail values
-    are not recommended.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PageTiming.NavigationToFailedProvisionalLoad"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>shivanisha@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    provisional load failed. Only measures provisional loads that failed in the
-    foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    user first foregrounds an initially backgrounded tab. Only measures
-    navigations that started in the background.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.ForegroundToFirstPaint" units="ms">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Measures the time from a background tab being switched to the foreground to
-    the time the first paint is performed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"
-    units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time from navigation start to first &quot;contentful&quot; paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint" units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first image is painted, for main frame documents. For images that render
-    progressively, this is recorded as soon as any image pixels have been drawn.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.NavigationToFirstPaint" units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first paint is performed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint" units="ms">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first non-blank text is painted, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from when the HTML parser started, to when the page first
-    paints content.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.ParseTiming.NavigationToParseStart" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    parser started, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the execution of
-    scripts, for main frame documents that finished parsing.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the execution of
-    scripts inserted from document.write, for main frame documents that finished
-    parsing.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts,
-    for main frame documents that finished parsing.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"
-    units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts
-    inserted from document.write, for main frame documents that finished
-    parsing.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.ParseTiming.ParseDuration" units="ms">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser was active, for main frame documents
-    that finished parsing.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing.NavigationToDOMContentLoadedEventFired"
-    units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.Timing2.*
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    DOMContentLoaded event is fired, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing.NavigationToFirstLayout" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.Timing2.*
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first layout is performed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing.NavigationToLoadEventFired" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.Timing2.*
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    load event is fired, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.DOMLoadingToDOMContentLoadedEventFired"
-    units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.DocumentTiming.ParseDuration
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from when DOM loading occurs (the time that HTML parsing
-    begins) to the time the DOMContentLoaded event is fired, for main frame
-    documents. This is equivalent to the time that the HTML document resource
-    was being parsed.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.DOMLoadingToFirstContentfulPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from when DOM loading occurs (the time that HTML parsing
-    begins) to first &quot;contentful&quot; paint.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ForegroundToFirstPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.ForegroundToFirstPaint
-  </obsolete>
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Measures the time from a background tab being switched to the foreground to
-    the time the first paint is performed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToCommit" units="ms">
-  <obsolete>
-    Deprecated in favor of PageLoad.ParseTiming.NavigationToParseStart
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    navigation committed, for main frame documents.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"
-    units="ms">
-  <obsolete>
-    deprecated in favor of
-    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    DOMContentLoaded event is fired, for main frame documents. This metric is
-    being phased out in favor of the PageLoad.DocumentTiming equivalent and will
-    be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PageTiming.NavigationToFailedProvisionalLoad
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>shivanisha@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    provisional load failed. Only measures provisional loads that failed in the
-    foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.AbortTiming.Background.*
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    user first backgrounds the tab. Only measures navigations that started in
-    the foreground.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstContentfulPaint
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time from navigation start to first &quot;contentful&quot; paint.  This
-    metric is being phased out in favor of the PageLoad.PaintTiming equivalent
-    and will be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstForeground" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PageTiming.NavigationToFirstForeground
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    user first foregrounds an initially backgrounded tab. Only measures
-    navigations that started in the background.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstImagePaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstImagePaint
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first image is painted, for main frame documents. For images that render
-    progressively, this is recorded as soon as any image pixels have been drawn.
-    This metric is being phased out in favor of the PageLoad.PaintTiming
-    equivalent and will be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstLayout" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.DocumentTiming.NavigationToFirstLayout
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first layout is performed, for main frame documents. This metric is being
-    phased out in favor of the PageLoad.DocumentTiming equivalent and will be
-    deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstPaint
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first paint is performed, for main frame documents. This metric is being
-    phased out in favor of the PageLoad.PaintTiming equivalent and will be
-    deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToFirstTextPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstTextPaint
-  </obsolete>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first non-blank text is painted, for main frame documents. This metric is
-    being phased out in favor of the PageLoad.PaintTiming equivalent and will be
-    deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.NavigationToLoadEventFired" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.DocumentTiming.NavigationToLoadEventFired
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    load event is fired, for main frame documents. This metric is being phased
-    out in favor of the PageLoad.DocumentTiming equivalent and will be
-    deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts,
-    for main frame documents that started parsing.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"
-    units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts,
-    for main frame documents that finished parsing. This metric is being phased
-    out in favor of the PageLoad.ParseTiming equivalent and will be deprecated
-    in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"
-    units="ms">
-  <obsolete>
-    deprecated in favor of
-    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts
-    inserted from document.write, for main frame documents that started parsing.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"
-    units="ms">
-  <obsolete>
-    deprecated in favor of
-    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts
-    inserted from document.write, for main frame documents that finished
-    parsing. This metric is being phased out in favor of the
-    PageLoad.ParseTiming equivalent and will be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ParseDuration" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.ParseTiming.ParseDuration
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser was active, for main frame documents
-    that finished parsing. This metric is being phased out in favor of the
-    PageLoad.ParseTiming equivalent and will be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint" units="ms">
-  <obsolete>
-    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time from when the HTML parser started, to when the page first
-    paints content. This metric is being phased out in favor of the
-    PageLoad.PaintTiming equivalent and will be deprecated in M54.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.FrameTree"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Total time the browser process waited for all render processes to save their
-    respective frames while saving a page into MHTML.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.SingleFrame"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time the browser process waited on a single frame to be saved by a render
-    processes while saving a page into MHTML.
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.MhtmlGeneration.EncodingTime.SingleFrame"
-    units="microseconds">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time taken to encode into MTHML the fully serialized contents of a frame.
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.MhtmlGeneration.FinalSaveStatus"
-    enum="MhtmlGenerationFinalSaveStatus">
-  <owner>carlosk@chromium.org</owner>
-  <summary>Final status of the MHTML save operation for a page.</summary>
-</histogram>
-
-<histogram name="PageSerialization.MhtmlGeneration.FullPageSavingTime"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>Time taken to save a page into an MHTML file.</summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.FrameTree"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time spent by the main threads of all involved render processes while saving
-    the frame tree of a page to MHTML.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time spent by the renderer main thread while saving one frame of a page to
-    MHTML.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SlowestFrame"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    The longest time taken by the main thread of a render processes to save one
-    frame of a page being saved to MHTML. In other words this is the maximum
-    value reported in
-    PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame for one
-    page save operation.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageSerialization.MhtmlGeneration.SerializationTime.SingleFrame"
-    units="microseconds">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time taken to fully serialize the contents of a frame, including HTML and
-    CSS and image resources.
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.MhtmlGeneration.WriteToDiskTime.SingleFrame"
-    units="ms">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time spent writing a frame's encoded MHTML data to the file on disk.
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.SerializationTime.CSSElement"
-    units="microseconds">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time spent serializing a CSS element (including embedded &quot;sub&quot;-CSS
-    and images).
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.SerializationTime.Html" units="microseconds">
-  <owner>carlosk@chromium.org</owner>
-  <summary>
-    Time taken to generate HTML data from a frame's DOM and serialize it
-    (without sub-resources like CSS and images).
-  </summary>
-</histogram>
-
-<histogram name="PageSerialization.SerializationTime.ImageElement"
-    units="microseconds">
-  <owner>carlosk@chromium.org</owner>
-  <summary>Time spent serializing an image element.</summary>
-</histogram>
-
-<histogram name="Parser.AppendBytesDelay" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The delay from when bytes are received on the main thread to when the
-    BackgroundHTMLParser starts tokenizing them. Always a shorter time than the
-    time emitted to Parser.PreloadTokenizeDelay.
-  </summary>
-</histogram>
-
-<histogram name="Parser.ChunkEnqueueTime" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The time it takes to enqueue a ParsedChunk onto the shared parser queue.
-  </summary>
-</histogram>
-
-<histogram name="Parser.DiscardedTokenCount" units="tokens">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of speculative tokens discarded by the parser when a rewind is
-    needed.
-  </summary>
-</histogram>
-
-<histogram name="Parser.PeakPendingChunkCount" units="chunks">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The maximum number of pending Chunks in the ParsedChunkQueue after the
-    parser is detached.
-  </summary>
-</histogram>
-
-<histogram name="Parser.PeakPendingTokenCount" units="tokens">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The maximum number of pending tokens in the ParsedChunkQueue after the
-    parser is detached.
-  </summary>
-</histogram>
-
-<histogram name="Parser.PreloadTokenizeDelay" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The delay from when bytes are received on the main thread to when they are
-    tokenized and preloads are sent back to the main parser. Always a greater
-    time than the time emitted to Parser.AppendBytesDelay.
-  </summary>
-</histogram>
-
-<histogram name="PartitionAlloc.CommittedSize" units="MB">
-  <owner>haraken@chromium.org</owner>
-  <summary>
-    The committed memory size in PartitionAlloc. The value is reported when we
-    see the highest memory usage we've ever seen in the renderer process.
-  </summary>
-</histogram>
-
-<histogram name="PasswordBubble.DisplayDisposition"
-    enum="PasswordBubbleDisplayDisposition">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    When the password management bubble opened, what state was it in?
-  </summary>
-</histogram>
-
-<histogram name="PasswordGeneration.Event" enum="PasswordGenerationEvent">
-  <owner>gcasto@chromium.org</owner>
-  <summary>
-    Measures the frequency of various password generation events.
-
-    Note that this histogram is logged from the renderer process, and
-    consequently the numbers should not be directly compared to the other
-    PasswordGeneration.* histograms, which are logged from the browser process.
-    Histograms logged in different processes are lost at different rates, which
-    introduces systematic bias between histograms logged in the renderer process
-    vs. those logged in the browser process.
-  </summary>
-</histogram>
-
-<histogram name="PasswordGeneration.SubmissionAvailableEvent"
-    enum="PasswordSubmissionEvent">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Measures the frequency of submission events for passwords that could have
-    been generated, but the user didn't choose to use the feature. This is to
-    compare with PasswordGeneration.SubmssionEvent.
-  </summary>
-</histogram>
-
-<histogram name="PasswordGeneration.SubmissionEvent"
-    enum="PasswordSubmissionEvent">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Measures the frequency of submission events for generated passwords. This is
-    similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
-    are interesting for generated passwords.
-  </summary>
-</histogram>
-
-<histogram name="PasswordGeneration.UploadStarted" enum="Boolean">
-  <owner>gcasto@chromium.org</owner>
-  <summary>
-    The number of times that we try to upload a form that we believe should
-    trigger password generation. False means that something about the form would
-    not allow us to try upload (not an Autofillable field, uploading disabled,
-    Autofill servers in backoff, etc.). True does not mean that the upload
-    actually completed successfully, just that it was started.
-  </summary>
-</histogram>
-
-<histogram name="PasswordHash.CreateTime">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Time required to create the local hash of the user's GAIA password.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialog"
-    enum="AccountChooserDismissalReason">
-  <obsolete>
-    Deprecated as of Chrome 56. See the histograms for one and more accounts.
-  </obsolete>
-  <owner>vasilii@chromium.org</owner>
-  <summary>The dismissal reason of the account chooser.</summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialogAccounts" units="accounts">
-  <owner>vasilii@chromium.org</owner>
-  <summary>The number of accounts displayed in the account chooser.</summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialogEmptyAvatars"
-    units="avatars">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The count of the placeholder avatars shown in the account chooser.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialogMultipleAccounts"
-    enum="AccountChooserDismissalReason">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The dismissal reason of the account chooser with multiple accounts.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialogOneAccount"
-    enum="AccountChooserDismissalReason">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The dismissal reason of the account chooser with one account.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountChooserDialogUsability"
-    enum="AccountChooserUsabilityState">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Whether the account chooser includes an empty username or any duplicates
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountsPerSite">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The number of accounts stored per site in the password manager (one event
-    per site)
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountsReusingPassword" units="accounts">
-  <owner>engedy@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Records, for each account, the number of other accounts (across all sites
-    and usernames) that reuse the same password. Only non-blacklisted,
-    HTML-form-based accounts are considered.
-
-    For each account, samples will only be recorded into the histograms that
-    have the first suffix corresponding to whether that account was saved on a
-    secure website or not. The second suffix is used to further categorize the
-    other accounts that reuse the same password based on how they relate to the
-    account in question, and whether they are secure. The number of other
-    accounts in each category will be reported into histogram with the
-    respective second suffixes.
-
-    Metrics are collected once per browser start-up. In case of multiple
-    profiles, the counts are for the profile for which a WebContents is first
-    created.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTaken"
-    enum="PasswordManagerActionsTaken">
-  <obsolete>
-    Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Stats documenting how we handle every form containing a password, bucketed
-    by the actions taken.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTakenOnNonSecureForm"
-    enum="PasswordManagerActionsTakenV3">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Stats documenting how we handle every form containing a password on a
-    non-secure page, bucketed by the actions taken.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTakenV3"
-    enum="PasswordManagerActionsTakenV3">
-  <owner>vabr@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Stats documenting how we handle every form containing a password, bucketed
-    by the actions taken.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTakenWithPsl"
-    enum="PasswordManagerActionsTakenWithPsl">
-  <obsolete>
-    Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Stats documenting how we handle every form containing a password, bucketed
-    by the actions taken.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationBackend.FetchSize" units="facets">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The number of facets for which affiliation information was requested in a
-    network fetch. Recorded for each network fetch.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationBackend.FirstFetchDelay" units="ms">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The time elapsed between creation of the AffiliationBackend and the first
-    time it needed to issue a network fetch.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationBackend.SubsequentFetchDelay"
-    units="ms">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The elapsed time between subsequent network fetches. Recorded whenever the
-    AffiliationBackend initiated a network fetch, regardless of success or
-    failure.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationDummyData.RequestResultCount"
-    units="results">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The number of facets affiliated with a dummy Web facet, according to the
-    affiliation information retrieved from the cache. Recorded for each dummy
-    Web facet, once shortly after start-up, and then periodically every hour;
-    but only if getting affiliations succeeded for the Web facet.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationDummyData.RequestSuccess"
-    enum="BooleanSuccess">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whether or not affiliations of a dummy Web facet could be successfully
-    retrieved from the cache. Recorded for each dummy Web facet, once shortly
-    after start-up, and then periodically every hour.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationFetcher.FetchErrorCode"
-    enum="NetErrorCodes">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The network error code, as reported by the underlying URLFetcher. Recorded
-    only for each network fetch that failed due to network/server errors.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationFetcher.FetchHttpResponseCode"
-    enum="HttpResponseCode">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The HTTP response code, as reported by the underlying URLFetcher. Recorded
-    only for each network fetch that failed due to network/server errors.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AffiliationFetcher.FetchResult"
-    enum="AffiliationFetchResult">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whether the network fetch succeeded, failed due to network/server errors, or
-    contained malformed data. Recorded for each network fetch.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AllowToCollectURLBubble.UIDismissalReason"
-    enum="PasswordManagerAllowToCollectURLBubble.UIDismissalReason">
-  <obsolete>
-    The bubble isn't shown anymore. Become obsolete in Feb. 2015.
-  </obsolete>
-  <owner>melandory@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>Why was &quot;Allow to collect URL?&quot; bubble closed?</summary>
-</histogram>
-
-<histogram name="PasswordManager.AutocompletePopupSuppressedByGeneration"
-    enum="BooleanSuppressed">
-  <owner>gcasto@chromium.org</owner>
-  <summary>
-    If the password manager UI was suppressed because generation UI was already
-    being displayed for the same field.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.AutoSigninFirstRunDialog"
-    enum="AutoSigninFirstRun">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The dismissal reason of the auto-signin first run experience.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.BlacklistedSites">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The total number of sites that the user has blacklisted. Recorded by
-    iterating over stored passwords once per run of Chrome.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.CountInDatabase">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Number of password forms with empty username in the Login Database. This is
-    recorded on startup.
-  </summary>
-</histogram>
-
-<histogram
-    name="PasswordManager.EmptyUsernames.FormWithoutUsernameFieldIsPasswordChangeForm"
-    enum="PasswordManagerEmptyUsernamePasswordChangeForm">
-  <owner>msramek@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    When parsing a password form, and no username field is detected, whether
-    this was a password change form.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.OfferedToSave"
-    enum="PasswordManagerShowEmptyUsername">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    When offering to save a password, whether the username is empty.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.ParsedUsernameField"
-    enum="PasswordManagerEmptyUsernameField">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    When parsing a password form, whether a username field is detected.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount">
-  <owner>msramek@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The number of password fields for password forms that do not have a username
-    field. This is recorded every time such a password form is successfully
-    parsed. Note that the parsing is attempted when the form is encountered (i.e
-    when the document is loaded) and also when it is submitted.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount">
-  <owner>msramek@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The total number of text and password fields for password forms that do not
-    have a username field. This is recorded every time such a password form is
-    successfully parsed. Note that the parsing is attempted when the form is
-    encountered (i.e when the document is loaded) and also when it is submitted.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.EmptyUsernames.WithoutCorrespondingNonempty">
-  <owner>msramek@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Number of password forms with empty username in the Login Database for which
-    there is not another password form from the same realm with a nonempty
-    username. In other words, number of password forms with empty username which
-    we do not suspect to be reauthentication forms.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Indicates whether the password manager is enabled when a tab is opened. This
-    includes prerendered tabs.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ExportedPasswordsPerUserInCSV">
-  <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>The number of passwords exported in CSV format per user.</summary>
-</histogram>
-
-<histogram name="PasswordManager.FilledCredentialWasFromAndroidApp"
-    enum="PasswordManagerFilledAndroidCredentials">
-  <owner>msramek@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    When a credential is filled, whether it comes from an Android app.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.FillSuggestionsIncludeAndroidAppCredentials"
-    enum="PasswordManagerOfferedAndroidCredentials">
-  <owner>msramek@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    When offering to fill the username and password, whether at least one of the
-    credentials in the dropdown comes from an Android app.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.FormDataDeserializationStatus"
-    enum="FormDataDeserializationStatus">
-  <owner>gcasto@chromium.org</owner>
-  <owner>dvadym@chromium.org</owner>
-  <summary>
-    The success or failure of deserializing saved FormData. Failure either
-    indicates corrupted data or the presence of bugs in the serialization or
-    deserialization code.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.GeneratedFormHasNoFormManager"
-    enum="BooleanFormManager">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <owner>deepak.m1@samsung.com</owner>
-  <summary>
-    When the generation state of a password was changed, records whether an
-    existing form corresponding to the password was found.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.GetMediated" enum="CredentialManagerGetResult">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Tracks result of navigator.credentials.get() with unmediated=false. That is
-    the result of account chooser.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.GetUnmediated"
-    enum="CredentialManagerGetResult">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Tracks result of navigator.credentials.get() with unmediated=true. That is
-    the result of auto sign-in.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.HttpPasswordMigrationCount"
-    units="saved credentials">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Number of HTTP saved passwords that were migrated to HTTPS. Recorded on
-    HTTPS password form load when there are no credentials saved.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.HttpPasswordMigrationMode"
-    enum="HttpPasswordMigrationMode">
-  <owner>jdoerrie@chromium.org</owner>
-  <summary>
-    The mode of migration applied to HTTP passwords migrating to HTTPS. Recorded
-    on HTTPS password form load when there are no credentials saved.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV">
-  <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>The number of passwords imported in CSV format per user</summary>
-</histogram>
-
-<histogram name="PasswordManager.ImportPasswordFromCSVResult"
-    enum="PasswordImportFromCSVResult">
-  <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The response code of successful or failed password import attempt from a CSV
-    file.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse">
-  <obsolete>
-    Deprecated as of 03/2016. This metric has been replaced by
-    PasswordManager.UIDismissalReason.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The distribution of responses to the &quot;Do you want Chrome to remember
-    this password&quot;? info bar prompt.
-  </summary>
-</histogram>
-
-<histogram
-    name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords">
-  <obsolete>
-    Deprecated as of 09/2016.
-  </obsolete>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    After migration from the Mac Keychain fails, records the number of passwords
-    in the Keychain owned by Chrome but not accessible by it.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.KeychainMigration.NumFailedPasswords">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    After migration from the Mac Keychain fails, records the number of passwords
-    in the Chrome Password Manager database for which the corresponding values
-    in the Keychain are not accessible by Chrome.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.KeychainMigration.NumPasswordsOnFailure">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    After migration from the Mac Keychain fails, records the number of passwords
-    in the Chrome Password Manager database to be migrated. As there is no
-    partial migration, it's the total number of passwords in the DB.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.KeychainMigration.Status"
-    enum="KeychainMigrationStatus">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The status of passwords migration from the Keychain. It's recorded shortly
-    after startup.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.KWalletDeserializationStatus"
-    enum="BooleanSuccess">
-  <owner>gcasto@chromium.org</owner>
-  <owner>dvadym@chromium.org</owner>
-  <summary>
-    The success or failure of deserializing PasswordForms in KWallet. Failure
-    either indicates corrupted data or the presense of bugs in the
-    deserialization code.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.LinuxBackendStatistics">
-  <owner>dvadym@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Information about usage of password storage backends on Linux. It also
-    includes whether a command line flag for a specific backend is given.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.LoginDatabaseFailedVersion">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The version of LoginDatabase if the migration to a new one failed.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.LoginDatabaseInit"
-    enum="LoginDatabaseInitError">
-  <owner>vasilii@chromium.org</owner>
-  <summary>An error on LoginDatabase initialization.</summary>
-</histogram>
-
-<histogram name="PasswordManager.MultiAccountPasswordUpdateAction"
-    enum="MultiAccountUpdateBubbleUserAction">
-  <owner>dvadym@chromium.org</owner>
-  <summary>
-    A user action when a password update bubble with multiple accounts is shown.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Number of passwords deleted when the user chooses to clear passwords via the
-    clear browsing data UI.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsDeletedDuringRollback">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Number of passwords deleted when browsing data is cleared during rollback.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting">
-  <obsolete>
-    Deprecated as of 08/2015.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    When the user chooses to never remember passwords for a form, we remove all
-    previously saved credentials for that form. This is the count of those
-    credentials.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsNotShown">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The password manager only shows those credentials that are considered the
-    best match for a particular form. This stat keep track of the credentials
-    that were not as good of a match and were suppressed.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.OsPasswordStatus"
-    enum="PasswordManagerOsPasswordStatus">
-  <owner>vabr@chromium.org</owner>
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Indicates whether the user's OS password is blank or not at browser startup.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.OtherPossibleUsernamesUsage"
-    enum="OtherPossibleUsernamesUsage">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Breakdown of how other possible usernames are displayed. Recorded every time
-    we autofill a password form.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist"
-    enum="Boolean">
-  <owner>dvadym@chromium.org</owner>
-  <owner>jialiul@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    A password reuse is an event when the user typed a string that is equal to a
-    saved password on another domain, and this saved password is called reused
-    password.
-
-    This metric shows whether a password reuse happens on a page whose main
-    frame url matches CSD whitelist.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordReuse.NumberOfMatches"
-    units="credentials">
-  <owner>dvadym@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    A password reuse is an event when the user typed a string that is equal to a
-    saved password on another domain, and this saved password is called reused
-    password.
-
-    This metric shows how many saved credentials have password that's equal to
-    the reused password.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordReuse.PasswordFieldDetected"
-    enum="PasswordReusePasswordFieldDetected">
-  <owner>dvadym@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    A password reuse is an event when the user typed a string that is equal to a
-    saved password on another domain, and this saved password is called reused
-    password.
-
-    This metric reports whether a password field had been detected on a page
-    when a password reuse happened.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordReuse.PasswordLength"
-    units="characters">
-  <owner>dvadym@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    A password reuse is an event when the user typed a string that is equal to a
-    saved password on another domain, and this saved password is called reused
-    password.
-
-    This metric shows the length of the reused password.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordReuse.TotalPasswords"
-    units="credentials">
-  <owner>dvadym@chromium.org</owner>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    A password reuse is an event when the user typed a string that is equal to a
-    saved password on another domain, and this saved password is called reused
-    password.
-
-    This metric shows how many credentials are stored in Password Manager when a
-    password reuse happened.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PasswordSyncState" enum="PasswordSyncState">
-  <owner>gcasto@chromium.org</owner>
-  <owner>rouslan@chromium.org</owner>
-  <summary>
-    Whether the passwords are syncing and, if not, then what's causing sync
-    failures. Recorded after the first sync attempt either succeeds or fails.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ProvisionalSaveFailure"
-    enum="ProvisionalSaveFailure">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Breakdown of cases where a password is submitted, but we don't even try and
-    save it. Recorded for every password form submit.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.PslDomainMatchTriggering"
-    enum="PasswordManagerPslDomainMatchTriggering">
-  <owner>vabr@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Breakdown on trigger rate of providing a password form autofill entry based
-    on matching stored information using the public suffix list (PSL) for
-    possible matches. In addition, this metric also counts cases where a
-    existing federated entry was successfully matched via PSL. For example, this
-    includes cases where an existing federated credential for
-    https://example.com was used for https://subdomain.example.com.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptDisappearedQuickly"
-    enum="Boolean">
-  <obsolete>
-    Deprecated as of 03/2016.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Indicates whether the save password prompt disappeared in less than one
-    second. This most likely indicates that the prompt was dismissed
-    automatically, e.g. due to a page navigation, before the user was able to
-    respond to the infobar.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean">
-  <obsolete>
-    Deprecated as of 03/2016.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>Indicates whether the save password prompt was displayed.</summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptResponse"
-    enum="SavePasswordPromptResponseType">
-  <obsolete>
-    Deprecated as of 03/2016.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Breakdown of which response the user selected from the save password prompt.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SettingsReconciliation.InitialAndFinalValues"
-    enum="PasswordManagerPreferencesInitialAndFinalValues">
-  <owner>engedy@chromium.org</owner>
-  <owner>melandory@chromium.org</owner>
-  <summary>
-    Tracks the pair of initial values and pair of final values for the legacy
-    preference for controlling the Chrome Password Manager and the new
-    preference for controlling Smart Lock on Android. A single sample is
-    recorded after sync has merged last snapshot and finished initialization for
-    sync users, and on profile initialization for non-sync users.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SettingsReconciliation.InitialValues"
-    enum="PasswordManagerPreferencesInitialValues">
-  <owner>engedy@chromium.org</owner>
-  <owner>melandory@chromium.org</owner>
-  <summary>
-    Tracks the pair of initial values for both for the legacy preference for
-    controlling the Chrome Password Manager and new preference for controlling
-    Smart Lock on Android. Sample is recorded on every profile initialization
-    before reconciliation logic is taken place, e.g. when user logs in to
-    browser, on a startup of a browser.
-  </summary>
-</histogram>
-
-<histogram
-    name="PasswordManager.ShouldBlockPasswordForSameOriginButDifferentScheme"
-    enum="BooleanBlocked">
-  <owner>jdoerrie@chromium.org</owner>
-  <summary>
-    This metric is recorded every time Chrome detects a password form
-    submission. The credential might be proposed to be saved, or it might be
-    blocked. It is blocked if the previously detected password form submission
-    was successful, and the current submission is from a URL with the same
-    origin, but a different and insecure scheme. That is, if the previously
-    provisionally saved credential is for https://example.com, a new credential
-    for http://example.com would be blocked. More details can be found in the
-    doc associated with http://crbug.com/571580.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ShouldShowAutoSignInFirstRunExperience"
-    enum="BooleanPending">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Records if the user still has to click through the first run experience to
-    benefit from auto sign-in behavior. Recorded on every start-up.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.ShowedFormNotSecureWarningOnCurrentNavigation"
-    enum="BooleanShown">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Recorded (at most once per main-frame navigation) when a password form shows
-    a warning that the form is not secure.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SignInPromo"
-    enum="PasswordBubbleSignInPromoDismissalReason">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    User action on the Chrome Sync promo that appears in the password bubble.
-    The promo offers to sign in to Chrome.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SignInPromoCountTilClick">
-  <obsolete>
-    Deprecated as of 12/16/16. New statistic is
-    PasswordManager.SignInPromoCountTil*.
-  </obsolete>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The number of times the Sign In promo in the password bubble was shown
-    before user clicked on it.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SignInPromoCountTilNoThanks">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The number of times the Sign In promo in the password bubble was shown
-    before user clicked on &quot;No thanks&quot;.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SignInPromoCountTilSignIn">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The number of times the Sign In promo in the password bubble was shown
-    before user clicked on &quot;Sign in&quot;.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SignInPromoDismissalCount">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The number of times the Sign In promo in the password bubble was implcitly
-    dismissed. Recorded each time the promo is implicitly dismissed.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.StorePasswordImportedFromCSVResult"
-    enum="BooleanSuccess">
-  <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Whether password manager stored passwords imported from CSV file
-    successfully.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.StoreReadyWhenWiping" enum="Boolean">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    When the user logs in with their sync credential, PasswordManager checks if
-    there are any outdated copies of it in the password store, in order to purge
-    them. This histogram records whether password store data are ready during
-    this check.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SubmitNavigatesToDifferentDomain"
-    enum="PostSubmitNavigation">
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Indicates whether submitting a password login form changes the registry
-    controlled domain of the main frame.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SubmittedFormType" enum="PasswordFormType">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The type (e.g. signup, login, change password) of all submitted password
-    forms. This is logged on form submission, but doesn't require that the
-    password manager saves.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SubmittedNonSecureFormType"
-    enum="PasswordFormType">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    The type (e.g. signup, login, change password) of all submitted password
-    forms on non-secure pages. This is logged on form submission, but doesn't
-    require that the password manager saves.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SyncCredentialFiltered"
-    enum="CredentialFilteredType">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    This histogram is reported for those forms on accounts.google.com, on which
-    Chrome is forced by Finch/flags during autofilling to remove sync
-    credentials from password store results. It reports true if sync credentials
-    were indeed removed from the store results, and false if there were no sync
-    credentials in the results to begin with.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.SyncingAccountState"
-    enum="PasswordManagerSyncingAccountState">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    Information about the user's current sync status crossed with whether their
-    synced password is saved.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.TimesGeneratedPasswordUsed">
-  <obsolete>
-    Deprecated as of 11/11/14. New statistic is
-    PasswordManager.TimesPasswordUsed.AutoGenerated.
-  </obsolete>
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The number of times each generated password has been used to log in.
-    Recorded by iterating over stored passwords once per run. This information
-    is persisted and synced.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.TimesPasswordUsed">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The number of times each saved password has been used to log in. Does not
-    include generated passwords. Recorded by iterating over stored passwords
-    once per run. This information is persisted and synced.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.TotalAccounts">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The number of accounts stored in the password manager (across all sites)
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"
-    units="accounts">
-  <owner>engedy@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The number of accounts stored in the password manager (across all sites) for
-    origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the histogram
-    suffix. For each scheme, the count is recorded once per browser start-up.
-    (In case of multiple profiles, the counts are for the profile that first has
-    a WebContents created.)
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.UIDismissalReason"
-    enum="PasswordManagerUIDismissalReason">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Why was the password manager's UI (bubble or infobar) closed?
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.UpdatePasswordSubmissionEvent"
-    enum="UpdatePasswordSubmissionEvent">
-  <owner>dvadym@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    The password submission event happened when the user changes their password
-    on a website, say foo.com or types new password on a sign-in form for saved
-    credential (which might mean that the password was changed in a different
-    browser). The later case called password overriding. This histogram measures
-    whether the user has any passwords saved in the Chrome password manager for
-    foo.com or the password was overriden on sign-in form, and what action the
-    user performed on the offered bubble. It's recorded when the bubble is
-    closed.
-  </summary>
-</histogram>
-
-<histogram name="PasswordManager.UserStoredPasswordWithInvalidSSLCert"
-    enum="Boolean">
-  <obsolete>
-    Deprecated 07/2016 because this information is no longer stored in
-    PasswordForm. See also http://crbug.com/413020.
-  </obsolete>
-  <owner>xunlu@chromium.org</owner>
-  <owner>gcasto@chromium.org</owner>
-  <summary>
-    Whether saved password for HTTPS site had a valid SSL cert when the password
-    was saved.
-  </summary>
-</histogram>
-
-<histogram
-    name="PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion"
-    enum="PaymentRequestFlowCompletionStatus">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the flow was completed when CanMakePayment was not called by the
-    merchant.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CanMakePayment.Usage" enum="Boolean">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the merchant used the CanMakePayment method during a Payment
-    Request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CanMakePayment.Used.EffectOnShow"
-    enum="PaymentRequestCanMakePaymentEffectOnShow">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The effect of the CanMakePayment return value on whether Show was called.
-  </summary>
-</histogram>
-
-<histogram
-    name="PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion"
-    enum="PaymentRequestFlowCompletionStatus">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the flow was completed when CanMakePayment was called by the
-    merchant and returned false.
-  </summary>
-</histogram>
-
-<histogram
-    name="PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion"
-    enum="PaymentRequestFlowCompletionStatus">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the flow was completed when CanMakePayment was called by the
-    merchant and returned true.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.Aborted"
-    enum="PaymentRequestAbortReason">
-  <owner>sebsg@chromium.org</owner>
-  <summary>The reason that lead to an abort of the Payment Request.</summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.Completed" enum="BooleanHit">
-  <owner>sebsg@chromium.org</owner>
-  <summary>When the merchant has processed the user's Payment Request.</summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.Initiated" enum="BooleanHit">
-  <owner>sebsg@chromium.org</owner>
-  <summary>When a Payment Request gets initiated by the user.</summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.NoShow"
-    enum="PaymentRequestNoShowReason">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The reason that leads to the Payment Request not being shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.PayClicked" enum="BooleanHit">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    When the user clicks the &quot;pay&quot; button in the Payment Request UI.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails"
-    enum="BooleanHit">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    When the browser retrieves the instrument details from the payment app to
-    complete a purchase.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.CheckoutFunnel.Shown" enum="BooleanHit">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    When the Payment Request UI gets shown after initialization.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.NumberOfSelectionAdds">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The number of times the user added an entry during a Payment Request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.NumberOfSelectionChanges">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The number of times the user changed an entry during a Payment Request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.NumberOfSelectionEdits">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The number of times the user edited an entry during a Payment Request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.NumberOfSuggestionsShown">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    The number of suggestions shown to the user during a payment request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.RequestedInformation"
-    enum="PaymentRequestRequestedInformation">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Tracks what user information is required by merchants to complete a Payment
-    Request.
-  </summary>
-</histogram>
-
-<histogram name="PaymentRequest.SelectedPaymentMethod"
-    enum="PaymentRequestPaymentMethods">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Tracks what payment method was used to complete a transaction in Payment
-    Request.
-  </summary>
-</histogram>
-
-<histogram
-    name="PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion"
-    enum="PaymentRequestFlowCompletionStatus">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the flow was completed when the user did not have suggestions
-    offered for each requested information.
-  </summary>
-</histogram>
-
-<histogram
-    name="PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion"
-    enum="PaymentRequestFlowCompletionStatus">
-  <owner>sebsg@chromium.org</owner>
-  <summary>
-    Whether the flow was completed when the user had suggestions offered for
-    each requested information.
-  </summary>
-</histogram>
-
-<histogram name="PDF.DocumentFeature" enum="PDFFeatures">
-  <owner>tsergeant@chromium.org</owner>
-  <summary>
-    Tracks which features are used by documents opened in the PDF viewer, logged
-    when the document finishes loading.
-  </summary>
-</histogram>
-
-<histogram name="PDF.IsFontSubstituted" enum="Boolean">
-  <owner>npm@chromium.org</owner>
-  <summary>
-    Tracks documents opened in the PDF viewer where substitute fonts need to be
-    used.
-  </summary>
-</histogram>
-
-<histogram name="Pepper.Graphics3DHasShareGroup" units="BooleanShareGroup">
-  <owner>jbauman@chromium.org</owner>
-  <summary>
-    True if a non-flash Pepper Graphics3D context has a share group.
-  </summary>
-</histogram>
-
-<histogram name="Pepper.InterfaceUsed" enum="PepperInterface">
-  <owner>sehr@chromium.org</owner>
-  <owner>bradnelson@chromium.org</owner>
-  <owner>bbudge@chromium.org</owner>
-  <owner>raymes@chromium.org</owner>
-  <summary>
-    The number of out-of-process plugin processes that have loaded a particular
-    PPB interface version.
-  </summary>
-</histogram>
-
-<histogram name="Pepper.PluginContextSecurity.TCPConnect" enum="BooleanSecure">
-  <owner>raymes@chromium.org</owner>
-  <owner>jww@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether a Pepper TCP connect attempt comes from a plugin in a secure or an
-    insecure origin.
-  </summary>
-</histogram>
-
-<histogram name="Pepper.PluginContextSecurity.UDPBind" enum="BooleanSecure">
-  <owner>raymes@chromium.org</owner>
-  <owner>jww@chromium.org</owner>
-  <owner>rsleevi@chromium.org</owner>
-  <summary>
-    Whether a Pepper UDP bind attempt comes from a plugin in a secure or an
-    insecure origin.
-  </summary>
-</histogram>
-
-<histogram name="Pepper.SecureOrigin.MediaStreamRequest" enum="BooleanSecure">
-  <owner>raymes@chromium.org</owner>
-  <summary>
-    Whether a Pepper media stream request (mic/cam access) comes from a plugin
-    in a secure or an insecure origin.
-  </summary>
-</histogram>
-
-<histogram name="PerformanceMonitor.AverageCPU" units="PercentCPUUsage">
-  <owner>oysteine@chromium.org</owner>
-  <summary>
-    Average CPU utilization of a process, read out at each two-minute interval.
-    The utilization is in the 0-100% range per CPU, which is then summed up.
-    I.e. a quadcore system fully loaded would read as 400%.
-  </summary>
-</histogram>
-
-<histogram name="PerformanceMonitor.HighCPU" enum="BooleanHit">
-  <owner>oysteine@chromium.org</owner>
-  <summary>
-    The number of times a process has continuously stayed above a certain
-    threshold of CPU utilization over a certain time period (currently set to
-    two minutes).
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Action" enum="PermissionAction">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc. The suffix of the
-    histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Action.InsecureOrigin" enum="PermissionAction">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc on an insecure
-    origin. The suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Action.SecureOrigin" enum="PermissionAction">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>miguelg@chromium.org</owner>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Tracks whether a permission was granted, rejected, etc on a secure origin.
-    The suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.AutoBlocker.EmbargoPromptSuppression"
-    enum="PermissionEmbargoStatus">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    For every permission request that would show a prompt to the user, this
-    metric tracks whether the request is suppressed by embargo (and the source
-    of that embargo), or whether there is no embargo and the prompt is shown.
-    This is the proportion of permission prompts that the user would have seen
-    that have been blocked due to embargo.
-
-    If the (origin, permission) pair was previously placed under embargo, no
-    prompt is displayed and the reason for embargo is recorded. Otherwise, the
-    prompt is shown and a no embargo reason is recorded.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.AutoBlocker.EmbargoStatus"
-    enum="PermissionEmbargoStatus">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks the reason that an (origin, permission) pair has been placed under
-    embargo (blocked from making requests for that permission for a period of
-    time). This is triggered when a permission is placed under embargo for
-    blacklisting (once Safe Browsing has returned a result), when a permission
-    prompt has been shown and it is placed under embargo for repeated
-    dismissals, or when a permission prompt is shown and not embargoed.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.AutoBlocker.SafeBrowsingResponse"
-    enum="SafeBrowsingResponse">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks the response (if received) from Safe Browsing when the API blacklist
-    is queried for an (origin, permission) pair. The response could be that the
-    origin was blacklisted, not blacklisted, or Safe Browsing timed out before a
-    response was received.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.AutoBlocker.SafeBrowsingResponseTime" units="ms">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Records the elapsed time between the client sending a request to Safe
-    Browsing and receiving a result, or the maximum wait time is exceeded and
-    Safe Browsing is deemed to have timed out.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Accepted" enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks the permission bubbles (merged and non-merged) that are accepted.
-    Merged bubbles are considered accepted if all permissions are allowed.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Accepted.Persisted" enum="BooleanPersisted">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    For each granted permission prompt displayed with a persistence toggle
-    (remember my decision), records whether the persistence toggle was enabled
-    (persist) or not enabled (don't persist).
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Accepted.PriorDismissCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt accept, records the
-    total number of prompt dismissal events for this origin since the last time
-    the user cleared their history or site data and prior to the accept. The
-    suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt accept, records the
-    total number of prompt ignore events for this origin since the last time the
-    user cleared their history or site data and prior to the accept. The suffix
-    of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Denied" enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks the permission bubbles (merged and non-merged) that are denied.
-    Merged bubbles are considered denied if any permission is denied.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Denied.Persisted" enum="BooleanPersisted">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    For each denied permission prompt displayed with a persistence toggle
-    (remember my decision), records whether the persistence toggle was enabled
-    (persist) or not enabled (don't persist).
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Denied.PriorDismissCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt deny, records the
-    total number of prompt dismissal events for this origin since the last time
-    the user cleared their history or site data and prior to the accept. The
-    suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Denied.PriorIgnoreCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt deny, records the
-    total number of prompt ignore events for this origin since the last time the
-    user cleared their history or site data and prior to the accept. The suffix
-    of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.DismissCount">
-  <obsolete>
-    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
-  </obsolete>
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt dismissal, records
-    the total number of prompt dismissal events for this origin since the last
-    time the user cleared their history or site data, inclusive of the current
-    dismissal. Every event in a bucket larger than 1 in this histogram will also
-    have an event in each smaller bucket. The suffix of the histogram indicates
-    which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Dismissed.PriorDismissCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt dismiss, records
-    the total number of prompt dismissal events for this origin since the last
-    time the user cleared their history or site data and prior to the dismiss.
-    The suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt dismiss, records
-    the total number of prompt ignore events for this origin since the last time
-    the user cleared their history or site data and prior to the dismiss. The
-    suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.IgnoreCount">
-  <obsolete>
-    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
-  </obsolete>
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt ignore, records the
-    total number of prompt ignore events for this origin since the last time the
-    user cleared their history or site data, inclusive of the current ignore.
-    Every event in a bucket larger than 1 in this histogram will also have an
-    event in each smaller bucket. The suffix of the histogram indicates which
-    particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Ignored.PriorDismissCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt ignore, records the
-    total number of prompt dismissal events for this origin since the last time
-    the user cleared their history or site data and prior to the ignore. The
-    suffix of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    This metric, recorded at the time of a permission prompt ignore, records the
-    total number of prompt ignore events for this origin since the last time the
-    user cleared their history or site data and prior to the ignore. The suffix
-    of the histogram indicates which particular permission.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.MergedBubbleAccepted"
-    enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks acceptance of permission bubble request types that have been merged
-    into coalesced bubbles.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.MergedBubbleDenied"
-    enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks denial of permission bubble request types that have been merged into
-    coalesced bubbles.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.MergedBubbleTypes"
-    enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks the permission bubble request types that are being merged into
-    coalesced bubbles.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.RequestsPerPrompt">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    How many permission requests each permissions prompt shown to the user
-    contains.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Prompt.Shown" enum="PermissionRequestType">
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Tracks how many times permission prompts are shown to users.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Requested.CrossOrigin" enum="PermissionStatus">
-  <obsolete>
-    Deprecated 02/2017, no longer used
-  </obsolete>
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>keenanb@google.com</owner>
-  <owner>jww@chromium.org</owner>
-  <summary>
-    The embedder's permission setting at the time of a cross-origin iframe
-    permission request for a given permission type. See the corresponding
-    histogram suffixes.
-
-    A request is when a website makes a permission request and the user has the
-    permission set to prompt (i.e. not blocked or allowed).
-
-    Note this is probably not the metric you want - it does not correspond to
-    the total number of times websites request a permission. Also, because
-    specific permissions have code that can automatically block or grant
-    permissions based on things like incognito, installed extensions etc., this
-    does also not correspond to the number of times users are prompted to allow
-    permissions.
-
-    See https://crbug.com/638076 for more details.
-  </summary>
-</histogram>
-
-<histogram name="Permissions.Requested.SameOrigin" enum="PermissionType">
-  <obsolete>
-    Deprecated 02/2017, no longer used
-  </obsolete>
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>keenanb@google.com</owner>
-  <owner>jww@chromium.org</owner>
-  <summary>
-    The permission type (geolocation, and such) of a same-origin permission
-    request.
-
-    A request is when a website makes a permission request and the user has the
-    permission set to prompt (i.e. not blocked or allowed).
-
-    Note this is probably not the metric you want - it does not correspond to
-    the total number of times websites request a permission. Also, because
-    specific permissions have code that can automatically block or grant
-    permissions based on things like incognito, installed extensions etc., this
-    does also not correspond to the number of times users are prompted to allow
-    permissions.
-
-    See https://crbug.com/638076 for more details.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ActivityReferral"
-    enum="PhysicalWebActivityReferer">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Referer used by user to reach the main Physical Web Activity.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.InitialState.IosChrome"
-    enum="PhysicalWebInitialStateIosChrome">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>Initial state of the Physical Web in Chrome for iOS.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ReferralDelay.OptInNotification" units="ms">
-  <obsolete>
-    Deprecated 01/2017, no longer used
-  </obsolete>
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Time between the most recent opt in notification update and when the user
-    arrives at the ListUrlsActivity.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ReferralDelay.StandardNotification" units="ms">
-  <obsolete>
-    Deprecated 01/2017, no longer used
-  </obsolete>
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Time between the most recent standard notification update and when the user
-    arrives at the ListUrlsActivity.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ResolveTime.Background" units="ms">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Round trip time to the metadata server for a Physical Web URL resolution
-    which the client requests during a background scan.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ResolveTime.Foreground" units="ms">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Round trip time to the metadata server for a Physical Web URL resolution
-    which the client requests during a foreground scan, that is not explicitly
-    requested via a refresh.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.ResolveTime.Refresh" units="ms">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Round trip time to the metadata server for a Physical Web URL resolution
-    which the client requests during a foreground scan, that is explicitly
-    requested via a refresh.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.RoundTripTimeMilliseconds" units="ms">
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>Round trip time to the metadata server for Physical web.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.State.Bluetooth" enum="BluetoothStatus">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>Whether bluetooth is on, off, or unknown.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.State.DataConnectionActive" enum="BooleanActive">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>Whether the data connection is active.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.State.LocationPermission" enum="BooleanAccepted">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>Whether location permission has been accepted.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.State.LocationServices" enum="BooleanEnabled">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>Whether location services are enabled.</summary>
-</histogram>
-
-<histogram name="PhysicalWeb.State.Preference"
-    enum="PhysicalWebPreferenceStatus">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Whether the preference is on, off, or if the user is in an onboarding state
-    when Chrome first starts up.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.TotalUrls.OnInitialDisplay" units="urls">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    The number of URLs displayed to a user when a list of nearby URLs is first
-    displayed.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.TotalUrls.OnRefresh" units="urls">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    The number of URLs displayed to a user when a list of nearby URLs is
-    displayed after refreshing.
-  </summary>
-</histogram>
-
-<histogram name="PhysicalWeb.WebUI.ListViewUrlPosition" units="selections">
-  <owner>cco3@chromium.org</owner>
-  <owner>mattreynolds@chromium.org</owner>
-  <owner>mmocny@chromium.org</owner>
-  <summary>
-    Count of how many times the user selected a nearby URL at the specified
-    index in the Physical Web WebUI list view (zero-based). Capped at 50.
-  </summary>
-</histogram>
-
-<histogram name="Platform.AnyCrashesDaily" units="count per day">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of crashes (user, kernel, and unclean shutdowns) during the previous
-    day, or the most recent day the device was in use.  Reported at most once a
-    day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.AnyCrashesWeekly" units="count per week">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of crashes (user, kernel, and unclean shutdowns) during the previous
-    epoch-week, or the most recent epoch-week the device was in use.  Reported
-    at most once a week.  Epoch-weeks divide the time in 7-day intervals
-    starting at the UNIX epoch.
-  </summary>
-</histogram>
-
-<histogram name="Platform.AsvGroup">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS (ARM Chromebooks using Exynos 5250 only) Adaptive Support Voltage
-    Group, recorded once per bootup.  Indicates which &quot;bin&quot; the SoC is
-    part of, which sets the voltage that different rails on the system will run
-    at. The values 0-11 are valid.  A value of 12 indicates an error parsing
-    dmesg and should be investigated.  See also Platform.LotIdEnum.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BatteryAbsent" enum="BooleanAbsent">
-  <owner>cernekee@chromium.org</owner>
-  <summary>
-    Indicates whether the kernel's ACPI Smart Battery System driver logged an
-    error trying to find the battery on boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BootMode.DevSwitch"
-    enum="Platform.BootMode.SwitchStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Indicates the status of the developer switch on Chrome OS hardware. The
-    developer switch allows users to run their own code on the device.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BootMode.FirmwareWriteProtect"
-    enum="Platform.BootMode.FirmwareWriteProtect">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    On Chrome OS hardware, indicates whether flash write protection is enabled
-    for the firmware indicated by the histogram suffix.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BootMode.WriteProtectSwitch"
-    enum="Platform.BootMode.SwitchStatus">
-  <owner>mnissler@chromium.org</owner>
-  <summary>
-    Indicates the status of the hardware write protect switch on Chrome OS
-    hardware. The write protect switch protects firmware from being rewritten.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BootSectorsRead">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Chrome OS number of disk sectors read at boot from kernel start to
-    login-prompt-ready.
-  </summary>
-</histogram>
-
-<histogram name="Platform.BootSectorsWritten">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Chrome OS number of disk sectors written at boot from kernel start to
-    login-prompt-ready.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Cast.MeminfoMemAvailable">
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    /proc/meminfo's 'MemAvailable' in Mbytes. Collected on Cast devices with
-    kernel version 3.14 and above and capped at 500.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Cast.MeminfoMemFreeDerived">
-  <owner>halliwell@chromium.org</owner>
-  <summary>
-    free + buffers + cache memory in Mbytes on Cast devices, capped at 500.
-  </summary>
-</histogram>
-
-<histogram name="Platform.CompressedSwapSize" units="MB">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Chrome OS size of allocated swap area in megabytes (before compression)
-  </summary>
-</histogram>
-
-<histogram name="Platform.CpuFrequencyThermalScaling" units="%">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    CPU frequency as percent of the baseline frequency, sampled every 30s. This
-    may be throttled down from 100% due to power dissipation issues (too high
-    temperature).  It may also be throttled up (turbo), but the kernel does not
-    report the actual turbo frequency, so we put such samples in the 101%
-    bucket.
-  </summary>
-</histogram>
-
-<histogram name="Platform.CpuUsage" units="%">
-  <owner>sonnyrao@chromium.org</owner>
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Peak total (single core) CPU usage for the last sample interval.  The sample
-    interval may vary from seconds to several minutes.
-  </summary>
-</histogram>
-
-<histogram name="Platform.CrOSEvent" enum="CrosEventEnum">
-  <owner>dkrahn@chromium.org</owner>
-  <owner>jwerner@chromium.org</owner>
-  <owner>vapier@chromium.org</owner>
-  <summary>
-    Generic event of interest from Chrome OS.  Intended mainly to help assess
-    the frequency of rare error conditions.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Crouton.Started" enum="Platform.Crouton.Started">
-  <owner>drinkcat@chromium.org</owner>
-  <summary>
-    Detects presence of /run/crouton, indicating that crouton has been started
-    since the previous boot. Value 0/&quot;Total count&quot; is reported on
-    boot, 1/&quot;Started&quot; is reported after the file presence is detected
-    (checked periodically).
-  </summary>
-</histogram>
-
-<histogram name="Platform.CumulativeCpuTime" units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Total CPU time accumulated since the last version update.  Reported at most
-    once a day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.CumulativeUseTime" units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Total use time (device ON and not asleep) since last version update.
-    Reported at most once a day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DailyUseTime" units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Total use time (device ON and not asleep) in the previous day, or the most
-    recent day the device was in use.  Reported at most once a day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Cache_Avg" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Average size of user's Cache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Cache_Max" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Maximum size of user's Cache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Average size of user's Cache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Downloads_Max" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Maximum size of user's Cache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.GCache_Avg" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Average size of user's GCache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.GCache_Max" units="KB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Maximum size of user's GCache directory. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Days since the least frequently used account signed in. Logged once a day,
-    if disk usage is high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
-    units="home directories">
-  <owner>achuith@chromium.org</owner>
-  <owner>tls@chromium.org</owner>
-  <summary>
-    Number of users home directories on the device. Logged once a day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.OldestUserOnDevice">
-  <owner>achuith@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <summary>
-    Days since last login of the least recently user on device. Logged once a
-    day, if disk usage is high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.UsersOnDevice">
-  <owner>achuith@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <summary>
-    Number of user home dirs on device. Logged once a day, if disk usage is
-    high.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageChronos" units="KB">
-  <owner>keescook@google.com</owner>
-  <summary>
-    Chrome OS KB in use in the /home/chronos filesystem tree. Logged once a day
-    during log file cleanup.
-  </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageVar" units="KB">
-  <owner>keescook@google.com</owner>
-  <summary>
-    Chrome OS KB in use in the /var filesystem tree. Logged once a day during
-    log file cleanup.
-  </summary>
-</histogram>
-
-<histogram name="Platform.IntelMaxMicroArchitecture"
-    enum="IntelMaxMicroArchitecture">
-  <owner>fbarchard@chromium.org</owner>
-  <summary>
-    The maximum supported micro-architecture on an Intel platform.  This value
-    is logged at program start time.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashesDaily" units="count per day">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of kernel crashes during the previous day, or the most recent day the
-    device was in use.  Reported at most once a day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashesPerActiveYear" units="count per year">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of kernel crashes since the last OS update, normalized as number of
-    crashes per year of active use (active use = device is ON and not asleep).
-    Reported daily.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashesPerCpuYear" units="count per CPU year">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of kernel crashes since the last OS update, normalized as number
-    crashes per year of CPU time.  Reported daily.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashesSinceUpdate" units="count">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of kernel crashes since the last OS update, reported daily.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashesWeekly" units="count per week">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Count of kernel crashes during the previous epoch-week, or the most recent
-    epoch-week the device was in use.  Reported at most once a week. Epoch-weeks
-    divide the time in 7-day intervals starting at the UNIX epoch.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelCrashInterval" units="seconds">
-  <owner>semenzato@chromium.org</owner>
-  <owner>bsimonnet@chromium.org</owner>
-  <summary>
-    Time elapsed between the last two kernel crashes.  Sent after every kernel
-    crash.
-  </summary>
-</histogram>
-
-<histogram name="Platform.KernelWarningHashes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The 32-bit hash of a kernel warning.  This is the hash of the
-    &quot;file:line&quot; string corresponding to the location of the warning,
-    for instance: &quot;/mnt/host/source/src/third_party/kernel/files/drivers
-    /gpu/drm/i915/intel_dp.c:351&quot; (ignore spurious spaces).  The hash is
-    produced by this code: while (*string) hash = (hash &lt;&lt; 5) + hash +
-    *string++;  Separately each warning is also collected (with its hash) via
-    the crash reporter, but only its first occurrence in each boot session.
-  </summary>
-</histogram>
-
-<histogram name="Platform.LogicalCpuCount">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Number of logical processors. This includes Hyperthreaded cores.
-  </summary>
-</histogram>
-
-<histogram name="Platform.LotIdEnum" enum="Exynos5250LotIdEnum">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Chrome OS (ARM Chromebooks using Exynos 5250 only) indication about whether
-    we're part of a special lot ID.  Special lot IDs are groups of chips that
-    have special case handling in the kernel for the Adaptive Support Voltage
-    code (the normal logic doesn't work).  See also Platform.AsvGroup.  Note
-    that fused devices are never part of a special lot (currently) and only some
-    unfused lots are &quot;special&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Mem" units="%">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>sonnyrao@chromium.org</owner>
-  <owner>semenzato@chromium.org</owner>
-  <owner>bccheng@chromium.org</owner>
-  <summary>
-    Various memory usage % of total memory on Chrome OS devices (snapshotted
-    every 30s).
-  </summary>
-</histogram>
-
-<histogram name="Platform.Meminfo" units="KB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>sonnyrao@chromium.org</owner>
-  <owner>semenzato@chromium.org</owner>
-  <owner>bccheng@chromium.org</owner>
-  <summary>
-    Various memory usage amount on Chrome OS devices (snapshotted every 30s).
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemoryBandwidth.ReadWrite" units="MB/s">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    Peak memory bandwith (read and write) usage during the last sample interval.
-    The sample interval may vary from seconds to several minutes.
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon0">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Chrome OS total anonymous memory (active + inactive) as % of total memory 1
-    minute after boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon1">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Chrome OS total anonymous memory (active + inactive) as % of total memory 5
-    minutes after boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon2">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Chrome OS total anonymous memory (active + inactive) as % of total memory 30
-    minutes after boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon3">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Chrome OS total anonymous memory (active + inactive) as % of total memory
-    150 minutes after boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon4">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Chrome OS total anonymous memory (active + inactive) as % of total memory
-    750 minutes after boot.
-  </summary>
-</histogram>
-
-<histogram name="Platform.PageFaultsLong" units="page faults/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Page faults per second averaged over 30s interval, sampled continuously.
-  </summary>
-</histogram>
-
-<histogram name="Platform.PageFaultsShort" units="page faults/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Page faults per second averaged over 1s interval, sampled every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.ReadSectorsLong">
-  <owner>gwendal@google.com</owner>
-  <summary>
-    Number of disk sectors per second read by Chrome OS in a long interval
-    (currently 30s)
-  </summary>
-</histogram>
-
-<histogram name="Platform.ReadSectorsShort">
-  <owner>gwendal@google.com</owner>
-  <summary>
-    Number of disk sectors per second read by Chrome OS in a short interval
-    (currently 1s, sampled every 30s)
-  </summary>
-</histogram>
-
-<histogram name="Platform.SmartTransferErrors">
-  <owner>gwendal@google.com</owner>
-  <summary>Disk communication errors (SMART 199), sent at boot.</summary>
-</histogram>
-
-<histogram name="Platform.SmartUncorrectableErrors">
-  <owner>gwendal@google.com</owner>
-  <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
-</histogram>
-
-<histogram name="Platform.SpringChargerType">
-  <owner>vpalatin@google.com</owner>
-  <summary>
-    USB device ID of the charger plugged into a Spring device (if any), sent
-    once a minute.  The Device ID is composed from the following 4 8-bit
-    registers of the TSU6721 chip: ADC (07h), Device Type 3 (15h), Device Type 2
-    (0Bh), Device Type 1 (0Ah).  Device Type 1/2/3 is a bitmap and most of bits
-    are mutually exclusive (excepted VBUS debounce).  ADC is the 5-bit value of
-    the ID pin, but for most types (as in Device Type), there are only one or
-    two possible ID pin connections/values. The datasheet can be found here:
-    http://www.ti.com/lit/ds/symlink/tsu6721.pdf.
-
-    Note that different brand/models of the charger can have the same ID.
-  </summary>
-</histogram>
-
-<histogram name="Platform.StatefulUsage" units="%">
-  <owner>achuith@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <summary>Chrome OS stateful partition usage level.</summary>
-</histogram>
-
-<histogram name="Platform.Storage.Flash.BadBlocks">
-  <owner>dehrenberg@chromium.org</owner>
-  <owner>cast-analytics@google.com</owner>
-  <summary>
-    The number of blocks marked bad in an MTD partition. This is relevant for
-    devices with raw NAND flash, such as Chromecast. Sampled once daily, if the
-    Chromecast is on for any significant length of time in the day.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapInLong" units="pages/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Average pages/second swapped IN over a 30s interval, sampled every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapInShort" units="pages/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Average pages/second swapped IN over a 1s interval, sampled every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    CPU utilization for the specified swap group and time interval after a tab
-    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time1"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time2"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time3"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time4"
-    units="page faults/second">
-  <obsolete>
-    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Page faults/second for the specified swap group and time interval after a
-    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapOutLong" units="pages/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Average pages/second swapped OUT over a 30s interval, sampled every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.SwapOutShort" units="pages/second">
-  <owner>sonnyrao@chromium.org</owner>
-  <summary>
-    Average pages/second swapped OUT over a 1s interval, sampled every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor00" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 0 (I2C_CPU-Die) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor01" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 1 (I2C_CPU-Object) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor02" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 2 (I2C_PCH-Die) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor03" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 3 (I2C_PCH-Object) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor04" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 4 (I2C_DDR-Die) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor05" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 5 (I2C_DDR-Object) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor06" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 6 (Charger-Die), taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor07" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 7 (Charger-Object) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor08" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Temperature reading at sensor 8 (ECInternal) taken every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor09" units="Celsius">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Temperature reading at sensor 9 (PECI) taken every 30s.</summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Temperature.Cpu.0" units="Celsius">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    Temperature reading at sensor 0 of the CPU collected every few seconds (may
-    vary between devices).
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Temperature.Wifi0" units="Celsius">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    Temperature reading at wireless interface 0 collected every few seconds (may
-    vary between devices).
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Temperature.Wifi1" units="Celsius">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    Temperature reading at wireless interface 1 collected every few seconds (may
-    vary between devices).
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Temperature.Wifi2" units="Celsius">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    Temperature reading at wireless interface 2 collected every few seconds (may
-    vary between devices).
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Zone.Cpu.States" units="Thermal state">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    State of the thermal zone of the CPU collected every second. State depends
-    on device, higher state corresponds to a higher temperature.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Zone.Wifi0.States" units="Thermal state">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    State of the thermal zone of wireless interface 0 collected every second.
-    State depends on device, higher state corresponds to a higher temperature.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Zone.Wifi1.States" units="Thermal state">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    State of the thermal zone of wireless interface 1 collected every second.
-    State depends on device, higher state corresponds to a higher temperature.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Thermal.Zone.Wifi2.States" units="Thermal state">
-  <owner>mka@chromium.org</owner>
-  <summary>
-    State of the thermal zone of wireless interface 2 collected every second.
-    State depends on device, higher state corresponds to a higher temperature.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Platform.TPM.AuthErrorCode" enum="TPMResultCodeEnum">
-  <owner>semenzato@chromium.org</owner>
-  <summary>
-    Each sample is the result code of a TPM authorized command issued through
-    tcsd.  Success is 0.  For the other error codes, see
-    /usr/include/tss/tpm_error.h.
-  </summary>
-</histogram>
-
-<histogram name="Platform.TPM.DictionaryAttackCounter">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    Each sample is the value of the TPM dictionary attack counter reported at
-    boot and hourly while running.  Any non-zero value is unexpected.
-  </summary>
-</histogram>
-
-<histogram name="Platform.TPM.DictionaryAttackResetStatus"
-    enum="CrosTPMDictionaryAttackResetStatusEnum">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    Each sample is the status of an hourly attempt to reset the TPM dictionary
-    attack counter.
-  </summary>
-</histogram>
-
-<histogram name="Platform.TPM.ErrorCode" enum="TPMResultCodeEnum">
-  <owner>semenzato@chromium.org</owner>
-  <summary>
-    Each sample is the result code of a TPM command issued through tcsd. Success
-    is 0.  For the other error codes, see /usr/include/tss/tpm_error.h.
-  </summary>
-</histogram>
-
-<histogram name="Platform.TPMForcedReboot" units="reboots">
-  <owner>dkrahn@chromium.org</owner>
-  <summary>
-    Each sample is the number of consecutive reboots performed while attempting
-    to clear a TPM (Trusted Platform Module) error.
-  </summary>
-</histogram>
-
-<histogram name="Platform.Tps65090Retries">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Retries needed to enable a FET on tps65090 (AKA tpschrome).  Tps65090 is a
-    power management unit (PMU) used on many ARM Chromebooks.  Until version ES7
-    was rolled into production we would sometimes run into a problem where FET1
-    (the FET used to switch on and off the backlight) wouldn't turn on properly.
-    This problem was especially prevalent when the voltage was high (like when
-    the device was plugged into the wall).  Retrying by turning the FET off and
-    on again is nearly always effective, so the kernel will retry up to 5 times
-    (currently) and will also log the fact that it needed to retry.  On newest
-    kernels (kernel 3.8 and up) a kernel warning will be logged with WARN_ON if
-    the FET still failed to turn on after 5 tries. Refer to the kernel warning
-    reports to find that information.  For more details about this bug refer to
-    http://crbug.com/338657 and http://crosbug.com/p/16009.  Note that we log
-    retries on all 7 FETs even though we've only ever seen failures of FET1.
-  </summary>
-</histogram>
-
-<histogram name="Platform.WriteSectorsLong">
-  <owner>gwendal@google.com</owner>
-  <summary>
-    Number of disk sectors per second written by Chrome OS in a long interval
-    (currently 30s)
-  </summary>
-</histogram>
-
-<histogram name="Platform.WriteSectorsShort">
-  <owner>gwendal@google.com</owner>
-  <summary>
-    Number of disk sectors per second written by Chrome OS in a short interval
-    (currently 1s, sampled every 30s)
-  </summary>
-</histogram>
-
-<histogram name="Platform.ZramCompressedSize" units="MB">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    Compressed swap size in megabytes.  This is the actual amount of RAM used by
-    the system to compress memory (i.e. after compression).  Snapshot every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.ZramCompressionRatioPercent" units="%">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    The ratio of compressed memory (zram) before and after compression when the
-    denominator at least 1 MB. Ratios of interest are between 1 and 6 (typically
-    between 2 and 3), and we express them as a percentage (between 100% and
-    600%). The size of memory before compression includes zero-filled pages.
-    Values close to 100% indicate low compression effectiveness. Snapshot every
-    30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.ZramSavings" units="MB">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    RAM savings in megabytes from using memory compression.  This is the
-    difference between the RAM size before and after compression.  Snapshot
-    every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.ZramZeroPages" units="pages">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    Number of zero-filled pages that the OS is compressing.  A large number
-    suggests wasteful allocation.  Snapshot every 30s.
-  </summary>
-</histogram>
-
-<histogram name="Platform.ZramZeroRatioPercent" units="%">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    The fraction of compressed memory that consists of zero-filled pages.
-    Snapshot every 30s.
-  </summary>
-</histogram>
-
-<histogram name="PlatformFile.FlushTime" units="ms">
-  <obsolete>
-    Deprecated as of 2016-07 because the histogram's purpose of adding colour to
-    the description of File::Flush() has been fulfilled.
-  </obsolete>
-  <owner>tnagel@chromium.org</owner>
-  <summary>The time it takes to run File::Flush().</summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownCreateFileErrors" units="code">
-  <obsolete>
-    Deprecated as of 2013-05, replaced by
-    PlatformFile.UnknownCreateFileErrorsWin in chrome 29.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Errors returned by CreateFile on windows that PlatformFileError doesn't yet
-    support.
-  </summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownErrors.Posix" enum="OSAgnosticErrno">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Errors returned by CreateFile on POSIX that PlatformFileError doesn't yet
-    support.
-  </summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownErrors.Windows" enum="WinGetLastError">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Errors returned by CreateFile on Windows that PlatformFileError doesn't yet
-    support.
-  </summary>
-</histogram>
-
-<histogram name="PLT.Abandoned" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Distribution of actual finished pages, vs abandoned pages, where we needed
-    to declare a finish time prematurely since the page was being closed
-    (exited).
-  </summary>
-</histogram>
-
-<histogram name="PLT.Abandoned.NoProxy.http" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned.NoProxy.https" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned.Proxy.http" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned.Proxy.https" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionAdblock" enum="Abandoned">
-  <obsolete>
-    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionAdblockPlus" enum="Abandoned">
-  <obsolete>
-    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionWebRequest" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The PLT.Abandoned histogram for pages loaded after WebRequest API was used.
-  </summary>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionWebRequestAdblock" enum="Abandoned">
-  <obsolete>
-    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionWebRequestAdblockPlus" enum="Abandoned">
-  <obsolete>
-    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_ExtensionWebRequestOther" enum="Abandoned">
-  <obsolete>
-    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.Abandoned_SpdyProxy" enum="Abandoned">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.AbandonType" enum="AbandonType">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Diagnose why a page load was considered abandoned.</summary>
-</histogram>
-
-<histogram name="PLT.BeginToCommit" units="ms">
-  <obsolete>
-    Use PageLoad.Timing2.NavigationToCommit instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
-    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
-    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
-    time when renderer requested load of document, after any unload of last
-    document. &quot;Commit&quot;== time when renderer got first byte of
-    document.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="ms">
-  <obsolete>
-    Deprecated as of http://crrev.com/392823002
-  </obsolete>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    PLT.BeginToFinish, but for pages requested just after a new preconnect
-    request.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    PLT.BeginToFinish, but for pages which contained prefetch links.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    PLT.BeginToFinish, but for pages which were referred to by pages which
-    contained prefetch links.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock" units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequest"
-    units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The PLT.BeginToFinish histogram for pages loaded by following a link, after
-    WebRequest API was used.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblock"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram
-    name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestOther"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock" units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequest"
-    units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The PLT.BeginToFinish histogram for pages reloaded by JavaScript or by
-    following a link, after WebRequest API was used.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblock"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram
-    name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestOther"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock" units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest"
-    units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The PLT.BeginToFinish histogram for pages loads initiated by back/forward
-    buttons, or by a change of encoding, after WebRequest API was used.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblock"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram
-    name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestOther"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by
-    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblock" units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus" units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequest" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>vabr@chromium.org</owner>
-  <summary>
-    The PLT.BeginToFinish histogram for pages loaded by entering a URL or a
-    search query into Omnibox, after WebRequest API was used.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblock"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblockPlus"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestOther"
-    units="ms">
-  <obsolete>
-    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary/>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_SpdyProxy" units="ms">
-  <obsolete>
-    Use PLT.PT_BeginToFinish_DataReductionProxy instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>PLT.BeginToFinish, but for pages fetched over a SPDY proxy.</summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest" units="ms">
-  <obsolete>
-    Deprecated as of http://crrev.com/392823002
-  </obsolete>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    PLT.BeginToFinishDoc, but for pages requested just after a new preconnect
-    request.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    PLT.BeginToFinishDoc, but for pages which contained prefetch links.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    PLT.BeginToFinishDoc, but for pages which were referred to by pages which
-    contained prefetch links.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_SpdyProxy" units="ms">
-  <obsolete>
-    Use PLT.PT_BeginToFinishDoc_DataReductionProxy instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    PLT.BeginToFinshDoc, but for pages fetched over a SPDY proxy.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFirstPaint" units="ms">
-  <obsolete>
-    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
-    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
-    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
-    time when renderer requested load of document, after any unload of last
-    document. &quot;First paint&quot;== time when first paint operation was
-    performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFirstPaint_Negative" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Magnitude and difference between begin and first paint, when first_paint
-    precedes begin. This is a temporary metric used to better understand the
-    root cause of http://crbug.com/125273.
-  </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFirstPaintAfterLoad" units="ms">
-  <obsolete>
-    The first paint after load is not useful for most documents. Consider using
-    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    Time from &quot;big&quot; to &quot;first paint after load.&quot;
-    &quot;Begin&quot;== &quot;request&quot; if user requested, and
-    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
-    document. &quot;Start&quot;== time when renderer requested load of document,
-    after any unload of last document. &quot;First paint after load&quot;== time
-    after onload() when first paint operation is performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.CommitToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
-    time when renderer got first byte of document.  &quot;Finish&quot;==after
-    onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="PLT.CommitToFinishDoc" units="ms">
-  <obsolete>
-    Use PageLoad.ParseTiming.ParseDuration instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
-    time when renderer got first byte of document. &quot;Finish doc&quot; ==
-    main document loaded, before onload(). &quot;Finish&quot;==after onload()
-    and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="PLT.CommitToFirstPaint" units="ms">
-  <obsolete>
-    Use PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;first paint.&quot;
-    &quot;Commit&quot;== time when renderer got first byte of document.
-    &quot;First paint&quot;== time when first paint operation was performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.CommitToFirstPaintAfterLoad" units="ms">
-  <obsolete>
-    The first paint after load is not useful for most documents. Consider using
-    PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
-    &quot;Commit&quot;== time when renderer got first byte of document.
-    &quot;First paint after load&quot;== time after onload() when first paint
-    operation is performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.FinishDocToFinish" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
-    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
-    onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="PLT.FinishToFirstPaintAfterLoad" units="ms">
-  <obsolete>
-    The first paint after load is not useful for most documents. Consider using
-    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
-    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
-    paint after load&quot;== time after onload() when first paint operation is
-    performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.LoadType" enum="LoadType">
-  <obsolete>
-    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.*
-    instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Probability distribution for enumerated varieties of page loads.
-  </summary>
-</histogram>
-
-<histogram name="PLT.MissingStart" enum="MissingStartType">
-  <obsolete>
-    Deprecated as of 2014-06.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Diagnose error conditions in PLT reporting. A start time should always be
-    present.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NavStartToLoadEnd" units="ms">
-  <obsolete>
-    deprecated 2012-01-19 in favour of PLT.PT_*
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time elapsed between the Navigation Timing metrics navigationStart and
-    loadEventEnd. Definitions: http://www.w3.org/TR/navigation-timing/
-  </summary>
-</histogram>
-
-<histogram name="PLT.NavStartToLoadStart" units="ms">
-  <obsolete>
-    deprecated 2012-01-19 in favour of PLT.PT_*
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time elapsed between the Navigation Timing metrics navigationStart and
-    loadEventStart. Definitions: http://www.w3.org/TR/navigation-timing/
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_Connect" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from connectStart to connectEnd based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeConnect" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domanLookupEnd to connectStart based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeDomainLookup" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from fetchStart to domainLookupStart based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeDomLoading" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016. Replaced by
-    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from responseStart to domLoading based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeFetch" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from navigationStart to fetchStart based on Navigation Timing when no
-    redirect.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from navigationStart to fetchStart excluding time spent on redirects
-    based on Navigation Timing. Only page loads with redirects are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeLoadEvent" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016. Replaced by
-    PageLoad.DocumentTiming.NavigationToLoadEventFired.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domContentLoadedEventEnd to loadEventStart based on Navigation
-    Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeRequest" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from connectEnd to requestStart based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomainLookup" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domainLookupStart to domainLookupEnd based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomContentLoaded" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToDOMContentLoadedEventFired
-    instead.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domContentLoadedEventStart to domContentLoadedEventEnd based on
-    Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomInteractive" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domInteractive to domContentLoadEventStart based on Navigation
-    Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomLoading" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from domLoading to domInteractive based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_LoadEvent" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from loadEventStart to loadEventEnd based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_Redirect" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from redirectStart to redirectEnd based on Navigation Timing when
-    redirects exist.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_Request" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016. Replaced by
-    PageLoad.ParseTiming.NavigationToParseStart.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from requestStart to responseStart based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.NT_Response" units="ms">
-  <obsolete>
-    Deprecated as of 7/19/2016. Replaced by PageLoad.ParseTiming.ParseDuration.
-  </obsolete>
-  <owner>bolian@chromium.org</owner>
-  <summary>
-    Time from responseStart to responseEnd based on Navigation Timing.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PageUsed_PrerenderLoad" enum="PageUsed">
-  <obsolete>
-    Deprecated as of 5/02/2011.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Distribution of discarded and displayed prerendered pages.</summary>
-</histogram>
-
-<histogram name="PLT.PerceivedLoadTime" units="ms">
-  <obsolete>
-    Deprecated as of 5/02/2011, replaced by Prerender.RendererPLT.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Perceived load time of a page. For non-prerendered pages, this is just
-    BeginToFinish. For displayed prerendered pages, this is the time from when
-    the prerendered page is moved into a TabContents until finish.
-    &quot;Finish&quot; == after onload() and all resources are loaded. Note that
-    this is 0 if the loading finishes before the page is moved into a
-    TabContents.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="ms">
-  <obsolete>
-    Deprecated as of 5/02/2011, replaced by
-    Prerender.RendererPerceivedPLTMatched.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Perceived load time of a prerendered page that is displayed. This is the
-    time from when the prerendered page is moved into a TabContents until
-    finish. &quot;Finish&quot; == after onload() and all resources are loaded.
-    Note that this is 0 if the loading finishes before the page is moved into a
-    TabContents.
-  </summary>
-</histogram>
-
-<histogram name="PLT.Prerender_TimeUntilDisplay" units="ms">
-  <obsolete>
-    Deprecated as of 5/02/2011, replaced by Prerender.RendererTimeUntilDisplay.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time elapsed between when the prerendering of a page starts and when the
-    page is displayed. Prerendered pages discarded without being displayed are
-    excluded from this count.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PrerenderIdleTime" units="ms">
-  <obsolete>
-    Deprecated as of 5/02/2011, replaced by Prerender.RendererIdleTime.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This is the time from when a prerendered page finishes loading to when it is
-    displayed. When a page is displayed before it finishes loading, no value is
-    recorded in this histogram.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT.NavigationStartToFirstLayout" units="ms">
-  <obsolete>
-    Deprecated. Use PageLoad.Timing2.* instead.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's navigation start to the time the
-    first document layout is performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT.ResponseStartToFirstLayout" units="ms">
-  <obsolete>
-    Deprecated. Use PageLoad.Timing2.* instead.
-  </obsolete>
-  <owner>bmcquade@chromium.org</owner>
-  <summary>
-    Measures the time from navigation timing's response start to the time the
-    first document layout is performed.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToCommit" units="ms">
-  <obsolete>
-    Use PageLoad.Timing2.NavigationToCommit instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
-    navigationStart if user-initiated request.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 9/2016. Use Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToCommit
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
-    navigationStart if user-initiated request. Only page loads through the data
-    reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.BeginToFinish. Finish: loadEventEnd. Begin: requestStart or
-    navigationStart if user-initiated request.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 9/2016. Use Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.BeginToFinish_SpdyProxy. Finish: loadEventEnd. Begin:
-    requestStart or navigationStart if user-initiated request. Only page loads
-    through the data reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinishDoc" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.BeginToFinishDoc. FinishDoc: loadEventStart. Begin:
-    requestStart or navigationStart if user-initiated request.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.BeginToFinishDoc_SpdyProxy. FinishDoc: loadEventStart. Begin:
-    requestStart or navigationStart if user-initiated request. Only page loads
-    through the data reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
-    Only page loads through the data reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinishDoc" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
-    loadEventStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
-    loadEventStart. Only page loads through the data reduction proxy are
-    considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_FinishDocToFinish" units="ms">
-  <obsolete>
-    No longer needed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
-    loadEventStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
-    loadEventStart. Only page loads through the data reduction proxy are
-    considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToCommit" units="ms">
-  <obsolete>
-    Use PageLoad.Timing2.NavigationToCommit instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and measures the time until
-    the renderer got first byte of document. Commit: time when renderer got
-    first byte of document. Request: navigationStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToDomContentLoaded" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and measures the time until
-    the beginning of the DOMContentLoaded event. DOMContentLoaded:
-    domContentLoadedEventStart. Request: navigationStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
-    navigationStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016. Use
-    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
-    instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
-    navigationStart. Only page loads through the data reduction proxy are
-    considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToFinishDoc" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and measures the page load
-    time until the beginning of the load event. Finish: loadEventStart. Request:
-    navigationStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToStart" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.RequestToStart. Start: requestStart. Request:
-    navigationStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.RequestToStart. Start: requestStart. Request:
-    navigationStart. Only page loads through the data reduction proxy are
-    considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToCommit" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
-    Only page loads through the data reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToFinish" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This time is based on the NavigationTiming spec and is a more accurate
-    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
-  </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    This time is based on the PerformanceTiming spec and is a more accurate
-    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
-    Only page loads through the data reduction proxy are considered.
-  </summary>
-</histogram>
-
-<histogram name="PLT.RequestToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot; ==
-    time when user requested document.  &quot;Finish&quot; == after onload() and
-    all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="PLT.RequestToStart" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
-    time when user requested document. &quot;Start&quot;== time when renderer
-    requested load of document, after any unload of last document.
-  </summary>
-</histogram>
-
-<histogram name="PLT.StartToCommit" units="ms">
-  <obsolete>
-    Use PageLoad.Timing2.NavigationToCommit instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
-    when renderer requested load of document, after any unload of last document.
-    &quot;Commit&quot;== time when renderer got first byte of document.
-  </summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish" units="ms">
-  <obsolete>
-    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
-    when renderer requested load of document, after any unload of last document.
-    &quot;Finish&quot;==after onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish.NoProxy.http">
-  <obsolete>
-    Deprecated as of 07/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>StartToFinish times when using http and no proxy.</summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish.NoProxy.https">
-  <obsolete>
-    Deprecated as of 07/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>StartToFinish times when using https and no proxy.</summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish.Proxy.http">
-  <obsolete>
-    Deprecated as of 07/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>StartToFinish times when using http over a proxy.</summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish.Proxy.https">
-  <obsolete>
-    Deprecated as of 07/2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>StartToFinish times when using https over a proxy.</summary>
-</histogram>
-
-<histogram name="PLT.UserTiming_Mark" units="ms">
-  <obsolete>
-    Deprecated as of 09/2016.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the User Timing spec and measures the time from
-    Navigation Timing navigationStart until the point where the page called
-    performance.mark().
-  </summary>
-</histogram>
-
-<histogram name="PLT.UserTiming_MeasureDuration" units="ms">
-  <obsolete>
-    Deprecated as of 09/2016.
-  </obsolete>
-  <owner>pmeenan@chromium.org</owner>
-  <summary>
-    This time is based on the User Timing spec and reports the time between two
-    arbitrary points defined by the page being loaded and directly matches the
-    measurement exposed by performance.measure().
-  </summary>
-</histogram>
-
-<histogram name="Plugin.AvailabilityStatus.WidevineCdm"
-    enum="PluginAvailabilityStatus">
-  <owner>xhwang@chromium.org</owner>
-  <summary>
-    The availability status of Widevine CDM. In normal cases, this is reported
-    per render process if EME API is used. This is not reported if EME API is
-    not used. This could be reported multiple times per render process until
-    PLUGIN_AVAILABLE is reported (which should be a rare case).
-  </summary>
-</histogram>
-
-<histogram name="Plugin.EnabledStatusMigrationDone" enum="Boolean">
-  <owner>pastarmovj@chromium.org</owner>
-  <owner>tommycli@chromium.org</owner>
-  <summary>Tracks whether plugins that were disabled were migrated.</summary>
-</histogram>
-
-<histogram name="Plugin.Flash.ClickSize.AspectRatio" units="%">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Aspect ratio of Flash plugins users click at least once. The aspect ratio is
-    multiplied by 100 and stored as a rounded integer.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.Flash.ClickSize.Height" units="pixels">
-  <owner>tommycli@chromium.org</owner>
-  <summary>Height of Flash plugins users click at least once.</summary>
-</histogram>
-
-<histogram name="Plugin.Flash.ClickSize.Width" units="pixels">
-  <owner>tommycli@chromium.org</owner>
-  <summary>Width of Flash plugins users click at least once.</summary>
-</histogram>
-
-<histogram name="Plugin.Flash.Engagement">
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The engagement score of origins which have passed through a site engagement
-    check to permit or block Flash. Recorded every time the Flash plugin is
-    requested with the PreferHtmlOverPlugins feature active.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.Flash.TinyContentSize" enum="FlashTinyContentSize">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Collects the sizes of all loaded Flash plugin instances. This is for
-    determining the prevalence of tiny flash plugin instances.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.Flash.YouTubeRewrite" enum="YouTubeRewriteStatus">
-  <owner>mlamouri@chromium.org</owner>
-  <owner>kdsilva@google.org</owner>
-  <summary>
-    Records the YouTube Flash embed rewrite status when attempted.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.FlashNavigateUsage" enum="FlashNavigateUsageType">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Record usage of PPB_Flash.Navigate() Pepper API.</summary>
-</histogram>
-
-<histogram name="Plugin.FlashUsage" enum="FlashUsage">
-  <owner>yzshen@chromium.org</owner>
-  <owner>thestig@chromium.org</owner>
-  <summary>Collects Flash usage data.</summary>
-</histogram>
-
-<histogram name="Plugin.NpapiRemovalInfobar.Removed.PluginGroup"
-    enum="PluginGroup">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    The plugin group of an NPAPI plugin that is no longer supported. Recorded
-    when the NPAPI removal infobar is shown for a plugin which is no longer
-    supported.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.NpapiRemovalInfobar.RemovedSoon.PluginGroup"
-    enum="PluginGroup">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    The plugin group of an NPAPI plugin that will be unsupported soon. Recorded
-    when the NPAPI removal infobar is shown after an NPAPI plugin first loads to
-    warn the user that NPAPI support for this plugin will be removed soon.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.NPAPIStatus" enum="NPAPIPluginStatus">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Records whether NPAPI plugins are supported by the platform, and if so,
-    whether they are enabled or disabled.  Recorded once at browser startup.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.PowerSaver.PeripheralHeuristic"
-    enum="PluginPowerSaverPeripheralHeuristicDecision">
-  <obsolete>
-    Deprecated in favor of Plugin.PowerSaver.PeripheralHeuristicInitialDecision.
-  </obsolete>
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Records each decision of the Plugin Power Saver peripheral content
-    heuristic. This UMA is counted once per peripheral query, and may count a
-    single plugin instance multiple times as it is resized.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.PowerSaver.PeripheralHeuristicInitialDecision"
-    enum="PluginPowerSaverPeripheralHeuristicDecision">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Records the initial decision of the Plugin Power Saver peripheral content
-    heuristic for each plugin instance. This is recorded once per plugin
-    instance.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.PowerSaver.PosterParamPresence"
-    enum="PluginPowerSaverPosterParamPresence">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Record how many plugin object tags use poster param. This is recorded once
-    per plugin instance, and is currently restricted to Flash plugin instances.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.PowerSaver.Unthrottle"
-    enum="PluginPowerSaverUnthrottleMethod">
-  <owner>tommycli@chromium.org</owner>
-  <summary>
-    Record how many throttled plugins are unthrottled, and by what method.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.PpapiBrokerLoadErrorCode" units="code">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The error code of a PPAPI broker load failure.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiBrokerLoadResult" enum="PluginLoadResult">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The result from an attempt to load a PPAPI broker.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiBrokerLoadTime" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The time spent to load a PPAPI broker.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiPluginLoadErrorCode" units="code">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The error code of a PPAPI plugin load failure.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiPluginLoadResult" enum="PluginLoadResult">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The result from an attempt to load a PPAPI plugin.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiPluginLoadTime" units="ms">
-  <owner>xhwang@chromium.org</owner>
-  <summary>The time spent to load a PPAPI plugin.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiSyncIPCTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The time it took to complete a synchronous IPC made from the PPAPI process.
-  </summary>
-</histogram>
-
-<histogram name="Plugin.RequestObjectResult" enum="BooleanSuccess">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>Result of HTMLPluginElement::requestObject in Blink.</summary>
-</histogram>
-
-<histogram name="Plugin.SyncMessageTime" units="ms">
-  <obsolete>
-    Deprecated due to NPAPI removal.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Roundtrip times for synchronous IPC calls from the renderer to NPAPI plugin
-    processes.
-  </summary>
-</histogram>
-
-<histogram name="PluginFinder.BuiltInPluginList.ErrorCode"
-    enum="PluginListError">
-  <owner>bauerb@chromium.org</owner>
-  <summary>
-    Error codes when parsing the built-in plugin list. Logged when the
-    PluginFinder singleton is created.
-  </summary>
-</histogram>
-
-<histogram name="Power.BacklightLevelOnAC" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The level of the backlight as a percentage when the user is on AC. Sampled
-    every 30 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Power.BacklightLevelOnBattery" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The level of the backlight as a percentage when the user is on battery.
-    Sampled every 30 seconds.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryChargeHealth" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS battery charge health percentage.  Sampled once when device starts
-    charging.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargePercentPerHour" units="%">
-  <obsolete>
-    Deprecated 02/2017 in favor of power benchmarks that have less variability
-    than data from users' machines.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-        The percentage of battery capacity used per hour relative to a full
-    battery. Reported once when the power adaptor is plugged back in after the
-    system is on battery power for more than 30 minutes.  If at any point the
-    system is suspended or all Chrome renderers are closed the measurement is
-    not recorded. Anytime the user unplugs the power adaptor, a new measurement
-    will begin being recorded. Collection of this histogram only starts after 30
-    minutes of uptime at which point the clock starts (assuming the user is on
-    battery power at that point).  The system will need to remain unplugged for
-    at least another 30 minutes in order for any measurement to be recorded.
-    Values are normalized to a percent per hour scale. This measurement is tied
-    tightly to hardware model/OS and is not comparable across different hardware
-    configurations.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRate" units="mW">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS battery discharge rate in mW sampled every 30 seconds while the
-    device runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRate_15" units="%">
-  <obsolete>
-    Deprecated 02/2017 in favor of power benchmarks that have less variability
-    than data from users' machines.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-        The percent of depleted battery capacity relative to a full battery over
-    the first 15 minutes after battery power collection information starts.
-    Collection of this histogram only starts after 30 minutes of uptime at which
-    point the clock starts (assuming the user is on battery power at that
-    point).  The system will need to remain unplugged for at least another 15
-    minutes in order for any measurement to be recorded. Values are normalized
-    to a percent per hour scale. This measurement is tied tightly to hardware
-    model/OS and is not comparable across different hardware configurations.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRate_30" units="%">
-  <obsolete>
-    Deprecated 02/2017 in favor of power benchmarks that have less variability
-    than data from users' machines.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-        The percent of depleted battery capacity relative to a full battery over
-    the first 30 minutes after battery power collection information starts.
-    Collection of this histogram only starts after 30 minutes of uptime at which
-    point the clock starts (assuming the user is on battery power at that
-    point).  The system will need to remain unplugged for at least another 30
-    minutes in order for any measurement to be recorded. Values are normalized
-    to a percent per hour scale. This measurement is tied tightly to hardware
-    model/OS and is not comparable across different hardware configurations.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRate_5" units="%">
-  <obsolete>
-    Deprecated 02/2017 in favor of power benchmarks that have less variability
-    than data from users' machines.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-        The percent of depleted battery capacity relative to a full battery over
-    the first 5 minutes after battery power collection information starts.
-    Collection of this histogram only starts after 30 minutes of uptime at which
-    point the clock starts (assuming the user is on battery power at that
-    point).  The system will need to remain unplugged for at least another 5
-    minutes in order for any measurement to be recorded. Values are normalized
-    to a percent per hour scale. This measurement is tied tightly to hardware
-    model/OS and is not comparable across different hardware configurations.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS battery discharge rate in mW while the system was suspended,
-    sampled at resume. Only reported if the system was on battery power both
-    before suspending and after resuming, if the energy level didn't increase
-    while suspended (which would indicate that an AC adapter was connected), and
-    if the system was suspended for at least a minute.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryInfoSample" enum="BatteryInfoSampleResult">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Counts the number of times we have read the battery status from sysfs and if
-    it gave us sensible values.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtEndOfSessionOnAC" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge,
-    sampled at the end of a user session when the device is on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtEndOfSessionOnBattery" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge,
-    sampled at the end of a user session when the device is on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtStartOfSessionOnAC" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge,
-    sampled at the start of a user session when the device is on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtStartOfSessionOnBattery" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge,
-    sampled at the start of a user session when the device is on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingCharge" units="%">
-  <obsolete>
-    Deprecated as of 03/2012, no longer being generated by powerd.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge
-    sampled when the device runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingWhenChargeStarts" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining battery charge as percent of the maximum battery charge,
-    sampled when charging starts.
-  </summary>
-</histogram>
-
-<histogram name="Power.BatteryTimeToEmpty" units="minutes">
-  <obsolete>
-    Deprecated as of 03/2012, no longer being generated by powerd.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS remaining time to empty battery in minutes sampled when the device
-    runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.BitfixChunks">
-  <owner>dianders@chromium.org</owner>
-  <summary>
-    Chrome OS (Snow RO firmware 2695.90.0 only) number of 8K chunks that were
-    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
-    around 97% of the time and a non-zero value around 3% of the time.
-  </summary>
-</histogram>
-
-<histogram name="Power.BitfixFixes">
-  <owner>dianders@chromium.org</owner>
-  <summary>
-    Chrome OS (Snow RO firmware 2695.90.0 only) number of 4-byte words that were
-    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
-    around 97% of the time and a non-zero value around 3% of the time.  Would be
-    exactly equal to Power.BitfixChunks if there were only one corrupted word in
-    each chunk but is sometimes several times higher.
-  </summary>
-</histogram>
-
-<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust">
-  <obsolete>
-    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
-    Accel_BrightnessUp_F7 user actions instead.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Number of times the user has adjusted brightness up and down while running
-    on battery power.
-  </summary>
-</histogram>
-
-<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust">
-  <obsolete>
-    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
-    Accel_BrightnessUp_F7 user actions instead.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Number of times the user has adjusted brightness up and down while running
-    on AC power.
-  </summary>
-</histogram>
-
-<histogram name="Power.ChargerType" enum="PowerChargerType">
-  <obsolete>
-    Deprecated 11/2014 in issue 427057.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    External power supply type such as MAINS_CHARGER, USB_CHARGER,
-    UNCONFIRMED_SPRING_CHARGER, SAFE_SPRING_CHARGER. A sample is reported each
-    time a charger is connected to the device.
-  </summary>
-</histogram>
-
-<histogram name="Power.ConnectedChargingPorts"
-    enum="PowerConnectedChargingPorts">
-  <owner>bleung@chromium.org</owner>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Connected charging ports on Chrome OS. A sample is reported every time that
-    the power manager polls sysfs (typically every 30 seconds). Ordinals are
-    assigned based on the lexicographical ordering of power supply names from
-    sysfs and have no implied correspondence with ports' physical locations. For
-    example, with ports 'CROS_USB_PD_CHARGER0' and 'CROS_USB_PD_CHARGER1',
-    'first' refers to the former and 'second' to the latter. To determine a
-    port's physical location, see the powerd charging_ports pref in the device's
-    overlay.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeDurationMs" units="ms">
-  <owner>chirantan@chromium.org</owner>
-  <summary>
-    The amount of time a system spent awake every time it woke up in dark
-    resume.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeDurationMs.Other" units="ms">
-  <owner>chirantan@chromium.org</owner>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    The amount of time a system spent awake every time it woke up in dark resume
-    triggered by an unknown or unsupported wake trigger.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Disconnect" units="ms">
-  <owner>chirantan@chromium.org</owner>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    The amount of time a system spent awake every time it woke up in dark resume
-    triggered by a WiFi disconnect.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Pattern" units="ms">
-  <owner>chirantan@chromium.org</owner>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    The amount of time a system spent awake every time it woke up in dark resume
-    triggered by a WiFi packet pattern match.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeDurationMs.WiFi.SSID" units="ms">
-  <owner>chirantan@chromium.org</owner>
-  <owner>samueltan@chromium.org</owner>
-  <summary>
-    The amount of time a system spent awake every time it woke up in dark resume
-    triggered by a net detect SSID match.
-  </summary>
-</histogram>
-
-<histogram name="Power.DarkResumeWakeupsPerHour">
-  <owner>chirantan@chromium.org</owner>
-  <summary>
-    The number of times a system woke up in dark resume in an hour.  Note that
-    this value is scaled up or down to an hour based on the amount of time the
-    system spent in suspend.  So if the system suspended for 20 minutes and woke
-    up 3 times, it would report a value of 9.
-  </summary>
-</histogram>
-
-<histogram name="Power.ExternalBrightnessReadResult"
-    enum="ExternalDisplayReceiveResult">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The result of attempting to read an external display's brightness on Chrome
-    OS. A read attempt is made after successfully requesting the brightness (see
-    Power.ExternalBrightnessRequestResult).
-  </summary>
-</histogram>
-
-<histogram name="Power.ExternalBrightnessRequestResult"
-    enum="ExternalDisplaySendResult">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The result of requesting an external display's brightness on Chrome OS. A
-    request is sent when the user presses a brightness key and the current
-    brightness is not already cached. A successful request is followed shortly
-    thereafter by a read attempt (see Power.ExternalBrightnessReadResult).
-  </summary>
-</histogram>
-
-<histogram name="Power.ExternalBrightnessWriteResult"
-    enum="ExternalDisplaySendResult">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The result of attempting to change an external display's brightness on
-    Chrome OS. A request is sent when the user presses a brightness key and the
-    current brightness is either already cached or successfully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Power.ExternalDisplayOpenResult"
-    enum="ExternalDisplayOpenResult">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The result of attempting to open an I2C device to control an external
-    display's brightness on Chrome OS. An attempt is made when a display is
-    connected to a device that lacks an internal display.
-  </summary>
-</histogram>
-
-<histogram name="Power.FirmwareResumeTimeOnAC" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the firmware took to resume the Chrome OS device from
-    suspend-to-RAM state when running on AC at pre-suspend time.
-  </summary>
-</histogram>
-
-<histogram name="Power.FirmwareResumeTimeOnBattery" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the firmware took to resume the Chrome OS device from
-    suspend-to-RAM state when running on battery at pre-suspend time.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterDimOnAC" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time since the screen dimmed sampled when the user
-    becomes active again if the device runs on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterDimOnBattery" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time since the screen dimmed sampled when the user
-    becomes active again if the device runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterScreenOffOnAC" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time since the screen turned off sampled when the user
-    becomes active again if the device runs on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterScreenOffOnBattery" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time since the screen turned off sampled when the user
-    becomes active again if the device runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeOnAC" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time sampled when the user becomes active again if the
-    device runs on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeOnBattery" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    Chrome OS user idle time sampled when the user becomes active again if the
-    device runs on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.KernelResumeTimeOnAC" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the kernel took to resume the Chrome OS device from
-    suspend-to-RAM state when running on AC at pre-suspend time.
-  </summary>
-</histogram>
-
-<histogram name="Power.KernelResumeTimeOnBattery" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the kernel took to resume the Chrome OS device from
-    suspend-to-RAM state when running on battery at pre-suspend time.
-  </summary>
-</histogram>
-
-<histogram name="Power.KernelSuspendTimeOnAC" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the kernel took to suspend-to-RAM the Chrome OS device when
-    running on AC.
-  </summary>
-</histogram>
-
-<histogram name="Power.KernelSuspendTimeOnBattery" units="ms">
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The time that the kernel took to suspend-to-RAM the Chrome OS device when
-    running on battery.
-  </summary>
-</histogram>
-
-<histogram name="Power.KeyboardBacklightLevel" units="%">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The level of the keyboard backlight as a percentage. Sampled every 30
-    seconds.
-  </summary>
-</histogram>
-
-<histogram name="Power.LengthOfSession" units="seconds">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The length of time, in seconds, that a user spent in a single session.
-    Values for this metric are clamped to 12 hours, so the last bucket should be
-    considered to be including all metrics above 12 hours.
-  </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourIosOnActive">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average power consumption, measured in milli-units per hour, when sync
-    invalidator listens to on_application_active events. Values for this metric
-    are per session, i.e. from battery level at application entering foreground
-    to returning to background, and normalized to an hourly average consumption.
-    This is an iOS only measurement. Due to how iOS reports battery levels, it
-    is likely to see many readings of 0.
-  </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourOthers">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average power consumption, measured in milli-units per hour, for other
-    sync invalidator methods. Values for this metric are per session, i.e. from
-    battery level at application entering foreground to returning to background,
-    and normalized to an hourly average consumption. This is an iOS only
-    measurement. Due to how iOS reports battery levels, it is likely to see many
-    readings of 0.
-  </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourP2P">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average power consumption, measured in milli-units per hour, when sync
-    invalidator uses peer-to-peer notifications. Values for this metric are per
-    session, i.e. from battery level at application entering foreground to
-    returning to background, and normalized to an hourly average consumption.
-    This is an iOS only measurement. Due to how iOS reports battery levels, it
-    is likely to see many readings of 0.
-  </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourServer">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The average power consumption, measured in milli-units per hour, when sync
-    invalidator uses server-based non-blocking invalidator. Values for this
-    metric are per session, i.e. from battery level at application entering
-    foreground to returning to background, and normalized to an hourly average
-    consumption. This is an iOS only measurement. Due to how iOS reports battery
-    levels, it is likely to see many readings of 0.
-  </summary>
-</histogram>
-
-<histogram name="Power.NumberOfAlsAdjustmentsPerSession">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The number of times that the Automatic Light Sensor (ALS) adjusted the
-    brightness during a session.  Values for this metric are clamped to 10k
-    count, so the last bucket should be considered to be including all metrics
-    above 10k.
-  </summary>
-</histogram>
-
-<histogram name="Power.NumberOfSessionsPerCharge">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The number of user sessions that occured since the last time that the device
-    was charged. Values for this metric are clamped at 10k, so the last bucket
-    should be considered to include all metrics about 10k.
-  </summary>
-</histogram>
-
-<histogram name="Power.PowerButtonAcknowledgmentDelay" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The amount of time between the user pressing the power button and Chrome
-    acknowledging the button-down event on Chrome OS. Values for this metric are
-    capped to two seconds.
-  </summary>
-</histogram>
-
-<histogram name="Power.PowerButtonDownTime" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The amount of time between the user pressing the power button and releasing
-    it on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Power.PowerSupplyMaxPower" units="W">
-  <owner>bleung@chromium.org</owner>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The maximum power supported by the connected power supply on Chrome OS. A
-    sample is reported every time that the power manager polls sysfs (typically
-    every 30 seconds) and sees a connected supply.
-  </summary>
-</histogram>
-
-<histogram name="Power.PowerSupplyMaxVoltage" units="V">
-  <owner>bleung@chromium.org</owner>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The maximum voltage supported by the connected power supply on Chrome OS. A
-    sample is reported every time that the power manager polls sysfs (typically
-    every 30 seconds) and sees a connected supply.
-  </summary>
-</histogram>
-
-<histogram name="Power.PowerSupplyType" enum="PowerSupplyType">
-  <owner>bleung@chromium.org</owner>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The type of the connected power supply on Chrome OS. A sample is reported
-    every time that the power manager polls sysfs (typically every 30 seconds)
-    and sees a connected supply.
-  </summary>
-</histogram>
-
-<histogram name="Power.RetrySuspendCount">
-  <obsolete>
-    Deprecated Feb 2014 by Power.SuspendAttemptsBeforeCancel and
-    Power.SuspendAttemptsBeforeSuccess.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The number of times Chrome OS retried suspend due to previous failure.
-  </summary>
-</histogram>
-
-<histogram name="Power.ShutdownReason" enum="ShutdownReason">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The reason for the Chrome OS power manager shutting down or rebooting the
-    system.
-  </summary>
-</histogram>
-
-<histogram name="Power.SuspendAttempt" enum="SuspendAttempt">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The number of suspend attempts on Chrome OS. Samples are reported before
-    each attempt, so this histogram may include cases where the system crashed
-    instead of suspending.
-  </summary>
-</histogram>
-
-<histogram name="Power.SuspendAttemptsBeforeCancel">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The number of suspend attempts performed for a single suspend request (e.g.
-    triggered by the lid being closed) that was eventually canceled on Chrome
-    OS. This also includes requests that were canceled due to the system
-    eventually shutting down due to repeated suspend failures.
-  </summary>
-</histogram>
-
-<histogram name="Power.SuspendAttemptsBeforeSuccess">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The number of suspend attempts performed for a single suspend request (e.g.
-    triggered by the lid being closed) that eventually succeeded on Chrome OS.
-    This includes the successful attempt.
-  </summary>
-</histogram>
-
-<histogram name="Power.SuspendResult" enum="SuspendResult">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    The results of suspend attempts on Chrome OS. Samples are reported after
-    each attempt.
-  </summary>
-</histogram>
-
-<histogram name="Power.SuspendStatus" enum="SuspendStatus">
-  <obsolete>
-    Deprecated Jan 2014 by Power.SuspendAttempt and Power.SuspendResult.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>Chrome OS suspend status.</summary>
-</histogram>
-
-<histogram name="Power.ThermalAbortedFanTurnOn" units="%">
-  <obsolete>
-    No longer sent.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The percentage of aborted fan attempts out of total fan attempts per
-    session, where an abort is due to hysteresis.  This value is computed from
-    boot and sent when powerd starts and then every 15 minutes afterwards.
-  </summary>
-</histogram>
-
-<histogram name="Power.ThermalMultipleFanTurnOn" units="%">
-  <obsolete>
-    No longer sent.
-  </obsolete>
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The percentage of fan trip point passes that are more than one trip point.
-    This value is computed from boot and sent when powerd starts and then every
-    15 minutes afterwards.
-  </summary>
-</histogram>
-
-<histogram name="Power.TimeInSuspendAtBoot" units="minutes">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot
-    (i.e., the device most likely ran out of battery while in suspend).
-  </summary>
-</histogram>
-
-<histogram name="Power.TimeInSuspendAtResume" units="minutes">
-  <owner>derat@chromium.org</owner>
-  <owner>snanda@chromium.org</owner>
-  <summary>
-    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume.
-  </summary>
-</histogram>
-
-<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnAC">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The number of times that the user adjusted the brightness during a session
-    when on AC. Values for this metric are clamped to 10k count, so the last
-    bucket should be considered to be including all metrics above 10k.
-  </summary>
-</histogram>
-
-<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnBattery">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The number of times that the user adjusted the brightness during a session
-    when on battery. Values for this metric are clamped to 10k count, so the
-    last bucket should be considered to be including all metrics above 10k.
-  </summary>
-</histogram>
-
-<histogram name="Precache.BatteryPercentage.Start" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    The battery level in percentage when the precache task was started.
-  </summary>
-</histogram>
-
-<histogram name="Precache.BatteryPercentageDiff.End" units="%">
-  <owner>bengr@chromium.org</owner>
-  <owner>rajendrant@chromium.org</owner>
-  <summary>
-    Measures the difference between the battery level percentage when the
-    precache task is started and ended. This value indicates the possible
-    battery usage due to the precache task. Logged when the precache task ends,
-    which could be due to successful completion, time-out, error conditions, max
-    download limit exceeded, etc.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheSize.AllEntries" units="KB">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The size in kilobytes occupied by all the entries existing in the cache at
-    the time of the last precache.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Like HttpCache.Pattern but only for requests not made during precaching.
-    Logged per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheStatus.NonPrefetch.FromPrecache"
-    enum="HttpCachePattern">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Like Precache.CacheStatus.NonPrefetch but only for requests which having a
-    matching URL in the precache. Measures the amount of precache misses due to
-    expiration or eviction. Logged per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheStatus.NonPrefetch.NonTopHosts"
-    enum="HttpCachePattern">
-  <owner>twifkak@chromium.org</owner>
-  <owner>jamartin@chromium.org</owner>
-  <summary>
-    Like Precache.CacheStatus.NonPrefetch, but only for requests with a referer
-    not in the user's top visited hosts. See History.TopHostsVisitsByRank for
-    details on the top hosts computation.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheStatus.NonPrefetch.TopHosts"
-    enum="HttpCachePattern">
-  <owner>twifkak@chromium.org</owner>
-  <owner>jamartin@chromium.org</owner>
-  <summary>
-    Like Precache.CacheStatus.NonPrefetch, but only for requests with a referer
-    in the user's top visited hosts. See History.TopHostsVisitsByRank for
-    details on the top hosts computation.
-  </summary>
-</histogram>
-
-<histogram name="Precache.CacheStatus.Prefetch" enum="HttpCachePattern">
-  <owner>jamartin@chromium.org</owner>
-  <owner>twifkak@chromium.org</owner>
-  <summary>
-    Like HttpCache.Pattern but only for requests made during precaching. Logged
-    per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.DownloadedNonPrecache" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of bytes that were downloaded over the network for HTTP/HTTPS
-    fetches that were not motivated by precaching. Logged per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of bytes that were downloaded because of precaching. Logged
-    per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Events" enum="PrecacheEvents">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Enumerates the various failure reasons and events of interest for
-    precaching. The events are persisted when the native library is not loaded,
-    and recorded when the library loads next time.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.FailureReasons">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    A bit vector of reasons why the precache fetch failed to start. Bit values
-    are documented in the FailureReason Java enum.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.MinWeight" units="thousandths">
-  <owner>twifkak@chromium.org</owner>
-  <summary>
-    The minimum resource weight that is fetched in a given precache run.
-    Reported if the precache completed successfully or was canceled due to the
-    byte cap, but not if it was cancelled due to an ill-formed manifest or
-    exceeding the time limit. Reported only if global_ranking is true.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.PercentCompleted" units="%">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The percent of manifests for which all resources have been downloaded.
-    Logged per prefetch run.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.ResponseBytes" units="bytes">
-  <obsolete>
-    Deprecated July 29 2015.
-  </obsolete>
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of response bytes received from all prefetch requests,
-    including config, manifests, and resources. Logged per prefetch run.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.ResponseBytes.Daily" units="bytes">
-  <owner>twifkak@chromium.org</owner>
-  <summary>
-    The total number of response bytes in 24 hours received over the network
-    from all prefetch requests, including config, manifests, and resources.
-    Logged during the next precache run after the 24 hours has elapsed.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.ResponseBytes.Network" units="bytes">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of response bytes received over the network from all
-    prefetch requests, including config, manifests, and resources. Logged per
-    prefetch run.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.ResponseBytes.NetworkWasted" units="bytes">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of response bytes received over the network for a wasted
-    resource precache fetch. Logged when a partially downloaded resource
-    precache fetch gets cancelled due to per-resource size limit or max precache
-    size limit.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.ResponseBytes.Total" units="bytes">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total number of response bytes contained in all prefetch requests,
-    including config, manifests, and resources. Logged per prefetch run.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Fetch.TimeToComplete" units="ms">
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The time, in milliseconds, to complete a prefetch run. Only applies to
-    non-cancelled runs (those for which PercentCompleted is 100).
-  </summary>
-</histogram>
-
-<histogram name="Precache.Freshness.Prefetch" units="seconds">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The freshness lifetimes of the resources that were precached from the moment
-    they were fetched or revalidated as described in RFC 2616 13.2.4. Logged per
-    precache request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Latency.NonPrefetch" units="ms">
-  <obsolete>
-    Deprecated March 7 2017.
-  </obsolete>
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The latency for requests that were not made during precaching. Logged
-    per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Latency.NonPrefetch.NonTopHosts" units="ms">
-  <obsolete>
-    Deprecated March 7 2017.
-  </obsolete>
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Like Precache.Latency.NonPrefetch, but limited to requests with a referer
-    not in the user's top visited hosts. See History.TopHostsVisitsByRank for
-    details on the top hosts computation.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Latency.NonPrefetch.TopHosts" units="ms">
-  <obsolete>
-    Deprecated March 7 2017.
-  </obsolete>
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    Like Precache.Latency.NonPrefetch, but limited to requests with a referer in
-    the user's top visited hosts. See History.TopHostsVisitsByRank for details
-    on the top hosts computation.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Latency.Prefetch" units="ms">
-  <obsolete>
-    Deprecated March 7 2017.
-  </obsolete>
-  <owner>twifkak@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The latency for requests that were made during precaching. Logged
-    per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.PeriodicTaskInterval" units="minutes">
-  <owner>rajendrant@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The time between successive precache periodic GCM task invocations. When
-    precache task is started, the time interval from previous task invocation is
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Saved" units="bytes">
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of bytes during user browsing that were served from the cache,
-    but would have been downloaded over a network if precaching was disabled.
-    Logged per-request.
-  </summary>
-</histogram>
-
-<histogram name="Precache.Saved.Freshness" units="seconds">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The freshness lifetimes (RFC 2616 13.2.4) of the resources that were
-    precached and later used (and thus served from the cache). This is computed
-    at serving time and thus possibly different from the precached value if the
-    cache entry was revalidated. Logged per-request but only once per URL and
-    precaching cycle (as Precache.Saved).
-  </summary>
-</histogram>
-
-<histogram name="Precache.TimeSinceLastPrecache" units="seconds">
-  <owner>jamartin@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The time between the the beginning of the last precache session and each of
-    the URL fetches made by the user ever since. Logged per-request.
-  </summary>
-</histogram>
-
-<histogram name="PrefService.CreateProfilePrefsTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>The amount of time that elapsed during CreateProfilePrefs.</summary>
-</histogram>
-
-<histogram name="PrefService.PersistentLogRecallProtobufs"
-    enum="PersistedLogsLogReadStatus">
-  <owner>holte@chromium.org</owner>
-  <summary>The status when loading PersistedLogs from Prefs.</summary>
-</histogram>
-
-<histogram name="PreloadScanner.Counts" units="preloads">
-  <obsolete>
-    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>The number of preloads generated by the preload scanner.</summary>
-</histogram>
-
-<histogram name="PreloadScanner.Counts.Miss" units="preloads">
-  <obsolete>
-    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2.Miss
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of unused preloads generated by the preload scanner. Note that
-    some link rel preloads are not referenced until after this point, so they
-    will be falsely marked as preload misses. These will show up in the Raw
-    bucket.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.Counts2" units="preloads">
-  <owner>csharrison@chromium.org</owner>
-  <summary>The number of preloads generated by the preload scanner.</summary>
-</histogram>
-
-<histogram name="PreloadScanner.Counts2.Miss" units="preloads">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of unused preloads generated by the preload scanner. Note that
-    some link rel preloads are not referenced until after this point, so they
-    will be falsely marked as preload misses.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Failure" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Time spent executing a script tag in the blink preload scanner, for the
-    purpose of preloading scripts that will be fetched via a call to
-    document.write. The execution failed to generate a preload request.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Success" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Time spent executing a script tag in the blink preload scanner, for the
-    purpose of preloading scripts that will be fetched via a call to
-    document.write. The execution successfully resulted in a preload request.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.DocumentWrite.GatedEvaluation"
-    enum="DocumentWriteGatedEvaluation">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The reason a particular inline script was blocked from evaluation.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.DocumentWrite.InitializationTime" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Time spent initializing a new V8 context for the purpose of evaluating it
-    and preloading document.written strings.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.DocumentWrite.ScriptLength" units="characters">
-  <obsolete>
-    No longer needed
-  </obsolete>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The length of the inline script that is being considered for document write
-    evaluation.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.ExternalCSS.PreloadCount" units="preloads">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of preloads generated by scanning an external preloaded CSS
-    resource. As of 4/25/2016 this only includes @import declarations.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.ExternalCSS.ScanTime" units="microseconds">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Microseconds it took to scan the first chunk of external CSS for preloads.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.ReferenceTime" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The time between preload discovery and when the resource is actually
-    referenced. This is implemented by marking when a preload is discovered by
-    the scanner, and when it has its first ResourceClient added to it. Note that
-    for link rel preloads, this tracks the time from scanner discory to DOM
-    discovery of the link declaration, not the actual resource.
-  </summary>
-</histogram>
-
-<histogram name="PreloadScanner.TTFB" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The time between preload discovery and when the first bytes of the response
-    data arrive.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.AbandonTimeUntilUsed" units="ms">
-  <owner>davidben@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a prerendered page is abandoned to when it is first used due
-    to user navigation. If the page is swapped before begin abandoned, a zero is
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.CookieSendType" enum="PrerenderCookieSendType">
-  <obsolete>
-    Deprecated March 13 2015.
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Enumeration of what types of cookies were sent for a prerender.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.CookieStatus" enum="PrerenderCookieStatus">
-  <obsolete>
-    Deprecated March 13 2015.
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>Enumeration of what cookie actions a prerender caused.</summary>
-</histogram>
-
-<histogram name="Prerender.Event" enum="PrerenderEvent">
-  <obsolete>
-    Deprecated Dec 12 2014.
-  </obsolete>
-  <summary>
-    Enumeration of what events related to prerendering have occurred.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.Events" enum="PrerenderHoverEvent">
-  <obsolete>
-    deprecated May 10 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Hover Event counts for prerendering.</summary>
-</histogram>
-
-<histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Final status for prerender pages - either success, or why it was canceled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.FinalStatusMatchComplete"
-    enum="PrerenderFinalStatus">
-  <obsolete>
-    deprecated 2016-05-12
-  </obsolete>
-  <summary>
-    Final status for prerender pages - either success, or why it was canceled.
-    This is for the MatchComplete set of pages (including some pages that were
-    not actually prerendered), to match the control group.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.FractionPixelsFinalAtSwapin">
-  <obsolete>
-    Deprecated Jan 14 2014.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For prerenders that are swapped in, the percentage of pixels that is already
-    final at swap-in time compared to when the spinner stops.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.HoverStats_TimeUntilClicked" units="ms">
-  <obsolete>
-    deprecated May 10 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration that a user hovers a link before clicking on it.
-
-    This is recorded for all pages loaded in a session.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="ms">
-  <obsolete>
-    deprecated May 10 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration that the mouse pointer hovers on a link before the mouse pointer
-    moves off of it.
-
-    This is recorded for all pages loaded in a session.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorEvent"
-    enum="PrerenderLocalPredictorEvents">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Enumeration of what events related to the local predictor have occurred
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorLoggedInLookupTime" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time to perform the LoggedIn Lookup for the local predictor. This operation
-    checks whether a user is likely logged into a page that we would like to
-    prerender.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorPrefetchMatchPLT" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The PrerenderLocalPredictor uses local browsing history and the prerender
-    service to predict pages likely visited soon. Some of these URLs are
-    prefetched. When such prefetched likely next pages are visited, this
-    histogram records the PLT for such pages. In particular, this also happens
-    if prefetch is actually disabled, allowing (by pivoting on whether or not
-    prefetch is enabled) to compare the effect of prefetch on PLT.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorServiceLookupTime" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time to perform the Service Lookup for the local predictor. This operation
-    queries a Google service to obtain pages to prerender, as well as whether
-    prerender candidate pages are likely safe for prerendering.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a prerendered page is started to when it is first used due to
-    user navigation. If the page is never used, it is not included in this
-    histogram.  This only refers to prerenders based on the local predictor.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorURLLookupTime" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time to perform the URL Lookup for the local predictor. This operation
-    retrieves from the user's local browsing history the URLs corresponding to
-    URLIDs.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitCoreTransition" enum="CorePageTransition">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The transition type for each new visit as recorded in the local visits
-    database.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitDatabaseSize">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the local visits database (number of entries).</summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Enumeration of what events related to local visits have occurred
-  </summary>
-</histogram>
-
-<histogram name="Prerender.ModPagespeedHeader">
-  <obsolete>
-    Deprecated as of 10/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Previous version of the Prerender.PagespeedHeader.* histograms.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytes.TotalForProfile" units="bytes">
-  <obsolete>
-    Deprecated May 13th 2014, use Prerender.NetworkBytesTotalForProfile instead.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
-    deletion.  Includes prerender bytes.  Bytes are only counted when
-    prerendering is enabled and not in a control group.  The sum of the
-    distribution for a single user represents all of that user's network
-    transfers for resource for that time period while prerendering was enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytes.Used" units="bytes">
-  <obsolete>
-    Deprecated May 13th 2014, use Prerender.NetworkBytes.Used instead.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
-    used).
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytes.Wasted" units="bytes">
-  <obsolete>
-    Deprecated May 13th 2014, use Prerender.NetworkBytes.Wasted instead.
-  </obsolete>
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead) for a prerender that was not used.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytesTotalForProfile" units="bytes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
-    deletion.  Includes prerender bytes.  Bytes are only counted when
-    prerendering is enabled and not in a control group.  The sum of the
-    distribution for a single user represents all of that user's network
-    transfers for resource for that time period while prerendering was enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytesUsed" units="bytes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
-    used).
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NetworkBytesWasted" units="bytes">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Number of bytes transferred on the network for URLRequests (not including
-    HTTP/TLS/TCP/IP overhead) for a prerender that was not used.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NoStatePrefetchAge" units="ms">
-  <obsolete>
-    Deprecated December 28, 2016, use Prerender.PrefetchAge instead.
-  </obsolete>
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>Time between the prefetch and the actual load of the page.</summary>
-</histogram>
-
-<histogram name="Prerender.NoStatePrefetchMainResourceRedirects"
-    units="redirects">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Length of the redirect chain for main resources loaded by NoStatePrefetch.
-    Recorded when the final response in the chain is received.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NoStatePrefetchResponseTypes"
-    enum="NoStatePrefetchResponseType">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Type of responses received by NoStatePrefetch, distinguishing cacheable
-    resources from no-store resources, and main resources from sub-resources.
-    Recorded when a response is received, including on each redirect.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.NoStatePrefetchSubResourceRedirects"
-    units="redirects">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Length of the redirect chain for sub-resources loaded by NoStatePrefetch.
-    Recorded when the final response in the chain is received.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxNavigationsCouldPrerender">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    A boolean that indicates whether the Omnibox navigation being committed
-    could have been prerendered by the Omnibox Prerender system. This provides
-    an upper bound for Prerender.OmniboxNavigationsUsedPrerenderCount and allows
-    the potential for Omnibox Prerendering coverage to be understood. If Omnibox
-    Prerendering is disabled, this histogram will register a 'false' entry. The
-    total count is the equivalent of the deprecated
-    NetworkActionPredictor.NavigationCount histogram.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The number of navigations that use a prerender initiated from the Omnibox.
-    The count is incremented when the Prerendered tab is swapped in if the
-    Prerender was initiated by the Omnibox, which obviously requires
-    Prerendering from the Omnibox to be enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxPrerenderCount">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The number of prerenders initiated from the Omnibox. This is incremented
-    when the NetworkActionPredictor suggests Prerendering as an optimal strategy
-    given the text the user has entered and the Autocomplete suggestion
-    currently selected. It is only incremented if Prerendering from the Omnibox
-    is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PagespeedHeader.ServerCounts"
-    enum="PagespeedHeaderServerType">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The number of responses received bucketed into the range [0,4]: bucket 0 is
-    the total number of responses received; bucket 1 is the number of responses
-    received with an X-Mod-Pagespeed header [indicating a mod_pagespeed server];
-    bucket 2 is the number of responses received with an X-Page-Speed header and
-    a header value in the X-Mod-Pagespeed format (a.b.c.d-e) [indicating an
-    ngx_pagespeed server]; bucket 3 is the number of responses received with an
-    X-Page-Speed header and a header value in the PageSpeed Service format
-    (a_b_c) [indicating a PSS server]; and bucket 4 is the number of responses
-    received with an X-Page-Speed header and a header value in neither of the
-    preceding formats [indicating some other server; IISpeed is the only known
-    one at this stage].
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PagespeedHeader.VersionCounts"
-    enum="PagespeedVersion">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The number of responses received that either have an X-Mod-Pagespeed header
-    or have an X-Page-Speed header with a value in the X-Mod-Pagespeed format
-    (a.b.c.d-e), bucketed into the range [1,99]: bucket 1 is for header values
-    that aren't in the a.b.c.d-e format, the remaining buckets are an encoding
-    of the value: 2 + 2 * (max(c, 10) - 10) + (d &gt; 1 ? 1 : 0). The rationale
-    is that 'c' is incremented with each new release and 'd' is initially 0 but
-    is incremented for each patch to a release.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Types of pages rendered.</summary>
-</histogram>
-
-<histogram name="Prerender.PageVisitedStatus" enum="Boolean">
-  <obsolete>
-    deprecated March 30, 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Indicates whether the user has ever visited (in the past) a URL for which a
-    prerender is launched.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_Control" units="ms">
-  <obsolete>
-    Deprecated 03/24/11.  Replaced by
-    Prerender.PerceivedPLT_ContentPrefetchPrerenderControl.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This particular histogram is for all page loads for users who do not have
-    prerendering enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchControl"
-    units="ms">
-  <obsolete>
-    Deprecated 03/24/11.   Replaced by
-    Prerender.PerceivedPLTMatched_ContentPrefetchPrerenderControl.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This particular histogram is only for pages that would have been prerendered
-    if the user had prerender enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchTreatment"
-    units="ms">
-  <obsolete>
-    Deprecated 03/24/11.   Replaced by
-    Prerender.PerceivedPLTMatched_ContentPrefetchPrerender.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This particular histogram is for all prerendered page loads for users who
-    have prerender enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_Treatment" units="ms">
-  <obsolete>
-    Deprecated 03/24/11.   Replaced by
-    Prerender.PerceivedPLT_ContentPrefetchPrerender.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This particular histogram is for all page loads for users who have
-    prerendering enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_WindowControl" units="ms">
-  <obsolete>
-    Deprecated 03/24/11.   Replaced by
-    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerenderControl.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This particular histogram is for all page loads within 30 seconds after a
-    prefetch tag is seen for users who do not have prerendering enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment" units="ms">
-  <obsolete>
-    Deprecated 03/24/11.   Replaced by
-    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerender.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load pre navigation.
-
-    This particular histogram is for all page loads within 30 seconds after a
-    prefetch tag is seen for users who have prerendering enabled.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLT" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded for all pages loaded in a session.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded for the first page load completing immediately after a
-    prerender.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
-    There are two types: Any, and Non-overlapping.  The latter only applies to
-    page loads initiated after the prerender.  This variable records cases where
-    only Any triggered.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
-    There are two types: Any, and Non-overlapping.  The latter only applies to
-    page loads initiated after the prerender.  This variable records cases where
-    both triggered.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded for the first page load completing immediately after a
-    prerender, but which has also started after the prerender has been
-    initiated.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"
-    units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
-    There are two types: Any, and Non-overlapping.  The latter only applies to
-    page loads initiated after the prerender.  This variable records cases where
-    only Non-overlapping triggered.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTMatched" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded only for prerendered pages, or for pages which would have
-    been prerendered in the control case.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTMatchedComplete" units="ms">
-  <obsolete>
-    Deprecated August 2016
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded only for prerendered pages, or for pages which would have
-    been prerendered in the control case.
-
-    In MatchedComplete, the prerender group also contains cancelled prerenders,
-    so as to produce a perfect match of page views attributed this group in the
-    prerender group with those attributed to this group in the control group.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTWindowed" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded for all page loads which happen within 30 seconds after a
-    prefetch tag is observed.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a user navigates to a page to when it loads. Since the pages
-    may start loading before the user navigates to it, this does not include any
-    portion of load prior to navigation.
-
-    This is recorded for all page loads which happen within 30 seconds after a
-    prefetch tag is observed and which do not correspond to a prerender tag.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedTTFCPRecorded" enum="BooleanRecorded">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Whether the perceived Time to First Contentful Paint (TTFCP) was recorded
-    successfully for a prerendered page. Since a prerendered page will start
-    loading before a user navigates to it, the perceived TTFCP does not include
-    an time prior to the user navigation. If true, there is an associated
-    PrefetchTTFCP that records the TTFCP from the swapped-in navigation start.
-    If false, no PrefetchTTFCP was recorded.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PercentLoadDoneAtSwapin">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For prerenders that are swapped in, the percentage of the time from load
-    start until the onload event fires that has elapsed at the time of the
-    swapin.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PeriodicCleanupDeleteContentsTime" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    How long the cleanup portion of PrerenderManager::PeriodicCleanup takes, to
-    measure jank.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PeriodicCleanupResourceCheckTime" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    How long the resource check portion of PrerenderManager::PeriodicCleanup
-    takes, to measure jank.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PrefetchAge" units="ms">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time between a prefetch or effective prefetch and the actual load of the
-    page. For NoState prefetch, this is the time of the actual prefetch. For
-    prerendering, it is the time that prerender began. For control groups in
-    NoState prefetch experiments, it is the time that prefetch would have
-    occurred.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PrefetchTTFCP" units="ms">
-  <owner>droger@chromium.org</owner>
-  <owner>mattcary@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time to first contentful paint (TTFCP) for navigations related to prefetch
-    (including prerender, no-state prefetch, and associated experiments). This
-    measures user-visible TTFCP. For no-state prefetch this is standard
-    navigation-to-FCP; for prerender this is the time from navigation start when
-    the prerender is swapped in to FCP.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PrerenderCountOf3Max">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    After launching a prerender, how many simultanious prerenders are recorded
-    as running, out of a maximum of three.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For prerenders that finish loading before they are ever swapped in, their
-    page load time until the onload event fires.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.PrerendersPerSessionCount">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The number of sessions that have at least X successful prerenders.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RelTypesLinkAdded" enum="PrerenderRelTypes">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For each prerender link added to a document, records the rel types present
-    on the link element.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RelTypesLinkStarted" enum="PrerenderRelTypes">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For each prerender in a document which starts prerendering, records the rel
-    types present on the link element.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RendererIdleTime" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This is the time from when a prerendered page finishes loading to when it is
-    displayed, as measured by the renderer process. When a page is displayed
-    before it finishes loading, no value is recorded in this histogram.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RendererPerceivedPLT" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Perceived load time of a page, as measured by the renderer process. For
-    non-prerendered pages, this is just BeginToFinish. For displayed prerendered
-    pages, this is the time from when the prerendered page is moved into a
-    TabContents until finish. &quot;Finish&quot; == after onload() and all
-    resources are loaded. Note that this is 0 if the loading finishes before the
-    page is moved into a TabContents.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RendererPerceivedPLTMatched" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Perceived load time of a prerendered page that is displayed, as measured by
-    the renderer process. This is the time from when the prerendered page is
-    moved into a TabContents until finish. &quot;Finish&quot; == after onload()
-    and all resources are loaded. Note that this is 0 if the loading finishes
-    before the page is moved into a TabContents.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.RendererTimeUntilDisplay" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time elapsed between when the prerendering of a page starts and when the
-    page is displayed, as measured by the renderer process. Prerendered pages
-    discarded without being displayed are excluded from this count.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.SchemeCancelReason"
-    enum="PrerenderSchemeCancelReason">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The detailed reason why a prerender is canceled with
-    FINAL_STATUS_UNSUPPORTED_SCHEME
-  </summary>
-</histogram>
-
-<histogram name="Prerender.Sessions" enum="PrerenderMode">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Enumeration of how prerender was used per session.</summary>
-</histogram>
-
-<histogram name="Prerender.SessionStorageNamespaceMergeTime" units="ms">
-  <obsolete>
-    Deprecated Dec 12 2014.
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>Time to perform the session storage namespace merge.</summary>
-</histogram>
-
-<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For simulated local browsing prerendering, the baseline PLT of pages without
-    any prerendering for pages that would be prerendered.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="ms">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    For simulated local browsing prerendering, the estimated PLT of pages with
-    prerendering enabled for pages that would be prerendered.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TabContentsDeleterSuppressedDialog"
-    enum="BooleanSuppressed">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    A boolean that indicates how often we suppress a dialog from a tab when
-    swapping it with a prerender.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TabContentsDeleterTimeout"
-    enum="BooleanCloseTimeout">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    A boolean that indicates how often we fail to delete an old prerendered tab
-    before the timeout.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Enumeration of what events related to the TabHelper class have occurred.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TimeBetweenPrerenderRequests" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>Time between subsequent prerender requests.</summary>
-</histogram>
-
-<histogram name="Prerender.TimeSinceLastRecentVisit" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    The time elapsed between the most recent visit to a URL and when an
-    attempted prerender of the same URL is cancelled with
-    FINAL_STATUS_RECENTLY_VISITED.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TimeToClick" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Duration that a user hovers a link before clicking on it.</summary>
-</histogram>
-
-<histogram name="Prerender.TimeUntilUsed" units="ms">
-  <obsolete>
-    deprecated Nov 16 2012.  See Prerender.TimeUntilUsed2, which has a larger
-    range.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time from when a prerendered page is started to when it is first used due to
-    user navigation. If the page is never used, it is not included in this
-    histogram.
-  </summary>
-</histogram>
-
-<histogram name="Prerender.TimeUntilUsed2" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    Time from when a prerendered page is started to when it is first used due to
-    user navigation. If the page is never used, it is not included in this
-    histogram.
-  </summary>
-</histogram>
-
-<histogram name="Previews.ContentLength" units="KB">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The actual data used for a page load using a preview optimization.
-  </summary>
-</histogram>
-
-<histogram name="Previews.ContextMenuAction.LoFi"
-    enum="PreviewsContextMenuActionLoFi">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    User interactions with the Lo-Fi context menu options. These include:
-
-    Displays and clicks on the &quot;Load image&quot; and &quot;Load
-    images&quot; context menu options. Count of pages where the user has clicked
-    &quot;Load image&quot; at least once.
-  </summary>
-</histogram>
-
-<histogram name="Previews.DataInflation" units="KB">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The estimated amount that the content was inflated for a page load using a
-    previews optimization. Recorded when a page load using a previews
-    optimization inflates the data used.
-  </summary>
-</histogram>
-
-<histogram name="Previews.DataInflationPercent" units="%">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The estimated percent of data used that a page load would have otherwise
-    cost for a page load using a previews optimization. Recorded when a page
-    load using a previews optimization inflates the data used.
-  </summary>
-</histogram>
-
-<histogram name="Previews.DataSavings" units="KB">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The estimated data savings for a page load using a previews optimization.
-    Recorded when a page load using a previews optimization reduces the data
-    used.
-  </summary>
-</histogram>
-
-<histogram name="Previews.DataSavingsPercent" units="%">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The estimated percent of data savings for a page load using a previews
-    optimization. Recorded when a page load using a previews optimization
-    reduces the data used.
-  </summary>
-</histogram>
-
-<histogram name="Previews.EligibilityReason.Offline"
-    enum="PreviewsEligibilityReason">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    Whether an offline preview was allowed to be shown or the reason the preview
-    could not be shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="Previews.InfoBarAction.LitePage" enum="PreviewsInfoBarAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    User interactions with the previews LitePage &quot;Saved data&quot; infobar.
-    These include:
-
-    Displays of the infobar and clicks on the &quot;Load original&quot; link.
-    Whether the infobar was dismissed by navigation or the user clicking on
-    &quot;X&quot; close button.
-  </summary>
-</histogram>
-
-<histogram name="Previews.InfoBarAction.LoFi" enum="PreviewsInfoBarAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    User interactions with the previews Lo-Fi &quot;Saved data&quot; infobar.
-    These include:
-
-    Displays of the infobar and clicks on the &quot;Load original&quot; link.
-    Whether the infobar was dismissed by navigation or the user clicking on
-    &quot;X&quot; close button.
-  </summary>
-</histogram>
-
-<histogram name="Previews.InfoBarAction.Offline" enum="PreviewsInfoBarAction">
-  <owner>bengr@chromium.org</owner>
-  <owner>megjablon@chromium.org</owner>
-  <summary>
-    User interactions with the previews Offline &quot;Faster page loaded&quot;
-    infobar. These include:
-
-    Displays of the infobar and clicks on the &quot;Load original&quot; link.
-    Whether the infobar was dismissed by navigation or the user clicking on
-    &quot;X&quot; close button.
-  </summary>
-</histogram>
-
-<histogram name="Previews.OptOut.DBRowCount" units="rows">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The number of rows in the Previews opt out SQLite table at profile startup.
-  </summary>
-</histogram>
-
-<histogram name="Previews.OptOut.UserOptedOut.Offline"
-    enum="PreviewsUserOptedOut">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    Whether the user chose to reload the full page when shown an offline
-    preview.
-  </summary>
-</histogram>
-
-<histogram name="Previews.OriginalContentLength" units="KB">
-  <owner>ryansturm@chromium.org</owner>
-  <summary>
-    The estimated content length of a page load using a preview optimization.
-  </summary>
-</histogram>
-
-<histogram name="PrinterService.PrinterServiceEvent"
-    enum="PrinterServiceEventType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count of events in PrinterService on ChromeOS related to USB printers.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.DestinationAction"
-    enum="PrintPreviewPrintDestinationBuckets">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Actions performed by the user when the print destination search widget is
-    shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.FontType" enum="PrintPreviewFontTypeType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count of font file formats embeeded in print preview PDFs. These numbers are
-    biased by what the platforms supports in terms of detection.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.GcpPromo" enum="PrintPreviewGcpPromoBuckets">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Actions performed by the user when the Google Cloud Print add-printers
-    promotion is shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.InitialDisplayTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Time from when print preview is intiated until the intial preview is sent to
-    the preview tab for rendering.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.InitializationTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Time from when print preview is intiated until the preview PDF generation is
-    started.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.InitiatedByScript" enum="BooleanMainFrame">
-  <owner>nasko@chromium.org</owner>
-  <summary>
-    Logged when a document calls the window.print() API. The boolean value
-    indicates whether it is invoked by the main frame. It will be false for
-    documents in subframes.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.ManagePrinters">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count the number of requests received to show the manage printers dialog.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.NumberOfPrinters">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count the total number of printers shown in destination drop down list.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.OutOfProcessSubframe" enum="Boolean">
-  <owner>nasko@chromium.org</owner>
-  <summary>
-    Logged when a document calls the window.print() API in any frame. The
-    boolean value will be true when the API call is invoked by a document which
-    is in a process different than the top level document. It will be false in
-    all other cases.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.Initial">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The page count of the initial print preview, a.k.a. the total number of
-    pages in documents to be printed.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintToCloudPrint">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to a cloud
-    printer.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintToCloudPrintWebDialog">
-  <obsolete>
-    No longer used as of 01/2016.
-  </obsolete>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to a cloud
-    printer using web dialog.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintToPDF">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to PDF.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintToPrinter">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to a
-    printer.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintWithExtension">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to an
-    extension printer (using printerProvider API).
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.PrintWithPrivet">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed to a privet
-    printer.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PageCount.SystemDialog">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The final page count (after page selection) of documents printed using
-    system dialog.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PreviewEvent" enum="PrintPreviewHelperEvents">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Print preview events.</summary>
-</histogram>
-
-<histogram name="PrintPreview.PrintDocumentType"
-    enum="PrintPreviewPrintDocumentTypeBuckets">
-  <owner>rbpotter@chromium.org</owner>
-  <summary>
-    Track type of documents printed (HTML vs PDF). Recorded immediately after a
-    user requests that a document be printed.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PrintSettings" enum="PrintSettings">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Track the popularity of print settings. (Settings when printing to PDF are
-    excluded from this statistic.)
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.PrintSettingsUi"
-    enum="PrintPreviewPrintSettingsUiBuckets">
-  <owner>alekseys@chromium.org</owner>
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Actions performed by the user interacting with print settings UI elements.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeCancel">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The number of times regenerate preview requests received before the user
-    clicked the cancel button.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeFirstData">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The number of times regenerate preview requests received before the first
-    preview data is availible.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RegeneratePreviewRequest.BeforePrint">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    The number of times regenerate preview requests received before the user
-    clicked the print button.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RenderAndGeneratePDFTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Time taken to render and generate PDF for print preview. (Includes time to
-    reflow the page back to normal, but not the time to reflow the page to
-    prepare for printing.)
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RenderAndGeneratePDFTimeAvgPerPage" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Time taken to render and generate PDF for print preview divided by the
-    number of pages. (Includes time to reflow the page back to normal, but not
-    the time to reflow the page to prepare for printing.)
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RendererError" enum="PrintPreviewFailureType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count how frequently a set of pre-defined print preview errors occur.
-  </summary>
-</histogram>
-
-<histogram name="PrintPreview.RenderPDFPageTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Time taken to render each PDF page for print preview.</summary>
-</histogram>
-
-<histogram name="PrintPreview.RenderToPDFTime" units="ms">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Time taken to render to PDF for print preview.</summary>
-</histogram>
-
-<histogram name="PrintPreview.UserAction" enum="PrintPreviewUserActionType">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Action taken by the user in the preview tab such as print, cancel, print to
-    pdf and show advanced print settings dialog.
-  </summary>
-</histogram>
-
-<histogram name="Process.Sandbox.FlagOverrodeRemoteSessionCheck" enum="Boolean">
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Measure how often the automatic recognition for terminal services
-    environment would have incorrectly decided that the job object should be
-    applied, when it shouldn't have been as dictated by the flag
-    --allow-no-sanbox-job. This histogram will guide the final removal of the
-    flag, which will be possible when the number of false values becomes
-    insignificant.
-  </summary>
-</histogram>
-
-<histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Errors returned while launching sandboxed process on Windows. For decoding
-    error code please refer to http://goo.gl/fJJiAv.
-  </summary>
-</histogram>
-
-<histogram name="Process.Sandbox.Launch.Warning" enum="WinGetLastError">
-  <owner>forshaw@chromium.org</owner>
-  <summary>
-    Warnings returned while launching sandboxed process on Windows. For decoding
-    error code please refer to http://goo.gl/fJJiAv. This will only be logged
-    when SpawnTarget succeeds with SBOX_ALL_OK but the last warning result does
-    not equal SBOX_ALL_OK.
-  </summary>
-</histogram>
-
-<histogram name="Process.Sandbox.Launch.WarningResultCode"
-    units="LaunchErrorCodes">
-  <owner>forshaw@chromium.org</owner>
-  <summary>
-    The warning launch error returned while launching sandboxed process on
-    Windows. This will only be logged when SpawnTarget succeeds with SBOX_ALL_OK
-    but the last warning result does not equal SBOX_ALL_OK.
-  </summary>
-</histogram>
-
-<histogram name="Process.Sandbox.Lowbox.Launch.Error" enum="WinGetLastError">
-  <owner>shrikant@chromium.org</owner>
-  <summary>
-    Errors returned while launching lowbox enabled sandboxed process on Windows.
-    For decoding error code please refer to http://goo.gl/fJJiAv.
-  </summary>
-</histogram>
-
-<histogram name="Profile.AddNewUser" enum="ProfileAddNewUser">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>The frequency of ways that new user profiles are added.</summary>
-</histogram>
-
-<histogram name="Profile.AndroidAccountManagementMenu"
-    enum="ProfileAndroidAccountManagementMenu">
-  <owner>aruslan@chromium.org</owner>
-  <summary>
-    Track user interactions that can be performed in the Android account
-    management menu.
-  </summary>
-</histogram>
-
-<histogram name="Profile.AppCount">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The number of installed apps when a profile is opened.</summary>
-</histogram>
-
-<histogram name="Profile.AuthResult" enum="ProfileAuth">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Counts of authorization results when trying to open a locked profile from
-    the User Manager.
-  </summary>
-</histogram>
-
-<histogram name="Profile.Avatar" enum="ProfileAvatar">
-  <owner>rlp@chromium.org</owner>
-  <summary>The frequency of selection of each avatar.</summary>
-</histogram>
-
-<histogram name="Profile.BookmarksSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the bookmarks database.</summary>
-</histogram>
-
-<histogram name="Profile.CookiesSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the cookies database.</summary>
-</histogram>
-
-<histogram name="Profile.CreateAndInitializeProfile" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>Length of time to setup profile.</summary>
-</histogram>
-
-<histogram name="Profile.CreateBrowserContextServicesTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the CreateBrowserContextServices call
-    within OnPrefsLoaded.
-  </summary>
-</histogram>
-
-<histogram name="Profile.CreateProfileHelperTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during ProfileManager::CreateProfileHelper.
-    This is called when a profile is created synchronously (usually at startup).
-  </summary>
-</histogram>
-
-<histogram name="Profile.CreateResult" enum="ProfileCreateResult">
-  <owner>pam@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>Result (final status) when creating a new profile.</summary>
-</histogram>
-
-<histogram name="Profile.CreateTime" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Back-end time elapsed while creating a new profile. The max is 30 seconds,
-    when an external timeout was applied.
-  </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeCanceled" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time elapsed before the user decided to cancel creation of a new profile.
-    Since only managed-user profile creation can be canceled, this time comes
-    from managed-user registration. The max is 30 seconds, when an external
-    timeout was applied.
-  </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeCanceledNoTimeout" units="ms">
-  <owner>pam@chromium.org</owner>
-  <summary>
-    Time elapsed from when the handler received the message that a user clicked
-    'Create' until the user decided to cancel creation of a new profile. Since
-    only managed-user profile creation can be canceled, this time comes from
-    managed-user registration.
-  </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeNoTimeout" units="ms">
-  <owner>pam@chromium.org</owner>
-  <summary>
-    Time elapsed from when the handler received the message that a user clicked
-    'Create' until the creation either failed with a local error (see
-    Profile.CreateResult), was canceled (also recorded in
-    Profile.CreateTimeCanceledNoTimeout), or completed successfully.
-  </summary>
-</histogram>
-
-<histogram name="Profile.Delete" enum="BooleanProfileSignedIn">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    This histogram tracks the deletion of the profile. This tracks when the
-    cleanup actually takes place, not the UI interaction. The parameter
-    indicates if the profile was signed in or not; true means the profile was
-    signed in, false means the profile was not signed in.
-  </summary>
-</histogram>
-
-<histogram name="Profile.DeleteProfileAction" enum="ProfileDeleteAction">
-  <owner>mlerman@chromium.org</owner>
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    This histogram tracks which UI screen was used to initiate and confirm the
-    deletion of a profile. This does not track when the profile is actually
-    deleted, which is an asynchronous process that happens later.
-  </summary>
-</histogram>
-
-<histogram name="Profile.DesktopMenu" enum="ProfileDesktopMenu">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Track user interactions that can be performed in the user menu and user
-    manager. The origin of the action, whether the an interaction in the content
-    area or some other source, is noted in the histogram suffix.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ExtensionSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the extension cookies database.</summary>
-</histogram>
-
-<histogram name="Profile.FaviconsSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the favicons database.</summary>
-</histogram>
-
-<histogram name="Profile.GetProfile" units="ms">
-  <obsolete>
-    Deprecated 02/2015. Profile.CreateAndInitializeProfile is more useful.
-  </obsolete>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>Length of time to retrieve profile.</summary>
-</histogram>
-
-<histogram name="Profile.GetProfileInfoPath.OutsideUserDir" enum="BooleanHit">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Whether Profile::GetProfileInfoPath is called with a profile outside the
-    user data directory. We expect this to never happen but need to verify in
-    stable. This metric may be removed after M54.
-  </summary>
-</histogram>
-
-<histogram name="Profile.HistorySize" units="MB">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>Size of the history database.</summary>
-</histogram>
-
-<histogram name="Profile.InitProfileUserPrefs.OutsideUserDir" enum="BooleanHit">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Whether Profile::InitProfileUserPrefs is called with a profile outside the
-    user data directory. We expect this to never happen but need to verify in
-    stable. This metric may be removed after M54.
-  </summary>
-</histogram>
-
-<histogram name="Profile.LaunchBrowser" enum="ProfileType">
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Number of times users launch a browser window from either a primary or
-    secondary profile (i.e., each time a browser window is opened we log which
-    type of profile it belongs to).
-  </summary>
-</histogram>
-
-<histogram name="Profile.LockedProfilesDuration" units="minutes">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How long locked profiles have been locked for. This is logged each time any
-    profile is loaded. Note that this does not track the total time the profile
-    was locked, but rather the span from when the profile was locked to when the
-    measurement takes place.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NetUserCount" enum="ProfileNetUserCount">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts of users added and deleted. Percentages are not meaningful. Please
-    look at the ratio of the counts/percentages.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NewAvatarMenu.NotYou"
-    enum="ProfileNewAvatarMenuNotYou">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Tracks user interactions with the 'Not You?' bubble that users can navigate
-    to from the Upgrade bubble after upgrade to the New Avatar Menu.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NewAvatarMenu.Signin"
-    enum="ProfileNewAvatarMenuSignin">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Tracks user interactions with the signin bubble that appears in the New
-    Avatar Menu upon signin. This bubble appears after the user signs in using
-    the Inline Signin flow.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NewAvatarMenu.Upgrade"
-    enum="ProfileNewAvatarMenuUpgrade">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Tracks user interactions with the bubble that appears for users in the new
-    avatar menu after upgrade.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NotifyProfileCreatedTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the Notify() of
-    NOTIFICATION_PROFILE_CREATED during ProfileImpl::DoFinalInit().
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfAccountsPerProfile">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Counts the number of Google-managed accounts linked to a profile. This may
-    be counted multiple times per profile. Please review with the &quot;Show
-    user counts&quot; option enabled on the dashboard.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfManagedProfiles">
-  <owner>pam@chromium.org</owner>
-  <summary>
-    Counts the number of locally managed profiles on a user's machine at least
-    every 24 hours while Chrome is running, among cases with at least one
-    profile. Always de-dupe the results with Show User Counts.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfProfiles">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts the number of profiles on a user's machine at least every 24 hours
-    while Chrome is running. Always de-dupe the results with Show User Counts.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfProfilesAfterAddOrDelete">
-  <obsolete>
-    Deprecated 2013-04-09. No longer tracked. See Profile.NumberOfProfiles.
-  </obsolete>
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts the number of profiles on a user's machine whenever a profile is
-    added or deleted.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfProfilesOnStartup">
-  <obsolete>
-    Deprecated; replaced by Profile.NumberOfProfiles on 2013-04-09. Data are
-    suspect, especially after 2012-02-24: see https://crbug.com/189213.
-  </obsolete>
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts the number of profiles on a user's machine when Chrome starts up.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfProfilesWithAuthErrors">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Counts the type GAIA authentication errors on a user's machine when Chrome
-    starts up. The types of errors are broken down in Signin.AuthError.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfSignedInProfiles">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts the number of signed-in profiles on a user's machine at least every
-    24 hours while Chrome is running. Always de-dupe the results with Show User
-    Counts.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfSignedInProfilesOnStartup">
-  <obsolete>
-    Deprecated; replaced by Profile.NumberOfSignedInProfiles on 2013-04-09.
-  </obsolete>
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Counts the number of profiles that are signed in to Chrome when Chrome
-    starts up.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfSignedInProfilesWithGAIAIcons">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Counts the number of signed-in profiles that are using the GAIA image as the
-    avatar icon. This is counted at least every 24 hours while Chrome is
-    running, so always de-dupe the results with Show User Counts.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfSwitches">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Counts the number of times profiles were switched in a browser session. This
-    value is incremented when a profile is switched to and the result is logged
-    during shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Profile.NumberOfUnusedProfiles">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Counts the number of profiles unused within the past 28 days on a user's
-    machine. This is counts at least every 24 hours while Chrome is running, so
-    always de-dupe the results with Show User Counts.
-  </summary>
-</histogram>
-
-<histogram name="Profile.OnLocaleReadyTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during ProfileImpl::OnLocaleReady. This
-    happens once after profile was loaded.
-  </summary>
-</histogram>
-
-<histogram name="Profile.OnPrefsLoadedTime" units="ms">
-  <obsolete>
-    Deprecated 04/2015, and replaced by Profile.OnLocaleReadyTime.
-  </obsolete>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during ProfileImpl::OnPrefsLoaded.
-  </summary>
-</histogram>
-
-<histogram name="Profile.Opening" enum="ProfileOpen">
-  <obsolete>
-    Deprecated because it did not present the information clearly.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The frequency of ways that the profiles are opened.</summary>
-</histogram>
-
-<histogram name="Profile.OpenMethod" enum="ProfileOpenMethod">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    The frequency with which the user opens the different profile menus or
-    switches profiles. For the open statistics, this does not mean the user
-    necessarily opened a profile after clicking. The switch statistics indicate
-    how often and how the user switches profiles. They are provided together for
-    comparison of how often the user actually switches after opening the avatar
-    bubble menu.
-  </summary>
-</histogram>
-
-<histogram name="Profile.PercentageOfManagedProfiles">
-  <owner>pam@chromium.org</owner>
-  <summary>
-    Tracks the percentage (0-100) of profiles that are locally managed, recorded
-    when Chrome starts up.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ProfileError" enum="ProfileErrorType">
-  <owner>tnagel@chromium.org</owner>
-  <summary>
-    The error with the current user profile that caused an error dialog to be
-    shown. This dialog is shown usually when there is some sort of corruption in
-    the user's profile data.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ProfileImplDoFinalInit" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the ProfileImpl::DoFinalInit().
-  </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileCreateError"
-    enum="GoogleServiceAuthError">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The error code generated in the final step (registration step) of creating a
-    new supervised profile.
-  </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileImportError"
-    enum="GoogleServiceAuthError">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The error code generated in the final step (registration step) of importing
-    a supervised profile.
-  </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileTotalCreateTime" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time elapsed from when the handler received the message that a user clicked
-    'Create' to create a new supervised user profile until the registration ends
-    either successfully or with a failure (both recorded in
-    Profile.SupervisedProfileCreateResult).
-  </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileTotalImportTime" units="ms">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Time elapsed from when the handler received the message that a user clicked
-    'Import supervised user' until the registration ends either successfully or
-    with a failure (both recorded in Profile.SupervisedProfileImportResult).
-  </summary>
-</histogram>
-
-<histogram name="Profile.SwitchGaiaPhotoSettings"
-    enum="ProfileGaiaPhotoOptions">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Counts of when users switch to using their GAIA photo instead of an avatar
-    icon or the opposite when they switch back to an avatar icon instead of
-    their GAIA photo.
-  </summary>
-</histogram>
-
-<histogram name="Profile.Sync" enum="ProfileSync">
-  <obsolete>
-    Deprecated because it did not present the information clearly.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Activity of the user with regards to sync.</summary>
-</histogram>
-
-<histogram name="Profile.SyncCustomize" enum="ProfileSyncCustomize">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Number of times and ways the user customized the sync options of their
-    profile. Percentages are not meaningful. To determine percentages, take the
-    count of a given action over the count of number of customizations.
-  </summary>
-</histogram>
-
-<histogram name="Profile.SyncSignIn" enum="ProfileType">
-  <owner>rpop@google.com</owner>
-  <summary>
-    Number of times the user signed into sync from original or secondary
-    profile.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ThumbnailsSize" units="MB">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the thumbnails database.</summary>
-</histogram>
-
-<histogram name="Profile.TimeToOpenUserManager" units="ms">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Time required to open the UserManager, from when it started to show until
-    when its javascript started executing.
-  </summary>
-</histogram>
-
-<histogram name="Profile.TopSitesSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the top sites database.</summary>
-</histogram>
-
-<histogram name="Profile.TotalHistorySize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Total size of all history databases.</summary>
-</histogram>
-
-<histogram name="Profile.TotalSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Total size of the profile data (excluding sub-folders).</summary>
-</histogram>
-
-<histogram name="Profile.TriggeredReset" enum="BooleanReset">
-  <owner>robertshield@chromium.org</owner>
-  <summary>
-    Indicates whether a profile had a reset trigger that caused it to launch a
-    reset flow. The presence of this trigger is recorded during profile
-    creation.
-  </summary>
-</histogram>
-
-<histogram name="Profile.Update" enum="ProfileType">
-  <owner>rlp@chromium.org</owner>
-  <summary>Times a profile name and/or avatar was updated.</summary>
-</histogram>
-
-<histogram name="Profile.UpgradeEnrollment" enum="ProfileUpgradeEnrollment">
-  <obsolete>
-    Deprecated 8/2014. Upgrade Promotional UI removed.
-  </obsolete>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    The process which leads a user to enroll in New Profile Management. Also
-    tracks if the user chooses to opt out, and tutorials which guide the user
-    into New Profile Management.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ValidateMenuItemInvalidIndex.IsGuest" enum="Boolean">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    Whether the active profile is a guest profile when -validateMenuItem in the
-    ProfileMenuController gets an invalid value for the current profile's index.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ValidateMenuItemInvalidIndex.ProfileCount">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    The count of profiles in the avatar menu when -validateMenuItem in the
-    ProfileMenuController gets an invalid value for the current profile's index.
-  </summary>
-</histogram>
-
-<histogram name="Profile.ValidateMenuItemInvalidIndex.Selector"
-    enum="ValidateMenuItemSelectorType">
-  <owner>anthonyvd@chromium.org</owner>
-  <summary>
-    The selector associated with the menu item when -validateMenuItem in the
-    ProfileMenuController gets an invalid value for the current profile's index.
-  </summary>
-</histogram>
-
-<histogram name="Profile.VisitedLinksSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the visited links database.</summary>
-</histogram>
-
-<histogram name="Profile.WebDataSize" units="MB">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of the web data database.</summary>
-</histogram>
-
-<histogram name="ProfileReset.ResetRequestOrigin"
-    enum="ProfileResetRequestOriginEnum">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Encodes from where the request for resetting the profile settings
-    originated.
-  </summary>
-</histogram>
-
-<histogram name="ProfileReset.SendFeedback" enum="Boolean">
-  <owner>engedy@chromium.org</owner>
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Signifies if the user selected &quot;Send feedback&quot; checkbox in the
-    Reset Profile dialog.
-  </summary>
-</histogram>
-
-<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Errors that Protector detects about default search provider in Web Data.
-    Reported once when Web Data is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Protector.Preferences" enum="ProtectorError">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Errors that Protector detects about protected settings in Preferences.
-    Reported once when profile is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Protector.SearchProvider" enum="SearchEngine">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When the default search provider setting is changed outside of Chrome, which
-    is detected by the Protector, this histogram reports the new setting.
-  </summary>
-</histogram>
-
-<histogram name="Protector.StartupSettings" enum="SessionStartupType">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    When the startup settings are changed outside of Chrome, which is detected
-    by the Protector, this histogram reports the new setting.
-  </summary>
-</histogram>
-
-<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions">
-  <obsolete>
-    Deprecated 9/2016. Never added to histograms.xml and value is always 1.
-  </obsolete>
-  <summary>
-    The number of extensions overriding the proxy, triggering the proxy override
-    extension warning bubble.
-  </summary>
-</histogram>
-
-<histogram name="ProxyOverriddenBubble.UserSelection"
-    units="ExtensionBubbleAction">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The action taken by the user when the &quot;proxy overridden&quot; extension
-    warning bubble is shown. Logged immediately after the action is taken.
-  </summary>
-</histogram>
-
-<histogram base="true" name="PurgeAndSuspend.Experimental.MemoryGrowth"
-    units="KB">
-<!-- Name completed by histogram_suffixes name="PurgeAndSuspendExperiment" -->
-
-  <owner>tasak@google.org</owner>
-  <summary>
-    The growth of the background renderer's memory usage after a background
-    renderer is purged. This is recorded 5, 10 and 15 minutes after the purge.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Experimental.TimeToFirstActivePaint"
-    units="ms">
-  <owner>tasak@google.com</owner>
-  <summary>
-    Time elapsed from when the backgrounded and purged renderer is foregrounded
-    until the renderer is painted. This is recorded every time the backgrounded
-    and purged renderer is foregrounded.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.BlinkGCKB" units="KB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The memory usage of the BlinkGC allocator after a background renderer is
-    purged and suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.DiscardableKB" units="KB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The memory usage of the discardable memory after a background renderer is
-    purged and suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.MallocMB" units="MB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The memory usage of the malloc after a background renderer is purged and
-    suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.PartitionAllocKB" units="KB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The memory usage of PartitionAlloc after a background renderer is purged and
-    suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.TotalAllocatedMB" units="MB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The sum of the memory usages of PartitionAlloc, malloc, discardable memory,
-    mainThreadIsolate() and BlinkGC allocator after a backgrounded renderer is
-    purged and suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.Memory.V8MainThreadIsolateMB" units="MB">
-  <owner>tasak@google.com</owner>
-  <summary>
-    The memory usage of mainThreadIsolate() after a backgrounded renderer is
-    purged and suspended. Note: this metric is for A/B testing.
-  </summary>
-</histogram>
-
-<histogram name="PurgeAndSuspend.PendingTaskCount">
-  <owner>tasak@google.com</owner>
-  <summary>
-    This records how many tasks are still in task queues when a backgrounded
-    renderer is suspended.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.BackgroundBudget">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    Whenever a Service Worker receives a push message, this records the budget
-    available to the service worker, which is an internal Chrome value for the
-    amount of background processing a service worker is allowed to do without
-    visibly alerting the user. Scale for the budget is 0 to 100.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.DeliveryStatus" enum="PushDeliveryStatus">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When a Service Worker receives a push message, this records whether the
-    overall operation was successful, or otherwise the type of error
-    encountered.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.DeliveryStatus.FindServiceWorker"
-    enum="ServiceWorkerStatusCode">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When attempting to deliver a push message to a Service Worker, this records
-    the result of finding the Service Worker registration given its ID and
-    origin.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.DeliveryStatus.ServiceWorkerEvent"
-    enum="ServiceWorkerStatusCode">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When a Service Worker receives a push message, this records the precise
-    result received from the Service Worker code.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.GetRegistrationStatus"
-    enum="PushGetRegistrationStatus">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When a webpage asks for details about its current push messaging
-    registration, this records whether the request is successful, or otherwise
-    the type of error encountered.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.ReceivedMessageInBackground" enum="Boolean">
-  <owner>dgn@chromium.org</owner>
-  <summary>
-    Whenever a Service Worker receives a push message, this records whether
-    Chrome is completely running in the background. A successful report means
-    that the message was received when Chrome was in complete background mode,
-    without UI, while a failure means it was in some other state: in background
-    with some apps running, showing browser windows, etc.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.RegistrationStatus"
-    enum="PushRegistrationStatus">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When a webpage registers for push messaging, this records whether the
-    request is successful, or otherwise the type of error encountered.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.SESForLowBudgetOrigin">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    When a Service Worker hits low budget when servicing a push message, this
-    records what the Site Engagement Service score is at that time.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.SESForNoBudgetOrigin">
-  <owner>harkness@chromium.org</owner>
-  <summary>
-    When a Service Worker hits zero budget when servicing a push message, this
-    records what the Site Engagement Service score is at that time.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.UnregistrationGCMResult" enum="GCMClientResult">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When unregistering a legacy non-InstanceID push messaging subscription, this
-    records the result returned by the GCMDriver (note that exceeding the
-    maximum number of retries due to network errors is logged as SERVER_ERROR).
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.UnregistrationIIDResult" enum="InstanceIDResult">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When unregistering an InstanceID push messaging subscription, this records
-    the result returned from deleting the InstanceID (note that exceeding the
-    maximum number of retries due to network errors is logged as SERVER_ERROR).
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.UnregistrationReason"
-    enum="PushUnregistrationReason">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When unregistering a website from push messaging, this records the reason
-    why it is being unregistered.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.UnregistrationStatus"
-    enum="PushUnregistrationStatus">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When unregistering a website from push messaging, this records whether the
-    request is successful, or otherwise the type of error encountered.
-  </summary>
-</histogram>
-
-<histogram name="PushMessaging.UserVisibleStatus" enum="PushUserVisibleStatus">
-  <owner>johnme@google.com</owner>
-  <summary>
-    When a Service Worker receives a push message, this records whether it
-    showed user-visible UX (like a notification), or whether we showed a forced
-    notification on its behalf.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.csvFormattedCellCount">
-  <owner>dskelton@google.com</owner>
-  <summary>
-    Records the number of cells that contain formatting data in the default
-    worksheet when a comma separated value spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.csvNonEmptyCellCount">
-  <owner>dskelton@google.com</owner>
-  <summary>
-    Records the number of non-empty cells in the default worksheet when a comma
-    separated value spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.csvSheetCount">
-  <owner>dskelton@google.com</owner>
-  <summary>
-    Records the number of worksheets when a comma separated value spreadsheet is
-    opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docPageCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the page count when a compound binary format document is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docParagraphCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the paragraph count when a compound binary format document is
-    opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docSectionCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the section count when a compound binary format document is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxPageCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the page count when an OOXML format document is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxParagraphCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the paragraph count when an OOXML format document is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxSectionCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the section count when an OOXML format document is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the various different error types encountered when opening and
-    reading MS Office file formats in the Quickoffice viewer. These range from
-    Nacl crashes and uncaught javascript exceptions to document errors inside
-    Quickoffice Web Toolkit (eg QOWT). The errors are recorded against the file
-    format in which they occurred.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the various different file types supported by Quickoffice (like MS
-    Word, Excel, Powerpoint files) when they opened in the browser to measure
-    which file formats are most popular.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptMasterCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of slide masters when a compound binary format
-    presentation is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptSlideCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the slide count when a compound binary format presentation is
-    opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptxMasterCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of slide masters when an OOXML format presentation is
-    opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptxSlideCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the slide count when an OOXML format presentation is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsFormattedCellCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of cells that contain formatting data in the default
-    worksheet when a compound binary format spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsNonEmptyCellCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of non-empty cells in the default worksheet when a
-    compound binary format spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsSheetCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of worksheets when a compound binary format spreadsheet
-    is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxFormattedCellCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of cells that contain formatting data in the default
-    worksheet when an OOXML format spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxNonEmptyCellCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of non-empty cells when an OOXML format spreadsheet is
-    opened.
-  </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxSheetCount">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Records the number of worksheets when an OOXML format spreadsheet is opened.
-  </summary>
-</histogram>
-
-<histogram name="Quota.AgeOfDataInDays" units="days">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    How many kilobytes are how old. Similar to |AgeOfOrigin| except a sample is
-    added for each kilobyte of an origin's data. Logged hourly for all origins
-    with stored data.
-  </summary>
-</histogram>
-
-<histogram name="Quota.AgeOfOriginInDays" units="days">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    How many days it's been since an origin's temporary storage has been
-    accessed. Logged hourly for all origins with stored data.
-  </summary>
-</histogram>
-
-<histogram name="Quota.AvailableDiskSpace" units="MB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Amount of free disk space for the storage directory. Logged at irregular
-    intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.DaysBetweenRepeatedOriginEvictions">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The number of days since an origin was last chosen to be evicted from the
-    storage, recorded each time the origin is evicted (except for the first
-    eviction).
-  </summary>
-</histogram>
-
-<histogram name="Quota.DaysSinceLastAccess" units="days">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The number of days since an origin's data was last accessed. Logged upon
-    access when the time since last access is at least 24 hours.
-  </summary>
-</histogram>
-
-<histogram name="Quota.DiskspaceShortage" units="MB">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Difference between acceptable lower limit of diskspace and actual free
-    diskspace at beginning of an eviction round.
-  </summary>
-</histogram>
-
-<histogram name="Quota.ErrorsOnEvictingOriginPerHour">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Number of errors on evicting origin by QuotaTemporaryStorageEvictor in an
-    hour.
-  </summary>
-</histogram>
-
-<histogram name="Quota.ErrorsOnGettingUsageAndQuotaPerHour">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Number of errors on getting usage and quota by QuotaTemporaryStorageEvictor
-    in an hour.
-  </summary>
-</histogram>
-
-<histogram name="Quota.EvictedBytesPerRound" units="MB">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Amount of usage used by evicted origins in an eviction round.
-  </summary>
-</histogram>
-
-<histogram name="Quota.EvictedOriginAccessCount">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The number of times the evicted origin was accessed. Logged when the origin
-    is evicted.
-  </summary>
-</histogram>
-
-<histogram name="Quota.EvictedOriginDaysSinceAccess">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The number of days since the evicted origin was last accessed. Logged when
-    the origin  is evicted.
-  </summary>
-</histogram>
-
-<histogram name="Quota.EvictedOriginsPerHour">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of evicted origins in an hour.</summary>
-</histogram>
-
-<histogram name="Quota.EvictedOriginTimeSinceAccess">
-  <obsolete/>
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The time since the evicted origin was last accessed. Logged when the origin
-    is evicted.
-  </summary>
-</histogram>
-
-<histogram name="Quota.EvictionRoundsPerHour">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of eviction rounds in an hour.</summary>
-</histogram>
-
-<histogram name="Quota.FreeDiskSpaceForProfile" units="MB">
-  <obsolete/>
-  <owner>tzik@chromium.org</owner>
-  <summary>Amount of free disk space for profile directory.</summary>
-</histogram>
-
-<histogram name="Quota.GlobalTemporaryPoolSize" units="MB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The size of the global temporary storage pool. Logged at irregular
-    intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.GlobalUsageOfPersistentStorage" units="MB">
-  <owner>tzik@chromium.org</owner>
-  <summary>Global usage of persistent storage.</summary>
-</histogram>
-
-<histogram name="Quota.GlobalUsageOfTemporaryStorage" units="MB">
-  <owner>tzik@chromium.org</owner>
-  <summary>Global usage of temporary storage.</summary>
-</histogram>
-
-<histogram name="Quota.InitialTemporaryGlobalStorageQuota" units="MB">
-  <obsolete/>
-  <owner>tzik@chromium.org</owner>
-  <summary>Initial quota for global temporary storage.</summary>
-</histogram>
-
-<histogram name="Quota.LRUOriginTypes" enum="QuotaOriginTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Types of origins that are initially selected for eviction via LRU. Some of
-    these types are exempt from eviction.
-  </summary>
-</histogram>
-
-<histogram name="Quota.NumberOfEvictedOriginsPerRound">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of evicted origins per round.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfPersistentStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of origins using persistent storage.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfProtectedPersistentStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of protected origins using persistent storage.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfProtectedTemporaryStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of protected origins using temporary storage.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfTemporaryStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of origins using temporary storage.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfUnlimitedPersistentStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of unlimited origins using persistent storage.</summary>
-</histogram>
-
-<histogram name="Quota.NumberOfUnlimitedTemporaryStorageOrigins">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of unlimited origins using temporary storage.</summary>
-</histogram>
-
-<histogram name="Quota.OSAccomodationDelta" units="MB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    If our hardcoded OS accomodation is too large for the volume size, we define
-    the value as a fraction of the total volume size instead. The
-    OSAccomodationDelta is the difference between the hardcoded and computed
-    values.
-  </summary>
-</histogram>
-
-<histogram name="Quota.PercentDiskAvailable" units="%">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Percentage of the storage device that is free. Logged at irregular
-    intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.PercentUsedByOrigin" units="%">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Percentage of an origin's quota that is being used by the origin. Logged at
-    irregular intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.PercentUsedForTemporaryStorage" units="%">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Percentage of the storage device that ia being use for temporary storage.
-    Logged at irregular intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.QuotaForOrigin" units="MB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The quota value computed for an origin using temporary storage. Logged at
-    irregular intervals. (In the process of writing new data, storage systems
-    consult the quota system for &quot;usage and quota&quot; to determine if
-    there is sufficient space available for the new data. This value is logged
-    at the time of that consultation. The frequency is dependent on how
-    individual websites use the various storage apis.)
-  </summary>
-</histogram>
-
-<histogram name="Quota.SkippedEvictionRoundsPerHour">
-  <owner>tzik@chromium.org</owner>
-  <summary>Number of skipped eviction rounds in an hour.</summary>
-</histogram>
-
-<histogram name="Quota.TimeBetweenRepeatedOriginEvictions">
-  <obsolete/>
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    Time since an origin was last chosen to be evicted from the storage,
-    recorded each time the origin is evicted (except for the first eviction).
-  </summary>
-</histogram>
-
-<histogram name="Quota.TimeDeltaOfEvictionRounds">
-  <owner>tzik@chromium.org</owner>
-  <summary>Time between two consecutive active eviction rounds.</summary>
-</histogram>
-
-<histogram name="Quota.TimeSpentToAEvictionRound">
-  <owner>tzik@chromium.org</owner>
-  <summary>Time spent to an eviction round.</summary>
-</histogram>
-
-<histogram name="Quota.TimeToGetSettings" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time spent querying the embedder for the settings values. Logged at
-    irregular intervals as the values are refreshed.
-  </summary>
-</histogram>
-
-<histogram name="Quota.TimeToInitializeGlobalQuota" units="ms">
-  <obsolete>
-    Removed November 2016
-  </obsolete>
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time spent initializing the global quota. Logged when the storage
-    partition's quota manager is initialized.
-  </summary>
-</histogram>
-
-<histogram name="Quota.TotalDiskSpace" units="MB">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Total disk space for the storage directory. Logged at irregular intervals.
-  </summary>
-</histogram>
-
-<histogram name="Quota.UsageOverageOfTemporaryGlobalStorage" units="MB">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Overage of the temporary global storage usage at beginning of an eviction
-    round.
-  </summary>
-</histogram>
-
-<histogram name="Rappor.DailyEvent.IntervalType" enum="DailyEventIntervalType">
-  <owner>holte@chromium.org</owner>
-  <summary>Counts how often daily interval events were fired.</summary>
-</histogram>
-
-<histogram name="Rappor.DiscardReason" enum="RapporDiscardReason">
-  <owner>holte@chromium.org</owner>
-  <summary>
-    For each Rappor log that is discarded, the reason that it was discarded.
-  </summary>
-</histogram>
-
-<histogram name="Rappor.FailedUploadErrorCode" enum="NetErrorCodes">
-  <owner>holte@chromium.org</owner>
-  <summary>Net error codes for failed Rappor uploads.</summary>
-</histogram>
-
-<histogram name="rappor.last_daily_sample" enum="DailyEventIntervalType">
-  <obsolete>
-    Removed 2015/05/05.
-  </obsolete>
-  <owner>holte@chromium.org</owner>
-  <summary>
-    Rappor.DailyEvent.IntervalType reported under the wrong name.
-  </summary>
-</histogram>
-
-<histogram name="Rappor.LoadCohortResult" enum="RapporLoadResultType">
-  <owner>holte@chromium.org</owner>
-  <summary>
-    Success or errors encountered when loading Rappor cohort pref.
-  </summary>
-</histogram>
-
-<histogram name="Rappor.LoadSecretResult" enum="RapporLoadResultType">
-  <owner>holte@chromium.org</owner>
-  <summary>
-    Success or errors encountered when loading Rappor secret pref.
-  </summary>
-</histogram>
-
-<histogram name="Rappor.UploadResponseCode" enum="HttpResponseCode">
-  <owner>holte@chromium.org</owner>
-  <summary>
-    For each upload to the Rappor server, log the response received from the
-    server.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.ContextMenu" enum="ReadingListContextMenuActions">
-  <owner>gambard@chromium.org</owner>
-  <summary>
-    The action chosen by the user after displaying the reading list context
-    menu.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.Download.Failures" units="count">
-  <owner>gambard@chromium.org</owner>
-  <summary>
-    Number of tries before the download of the entry is successful.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.Download.Status" enum="ReadingListDownloadStatus">
-  <owner>gambard@chromium.org</owner>
-  <summary>Final status of the download of a reading list entry.</summary>
-</histogram>
-
-<histogram name="ReadingList.FirstReadAgeOnDeletion" units="hours">
-  <owner>gambard@chromium.org</owner>
-  <summary>
-    Time since the first read of the reading list entry getting deleted. 0 if it
-    has never been read.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.OfflineVersionDisplayed" enum="Boolean">
-  <owner>gambard@chromium.org</owner>
-  <summary>Whether the displayed version is the offline one.</summary>
-</histogram>
-
-<histogram name="ReadingList.Read.AgeOnDeletion" units="hours">
-  <owner>gambard@chromium.org</owner>
-  <summary>
-    Time since the creation of the read reading list entry getting deleted.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.Read.Number" units="count">
-  <owner>gambard@chromium.org</owner>
-  <summary>Number of read entries in reading list.</summary>
-</histogram>
-
-<histogram name="ReadingList.Unread.AgeOnDeletion" units="hours">
-  <owner>gmabard@chromium.org</owner>
-  <summary>
-    Time since the creation of the unread reading list entry getting deleted.
-  </summary>
-</histogram>
-
-<histogram name="ReadingList.Unread.Number" units="count">
-  <owner>gambard@chromium.org</owner>
-  <summary>Number of unread entries in reading list.</summary>
-</histogram>
-
-<histogram name="RecoveryComponent.Event" enum="RecoveryComponentEvent">
-  <owner>robertshield@chromium.org</owner>
-  <summary>Log each stage of a recovery component event.</summary>
-</histogram>
-
-<histogram name="Render.Workers.MaxWorkerCountInRendererProcess">
-  <obsolete>
-    Deprecated Dec 2016. This metric did not report the number of shared workers
-    correctly, since it used the RenderProcessHostImpl ref counts, which in the
-    shared worker case is more like a boolean flag (zero or one or maybe two)
-    than the number of shared workers. So its results can be thought of as
-    roughly the number of service workers only.
-  </obsolete>
-  <owner>kinuko@chromium.org</owner>
-  <summary>
-    Maximum number of workers (SharedWorker or ServiceWorker) that are
-    simultaneously hosted in a single renderer process. Recorded when the
-    renderer process host is being destructed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.AcceleratedFixedRootBackground"
-    enum="AcceleratedFixedRootBackground">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Keeps track of the number of main frame scrolls with an accelerated fixed
-    root background, the number of main frame scrolls with an unaccelerated
-    fixed root background, and the total number of main frame scrolls.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.CompositedScrolling" enum="CompositedScrolling">
-  <owner>hartmanng@chromium.org</owner>
-  <summary>
-    Total count of the number of RenderLayers which are scrollable areas, need
-    to be promoted to stacking containers, and will use composited scrolling.
-    Each bucket is sampled at most once per RenderLayer, when the RenderLayer
-    first becomes scrollable, first needs to become a stacking container, and
-    first uses composited scrolling, respectively.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.DrawDuration" units="ms">
-  <obsolete>
-    Replaced by Scheduling.Renderer.DrawDuration. This metric did not
-    differentiate between processes.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>The time it takes for the compositor to draw a frame.</summary>
-</histogram>
-
-<histogram name="Renderer.DrawDurationOverestimate" units="ms">
-  <obsolete>
-    Measurement no longer taken.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The amount by which the compositor's draw duration was overestimated in a
-    particular frame (0 if the duration was perfectly predicted or
-    underestimated).
-  </summary>
-</histogram>
-
-<histogram name="Renderer.DrawDurationUnderestimate" units="ms">
-  <obsolete>
-    Measurement no longer taken.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The amount by which the compositor's draw duration was underestimated in a
-    particular frame (0 if the duration was perfectly predicted or
-    overestimated).
-  </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatency" units="ms">
-  <obsolete>
-    Measurement no longer taken.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The delay between the compositor submitting a command to the GPU and that
-    command executing on the GPU. This delay is measured once per frame.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatencyOverestimate" units="ms">
-  <obsolete>
-    Measurement no longer taken.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The amount by which GPU latency was overestimated in a particular frame (0
-    if the latency was perfectly predicted or underestimated).
-  </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatencyUnderestimate" units="ms">
-  <obsolete>
-    Measurement no longer taken.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The amount by which GPU latency was underestimated in a particular frame (0
-    if the latency was perfectly predicted or overestimated).
-  </summary>
-</histogram>
-
-<histogram name="Renderer.Hung.MobileInfoBar.UserEvent"
-    enum="MobileHungRendererInfoBarEvent">
-  <owner>dfalcantara@chromium.org</owner>
-  <summary>
-    Android: Records the terminal event associated with a hung renderer infobar.
-    This includes both the explicit user actions as well as implicit dismissals,
-    e.g., when the renderer regains responsiveness before the infobar is
-    interactively dismissed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.LayoutMs" units="ms">
-  <obsolete>
-    Deprecated as of 3/2015.
-  </obsolete>
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    Duration of the FrameView::performLayout trace event, which occurs at most
-    once per frame.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.LineLayoutMs" units="ms">
-  <obsolete>
-    Deprecated as of 3/2015.
-  </obsolete>
-  <owner>benjhayden@chromium.org</owner>
-  <summary>
-    Amount of time spent doing line layout during FrameView::performLayout.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.PixelIncreaseFromTransitions">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    A lower-bound on the percentage increase in memory that would result from
-    promoting all layers that have a webkit-transition on opacity or transform.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.unloadEventsDurationMS" units="ms">
-  <obsolete>
-    Deprecated as of 10/2013.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This measures how long all unload event handlers required to run whenever an
-    unload event is processed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer.ViewportZoomBugCount" enum="BooleanHit">
-  <owner>kkhorimoto@chromium.org</owner>
-  <summary>
-    [iOS] A boolean that is used to indicate that the WebKit rendering bug in
-    http://crbug.com/583231 has occurred. This occurs when a page with no
-    viewport tag is rendered with an unusable zoom scale. Only logged on iOS.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.FinishDocToFinish">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a document finished loading to when all it's resources
-    are also loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFinish">
-  <obsolete>
-    Deprecated 6/15/09.  Replaced by Renderer2.RequestToFinish_L
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page was requested by a user to when it is fully
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFinish_L">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page was requested by a user to when it is fully
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFirstLayout">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page was requested by a user to its first layout.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToStart">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page was requested by a user to when it starts loading.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFinish">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page started loading to when it is fully loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFinishDoc">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page starts loading to when the main document is
-    finished loading.
-  </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFirstLayout">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time from when a page starts loading to its first layout.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.Abandoned" enum="Abandoned">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Distribution of actual finished pages, vs abandoned pages, where we needed
-    to declare a finish time prematurely since the page was being closed
-    (exited).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelContentPaintDurationMS">
-  <obsolete>
-    Deprecated 2014-05 because of impl-side painting.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time spent by WebKit painting the page, in milliseconds, when the GPU
-    acceleration is active, for paints that affect non-root layers.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelContentPaintMegapixPerSecond">
-  <obsolete>
-    Deprecated 2014-05 because of impl-side painting.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    WebKit paint throughput, measured in megapixels per second, when GPU
-    acceleration is active, for paints that affect non-root layers.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelDoDeferredUpdateDelay">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>Time between frames when GPU acceleration is active.</summary>
-</histogram>
-
-<histogram name="Renderer4.AccelRootPaintDurationMS">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time spent by WebKit painting the page, in milliseconds, when the GPU
-    acceleration is active, for paints that affect the root layer.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelRootPaintMegapixPerSecond">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    WebKit paint throughput, measured in megapixels per second, when GPU
-    acceleration is active, for paints that affect the root layer.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.AnimationCallbackDelayTime" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from when the animation callback was posted to when it ran.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToCommit" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
-    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
-    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
-    time when renderer requested load of document, after any unload of last
-    document. &quot;Commit&quot;== time when renderer got first byte of
-    document.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFinish">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFinishDoc">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFirstPaint" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
-    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
-    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
-    time when renderer requested load of document, after any unload of last
-    document. &quot;First paint&quot;== time when first paint operation was
-    performed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;big&quot; to &quot;first paint after load.&quot;
-    &quot;Begin&quot;== &quot;request&quot; if user requested, and
-    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
-    document. &quot;Start&quot;== time when renderer requested load of document,
-    after any unload of last document. &quot;First paint after load&quot;== time
-    after onload() when first paint operation is performed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.Browser.PartialRasterPercentageSaved" units="%">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Percentage of pixels which would have been rastered, but were skipped due to
-    the partial raster optimization. Logged for each raster task run in a
-    Browser process. The histogram is suffixed by the RasterBufferProvider which
-    is in use.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFinish" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
-    time when renderer got first byte of document.  &quot;Finish&quot;==after
-    onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFinishDoc" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
-    time when renderer got first byte of document. &quot;Finish doc&quot; ==
-    main document loaded, before onload(). &quot;Finish&quot;==after onload()
-    and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFirstPaint" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;first paint.&quot;
-    &quot;Commit&quot;== time when renderer got first byte of document.
-    &quot;First paint&quot;== time when first paint operation was performed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
-    &quot;Commit&quot;== time when renderer got first byte of document.
-    &quot;First paint after load&quot;== time after onload() when first paint
-    operation is performed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CompositorScrollHitTestResult"
-    enum="CompositorScrollResult">
-  <owner>vollick@chromium.org</owner>
-  <summary>
-    It's possible for compositor hit testing to determine conclusively that
-    compositor thread scrolling can or cannot be done. It's also possible that
-    the hit testing result is inconclusive. We would like to see the I-don't-
-    know result as little as possible. This histogram tracks the ratios.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time between frames, as measured on the compositor thread. This is collected
-    once per frame while it is being drawn to the screen in the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.CompositorTouchScrollUpdateThread"
-    enum="ScrollThread">
-  <owner>tdresser@chromium.org</owner>
-  <summary>Whether the scroll from touch is executed on main thread.</summary>
-</histogram>
-
-<histogram name="Renderer4.CompositorWheelScrollUpdateThread"
-    enum="ScrollThread">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Whether the scroll from mouse wheel is executed on main thread.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels">
-  <obsolete>
-    Renamed to Renderer4.pixelCountCulled_Draw.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels that culling prevented being drawn to the screen,
-    normalized to the viewport size. This is collected once per frame while it
-    is being drawn to the screen in the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels">
-  <obsolete>
-    Renamed to Renderer4.pixelCountOpaque_Draw.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels drawn to the screen and known opaque, normalized to the
-    viewport size. This is collected once per frame while it is being drawn to
-    the screen in the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels">
-  <obsolete>
-    Renamed to Renderer4.pixelCountTranslucent_Draw.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels drawn to the screen and not known opaque, normalized to the
-    viewport size. This is collected once per frame while it is being drawn to
-    the screen in the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.FinishDocToFinish" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
-    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
-    onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
-    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
-    paint after load&quot;== time after onload() when first paint operation is
-    performed.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GestureScrollingThreadStatus"
-    enum="ScrollingThreadStatus">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    For every gesture, we record whether the scroll occurred on the main thread,
-    on the compositor thread, or on the compositor thread but blocked on the
-    main thread. The last case will happen when there is a blocking event
-    listener.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuImageDecodeState" enum="GpuImageDecodeState">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Gpu image decode usage statistics. Images are decoded and locked prior to
-    upload; this indicates how that decode is used during tile management.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuImageDecodeState.FirstLockWasted"
-    enum="BooleanWasted">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Indication whether the first lock of an image decode was wasted (image was
-    not used). Images are decoded and locked prior to raster; this indicates
-    whether the decode was used or not during the first lock.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuImageUploadState.FirstRefWasted"
-    enum="BooleanWasted">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Indication whether the first ref of a GPU image upload was wasted (not used
-    in raster). Images are uploaded prior to raster; this indicates whether the
-    upload was used during the first ref.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuImageUploadState.Used" enum="BooleanUsage">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Indication whether the GPU image upload was used in raster. Images are
-    uploaded prior to raster; this indicates whether the upload was used during
-    raster.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuRasterizationEnabled" enum="BooleanEnabled">
-  <owner>alokp@chromium.org</owner>
-  <summary>
-    Whether gpu rasterization is enabled (checked once after the page is painted
-    for the first time).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuRasterizationSuitableContent"
-    enum="BooleanEnabled">
-  <owner>alokp@chromium.org</owner>
-  <summary>
-    If gpu rasterization is enabled, whether the page contents are suitable for
-    gpu rasterization (checked once after the page is painted for the first
-    time).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuRasterizationTriggered" enum="BooleanEnabled">
-  <owner>alokp@chromium.org</owner>
-  <summary>
-    If gpu rasterization is enabled, whether it was triggered (checked once
-    after the page is painted for the first time).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.GpuRasterizationUsed" enum="BooleanEnabled">
-  <owner>alokp@chromium.org</owner>
-  <summary>
-    If gpu rasterization is enabled, whether it was actually used for the page
-    (checked once after the page is painted for the first time).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.IdealContentsScale">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    The contents scale at which picture layer impl should be rasterized in order
-    to appear crisp. This is also known as ideal contents scale. This value is
-    recorded any time the ideal contents scale changes. Some examples of this
-    are pinch-zoom and JavaScript transform changes.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.ImageDecodeTaskDurationUs" units="microseconds">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    This metric records the duration of an image decode in the compositor. It is
-    recorded every time we decode an image. It is suffixed by the type of
-    rasterization we're in (either Gpu or Software).
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.InvalidationRegionApproximateRectCount"
-    units="rects">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of rects inside of a PictureLayer's invalidation region per commit.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.LanguageDetection" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time to determine the page language. This is done after the page has been
-    loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%">
-  <obsolete>
-    Deprecated as of 02/2015.  No longer generated.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    The ratio of LCDText CC Layers / candidate LCDText layers. Recorded in
-    LayerTreeHost, after LayerTreeHostCommon::CalculateDrawProperties() has
-    computed the properties we need. Only recorded for the first 50 frames of
-    every page.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%">
-  <obsolete>
-    Deprecated as of 02/2015.  No longer generated.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    The ratio of CC Layers which are candidates for LCDText AA / total picture
-    or content Layers.  Recorded in LayerTreeHost, after
-    LayerTreeHostCommon::CalculateDrawProperties() has computed the properties
-    we need. Only recorded for the first 50 frames of every page.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.LoadType" enum="LoadType">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Probability distribution for enumerated varieties of page loads.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.LockExistingCachedImage" enum="BooleanSuccess">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    For each attempted lock of a cached image, records whether it was
-    successful.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.MainThreadGestureScrollReason"
-    enum="MainThreadScrollingReason">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Ideally we'd always scroll on the impl thread, but there are a variety of
-    situations where we need to scroll on main. We should try to drive these
-    down. For every gesture, we record whether or not the scroll occurred on the
-    main thread, and if it did, what the reason was.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.MainThreadWheelScrollReason"
-    enum="MainThreadScrollingReason">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    Ideally we'd always scroll on the impl thread, but there are a variety of
-    situations where we need to scroll on main. We should try to drive these
-    down. For every wheel tick, we record whether or not the the scroll occurred
-    on the main thread, and if it did, what the reason was.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountCulled_Draw" units="NormalizedPixels">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels that culling prevented being drawn to the screen, recorded
-    as 10 times the percentage of the viewport that these pixels cover. This is
-    collected once per frame while it is being drawn to the screen in the
-    compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels known to be opaque, recorded as 10 times the percentage of
-    the viewport that these pixels cover.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels painted by WebKit into main memory, recorded as 10 times
-    the percentage of the viewport that these pixels cover. This is collected
-    once per commit from WebKit to the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels not known to be opaque opaque, recorded as 10 times the
-    percentage of the viewport that these pixels cover.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw">
-  <obsolete>
-    Deprecated 02/2017 in Issue 675840.
-  </obsolete>
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    For each tile that was ready to draw at some point, logs whether the tile
-    was actually used in a draw. This is logged at tile destruction time.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.Renderer.PartialRasterPercentageSaved" units="%">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Percentage of pixels which would have been rastered, but were skipped due to
-    the partial raster optimization. Logged for each raster task run in a
-    Renderer process. The histogram is suffixed by the RasterBufferProvider
-    which is in use.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.renderPassCount">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    The number of render passes (or render targets) in the renderer's frame. If
-    the value is more than one, then an intermediate rendering target must be
-    used during the rendering of the frame for each render pass greater than
-    one.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.RequestToFinish" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot;==
-    time when user requested document.  &quot;Finish&quot;==after onload() and
-    all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.RequestToStart" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
-    time when user requested document. &quot;Start&quot;== time when renderer
-    requested load of document, after any unload of last document.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.ResourcePoolMemoryUsage" units="MB">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Size of the in-use portion of the ResourcePool. Recorded each time resources
-    are reclaimed after tile work completes.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.Snapshot">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>Time to capture a renderer snapshot.</summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time between frames when the software renderer is being used, as measured on
-    the compositor thread. This is collected once per frame while it is being
-    drawn to the screen in the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>Time between frames when the page is not GPU accelerated.</summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareImageDecodeState"
-    enum="SoftwareImageDecodeState">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Software image decode usage statistics. Images are decoded and locked prior
-    to raster; this indicates how that decode is used during tile management.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareImageDecodeState.FirstLockWasted"
-    enum="BooleanWasted">
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Indication whether the first lock of an image decode was wasted (image was
-    not used). Images are decoded and locked prior to raster; this indicates
-    whether the decode was used or not during the first lock.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwarePaintDurationMS">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time spent by WebKit painting the page, in milliseconds, when the page is
-    not GPU accelerated.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwarePaintMegapixPerSecond">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    WebKit paint throughput, measured in megapixels per second, when the page is
-    not GPU accelerated.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.StartToCommit" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
-    when renderer requested load of document, after any unload of last document.
-    &quot;Commit&quot;== time when renderer got first byte of document.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.StartToFinish" units="ms">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
-    when renderer requested load of document, after any unload of last document.
-    &quot;Finish&quot;==after onload() and all resources are loaded.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.TextureCopyLatency" units="microseconds">
-  <owner>reveman@chromium.org</owner>
-  <summary>
-    Time between the issue of a texture copy operation and detecting that it has
-    completed as measured by the GPU process.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.TextureGpuUploadTimeUS">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    The number of microseconds it took to upload a tile's full texture as
-    measured on the GPU process.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.Thumbnail">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>Time to capture a renderer thumbnail.</summary>
-</histogram>
-
-<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles">
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of tiles that culling prevented being uploaded to texture memory.
-    This is an approximation and is recorded as a 100 times the percentage of
-    the number of tiles, of default size, needed to cover the viewport. This is
-    collected once per commit from WebKit to the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels">
-  <obsolete>
-    Deprecated as of 04/2012, replaced with Renderer4.tileCountCulled_Upload.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels that culling prevented being uploaded to texture memory,
-    normalized to the viewport size. This is collected once per commit from
-    WebKit to the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels">
-  <obsolete>
-    Renamed to Renderer4.pixelCountOpaque_Upload.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels uploaded to texture memory and known to be opaque,
-    normalized to the viewport size. This is collected once per commit from
-    WebKit to the compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountTranslucent"
-    units="NormalizedPixels">
-  <obsolete>
-    Renamed to Renderer4.pixelCountTranslucent_Upload.
-  </obsolete>
-  <owner>wiltzius@chromium.org</owner>
-  <summary>
-    Number of pixels uploaded to texture memory and not known opaque, normalized
-    to the viewport size.  This is collected once per commit from WebKit to the
-    compositor.
-  </summary>
-</histogram>
-
-<histogram name="Renderer4.WheelScrollingThreadStatus"
-    enum="ScrollingThreadStatus">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    For every wheel tick, we record whether the scroll occurred on the main
-    thread, on the compositor thread, or on the compositor thread but blocked on
-    the main thread. The last case will happen when there is a blocking event
-    listener.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad" units="%">
-  <owner>altimin@chromium.org</owner>
-  <summary>
-    Renderer main thread load when renderer is backgrounded, i.e. percentage of
-    time spent on running tasks.
-
-    This metric is emitted when the renderer main thread task is completed or
-    renderer is backgrounded or foregrounded, at most once per second per
-    renderer amortized.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.ExpectedTaskQueueingDuration" units="ms">
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    The estimated queueing duration which would be observed for additional high
-    priority tasks posted to the RendererScheduler. Recorded for each 1000 ms
-    window.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad" units="%">
-  <owner>altimin@chromium.org</owner>
-  <summary>
-    Renderer main thread load when renderer is foregrounded, i.e. percentage of
-    time spent on running tasks.
-
-    This metric is emitted when the renderer main thread task is completed or
-    renderer is backgrounded or foregrounded, at most once per second per
-    renderer amortized.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.NumberOfTasksPerQueueType"
-    enum="RendererSchedulerTaskQueueType">
-  <owner>altimin@chromium.org,alexclarke@chromium.org</owner>
-  <summary>
-    The number of completed renderer tasks split per task queue type. Used to
-    monitor usage of each type of task queues. Reported each time when task is
-    completed.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.TaskQueueManager.DelayedTaskLateness"
-    units="ms">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>
-    The delta between when a delayed task was scheduled to run and when the
-    RendererScheduler actually ran it. Note: to reduce overhead only 10% of
-    tasks are sampled.
-  </summary>
-</histogram>
-
-<histogram
-    name="RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration"
-    units="ms">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>
-    The queueing duration for non-delayed tasks posted to the RendererScheduler.
-    This metric is only recorded if TrackingInfo::time_posted is set (i.e. not
-    on android). Note: to reduce overhead only 10% of tasks are sampled.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.TaskTime" units="microseconds">
-  <owner>sunyunjia@chromium.org</owner>
-  <owner>tdresser@chromium.org</owner>
-  <summary>
-    The duration of every task queued in the _renderer_ scheduler to see the
-    distribution of the task duration.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.UserModel.GestureDuration" units="ms">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>Duration of gestures (scrolls and pinches).</summary>
-</histogram>
-
-<histogram name="RendererScheduler.UserModel.GesturePredictedCorrectly"
-    units="GesturePredictionResult">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>Whether a user gesture was predicted correctly.</summary>
-</histogram>
-
-<histogram name="RendererScheduler.UserModel.GestureStartTimeSinceModelReset"
-    units="ms">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>
-    Time between when the UserModel was last reset (which happens on navigation)
-    and a gesture starting.
-  </summary>
-</histogram>
-
-<histogram name="RendererScheduler.UserModel.TimeBetweenGestures" units="ms">
-  <owner>alexclarke@chromium.org</owner>
-  <summary>Time between subsequent gestures (scrolls and pinches).</summary>
-</histogram>
-
-<histogram name="RendererSyncIPC.ElapsedTime" units="ms">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    Roundtrip times for synchronous IPC calls from the renderer to browser.
-  </summary>
-</histogram>
-
-<histogram name="RenderViewContextMenu.OpenLinkAsUser" enum="OpenLinkAsUser">
-  <owner>jochen@chromium.org</owner>
-  <summary>
-    State of the profile that is activated via the &quot;Open Link as User&quot;
-    menu. Logged when one of the &quot;Open Link as User&quot; context menu
-    options is selected.
-  </summary>
-</histogram>
-
-<histogram name="RenderViewContextMenu.OpenLinkAsUserProfilesState"
-    enum="OpenLinkAsUserProfilesState">
-  <owner>jochen@chromium.org</owner>
-  <summary>
-    Whether or not other profiles are active when the &quot;Open Link as
-    User&quot; context menu is shown. Logged when the context menu is created.
-  </summary>
-</histogram>
-
-<histogram name="RenderViewContextMenu.OpenLinkAsUserShown" units="profiles">
-  <owner>jochen@chromium.org</owner>
-  <summary>
-    Count of the profiles shown for the &quot;Open Link as User&quot; context
-    menu. Logged when the context menu is created.
-  </summary>
-</histogram>
-
-<histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>Count of renderer view context menu items shown.</summary>
-</histogram>
-
-<histogram name="RenderViewContextMenu.Used" enum="RenderViewContextMenuItem">
-  <owner>vitalybuka@chromium.org</owner>
-  <summary>
-    Count of renderer view context menu items (Only commands now) used.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.DismissalState"
-    enum="AutofillDialogDismissalState">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    The state of the requestAutocomplete() dialog when it was dismissed.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.InitialUserState"
-    enum="AutofillDialogInitialUserState">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    The initial state of a user that's interacting with a freshly shown
-    requestAutocomplete() dialog.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.PopupInDialog"
-    enum="AutofillDialogPopupEvent">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    User interactions with the Autofill popup shown while filling an
-    requestAutocomplete() dialog.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the frequency of security warnings and errors in the
-    RequestAutocomplete dialog.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration" units="ms">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the duration for which an requestAutocomplete() dialog was shown.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the duration for which an requestAutocomplete() dialog was shown,
-    in cases where the user ended up canceling out of the dialog.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the duration for which an requestAutocomplete() dialog was shown,
-    in cases where the user ended up accepting the dialog.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures how users are interacting with the requestAutocomplete() dialog UI.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the duration of time it takes for the requestAutocomplete() UI to
-    be actionable by the user after it is shown.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the frequency of errors in communicating with the Google Online
-    Wallet server.
-  </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.WalletRequiredActions"
-    enum="WalletRequiredActions">
-  <obsolete>
-    Deprecated as of 5/5/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the frequency of required user actions returned by the Google
-    Online Wallet server.
-  </summary>
-</histogram>
-
-<histogram name="Reset.ChromeOS.PowerwashDialogShown"
-    enum="PowerwashDialogViewType">
-  <owner>merkulova@chromium.org</owner>
-  <summary>
-    Records the number of times the factory reset dialog was shown. Grouped by
-    the viewtype.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.CachePattern"
-    enum="HttpCachePattern">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    Like HttpCache.Pattern but only for requests made during speculative
-    prefetch. Logged per successful request.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.DatabaseReadiness" units="%">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    This metric measures the host coverage of the predictor database: On each
-    navigation, it records what percentage of the top X history entries are
-    found in the predictor DB. Caveats: (1) This metric is only recorded once
-    the user has accumulated enough browsing history, implemented as a minimum
-    threshold of total page visits by the user. (2) This metric is sampled, so
-    it's actually only recorded for 1 out of every K navigations.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.DbStringTooLong">
-  <obsolete>
-    Deprecated October 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    A boolean that used to indicate a corner case when certain resources are not
-    written to the Predictor database becuase their URLs are too long. We
-    monitor this number to ensure that we do not discard too many resources.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HavePredictionsForUrl">
-  <obsolete>
-    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    A boolean that indicates if the speculative resource prefetch predictor has
-    predictions for a Navigation. This is updated on each navigations and helps
-    us determine the coverage of the predictor.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HavePrefetchResults">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    A boolean that used to indicate a corner case when we may not have prefetch
-    results even though prefetching is enabled and predictions are present,
-    because another navigation in the same tab canceled the prefetching of the
-    previous load.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HistoryVisitCountForUrl">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    The visit count of a URL in the history database, measured when the onload
-    fires for the URL. Helpful in figuring out what visit count should be used
-    to start learning about a URL.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Assuming a fixed number (25 or 50) of URLs could be prefetched max, how many
-    would be available for prefetch (after we apply our heuristics for picking
-    subresources to prefetch for a navigation).
-
-    This stat is recorded when the predictor uses the host of the main frame url
-    as the key for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the cache restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the host of the main frame url
-    as the key for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the network restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the host of the main frame url
-    as the key for prediction.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Similar to ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork but
-    as a percent of the total number of resources the page actually fetched from
-    the network. This depcits the major gains that we can get.
-
-    This stat is recorded when the predictor uses the host of the main frame url
-    as the key for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page not used
-    by the page, restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the host of the main frame url
-    as the key for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchCancelled" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    prefetches cancelled as a percentage of the total number of resources that
-    the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchFailed" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    prefetches failed as a percentage of the total number of resources that the
-    predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheNotUsed"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from cache while prefetching but were not
-    requested by the page, as a percentage of the total number of resources that
-    the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromCache"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from cache while prefetching and also came
-    from the cache when the page requested it, as a percentage of the total
-    number of resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from cache while prefetching but came from
-    the network when the page requested it, as a percentage of the total number
-    of resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkNotUsed"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from network while prefetching but were not
-    requested by the page, as a percentage of the total number of resources that
-    the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromCache"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from network while prefetching but came from
-    the cache when the page requested it, as a percentage of the total number of
-    resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of
-    successful prefetches that came from cache while prefetching and also came
-    from the network when the page requested it, as a percentage of the total
-    number of resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Host.PrefetchNotStarted" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of resources
-    that were prefetchable but were not prefetched as a percentage of
-    prefetchable resources.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HostTableHostCount">
-  <obsolete>
-    Deprecated January 2017. This is effectively the same as
-    ResourcePrefetchPredictor.HostTableRowCount2 after refactoring of the
-    predictor database.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The count of number of unique hosts in the HostTable, i.e. the number of
-    hosts that the database has prediction data for. This data is useful for
-    determining the recall/precision as a function of the number of hosts that
-    need to be tracked by the database. Measured at startup.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HostTableRowCount">
-  <obsolete>
-    Deprecated January 2017. Replaced by
-    ResourcePrefetchPredictor.HostTableRowCount2.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The count of number of rows in the HostTable. This is effecively the number
-    of (host, resource URL) pairs in the database. This is measured at startup
-    and used to get an estimate of the data size.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.HostTableRowCount2" units="hosts">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    The number of rows in the HostTable. This is effectively the number of hosts
-    in the database. This is measured at startup and used to get an estimate of
-    the data size.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.LearningCount" units="urls">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    When the prefetch predictor has resources in the local database for a given
-    navigation, the count of predicted urls.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.LearningPrecision" units="%">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    When the prefetch predictor has resources in the local database for a given
-    navigation, the precision of the predictions, in percentage. This is
-    computed as 100 \times \frac{correct predictions}{predictions}.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.LearningRecall" units="%">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    When the prefetch predictor has resources in the local database for a given
-    navigation, the recall of the predictions, in percentage. This is computed
-    as 100 \times \frac{correct predictions}{all prefetchable subresources}.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.MainFrameRequestStats"
-    enum="ResourcePrefetchPredictorMainFrameRequestStats">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    Records stats about main frame navigations. Records the total number of
-    requests/responses/redirects for main frame urls along with the numbers for
-    how often the predictor can process such events. This is useful to figure
-    out what percentange of requests are handled by the predictor and also for
-    sanity checking the other stats.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.NavigationEvent"
-    enum="ResourcePrefetchPredictorNavigationEvent">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Records stats about various interesting events such as - request start,
-    response start, redirect, onload, etc during the load of a main frame.
-    Essential for understanding the complete life of a navigation request start
-    to the onload fire and the events that occur in between.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.NavigationStatus"
-    enum="ResourcePrefetchPredictorNavigationStatus">
-  <obsolete>
-    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The status of various navigations from the view point of the 'onload' event.
-    Since we measure the prediction accuracy and learn navigation subresources
-    on the onload event, it is useful to know how many of the navigations are
-    abandoned before 'onload' fires.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.NetworkType"
-    enum="ResourcePrefetchPredictorNetworkType">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Records the number of pages on each type of network after a page is loaded.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PLT" units="ms">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Page load time. It starts from when the main frame URL request is sent out
-    to when the main frame document load is completed.
-
-    This is recorded for both prefetched and non-prefetched pages.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PredictedPrefetchCount">
-  <obsolete>
-    Deprecated 01/2013. Replaced with specific ones for Url and Host.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Assuming a fixed number of URLs could be prefetched max, how many would be
-    available for prefetch (after we apply our heuristics for picking
-    subresources to prefetch for a navigation).
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromCache">
-  <obsolete>
-    Deprecated 01/2013. Replaced with specific ones for Url and Host.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the cache restricted to some max predictions.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromNetwork">
-  <obsolete>
-    Deprecated 01/2013. Replaced with specific ones for Url and Host.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the network restricted to some max predictions.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork">
-  <obsolete>
-    Deprecated 01/2013. Replaced with specific ones for Url and Host.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Similar to ResourcePrefetchPredictor.Predicted.PrefetchFromNetwork but as a
-    percent of the total number of resources the page actually fetched from the
-    network. This depcits the major gains that we can get.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PredictedPrefetchMisses">
-  <obsolete>
-    Deprecated 01/2013. Replaced with specific ones for Url and Host.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page not used
-    by the page, restricted to some max predictions.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchedCount" units="count">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    The count of successfully prefetched subresources for a single page.
-    Recorded after all subresource prefetches have reached a terminal
-    success/failure state.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchedSizeKB" units="KB">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    The total amount of data consumed by predictor for a single page. Only
-    successfully finished requests taken into account. Recorded after all
-    subresource prefetches have reached a terminal success/failure state.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.Cached"
-    units="count">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Number of resources that were prefetched and requested by a page load, for
-    cached requests. Logged after the prefetcher completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.NotCached"
-    units="count">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Number of resources that were prefetched and requested by a page load, for
-    non cached requests. Logged after the prefetcher completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchHitsSizeKB" units="KB">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Amount of useful data fetched from the network for a prefetch request. This
-    is the total size of the resources accounted for in
-    ResourcePrefetchPredictor.PrefetchHitsCount.NotCached. Logged after the
-    prefetcher completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchingDuration" units="ms">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    Amount of time available for prefetching. Specifically, this is a time
-    interval between corresponding StartPrefetching() and StopPrefetching()
-    calls. This is recorded for both prefetched and non-prefetched pages.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.Cached"
-    units="count">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Number of resources that were prefetched but not requested by a page load,
-    for cached requests. Logged after the prefetcher completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.NotCached"
-    units="count">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Number of resources that were prefetched but not requested by a page load,
-    for non cached requests, that is waste. Logged after the prefetcher
-    completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.PrefetchMissesSizeKB" units="KB">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    Amount of wasted data fetched from the network for a prefetch request. This
-    is the total size of the resources accounted for in
-    ResourcePrefetchPredictor.PrefetchMissesCount.NotCached. Logged after the
-    prefetcher completes.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.RedirectStatus"
-    enum="ResourcePrefetchPredictorRedirectStatus">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    When the prefetch predictor has resources in the local database for a given
-    navigation, records stats about whether redirect was predicted correctly or
-    incorrectly.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.ReportingEvent"
-    enum="ResourcePrefetchPredictorReportingEvent">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    Records stats about various interesting events such as - when partial or all
-    of history is cleared. It will include events which do not necessarily
-    happen during a navigation (which are reported in
-    ResourcePrefetchPredictor.NavigationEvent).
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.RequestStats"
-    enum="ResourcePrefetchPredictorRequestStats">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    Records stats about requests, redirects, and responses observed by the
-    ResourcePrefetchPredictorObserver. These stats are useful as a baseline for
-    other stats.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.ResourceStatus"
-    enum="ResourcePrefetchPredictorResourceStatus">
-  <obsolete>
-    Deprecated 08/2016 with the removal of the recording code.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The distribution of the reasons for which subresources are ignored during
-    prefetching. This helps us prioritze reasons we should further investigate
-    to increase coverage. This is reported as a bit map and every status will be
-    a bitwise or of the underlying reasons.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Assuming a fixed number of URLs could be prefetched max (25 or 50), how many
-    would be available for prefetch (after we apply our heuristics for picking
-    subresources to prefetch for a navigation).
-
-    This stat is recorded when the predictor uses the main frame url as the key
-    for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the cache restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the main frame url as the key
-    for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page and served
-    from the network restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the main frame url as the key
-    for prediction.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Similar to ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork but as
-    a percent of the total number of resources the page actually fetched from
-    the network. This depcits the major gains that we can get.
-
-    This stat is recorded when the predictor uses the main frame url as the key
-    for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    When we have predictions for a navigation, we measure the accuracy of the
-    predictions against the actual resources downloaded. This histogram gives
-    the distribution of the predictions that were fetched by the page not used
-    by the page, restricted to some max predictions (25 or 50).
-
-    This stat is recorded when the predictor uses the main frame url as the key
-    for prediction.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchCancelled" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of prefetches
-    cancelled as a percentage of the total number of resources that the
-    predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchFailed" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of prefetches
-    failed as a percentage of the total number of resources that the predictor
-    tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheNotUsed"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from cache while prefetching but were not requested by
-    the page, as a percentage of the total number of resources that the
-    predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromCache"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from cache while prefetching and also came from the
-    cache when the page requested it, as a percentage of the total number of
-    resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from cache while prefetching but came from the network
-    when the page requested it, as a percentage of the total number of resources
-    that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkNotUsed"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from network while prefetching but were not requested
-    by the page, as a percentage of the total number of resources that the
-    predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromCache"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from network while prefetching but came from the cache
-    when the page requested it, as a percentage of the total number of resources
-    that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromNetwork"
-    units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on the main frame URL, the percentage of successful
-    prefetches that came from cache while prefetching and also came from the
-    network when the page requested it, as a percentage of the total number of
-    resources that the predictor tried to prefetch.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.Url.PrefetchNotStarted" units="%">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    For prefetching based on host of main frame URL, the percentage of resources
-    that were prefetchable but were not prefetched as a percentage of
-    prefetchable resources.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.UrlTableMainFrameUrlCount">
-  <obsolete>
-    Deprecated September 2016. This is effectively the same as
-    ResourcePrefetchPredictor.UrlTableRowCount2 after refactoring of the
-    predictor database.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The count of number of unique main frame urls in the UrlTable, i.e. the
-    number of webpages that the database has prediction data for. This data is
-    useful for determining the recall/precision as a function of the number of
-    webpages that need to be tracked by the database. Measured at startup.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory">
-  <obsolete>
-    Deprecated October 2012. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The count of number of unique main frame urls that are deleted from the URL
-    table at startup because they are no longer in history. Essential to figure
-    out how much data we are loosing out.
-  </summary>
-</histogram>
-
-<histogram
-    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistoryPercent"
-    units="%">
-  <obsolete>
-    Deprecated October 2012. No longer recorded.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    Same as ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory
-    but recording percentage of URLs in the table rather than absolute numbers.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.UrlTableRowCount">
-  <obsolete>
-    Deprecated January 2017. Replaced by
-    ResourcePrefetchPredictor.UrlTableRowCount2.
-  </obsolete>
-  <owner>zhenw@chromium.org</owner>
-  <summary>
-    The count of number of rows in the UrlTable. This is effecively the number
-    of (main frame URL, resource URL) pairs in the database. This is measured at
-    startup and used to get an estimate of the data size.
-  </summary>
-</histogram>
-
-<histogram name="ResourcePrefetchPredictor.UrlTableRowCount2" units="urls">
-  <owner>alexilin@chromium.org</owner>
-  <summary>
-    The number of rows in the UrlTable. This is effectively the number of main
-    frame URLs in the database. This is measured at startup and used to get an
-    estimate of the data size.
-  </summary>
-</histogram>
-
-<histogram name="ResourceReporter.BrowserProcess.CpuUsage"
-    enum="ResourceReporterCpuUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The cpu usage range reported for the browser process when the chromeos
-    device memory pressure (which is the percentage of total memory used by the
-    system) is critical. This is emitted only when memory pressure changes from
-    a low pressure to a higher pressure.
-  </summary>
-</histogram>
-
-<histogram name="ResourceReporter.BrowserProcess.MemoryUsage"
-    enum="ResourceReporterMemoryUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The system memory usage range reported for the browser process when the
-    chromeos device memory pressure (which is the percentage of total memory
-    used by the system) is critical. This is emitted only when memory pressure
-    changes from a low pressure to a higher pressure.
-  </summary>
-</histogram>
-
-<histogram name="ResourceReporter.GpuProcess.CpuUsage"
-    enum="ResourceReporterCpuUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The cpu usage range reported for the GPU process when the chromeos device
-    memory pressure (which is the percentage of total memory used by the system)
-    is critical. This is emitted only when memory pressure changes from a low
-    pressure to a higher pressure.
-  </summary>
-</histogram>
-
-<histogram name="ResourceReporter.GpuProcess.MemoryUsage"
-    enum="ResourceReporterMemoryUsage">
-  <owner>afakhry@chromium.org</owner>
-  <summary>
-    The system's RAM memory usage range reported for the GPU process when the
-    chromeos device memory pressure (which is the percentage of total memory
-    used by the system) is critical. This is emitted only when memory pressure
-    changes from a low pressure to a higher pressure.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.ClientLoadedTime.Active">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the ResourceScheduler is informed of a
-    Client's creation or starts loading and when that Client finishes loading in
-    a Client which has been user-observable the entire time.
-
-    Note: Will not include time for the main resource if PlzNavigate is in use.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.ClientLoadedTime.Background">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the ResourceScheduler is informed of a
-    Client's creation or starts loading and when that Client finishes loading in
-    a Client which has been background the entire time.
-
-    Note: Will not include time for the main resource if PlzNavigate is in use.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.ClientLoadedTime.Other">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the ResourceScheduler is informed of a
-    Client's creation or starts loading and when that Client finishes loading in
-    a Client which has switched between Active and Background.
-
-    Note: Will not include time for the main resource if PlzNavigate is in use.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between the last time that a Client becomes
-    user-observable and when that Client finishes loading in a Client that was
-    user-observable when the load completed.
-
-    Note: Will not include time for the main resource if PlzNavigate is in use.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.NumSkippedScans.ScheduleStart"
-    units="requests">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The number of LoadAnyStartablePendingRequests scans that were skipped due to
-    smarter task scheduling around reprioritization.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeDeferred.Active">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time the ResourceScheduler is throttling a request after
-    WillStartRequest is called for a request in a client that was
-    user-observable at creation and start time.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeDeferred.Background">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time the ResourceScheduler is throttling a request after
-    WillStartRequest is called for a request in a client that was background at
-    creation and start time.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeDeferred.Other">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time the ResourceScheduler is throttling a request after
-    WillStartRequest is called on a request without a Client or a request in a
-    Client which is in a different state since the request was made. Note that
-    this won't capture requests which have switched state an even number of
-    times. Switching from Active to Background back to Active will be recorded
-    in the Active version of this histogram.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeThrottled.Active">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the request was created and when the
-    ResourceScheduler stops throttling the request in a client that was
-    user-observable at creation and start time.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeThrottled.Background">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the request was created and when the
-    ResourceScheduler stops throttling the request in a client that was
-    background at creation and start time.
-  </summary>
-</histogram>
-
-<histogram name="ResourceScheduler.RequestTimeThrottled.Other">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <owner>aiolos@chromium.org</owner>
-  <summary>
-    The amount of time between when the request was created and when the
-    ResourceScheduler stops throttling a request without a client or a request
-    in a Client which is in a different state since the request was made. Note
-    that this won't capture requests which have switched state an even number of
-    times. Switching from Active to Background back to Active will be recorded
-    in the Active version of this histogram.
-  </summary>
-</histogram>
-
-<histogram name="SadTab.Created" enum="SadTabKind">
-  <obsolete>
-    Replaced with Tabs.SadTab.* in R20.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Track number of times we built a sad tab page for a renderer crash or kill.
-    The user may not have seen the page if it was not the frontmost tab.
-  </summary>
-</histogram>
-
-<histogram name="SadTab.Displayed" enum="SadTabKind">
-  <obsolete>
-    Replaced with Tabs.SadTab.* in R20.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Track number of times the user actually saw a sad tab page for a renderer
-    crash or kill.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.EnabledSettingChanged" enum="BooleanEnabled">
-  <obsolete>
-    Not in the code anymore (10/2015).
-  </obsolete>
-  <owner>feng@chromium.org</owner>
-  <summary>
-    Records the user action that enables/disables safe browsing feature in the
-    Settings page on Android.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateResult"
-    enum="SBFileTypeUpdateResult">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The result of reading/parsing/accepting a new proto for the FileTypePolices
-    repo of file extensions and their meta data.
-
-      This is for the file types loaded from the component-update system. This
-    includes both those loaded from disk shortly after startup, and those
-    received over the network when the component version changes
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateTypeCount"
-    units="number of file types">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Number of file types (aka file extensions) present in the FileTypePolicies
-    proto loaded.
-
-      This is for the file types loaded from the component-update system. This
-    includes both those loaded from disk shortly after startup, and those
-    received over the network when the component version changes
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateVersion"
-    units="FileTypePolicies Version">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Integer version number citing which version of the proto data chrome just
-    loaded.  Latest version is in download_file_types.asciipb.
-
-      This is for the file types loaded from the component-update system. This
-    includes both those loaded from disk shortly after startup, and those
-    received over the network when the component version changes
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleResult"
-    enum="SBFileTypeUpdateResult">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The result of reading/parsing/accepting a new proto for the FileTypePolices
-    repo of file extensions and their meta data.
-
-      This is for the file types loaded from the resource bundle packaged with
-    Chrome, which is always loaded at startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleTypeCount"
-    units="number of file types">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Number of file types (aka file extensions) present in the FileTypePolicies
-    proto loaded.
-
-      This is for the file types loaded from the resource bundle packaged with
-    Chrome, which is always loaded at startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleVersion"
-    units="FileTypePolicies Version">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Integer version number citing which version of the proto data chrome just
-    loaded.  Latest version is in download_file_types.asciipb.
-
-      This is for the file types loaded from the resource bundle packaged with
-    Chrome, which is always loaded at startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.GetV4HashHttpResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Network.Result.
-  </obsolete>
-  <owner>kcarattini@google.com</owner>
-  <summary>
-    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
-    GetHash or request finishes to capture the response code or error code for
-    that call.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.GetV4HashNetwork" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Network.Time.
-  </obsolete>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    The time that it took to receive a response from the Safe Browsing servers
-    for a V4 GetHash request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.GetV4HashResult"
-    enum="SafeBrowsingV4OperationResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Result.
-  </obsolete>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Track return status from V4 GetHash attempts. The buckets of this histogram
-    overlap, so the counts cannot be used as percentages.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ModuleBaseRelocation" units="BaseRelocationType">
-  <owner>csharp@chromium.org</owner>
-  <owner>krstnmnlsn@chromium.org</owner>
-  <summary>
-    A windows only historgram. Records when an unknown base relocation type is
-    encountered while reading the reloc table of a loaded module.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.NavigationObserver.IPAddressCleanUpCount">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Count of how many ResolvedIPAddresses get removed in each periodic clean up.
-    This is a rough estimation of the number of IPs associated with main frame
-    and sub-frame navigations every two minutes.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.NavigationObserver.NavigationEventCleanUpCount">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Count of how many NavigationEvents get removed in each periodic clean up.
-    This is a rough estimation of the number of navigations every two minutes.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.NotificationImageReporter.NetError"
-    enum="NetErrorCodes">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The net error code for failed reports sent by NotificationImageReporter, or
-    net::OK if successful.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ParseV4HashResult"
-    enum="SafeBrowsingParseV4HashResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Parse.Result.
-  </obsolete>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    Track the parsing results of a status 200 GetV4Hash request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ParseV4UpdateResult"
-    enum="SafeBrowsingParseV4UpdateResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4Update.Parse.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the parsing results of a status 200 GetV4Update request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.Extended" enum="BooleanEnabled">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Whether the Safe Browsing extended reporting service is currently enabled.
-    Recorded for all non-Incognito profiles on profile startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.General" enum="BooleanEnabled">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Whether the Safe Browsing service is currently enabled. Recorded for all
-    non-Incognito profiles on profile startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.SawInterstitial" enum="Boolean">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    Whether the current user has ever seen a security interstitial. Recorded for
-    all non-Incognito profiles on profile startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.Scout" enum="NullableBoolean">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    Tracks the Extended Reporting preference transition. Suffixes track which
-    opt-in text users are viewing and the values of each Extended Reporting
-    preference. Recorded for all non-Incognito profiles on profile startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.Scout.Decision"
-    enum="ScoutActiveExtendedReportingPref">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    Tracks user decisions about the Extended Reporting opt-in on security
-    interstitials by comparing the initial and final states of the preference.
-    Suffixes specify the type of change that was made. Recorded when a user
-    closes a security interstitial or navigates away.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.Scout.SetPref" enum="BooleanEnabled">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    Tracks the Extended Reporting preference being changed. Suffixes track which
-    Extended Reporting preference was changed, and the specific UI that the
-    change was made on. Recorded when a user changes the preference on any UI.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.Pref.Scout.Transition"
-    enum="ScoutTransitionReason">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    Tracks reasons for the Extended Reporting preference transition, such as a
-    user entering an experiment group or seeing a security interstitial for the
-    first time. Recorded for all non-Incognito profiles on profile startup.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ReferrerAttributionResult"
-    enum="SafeBrowsingAttributionResultTypes">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The result of referrer attribution, including different types of success or
-    failure. This is incremented each time a safe browsing ping or download ping
-    is generated.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ReferrerHasInvalidTabID" enum="BooleanInvalid">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Number of times referrer attribution encounters an invalid tab ID. This is
-    incremented a safe browsing ping or download ping is generated and an
-    invalid tab ID is encountered during attribution.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ReferrerURLChainSize">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The length of referrer URL chain we get from referrer attribution. This is
-    incremented each time a safe browsing ping or download ping is generated.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.ThreatReport.DomIsAmbiguous" enum="Boolean">
-  <owner>lpz@chromium.org</owner>
-  <summary>
-    A threat report contains a DOM hierarchy that is ambiguous. This indicates
-    that the parent/child relationship among the elements in the DOM may not be
-    accurate.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.UnverifiedDownloads.Allowed"
-    enum="SBClientDownloadExtensions">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    File types that were allowed to be downloaded without verifying their
-    content nor their source URLs with Safe Browsing.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedByWhitelist"
-    enum="SBClientDownloadExtensions">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    File types that were allowed to be downloaded without verifying their
-    content nor their source URLs with Safe Browsing due to the requestor URL
-    being on the Safe Browsing whitelist. Each sample recorded on this histogram
-    is also recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedDueToDisabledService"
-    enum="SBClientDownloadExtensions">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    File types that were allowed to be downloaded without verifying their
-    content nor their source URLs with Safe Browsing due to the SafeBrowsing
-    service being disabled. Each sample recorded on this histogram is also
-    recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.UnverifiedDownloads.AlternateExtensionCount">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Count of alternate extensions that were supplied when attempting to download
-    a file without verifying their content nor their source URLs with Safe
-    Browsing.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.UnverifiedDownloads.Blocked"
-    enum="SBClientDownloadExtensions">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    File types that were blocked from downloaded without verifying their content
-    nor their source URLs with Safe Browsing.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4AddUnlumpedHashes.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to copy the SafeBrowsing list update as a string,
-    into a map which contains the hash prefixes that are looked up when a client
-    queries for the reputation of a resource (URL, full hash, etc.).
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4AddUnlumpedHashesTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4AddUnlumpedHashes.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to copy the SafeBrowsing list update as a string,
-    into a map which contains the hash prefixes that are looked up when a client
-    queries for the reputation of a resource (URL, full hash, etc.).
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ApplyUpdateResult"
-    enum="SafeBrowsingV4ApplyUpdateResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4*.ApplyUpdate.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of applying the update fetched from the PVer4 service for a
-    particular store.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk"
-    enum="SafeBrowsingV4ApplyUpdateResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of applying an update read from disk after parsing it
-    successfully as a protobuf.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Database.Size" units="KB">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The size of the SafeBrowsing database or file on disk in kilobytes, after
-    reading it from disk on startup and after a database update has occurred.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4DatabaseOpen.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The time it takes to parse and load the SafeBrowsing database from disk, in
-    milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4DecodeAdditionsResult"
-    enum="SafeBrowsingV4DecodeResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4*.DecodeAdditions.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of additions of 4-byte
-    hash prefixes. This is logged once per store, per update containing
-    Rice-encoded additions.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4DecodeAdditionsTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4*.DecodeAdditions.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded additions to the
-    blacklist into raw format.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4DecodeRemovalsResult"
-    enum="SafeBrowsingV4DecodeResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of indexes of hash
-    prefixes to remove since the last update. This is logged once per store, per
-    update containing Rice-encoded removals.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4DecodeRemovalsTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded removals from the
-    blacklist into raw format.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4FullHashCacheResult"
-    enum="SafeBrowsingV4FullHashCacheResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.CacheHit.Result.
-  </obsolete>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>Track cache hits for V4 full hashes.</summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.CacheHit.Result"
-    enum="SafeBrowsingV4FullHashCacheResult">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>Track cache hits for V4 full hashes.</summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.Check.Result"
-    enum="SafeBrowsingV4GetHashCheckResult">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>Track get hash response hits for V4 full hash requests.</summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.Network.Result"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>kcarattini@google.com</owner>
-  <owner>vakh@google.com</owner>
-  <summary>
-    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
-    GetHash or request finishes to capture the response code or error code for
-    that call.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.Network.Time" units="ms">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The time that it took to receive a response from the Google SafeBrowsing
-    servers for a full hash request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.Parse.Result"
-    enum="SafeBrowsingParseV4HashResult">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the parsing results of a status 200 GetV4Hash request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHash.Result"
-    enum="SafeBrowsingV4OperationResult">
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track return status from V4 GetHash attempts. The buckets of this histogram
-    overlap, so the counts cannot be used as percentages.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHashCheckResult"
-    enum="SafeBrowsingV4GetHashCheckResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Check.Result.
-  </obsolete>
-  <owner>kcarattini@chromium.org</owner>
-  <owner>vakh@chromium.org</owner>
-  <summary>Track get hash response hits for V4 full hash requests.</summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetHashNetwork.Time" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4GetHash.Network.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The time that it took to receive a response from the Google SafeBrowsing
-    servers for a full hash request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4GetPrefixMatches.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The time that it took to check a URL against our in-memory database. It is
-    dominated by the time to perform checks for CheckBrowseUrl.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4MergeUpdateTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4*.MergeUpdate.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to merge the existing state of the list with the
-    update. The update may have been received from the server, or it may have
-    just been read from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"
-    enum="SafeBrowsingV4ApplyUpdateResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of applying a full update for a store received from PVer4
-    SafeBrowsing service.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to process a SafeBrowsing list full update. It
-    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
-    V4ProcessFullUpdate.MergeUpdate.Time. Additionally, if the update is
-    Rice-encoded, it includes V4ProcessFullUpdate.DecodeAdditions.Time for each
-    prefix-sized list that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"
-    enum="SafeBrowsingV4DecodeResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of additions of 4-byte
-    hash prefixes. This is logged once per store, per update containing
-    Rice-encoded additions. This histogram is specific to processing full
-    updates received from the server.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"
-    units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded additions to the
-    blacklist into raw format when applying a full update to a store.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to merge the existing state of the list with a
-    full update received from the server.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessFullUpdateTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to process a SafeBrowsing list full update. It
-    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
-    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
-    V4DecodeAdditionsTime for each prefix-sized list that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"
-    enum="SafeBrowsingV4ApplyUpdateResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of applying a partial update for a store received from
-    PVer4 SafeBrowsing service.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"
-    units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to process a SafeBrowsing list partial update. It
-    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
-    SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time. Additionally, if the
-    update is Rice-encoded, it includes
-    V4ProcessPartialUpdate.DecodeRemovals.Time, and
-    V4ProcessPartialUpdate.DecodeAdditions.Time for each prefix-sized list
-    that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"
-    enum="SafeBrowsingV4DecodeResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of additions of 4-byte
-    hash prefixes. This is logged once per store, per update containing
-    Rice-encoded additions. This histogram is specific to processing partial
-    updates received from the server.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"
-    units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded additions to the
-    blacklist into raw format when applying a partial update to a store.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"
-    enum="SafeBrowsingV4DecodeResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of indexes of hash
-    prefixes to remove since the last update. This is logged once per store, per
-    update containing Rice-encoded removals.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"
-    units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded removals from the
-    blacklist into raw format when applying a partial update to a store.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"
-    units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to merge the existing state of the list with a
-    partial update received from the server.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ProcessPartialUpdateTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to process a SafeBrowsing list partial update. It
-    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
-    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
-    V4DecodeRemovalsTime, and V4DecodeAdditionsTime for each prefix-sized list
-    that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"
-    enum="SafeBrowsingV4ApplyUpdateResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of applying an ListUpdateResponse read from disk after
-    parsing it successfully as a protobuf.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to read, parse, and process a SafeBrowsing list
-    stored on disk. This happens at Chromium start-up. It includes
-    V4AddUnlumpedHashes.Time for each prefix-sized list, and
-    SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time. Additionally, if the file is
-    Rice-encoded, it includes V4ReadFromDisk.DecodeAdditions.Time for each
-    prefix-sized list that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"
-    enum="SafeBrowsingV4DecodeResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the result of decoding the Rice-encoded list of additions of 4-byte
-    hash prefixes. This is logged once per store, per Chrome launch. It is
-    specific to processing V4StoreFileFormat proto read from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to decode the Rice-encoded additions to the
-    blacklist into raw format when reading a store file from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time" units="ms">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to perform in-memory copy of the map of raw hash
-    prefixes read from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4ReadFromDiskTime" units="ms">
-  <obsolete>
-    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Records the time it takes to read, parse, and process a SafeBrowsing list
-    stored on disk. This happens at Chromium start-up. It includes
-    V4AddUnlumpedHashesTime for each prefix-sized list, and V4MergeUpdateTime.
-    Additionally, if the file is Rice-encoded, it includes V4DecodeAdditionsTime
-    for each prefix-sized list that's Rice-encoded.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4StoreRead.Result"
-    enum="SafeBrowsingV4StoreReadResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the parsing results of reading the SafeBrowsing V4 store file from
-    disk. Recorded every time a store is read from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4StoreReadResult"
-    enum="SafeBrowsingV4StoreReadResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4StoreRead.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the parsing results of reading the SafeBrowsing V4 store file from
-    disk. Recorded every time a store is read from disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4StoreVersionRead" units="version number">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Version of V4Store read from a store file. This would be useful in tracking
-    the usage and rollout of new V4Store versions.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4StoreWrite.Result"
-    enum="SafeBrowsingV4StoreWriteResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the results of writing the SafeBrowsing V4 store file to disk.
-    Recorded every time a store is written to disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4StoreWriteResult"
-    enum="SafeBrowsingV4StoreWriteResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4StoreWrite.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the results of writing the SafeBrowsing V4 store file to disk.
-    Recorded every time a store is written to disk.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Update.Network.Result"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Response or error codes when fetching updates from the SafeBrowsing PVer4
-    service.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Update.Parse.Result"
-    enum="SafeBrowsingParseV4UpdateResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track the parsing results of a status 200 GetV4Update request.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Update.ResponseSizeKB" units="KB">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Update.Result"
-    enum="SafeBrowsingV4OperationResult">
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track return status from V4 update attempts. The buckets of this histogram
-    overlap, so the counts cannot be used as percentages.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4Update.TimedOut" enum="BooleanTimedOut">
-  <owner>vakh@chromium.org</owner>
-  <summary>True if a PVer4 update request timed out.</summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4UpdateHttpResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <obsolete>
-    Replaced by SafeBrowsing.V4Update.Network.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Response or error codes when fetching updates from the SafeBrowsing PVer4
-    service.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4UpdateResponseSizeKB" units="KB">
-  <obsolete>
-    Replaced by SafeBrowsing.V4Update.ResponseSizeKB.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
-  </summary>
-</histogram>
-
-<histogram name="SafeBrowsing.V4UpdateResult"
-    enum="SafeBrowsingV4OperationResult">
-  <obsolete>
-    Replaced by SafeBrowsing.V4Update.Result.
-  </obsolete>
-  <owner>vakh@chromium.org</owner>
-  <summary>
-    Track return status from V4 update attempts. The buckets of this histogram
-    overlap, so the counts cannot be used as percentages.
-  </summary>
-</histogram>
-
-<histogram name="SB.BloomFilter" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The first stage check that measures the time that Chrome took to check if a
-    URL is present in our in-memory bloom filter.
-  </summary>
-</histogram>
-
-<histogram name="SB.BuildBloom">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD.</summary>
-</histogram>
-
-<histogram name="SB.Database" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The second stage check that measures the time that Chrome took to check if a
-    URL is present in our SQLite database.
-  </summary>
-</histogram>
-
-<histogram name="SB.DBCheck" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The second stage check that mesures the time that Chrome took to check if a
-    URL is present in our SQLite database. This time includes the filter check
-    time.
-  </summary>
-</histogram>
-
-<histogram name="SB.Delay" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This measures the time that SafeBrowsing actually delayed the browsing
-    experience. It records the difference between the time when Chrome would
-    have started reading the response for a URL and when the SafeBrowsing system
-    completed its check of that URL.
-  </summary>
-</histogram>
-
-<histogram name="SB.FilterCheck" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The first stage check that measures the time that Chrome took to check if a
-    URL is present in our in-memory hash table.
-  </summary>
-</histogram>
-
-<histogram name="SB.Network" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The third and final stage check that mesures the time that Chrome took to
-    get a response from the Google SafeBrowsing servers for a particular URL.
-  </summary>
-</histogram>
-
-<histogram name="SB.NetworkCheck" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The third and final stage check that mesures the time that Chrome took to
-    get a response from the Google SafeBrowsing servers for a particular URL.
-    This time includes the filter and database check time.
-  </summary>
-</histogram>
-
-<histogram name="SB.PauseSafe" units="ms">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    This measures the time that SafeBrowsing actually delayed the browsing
-    experience. It records the difference between the time when Chrome would
-    have started reading the response for a URL and when the SafeBrowsing system
-    completed its check of that URL.
-  </summary>
-</histogram>
-
-<histogram name="SB.Update">
-  <obsolete>
-    Has not been generated for years (7/8/14).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>TBD.</summary>
-</histogram>
-
-<histogram name="SB2.AddPrefixes">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of add prefixes stored in the database after the last update.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BloomFailure" enum="SB2BloomFailure">
-  <obsolete>
-    Bloom filter support deleted in October 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Track failures when in processing the safe-browsing database bloom filter.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BloomFilterFalsePositives"
-    enum="SB2BloomFilterFalsePositives">
-  <obsolete>
-    This became misleading around M-22 (September 2012), deleted in M-32
-    (November 2013).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    All prefix misses (server returned no full hashes) and prefix misses due to
-    false positives in the bloom filter.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BloomFilterLoad" units="ms">
-  <obsolete>
-    Bloom filter support deleted in October 2012.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Time to load the BloomFilter file.</summary>
-</histogram>
-
-<histogram name="SB2.BrowseDatabaseKilobytes" units="KB">
-  <obsolete>
-    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Browse.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the browsing SafeBrowsing database file on disk in kilobytes,
-    after an update has occurred.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildFilter" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time that it took to regenerate the filter after we have received all
-    the update chunks.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadBytes" units="bytes">
-  <obsolete>
-    Deprecated because it was exceeding the range.  Replaced by
-    SB2.BuildReadKilobytes.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of bytes read by the browser process during the bloom filter
-    generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadKilobytes" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of kilobytes read by the browser process during the filter
-    generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadOperations">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of read operations issued by the browser process during the
-    filter generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteBytes" units="bytes">
-  <obsolete>
-    Deprecated because it was exceeding the range.  Replaced by
-    SB2.BuildWriteKilobytes.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of bytes written by the browser process during the bloom filter
-    generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteKilobytes" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of kilobytes written by the browser process during the filter
-    generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteOperations">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of write operations issued by the browser process during the
-    filter generation phase.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ChunkInsert" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time that it takes to write one redirect URL (which can contain multiple
-    chunks) to the database.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ChunkRequest" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The network time between the request and response for a chunk.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ChunkSize" units="bytes">
-  <owner>shess@chromium.org</owner>
-  <summary>The size of one chunk URL.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseBytes" units="bytes">
-  <obsolete>
-    Deprecated because it was exceeding the range.  Replaced by
-    SB2.DatabaseKilobytes.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The size of the SafeBrowsing database file on disk.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure">
-  <owner>shess@chromium.org</owner>
-  <summary>Track failures when updating the safe-browsing database.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseKilobytes" units="KB">
-  <obsolete>
-    Replaced by SB2.BrowseDatabaseKilobytes.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the SafeBrowsing database file on disk in kilobytes.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DatabaseOpen" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time it takes to initialize the SafeBrowsing storage backend, in
-    milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DatabaseSizeKilobytes" units="KB">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The size of one of the SafeBrowsing database file on disk in kilobytes,
-    after a database update has occurred (once a few minutes after startup, and
-    every thirty minutes or so thereafter).
-  </summary>
-</histogram>
-
-<histogram name="SB2.DatabaseUpdateKilobytes" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the update file before merging with the database file, in
-    kilobytes.
-  </summary>
-</histogram>
-
-<histogram name="SB2.Delay" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time that SafeBrowsing actually delayed the browsing experience. It
-    records the difference between the time when Chrome would have started
-    reading the response for a URL and when the SafeBrowsing system completed
-    its check of that URL.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DownloadBinhashAddsDeleted">
-  <obsolete>
-    Deleted in M-34 (February 2014).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Obsolete download BINHASH add chunks deleted.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadBinhashSubsDeleted">
-  <obsolete>
-    Deleted in M-34 (February 2014).
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Obsolete download BINHASH sub chunks deleted.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Records results of SafeBrowsing download check, including both url check and
-    downloaded file hash check.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DownloadDatabaseKilobytes" units="KB">
-  <obsolete>
-    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Download.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the downloads SafeBrowsing database file on disk in kilobytes,
-    after an update has occurred.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DownloadDuration" units="ms">
-  <obsolete>
-    Deprecated 01/2017. Was measuring the lifetime of a network request
-    corresponding to a download, which may or may not correspond to the total
-    duration of a download.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>The time it takes for a download to finish.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadHashCheckDuration" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time it takes for SafeBrowsing to check hash of a download file.
-  </summary>
-</histogram>
-
-<histogram name="SB2.DownloadUrlCheckDuration" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>The time it takes for SafeBrowsing to check a download url.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks">
-  <obsolete>
-    Deprecated 3/11/11, and replaced by SB2.DownloadChecks.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Records results of SafeBrowsing download url check.</summary>
-</histogram>
-
-<histogram name="SB2.ExtendedReportingIsEnabled" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 03/2015. Replaced by
-    SecurityInterstitialInteraction::EXTENDED_REPORTING_IS_ENABLED.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Whether the user has Safe Browsing extended reporting enabled at the time a
-    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
-    interstitials that had reporting enabled.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FailedUpdate">
-  <obsolete>
-    Deprecated, replaced by SB2.DatabaseFailure BROWSE_DB_UPDATE_FINISH.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of the number of times an update failed when being committed to
-    the database.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FilterCheck" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time that it took to check a URL against our in-memory filter.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FilterKilobytes" units="KB">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The size of the current bloom filter in kilobytes.</summary>
-</histogram>
-
-<histogram name="SB2.FilterLoad" enum="SB2FilterLoad">
-  <owner>shess@chromium.org</owner>
-  <summary>Which filter file the database loaded from disk.</summary>
-</histogram>
-
-<histogram name="SB2.FilterMissing">
-  <obsolete>
-    Deprecated, replaced by SB2.DatabaseFailure FILTER_MISSING.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of the number of times we attempted to load the bloom filter file
-    but it was missing.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FilterReadFail">
-  <obsolete>
-    Deprecated, replaced by SB2.DatabaseFailure FILTER_READ.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of the number of times we attempted to load the bloom filter file
-    but failed while reading the file on disk.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FilterSize" units="bytes">
-  <obsolete>
-    Deprecated because it was exceeding the range.  Replaced by
-    SB2.FilterKilobytes.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The size of the current bloom filter.</summary>
-</histogram>
-
-<histogram name="SB2.FilterWriteFail">
-  <obsolete>
-    Deprecated, replaced by SB2.DatabaseFailure FILTER_WRITE.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of the number of times we attempted to save the bloom filter file
-    but failed while writing the file to disk.
-  </summary>
-</histogram>
-
-<histogram name="SB2.FormatEvent" enum="SB2FormatEvent">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Collection of boolean events for SafeBrowsingFileStore instances.  Includes
-    corruptions detected, old versions detected, and various failures detected.
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetChunkResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>vakh@google.com</owner>
-  <summary>
-    Response or error codes from the SafeBrowsing service. Logged after a
-    GetChunk request finishes to capture the response code or error code for
-    that call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHash200">
-  <obsolete>
-    Deprecated in favor of SB2.GetHashResult STATUS_200.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of GetHash requests that returned data (valid requests).
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHash204">
-  <obsolete>
-    Deprecated in favor of SB2.GetHashResult STATUS_204.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of GetHash requests that returned empty data (false positives).
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHashResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>vakh@google.com</owner>
-  <summary>
-    Response or error codes from the SafeBrowsing service. Logged after a
-    GetHash request finishes to capture the response code or error code for that
-    call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHashResult" enum="SB2GetHashResult">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Track return status from GetHash attempts (STATUS_200, STATUS_204,
-    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
-    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
-    MISS).  EMPTY means the response had no full hashes, and should contain all
-    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
-    hashes matched. MISS means that none of the hashes matched (there was a
-    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
-    BACKOFF_ERROR were added in M36.)
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Track return status from GetHash attempts (STATUS_200, STATUS_204,
-    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
-    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
-    MISS).  EMPTY means the response had no full hashes, and should contain all
-    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
-    hashes matched. MISS means that none of the hashes matched (there was a
-    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
-    BACKOFF_ERROR were added in M36.)
-  </summary>
-</histogram>
-
-<histogram name="SB2.GetHashServerMiss">
-  <obsolete>
-    Deprecated in favor of SB2.GetHashResult FULL_HASH_* and
-    SB2.BloomFilterFalsePositives.  It is unclear if this histogram ever
-    reported useful data.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of GetHash requests returning full hashes that didn't match the
-    URL that initiated the request.
-  </summary>
-</histogram>
-
-<histogram name="SB2.HandleCorrupt">
-  <obsolete>
-    Deprecated, replaced by SB2.DatabaseFailure CORRUPT.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The count of the number of times a database was found corrupt and reset.
-  </summary>
-</histogram>
-
-<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction">
-  <obsolete>
-    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Track number of times Safe Browsing interstitials have been shown, and how
-    many times they have been clicked through or not.
-  </summary>
-</histogram>
-
-<histogram name="SB2.InterstitialActionDetails"
-    enum="SB2InterstitialActionDetails">
-  <obsolete>
-    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Tracks the click-through rate for specific cases of the interstitial.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeClosed" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user navigating away by for example, closing the tab, clicking the browser
-    back button or typing another URL in the address bar.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user clicking on diagnostic page link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user expanding the &quot;see more info&quot; section of the page.  (Only
-    applies to field trial version 2 of the interstitial.)
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user clicking on the learn more about malware link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user clicking on the privacy policy link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeProceed" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user clicking on the proceed link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="ms">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing malware interstitial and the
-    user clicking on the big green back button.
-  </summary>
-</histogram>
-
-<histogram name="SB2.Network" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time that it took to receive a response from the Google SafeBrowsing
-    servers for a GetHash request.
-  </summary>
-</histogram>
-
-<histogram name="SB2.OldDatabaseKilobytes" units="KB">
-  <obsolete>
-    Deprecated 7/2014. No longer generated.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>Size of v1 database deleted from client profile.</summary>
-</histogram>
-
-<histogram name="SB2.OutShardShifts">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Indicates how sharded safe-browsing on-disk stores are.  Values like 0 to 4
-    are reasonable.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeClosed" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user navigating away by for example, closing the tab, clicking the browser
-    back button or typing another URL in the address bar.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeExpandedSeeMore" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user expanding the &quot;see more info&quot; section of the page.  (Only
-    applies to field trial version 2 of the interstitial.)
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeLearnMore" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user clicking on the learn more link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeProceed" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user clicking on the proceed link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeReportError" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user clicking on the report error link.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeTakeMeBack" units="ms">
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The time between when we show the SafeBrowsing phishing interstitial and the
-    user clicking on the big green back button.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the PrefixSet storage in bits, divided by the number of prefixes
-    represented.  Should almost always be 16.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent">
-  <obsolete>
-    Deprecated 9/2012. No longer generated, BloomFilter being removed.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Records how well the PrefixSet implementation matches the BloomFilter
-    implementation.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetKilobytes" units="KB">
-  <obsolete>
-    Deprecated 01/2014. Replaced by suffixed SB2.PrefixSetSizeKilobytes.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>The size of one of the PrefixSet files in kilobytes.</summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetLoad" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>Time to load one of the PrefixSet files.</summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetRestoredExcess">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  How many extra results GetPrefixes returns.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetRestoredShortfall">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  How many fewer results GetPrefixes returns.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetSizeKilobytes" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of one of the PrefixSet files in kilobytes. Logged after a database
-    update has occurred and the PrefixSet has been flushed to disk (once a few
-    minutes after startup, and every thirty minutes or so thereafter).
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedDelta">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  How far unsorted deltas are from expected value.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedDifference">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  Distance of unsorted elements from expected
-    location.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedPercent" units="%">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  How far into the results unsorted elements were
-    found.  Interesting values would be 0%, 50%, or 100%.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedSize">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    For debugging PrefixSet.  Size of unsorted sets.  To see if there is a
-    problem with a particular size of dataset.
-  </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetVersionRead">
-  <owner>shess@chromium.org</owner>
-  <summary>Version read from one of the PrefixSet files.</summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetWrite" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>Time to store one of the PrefixSet files.</summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Count of how many URLs were actually checked vs skipped via
-    RemoteSafeBrowsingDatabaseManager because the scheme is not supported by
-    Safe Browsing. Incremented each time a resource load is initiated.
-  </summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.ChecksPending" units="calls">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Number of outstanding calls for URLs getting classified through
-    RemoteSafeBrowsingDatabaseManager.  The size of the queue is logged before
-    initiating each request.
-  </summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.Elapsed" units="ms">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Latency of URL-classification API calls from Chrome via
-    RemoteSafeBrowsingDatabaseManager, logged per-request. This includes the
-    time to go through JNI, check the URL, and return the result and includes
-    several thread hops betwetween IO and UI threads. The resource-load will not
-    necessarily be delayed this much (see SB2.Delay for that).
-  </summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.Result" enum="SB2RemoteCallResult">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Result of URL-classification API calls from Chrome via
-    RemoteSafeBrowsingApiHandler.  Logged after each URL is judged
-    safe/not-safe, or hits a deadline.
-  </summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.ThreatSubType.PotentiallyHarmfulApp"
-    enum="SB2RemoteCallThreatSubType">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The threat sub-type annotated  for URLs classified as PHA via remote calls
-    through RemoteSafeBrowsingApiHandler. &quot;PHA&quot; classifications
-    generate &quot;malware&quot; interstitials.
-  </summary>
-</histogram>
-
-<histogram name="SB2.RemoteCall.ThreatSubType.SocialEngineering"
-    enum="SB2RemoteCallThreatSubType">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The threat sub-type annotated returned for URLs classified as social
-    engineering via remote calls through RemoteSafeBrowsingApiHandler.
-    &quot;Social engineering&quot; classifications generate &quot;phishing&quot;
-    interstitials.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ReportingIsEnabled" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 06/2014.  Replaced by SB2.ExtendedReportingIsEnabled.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether the user has Safe Browsing extended reporting enabled at the time a
-    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
-    interstitials that had reporting enabled.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ResourceTypes" enum="ContentResourceType">
-  <obsolete>
-    Superseded by SB2.ResourceTypes2 in December 2015.
-  </obsolete>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Resource types of resources that were inspected by Safe Browsing in the
-    SafeBrowsingResourceThrottle.
-  </summary>
-</histogram>
-
-<histogram name="SB2.ResourceTypes2" enum="ContentResourceType2">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Resource types of resources that were inspected by Safe Browsing in the
-    SafeBrowsingResourceThrottle.
-  </summary>
-</histogram>
-
-<histogram name="SB2.SetExtendedReportingEnabled" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 03/2015. Replaced by
-    SecurityInterstitialInteraction::SET_EXTENDED_REPORTING_ENABLED.
-  </obsolete>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
-    in the Safe Browsing interstitial.
-  </summary>
-</histogram>
-
-<histogram name="SB2.SetReportingEnabled" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 06/2014.  Replaced by SB2.SetExtendedReportingEnabled.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
-    in the Safe Browsing interstitial.
-  </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreePrefixSetWrite" units="ms">
-  <obsolete>
-    Deprecated 12/2014. Merged into SB2.PrefixSetWrite.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Time to store the Side Effect Free Whitelist PrefixSet file. Note: this
-    histogram was intended to be stored as
-    SB2.SideEffectFreeWhitelistPrefixSetWrite but was actually reported as
-    SB2.SideEffectFreePrefixSetWrite from its inception to its deprecation...
-  </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB">
-  <obsolete>
-    Deprecated 12/2014. Moved to
-    SB2.DatabaseSizeKilobytes.SideEffectFreeWhitelist.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the Side Effect Free Whitelist SaafeBrowsing database file on
-    disk in kilobytes, after an update has occurred.
-  </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB">
-  <obsolete>
-    Deprecated 12/2014. Moved to
-    SB2.PrefixSetSizeKilobytes.SideEffectFreeWhitelist.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The size of the Side Effect Free Whitelist PrefixSet file in kilobytes,
-    after an udpate has occurred.
-  </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms">
-  <obsolete>
-    Deprecated 12/2014. Merged into SB2.PrefixSetLoad.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>Time to load the Side Effect Free Whitelist PrefixSet file.</summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistStatus"
-    enum="SB2SideEffectFreeWhitelistStatus">
-  <obsolete>
-    Deprecated 4/2015.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>The instantiation status of the SideEffectFreeWhitelist.</summary>
-</histogram>
-
-<histogram name="SB2.StoreVersionRead">
-  <owner>shess@chromium.org</owner>
-  <summary>Version read from the store file.</summary>
-</histogram>
-
-<histogram name="SB2.SubPrefixes">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The number of sub prefixes stored in the database after the last update.
-  </summary>
-</histogram>
-
-<histogram name="SB2.Update" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    The time from the receipt of the update request to the receipt of the final
-    update chunk.
-  </summary>
-</histogram>
-
-<histogram name="SB2.UpdateRequestSize" units="bytes">
-  <owner>shess@chromium.org</owner>
-  <summary>The payload size of update requests to the server.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateResult" enum="SB2UpdateResult">
-  <owner>shess@chromium.org</owner>
-  <summary>Result from trying to update the SafeBrowsing data.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateSize" units="bytes">
-  <owner>shess@chromium.org</owner>
-  <summary>The size of all the chunk URLs in an update response.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateSizeBackground" units="bytes">
-  <obsolete>
-    Was used for an experiment in late 2014.
-  </obsolete>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The size of all the chunk URLs in an update response when Chrome is in the
-    background.
-  </summary>
-</histogram>
-
-<histogram name="SB2.UpdateSizeForeground" units="bytes">
-  <obsolete>
-    Was used for an experiment in late 2014.
-  </obsolete>
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The size of all the chunk URLs in an update response when Chrome is in the
-    foreground.
-  </summary>
-</histogram>
-
-<histogram name="SB2.UpdateUrls">
-  <owner>shess@chromium.org</owner>
-  <summary>The number of chunk URLs in an update response.</summary>
-</histogram>
-
-<histogram name="SB2.VolunteerPrefixesRemoved">
-  <obsolete>
-    The operation this is tracking has been deleted as of 09/2014.
-  </obsolete>
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Older versions of the safe-browsing code incorrectly added additional
-    SBPrefix items when receiving full hashes.  This caused errors when
-    calculating when to send gethash requests to the server.  An additional pass
-    over the data has been added to remove the excess prefixes.  This histogram
-    tracks progress of that code for purposes of informing a decision on when to
-    remove the additional pass.  See http://crbug.com/361248 .
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ArchivedArchiveExtensions"
-    enum="SBClientDownloadExtensions">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Records a histogram of archive file types that were found while examining a
-    downloaded ZIP file. Each archive file type in a single ZIP file is recorded
-    at most once. The relative incidence rate of each filetype in this histogram
-    should indicate the probability of finding that file type in a ZIP file
-    given that that ZIP file contains an archive file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.CheckDownloadStats"
-    enum="SBClientDownloadCheckDownloadStats">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records a histogram of the reason why downloads are marked as being
-    malicious or clean by the improved SafeBrowsing binary download protection.
-    Note that UNSUPPORTED_URL_SCHEME was split out of the INVALID_URL bucket in
-    M41. The NOT_BINARY_FILE check was moved before the UNSUPPORTED_URL_SCHEME
-    check in M42.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.CheckWhitelistResult"
-    enum="WhitelistedDownloadType">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    For each download supported by the SafeBrowsing download protection service,
-    records if it matches a certain whitelist (e.g. matches URL whitelist,
-    matches signature whitelist, or does not match any whitelists).
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileFailureByType"
-    enum="SBClientDownloadExtensions">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Counts of DMG-like file types that failed to be successfully analyzed by the
-    SafeBrowsing download service.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileHasExecutable" enum="Boolean">
-  <obsolete>
-    Replaced by SBClientDownload.DmgFileHas[No]ExecutableByType in M51.
-  </obsolete>
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    For each DMG file analyzed by the SafeBrowsing download service, records if
-    the DMG contained an executable file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileHasExecutableByType"
-    enum="SBClientDownloadExtensions">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Counts of DMG-like file types which were analyzed by the SafeBrowsing
-    download service that contained an executable file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileHasNoExecutableByType"
-    enum="SBClientDownloadExtensions">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Counts of DMG-like file types which were analyzed by the SafeBrowsing
-    download service that did NOT contain an executable file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileSuccess" enum="BooleanSuccess">
-  <obsolete>
-    Replaced by SBClientDownload.DmgFile{Success,Failure}ByType in M51.
-  </obsolete>
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    For each DMG file analyzed by the SafeBrowsing download service, records
-    true if the analysis was successful, or false if there was an error
-    analyzing the file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DmgFileSuccessByType"
-    enum="SBClientDownloadExtensions">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    Counts of DMG-like file types that were successfully analyzed by the
-    SafeBrowsing download service.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadExtensions"
-    enum="SBClientDownloadExtensions">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records a histogram of how often users download a file with a file extension
-    that is possibly dangerous (e.g., exe, class).
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestDuration" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the total time it takes for the SafeBrowsing download service to
-    check whether the content of a download is malicious or not, including file
-    feature extraction, whitelist checking, and server ping. This histogram only
-    includes checks that sent a ping to the SafeBrowsing server. It does not
-    include requests that were cancelled, but does include requests that
-    received a bad response.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    The net error code for all CheckClientDownloadRequest URLFetchers.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestNetworkDuration" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the time it takes for the SafeBrowsing download service ping. It is
-    not recorded for requests that were cancelled.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestNetworkStats"
-    enum="SBClientDownloadCheckDownloadStats">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the results of SafeBrowsing binary download checks which caused a
-    server ping.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestPayloadSize" units="bytes">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    The size of the upload data for CheckClientDownloadRequest URLFetchers.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestResponseCode"
-    enum="HttpResponseCode">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    For CheckClientDownloadRequest URLFetchers with successful status, the HTTP
-    response code that was received.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestTimeoutDuration" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the portion of the SafeBrowsing download service check starting with
-    the point CheckClientDownloadRequest::StartTimeout() is called. It is
-    recorded regardless if a ping was sent or not. It is not recorded for
-    requests that were cancelled.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestTimeoutStats"
-    enum="SBClientDownloadCheckDownloadStats">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    For SafeBrowsing binary download checks which reached the
-    CheckClientDownloadRequest::StartTimeout() call, records the final result
-    (once the check finishes or is cancelled).
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ExtractDmgFeaturesTime" units="ms">
-  <owner>rsesek@chromium.org</owner>
-  <summary>
-    Records the time it takes for the SafeBrowsing download service to extract
-    info from a downloaded DMG file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ExtractImageHeadersTime" units="ms">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Records the time it takes for the SafeBrowsing download service to extract
-    image headers from a downloaded binary.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ExtractSignatureFeaturesTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the time it takes for the SafeBrowsing download service to extract
-    signature info from a downloaded binary. This includes both unsigned and
-    signed binaries.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ExtractZipFeaturesTime" units="ms">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the time it takes for the SafeBrowsing download service to extract
-    info from a downloaded zip file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestDuration"
-    units="ms">
-  <owner>asanka@chromium.org</owner>
-  <summary>Time taken to complete a PPAPIDownloadRequest.</summary>
-</histogram>
-
-<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestOutcome"
-    enum="SBClientDownloadPPAPIDownloadRequestOutcome">
-  <owner>asanka@chromium.org</owner>
-  <summary>
-    Outcome of running CheckPPAPIDownloadRequest. Most failure modes cause an
-    UNKNOWN result to be returned to the caller. If the attempt succeeds, the
-    result returned to the caller is based on the SafeBrowsing resopnse. The
-    final result returned is counted in
-    SBClientDownload.PPAPIDownloadRequest.Result.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.PPAPIDownloadRequest.Result"
-    enum="SBClientDownloadCheckResult">
-  <owner>asanka@chromium.org</owner>
-  <summary>Result returned to the caller of CheckPPAPIDownloadRequest.</summary>
-</histogram>
-
-<histogram name="SBClientDownload.SignedBinaryDownload"
-    enum="SBClientDownloadIsSignedBinary">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Records the number of signed vs. unsigned executables that are downloaded.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.SignedOrWhitelistedDownload">
-  <obsolete>
-    Deprecated in Chrome 50. Replaced by
-    SBClientDownload.CheckWhitelistResult.*.
-  </obsolete>
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Counter which is incremented whenever an executable is downloaded which is
-    either signed or whose URL matches the download whitelist.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.UnsupportedScheme"
-    enum="SBClientDownloadExtensions">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Records how often different file extensions are downloaded with schemes that
-    aren't supported by Safe Browsing (e.g. ftp, gopher, content, cid, etc).
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ZipFileHasArchiveButNoExecutable"
-    enum="Boolean">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    For each zip file analyzed by the SafeBrowsing download service, records
-    true if the zip did not contain any executables but did contain another zip
-    file, false otherwise.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ZipFileHasExecutable" enum="Boolean">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    For each zip file analyzed by the SafeBrowsing download service, records if
-    the zip contained an executable file.
-  </summary>
-</histogram>
-
-<histogram name="SBClientDownload.ZipFileSuccess" enum="BooleanSuccess">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    For each zip file analyzed by the SafeBrowsing download service, records if
-    the unpacking was 100% successful.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.ClassificationStart" enum="BooleanHit">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of pages that we could have possibly classified (essentially the
-    number of top page navigations by users with SBClientMalware enabled). The
-    name is slightly misleading as it is recorded before
-    &quot;Preclassification&quot; happens.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestNetError"
-    enum="NetErrorCodes">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The net error code for all ClientMalwareRequest URLFetchers.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestPayloadSize" units="bytes">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The size of the upload data for ClientMalwareRequest URLFetchers.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestResponseCode"
-    enum="HttpResponseCode">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    For ClientMalwareRequest URLFetchers with successful status, the HTTP
-    response code that was received.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.PreClassificationCheckFail"
-    enum="SBClientDetectionPreClassificationCheckFail">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    Records the number of malware classifications that were skipped because a
-    pre-classification check failed.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.ResourceUrlMatchedBadIp"
-    enum="BooleanMatchedBadIp">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    True if at least one resource url matched the malware IP list. Recorded when
-    client side malware feature extraction is done.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.SentReports" enum="SBClientMalwareSentReports">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    Measures the success rate of sending malware reports.  Sending a report can
-    fail due to a client reaching the limit on the number of reports it can send
-    per day or due to the report failing to be serialized.
-  </summary>
-</histogram>
-
-<histogram name="SBClientMalware.ServerDeterminesMalware"
-    enum="BooleanIsMalware">
-  <owner>jialiul@chromium.org</owner>
-  <summary>The counts for malware verdicts given by server side model.</summary>
-</histogram>
-
-<histogram name="SBClientMalware.UnexpectedPageId" enum="BooleanHit">
-  <obsolete>
-    Deprecated 03/2014.  That part of the code got deleted.
-  </obsolete>
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    Counts the number of times the page ID that completed the page load does not
-    match the browse info page ID.  We expect that number to be zero.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.CancelClassificationReason"
-    enum="SBClientPhishingCancelClassificationReason">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The counts for various reasons why an in-progress phishing classification
-    was canceled.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed">
-  <obsolete>
-    Removed in M47.
-  </obsolete>
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of times client-side phishing classifier expected to have no
-    pending classifications running but that check failed.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClassificationStart" enum="BooleanHit">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of pages that we could have possibly classified (essentially the
-    number of top page navigations by users with SBClientPhishing enabled). The
-    name is slightly misleading as it is recorded before
-    &quot;Preclassification&quot; happens.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClientDeterminesPhishing"
-    enum="BooleanIsPhishing">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The counts for phishing verdicts given by client side model.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClientModelDownloadResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>vakh@google.com</owner>
-  <summary>
-    Response or error codes from the SafeBrowsing service. Logged after a
-    request for the client side model finishes to capture the response code or
-    the error code for that HTTP request.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClientModelStatus"
-    enum="SBClientPhishingClientModelStatus">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The counts for various model status codes that we get after loading a new
-    client-side phishing model.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureChunkTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The time that an individual chunk of DOM feature extraction work took.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureFrameRemoved">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of times that DOM feature extraction finished early because the
-    active WebDocument's frame was removed during traversal.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureIterations">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of iterations that the DOM feature extractor took to finish.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureResumeTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The time that it took to resume DOM feature extraction for the phishing
-    classifier.  Longer times may indicate that the page DOM changed between
-    chunks of work and the extractor had to re-traverse up to the saved
-    position.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureTimeout">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of phishing classifications that were aborted because DOM feature
-    extraction took too long.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureTotalTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The time that the DOM feature extarctor took to finish, summed across all
-    chunks of work.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms">
-  <obsolete>
-    Removed in M47
-  </obsolete>
-  <owner>noelutz@chromium.org</owner>
-  <summary>Time spent generating the thumbnail.</summary>
-</histogram>
-
-<histogram name="SBClientPhishing.IllegalFeatureValue">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    The number of features which were omitted from phishing classification
-    because they were added with an illegal value.  This would indicate a bug.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.InitPrivateNetworksFailed">
-  <obsolete>
-    Deprecated in Chrome 37, which now uses //net's internal matching.
-  </obsolete>
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    The number of times that the phishing detection service could not be
-    initialized due to an error parsing the private IP networks.  This would
-    indicate a bug.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.InvalidWhitelistExpression">
-  <obsolete>
-    Deprecated 12/2011.  Whitelist entries are no longer part of
-    ClientPhishingResponse.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of whitelist_expression entries in a ClientPhishingResponse that
-    could not be canonicalized.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.PreClassificationCheckFail"
-    enum="SBClientDetectionPreClassificationCheckFail">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    Records the number of phishing classifications that were skipped because a
-    pre-classification check failed.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ReportLimitSkipped" enum="BooleanHit">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of phishing classifications that were previously cached as being
-    phishing but that will get re-classified (to possibly fix false positives).
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.RequestNotSerialized">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of phishing classifier pingbacks that were skipped because
-    serializing the request protocol buffer to string failed.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.RequestSatisfiedFromCache" enum="BooleanHit">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of times that a cached phishing classification result was used,
-    rather than pinging the server.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ScorerCreationStatus"
-    enum="SBClientPhishingScorerCreationStatus">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    Records the status when we create a scorer object for the client-side
-    phishing detection classifier.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ServerDeterminesPhishing"
-    enum="BooleanIsPhishing">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The counts for phishing verdicts given by server side model.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.SkipClassificationReason"
-    enum="SBClientPhishingSkipClassificationReason">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    The counts for various reasons why a phishing classification is skipped.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureBreakIterError">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of phishing classifications that were aborted because the term
-    feature extractor failed to initialize an ICU break iterator.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureChunkTime" units="ms">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The time that an individual chunk of term feature extraction work took.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureIterations">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of iterations that the term feature extractor took to finish.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureTimeout">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of phishing classification that were aborted because term feature
-    extraction took too long.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureTotalTime" units="ms">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The time that the term feature extarctor took to finish, summed across all
-    chunks of work.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TooManyFeatures">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The number of times that the limit on the number of phishing classifier
-    features for a page was reached.  This may indicate a bug, or that
-    kMaxFeatureSize is too small.
-  </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.URLFeatureTime" units="ms">
-  <owner>noelutz@chromium.org</owner>
-  <summary>
-    The time taken to extract URL features for the phishing classifier.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Activations" enum="DownloadItem.DangerType">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Count of times download feedback has been started, broken down by danger
-    type.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.ActiveFeedbacks">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    When a new download feedback request is added, records the number of
-    download requests currently active and/or pending.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Eligible" enum="DownloadItem.DangerType">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Count of times eligible download notifications are shown. Broken down by
-    danger type.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.EmptyFilePathFailure" enum="Boolean">
-  <owner>jialiul@chromium.org</owner>
-  <summary>
-    Count of times download feedback cannot be sent due to empty file path.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType">
-  <obsolete>
-    Starting with M32, replaced by SBDownloadFeedback.Eligible.
-  </obsolete>
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Count of times download feedback button has been shown, broken down by
-    danger type.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeEligibleKB" units="KB">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Size of downloads that were of the correct danger type, regardless if they
-    meet the max file size check or if they are actually uploaded or not.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeFailure" units="bytes">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Size of downloads that failed to be uploaded to the feedback service.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeSuccess" units="bytes">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Size of downloads that were successfully uploaded to the feedback service.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.UploadRequestedByServer"
-    enum="DownloadUploadRequestedByServer">
-  <owner>nparker@chromium.org</owner>
-  <summary>
-    For each non-SAFE file, records whether the server requested that that file
-    be uploaded.
-
-    Logged before checking the file size, so it may be dropped there.
-  </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.UploadResult"
-    enum="SBDownloadFeedbackUploadResult">
-  <owner>mattm@chromium.org</owner>
-  <summary>
-    Final result of attempt to upload binary to download feedback service.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.BLAHashTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to compute the hash of a blacklisted module.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.BLASignatureTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to validate the signature of a blacklisted module.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.DiscardedIncident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident discarded by the safe browsing incident reporting
-    service as a result of profile or service destruction.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.DownloadMetadata.DeleteSuccess" enum="BooleanSuccess">
-  <owner>caitkp@chromium.org</owner>
-  <summary>The result of deleting a profile's download metadata file.</summary>
-</histogram>
-
-<histogram name="SBIRS.DownloadMetadata.ReadResult" enum="MetadataReadResult">
-  <owner>caitkp@chromium.org</owner>
-  <summary>The result of reading a profile's download metadata file.</summary>
-</histogram>
-
-<histogram name="SBIRS.DownloadMetadata.WriteResult" enum="MetadataWriteResult">
-  <owner>caitkp@chromium.org</owner>
-  <summary>The result of writing a profile's download metadata file.</summary>
-</histogram>
-
-<histogram name="SBIRS.DroppedIncident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident given to the safe browsing incident reporting service
-    but dropped as a result of not participating in safe browsing.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.EnvCollectionTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to collect environmental data for a safe browsing incident
-    report.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.FindDownloadedBinaryTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to find the most recent binary download from all loaded
-    profiles when creating a safe browsing incident report.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.Incident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident included in an incident report by the safe browsing
-    incident reporting service.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.IncidentCount">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The number of incidents collated into a single safe browsing incident
-    report.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.InterIncidentTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time between two successive incidents collated into the same
-    incident report by the safe browsing incident reporting service.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.NoDownloadIncident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident pruned by the safe browsing incident reporting service
-    as a result of not having a matching binary download.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.PrunedIncident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident pruned from a report in the safe browsing incident
-    reporting service as a result of having previously been reported.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.PruneRatio" units="%">
-  <obsolete>
-    Deprecated 08/2015.
-  </obsolete>
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The percentage of incidents pruned from a safe browsing incident report on
-    account of having been previously reported.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.PSSDataStoreSize" units="bytes">
-  <owner>grt@google.com</owner>
-  <summary>
-    The size, in bytes, of a profile's platform state store. This hisogram is
-    logged on each write, which always replaces any previous contents.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.PSSLoadResult" enum="PlatformStateStoreLoadResult">
-  <owner>grt@google.com</owner>
-  <summary>The result of loading data from the platform state store.</summary>
-</histogram>
-
-<histogram name="SBIRS.ReceivedIncident" enum="IncidentType">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The type of incident received by the safe browsing incident reporting
-    service.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.ReportPayloadSize" units="bytes">
-  <owner>caitkp@google.com</owner>
-  <summary>The size, in bytes, of a safe browsing incident report.</summary>
-</histogram>
-
-<histogram name="SBIRS.ReportUploadTime" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>The elapsed time to upload a safe browsing incident report.</summary>
-</histogram>
-
-<histogram name="SBIRS.StateStoreInitResult" enum="StateStoreInitResult">
-  <owner>proberge@google.com</owner>
-  <summary>
-    The result of initializing the state store and comparing the preferences to
-    the platform-specific state store.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms">
-  <owner>proberge@google.com</owner>
-  <summary>
-    The elapsed time to check loaded modules against the module whitelist.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules">
-  <owner>proberge@google.com</owner>
-  <summary>The number of suspicious modules found.</summary>
-</histogram>
-
-<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms">
-  <owner>proberge@google.com</owner>
-  <summary>
-    The elapsed time to create incidents for suspicious modules.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.UploadResult" enum="ReportProcessingResult">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The result of an attempted report upload by the safe browsing incident
-    reporting service.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.VerifyBinaryIntegrity.0" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to verify the binary integrity of chrome.exe.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.VerifyBinaryIntegrity.1" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to verify the binary integrity of chrome.dll.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.VerifyBinaryIntegrity.2" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to verify the binary integrity of chrome_child.dll.
-  </summary>
-</histogram>
-
-<histogram name="SBIRS.VerifyBinaryIntegrity.3" units="ms">
-  <owner>caitkp@google.com</owner>
-  <summary>
-    The elapsed time to verify the binary integrity of chrome_elf.dll.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.Abort" enum="ContentResourceType">
-  <obsolete>
-    Superseded by SBOffDomainInclusion2.Abort in December 2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis was aborted. This histogram is suffixed with the abort
-    reason.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.Detected" enum="ContentResourceType">
-  <obsolete>
-    Deprecated 01/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which an off-domain
-    inclusion was detected by the OffDomainInclusionDetector.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.EmptyMainFrameURL"
-    enum="ContentResourceType">
-  <obsolete>
-    Deprecated 01/2015. Moved to SBOffDomainInclusion.Abort.EmptyMainFrameURL.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the main frame URL
-    was unexpectedly empty in the OffDomainInclusionDetector.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.InHistory" enum="ContentResourceType">
-  <obsolete>
-    Superseded by SBOffDomainInclusion2.InHistory in December 2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis concluded in no inclusion whitelist hit but a browsing
-    history hit.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.InvalidMainFrameURL"
-    enum="ContentResourceType">
-  <obsolete>
-    Deprecated 01/2015 (was never reported, confirming experiment that handling
-    it is irrelevant).
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the main frame URL
-    was unexpectedly invalid (and not empty) in the OffDomainInclusionDetector.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.RequestAnalyzed"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SBOffDomainInclusion2.RequestAnalyzed in December 2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request analyzed by the
-    OffDomainInclusionDetector.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.Suspicious" enum="ContentResourceType">
-  <obsolete>
-    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which an off-domain
-    inclusion was detected by the OffDomainInclusionDetector and considered
-    suspicious.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion.Whitelisted" enum="ContentResourceType">
-  <obsolete>
-    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis concluded in an inclusion whitelist hit.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion2.Abort" enum="ContentResourceType2">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis was aborted. This histogram is suffixed with the abort
-    reason.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion2.InHistory" enum="ContentResourceType2">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis concluded in no inclusion whitelist hit but a browsing
-    history hit.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion2.RequestAnalyzed"
-    enum="ContentResourceType2">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request analyzed by the
-    OffDomainInclusionDetector.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion2.Suspicious" enum="ContentResourceType2">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which an off-domain
-    inclusion was detected by the OffDomainInclusionDetector and considered
-    suspicious.
-  </summary>
-</histogram>
-
-<histogram name="SBOffDomainInclusion2.Whitelisted" enum="ContentResourceType2">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the resource type of each resource request for which the off-domain
-    inclusion analysis concluded in an inclusion whitelist hit.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.ActivateDuration" units="microseconds">
-  <obsolete>
-    Replaced by ActivateDuration2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the compositor to simply activate the pending tree.
-    Does not include any PrepareTiles or raster time.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.ActivateDuration2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the compositor to simply activate the pending tree.
-    Does not include any PrepareTiles or raster time.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameIntervalCritical"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameIntervalCritical2, due to inefficient bucketing
-    scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    This is the time delta between back-to-back BeginMainFrames completions on
-    the compositor side when the on_critical_path flag is set, regardless of
-    whether they abort (have no updates) or commit (have updates).
-
-    The interval is only recorded when the BeginMainFrames are running
-    continuously; sepcifically when another BeginMainFrame is requested by the
-    next BeginImplFrame after a) an abort or b) activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameIntervalCritical2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    This is the time delta between back-to-back BeginMainFrames completions on
-    the compositor side when the on_critical_path flag is set, regardless of
-    whether they abort (have no updates) or commit (have updates).
-
-    The interval is only recorded when the BeginMainFrames are running
-    continuously; sepcifically when another BeginMainFrame is requested by the
-    next BeginImplFrame after a) an abort or b) activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameIntervalNotCritical"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameIntervalNotCritical2, due to inefficient bucketing
-    scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    This is the time delta between back-to-back BeginMainFrames completions on
-    the compositor side when the on_critical_path flag is not set, regardless of
-    whether they abort (have no updates) or commit (have updates).
-
-    The interval is only recorded when the BeginMainFrames are running
-    continuously; sepcifically when another BeginMainFrame is requested by the
-    next BeginImplFrame after a) an abort or b) activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameIntervalNotCritical2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    This is the time delta between back-to-back BeginMainFrames completions on
-    the compositor side when the on_critical_path flag is not set, regardless of
-    whether they abort (have no updates) or commit (have updates).
-
-    The interval is only recorded when the BeginMainFrames are running
-    continuously; sepcifically when another BeginMainFrame is requested by the
-    next BeginImplFrame after a) an abort or b) activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameQueueDurationCritical"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameQueueDurationCritical2, due to inefficient
-    bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the main side to start the BeginMainFrame in response
-    to the compositor's SendBeginMainFrame when the on_critical_path flag is
-    set.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the main side to start the BeginMainFrame in response
-    to the compositor's SendBeginMainFrame when the on_critical_path flag is
-    set.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameQueueDurationNotCritical2, due to inefficient
-    bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the main side to start the BeginMainFrame in response
-    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
-    set.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the main side to start the BeginMainFrame in response
-    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
-    set.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameStartToCommitDuration"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameStartToCommitDuration2, due to inefficient
-    bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time from when the main side actually starts the BeginMainFrame to when
-    the commit completes on the impl side.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time from when the main side actually starts the BeginMainFrame to when
-    the commit completes on the impl side.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.BeginMainFrameToCommitDuration"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameQueueDurationCritical,
-    BeginMainFrameQueueDurationNotCritical, and
-    BeginMainFrameStartToCommitDuration.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the blink main thread to respond to the compositor's
-    SendBeginMainFrame.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameStartToCommitDuration. This was recorded as a
-    result of a typo in the code that didn't include &quot;Duration&quot;.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time from when the main side actually starts the BeginMainFrame to when
-    the commit completes on the impl side.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit2"
-    units="microseconds">
-  <obsolete>
-    Replaced by BeginMainFrameStartToCommitDuration2. This was recorded as a
-    result of a typo in the code that didn't include &quot;Duration&quot;.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time from when the main side actually starts the BeginMainFrame to when
-    the commit completes on the impl side.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.CommitInterval" units="microseconds">
-  <obsolete>
-    Replaced by CommitInterval2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time delta between the *draw* times of back-to-back BeginMainFrames that
-    result in a commit.
-
-    The interval is only recorded when the BeginMainFrames are running and
-    committing continuously, where continuously means when another
-    BeginMainFrame is requested by the next BeginImplFrame after activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.CommitInterval2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time delta between the *draw* times of back-to-back BeginMainFrames that
-    result in a commit.
-
-    The interval is only recorded when the BeginMainFrames are running and
-    committing continuously, where continuously means when another
-    BeginMainFrame is requested by the next BeginImplFrame after activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.CommitToReadyToActivateDuration"
-    units="microseconds">
-  <obsolete>
-    Replaced by CommitToReadyToActivateDuration2, due to inefficient bucketing
-    scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the compositor to rasterize pending tree content after
-    a commit before it is ready for activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.CommitToReadyToActivateDuration2"
-    units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes for the compositor to rasterize pending tree content after
-    a commit before it is ready for activation.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.DrawDuration" units="microseconds">
-  <obsolete>
-    Replaced by DrawDuration2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>How long it takes the compositor to draw a frame.</summary>
-</histogram>
-
-<histogram name="Scheduling.DrawDuration2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>How long it takes the compositor to draw a frame.</summary>
-</histogram>
-
-<histogram name="Scheduling.DrawInterval" units="microseconds">
-  <obsolete>
-    Replaced by DrawInterval2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time delta between the draw times of back-to-back BeginImplFrames,
-    regardless of whether or not they result in a swap.
-
-    The interval is only recorded when every BeginImplFrame wants to draw.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.DrawInterval2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    The time delta between the draw times of back-to-back BeginImplFrames,
-    regardless of whether or not they result in a swap.
-
-    The interval is only recorded when every BeginImplFrame wants to draw.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.MainAndImplFrameTimeDelta" units="microseconds">
-  <obsolete>
-    Replaced by MainAndImplFrameTimeDelta2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    Recorded every time the compositor draws with a new active tree. A value of
-    0 indicates the main-side started and finished within the same frame
-    interval as the impl-side. Positive values correspond to how old any
-    main-side updates are compared to the impl-side updates. If there are no
-    mid-frame updates, this metric is a good proxy for how well the main and
-    impl threads are synchronized.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.MainAndImplFrameTimeDelta2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    Recorded every time the compositor draws with a new active tree. A value of
-    0 indicates the main-side started and finished within the same frame
-    interval as the impl-side. Positive values correspond to how old any
-    main-side updates are compared to the impl-side updates. If there are no
-    mid-frame updates, this metric is a good proxy for how well the main and
-    impl threads are synchronized.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.PendingTreeDuration" units="microseconds">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Time between creating a pending tree and activating that tree. This differs
-    from Scheduling.ActivateDuration in that it includes time taken to raster
-    the pending tree, not just the time to activate it.
-
-    The interval is recorded each time a pending tree is activated.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.PrepareTilesDuration" units="microseconds">
-  <obsolete>
-    Replaced by PrepareTIlesDuration2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes the compositor to PreapreTiles, which determines what
-    rasterization work to do.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.PrepareTilesDuration2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    How long it takes the compositor to PreapreTiles, which determines what
-    rasterization work to do.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.SwapAckWasFast" enum="BooleanWasFast">
-  <owner>brianderson@chromium.org</owner>
-  <summary>
-    True if the swap ack was received within approximately 8 seconds of the
-    swap. Although 8 seconds isn't exactly fast, it is a threshold that
-    represents a hang or the appearance of a hang.
-  </summary>
-</histogram>
-
-<histogram name="Scheduling.SwapToAckLatency" units="microseconds">
-  <obsolete>
-    Replaced by SwapToAckLatency2, due to inefficient bucketing scheme.
-  </obsolete>
-  <owner>brianderson@chromium.org</owner>
-  <summary>How long it takes the swap ack to return after a swap.</summary>
-</histogram>
-
-<histogram name="Scheduling.SwapToAckLatency2" units="microseconds">
-  <owner>brianderson@chromium.org</owner>
-  <summary>How long it takes the swap ack to return after a swap.</summary>
-</histogram>
-
-<histogram name="Scheduling.VsyncToBeginMainFrameLatency2" units="microseconds">
-  <owner>stanisc@chromium.org</owner>
-  <summary>
-    The time from v-sync to when the main side actually starts the
-    BeginMainFrame.
-  </summary>
-</histogram>
-
-<histogram name="ScreenLocker.AuthenticationFailure" enum="UnlockType">
-  <owner>sammiequon@chromium.org</owner>
-  <summary>
-    What type of authentication was attempted when the user failed to unlock the
-    lock screen.
-  </summary>
-</histogram>
-
-<histogram name="ScreenLocker.AuthenticationSuccess" enum="UnlockType">
-  <owner>sammiequon@chromium.org</owner>
-  <summary>
-    What type of authentication was attempted when the user successfully
-    unlocked the lock screen.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.AdvertisedWithSecureScheme" enum="BooleanHttps">
-  <obsolete>
-    Experiment complete, histogram gathering code removed.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Whether an SDCH dictionary was advertised over a secure scheme or not. This
-    histogram is logged inside SdchManager at advertisement time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Advertisement_Count">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The number of dictionaries advertised in an HTTP GET transaction that
-    supports SDCH.  Note that only non-zero advertisements are logged.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.BlacklistReason" enum="SdchProblemCode">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The reason why a blacklist blocking a request from advertising SDCH was
-    implemented.  There is one entry in this histogram per inhibited request.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Dictionary size loaded" units="bytes">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Each sample is the byte count for a dictionary that is loaded by Chrome. A
-    dictionary is loaded shortly after the first Google query performed in each
-    session, and allows future SDCH transactions to be encoded/decoded using
-    that dictionary.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.DictionaryFate" enum="SdchDictionaryFate">
-  <owner>rdsmith@chromium.org&gt;</owner>
-  <summary>
-    The fate, both on input and output, of dictionary requests.  There is
-    intended to be two entries in this histogram for each Get-Dictionary seen
-    (except failed requests are not currently tracked).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.DictionaryUseCount">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The number of times a dictionary has been successfully used for decoding,
-    recorded at the time it is evicted from the manager.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment2_Decode">
-  <obsolete>
-    Replaced by Sdch3.Experiment3_Holdback.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from when a request was made, until all bytes were
-    received.  During the running of an SDCH latency experiment, these packets
-    were part of an SDCH encoded transmission made after the link had proven it
-    was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment2_Holdback">
-  <obsolete>
-    Replaced by Sdch3.Experiment3_Holdback.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from when a request was made, until all bytes were
-    received.  During the running of an SDCH latency experiment, these packets
-    were part of a holdback, which precluded SDCH despite the fact that the link
-    had proven it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment3_Decode">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from the first byte of a request was received, until all
-    bytes were received.  During the running of an SDCH latency experiment,
-    these packets were part of an SDCH encoded transmission made after the link
-    had proven it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment3_Holdback">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from the first byte of a request was received, until all
-    bytes were received.  During the running of an SDCH latency experiment,
-    these packets were part of a holdback, which precluded SDCH despite the fact
-    that the link had proven it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Decode">
-  <obsolete>
-    Replaced by Sdch3.Experiment2_Decode.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from when a request was made, until all bytes were
-    received.  During the running of an SDCH latency experiment, these packets
-    were part of an SDCH encoded transmission made after the link had proven it
-    was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback">
-  <obsolete>
-    Replaced by Sdch3.Experiment2_Holdback.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Duration in time from when a request was made, until all bytes were
-    received.  During the running of an SDCH latency experiment, these packets
-    were part of a holdback, which precluded SDCH despite the fact that the link
-    had proven it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback_1st_To_2nd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-    During the running of an SDCH latency experiment, these packets were part of
-    a holdback, which precluded SDCH despite the fact that the link had proven
-    it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback_1st_To_Last_a" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The duration between receipt of the 1st holdback (non-SDCH encoded) packet
-    and receipt of the last packet.  Only groups that are part of the holdback
-    (i.e., could have been sdch encoded) are sampled.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback_2nd_To_3rd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-    During the running of an SDCH latency experiment, these packets were part of
-    a holdback, which precluded SDCH despite the fact that the link had proven
-    it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback_3rd_To_4th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-    During the running of an SDCH latency experiment, these packets were part of
-    a holdback, which precluded SDCH despite the fact that the link had proven
-    it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Experiment_Holdback_4th_To_5th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-    During the running of an SDCH latency experiment, these packets were part of
-    a holdback, which precluded SDCH despite the fact that the link had proven
-    it was capable of handling SDCH compression.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.FilterUseBeforeDisabling">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If SDCH decoding was disabled client side, this records how many URLs were
-    processed by the SDCH filter before disabling this feature.  The most common
-    number is 1, which happens when there is one home-page tab that contains
-    SDCH encoded data, for which there is no dictionary loaded into the Chrome
-    process (yet), since Chrome was just restarted.  Large values in this
-    histogram are indicative of flaky decompression, that works for a while, and
-    then is disabled.  Values of 2 or 3 may appear if a user has more than one
-    home page with a query, and restarts there browser.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.FirstUseInterval" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time between creation/load of an SDCH dictionary and its first
-    use.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_1st_To_2nd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 1st SDCH encoded packet and receipt of the 2nd packet, for
-    processing by the SDCH filter.  Packet count boundaries are calculated each
-    time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_1st_To_Last_a" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The duration between receipt of the 1st SDCH encoded packet and receipt of
-    the last packet, for processing by the SDCH filter.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_2nd_To_3rd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 2nd SDCH encoded packet and receipt of the 3rd packet, for
-    processing by the SDCH filter.  Packet count boundaries are calculated each
-    time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_3rd_To_4th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 3rd SDCH encoded packet and receipt of the 4th packet, for
-    processing by the SDCH filter. Packet count boundaries are calculated each
-    time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_4th_To_5th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 4th SDCH encoded packet and receipt of the 5th packet, for
-    processing by the SDCH filter. Packet count boundaries are calculated each
-    time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Bytes_Processed_a" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    (discontinued 7/29/2009, and replaced by
-    Sdch3.Network_Decode_Bytes_Processed_b) The number of bytes processed
-    (received over the net or from cache) by the SDCH filter chain.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Bytes_Processed_b" units="bytes">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The number of bytes processed (received over the net or from cache) by the
-    SDCH filter chain.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Bytes_VcdiffOut_a" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The number of bytes emitted after decoding by the SDCH filter.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Latency_F_a" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The duration between putting the first byte of a request (such as a GET) on
-    the wire, until the last by of compressed SDCH encoded content is received
-    (with durations over 10 minutes discarded).  During a planned latency
-    experiment, some clients will receive encoded SDCH data, and other will
-    received mere gzip'ed data (that passes through the SDCH filter unchanged).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Packets_b">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    An approximation to the total number of SDCH encoded packets received for
-    processing by the SDCH filter. Packet count boundaries are calculated each
-    time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Decode_Ratio_a" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The ratio of the number of bytes read from the network (or cache) and fed to
-    the filter chain (usually the gunzip filter) vs. the number of bytes emitted
-    by the SDCH filter to be rendered.  This is commonly described as the SDCH
-    compression ratio.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_1st_To_2nd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_1st_To_Last_a" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The duration between receipt of the 1st **NON**-SDCH encoded packet to
-    receipt of the last packet, for processing by the SDCH filter.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_2nd_To_3rd_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_3rd_To_4th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_4th_To_5th_c" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Sampling only transmissions with 5 or more packets, the duration between
-    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
-    for processing by the SDCH filter.  Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_Latency_F_a" units="ms">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The duration between putting the first byte of a request (such as a GET) on
-    the wire, until the last by gzip compressed content is received and
-    passed-through unchanged by the SDCH filter (with durations over 10 minutes
-    discarded).  During a planned latency experiment, some clients will receive
-    encoded SDCH data, and other will received mere gzip'ed data (that passes
-    through the SDCH filter unchanged).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.Network_Pass-through_Packets_b">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The total number of **NON**-SDCH encoded packets received for processing by
-    the SDCH filter in one URL fetch. Packet count boundaries are calculated
-    each time a read from the filter is called, assuming 1430 bytes of data per
-    packet since the last boundary calculation.  This *tends* to properly count
-    small packets, but can err if small packets come at roughly the same time.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.NetworkBytesSavedByCompression" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    The absolute difference in bytes between the amount of data entering the
-    SDCH filter and the amount of data exiting the SDCH filter.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.NetworkBytesSpent" units="bytes">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Absolute sizes, in bytes, of SDCH dictionaries fetched over the network.
-    These are logged in SdchOwner when dictionary fetches complete.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.PartialBytesIn" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
-    decoder still has internally buffered data that has never been read, this
-    histogram reports the number of bytes that were received over the net (or
-    from the cache) and fed to the start of the filter chain (usually to the
-    gunzip filter).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.PartialVcdiffIn" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
-    decoder still has internally buffered data that has never been read, this
-    histogram reports the number of bytes that were received over the net (or
-    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.PartialVcdiffOut" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
-    decoder still has internally buffered data that has never been read, this
-    histogram reports the number of bytes that were output by the VCDIFF decoder
-    (and sent toward the renderer).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.PersistenceFailureReason"
-    enum="SdchPersistenceFailureReason">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Tracks failures that occur when reading in or writing out persisted
-    dictionary information.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.ProblemCodes_3" enum="SdchProblemCode">
-  <obsolete>
-    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>Each sample is the report of a distinct problem code.</summary>
-</histogram>
-
-<histogram name="Sdch3.ProblemCodes_4" enum="SdchProblemCode">
-  <obsolete>
-    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>Each sample is the report of a distinct problem code.</summary>
-</histogram>
-
-<histogram name="Sdch3.ProblemCodes_5" enum="SdchProblemCode">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>Each sample is the report of a distinct problem code.</summary>
-</histogram>
-
-<histogram name="Sdch3.ResponseCorruptionDetection.Cached"
-    enum="SdchResponseCorruptionDetectionCauses">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
-    some of those cases, the request is corrupted enough that it must be either
-    retried or failed completely.  This histogram records the details of why the
-    request was considered corrupted, for results returned from the cache.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.ResponseCorruptionDetection.Uncached"
-    enum="SdchResponseCorruptionDetectionCauses">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
-    some of those cases, the request is corrupted enough that it must be either
-    retried or failed completely.  This histogram records the details of why the
-    request was considered corrupted for results returned from the network.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.TimeWeightedMemoryUse" units="bytes">
-  <owner>ellyjones@chromium.org</owner>
-  <summary>
-    Measures the time-weighted memory use of SDCH dictionaries, in bytes. The
-    numerator is bytes of dictionary times seconds that dictionary was in
-    memory, and the denominator is seconds that the Chrome process lives.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UnflushedBufferSize" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
-    still buffering output of the VCDIFF decoder that has never been read, this
-    histogram reports the number of bytes that were in that buffer.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UnflushedBytesIn" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
-    still buffering output of the VCDIFF decoder  that has never been read, this
-    histogram reports the number of bytes that were received over the net (or
-    from the cache) and fed to the start of the filter chain (usually to the
-    gunzip filter).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UnflushedVcdiffIn" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
-    still buffering output of the VCDIFF decoder that has never been read, this
-    histogram reports the number of bytes that were received over the net (or
-    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UnflushedVcdiffOut" units="bytes">
-  <obsolete>
-    Deprecated 2016-11.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
-    still buffering output of the VCDIFF decoder  that has never been read, this
-    histogram reports the number of bytes that were output by the VCDIFF decoder
-    (and sent toward the renderer).
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UsageInterval" units="ms">
-  <obsolete>
-    Use Sdch3.UsageInterval2 instead.
-  </obsolete>
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time from the last time an SDCH dictionary was used.  For the
-    first use of a dictionary, the maximum time is used.
-  </summary>
-</histogram>
-
-<histogram name="Sdch3.UsageInterval2" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The amount of time from the last time an SDCH dictionary was used.  Not
-    recorded on first dictionary use. First use is recorded as
-    Sdch3.FirstUseInterval.
-  </summary>
-</histogram>
-
-<histogram name="Search.AddSearchProvider" enum="AddSearchProvider">
-  <obsolete>
-    Replaced by Search.AddSearchProvider2, which is also now obsolete.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures how much the user modifies their search engines, whether through
-    window.external.AddSearchProvider or chrome://settings.
-  </summary>
-</histogram>
-
-<histogram name="Search.AddSearchProvider2" enum="AddSearchProvider">
-  <obsolete>
-    AddSearchProvider was removed 05/2016.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures usage of window.external.AddSearchProvider and user interaction
-    with the resulting confirmation dialog (if any). Only works on Views
-    platforms (Win, Linux, CrOS).
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchAllCapsResultsSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen during a contextual search where the
-    selected text consisted of all capital letters. Only logged when contextual
-    search is triggered due to a tap. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchBarOverlap"
-    enum="ContextualSearchTapSuppression">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a Tap was suppressed because the Bar overlapped the selection area.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchBarOverlapSeen"
-    enum="ContextualSearchBarOverlapSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether the Bar overlapped the selection area and whether the results were
-    seen. Recorded when the UX is hidden. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchBasePageProtocol"
-    enum="ContextualSearchBasePageProtocol">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The protocol of the base page, logged at the time that any Search Term
-    Resolution Response is recieved.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchBlacklistSeen"
-    enum="ContextualSearchBlacklistSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>pedrosimonetti@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (blacklist reason and whether the results were seen) of every
-    search term issued by a tap gesture. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchContextualCardsIntegration.DataShown"
-    enum="Boolean">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether Contextual Cards data was shown in the Contextual Search Bar.
-    Contextual Cards data is included with the search term resolution response.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchContextualCardsIntegration.ResultsSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen as part of a Contextual Search when
-    Contextual Cards data was shown. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollNotSeen"
-    units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The duration between the panel being triggered and the panel being dismissed
-    due to a scroll when search results were not seen. Implemented for Android.
-    Prior to M57 this was recorded on tap and longpress; on M57+ it is only
-    recorded on tap.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollSeen"
-    units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The duration between the panel being triggered and the panel being dismissed
-    due to a scroll when search results were seen. Implemented for Android.
-    Prior to M57 this was recorded on tap and longpress; on M57+ it is only
-    recorded on tap.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationNonPrefetched" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from opening the panel until the SERP is fully loaded. Applies only
-    to non-prefetched requests. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationPrefetched" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from opening the panel until the SERP is fully loaded. Applies only
-    to prefetched requests. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationSeen" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from initiating to ending a contextual search, when results were
-    seen as part of the search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationUnseen" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from initiating to ending a contextual search, when results were
-    not seen as part of the search and the search did not end with the beginning
-    of another contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchDurationUnseenChained" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from initiating to ending a contextual search, when results were
-    not seen as part of the search and the search ended with the beginning of
-    another contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchEnterClosed"
-    enum="ContextualSearchEnterClosedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (previous state and reason) of the first entry into the closed
-    panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchEnterExpanded"
-    enum="ContextualSearchEnterExpandedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (previous state and reason) of the first entry into the expanded
-    panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchEnterMaximized"
-    enum="ContextualSearchEnterMaximizedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (previous state and reason) of the first entry into the
-    maximized panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchEnterPeeked"
-    enum="ContextualSearchEnterPeekedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (previous state and reason) of the first entry into the peeked
-    panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchExitClosed"
-    enum="ContextualSearchExitClosedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (destination state and reason) of the first exit out of the
-    closed panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchExitExpanded"
-    enum="ContextualSearchExitExpandedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (destination state and reason) of the first exit out of the
-    expanded panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchExitMaximized"
-    enum="ContextualSearchExitMaximizedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (destination state and reason) of the first exit out of the
-    maximized panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchExitPeeked"
-    enum="ContextualSearchExitPeekedStateChange">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The details (destination state and reason) of the first exit out of the
-    peeked panel state within a contextual search. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchFallbackSearchRequestStatus"
-    enum="ContextualSearchSearchRequestStatus">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The status of the Contextual Search fallback Search request. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchFirstRunFlowOutcome"
-    enum="ContextualSearchPreferenceState">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The state of the Contextual Search Preference after the first run flow.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchFirstRunPanelSeen"
-    enum="ContextualSearchFirstRunPanelSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether the first run flow's panel was seen as part of a contextual search.
-    Only logged when the user triggered the first run flow yet exited the search
-    still in the undecided preference state. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchIconSpriteAnimated"
-    enum="ContextualSearchIconSpriteAnimated">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen, whether the search provider icon sprite
-    was animated when the panel first appeared, and the triggering gesture. If
-    animation is disabled due to a field trial, we still log
-    &quot;animated&quot; if the animation would have run otherwise.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchLiteralSearchDuration" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from starting a literal search until the results in the SERP start
-    to become viewable. Applies only to prefetched requests. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchLowPrioritySearchRequestStatus"
-    enum="ContextualSearchSearchRequestStatus">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The status of the Contextual Search low priority Search request. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchMandatoryPromoOutcomeByGesture"
-    enum="ContextualSearchOutcomeByGesture">
-  <owner>donnd@chromium.org</owner>
-  <owner>pedrosimonetti@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The outcome of the mandatory Promo broken down by original triggering
-    gesture. Logged for each view of the promo. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchNormalPrioritySearchRequestStatus"
-    enum="ContextualSearchSearchRequestStatus">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The status of the Contextual Search normal priority Search request.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPanelOpenDuration" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from opening the panel beyond peek until the panel is closed.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPeekPromoCount" units="count">
-  <owner>donnd@chromium.org</owner>
-  <owner>pedrosimonetti@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of times the Peek Promo was seen. This histogram will be emitted
-    when the Panel closes. The panel is always visible when the Peek Promo is
-    shown, so this histogram will always be emitted after a Promo is shown
-    (except in the case of a crash). This histogram does not care whether the
-    Panel was opened.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPeekPromoCountUntilOpened"
-    units="count">
-  <owner>donnd@chromium.org</owner>
-  <owner>pedrosimonetti@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of times the Peek Promo was seen until the Panel was opened. This
-    histogram will be emitted when the Panel closes, if the Panel was opened
-    with the Peek Promo visible. If the Panel is not opened, nothing will be
-    emitted.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPeekPromoOutcome"
-    enum="ContextualSearchPeekPromoOutcome">
-  <owner>donnd@chromium.org</owner>
-  <owner>pedrosimonetti@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The outcome of the Contextual Search Peek Promo for those who have seen the
-    promo and for those who would have seen the promo if it was enabled, so we
-    can compare the effect of the promo on users opening the Panel. This
-    histogram will be emitted when the Panel closes, if the conditions to
-    display the Peek Promo are met, regardless of whether the Peek Promo was
-    actually visible (the Promo is controlled by Finch) and regardless of
-    whether the Panel was opened.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPreferenceState"
-    enum="ContextualSearchPreferenceState">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The state of the Contextual Search Preference. Can be logged multiple times.
-    Used to determine the population size (user view). Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPreferenceStateChange"
-    enum="ContextualSearchPreferenceState">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The Contextual Search preference state after a modification from the
-    preference menu. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPrefetchSummary"
-    enum="ContextualSearchPrefetchSummary">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    A summary histogram for prefetch timings, indicating fully preloaded, etc.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPrevious28DayCtr" units="%">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The CTR from the previous 28 day period for each user, expressed as a
-    percentage. Logged the first time the panel is closed in each new week.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPrevious28DayImpressions" units="views">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of user impressions of the Bar from the previous 28 day period.
-    Logged the first time the panel is closed in each new week. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPreviousWeekCtr" units="%">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The CTR from the previous week for each user, expressed as a percentage.
-    Logged the first time the panel is closed in each new week. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPreviousWeekImpressions" units="views">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of user impressions of the Bar from the previous week. Logged the
-    first time the panel is closed in each new week. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoOpenCount" units="opens">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The total count of times that the bar with the promo has been opened. Once
-    the user decides, this counter is no longer updated.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoOutcomeByGesture"
-    enum="ContextualSearchOutcomeByGesture">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The outcome of the promo broken down by original triggering gesture. Logged
-    for each view of the promo.  Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoSeenByGesture"
-    enum="ContextualSearchSeenByGesture">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether the promo was seen, broken down by original triggering gesture.
-    Logged each time the promo was activated.  Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoTapsBeforeFirstOpen" units="taps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The historic number of taps that showed a peeking bar with the opt-out promo
-    before the first time the user opened the panel.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoTapsForNeverOpened" units="taps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The historic number of taps that showed a peeking bar with the opt-out promo
-    for users who have never opened the panel. This count may be limited by the
-    Finch config param promo_on_limited_taps.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchPromoTapsRemaining" units="taps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The number of remaining taps that can trigger the promo for this user.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickActions.Category"
-    enum="ContextualSearchQuickActionCategory">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The category of quick actions shown in the Contextual Search bar. Recorded
-    when the quick action is set. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickActions.Clicked"
-    enum="BooleanClicked">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a quick action in the Contextual Search bar was clicked. Recorded
-    when Contextual Search is dismissed. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickActions.IntentResolution"
-    enum="ContextualSearchQuickActionIntentResolution">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a Contextual Search quick action intent resolved to zero, one, or
-    many apps. Recorded when the quick action intent URI is resolved.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickActions.ResultsSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen as part of a Contextual Search when a quick
-    action was shown. Recorded when Contextual Search is dismissed. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickActions.Shown" enum="BooleanShown">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a quick action was shown in the Contextual Search bar. Recorded when
-    the quick action is set. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchQuickAnswerSeen"
-    enum="ContextualSearchQuickAnswerSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a Quick Answer was activated, considered an answer, and seen.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms">
-  <obsolete>
-    Deprecated 02/2017.
-  </obsolete>
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The duration since a recent scroll when the results were not seen. Recorded
-    when the UX is hidden. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchRecentScrollSeen" units="ms">
-  <obsolete>
-    Deprecated 02/2017.
-  </obsolete>
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The duration since a recent scroll when the results were seen. Recorded when
-    the UX is hidden. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchRecentScrollSuppression"
-    enum="ContextualSearchTapSuppression">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether showing the Tap to Search UX in response to a Tap was suppressed by
-    a recent scroll. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResolutionDuration" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from starting a resolving search until the Search Term Resolves.
-    Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResolvedSearchDuration" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time from starting a resolving search until the results in the SERP
-    start to become viewable. Applies only to prefetched requests. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResolvedTermWords"
-    enum="ContextualSearchResolvedTermWords">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether the search term was single or multi-word, logged at the time that
-    any Search Term Resolution Response is recieved.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResultsSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen as part of a contextual search. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResultsSeenByGesture"
-    enum="ContextualSearchSeenByGesture">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen, broken down by original triggering
-    gesture. Only includes users that have enabled. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchResultsSeenSelectionWasUrl"
-    enum="ContextualSearchSeenByGesture">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen (Contextual Search panel was opened) when
-    the selection was part of a URL, broken down by original triggering gesture.
-    Includes both users that have enabled Contextual Search and users that are
-    undecided (have neither enabled or disabled the feature). Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchScreenTopSuppressed"
-    enum="ContextualSearchTapSuppression">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether Taps near the top of the screen was suppressed. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSecondTapSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether results were seen for a Tap during suppression when Tap Suppression
-    is enabled. Recorded when the UX is hidden. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSelectionLengthNotSeen" units="chars">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The length of the triggering selection when search results were not seen.
-    Only logged when contextual search is triggered due to a tap. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSelectionLengthSeen" units="chars">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The length of the triggering selection when search results were seen. Only
-    logged when contextual search is triggered due to a tap. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSelectionLengthSuppression"
-    enum="ContextualSearchTapSuppression">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a Tap was suppressed because the selection length was less than the
-    minimum selection length. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSelectionValid"
-    enum="ContextualSearchSelectionValid">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether a Contextual Search selection was valid. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchSerpLoadedOnClose"
-    enum="ContextualSearchLoaded">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether the SERP was fully loaded when an opened panel was closed.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchShouldTranslate"
-    enum="ContextualSearchShouldTranslate">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Emitted when a translate one-box should be forced, to indicate if it
-    actually was forced or simply would have been forced if not disabled by a
-    flag in the variations_service.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchStartedWithCapitalResultsSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether search results were seen during a contextual search where the
-    selected text started with a capital letter but was not all capital letters.
-    Only logged when contextual search is triggered due to a tap. Implemented
-    for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTapsSinceOpenDecided" units="taps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The count of taps that showed a peeking bar without the opt-out promo since
-    this user has last opened the panel.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTapsSinceOpenUndecided" units="taps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The count of taps that showed a peeking bar with the opt-out promo since
-    this user has last opened the panel.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTapSuppressionSeen"
-    enum="ContextualSearchResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether results were seen for a Tap before suppression when Tap Suppression
-    is enabled. Recorded when the UX is hidden. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram
-    name="Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied"
-    enum="ContextualSearchSuppressionResultsSeen">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    Whether results were seen for a Tap and whether any suppression heuristic
-    was satisifed. Recorded when the UX is still shown (suppression not enabled,
-    only logged). Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTimeToSearch" units="ms">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The time between tapping on a word and performing a search. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The DPs count histogram for Taps that were not seen. Implemented for
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.ContextualSearchTopLocationSeen" units="dps">
-  <owner>donnd@chromium.org</owner>
-  <owner>twellington@chromium.org</owner>
-  <summary>
-    The DPs count histogram for Taps that were seen. Implemented for Android.
-  </summary>
-</histogram>
-
-<histogram name="Search.DefaultSearchChangeOrigin"
-    enum="DefaultSearchChangeOrigin">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The origin/cause of a change to the default search provider.
-  </summary>
-</histogram>
-
-<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine">
-  <obsolete>
-    Made obsolete around Chrome 32.  Use Search.DefaultSearchProviderType
-    instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The id of the default search engine that is loaded after Chrome startup. See
-    src/chrome/browser/search_engines/prepopulate_engines.json for more info.
-  </summary>
-</histogram>
-
-<histogram name="Search.DefaultSearchProviderType"
-    enum="OmniboxSearchEngineType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The type of the default search engine that is loaded when a profile is
-    opened or after a profile reset.  Note that at least one profile is opened
-    on startup. Due to an error, there was a period from roughly May 9 2014 to
-    May 23 2014 during which this was not being logged.
-  </summary>
-</histogram>
-
-<histogram name="Search.DesktopSearch.RedirectionInfobarCloseAction"
-    enum="DesktopSearchRedirectionInfobarCloseAction">
-  <obsolete>
-    Deprecated 05/2016 because desktop searches are no longer opened in the
-    default browser.
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The action performed by the user to close the infobar explaining that a
-    desktop search has been redirected to the default search engine.
-  </summary>
-</histogram>
-
-<histogram name="Search.DesktopSearch.URLAction" enum="DesktopSearchURLAction">
-  <obsolete>
-    Deprecated 05/2016 because desktop searches are no longer opened in the
-    default browser.
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The action performed when a desktop search URL is passed to the browser
-    through the command line.
-  </summary>
-</histogram>
-
-<histogram name="Search.GsaAccountChangeNotificationSource"
-    enum="GsaAccountChangeNotificationSource">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    On Android, when GSA tells Chrome about an account change, what is the
-    notification mechanism used, which is either the service connection, or a
-    broadcast. Recorded once per account change.
-  </summary>
-</histogram>
-
-<histogram name="Search.GsaBroadcastsAccountChanges"
-    enum="BooleanAccountChange">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    On Android, whether GSA tells Chrome about account changes through the
-    service or through a broadcast. This is reported at most once per Chrome
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Search.GsaProcessMemoryPss" units="KB">
-  <owner>lizeb@chromium.org</owner>
-  <summary>
-    On Android, when Chrome connects to a bound service exposed by GSA, the
-    memory footprint of the GSA process in KB, as measured by PSS. Reported at
-    most once per Chrome startup.
-  </summary>
-</histogram>
-
-<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit">
-  <obsolete>
-    Deprecated after migrator is deleted in 12/2016.
-  </obsolete>
-  <owner>caitkp@chromium.org</owner>
-  <summary>
-    The number of times that a user-selected DSE was migrated from separate
-    String/List/..Value preferences to the new single DictionaryValue used in
-    M36.
-  </summary>
-</histogram>
-
-<histogram
-    name="Security.HTTPBad.NavigationStartedAfterUserWarnedAboutSensitiveInput"
-    units="ms">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Records the time from when a page was put into a warning state because of a
-    sensitive input on an HTTP page until a navigation starts. Recorded at most
-    once per main-frame navigation. The Finch trial 'mark-non-secure-as'
-    controls whether the user sees an omnibox warning for this state, or just a
-    console warning.
-  </summary>
-</histogram>
-
-<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput"
-    enum="BooleanShown">
-  <obsolete>
-    Deprecated on 2016-11-10 because this is replaced by two separate metrics:
-    Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard and
-    Security.HTTPBad.UserWarnedAboutSensitiveInput.Password.
-  </obsolete>
-  <owner>elawrence@chromium.org</owner>
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
-    security-sensitive form field was rendered in a non-secure context. Logged
-    at most once per main-frame navigation.
-  </summary>
-</histogram>
-
-<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard"
-    enum="BooleanShown">
-  <owner>elawrence@chromium.org</owner>
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
-    credit card form field was rendered in a non-secure context. Logged at most
-    once per main-frame navigation.
-  </summary>
-</histogram>
-
-<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.Password"
-    enum="BooleanShown">
-  <owner>elawrence@chromium.org</owner>
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
-    password form field was rendered in a non-secure context. Logged at most
-    once per main-frame navigation.
-  </summary>
-</histogram>
-
-<histogram
-    name="Security.HTTPBad.WebContentsDestroyedAfterUserWarnedAboutSensitiveInput"
-    units="ms">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Records the time delta between when a page was put into a warning state
-    because of a sensitive input on an HTTP page and when the WebContents was
-    destroyed. Recorded at most once per main-frame navigation, and it is not
-    recorded if the user starts a navigation before the WebContents is
-    destroyed. The Finch trial 'mark-non-secure-as' controls whether the user
-    sees an omnibox warning for this state, or just a console warning.
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpsUrl.Dangerous"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on an HTTPS URL that has
-    been marked dangerous or not secure (such as for malware or broken HTTPS).
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpsUrl.Downgraded"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on a valid HTTPS URL that
-    has a security issue (e.g. mixed content).
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpsUrl.Valid"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on a valid HTTPS URL with no
-    security issues (e.g. no mixed content).
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpUrl.Dangerous"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on an HTTP URL that has been
-    marked dangerous (such as for malware).
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpUrl.Neutral"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on an HTTP URL that does not
-    have an omnibox security indicator warning associated with it.
-  </summary>
-</histogram>
-
-<histogram name="Security.PageInfo.Action.HttpUrl.Warning"
-    enum="WebsiteSettingsAction">
-  <owner>estark@chromium.org</owner>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks Page Info bubble actions that take place on an HTTP URL that has been
-    given a &quot;Not secure&quot; warning in the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="Security.XFrameOptions" enum="XFrameOptions">
-  <owner>mkwst@chromium.org</owner>
-  <owner>arthursonzogni@chromium.org</owner>
-  <summary>
-    Record uses of the X-Frame-Options header when a page is loaded as an
-    iframe.
-  </summary>
-</histogram>
-
-<histogram name="SequencedWorkerPool.ShutdownDelayTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    How long it takes to wait for tasks that block shutdown to complete.
-  </summary>
-</histogram>
-
-<histogram name="SequencedWorkerPool.TaskCount">
-  <obsolete>
-    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    How many pending tasks there are on each request for work from a worker
-    thread.
-  </summary>
-</histogram>
-
-<histogram name="SequencedWorkerPool.UnrunnableTaskCount">
-  <obsolete>
-    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>How many tasks we skip over to find the next runnable task.</summary>
-</histogram>
-
-<histogram name="ServicesCustomization.LoadResult"
-    enum="ServicesCustomizationLoadResult">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    Records result of fetching and parsing OEM customization manifest. See
-    ServicesCustomizationDocument class for more info. Used only on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"
-    units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken for the browser to find and possibly start an active worker
-    to dispatch a FetchEvent for a main frame resource request. For context, a
-    FetchEvent can only be dispatched to an ACTIVATED worker that is running (it
-    has been successfully started). The measurements starts when the browser
-    process receives the request. The browser then finds the worker appropriate
-    for this request (if there is none, this metric is not recorded). If that
-    worker is already started, the browser process can send the request to it,
-    so the measurement ends quickly. Otherwise the browser process has to start
-    the worker and the measurement ends when the worker is successfully started
-    (we do not include in the time it takes for the worker to become ACTIVATED).
-    The metric is not recorded in the following situations: 1) The worker was in
-    state INSTALLED or ACTIVATING, and the browser had to wait for it to become
-    ACTIVATED. This is to avoid including the time to execute the activate event
-    handlers in the worker's script. 2) The worker was started for the fetch AND
-    DevTools was attached during startup. This is intended to avoid including
-    the time for debugging. 3) The request is for New Tab Page. This is because
-    it tends to dominate the stats and makes the results largely skewed.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type"
-    enum="ServiceWorkerPreparationType">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The type of preparation needed for the browser to find and possibly start an
-    active worker to dispatch a FetchEvent for a main frame resource request.
-    See details at ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time.
-    The suffixed histograms for .Time record the time required for each type.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ActivateEvent.Time" units="ms">
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
-    waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ActivateEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.ActivateEvent.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
-    waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ActivateEventStatus"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of dispatching the activate event to the worker. This is recorded
-    to both ServiceWorker.ActivateEventStatus and whichever of
-    ServiceWorker.ActivateEventStatus_InShutdown
-    ServiceWorker.ActivateEventStatus_NotInShutdown is appropriate. (InShutdown
-    means the context was null or ServiceWorkerProcessManger::Shutdown was
-    called.)
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.BackgroundSyncEvent.Time" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a SyncEvent to a Service Worker and
-    receiving a message that it finished handling the event. Includes the time
-    for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ContextRequestHandlerStatus"
-    enum="ServiceWorkerContextRequestHandlerStatus">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of ServiceWorkerContextRequestHandler handling a request for a
-    service worker script. The histogram is suffixed to distinguish new vs
-    installed workers and main vs imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.Database.DestroyDatabaseResult"
-    enum="ServiceWorkerDatabaseStatus">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of destroy database operations in ServiceWorkerDatabase.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.Database.OpenResult"
-    enum="ServiceWorkerDatabaseStatus">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of opening a database for ServiceWorkerDatabase.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.Database.ReadResult"
-    enum="ServiceWorkerDatabaseStatus">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>Records result of read operations in ServiceWorkerDatabase.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.Database.WriteResult"
-    enum="ServiceWorkerDatabaseStatus">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of write operations in ServiceWorkerDatabase.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCache.InitResult">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of opening a disk cache for ServiceWorkerDiskCache.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCache.ReadResponseResult"
-    enum="ServiceWorkerReadResponseResult">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of reading response from ServiceWorkerDiskCache.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCache.WriteResponseResult"
-    enum="ServiceWorkerWriteResponseResult">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of writing response into ServiceWorkerDiskCache.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCacheMigrator.MigrationResult"
-    enum="ServiceWorkerDiskCacheMigrationStatus">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of ServiceWorkerDiskCacheMigrator::Start that migrates
-    resources in BlockFile backend to Simple backend.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCacheMigrator.MigrationTime" units="ms">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerDiskCache migration from BlockFile to Simple.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.DiskCacheMigrator.NumberOfMigratedResources"
-    units="count">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    The counts of resources migrated by ServiceWorkerDiskCacheMigrator. This
-    includes the main script and imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.EventDispatchingDelay" units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time taken between sending an event IPC from the browser process to a
-    Service Worker and executing the event handler in the Service Worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.EventHandledRatioType.Fetch"
-    enum="ServiceWorkerEventHandleRatioType">
-  <owner>kinuko@chromium.org</owner>
-  <summary>
-    Records the proportion of (non foreign) fetch events that are handled
-    compared to the number of events that are fired for a ServiceWorker.
-    Recorded each time the ServiceWorker is stopped when at least one event was
-    fired.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.EventHandledRatioType.ForeignFetch"
-    enum="ServiceWorkerEventHandleRatioType">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    Records the proportion of foreign fetch events that are handled compared to
-    the number of events that are fired for a ServiceWorker.  Recorded each time
-    the ServiceWorker is stopped when at least one event was fired.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ExtendableMessageEvent.Time" units="ms">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    The time taken between dispatching an ExtendableMessageEvent to a Service
-    Worker and receiving a message that it finished handling the event. Includes
-    the time for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ExternalRequest.Time" units="ms">
-  <owner>lazyboy@chromium.org</owner>
-  <summary>
-    The duration an external request spent to keep a service worker alive.
-    Currently, extension service workers use external requests to keep the
-    worker alive during the time the worker requests an extension API.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.Fallback.Time" units="ms">
-  <owner>jeremyarcher@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a FetchEvent to a Service Worker and
-    receiving a fallback-to-network reply.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.HasResponse.Time" units="ms">
-  <owner>jeremyarcher@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a FetchEvent to a Service Worker and
-    receiving a response. Includes the time for the respondWith() promise to
-    settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.MainResource.Status"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of dispatching a fetch event to a Service Worker for a main
-    resource request.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.Subresource.Status"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of dispatching a fetch event to a Service Worker for a
-    subresource request.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.Time" units="ms">
-  <obsolete>
-    Deprecated on 2015-07-13; please use
-    ServiceWorker.FetchEvent.HasResponse.Time or
-    ServiceWorker.FetchEvent.Fallback.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
-    the respondWith() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEvent.WaitUntil.Time" units="ms">
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a FetchEvent to a Service Worker and
-    finishing the FetchEvent. Includes the time for the waitUntil() promise to
-    settle. If there is no waitUntil promise, this will be almost the same with
-    HasResponse.Time or Fallback.Time.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.FetchEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.FetchEvent.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
-    the respondWith() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ForeignFetch.OriginCount">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The number of origins a particular service worker with foreign fetch
-    registrations will intercept fetches from. A value of zero indicates that
-    the foreign fetch service worker intercepts requests from any origin.
-    Recorded at the end of a successful install event, if the service worker
-    registered for foreign fetch. A service worker that registers for foreign
-    fetch must always intercept fetches from at least one origin or intercept
-    fetches from all origins.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ForeignFetch.ScopeCount">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The number of foreign fetch scopes a particular service worker registered
-    for. Recorded at the end of every successful install event. A value of zero
-    indicates that the service worker did not register for foreign fetch.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ForeignFetchEvent.Fallback.Time" units="ms">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a ForeignFetchEvent to a Service Worker
-    and receiving a fallback-to-network reply. Includes the time for the
-    waitUntil() promise to settle, if any.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ForeignFetchEvent.HasResponse.Time" units="ms">
-  <owner>mek@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a ForeignFetchEvent to a Service Worker
-    and receiving a response. Includes the time for the respondWith() promise to
-    settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ForeignFetchEvent.WaitUntil.Time" units="ms">
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a ForeignFetchEvent to a Service Worker
-    and finishing the ForeignFetch. Includes the time for the waitUntil()
-    promise to settle. If there is no waitUntil promise, this will be almost the
-    same with HasResponse.Time or Fallback.Time.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.InstallEvent.Time" units="ms">
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    The time taken between dispatching an InstallEvent to a Service Worker and
-    receiving a message that it finished handling the event. Includes the time
-    for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.InstallEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.InstallEvent.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.oninstall. Includes the time for
-    the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.InstallEventStatus"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>The result of dispatching the install event to the worker.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.MainFramePageLoad" enum="ServiceWorkerSite">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    Counts main frame page loads controlled by a service worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.MainFramePageLoad.CoreTransition"
-    enum="CorePageTransition">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The transition type for main frame page loads controlled by a service
-    worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.MainFramePageLoad.RedirectChainLength"
-    units="urls">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    Total length of the server redirects during main frame page loads controlled
-    by a service worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.MessageEvent.Time" units="ms">
-  <obsolete>
-    Deprecated 2016-04 in favor of ServiceWorker.ExtendableMessageEvent.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.MessageEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.MessageEvent.Time.
-  </obsolete>
-  <owner>shimazu@chromium.org</owner>
-  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationHintPrecision" enum="BooleanEnabled">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The precision of the speculative launch of Service Workers for navigation
-    hints. Recorded when the worker is stopped. If there was no main/sub frame
-    fetch event fired on the worker, this value is false. This means that the
-    speculative launch wasn't helpful.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.ConcurrentTime" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The duration of time when both (1) a service worker is being found and
-    possibly started up, (2) the navigation preload request is in-flight. The
-    measurement ends once either the worker is prepared, or the navigation
-    preload response is received (OnReceiveResponse() is called). This is a
-    rough estimate of the performance win of using navigation preload, ignoring
-    concurrency overhead. This histogram is recorded when a navigation preload
-    response is succesfully forwarded to the service worker's fetch event, with
-    the same restrictions as for
-    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
-    additionally recorded to the appropriate suffixed histograms.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.FinishedBeforeStartWorker"
-    enum="BooleanNavPreloadFinishedFirst">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Whether the navigation preload response arrived before the activated and
-    running service worker was prepared. This histogram is recorded when a
-    navigation preload response is succesfully forwarded to the service worker's
-    fetch event, with the same restrictions as for
-    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
-    additionally recorded to the appropriate suffixed histograms.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.HeaderSize" units="bytes">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The size of Service-Worker-Navigation-Preload header when the navigation
-    preload request is to be sent. The default value of the header is
-    &quot;true&quot;, so the default size is 4.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.NavPreloadAfterSWStart"
-    units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    This is recorded in the case where the activated and running service worker
-    was prepared before the navigation preload response arrived. It is the
-    remaining time it took to receive the response after the worker was
-    prepared.
-
-    This histogram is recorded when a navigation preload response is succesfully
-    forwarded to the service worker's fetch event (for the case mentioned
-    above), with the same restrictions as for
-    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
-    additionally recorded to the appropriate suffixed histograms.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.ResponseTime" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken for the navigation preload response to start, i.e., when
-    OnReceiveResponse() is called. This histogram is recorded when a navigation
-    preload response is successfully forwarded to the service worker's fetch
-    event, with the same restrictions as for
-    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
-    additionally recorded to the appropriate suffixed histograms.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NavigationPreload.SWStartAfterNavPreload"
-    units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    This is recorded in the case where the navigation preload response arrived
-    before the activated and running service worker was prepared. It is the
-    remaining time it took to prepare the worker after the response arrived.
-
-    This histogram is recorded when a navigation preload response is succesfully
-    forwarded to the service worker's fetch event (for the case mentioned
-    above), with the same restrictions as for
-    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
-    additionally recorded to the appropriate suffixed histograms.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NotificationClickEvent.Time" units="ms">
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a NotificationClickEvent to a Service
-    Worker and receiving a message that it finished handling the event. Includes
-    the time for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NotificationClickEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.NotificationClickEvent.Time.
-  </obsolete>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    Execution time of ServiceWorkerGlobalScope.onnotificationclick.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.NotificationCloseEvent.Time" units="ms">
-  <owner>nsatragno@chromium.org</owner>
-  <owner>peter@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a NotificationCloseEvent to a Service
-    Worker and receiving a message that it finished handling the event. Includes
-    the time for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.PageLoad" enum="ServiceWorkerSite">
-  <owner>falken@chromium.org</owner>
-  <summary>Counts page loads controlled by a service worker.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.PaymentRequestEvent.Time" units="ms">
-  <owner>jinho.bang@samsung.com</owner>
-  <summary>
-    The time taken between dispatching an PaymentRequestEvent to a Service
-    Worker and receiving a message that it finished handling the event. Includes
-    the time for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.PushEvent.Time" units="ms">
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    The time taken between dispatching a PushEvent to a Service Worker and
-    receiving a message that it finished handling the event. Includes the time
-    for the waitUntil() promise to settle.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.PushEventExecutionTime" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of ServiceWorker.PushEvent.Time.
-  </obsolete>
-  <owner>johnme@chromium.org</owner>
-  <summary>Execution time of ServiceWorkerGlobalScope.onpush.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.RequestTimeouts.Count"
-    enum="ServiceWorkerMetrics.EventType">
-  <owner>jeremyarcher@google.com</owner>
-  <summary>
-    The number of Service Worker request timeouts, by request type.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptCachedMetadataSize" units="bytes">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The length of cached metadata of Service Worker scripts. Logged on each load
-    of Service Worker script only when the cached metadata is available. It
-    doesn't include the size of imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptCachedMetadataTotalSize" units="bytes">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The total length of cached metadata of Service Worker scripts. Logged on
-    each start of Service Worker only when the cached metadata is available. It
-    includes the main script and imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptCount" units="count">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The counts of scripts per Service Worker. Logged on each start of Service
-    Worker. It includes the main script and imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptLoadSuccess" enum="BooleanSuccess">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Whether loading the service worker script succeeded. Only recorded for
-    installed service workers. Recorded by the browser process when reported
-    back by the renderer during worker startup.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptSize" units="bytes">
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The length of Service Worker scripts. Logged on each load of Service Worker
-    script. It doesn't include the size of imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.ScriptTotalSize" units="bytes">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The total length of Service Worker scripts. Logged on each start of Service
-    Worker. It includes the main script and imported scripts.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.SendStopWorker.Status"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to send the IPC message to a renderer process telling
-    it to stop an embedded worker. Recorded in EmbeddedWorkerInstance::Stop.
-    This was previously recorded for both the IPC and Mojo service worker
-    implementations, but as of Jan 2017, this is only recorded for the IPC
-    implementation. This histogram will be removed after the IPC implementation
-    is removed.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartNewWorker.Status"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to start a Service Worker that has not yet installed.
-    See also ServiceWorker.StartWorker.Status for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartNewWorker.Time" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken to start a Service Worker that has not yet installed, from
-    process allocation to ACK of started from the renderer (which occurs after
-    script execution). This may include script download time. The metric is not
-    recorded if DevTools was ever attached to the Service Worker during startup.
-    See also ServiceWorker.StartWorker.Time for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.AfterFailureStreak"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to start a service worker after it has failed
-    consecutively. Recorded only for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.FailureStreak" units="count">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The number of consecutive startup failures of a service worker. Recorded
-    each time the service worker failed (so there is double counting: failing
-    twice results in 1 and 2 being logged). Only for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.FailureStreakEnded" units="count">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    When a worker startup succeeded after failing, the number of times the
-    worker had consecutively failed. Recorded only for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.Purpose"
-    enum="ServiceWorkerMetrics.EventType">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The purpose for starting up a service worker. Recorded only for installed
-    workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.Status"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to start a Service Worker that is already installed.
-    See also ServiceWorker.StartNewWorker.Status for new workers. See also
-    ServiceWorker.StartWorker.StatusByPurpose_* for the breakdown by event type.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.StatusByPurpose"
-    enum="ServiceWorkerStatusCode">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to start a service worker for a particular event type
-    (see ServiceWorker.StartWorker.Status for the total). Only recorded for
-    installed workers. For event type:
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.Time" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken to start a Service Worker that is already installed, from
-    process allocation to ACK of started from the renderer (which occurs after
-    script execution). The metric is not recorded if DevTools was ever attached
-    to the Service Worker during startup. See also
-    ServiceWorker.StartNewWorker.Time for new workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.Timeout.StartPurpose"
-    enum="ServiceWorkerMetrics.EventType">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Records the start purpose for a service worker that timed out while starting
-    up. Recorded only for installed workers.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StartWorker.TimeoutPhase"
-    enum="EmbeddedWorkerStartingPhase">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The phase the EmbeddedWorker was in when ServiceWorker startup timed out.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StopWorker.Status"
-    enum="ServiceWorkerStopStatus">
-  <obsolete>
-    Removed from code in Oct 2015, replaced with ServiceWorker.WorkerStopped.
-  </obsolete>
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The result of trying to stop a Service Worker. Recorded only for installed
-    Service Workers that succesfully stopped or were detected as stalling. If a
-    worker stalled and later stopped, it will be recorded as both STALLED and
-    STALLED_THEN_STOPPED.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.StopWorker.Time" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>The time taken to stop a Service Worker.</summary>
-</histogram>
-
-<histogram name="ServiceWorker.Storage.DeleteAndStartOverResult"
-    enum="ServiceWorkerDeleteAndStartOverResult">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records result of storage recovery operations in ServiceWorkerStorage.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.Storage.DiskCacheMigrationResult"
-    enum="ServiceWorkerDiskCacheMigrationResult">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records the final result of diskcache migration in ServiceWorkerStorage.
-    ServiceWorker.DiskCacheMigrator.MigrationResult records more detailed status
-    of migration operations.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.Storage.PurgeResourceResult"
-    enum="NetErrorCodes">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records successes and failures of purging a stale resource in
-    ServiceWorkerStorage.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.TerminateThread.Time" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The time taken in the renderer process between the main thread asking the
-    worker thread to terminate and getting ACK that it terminated.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.TimeBetweenEvents" units="ms">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Called at the beginning of each ServiceWorkerVersion::Dispatch*Event
-    function: the time elapsed since idle. Generally this is the time between
-    one event ending and one event starting, if the worker remained running in
-    the interim.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.UnhandledEventRatio" units="%">
-  <obsolete>
-    Deprecated 2015-06 in favor of ServiceWorker.EventHandledStatus*.
-  </obsolete>
-  <owner>kinuko@chromium.org</owner>
-  <summary>
-    Records the ratio of unhandled events to all events that are dispatched to
-    each ServiceWorker.  Recorded when each ServiceWorkerVersion is destructed.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.URLRequestJob.FallbackedRequestMode"
-    enum="FetchRequestMode">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    Records the the mode of request that was fallbacked to the network by the
-    Service Worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.URLRequestJob.MainResource.Result"
-    enum="ServiceWorkerURLRequestJobResult">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Records the result of a main resource request forwarded to a Service Worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.URLRequestJob.MainResource.StatusZeroError"
-    enum="ServiceWorkerResponseError">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Records the error provided when the renderer returns a response with status
-    code zero to a main resource request forwarded to a Service Worker (i.e.,
-    ServiceWorker.URLRequestJob.MainResource.Result was
-    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.URLRequestJob.Subresource.Result"
-    enum="ServiceWorkerURLRequestJobResult">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Records the result of a subresource request forwarded to a Service Worker.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.URLRequestJob.Subresource.StatusZeroError"
-    enum="ServiceWorkerResponseError">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    Records the error provided when the renderer returns a response with status
-    code zero to a subresource request forwarded to a Service Worker (i.e.,
-    ServiceWorker.URLRequestJob.Subresource.Result was
-    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.WorkerForMessageFound" enum="Boolean">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    True if a message from the renderer intended for a browser-side embedded
-    worker instance found its recipient. False if the instance did not exist
-    when the message was received (e.g., it was a detached worker). Recorded in
-    EmbeddedWorkerRegistry::GetWorkerForMessage.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorker.WorkerStopped" enum="ServiceWorkerStoppedStatus">
-  <owner>falken@chromium.org</owner>
-  <summary>
-    The mechanism by which a service worker entered running status STOPPED.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Cache" units="ms">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The time to perform operations on the Cache object in the ServiceWorker
-    Cache API.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Cache.AddResponseType"
-    enum="ServiceWorkerCacheResponseType">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>
-    Records the response type to be added in the Cache by Cache.add()/addAll().
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Cache.AllWritesResponseType"
-    enum="ServiceWorkerCacheResponseType">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records the response type to be added in the Cache by all operations that
-    write to the cache.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.CacheStorage" units="ms">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The time to perform operations on the CacheStorage object in the
-    ServiceWorker Cache API.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.CreateCacheStorageResult"
-    enum="BooleanCreated">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Whether a new ServiceWorkerCacheStorage and its directory were successfully
-    created on disk.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.IndexSizeDifference" units="bytes">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The absolute difference between the ServiceWorker Cache size saved to the
-    CacheStorage index and the actual cache size when opened.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.InitBackendResult"
-    enum="ServiceWorkerCacheErrorType">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The result of opening the backend in the ServiceWorker Cache API.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Response.HasDeprecatedURL" enum="Boolean">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    True if a response read from the CacheStorage has a url field. This field
-    was deprecated in M57.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow" enum="Boolean">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    An operation is slow (true) if it takes at least 10 seconds to run. If an
-    operation never completes, it will still be recorded as slow.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The time in ms from when an operation is started until it completes.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The time in ms from when an operation was queued until its task is posted.
-  </summary>
-</histogram>
-
-<histogram name="ServiceWorkerCache.Scheduler.QueueLength" units="operations">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of operations in the scheduling queue just before enqueuing a new
-    operation.
-  </summary>
-</histogram>
-
-<histogram name="Session.ClosedTabCounts" units="operations">
-  <owner>rohitrao@chromium.org</owner>
-  <summary>
-    The number of tabs closed by the user during the current session
-    (launch/foregrounding to backgrounding).
-
-    This histogram is only logged on iOS when the application is backgrounded.
-  </summary>
-</histogram>
-
-<histogram name="Session.NewTabCounts" units="operations">
-  <owner>rohitrao@chromium.org</owner>
-  <summary>
-    The number of tabs created by the user during the current session
-    (launch/foregrounding to backgrounding).
-
-    This histogram is only logged on iOS when the application is backgrounded.
-  </summary>
-</histogram>
-
-<histogram name="Session.OpenedTabCounts" units="operations">
-  <owner>rohitrao@chromium.org</owner>
-  <summary>
-    The number of times the user changed the active tab (this can happen when
-    manually selecting a new tab, when a pre-rendered tab is made active, when
-    closing the current tab and the next one is selected) during the current
-    session (launch/foregrounding to backgrounding).
-
-    This histogram is only logged on iOS when the application is backgrounded.
-  </summary>
-</histogram>
-
-<histogram name="Session.TotalDuration" units="ms">
-  <owner>mariakhomenko@chromium.org</owner>
-  <owner>fqian@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The length of a session (launch/foregrounding to backgrounding) in
-    milliseconds.
-
-    Desktop: This also takes into account user interaction and audio events.
-    Starting from M55 the session length is recorded by discounting for default
-    inactivity timeout.
-
-    Android: There is a known issue where JavaScript dialogs and other things
-    that take focus away from the Chrome activity can cause this metric to
-    record a session end prematurely. See: crbug.com/678276.
-  </summary>
-</histogram>
-
-<histogram name="SessionCrashed.Bubble" enum="SessionCrashedBubbleUserAction">
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>How did the user interact with the SessionCrashed Bubble?</summary>
-</histogram>
-
-<histogram name="SessionRestore.Actions" enum="SessionRestoreActions">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The actions that have occurred in a session restore timeline. These are to
-    be interpreted as raw event counts. Tabs are almost certainly deferred due
-    to the existence memory pressure, but this may not always be the case.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.AllTabsLoaded" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    The time from SessionRestore start until all tabs have finished loading.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.command_size" units="bytes">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    The size of the commands written to disk. See SessionBackend for details.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.FirstTabPainted" units="ms">
-  <obsolete>
-    Deprecated 2014-10 in favor of SessionRestore.ForegroundTabFirstPaint and
-    ultimately SessionRestore.ForegroundTabFirstPaint3.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <owner>sky@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="SessionRestore.ForegroundTabFirstLoaded" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    The time from SessionRestore start until a visible tab has finished loading.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.ForegroundTabFirstPaint" units="ms">
-  <obsolete>
-    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
-    and ultimately SessionRestore.ForegroundTabFirstPaint3.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <owner>sky@chromium.org</owner>
-  <summary>
-    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
-    and ultimately SessionRestore.ForegroundTabFirstPaint3.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.ForegroundTabFirstPaint2" units="ms">
-  <obsolete>
-    Deprecated 2015-05 in favor of SessionRestore.ForegroundTabFirstPaint3.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <owner>sky@chromium.org</owner>
-  <summary>
-    The time from SessionRestore start until a visible tab's first paint. This
-    metric only records paints that have occurred after a tab has loaded.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.ForegroundTabFirstPaint3" units="ms">
-  <owner>chrisha@chromium.org</owner>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    The time from SessionRestore start until a visible tab's first paint.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.FrameUniqueNameLength" units="bytes">
-  <owner>dcheng@chromium.org</owner>
-  <summary>
-    Records the length of unique names for web frames that are saved as part of
-    session restore data. It is logged each time the unique name changes, which
-    typically happens when a web frame is first created or its name is changed
-    by mutating window.name.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.last_session_file_size" units="KB">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>The size, in k, of the last session file on disk.</summary>
-</histogram>
-
-<histogram name="SessionRestore.NavEntryCommittedLongPeriod">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Like NavEntryCommittedPeriod, but specifically to provide a clearer
-    breakdown of samples in the 10 minutes - 8 hours range.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.NavEntryCommittedPeriod" units="ms">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Milliseconds between subsequent Save() operations due to a nav entry being
-    committed (new tab created + nav initiated).
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.NavigationListPrunedLongPeriod">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Like NavListPrunedPeriod, but specifically to provide a clearer breakdown of
-    samples in the 10 minutes - 8 hours range.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.NavigationListPrunedPeriod" units="ms">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Milliseconds between subsequent Save() operations due to the navigation list
-    being pruned (typically a change in back/forward stacks).
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.ParallelTabLoads">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    The number of tabs that were loaded simultaneously when restoring a session.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.read_session_file_time" units="ms">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Amount of time to read and assemble the commands from the last session.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.RestoredSubframeURL" enum="BooleanRestoredURL">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    How often history navigations in subframes restore a different URL than the
-    frame's default src URL.  This indicates how much users rely on subframe
-    session history items.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.RestoreSubframeFramePathLength" units="bytes">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    Records the length of unique names that include frame paths, for subframes
-    that are restoring a different URL than the frame's default src URL during a
-    history navigation.  Large values here would indicate a possible challenge
-    for the plan to truncate frame unique names (to save memory).
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.SaveLongPeriod">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Like SavePeriod, but specifically to provide a clearer breakdown of samples
-    in the 10 minutes - 8 hours range.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.SavePeriod" units="ms">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Amount of time between subsequent SessionService Save() operations (aka
-    updates to session data).
-  </summary>
-  <details>
-    Periods longer than 10 minutes are grouped together; see SaveLongPeriod for
-    resolution.
-  </details>
-</histogram>
-
-<histogram name="SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit"
-    enum="BooleanSuccess">
-  <owner>dcheng@chromium.org</owner>
-  <summary>
-    How often a subframe is assigned a new name between the initial empty
-    document and the first navigation.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.TabActions" enum="SessionRestoreTabActions">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    A breakdown of key events that occur to individual tabs as they are
-    processed by an ongoing session restore.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.TabClosedLongPeriod">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    TabClosedPeriod, but specifically to provide a clearer breakdown of samples
-    in the 10 minutes - 8 hours range.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.TabClosedPeriod" units="ms">
-  <obsolete>
-    Deprecated 2017-02 as not actionable.
-  </obsolete>
-  <summary>
-    Milliseconds between subsequent Save() operations due to a tab being closed.
-  </summary>
-</histogram>
-
-<histogram name="SessionRestore.TabCount" units="tabs">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The number of tabs involved in a single session restore event.
-  </summary>
-</histogram>
-
-<histogram name="SessionStorageDatabase.Commit" enum="LevelDBStatus">
-  <owner>cmumford@chromium.org</owner>
-  <summary>The result of a commit to the sessionStorage database.</summary>
-</histogram>
-
-<histogram name="SessionStorageDatabase.Open" enum="SessionStorageDatabaseOpen">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The result (success, failure, or database recreated) of trying to open the
-    LevelDB database for sessionStorage.
-  </summary>
-</histogram>
-
-<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine">
-  <obsolete>
-    Deprecated in Chrome 30.  Use Search.DefaultSearchProviderType instead.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The id of the default search engine domain that is specified in user
-    preferences when a profile is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Settings.EnforcementGroupDeterminedFromTrial"
-    enum="BooleanSuccess">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Whether the SettingsEnforcement group was successfully determined from the
-    field trial or if it had to revert to the hardcoded default.
-  </summary>
-</histogram>
-
-<histogram name="Settings.FilterOnLoadTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The amount of time it took to run PrefHashFilter::FilterOnLoad on startup.
-  </summary>
-</histogram>
-
-<histogram name="Settings.FilterSerializeDataTime" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The amount of time it took to run PrefHashFilter::FilterSerializeData on the
-    UI thread prior to writing the Preferences file to disk. Only logged when
-    PrefHashFilter::FilterSerializeData actually had work to do.
-  </summary>
-</histogram>
-
-<histogram name="Settings.GivenShowHomeButton_HomePageIsNewTabPage"
-    enum="Boolean">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether or not the home page user preference is set to the default NTP value
-    when a profile is loaded. This is only logged if the home button is shown.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HashesDictionaryTrusted" enum="BooleanValid">
-  <owner>csharp@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on profile load. Indicates whether the hashes dictionary for this
-    profile is trusted.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine">
-  <obsolete>
-    Deprecated in Chrome 30.  Replaced by Settings.HomePageEngineType.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The id of the home page domain that is specified in user preferences when a
-    profile is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Tries to pretend the home page URL is a search URL, and records the search
-    engine type of that URL by comparing the TLD+1 of the home page URL with
-    those of the different known search engines.  Recorded when a profile is
-    opened, if a home page URL has been set.  Note that at least one profile is
-    opened on startup.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean">
-  <obsolete>
-    Deprecated 08/05/2013. Replaced by
-    Settings.GivenShowHomeButton_HomePageIsNewTabPage.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Whether or not the home page user preference is set to the default NTP value
-    when a profile is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage.PulledFromSync" enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The value of the home-page-is-new-tab-page pref when pulled down from sync
-    to update an out-of-sync local pref store.
-  </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage.PushedToSync" enum="Boolean">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The value of the home-page-is-new-tab-page pref when pushed up to sync from
-    a change made locally.
-  </summary>
-</histogram>
-
-<histogram name="Settings.InitializedFromMasterPrefs" enum="BooleanSuccess">
-  <owner>csharp@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on first run when generating the Preferences file from
-    master_preferences. True if serializing the generated Preferences file to
-    disk was successful, false otherwise. Note: this event does not occur if
-    there is no master_preferences file on first run.
-  </summary>
-</histogram>
-
-<histogram name="Settings.JsonDataReadSizeKilobytes" units="KB">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The size (in kilobytes) of the JSON settings read from disk on startup.
-    Suffixed with the name of the corresponding JSON file.
-  </summary>
-</histogram>
-
-<histogram name="Settings.JsonDataSizeKilobytes" units="KB">
-  <obsolete>
-    Deprecated 02/2015. Replaced by Settings.JsonDataReadSizeKilobytes.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The size of the JSON settings content about to be written to disk in
-    kilobytes. Suffixed with the name of the JSON file being written to disk.
-  </summary>
-</histogram>
-
-<histogram name="Settings.JsonDataWriteCount" units="count">
-  <owner>raymes@chromium.org</owner>
-  <summary>
-    The number of writes of a JSON file that occur in every 5 minute period of
-    running Chrome. Suffixed with the name of the corresponding JSON file.
-  </summary>
-</histogram>
-
-<histogram name="Settings.LegacyMachineIdGenerationSuccess"
-    enum="BooleanSuccess">
-  <owner>proberge@chromium.org</owner>
-  <summary>
-    Whether generation of the RLZ deterministic machine-specific device id was
-    successful when creating the ProfilePrefStore.
-  </summary>
-</histogram>
-
-<histogram name="Settings.LoadCompletedTime" units="ms">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    The amount of time between the render frame host StartProvisionalLoad event
-    and the render frame DocumentOnLoadCompleted event for the settings page.
-  </summary>
-</histogram>
-
-<histogram name="Settings.LoadCompletedTime.MD" units="ms">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    The amount of time between the render frame host StartProvisionalLoad event
-    and the render frame DocumentOnLoadCompleted event for the md-settings page.
-  </summary>
-</histogram>
-
-<histogram name="Settings.LoadDocumentTime" units="ms">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    The amount of time between the render frame host StartProvisionalLoad and
-    DidFinishDocumentLoad events for the settings page.
-  </summary>
-</histogram>
-
-<histogram name="Settings.LoadDocumentTime.MD" units="ms">
-  <owner>stevenjb@chromium.org</owner>
-  <summary>
-    The amount of time between the render frame host StartProvisionalLoad and
-    DidFinishDocumentLoad events for the md-settings page.
-  </summary>
-</histogram>
-
-<histogram name="Settings.MachineIdGenerationSuccess" enum="BooleanSuccess">
-  <owner>proberge@chromium.org</owner>
-  <summary>
-    Whether generation of the deterministic machine-specific device id was
-    successful when initializing the PrefHashStore.
-  </summary>
-</histogram>
-
-<histogram name="Settings.MigratedHashesFromLocalState" enum="BooleanMigrated">
-  <obsolete>
-    Deprecated in Chrome 54, as we stopped legacy migration of preferences.
-  </obsolete>
-  <owner>csharp@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Whether, while loading a profile, any preference hashes were migrated from
-    Local State to either Preferences or Protected Preferences.
-  </summary>
-</histogram>
-
-<histogram name="Settings.PinnedTabEngineTypes" enum="OmniboxSearchEngineType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Tries to pretend pinned tab URLs are search URLs, and records the search
-    engine types of those URLs by comparing the TLD+1s of the URLs with those of
-    the different known search engines.  Recorded when a profile is opened, if
-    there are pinned tabs.  Note that at least one profile is opened on startup.
-  </summary>
-</histogram>
-
-<histogram name="Settings.PinnedTabs">
-  <owner>mpearson@chromium.org</owner>
-  <summary>The number of pinned tabs opened when a profile is loaded.</summary>
-</histogram>
-
-<histogram name="Settings.PinUnlockSetup" enum="LockScreenProgress">
-  <owner>sammiequon@chromium.org</owner>
-  <summary>
-    The users progress through the pin unlock setup wizard. Each type
-    corresponds to the user completeing a different stage of the setup wizard.
-  </summary>
-</histogram>
-
-<histogram name="Settings.RegisterProfilePrefsTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during RegisterProfilePrefs.
-  </summary>
-</histogram>
-
-<histogram name="Settings.SearchLength">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    The number of characters typed in the chrome://settings page search box.
-    Intended to determine if we are making the user type too much to find what
-    they are looking for (the search is incremental).
-  </summary>
-</histogram>
-
-<histogram name="Settings.SearchLengthNoMatch">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    If no matches are found when searching within the chrome://settings page,
-    record the length of the search text.
-  </summary>
-</histogram>
-
-<histogram name="Settings.SearchPageMatchCount">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    The number of search page hits within the chrome://settings page.  This is
-    especially important when the count is zero (i.e. we returned no hits for a
-    given search in settings).  A search is considered complete via timeout
-    since there is no concrete way to define the end of a search (the search is
-    incremental).
-  </summary>
-</histogram>
-
-<histogram name="Settings.SearchSections" enum="SettingsSections">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    If there is no further activity in the search box for 1 second, this records
-    one tick each time a settings section is shown as a result of searching
-    withing the chrome://settings page.  If multiple matches are found within
-    the same section, the section match is only recorded once.
-  </summary>
-</histogram>
-
-<histogram name="Settings.SearchSubpageMatchCount">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    The number of search subpage hits within the chrome://settings page.  This
-    is different from Settings.SearchPageMatchCount in that it is tracking hits
-    in subpages rather than top level pages. See also
-    Settings.SearchPageMatchCount.
-  </summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton" enum="BooleanEnabled">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Whether or not the home button is enabled in user preferences when a profile
-    is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton.PulledFromSync" enum="BooleanEnabled">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The enabled state of the Home button pref when pulled down from sync to
-    update an out-of-sync local pref store.
-  </summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton.PushedToSync" enum="BooleanEnabled">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The enabled state of the Home button pref when pushed up to sync from a
-    change made locally.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartSetAsDefault" enum="BooleanHit">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The user clicked &quot;Make Google Chrome the default browser&quot; on the
-    settings page.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine">
-  <obsolete>
-    Deprecated in Chrome 30.  Replaced by Settings.StartupPageEngineTypes.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The ids of startup page domains that are specified in user preferences when
-    a profile is loaded.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageEngineTypes"
-    enum="OmniboxSearchEngineType">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    Tries to pretend the startup page URLs are search URLs, and records the
-    search engine types of those URLs by comparing the TLD+1s of the URLs with
-    those of the different known search engines.  Recorded when a profile is
-    opened, if startup page URLs have been set.  Note that at least one profile
-    is opened on startup.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings" enum="SessionStartupPref">
-  <owner>mpearson@chromium.org</owner>
-  <summary>The startup page settings when a profile is loaded.</summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings.PulledFromSync"
-    enum="SessionStartupPref">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The startup page setting when pulled down from sync to update an out-of-sync
-    local pref store.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings.PushedToSync"
-    enum="SessionStartupPref">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The startup page setting when pushed up to sync from a change made locally.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadURLs">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of URLs to be loaded on startup when a profile is loaded, if the
-    startup page setting is set to load URLs.
-  </summary>
-</histogram>
-
-<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration">
-  <obsolete>
-    Deprecated 12/2015.
-  </obsolete>
-  <owner>mad@chromium.org</owner>
-  <summary>The startup URLs pref migration steps.</summary>
-</histogram>
-
-<histogram name="Settings.StartupURLsResetTime" units="ms">
-  <obsolete>
-    Deprecated 12/2015.
-  </obsolete>
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The time elapsed in milliseconds in between startup URLs pref migration. A
-    value of 0 indicates that the last migration time was in the future due to
-    e.g. an incorrect system time.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TimeToFirstSearch" units="ms">
-  <owner>dschuyler@chromium.org</owner>
-  <summary>
-    The time between when the chrome://settings page is opened to the first time
-    a search is done within that page.  This is intended to evaluate how long a
-    user looks for a setting before giving up and searching for it.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TimeUntilInteractive" units="ms">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    The time until the settings Web UI is loaded, rendered, and interactive for
-    users (as in they can change a setting). Automatically logged each time the
-    settings page is opened (if not closed before interactive).
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceChanged" enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference whose value has been changed since the last
-    time Chrome set it. Without a suffix, this histogram stands for preference
-    validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceCleared" enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference whose value has been cleared since the last
-    time Chrome set it. Without a suffix, this histogram stands for preference
-    validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceInitialized"
-    enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference whose last value isn't known. We may be just
-    starting to track the preference, or local state may have been changed
-    outside of Chrome. This should only happen once per pref per profile.
-    Without a suffix, this histogram stands for preference validation using MACs
-    in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference">
-  <obsolete>
-    Deprecated 2014-07.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logs the tracked preference id when it is migrated to the new MAC algorithm.
-    This should only happen once per pref per profile.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"
-    enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference whose value has not changed since the last
-    time Chrome set it, but which was last set using a legacy device ID. Each
-    user should report this at most once per preference id and immediately be
-    migrated to the latest hashing model. Without a suffix, this histogram
-    stands for preference validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceNullInitialized"
-    enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference which was initialized despite the absence of
-    a MAC as its value was NULL. Without a suffix, this histogram stands for
-    preference validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceReset" enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>The id of a tracked preference which was reset by Chrome.</summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferencesAlternateStoreVersion"
-    enum="PrefHashStoreVersion">
-  <obsolete>
-    Deprecated 2014-06.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The version of a PrefHashStore, reported once for each alternate
-    PrefHashStore (not associated to the default profile) from a delayed task on
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom"
-    enum="PrefHashStoreVersion">
-  <obsolete>
-    Deprecated 2014-06.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The previous version of an alternate PrefHashStore (not associated to the
-    default profile) that was updated from a delayed task on startup. This
-    should match Settings.TrackedPreferencesAlternateStoreVersion fairly closely
-    for all versions but VERSION_LATEST which should never be reported here.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferencesInitializedForUnloadedProfile"
-    enum="BooleanHit">
-  <obsolete>
-    Deprecated 2014-02 in favor of
-    Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Preference tracking was initialized for an unloaded profile. This should
-    happen at most once per profile.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferencesNoEnforcementOnDomain"
-    enum="BooleanEnabled">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Whether settings enforcement was cancelled for a machine joined to a domain.
-    Reported once per session on browser startup (note: this histogram was
-    disabled for part of M40).
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceTrustedInitialized"
-    enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference which was initialized despite the absence of
-    a MAC as the current MACs are trusted, inferring that this is a newly
-    tracked pref. Without a suffix, this histogram stands for preference
-    validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceUnchanged" enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference whose value has not changed since the last
-    time Chrome set it. Without a suffix, this histogram stands for preference
-    validation using MACs in the JSON pref files.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceWantedReset"
-    enum="TrackedPreference">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The id of a tracked preference which Chrome would have reset had the config
-    allowed it.
-  </summary>
-</histogram>
-
-<histogram name="Settings.TrackedSplitPreferenceChanged">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of items that had changed in a dictionary pref when
-    Settings.TrackedPreferenceChanged is reported for that pref.
-  </summary>
-</histogram>
-
-<histogram name="Settings.ZoomLevelPreferencesMigrated" enum="BooleanMigrated">
-  <obsolete>
-    Deprecated 2015-08-18.
-  </obsolete>
-  <owner>wjmaclean@chromium.org</owner>
-  <summary>
-    Tracks migration to per-partition zoom-level preferences during profile
-    initialization.
-  </summary>
-</histogram>
-
-<histogram name="SettingsAppMonitor.InitializationResult" enum="BooleanSuccess">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Indicates whether or not the Windows Settings app monitor was initialized.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetBubble.NumNoThanksPerReset">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    Counts the number of times the user clicked on the No Thanks button of the
-    settings reset bubble before clicking on the Reset button in the same Chrome
-    session.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.ConfigError"
-    enum="SettingsResetPromptConfigError">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates if an error was detected in the settings reset prompt config data
-    while initializing the reset prompt configuration.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.DelayBeforePromptParam" units="seconds">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The feature parameter determining the amount of time to wait after startup
-    before attempting to show the settings reset prompt. Logged once after
-    startup.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.DialogShown" enum="BooleanShown">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates whether the settings reset prompt dialog was shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.NumberOfExtensionsDisabled"
-    units="extensions">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The number of extensions that were disabled after the user accepted the
-    settings reset prompt.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.NumberOfExtensionsToDisable"
-    units="extensions">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The number of extensions that will be disabled if the user accepts the
-    settings reset prompt. Logged once after startup.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.PromptAccepted" enum="BooleanAccepted">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates whether the user accepted the settings reset prompt.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.PromptRequired" enum="BooleanRequired">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates whether the settings reset prompt should be shown to the user
-    based on the state of the user's settings.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.ResetState"
-    enum="SettingsResetPromptResetState">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates whether the settings reset prompt is enabled for the user's
-    setting, or the reason for it being disabled. Logged once after startup.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.SettingsReset"
-    enum="SettingsResetPromptSettingsReset">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Indicates which settings were reset after the user accepted the settings
-    reset prompt.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.TimeUntilAccepted" units="ms">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The time between the settings reset prompt dialog being shown and the user
-    accepting the prompt.
-  </summary>
-</histogram>
-
-<histogram name="SettingsResetPrompt.TimeUntilDeclined" units="ms">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The time between the settings reset prompt dialog being shown and the user
-    declining the prompt.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.ApplyArchivePatchTime" units="ms">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The elapesed time to apply a patch to a previous version's chrome.7z archive
-    to generate a new chrome.7z archive. This histogram only applies to diff
-    updates.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.DeleteAppHost" enum="BooleanDeletedOrNot">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Hit following a successful install or update when the legacy
-    &quot;app_host.exe&quot; binary is deleted from the filesystem.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.DeleteAppLauncherClientsKey"
-    enum="BooleanDeletedOrNot">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Hit following a successful install or update when the legacy &quot;app
-    launcher&quot; Clients key is deleted from the registry.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.DeleteBinariesClientsKey"
-    enum="BooleanDeletedOrNot">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Hit following a successful install or update when the legacy
-    &quot;binaries&quot; Clients key is deleted from the registry.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.DeleteInstallExtensionCommand"
-    enum="BooleanDeletedOrNot">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Hit following a successful install or update when the legacy
-    &quot;install-extension&quot; app command is deleted from the registry.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.HasArchivePatch" enum="Boolean">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    True if the chrome.packed.7z archive contains a patch (in which case a diff
-    update is taking place) or false if it contains a full archive (in which
-    case a new install or a full update is taking place).
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.LzmaUnPackNTSTATUS" enum="NTSTATUS">
-  <owner>zmin@chromium.org</owner>
-  <summary>
-    Record the NTSTATUS code of unpacking the contents of a 7z file.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.LzmaUnPackStatus" enum="UnPackStatus">
-  <owner>zmin@chromium.org</owner>
-  <summary>Record the status of unpacking the contents of a 7z file.</summary>
-</histogram>
-
-<histogram name="Setup.Install.MultiChromeFrameRemoved"
-    enum="MultiChromeFrameRemovalResult">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    Hit following a successful install or update when data from a legacy
-    multi-install Chrome Frame is deleted from the registry.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort"
-    units="Attempts">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Number of calls to DeleteOldVerions() made by a --delete-old-versions
-    process that didn't delete all files that belong to old versions of Chrome.
-    A --delete-old-versions process exits when another process tries to acquire
-    the SetupSingleton or after too many unsuccessful attempts to delete all old
-    files. A --delete-old-versions process that successfully acquires the
-    SetupSingleton records to either the
-    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
-    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess"
-    units="Attempts">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Number of calls to DeleteOldVersions() made by a --delete-old-versions
-    process that successfully deleted all files that belong to old versions of
-    Chrome. A --delete-old-versions process that successfully acquires the
-    SetupSingleton records to either the
-    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
-    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.PeakPagefileUsage" units="KB">
-  <owner>huangs@chromium.org</owner>
-  <summary>
-    The peak page file usage by setup.exe in KB during install or uninstall
-    attempt.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.PeakWorkingSetSize" units="KB">
-  <owner>huangs@chromium.org</owner>
-  <summary>
-    The peak working set size of setup.exe in KB during install or uninstall
-    attempt.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.Result" enum="SetupInstallResult">
-  <owner>grt@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The final exit-result of the entire run of setup.exe on Windows.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.SingletonAcquisitionResult"
-    enum="SetupSingletonAcquisitionResult">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The result of trying to acquire a setup singleton. On Windows, a setup.exe
-    process must hold the setup singleton of a Chrome installation when it makes
-    changes to it.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.StrandedChromeIsUsed" enum="BooleanUsage">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The disposition of a stranded Chrome install discovered while updating
-    multi-install Chrome Binaries. This metric is only logged in an edge case.
-    The buckets indicate whether or not the &quot;stranded&quot; Chrome install
-    has been used in the last 28 days. If so, it respresents a Chrome that has
-    not been updating due to a logic flaw in the installer and will be repaired
-    in the current update. If not, it likely represents Chrome Binaries that
-    were previously used by Chrome Frame that has since been uninstalled and
-    that will be uninstalled in a future update.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.UncompressArchivePatchTime" units="ms">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The elapsed time to uncompress a chrome.7z patch. This histogram only
-    applies to diff updates.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.UncompressFullArchiveTime" units="ms">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The elapsed time to uncompress a full chrome.7z archive. This histogram only
-    applies to new installs and to full updates.
-  </summary>
-</histogram>
-
-<histogram name="Setup.Install.UnpackFullArchiveTime" units="ms">
-  <owner>grt@chromium.org</owner>
-  <summary>
-    The elapsed time to unpack the uncompressed chrome.7z archive. This
-    histogram applies to all installs and updates.
-  </summary>
-</histogram>
-
-<histogram name="SharedMemory.CreateError" enum="SharedMemoryCreateError">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    A histogram entry is emitted each time a base::SharedMemory object is
-    constructed. The value of the entry indicates the type of error encountered
-    during construction.
-  </summary>
-</histogram>
-
-<histogram name="SharedMemory.CreateWinError" enum="WinGetLastError">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    A histogram entry is emitted each time a base::SharedMemory object could not
-    be created due to a failed Windows system call. The value of the entry
-    indicates the result of the GetLastError() API call.
-  </summary>
-</histogram>
-
-<histogram name="SharedMemory.TimeSpentMakingAnonymousMemory" units="ms">
-  <obsolete>
-    Deprecated 2015-06 because the Finch experiment SharedMemoryCreateStrategy
-    has finished running.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The time spent making a new region of shared, anonymous memory. This metric
-    is not emitted if the shared memory region is read only.
-  </summary>
-</histogram>
-
-<histogram name="SharedWorker.RendererSurviveForWorkerTime" units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    A survival time of RenderProcessHostImpl for the In-renderer Shared Worker
-    from when FastShutdownIfPossible() is called.
-  </summary>
-</histogram>
-
-<histogram name="SharedWorker.TimeToDeleted" units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The lifetime of a SharedWorkerHost. This roughly corresponds to the lifetime
-    of SharedWorker.
-  </summary>
-</histogram>
-
-<histogram name="SharedWorker.TimeToScriptLoaded" units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time from the creation of SharedWorkerHost until when WorkerScriptLoaded
-    is called.
-  </summary>
-</histogram>
-
-<histogram name="SharedWorker.TimeToScriptLoadFailed" units="ms">
-  <owner>horo@chromium.org</owner>
-  <summary>
-    The time from the creation of SharedWorkerHost until when
-    WorkerScriptLoadFailed is called.
-  </summary>
-</histogram>
-
-<histogram name="ShortcutsProvider.DatabaseSize">
-  <owner>mpearson@chromium.org</owner>
-  <summary>
-    The number of entries in shortcuts backend's database when initialized,
-    which happens during profile load.
-  </summary>
-</histogram>
-
-<histogram name="ShortcutsProvider.QueryIndexTime" units="ms">
-  <owner>davidben@chromium.org</owner>
-  <summary>
-    The time it takes for the ShortcutsProvider to perform a query after the
-    user has typed N characters.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.browser_exit.time">
-  <obsolete>
-    Replaced by Shutdown.browser_exit.time2 to get more resolution into the tail
-    of the distribution (10/2016).
-  </obsolete>
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the browser exit menu command.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.browser_exit.time2">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the browser exit menu command.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.browser_exit.time_per_process">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the browser exit menu command per renderer
-    process.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.end_session.time">
-  <obsolete>
-    Replaced by Shutdown.end_session.time2 to get more resolution into the tail
-    of the distribution (10/2016).
-  </obsolete>
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by an end session (user logs off, shuts down or
-    reboots without explicitly exiting).
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.end_session.time2">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by an end session (user logs off, shuts down or
-    reboots without explicitly exiting).
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.end_session.time_per_process">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by an end session (user logs off, shuts down or
-    reboots without explicitly exiting) per renderer process.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.renderers.slow">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    The number of renderer processes that couldn't be shutdown quickly due to
-    onbeforeunload or onunload listeners.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.renderers.total">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    The number of renderer processes running when shutdown was called.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.ShutdownType" enum="ShutdownType">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>The type of the last shutdown.</summary>
-</histogram>
-
-<histogram name="Shutdown.window_close.time" units="ms">
-  <obsolete>
-    Replaced by Shutdown.window_close.time2 to get more resolution into the tail
-    of the distribution (10/2016).
-  </obsolete>
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the last browser window being closed.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.window_close.time2" units="ms">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the last browser window being closed.
-  </summary>
-</histogram>
-
-<histogram name="Shutdown.window_close.time_per_process">
-  <owner>hashimoto@chromium.org</owner>
-  <summary>
-    Time for shutdown initiated by the last browser window being closed per
-    renderer process.
-  </summary>
-</histogram>
-
-<histogram name="Signin" enum="SigninHelperFlow">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Tracks user interactions as they sign in through a flow. The suffix of the
-    histogram indicates what UI widget or application flow triggered the signin
-    flow.
-  </summary>
-</histogram>
-
-<histogram name="Signin.AccountEquality" enum="SigninAccountEquality">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    There are two separate ways to test for account equality, using the account
-    id or the email. Historically the email was always used, but going forward
-    email will be modifiable. Now when we check account equality we use both
-    approaches and emit this metric to capture if they agreed or not.
-  </summary>
-</histogram>
-
-<histogram name="Signin.AccountReconcilorState.OnGaiaResponse"
-    enum="SigninAccountReconcilorState">
-  <owner>bzanotti@chromium.org</owner>
-  <summary>
-    Records the state of the account reconcilor when GAIA returns a specific
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Signin.AddAccount" enum="BooleanSuccess">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Track when chrome successfully adds an account. Failures are not tracked.
-  </summary>
-</histogram>
-
-<histogram name="Signin.AndroidGetAccountsTime" units="ms">
-  <owner>nyquist@chromium.org</owner>
-  <summary>
-    The time it takes to retrieve the list of accounts from the system.
-  </summary>
-</histogram>
-
-<histogram name="Signin.AndroidSigninPromoAction"
-    enum="AndroidSigninPromoAction">
-  <obsolete>
-    Removed this histogram since we have had newly designed histograms
-    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
-    Signin.SigninReason.
-  </obsolete>
-  <owner>guohui@chromium.org</owner>
-  <summary>Track how a user interfacts with the android signin promo.</summary>
-</histogram>
-
-<histogram name="Signin.AuthError" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Log the type of GAIA authentication error that occur whenever the error
-    state changes.
-  </summary>
-</histogram>
-
-<histogram name="Signin.CookieJar.ChromeAccountRelation" enum="AccountRelation">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The relation between the account signed into chrome, and the account(s) in
-    the cookie jar. This metric is never recorded when not signed into chrome.
-  </summary>
-</histogram>
-
-<histogram name="Signin.CookieJar.SignedInCount" units="accounts">
-  <owner>skym@chromium.org</owner>
-  <summary>The number of signed in accounts in the cookie jar.</summary>
-</histogram>
-
-<histogram name="Signin.CookieJar.SignedOutCount" units="accounts">
-  <owner>skym@chromium.org</owner>
-  <summary>The number of signed out accounts in the cookie jar.</summary>
-</histogram>
-
-<histogram name="Signin.CookieJar.StableAge" units="seconds">
-  <owner>skym@chromium.org</owner>
-  <summary>The amount of time since the cookie jar last changed.</summary>
-</histogram>
-
-<histogram name="Signin.CookieJar.TotalCount" units="accounts">
-  <owner>skym@chromium.org</owner>
-  <summary>The total number of accounts in the cookie jar.</summary>
-</histogram>
-
-<histogram name="Signin.DuringFirstRun">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Track if the profile sign in took place during First Run or not. Logged at
-    signin time. True means signin took place during First Run, False means
-    anytime after.
-  </summary>
-</histogram>
-
-<histogram name="Signin.ElapsedTimeFromInstallToSignin" units="minutes">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Track how many minutes of local system time elapsed from when Chrome was
-    installed to when Signin occured for this profile.
-  </summary>
-</histogram>
-
-<histogram name="Signin.InvestigatedScenario" enum="SigninInvestigatedScenario">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Records the general type of signin that is occuring in relation to previous
-    signin and local data.
-  </summary>
-</histogram>
-
-<histogram name="Signin.IsShared" enum="BooleanIsShared">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Current best guess if this device is shared between multiple users.
-  </summary>
-</histogram>
-
-<histogram name="Signin.ListAccountsFailure" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Failure reason of ListAccounts call failure during account reconciliation,
-    ChromeOS login, or signin internals queries.
-  </summary>
-</histogram>
-
-<histogram name="Signin.ListAccountsRetry" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Retry reason of failed ListAccounts call during Chrome OS login during
-    account reconciliation, ChromeOS login, or signin internals queries.
-  </summary>
-</histogram>
-
-<histogram name="Signin.OAuth2TokenGetFailure" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Reason fetching an OAuth2 Token failed. Available on all OSes.
-  </summary>
-</histogram>
-
-<histogram name="Signin.OAuth2TokenGetRetry" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Reason fetching an OAuth2 Token is being retried. Available on all OSes.
-  </summary>
-</histogram>
-
-<histogram name="Signin.OneClickConfirmation" enum="SigninFlowConfirmations">
-  <owner>noms@chromium.org</owner>
-  <summary>
-    Count of the ways users interact with the confirmation dialogs of the new
-    web based sign in to Chrome flow (accessed via the one click signin).
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reauth" enum="SigninReauthStates">
-  <owner>noms@chromium.org</owner>
-  <summary>Tracks events related to the reauthentication Gaia page.</summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.AddedToChrome">
-  <obsolete>
-    Deprecated 2014-09 because chrome no longer tries to reconcile from the
-    cookie jar to the browser.
-  </obsolete>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How many accounts were added to the browser's token service because they
-    were in the cookie jar.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.AddedToCookieJar">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How many accounts were added to the cookie jar because they were in the
-    browser's token service.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.AllExternalCcResultCompleted"
-    enum="BooleanSuccess">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Records whether all external connections have been successfully checked (a
-    value of &quot;true&quot;) or not (&quot;false&quot;) when the reconciler
-    attempts to perform MergeSession.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.DifferentPrimaryAccounts"
-    enum="DifferentPrimaryAccounts">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    After execution of the account reconcilor, compares the primary account in
-    the token service to the primary GAIA account of the cookie jar.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.Duration">
-  <owner>rogerta@chromium.org</owner>
-  <summary>Records the execution time of the account reconciler.</summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.ExternalCcResultTime.Completed">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Records the time it took to successfully check all external connections
-    whenever the reconciler performs a reconciliation.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.ExternalCcResultTime.NotCompleted">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Records the time it took to check only a portion of external connections
-    whenever the reconciler performs a reconciliation.  This means that either a
-    network error occured while checking some sites or the site did not respond
-    before the check timeout.
-  </summary>
-</histogram>
-
-<histogram name="Signin.Reconciler.RemovedFromCookieJar">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How many accounts were removed from the cookie jar because they were not in
-    the browser's token service.
-  </summary>
-</histogram>
-
-<histogram name="Signin.RefreshTokenAnnotationRequest" enum="BooleanSuccess">
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    Track when chrome successfully sends RefreshTokenAnnotationRequest.
-  </summary>
-</histogram>
-
-<histogram name="Signin.SignedInDurationBeforeSignout" units="minutes">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Track how many minutes of real time (not browser active time) elapsed
-    between profile signin and signout.
-  </summary>
-</histogram>
-
-<histogram name="Signin.SigninCompletedAccessPoint" enum="SigninAccessPoint">
-  <owner>gogerald@chromium.org</owner>
-  <summary>Logs the original access point of each completed sign in.</summary>
-</histogram>
-
-<histogram name="Signin.SigninReason" enum="SigninReason">
-  <owner>gogerald@chromium.org</owner>
-  <summary>Logs the reason of each completed sign in.</summary>
-</histogram>
-
-<histogram name="Signin.SigninSource" enum="SigninSource">
-  <obsolete>
-    Removed this histogram since we have had newly designed histograms
-    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
-    Signin.SigninReason.
-  </obsolete>
-  <owner>noms@chromium.org</owner>
-  <summary>
-    Logs the original source that displayed the signin or reauth Gaia page,
-    before the page is displayed.
-  </summary>
-</histogram>
-
-<histogram name="Signin.SigninStartedAccessPoint" enum="SigninAccessPoint">
-  <owner>gogerald@chromium.org</owner>
-  <summary>
-    Logs the original access point that displayed the signin or reauth Gaia
-    page, before the page is displayed.
-  </summary>
-</histogram>
-
-<histogram name="Signin.SignoutDeleteProfile" enum="BooleanDeletedOrNot">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    If the user chose to delete their profile or not when signing out of an
-    unmanaged account. When the user is not given a choice this metric is not
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="Signin.SignoutProfile" enum="SigninSignoutProfile">
-  <owner>mlerman@chromium.org</owner>
-  <summary>Track how a profile gets signed out.</summary>
-</histogram>
-
-<histogram name="Signin.TokenTable.GetAllTokensSqlStatementValidity"
-    enum="BooleanValid">
-  <owner>msarda@chromium.org</owner>
-  <summary>
-    Counts how many times the SQL statements to get all tokens is valid.
-  </summary>
-</histogram>
-
-<histogram name="Signin.TokenTable.ReadTokenFromDBResult"
-    enum="SigninTokenTableReadTokenFromDBResult">
-  <owner>msarda@chromium.org</owner>
-  <summary>
-    Counts the results of loading a refresh token from the token database.
-  </summary>
-</histogram>
-
-<histogram name="Signin.UberTokenFailure" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Reason of failure to acquiring an ubertoken based on an already-minted
-    access token. Available on all OSes.
-  </summary>
-</histogram>
-
-<histogram name="Signin.UberTokenRetry" enum="GoogleServiceAuthError">
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Retry reason of failure to acquire an ubertoken based on an already-minted
-    access token. Available on all OSes.
-  </summary>
-</histogram>
-
-<histogram name="Signin.XDevicePromo.BrowsingSessionDuration" units="minutes">
-  <owner>anthonyvd@chromium.org</owner>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How long a browsing session was measured to be. Logged when a Browser window
-    becomes active if the previous activation was longer than the minimum
-    configured in the &quot;CrossDevicePromo&quot; experiment. Desktop only.
-  </summary>
-</histogram>
-
-<histogram name="Signin.XDevicePromo.BrowsingSessionDurationComputed"
-    units="minutes">
-  <owner>anthonyvd@chromium.org</owner>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    How often browsers are considered activated, which in turn triggers the
-    CrossDevicePromo. Logged every time a Browser window becomes active. We need
-    this to estimate QPS for RPC calls. Desktop only.
-  </summary>
-</histogram>
-
-<histogram name="Signin.XDevicePromo.Eligibility"
-    enum="SigninXDevicePromoEligibility">
-  <owner>anthonyvd@chromium.org</owner>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    The reasons for which a profile is or is not eligible for the Desktop Cross
-    Device Sign In Promo. Logged every time a new Browsing session is detected
-    as part of a Browser window becoming active. Desktop only.
-  </summary>
-</histogram>
-
-<histogram name="Signin.XDevicePromo.Initialized"
-    enum="SigninXDevicePromoInitialized">
-  <owner>anthonyvd@chromium.org</owner>
-  <owner>mlerman@chromium.org</owner>
-  <summary>
-    Tracks if profiles initialized the XDevicePromo, and if not, why. Logged at
-    Profile startup and (if not initialized then) when a new browsing session is
-    detected during Browser window activation. Desktop only.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.CacheSizeOnInit" units="KB">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The size of the cache at the time that the index has finished initializing.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.CheckCRCResult" enum="CheckCRCResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Whether or not the CRC was checked at the moment when the last reference to
-    a read-only entry stream is closed.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.CreationToIndex" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The time from the creation of the simple cache backend until the index has
-    been loaded from disk.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.CreationToIndexFail" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The time from the creation of the simple cache backend until the index fails
-    to load.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.DiskOpenLatency" units="ms">
-  <owner>rdsmith@chromium.org</owner>
-  <summary>
-    The time to access (open and read headers from all files) the cache entry on
-    disk.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryCreatedAndStream2Omitted"
-    enum="SimpleCache.EntryCreatedAndStream2Omitted">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Whether, upon creation of a new cache entry, the file for stream 2 was
-    omitted since that stream was empty.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryCreationResult" enum="BooleanSuccess">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For entry creation operations that were sent to the disk, the result of
-    creation.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryCreationTime" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The time, in ms, spent creating a new entry on disk.</summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryOpenedAndStream2Removed"
-    enum="SimpleCache.EntryOpenedAndStream2Removed">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Whether, upon opening of an existing cache entry, stream 2 was empty and the
-    file for that stream was therefore removed.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryOperationsPending">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    At the time that operations are run, the number of pending operations on a
-    particular entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes">
-  <obsolete>
-    Deprecated 2013 in favour of SimpleCache.Eviction.CacheSizeOnStart2
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.CacheSizeOnStart2" units="KB">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.EntryCount">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The number of entries to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes">
-  <obsolete>
-    Deprecated 2013 in favour of SimpleCache.Eviction.MaxCacheSizeOnStart2
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The maximum allowed size of the cache at the beginning of an eviction.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2" units="KB">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The maximum allowed size of the cache at the beginning of an eviction.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.Result" enum="BooleanSuccess">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The result of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes">
-  <obsolete>
-    Deprecated 2013 in favour of SimpleCache.Eviction.SizeOfEvicted2
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>The number of bytes to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeOfEvicted2" units="KB">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The amount of memory freed in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes">
-  <obsolete>
-    Deprecated 2013 in favour of SimpleCache.Eviction.SizeWhenDone2
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeWhenDone2" units="KB">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.TimeToDone" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>Time spent completing an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.TimeToSelectEntries" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>Time spent selecting entries for eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitHard">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The maximum limit of how many file descriptors a process can open.  Emitted
-    each time the browser is launched, if the limit could be retrieved.  (This
-    is the highest value we could raise the current limit to if we liked.)
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitSoft">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The current limit of how many file descriptors a process can open.  Emitted
-    each time the browser is launched, if the limit could be retrieved.  (We can
-    raise this to the maximum limit if we like, without root access.)
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitStatus"
-    enum="SimpleCache.FileDescriptorLimitStatus">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result of trying to get the file descriptor limit.  Emitted each time
-    the browser is launched.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.GlobalOpenEntryCount">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The number of open entries across all caches backed by the Simple Cache. An
-    entry is opened whenever a caller asks to open it to read or write cache
-    data, and remains open until the last caller asks to close it. Logged
-    whenever an entry is opened or closed.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSize" units="bytes">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The size of the header stream of a Simple Cache entry, emitted every time
-    the headers are written or rewritten.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeChange"
-    enum="SimpleCacheHeaderSizeChange">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    How the header size has changed in a Simple Cache entry, emitted every time
-    a write operation occurs on the header stream.  (This includes the initial
-    write, rewrites, and other writes that we couldn't classify.)
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeDecreaseAbsolute" units="bytes">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The absolute size decrease of the header stream of a Simple Cache entry,
-    emitted every time the headers are rewritten with a smaller size.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeDecreasePercentage" units="%">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The relative size decrease of the header stream of a Simple Cache entry,
-    emitted every time the headers are rewritten with a smaller size.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeIncreaseAbsolute" units="bytes">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The absolute size increase of the header stream of a Simple Cache entry,
-    emitted every time the headers are rewritten with a larger size.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeIncreasePercentage" units="%">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The relative size increase of the header stream of a Simple Cache entry,
-    emitted every time the headers are rewritten with a larger size.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexCorrupt" enum="BooleanCorrupt">
-  <owner>gavinp@chromium.org</owner>
-  <summary>For each index load, whether the index file was corrupt.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexCreatedEntryCount">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The number of entries in a newly created index file.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexEntriesLoaded">
-  <owner>gavinp@chromium.org</owner>
-  <summary>Number of entries loaded from the index file on start.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexEntriesRestored">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Number of entries restored from disk when there was no index or the index
-    was corrupted.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexFileStateOnLoad" enum="SimpleIndexState">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The state the index file is at when an attempt is made to load from it.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexInitializationWaiters">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    At the time of index initialization, the number of enqueued jobs awaiting
-    index initialization.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexInitializeMethod"
-    enum="SimpleCacheIndexInitializeMethod">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The method used to initialize the simple cache index.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexLoadTime" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Time (as measured on the worker pool) spent loading the index file.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexNumEntriesOnInit" units="entries">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The number of entries in the index at the time that the index has finished
-    initializing.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexNumEntriesOnWrite">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The number of entries written to the index on a flush.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexRestoreTime" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Time (as measured on the worker pool) spent restoring the index file by
-    iterating directory entries.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexStale" enum="BooleanStale">
-  <obsolete>
-    Deprecated 07/2013, and replaced by IndexFileStateOnLoad.
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>For each index load, whether the index file was stale.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteInterval.Background" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The interval between index saves, for apps in the background.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteInterval.Foreground" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The interval between index saves, for apps in the foreground.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteReason"
-    enum="SimpleCacheIndexWriteReason">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The reason an index was written to disk. Recorded every time an index is
-    saved.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteReasonAtLoad"
-    enum="SimpleCacheIndexWriteReason">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Recorded immediately after loading a fresh index (INDEX_STATE_FRESH or
-    INDEX_STATE_FRESH_CONCURRENT_UPDATES), the reason the loaded index was
-    written to disk.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime" units="ms">
-  <obsolete>
-    Deprecated 2013-05 in favour of
-    SimpleCache.SimpleIndexWriteToDiskTime.Background and
-    SimpleCache.SimpleIndexWriteToDiskTime.Foreground.
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The amount of time spend writing the index file to disk, measured starting
-    at the beginning of the write on the callback thread, and calculated using
-    the completion time on the worker pool.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime.Background" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The amount of time spend writing the index file to disk, for apps in the
-    background, measured starting at the beginning of the write on the callback
-    thread, and calculated using the completion time on the worker pool.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime.Foreground" units="ms">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The amount of time spend writing the index file to disk, for apps in the
-    foreground, measured starting at the beginning of the write on the callback
-    thread, and calculated using the completion time on the worker pool.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched">
-  <obsolete>
-    Deprecated 2016-05 as the match checking was moved back into the entry
-    itself, so this result is now reported in the SimpleCache.x.SyncOpenResult
-    histograms.
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For each call to OpenEntry, whether the key on disk matched the request key.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.LastClusterLossPercent" units="%">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For each file in the Simple Cache, the percentage of disk space used by the
-    cluster loss, the unused disk space in the last 4096 byte cluster of the
-    file.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.LastClusterSize" units="bytes">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For each file in the Simple Cache, the number of bytes in the last 4096 byte
-    cluster when the entry is saved to disk.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.MaxCacheSizeOnInit" units="KB">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The maximum allowed size of the cache at the time that the index has
-    finished initializing.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.OpenEntryIndexState"
-    enum="SimpleCacheOpenEntryIndexState">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    At the time that an entry is opened, the state of that entry in the index.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.PercentFullOnInit" units="%">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The fullness (in percent) of the cache at the time that the index has
-    finished initializing. The percentage is calculated as (cache_size * 100) /
-    max_cache_size.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.ReadIsParallelizable"
-    enum="SimpleCacheReadParallelizable">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For each Read operation, whether it could have been issued in parallel of a
-    previous Read operation.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.ReadResult" enum="SimpleCacheReadResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The outcome of Entry::ReadData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.StaleIndexExtraEntryCount" units="entries">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Count of the number of entries recorded in the index, but not actually
-    present in the cache. Recorded each time a stale index is found and a
-    directory rescan is required.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.StaleIndexMissedEntryCount" units="entries">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Count of the number of entries present in a cache, but not recorded in the
-    index. Recorded each time a stale index is found and a directory rescan is
-    required.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.StaleIndexQuality"
-    enum="SimpleCacheStaleIndexQuality">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The quality of a &quot;stale&quot; index compared to a full directory
-    rescan. Recorded immediately after every directory scan for stale indexes.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    For each EOFRecord found with a valid magic number, indicates if the record
-    also contains a CRC.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCheckEOFResult"
-    enum="SimpleCacheSyncCheckEOFResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result, at the synchronous layer, of checking the EOF record of a cache
-    entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCloseResult" enum="SimpleCacheSyncCloseResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result, at the synchronous layer, of closing a cache entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreatePlatformFileError"
-    enum="PlatformFileError">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The platform error reported when attempting to create a new cache entry at
-    the synchronous layer.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreateResult"
-    enum="SimpleCacheSyncCreateResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result, at the synchronous layer, reported when attempting to create a
-    new cache entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncKeySHA256Result"
-    enum="SimpleCacheSyncSHA256Result">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result of the the key SHA256 check done when opening stream 0 for each
-    entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenEntryAge" units="hours">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The age of the entry (time since last modified), when opened at the
-    synchronous layer.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenPlatformFileError"
-    enum="PlatformFileError">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The platform error reported when attempting to create a new cache entry at
-    the synchronous layer.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenResult" enum="SimpleCacheSyncOpenResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result, at the synchronous layer, reported when attempting to open a new
-    cache entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncWriteResult" enum="SimpleCacheSyncWriteResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    The result, at the synchronous layer, of writing to a cache entry.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.WriteDependencyType"
-    enum="SimpleCacheWriteDependencyType">
-  <owner>gavinp@chromium.org</owner>
-  <summary>
-    Shows whether a write operation depends on the previous operation in queue
-    particularly in the aspect of its possibility to run in parallel.
-  </summary>
-</histogram>
-
-<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult">
-  <obsolete>
-    Replaced 2013/09/03 by WriteResult2, which adds &quot;fast empty
-    return&quot;, which previously showed up as &quot;success&quot;.
-  </obsolete>
-  <owner>gavinp@chromium.org</owner>
-  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.WriteResult2" enum="SimpleCacheWriteResult">
-  <owner>gavinp@chromium.org</owner>
-  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.Event"
-    enum="SimpleGeolocationRequestEvent">
-  <owner>alemate@chromium.org</owner>
-  <summary>Events in reqests processing of IP-based SimpleGeolocation.</summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.HasCellTowers"
-    enum="SimpleGeolocationRequestHasCellTowers">
-  <owner>skylarc@chromium.org</owner>
-  <summary>
-    This boolean histogram counts SimpleGeolocationRequests carrying a nonzero
-    number of cell towers.
-  </summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.HasWiFiAccessPoints"
-    enum="SimpleGeolocationRequestHasWiFiAccessPoints">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    This boolean histogram counts SimpleGeolocationRequests carrying nonzero
-    number of WiFi access points.
-  </summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.ResponseCode"
-    enum="HttpResponseCode">
-  <owner>alemate@chromium.org</owner>
-  <summary>Http response codes in IP-based SimpleGeolocation.</summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.ResponseFailureTime" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The time elapsed between the sending of the first API request and the time
-    the final (failed) response was recorded. Includes all retries.
-  </summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.ResponseSuccessTime" units="ms">
-  <owner>alemate@chromium.org</owner>
-  <summary>
-    The time elapsed between the sending of the first API request and the time
-    the final (successfull) response was recorded. Includes all retries.
-  </summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.Result"
-    enum="SimpleGeolocationRequestResult">
-  <owner>alemate@chromium.org</owner>
-  <summary>Result of SimpleGeolocationRequest.</summary>
-</histogram>
-
-<histogram name="SimpleGeolocation.Request.Retries">
-  <owner>alemate@chromium.org</owner>
-  <summary>Number of retries until the final response was recorded.</summary>
-</histogram>
-
-<histogram name="SiteEngagementService.DaysSinceLastShortcutLaunch"
-    units="days">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The number of days between launches of an origin saved to homescreen or as a
-    bookmark app shortcut. Recorded at the second and each following launch of a
-    specific origin from a shortcut, independently per origin.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementPercentageForHTTPS">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    The percentage of total site engagement accumulated by this profile for
-    HTTPS URLs as a proportion of all engagement for HTTPS and HTTP URLs.
-    Recorded at startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementScore">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    Distribution of the engagement scores accumulated by a user, recorded at
-    startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementScore.HTTP">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Distribution of the engagement scores accumulated by a user, recorded at
-    startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter. Limited specifically to
-    HTTP URLs.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementScore.HTTPS">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Distribution of the engagement scores accumulated by a user, recorded at
-    startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter. Limited specifically to
-    HTTPS URLs.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementScore.IsZero" enum="Boolean">
-  <owner>charleszhao@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <owner>kcarattini@chromium.org</owner>
-  <summary>
-    The distribution of zero versus non-zero engagement scores accumulated by
-    the user, recorded at the same time as
-    SiteEngagementService.EngagementScore.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementScoreBucket" units="%">
-  <owner>calamity@chromium.org</owner>
-  <summary>
-    The percentage of sites on a user's profile that have engagement scores that
-    fall in these buckets, recorded at startup per non-incognito profile, and
-    then upon the first engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.EngagementType"
-    enum="SiteEngagementServiceEngagementType">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The type of engagement (navigation, user input, etc.) which led to an
-    accumulation in site engagement.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.MeanEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The mean site engagement per origin accumulated by this profile, recorded at
-    startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.MedianEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The median site engagement per origin accumulated by this profile, recorded
-    at startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.OriginsEngaged">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The total number of origins with a non-zero site engagement score for this
-    profile, recorded at startup per non-incognito profile, and then upon the
-    first engagement-increasing event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.OriginsWithMaxDailyEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The number of origins which have reached the daily site engagement point
-    cap, recorded at startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter. Thus, each bin N contains
-    the number of clients where at least N origins have reached the maximum
-    daily site engagement point cap.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.OriginsWithMaxEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The number of origins which have reached the absolute site engagement point
-    cap, recorded at startup per non-incognito profile, and then upon the first
-    engagement-increasing event every hour thereafter. Thus, each bin N contains
-    the number of clients where at least N origins have reached the maximum
-    absolute site engagement point cap.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.PercentOriginsWithMaxEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The percentage of all origins recorded by the site engagement service which
-    have reached the absolute site engagement point cap, recorded at startup per
-    non-incognito profile, and then upon the first engagement-increasing event
-    every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteEngagementService.TotalEngagement">
-  <owner>calamity@chromium.org</owner>
-  <owner>dominickn@chromium.org</owner>
-  <summary>
-    The total site engagement accumulated by this profile, recorded at startup
-    per non-incognito profile, and then upon the first engagement-increasing
-    event every hour thereafter.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.AllResponses">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of all network responses received by a renderer. Each response is
-    corresponding to one URL requested by a renderer. Incremented when the first
-    network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.BrowsingInstanceCount">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of all current BrowsingInstances.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.CurrentRendererProcessCount">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of all renderer processes, including WebUI and extensions.
-    Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The upper bound of the predicted renderer process count if we isolated all
-    sites, subject to the process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountLowerBound">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The lower bound of the predicted renderer process count if we isolated all
-    sites, subject to the process limit.  Happens to be the number of unique
-    sites.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountNoLimit">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted renderer process count if we isolated all sites and if there
-    were no process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesTotalProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted total process count if we isolated all sites, subject to the
-    process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateExtensionsProcessCountEstimate">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The upper bound of the predicted renderer process count if we isolated only
-    Chrome extensions, subject to the process limit.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateExtensionsProcessCountLowerBound">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The lower bound of the predicted renderer process count if we isolated only
-    Chrome extensions, subject to the process limit. Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateExtensionsProcessCountNoLimit">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The predicted renderer process count if we isolated only Chrome extensions
-    and if there were no process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateExtensionsTotalProcessCountEstimate">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The predicted total process count if we isolated only Chrome extensions,
-    subject to the process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The upper bound of the predicted renderer process count if we isolated only
-    HTTPS (not HTTP) sites, subject to the process limit.  Recorded once per UMA
-    ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountLowerBound">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The lower bound of the predicted renderer process count if we isolated only
-    HTTPS (not HTTP) sites, subject to the process limit.  Happens to be the
-    number of isolated sites.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountNoLimit">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted renderer process count if we isolated only HTTPS (not HTTP)
-    sites and if there were no process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesTotalProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted total process count if we isolated only HTTPS (not HTTP)
-    sites, subject to the process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateNothingProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The upper bound of the estimated renderer process count if we isolated no
-    sites, subject to the process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateNothingProcessCountLowerBound">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The lower bound of the predicted renderer process count if we isolated no
-    sites, subject to the process limit.  Happens to be the number of isolated
-    sites.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateNothingProcessCountNoLimit">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted renderer process count if we isolated no sites and if there
-    were no process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateNothingTotalProcessCountEstimate">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The predicted total process count if we isolated no sites, subject to the
-    process limit.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.OutOfProcessIframes">
-  <owner>nasko@chromium.org</owner>
-  <summary>
-    The count of all out-of-process iframes.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.ProxyCount">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The count of all RenderFrameProxyHosts.  Recorded once per UMA ping.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.ProxyCountPerBrowsingInstance">
-  <owner>nick@chromium.org</owner>
-  <summary>
-    The count of RenderFrameProxyHosts in each BrowsingInstance.  Recorded each
-    UMA ping, once per BrowsingInstance.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.SiteInstancesPerBrowsingInstance">
-  <owner>nasko@chromium.org</owner>
-  <summary>
-    The count of SiteInstances in a single BrowsingInstance. Recorded each UMA
-    ping, once per BrowsingInstance.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.DataLength" units="byte">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The number of bytes in the first network packet for a response with headers
-    that imply potential illegal cross-site access. Recorded when the first
-    network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having HTML
-    content type header and contents sniffed as HTML. Sampled with value of 1
-    when the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to their HTML contents. Sampled with value
-    1 when the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.) among blocked
-    cross-site document responses due to their HTML contents. Sampled with a
-    resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.) among blocked
-    cross-site document responses due to their HTML contents. Sampled with a
-    resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to having HTML content type and nosniff
-    headers. Sampled with value 1 when the first network packet of a response of
-    this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having HTML content type and nosniff
-    headers. Sampled with a resource type (0-14) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having HTML content type and nosniff
-    headers. Sampled with a resource type (0-17) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NotBlocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of not blocked responses despite having an HTML content type
-    header due to the failure of content sniffing. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses that may be parsed as JavaScript among not blocked
-    responses. Sampled with value 1 when the first network packet of a response
-    of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having JSON
-    content type header and contents sniffed as JSON. Sampled with value 1 when
-    the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to their JSON contents. Sampled with value
-    1 when the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their JSON contents. Sampled with a
-    resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their JSON contents. Sampled with a
-    resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to having JSON content type and nosniff
-    headers. Sampled with value 1 when the first network packet of a response of
-    this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having JSON content type and nosniff
-    headers. Sampled with a resource type (0-14) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having JSON content type and nosniff
-    headers. Sampled with a resource type (0-17) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NotBlocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of not blocked responses despite having an JSON content type
-    header due to the failure of content sniffing. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses that may be parsed as JavaScript among not blocked
-    responses with a JSON content type header. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    MIME type codes for content type header values of potentially cross-site
-    document responses, excluding same-site or not http(s) urls. Sampled with a
-    MIME type code (0-4) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having Plain
-    content type header and contents sniffed as HTML. Sampled with value 1 when
-    the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    responses due to their Plain.HTML contents. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.HTML contents. Sampled with
-    a resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.HTML contents. Sampled with
-    a resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having Plain
-    content type header and contents sniffed as JSON. Sampled with value 1 when
-    the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to their Plain.JSON contents. Sampled with
-    value 1 when the first network packet of a response of this type is
-    received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.JSON contents. Sampled with
-    a resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.JSON contents. Sampled with
-    a resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram
-    name="SiteIsolation.XSD.Plain.NoSniffBlocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to having Plain content type and nosniff
-    headers. Sampled with value 1 when the first network packet of a response of
-    this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2
-    in December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having Plain content type and nosniff
-    header. Sampled with a resource type (0-14) when the first network packet of
-    a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having Plain content type and nosniff
-    header. Sampled with a resource type (0-17) when the first network packet of
-    a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NotBlocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of not blocked responses despite having an Plain content type
-    header due to the failure of content sniffing. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses that may be parsed as JavaScript among not blocked
-    responses with a Plain content type header. Sampled with value 1 when the
-    first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having Plain
-    content type header and contents sniffed as XML. Sampled with value 1 when
-    the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to their Plain.XML contents. Sampled with
-    value 1 when the first network packet of a response of this type is
-    received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with renderable HTTP status codes sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.XML contents. Sampled with
-    a resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with renderable HTTP status codes sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their Plain.XML contents. Sampled with
-    a resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of blocked cross-site document responses due to having XML content
-    type header and contents sniffed as XML. Sampled with value 1 when the first
-    network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with nonrenderable HTTP status codes among blocked
-    cross-site document responses due to their XML contents. Sampled with value
-    1 when the first network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with renderable HTTP status codes sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their XML contents. Sampled with a
-    resource type (0-14) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with renderable HTTP status codes sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to their XML contents. Sampled with a
-    resource type (0-17) when the first network packet of a response of this
-    type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a nonrenderable HTTP status code among blocked
-    cross-site document responses due to having XML content type and nosniff
-    headers. Sampled with value 1 when the first network packet of a response of
-    this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode"
-    enum="ContentResourceType">
-  <obsolete>
-    Superseded by SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2 in
-    December 2015.
-  </obsolete>
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having XML content type and nosniff
-    headers. Sampled with a resource type (0-14) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2"
-    enum="ContentResourceType2">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses with a renderable HTTP status code sub-categorized by
-    their requesting context type (e.g., image, script, etc.), among blocked
-    cross-site document responses due to having XML content type and nosniff
-    headers. Sampled with a resource type (0-17) when the first network packet
-    of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NotBlocked">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of not blocked responses despite having an XML content type header
-    due to the failure of content sniffing. Sampled with value 1 when the first
-    network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS">
-  <owner>creis@chromium.org</owner>
-  <summary>
-    The count of responses that may be parsed as JavaScript among not blocked
-    responses with an XML content type. Sampled with value 1 when the first
-    network packet of a response of this type is received.
-  </summary>
-</histogram>
-
-<histogram name="Skia.DrawScaleFactor" enum="SkiaScaleFactor">
-  <owner>ericrk@chromium.org</owner>
-  <summary>The scale factor of any images drawn by Skia.</summary>
-</histogram>
-
-<histogram name="Skia.DrawTiled" enum="BooleanTiled">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    Whether a call to drawBitmap(Rect) or drawImage(Rect) used the tiled or
-    non-tiled rasterization path.
-  </summary>
-</histogram>
-
-<histogram name="Skia.FilterQuality" enum="SkiaFilterQuality">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The count of images drawn by Skia with a given filter quality.
-  </summary>
-</histogram>
-
-<histogram name="Skia.LockTexturePath" enum="SkiaLockTexturePath">
-  <owner>ericrk@chromium.org</owner>
-  <summary>
-    The path taken by Skia when it attempts to lock a texture for use.
-  </summary>
-</histogram>
-
-<histogram name="Snackbar.Shown" enum="SnackbarIdentifier">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Records how many times a particular snackbar was shown to the user.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.Cleaner.HasCompleted" enum="SRTCompleted">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The state of software reporter cleaner tool runs. A value of &quot;Not
-    Completed&quot; can mean either the tool crashed, or the tool was still
-    running when Chrome checked.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.Cleaner.HasRebooted" enum="BooleanRebooted">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    Whether a reboot happened since the software reporter cleaner tool has
-    finished execution with a pre-reboot exit code.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.Cleaner.RunningTime" units="ms">
-  <owner>mad@chromium.org</owner>
-  <summary>How long it took to run the software reporter cleaner tool.</summary>
-</histogram>
-
-<histogram name="SoftwareReporter.Cleaner.Version">
-  <owner>mad@chromium.org</owner>
-  <summary>The build version of the software reporter cleaner tool.</summary>
-</histogram>
-
-<histogram name="SoftwareReporter.ExperimentErrors"
-    enum="SoftwareReporterExperimentError">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Whether a configuration error prevented the experimental Software Reporter
-    from running.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.FoundUwSReadError" enum="BooleanError">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    Whether there was an error reading the registry key containing UwS found by
-    the Software Removal Tool.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.LastUploadResult" enum="BooleanSuccess">
-  <owner>mad@chromium.org</owner>
-  <summary>The result of the most recent SRT log upload.</summary>
-</histogram>
-
-<histogram name="SoftwareReporter.LogsUploadEnabled"
-    enum="SoftwareReporterLogsUploadEnabled">
-  <owner>ftirelo@chromium.org</owner>
-  <summary>
-    If logs uploads are enabled in the Software Reporter or the reason why it is
-    disabled. Recorded before each run of the Software Reporter.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.LogsUploadResult"
-    enum="SoftwareReporterLogsUploadResult">
-  <owner>ftirelo@chromium.org</owner>
-  <summary>
-    The result of the most recent Software Reporter logs upload. Written by the
-    Software Reporter in the registry and sent by Chrome after the reporter
-    finishes.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.LogsUploadResultRegistryError"
-    enum="SoftwareReporterLogsUploadResultRegistryError">
-  <owner>ftirelo@chromium.org</owner>
-  <summary>
-    Error encountered when reading the software reporter logs upload result from
-    the registry.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.MajorVersion">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    As SoftwareReporter.MinorVersion, but a double word combination of the other
-    components of the version of the software reporter. The high word is the
-    first component when there are more than one, and the low word is either the
-    second or third one, depending if there are at least 3, or 4 components.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.MemoryUsed" units="KB">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The memory used by the software reporter tool as reported by the tool itself
-    via the registry. Logged just after the software reporter tool has finished.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.MinorVersion">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The last component of the version of the software reporter that was executed
-    so we can identify when users are not getting their component updated as
-    quickly as we expect it.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.PromptUsage" enum="SRTPromptUsage">
-  <owner>mad@chromium.org</owner>
-  <summary>Usage of the Software Removal Tool (SRT) Prompt.</summary>
-</histogram>
-
-<histogram name="SoftwareReporter.RunningTime" units="ms">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The amount of time it took to run the software reporter tool as reported by
-    the tool itself via the registry. Logged just after the software reporter
-    tool has finished.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.RunningTimeAccordingToChrome" units="ms">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    The amount of time it took for the software reporter to run as measured by
-    chrome. Logged just after the software reporter tool has finished.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.RunningTimeRegistryError"
-    enum="SwReporterRunningTimeRegistryError">
-  <owner>alito@chromium.org</owner>
-  <summary>
-    Error encountered when reading the software reporter tool's start and end
-    times from the registry.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.Step" enum="SwReporterStep">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The registration and execution steps for the software reporter.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.UploadFailureCount">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The total count of SRT log upload failures experienced by this machine for
-    all time. This value is reported at startup by Chrome and is capped at 64.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.UploadLongestFailureRun">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The longest run of upload failures logged by SRT runs. This value is
-    reported at startup by Chrome and is capped at 64.
-  </summary>
-</histogram>
-
-<histogram name="SoftwareReporter.UploadSuccessCount">
-  <owner>mad@chromium.org</owner>
-  <summary>
-    The total count of successful SRT log uploads experienced by this machine
-    for all time. This value is reported at startup by Chrome and is capped at
-    64.
-  </summary>
-</histogram>
-
-<histogram name="SpecialLocale.PromotionDialog" enum="SpecialLocalePromoAction">
-  <owner>ianwen@chromium.org</owner>
-  <summary>
-    Records how users interact with the special locale promotion dialog.
-  </summary>
-</histogram>
-
-<histogram name="Spellcheck.Android.Available" enum="BooleanAvailable">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Whether the Android spellchecking service was available at the start of a
-    new spellchecking session. Note that the user can disable the Android
-    spellchecking service in settings, in which case it will show up as not
-    available in the histogram.
-  </summary>
-</histogram>
-
-<histogram name="SpellCheck.Android.Latency" units="ms">
-  <owner>timvolodine@chromium.org</owner>
-  <summary>
-    Measures the amount of time it takes to receive results from the
-    spellchecking service on Android. More precisely this is the
-    SystemClock.elapsedRealtime() between the
-    SpellCheckerSession.getSentenceSuggestions() and the invocation of the
-    onGetSentenceSuggestions() callback.
-  </summary>
-</histogram>
-
-<histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled">
-  <owner>groby@chromium.org</owner>
-  <owner>rlp@chromium.org</owner>
-  <summary>
-    Whether the user has opted in to asking Google for spelling suggestions.
-    Recorded both when spelling is initialized and when the preference is
-    changed.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.AppCache in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite for the appcache db.</summary>
-</histogram>
-
-<histogram name="Sqlite.AutoCommitTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Record times for INSERT/UPDATE/DELETE statements run outside of an explicit
-    transaction.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.CloseFailure" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Error which prevented database close.</summary>
-</histogram>
-
-<histogram name="Sqlite.CommitTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>Record time spent in explicit COMMIT statements.</summary>
-</histogram>
-
-<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.Cookie in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite the cookie db.</summary>
-</histogram>
-
-<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.DatabaseTracker in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite the websqldb tracker db.</summary>
-</histogram>
-
-<histogram name="Sqlite.DeprecationVersionResult"
-    enum="SqliteVersionDeprecation">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Annotations for which bits of sql::MetaTable::CheckDeprecated() fire.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.DomainBoundCerts in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Error codes returned by sqlite for the domain-bound certs db.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.DomStorageDatabase in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite for the domstorage db.</summary>
-</histogram>
-
-<histogram name="Sqlite.Error" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>SQLite extended error codes.</summary>
-</histogram>
-
-<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode">
-  <obsolete>
-    Replaced 5/14/2013 by expanded Sqlite.Error histogram.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>SQLite extended SQLITE_IOERR codes for all databases.</summary>
-</histogram>
-
-<histogram name="Sqlite.History.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.History in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite for the history db.</summary>
-</histogram>
-
-<histogram name="Sqlite.MemoryKB.OneDay" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    SQLite memory footprint from sqlite3_memory_used() recorded 1 day after
-    first database is opened by sql::Connection.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.MemoryKB.OneHour" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    SQLite memory footprint from sqlite3_memory_used() recorded 1 hour after
-    first database is opened by sql::Connection.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.MemoryKB.OneWeek" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    SQLite memory footprint from sqlite3_memory_used() recorded 1 week after
-    first database is opened by sql::Connection.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.MemoryKB.TenMinutes" units="KB">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    SQLite memory footprint from sqlite3_memory_used() recorded 10 minutes after
-    first database is opened by sql::Connection.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.Migration.History" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Time used to migrate History database schema to a new version.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.OpenFailure" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Error which prevented database open.</summary>
-</histogram>
-
-<histogram name="Sqlite.OpenProbeFailure" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Error from first read of the database.</summary>
-</histogram>
-
-<histogram name="Sqlite.QueryTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>Record times for all statements run against the database.</summary>
-</histogram>
-
-<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.Quota in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite for the quota db.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabase" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Errors attempting to Raze() database.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabase2" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Errors on second attempt to Raze() database.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabaseTruncate" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Errors truncating database for Raze().</summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryAttachError" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    SQLite error code from failed ATTACH in sql::Recovery::Init().
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryEvents" enum="SqliteRecoveryEventEnum">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Records specific failure and success cases in sql::Recovery implementation,
-    to determine which cases warrant further development.  This histogram tracks
-    detected errors, some of which may cause multiple results.  See recovery.cc
-    for details.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryHandle" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Error from sqlite3_backup_init() in sql::Recovery.</summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryStep" enum="SqliteErrorCode">
-  <owner>shess@chromium.org</owner>
-  <summary>Error from sqlite3_backup_step() in sql::Recovery.</summary>
-</histogram>
-
-<histogram name="Sqlite.SizeKB" units="Kb">
-  <owner>peria@chromium.org</owner>
-  <owner>shess@chromium.org</owner>
-  <summary>Size in kilobytes of pre-existing database at startup.</summary>
-</histogram>
-
-<histogram name="Sqlite.Stats" enum="SqliteStatsEnum">
-  <owner>shess@chromium.org</owner>
-  <summary>Stats for different API calls in sql/.</summary>
-</histogram>
-
-<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.Text in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite the full text db.</summary>
-</histogram>
-
-<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.Thumbnail in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite for the thumbnail db.</summary>
-</histogram>
-
-<histogram name="Sqlite.UpdateTime" units="ms">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Record times for statements which could update the database file.  Includes
-    commit and autocommit time.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.Version">
-  <owner>shess@chromium.org</owner>
-  <summary>Version of pre-existing database at startup.</summary>
-</histogram>
-
-<histogram name="Sqlite.Vfs" units="bytes">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    Buffer sizes passed to browser-process SQLite VFS functions.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.Vfs_Events" enum="SqliteVfsEvents">
-  <owner>shess@chromium.org</owner>
-  <summary>
-    I/O operations measured by browser-process SQLite VFS wrapper.
-  </summary>
-</histogram>
-
-<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode">
-  <obsolete>
-    Moved to Sqlite.Error.Web in M-27.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Error codes returned by sqlite the web db.</summary>
-</histogram>
-
-<histogram name="sri.resource_integrity_mismatch_event"
-    enum="SRIResourceIntegrityMismatchEvent">
-  <owner>jww@chromium.org</owner>
-  <summary>
-    When resources are checked for mismatching integrity and whether the
-    mismatch forces a refetch.
-  </summary>
-</histogram>
-
-<histogram name="SSL.CertificateErrorReportFailure" enum="NetErrorCodes">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Users can opt in to send reports of certificate validation errors to Google.
-    This records the error code whenever Chrome fails to send such a report.
-  </summary>
-</histogram>
-
-<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated as of 07/2016. Replaced with SSL.ExpectCTReportFailure2.
-  </obsolete>
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Sites can opt in to Expect CT, a reporting feature that sends a report
-    whenever a TLS connection does not have valid Certificate Transparency
-    information associated with it. This records the error code when Chrome
-    fails to send an Expect CT report.
-  </summary>
-</histogram>
-
-<histogram name="SSL.ExpectCTReportFailure2" enum="NetErrorCodes">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Sites can opt in to Expect CT, a reporting feature that sends a report
-    whenever a TLS connection does not have valid Certificate Transparency
-    information associated with it. This records the error code when Chrome
-    fails to send an Expect CT report.
-  </summary>
-</histogram>
-
-<histogram name="SSL.ExpectCTReportSendingAttempt">
-  <owner>estark@chromium.org</owner>
-  <summary>
-    Sites can opt in to Expect CT, a reporting feature that sends a report
-    whenever a TLS connection does not have valid Certificate Transparency
-    information associated with it. This metric fires whenever Chrome attempts
-    to send an Expect CT report.
-  </summary>
-</histogram>
-
-<histogram name="SSL.InsecureContent" enum="InsecureContentType">
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Keeps track of various insecure content events, such as loading an HTTP
-    script from an HTTPS page.
-  </summary>
-</histogram>
-
-<histogram name="SSL.MarkHttpAsStatus" enum="MarkHttpAsStatus">
-  <owner>estark@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Reports whether the user has selected to mark HTTP origins with an
-    experimental UI treatment (such as showing a warning on HTTP pages that
-    collect sensitive information). This histogram is recorded whenever the
-    security level (the overall security state of a page, roughly corresponding
-    to the lock icon) is computed for an HTTP page.
-  </summary>
-</histogram>
-
-<histogram name="SSL.MarkNonSecureAsStatus" enum="MarkNonSecureAsStatus">
-  <obsolete>
-    Deprecated 09/2016 and replaced with SSL.MarkHttpAsStatus.
-  </obsolete>
-  <owner>palmer@chromium.org</owner>
-  <summary>
-    Reports whether the user has selected to mark non-secure origins as Neutral
-    (the status quo), Dubious, or Non-Secure.
-  </summary>
-</histogram>
-
-<histogram name="Stability.Android.PendingMinidumpsOnStartup" units="minidumps">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The number of un-uploaded minidumps present in the Android Crash Reports
-    directory. Each minidump file (should) correspond to a crash. This is
-    recorded on startup, just prior to initiating uploading for these minidumps.
-    This is intended as a temporary metric, to be removed around M60:
-    http://crbug.com/699785
-  </summary>
-</histogram>
-
-<histogram name="Stability.Android.PendingMinidumpsOnStartup.SansLogcat"
-    units="minidumps">
-  <owner>isherman@chromium.org</owner>
-  <summary>
-    The number of un-uploaded minidumps present in the Android Crash Reports
-    directory that do not yet have logcat output attached. Each minidump file
-    (should) correspond to a crash. This is recorded on startup, just prior to
-    initiating uploading for all pending minidumps. This is intended as a
-    temporary metric, to be removed around M60: http://crbug.com/699785
-  </summary>
-</histogram>
-
-<histogram name="Stability.BadMessageTerminated.Chrome"
-    enum="BadMessageReasonChrome">
-  <owner>nick@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Count of processes killed by chrome/browser because they sent an IPC that
-    couldn't be properly handled. Categories are the reasons (code locations)
-    for the kills.
-  </summary>
-</histogram>
-
-<histogram name="Stability.BadMessageTerminated.Content"
-    enum="BadMessageReasonContent">
-  <owner>jam@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Count of child processes killed because they sent an IPC that couldn't be
-    properly handled. Categories are the reasons (code locations) for the kills.
-  </summary>
-</histogram>
-
-<histogram name="Stability.BadMessageTerminated.Extensions"
-    enum="BadMessageReasonExtensions">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Count of extension processes killed because they sent an IPC that couldn't
-    be properly handled. Categories are the reasons (code locations) for the
-    kills.
-  </summary>
-</histogram>
-
-<histogram name="Stability.BadMessageTerminated.NaCl"
-    enum="BadMessageReasonNaCl">
-  <owner>nick@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Count of processes killed because they sent a NaCl IPC that couldn't be
-    properly handled. Categories are the reasons (code locations) for the kills.
-  </summary>
-</histogram>
-
-<histogram name="Stability.BadMessageTerminated.PasswordManager"
-    enum="BadMessageReasonPasswordManager">
-  <owner>nick@chromium.org</owner>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Count of processes killed because they sent a bad IPC that couldn't be
-    properly handled. Categories are the reasons (code locations) for the kills.
-  </summary>
-</histogram>
-
-<histogram name="Stability.BrowserExitCodes" enum="WindowsExitCode">
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Records the exit code of the browser process (on Windows) from the previous
-    launch. On crash, the exit code will indicate the exception code of the
-    crash. This is emitted in stability data with the first report on a
-    subsequent launch.
-  </summary>
-</histogram>
-
-<histogram name="Stability.ExitFunnel" units="ms">
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Temporary instrumentation to record the Windows browser's exit path. See
-    http://crbug.com/412384.
-  </summary>
-</histogram>
-
-<histogram name="Stability.Internals.DataDiscardCount" units="counts">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Number of times stability data was discarded. This is accumulated since the
-    last report, even across versions. This is logged during stability metric
-    recording for the following log sent.
-  </summary>
-</histogram>
-
-<histogram name="Stability.Internals.InitialStabilityLogDeferredCount"
-    units="counts">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Number of times the initial stability log upload was deferred to the next
-    startup. This is logged during stability metric recording for the following
-    log sent.
-  </summary>
-</histogram>
-
-<histogram name="Stability.Internals.VersionMismatchCount" units="counts">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Number of times the version number stored in prefs did not match the
-    serialized system profile version number. This is logged during stability
-    metric recording.
-  </summary>
-</histogram>
-
-<histogram name="Stability.MobileSessionShutdownType"
-    enum="MobileSessionShutdownType">
-  <owner>lpromero@chromium.org</owner>
-  <owner>olivierrobin@chromium.org</owner>
-  <summary>
-    Type of the shutdown. This histogram is recorded at startup and logs a
-    sample for the previous session. A clean shutdown is one where the app
-    enters the background before being killed. Other shutdowns are all some sort
-    of crash. The absence of a crash log indicates that the app was killed by
-    the OS, normally due to memory pressure. If memory pressure is extremely
-    high, the app may not have had a chance to response to a memory warning
-    before being killed. For first launch after upgrade, the crash reports may
-    be discarded before this histogram is written to so it's not possible to
-    determine if there's a valid crash log present or not.
-  </summary>
-</histogram>
-
-<histogram name="Stars.Goog_Related" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips with Google related urls (points to internal Google
-    resources). Logs every time user goes to chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Stars.Goog_Related_20_Percent" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips with Google related urls within first 20 (points to
-    internal Google resources). Logs every time user goes to chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Stars.Images_Percent" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips with images. Logs every time user goes to
-    chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Stars.Images_Percent_First20" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips with images within first 20. Logs every time user goes
-    to chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Stars.LaunchLocation" enum="StarsLaunchLocation">
-  <owner>ianwen@chromium.org</owner>
-  <summary>Logs a UI location from which a bookmark is launched.</summary>
-</histogram>
-
-<histogram name="Stars.No_Images_Snippets" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips without images or snippets. Logs every time user goes to
-    chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Stars.No_Img_No_Snippet_20_Percent" units="%">
-  <owner>yefim@chromium.org</owner>
-  <summary>
-    Percentage of clips without images or snippets within first 20. Logs every
-    time user goes to chrome://bookmarks.
-  </summary>
-</histogram>
-
-<histogram name="Startup.AfterStartupTaskCount">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    The number of after-startup tasks that were queued prior to startup
-    completion and deferred until that time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.AfterStartupTaskDelayedUntilTime" units="ms">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Time from the process creation until deferred after-startup tasks began
-    running.
-  </summary>
-</histogram>
-
-<histogram name="Startup.AppListFirstPaintColdStart" units="ms">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    Time for a newly created browser process to perform the first paint of the
-    app launcher, when started with the --show-app-list flag and with no
-    currently running Chrome processes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.AppListFirstPaintWarmStart" units="ms">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    Time for a running browser process to perform the first paint of the app
-    launcher. Measured from the time a second Chrome process started, which sent
-    its --show-app-list command line argument to the already-running process and
-    will soon exit.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BlockForCrashpadHandlerStartupTime" units="ms">
-  <owner>crashpad-dev@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during in
-    crash_report::BlockUntilHandlerStarted().
-  </summary>
-</histogram>
-
-<histogram name="Startup.BringToForegroundReason"
-    enum="BooleanBringToForegroundReason">
-  <owner>johnme@chromium.org</owner>
-  <summary>
-    Records the cause, each time Chrome is brought to the foreground. Currently
-    only checks if a NotificationUIManager notification was shown in the last 5
-    seconds (includes Web Notifications, but not media or Cast).
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserLaunchURLCount" units="urls">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Measured when Chrome is invoked, this counts the number of URLs passed via
-    command line. Note that this handles the case of a URL passed to Chrome
-    starting up, or when a running Chrome is given the message to open a new
-    URL.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms">
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMainRunnerImplInitializeStep1Time" units="ms">
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the first section of
-    BrowserMainRunnerImpl::Initialize.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMainRunnerImplInitializeStep2Time" units="ms">
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the second section of
-    BrowserMainRunnerImpl::Initialize.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMainToRendererMain" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time from the ChromeMain() entry in the browser process to the first
-    RendererMain() entry.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartHardFaultCount" units="faults">
-  <owner>chrisha@chromium.org</owner>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The number of hard faults incurred in the browser process from startup to
-    start of the main thread's message loop, not including first runs of the
-    browser. This is only reported on Windows 7 and greater.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.FirstRun"
-    units="faults">
-  <obsolete>
-    Removed 1/2016.
-  </obsolete>
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The number of hard faults incurred in the browser process from startup to
-    start of the main thread's message loop on first run. This is only reported
-    on Windows 7 and greater.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.Success"
-    enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 12/2015. No longer tracked because values collected on stable
-    show that the function pretty much never fails (succeeds 99.9996% of the
-    time).
-  </obsolete>
-  <owner>chrisha@chromium.org</owner>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    If OS support was detected (Windows 7 and greater) indicates whether it was
-    possible to determine the number of hard faults that have occurred in the
-    process from startup to start of the main thread's message loop. This can
-    fail because the underlying call is inherently racy.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTime">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time from browser startup to the start of the main thread's message loop.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry" units="ms">
-  <obsolete>
-    Deprecated 12/2016. crbug.com/634408
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from main entry to the start of the main thread's message loop. This
-    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
-    variance resulting from Chrome being autostarted. Replaced with
-    Startup.BrowserMessageLoopStartTimeFromMainEntry2 which is recorded all the
-    time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"
-    units="ms">
-  <obsolete>
-    Deprecated 12/2016. crbug.com/634408
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from main entry to the start of the main thread's message loop on first
-    run. This stat is only recorded after 7 minutes of OS uptime to try to
-    mitigate the variance resulting from Chrome being autostarted. Replaced with
-    Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2 which is recorded
-    all the time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"
-    units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from main entry to the start of the main thread's message loop on first
-    run.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from main entry to the start of the main thread's message loop.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserOpenTabs">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time taken to open the initial tab or to restore tabs from previous session.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserProcessImpl_PreMainMessageLoopRunTime"
-    units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    BrowserProcessImpl::PreMainMessageLoopRun.
-  </summary>
-</histogram>
-
-<histogram name="Startup.BrowserWindowDisplay" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time from browser startup to the time the browser window initially becomes
-    visible.
-  </summary>
-</histogram>
-
-<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="ms">
-  <obsolete>
-    Deprecated 7/2015. To be replaced with Cast events.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    The elapsed time from the ChromeCast application launch to the first video
-    frame displayed.
-  </summary>
-</histogram>
-
-<histogram name="Startup.CreateFirstProfile" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    How long it takes to load the original profile synchronously on the UI
-    thread.
-  </summary>
-</histogram>
-
-<histogram
-    name="Startup.Experimental.FirstWebContents.MainFrameLoad.ManyBuckets"
-    units="ms">
-  <obsolete>
-    Removed in M-41.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    An experimental metric only collected on the dev and canary channels.
-    Measure the elapsed time from process launch to the first main frame load of
-    the first web contents. Uses significantly more buckets, with reduced
-    ranges.
-  </summary>
-</histogram>
-
-<histogram
-    name="Startup.Experimental.FirstWebContents.MainFrameLoad.StandardBuckets"
-    units="ms">
-  <obsolete>
-    Moved to Startup.FirstWebContents.MainFrameLoad in M-41.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    An experimental metric only collected on the dev and canary channels.
-    Measure the elapsed time from process launch to the first main frame load of
-    the first web contents. Uses standard bucket ranges.
-  </summary>
-</histogram>
-
-<histogram
-    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.ManyBuckets"
-    units="ms">
-  <obsolete>
-    Removed in M-41.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    An experimental metric only collected on the dev and canary channels.
-    Measure the elapsed time from process launch to the first non-empty paint of
-    the first web contents. Uses significantly more buckets, with reduced
-    ranges.
-  </summary>
-</histogram>
-
-<histogram
-    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.StandardBuckets"
-    units="ms">
-  <obsolete>
-    Moved to Startup.FirstWebContents.NonEmptyPaint in M-41.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    An experimental metric only collected on the dev and canary channels.
-    Measure the elapsed time from process launch to the first non-empty paint of
-    the first web contents. Uses standard bucket ranges.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstCommitNavigationTime" units="ms">
-  <obsolete>
-    Replaced by Startup.FirstCommitNavigationTime2
-  </obsolete>
-  <owner>pasko@chromium.org</owner>
-  <summary>
-    [Android only] The time from the earliest entry point in the browser process
-    to the moment the first navigation is committed, i.e. when renderer gets the
-    first byte of the document.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstCommitNavigationTime2" units="ms">
-  <owner>pasko@chromium.org</owner>
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    [Android only] The time from the first foreground entry point in the app to
-    the moment the first navigation is committed, i.e. when renderer gets the
-    first byte of the document.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.FinishReason"
-    enum="StartupProfilingFinishReason">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] The reason for which startup profiling was deemed complete. Logged
-    once per session on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.MainFrameLoad" units="ms">
-  <obsolete>
-    Deprecated with 3/2016 with M48.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
-    Measure the elapsed time from process launch to the first main frame load of
-    the first web contents. Deprecated in favor of
-    Startup.FirstWebContents.MainFrameLoad2 which now avoids counting ill-cases
-    (ref. FirstWebContentsProfiler::FinishReason).
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.MainFrameLoad2" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] Measure the elapsed time from process launch to the first main
-    frame load of the first web contents. Only comprised of cases where the
-    initial foreground tab gets to complete its rendering task unimpeded (an
-    improvement over Startup.FirstWebContents.MainFrameLoad).
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.MainNavigationFinished" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] Measure the elapsed time from process launch to the moment when
-    the navigation is committed (first bytes received) in the first web
-    contents' main frame.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.MainNavigationStart" units="ms">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] Measure the elapsed time from process launch to the beginning of
-    navigation in the first web contents' main frame.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.NonEmptyPaint" units="ms">
-  <obsolete>
-    Deprecated with 3/2016 with M48.
-  </obsolete>
-  <owner>erikchen@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
-    Measure the elapsed time from process launch to the first non- empty paint
-    of the first web contents. Deprecated in favor of
-    Startup.FirstWebContents.NonEmptyPaint2 which now avoids counting ill-cases
-    (ref. FirstWebContentsProfiler::FinishReason).
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.NonEmptyPaint2" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    [Desktop] Measure the elapsed time from process launch to the first non-
-    empty paint of the first web contents. Only comprised of cases where the
-    initial foreground tab gets to complete its rendering task unimpeded (an
-    improvement over Startup.FirstWebContents.NonEmptyPaint).
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UINotResponsive" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the execution time for a single task to execute on UI if
-    it was not possible to execute UI tasks under 1/60s within certain limits,
-    after WebContents was painted at least once. This is recorded at most once
-    per Chrome launch. Used as a measure of responsiveness on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UINotResponsive_10sec" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the elapsed time for a single task to execute on UI if it
-    was not possible to execute it under 1/60s within certain limits, 10 second
-    after first WebContents was painted at least once.  This is recorded at most
-    once per Chrome launch. Used as a measure of responsiveness on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UINotResponsive_1sec" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the elapsed time for a single task to execute on UI if it
-    was not possible to execute it under 1/60s within certain limits, 1 second
-    after first WebContents was painted at least once.  This is recorded at most
-    once per Chrome launch. Used as a measure of responsiveness on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UIResponsive" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the elapsed time it takes for a task to execute on UI
-    under 1/60s after first WebContents was painted at least once. This is
-    recorded at most once per Chrome launch. Used as a measure of responsiveness
-    on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UIResponsive_10sec" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the elapsed time it takes for a task to execute on UI
-    under 1/60s, 10 second after the first WebContents was painted.  This is
-    recorded at most once per Chrome launch. Used as a measure of responsiveness
-    on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.FirstWebContents.UIResponsive_1sec" units="ms">
-  <obsolete>
-    Deprecated 10/2015.
-  </obsolete>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    [Desktop] Measures the elapsed time it takes for a task to execute on UI
-    under 1/60s, 1 second after the first WebContents was painted. This is
-    recorded at most once per Chrome launch. Used as a measure of responsiveness
-    on startup.
-  </summary>
-</histogram>
-
-<histogram name="Startup.Fling.TimeToDisplayVideo" units="ms">
-  <obsolete>
-    Deprecated 7/2015. To be replaced with Cast events.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    The elapsed time from the Fling application launch to the first video frame
-    displayed.
-  </summary>
-</histogram>
-
-<histogram name="Startup.IsResume">
-  <obsolete>
-    Deprecated 12/2011. Merged into MobileSessionStartType.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>Whether a startup is a resume (vs a cold start).</summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ExeMainToDllMain">
-  <obsolete>
-    Deprecated 12/2016. crbug.com/634408
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from the main() function in chrome.exe to chrome.dll's main(). This
-    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
-    variance resulting from Chrome being autostarted. Replaced with
-    Startup.LoadTime.ExeMainToDllMain2 which is recorded all the time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ExeMainToDllMain2">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from the main() function in chrome.exe to chrome.dll's main().
-  </summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToDllMain">
-  <obsolete>
-    Deprecated 12/2016. crbug.com/634408
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from the process creation to chrome.dll's main(). This stat is only
-    recorded after 7 minutes of OS uptime to try to mitigate the variance
-    resulting from Chrome being autostarted. Replaced with
-    Startup.LoadTime.ProcessCreateToDllMain2 which is recorded all the time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToDllMain2">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>Time from the process creation to chrome.dll's main().</summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToExeMain">
-  <obsolete>
-    Deprecated 12/2016. crbug.com/634408
-  </obsolete>
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from the process creation to executing the main() function in
-    chrome.exe. This stat is only recorded after 7 minutes of OS uptime to try
-    to mitigate the variance resulting from Chrome being autostarted. Replaced
-    with Startup.LoadTime.ProcessCreateToExeMain2 which is recorded all the
-    time.
-  </summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToExeMain2">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Time from the process creation to executing the main() function in
-    chrome.exe.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.AwakeFromNib" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    -[AppControllerMac awakeFromNib].
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.DockIconWillFinishBouncing" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    -[AppControllerMac didFinishLaunching:]. At that point, the dock icon will
-    finish its current animation and stop bouncing.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.PostMainMessageLoopStart" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    ChromeBrowserMainPartsMac::PostMainMessageLoopStart.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.PostProfileInit" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    ChromeBrowserMainPartsMac::PostProfileInit.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.PreMainMessageLoopStart" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    ChromeBrowserMainPartsMac::PreMainMessageLoopStart.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.PreProfileInit" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    ChromeBrowserMainPartsMac::PreProfileInit.
-  </summary>
-</histogram>
-
-<histogram name="Startup.OSX.WillFinishLaunching" units="ms">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed between main entry and the invocation of
-    -[AppControllerMac willFinishLaunching:].
-  </summary>
-</histogram>
-
-<histogram name="Startup.PreMainMessageLoopRunImplLongTime" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
-  </summary>
-</histogram>
-
-<histogram name="Startup.PreMainMessageLoopRunImplStep1Time" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the first untracked section of
-    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
-  </summary>
-</histogram>
-
-<histogram name="Startup.PreMainMessageLoopRunImplStep2Time" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the second untracked section of
-    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
-  </summary>
-</histogram>
-
-<histogram name="Startup.PreMainMessageLoopRunImplStep3Time" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during the third untracked section of
-    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
-  </summary>
-</histogram>
-
-<histogram name="Startup.PreMainMessageLoopRunImplTime" units="ms">
-  <obsolete>
-    Deprecated as of 2/2015.
-  </obsolete>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SameVersionStartupCount">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    The number of startups the current version has been through. Reported once
-    per Chrome session, on startup. Any user that reports X for this version
-    will also have previously reported [1,X-1] for this version through the
-    previous X-1 Chrome sessions.
-  </summary>
-</histogram>
-
-<histogram name="Startup.ShowAppListColdStart" units="ms">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    Time for a newly created browser process to reach the code that starts
-    showing the app launcher, when started with the --show-app-list flag and
-    with no currently running Chrome processes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.ShowAppListWarmStart" units="ms">
-  <owner>tapted@chromium.org</owner>
-  <summary>
-    Time for a running browser process to reach the code that starts showing the
-    app launcher. Measured from the time a second Chrome process started, which
-    sent its --show-app-list command line argument to the already-running
-    process and will soon exit.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupBookmarksLoad" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to load bookmarks from disk. This measurement is only sent for
-    startups that take &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to finish initialization of the extension service including
-    loading built-in extensions. This measurement is only sent for startups that
-    take &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupFinalProfileInit" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time the final stages of profile initialization taking including
-    initialization of profile keyed services. This measurement is only sent for
-    startups that take &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupNSSInit" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to load the NSS libraries and initialize it. This measurement
-    is only sent for startups that take &gt;10 seconds after an uptime of 7
-    minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupPreferenceLoading" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to load preferences from disk. This measurement is only sent
-    for startups that take &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupProfileIODataInit" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to initialize the ProfileIOData object - this includes
-    initialization of the cookie store. This measurement is only sent for
-    startups that take &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to load the safe browsing database from disk. This measurement
-    is only sent for startups that take &gt;10 seconds after an uptime of 7
-    minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize" units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes to initialize the safe browsing service. This measurement is
-    only sent for startups that take &gt;10 seconds after an uptime of 7
-    minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSessionServiceCreateTabsAndWindows"
-    units="ms">
-  <obsolete>
-    Deprecated 06/2015.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <summary>
-    Time it takes for session restore to finish initiating creation of restored
-    tabs and windows. This measurement is only sent for startups that take
-    &gt;10 seconds after an uptime of 7 minutes.
-  </summary>
-</histogram>
-
-<histogram name="Startup.StartupBrowserCreator_ProcessCmdLineImplTime"
-    units="ms">
-  <obsolete>
-    Deprecated 02/2015. Startup.StartupBrowserCreator_Start is more useful.
-  </obsolete>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during
-    StartupBrowserCreator::ProcessCmdLineImpl.
-  </summary>
-</histogram>
-
-<histogram name="Startup.StartupBrowserCreator_Start" units="ms">
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The amount of time that elapsed during StartupBrowserCreator::Start().
-  </summary>
-</histogram>
-
-<histogram name="Startup.SystemUptime" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The time elapsed between system boot and Chrome browser process launch. This
-    is recorded just before the main message loop starts.
-  </summary>
-</histogram>
-
-<histogram name="Startup.Temperature" enum="StartupTemperature">
-  <owner>chrisha@chromium.org</owner>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Indicates whether or not the given startup was warm, cold or unable to be
-    determined. This is based off observing the number of hard faults that occur
-    during startup prior to Startup.BrowserMessageLoopStartTime.
-  </summary>
-</histogram>
-
-<histogram name="Startup.TimeSinceLastStartup" units="minutes">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time elapsed since the last startup that went up to the main message loop
-    start. This is recorded just before the main message loop starts.
-  </summary>
-</histogram>
-
-<histogram name="Startup.WarmStartTimeFromRemoteProcessStart" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time for a running browser process to start processing the command line
-    passed in by a second Chrome process, which just sent its command line
-    arguments to the already-running process and will soon exit. Measured from
-    the time the second Chrome process started.
-  </summary>
-</histogram>
-
-<histogram name="StartupTimeBomb.Alarm" units="ms">
-  <obsolete>
-    Deprecated as of 10/2014.
-  </obsolete>
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    Time duration measured from the time the startup timebomb was started and
-    when it went off.
-  </summary>
-</histogram>
-
-<histogram name="Storage.BlacklistedImportantSites.Reason"
-    enum="ClearDataSiteBlacklistCrossedReason">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    This is recorded for every site that the user blacklists when they when they
-    clear browsing data. It indicates which signals were used to show the given
-    site to the user that the user then chose to exclude from clearing.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.Broken" enum="BooleanBroken">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    If a newly constructed blob is broken. See Storage.Blob.BrokenReason for a
-    the broken reasons.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.BrokenReason" enum="BlobBrokenReason">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The reason a blob is broken, reported only for broken blobs upon
-    construction. See Storage.Blob.Broken for the breakdown of blobs broken vs
-    unbroken.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.CleanupSuccess" enum="Boolean">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the old blob storage directories are cleared. This occurs on
-    storage partition initialization, and is not recorded if there are no
-    directories to clear. The value indicates if the file operations were a
-    success.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.CreateDirectoryResult" enum="PlatformFileError">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when we create the blob storage directory for the blob storage
-    system. When we need to write blob data to files, we create this directory
-    if it doesn't exist. We write blob data to files when either we have a new
-    blob that's larger than our memory limit, or we're approaching our in-memory
-    limit for blob storage.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.ExceededMemory" enum="Boolean">
-  <obsolete>
-    Deprecated as of 3/2016. Use Storage.Blob.Broken to see the fraction of
-    blobs that are broken, and Storage.Blob.BrokenReason for the number of
-    broken blobs that are broken because of memory constraints.
-  </obsolete>
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    True if a created blob exceeded the internal in-memory storage memory limit
-    for blobs.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.InvalidReference" enum="RefcountOperation">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Counts the number of times we have an invalid refcount operation. An invalid
-    increment means the blob didn't exist, and an invalid decrement means we
-    don't have any record of the blob in our host.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.InvalidURLRegister" enum="RefcountOperation">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Counts the number of times we have an invalid url registration operation. An
-    invalid increment means the blob isn't in use by the host yet or the url is
-    already mapped. An invalid decrement means the url isn't registered.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.ItemCount" units="Blob Items">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The number of blob items in a blob, recorded at blob construction. (Blobs
-    are immutable, so this won't change afterwards).
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.MaxDiskSpace" units="MB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Records the calculated max disk space the blob storage system can use.
-    Recorded on storage partition initialization.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.MaxDiskSpaceAdjustment"
-    enum="BlobStorageDiskSpaceAdjustment">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when the blob system changes adjustment types on its disk size. The
-    disk can either be Frozen, Adjusted (near min external available disk
-    space), or Normal. We record when we transition between these states, which
-    can happen after any file operations in the blob system (paging data to disk
-    or saving a new blob directly to disk).
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.PageFileSize" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Size of a page file created for blob data by the blob storage system.
-    Recorded before we create the file and write the blob items. We page blob
-    data to files when we get close to our maximum blob memory usage.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.PagingDisabled" enum="PlatformFileError">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when we disable paging blobs to file in the blob storage system.
-    This occurs when we experience a filesystem error during writing blob data
-    to disk. We write blob data to files when either we have a new blob that's
-    larger than our memory limit, or we're approaching our in-memory limit for
-    blob storage. The relevant error is recorded here.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.RegisterBlobTime" units="ms">
-  <owner>darin@chromium.org</owner>
-  <summary>
-    The amount of time taken to complete the synchronous
-    BlobStorageMsg_RegisterBlob IPC.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.RegisterPublicURLTime" units="ms">
-  <owner>darin@chromium.org</owner>
-  <summary>
-    The amount of time taken to complete the synchronous
-    BlobStorageMsg_RegisterPublicURL IPC.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.RendererFileSeekFailed" enum="Boolean">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Whether seeking within a file (in order to write a part of a blob) failed in
-    the renderer.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.RendererFileWriteFailed" enum="Boolean">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Whether writing part of a blob to a file failed in the renderer.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.ReusedItem" enum="BooleanReused">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    True if we reuse an item for a blob created from using Blob.slice, recorded
-    in BlobStorageContext on blob creation.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.StorageSizeAfterAppend" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Records the total in-memory storage size of blobs before a blob item is
-    appended.  Can be subtracted by Storage.Blob.StorageSizeBeforeAppend to find
-    the true distribution of blob storage sizes.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.StorageSizeBeforeAppend" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Records the total in-memory storage size of blobs before a blob item is
-    appended.  Can be subtracted from Storage.Blob.StorageSizeAfterAppend to
-    find the true distribution of blob storage sizes.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.TotalSize" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The total in-memory size in KB of finished blobs. Recorded in
-    BlobStorageContext when the blob is finished being created. This can include
-    memory that is shared with other blobs or memory from repeated internal
-    items.
-  </summary>
-</histogram>
-
-<histogram name="Storage.Blob.TotalUnsharedSize" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The total amount of unique memory used to create a blob. Recorded in
-    BlobStorageContext when the blob is finished being created. This does not
-    include memory that is shared with other blobs. If multiple of the same blob
-    item is present, then this number will reflect the size of the single item.
-  </summary>
-</histogram>
-
-<histogram name="Storage.BlobItemSize" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The size in KB of items (or parts of items) appended to blobs.
-  </summary>
-</histogram>
-
-<histogram name="Storage.BlobItemSize.BlobSlice" units="KB">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    The size in KB of items (or parts of items) appended to blobs that come from
-    the slicing of other blobs.  This happens when using Blob.slice, where we
-    are using a part of an item in the original blob (not the whole item).
-  </summary>
-</histogram>
-
-<histogram name="Storage.BlobItemSize.File.Unknown" enum="BooleanUnknown">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    True if the file size on blob append is unknown (which means the full file),
-    or false if a specific file length was populated. Recorded in
-    BlobStorageContext when we are adding a file item to a blob.
-  </summary>
-</histogram>
-
-<histogram name="Storage.BlobItemSize.FileSystem.Unknown" enum="BooleanUnknown">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    True if the file size of a filesystem object on blob append is unknown
-    (which means the full file), or false if a specific file length was
-    populated. Recorded in BlobStorageContext when we are adding a filesystem
-    item to a blob.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.CBDChosenReason"
-    enum="ImportantSitesReason">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    When a user chooses to blacklist one or more sites when they clear browsing
-    data, this is recorded for every reason each chosen site was marked as
-    important. It indicates which signals were used to show the given site to
-    the user that the user then chose to exclude from clearing.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.CBDChosenReasonCount" units="count">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    This records the number of reasons each important site had that the user
-    chose to blacklist when clearing browsing data.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.CBDIgnoredReason"
-    enum="ImportantSitesReason">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    When a user chooses to blacklist one or more sites when they clear browsing
-    data, this is recorded for every reason each unchosen site was marked as
-    important. It indicates which signals were used to show the given site to
-    the user, which the user then ignored and did not select to blacklist from
-    clearing data.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.CBDIgnoredReasonCount" units="count">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    This records the number of reasons each important site had that the user
-    chose to NOT blacklist when clearing browsing data.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.GeneratedReason"
-    enum="ImportantSitesReason">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    Recorded when we generate a list of important sites. This can happen when
-    the user opens the Clear Browsing Data dialog on Android, views the Storage
-    tab in Site Settings on Android, or launches 'Manage Storage' from Android
-    System Settings for Chrome. We record every reason each site was chosen in
-    this metric. This means that we can report this metric multiple times for a
-    single site.
-  </summary>
-</histogram>
-
-<histogram name="Storage.ImportantSites.GeneratedReasonCount" units="count">
-  <owner>dmurph@chromium.org</owner>
-  <summary>
-    This records the number of reasons qualifying a site for being 'important'.
-    We record this for every site when we generate a list of important sites,
-    described in &quot;Storage.ImportantSites.GeneratedReason&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Style.AuthorStyleSheet.ParseTime" units="microseconds">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Microseconds spent in StyleSheetContents::parseAuthorStyleSheet.
-  </summary>
-</histogram>
-
-<histogram name="Style.LazyUsage.Percent" enum="LazyCSSParseUsage">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Tracks % of lazy rules that ended up needing to be parsed. A sheet logs
-    counts into this histogram as it is parsed (i.e. as properties are parsed
-    lazily). Once a certain percent of rules have been parsed, we log a count
-    immediately. Note that this implies that a stylesheet which uses all of its
-    rules will log counts in every bucket.
-  </summary>
-</histogram>
-
-<histogram name="Style.TotalLazyRules" units="count">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Tracks the total number of rules that have parsing lazily deferred in an
-    author style sheet.
-  </summary>
-</histogram>
-
-<histogram name="Style.TotalLazyRules.FullUsage" units="count">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Tracks the total number of rules that have parsing lazily deferred in an
-    author style sheet, for sheets that ended up needing all their rules.
-  </summary>
-</histogram>
-
-<histogram name="Style.UpdateTime" units="microseconds">
-  <owner>csharrison@chromium.org</owner>
-  <summary>Microseconds spent in Document::updateStyle.</summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.Activation.CPUDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Records how much thread CPU time it takes to decide whether subresource
-    filtering should be activated for a main frame or subframe.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.Activation.WallDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Records how long it takes to decide whether subresource filtering should be
-    activated for a main frame or subframe.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.ActivationState"
-    enum="SubresourceFilterActivationState">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is committed in a main frame or subframe, records
-    whether subresource filtering should be activated for that load.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Disallowed"
-    units="resource loads">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total number of subresource
-    loads that have been disallowed. This only differs from `MatchedRules` when
-    filtering is performed in dry-run mode.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated"
-    units="resource loads">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total number of subresource
-    loads that have been evaluated. This only differs from 'Total' when the
-    document is subject to a deactivating rule with DOCUMENT activation type.
-  </summary>
-</histogram>
-
-<histogram
-    name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules"
-    units="resource loads">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total number of subresource
-    loads that have matched filtering rules. This only differs from `Disallowed`
-    when filtering is performed in dry-run mode.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total"
-    units="resource loads">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total number of subresource
-    loads that have gone through the subresource filtering pipeline.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.DocumentLoad.RulesetIsAvailable"
-    enum="BooleanAvailable">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whenever a document load is committed in a main frame or subframe and
-    subresource filtering should be activated, records whether the filtering
-    rules are available.
-  </summary>
-</histogram>
-
-<histogram
-    name="SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total thread CPU time spent on
-    processing subresource requests in allowLoad.
-  </summary>
-</histogram>
-
-<histogram
-    name="SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a document load is finished in a main frame or subframe with
-    subresource filtering activated, records the total real time spent on
-    processing subresource requests in allowLoad, including the time spent on
-    waiting or being descheduled.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.IndexRuleset.CPUDuration" units="ms">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    The total CPU time it took to parse and index all rules. Does not include
-    time when the indexing thread was not doing actual work, e.g. waiting for
-    I/O or being descheduled. Recorded every time the RulesetService kicks off a
-    ruleset indexing process.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.IndexRuleset.NumUnsupportedRules"
-    units="rules">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The number of rules that could be not be successfully indexed and therefore
-    have been ignored. Recorded every time the RulesetService kicks off a
-    ruleset indexing process and it reaches the point where rules are getting
-    indexed.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.IndexRuleset.WallDuration" units="ms">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    The total time it took to read and index all rules. Includes I/O time for
-    reading the unindexed rules, but not for writing the indexed ruleset.
-    Recorded every time the RulesetService kicks off a ruleset indexing process.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Disallowed"
-    units="resource loads">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total number of subresource loads that have been disallowed.
-    This only differs from `MatchedRules` when filtering is performed in dry-run
-    mode.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Evaluated"
-    units="resource loads">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total number of subresource loads that have been evaluated. This
-    only differs from 'Total' when some of subdocuments is subject to a
-    deactivating rule with DOCUMENT activation type.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.MatchedRules"
-    units="resource loads">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total number of subresource loads that have matched filtering
-    rules. This only differs from `Disallowed` when filtering is performed in
-    dry-run mode.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Total"
-    units="resource loads">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total number of subresource loads that have gone through the
-    subresource filtering pipeline.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.RedirectChainLength" units="urls">
-  <owner>melandory@chromium.org</owner>
-  <summary>Total length of the server redirects during the navigation.</summary>
-</histogram>
-
-<histogram name="SubresourceFilter.PageLoad.RedirectChainMatchPattern"
-    enum="SubresourceFilterMatchPattern">
-  <owner>melandory@chromium.org</owner>
-  <summary>
-    For each main frame navigation, records a pattern that indicates which URLs
-    in the redirect chain matched Safe Browsing blacklists, and which did not.
-    For example, for the redirect chain A-B-C-D metric tracks: 1. If initial URL
-    (A) was on a Safe Browsing blacklist. 2. If any if middle urls (B, C) were
-    on a Safe Browsing blacklist. 3. If committed URL (B) was on a Safe Browsing
-    blacklist.
-  </summary>
-</histogram>
-
-<histogram
-    name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total thread CPU time spent on evaluating subresource requests,
-    aggregated across all frames.
-  </summary>
-</histogram>
-
-<histogram
-    name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalWallDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a page load is finished with subresource filtering activated,
-    records the total real time spent on evaluating subresource requests,
-    aggregated across all frames. This includes the time spent on waiting or
-    being descheduled.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.Prompt.NumReloads" enum="BooleanRequested">
-  <owner>melandory@chromium.org</owner>
-  <summary>
-    Number of times the user has requested a reload for the page by clicking on
-    the reload button.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.Prompt.NumVisibility" enum="BooleanVisible">
-  <owner>melandory@chromium.org</owner>
-  <summary>
-    Number of times Safebrowsing Subresource Filter decided to toggle visibility
-    of the prompt.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a subresource of a document is evaluated against the ruleset,
-    records the thread CPU time spent on calculating whether it should be
-    allowed to load.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"
-    units="microseconds">
-  <owner>pkalinnikov@chromium.org</owner>
-  <summary>
-    Whenever a subresource of a document is evaluated against the ruleset,
-    records how much time was spent on calculating whether it should be allowed
-    to load.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.WriteRuleset.ReplaceFileError"
-    enum="PlatformFileError">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Records the exact error whenever writing a ruleset fails at the step where
-    the ruleset would be moved from the scratch directory to its final location.
-  </summary>
-</histogram>
-
-<histogram name="SubresourceFilter.WriteRuleset.Result"
-    enum="SubresourceFilterWriteRulesetResult">
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Whether indexing a version of the ruleset and writing it to disk succeeded,
-    or failed at a particular step. Recorded every time the RulesetService kicks
-    off a ruleset indexing process.
-  </summary>
-</histogram>
-
-<histogram name="Suggestions.FailedRequestErrorCode" enum="NetErrorCodes">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The counts of network error codes encountered by SuggestionsService when an
-    attempt to fetch suggestions from the server fails.
-  </summary>
-</histogram>
-
-<histogram name="Suggestions.FetchResponseCode">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The counts of HTTP response codes encountered by SuggestionsService when
-    attempting to fetch suggestions from the server.
-  </summary>
-</histogram>
-
-<histogram name="Suggestions.FetchSuccessLatency" units="ms">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The latency of a SuggestionsService fetch that results in a success
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Suggestions.LocalBlacklistSize" units="URLcount">
-  <owner>manzagop@chromium.org</owner>
-  <summary>
-    Number of URLs present in the Suggestions local blacklist when the
-    Suggestions service is created.
-  </summary>
-</histogram>
-
-<histogram name="Suggestions.ResponseState" enum="SuggestionsResponseState">
-  <owner>mathp@chromium.org</owner>
-  <summary>
-    The counts of response states (such as empty or invalid) encountered by
-    SuggestionsService when attempting to fetch suggestions from the server.
-  </summary>
-</histogram>
-
-<histogram name="SupervisedUserContentProvider.ChromeNotStartedRequestTime"
-    units="ms">
-  <owner>aberent@chromium.org</owner>
-  <summary>
-    Time to get the response to requesting whether a URL should be accessible to
-    the supervised user, when Chrome was not previously running.
-  </summary>
-</histogram>
-
-<histogram name="SupervisedUserContentProvider.ChromeStartedRequestTime"
-    units="ms">
-  <owner>aberent@chromium.org</owner>
-  <summary>
-    Time to get the response to requesting whether a URL should be accessible to
-    the supervised user, when Chrome was already running.
-  </summary>
-</histogram>
-
-<histogram name="SupervisedUserContentProvider.RequestTimedOut"
-    enum="BooleanTimedOut">
-  <owner>aberent@chromium.org</owner>
-  <summary>
-    True if a request to find out whether a URL should be accessible to a
-    supervised user timed out.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AppAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during app association (M18 and earlier were mispelled with this
-    histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AppRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of apps run failures, used to compare failure rates between data types
-    for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AppsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during app association.</summary>
-</histogram>
-
-<histogram name="Sync.AppsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of app configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.AppSettingsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during app settings association.</summary>
-</histogram>
-
-<histogram name="Sync.AppSettingsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of app settings configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AppSettingsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by AppSettingsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of app settings association failures.</summary>
-</histogram>
-
-<histogram name="Sync.AppsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by AppsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of app association failures.</summary>
-</histogram>
-
-<histogram name="Sync.AppStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of app association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.Attachments.DownloadChecksumResult" enum="BooleanMatched">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>Whether attachment checksums match on download or not.</summary>
-</histogram>
-
-<histogram name="Sync.Attachments.DownloadResponseCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>Response or error codes from downloading sync attachments.</summary>
-</histogram>
-
-<histogram name="Sync.Attachments.DownloadTotalTime" units="ms">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>
-    The total time a download takes including request and server overhead.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Attachments.StoreInitResult"
-    enum="SyncAttachmentStoreResult">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>The result of initializing the sync attachment store.</summary>
-</histogram>
-
-<histogram name="Sync.Attachments.UploadResponseCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>Response or error codes from uploading sync attachments.</summary>
-</histogram>
-
-<histogram name="Sync.AttemptNigoriMigration" enum="SyncNigoriMigrationResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of results from attempting to migrate Sync's nigori node and its
-    encryption keys to support keystore.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Age of all auth tokens rejected by the invalidation server. Measured from
-    the time they were created.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Age of auth tokens younger than one hour that were rejected by the
-    invalidation server. Measured from the time they were created.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AuthorizationTimeInNetwork" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during initial authorization.</summary>
-</histogram>
-
-<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Age of all auth tokens rejected by the sync server. Measured from the time
-    they were created.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="ms">
-  <obsolete>
-    No longer relevant since transition to OAuth.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Age of auth tokens younger than one hour that were rejected by the sync
-    server. Measured from the time they were created.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during autofill association.</summary>
-</histogram>
-
-<histogram name="Sync.AutofillConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of autofill configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfileAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during autofill profile association (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfileRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of autofill profiles run failures, used to compare failure rates
-    between data types for a particular profile (see other Sync*RunFailures
-    histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfilesAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during autofill profile association.</summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfilesConfigureFailure"
-    enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of autofill profile configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfilesStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by AutofillProfilesConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of autofill profile association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillProfileStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of autofill profile association failures (M18 and
-    earlier were mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of autofill (autocomplete) run failures, used to compare failure rates
-    between data types for a particular profile (see other Sync*RunFailures
-    histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.AutofillStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by AutofillConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of autofill association failures.</summary>
-</histogram>
-
-<histogram name="Sync.AutoNigoriOverwrites">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of times this client has overwritten the nigori node to update the
-    encryption keys without a user action (during this instantiation of Chrome).
-  </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeFirstTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization time during initial sync setup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeFirstTimeSuccess" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization success rate during initial sync setup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeRestoreState"
-    enum="SyncBackendInitializeRestoreState">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Compares sync's has_setup_completed pref against the set of types actually
-    restored from the sync DB.  Mismatches should be rare.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeRestoreSuccess" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization success rate in cases where sync was
-    previously initialized.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeRestoreTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization time in cases where sync was previously
-    initialized.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BadRequestCountOnSignInNeedsUpdateInfoBar">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of bad requests since application startup, when the Sync error
-    infobar asking the user to update their account details is displayed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BookmarkAssociationTime" units="ms">
-  <obsolete>
-    Deprecated as of m18
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during bookmark association.</summary>
-</histogram>
-
-<histogram name="Sync.BookmarkRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of bookmark run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.BookmarksAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during bookmark association.</summary>
-</histogram>
-
-<histogram name="Sync.BookmarksConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of bookmark configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.BookmarksDuplicationsAtAssociation">
-  <owner>stanisc@chromium.org</owner>
-  <summary>
-    Estimated number of bookmark duplications after bookmark association.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BookmarksModelSyncStateAtNewDuplication"
-    enum="SyncBookmarkModelSyncState">
-  <owner>stanisc@chromium.org</owner>
-  <summary>
-    Tracks state of local bookmark model version relative to the sync version
-    when a new bookmark duplication occurs during bookmark association.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BookmarksNewDuplicationsAtAssociation">
-  <owner>stanisc@chromium.org</owner>
-  <summary>
-    Estimated number of new bookmark duplications after bookmark association.
-  </summary>
-</histogram>
-
-<histogram name="Sync.BookmarksStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by BookmarksConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of bookmark association failures.</summary>
-</histogram>
-
-<histogram name="Sync.BookmarkStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of bookmark association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ClearServerDataEvents" enum="ClearServerDataEvents">
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    Records events encountered during sync's ClearServerData flow.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureDataTypes" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Breakdown of sync data types being configured at first time signin, restart,
-    or user-initiated reconfiguration. This is different from Sync.CustomTypes
-    in that this captures all active devices, not just those that are choosing a
-    custom sync configuration.
-
-    Note that not all platforms support all data types. As such, comparing
-    across platforms should only look at the common data types.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureFailed" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>Count of model association failures for each type.</summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime.ABORTED" units="ms">
-  <obsolete>
-    Replaced by Sync.ConfigureTime_Long.ABORTED in m21.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration is
-    aborted.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime.OK" units="ms">
-  <obsolete>
-    Replaced by Sync.ConfigureTime_Long.OK in m21.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime.PARTIAL_SUCCESS" units="ms">
-  <obsolete>
-    Replaced by Sync.ConfigureTime_Long.PARTIAL_SUCCESS in m21.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where only some data types
-    succeed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime.UNRECOVERABLE_ERROR" units="ms">
-  <obsolete>
-    Replaced by Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR in m21.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration encounters
-    an unrecoverable error.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime_Long.ABORTED" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration is
-    aborted.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime_Long.OK" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration succeeds.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime_Long.PARTIAL_SUCCESS" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where only some data types
-    succeed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent configuring data types in the case where configuration encounters
-    an unrecoverable error.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConflictFixCircularity">
-  <obsolete>
-    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of times we fix a circularity sync conflict. This is not expected to
-    be hit anymore.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ConflictFixRemovedDirectoriesWithContent">
-  <obsolete>
-    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of times we fix a removed directory with content sync conflict. This
-    is not expected to be hit anymore
-  </summary>
-</histogram>
-
-<histogram name="Sync.CookieJarEmptyOnMismatch" enum="BooleanEmpty">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether the gaia cookie jar was empty. Recorded on every SESSIONS commit
-    where the gaia cookie jar does not include the signed in user (
-    CookieJarMatchOnNavigation == false).
-  </summary>
-</histogram>
-
-<histogram name="Sync.CookieJarMatchOnNavigation" enum="BooleanMatched">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether the gaia cookie jar included the signed in user (matched) or not.
-    Recorded on every SESSIONS commit.
-  </summary>
-</histogram>
-
-<histogram name="Sync.CredentialsLost" enum="BooleanCredentialsLost">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether or not we detected missing credentials during startup.  This may be
-    related to crbug.com/121755.
-  </summary>
-</histogram>
-
-<histogram name="Sync.CryptographerPendingKeys"
-    enum="SyncCryptographerPendingKeysState">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Breakdown of sync users whose cryptographer has pending keys.
-  </summary>
-</histogram>
-
-<histogram name="Sync.CryptographerReady" enum="SyncCryptographerReadyState">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Breakdown of sync users whose cryptographer is fully ready for encryption
-    and decryption (initialized and no pending keys).
-  </summary>
-</histogram>
-
-<histogram name="Sync.CustomEncryption" enum="SyncCustomEncryptionEvent">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Histogram that keeps track of how users encrypt their sync data. All users
-    start off with default encryption during initial setup, while a subset of
-    users go on to encrypt their sync data with a custom passphrase.
-  </summary>
-</histogram>
-
-<histogram name="Sync.CustomPassphrase">
-  <obsolete>
-    Deprecated as of m26.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Boolean histogram for whether a custom passphrase was entered during sync
-    setup. Samples are taken every time sync is (re)configured, and the unique
-    userid count shows how many users entered a custom passphrase.
-  </summary>
-</histogram>
-
-<histogram name="Sync.CustomSync" enum="UserSelectableSyncType">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Samples are taken every time sync is (re)configured, and the unique userid
-    count shows how many users explicitly chose to sync this data type via the
-    &quot;Advanced Sync Preferences&quot; dialog.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DatatypePrefRecovery">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of clients that have fixed themselves up from a datatype preference
-    loss. Clients are not expected to have this happen more than once. This
-    value can be compared to Sync.BackendInitializeRestoreSuccess to determine
-    what percentage of users are still recovering.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DataTypeRunFailures" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Histogram of the run failures for the different sync datatypes. These are
-    failures that occur after startup while the datatype is syncing. Note: Due
-    to an enumeration reordering, pre-M23 labels are inaccurate (see
-    sync/base/model_type.h).
-  </summary>
-</histogram>
-
-<histogram name="Sync.DataTypeStartFailures" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Histogram of the startup failures for the different sync datatypes. These
-    are failures due to missing top level sync nodes or model association Note:
-    Due to an enumeration reordering, pre-M23 labels are inaccurate (see
-    sync/base/model_type.h).
-  </summary>
-</histogram>
-
-<histogram name="Sync.DeviceCount">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The largest number of active syncing devices known to any profile. May be 0
-    when there are no signed in/syncing profiles open.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DeviceIdMismatchDetails" enum="DeviceIdMismatch">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    When signin_scoped_device_id from pref doesn't match the one in
-    DeviceInfoSpecfics this histogram tells if sync or pref copy was empty. This
-    will indicate how often such mismatch happens and what was the state before.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DictionaryAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during dictionary association.</summary>
-</histogram>
-
-<histogram name="Sync.DictionaryConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of dictionary configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.DictionaryStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by DictionaryConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of dictionary association failures.</summary>
-</histogram>
-
-<histogram name="Sync.DirectoryCatastrophicError" enum="BooleanError">
-  <owner>maniscalco@chromium.org</owner>
-  <summary>
-    Whether the Sync Directory encountered a catastrophic error.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DirectoryOpenFailedMac">
-  <obsolete>
-    Deprecated 11/2011. No longer tracked.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Number of failures trying to open the sync database on mac.</summary>
-</histogram>
-
-<histogram name="Sync.DirectoryOpenFailedNotWinMac">
-  <obsolete>
-    Deprecated 11/2011. No longer tracked.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of failures trying to open the sync database on a non-windows non-mac
-    platform.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DirectoryOpenFailedWin">
-  <obsolete>
-    Deprecated 11/2011. No longer tracked.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of failures trying to open the sync database on windows.
-  </summary>
-</histogram>
-
-<histogram name="Sync.DirectoryOpenResult" enum="SyncDirectoryOpenResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Tracks success of failure of sync directory initialization.</summary>
-</histogram>
-
-<histogram name="Sync.EncryptAllData">
-  <obsolete>
-    Deprecated as of m26.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Boolean histogram for whether the &quot;Encrypt all synced data&quot; radio
-    button was selected during sync setup. Samples are taken every time sync is
-    (re)configured, and the unique userid count shows how many users chose to
-    encrypt their sync data.
-  </summary>
-</histogram>
-
-<histogram name="Sync.EventCodes" enum="SyncEventCode">
-  <owner>zea@chromium.org</owner>
-  <summary>A UI event occured.</summary>
-</histogram>
-
-<histogram name="Sync.ExtensionAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during extension association (M18 and earlier were mispelled with
-    this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ExtensionRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of extension run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ExtensionsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during extension association.</summary>
-</histogram>
-
-<histogram name="Sync.ExtensionsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of extension configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.ExtensionSettingsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during extension settings association.</summary>
-</histogram>
-
-<histogram name="Sync.ExtensionSettingsConfigureFailure"
-    enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of extension settings configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ExtensionSettingsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by ExtensionSettingsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of extension settings association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ExtensionsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by ExtensionsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of extension association failures.</summary>
-</histogram>
-
-<histogram name="Sync.ExtensionStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of extension association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ExtraSyncDataCount" units="entries">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    Counts the total number of extra copies of sync data in memory. This count
-    is emitted once, after loading Sync Directory. The count will indicate how
-    many Directory entities fail to share client and server specifics.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconCacheLookupSucceeded" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>Whether a sync favicon cache lookup succeeded or not.</summary>
-</histogram>
-
-<histogram name="Sync.FaviconCount">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Number of synced favicons at initialization time.</summary>
-</histogram>
-
-<histogram name="Sync.FaviconImagesAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during favicon images association.</summary>
-</histogram>
-
-<histogram name="Sync.FaviconImagesConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of favicon images configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconImagesStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by FaviconImagesConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of favicon images association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconsAvailableAtMerge" enum="SyncFaviconsAvailable">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of client that have filled their sync favicon cache and must evict
-    old favicons vs those whose cache is not full.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconTrackingAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during favicon tracking association.</summary>
-</histogram>
-
-<histogram name="Sync.FaviconTrackingConfigureFailure"
-    enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of favicon tracking configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconTrackingStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by FaviconTrackingConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of favicon tracking association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FaviconVisitPeriod" units="hours">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time between updates to a synced favicon's visit time.</summary>
-</histogram>
-
-<histogram name="Sync.FirstBackendInitializeSuccess" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
-    Sync.BackendInitializeFirstTimeSuccess.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization success rate during initial sync setup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FirstSyncDelayByBackup" units="ms">
-  <obsolete>
-    Backup logic has been removed since 02/2016.
-  </obsolete>
-  <owner>haitaol@chromium.org</owner>
-  <summary>First sync delay casued by backing up user data.</summary>
-</histogram>
-
-<histogram name="Sync.FreqApps" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for apps. Used as estimate of datatype commit frequency.
-    Logged when a sync cycle is performed for apps.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqAutofill" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for autofill entries. Used as estimate of datatype
-    commit frequency. Logged when a sync cycle is performed for autofill
-    entries.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqAutofillProfiles" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for autofill profiles. Used as estimate of datatype
-    commit frequency. Logged when a sync cycle is performed for autofill
-    profiles.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqBookmarks" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for bookmarks. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for boomarks.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqDictionary" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for dictionary. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for dictionary.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqExtensions" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for extensions. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for extensions.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqFaviconImages" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for favicon images. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for favicon images.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqFaviconTracking" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for favicon tracking. Used as estimate of datatype
-    commit frequency. Logged when a sync cycle is performed for favicon
-    tracking.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqNigori" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for nigori. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for nigori.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqPasswords" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for passwords. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for passwords.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqPreferences" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for preferences. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for preferences.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqSearchEngines" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for search engines. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for search engines.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqSessions" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for sessions. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for sessions.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqSyncedNotifications" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for synced notifications. Used as estimate of datatype
-    commit frequency. Logged when a sync cycle is performed for synced
-    notifications.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqThemes" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for themes. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for themes.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqTypedUrls" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for typed urls. Used as estimate of datatype commit
-    frequency. Logged when a sync cycle is performed for typed urls.
-  </summary>
-</histogram>
-
-<histogram name="Sync.FreqWifiCredentials" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time between nudges for WiFi credentials. Used as estimate of datatype
-    commit frequency. Logged when a sync cycle is performed for WiFi
-    credentials.
-  </summary>
-</histogram>
-
-<histogram name="Sync.InitialState" enum="SyncInitialState">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>
-    An approximate state of sync at startup. Logs a few reasons sync definitely
-    wouldn't be able to start, or that it probably can start. The user having
-    turned off sync on mobile will be logged as &quot;turned off by user&quot;.
-    A dashboard stop and clear will fall under &quot;turned off and setup not
-    completed&quot;. See the SyncInitialState enum in profile_sync_service.h for
-    more information.
-  </summary>
-</histogram>
-
-<histogram name="Sync.InvalidationSessionsAndroid" enum="BooleanHit">
-  <obsolete>
-    Deprecated as of 5/2016.
-  </obsolete>
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Count of the number of session sync invalidations. The goal of the metric is
-    to track how the number of session sync invalidations changes over time.
-  </summary>
-</histogram>
-
-<histogram name="Sync.KeystoreDecryptionFailed"
-    enum="SyncKeystoreDecryptionFailure">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The reason for a failure decrypting the keystore decryptor token.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Local.Enabled" enum="BooleanEnabled">
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Tracks the number of times the local sync backend was enabled by the user.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Local.FileSize" units="KB">
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>Tracks the size of the local sync backend database file.</summary>
-</histogram>
-
-<histogram name="Sync.Local.RoamingProfileUnavailable" enum="BooleanError">
-  <owner>pastarmovj@chromium.org</owner>
-  <summary>
-    Tracks the number of times the Roaming profile cannot be retrieved.
-  </summary>
-</histogram>
-
-<histogram name="Sync.LocalDataFailedToLoad" enum="SyncModelTypes">
-  <owner>vasilii@chromium.org</owner>
-  <summary>
-    Counts cases when a sync type failed to load the local data during startup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.LocalModelOutOfSync" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Counts instances of out of sync local models detected during startup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.LostNavigationCount" units="navigations">
-  <owner>pnoland@chromium.org</owner>
-  <summary>
-    Counts instances of navigations that are recorded locally but not synced.
-    Recorded once per active tab for every inferred sync cycle. Sync cycles are
-    inferred by examining the is_synced and is_syncing flags of sync directories
-    when recording local changes to tabs or windows. Sync cycles that occur
-    without changes to tabs or windows won't cause this metric to be logged.
-  </summary>
-</histogram>
-
-<histogram name="Sync.MemoryPressureWarningBeforeCleanShutdown" units="count">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    Counts the number of times a user's sync service received a
-    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
-    cleanly. The sync service emits this number the next time the user's sync
-    service is started, which will likely happen the next time the user's
-    profile is opened after a Chrome restart.  This count is emitted once per
-    user/profile. Things like browser crashes that implicitly bring down all
-    users' sync services will cause unclean shutdown tags to appear on all open
-    profiles, meaning that there will be multiple emissions to this histogram as
-    those profiles are re-opened.
-  </summary>
-</histogram>
-
-<histogram name="Sync.MemoryPressureWarningBeforeUncleanShutdown" units="count">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    Counts the number of times a user's sync service received a
-    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
-    uncleanly. The sync service emits this number the next time the user's sync
-    service is started, which will likely happen the next time the user's
-    profile is opened after a Chrome restart.  This count is emitted once per
-    user/profile. Things like browser crashes that implicitly bring down all
-    users' sync services will cause unclean shutdown tags to appear on all open
-    profiles, meaning that there will be multiple emissions to this histogram as
-    those profiles are re-opened.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ModelTypeCount" units="entries">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    Counts the number of entries for each model type in sync DB at startup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ModelTypeStoreInitResult"
-    enum="SyncModelTypeStoreInitResult">
-  <owner>pavely@chromium.org</owner>
-  <summary>
-    Records the result of ModelTypeStoreBackend initialization. Used to analyze
-    frequency and causes of backend initialization failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.NigoriMigrationState" enum="SyncNigoriMigrationState">
-  <owner>zea@chromium.org</owner>
-  <summary>Breakdown of sync's nigori node keystore migration state.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitBookmarksDuration" units="ms">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The client side execution time to check for revisits with bookmarks data.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitBookmarksMatchAge" units="minutes">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Age of bookmark that matches a navigation event, where matching means the
-    urls match. If multiple bookmarks match, the most recently created is used.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitBookmarksMatchTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type to a page that matched a bookmark.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitBookmarksMissTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type to a page that didn't match a bookmark.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitNavigationMatchAge" units="minutes">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Difference in time between finding the match and the creation of the most
-    recent foreign modification of the parent tab. The parent tab's modification
-    will not always be indicative of when the matching navigation occurred.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitNavigationMatchOffset">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The number of navigations forward or backwards the matching noncurrent
-    navigation is from the current navigation in its tab. Negative values
-    represent backwards and positive values represent forwards. Zero should not
-    occur since it would cease to be noncurrent.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitNavigationMatchTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that matched a synced navigation.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitNavigationMissTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that didn't match a synced navigation.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitSessionDuration" units="ms">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The client side execution time to check for revisits with session data.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTabMatchAge" units="minutes">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Difference in time between finding the match and the creation of the most
-    recent foreign modification of the given tab.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTabMatchTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that matched a synced tab.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTabMissTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that didn't match a synced tab.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTypedUrlDuration" units="ms">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    The client side execution time to check for revisits with typed URL data.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTypedUrlMatchAge" units="minutes">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Difference in time between finding the match and the last time this URL was
-    typed on a foreign client.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTypedUrlMatchTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that matched a typed URL.</summary>
-</histogram>
-
-<histogram name="Sync.PageRevisitTypedUrlMissTransition"
-    enum="PageVisitTransitionType">
-  <owner>skym@chromium.org</owner>
-  <summary>Transition type that didn't match a typed URL.</summary>
-</histogram>
-
-<histogram name="Sync.PartiallySyncedTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of partially synced types (those with a progress marker but no
-    initial sync ended bit) that exist at sync startup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.PassphraseDecryptionSucceeded" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>Whether a passphrase decryption attempt succeeded or not.</summary>
-</histogram>
-
-<histogram name="Sync.PassphraseDialogDismissed" enum="SyncPassphraseDismissal">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of how a user dismissed the passphrase dialog.</summary>
-</histogram>
-
-<histogram name="Sync.PassphraseType" enum="SyncPassphraseType">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>The active sync passphrase type at sync startup.</summary>
-</histogram>
-
-<histogram name="Sync.PasswordAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during password association (M18 and earlier were mispelled with
-    this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.PasswordRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of passwords run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.PasswordsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during password association.</summary>
-</histogram>
-
-<histogram name="Sync.PasswordsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of password configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.PasswordsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by PasswordsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of password association failures.</summary>
-</histogram>
-
-<histogram name="Sync.PasswordStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of password association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.PreferenceAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during preference association (M18 and earlier were mispelled
-    with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.PreferenceRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of preferences run failures, used to compare failure rates between
-    data types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.PreferencesAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during preference association.</summary>
-</histogram>
-
-<histogram name="Sync.PreferencesConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of preference configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.PreferencesStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by PreferencesConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of preference association failures.</summary>
-</histogram>
-
-<histogram name="Sync.PreferenceStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of preference association failures (M18 and earlier
-    were mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ReauthorizationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken from startup for the user to reauthorize.</summary>
-</histogram>
-
-<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 04/2016 as not useful since it always logged true.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether OAuth2 refresh token was available at the time when
-    ProfileSyncService was starting backend.
-  </summary>
-</histogram>
-
-<histogram name="Sync.RequestContentLength.Compressed" units="bytes">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    The request content size for a single HTTP/HTTPS call from sync client to
-    server. The content is compressed by gzip.
-  </summary>
-</histogram>
-
-<histogram name="Sync.RequestContentLength.Original" units="bytes">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    The original request content size for a single HTTP/HTTPS call from sync
-    client to server. It is the size before content got compressed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ResolveConflict" enum="SyncConflictResolutions">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>
-    Enumeration of types of conflict resolutions. Recorded every time a conflict
-    is resolved for a data type that has been converted to USS.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ResolveSimpleConflict"
-    enum="SyncSimpleConflictResolutions">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of simple conflict resolutions.</summary>
-</histogram>
-
-<histogram name="Sync.ResponseContentLength.Compressed" units="bytes">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    The response content size for a single HTTP/HTTPS call from sync server to
-    client. The content is compressed by gzip.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ResponseContentLength.Original" units="bytes">
-  <owner>gangwu@chromium.org</owner>
-  <summary>
-    The original response content size for a single HTTP/HTTPS call from sync
-    server and client. It is the size after content got uncompressed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.RestoreBackendInitializeSucess" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
-    Sync.BackendInitializeRestoreSuccess.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Tracks sync backend initialization success rate in cases where sync was
-    previously initialized.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SearchEngineAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during search engine association (M18 and earlier were mispelled
-    with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SearchEngineRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of search engine run failures, used to compare failure rates between
-    data types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SearchEnginesAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during search engine association.</summary>
-</histogram>
-
-<histogram name="Sync.SearchEnginesConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of search engine configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SearchEnginesStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by SearchEnginesConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of search engine association failures.</summary>
-</histogram>
-
-<histogram name="Sync.SearchEngineStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of search engine association failures (M18 and earlier
-    were mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ServiceInitialConfigureTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent on first-time configure.  May include time spent on retries.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ServiceSubsequentConfigureTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent on non-first-time configure.  May include time spent on retries.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during session association (M18 and earlier were mispelled with
-    this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of sessions run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during session association.</summary>
-</histogram>
-
-<histogram name="Sync.SessionsBadForeignHashOnMergeCount"
-    units="Sessions Entries">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Number of foreign sessions entries detected with bad client tag hash value
-    during MergeDataAndStartSyncing. These will be immediately deleted. The
-    overwhelming majority of clients should report a value of 0 upon startup.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of session configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.SessionsRefreshDelay" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Delay from the time chrome://history is loaded until the other devices'
-    sessions data became available.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by SessionsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of session association failures.</summary>
-</histogram>
-
-<histogram name="Sync.SessionStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of session association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionTabs" units="tabs">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    For each Chrome window, records the number of tabs present at the time Sync
-    associates the SESSIONS datatype.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SessionWindows" units="windows">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The number of windows present within Chrome at the time Sync associates the
-    SESSIONS datatype.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Shutdown.BackendDestroyedTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken from the start of sync shutdown (in ProfileSyncService) until the
-    backend (SyncEngine) is fully destroyed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Shutdown.StopRegistrarTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Amount of time the UI thread waits (at shutdown) to stop the
-    SyncBackendRegistrar.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Shutdown.StopSyncThreadTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Amount of time the UI thread waits (at shutdown) to stop the sync thread.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Startup.DeferredInitTrigger"
-    enum="SyncDeferredInitTrigger">
-  <owner>zea@chromium.org</owner>
-  <summary>The type of event that triggered sync initialization.</summary>
-</histogram>
-
-<histogram name="Sync.Startup.TimeDeferred" units="ms">
-  <obsolete>
-    Deprecated, see TimeDeferred2.
-  </obsolete>
-  <owner>jeremy@chromium.org</owner>
-  <owner>zea@google.com</owner>
-  <summary>
-    Time spent after ProfileSyncService *creation* but before SyncEngine
-    initialization.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Startup.TimeDeferred2" units="ms">
-  <owner>zea@google.com</owner>
-  <summary>
-    Time spent after ProfileSyncService *creation* but before SyncEngine
-    initialization.
-  </summary>
-</histogram>
-
-<histogram name="Sync.Startup.TypeTriggeringInit" enum="SyncModelTypes">
-  <owner>zea@chromium.org</owner>
-  <summary>Data type that first requests sync initialization.</summary>
-</histogram>
-
-<histogram name="Sync.StopSource" enum="SyncStopSource">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>
-    Tracks how sync was turned off. Logged every time sync is told to stop
-    permanently by the user (e.g. it won't come back on by itself).
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncAuthError" enum="SyncAuthError">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Counts the number of times sync clients have encountered an auth error and
-    number of times auth errors are fixed.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncedNotificationsAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during synced notifications association.</summary>
-</histogram>
-
-<histogram name="Sync.SyncedNotificationsConfigureFailure"
-    enum="SyncConfigureResult">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of synced notifications configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncedNotificationsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Deprecated in M53. Replaced by SyncedNotificationsConfigureFailure. See
-    crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of synced notifications association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncerConflictStuck">
-  <obsolete>
-    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Number of times the sync conflict resolver gets stuck. This is not expected
-    to be hit anymore.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncErrorInfobarDisplayed" enum="SyncErrorInfobarTypes">
-  <owner>droger@chromium.org</owner>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of error conditions that displays an infobar to the user.
-  </summary>
-</histogram>
-
-<histogram name="Sync.SyncEverything">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Boolean histogram for whether the &quot;Sync Everything&quot; option was
-    selected during sync setup. Samples are taken every time sync is
-    (re)configured, and the unique userid count shows how many users chose to
-    sync all available data types.
-  </summary>
-</histogram>
-
-<histogram name="Sync.ThemeAssociationTime" units="ms">
-  <obsolete>
-    Deprecated as of m19
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during theme association (M18 and earlier were mispelled with
-    this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ThemeRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of theme run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.ThemesAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during theme association.</summary>
-</histogram>
-
-<histogram name="Sync.ThemesConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of theme configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.ThemesStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by ThemesConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of theme association failures.</summary>
-</histogram>
-
-<histogram name="Sync.ThemeStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of theme association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time taken during typed url association (M18 and earlier were mispelled with
-    this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlChangeProcessorErrors" units="%">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The percentage of history DB operations initiated by the typed URL change
-    processor that return an error. The cumulative count for the current sync
-    session is logged after every typed URL change.
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlMergeAndStartSyncingErrors" units="%">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The percentage of history DB operations during merge data that return an
-    error. This is logged at the end of typed URL merge data, which happens once
-    each time sync starts up.
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlModelAssociationErrors" units="%">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The percentage of history DB operations during model association that return
-    an error. This is logged at the end of typed URL model association, which
-    happens once each time sync starts up.
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlRunFailures">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Count of typed url run failures, used to compare failure rates between data
-    types for a particular profile (see other Sync*RunFailures histograms).
-  </summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlsAssociationTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during typed url association.</summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlsConfigureFailure" enum="SyncConfigureResult">
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of typed url configuration failures.</summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by TypedUrlsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Enumeration of types of typed url association failures.</summary>
-</histogram>
-
-<histogram name="Sync.TypedUrlStartFailures" enum="SyncStartResult">
-  <obsolete>
-    Deprecated as of m19.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of typed url association failures (M18 and earlier were
-    mispelled with this histogram).
-  </summary>
-</histogram>
-
-<histogram name="Sync.UnrecoverableErrors" enum="SyncUnrecoverableErrorReason">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of the different reasons for unrecoverable errors and how often
-    they have occurred.
-  </summary>
-</histogram>
-
-<histogram name="Sync.URLFetchResponse"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Counts of responses (both http code and net error code) for Sync URL
-    fetches.
-  </summary>
-</histogram>
-
-<histogram name="Sync.URLFetchTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time spent waiting for a sync cycle to complete the url fetch.
-  </summary>
-</histogram>
-
-<histogram name="Sync.URLFetchTimedOut" enum="BooleanTimedOut">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether a url fetch timed out or not. Timing out implies the fetch was
-    stalled for an unknown reason.
-  </summary>
-</histogram>
-
-<histogram name="Sync.UserPerceivedAuthorizationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time the user spends looking at the authorization dialog.</summary>
-</histogram>
-
-<histogram name="Sync.UserPerceivedBookmarkAssociation">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during bookmark association.</summary>
-</histogram>
-
-<histogram name="Sync.USSLoadModelsTime" units="ms">
-  <owner>pavely@chromium.org</owner>
-  <summary>Time it took sync to load models for USS datatypes.</summary>
-</histogram>
-
-<histogram name="Sync.USSMigrationFailure" enum="SyncModelTypes">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>Counts directory to USS migration failures per model type.</summary>
-</histogram>
-
-<histogram name="Sync.USSMigrationSuccess" enum="SyncModelTypes">
-  <owner>maxbogue@chromium.org</owner>
-  <summary>Counts directory to USS migration successes per model type.</summary>
-</histogram>
-
-<histogram name="Sync.WifiCredentialsAssociationTime" units="ms">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>Time taken during WiFi credentials association.</summary>
-</histogram>
-
-<histogram name="Sync.WifiCredentialsConfigureFailure"
-    enum="SyncConfigureResult">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of WiFi credentials configuration failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.WifiCredentialsStartFailure" enum="SyncStartResult">
-  <obsolete>
-    Replaced by WifiCredentialsConfigureFailure. See crbug.com/478226.
-  </obsolete>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Enumeration of types of WiFi credentials association failures.
-  </summary>
-</histogram>
-
-<histogram name="Sync.WorkerApplyHasEncryptedUpdates" enum="Boolean">
-  <owner>skym@chromium.org</owner>
-  <summary>
-    Whether there are still encrypted updates that the cryptographer cannot
-    decrypt during ApplyUpdates in the ModelTypeWorker (USS Only). Emitting true
-    is an invalid state that hopefully never happens, as it is a potential data
-    loss scenario.
-  </summary>
-</histogram>
-
-<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds">
-  <owner>skym@chromium.org</owner>
-  <summary>Upon NTP load, the age of the youngest synced foreign tab.</summary>
-</histogram>
-
-<histogram name="SyncedNotifications.Actions"
-    enum="SyncedNotificationActionType">
-  <obsolete>
-    Deprecated in M53.
-  </obsolete>
-  <owner>petewil@chromium.org</owner>
-  <owner>zea@chromium.org</owner>
-  <summary>
-    The actions taken on synced notifications, recorded every time they happen.
-    This histogram will record every single event that happens separately.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.ConflictResolutionPolicy"
-    enum="SyncFSConflictResolutionPolicy">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Overridden conflict resolution policy of Sync FileSystem API. Recorded for
-    each API call to override the policy.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.Database.Open" enum="LevelDBStatus">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of opening the Sync FileSystem backend database.</summary>
-</histogram>
-
-<histogram name="SyncFileSystem.MetadataNumber">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The number of cached backing remote file metadata in the Sync FileSystem
-    database. Recorded at the initialization phase of Sync FileSystem.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.RegisteredAppNumber">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The number of Chrome Apps that uses Sync FileSystem with V2 backend.
-    Recorded at the initialization phase of Sync FileSystem.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.RegisterOriginResult"
-    enum="SyncFSRemoteServiceState">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The result of the registration of Chrome App to Sync FileSystem.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.RegisterOriginTime" units="ms">
-  <owner>peria@chromium.org</owner>
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Time elapsed to register a Chrome App to SyncFilesystem. Recorded for each
-    registration request by apps.
-  </summary>
-</histogram>
-
-<histogram name="SyncFileSystem.TrackerDB.Open" enum="LevelDBStatus">
-  <owner>tzik@chromium.org</owner>
-  <summary>The result of opening the Sync FileSystem tracker database.</summary>
-</histogram>
-
-<histogram name="SyncFileSystem.TrackerNumber">
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The number of the directory tree node that maps backing files to local files
-    in the Sync FileSystem database. Recorded at the initialization phase of
-    SyncFileSystem.
-  </summary>
-</histogram>
-
-<histogram name="SyncPromo.NTPPromo" enum="SyncPromoAction">
-  <owner>dbeam@chromium.org</owner>
-  <summary>
-    Shows actions taken on the &quot;Not signed in? You're misssing out&quot;
-    link on the top right of chrome://apps. Logged once per visit of
-    chrome://apps as well as on each click of the sync promo.
-  </summary>
-</histogram>
-
-<histogram name="Syzyasan.DeferredFreeWasEnabled" enum="BooleanEnabled">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Record whether the deferred free mechanism was successfully enabled or not.
-    This is only recorded in syzyasan builds with the feature enabled.
-  </summary>
-</histogram>
-
-<histogram name="Tab.AgeUponRestoreFromColdStart" units="minutes">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Age (time since the last display in previous sessions) of a tab being
-    restored due to the first tab switch after the browser cold start, recorded
-    upon such restore. When the browser is started from cold, this metric is not
-    recorded for the foreground, automatically restored tab, so that the metric
-    tracks only the restores triggered by direct user decision to switch tabs.
-  </summary>
-</histogram>
-
-<histogram name="Tab.AndroidCrashUpload" enum="BooleanSuccess">
-  <owner>hzl@google.com</owner>
-  <summary>Count of upload success/failures by crash type.</summary>
-</histogram>
-
-<histogram name="Tab.BackgroundLoadStatus" enum="TabBackgroundLoadStatus">
-  <owner>ppi@chromium.org</owner>
-  <summary>
-    Mobile-specific metric: when a tab that was opened in background (via
-    &quot;Open link in new tab&quot;) is switched to, we record whether the
-    eagerly loaded tab was still memory resident, or we lost the loaded page due
-    to memory pressure.
-  </summary>
-</histogram>
-
-<histogram name="Tab.BackgroundTabShown" enum="BooleanShown">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Whether a tab which was opened in the background (e.g. via &quot;Open link
-    in new tab&quot;) is foregrounded prior to being closed.
-  </summary>
-</histogram>
-
-<histogram name="Tab.BackgroundTabsOpenedViaContextMenuCount">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Counts the number of background tabs opened via the context menu per page
-    URL. The count is reset on each navigation of the parent tab. Zero counts
-    are not recorded.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Close" units="ms">
-  <summary>
-    Time in milliseconds from trying to close the tab to actually closing it.
-    Includes time that's spent in JS OnUnload handlers.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Close.UnloadTime" units="ms">
-  <summary>
-    Time in milliseconds from when JS OnUnload handlers have finished to
-    actually closing tab. Doesn't include time that's spent in JS OnUnload
-    handlers. If there are no UnLoad handlers, should be idential to Tab.Close.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Deactivation.Bookmarked" enum="Boolean">
-  <obsolete>
-    Deprecated 11/2016. No longer useful after finding out that it has no effect
-    on tab reactivation rates.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was deactivated. Closing tabs are not included. This histogram also
-    records if the tab's URL was bookmarked.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Deactivation.HadFormInteraction" enum="Boolean">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was deactivated. Closing tabs are not included. This histogram also
-    records if the tab had any form interaction.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Deactivation.Pinned" enum="Boolean">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was deactivated. Closing tabs are not included. This histogram also
-    records if the tab was pinned to the tab strip or not.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Discarding" enum="TabDiscardingEvents">
-  <obsolete>
-    Deprecated 10/2015, not needed anymore.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Metric to track counts of actions related to tab discarding. Namely, we get
-    an event for every tab switch, split into two groups, whether it was a
-    discarded tab not. We also get an event whenever a tab gets discarded as
-    well as when a tab that's playing audio gets discarded.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Discarding.DiscardCount" units="Discards">
-  <obsolete>
-    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
-  </obsolete>
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Metric to track the number of discards tabs have gone through. Each time a
-    tab is discarded, this histogram is recorded. Therefore, this metric is
-    cumulative, ie. as a tab gets discarded over and over, it gets a hit in each
-    bin (1, 2, 3...).
-  </summary>
-</histogram>
-
-<histogram name="Tab.EvictedTabWasActive" enum="Boolean">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    [iOS] When switching to an evicted tab, this histogram records whether or
-    not the tab had ever been active. For example, the tab was opened via
-    &quot;Open in new tab&quot; but evicted before being viewed for the first
-    time.
-  </summary>
-</histogram>
-
-<histogram name="Tab.FormActivityCountEvictedHistogram">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    A count of form activity (e.g. fields selected, characters typed) in a tab.
-    Recorded only for tabs that are evicted due to memory pressure and then
-    selected again.
-  </summary>
-</histogram>
-
-<histogram name="Tab.LostTabAgeWhenSwitchedToForeground" units="ms">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    [Android] When a tab that was opened in the background (e.g. via &quot;Open
-    link in new tab&quot;) is evicted prior to the first time that it is shown,
-    we record the tab's age at the time that the tab is shown.
-  </summary>
-</histogram>
-
-<histogram name="Tab.NewTab" enum="NewTabType">
-  <owner>lliabraa@chromium.org</owner>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    Tracks the different ways users are opening new tabs. Does not apply to
-    opening existing links or searches in a new tab, only to brand new empty
-    tabs. Note: Currently the &quot;Regular menu option&quot; includes some
-    programmatic actions in addition to user actions.
-  </summary>
-</histogram>
-
-<histogram name="Tab.NewTabDOMContentLoaded" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The time for the new tab page to fire the &quot;DOMContentLoaded&quot;
-    event.
-  </summary>
-</histogram>
-
-<histogram name="Tab.NewTabOnload" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The time for the new tab page to fire the &quot;load&quot; event. Note: This
-    is usually recorded with a suffix (.Local/Google/Other). The base version is
-    recorded only on Android, as well as for the old NTP (&quot;NTP4&quot;) on
-    other platforms.
-  </summary>
-</histogram>
-
-<histogram name="Tab.NewTabScriptStart" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <owner>beaudoin@chromium.org</owner>
-  <summary>
-    The time for the new tab page to start executing JavaScript.
-  </summary>
-</histogram>
-
-<histogram name="Tab.PerceivedRestoreTime" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    User-perceived load time for a successful tab restore, measured from the
-    first time the user sees the tab being restored until the load completes.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Reactivation.Bookmarked" enum="Boolean">
-  <obsolete>
-    Deprecated 11/2016. No longer useful after finding out that it has no effect
-    on tab reactivation rates.
-  </obsolete>
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was reactivated after being hidden. This histogram also records if the
-    tab's URL was bookmarked.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Reactivation.HadFormInteraction" enum="Boolean">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was reactivated after being hidden. This histogram also records if the
-    tab had any form interaction.
-  </summary>
-</histogram>
-
-<histogram name="Tab.Reactivation.Pinned" enum="Boolean">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    A tab was reactivated after being hidden. This histogram also records if the
-    tab was pinned to the tab strip.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RendererCrashStatus" enum="TabRendererCrashStatus">
-  <owner>jaekyun@chromium.org</owner>
-  <summary>
-    The status of a tab and an application when a renderer crashes. This is
-    recorded only for Android when a renderer crashes.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RendererDetailedExitStatus"
-    enum="ProcessDetailedExitStatus">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Breakdown of renderer exit status for renderers that have strong bindings.
-    An extension of the counts in Tab.RendererExitStatus. Only recorded on
-    Android.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RendererDetailedExitStatusUnbound"
-    enum="ProcessDetailedExitStatus">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Breakdown of renderer exit status for renderers that do not have strong
-    bindings. An extension of the counts in Tab.RendererExitStatus. Only
-    recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RendererExitStatus" enum="TabRendererExitStatus">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    The status of a renderer when the browser notices that the process has
-    exited. Only recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RestoreResult" enum="TabRestoreResult">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    When the browser restores a tab, whether the load was successful. Loads can
-    fail for instance when there is no connectivity.
-  </summary>
-</histogram>
-
-<histogram name="Tab.RestoreTime" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>Load time for a successful tab restore.</summary>
-</histogram>
-
-<histogram name="Tab.RestoreUserPersistence" enum="TabRestoreUserAction">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    When the browser restores a tab, whether the user waits for completion of
-    the load or if the user gives up by switching to another tab or leaving
-    Chrome.
-  </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    The status of a tab collected each time the tab is displayed on Android,
-    including user switching to the tab and displays of newly created tabs, such
-    as NTP or tabs opened to handle intents.
-  </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    The status of a tab collected each time the user switches to it on mobile.
-    That does not include tabs being created at the time the user switches to
-    them, such as NTP or tabs opened to handle intents.
-  </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenSwitchedBackToForegroundDataProxyEnabled"
-    enum="TabStatus">
-  <owner>lliabraa@chromium.org</owner>
-  <owner>marq@chromium.org</owner>
-  <summary>
-    The status of a tab collected each time the user switches to it on mobile
-    with the data reduction proxy enabled. This is populated identically, and in
-    addition to Tab.StatusWhenSwitchedBackToForeground for any given tab
-    switching event if the proxy is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundAge" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>Age (in ms) when the tab was switched to foreground.</summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundLaunchedWithURL"
-    enum="TabSwitchedToForegroundLaunchedWithURL">
-  <obsolete>
-    Deprecated as of 04/2014.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Each time a tab is brought to the foreground, this histogram indicates if
-    chrome was launched without an URL (i.e., from the launcher), or with an URL
-    (i.e., from another app).
-  </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundMRURank">
-  <obsolete>
-    Deprecated as of 04/2014.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Rank in MRU order (0 being first) when the tab was switched to foreground.
-  </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundNumTabs">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>Count of all tabs when a tab is switched.</summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundRevisit"
-    enum="TabSwitchedToForegroundRevisit">
-  <obsolete>
-    Deprecated as of 04/2014.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Each time a tab is brought to the foreground, this histogram indicates if
-    this is the first viewing of the tab since Chrome was put into foreground,
-    or if it was a return to a tab that has already been shown in this session.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TimeSinceActive" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    [iOS] When an existing tab becomes active, this histogram records the time
-    since it was made inactive.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TimeSinceActiveEvicted" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    [iOS] When an evicted tab becomes active, this histogram records the time
-    since it was made inactive.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TimeSinceFormActivityEvictedHistogram" units="ms">
-  <obsolete>
-    Deprecated as of 10/2016.
-  </obsolete>
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Time elapsed since there was form activity (e.g. fields selected, characters
-    typed) in a tab. Recorded only for tabs that are evicted due to memory
-    pressure and then selected again.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TimeToReactivation.Important" units="ms">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The time elapsed from the moment a tab was deactivated until it was
-    reactivated. Only recorded for tabs that are pinned or had form interaction.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TimeToReactivation.Normal" units="ms">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    The time elapsed from the moment a tab was deactivated until it was
-    reactivated. Only recorded for tabs that are not pinned nor had form
-    interaction.
-  </summary>
-</histogram>
-
-<histogram name="Tab.TotalTabCount.BeforeLeavingApp" units="tabs">
-  <owner>jaekyun@chromium.org</owner>
-  <summary>
-    The total count of tabs which were kept while Chrome process is in the
-    foreground. This is recorded only for Android right before Chrome process
-    goes into the background.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.DiscardCount" units="Discards">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Cumulative number of tabs discarded due to low memory conditions, recorded
-    once per tab discard event.  For example, a user who had 3 tabs discarded
-    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
-    number of sessions where users experienced N or more tab discard events.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.DiscardedEngagementScore">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Site engagement score of a discarded tab. Recorded for each discard if the
-    score is available.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.DiscardedTabHasBeforeUnloadHandler"
-    enum="Boolean">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Recorded for each discarding, allowing us to know whether the discarded tab
-    had a before unload handler or not.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Elapsed time between a tab getting discarded to eventually being reloaded by
-    the user.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Elapsed time between the time a tab switched from being active to inactive
-    (that eventually gets discarded) until it gets reloaded.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.ReloadCount" units="Reloads">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Cumulative number of discarded tabs that have been reloaded by the user,
-    recorded once per tab discard event. For example, a user who had 3 tabs
-    reloaded records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is
-    the number of sessions where users experienced N or more tab reload events.
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.ReloadedEngagementScore">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Site engagement score of a reloaded tab. Recorded for each reload if the
-    score is available. Note that this will be the same score the tab had when
-    discarded (which could have changed by the time it gets reloaded).
-  </summary>
-</histogram>
-
-<histogram name="TabManager.Discarding.ReloadToCloseTime" units="ms">
-  <owner>georgesak@chromium.org</owner>
-  <summary>
-    Elapsed time between the last time a discarded tab was reloaded and the time
-    it gets closed.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.CountAtResume" units="tabs">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    The number of tabs open when the app comes out of the background.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.CountAtStartup" units="tabs">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>The number of tabs open at cold launch.</summary>
-</histogram>
-
-<histogram name="Tabs.Discard.DiscardCount">
-  <obsolete>
-    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
-  </obsolete>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of tabs discarded due to low memory conditions, recorded
-    once per tab discard event.  For example, a user who had 3 tabs discarded
-    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
-    number of sessions where users experienced N or more tab discard events.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.DiscardInLastMinute" enum="BooleanTabDiscard">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Whether or not a tab was discarded in the last minute of usage. Total count
-    is number of minutes of device usage. 100 / discard percentage gives the
-    average number of minutes between discard events.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.InitialTime" units="seconds">
-  <obsolete>
-    Deprecated May 4, 2012.  Replaced by Tabs.Discard.InitialTime2 because this
-    stat had too low of a range maximum.  No longer tracked.
-  </obsolete>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Time in seconds between system startup and when the first tab is discarded
-    due to low memory conditions.  Higher is better.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.InitialTime2" units="seconds">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Time in seconds between system startup and when the first tab is discarded
-    due to low memory conditions.  Higher is better.  Range maximum is
-    approximately one day.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.IntervalTime" units="seconds">
-  <obsolete>
-    Deprecated May 4, 2012.  Replaced by Tabs.Discard.IntervalTime2 because this
-    stat had too low of a range maximum.  No longer tracked.
-  </obsolete>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Time in seconds between tab discard events after the first one, recorded
-    once per discard event.  Higher is better.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.IntervalTime2" units="ms">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Time in milliseconds between tab discard events after the first one,
-    recorded once per discard event.  Should occur no faster than once every 750
-    ms.  Higher is better.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.MemAllocatedMB" units="MB">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    System-wide memory allocation at the time a tab was discarded, roughly
-    equivalent to the sum of memory allocated with malloc() in userspace plus
-    graphics driver memory.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.MemAnonymousMB" units="MB">
-  <obsolete>
-    Deprecated December 7, 2012.  Replaced by Tabs.Discard.MemAllocatedMB
-    because this stat has insufficient precision in the 2-4 GB range and does
-    not properly account for graphics memory on ARM.
-  </obsolete>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    System-wide anonymous memory allocation at the time a tab was discarded,
-    roughly equivalent to memory allocated with malloc().
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.MemAvailableMB" units="MB">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    System-wide file-backed memory plus free memory, roughly equivalent to what
-    the kernel uses to trigger low-memory notifications for tab discards. If
-    lower than the kernel's threshold then we are not effectively freeing memory
-    in response to the initial notification and are repeatedly being notified.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.MemGraphicsMB" units="MB">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Graphics driver (GEM object) memory at the time of a tab discard.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.MemShmemMB" units="MB">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    System-wide shared memory at the time of a tab discard. Used primarily for
-    shared buffers in the graphics system. Tracked because it's a historical
-    source of leaks on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.ReloadCount">
-  <obsolete>
-    Deprecated 10/2015, and replaced by TabManager.Discarding.ReloadCount.
-  </obsolete>
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab was reloaded because it was discarded and
-    the user clicked on it later, recorded once per reload event.  For example,
-    a user who clicks on 3 discarded tabs will record a count in the 1 bin, 2
-    bin, and 3 bin.  Thus each bin N is the number of sessions where users
-    experienced N or more reload events.  Compare to Tabs.Discard.DiscardCount.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.Discard.TabCount" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    The number of tabs open across all browser windows when a tab was discarded
-    due to low memory conditions.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.FineTiming.TimeBetweenTabClosedAndNextTabCreated"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between closing a tab and opening another, to
-    track very frequent tabs.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndNextTabCreated"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between opening a tab and opening another, to
-    track very frequent tabs.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndSameTabClosed"
-    units="ms">
-  <owner>joenotcharles@chromium.org</owner>
-  <summary>
-    Fine-grained (in msec) time between opening a tab and closing it, to track
-    very short-lived tabs.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.FirstSwitchedToForegroundCreationRank">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Records the &quot;Tab Creation Rank&quot; for the first background tab which
-    was switched to the foreground. The &quot;Tab Creation Rank&quot; is
-    relative to other background tabs which were opened from the same URL via
-    the context menu. The oldest background tab has a rank of zero.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.FirstSwitchedToForegroundCreationReverseRank">
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    Records the &quot;Reverse Tab Creation Rank&quot; for the first background
-    background tab which was switched to the foreground. The &quot;Reverse Tab
-    Creation Rank&quot; is relative to other background tabs which were opened
-    from the same URL via the context menu. The newest background tab has a
-    &quot;Reverse Tab Creation Rank&quot; of zero.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.ForegroundTabAgeAtStartup" units="minutes">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Age (time since the last display in previous sessions) of the foreground tab
-    being restored on the browser cold start.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.iOS_PostRedirectPLT" units="ms">
-  <owner>pauljensen@chromium.org</owner>
-  <summary>
-    Page load time (PLT) for iOS that does not include time spent following
-    redirects. On other platforms this is calculated from Navigation Timings but
-    on iOS Navigation Timings are not available so we're recreating a
-    calculation similar to PLT.PT_RequestToFinish but not including time spent
-    following redirects. This metric represents the time between when navigation
-    is initiated (prior to DNS, TCP connect, etc but after following redirects)
-    until loading ends (i.e. JS onload event). On non-iOS Chrome this is
-    (performance.timing.loadEventEnd - performance.timing.redirectEnd). On
-    Chrome for iOS we're calculating the time between the creation of the
-    top-level URLRequest and when webDidFinishWithURL is called.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.CrashCreated" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
-    recorded once per tab crash event.  For example, a user who crashed 3 tabs
-    will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
-    number of sessions where users experienced N or more crash events.  The user
-    may not have actually seen the sad tab page, as it might have been an
-    inactive tab. Compare to Tabs.SadTab.CrashDisplayed.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.CrashDisplayed" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot; and the
-    user saw the page, recorded once per tab crash event.  For example, a user
-    who crashed 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus
-    each bin N is the number of sessions where users experienced N or more crash
-    events.  Compare to Tabs.SadTab.CrashCreated.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent">
-  <owner>sdy@chromium.org</owner>
-  <summary>
-    Counts of events from the style of sad tab which has a feedback button as
-    its primary action. Currently, events include being displayed (actually
-    visible in a window), and the actions a user can take on the page.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.KillCreated" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab was killed with a &quot;He's dead,
-    Jim!&quot; page, which is usually due to the renderer being killed, recorded
-    once per tab kill event.  For example, a user who loses 3 tabs will record a
-    count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of
-    sessions where users experienced N or more kill events.  The user may not
-    have actually seen the sad tab page, as it might have been an inactive tab.
-    Compare to Tabs.SadTab.KillDisplayed. This can happen due to out of memory,
-    malformed IPC messages, or a SIGINT/TERM/KILL signal sent by a user.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.KillCreated.OOM" units="tabs">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab was killed with a &quot;He's dead,
-    Jim!&quot; page due to the kernel out-of-memory killer, recorded once per
-    tab kill event.  For example, a user who loses 3 tabs will record a count in
-    the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions
-    where users experienced N or more kill events.  The user may not have
-    actually seen the sad tab page, as it might have been an inactive tab.
-    Compare to Tabs.SadTab.KillDisplayed.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.KillDisplayed" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab was killed with a &quot;He's dead,
-    Jim!&quot; page and the user saw the page, recorded once per tab kill event.
-    For example, a user who loses 3 tabs will record a count in the 1 bin, 2
-    bin, and 3 bin. Thus each bin N is the number of sessions where users
-    experienced N or more kill events.  Compare to Tabs.SadTab.CrashCreated.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.KillDisplayed.OOM" units="tabs">
-  <owner>oshima@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab was killed with a &quot;He's dead,
-    Jim!&quot; page due to the kernel out-of-memory killer and the user saw the
-    page, recorded once per tab kill event.  For example, a user who loses 3
-    tabs will record a count in the 1 bin, 2 bin, and 3 bin. Thus each bin N is
-    the number of sessions where users experienced N or more kill events.
-    Compare to Tabs.SadTab.CrashCreated.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.OomCreated" units="tabs">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
-    recorded once per tab oom event.  For example, a user who ran out of memory
-    in 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin
-    N is the number of sessions where users experienced N or more oom events.
-    The user may not have actually seen the sad tab page, as it might have been
-    an inactive tab. Compare to Tabs.SadTab.OomDisplayed.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.OomDisplayed" units="tabs">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Cumulative number of times a tab ran out of memory with &quot;Aw,
-    Snap!&quot; and the user saw the page, recorded once per tab oom event.  For
-    example, a user who ran out of memory in 3 tabs will record a count in the 1
-    bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions where
-    users experienced N or more oom events.  Compare to Tabs.SadTab.OomCreated.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent">
-  <owner>sdy@chromium.org</owner>
-  <summary>
-    Counts of events from the style of sad tab which has a reload button as its
-    primary action. Compare to Tabs.SadTab.Feedback.Event.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SadTab.ReloadCount" units="tabs">
-  <owner>jamescook@chromium.org</owner>
-  <summary>
-    The number of times a tab was reloaded because it was killed (usually by the
-    kernel OOM killer) and the user clicked on it later, recorded once per
-    reload event.  For example, a user who clicks on 3 discarded tabs will
-    record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
-    number of sessions where users experienced N or more reload events.  Compare
-    to Tabs.Discard.DiscardCount.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.ScrubDistance" units="tabs">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The distance a user 3 finger scrubbed to change tabs. Always positive
-    (ignores left / right).
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreApplicability"
-    enum="SpeculativeRestoreApplicability">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Applicability of speculative tab restore, recorded every time a tab is
-    switched. This allows to estimate the fraction of tab restores experienced
-    on mobile that can be mitigated using speculative restore. Options higher in
-    the enum take precedence over the lower ones (i.e. low-memory tablet will be
-    accounted as tablet).
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.SideSwipe"
-    enum="SpeculativeRestorePredictionAccuracy">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Accuracy of the tab switch predictions made when the user begins the side
-    swipe gesture.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.TabSwitcher"
-    enum="SpeculativeRestorePredictionAccuracy">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Accuracy of the tab switch predictions made when the user enters the tab
-    switcher.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTargetStatus"
-    enum="SpeculativeRestoreTabStatus">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Status of a tab recorded when the tab is targeted with speculative restore.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Time between starting the speculative load and actual tab switch for correct
-    speculative load predictions made when the user begins the side swipe
-    gesture.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms">
-  <owner>lliabraa@chromium.org</owner>
-  <summary>
-    Time between starting the speculative load and actual tab switch for correct
-    speculative load predictions made when the user enters the tab switcher.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.StateTransfer.NumberOfOtherTabsActivatedBeforeMadeActive"
-    units="tabs">
-  <owner>kouhei@chromium.org</owner>
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Recorded once per tab activation. The number of tabs that were activated
-    while the tab was inactive.
-  </summary>
-  <details>
-    This metric is to be removed after M46 hits stable. We don't expect this
-    metric to change over release, so we will remove this once we have the
-    numbers from stable.
-  </details>
-</histogram>
-
-<histogram name="Tabs.StateTransfer.TabDistanceInactiveToActive" units="tabs">
-  <owner>kouhei@chromium.org</owner>
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Number of tabs between the previously active tab and the new active tab.
-  </summary>
-  <details>
-    This metric is to be removed after M46 hits stable. We don't expect this
-    metric to change over release, so we will remove this once we have the
-    numbers from stable.
-  </details>
-</histogram>
-
-<histogram name="Tabs.StateTransfer.Target" enum="TabStripState">
-  <owner>kouhei@chromium.org</owner>
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    The state to which a tab transitioned. Recorded when a tab transitions from
-    the state in the histogram name to a new state.
-  </summary>
-  <details>
-    kouhei@ and tzik@ will remove some variation of these once M46 hits stable.
-  </details>
-</histogram>
-
-<histogram name="Tabs.StateTransfer.Time" units="ms">
-  <owner>kouhei@chromium.org</owner>
-  <owner>tzik@chromium.org</owner>
-  <summary>
-    Tabs.StateTransfer.TimeA_B measures the time a tab was in state A before it
-    transferred to state B.
-  </summary>
-  <details>
-    kouhei@ and tzik@ will remove some variation of these once M46 hits stable.
-  </details>
-</histogram>
-
-<histogram name="Tabs.SwitchFromCloseLatency" units="ms">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Time between the event that closes a tab and the start of rendering.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SwitchFromExitLatency" units="ms">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Time between the event that exits an app and the start of rendering.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SwitchFromNewLatency" units="ms">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Time between the event that creates a tab and the start of rendering.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.SwitchFromUserLatency" units="ms">
-  <owner>simonb@chromium.org</owner>
-  <summary>
-    Time between the event that selects a tab and the start of rendering.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.TabCountActiveWindow" units="Tabs">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of tabs open in the active window when a load completes.
-  </summary>
-</histogram>
-
-<histogram name="Tabs.TabCountPerLoad" units="Tabs">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of tabs open in all browsers (counting app-mode windows) when a
-    load completes.
-  </summary>
-  <details>
-    This is basically the average number of tabs over time.
-
-    See also MPArch.RPHCountPerLoad for the number of processes used by these
-    tabs.
-  </details>
-</histogram>
-
-<histogram name="Tabs.TabCountPerWindow" units="Tabs">
-  <owner>bruthig@chromium.org</owner>
-  <owner>tdanderson@chromium.org</owner>
-  <summary>
-    The number of tabs open per window (counting app-mode windows) when a load
-    completes.
-  </summary>
-  <details>
-    This value will be recorded multiple times per load if more than one window
-    is open.
-  </details>
-</histogram>
-
-<histogram name="TaskScheduler.BlockShutdownTasksPostedDuringShutdown"
-    units="tasks">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Number of BLOCK_SHUTDOWN tasks that were posted to a base::TaskScheduler
-    after its Shutdown() method was called but before it returned.
-  </summary>
-</histogram>
-
-<histogram name="TaskScheduler.DetachDuration" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    Time elapsed between when the thread managed by a SchedulerWorker is
-    detached and when the main function of a new thread managed by the same
-    SchedulerWorker is entered (following a wake up). Recorded each time that a
-    thread is recreated for a given SchedulerWorker.
-  </summary>
-</histogram>
-
-<histogram name="TaskScheduler.NumTasksBeforeDetach" units="tasks">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    Number of tasks executed by a SchedulerWorker before it detached. Recorded
-    when a SchedulerWorker detaches.
-  </summary>
-</histogram>
-
-<histogram name="TaskScheduler.NumTasksBetweenWaits" units="tasks">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    Number of tasks executed by a SchedulerWorker between two waits on its
-    WaitableEvent. This should be maximized without affecting perceived browser
-    performance.
-  </summary>
-</histogram>
-
-<histogram name="TaskScheduler.TaskLatency" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <owner>gab@chromium.org</owner>
-  <owner>robliao@chromium.org</owner>
-  <summary>
-    Time elapsed between when a task is posted and when it starts to run.
-    Recorded for each task that runs inside the TaskScheduler.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Certificates.Microsoft" units="certificates">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of certificates for modules loaded (or potentially loaded)
-    into the browser process that are signed by Microsoft. A catalog counts as a
-    single certificate, and may refer to many modules. Measured shortly after
-    startup. Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Certificates.Total" units="certificates">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of certificates for modules loaded (or potentially loaded)
-    into the browser process. A catalog counts as a single certificate, and may
-    refer to many modules. Measured shortly after startup. Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.Loaded" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of third-party modules (neither Microsoft nor Google) that
-    are loaded in the browser process. Measured shortly after startup. Windows
-    only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.NotLoaded" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of third-party modules (neither Microsoft nor Google) that
-    are not yet loaded in the browser process, but may potentially be (shell
-    extensions, for example). Measured shortly after startup. Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.Signed" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of signed modules loaded (or potentially loaded) into the
-    browser process. Measured shortly after startup. Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.Signed.Catalog" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of modules loaded (or potentially loaded) into the browser
-    process that are signed via a catalog. Measured shortly after startup.
-    Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.Signed.Microsoft" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of modules loaded (or potentially loaded) into the browser
-    process that are signed by Microsoft. Measured shortly after startup.
-    Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThirdPartyModules.Modules.Total" units="modules">
-  <owner>chrisha@chromium.org</owner>
-  <summary>
-    The total number of modules loaded (or potentially loaded) into the browser
-    process. Measured shortly after startup. Windows only.
-  </summary>
-</histogram>
-
-<histogram name="ThreadWatcher.ResponseTime" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    The time it takes indicated thread to respond with a pong message for a ping
-    message from WatchDog thread.
-  </summary>
-</histogram>
-
-<histogram name="ThreadWatcher.ResponsiveThreads">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    This is the total number of watched threads that are responding when we got
-    no response from the watched thread.
-  </summary>
-</histogram>
-
-<histogram name="ThreadWatcher.Unresponsive" units="ms">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    This is the total unresponsive time since last pong message for the
-    indicated thread when we got no response from the watched thread.
-  </summary>
-</histogram>
-
-<histogram name="ThreadWatcher.UnresponsiveThreads">
-  <owner>rtenneti@chromium.org</owner>
-  <summary>
-    This is the total number of watched threads that are not responding when we
-    got no response from the watched thread.
-  </summary>
-</histogram>
-
-<histogram name="TileManager.ExceededMemoryBudget" enum="TileMemoryBudget">
-  <owner>reveman@chromium.org</owner>
-  <owner>vmpstr@chromium.org</owner>
-  <summary>
-    Measures whether the tile manager exceeded the hard GPU memory budget
-    (OOMed). Recorded each time the tile manager assigns GPU memory to tiles.
-  </summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.Event" enum="TimeZoneRequestEvent">
-  <summary>Events in TimeZoneRequest.</summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.ResponseCode" enum="HttpResponseCode">
-  <summary>Http response codes in TimeZoneRequest.</summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.ResponseFailureTime" units="ms">
-  <summary>
-    The time elapsed between the sending of the first API request and the time
-    the final (failed) response was recorded. Includes all retries.
-  </summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.ResponseSuccessTime" units="ms">
-  <summary>
-    The time elapsed between the sending of the first API request and the time
-    the final (successfull) response was recorded. Includes all retries.
-  </summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.Result" enum="TimeZoneRequestResult">
-  <summary>Result of TimeZoneRequest.</summary>
-</histogram>
-
-<histogram name="TimeZone.TimeZoneRequest.Retries">
-  <summary>Number of retries until the final response was recorded.</summary>
-</histogram>
-
-<histogram name="Toolbar.ActionsModel.ComponentActionsCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of component action icons the Browser Actions Container knows
-    about (visible or in the overflow bucket). Does not count icons that have
-    been permanently hidden by the user. Measured once per startup per
-    (non-incognito) profile.
-  </summary>
-</histogram>
-
-<histogram name="Toolbar.ActionsModel.OverallActionsCount">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The total number of action icons the Browser Actions Container knows about
-    (visible or in the overflow bucket). Does not count icons that have been
-    permanently hidden by the user. Measured once per startup per
-    (non-incognito) profile.
-  </summary>
-</histogram>
-
-<histogram name="Toolbar.ActionsModel.ToolbarActionsVisible">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of visible toolbar icons in the Browser Actions Container
-    (visible as in number of icons not in the overflow bucket). 0 means all
-    icons are in the overflow bucket. MAX_INT means the toolbar is always
-    showing all icons. Measured once per startup per (non-incognito) profile but
-    only for those profiles that have one or more browser actions showing in the
-    toolbar.
-  </summary>
-</histogram>
-
-<histogram name="Toolbar.AppMenuTimeToAction" units="ms">
-  <owner>rdevlin.cronin@chromium.org</owner>
-  <summary>
-    The number of millseconds between when the user opens the app menu and when
-    the app menu is closed. Logged once per app menu run when the menu closes.
-    Not recorded for menu runs that are initiated by a drag-and-drop sequence.
-    Note that the code paths for Views-platforms vs Mac are different, so cross-
-    platform comparison may not always be reasonable.
-  </summary>
-</histogram>
-
-<histogram name="TopSites.NumberOfApplyBlacklist">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>The number of times TopSitesImpl::ApplyBlacklist is called.</summary>
-</histogram>
-
-<histogram name="TopSites.NumberOfBlacklistedItems">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of items in the user Most Visited blacklist every time
-    TopSitesImpl::ApplyBlacklist is called.
-  </summary>
-</histogram>
-
-<histogram name="TouchBar.Default.Metrics" enum="DefaultTouchBarActions">
-  <owner>spqchan@chromium.com</owner>
-  <summary>Tracks the usage of the default touch bar buttons.</summary>
-</histogram>
-
-<histogram name="Touchpad.Device" enum="TouchpadDeviceState">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad device state.</summary>
-</histogram>
-
-<histogram name="Touchpad.Metrics" enum="TouchpadProblemType">
-  <owner>pthammaiah@google.com</owner>
-  <summary>
-    Tracks unusual CrOS touchpad operational states (e.g. running into the noisy
-    ground issue). This is sampled at every touchpad event.
-  </summary>
-</histogram>
-
-<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad natural scroll setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad natural scroll setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.PointerSensitivity.Changed" enum="PointerSensitivity">
-  <owner>pthammaiah@google.com</owner>
-  <summary>
-    Tracks touchpad sensitivity setting changes by the user. This replaces the
-    old Touchpad.Sensitivity.Changed metric.
-  </summary>
-</histogram>
-
-<histogram name="Touchpad.PointerSensitivity.Started" enum="PointerSensitivity">
-  <owner>pthammaiah@google.com</owner>
-  <summary>
-    Tracks touchpad sensitivity setting on startup. This replaces the old
-    Touchpad.Sensitivity.Started metric.
-  </summary>
-</histogram>
-
-<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity">
-  <obsolete>
-    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Changed.
-  </obsolete>
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad sensitivity setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity">
-  <obsolete>
-    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Started.
-  </obsolete>
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad sensitivity setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapDragging.Changed" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad TapDragging setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapDragging.Started" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad TapDragging setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapToClick.Changed" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad TapToClick setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapToClick.Started" enum="BooleanEnabled">
-  <owner>pthammaiah@google.com</owner>
-  <summary>Tracks touchpad TapToClick setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated as of 7/2013.
-  </obsolete>
-  <owner>pthammaiah@google.com</owner>
-</histogram>
-
-<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated as of 7/2013.
-  </obsolete>
-  <owner>pthammaiah@google.com</owner>
-</histogram>
-
-<histogram name="Touchscreen.TouchEventsEnabled"
-    enum="TouchEventFeatureDetectionState">
-  <owner>tdresser@chromium.org</owner>
-  <owner>input-dev@chromium.org</owner>
-  <summary>
-    Tracks whether Touch Event Feature Detection is enabled. This is based on
-    the touch events enabled flag and the presence of a touchscreen.
-  </summary>
-  <details>
-    NOTE: This metric was incorrectly recorded on ChromeOS for versions 42
-    through 45, see http://crbug.com/499476 for more details. As of
-    http://crbug.com/644318, we changed the internal name to
-    TouchEventFeatureDetection, but we still keep the old histogram name here to
-    keep consistensy.
-  </details>
-</histogram>
-
-<histogram name="TPM.EarlyResetDuringCommand" units="count">
-  <owner>semenzato@google.com</owner>
-  <summary>
-    Reported at boot if the previous boot session was interrupted in the middle
-    of a TPM command during the first 30 seconds of uptime.
-  </summary>
-</histogram>
-
-<histogram name="Tracing.Background.FinalizingTraceSizeInKB" units="KB">
-  <owner>oysteine@chromium.org</owner>
-  <summary>
-    The size, in kilobytes, of a finalized trace ready to be uploaded.
-  </summary>
-</histogram>
-
-<histogram name="Tracing.Background.ScenarioState"
-    enum="BackgroundTracingState">
-  <owner>oysteine@chromium.org</owner>
-  <summary>
-    Records state of the Background Tracing system, from when scenarios are
-    attempted to be activated until they're completed (successfully or failed)
-  </summary>
-</histogram>
-
-<histogram name="TrackedObjects.GetRetiredOrCreateThreadData" units="ms">
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    Time spent in base::ThreadData::GetRetiredOrCreateThreadData(). This method
-    is called at most once per thread, when its name is set, when it posts a
-    task or when it runs a task (whichever comes first).
-  </summary>
-</histogram>
-
-<histogram name="TrafficStatsAmortizer.AmortizationDelay" units="ms">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The amount of time spent waiting to perform an amortization run. This is
-    logged at the end of each amortization run, before passing any DataUse
-    objects to their respective callbacks.
-  </summary>
-</histogram>
-
-<histogram name="TrafficStatsAmortizer.BufferSizeOnFlush" units="count">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of DataUse objects processed in an amortization run.
-  </summary>
-</histogram>
-
-<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The number of unique tabs seen across all DataUse objects buffered for a
-    single amortization run by the TrafficStatsAmortizer. This is recorded even
-    if TrafficStats byte counts are unavailable, but not recorded if no DataUse
-    objects have been buffered.
-  </summary>
-</histogram>
-
-<histogram name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"
-    units="bytes">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total bytes after performing amortization across all DataUse objects
-    buffered for a single amortization run by the TrafficStatsAmortizer. This is
-    recorded even if TrafficStats byte counts are unavailable, but not recorded
-    if no DataUse objects have been buffered.
-  </summary>
-</histogram>
-
-<histogram name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"
-    units="bytes">
-  <owner>sclittle@chromium.org</owner>
-  <owner>bengr@chromium.org</owner>
-  <summary>
-    The total bytes before performing amortization across all DataUse objects
-    buffered for a single amortization run by the TrafficStatsAmortizer. This is
-    recorded even if TrafficStats byte counts are unavailable, but not recorded
-    if no DataUse objects have been buffered.
-  </summary>
-</histogram>
-
-<histogram name="Translate.AlwaysTranslateLang">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the always translate option was selected in the
-    translate infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.BubbleUiEvent" enum="TranslateBubbleUiEvent">
-  <owner>groby@google.com</owner>
-  <summary>Tracks UI events related to the translate bubble.</summary>
-</histogram>
-
-<histogram name="Translate.CaptureText" units="ms">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The time spent capturing plain text from the DOM. This is reported by
-    ChromeRenderViewObserver when a page is loaded completely.
-  </summary>
-</histogram>
-
-<histogram name="Translate.CLD2.LanguageAccuracy" units="%">
-  <owner>rkaplow@google.com</owner>
-  <summary>
-    Accuracy of the language detected by CLD2. Only recorded if the detection
-    returned a &quot;known&quot; result.
-  </summary>
-</histogram>
-
-<histogram name="Translate.CLD2.LanguageDetected" enum="CLD2LanguageCode">
-  <owner>rkaplow@google.com</owner>
-  <summary>Language of page detected by CLD2.</summary>
-</histogram>
-
-<histogram name="Translate.CLD3.LanguageDetected" enum="CLD3LanguageCode">
-  <owner>abakalov@chromium.org</owner>
-  <summary>
-    Language of the input page detected by CLD3. This information is logged on
-    every page load.
-  </summary>
-</histogram>
-
-<histogram name="Translate.CLD3.LanguagePercentage" units="%">
-  <owner>abakalov@chromium.org</owner>
-  <summary>
-    Percentage of the bytes that are associated with the most popular language
-    on the input page. Only recorded if the detection returned a
-    &quot;known&quot; result.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ContentLanguage" enum="TranslateLanguage">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    A page may provide a Content-Language HTTP header or a META tag. For each
-    page load, measures whether the Content-Language header exists and is valid.
-  </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslate">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the &quot;Nope&quot; (don't translate) or the infobar's
-    X button was clicked in the translate infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslateCloseInfobar">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the translate infobar was closed by clicking the X
-    button without the user translating the page.
-  </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslateDismissUI">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the translate UI was closed without translating in the
-    way that the user doesn't deny translating explicityly, like pressing 'Nope'
-    button. This is counted on both the infobar and the bubble UI. We are
-    comparing this on infobar to that on bubble by A/B testing and expecting
-    that the user will click 'Nope' button on bubble less times than infobar. We
-    won't delete this histogram after the experiment.
-  </summary>
-</histogram>
-
-<histogram name="Translate.HtmlLang" enum="TranslateLanguage">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    A page may provide a lang attribute in html tag. For each page load,
-    measures whether the lang attribute exists and is valid.
-  </summary>
-</histogram>
-
-<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus">
-  <obsolete>
-    Deprecated as of 11/2013, and replaced by Translate.InitiationStatus.v2.
-  </obsolete>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The reason why Chrome decided to perform the next action (e.g., to show
-    infobar, to translate a page without any prompting, and so on) when Chrome
-    Translate is ready to translate a page.
-  </summary>
-</histogram>
-
-<histogram name="Translate.InitiationStatus.v2"
-    enum="TranslateInitiationStatus">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The reason why Chrome decided to perform the next action (e.g., to show
-    infobar, to translate a page without any prompting, and so on) when Chrome
-    Translate is ready to translate a page.
-  </summary>
-</histogram>
-
-<histogram name="Translate.LanguageDetectionTiming"
-    enum="TranslateLanguageDetectionTiming">
-  <owner>andrewhayden@chromium.org</owner>
-  <summary>
-    For each page load, records whether language detection occurs on time or
-    gets deferred. If deferred language detection later completes, this is also
-    recorded. This allows measuring the UX impact of using a non-static CLD data
-    source.
-  </summary>
-</histogram>
-
-<histogram name="Translate.LanguageVerification"
-    enum="TranslateLanguageVerification">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    For each page load, measures whether the provided Content-Language header
-    matches the language determined by CLD.  Beyond directly matching or
-    mismatching the Content-Language header, CLD can complement the
-    Content-Language.  For example, suppose the Content-Language header
-    specifies 'zh' (general Chinese), a language code that the Translate server
-    does not support.  In this case, CLD can detect a subcode like '-TW' or
-    '-CN', resulting in language codes 'zh-TW' and 'zh-CN', which the Translate
-    server supports.  This is referred to as &quot;complementing a language
-    subcode&quot;.
-  </summary>
-</histogram>
-
-<histogram name="Translate.LocalesOnDisabledByPrefs" enum="LanguageCode">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Logs the user locale when the Translate feature is disabled by the user.
-    This is recorded each time a webpage is loaded and prefs for translation is
-    checked. This allows us to investigate the correlation between the user
-    locale and the usage rates of the Translate.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ModifyOriginalLang">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the original language in the translate infobar has been
-    changed.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ModifyTargetLang">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the target language in the translate infobar has been
-    changed.
-  </summary>
-</histogram>
-
-<histogram name="Translate.NeverTranslateLang">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the never translate option was selected in the translate
-    infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.NeverTranslateSite">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the never translate site was selected in the translate
-    infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.PageScheme" enum="TranslateScheme">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>Counts translation target page schemes.</summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Model.Status"
-    enum="TranslateRankerModelStatus">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Tracks the outcome of attempts to download a Translate Ranker Model.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Model.Version" units="date stamp">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    The date tamp (e.g., 20160916 -&gt; 15 Sept 2016) which denotes the
-    TranslateRankerModel's version.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.QueryResult" enum="BooleanAccepted">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Whether the TranslateRanker accepts or denies to show the translation
-    prompt.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Timer.CalculateScore" units="ms">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Time taken for the TranslateRanker to use the translate ranker model to
-    calculate a score for the translation, in ms.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Timer.DownloadModel" units="ms">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Time taken for the TranslateRanker to download its model, in ms.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Timer.ParseModel" units="ms">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Time taken for the TranslateRanker to parse its model, in ms.
-  </summary>
-</histogram>
-
-<histogram name="Translate.Ranker.Timer.ShouldOfferTranslation" units="ms">
-  <owner>rogerm@google.com</owner>
-  <summary>
-    Time taken for the TranslateRanker to decide if a given translation should
-    be offered or not, in ms. This includes the time taken to extract the
-    relevant features upon which to base the decision, as well as the time taken
-    to calculate the result.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ReportLanguageDetectionError">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the &quot;report this error&quot; of options menu is
-    selected in the translate infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.RevertTranslation">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the show original button was clicked in the translate
-    infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ServerReportedUnsupportedLanguage">
-  <obsolete>
-    Deprecated 5/2013 by Translate.UndisplayableLanguage
-  </obsolete>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the detected language is not supported by Translate
-    Element.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ShowBeforeTranslateInfobar">
-  <obsolete>
-    Deprecated 7/2010. No longer tracked.
-  </obsolete>
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times an infobar proposing to translate a page has been shown.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ShowErrorInfobar" enum="TranslateError">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Chrome Translate shows an error infobar when an error happens on translation
-    and the infobar message depends on what kind of error happens. This metric
-    counts how often each error message is shown.
-  </summary>
-</histogram>
-
-<histogram name="Translate.ShowErrorUI" enum="TranslateError">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Chrome Translate shows an error UI (infobar or bubble) when an error happens
-    on translation and the UI message depends on what kind of error happens.
-    This metric counts how often each error message is shown.
-  </summary>
-</histogram>
-
-<histogram name="Translate.SimilarLanguageMatch" enum="BooleanMatched">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    This metrics is logged whenever a page is loaded. The logged value is
-    &quot;Mathced&quot; when the CLD-detected language differs from the page
-    language code , and the two languages are such similar languages. In that
-    case, Chrome ignore the CLD-determined language and instead uses the page
-    language code. The page language code is decided by Content-Language and
-    HTML lang attribute.
-  </summary>
-</histogram>
-
-<histogram name="Translate.TimeToBeReady" units="ms">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The time from injecting scripts for Chrome Translate to being ready to
-    perform translation.
-  </summary>
-</histogram>
-
-<histogram name="Translate.TimeToLoad" units="ms">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The time from injecting scripts for Chrome Translate to the finishing loads
-    of all depending libraries.
-  </summary>
-</histogram>
-
-<histogram name="Translate.TimeToTranslate" units="ms">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>The time from starting translation to the completion.</summary>
-</histogram>
-
-<histogram name="Translate.Translate" enum="BooleanTranslate">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The number of times the translate button was clicked in the translate
-    infobar.
-  </summary>
-</histogram>
-
-<histogram name="Translate.UndisplayableLanguage" enum="LanguageCode">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Logs an undisplayable language included in the language list sent by the
-    Translate server. The Translate server sends the list each time the user
-    runs Chrome. This metrics tells us that there is a language which UI should
-    support but doesn't.
-  </summary>
-</histogram>
-
-<histogram name="Translate.UnsupportedLanguageAtInitiation" enum="LanguageCode">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    Logs an unsupported source language detected during initiation of the
-    Translate feature.  This is reported when the language detector successfully
-    detects the language of the webpage, but the language is not supported by
-    the translation server because it is too minor.  This metric allows us to
-    assess how important the unsupported language is for Google translate.
-  </summary>
-</histogram>
-
-<histogram name="Translate.UserActionDuration" units="ms">
-  <owner>kenjibaheux@google.com</owner>
-  <summary>
-    The time from a page content language being determined to user requesting
-    Chrome Translate.
-  </summary>
-</histogram>
-
-<histogram name="TryScroll.SlowScroll" enum="ScrollThread">
-  <obsolete>
-    Deprecated 02/2016 in Issue 1741103002, and replaced by
-    Renderer4.CompositorWheelScrollUpdateThread and
-    Renderer4.CompositorTouchScrollUpdateThread.
-  </obsolete>
-  <owner>tdresser@chromium.org</owner>
-  <summary>Whether a scroll is executed on main thread.</summary>
-</histogram>
-
-<histogram name="UI.DeviceScale" units="%">
-  <owner>bsep@chromium.org</owner>
-  <summary>
-    The device scales available on the system at startup. A system may report
-    more than one if it has multiple displays with varying device scales. Only
-    logged on Windows.
-  </summary>
-</histogram>
-
-<histogram name="UKM.ActualLogUploadInterval" units="minutes">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The actual interval between log upload start and previous log upload
-    finished within the same process.
-  </summary>
-</histogram>
-
-<histogram name="UKM.Entries.Dropped" enum="UkmDataDroppedReason">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Number of UKM entries that are dropped. Categorized by the cause of it being
-    dropped.
-  </summary>
-</histogram>
-
-<histogram name="UKM.Entries.SerializedCount">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>Number of serialized UKM entries when storing a UKM log.</summary>
-</histogram>
-
-<histogram name="UKM.InitSequence" enum="UmaInitSequence">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Logged during UkmService initialization whether the init task or the initial
-    log timer completed first. The expectation is the vast majority of the time,
-    the init task should complete first. If metrics show otherwise, then it may
-    indicate there's a bug in the UkmService init sequence and that it should be
-    investigated.
-  </summary>
-</histogram>
-
-<histogram name="UKM.LogSize.OnSuccess" units="KB">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Size in kilobytes (after compression) of an uploaded UKM log. Recorded after
-    a successful UKM upload.
-  </summary>
-</histogram>
-
-<histogram name="UKM.PersistentLogRecall.Status"
-    enum="PersistedLogsLogReadStatus">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>The status when loading UKM PersistedLogs from Prefs.</summary>
-</histogram>
-
-<histogram name="UKM.Sources.Dropped" enum="UkmDataDroppedReason">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Number of UKM sources that are dropped. Categorized by the cause of it being
-    dropped.
-  </summary>
-</histogram>
-
-<histogram name="UKM.Sources.SerializedCount">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>Number of serialized UKM sources when storing a UKM log.</summary>
-</histogram>
-
-<histogram name="UKM.UnsentLogs.DroppedSize" units="bytes">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Number of bytes in an excessively large log that was discarded while
-    persisting UKM logs to disk to retry during next chrome run.
-  </summary>
-</histogram>
-
-<histogram name="UKM.UnsentLogs.NumDropped">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    Counter for number of UKM unsent logs removed from persistent storage.
-  </summary>
-</histogram>
-
-<histogram name="UKM.Upload.ResponseCode" enum="HttpResponseCode">
-  <owner>holte@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    For each upload to the UKM server, log the response received from the
-    server.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ActualLogUploadInterval" units="minutes">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The actual interval between log upload start and previous log upload
-    finished within the same process.
-  </summary>
-</histogram>
-
-<histogram name="UMA.AntiVirusMetricsProvider.Result"
-    enum="AntiVirusMetricsProviderResult">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Records the result of the attempt to enumerate the installed AntiVirus on
-    the machine. This is recorded once during metrics initialization.
-  </summary>
-</histogram>
-
-<histogram name="UMA.CleanExitBeaconConsistency" enum="UmaCleanExitConsistency">
-  <owner>siggi@chromium.org</owner>
-  <summary>
-    Reports the combined state of distinct clean exit beacons stored in Local
-    State and the Windows registry. They are normally expected to be identical.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ClientIdBackupRecoveredWithAge" units="hours">
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Recorded when we are somehow missing the client ID stored in Local State yet
-    are able to recover it from a backup location along with the backed up
-    installation date. This report carries the age in hours of the recovered
-    client id.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated">
-  <obsolete>
-    Removed in M45.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Recorded when the one-time UMA client id reset was performed (and the client
-    id of this user was migrated).
-  </summary>
-</histogram>
-
-<histogram name="UMA.CollectExternalEventsTime" units="ms">
-  <obsolete>
-    Deprecated as of August 2015. The histogram showed no unexpected slowness,
-    and a profiler is a better tool for identifying any future issues.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time to run the external metrics collection task (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="UMA.ComputeCurrentSigninStatus"
-    enum="ComputeCurrentSigninStatus">
-  <obsolete>
-    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
-    is not needed anymore.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    Records attempts to compute the current the signin status and error
-    encountered when computing.
-  </summary>
-</histogram>
-
-<histogram name="UMA.CreatePersistentHistogram.Result"
-    enum="CreatePersistentHistogramResult">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records attempts to create histograms in presistent space and any errors
-    encountered when doing so.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpAsyncTaskDuration"
-    units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Measures how much time it took to complete all async deferred startup tasks
-    on the background thread. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpCompleteTime"
-    units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Measures how much time since application was first in foreground till all
-    deferred tasks are done. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDuration"
-    units="ms">
-  <obsolete>
-    Deprecated 01/2017 for
-    UMA.Debug.EnableCrashUploadDeferredStartupAsyncTaskDuration.
-  </obsolete>
-  <owner>wnwen@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time it took to complete deferred startup tasks on the UI
-    thread. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDurationAsync"
-    units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time it took to complete async deferred startup tasks on
-    the background thread. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpMaxTaskDuration"
-    units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <summary>
-    Measures the maximum amount of time a single deferred startup task took.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime" units="ms">
-  <obsolete>
-    Replaced by UMA.Debug.EnableCrashUpload.DeferredStartUptime2
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since start up it took for onDeferredStartup() to be
-    called, which schedules enablePotentialCrashUploading() to be executed on an
-    async task. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime2" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since application was first in foreground till
-    deferred tasks are initialized and queued on the idle handler. Only logged
-    on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime"
-    units="ms">
-  <obsolete>
-    Replaced by UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since start up it took before ChromeActivity's
-    postDeferredStartupIfNeeded() was called. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2"
-    units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since application was first in foreground till
-    ChromeActivity's postDeferredStartupIfNeeded() was called exactly once. Only
-    logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.Uptime" units="ms">
-  <obsolete>
-    Replaced by UMA.Debug.EnableCrashUpload.Uptime2
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since start up it took before crash reporting was
-    enabled via enablePotentialCrashUploading() as part of deferred start up.
-    Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.Uptime2" units="ms">
-  <obsolete>
-    Replaced by UMA.Debug.EnableCrashUpload.Uptime3
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since start up it took before crash reporting was
-    enabled via enablePotentialCrashUploading() as part of deferred start up.
-    Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Debug.EnableCrashUpload.Uptime3" units="ms">
-  <owner>wnwen@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Measures how much time since application was first in foreground till crash
-    reporting was enabled via enablePotentialCrashUploading() as part of
-    deferred start up. Only logged on Android.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Discarded Log Events">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>rkaplow@chromium.org</owner>
-  <summary>
-    The number of events that would be discarded at log transmission time
-    because the event count was already too large. Note that this doesn't
-    measure actual discards - in case the UMAThrottleEvents feature is disabled,
-    the discards won't occur.
-  </summary>
-</histogram>
-
-<histogram name="UMA.EnrollmentStatus" enum="EnrollmentStatus">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>kaznacheev@chromium.org</owner>
-  <summary>
-    Logs the device enrollment status for Chrome OS device. Logged with every
-    UMA upload.
-  </summary>
-</histogram>
-
-<histogram name="UMA.EntropySourceType" enum="UmaEntropySourceType">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Logs the entropy source type that was used for field trial randomization.
-    Logged once at each start up.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ExternalExperiment.GroupCount" units="groups">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Logged on Android whenever an external experiment is registered. The logged
-    value is the number of groups in the experiment. This will not be logged at
-    all if there are no external experiments, but will be logged on group
-    transitions (e.g. when going from 1 to 0 groups).
-  </summary>
-</histogram>
-
-<histogram name="UMA.FieldTrialAllocator.Size" units="bytes">
-  <obsolete>
-    Deprecated 11/2016 for UMA.FieldTrialAllocator.Used
-  </obsolete>
-  <owner>lawrencewu@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Size, before padding, of objects allocated from persistent memory in the
-    browser process for field trials. Updated on each subprocess launch.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage">
-  <obsolete>
-    Deprecated 2012. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Log whether the --enable-benchmarking flag was set, which causes field
-    trials to only use the default group.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.AccessResult"
-    enum="FileMetricsProviderAccessResult">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records attempts to access a file for the purpose of extracting metrics.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.DeletedFiles">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The number of old metrics files for which a delete was attempted. This is
-    logged once with each upload operation. Values greater than 1 indicate that
-    the files are not deletable by the browser and must be cleaned up by
-    whatever process is creating them.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.DirectoryFiles">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The number of metrics files in a directory that need to be uploaded. This is
-    logged once with each upload operation.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.InitialAccessResult"
-    enum="FileMetricsProviderAccessResult">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records attempts to access a file for the purpose of extracting initial
-    stability metrics.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.InitialCheckTime.File" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent checking and mapping an initial metrics
-    file on disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.InitialCheckTime.Total" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent checking and mapping initial metrics
-    from all files on disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.File" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent collecting initial stability metrics
-    from a file on disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.Total" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent collecting initial stability metrics
-    from all files on disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.SnapshotTime.File" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent collecting metrics from a file on disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.FileMetricsProvider.SnapshotTime.Total" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent collecting metrics from all files on
-    disk.
-  </summary>
-</histogram>
-
-<histogram name="UMA.GeneratedLowEntropySource" enum="Boolean">
-  <obsolete>
-    Deprecated as of August 2015. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    For each attempt to generate the low entropy source, log whether or not the
-    load required generating a new low entropy source.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Histograms.Activity" enum="HistogramActivityReport">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Type and flags of every histogram created plus other activities. Counts are
-    not mutually-exclusive except for the different types.
-  </summary>
-</histogram>
-
-<histogram name="UMA.InitSequence" enum="UmaInitSequence">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Logged during MetricsService initialization whether the init task or the
-    initial log timer completed first. The expectation is the vast majority of
-    the time, the init task should complete first. If metrics show otherwise,
-    then it may indicate there's a bug in the MetricsService init sequence and
-    that it should be investigated.
-  </summary>
-</histogram>
-
-<histogram name="UMA.IsClonedInstall" enum="BooleanCloned">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    This is logged with a value of true in every log when the UMA client code
-    has detected that this is a potentially cloned install and has set the pref
-    to reset its UMA client id on the next startup.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Large Accumulated Log Not Persisted" units="bytes">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Number of bytes in an excessively large log that was discarded at shutdown
-    instead of being saved to disk to retry during next chrome run.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Large Rejected Log was Discarded" units="bytes">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Number of bytes in a log was was rejected by server, and then discarded.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LoadLogsTime" units="ms">
-  <obsolete>
-    Deprecated as of August 2015. The histograms showed no unexpected slowness,
-    and a profiler is a better tool for identifying any future issues.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time spent to load (de-serialize) unsent logs from local state, recorded
-    during the MetricsService startup sequence.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Posix"
-    enum="OSAgnosticErrno">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Failures, as reported in errno, encountered while allocating local
-    persistent memory under Posix.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Win"
-    enum="WinGetLastError">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Failures, as reported by GetLastError(), encountered while allocating local
-    persistent memory under Windows.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LogLoadComplete called">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Simple counter of the number of times LogLoadComplete was called (bug
-    demonstration, as we're called more often than once per page load :-/ )
-  </summary>
-</histogram>
-
-<histogram name="UMA.LogSize.OnSuccess" units="KB">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Size in kilobytes (after compression) of an uploaded UMA log. Recorded after
-    a successful UMA upload.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LogUpload.Canceled.CellularConstraint"
-    enum="BooleanCanceled">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    Logs whether a log was not uploaded due to cellular log throttling logic.
-    Android only.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LogUpload.ConnetionType" enum="NetworkConnectionType">
-  <obsolete>
-    Used for analyzing UMA log uploads on cellular connection, but necessary
-    after the analysis is finished.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    The network connection type for each successful metrics log upload.
-  </summary>
-</histogram>
-
-<histogram name="UMA.LowEntropySourceValue">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Distribution of the low entropy source value used for field trial
-    randomization, recorded on startup.
-  </summary>
-</histogram>
-
-<histogram name="UMA.MachineIdState" enum="UmaMachineIdState">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    Tracks if the machine ID is generated successfully and if it changes from
-    one run to the next. The machine ID is a 24-bit hash of machine
-    characteristics. It is expected to change if an install of Chrome is copied
-    to multiple machines. This check happens once per browser startup.
-  </summary>
-</histogram>
-
-<histogram name="UMA.MetricsIDsReset" enum="BooleanHit">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    A count of the number of times the metrics ids (client id and low entropy
-    source) have been reset due to a cloned install being detected.
-  </summary>
-</histogram>
-
-<histogram name="UMA.MetricsReporting.Toggle" enum="MetricsReportingChange">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Logged when user successfully enables/disables MetricsReporting or when an
-    error occurs.
-  </summary>
-</histogram>
-
-<histogram name="UMA.MetricsService.RecordCurrentHistograms.Time" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Records how much wall time was spent merging, taking snapshots, and
-    recording histograms for reporting to UMA.
-  </summary>
-</histogram>
-
-<histogram name="UMA.NegativeSamples.Reason" enum="NegativeSampleReason">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    Reasons why a negative sample count would have been created. Currently, only
-    negative samples from persistent sparse histograms are being checked.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    A count of successes and various failure modes related to collecting and
-    processing performance data obtained through &quot;perf&quot; on Chrome OS.
-  </summary>
-</histogram>
-
-<histogram base="true" name="UMA.PersistentAllocator.Allocs" units="bytes">
-  <obsolete>
-    Deprecated 2/2017 for Issue 689315 which indicated they weren't being used.
-  </obsolete>
-  <owner>bcwhite@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Size, before padding, of objects allocated from persistent memory. This is
-    updated with every allocation.
-  </summary>
-</histogram>
-
-<histogram base="true" name="UMA.PersistentAllocator.Errors"
-    enum="PersistentAllocatorErrors">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Errors detected by the persistent memory allocator. These are set when they
-    occur.
-  </summary>
-</histogram>
-
-<histogram base="true" name="UMA.PersistentAllocator.UsedPct" units="%">
-  <owner>bcwhite@chromium.org</owner>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Percentage of persistent memory segment that has been allocated. This is
-    updated only once per reporting cycle.
-  </summary>
-</histogram>
-
-<histogram name="UMA.PersistentHistograms.InitResult"
-    enum="PersistentHistogramsInitResult">
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    A count of successes and failures for the creation of various forms of
-    persistent memory used to store histograms.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ProfilesCount.AfterErase">
-  <obsolete>
-    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
-    is not needed anymore.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    Record the number of loaded profiles when a profile is erased from the
-    profiles map kept by profile manager.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ProfileSignInStatus" enum="ProfileSigninStatus">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>yiyaoliu@chromium.org</owner>
-  <summary>
-    An enum representing the signin status of all opened profiles during one UMA
-    session.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ProtoCompressionRatio" units="%">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Compression ratio of the serialized protobuf that will be uploaded to the
-    UMA server. This serialized protobuf is compressed using gzip.
-  </summary>
-</histogram>
-
-<histogram name="UMA.ProtoGzipped" enum="Boolean">
-  <obsolete>
-    Deprecated as of Sep, 2013. Gzipping protobufs is now the default.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>Was the UMA protobuf uploaded earlier compressed or not.</summary>
-</histogram>
-
-<histogram name="UMA.ProtoGzippedKBSaved" units="KB">
-  <obsolete>
-    Deprecated as of August 2015. See UMA.ProtoCompressionRatio instead.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Kilobytes saved from gzipping the protobufs before uploading them.
-  </summary>
-</histogram>
-
-<histogram name="UMA.SamplingRatePerMille" units="samples permille">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    Sample rate applied to this client, expressed as number of clients per 1000
-    that are in the sample. Recorded on every log upload.
-  </summary>
-</histogram>
-
-<histogram name="UMA.StoreLogsTime" units="ms">
-  <obsolete>
-    Deprecated as of August 2015. The histograms showed no unexpected slowness,
-    and a profiler is a better tool for identifying any future issues.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time spent to store unsent logs to local state, which is done
-    periodically and also during start up if there was an initial stability log.
-  </summary>
-</histogram>
-
-<histogram name="UMA.SubprocessMetricsProvider.SubprocessCount"
-    units="subprocesses">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The number of subprocesses from which persistent metrics were collected,
-    logged once with every reporting cycle.
-  </summary>
-</histogram>
-
-<histogram name="UMA.SubprocessMetricsProvider.UntrackedProcesses"
-    units="subprocesses">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>bcwhite@chromium.org</owner>
-  <summary>
-    The number of subprocesses, by type, from which persistent metrics are NOT
-    collected because there is no information about this (likely new) process
-    type.
-  </summary>
-</histogram>
-
-<histogram name="UMA.SyntheticTrials.Count">
-  <obsolete>
-    Deprecated as of August 2015.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The number of synthetic field trials added to the UMA log when the system
-    profile is recorded. Since this is done prior to capturing the histograms
-    from the current process, this will generally be logged once per UMA log.
-  </summary>
-</histogram>
-
-<histogram name="UMA.Unacceptable_Log_Discarded">
-  <obsolete>
-    Deprecated as of May, 2012 (i.e. Chrome 21+).  Replaced by the
-    UMA.UploadResponseStatus.XML and UMA.UploadResponseStatus.Protobuf
-    histograms.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>The server returned a 400 code, and we discarded a log.</summary>
-  <details>
-    This tends to indicate that a syntax error is present in a log, such as
-    would appear when a bogus XML tag is included, or the XML is not balanced
-    and well structured.
-  </details>
-</histogram>
-
-<histogram name="UMA.UnsentLogs.Dropped">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>gayane@chromium.org</owner>
-  <summary>
-    Counter for number of UMA unsent logs removed from persistent storage.
-  </summary>
-</histogram>
-
-<histogram name="UMA.UploadCreation" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated as of August 2015.  This failure case no longer exists.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    For each attempted UMA upload, log whether the upload was successfully
-    constructed.  An upload might fail to be constructed, for example, if we try
-    to upload before the system is fully initialized; or if serialization of the
-    data fails.
-  </summary>
-</histogram>
-
-<histogram name="UMA.UploadResponseStatus.Protobuf"
-    enum="UmaUploadResponseStatus">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    For each upload to the protocol buffer (v2) UMA server, log whether the
-    upload was successful, or whether there was an error.
-  </summary>
-</histogram>
-
-<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus">
-  <obsolete>
-    Deprecated 2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    For each upload to the XML (v1) UMA server, log whether the upload was
-    successful, or whether there was an error.
-  </summary>
-</histogram>
-
-<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage">
-  <obsolete>
-    No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Log whether the --reset-variation-state flag was set before the low entropy
-    source was requested.
-  </summary>
-</histogram>
-
-<histogram name="UMA.XMLNodeDumpTime" units="ms">
-  <obsolete>
-    Deprecated 2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time spent in converting the XML tree into a character buffer when
-    closing a metrics log (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="UMA.XMLWriterDestructionTime" units="ms">
-  <obsolete>
-    Deprecated 2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time spent in freeing the XML writer and tree when closing a metrics log
-    (Chrome OS).
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.ConnectionType"
-    enum="UpdateEngineConnectionType">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The network connection type when the attempt begins. Possible values include
-    &quot;Unknown&quot;, &quot;Ethernet&quot;, &quot;Wifi&quot;,
-    &quot;Wimax&quot;, &quot;Bluetooth&quot;, &quot;Cellular&quot;,
-    &quot;Tethered Ethernet&quot;, &quot;Tethered Wifi&quot;.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.DownloadErrorCode"
-    enum="UpdateEngineDownloadErrorCode">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    A more detailed description of the last Payload transfer error when
-    downloading the payload.
-
-    This is reported when an attempt ends with the &quot;Payload Download
-    Error&quot; result.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.DownloadSource"
-    enum="UpdateEngineDownloadSource">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The download source used, possible values include &quot;HTTPS Server&quot;,
-    &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.DurationMinutes" units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes the update attempt took including the time the device
-    spent sleeping.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.DurationUptimeMinutes" units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes the update attempt took excluding the time the device
-    spent sleeping.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.InternalErrorCode"
-    enum="UpdateEngineErrorCode">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    A more detailed description of the last internal error. The possible values
-    correspond to the ErrorCode enumeration in the update_engine source code.
-
-    This is reported when an attempt ends with the InternalError result.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.Number" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The attempt number which starts at 0 for the initial attempt and keeps
-    increasing for subsequent attempts.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.PayloadBytesDownloadedMiB" units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of payload mebibytes (1048576 bytes) actually download.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.PayloadDownloadSpeedKBps" units="KBps">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The payload download speed, in kilobytes per second (1000 bytes/second).
-    This is calculated as the number of bytes downloaded divided by the duration
-    of the attempt (excluding time spent sleeping).
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.PayloadSizeMiB" units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The payload size, in mebibytes (1048576 bytes).
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.PayloadType"
-    enum="UpdateEnginePayloadFormat">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The payload type, possible values include &quot;Delta&quot; (if Omaha
-    specified to download a delta payload); and &quot;Full&quot; (if Omaha
-    specified to download a full payload); and &quot;ForcedFull&quot; (if the
-    client specified that it would only accept a full payload).
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.Result" enum="UpdateEngineAttemptResult">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The result of the update attempt.
-
-    This is reported when an update attempt ends.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptMinutes"
-    units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes since the last attempt including the time the device
-    spent sleeping.
-
-    This is reported when an update attempt ends but only if there was a
-    previous attempt for the same update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptUptimeMinutes"
-    units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes since the last attempt excluding the time the device
-    spent sleeping.
-
-    This is reported when an update attempt ends but only if there was a
-    previous attempt for the same update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.CertificateCheck.Download"
-    enum="UpdateEngineCertificateCheckStatus">
-  <owner>deymo@chromium.org</owner>
-  <summary>
-    The status of the certificate check done when downloading a payload over
-    HTTPS. Note that most downloads are done over HTTP.
-
-    This is reported on every HTTPS connection to the payload download server.
-    Connection drops on the same payload may report different values.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.CertificateCheck.UpdateCheck"
-    enum="UpdateEngineCertificateCheckStatus">
-  <owner>deymo@chromium.org</owner>
-  <summary>
-    The status of the certificate check done when querying Omaha for a new
-    version.
-
-    This is reported on every update check.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Check.DownloadErrorCode"
-    enum="UpdateEngineDownloadErrorCode">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    If unable to download a response from Omaha, a more detailed error code is
-    reported in this metric.
-
-    This is reported on every update check resulting in &quot;Download
-    error&quot;.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Check.Reaction" enum="UpdateEngineCheckReaction">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    If there is an update available, this metric will track what the device does
-    with the information. Possible values include &quot;Applying update&quot;,
-    &quot;Deferring update&quot;, &quot;Ignoring update&quot;, and &quot;Backing
-    off&quot;.
-
-    This is reported on update checks resulting in &quot;Update available&quot;.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Check.Result" enum="UpdateEngineCheckResult">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The response from Omaha. Possible values include &quot;No update
-    available&quot;, &quot;Update available&quot;, &quot;Download error&quot;,
-    &quot;Response parsing error&quot;, and &quot;Reboot pending&quot;.
-
-    This is reported on every update check.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Check.TimeSinceLastCheckMinutes" units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes since the last check including the time the device
-    spent sleeping.
-
-    This is reported on every update check except for the first one.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Check.TimeSinceLastCheckUptimeMinutes"
-    units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of minutes since the last check excluding the time the device
-    spent sleeping.
-
-    This is reported on every update check except for the first one.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Daily.OSAgeDays" units="days">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The age of the OS in days, defined as the age of the /etc/lsb-release file.
-
-    This is reported on every update check but at most once a day.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.FailedUpdateCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The number of consecutive times a device has failed to boot an update that
-    successfully applied.
-
-    This is reported every time the firmware fails to boot the slot with the
-    update and fell back to the slot it originally updated from.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.InstallDateProvisioningSource"
-    enum="UpdateEngineInstallDateProvisioningSource">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The source used to provision the install-date-days value sent to Omaha with
-    every request.
-
-    This is reported when OOBE (Out Of Box Experience) completes (M34 or later)
-    or when upgrading to a version with install-date-days support.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    Whether rollback worked.
-
-    This is reported every time there's a rollback request.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.AttemptCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of update attempts required to update the device.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiB" units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of bytes downloaded in mebibytes (1048576 bytes) using all
-    available sources (e.g. HTTP, HTTPS, HTTP Peer).
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpPeer"
-    units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of bytes downloaded in mebibytes (1048576 bytes) using HTTP
-    from a local peer.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpServer"
-    units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of bytes downloaded in mebibytes (1048576 bytes) using
-    HTTP.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpsServer"
-    units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of bytes downloaded in mebibytes (1048576 bytes) using
-    HTTPS.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.DownloadOverheadPercentage"
-    units="%">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The ratio between bytes downloaded and payload size minus 100.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.DownloadSourcesUsed"
-    enum="UpdateEngineDownloadSources">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The various download sources used - this is a combination of the values
-    &quot;HTTPS Server&quot;, &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.PayloadSizeMiB" units="MiB">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The size of the payload, in mebibytes (1048576 bytes).
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.PayloadType"
-    enum="UpdateEnginePayloadFormat">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The payload type (&quot;Delta&quot;, &quot;Full&quot;,
-    &quot;ForcedFull&quot;) used.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.RebootCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of reboots during the update.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationMinutes"
-    units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of minutes from when an update was detected until an update
-    (possibly another update) was applied. This includes the time waiting for
-    update checks and time the device spent sleeping.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.UpdatesAbandonedCount"
-    units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of updates that were abandoned since the last successful
-    update.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.SuccessfulUpdate.UrlSwitchCount" units="count">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The total number of times the URL was switched (from e.g. HTTPS to HTTP)
-    because of failures.
-
-    This is reported on every successful update.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="UpdateEngine.TimeToRebootMinutes" units="minutes">
-  <owner>zeuthen@chromium.org</owner>
-  <summary>
-    The duration between when an update has successfully completed and the user
-    is presented with the &quot;reboot arrow&quot; and when the system has
-    booted into the new update.
-
-    This is reported every time the device is rebooted after an update has been
-    applied.
-
-    This metric is specific to ChromeOS.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.ChromeExecToLoginPromptVisibleAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between when Chrome is started, and
-    when the login prompt is again visible after a logout.  This statistic is
-    only collected when preceeded by a logout.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.DBusCrash" units="ms">
-  <owner>derat@chromium.org</owner>
-  <summary>
-    The system uptime on Chrome OS when the dbus-daemon process crashes,
-    resulting in a reboot.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.LoginPromptSetupTimeAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS for setting up for a login after a
-    logout. More specifically, it is the time between when the Cryptohome is
-    unmounted (the last step in the logout process) and when the login prompt is
-    again visible after a logout.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.Logout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS when performing a logout. More
-    specifically, it is the time between when a logout is initiated and when the
-    Cryptohome is unmounted, signaling the last step in the logout process. This
-    statistic is not collected when the logout is part of a restart or shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.LogoutToLoginPromptVisible" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between initiating a logout and the
-    next time the login prompt is visible again.  This statistic is not
-    collected if the machine is shutdown between the logout initiation and the
-    prompt becoming visible.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.LogoutToUIStopAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between when a logout is initiated
-    and the UI has stopped (and Chrome has exited) during the logout process.
-    This statistic is not collected if the logout is part of a restart or
-    shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between when all user-associated
-    processes (including the X server) have been terminated during the logout
-    process.  This statistic is not collected if the logout is part of a restart
-    or shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.UIStopToProcessesTerminatedAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between when the UI has stopped
-    (Chrome has exited), and when all other associated processes have been
-    terminated during the logout process. This statistic is not collected if the
-    logout is part of a restart or shutdown.
-  </summary>
-</histogram>
-
-<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <summary>
-    Measures the time elapsed on Chrome OS between when the X server has been
-    terminated from a previous logout and when Chrome is started again to show
-    the login screen.
-  </summary>
-</histogram>
-
-<histogram name="UrlFetcher.StringResponseSize" units="KB">
-  <owner>mmenke@chromium.org</owner>
-  <summary>
-    Size (in kilobytes) of response bodies retrieved as strings from URLFetcher.
-  </summary>
-</histogram>
-
-<histogram name="UserCert.ContentDisposition" enum="UserCertContentDisposition">
-  <obsolete>
-    Removed in M57.
-  </obsolete>
-  <owner>rsleevi@chromium.org</owner>
-  <owner>svaldez@chromium.org</owner>
-  <summary>
-    Distribution of Content-Disposition headers sent with x-x509-user-cert
-    content types.
-  </summary>
-</histogram>
-
-<histogram name="UserImage.ChangeChoice" enum="ChromeOSUserImageId">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Distribution of the default images that users choose in Change Picture
-    dialog (Chrome OS). One sample is taken each time the user changes picture.
-  </summary>
-</histogram>
-
-<histogram name="UserImage.FirstTimeChoice" enum="ChromeOSUserImageId">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Distribution of the default images chosen on user image screen during
-    out-of-the-box experience (Chrome OS). One sample is taken each time the
-    user confirms the choice by clicking OK button.
-  </summary>
-</histogram>
-
-<histogram name="UserImage.LoggedIn" enum="ChromeOSUserImageId">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Distribution of the default images that existing users login with (Chrome
-    OS). One sample is taken each time the user logs in.
-  </summary>
-</histogram>
-
-<histogram name="UserImage.ProfileDownloadResult"
-    enum="ProfileImageDownloadResult">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Profile image download result for UserManager (either on behalf of the
-    Change Picture prefs page, OOBE or scheduled refresh after user login).
-  </summary>
-</histogram>
-
-<histogram name="UserImage.ProfileDownloadTime" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>The time it took to download user's profile picture.</summary>
-</histogram>
-
-<histogram name="UserImage.ScreenIsShownTime" units="ms">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Time histogram of the &quot;Choose Picture&quot; OOBE screen display delay.
-  </summary>
-</histogram>
-
-<histogram name="UserManager.LoginUserType" enum="UserType">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    The number of users of different types that log in to the system (Chrome
-    OS).
-  </summary>
-</histogram>
-
-<histogram name="UserManager.LogoutToLoginDelay" units="seconds">
-  <owner>alemate@chromium.org</owner>
-  <owner>omrilio@chromium.org</owner>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The time between one regular user logging out and a different regular user
-    logging in (Chrome OS). Delays above thirty minutes or which span system
-    reboots or non-regular-user logins are not reported.
-  </summary>
-</histogram>
-
-<histogram name="UserSessionManager.UserPodsDisplay" enum="UserPodsDisplay">
-  <owner>achuith@chromium.org</owner>
-  <summary>
-    Whether the user pods were enabled during login, and what could disable
-    them.
-  </summary>
-</histogram>
-
-<histogram name="V8.AsmWasmTranslationMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <owner>aseemgarg@chromium.org</owner>
-  <summary>Time to convert asm.js code to WebAssembly.</summary>
-</histogram>
-
-<histogram name="V8.ASTOptimization">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="V8.CodeCacheRejectReason" enum="V8CodeCacheRejectReason">
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Reason code data has been rejected when attempting to deserialize.
-  </summary>
-</histogram>
-
-<histogram name="V8.CodeCacheSizeRatio" units="%">
-  <owner>yangguo@chromium.org</owner>
-  <summary>Cache size to source size ratio when caching compiled code.</summary>
-</histogram>
-
-<histogram name="V8.CodeCreation">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="V8.CodeGeneration">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>Time spent generating native code for functions.</summary>
-</histogram>
-
-<histogram name="V8.CodegenFractionCrankshaft" units="%">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>rmcilroy@chromium.org</owner>
-  <summary>
-    Fraction of the total generated code which was generated using the
-    Crankshaft optimizing compiler, after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.Compile" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>yangguo@chromium.org</owner>
-  <summary>Time spent in V8 compiler (full codegen).</summary>
-</histogram>
-
-<histogram name="V8.CompileCacheableMicroSeconds" units="microseconds">
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Time spent compiling a script that may be subject to caching.
-  </summary>
-</histogram>
-
-<histogram name="V8.CompileDeserialize" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileDeserializeMicroSeconds.
-  </obsolete>
-  <owner>vogelheim@chromium.org</owner>
-  <summary>Time spent deseriailzing code, used by V8 code caching.</summary>
-</histogram>
-
-<histogram name="V8.CompileDeserializeMicroSeconds" units="microseconds">
-  <owner>vogelheim@chromium.org</owner>
-  <summary>Time spent deseriailzing code, used by V8 code caching.</summary>
-</histogram>
-
-<histogram name="V8.CompileEval" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileEvalMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>yangguo@chromium.org</owner>
-  <summary>Time spent in V8 compiler (full codegen) for eval.</summary>
-</histogram>
-
-<histogram name="V8.CompileEvalMicroSeconds" units="microseconds">
-  <owner>jochen@chromium.org</owner>
-  <owner>yangguo@chromium.org</owner>
-  <summary>Time spent in V8 compiler (full codegen) for eval.</summary>
-</histogram>
-
-<histogram name="V8.CompileInlineScriptMicroSeconds" units="microseconds">
-  <owner>yangguo@chromium.org</owner>
-  <summary>Time spent compiling an inline script.</summary>
-</histogram>
-
-<histogram name="V8.CompileLazy" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileLazyMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>Time spent compiling functions lazily on first run.</summary>
-</histogram>
-
-<histogram name="V8.CompileLazyMicroSeconds" units="microseconds">
-  <owner>jochen@chromium.org</owner>
-  <summary>
-    Aggregated time spent compiling functions lazily during a single script
-    execution.
-  </summary>
-</histogram>
-
-<histogram name="V8.CompileMicroSeconds" units="microseconds">
-  <owner>jochen@chromium.org</owner>
-  <owner>yangguo@chromium.org</owner>
-  <summary>Time spent in V8 compiler (full codegen) excluding parser.</summary>
-</histogram>
-
-<histogram name="V8.CompileNoncacheableMicroSeconds" units="microseconds">
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Time spent compiling a script that cannot be subject to caching.
-  </summary>
-</histogram>
-
-<histogram name="V8.CompileScript" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileScriptMicroSeconds.
-  </obsolete>
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Total time spent in compiling a script (incl. parsing/caching).
-  </summary>
-</histogram>
-
-<histogram name="V8.CompileScriptMicroSeconds" units="microseconds">
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Total time spent in compiling a script (incl. parsing/caching).
-  </summary>
-</histogram>
-
-<histogram name="V8.CompileSerialize" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.CompileSerializeMicroSeconds.
-  </obsolete>
-  <owner>vogelheim@chromium.org</owner>
-  <summary>Time spent serializing code, used by V8 code caching.</summary>
-</histogram>
-
-<histogram name="V8.CompileSerializeMicroSeconds" units="microseconds">
-  <owner>vogelheim@chromium.org</owner>
-  <summary>Time spent serializing code, used by V8 code caching.</summary>
-</histogram>
-
-<histogram name="V8.DebugFeatureUsage" enum="V8DebugFeature">
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    Debugger feature used at least once per isolate, recorded on first use.
-  </summary>
-</histogram>
-
-<histogram name="V8.DeferredCodeGeneration">
-  <obsolete>
-    This histogram is no longer present in V8
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>Time spent generating deferred code stubs.</summary>
-</histogram>
-
-<histogram name="V8.DetachedContextAgeInGC">
-  <owner>ulan@chromium.org</owner>
-  <summary>
-    Number of garbage collections that a detached global context survives,
-    recorded after each major garbage collection. Values greater than 7 indicate
-    a memory leak.
-  </summary>
-</histogram>
-
-<histogram name="V8.ErrorsThrownPerContext" units="errors">
-  <owner>hablich@chromium.org</owner>
-  <summary>
-    The amount of JavaScript errors thrown by V8 per context. It does not count
-    custom errors and ignores catched errors thrown by V8. This is collected
-    after the context is detached.
-  </summary>
-</histogram>
-
-<histogram name="V8.ExecutableMemoryMax" units="bytes">
-  <obsolete>
-    This histogram is no longer present in V8
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>
-    The maximum memory used to store V8 compiled code on a given process.
-  </summary>
-</histogram>
-
-<histogram name="V8.Execute" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>rmcilroy@chromium.org</owner>
-  <summary>
-    Time spent in JavaScript Execution, including runtime calls, callbacks, and
-    lazy compilation.
-  </summary>
-</histogram>
-
-<histogram name="V8.GCCompactor" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in mark-sweep phase of GC.</summary>
-</histogram>
-
-<histogram name="V8.GCContext" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent doing a full GC during an IdleNotification.</summary>
-</histogram>
-
-<histogram name="V8.GCFinalizeMC" units="ms">
-  <owner>ulan@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in finalize incremental mark-sweep phase of GC.</summary>
-</histogram>
-
-<histogram name="V8.GCFinalizeMCReduceMemory" units="ms">
-  <owner>ulan@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Time spent in finalize incremental memory-reducing mark-sweep phase of GC.
-  </summary>
-</histogram>
-
-<histogram name="V8.GCFinalzeMC" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.GCFinalizeMC because of typo in the
-    name.
-  </obsolete>
-  <owner>ulan@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in finalize incremental mark-sweep phase of GC.</summary>
-</histogram>
-
-<histogram name="V8.GCIdleNotification" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in IdleNotifications.</summary>
-</histogram>
-
-<histogram name="V8.GCIdleTimeAllottedInMS" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Idle time passed to V8 via IdleNotifications.</summary>
-</histogram>
-
-<histogram name="V8.GCIdleTimeLimit.Overshot" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Milliseconds the idle time limit was overshot by the IdleNotification.
-  </summary>
-</histogram>
-
-<histogram name="V8.GCIdleTimeLimit.Undershot" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Milliseconds the idle time limit was undershot by the IdleNotification.
-  </summary>
-</histogram>
-
-<histogram name="V8.GCIncrementalMarking" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent doing incremental marking steps during GC.</summary>
-</histogram>
-
-<histogram name="V8.GCIncrementalMarkingFinalize" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in finalizing incremental marking.</summary>
-</histogram>
-
-<histogram name="V8.GCIncrementalMarkingReason" enum="GarbageCollectionReason">
-  <owner>ulan@chromium.org</owner>
-  <summary>Reason an incremental marking was started in V8.</summary>
-</histogram>
-
-<histogram name="V8.GCIncrementalMarkingStart" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in starting incremental marking.</summary>
-</histogram>
-
-<histogram name="V8.GCLowMemoryNotification" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in LowMemoryNotifications.</summary>
-</histogram>
-
-<histogram name="V8.GCMarkCompactReason" enum="GarbageCollectionReason">
-  <owner>ulan@chromium.org</owner>
-  <summary>Reason a mark-compact garbage collection was started in V8.</summary>
-</histogram>
-
-<histogram name="V8.GCScavenger" units="ms">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>Time spent in scavenging phase of GC.</summary>
-</histogram>
-
-<histogram name="V8.GCScavengeReason" enum="GarbageCollectionReason">
-  <owner>ulan@chromium.org</owner>
-  <summary>Reason a scavenge garbage collection was started in V8.</summary>
-</histogram>
-
-<histogram name="V8.GCYoungGenerationHandling" enum="YoungGenerationHandling">
-  <owner>mlippautz@chromium.org</owner>
-  <summary>
-    Type of garbage collection strategy used to collect the young generation.
-  </summary>
-</histogram>
-
-<histogram name="V8.Initializer.LoadV8Snapshot.Result"
-    enum="V8InitializerLoadV8SnapshotResult">
-  <owner>oth@chromium.org</owner>
-  <summary>Results from snapshot loading.</summary>
-</histogram>
-
-<histogram name="V8.Initializer.OpenV8File.Result"
-    enum="V8InitializerOpenV8FileResult">
-  <owner>oth@chromium.org</owner>
-  <summary>Results from opening V8 snapshot files.</summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationCellSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the cell space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationCodeSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the code space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationLoSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the large object space after each GC in
-    percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationMapSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the map space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationOldDataSpace" units="%">
-  <obsolete>
-    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the old data space after each GC in
-    percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationOldPointerSpace" units="%">
-  <obsolete>
-    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the old pointer space after each GC in
-    percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationOldSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    External memory fragmentation in the old space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryExternalFragmentationTotal" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Total external memory fragmentation after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapCommitted" units="KB">
-  <owner>ulan@chromium.org</owner>
-  <summary>
-    The committed memory used by V8 in KB averaged over time, logged before each
-    GC.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionCellSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the cell space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionCodeSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the code space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionLoSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the lo space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionMapSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the map space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionNewSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the new space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionOldDataSpace" units="%">
-  <obsolete>
-    This histogram has been replaced by V8.MemoryHeapFractionOldSpace.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the old data space after each GC in
-    percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionOldPointerSpace" units="%">
-  <obsolete>
-    This histogram has been replaced by V8.MemoryHeapFractionOldSpace.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the old pointer space after each GC in
-    percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapFractionOldSpace" units="%">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    Fraction of the total heap used by the old space after each GC in percent.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapSampleCellSpaceCommitted" units="KB">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    The size of committed memory in the cell space after each GC in KB.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapSampleCodeSpaceCommitted" units="KB">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    The size of committed memory in the code space after each GC in KB.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapSampleMapSpaceCommitted" units="KB">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    The size of committed memory in the map space after each GC in KB.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapSampleTotalCommitted" units="KB">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    The total size of committed memory used by V8 after each GC in KB.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapSampleTotalUsed" units="KB">
-  <owner>jochen@chromium.org</owner>
-  <owner>hpayer@chromium.org</owner>
-  <summary>
-    The total size of live memory used by V8 after each GC in KB.
-  </summary>
-</histogram>
-
-<histogram name="V8.MemoryHeapUsed" units="KB">
-  <owner>ulan@chromium.org</owner>
-  <summary>
-    The live memory used by V8 in KB averaged over time, logged before each GC.
-  </summary>
-</histogram>
-
-<histogram name="V8.Parse" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.ParseMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>Time spent in V8 parser.</summary>
-</histogram>
-
-<histogram name="V8.ParseLazy" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.ParseLazyMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>
-    Time spent parsing functions when they are lazily compiled on first run.
-  </summary>
-</histogram>
-
-<histogram name="V8.ParseLazyMicroSeconds" units="microseconds">
-  <obsolete>
-    Deprecated.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>
-    Time spent parsing functions when they are lazily compiled on first run.
-  </summary>
-</histogram>
-
-<histogram name="V8.ParseMicroSeconds" units="microseconds">
-  <obsolete>
-    Deprecated.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>Time spent in V8 parser.</summary>
-</histogram>
-
-<histogram name="V8.PreParse" units="ms">
-  <obsolete>
-    This histogram has been replaced by V8.PreParseMicroSeconds.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>Time spent preparsing source code.</summary>
-</histogram>
-
-<histogram name="V8.PreParseMicroSeconds" units="microseconds">
-  <obsolete>
-    Deprecated.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>marja@chromium.org</owner>
-  <summary>Time spent preparsing source code.</summary>
-</histogram>
-
-<histogram name="V8.Rewriting">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>Time spent on rewriting ASTs before compilation.</summary>
-</histogram>
-
-<histogram name="V8.RSetLO">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="V8.RSetPaged">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="V8.ScriptCache">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <owner>yangguo@chromium.org</owner>
-  <summary>
-    The generation a compiled script was found in the compilation cache.
-  </summary>
-</histogram>
-
-<histogram name="V8.UsageAnalysis">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>Time spent analysing the usage of variables.</summary>
-</histogram>
-
-<histogram name="V8.VariableAllocation">
-  <obsolete>
-    This histogram is no longer present in V8.
-  </obsolete>
-  <owner>jochen@chromium.org</owner>
-  <summary>TBD</summary>
-</histogram>
-
-<histogram name="V8.WasmCompileFunctionMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Time to compile a WebAssembly function.</summary>
-</histogram>
-
-<histogram name="V8.WasmCompileFunctionPeakMemoryBytes" units="bytes">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Peak memory used to compile a WebAssembly function.</summary>
-</histogram>
-
-<histogram name="V8.WasmCompileModuleMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Time to compile a WebAssembly module.</summary>
-</histogram>
-
-<histogram name="V8.WasmDecodeFunctionMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Time to decode a WebAssembly function.</summary>
-</histogram>
-
-<histogram name="V8.WasmDecodeModuleMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Time to decode a WebAssembly module.</summary>
-</histogram>
-
-<histogram name="V8.WasmDecodeModulePeakMemoryBytes" units="bytes">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Peak memory used to decode a WebAssembly module.</summary>
-</histogram>
-
-<histogram name="V8.WasmFunctionSizeBytes" units="bytes">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Size of a WebAssembly function.</summary>
-</histogram>
-
-<histogram name="V8.WasmFunctionsPerModule" units="functions">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Function count in each WebAssembly module.</summary>
-</histogram>
-
-<histogram name="V8.WasmInstantiateModuleMicroSeconds" units="microseconds">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Time to instantiate a WebAssembly module.</summary>
-</histogram>
-
-<histogram name="V8.WasmMaxMemPagesCount" units="pages">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>
-    Number of 64KiB pages a WebAssembly module declares as its maximum
-    requirement.
-  </summary>
-</histogram>
-
-<histogram name="V8.WasmMinMemPagesCount" units="pages">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>
-    Number of 64KiB pages a WebAssembly module declares as its minimum
-    requirement.
-  </summary>
-</histogram>
-
-<histogram name="V8.WasmModuleSizeBytes" units="bytes">
-  <owner>bradnelson@chromium.org</owner>
-  <owner>titzer@chromium.org</owner>
-  <summary>Size of a WebAssembly module.</summary>
-</histogram>
-
-<histogram name="Variations.CreateTrials.SeedExpiry"
-    enum="VariationsSeedExpiry">
-  <owner>asvitkine@chromium.org</owner>
-  <owner>fdoray@chromium.org</owner>
-  <summary>
-    The result of verifying if the variations seed is expired, recorded before
-    trials are created from the seed. Expired seeds are treated as not existing.
-  </summary>
-</histogram>
-
-<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit">
-  <obsolete>
-    Deprecated 1/2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    A count of the number of times we hit the code where a field trial is
-    disabled because no entropy provider was provided.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes">
-  <obsolete>
-    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The counts of network error codes encountered by VariationsService when an
-    attempt to fetch a variations seed from the server fails.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FetchNotModifiedLatency" units="ms">
-  <obsolete>
-    Deprecated 2/2014. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The latency of a VariationsService seed fetch that results in a not modified
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FetchOtherLatency" units="ms">
-  <obsolete>
-    Deprecated 2/2014. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The latency of a VariationsService seed fetch that results in neither a
-    success nor not modified response.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FetchSuccessLatency" units="ms">
-  <obsolete>
-    Deprecated 2/2014. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The latency of a VariationsService seed fetch that results in a success
-    response.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FirstRun.SeedConnectTime" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The latency of connection to the variations server when fetching an initial
-    variations seed during Android Chrome first run. This is included in the
-    Variations.FirstRun.SeedFetchTime measurement. Only considers cases where an
-    HTTP 200 result was received.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FirstRun.SeedFetchResult"
-    enum="VariationsFirstRunSeedFetchResult">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The result of attempting to fetch an initial variations seed during Android
-    Chrome first run. Records both the HTTP code and various error values in one
-    enumeration.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FirstRun.SeedFetchTime" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The latency of fetching an initial variations seed during Android Chrome
-    first run. Only considers cases where an HTTP 200 result was received.
-  </summary>
-</histogram>
-
-<histogram name="Variations.FirstRunResult" enum="VariationsFirstRunResult">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The result of attempting to import an initial variations seed during Android
-    Chrome first run. Logged from VariationsSeedStore::LoadSeed when seed prefs
-    do not exist.
-  </summary>
-</histogram>
-
-<histogram name="Variations.GoogleUpdateRegistryLabelsNeedClearing"
-    enum="BooleanNeedsClearing">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    If the registry value for Google Update experiment labels contains
-    Variations experiments, and therefore needs to have them cleared. This will
-    be recorderd once per sessions, right before attempting to clear the value.
-  </summary>
-</histogram>
-
-<histogram name="Variations.HeaderConstructionTime" units="microseconds">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>How long it took to create the X-Client-Data header.</summary>
-</histogram>
-
-<histogram name="Variations.Headers.ExperimentCount">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records number of experiment ids in the X-Client-Data header at the time the
-    header is constructed.
-  </summary>
-</histogram>
-
-<histogram name="Variations.Headers.URLValidationResult"
-    enum="VariationsHeadersURLValidationResult">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    The result of the check of whether to append Variations headers to a url.
-  </summary>
-</histogram>
-
-<histogram name="Variations.LoadPermanentConsistencyCountryResult"
-    enum="VariationsPermanentConsistencyCountryResult">
-  <owner>sclittle@chromium.org</owner>
-  <summary>
-    Records how the country code saved in prefs used for filtering permanent
-    consistency studies compares to the country code in the variations seed.
-    This is recorded each time the saved country code is loaded from the pref.
-  </summary>
-</histogram>
-
-<histogram name="Variations.LoadSeedSignature" enum="VariationSeedSignature">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The result of verifying the variations seed signature, recorded when the
-    variations seed is stored to Local State after being retrieved from the
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess">
-  <obsolete>
-    Deprecated 9/2012. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Whether or not the network was available when requested by the
-    VariationsService.
-  </summary>
-</histogram>
-
-<histogram name="Variations.RequestCount">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Number of previous requests to the variations server in the same session,
-    logged each time a new request is attempted to the variations server. For
-    example, the value of the 0th bucket indicates the number of initial
-    requests to the server that took place.
-  </summary>
-</histogram>
-
-<histogram name="Variations.ResourceRequestsAllowed"
-    enum="VariationsResourceRequestsAllowedState">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Counts the number of times the VariationsService is allowed or not allowed
-    to make a request due to the ResourceRequestAllowedNotifier.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedDateChange" enum="VariationsSeedDateChange">
-  <owner>jwd@chromium.org</owner>
-  <summary>
-    Counts if a response from the variations server is the first response of the
-    day or not. This is counted when a new valid seed or a 304 is received. The
-    date line is computed in UTC and the times being compared are the server
-    time from the server response and the stored server time from the last
-    successful request.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedDateSkew.BuildTimeAheadBy" units="days">
-  <obsolete>
-    Deprecated as of 9/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on startup when creating field trials from the variations seed if the
-    build time is ahead of or within 24 hours of the kVariationsSeedDate. Used
-    as an experiment to see whether the build time could be used to discard very
-    old seeds.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedDateSkew.BuildTimeBehindBy" units="days">
-  <obsolete>
-    Deprecated as of 9/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on startup when creating field trials from the variations seed if the
-    build time is behind the kVariationsSeedDate by a day or more. Used as an
-    experiment to see whether the build time could be used to discard very old
-    seeds.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedDateSkew.SystemClockAheadBy" units="days">
-  <obsolete>
-    Deprecated as of 9/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on startup when creating field trials from the variations seed if the
-    system clock is ahead of or within 24 hours of the kVariationsSeedDate. Used
-    as an experiment to see whether the system clock could be used to discard
-    very old seeds.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedDateSkew.SystemClockBehindBy" units="days">
-  <obsolete>
-    Deprecated as of 9/2015.
-  </obsolete>
-  <owner>gab@chromium.org</owner>
-  <summary>
-    Logged on startup when creating field trials from the variations seed if the
-    system clock is behind the kVariationsSeedDate by a day or more. Used as an
-    experiment to see whether the system clock could be used to discard very old
-    seeds.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedEmpty" enum="VariationsSeedEmpty">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records whether the variations seed in local state is empty (does not exist)
-    on startup.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedFetchResponseCode" enum="HttpResponseCode">
-  <obsolete>
-    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The counts of HTTP response codes encountered by VariationsService when
-    attempting to fetch a variations seed from the server.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedFetchResponseOrErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    HTTP response codes and network error encountered by VariationsService when
-    attempting to fetch a variations seed from the server.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedFreshness" units="minutes">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time interval between when the variations seed was last downloaded and
-    when it was used.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SeedStoreResult" enum="VariationsSeedStoreResult">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the result of storing the variations seed that was received from the
-    server.
-  </summary>
-</histogram>
-
-<histogram name="Variations.ServerStudyExpiredUniformity1Percent"
-    enum="BooleanExpired">
-  <obsolete>
-    Deprecated 11/2012. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Whether or not the 1-Percent uniformity trial from the Variations server was
-    expired when loaded.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SimulateSeed.Duration" units="ms">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the time taken to perform variations seed simulation.
-
-    Recorded on every variation seed simulation, which follows a fetch.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SimulateSeed.KillBestEffortChanges">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the result of variations seed simulation. Logs the number of
-    experiment groups in the &quot;kill best effort&quot; category that are
-    expected to change on a restart of the browser with the received seed.
-
-    Recorded on every variation seed simulation, which follows a fetch.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SimulateSeed.KillCriticalChanges">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the result of variations seed simulation. Logs the number of
-    experiment groups in the &quot;kill critical&quot; category that are
-    expected to change on a restart of the browser with the received seed.
-
-    Recorded on every variation seed simulation, which follows a fetch.
-  </summary>
-</histogram>
-
-<histogram name="Variations.SimulateSeed.NormalChanges">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the result of variations seed simulation. Logs the number of
-    experiment groups in the &quot;normal&quot; category that are expected to
-    change on a restart of the browser with the received seed.
-
-    Recorded on every variation seed simulation, which follows a fetch.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeed.DeltaSize" units="KiB">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    On successful save of a delta-compressed variations seed, records the size
-    of the delta in KiB.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeed.DeltaSize.ReductionPercent" units="%">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    On successful save of a delta-compressed variations seed, records the size
-    of the delta as a percentage of the decoded seed size.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeed.GzipSize" units="KiB">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the size of the gzip-compressed variations seed in KiB.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeed.GzipSize.ReductionPercent" units="%">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the size of the gzip-compressed variations seed as a percentage of
-    the decoded seed size. Note that variations seed could be first
-    delta-compressed and then gzip-compressed. In this case we record
-    gzip-compressed seed size as a percentage of the delta-compressed seed size.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeed.Size" units="KiB">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    On successful save of a non-delta-compressed variations seed, records the
-    size of the received seed in KiB.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StoreSeedSignature" enum="VariationSeedSignature">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The result of verifying the variations seed signature, recorded when the
-    variations seed is loaded from Local State.
-  </summary>
-</histogram>
-
-<histogram name="Variations.StringsOverridden" units="strings">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Records the number of UI strings overriden for each study that overrides
-    strings. Recorded at start up when each study is evaluated.
-  </summary>
-</histogram>
-
-<histogram name="Variations.TimeSinceLastFetchAttempt" units="minutes">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    The time since the previous attempt to fetch the variations seed within the
-    same session, with 0 indicating that this is the first attempt. Recorded
-    when a variations seed fetch is attempted by the VariationsService.
-  </summary>
-</histogram>
-
-<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit">
-  <obsolete>
-    Deprecated 1/2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    A count of the number of times we hit the code where the
-    UMA-Uniformity-Trial-1-Percent field trial is disabled as a result of the
-    expiration check.
-  </summary>
-</histogram>
-
-<histogram name="Variations.UniformityTrialGroupNotActive"
-    enum="UniformityTrialGroupNotActive">
-  <obsolete>
-    Deprecated 1/2013. No longer tracked.
-  </obsolete>
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Tracks whether the UMA-Uniformity-Trial-1-Percent field trial was not active
-    and which factors contributed to it.
-  </summary>
-</histogram>
-
-<histogram name="Variations.UserChannel" enum="UserChannels">
-  <owner>asvitkine@chromium.org</owner>
-  <summary>
-    Log the user channel assigned at browser startup used for evaluating the
-    variations seeds.
-  </summary>
-</histogram>
-
-<histogram name="Vibration.Context" enum="NavigatorVibrationType">
-  <owner>binlu@google.com</owner>
-  <summary>
-    Records instances of navigator.vibrate. Includes whether or not it comes
-    with a user gesture, same-origin subframe or cross-origin subframe.
-  </summary>
-</histogram>
-
-<histogram name="VideoPlayer.CastAPIExtensionStatus"
-    enum="VideoPlayerCastAPIExtensionStatus">
-  <owner>yoshiki@chromium.org</owner>
-  <summary>
-    Chrome OS Video Player: the results of the cast API extension load. This is
-    recorded after the initialization of the extension is finished.
-  </summary>
-</histogram>
-
-<histogram name="VideoPlayer.CastedVideoLength" units="seconds">
-  <owner>yoshiki@chromium.org</owner>
-  <summary>
-    Chrome OS Video Player: the length of casted video (in seconds).
-  </summary>
-</histogram>
-
-<histogram name="VideoPlayer.NumberOfCastDevices">
-  <owner>yoshiki@chromium.org</owner>
-  <summary>
-    Chrome OS Video Player: the number of cast devices. This is recorded when
-    the cast extension finishes the discovery.
-  </summary>
-</histogram>
-
-<histogram name="VideoPlayer.NumberOfOpenedFiles">
-  <owner>yoshiki@chromium.org</owner>
-  <summary>
-    Chrome OS Video Player: the number of files being opened on launch.
-  </summary>
-</histogram>
-
-<histogram name="VideoPlayer.PlayType" enum="VideoPlayerPlayType">
-  <owner>yoshiki@chromium.org</owner>
-  <summary>
-    Chrome OS Video Player: type of playback (eg. local play, cast). This is
-    recorded when a video starts playing.
-  </summary>
-</histogram>
-
-<histogram name="Viewport.DidScalePage" enum="BooleanDidScalePage">
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    Tracks the proportion of non-mobile optimized (i.e. zoom disabled or layout
-    width matches viewport) page views that had a user-initiated page scale
-    (e.g. pinch-zoom, double-tap). Recorded on navigation to a new page - on
-    Android only.
-  </summary>
-</histogram>
-
-<histogram name="Viewport.MaxPageScale" enum="PageScaleFactorRange">
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    Tracks the maximum scale factor that a user has scaled to over the lifetime
-    of the page. The scale is counted at pinch end (e.g. zooming to 300% and
-    back out to 150% in one gesture would count as 150%). Reported only on
-    non-mobile optimized pages (i.e. zoom disabled or layout width matches
-    viewport) which have had a page scale changing gesture. Recorded on
-    navigation to a new page - on Android only.
-  </summary>
-</histogram>
-
-<histogram name="Viewport.MetaTagType" enum="MetaTagTypeEnum">
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    The viewport meta tag type seen on each page load. Only recorded on Android.
-  </summary>
-</histogram>
-
-<histogram name="Viewport.OverviewZoom" units="%">
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    The screen width as a percentage of viewport width (i.e. zoom at which we
-    can see the whole page). Only recorded on Android and for viewport meta tags
-    with constant width.
-  </summary>
-</histogram>
-
-<histogram name="VirtualKeyboard.InitLatency.FirstLoad" units="ms">
-  <owner>oka@chromium.org</owner>
-  <summary>Latency of the keyboard being loaded for the first time.</summary>
-</histogram>
-
-<histogram name="VirtualKeyboard.KeyboardControlEvent"
-    enum="KeyboardControlEvent">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    A count of various control events that can occur on the virtual keyboard,
-    such as showing and hiding.
-  </summary>
-</histogram>
-
-<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace">
-  <obsolete>
-    Deprecated 04/2016 as doesn't have data nor owner.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Counts the number of keys typed by the virtual keyboard between each
-    backspace. This metric provides a rough approximation of an error rate for
-    the virtual keyboard.
-  </summary>
-</histogram>
-
-<histogram name="VRDisplayPresentResult" enum="PresentationResult">
-  <owner>billorr@chromium.org</owner>
-  <summary>
-    The result of calls to VRDisplay::requestPresent().  Reported twice per
-    requestPresent() call, once to record the call, and once to record the
-    result.
-  </summary>
-</histogram>
-
-<histogram name="VRSessionNavigationCount">
-  <owner>billorr@chromium.org</owner>
-  <summary>
-    Count of navigations while in a VR session.  Logged when a new disjoint
-    session has begun, or when the session has ended in a non-continuable way.
-  </summary>
-</histogram>
-
-<histogram name="VRSessionTime" units="ms">
-  <owner>billorr@chromium.org</owner>
-  <summary>
-    The duration of the VR session.  Logged when a new disjoint session has
-    begun, or when the session has ended in a non-continuable way.
-  </summary>
-</histogram>
-
-<histogram name="VRSessionVideoCount">
-  <owner>billorr@chromium.org</owner>
-  <summary>
-    Number of videos watched in a VR session.  Logged when a new disjoint
-    session has begun, or when the session has ended in a non-continuable way.
-  </summary>
-</histogram>
-
-<histogram name="VRSessionVideoTime" units="ms">
-  <owner>billorr@chromium.org</owner>
-  <summary>
-    The duration of a single session spent watching video in VR.  Logged when a
-    new disjoint session has begun, or when the session has ended in a
-    non-continuable way.
-  </summary>
-</histogram>
-
-<histogram name="VRViewerType" enum="VRViewerType">
-  <owner>billorr@chromium.org</owner>
-  <summary>The type of headset being used for VR.</summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.AcceptLegalDocuments" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's accept legal
-    document API call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.AuthenticateInstrument" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's authenticate
-    instrument API call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.GetFullWallet" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's get full wallet API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.GetWalletItems" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's get wallet items
-    API call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms">
-  <obsolete>
-    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's save address API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms">
-  <obsolete>
-    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's save instrument API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms">
-  <obsolete>
-    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's save instument and
-    address API call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveToWallet" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's save to wallet API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SendStatus" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's send status API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UnknownApiCall" units="ms">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's unknown API calls.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms">
-  <obsolete>
-    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's update address API
-    call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms">
-  <obsolete>
-    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
-  </obsolete>
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Measures the time taken by Google Online Wallet server's update instument
-    API call.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.MalformedResponse" enum="WalletApiCall">
-  <owner>estade@chromium.org</owner>
-  <summary>
-    Counts the number of times each Wallet API failed due to being unable to
-    parse the response.
-  </summary>
-</histogram>
-
-<histogram name="Wallet.ResponseCode" enum="HttpResponseCode">
-  <owner>estade@chromium.org</owner>
-  <summary>HTTP response codes seen by Wallet client.</summary>
-</histogram>
-
-<histogram name="Web.CertVerifyAgreement" enum="WebCertVerifyAgreement">
-  <obsolete>
-    Deprecated 08/2016 because CertVerifier is not used for web view cert
-    verification.
-  </obsolete>
-  <owner>eugenebut@chromium.com</owner>
-  <summary>
-    [iOS] Reports certificate verification mismatch between SecTrust API and
-    CertVerifier. SecTrust API is used for making load/no-load decision and
-    CertVerifier is used for getting the reason of verification failure. It is
-    expected that mismatches will happen for those 2 approaches (e.g. SecTrust
-    API considers cert as good, but CertVerifier considers same cert as bad).
-    This metric helps to understand how common mismatches are.
-  </summary>
-</histogram>
-
-<histogram name="Web.CurrentURLEqualsLastCommittedURL" enum="BooleanEqual">
-  <owner>michaeldo@chromium.com</owner>
-  <summary>
-    [iOS] Reports URL matches between the return value from the WebState's
-    GetLastCommittedURL and GetCurrentURL methods. It is expected the values
-    will be equal to confirm that GetCurrentURL can now be replaced with
-    GetLastCommittedURL. This will be called each time WebStateImpl::
-    GetCurrentURL(URLVerificationTrustLevel* trust_level) is called, which is an
-    old method of obtaining the url and trust level. The trust level was only
-    relevant with UIWebView, so this method is only called from code which has
-    not yet been updated since UIWebView was removed.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.GooglePlayInstallState"
-    enum="WebApkGooglePlayInstallState">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    On web app and WebAPK installation, records whether a WebAPK could be
-    installed via the Google Play flow. If not, records why the WebAPK could not
-    be installed via the Google Play flow (and a web app was added to the
-    homescreen instead). Warning: This metric is recorded whenever a site is
-    added to the homescreeen as a web app, not just for sites with a WebAPK
-    compatible Web Manifest.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.InfoBarShown" enum="WebApkInstallInfoBarShown">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
-    the add to homescreen menu item. This stat tracks whether the installation
-    is triggered by an app banner or by the add to homescreen menu.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.InstallDuration" units="ms">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    How long it takes to install a WebAPK. The time is measured from the time
-    that the user initiates the install to the time that the Open button is
-    shown in the infobar. This metric is only recorded when install succeeds.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.InstallEvent" enum="WebApkInstallEvent">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
-    the add to homescreen menu item. This stat tracks the WebAPKs installation
-    events, including whether the infobar is ignored, whether the infobar is
-    dismissed by the user before or during the installation, as well as whether
-    the installation was successful.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.InstallSource" enum="WebApkInstallSource">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
-    the add to homescreen menu item. If the installation is via an app banner,
-    user could either accept to install or dismiss the infobar; while via the
-    add to homescreen menu, the installation will start automatically. This stat
-    tracks the ways that user accepts to install a WebAPK.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Install.UserAction" enum="WebApkUserAction">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
-    the add to homescreen menu item. If the user clicks the add to homescreen
-    menu, and a WebAPK has been installed before, an infobar with an open button
-    will show. The open button will also show on the infobar after a successful
-    installation. This stat tracks whether user clicks the open button on the
-    infobar or dismiss it.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.OpenFromMenu" enum="WebApkOpenResult">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <summary>
-    When a user visits a PWA for which they have a WebAPK installed, the menu
-    item changes from 'Add to homescreen' to 'Open WebAPK'. This stat tracks
-    whether the opening of the WebAPK is successful when this menu item is
-    clicked.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Update.RequestQueued" enum="WebApkUpdateRequestQueued">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Records the number of times that a WebAPK update request was queued (i.e.
-    waiting for the WebAPK to be backgrounded) before being sent to the server.
-  </summary>
-</histogram>
-
-<histogram name="WebApk.Update.RequestSent" enum="WebApkUpdateRequestSent">
-  <owner>hanxi@chromium.org</owner>
-  <owner>pkotwicz@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
-  <summary>
-    Records the time point when a request to update a WebAPK is sent to the
-    WebAPK Server.
-  </summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.BackgroundColor"
-    enum="SplashscreenColorStatus">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records the status of the splashscreen's background color (default or
-    custom).
-  </summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.Duration" units="ms">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>Records the time during which the splashscreen was visible.</summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.Hides" enum="SplashscreenHidesReason">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>Records the signal that was used to hide the splashscreen.</summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.Icon.Size" units="dp">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records the size of the icon used to construct the splashscreen in device
-    pixels (ie. real size divided by device pixel density). This is only
-    recording one dimension, the icon being square.
-  </summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.Icon.Type" enum="SplashscreenIconType">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records the origin of the icon used to construct the splashscreen.
-  </summary>
-</histogram>
-
-<histogram name="Webapp.Splashscreen.ThemeColor" enum="SplashscreenColorStatus">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records the status of the splashscreen's theme color (default or custom).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.Length" units="frames">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The length (in frames) requested by createBuffer(). Recorded for every call
-    to createBuffer(). Probably many (tens or hundreds) per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.NumberOfChannels">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The number of channels requested by createBuffer(). Recorded for every call
-    to createBuffer(). Probably many (tens or hundreds) per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.SampleRate" units="Hz">
-  <obsolete>
-    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
-    supported sample rates.
-  </obsolete>
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
-    to createBuffer(). Probably many (tens or hundreds) per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
-    to createBuffer(). Probably many (tens or hundreds) per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.SampleRateRatio">
-  <obsolete>
-    Replaced by SampleRateRatio384kHz in Issue 644683 on 2016/10 due to higher
-    supported sample rates.
-  </obsolete>
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The ratio of the buffer sample rate from createBuffer() to the context
-    sample rate. This indicates if the buffer needs to be resampled.  Recorded
-    for every call to createBuffer().  Probably many (tens or hundreds) per
-    page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The ratio of the buffer sample rate from createBuffer() to the context
-    sample rate. This indicates if the buffer needs to be resampled.  Recorded
-    for every call to createBuffer().  Probably many (tens or hundreds) per
-    page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioContext.HardwareSampleRate" units="Hz">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The hardware sample rate (in Hz) used by an AudioContext. Recorded for every
-    WebAudio AudioContext that is created; probably only one or two per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioContext.MaxChannelsAvailable">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The maximum number of (hardware) channels available in an AudioContext.
-    Recorded for every WebAudio AudioContext that is created; probably only one
-    or two per page.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioDestination.CallbackBufferSize">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The callback buffer size (in audio frames) for WebAudio rendering between
-    the WebAudio graph and the audio device thread.  This can differ from the
-    value recommended by the audio hardware due to internal constraints in
-    WebAudio. Recorded for every WebAudio AudioContext that is created.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.AudioDestination.HardwareBufferSize">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The buffer size (in audio frames) for WebAudio rendering recommended by the
-    audio hardware.  Recorded for every WebAudio AudioContext that is created.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.Autoplay.CrossOrigin" enum="WebAudioAutoplayStatus">
-  <owner>mlamouri@chromium.org</owner>
-  <summary>The autoplay status of an AudioContext when destroyed.</summary>
-</histogram>
-
-<histogram name="WebAudio.BiquadFilter.Q.Highpass">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The Q value (in 0.25 dB steps) used for a highpass BiquadFilter. Recorded
-    each time the value is set for a highpass filter via the .value setter or
-    the automation methods linearRampToValueAtTime, exponentialValueAtTime, and
-    setValueAtTime.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.BiquadFilter.Q.Lowpass">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The Q value (in 0.25 dB steps) used for a lowpass BiquadFilter. Recorded
-    each time the value is set for a lowpass filter via the .value setter or the
-    automation methods linearRampToValueAtTime, exponentialValueAtTime, and
-    setValueAtTime.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The type of the BiquadFilterNode. Recorded each time the type is set. This
-    recorded once (to lowpass) when a biquad filter is created and also recorded
-    whenever the filter type changes due to user action or programatically. It
-    is unlikely the type will change more than once.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.IIRFilterNode.Order">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The order of the WebAudio IIRFilterNode.  The order is one less than the
-    number of feedback coefficients used in the denominator of the IIRFilter
-    transfer function.  Recorded each time an IIRFilter is constructed.
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.OfflineAudioContext.ChannelCount">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The number of channels specified for the offline audio context. Recorded for
-    every offline context created. Probably only a few per page, but could be
-    potentially much more (thousands).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.OfflineAudioContext.Length" units="frames">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The length (in frames) specified for the offline audio context. Recorded for
-    every offline context created. Probably only a few per page, but could be
-    potentially much more (thousands).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.OfflineAudioContext.SampleRate" units="Hz">
-  <obsolete>
-    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
-    supported sample rates.
-  </obsolete>
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The sample rate (in Hz) specified for the offline audio context. Recorded
-    for every offline context created.  Probably only a few per page, but could
-    be potentially much more (thousands).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.OfflineAudioContext.SampleRate384kHz" units="Hz">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The sample rate (in Hz) specified for the offline audio context. Recorded
-    for every offline context created.  Probably only a few per page, but could
-    be potentially much more (thousands).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType">
-  <owner>rtoy@chromium.org</owner>
-  <owner>hongchan@chromium.org</owner>
-  <summary>
-    The panning model for the PannerNode. Recorded once with the default value
-    at creation and once again whenver it is changed.  Once changed, it is
-    unlikely to be changed again. If there are any PannerNodes created at all,
-    then there is probably one for each source (AudioBufferSourceNode,
-    OscillatorNode, or other source).
-  </summary>
-</histogram>
-
-<histogram name="WebAudio.UserGesture" enum="UserGestureRequirement">
-  <obsolete>
-    Deprecated 2016-09. As of M55, this is no longer recorded.
-  </obsolete>
-  <owner>mlamouri@chromium.org</owner>
-  <summary>
-    Records whether WebAudio had a user gesture requirement and whether it was
-    fulfilled.
-  </summary>
-</histogram>
-
-<histogram name="WebController.CertVerificationErrorsCacheHit"
-    enum="BooleanCacheHit">
-  <owner>eugenebut@chromium.org</owner>
-  <summary>
-    [iOS] Report cache hit/miss for WKWebView cert verification. WKWebView Web
-    Controller has a cache of pending cert verification results to avoid extra
-    verifications when presenting SSL interstitial. This metric helps to
-    understand whether or not cache miss is possible.
-  </summary>
-</histogram>
-
-<histogram name="WebController.EmptyNavigationManagerCausedByStopLoading"
-    enum="Boolean">
-  <owner>eugenebut@chromium.org</owner>
-  <summary>
-    [iOS] Chrome for iOS crashes because NavigationManager does not have any
-    navigation items and visible navigation item is dereferenced
-    (crbug.com/565457). The assumption is that crash occurs if pending load was
-    stopped for a child window. This metric will prove or disprove that
-    assumption.
-  </summary>
-</histogram>
-
-<histogram name="WebController.ExternalURLRequestBlocking"
-    enum="IOSExternalURLRequestStatus">
-  <owner>mrefaat@chromium.org</owner>
-  <summary>
-    [iOS] Measures the proportion of external URL requests that originate from a
-    subframe without any user interaction (e.g. an advertisement contains an
-    iframe directed at the App Store).
-  </summary>
-</histogram>
-
-<histogram
-    name="WebController.StartProvisionalNavigationExitedWithEmptyNavigationManager"
-    enum="BooleanHit">
-  <obsolete>
-    Deprecated 2017-02. This metric disproved the assumption mentioned in the
-    summary and it is no longer needed.
-  </obsolete>
-  <owner>eugenebut@chromium.org</owner>
-  <summary>
-    Chrome for iOS crashes in |didCommitNavigation:| if Navigation Manager is
-    empty. It's unclear how the app can get into this state and one assumption
-    is that didStartProvisionalNavigation: does not add a pending navigation.
-    This metric is logged when didStartProvisionalNavigation: fails to add a
-    pending item.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties">
-  <owner>ajuma@chromium.org</owner>
-  <summary>
-    Counts the number of times each CSS property is animated. There is no limit
-    on the number of times each property is counted per page view -- a property
-    that is animated multiple times during a single page view is counted each
-    time it animates.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage">
-  <owner>zmin@chromium.org</owner>
-  <owner>junov@chromium.org</owner>
-  <summary>
-    The usage of Canvas 2D Context API. Logged when the particular API is used.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.DistillabilityUs" units="microseconds">
-  <owner>wychen@chromium.org</owner>
-  <summary>
-    The time spent on collecting the statistics of the document in the main
-    frame. These statistics would be used as features to classify whether the
-    page is suitable for DOM distiller.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.Document.execCommand" enum="MappedEditingCommands">
-  <owner>yoichio@chromium.org</owner>
-  <summary>
-    Counts the number of times each document.execCommand is executed. This
-    doesn't count commands not supported by Blink.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.Editing.Commands" enum="MappedEditingCommands">
-  <owner>yoichio@chromium.org</owner>
-  <summary>
-    Counts the number of times each Editor::Command::execute is called. This
-    doesn't count commands not supported by Blink.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.FeatureObserver" enum="FeatureObserver">
-  <owner>rbyers@chromium.org</owner>
-  <summary>
-    NOTE: As of M57 this has been superseded by Blink.UseCounter.Features which
-    fixes a number of issues.  See https://crbug.com/676837.
-
-    Count of how many page loads use various features. The PageVisits bucket is
-    incremented for each page load, and the other buckets incremented at most
-    once per PageVisit via the WebCore::UseCounter class.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.FeatureObserver.CSSProperties"
-    enum="MappedCSSProperties">
-  <owner>mikelawther@chromium.org</owner>
-  <summary>
-    NOTE: As of M57 this has been superseded by Blink.UseCounter.Features which
-    fixes a number of issues.  See https://crbug.com/676837.
-
-    Records usage of CSS properties used on a page, either statically or
-    dynamically, from the time the page is initialised to when it is closed or
-    navigated away from. Each property is counted at most once per page per
-    view.
-  </summary>
-  <details>
-    Every time a CSS property is parsed on a page, that property is recorded as
-    having been used. The histogram is updated with this data whenever a page is
-    closed, or a page navigation happens. Each histogram bucket corresponds to a
-    CSS property (eg width, border-radius). The exception is the bucket numbered
-    '1' - this counts the number of pages that CSS properties were counted on.
-
-    These numbers give the percentage of pages that use a CSS property. For
-    example, if the 'border-radius' histogram bucket has a count of 250, and the
-    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
-    that 1000 pages were recorded, and border-radius was used on 25% of those
-    pages.
-
-    Internally, each WebCore::Page has a WebCore::UseCounter instance, with
-    booleans recording use of each CSS property - one boolean per property. Upon
-    destruction of the WebCore::Page (e.g. by the user closing the tab), or a
-    page navigation happening, the histogram is updated. For each boolean that
-    is set to True, the corresponding histogram bucket for that CSS property is
-    incremented by 1. The page count bucket (i.e. bucket number 1) is always
-    incremented by 1 on each histogram update.
-  </details>
-</histogram>
-
-<histogram name="WebCore.Framebust" enum="FramebustPermissions">
-  <owner>japhet@chromium.org</owner>
-  <summary>
-    Records instances of child frames navigating the top frame. Includes whether
-    or not the navigation would have been permitted if not for our special case
-    for 'framebusting', the practice of ensuring a given document is never
-    displayed in a frame.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.ConsistencyError"
-    enum="IDBLevelDBBackingStoreInternalErrorType">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Methods that encountered consistency errors. Such errors probably point to a
-    bug in our code.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.InternalError"
-    enum="IDBLevelDBBackingStoreInternalErrorType">
-  <obsolete>
-    As of chrome 26, use {Consistency, Read, Write}Error instead.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Count of internal IndexedDB errors (data corruption, I/O errors, etc)
-    encountered.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus"
-    enum="IDBLevelDBBackingStoreOpenResult">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Count of the different success and failure modes when opening an IndexedDB
-    backing store - clean open, successful open with recovery, failed recovery,
-    etc. Includes all hosts.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus.Docs"
-    enum="IDBLevelDBBackingStoreOpenResult">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Count of the different success and failure modes when opening an IndexedDB
-    backing store - clean open, successful open with recovery, failed recovery,
-    etc. Only for docs.google.com.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OverlyLargeOriginLength"
-    units="characters">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Length of leveldb directories that cause paths to not fit in the filesystem,
-    either because the individual component is too long or the overall path is
-    larger than MAX_PATH.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.ReadError"
-    enum="IDBLevelDBBackingStoreInternalErrorType">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Methods that encountered leveldb errors while trying to read from disk.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.WriteError"
-    enum="IDBLevelDBBackingStoreInternalErrorType">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Methods that encountered leveldb errors while trying to write to disk.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Context.ForcedCloseReason"
-    enum="IDBContextForcedCloseReason">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>The reason that a forced-close of a backing store occurred.</summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Database.OutstandingTransactionCount"
-    units="transactions">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Number of outstanding transactions (running, blocked) in database when a new
-    transaction is created.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.FrontEndAPICalls"
-    enum="IndexedDatabaseMethods">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Count total number of front end API calls of IndexedDB methods.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.CloseTime" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time that it takes to close IndexedDB's LevelDB backing store.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.FreeDiskSpaceFailure"
-    enum="LevelDBErrorCount">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Count of how many times LevelDBDatabase got an error trying to check free
-    disk space.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Amount of free disk space on the partition/volume/etc where LevelDB failed
-    to open.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Amount of free disk space on the partition/volume/etc where LevelDB was
-    successfully opened.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.OpenTime" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time that it takes to open IndexedDB's LevelDB backing store.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.PutTime" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time that it takes to write the data IndexedDB to the LevelDB backing
-    store for a put operation.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time that it takes to commit an IndexedDB transaction to its LevelDB
-    backing store.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.WriteTime" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time that it takes to write data to an IndexedDB's LevelDB backing
-    store.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors" enum="LevelDBErrorTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Error classes returned by LevelDB when it failed to open a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"
-    enum="PlatformFileError">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    Errors (base::File::Error) encountered by a single LevelDBEnv method when
-    opening an IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Corruption"
-    enum="LevelDBCorruptionTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Types of corruption that LevelDB encounters when opening a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.EnvMethod"
-    enum="LevelDBIOErrorMethods">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    LevelDBEnv methods that generated IO errors when opening a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"
-    enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Errno errors encountered by a single LevelDBEnv method when opening an
-    IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"
-    enum="PlatformFileError">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
-    IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors" enum="LevelDBErrorTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Error classes returned by LevelDB when it failed to read a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"
-    enum="PlatformFileError">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    Errors (base::File::Error) encountered by a single LevelDBEnv method when
-    reading from an IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Corruption"
-    enum="LevelDBCorruptionTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Types of corruption that LevelDB encounters when reading a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.EnvMethod"
-    enum="LevelDBIOErrorMethods">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    LevelDBEnv methods that generated IO errors when reading a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"
-    enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Errno errors encountered by a single LevelDBEnv method when reading an
-    IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"
-    enum="PlatformFileError">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
-    IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors" enum="LevelDBErrorTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Error classes returned by LevelDB when it failed to write to a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"
-    enum="PlatformFileError">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    Errors (base::File::Error) encountered by a single LevelDBEnv method when
-    writing to an IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Corruption"
-    enum="LevelDBCorruptionTypes">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Types of corruption returned by LevelDB when it failed to write to a
-    database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.EnvMethod"
-    enum="LevelDBIOErrorMethods">
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    LevelDBEnv methods that generated IO errors when writing to a database.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"
-    enum="OSAgnosticErrno">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    Errno errors encountered by a single LevelDBEnv method when writing to an
-    IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"
-    enum="PlatformFileError">
-  <obsolete>
-    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
-  </obsolete>
-  <owner>dgrogan@chromium.org</owner>
-  <summary>
-    PlatformFileErrors encountered by a single LevelDBEnv method when writing to
-    an IndexedDB instance.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.ObjectStore.IndexEntry.KeyType"
-    enum="IDBKeyType">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    The type of key (number, string, etc.) used for an index entry for a record
-    being newly stored or updated in an Indexed DB object store. For array keys,
-    the types of sub-keys are not recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.ObjectStore.Record.KeyType"
-    enum="IDBKeyType">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    The type of key (number, string, etc.) used for a record being newly stored
-    or updated in an Indexed DB object store. For array keys, the types of
-    sub-keys are not recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The delay between the receipt of the request to open an IndexedDB database
-    and the firing of the blocked event.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The delay between the receipt of the request to open an IndexedDB database
-    and the firing of the error event.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The delay between the receipt of the request to open an IndexedDB database
-    and the firing of the success event.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The delay between the receipt of the request to open an IndexedDB database
-    and the firing of the upgradeneeded event.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Schema.Index.KeyPathType"
-    enum="IDBKeyPathType">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Records the 'keyPath' type (none, string, or array) during IDBObjectStore's
-    createIndex operation. See http://www.w3.org/TR/IndexedDB/
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Schema.Index.MultiEntry" enum="Boolean">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Records the 'multiEntry' flag value during IDBObjectStore's createIndex
-    operation. See http://www.w3.org/TR/IndexedDB/
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Schema.Index.Unique" enum="Boolean">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Records the 'unique' flag value during IDBObjectStore's createIndex
-    operation. See http://www.w3.org/TR/IndexedDB/
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Schema.ObjectStore.AutoIncrement"
-    enum="Boolean">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Records the 'autoIncrement' flag value during IDBDatabase's
-    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
-  </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.Schema.ObjectStore.KeyPathType"
-    enum="IDBKeyPathType">
-  <owner>jsbell@chromium.org</owner>
-  <summary>
-    Records the 'keyPath' type (none, string, or array) during IDBDatabase's
-    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
-  </summary>
-</histogram>
-
-<histogram name="WebCore.PreloadDelayMs" units="ms">
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    The delay between when the preload scanner discovers a resource on the
-    parser thread and when the preload request is issued on the main thread.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ActionUponResourceRequest"
-    enum="ActionUponResourceRequest">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    The resulting action (e.g. load resource, use resource from in-memory
-    cache...) upon a resource request.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.HitCount">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Number of dead resources found in the memory cache over the lifetime of the
-    ResourceFetcher.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.LoadCount">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Number of resources that needed to be loaded by the ResourceFetcher over its
-    lifetime.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ResourceHasClientUponCacheHit"
-    enum="ResourceHasClient">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Whether the resource in the cache is being used by at least one client (live
-    resource) or not (dead resource) upon a cache hit.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ResourceTypeUponCacheHit"
-    enum="ResourceType">
-  <obsolete>
-    This metric has been not recorded at least since 2016/01. The displayed enum
-    labels might be unreliable because C++ enum values of blink::Resource::Type
-    have been changed over time.
-  </obsolete>
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    The type of the resource (e.g. image, script...) upon a cache hit.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.RevalidateCount">
-  <owner>clamy@chromium.org</owner>
-  <summary>
-    Number of dead resources that needed to be revalidated by the
-    ResourceFetcher over its lifetime.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackDeadline"
-    units="ms">
-  <owner>rmcilroy@chromium.org</owner>
-  <summary>
-    The amount of time allotted to a requestIdleCallback callback, i.e., the
-    difference between the time when it is called and when its deadline expires.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackOverrun"
-    units="ms">
-  <owner>rmcilroy@chromium.org</owner>
-  <summary>
-    The amount of time by which a requestIdleCallback callback overran its
-    deadline. Callbacks which don't overrun their deadline will report an
-    overrun of 0.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.Async.NotStreamingReason"
-    enum="NotStreamingReason">
-  <owner>marja@chromium.org</owner>
-  <summary>Reason for not streaming an async script.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.Async.StartedStreaming" enum="BooleanStreamed">
-  <owner>marja@chromium.org</owner>
-  <summary>Whether an async script was streamed or not.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.Deferred.NotStreamingReason"
-    enum="NotStreamingReason">
-  <owner>marja@chromium.org</owner>
-  <summary>Reason for not streaming a deferred script.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.Deferred.StartedStreaming"
-    enum="BooleanStreamed">
-  <owner>marja@chromium.org</owner>
-  <summary>Whether a deferred script was streamed or not.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.ParsingBlocking.AlreadyLoaded"
-    enum="BooleanLoaded">
-  <obsolete>
-    Deprecated as this data was needed for streaming investigations, no longer
-    needed.
-  </obsolete>
-  <owner>marja@chromium.org</owner>
-  <summary>
-    Whether a parsing blocking script was already preloaded from the net or the
-    cache by the time it was needed.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.ParsingBlocking.NotStreamingReason"
-    enum="NotStreamingReason">
-  <owner>marja@chromium.org</owner>
-  <summary>Reason for not streaming a parsing blocking script.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.ParsingBlocking.StartedStreaming"
-    enum="BooleanStreamed">
-  <owner>marja@chromium.org</owner>
-  <summary>Whether a parsing blocking script was streamed or not.</summary>
-</histogram>
-
-<histogram name="WebCore.Scripts.ParsingBlocking.TimeBetweenLoadedAndCompiled"
-    units="ms">
-  <obsolete>
-    Deprecated as this data was needed for streaming investigations, no longer
-    needed.
-  </obsolete>
-  <owner>marja@chromium.org</owner>
-  <summary>
-    Time between the events &quot;script is loaded&quot; and &quot;script is
-    compiled&quot; for parsing blocking scripts.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.UseCounter_TEST.CSSProperties"
-    enum="MappedCSSProperties">
-  <obsolete>
-    Temporary histogram replaced by Blink.UseCounter.CSSProperties.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-</histogram>
-
-<histogram name="WebCore.UseCounter_TEST.Features" enum="FeatureObserver">
-  <obsolete>
-    Temporary histogram replaced by Blink.UseCounter.Features.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-</histogram>
-
-<histogram name="WebCore.UseCounter_TEST.SVGImage.CSSProperties"
-    enum="MappedCSSProperties">
-  <obsolete>
-    Temporary histogram replaced by Blink.UseCounter.SVGImage.CSSProperties.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-</histogram>
-
-<histogram name="WebCore.UseCounter_TEST.SVGImage.Features"
-    enum="FeatureObserver">
-  <obsolete>
-    Temporary histogram replaced by Blink.UseCounter.SVGImage.Features.
-  </obsolete>
-  <owner>rbyers@chromium.org</owner>
-</histogram>
-
-<histogram name="WebCore.V8DOMWindowShell.createContext.IsolatedWorld"
-    units="ms">
-  <obsolete>
-    Deprecated 05/2013, we no longer have the code that uses this metric.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration of time taken to create a V8 Context for an isolated world.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld" units="ms">
-  <obsolete>
-    Deprecated 05/2013, we no longer have the code that uses this metric.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Duration of time taken to create a V8 Context for the main world.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.BinaryTypeChangesAfterOpen">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of changes to WebSocket.binaryType after the connection
-    opened, per connection. Assignments that match the existing binaryType are
-    not counted. This is recorded after WebSocket close, whether explicit or due
-    to error or navigation. It is not recorded if the render process is
-    destroyed before the WebSocket is closed.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.HandshakeResult"
-    enum="WebSocketHandshakeResult">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of WebSocket handshake for each result. Use this histogram
-    as a baseline for investigating feature usage counters.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.MessageSize.Receive" units="bytes">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    The sizes of binary WebSocket messages received, broken down by type. One
-    entry per message. Clamped to 100 MB.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.MessageSize.Send" units="bytes">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    The sizes of binary WebSocket messages sent, broken down by type. One entry
-    per message. Clamped to 100 MB.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode"
-    enum="WebSocketPerMessageDeflateContextTakeOverMode">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of WebSockets that accepted permessage-deflate extension
-    for each context take over mode. Used by the old Blink-based WebSocket
-    implementation.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.ReceiveType" enum="WebSocketReceiveType">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of messages for each message type and set binary type.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.SendType" enum="WebSocketSendType">
-  <owner>yhirano@chromium.org</owner>
-  <owner>ricea@chromium.org</owner>
-  <owner>tyoshino@chromium.org</owner>
-  <summary>
-    Count the number of send() method calls on WebSockets for each argument
-    type.
-  </summary>
-</histogram>
-
-<histogram name="WebCore.XHR.send.ArrayBufferOrView"
-    enum="XMLHttpRequestSendArrayBufferOrView">
-  <obsolete>
-    Deprecated as of 7/2014. This histogram was used to determine when it would
-    be ok to remove the deprecated XMLHttpRequest.send(ArrayBuffer) overload.
-    The support for ArrayBuffer was un-deprecated in the WHATWG spec for XHR,
-    and subsequently un-deprecated in Blink.
-  </obsolete>
-  <owner>tyoshino@chromium.org</owner>
-  <owner>costan@gmail.com</owner>
-  <summary>
-    Count the number of XHR.send() calls for each argument type to see when we
-    can deprecate the ArrayBuffer type support.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.BlankTextShownTime" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    A histogram tracking the time we spent showing blank text because a web font
-    wasn't available by the time we needed it. Measured once per @font-face that
-    ended up showing blank text.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.CacheHit" enum="WebFontCacheHit">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Recorded upon web fonts load. Counts the number of times web font is loaded
-    from cache (disk cache or memory cache), fetched over network, or served
-    from data URL.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.CORSSuccess" enum="BooleanSuccess">
-  <owner>bashi@chromium.org</owner>
-  <owner>kenjibaheux@chromium.org</owner>
-  <summary>The success or failure of web fonts CORS-enabled fetching.</summary>
-</histogram>
-
-<histogram name="WebFont.DecodeSpeed" units="KB/s">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Uncompressed font image size divided by the duration of time OTS takes to
-    decode the font image, in kilobytes per second.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DiskCache.EntryAge.Evict" units="hours">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Recorded upon an eviction of a cache entry for a font in Google Fonts.
-    Records the age of the cache entry.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DiskCache.EntryAge.Hit" units="hours">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Recorded upon a cache hit for a font in Google Fonts. Records the age of the
-    cache entry.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DiskCache.ReuseCount.Evict">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    When a cache entry for a font in Google Fonts is evicted, records the reuse
-    count of the cache entry.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DiskCache.ReuseCount.Hit">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Recorded upon a cache hit for a font in Google Fonts. Records the reuse
-    count of the cache entry.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DiskCacheHit" enum="WebFontDiskCacheHit">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether the font was in the cache or not. &quot;Previously in the
-    cache&quot; means there was an evicted entry for the font in the cache.
-    Recorded upon a disk cache query for a font in Google Fonts.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.0.Under10KB" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of under
-    10KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.1.10KBTo50KB" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    10KB-50KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.2.50KBTo100KB" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    50KB-100KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.3.100KBTo1MB" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    100KB-1MB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.4.Over1MB" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of over
-    1MB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.LoadError" units="ms">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time taken for a webfont download that failed. Includes aborted
-    requests.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.FontDisplayValue" enum="FontDisplayValue">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The value of font-display @font-face descriptor. Counted only when
-    explicitly specified in the @font-face rule.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    This metrics is logged when a page that use web fonts is loaded. The value
-    is whether we had to wait on at least one web font and ended up showing
-    blank text, or not.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.InterventionResult" enum="WebFontInterventionResult">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>kenjibaheux@chromium.org</owner>
-  <summary>
-    For each WebFont load attempt, records whether User Agent Intervention was
-    triggered, and whether the request (would have) timed out or not. The
-    intervention takes adaptive behaviors to handle loading timeouts to improve
-    user experiences on slow networks.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.InterventionResult.MissedCache"
-    enum="WebFontInterventionResult">
-  <owner>toyoshim@chromium.org</owner>
-  <owner>kenjibaheux@chromium.org</owner>
-  <summary>
-    Like InterventionResult, this records whether User Agent Intervention was
-    triggered, and whether the request (would have) timed out or not. But this
-    version records only when data actually comes from network, not from disk or
-    memory cache, and is not provided in a data URL format.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LayoutLatency" units="ms">
-  <obsolete>
-    Renamed to WebFont.StyleRecalcToDownloadLatency for clarity.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time from when the webfont was referenced by a calculated style for the
-    first time to the start of the font download.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadLimitOnDiskCacheMiss" enum="WebFontLoadLimitState">
-  <owner>ksakamoto@chromium.org</owner>
-  <owner>shaochuan@chromium.org</owner>
-  <owner>toyoshim@chromium.org</owner>
-  <summary>
-    The load limit state when the first disk-cache-only request fails by cache
-    miss, if WebFonts cache-aware timeout adaptation is enabled and applicable.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.0.Under10KB" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.0.Under10KB.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of under
-    10KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.1.10KBTo50KB.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    10KB-50KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.2.50KBTo100KB.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    50KB-100KB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.3.100KBTo1MB.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of
-    100KB-1MB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.4.Over1MB" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.4.Over1MB.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time it takes for a webfont download to finish, for webfonts of over
-    1MB.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.LoadError" units="ms">
-  <obsolete>
-    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.LoadError.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time taken for a webfont download that failed. Includes aborted
-    requests.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage">
-  <owner>hajimehoshi@chromium.org</owner>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>kouhei@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    Whether a locallly installed font is actually used when @font-face had local
-    sources.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.PackageFormat" enum="WebFontPackageFormat">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The packaging format of the font file (e.g. SFNT, WOFF ...) upon a webfont
-    load.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency" units="ms">
-  <obsolete>
-    Deprecated 11/2013. No longer tracked.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time from when the webfont was referenced by a calculated style for the
-    first time to the start of the font download. Recorded at most once for each
-    FontResource object (not recorded if the font is retrieved from the memory
-    cache).
-  </summary>
-</histogram>
-
-<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType">
-  <obsolete>
-    Deprecated 11/2013. No longer tracked.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    For each webfont, this records (a) if the font was 'styled', i.e. referenced
-    by a calculated style for a RenderText before the font data was used, and
-    (b) if the font was actually used or not, i.e. the renderer requested the
-    font data or not. (A Font can be used without being styled, for example when
-    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
-    webfont, or destruction of a FontResource object. Recorded at most once for
-    each FontResource object in the renderer's memory cahce.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.StyleRecalcToDownloadLatency" units="ms">
-  <obsolete>
-    Deprecated as of 9/2013, replaced by
-    WebFont.Resource.StyleRecalcToDownloadLatency.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The time from when the webfont was referenced by a calculated style for the
-    first time to the start of the font download.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.UsageType" enum="WebFontUsageType">
-  <obsolete>
-    Deprecated as of 9/2013, replaced by WebFont.Resource.UsageType.
-  </obsolete>
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    For each webfont, this records (a) if the font was 'styled', i.e. referenced
-    by a calculated style for a RenderText before the font data was used, and
-    (b) if the font was actually used or not, i.e. the renderer requested the
-    font data or not. (A Font can be used without being styled, for example when
-    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
-    webfont, or destruction of a CSSFontFaceSource object. Recorded at most once
-    for each url() source of @font-face CSS rule.
-  </summary>
-</histogram>
-
-<histogram name="WebFont.WebFontsInPage">
-  <owner>kenjibaheux@chromium.org</owner>
-  <owner>ksakamoto@chromium.org</owner>
-  <summary>
-    The number of webfonts used in a page. This is recorded when the first
-    layout is done, and so will not count webfonts dynamically loaded by
-    scripts.
-  </summary>
-</histogram>
-
-<histogram name="WebHistory.LocalResultMissingOnServer" units="%">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Percentage of results that are present locally but are not returned by the
-    web history API call. Recorded every time a signed-in user visits the
-    chrome://history page and the results from the web history are received.
-  </summary>
-</histogram>
-
-<histogram name="WebHistory.OAuthTokenCompletion" enum="BooleanSuccess">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether getting the OAuth token was successful for a web history query. On
-    visits to the chrome://history page this token is obtained and then used to
-    get the user's synced web history.
-  </summary>
-</histogram>
-
-<histogram name="WebHistory.OAuthTokenResponseCode" units="code">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    HTTP Response code returned by the server when trying to fetch the OAuth
-    token for a web history query.
-  </summary>
-</histogram>
-
-<histogram name="WebHistory.QueryCompletion" enum="WebHistoryStatus">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Whether the web history API call was successful. Every time a signed-in user
-    visits the chrome://history page this query is executed to get the user's
-    synced web history. If successful, the local and remote results are merged
-    and shown in the history page.
-  </summary>
-</histogram>
-
-<histogram name="WebHistory.ResponseTime" units="ms">
-  <owner>zea@chromium.org</owner>
-  <summary>
-    Time it took for the web history to reply. Recorded when the web history API
-    call triggered by visiting chrome://history receives the data, measuring how
-    much time it took for the server to reply.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AecDelayBasedQuality" enum="DelayBasedEchoQuality">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Captures if the estimated delay between rendered and captured audio is out
-    of bounds which can cause the Echo Cancellation to fail. This is logged
-    roughly once every 5 seconds. The values are logged in four buckets
-    reflecting how well the Echo Cancellation likely performs based on the
-    estimated delay.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AecFilterHasDivergence" units="%">
-  <owner>grunell@chromium.org</owner>
-  <owner>minyue@chromium.org</owner>
-  <summary>
-    The percentage of measurement periods during a capture stream's lifetime
-    when the echo canceler's filter is considered to have diverged at least
-    once. A diverged filter could mean that there was echo och ducking
-    experienced. The measurement period size is fixed and in the order of one
-    second. The first measurement period is larger, typically 2-3 seconds.
-    Capture streams with shorter lifetimes (i.e. no data available) are not
-    recorded here.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard">
-  <obsolete>
-    Deprecated as of 12/2014, replaced by
-    WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2.
-  </obsolete>
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The maximum consecutive discarded bytes caused by not enough buffer
-    available in WebRTC's socket implementation.  This happens when WebRTC
-    IpcPacketSocket's throttling mechanism kicks in.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The maximum consecutive discarded bytes caused by not enough buffer
-    available in WebRTC's socket implementation.  This happens when WebRTC
-    IpcPacketSocket's throttling mechanism kicks in. The maximum bucket is
-    expanded from previous version to provide more insight when upper layer
-    feeds a lot of packets.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ApplicationPercentPacketsDiscarded" units="%">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The percentage of packets discarded by WebRTC's socket layer due to
-    EWOULDBLOCKs when WebRTC IpcPacketSocket's throttling mechanism kicks in.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AecDelayAdjustmentMsAgnosticValue" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The AEC in WebRTC will sometimes realign the far- and near-end signal
-    buffers to keep in sync with delay changes in the echo path. This metric
-    logs each such realignment, storing the delay change in ms, when the change
-    is triggered by a shift in the signal based delay estimation (a.k.a
-    delay-agnostic).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AecDelayAdjustmentMsSystemValue" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The AEC in WebRTC will sometimes realign the far- and near-end signal
-    buffers to keep in sync with delay changes in the echo path. This metric
-    logs each such realignment, storing the delay change in ms, when the change
-    is triggered by a shift in system reported delay.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AecSystemDelayJump" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The AEC in WebRTC keeps a buffer to mimic the audio buffers in the lower
-    layers. This histogram logs a sudden positive jump in buffer size. Since we
-    detect jumps in the capture thread, only positive values are feasible. Note
-    that the difference in milliseconds is logged and not the actual AEC system
-    delay value. Sampled every time the AEC system delay changes more than 50
-    milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AgcClippingAdjustmentAllowed" enum="Boolean">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The automatic gain control (AGC) in WebRTC tries to adjust the microphone
-    gain to maintain a strong audio level, but without clipping (saturation).
-    The histogram will log a value every time input clipping is detected. The
-    value is a boolean, with &quot;true&quot; meaning that the gain was in fact
-    adjusted in response to the detected clipping, and &quot;false&quot; meaning
-    that adjustment was not allowed due to limiting boundaries in the algorithm.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AgcSetLevel" units="level">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The automatic gain control (AGC) in WebRTC tries to adjust the microphone
-    gain to maintain a strong audio level, but without clipping (saturation).
-    The histogram will log a new value every time the AGC changes the target
-    level.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.ApmCaptureInputLevelAverageRms"
-    units="dBFS (negated)">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    This histogram reports the average RMS of the signal coming in to WebRTC's
-    Audio Processing Module, prior to any WebRTC processing. A new value is
-    reported every 10 seconds, and the average is over the latest interval. The
-    metric is negated dBFS, meaning that 0 is a full-scale signal, while 127
-    corresponds to -127 dBFS (very faint).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.ApmCaptureInputLevelPeakRms"
-    units="dBFS (negated)">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    This histogram reports the peak RMS of the signal coming in to WebRTC's
-    Audio Processing Module, prior to any WebRTC processing. A new value is
-    reported every 10 seconds, and the peak is the RMS of the strongest 10 ms
-    block over the latest interval. The metric is negated dBFS, meaning that 0
-    is a full-scale signal, while 127 corresponds to -127 dBFS (very faint).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.ApmCaptureOutputLevelAverageRms"
-    units="dBFS (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram reports the average RMS of the signal in the output of
-    WebRTC's Audio Processing Module, after all audio WebRTC processing. A new
-    value is reported every 10 seconds, and the average is over the latest
-    interval. The metric is negated dBFS, meaning that 0 is a full-scale signal,
-    while 127 corresponds to -127 dBFS (very faint).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.ApmCaptureOutputLevelPeakRms"
-    units="dBFS (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram reports the peak RMS of the signal in the output of WebRTC's
-    Audio Processing Module, after all WebRTC audio processing. A new value is
-    reported every 10 seconds, and the peak is the RMS of the strongest 10 ms
-    block over the latest interval. The metric is negated dBFS, meaning that 0
-    is a full-scale signal, while 127 corresponds to -127 dBFS (very faint).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.AverageExcessBufferDelayMs" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Measures the average waiting time in the buffer for each packet. The waiting
-    time is the time elapsed from the packet arrives until it is decoded. The
-    metric is calculated as the average over one minute, and is logged at the
-    end of each such interval. A well tuned target buffer level should lead to a
-    low value.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.DelayedPacketOutageEventMs" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Measures the duration of each packet loss concealment (a.k.a. expand) event
-    that is not followed by a merge operation. The outage is measured in
-    milliseconds, with a range between 0 and 2000 ms. This gives an indication
-    of how well the jitter buffer's level adaptation is working. If the chosen
-    target level is too low, this value will increase.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.DelayedPacketOutageEventsPerMinute"
-    units="events/minute">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Counts the number of delayed packet outage events per minute. The range is
-    between 0 and 100 (corresponds to more 1.6 events per second). See
-    WebRTC.Audio.DelayedPacketOutageEventMs for the definition of a delayed
-    packet outage event, and the interpretation of such events.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ActiveRender" enum="Boolean">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs a value indicating whether the WebRTC echo canceller
-    detects that there is active content in the render signal. A new value is
-    logged every 10 seconds and the logged value is averaged over this period.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.BufferDelay" units="Blocks">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the applied render buffer delay used in the WebRTC echo
-    canceller. A new value is logged every 10 seconds and the logged value
-    constitutes the current buffer delay at the time when the value is logged.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.CaptureSaturation" enum="Boolean">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs a value every time the WebRTC echo canceller has
-    detected saturation in the capture signal. A new value is logged every 10
-    seconds and the logged value indicates whether the capture signal has been
-    saturated during the last 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand0"
-    units="dBFS (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the level of the comfort noise in the WebRTC echo
-    canceller in the lower 4 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand1"
-    units="dBFS (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the level of the comfort noise in the WebRTC echo
-    canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.DelayChanges"
-    enum="WebRTCEventFrequency">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the frequency of echo path delay changes that are
-    detected by the delay estimator in the WebRTC echo canceller. A new value is
-    logged every 10 seconds and the logged value indicates how frequent delay
-    changes have been during the last 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.EchoPathDelay" units="Blocks">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the estimated echo path delay in 64 sample blocks as
-    seen by the delay estimator in the WebRTC echo canceller. A new value is
-    logged every 10 seconds and the logged value is the estimate of the delay of
-    the echo path at the time when the value is logged.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ErlBand0" units="dB (shifted)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo return loss achieved by the WebRTC echo
-    canceller in the lower 4 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ErlBand1" units="dB (shifted)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo return loss achieved by the WebRTC echo
-    canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ErleBand0" units="dB (shifted)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo return loss enhancement achieved by the WebRTC
-    echo canceller in the lower 4 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ErleBand1" units="dB (shifted)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo return loss enhancement achieved by the WebRTC
-    echo canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.FilterDelay" units="Blocks">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the estimated echo path delay in 64 sample blocks as
-    seen by the linear filter delay in the WebRTC echo canceller. The value 0
-    means that no delay could be estimated from the linear filter, otherwise the
-    logged delay corresponds to the actual delay + 1. A new value is logged
-    every 10 seconds and the logged value is the estimate of the filter delay at
-    the time when the value is logged.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ModelBasedAecFeasible"
-    enum="Boolean">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs a value every time the WebRTC echo canceller deems that
-    echo path is possible to model using any of the the echo canceller echo path
-    models. A new value is logged every 10 seconds and the logged value is the
-    feasibility assessment at the time when the value is logged.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.ReliableDelayEstimates"
-    enum="WebRTCAecDelayEstimateReliability">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the assessed reliability of the delay estimates produced
-    by the delay estimator in the WebRTC echo canceller. A new value is logged
-    every 10 seconds and the logged value is a meausure based on how often
-    during that period the delay estimate was reliable.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.RenderOverruns"
-    enum="WebRTCEventFrequency">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the frequency of overruns in the render buffer of the
-    WebRTC echo canceller. A new value is logged every 10 seconds and the logged
-    value is a meausure that indicates how often overruns occurred.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.RenderUnderruns"
-    enum="WebRTCEventFrequency">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the frequency of underruns in the render buffer of the
-    WebRTC echo canceller. A new value is logged every 10 seconds and the logged
-    value is a meausure that indicates how often underruns occurred.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand0"
-    units="dB (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo suppressor gain in the WebRTC echo canceller in
-    the lower 4 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand1"
-    units="dB (negated)">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs the echo suppressor gain in the WebRTC echo canceller
-    between 4 and 8 kHz. A new value is logged every 10 seconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.EchoCanceller.UsableLinearEstimate"
-    enum="Boolean">
-  <owner>peah@chromium.org</owner>
-  <summary>
-    This histogram logs a value every time the WebRTC echo canceller deems that
-    the linear filter in the echo canceller is sufficiently well adapted to be
-    usable. A new value is logged every 10 seconds and the logged value is the
-    assessment of whether the filter is usable at the time when the value is
-    logged.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.Encoder.CodecType" enum="WebRtcAudioCodecs">
-  <owner>aleloi@chromium.org</owner>
-  <summary>
-    Histogram of audio codec usage. Every sample corresponds to 5 seconds of
-    encoding with that codec.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.NumOfAecSystemDelayJumps" units="jumps">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Number of triggered WebRTC.Audio.AecSystemDelayJump during a call. This is
-    recorded when a WebRTC based call has ended. AecSystemDelayJump can be
-    triggered when, for example, the capture thread is stalled, which can harm
-    the AEC. NumOfAecSystemDelayJumps shows how often this occurs in general as
-    well as during a call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.NumOfPlatformReportedStreamDelayJumps"
-    units="jumps">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    Number of triggered WebRTC.Audio.PlatformReportedStreamDelayJump during a
-    call. This is recorded when a WebRTC based call has ended.
-    PlatformReportedStreamDelayJump can be triggered when, for example, the
-    capture thread is stalled, which can harm the AEC.
-    NumOfPlatformReportedStreamDelayJumps shows how often this occurs in general
-    as well as during a call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.PlatformReportedStreamDelayJump" units="ms">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The difference in stream delay reported to WebRTC by Chrome. Since we detect
-    jumps in the capture thread, only positive values are feasible. Note that
-    the difference in milliseconds is logged and not the actual stream delay
-    value. Sampled every time the stream delay changes more than 50
-    milliseconds.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.ResidualEchoDetector.EchoLikelihood" units="%">
-  <owner>hlundin@chromium.org</owner>
-  <owner>ivoc@chromium.org</owner>
-  <summary>
-    The estimated likelihood percentage of echo as detected by the residual echo
-    detector. The residual echo detector can be used to detect cases where the
-    AEC (hardware or software) is not functioning properly. The detector can be
-    non-causal and operates on larger timescales with more delay than the
-    regular AEC.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.TargetBitrateInKbps" units="kbps">
-  <owner>hlundin@chromium.org</owner>
-  <summary>
-    The target bitrate in kbps that the audio codec should try to produce on
-    average. Sampled every time the rate is updated.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioCaptureTime" units="ms">
-  <obsolete>
-    Removed from code 2014/2/25.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Duration in milliseconds of WebRTC audio capture session.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputChannelLayout" enum="ChannelLayout">
-  <owner>henrika@chromium.org</owner>
-  <summary>Audio input channel layout in WebRTC.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer">
-  <obsolete>
-    No longer exists in the code as of 2014/2/25.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Size of WebRTC audio input buffers (in audio frames).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputFramesPerBufferUnexpected"
-    units="audio frames">
-  <obsolete>
-    No longer exists in the code as of 2014/2/25.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Size of WebRTC audio input buffers (atypical values, in audio frames).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputSampleRate" enum="AudioSampleRate">
-  <owner>henrika@chromium.org</owner>
-  <summary>Audio input sample rate for WebRTC (in Hz).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputSampleRateUnexpected" units="Hz">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Audio input sample rate for WebRTC (atypical values, in Hz).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout">
-  <obsolete>
-    Removed from code on 2014/2/25.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Audio output channel layout in WebRTC.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer">
-  <obsolete>
-    Removed from code Sep 2014.
-  </obsolete>
-  <owner>henrika@chromium.org</owner>
-  <summary>Size of WebRTC audio output buffers (in audio frames).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputFramesPerBufferUnexpected"
-    units="audio frames">
-  <obsolete>
-    Removed from code Sep 2014.
-  </obsolete>
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Size of WebRTC audio output buffers (atypical values, in audio frames).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputSampleRate" enum="AudioSampleRate">
-  <owner>henrika@chromium.org</owner>
-  <summary>Audio output sample rate for WebRTC (in Hz).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputSampleRateUnexpected" units="Hz">
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Audio output sample rate for WebRTC (atypical values, in Hz).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioRenderTime" units="ms">
-  <obsolete>
-    Removed from code 2014/2/25.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>Duration in milliseconds of WebRTC audio render session.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioRenderTimes" units="ms">
-  <obsolete>
-    Deprecated as of Aug 2016, replaced by
-    Media.Audio.Render.GetSourceDataTime.WebRTC.
-  </obsolete>
-  <owner>henrika@chromium.org</owner>
-  <summary>
-    Measures the time spent in WebRtcAudioRenderer::SourceCallback. Sampled 10
-    times per second.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.InitialBandwidthEstimate" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>The bandwidth estimate 2 seconds into a WebRTC call.</summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.InitiallyLostPackets" units="packets">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The number of video packets lost durig the first 2 seconds in a WebRTC call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.InitialRtt" units="ms">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The round-trip time as measured 2 seconds into a WebRTC call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.InitialVsConvergedDiff" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The difference between the bandwidth estimate at 2 seconds and 20 seconds
-    into a WebRTC call, with a min at 0, which is supposed to capture the how
-    much the initial bandwidth estimate overshot the actual bandwidth available.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.RampUpTimeTo1000kbpsInMs" units="ms">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The time it takes the estimated bandwidth to reach 1000 kbps from the first
-    RTCP packet received. Used to measure the bandwidth ramp-up time.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.RampUpTimeTo2000kbpsInMs" units="ms">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The time it takes the estimated bandwidth to reach 2000 kbps from the first
-    RTCP packet received. Used to measure the bandwidth ramp-up time.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.RampUpTimeTo500kbpsInMs" units="ms">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The time it takes the estimated bandwidth to reach 500 kbps from the first
-    RTCP packet received. Used to measure the bandwidth ramp-up time.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.BWE.Types" enum="WebRtcBweType">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The bandwidth estimation used in WebRTC calls. Records whether the BWE is
-    running on the sender or the receiver and what BWE related RTP header
-    extensions are in use.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.AudioBitrateReceivedInKbps" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average audio bitrate received during a call, counted from first packet
-    received until Call instance is destroyed. Only mesured for calls that are
-    at least 10 seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.BitrateReceivedInKbps" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average total bitrate received during a call (audio + video + RTCP), counted
-    from first packet received until Call instance is destroyed. Only mesured
-    for calls that are at least 10 seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.EstimatedSendBitrateInKbps" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average estimated send bitrate during a call, counted from first packet sent
-    until Call instance is destroyed. Only mesured for calls that are at least
-    10 seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.LifetimeInSeconds" units="seconds">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The lifetime of a call. Recorded when a Call instance is destroyed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.PacerBitrateInKbps" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average pacer bitrate during a call, counted from first packet sent until
-    Call instance is destroyed. Only mesured for calls that are at least 10
-    seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.RtcpBitrateReceivedInBps" units="bits/s">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average RTCP bitrate received during a call, counted from first packet
-    received until Call instance is destroyed. Only mesured for calls that are
-    at least 10 seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Call.VideoBitrateReceivedInKbps" units="kbps">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    Average video bitrate received during a call, counted from first packet
-    received until Call instance is destroyed. Only mesured for calls that are
-    at least 10 seconds long.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.DataChannelCounters" enum="DataChannelCounters">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Counters on creation, opening, and a few main attributes of data channels.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.DataChannelMaxRetransmits">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    The maximum number of retransmissions that are attempted in unreliable mode.
-    It is set to the value used in the configuration when a RTCDataChannel is
-    created.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.DataChannelMaxRetransmitTime" units="ms">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    The length of the time window during which transmissions and retransmissions
-    may occur in unreliable mode. It is set to the value used in the
-    configuration when a RTCDataChannel is created.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.DesktopCaptureCounters" enum="DesktopCaptureCounters">
-  <owner>jiayl@chromium.org</owner>
-  <summary>
-    Counters on creation of DesktopCaptureDevice and the first capture call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ICE.TcpSocketWriteErrorCode" enum="SocketErrorCode">
-  <owner>zhihuang@chromium.org</owner>
-  <summary>
-    Counters on different types of TCP socket error code. Collected when we hit
-    the error code when writing.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ICE.UdpSocketWriteErrorCode" enum="SocketErrorCode">
-  <owner>zhihuang@chromium.org</owner>
-  <summary>
-    Counters on different types of UDP socket error code. Collected when we hit
-    the error code when writing.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.NAT.Metrics" enum="NatTypeCounters">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Counters on various types of NAT observed. This is logged once per session.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.NumDataChannelsPerPeerConnection">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Number of data channels created per PeerConnection. Sample added to the
-    histogram when the PeerConnection is destroyed. Note that this is done
-    purely on the renderer side, so no sample will be generated when the
-    renderer process is destroyed (as in the fast shutdown path for the
-    renderer) before the PeerConnection is destroyed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.CandidatePairType"
-    enum="IceCandidatePairTypes">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Counters of various ICE Endpoint types. These values are logged for the
-    first selected candidate pair of a PeerConnection.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.ConnectionState"
-    enum="IceConnectionStates">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Counters of ICE Connection states. These values are logged when the
-    PeerConnection gets into that state for the first time or after the ICE
-    restart.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.DtlsHandshakeError"
-    enum="DtlsHandshakeError">
-  <owner>zhihuang@chromium.org</owner>
-  <summary>
-    Records the error whenever the Dtls handshake fails. There are only two
-    types of errors, incompatitable cipher suite and unknown error, for now.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IceRegatheringReason"
-    enum="IceRegatheringReason">
-  <owner>honghaiz@chromium.org</owner>
-  <summary>Records the reasons for ICE re-gathering.</summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IceRestartState" enum="IceRestartState">
-  <owner>honghaiz@chromium.org</owner>
-  <summary>
-    Records the transport channel states when ICE restart happens.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPMetrics" enum="PeerConnectionCounters">
-  <owner>mallinath@chromium.org</owner>
-  <summary>
-    Counters on IPv4 and IPv6 usage in PeerConnection. These values are logged
-    once per PeerConnection.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPPermissionStatus"
-    enum="IPPermissionStatus">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Whether the permission to collect the local IP addresses in WebRTC has been
-    requested and/or granted. This is collected the first time when networks
-    updated event is reported or if never reported, during the destruction phase
-    of a call.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPv4Interfaces">
-  <owner>mallinath@chromium.org</owner>
-  <summary>
-    Number of IPv4 network interfaces discovered in a PeerConnection Session.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPv4LocalCandidates">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Number of IPv4 local Candidates gathered in a PeerConnection Session once
-    the ICE address gathering process reaches the Completed status. To avoid
-    miscounting, this only includes the first m line's first component.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPv6Interfaces">
-  <owner>mallinath@chromium.org</owner>
-  <summary>
-    Number of IPv6 network interfaces discovered in a PeerConnection Session.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.IPv6LocalCandidates">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Number of IPv6 local Candidates gathered in a PeerConnection Session once
-    the ICE address gathering process reaches the Completed status. To avoid
-    miscounting, this only includes the first m line's first component.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.RtcpMux" enum="PeerConnectionRtcpMux">
-  <owner>pthatcher@chromium.org</owner>
-  <summary>
-    Whether RTCP-mux is used for the PeerConnection (both the local and remote
-    description enable RTCP-mux).  Recorded after SetLocalDescription and
-    SetRemoteDescription are called, once per PeerConnection.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.SelectedRtcpMuxPolicy"
-    enum="PeerConnectionRtcpMuxPolicy">
-  <obsolete>
-    Deprecated on Dec 2016. This histogram is used to gauge the risk of making
-    the change for issue 6030. The decision has been made and this is not needed
-    any more.
-  </obsolete>
-  <owner>zhihuang@chromium.org</owner>
-  <summary>
-    Whether the application specified a value for RTCP-mux policy, and if so,
-    which value, &quot;Require&quot; or &quot;Negotiate&quot;. Recorded after
-    parsing the configuration when creating the RTCPeerConnection.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"
-    enum="DTLS_SRTPCryptoSuite">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Counters on the type of SRTP crypto suites used by WebRTC. This is collected
-    whenever the transport signals the OnCompleted event.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.SslCipherSuite" enum="SSLCipherSuite">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Counters on the type of SSL cipher suites used by WebRTC. This is collected
-    whenever the transport signals the OnCompleted event.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.TimeToConnect" units="ms">
-  <owner>mallinath@chromium.org</owner>
-  <summary>Time to setup a peer to peer call with PeerConnection.</summary>
-</histogram>
-
-<histogram name="WebRTC.PeerConnection.TimeToNetworkUpdated" units="ms">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    Time to receive the first SignalNetworksChanged from the request to start
-    updating network in PeerConnection.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ReceivedAudioTrackDuration" units="ms">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Durations of audio tracks received over a PeerConnection. The stopwatch
-    starts when the track first becomes connected, and ends when it is
-    disconnected or very soon thereafter.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ReceivedVideoTrackDuration" units="ms">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Durations of video tracks received over a PeerConnection. The stopwatch
-    starts when the track first becomes connected, and ends when it is
-    disconnected or very soon thereafter.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ReliableDataChannelMessageSize" units="bytes">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Sizes of messages sent over reliable data channels. The size of an
-    individual message is added to the histogram as a sample immediately when a
-    message is sent.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.ScreenCaptureTime" units="ms">
-  <owner>jiayl@chromium.org</owner>
-  <summary>Time for capturing one frame in screen capturing.</summary>
-</histogram>
-
-<histogram name="WebRTC.SentAudioTrackDuration" units="ms">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Durations of audio tracks sent over a PeerConnection. The stopwatch starts
-    when the track first becomes connected, and ends when it is disconnected or
-    very soon thereafter.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.SentVideoTrackDuration" units="ms">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Durations of video tracks sent over a PeerConnection. The stopwatch starts
-    when the track first becomes connected, and ends when it is disconnected or
-    very soon thereafter.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Stun.BatchSuccessPercent" units="%">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    For clients using a shared source port per STUN binding request toward the
-    specified servers, success rate for requests which received a response with
-    various intervals between requests. Only the first instance of renderers
-    will conduct the trial and log this result. The STUN binding requests are
-    grouped into multiple batches and the success rate is calculated for an
-    individual batch.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Stun.ResponseLatency" units="ms">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    For clients using a shared source port per STUN binding request, average RTT
-    for requests which received a response with various intervals between
-    requests. Only the first instance of renderers will conduct the trial and
-    log this result.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Stun.SuccessPercent" units="%">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    For clients using a shared source port per STUN binding request, success
-    rate for requests which received a response with various intervals between
-    requests. Only the first instance of renderers will conduct the trial and
-    log this result.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The maximum of consecutive delayed bytes caused by EWOULDBLOCKs from system.
-    This happens when system can't send any packet synchronously at that moment.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.SystemPercentPacketsDelayed" units="%">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The percentage of packets delayed due to ERR_IO_PENDING from system in a
-    WebRTC socket. This happens when system can't send any packet synchronously
-    at that moment.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.SystemSendPacketDuration" units="ms">
-  <owner>guoweis@chromium.org</owner>
-  <summary>
-    The duration that it takes to send out a packet in system layer. This
-    includes both the queuing time (under the condition when socket returns
-    EWOULDBLOCK from system) as well as the time system takes to finish the
-    asynchronous send. For UDP, it's the time from P2PSocketHostUdp::Send to
-    P2PSocketHostUdp::HandleSendResult. Tcp part is to be implemented.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.UnreliableDataChannelMessageSize" units="bytes">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Sizes of messages sent over unreliable data channels. The size of an
-    individual message is added to the histogram as a sample immediately when a
-    message is sent.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.UserMediaRequest.NoResultState"
-    enum="MediaStreamRequestState">
-  <owner>andresp@chromium.org</owner>
-  <summary>
-    The state of a UserMediaRequest when it gets destroyed before having a
-    result.
-
-    Note: &quot;Explicitly Cancelled&quot; means
-    MediaStreamImpl::cancelUserMediaRequest was called and not necessarily that
-    the user cancelled. Those are likely tracked as UserMediaRequest with a
-    result of permission denied.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.UserMediaRequest.Result"
-    enum="MediaStreamRequestResult">
-  <owner>andresp@chromium.org</owner>
-  <summary>
-    Counters for UserMediaRequests results such as failure reasons.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.AverageRoundTripTimeInMilliseconds" units="ms">
-  <owner>holmer@chromium.org</owner>
-  <summary>
-    The average round-trip time of a WebRTC call in milliseconds. Recorded when
-    a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.AVSyncOffsetInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The absolute value of the sync offset between a rendered video frame and the
-    latest played audio frame is measured per video frame. The average offset
-    per received video stream is recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.BandwidthLimitedResolutionInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of sent frames that are limited in resolution due to bandwidth
-    for a sent video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.BandwidthLimitedResolutionsDisabled"
-    units="disabled resolutions">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    For frames that are limited in resolution due to bandwidth, the average
-    number of disabled resolutions is recorded for a sent video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.BitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received bits per second for a received video stream. Recorded
-    when a stream is removed. The total number of bytes is divided by the time
-    the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.BitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent bits per second for a sent video stream. Recorded when a
-    stream is removed. The total number of bytes is divided by the time the
-    video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.CompleteFramesReceivedPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of complete frames received per second for a received video
-    stream. Recorded when a stream is removed. The total number of frames is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.CpuLimitedResolutionInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of frames that are limited in resolution due to cpu for a sent
-    video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.CurrentDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Average current delay for a received video stream. This is the actual delay
-    imposed on frames (where the goal is to reach the target delay (see
-    WebRTC.Video.TargetDelayInMs)). Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Decoded.Vp8.Qp" units="qp value">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average QP (quantizer value) per frame for a received VP8 video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DecodedFramesPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of decoded frames per second for a received video stream.
-    Recorded when a stream is removed. The total number of frames is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DecodeTimeInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average decode time per frame for a received video stream. Recorded when
-    a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DelayedFramesToRenderer" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of delayed frames to renderer for a received video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DelayedFramesToRenderer_AvgDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average delay of delayed frames to renderer for a received video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DiscardedPacketsInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of discarded packets by the jitter buffer due to arriving too
-    late for a received video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.DuplicatedPacketsInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of duplicated packets in the jitter buffer for a received video
-    stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Encoded.Qp" units="qp value">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average QP (quantizer value) per frame for a sent video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Encoder.CodecType" enum="WebRtcVideoCodecs">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Configured video codec for a sent video stream. Recorded when a
-    VideoSendStream is destroyed (for streams whose lifetime is longer than 10
-    seconds).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.EncodeTimeInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average encode time per frame for a sent video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.EndToEndDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average end-to-end delay per frame for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.FecBitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received FEC bits per second for a received video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.FecBitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent FEC bits per second for a sent video stream. Recorded
-    when a stream is removed. The total number of bytes is divided by the time
-    the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.FirPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received RTCP FIR packets per minute for a sent video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.FirPacketsSentPerMinute" units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent RTCP FIR packets per minute for a received video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.H264DecoderImpl.Event"
-    enum="WebRtcH264DecoderImplEvent">
-  <owner>hbos@chromium.org</owner>
-  <summary>
-    The number of |H264DecoderImpl| events, such as an initialization or
-    decoding error, that have occurred. At most one Init and one Error is
-    reported per |H264DecoderImpl| instance. This is to avoid the same event
-    from being reported multiple times (e.g. if there is an error you might
-    re-initialize or get a decode error every frame which would otherwise
-    pollute the data).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.H264EncoderImpl.Event"
-    enum="WebRtcH264EncoderImplEvent">
-  <owner>hbos@chromium.org</owner>
-  <summary>
-    The number of |H264EncoderImpl| events, such as an initialization or
-    encoding error, that have occurred. At most one Init and one Error is
-    reported per |H264EncoderImpl| instance. This is to avoid the same event
-    from being reported multiple times (e.g. if there is an error you might
-    re-initialize or get an encode error every frame which would otherwise
-    pollute the data).
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.InputFramesPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of incoming frames per second for a sent video stream. Recorded
-    when a stream is removed. The total number of frames is divided by the time
-    the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.InputHeightInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average input height per frame (for incoming frames to video engine) for
-    a sent video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.InputWidthInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average input width per frame (for incoming frames to video engine) for
-    a sent video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.JitterBufferDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Average jitter buffer delay for a received video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.KeyFramesReceivedInPermille" units="permille">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Permille of frames that are key frames for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.KeyFramesSentInPermille" units="permille">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Permille of frames that are key frames for a sent video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.MediaBitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received media payload bits per second for a received video
-    stream. Recorded when a stream is removed. The total number of bytes is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.MediaBitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent media payload bits per second for a sent video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.NackPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received RTCP NACK packets per minute for a sent video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.NackPacketsSentPerMinute" units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent RTCP NACK packets per minute for a received video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.NumberOfPauseEvents" units="pause events">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of times a video stream has been paused/resumed during a call.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.OnewayDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Average delay (network delay (rtt/2) + jitter delay + decode time + render
-    delay) for a received video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.PaddingBitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received padding bits per second for a received video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.PaddingBitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent padding bits per second for a sent video stream. Recorded
-    when a stream is removed. The total number of bytes is divided by the time
-    the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.PausedTimeInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of time that the video has been paused for a sent video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.PliPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received RTCP PLI packets per minute for a sent video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.PliPacketsSentPerMinute" units="packets/minute">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent RTCP PLI packets per minute for a received video stream.
-    Recorded when a stream is removed. The total number of packets is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.QualityLimitedResolutionDownscales"
-    units="downscales">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    For frames that are downscaled in resolution due to quality, the average
-    number of downscales is recorded for a sent video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.QualityLimitedResolutionInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of sent frames that are downscaled in resolution due to quality
-    for a sent video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.ReceivedFecPacketsInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of received FEC packets for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.ReceivedHeightInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average received height per frame for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.ReceivedPacketsLostInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of received packets lost for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.ReceivedWidthInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average received width per frame for a received video stream. Recorded
-    when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.ReceiveStreamLifetimeInSeconds" units="seconds">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The lifetime of a video receive stream. Recorded when a VideoReceiveStream
-    instance is destroyed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RecoveredMediaPacketsInPercentOfFec" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of recovered media packets from FEC packets for a received video
-    stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RenderFramesPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent frames to the renderer per second for a received video
-    stream. Recorded when a stream is removed. The total number of frames is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RenderSqrtPixelsPerSecond" units="pps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of pixels (sqrt(width*height)) of sent frames to the renderer per
-    second for a received video stream. Recorded when a stream is removed. The
-    total number of pixels is divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RetransmittedBitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of retransmitted bits per second for a received video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RetransmittedBitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of retransmitted bits per second for a sent video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RtpToNtpFreqOffsetInKhz" units="kHz">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The absolute value of the difference between the estimated frequency during
-    RTP timestamp to NTP time conversion and the actual value (i.e. 90 kHz) is
-    measured per received video frame. The max offset during 40 second intervals
-    is stored. The average of these stored offsets per received video stream is
-    recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RtxBitrateReceivedInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of received bits over RTX per second for a received video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.RtxBitrateSentInKbps" units="kbps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent bits over RTX per second for a sent video stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionInPercent"
-    units="%">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Percentage of sent frames that are limited in resolution due to bandwidth
-    for a sent (screen content) video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionsDisabled"
-    units="disabled resolutions">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    For frames that are limited in resolution due to bandwidth, the average
-    number of disabled resolutions is recorded for a sent (screen content) video
-    stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.BitrateSentInKbps" units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent bits per second for a sent screenshare stream. Recorded
-    when a stream is removed. The total number of bytes is divided by the time
-    the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.EncodeTimeInMs" units="ms">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average encode time per frame for a sent (screen content) video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.FecBitrateSentInKbps" units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent FEC bits per second for a sent screenshare stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of received RTCP FIR packets per minute for a sent screenshare
-    stream. Recorded when a stream is removed. The total number of packets is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.FramesPerDrop"
-    units="sent/dropped ratio">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Ratio of sent frames to dropped frames at the encoder. The value is reported
-    when a stream is removed and is calculated as the total number frames sent
-    divided by the number of dropped frames.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.FramesPerOvershoot"
-    units="sent/overshoot ratio">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Ratio of sent frames to number of re-encoded frames (due to target bitrate
-    overshoot). The value is reported when a stream is removed and is calculated
-    as the total number frames sent divided by the number of re-encoded frames.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.InputFramesPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of incoming frames per second for a sent (screen content) video
-    stream. Recorded when a stream is removed. The total number of frames is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.InputHeightInPixels" units="pixels">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average input height per frame (for incoming frames to video engine) for
-    a sent (screen content) video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.InputWidthInPixels" units="pixels">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average input width per frame (for incoming frames to video engine) for
-    a sent (screen content) video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.KeyFramesSentInPermille"
-    units="permille">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Permille of frames that are key frames for a sent (screen content) video
-    stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.Layer0">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Stats for the lower layer (TL0) of a screenshare stream in conference mode.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.Layer1">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Stats for the higher layer (TL1) of a screenshare stream in conference mode.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.MediaBitrateSentInKbps" units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent media payload bits per second for a sent screenshare
-    stream. Recorded when a stream is removed. The total number of bytes is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of received RTCP NACK packets per minute for a sent screenshare
-    stream. Recorded when a stream is removed. The total number of packets is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"
-    units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent padding bits per second for a sent screenshare stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute"
-    units="packets/minute">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of received RTCP PLI packets per minute for a sent screenshare
-    stream. Recorded when a stream is removed. The total number of packets is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionDownscales"
-    units="downscales">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    For frames that are downscaled in resolution due to quality, the average
-    number of downscales is recorded for a sent (screen content) video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionInPercent"
-    units="%">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Percentage of sent frames that are downscaled in resolution due to quality
-    for a sent (screen content) video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"
-    units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of retransmitted bits per second for a sent screenshare stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.RtxBitrateSentInKbps" units="kbps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent bits over RTX per second for a sent screenshare stream.
-    Recorded when a stream is removed. The total number of bytes is divided by
-    the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SendSideDelayInMs" units="ms">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average delay (of average delays) of sent packets for a sent (screen
-    content) video stream. Recorded when a stream is removed. The delay is
-    measured from a frame is input to video engine until a packet is sent to the
-    network. For each sent packet, the average delay of all sent packets over
-    the last second is reported. The average of these reported delays is
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SendSideDelayMaxInMs" units="ms">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average delay (of max delays) of sent packets for a sent (screen
-    content) video stream. Recorded when a stream is removed. The delay is
-    measured from a frame is input to video engine until a packet is sent to the
-    network. For each sent packet, the maximum delay of all sent packets over
-    the last second is reported. The average of these reported delays is
-    recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SentFramesPerSecond" units="fps">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The number of sent frames per second for a sent (screen content) video
-    stream. Recorded when a stream is removed. The total number of frames is
-    divided by the time the video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SentHeightInPixels" units="pixels">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average sent height per frame for a sent (screen content) video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SentPacketsLostInPercent" units="%">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Percentage of sent packets lost for a sent screenshare stream. Recorded when
-    a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.SentWidthInPixels" units="pixels">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    The average sent width per frame for a sent (screen content) video stream.
-    Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent"
-    units="%">
-  <owner>sprang@chromium.org</owner>
-  <summary>
-    Percentage of unique RTCP NACK requests that are received in response to a
-    sent screenshare stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SendDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average send delay of sent packets for a sent video stream. Recorded
-    when a stream is removed. The delay is measured from a packet is sent to the
-    transport until leaving the socket.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SendSideDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average delay (of average delays) of sent packets for a sent video
-    stream. Recorded when a stream is removed. The delay is measured from a
-    frame is input to video engine until a packet is sent to the network. For
-    each sent packet, the average delay of all sent packets over the last second
-    is reported. The average of these reported delays is recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SendSideDelayMaxInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average delay (of max delays) of sent packets for a sent video stream.
-    Recorded when a stream is removed. The delay is measured from a frame is
-    input to video engine until a packet is sent to the network. For each sent
-    packet, the maximum delay of all sent packets over the last second is
-    reported. The average of these reported delays is recorded.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SendStreamLifetimeInSeconds" units="seconds">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The lifetime of a video send stream. Recorded when a VideoSendStream
-    instance is destroyed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SentFramesPerSecond" units="fps">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The number of sent frames per second for a sent video stream. Recorded when
-    a stream is removed. The total number of frames is divided by the time the
-    video stream exists.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SentHeightInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average sent height per frame for a sent video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SentPacketsLostInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of sent packets lost for a sent video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.SentWidthInPixels" units="pixels">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    The average sent width per frame for a sent video stream. Recorded when a
-    stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.TargetDelayInMs" units="ms">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Average target delay (jitter delay + decode time + render delay) for a
-    received video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.UniqueNackRequestsReceivedInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of unique RTCP NACK requests that are received in response to a
-    sent video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.UniqueNackRequestsSentInPercent" units="%">
-  <owner>asapersson@chromium.org</owner>
-  <summary>
-    Percentage of unique RTCP NACK requests that are sent in response to a
-    received video stream. Recorded when a stream is removed.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Video.VP8DecoderImpl.TooManyPendingFrames"
-    units="counts">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Counts occurences of if the VP8 software decoder runs out of buffers due to
-    that they are not returned to the buffer pool. See http://crbug/652923 and
-    http://crbug/542522.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.webkitApiCount" enum="JavaScriptAPIName">
-  <owner>perkj@chromium.org</owner>
-  <owner>mcasas@chromium.org</owner>
-  <owner>emircan@chromium.org</owner>
-  <summary>Counts number of calls to WebRTC APIs from JavaScript.</summary>
-</histogram>
-
-<histogram name="WebRTC.webkitApiCountPerSession" enum="JavaScriptAPIName">
-  <owner>perkj@chromium.org</owner>
-  <summary>
-    Counts the number of calls to WebRTC APIs from JavaScript once per session.
-    A session is a crude estimate since its implemented as the lifetime of the
-    render process that called the WebRTC API.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.webkitApiCountUniqueByOrigin" enum="JavaScriptAPIName">
-  <obsolete>
-    Deprecated as of r253828 (27 Feb 2014).
-  </obsolete>
-  <owner>tommi@chromium.org</owner>
-  <summary>
-    Counts number of calls to WebRTC APIs from JavaScript, once per origin per
-    renderer process.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.WindowCaptureTime" units="ms">
-  <owner>jiayl@chromium.org</owner>
-  <summary>Time for capturing one frame in window capturing.</summary>
-</histogram>
-
-<histogram name="WebShare.ApiCount" enum="WebShareMethod">
-  <owner>mgiuca@chromium.org</owner>
-  <summary>
-    Counts the number of calls to navigator.share. Includes both successful and
-    failed shares.
-  </summary>
-</histogram>
-
-<histogram name="WebShare.ShareOutcome" enum="WebShareOutcome">
-  <owner>mgiuca@chromium.org</owner>
-  <summary>
-    Records the outcome of calls to navigator.share. This will not count any
-    calls that never complete (e.g., if the page closes while the picker is
-    open). Therefore, DO NOT look at the raw percentages of this histogram;
-    instead, compare these numbers with the WebShare.ApiCount.Share total.
-
-    NOTE: At the moment, if the user cancels the picker, its recording will be
-    delayed, and possibly never recorded (https://crbug.com/636274), so that
-    will account for a discrepancy between ShareOutcome and ApiCount.Share.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction">
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks actions with the website setting (a.k.a. page info / origin info)
-    bubble, such as opening it up or clicking on the Connection tab.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Action.HttpsUrl" enum="WebsiteSettingsAction">
-  <obsolete>
-    Deprecated October 2016 in favor of Security.PageInfo.Action.HttpsUrl.Valid,
-    Security.PageInfo.Action.HttpsUrl.Dangerous, and
-    Security.PageInfo.Action.HttpsUrl.Downgraded.
-  </obsolete>
-  <owner>lgarron@chromium.org</owner>
-  <summary>
-    Tracks WebsiteSettings actions that take place on an HTTPS URL. This
-    completely disregards security status.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Menu.PermissionChanged" enum="ContentType">
-  <owner>miguelg@chromium.org</owner>
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is changed using the
-    content settings menu.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Menu.PermissionChanged.Allowed"
-    enum="ContentType">
-  <owner>miguelg@chromium.org</owner>
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is set to 'Allowed'
-    using the content settings menu.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Menu.PermissionChanged.Blocked"
-    enum="ContentType">
-  <owner>miguelg@chromium.org</owner>
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is set to 'Blocked'
-    using the content settings menu.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.Menu.PermissionChanged.Reset"
-    enum="ContentType">
-  <owner>miguelg@chromium.org</owner>
-  <owner>finnur@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is reset to the
-    default value using the content settings menu.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.OriginInfo.PermissionChanged"
-    enum="ContentType">
-  <owner>sashab@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is changed using the
-    Origin Info dialog.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Allowed"
-    enum="ContentType">
-  <owner>sashab@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is set to 'Allowed'
-    using the Origin Info dialog.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Blocked"
-    enum="ContentType">
-  <owner>sashab@chromium.org</owner>
-  <owner>felt@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is set to 'Blocked'
-    using the Origin Info dialog.
-  </summary>
-</histogram>
-
-<histogram name="WebsiteSettings.PermissionChanged" enum="ContentType">
-  <obsolete>
-    Deprecated 12/2014 in Issue 433776, and replaced by
-    WebsiteSettings.OriginInfo.PermissionChanged.
-  </obsolete>
-  <owner>lgarron@chromium.org</owner>
-  <owner>sashab@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type (permission) is changed using the
-    Website Settings UI.
-  </summary>
-</histogram>
-
-<histogram name="websql.Async.OpenTime.Error" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>
-    The time required to try (and fail) to open a Web SQL database.
-  </summary>
-</histogram>
-
-<histogram name="websql.Async.OpenTime.Success" units="ms">
-  <owner>cmumford@chromium.org</owner>
-  <summary>The time required to successfully open a Web SQL database.</summary>
-</histogram>
-
-<histogram name="websql.OpenDatabase" enum="BooleanSecure">
-  <owner>michaeln@chromium.org</owner>
-  <summary>
-    Counts the number of WebSQL databases opened for secure vs insecure origins.
-  </summary>
-</histogram>
-
-<histogram name="Webstore.ExtensionInstallResult" enum="BooleanSuccess">
-  <owner>jackhou@chromium.org</owner>
-  <summary>
-    The success or failure of all extension installs from the webstore. This
-    includes those initiated by sync.
-  </summary>
-</histogram>
-
-<histogram name="WebstoreWidgetApp.Close" enum="SuggestAppsDialogCloseReason">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Webstore Widget app: the reason why the suggest apps dialog was closed.
-  </summary>
-</histogram>
-
-<histogram name="WebstoreWidgetApp.Install" enum="SuggestAppsDialogInstall">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Webstore Widget app: whether the Webstore item user selected was
-    successfully installed or not.
-  </summary>
-</histogram>
-
-<histogram name="WebstoreWidgetApp.Load" enum="SuggestAppsDialogLoad">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Webstore Widget app: whether the initialization of the dialog succeeded or
-    not.
-  </summary>
-</histogram>
-
-<histogram name="WebstoreWidgetApp.LoadTime" units="ms">
-  <owner>joshwoodward@google.com</owner>
-  <summary>
-    Webstore Widget app: time to load the widget contained in the app. Measured
-    between the moment window appears and the moment all the contents in the app
-    including the Chrome Webstore widget are ready.
-  </summary>
-</histogram>
-
-<histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes">
-  <owner>dbeam@chromium.org</owner>
-  <summary>URLs for which Chrome creates WebUIControllers.</summary>
-</histogram>
-
-<histogram name="WebUsb.ChooserClosed" enum="WebUsbChooserClosed">
-  <owner>reillyg@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Records the reason why the WebUSB device chooser was closed.
-  </summary>
-</histogram>
-
-<histogram name="WebUsb.DetectorInitialization" units="ms">
-  <owner>reillyg@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Records the time spent initializing the WebUSB detector module.
-  </summary>
-</histogram>
-
-<histogram name="WebUsb.NotificationClosed" enum="WebUsbNotificationClosed">
-  <owner>reillyg@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Records the reason why the &quot;WebUSB device detected&quot; notification
-    was dismissed.
-  </summary>
-</histogram>
-
-<histogram name="WebUsb.PermissionRevoked" enum="WebUsbPermissionRevoked">
-  <owner>reillyg@chromium.org</owner>
-  <owner>juncai@chromium.org</owner>
-  <summary>
-    Records when the user revokes permission for an origin to connect to a USB
-    device using the WebUSB API.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.SignInPromptResult" enum="WelcomeSignInPromptOutcome">
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Records the result of promoting sign-in via the Welcome page.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.Win10.DefaultPromptResult" enum="BooleanDefault">
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Records whether or not Chrome was the default browser when the user left the
-    Win10-specific Welcome page.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.Win10.NewPromoPageAdded" enum="BooleanShown">
-  <owner>pmonette@chromium.org</owner>
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Emits a &quot;true&quot; sample when the revamped WebUI-based welcome page
-    is added to the startup tabs list. This means that barring an error on
-    startup, it was shown to the user. This histogram can only be recorded
-    during first-run flow, when the EnableWelcomeWin10 experiment is enabled.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.Win10.OriginalPromoPageAdded" enum="BooleanShown">
-  <owner>pmonette@chromium.org</owner>
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Emits a &quot;true&quot; sample when the old external welcome page is added
-    to the startup tabs list. This means that barring an error on startup, it
-    was shown to the user. This histogram can only be recorded during first-run
-    flow, when the EnableWelcomeWin10 experiment is disabled.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.Win10.PinCheckTimedOut" enum="BooleanTimedOut">
-  <owner>pmonette@chromium.org</owner>
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Records whether or not the check that verifies if Chrome is pinned to the
-    taskbar has timed out. This check is done when the welcome page is opened in
-    order to determine which instructions to display to the user.
-  </summary>
-</histogram>
-
-<histogram name="Welcome.Win10.PinnedPromptResult" enum="BooleanPinned">
-  <owner>tmartino@chromium.org</owner>
-  <summary>
-    Records whether or not Chrome was pinned to the taskbar when the user left
-    the Win10-specific Welcome page.
-  </summary>
-</histogram>
-
-<histogram name="Win8.PageLoad" enum="Win8PageLoadType">
-  <owner>zturner@chromium.org</owner>
-  <summary>
-    Count of page loads in each of the 2 different environments (metro/desktop)
-    on Windows 8.
-  </summary>
-</histogram>
-
-<histogram name="WindowManager.AppWindowCountPerLoad">
-  <owner>kuscher@chromium.org</owner>
-  <summary>
-    The number of app windows open when a load completes. This includes windows
-    opened by an app shortcut, or apps opened in a popup. This only counts v1
-    apps.
-  </summary>
-</histogram>
-
-<histogram name="WindowManager.PanelWindowCountPerLoad">
-  <obsolete>
-    Deprecated 4/2013. No longer tracked.
-  </obsolete>
-  <owner>kuscher@chromium.org</owner>
-  <summary>
-    The number of panel windows open when a load completes. Panels are windows
-    docked to the bottom of the OS desktop, which are visible to the user even
-    while the user is interacting with other applications.
-  </summary>
-</histogram>
-
-<histogram name="WindowManager.PopUpWindowCountPerLoad">
-  <owner>kuscher@chromium.org</owner>
-  <summary>
-    The number of popup windows open when a load completes. Popup windows only
-    have one content area (no multiple tabs) and a stripped down toolbar
-    consisting only of a read-only address bar.
-  </summary>
-</histogram>
-
-<histogram name="WindowManager.TabbedWindowCountPerLoad">
-  <owner>kuscher@chromium.org</owner>
-  <summary>
-    The number of tabbed windows open when a load completes. A tabbed window is
-    a normal browser window which can have one or more tabs.
-  </summary>
-</histogram>
-
-<histogram name="Windows.GetVersionExVersion" enum="WindowsVersion">
-  <owner>scottmg@chromium.org</owner>
-  <summary>
-    The Windows version (base::win::Version) as reported by GetVersionEx(). This
-    is queried shortly after startup.
-  </summary>
-</histogram>
-
-<histogram name="Windows.InCompatibilityMode" enum="BooleanCompatibilityMode">
-  <owner>scottmg@chromium.org</owner>
-  <summary>
-    A boolean used to indicate when the Windows version reported by
-    GetVersionEx() and the Windows version reported by VerQueryValue() on
-    kernel32 do not match. This is queried shortly after startup.
-  </summary>
-</histogram>
-
-<histogram name="Windows.IsPinnedToTaskbar" enum="IsPinnedToTaskbarResult">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    Indicates whether Chrome is pinned to the Windows taskbar for the current
-    user. Recorded shortly after startup.
-  </summary>
-</histogram>
-
-<histogram name="Windows.IsPinnedToTaskbar.ProcessError" enum="BooleanError">
-  <owner>pmonette@chromium.org</owner>
-  <summary>
-    Indicates whether a connection error occured between the browser and the
-    shell handler process. This is usually caused by a crash in the utility
-    process. This is logged every time the pinned state is queried.
-  </summary>
-</histogram>
-
-<histogram name="Windows.Kernel32Version" enum="WindowsVersion">
-  <owner>scottmg@chromium.org</owner>
-  <summary>
-    The Windows version (base::win::Version) as reported by VeryQueryValue() on
-    kernel32.dll. This is queried shortly after startup.
-  </summary>
-</histogram>
-
-<histogram name="Windows.ParentProcessNameHash" enum="ProcessNameHash">
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    The 32-bit hash of the lower-case parent process basename (e.g.
-    explorer.exe) of the main Chrome executable. Reported once during startup as
-    part of install verification.
-  </summary>
-</histogram>
-
-<histogram name="Windows.Tablet" enum="BooleanTablet">
-  <owner>zturner@chromium.org</owner>
-  <summary>Count of browser launches from a Windows tablet pc.</summary>
-</histogram>
-
-<histogram name="Windows.Win32kRendererLockdown" enum="BooleanEnabled">
-  <obsolete>
-    Deprecated 10/2016 as this is enabled by default so provides no useful data.
-  </obsolete>
-  <owner>wfh@chromium.org</owner>
-  <summary>
-    Count of browser launches where Win32k renderer lockdown is enabled.
-  </summary>
-</histogram>
-
-<histogram name="WinJumplist.Action" enum="WinJumplistCategory">
-  <owner>noms@chromium.org</owner>
-  <summary>The type of category clicked in the Windows Jumplist</summary>
-</histogram>
-
-<histogram name="WinJumplist.DetailedFolderMoveResults"
-    enum="JumplistIconsDetailedFolderMoveCategory">
-  <obsolete>
-    Obsolete 12/13/2016 as we are no long recording this metric.
-  </obsolete>
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric is recorded when folder JumpListIcons is moved (can be rename or
-    copy and delete) to JumpListIconsOld. This happens when tabs are closed,
-    mostly visited URLs get updated, etc. There are several key steps in this
-    folder move operation. Before the move operation, there is another step that
-    JumpListIconsOld folder is deleted. The status of these steps are put
-    together and recorded in this metric. The failure of any of these steps is
-    suspected to be related to a known issue.
-  </summary>
-</histogram>
-
-<histogram name="WinJumplist.DetailedFolderResults"
-    enum="JumplistIconsDetailedFolderOperationCategory">
-  <obsolete>
-    Obsolete 03/10/2017 as it is replaced by DetailedFolderResultsDeleteUpdated.
-  </obsolete>
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
-    updated. These two folders are updated when tabs are closed, mostly visited
-    URLs get updated, etc. These two folders are updated as follows 1)
-    JumpListIconsOld with its content get deleted; 2) if step 1 succeeds,
-    JumpListIcons is moved, 3) if any of the previous steps fails, JumpListIcons
-    is deleted, 4) A new JumpListIcons folder is created. The status of these 4
-    file operations are put together and recorded in this metric. The failure of
-    any of these file operations is suspected to be related to a known issue.
-  </summary>
-</histogram>
-
-<histogram name="WinJumplist.DetailedFolderResultsDeleteUpdated"
-    enum="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory">
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
-    updated. These two folders are updated when tabs are closed, mostly visited
-    URLs get updated, etc. These two folders are updated as follows 1)
-    JumpListIconsOld with its content get deleted; 2) if step 1 succeeds,
-    JumpListIcons is renamed to JumpListIconsOld, 3) if any of the previous
-    steps fails, JumpListIcons is deleted, 4) A new JumpListIcons folder is
-    created if deletion of JumpListIcons' content succeeds (only fail to delete
-    the directory is okay). The status of these 4 file operations are put
-    together and recorded in this metric. The failure of any of these file
-    operations is suspected to be related to a known issue.
-  </summary>
-</histogram>
-
-<histogram name="WinJumplist.FolderMoveResults"
-    enum="JumplistIconsFolderMoveCategory">
-  <obsolete>
-    Obselete 12/08/2016. DetailedFolderMoveResults is used for more detailed
-    analysis.
-  </obsolete>
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric is recorded when folder JumpListIcons is moved (can be rename or
-    copy and delete) to JumpListIconsOld. This happens when tabs are closed,
-    mostly visited URLs get updated, etc. There are 3 possible steps in this
-    folder move operation. Before the move operation, there is another step that
-    JumpListIconsOld folder is deleted. The status of these steps are put
-    together and recorded in this metric. The failure of any of these steps is
-    suspected to be related to a known issue listed below.
-    https://bugs.chromium.org/p/chromium/issues/detail?id=179576
-  </summary>
-</histogram>
-
-<histogram name="WinJumplist.FolderResults" enum="JumplisticonsfolderCategory">
-  <obsolete>
-    Obselete 12/13/2016, as we are now recording DetailedFolderResults.
-  </obsolete>
-  <owner>chengx@chromium.org</owner>
-  <summary>
-    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
-    updated. These two folders are updated when tabs are closed, mostly visited
-    URLs get updated, etc. These two folders are updated as follows 1)
-    JumpListIconsOld with its content get deleted; 2) JumpListIcons is moved, 3)
-    A new JumpListIcons folder is created. The status of these three file
-    operations are put together and recorded in this metric. The failure of any
-    of these file operations is suspected to be related to a known issue.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    Incremented each time the TimeTicks field trial runs on a machine with
-    multiple cores, but failed to change thread affinity. Broken down by Windows
-    version.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The smallest non-zero delta reported by subsequent calls to
-    QueryPerformanceCounter.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.NonStopTsc">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    True if the CPU's timestamp counter ticks at a constant rate regardless of
-    CPU frequency.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times the TimeTicks field trial failed because
-    QueryPerformanceCounter ticked backwards. Broken down by Windows version.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times the TimeTicks field trial succeeded. Broken down by
-    Windows version.
-  </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion">
-  <obsolete>
-    Removed 01/2017.
-  </obsolete>
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <summary>
-    The number of times the TimeTicks field trial ran for comparison with
-    WinTimeTicks.VersionSuccess. Broken down by Windows version.
-  </summary>
-</histogram>
-
-<histogram name="WorkerThread.DebuggerTask.Time" units="ms">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>The time taken for running a debugger task on WorkerThread.</summary>
-</histogram>
-
-<histogram name="WorkerThread.ExitCode" enum="WorkerThreadExitCode">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>Records the exit code of WorkerThread.</summary>
-</histogram>
-
-<histogram name="WorkerThread.Task.Time" units="ms">
-  <owner>nhiroki@chromium.org</owner>
-  <summary>The time taken for running a worker task on WorkerThread.</summary>
-</histogram>
-
-<histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction">
-  <owner>ainslie@chromium.org</owner>
-  <owner>edwardjung@chromium.org</owner>
-  <summary>Number of times that each menu item is clicked.</summary>
-</histogram>
-
-<histogram name="WrenchMenu.OpeningAnimationFrameTimes" units="ms">
-  <owner>kkimlabs@chromium.org</owner>
-  <summary>
-    Frame times of the Android wrench menu opening animation. For example, if
-    the menu opening animation runs exactly at 60fps for a second, then each
-    frame time is 16ms, and a total of 60 values of 16ms are recorded. If the
-    animation is janky, we will see values greater than 16ms in the histogram.
-  </summary>
-</histogram>
-
-<histogram name="WrenchMenu.RecentTabsSubMenu" enum="RecentTabsAction">
-  <owner>rpop@chromium.org</owner>
-  <summary>
-    The number of times each tab or window restore option in the Recent Tabs
-    submenu is clicked.
-  </summary>
-</histogram>
-
-<histogram name="WrenchMenu.TimeToAction">
-  <owner>ainslie@chromium.org</owner>
-  <owner>edwardjung@chromium.org</owner>
-  <summary>
-    The time a user takes to select a menu item after opening the menu.
-  </summary>
-</histogram>
-
-<histogram name="WrenchMenu.TouchDuration" units="ms">
-  <owner>kkimlabs@chromium.org</owner>
-  <summary>
-    Time difference between touch down and touch up on Android wrench button.
-  </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.AllResults">
-  <owner>hfung@chromium.org</owner>
-  <summary>
-    The number of results (either query or URL) from ZeroSuggest. This is set
-    every time a successful response from ZeroSuggest is recieved, which can be
-    every time the user focuses on the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.QueryResults">
-  <owner>hfung@chromium.org</owner>
-  <summary>
-    The number of query results returned from ZeroSuggest. This is set every
-    time a successful response from ZeroSuggest is recieved, which can be every
-    time the user focuses on the omnibox.
-  </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.URLResults">
-  <owner>hfung@chromium.org</owner>
-  <summary>
-    The number of URL results returned from ZeroSuggest. This is set every time
-    a successful response from ZeroSuggest is recieved, which can be every time
-    the user focuses on the omnibox.
-  </summary>
-</histogram>
-
-</histograms>
-
-<!-- Enum types -->
-
-<enums>
-
-<enum name="Abandoned" type="int">
-  <int value="0" label="Finished"/>
-  <int value="1" label="Abandoned"/>
-</enum>
-
-<enum name="AbandonType" type="int">
-  <int value="0" label="Not abandoned"/>
-  <int value="1" label="FinishDoc missing"/>
-  <int value="2" label="FinishAllLoads missing"/>
-  <int value="3" label="FinishAllLoads+FinishDoc missing"/>
-  <int value="4" label="LoadEventStart missing"/>
-  <int value="5" label="LoadEventStart+FinishDoc missing"/>
-  <int value="6" label="LoadEventStart+FinishAllLoads missing"/>
-  <int value="7" label="LoadEventStart+FinishAllLoads+FinishDoc missing"/>
-  <int value="8" label="LoadEventEnd missing"/>
-  <int value="9" label="LoadEventEnd+FinishDoc missing"/>
-  <int value="10" label="LoadEventEnd+FinishAllLoads missing"/>
-  <int value="11" label="LoadEventEnd+FinishAllLoads+FinishDoc missing"/>
-  <int value="12" label="LoadEventEnd+LoadEventStart missing"/>
-  <int value="13" label="LoadEventEnd+LoadEventStart+FinishDoc missing"/>
-  <int value="14" label="LoadEventEnd+LoadEventStart+FinishAllLoads missing"/>
-  <int value="15"
-      label="LoadEventEnd+LoadEventStart+FinishAllLoads+FinishDoc missing"/>
-</enum>
-
-<enum name="AcceleratedFixedRootBackground" type="int">
-  <int value="0" label="ScrolledMainFrame"/>
-  <int value="1" label="ScrolledMainFrameWithAcceleratedFixedRootBackground"/>
-  <int value="2" label="ScrolledMainFrameWithUnacceleratedFixedRootBackground"/>
-</enum>
-
-<enum name="AccessibilityModeFlagEnum" type="int">
-  <summary>Track individual accessibility mode flags that are enabled.</summary>
-  <int value="0" label="Native APIs"/>
-  <int value="1" label="Web Contents"/>
-  <int value="2" label="Inline Text Boxes"/>
-  <int value="3" label="Screen Reader"/>
-  <int value="4" label="HTML"/>
-</enum>
-
-<enum name="AccessibilityWinAPIEnum" type="int">
-  <summary>
-    Track which Windows accessibility APIs are being called by clients.
-  </summary>
-  <int value="0" label="UMA_API_ACC_DO_DEFAULT_ACTION">accDoDefaultAction</int>
-  <int value="1" label="UMA_API_ACC_HIT_TEST">accHitTest</int>
-  <int value="2" label="UMA_API_ACC_LOCATION">accLocation</int>
-  <int value="3" label="UMA_API_ACC_NAVIGATE">accNavigate</int>
-  <int value="4" label="UMA_API_ACC_SELECT">accSelect</int>
-  <int value="5" label="UMA_API_ADD_SELECTION">addSelection</int>
-  <int value="6" label="UMA_API_CONVERT_RETURNED_ELEMENT">
-    ConvertReturnedElement
-  </int>
-  <int value="7" label="UMA_API_DO_ACTION">doAction</int>
-  <int value="8" label="UMA_API_GET_ACCESSIBLE_AT">get_accessibleAt</int>
-  <int value="9" label="UMA_API_GET_ACC_CHILD">get_accChild</int>
-  <int value="10" label="UMA_API_GET_ACC_CHILD_COUNT">get_accChildCount</int>
-  <int value="11" label="UMA_API_GET_ACC_DEFAULT_ACTION">
-    get_accDefaultAction
-  </int>
-  <int value="12" label="UMA_API_GET_ACC_DESCRIPTION">get_accDescription</int>
-  <int value="13" label="UMA_API_GET_ACC_FOCUS">get_accFocus</int>
-  <int value="14" label="UMA_API_GET_ACC_HELP">get_accHelp</int>
-  <int value="15" label="UMA_API_GET_ACC_HELP_TOPIC">get_accHelpTopic</int>
-  <int value="16" label="UMA_API_GET_ACC_KEYBOARD_SHORTCUT">
-    get_accKeyboardShortcut
-  </int>
-  <int value="17" label="UMA_API_GET_ACC_NAME">get_accName</int>
-  <int value="18" label="UMA_API_GET_ACC_PARENT">get_accParent</int>
-  <int value="19" label="UMA_API_GET_ACC_ROLE">get_accRole</int>
-  <int value="20" label="UMA_API_GET_ACC_SELECTION">get_accSelection</int>
-  <int value="21" label="UMA_API_GET_ACC_STATE">get_accState</int>
-  <int value="22" label="UMA_API_GET_ACC_VALUE">get_accValue</int>
-  <int value="23" label="UMA_API_GET_ANCHOR">get_anchor</int>
-  <int value="24" label="UMA_API_GET_ANCHOR_TARGET">get_anchorTarget</int>
-  <int value="25" label="UMA_API_GET_APP_NAME">get_appName</int>
-  <int value="26" label="UMA_API_GET_APP_VERSION">get_appVersion</int>
-  <int value="27" label="UMA_API_GET_ATTRIBUTES_FOR_NAMES">
-    get_attributesForNames
-  </int>
-  <int value="28" label="UMA_API_GET_CAPTION">get_caption</int>
-  <int value="29" label="UMA_API_GET_CARET_OFFSET">get_caretOffset</int>
-  <int value="30" label="UMA_API_GET_CELL_AT">get_cellAt</int>
-  <int value="31" label="UMA_API_GET_CHARACTER_EXTENTS">
-    get_characterExtents
-  </int>
-  <int value="32" label="UMA_API_GET_CHILD_AT">get_childAt</int>
-  <int value="33" label="UMA_API_GET_CHILD_INDEX">get_childIndex</int>
-  <int value="34" label="UMA_API_GET_CLIPPED_SUBSTRING_BOUNDS">
-    get_clippedSubstringBounds
-  </int>
-  <int value="35" label="UMA_API_GET_COLUMN_DESCRIPTION">
-    get_columnDescription
-  </int>
-  <int value="36" label="UMA_API_GET_COLUMN_EXTENT">get_columnExtent</int>
-  <int value="37" label="UMA_API_GET_COLUMN_EXTENT_AT">get_columnExtentAt</int>
-  <int value="38" label="UMA_API_GET_COLUMN_HEADER">get_columnHeader</int>
-  <int value="39" label="UMA_API_GET_COLUMN_HEADER_CELLS">
-    get_columnHeaderCells
-  </int>
-  <int value="40" label="UMA_API_GET_COLUMN_INDEX">get_columnIndex</int>
-  <int value="41" label="UMA_API_GET_COMPUTED_STYLE">get_computedStyle</int>
-  <int value="42" label="UMA_API_GET_COMPUTED_STYLE_FOR_PROPERTIES">
-    get_computedStyleForProperties
-  </int>
-  <int value="43" label="UMA_API_GET_CURRENT_VALUE">get_currentValue</int>
-  <int value="44" label="UMA_API_GET_DESCRIPTION">get_description</int>
-  <int value="45" label="UMA_API_GET_DOC_TYPE">get_docType</int>
-  <int value="46" label="UMA_API_GET_DOM_TEXT">get_domText</int>
-  <int value="47" label="UMA_API_GET_END_INDEX">get_endIndex</int>
-  <int value="48" label="UMA_API_GET_EXTENDED_ROLE">get_extendedRole</int>
-  <int value="49" label="UMA_API_GET_EXTENDED_STATES">get_extendedStates</int>
-  <int value="50" label="UMA_API_GET_FIRST_CHILD">get_firstChild</int>
-  <int value="51" label="UMA_API_GET_FONT_FAMILY">get_fontFamily</int>
-  <int value="52" label="UMA_API_GET_GROUP_POSITION">get_groupPosition</int>
-  <int value="53" label="UMA_API_GET_HOST_RAW_ELEMENT_PROVIDER">
-    get_HostRawElementProvider
-  </int>
-  <int value="54" label="UMA_API_GET_HYPERLINK">get_hyperlink</int>
-  <int value="55" label="UMA_API_GET_HYPERLINK_INDEX">get_hyperlinkIndex</int>
-  <int value="56" label="UMA_API_GET_IACCESSIBLE_PAIR">
-    GetIAccessiblePair ALT
-  </int>
-  <int value="57" label="UMA_API_GET_IMAGE_POSITION">get_imagePosition</int>
-  <int value="58" label="UMA_API_GET_IMAGE_SIZE">get_imageSize</int>
-  <int value="59" label="UMA_API_GET_INDEX_IN_PARENT">get_indexInParent</int>
-  <int value="60" label="UMA_API_GET_INNER_HTML">get_innerHTML</int>
-  <int value="61" label="UMA_API_GET_IS_COLUMN_SELECTED">
-    get_isColumnSelected
-  </int>
-  <int value="62" label="UMA_API_GET_IS_ROW_SELECTED">get_isRowSelected</int>
-  <int value="63" label="UMA_API_GET_IS_SELECTED">get_isSelected</int>
-  <int value="64" label="UMA_API_GET_KEY_BINDING">get_keyBinding</int>
-  <int value="65" label="UMA_API_GET_LANGUAGE">get_language</int>
-  <int value="66" label="UMA_API_GET_LAST_CHILD">get_lastChild</int>
-  <int value="67" label="UMA_API_GET_LOCALE">get_locale</int>
-  <int value="68" label="UMA_API_GET_LOCALIZED_EXTENDED_ROLE">
-    get_localizedExtendedRole
-  </int>
-  <int value="69" label="UMA_API_GET_LOCALIZED_EXTENDED_STATES">
-    get_localizedExtendedStates
-  </int>
-  <int value="70" label="UMA_API_GET_LOCALIZED_NAME">get_localizedName</int>
-  <int value="71" label="UMA_API_GET_LOCAL_INTERFACE">get_localInterface</int>
-  <int value="72" label="UMA_API_GET_MAXIMUM_VALUE">get_maximumValue</int>
-  <int value="73" label="UMA_API_GET_MIME_TYPE">get_mimeType</int>
-  <int value="74" label="UMA_API_GET_MINIMUM_VALUE">get_minimumValue</int>
-  <int value="75" label="UMA_API_GET_NAME">get_name</int>
-  <int value="76" label="UMA_API_GET_NAMESPACE_URI_FOR_ID">
-    get_nameSpaceURIForID ALT
-  </int>
-  <int value="77" label="UMA_API_GET_NEW_TEXT">get_newText</int>
-  <int value="78" label="UMA_API_GET_NEXT_SIBLING">get_nextSibling</int>
-  <int value="79" label="UMA_API_GET_NODE_INFO">get_nodeInfo</int>
-  <int value="80" label="UMA_API_GET_N_CHARACTERS">get_nCharacters</int>
-  <int value="81" label="UMA_API_GET_N_COLUMNS">get_nColumns</int>
-  <int value="82" label="UMA_API_GET_N_EXTENDED_STATES">
-    get_nExtendedStates
-  </int>
-  <int value="83" label="UMA_API_GET_N_HYPERLINKS">get_nHyperlinks</int>
-  <int value="84" label="UMA_API_GET_N_RELATIONS">get_nRelations</int>
-  <int value="85" label="UMA_API_GET_N_ROWS">get_nRows</int>
-  <int value="86" label="UMA_API_GET_N_SELECTED_CELLS">get_nSelectedCells</int>
-  <int value="87" label="UMA_API_GET_N_SELECTED_CHILDREN">
-    get_nSelectedChildren
-  </int>
-  <int value="88" label="UMA_API_GET_N_SELECTED_COLUMNS">
-    get_nSelectedColumns
-  </int>
-  <int value="89" label="UMA_API_GET_N_SELECTED_ROWS">get_nSelectedRows</int>
-  <int value="90" label="UMA_API_GET_N_SELECTIONS">get_nSelections</int>
-  <int value="91" label="UMA_API_GET_OBJECT_FOR_CHILD">GetObjectForChild</int>
-  <int value="92" label="UMA_API_GET_OFFSET_AT_POINT">get_offsetAtPoint</int>
-  <int value="93" label="UMA_API_GET_OLD_TEXT">get_oldText</int>
-  <int value="94" label="UMA_API_GET_PARENT_NODE">get_parentNode</int>
-  <int value="95" label="UMA_API_GET_PATTERN_PROVIDER">GetPatternProvider</int>
-  <int value="96" label="UMA_API_GET_PREVIOUS_SIBLING">get_previousSibling</int>
-  <int value="97" label="UMA_API_GET_PROPERTY_VALUE">GetPropertyValue</int>
-  <int value="98" label="UMA_API_GET_PROVIDER_OPTIONS">get_ProviderOptions</int>
-  <int value="99" label="UMA_API_GET_RELATION">get_relation</int>
-  <int value="100" label="UMA_API_GET_RELATIONS">get_relations</int>
-  <int value="101" label="UMA_API_GET_ROW_COLUMN_EXTENTS">
-    get_rowColumnExtents
-  </int>
-  <int value="102" label="UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX">
-    get_rowColumnExtentsAtIndex
-  </int>
-  <int value="103" label="UMA_API_GET_ROW_DESCRIPTION">get_rowDescription</int>
-  <int value="104" label="UMA_API_GET_ROW_EXTENT">get_rowExtent</int>
-  <int value="105" label="UMA_API_GET_ROW_EXTENT_AT">get_rowExtentAt</int>
-  <int value="106" label="UMA_API_GET_ROW_HEADER">get_rowHeader</int>
-  <int value="107" label="UMA_API_GET_ROW_HEADER_CELLS">get_rowHeaderCells</int>
-  <int value="108" label="UMA_API_GET_ROW_INDEX">get_rowIndex</int>
-  <int value="109" label="UMA_API_GET_RUNTIME_ID">GetRuntimeId</int>
-  <int value="110" label="UMA_API_GET_SELECTED_CELLS">get_selectedCells</int>
-  <int value="111" label="UMA_API_GET_SELECTED_CHILDREN">
-    get_selectedChildren
-  </int>
-  <int value="112" label="UMA_API_GET_SELECTED_COLUMNS">
-    get_selectedColumns
-  </int>
-  <int value="113" label="UMA_API_GET_SELECTED_ROWS">get_selectedRows</int>
-  <int value="114" label="UMA_API_GET_SELECTION">get_selection</int>
-  <int value="115" label="UMA_API_GET_START_INDEX">get_startIndex</int>
-  <int value="116" label="UMA_API_GET_STATES">get_states</int>
-  <int value="117" label="UMA_API_GET_SUMMARY">get_summary</int>
-  <int value="118" label="UMA_API_GET_TABLE">get_table</int>
-  <int value="119" label="UMA_API_GET_TEXT">get_text</int>
-  <int value="120" label="UMA_API_GET_TEXT_AFTER_OFFSET">
-    get_textAfterOffset
-  </int>
-  <int value="121" label="UMA_API_GET_TEXT_AT_OFFSET">get_textAtOffset</int>
-  <int value="122" label="UMA_API_GET_TEXT_BEFORE_OFFSET">
-    get_textBeforeOffset
-  </int>
-  <int value="123" label="UMA_API_GET_TITLE">get_title</int>
-  <int value="124" label="UMA_API_GET_TOOLKIT_NAME">get_toolkitName</int>
-  <int value="125" label="UMA_API_GET_TOOLKIT_VERSION">get_toolkitVersion</int>
-  <int value="126" label="UMA_API_GET_UNCLIPPED_SUBSTRING_BOUNDS">
-    get_unclippedSubstringBounds
-  </int>
-  <int value="127" label="UMA_API_GET_UNIQUE_ID">get_uniqueID</int>
-  <int value="128" label="UMA_API_GET_URL">get_URL</int>
-  <int value="129" label="UMA_API_GET_VALID">get_valid</int>
-  <int value="130" label="UMA_API_GET_WINDOW_HANDLE">get_windowHandle</int>
-  <int value="131" label="UMA_API_IA2_GET_ATTRIBUTES">get_attributes ALT</int>
-  <int value="132" label="UMA_API_IA2_SCROLL_TO">scrollTo ALT</int>
-  <int value="133" label="UMA_API_IAACTION_GET_DESCRIPTION">
-    get_description ALT
-  </int>
-  <int value="134" label="UMA_API_IATEXT_GET_ATTRIBUTES">
-    get_attributes ALT
-  </int>
-  <int value="135" label="UMA_API_ISIMPLEDOMNODE_GET_ATTRIBUTES">
-    get_attributes ALT
-  </int>
-  <int value="136" label="UMA_API_ISIMPLEDOMNODE_SCROLL_TO">scrollTo ALT</int>
-  <int value="137" label="UMA_API_N_ACTIONS">nActions</int>
-  <int value="138" label="UMA_API_PUT_ALTERNATE_VIEW_MEDIA_TYPES">
-    put_alternateViewMediaTypes
-  </int>
-  <int value="139" label="UMA_API_QUERY_SERVICE">QueryService</int>
-  <int value="140" label="UMA_API_REMOVE_SELECTION">removeSelection</int>
-  <int value="141" label="UMA_API_ROLE">role</int>
-  <int value="142" label="UMA_API_SCROLL_SUBSTRING_TO">scrollSubstringTo</int>
-  <int value="143" label="UMA_API_SCROLL_SUBSTRING_TO_POINT">
-    scrollSubstringToPoint
-  </int>
-  <int value="144" label="UMA_API_SCROLL_TO_POINT">scrollToPoint</int>
-  <int value="145" label="UMA_API_SCROLL_TO_SUBSTRING">scrollToSubstring</int>
-  <int value="146" label="UMA_API_SELECT_COLUMN">selectColumn</int>
-  <int value="147" label="UMA_API_SELECT_ROW">selectRow</int>
-  <int value="148" label="UMA_API_SET_CARET_OFFSET">setCaretOffset</int>
-  <int value="149" label="UMA_API_SET_CURRENT_VALUE">setCurrentValue</int>
-  <int value="150" label="UMA_API_SET_SELECTION">setSelection</int>
-  <int value="151" label="UMA_API_TABLE2_GET_SELECTED_COLUMNS">
-    get_selectedColumns ALT
-  </int>
-  <int value="152" label="UMA_API_TABLE2_GET_SELECTED_ROWS">
-    get_selectedRows ALT
-  </int>
-  <int value="153" label="UMA_API_TABLECELL_GET_COLUMN_INDEX">
-    get_columnIndex ALT
-  </int>
-  <int value="154" label="UMA_API_TABLECELL_GET_IS_SELECTED">
-    get_isSelected ALT
-  </int>
-  <int value="155" label="UMA_API_TABLECELL_GET_ROW_INDEX">
-    get_rowIndex ALT
-  </int>
-  <int value="156" label="UMA_API_UNSELECT_COLUMN">unselectColumn</int>
-  <int value="157" label="UMA_API_UNSELECT_ROW">unselectRow</int>
-</enum>
-
-<enum name="AccountChooserDismissalReason" type="int">
-  <int value="0" label="Canceled"/>
-  <int value="1" label="Credential chosen"/>
-  <int value="2" label="Sign in clicked"/>
-</enum>
-
-<enum name="AccountChooserUsabilityState" type="int">
-  <int value="0" label="Looks OK"/>
-  <int value="1" label="Empty username"/>
-  <int value="2" label="Duplicate usernames"/>
-  <int value="3" label="Empty and duplicate usernames"/>
-</enum>
-
-<enum name="AccountRelation" type="int">
-  <int value="0" label="Empty cookie jar"/>
-  <int value="1" label="No signed in, single signed out match"/>
-  <int value="2" label="No signed in, one of multiple signed out match"/>
-  <int value="3" label="No signed in with signed out, no match"/>
-  <int value="4" label="Single signed in match, no signed out"/>
-  <int value="5" label="Signle signed in match with signed out"/>
-  <int value="6" label="One of multiple signed in match, any signed out"/>
-  <int value="7" label="With signed in, one of signed out match"/>
-  <int value="8" label="With signed in, no match"/>
-</enum>
-
-<enum name="ActionAfterDoubleTap" type="int">
-  <int value="0" label="Navigated Back"/>
-  <int value="1" label="Stopped Navigation"/>
-  <int value="2" label="No Action"/>
-</enum>
-
-<enum name="ActionUponResourceRequest" type="int">
-  <int value="0" label="Load resource"/>
-  <int value="1" label="Revalidate resource"/>
-  <int value="2" label="Use resource from cache"/>
-</enum>
-
-<enum name="ActiveWindowShowType" type="int">
-  <int value="0" label="No Active Window"/>
-  <int value="1" label="Other"/>
-  <int value="2" label="Maximized"/>
-  <int value="3" label="Fullscreen"/>
-  <int value="4" label="Snapped"/>
-  <int value="5" label="Docked"/>
-  <int value="6" label="Pinned"/>
-  <int value="7" label="TrustedPinned"/>
-</enum>
-
-<enum name="ActivityTrackerCollectInitStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unknown directory"/>
-  <int value="2" label="Get stability file path failed"/>
-  <int value="3" label="Crashpad database init failed"/>
-</enum>
-
-<enum name="ActivityTrackerCollectStatus" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Sucess"/>
-  <int value="2" label="Analyzer creation failed"/>
-  <int value="3" label="Debug file has no data"/>
-  <int value="4" label="Prepare new crash report failed"/>
-  <int value="5" label="Write to minidump failed"/>
-  <int value="6" label="Debug file deletion failed"/>
-  <int value="7" label="Finished writing crash report failed"/>
-</enum>
-
-<enum name="ActivityTrackerRecordInitStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Create stability dir failed"/>
-  <int value="2" label="Get stability file path failed"/>
-</enum>
-
-<enum name="ActivityTrackerSystemSessionAnalysisStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Missing timestamp"/>
-  <int value="2" label="Missing analyzer"/>
-  <int value="3" label="Analysis failed"/>
-  <int value="4" label="Outside range"/>
-</enum>
-
-<enum name="ActivityTrackerWriteDumpStatus" type="int">
-  <int value="0" label="Sucess"/>
-  <int value="1" label="Failed"/>
-  <int value="2" label="Failed (missing product details)"/>
-</enum>
-
-<enum name="AddressFamily" type="int">
-  <int value="0" label="Unspecified"/>
-  <int value="1" label="IPv4"/>
-  <int value="2" label="IPv6"/>
-</enum>
-
-<enum name="AddSearchProvider" type="int">
-  <int value="0" label="window.external.AddSearchProvider was called"/>
-  <int value="1" label="A confirmation dialog was shown"/>
-  <int value="2" label="The user added a search engine via the dialog"/>
-  <int value="3"
-      label="The user saw the dialog but closed it without adding an engine"/>
-</enum>
-
-<enum name="AffiliationFetchResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Network/server error"/>
-  <int value="2" label="Malformed response"/>
-</enum>
-
-<enum name="AlternateProtocolUsage" type="int">
-  <int value="0" label="ALTERNATE_PROTOCOL_USAGE_NO_RACE"/>
-  <int value="1" label="ALTERNATE_PROTOCOL_USAGE_WON_RACE"/>
-  <int value="2" label="ALTERNATE_PROTOCOL_USAGE_LOST_RACE"/>
-  <int value="3" label="ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING"/>
-  <int value="4" label="ALTERNATE_PROTOCOL_USAGE_BROKEN"/>
-</enum>
-
-<enum name="AlternativeServiceType" type="int">
-  <int value="0" label="No alternative service"/>
-  <int value="1" label="QUIC, destination same as origin"/>
-  <int value="2" label="QUIC, destination different from origin"/>
-  <int value="3" label="Not QUIC, destination same as origin"/>
-  <int value="4" label="Not QUIC, destination different from origin"/>
-</enum>
-
-<enum name="AndroidActivityId" type="int">
-  <int value="1" label="Unknown"/>
-  <int value="2" label="Main"/>
-  <int value="3" label="Preferences"/>
-  <int value="4" label="WebappActivity"/>
-  <int value="5" label="FullScreenActivity"/>
-</enum>
-
-<enum name="AndroidActivityStopReason" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Chrome sent to background by system back">
-    The user pressed the system back button, sending Chrome to the background.
-  </int>
-  <int value="2" label="Return button closed app">
-    The user hit the return UI button to close the tab and return to the
-    previous app.
-  </int>
-  <int value="3" label="Immediately launched child CustomTabActivity">
-    The Activity immediately launched a CustomTabActivity on top of itself.
-  </int>
-  <int value="4" label="Child CustomTabActivity closed itself">
-    The child CustomTabActivity was closed by the user, so this Activity sent
-    itself to the background to return the user to the previous app.
-  </int>
-  <int value="5" label="Another Chrome Activity took focus">
-    Another of Chrome's Activities (e.g. Settings or Bookmarks) launched and
-    took focus.
-  </int>
-</enum>
-
-<enum name="AndroidActivitySystemBackAction" type="int">
-  <int value="0" label="Nothing happened"/>
-  <int value="1"
-      label="The foreground tab contained a help article and was closed"/>
-  <int value="2"
-      label="Chrome was minimized and the foreground tab was kept open"/>
-  <int value="3"
-      label="Chrome was minimized and the foreground tab was closed"/>
-  <int value="4"
-      label="The foreground tab was closed, but Chrome stayed visible"/>
-  <int value="5" label="Error: No tab is currently being displayed"/>
-  <int value="6" label="User exited the tab switcher"/>
-  <int value="7" label="User exited fullscreen mode"/>
-  <int value="8" label="User navigated backward in the tab's history"/>
-</enum>
-
-<enum name="AndroidArmFpu" type="int">
-  <int value="0" label="No NEON support"/>
-  <int value="1" label="NEON support"/>
-</enum>
-
-<enum name="AndroidDownloadExtensionType" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="APK"/>
-  <int value="2" label="CSV"/>
-  <int value="3" label="DOC"/>
-  <int value="4" label="DOCX"/>
-  <int value="5" label="EXE"/>
-  <int value="6" label="PDF"/>
-  <int value="7" label="PPT"/>
-  <int value="8" label="PPTX"/>
-  <int value="9" label="PSD"/>
-  <int value="10" label="RTF"/>
-  <int value="11" label="TXT"/>
-  <int value="12" label="XLS"/>
-  <int value="13" label="XLSX"/>
-  <int value="14" label="ZIP"/>
-</enum>
-
-<enum name="AndroidDownloadFilterType" type="int">
-  <int value="0" label="All"/>
-  <int value="1" label="Page"/>
-  <int value="2" label="Video"/>
-  <int value="3" label="Audio"/>
-  <int value="4" label="Image"/>
-  <int value="5" label="Document"/>
-  <int value="6" label="Other"/>
-</enum>
-
-<enum name="AndroidEvictionReason" type="int">
-  <int value="0" label="TabUnusedTooLong"/>
-  <int value="1" label="TabUnusedInSession"/>
-  <int value="2" label="LimitOfActiveTabs"/>
-  <int value="3" label="EvictNTabs"/>
-  <int value="4" label="EvictAll"/>
-</enum>
-
-<enum name="AndroidFeedbackCategory" type="int">
-  <summary>
-    This list corresponds to the categories the user can press when selecting a
-    category their feedback falls under.
-  </summary>
-  <int value="0" label="Error or blank page"/>
-  <int value="1" label="Chrome crashes or freezes"/>
-  <int value="2" label="Issues with website"/>
-  <int value="3" label="Trouble with something else"/>
-</enum>
-
-<enum name="AndroidFeedbackCategoryDetails" type="int">
-  <summary>
-    This list corresponds to all the possible options a user can press when
-    selecting an option their feedback falls under. Each option is prefixed with
-    a shortened name of the category that the option belongs to.
-  </summary>
-  <int value="0" label="Error Network error"/>
-  <int value="1" label="Error Blank page"/>
-  <int value="2" label="Error Video won't play"/>
-  <int value="3" label="Error Page won't download"/>
-  <int value="4" label="Error Can't connect to Wi-Fi"/>
-  <int value="5" label="Error Other"/>
-  <int value="6" label="Crash Watching videos"/>
-  <int value="7" label="Crash Downloading files"/>
-  <int value="8" label="Crash Browsing websites"/>
-  <int value="9" label="Crash Other"/>
-  <int value="10" label="Website Account or sign-in problems"/>
-  <int value="11" label="Website Advertisements"/>
-  <int value="12" label="Website Video won't play"/>
-  <int value="13" label="Website Slow website"/>
-  <int value="14" label="Website Broken or unreadable website"/>
-  <int value="15" label="Website Other"/>
-  <int value="16" label="Something Website"/>
-  <int value="17" label="Something Tabs"/>
-  <int value="18" label="Something Settings"/>
-  <int value="19" label="Something Other"/>
-</enum>
-
-<enum name="AndroidGATTConnectionErrorCodes" type="int">
-  <summary>
-    This list includes all errors from the Bluetooth Specification Version 4.2
-    [Vol 2, Part D] as well as an error from Android's BluetoothGatt (0x101
-    GATT_FAILURE) and an error from Bluedroid's gatt_api.h (0x100 L2CAP
-    connection cancelled).
-  </summary>
-  <int value="0" label="0x00 Success"/>
-  <int value="1" label="0x01 Unknown HCI Command"/>
-  <int value="2" label="0x02 Unknown Connection Identifier"/>
-  <int value="3" label="0x03 Hardware Failure"/>
-  <int value="4" label="0x04 Page Timeout"/>
-  <int value="5" label="0x05 Authentication Failure"/>
-  <int value="6" label="0x06 PIN or Key Missing"/>
-  <int value="7" label="0x07 Memory Capacity Exceeded"/>
-  <int value="8" label="0x08 Connection Timeout"/>
-  <int value="9" label="0x09 Connection Limit Exceeded"/>
-  <int value="10"
-      label="0x0A Synchronous Connection Limit To A Device Exceeded"/>
-  <int value="11" label="0x0B ACL Connection Already Exists"/>
-  <int value="12" label="0x0C Command Disallowed"/>
-  <int value="13" label="0x0D Connection Rejected due to Limited Resources"/>
-  <int value="14" label="0x0E Connection Rejected Due To Security Reasons"/>
-  <int value="15" label="0x0F Connection Rejected due to Unacceptable BD_ADDR"/>
-  <int value="16" label="0x10 Connection Accept Timeout Exceeded"/>
-  <int value="17" label="0x11 Unsupported Feature or Parameter Value"/>
-  <int value="18" label="0x12 Invalid HCI Command Parameters"/>
-  <int value="19" label="0x13 Remote User Terminated Connection"/>
-  <int value="20"
-      label="0x14 Remote Device Terminated Connection due to Low Resources"/>
-  <int value="21"
-      label="0x15 Remote Device Terminated Connection due to Power Off"/>
-  <int value="22" label="0x16 Connection Terminated By Local Host"/>
-  <int value="23" label="0x17 Repeated Attempts"/>
-  <int value="24" label="0x18 Pairing Not Allowed"/>
-  <int value="25" label="0x19 Unknown LMP PDU"/>
-  <int value="26"
-      label="0x1A Unsupported Remote Feature / Unsupported LMP Feature"/>
-  <int value="27" label="0x1B SCO Offset Rejected"/>
-  <int value="28" label="0x1C SCO Interval Rejected"/>
-  <int value="29" label="0x1D SCO Air Mode Rejected"/>
-  <int value="30" label="0x1E Invalid LMP Parameters / Invalid LL Parameters"/>
-  <int value="31" label="0x1F Unspecified Error"/>
-  <int value="32"
-      label="0x20 Unsupported LMP Parameter Value / Unsupported LL Parameter
-             Value"/>
-  <int value="33" label="0x21 Role Change Not Allowed"/>
-  <int value="34" label="0x22 LMP Response Timeout / LL Response Timeout"/>
-  <int value="35" label="0x23 LMP Error Transaction Collision"/>
-  <int value="36" label="0x24 LMP PDU Not Allowed"/>
-  <int value="37" label="0x25 Encryption Mode Not Acceptable"/>
-  <int value="38" label="0x26 Link Key cannot be Changed"/>
-  <int value="39" label="0x27 Requested QoS Not Supported"/>
-  <int value="40" label="0x28 Instant Passed"/>
-  <int value="41" label="0x29 Pairing With Unit Key Not Supported"/>
-  <int value="42" label="0x2A Different Transaction Collision"/>
-  <int value="43" label="0x2B Reserved"/>
-  <int value="44" label="0x2C QoS Unacceptable Parameter"/>
-  <int value="45" label="0x2D QoS Rejected"/>
-  <int value="46" label="0x2E Channel Classification Not Supported"/>
-  <int value="47" label="0x2F Insufficient Security"/>
-  <int value="48" label="0x30 Parameter Out Of Mandatory Range"/>
-  <int value="49" label="0x31 Reserved"/>
-  <int value="50" label="0x32 Role Switch Pending"/>
-  <int value="51" label="0x33 Reserved"/>
-  <int value="52" label="0x34 Reserved Slot Violation"/>
-  <int value="53" label="0x35 Role Switch Failed"/>
-  <int value="54" label="0x36 Extended Inquiry Response Too Large"/>
-  <int value="55" label="0x37 Secure Simple Pairing Not Supported By Host"/>
-  <int value="56" label="0x38 Host Busy - Pairing"/>
-  <int value="57"
-      label="0x39 Connection Rejected due to No Suitable Channel Found"/>
-  <int value="58" label="0x3A Controller Busy"/>
-  <int value="59" label="0x3B Unacceptable Connection Parameters"/>
-  <int value="60" label="0x3C Directed Advertising Timeout"/>
-  <int value="61" label="0x3D Connection Terminated due to MIC Failure"/>
-  <int value="62" label="0x3E Connection Failed to be Established"/>
-  <int value="63" label="0x3F MAC Connection Failed"/>
-  <int value="64"
-      label="0x40 Coarse Clock Adjustment Rejected but Will Try to Adjust
-             Using Clock Dragging"/>
-  <int value="133" label="Application Error 0x85, Bluedroid GATT_ERROR"/>
-  <int value="135" label="Application Error 0x87, Bluedroid GATT_PENDING"/>
-  <int value="256" label="0x100 Bluedroid L2CAP connection cancelled"/>
-  <int value="257" label="0x101 Android GATT Failure"/>
-</enum>
-
-<enum name="AndroidGATTStatusResult" type="int">
-  <summary>
-    This list includes errors from the Bluetooth Specification Version 4.2 Vol
-    3, Part F, Section 3.4.1.1 and Core Specification Supplement Part B. Also
-    Android's BluetoothGatt (0x101 GATT_FAILURE) and an error from Bluedroid's
-    gatt_api.h (0x100 L2CAP connection cancelled).
-  </summary>
-  <int value="0" label="GATT_SUCCESS"/>
-  <int value="1" label="Invalid Handle"/>
-  <int value="2" label="Read Not Permitted"/>
-  <int value="3" label="Write Not Permitted"/>
-  <int value="4" label="Invalid PDU"/>
-  <int value="5" label="Insufficient Authentication"/>
-  <int value="6" label="Request Not Supported"/>
-  <int value="7" label="Invalid Offset"/>
-  <int value="8" label="Insufficient Authorization"/>
-  <int value="9" label="Prepare Queue Full"/>
-  <int value="10" label="Attribute Not Found"/>
-  <int value="11" label="Attribute Not Long"/>
-  <int value="12" label="Insufficient Encryption Key Size"/>
-  <int value="13" label="Invalid Attribute Value Length"/>
-  <int value="14" label="Unlikely Error"/>
-  <int value="15" label="Insufficient Encryption"/>
-  <int value="16" label="Unsupported Group Type"/>
-  <int value="17" label="Insufficient Resources"/>
-  <int value="128" label="Application Error 0x80, 128"/>
-  <int value="129" label="Application Error 0x81, 129"/>
-  <int value="130" label="Application Error 0x82, 130"/>
-  <int value="131" label="Application Error 0x83, 131"/>
-  <int value="132" label="Application Error 0x84, 132"/>
-  <int value="133" label="Application Error 0x85, Bluedroid GATT_ERROR"/>
-  <int value="134" label="Application Error 0x86, 134"/>
-  <int value="135" label="Application Error 0x87, Bluedroid GATT_PENDING"/>
-  <int value="136" label="Application Error 0x88, 136"/>
-  <int value="137" label="Application Error 0x89, 137"/>
-  <int value="138" label="Application Error 0x8A, 138"/>
-  <int value="139" label="Application Error 0x8B, 139"/>
-  <int value="140" label="Application Error 0x8C, 140"/>
-  <int value="141" label="Application Error 0x8D, 141"/>
-  <int value="142" label="Application Error 0x8E, 142"/>
-  <int value="143" label="Application Error 0x8F, 143"/>
-  <int value="144" label="Application Error 0x90, 144"/>
-  <int value="145" label="Application Error 0x91, 145"/>
-  <int value="146" label="Application Error 0x92, 146"/>
-  <int value="147" label="Application Error 0x93, 147"/>
-  <int value="148" label="Application Error 0x94, 148"/>
-  <int value="149" label="Application Error 0x95, 149"/>
-  <int value="150" label="Application Error 0x96, 150"/>
-  <int value="151" label="Application Error 0x97, 151"/>
-  <int value="152" label="Application Error 0x98, 152"/>
-  <int value="153" label="Application Error 0x99, 153"/>
-  <int value="154" label="Application Error 0x9A, 154"/>
-  <int value="155" label="Application Error 0x9B, 155"/>
-  <int value="156" label="Application Error 0x9C, 156"/>
-  <int value="157" label="Application Error 0x9D, 157"/>
-  <int value="158" label="Application Error 0x9E, 158"/>
-  <int value="159" label="Application Error 0x9F, 159"/>
-  <int value="253"
-      label="Client Characteristic Configuration Descriptor Improperly
-             Configured (CSS)"/>
-  <int value="254" label="Procedure Already in Progress (CSS)"/>
-  <int value="255" label="Out of Range (CSS)"/>
-  <int value="256" label="0x100 Bluedroid L2CAP connection cancelled"/>
-  <int value="257" label="GATT_FAILURE"/>
-</enum>
-
-<enum name="AndroidKernelVersion" type="int">
-  <int value="131078" label="2.6"/>
-  <int value="196608" label="3.0"/>
-  <int value="196609" label="3.1"/>
-  <int value="196610" label="3.2"/>
-  <int value="196611" label="3.3"/>
-  <int value="196612" label="3.4"/>
-  <int value="196613" label="3.5"/>
-  <int value="196614" label="3.6"/>
-  <int value="196615" label="3.7"/>
-  <int value="196616" label="3.8"/>
-  <int value="196618" label="3.10"/>
-  <int value="196619" label="3.11"/>
-  <int value="196620" label="3.12"/>
-  <int value="196621" label="3.13"/>
-  <int value="196622" label="3.14"/>
-  <int value="196625" label="3.17"/>
-  <int value="196626" label="3.18"/>
-  <int value="196627" label="3.19"/>
-  <int value="262144" label="4.0"/>
-  <int value="262145" label="4.1"/>
-  <int value="262154" label="4.10"/>
-</enum>
-
-<enum name="AndroidManageSpaceButton" type="int">
-  <int value="0" label="Clear Unimportant Storage"/>
-  <int value="1" label="Manage Site Storage"/>
-  <int value="2" label="Clear App Data"/>
-</enum>
-
-<enum name="AndroidMemoryNotificationBackground" type="int">
-  <int value="0" label="TrimMemoryUiHidden"/>
-  <int value="1" label="TrimMemoryBackground"/>
-  <int value="2" label="TrimMemoryModerate"/>
-  <int value="3" label="TrimMemoryComplete"/>
-</enum>
-
-<enum name="AndroidMemoryNotificationForeground" type="int">
-  <int value="0" label="TrimMemoryRunningModerate"/>
-  <int value="1" label="TrimMemoryRunningLow"/>
-  <int value="2" label="TrimMemoryRunningCritical"/>
-  <int value="3" label="LowMemory"/>
-</enum>
-
-<enum name="AndroidSeccompSandboxStatus" type="int">
-  <int value="0" label="Not Supported"/>
-  <int value="1" label="Detection Failed"/>
-  <int value="2" label="Feature Disabled"/>
-  <int value="3" label="Feature Enabled"/>
-  <int value="4" label="Sandbox Engaged"/>
-</enum>
-
-<enum name="AndroidSeccompStatus" type="int">
-  <int value="0" label="Detection Failed"/>
-  <int value="1" label="Not Supported"/>
-  <int value="2" label="Supported"/>
-</enum>
-
-<enum name="AndroidSigninPromoAction" type="int">
-  <int value="0" label="Promo enabled">
-    The Android signin promo was enabled to show on next startup.
-  </int>
-  <int value="1" label="Promo shown">The Android signin promo was shown.</int>
-  <int value="2" label="Promo declined">
-    User declined the Android signin promo.
-  </int>
-  <int value="3" label="Promo accepted">
-    User completed signin through the Android signin promo flow successfully.
-  </int>
-  <int value="4" label="Promo accepted with advanced settings">
-    User completed signin through the Android signin promo flow successfully and
-    chose to configure sync settings.
-  </int>
-</enum>
-
-<enum name="AndroidTabCloseUndoToastEvent" type="int">
-  <int value="0" label="Undo Shown (Cold)"/>
-  <int value="1" label="Undo Shown (Warm)"/>
-  <int value="2" label="Undo Pressed"/>
-  <int value="3" label="Undos Dismissed (Timeout) (Deprecated)"/>
-  <int value="4" label="Undos Dismissed (Action) (Deprecated)"/>
-</enum>
-
-<enum name="AntiVirusMetricsProviderResult" type="int">
-  <int value="0" label="RESULT_SUCCESS"/>
-  <int value="1" label="RESULT_GENERIC_FAILURE"/>
-  <int value="2" label="RESULT_FAILED_TO_INITIALIZE_COM"/>
-  <int value="3" label="RESULT_FAILED_TO_CREATE_INSTANCE"/>
-  <int value="4" label="RESULT_FAILED_TO_INITIALIZE_PRODUCT_LIST"/>
-  <int value="5" label="RESULT_FAILED_TO_GET_PRODUCT_COUNT"/>
-  <int value="6" label="RESULT_FAILED_TO_GET_ITEM"/>
-  <int value="7" label="RESULT_FAILED_TO_GET_PRODUCT_STATE"/>
-  <int value="8" label="RESULT_PRODUCT_STATE_INVALID"/>
-  <int value="9" label="RESULT_FAILED_TO_GET_PRODUCT_NAME"/>
-  <int value="10" label="RESULT_FAILED_TO_GET_REMEDIATION_PATH"/>
-  <int value="11" label="RESULT_FAILED_TO_CONNECT_TO_WMI"/>
-  <int value="12" label="RESULT_FAILED_TO_SET_SECURITY_BLANKET"/>
-  <int value="13" label="RESULT_FAILED_TO_EXEC_WMI_QUERY"/>
-  <int value="14" label="RESULT_FAILED_TO_ITERATE_RESULTS"/>
-  <int value="15" label="RESULT_WSC_NOT_AVAILABLE"/>
-</enum>
-
-<enum name="AppBannersBeforeInstallEvent" type="int">
-  <int value="1" label="Event created and dispatched"/>
-  <int value="2" label="Showing the banner"/>
-  <int value="3" label="preventDefault() not called"/>
-  <int value="4" label="preventDefault() called"/>
-  <int value="5" label="prompt() called after preventDefault()"/>
-  <int value="6" label="prompt() not called after preventDefault()"/>
-</enum>
-
-<enum name="AppBannersDismissEvent" type="int">
-  <int value="41" label="Error/unknown reason for dismissal"/>
-  <int value="42" label="User opened the application after installing it"/>
-  <int value="43" label="User clicked on the banner"/>
-  <int value="44" label="(Obsolete) User swiped the banner away"/>
-  <int value="45" label="User hit the X button"/>
-  <int value="46" label="User began app install, but it didn't finish in time"/>
-  <int value="47" label="Banner was dismissed for any reason"/>
-</enum>
-
-<enum name="AppBannersDisplayEvent" type="int">
-  <int value="1" label="Banner was requested by the site"/>
-  <int value="2" label="User previously blocked the same banner"/>
-  <int value="3" label="User blocked too many other banners from the site"/>
-  <int value="4" label="Banner created"/>
-  <int value="5" label="User already installed the app"/>
-  <int value="6" label="User ignored the banner last time"/>
-  <int value="7" label="Manifest lacks a service worker"/>
-  <int value="8" label="Site hasn't been visited frequently enough"/>
-  <int value="9" label="Native app banner was requested by the site"/>
-  <int value="10" label="Web app banner was requested by the site"/>
-  <int value="11" label="Native app banner created"/>
-  <int value="12" label="Web app banner created"/>
-</enum>
-
-<enum name="AppBannersInstallableStatusCode" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Renderer exiting"/>
-  <int value="2" label="Renderer called beforeinstallprompt.preventDefault()"/>
-  <int value="3" label="User navigated before the banner was shown"/>
-  <int value="4" label="Site not loaded in main frame"/>
-  <int value="5" label="Site not served from a secure origin"/>
-  <int value="6" label="Site did not provide a manifest link"/>
-  <int value="7" label="Manifest was empty or could not be parsed"/>
-  <int value="8" label="Manifest start_url not valid"/>
-  <int value="9" label="Manifest missing name or short_name"/>
-  <int value="10" label="Manifest display not supported"/>
-  <int value="11" label="Manifest missing suitable icon"/>
-  <int value="12" label="No matching service worker"/>
-  <int value="13" label="Could not select suitable icon to download"/>
-  <int value="14" label="Could not download selected icon"/>
-  <int value="15" label="Downloaded icon was empty"/>
-  <int value="16" label="Application platform not supported on Android"/>
-  <int value="17" label="No native app id specified"/>
-  <int value="18" label="URL and manifest specified different native app ids"/>
-  <int value="19" label="Site is already installed"/>
-  <int value="20" label="Insufficient engagement"/>
-  <int value="21" label="Package name or start_url empty"/>
-  <int value="22" label="Banner was previously blocked by the user"/>
-  <int value="23" label="Banner was previously ignored by the user"/>
-  <int value="24" label="Native app banner shown"/>
-  <int value="25" label="Web app banner shown"/>
-  <int value="26" label="Site eligible, but banner creation failed"/>
-  <int value="27" label="Url is not eligible for WebAPKs"/>
-  <int value="28" label="Site loaded in incognito window (not reported)"/>
-</enum>
-
-<enum name="AppBannersInstallEvent" type="int">
-  <int value="21" label="(Native app) User triggered the app install dialog"/>
-  <int value="22" label="(Native app) User began installing the app"/>
-  <int value="23"
-      label="(Native app) User waited for the app to finish installing"/>
-  <int value="24" label="(Web app) User installed a web app"/>
-</enum>
-
-<enum name="AppBannersUserResponse" type="int">
-  <int value="1" label="Native app banner was accepted by the user"/>
-  <int value="2" label="Web app banner was accepted by the user"/>
-  <int value="3" label="Native app banner was dismissed by the user"/>
-  <int value="4" label="Web app banner was dismissed by the user"/>
-  <int value="5" label="Native app banner was ignored by the user"/>
-  <int value="6" label="Web app banner was ignored by the user"/>
-</enum>
-
-<enum name="AppCacheCheckResponseResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Manifest obsolete"/>
-  <int value="2" label="Response obsolete"/>
-  <int value="3" label="Entry not found"/>
-  <int value="4" label="Read headers error"/>
-  <int value="5" label="Read data error"/>
-  <int value="6" label="Unexpected size"/>
-  <int value="7" label="Check canceled"/>
-</enum>
-
-<enum name="AppCacheErrorSite" type="int">
-  <summary>Identifies the point of failure, see sources.</summary>
-</enum>
-
-<enum name="AppCacheInitResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="SQL Database Error"/>
-  <int value="2" label="Disk Cache Error"/>
-</enum>
-
-<enum name="AppCacheUpdateJobResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="SQL Database Error"/>
-  <int value="2" label="Disk Cache Error"/>
-  <int value="3" label="Quota Error"/>
-  <int value="4" label="Redirect Error"/>
-  <int value="5" label="Manifest Error"/>
-  <int value="6" label="Network Error"/>
-  <int value="7" label="Server Error"/>
-  <int value="8" label="Cancelled"/>
-  <int value="9" label="Security Error"/>
-</enum>
-
-<enum name="AppInfoDialogLaunchOrigin" type="int">
-  <int value="0" label="App List context menu"/>
-  <int value="1" label="Extensions page"/>
-  <int value="2" label="Apps Page context menu"/>
-</enum>
-
-<enum name="AppLaunch" type="int">
-  <int value="0" label="NTP_APPS_MAXIMIZED"/>
-  <int value="1" label="NTP_APPS_COLLAPSED"/>
-  <int value="2" label="NTP_APPS_MENU"/>
-  <int value="3" label="NTP_MOST_VISITED"/>
-  <int value="4" label="NTP_RECENTLY_CLOSED"/>
-  <int value="5" label="BOOKMARK_BAR"/>
-  <int value="6" label="CONTENT_NAVIGATION"/>
-  <int value="7" label="SESSION_RESTORE"/>
-  <int value="8" label="AUTOLAUNCH"/>
-  <int value="9" label="OMNIBOX_APP"/>
-  <int value="10" label="OMNIBOX_LOCATION"/>
-  <int value="11" label="OMNIBOX_INSTANT"/>
-  <int value="12" label="EXTENSION_API"/>
-  <int value="13" label="CMD_LINE_APP"/>
-  <int value="14" label="CMD_LINE_URL"/>
-  <int value="15" label="NTP_WEBSTORE"/>
-  <int value="16" label="NTP_APP_RE_ENABLE"/>
-  <int value="17" label="CMD_LINE_APP_LEGACY"/>
-  <int value="18" label="NTP_WEBSTORE_FOOTER"/>
-  <int value="19" label="NTP_WEBSTORE_PLUS_ICON"/>
-  <int value="20" label="APP_LIST_MAIN"/>
-  <int value="21" label="APP_LIST_SEARCH"/>
-  <int value="22" label="APP_LIST_MAIN_CHROME"/>
-  <int value="23" label="APP_LIST_MAIN_WEBSTORE"/>
-  <int value="24" label="APP_LIST_SEARCH_CHROME"/>
-  <int value="25" label="APP_LIST_SEARCH_WEBSTORE"/>
-</enum>
-
-<enum name="AppLaunchContainer" type="int">
-  <int value="0" label="LAUNCH_CONTAINER_WINDOW"/>
-  <int value="1" label="LAUNCH_CONTAINER_PANEL"/>
-  <int value="2" label="LAUNCH_CONTAINER_TAB"/>
-  <int value="3" label="LAUNCH_CONTAINER_NONE (v2 packaged apps)"/>
-</enum>
-
-<enum name="AppLauncherPromo" type="int">
-  <int value="0" label="Already installed"/>
-  <int value="1" label="Shown"/>
-  <int value="2" label="Dismissed"/>
-  <int value="3" label="Learn more"/>
-</enum>
-
-<enum name="AppLaunchSource" type="int">
-  <int value="0" label="LAUNCH_SOURCE_NONE"/>
-  <int value="1" label="LAUNCH_SOURCE_UNTRACKED"/>
-  <int value="2" label="LAUNCH_SOURCE_APP_LAUNCHER"/>
-  <int value="3" label="LAUNCH_SOURCE_NEW_TAB_PAGE"/>
-  <int value="4" label="LAUNCH_SOURCE_RELOAD"/>
-  <int value="5" label="LAUNCH_SOURCE_RESTART"/>
-  <int value="6" label="LAUNCH_SOURCE_LOAD_AND_LAUNCH"/>
-  <int value="7" label="LAUNCH_SOURCE_COMMAND_LINE"/>
-  <int value="8" label="LAUNCH_SOURCE_FILE_HANDLER"/>
-  <int value="9" label="LAUNCH_SOURCE_URL_HANDLER"/>
-  <int value="10" label="LAUNCH_SOURCE_SYSTEM_TRAY"/>
-  <int value="11" label="LAUNCH_SOURCE_ABOUT_PAGE"/>
-  <int value="12" label="LAUNCH_SOURCE_KEYBOARD"/>
-  <int value="13" label="LAUNCH_SOURCE_EXTENSIONS_PAGE"/>
-  <int value="14" label="LAUNCH_SOURCE_MANAGEMENT_API"/>
-  <int value="15" label="LAUNCH_SOURCE_EPHEMERAL_APP"/>
-  <int value="16" label="LAUNCH_SOURCE_BACKGROUND"/>
-  <int value="17" label="LAUNCH_SOURCE_KIOSK"/>
-  <int value="18" label="LAUNCH_SOURCE_CHROME_INTERNAL"/>
-  <int value="19" label="LAUNCH_SOURCE_TEST"/>
-  <int value="20" label="LAUNCH_SOURCE_INSTALLED_NOTIFICATION"/>
-</enum>
-
-<enum name="AppleScriptCommandEvents" type="int">
-  <int value="0" label="Tab Close"/>
-  <int value="1" label="Tab Copy"/>
-  <int value="2" label="Tab Cut"/>
-  <int value="3" label="Tab Execute Javascript"/>
-  <int value="4" label="Tab Go Back"/>
-  <int value="5" label="Tab Go Forward"/>
-  <int value="6" label="Tab Paste"/>
-  <int value="7" label="Tab Print"/>
-  <int value="8" label="Tab Redo"/>
-  <int value="9" label="Tab Reload"/>
-  <int value="10" label="Tab Save"/>
-  <int value="11" label="Tab Select All"/>
-  <int value="12" label="Tab Stop"/>
-  <int value="13" label="Tab Undo"/>
-  <int value="14" label="Tab View Source"/>
-  <int value="15" label="Window Close"/>
-  <int value="16" label="Window Enter Presentation Mode"/>
-  <int value="17" label="Window Exit Presentation Mode"/>
-</enum>
-
-<enum name="AppListDoodleAction" type="int">
-  <int value="0" label="DOODLE_SHOWN"/>
-  <int value="1" label="DOODLE_CLICKED"/>
-</enum>
-
-<enum name="AppListEnableSource" type="int">
-  <int value="0" label="Not enabled (should never be recorded)"/>
-  <int value="1" label="Packaged app installed from Web Store"/>
-  <int value="2" label="Clicked app launcher link from the Web Store"/>
-  <int value="3" label="Command line flag"/>
-  <int value="4" label="Chrome reinstalled over old, enabled profile"/>
-  <int value="5" label="Second packaged app installed without showing"/>
-</enum>
-
-<enum name="AppListPage" type="int">
-  <int value="0" label="APPS"/>
-  <int value="1" label="SEARCH_RESULTS"/>
-  <int value="2" label="START"/>
-  <int value="3" label="CUSTOM_LAUNCHER_PAGE"/>
-</enum>
-
-<enum name="AppListSearchResult" type="int">
-  <int value="0" label="OMNIBOX"/>
-  <int value="1" label="APP"/>
-  <int value="2" label="WEBSTORE"/>
-  <int value="3" label="SEARCH_WEBSTORE"/>
-  <int value="4" label="SEARCH_PEOPLE"/>
-  <int value="5" label="SUGGESTION"/>
-  <int value="6" label="LAUNCHER_SEARCH_PROVIDER"/>
-</enum>
-
-<enum name="AppListSearchResultDisplayType" type="int">
-  <int value="0" label="NONE"/>
-  <int value="1" label="LIST"/>
-  <int value="2" label="TILE"/>
-  <int value="3" label="RECOMMENDATION"/>
-</enum>
-
-<enum name="AppLoadedInTabSource" type="int">
-  <int value="0" label="SOURCE_APP"/>
-  <int value="1" label="SOURCE_BACKGROUND_PAGE"/>
-</enum>
-
-<enum name="AppLocation" type="int">
-  <int value="0" label="Invalid location"/>
-  <int value="1" label="Internal extension"/>
-  <int value="2" label="Internal extension (loaded via prefs)"/>
-  <int value="3" label="Internal extension (loaded via the registry)"/>
-  <int value="4" label="Unpacked extension"/>
-  <int value="5" label="Component app"/>
-  <int value="6" label="External extension (downloaded via prefs)"/>
-  <int value="7" label="External extension (downloaded via admin policies)"/>
-  <int value="8" label="Command-line extension"/>
-  <int value="9" label="External extension (loaded via prefs and cached)"/>
-  <int value="10" label="Component app (downloaded)"/>
-</enum>
-
-<enum name="AppPromoAction" type="int">
-  <int value="0" label="PROMO_LAUNCH_APP"/>
-  <int value="1" label="PROMO_LAUNCH_WEB_STORE"/>
-  <int value="2" label="PROMO_CLOSE"/>
-  <int value="3" label="PROMO_EXPIRE"/>
-  <int value="4" label="PROMO_SEEN"/>
-</enum>
-
-<enum name="AppsPageDragSource" type="int">
-  <int value="0" label="Same apps pane"/>
-  <int value="1" label="Different apps pane"/>
-  <int value="2" label="Most visited pane"/>
-  <int value="3" label="Bookmarks pane"/>
-  <int value="4" label="Outside of NTP (e.g. bookmarks bar)"/>
-</enum>
-
-<enum name="ArcIntentHandlerAction" type="int">
-  <summary>Defines Arc intent handler actions</summary>
-  <int value="0" label="Error"/>
-  <int value="1" label="Dialog deactivated"/>
-  <int value="2" label="Always"/>
-  <int value="3" label="Just once"/>
-  <int value="4" label="Preferred activity found"/>
-</enum>
-
-<enum name="ArcIntentHandlerDestinationPlatform" type="int">
-  <summary>
-    Defines ARC intent handler platforms to continue the navigation.
-  </summary>
-  <int value="0" label="ARC"/>
-  <int value="1" label="Chrome"/>
-</enum>
-
-<enum name="ArcOptInAction" type="int">
-  <summary>Defines Arc OptIn actions</summary>
-  <int value="0" label="Opted Out"/>
-  <int value="1" label="Opted In"/>
-  <int value="2" label="Notification accepted"/>
-  <int value="3" label="Notification declined"/>
-  <int value="4" label="Notification timed out"/>
-  <int value="5" label="Retry after OptIn failure"/>
-</enum>
-
-<enum name="ArcOptInCancel" type="int">
-  <summary>Defines Arc OptIn cancel reason</summary>
-  <int value="0" label="Canceled by user"/>
-  <int value="1" label="Unclassified failure"/>
-  <int value="2" label="Network failure"/>
-  <int value="3" label="GMS Services are not available"/>
-  <int value="4" label="DEPRECATED: Bad authentication returned by server"/>
-  <int value="5" label="DEPRECATED: GMS Core is not available"/>
-  <int value="6" label="Cloud provision flow failed"/>
-  <int value="7" label="Android Management required"/>
-</enum>
-
-<enum name="ArcOptInSilentAuthCode" type="int">
-  <summary>Defines Arc OptIn Silent Auth code state</summary>
-  <int value="0" label="Disabled"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="HTTP Context cannot be prepared"/>
-  <int value="3" label="No LST token is available"/>
-  <int value="4" label="Failed due sever HTTP error"/>
-  <int value="5" label="Failed due client HTTP error"/>
-  <int value="6" label="Failed due unknown HTTP error"/>
-  <int value="7" label="Cannot parse HTTP response"/>
-  <int value="8" label="No Auth code in response"/>
-</enum>
-
-<enum name="ArcProvisioningResult" type="int">
-  <summary>Defines Arc Provisioning success and failure reasons</summary>
-  <int value="0" label="Success"/>
-  <int value="1" label="Unclassified failure"/>
-  <int value="2" label="GMS Network failure"/>
-  <int value="3" label="GMS Services are not available"/>
-  <int value="4" label="GMS Bad authentication returned by server"/>
-  <int value="5" label="GMS check-in was failed"/>
-  <int value="6" label="Cloud provision flow failed"/>
-  <int value="7" label="Mojo version mistmached"/>
-  <int value="8" label="Mojo call timeout"/>
-  <int value="9" label="GMS check-in was timed out"/>
-  <int value="10" label="GMS check-in reported internal error"/>
-  <int value="11" label="GMS core sign in procedure was failed"/>
-  <int value="12" label="GMS core sign in procedure was timed out"/>
-  <int value="13" label="GMS core sign in procedure reporeted internal error"/>
-  <int value="14" label="Cloud provision flow was timed out"/>
-  <int value="15" label="Cloud provision flow reporeted internal error"/>
-  <int value="16" label="ARC instance is stopped before complete provisioning"/>
-  <int value="17" label="Overall sign in timeout"/>
-  <int value="19" label="Network is unavailable"/>
-</enum>
-
-<enum name="ArcVideoAcceleratorResult" type="int">
-  <summary>Defines ArcVideoAccelerator initialization status</summary>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="ILLEGAL_STATE"/>
-  <int value="2" label="INVALID_ARGUMENT"/>
-  <int value="3" label="UNREADABLE_INPUT"/>
-  <int value="4" label="PLATFORM_FAILURE"/>
-  <int value="5" label="INSUFFICIENT_RESOURCES"/>
-</enum>
-
-<enum name="AsyncDNSConfigParsePosix" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="RES_INIT_FAILED"/>
-  <int value="2" label="RES_INIT_UNSET"/>
-  <int value="3" label="BAD_ADDRESS"/>
-  <int value="4" label="BAD_EXT_STRUCT"/>
-  <int value="5" label="NULL_ADDRESS"/>
-  <int value="6" label="NO_NAMESERVERS"/>
-  <int value="7" label="MISSING_OPTIONS"/>
-  <int value="8" label="UNHANDLED_OPTIONS"/>
-</enum>
-
-<enum name="AsyncDNSConfigParseWin" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="READ_IPHELPER"/>
-  <int value="2" label="READ_POLICY_SEARCHLIST"/>
-  <int value="3" label="READ_TCPIP_SEARCHLIST"/>
-  <int value="4" label="READ_DOMAIN"/>
-  <int value="5" label="READ_POLICY_DEVOLUTION"/>
-  <int value="6" label="READ_DNSCACHE_DEVOLUTION"/>
-  <int value="7" label="READ_TCPIP_DEVOLUTION"/>
-  <int value="8" label="READ_APPEND_MULTILABEL"/>
-  <int value="9" label="READ_PRIMARY_SUFFIX"/>
-  <int value="10" label="BAD_ADDRESS"/>
-  <int value="11" label="NO_NAMESERVERS"/>
-  <int value="12" label="UNHANDLED_OPTIONS"/>
-</enum>
-
-<enum name="AsyncDNSHostsParseWin" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="UNREADABLE_HOSTS_FILE"/>
-  <int value="2" label="COMPUTER_NAME_FAILED"/>
-  <int value="3" label="IPHELPER_FAILED"/>
-  <int value="4" label="BAD_ADDRESS"/>
-</enum>
-
-<enum name="AsyncDNSNameServersType" type="int">
-  <summary>Type of nameservers in the DNS config.</summary>
-  <int value="0" label="NONE">No nameservers configured.</int>
-  <int value="1" label="GOOGLE_PUBLIC_DNS">
-    All nameservers are Google Public DNS servers.
-  </int>
-  <int value="2" label="PUBLIC">
-    All nameservers have public IP addresses (and aren't Google Public DNS
-    servers).
-  </int>
-  <int value="3" label="PRIVATE">
-    All nameservers have private IP addresses (loopback, link-local, or RFC
-    1918).
-  </int>
-  <int value="4" label="MIXED">
-    Nameservers are a mix of types (Google Public DNS, public, private).
-  </int>
-</enum>
-
-<enum name="AsyncDNSParseResult" type="int">
-  <summary>Results of DnsResponse::ParseToAddressList.</summary>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="MALFORMED_RESPONSE"/>
-  <int value="2" label="MALFORMED_CNAME"/>
-  <int value="3" label="NAME_MISMATCH"/>
-  <int value="4" label="SIZE_MISMATCH"/>
-  <int value="5" label="CNAME_AFTER_ADDRESS"/>
-  <int value="6" label="ADDRESS_TTL_MISMATCH"/>
-  <int value="7" label="NO_ADDRESSES"/>
-</enum>
-
-<enum name="AsyncDNSPrefDefaultSource" type="int">
-  <int value="0" label="PLATFORM"/>
-  <int value="1" label="FIELD_TRIAL"/>
-  <int value="2" label="HARD_CODED_DEFAULT"/>
-</enum>
-
-<enum name="AsyncDNSPrefSource" type="int">
-  <int value="0" label="MANAGED_PREF"/>
-  <int value="1" label="SUPERVISED_PREF"/>
-  <int value="2" label="EXTENSION_PREF"/>
-  <int value="3" label="COMMAND_LINE_PREF"/>
-  <int value="4" label="USER_PREF"/>
-  <int value="5" label="RECOMMENDED_PREF"/>
-  <int value="6" label="DEFAULT_PREF"/>
-  <int value="7" label="UNKNOWN_PREF"/>
-</enum>
-
-<enum name="AsyncDNSResolveStatus" type="int">
-  <int value="0" label="DNS_SUCCESS">Succeeded with async DNS.</int>
-  <int value="1" label="PROC_SUCCESS">
-    Succeeded with getaddrinfo after async DNS failed.
-  </int>
-  <int value="2" label="FAIL">Both async DNS and getaddrinfo failed.</int>
-  <int value="3" label="SUSPECT_NETBIOS">
-    Same as PROC_SUCCESS except the hostname fits NetBIOS name criteria.
-  </int>
-</enum>
-
-<enum name="AsyncDNSWatchStatus" type="int">
-  <int value="0" label="STARTED">Started.</int>
-  <int value="1" label="FAILED_TO_START_CONFIG">
-    Failed to start watching config.
-  </int>
-  <int value="2" label="FAILED_TO_START_HOSTS">
-    Failed to start watching HOSTS.
-  </int>
-  <int value="3" label="FAILED_CONFIG">Failed during watching config.</int>
-  <int value="4" label="FAILED_HOSTS">Failed during watching HOSTS.</int>
-</enum>
-
-<enum name="AsyncRevalidationResult" type="int">
-  <int value="0" label="LOADED">A new entry was stored in the cache.</int>
-  <int value="1" label="REVALIDATED">
-    The existing cache entry was revalidated.
-  </int>
-  <int value="2" label="NET_ERROR">
-    An error occurred before a response was received.
-  </int>
-  <int value="3" label="READ_ERROR">
-    An error occurred while reading the response body.
-  </int>
-  <int value="4" label="GOT_REDIRECT">A redirect response was received.</int>
-  <int value="5" label="AUTH_FAILED">
-    A request for authentication was received, and no cached credentials were
-    available.
-  </int>
-  <int value="6" label="RESPONSE_TIMEOUT">
-    Timed out before a response was received.
-  </int>
-  <int value="7" label="BODY_TIMEOUT">
-    Timed out while reading the response body.
-  </int>
-</enum>
-
-<enum name="AttachmentServicesResult" type="int">
-  <int value="0" label="Succeeded with MOTW"/>
-  <int value="1" label="Succeeded without MOTW"/>
-  <int value="2" label="Succeeded but file was missing"/>
-  <int value="3" label="Failed to instantiate CLSID_AttachmentServices"/>
-  <int value="4" label="Failed while invoking IAE setter"/>
-  <int value="5" label="Blocked (file exists)"/>
-  <int value="6" label="Blocked (file missing)"/>
-  <int value="7" label="Virus infected (file exists)"/>
-  <int value="8" label="Virus infected (file missing)"/>
-  <int value="9" label="Access denied (file exists)"/>
-  <int value="10" label="Access denied (file missing)"/>
-  <int value="11" label="Other error (file exists)"/>
-  <int value="12" label="Other error (file missing)"/>
-</enum>
-
-<enum name="AudioCaptureStartupResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Failed to create stream"/>
-  <int value="2" label="Failed to open stream"/>
-  <int value="3" label="Never received any data"/>
-  <int value="4" label="No data received and capture stopped within 500ms"/>
-</enum>
-
-<enum name="AudioCodec" type="int">
-  <int value="0" label="kUnknownAudioCodec"/>
-  <int value="1" label="kCodecAAC"/>
-  <int value="2" label="kCodecMP3"/>
-  <int value="3" label="kCodecPCM"/>
-  <int value="4" label="kCodecVorbis"/>
-  <int value="5" label="kCodecFLAC"/>
-  <int value="6" label="kCodecAMR_NB"/>
-  <int value="7" label="kCodecAMR_WB"/>
-  <int value="8" label="kCodecPCM_MULAW"/>
-  <int value="9" label="kCodecGSM_MS"/>
-  <int value="10" label="kCodecPCM_S16BE"/>
-  <int value="11" label="kCodecPCM_S24BE"/>
-  <int value="12" label="kCodecOpus"/>
-  <int value="13" label="kCodecEAC3"/>
-  <int value="14" label="kCodecPCM_ALAW"/>
-  <int value="15" label="kCodecALAC"/>
-  <int value="16" label="kCodecAC3"/>
-</enum>
-
-<enum name="AudioDevicePropertyResult" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Device has changed"/>
-  <int value="2" label="IO stopped abnormally"/>
-  <int value="3" label="Hog mode"/>
-  <int value="4" label="Buffer frame size"/>
-  <int value="5" label="Buffer frame size range"/>
-  <int value="6" label="Stream configuration"/>
-  <int value="7" label="Actual sample rate"/>
-  <int value="8" label="Nominal sample rate"/>
-  <int value="9" label="Device is running somewhere"/>
-  <int value="10" label="Device is running"/>
-  <int value="11" label="Device is alive"/>
-  <int value="12" label="Stream physical format"/>
-  <int value="13" label="Jack is connected"/>
-  <int value="14" label="Processor overload"/>
-  <int value="15" label="Data sources"/>
-  <int value="16" label="Data source"/>
-  <int value="17" label="Volume decibels"/>
-  <int value="18" label="Volume scalar"/>
-  <int value="19" label="Mute"/>
-  <int value="20" label="Plugin"/>
-  <int value="21" label="Uses variable buffer fram sizes"/>
-  <int value="22" label="IO cycle usage"/>
-  <int value="23" label="IO proc stream usage"/>
-  <int value="24" label="Configuration application"/>
-  <int value="25" label="Device UID"/>
-  <int value="26" label="Mode UID"/>
-  <int value="27" label="Transport type"/>
-  <int value="28" label="Related devices"/>
-  <int value="29" label="Clock domain"/>
-  <int value="30" label="Device can be default device"/>
-  <int value="31" label="Device can be default system device"/>
-  <int value="32" label="Latency"/>
-  <int value="33" label="Streams"/>
-  <int value="34" label="Control list"/>
-  <int value="35" label="Safety offset"/>
-  <int value="36" label="Available nominal sample rates"/>
-  <int value="37" label="Icon"/>
-  <int value="38" label="Is hidden"/>
-  <int value="39" label="Preferred channels for stereo"/>
-  <int value="40" label="Preferred channel layout"/>
-  <int value="41" label="Volume range decibels"/>
-  <int value="42" label="Volume scalar to decibels"/>
-  <int value="43" label="Volume decibel to scalar"/>
-  <int value="44" label="Stereo pan"/>
-  <int value="45" label="Stereo pan channels"/>
-  <int value="46" label="Solo"/>
-  <int value="47" label="Phantom power"/>
-  <int value="48" label="Phase invert"/>
-  <int value="49" label="Clip light"/>
-  <int value="50" label="Talkback"/>
-  <int value="51" label="Listenback"/>
-  <int value="52" label="Clock source"/>
-  <int value="53" label="Clock sources"/>
-  <int value="54" label="Sub mute"/>
-</enum>
-
-<enum name="AudioFramesPerBuffer" type="int">
-  <obsolete>
-    Removed from code Sep 2014.
-  </obsolete>
-  <int value="0" label="k160"/>
-  <int value="1" label="k320"/>
-  <int value="2" label="k440"/>
-  <int value="3" label="k480"/>
-  <int value="4" label="k640"/>
-  <int value="5" label="k880"/>
-  <int value="6" label="k960"/>
-  <int value="7" label="k1440"/>
-  <int value="8" label="k1920"/>
-</enum>
-
-<enum name="AudioGlitchResult" type="int">
-  <int value="0" label="No audio glitches"/>
-  <int value="1" label="Audio glitches"/>
-</enum>
-
-<enum name="AudioInputSilenceReport" type="int">
-  <int value="0" label="No measurement"/>
-  <int value="1" label="Only audio"/>
-  <int value="2" label="Only silence"/>
-  <int value="3" label="Audio and silence"/>
-</enum>
-
-<enum name="AudioRendererEvents" type="int">
-  <int value="0" label="Initialized"/>
-  <int value="1" label="Runtime error"/>
-</enum>
-
-<enum name="AudioSampleFormat" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Unsigned 8-bit"/>
-  <int value="2" label="Signed 16-bit"/>
-  <int value="3" label="Signed 32-bit"/>
-  <int value="4" label="Float 32-bit"/>
-  <int value="5" label="Signed 16-bit planar"/>
-  <int value="6" label="Float 32-bit planar"/>
-</enum>
-
-<enum name="AudioSampleRate" type="int">
-  <int value="0" label="8 kHz"/>
-  <int value="1" label="16 kHz"/>
-  <int value="2" label="32 kHz"/>
-  <int value="3" label="48 kHz"/>
-  <int value="4" label="96 kHz"/>
-  <int value="5" label="11.025 kHz"/>
-  <int value="6" label="22.05 kHz"/>
-  <int value="7" label="44.1 kHz"/>
-  <int value="8" label="88.2 kHz"/>
-  <int value="9" label="176.4 kHz"/>
-  <int value="10" label="192 kHz"/>
-  <int value="11" label="24 kHz"/>
-  <int value="12" label="384 kHz"/>
-</enum>
-
-<enum name="AudioStreamOpenResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="CREATE_INSTANCE"/>
-  <int value="2" label="NO_ENDPOINT"/>
-  <int value="3" label="NO_STATE"/>
-  <int value="4" label="DEVICE_NOT_ACTIVE"/>
-  <int value="5" label="ACTIVATION_FAILED"/>
-  <int value="6" label="FORMAT_NOT_SUPPORTED"/>
-  <int value="7" label="AUDIO_CLIENT_INIT_FAILED"/>
-  <int value="8" label="GET_BUFFER_SIZE_FAILED"/>
-  <int value="9" label="LOOPBACK_ACTIVATE_FAILED"/>
-  <int value="10" label="LOOPBACK_INIT_FAILED"/>
-  <int value="11" label="SET_EVENT_HANDLE"/>
-  <int value="12" label="NO_CAPTURE_CLIENT"/>
-  <int value="13" label="NO_AUDIO_VOLUME"/>
-  <int value="14" label="OK_WITH_RESAMPLING"/>
-</enum>
-
-<enum name="AudioThreadStatus" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Started"/>
-  <int value="2" label="Hung"/>
-  <int value="3" label="Recovered"/>
-</enum>
-
-<enum name="AudioTrackProcessingStates" type="int">
-  <int value="0" label="Enabled"/>
-  <int value="1" label="Disabled"/>
-  <int value="2" label="Processing in WebRTC"/>
-</enum>
-
-<enum name="AuthPolicyErrorType" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unspecified error"/>
-  <int value="2" label="Unspecified D-Bus error"/>
-  <int value="3" label="Badly formatted user principal name"/>
-  <int value="4" label="Auth failed because of bad user name"/>
-  <int value="5" label="Auth failed because of bad password"/>
-  <int value="6" label="Auth failed because of expired password"/>
-  <int value="7" label="Auth failed because of bad realm or network"/>
-  <int value="8" label="kinit exited with unspecified error"/>
-  <int value="9" label="net exited with unspecified error"/>
-  <int value="10" label="smdclient exited with unspecified error"/>
-  <int value="11" label="authpolicy_parser exited with unknown error"/>
-  <int value="12" label="Parsing GPOs failed"/>
-  <int value="13" label="GPO data is bad"/>
-  <int value="14" label="Some local IO operation failed"/>
-  <int value="15" label="Machine is not joined to AD domain yet"/>
-  <int value="16" label="User is not logged in yet"/>
-  <int value="17" label="Failed to send policy to Session Manager"/>
-  <int value="18"
-      label="User doesn't have the right to join machines to the domain"/>
-  <int value="19" label="General network problem"/>
-  <int value="20" label="Machine name contains restricted characters"/>
-  <int value="21" label="Machine name too long"/>
-  <int value="22" label="User joined maximum number of machines to the domain"/>
-  <int value="23"
-      label="kinit or smbclient failed to contact Key Distribution Center"/>
-</enum>
-
-<enum name="AutocheckoutBubble" type="int">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <int value="0" label="Created"/>
-  <int value="1" label="Accepted"/>
-  <int value="2" label="Dismissed"/>
-  <int value="3" label="Ignored"/>
-  <int value="4" label="Could be displayed"/>
-</enum>
-
-<enum name="AutocheckoutBuyFlow" type="int">
-  <obsolete>
-    Deprecated as of 8/2013.
-  </obsolete>
-  <int value="0" label="Started"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="Missing field mappings"/>
-  <int value="3" label="Missing advance element"/>
-  <int value="4" label="Cannot proceed"/>
-</enum>
-
-<enum name="AutofillCardUploadDecision" type="int">
-  <obsolete>
-    Deprecated as of 2/2016, replaced by AutofillCardUploadDecisionExpanded.
-  </obsolete>
-  <int value="0" label="Upload offered"/>
-  <int value="1" label="Upload not offered, no CVC detected"/>
-  <int value="2" label="Upload not offered, no valid address available"/>
-  <int value="3" label="Upload not offered, get upload details RPC failed"/>
-</enum>
-
-<enum name="AutofillCardUploadDecisionExpanded" type="int">
-  <int value="0" label="Upload offered"/>
-  <int value="1" label="Upload not offered, no CVC detected"/>
-  <int value="2" label="Upload not offered, no address available"/>
-  <int value="3" label="Upload not offered, no name available"/>
-  <int value="4"
-      label="Upload not offered, addresses had conflicting zip codes"/>
-  <int value="5" label="Upload not offered, no zip code available"/>
-  <int value="6" label="Upload not offered, get upload details RPC failed"/>
-  <int value="7"
-      label="Upload not offered, card and/or addresses had conflicting names"/>
-</enum>
-
-<enum name="AutofillCreditCardInfoBar" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="Accepted"/>
-  <int value="2" label="Denied"/>
-  <int value="3" label="Ignored"/>
-</enum>
-
-<enum name="AutofillDeveloperEngagement" type="int">
-  <int value="0" label="Fillable form parsed"/>
-  <int value="1" label="Includes type hints"/>
-</enum>
-
-<enum name="AutofillDialogDismissalState" type="int">
-  <int value="0" label="Submitted, existing data (deprecated)"/>
-  <int value="1" label="Submitted, saved to Wallet"/>
-  <int value="2" label="Submitted, saved locally"/>
-  <int value="3" label="Submitted, no save"/>
-  <int value="4" label="Canceled, no edits"/>
-  <int value="5" label="Canceled, no invalid fields"/>
-  <int value="6" label="Canceled, 1+ invalid fields"/>
-  <int value="7" label="Canceled during sign-in"/>
-  <int value="8" label="Submitted, existing data came from Wallet"/>
-  <int value="9" label="Submitted, existing data came from Autofill"/>
-</enum>
-
-<enum name="AutofillDialogInitialUserState" type="int">
-  <int value="0" label="Not signed in, no Autofill"/>
-  <int value="1" label="Not signed in, has Autofill"/>
-  <int value="2" label="Signed in, no Wallet, no Autofill"/>
-  <int value="3" label="Signed in, no Wallet, has Autofill"/>
-  <int value="4" label="Signed in, has Wallet, no Autofill"/>
-  <int value="5" label="Signed in, ha Wallet, has Autofill"/>
-</enum>
-
-<enum name="AutofillDialogPopupEvent" type="int">
-  <int value="0" label="Popup shown"/>
-  <int value="1" label="Form Autofilled"/>
-</enum>
-
-<enum name="AutofillDialogSecurity" type="int">
-  <int value="0" label="Baseline: Dialog shown"/>
-  <int value="1" label="Credit card over HTTP"/>
-  <int value="2" label="Cross-origin frame"/>
-</enum>
-
-<enum name="AutofillDialogUiEvents" type="int">
-  <int value="0" label="Dialog shown"/>
-  <int value="1" label="Dialog submitted"/>
-  <int value="2" label="Dialog canceled"/>
-  <int value="3"
-      label="Account switched: Wallet-&gt;Autofill (M35+: user actions only)"/>
-  <int value="4" label="Account switched: Autofill-&gt;Wallet"/>
-  <int value="5" label="Account switched: Wallet-&gt;Wallet"/>
-  <int value="6" label="Sign-in UI shown"/>
-  <int value="7" label="Selected different email suggestion"/>
-  <int value="8" label="Selected different billing suggestion"/>
-  <int value="9" label="Selected different cc+billing suggestion"/>
-  <int value="10" label="Selected different shipping suggestion"/>
-  <int value="11" label="Selected different cc suggestion"/>
-  <int value="12" label="Showed edit UI for email"/>
-  <int value="13" label="Showed edit UI for billing"/>
-  <int value="14" label="Showed edit UI for cc+billing"/>
-  <int value="15" label="Showed edit UI for shipping"/>
-  <int value="16" label="Showed edit UI for cc"/>
-  <int value="17" label="Selected 'Add email' suggestion"/>
-  <int value="18" label="Selected 'Add billing' suggestion"/>
-  <int value="19" label="Selected 'Add cc+billing' suggestion"/>
-  <int value="20" label="Selected 'Add shipping' suggestion"/>
-  <int value="21" label="Selected 'Add cc' suggestion"/>
-  <int value="22" label="Account switched: Wallet account added (multilogin)"/>
-</enum>
-
-<enum name="AutofillExperimentId" type="int">
-  <int value="0" label="No Experiment"/>
-  <int value="1" label="Unknown"/>
-  <int value="2" label="ar06"/>
-  <int value="3" label="ar1"/>
-  <int value="4" label="ar2"/>
-  <int value="5" label="ar4"/>
-  <int value="6" label="ar05wlr15"/>
-  <int value="7" label="ar05wlr25"/>
-  <int value="8" label="ar05wlr25fs5"/>
-  <int value="9" label="tbar1"/>
-  <int value="10" label="ar04wr3fs4"/>
-  <int value="11" label="No Server Response"/>
-  <int value="12" label="fp05"/>
-  <int value="13" label="fp025"/>
-  <int value="14" label="fp05cc03"/>
-  <int value="15" label="fp05cco03"/>
-  <int value="16" label="fp05cco03cstd"/>
-  <int value="17" label="fp05cc03e1"/>
-</enum>
-
-<enum name="AutofillFormEvent" type="int">
-  <int value="0" label="Interacted (once)"/>
-  <int value="1" label="Suggestions shown"/>
-  <int value="2" label="Suggestions shown (once)"/>
-  <int value="3" label="Local suggestion filled"/>
-  <int value="4" label="Server suggestion filled"/>
-  <int value="5" label="Masked server card suggestion filled"/>
-  <int value="6" label="Local suggestion filled (once)"/>
-  <int value="7" label="Server suggestion filled (once)"/>
-  <int value="8" label="Masked server card suggestion filled (once)"/>
-  <int value="9" label="Submitted with no suggestion filled (once)"/>
-  <int value="10" label="Submitted with local suggestion filled (once)"/>
-  <int value="11" label="Submitted with server suggestion filled (once)"/>
-  <int value="12"
-      label="Submitted with masked server card suggestion filled (once)"/>
-  <int value="13" label="Masked server card suggestion selected">
-    The user selected a masked server card that triggered an unmask attempt.
-  </int>
-  <int value="14" label="Masked server card suggestion selected (once)">
-    The user selected a masked server card that triggered an unmask attempt at
-    least once.
-  </int>
-  <int value="15"
-      label="About to be submitted with no suggestion filled (once)"/>
-  <int value="16"
-      label="About to be submitted with local suggestion filled (once)"/>
-  <int value="17"
-      label="About to be submitted with server suggestion filled (once)"/>
-  <int value="18"
-      label="About to be submitted with masked server card suggestion filled
-             (once)"/>
-  <int value="19" label="Submitted with suggestion shown (once)"/>
-  <int value="20" label="About to be submitted with suggestion shown (once)"/>
-</enum>
-
-<enum name="AutofillFormSubmittedState" type="int">
-  <int value="0" label="Non fillable form or new data"/>
-  <int value="1" label="Fillable form, autofilled all"/>
-  <int value="2" label="Fillable form, autofilled some"/>
-  <int value="3" label="Fillable form, autofilled none, did show suggestions"/>
-  <int value="4"
-      label="Fillable form, autofilled none, did not show suggestions"/>
-</enum>
-
-<enum name="AutofillGetRealPanResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Retriable failure"/>
-  <int value="2" label="Non retriable failure"/>
-  <int value="3" label="Network error"/>
-</enum>
-
-<enum name="AutofillKeyboardAccessoryButtonsIOS" type="int">
-  <int value="0" label="Forms loaded"/>
-  <int value="1" label="Submitted form"/>
-  <int value="2" label="Close button pressed"/>
-  <int value="3" label="Close button pressed (once)"/>
-  <int value="4" label="Next button pressed"/>
-  <int value="5" label="Next button pressed (once)"/>
-  <int value="6" label="Previous button pressed"/>
-  <int value="7" label="Previous button pressed (once)"/>
-</enum>
-
-<enum name="AutofillMacAddressBook" type="int">
-  <int value="0" label="Showed popup entry"/>
-  <int value="1" label="Selected popup entry"/>
-</enum>
-
-<enum name="AutofillProfileAction" type="int">
-  <int value="0" label="Existing profile used"/>
-  <int value="1" label="Existing profile updated"/>
-  <int value="2" label="New profile created"/>
-</enum>
-
-<enum name="AutofillQuality" type="int">
-  <int value="0" label="Submitted"/>
-  <int value="1" label="Autofilled"/>
-  <int value="2" label="Autofill failed"/>
-  <int value="3" label="Heuristic Unknown"/>
-  <int value="4" label="Heuristic Match"/>
-  <int value="5" label="Heuristic Mismatch"/>
-  <int value="6" label="Server Unknown"/>
-  <int value="7" label="Server Match"/>
-  <int value="8" label="Server Mismatch"/>
-</enum>
-
-<enum name="AutofillQueryResult" type="int">
-  <int value="0" label="Sent"/>
-  <int value="1" label="Received"/>
-  <int value="2" label="Parsed"/>
-  <int value="3" label="Response matches local"/>
-  <int value="4" label="Response improves local (nonempty)"/>
-  <int value="5" label="Response improves local (empty)"/>
-</enum>
-
-<enum name="AutofillSaveCreditCardPrompt" type="int">
-  <int value="0" label="Show requested"/>
-  <int value="1" label="Shown"/>
-  <int value="2" label="Ended, invalid legal message"/>
-  <int value="3" label="Ended, user explicitly accepted prompt"/>
-  <int value="4" label="Ended, user explicitly denied prompt"/>
-  <int value="5" label="Ended, navigated away from page while prompt showing"/>
-  <int value="6" label="Ended, navigated away from page while prompt hidden"/>
-  <int value="7" label="Dismissed, user clicked Learn More link"/>
-  <int value="8" label="Dismissed, user clicked a legal message link"/>
-</enum>
-
-<enum name="AutofillScanCreditCardPrompt" type="int">
-  <int value="0" label="Scan card shown"/>
-  <int value="1" label="Scan card selected"/>
-  <int value="2" label="Some other item selected"/>
-</enum>
-
-<enum name="AutofillTypeQuality" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Match"/>
-  <int value="2" label="Mismatch"/>
-</enum>
-
-<enum name="AutofillTypeQualityByFieldType" type="int">
-  <int value="0" label="Ambiguous, Unknown"/>
-  <int value="1" label="Ambiguous, Match"/>
-  <int value="2" label="Ambiguous, Mismatch"/>
-  <int value="3" label="Name, Unknown"/>
-  <int value="4" label="Name, Match"/>
-  <int value="5" label="Name, Mismatch"/>
-  <int value="6" label="Company, Unknown"/>
-  <int value="7" label="Company, Match"/>
-  <int value="8" label="Company, Mismatch"/>
-  <int value="9" label="Addr. line 1, Unknown"/>
-  <int value="10" label="Addr. line 1, Match"/>
-  <int value="11" label="Addr. line 1, Mismatch"/>
-  <int value="12" label="Addr. line 2, Unknown"/>
-  <int value="13" label="Addr. line 2, Match"/>
-  <int value="14" label="Addr. line 2, Mismatch"/>
-  <int value="15" label="City, Unknown"/>
-  <int value="16" label="City, Match"/>
-  <int value="17" label="City, Mismatch"/>
-  <int value="18" label="State, Unknown"/>
-  <int value="19" label="State, Match"/>
-  <int value="20" label="State, Mismatch"/>
-  <int value="21" label="ZIP code, Unknown"/>
-  <int value="22" label="ZIP code, Match"/>
-  <int value="23" label="ZIP code, Mismatch"/>
-  <int value="24" label="Country, Unknown"/>
-  <int value="25" label="Country, Match"/>
-  <int value="26" label="Country, Mismatch"/>
-  <int value="27" label="Phone, Unknown"/>
-  <int value="28" label="Phone, Match"/>
-  <int value="29" label="Phone, Mismatch"/>
-  <int value="30" label="Fax, Unknown"/>
-  <int value="31" label="Fax, Match"/>
-  <int value="32" label="Fax, Mismatch"/>
-  <int value="33" label="Email, Unknown"/>
-  <int value="34" label="Email, Match"/>
-  <int value="35" label="Email, Mismatch"/>
-  <int value="36" label="Credit card: name, Unknown"/>
-  <int value="37" label="Credit card: name, Match"/>
-  <int value="38" label="Credit card: name, Mismatch"/>
-  <int value="39" label="Credit card: number, Unknown"/>
-  <int value="40" label="Credit card: number, Match"/>
-  <int value="41" label="Credit card: number, Mismatch"/>
-  <int value="42" label="Credit card: date, Unknown"/>
-  <int value="43" label="Credit card: date, Match"/>
-  <int value="44" label="Credit card: date, Mismatch"/>
-  <int value="45" label="Credit card: type, Unknown"/>
-  <int value="46" label="Credit card: type, Match"/>
-  <int value="47" label="Credit card: type, Mismatch"/>
-  <int value="48" label="Password, Unknown"/>
-  <int value="49" label="Password, Match"/>
-  <int value="50" label="Password, Mismatch"/>
-  <int value="51" label="Addr. line 3, Unknown"/>
-  <int value="52" label="Addr. line 3, Match"/>
-  <int value="53" label="Addr. line 3, Mismatch"/>
-  <int value="54" label="Username, Unknown"/>
-  <int value="55" label="Username, Match"/>
-  <int value="56" label="Username, Mismatch"/>
-  <int value="57" label="Street Address, Unknown"/>
-  <int value="58" label="Street Address, Match"/>
-  <int value="59" label="Street Address, Mismatch"/>
-  <int value="60" label="Credit Card Verification, Unknown"/>
-  <int value="61" label="Credit Card Verification, Match"/>
-  <int value="62" label="Credit Card Verification, Mismatch"/>
-</enum>
-
-<enum name="AutofillUnmaskPromptEvent" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="Closed with no attempts"/>
-  <int value="2" label="Closed, retriable failure"/>
-  <int value="3" label="Closed, non retriable failure"/>
-  <int value="4" label="Closed, success w/ 0 failures">
-    Closed with successful unmask on the first attempt.
-  </int>
-  <int value="5" label="Closed, success w/ 1+ failures">
-    Closed with successful unmask after failed attempts.
-  </int>
-  <int value="6" label="Card saved locally"/>
-  <int value="7" label="Did opt in of local save"/>
-  <int value="8" label="Local save stayed disabled"/>
-  <int value="9" label="Did opt out of local save"/>
-  <int value="10" label="Local save stayed enabled"/>
-  <int value="11" label="Closed, abandon unmasking"/>
-</enum>
-
-<enum name="AutofillUserHappiness" type="int">
-  <int value="0" label="Forms loaded"/>
-  <int value="1" label="Deprecated 1"/>
-  <int value="2" label="Deprecated 2"/>
-  <int value="3" label="Deprecated 3"/>
-  <int value="4" label="Deprecated 4"/>
-  <int value="5" label="User did type"/>
-  <int value="6" label="Suggestions shown"/>
-  <int value="7" label="Suggestions shown (once)"/>
-  <int value="8" label="User did autofill"/>
-  <int value="9" label="User did autofill (once)"/>
-  <int value="10" label="User edited autofilled field"/>
-  <int value="11" label="User edited autofilled field (once)"/>
-</enum>
-
-<enum name="AutofillWalletAddressConversionType" type="int">
-  <int value="0" label="Merged with existing local profile"/>
-  <int value="1" label="Added as a new local profile"/>
-</enum>
-
-<enum name="AutoLaunchState" type="int">
-  <int value="0" label="AUTO_LAUNCH_NONE"/>
-  <int value="1" label="AUTO_LAUNCH_BACKGROUND"/>
-  <int value="2" label="[Deprecated] AUTO_LAUNCH_FOREGROUND"/>
-  <int value="3" label="[Deprecated] AUTO_LAUNCH_FOREGROUND_USELESS"/>
-</enum>
-
-<enum name="AutoplayBlockedReason" type="int">
-  <int value="0" label="Data Saver enabled"/>
-  <int value="1" label="Disabled by setting"/>
-  <int value="2" label="Data Saver and setting"/>
-</enum>
-
-<enum name="AutoplaySource" type="int">
-  <int value="0" label="autoplay attribute"/>
-  <int value="1" label="play() method"/>
-</enum>
-
-<enum name="AutoSigninFirstRun" type="int">
-  <int value="0" label="No action"/>
-  <int value="1" label="Turn off"/>
-  <int value="2" label="Ok, got it"/>
-</enum>
-
-<enum name="BackgroundFetchTrigger" type="int">
-  <int value="0" label="Wake-up of the persistent scheduler"/>
-  <int value="1" label="NTP opened"/>
-  <int value="2" label="Browser foregrounded"/>
-  <int value="3" label="Cold start of the browser"/>
-</enum>
-
-<enum name="BackgroundModeMenuItem" type="int">
-  <int value="0" label="About"/>
-  <int value="1" label="Task manager"/>
-  <int value="2" label="Background client"/>
-  <int value="3" label="Let run in background"/>
-  <int value="4" label="Exit"/>
-</enum>
-
-<enum name="BackgroundSyncResultPattern" type="int">
-  <int value="0" label="Success Foreground"/>
-  <int value="1" label="Success Background"/>
-  <int value="2" label="Failed Foreground"/>
-  <int value="3" label="Failed Background"/>
-</enum>
-
-<enum name="BackgroundSyncStatus" type="int">
-  <int value="0" label="Action completed successfully"/>
-  <int value="1" label="Back-end error"/>
-  <int value="2" label="Registration was not found"/>
-  <int value="3" label="No active service worker"/>
-  <int value="4" label="Action not allowed"/>
-  <int value="5" label="Permission denied"/>
-</enum>
-
-<enum name="BackgroundTracingState" type="int">
-  <int value="0" label="Scenario activation requested"/>
-  <int value="1" label="Scenario successfully activated"/>
-  <int value="2" label="Trace recording enabled"/>
-  <int value="3" label="Running preemptive scenario triggered"/>
-  <int value="4" label="Running reactive scenario triggered"/>
-  <int value="5" label="Trace finalization allowed"/>
-  <int value="6" label="Trace finalization disallowed"/>
-  <int value="7" label="Trace finalization started"/>
-  <int value="8" label="Trace finalization complete"/>
-  <int value="9" label="Scenario activation failed due to lowres clock"/>
-</enum>
-
-<enum name="BackingStoreResults" type="int">
-  <int value="0" label="Unused"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="Failure"/>
-</enum>
-
-<enum name="BadMessageReasonChrome" type="int">
-<!-- Generated from chrome/browser/bad_message.h -->
-
-  <int value="0" label="WRLHH_LOGGING_STOPPED_BAD_STATE"/>
-</enum>
-
-<enum name="BadMessageReasonContent" type="int">
-<!-- Generated from content/browser/bad_message.h -->
-
-  <int value="0" label="NC_IN_PAGE_NAVIGATION"/>
-  <int value="1" label="RFH_CAN_COMMIT_URL_BLOCKED"/>
-  <int value="2" label="RFH_CAN_ACCESS_FILES_OF_PAGE_STATE"/>
-  <int value="3" label="RFH_SANDBOX_FLAGS"/>
-  <int value="4" label="RFH_NO_PROXY_TO_PARENT"/>
-  <int value="5" label="RPH_DESERIALIZATION_FAILED"/>
-  <int value="6" label="RVH_CAN_ACCESS_FILES_OF_PAGE_STATE"/>
-  <int value="7" label="RFH_FILE_CHOOSER_PATH"/>
-  <int value="8" label="RWH_SYNTHETIC_GESTURE"/>
-  <int value="9" label="RWH_FOCUS"/>
-  <int value="10" label="RWH_BLUR"/>
-  <int value="11" label="RWH_SHARED_BITMAP"/>
-  <int value="12" label="RWH_BAD_ACK_MESSAGE"/>
-  <int value="13" label="RWHVA_SHARED_MEMORY"/>
-  <int value="14" label="SERVICE_WORKER_BAD_URL"/>
-  <int value="15" label="WC_INVALID_FRAME_SOURCE"/>
-  <int value="16" label="RWHVM_UNEXPECTED_FRAME_TYPE"/>
-  <int value="17" label="RFPH_DETACH"/>
-  <int value="18" label="DFH_BAD_EMBEDDER_MESSAGE"/>
-  <int value="19" label="NC_AUTO_SUBFRAME"/>
-  <int value="20" label="CSDH_NOT_RECOGNIZED"/>
-  <int value="21" label="DSMF_OPEN_STORAGE"/>
-  <int value="22" label="DSMF_LOAD_STORAGE"/>
-  <int value="23" label="DBMF_INVALID_ORIGIN_ON_OPEN"/>
-  <int value="24" label="DBMF_DB_NOT_OPEN_ON_MODIFY"/>
-  <int value="25" label="DBMF_DB_NOT_OPEN_ON_CLOSE"/>
-  <int value="26" label="DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR"/>
-  <int value="27" label="RDH_INVALID_PRIORITY"/>
-  <int value="28" label="RDH_REQUEST_NOT_TRANSFERRING"/>
-  <int value="29" label="RDH_BAD_DOWNLOAD"/>
-  <int value="30" label="NMF_NO_PERMISSION_SHOW"/>
-  <int value="31" label="NMF_NO_PERMISSION_CLOSE"/>
-  <int value="32" label="NMF_NO_PERMISSION_VERIFY"/>
-  <int value="33" label="MH_INVALID_MIDI_PORT"/>
-  <int value="34" label="MH_SYS_EX_PERMISSION"/>
-  <int value="35" label="ACDH_REGISTER"/>
-  <int value="36" label="ACDH_UNREGISTER"/>
-  <int value="37" label="ACDH_SET_SPAWNING"/>
-  <int value="38" label="ACDH_SELECT_CACHE"/>
-  <int value="39" label="ACDH_SELECT_CACHE_FOR_WORKER"/>
-  <int value="40" label="ACDH_SELECT_CACHE_FOR_SHARED_WORKER"/>
-  <int value="41" label="ACDH_MARK_AS_FOREIGN_ENTRY"/>
-  <int value="42" label="ACDH_PENDING_REPLY_IN_GET_STATUS"/>
-  <int value="43" label="ACDH_GET_STATUS"/>
-  <int value="44" label="ACDH_PENDING_REPLY_IN_START_UPDATE"/>
-  <int value="45" label="ACDH_START_UPDATE"/>
-  <int value="46" label="ACDH_PENDING_REPLY_IN_SWAP_CACHE"/>
-  <int value="47" label="ACDH_SWAP_CACHE"/>
-  <int value="48" label="SWDH_NOT_HANDLED"/>
-  <int value="49" label="SWDH_REGISTER_BAD_URL"/>
-  <int value="50" label="SWDH_REGISTER_NO_HOST"/>
-  <int value="51" label="SWDH_REGISTER_CANNOT"/>
-  <int value="52" label="SWDH_UNREGISTER_BAD_URL"/>
-  <int value="53" label="SWDH_UNREGISTER_NO_HOST"/>
-  <int value="54" label="SWDH_UNREGISTER_CANNOT"/>
-  <int value="55" label="SWDH_GET_REGISTRATION_BAD_URL"/>
-  <int value="56" label="SWDH_GET_REGISTRATION_NO_HOST"/>
-  <int value="57" label="SWDH_GET_REGISTRATION_CANNOT"/>
-  <int value="58" label="SWDH_GET_REGISTRATION_FOR_READY_NO_HOST"/>
-  <int value="59" label="SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS"/>
-  <int value="60" label="SWDH_POST_MESSAGE"/>
-  <int value="61" label="SWDH_PROVIDER_CREATED_NO_HOST"/>
-  <int value="62" label="SWDH_PROVIDER_DESTROYED_NO_HOST"/>
-  <int value="63" label="SWDH_SET_HOSTED_VERSION_NO_HOST"/>
-  <int value="64" label="OBSOLETE_SWDH_SET_HOSTED_VERSION"/>
-  <int value="65" label="SWDH_WORKER_SCRIPT_LOAD_NO_HOST"/>
-  <int value="66" label="SWDH_INCREMENT_WORKER_BAD_HANDLE"/>
-  <int value="67" label="SWDH_DECREMENT_WORKER_BAD_HANDLE"/>
-  <int value="68" label="SWDH_INCREMENT_REGISTRATION_BAD_HANDLE"/>
-  <int value="69" label="SWDH_DECREMENT_REGISTRATION_BAD_HANDLE"/>
-  <int value="70" label="SWDH_TERMINATE_BAD_HANDLE"/>
-  <int value="71" label="FAMF_APPEND_ITEM_TO_BLOB"/>
-  <int value="72" label="FAMF_APPEND_SHARED_MEMORY_TO_BLOB"/>
-  <int value="73" label="FAMF_MALFORMED_STREAM_URL"/>
-  <int value="74" label="FAMF_APPEND_ITEM_TO_STREAM"/>
-  <int value="75" label="FAMF_APPEND_SHARED_MEMORY_TO_STREAM"/>
-  <int value="76" label="IDBDH_CAN_READ_FILE"/>
-  <int value="77" label="IDBDH_GET_OR_TERMINATE"/>
-  <int value="78" label="RFMF_SET_COOKIE_BAD_ORIGIN"/>
-  <int value="79" label="RFMF_GET_COOKIES_BAD_ORIGIN"/>
-  <int value="80" label="SWDH_GET_REGISTRATIONS_NO_HOST"/>
-  <int value="81" label="SWDH_GET_REGISTRATIONS_INVALID_ORIGIN"/>
-  <int value="82" label="AOAH_UNAUTHORIZED_URL"/>
-  <int value="83" label="BDH_INVALID_SERVICE_ID"/>
-  <int value="84" label="RFH_COMMIT_DESERIALIZATION_FAILED"/>
-  <int value="85" label="BDH_INVALID_CHARACTERISTIC_ID"/>
-  <int value="86" label="SWDH_UPDATE_NO_HOST"/>
-  <int value="87" label="SWDH_UPDATE_BAD_REGISTRATION_ID"/>
-  <int value="88" label="SWDH_UPDATE_CANNOT"/>
-  <int value="89" label="SWDH_UNREGISTER_BAD_REGISTRATION_ID"/>
-  <int value="90" label="BDH_INVALID_WRITE_VALUE_LENGTH"/>
-  <int value="91" label="WC_MEMORY_CACHE_RESOURCE_BAD_SECURITY_INFO"/>
-  <int value="92" label="WC_RENDERER_DID_NAVIGATE_BAD_SECURITY_INFO"/>
-  <int value="93" label="OBSOLETE_BDH_DUPLICATE_REQUEST_DEVICE_ID"/>
-  <int value="94" label="CSDH_INVALID_ORIGIN"/>
-  <int value="95" label="RDH_ILLEGAL_ORIGIN"/>
-  <int value="96" label="RDH_UNAUTHORIZED_HEADER_REQUEST"/>
-  <int value="97" label="RDH_INVALID_URL"/>
-  <int value="98" label="BDH_CHARACTERISTIC_ALREADY_SUBSCRIBED"/>
-  <int value="99" label="RFH_OWNER_PROPERTY"/>
-  <int value="100" label="BDH_EMPTY_OR_INVALID_FILTERS"/>
-  <int value="101" label="WC_CONTENT_WITH_CERT_ERRORS_BAD_SECURITY_INFO"/>
-  <int value="102" label="RFMF_RENDERER_FAKED_ITS_OWN_DEATH"/>
-  <int value="103" label="DWNLD_INVALID_SAVABLE_RESOURCE_LINKS_RESPONSE"/>
-  <int value="104" label="DWNLD_INVALID_SERIALIZE_AS_MHTML_RESPONSE"/>
-  <int value="105" label="BDH_DEVICE_NOT_ALLOWED_FOR_ORIGIN"/>
-  <int value="106" label="ACI_WRONG_STORAGE_PARTITION"/>
-  <int value="107" label="RDHI_WRONG_STORAGE_PARTITION"/>
-  <int value="108" label="RDH_INVALID_REQUEST_ID"/>
-  <int value="109" label="BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN"/>
-  <int value="110" label="WSI_UNEXPECTED_ADD_CHANNEL_REQUEST"/>
-  <int value="111" label="WSI_UNEXPECTED_SEND_FRAME"/>
-  <int value="112" label="RFH_UNEXPECTED_LOAD_START"/>
-  <int value="113" label="NMF_INVALID_ARGUMENT"/>
-  <int value="114" label="RFH_INVALID_ORIGIN_ON_COMMIT"/>
-  <int value="115" label="BDH_UUID_REGISTERED"/>
-  <int value="116" label="BDH_CONSTRUCTION_FAILED"/>
-  <int value="117" label="BDH_INVALID_REFCOUNT_OPERATION"/>
-  <int value="118" label="BDH_INVALID_URL_OPERATION"/>
-  <int value="119" label="IDBDH_INVALID_ORIGIN"/>
-  <int value="120" label="RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE"/>
-  <int value="121" label="RFH_FAIL_PROVISIONAL_LOAD_NO_ERROR"/>
-  <int value="122" label="NI_IN_PAGE_NAVIGATION"/>
-  <int value="123" label="RPH_MOJO_PROCESS_ERROR"/>
-  <int value="124" label="DBMF_INVALID_ORIGIN_ON_GET_SPACE"/>
-  <int value="125" label="DBMF_INVALID_ORIGIN_ON_MODIFIED"/>
-  <int value="126" label="DBMF_INVALID_ORIGIN_ON_CLOSED"/>
-  <int value="127" label="WSI_INVALID_HEADER_VALUE"/>
-  <int value="128" label="SWDH_SET_HOSTED_VERSION_INVALID_HOST"/>
-  <int value="129" label="SWDH_SET_HOSTED_VERSION_PROCESS_MISMATCH"/>
-  <int value="130" label="MSDH_INVALID_FRAME_ID"/>
-  <int value="131" label="SDH_INVALID_PORT_RANGE"/>
-  <int value="132" label="SCO_INVALID_ARGUMENT"/>
-  <int value="133" label="RFH_INCONSISTENT_DEVTOOLS_MESSAGE"/>
-  <int value="134" label="DSH_DUPLICATE_CONNECTION_ID"/>
-  <int value="135" label="DSH_NOT_CREATED_SESSION_ID"/>
-  <int value="136" label="DSH_NOT_ALLOCATED_SESSION_ID"/>
-  <int value="137" label="DSH_DELETED_SESSION_ID"/>
-  <int value="138" label="DSH_WRONG_STORAGE_PARTITION"/>
-  <int value="139" label="BDH_DISALLOWED_ORIGIN"/>
-  <int value="140" label="ARH_CREATED_STREAM_WITHOUT_AUTHORIZATION"/>
-  <int value="141" label="MDDH_INVALID_DEVICE_TYPE_REQUEST"/>
-  <int value="142" label="MDDH_UNAUTHORIZED_ORIGIN"/>
-  <int value="143" label="SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST"/>
-  <int value="144" label="SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN"/>
-  <int value="145" label="SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID"/>
-  <int value="146" label="RDH_TRANSFERRING_REQUEST_NOT_FOUND"/>
-  <int value="147" label="RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST"/>
-  <int value="148" label="SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST"/>
-  <int value="149" label="SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN"/>
-  <int value="150"
-      label="SWDH_GET_NAVIGATION_PRELOAD_STATE_BAD_REGISTRATION_ID"/>
-  <int value="151" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_NO_HOST"/>
-  <int value="152" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_INVALID_ORIGIN"/>
-  <int value="153"
-      label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_REGISTRATION_ID"/>
-  <int value="154" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_VALUE"/>
-  <int value="155" label="MDDH_INVALID_SUBSCRIPTION_REQUEST"/>
-  <int value="156" label="MDDH_INVALID_UNSUBSCRIPTION_REQUEST"/>
-  <int value="157" label="AOAH_NONSENSE_DEVICE_ID"/>
-  <int value="158" label="BDH_INVALID_OPTIONS"/>
-  <int value="159" label="RFH_DID_ADD_CONSOLE_MESSAGE_BAD_SEVERITY"/>
-  <int value="160" label="AIRH_VOLUME_OUT_OF_RANGE"/>
-  <int value="161" label="BDH_INVALID_DESCRIPTOR_ID"/>
-</enum>
-
-<enum name="BadMessageReasonExtensions" type="int">
-<!-- Generated from extensions/browser/bad_message.h -->
-
-  <int value="0" label="EOG_BAD_ORIGIN"/>
-  <int value="1" label="EVG_BAD_ORIGIN"/>
-  <int value="2" label="BH_BLOB_NOT_OWNED"/>
-  <int value="3" label="EH_BAD_EVENT_ID"/>
-  <int value="4" label="AVG_BAD_INST_ID"/>
-  <int value="5" label="AVG_BAD_EXT_ID"/>
-  <int value="6" label="AVG_NULL_AVG"/>
-  <int value="7" label="ESWMF_INVALID_DECREMENT_ACTIVITY"/>
-  <int value="8" label="EFD_BAD_MESSAGE"/>
-  <int value="9" label="EFD_BAD_MESSAGE_WORKER"/>
-</enum>
-
-<enum name="BadMessageReasonNaCl" type="int">
-<!-- Generated from components/nacl/browser/bad_message.h -->
-
-  <int value="0" label="NFH_OPEN_EXECUTABLE_BAD_ROUTING_ID"/>
-  <int value="1" label="NHMF_LAUNCH_CONTINUATION_BAD_ROUTING_ID"/>
-  <int value="2" label="NHMF_GET_NEXE_FD_BAD_URL"/>
-</enum>
-
-<enum name="BadMessageReasonPasswordManager" type="int">
-<!-- Generated from components/password_manager/content/browser/bad_message.h -->
-
-  <int value="1" label="CPMD_BAD_ORIGIN_FORMS_PARSED"/>
-  <int value="2" label="CPMD_BAD_ORIGIN_FORMS_RENDERED"/>
-  <int value="3" label="CPMD_BAD_ORIGIN_FORM_SUBMITTED"/>
-  <int value="4" label="CPMD_BAD_ORIGIN_FOCUSED_PASSWORD_FORM_FOUND"/>
-  <int value="5" label="CPMD_BAD_ORIGIN_IN_PAGE_NAVIGATION"/>
-  <int value="6" label="CPMD_BAD_ORIGIN_PASSWORD_NO_LONGER_GENERATED"/>
-  <int value="7" label="CPMD_BAD_ORIGIN_PRESAVE_GENERATED_PASSWORD"/>
-  <int value="8"
-      label="CPMD_BAD_ORIGIN_SAVE_GENERATION_FIELD_DETECTED_BY_CLASSIFIER"/>
-</enum>
-
-<enum name="BadSyncDataReason" type="int">
-  <int value="0" label="Bad extension ID"/>
-  <int value="1" label="Bad version"/>
-  <int value="2" label="Bad update URL"/>
-  <int value="3" label="No ExtensionSpecifics"/>
-  <int value="4" label="Bad disable reasons"/>
-</enum>
-
-<enum name="BaseRelocationType" type="int">
-  <int value="0" label="IMAGE_REL_BASED_ABSOLUTE"/>
-  <int value="1" label="IMAGE_REL_BASED_HIGH"/>
-  <int value="2" label="IMAGE_REL_BASED_LOW"/>
-  <int value="3" label="IMAGE_REL_BASED_HIGHLOW"/>
-  <int value="4" label="IMAGE_REL_BASED_HIGHADJ"/>
-  <int value="5" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_5"/>
-  <int value="6" label="IMAGE_REL_BASED_RESERVED"/>
-  <int value="7" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_7"/>
-  <int value="8" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_8"/>
-  <int value="9" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_9"/>
-  <int value="10" label="IMAGE_REL_BASED_DIR64"/>
-</enum>
-
-<enum name="BatteryInfoSampleResult" type="int">
-  <int value="0" label="Read"/>
-  <int value="1" label="Good"/>
-  <int value="2" label="Bad"/>
-</enum>
-
-<enum name="BatteryStatusNumberBatteries" type="int">
-  <int value="5" label="5+"/>
-</enum>
-
-<enum name="BatteryStatusNumberBatteriesWin" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="0"/>
-  <int value="2" label="1+"/>
-</enum>
-
-<enum name="BiquadFilterType" type="int">
-  <int value="0" label="lowpass"/>
-  <int value="1" label="highpass"/>
-  <int value="2" label="bandpass"/>
-  <int value="3" label="lowshelf"/>
-  <int value="4" label="highshelf"/>
-  <int value="5" label="peaking"/>
-  <int value="6" label="notch"/>
-  <int value="7" label="allpass"/>
-</enum>
-
-<enum name="BlacklistedVideoCaptureDeviceNames" type="int">
-  <int value="0" label="Google GTalk Camera Adapter"/>
-  <int value="1" label="IP Camera"/>
-  <int value="2" label="Cyberlink YouCam Webcam Splitter"/>
-  <int value="3" label="EpocCam Smartphone Wireless Camera"/>
-</enum>
-
-<enum name="BlacklistSetup" type="int">
-  <int value="0" label="Blacklist enabled"/>
-  <int value="1" label="Blacklist ran successfully."/>
-  <int value="2" label="Blacklist failed."/>
-  <int value="3" label="Blacklist thunk setup failed."/>
-  <int value="4" label="Blacklist interception failed."/>
-  <int value="5" label="Blacklist disabled."/>
-</enum>
-
-<enum name="BlobBrokenReason" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="There is not enough memory to store this blob"/>
-  <int value="2" label="File write failed"/>
-  <int value="3" label="Source died in transit"/>
-  <int value="4" label="Blob dereferenced while building"/>
-  <int value="5" label="Referenced blob broken"/>
-</enum>
-
-<enum name="BlobStorageDiskSpaceAdjustment" type="int">
-  <summary>
-    When the blob storage system adjusts its max disk space, it can be frozen,
-    adjusted (near min external disk availability), or normal. These values
-    record the transitions between those states.
-  </summary>
-  <int value="0"
-      label="Disk usage frozen because minimum disk availability was reached."/>
-  <int value="1"
-      label="Max disk usage reduced from a normal state because disk space is
-             approaching minimum disk availability."/>
-  <int value="2"
-      label="Max disk usage increased from a frozen state to adjusted, as
-             minimum external disk availability is still close."/>
-  <int value="3"
-      label="Max disk usage restored to desired limit after being adjusted or
-             frozen."/>
-</enum>
-
-<enum name="BluetoothAvailability" type="int">
-  <int value="0" label="Unexpected error"/>
-  <int value="1" label="Not available"/>
-  <int value="2" label="Available without LE"/>
-  <int value="3" label="Available with LE"/>
-  <int value="4" label="Available unknown LE"/>
-</enum>
-
-<enum name="BluetoothDiscoveryOutcomes" type="int">
-  <int value="0" label="Success"/>
-  <int value="1"
-      label="Unknown error; used when we could add code to get more detail"/>
-  <int value="2" label="Function not implemented on this platform"/>
-  <int value="3" label="Adapter not present"/>
-  <int value="4" label="Adapter removed since call chain started"/>
-  <int value="5" label="Discovery session not active"/>
-  <int value="6"
-      label="Attempted to remove a discovery session with another pending
-             request"/>
-  <int value="7"
-      label="Active BluetoothDiscoverySession wasn't found in
-             BluetoothAdapter"/>
-  <int value="8" label="Failed without a more specific reason"/>
-  <int value="9" label="(BlueZ) DBus failed to find the adapter"/>
-  <int value="10" label="(BlueZ) DBus didn't return an error code"/>
-  <int value="11" label="(BlueZ) org.bluez.Error.InProgress"/>
-  <int value="12" label="(BlueZ) org.bluez.Error.NotReady"/>
-  <int value="13"
-      label="(BlueZ) org.bluez.Error.Failed inside SetDiscoveryFilter, maybe
-             indicating an unsupported transport"/>
-  <int value="14"
-      label="(BlueZ) org.bluez.Error.NotSupported inside SetDiscoverFilter,
-             indicating a kernel that does not support Start Service
-             Discovery."/>
-</enum>
-
-<enum name="BluetoothGATTErrors" type="int">
-  <obsolete>
-    As of 08/2015 this has been replaced with WebBluetoothGATTOperationOutcome.
-  </obsolete>
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Failed"/>
-  <int value="2" label="In Progress"/>
-  <int value="3" label="Not Paired"/>
-</enum>
-
-<enum name="BluetoothPairingMethod" type="int">
-  <int value="0" label="No user interaction required"/>
-  <int value="1" label="PIN Code requested from user"/>
-  <int value="2" label="Passkey requested from user"/>
-  <int value="3" label="PIN Code entered into device"/>
-  <int value="4" label="Passkey entered into device"/>
-  <int value="5" label="Passkey confirmed on both devices"/>
-</enum>
-
-<enum name="BluetoothPairingResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Connection already in-progress"/>
-  <int value="2" label="Failed for non-specific reason"/>
-  <int value="3" label="Authentication failed"/>
-  <int value="4" label="Authentication canceled"/>
-  <int value="5" label="Authentication rejected"/>
-  <int value="6" label="Authentication timed out"/>
-  <int value="7" label="Unsupported device"/>
-  <int value="8" label="Unknown or unhandler error"/>
-</enum>
-
-<enum name="BluetoothStatus" type="int">
-  <int value="0" label="Disabled"/>
-  <int value="1" label="Enabled"/>
-  <int value="2" label="Unknown"/>
-</enum>
-
-<enum name="BookmarkLaunchLocation" type="int">
-  <int value="0" label="Attached bookmark bar"/>
-  <int value="1" label="Detached (floating) bookmark bar"/>
-  <int value="2" label="Bookmark bar subfolder"/>
-  <int value="3" label="Context menu"/>
-  <int value="4" label="Wrench menu"/>
-  <int value="5" label="Bookmark manager"/>
-  <int value="6" label="Omnibox suggestion"/>
-</enum>
-
-<enum name="BookmarksEntryPoint" type="int">
-  <int value="0" label="Accelerator(Ctrl+D)"/>
-  <int value="1" label="Gesture"/>
-  <int value="2" label="Space or Enter"/>
-  <int value="3" label="Mouse click"/>
-</enum>
-
-<enum name="BookmarksExperimentState" type="int">
-  <int value="0" label="No experiment"/>
-  <int value="1" label="Experiment enabled (sync)"/>
-  <int value="2" label="Experiment disabled (sync opt out)"/>
-  <int value="3" label="Experiment enabled (finch)"/>
-  <int value="4" label="Experiment disabled (finch opt out)"/>
-  <int value="5" label="Experiment disabled (finch but signed in)"/>
-  <int value="6" label="Experiment enabled (sync unknown)"/>
-</enum>
-
-<enum name="BookmarksOpenAction" type="int">
-  <int value="0" label="Open in current tab"/>
-  <int value="1" label="Open in new tab"/>
-  <int value="2" label="Open in incognito tab"/>
-</enum>
-
-<enum name="Boolean" type="int">
-  <int value="0" label="False"/>
-  <int value="1" label="True"/>
-</enum>
-
-<enum name="BooleanAbsent" type="int">
-  <int value="0" label="Not Absent"/>
-  <int value="1" label="Absent"/>
-</enum>
-
-<enum name="BooleanAccepted" type="int">
-  <int value="0" label="Not Accepted"/>
-  <int value="1" label="Accepted"/>
-</enum>
-
-<enum name="BooleanAccountChange" type="int">
-  <int value="0" label="Service"/>
-  <int value="1" label="Broadcast"/>
-</enum>
-
-<enum name="BooleanActivation" type="int">
-  <int value="0" label="Deactivated"/>
-  <int value="1" label="Activated"/>
-</enum>
-
-<enum name="BooleanActive" type="int">
-  <int value="0" label="Inactive"/>
-  <int value="1" label="Active"/>
-</enum>
-
-<enum name="BooleanAttempted" type="int">
-  <int value="0" label="Not Attempted"/>
-  <int value="1" label="Attempted"/>
-</enum>
-
-<enum name="BooleanAvailable" type="int">
-  <int value="0" label="Not Available"/>
-  <int value="1" label="Available"/>
-</enum>
-
-<enum name="BooleanAvoidedNullPointerException" type="int">
-  <int value="0" label="Had NullPointerException"/>
-  <int value="1" label="No exception"/>
-</enum>
-
-<enum name="BooleanBlocked" type="int">
-  <int value="0" label="Not Blocked"/>
-  <int value="1" label="Blocked"/>
-</enum>
-
-<enum name="BooleanBringToForegroundReason" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Notification click (within last 5 seconds)"/>
-</enum>
-
-<enum name="BooleanBroken" type="int">
-  <int value="0" label="Not Broken"/>
-  <int value="1" label="Broken"/>
-</enum>
-
-<enum name="BooleanCacheHit" type="int">
-  <int value="0" label="Miss"/>
-  <int value="1" label="Hit"/>
-</enum>
-
-<enum name="BooleanCanceled" type="int">
-  <int value="0" label="Not Canceled"/>
-  <int value="1" label="Canceled"/>
-</enum>
-
-<enum name="BooleanCanCheckUrl" type="int">
-  <int value="0" label="Skipped"/>
-  <int value="1" label="Can check"/>
-</enum>
-
-<enum name="BooleanCanvasExpanded" type="int">
-  <int value="0" label="Original canvas dimensions were sufficient"/>
-  <int value="1" label="First image frame dimension were needed"/>
-</enum>
-
-<enum name="BooleanChanged" type="int">
-  <int value="0" label="Not changed"/>
-  <int value="1" label="Changed"/>
-</enum>
-
-<enum name="BooleanChecked" type="int">
-  <int value="0" label="Not checked"/>
-  <int value="1" label="Checked"/>
-</enum>
-
-<enum name="BooleanCleared" type="int">
-  <int value="0" label="Not cleared"/>
-  <int value="1" label="Cleared"/>
-</enum>
-
-<enum name="BooleanClicked" type="int">
-  <int value="0" label="Not Clicked"/>
-  <int value="1" label="Clicked"/>
-</enum>
-
-<enum name="BooleanCloned" type="int">
-  <int value="0" label="Not cloned"/>
-  <int value="1" label="Cloned"/>
-</enum>
-
-<enum name="BooleanCloseTimeout" type="int">
-  <int value="0" label="Closed normally"/>
-  <int value="1" label="Timed out"/>
-</enum>
-
-<enum name="BooleanCommonNameMatch" type="int">
-  <int value="0" label="subjectAltName used"/>
-  <int value="1" label="Common Name used"/>
-</enum>
-
-<enum name="BooleanCompatibilityMode" type="int">
-  <int value="0" label="Not in compatibility mode"/>
-  <int value="1" label="In compatibility mode"/>
-</enum>
-
-<enum name="BooleanCompleted" type="int">
-  <int value="0" label="Not Completed"/>
-  <int value="1" label="Completed"/>
-</enum>
-
-<enum name="BooleanConnected" type="int">
-  <int value="0" label="Not Connected"/>
-  <int value="1" label="Connected"/>
-</enum>
-
-<enum name="BooleanContainedMeCard" type="int">
-  <int value="0" label="Did not contain me card."/>
-  <int value="1" label="Contained me card."/>
-</enum>
-
-<enum name="BooleanCorrupt" type="int">
-  <int value="0" label="Not Corrupt"/>
-  <int value="1" label="Corrupt"/>
-</enum>
-
-<enum name="BooleanCouldFireImmediately" type="int">
-  <int value="0" label="Could not fire immediately"/>
-  <int value="1" label="Could fire immediately"/>
-</enum>
-
-<enum name="BooleanCovered" type="int">
-  <int value="0" label="Not Covered"/>
-  <int value="1" label="Covered"/>
-</enum>
-
-<enum name="BooleanCreated" type="int">
-  <int value="0" label="Not created"/>
-  <int value="1" label="Created"/>
-</enum>
-
-<enum name="BooleanCredentialsLost" type="int">
-  <int value="0" label="Found Credentials"/>
-  <int value="1" label="Missing Credentials"/>
-</enum>
-
-<enum name="BooleanDataReductionProxy" type="int">
-  <int value="0" label="Not Data Reduction Proxy"/>
-  <int value="1" label="Data Reduction Proxy"/>
-</enum>
-
-<enum name="BooleanDefault" type="int">
-  <int value="0" label="Not Default"/>
-  <int value="1" label="Default"/>
-</enum>
-
-<enum name="BooleanDeferred" type="int">
-  <int value="0" label="Not deferred"/>
-  <int value="1" label="Deferred"/>
-</enum>
-
-<enum name="BooleanDelete" type="int">
-  <int value="0" label="Ignored"/>
-  <int value="1" label="Deleted"/>
-</enum>
-
-<enum name="BooleanDeletedOrNot" type="int">
-  <int value="0" label="Not deleted"/>
-  <int value="1" label="Deleted"/>
-</enum>
-
-<enum name="BooleanDeprecatedCiphers" type="int">
-  <int value="0" label="Deprecated ciphers disabled"/>
-  <int value="1" label="Deprecated ciphers enabled"/>
-</enum>
-
-<enum name="BooleanDidEvict" type="int">
-  <int value="0" label="Did not evict"/>
-  <int value="1" label="Did evict"/>
-</enum>
-
-<enum name="BooleanDidFallBack" type="int">
-  <int value="0" label="Did not fall back"/>
-  <int value="1" label="Did fall back"/>
-</enum>
-
-<enum name="BooleanDidScalePage" type="int">
-  <int value="0" label="User did not change scale"/>
-  <int value="1" label="User did change scale"/>
-</enum>
-
-<enum name="BooleanDuplicate" type="int">
-  <int value="0" label="Not Duplicate"/>
-  <int value="1" label="Duplicate"/>
-</enum>
-
-<enum name="BooleanEmpty" type="int">
-  <int value="0" label="Not Empty"/>
-  <int value="1" label="Empty"/>
-</enum>
-
-<enum name="BooleanEnabled" type="int">
-  <int value="0" label="Disabled"/>
-  <int value="1" label="Enabled"/>
-</enum>
-
-<enum name="BooleanEqual" type="int">
-  <int value="0" label="Not Equal"/>
-  <int value="1" label="Equal"/>
-</enum>
-
-<enum name="BooleanError" type="int">
-  <int value="0" label="No Error"/>
-  <int value="1" label="Error"/>
-</enum>
-
-<enum name="BooleanEverWorked" type="int">
-  <int value="0" label="Has never worked"/>
-  <int value="1" label="Has worked at least once"/>
-</enum>
-
-<enum name="BooleanExpired" type="int">
-  <int value="0" label="Unexpired"/>
-  <int value="1" label="Expired"/>
-</enum>
-
-<enum name="BooleanForced" type="int">
-  <int value="0" label="Not forced"/>
-  <int value="1" label="Forced"/>
-</enum>
-
-<enum name="BooleanForceDisabled" type="int">
-  <int value="0" label="Not Force Disabled"/>
-  <int value="1" label="Force Disabled"/>
-</enum>
-
-<enum name="BooleanForemost" type="int">
-  <int value="0" label="Tab was not foremost"/>
-  <int value="1" label="Tab was foremost"/>
-</enum>
-
-<enum name="BooleanFormatChanged" type="int">
-  <int value="0" label="Any Codec Initialized"/>
-  <int value="1" label="Missing FORMAT_CHANGED message"/>
-</enum>
-
-<enum name="BooleanFormManager" type="int">
-  <int value="0" label="Has Form Manager"/>
-  <int value="1" label="Lacks Form Manager"/>
-</enum>
-
-<enum name="BooleanFrameAsOverlay" type="int">
-  <int value="0" label="Frame was not allow_overlay"/>
-  <int value="1" label="Frame was allow_overlay"/>
-</enum>
-
-<enum name="BooleanFromAddressBook" type="int">
-  <int value="0" label="Not From Address Book"/>
-  <int value="1" label="From Address Book"/>
-</enum>
-
-<enum name="BooleanGAIAWebViewFlow" type="int">
-  <int value="0" label="iframe-based flow"/>
-  <int value="1" label="WebView-based flow"/>
-</enum>
-
-<enum name="BooleanHadAddress" type="int">
-  <int value="0" label="Did not have address."/>
-  <int value="1" label="Had address."/>
-</enum>
-
-<enum name="BooleanHadBlankText" type="int">
-  <int value="0" label="Did not have blank text"/>
-  <int value="1" label="Had blank text"/>
-</enum>
-
-<enum name="BooleanHadEmail" type="int">
-  <int value="0" label="Did not have email."/>
-  <int value="1" label="Had email."/>
-</enum>
-
-<enum name="BooleanHadName" type="int">
-  <int value="0" label="Did not have name."/>
-  <int value="1" label="Had name."/>
-</enum>
-
-<enum name="BooleanHadPhoneNumber" type="int">
-  <int value="0" label="Did not have phone number."/>
-  <int value="1" label="Had phone number."/>
-</enum>
-
-<enum name="BooleanHadPredictions" type="int">
-  <int value="0" label="No predictions"/>
-  <int value="1" label="Has predictions"/>
-</enum>
-
-<enum name="BooleanHandshakeConfirmed" type="int">
-  <int value="0" label="Handshake not confirmed"/>
-  <int value="1" label="Handshake confirmed"/>
-</enum>
-
-<enum name="BooleanHardwareAccelerated" type="int">
-  <int value="0" label="Not hardware accelerated"/>
-  <int value="1" label="Hardware accelerated"/>
-</enum>
-
-<enum name="BooleanHasCollapseKey" type="int">
-  <int value="0" label="No collapse_key"/>
-  <int value="1" label="Has collapse_key"/>
-</enum>
-
-<enum name="BooleanHasCrc" type="int">
-  <int value="0" label="No CRC"/>
-  <int value="1" label="Has CRC"/>
-</enum>
-
-<enum name="BooleanHasDistilledData" type="int">
-  <int value="0" label="No distilled data"/>
-  <int value="1" label="Has distilled data"/>
-</enum>
-
-<enum name="BooleanHasPath" type="int">
-  <int value="0" label="No path"/>
-  <int value="1" label="Has path"/>
-</enum>
-
-<enum name="BooleanHasPlayed" type="int">
-  <int value="0" label="Never played"/>
-  <int value="1" label="Played"/>
-</enum>
-
-<enum name="BooleanHasSeekPenalty" type="int">
-  <int value="0" label="Has no seek penalty (e.g. is flash memory)"/>
-  <int value="1" label="Has seek penalty (e.g. spinning disk)"/>
-</enum>
-
-<enum name="BooleanHit" type="int">
-  <int value="0" label="Not_reached"/>
-  <int value="1" label="Hit"/>
-</enum>
-
-<enum name="BooleanHttps" type="int">
-  <int value="0" label="HTTP"/>
-  <int value="1" label="HTTPS"/>
-</enum>
-
-<enum name="BooleanIgnored" type="int">
-  <int value="0" label="Not ignored"/>
-  <int value="1" label="Ignored"/>
-</enum>
-
-<enum name="BooleanInappropriateFallback" type="int">
-  <int value="0" label="Handshake successful"/>
-  <int value="1" label="inappropriate_fallback alert"/>
-</enum>
-
-<enum name="BooleanInForeground" type="int">
-  <int value="0" label="Background"/>
-  <int value="1" label="Foreground"/>
-</enum>
-
-<enum name="BooleanInvalid" type="int">
-  <int value="0" label="Valid"/>
-  <int value="1" label="Invalid"/>
-</enum>
-
-<enum name="BooleanIsLastSharedAppInfoRetrieved" type="int">
-  <int value="0" label="Not retrieved"/>
-  <int value="1" label="Retrieved"/>
-</enum>
-
-<enum name="BooleanIsMalware" type="int">
-  <int value="0" label="Not malware"/>
-  <int value="1" label="Is malware"/>
-</enum>
-
-<enum name="BooleanIsMobileOptimized" type="int">
-  <int value="0" label="Not mobile optimized web page"/>
-  <int value="1" label="Mobile optimized web page"/>
-</enum>
-
-<enum name="BooleanIsPhishing" type="int">
-  <int value="0" label="Not phishing"/>
-  <int value="1" label="Is phishing"/>
-</enum>
-
-<enum name="BooleanIsShared" type="int">
-  <int value="0" label="Not Shared"/>
-  <int value="1" label="Is Shared"/>
-</enum>
-
-<enum name="BooleanLoaded" type="int">
-  <int value="0" label="Not loaded"/>
-  <int value="1" label="Loaded"/>
-</enum>
-
-<enum name="BooleanMainFrame" type="int">
-  <int value="0" label="Subframe"/>
-  <int value="1" label="Main frame"/>
-</enum>
-
-<enum name="BooleanMatched" type="int">
-  <int value="0" label="Not matched"/>
-  <int value="1" label="Matched"/>
-</enum>
-
-<enum name="BooleanMatchedBadIp" type="int">
-  <int value="0" label="Not matched"/>
-  <int value="1" label="Matched"/>
-</enum>
-
-<enum name="BooleanMigrated" type="int">
-  <int value="0" label="Not migrated"/>
-  <int value="1" label="Migrated"/>
-</enum>
-
-<enum name="BooleanMissingFromDiskCache" type="int">
-  <int value="0" label="Has data in disk cache"/>
-  <int value="1" label="Missing data in disk cache"/>
-</enum>
-
-<enum name="BooleanNavPreloadFinishedFirst" type="int">
-  <int value="0" label="Worker preparation finished first"/>
-  <int value="1" label="Navigation preload response arrived first"/>
-</enum>
-
-<enum name="BooleanNeedsClearing" type="int">
-  <int value="0" label="Doesn't need clearing"/>
-  <int value="1" label="Needs to be clearred"/>
-</enum>
-
-<enum name="BooleanNullStream" type="int">
-  <int value="0" label="Stream is not a nullptr"/>
-  <int value="1" label="Stream is a nullptr"/>
-</enum>
-
-<enum name="BooleanNullVisitor" type="int">
-  <int value="0" label="Connection's visitor is not a nullptr"/>
-  <int value="1" label="Connection's visitor is a nullptr"/>
-</enum>
-
-<enum name="BooleanOnBattery" type="int">
-  <int value="0" label="Not on battery"/>
-  <int value="1" label="On Battery"/>
-</enum>
-
-<enum name="BooleanOrphan" type="int">
-  <int value="0" label="Non-orphan"/>
-  <int value="1" label="Orphan"/>
-</enum>
-
-<enum name="BooleanPanelWasOpen" type="int">
-  <int value="0" label="Panel was closed"/>
-  <int value="1" label="Panel was open"/>
-</enum>
-
-<enum name="BooleanPending" type="int">
-  <int value="0" label="Decided"/>
-  <int value="1" label="Pending"/>
-</enum>
-
-<enum name="BooleanPersisted" type="int">
-  <int value="0" label="Not persisted"/>
-  <int value="1" label="Persisted"/>
-</enum>
-
-<enum name="BooleanPinned" type="int">
-  <int value="0" label="Not Pinned"/>
-  <int value="1" label="Pinned"/>
-</enum>
-
-<enum name="BooleanPopulated" type="int">
-  <int value="0" label="Not populated"/>
-  <int value="1" label="Populated"/>
-</enum>
-
-<enum name="BooleanPreferred" type="int">
-  <int value="0" label="Not Preferred"/>
-  <int value="1" label="Preferred"/>
-</enum>
-
-<enum name="BooleanPresent" type="int">
-  <int value="0" label="Not Present"/>
-  <int value="1" label="Present"/>
-</enum>
-
-<enum name="BooleanProfileSignedIn" type="int">
-  <int value="0" label="Profile was not Signed In"/>
-  <int value="1" label="Profile was Signed In"/>
-</enum>
-
-<enum name="BooleanRaced" type="int">
-  <int value="0" label="Did Not Race"/>
-  <int value="1" label="Raced"/>
-</enum>
-
-<enum name="BooleanRebooted" type="int">
-  <int value="0" label="Has not rebooted"/>
-  <int value="1" label="Rebooted"/>
-</enum>
-
-<enum name="BooleanReceived" type="int">
-  <int value="0" label="Not Received"/>
-  <int value="1" label="Received"/>
-</enum>
-
-<enum name="BooleanRecorded" type="int">
-  <int value="0" label="Not Recorded"/>
-  <int value="1" label="Recorded"/>
-</enum>
-
-<enum name="BooleanRegistered" type="int">
-  <int value="0" label="Not Registered"/>
-  <int value="1" label="Registered"/>
-</enum>
-
-<enum name="BooleanRegistrationIsDuplicate" type="int">
-  <int value="0" label="Registration is not a duplicate"/>
-  <int value="1" label="Registration is a duplicate"/>
-</enum>
-
-<enum name="BooleanReported" type="int">
-  <int value="0" label="Not reported"/>
-  <int value="1" label="Reported"/>
-</enum>
-
-<enum name="BooleanRequested" type="int">
-  <int value="0" label="Not requested"/>
-  <int value="1" label="Requested"/>
-</enum>
-
-<enum name="BooleanRequired" type="int">
-  <int value="0" label="Not required"/>
-  <int value="1" label="Required"/>
-</enum>
-
-<enum name="BooleanReset" type="int">
-  <int value="0" label="Not reset"/>
-  <int value="1" label="Reset"/>
-</enum>
-
-<enum name="BooleanRestoredURL" type="int">
-  <int value="0" label="Default frame src URL"/>
-  <int value="1" label="Different URL"/>
-</enum>
-
-<enum name="BooleanReused" type="int">
-  <int value="0" label="Not Reused"/>
-  <int value="1" label="Reused"/>
-</enum>
-
-<enum name="BooleanRevoked" type="int">
-  <int value="0" label="Not revoked"/>
-  <int value="1" label="Revoked"/>
-</enum>
-
-<enum name="BooleanSecure" type="int">
-  <int value="0" label="Insecure"/>
-  <int value="1" label="Secure"/>
-</enum>
-
-<enum name="BooleanSelected" type="int">
-  <int value="0" label="No selection"/>
-  <int value="1" label="Selected"/>
-</enum>
-
-<enum name="BooleanShareGroup" type="int">
-  <int value="0" label="No share group"/>
-  <int value="1" label="Using share group"/>
-</enum>
-
-<enum name="BooleanShown" type="int">
-  <int value="0" label="Not Shown"/>
-  <int value="1" label="Shown"/>
-</enum>
-
-<enum name="BooleanSkipped" type="int">
-  <int value="0" label="Not skipped"/>
-  <int value="1" label="Skipped"/>
-</enum>
-
-<enum name="BooleanStale" type="int">
-  <int value="0" label="Fresh"/>
-  <int value="1" label="Stale"/>
-</enum>
-
-<enum name="BooleanStartedCompleted" type="int">
-  <int value="0" label="Started"/>
-  <int value="1" label="Completed"/>
-</enum>
-
-<enum name="BooleanStreamed" type="int">
-  <int value="0" label="Not streamed"/>
-  <int value="1" label="Streamed"/>
-</enum>
-
-<enum name="BooleanSuccess" type="int">
-  <int value="0" label="Failure"/>
-  <int value="1" label="Success"/>
-</enum>
-
-<enum name="BooleanSupported" type="int">
-  <int value="0" label="Not Supported"/>
-  <int value="1" label="Supported"/>
-</enum>
-
-<enum name="BooleanSuppressed" type="int">
-  <int value="0" label="No suppressions"/>
-  <int value="1" label="Suppressed"/>
-</enum>
-
-<enum name="BooleanTabDiscard" type="int">
-  <int value="0" label="Memory OK, no discards"/>
-  <int value="1" label="Memory low, tabs discarded"/>
-</enum>
-
-<enum name="BooleanTablet" type="int">
-  <int value="0" label="Non tablet"/>
-  <int value="1" label="Tablet"/>
-</enum>
-
-<enum name="BooleanTerminated" type="int">
-  <int value="0" label="Not terminated"/>
-  <int value="1" label="Terminated"/>
-</enum>
-
-<enum name="BooleanTiled" type="int">
-  <int value="0" label="Not tiled"/>
-  <int value="1" label="Tiled"/>
-</enum>
-
-<enum name="BooleanTimedOut" type="int">
-  <int value="0" label="Did not time out"/>
-  <int value="1" label="Timed out"/>
-</enum>
-
-<enum name="BooleanTooMany" type="int">
-  <int value="0" label="Correct"/>
-  <int value="1" label="Too many"/>
-</enum>
-
-<enum name="BooleanTranslate" type="int">
-  <int value="0" label="Not Translated"/>
-  <int value="1" label="Translated"/>
-</enum>
-
-<enum name="BooleanUnknown" type="int">
-  <int value="0" label="Known"/>
-  <int value="1" label="Unknown"/>
-</enum>
-
-<enum name="BooleanUsage" type="int">
-  <int value="0" label="Not Used"/>
-  <int value="1" label="Used"/>
-</enum>
-
-<enum name="BooleanValid" type="int">
-  <int value="0" label="Invalid"/>
-  <int value="1" label="Valid"/>
-</enum>
-
-<enum name="BooleanValidHashSum" type="int">
-  <int value="0" label="Invalid hash sum"/>
-  <int value="1" label="Valid hash sum"/>
-</enum>
-
-<enum name="BooleanValidKeyExists" type="int">
-  <int value="0" label="No Valid Cached Key Found"/>
-  <int value="1" label="Valid Cached Key Found"/>
-</enum>
-
-<enum name="BooleanVirtualContext" type="int">
-  <int value="0" label="Real context encountered"/>
-  <int value="1" label="Virtual context encountered"/>
-</enum>
-
-<enum name="BooleanVisible" type="int">
-  <int value="0" label="Not visible"/>
-  <int value="1" label="Visible"/>
-</enum>
-
-<enum name="BooleanWasFast" type="int">
-  <int value="0" label="Slow"/>
-  <int value="1" label="Fast"/>
-</enum>
-
-<enum name="BooleanWasted" type="int">
-  <int value="0" label="Not wasted"/>
-  <int value="1" label="Wasted"/>
-</enum>
-
-<enum name="BooleanWiped" type="int">
-  <int value="0" label="Re-enabled"/>
-  <int value="1" label="Wiped out"/>
-</enum>
-
-<enum name="BoringSSLReasonCode" type="int">
-  <obsolete>
-    Removed in March 2016.
-  </obsolete>
-  <details>
-    See include/openssl/ssl.h at the corresponding BoringSSL revision for the
-    corresponding values.
-  </details>
-</enum>
-
-<enum name="BrokenAlternateProtocolLocation" type="int">
-  <int value="0" label="HTTP_STREAM_FACTORY_IMPL_JOB"/>
-  <int value="1" label="QUIC_STREAM_FACTORY"/>
-  <int value="2" label="HTTP_STREAM_FACTORY_IMPL_JOB_ALT"/>
-  <int value="3" label="HTTP_STREAM_FACTORY_IMPL_JOB_MAIN"/>
-</enum>
-
-<enum name="BrotliFilterDecodingStatus" type="int">
-  <int value="0" label="In progress"/>
-  <int value="1" label="Done"/>
-  <int value="2" label="Error"/>
-</enum>
-
-<enum name="BrotliFilterErrorCode" type="int">
-  <int value="0" label="NO_ERROR"/>
-  <int value="1" label="FORMAT_EXUBERANT_NIBBLE"/>
-  <int value="2" label="FORMAT_RESERVED"/>
-  <int value="3" label="FORMAT_EXUBERANT_META_NIBBLE"/>
-  <int value="4" label="FORMAT_SIMPLE_HUFFMAN_ALPHABET"/>
-  <int value="5" label="FORMAT_SIMPLE_HUFFMAN_SAME"/>
-  <int value="6" label="FORMAT_CL_SPACE"/>
-  <int value="7" label="FORMAT_HUFFMAN_SPACE"/>
-  <int value="8" label="FORMAT_CONTEXT_MAP_REPEAT"/>
-  <int value="9" label="FORMAT_BLOCK_LENGTH_1"/>
-  <int value="10" label="FORMAT_BLOCK_LENGTH_2"/>
-  <int value="11" label="FORMAT_TRANSFORM"/>
-  <int value="12" label="FORMAT_DICTIONARY"/>
-  <int value="13" label="FORMAT_WINDOW_BITS"/>
-  <int value="14" label="FORMAT_PADDING_1"/>
-  <int value="15" label="FORMAT_PADDING_2"/>
-  <int value="16" label="Reserved (16)"/>
-  <int value="17" label="Reserved (17)"/>
-  <int value="18" label="Reserved (18)"/>
-  <int value="19" label="Reserved (19)"/>
-  <int value="20" label="Reserved (20)"/>
-  <int value="21" label="ALLOC_CONTEXT_MODES"/>
-  <int value="22" label="ALLOC_TREE_GROUPS"/>
-  <int value="23" label="Reserved (23)"/>
-  <int value="24" label="Reserved (24)"/>
-  <int value="25" label="ALLOC_CONTEXT_MAP"/>
-  <int value="26" label="ALLOC_RING_BUFFER_1"/>
-  <int value="27" label="ALLOC_RING_BUFFER_2"/>
-  <int value="28" label="Reserved (28)"/>
-  <int value="29" label="Reserved (29)"/>
-  <int value="30" label="ALLOC_BLOCK_TYPE_TREES"/>
-  <int value="31" label="UNREACHABLE_1"/>
-  <int value="32" label="UNREACHABLE_2"/>
-  <int value="33" label="UNREACHABLE_3"/>
-  <int value="34" label="UNREACHABLE_4"/>
-  <int value="35" label="UNREACHABLE_5"/>
-  <int value="36" label="UNREACHABLE_6"/>
-</enum>
-
-<enum name="BubbleType" type="int">
-  <int value="0" label="Unknown Bubble"/>
-  <int value="1" label="Mock Bubble"/>
-  <int value="10" label="Extension Installed Bubble"/>
-  <int value="20" label="Translate Bubble"/>
-  <int value="30" label="Permissions Bubble"/>
-  <int value="31" label="Chooser Permissions Bubble"/>
-</enum>
-
-<enum name="CacheResult" type="int">
-  <int value="0" label="MEMORY_CACHE_HIT"/>
-  <int value="1" label="DISK_CACHE_HIT"/>
-  <int value="2" label="DISK_CACHE_ENTRY_CORRUPT"/>
-  <int value="3" label="DISK_CACHE_ERROR"/>
-  <int value="4" label="CACHE_MISS"/>
-</enum>
-
-<enum name="CALayerResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unknown failure"/>
-  <int value="2" label="IOSurface resource not overlay candidate"/>
-  <int value="3" label="StreamVideo resource not overlay candidate"/>
-  <int value="4" label="StreamVideo texture not identity"/>
-  <int value="5" label="Texture resource not overlay candidate"/>
-  <int value="6" label="Texture resource Y flipping not supported"/>
-  <int value="7" label="Tile resource not overlay candidate"/>
-  <int value="8" label="Unsupported quad blend mode"/>
-  <int value="9" label="Unsupported quad transform"/>
-  <int value="10" label="Unsupported quad clipping"/>
-  <int value="11" label="DebugBorder quads not supported"/>
-  <int value="12" label="PictureContent quads not supported"/>
-  <int value="13" label="RenderPass quads not supported"/>
-  <int value="14" label="SurfaceContent quads not supported"/>
-  <int value="15" label="YUVVideo quads not supported"/>
-  <int value="16"
-      label="Different clip settings in a sorting context is not supported."/>
-  <int value="17"
-      label="Different vertex opacities for a single texture is not supported"/>
-  <int value="18" label="RenderPassDrawQuad has a filter scale."/>
-  <int value="19" label="RenderPassDrawQuad has background filters."/>
-  <int value="20" label="RenderPassDrawQuad has a mask."/>
-  <int value="21" label="RenderPassDrawQuad has unconvertable filters."/>
-  <int value="22" label="RenderPassDrawQuad has a sorting context id."/>
-  <int value="23" label="Too many RenderPassDrawQuads."/>
-</enum>
-
-<enum name="CanvasContextType" type="int">
-  <int value="0" label="2d"/>
-  <int value="1" label="(obsolete) webkit-3d"/>
-  <int value="2" label="experimental-webgl"/>
-  <int value="3" label="webgl"/>
-  <int value="4" label="webgl2"/>
-  <int value="5" label="bitmaprenderer"/>
-</enum>
-
-<enum name="CanvasContextUsage" type="int">
-  <int value="0" label="CanvasCreated"/>
-  <int value="1" label="GPUAccelerated2DCanvasImageBufferCreated"/>
-  <int value="2" label="DisplayList2DCanvasImageBufferCreated"/>
-  <int value="3" label="Unaccelerated2DCanvasImageBufferCreated"/>
-  <int value="4" label="Accelerated2DCanvasGPUContextLost"/>
-  <int value="5" label="Unaccelerated2DCanvasImageBufferCreationFailed"/>
-  <int value="6" label="GPUAccelerated2DCanvasImageBufferCreationFailed"/>
-  <int value="7" label="DisplayList2DCanvasFallbackToRaster"/>
-  <int value="8" label="GPUAccelerated2DCanvasDeferralDisabled"/>
-  <int value="10" label="GPUAccelerated2DCanvasSurfaceCreationFailed"/>
-</enum>
-
-<enum name="CanvasDisplayListFallbackReason" type="int">
-  <int value="0" label="Unknown (Should not be seen in production)."/>
-  <int value="1" label="Canvas not cleared between consecutive frames."/>
-  <int value="2"
-      label="Canvas state stack too large (unbalanced save/restore?)."/>
-  <int value="3" label="Direct pixel write."/>
-  <int value="4" label="Flush for initial clear."/>
-  <int value="5" label="Flush after drawing from a WebGL canvas."/>
-  <int value="6" label="Acquiring snapshot for getImageData()."/>
-  <int value="7"
-      label="Acquiring snapshot for WebGL texture upload. (obsolete)"/>
-  <int value="8"
-      label="Acquiring snapshot for direct painting of canvas contents."/>
-  <int value="9" label="Acquiring snapshot for toDataURL()"/>
-  <int value="10" label="Acquiring snapshot for toBlob()."/>
-  <int value="11" label="Acquiring snapshot for capturing to a stream."/>
-  <int value="12" label="Acquiring snapshot for drawImage() source."/>
-  <int value="13" label="Acquiring snapshot for createPattern()."/>
-  <int value="14" label="Expensive overdraw heuristic."/>
-  <int value="15" label="Drawing a texture-backed pattern."/>
-  <int value="16" label="Drawing a video."/>
-  <int value="17" label="Drawing an animated 2D canvas."/>
-  <int value="18" label="Sub-pixel text anti-aliasing support."/>
-  <int value="19" label="Drawing a texture-backed image."/>
-  <int value="20"
-      label="Calling
-             OffscreenCanvasRenderingContext2D::transferToImageBitmap()."/>
-  <int value="21"
-      label="Acquiring snapshot in unit tests (should not be seen in
-             production)."/>
-  <int value="22" label="Acquiring snapshot for copiedImage()."/>
-  <int value="23" label="Acquiring snapshot for drawImageIntoBuffer()."/>
-  <int value="24" label="Acquiring snapshot for WebGL texImage2D()."/>
-  <int value="25" label="Acquiring snapshot for WebGL texSubImage2D()."/>
-  <int value="26" label="Acquiring snapshot for WebGL texImage3D()."/>
-  <int value="27" label="Acquiring snapshot for WebGL texSubImage3D()."/>
-  <int value="28" label="Acquiring snapshot for copy to clipboard."/>
-  <int value="29" label="Acquiring snapshot for createImageBitmap()."/>
-</enum>
-
-<enum name="CanvasGPUAccelerated2DCanvasDisableDeferralReason" type="int">
-  <int value="0" label="Unknown (Should not be seen in production)."/>
-  <int value="1" label="Canvas not cleared between consecutive frames."/>
-  <int value="2"
-      label="Canvas state stack too large (unbalanced save/restore?)."/>
-  <int value="3" label="Direct pixel write."/>
-  <int value="4" label="Draw image of animated 2d canvas"/>
-  <int value="5" label="Sub-pixel text anti-aliasing support (expect 0)"/>
-</enum>
-
-<enum name="CanvasHibernationEvent" type="int">
-  <int value="0" label="HibernationScheduled"/>
-  <int value="1"
-      label="HibernationAbortedDueToDestructionWhileHibernatePending"/>
-  <int value="2" label="HibernationAbortedDueToPendingDestruction"/>
-  <int value="3" label="HibernationAbortedDueToVisibilityChange"/>
-  <int value="4" label="HibernationAbortedDueGpuContextLoss"/>
-  <int value="5" label="HibernationAbortedDueToSwitchToUnacceleratedRendering"/>
-  <int value="6" label="HibernationAbortedDueToAllocationFailure"/>
-  <int value="7" label="HibernationEndedNormally"/>
-  <int value="8" label="HibernationEndedWithSwitchToBackgroundRendering"/>
-  <int value="9" label="HibernationEndedWithFallbackToSW"/>
-  <int value="10" label="HibernationEndedWithTeardown"/>
-  <int value="11" label="HibernationAbortedBecauseNoSurface"/>
-</enum>
-
-<enum name="CAPSUpdaterStep" type="int">
-  <obsolete>
-    Deprecated 08/2016 with removal of Chrome Crash Service component.
-  </obsolete>
-  <int value="0" label="CAPS component ready"/>
-  <int value="1" label="CAPS component missing"/>
-  <int value="2" label="CAPS Service failed to start"/>
-  <int value="3" label="CAPS Service started"/>
-</enum>
-
-<enum name="CaptivePortalBlockingPageEvent" type="int">
-  <int value="0" label="SHOW_ALL"/>
-  <int value="1" label="OPEN_LOGIN_PAGE"/>
-</enum>
-
-<enum name="CaptivePortalDetectResult" type="int">
-  <int value="0" label="INTERNET_CONNECTED"/>
-  <int value="1" label="NO_RESPONSE"/>
-  <int value="2" label="BEHIND_CAPTIVE_PORTAL"/>
-  <int value="3" label="NO_RESPONSE_HTTPS_LANDING_URL"/>
-  <int value="4" label="BEHIND_CAPTIVE_PORTAL_HTTPS_LANDING_URL"/>
-  <int value="5" label="NO_RESPONSE_IP_ADDRESS"/>
-  <int value="6" label="BEHIND_CAPTIVE_PORTAL_IP_ADDRESS"/>
-  <int value="7" label="NO_RESPONSE_HTTPS_LANDING_URL_IP_ADDRESS"/>
-  <int value="8" label="BEHIND_CAPTIVE_PORTAL_HTTPS_LANDING_URL_IP_ADDRESS"/>
-</enum>
-
-<enum name="CaptivePortalNotificationStatus" type="int">
-  <int value="0" label="DISPLAYED"/>
-  <int value="1" label="ERROR"/>
-</enum>
-
-<enum name="CaptivePortalNotificationUserAction" type="int">
-  <int value="0" label="CLICKED"/>
-  <int value="1" label="CLOSED"/>
-  <int value="2" label="IGNORED"/>
-</enum>
-
-<enum name="CaptivePortalStatus" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="OFFLINE"/>
-  <int value="2" label="ONLINE"/>
-  <int value="3" label="PORTAL"/>
-  <int value="4" label="PROXY_AUTH_REQUIRED"/>
-</enum>
-
-<enum name="CaptureApiMac" type="int">
-  <obsolete>
-    Deprecated as of 04/2016.
-  </obsolete>
-  <int value="0" label="QTKit used due to Mac OS X previous to 10.7.x Lion"/>
-  <int value="1" label="QTKit forced, on OS X supporting AVFoundation"/>
-  <int value="2" label="QTKit used due to no flag specified"/>
-  <int value="3" label="QTKit used: AVFoundation enabled but failed loading"/>
-  <int value="4" label="AVFoundation is enabled and is loaded succesfully"/>
-</enum>
-
-<enum name="CapturePixelFormat" type="int">
-  <obsolete>
-    Deprecated as of 08/2015.
-  </obsolete>
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="I420"/>
-  <int value="2" label="YUY2"/>
-  <int value="3" label="UYVY"/>
-  <int value="4" label="RGB24"/>
-  <int value="5" label="ARGB"/>
-  <int value="6" label="MJPEG"/>
-  <int value="7" label="NV21"/>
-  <int value="8" label="YV12"/>
-  <int value="9" label="TEXTURE"/>
-</enum>
-
-<enum name="CaptureStartupResult" type="int">
-  <obsolete>
-    Deprecated as of 02/2017.
-  </obsolete>
-  <int value="0" label="No data callback"/>
-  <int value="1" label="OK"/>
-  <int value="2" label="Failed to create high latency stream"/>
-  <int value="3" label="Failed to open high latency stream"/>
-  <int value="4" label="Never received any data"/>
-  <int value="5" label="No data received and capture stopped within 500ms"/>
-  <int value="6" label="Failed to create low latency stream"/>
-  <int value="7" label="Failed to open low latency stream"/>
-</enum>
-
-<enum name="CastCertificateStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="InvalidCrl"/>
-  <int value="2" label="CertVerificationFailed"/>
-  <int value="3" label="CertRevoked"/>
-</enum>
-
-<enum name="CastOverlayEvents" type="int">
-  <int value="0" label="Created"/>
-  <int value="1" label="Shown"/>
-  <int value="2" label="Clicked"/>
-</enum>
-
-<enum name="CastPlayBackState" type="int">
-  <int value="0" label="YT_PLAYER_SUCCESS"/>
-  <int value="1" label="YT_PLAYER_FAILURE"/>
-  <int value="2" label="DEFAULT_PLAYER_SUCCESS"/>
-  <int value="3" label="DEFAULT_PLAYER_FAILURE"/>
-</enum>
-
-<enum name="CatSixtyFour" type="int">
-  <int value="0" label="Saber-Toothed Cat (&lt;10.6), 32-bit (?)"/>
-  <int value="1" label="Saber-Toothed Cat (&lt;10.6), 64-bit (?)"/>
-  <int value="2" label="Snow Leopard (10.6), 32-bit"/>
-  <int value="3" label="Snow Leopard (10.6), 64-bit"/>
-  <int value="4" label="Lion (10.7), 32-bit (?)"/>
-  <int value="5" label="Lion (10.7), 64-bit"/>
-  <int value="6" label="Mountain Lion (10.8), 32-bit (?)"/>
-  <int value="7" label="Mountain Lion (10.8), 64-bit"/>
-  <int value="8" label="Mavericks (10.9), 32-bit (?)"/>
-  <int value="9" label="Mavericks (10.9), 64-bit"/>
-  <int value="10" label="Saber-Toothed Cat (&lt;10.6), 8-bit (?)"/>
-  <int value="11" label="Snow Leopard (10.6), 8-bit (?)"/>
-  <int value="12" label="Lion (10.7), 8-bit (?)"/>
-  <int value="13" label="Mountain Lion (10.8), 8-bit (?)"/>
-  <int value="14" label="Mavericks (10.9), 8-bit (?)"/>
-  <int value="15" label="Yosemite (10.10), 32-bit (?)"/>
-  <int value="16" label="Yosemite (10.10), 64-bit"/>
-  <int value="17" label="Yosemite (10.10), 8-bit (?)"/>
-  <int value="18" label="FutureCat (&gt;10.10), 32-bit (?)"/>
-  <int value="19" label="FutureCat (&gt;10.10), 64-bit"/>
-  <int value="20" label="FutureCat (&gt;10.10), 8-bit (?)"/>
-</enum>
-
-<enum name="CdmPromiseResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="NotSupportedError"/>
-  <int value="2" label="InvalidStateError"/>
-  <int value="3" label="InvalidAccessError"/>
-  <int value="4" label="QuotaExceededError"/>
-  <int value="5" label="UnknownError"/>
-  <int value="6" label="ClientError"/>
-  <int value="7" label="OutputError"/>
-</enum>
-
-<enum name="CertificateChainPosition" type="int">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <int value="0" label="Root Certificate"/>
-</enum>
-
-<enum name="CertificateTransparencyDnsQueryStatus" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="FAILED_UNKNOWN"/>
-  <int value="2" label="FAILED_NAME_RESOLUTION"/>
-  <int value="3" label="FAILED_LEAF_INDEX_MALFORMED"/>
-  <int value="4" label="FAILED_INCLUSION_PROOF_MALFORMED"/>
-</enum>
-
-<enum name="ChannelLayout" type="int">
-  <int value="0" label="CHANNEL_LAYOUT_NONE"/>
-  <int value="1" label="CHANNEL_LAYOUT_UNSUPPORTED"/>
-  <int value="2" label="CHANNEL_LAYOUT_MONO"/>
-  <int value="3" label="CHANNEL_LAYOUT_STEREO"/>
-  <int value="4" label="CHANNEL_LAYOUT_2_1"/>
-  <int value="5" label="CHANNEL_LAYOUT_SURROUND"/>
-  <int value="6" label="CHANNEL_LAYOUT_4POINT0"/>
-  <int value="7" label="CHANNEL_LAYOUT_2_2"/>
-  <int value="8" label="CHANNEL_LAYOUT_QUAD"/>
-  <int value="9" label="CHANNEL_LAYOUT_5POINT0"/>
-  <int value="10" label="CHANNEL_LAYOUT_5POINT1"/>
-  <int value="11" label="CHANNEL_LAYOUT_5POINT0_BACK"/>
-  <int value="12" label="CHANNEL_LAYOUT_5POINT1_BACK"/>
-  <int value="13" label="CHANNEL_LAYOUT_7POINT0"/>
-  <int value="14" label="CHANNEL_LAYOUT_7POINT1"/>
-  <int value="15" label="CHANNEL_LAYOUT_7POINT1_WIDE"/>
-  <int value="16" label="CHANNEL_LAYOUT_STEREO_DOWNMIX"/>
-  <int value="17" label="CHANNEL_LAYOUT_2POINT1"/>
-  <int value="18" label="CHANNEL_LAYOUT_3_1"/>
-  <int value="19" label="CHANNEL_LAYOUT_4_1"/>
-  <int value="20" label="CHANNEL_LAYOUT_6_0"/>
-  <int value="21" label="CHANNEL_LAYOUT_6_0_FRONT"/>
-  <int value="22" label="CHANNEL_LAYOUT_HEXAGONAL"/>
-  <int value="23" label="CHANNEL_LAYOUT_6_1"/>
-  <int value="24" label="CHANNEL_LAYOUT_6_1_BACK"/>
-  <int value="25" label="CHANNEL_LAYOUT_6_1_FRONT"/>
-  <int value="26" label="CHANNEL_LAYOUT_7_0_FRONT"/>
-  <int value="27" label="CHANNEL_LAYOUT_7_1_WIDE_BACK"/>
-  <int value="28" label="CHANNEL_LAYOUT_OCTAGONAL"/>
-  <int value="29" label="CHANNEL_LAYOUT_DISCRETE"/>
-</enum>
-
-<enum name="CheckCRCResult" type="int">
-  <int value="0" label="Stream was never read to end"/>
-  <int value="1" label="CRC check not done"/>
-  <int value="2" label="CRC check done"/>
-  <int value="3" label="Stream was never read at all"/>
-</enum>
-
-<enum name="ChromeChannelForHistogram" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="CANARY"/>
-  <int value="2" label="DEV"/>
-  <int value="3" label="BETA"/>
-  <int value="4" label="STABLE"/>
-</enum>
-
-<enum name="ChromeDownloadCountType" type="int">
-  <int value="0" label="Initiated by Navigation (Obsolete)"/>
-  <int value="1" label="Initiated by Context Menu (Obsolete)"/>
-  <int value="2" label="Initiated by WebStore Installer (Obsolete)"/>
-  <int value="3" label="Initiated by ImageBurner (Obsolete)"/>
-  <int value="4" label="Blocked by Throttling"/>
-</enum>
-
-<enum name="ChromeDownloadSource" type="int">
-  <int value="0" label="Initiated by Navigation"/>
-  <int value="1" label="Initiated by Context Menu"/>
-  <int value="2" label="Initiated by WebStore Installer"/>
-  <int value="3" label="Initiated by ImageBurner"/>
-  <int value="4" label="Initiated by Plugin Installer"/>
-</enum>
-
-<enum name="ChromeNotifierServiceActionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="First service enabled"/>
-  <int value="2" label="First service disabled"/>
-</enum>
-
-<enum name="ChromeOSColorProfile" type="int">
-  <summary>See ui/display/display_constants.h for the variation.</summary>
-  <int value="0" label="Standard"/>
-  <int value="1" label="Dynamic"/>
-  <int value="2" label="Movie"/>
-  <int value="3" label="Reading"/>
-</enum>
-
-<enum name="ChromeOSMachineIdReason" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Network"/>
-  <int value="2" label="Periodic"/>
-</enum>
-
-<enum name="ChromeOSPlatformVerificationExpiryStatus" type="int">
-  <summary>
-    Possible results of a platform verification expiry check. See
-    chrome/browser/chromeos/attestation/platform_verification.cc.
-  </summary>
-  <int value="0" label="Ok"/>
-  <int value="1" label="Expiring Soon"/>
-  <int value="2" label="Expired"/>
-  <int value="3" label="Invalid PEM Chain"/>
-  <int value="4" label="Invalid X.509"/>
-</enum>
-
-<enum name="ChromeOSPlatformVerificationResult" type="int">
-  <summary>
-    Possible results of a platform verification attempt. See
-    chrome/browser/chromeos/attestation/platform_verification.h.
-  </summary>
-  <int value="0" label="Success"/>
-  <int value="1" label="Internal Error"/>
-  <int value="2" label="Platform Not Verified"/>
-  <int value="3" label="Rejected by User"/>
-  <int value="4" label="Rejected by Policy"/>
-  <int value="5" label="Timeout"/>
-</enum>
-
-<enum name="ChromeOSUserImageId" type="int">
-  <summary>
-    Indices of the default images as defined in
-    chrome/browser/chromeos/login/default_user_images.cc. The last three values
-    are for taken photo, downloaded file and the image previously used by user.
-  </summary>
-  <int value="0" label="Default, Beaker"/>
-  <int value="1" label="Default, Bee"/>
-  <int value="2" label="Default, Briefcase"/>
-  <int value="3" label="Default, Circles"/>
-  <int value="4" label="Default, Cloud"/>
-  <int value="5" label="Default, Cupcake"/>
-  <int value="6" label="Default, Day"/>
-  <int value="7" label="Default, Flower"/>
-  <int value="8" label="Default, Globe"/>
-  <int value="9" label="Default, Hot air"/>
-  <int value="10" label="Default, Ladybug"/>
-  <int value="11" label="Default, Leaf"/>
-  <int value="12" label="Default, Night"/>
-  <int value="13" label="Default, Plane"/>
-  <int value="14" label="Default, Robot body"/>
-  <int value="15" label="Default, Robot head"/>
-  <int value="16" label="Default, Toolbox"/>
-  <int value="17" label="Default, User color"/>
-  <int value="18" label="Default, User enterprise"/>
-  <int value="19" label="Photo taken"/>
-  <int value="20" label="Downloaded file"/>
-  <int value="21" label="Old image"/>
-  <int value="22" label="Profile image"/>
-</enum>
-
-<enum name="ChromiumAndroidLinkerBrowserState" type="int">
-  <int value="0" label="Normal, Random Address Load"/>
-  <int value="1" label="Low memory, Fixed Address Load Success"/>
-  <int value="2" label="Low memory, Fixed Address Load Failure"/>
-</enum>
-
-<enum name="ChromiumAndroidLinkerRendererState" type="int">
-  <int value="0" label="Fixed Address Load Success"/>
-  <int value="1" label="Fixed Address Load Failure"/>
-  <int value="2" label="Fixed Address Load Not Attempted"/>
-</enum>
-
-<enum name="CLD2LanguageCode" type="int">
-  <summary>
-    See Language in third_party/cld_2/src/internal/generated_language.h.
-  </summary>
-  <int value="0" label="ENGLISH"/>
-  <int value="1" label="DANISH"/>
-  <int value="2" label="DUTCH"/>
-  <int value="3" label="FINNISH"/>
-  <int value="4" label="FRENCH"/>
-  <int value="5" label="GERMAN"/>
-  <int value="6" label="HEBREW"/>
-  <int value="7" label="ITALIAN"/>
-  <int value="8" label="JAPANESE"/>
-  <int value="9" label="KOREAN"/>
-  <int value="10" label="NORWEGIAN"/>
-  <int value="11" label="POLISH"/>
-  <int value="12" label="PORTUGUESE"/>
-  <int value="13" label="RUSSIAN"/>
-  <int value="14" label="SPANISH"/>
-  <int value="15" label="SWEDISH"/>
-  <int value="16" label="CHINESE"/>
-  <int value="17" label="CZECH"/>
-  <int value="18" label="GREEK"/>
-  <int value="19" label="ICELANDIC"/>
-  <int value="20" label="LATVIAN"/>
-  <int value="21" label="LITHUANIAN"/>
-  <int value="22" label="ROMANIAN"/>
-  <int value="23" label="HUNGARIAN"/>
-  <int value="24" label="ESTONIAN"/>
-  <int value="25" label="TG_UNKNOWN_LANGUAGE"/>
-  <int value="26" label="UNKNOWN_LANGUAGE"/>
-  <int value="27" label="BULGARIAN"/>
-  <int value="28" label="CROATIAN"/>
-  <int value="29" label="SERBIAN"/>
-  <int value="30" label="IRISH"/>
-  <int value="31" label="GALICIAN"/>
-  <int value="32" label="TAGALOG"/>
-  <int value="33" label="TURKISH"/>
-  <int value="34" label="UKRAINIAN"/>
-  <int value="35" label="HINDI"/>
-  <int value="36" label="MACEDONIAN"/>
-  <int value="37" label="BENGALI"/>
-  <int value="38" label="INDONESIAN"/>
-  <int value="39" label="LATIN"/>
-  <int value="40" label="MALAY"/>
-  <int value="41" label="MALAYALAM"/>
-  <int value="42" label="WELSH"/>
-  <int value="43" label="NEPALI"/>
-  <int value="44" label="TELUGU"/>
-  <int value="45" label="ALBANIAN"/>
-  <int value="46" label="TAMIL"/>
-  <int value="47" label="BELARUSIAN"/>
-  <int value="48" label="JAVANESE"/>
-  <int value="49" label="OCCITAN"/>
-  <int value="50" label="URDU"/>
-  <int value="51" label="BIHARI"/>
-  <int value="52" label="GUJARATI"/>
-  <int value="53" label="THAI"/>
-  <int value="54" label="ARABIC"/>
-  <int value="55" label="CATALAN"/>
-  <int value="56" label="ESPERANTO"/>
-  <int value="57" label="BASQUE"/>
-  <int value="58" label="INTERLINGUA"/>
-  <int value="59" label="KANNADA"/>
-  <int value="60" label="PUNJABI"/>
-  <int value="61" label="SCOTS_GAELIC"/>
-  <int value="62" label="SWAHILI"/>
-  <int value="63" label="SLOVENIAN"/>
-  <int value="64" label="MARATHI"/>
-  <int value="65" label="MALTESE"/>
-  <int value="66" label="VIETNAMESE"/>
-  <int value="67" label="FRISIAN"/>
-  <int value="68" label="SLOVAK"/>
-  <int value="69" label="CHINESE_T"/>
-  <int value="70" label="FAROESE"/>
-  <int value="71" label="SUNDANESE"/>
-  <int value="72" label="UZBEK"/>
-  <int value="73" label="AMHARIC"/>
-  <int value="74" label="AZERBAIJANI"/>
-  <int value="75" label="GEORGIAN"/>
-  <int value="76" label="TIGRINYA"/>
-  <int value="77" label="PERSIAN"/>
-  <int value="78" label="BOSNIAN"/>
-  <int value="79" label="SINHALESE"/>
-  <int value="80" label="NORWEGIAN_N"/>
-  <int value="81" label="X_81"/>
-  <int value="82" label="X_82"/>
-  <int value="83" label="XHOSA"/>
-  <int value="84" label="ZULU"/>
-  <int value="85" label="GUARANI"/>
-  <int value="86" label="SESOTHO"/>
-  <int value="87" label="TURKMEN"/>
-  <int value="88" label="KYRGYZ"/>
-  <int value="89" label="BRETON"/>
-  <int value="90" label="TWI"/>
-  <int value="91" label="YIDDISH"/>
-  <int value="92" label="X_92"/>
-  <int value="93" label="SOMALI"/>
-  <int value="94" label="UIGHUR"/>
-  <int value="95" label="KURDISH"/>
-  <int value="96" label="MONGOLIAN"/>
-  <int value="97" label="ARMENIAN"/>
-  <int value="98" label="LAOTHIAN"/>
-  <int value="99" label="SINDHI"/>
-  <int value="100" label="RHAETO_ROMANCE"/>
-  <int value="101" label="AFRIKAANS"/>
-  <int value="102" label="LUXEMBOURGISH"/>
-  <int value="103" label="BURMESE"/>
-  <int value="104" label="KHMER"/>
-  <int value="105" label="TIBETAN"/>
-  <int value="106" label="DHIVEHI"/>
-  <int value="107" label="CHEROKEE"/>
-  <int value="108" label="SYRIAC"/>
-  <int value="109" label="LIMBU"/>
-  <int value="110" label="ORIYA"/>
-  <int value="111" label="ASSAMESE"/>
-  <int value="112" label="CORSICAN"/>
-  <int value="113" label="INTERLINGUE"/>
-  <int value="114" label="KAZAKH"/>
-  <int value="115" label="LINGALA"/>
-  <int value="116" label="X_116"/>
-  <int value="117" label="PASHTO"/>
-  <int value="118" label="QUECHUA"/>
-  <int value="119" label="SHONA"/>
-  <int value="120" label="TAJIK"/>
-  <int value="121" label="TATAR"/>
-  <int value="122" label="TONGA"/>
-  <int value="123" label="YORUBA"/>
-  <int value="124" label="X_124"/>
-  <int value="125" label="X_125"/>
-  <int value="126" label="X_126"/>
-  <int value="127" label="X_127"/>
-  <int value="128" label="MAORI"/>
-  <int value="129" label="WOLOF"/>
-  <int value="130" label="ABKHAZIAN"/>
-  <int value="131" label="AFAR"/>
-  <int value="132" label="AYMARA"/>
-  <int value="133" label="BASHKIR"/>
-  <int value="134" label="BISLAMA"/>
-  <int value="135" label="DZONGKHA"/>
-  <int value="136" label="FIJIAN"/>
-  <int value="137" label="GREENLANDIC"/>
-  <int value="138" label="HAUSA"/>
-  <int value="139" label="HAITIAN_CREOLE"/>
-  <int value="140" label="INUPIAK"/>
-  <int value="141" label="INUKTITUT"/>
-  <int value="142" label="KASHMIRI"/>
-  <int value="143" label="KINYARWANDA"/>
-  <int value="144" label="MALAGASY"/>
-  <int value="145" label="NAURU"/>
-  <int value="146" label="OROMO"/>
-  <int value="147" label="RUNDI"/>
-  <int value="148" label="SAMOAN"/>
-  <int value="149" label="SANGO"/>
-  <int value="150" label="SANSKRIT"/>
-  <int value="151" label="SISWANT"/>
-  <int value="152" label="TSONGA"/>
-  <int value="153" label="TSWANA"/>
-  <int value="154" label="VOLAPUK"/>
-  <int value="155" label="ZHUANG"/>
-  <int value="156" label="KHASI"/>
-  <int value="157" label="SCOTS"/>
-  <int value="158" label="GANDA"/>
-  <int value="159" label="MANX"/>
-  <int value="160" label="MONTENEGRIN"/>
-  <int value="161" label="AKAN"/>
-  <int value="162" label="IGBO"/>
-  <int value="163" label="MAURITIAN_CREOLE"/>
-  <int value="164" label="HAWAIIAN"/>
-  <int value="165" label="CEBUANO"/>
-  <int value="166" label="EWE"/>
-  <int value="167" label="GA"/>
-  <int value="168" label="HMONG"/>
-  <int value="169" label="KRIO"/>
-  <int value="170" label="LOZI"/>
-  <int value="171" label="LUBA_LULUA"/>
-  <int value="172" label="LUO_KENYA_AND_TANZANIA"/>
-  <int value="173" label="NEWARI"/>
-  <int value="174" label="NYANJA"/>
-  <int value="175" label="OSSETIAN"/>
-  <int value="176" label="PAMPANGA"/>
-  <int value="177" label="PEDI"/>
-  <int value="178" label="RAJASTHANI"/>
-  <int value="179" label="SESELWA"/>
-  <int value="180" label="TUMBUKA"/>
-  <int value="181" label="VENDA"/>
-  <int value="182" label="WARAY_PHILIPPINES"/>
-  <int value="183" label="X_183"/>
-  <int value="184" label="X_184"/>
-  <int value="185" label="X_185"/>
-  <int value="186" label="X_186"/>
-  <int value="187" label="X_187"/>
-  <int value="188" label="X_188"/>
-  <int value="189" label="X_189"/>
-  <int value="190" label="X_190"/>
-  <int value="191" label="X_191"/>
-  <int value="192" label="X_192"/>
-  <int value="193" label="X_193"/>
-  <int value="194" label="X_194"/>
-  <int value="195" label="X_195"/>
-  <int value="196" label="X_196"/>
-  <int value="197" label="X_197"/>
-  <int value="198" label="X_198"/>
-  <int value="199" label="X_199"/>
-  <int value="200" label="X_200"/>
-  <int value="201" label="X_201"/>
-  <int value="202" label="X_202"/>
-  <int value="203" label="X_203"/>
-  <int value="204" label="X_204"/>
-  <int value="205" label="X_205"/>
-  <int value="206" label="X_206"/>
-  <int value="207" label="X_207"/>
-  <int value="208" label="X_208"/>
-  <int value="209" label="X_209"/>
-  <int value="210" label="X_210"/>
-  <int value="211" label="X_211"/>
-  <int value="212" label="X_212"/>
-  <int value="213" label="X_213"/>
-  <int value="214" label="X_214"/>
-  <int value="215" label="X_215"/>
-  <int value="216" label="X_216"/>
-  <int value="217" label="X_217"/>
-  <int value="218" label="X_218"/>
-  <int value="219" label="X_219"/>
-  <int value="220" label="X_220"/>
-  <int value="221" label="X_221"/>
-  <int value="222" label="X_222"/>
-  <int value="223" label="X_223"/>
-  <int value="224" label="X_224"/>
-  <int value="225" label="X_225"/>
-  <int value="226" label="X_226"/>
-  <int value="227" label="X_227"/>
-  <int value="228" label="X_228"/>
-  <int value="229" label="X_229"/>
-  <int value="230" label="X_230"/>
-  <int value="231" label="X_231"/>
-  <int value="232" label="X_232"/>
-  <int value="233" label="X_233"/>
-  <int value="234" label="X_234"/>
-  <int value="235" label="X_235"/>
-  <int value="236" label="X_236"/>
-  <int value="237" label="X_237"/>
-  <int value="238" label="X_238"/>
-  <int value="239" label="X_239"/>
-  <int value="240" label="X_240"/>
-  <int value="241" label="X_241"/>
-  <int value="242" label="X_242"/>
-  <int value="243" label="X_243"/>
-  <int value="244" label="X_244"/>
-  <int value="245" label="X_245"/>
-  <int value="246" label="X_246"/>
-  <int value="247" label="X_247"/>
-  <int value="248" label="X_248"/>
-  <int value="249" label="X_249"/>
-  <int value="250" label="X_250"/>
-  <int value="251" label="X_251"/>
-  <int value="252" label="X_252"/>
-  <int value="253" label="X_253"/>
-  <int value="254" label="X_254"/>
-  <int value="255" label="X_255"/>
-  <int value="256" label="X_256"/>
-  <int value="257" label="X_257"/>
-  <int value="258" label="X_258"/>
-  <int value="259" label="X_259"/>
-  <int value="260" label="X_260"/>
-  <int value="261" label="X_261"/>
-  <int value="262" label="X_262"/>
-  <int value="263" label="X_263"/>
-  <int value="264" label="X_264"/>
-  <int value="265" label="X_265"/>
-  <int value="266" label="X_266"/>
-  <int value="267" label="X_267"/>
-  <int value="268" label="X_268"/>
-  <int value="269" label="X_269"/>
-  <int value="270" label="X_270"/>
-  <int value="271" label="X_271"/>
-  <int value="272" label="X_272"/>
-  <int value="273" label="X_273"/>
-  <int value="274" label="X_274"/>
-  <int value="275" label="X_275"/>
-  <int value="276" label="X_276"/>
-  <int value="277" label="X_277"/>
-  <int value="278" label="X_278"/>
-  <int value="279" label="X_279"/>
-  <int value="280" label="X_280"/>
-  <int value="281" label="X_281"/>
-  <int value="282" label="X_282"/>
-  <int value="283" label="X_283"/>
-  <int value="284" label="X_284"/>
-  <int value="285" label="X_285"/>
-  <int value="286" label="X_286"/>
-  <int value="287" label="X_287"/>
-  <int value="288" label="X_288"/>
-  <int value="289" label="X_289"/>
-  <int value="290" label="X_290"/>
-  <int value="291" label="X_291"/>
-  <int value="292" label="X_292"/>
-  <int value="293" label="X_293"/>
-  <int value="294" label="X_294"/>
-  <int value="295" label="X_295"/>
-  <int value="296" label="X_296"/>
-  <int value="297" label="X_297"/>
-  <int value="298" label="X_298"/>
-  <int value="299" label="X_299"/>
-  <int value="300" label="X_300"/>
-  <int value="301" label="X_301"/>
-  <int value="302" label="X_302"/>
-  <int value="303" label="X_303"/>
-  <int value="304" label="X_304"/>
-  <int value="305" label="X_305"/>
-  <int value="306" label="X_306"/>
-  <int value="307" label="X_307"/>
-  <int value="308" label="X_308"/>
-  <int value="309" label="X_309"/>
-  <int value="310" label="X_310"/>
-  <int value="311" label="X_311"/>
-  <int value="312" label="X_312"/>
-  <int value="313" label="X_313"/>
-  <int value="314" label="X_314"/>
-  <int value="315" label="X_315"/>
-  <int value="316" label="X_316"/>
-  <int value="317" label="X_317"/>
-  <int value="318" label="X_318"/>
-  <int value="319" label="X_319"/>
-  <int value="320" label="X_320"/>
-  <int value="321" label="X_321"/>
-  <int value="322" label="X_322"/>
-  <int value="323" label="X_323"/>
-  <int value="324" label="X_324"/>
-  <int value="325" label="X_325"/>
-  <int value="326" label="X_326"/>
-  <int value="327" label="X_327"/>
-  <int value="328" label="X_328"/>
-  <int value="329" label="X_329"/>
-  <int value="330" label="X_330"/>
-  <int value="331" label="X_331"/>
-  <int value="332" label="X_332"/>
-  <int value="333" label="X_333"/>
-  <int value="334" label="X_334"/>
-  <int value="335" label="X_335"/>
-  <int value="336" label="X_336"/>
-  <int value="337" label="X_337"/>
-  <int value="338" label="X_338"/>
-  <int value="339" label="X_339"/>
-  <int value="340" label="X_340"/>
-  <int value="341" label="X_341"/>
-  <int value="342" label="X_342"/>
-  <int value="343" label="X_343"/>
-  <int value="344" label="X_344"/>
-  <int value="345" label="X_345"/>
-  <int value="346" label="X_346"/>
-  <int value="347" label="X_347"/>
-  <int value="348" label="X_348"/>
-  <int value="349" label="X_349"/>
-  <int value="350" label="X_350"/>
-  <int value="351" label="X_351"/>
-  <int value="352" label="X_352"/>
-  <int value="353" label="X_353"/>
-  <int value="354" label="X_354"/>
-  <int value="355" label="X_355"/>
-  <int value="356" label="X_356"/>
-  <int value="357" label="X_357"/>
-  <int value="358" label="X_358"/>
-  <int value="359" label="X_359"/>
-  <int value="360" label="X_360"/>
-  <int value="361" label="X_361"/>
-  <int value="362" label="X_362"/>
-  <int value="363" label="X_363"/>
-  <int value="364" label="X_364"/>
-  <int value="365" label="X_365"/>
-  <int value="366" label="X_366"/>
-  <int value="367" label="X_367"/>
-  <int value="368" label="X_368"/>
-  <int value="369" label="X_369"/>
-  <int value="370" label="X_370"/>
-  <int value="371" label="X_371"/>
-  <int value="372" label="X_372"/>
-  <int value="373" label="X_373"/>
-  <int value="374" label="X_374"/>
-  <int value="375" label="X_375"/>
-  <int value="376" label="X_376"/>
-  <int value="377" label="X_377"/>
-  <int value="378" label="X_378"/>
-  <int value="379" label="X_379"/>
-  <int value="380" label="X_380"/>
-  <int value="381" label="X_381"/>
-  <int value="382" label="X_382"/>
-  <int value="383" label="X_383"/>
-  <int value="384" label="X_384"/>
-  <int value="385" label="X_385"/>
-  <int value="386" label="X_386"/>
-  <int value="387" label="X_387"/>
-  <int value="388" label="X_388"/>
-  <int value="389" label="X_389"/>
-  <int value="390" label="X_390"/>
-  <int value="391" label="X_391"/>
-  <int value="392" label="X_392"/>
-  <int value="393" label="X_393"/>
-  <int value="394" label="X_394"/>
-  <int value="395" label="X_395"/>
-  <int value="396" label="X_396"/>
-  <int value="397" label="X_397"/>
-  <int value="398" label="X_398"/>
-  <int value="399" label="X_399"/>
-  <int value="400" label="X_400"/>
-  <int value="401" label="X_401"/>
-  <int value="402" label="X_402"/>
-  <int value="403" label="X_403"/>
-  <int value="404" label="X_404"/>
-  <int value="405" label="X_405"/>
-  <int value="406" label="X_406"/>
-  <int value="407" label="X_407"/>
-  <int value="408" label="X_408"/>
-  <int value="409" label="X_409"/>
-  <int value="410" label="X_410"/>
-  <int value="411" label="X_411"/>
-  <int value="412" label="X_412"/>
-  <int value="413" label="X_413"/>
-  <int value="414" label="X_414"/>
-  <int value="415" label="X_415"/>
-  <int value="416" label="X_416"/>
-  <int value="417" label="X_417"/>
-  <int value="418" label="X_418"/>
-  <int value="419" label="X_419"/>
-  <int value="420" label="X_420"/>
-  <int value="421" label="X_421"/>
-  <int value="422" label="X_422"/>
-  <int value="423" label="X_423"/>
-  <int value="424" label="X_424"/>
-  <int value="425" label="X_425"/>
-  <int value="426" label="X_426"/>
-  <int value="427" label="X_427"/>
-  <int value="428" label="X_428"/>
-  <int value="429" label="X_429"/>
-  <int value="430" label="X_430"/>
-  <int value="431" label="X_431"/>
-  <int value="432" label="X_432"/>
-  <int value="433" label="X_433"/>
-  <int value="434" label="X_434"/>
-  <int value="435" label="X_435"/>
-  <int value="436" label="X_436"/>
-  <int value="437" label="X_437"/>
-  <int value="438" label="X_438"/>
-  <int value="439" label="X_439"/>
-  <int value="440" label="X_440"/>
-  <int value="441" label="X_441"/>
-  <int value="442" label="X_442"/>
-  <int value="443" label="X_443"/>
-  <int value="444" label="X_444"/>
-  <int value="445" label="X_445"/>
-  <int value="446" label="X_446"/>
-  <int value="447" label="X_447"/>
-  <int value="448" label="X_448"/>
-  <int value="449" label="X_449"/>
-  <int value="450" label="X_450"/>
-  <int value="451" label="X_451"/>
-  <int value="452" label="X_452"/>
-  <int value="453" label="X_453"/>
-  <int value="454" label="X_454"/>
-  <int value="455" label="X_455"/>
-  <int value="456" label="X_456"/>
-  <int value="457" label="X_457"/>
-  <int value="458" label="X_458"/>
-  <int value="459" label="X_459"/>
-  <int value="460" label="X_460"/>
-  <int value="461" label="X_461"/>
-  <int value="462" label="X_462"/>
-  <int value="463" label="X_463"/>
-  <int value="464" label="X_464"/>
-  <int value="465" label="X_465"/>
-  <int value="466" label="X_466"/>
-  <int value="467" label="X_467"/>
-  <int value="468" label="X_468"/>
-  <int value="469" label="X_469"/>
-  <int value="470" label="X_470"/>
-  <int value="471" label="X_471"/>
-  <int value="472" label="X_472"/>
-  <int value="473" label="X_473"/>
-  <int value="474" label="X_474"/>
-  <int value="475" label="X_475"/>
-  <int value="476" label="X_476"/>
-  <int value="477" label="X_477"/>
-  <int value="478" label="X_478"/>
-  <int value="479" label="X_479"/>
-  <int value="480" label="X_480"/>
-  <int value="481" label="X_481"/>
-  <int value="482" label="X_482"/>
-  <int value="483" label="X_483"/>
-  <int value="484" label="X_484"/>
-  <int value="485" label="X_485"/>
-  <int value="486" label="X_486"/>
-  <int value="487" label="X_487"/>
-  <int value="488" label="X_488"/>
-  <int value="489" label="X_489"/>
-  <int value="490" label="X_490"/>
-  <int value="491" label="X_491"/>
-  <int value="492" label="X_492"/>
-  <int value="493" label="X_493"/>
-  <int value="494" label="X_494"/>
-  <int value="495" label="X_495"/>
-  <int value="496" label="X_496"/>
-  <int value="497" label="X_497"/>
-  <int value="498" label="X_498"/>
-  <int value="499" label="X_499"/>
-  <int value="500" label="X_500"/>
-  <int value="501" label="X_501"/>
-  <int value="502" label="X_502"/>
-  <int value="503" label="X_503"/>
-  <int value="504" label="X_504"/>
-  <int value="505" label="X_505"/>
-  <int value="506" label="NDEBELE"/>
-  <int value="507" label="X_BORK_BORK_BORK"/>
-  <int value="508" label="X_PIG_LATIN"/>
-  <int value="509" label="X_HACKER"/>
-  <int value="510" label="X_KLINGON"/>
-  <int value="511" label="X_ELMER_FUDD"/>
-  <int value="512" label="X_Common"/>
-  <int value="513" label="X_Latin"/>
-  <int value="514" label="X_Greek"/>
-  <int value="515" label="X_Cyrillic"/>
-  <int value="516" label="X_Armenian"/>
-  <int value="517" label="X_Hebrew"/>
-  <int value="518" label="X_Arabic"/>
-  <int value="519" label="X_Syriac"/>
-  <int value="520" label="X_Thaana"/>
-  <int value="521" label="X_Devanagari"/>
-  <int value="522" label="X_Bengali"/>
-  <int value="523" label="X_Gurmukhi"/>
-  <int value="524" label="X_Gujarati"/>
-  <int value="525" label="X_Oriya"/>
-  <int value="526" label="X_Tamil"/>
-  <int value="527" label="X_Telugu"/>
-  <int value="528" label="X_Kannada"/>
-  <int value="529" label="X_Malayalam"/>
-  <int value="530" label="X_Sinhala"/>
-  <int value="531" label="X_Thai"/>
-  <int value="532" label="X_Lao"/>
-  <int value="533" label="X_Tibetan"/>
-  <int value="534" label="X_Myanmar"/>
-  <int value="535" label="X_Georgian"/>
-  <int value="536" label="X_Hangul"/>
-  <int value="537" label="X_Ethiopic"/>
-  <int value="538" label="X_Cherokee"/>
-  <int value="539" label="X_Canadian_Aboriginal"/>
-  <int value="540" label="X_Ogham"/>
-  <int value="541" label="X_Runic"/>
-  <int value="542" label="X_Khmer"/>
-  <int value="543" label="X_Mongolian"/>
-  <int value="544" label="X_Hiragana"/>
-  <int value="545" label="X_Katakana"/>
-  <int value="546" label="X_Bopomofo"/>
-  <int value="547" label="X_Han"/>
-  <int value="548" label="X_Yi"/>
-  <int value="549" label="X_Old_Italic"/>
-  <int value="550" label="X_Gothic"/>
-  <int value="551" label="X_Deseret"/>
-  <int value="552" label="X_Inherited"/>
-  <int value="553" label="X_Tagalog"/>
-  <int value="554" label="X_Hanunoo"/>
-  <int value="555" label="X_Buhid"/>
-  <int value="556" label="X_Tagbanwa"/>
-  <int value="557" label="X_Limbu"/>
-  <int value="558" label="X_Tai_Le"/>
-  <int value="559" label="X_Linear_B"/>
-  <int value="560" label="X_Ugaritic"/>
-  <int value="561" label="X_Shavian"/>
-  <int value="562" label="X_Osmanya"/>
-  <int value="563" label="X_Cypriot"/>
-  <int value="564" label="X_Braille"/>
-  <int value="565" label="X_Buginese"/>
-  <int value="566" label="X_Coptic"/>
-  <int value="567" label="X_New_Tai_Lue"/>
-  <int value="568" label="X_Glagolitic"/>
-  <int value="569" label="X_Tifinagh"/>
-  <int value="570" label="X_Syloti_Nagri"/>
-  <int value="571" label="X_Old_Persian"/>
-  <int value="572" label="X_Kharoshthi"/>
-  <int value="573" label="X_Balinese"/>
-  <int value="574" label="X_Cuneiform"/>
-  <int value="575" label="X_Phoenician"/>
-  <int value="576" label="X_Phags_Pa"/>
-  <int value="577" label="X_Nko"/>
-  <int value="578" label="X_Sundanese"/>
-  <int value="579" label="X_Lepcha"/>
-  <int value="580" label="X_Ol_Chiki"/>
-  <int value="581" label="X_Vai"/>
-  <int value="582" label="X_Saurashtra"/>
-  <int value="583" label="X_Kayah_Li"/>
-  <int value="584" label="X_Rejang"/>
-  <int value="585" label="X_Lycian"/>
-  <int value="586" label="X_Carian"/>
-  <int value="587" label="X_Lydian"/>
-  <int value="588" label="X_Cham"/>
-  <int value="589" label="X_Tai_Tham"/>
-  <int value="590" label="X_Tai_Viet"/>
-  <int value="591" label="X_Avestan"/>
-  <int value="592" label="X_Egyptian_Hieroglyphs"/>
-  <int value="593" label="X_Samaritan"/>
-  <int value="594" label="X_Lisu"/>
-  <int value="595" label="X_Bamum"/>
-  <int value="596" label="X_Javanese"/>
-  <int value="597" label="X_Meetei_Mayek"/>
-  <int value="598" label="X_Imperial_Aramaic"/>
-  <int value="599" label="X_Old_South_Arabian"/>
-  <int value="600" label="X_Inscriptional_Parthian"/>
-  <int value="601" label="X_Inscriptional_Pahlavi"/>
-  <int value="602" label="X_Old_Turkic"/>
-  <int value="603" label="X_Kaithi"/>
-  <int value="604" label="X_Batak"/>
-  <int value="605" label="X_Brahmi"/>
-  <int value="606" label="X_Mandaic"/>
-  <int value="607" label="X_Chakma"/>
-  <int value="608" label="X_Meroitic_Cursive"/>
-  <int value="609" label="X_Meroitic_Hieroglyphs"/>
-  <int value="610" label="X_Miao"/>
-  <int value="611" label="X_Sharada"/>
-  <int value="612" label="X_Sora_Sompeng"/>
-  <int value="613" label="X_Takri"/>
-</enum>
-
-<enum name="CLD3LanguageCode" type="int">
-  <summary>
-    Hash values for the languages supported by CLD3. Each of these values is
-    computed by casting the output of base::HashMetricName(language_string_id)
-    to base::HistogramBase::Sample.
-  </summary>
-  <int value="-2132740958" label="gl"/>
-  <int value="-2112894028" label="haw"/>
-  <int value="-2092490813" label="fa"/>
-  <int value="-2084324285" label="iw"/>
-  <int value="-2070680532" label="hi"/>
-  <int value="-2070250592" label="zu"/>
-  <int value="-2042178987" label="si"/>
-  <int value="-2041104386" label="mi"/>
-  <int value="-2014954614" label="so"/>
-  <int value="-2005166181" label="ja-Latn"/>
-  <int value="-1999171202" label="lv"/>
-  <int value="-1994870905" label="lt"/>
-  <int value="-1855113037" label="vi"/>
-  <int value="-1828586117" label="de"/>
-  <int value="-1823968882" label="zh"/>
-  <int value="-1791051166" label="ha"/>
-  <int value="-1760672594" label="mr"/>
-  <int value="-1696927720" label="la"/>
-  <int value="-1690250140" label="ja"/>
-  <int value="-1566592213" label="hi-Latn"/>
-  <int value="-1532548885" label="pa"/>
-  <int value="-1515310228" label="ps"/>
-  <int value="-1284862637" label="ru"/>
-  <int value="-1273588087" label="kn"/>
-  <int value="-1211529228" label="gd"/>
-  <int value="-1117024738" label="zh-Latn"/>
-  <int value="-1100371650" label="sn"/>
-  <int value="-1048980531" label="ur"/>
-  <int value="-1042449480" label="cy"/>
-  <int value="-1033645590" label="fil"/>
-  <int value="-1025520269" label="az"/>
-  <int value="-1010619188" label="ru-Latn"/>
-  <int value="-1000295094" label="no"/>
-  <int value="-887258309" label="hu"/>
-  <int value="-862298602" label="st"/>
-  <int value="-851607677" label="sm"/>
-  <int value="-838275151" label="xh"/>
-  <int value="-750267977" label="bg"/>
-  <int value="-742603342" label="ca"/>
-  <int value="-740941224" label="ku"/>
-  <int value="-734032818" label="km"/>
-  <int value="-717751759" label="lb"/>
-  <int value="-659007214" label="el"/>
-  <int value="-647197922" label="ceb"/>
-  <int value="-645438410" label="my"/>
-  <int value="-644560085" label="su"/>
-  <int value="-598481752" label="et"/>
-  <int value="-442590807" label="sd"/>
-  <int value="-441493751" label="el-Latn"/>
-  <int value="-426630965" label="ga"/>
-  <int value="-415677801" label="it"/>
-  <int value="-403118581" label="sw"/>
-  <int value="-349113427" label="am"/>
-  <int value="-342591258" label="sq"/>
-  <int value="-226066958" label="bg-Latn"/>
-  <int value="-219674420" label="ta"/>
-  <int value="-181870943" label="bn"/>
-  <int value="-110306666" label="sr"/>
-  <int value="-78164291" label="kk"/>
-  <int value="-74147910" label="en"/>
-  <int value="-35182995" label="fi"/>
-  <int value="-5034744" label="ny"/>
-  <int value="42532257" label="id"/>
-  <int value="64053359" label="eu"/>
-  <int value="114573335" label="es"/>
-  <int value="121688617" label="eo"/>
-  <int value="124739394" label="lo"/>
-  <int value="132594104" label="be"/>
-  <int value="134866094" label="ka"/>
-  <int value="142313505" label="ro"/>
-  <int value="145030010" label="gu"/>
-  <int value="162326141" label="sl"/>
-  <int value="183952636" label="mg"/>
-  <int value="191168946" label="mk"/>
-  <int value="350748440" label="und"/>
-  <int value="357286655" label="af"/>
-  <int value="461111861" label="mt"/>
-  <int value="462869158" label="hy"/>
-  <int value="470982931" label="sv"/>
-  <int value="522435458" label="hr"/>
-  <int value="526531379" label="ml"/>
-  <int value="538270200" label="uk"/>
-  <int value="596295208" label="bs"/>
-  <int value="673577439" label="cs"/>
-  <int value="796588925" label="yo"/>
-  <int value="804120371" label="jv"/>
-  <int value="873647701" label="th"/>
-  <int value="910795716" label="ne"/>
-  <int value="925733725" label="ms"/>
-  <int value="1092864716" label="ht"/>
-  <int value="1110169461" label="hmn"/>
-  <int value="1119752109" label="te"/>
-  <int value="1140816756" label="ar"/>
-  <int value="1166708194" label="is"/>
-  <int value="1214473765" label="unknown"/>
-  <int value="1311313702" label="pt"/>
-  <int value="1312638242" label="pl"/>
-  <int value="1437205305" label="uz"/>
-  <int value="1482920614" label="yi"/>
-  <int value="1483760478" label="tg"/>
-  <int value="1552733612" label="da"/>
-  <int value="1638257274" label="sk"/>
-  <int value="1670494558" label="ko"/>
-  <int value="1704087523" label="ky"/>
-  <int value="1704315002" label="fr"/>
-  <int value="1717583602" label="co"/>
-  <int value="1754979806" label="fy"/>
-  <int value="1853848431" label="tr"/>
-  <int value="2039992295" label="ig"/>
-  <int value="2087142539" label="mn"/>
-  <int value="2119087611" label="nl"/>
-</enum>
-
-<enum name="ClearDataSiteBlacklistCrossedReason" type="int">
-  <int value="0" label="Durable"/>
-  <int value="1" label="Notifications"/>
-  <int value="2" label="Engagement"/>
-  <int value="3" label="Notifications and Engagement"/>
-  <int value="4" label="Durable and Engagement"/>
-  <int value="5" label="Notifications and Durable"/>
-  <int value="6" label="Notifications, Durable, and Engagement"/>
-  <int value="7" label="Unknown"/>
-</enum>
-
-<enum name="ClearServerDataEvents" type="int">
-  <int value="0" label="Clear server data started"/>
-  <int value="1" label="Catchup configuration failed"/>
-  <int value="2" label="Catchup configuration retried after browser restart"/>
-  <int value="3" label="Clear server data succeeded"/>
-  <int value="4" label="RESET_LOCAL_SYNC_DATA received"/>
-</enum>
-
-<enum name="ClearSiteDataParameters" type="int">
-  <int value="0" label="No datatypes"/>
-  <int value="1" label="Cookies"/>
-  <int value="2" label="Storage"/>
-  <int value="3" label="Cookies and Storage"/>
-  <int value="4" label="Cache"/>
-  <int value="5" label="Cookies and Cache"/>
-  <int value="6" label="Storage and Cache"/>
-  <int value="7" label="Cookies, Storage, and Cache"/>
-</enum>
-
-<enum name="ClientAppId" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Gmail"/>
-  <int value="2" label="Facebook"/>
-  <int value="3" label="Plus"/>
-  <int value="4" label="Twitter"/>
-  <int value="5" label="Chrome"/>
-  <int value="6" label="Hangouts"/>
-  <int value="7" label="Messenger"/>
-  <int value="8" label="News"/>
-  <int value="9" label="Line"/>
-  <int value="10" label="Whatsapp"/>
-  <int value="11" label="Gsa"/>
-</enum>
-
-<enum name="ClipboardAction" type="int">
-  <int value="0" label="Write from non-Incognito"/>
-  <int value="1" label="Write from Incognito"/>
-  <int value="2" label="Read Text"/>
-</enum>
-
-<enum name="ClockStates" type="int">
-  <int value="0"
-      label="CLOCK_STATE_UNKNOWN: accuracy of system clock is unknown"/>
-  <int value="1" label="CLOCK_STATE_OK: system clock is roughly accurate"/>
-  <int value="2" label="CLOCK_STATE_PAST: system clock is in the past"/>
-  <int value="3" label="CLOCK_STATE_FUTURE: system clock is in the future"/>
-</enum>
-
-<enum name="CloudImportUserAction" type="int">
-  <int value="0" label="IMPORT_INITIATED"/>
-</enum>
-
-<enum name="CloudPrintAuthEventType" type="int">
-  <int value="0" label="AUTH_EVENT_ROBO_CREATE"/>
-  <int value="1" label="AUTH_EVENT_ROBO_SUCCEEDED"/>
-  <int value="2" label="AUTH_EVENT_ROBO_FAILED"/>
-  <int value="3" label="AUTH_EVENT_ROBO_JSON_ERROR"/>
-  <int value="4" label="AUTH_EVENT_ROBO_AUTH_ERROR"/>
-  <int value="5" label="AUTH_EVENT_AUTH_WITH_TOKEN"/>
-  <int value="6" label="AUTH_EVENT_AUTH_WITH_CODE"/>
-  <int value="7" label="AUTH_EVENT_TOKEN_RESPONSE"/>
-  <int value="8" label="AUTH_EVENT_REFRESH_REQUEST"/>
-  <int value="9" label="AUTH_EVENT_REFRESH_RESPONSE"/>
-  <int value="10" label="AUTH_EVENT_AUTH_ERROR"/>
-  <int value="11" label="AUTH_EVENT_NET_ERROR"/>
-</enum>
-
-<enum name="CloudPrintJobHandlerEventType" type="int">
-  <int value="0" label="JOB_HANDLER_CHECK_FOR_JOBS"/>
-  <int value="1" label="JOB_HANDLER_START"/>
-  <int value="2" label="JOB_HANDLER_PENDING_TASK"/>
-  <int value="3" label="JOB_HANDLER_PRINTER_UPDATE"/>
-  <int value="4" label="JOB_HANDLER_JOB_CHECK"/>
-  <int value="5" label="JOB_HANDLER_JOB_STARTED"/>
-  <int value="6" label="JOB_HANDLER_VALID_TICKET"/>
-  <int value="7" label="JOB_HANDLER_DATA"/>
-  <int value="8" label="JOB_HANDLER_SET_IN_PROGRESS"/>
-  <int value="9" label="JOB_HANDLER_SET_START_PRINTING"/>
-  <int value="10" label="JOB_HANDLER_START_SPOOLING"/>
-  <int value="11" label="JOB_HANDLER_SPOOLED"/>
-  <int value="12" label="JOB_HANDLER_JOB_COMPLETED"/>
-  <int value="13" label="JOB_HANDLER_INVALID_TICKET"/>
-  <int value="14" label="JOB_HANDLER_INVALID_DATA"/>
-</enum>
-
-<enum name="CloudPrintJobStatusType" type="int">
-  <int value="0" label="JOB_SUCCESS"/>
-  <int value="1" label="JOB_DOWNLOAD_FAILED"/>
-  <int value="2" label="JOB_VALIDATE_TICKET_FAILED"/>
-  <int value="3" label="JOB_FAILED"/>
-</enum>
-
-<enum name="CloudPrintNativeJobStatusType" type="int">
-  <int value="0" label="PRINT_JOB_STATUS_INVALID"/>
-  <int value="1" label="PRINT_JOB_STATUS_IN_PROGRESS"/>
-  <int value="2" label="PRINT_JOB_STATUS_ERROR"/>
-  <int value="3" label="PRINT_JOB_STATUS_COMPLETED"/>
-</enum>
-
-<enum name="CloudPrintUrlFetcherRequestType" type="int">
-  <int value="0" label="REQUEST_AUTH_CODE"/>
-  <int value="1" label="REQUEST_REGISTER"/>
-  <int value="2" label="REQUEST_UNREGISTER"/>
-  <int value="3" label="REQUEST_UPDATE_PRINTER"/>
-  <int value="4" label="REQUEST_UPDATE_JOB"/>
-  <int value="5" label="REQUEST_USER_MESSAGE"/>
-  <int value="6" label="REQUEST_TICKET"/>
-  <int value="7" label="REQUEST_DATA"/>
-  <int value="8" label="REQUEST_JOB_FETCH"/>
-</enum>
-
-<enum name="CoalescePotentialPackets" type="int">
-  <int value="0" label="No Advantage"/>
-  <int value="1" label="Header packets Only"/>
-  <int value="30" label="More Than 30"/>
-</enum>
-
-<enum name="ColorSpaceExtractedRawDataResult" type="int">
-  <int value="0" label="Failed to extract."/>
-  <int value="1" label="Successfully extracted."/>
-</enum>
-
-<enum name="ColorSpaceMatrixResult" type="int">
-  <int value="0" label="Failed to extract toXYZD50 matrix."/>
-  <int value="1" label="Successfully extracted toXYZD50 matrix."/>
-</enum>
-
-<enum name="ColorSpaceNonlinearFitConverged" type="int">
-  <int value="0" label="Did not converge."/>
-  <int value="1" label="Converged."/>
-</enum>
-
-<enum name="ColorSpaceNumericalResult" type="int">
-  <int value="0" label="Failed to extract."/>
-  <int value="1" label="Successfully extracted."/>
-</enum>
-
-<enum name="CombinedHttpResponseAndNetErrorCode" type="int">
-<!-- Generated from net/base/net_error_list.h -->
-
-  <int value="-806" label="DNS_SORT_ERROR"/>
-  <int value="-805" label="DNS_SEARCH_EMPTY"/>
-  <int value="-804" label="DNS_CACHE_MISS"/>
-  <int value="-803" label="DNS_TIMED_OUT"/>
-  <int value="-802" label="DNS_SERVER_FAILED"/>
-  <int value="-801" label="DNS_SERVER_REQUIRES_TCP"/>
-  <int value="-800" label="DNS_MALFORMED_RESPONSE"/>
-  <int value="-715" label="CHANNEL_ID_IMPORT_FAILED"/>
-  <int value="-714" label="CERT_DATABASE_CHANGED"/>
-  <int value="-713" label="SELF_SIGNED_CERT_GENERATION_FAILED"/>
-  <int value="-712" label="PRIVATE_KEY_EXPORT_FAILED"/>
-  <int value="-711" label="ORIGIN_BOUND_CERT_GENERATION_FAILED"/>
-  <int value="-710" label="KEY_GENERATION_FAILED"/>
-  <int value="-709" label="PKCS12_IMPORT_UNSUPPORTED"/>
-  <int value="-708" label="PKCS12_IMPORT_INVALID_FILE"/>
-  <int value="-707" label="PKCS12_IMPORT_INVALID_MAC"/>
-  <int value="-706" label="IMPORT_SERVER_CERT_FAILED"/>
-  <int value="-705" label="IMPORT_CA_CERT_FAILED"/>
-  <int value="-704" label="IMPORT_CERT_ALREADY_EXISTS"/>
-  <int value="-703" label="IMPORT_CA_CERT_NOT_CA"/>
-  <int value="-702" label="PKCS12_IMPORT_FAILED"/>
-  <int value="-701" label="PKCS12_IMPORT_BAD_PASSWORD"/>
-  <int value="-607" label="FTP_BAD_COMMAND_SEQUENCE"/>
-  <int value="-606" label="FTP_COMMAND_NOT_SUPPORTED"/>
-  <int value="-605" label="FTP_SYNTAX_ERROR"/>
-  <int value="-604" label="FTP_FILE_BUSY"/>
-  <int value="-603" label="FTP_TRANSFER_ABORTED"/>
-  <int value="-602" label="FTP_SERVICE_UNAVAILABLE"/>
-  <int value="-601" label="FTP_FAILED"/>
-  <int value="-503" label="ADD_USER_CERT_FAILED"/>
-  <int value="-502" label="NO_PRIVATE_KEY_FOR_CERT"/>
-  <int value="-501" label="INSECURE_RESPONSE"/>
-  <int value="-410" label="CACHE_AUTH_FAILURE_AFTER_READ"/>
-  <int value="-409" label="CACHE_LOCK_TIMEOUT"/>
-  <int value="-408" label="CACHE_CHECKSUM_MISMATCH"/>
-  <int value="-407" label="CACHE_CHECKSUM_READ_FAILURE"/>
-  <int value="-406" label="CACHE_RACE"/>
-  <int value="-405" label="CACHE_CREATE_FAILURE"/>
-  <int value="-404" label="CACHE_OPEN_FAILURE"/>
-  <int value="-403" label="CACHE_OPERATION_NOT_SUPPORTED"/>
-  <int value="-402" label="CACHE_WRITE_FAILURE"/>
-  <int value="-401" label="CACHE_READ_FAILURE"/>
-  <int value="-400" label="CACHE_MISS"/>
-  <int value="-372" label="SPDY_RST_STREAM_NO_ERROR_RECEIVED"/>
-  <int value="-371" label="CONTENT_DECODING_INIT_FAILED"/>
-  <int value="-370" label="INVALID_HTTP_RESPONSE"/>
-  <int value="-369" label="TEMPORARY_BACKOFF"/>
-  <int value="-368" label="ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN"/>
-  <int value="-367" label="PAC_SCRIPT_TERMINATED"/>
-  <int value="-366" label="PROXY_HTTP_1_1_REQUIRED"/>
-  <int value="-365" label="HTTP_1_1_REQUIRED"/>
-  <int value="-364" label="PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION"/>
-  <int value="-363" label="SPDY_COMPRESSION_ERROR"/>
-  <int value="-362" label="SPDY_FRAME_SIZE_ERROR"/>
-  <int value="-361" label="SPDY_FLOW_CONTROL_ERROR"/>
-  <int value="-360" label="SPDY_INADEQUATE_TRANSPORT_SECURITY"/>
-  <int value="-359" label="REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC"/>
-  <int value="-358" label="QUIC_HANDSHAKE_FAILED"/>
-  <int value="-357" label="RESPONSE_HEADERS_TRUNCATED"/>
-  <int value="-356" label="QUIC_PROTOCOL_ERROR"/>
-  <int value="-355" label="INCOMPLETE_CHUNKED_ENCODING"/>
-  <int value="-354" label="CONTENT_LENGTH_MISMATCH"/>
-  <int value="-352" label="SPDY_PING_FAILED"/>
-  <int value="-351" label="SPDY_SERVER_REFUSED_STREAM"/>
-  <int value="-350" label="RESPONSE_HEADERS_MULTIPLE_LOCATION"/>
-  <int value="-349" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION"/>
-  <int value="-348" label="PAC_NOT_IN_DHCP"/>
-  <int value="-347" label="INCOMPLETE_SPDY_HEADERS"/>
-  <int value="-346" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH"/>
-  <int value="-345" label="RESPONSE_BODY_TOO_BIG_TO_DRAIN"/>
-  <int value="-344" label="UNDOCUMENTED_SECURITY_LIBRARY_STATUS"/>
-  <int value="-343" label="MISCONFIGURED_AUTH_ENVIRONMENT"/>
-  <int value="-342" label="UNEXPECTED_SECURITY_LIBRARY_STATUS"/>
-  <int value="-341" label="MISSING_AUTH_CREDENTIALS"/>
-  <int value="-340" label="ENCODING_DETECTION_FAILED"/>
-  <int value="-339" label="UNSUPPORTED_AUTH_SCHEME"/>
-  <int value="-338" label="INVALID_AUTH_CREDENTIALS"/>
-  <int value="-337" label="SPDY_PROTOCOL_ERROR"/>
-  <int value="-336" label="NO_SUPPORTED_PROXIES"/>
-  <int value="-335" label="INVALID_SPDY_STREAM"/>
-  <int value="-334" label="UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT"/>
-  <int value="-333" label="ENCODING_CONVERSION_FAILED"/>
-  <int value="-332" label="SYN_REPLY_NOT_RECEIVED"/>
-  <int value="-331" label="NETWORK_IO_SUSPENDED"/>
-  <int value="-330" label="CONTENT_DECODING_FAILED"/>
-  <int value="-329" label="MALFORMED_IDENTITY"/>
-  <int value="-328" label="REQUEST_RANGE_NOT_SATISFIABLE"/>
-  <int value="-327" label="PAC_SCRIPT_FAILED"/>
-  <int value="-326" label="PAC_STATUS_NOT_OK"/>
-  <int value="-325" label="RESPONSE_HEADERS_TOO_BIG"/>
-  <int value="-324" label="EMPTY_RESPONSE"/>
-  <int value="-323" label="UNEXPECTED_PROXY_AUTH"/>
-  <int value="-322" label="METHOD_NOT_SUPPORTED"/>
-  <int value="-321" label="INVALID_CHUNKED_ENCODING"/>
-  <int value="-320" label="INVALID_RESPONSE"/>
-  <int value="-312" label="UNSAFE_PORT"/>
-  <int value="-311" label="UNSAFE_REDIRECT"/>
-  <int value="-310" label="TOO_MANY_REDIRECTS"/>
-  <int value="-302" label="UNKNOWN_URL_SCHEME"/>
-  <int value="-301" label="DISALLOWED_URL_SCHEME"/>
-  <int value="-300" label="INVALID_URL"/>
-  <int value="-215" label="CERT_END"/>
-  <int value="-214" label="CERTIFICATE_TRANSPARENCY_REQUIRED"/>
-  <int value="-213" label="CERT_VALIDITY_TOO_LONG"/>
-  <int value="-212" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
-  <int value="-211" label="CERT_WEAK_KEY"/>
-  <int value="-210" label="CERT_NON_UNIQUE_NAME"/>
-  <int value="-208" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
-  <int value="-207" label="CERT_INVALID"/>
-  <int value="-206" label="CERT_REVOKED"/>
-  <int value="-205" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
-  <int value="-204" label="CERT_NO_REVOCATION_MECHANISM"/>
-  <int value="-203" label="CERT_CONTAINS_ERRORS"/>
-  <int value="-202" label="CERT_AUTHORITY_INVALID"/>
-  <int value="-201" label="CERT_DATE_INVALID"/>
-  <int value="-200" label="CERT_COMMON_NAME_INVALID"/>
-  <int value="-173" label="WS_UPGRADE"/>
-  <int value="-172" label="SSL_OBSOLETE_CIPHER"/>
-  <int value="-171" label="CT_CONSISTENCY_PROOF_PARSING_FAILED"/>
-  <int value="-170" label="UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH"/>
-  <int value="-169" label="CT_STH_INCOMPLETE"/>
-  <int value="-168" label="CT_STH_PARSING_FAILED"/>
-  <int value="-167" label="SSL_SERVER_CERT_BAD_FORMAT"/>
-  <int value="-166" label="ICANN_NAME_COLLISION"/>
-  <int value="-165" label="SSL_FALLBACK_BEYOND_MINIMUM_VERSION"/>
-  <int value="-164" label="SSL_CLIENT_AUTH_CERT_BAD_FORMAT"/>
-  <int value="-163" label="SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE"/>
-  <int value="-162" label="SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE"/>
-  <int value="-161" label="SOCKET_SET_SEND_BUFFER_SIZE_ERROR"/>
-  <int value="-160" label="SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR"/>
-  <int value="-159" label="SSL_UNRECOGNIZED_NAME_ALERT"/>
-  <int value="-158" label="CT_NO_SCTS_VERIFIED_OK"/>
-  <int value="-157" label="SSL_INAPPROPRIATE_FALLBACK"/>
-  <int value="-156" label="SSL_SERVER_CERT_CHANGED"/>
-  <int value="-154" label="WS_THROTTLE_QUEUE_TOO_LARGE"/>
-  <int value="-153" label="SSL_DECRYPT_ERROR_ALERT"/>
-  <int value="-152" label="ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH"/>
-  <int value="-151" label="CLIENT_AUTH_CERT_TYPE_UNSUPPORTED"/>
-  <int value="-150" label="SSL_PINNED_KEY_NOT_IN_CERT_CHAIN"/>
-  <int value="-149" label="SSL_BAD_PEER_PUBLIC_KEY"/>
-  <int value="-148" label="SSL_HANDSHAKE_NOT_COMPLETED"/>
-  <int value="-147" label="ADDRESS_IN_USE"/>
-  <int value="-145" label="WS_PROTOCOL_ERROR"/>
-  <int value="-143" label="SPDY_SESSION_ALREADY_EXISTS"/>
-  <int value="-142" label="MSG_TOO_BIG"/>
-  <int value="-141" label="SSL_CLIENT_AUTH_SIGNATURE_FAILED"/>
-  <int value="-140" label="HTTPS_PROXY_TUNNEL_RESPONSE"/>
-  <int value="-139" label="TEMPORARILY_THROTTLED"/>
-  <int value="-138" label="NETWORK_ACCESS_DENIED"/>
-  <int value="-137" label="NAME_RESOLUTION_FAILED"/>
-  <int value="-136" label="PROXY_CERTIFICATE_INVALID"/>
-  <int value="-135" label="SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY"/>
-  <int value="-134" label="SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED"/>
-  <int value="-133" label="PRECONNECT_MAX_SOCKET_LIMIT"/>
-  <int value="-131" label="MANDATORY_PROXY_CONFIGURATION_FAILED"/>
-  <int value="-130" label="PROXY_CONNECTION_FAILED"/>
-  <int value="-129" label="SSL_WEAK_SERVER_EPHEMERAL_DH_KEY"/>
-  <int value="-128" label="SSL_UNSAFE_NEGOTIATION"/>
-  <int value="-127" label="PROXY_AUTH_REQUESTED"/>
-  <int value="-126" label="SSL_BAD_RECORD_MAC_ALERT"/>
-  <int value="-125" label="SSL_DECOMPRESSION_FAILURE_ALERT"/>
-  <int value="-124" label="WINSOCK_UNEXPECTED_WRITTEN_BYTES"/>
-  <int value="-123" label="SSL_NO_RENEGOTIATION"/>
-  <int value="-122" label="ALPN_NEGOTIATION_FAILED"/>
-  <int value="-121" label="SOCKS_CONNECTION_HOST_UNREACHABLE"/>
-  <int value="-120" label="SOCKS_CONNECTION_FAILED"/>
-  <int value="-119" label="HOST_RESOLVER_QUEUE_TOO_LARGE"/>
-  <int value="-118" label="CONNECTION_TIMED_OUT"/>
-  <int value="-117" label="BAD_SSL_CLIENT_AUTH_CERT"/>
-  <int value="-116" label="CERT_ERROR_IN_SSL_RENEGOTIATION"/>
-  <int value="-115" label="PROXY_AUTH_UNSUPPORTED"/>
-  <int value="-114" label="SSL_RENEGOTIATION_REQUESTED"/>
-  <int value="-113" label="SSL_VERSION_OR_CIPHER_MISMATCH"/>
-  <int value="-112" label="NO_SSL_VERSIONS_ENABLED"/>
-  <int value="-111" label="TUNNEL_CONNECTION_FAILED"/>
-  <int value="-110" label="SSL_CLIENT_AUTH_CERT_NEEDED"/>
-  <int value="-109" label="ADDRESS_UNREACHABLE"/>
-  <int value="-108" label="ADDRESS_INVALID"/>
-  <int value="-107" label="SSL_PROTOCOL_ERROR"/>
-  <int value="-106" label="INTERNET_DISCONNECTED"/>
-  <int value="-105" label="NAME_NOT_RESOLVED"/>
-  <int value="-104" label="CONNECTION_FAILED"/>
-  <int value="-103" label="CONNECTION_ABORTED"/>
-  <int value="-102" label="CONNECTION_REFUSED"/>
-  <int value="-101" label="CONNECTION_RESET"/>
-  <int value="-100" label="CONNECTION_CLOSED"/>
-  <int value="-29" label="CLEARTEXT_NOT_PERMITTED"/>
-  <int value="-28" label="BLOCKED_BY_XSS_AUDITOR"/>
-  <int value="-27" label="BLOCKED_BY_RESPONSE"/>
-  <int value="-26" label="CONTEXT_SHUT_DOWN"/>
-  <int value="-25" label="UPLOAD_STREAM_REWIND_NOT_SUPPORTED"/>
-  <int value="-24" label="BLOCKED_ENROLLMENT_CHECK_PENDING"/>
-  <int value="-23" label="SOCKET_IS_CONNECTED"/>
-  <int value="-22" label="BLOCKED_BY_ADMINISTRATOR"/>
-  <int value="-21" label="NETWORK_CHANGED"/>
-  <int value="-20" label="BLOCKED_BY_CLIENT"/>
-  <int value="-19" label="FILE_VIRUS_INFECTED"/>
-  <int value="-18" label="FILE_NO_SPACE"/>
-  <int value="-17" label="FILE_PATH_TOO_LONG"/>
-  <int value="-16" label="FILE_EXISTS"/>
-  <int value="-15" label="SOCKET_NOT_CONNECTED"/>
-  <int value="-14" label="UPLOAD_FILE_CHANGED"/>
-  <int value="-13" label="OUT_OF_MEMORY"/>
-  <int value="-12" label="INSUFFICIENT_RESOURCES"/>
-  <int value="-11" label="NOT_IMPLEMENTED"/>
-  <int value="-10" label="ACCESS_DENIED"/>
-  <int value="-9" label="UNEXPECTED"/>
-  <int value="-8" label="FILE_TOO_BIG"/>
-  <int value="-7" label="TIMED_OUT"/>
-  <int value="-6" label="FILE_NOT_FOUND"/>
-  <int value="-5" label="INVALID_HANDLE"/>
-  <int value="-4" label="INVALID_ARGUMENT"/>
-  <int value="-3" label="ABORTED"/>
-  <int value="-2" label="FAILED"/>
-  <int value="-1" label="IO_PENDING"/>
-  <int value="100" label="100: Continue"/>
-  <int value="101" label="101: Switching Protocols"/>
-  <int value="200" label="200: OK"/>
-  <int value="201" label="201: Created"/>
-  <int value="202" label="202: Accepted"/>
-  <int value="203" label="203: Non-Authoritative Information"/>
-  <int value="204" label="204: No Content"/>
-  <int value="205" label="205: Reset Content"/>
-  <int value="206" label="206: Partial Content"/>
-  <int value="300" label="300: Multiple Choices"/>
-  <int value="301" label="301: Moved Permanently"/>
-  <int value="302" label="302: Found"/>
-  <int value="303" label="303: See Other"/>
-  <int value="304" label="304: Not Modified"/>
-  <int value="305" label="305: Use Proxy"/>
-  <int value="306" label="306: (Unused)"/>
-  <int value="307" label="307: Temporary Redirect"/>
-  <int value="400" label="400: Bad Request"/>
-  <int value="401" label="401: Unauthorized"/>
-  <int value="402" label="402: Payment Required"/>
-  <int value="403" label="403: Forbidden"/>
-  <int value="404" label="404: Not Found"/>
-  <int value="405" label="405: Method Not Allowed"/>
-  <int value="406" label="406: Not Acceptable"/>
-  <int value="407" label="407: Proxy Authentication Required"/>
-  <int value="408" label="408: Request Timeout"/>
-  <int value="409" label="409: Conflict"/>
-  <int value="410" label="410: Gone"/>
-  <int value="411" label="411: Length Required"/>
-  <int value="412" label="412: Precondition Failed"/>
-  <int value="413" label="413: Request Entity Too Large"/>
-  <int value="414" label="414: Request-URI Too Long"/>
-  <int value="415" label="415: Unsupported Media Type"/>
-  <int value="416" label="416: Requested Range Not Satisfiable"/>
-  <int value="417" label="417: Expectation Failed"/>
-  <int value="500" label="500: Internal Server Error"/>
-  <int value="501" label="501: Not Implemented"/>
-  <int value="502" label="502: Bad Gateway"/>
-  <int value="503" label="503: Service Unavailable"/>
-  <int value="504" label="504: Gateway Timeout"/>
-  <int value="505" label="505: HTTP Version Not Supported"/>
-</enum>
-
-<enum name="CommittedLoadEvent" type="int">
-  <obsolete>
-    Deprecated in favor of PageLoad.Timing2.NavigationToCommit and
-    PageLoad.AbortTiming.
-  </obsolete>
-  <int value="0" label="Committed load started"/>
-  <int value="1" label="Committed load failed before first layout"/>
-  <int value="2" label="Successful first layout"/>
-</enum>
-
-<enum name="ComponentUpdaterCalls" type="int">
-  <int value="0" label="Install"/>
-  <int value="1" label="Update"/>
-</enum>
-
-<enum name="CompositedScrolling" type="int">
-  <int value="0" label="Is scrollable area"/>
-  <int value="1" label="Needs to be stacking container"/>
-  <int value="2" label="Will use composited scrolling"/>
-</enum>
-
-<enum name="CompositorScrollResult" type="int">
-  <int value="0" label="ScrollOnMainThread"/>
-  <int value="1" label="ScrollStarted"/>
-  <int value="2" label="ScrollIgnored"/>
-  <int value="3" label="ScrollUnknown"/>
-</enum>
-
-<enum name="CompositorType" type="int">
-  <int value="0" label="Software compositor"/>
-  <int value="1" label="GPU compositor"/>
-</enum>
-
-<enum name="CompressibleStringCountType" type="int">
-  <obsolete>
-    Dprecated as of Aug 2016. CompressibleString has been reverted once at
-    https://crrev.com/2227933002.
-  </obsolete>
-  <int value="0" label="Compressed in a background tab"/>
-  <int value="1" label="Decompressed in a background or a foreground tab"/>
-</enum>
-
-<enum name="ComputeCurrentSigninStatus" type="int">
-  <obsolete>
-    Deprecated as of Jun 2016. The enum was added for debugging purpose and is
-    not needed anymore.
-  </obsolete>
-  <int value="0" label="Tried to compute current signin status."/>
-  <int value="1" label="Error: No profiles found."/>
-  <int value="2" label="No opened browser found."/>
-  <int value="3" label="User signed in when the signin status is unknown."/>
-  <int value="4" label="User signed out when the signin status is unknown."/>
-  <int value="5" label="Try to override the status when its valus is error."/>
-</enum>
-
-<enum name="ConnectionDiagnosticsIssue" type="int">
-  <int value="0" label="IP collision detected."/>
-  <int value="1" label="Routing problem detected."/>
-  <int value="2" label="HTTP issues or broken portal."/>
-  <int value="3"
-      label="DNS servers sending invalid responses -- might be misconfigured."/>
-  <int value="4" label="DNS servers pingable but not responding to requests."/>
-  <int value="5" label="No DNS servers configured for this connection."/>
-  <int value="6" label="All configured DNS server addresses are invalid."/>
-  <int value="7" label="No connection issue detected."/>
-  <int value="8" label="Trapped in captive portal."/>
-  <int value="9" label="Gateway issue or upstream connectivity problem."/>
-  <int value="10"
-      label="Gateway appears to be on network, but is not pingable."/>
-  <int value="11"
-      label="Web server appears to be on network, but is not pingable."/>
-  <int value="12" label="No ARP entry for the gateway."/>
-  <int value="13" label="No ARP entry for the webserver."/>
-  <int value="14" label="Internal failure in connection diagnostics."/>
-  <int value="15" label="No neighbor table entry for the gateway."/>
-  <int value="16" label="No neighbor table entry for the web server."/>
-  <int value="17"
-      label="Neighbor table entry for the gateway not in a connected state."/>
-  <int value="18"
-      label="Neighbor table entry for the web server not in a connected
-             state."/>
-  <int value="19" label="Placeholder 1."/>
-  <int value="20" label="Placeholder 2."/>
-  <int value="21" label="Placeholder 3."/>
-  <int value="22" label="Placeholder 4."/>
-</enum>
-
-<enum name="ConnectionFailureReason" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Bad Passphrase"/>
-  <int value="2" label="Bad WEP Key"/>
-  <int value="3" label="Failed to Connect"/>
-  <int value="4" label="DHCP Failure"/>
-  <int value="5" label="DNS Lookup Failure"/>
-  <int value="6" label="EAP Authentication"/>
-  <int value="7" label="EAP Local TLS"/>
-  <int value="8" label="EAP Remote TLS"/>
-  <int value="9" label="Out-of-range"/>
-  <int value="10" label="Pin Missing"/>
-</enum>
-
-<enum name="ConnectionInfo" type="int">
-  <summary>
-    Application protocol used for HTTP response as defined in
-    net::HttpResponseInfo::ConnectionInfo.
-  </summary>
-  <int value="0" label="unknown"/>
-  <int value="1" label="HTTP/1.1"/>
-  <int value="2" label="SPDY/2 (deprecated)"/>
-  <int value="3" label="SPDY/3"/>
-  <int value="4" label="HTTP/2"/>
-  <int value="5" label="QUIC (unknown version)"/>
-  <int value="6" label="HTTP/2 draft-14"/>
-  <int value="7" label="HTTP/2 draft-15"/>
-  <int value="8" label="HTTP/0.9"/>
-  <int value="9" label="HTTP/1.0"/>
-  <int value="10" label="QUIC/32"/>
-  <int value="11" label="QUIC/33"/>
-  <int value="12" label="QUIC/34"/>
-  <int value="13" label="QUIC/35"/>
-  <int value="14" label="QUIC/36"/>
-  <int value="15" label="QUIC/37"/>
-  <int value="16" label="QUIC/38"/>
-</enum>
-
-<enum name="ConnectionResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Aborted"/>
-</enum>
-
-<enum name="ConnectionStatus" type="int">
-  <int value="0" label="Offline"/>
-  <int value="1" label="Connected"/>
-  <int value="2" label="Online"/>
-</enum>
-
-<enum name="ConnectionSubtype" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="NONE"/>
-  <int value="2" label="OTHER"/>
-  <int value="3" label="GSM"/>
-  <int value="4" label="IDEN"/>
-  <int value="5" label="CDMA"/>
-  <int value="6" label="1XRTT"/>
-  <int value="7" label="GPRS"/>
-  <int value="8" label="EDGE"/>
-  <int value="9" label="UMTS"/>
-  <int value="10" label="EVDO_REV_0"/>
-  <int value="11" label="EVDO_REV_A"/>
-  <int value="12" label="HSPA"/>
-  <int value="13" label="EVDO_REV_B"/>
-  <int value="14" label="HSDPA"/>
-  <int value="15" label="HSUPA"/>
-  <int value="16" label="EHRPD"/>
-  <int value="17" label="HSPAP"/>
-  <int value="18" label="LTE"/>
-  <int value="19" label="LTE_ADVANCED"/>
-  <int value="20" label="BLUETOOTH_1_2"/>
-  <int value="21" label="BLUETOOTH_2_1"/>
-  <int value="22" label="BLUETOOTH_3_0"/>
-  <int value="23" label="BLUETOOTH_4_0"/>
-  <int value="24" label="ETHERNET"/>
-  <int value="25" label="FAST_ETHERNET"/>
-  <int value="26" label="GIGABIT_ETHERNET"/>
-  <int value="27" label="10_GIGABIT_ETHERNET"/>
-  <int value="28" label="WIFI_B"/>
-  <int value="29" label="WIFI_G"/>
-  <int value="30" label="WIFI_N"/>
-  <int value="31" label="WIFI_AC"/>
-  <int value="32" label="WIFI_AD"/>
-</enum>
-
-<enum name="ConnectionType" type="int">
-  <obsolete>
-    Removed May 2016.
-  </obsolete>
-  <summary>
-    Connection type as defined in net/base/connection_type_histograms.h
-  </summary>
-  <int value="0" label="Any">Any connection (SSL, HTTP, SPDY, etc.)</int>
-  <int value="1" label="SSL">An SSL connection</int>
-  <int value="2" label="SSL-MD5">
-    An SSL connection with an MD5 certificate in the certificate chain
-    (excluding root)
-  </int>
-  <int value="3" label="SSL-MD2">
-    An SSL connection with an MD2 certificate in the certificate chain
-    (excluding root)
-  </int>
-  <int value="4" label="SSL-MD4">
-    An SSL connection with an MD4 certificate in the certificate chain
-    (excluding root)
-  </int>
-  <int value="5" label="SSL-MD5(CA)">
-    An SSL connection with an MD5 CA certificate in the certificate chain
-    (excluding root)
-  </int>
-  <int value="6" label="SSL-MD2(CA)">
-    An SSL connection with an MD2 CA certificate in the cerfificate chain
-    (excluding root)
-  </int>
-  <int value="7" label="HTTP">An HTTP connection</int>
-  <int value="8" label="SPDY">A SPDY connection</int>
-  <int value="9" label="SSL-2.0">An SSL connection that uses SSL 2.0</int>
-  <int value="10" label="SSL-3.0">An SSL connection that uses SSL 3.0</int>
-  <int value="11" label="TLS-1.0">An SSL connection that uses TLS 1.0</int>
-  <int value="12" label="TLS-1.1">An SSL connection that uses TLS 1.1</int>
-  <int value="13" label="TLS-1.2">An SSL connection that uses TLS 1.2</int>
-</enum>
-
-<enum name="ConnectivityDiagnosticsTestVerdict" type="int">
-  <int value="0" label="NO_PROBLEM"/>
-  <int value="1" label="POTENTIAL_PROBLEM"/>
-  <int value="2" label="PROBLEM"/>
-  <int value="3" label="TEST_FAILURE_OCCURRED"/>
-  <int value="4" label="TEST_NOT_RUN"/>
-</enum>
-
-<enum name="ContentResourceType" type="int">
-  <obsolete>
-    Superseded by ContentResourceType in December 2015 when SUB_RESOURCE was
-    split into RESOURCE_TYPE_SUB_RESOURCE and RESOURCE_TYPE_PLUGIN_RESOURCE, and
-    PING was split into RESOURCE_TYPE_PING and RESOURCE_TYPE_CSP_REPORT.
-  </obsolete>
-  <int value="0" label="MAIN_FRAME"/>
-  <int value="1" label="SUB_FRAME"/>
-  <int value="2" label="STYLESHEET"/>
-  <int value="3" label="SCRIPT"/>
-  <int value="4" label="IMAGE"/>
-  <int value="5" label="FONT_RESOURCE"/>
-  <int value="6" label="SUB_RESOURCE"/>
-  <int value="7" label="OBJECT"/>
-  <int value="8" label="MEDIA"/>
-  <int value="9" label="WORKER"/>
-  <int value="10" label="SHARED_WORKER"/>
-  <int value="11" label="PREFETCH"/>
-  <int value="12" label="FAVICON"/>
-  <int value="13" label="XHR"/>
-  <int value="14" label="PING"/>
-  <int value="15" label="RESOURCE_TYPE_SERVICE_WORKER"/>
-</enum>
-
-<enum name="ContentResourceType2" type="int">
-  <int value="0" label="RESOURCE_TYPE_MAIN_FRAME"/>
-  <int value="1" label="RESOURCE_TYPE_SUB_FRAME"/>
-  <int value="2" label="RESOURCE_TYPE_STYLESHEET"/>
-  <int value="3" label="RESOURCE_TYPE_SCRIPT"/>
-  <int value="4" label="RESOURCE_TYPE_IMAGE"/>
-  <int value="5" label="RESOURCE_TYPE_FONT_RESOURCE"/>
-  <int value="6" label="RESOURCE_TYPE_SUB_RESOURCE"/>
-  <int value="7" label="RESOURCE_TYPE_OBJECT"/>
-  <int value="8" label="RESOURCE_TYPE_MEDIA"/>
-  <int value="9" label="RESOURCE_TYPE_WORKER"/>
-  <int value="10" label="RESOURCE_TYPE_SHARED_WORKER"/>
-  <int value="11" label="RESOURCE_TYPE_PREFETCH"/>
-  <int value="12" label="RESOURCE_TYPE_FAVICON"/>
-  <int value="13" label="RESOURCE_TYPE_XHR"/>
-  <int value="14" label="RESOURCE_TYPE_PING"/>
-  <int value="15" label="RESOURCE_TYPE_SERVICE_WORKER"/>
-  <int value="16" label="RESOURCE_TYPE_CSP_REPORT"/>
-  <int value="17" label="RESOURCE_TYPE_PLUGIN_RESOURCE"/>
-</enum>
-
-<enum name="ContentSetting" type="int">
-  <int value="0" label="DEFAULT"/>
-  <int value="1" label="ALLOW"/>
-  <int value="2" label="BLOCK"/>
-  <int value="3" label="ASK"/>
-  <int value="4" label="SESSION_ONLY"/>
-  <int value="5" label="DETECT_IMPORTANT_CONTENT"/>
-</enum>
-
-<enum name="ContentSettingMixedScriptAction" type="int">
-  <int value="0" label="Displayed shield"/>
-  <int value="1" label="Displayed bubble"/>
-  <int value="2" label="Clicked 'Load unsafe scripts'"/>
-  <int value="3" label="Clicked 'Learn more'"/>
-</enum>
-
-<enum name="ContentSettingPluginsAction" type="int">
-  <int value="0" label="Total number of navigations"/>
-  <int value="1" label="Displayed plugin-blocked icon in Omnibox"/>
-  <int value="2" label="Displayed bubble"/>
-  <int value="3" label="Clicked 'Run all plugins this time'"/>
-  <int value="4" label="Clicked 'Always allow plugins on this origin'"/>
-  <int value="5" label="Clicked 'Manage plugin blocking'"/>
-  <int value="6" label="Clicked 'Learn more'"/>
-</enum>
-
-<enum name="ContentSettingPopupAction" type="int">
-  <int value="0" label="Displayed popup-blocked icon in Omnibox"/>
-  <int value="1" label="Displayed bubble"/>
-  <int value="2" label="Clicked 'Always allow pop-ups from'"/>
-  <int value="3" label="Clicked one of the list items"/>
-  <int value="4" label="Clicked 'Manage pop-up blocking'"/>
-  <int value="5" label="Displayed popup-blocked infobar on mobile"/>
-  <int value="6" label="Clicked 'Always show on mobile'"/>
-</enum>
-
-<enum name="ContentSettingScheme" type="int">
-  <int value="0" label="(wildcard)"/>
-  <int value="1" label="(other)"/>
-  <int value="2" label="http"/>
-  <int value="3" label="https"/>
-  <int value="4" label="file"/>
-  <int value="5" label="chrome-extension"/>
-</enum>
-
-<enum name="ContentSuggestionsCategory" type="int">
-  <int value="0" label="Experimental"/>
-  <int value="1" label="Recent Tabs"/>
-  <int value="2" label="Downloads"/>
-  <int value="3" label="Bookmarks"/>
-  <int value="4" label="Physical Web Pages"/>
-  <int value="5" label="Foreign Tabs"/>
-  <int value="6" label="Articles"/>
-</enum>
-
-<enum name="ContentSuggestionsNotificationsAction" type="int">
-  <int value="0" label="Tap"/>
-  <int value="1" label="Dismissal"/>
-  <int value="2" label="Hidden (Notification deadline passed)"/>
-  <int value="3" label="Hidden (Suggestion expired)"/>
-  <int value="4" label="Hidden (Chrome became frontmost)"/>
-  <int value="5" label="Hidden (Category disabled)"/>
-  <int value="6" label="Hidden (Content Suggestion Service shut down)"/>
-</enum>
-
-<enum name="ContentSuggestionsNotificationsImpression" type="int">
-  <int value="0" label="Article"/>
-  <int value="1" label="Non-Article"/>
-</enum>
-
-<enum name="ContentSuggestionsNotificationsOptOut" type="int">
-  <int value="0" label="Implicit"/>
-  <int value="1" label="Explicit"/>
-</enum>
-
-<enum name="ContentSuggestionsUIUpdateResult" type="int">
-  <obsolete>
-    Superseded by ContentSuggestionsUIUpdateResult2 in January 2017.
-  </obsolete>
-  <int value="0" label="Success (appended)"/>
-  <int value="1" label="Success (no suggestion seen)"/>
-  <int value="2" label="Success (1 suggestion seen)"/>
-  <int value="3" label="Success (2 suggestions seen)"/>
-  <int value="4" label="Success (3 suggestions seen)"/>
-  <int value="5" label="Success (more than 3 suggestions seen)"/>
-  <int value="6" label="Fail (all suggestions seen)"/>
-  <int value="7" label="Fail (updates disabled)"/>
-</enum>
-
-<enum name="ContentSuggestionsUIUpdateResult2" type="int">
-  <int value="0" label="Success (appended)"/>
-  <int value="1" label="Success (some suggestions replaced)"/>
-  <int value="2" label="Fail (all suggestions seen)"/>
-  <int value="3" label="Fail (updates disabled)"/>
-</enum>
-
-<enum name="ContentType" type="int">
-  <int value="-1" label="Invalid setting"/>
-  <int value="0" label="Cookies setting"/>
-  <int value="1" label="Images setting"/>
-  <int value="2" label="JavaScript setting"/>
-  <int value="3" label="Plugins setting"/>
-  <int value="4" label="Popups setting"/>
-  <int value="5" label="Location setting"/>
-  <int value="6" label="Notifications setting"/>
-  <int value="7" label="Auto Select Cert setting"/>
-  <int value="8" label="Fullscreen setting [removed]"/>
-  <int value="9" label="Mouselock setting [removed]"/>
-  <int value="10" label="Mixed Script setting"/>
-  <int value="11" label="Media setting (mic + camera) [removed]"/>
-  <int value="12" label="Media setting (mic)"/>
-  <int value="13" label="Media setting (camera)"/>
-  <int value="14" label="Protocol Handler setting"/>
-  <int value="15" label="PPAPI Broker setting"/>
-  <int value="16" label="Automatic downloads setting"/>
-  <int value="17" label="MIDI sysex setting"/>
-  <int value="18" label="Push messaging setting [removed]"/>
-  <int value="19" label="SSL Certificate Decisions setting"/>
-  <int value="20" label="Metro switch-to-desktop setting [removed]"/>
-  <int value="21"
-      label="Protected media identifier setting (Android/ChromeOS only)"/>
-  <int value="22" label="App banner setting (Android only)"/>
-  <int value="23" label="Site engagement setting"/>
-  <int value="24" label="Durable storage setting"/>
-  <int value="25" label="Key generation setting"/>
-  <int value="26" label="Background sync setting"/>
-</enum>
-
-<enum name="ContextLostReason" type="int">
-  <summary>The reason for losing a GPU context.</summary>
-  <int value="0" label="CONTEXT_INIT_FAILED"/>
-  <int value="1" label="CONTEXT_LOST_GPU_CHANNEL_ERROR"/>
-  <int value="2" label="CONTEXT_PARSE_ERROR_INVALID_SIZE"/>
-  <int value="3" label="CONTEXT_PARSE_ERROR_OUT_OF_BOUNDS"/>
-  <int value="4" label="CONTEXT_PARSE_ERROR_UNKNOWN_COMMAND"/>
-  <int value="5" label="CONTEXT_PARSE_ERROR_INVALID_ARGS"/>
-  <int value="6" label="CONTEXT_PARSE_ERROR_GENERIC_ERROR"/>
-  <int value="7" label="CONTEXT_LOST_GUILTY"/>
-  <int value="8" label="CONTEXT_LOST_INNOCENT"/>
-  <int value="9" label="CONTEXT_LOST_UNKNOWN"/>
-  <int value="10" label="CONTEXT_LOST_OUT_OF_MEMORY"/>
-  <int value="11" label="CONTEXT_LOST_MAKECURRENT_FAILED"/>
-  <int value="12" label="CONTEXT_LOST_INVALID_GPU_MESSAGE"/>
-</enum>
-
-<enum name="ContextMenuOption" type="int">
-  <summary>The item selected from a context menu</summary>
-  <int value="0" label="Open in new tab"/>
-  <int value="1" label="Open in incognito tab"/>
-  <int value="2" label="Copy link address"/>
-  <int value="3" label="Copy email address"/>
-  <int value="4" label="Copy link text"/>
-  <int value="5" label="Save link"/>
-  <int value="6" label="Save image"/>
-  <int value="7" label="Open image"/>
-  <int value="8" label="Open image in new tab"/>
-  <int value="9" label="Copy image"/>
-  <int value="10" label="Copy image URL"/>
-  <int value="11" label="Search by image"/>
-  <int value="12" label="Load images"/>
-  <int value="13" label="Load original image"/>
-  <int value="14" label="Save video"/>
-  <int value="15" label="Open link in a new window"/>
-  <int value="16" label="Print"/>
-  <int value="17" label="Search web for..."/>
-  <int value="18" label="Save media as"/>
-  <int value="19" label="Share image"/>
-  <int value="20" label="Open in new/other window"/>
-  <int value="21" label="Open (JavaScript evaluation)"/>
-  <int value="22" label="Read Later"/>
-  <int value="23" label="Send email"/>
-  <int value="24" label="Add to contacts"/>
-  <int value="25" label="Spellcheck suggestion"/>
-  <int value="26" label="Add to dictionary"/>
-  <int value="27" label="Context spelling toggle (Ask Google for suggestions)"/>
-  <int value="28" label="Cut text"/>
-  <int value="29" label="Paste text"/>
-  <int value="30" label="Call"/>
-  <int value="31" label="Send text message"/>
-  <int value="32" label="Copy phone number"/>
-</enum>
-
-<enum name="ContextMenuSaveLinkType" type="int">
-  <summary>
-    The content type when user chooses save link context menu option
-  </summary>
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Text"/>
-  <int value="2" label="Image"/>
-  <int value="3" label="Audio"/>
-  <int value="4" label="Video"/>
-  <int value="5" label="Pdf"/>
-</enum>
-
-<enum name="ContextProviderPhase" type="int">
-  <int value="0" label="Acquired"/>
-  <int value="1" label="Released"/>
-</enum>
-
-<enum name="ContextualSearchBarOverlapSeen" type="int">
-  <int value="0" label="Overlap seen from Tap"/>
-  <int value="1" label="Overlap not seen from Tap"/>
-  <int value="2" label="No overlap seen from Tap"/>
-  <int value="3" label="No overlap not seen from Tap"/>
-  <int value="4" label="Overlap seen from Longpress"/>
-  <int value="5" label="Overlap not seen from Longpress"/>
-  <int value="6" label="No overlap seen from Longpress"/>
-  <int value="7" label="No overlap not seen from Longpress"/>
-</enum>
-
-<enum name="ContextualSearchBasePageProtocol" type="int">
-  <int value="0" label="Is HTTP"/>
-  <int value="1" label="Not HTTP"/>
-</enum>
-
-<enum name="ContextualSearchBlacklistSeen" type="int">
-  <int value="0" label="None, Seen"/>
-  <int value="1" label="None, Not Seen"/>
-  <int value="2" label="Number, Seen"/>
-  <int value="3" label="Number, Not Seen"/>
-  <int value="4" label="Determiner, Seen"/>
-  <int value="5" label="Determiner, Not Seen"/>
-  <int value="6" label="Preposition, Seen"/>
-  <int value="7" label="Preposition, Not Seen"/>
-  <int value="8" label="Navigation, Seen"/>
-  <int value="9" label="Navigation, Not Seen"/>
-  <int value="10" label="Misc, Seen"/>
-  <int value="11" label="Misc, Not Seen"/>
-</enum>
-
-<enum name="ContextualSearchEnterClosedStateChange" type="int">
-  <int value="0" label="From Other"/>
-  <int value="1" label="From Peeked (back press)"/>
-  <int value="2" label="From Peeked (base page scroll)"/>
-  <int value="3" label="From Peeked (text select tap)"/>
-  <int value="4" label="From Expanded (back press)"/>
-  <int value="5" label="From Expanded (base page tap)"/>
-  <int value="6" label="From Expanded (fling)"/>
-  <int value="7" label="From Maximized (back press)"/>
-  <int value="8" label="From Maximized (fling)"/>
-  <int value="9" label="From Maximized (tab promotion)"/>
-  <int value="10" label="From Maximized (SERP navigation)"/>
-</enum>
-
-<enum name="ContextualSearchEnterExpandedStateChange" type="int">
-  <int value="0" label="From Other"/>
-  <int value="1" label="From Peeked (search bar tap)"/>
-  <int value="2" label="From Peeked (swipe)"/>
-  <int value="3" label="From Peeked (fling)"/>
-  <int value="4" label="From Maximized (swipe)"/>
-  <int value="5" label="From Maximized (fling)"/>
-</enum>
-
-<enum name="ContextualSearchEnterMaximizedStateChange" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="From Peeked (swipe)"/>
-  <int value="2" label="From Peeked (fling)"/>
-  <int value="3" label="From Expanded (swipe)"/>
-  <int value="4" label="From Expanded (fling)"/>
-  <int value="5" label="From Expanded (SERP navigation)"/>
-</enum>
-
-<enum name="ContextualSearchEnterPeekedStateChange" type="int">
-  <int value="0" label="From Other"/>
-  <int value="1" label="From Closed (text select tap)"/>
-  <int value="2" label="From Closed (text select long press)"/>
-  <int value="3" label="From Peeked (text select tap)"/>
-  <int value="4" label="From Peeked (text select long press)"/>
-  <int value="5" label="From Expanded (search bar tap)"/>
-  <int value="6" label="From Expanded (swipe)"/>
-  <int value="7" label="From Expanded (fling)"/>
-  <int value="8" label="From Maximized (swipe)"/>
-  <int value="9" label="From Maximized (fling)"/>
-</enum>
-
-<enum name="ContextualSearchExitClosedStateChange" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Peek (text select tap)"/>
-  <int value="2" label="Peek (text select long press)"/>
-</enum>
-
-<enum name="ContextualSearchExitExpandedStateChange" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Close (back press)"/>
-  <int value="2" label="Close (base page tap)"/>
-  <int value="3" label="Close (fling)"/>
-  <int value="4" label="Peek (search bar tap)"/>
-  <int value="5" label="Peek (swipe)"/>
-  <int value="6" label="Peek (fling)"/>
-  <int value="7" label="Maximize (swipe)"/>
-  <int value="8" label="Maximize (fling)"/>
-  <int value="9" label="Maximize (SERP navigation)"/>
-</enum>
-
-<enum name="ContextualSearchExitMaximizedStateChange" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Close (back press)"/>
-  <int value="2" label="Close (fling)"/>
-  <int value="3" label="Close (tab promotion)"/>
-  <int value="4" label="Close (SERP navigation)"/>
-  <int value="5" label="Peek (swipe)"/>
-  <int value="6" label="Peek (fling)"/>
-  <int value="7" label="Expand (swipe)"/>
-  <int value="8" label="Expand (fling)"/>
-</enum>
-
-<enum name="ContextualSearchExitPeekedStateChange" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Close (back press)"/>
-  <int value="2" label="Close (base page scroll)"/>
-  <int value="3" label="Close (text select tap)"/>
-  <int value="4" label="Peek (text select tap)"/>
-  <int value="5" label="Peek (text select long press)"/>
-  <int value="6" label="Expand (search bar tap)"/>
-  <int value="7" label="Expand (swipe)"/>
-  <int value="8" label="Expand (fling)"/>
-  <int value="9" label="Maximize (swipe)"/>
-  <int value="10" label="To Maximize (fling)"/>
-</enum>
-
-<enum name="ContextualSearchFirstRunPanelSeen" type="int">
-  <int value="0" label="Seen"/>
-  <int value="1" label="Unseen"/>
-</enum>
-
-<enum name="ContextualSearchIconSpriteAnimated" type="int">
-  <int value="0" label="Animated, seen, from tap"/>
-  <int value="1" label="Animated, not seen, from tap"/>
-  <int value="2" label="Not animated, seen, from tap"/>
-  <int value="3" label="Not animated, not seen, from tap"/>
-  <int value="4" label="Animated, seen, from long press"/>
-  <int value="5" label="Animated, not seen, from long press"/>
-  <int value="6" label="Not animated, seen, from long press"/>
-  <int value="7" label="Not animated, not seen, from long press"/>
-</enum>
-
-<enum name="ContextualSearchLoaded" type="int">
-  <int value="0" label="Partially Loaded"/>
-  <int value="1" label="Fully Loaded"/>
-</enum>
-
-<enum name="ContextualSearchOutcomeByGesture" type="int">
-  <int value="0" label="Enabled, from Tap"/>
-  <int value="1" label="Disabled, from Tap"/>
-  <int value="2" label="Undecided from Tap"/>
-  <int value="3" label="Enabled, from Long-press"/>
-  <int value="4" label="Disabled, from Long-press"/>
-  <int value="5" label="Undecided from Long-press"/>
-</enum>
-
-<enum name="ContextualSearchPeekPromoOutcome" type="int">
-  <summary>The outcome of the Contextual Search Peek Promo.</summary>
-  <int value="0" label="Peek Promo was seen, Panel was opened"/>
-  <int value="1" label="Peek Promo was seen, Panel was not opened"/>
-  <int value="2" label="Peek Promo was not seen, Panel was opened"/>
-  <int value="3" label="Peek Promo was not seen, Panel was not opened"/>
-</enum>
-
-<enum name="ContextualSearchPreferenceState" type="int">
-  <int value="0" label="Uninitialized"/>
-  <int value="1" label="Enabled"/>
-  <int value="2" label="Disabled"/>
-</enum>
-
-<enum name="ContextualSearchPrefetchSummary" type="int">
-  <int value="0" label="Prefetched, partly loaded"/>
-  <int value="1" label="Fully preloaded"/>
-  <int value="2" label="Not prefetched"/>
-</enum>
-
-<enum name="ContextualSearchQuickActionCategory" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Address"/>
-  <int value="2" label="Email"/>
-  <int value="3" label="Event"/>
-  <int value="4" label="Phone"/>
-  <int value="5" label="Website"/>
-</enum>
-
-<enum name="ContextualSearchQuickActionIntentResolution" type="int">
-  <int value="0" label="No matching apps or resolve failed"/>
-  <int value="1" label="One matching app"/>
-  <int value="2" label="Multiple matching apps"/>
-</enum>
-
-<enum name="ContextualSearchQuickAnswerSeen" type="int">
-  <int value="0" label="Activated, answered and seen"/>
-  <int value="1" label="Activated and answered but not seen"/>
-  <int value="2" label="Activated, not answered but seen"/>
-  <int value="3" label="Activated, not answered nor seen"/>
-  <int value="4" label="Not activated but seen"/>
-  <int value="5" label="Not activated nor seen"/>
-</enum>
-
-<enum name="ContextualSearchResolvedTermWords" type="int">
-  <int value="0" label="Single Word"/>
-  <int value="1" label="Multi Word"/>
-</enum>
-
-<enum name="ContextualSearchResultsSeen" type="int">
-  <int value="0" label="Seen"/>
-  <int value="1" label="Unseen"/>
-</enum>
-
-<enum name="ContextualSearchSearchRequestStatus" type="int">
-  <int value="0" label="Not Failed"/>
-  <int value="1" label="Failed"/>
-</enum>
-
-<enum name="ContextualSearchSeenByGesture" type="int">
-  <int value="0" label="Seen, from Tap"/>
-  <int value="1" label="Not seen, from Tap"/>
-  <int value="2" label="Seen, from Long-press"/>
-  <int value="3" label="Not seen, from Long-press"/>
-</enum>
-
-<enum name="ContextualSearchSelectionValid" type="int">
-  <int value="0" label="Valid"/>
-  <int value="1" label="Invalid"/>
-</enum>
-
-<enum name="ContextualSearchShouldTranslate" type="int">
-  <summary>
-    Notes when a translation one-box should be forced by Contextual Search.
-  </summary>
-  <int value="0" label="Did force a translation"/>
-  <int value="1" label="Would force a translation (if not disabled)"/>
-</enum>
-
-<enum name="ContextualSearchSuppressionResultsSeen" type="int">
-  <int value="0" label="Seen, heuristic satisfied"/>
-  <int value="1" label="Not seen, heuristic satisfied"/>
-  <int value="2" label="Seen, heuristic not satisfied"/>
-  <int value="3" label="Not seen, heuristic not satisfied"/>
-</enum>
-
-<enum name="ContextualSearchTapSuppression" type="int">
-  <int value="0" label="Tap suppressed"/>
-  <int value="1" label="Tap not suppressed"/>
-</enum>
-
-<enum name="CookieDeleteEquivalent" type="int">
-  <int value="0"
-      label="Attempt to delete an equivalent cookie during a set cookie
-             operation"/>
-  <int value="1" label="Equivalent cookie to delete was found"/>
-  <int value="2"
-      label="Secure cookie was skipped because of strict secure cookies rules"/>
-  <int value="3"
-      label="Secure cookie that was skipped because of strict secure cookie
-             rules would have been deleted in non-strict secure cookie case"/>
-</enum>
-
-<enum name="CookieDeletionCause" type="int">
-  <summary>Reason why a cookie was removed from the cookie store</summary>
-  <int value="0" label="explicit">
-    The user explicitly requested that we delete a cookie
-  </int>
-  <int value="1" label="overwrite">
-    The value of the cookie was overwritten by a new value
-  </int>
-  <int value="2" label="expired">The cookie expiration time passed</int>
-  <int value="3" label="evicted">
-    The cookie was evicted during garbage collection (replaced by
-    domain_evicted/global_evicted below)
-  </int>
-  <int value="4" label="store_dup">
-    The backing store had two copies of the cookie so one was removed (i.e.
-    problems writing the backing store database)
-  </int>
-  <int value="5" label="dont_record">
-    The cookie deletion should not be recorded because it occurred, e.g., during
-    shutdown (the fact that these values showed up in the histogram is a bug,
-    since fixed)
-  </int>
-  <int value="6" label="domain_evicted">
-    The cookie was evicted during per-domain/eTLD+1 garbage collection
-  </int>
-  <int value="7" label="global_evicted">
-    The cookie was evicted during whole store garbage collection.
-  </int>
-  <int value="8" label="domain_evicted_pre_safe">
-    The cookie evicted during per-domain/eTLD+1 garbage collection, and would
-    have been evicted by the global garbage collection process (because they
-    hadn't been accessed recently enough).
-  </int>
-  <int value="9" label="domain_evicted_post_safe">
-    The cookie evicted during per-domain/eTLD+1 garbage collection, and would
-    not have been evicted by global metrics as well (because they had been
-    accessed recently enough to save).
-  </int>
-  <int value="10" label="expired_overwrite">
-    The cookie deletion occurred because the server overwrote it with an already
-    expired cookie (this is a common idiom for server deletions of cookies).
-  </int>
-</enum>
-
-<enum name="CookieOrCacheDeletion" type="int">
-  <int value="0" label="Neither"/>
-  <int value="1" label="Only cookies"/>
-  <int value="2" label="Only cache"/>
-  <int value="3" label="Both"/>
-</enum>
-
-<enum name="CookiePrefix" type="int">
-  <int value="0" label="No special prefix"/>
-  <int value="1" label="Secure prefix"/>
-  <int value="2" label="Host prefix"/>
-</enum>
-
-<enum name="CookieSourceScheme" type="int">
-  <int value="0" label="Secure cookie, source scheme is cryptographic"/>
-  <int value="1" label="Secure cookie, source scheme is not cryptographic"/>
-  <int value="2" label="Not Secure cookie, source scheme is cryptographic"/>
-  <int value="3" label="Not Secure cookie, source scheme is not cryptographic"/>
-</enum>
-
-<enum name="CookieType" type="int">
-  <summary>The type of a cookie when its added to the cookie store.</summary>
-  <int value="0" label="Default"/>
-  <int value="1" label="First-Party-Only"/>
-  <int value="2" label="HttpOnly"/>
-  <int value="3" label="First-Party-Only, HttpOnly"/>
-  <int value="4" label="Secure"/>
-  <int value="5" label="First-Party-Only, Secure"/>
-  <int value="6" label="HttpOnly, Secure"/>
-  <int value="7" label="First-Party-Only, HttpOnly, Secure"/>
-</enum>
-
-<enum name="CorePageTransition" type="int">
-  <summary>
-    The core value of PageTransition. See ui/base/page_transition_types.h.
-  </summary>
-  <int value="0" label="LINK"/>
-  <int value="1" label="TYPED"/>
-  <int value="2" label="AUTO_BOOKMARK"/>
-  <int value="3" label="AUTO_SUBFRAME"/>
-  <int value="4" label="MANUAL_SUBFRAME"/>
-  <int value="5" label="GENERATED"/>
-  <int value="6" label="START_PAGE"/>
-  <int value="7" label="FORM_SUBMIT"/>
-  <int value="8" label="RELOAD"/>
-  <int value="9" label="KEYWORD"/>
-  <int value="10" label="KEYWORD_GENERATED"/>
-</enum>
-
-<enum name="CorruptExtensionDisabledReason" type="int">
-  <summary>
-    The reason why content verification flagged an extension as corrupted. See
-    ContentVerifyJob::FailureReason in
-    src/extensions/browser/content_verify_job.h.
-  </summary>
-  <int value="0" label="Unknown Reason"/>
-  <int value="1" label="Missing All Hashes"/>
-  <int value="2" label="Missing File Hash"/>
-  <int value="3" label="Hash Mismatch"/>
-</enum>
-
-<enum name="CrashExitCodes" type="int">
-  <int value="1" label="RESULT_CODE_KILLED"/>
-  <int value="2" label="RESULT_CODE_HUNG"/>
-  <int value="3" label="RESULT_CODE_KILLED_BAD_MESSAGE"/>
-  <int value="4" label="RESULT_CODE_INVALID_CMDLINE_URL"/>
-  <int value="5" label="RESULT_CODE_BAD_PROCESS_TYPE"/>
-  <int value="6" label="RESULT_CODE_MISSING_DATA"/>
-  <int value="7" label="RESULT_CODE_SHELL_INTEGRATION_FAILED"/>
-  <int value="8" label="RESULT_CODE_MACHINE_LEVEL_INSTALL_EXISTS"/>
-  <int value="9" label="RESULT_CODE_UNINSTALL_CHROME_ALIVE"/>
-  <int value="10" label="RESULT_CODE_UNINSTALL_USER_CANCEL"/>
-  <int value="11" label="RESULT_CODE_UNINSTALL_DELETE_PROFILE"/>
-  <int value="12" label="RESULT_CODE_UNSUPPORTED_PARAM"/>
-  <int value="13" label="RESULT_CODE_IMPORTER_HUNG"/>
-  <int value="14" label="RESULT_CODE_RESPAWN_FAILED"/>
-  <int value="15" label="RESULT_CODE_NORMAL_EXIT_EXP1"/>
-  <int value="16" label="RESULT_CODE_NORMAL_EXIT_EXP2"/>
-  <int value="17" label="RESULT_CODE_NORMAL_EXIT_EXP3"/>
-  <int value="18" label="RESULT_CODE_NORMAL_EXIT_EXP4"/>
-  <int value="19" label="RESULT_CODE_NORMAL_EXIT_CANCEL"/>
-  <int value="20" label="RESULT_CODE_PROFILE_IN_USE"/>
-  <int value="21" label="RESULT_CODE_PACK_EXTENSION_ERROR"/>
-  <int value="22" label="RESULT_CODE_UNINSTALL_EXTENSION_ERROR"/>
-  <int value="23" label="RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED"/>
-  <int value="25" label="RESULT_CODE_INSTALL_FROM_WEBSTORE_ERROR_2"/>
-  <int value="27" label="RESULT_CODE_EULA_REFUSED"/>
-  <int value="28" label="RESULT_CODE_SXS_MIGRATION_FAILED"/>
-  <int value="29" label="RESULT_CODE_ACTION_DISALLOWED_BY_POLICY"/>
-  <int value="30" label="RESULT_CODE_INVALID_SANDBOX_STATE"/>
-  <int value="258" label="WAIT_TIMEOUT"/>
-  <int value="7006" label="SBOX_FATAL_INTEGRITY"/>
-  <int value="7007" label="SBOX_FATAL_DROPTOKEN"/>
-  <int value="7008" label="SBOX_FATAL_FLUSHANDLES"/>
-  <int value="7009" label="SBOX_FATAL_CACHEDISABLE"/>
-  <int value="7010" label="SBOX_FATAL_CLOSEHANDLES"/>
-  <int value="7011" label="SBOX_FATAL_MITIGATION"/>
-  <int value="7012" label="SBOX_FATAL_MEMORY_EXCEEDED"/>
-  <int value="7013" label="SBOX_FATAL_WARMUP"/>
-  <int value="36862" label="Crashpad_FailedToCaptureProcess"/>
-  <int value="36863" label="Crashpad_HandlerDidNotRespond"/>
-  <int value="85436397" label="Crashpad_SimulatedCrash"/>
-  <int value="529697949" label="CPP_EH_EXCEPTION"/>
-  <int value="533692099" label="STATUS_GUARD_PAGE_VIOLATION"/>
-  <int value="536870904" label="Out of Memory"/>
-  <int value="1073740791" label="STATUS_STACK_BUFFER_OVERRUN"/>
-  <int value="1073740940" label="STATUS_HEAP_CORRUPTION"/>
-  <int value="1073741502" label="STATUS_DLL_INIT_FAILED"/>
-  <int value="1073741510" label="STATUS_CONTROL_C_EXIT"/>
-  <int value="1073741515" label="STATUS_DLL_NOT_FOUND"/>
-  <int value="1073741571" label="STATUS_STACK_OVERFLOW"/>
-  <int value="1073741659" label="STATUS_BAD_IMPERSONATION_LEVEL"/>
-  <int value="1073741674" label="STATUS_PRIVILEGED_INSTRUCTION"/>
-  <int value="1073741675" label="STATUS_INTEGER_OVERFLOW"/>
-  <int value="1073741676" label="STATUS_INTEGER_DIVIDE_BY_ZERO"/>
-  <int value="1073741677" label="STATUS_FLOAT_UNDERFLOW"/>
-  <int value="1073741678" label="STATUS_FLOAT_STACK_CHECK"/>
-  <int value="1073741679" label="STATUS_FLOAT_OVERFLOW"/>
-  <int value="1073741680" label="STATUS_FLOAT_INVALID_OPERATION"/>
-  <int value="1073741681" label="STATUS_FLOAT_INEXACT_RESULT"/>
-  <int value="1073741682" label="STATUS_FLOAT_DIVIDE_BY_ZERO"/>
-  <int value="1073741683" label="STATUS_FLOAT_DENORMAL_OPERAND"/>
-  <int value="1073741684" label="STATUS_ARRAY_BOUNDS_EXCEEDED"/>
-  <int value="1073741783" label="STATUS_INVALID_UNWIND_TARGET"/>
-  <int value="1073741786" label="STATUS_INVALID_DISPOSITION"/>
-  <int value="1073741787" label="STATUS_NONCONTINUABLE_EXCEPTION"/>
-  <int value="1073741790" label="STATUS_ACCESS_DENIED"/>
-  <int value="1073741794" label="STATUS_INVALID_LOCK_SEQUENCE"/>
-  <int value="1073741795" label="STATUS_ILLEGAL_INSTRUCTION"/>
-  <int value="1073741800" label="STATUS_CONFLICTING_ADDRESSES"/>
-  <int value="1073741801" label="STATUS_NO_MEMORY"/>
-  <int value="1073741811" label="STATUS_INVALID_PARAMETER"/>
-  <int value="1073741816" label="STATUS_INVALID_HANDLE"/>
-  <int value="1073741818" label="STATUS_IN_PAGE_ERROR"/>
-  <int value="1073741819" label="STATUS_ACCESS_VIOLATION"/>
-  <int value="1073741829" label="STATUS_SEGMENT_NOTIFICATION"/>
-  <int value="1073741845" label="STATUS_FATAL_APP_EXIT"/>
-  <int value="2147483644" label="STATUS_SINGLE_STEP"/>
-  <int value="2147483645" label="STATUS_BREAKPOINT"/>
-  <int value="2147483646" label="STATUS_DATATYPE_MISALIGNMENT"/>
-</enum>
-
-<enum name="CrashpadExceptionCaptureResult" type="int">
-  <int value="0" label="kSuccess"/>
-  <int value="1" label="kUnexpectedExceptionBehavior"/>
-  <int value="2" label="kFailedDueToSuspendSelf"/>
-  <int value="3" label="kSnapshotFailed"/>
-  <int value="4" label="kExceptionInitializationFailed"/>
-  <int value="5" label="kPrepareNewCrashReportFailed"/>
-  <int value="6" label="kMinidumpWriteFailed"/>
-  <int value="7" label="kFinishWritingCrashReportFailed"/>
-</enum>
-
-<enum name="CrashpadExceptionProcessingState" type="int">
-  <int value="0" label="kStarted"/>
-  <int value="1" label="kFinished"/>
-</enum>
-
-<enum name="CrashpadLifetimeMilestone" type="int">
-  <int value="0" label="kStarted"/>
-  <int value="1" label="kExitedNormally"/>
-  <int value="2" label="kExitedEarly"/>
-  <int value="3" label="kFailed"/>
-  <int value="4" label="kTerminated"/>
-  <int value="5" label="kCrashed"/>
-</enum>
-
-<enum name="CrashpadMacExceptionCodes" type="int">
-  <int value="1" label="EXC_BAD_ACCESS"/>
-  <int value="2" label="EXC_BAD_INSTRUCTION"/>
-  <int value="3" label="EXC_ARITHMETIC"/>
-  <int value="4" label="EXC_EMULATION"/>
-  <int value="5" label="EXC_SOFTWARE"/>
-  <int value="6" label="EXC_BREAKPOINT"/>
-  <int value="7" label="EXC_SYSCALL"/>
-  <int value="8" label="EXC_MACH_SYSCALL"/>
-  <int value="9" label="EXC_RPC_ALERT"/>
-  <int value="10" label="EXC_CRASH"/>
-  <int value="11" label="EXC_RESOURCE"/>
-  <int value="12" label="EXC_GUARD"/>
-  <int value="13" label="EXC_CORPSE_NOTIFY"/>
-  <int value="65537" label="EXC_BAD_ACCESS/KERN_INVALID_ADDRESS"/>
-  <int value="65538" label="EXC_BAD_ACCESS/KERN_PROTECTION_FAILURE"/>
-  <int value="65541" label="EXC_BAD_ACCESS/(VM_PROT_READ|VM_PROT_EXECUTE)"/>
-  <int value="65549" label="EXC_BAD_ACCESS/EXC_I386_GPFLT"/>
-  <int value="65586" label="EXC_BAD_ACCESS/KERN_CODESIGN_ERROR"/>
-  <int value="131073" label="EXC_BAD_INSTRUCTION/EXC_I386_INVOP"/>
-  <int value="131083" label="EXC_BAD_INSTRUCTION/EXC_I386_SEGNPFLT"/>
-  <int value="131084" label="EXC_BAD_INSTRUCTION/EXC_I386_STKFLT"/>
-  <int value="196609" label="EXC_ARITHMETIC/EXC_I386_DIV"/>
-  <int value="196610" label="EXC_ARITHMETIC/EXC_I386_INTO"/>
-  <int value="196613" label="EXC_ARITHMETIC/EXC_I386_EXTERR"/>
-  <int value="196616" label="EXC_ARITHMETIC/EXC_I386_SSEEXTERR"/>
-  <int value="327687" label="EXC_SOFTWARE/EXC_I386_BOUND"/>
-  <int value="393217" label="EXC_BREAKPOINT/EXC_I386_SGL"/>
-  <int value="393218" label="EXC_BREAKPOINT/EXC_I386_BPT"/>
-  <int value="458752" label="EXC_SYSCALL/0"/>
-  <int value="458880" label="EXC_SYSCALL/128"/>
-  <int value="483328" label="EXC_SYSCALL/0x6000"/>
-  <int value="655363" label="EXC_CRASH/SIGQUIT"/>
-  <int value="655364" label="EXC_CRASH/SIGILL (raised)"/>
-  <int value="655365" label="EXC_CRASH/SIGTRAP (raised)"/>
-  <int value="655366" label="EXC_CRASH/SIGABRT"/>
-  <int value="655367" label="EXC_CRASH/SIGEMT (raised)"/>
-  <int value="655368" label="EXC_CRASH/SIGFPE (raised)"/>
-  <int value="655370" label="EXC_CRASH/SIGBUS (raised)"/>
-  <int value="655371" label="EXC_CRASH/SIGSEGV (raised)"/>
-  <int value="655372" label="EXC_CRASH/SIGSYS"/>
-  <int value="721153"
-      label="EXC_RESOURCE/RESOURCE_TYPE_CPU/FLAVOR_CPU_MONITOR"/>
-  <int value="721154"
-      label="EXC_RESOURCE/RESOURCE_TYPE_CPU/FLAVOR_CPU_MONITOR_FATAL"/>
-  <int value="721409"
-      label="EXC_RESOURCE/RESOURCE_TYPE_WAKEUPS/FLAVOR_WAKEUPS_MONITOR"/>
-  <int value="721665"
-      label="EXC_RESOURCE/RESOURCE_TYPE_MEMORY/FLAVOR_HIGH_WATERMARK"/>
-  <int value="721921"
-      label="EXC_RESOURCE/RESOURCE_TYPE_IO/FLAVOR_IO_PHYSICAL_WRITES"/>
-  <int value="721922"
-      label="EXC_RESOURCE/RESOURCE_TYPE_IO/FLAVOR_IO_LOGICAL_WRITES"/>
-  <int value="786688"
-      label="EXC_GUARD/GUARD_TYPE_MACH_PORT/kGUARD_EXC_DESTROY"/>
-  <int value="786689"
-      label="EXC_GUARD/GUARD_TYPE_MACH_PORT/kGUARD_EXC_MOD_REFS"/>
-  <int value="786690"
-      label="EXC_GUARD/GUARD_TYPE_MACH_PORT/kGUARD_EXC_SET_CONTEXT"/>
-  <int value="786691"
-      label="EXC_GUARD/GUARD_TYPE_MACH_PORT/kGUARD_EXC_UNGUARDED"/>
-  <int value="786692"
-      label="EXC_GUARD/GUARD_TYPE_MACH_PORT/kGUARD_EXC_INCORRECT_GUARD"/>
-  <int value="786944" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_CLOSE"/>
-  <int value="786945" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_DUP"/>
-  <int value="786946" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_NOCLOEXEC"/>
-  <int value="786947" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_SOCKET_IPC"/>
-  <int value="786948" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_FILEPORT"/>
-  <int value="786949" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_MISMATCH"/>
-  <int value="786950" label="EXC_GUARD/GUARD_TYPE_FD/kGUARD_EXC_WRITE"/>
-  <int value="851968" label="EXC_CORPSE_NOTIFY/0"/>
-  <int value="1129345912" label="crashpad::kMachExceptionSimulated"/>
-  <int value="1396900608" label="SIGQUIT/0"/>
-  <int value="1396900864" label="SIGILL/ILL_NOOP"/>
-  <int value="1396900865" label="SIGILL/ILL_ILLOPC"/>
-  <int value="1396900866" label="SIGILL/ILL_ILLTRP"/>
-  <int value="1396900867" label="SIGILL/ILL_PRVOPC"/>
-  <int value="1396900868" label="SIGILL/ILL_ILLOPN"/>
-  <int value="1396900869" label="SIGILL/ILL_ILLADR"/>
-  <int value="1396900870" label="SIGILL/ILL_PRVREG"/>
-  <int value="1396900871" label="SIGILL/ILL_COPROC"/>
-  <int value="1396900872" label="SIGILL/ILL_BADSTK"/>
-  <int value="1396901120" label="SIGTRAP/0"/>
-  <int value="1396901121" label="SIGTRAP/TRAP_BRKPT"/>
-  <int value="1396901122" label="SIGTRAP/TRAP_TRACE"/>
-  <int value="1396901376" label="SIGABRT/0"/>
-  <int value="1396901632" label="SIGEMT/0"/>
-  <int value="1396901888" label="SIGFPE/FPE_NOOP"/>
-  <int value="1396901889" label="SIGFPE/FPE_FLTDIV"/>
-  <int value="1396901890" label="SIGFPE/FPE_FLTOVF"/>
-  <int value="1396901891" label="SIGFPE/FPE_FLTUND"/>
-  <int value="1396901892" label="SIGFPE/FPE_FLTRES"/>
-  <int value="1396901893" label="SIGFPE/FPE_FLTINV"/>
-  <int value="1396901894" label="SIGFPE/FPE_FLTSUB"/>
-  <int value="1396901895" label="SIGFPE/FPE_INTDIV"/>
-  <int value="1396901896" label="SIGFPE/FPE_INTOVF"/>
-  <int value="1396902400" label="SIGBUS/BUS_NOOP"/>
-  <int value="1396902401" label="SIGBUS/BUS_ADRALN"/>
-  <int value="1396902402" label="SIGBUS/BUS_ADRERR"/>
-  <int value="1396902403" label="SIGBUS/BUS_OBJERR"/>
-  <int value="1396902656" label="SIGSEGV/SEGV_NOOP"/>
-  <int value="1396902657" label="SIGSEGV/SEGV_MAPERR"/>
-  <int value="1396902658" label="SIGSEGV/SEGV_ACCERR"/>
-  <int value="1396902912" label="SIGSYS/0"/>
-</enum>
-
-<enum name="CrashpadReportPending" type="int">
-  <int value="0" label="kNewlyCreated"/>
-  <int value="1" label="kUserInitiated"/>
-</enum>
-
-<enum name="CrashpadUploadAttemptStatus" type="int">
-  <int value="0" label="Failed"/>
-  <int value="1" label="Succeeded"/>
-</enum>
-
-<enum name="CrashpadUploadSkippedReason" type="int">
-  <int value="0" label="kUploadsDisabled"/>
-  <int value="1" label="kUploadThrottled"/>
-  <int value="2" label="kUnexpectedTime"/>
-  <int value="3" label="kDatabaseError"/>
-  <int value="4" label="kUploadFailed"/>
-</enum>
-
-<enum name="CrashpadWinExceptionCodes" type="int">
-  <int value="-2147483647" label="EXCEPTION_GUARD_PAGE"/>
-  <int value="-2147483646" label="EXCEPTION_DATATYPE_MISALIGNMENT"/>
-  <int value="-2147483645" label="EXCEPTION_BREAKPOINT"/>
-  <int value="-2147483644" label="EXCEPTION_SINGLE_STEP"/>
-  <int value="-1073741822" label="STATUS_NOT_IMPLEMENTED"/>
-  <int value="-1073741819" label="EXCEPTION_ACCESS_VIOLATION"/>
-  <int value="-1073741818" label="EXCEPTION_IN_PAGE_ERROR"/>
-  <int value="-1073741816" label="EXCEPTION_INVALID_HANDLE"/>
-  <int value="-1073741811" label="STATUS_INVALID_PARAMETER"/>
-  <int value="-1073741803" label="STATUS_NONEXISTENT_SECTOR"/>
-  <int value="-1073741801" label="STATUS_NO_MEMORY"/>
-  <int value="-1073741795" label="EXCEPTION_ILLEGAL_INSTRUCTION"/>
-  <int value="-1073741794" label="STATUS_INVALID_LOCK_SEQUENCE"/>
-  <int value="-1073741790" label="STATUS_ACCESS_DENIED"/>
-  <int value="-1073741788" label="STATUS_OBJECT_TYPE_MISMATCH"/>
-  <int value="-1073741739" label="STATUS_LOCK_NOT_GRANTED"/>
-  <int value="-1073741684" label="EXCEPTION_ARRAY_BOUNDS_EXCEEDED"/>
-  <int value="-1073741682" label="EXCEPTION_FLT_DIVIDE_BY_ZERO"/>
-  <int value="-1073741681" label="EXCEPTION_FLT_INEXACT_RESULT"/>
-  <int value="-1073741680" label="EXCEPTION_FLT_INVALID_OPERATION"/>
-  <int value="-1073741679" label="EXCEPTION_FLT_OVERFLOW"/>
-  <int value="-1073741678" label="EXCEPTION_FLT_STACK_CHECK"/>
-  <int value="-1073741677" label="EXCEPTION_FLT_UNDERFLOW"/>
-  <int value="-1073741676" label="EXCEPTION_INT_DIVIDE_BY_ZERO"/>
-  <int value="-1073741675" label="EXCEPTION_INT_OVERFLOW"/>
-  <int value="-1073741674" label="EXCEPTION_PRIV_INSTRUCTION"/>
-  <int value="-1073741571" label="EXCEPTION_STACK_OVERFLOW"/>
-  <int value="-1073741569" label="STATUS_BAD_FUNCTION_TABLE"/>
-  <int value="-1073741420" label="EXCEPTION_POSSIBLE_DEADLOCK"/>
-  <int value="-1073741224" label="STATUS_NO_CALLBACK_ACTIVE"/>
-  <int value="-1073741212" label="STATUS_RESOURCE_NOT_OWNED"/>
-  <int value="-1073741132" label="STATUS_FLOAT_MULTIPLE_FAULTS"/>
-  <int value="-1073741131" label="STATUS_FLOAT_MULTIPLE_TRAPS"/>
-  <int value="-1073740791" label="STATUS_STACK_BUFFER_OVERRUN"/>
-  <int value="-1073740022" label="STATUS_THREADPOOL_HANDLE_EXCEPTION"/>
-  <int value="-1073740021"
-      label="STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED"/>
-  <int value="-1073740020"
-      label="STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED"/>
-  <int value="-1073740018"
-      label="STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED"/>
-  <int value="-1073740016"
-      label="STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING"/>
-  <int value="-1073740004" label="STATUS_INVALID_THREAD"/>
-  <int value="-1073740003" label="STATUS_CALLBACK_RETURNED_TRANSACTION"/>
-  <int value="-1073740002" label="STATUS_CALLBACK_RETURNED_LDR_LOCK"/>
-  <int value="-1073740001" label="STATUS_CALLBACK_RETURNED_LANG"/>
-  <int value="-1073610685" label="RPC_NT_INTERNAL_ERROR"/>
-  <int value="-1072365553" label="STATUS_SXS_EARLY_DEACTIVATION"/>
-  <int value="-1072365552" label="STATUS_SXS_INVALID_DEACTIVATION"/>
-  <int value="-1072365551" label="STATUS_SXS_MULTIPLE_DEACTIVATION"/>
-  <int value="-1072365548" label="STATUS_SXS_CORRUPT_ACTIVATION_STACK"/>
-  <int value="-1066598274" label="FACILITY_VISUALCPP/ERROR_MOD_NOT_FOUND"/>
-  <int value="-1066598273" label="FACILITY_VISUALCPP/ERROR_PROC_NOT_FOUND"/>
-  <int value="-536870904" label="base::win::kOomExceptionCode"/>
-  <int value="-529697949" label="EH_EXCEPTION_NUMBER"/>
-  <int value="1285" label="ERROR_DELAY_LOAD_FAILED"/>
-  <int value="1717" label="RPC_S_UNKNOWN_IF"/>
-  <int value="1722" label="RPC_S_SERVER_UNAVAILABLE"/>
-  <int value="1726" label="RPC_S_CALL_FAILED"/>
-  <int value="1766" label="RPC_S_INTERNAL_ERROR"/>
-  <int value="1783" label="RPC_X_BAD_STUB_DATA"/>
-  <int value="1818" label="RPC_S_CALL_CANCELLED"/>
-  <int value="85436397" label="crashpad::kSimulatedExceptionCode"/>
-  <int value="250477278" label="(Delphi exception)"/>
-</enum>
-
-<enum name="CreatePersistentHistogramResult" type="int">
-  <int value="0" label="Success: Histogram created in persistent space."/>
-  <int value="1" label="Error: Invalid metadata pointer. (coding error)"/>
-  <int value="2" label="Error: Invalid metdata."/>
-  <int value="3" label="Error: Invalid 'ranges' array."/>
-  <int value="4" label="Error: Invalid 'counts' array."/>
-  <int value="5" label="Failed: Allocator is corrupt."/>
-  <int value="6" label="Failed: Allocator is full."/>
-  <int value="7" label="Failed: Allocator failed (unknown error)."/>
-  <int value="8" label="Error: Unknown histogram type."/>
-  <int value="9" label="Error: Allocator has become corrupted."/>
-</enum>
-
-<enum name="CredentialFilteredType" type="int">
-  <int value="0" label="No sync credentials present"/>
-  <int value="1" label="Sync credentials were removed"/>
-</enum>
-
-<enum name="CredentialManagerGetResult" type="int">
-  <int value="0" label="Promise rejected"/>
-  <int value="1" label="Empty credential, auto sign-in disallowed"/>
-  <int value="2" label="Empty credential, empty password store"/>
-  <int value="3" label="Empty credential, multiple matches"/>
-  <int value="4" label="Empty credential, user signed out"/>
-  <int value="5" label="Empty credential, auto sign-in FRE pending"/>
-  <int value="6" label="Empty credential, any other reason"/>
-  <int value="7" label="Account chooser credential"/>
-  <int value="8" label="Auto sign-in"/>
-</enum>
-
-<enum name="CrosBeamformingDeviceState" type="int">
-  <int value="0" label="Default enabled"/>
-  <int value="1" label="User enabled"/>
-  <int value="2" label="Default disabled"/>
-  <int value="3" label="User disabled"/>
-</enum>
-
-<enum name="CrosDisksArchiveType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="ZIP"/>
-  <int value="2" label="RAR"/>
-  <int value="3" label="Tar"/>
-  <int value="4" label="Bzip2-compressed Tar"/>
-  <int value="5" label="Gzip-compressed Tar"/>
-</enum>
-
-<enum name="CrosDisksDeviceMediaType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="USB Drive"/>
-  <int value="2" label="SD Card"/>
-  <int value="3" label="Optical Disc"/>
-  <int value="4" label="Mobile Device"/>
-  <int value="5" label="DVD"/>
-</enum>
-
-<enum name="CrosDisksFilesystemType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Others"/>
-  <int value="2" label="FAT"/>
-  <int value="3" label="exFAT"/>
-  <int value="4" label="NTFS"/>
-  <int value="5" label="HFS+"/>
-  <int value="6" label="Ext2"/>
-  <int value="7" label="Ext3"/>
-  <int value="8" label="Ext4"/>
-  <int value="9" label="ISO9660"/>
-  <int value="10" label="UDF"/>
-</enum>
-
-<enum name="CrosEnableDriveOfflineOutcome" type="int">
-  <int value="0" label="Success: Offline mode enabled"/>
-  <int value="1" label="Failure: Hosted app page timed out"/>
-  <int value="2" label="Failure: Hosted app page load failed"/>
-  <int value="3" label="Failure: Not a regular user account"/>
-  <int value="4" label="Failure: Drive app not installed"/>
-  <int value="5" label="Failure: Background page already exists"/>
-</enum>
-
-<enum name="CrosEventEnum" type="int">
-  <int value="0" label="ModemManagerCommandSendFailure"/>
-  <int value="1" label="HwWatchdogReboot"/>
-  <int value="2" label="Cras.NoCodecsFoundAtBoot"/>
-  <int value="3" label="Chaps.DatabaseCorrupted"/>
-  <int value="4" label="Chaps.DatabaseRepairFailure"/>
-  <int value="5" label="Chaps.DatabaseCreateFailure"/>
-  <int value="6" label="Attestation.OriginSpecificExhausted"/>
-  <int value="7" label="SpringPowerSupply.Original.High"/>
-  <int value="8" label="SpringPowerSupply.Other.High"/>
-  <int value="9" label="SpringPowerSupply.Original.Low"/>
-  <int value="10" label="SpringPowerSupply.ChargerIdle"/>
-  <int value="11" label="TPM.NonZeroDictionaryAttackCounter"/>
-  <int value="12" label="TPM.EarlyResetDuringCommand"/>
-  <int value="13" label="VeyronEmmcUpgrade.Success"/>
-  <int value="14" label="VeyronEmmcUpgrade.WaitForKernelRollup"/>
-  <int value="15" label="VeyronEmmcUpgrade.WaitForFirmwareRollup"/>
-  <int value="16" label="VeyronEmmcUpgrade.BadEmmcProperties"/>
-  <int value="17" label="VeyronEmmcUpgrade.FailedDiskAccess"/>
-  <int value="18" label="VeyronEmmcUpgrade.FailedWPEnable"/>
-  <int value="19" label="VeyronEmmcUpgrade.SignatureDetected"/>
-  <int value="20" label="Watchdog.StartupFailed"/>
-</enum>
-
-<enum name="CrosFirstRunTutorialCompletionType" type="int">
-  <int value="0" label="Was not finished"/>
-  <int value="1" label="Finished with &quot;Got It&quot; button"/>
-  <int value="2" label="Finished with &quot;Keep Exploring&quot; button"/>
-</enum>
-
-<enum name="CrosShelfClickTarget" type="int">
-  <obsolete>
-    Deprecated as of 12/2013. Default pinned apps trial is finished.
-  </obsolete>
-  <int value="0" label="Chrome"/>
-  <int value="1" label="AppLauncher"/>
-  <int value="2" label="Gmail"/>
-  <int value="3" label="Search"/>
-  <int value="4" label="Youtube"/>
-  <int value="5" label="Doc"/>
-  <int value="6" label="Sheets"/>
-  <int value="7" label="Slides"/>
-  <int value="8" label="PlayMusic"/>
-</enum>
-
-<enum name="CrossOriginAutoplayResult" type="int">
-  <int value="0" label="Allowed"/>
-  <int value="1" label="Blocked"/>
-  <int value="2" label="PlayedWithGesture"/>
-  <int value="3" label="UserPaused"/>
-</enum>
-
-<enum name="CrosTPMDictionaryAttackResetStatusEnum" type="int">
-  <int value="0" label="Reset not necessary"/>
-  <int value="1" label="Reset attempt succeeded"/>
-  <int value="2" label="Reset attempt failed"/>
-  <int value="3" label="TPM owner delegate not allowed to reset"/>
-  <int value="4" label="TPM owner delegate does not exist"/>
-  <int value="5" label="Failed to query dictionary attack counter"/>
-</enum>
-
-<enum name="CryptohomeChecksumStatus" type="int">
-  <int value="0" label="Checksum OK"/>
-  <int value="1" label="Checksum does not exist"/>
-  <int value="2" label="Checksum read error"/>
-  <int value="3" label="Checksum mismatch"/>
-  <int value="4" label="Checksum out of sync"/>
-</enum>
-
-<enum name="CryptohomeError" type="int">
-  <int value="1" label="TPM returned TPM_E_FAIL"/>
-  <int value="2" label="TCS key load failed"/>
-  <int value="3" label="TPM dictionary defense lock is running"/>
-  <int value="4" label="Decrypt attempt but TPM key is missing"/>
-  <int value="5" label="Decrypt attempt but TPM is not owned"/>
-  <int value="6" label="Decrypt attempt but TPM is not available"/>
-  <int value="7" label="Decrypt attempt but TPM key is mismatched"/>
-  <int value="8" label="Decrypt attempt with TPM key failed (general)"/>
-  <int value="9" label="Cannot load TPM SRK"/>
-  <int value="10" label="Cannot read TPM SRK public info"/>
-  <int value="11" label="Cannot load cryptohome TPM key"/>
-  <int value="12" label="Cannot read cryptohome TPM key public info"/>
-  <int value="13"
-      label="TPM failed to load a key because of a bad key property"/>
-  <int value="14" label="Failed to load a PKCS #11 token"/>
-  <int value="15" label="Failed to encrypt with cryptohome TPM key"/>
-  <int value="16" label="TSS communication error"/>
-  <int value="17" label="TSS invalid handle"/>
-  <int value="18" label="Keyset wrapped both by TPM and Scrypt"/>
-</enum>
-
-<enum name="CryptohomeMigrationToGaiaId" type="int">
-  <int value="0" label="Not started"/>
-  <int value="1" label="Already migrated"/>
-  <int value="2" label="Success"/>
-  <int value="3" label="Failure"/>
-</enum>
-
-<enum name="CryptohomeTpmResults" type="int">
-  <int value="1" label="TPM Success"/>
-  <int value="2" label="TPM Error Authentication Fail"/>
-  <int value="3" label="TPM Error Bad Parameter"/>
-  <int value="4" label="TPM Error Bad Index"/>
-  <int value="5" label="TPM Error Audit Fail"/>
-  <int value="6" label="TPM Error Clear Disabled"/>
-  <int value="7" label="TPM Error TPM Deactivated"/>
-  <int value="8" label="TPM Error TPM Disabled"/>
-  <int value="9" label="TPM Error Failed"/>
-  <int value="10" label="TPM Error Bad Ordinal"/>
-  <int value="11" label="TPM Error Owner Install Disabled"/>
-  <int value="12" label="TPM Error Invalid KeyHandle"/>
-  <int value="13" label="TPM Error Key Not Found"/>
-  <int value="14" label="TPM Error Bad Encryption Scheme"/>
-  <int value="15" label="TPM Error Migration Authorization Fail"/>
-  <int value="16" label="TPM Error Invalid PCR Info"/>
-  <int value="17" label="TPM Error No Space To Load Key"/>
-  <int value="18" label="TPM Error No SRK"/>
-  <int value="19" label="TPM Error Invalid Encrypted Blob"/>
-  <int value="20" label="TPM Error Owner Already Set"/>
-  <int value="21" label="TPM Error Not Enough TPM Resources"/>
-  <int value="22" label="TPM Error Random String Too Short"/>
-  <int value="23" label="TPM Error TPM Out Of Space"/>
-  <int value="24" label="TPM Error Wrong PCR Value"/>
-  <int value="25" label="TPM Error Bad Parameter Size"/>
-  <int value="26" label="TPM Error No Sha1 Thread"/>
-  <int value="27" label="TPM Error Sha1 Error"/>
-  <int value="28" label="TPM Error TPM Self Test Failed"/>
-  <int value="29" label="TPM Error Second Authorization Failed"/>
-  <int value="30" label="TPM Error Bad Tag"/>
-  <int value="31" label="TPM Error IO Error"/>
-  <int value="32" label="TPM Error Encryption Error"/>
-  <int value="33" label="TPM Error Decryption Error"/>
-  <int value="34" label="TPM Error Invalid Authorization Handle"/>
-  <int value="35" label="TPM Error No Endorsement"/>
-  <int value="36" label="TPM Error Invalid Key Usage"/>
-  <int value="37" label="TPM Error Wrong Entity Type"/>
-  <int value="38" label="TPM Error Invalid Post Init Sequence"/>
-  <int value="39" label="TPM Error Invalid Signature Format"/>
-  <int value="40" label="TPM Error Bad Key Property"/>
-  <int value="41" label="TPM Error Bad Migration"/>
-  <int value="42" label="TPM Error Bad Scheme"/>
-  <int value="43" label="TPM Error Bad Data Size"/>
-  <int value="44" label="TPM Error Bad Mode Parameter"/>
-  <int value="45" label="TPM Error Bad Presence Value"/>
-  <int value="46" label="TPM Error Bad Version"/>
-  <int value="47" label="TPM Error Wrap Transport Not Allowed"/>
-  <int value="48" label="TPM Error Audit Fail Command Unsuccessful"/>
-  <int value="49" label="TPM Error Audit Fail Command Successful"/>
-  <int value="50" label="TPM Error PCR Register Not Resetable"/>
-  <int value="51" label="TPM Error PCR Register Reset Requires Locality"/>
-  <int value="52" label="TPM Error Bad Type Of Identity Blob"/>
-  <int value="53" label="TPM Error Bad Resource Type"/>
-  <int value="54" label="TPM Error Command Available Only In FIPS Mode"/>
-  <int value="55" label="TPM Error Invalid Family Id"/>
-  <int value="56" label="TPM Error No NvRam Permission"/>
-  <int value="57" label="TPM Error Signed Command Required"/>
-  <int value="58" label="TPM Error NvRam Key Not Supported"/>
-  <int value="59" label="TPM Error Authorization Conflict"/>
-  <int value="60" label="TPM Error NvRam Area Locked"/>
-  <int value="61" label="TPM Error Bad Locality"/>
-  <int value="62" label="TPM Error NvRam Area Read Only"/>
-  <int value="63" label="TPM Error NvRam Area No Write Protection"/>
-  <int value="64" label="TPM Error Family Count Mismatch"/>
-  <int value="65" label="TPM Error NvRam Area Write Locked"/>
-  <int value="66" label="TPM Error NvRam Area Bad Attributes"/>
-  <int value="67" label="TPM Error Invalid Structure"/>
-  <int value="68" label="TPM Error Key Under Owner Control"/>
-  <int value="69" label="TPM Error Bad Counter Handle"/>
-  <int value="70" label="TPM Error Not A Full Write"/>
-  <int value="71" label="TPM Error Context Gap"/>
-  <int value="72" label="TPM Error Max NvRam Writes"/>
-  <int value="73" label="TPM Error No Operator"/>
-  <int value="74" label="TPM Error Resource Missing"/>
-  <int value="75" label="TPM Error Delagte Locked"/>
-  <int value="76" label="TPM Error Delegate Family"/>
-  <int value="77" label="TPM Error Delegate Admin"/>
-  <int value="78" label="TPM Error Transport Not Exclusive"/>
-  <int value="79" label="TPM Error Owner Control"/>
-  <int value="80" label="TPM Error DAA Resources Not Available"/>
-  <int value="81" label="TPM Error DAA Input Data0"/>
-  <int value="82" label="TPM Error DAA Input Data1"/>
-  <int value="83" label="TPM Error DAA Issuer Settings"/>
-  <int value="84" label="TPM Error DAA TPM Settings"/>
-  <int value="85" label="TPM Error DAA Stage"/>
-  <int value="86" label="TPM Error DAA Issuer Validity"/>
-  <int value="87" label="TPM Error DAA Wrong W"/>
-  <int value="88" label="TPM Error Bad Handle"/>
-  <int value="89" label="TPM Error Bad Delegate"/>
-  <int value="90" label="TPM Error Bad Context Blob"/>
-  <int value="91" label="TPM Error Too Many Contexts"/>
-  <int value="92" label="TPM Error Migration Authority Signature Fail"/>
-  <int value="93" label="TPM Error Migration Destination Not Authenticated"/>
-  <int value="94" label="TPM Error Bad Migration Source"/>
-  <int value="95" label="TPM Error Bad Migration Authority"/>
-  <int value="96" label="TPM Error Permanent EK"/>
-  <int value="97" label="TPM Error CMK Ticket Bad Signature"/>
-  <int value="98" label="TPM Error No Context Space"/>
-  <int value="99" label="TPM Error TPM Busy Retry Later"/>
-  <int value="100" label="TPM Error Needs Self Test"/>
-  <int value="101" label="TPM Error Doing Self Test"/>
-  <int value="102" label="TPM Error Defend Lock Running"/>
-  <int value="103" label="TPM Error TPM Command Disabled"/>
-  <int value="104" label="TPM Error Unknown Error"/>
-  <int value="105" label="TDDL Error General Fail"/>
-  <int value="106" label="TDDL Error Bad Parameter"/>
-  <int value="107" label="TDDL Error Internal Software Error"/>
-  <int value="108" label="TDDL Error Not Implemented"/>
-  <int value="109" label="TDDL Error Key Not Found In Persistent Storage"/>
-  <int value="110" label="TDDL Error Key Already Registered"/>
-  <int value="111" label="TDDL Error Action Canceled By Request"/>
-  <int value="112" label="TDDL Error Timeout"/>
-  <int value="113" label="TDDL Error Out Of Memory"/>
-  <int value="114" label="TDDL Error Unexpected TPM Output"/>
-  <int value="115" label="TDDL Error Communication Failure"/>
-  <int value="116" label="TDDL Error TPM Unsupported Feature"/>
-  <int value="117" label="TDDL Error Connection To TPM Device Failed"/>
-  <int value="118" label="TDDL Error Device Already Opened"/>
-  <int value="119" label="TDDL Error Bad Tag"/>
-  <int value="120" label="TDDL Error Receive Buffer Too Small"/>
-  <int value="121" label="TDDL Error Command Already Completed"/>
-  <int value="122" label="TDDL Error Command Aborted"/>
-  <int value="123" label="TDDL Error Device Driver Already Closed"/>
-  <int value="124" label="TDDL Error IO Error"/>
-  <int value="125" label="TDDL Error Unknown Error"/>
-  <int value="126" label="TCS Error General Fail"/>
-  <int value="127" label="TCS Error Bad Parameter"/>
-  <int value="128" label="TCS Error Internal Software Error"/>
-  <int value="129" label="TCS Error Not Implemented"/>
-  <int value="130" label="TCS Error Key Not Found In Persistent Storage"/>
-  <int value="131" label="TCS Error Key Already Registered"/>
-  <int value="132" label="TCS Error Action Canceled By Request"/>
-  <int value="133" label="TCS Error Timeout"/>
-  <int value="134" label="TCS Error Out Of Memory"/>
-  <int value="135" label="TCS Error Unexpected TPM Output"/>
-  <int value="136" label="TCS Error Communication Failure"/>
-  <int value="137" label="TCS Error TPM Unsupported Feature"/>
-  <int value="138" label="TCS Error Key Mismatch"/>
-  <int value="139" label="TCS Error Key Load Fail"/>
-  <int value="140" label="TCS Error Key Context Reload Fail"/>
-  <int value="141" label="TCS Error Bad Memory Index"/>
-  <int value="142" label="TCS Error Bad Context Handle"/>
-  <int value="143" label="TCS Error Bad Key Handle"/>
-  <int value="144" label="TCS Error Bad Authorization Handle"/>
-  <int value="145" label="TCS Error Authorization Session Closed By Tpm"/>
-  <int value="146" label="TCS Error Invalid Key"/>
-  <int value="147" label="TCS Error Unknown Error"/>
-  <int value="148" label="TSS Error General Fail"/>
-  <int value="149" label="TSS Error Bad Parameter"/>
-  <int value="150" label="TSS Error Internal Software Error"/>
-  <int value="151" label="TSS Error Not Implemented"/>
-  <int value="152" label="TSS Error Key Not Found In Persistent Storage"/>
-  <int value="153" label="TSS Error Key Already Registered"/>
-  <int value="154" label="TSS Error Action Canceled By Request"/>
-  <int value="155" label="TSS Error Timeout"/>
-  <int value="156" label="TSS Error Out Of Memory"/>
-  <int value="157" label="TSS Error Unexpected TPM Output"/>
-  <int value="158" label="TSS Error Communication Failure"/>
-  <int value="159" label="TSS Error TPM Unsupported Feature"/>
-  <int value="160" label="TSS Error Bad Object Type"/>
-  <int value="161" label="TSS Error Bad Object Init Flag"/>
-  <int value="162" label="TSS Error Invalid Handle"/>
-  <int value="163" label="TSS Error No Core Service Connection"/>
-  <int value="164" label="TSS Error Core Service Connection Fail"/>
-  <int value="165" label="TSS Error Core Service Connection Broken"/>
-  <int value="166" label="TSS Error Invalid Hash Algorithm"/>
-  <int value="167" label="TSS Error Bad Hash Length"/>
-  <int value="168" label="TSS Error Hash Object Has No Value"/>
-  <int value="169" label="TSS Error Silent Context Needs User Input"/>
-  <int value="170" label="TSS Error Bad Attribute Flag"/>
-  <int value="171" label="TSS Error Bad Attribute Sub Flag"/>
-  <int value="172" label="TSS Error Bad Attribute Data"/>
-  <int value="173" label="TSS Error No PCR Registers Set"/>
-  <int value="174" label="TSS Error Key Not Loaded"/>
-  <int value="175" label="TSS Error Key Not Set"/>
-  <int value="176" label="TSS Error Validation Failed"/>
-  <int value="177" label="TSS Error TSP Authorization Required"/>
-  <int value="178" label="TSS Error TSP Multiple Authorization Required"/>
-  <int value="179" label="TSS Error TSP Authorization Failed"/>
-  <int value="180" label="TSS Error TSP Multiple Authorization Failed"/>
-  <int value="181" label="TSS Error Key Has No Migration Policy"/>
-  <int value="182" label="TSS Error Policy Has No Secret"/>
-  <int value="183" label="TSS Error Bad Object Access"/>
-  <int value="184" label="TSS Error Bad Encryption Scheme"/>
-  <int value="185" label="TSS Error Bad Signature Scheme"/>
-  <int value="186" label="TSS Error Encrypted Object Bad Length"/>
-  <int value="187" label="TSS Error Encrypted Object Has No Data"/>
-  <int value="188" label="TSS Error Encrypted Object Bad Type"/>
-  <int value="189" label="TSS Error Bad Key Usage"/>
-  <int value="190" label="TSS Error Verification Failed"/>
-  <int value="191" label="TSS Error No Hash Algorithm Id"/>
-  <int value="192" label="TSS Error NvRam Area Already Exists"/>
-  <int value="193" label="TSS Error NvRam Area Doesn't Exist"/>
-  <int value="194" label="TSS Error Unknown Error"/>
-</enum>
-
-<enum name="CTLogEntryInclusionCheckResult" type="int">
-  <int value="0" label="Obtained valid inclusion proof"/>
-  <int value="1" label="Failed getting inclusion proof"/>
-  <int value="2" label="Obtained inclusion proof is invalid"/>
-</enum>
-
-<enum name="CTRequirementCompliance" type="int">
-  <obsolete>
-    Deprecated 1/2016.
-  </obsolete>
-  <int value="0" label="Not Compliant"/>
-  <int value="1" label="Whitelisted"/>
-  <int value="2" label="Has enough SCTs"/>
-</enum>
-
-<enum name="D3D11InitializeResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Error initializing compiler"/>
-  <int value="2" label="Missing DLL dependency"/>
-  <int value="3" label="D3D11CreateDevice returned E_INVALIDARG"/>
-  <int value="4" label="D3D11CreateDevice returned other error"/>
-  <int value="5" label="DXGI version not supported"/>
-  <int value="6" label="Other initialization error"/>
-  <int value="7" label="D3D11CreateDevice returned E_FAIL"/>
-  <int value="8" label="D3D11CreateDevice returned E_NOTIMPL"/>
-  <int value="9" label="D3D11CreateDevice returned E_OUTOFMEMORY"/>
-  <int value="10" label="D3D11CreateDevice returned DXGI_ERROR_INVALID_CALL"/>
-  <int value="11"
-      label="D3D11CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING"/>
-  <int value="12"
-      label="D3D11CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING"/>
-  <int value="13"
-      label="D3D11CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE"/>
-  <int value="14" label="D3D11CreateDevice returned DXGI_ERROR_DEVICE_HUNG"/>
-</enum>
-
-<enum name="D3D9InitializeResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Error initializing compiler"/>
-  <int value="2" label="Missing DLL dependency"/>
-  <int value="3" label="Error creating device"/>
-  <int value="4" label="Shader version not supported"/>
-  <int value="5" label="StretchRect from textures not supported"/>
-  <int value="6" label="Device lost of out-of-memory error"/>
-  <int value="7" label="Other initialization error"/>
-</enum>
-
-<enum name="D3DFeatureLevel" type="int">
-  <int value="0" label="D3D_FEATURE_LEVEL_INVALID"/>
-  <int value="1" label="D3D_FEATURE_LEVEL_9_3"/>
-  <int value="2" label="D3D_FEATURE_LEVEL_10_0"/>
-  <int value="3" label="D3D_FEATURE_LEVEL_10_1"/>
-  <int value="4" label="D3D_FEATURE_LEVEL_11_0"/>
-  <int value="5" label="D3D_FEATURE_LEVEL_11_1"/>
-</enum>
-
-<enum name="DailyEventIntervalType" type="int">
-  <int value="0" label="First Run"/>
-  <int value="1" label="Day Elapsed"/>
-  <int value="2" label="Clock Changed"/>
-</enum>
-
-<enum name="DangerousFile.Reason" type="int">
-  <int value="0" label="Safe Browsing is not available"/>
-  <int value="1" label="Safe Browsing returns UNKOWN"/>
-  <int value="2" label="Safe Browsing returns SAFE"/>
-</enum>
-
-<enum name="DarkResumeScanRetryResult" type="int">
-  <int value="0" label="Not Connected"/>
-  <int value="1" label="Connected"/>
-</enum>
-
-<enum name="DarkResumeUnmatchedScanResultReceived" type="int">
-  <int value="0" label="False (all scan results match)"/>
-  <int value="1" label="True (at least one unmatched scan result)"/>
-</enum>
-
-<enum name="DarkResumeWakeReason" type="int">
-  <int value="0" label="Unsupported (or not reported)"/>
-  <int value="1" label="Pattern"/>
-  <int value="2" label="Disconnect"/>
-  <int value="3" label="SSID"/>
-</enum>
-
-<enum name="DataChannelCounters" type="int">
-  <int value="0" label="Channel created."/>
-  <int value="1" label="Channel reached Open state."/>
-  <int value="2" label="Channel is reliable."/>
-  <int value="3" label="Channel is ordered."/>
-  <int value="4" label="Channel is negotiated."/>
-</enum>
-
-<enum name="DataReductionProxyAutoLoFiAccuracy" type="int">
-  <int value="0"
-      label="Estimated network quality as slow and was actually slow"/>
-  <int value="1"
-      label="Estimated network quality as slow and was actually not slow"/>
-  <int value="2"
-      label="Estimated network quality as not slow and was actually slow"/>
-  <int value="3"
-      label="Estimated network quality as not slow and was actually not slow"/>
-</enum>
-
-<enum name="DataReductionProxyAutoLoFiRequestHeaderState" type="int">
-  <int value="0" label="Empty to Empty"/>
-  <int value="1" label="Empty to Low"/>
-  <int value="2" label="Low to Empty"/>
-  <int value="3" label="Low to Low"/>
-</enum>
-
-<enum name="DataReductionProxyBypassEventType_Deprecated" type="int">
-  <int value="0" label="Short bypass"/>
-  <int value="1" label="Long bypass"/>
-  <int value="2" label="Bypass due to internal server error"/>
-  <int value="3" label="Bypass due to other error"/>
-  <int value="4" label="Bypass due to missing via header"/>
-  <int value="5" label="Bypass due to 4xx response"/>
-  <int value="6"
-      label="Bypass due to 407 response from proxy without a challenge"/>
-</enum>
-
-<enum name="DataReductionProxyBypassType" type="int">
-  <int value="0"
-      label="Bypass due to explicit instruction for the current request"/>
-  <int value="1"
-      label="Short bypass: Bypass the proxy for less than one minute"/>
-  <int value="2"
-      label="Medium bypass: Bypass the proxy for one to five minutes"/>
-  <int value="3"
-      label="Long bypass: Bypass the proxy for more than five minutes"/>
-  <int value="4" label="Bypass due to a 4xx missing via header"/>
-  <int value="5"
-      label="Bypass due to other missing via header, excluding 4xx errors"/>
-  <int value="6"
-      label="Bypass due to 407 response from proxy without a challenge"/>
-  <int value="7" label="Bypass due to a 500 internal server error"/>
-  <int value="8" label="Bypass because the request URI was too long"/>
-  <int value="9" label="Bypass due to a 503 response"/>
-  <int value="10" label="Bypass due to any network error"/>
-</enum>
-
-<enum name="DataReductionProxyConfigServiceAuthExpiredSessionKey" type="int">
-  <int value="0"
-      label="Current session key does not match the key in the request"/>
-  <int value="1" label="Current session key matches the key in the request"/>
-</enum>
-
-<enum name="DataReductionProxyConfigServiceHTTPRequests" type="int">
-  <int value="0" label="Request did not go through data saver proxy"/>
-  <int value="1" label="Request went through data saver proxy"/>
-</enum>
-
-<enum name="DataReductionProxyEnabledState" type="int">
-  <int value="0" label="Off-to-On"/>
-  <int value="1" label="On-to-Off"/>
-</enum>
-
-<enum name="DataReductionProxyLoFiImplicitOptOutAction" type="int">
-  <int value="0" label="Lo-Fi disabled for the remainder of the session"/>
-  <int value="1" label="Lo-Fi disabled until next opt out epoch"/>
-  <int value="2" label="Next implict opt out epoch, Lo-Fi re-enabled"/>
-</enum>
-
-<enum name="DataReductionProxyLoFiSessionState" type="int">
-  <int value="0" label="Lo-Fi was used"/>
-  <int value="1"
-      label="Lo-Fi was not used because the network quality was always good"/>
-  <int value="2"
-      label="Lo-Fi was not used because the user implicitly permanently opted
-             out"/>
-  <int value="3"
-      label="Lo-Fi was not used because the user implicitly temporarily opted
-             out"/>
-</enum>
-
-<enum name="DataReductionProxyLoFiTransformationType" type="int">
-  <int value="0" label="Pageloads that are lite pages"/>
-  <int value="1"
-      label="Pageloads that requested lite pages, but did not have the
-             transformation"/>
-</enum>
-
-<enum name="DataReductionProxyLoFiUIAction" type="int">
-  <int value="0" label="'Load images' snackbar shown"/>
-  <int value="1" label="'Load images' snackbar clicked"/>
-  <int value="2" label="'Load image' context menu item shown"/>
-  <int value="3" label="'Load image' context menu item clicked"/>
-  <int value="4"
-      label="Pages where the user has clicked 'Load image' at least once"/>
-  <int value="5" label="'Load images' context menu item shown"/>
-  <int value="6" label="'Load images' context menu item clicked"/>
-</enum>
-
-<enum name="DataReductionProxyNetworkChangeEvent" type="int">
-  <int value="0" label="IP Address Change"/>
-  <int value="1" label="Proxy disabled on VPN (deprecated)"/>
-</enum>
-
-<enum name="DataReductionProxyProbeURLFetchResult" type="int">
-  <int value="0" label="Internet disconnected"/>
-  <int value="1" label="Probe failed, proxy disabled"/>
-  <int value="2" label="Probe failed, proxy already disabled"/>
-  <int value="3" label="Probe succeeded, proxy enabled"/>
-  <int value="4" label="Probe succeeded, proxy already enabled"/>
-  <int value="5" label="Probe started, proxy disabled"/>
-</enum>
-
-<enum name="DataReductionProxyPromoAction" type="int">
-  <int value="0" label="Dismissed from first screen"/>
-  <int value="1" label="Dismissed from second screen"/>
-  <int value="2" label="Enabled from first screen"/>
-  <int value="3" label="Enabled from second screen"/>
-</enum>
-
-<enum name="DataReductionProxyProxyPrefMigrationResult" type="int">
-  <int value="0" label="Proxy pref not cleared"/>
-  <int value="1" label="Empty proxy pref was cleared"/>
-  <int value="2" label="System proxy pref was cleared"/>
-  <int value="3" label="Proxy pref containing a DRP was cleared"/>
-  <int value="4"
-      label="Proxy pref containing a *.googlezip.net proxy was cleared"/>
-  <int value="5"
-      label="Proxy pref of an embedded PAC script containing a
-             *.googlezip.net proxy was cleared"/>
-</enum>
-
-<enum name="DataReductionProxyProxySchemeUsed" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="HTTP"/>
-  <int value="2" label="HTTPS"/>
-  <int value="3" label="QUIC"/>
-</enum>
-
-<enum name="DataReductionProxyQuicDefaultAlternativeProxy" type="int">
-  <int value="0" label="QUIC proxy was available"/>
-  <int value="1" label="QUIC proxy was marked as broken"/>
-  <int value="2"
-      label="No supportable QUIC proxy was available in the list of data
-             reduction proxies"/>
-</enum>
-
-<enum name="DataReductionProxyQuicProxyStatus" type="int">
-  <int value="0" label="QUIC proxy was available"/>
-  <int value="1"
-      label="Resolved HTTPS data reduction proxy does not support QUIC"/>
-  <int value="2" label="QUIC proxies have been marked as broken"/>
-</enum>
-
-<enum name="DataReductionProxyResourceContentType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Media"/>
-</enum>
-
-<enum name="DataReductionProxyResponseProxyServerStatus" type="int">
-  <int value="0" label="Empty proxy server"/>
-  <int value="1" label="DRP proxy server"/>
-  <int value="2" label="Non-DRP proxy server without DRP via header"/>
-  <int value="3" label="Non-DRP proxy server with DRP via header"/>
-</enum>
-
-<enum name="DataReductionProxySettingsConversion" type="int">
-  <int value="0" label="OFF to OFF"/>
-  <int value="1" label="OFF to ON"/>
-  <int value="2" label="ON to OFF"/>
-  <int value="3" label="ON to ON"/>
-</enum>
-
-<enum name="DataReductionProxyStartupState" type="int">
-  <int value="0" label="Proxy not available"/>
-  <int value="1" label="Proxy available but not enabled"/>
-  <int value="2" label="Proxy available and enabled"/>
-</enum>
-
-<enum name="DataReductionProxyStoreStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="NOT_FOUND"/>
-  <int value="2" label="CORRUPTED"/>
-  <int value="3" label="IO_ERROR"/>
-  <int value="4" label="MISC_ERROR"/>
-</enum>
-
-<enum name="DataReductionProxyUIAction" type="int">
-  <int value="0" label="Enabled directly from the Second Run promo"/>
-  <int value="1" label="Enabled then disabled from promo (iOS-only)"/>
-  <int value="2"
-      label="Second Run promo settings link clicked, then enabled from
-             settings"/>
-  <int value="3"
-      label="Second Run promo settings link clicked, but not enabled from
-             settings"/>
-  <int value="4" label="Second Run promo dismissed (proxy not enabled)"/>
-  <int value="5"
-      label="Arrived at settings menu by another path: entered off, exited
-             off"/>
-  <int value="6"
-      label="Arrived at settings menu by another path: entered off, exited on"/>
-  <int value="7"
-      label="Arrived at settings menu by another path: entered on, exited off"/>
-  <int value="8"
-      label="Arrived at settings menu by another path: entered on, exited on"/>
-  <int value="9" label="Enabled directly from the First Run Experience"/>
-  <int value="10" label="Disabled directly from the First Run Experience"/>
-  <int value="11" label="Enabled directly from the Infobar promo"/>
-  <int value="12" label="InfoBar promo dismissed (proxy not enabled)"/>
-  <int value="13"
-      label="Snackbar promo link clicked, but no action was taken (the proxy
-             remained enabled)"/>
-  <int value="14"
-      label="Snackbar promo link clicked, and the proxy was disabled"/>
-  <int value="15" label="Snackbar promo dismissed (no action taken)"/>
-</enum>
-
-<enum name="DataUrlMimeType" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="HTML"/>
-  <int value="2" label="XHTML"/>
-  <int value="3" label="PDF"/>
-  <int value="4" label="SVG"/>
-</enum>
-
-<enum name="DataUsageReportSubmissionResult" type="int">
-  <int value="0" label="Successful"/>
-  <int value="1" label="Failed"/>
-  <int value="2" label="Timed out"/>
-  <int value="3" label="Lost"/>
-</enum>
-
-<enum name="DataUsageUIAction" type="int">
-  <int value="0" label="Data use tracking started snackbar shown"/>
-  <int value="1"
-      label="Data use tracking started snackbar 'More' link clicked"/>
-  <int value="2" label="Data use tracking ended snackbar shown"/>
-  <int value="3" label="Data use tracking ended snackbar 'More' link clicked"/>
-  <int value="4" label="Data use tracking ended dialog shown"/>
-  <int value="5"
-      label="Data use tracking ended dialog 'Continue' button clicked"/>
-  <int value="6"
-      label="Data use tracking ended dialog 'Cancel' button clicked"/>
-  <int value="7"
-      label="Data use tracking ended dialog 'Learn more' link clicked"/>
-  <int value="8" label="Data use tracking ended dialog opted out"/>
-</enum>
-
-<enum name="DataUseContentType" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Mainframe HTML"/>
-  <int value="2" label="Non Mainframe HTML"/>
-  <int value="3" label="CSS"/>
-  <int value="4" label="Image"/>
-  <int value="5" label="Javascript"/>
-  <int value="6" label="Font"/>
-  <int value="7" label="Audio - App in background"/>
-  <int value="8" label="Audio - Tab in background"/>
-  <int value="9" label="Audio - Tab in foreground"/>
-  <int value="10" label="Video - App in background"/>
-  <int value="11" label="Video - Tab in background"/>
-  <int value="12" label="Video - Tab in foreground"/>
-</enum>
-
-<enum name="DataUseServices" type="int">
-  <int value="0" label="Not Tagged"/>
-  <int value="1" label="Suggestions"/>
-  <int value="2" label="Translate"/>
-  <int value="3" label="Sync"/>
-  <int value="4" label="Omnibox"/>
-  <int value="5" label="Invalidation"/>
-  <int value="6" label="Rappor"/>
-  <int value="7" label="Variations"/>
-  <int value="8" label="UMA"/>
-  <int value="9" label="Domain Reliability"/>
-  <int value="10" label="Profile Downloader"/>
-  <int value="11" label="Google URL Tracker"/>
-  <int value="12" label="Autofill"/>
-  <int value="13" label="Policy"/>
-  <int value="14" label="Spell Checker"/>
-  <int value="15" label="NTPSnippets (obsolete)"/>
-  <int value="16" label="Safe Browsing"/>
-  <int value="17" label="Data Reduction Proxy"/>
-  <int value="18" label="Precache"/>
-  <int value="19" label="NTPTiles"/>
-  <int value="20" label="Feedback Uploader"/>
-  <int value="21" label="Tracing Uploader"/>
-  <int value="22" label="DOM Distiller"/>
-  <int value="23" label="Cloud Print"/>
-  <int value="24" label="Search Provider Logos"/>
-  <int value="25" label="Update Client"/>
-  <int value="26" label="GCM Driver"/>
-  <int value="27" label="Web History Service"/>
-  <int value="28" label="Network Time Tracker"/>
-  <int value="29" label="Supervised User"/>
-  <int value="30" label="Image Fetcher Untagged"/>
-  <int value="31" label="GAIA"/>
-  <int value="32" label="Captive Portal"/>
-  <int value="33" label="Web Resource Service"/>
-  <int value="34" label="Signin"/>
-  <int value="35" label="NTPSnippets suggestions"/>
-  <int value="36" label="NTPSnippets thumbnails"/>
-  <int value="37" label="Doodle"/>
-  <int value="38" label="UKM"/>
-  <int value="39" label="Payments"/>
-</enum>
-
-<enum name="DecodedImageOrientation" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Top Left"/>
-  <int value="2" label="Top Right"/>
-  <int value="3" label="Bottom Right"/>
-  <int value="4" label="Bottom Left"/>
-  <int value="5" label="Left Top"/>
-  <int value="6" label="Right Top"/>
-  <int value="7" label="Right Bottom"/>
-  <int value="8" label="Left Bottom"/>
-</enum>
-
-<enum name="DecodedImageType" type="int">
-  <int value="0" label="kImageUnknown"/>
-  <int value="1" label="kImageJPEG"/>
-  <int value="2" label="kImagePNG"/>
-  <int value="3" label="kImageGIF"/>
-  <int value="4" label="kImageWebP"/>
-  <int value="5" label="kImageICO"/>
-  <int value="6" label="kImageBMP"/>
-</enum>
-
-<enum name="DefaultBrowserAsyncAttemptResult" type="int">
-  <obsolete>
-    Deprecated 2015/11. Renamed to SetDefaultAttemptResult.
-  </obsolete>
-  <int value="0" label="Success">No errors encountered.</int>
-  <int value="1" label="Already default">
-    Chrome was already the default web client. This counts as a successful
-    attempt.
-  </int>
-  <int value="2" label="Failure">
-    Chrome was not set as the default web client.
-  </int>
-  <int value="3" label="Abandoned">
-    The attempt was abandoned because the observer was destroyed.
-  </int>
-  <int value="4" label="Launch failure">
-    Failed to launch the process to set Chrome as the default web client
-    asynchronously.
-  </int>
-  <int value="5" label="Other worker">
-    Another worker is already in progress to make Chrome the default web client.
-  </int>
-  <int value="6" label="Retry">
-    The user initiated another attempt while the asynchronous operation was
-    already in progress.
-  </int>
-</enum>
-
-<enum name="DefaultBrowserInfoBarUserInteraction" type="int">
-  <int value="0" label="Accept">
-    The user clicked the &quot;Set as default&quot; button.
-  </int>
-  <int value="1" label="Cancel">
-    The user clicked the &quot;Don't ask again&quot; button.
-  </int>
-  <int value="2" label="Ignore">
-    The user did not interact with the info bar.
-  </int>
-  <int value="3" label="Dismiss">The user explicitly closed the infobar.</int>
-</enum>
-
-<enum name="DefaultBrowserState" type="int">
-  <int value="0" label="Not Default"/>
-  <int value="1" label="Default"/>
-  <int value="2" label="Unknown"/>
-</enum>
-
-<enum name="DefaultSearchChangeOrigin" type="int">
-  <int value="0" label="DSP changed by synced Pref"/>
-  <int value="1" label="DSP changed by Sync ADD"/>
-  <int value="2" label="DSP changed by Sync DELETE"/>
-  <int value="3" label="DSP changed by managed policy switch"/>
-  <int value="4" label="DSP changed unintentionally by Sync"/>
-  <int value="5" label="DSP changed by other non-Sync origin"/>
-  <int value="6" label="DSP changed by Profile Reset feature"/>
-  <int value="7" label="DSP changed by the extension Override Settings API"/>
-  <int value="8" label="DSP set to new engine with no previous value in prefs"/>
-</enum>
-
-<enum name="DefaultTouchBarActions" type="int">
-  <int value="0" label="Back"/>
-  <int value="1" label="Forward"/>
-  <int value="2" label="Stop"/>
-  <int value="3" label="Reload"/>
-  <int value="4" label="Home"/>
-  <int value="5" label="Search"/>
-  <int value="6" label="Star"/>
-  <int value="7" label="New Tab"/>
-</enum>
-
-<enum name="DefaultWebClientState" type="int">
-  <int value="0" label="Not default">Chrome is not the default web client.</int>
-  <int value="1" label="Is default">Chrome is the default web client.</int>
-  <int value="2" label="Unknown default">
-    Chrome is in a unknown default state.
-  </int>
-</enum>
-
-<enum name="DelayBasedEchoQuality" type="int">
-  <int value="0" label="Good delays">
-    Echo Cancellation quality most likely good.
-  </int>
-  <int value="1" label="Spurious delays">Echo Cancellation may suffer.</int>
-  <int value="2" label="Poor delays">
-    Echo Cancellation likely fails unless user is using headset.
-  </int>
-  <int value="3" label="Invalid delays">Insufficient amount of data.</int>
-</enum>
-
-<enum name="DeprecatedAcceleratorUsage" type="int">
-  <int value="0" label="Deprecated key accelerator is used"/>
-  <int value="1" label="New key accelerator is used"/>
-</enum>
-
-<enum name="DesktopCaptureCounters" type="int">
-  <int value="0" label="Screen capturer created."/>
-  <int value="1" label="Window capturer created."/>
-  <int value="2" label="First screen capture call succeeded."/>
-  <int value="3" label="First screen capture call failed."/>
-  <int value="4" label="First window capture call succeeded."/>
-  <int value="5" label="First window capture call failed."/>
-  <int value="6" label="Tab video capturer created."/>
-  <int value="7" label="Tab audio capturer created."/>
-  <int value="8" label="System loopback audio capturer created."/>
-  <int value="9" label="Screen capturer created together with audio capturer."/>
-  <int value="10" label="Screen capturer created without audio capturer."/>
-  <int value="11" label="Tab capturer created together with audio capturer."/>
-  <int value="12" label="Tab capturer created without audio capturer."/>
-</enum>
-
-<enum name="DesktopIOSPromotionDismissalReason" type="int">
-  <int value="0" label="Focus lost."/>
-  <int value="1" label="No thanks clicked."/>
-  <int value="2" label="Close button clicked."/>
-  <int value="3" label="Send SMS clicked."/>
-</enum>
-
-<enum name="DesktopIOSPromotionEntryPoint" type="int">
-  <int value="1" label="Save Passwords new bubble."/>
-  <int value="2" label="Bookmarks new bubble."/>
-  <int value="3" label="Bookmarks footnote."/>
-  <int value="4" label="HistoryPage."/>
-</enum>
-
-<enum name="DesktopSearchRedirectionInfobarCloseAction" type="int">
-  <int value="0" label="Clicked the 'Manage search settings' link"/>
-  <int value="1" label="Clicked the dismiss button"/>
-  <int value="2" label="InfoBar dismissed implicitly (no interaction)"/>
-</enum>
-
-<enum name="DesktopSearchURLAction" type="int">
-  <int value="0" label="No redirection - Feature disabled"/>
-  <int value="1" label="No redirection - Default search engine is Bing"/>
-  <int value="2" label="No redirection - Default search engine is invalid"/>
-  <int value="3" label="Redirection to the default search engine"/>
-</enum>
-
-<enum name="DeviceIdMismatch" type="int">
-  <int value="0" label="BOTH_NONEMPTY"/>
-  <int value="1" label="SYNC_EMPTY"/>
-  <int value="2" label="PREF_EMPTY"/>
-</enum>
-
-<enum name="DeviceOrientationSensorTypeAndroid" type="int">
-  <int value="0" label="Not Available"/>
-  <int value="1" label="ROTATION_VECTOR"/>
-  <int value="2" label="ACCELEROMETER + MAGNETIC_FIELD"/>
-  <int value="3" label="GAME_ROTATION_VECTOR"/>
-</enum>
-
-<enum name="DevicePermissionActions" type="int">
-  <int value="0" label="AllowHttps"/>
-  <int value="1" label="AllowHttp"/>
-  <int value="2" label="Deny"/>
-  <int value="3" label="Cancel"/>
-</enum>
-
-<enum name="DevicesPageEvents" type="int">
-  <int value="0" label="OPENED"/>
-  <int value="1" label="LOG_IN_STARTED_FROM_REGISTER_PROMO"/>
-  <int value="2" label="LOG_IN_STARTED_FROM_DEVICE_LIST_PROMO"/>
-  <int value="3" label="ADD_PRINTER_CLICKED"/>
-  <int value="4" label="REGISTER_CLICKED"/>
-  <int value="5" label="REGISTER_CONFIRMED"/>
-  <int value="6" label="REGISTER_SUCCESS"/>
-  <int value="7" label="REGISTER_CANCEL"/>
-  <int value="8" label="REGISTER_FAILURE"/>
-  <int value="9" label="MANAGE_CLICKED"/>
-  <int value="10" label="REGISTER_CANCEL_ON_PRINTER"/>
-  <int value="11" label="REGISTER_TIMEOUT"/>
-  <int value="12" label="LOG_IN_STARTED_FROM_REGISTER_OVERLAY_PROMO"/>
-</enum>
-
-<enum name="DeviceTechnologyType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Ethernet"/>
-  <int value="2" label="WiFi"/>
-  <int value="3" label="WiMax"/>
-  <int value="4" label="Cellular"/>
-</enum>
-
-<enum name="DevToolsAction" type="int">
-  <int value="1" label="Window docked"/>
-  <int value="2" label="Window undocked"/>
-  <int value="3" label="Scripts breakpoint set"/>
-  <int value="4" label="Timeline started"/>
-  <int value="5" label="CPU profile taken"/>
-  <int value="6" label="Heap profile taken"/>
-  <int value="7" label="Audits started"/>
-  <int value="8" label="Console evaluated"/>
-  <int value="9" label="File saved in workspace"/>
-  <int value="10" label="Device mode enabled"/>
-  <int value="11" label="Animations playback rate changed"/>
-  <int value="12" label="Revision applied"/>
-  <int value="13" label="File system directory content received"/>
-  <int value="14" label="Style rule edited"/>
-  <int value="15" label="Command evaluated in console panel"/>
-  <int value="16" label="DOM properties expanded"/>
-  <int value="17" label="Resized view in responsive mode"/>
-  <int value="18" label="Timeline started (page reload)"/>
-  <int value="19" label="Connect to node.js from frontend"/>
-  <int value="20" label="Connect to node.js directly (paste link from CLI)"/>
-  <int value="21" label="CPU throttling enabled"/>
-  <int value="22" label="CPU profile node focused"/>
-  <int value="23" label="CPU profile node excluded"/>
-  <int value="24" label="File picker file selected"/>
-  <int value="25" label="Command menu command executed"/>
-  <int value="26" label="Change inspected node in elements panel"/>
-  <int value="27" label="Style rule copied"/>
-</enum>
-
-<enum name="DevToolsPanel" type="int">
-  <int value="1" label="Elements"/>
-  <int value="2" label="Resources"/>
-  <int value="3" label="Network"/>
-  <int value="4" label="Scripts"/>
-  <int value="5" label="Timeline"/>
-  <int value="6" label="Heap profiler"/>
-  <int value="7" label="Audits"/>
-  <int value="8" label="Console"/>
-  <int value="9" label="Layers"/>
-  <int value="10" label="Drawer - Console"/>
-  <int value="11" label="Drawer - Animations"/>
-  <int value="12" label="Drawer - Network config"/>
-  <int value="13" label="Drawer - Rendering"/>
-  <int value="14" label="Drawer - Sensors"/>
-  <int value="15" label="Drawer - Search"/>
-  <int value="16" label="Security"/>
-  <int value="17" label="JavaScript Profiler"/>
-</enum>
-
-<enum name="DevToolsSetting" type="int">
-  <int value="1" label="Elements DOM wrap on"/>
-  <int value="2" label="Elements DOM wrap off"/>
-  <int value="3" label="Console monitor XHR on"/>
-  <int value="4" label="Console monitor XHR off"/>
-  <int value="5" label="Console preserve log on"/>
-  <int value="6" label="Console preserve log off"/>
-  <int value="7" label="Network show large rows on"/>
-  <int value="8" label="Network show large rows off"/>
-</enum>
-
-<enum name="DiagnosticsRecoveryRun" type="int">
-  <int value="0" label="Recovery not run"/>
-  <int value="1" label="Recovery run because of crash"/>
-  <int value="2" label="Recovery run by user"/>
-</enum>
-
-<enum name="DiagnosticsResult" type="int">
-  <int value="0" label="Not run (regular startup)"/>
-  <int value="1" label="Success (crash startup)"/>
-  <int value="2" label="Failure (crash startup)"/>
-  <int value="3" label="Skipped (crash startup)"/>
-</enum>
-
-<enum name="DiagnosticsTestName" type="int">
-  <int value="0" label="Conflicting DLLs Test"/>
-  <int value="1" label="Disk Space Test"/>
-  <int value="2" label="Install Type Test"/>
-  <int value="3" label="JSON Bookmarks Test"/>
-  <int value="4" label="JSON Local State Test"/>
-  <int value="5" label="JSON Preferences Test"/>
-  <int value="6" label="Operating System Test"/>
-  <int value="7" label="Path Dictionaries Test"/>
-  <int value="8" label="Path Local State Test"/>
-  <int value="9" label="Path Resources Test"/>
-  <int value="10" label="Path User Data Test"/>
-  <int value="11" label="Version Test"/>
-  <int value="12" label="SQLite Integrity App Cache Test"/>
-  <int value="13" label="SQLite Integrity Archived History Test (obsolete)"/>
-  <int value="14" label="SQLite Integrity Cookie Test"/>
-  <int value="15" label="SQLite Integrity Database Tracker Test"/>
-  <int value="16" label="SQLite Integrity History Test"/>
-  <int value="17" label="SQLite Integrity Nss Cert Test"/>
-  <int value="18" label="SQLite Integrity Nss Key Test"/>
-  <int value="19" label="SQLite Integrity Thumbnails Test (obsolete)"/>
-  <int value="20" label="SQLite Integrity Web Data Test"/>
-  <int value="21" label="SQLite Integrity Favicons Test"/>
-  <int value="22" label="SQLite Integrity Top Sites Test"/>
-</enum>
-
-<enum name="DifferentPrimaryAccounts" type="int">
-  <int value="0" label="Primary Accounts the same"/>
-  <int value="1" label="(obsolete) Primary Accounts different"/>
-  <int value="2" label="No GAIA account in cookie jar"/>
-  <int value="3" label="Primary accounts present but different"/>
-</enum>
-
-<enum name="DirectoryDatabaseRepairResult" type="int">
-  <int value="0" label="Succeeded"/>
-  <int value="1" label="Failed"/>
-</enum>
-
-<enum name="DirectWriteFontFallbackResult" type="int">
-  <int value="0" label="Failed: no font matched"/>
-  <int value="1" label="Success: mapped from cache"/>
-  <int value="2" label="Success: mapped using IPC"/>
-</enum>
-
-<enum name="DirectWriteFontLoaderType" type="int">
-  <int value="0" label="File: system font directory"/>
-  <int value="1" label="File: outside sandbox whitelist"/>
-  <int value="2" label="Non-file loader"/>
-  <int value="3" label="Font was missing require styles"/>
-</enum>
-
-<enum name="DirectWriteFontProxyError" type="int">
-  <int value="0" label="FindFamily: send failed"/>
-  <int value="1" label="GetFamilyCount: send failed"/>
-  <int value="2" label="CreateEnumeratorFromKey: invalid key"/>
-  <int value="3" label="CreateEnumeratorFromKey: family index out of range"/>
-  <int value="4" label="GetFontFiles: send failed"/>
-  <int value="5" label="FontFileStream: failed to created mapped file"/>
-</enum>
-
-<enum name="DirectWriteLoadFamilyResult" type="int">
-  <int value="0" label="Success: single family"/>
-  <int value="1" label="Success: matched from collection"/>
-  <int value="2" label="Error: multiple families"/>
-  <int value="3" label="Error: no families"/>
-  <int value="4" label="Error: failed to create collection"/>
-</enum>
-
-<enum name="DirectWriteMessageFilterError" type="int">
-  <int value="0" label="OnGetFontFiles: GetFont failed"/>
-  <int value="1" label="OnGetFontFiles: AddFilesForFont failed"/>
-  <int value="2" label="OnGetFontFiles: GetFontFamily failed"/>
-  <int value="3" label="InitializeDirectWrite: GetSystemFontCollection failed"/>
-  <int value="4" label="MapCharacters: could not find family"/>
-  <int value="5" label="AddFilesForFont: create font face failed"/>
-  <int value="6" label="AddFilesForFont: get font file count failed"/>
-  <int value="7" label="AddFilesForFont: get font files failed"/>
-  <int value="8" label="AddFilesForFont: get loader failed"/>
-  <int value="9" label="AddFilesForFont: QueryInterface failed"/>
-  <int value="10" label="AddLocalFile: get reference key failed"/>
-  <int value="11" label="AddLocalFile: get path length failed"/>
-  <int value="12" label="AddLocalFile: get path failed"/>
-</enum>
-
-<enum name="DistillableType" type="int">
-  <int value="0" label="Not distillable"/>
-  <int value="1" label="Non-mobile-friendly distillable"/>
-  <int value="2" label="Mobile-friendly distillable"/>
-</enum>
-
-<enum name="DistillableType2" type="int">
-  <int value="0" label="Non-mobile-friendly, not distillable"/>
-  <int value="1" label="Mobile-friendly, not distillable"/>
-  <int value="2" label="Non-mobile-friendly, distillable"/>
-  <int value="3" label="Mobile-friendly, distillable"/>
-</enum>
-
-<enum name="DistillRejection" type="int">
-  <int value="0" label="Not an article"/>
-  <int value="1" label="Mobile-friendly"/>
-  <int value="2" label="Domain is blacklisted"/>
-  <int value="3" label="Predicted to be short"/>
-  <int value="4" label="Not rejected"/>
-</enum>
-
-<enum name="DllHash" type="int">
-<!-- Generated by chrome_elf/dll_hash/dll_hash_main.cc -->
-
-  <int value="26393601" label="wajam_goblin_64.dll"/>
-  <int value="44551499" label="949ba8b6a9.dll"/>
-  <int value="79515758" label="crdli.dll"/>
-  <int value="114416212" label="virtualcamera.ax"/>
-  <int value="141490347" label="minisp.dll"/>
-  <int value="231333778" label="libapi2hook.dll"/>
-  <int value="272828651" label="activedetect64.dll"/>
-  <int value="295718620" label="cespy.dll"/>
-  <int value="313484566" label="vntsrv.dll"/>
-  <int value="447643466" label="libinject.dll"/>
-  <int value="604217493" label="explorerex.dll"/>
-  <int value="684728064" label="offerswizarddll.dll"/>
-  <int value="685821492" label="smdmf.dll"/>
-  <int value="750761702" label="systemk.dll"/>
-  <int value="777975221" label="activedetect32.dll"/>
-  <int value="803283353" label="lmrn.dll"/>
-  <int value="839518885" label="libinject2.dll"/>
-  <int value="851064219" label="wajam_goblin.dll"/>
-  <int value="888528780" label="ycwebcamerasource.ax"/>
-  <int value="989714890" label="datamngr.dll"/>
-  <int value="1114335935" label="libredir2.dll"/>
-  <int value="1120295191" label="windowsapihookdll64.dll"/>
-  <int value="1148809156" label="chrmxtn.dll"/>
-  <int value="1270622879" label="hk.dll"/>
-  <int value="1409376135" label="windowsapihookdll32.dll"/>
-  <int value="1617407227" label="spappsv32.dll"/>
-  <int value="1671476533" label="crdli64.dll"/>
-  <int value="1680432366" label="virtualCamera.ax"/>
-  <int value="1736709911" label="bitguard.dll"/>
-  <int value="1763208296" label="safetynut.dll"/>
-  <int value="1806942655" label="dpinterface32.dll"/>
-  <int value="1850669228" label="YCWebCameraSource.ax"/>
-  <int value="1979101632" label="bsvc.dll"/>
-  <int value="1996673448" label="scdetour.dll"/>
-  <int value="2060768492" label="libwinhook.dll"/>
-  <int value="2074150225" label="minisp32.dll"/>
-  <int value="2117903235" label="cplushook.dll"/>
-  <int value="2132270559" label="libsvn_tsvn32.dll"/>
-</enum>
-
-<enum name="DNS.AddressListDeltaType" type="int">
-  <int value="0" label="Same addresses in the same order"/>
-  <int value="1" label="Same addresses in a different order"/>
-  <int value="2" label="Some but not all addresses in common"/>
-  <int value="3" label="No addresses in common"/>
-</enum>
-
-<enum name="DNS.HostCache.EraseReason" type="int">
-  <int value="0" label="Entry evicted"/>
-  <int value="1" label="Cache cleared"/>
-  <int value="2" label="Cache destroyed"/>
-</enum>
-
-<enum name="DNS.HostCache.LookupOutcome" type="int">
-  <int value="0" label="Miss (absent)"/>
-  <int value="1" label="Miss (stale when not requested)"/>
-  <int value="2" label="Hit (valid)"/>
-  <int value="3" label="Hit (stale when requested)"/>
-</enum>
-
-<enum name="DNS.HostCache.SetOutcome" type="int">
-  <int value="0" label="Inserted new entry"/>
-  <int value="1" label="Updated valid entry"/>
-  <int value="2" label="Updated stale entry"/>
-</enum>
-
-<enum name="DNS.StaleHostResolverRequestOutcome" type="int">
-  <int value="0"
-      label="Returned synchronously (cache, hosts, IP literal etc.)"/>
-  <int value="1"
-      label="Returned network result; no stale cached result was available."/>
-  <int value="2"
-      label="Returned network result; stale cached result was available."/>
-  <int value="3" label="Returned stale cached result; network was too slow."/>
-  <int value="4" label="Canceled; no stale cached result was available."/>
-  <int value="5" label="Canceled; stale cached result was available."/>
-</enum>
-
-<enum name="DNSEmptyAddressListAndNoError" type="int">
-  <int value="0" label="Error reported or Address List is not empty"/>
-  <int value="1" label="Success reported but Address List is empty"/>
-</enum>
-
-<enum name="DnsProbe.JobResult" type="int">
-  <int value="0" label="SERVERS_UNKNOWN"/>
-  <int value="1" label="SERVERS_CORRECT"/>
-  <int value="2" label="SERVERS_INCORRECT"/>
-  <int value="3" label="SERVERS_FAILING"/>
-  <int value="4" label="SERVERS_UNREACHABLE"/>
-</enum>
-
-<enum name="DnsProbe.ObsoleteProbeResult" type="int">
-  <int value="0" label="INCONCLUSIVE"/>
-  <int value="1" label="NO_INTERNET"/>
-  <int value="2" label="BAD_CONFIG"/>
-  <int value="3" label="NXDOMAIN"/>
-</enum>
-
-<enum name="DnsProbe.ProbeStatus" type="int">
-  <int value="0" label="POSSIBLE"/>
-  <int value="1" label="NOT_RUN"/>
-  <int value="2" label="STARTED"/>
-  <int value="3" label="FINISHED_INCONCLUSIVE"/>
-  <int value="4" label="FINISHED_NO_INTERNET"/>
-  <int value="5" label="FINISHED_BAD_CONFIG"/>
-  <int value="6" label="FINISHED_NXDOMAIN"/>
-</enum>
-
-<enum name="DnsProbe.SystemIsLocalhost" type="int">
-  <int value="0" label="Not just 127.0.0.1">
-    127.0.0.1 was not the only nameserver in the system DNS config.
-  </int>
-  <int value="1" label="Just 127.0.0.1">
-    127.0.0.1 was the only nameserver in the system DNS config.
-  </int>
-</enum>
-
-<enum name="DockedAction" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Dock"/>
-  <int value="2" label="Undock"/>
-  <int value="3" label="Resize"/>
-  <int value="4" label="Reorder"/>
-  <int value="5" label="Evict"/>
-  <int value="6" label="Maximize"/>
-  <int value="7" label="Minimize"/>
-  <int value="8" label="Restore"/>
-  <int value="9" label="Close"/>
-</enum>
-
-<enum name="DockedActionSource" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Mouse"/>
-  <int value="2" label="Touch"/>
-  <int value="3" label="Keyboard"/>
-</enum>
-
-<enum name="DocumentStateForDeferredLoading" type="int">
-  <int value="0" label="Created"/>
-  <int value="1" label="WouldLoadBecauseVisible"/>
-</enum>
-
-<enum name="DocumentStateForDeferredLoadingV2" type="int">
-  <int value="0" label="Created"/>
-  <int value="1" label="WouldLoadOutOfProcess"/>
-  <int value="2" label="WouldLoadDisplayNone"/>
-  <int value="3" label="WouldLoadZeroByZero"/>
-  <int value="4" label="WouldLoadAbove"/>
-  <int value="5" label="WouldLoadLeft"/>
-  <int value="6" label="WouldLoadVisible"/>
-</enum>
-
-<enum name="DocumentStateForDeferredLoadingV3" type="int">
-  <int value="0" label="Created"/>
-  <int value="1" label="WouldLoadOutOfProcess"/>
-  <int value="2" label="WouldLoadDisplayNone"/>
-  <int value="3" label="WouldLoadZeroByZero"/>
-  <int value="4" label="WouldLoadAboveAndLeft"/>
-  <int value="5" label="WouldLoadAbove"/>
-  <int value="6" label="WouldLoadLeft"/>
-  <int value="7" label="WouldLoadVisible"/>
-</enum>
-
-<enum name="DocumentStateForDeferredLoadingV4" type="int">
-  <int value="0" label="Invalid"/>
-  <int value="1" label="Created"/>
-  <int value="2" label="WouldLoad3ScreensAway"/>
-  <int value="3" label="WouldLoad2ScreensAway"/>
-  <int value="4" label="WouldLoad1ScreensAway"/>
-  <int value="5" label="WouldLoadVisible"/>
-  <int value="6" label="WouldLoadNoParent"/>
-</enum>
-
-<enum name="DocumentWriteGatedEvaluation" type="int">
-  <int value="0" label="Script too long"/>
-  <int value="1" label="No likely external script write"/>
-  <int value="2" label="Looping construct found"/>
-  <int value="3" label="Script uses popular library"/>
-  <int value="4" label="Script uses non-determinism"/>
-</enum>
-
-<enum name="DocumentWriteLoadingBehavior" type="int">
-  <int value="0" label="A script on the page is blockable"/>
-  <int value="1" label="Reload scenario, so not blockable"/>
-  <int value="2" label="Same Site Different Scheme Script"/>
-</enum>
-
-<enum name="DomainBoundCerts.GetCertResult" type="int">
-  <int value="0" label="SYNC_SUCCESS"/>
-  <int value="1" label="ASYNC_SUCCESS"/>
-  <int value="2" label="ASYNC_CANCELLED"/>
-  <int value="3" label="ASYNC_FAILURE_KEYGEN"/>
-  <int value="4" label="ASYNC_FAILURE_CREATE_CERT"/>
-  <int value="5" label="ASYNC_FAILURE_EXPORT_KEY"/>
-  <int value="6" label="ASYNC_FAILURE_UNKNOWN"/>
-  <int value="7" label="INVALID_ARGUMENT"/>
-  <int value="8" label="UNSUPPORTED_TYPE"/>
-  <int value="9" label="TYPE_MISMATCH"/>
-  <int value="10" label="WORKER_FAILURE"/>
-</enum>
-
-<enum name="DomainBoundCerts.Support" type="int">
-  <int value="0" label="DISABLED"/>
-  <int value="1" label="CLIENT_ONLY"/>
-  <int value="2" label="CLIENT_AND_SERVER"/>
-  <int value="3" label="CLIENT_NO_ECC">
-    Channel ID was enabled, but the client did not support elliptic curve key
-    generation.
-  </int>
-  <int value="4" label="CLIENT_BAD_SYSTEM_TIME">
-    Channel ID was enabled, but the client had an invalid system time which
-    prevented using it.
-  </int>
-  <int value="5" label="CLIENT_NO_SERVER_BOUND_CERT_SERVICE">
-    The SSLClientSocket was created without a ServerBoundCertService.
-  </int>
-</enum>
-
-<enum name="DomainReliability.BooleanFailover" type="int">
-  <int value="0" label="Used first collector"/>
-  <int value="1" label="Failed over to another collector"/>
-</enum>
-
-<enum name="DoubleGetExperimentMethods" type="int">
-  <int value="0" label="POST"/>
-  <int value="1" label="GET_CACHABLE"/>
-  <int value="2" label="GET_NON_CACHABLE"/>
-</enum>
-
-<enum name="DownEventDestination" type="int">
-  <int value="0" label="Others, everything except browser and apps"/>
-  <int value="1" label="Inside the browser frame"/>
-  <int value="2" label="Regular Chrome app"/>
-  <int value="3" label="ARC app (Android app on Chrome)"/>
-  <int value="4" label="Default note-taking app (deprecated)"/>
-</enum>
-
-<enum name="DownEventFormFactor" type="int">
-  <int value="0" label="Clamshell"/>
-  <int value="1" label="Touchview"/>
-</enum>
-
-<enum name="DownEventSource" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Mouse"/>
-  <int value="2" label="Stylus"/>
-  <int value="3" label="Touch"/>
-</enum>
-
-<enum name="DownloadConnectionSecurity" type="int">
-  <int value="0"
-      label="Final download url and the redirects before it all use https"/>
-  <int value="1" label="Final download url uses http, redirects all use https"/>
-  <int value="2"
-      label="Final download url uses https, but at least one redirect uses
-             http"/>
-  <int value="3"
-      label="Final download url uses http, and at least one redirect uses
-             http"/>
-  <int value="4" label="Final download url uses scheme other than http/https"/>
-</enum>
-
-<enum name="DownloadContentDisposition" type="int">
-  <int value="0" label="Content-Disposition header present"/>
-  <int value="1" label="Valid"/>
-  <int value="2" label="Has disposition-type"/>
-  <int value="3" label="Has unknown disposition-type"/>
-  <int value="4" label="Has 'name' attribute (Obsolete 04/2015)"/>
-  <int value="5" label="Has 'filename' attribute"/>
-  <int value="6" label="Has 'filename*' attribute"/>
-  <int value="7" label="Has non-ASCII strings"/>
-  <int value="8" label="Has percent encoded strings"/>
-  <int value="9" label="Has RFC 2047 encoded strings"/>
-  <int value="10" label="Has 'name' attribute only (Obsolete 04/2015)"/>
-</enum>
-
-<enum name="DownloadContentType" type="int">
-  <int value="0" label="UNRECOGNIZED"/>
-  <int value="1" label="TEXT"/>
-  <int value="2" label="IMAGE"/>
-  <int value="3" label="AUDIO"/>
-  <int value="4" label="VIDEO"/>
-  <int value="5" label="OCTET_STREAM"/>
-  <int value="6" label="PDF"/>
-  <int value="7" label="DOC"/>
-  <int value="8" label="XLS"/>
-  <int value="9" label="PPT"/>
-  <int value="10" label="ARCHIVE"/>
-  <int value="11" label="EXE"/>
-  <int value="12" label="DMG"/>
-  <int value="13" label="CRX"/>
-</enum>
-
-<enum name="DownloadCountType" type="int">
-  <int value="0" label="Initiated by Navigation (Obsolete)"/>
-  <int value="1" label="Initiated by Context Menu (Obsolete)"/>
-  <int value="2" label="Initiated by SavePackage Failure (Obsolete)"/>
-  <int value="3" label="Initiated by Drag-n-drop (Obsolete)"/>
-  <int value="4" label="Initiated by Renderer (Obsolete)"/>
-  <int value="5" label="Initiated and Unthrottled"/>
-  <int value="6" label="Completed"/>
-  <int value="7" label="Cancelled"/>
-  <int value="8" label="Started"/>
-  <int value="9" label="Interrupted"/>
-  <int value="10" label="Calls to AppendDataToFile (Size) (Obsolete 8/2013)"/>
-  <int value="11" label="Calls to AppendDataToFile (Count) (Obsolete 8/2013)"/>
-  <int value="12" label="Interrupted at End of Download"/>
-  <int value="13" label="Attempt to Append to Detached File"/>
-  <int value="14" label="File Missing After Successful Scan (Obsolete 6/2016)"/>
-  <int value="15" label="Supports ranges and strong ETag (Obsolete 11/2013)"/>
-  <int value="16" label="No WebContents at interruption"/>
-  <int value="17" label="Supports ranges and strong validation"/>
-</enum>
-
-<enum name="DownloadDatabaseRecordDroppedType" type="int">
-  <int value="0" label="Bad State"/>
-  <int value="1" label="Bad Danger Type"/>
-  <int value="2" label="Bad ID"/>
-  <int value="3" label="Duplicate ID"/>
-</enum>
-
-<enum name="DownloadDOMEvent" type="int">
-  <int value="0" label="GetDownloads"/>
-  <int value="1" label="OpenFile"/>
-  <int value="2" label="Drag"/>
-  <int value="3" label="SaveDangerous"/>
-  <int value="4" label="DiscardDangerous"/>
-  <int value="5" label="Show"/>
-  <int value="6" label="Pause"/>
-  <int value="7" label="Remove"/>
-  <int value="8" label="Cancel"/>
-  <int value="9" label="ClearAll"/>
-  <int value="10" label="OpenFolder"/>
-  <int value="11" label="Resume"/>
-</enum>
-
-<enum name="DownloadFilePickerResult" type="int">
-  <int value="0" label="SAME"/>
-  <int value="1" label="DIFFERENT_DIR"/>
-  <int value="2" label="DIFFERENT_NAME"/>
-  <int value="3" label="CANCEL"/>
-</enum>
-
-<enum name="DownloadFunctions" type="int">
-  <int value="0" label="download"/>
-  <int value="1" label="search"/>
-  <int value="2" label="pause"/>
-  <int value="3" label="resume"/>
-  <int value="4" label="cancel"/>
-  <int value="5" label="erase"/>
-  <int value="6" label="(unused)"/>
-  <int value="7" label="accept_danger"/>
-  <int value="8" label="show"/>
-  <int value="9" label="drag"/>
-  <int value="10" label="get_file_icon"/>
-  <int value="11" label="open"/>
-  <int value="12" label="remove_file"/>
-  <int value="13" label="show_default_folder"/>
-  <int value="14" label="set_shelf_enabled"/>
-  <int value="15" label="determine_filename"/>
-</enum>
-
-<enum name="DownloadImageType" type="int">
-  <int value="0" label="Unrecognized"/>
-  <int value="1" label="GIF"/>
-  <int value="2" label="JPEG"/>
-  <int value="3" label="PNG"/>
-  <int value="4" label="TIFF"/>
-  <int value="5" label="ICON"/>
-  <int value="6" label="WEBP"/>
-</enum>
-
-<enum name="DownloadInterruptedUnknownSizeType" type="int">
-  <int value="0" label="Size Known"/>
-  <int value="1" label="Size Unknown"/>
-</enum>
-
-<enum name="DownloadItem.DangerousFileType" type="int">
-  <int value="0" label="unknown"/>
-  <int value="1" label="ad"/>
-  <int value="2" label="ade"/>
-  <int value="3" label="adp"/>
-  <int value="4" label="ah"/>
-  <int value="5" label="apk"/>
-  <int value="6" label="app"/>
-  <int value="7" label="application"/>
-  <int value="8" label="asp"/>
-  <int value="9" label="asx"/>
-  <int value="10" label="bas"/>
-  <int value="11" label="bash"/>
-  <int value="12" label="bat"/>
-  <int value="13" label="cfg"/>
-  <int value="14" label="chi"/>
-  <int value="15" label="chm"/>
-  <int value="16" label="class"/>
-  <int value="17" label="cmd"/>
-  <int value="18" label="com"/>
-  <int value="19" label="command"/>
-  <int value="20" label="crt"/>
-  <int value="21" label="crx"/>
-  <int value="22" label="csh"/>
-  <int value="23" label="deb"/>
-  <int value="24" label="dex"/>
-  <int value="25" label="dll"/>
-  <int value="26" label="drv"/>
-  <int value="27" label="exe"/>
-  <int value="28" label="fxp"/>
-  <int value="29" label="grp"/>
-  <int value="30" label="hlp"/>
-  <int value="31" label="hta"/>
-  <int value="32" label="htm"/>
-  <int value="33" label="html"/>
-  <int value="34" label="htt"/>
-  <int value="35" label="inf"/>
-  <int value="36" label="ini"/>
-  <int value="37" label="ins"/>
-  <int value="38" label="isp"/>
-  <int value="39" label="jar"/>
-  <int value="40" label="jnlp"/>
-  <int value="41" label="user.js"/>
-  <int value="42" label="js"/>
-  <int value="43" label="jse"/>
-  <int value="44" label="ksh"/>
-  <int value="45" label="lnk"/>
-  <int value="46" label="local"/>
-  <int value="47" label="mad"/>
-  <int value="48" label="maf"/>
-  <int value="49" label="mag"/>
-  <int value="50" label="mam"/>
-  <int value="51" label="manifest"/>
-  <int value="52" label="maq"/>
-  <int value="53" label="mar"/>
-  <int value="54" label="mas"/>
-  <int value="55" label="mat"/>
-  <int value="56" label="mau"/>
-  <int value="57" label="mav"/>
-  <int value="58" label="maw"/>
-  <int value="59" label="mda"/>
-  <int value="60" label="mdb"/>
-  <int value="61" label="mde"/>
-  <int value="62" label="mdt"/>
-  <int value="63" label="mdw"/>
-  <int value="64" label="mdz"/>
-  <int value="65" label="mht"/>
-  <int value="66" label="mhtml"/>
-  <int value="67" label="mmc"/>
-  <int value="68" label="mof"/>
-  <int value="69" label="msc"/>
-  <int value="70" label="msh"/>
-  <int value="71" label="mshxml"/>
-  <int value="72" label="msi"/>
-  <int value="73" label="msp"/>
-  <int value="74" label="mst"/>
-  <int value="75" label="ocx"/>
-  <int value="76" label="ops"/>
-  <int value="77" label="pcd"/>
-  <int value="78" label="pif"/>
-  <int value="79" label="pkg"/>
-  <int value="80" label="pl"/>
-  <int value="81" label="plg"/>
-  <int value="82" label="prf"/>
-  <int value="83" label="prg"/>
-  <int value="84" label="pst"/>
-  <int value="85" label="py"/>
-  <int value="86" label="pyc"/>
-  <int value="87" label="pyw"/>
-  <int value="88" label="rb"/>
-  <int value="89" label="reg"/>
-  <int value="90" label="rpm"/>
-  <int value="91" label="scf"/>
-  <int value="92" label="scr"/>
-  <int value="93" label="sct"/>
-  <int value="94" label="sh"/>
-  <int value="95" label="shar"/>
-  <int value="96" label="shb"/>
-  <int value="97" label="shs"/>
-  <int value="98" label="shtm"/>
-  <int value="99" label="shtml"/>
-  <int value="100" label="spl"/>
-  <int value="101" label="svg"/>
-  <int value="102" label="swf"/>
-  <int value="103" label="sys"/>
-  <int value="104" label="tcsh"/>
-  <int value="105" label="url"/>
-  <int value="106" label="vb"/>
-  <int value="107" label="vbe"/>
-  <int value="108" label="vbs"/>
-  <int value="109" label="vsd"/>
-  <int value="110" label="vsmacros"/>
-  <int value="111" label="vss"/>
-  <int value="112" label="vst"/>
-  <int value="113" label="vsw"/>
-  <int value="114" label="ws"/>
-  <int value="115" label="wsc"/>
-  <int value="116" label="wsf"/>
-  <int value="117" label="wsh"/>
-  <int value="118" label="xbap"/>
-  <int value="119" label="xht"/>
-  <int value="120" label="xhtm"/>
-  <int value="121" label="xhtml"/>
-  <int value="122" label="xml"/>
-  <int value="123" label="xsl"/>
-  <int value="124" label="xslt"/>
-  <int value="125" label="website"/>
-  <int value="126" label="msh1"/>
-  <int value="127" label="msh2"/>
-  <int value="128" label="msh1xml"/>
-  <int value="129" label="msh2xml"/>
-  <int value="130" label="ps1"/>
-  <int value="131" label="ps1xml"/>
-  <int value="132" label="ps2"/>
-  <int value="133" label="ps2xml"/>
-  <int value="134" label="psc1"/>
-  <int value="135" label="psc2"/>
-  <int value="136" label="xnk"/>
-  <int value="137" label="appref-ms"/>
-  <int value="138" label="gadget"/>
-  <int value="139" label="efi"/>
-  <int value="140" label="fon"/>
-  <int value="141" label="partial"/>
-  <int value="142" label="svg"/>
-  <int value="143" label="xml"/>
-  <int value="144" label="xrm_ms"/>
-  <int value="145" label="xsl"/>
-  <int value="146" label="action"/>
-  <int value="147" label="bin"/>
-  <int value="148" label="inx"/>
-  <int value="149" label="ipa"/>
-  <int value="150" label="isu"/>
-  <int value="151" label="job"/>
-  <int value="152" label="out"/>
-  <int value="153" label="pad"/>
-  <int value="154" label="paf"/>
-  <int value="155" label="rgs"/>
-  <int value="156" label="u3p"/>
-  <int value="157" label="vbscript"/>
-  <int value="158" label="workflow"/>
-  <int value="159" label="001"/>
-  <int value="160" label="7z"/>
-  <int value="161" label="ace"/>
-  <int value="162" label="arc"/>
-  <int value="163" label="arj"/>
-  <int value="164" label="b64"/>
-  <int value="165" label="balz"/>
-  <int value="166" label="bhx"/>
-  <int value="167" label="bz"/>
-  <int value="168" label="bz2"/>
-  <int value="169" label="bzip2"/>
-  <int value="170" label="cab"/>
-  <int value="171" label="cpio"/>
-  <int value="172" label="fat"/>
-  <int value="173" label="gz"/>
-  <int value="174" label="gzip"/>
-  <int value="175" label="hfs"/>
-  <int value="176" label="hqx"/>
-  <int value="177" label="iso"/>
-  <int value="178" label="lha"/>
-  <int value="179" label="lpaq1"/>
-  <int value="180" label="lpaq5"/>
-  <int value="181" label="lpaq8"/>
-  <int value="182" label="lzh"/>
-  <int value="183" label="lzma"/>
-  <int value="184" label="mim"/>
-  <int value="185" label="ntfs"/>
-  <int value="186" label="paq8f"/>
-  <int value="187" label="paq8jd"/>
-  <int value="188" label="paq8l"/>
-  <int value="189" label="paq8o"/>
-  <int value="190" label="pea"/>
-  <int value="191" label="quad"/>
-  <int value="192" label="r00"/>
-  <int value="193" label="r01"/>
-  <int value="194" label="r02"/>
-  <int value="195" label="r03"/>
-  <int value="196" label="r04"/>
-  <int value="197" label="r05"/>
-  <int value="198" label="r06"/>
-  <int value="199" label="r07"/>
-  <int value="200" label="r08"/>
-  <int value="201" label="r09"/>
-  <int value="202" label="r10"/>
-  <int value="203" label="r11"/>
-  <int value="204" label="r12"/>
-  <int value="205" label="r13"/>
-  <int value="206" label="r14"/>
-  <int value="207" label="r15"/>
-  <int value="208" label="r16"/>
-  <int value="209" label="r17"/>
-  <int value="210" label="r18"/>
-  <int value="211" label="r19"/>
-  <int value="212" label="r20"/>
-  <int value="213" label="r21"/>
-  <int value="214" label="r22"/>
-  <int value="215" label="r23"/>
-  <int value="216" label="r24"/>
-  <int value="217" label="r25"/>
-  <int value="218" label="r26"/>
-  <int value="219" label="r27"/>
-  <int value="220" label="r28"/>
-  <int value="221" label="r29"/>
-  <int value="222" label="rar"/>
-  <int value="223" label="squashfs"/>
-  <int value="224" label="swm"/>
-  <int value="225" label="tar"/>
-  <int value="226" label="taz"/>
-  <int value="227" label="tbz"/>
-  <int value="228" label="tbz2"/>
-  <int value="229" label="tgz"/>
-  <int value="230" label="tpz"/>
-  <int value="231" label="txz"/>
-  <int value="232" label="tz"/>
-  <int value="233" label="udf"/>
-  <int value="234" label="uu"/>
-  <int value="235" label="uue"/>
-  <int value="236" label="vhd"/>
-  <int value="237" label="vmdk"/>
-  <int value="238" label="wim"/>
-  <int value="239" label="wrc"/>
-  <int value="240" label="xar"/>
-  <int value="241" label="xxe"/>
-  <int value="242" label="xz"/>
-  <int value="243" label="z"/>
-  <int value="244" label="zip"/>
-  <int value="245" label="zipx"/>
-  <int value="246" label="zpaq"/>
-  <int value="247" label="cdr"/>
-  <int value="248" label="dart"/>
-  <int value="249" label="dc42"/>
-  <int value="250" label="diskcopy42"/>
-  <int value="251" label="dmg"/>
-  <int value="252" label="dmgpart"/>
-  <int value="253" label="dvdr"/>
-  <int value="254" label="img"/>
-  <int value="255" label="imgpart"/>
-  <int value="256" label="ndif"/>
-  <int value="257" label="smi"/>
-  <int value="258" label="sparsebundle"/>
-  <int value="259" label="sparseimage"/>
-  <int value="260" label="toast"/>
-  <int value="261" label="udif"/>
-  <int value="262" label="run"/>
-  <int value="263" label="ad"/>
-</enum>
-
-<enum name="DownloadItem.DangerType" type="int">
-  <int value="0" label="NOT_DANGEROUS"/>
-  <int value="1" label="DANGEROUS_FILE"/>
-  <int value="2" label="DANGEROUS_URL"/>
-  <int value="3" label="DANGEROUS_CONTENT"/>
-  <int value="4" label="MAYBE_DANGEROUS_CONTENT"/>
-  <int value="5" label="UNCOMMON_CONTENT"/>
-  <int value="6" label="USER_VALIDATED"/>
-  <int value="7" label="DANGEROUS_HOST"/>
-  <int value="8" label="POTENTIALLY_UNWANTED"/>
-</enum>
-
-<enum name="DownloadOpenMethod" type="int">
-  <int value="0" label="Opened with plaform handler by default"/>
-  <int value="1" label="Opened in browser by default"/>
-  <int value="2" label="Opened with plaform handler by user choice"/>
-</enum>
-
-<enum name="DownloadOriginStateOnResumption" type="int">
-  <int value="0" label="No changes"/>
-  <int value="1" label="New redirects"/>
-  <int value="2" label="New validators"/>
-  <int value="3" label="New redirects + validators"/>
-  <int value="4" label="New Content-Disposition"/>
-  <int value="5" label="New redirects + Content-Disposition"/>
-  <int value="6" label="New validators + Content-Disposition"/>
-  <int value="7" label="New redirects + validators + Content-Disposition"/>
-</enum>
-
-<enum name="DownloadPassKitResult" type="int">
-  <int value="0" label="Successful"/>
-  <int value="1" label="Other Failure"/>
-  <int value="2" label="Unauthorized Failure"/>
-  <int value="3" label="Wrong MIME Type Failure"/>
-</enum>
-
-<enum name="DownloadSavePackageEvent" type="int">
-  <int value="0" label="Started"/>
-  <int value="1" label="Cancelled"/>
-  <int value="2" label="Finished"/>
-  <int value="3" label="Write to already completed file"/>
-  <int value="4" label="Write to already failed file"/>
-</enum>
-
-<enum name="DownloadSource" type="int">
-  <int value="0" label="Initiated by Save Package on Non-HTML content"/>
-  <int value="1" label="Initiated by Drag-and-drop"/>
-  <int value="2" label="Initiated by RPC from Renderer"/>
-  <int value="3" label="Initiated by Save from Pepper"/>
-  <int value="4"
-      label="Initiated by Resumption, manual or automatic (Deprecated)"/>
-  <int value="5" label="Initiated by Manual Resumption"/>
-  <int value="6" label="Initiated by Automatic Resumption"/>
-</enum>
-
-<enum name="DownloadUploadRequestedByServer" type="int">
-  <int value="0" label="No Upload"/>
-  <int value="1" label="Upload Requested"/>
-</enum>
-
-<enum name="DragDropEventSource" type="int">
-  <int value="0" label="Mouse"/>
-  <int value="1" label="Touch"/>
-</enum>
-
-<enum name="DriveApiErrorCode" type="int">
-<!-- Generated from google_apis/drive/drive_api_error_codes.h -->
-
-  <int value="200" label="HTTP_SUCCESS"/>
-  <int value="201" label="HTTP_CREATED"/>
-  <int value="204" label="HTTP_NO_CONTENT"/>
-  <int value="302" label="HTTP_FOUND"/>
-  <int value="304" label="HTTP_NOT_MODIFIED"/>
-  <int value="308" label="HTTP_RESUME_INCOMPLETE"/>
-  <int value="400" label="HTTP_BAD_REQUEST"/>
-  <int value="401" label="HTTP_UNAUTHORIZED"/>
-  <int value="403" label="HTTP_FORBIDDEN"/>
-  <int value="404" label="HTTP_NOT_FOUND"/>
-  <int value="409" label="HTTP_CONFLICT"/>
-  <int value="410" label="HTTP_GONE"/>
-  <int value="411" label="HTTP_LENGTH_REQUIRED"/>
-  <int value="412" label="HTTP_PRECONDITION"/>
-  <int value="500" label="HTTP_INTERNAL_SERVER_ERROR"/>
-  <int value="501" label="HTTP_NOT_IMPLEMENTED"/>
-  <int value="502" label="HTTP_BAD_GATEWAY"/>
-  <int value="503" label="HTTP_SERVICE_UNAVAILABLE"/>
-  <int value="1000" label="DRIVE_PARSE_ERROR"/>
-  <int value="1001" label="DRIVE_FILE_ERROR"/>
-  <int value="1002" label="DRIVE_CANCELLED"/>
-  <int value="1003" label="DRIVE_OTHER_ERROR"/>
-  <int value="1004" label="DRIVE_NO_CONNECTION"/>
-  <int value="1005" label="DRIVE_NOT_READY"/>
-  <int value="1006" label="DRIVE_NO_SPACE"/>
-  <int value="1007" label="DRIVE_RESPONSE_TOO_LARGE"/>
-</enum>
-
-<enum name="DriveCacheDBOpenStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Corrupt database"/>
-  <int value="2" label="Unknown recoverable failure"/>
-  <int value="3" label="Unrecoverable (disk full?) failure"/>
-</enum>
-
-<enum name="DriveEntryKind" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Item"/>
-  <int value="2" label="Site"/>
-  <int value="3" label="Document"/>
-  <int value="4" label="Spereadsheet"/>
-  <int value="5" label="Presentation"/>
-  <int value="6" label="Drawing"/>
-  <int value="7" label="Table"/>
-  <int value="8" label="External app"/>
-  <int value="9" label="Folder"/>
-  <int value="10" label="File"/>
-  <int value="11" label="PDF"/>
-</enum>
-
-<enum name="DriveFileFormat" type="int">
-  <int value="0" label="AAC"/>
-  <int value="1" label="ASF"/>
-  <int value="2" label="AVI"/>
-  <int value="3" label="CSV"/>
-  <int value="4" label="DOC"/>
-  <int value="5" label="DOCX"/>
-  <int value="6" label="FLV"/>
-  <int value="7" label="JPG"/>
-  <int value="8" label="MJPG"/>
-  <int value="9" label="MOV"/>
-  <int value="10" label="MP3"/>
-  <int value="11" label="MP4"/>
-  <int value="12" label="MPG"/>
-  <int value="13" label="OTHER"/>
-  <int value="14" label="PDF"/>
-  <int value="15" label="PPT"/>
-  <int value="16" label="PPTX"/>
-  <int value="17" label="PSD"/>
-  <int value="18" label="RAR"/>
-  <int value="19" label="WMA"/>
-  <int value="20" label="WMV"/>
-  <int value="21" label="XLS"/>
-  <int value="22" label="XLSX"/>
-  <int value="23" label="ZIP"/>
-</enum>
-
-<enum name="DriveMetadataDBInitStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Not found"/>
-  <int value="2" label="Corruption"/>
-  <int value="3" label="IO error"/>
-  <int value="4" label="Failed to open DB for unknown reason"/>
-  <int value="5" label="Incompatible DB format"/>
-  <int value="6" label="DB is broken"/>
-  <int value="7" label="Opened existing DB."/>
-  <int value="8" label="No existing DB was found. Created new DB."/>
-  <int value="9" label="Cannot open existing DB. Created new DB."/>
-</enum>
-
-<enum name="DriveMetadataDBValidityCheckFailureReason" type="int">
-  <int value="0" label="Invalid header"/>
-  <int value="1" label="Broken ID entry"/>
-  <int value="2" label="Broken entry"/>
-  <int value="3" label="Invalid local ID"/>
-  <int value="4" label="Invalid parent ID"/>
-  <int value="5" label="Broken child map"/>
-  <int value="6" label="Child entry count mismatch"/>
-  <int value="7" label="Iterator error"/>
-</enum>
-
-<enum name="DriveUploadProtocol" type="int">
-  <int value="0" label="Resumable"/>
-  <int value="1" label="Multipart"/>
-  <int value="2" label="Batch"/>
-</enum>
-
-<enum name="DTLS_SRTPCryptoSuite" type="int">
-  <summary>
-    DTLS/SRTP crypto suites from the IANA registry as specified at
-    https://tools.ietf.org/html/rfc5764#section-4.1.2
-  </summary>
-  <int value="1" label="SRTP_AES128_CM_SHA1_80"/>
-  <int value="2" label="SRTP_AES128_CM_SHA1_32"/>
-  <int value="5" label="SRTP_NULL_SHA1_80"/>
-  <int value="6" label="SRTP_NULL_SHA1_32"/>
-</enum>
-
-<enum name="DtlsHandshakeError" type="int">
-  <int value="0" label="Incompatible cipher suite"/>
-  <int value="1" label="Unknown error"/>
-</enum>
-
-<enum name="DumpOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Unknown"/>
-</enum>
-
-<enum name="EAPInnerProtocol" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="NONE"/>
-  <int value="2" label="PEAP-MD5"/>
-  <int value="3" label="PEAP-MSCHAPV2"/>
-  <int value="4" label="TTLS-EAP-MD5"/>
-  <int value="5" label="TTLS-EAP-MSCHAPV2"/>
-  <int value="6" label="TTLS-MSCHAPV2"/>
-  <int value="7" label="TTLS-MSCHAP"/>
-  <int value="8" label="TTLS-PAP"/>
-  <int value="9" label="TTLS-CHAP"/>
-</enum>
-
-<enum name="EAPOuterProtocol" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="LEAP"/>
-  <int value="2" label="PEAP"/>
-  <int value="3" label="TLS"/>
-  <int value="4" label="TTLS"/>
-</enum>
-
-<enum name="EasyUnlockAuthEvent" type="int">
-  <int value="0" label="Smart Lock success"/>
-  <int value="1" label="Smart Lock failure"/>
-  <int value="2" label="Password entry: No pairing"/>
-  <int value="3" label="Password entry: Pairing changed"/>
-  <int value="4" label="Password entry: User hardlock"/>
-  <int value="5" label="Password entry: Service not active"/>
-  <int value="6" label="Password entry: No Bluetooth"/>
-  <int value="7" label="Password entry: Bluetooth connecting"/>
-  <int value="8" label="Password entry: No phone"/>
-  <int value="9" label="Password entry: Phone not authenticated"/>
-  <int value="10" label="Password entry: Phone locked"/>
-  <int value="11" label="Password entry: Phone not lockable"/>
-  <int value="12" label="Password entry: RSSI too low"/>
-  <int value="13" label="Password entry: Phone not supported"/>
-  <int value="14" label="Password entry: Phone authenticated"/>
-  <int value="15" label="Password entry: Tx power too high"/>
-  <int value="16" label="Password entry: Easy sign-in failed"/>
-  <int value="17" label="Password entry: Pairing added"/>
-  <int value="18" label="Password entry: No screenlock state handler"/>
-  <int value="19" label="Password entry: Phone locked and tx power too high"/>
-</enum>
-
-<enum name="EasyUnlockBluetoothType" type="int">
-  <int value="0" label="No adapter"/>
-  <int value="1" label="Normal"/>
-  <int value="2" label="Low energy"/>
-</enum>
-
-<enum name="EasyUnlockButton" type="int">
-  <int value="0" label="Setup app launches"/>
-  <int value="1" label="Find device"/>
-  <int value="2" label="Pair device"/>
-  <int value="3" label="Try out"/>
-  <int value="4" label="Enable"/>
-  <int value="5" label="Disable"/>
-  <int value="6" label="Dismiss ('done')"/>
-</enum>
-
-<enum name="EasyUnlockDeviceIneligibilityReason" type="int">
-  <int value="0" label="Unrecognized reason">
-    The server reported a reason that the client is not aware of. This should
-    only be recorded if the client's list of possible reasons is out of date.
-  </int>
-  <int value="1" label="Unknown">
-    The server returned the value &quot;Unknown&quot;.
-  </int>
-  <int value="2" label="Screen too large"/>
-  <int value="3" label="Phone lacks Bluetooth"/>
-  <int value="4" label="Bad OS version"/>
-  <int value="5" label="Bad software version (GMS Core)"/>
-  <int value="6" label="Auto unlocking not supported"/>
-  <int value="7" label="Invalid credentials"/>
-  <int value="8" label="Device offline"/>
-  <int value="9" label="No recent updates"/>
-</enum>
-
-<enum name="EasyUnlockDeviceModelHash" type="int">
-  <int value="-1829584143" label="Motorola XT1097"/>
-  <int value="-1429808627" label="HTC One"/>
-  <int value="-1168032746" label="Motorola Nexus 6"/>
-  <int value="-617422855" label="LGE Nexus 4"/>
-  <int value="684891985" label="Motorola Moto X"/>
-  <int value="1286382027" label="Motorola XT1095"/>
-  <int value="1412446710" label="Motorola XT1096"/>
-  <int value="1881443083" label="LGE Nexus 5"/>
-</enum>
-
-<enum name="EasyUnlockDidUserManuallyUnlockPhone" type="int">
-  <int value="0" label="Never locked"/>
-  <int value="1" label="Manually unlocked"/>
-</enum>
-
-<enum name="EasyUnlockHasSecureScreenLock" type="int">
-  <int value="0" label="Lacks secure screen lock"/>
-  <int value="1" label="Has secure screen lock"/>
-</enum>
-
-<enum name="EasyUnlockHasTrustAgentEnabled" type="int">
-  <int value="0" label="No trust agents enabled"/>
-  <int value="1" label="1+ trust agents enabled"/>
-</enum>
-
-<enum name="EasyUnlockNotificationEvent" type="int">
-  <int value="0" label="Set up notification shown"/>
-  <int value="1" label="Set up notification clicked"/>
-  <int value="2" label="Try out notification shown"/>
-  <int value="3" label="Try out notification clicked"/>
-</enum>
-
-<enum name="EasyUnlockPromoNotificationEvent" type="int">
-  <int value="0" label="Promo notification shown"/>
-  <int value="1" label="Promo notification clicked"/>
-  <int value="2" label="Promo notification dismissed"/>
-  <int value="3" label="Setup app launched"/>
-  <int value="4" label="Setup completed successfully"/>
-</enum>
-
-<enum name="EasyUnlockRemoteLockScreenState" type="int">
-  <int value="0" label="Unknown state"/>
-  <int value="1" label="Lock screen disabled, trust agent unsupported"/>
-  <int value="2" label="Lock screen disabled, trust agent disabled"/>
-  <int value="3" label="Lock screen disabled, trust agent enabled"/>
-  <int value="4" label="Lock screen enabled, trust agent unsupported"/>
-  <int value="5" label="Lock screen enabled, trust agent disabled"/>
-  <int value="6" label="Lock screen enabled, trust agent enabled"/>
-</enum>
-
-<enum name="EasyUnlockSetupState" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Scan (initial)"/>
-  <int value="2" label="Scan (in progress)"/>
-  <int value="3" label="Scan (error)"/>
-  <int value="4" label="Pairing (initial)"/>
-  <int value="5" label="Pairing (in progress)"/>
-  <int value="6" label="Pairing (error)"/>
-  <int value="7" label="Help"/>
-</enum>
-
-<enum name="EasyUnlockTrialRunEvents" type="int">
-  <int value="0" label="Trial run launched"/>
-  <int value="1" label="User clicked lock icon"/>
-</enum>
-
-<enum name="EasyUnlockUnlockEvent" type="int">
-  <int value="0" label="Screen unlocked (total)"/>
-  <int value="1" label="Screen unlocked (via EasyUnlock)"/>
-</enum>
-
-<enum name="ECDHECurves" type="int">
-  <int value="21" label="P-224"/>
-  <int value="23" label="P-256"/>
-  <int value="24" label="P-384"/>
-  <int value="25" label="P-521"/>
-  <int value="29" label="X25519"/>
-</enum>
-
-<enum name="EGLDisplayType" type="int">
-  <int value="0" label="Default"/>
-  <int value="1" label="SwiftShader"/>
-  <int value="2" label="ANGLE WARP"/>
-  <int value="3" label="ANGLE D3D9"/>
-  <int value="4" label="ANGLE D3D11"/>
-  <int value="5" label="ANGLE OpenGL"/>
-  <int value="6" label="ANGLE OpenGL ES"/>
-</enum>
-
-<enum name="EmbeddedWorkerStartingPhase" type="int">
-  <int value="0" label="NOT_STARTING"/>
-  <int value="1" label="ALLOCATING_PROCESS"/>
-  <int value="2" label="REGISTERING_TO_DEVTOOLS"/>
-  <int value="3" label="SENT_START_WORKER"/>
-  <int value="4" label="SCRIPT_DOWNLOADING"/>
-  <int value="5" label="SCRIPT_LOADED"/>
-  <int value="6" label="SCRIPT_EVALUATED"/>
-  <int value="7" label="THREAD_STARTED"/>
-  <int value="8" label="SCRIPT_READ_STARTED"/>
-  <int value="9" label="SCRIPT_READ_FINISHED"/>
-</enum>
-
-<enum name="EncodingMethod" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="Big5"/>
-  <int value="2" label="EUC-JP"/>
-  <int value="3" label="EUC-KR"/>
-  <int value="4" label="GBK"/>
-  <int value="5" label="IBM866"/>
-  <int value="6" label="ISO-2022-JP"/>
-  <int value="7" label="ISO-8859-10"/>
-  <int value="8" label="ISO-8859-13"/>
-  <int value="9" label="ISO-8859-14"/>
-  <int value="10" label="ISO-8859-15"/>
-  <int value="11" label="ISO-8859-16"/>
-  <int value="12" label="ISO-8859-2"/>
-  <int value="13" label="ISO-8859-3"/>
-  <int value="14" label="ISO-8859-4"/>
-  <int value="15" label="ISO-8859-5"/>
-  <int value="16" label="ISO-8859-6"/>
-  <int value="17" label="ISO-8859-7"/>
-  <int value="18" label="ISO-8859-8"/>
-  <int value="19" label="ISO-8859-8-I"/>
-  <int value="20" label="KOI8-R"/>
-  <int value="21" label="KOI8-U"/>
-  <int value="22" label="Shift_JIS"/>
-  <int value="23" label="UTF-16LE"/>
-  <int value="24" label="UTF-8"/>
-  <int value="25" label="gb18030"/>
-  <int value="26" label="macintosh"/>
-  <int value="27" label="windows-1250"/>
-  <int value="28" label="windows-1251"/>
-  <int value="29" label="windows-1252"/>
-  <int value="30" label="windows-1253"/>
-  <int value="31" label="windows-1254"/>
-  <int value="32" label="windows-1255"/>
-  <int value="33" label="windows-1256"/>
-  <int value="34" label="windows-1257"/>
-  <int value="35" label="windows-1258"/>
-  <int value="36" label="windows-874"/>
-</enum>
-
-<enum name="EnhancedBookmarkViewMode" type="int">
-  <obsolete>
-    Deprecated 9/2015.
-  </obsolete>
-  <int value="0" label="Default view mode"/>
-  <int value="1" label="List view mode"/>
-  <int value="2" label="Grid view mode"/>
-</enum>
-
-<enum name="EnrollmentStatus" type="int">
-  <int value="0" label="Non-managed"/>
-  <int value="1" label="Managed EDU (Deprecated)"/>
-  <int value="2" label="Managed"/>
-  <int value="3" label="Error"/>
-</enum>
-
-<enum name="EnterpriseAttributesTPMConsistencyType" type="int">
-  <int value="0" label="no attributes, other mode, TPM unlocked">
-    valid: machine in pristine state
-  </int>
-  <int value="1" label="locked attributes, other mode, TPM unlocked">
-    rare: install attributes locked but TPM clear (could happen if taking TPM
-    ownership carries over a reboot)
-  </int>
-  <int value="2" label="no attributes, enterprise mode, TPM unlocked">
-    impossible: non-existent install attributes cannot yield enterprise mode
-  </int>
-  <int value="3" label="locked attributes, enterprise mode, TPM unlocked">
-    rare: install attributes locked but TPM clear (could happen if taking TPM
-    ownership carries over a reboot)
-  </int>
-  <int value="4" label="no attributes, other mode, TPM locked">
-    inconsistent: install attributes clear but TPM locked
-  </int>
-  <int value="5" label="locked attributes, other mode, TPM locked">
-    valid: consumer owned
-  </int>
-  <int value="6" label="no attributes, enterprise mode, TPM locked">
-    impossible: non-existent install attributes cannot yield enterprise mode
-  </int>
-  <int value="7" label="locked attributes, enterprise mode, TPM locked">
-    valid: enterprise enrolled
-  </int>
-  <int value="8" label="TPM unreachable">error: cryptohomed unreachable</int>
-</enum>
-
-<enum name="EnterpriseCheckError" type="int">
-  <summary>
-    Defined as DomainCheckErrors in
-    components/policy/core/common/policy_loader_win.cc.
-  </summary>
-  <int value="0" label="Cound not get net join info."/>
-  <int value="1" label="Cound not bind to domain controller."/>
-</enum>
-
-<enum name="EnterpriseDeviceManagementStatus" type="int">
-  <summary>
-    Status codes produced by DeviceManagementService for requests made to the
-    device management server as defined in
-    components/policy/core/common/cloud/cloud_policy_constants.h.
-  </summary>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="REQUEST_INVALID"/>
-  <int value="2" label="REQUEST_FAILED"/>
-  <int value="3" label="TEMPORARY_UNAVAILABLE"/>
-  <int value="4" label="HTTP_STATUS_ERROR"/>
-  <int value="5" label="RESPONSE_DECODING_ERROR"/>
-  <int value="6" label="SERVICE_MANAGEMENT_NOT_SUPPORTED"/>
-  <int value="7" label="SERVICE_DEVICE_NOT_FOUND"/>
-  <int value="8" label="SERVICE_MANAGEMENT_TOKEN_INVALID"/>
-  <int value="9" label="SERVICE_ACTIVATION_PENDING"/>
-  <int value="10" label="SERVICE_INVALID_SERIAL_NUMBER"/>
-  <int value="11" label="SERVICE_DEVICE_ID_CONFLICT"/>
-  <int value="12" label="SERVICE_MISSING_LICENSES"/>
-  <int value="13" label="SERVICE_DEPROVISIONED"/>
-  <int value="14" label="SERVICE_DOMAIN_MISMATCH"/>
-  <int value="902" label="SERVICE_POLICY_NOT_FOUND"/>
-</enum>
-
-<enum name="EnterpriseDMServerRequestSuccess" type="int">
-  <summary>
-    Number of DeviceManagementServer request retries as defined in
-    components/policy/core/common/cloud/device_management_service.cc.
-  </summary>
-  <int value="0" label="No retries"/>
-  <int value="1" label="1 retry"/>
-  <int value="2" label="2 retries"/>
-  <int value="3" label="3 retries"/>
-  <int value="10" label="Request failed"/>
-  <int value="11" label="Server returned error"/>
-</enum>
-
-<enum name="EnterpriseDMTokenType" type="int">
-  <summary>
-    Result of DMToken operations as defined in
-    components/policy/core/common/cloud/enterprise_metrics.h.
-  </summary>
-  <int value="0" label="Load Succeeded">
-    A cached token was successfully loaded from disk.
-  </int>
-  <int value="1" label="Load Failed">
-    Reading a cached token from disk failed.
-  </int>
-  <int value="2" label="Fetch Requested">
-    A token fetch request was sent to the DM server.
-  </int>
-  <int value="3" label="Fetch Request Failed">
-    The request was invalid, or the HTTP request failed.
-  </int>
-  <int value="4" label="Fetch Server Failed">
-    Error HTTP status received, or the DM server failed in another way.
-  </int>
-  <int value="5" label="Fetch Response Received">
-    A response to the fetch request was received.
-  </int>
-  <int value="6" label="Fetch Bad Response">
-    The response received was invalid. This happens when some expected data was
-    not present in the response.
-  </int>
-  <int value="7" label="Fetch Management Not Supported">
-    DM server reported that management is not supported.
-  </int>
-  <int value="8" label="Fetch Device Not Found">
-    DM server reported that the given device ID was not found.
-  </int>
-  <int value="9" label="Fetch OK">DM token successfully retrieved.</int>
-  <int value="10" label="Store Succeeded">
-    Successfully cached a token to disk.
-  </int>
-  <int value="11" label="Store Failed">Caching a token to disk failed.</int>
-  <int value="12" label="Device ID Conflict">The Device-ID is not unique.</int>
-  <int value="13" label="Invalid Serial">
-    Serial number rejected by DMServer.
-  </int>
-  <int value="14" label="Missing Licenses">
-    No more licenses available for that domain.
-  </int>
-</enum>
-
-<enum name="EnterpriseDomainRegex" type="int">
-  <summary>Which domain regex generated an ICU error.</summary>
-  <int value="0" label="aol"/>
-  <int value="1" label="googlemail"/>
-  <int value="2" label="gmail"/>
-  <int value="3" label="hotmail"/>
-  <int value="4" label="live"/>
-  <int value="5" label="mail.ru"/>
-  <int value="6" label="msn"/>
-  <int value="7" label="qq"/>
-  <int value="8" label="yahoo"/>
-  <int value="9" label="yandex"/>
-</enum>
-
-<enum name="EnterpriseEnrollmentType" type="int">
-  <summary>
-    Result of device enrollment as defined in
-    components/policy/core/common/cloud/enterprise_metrics.h.
-  </summary>
-  <int value="0" label="Cancelled">
-    User pressed 'Cancel' during the enrollment process.
-  </int>
-  <int value="1" label="Started with valid credentials">
-    The user submitted valid credentials (GAIA or registration certificate) to
-    start the enrollment process.
-  </int>
-  <int value="2" label="OAuth fetch: network failed">
-    OAuth token fetch failed: network error.
-  </int>
-  <int value="3" label="Login Failed">
-    OAuth token fetch failed: login error.
-  </int>
-  <int value="4" label="Not Supported">
-    Registration / policy fetch failed: DM server reports management not
-    supported.
-  </int>
-  <int value="5" label="Policy Failed (unused)">
-    UNUSED: Enrollment failed because it failed to apply device policy.
-  </int>
-  <int value="6" label="Other Failed (unused)">
-    UNUSED: Enrollment failed due to an unexpected error. This currently happens
-    when the GAIA auth token is not issued for the DM service, the device cloud
-    policy subsystem isn't initialized, or when fetching GAIA tokens fails for
-    an unknown reason.
-  </int>
-  <int value="7" label="OK">Enrollment was successful.</int>
-  <int value="8" label="Registration/fetch: invalid Serial">
-    Registration / policy fetch failed: DM server reports that the serial number
-    we try to register is not assigned to the domain used.
-  </int>
-  <int value="9" label="Auto-enrollment Started (unused)">
-    UNUSED: Auto-enrollment started automatically after sign-in.
-  </int>
-  <int value="10" label="Auto-enrollment Failed (unused)">
-    UNUSED: Auto-enrollment failed.
-  </int>
-  <int value="11" label="Auto-enrollment Restarted (unused)">
-    UNUSED: Auto-enrollment started again after a failure.
-  </int>
-  <int value="12" label="Auto-enrollment Cancelled (unused)">
-    UNUSED: User opted-out of auto-enrollment.
-  </int>
-  <int value="13" label="Auto-enrollment OK (unused)">
-    UNUSED: Auto-enrollment OK.
-  </int>
-  <int value="14" label="Invalid enrollment mode">
-    Registration failed: DM server returns unknown/disallowed enrollment mode.
-  </int>
-  <int value="15" label="Auto-enrollment not supported (unused)">
-    UNUSED: Auto-enrollment is not supported for the mode supplied by the
-    server.  This presently means trying to auto-enroll in kiosk mode.
-  </int>
-  <int value="16" label="Install attributes timeout">
-    Lockbox initialization took too long to complete.
-  </int>
-  <int value="17" label="Lockbox domain mismatch on re-enrollment">
-    Lockbox error on re-enrollment: domain does not match install attributes.
-  </int>
-  <int value="18" label="Registration/fetch: missing licenses">
-    Registration / policy fetch failed: DM server reports licenses expired or
-    exhausted.
-  </int>
-  <int value="19" label="Robot auth code fetch failed">
-    Failed to fetch device robot authorization code from DM Server.
-  </int>
-  <int value="20" label="Robot refresh token fetch failed">
-    Failed to fetch device robot refresh token from GAIA.
-  </int>
-  <int value="21" label="Robot refresh token store failed">
-    Failed to persist robot account refresh token on device.
-  </int>
-  <int value="22" label="Registration/fetch: deprovisioned device">
-    Registration / policy fetch failed: DM server reports administrator
-    deprovisioned the device.
-  </int>
-  <int value="23" label="Registration/fetch: domain mismatch">
-    Registration / policy fetch failed: DM server reports domain mismatch.
-  </int>
-  <int value="24" label="Triggered">
-    Enrollment has been triggered, the webui login screen has been shown.
-  </int>
-  <int value="25" label="Restarted with valid credentials">
-    The user submitted valid credentials (GAIA or registration certificate) to
-    start the enrollment process for the second (or further) time.
-  </int>
-  <int value="26" label="Store token and ID failed (unused)">
-    UNUSED: Failed to store DM token and device ID.
-  </int>
-  <int value="27" label="Error getting FRE state keys">
-    Failed to obtain FRE state keys.
-  </int>
-  <int value="28" label="Error validating policy">
-    Failed to validate policy.
-  </int>
-  <int value="29" label="Error in CloudPolicyStore">
-    Failed due to error in CloudPolicyStore.
-  </int>
-  <int value="30" label="Error locking device (unused)">
-    UNUSED: Failed to lock device.
-  </int>
-  <int value="31" label="Registration/fetch: request payload invalid">
-    Registration / policy fetch failed: DM server reports invalid request
-    payload.
-  </int>
-  <int value="32" label="Registration/fetch: device not found">
-    Registration / policy fetch failed: DM server reports device not found.
-  </int>
-  <int value="33" label="Registration/fetch: DM token invalid">
-    Registration / policy fetch failed: DM server reports DM token invalid.
-  </int>
-  <int value="34" label="Registration/fetch: activation pending">
-    Registration / policy fetch failed: DM server reports activation pending.
-  </int>
-  <int value="35" label="Registration/fetch: device ID conflict">
-    Registration / policy fetch failed: DM server reports device ID conflict.
-  </int>
-  <int value="36" label="Registration/fetch: policy not found">
-    Registration / policy fetch failed: DM server can't find policy.
-  </int>
-  <int value="37" label="Registration/fetch: HTTP request failed">
-    Registration / policy fetch failed: HTTP request failed.
-  </int>
-  <int value="38" label="Registration/fetch: temporary unavailable">
-    Registration / policy fetch failed: DM server reports temporary problem.
-  </int>
-  <int value="39" label="Registration/fetch: HTTP error response">
-    Registration / policy fetch failed: DM server returns non-success HTTP
-    status code.
-  </int>
-  <int value="40" label="Registration/fetch: invalid response">
-    Registration / policy fetch failed: can't decode DM server response.
-  </int>
-  <int value="41" label="OAuth fetch: account not signed up">
-    OAuth token fetch failed: account not signed up.
-  </int>
-  <int value="42" label="OAuth fetch: account deleted">
-    OAuth token fetch failed: account deleted.
-  </int>
-  <int value="43" label="OAuth fetch: account disabled">
-    OAuth token fetch failed: account disabled.
-  </int>
-  <int value="44" label="Re-enrollment: pre-check domain mismatch">
-    Re-enrollment pre-check failed: domain does not match install attributes.
-  </int>
-  <int value="45" label="Lockbox initialization failed">
-    Lockbox backend failed to initialize.
-  </int>
-  <int value="46" label="Lockbox already locked">
-    Lockbox backend (TPM) already locked.
-  </int>
-  <int value="47" label="Lockbox set attribute failed">
-    Lockbox failure setting attributes.
-  </int>
-  <int value="48" label="Lockbox locking failed">
-    Lockbox failure during locking.
-  </int>
-  <int value="49" label="Lockbox inconsistent read back">
-    Lockbox read back is inconsistent.
-  </int>
-  <int value="50" label="Device attributes update failed">
-    Failed to update device attributes.
-  </int>
-  <int value="51" label="Lockbox device mode mismatch">
-    Enrollment mode does not match already locked install attributes.
-  </int>
-  <int value="52" label="Registration certificate fetch fail">
-    A registration certificate could not be obtained from the PCA.
-  </int>
-  <int value="53" label="Cannot sign enrollment request">
-    The request to enroll could not be signed.
-  </int>
-  <int value="54" label="Device identification missing">
-    Device model or serial number missing from VPD.
-  </int>
-  <int value="55" label="AD policy fetch fail">
-    Active Directory policy fetch failed.
-  </int>
-  <int value="56" label="Store DM token failed">
-    Failed to store DM token into the local state.
-  </int>
-</enum>
-
-<enum name="EnterprisePolicies" type="int">
-<!-- Generated from components/policy/resources/policy_templates.json -->
-
-  <int value="1" label="HomepageLocation"/>
-  <int value="2" label="HomepageIsNewTabPage"/>
-  <int value="3" label="DefaultBrowserSettingEnabled"/>
-  <int value="4" label="ApplicationLocaleValue"/>
-  <int value="5" label="AlternateErrorPagesEnabled"/>
-  <int value="6" label="SearchSuggestEnabled"/>
-  <int value="7" label="DnsPrefetchingEnabled"/>
-  <int value="8" label="DisableSpdy"/>
-  <int value="9" label="JavascriptEnabled"/>
-  <int value="10" label="IncognitoEnabled"/>
-  <int value="11" label="SavingBrowserHistoryDisabled"/>
-  <int value="12" label="PrintingEnabled"/>
-  <int value="13" label="CloudPrintProxyEnabled"/>
-  <int value="14" label="SafeBrowsingEnabled"/>
-  <int value="15" label="MetricsReportingEnabled"/>
-  <int value="16" label="PasswordManagerEnabled"/>
-  <int value="17" label="PasswordManagerAllowShowPasswords"/>
-  <int value="18" label="AutoFillEnabled"/>
-  <int value="19" label="DisabledPlugins"/>
-  <int value="20" label="SyncDisabled"/>
-  <int value="21" label="ProxyMode"/>
-  <int value="22" label="ProxyServerMode"/>
-  <int value="23" label="ProxyServer"/>
-  <int value="24" label="ProxyPacUrl"/>
-  <int value="25" label="ProxyBypassList"/>
-  <int value="26" label="AuthSchemes"/>
-  <int value="27" label="DisableAuthNegotiateCnameLookup"/>
-  <int value="28" label="EnableAuthNegotiatePort"/>
-  <int value="29" label="AuthServerWhitelist"/>
-  <int value="30" label="AuthNegotiateDelegateWhitelist"/>
-  <int value="31" label="GSSAPILibraryName"/>
-  <int value="32" label="ExtensionInstallBlacklist"/>
-  <int value="33" label="ExtensionInstallWhitelist"/>
-  <int value="34" label="ExtensionInstallForcelist"/>
-  <int value="35" label="ShowHomeButton"/>
-  <int value="36" label="DeveloperToolsDisabled"/>
-  <int value="37" label="RestoreOnStartup"/>
-  <int value="38" label="RestoreOnStartupURLs"/>
-  <int value="39" label="BlockThirdPartyCookies"/>
-  <int value="40" label="DefaultSearchProviderEnabled"/>
-  <int value="41" label="DefaultSearchProviderName"/>
-  <int value="42" label="DefaultSearchProviderKeyword"/>
-  <int value="43" label="DefaultSearchProviderSearchURL"/>
-  <int value="44" label="DefaultSearchProviderSuggestURL"/>
-  <int value="45" label="DefaultSearchProviderInstantURL"/>
-  <int value="46" label="DefaultSearchProviderIconURL"/>
-  <int value="47" label="DefaultSearchProviderEncodings"/>
-  <int value="48" label="DefaultCookiesSetting"/>
-  <int value="49" label="DefaultImagesSetting"/>
-  <int value="50" label="DefaultJavaScriptSetting"/>
-  <int value="51" label="DefaultPluginsSetting"/>
-  <int value="52" label="DefaultPopupsSetting"/>
-  <int value="53" label="DefaultNotificationsSetting"/>
-  <int value="54" label="DefaultGeolocationSetting"/>
-  <int value="55" label="Disable3DAPIs"/>
-  <int value="56" label="PolicyRefreshRate"/>
-  <int value="57" label="ChromeFrameRendererSettings"/>
-  <int value="58" label="RenderInChromeFrameList"/>
-  <int value="59" label="RenderInHostList"/>
-  <int value="60" label="ChromeFrameContentTypes"/>
-  <int value="61" label="ChromeOsLockOnIdleSuspend"/>
-  <int value="62" label="InstantEnabled"/>
-  <int value="63" label="UserDataDir"/>
-  <int value="64" label="DownloadDirectory"/>
-  <int value="65" label="ClearSiteDataOnExit"/>
-  <int value="66" label="DisablePluginFinder"/>
-  <int value="67" label="CookiesBlockedForUrls"/>
-  <int value="68" label="CookiesSessionOnlyForUrls"/>
-  <int value="69" label="ImagesAllowedForUrls"/>
-  <int value="70" label="ImagesBlockedForUrls"/>
-  <int value="71" label="JavaScriptAllowedForUrls"/>
-  <int value="72" label="JavaScriptBlockedForUrls"/>
-  <int value="73" label="PluginsAllowedForUrls"/>
-  <int value="74" label="PluginsBlockedForUrls"/>
-  <int value="75" label="PopupsAllowedForUrls"/>
-  <int value="76" label="PopupsBlockedForUrls"/>
-  <int value="77" label="CookiesAllowedForUrls"/>
-  <int value="78" label="EnabledPlugins"/>
-  <int value="79" label="DisabledPluginsExceptions"/>
-  <int value="80" label="TranslateEnabled"/>
-  <int value="81" label="AllowOutdatedPlugins"/>
-  <int value="82" label="BookmarkBarEnabled"/>
-  <int value="83" label="EditBookmarksEnabled"/>
-  <int value="84" label="AllowFileSelectionDialogs"/>
-  <int value="85" label="DisabledSchemes"/>
-  <int value="86" label="AlwaysAuthorizePlugins"/>
-  <int value="87" label="GCFUserDataDir"/>
-  <int value="88" label="DiskCacheDir"/>
-  <int value="89" label="AllowCrossOriginAuthPrompt"/>
-  <int value="90" label="DevicePolicyRefreshRate"/>
-  <int value="91" label="ChromeOsReleaseChannel"/>
-  <int value="92" label="MaxConnectionsPerProxy"/>
-  <int value="93" label="IncognitoModeAvailability"/>
-  <int value="94" label="RemoteAccessClientFirewallTraversal"/>
-  <int value="95" label="RemoteAccessHostFirewallTraversal"/>
-  <int value="96" label="HideWebStorePromo"/>
-  <int value="97" label="ImportBookmarks"/>
-  <int value="98" label="ImportHistory"/>
-  <int value="99" label="ImportHomepage"/>
-  <int value="100" label="ImportSearchEngine"/>
-  <int value="101" label="ImportSavedPasswords"/>
-  <int value="102" label="AutoSelectCertificateForUrls"/>
-  <int value="103" label="URLBlacklist"/>
-  <int value="104" label="URLWhitelist"/>
-  <int value="105" label="NotificationsAllowedForUrls"/>
-  <int value="106" label="NotificationsBlockedForUrls"/>
-  <int value="107" label="OpenNetworkConfiguration"/>
-  <int value="108" label="DeviceOpenNetworkConfiguration"/>
-  <int value="109" label="CloudPrintSubmitEnabled"/>
-  <int value="110" label="DiskCacheSize"/>
-  <int value="111" label="MediaCacheSize"/>
-  <int value="112" label="EnterpriseWebStoreURL"/>
-  <int value="113" label="EnterpriseWebStoreName"/>
-  <int value="114" label="EnableOriginBoundCerts"/>
-  <int value="115" label="EnableMemoryInfo"/>
-  <int value="116" label="ProxySettings"/>
-  <int value="117" label="DisablePrintPreview"/>
-  <int value="118" label="DisableSSLRecordSplitting"/>
-  <int value="119" label="ReportDeviceVersionInfo"/>
-  <int value="120" label="ReportDeviceActivityTimes"/>
-  <int value="121" label="ReportDeviceBootMode"/>
-  <int value="122" label="DeviceUserWhitelist"/>
-  <int value="123" label="DeviceAllowNewUsers"/>
-  <int value="124" label="DeviceGuestModeEnabled"/>
-  <int value="125" label="DeviceShowUserNamesOnSignin"/>
-  <int value="126" label="DeviceDataRoamingEnabled"/>
-  <int value="127" label="DeviceMetricsReportingEnabled"/>
-  <int value="128" label="DeviceEphemeralUsersEnabled"/>
-  <int value="129" label="EnableOnlineRevocationChecks"/>
-  <int value="130" label="DeviceIdleLogoutTimeout"/>
-  <int value="131" label="DeviceIdleLogoutWarningDuration"/>
-  <int value="132" label="DeviceLoginScreenSaverId"/>
-  <int value="133" label="DeviceLoginScreenSaverTimeout"/>
-  <int value="134" label="ChromeOsReleaseChannelDelegated"/>
-  <int value="135" label="DeviceAppPack"/>
-  <int value="136" label="DeviceAutoUpdateDisabled"/>
-  <int value="137" label="DeviceStartUpUrls"/>
-  <int value="138" label="BackgroundModeEnabled"/>
-  <int value="139" label="DriveDisabled"/>
-  <int value="140" label="DriveDisabledOverCellular"/>
-  <int value="141" label="AdditionalLaunchParameters"/>
-  <int value="142" label="DeviceTargetVersionPrefix"/>
-  <int value="143" label="ReportDeviceLocation"/>
-  <int value="144" label="PinnedLauncherApps"/>
-  <int value="145" label="DeviceUpdateScatterFactor"/>
-  <int value="146" label="DeviceUpdateAllowedConnectionTypes"/>
-  <int value="147" label="RestrictSigninToPattern"/>
-  <int value="148" label="ExtensionInstallSources"/>
-  <int value="149" label="DefaultMediaStreamSetting"/>
-  <int value="150" label="DisableSafeBrowsingProceedAnyway"/>
-  <int value="151" label="SpellCheckServiceEnabled"/>
-  <int value="152" label="ExternalStorageDisabled"/>
-  <int value="153" label="DisableScreenshots"/>
-  <int value="154" label="RemoteAccessHostDomain"/>
-  <int value="155" label="RemoteAccessHostRequireTwoFactor"/>
-  <int value="156" label="RemoteAccessHostTalkGadgetPrefix"/>
-  <int value="157" label="RemoteAccessHostRequireCurtain"/>
-  <int value="158" label="SystemTimezone"/>
-  <int value="159" label="AudioOutputAllowed"/>
-  <int value="160" label="AudioCaptureAllowed"/>
-  <int value="161" label="DefaultSearchProviderAlternateURLs"/>
-  <int value="162" label="ForceSafeSearch"/>
-  <int value="163" label="DeviceLocalAccounts"/>
-  <int value="164" label="ShowLogoutButtonInTray"/>
-  <int value="165" label="BuiltInDnsClientEnabled"/>
-  <int value="166" label="ShelfAutoHideBehavior"/>
-  <int value="167" label="VideoCaptureAllowed"/>
-  <int value="168" label="ExtensionAllowedTypes"/>
-  <int value="169" label="UserDisplayName"/>
-  <int value="170" label="SessionLengthLimit"/>
-  <int value="171" label="DefaultSearchProviderSearchTermsReplacementKey"/>
-  <int value="172" label="ScreenDimDelayAC"/>
-  <int value="173" label="ScreenOffDelayAC"/>
-  <int value="174" label="ScreenLockDelayAC"/>
-  <int value="175" label="IdleDelayAC"/>
-  <int value="176" label="ScreenDimDelayBattery"/>
-  <int value="177" label="ScreenOffDelayBattery"/>
-  <int value="178" label="ScreenLockDelayBattery"/>
-  <int value="179" label="IdleDelayBattery"/>
-  <int value="180" label="IdleAction"/>
-  <int value="181" label="LidCloseAction"/>
-  <int value="182" label="PowerManagementUsesAudioActivity"/>
-  <int value="183" label="PowerManagementUsesVideoActivity"/>
-  <int value="184" label="PresentationIdleDelayScale"/>
-  <int value="185" label="DeviceAllowRedeemChromeOsRegistrationOffers"/>
-  <int value="186" label="TermsOfServiceURL"/>
-  <int value="187" label="AllowDeletingBrowserHistory"/>
-  <int value="188" label="ShowAccessibilityOptionsInSystemTrayMenu"/>
-  <int value="189" label="HideWebStoreIcon"/>
-  <int value="190" label="SigninAllowed"/>
-  <int value="191" label="DeviceStartUpFlags"/>
-  <int value="192" label="UptimeLimit"/>
-  <int value="193" label="RebootAfterUpdate"/>
-  <int value="194" label="DeviceLocalAccountAutoLoginId"/>
-  <int value="195" label="DeviceLocalAccountAutoLoginDelay"/>
-  <int value="196" label="VariationsRestrictParameter"/>
-  <int value="197" label="IdleWarningDelayAC"/>
-  <int value="198" label="IdleWarningDelayBattery"/>
-  <int value="199" label="DeviceVariationsRestrictParameter"/>
-  <int value="200" label="AttestationEnabledForUser"/>
-  <int value="201" label="AttestationExtensionWhitelist"/>
-  <int value="202" label="DeviceLocalAccountAutoLoginBailoutEnabled"/>
-  <int value="203" label="AllowScreenWakeLocks"/>
-  <int value="204" label="ContentPackDefaultFilteringBehavior"/>
-  <int value="205" label="ContentPackManualBehaviorHosts"/>
-  <int value="206" label="ContentPackManualBehaviorURLs"/>
-  <int value="207" label="AttestationEnabledForDevice"/>
-  <int value="208" label="AudioCaptureAllowedUrls"/>
-  <int value="209" label="VideoCaptureAllowedUrls"/>
-  <int value="210" label="UserActivityScreenDimDelayScale"/>
-  <int value="211" label="LargeCursorEnabled"/>
-  <int value="212" label="SpokenFeedbackEnabled"/>
-  <int value="213" label="HighContrastEnabled"/>
-  <int value="214" label="ScreenMagnifierType"/>
-  <int value="215" label="DeviceLoginScreenDefaultLargeCursorEnabled"/>
-  <int value="216" label="DeviceLoginScreenDefaultSpokenFeedbackEnabled"/>
-  <int value="217" label="DeviceLoginScreenDefaultHighContrastEnabled"/>
-  <int value="218" label="DeviceLoginScreenDefaultScreenMagnifierType"/>
-  <int value="219" label="SupervisedUsersEnabled"/>
-  <int value="220" label="PresentationScreenDimDelayScale"/>
-  <int value="221" label="SuppressChromeFrameTurndownPrompt"/>
-  <int value="222" label="IdleActionBattery"/>
-  <int value="223" label="SupervisedUserCreationEnabled"/>
-  <int value="224" label="ReportDeviceNetworkInterfaces"/>
-  <int value="225" label="DeviceLoginScreenPowerManagement"/>
-  <int value="226" label="IdleActionAC"/>
-  <int value="227" label="ManagedBookmarks"/>
-  <int value="228" label="MaxInvalidationFetchDelay"/>
-  <int value="229" label="DefaultSearchProviderImageURL"/>
-  <int value="230" label="DefaultSearchProviderSearchURLPostParams"/>
-  <int value="231" label="DefaultSearchProviderSuggestURLPostParams"/>
-  <int value="232" label="DefaultSearchProviderInstantURLPostParams"/>
-  <int value="233" label="DefaultSearchProviderImageURLPostParams"/>
-  <int value="234" label="RemoteAccessHostAllowClientPairing"/>
-  <int value="235" label="RequireOnlineRevocationChecksForLocalAnchors"/>
-  <int value="236" label="SystemUse24HourClock"/>
-  <int value="237" label="DefaultSearchProviderNewTabURL"/>
-  <int value="238" label="SkipMetadataCheck"/>
-  <int value="239" label="AttestationForContentProtectionEnabled"/>
-  <int value="240" label="FullscreenAllowed"/>
-  <int value="241" label="DataCompressionProxyEnabled"/>
-  <int value="242" label="DeviceAutoUpdateP2PEnabled"/>
-  <int value="243" label="DeviceUpdateHttpDownloadsEnabled"/>
-  <int value="244" label="ChromeOsMultiProfileUserBehavior"/>
-  <int value="245" label="ForceEphemeralProfiles"/>
-  <int value="246" label="AutoCleanUpStrategy"/>
-  <int value="247" label="WaitForInitialUserActivity"/>
-  <int value="248" label="ReportDeviceUsers"/>
-  <int value="249" label="UserAvatarImage"/>
-  <int value="250" label="DeviceLocalAccountPromptForNetworkWhenOffline"/>
-  <int value="251" label="NativeMessagingBlacklist"/>
-  <int value="252" label="NativeMessagingWhitelist"/>
-  <int value="253" label="NativeMessagingUserLevelHosts"/>
-  <int value="254" label="SAMLOfflineSigninTimeLimit"/>
-  <int value="255" label="VirtualKeyboardEnabled"/>
-  <int value="256" label="DeviceLoginScreenDefaultVirtualKeyboardEnabled"/>
-  <int value="257" label="RemoteAccessHostAllowGnubbyAuth"/>
-  <int value="258" label="PowerManagementIdleSettings"/>
-  <int value="259" label="ScreenLockDelays"/>
-  <int value="260" label="KeyboardDefaultToFunctionKeys"/>
-  <int value="261" label="WPADQuickCheckEnabled"/>
-  <int value="262" label="WallpaperImage"/>
-  <int value="263" label="RemoteAccessHostAllowRelayedConnection"/>
-  <int value="264" label="RemoteAccessHostUdpPortRange"/>
-  <int value="265" label="EnableDeprecatedWebBasedSignin"/>
-  <int value="266" label="DeviceBlockDevmode"/>
-  <int value="267" label="ShowAppsShortcutInBookmarkBar"/>
-  <int value="268" label="RegisteredProtocolHandlers"/>
-  <int value="269" label="TouchVirtualKeyboardEnabled"/>
-  <int value="270" label="EnableDeprecatedWebPlatformFeatures"/>
-  <int value="271" label="DeviceTransferSAMLCookies"/>
-  <int value="272" label="EasyUnlockAllowed"/>
-  <int value="273" label="NetworkPredictionOptions"/>
-  <int value="274" label="SessionLocales"/>
-  <int value="275" label="BrowserGuestModeEnabled"/>
-  <int value="276" label="BrowserAddPersonEnabled"/>
-  <int value="277" label="ImportAutofillFormData"/>
-  <int value="278" label="ExtensionSettings"/>
-  <int value="279" label="SSLVersionMin"/>
-  <int value="280" label="SSLVersionFallbackMin"/>
-  <int value="281" label="ContextualSearchEnabled"/>
-  <int value="282" label="ForceGoogleSafeSearch"/>
-  <int value="283" label="ForceYouTubeSafetyMode"/>
-  <int value="284" label="DeviceRebootOnShutdown"/>
-  <int value="285" label="RemoteAccessHostMatchUsername"/>
-  <int value="286" label="RemoteAccessHostTokenUrl"/>
-  <int value="287" label="RemoteAccessHostTokenValidationUrl"/>
-  <int value="288" label="RemoteAccessHostTokenValidationCertificateIssuer"/>
-  <int value="289" label="RemoteAccessHostDebugOverridePolicies"/>
-  <int value="290" label="ReportDeviceHardwareStatus"/>
-  <int value="291" label="ReportDeviceSessionStatus"/>
-  <int value="292" label="ReportUploadFrequency"/>
-  <int value="293" label="HeartbeatEnabled"/>
-  <int value="294" label="HeartbeatFrequency"/>
-  <int value="295" label="CaptivePortalAuthenticationIgnoresProxy"/>
-  <int value="296" label="ExtensionCacheSize"/>
-  <int value="297" label="DeviceLoginScreenDomainAutoComplete"/>
-  <int value="298" label="ForceMaximizeOnFirstRun"/>
-  <int value="299" label="SafeBrowsingExtendedReportingOptInAllowed"/>
-  <int value="300" label="SSLErrorOverrideAllowed"/>
-  <int value="301" label="QuicAllowed"/>
-  <int value="302" label="KeyPermissions"/>
-  <int value="303" label="WelcomePageOnOSUpgradeEnabled"/>
-  <int value="304" label="HardwareAccelerationModeEnabled"/>
-  <int value="305" label="AuthAndroidNegotiateAccountType"/>
-  <int value="306" label="LogUploadEnabled"/>
-  <int value="307" label="UnifiedDesktopEnabledByDefault"/>
-  <int value="308" label="DefaultPrinterSelection"/>
-  <int value="309" label="AllowDinosaurEasterEgg"/>
-  <int value="310" label="RC4Enabled"/>
-  <int value="311" label="DisplayRotationDefault"/>
-  <int value="312" label="SupervisedUserContentProviderEnabled"/>
-  <int value="313" label="DefaultKeygenSetting"/>
-  <int value="314" label="KeygenAllowedForUrls"/>
-  <int value="315" label="KeygenBlockedForUrls"/>
-  <int value="316" label="RemoteAccessHostClientDomain"/>
-  <int value="317" label="ArcEnabled"/>
-  <int value="318" label="ArcPolicy"/>
-  <int value="319" label="AllowKioskAppControlChromeVersion"/>
-  <int value="320" label="DefaultWebBluetoothGuardSetting"/>
-  <int value="321" label="LoginAuthenticationBehavior"/>
-  <int value="322" label="UsbDetachableWhitelist"/>
-  <int value="323" label="DeviceAllowBluetooth"/>
-  <int value="324" label="SuppressUnsupportedOSWarning"/>
-  <int value="325" label="DeviceQuirksDownloadEnabled"/>
-  <int value="326" label="SystemTimezoneAutomaticDetection"/>
-  <int value="327" label="TaskManagerEndProcessEnabled"/>
-  <int value="328" label="LoginVideoCaptureAllowedUrls"/>
-  <int value="329" label="AllowScreenLock"/>
-  <int value="330" label="ArcCertificatesSyncMode"/>
-  <int value="331" label="AllowedDomainsForApps"/>
-  <int value="332" label="PacHttpsUrlStrippingEnabled"/>
-  <int value="333" label="EnableMediaRouter"/>
-  <int value="334" label="DHEEnabled"/>
-  <int value="335" label="CertificateTransparencyEnforcementDisabledForUrls"/>
-  <int value="336" label="DeviceLoginScreenAppInstallList"/>
-  <int value="337" label="ArcBackupRestoreEnabled"/>
-  <int value="338" label="NTPContentSuggestionsEnabled"/>
-  <int value="339" label="WebRtcUdpPortRange"/>
-  <int value="340" label="EnableSha1ForLocalAnchors"/>
-  <int value="341" label="WebRestrictionsAuthority"/>
-  <int value="342" label="ComponentUpdatesEnabled"/>
-  <int value="343" label="ExternalStorageReadOnly"/>
-  <int value="344" label="RemoteAccessHostAllowUiAccessForRemoteAssistance"/>
-  <int value="345" label="Http09OnNonDefaultPortsEnabled"/>
-  <int value="346" label="ForceBrowserSignin"/>
-  <int value="347" label="AlwaysOpenPdfExternally"/>
-  <int value="348" label="ForceYouTubeRestrict"/>
-  <int value="349" label="ReportArcStatusEnabled"/>
-  <int value="350" label="NativePrinters"/>
-  <int value="351" label="NetworkThrottlingEnabled"/>
-  <int value="352" label="QuickUnlockModeWhitelist"/>
-  <int value="353" label="QuickUnlockTimeout"/>
-  <int value="354" label="PinUnlockMinimumLength"/>
-  <int value="355" label="PinUnlockMaximumLength"/>
-  <int value="356" label="PinUnlockWeakPinsAllowed"/>
-  <int value="357" label="DeviceWallpaperImage"/>
-  <int value="358" label="RoamingProfileSupportEnabled"/>
-  <int value="359" label="RoamingProfileLocation"/>
-  <int value="360" label="NewTabPageLocation"/>
-  <int value="361" label="SSLVersionMax"/>
-  <int value="362" label="ShowCastIconInToolbar"/>
-  <int value="363" label="ArcLocationServiceEnabled"/>
-  <int value="364" label="DeviceLoginScreenLocales"/>
-  <int value="365" label="DeviceLoginScreenInputMethods"/>
-  <int value="366" label="EnableCommonNameFallbackForLocalAnchors"/>
-</enum>
-
-<enum name="EnterprisePolicyInvalidations" type="int">
-  <summary>
-    Defined as PolicyInvalidationType in
-    components/policy/core/common/cloud/enterprise_metrics.h.
-  </summary>
-  <int value="0" label="No payload; not expired"/>
-  <int value="1" label="Payload; not expired"/>
-  <int value="3" label="No payload; expired"/>
-  <int value="4" label="Payload; expired"/>
-</enum>
-
-<enum name="EnterprisePolicyKeyVerification" type="int">
-  <summary>
-    Defined as MetricPolicyKeyVerification in
-    components/policy/core/common/cloud/cloud_policy_validator.cc.
-  </summary>
-  <int value="0" label="Key missing">Client has no verification key.</int>
-  <int value="1" label="Signature missing">
-    The Policy being verified has no key signature (e.g. policy fetched before
-    the server supported the verification key).
-  </int>
-  <int value="2" label="Verification failed">
-    The key signature did not match the expected value (in theory, this should
-    only happen after key rotation or if the policy cached on disk has been
-    modified).
-  </int>
-  <int value="3" label="Verification succeeded">
-    Key verification succeeded.
-  </int>
-</enum>
-
-<enum name="EnterprisePolicyLoadStatus" type="int">
-  <summary>
-    Status codes produced by the policy loaders that pull policy settings from
-    the platform-specific management infrastructure, such as Windows Group
-    Policy.  Defined as PolicyLoadStatus in
-    components/policy/core/common/policy_load_status.h.
-  </summary>
-  <int value="0" label="STARTED">
-    Policy load attempt started. This gets logged for each policy load attempt
-    to get a baseline on the number of requests, and an arbitrary number of the
-    below status codes may get added in addition.
-  </int>
-  <int value="1" label="QUERY_FAILED">
-    System failed to determine whether there's policy.
-  </int>
-  <int value="2" label="NO_POLICY">No policy present.</int>
-  <int value="3" label="INACCCESSIBLE">
-    Data inaccessible, such as non-local policy file.
-  </int>
-  <int value="4" label="MISSING">
-    Data missing, such as policy file not present.
-  </int>
-  <int value="5" label="WOW64_REDIRECTION_DISABLED">
-    Trying with Wow64 redirection disabled.
-  </int>
-  <int value="6" label="READ_ERROR">
-    Data read error, for example file reading errors.
-  </int>
-  <int value="7" label="TOO_BIG">Data too large to process.</int>
-  <int value="8" label="PARSE_ERROR">Parse error.</int>
-</enum>
-
-<enum name="EnterprisePolicyRefresh" type="int">
-  <summary>
-    Defined as MetricPolicyRefresh in
-    components/policy/core/common/cloud/enterprise_metrics.h.
-  </summary>
-  <int value="0" label="Changed"/>
-  <int value="1" label="Changed; Invalidations disabled"/>
-  <int value="2" label="Unchanged"/>
-  <int value="3" label="Invalidated; Changed"/>
-  <int value="4" label="Invalidated; Unchanged"/>
-</enum>
-
-<enum name="EnterprisePolicyType" type="int">
-  <summary>
-    Result of Policy operations as defined as MetricPolicy in
-    components/policy/core/common/cloud/enterprise_metrics.h.
-  </summary>
-  <int value="0" label="Load Succeeded">
-    A cached policy was successfully loaded from disk.
-  </int>
-  <int value="1" label="Load Failed">
-    Reading a cached policy from disk failed.
-  </int>
-  <int value="2" label="Fetch Requested">
-    A policy fetch request was sent to the DM server.
-  </int>
-  <int value="3" label="Fetch Request Failed">
-    The request was invalid, or the HTTP request failed.
-  </int>
-  <int value="4" label="Fetch Server Failed">
-    Error HTTP status received, or the DM server failed in another way.
-  </int>
-  <int value="5" label="Fetch Not Found">
-    Policy not found for the given user or device.
-  </int>
-  <int value="6" label="Fetch Invalid Token">
-    DM server didn't accept the token used in the request.
-  </int>
-  <int value="7" label="Fetch Response Received">
-    A response to the policy fetch request was received.
-  </int>
-  <int value="8" label="Fetch Bad Response">
-    The policy response message didn't contain a policy, or other data was
-    missing.
-  </int>
-  <int value="9" label="Fetch Invalid Policy">Failed to decode the policy.</int>
-  <int value="10" label="Fetch Bad Signature">
-    The device policy was rejected because its signature was invalid.
-  </int>
-  <int value="11" label="Fetch Timestamp In Future">
-    Rejected policy because its timestamp is in the future.
-  </int>
-  <int value="12" label="Fetch Non Enterprise Device">
-    Device policy rejected because the device is not managed.
-  </int>
-  <int value="13" label="Fetch User Mismatch">
-    The policy was provided for a username that is different from the device
-    owner, and the policy was rejected.
-  </int>
-  <int value="14" label="Fetch Other Failed">
-    The policy was rejected for another reason. Currently this can happen only
-    for device policies, when the SignedSettings fail to store or retrieve a
-    stored policy.
-  </int>
-  <int value="15" label="Fetch OK">The fetched policy was accepted.</int>
-  <int value="16" label="Fetch Not Modified">
-    The policy just fetched didn't have any changes compared to the cached
-    policy.
-  </int>
-  <int value="17" label="Store Succeeded">
-    Successfully cached a policy to disk.
-  </int>
-  <int value="18" label="Store Failed">Caching a policy to disk failed.</int>
-</enum>
-
-<enum name="EnterpriseUploadJobSuccess" type="int">
-  <summary>
-    Number of UploadJob retries as defined in
-    chrome/browser/chromeos/policy/upload_job_impl.cc.
-  </summary>
-  <int value="0" label="No retries"/>
-  <int value="1" label="1 retry"/>
-  <int value="2" label="2 retries"/>
-  <int value="3" label="3 retries"/>
-  <int value="10" label="Request failed"/>
-  <int value="11" label="Request interrupted"/>
-</enum>
-
-<enum name="EnterpriseUserSessionLogins" type="int">
-  <summary>
-    Types of sign-in events as defined in
-    chrome/browser/chromeos/login/enterprise_user_session_metrics.h
-  </summary>
-  <int value="0" label="Regular user"/>
-  <int value="1" label="Manual public session"/>
-  <int value="2" label="Automatic public session"/>
-  <int value="3" label="Manual kiosk session"/>
-  <int value="4" label="Automatic kiosk session"/>
-</enum>
-
-<enum name="ErrorCodesGetAdaptersAddresses" type="int">
-  <int value="8" label="ERROR_NOT_ENOUGH_MEMORY"/>
-  <int value="87" label="ERROR_INVALID_PARAMETER"/>
-  <int value="111" label="ERROR_BUFFER_OVERFLOW"/>
-  <int value="232" label="ERROR_NO_DATA"/>
-  <int value="1228" label="ERROR_ADDRESS_NOT_ASSOCIATED"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_All" type="int">
-  <int value="1" label="EAI_BADFLAGS(L)"/>
-  <int value="2" label="EAI_NONAME(L) EAI_AGAIN(M)"/>
-  <int value="3" label="EAI_AGAIN(L) EAI_BADFLAGS(M)"/>
-  <int value="4" label="EAI_FAIL"/>
-  <int value="5" label="EAI_NODATA(L) EAI_FAMILY(M)"/>
-  <int value="6" label="WSA_INVALID_HANDLE EAI_FAMILY(L) EAI_MEMORY(M)"/>
-  <int value="7" label="EAI_SOCKTYPE(L) EAI_NODATA(M)"/>
-  <int value="8" label="WSA_NOT_ENOUGH_MEMORY EAI_SERVICE(L) EAI_NONAME(M)"/>
-  <int value="9" label="EAI_ADDRFAMILY EAI_SERVICE(M)"/>
-  <int value="10" label="EAI_MEMORY(L) EAI_SOCKTYPE(L)"/>
-  <int value="11" label="EAI_SYSTEM"/>
-  <int value="12" label="EAI_OVERFLOW"/>
-  <int value="10022" label="WSAEINVAL"/>
-  <int value="10044" label="WSAESOCKTNOSUPPORT"/>
-  <int value="10047" label="WSAEAFNOSUPPORT"/>
-  <int value="10093" label="WSANOTINITIALISED"/>
-  <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
-  <int value="11001" label="WSA_HOST_NOT_FOUND"/>
-  <int value="11002" label="WSATRY_AGAIN"/>
-  <int value="11003" label="WSA_ANO_RECOVERY"/>
-  <int value="11004" label="WSANO_DATA"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Linux" type="int">
-  <int value="1" label="EAI_BADFLAGS"/>
-  <int value="2" label="EAI_NONAME"/>
-  <int value="3" label="EAI_AGAIN"/>
-  <int value="4" label="EAI_FAIL"/>
-  <int value="5" label="EAI_NODATA"/>
-  <int value="6" label="EAI_FAMILY"/>
-  <int value="7" label="EAI_SOCKTYPE"/>
-  <int value="8" label="EAI_SERVICE"/>
-  <int value="9" label="EAI_ADDRFAMILY"/>
-  <int value="10" label="EAI_MEMORY"/>
-  <int value="11" label="EAI_SYSTEM"/>
-  <int value="12" label="EAI_OVERFLOW"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Mac" type="int">
-  <int value="1" label="EAI_ADDRFAMILY"/>
-  <int value="2" label="EAI_AGAIN"/>
-  <int value="3" label="EAI_BADFLAGS"/>
-  <int value="4" label="EAI_FAIL"/>
-  <int value="5" label="EAI_FAMILY"/>
-  <int value="6" label="EAI_MEMORY"/>
-  <int value="7" label="EAI_NODATA"/>
-  <int value="8" label="EAI_NONAME"/>
-  <int value="9" label="EAI_SERVICE"/>
-  <int value="10" label="EAI_SOCKTYPE"/>
-  <int value="11" label="EAI_SYSTEM"/>
-  <int value="12" label="EAI_BADHINTS"/>
-  <int value="13" label="EAI_PROTOCOL"/>
-  <int value="14" label="EAI_OVERFLOW"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Win" type="int">
-  <int value="6" label="WSA_INVALID_HANDLE"/>
-  <int value="8" label="WSA_NOT_ENOUGH_MEMORY or EAI_SERVICE"/>
-  <int value="10022" label="WSAEINVAL"/>
-  <int value="10044" label="WSAESOCKTNOSUPPORT"/>
-  <int value="10047" label="WSAEAFNOSUPPORT"/>
-  <int value="10093" label="WSANOTINITIALISED"/>
-  <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
-  <int value="11001" label="WSA_HOST_NOT_FOUND"/>
-  <int value="11002" label="WSATRY_AGAIN"/>
-  <int value="11003" label="WSA_ANO_RECOVERY"/>
-  <int value="11004" label="WSANO_DATA"/>
-</enum>
-
-<enum name="ErrorPageButton" type="int">
-  <int value="0" label="NO_BUTTON"/>
-  <int value="1" label="RELOAD_BUTTON"/>
-  <int value="2" label="SHOW_SAVED_COPY_BUTTON"/>
-  <int value="3" label="MORE_BUTTON"/>
-  <int value="4" label="EASTER_EGG"/>
-  <int value="5" label="SHOW_CACHED_COPY_BUTTON"/>
-  <int value="6" label="SHOW_CACHED_PAGE_BUTTON"/>
-</enum>
-
-<enum name="ErrorPageUnexpectedStates" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="NON_ERROR_PAGE_URL"/>
-  <int value="2" label="NO_ERROR_INFO"/>
-  <int value="3" label="NON_ERROR_PAGE_URL_AND_NO_ERROR_INFO"/>
-</enum>
-
-<enum name="EVCTCompliance" type="int">
-  <int value="0" label="EV policy does not apply"/>
-  <int value="1" label="Compliant because certificate is whitelisted"/>
-  <int value="2" label="Compliant because SCTs satisfy CT policy"/>
-  <int value="3" label="Not compliant because there are not enough SCTs"/>
-  <int value="4"
-      label="Not compliant because there are not diverse enough SCTs"/>
-  <int value="5" label="Not compliant because the build is not timely"/>
-</enum>
-
-<enum name="EventHitTest" type="int">
-  <int value="0" label="Miss, not found in cache."/>
-  <int value="1" label="Miss, explicitly avoided."/>
-  <int value="2" label="Miss, validity region matches; type doesn't."/>
-  <int value="3" label="Hit, exact point."/>
-  <int value="4" label="Hit, region matched."/>
-</enum>
-
-<enum name="EventHitTestValidity" type="int">
-  <int value="0" label="Valid, exact match."/>
-  <int value="1" label="Valid, region match."/>
-  <int value="2" label="Incorrect, exact match (rect query)."/>
-  <int value="3" label="Incorrect, exact match (point query)."/>
-  <int value="4" label="Incorrect, region match (rect query)."/>
-  <int value="5" label="Incorrect, region match (point query)."/>
-</enum>
-
-<enum name="EventHitTestValidityScore" type="int">
-  <int value="0" label="Nothing matched."/>
-  <int value="1" label="Over widget matched."/>
-  <int value="2" label="Scrollbar matched."/>
-  <int value="4" label="URL element matched."/>
-  <int value="8" label="Local point matched."/>
-  <int value="16" label="Point in inner frame matched."/>
-  <int value="32" label="Inner pseudo node matched."/>
-  <int value="64" label="Inner node matched."/>
-  <int value="128" label="Request type matched."/>
-</enum>
-
-<enum name="EventResultType" type="int">
-  <int value="0" label="Passive"/>
-  <int value="1" label="Uncancelable"/>
-  <int value="2" label="Suppressed"/>
-  <int value="3" label="Cancelable and not canceled"/>
-  <int value="4" label="Cancelable and canceled"/>
-  <int value="5" label="Forced Non-Blocking Due to Fling"/>
-  <int value="6" label="Forced Non-Blocking Due to Unresponsive Main Thread"/>
-</enum>
-
-<enum name="EventTimestampValidity" type="int">
-  <int value="0" label="Invalid time base"/>
-  <int value="1" label="Valid time base"/>
-</enum>
-
-<enum name="EVWhitelistStatus" type="int">
-  <int value="0" label="Not present"/>
-  <int value="1" label="Invalid"/>
-  <int value="2" label="Valid"/>
-</enum>
-
-<enum name="ExecutionPhase" type="int">
-  <int value="0" label="UNINITIALIZED_PHASE"/>
-  <int value="100" label="START_METRICS_RECORDING"/>
-  <int value="200" label="CREATE_PROFILE"/>
-  <int value="300" label="STARTUP_TIMEBOMB_ARM"/>
-  <int value="400" label="THREAD_WATCHER_START"/>
-  <int value="500" label="MAIN_MESSAGE_LOOP_RUN"/>
-  <int value="600" label="SHUTDOWN_TIMEBOMB_ARM"/>
-  <int value="700" label="SHUTDOWN_COMPLETE"/>
-</enum>
-
-<enum name="ExpectCTHeaderResult" type="int">
-  <int value="0" label="EXPECT_CT_HEADER_BAD_VALUE"/>
-  <int value="1" label="EXPECT_CT_HEADER_BUILD_NOT_TIMELY"/>
-  <int value="2" label="EXPECT_CT_HEADER_PRIVATE_ROOT"/>
-  <int value="3" label="EXPECT_CT_HEADER_COMPLIANCE_DETAILS_UNAVAILABLE"/>
-  <int value="4" label="EXPECT_CT_HEADER_COMPLIED"/>
-  <int value="5" label="EXPECT_CT_HEADER_NOT_PRELOADED"/>
-  <int value="6" label="EXPECT_CT_HEADER_PROCESSED"/>
-</enum>
-
-<enum name="ExtensionBackgroundPageType" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Persistent"/>
-  <int value="2" label="Event Page"/>
-</enum>
-
-<enum name="ExtensionBubbleAction" type="int">
-  <int value="0" label="Learn more"/>
-  <int value="1" label="Execute"/>
-  <int value="2" label="Dismiss by user action"/>
-  <int value="3" label="Dismiss by deactivation"/>
-</enum>
-
-<enum name="ExtensionCreationFlags" type="int">
-  <int value="0" label="REQUIRE_KEY"/>
-  <int value="1" label="REQUIRE_MODERN_MANIFEST_VERSION"/>
-  <int value="2" label="ALLOW_FILE_ACCESS"/>
-  <int value="3" label="FROM_WEBSTORE"/>
-  <int value="4" label="FROM_BOOKMARK"/>
-  <int value="5" label="FOLLOW_SYMLINKS_ANYWHERE"/>
-  <int value="6" label="ERROR_ON_PRIVATE_KEY"/>
-  <int value="7" label="WAS_INSTALLED_BY_DEFAULT"/>
-  <int value="8" label="REQUIRE_PERMISSIONS_CONSENT"/>
-  <int value="9" label="IS_EPHEMERAL_DEPRECATED"/>
-  <int value="10" label="WAS_INSTALLED_BY_OEM"/>
-</enum>
-
-<enum name="ExtensionDisabledUIUserResponse" type="int">
-  <int value="0" label="IGNORED"/>
-  <int value="1" label="REENABLE"/>
-  <int value="2" label="UNINSTALL"/>
-</enum>
-
-<enum name="ExtensionDisableReason" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="USER_ACTION"/>
-  <int value="2" label="PERMISSIONS_INCREASE"/>
-  <int value="4" label="RELOAD"/>
-  <int value="8" label="UNSUPPORTED_REQUIREMENT"/>
-  <int value="16" label="SIDELOAD_WIPEOUT"/>
-  <int value="32" label="UNKNOWN_FROM_SYNC"/>
-  <int value="64" label="DEPRECATED_PERMISSIONS_CONSENT"/>
-  <int value="128" label="DEPRECATED_KNOWN_DISABLED"/>
-  <int value="256" label="NOT_VERIFIED"/>
-  <int value="512" label="GREYLIST"/>
-  <int value="1024" label="CORRUPTED"/>
-  <int value="2048" label="REMOTE_INSTALL"/>
-  <int value="4096" label="INACTIVE_EPHEMERAL_APP_DEPRECATED"/>
-  <int value="8192" label="EXTERNAL_EXTENSION"/>
-  <int value="16384" label="UPDATE_REQUIRED_BY_POLICY"/>
-  <int value="32768" label="CUSTODIAN_APPROVAL_REQUIRED"/>
-</enum>
-
-<enum name="ExtensionEvents" type="int">
-<!-- Generated from extensions/browser/extension_event_histogram_value.h -->
-
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="FOR_TEST"/>
-  <int value="2" label="ACCESSIBILITY_PRIVATE_ON_INTRODUCE_CHROME_VOX"/>
-  <int value="3" label="ACTIVITY_LOG_PRIVATE_ON_EXTENSION_ACTIVITY"/>
-  <int value="4" label="ALARMS_ON_ALARM"/>
-  <int value="5" label="APP_CURRENT_WINDOW_INTERNAL_ON_ALPHA_ENABLED_CHANGED"/>
-  <int value="6" label="APP_CURRENT_WINDOW_INTERNAL_ON_BOUNDS_CHANGED"/>
-  <int value="7" label="APP_CURRENT_WINDOW_INTERNAL_ON_CLOSED"/>
-  <int value="8" label="APP_CURRENT_WINDOW_INTERNAL_ON_FULLSCREENED"/>
-  <int value="9" label="APP_CURRENT_WINDOW_INTERNAL_ON_MAXIMIZED"/>
-  <int value="10" label="APP_CURRENT_WINDOW_INTERNAL_ON_MINIMIZED"/>
-  <int value="11" label="APP_CURRENT_WINDOW_INTERNAL_ON_RESTORED"/>
-  <int value="12"
-      label="APP_CURRENT_WINDOW_INTERNAL_ON_WINDOW_SHOWN_FOR_TESTS"/>
-  <int value="13" label="APP_RUNTIME_ON_EMBED_REQUESTED"/>
-  <int value="14" label="APP_RUNTIME_ON_LAUNCHED"/>
-  <int value="15" label="APP_RUNTIME_ON_RESTARTED"/>
-  <int value="16" label="APP_WINDOW_ON_BOUNDS_CHANGED"/>
-  <int value="17" label="APP_WINDOW_ON_CLOSED"/>
-  <int value="18" label="APP_WINDOW_ON_FULLSCREENED"/>
-  <int value="19" label="APP_WINDOW_ON_MAXIMIZED"/>
-  <int value="20" label="APP_WINDOW_ON_MINIMIZED"/>
-  <int value="21" label="APP_WINDOW_ON_RESTORED"/>
-  <int value="22" label="DELETED_AUDIO_MODEM_ON_RECEIVED"/>
-  <int value="23" label="DELETED_AUDIO_MODEM_ON_TRANSMIT_FAIL"/>
-  <int value="24" label="AUDIO_ON_DEVICE_CHANGED"/>
-  <int value="25" label="AUDIO_ON_DEVICES_CHANGED"/>
-  <int value="26" label="AUDIO_ON_LEVEL_CHANGED"/>
-  <int value="27" label="AUDIO_ON_MUTE_CHANGED"/>
-  <int value="28" label="AUTOFILL_PRIVATE_ON_ADDRESS_LIST_CHANGED"/>
-  <int value="29" label="AUTOFILL_PRIVATE_ON_CREDIT_CARD_LIST_CHANGED"/>
-  <int value="30" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_EVENT"/>
-  <int value="31" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_TREE_DESTROYED"/>
-  <int value="32" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_VALUE_CHANGED"/>
-  <int value="33" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_VALUE_CHANGED"/>
-  <int value="34" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_ADDED"/>
-  <int value="35" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_CHANGED"/>
-  <int value="36" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_REMOVED"/>
-  <int value="37" label="BLUETOOTH_ON_ADAPTER_STATE_CHANGED"/>
-  <int value="38" label="BLUETOOTH_ON_DEVICE_ADDED"/>
-  <int value="39" label="BLUETOOTH_ON_DEVICE_CHANGED"/>
-  <int value="40" label="BLUETOOTH_ON_DEVICE_REMOVED"/>
-  <int value="41" label="BLUETOOTH_PRIVATE_ON_PAIRING"/>
-  <int value="42" label="BLUETOOTH_SOCKET_ON_ACCEPT"/>
-  <int value="43" label="BLUETOOTH_SOCKET_ON_ACCEPT_ERROR"/>
-  <int value="44" label="BLUETOOTH_SOCKET_ON_RECEIVE"/>
-  <int value="45" label="BLUETOOTH_SOCKET_ON_RECEIVE_ERROR"/>
-  <int value="46" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_ENTER"/>
-  <int value="47" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_LEAVE"/>
-  <int value="48" label="BOOKMARK_MANAGER_PRIVATE_ON_DROP"/>
-  <int value="49" label="BOOKMARK_MANAGER_PRIVATE_ON_META_INFO_CHANGED"/>
-  <int value="50" label="BOOKMARKS_ON_CHANGED"/>
-  <int value="51" label="BOOKMARKS_ON_CHILDREN_REORDERED"/>
-  <int value="52" label="BOOKMARKS_ON_CREATED"/>
-  <int value="53" label="BOOKMARKS_ON_IMPORT_BEGAN"/>
-  <int value="54" label="BOOKMARKS_ON_IMPORT_ENDED"/>
-  <int value="55" label="BOOKMARKS_ON_MOVED"/>
-  <int value="56" label="BOOKMARKS_ON_REMOVED"/>
-  <int value="57" label="BRAILLE_DISPLAY_PRIVATE_ON_DISPLAY_STATE_CHANGED"/>
-  <int value="58" label="BRAILLE_DISPLAY_PRIVATE_ON_KEY_EVENT"/>
-  <int value="59" label="BROWSER_ACTION_ON_CLICKED"/>
-  <int value="60" label="CAST_STREAMING_RTP_STREAM_ON_ERROR"/>
-  <int value="61" label="CAST_STREAMING_RTP_STREAM_ON_STARTED"/>
-  <int value="62" label="CAST_STREAMING_RTP_STREAM_ON_STOPPED"/>
-  <int value="63" label="COMMANDS_ON_COMMAND"/>
-  <int value="64" label="CONTEXT_MENUS_INTERNAL_ON_CLICKED"/>
-  <int value="65" label="CONTEXT_MENUS_ON_CLICKED"/>
-  <int value="66" label="COOKIES_ON_CHANGED"/>
-  <int value="67" label="DELETED_COPRESENCE_ON_MESSAGES_RECEIVED"/>
-  <int value="68" label="DELETED_COPRESENCE_ON_STATUS_UPDATED"/>
-  <int value="69" label="DELETED_COPRESENCE_PRIVATE_ON_CONFIG_AUDIO"/>
-  <int value="70" label="DELETED_COPRESENCE_PRIVATE_ON_DECODE_SAMPLES_REQUEST"/>
-  <int value="71" label="DELETED_COPRESENCE_PRIVATE_ON_ENCODE_TOKEN_REQUEST"/>
-  <int value="72" label="DEBUGGER_ON_DETACH"/>
-  <int value="73" label="DEBUGGER_ON_EVENT"/>
-  <int value="74" label="DECLARATIVE_CONTENT_ON_PAGE_CHANGED"/>
-  <int value="75" label="DECLARATIVE_WEB_REQUEST_ON_MESSAGE"/>
-  <int value="76" label="DECLARATIVE_WEB_REQUEST_ON_REQUEST"/>
-  <int value="77" label="DEVELOPER_PRIVATE_ON_ITEM_STATE_CHANGED"/>
-  <int value="78" label="DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED"/>
-  <int value="79" label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_ADDED"/>
-  <int value="80"
-      label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_CONTENT_COMMITTED"/>
-  <int value="81" label="DEVTOOLS_NETWORK_ON_NAVIGATED"/>
-  <int value="82" label="DEVTOOLS_NETWORK_ON_REQUEST_FINISHED"/>
-  <int value="83" label="DOWNLOADS_ON_CHANGED"/>
-  <int value="84" label="DOWNLOADS_ON_CREATED"/>
-  <int value="85" label="DOWNLOADS_ON_DETERMINING_FILENAME"/>
-  <int value="86" label="DOWNLOADS_ON_ERASED"/>
-  <int value="87" label="EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
-  <int value="88" label="EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
-  <int value="89" label="EXPERIENCE_SAMPLING_PRIVATE_ON_DECISION"/>
-  <int value="90" label="EXPERIENCE_SAMPLING_PRIVATE_ON_DISPLAYED"/>
-  <int value="91" label="EXPERIMENTAL_DEVTOOLS_CONSOLE_ON_MESSAGE_ADDED"/>
-  <int value="92" label="EXTENSION_ON_REQUEST"/>
-  <int value="93" label="EXTENSION_ON_REQUEST_EXTERNAL"/>
-  <int value="94" label="EXTENSION_OPTIONS_INTERNAL_ON_CLOSE"/>
-  <int value="95" label="EXTENSION_OPTIONS_INTERNAL_ON_LOAD"/>
-  <int value="96" label="EXTENSION_OPTIONS_INTERNAL_ON_PREFERRED_SIZE_CHANGED"/>
-  <int value="97" label="FEEDBACK_PRIVATE_ON_FEEDBACK_REQUESTED"/>
-  <int value="98" label="FILE_BROWSER_HANDLER_ON_EXECUTE"/>
-  <int value="99" label="FILE_MANAGER_PRIVATE_ON_COPY_PROGRESS"/>
-  <int value="100" label="FILE_MANAGER_PRIVATE_ON_DEVICE_CHANGED"/>
-  <int value="101" label="FILE_MANAGER_PRIVATE_ON_DIRECTORY_CHANGED"/>
-  <int value="102"
-      label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONNECTION_STATUS_CHANGED"/>
-  <int value="103" label="FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR"/>
-  <int value="104" label="FILE_MANAGER_PRIVATE_ON_FILE_TRANSFERS_UPDATED"/>
-  <int value="105" label="FILE_MANAGER_PRIVATE_ON_MOUNT_COMPLETED"/>
-  <int value="106" label="FILE_MANAGER_PRIVATE_ON_PREFERENCES_CHANGED"/>
-  <int value="107" label="FILE_SYSTEM_ON_VOLUME_LIST_CHANGED"/>
-  <int value="108" label="FILE_SYSTEM_PROVIDER_ON_ABORT_REQUESTED"/>
-  <int value="109" label="FILE_SYSTEM_PROVIDER_ON_ADD_WATCHER_REQUESTED"/>
-  <int value="110" label="FILE_SYSTEM_PROVIDER_ON_CLOSE_FILE_REQUESTED"/>
-  <int value="111" label="FILE_SYSTEM_PROVIDER_ON_CONFIGURE_REQUESTED"/>
-  <int value="112" label="FILE_SYSTEM_PROVIDER_ON_COPY_ENTRY_REQUESTED"/>
-  <int value="113" label="FILE_SYSTEM_PROVIDER_ON_CREATE_DIRECTORY_REQUESTED"/>
-  <int value="114" label="FILE_SYSTEM_PROVIDER_ON_CREATE_FILE_REQUESTED"/>
-  <int value="115" label="FILE_SYSTEM_PROVIDER_ON_DELETE_ENTRY_REQUESTED"/>
-  <int value="116" label="FILE_SYSTEM_PROVIDER_ON_GET_METADATA_REQUESTED"/>
-  <int value="117" label="FILE_SYSTEM_PROVIDER_ON_MOUNT_REQUESTED"/>
-  <int value="118" label="FILE_SYSTEM_PROVIDER_ON_MOVE_ENTRY_REQUESTED"/>
-  <int value="119" label="FILE_SYSTEM_PROVIDER_ON_OPEN_FILE_REQUESTED"/>
-  <int value="120" label="FILE_SYSTEM_PROVIDER_ON_READ_DIRECTORY_REQUESTED"/>
-  <int value="121" label="FILE_SYSTEM_PROVIDER_ON_READ_FILE_REQUESTED"/>
-  <int value="122" label="FILE_SYSTEM_PROVIDER_ON_REMOVE_WATCHER_REQUESTED"/>
-  <int value="123" label="FILE_SYSTEM_PROVIDER_ON_TRUNCATE_REQUESTED"/>
-  <int value="124" label="FILE_SYSTEM_PROVIDER_ON_UNMOUNT_REQUESTED"/>
-  <int value="125" label="FILE_SYSTEM_PROVIDER_ON_WRITE_FILE_REQUESTED"/>
-  <int value="126" label="FONT_SETTINGS_ON_DEFAULT_FIXED_FONT_SIZE_CHANGED"/>
-  <int value="127" label="FONT_SETTINGS_ON_DEFAULT_FONT_SIZE_CHANGED"/>
-  <int value="128" label="FONT_SETTINGS_ON_FONT_CHANGED"/>
-  <int value="129" label="FONT_SETTINGS_ON_MINIMUM_FONT_SIZE_CHANGED"/>
-  <int value="130" label="DELETED_GCD_PRIVATE_ON_DEVICE_REMOVED"/>
-  <int value="131" label="DELETED_GCD_PRIVATE_ON_DEVICE_STATE_CHANGED"/>
-  <int value="132" label="GCM_ON_MESSAGE"/>
-  <int value="133" label="GCM_ON_MESSAGES_DELETED"/>
-  <int value="134" label="GCM_ON_SEND_ERROR"/>
-  <int value="135" label="HANGOUTS_PRIVATE_ON_HANGOUT_REQUESTED_DEPRECATED"/>
-  <int value="136" label="HID_ON_DEVICE_ADDED"/>
-  <int value="137" label="HID_ON_DEVICE_REMOVED"/>
-  <int value="138" label="HISTORY_ON_VISITED"/>
-  <int value="139" label="HISTORY_ON_VISIT_REMOVED"/>
-  <int value="140" label="HOTWORD_PRIVATE_ON_DELETE_SPEAKER_MODEL"/>
-  <int value="141" label="HOTWORD_PRIVATE_ON_ENABLED_CHANGED"/>
-  <int value="142" label="HOTWORD_PRIVATE_ON_FINALIZE_SPEAKER_MODEL"/>
-  <int value="143" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_REQUESTED"/>
-  <int value="144" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_STOPPED"/>
-  <int value="145" label="HOTWORD_PRIVATE_ON_HOTWORD_TRIGGERED"/>
-  <int value="146" label="HOTWORD_PRIVATE_ON_MICROPHONE_STATE_CHANGED"/>
-  <int value="147" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_EXISTS"/>
-  <int value="148" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_SAVED"/>
-  <int value="149" label="IDENTITY_ON_SIGN_IN_CHANGED"/>
-  <int value="150" label="IDENTITY_PRIVATE_ON_WEB_FLOW_REQUEST"/>
-  <int value="151" label="IDLE_ON_STATE_CHANGED"/>
-  <int value="152" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_INSERTED"/>
-  <int value="153" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_REMOVED"/>
-  <int value="154" label="IMAGE_WRITER_PRIVATE_ON_WRITE_COMPLETE"/>
-  <int value="155" label="IMAGE_WRITER_PRIVATE_ON_WRITE_ERROR"/>
-  <int value="156" label="IMAGE_WRITER_PRIVATE_ON_WRITE_PROGRESS"/>
-  <int value="157" label="INPUT_IME_ON_ACTIVATE"/>
-  <int value="158" label="INPUT_IME_ON_BLUR"/>
-  <int value="159" label="INPUT_IME_ON_CANDIDATE_CLICKED"/>
-  <int value="160" label="INPUT_IME_ON_DEACTIVATED"/>
-  <int value="161" label="INPUT_IME_ON_FOCUS"/>
-  <int value="162" label="INPUT_IME_ON_INPUT_CONTEXT_UPDATE"/>
-  <int value="163" label="INPUT_IME_ON_KEY_EVENT"/>
-  <int value="164" label="INPUT_IME_ON_MENU_ITEM_ACTIVATED"/>
-  <int value="165" label="INPUT_IME_ON_RESET"/>
-  <int value="166" label="INPUT_IME_ON_SURROUNDING_TEXT_CHANGED"/>
-  <int value="167" label="INPUT_METHOD_PRIVATE_ON_CHANGED"/>
-  <int value="168" label="INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED"/>
-  <int value="169" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_CHANGED"/>
-  <int value="170" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_LOADED"/>
-  <int value="171" label="INSTANCE_ID_ON_TOKEN_REFRESH"/>
-  <int value="172" label="DELETED_LOCATION_ON_LOCATION_ERROR"/>
-  <int value="173" label="DELETED_LOCATION_ON_LOCATION_UPDATE"/>
-  <int value="174" label="LOG_PRIVATE_ON_CAPTURED_EVENTS"/>
-  <int value="175" label="MANAGEMENT_ON_DISABLED"/>
-  <int value="176" label="MANAGEMENT_ON_ENABLED"/>
-  <int value="177" label="MANAGEMENT_ON_INSTALLED"/>
-  <int value="178" label="MANAGEMENT_ON_UNINSTALLED"/>
-  <int value="179" label="MDNS_ON_SERVICE_LIST"/>
-  <int value="180" label="MEDIA_GALLERIES_ON_GALLERY_CHANGED"/>
-  <int value="181" label="MEDIA_GALLERIES_ON_SCAN_PROGRESS"/>
-  <int value="182" label="MEDIA_PLAYER_PRIVATE_ON_NEXT_TRACK"/>
-  <int value="183" label="MEDIA_PLAYER_PRIVATE_ON_PREV_TRACK"/>
-  <int value="184" label="MEDIA_PLAYER_PRIVATE_ON_TOGGLE_PLAY_STATE"/>
-  <int value="185" label="NETWORKING_CONFIG_ON_CAPTIVE_PORTAL_DETECTED"/>
-  <int value="186" label="NETWORKING_PRIVATE_ON_DEVICE_STATE_LIST_CHANGED"/>
-  <int value="187" label="NETWORKING_PRIVATE_ON_NETWORK_LIST_CHANGED"/>
-  <int value="188" label="NETWORKING_PRIVATE_ON_NETWORKS_CHANGED"/>
-  <int value="189" label="NETWORKING_PRIVATE_ON_PORTAL_DETECTION_COMPLETED"/>
-  <int value="190" label="DELETED_NOTIFICATION_PROVIDER_ON_CLEARED"/>
-  <int value="191" label="DELETED_NOTIFICATION_PROVIDER_ON_CREATED"/>
-  <int value="192" label="DELETED_NOTIFICATION_PROVIDER_ON_UPDATED"/>
-  <int value="193" label="NOTIFICATIONS_ON_BUTTON_CLICKED"/>
-  <int value="194" label="NOTIFICATIONS_ON_CLICKED"/>
-  <int value="195" label="NOTIFICATIONS_ON_CLOSED"/>
-  <int value="196" label="NOTIFICATIONS_ON_PERMISSION_LEVEL_CHANGED"/>
-  <int value="197" label="NOTIFICATIONS_ON_SHOW_SETTINGS"/>
-  <int value="198" label="OMNIBOX_ON_INPUT_CANCELLED"/>
-  <int value="199" label="OMNIBOX_ON_INPUT_CHANGED"/>
-  <int value="200" label="OMNIBOX_ON_INPUT_ENTERED"/>
-  <int value="201" label="OMNIBOX_ON_INPUT_STARTED"/>
-  <int value="202" label="PAGE_ACTION_ON_CLICKED"/>
-  <int value="203"
-      label="PASSWORDS_PRIVATE_ON_PASSWORD_EXCEPTIONS_LIST_CHANGED"/>
-  <int value="204" label="PASSWORDS_PRIVATE_ON_PLAINTEXT_PASSWORD_RETRIEVED"/>
-  <int value="205" label="PASSWORDS_PRIVATE_ON_SAVED_PASSWORDS_LIST_CHANGED"/>
-  <int value="206" label="PERMISSIONS_ON_ADDED"/>
-  <int value="207" label="PERMISSIONS_ON_REMOVED"/>
-  <int value="208" label="PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED"/>
-  <int value="209" label="PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED"/>
-  <int value="210" label="PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED"/>
-  <int value="211" label="PRINTER_PROVIDER_ON_PRINT_REQUESTED"/>
-  <int value="212" label="PROCESSES_ON_CREATED"/>
-  <int value="213" label="PROCESSES_ON_EXITED"/>
-  <int value="214" label="PROCESSES_ON_UNRESPONSIVE"/>
-  <int value="215" label="PROCESSES_ON_UPDATED"/>
-  <int value="216" label="PROCESSES_ON_UPDATED_WITH_MEMORY"/>
-  <int value="217" label="PROXY_ON_PROXY_ERROR"/>
-  <int value="218" label="RUNTIME_ON_BROWSER_UPDATE_AVAILABLE"/>
-  <int value="219" label="RUNTIME_ON_CONNECT"/>
-  <int value="220" label="RUNTIME_ON_CONNECT_EXTERNAL"/>
-  <int value="221" label="RUNTIME_ON_INSTALLED"/>
-  <int value="222" label="RUNTIME_ON_MESSAGE"/>
-  <int value="223" label="RUNTIME_ON_MESSAGE_EXTERNAL"/>
-  <int value="224" label="RUNTIME_ON_RESTART_REQUIRED"/>
-  <int value="225" label="RUNTIME_ON_STARTUP"/>
-  <int value="226" label="RUNTIME_ON_SUSPEND"/>
-  <int value="227" label="RUNTIME_ON_SUSPEND_CANCELED"/>
-  <int value="228" label="RUNTIME_ON_UPDATE_AVAILABLE"/>
-  <int value="229" label="SEARCH_ENGINES_PRIVATE_ON_SEARCH_ENGINES_CHANGED"/>
-  <int value="230" label="SERIAL_ON_RECEIVE"/>
-  <int value="231" label="SERIAL_ON_RECEIVE_ERROR"/>
-  <int value="232" label="SESSIONS_ON_CHANGED"/>
-  <int value="233" label="SETTINGS_PRIVATE_ON_PREFS_CHANGED"/>
-  <int value="234" label="SIGNED_IN_DEVICES_ON_DEVICE_INFO_CHANGE"/>
-  <int value="235" label="SOCKETS_TCP_ON_RECEIVE"/>
-  <int value="236" label="SOCKETS_TCP_ON_RECEIVE_ERROR"/>
-  <int value="237" label="SOCKETS_TCP_SERVER_ON_ACCEPT"/>
-  <int value="238" label="SOCKETS_TCP_SERVER_ON_ACCEPT_ERROR"/>
-  <int value="239" label="SOCKETS_UDP_ON_RECEIVE"/>
-  <int value="240" label="SOCKETS_UDP_ON_RECEIVE_ERROR"/>
-  <int value="241" label="STORAGE_ON_CHANGED"/>
-  <int value="242" label="STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
-  <int value="243" label="SYNC_FILE_SYSTEM_ON_FILE_STATUS_CHANGED"/>
-  <int value="244" label="SYNC_FILE_SYSTEM_ON_SERVICE_STATUS_CHANGED"/>
-  <int value="245" label="SYSTEM_DISPLAY_ON_DISPLAY_CHANGED"/>
-  <int value="246" label="SYSTEM_INDICATOR_ON_CLICKED"/>
-  <int value="247" label="SYSTEM_PRIVATE_ON_BRIGHTNESS_CHANGED"/>
-  <int value="248" label="SYSTEM_PRIVATE_ON_SCREEN_UNLOCKED"/>
-  <int value="249" label="SYSTEM_PRIVATE_ON_VOLUME_CHANGED"/>
-  <int value="250" label="SYSTEM_PRIVATE_ON_WOKE_UP"/>
-  <int value="251" label="SYSTEM_STORAGE_ON_ATTACHED"/>
-  <int value="252" label="SYSTEM_STORAGE_ON_DETACHED"/>
-  <int value="253" label="TAB_CAPTURE_ON_STATUS_CHANGED"/>
-  <int value="254" label="TABS_ON_ACTIVATED"/>
-  <int value="255" label="TABS_ON_ACTIVE_CHANGED"/>
-  <int value="256" label="TABS_ON_ATTACHED"/>
-  <int value="257" label="TABS_ON_CREATED"/>
-  <int value="258" label="TABS_ON_DETACHED"/>
-  <int value="259" label="TABS_ON_HIGHLIGHT_CHANGED"/>
-  <int value="260" label="TABS_ON_HIGHLIGHTED"/>
-  <int value="261" label="TABS_ON_MOVED"/>
-  <int value="262" label="TABS_ON_REMOVED"/>
-  <int value="263" label="TABS_ON_REPLACED"/>
-  <int value="264" label="TABS_ON_SELECTION_CHANGED"/>
-  <int value="265" label="TABS_ON_UPDATED"/>
-  <int value="266" label="TABS_ON_ZOOM_CHANGE"/>
-  <int value="267" label="TERMINAL_PRIVATE_ON_PROCESS_OUTPUT"/>
-  <int value="268" label="TEST_ON_MESSAGE"/>
-  <int value="269" label="TTS_ENGINE_ON_PAUSE"/>
-  <int value="270" label="TTS_ENGINE_ON_RESUME"/>
-  <int value="271" label="TTS_ENGINE_ON_SPEAK"/>
-  <int value="272" label="TTS_ENGINE_ON_STOP"/>
-  <int value="273" label="USB_ON_DEVICE_ADDED"/>
-  <int value="274" label="USB_ON_DEVICE_REMOVED"/>
-  <int value="275" label="VIRTUAL_KEYBOARD_PRIVATE_ON_BOUNDS_CHANGED"/>
-  <int value="276" label="VIRTUAL_KEYBOARD_PRIVATE_ON_TEXT_INPUT_BOX_FOCUSED"/>
-  <int value="277" label="VPN_PROVIDER_ON_CONFIG_CREATED"/>
-  <int value="278" label="VPN_PROVIDER_ON_CONFIG_REMOVED"/>
-  <int value="279" label="VPN_PROVIDER_ON_PACKET_RECEIVED"/>
-  <int value="280" label="VPN_PROVIDER_ON_PLATFORM_MESSAGE"/>
-  <int value="281" label="VPN_PROVIDER_ON_UI_EVENT"/>
-  <int value="282" label="WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY"/>
-  <int value="283" label="WEB_NAVIGATION_ON_BEFORE_NAVIGATE"/>
-  <int value="284" label="WEB_NAVIGATION_ON_COMMITTED"/>
-  <int value="285" label="WEB_NAVIGATION_ON_COMPLETED"/>
-  <int value="286" label="WEB_NAVIGATION_ON_CREATED_NAVIGATION_TARGET"/>
-  <int value="287" label="WEB_NAVIGATION_ON_DOM_CONTENT_LOADED"/>
-  <int value="288" label="WEB_NAVIGATION_ON_ERROR_OCCURRED"/>
-  <int value="289" label="WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED"/>
-  <int value="290" label="WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED"/>
-  <int value="291" label="WEB_NAVIGATION_ON_TAB_REPLACED"/>
-  <int value="292" label="WEB_REQUEST_ON_AUTH_REQUIRED"/>
-  <int value="293" label="WEB_REQUEST_ON_BEFORE_REDIRECT"/>
-  <int value="294" label="WEB_REQUEST_ON_BEFORE_REQUEST"/>
-  <int value="295" label="WEB_REQUEST_ON_BEFORE_SEND_HEADERS"/>
-  <int value="296" label="WEB_REQUEST_ON_COMPLETED"/>
-  <int value="297" label="WEB_REQUEST_ON_ERROR_OCCURRED"/>
-  <int value="298" label="WEB_REQUEST_ON_HEADERS_RECEIVED"/>
-  <int value="299" label="WEB_REQUEST_ON_RESPONSE_STARTED"/>
-  <int value="300" label="WEB_REQUEST_ON_SEND_HEADERS"/>
-  <int value="301" label="WEBRTC_AUDIO_PRIVATE_ON_SINKS_CHANGED"/>
-  <int value="302" label="WEBSTORE_ON_DOWNLOAD_PROGRESS"/>
-  <int value="303" label="WEBSTORE_ON_INSTALL_STAGE_CHANGED"/>
-  <int value="304" label="WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
-  <int value="305" label="WEBVIEW_TAG_CLOSE"/>
-  <int value="306" label="WEBVIEW_TAG_CONSOLEMESSAGE"/>
-  <int value="307" label="WEBVIEW_TAG_CONTENTLOAD"/>
-  <int value="308" label="WEBVIEW_TAG_DIALOG"/>
-  <int value="309" label="WEBVIEW_TAG_EXIT"/>
-  <int value="310" label="WEBVIEW_TAG_FINDUPDATE"/>
-  <int value="311" label="WEBVIEW_TAG_LOADABORT"/>
-  <int value="312" label="WEBVIEW_TAG_LOADCOMMIT"/>
-  <int value="313" label="WEBVIEW_TAG_LOADREDIRECT"/>
-  <int value="314" label="WEBVIEW_TAG_LOADSTART"/>
-  <int value="315" label="WEBVIEW_TAG_LOADSTOP"/>
-  <int value="316" label="WEBVIEW_TAG_NEWWINDOW"/>
-  <int value="317" label="WEBVIEW_TAG_PERMISSIONREQUEST"/>
-  <int value="318" label="WEBVIEW_TAG_RESPONSIVE"/>
-  <int value="319" label="WEBVIEW_TAG_SIZECHANGED"/>
-  <int value="320" label="WEBVIEW_TAG_UNRESPONSIVE"/>
-  <int value="321" label="WEBVIEW_TAG_ZOOMCHANGE"/>
-  <int value="322" label="WINDOWS_ON_CREATED"/>
-  <int value="323" label="WINDOWS_ON_FOCUS_CHANGED"/>
-  <int value="324" label="WINDOWS_ON_REMOVED"/>
-  <int value="325" label="FILE_SYSTEM_PROVIDER_ON_EXECUTE_ACTION_REQUESTED"/>
-  <int value="326" label="FILE_SYSTEM_PROVIDER_ON_GET_ACTIONS_REQUESTED"/>
-  <int value="327" label="LAUNCHER_SEARCH_PROVIDER_ON_QUERY_STARTED"/>
-  <int value="328" label="LAUNCHER_SEARCH_PROVIDER_ON_QUERY_ENDED"/>
-  <int value="329" label="LAUNCHER_SEARCH_PROVIDER_ON_OPEN_RESULT"/>
-  <int value="330" label="CHROME_WEB_VIEW_INTERNAL_ON_CLICKED"/>
-  <int value="331" label="WEB_VIEW_INTERNAL_CONTEXT_MENUS"/>
-  <int value="332" label="CONTEXT_MENUS"/>
-  <int value="333" label="TTS_ON_EVENT"/>
-  <int value="334" label="LAUNCHER_PAGE_ON_TRANSITION_CHANGED"/>
-  <int value="335" label="LAUNCHER_PAGE_ON_POP_SUBPAGE"/>
-  <int value="336" label="DIAL_ON_DEVICE_LIST"/>
-  <int value="337" label="DIAL_ON_ERROR"/>
-  <int value="338" label="CAST_CHANNEL_ON_MESSAGE"/>
-  <int value="339" label="CAST_CHANNEL_ON_ERROR"/>
-  <int value="340" label="SCREENLOCK_PRIVATE_ON_CHANGED"/>
-  <int value="341" label="SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
-  <int value="342" label="TYPES_CHROME_SETTING_ON_CHANGE"/>
-  <int value="343" label="TYPES_PRIVATE_CHROME_DIRECT_SETTING_ON_CHANGE"/>
-  <int value="344" label="WEB_VIEW_INTERNAL_ON_MESSAGE"/>
-  <int value="345" label="EXTENSION_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
-  <int value="346" label="RUNTIME_ON_REQUEST"/>
-  <int value="347" label="RUNTIME_ON_REQUEST_EXTERNAL"/>
-  <int value="348" label="CHROME_WEB_VIEW_INTERNAL_ON_CONTEXT_MENU_SHOW"/>
-  <int value="349" label="WEB_VIEW_INTERNAL_ON_BEFORE_REQUEST"/>
-  <int value="350" label="WEB_VIEW_INTERNAL_ON_BEFORE_SEND_HEADERS"/>
-  <int value="351" label="WEB_VIEW_INTERNAL_ON_CLOSE"/>
-  <int value="352" label="WEB_VIEW_INTERNAL_ON_COMPLETED"/>
-  <int value="353" label="WEB_VIEW_INTERNAL_ON_CONSOLE_MESSAGE"/>
-  <int value="354" label="WEB_VIEW_INTERNAL_ON_CONTENT_LOAD"/>
-  <int value="355" label="WEB_VIEW_INTERNAL_ON_DIALOG"/>
-  <int value="356" label="WEB_VIEW_INTERNAL_ON_DROP_LINK"/>
-  <int value="357" label="WEB_VIEW_INTERNAL_ON_EXIT"/>
-  <int value="358" label="WEB_VIEW_INTERNAL_ON_EXIT_FULLSCREEN"/>
-  <int value="359" label="WEB_VIEW_INTERNAL_ON_FIND_REPLY"/>
-  <int value="360" label="WEB_VIEW_INTERNAL_ON_FRAME_NAME_CHANGED"/>
-  <int value="361" label="WEB_VIEW_INTERNAL_ON_HEADERS_RECEIVED"/>
-  <int value="362" label="WEB_VIEW_INTERNAL_ON_LOAD_ABORT"/>
-  <int value="363" label="WEB_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
-  <int value="364" label="WEB_VIEW_INTERNAL_ON_LOAD_PROGRESS"/>
-  <int value="365" label="WEB_VIEW_INTERNAL_ON_LOAD_REDIRECT"/>
-  <int value="366" label="WEB_VIEW_INTERNAL_ON_LOAD_START"/>
-  <int value="367" label="WEB_VIEW_INTERNAL_ON_LOAD_STOP"/>
-  <int value="368" label="WEB_VIEW_INTERNAL_ON_NEW_WINDOW"/>
-  <int value="369" label="WEB_VIEW_INTERNAL_ON_PERMISSION_REQUEST"/>
-  <int value="370" label="WEB_VIEW_INTERNAL_ON_RESPONSE_STARTED"/>
-  <int value="371" label="WEB_VIEW_INTERNAL_ON_RESPONSIVE"/>
-  <int value="372" label="WEB_VIEW_INTERNAL_ON_SIZE_CHANGED"/>
-  <int value="373" label="WEB_VIEW_INTERNAL_ON_UNRESPONSIVE"/>
-  <int value="374" label="WEB_VIEW_INTERNAL_ON_ZOOM_CHANGE"/>
-  <int value="375" label="GUEST_VIEW_INTERNAL_ON_RESIZE"/>
-  <int value="376" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_ADDED"/>
-  <int value="377" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_REMOVED"/>
-  <int value="378"
-      label="LANGUAGE_SETTINGS_PRIVATE_ON_SPELLCHECK_DICTIONARIES_CHANGED"/>
-  <int value="379"
-      label="LANGUAGE_SETTINGS_PRIVATE_ON_CUSTOM_DICTIONARY_CHANGED"/>
-  <int value="380" label="CAST_DEVICES_PRIVATE_ON_UPDATE_DEVICES_REQUESTED"/>
-  <int value="381" label="CAST_DEVICES_PRIVATE_ON_START_CAST"/>
-  <int value="382" label="CAST_DEVICES_PRIVATE_ON_STOP_CAST"/>
-  <int value="383" label="CERTIFICATEPROVIDER_ON_CERTIFICATES_REQUESTED"/>
-  <int value="384" label="CERTIFICATEPROVIDER_ON_SIGN_DIGEST_REQUESTED"/>
-  <int value="385" label="WEB_VIEW_INTERNAL_ON_AUTH_REQUIRED"/>
-  <int value="386" label="WEB_VIEW_INTERNAL_ON_BEFORE_REDIRECT"/>
-  <int value="387" label="WEB_VIEW_INTERNAL_ON_ERROR_OCCURRED"/>
-  <int value="388" label="WEB_VIEW_INTERNAL_ON_SEND_HEADERS"/>
-  <int value="389" label="EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
-  <int value="390" label="EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
-  <int value="391" label="EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
-  <int value="392" label="DISPLAY_SOURCE_ON_SINKS_UPDATED"/>
-  <int value="393" label="INPUT_IME_ON_COMPOSITION_BOUNDS_CHANGED"/>
-  <int value="394" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ACTIVATION_CHANGED"/>
-  <int value="395" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_LIST_CHANGED"/>
-  <int value="396" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ITEMS_CHANGED"/>
-  <int value="397" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_READ_REQUEST"/>
-  <int value="398"
-      label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_WRITE_REQUEST"/>
-  <int value="399" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_READ_REQUEST"/>
-  <int value="400" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_WRITE_REQUEST"/>
-  <int value="401" label="ACCESSIBILITY_PRIVATE_ON_ACCESSIBILITY_GESTURE"/>
-  <int value="402" label="QUICK_UNLOCK_PRIVATE_ON_ACTIVE_MODES_CHANGED"/>
-  <int value="403" label="CLIPBOARD_ON_CLIPBOARD_DATA_CHANGED"/>
-  <int value="404" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CLOSED"/>
-  <int value="405" label="FILE_MANAGER_PRIVATE_ON_APPS_UPDATED"/>
-</enum>
-
-<enum name="ExtensionFileWriteResult" type="int">
-  <obsolete>
-    Deprecated 10/2013.
-  </obsolete>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="CANT_CREATE_TEMP_CRX"/>
-  <int value="2" label="CANT_WRITE_CRX_DATA"/>
-  <int value="3" label="CANT_READ_CRX_FILE"/>
-</enum>
-
-<enum name="ExtensionFromWebstoreInconcistencyEnum" type="int">
-  <int value="0" label="Non-webstore update URL"/>
-  <int value="1" label="External install location"/>
-</enum>
-
-<enum name="ExtensionFunctions" type="int">
-<!-- Generated from extensions/browser/extension_function_histogram_value.h -->
-
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
-  <int value="2" label="BROWSINGDATA_REMOVEWEBSQL"/>
-  <int value="3" label="ALARMS_CREATE"/>
-  <int value="4" label="FILEMANAGERPRIVATEINTERNAL_REMOVEFILEWATCH"/>
-  <int value="5" label="COOKIES_GET"/>
-  <int value="6" label="FONTSETTINGS_GETMINIMUMFONTSIZE"/>
-  <int value="7" label="CHROMEOSINFOPRIVATE_GET"/>
-  <int value="8" label="BOOKMARKMANAGERPRIVATE_CUT"/>
-  <int value="9" label="TABS_CAPTUREVISIBLETAB"/>
-  <int value="10" label="MANAGEMENT_SETENABLED"/>
-  <int value="11" label="HISTORY_DELETEALL"/>
-  <int value="12" label="STORAGE_GET"/>
-  <int value="13" label="SOCKET_SETKEEPALIVE"/>
-  <int value="14" label="DOWNLOADS_CANCEL"/>
-  <int value="15" label="BOOKMARKS_CREATE"/>
-  <int value="16" label="BOOKMARKS_UPDATE"/>
-  <int value="17" label="FILEMANAGERPRIVATE_GETDRIVEFILES"/>
-  <int value="18" label="TERMINALPRIVATE_ONTERMINALRESIZE"/>
-  <int value="19" label="DELETED_FILEMANAGERPRIVATE_REQUESTDIRECTORYREFRESH"/>
-  <int value="20" label="BLUETOOTH_GETADAPTERSTATE"/>
-  <int value="21" label="FILEMANAGERPRIVATEINTERNAL_CANCELFILETRANSFERS"/>
-  <int value="22" label="FILEMANAGERPRIVATEINTERNAL_PINDRIVEFILE"/>
-  <int value="23" label="SOCKET_WRITE"/>
-  <int value="24" label="OMNIBOX_SETDEFAULTSUGGESTION"/>
-  <int value="25" label="TTS_SPEAK"/>
-  <int value="26" label="WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS"/>
-  <int value="27" label="BROWSINGDATA_REMOVEHISTORY"/>
-  <int value="28" label="DELETED_FILEMANAGERPRIVATE_ISFULLSCREEN"/>
-  <int value="29" label="AUTOTESTPRIVATE_LOGOUT"/>
-  <int value="30" label="EXPERIMENTAL_HISTORY_GETMOSTVISITED"/>
-  <int value="31" label="DELETED_BLUETOOTH_DISCONNECT"/>
-  <int value="32" label="DELETED_BLUETOOTH_SETOUTOFBANDPAIRINGDATA"/>
-  <int value="33" label="BOOKMARKMANAGERPRIVATE_CANPASTE"/>
-  <int value="34" label="AUTOTESTPRIVATE_RESTART"/>
-  <int value="35" label="USB_CLAIMINTERFACE"/>
-  <int value="36" label="MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT"/>
-  <int value="37" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO"/>
-  <int value="38" label="HISTORY_GETVISITS"/>
-  <int value="39" label="SOCKET_BIND"/>
-  <int value="40" label="TABS_MOVE"/>
-  <int value="41" label="SOCKET_DISCONNECT"/>
-  <int value="42" label="FILESYSTEM_GETWRITABLEENTRY"/>
-  <int value="43" label="SYNCFILESYSTEM_REQUESTFILESYSTEM"/>
-  <int value="44" label="COMMANDS_GETALL"/>
-  <int value="45" label="EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION"/>
-  <int value="46" label="VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT"/>
-  <int value="47" label="BOOKMARKMANAGERPRIVATE_GETSUBTREE"/>
-  <int value="48" label="DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT"/>
-  <int value="49" label="BOOKMARKS_GETRECENT"/>
-  <int value="50" label="APP_CURRENTWINDOWINTERNAL_SETBOUNDS"/>
-  <int value="51" label="CLOUDPRINTPRIVATE_SETUPCONNECTOR"/>
-  <int value="52" label="SERIAL_SETCONTROLSIGNALS"/>
-  <int value="53" label="DELETED_FILEMANAGERPRIVATE_SETLASTMODIFIED"/>
-  <int value="54" label="IDLE_SETDETECTIONINTERVAL"/>
-  <int value="55" label="FILEMANAGERPRIVATEINTERNAL_GETFILETASKS"/>
-  <int value="56" label="WEBSTOREPRIVATE_GETSTORELOGIN"/>
-  <int value="57" label="SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY"/>
-  <int value="58" label="IDLTEST_SENDARRAYBUFFERVIEW"/>
-  <int value="59" label="SOCKET_SETNODELAY"/>
-  <int value="60" label="APP_CURRENTWINDOWINTERNAL_SHOW"/>
-  <int value="61" label="WEBSTOREPRIVATE_GETBROWSERLOGIN"/>
-  <int value="62" label="EXPERIMENTAL_IDENTITY_GETAUTHTOKEN"/>
-  <int value="63" label="DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO"/>
-  <int value="64" label="BROWSINGDATA_REMOVEPLUGINDATA"/>
-  <int value="65" label="SOCKET_LISTEN"/>
-  <int value="66" label="MEDIAGALLERIES_GETMEDIAFILESYSTEMS"/>
-  <int value="67" label="DOWNLOADS_OPEN"/>
-  <int value="68" label="TABS_EXECUTESCRIPT"/>
-  <int value="69" label="SYNCFILESYSTEM_GETUSAGEANDQUOTA"/>
-  <int value="70" label="INPUTMETHODPRIVATE_GET"/>
-  <int value="71" label="USB_CLOSEDEVICE"/>
-  <int value="72" label="TTS_STOP"/>
-  <int value="73" label="DELETED_SERIAL_GETPORTS"/>
-  <int value="74" label="DELETED_FILEMANAGERPRIVATE_CLEARDRIVECACHE"/>
-  <int value="75" label="SERIAL_GETCONTROLSIGNALS"/>
-  <int value="76" label="DELETED_DEVELOPERPRIVATE_ENABLE"/>
-  <int value="77" label="FILEMANAGERPRIVATEINTERNAL_GETENTRYPROPERTIES"/>
-  <int value="78" label="USB_FINDDEVICES"/>
-  <int value="79" label="BOOKMARKMANAGERPRIVATE_DROP"/>
-  <int value="80" label="DELETED_FILEMANAGERPRIVATE_GETFILETRANSFERS"/>
-  <int value="81" label="INPUT_IME_SETMENUITEMS"/>
-  <int value="82" label="BOOKMARKS_EXPORT"/>
-  <int value="83" label="HISTORY_SEARCH"/>
-  <int value="84" label="TTSENGINE_SENDTTSEVENT"/>
-  <int value="85" label="ACCESSIBILITY_PRIVATE_GETALERTSFORTAB"/>
-  <int value="86" label="BOOKMARKS_IMPORT"/>
-  <int value="87" label="SYNCFILESYSTEM_DELETEFILESYSTEM"/>
-  <int value="88" label="DEBUGGER_SENDCOMMAND"/>
-  <int value="89" label="DEBUGGER_DETACH"/>
-  <int value="90" label="METRICSPRIVATE_RECORDSMALLCOUNT"/>
-  <int value="91" label="APP_CURRENTWINDOWINTERNAL_MINIMIZE"/>
-  <int value="92" label="DEVELOPERPRIVATE_AUTOUPDATE"/>
-  <int value="93" label="DNS_RESOLVE"/>
-  <int value="94" label="DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET"/>
-  <int value="95" label="HISTORY_ADDURL"/>
-  <int value="96" label="TABS_GET"/>
-  <int value="97" label="BROWSERACTION_SETBADGETEXT"/>
-  <int value="98" label="TABS_RELOAD"/>
-  <int value="99" label="WINDOWS_CREATE"/>
-  <int value="100" label="DEVELOPERPRIVATE_LOADUNPACKED"/>
-  <int value="101" label="DELETED_DOWNLOADS_SETDESTINATION"/>
-  <int value="102" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB"/>
-  <int value="103" label="BOOKMARKS_GETCHILDREN"/>
-  <int value="104" label="BROWSERACTION_GETTITLE"/>
-  <int value="105" label="TERMINALPRIVATE_OPENTERMINALPROCESS"/>
-  <int value="106" label="DELETED_SERIAL_CLOSE"/>
-  <int value="107" label="CONTEXTMENUS_REMOVE"/>
-  <int value="108" label="FILESYSTEM_REQUESTFILESYSTEM"/>
-  <int value="109" label="ECHOPRIVATE_GETREGISTRATIONCODE"/>
-  <int value="110" label="TABS_GETCURRENT"/>
-  <int value="111" label="FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE"/>
-  <int value="112" label="MEDIAPLAYERPRIVATE_CLOSEWINDOW"/>
-  <int value="113" label="WEBREQUESTINTERNAL_ADDEVENTLISTENER"/>
-  <int value="114" label="CLOUDPRINTPRIVATE_GETPRINTERS"/>
-  <int value="115" label="STORAGE_SET"/>
-  <int value="116" label="FONTSETTINGS_GETDEFAULTFONTSIZE"/>
-  <int value="117" label="EXTENSION_SETUPDATEURLDATA"/>
-  <int value="118" label="DELETED_SERIAL_WRITE"/>
-  <int value="119" label="IDLE_QUERYSTATE"/>
-  <int value="120" label="DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ"/>
-  <int value="121" label="WEBSTOREPRIVATE_SETSTORELOGIN"/>
-  <int value="122" label="DELETED_PAGEACTIONS_ENABLEFORTAB"/>
-  <int value="123" label="COOKIES_SET"/>
-  <int value="124" label="CONTENTSETTINGS_SET"/>
-  <int value="125" label="CONTEXTMENUS_REMOVEALL"/>
-  <int value="126" label="TABS_INSERTCSS"/>
-  <int value="127" label="WEBREQUEST_HANDLERBEHAVIORCHANGED"/>
-  <int value="128" label="INPUT_IME_SETCURSORPOSITION"/>
-  <int value="129" label="OMNIBOX_SENDSUGGESTIONS"/>
-  <int value="130" label="SYSTEMINDICATOR_ENABLE"/>
-  <int value="131" label="EVENTS_GETRULES"/>
-  <int value="132" label="BOOKMARKMANAGERPRIVATE_COPY"/>
-  <int value="133" label="SOCKET_RECVFROM"/>
-  <int value="134" label="TABS_GETALLINWINDOW"/>
-  <int value="135" label="CONTEXTMENUS_UPDATE"/>
-  <int value="136" label="BOOKMARKS_SEARCH"/>
-  <int value="137" label="EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS"/>
-  <int value="138" label="DELETED_BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA"/>
-  <int value="139" label="SYSTEMPRIVATE_GETUPDATESTATUS"/>
-  <int value="140" label="FONTSETTINGS_CLEARMINIMUMFONTSIZE"/>
-  <int value="141" label="DELETED_FILEMANAGERPRIVATE_GETFILELOCATIONS"/>
-  <int value="142" label="EXPERIMENTAL_DISCOVERY_SUGGEST"/>
-  <int value="143" label="FILEMANAGERPRIVATEINTERNAL_SETDEFAULTTASK"/>
-  <int value="144" label="BROWSERACTION_GETBADGETEXT"/>
-  <int value="145" label="APP_CURRENTWINDOWINTERNAL_HIDE"/>
-  <int value="146" label="SOCKET_CONNECT"/>
-  <int value="147" label="BOOKMARKS_GETSUBTREE"/>
-  <int value="148" label="HISTORY_DELETEURL"/>
-  <int value="149"
-      label="DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE"/>
-  <int value="150" label="BOOKMARKMANAGERPRIVATE_STARTDRAG"/>
-  <int value="151" label="BROWSINGDATA_REMOVEPASSWORDS"/>
-  <int value="152" label="DOWNLOADS_DRAG"/>
-  <int value="153" label="INPUT_IME_SETCOMPOSITION"/>
-  <int value="154" label="METRICSPRIVATE_RECORDUSERACTION"/>
-  <int value="155" label="USB_RELEASEINTERFACE"/>
-  <int value="156" label="PAGEACTION_GETPOPUP"/>
-  <int value="157" label="DELETED_SCRIPTBADGE_GETATTENTION"/>
-  <int value="158" label="FONTSETTINGS_GETFONTLIST"/>
-  <int value="159" label="PERMISSIONS_CONTAINS"/>
-  <int value="160" label="DELETED_SCRIPTBADGE_GETPOPUP"/>
-  <int value="161" label="ACCESSIBILITY_PRIVATE_GETFOCUSEDCONTROL"/>
-  <int value="162" label="DEVELOPERPRIVATE_GETSTRINGS"/>
-  <int value="163" label="METRICSPRIVATE_RECORDMEDIUMCOUNT"/>
-  <int value="164" label="MANAGEMENT_GET"/>
-  <int value="165" label="PERMISSIONS_GETALL"/>
-  <int value="166" label="DOWNLOADS_SHOW"/>
-  <int value="167" label="DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE"/>
-  <int value="168" label="TABS_REMOVE"/>
-  <int value="169" label="MANAGEMENT_GETPERMISSIONWARNINGSBYID"/>
-  <int value="170" label="WINDOWS_GET"/>
-  <int value="171" label="FILEMANAGERPRIVATEINTERNAL_EXECUTETASK"/>
-  <int value="172" label="TTS_GETVOICES"/>
-  <int value="173" label="MANAGEMENT_GETALL"/>
-  <int value="174" label="MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST"/>
-  <int value="175" label="APP_CURRENTWINDOWINTERNAL_CLEARATTENTION"/>
-  <int value="176" label="AUTOTESTPRIVATE_SHUTDOWN"/>
-  <int value="177" label="FONTSETTINGS_CLEARDEFAULTFONTSIZE"/>
-  <int value="178" label="BOOKMARKS_GETTREE"/>
-  <int value="179" label="FILEMANAGERPRIVATE_SELECTFILES"/>
-  <int value="180" label="RUNTIME_GETBACKGROUNDPAGE"/>
-  <int value="181" label="DELETED_EXPERIMENTAL_RECORD_REPLAYURLS"/>
-  <int value="182" label="WEBSTOREPRIVATE_COMPLETEINSTALL"/>
-  <int value="183" label="DELETED_EXPERIMENTAL_SPEECHINPUT_START"/>
-  <int value="184" label="COOKIES_GETALL"/>
-  <int value="185" label="DOWNLOADS_GETFILEICON"/>
-  <int value="186" label="PAGEACTION_GETTITLE"/>
-  <int value="187" label="BROWSINGDATA_REMOVE"/>
-  <int value="188" label="DELETED_SERIAL_OPEN"/>
-  <int value="189" label="FILESYSTEM_GETDISPLAYPATH"/>
-  <int value="190" label="FILEMANAGERPRIVATE_FORMATVOLUME"/>
-  <int value="191" label="BOOKMARKS_GET"/>
-  <int value="192" label="DELETED_MANAGEDMODEPRIVATE_GET"/>
-  <int value="193" label="ALARMS_CLEAR"/>
-  <int value="194" label="SYNCFILESYSTEM_GETFILESYNCSTATUS"/>
-  <int value="195" label="SOCKET_GETINFO"/>
-  <int value="196" label="WEBSTOREPRIVATE_INSTALLBUNDLE"/>
-  <int value="197" label="BROWSERACTION_ENABLE"/>
-  <int value="198" label="METRICSPRIVATE_RECORDMEDIUMTIME"/>
-  <int value="199" label="PAGEACTION_SETTITLE"/>
-  <int value="200" label="CLOUDPRINTPRIVATE_GETHOSTNAME"/>
-  <int value="201" label="CONTENTSETTINGS_GETRESOURCEIDENTIFIERS"/>
-  <int value="202" label="SOCKET_CREATE"/>
-  <int value="203" label="DEVELOPERPRIVATE_RELOAD"/>
-  <int value="204" label="FILEMANAGERPRIVATE_GETVOLUMEMETADATALIST"/>
-  <int value="205" label="APP_RUNTIME_POSTINTENTRESPONSE"/>
-  <int value="206" label="DELETED_MANAGEDMODEPRIVATE_SETPOLICY"/>
-  <int value="207" label="WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3"/>
-  <int value="208" label="WALLPAPERPRIVATE_SETWALLPAPER"/>
-  <int value="209" label="USB_CONTROLTRANSFER"/>
-  <int value="210" label="DELETED_EXPERIMENTAL_SPEECHINPUT_STOP"/>
-  <int value="211" label="USB_BULKTRANSFER"/>
-  <int value="212" label="DELETED_FILEMANAGERPRIVATE_GETVOLUMEMETADATA"/>
-  <int value="213" label="PAGECAPTURE_SAVEASMHTML"/>
-  <int value="214" label="EXTENSION_ISALLOWEDINCOGNITOACCESS"/>
-  <int value="215" label="BROWSINGDATA_REMOVEAPPCACHE"/>
-  <int value="216" label="APP_CURRENTWINDOWINTERNAL_DRAWATTENTION"/>
-  <int value="217" label="METRICSPRIVATE_RECORDCOUNT"/>
-  <int value="218" label="USB_INTERRUPTTRANSFER"/>
-  <int value="219" label="TYPES_CHROMESETTING_CLEAR"/>
-  <int value="220" label="INPUT_IME_COMMITTEXT"/>
-  <int value="221" label="IDLTEST_SENDARRAYBUFFER"/>
-  <int value="222" label="WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS"/>
-  <int value="223" label="SOCKET_ACCEPT"/>
-  <int value="224" label="WEBNAVIGATION_GETFRAME"/>
-  <int value="225" label="EXPERIMENTAL_POWER_RELEASEKEEPAWAKE"/>
-  <int value="226" label="APP_CURRENTWINDOWINTERNAL_SETICON"/>
-  <int value="227" label="PUSHMESSAGING_GETCHANNELID"/>
-  <int value="228" label="EXPERIMENTAL_INFOBARS_SHOW"/>
-  <int value="229" label="INPUT_IME_SETCANDIDATEWINDOWPROPERTIES"/>
-  <int value="230" label="METRICSPRIVATE_RECORDPERCENTAGE"/>
-  <int value="231" label="TYPES_CHROMESETTING_GET"/>
-  <int value="232" label="WINDOWS_GETLASTFOCUSED"/>
-  <int value="233" label="DELETED_MANAGEDMODEPRIVATE_GETPOLICY"/>
-  <int value="234" label="STORAGE_CLEAR"/>
-  <int value="235" label="STORAGE_GETBYTESINUSE"/>
-  <int value="236" label="TABS_QUERY"/>
-  <int value="237" label="PAGEACTION_SETPOPUP"/>
-  <int value="238" label="DEVELOPERPRIVATE_INSPECT"/>
-  <int value="239" label="DOWNLOADS_SEARCH"/>
-  <int value="240" label="FONTSETTINGS_CLEARFONT"/>
-  <int value="241" label="WINDOWS_UPDATE"/>
-  <int value="242" label="BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS"/>
-  <int value="243" label="SERIAL_FLUSH"/>
-  <int value="244" label="BROWSERACTION_SETTITLE"/>
-  <int value="245" label="BOOKMARKMANAGERPRIVATE_CANEDIT"/>
-  <int value="246" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPER"/>
-  <int value="247" label="BOOKMARKS_REMOVE"/>
-  <int value="248" label="INPUT_IME_SETCANDIDATES"/>
-  <int value="249" label="TERMINALPRIVATE_CLOSETERMINALPROCESS"/>
-  <int value="250" label="HISTORY_DELETERANGE"/>
-  <int value="251" label="IDLTEST_GETARRAYBUFFER"/>
-  <int value="252" label="TERMINALPRIVATE_SENDINPUT"/>
-  <int value="253" label="TABS_HIGHLIGHT"/>
-  <int value="254" label="BLUETOOTH_STARTDISCOVERY"/>
-  <int value="255" label="FILEMANAGERPRIVATE_SELECTFILE"/>
-  <int value="256" label="WINDOWS_GETCURRENT"/>
-  <int value="257" label="DEBUGGER_ATTACH"/>
-  <int value="258" label="WALLPAPERPRIVATE_SAVETHUMBNAIL"/>
-  <int value="259" label="INPUT_IME_KEYEVENTHANDLED"/>
-  <int value="260" label="FONTSETTINGS_SETDEFAULTFONTSIZE"/>
-  <int value="261" label="RUNTIME_REQUESTUPDATECHECK"/>
-  <int value="262" label="PAGEACTION_SETICON"/>
-  <int value="263" label="BROWSERACTION_SETBADGEBACKGROUNDCOLOR"/>
-  <int value="264" label="DEVELOPERPRIVATE_GETITEMSINFO"/>
-  <int value="265" label="BLUETOOTH_STOPDISCOVERY"/>
-  <int value="266" label="COOKIES_REMOVE"/>
-  <int value="267" label="DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING"/>
-  <int value="268" label="TABCAPTURE_GETCAPTUREDTABS"/>
-  <int value="269" label="WINDOWS_REMOVE"/>
-  <int value="270" label="WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST"/>
-  <int value="271" label="BROWSERACTION_GETBADGEBACKGROUNDCOLOR"/>
-  <int value="272" label="DELETED_PAGEACTIONS_DISABLEFORTAB"/>
-  <int value="273" label="DELETED_DEVELOPERPRIVATE_ALLOWFILEACCESS"/>
-  <int value="274" label="FILEMANAGERPRIVATE_REMOVEMOUNT"/>
-  <int value="275" label="DELETED_BLUETOOTH_CONNECT"/>
-  <int value="276" label="TABCAPTURE_CAPTURE"/>
-  <int value="277" label="NOTIFICATIONS_CREATE"/>
-  <int value="278" label="TABS_DUPLICATE"/>
-  <int value="279" label="DELETED_BLUETOOTH_WRITE"/>
-  <int value="280" label="PAGEACTION_SHOW"/>
-  <int value="281" label="WALLPAPERPRIVATE_GETTHUMBNAIL"/>
-  <int value="282" label="DOWNLOADS_PAUSE"/>
-  <int value="283" label="PERMISSIONS_REQUEST"/>
-  <int value="284" label="TOPSITES_GET"/>
-  <int value="285" label="BROWSINGDATA_REMOVEDOWNLOADS"/>
-  <int value="286" label="BROWSINGDATA_REMOVELOCALSTORAGE"/>
-  <int value="287" label="FILEBROWSERHANDLERINTERNAL_SELECTFILE"/>
-  <int value="288" label="INPUT_IME_UPDATEMENUITEMS"/>
-  <int value="289" label="FILEMANAGERPRIVATE_GETSTRINGS"/>
-  <int value="290" label="CONTENTSETTINGS_GET"/>
-  <int value="291" label="FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE"/>
-  <int value="292" label="EXPERIMENTAL_APP_NOTIFY"/>
-  <int value="293" label="METRICSPRIVATE_RECORDLONGTIME"/>
-  <int value="294" label="SOCKET_READ"/>
-  <int value="295" label="DELETED_EXPERIMENTAL_PROCESSES_TERMINATE"/>
-  <int value="296" label="METRICSPRIVATE_RECORDTIME"/>
-  <int value="297" label="BOOKMARKMANAGERPRIVATE_GETSTRINGS"/>
-  <int value="298" label="USB_ISOCHRONOUSTRANSFER"/>
-  <int value="299" label="PERMISSIONS_REMOVE"/>
-  <int value="300" label="MANAGEMENT_UNINSTALL"/>
-  <int value="301" label="I18N_GETACCEPTLANGUAGES"/>
-  <int value="302" label="MANAGEMENT_LAUNCHAPP"/>
-  <int value="303" label="INPUT_IME_CLEARCOMPOSITION"/>
-  <int value="304" label="ALARMS_GETALL"/>
-  <int value="305" label="DIAL_DISCOVERNOW"/>
-  <int value="306" label="TYPES_CHROMESETTING_SET"/>
-  <int value="307" label="BROWSERACTION_SETICON"/>
-  <int value="308" label="ACCESSIBILITY_PRIVATE_SETACCESSIBILITYENABLED"/>
-  <int value="309" label="DELETED_FILEMANAGERPRIVATE_VIEWFILES"/>
-  <int value="310" label="DELETED_BLUETOOTH_GETSERVICES"/>
-  <int value="311" label="TABS_UPDATE"/>
-  <int value="312" label="BROWSINGDATA_REMOVEFORMDATA"/>
-  <int value="313" label="DELETED_FILEMANAGERPRIVATE_RELOADDRIVE"/>
-  <int value="314" label="ALARMS_GET"/>
-  <int value="315" label="BROWSINGDATA_REMOVEINDEXEDDB"/>
-  <int value="316" label="FILEMANAGERPRIVATEINTERNAL_ADDFILEWATCH"/>
-  <int value="317" label="CONTENTSETTINGS_CLEAR"/>
-  <int value="318" label="FILEMANAGERPRIVATE_GETPREFERENCES"/>
-  <int value="319" label="BOOKMARKMANAGERPRIVATE_PASTE"/>
-  <int value="320" label="FILESYSTEM_ISWRITABLEENTRY"/>
-  <int value="321" label="USB_SETINTERFACEALTERNATESETTING"/>
-  <int value="322" label="FONTSETTINGS_SETMINIMUMFONTSIZE"/>
-  <int value="323" label="BROWSERACTION_GETPOPUP"/>
-  <int value="324" label="SOCKET_DESTROY"/>
-  <int value="325" label="BLUETOOTH_GETDEVICES"/>
-  <int value="326" label="ALARMS_CLEARALL"/>
-  <int value="327" label="FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE"/>
-  <int value="328" label="FILEMANAGERPRIVATEINTERNAL_ZIPSELECTION"/>
-  <int value="329" label="SYSTEMINDICATOR_DISABLE"/>
-  <int value="330" label="DELETED_SCRIPTBADGE_SETPOPUP"/>
-  <int value="331" label="EXTENSION_ISALLOWEDFILESCHEMEACCESS"/>
-  <int value="332" label="EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW"/>
-  <int value="333" label="FILEMANAGERPRIVATE_GETDRIVECONNECTIONSTATE"/>
-  <int value="334" label="TABS_DETECTLANGUAGE"/>
-  <int value="335" label="METRICSPRIVATE_RECORDVALUE"/>
-  <int value="336" label="BOOKMARKMANAGERPRIVATE_SORTCHILDREN"/>
-  <int value="337" label="DELETED_SERIAL_READ"/>
-  <int value="338" label="APP_CURRENTWINDOWINTERNAL_MAXIMIZE"/>
-  <int value="339" label="EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS"/>
-  <int value="340" label="DELETED_MANAGEDMODEPRIVATE_ENTER"/>
-  <int value="341" label="DELETED_FILEMANAGERPRIVATE_TRANSFERFILE"/>
-  <int value="342" label="BROWSERACTION_SETPOPUP"/>
-  <int value="343" label="TABS_GETSELECTED"/>
-  <int value="344" label="FONTSETTINGS_GETFONT"/>
-  <int value="345" label="DELETED_BLUETOOTH_READ"/>
-  <int value="346" label="WEBREQUESTINTERNAL_EVENTHANDLED"/>
-  <int value="347" label="EVENTS_ADDRULES"/>
-  <int value="348" label="CONTEXTMENUS_CREATE"/>
-  <int value="349" label="MEDIAPLAYERPRIVATE_GETPLAYLIST"/>
-  <int value="350" label="DOWNLOADS_ERASE"/>
-  <int value="351" label="DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS"/>
-  <int value="352" label="TTS_ISSPEAKING"/>
-  <int value="353" label="BOOKMARKS_REMOVETREE"/>
-  <int value="354" label="FILEMANAGERPRIVATE_SEARCHDRIVE"/>
-  <int value="355" label="DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET"/>
-  <int value="356" label="FILEMANAGERPRIVATE_SETPREFERENCES"/>
-  <int value="357" label="FONTSETTINGS_SETFONT"/>
-  <int value="358" label="SOCKET_GETNETWORKLIST"/>
-  <int value="359" label="BOOKMARKS_MOVE"/>
-  <int value="360" label="WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS"/>
-  <int value="361" label="STORAGE_REMOVE"/>
-  <int value="362" label="AUTOTESTPRIVATE_LOGINSTATUS"/>
-  <int value="363" label="TABS_CREATE"/>
-  <int value="364" label="FILEMANAGERPRIVATE_CANCELDIALOG"/>
-  <int value="365" label="BROWSINGDATA_REMOVECOOKIES"/>
-  <int value="366" label="FILESYSTEM_CHOOSEENTRY"/>
-  <int value="367" label="MEDIAPLAYERPRIVATE_PLAY"/>
-  <int value="368" label="WEBSTOREPRIVATE_GETWEBGLSTATUS"/>
-  <int value="369" label="SOCKET_SENDTO"/>
-  <int value="370" label="BROWSINGDATA_REMOVEFILESYSTEMS"/>
-  <int value="371" label="WALLPAPERPRIVATE_GETSTRINGS"/>
-  <int value="372" label="BROWSINGDATA_REMOVECACHE"/>
-  <int value="373" label="BOOKMARKMANAGERPRIVATE_RECORDLAUNCH"/>
-  <int value="374" label="BROWSERACTION_DISABLE"/>
-  <int value="375" label="DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING"/>
-  <int value="376" label="APP_WINDOW_CREATE"/>
-  <int value="377" label="RUNTIME_RELOAD"/>
-  <int value="378" label="EXPERIMENTAL_POWER_REQUESTKEEPAWAKE"/>
-  <int value="379" label="SYSTEMINDICATOR_SETICON"/>
-  <int value="380" label="FILEMANAGERPRIVATE_ADDMOUNT"/>
-  <int value="381" label="APP_CURRENTWINDOWINTERNAL_FOCUS"/>
-  <int value="382" label="EVENTS_REMOVERULES"/>
-  <int value="383" label="DOWNLOADS_DOWNLOAD"/>
-  <int value="384" label="WINDOWS_GETALL"/>
-  <int value="385" label="DELETED_FILEMANAGERPRIVATE_TOGGLEFULLSCREEN"/>
-  <int value="386" label="APP_CURRENTWINDOWINTERNAL_RESTORE"/>
-  <int value="387" label="DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP"/>
-  <int value="388" label="PAGEACTION_HIDE"/>
-  <int value="389" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET"/>
-  <int value="390" label="DOWNLOADS_ACCEPTDANGER"/>
-  <int value="391" label="DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP"/>
-  <int value="392" label="FILEMANAGERPRIVATE_GETSIZESTATS"/>
-  <int value="393" label="DOWNLOADS_RESUME"/>
-  <int value="394" label="COOKIES_GETALLCOOKIESTORES"/>
-  <int value="395" label="DELETED_MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH"/>
-  <int value="396" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH"/>
-  <int value="397" label="DELETED_WEBVIEW_EXECUTESCRIPT"/>
-  <int value="398" label="NOTIFICATIONS_UPDATE"/>
-  <int value="399" label="NOTIFICATIONS_CLEAR"/>
-  <int value="400" label="DELETED_SESSIONRESTORE_GETRECENTLYCLOSED"/>
-  <int value="401" label="DELETED_SESSIONRESTORE_RESTORE"/>
-  <int value="402" label="MANAGEMENT_UNINSTALLSELF"/>
-  <int value="403" label="ECHOPRIVATE_GETOOBETIMESTAMP"/>
-  <int value="404" label="FILEMANAGERPRIVATEINTERNAL_VALIDATEPATHNAMELENGTH"/>
-  <int value="405" label="BROWSINGDATA_SETTINGS"/>
-  <int value="406" label="WEBSTOREPRIVATE_GETISLAUNCHERENABLED"/>
-  <int value="407" label="NETWORKINGPRIVATE_GETPROPERTIES"/>
-  <int value="408" label="NETWORKINGPRIVATE_GETVISIBLENETWORKS"/>
-  <int value="409" label="NETWORKINGPRIVATE_STARTCONNECT"/>
-  <int value="410" label="NETWORKINGPRIVATE_STARTDISCONNECT"/>
-  <int value="411" label="DELETED_MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH"/>
-  <int value="412" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH"/>
-  <int value="413" label="FILEMANAGERPRIVATE_SEARCHDRIVEMETADATA"/>
-  <int value="414" label="DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS"/>
-  <int value="415" label="DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE"/>
-  <int value="416" label="FILEMANAGERPRIVATE_LOGOUTUSERFORREAUTHENTICATION"/>
-  <int value="417" label="DEVELOPERPRIVATE_CHOOSEPATH"/>
-  <int value="418" label="DEVELOPERPRIVATE_PACKDIRECTORY"/>
-  <int value="419" label="NETWORKINGPRIVATE_VERIFYDESTINATION"/>
-  <int value="420" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
-  <int value="421" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA"/>
-  <int value="422" label="DEVELOPERPRIVATE_RESTART"/>
-  <int value="423" label="DELETED_DEVELOPERPRIVATE_ALLOWINCOGNITO"/>
-  <int value="424" label="INPUT_IME_DELETESURROUNDINGTEXT"/>
-  <int value="425" label="DELETED_FILEMANAGERPRIVATE_OPENNEWWINDOW"/>
-  <int value="426" label="CLOUDPRINTPRIVATE_GETCLIENTID"/>
-  <int value="427" label="ECHOPRIVATE_GETUSERCONSENT"/>
-  <int value="428" label="SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY"/>
-  <int value="429" label="SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY"/>
-  <int value="430" label="NETWORKINGPRIVATE_SETPROPERTIES"/>
-  <int value="431" label="NETWORKINGPRIVATE_GETSTATE"/>
-  <int value="432" label="POWER_REQUESTKEEPAWAKE"/>
-  <int value="433" label="POWER_RELEASEKEEPAWAKE"/>
-  <int value="434" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT"/>
-  <int value="435" label="DOWNLOADSINTERNAL_DETERMINEFILENAME"/>
-  <int value="436" label="SYNCFILESYSTEM_GETFILESYNCSTATUSES"/>
-  <int value="437" label="DELETED_MEDIAGALLERIESPRIVATE_GETHANDLERS"/>
-  <int value="438" label="WALLPAPERPRIVATE_RESETWALLPAPER"/>
-  <int value="439" label="DEVELOPERPRIVATE_PERMISSIONS"/>
-  <int value="440" label="WEBSTOREPRIVATE_ENABLEAPPLAUNCHER"/>
-  <int value="441" label="APP_CURRENTWINDOWINTERNAL_FULLSCREEN"/>
-  <int value="442" label="DEVELOPERPRIVATE_LOADUNPACKEDCROS"/>
-  <int value="443" label="NETWORKINGPRIVATE_REQUESTNETWORKSCAN"/>
-  <int value="444" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY"/>
-  <int value="445" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY"/>
-  <int value="446" label="DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS"/>
-  <int value="447" label="DEVELOPERPRIVATE_GETPROJECTSINFO"/>
-  <int value="448" label="DEVELOPERPRIVATE_LOADPROJECT"/>
-  <int value="449" label="COMMANDLINEPRIVATE_HASSWITCH"/>
-  <int value="450" label="NETWORKINGPRIVATE_GETMANAGEDPROPERTIES"/>
-  <int value="451" label="DELETED_LOCATION_WATCHLOCATION"/>
-  <int value="452" label="DELETED_LOCATION_CLEARWATCH"/>
-  <int value="453" label="DELETED_BLUETOOTH_ADDPROFILE"/>
-  <int value="454" label="DELETED_BLUETOOTH_REMOVEPROFILE"/>
-  <int value="455" label="DELETED_BLUETOOTH_GETPROFILES"/>
-  <int value="456" label="EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN"/>
-  <int value="457" label="AUDIO_GETINFO"/>
-  <int value="458" label="AUDIO_SETACTIVEDEVICES"/>
-  <int value="459" label="AUDIO_SETPROPERTIES"/>
-  <int value="460" label="USB_RESETDEVICE"/>
-  <int value="461" label="SOCKET_MULTICAST_JOIN_GROUP"/>
-  <int value="462" label="SOCKET_MULTICAST_LEAVE_GROUP"/>
-  <int value="463" label="SOCKET_MULTICAST_SET_TIME_TO_LIVE"/>
-  <int value="464" label="SOCKET_MULTICAST_SET_LOOPBACK_MODE"/>
-  <int value="465" label="SOCKET_MULTICAST_GET_JOINED_GROUPS"/>
-  <int value="466" label="ACCESSIBILITY_PRIVATE_SETNATIVEACCESSIBILITYENABLED"/>
-  <int value="467" label="RUNTIME_GETPLATFORMINFO"/>
-  <int value="468" label="DELETED_WEBVIEW_INSERTCSS"/>
-  <int value="469" label="METRICSPRIVATE_GETISCRASHRECORDINGENABLED"/>
-  <int value="470" label="DELETED_IDENTITYPRIVATE_GETSTRINGS"/>
-  <int value="471" label="NOTIFICATIONS_GET_ALL"/>
-  <int value="472" label="USB_LISTINTERFACES"/>
-  <int value="473" label="FILESYSTEM_RETAINENTRY"/>
-  <int value="474" label="FILESYSTEM_ISRESTORABLE"/>
-  <int value="475" label="FILESYSTEM_RESTOREENTRY"/>
-  <int value="476" label="RUNTIME_SETUNINSTALLURL"/>
-  <int value="477" label="INPUTMETHODPRIVATE_STARTIME"/>
-  <int value="478" label="MUSICMANAGERPRIVATE_GETDEVICEID"/>
-  <int value="479" label="TTS_PAUSE"/>
-  <int value="480" label="TTS_RESUME"/>
-  <int value="481" label="DELETED_SYSTEMINFO_CPU_GET"/>
-  <int value="482" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH"/>
-  <int value="483" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH"/>
-  <int value="484" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH"/>
-  <int value="485"
-      label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH"/>
-  <int value="486" label="DELETED_SYSTEMINFO_MEMORY_GET"/>
-  <int value="487" label="ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES"/>
-  <int value="488" label="RUNTIME_GETPACKAGEDIRECTORYENTRY"/>
-  <int value="489" label="DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES"/>
-  <int value="490" label="FEEDBACKPRIVATE_GETUSEREMAIL"/>
-  <int value="491" label="FEEDBACKPRIVATE_GETSYSTEMINFORMATION"/>
-  <int value="492" label="FEEDBACKPRIVATE_SENDFEEDBACK"/>
-  <int value="493" label="VIRTUALKEYBOARDPRIVATE_INSERTTEXT"/>
-  <int value="494" label="DIAGNOSTICS_SENDPACKET"/>
-  <int value="495" label="METRICSPRIVATE_GETFIELDTRIAL"/>
-  <int value="496" label="FILEMANAGERPRIVATE_ZOOM"/>
-  <int value="497" label="DELETED_WEBVIEW_GO"/>
-  <int value="498" label="WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION"/>
-  <int value="499" label="FILEMANAGERPRIVATE_REQUESTACCESSTOKEN"/>
-  <int value="500" label="DELETED_WEBVIEW_STOP"/>
-  <int value="501" label="DELETED_WEBVIEW_RELOAD"/>
-  <int value="502" label="DELETED_WEBVIEW_TERMINATE"/>
-  <int value="503" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_GET"/>
-  <int value="504" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_SET"/>
-  <int value="505" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR"/>
-  <int value="506" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE"/>
-  <int value="507" label="SYSTEM_CPU_GETINFO"/>
-  <int value="508" label="BOOKMARKMANAGERPRIVATE_REMOVETREES"/>
-  <int value="509" label="SYSTEM_DISPLAY_GETINFO"/>
-  <int value="510" label="SYSTEM_DISPLAY_SETDISPLAYPROPERTIES"/>
-  <int value="511" label="SYSTEM_MEMORY_GETINFO"/>
-  <int value="512" label="FILEMANAGERPRIVATEINTERNAL_GETSHAREURL"/>
-  <int value="513" label="SYSTEM_STORAGE_GETINFO"/>
-  <int value="514" label="SYSTEM_STORAGE_EJECTDEVICE"/>
-  <int value="515" label="DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH"/>
-  <int value="516" label="DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH"/>
-  <int value="517"
-      label="DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES"/>
-  <int value="518"
-      label="DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES"/>
-  <int value="519" label="DOWNLOADS_REMOVEFILE"/>
-  <int value="520" label="DOWNLOADS_SHOWDEFAULTFOLDER"/>
-  <int value="521" label="INFOBARS_SHOW"/>
-  <int value="522" label="DOWNLOADS_SETSHELFENABLED"/>
-  <int value="523" label="IMAGEWRITER_WRITEFROMURL"/>
-  <int value="524" label="IMAGEWRITER_WRITEFROMFILE"/>
-  <int value="525" label="IMAGEWRITER_CANCELWRITE"/>
-  <int value="526" label="IMAGEWRITER_DESTROYPARTITIONS"/>
-  <int value="527" label="FEEDBACKPRIVATE_GETSTRINGS"/>
-  <int value="528" label="LOGPRIVATE_GETHISTORICAL"/>
-  <int value="529" label="VIRTUALKEYBOARDPRIVATE_MOVECURSOR"/>
-  <int value="530" label="METRICSPRIVATE_GETVARIATIONPARAMS"/>
-  <int value="531" label="DELETED_WEBVIEW_SETPERMISSION"/>
-  <int value="532" label="DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA"/>
-  <int value="533" label="APP_CURRENTWINDOWINTERNAL_SETSHAPE"/>
-  <int value="534" label="PROCESSES_GETPROCESSINFO"/>
-  <int value="535" label="PROCESSES_GETPROCESSIDFORTAB"/>
-  <int value="536" label="PROCESSES_TERMINATE"/>
-  <int value="537" label="SOCKETS_UDP_CREATE"/>
-  <int value="538" label="SOCKETS_UDP_UPDATE"/>
-  <int value="539" label="SOCKETS_UDP_BIND"/>
-  <int value="540" label="SOCKETS_UDP_SEND"/>
-  <int value="541" label="SOCKETS_UDP_CLOSE"/>
-  <int value="542" label="SOCKETS_UDP_GETINFO"/>
-  <int value="543" label="SOCKETS_UDP_GETSOCKETS"/>
-  <int value="544" label="SOCKETS_UDP_JOINGROUP"/>
-  <int value="545" label="SOCKETS_UDP_LEAVEGROUP"/>
-  <int value="546" label="SOCKETS_UDP_SETMULTICASTTIMETOLIVE"/>
-  <int value="547" label="SOCKETS_UDP_SETMULTICASTLOOPBACKMODE"/>
-  <int value="548" label="SOCKETS_UDP_GETJOINEDGROUPS"/>
-  <int value="549" label="SIGNED_IN_DEVICES_GET"/>
-  <int value="550" label="AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG"/>
-  <int value="551" label="DELETED_WEBVIEW_CLEARDATA"/>
-  <int value="552" label="SESSIONS_GETRECENTLYCLOSED"/>
-  <int value="553" label="SESSIONS_GETDEVICES"/>
-  <int value="554" label="SESSIONS_RESTORE"/>
-  <int value="555" label="SYNCFILESYSTEM_GETSERVICESTATUS"/>
-  <int value="556" label="ECHOPRIVATE_SETOFFERINFO"/>
-  <int value="557" label="ECHOPRIVATE_GETOFFERINFO"/>
-  <int value="558" label="DEVELOPERPRIVATE_ISPROFILEMANAGED"/>
-  <int value="559" label="DELETED_FILEMANAGERPRIVATE_INSTALLWEBSTOREITEM"/>
-  <int value="560" label="FILEMANAGERPRIVATEINTERNAL_STARTCOPY"/>
-  <int value="561" label="FILEMANAGERPRIVATE_CANCELCOPY"/>
-  <int value="562" label="NETWORKINGPRIVATE_CREATENETWORK"/>
-  <int value="563" label="BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE"/>
-  <int value="564" label="BRAILLEDISPLAYPRIVATE_WRITEDOTS"/>
-  <int value="565" label="USB_GETDEVICES"/>
-  <int value="566" label="USB_REQUESTACCESS"/>
-  <int value="567" label="USB_OPENDEVICE"/>
-  <int value="568" label="ACTIVITYLOGPRIVATE_DELETEDATABASE"/>
-  <int value="569" label="ACTIVITYLOGPRIVATE_DELETEURLS"/>
-  <int value="570" label="FILEMANAGERPRIVATE_REQUESTWEBSTOREACCESSTOKEN"/>
-  <int value="571" label="IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES"/>
-  <int value="572" label="WALLPAPER_SETWALLPAPER"/>
-  <int value="573" label="VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD"/>
-  <int value="574" label="AUTOTESTPRIVATE_LOCKSCREEN"/>
-  <int value="575" label="WEBRTCLOGGINGPRIVATE_SETMETADATA"/>
-  <int value="576" label="WEBRTCLOGGINGPRIVATE_START"/>
-  <int value="577" label="WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE"/>
-  <int value="578" label="WEBRTCLOGGINGPRIVATE_STOP"/>
-  <int value="579" label="WEBRTCLOGGINGPRIVATE_UPLOAD"/>
-  <int value="580" label="WEBRTCLOGGINGPRIVATE_DISCARD"/>
-  <int value="581" label="DELETED_WEBVIEW_OVERRIDEUSERAGENT"/>
-  <int value="582" label="DELETED_PRINCIPALSPRIVATE_SHOWAVATARBUBBLE"/>
-  <int value="583" label="DELETED_PRINCIPALSPRIVATE_SIGNOUT"/>
-  <int value="584" label="CAST_CHANNEL_OPEN"/>
-  <int value="585" label="CAST_CHANNEL_SEND"/>
-  <int value="586" label="CAST_CHANNEL_CLOSE"/>
-  <int value="587" label="RUNTIME_RESTART"/>
-  <int value="588" label="DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA"/>
-  <int value="589" label="APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP"/>
-  <int value="590" label="SOCKETS_TCP_CREATE"/>
-  <int value="591" label="SOCKETS_TCP_UPDATE"/>
-  <int value="592" label="SOCKETS_TCP_SETPAUSED"/>
-  <int value="593" label="SOCKETS_TCP_SETKEEPALIVE"/>
-  <int value="594" label="SOCKETS_TCP_SETNODELAY"/>
-  <int value="595" label="SOCKETS_TCP_CONNECT"/>
-  <int value="596" label="SOCKETS_TCP_DISCONNECT"/>
-  <int value="597" label="SOCKETS_TCP_SEND"/>
-  <int value="598" label="SOCKETS_TCP_CLOSE"/>
-  <int value="599" label="SOCKETS_TCP_GETINFO"/>
-  <int value="600" label="SOCKETS_TCP_GETSOCKETS"/>
-  <int value="601" label="NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES"/>
-  <int value="602" label="NETWORKINGPRIVATE_ENABLENETWORKTYPE"/>
-  <int value="603" label="NETWORKINGPRIVATE_DISABLENETWORKTYPE"/>
-  <int value="604" label="SOCKETS_TCP_SERVER_CREATE"/>
-  <int value="605" label="SOCKETS_TCP_SERVER_UPDATE"/>
-  <int value="606" label="SOCKETS_TCP_SERVER_SETPAUSED"/>
-  <int value="607" label="SOCKETS_TCP_SERVER_LISTEN"/>
-  <int value="608" label="SOCKETS_TCP_SERVER_DISCONNECT"/>
-  <int value="609" label="SOCKETS_TCP_SERVER_CLOSE"/>
-  <int value="610" label="SOCKETS_TCP_SERVER_GETINFO"/>
-  <int value="611" label="SOCKETS_TCP_SERVER_GETSOCKETS"/>
-  <int value="612" label="SYSTEM_STORAGE_GETAVAILABLECAPACITY"/>
-  <int value="613" label="BROWSERACTION_OPEN_POPUP"/>
-  <int value="614" label="WEBRTC_AUDIO_PRIVATE_GET_SINKS"/>
-  <int value="615" label="WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK"/>
-  <int value="616" label="WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK"/>
-  <int value="617" label="WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK"/>
-  <int value="618" label="VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED"/>
-  <int value="619" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINWIDTH"/>
-  <int value="620" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT"/>
-  <int value="621" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH"/>
-  <int value="622" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT"/>
-  <int value="623" label="SYSTEMPRIVATE_GETAPIKEY"/>
-  <int value="624" label="CHROMEOSINFOPRIVATE_SET"/>
-  <int value="625" label="BOOKMARKMANAGERPRIVATE_GETMETAINFO"/>
-  <int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
-  <int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
-  <int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
-  <int value="629" label="SCREENLOCKPRIVATE_GETLOCKED"/>
-  <int value="630" label="SCREENLOCKPRIVATE_SETLOCKED"/>
-  <int value="631" label="SCREENLOCKPRIVATE_SHOWMESSAGE"/>
-  <int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
-  <int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
-  <int value="634" label="SERIAL_GETDEVICES"/>
-  <int value="635" label="SERIAL_UPDATE"/>
-  <int value="636" label="SERIAL_SETPAUSED"/>
-  <int value="637" label="SERIAL_GETINFO"/>
-  <int value="638" label="SERIAL_GETCONNECTIONS"/>
-  <int value="639" label="SERIAL_SEND"/>
-  <int value="640" label="GCM_REGISTER"/>
-  <int value="641" label="GCM_SEND"/>
-  <int value="642" label="SERIAL_CONNECT"/>
-  <int value="643" label="SERIAL_DISCONNECT"/>
-  <int value="644"
-      label="DELETED_MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA"/>
-  <int value="645" label="FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS"/>
-  <int value="646" label="FIRSTRUNPRIVATE_LAUNCHTUTORIAL"/>
-  <int value="647" label="SOCKETS_UDP_SETPAUSED"/>
-  <int value="648" label="DELETED_WEBVIEW_CAPTUREVISIBLEREGION"/>
-  <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
-  <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
-  <int value="651" label="VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD"/>
-  <int value="652" label="SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
-  <int value="653" label="INPUT_IME_HIDEINPUTVIEW"/>
-  <int value="654" label="BOOKMARKMANAGERPRIVATE_UNDO"/>
-  <int value="655" label="BOOKMARKMANAGERPRIVATE_REDO"/>
-  <int value="656" label="BOOKMARKMANAGERPRIVATE_UNDOINFO"/>
-  <int value="657" label="BOOKMARKMANAGERPRIVATE_REDOINFO"/>
-  <int value="658" label="MEDIAGALLERIES_ADDUSERSELECTEDFOLDER"/>
-  <int value="659"
-      label="DELETED_PREFERENCESPRIVATE_GETSYNCCATEGORIESWITHOUTPASSPHRASE"/>
-  <int value="660" label="DELETED_READINGLISTPRIVATE_ADDENTRY"/>
-  <int value="661" label="DELETED_READINGLISTPRIVATE_REMOVEENTRY"/>
-  <int value="662" label="DELETED_READINGLISTPRIVATE_GETENTRIES"/>
-  <int value="663" label="DELETED_MEDIAGALLERIES_STARTMEDIASCAN"/>
-  <int value="664" label="DELETED_MEDIAGALLERIES_CANCELMEDIASCAN"/>
-  <int value="665" label="DELETED_MEDIAGALLERIES_ADDSCANRESULTS"/>
-  <int value="666" label="LOGPRIVATE_STARTNETINTERNALSWATCH"/>
-  <int value="667" label="LOGPRIVATE_STOPNETINTERNALSWATCH"/>
-  <int value="668" label="FILEMANAGERPRIVATE_GETPROFILES"/>
-  <int value="669" label="DELETED_FILEMANAGERPRIVATE_VISITDESKTOP"/>
-  <int value="670" label="VIRTUALKEYBOARDPRIVATE_GETKEYBOARDCONFIG"/>
-  <int value="671" label="HID_GETDEVICES"/>
-  <int value="672" label="HID_CONNECT"/>
-  <int value="673" label="HID_DISCONNECT"/>
-  <int value="674" label="HID_RECEIVE"/>
-  <int value="675" label="HID_SEND"/>
-  <int value="676" label="HID_RECEIVEFEATUREREPORT"/>
-  <int value="677" label="HID_SENDFEATUREREPORT"/>
-  <int value="678" label="HOTWORDPRIVATE_SETENABLED"/>
-  <int value="679" label="HOTWORDPRIVATE_GETSTATUS"/>
-  <int value="680" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETBADGEICON"/>
-  <int value="681" label="DELETED_APP_CURRENTWINDOWINTERNAL_CLEARBADGE"/>
-  <int value="682" label="DELETED_WEBVIEW_SETZOOM"/>
-  <int value="683" label="DELETED_WEBVIEW_GETZOOM"/>
-  <int value="684" label="DEVELOPERPRIVATE_REQUESTFILESOURCE"/>
-  <int value="685" label="DEVELOPERPRIVATE_OPENDEVTOOLS"/>
-  <int value="686" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIES"/>
-  <int value="687" label="NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE"/>
-  <int value="688" label="NETWORKINGPRIVATE_GETWIFITDLSSTATUS"/>
-  <int value="689" label="SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
-  <int value="690" label="SCREENLOCKPRIVATE_SETAUTHTYPE"/>
-  <int value="691" label="SCREENLOCKPRIVATE_GETAUTHTYPE"/>
-  <int value="692" label="SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
-  <int value="693" label="DELETED_WEBVIEW_FIND"/>
-  <int value="694" label="DELETED_WEBVIEW_STOPFINDING"/>
-  <int value="695" label="DELETED_WEBVIEW_CONTEXTMENUSCREATE"/>
-  <int value="696" label="DELETED_WEBVIEW_CONTEXTMENUSUPDATE"/>
-  <int value="697" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVE"/>
-  <int value="698" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVEALL"/>
-  <int value="699" label="AUTOMATIONINTERNAL_ENABLETAB"/>
-  <int value="700" label="APP_CURRENTWINDOWINTERNAL_SETSIZECONSTRAINTS"/>
-  <int value="701" label="BLUETOOTH_GETDEVICE"/>
-  <int value="702" label="GCM_UNREGISTER"/>
-  <int value="703" label="FILEMANAGERPRIVATEINTERNAL_REQUESTDRIVESHARE"/>
-  <int value="704" label="METRICSPRIVATE_RECORDSPARSEVALUE"/>
-  <int value="705" label="HOTWORDPRIVATE_SETAUDIOLOGGINGENABLED"/>
-  <int value="706" label="BLUETOOTHPRIVATE_SETADAPTERSTATE"/>
-  <int value="707" label="DELETED_BLUETOOTHPRIVATE_ENABLEPAIRING"/>
-  <int value="708" label="DELETED_BLUETOOTHPRIVATE_DISABLEPAIRING"/>
-  <int value="709" label="BLUETOOTHPRIVATE_SETPAIRINGRESPONSE"/>
-  <int value="710" label="NETWORKINGPRIVATE_GETCAPTIVEPORTALSTATUS"/>
-  <int value="711" label="AUTOMATIONINTERNAL_PERFORMACTION"/>
-  <int value="712" label="DELETED_BLUETOOTH_UPDATE_SOCKET"/>
-  <int value="713" label="DELETED_BLUETOOTH_SET_SOCKET_PAUSED"/>
-  <int value="714" label="DELETED_BLUETOOTH_GET_SOCKET"/>
-  <int value="715" label="DELETED_BLUETOOTH_GET_SOCKETS"/>
-  <int value="716" label="FILESYSTEMPROVIDER_UNMOUNT"/>
-  <int value="717" label="FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDSUCCESS"/>
-  <int value="718"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDERROR"/>
-  <int value="719"
-      label="DELETED_MEDIAGALLERIES_DROPPERMISSIONFORMEDIAFILESYSTEM"/>
-  <int value="720" label="WEBCAMPRIVATE_SET"/>
-  <int value="721" label="WEBCAMPRIVATE_RESET"/>
-  <int value="722" label="WEBCAMPRIVATE_GET"/>
-  <int value="723" label="BLUETOOTHLOWENERGY_GETSERVICE"/>
-  <int value="724" label="BLUETOOTHLOWENERGY_GETSERVICES"/>
-  <int value="725" label="BLUETOOTHLOWENERGY_GETCHARACTERISTIC"/>
-  <int value="726" label="BLUETOOTHLOWENERGY_GETCHARACTERISTICS"/>
-  <int value="727" label="BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES"/>
-  <int value="728" label="BLUETOOTHLOWENERGY_GETDESCRIPTOR"/>
-  <int value="729" label="BLUETOOTHLOWENERGY_GETDESCRIPTORS"/>
-  <int value="730" label="BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE"/>
-  <int value="731" label="BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE"/>
-  <int value="732" label="BLUETOOTHLOWENERGY_READDESCRIPTORVALUE"/>
-  <int value="733" label="BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE"/>
-  <int value="734" label="BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO"/>
-  <int value="735" label="BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO"/>
-  <int value="736" label="BLUETOOTHSOCKET_CREATE"/>
-  <int value="737" label="BLUETOOTHSOCKET_UPDATE"/>
-  <int value="738" label="BLUETOOTHSOCKET_SETPAUSED"/>
-  <int value="739" label="BLUETOOTHSOCKET_LISTENUSINGRFCOMM"/>
-  <int value="740" label="BLUETOOTHSOCKET_LISTENUSINGINSECURERFCOMM"/>
-  <int value="741" label="BLUETOOTHSOCKET_LISTENUSINGL2CAP"/>
-  <int value="742" label="BLUETOOTHSOCKET_CONNECT"/>
-  <int value="743" label="BLUETOOTHSOCKET_DISCONNECT"/>
-  <int value="744" label="BLUETOOTHSOCKET_CLOSE"/>
-  <int value="745" label="BLUETOOTHSOCKET_SEND"/>
-  <int value="746" label="BLUETOOTHSOCKET_GETINFO"/>
-  <int value="747" label="BLUETOOTHSOCKET_GETSOCKETS"/>
-  <int value="748" label="DELETED_WEBSTOREPRIVATE_SIGNINFUNCTION"/>
-  <int value="749" label="DELETED_SHELL_CREATEWINDOW"/>
-  <int value="750"
-      label="FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDSUCCESS"/>
-  <int value="751"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDERROR"/>
-  <int value="752" label="BROWSER_OPENTAB"/>
-  <int value="753" label="MANAGEMENT_CREATEAPPSHORTCUT"/>
-  <int value="754" label="DELETED_WEBVIEW_SHOWCONTEXTMENU"/>
-  <int value="755" label="WEBRTCLOGGINGPRIVATE_STARTRTPDUMP"/>
-  <int value="756" label="WEBRTCLOGGINGPRIVATE_STOPRTPDUMP"/>
-  <int value="757" label="AUTOMATIONINTERNAL_ENABLEDESKTOP"/>
-  <int value="758" label="HOTWORDPRIVATE_SETHOTWORDSESSIONSTATE"/>
-  <int value="759" label="HOTWORDPRIVATE_NOTIFYHOTWORDRECOGNITION"/>
-  <int value="760"
-      label="FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDSUCCESS"/>
-  <int value="761"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDERROR"/>
-  <int value="762" label="DELETED_LEDGER_BATCHEXECUTE"/>
-  <int value="763"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDSUCCESS"/>
-  <int value="764"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDERROR"/>
-  <int value="765"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDSUCCESS"/>
-  <int value="766"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDERROR"/>
-  <int value="767" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_GETINITIALDATA"/>
-  <int value="768"
-      label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_UPDATENOTIFICATION"/>
-  <int value="769" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_SETRENDERCONTEXT"/>
-  <int value="770" label="IDENTITY_GETACCOUNTS"/>
-  <int value="771" label="FILEMANAGERPRIVATE_RESOLVEISOLATEDENTRIES"/>
-  <int value="772" label="FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDSUCCESS"/>
-  <int value="773"
-      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDERROR"/>
-  <int value="774" label="NETWORKINGPRIVATE_GETNETWORKS"/>
-  <int value="775" label="DELETED_WEBVIEW_SETNAME"/>
-  <int value="776" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GENERATEKEY"/>
-  <int value="777" label="PLATFORMKEYSINTERNAL_SIGN"/>
-  <int value="778" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GETTOKENS"/>
-  <int value="779" label="ENTERPRISE_PLATFORMKEYS_GETCERTIFICATES"/>
-  <int value="780" label="ENTERPRISE_PLATFORMKEYS_IMPORTCERTIFICATE"/>
-  <int value="781" label="ENTERPRISE_PLATFORMKEYS_REMOVECERTIFICATE"/>
-  <int value="782" label="FILEMANAGERPRIVATE_OPENINSPECTOR"/>
-  <int value="783" label="STREAMSPRIVATE_ABORT"/>
-  <int value="784" label="MANAGEMENT_SETLAUNCHTYPE"/>
-  <int value="785" label="MANAGEMENT_GENERATEAPPFORLINK"/>
-  <int value="786" label="DELETED_GUESTVIEWINTERNAL_ALLOCATEINSTANCEID"/>
-  <int value="787" label="DELETED_WEBVIEW_NAVIGATE"/>
-  <int value="788" label="INPUTMETHODPRIVATE_GETCURRENTINPUTMETHOD"/>
-  <int value="789" label="INPUTMETHODPRIVATE_SETCURRENTINPUTMETHOD"/>
-  <int value="790" label="INPUTMETHODPRIVATE_GETINPUTMETHODS"/>
-  <int value="791" label="IDENTITY_GETPROFILEUSERINFO"/>
-  <int value="792" label="VIRTUALKEYBOARDPRIVATE_OPENSETTINGS"/>
-  <int value="793" label="BLUETOOTHLOWENERGY_CONNECT"/>
-  <int value="794" label="BLUETOOTHLOWENERGY_DISCONNECT"/>
-  <int value="795" label="WEBSTOREPRIVATE_GETEPHEMERALAPPSENABLED"/>
-  <int value="796" label="WEBSTOREPRIVATE_LAUNCHEPHEMERALAPP"/>
-  <int value="797" label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDERROR"/>
-  <int value="798"
-      label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDSUCCESS"/>
-  <int value="799" label="GUESTVIEWINTERNAL_CREATEGUEST"/>
-  <int value="800" label="WEBVIEWINTERNAL_CAPTUREVISIBLEREGION"/>
-  <int value="801" label="WEBVIEWINTERNAL_CONTEXTMENUSCREATE"/>
-  <int value="802" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVE"/>
-  <int value="803" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVEALL"/>
-  <int value="804" label="WEBVIEWINTERNAL_CONTEXTMENUSUPDATE"/>
-  <int value="805" label="WEBVIEWINTERNAL_CLEARDATA"/>
-  <int value="806" label="WEBVIEWINTERNAL_EXECUTESCRIPT"/>
-  <int value="807" label="WEBVIEWINTERNAL_FIND"/>
-  <int value="808" label="WEBVIEWINTERNAL_GETZOOM"/>
-  <int value="809" label="WEBVIEWINTERNAL_GO"/>
-  <int value="810" label="WEBVIEWINTERNAL_INSERTCSS"/>
-  <int value="811" label="WEBVIEWINTERNAL_NAVIGATE"/>
-  <int value="812" label="WEBVIEWINTERNAL_OVERRIDEUSERAGENT"/>
-  <int value="813" label="WEBVIEWINTERNAL_RELOAD"/>
-  <int value="814" label="WEBVIEWINTERNAL_SETNAME"/>
-  <int value="815" label="WEBVIEWINTERNAL_SETPERMISSION"/>
-  <int value="816" label="WEBVIEWINTERNAL_SETZOOM"/>
-  <int value="817" label="WEBVIEWINTERNAL_SHOWCONTEXTMENU"/>
-  <int value="818" label="WEBVIEWINTERNAL_STOP"/>
-  <int value="819" label="WEBVIEWINTERNAL_STOPFINDING"/>
-  <int value="820" label="WEBVIEWINTERNAL_TERMINATE"/>
-  <int value="821" label="BLUETOOTHLOWENERGY_STARTCHARACTERISTICNOTIFICATIONS"/>
-  <int value="822" label="BLUETOOTHLOWENERGY_STOPCHARACTERISTICNOTIFICATIONS"/>
-  <int value="823" label="DELETED_GCDPRIVATE_GETCLOUDDEVICELIST"/>
-  <int value="824" label="DELETED_GCDPRIVATE_QUERYFORNEWLOCALDEVICES"/>
-  <int value="825" label="DELETED_GCDPRIVATE_PREFETCHWIFIPASSWORD"/>
-  <int value="826" label="DELETED_GCDPRIVATE_ESTABLISHSESSION"/>
-  <int value="827" label="DELETED_GCDPRIVATE_SENDMESSAGE"/>
-  <int value="828" label="DELETED_GCDPRIVATE_CONFIRMCODE"/>
-  <int value="829" label="DELETED_GCDPRIVATE_TERMINATESESSION"/>
-  <int value="830" label="TABS_SETZOOM"/>
-  <int value="831" label="TABS_GETZOOM"/>
-  <int value="832" label="TABS_SETZOOMSETTINGS"/>
-  <int value="833" label="TABS_GETZOOMSETTINGS"/>
-  <int value="834" label="DELETED_GCDPRIVATE_GETCOMMANDDEFINITIONS"/>
-  <int value="835" label="DELETED_GCDPRIVATE_INSERTCOMMAND"/>
-  <int value="836" label="DELETED_GCDPRIVATE_GETCOMMAND"/>
-  <int value="837" label="DELETED_GCDPRIVATE_CANCELCOMMAND"/>
-  <int value="838" label="DELETED_GCDPRIVATE_GETCOMMANDSLIST"/>
-  <int value="839" label="APPVIEWINTERNAL_ATTACHFRAME"/>
-  <int value="840" label="APPVIEWINTERNAL_DENYREQUEST"/>
-  <int value="841" label="FILEMANAGERPRIVATEINTERNAL_GETDOWNLOADURL"/>
-  <int value="842" label="EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
-  <int value="843" label="EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
-  <int value="844" label="EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
-  <int value="845" label="EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
-  <int value="846" label="LOGPRIVATE_STARTEVENTRECODER"/>
-  <int value="847" label="LOGPRIVATE_STOPEVENTRECODER"/>
-  <int value="848" label="LOGPRIVATE_DUMPLOGS"/>
-  <int value="849" label="SOCKET_SECURE"/>
-  <int value="850" label="SOCKETS_TCP_SECURE"/>
-  <int value="851" label="EXPERIENCESAMPLINGPRIVATE_GETBROWSERINFO"/>
-  <int value="852" label="EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
-  <int value="853" label="EASYUNLOCKPRIVATE_GETSTRINGS"/>
-  <int value="854" label="NOTIFICATIONPROVIDER_SENDONCLEAR"/>
-  <int value="855" label="NOTIFICATIONPROVIDER_NOTIFYONCLEARED"/>
-  <int value="856" label="NOTIFICATIONPROVIDER_NOTIFYONCLICKED"/>
-  <int value="857" label="NOTIFICATIONPROVIDER_NOTIFYONBUTTONCLICKED"/>
-  <int value="858" label="NOTIFICATIONPROVIDER_NOTIFYONPERMISSIONLEVELCHANGED"/>
-  <int value="859" label="NOTIFICATIONPROVIDER_NOTIFYONSHOWSETTINGS"/>
-  <int value="860" label="NOTIFICATIONPROVIDER_GETNOTIFIER"/>
-  <int value="861" label="NOTIFICATIONPROVIDER_GETALLNOTIFIERS"/>
-  <int value="862" label="DELETED_GCDPRIVATE_GETPREFETCHEDWIFINAMELIST"/>
-  <int value="863" label="GUESTVIEWINTERNAL_SETAUTOSIZE"/>
-  <int value="864" label="DELETED_COPRESENCEPRIVATE_SENDFOUND"/>
-  <int value="865" label="DELETED_COPRESENCEPRIVATE_SENDSAMPLES"/>
-  <int value="866" label="DELETED_COPRESENCEPRIVATE_SENDDETECT"/>
-  <int value="867" label="DELETED_COPRESENCEPRIVATE_SENDINITIALIZED"/>
-  <int value="868" label="DELETED_COPRESENCE_EXECUTE"/>
-  <int value="869" label="DELETED_COPRESENCE_SETAPIKEY"/>
-  <int value="870" label="FILESYSTEM_OBSERVEDIRECTORY"/>
-  <int value="871" label="FILESYSTEM_UNOBSERVEENTRY"/>
-  <int value="872" label="FILESYSTEM_GETOBSERVEDENTRIES"/>
-  <int value="873" label="BROWSINGDATA_REMOVESERVICEWORKERS"/>
-  <int value="874" label="USBPRIVATE_GETDEVICES"/>
-  <int value="875" label="USBPRIVATE_GETDEVICEINFO"/>
-  <int value="876" label="EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
-  <int value="877" label="CAST_CHANNEL_GETLOGS"/>
-  <int value="878" label="EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
-  <int value="879" label="EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
-  <int value="880" label="EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
-  <int value="881" label="EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
-  <int value="882" label="EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
-  <int value="883" label="FILESYSTEMPROVIDER_GETALL"/>
-  <int value="884"
-      label="EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
-  <int value="885" label="MEDIAGALLERIES_ADDGALLERYWATCH"/>
-  <int value="886" label="MEDIAGALLERIES_REMOVEGALLERYWATCH"/>
-  <int value="887" label="DELETED_MEDIAGALLERIES_GETALLGALLERYWATCH"/>
-  <int value="888" label="DELETED_MEDIAGALLERIES_REMOVEALLGALLERYWATCH"/>
-  <int value="889" label="MANAGEMENT_GETSELF"/>
-  <int value="890" label="APP_CURRENTWINDOWINTERNAL_SETVISIBLEONALLWORKSPACES"/>
-  <int value="891" label="EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
-  <int value="892" label="EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
-  <int value="893" label="ACCESSIBILITY_PRIVATE_SETFOCUSRING"/>
-  <int value="894" label="USB_GETCONFIGURATION"/>
-  <int value="895" label="WEBVIEWINTERNAL_SETALLOWTRANSPARENCY"/>
-  <int value="896" label="EASYUNLOCKPRIVATE_GETUSERINFO"/>
-  <int value="897" label="HOTWORDPRIVATE_GETLAUNCHSTATE"/>
-  <int value="898" label="HOTWORDPRIVATE_SETHOTWORDALWAYSONSEARCHENABLED"/>
-  <int value="899" label="WEBVIEWINTERNAL_LOADDATAWITHBASEURL"/>
-  <int value="900" label="GUESTVIEWINTERNAL_DESTROYGUEST"/>
-  <int value="901" label="DELETED_COPRESENCESOCKET_CREATEPEER"/>
-  <int value="902" label="DELETED_COPRESENCESOCKET_DESTROYPEER"/>
-  <int value="903" label="DELETED_COPRESENCESOCKET_SEND"/>
-  <int value="904" label="DELETED_COPRESENCESOCKET_DISCONNECT"/>
-  <int value="905" label="DELETED_BOOKMARKMANAGERPRIVATE_SETVERSION"/>
-  <int value="906" label="FILESYSTEMPROVIDER_NOTIFY"/>
-  <int value="907" label="USB_GETUSERSELECTEDDEVICES"/>
-  <int value="908" label="INPUTMETHODPRIVATE_GETINPUTMETHODCONFIG"/>
-  <int value="909" label="WALLPAPERPRIVATE_GETSYNCSETTING"/>
-  <int value="910" label="DELETED_COPRESENCE_SETAUTHTOKEN"/>
-  <int value="911" label="CAST_CHANNEL_SETAUTHORITYKEYS"/>
-  <int value="912" label="HOTWORDPRIVATE_STARTTRAINING"/>
-  <int value="913" label="HOTWORDPRIVATE_FINALIZESPEAKERMODEL"/>
-  <int value="914" label="HOTWORDPRIVATE_STOPTRAINING"/>
-  <int value="915" label="DELETED_GCDPRIVATE_STARTPAIRING"/>
-  <int value="916" label="VPNPROVIDER_CREATECONFIG"/>
-  <int value="917" label="VPNPROVIDER_DESTROYCONFIG"/>
-  <int value="918" label="VPNPROVIDER_SETPARAMETERS"/>
-  <int value="919" label="VPNPROVIDER_SENDPACKET"/>
-  <int value="920" label="VPNPROVIDER_NOTIFYCONNECTIONSTATECHANGED"/>
-  <int value="921" label="DOCUMENT_SCAN_SCAN"/>
-  <int value="922" label="DELETED_EASYUNLOCKPRIVATE_GETUSERIMAGE"/>
-  <int value="923" label="HOTWORDPRIVATE_NOTIFYSPEAKERMODELSAVED"/>
-  <int value="924" label="HOTWORDPRIVATE_GETLOCALIZEDSTRINGS"/>
-  <int value="925" label="HOTWORDPRIVATE_SETAUDIOHISTORYENABLED"/>
-  <int value="926" label="HOTWORDPRIVATE_GETAUDIOHISTORYENABLED"/>
-  <int value="927"
-      label="DELETED_APP_CURRENTWINDOWINTERNAL_SETINTERCEPTALLKEYS"/>
-  <int value="928" label="LAUNCHERPAGE_PUSHSUBPAGE"/>
-  <int value="929" label="LAUNCHERPAGE_SHOW"/>
-  <int value="930" label="AUTOTESTPRIVATE_SETTOUCHPADSENSITIVITY"/>
-  <int value="931" label="AUTOTESTPRIVATE_SETTAPTOCLICK"/>
-  <int value="932" label="AUTOTESTPRIVATE_SETTHREEFINGERCLICK"/>
-  <int value="933" label="AUTOTESTPRIVATE_SETTAPDRAGGING"/>
-  <int value="934" label="AUTOTESTPRIVATE_SETNATURALSCROLL"/>
-  <int value="935" label="AUTOTESTPRIVATE_SETMOUSESENSITIVITY"/>
-  <int value="936" label="AUTOTESTPRIVATE_SETPRIMARYBUTTONRIGHT"/>
-  <int value="937" label="DELETED_COPRESENCEENDPOINTS_CREATELOCALENDPOINT"/>
-  <int value="938" label="DELETED_COPRESENCEENDPOINTS_DESTROYLOCALENDPOINT"/>
-  <int value="939" label="DELETED_COPRESENCEENDPOINTS_SEND"/>
-  <int value="940" label="INLINE_INSTALL_PRIVATE_INSTALL"/>
-  <int value="941" label="LAUNCHERPAGE_SETENABLED"/>
-  <int value="942" label="DELETED_CRYPTOTOKENPRIVATE_REQUESTPERMISSION"/>
-  <int value="943" label="BLUETOOTHPRIVATE_DISCONNECTALL"/>
-  <int value="944" label="FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE"/>
-  <int value="945" label="USB_SETCONFIGURATION"/>
-  <int value="946" label="EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
-  <int value="947" label="FILEMANAGERPRIVATEINTERNAL_COMPUTECHECKSUM"/>
-  <int value="948" label="PRINTERPROVIDERINTERNAL_REPORTPRINTRESULT"/>
-  <int value="949" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERCAPABILITY"/>
-  <int value="950" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERS"/>
-  <int value="951" label="FILESYSTEMPROVIDER_GET"/>
-  <int value="952" label="FILEMANAGERPRIVATE_SEARCHFILESBYHASHES"/>
-  <int value="953" label="EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
-  <int value="954" label="EXTENSIONVIEWINTERNAL_NAVIGATE"/>
-  <int value="955" label="NETWORKING_CONFIG_SETNETWORKFILTER"/>
-  <int value="956" label="NETWORKING_CONFIG_FINISHAUTHENTICATION"/>
-  <int value="957" label="PLATFORMKEYSINTERNAL_SELECTCLIENTCERTIFICATES"/>
-  <int value="958" label="CRYPTOTOKENPRIVATE_CANORIGINASSERTAPPID"/>
-  <int value="959" label="EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
-  <int value="960" label="FILEMANAGERPRIVATE_ISUMAENABLED"/>
-  <int value="961" label="WEBVIEWINTERNAL_SETALLOWSCALING"/>
-  <int value="962" label="PLATFORMKEYSINTERNAL_GETPUBLICKEY"/>
-  <int value="963" label="RUNTIME_OPENOPTIONSPAGE"/>
-  <int value="964" label="DELETED_AUDIOMODEM_TRANSMIT"/>
-  <int value="965" label="DELETED_AUDIOMODEM_STOPTRANSMIT"/>
-  <int value="966" label="DELETED_AUDIOMODEM_RECEIVE"/>
-  <int value="967" label="DELETED_AUDIOMODEM_STOPRECEIVE"/>
-  <int value="968" label="WEBRTCLOGGINGPRIVATE_STORE"/>
-  <int value="969" label="WEBRTCLOGGINGPRIVATE_UPLOADSTORED"/>
-  <int value="970" label="FILEMANAGERPRIVATEINTERNAL_SETENTRYTAG"/>
-  <int value="971" label="INPUTMETHODPRIVATE_FETCHALLDICTIONARYWORDS"/>
-  <int value="972" label="INPUTMETHODPRIVATE_ADDWORDTODICTIONARY"/>
-  <int value="973"
-      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDINSTALL"/>
-  <int value="974" label="PRINTERPROVIDERINTERNAL_GETPRINTDATA"/>
-  <int value="975" label="VIRTUALKEYBOARDPRIVATE_SETMODE"/>
-  <int value="976" label="NETWORKINGPRIVATE_STARTACTIVATE"/>
-  <int value="977" label="FILEMANAGERPRIVATE_GRANTACCESS"/>
-  <int value="978" label="DEVELOPERPRIVATE_GETEXTENSIONSINFO"/>
-  <int value="979" label="DEVELOPERPRIVATE_GETEXTENSIONINFO"/>
-  <int value="980" label="FILEMANAGERPRIVATE_ENABLEEXTERNALFILESCHEME"/>
-  <int value="981" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCONFIGURATION"/>
-  <int value="982" label="DEVELOPERPRIVATE_DELETEEXTENSIONERRORS"/>
-  <int value="983" label="FILEMANAGERPRIVATE_ISPIEXLOADERENABLED"/>
-  <int value="984" label="HOTWORDPRIVATE_SPEAKERMODELEXISTSRESULT"/>
-  <int value="985" label="SETTINGSPRIVATE_SETPREF"/>
-  <int value="986" label="DELETED_SETTINGSPRIVATE_SETDOUBLEPREF"/>
-  <int value="987" label="DELETED_SETTINGSPRIVATE_SETSTRINGPREF"/>
-  <int value="988" label="DELETED_SETTINGSPRIVATE_SETURLPREF"/>
-  <int value="989" label="SETTINGSPRIVATE_GETALLPREFS"/>
-  <int value="990" label="SETTINGSPRIVATE_GETPREF"/>
-  <int value="991" label="NETWORKINGPRIVATE_FORGETNETWORK"/>
-  <int value="992" label="EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
-  <int value="993" label="WEBVIEWINTERNAL_SETZOOMMODE"/>
-  <int value="994" label="WEBVIEWINTERNAL_GETZOOMMODE"/>
-  <int value="995" label="LAUNCHERSEARCHPROVIDER_SETSEARCHRESULTS"/>
-  <int value="996" label="DATAREDUCTIONPROXY_CLEARDATASAVINGS"/>
-  <int value="997" label="BLUETOOTHPRIVATE_SETDISCOVERYFILTER"/>
-  <int value="998" label="FILESYSTEM_GETVOLUMELIST"/>
-  <int value="999" label="NETWORKINGPRIVATE_GETDEVICESTATES"/>
-  <int value="1000" label="DEVELOPERPRIVATE_GETPROFILECONFIGURATION"/>
-  <int value="1001" label="DEVELOPERPRIVATE_UPDATEPROFILECONFIGURATION"/>
-  <int value="1002" label="SOCKETS_UDP_SETBROADCAST"/>
-  <int value="1003" label="FILEMANAGERPRIVATE_GETPROVIDINGEXTENSIONS"/>
-  <int value="1004" label="WEBVIEWINTERNAL_ADDCONTENTSCRIPTS"/>
-  <int value="1005" label="WEBVIEWINTERNAL_REMOVECONTENTSCRIPTS"/>
-  <int value="1006" label="DEVELOPERPRIVATE_REPAIREXTENSION"/>
-  <int value="1007" label="DEVELOPERPRIVATE_SHOWOPTIONS"/>
-  <int value="1008" label="DEVELOPERPRIVATE_SHOWPATH"/>
-  <int value="1009" label="FILEMANAGERPRIVATE_ADDPROVIDEDFILESYSTEM"/>
-  <int value="1010" label="FILEMANAGERPRIVATE_CONFIGUREVOLUME"/>
-  <int value="1011" label="DELETED_SEARCHENGINESPRIVATE_GETSEARCHENGINES"/>
-  <int value="1012"
-      label="DELETED_SEARCHENGINESPRIVATE_SETSELECTEDSEARCHENGINE"/>
-  <int value="1013" label="AUTOFILLPRIVATE_SAVEADDRESS"/>
-  <int value="1014" label="AUTOFILLPRIVATE_GETADDRESSCOMPONENTS"/>
-  <int value="1015" label="AUTOFILLPRIVATE_SAVECREDITCARD"/>
-  <int value="1016" label="AUTOFILLPRIVATE_REMOVEENTRY"/>
-  <int value="1017" label="AUTOFILLPRIVATE_VALIDATEPHONENUMBERS"/>
-  <int value="1018" label="AUTOFILLPRIVATE_MASKCREDITCARD"/>
-  <int value="1019" label="INSTANCEID_GETID"/>
-  <int value="1020" label="INSTANCEID_GETCREATIONTIME"/>
-  <int value="1021" label="INSTANCEID_GETTOKEN"/>
-  <int value="1022" label="INSTANCEID_DELETETOKEN"/>
-  <int value="1023" label="INSTANCEID_DELETEID"/>
-  <int value="1024" label="DELETED_GCDPRIVATE_GETDEVICEINFO"/>
-  <int value="1025" label="DELETED_SEARCHENGINESPRIVATE_GETHOTWORDSTATE"/>
-  <int value="1026" label="DELETED_SEARCHENGINESPRIVATE_ADDOTHERSEARCHENGINE"/>
-  <int value="1027" label="DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE"/>
-  <int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
-  <int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
-  <int value="1030" label="WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
-  <int value="1031" label="WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
-  <int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
-  <int value="1033"
-      label="WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA"/>
-  <int value="1034" label="BLUETOOTHLOWENERGY_REGISTERADVERTISEMENT"/>
-  <int value="1035" label="BLUETOOTHLOWENERGY_UNREGISTERADVERTISEMENT"/>
-  <int value="1036"
-      label="DELETED_PASSWORDSPRIVATE_CANPASSWORDACCOUNTBEMANAGED"/>
-  <int value="1037" label="PASSWORDSPRIVATE_REMOVESAVEDPASSWORD"/>
-  <int value="1038" label="PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTION"/>
-  <int value="1039" label="PASSWORDSPRIVATE_REQUESTPLAINTEXTPASSWORD"/>
-  <int value="1040" label="LAUNCHERPAGE_HIDE"/>
-  <int value="1041" label="PLATFORMKEYS_VERIFYTLSSERVERCERTIFICATE"/>
-  <int value="1042" label="DEVELOPERPRIVATE_SETSHORTCUTHANDLINGSUSPENDED"/>
-  <int value="1043" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCOMMAND"/>
-  <int value="1044" label="INPUTMETHODPRIVATE_GETENCRYPTSYNCENABLED"/>
-  <int value="1045" label="USERSPRIVATE_GETWHITELISTEDUSERS"/>
-  <int value="1046" label="USERSPRIVATE_ADDWHITELISTEDUSER"/>
-  <int value="1047" label="USERSPRIVATE_REMOVEWHITELISTEDUSER"/>
-  <int value="1048" label="USERSPRIVATE_ISCURRENTUSEROWNER"/>
-  <int value="1049" label="USERSPRIVATE_ISWHITELISTMANAGED"/>
-  <int value="1050" label="PRINTERPROVIDERINTERNAL_REPORTUSBPRINTERINFO"/>
-  <int value="1051" label="WEBCAMPRIVATE_OPENSERIALWEBCAM"/>
-  <int value="1052" label="WEBCAMPRIVATE_CLOSEWEBCAM"/>
-  <int value="1053" label="SERIAL_SETBREAK"/>
-  <int value="1054" label="SERIAL_CLEARBREAK"/>
-  <int value="1055" label="EXTENSIONVIEWINTERNAL_LOADSRC"/>
-  <int value="1056" label="EXTENSIONVIEWINTERNAL_PARSESRC"/>
-  <int value="1057" label="HID_GETUSERSELECTEDDEVICES"/>
-  <int value="1058"
-      label="FILESYSTEMPROVIDERINTERNAL_GETACTIONSREQUESTEDSUCCESS"/>
-  <int value="1059"
-      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDBUNDLEINSTALL"/>
-  <int value="1060" label="FILEMANAGERPRIVATEINTERNAL_GETCUSTOMACTIONS"/>
-  <int value="1061" label="FILEMANAGERPRIVATEINTERNAL_EXECUTECUSTOMACTION"/>
-  <int value="1062" label="MDNS_FORCEDISCOVERY"/>
-  <int value="1063" label="LANGUAGESETTINGSPRIVATE_GETLANGUAGELIST"/>
-  <int value="1064" label="DELETED_LANGUAGESETTINGSPRIVATE_SETLANGUAGELIST"/>
-  <int value="1065"
-      label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKDICTIONARYSTATUS"/>
-  <int value="1066" label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKWORDS"/>
-  <int value="1067" label="LANGUAGESETTINGSPRIVATE_GETTRANSLATETARGETLANGUAGE"/>
-  <int value="1068" label="LANGUAGESETTINGSPRIVATE_GETINPUTMETHODLISTS"/>
-  <int value="1069" label="LANGUAGESETTINGSPRIVATE_ADDINPUTMETHOD"/>
-  <int value="1070" label="LANGUAGESETTINGSPRIVATE_REMOVEINPUTMETHOD"/>
-  <int value="1071" label="FILEMANAGERPRIVATE_CANCELALLFILETRANSFERS"/>
-  <int value="1072" label="NETWORKINGPRIVATE_UNLOCKCELLULARSIM"/>
-  <int value="1073" label="NETWORKINGPRIVATE_SETCELLULARSIMSTATE"/>
-  <int value="1074" label="ENTERPRISE_DEVICEATTRIBUTES_GETDIRECTORYDEVICEID"/>
-  <int value="1075" label="CASTDEVICESPRIVATE_UPDATEDEVICES"/>
-  <int value="1076" label="SYSTEM_DISPLAY_ENABLEUNIFIEDDESKTOP"/>
-  <int value="1077" label="BROWSINGDATA_REMOVECACHESTORAGE"/>
-  <int value="1078" label="VIRTUALKEYBOARDPRIVATE_SETKEYBOARDSTATE"/>
-  <int value="1079" label="VIRTUALKEYBOARDPRIVATE_SETHOTRODKEYBOARD"/>
-  <int value="1080" label="CERTIFICATEPROVIDERINTERNAL_REPORTSIGNATURE"/>
-  <int value="1081" label="CERTIFICATEPROVIDERINTERNAL_REPORTCERTIFICATES"/>
-  <int value="1082" label="BLUETOOTHPRIVATE_PAIR"/>
-  <int value="1083" label="EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
-  <int value="1084" label="RESOURCESPRIVATE_GETSTRINGS"/>
-  <int value="1085" label="USB_GETCONFIGURATIONS"/>
-  <int value="1086" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
-  <int value="1087" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
-  <int value="1088" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
-  <int value="1089" label="DATAREDUCTIONPROXY_GETDATAUSAGE"/>
-  <int value="1090" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
-  <int value="1091" label="TABCAPTURE_CAPTUREOFFSCREENTAB"/>
-  <int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/>
-  <int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/>
-  <int value="1094" label="SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION"/>
-  <int value="1095" label="SETTINGSPRIVATE_SETDEFAULTZOOMFUNCTION"/>
-  <int value="1096" label="BLUETOOTHPRIVATE_CONNECT"/>
-  <int value="1097" label="BLUETOOTHPRIVATE_FORGETDEVICE"/>
-  <int value="1098" label="DISPLAYSOURCE_GETAVAILABLESINKS"/>
-  <int value="1099" label="DISPLAYSOURCE_REQUESTAUTHENTICATION"/>
-  <int value="1100" label="WEBRTCLOGGINGPRIVATE_STARTAUDIODEBUGRECORDINGS"/>
-  <int value="1101" label="WEBRTCLOGGINGPRIVATE_STOPAUDIODEBUGRECORDINGS"/>
-  <int value="1102" label="TERMINALPRIVATE_ACKOUTPUT"/>
-  <int value="1103" label="INPUT_IME_CREATEWINDOW"/>
-  <int value="1104" label="INPUTMETHODPRIVATE_SETXKBLAYOUT"/>
-  <int value="1105" label="ACCESSIBILITY_PRIVATE_SETKEYBOARDLISTENER"/>
-  <int value="1106" label="INPUT_IME_ACTIVATE"/>
-  <int value="1107" label="INPUT_IME_DEACTIVATE"/>
-  <int value="1108" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEMACHINEKEY"/>
-  <int value="1109" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEUSERKEY"/>
-  <int value="1110" label="INPUTMETHODPRIVATE_NOTIFYIMEMENUITEMACTIVATED"/>
-  <int value="1111" label="INPUT_IME_SHOWWINDOW"/>
-  <int value="1112" label="INPUT_IME_HIDEWINDOW"/>
-  <int value="1113" label="INPUTMETHODPRIVATE_SHOWINPUTVIEW"/>
-  <int value="1114" label="WALLPAPERPRIVATE_RECORDWALLPAPERUMA"/>
-  <int value="1115" label="AUTOTESTPRIVATE_GETVISIBLENOTIFICATIONS"/>
-  <int value="1116" label="WEBRTCLOGGINGPRIVATE_STARTRTCEVENTLOGGING"/>
-  <int value="1117" label="WEBRTCLOGGINGPRIVATE_STOPRTCEVENTLOGGING"/>
-  <int value="1118" label="PASSWORDSPRIVATE_GETSAVEDPASSWORDLIST"/>
-  <int value="1119" label="PASSWORDSPRIVATE_GETPASSWORDEXCEPTIONLIST"/>
-  <int value="1120" label="INPUTMETHODPRIVATE_OPENOPTIONSPAGE"/>
-  <int value="1121" label="FEEDBACKPRIVATE_LOGSRTPROMPTRESULT"/>
-  <int value="1122" label="BLUETOOTHLOWENERGY_CREATESERVICE"/>
-  <int value="1123" label="BLUETOOTHLOWENERGY_CREATECHARACTERISTIC"/>
-  <int value="1124" label="BLUETOOTHLOWENERGY_CREATEDESCRIPTOR"/>
-  <int value="1125" label="BLUETOOTHLOWENERGY_REGISTERSERVICE"/>
-  <int value="1126" label="BLUETOOTHLOWENERGY_UNREGISTERSERVICE"/>
-  <int value="1127" label="BLUETOOTHLOWENERGY_SENDREQUESTRESPONSE"/>
-  <int value="1128"
-      label="BLUETOOTHLOWENERGY_NOTIFYCHARACTERISTICVALUECHANGED"/>
-  <int value="1129" label="BLUETOOTHLOWENERGY_REMOVESERVICE"/>
-  <int value="1130" label="AUTOFILLPRIVATE_GETADDRESSLIST"/>
-  <int value="1131" label="AUTOFILLPRIVATE_GETCREDITCARDLIST"/>
-  <int value="1132" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONSTART"/>
-  <int value="1133" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONADJUST"/>
-  <int value="1134" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONRESET"/>
-  <int value="1135" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONCOMPLETE"/>
-  <int value="1136" label="AUTOFILLPRIVATE_GETCOUNTRYLIST"/>
-  <int value="1137" label="RUNTIME_RESTARTAFTERDELAY"/>
-  <int value="1138" label="SYSTEM_DISPLAY_SETDISPLAYLAYOUT"/>
-  <int value="1139" label="SYSTEM_DISPLAY_GETDISPLAYLAYOUT"/>
-  <int value="1140" label="QUICKUNLOCKPRIVATE_SETMODES"/>
-  <int value="1141" label="QUICKUNLOCKPRIVATE_GETACTIVEMODES"/>
-  <int value="1142" label="QUICKUNLOCKPRIVATE_GETAVAILABLEMODES"/>
-  <int value="1143" label="WEBSTOREPRIVATE_ISPENDINGCUSTODIANAPPROVAL"/>
-  <int value="1144" label="TABS_DISCARD"/>
-  <int value="1145" label="LANGUAGESETTINGSPRIVATE_ENABLELANGUAGE"/>
-  <int value="1146" label="LANGUAGESETTINGSPRIVATE_DISABLELANGUAGE"/>
-  <int value="1147" label="FILEMANAGERPRIVATEINTERNAL_GETDIRECTORYSIZE"/>
-  <int value="1148" label="BLUETOOTHLOWENERGY_SETADVERTISINGINTERVAL"/>
-  <int value="1149" label="SYSTEM_DISPLAY_SHOWNATIVETOUCHCALIBRATION"/>
-  <int value="1150" label="SYSTEM_DISPLAY_COMPLETECUSTOMTOUCHCALIBRATION"/>
-  <int value="1151" label="SYSTEM_DISPLAY_CLEARTOUCHCALIBRATION"/>
-  <int value="1152" label="CERTIFICATEPROVIDER_REQUESTPIN"/>
-  <int value="1153" label="CERTIFICATEPROVIDER_STOPPINREQUEST"/>
-  <int value="1154" label="QUICKUNLOCKPRIVATE_CHECKCREDENTIAL"/>
-  <int value="1155" label="QUICKUNLOCKPRIVATE_GETCREDENTIALREQUIREMENTS"/>
-  <int value="1156" label="CLIPBOARD_SETIMAGEDATA"/>
-  <int value="1157" label="NETWORKINGPRIVATE_GETGLOBALPOLICY"/>
-  <int value="1158" label="DIAL_FETCHDEVICEDESCRIPTION"/>
-  <int value="1159" label="SYSTEM_DISPLAY_STARTCUSTOMTOUCHCALIBRATION"/>
-  <int value="1160" label="AUDIO_GETMUTE"/>
-  <int value="1161" label="AUDIO_SETMUTE"/>
-  <int value="1162" label="AUDIO_GETDEVICES"/>
-  <int value="1163" label="VIRTUALKEYBOARD_RESTRICTFEATURES"/>
-  <int value="1164" label="NETWORKINGCASTPRIVATE_VERIFYDESTINATION"/>
-  <int value="1165" label="NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
-  <int value="1166" label="NETWORKINGCASTPRIVATE_VERIFYANDENCRYPTDATA"/>
-  <int value="1167" label="NETWORKINGCASTPRIVATE_SETWIFITDLSENABLEDSTATE"/>
-  <int value="1168" label="NETWORKINGCASTPRIVATE_GETWIFITDLSSTATUS"/>
-</enum>
-
-<enum name="ExtensionIconState" type="int">
-  <int value="0" label="DISABLED"/>
-  <int value="1" label="VISIBLE"/>
-  <int value="2" label="OVERFLOWED"/>
-</enum>
-
-<enum name="ExtensionInstallCause" type="int">
-  <int value="0" label="INSTALL_CAUSE_UNSET"/>
-  <int value="1" label="INSTALL_CAUSE_USER_DOWNLOAD"/>
-  <int value="2" label="INSTALL_CAUSE_UPDATE"/>
-  <int value="3" label="INSTALL_CAUSE_EXTERNAL_FILE"/>
-  <int value="4" label="INSTALL_CAUSE_AUTOMATION"/>
-</enum>
-
-<enum name="ExtensionInstallPromptExperimentLinkAction" type="int">
-  <int value="0" label="Link is shown"/>
-  <int value="1" label="Link is not shown"/>
-  <int value="2" label="Link is clicked"/>
-</enum>
-
-<enum name="ExtensionInstallPromptType" type="int">
-  <int value="0" label="Install prompt"/>
-  <int value="1" label="Inline install prompt"/>
-  <int value="2" label="Bundle install prompt"/>
-  <int value="3" label="Re-enable prompt"/>
-  <int value="4" label="Permissions prompt"/>
-  <int value="5" label="External install prompt"/>
-  <int value="6" label="Post install permissions prompt"/>
-  <int value="7" label="Launch prompt"/>
-  <int value="8" label="Remote install prompt"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierGetSignatureResult" type="int">
-  <int value="0" label="No signature (network error, etc)"/>
-  <int value="1" label="Invalid signature"/>
-  <int value="2" label="Valid signature"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierInitResult" type="int">
-  <int value="0" label="No value in prefs"/>
-  <int value="1" label="Pref present but parsing failed"/>
-  <int value="2" label="Invalid signature"/>
-  <int value="3" label="Valid signature"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierMustRemainDisabled" type="int">
-  <int value="0" label="VERIFIED"/>
-  <int value="1" label="NOT_EXTENSION"/>
-  <int value="2" label="UNPACKED"/>
-  <int value="3" label="ENTERPRISE_POLICY_ALLOWED"/>
-  <int value="4" label="FORCED_NOT_VERIFIED"/>
-  <int value="5" label="NOT_FROM_STORE"/>
-  <int value="6" label="NO_SIGNATURE"/>
-  <int value="7" label="NOT_VERIFIED_BUT_NOT_ENFORCING"/>
-  <int value="8" label="NOT_VERIFIED"/>
-  <int value="9" label="NOT_VERIFIED_BUT_INSTALL_TIME_NEWER_THAN_SIGNATURE"/>
-  <int value="10" label="NOT_VERIFIED_BUT_UNKNOWN_ID"/>
-  <int value="11" label="COMPONENT"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierStatus" type="int">
-  <int value="0" label="NONE"/>
-  <int value="1" label="BOOTSTRAP"/>
-  <int value="2" label="ENFORCE"/>
-  <int value="3" label="ENFORCE_STRICT"/>
-</enum>
-
-<enum name="ExtensionLaunchType" type="int">
-  <int value="0" label="PINNED"/>
-  <int value="1" label="REGULAR"/>
-  <int value="2" label="FULLSCREEN"/>
-</enum>
-
-<enum name="ExtensionLocation" type="int">
-  <int value="0" label="INVALID"/>
-  <int value="1" label="INTERNAL"/>
-  <int value="2" label="EXTERNAL_PREF"/>
-  <int value="3" label="EXTERNAL_REGISTRY"/>
-  <int value="4" label="LOAD"/>
-  <int value="5" label="COMPONENT"/>
-  <int value="6" label="EXTERNAL_PREF_DOWNLOAD"/>
-  <int value="7" label="EXTERNAL_POLICY_DOWNLOAD"/>
-  <int value="8" label="COMMAND_LINE"/>
-  <int value="9" label="EXTERNAL_POLICY"/>
-  <int value="10" label="EXTERNAL_COMPONENT"/>
-</enum>
-
-<enum name="ExtensionNotificationType" type="int">
-  <int value="0" label="NOTIFICATION_TYPE_SIMPLE"/>
-  <int value="1" label="NOTIFICATION_TYPE_BASE_FORMAT"/>
-  <int value="2" label="NOTIFICATION_TYPE_IMAGE"/>
-  <int value="3" label="NOTIFICATION_TYPE_MULTIPLE"/>
-  <int value="4" label="NOTIFICATION_TYPE_PROGRESS"/>
-</enum>
-
-<enum name="ExtensionPermission" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="NONE"/>
-  <int value="2" label="BOOKMARKS"/>
-  <int value="3" label="GEOLOCATION"/>
-  <int value="4" label="BROWSING_HISTORY"/>
-  <int value="5" label="TABS"/>
-  <int value="6" label="MANAGEMENT"/>
-  <int value="7" label="DEBUGGER"/>
-  <int value="8" label="1_HOST"/>
-  <int value="9" label="2_HOSTS"/>
-  <int value="10" label="3_HOSTS"/>
-  <int value="11" label="4_OR_MORE_HOSTS"/>
-  <int value="12" label="ALL_HOSTS"/>
-  <int value="13" label="FULL_ACCESS"/>
-  <int value="14" label="CLIPBOARD"/>
-  <int value="15" label="TTS_ENGINE"/>
-  <int value="16" label="CONTENT_SETTINGS"/>
-  <int value="17" label="PRIVACY"/>
-  <int value="18" label="MANAGED_MODE"/>
-  <int value="19" label="INPUT"/>
-  <int value="20" label="AUDIO_CAPTURE"/>
-  <int value="21" label="VIDEO_CAPTURE"/>
-  <int value="22" label="DOWNLOADS"/>
-  <int value="23" label="FILE_SYSTEM_WRITE"/>
-  <int value="24" label="ALL_MEDIA_GALLERIES"/>
-  <int value="25" label="SERIAL"/>
-  <int value="26" label="SOCKET_ANY_HOST"/>
-  <int value="27" label="SOCKET_DOMAIN_HOSTS"/>
-  <int value="28" label="SOCKET_SPECIFIC_HOSTS"/>
-</enum>
-
-<enum name="ExtensionPermission2" type="int">
-<!-- Generated from extensions/common/permissions/permission_message.h -->
-
-  <int value="0" label="kUnknown"/>
-  <int value="1" label="kNone"/>
-  <int value="2" label="kBookmarks"/>
-  <int value="3" label="kGeolocation"/>
-  <int value="4" label="kBrowsingHistory"/>
-  <int value="5" label="kTabs"/>
-  <int value="6" label="kManagement"/>
-  <int value="7" label="kDebugger"/>
-  <int value="8" label="kDesktopCapture"/>
-  <int value="9" label="kHid"/>
-  <int value="10" label="kHosts1"/>
-  <int value="11" label="kHosts2"/>
-  <int value="12" label="kHosts3"/>
-  <int value="13" label="kHosts4OrMore"/>
-  <int value="14" label="kHostsAll"/>
-  <int value="15" label="kFullAccess"/>
-  <int value="16" label="kClipboard"/>
-  <int value="17" label="kTtsEngine"/>
-  <int value="18" label="kContentSettings"/>
-  <int value="19" label="kPrivacy"/>
-  <int value="20" label="kSupervisedUser"/>
-  <int value="21" label="kInput"/>
-  <int value="22" label="kAudioCapture"/>
-  <int value="23" label="kVideoCapture"/>
-  <int value="24" label="kDownloads"/>
-  <int value="25" label="kDeleted_FileSystemWrite"/>
-  <int value="26" label="kMediaGalleriesAllGalleriesRead"/>
-  <int value="27" label="kSerial"/>
-  <int value="28" label="kSocketAnyHost"/>
-  <int value="29" label="kSocketDomainHosts"/>
-  <int value="30" label="kSocketSpecificHosts"/>
-  <int value="31" label="kBluetooth"/>
-  <int value="32" label="kUsb"/>
-  <int value="33" label="kSystemIndicator"/>
-  <int value="34" label="kUsbDevice"/>
-  <int value="35" label="kMediaGalleriesAllGalleriesCopyTo"/>
-  <int value="36" label="kSystemInfoDisplay"/>
-  <int value="37" label="kNativeMessaging"/>
-  <int value="38" label="kSyncFileSystem"/>
-  <int value="39" label="kAudio"/>
-  <int value="40" label="kFavicon"/>
-  <int value="41" label="kMusicManagerPrivate"/>
-  <int value="42" label="kWebConnectable"/>
-  <int value="43" label="kActivityLogPrivate"/>
-  <int value="44" label="kBluetoothDevices"/>
-  <int value="45" label="kDownloadsOpen"/>
-  <int value="46" label="kNetworkingPrivate"/>
-  <int value="47" label="kDeclarativeWebRequest"/>
-  <int value="48" label="kFileSystemDirectory"/>
-  <int value="49" label="kFileSystemWriteDirectory"/>
-  <int value="50" label="kSignedInDevices"/>
-  <int value="51" label="kWallpaper"/>
-  <int value="52" label="kNetworkState"/>
-  <int value="53" label="kHomepage"/>
-  <int value="54" label="kSearchProvider"/>
-  <int value="55" label="kStartupPages"/>
-  <int value="56" label="kMediaGalleriesAllGalleriesDelete"/>
-  <int value="57" label="kScreenlockPrivate"/>
-  <int value="58" label="kOverrideBookmarksUI"/>
-  <int value="59" label="kAutomation"/>
-  <int value="60" label="kAccessibilityFeaturesModify"/>
-  <int value="61" label="kAccessibilityFeaturesRead"/>
-  <int value="62" label="kBluetoothPrivate"/>
-  <int value="63" label="kIdentityEmail"/>
-  <int value="64" label="kExperienceSamplingPrivate"/>
-  <int value="65" label="kCopresence"/>
-  <int value="66" label="kTopSites"/>
-  <int value="67" label="kU2fDevices"/>
-  <int value="68" label="kDocumentScan"/>
-  <int value="69" label="kNetworkingConfig"/>
-  <int value="70" label="kPlatformKeys"/>
-  <int value="71" label="kMDns"/>
-  <int value="72" label="kVpnProvider"/>
-  <int value="73" label="kHosts1ReadOnly"/>
-  <int value="74" label="kHosts2ReadOnly"/>
-  <int value="75" label="kHosts3ReadOnly"/>
-  <int value="76" label="kHosts4OrMoreReadOnly"/>
-  <int value="77" label="kHostsAllReadOnly"/>
-  <int value="78" label="kDeleted_InterceptAllKeys"/>
-  <int value="79" label="kSettingsPrivate"/>
-  <int value="80" label="kPrinterProvider"/>
-  <int value="81" label="kSearchEnginesPrivate"/>
-  <int value="82" label="kAutofillPrivate"/>
-  <int value="83" label="kPasswordsPrivate"/>
-  <int value="84" label="kUsersPrivate"/>
-</enum>
-
-<enum name="ExtensionPermission3" type="int">
-<!-- Generated from extensions/common/permissions/api_permission.h -->
-
-  <int value="0" label="kInvalid"/>
-  <int value="1" label="kUnknown"/>
-  <int value="2" label="kAccessibilityFeaturesModify"/>
-  <int value="3" label="kAccessibilityFeaturesRead"/>
-  <int value="4" label="kAccessibilityPrivate"/>
-  <int value="5" label="kActiveTab"/>
-  <int value="6" label="kActivityLogPrivate"/>
-  <int value="7" label="kAlarms"/>
-  <int value="8" label="kAlphaEnabled"/>
-  <int value="9" label="kAlwaysOnTopWindows"/>
-  <int value="10" label="kAppView"/>
-  <int value="11" label="kAudio"/>
-  <int value="12" label="kAudioCapture"/>
-  <int value="13" label="kDeleted_AudioModem"/>
-  <int value="14" label="kAutofillPrivate"/>
-  <int value="15" label="kAutomation"/>
-  <int value="16" label="kAutoTestPrivate"/>
-  <int value="17" label="kBackground"/>
-  <int value="18" label="kBluetoothPrivate"/>
-  <int value="19" label="kBookmark"/>
-  <int value="20" label="kBookmarkManagerPrivate"/>
-  <int value="21" label="kBrailleDisplayPrivate"/>
-  <int value="22" label="kBrowser"/>
-  <int value="23" label="kBrowsingData"/>
-  <int value="24" label="kCast"/>
-  <int value="25" label="kCastStreaming"/>
-  <int value="26" label="kChromeosInfoPrivate"/>
-  <int value="27" label="kClipboardRead"/>
-  <int value="28" label="kClipboardWrite"/>
-  <int value="29" label="kCloudPrintPrivate"/>
-  <int value="30" label="kCommandLinePrivate"/>
-  <int value="31" label="kCommandsAccessibility"/>
-  <int value="32" label="kContentSettings"/>
-  <int value="33" label="kContextMenus"/>
-  <int value="34" label="kCookie"/>
-  <int value="35" label="kDeleted_Copresence"/>
-  <int value="36" label="kDeleted_CopresencePrivate"/>
-  <int value="37" label="kCryptotokenPrivate"/>
-  <int value="38" label="kDataReductionProxy"/>
-  <int value="39" label="kDiagnostics"/>
-  <int value="40" label="kDial"/>
-  <int value="41" label="kDebugger"/>
-  <int value="42" label="kDeclarative"/>
-  <int value="43" label="kDeclarativeContent"/>
-  <int value="44" label="kDeclarativeWebRequest"/>
-  <int value="45" label="kDesktopCapture"/>
-  <int value="46" label="kDesktopCapturePrivate"/>
-  <int value="47" label="kDeveloperPrivate"/>
-  <int value="48" label="kDevtools"/>
-  <int value="49" label="kDns"/>
-  <int value="50" label="kDocumentScan"/>
-  <int value="51" label="kDownloads"/>
-  <int value="52" label="kDownloadsInternal"/>
-  <int value="53" label="kDownloadsOpen"/>
-  <int value="54" label="kDownloadsShelf"/>
-  <int value="55" label="kEasyUnlockPrivate"/>
-  <int value="56" label="kEchoPrivate"/>
-  <int value="57" label="kEmbeddedExtensionOptions"/>
-  <int value="58" label="kEnterprisePlatformKeys"/>
-  <int value="59" label="kEnterprisePlatformKeysPrivate"/>
-  <int value="60" label="kExperienceSamplingPrivate"/>
-  <int value="61" label="kExperimental"/>
-  <int value="62" label="kExtensionView"/>
-  <int value="63" label="kExternallyConnectableAllUrls"/>
-  <int value="64" label="kFeedbackPrivate"/>
-  <int value="65" label="kFileBrowserHandler"/>
-  <int value="66" label="kFileBrowserHandlerInternal"/>
-  <int value="67" label="kFileManagerPrivate"/>
-  <int value="68" label="kFileSystem"/>
-  <int value="69" label="kFileSystemDirectory"/>
-  <int value="70" label="kFileSystemProvider"/>
-  <int value="71" label="kFileSystemRequestFileSystem"/>
-  <int value="72" label="kFileSystemRetainEntries"/>
-  <int value="73" label="kFileSystemWrite"/>
-  <int value="74" label="kDeleted_FileSystemWriteDirectory"/>
-  <int value="75" label="kFirstRunPrivate"/>
-  <int value="76" label="kFontSettings"/>
-  <int value="77" label="kFullscreen"/>
-  <int value="78" label="kDeleted_GcdPrivate"/>
-  <int value="79" label="kGcm"/>
-  <int value="80" label="kGeolocation"/>
-  <int value="81" label="kHid"/>
-  <int value="82" label="kHistory"/>
-  <int value="83" label="kHomepage"/>
-  <int value="84" label="kHotwordPrivate"/>
-  <int value="85" label="kIdentity"/>
-  <int value="86" label="kIdentityEmail"/>
-  <int value="87" label="kIdentityPrivate"/>
-  <int value="88" label="kIdltest"/>
-  <int value="89" label="kIdle"/>
-  <int value="90" label="kImeWindowEnabled"/>
-  <int value="91" label="kInlineInstallPrivate"/>
-  <int value="92" label="kInput"/>
-  <int value="93" label="kInputMethodPrivate"/>
-  <int value="94" label="kDeleted_InterceptAllKeys"/>
-  <int value="95" label="kLauncherSearchProvider"/>
-  <int value="96" label="kLocation"/>
-  <int value="97" label="kLogPrivate"/>
-  <int value="98" label="kManagement"/>
-  <int value="99" label="kMediaGalleries"/>
-  <int value="100" label="kMediaPlayerPrivate"/>
-  <int value="101" label="kMediaRouterPrivate"/>
-  <int value="102" label="kMetricsPrivate"/>
-  <int value="103" label="kMDns"/>
-  <int value="104" label="kMusicManagerPrivate"/>
-  <int value="105" label="kNativeMessaging"/>
-  <int value="106" label="kNetworkingConfig"/>
-  <int value="107" label="kNetworkingPrivate"/>
-  <int value="108" label="kDeleted_NotificationProvider"/>
-  <int value="109" label="kNotifications"/>
-  <int value="110" label="kOverrideEscFullscreen"/>
-  <int value="111" label="kPageCapture"/>
-  <int value="112" label="kPointerLock"/>
-  <int value="113" label="kPlatformKeys"/>
-  <int value="114" label="kPlugin"/>
-  <int value="115" label="kPower"/>
-  <int value="116" label="kPreferencesPrivate"/>
-  <int value="117" label="kDeleted_PrincipalsPrivate"/>
-  <int value="118" label="kPrinterProvider"/>
-  <int value="119" label="kPrivacy"/>
-  <int value="120" label="kProcesses"/>
-  <int value="121" label="kProxy"/>
-  <int value="122" label="kImageWriterPrivate"/>
-  <int value="123" label="kDeleted_ReadingListPrivate"/>
-  <int value="124" label="kRtcPrivate"/>
-  <int value="125" label="kSearchProvider"/>
-  <int value="126" label="kSearchEnginesPrivate"/>
-  <int value="127" label="kSerial"/>
-  <int value="128" label="kSessions"/>
-  <int value="129" label="kSettingsPrivate"/>
-  <int value="130" label="kSignedInDevices"/>
-  <int value="131" label="kSocket"/>
-  <int value="132" label="kStartupPages"/>
-  <int value="133" label="kStorage"/>
-  <int value="134" label="kStreamsPrivate"/>
-  <int value="135" label="kSyncFileSystem"/>
-  <int value="136" label="kSystemPrivate"/>
-  <int value="137" label="kSystemDisplay"/>
-  <int value="138" label="kSystemStorage"/>
-  <int value="139" label="kTab"/>
-  <int value="140" label="kTabCapture"/>
-  <int value="141" label="kTabCaptureForTab"/>
-  <int value="142" label="kTerminalPrivate"/>
-  <int value="143" label="kTopSites"/>
-  <int value="144" label="kTts"/>
-  <int value="145" label="kTtsEngine"/>
-  <int value="146" label="kUnlimitedStorage"/>
-  <int value="147" label="kU2fDevices"/>
-  <int value="148" label="kUsb"/>
-  <int value="149" label="kUsbDevice"/>
-  <int value="150" label="kVideoCapture"/>
-  <int value="151" label="kVirtualKeyboardPrivate"/>
-  <int value="152" label="kVpnProvider"/>
-  <int value="153" label="kWallpaper"/>
-  <int value="154" label="kWallpaperPrivate"/>
-  <int value="155" label="kWebcamPrivate"/>
-  <int value="156" label="kWebConnectable"/>
-  <int value="157" label="kWebNavigation"/>
-  <int value="158" label="kWebRequest"/>
-  <int value="159" label="kWebRequestBlocking"/>
-  <int value="160" label="kWebrtcAudioPrivate"/>
-  <int value="161" label="kWebrtcDesktopCapturePrivate"/>
-  <int value="162" label="kWebrtcLoggingPrivate"/>
-  <int value="163" label="kWebstorePrivate"/>
-  <int value="164" label="kWebstoreWidgetPrivate"/>
-  <int value="165" label="kWebView"/>
-  <int value="166" label="kWindowShape"/>
-  <int value="167" label="kScreenlockPrivate"/>
-  <int value="168" label="kSystemCpu"/>
-  <int value="169" label="kSystemMemory"/>
-  <int value="170" label="kSystemNetwork"/>
-  <int value="171" label="kSystemInfoCpu"/>
-  <int value="172" label="kSystemInfoMemory"/>
-  <int value="173" label="kBluetooth"/>
-  <int value="174" label="kBluetoothDevices"/>
-  <int value="175" label="kFavicon"/>
-  <int value="176" label="kFullAccess"/>
-  <int value="177" label="kHostReadOnly"/>
-  <int value="178" label="kHostReadWrite"/>
-  <int value="179" label="kHostsAll"/>
-  <int value="180" label="kHostsAllReadOnly"/>
-  <int value="181" label="kMediaGalleriesAllGalleriesCopyTo"/>
-  <int value="182" label="kMediaGalleriesAllGalleriesDelete"/>
-  <int value="183" label="kMediaGalleriesAllGalleriesRead"/>
-  <int value="184" label="kNetworkState"/>
-  <int value="185" label="kOverrideBookmarksUI"/>
-  <int value="186" label="kShouldWarnAllHosts"/>
-  <int value="187" label="kSocketAnyHost"/>
-  <int value="188" label="kSocketDomainHosts"/>
-  <int value="189" label="kSocketSpecificHosts"/>
-  <int value="190" label="kDeleted_UsbDeviceList"/>
-  <int value="191" label="kUsbDeviceUnknownProduct"/>
-  <int value="192" label="kUsbDeviceUnknownVendor"/>
-  <int value="193" label="kUsersPrivate"/>
-  <int value="194" label="kPasswordsPrivate"/>
-  <int value="195" label="kLanguageSettingsPrivate"/>
-  <int value="196" label="kEnterpriseDeviceAttributes"/>
-  <int value="197" label="kCertificateProvider"/>
-  <int value="198" label="kResourcesPrivate"/>
-  <int value="199" label="kDisplaySource"/>
-  <int value="200" label="kClipboard"/>
-  <int value="201" label="kNetworkingOnc"/>
-  <int value="202" label="kVirtualKeyboard"/>
-  <int value="203" label="kNetworkingCastPrivate"/>
-</enum>
-
-<enum name="ExtensionServiceVerifyAllSuccess" type="int">
-  <int value="0" label="VERIFY_ALL_BOOTSTRAP_SUCCESS"/>
-  <int value="1" label="VERIFY_ALL_BOOTSTRAP_FAILURE"/>
-  <int value="2" label="VERIFY_ALL_NON_BOOTSTRAP_SUCCESS"/>
-  <int value="3" label="VERIFY_ALL_NON_BOOTSTRAP_FAILURE"/>
-</enum>
-
-<enum name="ExtensionType" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="EXTENSION"/>
-  <int value="2" label="THEME"/>
-  <int value="3" label="USER_SCRIPT"/>
-  <int value="4" label="HOSTED_APP"/>
-  <int value="5" label="LEGACY_PACKAGED_APP"/>
-  <int value="6" label="PLATFORM_APP"/>
-</enum>
-
-<enum name="ExtensionUninstallDialogAction" type="int">
-  <int value="0" label="Uninstall only"/>
-  <int value="1" label="Uninstall and report abuse"/>
-  <int value="2" label="Dialog canceled"/>
-</enum>
-
-<enum name="ExtensionUninstallSource" type="int">
-  <int value="0" label="Testing"/>
-  <int value="1" label="Context menu"/>
-  <int value="2" label="Permissions increase"/>
-  <int value="3" label="Storage threshold exceeded"/>
-  <int value="4" label="App list"/>
-  <int value="5" label="App info dialog"/>
-  <int value="6" label="Chrome apps page"/>
-  <int value="7" label="Chrome extensions page"/>
-  <int value="8" label="Extension"/>
-</enum>
-
-<enum name="ExtensionUnpackFailureReason" type="int">
-  <summary>
-    Reasons the sandboxed extension unpacker can fail.  See enum FailureReason
-    in src/chrome/browser/extensions/sandboxed_extension_unpacker.h .
-  </summary>
-  <int value="0" label="COULD_NOT_GET_TEMP_DIRECTORY"/>
-  <int value="1" label="COULD_NOT_CREATE_TEMP_DIRECTORY"/>
-  <int value="2" label="FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"/>
-  <int value="3" label="COULD_NOT_GET_SANDBOX_FRIENDLY_PATH"/>
-  <int value="4" label="COULD_NOT_LOCALIZE_EXTENSION"/>
-  <int value="5" label="INVALID_MANIFEST"/>
-  <int value="6" label="UNPACKER_CLIENT_FAILED"/>
-  <int value="7" label="UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"/>
-  <int value="8" label="CRX_FILE_NOT_READABLE"/>
-  <int value="9" label="CRX_HEADER_INVALID"/>
-  <int value="10" label="CRX_MAGIC_NUMBER_INVALID"/>
-  <int value="11" label="CRX_VERSION_NUMBER_INVALID"/>
-  <int value="12" label="CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE"/>
-  <int value="13" label="CRX_ZERO_KEY_LENGTH"/>
-  <int value="14" label="CRX_ZERO_SIGNATURE_LENGTH"/>
-  <int value="15" label="CRX_PUBLIC_KEY_INVALID"/>
-  <int value="16" label="CRX_SIGNATURE_INVALID"/>
-  <int value="17" label="CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED"/>
-  <int value="18" label="CRX_SIGNATURE_VERIFICATION_FAILED"/>
-  <int value="19" label="ERROR_SERIALIZING_MANIFEST_JSON"/>
-  <int value="20" label="ERROR_SAVING_MANIFEST_JSON"/>
-  <int value="21" label="COULD_NOT_READ_IMAGE_DATA_FROM_DISK"/>
-  <int value="22" label="DECODED_IMAGES_DO_NOT_MATCH_THE_MANIFEST"/>
-  <int value="23" label="INVALID_PATH_FOR_BROWSER_IMAGE"/>
-  <int value="24" label="ERROR_REMOVING_OLD_IMAGE_FILE"/>
-  <int value="25" label="INVALID_PATH_FOR_BITMAP_IMAGE"/>
-  <int value="26" label="ERROR_RE_ENCODING_THEME_IMAGE"/>
-  <int value="27" label="ERROR_SAVING_THEME_IMAGE"/>
-  <int value="28" label="COULD_NOT_READ_CATALOG_DATA_FROM_DISK"/>
-  <int value="29" label="INVALID_CATALOG_DATA"/>
-  <int value="30" label="INVALID_PATH_FOR_CATALOG"/>
-  <int value="31" label="ERROR_SERIALIZING_CATALOG"/>
-  <int value="32" label="ERROR_SAVING_CATALOG"/>
-  <int value="33" label="CRX_HASH_VERIFICATION_FAILED"/>
-</enum>
-
-<enum name="ExternalDeviceAction" type="int">
-  <int value="0" label="Import to Drive"/>
-  <int value="1" label="View files"/>
-  <int value="2" label="View files (automatically)"/>
-  <int value="3" label="Watch video"/>
-  <int value="4" label="Error"/>
-  <int value="5" label="Close (no action)"/>
-</enum>
-
-<enum name="ExternalDisplayOpenResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failed with EACCES (incorrect permission on device)"/>
-  <int value="2" label="Failed with ENOENT (device missing)"/>
-  <int value="3" label="Failed for some other reason"/>
-</enum>
-
-<enum name="ExternalDisplayReceiveResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="ioctl() to I2C device failed"/>
-  <int value="2" label="Bad message checksum"/>
-  <int value="3" label="Bad message address"/>
-  <int value="4" label="Bad message length"/>
-  <int value="5" label="Bad command code in message"/>
-  <int value="6" label="Bad result code in message"/>
-  <int value="7" label="Bad feature index in message"/>
-  <int value="8" label="Maximum value of 0 in message"/>
-</enum>
-
-<enum name="ExternalDisplaySendResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="ioctl() to I2C device failed"/>
-</enum>
-
-<enum name="ExternalItemState" type="int">
-  <int value="0" label="DEPRECATED_DISABLED"/>
-  <int value="1" label="DEPRECATED_ENABLED"/>
-  <int value="2" label="DISABLED (in webstore)"/>
-  <int value="3" label="ENABLED (in webstore)"/>
-  <int value="4" label="DISABLED (not in webstore)"/>
-  <int value="5" label="ENABLED (not in webstore)"/>
-  <int value="6" label="UNINSTALLED (in webstore)"/>
-  <int value="7" label="UNINSTALLED (not in webstore)"/>
-</enum>
-
-<enum name="ExternallyConditionalizedType" type="int">
-  <int value="0" label="Cache entry requires validation"/>
-  <int value="1" label="Cache entry usable"/>
-  <int value="2" label="Cache entry validators don't match request"/>
-</enum>
-
-<enum name="Exynos5250LotIdEnum" type="int">
-  <int value="0" label="Fused device"/>
-  <int value="1" label="Generic unfused device"/>
-  <int value="2" label="Unfused; lot ID NZVPU"/>
-  <int value="3" label="Unfused; lot ID NZVR7"/>
-</enum>
-
-<enum name="FallbackDNSTestResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-</enum>
-
-<enum name="FallbackSSLVersion" type="int">
-  <int value="0" label="FALLBACK_NONE">SSL version fallback did not occur.</int>
-  <int value="1" label="FALLBACK_SSL3">Fell back on SSL 3.0.</int>
-  <int value="2" label="FALLBACK_TLS1">Fell back on TLS 1.0.</int>
-  <int value="3" label="FALLBACK_TLS1_1">Fell back on TLS 1.1.</int>
-</enum>
-
-<enum name="FaultTolerantHeap" type="int">
-  <int value="0" label="FTH_OFF">FTH is completely off.</int>
-  <int value="1" label="FTH_HKLM">FTH is enabled in HKLM.</int>
-  <int value="2" label="FTH_HKCU">FTH is enabled in HKCU.</int>
-  <int value="3" label="FTH_HKCU_HKLM">FTH is enabled in HKCU and HKLM.</int>
-  <int value="4" label="FTH_ACLAYERS">AcLayers.dll is loaded.</int>
-  <int value="5" label="FTH_ACLAYERS_HKLM">
-    AcLayers.dll is loaded and FTH is enabled in HKLM.
-  </int>
-  <int value="6" label="FTH_ACLAYERS_HKCU">
-    AcLayers.dll is loaded and FTH is enabled in HKCU.
-  </int>
-  <int value="7" label="FTH_ACLAYERS_HKCU_HKLM">
-    AcLayers.dll is loaded and FTH is enabled in HKCU and HKLM.
-  </int>
-  <int value="8" label="FTH_ACXTRNAL">AcXtrnal is loaded.</int>
-  <int value="9" label="FTH_ACXTRNAL_HKLM">
-    AcXtrnal is loaded and FTH is enabled in HKLM.
-  </int>
-  <int value="10" label="FTH_ACXTRNAL_HKCU">
-    AcXtrnal is loaded and FTH is enabled in HKCU.
-  </int>
-  <int value="11" label="FTH_ACXTRNAL_HKCU_HKLM">
-    AcXtrnal is loaded and FTH is enabled in HKCU and HKLM.
-  </int>
-  <int value="12" label="FTH_ACXTRNAL_ACLAYERS">
-    AcXtrmal and AcLayers.dll are loaded.
-  </int>
-  <int value="13" label="FTH_ACXTRNAL_ACLAYERS_HKLM">
-    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKLM.
-  </int>
-  <int value="14" label="FTH_ACXTRNAL_ACLAYERS_HKCU">
-    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKCU.
-  </int>
-  <int value="15" label="FTH_ACXTRNAL_ACLAYERS_HKCU_HKLM">
-    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKCU and HKLM.
-  </int>
-</enum>
-
-<enum name="FeatureObserver" type="int">
-<!-- Generated from third_party/WebKit/Source/core/frame/UseCounter.h -->
-
-  <int value="0" label="OBSOLETE_PageDestruction"/>
-  <int value="1" label="LegacyNotifications"/>
-  <int value="2" label="MultipartMainResource"/>
-  <int value="3" label="PrefixedIndexedDB"/>
-  <int value="4" label="WorkerStart"/>
-  <int value="5" label="SharedWorkerStart"/>
-  <int value="6" label="LegacyWebAudio"/>
-  <int value="7" label="WebAudioStart"/>
-  <int value="8" label="PrefixedContentSecurityPolicy"/>
-  <int value="9" label="UnprefixedIndexedDB"/>
-  <int value="10" label="OpenWebDatabase"/>
-  <int value="11" label="LegacyHTMLNotifications"/>
-  <int value="12" label="LegacyTextNotifications"/>
-  <int value="13" label="UnprefixedRequestAnimationFrame"/>
-  <int value="14" label="PrefixedRequestAnimationFrame"/>
-  <int value="15" label="ContentSecurityPolicy"/>
-  <int value="16" label="ContentSecurityPolicyReportOnly"/>
-  <int value="17" label="PrefixedContentSecurityPolicyReportOnly"/>
-  <int value="18" label="PrefixedTransitionEndEvent"/>
-  <int value="19" label="UnprefixedTransitionEndEvent"/>
-  <int value="20" label="PrefixedAndUnprefixedTransitionEndEvent"/>
-  <int value="21" label="AutoFocusAttribute"/>
-  <int value="22" label="DeprecatedAutoSaveAttribute"/>
-  <int value="23" label="DataListElement"/>
-  <int value="24" label="FormAttribute"/>
-  <int value="25" label="IncrementalAttribute"/>
-  <int value="26" label="InputTypeColor"/>
-  <int value="27" label="InputTypeDate"/>
-  <int value="28" label="InputTypeDateTime"/>
-  <int value="29" label="InputTypeDateTimeFallback"/>
-  <int value="30" label="InputTypeDateTimeLocal"/>
-  <int value="31" label="InputTypeEmail"/>
-  <int value="32" label="InputTypeMonth"/>
-  <int value="33" label="InputTypeNumber"/>
-  <int value="34" label="InputTypeRange"/>
-  <int value="35" label="InputTypeSearch"/>
-  <int value="36" label="InputTypeTel"/>
-  <int value="37" label="InputTypeTime"/>
-  <int value="38" label="InputTypeURL"/>
-  <int value="39" label="InputTypeWeek"/>
-  <int value="40" label="InputTypeWeekFallback"/>
-  <int value="41" label="ListAttribute"/>
-  <int value="42" label="MaxAttribute"/>
-  <int value="43" label="MinAttribute"/>
-  <int value="44" label="PatternAttribute"/>
-  <int value="45" label="PlaceholderAttribute"/>
-  <int value="46" label="PrecisionAttribute"/>
-  <int value="47" label="PrefixedDirectoryAttribute"/>
-  <int value="48" label="PrefixedSpeechAttribute"/>
-  <int value="49" label="RequiredAttribute"/>
-  <int value="50" label="ResultsAttribute"/>
-  <int value="51" label="StepAttribute"/>
-  <int value="52" label="PageVisits"/>
-  <int value="53" label="HTMLMarqueeElement"/>
-  <int value="54" label="Unused: CSSOverflowMarquee"/>
-  <int value="55" label="Reflection"/>
-  <int value="56" label="CursorVisibility"/>
-  <int value="57" label="PrefixedStorageInfo"/>
-  <int value="58" label="XFrameOptions"/>
-  <int value="59" label="XFrameOptionsSameOrigin"/>
-  <int value="60" label="XFrameOptionsSameOriginWithBadAncestorChain"/>
-  <int value="61" label="DeprecatedFlexboxWebContent"/>
-  <int value="62" label="DeprecatedFlexboxChrome"/>
-  <int value="63" label="DeprecatedFlexboxChromeExtension"/>
-  <int value="64" label="SVGTRefElement"/>
-  <int value="65" label="UnprefixedPerformanceTimeline"/>
-  <int value="66" label="PrefixedPerformanceTimeline"/>
-  <int value="67" label="UnprefixedUserTiming"/>
-  <int value="68" label="PrefixedUserTiming"/>
-  <int value="69" label="WindowEvent"/>
-  <int value="70" label="ContentSecurityPolicyWithBaseElement"/>
-  <int value="71" label="PrefixedMediaAddKey"/>
-  <int value="72" label="PrefixedMediaGenerateKeyRequest"/>
-  <int value="73" label="WebAudioLooping"/>
-  <int value="74" label="DocumentClear"/>
-  <int value="75" label="PrefixedTransitionMediaFeature"/>
-  <int value="76" label="SVGFontElement"/>
-  <int value="77" label="XMLDocument"/>
-  <int value="78" label="XSLProcessingInstruction"/>
-  <int value="79" label="XSLTProcessor"/>
-  <int value="80" label="SVGSwitchElement"/>
-  <int value="81" label="PrefixedDocumentRegister"/>
-  <int value="82" label="HTMLShadowElementOlderShadowRoot"/>
-  <int value="83" label="DocumentAll"/>
-  <int value="84" label="FormElement"/>
-  <int value="85" label="DemotedFormElement"/>
-  <int value="86" label="CaptureAttributeAsEnum"/>
-  <int value="87" label="ShadowDOMPrefixedPseudo"/>
-  <int value="88" label="ShadowDOMPrefixedCreateShadowRoot"/>
-  <int value="89" label="ShadowDOMPrefixedShadowRoot"/>
-  <int value="90" label="SVGAnimationElement"/>
-  <int value="91" label="KeyboardEventKeyLocation"/>
-  <int value="92" label="CaptureEvents"/>
-  <int value="93" label="ReleaseEvents"/>
-  <int value="94" label="CSSDisplayRunIn"/>
-  <int value="95" label="CSSDisplayCompact"/>
-  <int value="96" label="LineClamp"/>
-  <int value="97" label="SubFrameBeforeUnloadRegistered"/>
-  <int value="98" label="SubFrameBeforeUnloadFired"/>
-  <int value="99" label="CSSPseudoElementPrefixedDistributed"/>
-  <int value="100" label="TextReplaceWholeText"/>
-  <int value="101" label="PrefixedShadowRootConstructor"/>
-  <int value="102" label="ConsoleMarkTimeline"/>
-  <int value="103" label="CSSPseudoElementUserAgentCustomPseudo"/>
-  <int value="104" label="DocumentTypeEntities"/>
-  <int value="105" label="DocumentTypeInternalSubset"/>
-  <int value="106" label="DocumentTypeNotations"/>
-  <int value="107" label="ElementGetAttributeNode"/>
-  <int value="108" label="ElementSetAttributeNode"/>
-  <int value="109" label="ElementRemoveAttributeNode"/>
-  <int value="110" label="ElementGetAttributeNodeNS"/>
-  <int value="111" label="DocumentCreateAttribute"/>
-  <int value="112" label="DocumentCreateAttributeNS"/>
-  <int value="113" label="DocumentCreateCDATASection"/>
-  <int value="114" label="DocumentInputEncoding"/>
-  <int value="115" label="DocumentXMLEncoding"/>
-  <int value="116" label="DocumentXMLStandalone"/>
-  <int value="117" label="DocumentXMLVersion"/>
-  <int value="118" label="NodeIsSameNode"/>
-  <int value="119" label="NodeIsSupported"/>
-  <int value="120" label="NodeNamespaceURI"/>
-  <int value="121" label="NodePrefix"/>
-  <int value="122" label="NodeLocalName"/>
-  <int value="123" label="NavigatorProductSub"/>
-  <int value="124" label="NavigatorVendor"/>
-  <int value="125" label="NavigatorVendorSub"/>
-  <int value="126" label="FileError"/>
-  <int value="127" label="DocumentCharset"/>
-  <int value="128" label="PrefixedAnimationEndEvent"/>
-  <int value="129" label="UnprefixedAnimationEndEvent"/>
-  <int value="130" label="PrefixedAndUnprefixedAnimationEndEvent"/>
-  <int value="131" label="PrefixedAnimationStartEvent"/>
-  <int value="132" label="UnprefixedAnimationStartEvent"/>
-  <int value="133" label="PrefixedAndUnprefixedAnimationStartEvent"/>
-  <int value="134" label="PrefixedAnimationIterationEvent"/>
-  <int value="135" label="UnprefixedAnimationIterationEvent"/>
-  <int value="136" label="PrefixedAndUnprefixedAnimationIterationEvent"/>
-  <int value="137" label="EventReturnValue"/>
-  <int value="138" label="SVGSVGElement"/>
-  <int value="139" label="SVGAnimateColorElement"/>
-  <int value="140" label="InsertAdjacentText"/>
-  <int value="141" label="InsertAdjacentElement"/>
-  <int value="142" label="HasAttributes"/>
-  <int value="143" label="DOMSubtreeModifiedEvent"/>
-  <int value="144" label="DOMNodeInsertedEvent"/>
-  <int value="145" label="DOMNodeRemovedEvent"/>
-  <int value="146" label="DOMNodeRemovedFromDocumentEvent"/>
-  <int value="147" label="DOMNodeInsertedIntoDocumentEvent"/>
-  <int value="148" label="DOMCharacterDataModifiedEvent"/>
-  <int value="149" label="DocumentAllTags"/>
-  <int value="150" label="DocumentAllLegacyCall"/>
-  <int value="151" label="HTMLAppletElementLegacyCall"/>
-  <int value="152" label="HTMLEmbedElementLegacyCall"/>
-  <int value="153" label="HTMLObjectElementLegacyCall"/>
-  <int value="154" label="BeforeLoadEvent"/>
-  <int value="155" label="GetMatchedCSSRules"/>
-  <int value="156" label="SVGFontInCSS"/>
-  <int value="157" label="ScrollTopBodyNotQuirksMode"/>
-  <int value="158" label="ScrollLeftBodyNotQuirksMode"/>
-  <int value="159" label="AttributeIsId"/>
-  <int value="160" label="AttributeOwnerElement"/>
-  <int value="161" label="AttributeSetPrefix"/>
-  <int value="162" label="AttributeSpecified"/>
-  <int value="163" label="BeforeLoadEventInIsolatedWorld"/>
-  <int value="164" label="PrefixedAudioDecodedByteCount"/>
-  <int value="165" label="PrefixedVideoDecodedByteCount"/>
-  <int value="166" label="PrefixedVideoSupportsFullscreen"/>
-  <int value="167" label="PrefixedVideoDisplayingFullscreen"/>
-  <int value="168" label="PrefixedVideoEnterFullscreen"/>
-  <int value="169" label="PrefixedVideoExitFullscreen"/>
-  <int value="170" label="PrefixedVideoEnterFullScreen"/>
-  <int value="171" label="PrefixedVideoExitFullScreen"/>
-  <int value="172" label="PrefixedVideoDecodedFrameCount"/>
-  <int value="173" label="PrefixedVideoDroppedFrameCount"/>
-  <int value="174" label="SourceElementCandidate"/>
-  <int value="175" label="SourceElementNonMatchingMedia"/>
-  <int value="176" label="PrefixedElementRequestFullscreen"/>
-  <int value="177" label="PrefixedElementRequestFullScreen"/>
-  <int value="178" label="BarPropLocationbar"/>
-  <int value="179" label="BarPropMenubar"/>
-  <int value="180" label="BarPropPersonalbar"/>
-  <int value="181" label="BarPropScrollbars"/>
-  <int value="182" label="BarPropStatusbar"/>
-  <int value="183" label="BarPropToolbar"/>
-  <int value="184" label="InputTypeEmailMultiple"/>
-  <int value="185" label="InputTypeEmailMaxLength"/>
-  <int value="186" label="InputTypeEmailMultipleMaxLength"/>
-  <int value="187" label="TextTrackCueConstructor"/>
-  <int value="188" label="CSSStyleDeclarationPropertyName"/>
-  <int value="189" label="CSSStyleDeclarationFloatPropertyName"/>
-  <int value="190" label="InputTypeText"/>
-  <int value="191" label="InputTypeTextMaxLength"/>
-  <int value="192" label="InputTypePassword"/>
-  <int value="193" label="InputTypePasswordMaxLength"/>
-  <int value="194" label="SVGInstanceRoot"/>
-  <int value="195" label="ShowModalDialog"/>
-  <int value="196" label="PrefixedPageVisibility"/>
-  <int value="197" label="HTMLFrameElementLocation"/>
-  <int value="198" label="CSSStyleSheetInsertRuleOptionalArg"/>
-  <int value="199" label="CSSWebkitRegionAtRule"/>
-  <int value="200" label="DocumentBeforeUnloadRegistered"/>
-  <int value="201" label="DocumentBeforeUnloadFired"/>
-  <int value="202" label="DocumentUnloadRegistered"/>
-  <int value="203" label="DocumentUnloadFired"/>
-  <int value="204" label="SVGLocatableNearestViewportElement"/>
-  <int value="205" label="SVGLocatableFarthestViewportElement"/>
-  <int value="206" label="IsIndexElement"/>
-  <int value="207" label="HTMLHeadElementProfile"/>
-  <int value="208" label="OverflowChangedEvent"/>
-  <int value="209" label="SVGPointMatrixTransform"/>
-  <int value="210" label="HTMLHtmlElementManifest"/>
-  <int value="211" label="DOMFocusInOutEvent"/>
-  <int value="212" label="FileGetLastModifiedDate"/>
-  <int value="213" label="HTMLElementInnerText"/>
-  <int value="214" label="HTMLElementOuterText"/>
-  <int value="215" label="ReplaceDocumentViaJavaScriptURL"/>
-  <int value="216" label="ElementSetAttributeNodeNS"/>
-  <int value="217" label="ElementPrefixedMatchesSelector"/>
-  <int value="218" label="DOMImplementationCreateCSSStyleSheet"/>
-  <int value="219" label="CSSStyleSheetRules"/>
-  <int value="220" label="CSSStyleSheetAddRule"/>
-  <int value="221" label="CSSStyleSheetRemoveRule"/>
-  <int value="222" label="InitMessageEvent"/>
-  <int value="223" label="PrefixedInitMessageEvent"/>
-  <int value="224" label="ElementSetPrefix"/>
-  <int value="225" label="CSSStyleDeclarationGetPropertyCSSValue"/>
-  <int value="226" label="SVGElementGetPresentationAttribute"/>
-  <int value="227" label="REMOVEDAttrUsedAsNodeParameter"/>
-  <int value="228" label="REMOVEDAttrUsedAsNodeReceiver"/>
-  <int value="229" label="PrefixedMediaCancelKeyRequest"/>
-  <int value="230" label="DOMImplementationHasFeature"/>
-  <int value="231" label="DOMImplementationHasFeatureReturnFalse"/>
-  <int value="232" label="CanPlayTypeKeySystem"/>
-  <int value="233" label="PrefixedDevicePixelRatioMediaFeature"/>
-  <int value="234" label="PrefixedMaxDevicePixelRatioMediaFeature"/>
-  <int value="235" label="PrefixedMinDevicePixelRatioMediaFeature"/>
-  <int value="236" label="PrefixedTransform2dMediaFeature"/>
-  <int value="237" label="PrefixedTransform3dMediaFeature"/>
-  <int value="238" label="PrefixedAnimationMediaFeature"/>
-  <int value="239" label="PrefixedViewModeMediaFeature"/>
-  <int value="240" label="PrefixedStorageQuota"/>
-  <int value="241" label="ContentSecurityPolicyReportOnlyInMeta"/>
-  <int value="242" label="PrefixedMediaSourceOpen"/>
-  <int value="243" label="ResetReferrerPolicy"/>
-  <int value="244" label="CaseInsensitiveAttrSelectorMatch"/>
-  <int value="245" label="CaptureAttributeAsBoolean"/>
-  <int value="246" label="FormNameAccessForImageElement"/>
-  <int value="247" label="FormNameAccessForPastNamesMap"/>
-  <int value="248" label="FormAssociationByParser"/>
-  <int value="249" label="HTMLSourceElementMedia"/>
-  <int value="250" label="SVGSVGElementInDocument"/>
-  <int value="251" label="SVGDocumentRootElement"/>
-  <int value="252" label="DocumentCreateEventOptionalArgument"/>
-  <int value="253" label="MediaErrorEncrypted"/>
-  <int value="254" label="EventSourceURL"/>
-  <int value="255" label="WebSocketURL"/>
-  <int value="256" label="UnsafeEvalBlocksCSSOM"/>
-  <int value="257" label="WorkerSubjectToCSP"/>
-  <int value="258" label="WorkerAllowedByChildBlockedByScript"/>
-  <int value="259" label="HTMLMediaElementControllerNotNull"/>
-  <int value="260" label="DeprecatedWebKitGradient"/>
-  <int value="261" label="DeprecatedWebKitLinearGradient"/>
-  <int value="262" label="DeprecatedWebKitRepeatingLinearGradient"/>
-  <int value="263" label="DeprecatedWebKitRadialGradient"/>
-  <int value="264" label="DeprecatedWebKitRepeatingRadialGradient"/>
-  <int value="265" label="PrefixedGetImageDataHD"/>
-  <int value="266" label="PrefixedPutImageDataHD"/>
-  <int value="267" label="PrefixedImageSmoothingEnabled (obsolete)"/>
-  <int value="268" label="UnprefixedImageSmoothingEnabled"/>
-  <int value="269" label="ShadowRootApplyAuthorStyles"/>
-  <int value="270" label="PromiseConstructor"/>
-  <int value="271" label="PromiseCast"/>
-  <int value="272" label="PromiseReject"/>
-  <int value="273" label="PromiseResolve"/>
-  <int value="274" label="TextAutosizing"/>
-  <int value="275" label="TextAutosizingLayout"/>
-  <int value="276" label="HTMLAnchorElementPingAttribute"/>
-  <int value="277" label="JavascriptExhaustedMemory"/>
-  <int value="278" label="InsertAdjacentHTML"/>
-  <int value="279" label="SVGClassName"/>
-  <int value="280" label="HTMLAppletElement"/>
-  <int value="281" label="HTMLMediaElementSeekToFragmentStart"/>
-  <int value="282" label="HTMLMediaElementPauseAtFragmentEnd"/>
-  <int value="283" label="PrefixedWindowURL"/>
-  <int value="284" label="PrefixedWorkerURL"/>
-  <int value="285" label="WindowOrientation"/>
-  <int value="286" label="DOMStringListContains"/>
-  <int value="287" label="DocumentCaptureEvents"/>
-  <int value="288" label="DocumentReleaseEvents"/>
-  <int value="289" label="WindowCaptureEvents"/>
-  <int value="290" label="WindowReleaseEvents"/>
-  <int value="291" label="PrefixedGamepad"/>
-  <int value="292" label="ElementAnimateKeyframeListEffectObjectTiming"/>
-  <int value="293" label="ElementAnimateKeyframeListEffectDoubleTiming"/>
-  <int value="294" label="ElementAnimateKeyframeListEffectNoTiming"/>
-  <int value="295" label="DocumentXPathCreateExpression"/>
-  <int value="296" label="DocumentXPathCreateNSResolver"/>
-  <int value="297" label="DocumentXPathEvaluate"/>
-  <int value="298" label="AttrGetValue"/>
-  <int value="299" label="AttrSetValue"/>
-  <int value="300" label="AnimationConstructorKeyframeListEffectObjectTiming"/>
-  <int value="301" label="AnimationConstructorKeyframeListEffectDoubleTiming"/>
-  <int value="302" label="AnimationConstructorKeyframeListEffectNoTiming"/>
-  <int value="303" label="AttrSetValueWithElement"/>
-  <int value="304" label="PrefixedCancelAnimationFrame"/>
-  <int value="305" label="PrefixedCancelRequestAnimationFrame"/>
-  <int value="306" label="NamedNodeMapGetNamedItem"/>
-  <int value="307" label="NamedNodeMapSetNamedItem"/>
-  <int value="308" label="NamedNodeMapRemoveNamedItem"/>
-  <int value="309" label="NamedNodeMapItem"/>
-  <int value="310" label="NamedNodeMapGetNamedItemNS"/>
-  <int value="311" label="NamedNodeMapSetNamedItemNS"/>
-  <int value="312" label="NamedNodeMapRemoveNamedItemNS"/>
-  <int value="313" label="OpenWebDatabaseInWorker"/>
-  <int value="314" label="OpenWebDatabaseSyncInWorker"/>
-  <int value="315" label="PrefixedAllowFullscreenAttribute"/>
-  <int value="316" label="XHRProgressEventPosition"/>
-  <int value="317" label="XHRProgressEventTotalSize"/>
-  <int value="318" label="PrefixedDocumentIsFullscreen"/>
-  <int value="319" label="PrefixedDocumentFullScreenKeyboardInputAllowed"/>
-  <int value="320" label="PrefixedDocumentCurrentFullScreenElement"/>
-  <int value="321" label="PrefixedDocumentCancelFullScreen"/>
-  <int value="322" label="PrefixedDocumentFullscreenEnabled"/>
-  <int value="323" label="PrefixedDocumentFullscreenElement"/>
-  <int value="324" label="PrefixedDocumentExitFullscreen"/>
-  <int value="325" label="SVGForeignObjectElement"/>
-  <int value="326" label="PrefixedElementRequestPointerLock"/>
-  <int value="327" label="SelectionSetPosition"/>
-  <int value="328" label="AnimationFinishEvent"/>
-  <int value="329" label="SVGSVGElementInXMLDocument"/>
-  <int value="330" label="CanvasRenderingContext2DSetAlpha"/>
-  <int value="331" label="CanvasRenderingContext2DSetCompositeOperation"/>
-  <int value="332" label="CanvasRenderingContext2DSetLineWidth"/>
-  <int value="333" label="CanvasRenderingContext2DSetLineCap"/>
-  <int value="334" label="CanvasRenderingContext2DSetLineJoin"/>
-  <int value="335" label="CanvasRenderingContext2DSetMiterLimit"/>
-  <int value="336" label="CanvasRenderingContext2DClearShadow"/>
-  <int value="337" label="CanvasRenderingContext2DSetStrokeColor"/>
-  <int value="338" label="CanvasRenderingContext2DSetFillColor"/>
-  <int value="339" label="CanvasRenderingContext2DDrawImageFromRect"/>
-  <int value="340" label="CanvasRenderingContext2DSetShadow"/>
-  <int value="341" label="PrefixedPerformanceClearResourceTimings"/>
-  <int value="342" label="PrefixedPerformanceSetResourceTimingBufferSize"/>
-  <int value="343" label="EventSrcElement"/>
-  <int value="344" label="EventCancelBubble"/>
-  <int value="345" label="EventPath"/>
-  <int value="346" label="EventClipboardData"/>
-  <int value="347" label="NodeIteratorDetach"/>
-  <int value="348" label="AttrNodeValue"/>
-  <int value="349" label="AttrTextContent"/>
-  <int value="350" label="EventGetReturnValueTrue"/>
-  <int value="351" label="EventGetReturnValueFalse"/>
-  <int value="352" label="EventSetReturnValueTrue"/>
-  <int value="353" label="EventSetReturnValueFalse"/>
-  <int value="354" label="NodeIteratorExpandEntityReferences"/>
-  <int value="355" label="TreeWalkerExpandEntityReferences"/>
-  <int value="356" label="WindowOffscreenBuffering"/>
-  <int value="357" label="WindowDefaultStatus"/>
-  <int value="358" label="WindowDefaultstatus"/>
-  <int value="359" label="PrefixedConvertPointFromPageToNode"/>
-  <int value="360" label="PrefixedConvertPointFromNodeToPage"/>
-  <int value="361" label="PrefixedTransitionEventConstructor"/>
-  <int value="362" label="PrefixedMutationObserverConstructor"/>
-  <int value="363" label="PrefixedIDBCursorConstructor"/>
-  <int value="364" label="PrefixedIDBDatabaseConstructor"/>
-  <int value="365" label="PrefixedIDBFactoryConstructor"/>
-  <int value="366" label="PrefixedIDBIndexConstructor"/>
-  <int value="367" label="PrefixedIDBKeyRangeConstructor"/>
-  <int value="368" label="PrefixedIDBObjectStoreConstructor"/>
-  <int value="369" label="PrefixedIDBRequestConstructor"/>
-  <int value="370" label="PrefixedIDBTransactionConstructor"/>
-  <int value="371" label="NotificationPermission"/>
-  <int value="372" label="RangeDetach"/>
-  <int value="373" label="DocumentImportNodeOptionalArgument"/>
-  <int value="374" label="HTMLTableElementVspace"/>
-  <int value="375" label="HTMLTableElementHspace"/>
-  <int value="376" label="PrefixedDocumentExitPointerLock"/>
-  <int value="377" label="PrefixedDocumentPointerLockElement"/>
-  <int value="378" label="PrefixedTouchRadiusX"/>
-  <int value="379" label="PrefixedTouchRadiusY"/>
-  <int value="380" label="PrefixedTouchRotationAngle"/>
-  <int value="381" label="PrefixedTouchForce"/>
-  <int value="382" label="PrefixedMouseEventMovementX"/>
-  <int value="383" label="PrefixedMouseEventMovementY"/>
-  <int value="384" label="PrefixedWheelEventDirectionInvertedFromDevice"/>
-  <int value="385" label="PrefixedWheelEventInit"/>
-  <int value="386" label="PrefixedFileRelativePath"/>
-  <int value="387" label="DocumentCaretRangeFromPoint"/>
-  <int value="388" label="DocumentGetCSSCanvasContext"/>
-  <int value="389" label="ElementScrollIntoViewIfNeeded"/>
-  <int value="390" label="ElementScrollByLines"/>
-  <int value="391" label="ElementScrollByPages"/>
-  <int value="392" label="RangeCompareNode"/>
-  <int value="393" label="RangeExpand"/>
-  <int value="394" label="HTMLFrameElementWidth"/>
-  <int value="395" label="HTMLFrameElementHeight"/>
-  <int value="396" label="HTMLImageElementX"/>
-  <int value="397" label="HTMLImageElementY"/>
-  <int value="398" label="HTMLOptionsCollectionRemoveElement"/>
-  <int value="399" label="HTMLPreElementWrap"/>
-  <int value="400" label="SelectionBaseNode"/>
-  <int value="401" label="SelectionBaseOffset"/>
-  <int value="402" label="SelectionExtentNode"/>
-  <int value="403" label="SelectionExtentOffset"/>
-  <int value="404" label="SelectionType"/>
-  <int value="405" label="SelectionModify"/>
-  <int value="406" label="SelectionSetBaseAndExtent"/>
-  <int value="407" label="SelectionEmpty"/>
-  <int value="408" label="SVGFEMorphologyElementSetRadius"/>
-  <int value="409" label="VTTCue"/>
-  <int value="410" label="VTTCueRender"/>
-  <int value="411" label="VTTCueRenderVertical"/>
-  <int value="412" label="VTTCueRenderSnapToLinesFalse"/>
-  <int value="413" label="VTTCueRenderLineNotAuto"/>
-  <int value="414" label="VTTCueRenderPositionNot50"/>
-  <int value="415" label="VTTCueRenderSizeNot100"/>
-  <int value="416" label="VTTCueRenderAlignNotCenter"/>
-  <int value="417" label="ElementRequestPointerLock"/>
-  <int value="418" label="VTTCueRenderRtl"/>
-  <int value="419" label="PostMessageFromSecureToInsecure"/>
-  <int value="420" label="PostMessageFromInsecureToSecure"/>
-  <int value="421" label="DocumentExitPointerLock"/>
-  <int value="422" label="DocumentPointerLockElement"/>
-  <int value="423" label="MixedContentFont"/>
-  <int value="424" label="PrefixedCursorZoomIn"/>
-  <int value="425" label="PrefixedCursorZoomOut"/>
-  <int value="426" label="CSSCharsetRuleEncoding"/>
-  <int value="427" label="DocumentSetCharset"/>
-  <int value="428" label="DocumentDefaultCharset"/>
-  <int value="429" label="TextEncoderConstructor"/>
-  <int value="430" label="TextEncoderEncode"/>
-  <int value="431" label="TextDecoderConstructor"/>
-  <int value="432" label="TextDecoderDecode"/>
-  <int value="433" label="FocusInOutEvent"/>
-  <int value="434" label="MouseEventMovementX"/>
-  <int value="435" label="MouseEventMovementY"/>
-  <int value="436" label="MixedContentTextTrack"/>
-  <int value="437" label="MixedContentRaw"/>
-  <int value="438" label="MixedContentImage"/>
-  <int value="439" label="MixedContentMedia"/>
-  <int value="440" label="DocumentFonts"/>
-  <int value="441" label="MixedContentFormsSubmitted"/>
-  <int value="442" label="FormsSubmitted"/>
-  <int value="443" label="TextInputEventOnInputObsolete"/>
-  <int value="444" label="TextInputEventOnTextAreaObsolete"/>
-  <int value="445" label="TextInputEventOnContentEditableObsolete"/>
-  <int value="446" label="TextInputEventOnNotNodeObsolete"/>
-  <int value="447" label="WebkitBeforeTextInsertedOnInputObsolete"/>
-  <int value="448" label="WebkitBeforeTextInsertedOnTextAreaObsolete"/>
-  <int value="449" label="WebkitBeforeTextInsertedOnContentEditableObsolete"/>
-  <int value="450" label="WebkitBeforeTextInsertedOnNotNodeObsolete"/>
-  <int value="451" label="WebkitEditableContentChangedOnInputObsolete"/>
-  <int value="452" label="WebkitEditableContentChangedOnTextAreaObsolete"/>
-  <int value="453"
-      label="WebkitEditableContentChangedOnContentEditableObsolete"/>
-  <int value="454" label="WebkitEditableContentChangedOnNotNodeObsolete"/>
-  <int value="455" label="HTMLImports"/>
-  <int value="456" label="ElementCreateShadowRoot"/>
-  <int value="457" label="DocumentRegisterElement"/>
-  <int value="458" label="EditingAppleInterchangeNewline"/>
-  <int value="459" label="EditingAppleConvertedSpace"/>
-  <int value="460" label="EditingApplePasteAsQuotation"/>
-  <int value="461" label="EditingAppleStyleSpanClass"/>
-  <int value="462" label="EditingAppleTabSpanClass"/>
-  <int value="463" label="HTMLImportsAsyncAttribute"/>
-  <int value="464" label="FontFaceSetReady"/>
-  <int value="465" label="XMLHttpRequestSynchronous"/>
-  <int value="466" label="CSSSelectorPseudoUnresolved"/>
-  <int value="467" label="CSSSelectorPseudoShadow"/>
-  <int value="468" label="CSSSelectorPseudoContent"/>
-  <int value="469" label="CSSSelectorPseudoHost"/>
-  <int value="470" label="CSSSelectorPseudoHostContext"/>
-  <int value="471" label="CSSDeepCombinator"/>
-  <int value="472" label="SyncXHRWithCredentials"/>
-  <int value="473" label="UseAsm"/>
-  <int value="474" label="KeyEventNotAllowedInFullScreen"/>
-  <int value="475" label="DOMWindowOpen"/>
-  <int value="476" label="DOMWindowOpenFeatures"/>
-  <int value="477" label="LegacyFullScreenErrorExemption"/>
-  <int value="478" label="MediaStreamTrackGetSources"/>
-  <int value="479" label="AspectRatioFlexItem"/>
-  <int value="480" label="DetailsElement"/>
-  <int value="481" label="DialogElement"/>
-  <int value="482" label="MapElement"/>
-  <int value="483" label="MeterElement"/>
-  <int value="484" label="ProgressElement"/>
-  <int value="485" label="VideoFullscreenAllowedExemption"/>
-  <int value="488" label="WebKitPoint"/>
-  <int value="489" label="HTMLPreElementWidth"/>
-  <int value="490" label="OBSOLETE_PrefixedHTMLElementDropzone"/>
-  <int value="491" label="WheelEventWheelDeltaX"/>
-  <int value="492" label="WheelEventWheelDeltaY"/>
-  <int value="493" label="WheelEventWheelDelta"/>
-  <int value="494" label="SendBeacon"/>
-  <int value="495" label="SendBeaconQuotaExceeded"/>
-  <int value="501" label="SVGSMILElementInDocument"/>
-  <int value="502" label="MouseEventOffsetX"/>
-  <int value="503" label="MouseEventOffsetY"/>
-  <int value="504" label="MouseEventX"/>
-  <int value="505" label="MouseEventY"/>
-  <int value="506" label="MouseEventFromElement"/>
-  <int value="507" label="MouseEventToElement"/>
-  <int value="508" label="RequestFileSystem"/>
-  <int value="509" label="RequestFileSystemWorker"/>
-  <int value="510" label="RequestFileSystemSyncWorker"/>
-  <int value="511" label="UIEventLayerX"/>
-  <int value="512" label="UIEventLayerY"/>
-  <int value="513" label="UIEventPageX"/>
-  <int value="514" label="UIEventPageY"/>
-  <int value="515" label="BgPropertiesFixed"/>
-  <int value="516" label="HTMLImageElementComposite"/>
-  <int value="517" label="DevToolsConsoleTimeline"/>
-  <int value="518" label="DevToolsConsoleProfile"/>
-  <int value="519" label="SVGStyleElementTitle"/>
-  <int value="520" label="PictureSourceSrc"/>
-  <int value="521" label="Picture"/>
-  <int value="522" label="Sizes"/>
-  <int value="523" label="SrcsetXDescriptor"/>
-  <int value="524" label="SrcsetWDescriptor"/>
-  <int value="525" label="SelectionContainsNode"/>
-  <int value="526" label="MediaStreamEnded"/>
-  <int value="527" label="MixedContentPrivateIPInPublicWebsitePassive"/>
-  <int value="528" label="MixedContentPrivateIPInPublicWebsiteActive"/>
-  <int value="529" label="XMLExternalResourceLoad"/>
-  <int value="530" label="MixedContentPrivateHostnameInPublicHostname"/>
-  <int value="531" label="LegacyProtocolEmbeddedAsSubresource"/>
-  <int value="532" label="RequestedSubresourceWithEmbeddedCredentials"/>
-  <int value="533" label="NotificationCreated"/>
-  <int value="534" label="NotificationClosed"/>
-  <int value="535" label="NotificationPermissionRequested"/>
-  <int value="536" label="MediaStreamLabel"/>
-  <int value="537" label="MediaStreamStop"/>
-  <int value="538" label="ConsoleTimeline"/>
-  <int value="539" label="ConsoleTimelineEnd"/>
-  <int value="540" label="SRIElementWithMatchingIntegrityAttribute"/>
-  <int value="541" label="SRIElementWithNonMatchingIntegrityAttribute"/>
-  <int value="542" label="SRIElementWithUnparsableIntegrityAttribute"/>
-  <int value="543" label="SRIElementWithIntegrityAttributeAndInsecureOrigin"/>
-  <int value="544" label="SRIElementWithIntegrityAttributeAndInsecureResource"/>
-  <int value="545" label="V8Animation_StartTime_AttributeGetter"/>
-  <int value="546" label="V8Animation_StartTime_AttributeSetter"/>
-  <int value="547" label="V8Animation_CurrentTime_AttributeGetter"/>
-  <int value="548" label="V8Animation_CurrentTime_AttributeSetter"/>
-  <int value="549" label="V8Animation_PlaybackRate_AttributeGetter"/>
-  <int value="550" label="V8Animation_PlaybackRate_AttributeSetter"/>
-  <int value="551" label="V8Animation_PlayState_AttributeGetter"/>
-  <int value="552" label="V8Animation_Finish_Method"/>
-  <int value="553" label="V8Animation_Play_Method"/>
-  <int value="554" label="V8Animation_Pause_Method"/>
-  <int value="555" label="V8Animation_Reverse_Method"/>
-  <int value="556" label="BreakIterator"/>
-  <int value="557" label="ScreenOrientationAngle"/>
-  <int value="558" label="ScreenOrientationType"/>
-  <int value="559" label="ScreenOrientationLock"/>
-  <int value="560" label="ScreenOrientationUnlock"/>
-  <int value="561" label="GeolocationSecureOrigin"/>
-  <int value="562" label="GeolocationInsecureOrigin"/>
-  <int value="563" label="NotificationSecureOrigin"/>
-  <int value="564" label="NotificationInsecureOrigin"/>
-  <int value="565" label="NotificationShowEvent"/>
-  <int value="566" label="CSSXGetComputedStyleQueries"/>
-  <int value="567" label="SVG1DOM"/>
-  <int value="568" label="SVGPathSegDOM"/>
-  <int value="569" label="SVGTransformListConsolidate"/>
-  <int value="570" label="SVGAnimatedTransformListBaseVal"/>
-  <int value="571" label="QuotedAnimationName"/>
-  <int value="572" label="QuotedKeyframesRule"/>
-  <int value="573" label="SrcsetDroppedCandidate"/>
-  <int value="574" label="WindowPostMessage"/>
-  <int value="575" label="WindowPostMessageWithLegacyTargetOriginArgument"/>
-  <int value="576" label="RenderRuby"/>
-  <int value="577" label="CanvasRenderingContext2DCompositeOperationDarker"/>
-  <int value="578" label="ScriptElementWithInvalidTypeHasSrc"/>
-  <int value="579" label="TimelineStart"/>
-  <int value="580" label="ElementBaseURIFromXMLBase"/>
-  <int value="581"
-      label="XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload"/>
-  <int value="582" label="CSSSelectorPseudoScrollbar"/>
-  <int value="583" label="CSSSelectorPseudoScrollbarButton"/>
-  <int value="584" label="CSSSelectorPseudoScrollbarThumb"/>
-  <int value="585" label="CSSSelectorPseudoScrollbarTrack"/>
-  <int value="586" label="CSSSelectorPseudoScrollbarTrackPiece"/>
-  <int value="587" label="LangAttribute"/>
-  <int value="588" label="LangAttributeOnHTML"/>
-  <int value="589" label="LangAttributeOnBody"/>
-  <int value="590" label="LangAttributeDoesNotMatchToUILocale"/>
-  <int value="591" label="InputTypeSubmit"/>
-  <int value="592" label="InputTypeSubmitWithValue"/>
-  <int value="593" label="SetReferrerPolicy"/>
-  <int value="594" label="DOMImplementationHasFeatureReturnFalseInternal"/>
-  <int value="595" label="MouseEventWhich"/>
-  <int value="596" label="UIEventCharCode"/>
-  <int value="597" label="UIEventKeyCode"/>
-  <int value="598" label="UIEventWhich"/>
-  <int value="599" label="TextWholeText"/>
-  <int value="600" label="AttrChildAccess"/>
-  <int value="601" label="AttrChildChange"/>
-  <int value="602" label="DocumentGetOverrideStyle"/>
-  <int value="603" label="NotificationCloseEvent"/>
-  <int value="604" label="CSSKeyframesRuleAppendRule"/>
-  <int value="605" label="CSSKeyframesRuleInsertRule"/>
-  <int value="606" label="StyleMedia"/>
-  <int value="607" label="StyleMediaType"/>
-  <int value="608" label="StyleMediaMatchMedium"/>
-  <int value="609" label="MixedContentPresent"/>
-  <int value="610" label="MixedContentBlockable"/>
-  <int value="611" label="MixedContentAudio"/>
-  <int value="612" label="MixedContentDownload"/>
-  <int value="613" label="MixedContentFavicon"/>
-  <int value="614" label="MixedContentImage"/>
-  <int value="615" label="MixedContentInternal"/>
-  <int value="616" label="MixedContentPlugin"/>
-  <int value="617" label="MixedContentPrefetch"/>
-  <int value="618" label="MixedContentVideo"/>
-  <int value="619" label="CORSCredentialedNullOriginAccessAllowed"/>
-  <int value="620" label="AudioListenerDopplerFactor"/>
-  <int value="621" label="AudioListenerSpeedOfSound"/>
-  <int value="622" label="AudioListenerSetVelocity"/>
-  <int value="623" label="ShadowRootGetElementsByClassName"/>
-  <int value="624" label="ShadowRootGetElementsByTagName"/>
-  <int value="625" label="ShadowRootGetElementsByTagNameNS"/>
-  <int value="626" label="SVGSMILAnimationInImage"/>
-  <int value="627" label="CSSSelectorPseudoFullScreenDocument"/>
-  <int value="628" label="CSSSelectorPseudoFullScreenAncestor"/>
-  <int value="629" label="CSSSelectorPseudoFullScreen"/>
-  <int value="630" label="WebKitCSSMatrix"/>
-  <int value="631" label="AudioContextCreateAnalyser"/>
-  <int value="632" label="AudioContextCreateBiquadFilter"/>
-  <int value="633" label="AudioContextCreateBufferSource"/>
-  <int value="634" label="AudioContextCreateChannelMerger"/>
-  <int value="635" label="AudioContextCreateChannelSplitter"/>
-  <int value="636" label="AudioContextCreateConvolver"/>
-  <int value="637" label="AudioContextCreateDelay"/>
-  <int value="638" label="AudioContextCreateDynamicsCompressor"/>
-  <int value="639" label="AudioContextCreateGain"/>
-  <int value="640" label="AudioContextCreateMediaElementSource"/>
-  <int value="641" label="AudioContextCreateMediaStreamDestination"/>
-  <int value="642" label="AudioContextCreateMediaStreamSource"/>
-  <int value="643" label="AudioContextCreateOscillator"/>
-  <int value="644" label="AudioContextCreatePanner"/>
-  <int value="645" label="AudioContextCreatePeriodicWave"/>
-  <int value="646" label="AudioContextCreateScriptProcessor"/>
-  <int value="647" label="AudioContextCreateStereoPanner"/>
-  <int value="648" label="AudioContextCreateWaveShaper"/>
-  <int value="649" label="AudioContextDecodeAudioData"/>
-  <int value="650" label="AudioContextResume"/>
-  <int value="651" label="AudioContextSuspend"/>
-  <int value="652" label="OBSOLETE_AudioContext"/>
-  <int value="653" label="OBSOLETE_OfflineAudioContext"/>
-  <int value="654" label="OBSOLETE_PrefixedAudioContext"/>
-  <int value="655" label="OBSOLETE_PrefixedOfflineAudioContext"/>
-  <int value="656" label="AddEventListenerNoArguments"/>
-  <int value="657" label="AddEventListenerOneArgument"/>
-  <int value="658" label="RemoveEventListenerNoArguments"/>
-  <int value="659" label="RemoveEventListenerOneArgument"/>
-  <int value="660" label="SRIElementWithNonMatchingIntegrityType"/>
-  <int value="661"
-      label="MixedContentInNonHTTPSFrameThatRestrictsMixedContent"/>
-  <int value="662"
-      label="MixedContentInSecureFrameThatDoesNotRestrictMixedContent"/>
-  <int value="663" label="MixedContentWebSocket"/>
-  <int value="664" label="SyntheticKeyframesInCompositedCSSAnimation"/>
-  <int value="665" label="MixedContentFormPresent"/>
-  <int value="666" label="GetUserMediaInsecureOrigin"/>
-  <int value="667" label="GetUserMediaSecureOrigin"/>
-  <int value="668" label="DeviceMotionInsecureOrigin"/>
-  <int value="669" label="DeviceMotionSecureOrigin"/>
-  <int value="670" label="DeviceOrientationInsecureOrigin"/>
-  <int value="671" label="DeviceOrientationSecureOrigin"/>
-  <int value="672" label="SandboxViaIFrame"/>
-  <int value="673" label="SandboxViaCSP"/>
-  <int value="674" label="BlockedSniffingImageToScript"/>
-  <int value="675" label="Fetch"/>
-  <int value="676" label="FetchBodyStream"/>
-  <int value="677" label="XMLHttpRequestAsynchronous"/>
-  <int value="678" label="AudioBufferSourceBufferOnce"/>
-  <int value="679" label="WhiteSpacePreFromXMLSpace"/>
-  <int value="680" label="WhiteSpaceNowrapFromXMLSpace"/>
-  <int value="681" label="SVGElementXmlbase"/>
-  <int value="682" label="SVGElementXmllang"/>
-  <int value="683" label="SVGElementXmlspace"/>
-  <int value="684" label="WindowMoveResizeMissingArguments"/>
-  <int value="685" label="SVGSVGElementForceRedraw"/>
-  <int value="686" label="SVGSVGElementSuspendRedraw"/>
-  <int value="687" label="SVGSVGElementUnsuspendRedraw"/>
-  <int value="688" label="SVGSVGElementUnsuspendRedrawAll"/>
-  <int value="689" label="AudioContextClose"/>
-  <int value="690" label="ServiceWorkerClientPostMessage"/>
-  <int value="691" label="CSSZoomNotEqualToOne"/>
-  <int value="692" label="SVGGraphicsElementGetTransformToElement"/>
-  <int value="693" label="ServiceWorkerClientsGetAll"/>
-  <int value="694" label="ClientRectListItem"/>
-  <int value="695" label="WindowClientInformation"/>
-  <int value="696" label="WindowFind"/>
-  <int value="697" label="WindowScreenLeft"/>
-  <int value="698" label="WindowScreenTop"/>
-  <int value="699" label="V8Animation_Cancel_Method"/>
-  <int value="700" label="V8Animation_Onfinish_AttributeGetter"/>
-  <int value="701" label="V8Animation_Onfinish_AttributeSetter"/>
-  <int value="702" label="ElementOffsetParent"/>
-  <int value="703" label="ElementOffsetTop"/>
-  <int value="704" label="ElementOffsetLeft"/>
-  <int value="705" label="ElementOffsetWidth"/>
-  <int value="706" label="ElementOffsetHeight"/>
-  <int value="707" label="V8Window_WebKitAnimationEvent_ConstructorGetter"/>
-  <int value="708" label="V8Window_WebKitAnimationEvent_AttributeSetter"/>
-  <int value="709" label="ResourceLoadedAfterRedirectWithCSP"/>
-  <int value="710" label="CryptoGetRandomValues"/>
-  <int value="711" label="SubtleCryptoEncrypt"/>
-  <int value="712" label="SubtleCryptoDecrypt"/>
-  <int value="713" label="SubtleCryptoSign"/>
-  <int value="714" label="SubtleCryptoVerify"/>
-  <int value="715" label="SubtleCryptoDigest"/>
-  <int value="716" label="SubtleCryptoGenerateKey"/>
-  <int value="717" label="SubtleCryptoImportKey"/>
-  <int value="718" label="SubtleCryptoExportKey"/>
-  <int value="719" label="SubtleCryptoDeriveBits"/>
-  <int value="720" label="SubtleCryptoDeriveKey"/>
-  <int value="721" label="SubtleCryptoWrapKey"/>
-  <int value="722" label="SubtleCryptoUnwrapKey"/>
-  <int value="723" label="CryptoAlgorithmAesCbc"/>
-  <int value="724" label="CryptoAlgorithmHmac"/>
-  <int value="725" label="CryptoAlgorithmRsaSsaPkcs1v1_5"/>
-  <int value="726" label="CryptoAlgorithmSha1"/>
-  <int value="727" label="CryptoAlgorithmSha256"/>
-  <int value="728" label="CryptoAlgorithmSha384"/>
-  <int value="729" label="CryptoAlgorithmSha512"/>
-  <int value="730" label="CryptoAlgorithmAesGcm"/>
-  <int value="731" label="CryptoAlgorithmRsaOaep"/>
-  <int value="732" label="CryptoAlgorithmAesCtr"/>
-  <int value="733" label="CryptoAlgorithmAesKw"/>
-  <int value="734" label="CryptoAlgorithmRsaPss"/>
-  <int value="735" label="CryptoAlgorithmEcdsa"/>
-  <int value="736" label="CryptoAlgorithmEcdh"/>
-  <int value="737" label="CryptoAlgorithmHkdf"/>
-  <int value="738" label="CryptoAlgorithmPbkdf2"/>
-  <int value="739" label="DocumentSetDomain"/>
-  <int value="740" label="UpgradeInsecureRequestsEnabled"/>
-  <int value="741" label="UpgradeInsecureRequestsUpgradedRequest"/>
-  <int value="742" label="DocumentDesignMode"/>
-  <int value="743" label="GlobalCacheStorage"/>
-  <int value="744" label="NetInfo"/>
-  <int value="745" label="BackgroundSync"/>
-  <int value="746" label="TabStopProperty"/>
-  <int value="747" label="TabStopAttribute"/>
-  <int value="748" label="LegacyConst"/>
-  <int value="749" label="SVGFilterRes"/>
-  <int value="750" label="V8Permissions_Query_Method"/>
-  <int value="751" label="LegacyCSSValueIntrinsic"/>
-  <int value="752" label="LegacyCSSValueMinIntrinsic"/>
-  <int value="753" label="WebkitCanvas"/>
-  <int value="754" label="V8HTMLInputElement_Autocapitalize_AttributeGetter"/>
-  <int value="755" label="V8HTMLInputElement_Autocapitalize_AttributeSetter"/>
-  <int value="756"
-      label="V8HTMLTextAreaElement_Autocapitalize_AttributeGetter"/>
-  <int value="757"
-      label="V8HTMLTextAreaElement_Autocapitalize_AttributeSetter"/>
-  <int value="758" label="SVGHrefBaseVal"/>
-  <int value="759" label="SVGHrefAnimVal"/>
-  <int value="760" label="V8CSSRuleList_Item_Method"/>
-  <int value="761" label="V8MediaList_Item_Method"/>
-  <int value="762" label="V8StyleSheetList_Item_Method"/>
-  <int value="763" label="StyleSheetListAnonymousNamedGetter"/>
-  <int value="764" label="AutocapitalizeAttribute"/>
-  <int value="765" label="FullscreenSecureOrigin"/>
-  <int value="766" label="FullscreenInsecureOrigin"/>
-  <int value="767" label="DialogInSandboxedContext"/>
-  <int value="768" label="SVGSMILAnimationInImageRegardlessOfCache"/>
-  <int value="769" label="PushSubscriptionId"/>
-  <int value="770" label="EncryptedMediaSecureOrigin"/>
-  <int value="771" label="EncryptedMediaInsecureOrigin"/>
-  <int value="772" label="PerformanceFrameTiming"/>
-  <int value="773" label="V8Element_Animate_Method"/>
-  <int value="774"
-      label="V8SVGSVGElement_PixelUnitToMillimeterX_AttributeGetter"/>
-  <int value="775"
-      label="V8SVGSVGElement_PixelUnitToMillimeterY_AttributeGetter"/>
-  <int value="776"
-      label="V8SVGSVGElement_ScreenPixelToMillimeterX_AttributeGetter"/>
-  <int value="777"
-      label="V8SVGSVGElement_ScreenPixelToMillimeterY_AttributeGetter"/>
-  <int value="778" label="V8SVGSVGElement_GetElementById_Method"/>
-  <int value="779" label="ElementCreateShadowRootMultiple"/>
-  <int value="780" label="V8MessageChannel_Constructor"/>
-  <int value="781" label="V8MessagePort_PostMessage_Method"/>
-  <int value="782" label="V8MessagePort_Start_Method"/>
-  <int value="783" label="V8MessagePort_Close_Method"/>
-  <int value="784" label="MessagePortsTransferred"/>
-  <int value="785" label="CSSKeyframesRuleAnonymousIndexedGetter"/>
-  <int value="786" label="V8Screen_AvailLeft_AttributeGetter"/>
-  <int value="787" label="V8Screen_AvailTop_AttributeGetter"/>
-  <int value="788" label="ObjectObserve"/>
-  <int value="789" label="V8SVGAnimationElement_HasExtension_Method"/>
-  <int value="790" label="V8SVGCursorElement_HasExtension_Method"/>
-  <int value="791"
-      label="V8SVGFEConvolveMatrixElement_PreserveAlpha_AttributeGetter"/>
-  <int value="792" label="V8SVGFilterElement_FilterResX_AttributeGetter"/>
-  <int value="793" label="V8SVGFilterElement_FilterResY_AttributeGetter"/>
-  <int value="794" label="V8SVGFilterElement_SetFilterRes_Method"/>
-  <int value="795" label="V8SVGGraphicsElement_HasExtension_Method"/>
-  <int value="796" label="V8SVGMaskElement_HasExtension_Method"/>
-  <int value="797" label="V8SVGPatternElement_HasExtension_Method"/>
-  <int value="798" label="V8SVGStyleElement_Disabled_AttributeGetter"/>
-  <int value="799" label="V8SVGStyleElement_Disabled_AttributeSetter"/>
-  <int value="800"
-      label="ElementCreateShadowRootMultipleWithUserAgentShadowRoot"/>
-  <int value="801" label="InputTypeFileSecureOrigin"/>
-  <int value="802" label="InputTypeFileInsecureOrigin"/>
-  <int value="803" label="V8HashChangeEvent_InitHashChangeEvent_Method"/>
-  <int value="804" label="ElementAttachShadow"/>
-  <int value="805" label="V8KeyboardEvent_KeyIdentifier_AttributeGetter"/>
-  <int value="806"
-      label="V8SecurityPolicyViolationEvent_DocumentURI_AttributeGetter"/>
-  <int value="807"
-      label="V8SecurityPolicyViolationEvent_BlockedURI_AttributeGetter"/>
-  <int value="808"
-      label="V8SecurityPolicyViolationEvent_StatusCode_AttributeGetter"/>
-  <int value="809" label="HTMLLinkElementDisabled"/>
-  <int value="810" label="V8HTMLLinkElement_Disabled_AttributeGetter"/>
-  <int value="811" label="V8HTMLLinkElement_Disabled_AttributeSetter"/>
-  <int value="812" label="V8HTMLStyleElement_Disabled_AttributeGetter"/>
-  <int value="813" label="V8HTMLStyleElement_Disabled_AttributeSetter"/>
-  <int value="814" label="V8FileReader_ReadAsBinaryString_Method"/>
-  <int value="815" label="V8FileReaderSync_ReadAsBinaryString_Method"/>
-  <int value="816" label="V8DOMError_Constructor"/>
-  <int value="817" label="V8DOMError_Name_AttributeGetter"/>
-  <int value="818" label="V8DOMError_Message_AttributeGetter"/>
-  <int value="819" label="V8FileReader_Error_AttributeGetter"/>
-  <int value="820" label="V8IDBRequest_Error_AttributeGetter"/>
-  <int value="821" label="V8IDBTransaction_Error_AttributeGetter"/>
-  <int value="822" label="V8DOMStringList_Item_Method"/>
-  <int value="823" label="V8Location_AncestorOrigins_AttributeGetter"/>
-  <int value="824" label="V8IDBDatabase_ObjectStoreNames_AttributeGetter"/>
-  <int value="825" label="V8IDBObjectStore_IndexNames_AttributeGetter"/>
-  <int value="826" label="V8IDBTransaction_ObjectStoreNames_AttributeGetter"/>
-  <int value="827" label="V8Navigator_GetStorageUpdates_Method"/>
-  <int value="828" label="V8TextTrackCueList_Item_Method"/>
-  <int value="829" label="V8TextTrackList_Item_Method"/>
-  <int value="830" label="TextInputFired"/>
-  <int value="831" label="V8TextEvent_Data_AttributeGetter"/>
-  <int value="832" label="V8TextEvent_InitTextEvent_Method"/>
-  <int value="833" label="V8SVGSVGElement_UseCurrentView_AttributeGetter"/>
-  <int value="834" label="V8SVGSVGElement_CurrentView_AttributeGetter"/>
-  <int value="835" label="ClientHintsDPR"/>
-  <int value="836" label="ClientHintsResourceWidth"/>
-  <int value="837" label="ClientHintsViewportWidth"/>
-  <int value="838" label="SRIElementIntegrityAttributeButIneligible"/>
-  <int value="839" label="FormDataAppendFile"/>
-  <int value="840" label="FormDataAppendFileWithFilename"/>
-  <int value="841" label="FormDataAppendBlob"/>
-  <int value="842" label="FormDataAppendBlobWithFilename"/>
-  <int value="843" label="FormDataAppendNull"/>
-  <int value="844" label="HTMLDocumentCreateAttributeNameNotLowercase"/>
-  <int value="845"
-      label="NonHTMLElementSetAttributeNodeFromHTMLDocumentNameNotLowercase"/>
-  <int value="846" label="DOMStringList_Item_AttributeGetter_IndexedDB"/>
-  <int value="847" label="DOMStringList_Item_AttributeGetter_Location"/>
-  <int value="848" label="DOMStringList_Contains_Method_IndexedDB"/>
-  <int value="849" label="DOMStringList_Contains_Method_Location"/>
-  <int value="850" label="NavigatorVibrate"/>
-  <int value="851" label="NavigatorVibrateSubFrame"/>
-  <int value="852" label="PermissionStatusStatus"/>
-  <int value="853" label="V8XPathEvaluator_Constructor"/>
-  <int value="854" label="V8XPathEvaluator_CreateExpression_Method"/>
-  <int value="855" label="V8XPathEvaluator_CreateNSResolver_Method"/>
-  <int value="856" label="V8XPathEvaluator_Evaluate_Method"/>
-  <int value="857" label="RequestMIDIAccess"/>
-  <int value="858" label="V8MouseEvent_LayerX_AttributeGetter"/>
-  <int value="859" label="V8MouseEvent_LayerY_AttributeGetter"/>
-  <int value="860" label="InnerTextWithShadowTree"/>
-  <int value="861" label="SelectionToStringWithShadowTree"/>
-  <int value="862" label="WindowFindWithShadowTree"/>
-  <int value="863" label="V8CompositionEvent_InitCompositionEvent_Method"/>
-  <int value="864" label="V8CustomEvent_InitCustomEvent_Method"/>
-  <int value="865" label="V8DeviceMotionEvent_InitDeviceMotionEvent_Method"/>
-  <int value="866"
-      label="V8DeviceOrientationEvent_InitDeviceOrientationEvent_Method"/>
-  <int value="867" label="V8Event_InitEvent_Method"/>
-  <int value="868" label="V8KeyboardEvent_InitKeyboardEvent_Method"/>
-  <int value="869" label="V8MouseEvent_InitMouseEvent_Method"/>
-  <int value="870" label="V8MutationEvent_InitMutationEvent_Method"/>
-  <int value="871" label="V8StorageEvent_InitStorageEvent_Method"/>
-  <int value="872" label="V8TouchEvent_InitTouchEvent_Method"/>
-  <int value="873" label="V8UIEvent_InitUIEvent_Method"/>
-  <int value="874" label="V8Document_CreateTouch_Method"/>
-  <int value="875" label="V8HTMLFrameElement_GetSVGDocument_Method"/>
-  <int value="876" label="RequestFileSystemNonWebbyOrigin"/>
-  <int value="877" label="V8Console_Memory_AttributeGetter"/>
-  <int value="878" label="V8Console_Memory_AttributeSetter"/>
-  <int value="879" label="V8MemoryInfo_TotalJSHeapSize_AttributeGetter"/>
-  <int value="880" label="V8MemoryInfo_UsedJSHeapSize_AttributeGetter"/>
-  <int value="881" label="V8MemoryInfo_JSHeapSizeLimit_AttributeGetter"/>
-  <int value="882" label="V8Performance_Timing_AttributeGetter"/>
-  <int value="883" label="V8Performance_Navigation_AttributeGetter"/>
-  <int value="884" label="V8Performance_Memory_AttributeGetter"/>
-  <int value="885" label="V8SharedWorker_WorkerStart_AttributeGetter"/>
-  <int value="886" label="OBSOLETE_HTMLKeygenElement"/>
-  <int value="887" label="V8SVGElement_OffsetParent_AttributeGetter"/>
-  <int value="888" label="V8SVGElement_OffsetTop_AttributeGetter"/>
-  <int value="889" label="V8SVGElement_OffsetLeft_AttributeGetter"/>
-  <int value="890" label="V8SVGElement_OffsetWidth_AttributeGetter"/>
-  <int value="891" label="V8SVGElement_OffsetHeight_AttributeGetter"/>
-  <int value="892" label="HTMLMediaElementPreloadNone"/>
-  <int value="893" label="HTMLMediaElementPreloadMetadata"/>
-  <int value="894" label="HTMLMediaElementPreloadAuto"/>
-  <int value="895" label="HTMLMediaElementPreloadDefault"/>
-  <int value="896" label="MixedContentBlockableAllowed"/>
-  <int value="897" label="PseudoBeforeAfterForInputElement"/>
-  <int value="898" label="V8Permissions_Revoke_Method"/>
-  <int value="899" label="LinkRelDnsPrefetch"/>
-  <int value="900" label="LinkRelPreconnect"/>
-  <int value="901" label="LinkRelPreload"/>
-  <int value="902" label="LinkHeaderDnsPrefetch"/>
-  <int value="903" label="LinkHeaderPreconnect"/>
-  <int value="904" label="ClientHintsMetaAcceptCH"/>
-  <int value="905" label="HTMLElementDeprecatedWidth"/>
-  <int value="906" label="ClientHintsContentDPR"/>
-  <int value="907" label="ElementAttachShadowOpen"/>
-  <int value="908" label="ElementAttachShadowClosed"/>
-  <int value="909" label="AudioParamSetValueAtTime"/>
-  <int value="910" label="AudioParamLinearRampToValueAtTime"/>
-  <int value="911" label="AudioParamExponentialRampToValueAtTime"/>
-  <int value="912" label="AudioParamSetTargetAtTime"/>
-  <int value="913" label="AudioParamSetValueCurveAtTime"/>
-  <int value="914" label="AudioParamCancelScheduledValues"/>
-  <int value="915" label="V8Permissions_Request_Method"/>
-  <int value="916" label="LinkRelSubresource"/>
-  <int value="917" label="LinkRelPrefetch"/>
-  <int value="918" label="LinkRelPrerender"/>
-  <int value="919" label="LinkRelNext"/>
-  <int value="920" label="PrefixedPerformanceResourceTimingBufferFull"/>
-  <int value="921" label="CSSValuePrefixedMinContent"/>
-  <int value="922" label="CSSValuePrefixedMaxContent"/>
-  <int value="923" label="CSSValuePrefixedFitContent"/>
-  <int value="924" label="CSSValuePrefixedFillAvailable"/>
-  <int value="925" label="FetchAPIRequestContext"/>
-  <int value="926" label="PresentationDefaultRequest"/>
-  <int value="927" label="PresentationAvailabilityChangeEventListener"/>
-  <int value="928" label="PresentationRequestConstructor"/>
-  <int value="929" label="PresentationRequestStart"/>
-  <int value="930" label="PresentationRequestReconnect"/>
-  <int value="931" label="PresentationRequestGetAvailability"/>
-  <int value="932" label="PresentationRequestConnectionAvailableEventListener"/>
-  <int value="933" label="PresentationConnectionTerminate"/>
-  <int value="934" label="PresentationConnectionSend"/>
-  <int value="935" label="PresentationConnectionStateChangeEventListener"/>
-  <int value="936" label="PresentationConnectionMessageEventListener"/>
-  <int value="937" label="CSSAnimationsStackedNeutralKeyframe"/>
-  <int value="938" label="ReadingCheckedInClickHandler"/>
-  <int value="939" label="FlexboxIntrinsicSizeAlgorithmIsDifferent"/>
-  <int value="940" label="HTMLImportsHasStyleSheets"/>
-  <int value="941" label="WebkitTextInClipProperty"/>
-  <int value="942" label="WebkitTextInColorProperty"/>
-  <int value="943" label="HeaderValueNotMatchingRFC7230"/>
-  <int value="944" label="ClipPathOfPositionedElement"/>
-  <int value="945" label="ClipCssOfPositionedElement"/>
-  <int value="946" label="NetInfoType"/>
-  <int value="947" label="NetInfoDownlinkMax"/>
-  <int value="948" label="NetInfoOnChange"/>
-  <int value="949" label="NetInfoOnTypeChange"/>
-  <int value="950" label="V8Window_Alert_Method"/>
-  <int value="951" label="V8Window_Confirm_Method"/>
-  <int value="952" label="V8Window_Prompt_Method"/>
-  <int value="953" label="V8Window_Print_Method"/>
-  <int value="954" label="V8Window_RequestIdleCallback_Method"/>
-  <int value="955" label="FlexboxPercentagePaddingVertical"/>
-  <int value="956" label="FlexboxPercentageMarginVertical"/>
-  <int value="957" label="BackspaceNavigatedBack"/>
-  <int value="958" label="BackspaceNavigatedBackAfterFormInteraction"/>
-  <int value="959" label="CSPSourceWildcardWouldMatchExactHost"/>
-  <int value="960" label="CredentialManagerGet"/>
-  <int value="961" label="CredentialManagerGetWithUI"/>
-  <int value="962" label="CredentialManagerGetWithoutUI"/>
-  <int value="963" label="CredentialManagerStore"/>
-  <int value="964" label="CredentialManagerRequireUserMediation"/>
-  <int value="965" label="RequestAutocomplete"/>
-  <int value="966" label="BlockableMixedContentInSubframeBlocked"/>
-  <int value="967" label="AddEventListenerThirdArgumentIsObject"/>
-  <int value="968" label="RemoveEventListenerThirdArgumentIsObject"/>
-  <int value="969" label="CSSAtRuleCharset"/>
-  <int value="970" label="CSSAtRuleFontFace"/>
-  <int value="971" label="CSSAtRuleImport"/>
-  <int value="972" label="CSSAtRuleKeyframes"/>
-  <int value="973" label="CSSAtRuleMedia"/>
-  <int value="974" label="CSSAtRuleNamespace"/>
-  <int value="975" label="CSSAtRulePage"/>
-  <int value="976" label="CSSAtRuleSupports"/>
-  <int value="977" label="CSSAtRuleViewport"/>
-  <int value="978" label="CSSAtRuleWebkitKeyframes"/>
-  <int value="979" label="V8HTMLFieldSetElement_Elements_AttributeGetter"/>
-  <int value="980" label="HTMLMediaElementPreloadForcedNone"/>
-  <int value="981" label="ExternalAddSearchProvider"/>
-  <int value="982" label="ExternalIsSearchProviderInstalled"/>
-  <int value="983" label="V8Permissions_RequestAll_Method"/>
-  <int value="984" label="BluetoothDeviceInstanceId"/>
-  <int value="985" label="HTMLLabelElementFormIDLAttribute"/>
-  <int value="986" label="HTMLLabelElementFormContentAttribute"/>
-  <int value="987" label="DeviceOrientationAbsoluteInsecureOrigin"/>
-  <int value="988" label="DeviceOrientationAbsoluteSecureOrigin"/>
-  <int value="989" label="FontFaceConstructor"/>
-  <int value="990" label="ServiceWorkerControlledPage"/>
-  <int value="991" label="MeterElementWithContinuousCapacityAppearance"/>
-  <int value="992" label="MeterElementWithDiscreteCapacityAppearance"/>
-  <int value="993" label="MeterElementWithMeterAppearance"/>
-  <int value="994" label="MeterElementWithNoneAppearance"/>
-  <int value="995" label="MeterElementWithRatingAppearance"/>
-  <int value="996" label="MeterElementWithRelevancyAppearance"/>
-  <int value="997" label="SelectionAnchorNode"/>
-  <int value="998" label="SelectionAnchorOffset"/>
-  <int value="999" label="SelectionFocusNode"/>
-  <int value="1000" label="SelectionFocusOffset"/>
-  <int value="1001" label="SelectionIsCollapsed"/>
-  <int value="1002" label="SelectionRangeCount"/>
-  <int value="1003" label="SelectionGetRangeAt"/>
-  <int value="1004" label="SelectionAddRange"/>
-  <int value="1005" label="SelectionRemoveAllRanges"/>
-  <int value="1006" label="SelectionCollapse"/>
-  <int value="1007" label="SelectionCollapseToStart"/>
-  <int value="1008" label="SelectionCollapseToEnd"/>
-  <int value="1009" label="SelectionExtend"/>
-  <int value="1010" label="SelectionSelectAllChildren"/>
-  <int value="1011" label="SelectionDeleteDromDocument"/>
-  <int value="1012" label="SelectionDOMString"/>
-  <int value="1013" label="InputTypeRangeVerticalAppearance"/>
-  <int value="1014" label="CSSFilterReference"/>
-  <int value="1015" label="CSSFilterGrayscale"/>
-  <int value="1016" label="CSSFilterSepia"/>
-  <int value="1017" label="CSSFilterSaturate"/>
-  <int value="1018" label="CSSFilterHueRotate"/>
-  <int value="1019" label="CSSFilterInvert"/>
-  <int value="1020" label="CSSFilterOpacity"/>
-  <int value="1021" label="CSSFilterBrightness"/>
-  <int value="1022" label="CSSFilterContrast"/>
-  <int value="1023" label="CSSFilterBlur"/>
-  <int value="1024" label="CSSFilterDropShadow"/>
-  <int value="1025" label="BackgroundSyncRegister"/>
-  <int value="1026" label="BorderImageWithBorderStyleNone"/>
-  <int value="1027" label="ExecCommandOnInputOrTextarea"/>
-  <int value="1028" label="V8History_ScrollRestoration_AttributeGetter"/>
-  <int value="1029" label="V8History_ScrollRestoration_AttributeSetter"/>
-  <int value="1030" label="SVG1DOMFilter"/>
-  <int value="1031" label="OfflineAudioContextStartRendering"/>
-  <int value="1032" label="OfflineAudioContextSuspend"/>
-  <int value="1033" label="OfflineAudioContextResume"/>
-  <int value="1034" label="AttrCloneNode"/>
-  <int value="1035" label="SVG1DOMPaintServer"/>
-  <int value="1036" label="SVGSVGElementFragmentSVGView"/>
-  <int value="1037" label="SVGSVGElementFragmentSVGViewElement"/>
-  <int value="1038" label="PresentationConnectionClose"/>
-  <int value="1039" label="SVG1DOMShape"/>
-  <int value="1040" label="SVG1DOMText"/>
-  <int value="1041" label="RTCPeerConnectionConstructorConstraints"/>
-  <int value="1042" label="RTCPeerConnectionConstructorCompliant"/>
-  <int value="1043"
-      label="RTCPeerConnectionCreateOfferLegacyNoFailureCallback"/>
-  <int value="1044" label="RTCPeerConnectionCreateOfferLegacyFailureCallback"/>
-  <int value="1045" label="RTCPeerConnectionCreateOfferLegacyConstraints"/>
-  <int value="1046" label="RTCPeerConnectionCreateOfferLegacyOfferOptions"/>
-  <int value="1047" label="RTCPeerConnectionCreateOfferLegacyCompliant"/>
-  <int value="1048"
-      label="RTCPeerConnectionCreateAnswerLegacyNoFailureCallback"/>
-  <int value="1049" label="RTCPeerConnectionCreateAnswerLegacyFailureCallback"/>
-  <int value="1050" label="RTCPeerConnectionCreateAnswerLegacyConstraints"/>
-  <int value="1051" label="RTCPeerConnectionCreateAnswerLegacyCompliant"/>
-  <int value="1052"
-      label="RTCPeerConnectionSetLocalDescriptionLegacyNoSuccessCallback"/>
-  <int value="1053"
-      label="RTCPeerConnectionSetLocalDescriptionLegacyNoFailureCallback"/>
-  <int value="1054"
-      label="RTCPeerConnectionSetLocalDescriptionLegacyCompliant"/>
-  <int value="1055"
-      label="RTCPeerConnectionSetRemoteDescriptionLegacyNoSuccessCallback"/>
-  <int value="1056"
-      label="RTCPeerConnectionSetRemoteDescriptionLegacyNoFailureCallback"/>
-  <int value="1057"
-      label="RTCPeerConnectionSetRemoteDescriptionLegacyCompliant"/>
-  <int value="1058" label="RTCPeerConnectionGetStatsLegacyNonCompliant"/>
-  <int value="1059" label="NodeFilterIsFunction"/>
-  <int value="1060" label="NodeFilterIsObject"/>
-  <int value="1061" label="TextEncoderUTF16"/>
-  <int value="1062" label="CSSSelectorInternalPseudoListBox"/>
-  <int value="1063" label="CSSSelectorInternalMediaControlsCastButton"/>
-  <int value="1064" label="CSSSelectorInternalMediaControlsOverlayCastButton"/>
-  <int value="1065" label="CSSSelectorInternalPseudoSpatialNavigationFocus"/>
-  <int value="1066" label="SameOriginTextScript"/>
-  <int value="1067" label="SameOriginApplicationScript"/>
-  <int value="1068" label="SameOriginOtherScript"/>
-  <int value="1069" label="CrossOriginTextScript"/>
-  <int value="1070" label="CrossOriginApplicationScript"/>
-  <int value="1071" label="CrossOriginOtherScript"/>
-  <int value="1072" label="SVG1DOMSVGTests"/>
-  <int value="1073" label="V8SVGViewElement_ViewTarget_AttributeGetter"/>
-  <int value="1074" label="DisableRemotePlaybackAttribute"/>
-  <int value="1075" label="V8SloppyMode"/>
-  <int value="1076" label="V8StrictMode"/>
-  <int value="1077" label="V8StrongMode"/>
-  <int value="1078" label="AudioNodeConnectToAudioNode"/>
-  <int value="1079" label="AudioNodeConnectToAudioParam"/>
-  <int value="1080" label="AudioNodeDisconnectFromAudioNode"/>
-  <int value="1081" label="AudioNodeDisconnectFromAudioParam"/>
-  <int value="1082" label="V8CSSFontFaceRule_Style_AttributeGetter"/>
-  <int value="1083" label="SelectionCollapseNull"/>
-  <int value="1084" label="SelectionSetBaseAndExtentNull"/>
-  <int value="1085" label="V8SVGSVGElement_CreateSVGNumber_Method"/>
-  <int value="1086" label="V8SVGSVGElement_CreateSVGLength_Method"/>
-  <int value="1087" label="V8SVGSVGElement_CreateSVGAngle_Method"/>
-  <int value="1088" label="V8SVGSVGElement_CreateSVGPoint_Method"/>
-  <int value="1089" label="V8SVGSVGElement_CreateSVGMatrix_Method"/>
-  <int value="1090" label="V8SVGSVGElement_CreateSVGRect_Method"/>
-  <int value="1091" label="V8SVGSVGElement_CreateSVGTransform_Method"/>
-  <int value="1092"
-      label="V8SVGSVGElement_CreateSVGTransformFromMatrix_Method"/>
-  <int value="1093" label="FormNameAccessForNonDescendantImageElement"/>
-  <int value="1094" label="FormControlsCollectionNameAccessForImageElement"/>
-  <int value="1095" label="V8SVGSVGElement_Viewport_AttributeGetter"/>
-  <int value="1096" label="V8RegExpPrototypeStickyGetter"/>
-  <int value="1097" label="V8RegExpPrototypeToString"/>
-  <int value="1098"
-      label="V8InputDeviceCapabilities_FiresTouchEvents_AttributeGetter"/>
-  <int value="1099" label="DataElement"/>
-  <int value="1100" label="TimeElement"/>
-  <int value="1101" label="SVG1DOMUriReference"/>
-  <int value="1102" label="SVG1DOMZoomAndPan"/>
-  <int value="1103" label="V8SVGGraphicsElement_Transform_AttributeGetter"/>
-  <int value="1104" label="MenuItemElement"/>
-  <int value="1105" label="MenuItemCloseTag"/>
-  <int value="1106" label="SVG1DOMMarkerElement"/>
-  <int value="1107" label="SVG1DOMUseElement"/>
-  <int value="1108" label="SVG1DOMMaskElement"/>
-  <int value="1109" label="V8SVGAElement_Target_AttributeGetter"/>
-  <int value="1110" label="V8SVGClipPathElement_ClipPathUnits_AttributeGetter"/>
-  <int value="1111" label="SVG1DOMFitToViewBox"/>
-  <int value="1112" label="SVG1DOMCursorElement"/>
-  <int value="1113" label="V8SVGPathElement_PathLength_AttributeGetter"/>
-  <int value="1114" label="SVG1DOMSVGElement"/>
-  <int value="1115" label="SVG1DOMImageElement"/>
-  <int value="1116" label="SVG1DOMForeignObjectElement"/>
-  <int value="1117" label="AudioContextCreateIIRFilter"/>
-  <int value="1118" label="CSSSelectorPseudoSlotted"/>
-  <int value="1119" label="MediaDevicesEnumerateDevices"/>
-  <int value="1120" label="NonSecureSharedWorkerAccessedFromSecureContext"/>
-  <int value="1121" label="SecureSharedWorkerAccessedFromNonSecureContext"/>
-  <int value="1122" label="NonCSSStyleSheetType"/>
-  <int value="1123" label="EventComposedPath"/>
-  <int value="1124" label="LinkHeaderPreload"/>
-  <int value="1125" label="MouseWheelEvent"/>
-  <int value="1126" label="WheelEvent"/>
-  <int value="1127" label="MouseWheelAndWheelEvent"/>
-  <int value="1128" label="BodyScrollsInAdditionToViewport"/>
-  <int value="1129" label="DocumentDesignModeEnabeld"/>
-  <int value="1130" label="ContentEditableTrue"/>
-  <int value="1131" label="ContentEditableTrueOnHTML"/>
-  <int value="1132" label="ContentEditablePlainTextOnly"/>
-  <int value="1133" label="V8RegExpPrototypeUnicodeGetter"/>
-  <int value="1134" label="V8IntlV8Parse"/>
-  <int value="1135" label="V8IntlPattern"/>
-  <int value="1136" label="V8IntlResolved"/>
-  <int value="1137" label="V8PromiseChain"/>
-  <int value="1138" label="V8PromiseAccept"/>
-  <int value="1139" label="V8PromiseDefer"/>
-  <int value="1140" label="EventComposed"/>
-  <int value="1141" label="GeolocationInsecureOriginIframe"/>
-  <int value="1142" label="GeolocationSecureOriginIframe"/>
-  <int value="1143" label="RequestMIDIAccessIframe"/>
-  <int value="1144" label="GetUserMediaInsecureOriginIframe"/>
-  <int value="1145" label="GetUserMediaSecureOriginIframe"/>
-  <int value="1146" label="ElementRequestPointerLockIframe"/>
-  <int value="1147" label="NotificationAPIInsecureOriginIframe"/>
-  <int value="1148" label="NotificationAPISecureOriginIframe"/>
-  <int value="1149" label="WebSocket"/>
-  <int value="1150" label="MediaStreamConstraintsNameValue"/>
-  <int value="1151" label="MediaStreamConstraintsFromDictionary"/>
-  <int value="1152" label="MediaStreamConstraintsConformant"/>
-  <int value="1153" label="CSSSelectorIndirectAdjacent"/>
-  <int value="1154" label="NodeRootNode (obsolete)"/>
-  <int value="1155" label="BluetoothDeviceConnectGATT"/>
-  <int value="1156" label="CreateImageBitmap"/>
-  <int value="1157" label="PresentationConnectionConnectEventListener"/>
-  <int value="1158" label="PresentationConnectionCloseEventListener"/>
-  <int value="1159" label="PresentationConnectionTerminateEventListener"/>
-  <int value="1160" label="DocumentCreateEventFontFaceSetLoadEvent"/>
-  <int value="1161" label="DocumentCreateEventMediaQueryListEvent"/>
-  <int value="1162" label="DocumentCreateEventAnimationEvent"/>
-  <int value="1163" label="DocumentCreateEventAnimationPlayerEvent"/>
-  <int value="1164" label="DocumentCreateEventApplicationCacheErrorEvent"/>
-  <int value="1165" label="DocumentCreateEventAutocompleteErrorEvent"/>
-  <int value="1166" label="DocumentCreateEventBeforeUnloadEvent"/>
-  <int value="1167" label="DocumentCreateEventClipboardEvent"/>
-  <int value="1168" label="DocumentCreateEventCompositionEvent"/>
-  <int value="1169" label="DocumentCreateEventDragEvent"/>
-  <int value="1170" label="DocumentCreateEventErrorEvent"/>
-  <int value="1171" label="DocumentCreateEventFocusEvent"/>
-  <int value="1172" label="DocumentCreateEventHashChangeEvent"/>
-  <int value="1173" label="DocumentCreateEventMutationEvent"/>
-  <int value="1174" label="DocumentCreateEventPageTransitionEvent"/>
-  <int value="1175" label="DocumentCreateEventPointerEvent"/>
-  <int value="1176" label="DocumentCreateEventPopStateEvent"/>
-  <int value="1177" label="DocumentCreateEventProgressEvent"/>
-  <int value="1178" label="DocumentCreateEventPromiseRejectionEvent"/>
-  <int value="1179" label="DocumentCreateEventRelatedEvent"/>
-  <int value="1180" label="DocumentCreateEventResourceProgressEvent"/>
-  <int value="1181" label="DocumentCreateEventSecurityPolicyViolationEvent"/>
-  <int value="1182" label="DocumentCreateEventTextEvent"/>
-  <int value="1183" label="DocumentCreateEventTransitionEvent"/>
-  <int value="1184" label="DocumentCreateEventWheelEvent"/>
-  <int value="1185" label="DocumentCreateEventMediaKeyEvent"/>
-  <int value="1186" label="DocumentCreateEventTrackEvent"/>
-  <int value="1187" label="DocumentCreateEventWebKitAnimationEvent"/>
-  <int value="1188" label="DocumentCreateEventMutationEvents"/>
-  <int value="1189" label="DocumentCreateEventOrientationEvent"/>
-  <int value="1190" label="DocumentCreateEventSVGEvents"/>
-  <int value="1191" label="DocumentCreateEventWebKitTransitionEvent"/>
-  <int value="1192" label="DocumentCreateEventBeforeInstallPromptEvent"/>
-  <int value="1193" label="DocumentCreateEventSyncEvent"/>
-  <int value="1194" label="DocumentCreateEventDeviceLightEvent"/>
-  <int value="1195" label="DocumentCreateEventDeviceMotionEvent"/>
-  <int value="1196" label="DocumentCreateEventDeviceOrientationEvent"/>
-  <int value="1197" label="DocumentCreateEventMediaEncryptedEvent"/>
-  <int value="1198" label="DocumentCreateEventMediaKeyMessageEvent"/>
-  <int value="1199" label="DocumentCreateEventGamepadEvent"/>
-  <int value="1200" label="DocumentCreateEventGeofencingEvent"/>
-  <int value="1201" label="DocumentCreateEventIDBVersionChangeEvent"/>
-  <int value="1202" label="DocumentCreateEventBlobEvent"/>
-  <int value="1203" label="DocumentCreateEventMediaStreamEvent"/>
-  <int value="1204" label="DocumentCreateEventMediaStreamTrackEvent"/>
-  <int value="1205" label="DocumentCreateEventRTCDTMFToneChangeEvent"/>
-  <int value="1206" label="DocumentCreateEventRTCDataChannelEvent"/>
-  <int value="1207" label="DocumentCreateEventRTCIceCandidateEvent"/>
-  <int value="1208" label="DocumentCreateEventServicePortConnectEvent"/>
-  <int value="1209" label="DocumentCreateEventNotificationEvent"/>
-  <int value="1210"
-      label="DocumentCreateEventPresentationConnectionAvailableEvent"/>
-  <int value="1211"
-      label="DocumentCreateEventPresentationConnectionCloseEvent"/>
-  <int value="1212" label="DocumentCreateEventPushEvent"/>
-  <int value="1213" label="DocumentCreateEventExtendableEvent"/>
-  <int value="1214" label="DocumentCreateEventExtendableMessageEvent"/>
-  <int value="1215" label="DocumentCreateEventFetchEvent"/>
-  <int value="1216" label="DocumentCreateEventInstallEvent"/>
-  <int value="1217" label="DocumentCreateEventServiceWorkerMessageEvent"/>
-  <int value="1218" label="DocumentCreateEventSpeechRecognitionError"/>
-  <int value="1219" label="DocumentCreateEventSpeechRecognitionEvent"/>
-  <int value="1220" label="DocumentCreateEventSpeechSynthesisEvent"/>
-  <int value="1221" label="DocumentCreateEventStorageEvent"/>
-  <int value="1222" label="DocumentCreateEventAudioProcessingEvent"/>
-  <int value="1223" label="DocumentCreateEventOfflineAudioCompletionEvent"/>
-  <int value="1224" label="DocumentCreateEventWebGLContextEvent"/>
-  <int value="1225" label="DocumentCreateEventMIDIConnectionEvent"/>
-  <int value="1226" label="DocumentCreateEventMIDIMessageEvent"/>
-  <int value="1227" label="DocumentCreateEventCloseEvent"/>
-  <int value="1228" label="DocumentCreateEventKeyboardEvents"/>
-  <int value="1229" label="HTMLMediaElement"/>
-  <int value="1230" label="HTMLMediaElementInDocument"/>
-  <int value="1231" label="HTMLMediaElementControlsAttribute"/>
-  <int value="1232" label="SVGZoomEvent"/>
-  <int value="1233" label="V8Animation_Oncancel_AttributeGetter"/>
-  <int value="1234" label="V8Animation_Oncancel_AttributeSetter"/>
-  <int value="1235" label="V8HTMLCommentInExternalScript"/>
-  <int value="1236" label="V8HTMLComment"/>
-  <int value="1237" label="V8SloppyModeBlockScopedFunctionRedefinition"/>
-  <int value="1238" label="V8ForInInitializer"/>
-  <int value="1239" label="V8Animation_Id_AttributeGetter"/>
-  <int value="1240" label="V8Animation_Id_AttributeSetter"/>
-  <int value="1241" label="MediaStreamOnEnded"/>
-  <int value="1242" label="DocumentCreateEventInputEvent"/>
-  <int value="1243" label="WebAnimationHyphenatedProperty"/>
-  <int value="1244"
-      label="FormControlsCollectionReturnsRadioNodeListForFieldSet"/>
-  <int value="1245" label="ApplicationCacheManifestSelectInsecureOrigin"/>
-  <int value="1246" label="ApplicationCacheManifestSelectSecureOrigin"/>
-  <int value="1247" label="ApplicationCacheAPIInsecureOrigin"/>
-  <int value="1248" label="ApplicationCacheAPISecureOrigin"/>
-  <int value="1249" label="CSSAtRuleApply"/>
-  <int value="1250" label="CSSSelectorPseudoAny"/>
-  <int value="1251" label="PannerNodeSetVelocity"/>
-  <int value="1252" label="DocumentAllItemNoArguments"/>
-  <int value="1253" label="DocumentAllItemNamed"/>
-  <int value="1254" label="DocumentAllItemIndexed"/>
-  <int value="1255" label="DocumentAllItemIndexedWithNonNumber"/>
-  <int value="1256" label="DocumentAllLegacyCallNoArguments"/>
-  <int value="1257" label="DocumentAllLegacyCallNamed"/>
-  <int value="1258" label="DocumentAllLegacyCallIndexed"/>
-  <int value="1259" label="DocumentAllLegacyCallIndexedWithNonNumber"/>
-  <int value="1260" label="DocumentAllLegacyCallTwoArguments"/>
-  <int value="1261" label="HTMLLabelElementFormIsDifferentFromControlForm"/>
-  <int value="1262" label="HTMLLabelElementHasNoControlAndFormIsAncestor"/>
-  <int value="1263" label="HTMLLabelElementControlForNonFormAssociatedElement"/>
-  <int value="1264" label="PatternAttributeUnicodeFlagIsIncompatible"/>
-  <int value="1265" label="HTMLMediaElementLoadNetworkEmptyNotPaused"/>
-  <int value="1266" label="EventRelatedTargetScoped"/>
-  <int value="1267" label="V8Window_WebkitSpeechGrammar_ConstructorGetter"/>
-  <int value="1268" label="V8Window_WebkitSpeechGrammarList_ConstructorGetter"/>
-  <int value="1269" label="V8Window_WebkitSpeechRecognition_ConstructorGetter"/>
-  <int value="1270"
-      label="V8Window_WebkitSpeechRecognitionError_ConstructorGetter"/>
-  <int value="1271"
-      label="V8Window_WebkitSpeechRecognitionEvent_ConstructorGetter"/>
-  <int value="1272" label="V8Window_SpeechSynthesis_AttributeGetter"/>
-  <int value="1273" label="V8IDBFactory_WebkitGetDatabaseNames_Method"/>
-  <int value="1274" label="ImageDocument"/>
-  <int value="1275" label="ScriptPassesCSPDynamic"/>
-  <int value="1276" label="ScriptPassesCSPNonce"/>
-  <int value="1277" label="CSPWithStrictDynamic"/>
-  <int value="1278" label="ScrollAnchored"/>
-  <int value="1279" label="AddEventListenerFourArguments"/>
-  <int value="1280" label="RemoveEventListenerFourArguments"/>
-  <int value="1281" label="InvalidReportUriDirectiveInMetaCSP"/>
-  <int value="1282" label="InvalidSandboxDirectiveInMetaCSP"/>
-  <int value="1283" label="InvalidFrameAncestorsDirectiveInMetaCSP"/>
-  <int value="1284" label="TouchDragUserGestureUsed"/>
-  <int value="1285" label="TouchDragUserGestureUsedCrossOrigin"/>
-  <int value="1286" label="DocumentCreateEventForeignFetchEvent"/>
-  <int value="1287" label="SVGCalcModeDiscrete"/>
-  <int value="1288" label="SVGCalcModeLinear"/>
-  <int value="1289" label="SVGCalcModePaced"/>
-  <int value="1290" label="SVGCalcModeSpline"/>
-  <int value="1291" label="FormSubmissionStarted"/>
-  <int value="1292" label="FormValidationStarted"/>
-  <int value="1293" label="FormValidationAbortedSubmission"/>
-  <int value="1294" label="FormValidationShowedMessage"/>
-  <int value="1295" label="WebAnimationsEasingAsFunctionLinear"/>
-  <int value="1296" label="WebAnimationsEasingAsFunctionOther"/>
-  <int value="1297" label="V8Document_Images_AttributeGetter"/>
-  <int value="1298" label="V8Document_Embeds_AttributeGetter"/>
-  <int value="1299" label="V8Document_Plugins_AttributeGetter"/>
-  <int value="1300" label="V8Document_Links_AttributeGetter"/>
-  <int value="1301" label="V8Document_Forms_AttributeGetter"/>
-  <int value="1302" label="V8Document_Scripts_AttributeGetter"/>
-  <int value="1303" label="V8Document_Anchors_AttributeGetter"/>
-  <int value="1304" label="V8Document_Applets_AttributeGetter"/>
-  <int value="1305" label="XMLHttpRequestCrossOriginWithCredentials"/>
-  <int value="1306" label="MediaStreamTrackRemote"/>
-  <int value="1307" label="V8Node_IsConnected_AttributeGetter"/>
-  <int value="1308" label="ShadowRootDelegatesFocus"/>
-  <int value="1309" label="MixedShadowRootV0AndV1"/>
-  <int value="1310" label="ImageDocumentInFrame"/>
-  <int value="1311" label="MediaDocument"/>
-  <int value="1312" label="MediaDocumentInFrame"/>
-  <int value="1313" label="PluginDocument"/>
-  <int value="1314" label="PluginDocumentInFrame"/>
-  <int value="1315" label="SinkDocument"/>
-  <int value="1316" label="SinkDocumentInFrame"/>
-  <int value="1317" label="TextDocument"/>
-  <int value="1318" label="TextDocumentInFrame"/>
-  <int value="1319" label="ViewSourceDocument"/>
-  <int value="1320" label="FileAPINativeLineEndings"/>
-  <int value="1321" label="PointerEventAttributeCount"/>
-  <int value="1322" label="CompositedReplication"/>
-  <int value="1323" label="EncryptedMediaAllSelectedContentTypesHaveCodecs"/>
-  <int value="1324" label="EncryptedMediaAllSelectedContentTypesMissingCodecs"/>
-  <int value="1325" label="V8DataTransferItem_WebkitGetAsEntry_Method"/>
-  <int value="1326" label="V8HTMLInputElement_WebkitEntries_AttributeGetter"/>
-  <int value="1327"
-      label="Entry_Filesystem_AttributeGetter_IsolatedFileSystem"/>
-  <int value="1328" label="Entry_GetMetadata_Method_IsolatedFileSystem"/>
-  <int value="1329" label="Entry_MoveTo_Method_IsolatedFileSystem"/>
-  <int value="1330" label="Entry_CopyTo_Method_IsolatedFileSystem"/>
-  <int value="1331" label="Entry_Remove_Method_IsolatedFileSystem"/>
-  <int value="1332" label="Entry_GetParent_Method_IsolatedFileSystem"/>
-  <int value="1333" label="Entry_ToURL_Method_IsolatedFileSystem"/>
-  <int value="1334" label="During_Microtask_Alert"/>
-  <int value="1335" label="During_Microtask_Confirm"/>
-  <int value="1336" label="During_Microtask_Print"/>
-  <int value="1337" label="During_Microtask_Prompt"/>
-  <int value="1338" label="During_Microtask_SyncXHR"/>
-  <int value="1339" label="URLMethodCreateObjectURLServiceWorker"/>
-  <int value="1340" label="URLMethodRevokeObjectURLServiceWorker"/>
-  <int value="1341" label="DocumentCreateEventPaymentRequestUpdateEvent"/>
-  <int value="1342" label="CredentialManagerGetReturnedCredential"/>
-  <int value="1343" label="GeolocationInsecureOriginDeprecatedNotRemoved"/>
-  <int value="1344"
-      label="GeolocationInsecureOriginIframeDeprecatedNotRemoved"/>
-  <int value="1345" label="ProgressElementWithNoneAppearance"/>
-  <int value="1346" label="ProgressElementWithProgressBarAppearance"/>
-  <int value="1347" label="PointerEventAddListenerCount"/>
-  <int value="1351" label="CSSValueAppearanceNone"/>
-  <int value="1352" label="CSSValueAppearanceNotNone"/>
-  <int value="1353" label="CSSValueAppearanceOthers"/>
-  <int value="1354" label="CSSValueAppearanceButton"/>
-  <int value="1355" label="CSSValueAppearanceCaret"/>
-  <int value="1356" label="CSSValueAppearanceCheckbox"/>
-  <int value="1357" label="CSSValueAppearanceMenulist"/>
-  <int value="1358" label="CSSValueAppearanceMenulistButton"/>
-  <int value="1359" label="CSSValueAppearanceListbox"/>
-  <int value="1360" label="CSSValueAppearanceRadio"/>
-  <int value="1361" label="CSSValueAppearanceSearchField"/>
-  <int value="1362" label="CSSValueAppearanceTextField"/>
-  <int value="1363" label="AudioContextCreatePannerAutomated"/>
-  <int value="1364" label="PannerNodeSetPosition"/>
-  <int value="1365" label="PannerNodeSetOrientation"/>
-  <int value="1366" label="AudioListenerSetPosition"/>
-  <int value="1367" label="AudioListenerSetOrientation"/>
-  <int value="1368" label="IntersectionObserver_Constructor"/>
-  <int value="1369" label="DurableStoragePersist"/>
-  <int value="1370" label="DurableStoragePersisted"/>
-  <int value="1371" label="DurableStorageEstimate"/>
-  <int value="1372" label="UntrustedEventDefaultHandled"/>
-  <int value="1373" label="FixedRasterScaleBlurryContent"/>
-  <int value="1374" label="FixedRasterScalePotentialPerformanceRegression"/>
-  <int value="1375" label="CSSDeepCombinatorAndShadow"/>
-  <int value="1376" label="OpacityWithPreserve3DQuirk"/>
-  <int value="1377" label="CSSSelectorPseudoReadOnly"/>
-  <int value="1378" label="CSSSelectorPseudoReadWrite"/>
-  <int value="1379" label="UnloadHandler_Navigation"/>
-  <int value="1380" label="TouchStartUserGestureUtilized"/>
-  <int value="1381" label="TouchMoveUserGestureUtilized"/>
-  <int value="1382" label="TouchEndDuringScrollUserGestureUtilized"/>
-  <int value="1383" label="CSSSelectorPseudoDefined"/>
-  <int value="1384" label="RTCPeerConnectionAddIceCandidatePromise"/>
-  <int value="1385" label="RTCPeerConnectionAddIceCandidateLegacy"/>
-  <int value="1386" label="RTCIceCandidateDefaultSdpMLineIndex"/>
-  <int value="1387" label="DocumentCreateEventSensorErrorEvent"/>
-  <int value="1388" label="DocumentCreateEventSensorReadingEvent"/>
-  <int value="1389" label="MediaStreamConstraintsOldAndNew"/>
-  <int value="1390" label="V8ArrayProtectorDirtied"/>
-  <int value="1391" label="V8ArraySpeciesModified"/>
-  <int value="1392" label="V8ArrayPrototypeConstructorModified"/>
-  <int value="1393" label="V8ArrayInstanceProtoModified"/>
-  <int value="1394" label="V8ArrayInstanceConstructorModified"/>
-  <int value="1395" label="V8LegacyFunctionDeclaration"/>
-  <int value="1396" label="V8RegExpPrototypeSourceGetter"/>
-  <int value="1397" label="V8RegExpPrototypeOldFlagGetter"/>
-  <int value="1398" label="V8DecimalWithLeadingZeroInStrictMode"/>
-  <int value="1399" label="OBSOLETE_FormSubmissionNotInDocumentTree"/>
-  <int value="1400" label="GetUserMediaPrefixed"/>
-  <int value="1401" label="GetUserMediaLegacy"/>
-  <int value="1402" label="GetUserMediaPromise"/>
-  <int value="1403" label="CSSFilterFunctionNoArguments"/>
-  <int value="1404" label="V8LegacyDateParser"/>
-  <int value="1405" label="OpenSearchInsecureOriginInsecureTarget"/>
-  <int value="1406" label="OpenSearchInsecureOriginSecureTarget"/>
-  <int value="1407" label="OpenSearchSecureOriginInsecureTarget"/>
-  <int value="1408" label="OpenSearchSecureOriginSecureTarget"/>
-  <int value="1409" label="RegisterProtocolHandlerSecureOrigin"/>
-  <int value="1410" label="RegisterProtocolHandlerInsecureOrigin"/>
-  <int value="1411" label="CrossOriginWindowAlert"/>
-  <int value="1412" label="CrossOriginWindowConfirm"/>
-  <int value="1413" label="CrossOriginWindowPrompt"/>
-  <int value="1414" label="CrossOriginWindowPrint"/>
-  <int value="1415" label="MediaStreamOnActive"/>
-  <int value="1416" label="MediaStreamOnInactive"/>
-  <int value="1417" label="AddEventListenerPassiveTrue"/>
-  <int value="1418" label="AddEventListenerPassiveFalse"/>
-  <int value="1419" label="CSPReferrerDirective"/>
-  <int value="1420" label="DocumentOpen"/>
-  <int value="1421" label="ElementRequestPointerLockInShadow"/>
-  <int value="1422" label="ShadowRootPointerLockElement"/>
-  <int value="1423" label="DocumentPointerLockElementInV0Shadow"/>
-  <int value="1424" label="TextAreaMaxLength"/>
-  <int value="1425" label="TextAreaMinLength"/>
-  <int value="1426" label="TopNavigationFromSubFrame"/>
-  <int value="1427" label="PrefixedElementRequestFullscreenInShadow"/>
-  <int value="1428" label="MediaSourceAbortRemove"/>
-  <int value="1429" label="MediaSourceDurationTruncatingBuffered"/>
-  <int value="1430" label="AudioContextCrossOriginIframe"/>
-  <int value="1431" label="PointerEventSetCapture"/>
-  <int value="1432" label="PointerEventDispatch"/>
-  <int value="1433" label="MIDIMessageEventReceivedTime"/>
-  <int value="1434" label="SummaryElementWithDisplayBlockAuthorRule"/>
-  <int value="1435" label="V8MediaStream_Active_AttributeGetter"/>
-  <int value="1436" label="BeforeInstallPromptEvent"/>
-  <int value="1437" label="BeforeInstallPromptEventUserChoice"/>
-  <int value="1438" label="BeforeInstallPromptEventPreventDefault"/>
-  <int value="1439" label="BeforeInstallPromptEventPrompt"/>
-  <int value="1440" label="ExecCommandAltersHTMLStructure"/>
-  <int value="1441" label="SecureContextCheckPassed"/>
-  <int value="1442" label="SecureContextCheckFailed"/>
-  <int value="1443" label="SecureContextCheckForSandboxedOriginPassed"/>
-  <int value="1444" label="SecureContextCheckForSandboxedOriginFailed"/>
-  <int value="1445" label="V8DefineGetterOrSetterWouldThrow"/>
-  <int value="1446" label="V8FunctionConstructorReturnedUndefined"/>
-  <int value="1447" label="V8BroadcastChannel_Constructor"/>
-  <int value="1448" label="V8BroadcastChannel_PostMessage_Method"/>
-  <int value="1449" label="V8BroadcastChannel_Close_Method"/>
-  <int value="1450" label="TouchStartFired"/>
-  <int value="1451" label="MouseDownFired"/>
-  <int value="1452" label="PointerDownFired"/>
-  <int value="1453" label="PointerDownFiredForTouch"/>
-  <int value="1454" label="PointerEventDispatchPointerDown"/>
-  <int value="1455" label="SVGSMILBeginOrEndEventValue"/>
-  <int value="1456" label="SVGSMILBeginOrEndSyncbaseValue"/>
-  <int value="1457" label="SVGSMILElementInsertedAfterLoad"/>
-  <int value="1458" label="V8VisualViewport_ScrollLeft_AttributeGetter"/>
-  <int value="1459" label="V8VisualViewport_ScrollTop_AttributeGetter"/>
-  <int value="1460" label="V8VisualViewport_PageX_AttributeGetter"/>
-  <int value="1461" label="V8VisualViewport_PageY_AttributeGetter"/>
-  <int value="1462" label="V8VisualViewport_ClientWidth_AttributeGetter"/>
-  <int value="1463" label="V8VisualViewport_ClientHeight_AttributeGetter"/>
-  <int value="1464" label="V8VisualViewport_Scale_AttributeGetter"/>
-  <int value="1465" label="VisualViewportScrollFired"/>
-  <int value="1466" label="VisualViewportResizeFired"/>
-  <int value="1467" label="NodeGetRootNode"/>
-  <int value="1468" label="SlotChangeEventAddListener"/>
-  <int value="1469" label="CSSValueAppearanceButtonRendered"/>
-  <int value="1470" label="CSSValueAppearanceButtonForAnchor"/>
-  <int value="1471" label="CSSValueAppearanceButtonForButton"/>
-  <int value="1472" label="CSSValueAppearanceButtonForOtherButtons"/>
-  <int value="1473" label="CSSValueAppearanceTextFieldRendered"/>
-  <int value="1474" label="CSSValueAppearanceTextFieldForSearch"/>
-  <int value="1475" label="CSSValueAppearanceTextFieldForTextField"/>
-  <int value="1476" label="RTCPeerConnectionGetStats"/>
-  <int value="1477" label="SVGSMILAnimationAppliedEffect"/>
-  <int value="1478" label="PerformanceResourceTimingSizes"/>
-  <int value="1479" label="EventSourceDocument"/>
-  <int value="1480" label="EventSourceWorker"/>
-  <int value="1481" label="SingleOriginInTimingAllowOrigin"/>
-  <int value="1482" label="MultipleOriginsInTimingAllowOrigin"/>
-  <int value="1483" label="StarInTimingAllowOrigin"/>
-  <int value="1484" label="SVGSMILAdditiveAnimation"/>
-  <int value="1485" label="SendBeaconWithNonSimpleContentType"/>
-  <int value="1486" label="ChromeLoadTimesRequestTime"/>
-  <int value="1487" label="ChromeLoadTimesStartLoadTime"/>
-  <int value="1488" label="ChromeLoadTimesCommitLoadTime"/>
-  <int value="1489" label="ChromeLoadTimesFinishDocumentLoadTime"/>
-  <int value="1490" label="ChromeLoadTimesFinishLoadTime"/>
-  <int value="1491" label="ChromeLoadTimesFirstPaintTime"/>
-  <int value="1492" label="ChromeLoadTimesFirstPaintAfterLoadTime"/>
-  <int value="1493" label="ChromeLoadTimesNavigationType"/>
-  <int value="1494" label="ChromeLoadTimesWasFetchedViaSpdy"/>
-  <int value="1495" label="ChromeLoadTimesWasNpnNegotiated"/>
-  <int value="1496" label="ChromeLoadTimesNpnNegotiatedProtocol"/>
-  <int value="1497" label="ChromeLoadTimesWasAlternateProtocolAvailable"/>
-  <int value="1498" label="ChromeLoadTimesConnectionInfo"/>
-  <int value="1499" label="ChromeLoadTimesUnknown"/>
-  <int value="1500" label="SVGViewElement"/>
-  <int value="1501" label="WebShareShare"/>
-  <int value="1502" label="AuxclickAddListenerCount"/>
-  <int value="1503" label="HTMLCanvasElement"/>
-  <int value="1504" label="SVGSMILAnimationElementTiming"/>
-  <int value="1505" label="SVGSMILBeginEndAnimationElement"/>
-  <int value="1506" label="SVGSMILPausing"/>
-  <int value="1507" label="SVGSMILCurrentTime"/>
-  <int value="1508" label="HTMLBodyElementOnSelectionChangeAttribute"/>
-  <int value="1509" label="ForeignFetchInterception"/>
-  <int value="1510" label="MapNameMatchingStrict"/>
-  <int value="1511" label="MapNameMatchingASCIICaseless"/>
-  <int value="1512" label="MapNameMatchingUnicodeLower"/>
-  <int value="1513" label="RadioNameMatchingStrict"/>
-  <int value="1514" label="RadioNameMatchingASCIICaseless"/>
-  <int value="1515" label="RadioNameMatchingCaseFolding"/>
-  <int value="1516" label="NavigatorPointerEnabled"/>
-  <int value="1517" label="OBSOLETE_InputSelectionGettersThrow"/>
-  <int value="1518" label="DocumentCreateEventVRDisplayEvent"/>
-  <int value="1519" label="UsbGetDevices"/>
-  <int value="1520" label="UsbRequestDevice"/>
-  <int value="1521" label="UsbDeviceOpen"/>
-  <int value="1522" label="UsbDeviceClose"/>
-  <int value="1523" label="UsbDeviceSelectConfiguration"/>
-  <int value="1524" label="UsbDeviceClaimInterface"/>
-  <int value="1525" label="UsbDeviceReleaseInterface"/>
-  <int value="1526" label="UsbDeviceSelectAlternateInterface"/>
-  <int value="1527" label="UsbDeviceControlTransferIn"/>
-  <int value="1528" label="UsbDeviceControlTransferOut"/>
-  <int value="1529" label="UsbDeviceClearHalt"/>
-  <int value="1530" label="UsbDeviceTransferIn"/>
-  <int value="1531" label="UsbDeviceTransferOut"/>
-  <int value="1532" label="UsbDeviceIsochronousTransferIn"/>
-  <int value="1533" label="UsbDeviceIsochronousTransferOut"/>
-  <int value="1534" label="UsbDeviceReset"/>
-  <int value="1535" label="PointerEnterLeaveFired"/>
-  <int value="1536" label="PointerOverOutFired"/>
-  <int value="1537" label="PointerEnterLeaveFiredWhileCaptured"/>
-  <int value="1538" label="PointerOverOutFiredWhileCaptured"/>
-  <int value="1539" label="DraggableAttribute"/>
-  <int value="1540" label="CleanScriptElementWithNonce"/>
-  <int value="1541" label="PotentiallyInjectedScriptElementWithNonce"/>
-  <int value="1542" label="PendingStylesheetAddedAfterBodyStarted"/>
-  <int value="1543" label="UntrustedMouseDownEventDispatchedToSelect"/>
-  <int value="1544" label="BlockedSniffingAudioToScript"/>
-  <int value="1545" label="BlockedSniffingVideoToScript"/>
-  <int value="1546" label="BlockedSniffingCSVToScript"/>
-  <int value="1547" label="MetaSetCookie"/>
-  <int value="1548" label="MetaRefresh"/>
-  <int value="1549" label="MetaSetCookieWhenCSPBlocksInlineScript"/>
-  <int value="1550" label="MetaRefreshWhenCSPBlocksInlineScript"/>
-  <int value="1551" label="MiddleClickAutoscrollStart"/>
-  <int value="1552" label="ClipCssOfFixedPositionElement"/>
-  <int value="1553" label="RTCPeerConnectionCreateOfferOptionsOfferToReceive"/>
-  <int value="1554" label="DragAndDropScrollStart"/>
-  <int value="1555"
-      label="PresentationConnectionListConnectionAvailableEventListener"/>
-  <int value="1556" label="WebAudioAutoplayCrossOriginIframe"/>
-  <int value="1557" label="ScriptInvalidTypeOrLanguage"/>
-  <int value="1558" label="VRGetDisplays"/>
-  <int value="1559" label="VRPresent"/>
-  <int value="1560" label="VRDeprecatedGetPose"/>
-  <int value="1561" label="WebAudioAnalyserNode"/>
-  <int value="1562" label="WebAudioAudioBuffer"/>
-  <int value="1563" label="WebAudioAudioBufferSourceNode"/>
-  <int value="1564" label="WebAudioBiquadFilterNode"/>
-  <int value="1565" label="WebAudioChannelMergerNode"/>
-  <int value="1566" label="WebAudioChannelSplitterNode"/>
-  <int value="1567" label="WebAudioConvolverNode"/>
-  <int value="1568" label="WebAudioDelayNode"/>
-  <int value="1569" label="WebAudioDynamicsCompressorNode"/>
-  <int value="1570" label="WebAudioGainNode"/>
-  <int value="1571" label="WebAudioIIRFilterNode"/>
-  <int value="1572" label="WebAudioMediaElementAudioSourceNode"/>
-  <int value="1573" label="WebAudioOscillatorNode"/>
-  <int value="1574" label="WebAudioPannerNode"/>
-  <int value="1575" label="WebAudioPeriodicWave"/>
-  <int value="1576" label="WebAudioStereoPannerNode"/>
-  <int value="1577" label="WebAudioWaveShaperNode"/>
-  <int value="1578" label="CSSZoomReset"/>
-  <int value="1579" label="CSSZoomDocument"/>
-  <int value="1580" label="PaymentAddressCareOf"/>
-  <int value="1581" label="XSSAuditorBlockedScript"/>
-  <int value="1582" label="XSSAuditorBlockedEntirePage"/>
-  <int value="1583" label="XSSAuditorDisabled"/>
-  <int value="1584" label="XSSAuditorEnabledFilter"/>
-  <int value="1585" label="XSSAuditorEnabledBlock"/>
-  <int value="1586" label="XSSAuditorInvalid"/>
-  <int value="1587" label="SVGCursorElement"/>
-  <int value="1588" label="SVGCursorElementHasClient"/>
-  <int value="1589" label="TextInputEventOnInput"/>
-  <int value="1590" label="TextInputEventOnTextArea"/>
-  <int value="1591" label="TextInputEventOnContentEditable"/>
-  <int value="1592" label="TextInputEventOnNotNode"/>
-  <int value="1593" label="WebkitBeforeTextInsertedOnInput"/>
-  <int value="1594" label="WebkitBeforeTextInsertedOnTextArea"/>
-  <int value="1595" label="WebkitBeforeTextInsertedOnContentEditable"/>
-  <int value="1596" label="WebkitBeforeTextInsertedOnNotNode"/>
-  <int value="1597" label="WebkitEditableContentChangedOnInput"/>
-  <int value="1598" label="WebkitEditableContentChangedOnTextArea"/>
-  <int value="1599" label="WebkitEditableContentChangedOnContentEditable"/>
-  <int value="1600" label="WebkitEditableContentChangedOnNotNode"/>
-  <int value="1601"
-      label="V8NavigatorUserMediaError_ConstraintName_AttributeGetter"/>
-  <int value="1602" label="V8HTMLMediaElement_SrcObject_AttributeGetter"/>
-  <int value="1603" label="V8HTMLMediaElement_SrcObject_AttributeSetter"/>
-  <int value="1604" label="CreateObjectURLBlob"/>
-  <int value="1605" label="CreateObjectURLMediaSource"/>
-  <int value="1606" label="CreateObjectURLMediaStream"/>
-  <int value="1607" label="DocumentCreateTouchWindowNull"/>
-  <int value="1608" label="DocumentCreateTouchWindowWrongType"/>
-  <int value="1609" label="DocumentCreateTouchTargetNull"/>
-  <int value="1610" label="DocumentCreateTouchTargetWrongType"/>
-  <int value="1611" label="DocumentCreateTouchLessThanSevenArguments"/>
-  <int value="1612" label="DocumentCreateTouchMoreThanSevenArguments"/>
-  <int value="1613" label="EncryptedMediaCapabilityProvided"/>
-  <int value="1614" label="EncryptedMediaCapabilityNotProvided"/>
-  <int value="1615" label="LongTaskObserver"/>
-  <int value="1616" label="CSSMotionInEffect"/>
-  <int value="1617" label="CSSOffsetInEffect"/>
-  <int value="1618" label="VRGetDisplaysInsecureOrigin"/>
-  <int value="1619" label="VRRequestPresent"/>
-  <int value="1620" label="VRRequestPresentInsecureOrigin"/>
-  <int value="1621" label="VRDeprecatedFieldOfView"/>
-  <int value="1622" label="VideoInCanvas"/>
-  <int value="1623" label="HiddenAutoplayedVideoInCanvas"/>
-  <int value="1624" label="OffscreenCanvas"/>
-  <int value="1625" label="GamepadPose"/>
-  <int value="1626" label="GamepadHand"/>
-  <int value="1627" label="GamepadDisplayId"/>
-  <int value="1628" label="GamepadButtonTouched"/>
-  <int value="1629" label="GamepadPoseHasOrientation"/>
-  <int value="1630" label="GamepadPoseHasPosition"/>
-  <int value="1631" label="GamepadPosePosition"/>
-  <int value="1632" label="GamepadPoseLinearVelocity"/>
-  <int value="1633" label="GamepadPoseLinearAcceleration"/>
-  <int value="1634" label="GamepadPoseOrientation"/>
-  <int value="1635" label="GamepadPoseAngularVelocity"/>
-  <int value="1636" label="GamepadPoseAngularAcceleration"/>
-  <int value="1637" label="DeprecatedBluetoothDeviceUUIDsAttribute"/>
-  <int value="1638" label="V8RTCDataChannel_MaxRetransmitTime_AttributeGetter"/>
-  <int value="1639" label="V8RTCDataChannel_MaxRetransmits_AttributeGetter"/>
-  <int value="1640" label="V8RTCDataChannel_Reliable_AttributeGetter"/>
-  <int value="1641" label="V8RTCPeerConnection_AddStream_Method"/>
-  <int value="1642" label="V8RTCPeerConnection_CreateDTMFSender_Method"/>
-  <int value="1643" label="V8RTCPeerConnection_GetLocalStreams_Method"/>
-  <int value="1644" label="V8RTCPeerConnection_GetRemoteStreams_Method"/>
-  <int value="1645" label="V8RTCPeerConnection_GetStreamById_Method"/>
-  <int value="1646" label="V8RTCPeerConnection_RemoveStream_Method"/>
-  <int value="1647" label="V8RTCPeerConnection_UpdateIce_Method"/>
-  <int value="1648"
-      label="RTCPeerConnectionCreateDataChannelMaxRetransmitTime"/>
-  <int value="1649" label="RTCPeerConnectionCreateDataChannelMaxRetransmits"/>
-  <int value="1650" label="AudioContextCreateConstantSource"/>
-  <int value="1651" label="WebAudioConstantSourceNode"/>
-  <int value="1652" label="LoopbackEmbeddedInSecureContext"/>
-  <int value="1653" label="LoopbackEmbeddedInNonSecureContext"/>
-  <int value="1654" label="BlinkMacSystemFont"/>
-  <int value="1655" label="RTCConfigurationIceTransportsNone"/>
-  <int value="1656" label="RTCIceServerURL"/>
-  <int value="1657" label="RTCIceServerURLs"/>
-  <int value="1658" label="OffscreenCanvasTransferToImageBitmap2D"/>
-  <int value="1659" label="OffscreenCanvasTransferToImageBitmapWebGL"/>
-  <int value="1660" label="OffscreenCanvasCommit2D"/>
-  <int value="1661" label="OffscreenCanvasCommitWebGL"/>
-  <int value="1662" label="RTCConfigurationIceTransportPolicy"/>
-  <int value="1663" label="RTCConfigurationIceTransportPolicyNone"/>
-  <int value="1664" label="RTCConfigurationIceTransports"/>
-  <int value="1665" label="DocumentFullscreenElementInV0Shadow"/>
-  <int value="1666" label="ScriptWithCSPBypassingSchemeParserInserted"/>
-  <int value="1667" label="ScriptWithCSPBypassingSchemeNotParserInserted"/>
-  <int value="1668" label="DocumentCreateElement2ndArgStringHandling"/>
-  <int value="1669" label="V8MediaRecorder_Start_Method"/>
-  <int value="1670" label="WebBluetoothRequestDevice"/>
-  <int value="1671" label="UnitlessPerspectiveInPerspectiveProperty"/>
-  <int value="1672" label="UnitlessPerspectiveInTransformProperty"/>
-  <int value="1673" label="V8RTCSessionDescription_Type_AttributeGetter"/>
-  <int value="1674" label="V8RTCSessionDescription_Type_AttributeSetter"/>
-  <int value="1675" label="V8RTCSessionDescription_Sdp_AttributeGetter"/>
-  <int value="1676" label="V8RTCSessionDescription_Sdp_AttributeSetter"/>
-  <int value="1677" label="RTCSessionDescriptionInitNoType"/>
-  <int value="1678" label="RTCSessionDescriptionInitNoSdp"/>
-  <int value="1679" label="HTMLMediaElementPreloadForcedMetadata"/>
-  <int value="1680" label="GenericSensorStart"/>
-  <int value="1681" label="GenericSensorStop"/>
-  <int value="1682" label="TouchEventPreventedNoTouchAction"/>
-  <int value="1683"
-      label="TouchEventPreventedForcedDocumentPassiveNoTouchAction"/>
-  <int value="1684" label="V8Event_StopPropagation_Method"/>
-  <int value="1685" label="V8Event_StopImmediatePropagation_Method"/>
-  <int value="1686" label="ImageCaptureConstructor"/>
-  <int value="1687" label="V8Document_RootScroller_AttributeGetter"/>
-  <int value="1688" label="V8Document_RootScroller_AttributeSetter"/>
-  <int value="1689" label="CustomElementRegistryDefine"/>
-  <int value="1690" label="LinkHeaderServiceWorker"/>
-  <int value="1691" label="CSSShadowPiercingDescendantCombinator"/>
-  <int value="1692" label="CSSFlexibleBox"/>
-  <int value="1693" label="CSSGridLayout"/>
-  <int value="1694" label="V8BarcodeDetector_Detect_Method"/>
-  <int value="1695" label="V8FaceDetector_Detect_Method"/>
-  <int value="1696" label="FullscreenAllowedByOrientationChange"/>
-  <int value="1697"
-      label="ServiceWorkerRespondToNavigationRequestWithRedirectedResponse"/>
-  <int value="1698" label="V8AudioContext_Constructor"/>
-  <int value="1699" label="V8OfflineAudioContext_Constructor"/>
-  <int value="1700" label="AppInstalledEventAddListener"/>
-  <int value="1701" label="AudioContextGetOutputTimestamp"/>
-  <int value="1702" label="V8MediaStreamAudioDestinationNode_Constructor"/>
-  <int value="1703" label="V8AnalyserNode_Constructor"/>
-  <int value="1704" label="V8AudioBuffer_Constructor"/>
-  <int value="1705" label="V8AudioBufferSourceNode_Constructor"/>
-  <int value="1706" label="V8AudioProcessingEvent_Constructor"/>
-  <int value="1707" label="V8BiquadFilterNode_Constructor"/>
-  <int value="1708" label="V8ChannelMergerNode_Constructor"/>
-  <int value="1709" label="V8ChannelSplitterNode_Constructor"/>
-  <int value="1710" label="V8ConstantSourceNode_Constructor"/>
-  <int value="1711" label="V8ConvolverNode_Constructor"/>
-  <int value="1712" label="V8DelayNode_Constructor"/>
-  <int value="1713" label="V8DynamicsCompressorNode_Constructor"/>
-  <int value="1714" label="V8GainNode_Constructor"/>
-  <int value="1715" label="V8IIRFilterNode_Constructor"/>
-  <int value="1716" label="V8MediaElementAudioSourceNode_Constructor"/>
-  <int value="1717" label="V8MediaStreamAudioSourceNode_Constructor"/>
-  <int value="1718" label="V8OfflineAudioCompletionEvent_Constructor"/>
-  <int value="1719" label="V8OscillatorNode_Constructor"/>
-  <int value="1720" label="V8PannerNode_Constructor"/>
-  <int value="1721" label="V8PeriodicWave_Constructor"/>
-  <int value="1722" label="V8StereoPannerNode_Constructor"/>
-  <int value="1723" label="V8WaveShaperNode_Constructor"/>
-  <int value="1724" label="V8Headers_GetAll_Method"/>
-  <int value="1725" label="NavigatorVibrateEngagementNone"/>
-  <int value="1726" label="NavigatorVibrateEngagementMinimal"/>
-  <int value="1727" label="NavigatorVibrateEngagementLow"/>
-  <int value="1728" label="NavigatorVibrateEngagementMedium"/>
-  <int value="1729" label="NavigatorVibrateEngagementHigh"/>
-  <int value="1730" label="NavigatorVibrateEngagementMax"/>
-  <int value="1731" label="AlertEngagementNone"/>
-  <int value="1732" label="AlertEngagementMinimal"/>
-  <int value="1733" label="AlertEngagementLow"/>
-  <int value="1734" label="AlertEngagementMedium"/>
-  <int value="1735" label="AlertEngagementHigh"/>
-  <int value="1736" label="AlertEngagementMax"/>
-  <int value="1737" label="ConfirmEngagementNone"/>
-  <int value="1738" label="ConfirmEngagementMinimal"/>
-  <int value="1739" label="ConfirmEngagementLow"/>
-  <int value="1740" label="ConfirmEngagementMedium"/>
-  <int value="1741" label="ConfirmEngagementHigh"/>
-  <int value="1742" label="ConfirmEngagementMax"/>
-  <int value="1743" label="PromptEngagementNone"/>
-  <int value="1744" label="PromptEngagementMinimal"/>
-  <int value="1745" label="PromptEngagementLow"/>
-  <int value="1746" label="PromptEngagementMedium"/>
-  <int value="1747" label="PromptEngagementHigh"/>
-  <int value="1748" label="PromptEngagementMax"/>
-  <int value="1749" label="TopNavInSandbox"/>
-  <int value="1750" label="TopNavInSandboxWithoutGesture"/>
-  <int value="1751" label="TopNavInSandboxWithPerm"/>
-  <int value="1752" label="TopNavInSandboxWithPermButNoGesture"/>
-  <int value="1753" label="ReferrerPolicyHeader"/>
-  <int value="1754" label="HTMLAnchorElementReferrerPolicyAttribute"/>
-  <int value="1755" label="HTMLIFrameElementReferrerPolicyAttribute"/>
-  <int value="1756" label="HTMLImageElementReferrerPolicyAttribute"/>
-  <int value="1757" label="HTMLLinkElementReferrerPolicyAttribute"/>
-  <int value="1758" label="BaseElement"/>
-  <int value="1759" label="BaseWithCrossOriginHref"/>
-  <int value="1760" label="BaseWithDataHref"/>
-  <int value="1761" label="BaseWithNewlinesInTarget"/>
-  <int value="1762" label="BaseWithOpenBracketInTarget"/>
-  <int value="1763" label="BaseWouldBeBlockedByDefaultSrc"/>
-  <int value="1764" label="V8AssigmentExpressionLHSIsCallInSloppy"/>
-  <int value="1765" label="V8AssigmentExpressionLHSIsCallInStrict"/>
-  <int value="1766" label="V8PromiseConstructorReturnedUndefined"/>
-  <int value="1767" label="FormSubmittedWithUnclosedFormControl"/>
-  <int value="1768" label="DocumentCompleteURLHTTPContainingNewline"/>
-  <int value="1769" label="DocumentCompleteURLHTTPContainingLessThan"/>
-  <int value="1770"
-      label="DocumentCompleteURLHTTPContainingNewlineAndLessThan"/>
-  <int value="1771" label="DocumentCompleteURLNonHTTPContainingNewline"/>
-  <int value="1772" label="CSSSelectorInternalMediaControlsTextTrackList"/>
-  <int value="1773" label="CSSSelectorInternalMediaControlsTextTrackListItem"/>
-  <int value="1774"
-      label="CSSSelectorInternalMediaControlsTextTrackListItemInput"/>
-  <int value="1775"
-      label="CSSSelectorInternalMediaControlsTextTrackListKindCaptions"/>
-  <int value="1776"
-      label="CSSSelectorInternalMediaControlsTextTrackListKindSubtitles"/>
-  <int value="1777" label="ScrollbarUseVerticalScrollbarButton"/>
-  <int value="1778" label="ScrollbarUseVerticalScrollbarThumb"/>
-  <int value="1779" label="ScrollbarUseVerticalScrollbarTrack"/>
-  <int value="1780" label="ScrollbarUseHorizontalScrollbarButton"/>
-  <int value="1781" label="ScrollbarUseHorizontalScrollbarThumb"/>
-  <int value="1782" label="ScrollbarUseHorizontalScrollbarTrack"/>
-  <int value="1783" label="HTMLTableCellElementColspan"/>
-  <int value="1784" label="HTMLTableCellElementColspanGreaterThan1000"/>
-  <int value="1785" label="HTMLTableCellElementColspanGreaterThan8190"/>
-  <int value="1786" label="SelectionAddRangeIntersect"/>
-  <int value="1787" label="PostMessageFromInsecureToSecureToplevel"/>
-  <int value="1788" label="V8MediaSession_Metadata_AttributeGetter"/>
-  <int value="1789" label="V8MediaSession_Metadata_AttributeSetter"/>
-  <int value="1790" label="V8MediaSession_PlaybackState_AttributeGetter"/>
-  <int value="1791" label="V8MediaSession_PlaybackState_AttributeSetter"/>
-  <int value="1792" label="V8MediaSession_SetActionHandler_Method"/>
-  <int value="1793" label="WebNFCPush"/>
-  <int value="1794" label="WebNFCCancelPush"/>
-  <int value="1795" label="WebNFCWatch"/>
-  <int value="1796" label="WebNFCCancelWatch"/>
-  <int value="1797" label="AudioParamCancelAndHoldAtTime"/>
-  <int value="1798" label="CSSValueUserModifyReadOnly"/>
-  <int value="1799" label="CSSValueUserModifyReadWrite"/>
-  <int value="1800" label="CSSValueUserModifyReadWritePlaintextOnly"/>
-  <int value="1801" label="V8TextDetector_Detect_Method"/>
-  <int value="1802" label="CSSValueOnDemand"/>
-  <int value="1803" label="ServiceWorkerNavigationPreload"/>
-  <int value="1804" label="FullscreenRequestWithPendingElement"/>
-  <int value="1805"
-      label="HTMLIFrameElementAllowfullscreenAttributeSetAfterContentLoad"/>
-  <int value="1806" label="PointerEventSetCaptureOutsideDispatch"/>
-  <int value="1807" label="NotificationPermissionRequestedInsecureOrigin"/>
-  <int value="1808" label="V8DeprecatedStorageInfo_QueryUsageAndQuota_Method"/>
-  <int value="1809" label="V8DeprecatedStorageInfo_RequestQuota_Method"/>
-  <int value="1810" label="V8DeprecatedStorageQuota_QueryUsageAndQuota_Method"/>
-  <int value="1811" label="V8DeprecatedStorageQuota_RequestQuota_Method"/>
-  <int value="1812" label="V8FileReaderSync_Constructor"/>
-  <int value="1813" label="UncancellableTouchEventPreventDefaulted"/>
-  <int value="1814"
-      label="UncancellableTouchEventDueToMainThreadResponsivenessPreventDefaulted"/>
-  <int value="1815" label="V8HTMLVideoElement_Poster_AttributeGetter"/>
-  <int value="1816" label="V8HTMLVideoElement_Poster_AttributeSetter"/>
-  <int value="1817" label="NotificationPermissionRequestedIframe"/>
-  <int value="1818" label="FileReaderSyncInServiceWorker"/>
-  <int value="1819" label="PresentationReceiverInsecureOrigin"/>
-  <int value="1820" label="PresentationReceiverSecureOrigin"/>
-  <int value="1821" label="PresentationRequestInsecureOrigin"/>
-  <int value="1822" label="PresentationRequestSecureOrigin"/>
-  <int value="1823" label="RtcpMuxPolicyNegotiate"/>
-  <int value="1824" label="DOMClobberedVariableAccessed"/>
-  <int value="1825" label="HTMLDocumentCreateProcessingInstruction"/>
-  <int value="1826" label="FetchResponseConstructionWithStream"/>
-  <int value="1827" label="LocationOrigin"/>
-  <int value="1828" label="DocumentOrigin"/>
-  <int value="1829" label="SubtleCryptoOnlyStrictSecureContextCheckFailed"/>
-  <int value="1830" label="Canvas2DFilter"/>
-  <int value="1831" label="Canvas2DImageSmoothingQuality"/>
-  <int value="1832" label="CanvasToBlob"/>
-  <int value="1833" label="CanvasToDataURL"/>
-  <int value="1834" label="OffscreenCanvasConvertToBlob"/>
-  <int value="1835" label="SVGInCanvas2D"/>
-  <int value="1836" label="SVGInWebGL"/>
-  <int value="1837" label="SelectionFuncionsChangeFocus"/>
-  <int value="1838" label="HTMLObjectElementGetter"/>
-  <int value="1839" label="HTMLObjectElementSetter"/>
-  <int value="1840" label="HTMLEmbedElementGetter"/>
-  <int value="1841" label="HTMLEmbedElementSetter"/>
-  <int value="1842" label="TransformUsesBoxSizeOnSVG"/>
-  <int value="1843" label="ScrollByKeyboardArrowKeys"/>
-  <int value="1844" label="ScrollByKeyboardPageUpDownKeys"/>
-  <int value="1845" label="ScrollByKeyboardHomeEndKeys"/>
-  <int value="1846" label="ScrollByKeyboardSpacebarKey"/>
-  <int value="1847" label="ScrollByTouch"/>
-  <int value="1848" label="ScrollByWheel"/>
-  <int value="1849" label="ScheduledActionIgnored"/>
-  <int value="1850" label="GetCanvas2DContextAttributes"/>
-  <int value="1851" label="V8HTMLInputElement_Capture_AttributeGetter"/>
-  <int value="1852" label="V8HTMLInputElement_Capture_AttributeSetter"/>
-  <int value="1853" label="HTMLMediaElementControlsListAttribute"/>
-  <int value="1854" label="HTMLMediaElementControlsListNoDownload"/>
-  <int value="1855" label="HTMLMediaElementControlsListNoFullscreen"/>
-  <int value="1856" label="HTMLMediaElementControlsListNoRemotePlayback"/>
-  <int value="1857" label="PointerEventClickRetargetCausedByCapture"/>
-  <int value="1858" label="VRDisplayIsConnected"/>
-  <int value="1859" label="VRDisplayResetPose"/>
-  <int value="1860" label="VRDisplayCapabilitiesHasOrientation"/>
-  <int value="1861" label="VRDisplayDisplayName"/>
-  <int value="1862" label="VREyeParametersOffset"/>
-  <int value="1863" label="VRPoseLinearVelocity"/>
-  <int value="1864" label="VRPoseLinearAcceleration"/>
-  <int value="1865" label="VRPoseAngularVelocity"/>
-  <int value="1866" label="VRPoseAngularAcceleration"/>
-  <int value="1867" label="CSSOverflowPaged"/>
-</enum>
-
-<enum name="FetchRequestMode" type="int">
-  <int value="0" label="SameOrigin"/>
-  <int value="1" label="NoCORS"/>
-  <int value="2" label="CORS"/>
-  <int value="3" label="CORSWithForcedPreflight"/>
-  <int value="4" label="Navigate"/>
-</enum>
-
-<enum name="FFmpegCodecHashes" type="int">
-  <int value="-2140893972" label="bfi"/>
-  <int value="-2126016986" label="vp3"/>
-  <int value="-2112225664" label="pcm_s32be"/>
-  <int value="-2100141199" label="loco"/>
-  <int value="-2095396703" label="v408"/>
-  <int value="-2093680186" label="amv"/>
-  <int value="-2089660750" label="h263"/>
-  <int value="-2087604036" label="adpcm_ima_smjpeg"/>
-  <int value="-2077566827" label="musepack8"/>
-  <int value="-2057234831" label="8svx_exp"/>
-  <int value="-2039593792" label="targa"/>
-  <int value="-2026984418" label="dirac"/>
-  <int value="-2024394607" label="adpcm_ima_ws"/>
-  <int value="-2022450851" label="sunrast"/>
-  <int value="-2013419814" label="dsd_lsbf_planar"/>
-  <int value="-2002502337" label="tiff"/>
-  <int value="-1978772551" label="dvaudio"/>
-  <int value="-1956356936" label="wmavoice"/>
-  <int value="-1936051434" label="h261"/>
-  <int value="-1935659465" label="text"/>
-  <int value="-1929182263" label="rl2"/>
-  <int value="-1920776714" label="a64_multi5"/>
-  <int value="-1920272933" label="mlp"/>
-  <int value="-1913457333" label="smackvideo"/>
-  <int value="-1910182388" label="dds"/>
-  <int value="-1877492821" label="ws_vqa"/>
-  <int value="-1868061100" label="avrp"/>
-  <int value="-1866047250" label="brender_pix_deprecated"/>
-  <int value="-1861192281" label="c93"/>
-  <int value="-1859416370" label="mts2"/>
-  <int value="-1855199147" label="adpcm_yamaha"/>
-  <int value="-1854941320" label="tgq"/>
-  <int value="-1848915146" label="adpcm_ima_iss"/>
-  <int value="-1847740489" label="flac"/>
-  <int value="-1847405305" label="qdmc"/>
-  <int value="-1837462345" label="bmv_video"/>
-  <int value="-1787878546" label="adpcm_afc"/>
-  <int value="-1782518388" label="adpcm_vima_deprecated"/>
-  <int value="-1769822834" label="vmdaudio"/>
-  <int value="-1754427880" label="frwu"/>
-  <int value="-1746405263" label="none"/>
-  <int value="-1746190470" label="adpcm_ima_amv"/>
-  <int value="-1742178896" label="cinepak"/>
-  <int value="-1722959117" label="cook"/>
-  <int value="-1694324852" label="adpcm_ima_rad"/>
-  <int value="-1653946850" label="mp3on4"/>
-  <int value="-1638592334" label="msmpeg4v3"/>
-  <int value="-1625425962" label="dpx"/>
-  <int value="-1620040130" label="vp6"/>
-  <int value="-1596796424" label="pcm_f32le"/>
-  <int value="-1580836816" label="cdxl"/>
-  <int value="-1578877775" label="twinvq"/>
-  <int value="-1570048110" label="mace3"/>
-  <int value="-1558356361" label="paf_audio"/>
-  <int value="-1546633359" label="dss_sp"/>
-  <int value="-1538621442" label="tak"/>
-  <int value="-1535770868" label="mov_text"/>
-  <int value="-1532420090" label="dvb_teletext"/>
-  <int value="-1518326441" label="cpia"/>
-  <int value="-1516599706" label="stl"/>
-  <int value="-1510953689" label="ulti"/>
-  <int value="-1495077719" label="wavesynth"/>
-  <int value="-1493473944" label="mp1"/>
-  <int value="-1488471023" label="aac_latm"/>
-  <int value="-1471896197" label="adpcm_4xm"/>
-  <int value="-1458812472" label="vble"/>
-  <int value="-1452408746" label="bin_data"/>
-  <int value="-1437754593" label="tqi"/>
-  <int value="-1398094744" label="brender_pix"/>
-  <int value="-1396201900" label="lagarith"/>
-  <int value="-1394735166" label="s302m"/>
-  <int value="-1366158780" label="mvc2"/>
-  <int value="-1346295474" label="dfa"/>
-  <int value="-1335819014" label="adpcm_ea_r3"/>
-  <int value="-1333697928" label="rv10"/>
-  <int value="-1328796639" label="pcm_s32le_planar_deprecated"/>
-  <int value="-1326344691" label="wmalossless"/>
-  <int value="-1276285619" label="subviewer1"/>
-  <int value="-1267322736" label="evrc"/>
-  <int value="-1253653962" label="cljr"/>
-  <int value="-1249151864" label="westwood_snd1"/>
-  <int value="-1234201101" label="xan_dpcm"/>
-  <int value="-1228141376" label="aic"/>
-  <int value="-1217250068" label="pcm_u24le"/>
-  <int value="-1216801956" label="kmvc"/>
-  <int value="-1216327014" label="ansi"/>
-  <int value="-1212214965" label="svq3"/>
-  <int value="-1205406239" label="mpeg4"/>
-  <int value="-1192008277" label="flashsv"/>
-  <int value="-1181422407" label="gif"/>
-  <int value="-1156009526" label="wmv1"/>
-  <int value="-1153001952" label="eia_608"/>
-  <int value="-1150003992" label="nellymoser"/>
-  <int value="-1147304270" label="pgm"/>
-  <int value="-1146321910" label="adpcm_sbpro_4"/>
-  <int value="-1124358604" label="qdraw"/>
-  <int value="-1094512964" label="hevc"/>
-  <int value="-1082894560" label="y41p"/>
-  <int value="-1069291012" label="roq"/>
-  <int value="-1055791926" label="wmv2"/>
-  <int value="-1052495685" label="adpcm_ea_xas"/>
-  <int value="-1050536726" label="fic"/>
-  <int value="-1050267191" label="theora"/>
-  <int value="-1047975380" label="aura"/>
-  <int value="-1038298513" label="iac"/>
-  <int value="-1033247386" label="pcm_u24be"/>
-  <int value="-1030131048" label="ra_288"/>
-  <int value="-1011667768" label="sgirle"/>
-  <int value="-1010059925" label="cdgraphics"/>
-  <int value="-993429906" label="webp_deprecated"/>
-  <int value="-991743010" label="pictor"/>
-  <int value="-986254855" label="qtrle"/>
-  <int value="-984524901" label="wmapro"/>
-  <int value="-982785322" label="roq_dpcm"/>
-  <int value="-967736249" label="idf"/>
-  <int value="-963536204" label="tmv"/>
-  <int value="-961342190" label="truespeech"/>
-  <int value="-955936385" label="qdm2"/>
-  <int value="-937993216" label="cyuv"/>
-  <int value="-908137771" label="mss2"/>
-  <int value="-898663359" label="paf_video"/>
-  <int value="-891450332" label="qcelp"/>
-  <int value="-881893142" label="paf_video_deprecated"/>
-  <int value="-878761755" label="alac"/>
-  <int value="-872951009" label="vp7"/>
-  <int value="-870965910" label="mszh"/>
-  <int value="-868148645" label="ttf"/>
-  <int value="-853586131" label="eac3"/>
-  <int value="-839127813" label="adpcm_adx"/>
-  <int value="-820705472" label="timed_id3"/>
-  <int value="-816209197" label="vima"/>
-  <int value="-815578090" label="ssa"/>
-  <int value="-804708185" label="vb"/>
-  <int value="-799004205" label="thp"/>
-  <int value="-792737437" label="mjpeg"/>
-  <int value="-781332453" label="xbm"/>
-  <int value="-780629337" label="adpcm_ima_oki"/>
-  <int value="-777478450" label="iff_byterun1"/>
-  <int value="-776406198" label="hdmv_pgs_subtitle"/>
-  <int value="-773314651" label="adpcm_thp_le"/>
-  <int value="-755809410" label="xface"/>
-  <int value="-750906124" label="sonic"/>
-  <int value="-746782512" label="nuv"/>
-  <int value="-728484627" label="vp6f"/>
-  <int value="-711076000" label="ilbc"/>
-  <int value="-693682032" label="png"/>
-  <int value="-665301881" label="kgv1"/>
-  <int value="-651841063" label="musepack7"/>
-  <int value="-644671397" label="pcm_s16le"/>
-  <int value="-644168765" label="dvvideo"/>
-  <int value="-630356729" label="paf_audio_deprecated"/>
-  <int value="-624149477" label="mad"/>
-  <int value="-606142900" label="microdvd"/>
-  <int value="-605150423" label="jacosub"/>
-  <int value="-600721750" label="pcm_s16le_planar"/>
-  <int value="-597857853" label="fraps"/>
-  <int value="-594775425" label="tdsc"/>
-  <int value="-583421433" label="pcm_zork"/>
-  <int value="-573567800" label="ffvhuff"/>
-  <int value="-558754697" label="dxtory"/>
-  <int value="-547412719" label="a64_multi"/>
-  <int value="-530757209" label="iff_ilbm"/>
-  <int value="-522844891" label="tta"/>
-  <int value="-515467965" label="yop"/>
-  <int value="-483644003" label="mvc1"/>
-  <int value="-478544739" label="mxpeg"/>
-  <int value="-469833042" label="sgi"/>
-  <int value="-462654404" label="pbm"/>
-  <int value="-450113811" label="vp8"/>
-  <int value="-449164482" label="smv"/>
-  <int value="-434097103" label="8svx_fib"/>
-  <int value="-431043877" label="rv30"/>
-  <int value="-418117523" label="exr_deprecated"/>
-  <int value="-414733739" label="hevc_deprecated"/>
-  <int value="-411871512" label="4xm"/>
-  <int value="-351638235" label="mace6"/>
-  <int value="-335532805" label="v308"/>
-  <int value="-321063470" label="cavs"/>
-  <int value="-312812574" label="dsicinaudio"/>
-  <int value="-305868762" label="ptx"/>
-  <int value="-302658824" label="dxa"/>
-  <int value="-302292845" label="atrac1"/>
-  <int value="-268375107" label="indeo2"/>
-  <int value="-262604522" label="qpeg"/>
-  <int value="-259187129" label="interplay_dpcm"/>
-  <int value="-235472313" label="pjs"/>
-  <int value="-197551526" label="vp7_deprecated"/>
-  <int value="-195649673" label="mmvideo"/>
-  <int value="-194494447" label="sanm"/>
-  <int value="-179123055" label="hnm4video"/>
-  <int value="-166593824" label="bintext"/>
-  <int value="-153142813" label="adpcm_ima_qt"/>
-  <int value="-135875472" label="pcm_s24le_planar"/>
-  <int value="-108909529" label="adpcm_ea"/>
-  <int value="-96441857" label="escape124"/>
-  <int value="-92926716" label="indeo3"/>
-  <int value="-92742166" label="adpcm_swf"/>
-  <int value="-85419673" label="dvb_subtitle"/>
-  <int value="-83742388" label="metasound"/>
-  <int value="-81607027" label="speex"/>
-  <int value="-65839877" label="amr_nb"/>
-  <int value="-50131597" label="avui"/>
-  <int value="-41854216" label="msrle"/>
-  <int value="-35300163" label="pam"/>
-  <int value="-30500564" label="rv20"/>
-  <int value="-27780731" label="h263i"/>
-  <int value="-23682808" label="mjpegb"/>
-  <int value="-21755362" label="adpcm_sbpro_3"/>
-  <int value="-19624220" label="msmpeg4v1"/>
-  <int value="123753" label="bethsoftvid"/>
-  <int value="5678717" label="adpcm_vima"/>
-  <int value="6153938" label="ffv1"/>
-  <int value="60024993" label="sol_dpcm"/>
-  <int value="73149662" label="escape130_deprecated"/>
-  <int value="76029796" label="mss1"/>
-  <int value="86453097" label="utvideo"/>
-  <int value="87186225" label="vmdvideo"/>
-  <int value="95607943" label="alias_pix"/>
-  <int value="98199414" label="wmv3image"/>
-  <int value="113741725" label="shorten"/>
-  <int value="132664538" label="gsm_ms"/>
-  <int value="136569655" label="adpcm_ima_ea_eacs"/>
-  <int value="146059120" label="adpcm_ima_dk3"/>
-  <int value="173919536" label="dsd_msbf_planar"/>
-  <int value="174382442" label="g729"/>
-  <int value="180797897" label="xsub"/>
-  <int value="197903705" label="yuv4"/>
-  <int value="197942357" label="mdec"/>
-  <int value="212901544" label="pcm_f64le"/>
-  <int value="227190580" label="adpcm_ea_r1"/>
-  <int value="231296785" label="jpegls"/>
-  <int value="242042871" label="vc1image"/>
-  <int value="250226160" label="pcm_s8"/>
-  <int value="254320798" label="pcm_dvd"/>
-  <int value="265862349" label="binkaudio_rdft"/>
-  <int value="278236230" label="webp"/>
-  <int value="284053917" label="sp5x"/>
-  <int value="287849834" label="msvideo1"/>
-  <int value="294769071" label="pcm_s16be_planar"/>
-  <int value="309105352" label="bmp"/>
-  <int value="309392554" label="dsd_msbf"/>
-  <int value="311400023" label="zlib"/>
-  <int value="317095520" label="adpcm_ima_apc"/>
-  <int value="342736256" label="avrn"/>
-  <int value="343186566" label="rpza"/>
-  <int value="347789448" label="vplayer"/>
-  <int value="396111544" label="otf"/>
-  <int value="412600562" label="pcm_u16be"/>
-  <int value="429618670" label="jv"/>
-  <int value="441761537" label="indeo4"/>
-  <int value="445373194" label="tiertexseqvideo"/>
-  <int value="453915988" label="adpcm_ima_ea_sead"/>
-  <int value="461173543" label="smackaudio"/>
-  <int value="463008496" label="dvd_subtitle"/>
-  <int value="465125740" label="realtext"/>
-  <int value="486681814" label="8bps"/>
-  <int value="489448448" label="vc1"/>
-  <int value="491790310" label="vcr1"/>
-  <int value="500576677" label="hap"/>
-  <int value="503945275" label="motionpixels"/>
-  <int value="525499602" label="vmnc"/>
-  <int value="552661632" label="adpcm_xa"/>
-  <int value="558339021" label="jpeg2000"/>
-  <int value="563328753" label="4gv"/>
-  <int value="565711017" label="pcm_s24le"/>
-  <int value="567624278" label="asv2"/>
-  <int value="573633387" label="pcm_f64be"/>
-  <int value="579930439" label="cmv"/>
-  <int value="580364763" label="txd"/>
-  <int value="588676310" label="pcm_s8_planar"/>
-  <int value="603287142" label="mpl2"/>
-  <int value="610300309" label="v210x"/>
-  <int value="634747673" label="avs"/>
-  <int value="640012049" label="adpcm_ms"/>
-  <int value="648238710" label="xan_wc3"/>
-  <int value="695230495" label="aura2"/>
-  <int value="722738593" label="escape130"/>
-  <int value="724570383" label="rawvideo"/>
-  <int value="726397522" label="wmv3"/>
-  <int value="746742638" label="truehd"/>
-  <int value="747771882" label="dts"/>
-  <int value="753949422" label="indeo5"/>
-  <int value="781916095" label="ayuv"/>
-  <int value="789960893" label="bmv_audio"/>
-  <int value="802192292" label="adpcm_ima_dk4"/>
-  <int value="814609554" label="ralf"/>
-  <int value="816220395" label="apng"/>
-  <int value="820788836" label="subviewer"/>
-  <int value="855521935" label="smvjpeg"/>
-  <int value="856849194" label="tgv"/>
-  <int value="865955000" label="smc"/>
-  <int value="903853106" label="012v"/>
-  <int value="913577987" label="wmav2"/>
-  <int value="944040689" label="ppm"/>
-  <int value="944980366" label="idcin"/>
-  <int value="946455966" label="aasc"/>
-  <int value="948849813" label="adpcm_ima_wav"/>
-  <int value="949116467" label="binkvideo"/>
-  <int value="949591507" label="vp9"/>
-  <int value="972771007" label="mpeg2video"/>
-  <int value="973601133" label="hq_hqa"/>
-  <int value="981942659" label="opus"/>
-  <int value="997031855" label="truemotion2"/>
-  <int value="997190932" label="atrac3p"/>
-  <int value="997732996" label="xwd"/>
-  <int value="1001166722" label="xan_wc4"/>
-  <int value="1008492983" label="msmpeg4v2"/>
-  <int value="1020187009" label="rv40"/>
-  <int value="1022607787" label="ape"/>
-  <int value="1033850553" label="snow"/>
-  <int value="1034034342" label="sipr"/>
-  <int value="1041617024" label="tak_deprecated"/>
-  <int value="1049882649" label="binkaudio_dct"/>
-  <int value="1053922807" label="g723_1"/>
-  <int value="1066477861" label="vorbis"/>
-  <int value="1077386855" label="cscd"/>
-  <int value="1098721511" label="g2m"/>
-  <int value="1127772984" label="imc"/>
-  <int value="1138712147" label="ac3"/>
-  <int value="1139877352" label="dnxhd"/>
-  <int value="1158772651" label="anm"/>
-  <int value="1165132763" label="opus_deprecated"/>
-  <int value="1194572884" label="g2m_deprecated"/>
-  <int value="1210249397" label="avc"/>
-  <int value="1213003867" label="hdmv_text_subtitle"/>
-  <int value="1236695157" label="pcm_s32le_planar"/>
-  <int value="1244283551" label="mpeg1video"/>
-  <int value="1246598929" label="flic"/>
-  <int value="1251286213" label="dxv"/>
-  <int value="1258259575" label="pcm_lxf"/>
-  <int value="1271374381" label="wmav1"/>
-  <int value="1294385179" label="mp3"/>
-  <int value="1299068647" label="truemotion1"/>
-  <int value="1310993795" label="zerocodec"/>
-  <int value="1311566537" label="flv1"/>
-  <int value="1312943731" label="zmbv"/>
-  <int value="1313131096" label="h264"/>
-  <int value="1318324895" label="pcm_bluray"/>
-  <int value="1333708519" label="pcm_u8"/>
-  <int value="1366148173" label="adpcm_g726le"/>
-  <int value="1375054610" label="aac"/>
-  <int value="1395029615" label="adpcm_ea_maxis_xa"/>
-  <int value="1397947482" label="dsd_lsbf"/>
-  <int value="1411832541" label="pcm_f32be"/>
-  <int value="1413182900" label="dvd_nav_packet"/>
-  <int value="1462568683" label="srt"/>
-  <int value="1467359000" label="msa1"/>
-  <int value="1468951708" label="comfortnoise"/>
-  <int value="1469210692" label="mp2"/>
-  <int value="1483758205" label="celt"/>
-  <int value="1502256638" label="vp5"/>
-  <int value="1525492969" label="asv1"/>
-  <int value="1526182480" label="klv"/>
-  <int value="1535518292" label="pcm_s24le_planar_deprecated"/>
-  <int value="1536086449" label="pcx"/>
-  <int value="1550758811" label="mpegvideo_xvmc"/>
-  <int value="1565855078" label="adpcm_ea_r2"/>
-  <int value="1567457517" label="adpcm_g722"/>
-  <int value="1571821879" label="dsicinvideo"/>
-  <int value="1578202877" label="h263p"/>
-  <int value="1603330014" label="r10k"/>
-  <int value="1622843532" label="adpcm_sbpro_2"/>
-  <int value="1626738193" label="mp3adu"/>
-  <int value="1636940385" label="targa_y216"/>
-  <int value="1647791075" label="adpcm_g726"/>
-  <int value="1651871844" label="svq1"/>
-  <int value="1656834662" label="voxware"/>
-  <int value="1671488988" label="adpcm_ct"/>
-  <int value="1681362983" label="webvtt"/>
-  <int value="1681507854" label="exr"/>
-  <int value="1704161151" label="pcm_u32be"/>
-  <int value="1724507916" label="ra_144"/>
-  <int value="1729587546" label="pgmyuv"/>
-  <int value="1730373804" label="pcm_alaw"/>
-  <int value="1741236466" label="subrip"/>
-  <int value="1771307928" label="flashsv2"/>
-  <int value="1789213623" label="wavpack"/>
-  <int value="1804125128" label="pcm_s24be"/>
-  <int value="1813293157" label="hqx"/>
-  <int value="1818519290" label="sonicls"/>
-  <int value="1822179743" label="pcm_s24daud"/>
-  <int value="1823608208" label="pcm_mulaw"/>
-  <int value="1827051583" label="adpcm_thp"/>
-  <int value="1834381325" label="adpcm_dtk"/>
-  <int value="1854844146" label="tscc"/>
-  <int value="1890319788" label="mp4als"/>
-  <int value="1896040704" label="cllc"/>
-  <int value="1913299765" label="vixl"/>
-  <int value="1947892273" label="prores"/>
-  <int value="1951984033" label="v210"/>
-  <int value="1961440145" label="vp6a"/>
-  <int value="1965599083" label="sami"/>
-  <int value="1981484138" label="pcm_u32le"/>
-  <int value="1997862473" label="interplayvideo"/>
-  <int value="2002251246" label="tscc2"/>
-  <int value="2005720882" label="atrac3"/>
-  <int value="2026594607" label="ass"/>
-  <int value="2032395845" label="pcm_u16le"/>
-  <int value="2041774878" label="huffyuv"/>
-  <int value="2047102762" label="sanm_deprecated"/>
-  <int value="2053719989" label="r210"/>
-  <int value="2071582326" label="xbin"/>
-  <int value="2080704511" label="pcm_s16be"/>
-  <int value="2084073402" label="ljpeg"/>
-  <int value="2086226415" label="pcm_s32le"/>
-  <int value="2086394367" label="gsm"/>
-  <int value="2100540076" label="amr_wb"/>
-  <int value="2118960502" label="mimic"/>
-  <int value="2128505640" label="wnv1"/>
-  <int value="2146164868" label="v410"/>
-</enum>
-
-<enum name="FFmpegCodecs" type="int">
-  <obsolete>
-    deprecated Sep 15 2015 in favor of FFmpegCodecHashes
-  </obsolete>
-  <int value="0" label="NONE"/>
-  <int value="1" label="MPEG1VIDEO"/>
-  <int value="2" label="MPEG2VIDEO"/>
-  <int value="3" label="MPEG2VIDEO_XVMC"/>
-  <int value="4" label="H261"/>
-  <int value="5" label="H263"/>
-  <int value="6" label="RV10"/>
-  <int value="7" label="RV20"/>
-  <int value="8" label="MJPEG"/>
-  <int value="9" label="MJPEGB"/>
-  <int value="10" label="LJPEG"/>
-  <int value="11" label="SP5X"/>
-  <int value="12" label="JPEGLS"/>
-  <int value="13" label="MPEG4"/>
-  <int value="14" label="RAWVIDEO"/>
-  <int value="15" label="MSMPEG4V1"/>
-  <int value="16" label="MSMPEG4V2"/>
-  <int value="17" label="MSMPEG4V3"/>
-  <int value="18" label="WMV1"/>
-  <int value="19" label="WMV2"/>
-  <int value="20" label="H263P"/>
-  <int value="21" label="H263I"/>
-  <int value="22" label="FLV1"/>
-  <int value="23" label="SVQ1"/>
-  <int value="24" label="SVQ3"/>
-  <int value="25" label="DVVIDEO"/>
-  <int value="26" label="HUFFYUV"/>
-  <int value="27" label="CYUV"/>
-  <int value="28" label="H264"/>
-  <int value="29" label="INDEO3"/>
-  <int value="30" label="VP3"/>
-  <int value="31" label="THEORA"/>
-  <int value="32" label="ASV1"/>
-  <int value="33" label="ASV2"/>
-  <int value="34" label="FFV1"/>
-  <int value="35" label="4XM"/>
-  <int value="36" label="VCR1"/>
-  <int value="37" label="CLJR"/>
-  <int value="38" label="MDEC"/>
-  <int value="39" label="ROQ"/>
-  <int value="40" label="INTERPLAY_VIDEO"/>
-  <int value="41" label="XAN_WC3"/>
-  <int value="42" label="XAN_WC4"/>
-  <int value="43" label="RPZA"/>
-  <int value="44" label="CINEPAK"/>
-  <int value="45" label="WS_VQA"/>
-  <int value="46" label="MSRLE"/>
-  <int value="47" label="MSVIDEO1"/>
-  <int value="48" label="IDCIN"/>
-  <int value="49" label="8BPS"/>
-  <int value="50" label="SMC"/>
-  <int value="51" label="FLIC"/>
-  <int value="52" label="TRUEMOTION1"/>
-  <int value="53" label="VMDVIDEO"/>
-  <int value="54" label="MSZH"/>
-  <int value="55" label="ZLIB"/>
-  <int value="56" label="QTRLE"/>
-  <int value="57" label="SNOW"/>
-  <int value="58" label="TSCC"/>
-  <int value="59" label="ULTI"/>
-  <int value="60" label="QDRAW"/>
-  <int value="61" label="VIXL"/>
-  <int value="62" label="QPEG"/>
-  <int value="63" label="PNG"/>
-  <int value="64" label="PPM"/>
-  <int value="65" label="PBM"/>
-  <int value="66" label="PGM"/>
-  <int value="67" label="PGMYUV"/>
-  <int value="68" label="PAM"/>
-  <int value="69" label="FFVHUFF"/>
-  <int value="70" label="RV30"/>
-  <int value="71" label="RV40"/>
-  <int value="72" label="VC1"/>
-  <int value="73" label="WMV3"/>
-  <int value="74" label="LOCO"/>
-  <int value="75" label="WNV1"/>
-  <int value="76" label="AASC"/>
-  <int value="77" label="INDEO2"/>
-  <int value="78" label="FRAPS"/>
-  <int value="79" label="TRUEMOTION2"/>
-  <int value="80" label="BMP"/>
-  <int value="81" label="CSCD"/>
-  <int value="82" label="MMVIDEO"/>
-  <int value="83" label="ZMBV"/>
-  <int value="84" label="AVS"/>
-  <int value="85" label="SMACKVIDEO"/>
-  <int value="86" label="NUV"/>
-  <int value="87" label="KMVC"/>
-  <int value="88" label="FLASHSV"/>
-  <int value="89" label="CAVS"/>
-  <int value="90" label="JPEG2000"/>
-  <int value="91" label="VMNC"/>
-  <int value="92" label="VP5"/>
-  <int value="93" label="VP6"/>
-  <int value="94" label="VP6F"/>
-  <int value="95" label="TARGA"/>
-  <int value="96" label="DSICINVIDEO"/>
-  <int value="97" label="TIERTEXSEQVIDEO"/>
-  <int value="98" label="TIFF"/>
-  <int value="99" label="GIF"/>
-  <int value="100" label="DXA"/>
-  <int value="101" label="DNXHD"/>
-  <int value="102" label="THP"/>
-  <int value="103" label="SGI"/>
-  <int value="104" label="C93"/>
-  <int value="105" label="BETHSOFTVID"/>
-  <int value="106" label="PTX"/>
-  <int value="107" label="TXD"/>
-  <int value="108" label="VP6A"/>
-  <int value="109" label="AMV"/>
-  <int value="110" label="VB"/>
-  <int value="111" label="PCX"/>
-  <int value="112" label="SUNRAST"/>
-  <int value="113" label="INDEO4"/>
-  <int value="114" label="INDEO5"/>
-  <int value="115" label="MIMIC"/>
-  <int value="116" label="RL2"/>
-  <int value="117" label="ESCAPE124"/>
-  <int value="118" label="DIRAC"/>
-  <int value="119" label="BFI"/>
-  <int value="120" label="CMV"/>
-  <int value="121" label="MOTIONPIXELS"/>
-  <int value="122" label="TGV"/>
-  <int value="123" label="TGQ"/>
-  <int value="124" label="TQI"/>
-  <int value="125" label="AURA"/>
-  <int value="126" label="AURA2"/>
-  <int value="127" label="V210X"/>
-  <int value="128" label="TMV"/>
-  <int value="129" label="V210"/>
-  <int value="130" label="DPX"/>
-  <int value="131" label="MAD"/>
-  <int value="132" label="FRWU"/>
-  <int value="133" label="FLASHSV2"/>
-  <int value="134" label="CDGRAPHICS"/>
-  <int value="135" label="R210"/>
-  <int value="136" label="ANM"/>
-  <int value="137" label="BINKVIDEO"/>
-  <int value="138" label="IFF_ILBM"/>
-  <int value="139" label="IFF_BYTERUN1"/>
-  <int value="140" label="KGV1"/>
-  <int value="141" label="YOP"/>
-  <int value="142" label="VP8"/>
-  <int value="143" label="PICTOR"/>
-  <int value="144" label="ANSI"/>
-  <int value="145" label="A64_MULTI"/>
-  <int value="146" label="A64_MULTI5"/>
-  <int value="147" label="R10K"/>
-  <int value="148" label="MXPEG"/>
-  <int value="149" label="LAGARITH"/>
-  <int value="150" label="PRORES"/>
-  <int value="151" label="JV"/>
-  <int value="152" label="DFA"/>
-  <int value="153" label="WMV3IMAGE"/>
-  <int value="154" label="VC1IMAGE"/>
-  <int value="155" label="UTVIDEO"/>
-  <int value="156" label="BMV_VIDEO"/>
-  <int value="157" label="VBLE"/>
-  <int value="158" label="DXTORY"/>
-  <int value="159" label="V410"/>
-  <int value="160" label="XWD"/>
-  <int value="161" label="CDXL"/>
-  <int value="162" label="XBM"/>
-  <int value="163" label="ZEROCODEC"/>
-  <int value="164" label="MSS1"/>
-  <int value="165" label="MSA1"/>
-  <int value="166" label="TSCC2"/>
-  <int value="167" label="MTS2"/>
-  <int value="168" label="CLLC"/>
-  <int value="169" label="MSS2"/>
-  <int value="170" label="VP9"/>
-  <int value="65536" label="PCM_S16LE"/>
-  <int value="65537" label="PCM_S16BE"/>
-  <int value="65538" label="PCM_U16LE"/>
-  <int value="65539" label="PCM_U16BE"/>
-  <int value="65540" label="PCM_S8"/>
-  <int value="65541" label="PCM_U8"/>
-  <int value="65542" label="PCM_MULAW"/>
-  <int value="65543" label="PCM_ALAW"/>
-  <int value="65544" label="PCM_S32LE"/>
-  <int value="65545" label="PCM_S32BE"/>
-  <int value="65546" label="PCM_U32LE"/>
-  <int value="65547" label="PCM_U32BE"/>
-  <int value="65548" label="PCM_S24LE"/>
-  <int value="65549" label="PCM_S24BE"/>
-  <int value="65550" label="PCM_U24LE"/>
-  <int value="65551" label="PCM_U24BE"/>
-  <int value="65552" label="PCM_S24DAUD"/>
-  <int value="65553" label="PCM_ZORK"/>
-  <int value="65554" label="PCM_S16LE_PLANAR"/>
-  <int value="65555" label="PCM_DVD"/>
-  <int value="65556" label="PCM_F32BE"/>
-  <int value="65557" label="PCM_F32LE"/>
-  <int value="65558" label="PCM_F64BE"/>
-  <int value="65559" label="PCM_F64LE"/>
-  <int value="65560" label="PCM_BLURAY"/>
-  <int value="65561" label="PCM_LXF"/>
-  <int value="65562" label="S302M"/>
-  <int value="65563" label="PCM_S8_PLANAR"/>
-  <int value="69632" label="ADPCM_IMA_QT"/>
-  <int value="69633" label="ADPCM_IMA_WAV"/>
-  <int value="69634" label="ADPCM_IMA_DK3"/>
-  <int value="69635" label="ADPCM_IMA_DK4"/>
-  <int value="69636" label="ADPCM_IMA_WS"/>
-  <int value="69637" label="ADPCM_IMA_SMJPEG"/>
-  <int value="69638" label="ADPCM_MS"/>
-  <int value="69639" label="ADPCM_4XM"/>
-  <int value="69640" label="ADPCM_XA"/>
-  <int value="69641" label="ADPCM_ADX"/>
-  <int value="69642" label="ADPCM_EA"/>
-  <int value="69643" label="ADPCM_G726"/>
-  <int value="69644" label="ADPCM_CT"/>
-  <int value="69645" label="ADPCM_SWF"/>
-  <int value="69646" label="ADPCM_YAMAHA"/>
-  <int value="69647" label="ADPCM_SBPRO_4"/>
-  <int value="69648" label="ADPCM_SBPRO_3"/>
-  <int value="69649" label="ADPCM_SBPRO_2"/>
-  <int value="69650" label="ADPCM_THP"/>
-  <int value="69651" label="ADPCM_IMA_AMV"/>
-  <int value="69652" label="ADPCM_EA_R1"/>
-  <int value="69653" label="ADPCM_EA_R3"/>
-  <int value="69654" label="ADPCM_EA_R2"/>
-  <int value="69655" label="ADPCM_IMA_EA_SEAD"/>
-  <int value="69656" label="ADPCM_IMA_EA_EACS"/>
-  <int value="69657" label="ADPCM_EA_XAS"/>
-  <int value="69658" label="ADPCM_EA_MAXIS_XA"/>
-  <int value="69659" label="ADPCM_IMA_ISS"/>
-  <int value="69660" label="ADPCM_G722"/>
-  <int value="69661" label="ADPCM_IMA_APC"/>
-  <int value="73728" label="AMR_NB"/>
-  <int value="73729" label="AMR_WB"/>
-  <int value="77824" label="RA_144"/>
-  <int value="77825" label="RA_288"/>
-  <int value="81920" label="ROQ_DPCM"/>
-  <int value="81921" label="INTERPLAY_DPCM"/>
-  <int value="81922" label="XAN_DPCM"/>
-  <int value="81923" label="SOL_DPCM"/>
-  <int value="86016" label="MP2"/>
-  <int value="86017" label="MP3"/>
-  <int value="86018" label="AAC"/>
-  <int value="86019" label="AC3"/>
-  <int value="86020" label="DTS"/>
-  <int value="86021" label="VORBIS"/>
-  <int value="86022" label="DVAUDIO"/>
-  <int value="86023" label="WMAV1"/>
-  <int value="86024" label="WMAV2"/>
-  <int value="86025" label="MACE3"/>
-  <int value="86026" label="MACE6"/>
-  <int value="86027" label="VMDAUDIO"/>
-  <int value="86028" label="FLAC"/>
-  <int value="86029" label="MP3ADU"/>
-  <int value="86030" label="MP3ON4"/>
-  <int value="86031" label="SHORTEN"/>
-  <int value="86032" label="ALAC"/>
-  <int value="86033" label="WESTWOOD_SND1"/>
-  <int value="86034" label="GSM"/>
-  <int value="86035" label="QDM2"/>
-  <int value="86036" label="COOK"/>
-  <int value="86037" label="TRUESPEECH"/>
-  <int value="86038" label="TTA"/>
-  <int value="86039" label="SMACKAUDIO"/>
-  <int value="86040" label="QCELP"/>
-  <int value="86041" label="WAVPACK"/>
-  <int value="86042" label="DSICINAUDIO"/>
-  <int value="86043" label="IMC"/>
-  <int value="86044" label="MUSEPACK7"/>
-  <int value="86045" label="MLP"/>
-  <int value="86046" label="GSM_MS"/>
-  <int value="86047" label="ATRAC3"/>
-  <int value="86048" label="VOXWARE"/>
-  <int value="86049" label="APE"/>
-  <int value="86050" label="NELLYMOSER"/>
-  <int value="86051" label="MUSEPACK8"/>
-  <int value="86052" label="SPEEX"/>
-  <int value="86053" label="WMAVOICE"/>
-  <int value="86054" label="WMAPRO"/>
-  <int value="86055" label="WMALOSSLESS"/>
-  <int value="86056" label="ATRAC3P"/>
-  <int value="86057" label="EAC3"/>
-  <int value="86058" label="SIPR"/>
-  <int value="86059" label="MP1"/>
-  <int value="86060" label="TWINVQ"/>
-  <int value="86061" label="TRUEHD"/>
-  <int value="86062" label="MP4ALS"/>
-  <int value="86063" label="ATRAC1"/>
-  <int value="86064" label="BINKAUDIO_RDFT"/>
-  <int value="86065" label="BINKAUDIO_DCT"/>
-  <int value="86066" label="AAC_LATM"/>
-  <int value="86067" label="QDMC"/>
-  <int value="86068" label="CELT"/>
-  <int value="86069" label="G723_1"/>
-  <int value="86070" label="G729"/>
-  <int value="86071" label="8SVX_EXP"/>
-  <int value="86072" label="8SVX_FIB"/>
-  <int value="86073" label="BMV_AUDIO"/>
-  <int value="86074" label="RALF"/>
-  <int value="86075" label="IAC"/>
-  <int value="86076" label="ILBC"/>
-  <int value="86077" label="OPUS_DEPRECATED"/>
-  <int value="86078" label="COMFORT_NOISE"/>
-  <int value="86079" label="TAK_DEPRECATED"/>
-  <int value="94208" label="DVD_SUBTITLE"/>
-  <int value="94209" label="DVB_SUBTITLE"/>
-  <int value="94210" label="TEXT"/>
-  <int value="94211" label="XSUB"/>
-  <int value="94212" label="SSA"/>
-  <int value="94213" label="MOV_TEXT"/>
-  <int value="94214" label="HDMV_PGS_SUBTITLE"/>
-  <int value="94215" label="DVB_TELETEXT"/>
-  <int value="94216" label="SRT"/>
-  <int value="98304" label="TTF"/>
-  <int value="102400" label="PROBE"/>
-  <int value="131072" label="MPEG2TS"/>
-  <int value="131073" label="MPEG4SYSTEMS"/>
-  <int value="135168" label="FFMETADATA"/>
-  <int value="4665933" label="G2M"/>
-  <int value="4801606" label="IDF"/>
-  <int value="5198918" label="OTF"/>
-  <int value="407917392" label="PCM_S24LE_PLANAR"/>
-  <int value="542135120" label="PCM_S32LE_PLANAR"/>
-  <int value="808530518" label="012V"/>
-  <int value="809850962" label="EXR"/>
-  <int value="944985688" label="8SVX_RAW"/>
-  <int value="1095123744" label="ADPCM_AFC"/>
-  <int value="1096176208" label="AVRP"/>
-  <int value="1096176238" label="AVRN"/>
-  <int value="1096176969" label="AVUI"/>
-  <int value="1096373590" label="AYUV"/>
-  <int value="1112557912" label="BRENDER_PIX"/>
-  <int value="1112823892" label="BINTEXT"/>
-  <int value="1129335105" label="CPIA"/>
-  <int value="1160852272" label="ESCAPE130"/>
-  <int value="1179014995" label="FFWAVESYNTH"/>
-  <int value="1211250229" label="HEVC"/>
-  <int value="1246975298" label="JACOSUB"/>
-  <int value="1263294017" label="SMPTE_KLV"/>
-  <int value="1297108018" label="MPL2"/>
-  <int value="1297498929" label="MVC1"/>
-  <int value="1297498930" label="MVC2"/>
-  <int value="1330333984" label="ADPCM_IMA_OKI"/>
-  <int value="1330664787" label="OPUS"/>
-  <int value="1346455105" label="PAF_AUDIO"/>
-  <int value="1346455126" label="PAF_VIDEO"/>
-  <int value="1347637264" label="PCM_S16BE_PLANAR"/>
-  <int value="1349012051" label="PJS"/>
-  <int value="1381259348" label="REALTEXT"/>
-  <int value="1396788553" label="SAMI"/>
-  <int value="1396788813" label="SANM"/>
-  <int value="1397180754" label="SGIRLE"/>
-  <int value="1397706307" label="SONIC"/>
-  <int value="1397706316" label="SONIC_LS"/>
-  <int value="1397909872" label="SUBRIP"/>
-  <int value="1398953521" label="SUBVIEWER1"/>
-  <int value="1400201814" label="SUBVIEWER"/>
-  <int value="1412575542" label="TARGA_Y216"/>
-  <int value="1446195256" label="V308"/>
-  <int value="1446260792" label="V408"/>
-  <int value="1447644481" label="VIMA"/>
-  <int value="1448111218" label="VPLAYER"/>
-  <int value="1465275476" label="WEBVTT"/>
-  <int value="1480739150" label="XBIN"/>
-  <int value="1480999235" label="XFACE"/>
-  <int value="1496592720" label="Y41P"/>
-  <int value="1498764852" label="YUV4"/>
-  <int value="1664495672" label="EIA_608"/>
-  <int value="1833195076" label="MICRODVD"/>
-  <int value="1936029283" label="EVRC"/>
-  <int value="1936944502" label="SMV"/>
-  <int value="1950507339" label="TAK"/>
-</enum>
-
-<enum name="FFmpegColorRanges" type="int">
-  <int value="0" label="UNSPECIFIED"/>
-  <int value="1" label="MPEG"/>
-  <int value="2" label="JPEG"/>
-</enum>
-
-<enum name="FileDialogType" type="int">
-  <int value="0" label="Select folder"/>
-  <int value="1" label="Upload folder"/>
-  <int value="2" label="Save as file"/>
-  <int value="3" label="Open file"/>
-  <int value="4" label="Open multiple files"/>
-  <int value="5" label="Full page"/>
-  <int value="6" label="Error"/>
-</enum>
-
-<enum name="FileManagerQuickViewWayToOpen" type="int">
-  <int value="0" label="Context menu"/>
-  <int value="1" label="Space key"/>
-</enum>
-
-<enum name="FileManagerVolumeType" type="int">
-  <int value="0" label="Google Drive"/>
-  <int value="1" label="Download Folder"/>
-  <int value="2" label="Removable Disk"/>
-  <int value="3" label="Archive File"/>
-  <int value="4" label="FileSystemProvider API"/>
-  <int value="5" label="MTP (Media Transfer Protocol) Device"/>
-  <int value="6" label="Media View"/>
-</enum>
-
-<enum name="FileMetricsProviderAccessResult" type="int">
-  <int value="0" label="File was mapped."/>
-  <int value="1" label="File doesn't exist."/>
-  <int value="2" label="File not modified."/>
-  <int value="3" label="File is invalid (e.g. directory or zero-size)."/>
-  <int value="4" label="File could not be memory-mapped by system."/>
-  <int value="5" label="File has invalid contents."/>
-  <int value="6" label="File could not be exclusively opened."/>
-  <int value="7" label="File contents internally deleted."/>
-</enum>
-
-<enum name="FileReaderSyncWorkerType" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Dedicated Worker"/>
-  <int value="2" label="Shared Worker"/>
-  <int value="3" label="Service Worker"/>
-</enum>
-
-<enum name="FileSystemDatabaseInitResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Corruption"/>
-  <int value="2" label="IO Error"/>
-  <int value="3" label="Unknown Error"/>
-</enum>
-
-<enum name="FileSystemErrors" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Incognito"/>
-  <int value="2" label="Invalid Schema"/>
-  <int value="3" label="Create Directory Error"/>
-  <int value="4" label="Not Found"/>
-  <int value="5" label="Unknown Error"/>
-</enum>
-
-<enum name="FileType" type="int">
-  <int value="0" label="other"/>
-  <int value="1" label=".doc"/>
-  <int value="2" label=".docx"/>
-  <int value="3" label=".odt"/>
-  <int value="4" label=".rtf"/>
-  <int value="5" label=".pdf"/>
-  <int value="6" label=".ppt"/>
-  <int value="7" label=".pptx"/>
-  <int value="8" label=".odp"/>
-  <int value="9" label=".xls"/>
-  <int value="10" label=".xlsx"/>
-  <int value="11" label=".ods"/>
-  <int value="12" label=".csv"/>
-  <int value="13" label=".odf"/>
-  <int value="14" label=".rar"/>
-  <int value="15" label=".asf"/>
-  <int value="16" label=".wma"/>
-  <int value="17" label=".wmv"/>
-  <int value="18" label=".mov"/>
-  <int value="19" label=".mpg"/>
-  <int value="20" label=".log"/>
-</enum>
-
-<enum name="FirstMeaningfulPaintOrdering" type="int">
-  <int value="0" label="FMP 0-quiet &lt; FMP 2-quiet"/>
-  <int value="1" label="FMP 0-quiet &gt; FMP 2-quiet"/>
-  <int value="2" label="FMP 0-quiet = FMP 2-quiet"/>
-</enum>
-
-<enum name="FirstMeaningfulPaintSignalStatus" type="int">
-  <int value="0" label="No input, network active"/>
-  <int value="1" label="Had input, network active"/>
-  <int value="2" label="No input, network stable"/>
-  <int value="3" label="Had input, network stable"/>
-</enum>
-
-<enum name="FirstMeaningfulPaintStatus" type="int">
-  <int value="0" label="Recorded successfully"/>
-  <int value="1" label="The page was backgrounded"/>
-  <int value="2" label="User left the page before network stable"/>
-  <int value="3" label="Not recorded because of user interaction"/>
-  <int value="4" label="User left the page before first contentful paint"/>
-</enum>
-
-<enum name="FlashNavigateUsageType" type="int">
-  <int value="0" label="Rejected because of Authorization header."/>
-  <int value="1" label="Rejected because of Cache-Control header."/>
-  <int value="2" label="Rejected because of Content-Encoding header."/>
-  <int value="3" label="Rejected because of Content-MD5 header."/>
-  <int value="4" label="Rejected because of Content-Type header."/>
-  <int value="5" label="Rejected because of Expires header."/>
-  <int value="6" label="Rejected because of From header."/>
-  <int value="7" label="Rejected because of If-Match header."/>
-  <int value="8" label="Rejected because of If-None-Match header."/>
-  <int value="9" label="Rejected because of If-Range header."/>
-  <int value="10" label="Rejected because of If-Unmodified-Since header."/>
-  <int value="11" label="Rejected because of Pragma header."/>
-  <int value="12" label="Rejected because of Referer header."/>
-  <int value="13"
-      label="Rejected because of other headers (e.g., custom headers)."/>
-  <int value="14" label="The total number of rejected navigate requests."/>
-  <int value="15" label="The total number of navigate requests."/>
-</enum>
-
-<enum name="FlashTinyContentSize" type="int">
-  <int value="0" label="1x1 or smaller"/>
-  <int value="1" label="5x5 or smaller"/>
-  <int value="2" label="10x10 or smaller"/>
-  <int value="3" label="Large"/>
-</enum>
-
-<enum name="FlashUsage" type="int">
-  <int value="0" label="Started NPAPI Flash at least once">
-    Number of browser processes that have started at least one NPAPI Flash
-    process during their lifetime.
-  </int>
-  <int value="1" label="Started PPAPI Flash at least once">
-    Number of browser processes that have started at least one PPAPI Flash
-    process during their lifetime.
-  </int>
-  <int value="2" label="Started browser process">
-    Total number of browser processes.
-  </int>
-</enum>
-
-<enum name="FontDisplayValue" type="int">
-  <int value="0" label="auto"/>
-  <int value="1" label="block"/>
-  <int value="2" label="swap"/>
-  <int value="3" label="fallback"/>
-  <int value="4" label="optional"/>
-</enum>
-
-<enum name="FormDataDeserializationStatus" type="int">
-  <int value="0" label="Login database success"/>
-  <int value="1" label="Login database failure"/>
-  <int value="2" label="Libsecret success"/>
-  <int value="3" label="Libsecret failure"/>
-  <int value="4" label="GNOME success"/>
-  <int value="5" label="GNOME failure"/>
-</enum>
-
-<enum name="FramebustPermissions" type="int">
-  <int value="0" label="Only permitted for framebusting, no user gesture"/>
-  <int value="1" label="Only permitted for framebusting, user gesture"/>
-  <int value="2" label="Allowed navigation, no user gesture"/>
-  <int value="3" label="Allowed navigation, user gesture"/>
-</enum>
-
-<enum name="FtpDataConnectionError" type="int">
-  <int value="0">Data connection successful</int>
-  <int value="1">Local firewall blocked the connection</int>
-  <int value="2">Connection timed out</int>
-  <int value="3">
-    Connection has been established, but then got broken (either reset or
-    aborted)
-  </int>
-  <int value="4">Connection has been refused</int>
-  <int value="20">Other kind of error</int>
-</enum>
-
-<enum name="FtpServerType" type="int">
-  <obsolete>
-    Deprecated 2012-11-13. No longer generated.
-  </obsolete>
-  <summary>
-    Old FTP server type as previously defined in
-    net/ftp/ftp_server_type_histograms.h
-  </summary>
-  <int value="0" label="Unknown">
-    Unknown (could be a server we don't support, a broken server, or a security
-    attack)
-  </int>
-  <int value="1" label="/bin/ls">Server using /bin/ls -l and variants</int>
-  <int value="2" label="/bin/dls">Server using /bin/dls</int>
-  <int value="3" label="EPLF">Server using EPLF format</int>
-  <int value="4" label="WinNT">
-    WinNT server configured for old style listing
-  </int>
-  <int value="5" label="VMS">VMS (including variants)</int>
-  <int value="6" label="IBM VM">IBM VM/CMS, VM/ESA, z/VM formats</int>
-  <int value="7" label="OS/2">OS/2 FTP Server</int>
-  <int value="8" label="win16">
-    win16 hosts: SuperTCP or NetManage Chameleon
-  </int>
-</enum>
-
-<enum name="FtpServerType2" type="int">
-  <summary>
-    FTP server type as defined in net/ftp/ftp_server_type_histograms.h
-  </summary>
-  <int value="0" label="Unknown"/>
-  <int value="1" label="/bin/ls"/>
-  <int value="2" label="Windows"/>
-  <int value="3" label="VMS"/>
-  <int value="4" label="Netware">
-    Obsolete, no longer detected or supported.
-  </int>
-  <int value="5" label="OS/2">Obsolete, no longer detected or supported.</int>
-</enum>
-
-<enum name="GaiaSessionRestoreOutcome" type="int">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="OAuth2 tokens cannot be fetched"/>
-  <int value="3" label="No local OAuth2 refresh token found"/>
-  <int value="4" label="OAuthLogin call failed"/>
-  <int value="5" label="MergeSession call failed"/>
-  <int value="6" label="ListAccounts call failed"/>
-  <int value="7" label="No restore needed, fresh cookies found"/>
-  <int value="8" label="Overflow"/>
-</enum>
-
-<enum name="Gamma" type="int">
-  <int value="0" label="GammaLinear"/>
-  <int value="1" label="GammaSRGB"/>
-  <int value="2" label="Gamma2Dot2"/>
-  <int value="3" label="GammaNonStandard"/>
-  <int value="4" label="GammaNull"/>
-  <int value="5" label="GammaFail"/>
-  <int value="6" label="GammaInvalid"/>
-  <int value="7" label="GammaExponent"/>
-  <int value="8" label="GammaTable"/>
-  <int value="9" label="GammaParametric"/>
-  <int value="10" label="GammaNamed"/>
-</enum>
-
-<enum name="Gamut" type="int">
-  <int value="0" label="GamutUnknown"/>
-  <int value="1" label="GamutLessThanNTSC"/>
-  <int value="2" label="GamutNTSC"/>
-  <int value="3" label="GamutSRGB"/>
-  <int value="4" label="GamutAlmostP3"/>
-  <int value="5" label="GamutP3"/>
-  <int value="6" label="GamutAdobeRGB"/>
-  <int value="7" label="GamutWide"/>
-  <int value="8" label="GamutBT2020"/>
-  <int value="9" label="GamutProPhoto"/>
-  <int value="10" label="GamutUltraWide"/>
-</enum>
-
-<enum name="GarbageCollectionReason" type="int">
-  <int value="0" label="kUnknown"/>
-  <int value="1" label="kAllocationFailure"/>
-  <int value="2" label="kAllocationLimit"/>
-  <int value="3" label="kContextDisposal"/>
-  <int value="4" label="kCountersExtension"/>
-  <int value="5" label="kDebugger"/>
-  <int value="6" label="kDeserializer"/>
-  <int value="7" label="kExternalMemoryPressure"/>
-  <int value="8" label="kFinalizeMarkingViaStackGuard"/>
-  <int value="9" label="kFinalizeMarkingViaTask"/>
-  <int value="10" label="kFullHashtable"/>
-  <int value="11" label="kHeapProfiler"/>
-  <int value="12" label="kIdleTask"/>
-  <int value="13" label="kLastResort"/>
-  <int value="14" label="kLowMemoryNotification"/>
-  <int value="15" label="kMakeHeapIterable"/>
-  <int value="16" label="kMemoryPressure"/>
-  <int value="17" label="kMemoryReducer"/>
-  <int value="18" label="kRuntime"/>
-  <int value="19" label="kSamplingProfiler"/>
-  <int value="20" label="kSnapshotCreator"/>
-  <int value="21" label="kTesting"/>
-</enum>
-
-<enum name="GATTCharacteristicHash" type="int">
-<!-- Hash values can be produced using tool: bluetooth_metrics_hash -->
-
-  <int value="1615384" label="alert_notification_control_point"/>
-  <int value="4531384" label="date_of_birth"/>
-  <int value="22829753" label="barometric_pressure_trend"/>
-  <int value="33030714" label="scan_refresh"/>
-  <int value="36624371"
-      label="Anki OVERDRIVE cars; be15bee0-6186-407e-8381-0bd89c4d8df4"/>
-  <int value="40437408" label="gender"/>
-  <int value="42833873" label="42833873 (Unknown; not a 16bit UUID)"/>
-  <int value="64893984" label="local_east_coordinate.xml"/>
-  <int value="67768539" label="alert_category_id_bit_mask"/>
-  <int value="79560451" label="sc_control_point"/>
-  <int value="84948752"
-      label="Eddystone Config ADV Slot Data;
-             a3c8750a-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="87432554"
-      label="Parrot Drone; 9a66fd54-0800-9191-11e4-012d1540cb8e"/>
-  <int value="89070880" label="blood_pressure_measurement"/>
-  <int value="102699400" label="cycling_power_feature"/>
-  <int value="107355463"
-      label="konashi analogRead2; 229b300a-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="111826224"
-      label="micro:bit client requirements;
-             e95d23c4-251d-470a-a062-fa1922dfa9a8"/>
-  <int value="121100653"
-      label="Parrot Drone; 9a66fd22-0800-9191-11e4-012d1540cb8e"/>
-  <int value="145478270" label="glucose_feature"/>
-  <int value="162705488" label="manufacturer_name_string"/>
-  <int value="164418508" label="weight_measurement"/>
-  <int value="177223896" label="report_map"/>
-  <int value="193202136"
-      label="Anki OVERDRIVE cars; be15bee1-6186-407e-8381-0bd89c4d8df4"/>
-  <int value="203698195"
-      label="micro:bit event; e95d9775-251d-470a-a062-fa1922dfa9a8"/>
-  <int value="203846063" label="ff0c"/>
-  <int value="205016416" label="body_composition_measurement"/>
-  <int value="235785246" label="irradiance"/>
-  <int value="248349383" label="csc_measurement"/>
-  <int value="254703207" label="true_wind_speed"/>
-  <int value="257107525" label="intermediate_temperature"/>
-  <int value="259169368" label="cgm_measurement"/>
-  <int value="261747886" label="battery_level"/>
-  <int value="282925453" label="time_with_dst"/>
-  <int value="289588334" label="supported_unread_alert_category"/>
-  <int value="294481931"
-      label="Wahoo Kickr trainer; a026e005-0a7d-4ab3-97fa-f1500f9feb8b"/>
-  <int value="296670902" label="heart_rate_control_point"/>
-  <int value="298186521" label="alert_category_id"/>
-  <int value="307449363" label="plx_features"/>
-  <int value="310983691" label="cycling_power_measurement"/>
-  <int value="312578485" label="navigation"/>
-  <int value="314022771"
-      label="Remote Lego; 8d8ba32b-96be-4590-910b-c756c5222c9f"/>
-  <int value="318124766"
-      label="Remote Lego; fa10e4de-259e-4d23-9f59-45a9c66802ca"/>
-  <int value="333947401" label="temperature_measurement"/>
-  <int value="338768495" label="ringer_setting"/>
-  <int value="339742946" label="hid_information"/>
-  <int value="358854697" label="bond_management_feature"/>
-  <int value="359765018"
-      label="micro:bit client event; e95d5404-251d-470a-a062-fa1922dfa9a8"/>
-  <int value="361317539" label="language"/>
-  <int value="363167947" label="blood_pressure_feature"/>
-  <int value="364021976"
-      label="nRF candy machine; b6c31338-6c07-453e-961a-d8a8a41bf368"/>
-  <int value="368068304"
-      label="MiP Robot; Magic Blue Bulb; 0000ffe9-0000-1000-8000-00805f9b34fb"/>
-  <int value="371778276"
-      label="micro:bit requirements; e95db84c-251d-470a-a062-fa1922dfa9a8"/>
-  <int value="372306057"
-      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330001"/>
-  <int value="404638811"
-      label="konashi pwmParameter; 229b3005-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="405569435" label="boot_keyboard_output_report"/>
-  <int value="409618715" label="cycling_power_vector"/>
-  <int value="416059854"
-      label="konashi uartRxNotification; 229b3013-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="419477741" label="body_composition_feature"/>
-  <int value="440009071"
-      label="konashi pwmDuty; 229b3006-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="448606809" label="448606809 (Unknown; not a 16bit UUID)"/>
-  <int value="469191968" label="Playbulb Candle Color; fffc"/>
-  <int value="473092981"
-      label="Eddystone Config Advertising Interval;
-             a3c87503-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="486368335" label="location_name"/>
-  <int value="508191605"
-      label="Parrot Drone; 9a66fb1b-0800-9191-11e4-012d1540cb8e"/>
-  <int value="511033835"
-      label="konashi hardwareLowBatteryNotification;
-             229b3015-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="512543326" label="date_of_threshold_assessment"/>
-  <int value="517791580"
-      label="Sphero Robot; 22bb746f-2bbf-7554-2d6f-726568705327"/>
-  <int value="531135021" label="cgm_specific_ops_control_point"/>
-  <int value="540054581" label="magnetic_declination"/>
-  <int value="546162499"
-      label="Eddystone Config EID Identity Key;
-             a3c87509-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="546355367" label="firmware_revision_string"/>
-  <int value="549702960" label="humidity"/>
-  <int value="557034058" label="cycling_power_control_point"/>
-  <int value="557040382" label="hardware_revision_string"/>
-  <int value="561260257" label="analog"/>
-  <int value="580555542"
-      label="Remote Lego; 2ac1fdb2-d971-4595-8e32-e8c5d80edf5f"/>
-  <int value="589575132"
-      label="Sphero Robot; 22bb746f-2bbd-7554-2d6f-726568705327"/>
-  <int value="589741087" label="model_number_string"/>
-  <int value="625191771"
-      label="Parrot Drone; 9a66fa0a-0800-9191-11e4-012d1540cb8e"/>
-  <int value="638602429" label="new_alert"/>
-  <int value="640013977"
-      label="konashi uartBaudRate; 229b3011-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="642925692" label="anaerobic_heart_rate_lower_limit"/>
-  <int value="650507215" label="aerobic_heart_rate_lower_limit"/>
-  <int value="653904148" label="cgm_session_run_time"/>
-  <int value="675543714" label="aerobic_threshold"/>
-  <int value="682327952"
-      label="Parrot Drone; 9a66fa0b-0800-9191-11e4-012d1540cb8e"/>
-  <int value="685669143"
-      label="Parrot Drone; 9a66fa0c-0800-9191-11e4-012d1540cb8e"/>
-  <int value="689682673" label="unread_alert_status"/>
-  <int value="710863194" label="dew_point"/>
-  <int value="713208266" label="apparent_wind_direction"/>
-  <int value="724796397" label="weight"/>
-  <int value="735462059"
-      label="konashi uartConfig; 229b3010-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="747671909" label="reference_time_information"/>
-  <int value="747737913"
-      label="konashi pioOutput; 229b3002-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="752820597" label="boot_mouse_input_report"/>
-  <int value="762835818" label="tx_power_level"/>
-  <int value="765862810" label="cgm_session_start_time"/>
-  <int value="777276843"
-      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330003"/>
-  <int value="786588903"
-      label="Parrot Drone; 9a66fd53-0800-9191-11e4-012d1540cb8e"/>
-  <int value="788890283"
-      label="Eddystone Config Factory reset;
-             a3c8750b-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="797118889" label="time_source"/>
-  <int value="839366223" label="user_index"/>
-  <int value="842908520" label="rsc_measurement"/>
-  <int value="845003775"
-      label="Remote Lego; aad03b81-f2ea-47db-ae1e-7c2f9e86e93e"/>
-  <int value="845212855"
-      label="Elite trainer; 347b0011-7635-408b-8918-8ff3949ce592"/>
-  <int value="851655329"
-      label="konashi analogRead0; 229b3008-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="859809200" label="resting_heart_rate"/>
-  <int value="867296114" label="gust_factor"/>
-  <int value="868427891" label="local_north_coordinate"/>
-  <int value="868892960" label="heat_index"/>
-  <int value="873660243" label="body_sensor_location"/>
-  <int value="893588698" label="scan_interval_window"/>
-  <int value="893850387"
-      label="Parrot Drone; 9a66fd23-0800-9191-11e4-012d1540cb8e"/>
-  <int value="910416910"
-      label="nRF UART RX; nrf52-Quadcopter;
-             6e400003-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="912333311" label="912333311 (Unknown; not a 16bit UUID)"/>
-  <int value="917477908" label="software_revision_string"/>
-  <int value="918961501" label="plx_spot_check_measurement"/>
-  <int value="922434244" label="ln_feature"/>
-  <int value="928099812" label="system_id"/>
-  <int value="928491064" label="last_name"/>
-  <int value="941113050"
-      label="konashi i2cReadParameter; 229b300e-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="947971228" label="temperature_type"/>
-  <int value="951656105"
-      label="Eddystone Config Remain Connectable;
-             a3c8750c-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="962656991"
-      label="Eddystone Config Public ECDH Key;
-             a3c87508-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="976761505" label="local_time_information"/>
-  <int value="987658962" label="glucose_measurement"/>
-  <int value="1002619180" label="exact_time_256"/>
-  <int value="1025676359" label="dst_offset"/>
-  <int value="1050948662"
-      label="nRF UART TX; nrf52-Quadcopter;
-             6e400002-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="1061486494" label="anaerobic_heart_rate_upper_limit"/>
-  <int value="1070539317"
-      label="konashi pioSetting; 229b3000-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1072163984" label="gap.reconnection_address"/>
-  <int value="1077684177"
-      label="Parrot Drone; 9a66fd52-0800-9191-11e4-012d1540cb8e"/>
-  <int value="1100640868" label="day_of_week"/>
-  <int value="1115558005"
-      label="konashi hardwareReset; 229b3014-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1117053056"
-      label="Remote Lego; 7baf8dca-2bfc-47fb-af29-042fccc180eb"/>
-  <int value="1125104414" label="gap.central_address_resolution_support"/>
-  <int value="1134538374" label="hip_circumference"/>
-  <int value="1136624215" label="maximum_recommended_heart_rate"/>
-  <int value="1136682523" label="date_time"/>
-  <int value="1154699367"
-      label="konashi uartTx; 229b3012-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1161713439" label="Playbulb Candle Effect; fffb"/>
-  <int value="1167525145" label="alert_status"/>
-  <int value="1169219288" label="1169219288 (Unknown; not a 16bit UUID)"/>
-  <int value="1183399370" label="magnetic_flux_density_3D"/>
-  <int value="1186677690"
-      label="Eddystone Config Advertised Tx Power;
-             a3c87505-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1193066711" label="uv_index"/>
-  <int value="1214133688" label="vo2_max"/>
-  <int value="1217613737" label="three_zone_heart_rate_limits"/>
-  <int value="1225369773"
-      label="DOTTI; Makeblock mBot; 0000fff3-0000-1000-8000-00805f9b34fb"/>
-  <int value="1227844535" label="floor_number"/>
-  <int value="1237083013" label="first_name"/>
-  <int value="1243630465"
-      label="Sphero Robot; 22bb746f-2ba1-7554-2d6f-726568705327"/>
-  <int value="1245615057" label="pnp_id"/>
-  <int value="1254532025" label="user_control_point"/>
-  <int value="1266038031" label="1266038031 (Unknown; not a 16bit UUID)"/>
-  <int value="1288236137" label="hid_control_point"/>
-  <int value="1307935876"
-      label="Tacx trainer; 6e40fec3-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="1320278204"
-      label="Eddystone Config Radio Tx Power;
-             a3c87504-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1329901812"
-      label="Eddystone Config Lock State;
-             a3c87506-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1333242790" label="longitude"/>
-  <int value="1334750659"
-      label="konashi i2cWrite; 229b300d-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1352512695" label="1352512695 (Unknown; not a 16bit UUID)"/>
-  <int value="1358488787"
-      label="sport_type_for_aerobic_and_anaerobic_thresholds"/>
-  <int value="1359562687"
-      label="PowerUp RC plane; 75b64e51-f184-4ed1-921a-476090d80ba7"/>
-  <int value="1370497910" label="position_quality"/>
-  <int value="1370779343" label="apparent_wind_speed"/>
-  <int value="1399905251" label="elevation"/>
-  <int value="1403230035"
-      label="konashi analogDrive; 229b3007-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1403795440" label="time_update_control_point"/>
-  <int value="1407679683" label="location_and_speed"/>
-  <int value="1409077916"
-      label="ieee_11073-20601_regulatory_certification_data_list"/>
-  <int value="1418868404"
-      label="gap.peripheral_preferred_connection_parameters"/>
-  <int value="1419696114" label="record_access_control_point"/>
-  <int value="1426243900" label="time_update_state"/>
-  <int value="1443769073"
-      label="Parrot Drone; 9a66fb0e-0800-9191-11e4-012d1540cb8e"/>
-  <int value="1445812935" label="current_time"/>
-  <int value="1448457670" label="cgm_feature"/>
-  <int value="1479031407" label="five_zone_heart_rate_limits"/>
-  <int value="1480262218" label="height"/>
-  <int value="1482584061"
-      label="konashi pioPullUp; 229b3001-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1485392010" label="1485392010 (Unknown; not a 16bit UUID)"/>
-  <int value="1501299347"
-      label="nRF candy machine; a6c31338-6c07-453e-961a-d8a8a41bf368"/>
-  <int value="1502604093" label="serial_number_string"/>
-  <int value="1511396316" label="ln_control_point"/>
-  <int value="1511953014"
-      label="Eddystone Config Capabilities;
-             a3c87501-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1521362289" label="indoor_positioning_configuration"/>
-  <int value="1536163565"
-      label="Remote Lego; e0af3340-022e-47e1-a263-d68887dc41d4"/>
-  <int value="1537284424"
-      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330002"/>
-  <int value="1541435682" label="fat_burn_heart_rate_upper_limit"/>
-  <int value="1542101224" label="plx_continuous_measurent"/>
-  <int value="1547112406"
-      label="Eddystone Config Active Slot;
-             a3c87502-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1548291582"
-      label="konashi analogRead1; 229b3009-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1556918420" label="supported_new_alert_category"/>
-  <int value="1562359952" label="bond_management_control_point"/>
-  <int value="1581120657"
-      label="Parrot Drone; 9a66fb1c-0800-9191-11e4-012d1540cb8e"/>
-  <int value="1594190447" label="anaerobic_threshold"/>
-  <int value="1594284383" label="time_accuracy"/>
-  <int value="1599786113" label="sensor_location"/>
-  <int value="1650767660" label="protocol_mode"/>
-  <int value="1655824245" label="pressure"/>
-  <int value="1658559118" label="digital"/>
-  <int value="1669829174"
-      label="Purple Eye; 00005200-0000-1000-8000-00805f9b34fb"/>
-  <int value="1676607014"
-      label="konashi i2cConfig; 229b300b-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1704141710" label="true_wind_direction"/>
-  <int value="1732815395" label="alert_level"/>
-  <int value="1735563923" label="rsc_feature"/>
-  <int value="1748731133" label="intermediate_blood_pressure"/>
-  <int value="1774994865" label="day_date_time"/>
-  <int value="1777827929" label="heart_rate_measurement"/>
-  <int value="1778752264" label="magnetic_flux_density_2D"/>
-  <int value="1794935269"
-      label="Sphero Robot; 22bb746f-2bb2-7554-2d6f-726568705327"/>
-  <int value="1807818076" label="rainfall"/>
-  <int value="1811011331" label="report"/>
-  <int value="1813165113" label="fat_burn_heart_rate_lower_limit"/>
-  <int value="1814120610"
-      label="Elgato Avea Bulb; f815e811-456c-6761-746f-4d756e696368"/>
-  <int value="1822663159" label="altitude"/>
-  <int value="1826219951" label="measurement_interval"/>
-  <int value="1834634616"
-      label="konashi i2cStartStop; 229b300c-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1844236489"
-      label="Elite trainer; 347b0010-7635-408b-8918-8ff3949ce592"/>
-  <int value="1847017753"
-      label="konashi pwmConfig; 229b3004-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1853459100" label="1853459100 (Unknown; not a 16bit UUID)"/>
-  <int value="1855704654" label="latitude"/>
-  <int value="1863022784"
-      label="Parrot Drone; 9a66fd24-0800-9191-11e4-012d1540cb8e"/>
-  <int value="1865494132"
-      label="konashi i2cRead; 229b300f-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="1875571028"
-      label="PowerUp RC plane; 75b64e51-f185-4ed1-921a-476090d80ba7"/>
-  <int value="1881531610" label="descriptor_value_changed"/>
-  <int value="1899652799" label="pollen_concentration"/>
-  <int value="1904364134" label="aerobic_heart_rate_upper_limit"/>
-  <int value="1936155204" label="gap.device_name"/>
-  <int value="1940300093"
-      label="Tacx trainer; 6e40fec2-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="1954594648" label="temperature"/>
-  <int value="1970019437" label="gap.peripheral_privacy_flag"/>
-  <int value="1981651466" label="wind_chill"/>
-  <int value="1984759904" label="1984759904 (Unknown; not a 16bit UUID)"/>
-  <int value="1999174392" label="glucose_measurement_context"/>
-  <int value="2000824522" label="waist_circumference"/>
-  <int value="2010182602" label="csc_feature"/>
-  <int value="2022949018" label="cgm_status"/>
-  <int value="2025615830" label="aggregate"/>
-  <int value="2025816471"
-      label="Eddystone Config Unlock; a3c87507-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="2031294873" label="uncertainty"/>
-  <int value="2041423305" label="email_address"/>
-  <int value="2042267197" label="age"/>
-  <int value="2047173546" label="boot_keyboard_input_report"/>
-  <int value="2049531548"
-      label="nrf52-Quadcopter; 6e400004-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="2055293976"
-      label="Remote Lego; b394673e-dea0-4044-a189-86f1c85ce22e"/>
-  <int value="2083994430" label="two_zone_heart_rate_limit"/>
-  <int value="2084445069" label="ringer_control_point"/>
-  <int value="2091220203"
-      label="konashi pioInputNotification;
-             229b3003-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="2091531878" label="weight_scale_feature"/>
-  <int value="2100140560" label="2100140560 (Unknown; not a 16bit UUID)"/>
-  <int value="2101185135" label="time_zone"/>
-  <int value="2105952193" label="heart_rate_max"/>
-  <int value="2110830087"
-      label="Printer; 00002af1-0000-1000-8000-00805f9b34fb"/>
-  <int value="2118566262" label="database_change_increment"/>
-  <int value="2125906618" label="gap.appearance"/>
-  <int value="2140490935" label="gatt.service_changed"/>
-</enum>
-
-<enum name="GATTDescriptorHash" type="int">
-<!-- Hash values can be produced using tool: bluetooth_metrics_hash -->
-
-  <int value="34360078"
-      label="Environmental Sensing Configuration;
-             0000290b-0000-1000-8000-00805f9b34fb"/>
-  <int value="212028968"
-      label="Value Trigger Setting; 0000290a-0000-1000-8000-00805f9b34fb"/>
-  <int value="434053918"
-      label="Valid Range; 00002906-0000-1000-8000-00805f9b34fb"/>
-  <int value="475200414"
-      label="Characteristic Aggregate Format;
-             00002905-0000-1000-8000-00805f9b34fb"/>
-  <int value="1007170263"
-      label="Report Reference; 00002908-0000-1000-8000-00805f9b34fb"/>
-  <int value="1035573722"
-      label="External Report Reference; 00002907-0000-1000-8000-00805f9b34fb"/>
-  <int value="1113090825"
-      label="Characteristic Presentation Format;
-             00002904-0000-1000-8000-00805f9b34fb"/>
-  <int value="1130337922"
-      label="Number of Digitals; 00002909-0000-1000-8000-00805f9b34fb"/>
-  <int value="1201129743"
-      label="Client Characteristic Configuration;
-             00002902-0000-1000-8000-00805f9b34fb"/>
-  <int value="1208669602"
-      label="Environmental Sensing Trigger Setting;
-             0000290d-0000-1000-8000-00805f9b34fb"/>
-  <int value="1322265676"
-      label="Server Characteristic Configuration;
-             00002903-0000-1000-8000-00805f9b34fb"/>
-  <int value="1383133454"
-      label="Environmental Sensing Measurement;
-             0000290c-0000-1000-8000-00805f9b34fb"/>
-  <int value="1406247203"
-      label="Time Trigger Setting; 0000290e-0000-1000-8000-00805f9b34fb"/>
-  <int value="1504592234"
-      label="Characteristic User Description;
-             00002901-0000-1000-8000-00805f9b34fb"/>
-  <int value="1876461392"
-      label="Characteristic Extended Properties;
-             00002900-0000-1000-8000-00805f9b34fb"/>
-</enum>
-
-<enum name="GATTServiceHash" type="int">
-<!-- Hash values can be produced using tool: bluetooth_metrics_hash -->
-
-  <int value="7464675" label="pulse_oximeter"/>
-  <int value="26695985" label="fe20"/>
-  <int value="35226455" label="fe44"/>
-  <int value="35347197" label="fe26"/>
-  <int value="41430862" label="fea8"/>
-  <int value="44208286" label="fe29"/>
-  <int value="46512116" label="fe03"/>
-  <int value="47251880" label="fe8c"/>
-  <int value="48328546" label="febf"/>
-  <int value="48912332"
-      label="micro:bit event; e95d93af-251d-470a-a062-fa1922dfa9a8"/>
-  <int value="56938056" label="feb9"/>
-  <int value="62669585" label="feff"/>
-  <int value="70653353" label="fe37"/>
-  <int value="81094401" label="link_loss"/>
-  <int value="85709298" label="fe38"/>
-  <int value="91953454" label="fe7b"/>
-  <int value="109066436" label="Printer; 18f0"/>
-  <int value="117033282" label="fe1e"/>
-  <int value="119232939" label="fe16"/>
-  <int value="124193922"
-      label="nrf52-Quadcopter; 6e400020-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="126220948" label="fec4"/>
-  <int value="130754956" label="fe0d"/>
-  <int value="134110769" label="fecf"/>
-  <int value="141942246" label="fe1d"/>
-  <int value="150370668" label="150370668 (Unknown; not a 16bit UUID)"/>
-  <int value="152492105" label="fe5f"/>
-  <int value="169501939" label="fe4d"/>
-  <int value="199936534" label="fe3c"/>
-  <int value="214038522" label="fed3"/>
-  <int value="217781951" label="human_interface_device"/>
-  <int value="219286671" label="fe04"/>
-  <int value="221983129" label="fe66"/>
-  <int value="228594985" label="fe21"/>
-  <int value="229725863"
-      label="Juggglow; 624e957f-cb42-4cd6-bacc-84aeb898f69b"/>
-  <int value="239745754" label="fe22"/>
-  <int value="252638028" label="fe9c"/>
-  <int value="253001319" label="fe84"/>
-  <int value="267848299" label="fe3e"/>
-  <int value="270670950" label="fe62"/>
-  <int value="272218751" label="automation_io"/>
-  <int value="273356483" label="fe68"/>
-  <int value="278860884" label="fe5c"/>
-  <int value="289754407" label="fe01"/>
-  <int value="291870040" label="fe6d"/>
-  <int value="295205583" label="fe27"/>
-  <int value="310654399" label="fe54"/>
-  <int value="314884784" label="fe65"/>
-  <int value="315044617" label="fea9"/>
-  <int value="321399472" label="fe86"/>
-  <int value="335078161"
-      label="Dotti; MiP Robot; 0000fff0-0000-1000-8000-00805f9b34fb"/>
-  <int value="336095190" label="fe1c"/>
-  <int value="337129282" label="fe73"/>
-  <int value="347254994" label="feb6"/>
-  <int value="350589357" label="fe8e"/>
-  <int value="353919198" label="fe41"/>
-  <int value="367801999" label="fe19"/>
-  <int value="381944619" label="continuous_glucose_monitoring"/>
-  <int value="393442080" label="fe47"/>
-  <int value="404751265" label="fe34"/>
-  <int value="406443827" label="fe08"/>
-  <int value="406667138" label="fe1b"/>
-  <int value="408422717" label="fe12"/>
-  <int value="411422080" label="feaf"/>
-  <int value="428955508" label="fed8"/>
-  <int value="436040838" label="fe49"/>
-  <int value="442258066" label="fec6"/>
-  <int value="448479874" label="fe13"/>
-  <int value="452749537" label="fe6f"/>
-  <int value="486403409" label="fe7e"/>
-  <int value="493187195"
-      label="Insight cards; 13630000-aeb9-10cf-ef69-81e145a91113"/>
-  <int value="499379297" label="fe0c"/>
-  <int value="517314925" label="fe0e"/>
-  <int value="534472233" label="feea"/>
-  <int value="535574137" label="feb1"/>
-  <int value="540487861"
-      label="Parrot Drone; 9a66fd21-0800-9191-11e4-012d1540cb8e"/>
-  <int value="547028880" label="fed0"/>
-  <int value="547268186"
-      label="Parrot Drone; 9a66fb00-0800-9191-11e4-012d1540cb8e"/>
-  <int value="547391938" label="feee"/>
-  <int value="563178896" label="fec8"/>
-  <int value="572734315"
-      label="Sphero Robot; 22bb746f-2bb0-7554-2d6f-726568705327"/>
-  <int value="587509991" label="feba"/>
-  <int value="593291030" label="fe80"/>
-  <int value="593725623" label="fef8"/>
-  <int value="594122172" label="health_thermometer"/>
-  <int value="598801180" label="fe64"/>
-  <int value="599398840" label="feb4"/>
-  <int value="601952480"
-      label="PowerUp RC plane; 75b64e51-f181-4ed1-921a-476090d80ba7"/>
-  <int value="603143198" label="fef5"/>
-  <int value="604112254" label="fee4"/>
-  <int value="612248808" label="612248808 (Unknown; not a 16bit UUID)"/>
-  <int value="617434027" label="fe59"/>
-  <int value="621358948" label="fec7"/>
-  <int value="626013607" label="FIDO authentication service (fffd)"/>
-  <int value="633977000" label="fedf"/>
-  <int value="634740644"
-      label="Purple Eye; 00005100-0000-1000-8000-00805f9b34fb"/>
-  <int value="642914459" label="fe3d"/>
-  <int value="643543662" label="fefe"/>
-  <int value="661885353"
-      label="Remote Lego; 40480f29-7bad-4ea5-8bf8-499405c9b324"/>
-  <int value="675211143" label="fe4a"/>
-  <int value="677930586" label="fe11"/>
-  <int value="683753134" label="fe82"/>
-  <int value="684646659" label="febb"/>
-  <int value="687580695" label="fe7a"/>
-  <int value="687720133" label="fe91"/>
-  <int value="688383299" label="fe1f"/>
-  <int value="690691504" label="bond_management"/>
-  <int value="695100933" label="fed4"/>
-  <int value="702341883" label="fed5"/>
-  <int value="703883979" label="fe87"/>
-  <int value="706159123" label="fe32"/>
-  <int value="712814660"
-      label="Eddystone-URL Beacon Configuration;
-             ee0c2080-8786-40ba-ab96-99b91ac981d8"/>
-  <int value="739317418" label="fe05"/>
-  <int value="741183887" label="fe78"/>
-  <int value="749323131" label="fece"/>
-  <int value="762562796" label="fe5e"/>
-  <int value="775377708" label="fe2b"/>
-  <int value="780195705" label="fead"/>
-  <int value="786171562" label="fe0a"/>
-  <int value="803680658" label="fea3"/>
-  <int value="805645044" label="glucose"/>
-  <int value="807272540" label="fe1a"/>
-  <int value="817497010" label="fe18"/>
-  <int value="836214784" label="cycling_power"/>
-  <int value="841972234" label="feeb"/>
-  <int value="869059214" label="next_dst_change"/>
-  <int value="869682406" label="fe60"/>
-  <int value="876407493" label="location_and_navigation"/>
-  <int value="878416856" label="fe85"/>
-  <int value="879242624"
-      label="nRF candy machine; a6c31337-6c07-453e-961a-d8a8a41bf368"/>
-  <int value="882315332" label="fe55"/>
-  <int value="889111031" label="fecd"/>
-  <int value="890629650" label="running_speed_and_cadence"/>
-  <int value="901700952" label="fedd"/>
-  <int value="902817086" label="fea2"/>
-  <int value="918911989" label="fed1"/>
-  <int value="931929648" label="Mi Band; fee0"/>
-  <int value="935427983" label="fed7"/>
-  <int value="936179325" label="feb5"/>
-  <int value="939739701" label="fe8f"/>
-  <int value="939958322" label="febc"/>
-  <int value="940942235" label="feef"/>
-  <int value="953202155" label="fe8d"/>
-  <int value="959163825"
-      label="Elgato Avea Bulb; f815e810-456c-6761-746f-4d756e696368"/>
-  <int value="960854785" label="fe53"/>
-  <int value="961193127" label="feb8"/>
-  <int value="963656436" label="fe77"/>
-  <int value="978815669"
-      label="CoolBeans Serial; a495ff10-c5b1-4b44-b512-1370f02d74de"/>
-  <int value="1001310815" label="fe75"/>
-  <int value="1024550252" label="feda"/>
-  <int value="1029767622" label="internet_protocol_support"/>
-  <int value="1035129135" label="fe74"/>
-  <int value="1044298649" label="fe99"/>
-  <int value="1045265631"
-      label="Elite trainer; 347b0001-7635-408b-8918-8ff3949ce592"/>
-  <int value="1047979067" label="fe17"/>
-  <int value="1054370387" label="fef9"/>
-  <int value="1061554458" label="feaa"/>
-  <int value="1067649821" label="fe3f"/>
-  <int value="1079263879" label="fe06"/>
-  <int value="1085187782" label="feae"/>
-  <int value="1088150526" label="feb2"/>
-  <int value="1091337779" label="fefb"/>
-  <int value="1096286291" label="fed6"/>
-  <int value="1102290958" label="fe56"/>
-  <int value="1103440256" label="fee9"/>
-  <int value="1107293675" label="cycling_speed_and_cadence"/>
-  <int value="1107743017" label="fe00"/>
-  <int value="1108163795" label="fec0"/>
-  <int value="1108885324" label="fe48"/>
-  <int value="1122138707" label="fed2"/>
-  <int value="1122276223" label="fe67"/>
-  <int value="1122861451" label="Playbulb Candle; ff02"/>
-  <int value="1132318862" label="fe6a"/>
-  <int value="1133574029" label="fede"/>
-  <int value="1134418737" label="fed9"/>
-  <int value="1146291045" label="fe2e"/>
-  <int value="1155522736" label="fea0"/>
-  <int value="1181418959" label="feca"/>
-  <int value="1185484517" label="fe02"/>
-  <int value="1188875912" label="phone_alert_status"/>
-  <int value="1204532270" label="fea1"/>
-  <int value="1205730714" label="fe81"/>
-  <int value="1213218283" label="feb7"/>
-  <int value="1219993345" label="device_information"/>
-  <int value="1225001939" label="fe6c"/>
-  <int value="1235220658" label="fe6e"/>
-  <int value="1236903028" label="fe9d"/>
-  <int value="1239202871" label="generic_attribute"/>
-  <int value="1244946418" label="fe61"/>
-  <int value="1250531601" label="fe15"/>
-  <int value="1257014053" label="fe33"/>
-  <int value="1262008705" label="fef2"/>
-  <int value="1265172773" label="indoor_positioning"/>
-  <int value="1265779630" label="fe7d"/>
-  <int value="1275725183" label="febe"/>
-  <int value="1276692887" label="fe09"/>
-  <int value="1280998251" label="blood_pressure"/>
-  <int value="1289827687" label="fe7c"/>
-  <int value="1293391247" label="fea4"/>
-  <int value="1295501517" label="fef3"/>
-  <int value="1300474367" label="fe70"/>
-  <int value="1300496660" label="fe23"/>
-  <int value="1324131957" label="ff08; 0000ff08-0000-1000-8000-00805f9b34fb"/>
-  <int value="1327498374"
-      label="nRF UART; 6e400001-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="1344502489" label="fe92"/>
-  <int value="1352591424" label="fe2d"/>
-  <int value="1357782294" label="fe90"/>
-  <int value="1357850359" label="fefc"/>
-  <int value="1359442507"
-      label="Physical Web Light Switch; ba42561b-b1d2-440a-8d04-0cefb43faece"/>
-  <int value="1362860533" label="fe9a"/>
-  <int value="1366014117" label="fe2c"/>
-  <int value="1369789354" label="current_time"/>
-  <int value="1376579922" label="fef0"/>
-  <int value="1377872916" label="fe51"/>
-  <int value="1380007534" label="fe96"/>
-  <int value="1382767841" label="fe93"/>
-  <int value="1394327958" label="fe24"/>
-  <int value="1398099241" label="user_data"/>
-  <int value="1402127045" label="fef4"/>
-  <int value="1415105941" label="scan_parameters"/>
-  <int value="1416866355" label="fe3b"/>
-  <int value="1422100109"
-      label="Sphero Robot; 22bb746f-2ba0-7554-2d6f-726568705327"/>
-  <int value="1424865940" label="alert_notification"/>
-  <int value="1432421356" label="fe14"/>
-  <int value="1433847022" label="fefa"/>
-  <int value="1465794357" label="feb0"/>
-  <int value="1482395712"
-      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333333337"/>
-  <int value="1484296385" label="fe30"/>
-  <int value="1486406094" label="1486406094 (Unknown; not a 16bit UUID)"/>
-  <int value="1513113754" label="fe39"/>
-  <int value="1515793787" label="fef1"/>
-  <int value="1545945606"
-      label="Parrot Drone; 9a66fa00-0800-9191-11e4-012d1540cb8e"/>
-  <int value="1548928839" label="fec5"/>
-  <int value="1549672811"
-      label="nRF candy machine; b6c31337-6c07-453e-961a-d8a8a41bf368"/>
-  <int value="1553614739" label="fe6b"/>
-  <int value="1563543855" label="fe72"/>
-  <int value="1569655226" label="generic_access"/>
-  <int value="1573199922" label="fe71"/>
-  <int value="1578535968"
-      label="Makeblock mBot; 0000ffe1-0000-1000-8000-00805f9b34fb"/>
-  <int value="1594426590" label="fe4e"/>
-  <int value="1600490722" label="fe46"/>
-  <int value="1604724337" label="fe88"/>
-  <int value="1606985074" label="feed"/>
-  <int value="1607594729" label="fe0f"/>
-  <int value="1618872680" label="fe9b"/>
-  <int value="1631386264" label="fefd"/>
-  <int value="1635890706" label="fe9e"/>
-  <int value="1637021391" label="fe95"/>
-  <int value="1638012344" label="fe97"/>
-  <int value="1648320092" label="fe7f"/>
-  <int value="1651126525" label="fe25"/>
-  <int value="1651610232" label="fe52"/>
-  <int value="1660904097" label="immediate_alert"/>
-  <int value="1663141542" label="battery_service"/>
-  <int value="1671670551" label="fe5a"/>
-  <int value="1673238799" label="fee3"/>
-  <int value="1680929515" label="fe79"/>
-  <int value="1681595304" label="fe4b"/>
-  <int value="1682716946" label="fe45"/>
-  <int value="1694516494" label="fe31"/>
-  <int value="1696287138" label="weight_scale"/>
-  <int value="1697181639" label="1697181639 (Unknown; not a 16bit UUID)"/>
-  <int value="1701893879" label="feac"/>
-  <int value="1704852137" label="1704852137 (Unknown; not a 16bit UUID)"/>
-  <int value="1706666451" label="fea7"/>
-  <int value="1708135819" label="1708135819 (Unknown; not a 16bit UUID)"/>
-  <int value="1712085581"
-      label="MiP Robot; Magic Blue Bulb; 0000ffe5-0000-1000-8000-00805f9b34fb"/>
-  <int value="1714031075" label="fe10"/>
-  <int value="1724509641" label="fe8b"/>
-  <int value="1729966097"
-      label="Anki OVERDRIVE cars; be15beef-6186-407e-8381-0bd89c4d8df4"/>
-  <int value="1753170093" label="environmental_sensing"/>
-  <int value="1763555668" label="fe76"/>
-  <int value="1779377938" label="fe5d"/>
-  <int value="1784351685" label="feab"/>
-  <int value="1788143374" label="feb3"/>
-  <int value="1788905945" label="fedb"/>
-  <int value="1789684919" label="fe36"/>
-  <int value="1805849785" label="fe98"/>
-  <int value="1808789304" label="fe3a"/>
-  <int value="1821803686" label="TI SensorTag Simple Keys; ffe0"/>
-  <int value="1823176820" label="body_composition"/>
-  <int value="1826466999" label="fee1"/>
-  <int value="1829698279" label="fe0b"/>
-  <int value="1833458622" label="fe42"/>
-  <int value="1844072312" label="fe40"/>
-  <int value="1849709266" label="fec3"/>
-  <int value="1852765173" label="1852765173 (Unknown; not a 16bit UUID)"/>
-  <int value="1855849484"
-      label="iHealth Edge; 636f6d2e-6a69-7561-6e2e-414d56313100"/>
-  <int value="1891274929" label="fee2"/>
-  <int value="1891804450" label="fe58"/>
-  <int value="1905398969" label="fee6"/>
-  <int value="1915568448" label="fe89"/>
-  <int value="1922068523" label="fef6"/>
-  <int value="1922152740" label="fe8a"/>
-  <int value="1922853101" label="fe28"/>
-  <int value="1925022679" label="fe57"/>
-  <int value="1940012814" label="fe2a"/>
-  <int value="1942373991"
-      label="Eddystone-URL Beacon Configuration v2;
-             a3c87500-8ed3-4bdf-8a39-a01bebede295"/>
-  <int value="1946977319" label="fec1"/>
-  <int value="1953707948" label="fe9f"/>
-  <int value="1960388103" label="fecb"/>
-  <int value="1969478137" label="fe63"/>
-  <int value="1970234661" label="reference_time_update"/>
-  <int value="1971997463" label="fe07"/>
-  <int value="1976176123" label="fe4c"/>
-  <int value="1983035069" label="fec9"/>
-  <int value="1984351068" label="fea6"/>
-  <int value="2016025023" label="febd"/>
-  <int value="2017827114" label="fe4f"/>
-  <int value="2018026941"
-      label="konashi; 229bff00-03fb-40da-98a7-b0def65c2d4b"/>
-  <int value="2021054861"
-      label="Tacx trainer; 6e40fec1-b5a3-f393-e0a9-e50e24dcca9e"/>
-  <int value="2022676622" label="fe35"/>
-  <int value="2051635436" label="fe50"/>
-  <int value="2055825405" label="fedc"/>
-  <int value="2058080782" label="fecc"/>
-  <int value="2061595680" label="fea5"/>
-  <int value="2069612985" label="fee5"/>
-  <int value="2070392722" label="fec2"/>
-  <int value="2075745564" label="heart_rate"/>
-  <int value="2081534039" label="fe83"/>
-  <int value="2086529225" label="tx_power"/>
-  <int value="2097896377" label="fee8"/>
-  <int value="2100033855" label="fef7"/>
-  <int value="2107223399" label="fee7"/>
-  <int value="2108894990" label="fe2f"/>
-  <int value="2110412550" label="fe43"/>
-  <int value="2113887919" label="fe5b"/>
-  <int value="2115271248" label="fe94"/>
-  <int value="2124678180"
-      label="Parrot Drone; 9a66fd51-0800-9191-11e4-012d1540cb8e"/>
-  <int value="2132514937" label="feec"/>
-  <int value="2136716957" label="fe69"/>
-</enum>
-
-<enum name="GCMCheckinRequestStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="URL fetching failed"/>
-  <int value="2" label="HTTP bad request"/>
-  <int value="3" label="HTTP unauthorized"/>
-  <int value="4" label="HTTP not OK"/>
-  <int value="5" label="Response parsing failed"/>
-  <int value="6" label="Zero ID or token"/>
-</enum>
-
-<enum name="GCMClientResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Invalid parameter"/>
-  <int value="2" label="GCM disabled"/>
-  <int value="3" label="Async operation pending"/>
-  <int value="4" label="Network error"/>
-  <int value="5" label="Server error"/>
-  <int value="6" label="TTL exceeded"/>
-  <int value="7" label="Unknown error"/>
-</enum>
-
-<enum name="GCMConnectionResetReason" type="int">
-  <int value="0" label="Login failure"/>
-  <int value="1" label="Close command"/>
-  <int value="2" label="Heartbeat failure"/>
-  <int value="3" label="Socket failure"/>
-  <int value="4" label="Network change"/>
-  <int value="5" label="New heartbeat interval"/>
-</enum>
-
-<enum name="GCMDecryptionResult" type="int">
-  <int value="0" label="Success (message unencrypted)"/>
-  <int value="1" label="Success (message decrypted)"/>
-  <int value="2" label="Failure (invalid Encryption HTTP header)"/>
-  <int value="3" label="Failure (invalid Crypto-Key HTTP header)"/>
-  <int value="4" label="Failure (no keying material available)"/>
-  <int value="5" label="Failure (unable to compute the shared secret)"/>
-  <int value="6" label="Failure (unable to decrypt using AES-GCM)"/>
-</enum>
-
-<enum name="GCMEndpoints" type="int">
-  <int value="0" label="mtalk.google.com:5228"/>
-  <int value="1" label="mtalk.google.com:443"/>
-</enum>
-
-<enum name="GCMInvalidationsIncomingMessageStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="GCM message's content missing or empty"/>
-  <int value="2" label="Base64Decode failed"/>
-  <int value="3" label="Parsing protobuf failed"/>
-</enum>
-
-<enum name="GCMInvalidationsOutgoingMessageStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Message was discarded"/>
-  <int value="2" label="Access token request failed"/>
-  <int value="3" label="HTTP Post failed"/>
-</enum>
-
-<enum name="GCMLoadStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Reloading open store"/>
-  <int value="2" label="Store open failed"/>
-  <int value="3" label="Loading device credentials failed"/>
-  <int value="4" label="Loading registrations failed"/>
-  <int value="5" label="Loading incoming messages failed"/>
-  <int value="6" label="Loading outgoing messages failed"/>
-  <int value="7" label="Loading last checkin info failed"/>
-  <int value="8" label="Loading gservice settings failed"/>
-  <int value="9" label="Loading account mapping failed"/>
-  <int value="10" label="Loading last token time failed"/>
-  <int value="11" label="Loading heartbeat intervals failed"/>
-  <int value="12" label="Loading Instance ID data failed"/>
-  <int value="13" label="Store does not exist"/>
-</enum>
-
-<enum name="GCMOutgoingMessageTTLCategory" type="int">
-  <int value="0" label="Zero"/>
-  <int value="1" label="Less than or equal to 1 minute"/>
-  <int value="2" label="Less than or equal to 1 hour"/>
-  <int value="3" label="Less than or equal to 1 day"/>
-  <int value="4" label="Less than or equal to 1 week"/>
-  <int value="5" label="More than 1 week but less than maximum"/>
-  <int value="6" label="Default or maximium time"/>
-</enum>
-
-<enum name="GcmReceiverStatus" type="int">
-  <obsolete>
-    Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367)
-  </obsolete>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="ERROR_SECURITY_EXCEPTION"/>
-</enum>
-
-<enum name="GCMRegistrationRequestStatus" type="int">
-  <int value="0" label="Success (this is not logged currently)"/>
-  <int value="1" label="Invalid parameters"/>
-  <int value="2" label="Invalid sender"/>
-  <int value="3" label="Authentication failed"/>
-  <int value="4" label="Device registration error"/>
-  <int value="5" label="Unknown error"/>
-  <int value="6" label="URL fetching failed"/>
-  <int value="7" label="HTTP not OK"/>
-  <int value="8" label="No response body"/>
-  <int value="9" label="Reached maximum number of retries"/>
-  <int value="10" label="Response parsing failed"/>
-  <int value="11" label="Internal server error"/>
-  <int value="12" label="Quota exceeded"/>
-  <int value="13" label="Device has too many registrations"/>
-</enum>
-
-<enum name="GCMResetStoreError" type="int">
-  <int value="0" label="Destroying store failed"/>
-  <int value="1" label="Infinite store reset"/>
-</enum>
-
-<enum name="GCMSendMessageStatus" type="int">
-  <int value="0" label="Message queued"/>
-  <int value="1" label="Message sent to the server, ACK received"/>
-  <int value="2" label="Message not saved, exceeded app queue size"/>
-  <int value="3" label="Message not saved, exceeded total queue size"/>
-  <int value="4" label="Message too large to send"/>
-  <int value="5" label="Message has zero TTL and no open connection"/>
-  <int value="6" label="Message TTL exceeded"/>
-</enum>
-
-<enum name="GCMUnregistrationRequestStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="URL fetching failed"/>
-  <int value="2" label="No response body"/>
-  <int value="3" label="Response parsing failed"/>
-  <int value="4" label="Incorrect App Id"/>
-  <int value="5" label="Invalid parameters"/>
-  <int value="6" label="Service unavailable"/>
-  <int value="7" label="Internal server error"/>
-  <int value="8" label="HTTP reponse code not OK"/>
-  <int value="9" label="Unknown error"/>
-  <int value="10" label="Reached maximum number of retries"/>
-  <int value="11" label="Device registration error"/>
-</enum>
-
-<enum name="GCMUpstreamMessageStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Message size limit exceeded"/>
-  <int value="2" label="Access token request failed"/>
-  <int value="3" label="Send request failed"/>
-</enum>
-
-<enum name="GCReason" type="int">
-  <int value="0" label="Idle GC"/>
-  <int value="1" label="Precise GC"/>
-  <int value="2" label="Conservative GC"/>
-  <int value="3" label="Forced GC for testing"/>
-  <int value="4" label="Memory pressure GC"/>
-  <int value="5" label="Page navigation GC"/>
-</enum>
-
-<enum name="GDataAuthResult" type="int">
-  <int value="0" label="FAILURE"/>
-  <int value="1" label="SUCCESS"/>
-  <int value="2" label="NO_CONNECTION"/>
-</enum>
-
-<enum name="GDataEntryKind" type="int">
-  <obsolete>
-    Deprecated 9/2012, and replaced by DriveEntryKind
-  </obsolete>
-  <int value="0" label="UNKNOWN"/>
-  <int value="4097" label="ITEM"/>
-  <int value="4098" label="SITE"/>
-  <int value="8449" label="DOCUMENT"/>
-  <int value="8450" label="SPEREADSHEET"/>
-  <int value="8451" label="PRESENTATION"/>
-  <int value="8452" label="DRAWING"/>
-  <int value="8453" label="TABLE"/>
-  <int value="8705" label="EXTERNAL_APP"/>
-  <int value="16385" label="FOLDER"/>
-  <int value="32769" label="FILE"/>
-  <int value="32770" label="PDF"/>
-</enum>
-
-<enum name="GeolocationDisclosureResult" type="int">
-  <int value="0" label="Ignored"/>
-  <int value="1" label="Settings clicked"/>
-  <int value="2" label="Dismissed"/>
-</enum>
-
-<enum name="GeolocationHeaderPermissionState" type="int">
-  <int value="0" label="Location mode unknown"/>
-  <int value="1" label="High acc., app allowed, domain allowed, location sent"/>
-  <int value="2"
-      label="High acc., app allowed, domain allowed, location not sent"/>
-  <int value="3" label="High acc., app allowed, domain prompt, location sent"/>
-  <int value="4"
-      label="High acc., app allowed, domain prompt, location not sent"/>
-  <int value="5" label="High acc., app allowed, domain denied"/>
-  <int value="6" label="High acc., app prompt, domain allowed"/>
-  <int value="7" label="High acc., app prompt, domain prompt"/>
-  <int value="8" label="High acc., app prompt, domain denied"/>
-  <int value="9" label="High acc., app denied, domain allowed"/>
-  <int value="10" label="High acc., app denied, domain prompt"/>
-  <int value="11" label="High acc., app denied, domain denied"/>
-  <int value="12"
-      label="Battery sav., app allowed, domain allowed, location sent"/>
-  <int value="13"
-      label="Battery sav., app allowed, domain allowed, location not sent"/>
-  <int value="14"
-      label="Battery sav., app allowed, domain prompt, location sent"/>
-  <int value="15"
-      label="Battery sav., app allowed, domain prompt, location not sent"/>
-  <int value="16" label="Battery sav., app allowed, domain denied"/>
-  <int value="17" label="Battery sav., app prompt, domain allowed"/>
-  <int value="18" label="Battery sav., app prompt, domain prompt"/>
-  <int value="19" label="Battery sav., app prompt, domain denied"/>
-  <int value="20" label="Battery sav., app denied, domain allowed"/>
-  <int value="21" label="Battery sav., app denied, domain prompt"/>
-  <int value="22" label="Battery sav., app denied, domain denied"/>
-  <int value="23" label="GPS only, app allowed, domain allowed, location sent"/>
-  <int value="24"
-      label="GPS only, app allowed, domain allowed, location not sent"/>
-  <int value="25" label="GPS only, app allowed, domain prompt, location sent"/>
-  <int value="26"
-      label="GPS only, app allowed, domain prompt, location not sent"/>
-  <int value="27" label="GPS only, app allowed, domain denied"/>
-  <int value="28" label="GPS only, app prompt, domain allowed"/>
-  <int value="29" label="GPS only, app prompt, domain prompt"/>
-  <int value="30" label="GPS only, app prompt, domain denied"/>
-  <int value="31" label="GPS only, app denied, domain allowed"/>
-  <int value="32" label="GPS only, app denied, domain prompt"/>
-  <int value="33" label="GPS only, app denied, domain denied"/>
-  <int value="34" label="Location off, app allowed, domain allowed"/>
-  <int value="35" label="Location off, app allowed, domain prompt"/>
-  <int value="36" label="Location off, app allowed, domain denied"/>
-  <int value="37" label="Location off, app prompt, domain allowed"/>
-  <int value="38" label="Location off, app prompt, domain prompt"/>
-  <int value="39" label="Location off, app prompt, domain denied"/>
-  <int value="40" label="Location off, app denied, domain allowed"/>
-  <int value="41" label="Location off, app denied, domain prompt"/>
-  <int value="42" label="Location off, app denied, domain denied"/>
-  <int value="43" label="Unsuitable URL"/>
-  <int value="44" label="Not using HTTPS"/>
-</enum>
-
-<enum name="GeolocationInfoBarDelegateAndroidEvent" type="int">
-  <obsolete>
-    Deprecated 9/2014, and replaced by PermissionAction.
-  </obsolete>
-  <int value="0" label="User allowed the page to use geolocation">
-    For the Android platform the count for this event should be exactly the same
-    as the corresponding event in the GeolocationInfoBarDelegateEvent enum.
-  </int>
-  <int value="1" label="User opened geolocation settings"/>
-</enum>
-
-<enum name="GeolocationInfoBarDelegateEvent" type="int">
-  <obsolete>
-    Deprecated 9/2014, and replaced by PermissionAction.
-  </obsolete>
-  <int value="0" label="The bar was created"/>
-  <int value="1" label="User allowed use of geolocation"/>
-  <int value="2" label="User denied use of geolocation"/>
-  <int value="3" label="User dismissed the bar"/>
-  <int value="4" label="User clicked on link"/>
-  <int value="5" label="User ignored the bar"/>
-</enum>
-
-<enum name="GeopositionErrorCode" type="int">
-  <int value="0" label="There was no error"/>
-  <int value="1" label="User denied use of geolocation"/>
-  <int value="2" label="Geoposition could not be determined"/>
-  <int value="3" label="Timeout"/>
-</enum>
-
-<enum name="GestureActionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Omnibox pinch"/>
-  <int value="2" label="Omnibox scroll"/>
-  <int value="3" label="Tabstrip pinch"/>
-  <int value="4" label="Tabstrip scroll"/>
-  <int value="5" label="Bezel scroll"/>
-  <int value="6" label="Desktop scroll"/>
-  <int value="7" label="Desktop pinch"/>
-  <int value="8" label="Webpage pinch"/>
-  <int value="9" label="Webpage scroll"/>
-  <int value="10" label="Webpage tap"/>
-  <int value="11" label="Tabstrip tap"/>
-  <int value="12" label="Bezel down"/>
-  <int value="13" label="Tab switched tap"/>
-  <int value="14" label="Active tab tap"/>
-  <int value="15" label="Tab close button tap"/>
-  <int value="16" label="New tab button tap"/>
-  <int value="17" label="Top edge of window tap"/>
-  <int value="18" label="Window size button tap"/>
-  <int value="19" label="Area surrounding tabstrip tap"/>
-  <int value="20" label="Window resized double tap"/>
-</enum>
-
-<enum name="GestureMergeState" type="int">
-  <int value="0" label="Neither token had a gesture"/>
-  <int value="1" label="Only the old token had a gesture"/>
-  <int value="2" label="Only the new token had a gesture"/>
-  <int value="3" label="Both tokens had a gesture"/>
-</enum>
-
-<enum name="GesturePredictionResult" type="int">
-  <int value="0" label="Gesture occured and was predicted"/>
-  <int value="1" label="Gesture occured but was not predicted"/>
-  <int value="2" label="Gesture predicted but didn't occur"/>
-</enum>
-
-<enum name="GetOutputDeviceInfoCacheHit" type="int">
-  <int value="0" label="Miss: no cached sink found">
-    Output parmeters for a device are requested, and there is no corresponding
-    sink cached; new sink is created and cached.
-  </int>
-  <int value="1" label="Miss: cannot lookup by session id">
-    If session id is used to specify a device, we always have to create and
-    cache a new sink.
-  </int>
-  <int value="2" label="Hit">
-    Output parmeters for a device are requested, and there is a corresponding
-    sink cached.
-  </int>
-</enum>
-
-<enum name="GetPerfDataOutcome" type="int">
-  <int value="0" label="Success.">
-    Perf data was collected, parsed and attached to the UMA protobuf
-    successfully.
-  </int>
-  <int value="1" label="No perf data ready to be uploaded.">
-    Could not add perf data to the UMA protobuf because no perf data was ready
-    to be uploaded.
-  </int>
-  <int value="2" label="Collection timer triggered but have data already.">
-    Perf timer triggered but the perf provider already had a perf data proto to
-    be added to the UMA protobuf.
-  </int>
-  <int value="3"
-      label="Collection timer triggered but incognito window active.">
-    Perf timer triggered but an incognito window was open.
-  </int>
-  <int value="4" label="Incognito window launched during collection.">
-    Perf data was collected but an incognito window was opened during the
-    collection.
-  </int>
-  <int value="5" label="Protobuf returned by debugd not deserialized.">
-    Perf data was collected and sent to Chrome as a serialized protobuf but it
-    could not be deserialized by Chrome.
-  </int>
-  <int value="6" label="Illegal data returned by debugd.">
-    The perf data sent back to Chrome by debugd is invalid.
-  </int>
-  <int value="7" label="Already collecting.">
-    A perf data collection was already active.
-  </int>
-</enum>
-
-<enum name="GetUserDataTempDirResult" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="CANT_GET_PARENT_PATH"/>
-  <int value="2" label="CANT_GET_UDT_PATH"/>
-  <int value="3" label="NOT_A_DIRECTORY"/>
-  <int value="4" label="CANT_CREATE_DIR"/>
-  <int value="5" label="CANT_WRITE_TO_PATH"/>
-  <int value="6" label="UNSET"/>
-</enum>
-
-<enum name="GLError" type="int">
-  <int value="0" label="0x0000 - GL_NO_ERROR"/>
-  <int value="1280" label="0x0500 - GL_INVALID_ENUM"/>
-  <int value="1281" label="0x0501 - GL_INVALID_VALUE"/>
-  <int value="1282" label="0x0502 - GL_INVALID_OPERATION"/>
-  <int value="1285" label="0x0505 - GL_OUT_OF_MEMORY"/>
-  <int value="1286" label="0x0506 - GL_INVALID_FRAMEBUFFER_OPERATION"/>
-</enum>
-
-<enum name="GoogleCaptchaEvent" type="int">
-  <int value="0" label="Google CAPTCHA shown"/>
-  <int value="1" label="Google CAPTCHA solved"/>
-</enum>
-
-<enum name="GoogleNowCardTypeId" type="int">
-  <summary>
-    Represents a card type ID. See cardTypeId in
-    chrome/browser/resources/google_now/background.js.
-  </summary>
-  <int value="1" label="Frequent Place"/>
-  <int value="7" label="Weather"/>
-  <int value="12" label="Flight Status"/>
-  <int value="13" label="Sport Score"/>
-  <int value="14" label="Calendar"/>
-  <int value="19" label="Public Alert"/>
-  <int value="21" label="Stock Quote List"/>
-  <int value="23" label="Package Tracking"/>
-  <int value="27" label="Birthday"/>
-  <int value="43" label="Reminder"/>
-</enum>
-
-<enum name="GoogleNowEvent" type="int">
-  <summary>
-    Events in Google Now component extension. See GoogleNowEvent in
-    chrome/browser/resources/google_now/background.js.
-  </summary>
-  <int value="0" label="REQUEST_FOR_CARDS_TOTAL"/>
-  <int value="1" label="REQUEST_FOR_CARDS_SUCCESS"/>
-  <int value="2" label="CARDS_PARSE_SUCCESS"/>
-  <int value="3" label="DISMISS_REQUEST_TOTAL"/>
-  <int value="4" label="DISMISS_REQUEST_SUCCESS"/>
-  <int value="5" label="LOCATION_REQUEST"/>
-  <int value="6" label="DELETED_LOCATION_UPDATE"/>
-  <int value="7" label="EXTENSION_START"/>
-  <int value="8" label="DELETED_SHOW_WELCOME_TOAST"/>
-  <int value="9" label="STOPPED"/>
-  <int value="10" label="DELETED_USER_SUPPRESSED"/>
-  <int value="11" label="SIGNED_OUT"/>
-  <int value="12" label="NOTIFICATION_DISABLED"/>
-  <int value="13" label="GOOGLE_NOW_DISABLED"/>
-</enum>
-
-<enum name="GooglePlayServicesConnectionResult" type="int">
-  <summary>
-    Results of attempting a connection to Google Play Services. See Javadoc for
-    com.google.android.gms.common.ConnectionResult at
-    http://developer.android.com/reference for more information.
-  </summary>
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="SERVICE_MISSING"/>
-  <int value="2" label="SERVICE_VERSION_UPDATE_REQUIRED"/>
-  <int value="3" label="SERVICE_DISABLED"/>
-  <int value="4" label="SIGN_IN_REQUIRED"/>
-  <int value="5" label="INVALID_ACCOUNT"/>
-  <int value="6" label="RESOLUTION_REQUIRED"/>
-  <int value="7" label="NETWORK_ERROR"/>
-  <int value="8" label="INTERNAL_ERROR"/>
-  <int value="9" label="SERVICE_INVALID"/>
-  <int value="10" label="DEVELOPER_ERROR"/>
-  <int value="11" label="LICENSE_CHECK_FAILED"/>
-  <int value="12" label="DATE_INVALID"/>
-  <int value="13" label="CANCELED"/>
-  <int value="14" label="TIMEOUT"/>
-  <int value="15" label="INTERRUPTED"/>
-  <int value="16" label="API_UNAVAILABLE"/>
-  <int value="17" label="SIGN_IN_FAILED"/>
-  <int value="18" label="SERVICE_UPDATING"/>
-  <int value="1500" label="DRIVE_EXTERNAL_STORAGE_REQUIRED"/>
-</enum>
-
-<enum name="GooglePlayServicesErrorHandlerAction" type="int">
-  <summary>
-    Types of action taken in response to Google Play Services user-recoverable
-    errors. See subclasses of UserRecoverableErrorHandler in
-    org.chromium.chrome.browser.externalauth.ExternalAuthUtils for more
-    information.
-  </summary>
-  <int value="0" label="SILENT"/>
-  <int value="1" label="SYSTEM_NOTIFICATION"/>
-  <int value="2" label="MODAL_DIALOG"/>
-  <int value="3" label="IGNORED_AS_REDUNDANT"/>
-</enum>
-
-<enum name="GoogleServiceAuthError" type="int">
-  <int value="0" label="NONE"/>
-  <int value="1" label="INVALID_GAIA_CREDENTIALS"/>
-  <int value="2" label="USER_NOT_SIGNED_UP"/>
-  <int value="3" label="CONNECTION_FAILED"/>
-  <int value="4" label="CAPTCHA_REQUIRED"/>
-  <int value="5" label="ACCOUNT_DELETED"/>
-  <int value="6" label="ACCOUNT_DISABLED"/>
-  <int value="7" label="SERVICE_UNAVAILABLE"/>
-  <int value="8" label="TWO_FACTOR"/>
-  <int value="9" label="REQUEST_CANCELED"/>
-  <int value="10" label="HOSTED_NOT_ALLOWED (deprecated)"/>
-  <int value="11" label="UNEXPECTED_SERVICE_RESPONSE"/>
-  <int value="12" label="SERVICE_ERROR"/>
-  <int value="13" label="WEB_LOGIN_REQUIRED"/>
-</enum>
-
-<enum name="GoogleUpdateAfterItemClickedActions" type="int">
-  <int value="0" label="Updated"/>
-  <int value="1" label="Not updated"/>
-</enum>
-
-<enum name="GoogleUpdateErrorCode" type="int">
-  <int value="0" label="GOOGLE_UPDATE_NO_ERROR"/>
-  <int value="1" label="CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY"/>
-  <int value="2" label="GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED"/>
-  <int value="3" label="GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND"/>
-  <int value="4" label="GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR"/>
-  <int value="5" label="GOOGLE_UPDATE_GET_RESULT_CALL_FAILED"/>
-  <int value="6" label="GOOGLE_UPDATE_GET_VERSION_INFO_FAILED"/>
-  <int value="7" label="GOOGLE_UPDATE_ERROR_UPDATING"/>
-  <int value="8" label="GOOGLE_UPDATE_DISABLED_BY_POLICY"/>
-  <int value="9" label="GOOGLE_UPDATE_DISABLED_BY_POLICY_AUTO_ONLY"/>
-</enum>
-
-<enum name="GoogleUpdateInfoBarActions" type="int">
-  <int value="0" label="Clicked close"/>
-  <int value="1" label="Clicked to update appears successful"/>
-  <int value="2" label="Clicked to update but failed"/>
-  <int value="3" label="InfoBar dismissed implicitly (no interaction)"/>
-</enum>
-
-<enum name="GoogleUpdateMenuItemActions" type="int">
-  <int value="0" label="Not clicked"/>
-  <int value="1" label="Clicked, intent launched"/>
-  <int value="2" label="Clicked, intent failed"/>
-</enum>
-
-<enum name="GoogleUpdateUpgradeStatus" type="int">
-  <int value="0" label="UPGRADE_STARTED"/>
-  <int value="1" label="UPGRADE_CHECK_STARTED"/>
-  <int value="2" label="UPGRADE_IS_AVAILABLE"/>
-  <int value="3" label="UPGRADE_SUCCESSFUL"/>
-  <int value="4" label="UPGRADE_ALREADY_UP_TO_DATE"/>
-  <int value="5" label="UPGRADE_ERROR"/>
-</enum>
-
-<enum name="GpuImageDecodeState" type="int">
-  <int value="0" label="Wasted, once"/>
-  <int value="1" label="Used, once"/>
-  <int value="2" label="Wasted, relocked"/>
-  <int value="3" label="Used, relocked"/>
-</enum>
-
-<enum name="GPUProcessExitCode" type="int">
-  <summary>
-    The exit code returned by the GPU process when it terminated. These match
-    the enumeration in result_codes.h.
-  </summary>
-  <int value="0" label="Normal"/>
-  <int value="1" label="Killed"/>
-  <int value="2" label="Hung"/>
-  <int value="3" label="KilledBadMessage"/>
-  <int value="4" label="DeadOnArrival"/>
-</enum>
-
-<enum name="GPUProcessLaunchCauses" type="int">
-  <summary>
-    Causes for the GPU Process to be launched. From:
-    content/common/gpu/gpu_process_launch_causes.h
-  </summary>
-  <int value="0" label="about:gpucrash">
-    CAUSE_FOR_GPU_LAUNCH_ABOUT_GPUCRASH
-  </int>
-  <int value="1" label="about:gpuhang">CAUSE_FOR_GPU_LAUNCH_ABOUT_GPUHANG</int>
-  <int value="2" label="GpuDataManager RequestCompleteGpuInfoIfNeeded">
-    CAUSE_FOR_GPU_LAUNCH_GPUDATAMANAGER_REQUESTCOMPLETEGPUINFOIFNEEDED
-  </int>
-  <int value="3" label="RenderWidgetFullScreenPepper CreateContext">
-    CAUSE_FOR_GPU_LAUNCH_RENDERWIDGETFULLSCREENPEPPER_CREATECONTEXT
-  </int>
-  <int value="4" label="WebGraphicsContext3DCommandBufferImpl Initialize">
-    CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE
-  </int>
-  <int value="5" label="NoLaunch">CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH</int>
-  <int value="6" label="VideoDecodeAccelerator Initialize">
-    CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE
-  </int>
-  <int value="7" label="Pepper PlatformContext3DImpl Initialize">
-    CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE
-  </int>
-  <int value="8" label="Browser Startup">
-    CAUSE_FOR_GPU_LAUNCH_BROWSER_STARTUP
-  </int>
-  <int value="9" label="Canvas 2D">CAUSE_FOR_GPU_LAUNCH_CANVAS_2D</int>
-  <int value="10" label="Pepper VideoEncodeAccelerator Initialize">
-    CAUSE_FOR_GPU_LAUNCH_PEPPERVIDEOENCODERACCELERATOR_INITIALIZE
-  </int>
-  <int value="11" label="GpuMemoryBuffer allocate">
-    CAUSE_FOR_GPU_LAUNCH_GPU_MEMORY_BUFFER_ALLOCATE
-  </int>
-  <int value="12" label="JpegDecodeAccelerator Initialize">
-    CAUSE_FOR_GPU_LAUNCH_JPEGDECODEACCELERATOR_INITIALIZE
-  </int>
-  <int value="13" label="Mojo Setup">CAUSE_FOR_GPU_LAUNCH_MOJO_SETUP</int>
-  <int value="14" label="Get Gpu Service Registry">
-    CAUSE_FOR_GPU_LAUNCH_GET_GPU_SERVICE_REGISTRY
-  </int>
-  <int value="15" label="Browser shared main thread context">
-    CAUSE_FOR_GPU_LAUNCH_BROWSER_SHARED_MAIN_THREAD_CONTEXT
-  </int>
-  <int value="16" label="Renderer shared main thread context">
-    CAUSE_FOR_GPU_LAUNCH_RENDERER_SHARED_MAIN_THREAD_CONTEXT
-  </int>
-  <int value="17" label="WebGL context">CAUSE_FOR_GPU_LAUNCH_WEBGL_CONTEXT</int>
-  <int value="18" label="Shared worker thread context">
-    CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT
-  </int>
-  <int value="19" label="Renderer verify GPU compositing">
-    CAUSE_FOR_GPU_LAUNCH_RENDERER_VERIFY_GPU_COMPOSITING
-  </int>
-  <int value="20" label="Display compositor context">
-    CAUSE_FOR_GPU_LAUNCH_DISPLAY_COMPOSITOR_CONTEXT
-  </int>
-  <int value="21" label="Media worker context">
-    CAUSE_FOR_GPU_LAUNCH_MEDIA_CONTEXT
-  </int>
-</enum>
-
-<enum name="GsaAccountChangeNotificationSource" type="int">
-  <int value="0" label="Service"/>
-  <int value="1" label="Broadcast"/>
-</enum>
-
-<enum name="GzipEncodingFixupResult" type="int">
-  <int value="0" label="Gzip encoding left as-is"/>
-  <int value="1" label="MIME type indicated GZIP content"/>
-  <int value="2" label="Explicit download with GZIP filename extension"/>
-  <int value="3" label="Unhandled MIME type with a GZIP filename extension"/>
-</enum>
-
-<enum name="HadFormInteraction" type="int">
-  <int value="0" label="No form interaction"/>
-  <int value="1" label="Observed form interaction"/>
-</enum>
-
-<enum name="HandleStateType" type="int">
-  <int value="0" label="Launch"/>
-  <int value="1" label="Checked launch"/>
-  <int value="2" label="Dont launch"/>
-  <int value="3" label="Checked dont launch"/>
-</enum>
-
-<enum name="HIDContinueScenarioType" type="int">
-  <summary>Possible detected devices combination on leaving dialog</summary>
-  <int value="0" label="Pointing device only detected."/>
-  <int value="1" label="Keyboard device only detected."/>
-  <int value="2" label="Both devices, pointing and keyboard, detected."/>
-</enum>
-
-<enum name="HistogramActivityReport" type="int">
-  <int value="0" label="Reports created"/>
-  <int value="1" label="Histograms created"/>
-  <int value="2" label="Histograms found by look-up"/>
-  <int value="3" label="Logarithmic histograms created"/>
-  <int value="4" label="Linear histograms created"/>
-  <int value="5" label="Boolean histograms created"/>
-  <int value="6" label="Custom histograms created"/>
-  <int value="7" label="Sparse histograms created"/>
-  <int value="8" label="UMA-targeted histograms created"/>
-  <int value="9" label="UMA-stability histograms created"/>
-  <int value="10" label="Persistent histograms created"/>
-</enum>
-
-<enum name="HistoryFaviconsRecoveryEnum" type="int">
-  <summary>Error states noted in thumbnail_database.cc recovery code.</summary>
-  <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
-  <int value="1" label="RECOVERY_EVENT_FAILED_SCOPER">
-    sql::Recovery failed init.
-  </int>
-  <int value="2" label="RECOVERY_EVENT_FAILED_META_VERSION_ERROR">
-    Query failed against recovery meta table.
-  </int>
-  <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION_NONE">
-    No version row in recovery meta table.
-  </int>
-  <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION6">
-    Recovery meta table has version 6.
-  </int>
-  <int value="5" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION5">
-    Recovery meta table has version 5.
-  </int>
-  <int value="6" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
-    Recovery meta table has an unexpected version.
-  </int>
-  <int value="7" label="RECOVERY_EVENT_FAILED_RECOVER_META">
-    Failed to create recovery meta table.
-  </int>
-  <int value="8" label="RECOVERY_EVENT_FAILED_META_INSERT">
-    Failed to copy recovery meta table.
-  </int>
-  <int value="9" label="RECOVERY_EVENT_FAILED_INIT">
-    Failed to init target schema.
-  </int>
-  <int value="10" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICONS">
-    Failed to create recovery favicons table.
-  </int>
-  <int value="11" label="RECOVERY_EVENT_FAILED_FAVICONS_INSERT">
-    Failed to copy recovery favicons table.
-  </int>
-  <int value="12" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICON_BITMAPS">
-    Failed to create recovery favicon_bitmaps table.
-  </int>
-  <int value="13" label="RECOVERY_EVENT_FAILED_FAVICON_BITMAPS_INSERT">
-    Failed to copy recovery favicon_bitmaps table.
-  </int>
-  <int value="14" label="RECOVERY_EVENT_FAILED_RECOVER_ICON_MAPPING">
-    Failed to create recovery icon_mapping table.
-  </int>
-  <int value="15" label="RECOVERY_EVENT_FAILED_ICON_MAPPING_INSERT">
-    Failed to copy recovery icon_mapping table.
-  </int>
-  <int value="16" label="RECOVERY_EVENT_RECOVERED_VERSION6">
-    Successful recovery of version 6 database.
-  </int>
-  <int value="17" label="RECOVERY_EVENT_FAILED_META_INIT">
-    Failed sql::MetaTable::Init().
-  </int>
-  <int value="18" label="RECOVERY_EVENT_FAILED_META_VERSION">
-    Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
-  </int>
-  <int value="19" label="RECOVERY_EVENT_DEPRECATED">
-    Recovery found deprecated version and razed.
-  </int>
-  <int value="20" label="RECOVERY_EVENT_FAILED_V5_INITSCHEMA">
-    Failed v5 recovery loading schema.
-  </int>
-  <int value="21" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_FAVICONS">
-    Failed v5 recovery on favicons.
-  </int>
-  <int value="22" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_ICON_MAPPING">
-    Failed v5 recovery on icon_mapping.
-  </int>
-  <int value="23" label="RECOVERY_EVENT_RECOVERED_VERSION5">
-    Successful recovery of version 6 database.
-  </int>
-  <int value="24" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICONS">
-    Failed v6/7 recovery on favicons.
-  </int>
-  <int value="25" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICON_BITMAPS">
-    Failed v6/7 recovery on favicon_bitmaps.
-  </int>
-  <int value="26" label="RECOVERY_EVENT_FAILED_AUTORECOVER_ICON_MAPPING">
-    Failed v6/7 recovery on icon_mapping.
-  </int>
-  <int value="27" label="RECOVERY_EVENT_FAILED_COMMIT">
-    Failed sql::Recovery::Recovered().
-  </int>
-</enum>
-
-<enum name="HistoryPageView" type="int">
-  <int value="0" label="History"/>
-  <int value="1" label="Grouped Week (Obsolete Feb. 2017)"/>
-  <int value="2" label="Grouped Month (Obsolete Feb. 2017)"/>
-  <int value="3" label="Synced Tabs"/>
-  <int value="4" label="Signin Promo"/>
-</enum>
-
-<enum name="HistoryTopSitesRecoveryEnum" type="int">
-  <summary>Error states noted in top_sites_database.cc recovery code.</summary>
-  <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
-  <int value="1" label="RECOVERY_EVENT_DEPRECATED">
-    Recovery found deprecated version and razed.
-  </int>
-  <int value="2" label="RECOVERY_EVENT_FAILED_SCOPER">
-    sql::Recovery failed init.
-  </int>
-  <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION">
-    Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
-  </int>
-  <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
-    Recovery meta table has an unexpected version.
-  </int>
-  <int value="5" label="RECOVERY_EVENT_FAILED_META_INIT">
-    Failed sql::MetaTable::Init().
-  </int>
-  <int value="6" label="RECOVERY_EVENT_FAILED_SCHEMA_INIT">
-    Failed to init target schema.
-  </int>
-  <int value="7" label="RECOVERY_EVENT_FAILED_AUTORECOVER_THUMBNAILS">
-    Failed recovery on thumbnails table.
-  </int>
-  <int value="8" label="RECOVERY_EVENT_FAILED_COMMIT">
-    Failure from sql::Recovery::Recovered().
-  </int>
-  <int value="9" label="RECOVERY_EVENT_INVARIANT_RANK">
-    Rows were deleted because |url_rank| and |last_forced| didn't agree.  Does
-    not prevent recovery.
-  </int>
-  <int value="10" label="RECOVERY_EVENT_INVARIANT_REDIRECT">
-    Rows were deleted because |redirects| did not contain |url|.  Does not
-    prevent recovery.
-  </int>
-  <int value="11" label="RECOVERY_EVENT_INVARIANT_CONTIGUOUS">
-    |url_rank| was renumbered due to missing rows.  Does not prevent recovery.
-  </int>
-</enum>
-
-<enum name="HotwordAvailability" type="int">
-  <int value="0" label="Unavailable -- reason may be unknown"/>
-  <int value="1" label="Available"/>
-  <int value="2" label="Pending download"/>
-  <int value="3" label="Disabled"/>
-</enum>
-
-<enum name="HotwordError" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Generic error"/>
-  <int value="2" label="NaCl error"/>
-  <int value="3" label="Microphone error"/>
-</enum>
-
-<enum name="HotwordMediaStreamResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unknown error"/>
-  <int value="2" label="NotSupportedError"/>
-  <int value="3" label="PermissionDeniedError"/>
-  <int value="4" label="ConstraintNotSatisfiedError"/>
-  <int value="5" label="OverconstrainedError"/>
-  <int value="6" label="NotFoundError"/>
-  <int value="7" label="AbortError"/>
-  <int value="8" label="SourceUnavailableError"/>
-  <int value="9" label="PermissionDismissedError"/>
-  <int value="10" label="InvalidStateError"/>
-  <int value="11" label="DevicesNotFoundError"/>
-  <int value="12" label="InvalidSecurityOriginError"/>
-</enum>
-
-<enum name="HotwordNaClMessageTimeout" type="int">
-  <int value="0" label="REQUEST_MODEL"/>
-  <int value="1" label="MODEL_LOADED"/>
-  <int value="2" label="READY_FOR_AUDIO"/>
-  <int value="3" label="STOPPED"/>
-  <int value="4" label="HOTWORD_DETECTED"/>
-  <int value="5" label="MS_CONFIGURED"/>
-</enum>
-
-<enum name="HotwordNaClPluginLoadResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unknown error"/>
-  <int value="2" label="Module crash"/>
-  <int value="3" label="Module not found"/>
-</enum>
-
-<enum name="HotwordPrefState" type="int">
-  <int value="0" label="Preference not set"/>
-  <int value="1" label="'Classic' hotwording enabled"/>
-  <int value="2" label="Hotwording disabled"/>
-  <int value="3" label="Always-on hotwording enabled"/>
-</enum>
-
-<enum name="HotwordTriggerSource" type="int">
-  <int value="0" label="Launcher (except when always-on is enabled)"/>
-  <int value="1" label="NTP or google.com"/>
-  <int value="2" label="Always-On"/>
-  <int value="3" label="Training Mode"/>
-</enum>
-
-<enum name="Hresult" type="int">
-  <int value="-2147467263" label="E_NOTIMPL"/>
-  <int value="-2147467262" label="E_NOINTERFACE"/>
-  <int value="-2147467261" label="E_POINTER"/>
-  <int value="-2147467260" label="E_ABORT"/>
-  <int value="-2147467259" label="E_FAIL"/>
-  <int value="-2147418113" label="E_UNEXPECTED"/>
-  <int value="-2147417848" label="RPC_E_DISCONNECTED"/>
-  <int value="-2147221164" label="REGDB_E_CLASSNOTREG"/>
-  <int value="-2147219455" label="GOOPDATE_E_NO_NETWORK"/>
-  <int value="-2147219437" label="GOOPDATE_E_APP_UPDATE_DISABLED_BY_POLICY"/>
-  <int value="-2147219198" label="GOOPDATEINSTALL_E_INSTALLER_FAILED"/>
-  <int value="-2147024894" label="ERROR_FILE_NOT_FOUND"/>
-  <int value="-2147024893" label="ERROR_PATH_NOT_FOUND"/>
-  <int value="-2147024891" label="E_ACCESSDENIED"/>
-  <int value="-2147024890" label="E_HANDLE"/>
-  <int value="-2147024882" label="E_OUTOFMEMORY"/>
-  <int value="-2147024809" label="E_INVALIDARG"/>
-  <int value="-2147024703" label="ERROR_BAD_EXE_FORMAT"/>
-  <int value="-2147024110" label="ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY"/>
-  <int value="-2147023838" label="ERROR_SERVICE_DISABLED"/>
-  <int value="-2147023673" label="ERROR_CANCELLED"/>
-  <int value="-2147023504" label="ERROR_FILE_CORRUPT"/>
-  <int value="-2147023436" label="ERROR_TIMEOUT"/>
-  <int value="-2147023179" label="RPC_S_UNKNOWN_IF"/>
-  <int value="-2147023174" label="RPC_S_SERVER_UNAVAILABLE"/>
-  <int value="-2147012894" label="WININET_E_TIMEOUT"/>
-  <int value="-2147012889" label="WININET_E_NAME_NOT_RESOLVED"/>
-  <int value="-2147012867" label="WININET_E_CANNOT_CONNECT"/>
-  <int value="-2147012866" label="WININET_E_CONNECTION_ABORTED"/>
-  <int value="-2147009295" label="ERROR_INSTALL_PACKAGE_NOT_FOUND"/>
-  <int value="-2146959355" label="CO_E_SERVER_EXEC_FAILURE"/>
-  <int value="-2005270527" label="DXGI_ERROR_INVALID_CALL"/>
-  <int value="-2005270526" label="DXGI_ERROR_NOT_FOUND"/>
-  <int value="-2005270525" label="DXGI_ERROR_MORE_DATA"/>
-  <int value="-2005270524" label="DXGI_ERROR_UNSUPPORTED"/>
-  <int value="-2005270523" label="DXGI_ERROR_DEVICE_REMOVED"/>
-  <int value="-2005270522" label="DXGI_ERROR_DEVICE_HUNG"/>
-  <int value="-2005270521" label="DXGI_ERROR_DEVICE_RESET"/>
-  <int value="-2005270518" label="DXGI_ERROR_WAS_STILL_DRAWING"/>
-  <int value="-2005270517" label="DXGI_ERROR_FRAME_STATISTICS_DISJOINT"/>
-  <int value="-2005270516" label="DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE"/>
-  <int value="-2005270496" label="DXGI_ERROR_DRIVER_INTERNAL_ERROR"/>
-  <int value="-2005270495" label="DXGI_ERROR_NONEXCLUSIVE"/>
-  <int value="-2005270494" label="DXGI_ERROR_NOT_CURRENTLY_AVAILABLE"/>
-  <int value="-2005270493" label="DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED"/>
-  <int value="-2005270492" label="DXGI_ERROR_REMOTE_OUTOFMEMORY"/>
-  <int value="-2005270490" label="DXGI_ERROR_ACCESS_LOST"/>
-  <int value="-2005270489" label="DXGI_ERROR_WAIT_TIMEOUT"/>
-  <int value="-2005270488" label="DXGI_ERROR_SESSION_DISCONNECTED"/>
-  <int value="-2005270487" label="DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE"/>
-  <int value="-2005270486" label="DXGI_ERROR_CANNOT_PROTECT_CONTENT"/>
-  <int value="-2005270485" label="DXGI_ERROR_ACCESS_DENIED"/>
-  <int value="-2005270484" label="DXGI_ERROR_NAME_ALREADY_EXISTS"/>
-  <int value="-2005270483" label="DXGI_ERROR_SDK_COMPONENT_MISSING"/>
-  <int value="-2004287480" label="AUDCLNT_E_UNSUPPORTED_FORMAT"/>
-  <int value="-2004287478" label="AUDCLNT_E_DEVICE_IN_USE"/>
-  <int value="-2004287465" label="AUDCLNT_E_CPUUSAGE_EXCEEDED"/>
-  <int value="-1606219753" label="GOOPDATE_E_NON_BLOCKING_CALL_PENDING"/>
-  <int value="-1606219747" label="GOOPDATE_E_APP_USING_EXTERNAL_UPDATER"/>
-</enum>
-
-<enum name="HttpAuthCount" type="int">
-  <int value="0" label="Basic Start"/>
-  <int value="1" label="Basic Reject"/>
-  <int value="2" label="Digest Start"/>
-  <int value="3" label="Digest Reject"/>
-  <int value="4" label="NTLM Start"/>
-  <int value="5" label="NTLM Reject"/>
-  <int value="6" label="Negotiate Start"/>
-  <int value="7" label="Negotiate Reject"/>
-</enum>
-
-<enum name="HttpAuthPromptType" type="int">
-  <int value="0" label="Main frame with interstitial">
-    Auth prompt displayed over a blank interstitial
-  </int>
-  <int value="1" label="Main frame without interstitial">
-    Auth prompt displayed for the main frame, without a blank interstitial
-  </int>
-  <int value="2" label="Same origin subresource">
-    Auth prompt displayed for a subresource from the same origin
-  </int>
-  <int value="3" label="Cross origin subresource">
-    Auth prompt displayed for a subresource from a different origin
-  </int>
-</enum>
-
-<enum name="HttpAuthResource" type="int">
-  <int value="0" label="Top Page Allowed"/>
-  <int value="1" label="Same-domain Sub-resource Allowed"/>
-  <int value="2" label="Cross-domain Sub-resource Blocked"/>
-  <int value="3" label="Cross-domain Sub-resource Allowed"/>
-</enum>
-
-<enum name="HttpAuthTarget" type="int">
-  <int value="0" label="Basic Proxy"/>
-  <int value="1" label="Basic Secure Proxy"/>
-  <int value="2" label="Basic Server"/>
-  <int value="3" label="Basic Secure Server"/>
-  <int value="4" label="Digest Proxy"/>
-  <int value="5" label="Digest Secure Proxy"/>
-  <int value="6" label="Digest Server"/>
-  <int value="7" label="Digest Secure Server"/>
-  <int value="8" label="NTLM Proxy"/>
-  <int value="9" label="NTLM Secure Proxy"/>
-  <int value="10" label="NTLM Server"/>
-  <int value="11" label="NTLM Secure Server"/>
-  <int value="12" label="Negotiate Proxy"/>
-  <int value="13" label="Negotiate Secure Proxy"/>
-  <int value="14" label="Negotiate Server"/>
-  <int value="15" label="Negotiate Secure Server"/>
-</enum>
-
-<enum name="HttpCachePattern" type="int">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Not Covered"/>
-  <int value="2" label="Not Cached"/>
-  <int value="3" label="Used"/>
-  <int value="4" label="Validated"/>
-  <int value="5" label="Updated"/>
-  <int value="6" label="CantConditionalize"/>
-</enum>
-
-<enum name="HttpCacheValidationCause" type="int">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Vary Mismatch"/>
-  <int value="2" label="Validate Flag"/>
-  <int value="3" label="Stale Resource"/>
-  <int value="4" label="Zero Freshness"/>
-</enum>
-
-<enum name="HttpHeaderParserEvent" type="int">
-  <int value="0" label="PARSER_INVOKED"/>
-  <int value="1" label="HTTP_09_RESPONSE"/>
-  <int value="2" label="ALLOWED_TRUNCATED_HEADERS"/>
-  <int value="3" label="SKIPPED_WS_PREFIX"/>
-  <int value="4" label="SKIPPED_NON_WS_PREFIX"/>
-  <int value="5" label="HTTP_09_RESPONSE_OVER_HTTP"/>
-  <int value="6" label="HTTP_09_RESPONSE_OVER_SSL"/>
-  <int value="7" label="HEADER_HTTP_09_ON_REUSED_SOCKET"/>
-</enum>
-
-<enum name="HttpPasswordMigrationMode" type="int">
-  <int value="0" label="Moved">
-    HTTP credentials were moved during migration to HTTPS
-  </int>
-  <int value="1" label="Copied">
-    HTTP credentials were copied during migration to HTTPS
-  </int>
-</enum>
-
-<enum name="HttpPipelineStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Redirected"/>
-  <int value="2" label="Certificate error"/>
-  <int value="3" label="Bad HTTP response code"/>
-  <int value="4" label="Network error"/>
-  <int value="5" label="Response too large"/>
-  <int value="6" label="Response too small"/>
-  <int value="7" label="Response content mismatch"/>
-  <int value="8" label="Bad HTTP version"/>
-  <int value="9" label="Corrupt stats response"/>
-</enum>
-
-<enum name="HttpResponseCode" type="int">
-  <int value="100" label="100: Continue"/>
-  <int value="101" label="101: Switching Protocols"/>
-  <int value="200" label="200: OK"/>
-  <int value="201" label="201: Created"/>
-  <int value="202" label="202: Accepted"/>
-  <int value="203" label="203: Non-Authoritative Information"/>
-  <int value="204" label="204: No Content"/>
-  <int value="205" label="205: Reset Content"/>
-  <int value="206" label="206: Partial Content"/>
-  <int value="300" label="300: Multiple Choices"/>
-  <int value="301" label="301: Moved Permanently"/>
-  <int value="302" label="302: Found"/>
-  <int value="303" label="303: See Other"/>
-  <int value="304" label="304: Not Modified"/>
-  <int value="305" label="305: Use Proxy"/>
-  <int value="306" label="306: (Unused)"/>
-  <int value="307" label="307: Temporary Redirect"/>
-  <int value="400" label="400: Bad Request"/>
-  <int value="401" label="401: Unauthorized"/>
-  <int value="402" label="402: Payment Required"/>
-  <int value="403" label="403: Forbidden"/>
-  <int value="404" label="404: Not Found"/>
-  <int value="405" label="405: Method Not Allowed"/>
-  <int value="406" label="406: Not Acceptable"/>
-  <int value="407" label="407: Proxy Authentication Required"/>
-  <int value="408" label="408: Request Timeout"/>
-  <int value="409" label="409: Conflict"/>
-  <int value="410" label="410: Gone"/>
-  <int value="411" label="411: Length Required"/>
-  <int value="412" label="412: Precondition Failed"/>
-  <int value="413" label="413: Request Entity Too Large"/>
-  <int value="414" label="414: Request-URI Too Long"/>
-  <int value="415" label="415: Unsupported Media Type"/>
-  <int value="416" label="416: Requested Range Not Satisfiable"/>
-  <int value="417" label="417: Expectation Failed"/>
-  <int value="500" label="500: Internal Server Error"/>
-  <int value="501" label="501: Not Implemented"/>
-  <int value="502" label="502: Bad Gateway"/>
-  <int value="503" label="503: Service Unavailable"/>
-  <int value="504" label="504: Gateway Timeout"/>
-  <int value="505" label="505: HTTP Version Not Supported"/>
-</enum>
-
-<enum name="HttpServerPropertiesUpdatePrefsLocation" type="int">
-  <int value="0" label="SUPPORTS_SPDY"/>
-  <int value="1" label="HTTP_11_REQUIRED"/>
-  <int value="2" label="SET_ALTERNATIVE_SERVICE"/>
-  <int value="3" label="MARK_ALTERNATIVE_SERVICE_BROKEN"/>
-  <int value="4" label="MARK_ALTERNATIVE_SERVICE_RECENTLY_BROKEN"/>
-  <int value="5" label="CONFIRM_ALTERNATIVE_SERVICE"/>
-  <int value="6" label="CLEAR_ALTERNATIVE_SERVICE"/>
-  <int value="7" label="SET_SPDY_SETTING"/>
-  <int value="8" label="CLEAR_SPDY_SETTINGS"/>
-  <int value="9" label="CLEAR_ALL_SPDY_SETTINGS"/>
-  <int value="10" label="SET_SUPPORTS_QUIC"/>
-  <int value="11" label="SET_SERVER_NETWORK_STATS"/>
-  <int value="12" label="DETECTED_CORRUPTED_PREFS"/>
-  <int value="13" label="SET_QUIC_SERVER_INFO"/>
-  <int value="14" label="CLEAR_SERVER_NETWORK_STATS"/>
-</enum>
-
-<enum name="HttpSocketType" type="int">
-  <int value="0" label="UNUSED">newly connected socket</int>
-  <int value="1" label="UNUSED_IDLE">
-    connected unused socket (idle prior to use)
-  </int>
-  <int value="2" label="REUSED_IDLE">previously used (keep-alive?) socket</int>
-</enum>
-
-<enum name="HttpStatusLineStatus" type="int">
-  <int value="0" label="OK">Spec-compliant status line</int>
-  <int value="1" label="EMPTY">Empty status line</int>
-  <int value="2" label="NOT_HTTP">Incorrect protocol name</int>
-  <int value="3" label="HTTP_CASE_MISMATCH">Protocol name not uppercase</int>
-  <int value="4" label="HTTP_NO_VERSION">Protocol version missing</int>
-  <int value="5" label="INVALID_VERSION">Protocol version invalid</int>
-  <int value="6" label="MULTI_DIGIT_VERSION">
-    Protocol version number is multiple digits
-  </int>
-  <int value="7" label="UNKNOWN_VERSION">Unknown but valid-looking version</int>
-  <int value="8" label="EXPLICIT_0_9">Explicitly specified HTTP/0.9</int>
-  <int value="9" label="MISSING_STATUS_CODE">Missing status code</int>
-  <int value="10" label="INVALID_STATUS_CODE">Invalid status code</int>
-  <int value="11" label="STATUS_CODE_TRAILING">
-    Trailing characters after status code
-  </int>
-  <int value="12" label="MISSING_REASON_PHRASE">Missing reason phrase</int>
-  <int value="13" label="REASON_DISALLOWED_CHARACTER">
-    Disallowed character in reason phrase
-  </int>
-  <int value="14" label="EXCESS_WHITESPACE">
-    Excess whitespace separating protocol version and status code
-  </int>
-  <int value="15" label="RESERVED_STATUS_CODE">
-    Status code from reserved ranges (0xx or 6xx-9xx)
-  </int>
-</enum>
-
-<enum name="ICCProfileAnalyzeResult" type="int">
-  <int value="0"
-      label="Extracted primary matrix and numerical transfer function"/>
-  <int value="1"
-      label="Extracted primary matrix and approximated transfer function"/>
-  <int value="2"
-      label="Failed to converge in approximation of transfer function"/>
-  <int value="3" label="Failed to extract transfer function"/>
-  <int value="4" label="Failed to extract primary matrix"/>
-  <int value="5" label="Failed to parse"/>
-</enum>
-
-<enum name="IceCandidatePairTypes" type="int">
-  <int value="0" label="host_host"/>
-  <int value="1" label="host_srflx"/>
-  <int value="2" label="host_relay"/>
-  <int value="3" label="host_prflx"/>
-  <int value="4" label="srflx_host"/>
-  <int value="5" label="srflx_srflx"/>
-  <int value="6" label="srflx_relay"/>
-  <int value="7" label="srflx_prflx"/>
-  <int value="8" label="relay_host"/>
-  <int value="9" label="relay_srflx"/>
-  <int value="10" label="relay_relay"/>
-  <int value="11" label="relay_prflx"/>
-  <int value="12" label="prflx_host"/>
-  <int value="13" label="prflx_srflx"/>
-  <int value="14" label="prflx_relay"/>
-  <int value="15" label="host(private)_host(private)"/>
-  <int value="16" label="host(private)_host(public)"/>
-  <int value="17" label="host(public)_host(private)"/>
-  <int value="18" label="host(public)_host(public)"/>
-</enum>
-
-<enum name="IceConnectionStates" type="int">
-  <int value="0" label="IceConnectionNew"/>
-  <int value="1" label="IceConnectionChecking"/>
-  <int value="2" label="IceConnectionConnected"/>
-  <int value="3" label="IceconnectionCompleted"/>
-  <int value="4" label="IceconnectionFailed"/>
-  <int value="5" label="IceconnectionDisconnected"/>
-  <int value="6" label="IceconnectionClosed"/>
-</enum>
-
-<enum name="IceRegatheringReason" type="int">
-  <int value="0" label="NetworkChange"/>
-  <int value="1" label="NetworkFailure"/>
-</enum>
-
-<enum name="IceRestartState" type="int">
-  <int value="0" label="Connecting"/>
-  <int value="1" label="Connected"/>
-  <int value="2" label="Disconnected"/>
-</enum>
-
-<enum name="IDBContextForcedCloseReason" type="int">
-  <int value="0" label="DeleteOrigin">
-    A request was made to delete the data for an origin.
-  </int>
-  <int value="1" label="BackingStoreFailure">
-    An unrecoverable error occurred accessing the backing store.
-  </int>
-  <int value="2" label="InternalsPage">
-    A forced close was requested from the indexeddb-internals page.
-  </int>
-</enum>
-
-<enum name="IDBKeyPathType" type="int">
-  <int value="0" label="None">No key path.</int>
-  <int value="1" label="String">Key path is a string.</int>
-  <int value="2" label="Array">Key path is an array of strings.</int>
-</enum>
-
-<enum name="IDBKeyType" type="int">
-  <int value="0" label="Invalid">Invalid key.</int>
-  <int value="1" label="Array">Key is an array.</int>
-  <int value="2" label="Binary">Key is a binary buffer.</int>
-  <int value="3" label="String">Key is a string.</int>
-  <int value="4" label="Date">Key is a date.</int>
-  <int value="5" label="Number">Key is a number.</int>
-</enum>
-
-<enum name="IDBLevelDBBackingStoreInternalErrorType" type="int">
-  <int value="0" label="IDBLevelDBBackingStoreReadError">
-    IndexedDB encountered an error attempting to read or decode a value from the
-    leveldb backing store, indicative of corruption or I/O error. Unused as of
-    M26.
-  </int>
-  <int value="1" label="IDBLevelDBBackingStoreWriteError">
-    IndexeDB encountered an error attempting to write or commit a value to the
-    leveldb backing store, indicative of I/O error. Unused as of M26.
-  </int>
-  <int value="2" label="IDBLevelDBBackingStoreConsistencyError">
-    IndexedDB encountered a consistency error in the leveldb backing store,
-    indicative of corruption or an coding error. Unused as of M26.
-  </int>
-  <int value="3" label="FindKeyInIndex"/>
-  <int value="4" label="GetIDBDatabaseMetaData"/>
-  <int value="5" label="GetIndexes"/>
-  <int value="6" label="GetKeyGeneratorCurrentNumber"/>
-  <int value="7" label="GetObjectStores"/>
-  <int value="8" label="GetRecord"/>
-  <int value="9" label="KeyExistsInObjectStore"/>
-  <int value="10" label="LoadCurrentRow"/>
-  <int value="11" label="SetupMetadata"/>
-  <int value="12" label="GetPrimaryKeyViaIndex"/>
-  <int value="13" label="KeyExistsInIndex"/>
-  <int value="14" label="VersionExists"/>
-  <int value="15" label="DeleteObjectStore"/>
-  <int value="16" label="SetMaxObjectStoreId"/>
-  <int value="17" label="SetMaxIndexId"/>
-  <int value="18" label="GetNewDatabaseId"/>
-  <int value="19" label="GetNewVersionNumber"/>
-  <int value="20" label="CreateIDBDatabaseMetaData"/>
-  <int value="21" label="DeleteDatabase"/>
-  <int value="22" label="TransactionCommit"/>
-  <int value="23" label="GetDatabaseNames"/>
-  <int value="24" label="ReadBlobJournal"/>
-  <int value="25" label="DecodeBlobJournal"/>
-  <int value="26" label="GetBlobKeyGeneratorCurrentNumber"/>
-  <int value="27" label="GetBlobInfoForRecord"/>
-</enum>
-
-<enum name="IDBLevelDBBackingStoreOpenResult" type="int">
-  <int value="0" label="OpenMemorySuccess">
-    An in-memory backing store was opened successfully.
-  </int>
-  <int value="1" label="OpenSuccess">
-    An on-disk backing store was opened successfully.
-  </int>
-  <int value="2" label="OpenFailedDirectory">
-    An on-disk backing store could not be opened or created because the
-    directory could not be opened or created. Cleanup will not be attempted.
-  </int>
-  <int value="3" label="OpenFailedUnknownSchema">
-    An on-disk backing store was opened but had an unknown schema version, due
-    to corruption or reverting to a previous version of Chrome. Cleanup will be
-    attempted.
-  </int>
-  <int value="4" label="OpenCleanupDestroyFailed">
-    An on-disk backing store failed to open; cleanup was attempted but the
-    database could not be destroyed.
-  </int>
-  <int value="5" label="OpenCleanupReopenFailed">
-    An on-disk backing store failed to open; cleanup was attempted but
-    re-opening the database failed.
-  </int>
-  <int value="6" label="OpenCleanupReopenSuccess">
-    An on-disk backing store failed to open; cleanup was attempted and the
-    database was then opened successfully.
-  </int>
-  <int value="7" label="OpenFailedIOErrCheckingSchema">
-    An on-disk backing store was opened but leveldb failed to read the schema
-    version.
-  </int>
-  <int value="8" label="OpenFailedUnknownErr"/>
-  <int value="9" label="OpenMemoryFailed">
-    An in-memory backing store failed to open.
-  </int>
-  <int value="10" label="OpenNonASCII">
-    A database with non-ascii characters in its path was opened (with either
-    success or failure).
-  </int>
-  <int value="11" label="OpenAttemptDiskFull">
-    An open failed on a machine with a full disk. No cleanup was attempted.
-  </int>
-  <int value="12" label="OpenAttemptPathTooLong">
-    Open failed because either a path component or the overall path was too
-    long.
-  </int>
-  <int value="13" label="OpenAttemptNoRecovery">
-    An open attempt failed with an I/O error that doesn't necessitate a recovery
-    attempt.
-  </int>
-  <int value="14" label="OpenAttemptPriorCorruption">
-    The corrupted open database was deleted.
-  </int>
-  <int value="15" label="OpenCleanupBlobJournalFailed">
-    Open failed because the blob journal could not be cleaned up.
-  </int>
-</enum>
-
-<enum name="IdleSocketFate" type="int">
-  <int value="0" label="Reuse: Reused">
-    Reusing an idle socket that is previously used.
-  </int>
-  <int value="1" label="Reuse: Unused">
-    Reusing an idle socket that is not previously used.
-  </int>
-  <int value="2" label="Reuse: Unusable">
-    Reusing an idle socket and found it unusable.
-  </int>
-  <int value="3" label="Release: Unusable">
-    When releasing the socket to the pool, found it unusable.
-  </int>
-  <int value="4" label="CleanUp: Forced">
-    Cleaning up the idle socket is forced.
-  </int>
-  <int value="5" label="CleanUp: TimedOutReused">
-    Cleaning up a timed-out, reused idle socket.
-  </int>
-  <int value="6" label="CleanUp: TimedOutUnused">
-    Cleaning up a timed-out, unused idle socket.
-  </int>
-  <int value="7" label="CleanUp: Unusable">
-    Cleaning up an unusable idle socket.
-  </int>
-  <int value="8" label="CloseOne">
-    Socket is closed usually when per-origin socket limit is reached.
-  </int>
-</enum>
-
-<enum name="IdleTaskStatus" type="int">
-  <int value="0" label="IdleTaskNotStarted"/>
-  <int value="1" label="IdleTaskStarted"/>
-  <int value="2" label="IdleTaskCompleted"/>
-  <int value="3" label="IdleTaskFailed"/>
-  <int value="4" label="IdleTaskSwitchedToMainThreadTask"/>
-  <int value="5" label="IdleTaskNotSupported"/>
-</enum>
-
-<enum name="IMECommitType" type="int">
-  <obsolete>
-    Deprecated 03/2015, and replaced by IMECommitType2.
-  </obsolete>
-  <int value="0" label="X -&gt; X(0)">
-    Types X, commits X as the top suggestion.
-  </int>
-  <int value="1" label="X -&gt; Y(0)">
-    Types X, commits Y as the top suggestion.
-  </int>
-  <int value="2" label="X -&gt; X(1)">
-    Types X, commits X as the non-top suggestion.
-  </int>
-  <int value="3" label="X -&gt; Y(1)">
-    Types X, commits Y as the non-top suggestion.
-  </int>
-  <int value="4" label="Prediction">Commits a prediction suggestion.</int>
-  <int value="5" label="Revert">
-    Reverts the previous auto-corrected and committed word.
-  </int>
-</enum>
-
-<enum name="IMECommitType2" type="int">
-  <int value="0" label="X -&gt; X(0)">
-    Types X, commits X as the top suggestion.
-  </int>
-  <int value="1" label="X -&gt; Y(0)">
-    Types X, commits Y as the top suggestion.
-  </int>
-  <int value="2" label="X -&gt; X(1)">
-    Types X, commits X as the 2nd suggestion.
-  </int>
-  <int value="3" label="X -&gt; Y(1)">
-    Types X, commits Y as the 2nd suggestion.
-  </int>
-  <int value="4" label="X -&gt; X(2)">
-    Types X, commits X as the 3rd/other suggestion.
-  </int>
-  <int value="5" label="X -&gt; Y(2)">
-    Types X, commits Y as the 3rd/other suggestion.
-  </int>
-  <int value="6" label="Prediction">Commits a prediction suggestion.</int>
-  <int value="7" label="Revert">
-    Reverts the previous auto-corrected and committed word.
-  </int>
-  <int value="8" label="Voice">The commit is triggered by voice input.</int>
-</enum>
-
-<enum name="IMECorrectionLevel" type="int">
-  <int value="0" label="Off"/>
-  <int value="1" label="Modest"/>
-  <int value="2" label="Aggressive"/>
-</enum>
-
-<enum name="IMEGestureTypingEvent" type="int">
-  <int value="0" label="Typed">A word was typed with a gesture.</int>
-  <int value="1" label="Deleted">
-    A gesture-typed word was deleted after being typed.
-  </int>
-  <int value="2" label="Replaced 0">
-    A gesture-typed word was replaced by the first suggestion.
-  </int>
-  <int value="3" label="Replaced 1">
-    A gesture-typed word was replaced by the second suggestion.
-  </int>
-  <int value="4" label="Replaced 2">
-    A gesture-typed word was replaced by the third suggestion.
-  </int>
-</enum>
-
-<enum name="ImeMenuButtonType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Emoji"/>
-  <int value="2" label="Handwriting"/>
-  <int value="3" label="Voice"/>
-  <int value="4" label="Settings"/>
-</enum>
-
-<enum name="IMERegisterProxyView" type="int">
-  <int value="0" label="Success">Success in registering ProxyView to IMM</int>
-  <int value="1" label="Failure">Failure in registering ProxyView to IMM</int>
-  <int value="2" label="DetectionFailure">Failure in detecting the result</int>
-  <int value="3" label="ReplicaInputConnection">
-    ReplicaInputConnection was used instead
-  </int>
-</enum>
-
-<enum name="IMESwitchType" type="int">
-  <int value="0" label="By tray menu">IME switches by tray menu</int>
-  <int value="1" label="By accelerator">IME switches by accelerator</int>
-</enum>
-
-<enum name="IMEVKLayout" type="int">
-  <int value="0" label="Compact"/>
-  <int value="1" label="CompactSymbol"/>
-  <int value="2" label="CompactMore"/>
-  <int value="3" label="Full"/>
-  <int value="4" label="A11y"/>
-  <int value="5" label="Handwriting"/>
-  <int value="6" label="Emoji"/>
-</enum>
-
-<enum name="ImportantSitesReason" type="int">
-  <int value="0" label="Engagement"/>
-  <int value="1" label="Durable"/>
-  <int value="2" label="Bookmarks"/>
-  <int value="3" label="Home Screen"/>
-  <int value="4" label="Notifications"/>
-</enum>
-
-<enum name="ImporterType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="IMPORTER_METRICS_IE">IE (Windows-only)</int>
-  <int value="2" label="IMPORTER_METRICS_FIREFOX2">Firefox 2</int>
-  <int value="3" label="IMPORTER_METRICS_FIREFOX3">Firefox 3 (and later)</int>
-  <int value="4" label="IMPORTER_METRICS_SAFARI">Safari (Mac-only)</int>
-  <int value="5" label="IMPORTER_METRICS_GOOGLE_TOOLBAR5">Google Toolbar</int>
-  <int value="6" label="IMPORTER_METRICS_BOOKMARKS_FILE">
-    A bookmarks.html file
-  </int>
-  <int value="7" label="IMPORTER_METRICS_EDGE">Edge (Windows-only)</int>
-</enum>
-
-<enum name="IncidentType" type="int">
-  <int value="1" label="TrackedPreference"/>
-  <int value="2" label="BinaryIntegrity"/>
-  <int value="3" label="BlacklistLoad"/>
-  <int value="4" label="OmniboxInteraction"/>
-  <int value="5" label="VariationsSeedSignature"/>
-  <int value="6" label="ResourceRequest"/>
-  <int value="7" label="SuspiciousModule"/>
-</enum>
-
-<enum name="Inconsistencies" type="int">
-  <int value="1" label="RangeChecksum"/>
-  <int value="2" label="BucketOrder"/>
-  <int value="3" label="RangeChecksum BucketOrder"/>
-  <int value="4" label="CountHigh"/>
-  <int value="5" label="CountHigh RangeChecksum"/>
-  <int value="6" label="CountHigh BucketOrder"/>
-  <int value="7" label="CountHigh RangeChecksum BucketOrder"/>
-  <int value="8" label="CountLow"/>
-  <int value="9" label="CountLow RangeChecksum"/>
-  <int value="10" label="CountLow BucketOrder"/>
-  <int value="11" label="CountLow RangeChecksum BucketOrder"/>
-</enum>
-
-<enum name="IndexedDatabaseMethods" type="int">
-  <int value="0" label="CreateObjectStore()"/>
-  <int value="1" label="DeleteObjectStore()"/>
-  <int value="2" label="Transaction()"/>
-  <int value="3" label="DeleteDatabase()"/>
-  <int value="4" label="Open()"/>
-</enum>
-
-<enum name="InfoBarIdentifier" type="int">
-  <int value="-1" label="INVALID"/>
-  <int value="0" label="TEST_INFOBAR"/>
-  <int value="1" label="APP_BANNER_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="2" label="APP_BANNER_INFOBAR_DELEGATE_DESKTOP"/>
-  <int value="3" label="ANDROID_DOWNLOAD_MANAGER_OVERWRITE_INFOBAR_DELEGATE"/>
-  <int value="4" label="CHROME_DOWNLOAD_MANAGER_OVERWRITE_INFOBAR_DELEGATE"/>
-  <int value="5" label="DOWNLOAD_REQUEST_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="6" label="FULLSCREEN_INFOBAR_DELEGATE"/>
-  <int value="7" label="HUNG_PLUGIN_INFOBAR_DELEGATE"/>
-  <int value="8" label="HUNG_RENDERER_INFOBAR_DELEGATE"/>
-  <int value="9" label="MEDIA_STREAM_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="10" label="MEDIA_THROTTLE_INFOBAR_DELEGATE"/>
-  <int value="11" label="REQUEST_QUOTA_INFOBAR_DELEGATE"/>
-  <int value="12" label="DEV_TOOLS_CONFIRM_INFOBAR_DELEGATE"/>
-  <int value="13" label="EXTENSION_DEV_TOOLS_INFOBAR_DELEGATE"/>
-  <int value="14" label="INCOGNITO_CONNECTABILITY_INFOBAR_DELEGATE"/>
-  <int value="15" label="THEME_INSTALLED_INFOBAR_DELEGATE"/>
-  <int value="16" label="GEOLOCATION_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="17" label="THREE_D_API_INFOBAR_DELEGATE"/>
-  <int value="18" label="INSECURE_CONTENT_INFOBAR_DELEGATE"/>
-  <int value="19" label="MIDI_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="20" label="PROTECTED_MEDIA_IDENTIFIER_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="21" label="NACL_INFOBAR_DELEGATE"/>
-  <int value="22"
-      label="OBSOLETE_DATA_REDUCTION_PROXY_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="23" label="NOTIFICATION_PERMISSION_INFOBAR_DELEGATE"/>
-  <int value="24" label="AUTO_SIGNIN_FIRST_RUN_INFOBAR_DELEGATE"/>
-  <int value="25" label="GENERATED_PASSWORD_SAVED_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="26" label="SAVE_PASSWORD_INFOBAR_DELEGATE"/>
-  <int value="27" label="PEPPER_BROKER_INFOBAR_DELEGATE"/>
-  <int value="28" label="PERMISSION_UPDATE_INFOBAR_DELEGATE"/>
-  <int value="29" label="DURABLE_STORAGE_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="30" label="NPAPI_REMOVAL_INFOBAR_DELEGATE"/>
-  <int value="31" label="OUTDATED_PLUGIN_INFOBAR_DELEGATE"/>
-  <int value="32" label="PLUGIN_METRO_MODE_INFOBAR_DELEGATE"/>
-  <int value="33" label="RELOAD_PLUGIN_INFOBAR_DELEGATE"/>
-  <int value="34" label="PLUGIN_OBSERVER"/>
-  <int value="35" label="SSL_ADD_CERTIFICATE"/>
-  <int value="36" label="SSL_ADD_CERTIFICATE_INFOBAR_DELEGATE"/>
-  <int value="37" label="POPUP_BLOCKED_INFOBAR_DELEGATE"/>
-  <int value="38" label="CHROME_SELECT_FILE_POLICY"/>
-  <int value="39" label="KEYSTONE_PROMOTION_INFOBAR_DELEGATE"/>
-  <int value="40" label="COLLECTED_COOKIES_INFOBAR_DELEGATE"/>
-  <int value="41" label="INSTALLATION_ERROR_INFOBAR_DELEGATE"/>
-  <int value="42" label="ALTERNATE_NAV_INFOBAR_DELEGATE"/>
-  <int value="43" label="BAD_FLAGS_PROMPT"/>
-  <int value="44" label="DEFAULT_BROWSER_INFOBAR_DELEGATE"/>
-  <int value="45" label="GOOGLE_API_KEYS_INFOBAR_DELEGATE"/>
-  <int value="46" label="OBSOLETE_SYSTEM_INFOBAR_DELEGATE"/>
-  <int value="47" label="SESSION_CRASHED_INFOBAR_DELEGATE"/>
-  <int value="48" label="WEBSITE_SETTINGS_INFOBAR_DELEGATE"/>
-  <int value="49" label="AUTOFILL_CC_INFOBAR_DELEGATE"/>
-  <int value="50" label="TRANSLATE_INFOBAR_DELEGATE"/>
-  <int value="51" label="IOS_CHROME_SAVE_PASSWORD_INFOBAR_DELEGATE"/>
-  <int value="52" label="NATIVE_APP_INSTALLER_INFOBAR_DELEGATE"/>
-  <int value="53" label="NATIVE_APP_LAUNCHER_INFOBAR_DELEGATE"/>
-  <int value="54" label="NATIVE_APP_OPEN_POLICY_INFOBAR_DELEGATE"/>
-  <int value="55" label="RE_SIGN_IN_INFOBAR_DELEGATE"/>
-  <int value="56" label="SHOW_PASSKIT_ERROR_INFOBAR_DELEGATE"/>
-  <int value="57" label="READER_MODE_INFOBAR_DELEGATE"/>
-  <int value="58" label="SYNC_ERROR_INFOBAR_DELEGATE"/>
-  <int value="59" label="UPGRADE_INFOBAR_DELEGATE"/>
-  <int value="60" label="CHROME_WINDOW_ERROR"/>
-  <int value="61" label="CONFIRM_DANGEROUS_DOWNLOAD"/>
-  <int value="62" label="WINDOWS_DESKTOP_SEARCH_INFOBAR_DELEGATE"/>
-  <int value="63" label="UPDATE_PASSWORD_INFOBAR_DELEGATE"/>
-  <int value="64" label="DATA_REDUCTION_PROMO_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="65" label="AUTOFILL_CC_ASSIST_INFOBAR_DELEGATE"/>
-  <int value="66" label="SUBRESOURCE_FILTER_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="67" label="INSTANT_APPS_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="68" label="DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE"/>
-  <int value="69" label="SCREEN_CAPTURE_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="70" label="GROUPED_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
-  <int value="71" label="OFFLINE_PAGE_INFOBAR_DELEGATE"/>
-  <int value="72" label="SEARCH_GEOLOCATION_DISCLOSURE_INFOBAR_DELEGATE"/>
-  <int value="73" label="AUTOMATION_INFOBAR_DELEGATE"/>
-  <int value="74" label="VR_SERVICES_UPGRADE_ANDROID"/>
-</enum>
-
-<enum name="InfoBarResponse" type="int">
-  <int value="0" label="No Response selected"/>
-  <int value="1" label="Save Password"/>
-  <int value="2" label="Never for this site (blacklist / exception)"/>
-  <int value="3" label="InfoBar dismissed by clicking the 'X'"/>
-</enum>
-
-<enum name="InitialRttEstimateSource" type="int">
-  <int value="0" label="Default"/>
-  <int value="1" label="Cached"/>
-  <int value="2" label="2G"/>
-  <int value="3" label="3G"/>
-</enum>
-
-<enum name="InjectedAdType" type="int">
-  <int value="0" label="Invalid"/>
-  <int value="1" label="IFrame"/>
-  <int value="2" label="Embed"/>
-  <int value="3" label="Anchor"/>
-  <int value="4" label="Script"/>
-</enum>
-
-<enum name="InputMethodCategory" type="int">
-  <int value="0" label="Unkown"/>
-  <int value="1" label="XKB">XKeyboard</int>
-  <int value="2" label="Chinese"/>
-  <int value="3" label="Japanese"/>
-  <int value="4" label="Korean"/>
-  <int value="5" label="M17n">Multilingualization</int>
-  <int value="6" label="T13n">Transliteration</int>
-</enum>
-
-<enum name="InputMethodID" type="int">
-  <int value="109700" label="xkb:am:phonetic:arm">
-    Armenian Phonetic keyboard
-  </int>
-  <int value="109800" label="xkb:be::fra">Belgian keyboard</int>
-  <int value="109801" label="xkb:be::ger">Belgian keyboard</int>
-  <int value="109802" label="xkb:be::nld">Belgian keyboard</int>
-  <int value="109803" label="xkb:bg::bul">Bulgarian keyboard</int>
-  <int value="109804" label="xkb:bg:phonetic:bul">
-    Bulgarian Phonetic keyboard
-  </int>
-  <int value="109805" label="xkb:br::por">Brazilian keyboard</int>
-  <int value="109806" label="xkb:by::bel">Belarusian keyboard</int>
-  <int value="109900" label="xkb:ca::fra">Canadian French keyboard</int>
-  <int value="109901" label="xkb:ca:eng:eng">Canadian English keyboard</int>
-  <int value="109902" label="xkb:ca:multix:fra">
-    Canadian Multilingual keyboard
-  </int>
-  <int value="109903" label="xkb:ch::ger">Swiss keyboard</int>
-  <int value="109904" label="xkb:ch:fr:fra">Swiss French keyboard</int>
-  <int value="109905" label="xkb:cz::cze">Czech keyboard</int>
-  <int value="109906" label="xkb:cz:qwerty:cze">Czech QWERTY keyboard</int>
-  <int value="110000" label="xkb:de::ger">German keyboard</int>
-  <int value="110001" label="xkb:de:neo:ger">German NEO 2 keyboard</int>
-  <int value="110002" label="xkb:dk::dan">Danish keyboard</int>
-  <int value="110100" label="xkb:ee::est">Estonian keyboard</int>
-  <int value="110101" label="xkb:es::spa">Spanish keyboard</int>
-  <int value="110102" label="xkb:es:cat:cat">Catalan keyboard</int>
-  <int value="110200" label="xkb:fi::fin">Finnish keyboard</int>
-  <int value="110201" label="xkb:fr::fra">French keyboard</int>
-  <int value="110300" label="xkb:gb:dvorak:eng">UK Dvorak keyboard</int>
-  <int value="110301" label="xkb:gb:extd:eng">UK keyboard</int>
-  <int value="110302" label="xkb:ge::geo">Georgian keyboard</int>
-  <int value="110303" label="xkb:gr::gre">Greek keyboard</int>
-  <int value="110400" label="xkb:hr::scr">Croatian keyboard</int>
-  <int value="110401" label="xkb:hu::hun">Hungarian keyboard</int>
-  <int value="110500" label="xkb:ie::ga">Irish keyboard</int>
-  <int value="110501" label="xkb:il::heb">Hebrew keyboard</int>
-  <int value="110502" label="xkb:is::ice">Icelandic keyboard</int>
-  <int value="110503" label="xkb:it::ita">Italian keyboard</int>
-  <int value="110600" label="xkb:jp::jpn">Japanese keyboard</int>
-  <int value="110800" label="xkb:latam::spa">Latin American keyboard</int>
-  <int value="110801" label="xkb:lt::lit">Lithuanian keyboard</int>
-  <int value="110802" label="xkb:lv:apostrophe:lav">Latvian keyboard</int>
-  <int value="110900" label="xkb:mn::mon">Mongolian keyboard</int>
-  <int value="111000" label="xkb:no::nob">Norwegian keyboard</int>
-  <int value="111200" label="xkb:pl::pol">Polish keyboard</int>
-  <int value="111201" label="xkb:pt::por">Portuguese keyboard</int>
-  <int value="111400" label="xkb:ro::rum">Romanian keyboard</int>
-  <int value="111401" label="xkb:ro:std:rum">Romanian Standard keyboard</int>
-  <int value="111402" label="xkb:rs::srp">Serbian keyboard</int>
-  <int value="111403" label="xkb:ru::rus">Russian keyboard</int>
-  <int value="111404" label="xkb:ru:phonetic:rus">
-    Russian Phonetic keyboard
-  </int>
-  <int value="111500" label="xkb:se::swe">Swedish keyboard</int>
-  <int value="111501" label="xkb:si::slv">Slovenian keyboard</int>
-  <int value="111502" label="xkb:sk::slo">Slovakian keyboard</int>
-  <int value="111600" label="xkb:tr::tur">Turkish keyboard</int>
-  <int value="111700" label="xkb:ua::ukr">Ukrainian keyboard</int>
-  <int value="111701" label="xkb:us::eng">US keyboard</int>
-  <int value="111702" label="xkb:us::fil">US keyboard</int>
-  <int value="111703" label="xkb:us::ind">US keyboard</int>
-  <int value="111704" label="xkb:us::msa">US keyboard</int>
-  <int value="111705" label="xkb:us:altgr-intl:eng">US Extended keyboard</int>
-  <int value="111706" label="xkb:us:colemak:eng">US Colemak keyboard</int>
-  <int value="111707" label="xkb:us:dvorak:eng">US Dvorak keyboard</int>
-  <int value="111708" label="xkb:us:intl:eng">US International keyboard</int>
-  <int value="111709" label="xkb:us:intl:nld">US International keyboard</int>
-  <int value="111710" label="xkb:us:intl:por">US International keyboard</int>
-  <int value="209700" label="zh-hant-t-i0-array-1992">Array input method</int>
-  <int value="209900" label="zh-hant-t-i0-cangjie-1987">
-    Cangjie input method
-  </int>
-  <int value="209901" label="zh-hant-t-i0-cangjie-1987-x-m0-simplified">
-    Quick input method
-  </int>
-  <int value="210000" label="zh-hant-t-i0-dayi-1988">Dayi input method</int>
-  <int value="211200" label="zh-hant-t-i0-pinyin">
-    Traditional Pinyin input method
-  </int>
-  <int value="211201" label="zh-t-i0-pinyin">Pinyin input method</int>
-  <int value="211700" label="zh-hant-t-i0-und">Zhuyin input method</int>
-  <int value="211900" label="zh-t-i0-wubi-1986">Wubi input method</int>
-  <int value="310600" label="nacl_mozc_jp">
-    Google Japanese Input (for Japanese keyboard)
-  </int>
-  <int value="311700" label="nacl_mozc_us">
-    Google Japanese Input (for US keyboard)
-  </int>
-  <int value="405000" label="hangul_2set">Hangul 2 Set</int>
-  <int value="405100" label="hangul_3set390">Hangul 3 Set (390)</int>
-  <int value="405101" label="hangul_3setfinal">Hangul 3 Set (Final)</int>
-  <int value="405102" label="hangul_3setnoshift">Hangul 3 Set (No Shift)</int>
-  <int value="409700" label="hangul_ahnmatae">Hangul Ahnmatae</int>
-  <int value="411400" label="hangul_romaja">Hangul Romaja</int>
-  <int value="509700" label="vkd_ar">Arabic keyboard</int>
-  <int value="509800" label="vkd_bn_phone">Bengali keyboard (Phonetic)</int>
-  <int value="509900" label="vkd_ckb_ar">
-    Sorani Kurdish Arabic-based keyboard
-  </int>
-  <int value="509901" label="vkd_ckb_en">
-    Sorani Kurdish English-based keyboard
-  </int>
-  <int value="510000" label="vkd_deva_phone">
-    Devanagari keyboard (Phonetic)
-  </int>
-  <int value="510100" label="vkd_ethi">Ethiopic keyboard</int>
-  <int value="510200" label="vkd_fa">Persian keyboard</int>
-  <int value="510300" label="vkd_gu_phone">Gujarati keyboard (Phonetic)</int>
-  <int value="510700" label="vkd_km">Khmer keyboard</int>
-  <int value="510701" label="vkd_kn_phone">Kannada keyboard (Phonetic)</int>
-  <int value="510800" label="vkd_lo">Lao keyboard</int>
-  <int value="510900" label="vkd_ml_phone">Malayalam keyboard (Phonetic)</int>
-  <int value="510901" label="vkd_my">Myanmar keyboard</int>
-  <int value="510902" label="vkd_my_myansan">Myanmar Myansan keyboard</int>
-  <int value="511000" label="vkd_ne_inscript">Nepali keyboard (InScript)</int>
-  <int value="511001" label="vkd_ne_phone">Nepali keyboard (Phonetic)</int>
-  <int value="511500" label="vkd_si">Sinhala keyboard</int>
-  <int value="511600" label="vkd_ta_inscript">Tamil keyboard (InScript)</int>
-  <int value="511601" label="vkd_ta_itrans">Tamil keyboard (itrans)</int>
-  <int value="511602" label="vkd_ta_phone">Tamil keyboard (Phonetic)</int>
-  <int value="511603" label="vkd_ta_tamil99">Tamil keyboard (Tamil99)</int>
-  <int value="511604" label="vkd_ta_typewriter">
-    Tamil keyboard (Typewriter)
-  </int>
-  <int value="511605" label="vkd_te_phone">Telugu keyboard (Phonetic)</int>
-  <int value="511606" label="vkd_th">Thai keyboard (Kedmanee)</int>
-  <int value="511607" label="vkd_th_pattajoti">Thai keyboard (Pattachote)</int>
-  <int value="511608" label="vkd_th_tis">Thai keyboard (TIS 820-2531)</int>
-  <int value="511800" label="vkd_vi_tcvn">Vietnamese keyboard (TCVN)</int>
-  <int value="511801" label="vkd_vi_telex">Vietnamese keyboard (Telex)</int>
-  <int value="511802" label="vkd_vi_viqr">Vietnamese keyboard (VIQR)</int>
-  <int value="511803" label="vkd_vi_vni">Vietnamese keyboard (VNI)</int>
-  <int value="609700" label="am-t-i0-und">Transliteration Amharic</int>
-  <int value="609701" label="ar-t-i0-und">Transliteration Arabic</int>
-  <int value="609800" label="bn-t-i0-und">Transliteration Bengali</int>
-  <int value="609801" label="braille">Braille Keyboard</int>
-  <int value="610100" label="el-t-i0-und">Transliteration Greek</int>
-  <int value="610200" label="fa-t-i0-und">Transliteration Persian</int>
-  <int value="610300" label="gu-t-i0-und">Transliteration Gujarati</int>
-  <int value="610400" label="he-t-i0-und">Transliteration Hebrew</int>
-  <int value="610401" label="hi-t-i0-und">Transliteration Hindi</int>
-  <int value="610700" label="kn-t-i0-und">Transliteration Kannada</int>
-  <int value="610900" label="ml-t-i0-und">Transliteration Malayalam</int>
-  <int value="610901" label="mr-t-i0-und">Transliteration Marathi</int>
-  <int value="611000" label="ne-t-i0-und">Transliteration Nepali</int>
-  <int value="611100" label="or-t-i0-und">Transliteration Oriya</int>
-  <int value="611200" label="pa-t-i0-und">Transliteration Punjabi</int>
-  <int value="611500" label="sa-t-i0-und">Transliteration Sanskrit</int>
-  <int value="611501" label="sr-t-i0-und">Transliteration Serbian</int>
-  <int value="611600" label="ta-t-i0-und">Transliteration Tamil</int>
-  <int value="611601" label="te-t-i0-und">Transliteration Telugu</int>
-  <int value="611602" label="ti-t-i0-und">Transliteration Tigrinya</int>
-  <int value="611700" label="ur-t-i0-und">Transliteration Urdu</int>
-</enum>
-
-<enum name="InputMethodID2" type="int">
-  <int value="-2082426075" label="xkb:cz:qwerty:cze">Czech QWERTY keyboard</int>
-  <int value="-2039513744" label="xkb:ru::rus">Russian keyboard</int>
-  <int value="-2004968165" label="xkb:gb:dvorak:eng">UK Dvorak keyboard</int>
-  <int value="-2004834194" label="xkb:ca:multix:fra">
-    Canadian Multilingual keyboard
-  </int>
-  <int value="-1992142310" label="xkb:dk::dan">Danish keyboard</int>
-  <int value="-1972379678" label="vkd_deva_phone">
-    Devanagari keyboard (Phonetic)
-  </int>
-  <int value="-1957398030" label="ta-t-i0-und">Tamil transliteration</int>
-  <int value="-1955862460" label="xkb:ro::rum">Romanian keyboard</int>
-  <int value="-1951732875" label="xkb:be::nld">Belgian keyboard</int>
-  <int value="-1931838225" label="zh-hant-t-i0-cangjie-1987-x-m0-simplified">
-    Quick input method
-  </int>
-  <int value="-1899483055" label="vkd_my">Myanmar keyboard</int>
-  <int value="-1856842164" label="xkb:ge::geo">Georgian keyboard</int>
-  <int value="-1856063724" label="vkd_km">Khmer keyboard</int>
-  <int value="-1749961581" label="vkd_ta_inscript">
-    Tamil keyboard (InScript)
-  </int>
-  <int value="-1710145174" label="xkb:am:phonetic:arm">
-    Armenian Phonetic keyboard
-  </int>
-  <int value="-1709647399" label="xkb:mn::mon">Mongolian keyboard</int>
-  <int value="-1668610460" label="xkb:us:dvp:eng">
-    US Programmer Dvorak keyboard
-  </int>
-  <int value="-1667829653" label="zh-hant-t-i0-cangjie-1987">
-    Cangjie input method
-  </int>
-  <int value="-1591721678" label="vkd_ne_inscript">
-    Nepali keyboard (InScript)
-  </int>
-  <int value="-1474243589" label="xkb:it::ita">Italian keyboard</int>
-  <int value="-1408581676" label="xkb:gb:extd:eng">UK keyboard</int>
-  <int value="-1402880636" label="xkb:se::swe">Swedish keyboard</int>
-  <int value="-1396156987" label="vkd_ru_phone_aatseel">
-    Russian Phonetic (AATSEEL) keyboard
-  </int>
-  <int value="-1338032348" label="xkb:de:neo:ger">German NEO 2 keyboard</int>
-  <int value="-1288127107" label="vkd_vi_telex">
-    Vietnamese keyboard (Telex)
-  </int>
-  <int value="-1263201701" label="hi-t-i0-und">Hindi transliteration</int>
-  <int value="-1242404917" label="sr-t-i0-und">Serbian transliteration</int>
-  <int value="-1148371254" label="xkb:us:intl:por">
-    US International keyboard
-  </int>
-  <int value="-1105197074" label="vkd_ar">Arabic keyboard</int>
-  <int value="-1096071752" label="vkd_fa">Persian keyboard</int>
-  <int value="-1065120196" label="vkd_th">Thai keyboard (Kedmanee)</int>
-  <int value="-1053378431" label="xkb:tr::tur">Turkish keyboard</int>
-  <int value="-1032532014" label="xkb:bg:phonetic:bul">
-    Bulgarian Phonetic keyboard
-  </int>
-  <int value="-1024152574" label="xkb:ca:eng:eng">
-    Canadian English keyboard
-  </int>
-  <int value="-1021036210" label="xkb:us::ind">US keyboard</int>
-  <int value="-1018545698" label="vkd_ckb_en">
-    Sorani Kurdish English-based keyboard
-  </int>
-  <int value="-994915284" label="xkb:ch:fr:fra">Swiss French keyboard</int>
-  <int value="-955047705" label="xkb:sk::slo">Slovakian keyboard</int>
-  <int value="-942739805" label="xkb:tr:f:tur">Turkish-F keyboard</int>
-  <int value="-923332388" label="xkb:ua::ukr">Ukrainian keyboard</int>
-  <int value="-917118451" label="vkd_vi_tcvn">Vietnamese keyboard (TCVN)</int>
-  <int value="-848378885" label="vkd_ethi">Ethiopic keyboard</int>
-  <int value="-827208209" label="xkb:hu::hun">Hungarian keyboard</int>
-  <int value="-797137387" label="ml-t-i0-und">Malayalam transliteration</int>
-  <int value="-676861102" label="vkd_vi_viqr">Vietnamese keyboard (VIQR)</int>
-  <int value="-666585286" label="xkb:bg::bul">Bulgarian keyboard</int>
-  <int value="-650362029" label="xkb:ie::ga">Irish keyboard</int>
-  <int value="-639620912" label="te-t-i0-und">Telugu transliteration</int>
-  <int value="-622670909" label="zh-hant-t-i0-dayi-1988">Dayi input method</int>
-  <int value="-547772150" label="xkb:ro:std:rum">
-    Romanian standard keyboard
-  </int>
-  <int value="-535089160" label="xkb:us::msa">US keyboard</int>
-  <int value="-519506383" label="he-t-i0-und">Hebrew transliteration</int>
-  <int value="-512360986" label="xkb:us:altgr-intl:eng">
-    US Extended keyboard
-  </int>
-  <int value="-498028381" label="sa-t-i0-und">Sanskrit transliteration</int>
-  <int value="-496003957" label="xkb:de::ger">German keyboard</int>
-  <int value="-439432295" label="vkd_ru_phone_yazhert">
-    Russian Phonetic (YaZHert) keyboard
-  </int>
-  <int value="-378677550" label="vkd_bn_phone">Bengali keyboard (Phonetic)</int>
-  <int value="-352571373" label="xkb:rs::srp">Serbian keyboard</int>
-  <int value="-299716106" label="xkb:si::slv">Slovenian keyboard</int>
-  <int value="-292687390" label="xkb:fi::fin">Finnish keyboard</int>
-  <int value="-280690349" label="vkd_vi_vni">Vietnamese keyboard (VNI)</int>
-  <int value="-263932473" label="xkb:ch::ger">Swiss keyboard</int>
-  <int value="-231610124" label="ne-t-i0-und">Nepali transliteration</int>
-  <int value="-225482038" label="vkd_si">Sinhala keyboard</int>
-  <int value="-219542410" label="ko-t-i0-und">Korean input method</int>
-  <int value="-202781885" label="xkb:us:intl:eng">
-    US International keyboard
-  </int>
-  <int value="-193738949" label="gu-t-i0-und">Gujarati transliteration</int>
-  <int value="-147742988" label="mr-t-i0-und">Marathi transliteration</int>
-  <int value="-83634292" label="vkd_my_myansan">Myanmar Myansan keyboard</int>
-  <int value="-70827301" label="xkb:be::fra">Belgian keyboard</int>
-  <int value="-69316526" label="fa-t-i0-und">Persian transliteration</int>
-  <int value="2215666" label="xkb:jp::jpn">Japanese keyboard</int>
-  <int value="28549849" label="xkb:pt::por">Portuguese keyboard</int>
-  <int value="60054916" label="xkb:fo::fao">Faroese keyboard</int>
-  <int value="87135772" label="xkb:fr::fra">French keyboard</int>
-  <int value="150803493" label="vkd_ta_phone">Tamil keyboard (Phonetic)</int>
-  <int value="193122406" label="xkb:gr::gre">Greek keyboard</int>
-  <int value="197116831" label="xkb:es::spa">Spanish keyboard</int>
-  <int value="214846098" label="zh-t-i0-wubi-1986">Wubi input method</int>
-  <int value="319509360" label="xkb:be::ger">Belgian keyboard</int>
-  <int value="382485416" label="xkb:lv:apostrophe:lav">Latvian keyboard</int>
-  <int value="398887705" label="ti-t-i0-und">Tigrinya transliteration</int>
-  <int value="400837283" label="yue-hant-t-i0-und">Cantonese input method</int>
-  <int value="414827905" label="vkd_ta_typewriter">
-    Tamil keyboard (Typewriter)
-  </int>
-  <int value="428624332" label="zh-t-i0-pinyin">Pinyin input method</int>
-  <int value="452111434" label="kn-t-i0-und">Kannada transliteration</int>
-  <int value="467269371" label="el-t-i0-und">Greek transliteration</int>
-  <int value="469000663" label="xkb:es:cat:cat">Catalan keyboard</int>
-  <int value="520692028" label="vkd_ta_itrans">Tamil keyboard (itrans)</int>
-  <int value="601883646" label="vkd_th_tis">Thai keyboard (TIS 820-2531)</int>
-  <int value="602570138" label="xkb:mk::mkd">Macedonian keyboard</int>
-  <int value="629336408" label="vkd_ckb_ar">
-    Sorani Kurdish Arabic-based keyboard
-  </int>
-  <int value="629711326" label="xkb:il::heb">Hebrew keyboard</int>
-  <int value="683071754" label="xkb:hr::scr">Croatian keyboard</int>
-  <int value="789603234" label="xkb:by::bel">Belarusian keyboard</int>
-  <int value="822222165" label="xkb:ru:phonetic:rus">
-    Russian Phonetic keyboard
-  </int>
-  <int value="825747412" label="xkb:latam::spa">Latin American keyboard</int>
-  <int value="871656925" label="xkb:us::fil">US keyboard</int>
-  <int value="1024422775" label="vkd_ml_phone">
-    Malayalam keyboard (Phonetic)
-  </int>
-  <int value="1127372618" label="vkd_ta_tamil99">Tamil keyboard (Tamil99)</int>
-  <int value="1194237527" label="bn-t-i0-und">Bengali transliteration</int>
-  <int value="1196273343" label="vkd_te_phone">Telugu keyboard (Phonetic)</int>
-  <int value="1201986464" label="pa-t-i0-und">Punjabi transliteration</int>
-  <int value="1241606786" label="vkd_gu_phone">
-    Gujarati keyboard (Phonetic)
-  </int>
-  <int value="1275989482" label="xkb:ee::est">Estonian keyboard</int>
-  <int value="1342665179" label="or-t-i0-und">Oriya transliteration</int>
-  <int value="1355267172" label="nacl_mozc_jp">
-    Google Japanese Input (for Japanese keyboard)
-  </int>
-  <int value="1376109158" label="zh-hant-t-i0-pinyin">
-    Traditional Pinyin input method
-  </int>
-  <int value="1391164751" label="vkd_ne_phone">Nepali keyboard (Phonetic)</int>
-  <int value="1409029247" label="xkb:ca::fra">Canadian French keyboard</int>
-  <int value="1486336701" label="zh-hant-t-i0-und">Zhuyin input method</int>
-  <int value="1643737979" label="xkb:fr:bepo:fra">French Bepo keyboard</int>
-  <int value="1683010298" label="xkb:is::ice">Icelandic keyboard</int>
-  <int value="1698488657" label="ar-t-i0-und">Arabic transliteration</int>
-  <int value="1718072990" label="xkb:us::eng">US keyboard</int>
-  <int value="1756602568" label="zh-hant-t-i0-array-1992">
-    Array input method
-  </int>
-  <int value="1763643144" label="xkb:lt::lit">Lithuanian keyboard</int>
-  <int value="1772226972" label="ur-t-i0-und">Urdu transliteration</int>
-  <int value="1847701260" label="xkb:pl::pol">Polish keyboard</int>
-  <int value="1851658441" label="xkb:hu:qwerty:hun">
-    Hungarian QWERTY keyboard
-  </int>
-  <int value="1882667893" label="xkb:us:colemak:eng">US Colemak keyboard</int>
-  <int value="1925299009" label="xkb:br::por">Brazilian keyboard</int>
-  <int value="1934249765" label="vkd_th_pattajoti">
-    Thai keyboard (Pattachote)
-  </int>
-  <int value="1957701631" label="am-t-i0-und">Amharic transliteration</int>
-  <int value="1970923579" label="xkb:us:intl:nld">Netherlands keyboard</int>
-  <int value="1983264676" label="xkb:no::nob">Norwegian keyboard</int>
-  <int value="2007323478" label="xkb:cz::cze">Czech keyboard</int>
-  <int value="2014669693" label="xkb:kz::kaz">Kazakh keyboard</int>
-  <int value="2024146574" label="vkd_lo">Lao keyboard</int>
-  <int value="2029882285" label="vkd_kn_phone">Kannada keyboard (Phonetic)</int>
-  <int value="2031967946" label="xkb:mt::mlt">Maltese keyboard</int>
-  <int value="2051698871" label="nacl_mozc_us">
-    Google Japanese Input (for US keyboard)
-  </int>
-  <int value="2060414855" label="braille">Braille Keyboard</int>
-  <int value="2121258069" label="xkb:us:dvorak:eng">US Dvorak keyboard</int>
-</enum>
-
-<enum name="InsecureContentType" type="int">
-  <int value="0" label="Displayed"/>
-  <int value="1" label="Displayed by *.google.com (deprecated)"/>
-  <int value="2" label="Displayed by www.google.com (deprecated)"/>
-  <int value="3" label="Displayed due to an iframe"/>
-  <int value="4" label="Ran"/>
-  <int value="5" label="Ran by *.google.com (deprecated)"/>
-  <int value="6" label="Ran by www.google.com (deprecated)"/>
-  <int value="7" label="Ran from www.youtube.com (deprecated)"/>
-  <int value="8" label="Ran due to script"/>
-  <int value="9" label="Ran due to CSS"/>
-  <int value="10" label="Ran due to a plug-in"/>
-  <int value="11" label="Displayed by www.youtube.com (deprecated)"/>
-  <int value="12" label="Ran by www.youtube.com (deprecated)"/>
-  <int value="13" label="Ran by *.googleusercontent.com (deprecated)"/>
-  <int value="14" label="Displayed by mail.google.com (deprecated)"/>
-  <int value="15" label="Ran by mail.google.com (deprecated)"/>
-  <int value="16" label="Displayed by plus.google.com (deprecated)"/>
-  <int value="17" label="Ran by plus.google.com (deprecated)"/>
-  <int value="18" label="Displayed by docs.google.com (deprecated)"/>
-  <int value="19" label="Ran by docs.google.com (deprecated)"/>
-  <int value="20" label="Displayed by sites.google.com (deprecated)"/>
-  <int value="21" label="Ran by sites.google.com (deprecated)"/>
-  <int value="22" label="Displayed by picasaweb.google.com (deprecated)"/>
-  <int value="23" label="Ran by picasaweb.google.com (deprecated)"/>
-  <int value="24" label="Displayed by google.com/reader/ (deprecated)"/>
-  <int value="25" label="Ran by google.com/reader/ (deprecated)"/>
-  <int value="26" label="Displayed by code.google.com (deprecated)"/>
-  <int value="27" label="Ran by code.google.com (deprecated)"/>
-  <int value="28" label="Displayed by groups.google.com (deprecated)"/>
-  <int value="29" label="Ran by groups.google.com (deprecated)"/>
-  <int value="30" label="Displayed by maps.google.com (deprecated)"/>
-  <int value="31" label="Ran by maps.google.com (deprecated)"/>
-  <int value="32" label="Displayed by google.com/support/ (deprecated)"/>
-  <int value="33" label="Ran by google.com/support/ (deprecated)"/>
-  <int value="34" label="Displayed by google.com/intl/ (deprecated)"/>
-  <int value="35" label="Ran by google.com/intl/ (deprecated)"/>
-</enum>
-
-<enum name="InstallStatus" type="int">
-  <int value="0" label="FIRST_INSTALL_SUCCESS"/>
-  <int value="1" label="INSTALL_REPAIRED"/>
-  <int value="2" label="NEW_VERSION_UPDATED"/>
-  <int value="3" label="EXISTING_VERSION_LAUNCHED"/>
-  <int value="4" label="HIGHER_VERSION_EXISTS"/>
-  <int value="5" label="USER_LEVEL_INSTALL_EXISTS"/>
-  <int value="6" label="SYSTEM_LEVEL_INSTALL_EXISTS"/>
-  <int value="7" label="INSTALL_FAILED"/>
-  <int value="8" label="SETUP_PATCH_FAILED"/>
-  <int value="9" label="OS_NOT_SUPPORTED"/>
-  <int value="10" label="OS_ERROR"/>
-  <int value="11" label="TEMP_DIR_FAILED"/>
-  <int value="12" label="UNCOMPRESSION_FAILED"/>
-  <int value="13" label="INVALID_ARCHIVE"/>
-  <int value="14" label="INSUFFICIENT_RIGHTS"/>
-  <int value="15" label="CHROME_NOT_INSTALLED"/>
-  <int value="16" label="CHROME_RUNNING"/>
-  <int value="17" label="UNINSTALL_CONFIRMED"/>
-  <int value="18" label="UNINSTALL_DELETE_PROFILE"/>
-  <int value="19" label="UNINSTALL_SUCCESSFUL"/>
-  <int value="20" label="UNINSTALL_FAILED"/>
-  <int value="21" label="UNINSTALL_CANCELLED"/>
-  <int value="22" label="UNKNOWN_STATUS"/>
-  <int value="23" label="RENAME_SUCCESSFUL"/>
-  <int value="24" label="RENAME_FAILED"/>
-  <int value="25" label="EULA_REJECTED"/>
-  <int value="26" label="EULA_ACCEPTED"/>
-  <int value="27" label="EULA_ACCEPTED_OPT_IN"/>
-  <int value="28" label="INSTALL_DIR_IN_USE"/>
-  <int value="29" label="UNINSTALL_REQUIRES_REBOOT"/>
-  <int value="30" label="IN_USE_UPDATED"/>
-  <int value="31" label="SAME_VERSION_REPAIR_FAILED"/>
-  <int value="32" label="REENTRY_SYS_UPDATE"/>
-  <int value="33" label="SXS_OPTION_NOT_SUPPORTED"/>
-  <int value="42" label="APPLY_DIFF_PATCH_FAILED"/>
-  <int value="47" label="INVALID_STATE_FOR_OPTION"/>
-  <int value="49" label="PATCH_INVALID_ARGUMENTS"/>
-  <int value="50" label="DIFF_PATCH_SOURCE_MISSING"/>
-  <int value="51" label="UNUSED_BINARIES"/>
-  <int value="52" label="UNUSED_BINARIES_UNINSTALLED"/>
-  <int value="53" label="UNSUPPORTED_OPTION"/>
-  <int value="54" label="CPU_NOT_SUPPORTED"/>
-  <int value="55" label="REENABLE_UPDATES_SUCCEEDED"/>
-  <int value="56" label="REENABLE_UPDATES_FAILED"/>
-  <int value="57" label="UNPACKING_FAILED"/>
-  <int value="58" label="IN_USE_DOWNGRADE"/>
-  <int value="59" label="OLD_VERSION_DOWNGRADE"/>
-  <int value="60" label="SETUP_SINGLETON_ACQUISITION_FAILED"/>
-  <int value="61" label="SETUP_SINGLETON_RELEASED"/>
-  <int value="62" label="DELETE_OLD_VERSIONS_SUCCESS"/>
-  <int value="63" label="DELETE_OLD_VERSIONS_TOO_MANY_ATTEMPTS"/>
-</enum>
-
-<enum name="InstanceIDResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Invalid parameter"/>
-  <int value="2" label="GCM disabled"/>
-  <int value="3" label="Async operation pending"/>
-  <int value="4" label="Network error"/>
-  <int value="5" label="Server error"/>
-<!-- 6 is omitted, in case we ever merge this enum with GCMClientResult. -->
-
-  <int value="7" label="Unknown error"/>
-</enum>
-
-<enum name="InstantAppsCallSource" type="int">
-  <int value="1" label="Loading screen"/>
-  <int value="2" label="Notification"/>
-</enum>
-
-<enum name="InstantControllerEvent" type="int">
-  <int value="0" label="URL_ADDED_TO_BLACKLIST"/>
-  <int value="1" label="URL_REMOVED_FROM_BLACKLIST"/>
-  <int value="2" label="URL_BLOCKED_BY_BLACKLIST"/>
-</enum>
-
-<enum name="InstantExtended_CacheableNTPLoad" type="int">
-  <int value="0" label="Failed to load"/>
-  <int value="1" label="Loaded successfuly"/>
-</enum>
-
-<enum name="InstantExtended_FallbackCause" type="int">
-  <int value="0" label="Fallback did not occur"/>
-  <int value="1" label="Page not current: unknown"/>
-  <int value="2" label="Page not current: empty instant url"/>
-  <int value="3" label="Page not current: origin/path mismatch"/>
-  <int value="4" label="Page not current: instant not supported"/>
-  <int value="5" label="No overlay"/>
-  <int value="6" label="Javascript disabled"/>
-</enum>
-
-<enum name="InstantExtended_InstantNavigation" type="int">
-  <obsolete>
-    Deprecated as of 10/2013.
-  </obsolete>
-  <int value="0" label="Local click"/>
-  <int value="1" label="Local submit"/>
-  <int value="2" label="Online click"/>
-  <int value="3" label="Online submit"/>
-  <int value="4" label="Non-extended navigation"/>
-</enum>
-
-<enum name="InstantExtended_NewOptInState" type="int">
-  <int value="0" label="Default"/>
-  <int value="1" label="Opted in"/>
-  <int value="2" label="Opted out"/>
-</enum>
-
-<enum name="InstantExtended_OptInState" type="int">
-  <obsolete>
-    Deprecated 2013-06.
-  </obsolete>
-  <int value="0" label="Default"/>
-  <int value="1" label="Opted in"/>
-  <int value="2" label="Opted out"/>
-  <int value="3" label="Opted in local"/>
-  <int value="4" label="Opted out local"/>
-  <int value="5" label="Opted out both"/>
-</enum>
-
-<enum name="InstantSearchClicks_PreviewScrollState" type="int">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <int value="0" label="No scroll"/>
-  <int value="1" label="Scrolled but not to bottom"/>
-  <int value="2" label="Scrolled to bottom."/>
-</enum>
-
-<enum name="InstantSearchClicks_ReasonForSwap" type="int">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <int value="0" label="Regular swap"/>
-  <int value="1" label="Swapped on timeout"/>
-  <int value="2" label="Swap aborted due to navigation"/>
-  <int value="3" label="No swap as preview failed"/>
-  <int value="4" label="Swapped as original failed"/>
-</enum>
-
-<enum name="InstantSessionStorageNamespace" type="int">
-  <int value="0" label="different"/>
-  <int value="1" label="identical"/>
-</enum>
-
-<enum name="IntelMaxMicroArchitecture" type="int">
-  <int value="0" label="Pentium"/>
-  <int value="1" label="SSE"/>
-  <int value="2" label="SSE2"/>
-  <int value="3" label="SSE3"/>
-  <int value="4" label="SSSE3"/>
-  <int value="5" label="SSE4.1"/>
-  <int value="6" label="SSE4.2"/>
-  <int value="7" label="AVX"/>
-  <int value="8" label="AVX2"/>
-</enum>
-
-<enum name="InternalErrorLoadEvent" type="int">
-  <summary>Internal Errors in the page_load_metrics system</summary>
-  <int value="0" label="Invalid timing IPC sent from renderer"/>
-  <int value="1"
-      label="IPC received while not tracking a relevant committed load"/>
-  <int value="2" label="IPC received from a frame we navigated away from"/>
-  <int value="3" label="IPC received from a bad URL scheme"/>
-  <int value="4" label="No IPCs received for this navigation"/>
-  <int value="5" label="Page end reported before navigation start"/>
-  <int value="6"
-      label="Multiple aborted provisional loads at navigation start"/>
-  <int value="7"
-      label="User input received while not tracking a relevant committed load
-             (deprecated)"/>
-  <int value="8" label="Inter process TimeTicks skew"/>
-  <int value="9" label="No commit or failed provisional load received"/>
-  <int value="10" label="No page load end time recorded"/>
-  <int value="11" label="Timing IPC received from subframe"/>
-</enum>
-
-<enum name="InterruptReason" type="int">
-  <int value="0" label="NONE"/>
-  <int value="1" label="FILE_FAILED"/>
-  <int value="2" label="FILE_ACCESS_DENIED"/>
-  <int value="3" label="FILE_NO_SPACE"/>
-  <int value="5" label="FILE_NAME_TOO_LONG"/>
-  <int value="6" label="FILE_TOO_LARGE"/>
-  <int value="7" label="FILE_VIRUS_INFECTED"/>
-  <int value="10" label="FILE_TRANSIENT_ERROR"/>
-  <int value="11" label="FILE_BLOCKED"/>
-  <int value="12" label="FILE_SECURITY_CHECK_FAILED"/>
-  <int value="13" label="FILE_TOO_SHORT"/>
-  <int value="20" label="NETWORK_FAILED"/>
-  <int value="21" label="NETWORK_TIMEOUT"/>
-  <int value="22" label="NETWORK_DISCONNECTED"/>
-  <int value="23" label="NETWORK_SERVER_DOWN"/>
-  <int value="24" label="NETWORK_INVALID_REQUEST"/>
-  <int value="30" label="SERVER_FAILED"/>
-  <int value="31" label="SERVER_NO_RANGE"/>
-  <int value="32" label="SERVER_PRECONDITION (Deprecated)"/>
-  <int value="33" label="SERVER_BAD_CONTENT"/>
-  <int value="34" label="SERVER_UNAUTHORIZED"/>
-  <int value="35" label="SERVER_CERT_PROBLEM"/>
-  <int value="36" label="SERVER_FORBIDDEN"/>
-  <int value="37" label="SERVER_UNREACHABLE"/>
-  <int value="40" label="USER_CANCELED"/>
-  <int value="41" label="USER_SHUTDOWN"/>
-  <int value="50" label="CRASH"/>
-</enum>
-
-<enum name="InvalidationNetworkChannel" type="int">
-  <int value="0" label="PushClientChannel"/>
-  <int value="1" label="GCMNetworkChannel"/>
-</enum>
-
-<enum name="IOSExternalURLRequestStatus" type="int">
-  <int value="0" label="MainFrameAllowed"/>
-  <int value="1" label="SubframeAllowed"/>
-  <int value="2" label="SubframeBlocked"/>
-</enum>
-
-<enum name="IOSShareExtensionReceivedEntrySource" type="int">
-  <int value="0" label="Unknown Application"/>
-  <int value="1" label="Chrome share extension"/>
-</enum>
-
-<enum name="IOSShareExtensionReceivedEntryType" type="int">
-  <int value="0" label="Invalid item"/>
-  <int value="1" label="Cancelled item"/>
-  <int value="2" label="Reading list item"/>
-  <int value="3" label="Bookmark item"/>
-</enum>
-
-<enum name="IOSSpotlightAction" type="int">
-  <int value="0" label="New Tab"/>
-  <int value="1" label="New Incognito Tab"/>
-  <int value="2" label="Voice Search"/>
-  <int value="3" label="QR Code Scanner"/>
-</enum>
-
-<enum name="IPCAttachmentBrokerPrivilegedBrokerAttachmentError" type="int">
-  <int value="0" label="DESTINATION_FOUND">
-    The brokerable attachment had a valid destination. This is the success case.
-  </int>
-  <int value="1" label="DESTINATION_NOT_FOUND">
-    The brokerable attachment had a destination, but the broker did not have a
-    channel of communication with that process.
-  </int>
-  <int value="2" label="NO_DESTINATION">
-    The brokerable attachment did not have a destination process.
-  </int>
-  <int value="3" label="ERROR_MAKE_INTERMEDIATE">
-    Error making an intermediate Mach port.
-  </int>
-  <int value="4" label="ERROR_PARSE_DUPLICATE_MACH_PORT_MESSAGE">
-    Error parsing DuplicateMachPort message.
-  </int>
-  <int value="5" label="ERROR_TASK_FOR_PID">
-    Couldn't get a task port for the process with a given pid.
-  </int>
-  <int value="6" label="ERROR_MAKE_RECEIVE_PORT">
-    Couldn't make a port with receive rights in the destination process.
-  </int>
-  <int value="7" label="ERROR_SET_ATTRIBUTES">
-    Couldn't change the attributes of a Mach port.
-  </int>
-  <int value="8" label="ERROR_EXTRACT_RIGHT_DEST">
-    Couldn't extract a right from the destination process.
-  </int>
-  <int value="9" label="ERROR_SEND_MACH_PORT">
-    Couldn't send a Mach port in a call to mach_msg().
-  </int>
-  <int value="10" label="ERROR_DECREASE_REF">
-    Couldn't decrease the ref count on a Mach port.
-  </int>
-  <int value="11" label="ERROR_EXTRACT_RIGHT_SOURCE">
-    Couldn't extract a right from the source process.
-  </int>
-  <int value="12" label="ERROR_SOURCE_NOT_FOUND">
-    Broker didn't have a channel of communication with the source process.
-  </int>
-  <int value="13" label="ERROR_COULD_NOT_OPEN_SOURCE_OR_DEST">
-    Broker could not open the source or destination process with extra
-    privileges.
-  </int>
-  <int value="14" label="ERROR_INVALID_PERMISSIONS">
-    Broker was asked to transfer a HANDLE with invalid permissions.
-  </int>
-  <int value="15" label="DELAYED">
-    Broker was not immediately able to send an attachment.
-  </int>
-  <int value="16" label="DELAYED_SEND">
-    Broker successfully sent a delayed attachment.
-  </int>
-</enum>
-
-<enum name="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError" type="int">
-  <int value="0" label="SUCCESS">
-    The brokerable attachment was successfully processed.
-  </int>
-  <int value="1" label="DESTINATION_NOT_FOUND">
-    The brokerable attachment's destination was not the process that received
-    the attachment.
-  </int>
-  <int value="2" label="ERR_RECEIVE_MACH_MESSAGE">
-    An error occurred while trying to receive a Mach port with mach_msg().
-  </int>
-</enum>
-
-<enum name="IPPermissionStatus" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Not requested"/>
-  <int value="2" label="Requested but denied"/>
-  <int value="3"
-      label="Requested and granted after checking mic/camera permission"/>
-  <int value="4" label="Requested and granted automatically"/>
-</enum>
-
-<enum name="IPv6ConnectivityStatus" type="int">
-  <int value="0" label="Incomplete IPv6 Configuration"/>
-  <int value="1" label="Complete IPv6 Configuration"/>
-</enum>
-
-<enum name="IPV6ProbeResult" type="int">
-  <int value="0" label="IPV6_CANNOT_CREATE_SOCKETS"/>
-  <int value="1" label="IPV6_CAN_CREATE_SOCKETS"/>
-  <int value="2" label="IPV6_GETIFADDRS_FAILED">
-    getifaddrs or GetAdaptersAddresses failed
-  </int>
-  <int value="3" label="IPV6_GLOBAL_ADDRESS_MISSING"/>
-  <int value="4" label="IPV6_GLOBAL_ADDRESS_PRESENT"/>
-  <int value="5" label="IPV6_INTERFACE_ARRAY_TOO_SHORT"/>
-</enum>
-
-<enum name="IsPinnedToTaskbarResult" type="int">
-  <int value="0" label="Not pinned"/>
-  <int value="1" label="Pinned"/>
-  <int value="2" label="Failed to determine"/>
-</enum>
-
-<enum name="JavaScriptAPIName" type="int">
-  <int value="0" label="GetUserMedia"/>
-  <int value="1" label="PeerConnection00"/>
-  <int value="2" label="DeprecatedPeerConnection"/>
-  <int value="3" label="RTCPeerConnection"/>
-  <int value="4" label="GetMediaDevices"/>
-  <int value="5" label="MediaStreamRecorder"/>
-  <int value="6" label="CanvasCaptureStream"/>
-  <int value="7" label="VideoCaptureStream"/>
-</enum>
-
-<enum name="JavaScriptDialogDismissalCause" type="int">
-  <int value="0" label="Tab closed">The tab owning the dialog was closed</int>
-  <int value="1" label="New dialog">
-    A new dialog was shown, closing the existing dialog
-  </int>
-  <int value="2" label="HandleDialog">HandleJavaScriptDialog was called</int>
-  <int value="3" label="CancelDialog">CancelDialogs was called</int>
-  <int value="4" label="Tab hidden">The tab owning the dialog was hidden</int>
-  <int value="5" label="Browser switched">
-    The browser owning the dialog was deactivated
-  </int>
-  <int value="6" label="Button click">
-    The user clicked on the OK or Cancel button
-  </int>
-  <int value="7" label="Tab navigated">
-    The user navigated the tab (e.g. back/forward, reload)
-  </int>
-</enum>
-
-<enum name="JumplistIconsDetailedFolderMoveCategory" type="int">
-  <int value="0"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="1"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="2"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="3"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="4"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="5"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="6"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="7"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="8"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="9"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="10"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="11"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="12"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="13"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="14"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="15"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="16"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="17"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="18"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="19"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="20"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="21"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="22"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="23"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="24"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="25"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="26"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="27"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="28"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="29"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="30"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="31"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Succeed - DelFile Fail - DelSourceDir Fail"/>
-  <int value="32"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="33"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="34"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="35"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="36"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="37"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="38"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="39"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="40"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="41"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="42"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="43"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="44"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="45"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="46"
-      label="DelTargetDir Succeed - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="47"
-      label="DelTargetDir Succeed - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="48"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="49"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="50"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="51"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Succeed"/>
-  <int value="52"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="53"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="54"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="55"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Succeed"/>
-  <int value="56"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="57"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="58"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="59"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Succeed - DelSourceDir Fail"/>
-  <int value="60"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="61"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Succeed -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="62"
-      label="DelTargetDir Fail - MoveFileEx Succeed - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-  <int value="63"
-      label="DelTargetDir Fail - MoveFileEx Fail - CopyFile Fail -
-             SourceDirRead Fail - DelFile Fail - DelSourceDir Fail"/>
-</enum>
-
-<enum name="JumplistIconsDetailedFolderOperationCategory" type="int">
-  <int value="0"
-      label="Del Dest Succeed - Mov Succeed - Del Src Succeed - Create Src
-             Succeed"/>
-  <int value="1"
-      label="Del Dest Fail - Mov Succeed - Del Src Succeed - Create Src
-             Succeed"/>
-  <int value="2"
-      label="Del Dest Succeed - Mov Fail - Del Src Succeed - Create Src
-             Succeed"/>
-  <int value="3"
-      label="Del Dest Fail - Mov Fail - Del Src Succeed - Create Src Succeed"/>
-  <int value="4"
-      label="Del Dest Succeed - Mov Succeed - Del Src Fail - Create Src
-             Succeed"/>
-  <int value="5"
-      label="Del Dest Fail - Mov Succeed - Del Src Fail - Create Src Succeed"/>
-  <int value="6"
-      label="Del Dest Succeed - Mov Fail - Del Src Fail - Create Src Succeed"/>
-  <int value="7"
-      label="Del Dest Fail - Mov Fail - Del Src Fail - Create Src Succeed"/>
-  <int value="8"
-      label="Del Dest Succeed - Mov Succeed - Del Src Succeed - Create Src
-             Fail"/>
-  <int value="9"
-      label="Del Dest Fail - Mov Succeed - Del Src Succeed - Create Src Fail"/>
-  <int value="10"
-      label="Del Dest Succeed - Mov Fail - Del Src Succeed - Create Src Fail"/>
-  <int value="11"
-      label="Del Dest Fail - Mov Fail - Del Src Succeed - Create Src Fail"/>
-  <int value="12"
-      label="Del Dest Succeed - Mov Succeed - Del Src Fail - Create Src Fail"/>
-  <int value="13"
-      label="Del Dest Fail - Mov Succeed - Del Src Fail - Create Src Fail"/>
-  <int value="14"
-      label="Del Dest Succeed - Mov Fail - Del Src Fail - Create Src Fail"/>
-  <int value="15"
-      label="Del Dest Fail - Mov Fail - Del Src Fail - Create Src Fail"/>
-</enum>
-
-<enum name="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory"
-    type="int">
-  <int value="0"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Succeed -
-             Del Src Dir Succeed - Create Src Succeed"/>
-  <int value="1"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Succeed - Del
-             Src Dir Succeed - Create Src Succeed"/>
-  <int value="2"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Succeed - Del
-             Src Dir Succeed - Create Src Succeed"/>
-  <int value="3"
-      label="Del Dest Fail - Rename Fail - Del Src Content Succeed - Del Src
-             Dir Succeed - Create Src Succeed"/>
-  <int value="4"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Fail - Del
-             Src Dir Succeed - Create Src Succeed"/>
-  <int value="5"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Fail - Del Src
-             Dir Succeed - Create Src Succeed"/>
-  <int value="6"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Fail - Del Src
-             Dir Succeed - Create Src Succeed"/>
-  <int value="7"
-      label="Del Dest Fail - Rename Fail - Del Src Content Fail - Del Src Dir
-             Succeed - Create Src Succeed"/>
-  <int value="8"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Succeed -
-             Del Src Dir Fail - Create Src Succeed"/>
-  <int value="9"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Succeed - Del
-             Src Dir Fail - Create Src Succeed"/>
-  <int value="10"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Succeed - Del
-             Src Dir Fail - Create Src Succeed"/>
-  <int value="11"
-      label="Del Dest Fail - Rename Fail - Del Src Content Succeed - Del Src
-             Dir Fail - Create Src Succeed"/>
-  <int value="12"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Fail - Del
-             Src Dir Fail - Create Src Succeed"/>
-  <int value="13"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Fail - Del Src
-             Dir Fail - Create Src Succeed"/>
-  <int value="14"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Fail - Del Src
-             Dir Fail - Create Src Succeed"/>
-  <int value="15"
-      label="Del Dest Fail - Rename Fail - Del Src Content Fail - Del Src Dir
-             Fail - Create Src Succeed"/>
-  <int value="16"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Succeed -
-             Del Src Dir Succeed - Create Src Fail"/>
-  <int value="17"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Succeed - Del
-             Src Dir Succeed - Create Src Fail"/>
-  <int value="18"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Succeed - Del
-             Src Dir Succeed - Create Src Fail"/>
-  <int value="19"
-      label="Del Dest Fail - Rename Fail - Del Src Content Succeed - Del Src
-             Dir Succeed - Create Src Fail"/>
-  <int value="20"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Fail - Del
-             Src Dir Succeed - Create Src Fail"/>
-  <int value="21"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Fail - Del Src
-             Dir Succeed - Create Src Fail"/>
-  <int value="22"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Fail - Del Src
-             Dir Succeed - Create Src Fail"/>
-  <int value="23"
-      label="Del Dest Fail - Rename Fail - Del Src Content Fail - Del Src Dir
-             Succeed - Create Src Fail"/>
-  <int value="24"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Succeed -
-             Del Src Dir Fail - Create Src Fail"/>
-  <int value="25"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Succeed - Del
-             Src Dir Fail - Create Src Fail"/>
-  <int value="26"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Succeed - Del
-             Src Dir Fail - Create Src Fail"/>
-  <int value="27"
-      label="Del Dest Fail - Rename Fail - Del Src Content Succeed - Del Src
-             Dir Fail - Create Src Fail"/>
-  <int value="28"
-      label="Del Dest Succeed - Rename Succeed - Del Src Content Fail - Del
-             Src Dir Fail - Create Src Fail"/>
-  <int value="29"
-      label="Del Dest Fail - Rename Succeed - Del Src Content Fail - Del Src
-             Dir Fail - Create Src Fail"/>
-  <int value="30"
-      label="Del Dest Succeed - Rename Fail - Del Src Content Fail - Del Src
-             Dir Fail - Create Src Fail"/>
-  <int value="31"
-      label="Del Dest Fail - Rename Fail - Del Src Content Fail - Del Src Dir
-             Fail - Create Src Fail"/>
-</enum>
-
-<enum name="JumplisticonsfolderCategory" type="int">
-  <int value="0" label="Del Succeed - Mov Succeed - Create Succeed"/>
-  <int value="1" label="Del Fail - Mov Succeed - Create Succeed"/>
-  <int value="2" label="Del Succeed - Mov Fail - Create Succeed"/>
-  <int value="3" label="Del Fail - Mov Fail - Create Succeed"/>
-  <int value="4" label="Del Succeed - Mov Succeed - Create Fail"/>
-  <int value="5" label="Del Fail - Mov Succeed - Create Fail"/>
-  <int value="6" label="Del Succeed - Mov Fail - Create Fail"/>
-  <int value="7" label="Del Fail - Mov Fail - Create Fail"/>
-</enum>
-
-<enum name="JumplistIconsFolderMoveCategory" type="int">
-  <int value="0"
-      label="Del Succeed - MaxPathCheck Succeed - MoveFileEx Succeed -
-             CopyDelDir Succeed"/>
-  <int value="1"
-      label="Del Succeed - MaxPathCheck Fail - MoveFileEx Succeed -
-             CopyDelDir Succeed"/>
-  <int value="2"
-      label="Del Succeed - MaxPathCheck Succeed - MoveFileEx Fail -
-             CopyDelDir Succeed"/>
-  <int value="3"
-      label="Del Succeed -MaxPathCheck Fail - MoveFileEx Fail - CopyDelDir
-             Succeed"/>
-  <int value="4"
-      label="Del Succeed -MaxPathCheck Succeed - MoveFileEx Succeed -
-             CopyDelDir Fail"/>
-  <int value="5"
-      label="Del Succeed -MaxPathCheck Fail - MoveFileEx Succeed - CopyDelDir
-             Fail"/>
-  <int value="6"
-      label="Del Succeed -MaxPathCheck Succeed - MoveFileEx Fail - CopyDelDir
-             Fail"/>
-  <int value="7"
-      label="Del Succeed -MaxPathCheck Fail - MoveFileEx Fail - CopyDelDir
-             Fail"/>
-  <int value="8"
-      label="Del Fail - MaxPathCheck Succeed - MoveFileEx Succeed -
-             CopyDelDir Succeed"/>
-  <int value="9"
-      label="Del Fail - MaxPathCheck Fail - MoveFileEx Succeed - CopyDelDir
-             Succeed"/>
-  <int value="10"
-      label="Del Fail - MaxPathCheck Succeed - MoveFileEx Fail - CopyDelDir
-             Succeed"/>
-  <int value="11"
-      label="Del Fail -MaxPathCheck Fail - MoveFileEx Fail - CopyDelDir
-             Succeed"/>
-  <int value="12"
-      label="Del Fail -MaxPathCheck Succeed - MoveFileEx Succeed - CopyDelDir
-             Fail"/>
-  <int value="13"
-      label="Del Fail -MaxPathCheck Fail - MoveFileEx Succeed - CopyDelDir
-             Fail"/>
-  <int value="14"
-      label="Del Fail -MaxPathCheck Succeed - MoveFileEx Fail - CopyDelDir
-             Fail"/>
-  <int value="15"
-      label="Del Fail -MaxPathCheck Fail - MoveFileEx Fail - CopyDelDir Fail"/>
-</enum>
-
-<enum name="KeyboardControlEvent" type="int">
-  <int value="0" label="Keyboard was shown."/>
-  <int value="1" label="Keyboard was automatically hidden."/>
-  <int value="2" label="Keyboard was hidden by the user."/>
-</enum>
-
-<enum name="KeychainMigrationStatus" type="int">
-  <int value="0" label="Migration hasn't started"/>
-  <int value="1" label="Migration succeeded"/>
-  <int value="2" label="Migation failed once"/>
-  <int value="3" label="Migration failed twice"/>
-  <int value="4" label="Migration succeeded, Keychain cleaned up"/>
-  <int value="5" label="Partial migration"/>
-  <int value="6" label="Migration stopped"/>
-</enum>
-
-<enum name="KioskLaunchError" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Has pending launch"/>
-  <int value="2" label="Cryptohome daemon not running"/>
-  <int value="3" label="Launch with mounted cryptohome"/>
-  <int value="4" label="Unable to mount cryptohome"/>
-  <int value="5" label="Unable to remove cryptohome"/>
-  <int value="6" label="Unable to install app"/>
-  <int value="7" label="User cancel"/>
-  <int value="8" label="App is not kiosk enabled"/>
-  <int value="9" label="Unable to get username hash"/>
-  <int value="10" label="Failed to load policy for kiosk account"/>
-  <int value="11" label="Unable to download crx"/>
-  <int value="12" label="Unable to launch app"/>
-</enum>
-
-<enum name="KioskLaunchType" type="int">
-  <int value="0" label="Enterprise auto launch"/>
-  <int value="1" label="Enterprise manual launch"/>
-  <int value="2" label="Consumer auto launch"/>
-  <int value="3" label="Consumer manual launch"/>
-</enum>
-
-<enum name="LanguageCode" type="int">
-  <summary>ISO 639 Language Codes.</summary>
-  <int value="24929" label="Afar"/>
-  <int value="24930" label="Abkhazian"/>
-  <int value="24933" label="Avestan"/>
-  <int value="24934" label="Afrikaans"/>
-  <int value="24939" label="Akan"/>
-  <int value="24941" label="Amharic"/>
-  <int value="24942" label="Aragonese"/>
-  <int value="24946" label="Arabic"/>
-  <int value="24947" label="Assamese"/>
-  <int value="24950" label="Avaric"/>
-  <int value="24953" label="Aymara"/>
-  <int value="24954" label="Azerbaijani"/>
-  <int value="25185" label="Bashkir"/>
-  <int value="25189" label="Belarusian"/>
-  <int value="25191" label="Bulgarian"/>
-  <int value="25192" label="Bihari"/>
-  <int value="25193" label="Bislama"/>
-  <int value="25197" label="Bambara"/>
-  <int value="25198" label="Bengali"/>
-  <int value="25199" label="Tibetan"/>
-  <int value="25202" label="Breton"/>
-  <int value="25203" label="Bosnian"/>
-  <int value="25441" label="Catalan"/>
-  <int value="25445" label="Chechen"/>
-  <int value="25448" label="Chamorro"/>
-  <int value="25455" label="Corsican"/>
-  <int value="25458" label="Cree"/>
-  <int value="25459" label="Czech"/>
-  <int value="25461" label="Church Slavic"/>
-  <int value="25462" label="Chuvash"/>
-  <int value="25465" label="Welsh"/>
-  <int value="25697" label="Danish"/>
-  <int value="25701" label="German"/>
-  <int value="25718" label="Divehi"/>
-  <int value="25722" label="Dzongkha"/>
-  <int value="25957" label="Ewe"/>
-  <int value="25964" label="Greek"/>
-  <int value="25966" label="English"/>
-  <int value="25967" label="Esperanto"/>
-  <int value="25971" label="Spanish"/>
-  <int value="25972" label="Estonian"/>
-  <int value="25973" label="Basque"/>
-  <int value="26209" label="Persian"/>
-  <int value="26214" label="Fulah"/>
-  <int value="26217" label="Finnish"/>
-  <int value="26218" label="Fijian"/>
-  <int value="26223" label="Faroese"/>
-  <int value="26226" label="French"/>
-  <int value="26233" label="Western Frisian"/>
-  <int value="26465" label="Irish"/>
-  <int value="26468" label="Scottish Gaelic"/>
-  <int value="26476" label="Galician"/>
-  <int value="26478" label="Guarani"/>
-  <int value="26485" label="Gujarati"/>
-  <int value="26486" label="Manx"/>
-  <int value="26721" label="Hausa"/>
-  <int value="26725" label="Hebrew"/>
-  <int value="26729" label="Hindi"/>
-  <int value="26735" label="Hiri Motu"/>
-  <int value="26738" label="Croatian"/>
-  <int value="26740" label="Haitian"/>
-  <int value="26741" label="Hungarian"/>
-  <int value="26745" label="Armenian"/>
-  <int value="26746" label="Herero"/>
-  <int value="26977" label="Interlingua"/>
-  <int value="26980" label="Indonesian"/>
-  <int value="26981" label="Interlingue"/>
-  <int value="26983" label="Igbo"/>
-  <int value="26985" label="Sichuan Yi"/>
-  <int value="26987" label="Inupiaq"/>
-  <int value="26991" label="Ido"/>
-  <int value="26995" label="Icelandic"/>
-  <int value="26996" label="Italian"/>
-  <int value="26997" label="Inuktitut"/>
-  <int value="27233" label="Japanese"/>
-  <int value="27254" label="Javanese"/>
-  <int value="27489" label="Georgian"/>
-  <int value="27495" label="Kongo"/>
-  <int value="27497" label="Kikuyu"/>
-  <int value="27498" label="Kuanyama"/>
-  <int value="27499" label="Kazakh"/>
-  <int value="27500" label="Kalaallisut"/>
-  <int value="27501" label="Khmer"/>
-  <int value="27502" label="Kannada"/>
-  <int value="27503" label="Korean"/>
-  <int value="27506" label="Kanuri"/>
-  <int value="27507" label="Kashmiri"/>
-  <int value="27509" label="Kurdish"/>
-  <int value="27510" label="Komi"/>
-  <int value="27511" label="Cornish"/>
-  <int value="27513" label="Kirghiz"/>
-  <int value="27745" label="Latin"/>
-  <int value="27746" label="Luxembourgish"/>
-  <int value="27751" label="Ganda"/>
-  <int value="27753" label="Limburgish"/>
-  <int value="27758" label="Lingala"/>
-  <int value="27759" label="Lao"/>
-  <int value="27764" label="Lithuanian"/>
-  <int value="27765" label="Luba-Katanga"/>
-  <int value="27766" label="Latvian"/>
-  <int value="28007" label="Malagasy"/>
-  <int value="28008" label="Marshallese"/>
-  <int value="28009" label="Maori"/>
-  <int value="28011" label="Macedonian"/>
-  <int value="28012" label="Malayalam"/>
-  <int value="28014" label="Mongolian"/>
-  <int value="28015" label="Moldavian"/>
-  <int value="28018" label="Marathi"/>
-  <int value="28019" label="Malay"/>
-  <int value="28020" label="Maltese"/>
-  <int value="28025" label="Burmese"/>
-  <int value="28257" label="Nauru"/>
-  <int value="28258" label="Norwegian Bokmal"/>
-  <int value="28260" label="North Ndebele"/>
-  <int value="28261" label="Nepali"/>
-  <int value="28263" label="Ndonga"/>
-  <int value="28268" label="Dutch"/>
-  <int value="28270" label="Norwegian Nynorsk"/>
-  <int value="28271" label="Norwegian"/>
-  <int value="28274" label="South Ndebele"/>
-  <int value="28278" label="Navajo"/>
-  <int value="28281" label="Nyanja"/>
-  <int value="28515" label="Occitan"/>
-  <int value="28522" label="Ojibwa"/>
-  <int value="28525" label="Oromo"/>
-  <int value="28530" label="Oriya"/>
-  <int value="28531" label="Ossetic"/>
-  <int value="28769" label="Punjabi"/>
-  <int value="28777" label="Pali"/>
-  <int value="28780" label="Polish"/>
-  <int value="28787" label="Pashto"/>
-  <int value="28788" label="Portuguese"/>
-  <int value="29045" label="Quechua"/>
-  <int value="29293" label="Romansh"/>
-  <int value="29294" label="Rundi"/>
-  <int value="29295" label="Romanian"/>
-  <int value="29301" label="Russian"/>
-  <int value="29303" label="Kinyarwanda"/>
-  <int value="29537" label="Sanskrit"/>
-  <int value="29539" label="Sardinian"/>
-  <int value="29540" label="Sindhi"/>
-  <int value="29541" label="Northern Sami"/>
-  <int value="29543" label="Sango"/>
-  <int value="29544" label="Serbo-Croatian"/>
-  <int value="29545" label="Sinhala"/>
-  <int value="29547" label="Slovak"/>
-  <int value="29548" label="Slovenian"/>
-  <int value="29549" label="Samoan"/>
-  <int value="29550" label="Shona"/>
-  <int value="29551" label="Somali"/>
-  <int value="29553" label="Albanian"/>
-  <int value="29554" label="Serbian"/>
-  <int value="29555" label="Swati"/>
-  <int value="29556" label="Southern Sotho"/>
-  <int value="29557" label="Sundanese"/>
-  <int value="29558" label="Swedish"/>
-  <int value="29559" label="Swahili"/>
-  <int value="29793" label="Tamil"/>
-  <int value="29797" label="Telugu"/>
-  <int value="29799" label="Tajik"/>
-  <int value="29800" label="Thai"/>
-  <int value="29801" label="Tigrinya"/>
-  <int value="29803" label="Turkmen"/>
-  <int value="29804" label="Tagalog"/>
-  <int value="29806" label="Tswana"/>
-  <int value="29807" label="Tonga"/>
-  <int value="29810" label="Turkish"/>
-  <int value="29811" label="Tsonga"/>
-  <int value="29812" label="Tatar"/>
-  <int value="29815" label="Twi"/>
-  <int value="29817" label="Tahitian"/>
-  <int value="30055" label="Uighur"/>
-  <int value="30059" label="Ukrainian"/>
-  <int value="30066" label="Urdu"/>
-  <int value="30074" label="Uzbek"/>
-  <int value="30309" label="Venda"/>
-  <int value="30313" label="Vietnamese"/>
-  <int value="30319" label="Volapuk"/>
-  <int value="30561" label="Walloon"/>
-  <int value="30575" label="Wolof"/>
-  <int value="30824" label="Xhosa"/>
-  <int value="31081" label="Yiddish"/>
-  <int value="31087" label="Yoruba"/>
-  <int value="31329" label="Zhuang"/>
-  <int value="31336" label="Chinese"/>
-  <int value="31349" label="Zulu"/>
-  <int value="6382437" label="Achinese"/>
-  <int value="6382440" label="Acoli"/>
-  <int value="6382689" label="Adangme"/>
-  <int value="6382713" label="Adyghe"/>
-  <int value="6383201" label="Afro-Asiatic Language"/>
-  <int value="6383208" label="Afrihili"/>
-  <int value="6383982" label="Ainu"/>
-  <int value="6384491" label="Akkadian"/>
-  <int value="6384741" label="Aleut"/>
-  <int value="6384743" label="Algonquian Language"/>
-  <int value="6384756" label="Southern Altai"/>
-  <int value="6385255" label="Old English"/>
-  <int value="6385264" label="Angika"/>
-  <int value="6385761" label="Apache Language"/>
-  <int value="6386275" label="Aramaic"/>
-  <int value="6386286" label="Araucanian"/>
-  <int value="6386288" label="Arapaho"/>
-  <int value="6386292" label="Artificial Language"/>
-  <int value="6386295" label="Arawak"/>
-  <int value="6386529" label="Asu"/>
-  <int value="6386548" label="Asturian"/>
-  <int value="6386792" label="Athapascan Language"/>
-  <int value="6387059" label="Australian Language"/>
-  <int value="6387553" label="Awadhi"/>
-  <int value="6447460" label="Banda"/>
-  <int value="6447465" label="Bamileke Language"/>
-  <int value="6447468" label="Baluchi"/>
-  <int value="6447470" label="Balinese"/>
-  <int value="6447475" label="Basa"/>
-  <int value="6447476" label="Baltic Language"/>
-  <int value="6448490" label="Beja"/>
-  <int value="6448493" label="Bemba"/>
-  <int value="6448498" label="Berber"/>
-  <int value="6448506" label="Bena"/>
-  <int value="6449263" label="Bhojpuri"/>
-  <int value="6449515" label="Bikol"/>
-  <int value="6449518" label="Bini"/>
-  <int value="6450273" label="Siksika"/>
-  <int value="6450804" label="Bantu"/>
-  <int value="6451809" label="Braj"/>
-  <int value="6451832" label="Bodo"/>
-  <int value="6452331" label="Batak"/>
-  <int value="6452577" label="Buriat"/>
-  <int value="6452583" label="Buginese"/>
-  <int value="6453614" label="Blin"/>
-  <int value="6512996" label="Caddo"/>
-  <int value="6513001" label="Central American Indian Language"/>
-  <int value="6513010" label="Carib"/>
-  <int value="6513013" label="Caucasian Language"/>
-  <int value="6513017" label="Cayuga"/>
-  <int value="6513512" label="Atsam"/>
-  <int value="6514018" label="Cebuano"/>
-  <int value="6514028" label="Celtic Language"/>
-  <int value="6514535" label="Chiga"/>
-  <int value="6514786" label="Chibcha"/>
-  <int value="6514791" label="Chagatai"/>
-  <int value="6514795" label="Chuukese"/>
-  <int value="6514797" label="Mari"/>
-  <int value="6514798" label="Chinook Jargon"/>
-  <int value="6514799" label="Choctaw"/>
-  <int value="6514800" label="Chipewyan"/>
-  <int value="6514802" label="Cherokee"/>
-  <int value="6514809" label="Cheyenne"/>
-  <int value="6516067" label="Chamic Language"/>
-  <int value="6516592" label="Coptic"/>
-  <int value="6516837" label="English-based Creole or Pidgin"/>
-  <int value="6516838" label="French-based Creole or Pidgin"/>
-  <int value="6516848" label="Portuguese-based Creole or Pidgin"/>
-  <int value="6517352" label="Crimean Turkish"/>
-  <int value="6517360" label="Creole or Pidgin"/>
-  <int value="6517602" label="Kashubian"/>
-  <int value="6518131" label="Cushitic Language"/>
-  <int value="6578539" label="Dakota"/>
-  <int value="6578546" label="Dargwa"/>
-  <int value="6578550" label="Taita"/>
-  <int value="6578553" label="Dayak"/>
-  <int value="6579564" label="Delaware"/>
-  <int value="6579566" label="Slave"/>
-  <int value="6580082" label="Dogrib"/>
-  <int value="6580590" label="Dinka"/>
-  <int value="6580837" label="Zarma"/>
-  <int value="6582121" label="Dogri"/>
-  <int value="6582881" label="Dravidian Language"/>
-  <int value="6583138" label="Lower Sorbian"/>
-  <int value="6583649" label="Duala"/>
-  <int value="6583661" label="Middle Dutch"/>
-  <int value="6584693" label="Dyula"/>
-  <int value="6644341" label="Embu"/>
-  <int value="6645353" label="Efik"/>
-  <int value="6645625" label="Ancient Egyptian"/>
-  <int value="6646625" label="Ekajuk"/>
-  <int value="6646904" label="Elamite"/>
-  <int value="6647405" label="Middle English"/>
-  <int value="6649711" label="Ewondo"/>
-  <int value="6709614" label="Fang"/>
-  <int value="6709620" label="Fanti"/>
-  <int value="6711660" label="Filipino"/>
-  <int value="6711669" label="Finno-Ugrian Language"/>
-  <int value="6713198" label="Fon"/>
-  <int value="6713965" label="Middle French"/>
-  <int value="6713967" label="Old French"/>
-  <int value="6713970" label="Northern Frisian"/>
-  <int value="6713971" label="Eastern Frisian"/>
-  <int value="6714738" label="Friulian"/>
-  <int value="6775137" label="Ga"/>
-  <int value="6775161" label="Gayo"/>
-  <int value="6775393" label="Gbaya"/>
-  <int value="6776173" label="Germanic Language"/>
-  <int value="6776186" label="Geez"/>
-  <int value="6777196" label="Gilbertese"/>
-  <int value="6778216" label="Middle High German"/>
-  <int value="6778728" label="Old High German"/>
-  <int value="6778734" label="Gondi"/>
-  <int value="6778738" label="Gorontalo"/>
-  <int value="6778740" label="Gothic"/>
-  <int value="6779490" label="Grebo"/>
-  <int value="6779491" label="Ancient Greek"/>
-  <int value="6779767" label="Swiss German"/>
-  <int value="6780282" label="Gusii"/>
-  <int value="6780777" label="Gwich'in"/>
-  <int value="6840681" label="Haida"/>
-  <int value="6840695" label="Hawaiian"/>
-  <int value="6842732" label="Hiligaynon"/>
-  <int value="6842733" label="Himachali"/>
-  <int value="6842740" label="Hittite"/>
-  <int value="6843758" label="Hmong"/>
-  <int value="6845282" label="Upper Sorbian"/>
-  <int value="6845808" label="Hupa"/>
-  <int value="6906465" label="Iban"/>
-  <int value="6908527" label="Ijo"/>
-  <int value="6909039" label="Iloko"/>
-  <int value="6909539" label="Indic Language"/>
-  <int value="6909541" label="Indo-European Language"/>
-  <int value="6909544" label="Ingush"/>
-  <int value="6910561" label="Iranian Language"/>
-  <int value="6910575" label="Iroquoian Language"/>
-  <int value="6972015" label="Lojban"/>
-  <int value="6974819" label="Machame"/>
-  <int value="6975602" label="Judeo-Persian"/>
-  <int value="6976098" label="Judeo-Arabic"/>
-  <int value="7037281" label="Kara-Kalpak"/>
-  <int value="7037282" label="Kabyle"/>
-  <int value="7037283" label="Kachin"/>
-  <int value="7037290" label="Jju"/>
-  <int value="7037293" label="Kamba"/>
-  <int value="7037298" label="Karen"/>
-  <int value="7037303" label="Kawi"/>
-  <int value="7037540" label="Kabardian"/>
-  <int value="7037799" label="Tyap"/>
-  <int value="7038053" label="Makonde"/>
-  <int value="7038305" label="Kabuverdianu"/>
-  <int value="7038575" label="Koro"/>
-  <int value="7039073" label="Khasi"/>
-  <int value="7039081" label="Khoisan Language"/>
-  <int value="7039087" label="Khotanese"/>
-  <int value="7039089" label="Koyra Chiini"/>
-  <int value="7040110" label="Kalenjin"/>
-  <int value="7040354" label="Kimbundu"/>
-  <int value="7040875" label="Konkani"/>
-  <int value="7040883" label="Kosraean"/>
-  <int value="7041125" label="Kpelle"/>
-  <int value="7041635" label="Karachay-Balkar"/>
-  <int value="7041644" label="Karelian"/>
-  <int value="7041647" label="Kru"/>
-  <int value="7041653" label="Kurukh"/>
-  <int value="7041890" label="Shambala"/>
-  <int value="7041896" label="Colognian"/>
-  <int value="7042413" label="Kumyk"/>
-  <int value="7042420" label="Kutenai"/>
-  <int value="7102820" label="Ladino"/>
-  <int value="7102823" label="Langi"/>
-  <int value="7102824" label="Lahnda"/>
-  <int value="7102829" label="Lamba"/>
-  <int value="7103866" label="Lezghian"/>
-  <int value="7106412" label="Mongo"/>
-  <int value="7106426" label="Lozi"/>
-  <int value="7107937" label="Luba-Lulua"/>
-  <int value="7107945" label="Luiseno"/>
-  <int value="7107950" label="Lunda"/>
-  <int value="7107951" label="Luo"/>
-  <int value="7107955" label="Lushai"/>
-  <int value="7107961" label="Luyia"/>
-  <int value="7168356" label="Madurese"/>
-  <int value="7168359" label="Magahi"/>
-  <int value="7168361" label="Maithili"/>
-  <int value="7168363" label="Makasar"/>
-  <int value="7168366" label="Mandingo"/>
-  <int value="7168368" label="Austronesian Language"/>
-  <int value="7168371" label="Masai"/>
-  <int value="7169126" label="Moksha"/>
-  <int value="7169138" label="Mandar"/>
-  <int value="7169390" label="Mende"/>
-  <int value="7169394" label="Meru"/>
-  <int value="7169637" label="Morisyen"/>
-  <int value="7169889" label="Middle Irish"/>
-  <int value="7170403" label="Micmac"/>
-  <int value="7170414" label="Minangkabau"/>
-  <int value="7170419" label="Miscellaneous Language"/>
-  <int value="7170920" label="Mon-Khmer Language"/>
-  <int value="7171683" label="Manchu"/>
-  <int value="7171689" label="Manipuri"/>
-  <int value="7171695" label="Manobo Language"/>
-  <int value="7171944" label="Mohawk"/>
-  <int value="7171955" label="Mossi"/>
-  <int value="7173484" label="Multiple Languages"/>
-  <int value="7173486" label="Munda Language"/>
-  <int value="7173491" label="Creek"/>
-  <int value="7173996" label="Mirandese"/>
-  <int value="7174002" label="Marwari"/>
-  <int value="7174510" label="Mayan Language"/>
-  <int value="7174518" label="Erzya"/>
-  <int value="7233896" label="Nahuatl"/>
-  <int value="7233897" label="North American Indian Language"/>
-  <int value="7233904" label="Neapolitan"/>
-  <int value="7233905" label="Nama"/>
-  <int value="7234675" label="Low German"/>
-  <int value="7234935" label="Newari"/>
-  <int value="7235937" label="Nias"/>
-  <int value="7235939" label="Niger-Kordofanian Language"/>
-  <int value="7235957" label="Niuean"/>
-  <int value="7237479" label="Nogai"/>
-  <int value="7237486" label="Old Norse"/>
-  <int value="7237999" label="N'Ko"/>
-  <int value="7238511" label="Northern Sotho"/>
-  <int value="7239010" label="Nubian Language"/>
-  <int value="7239523" label="Classical Newari"/>
-  <int value="7240045" label="Nyamwezi"/>
-  <int value="7240046" label="Nyankole"/>
-  <int value="7240047" label="Nyoro"/>
-  <int value="7240297" label="Nzima"/>
-  <int value="7304033" label="Osage"/>
-  <int value="7304289" label="Ottoman Turkish"/>
-  <int value="7304303" label="Otomian Language"/>
-  <int value="7364961" label="Papuan Language"/>
-  <int value="7364967" label="Pangasinan"/>
-  <int value="7364972" label="Pahlavi"/>
-  <int value="7364973" label="Pampanga"/>
-  <int value="7364976" label="Papiamento"/>
-  <int value="7364981" label="Palauan"/>
-  <int value="7365999" label="Old Persian"/>
-  <int value="7366761" label="Philippine Language"/>
-  <int value="7366766" label="Phoenician"/>
-  <int value="7368558" label="Pohnpeian"/>
-  <int value="7369313" label="Prakrit Language"/>
-  <int value="7369327" label="Old Provencal"/>
-  <int value="7496042" label="Rajasthani"/>
-  <int value="7496048" label="Rapanui"/>
-  <int value="7496050" label="Rarotongan"/>
-  <int value="7499617" label="Romance Language"/>
-  <int value="7499622" label="Rombo"/>
-  <int value="7499629" label="Romany"/>
-  <int value="7501168" label="Aromanian"/>
-  <int value="7501675" label="Rwa"/>
-  <int value="7561572" label="Sandawe"/>
-  <int value="7561576" label="Yakut"/>
-  <int value="7561577" label="South American Indian Language"/>
-  <int value="7561580" label="Salishan Language"/>
-  <int value="7561581" label="Samaritan Aramaic"/>
-  <int value="7561585" label="Samburu"/>
-  <int value="7561587" label="Sasak"/>
-  <int value="7561588" label="Santali"/>
-  <int value="7562094" label="Sicilian"/>
-  <int value="7562095" label="Scots"/>
-  <int value="7562597" label="Seneca"/>
-  <int value="7562600" label="Sena"/>
-  <int value="7562604" label="Selkup"/>
-  <int value="7562605" label="Semitic Language"/>
-  <int value="7562611" label="Koyraboro Senni"/>
-  <int value="7563105" label="Old Irish"/>
-  <int value="7563118" label="Sign Language"/>
-  <int value="7563369" label="Tachelhit"/>
-  <int value="7563374" label="Shan"/>
-  <int value="7563620" label="Sidamo"/>
-  <int value="7563631" label="Siouan Language"/>
-  <int value="7563636" label="Sino-Tibetan Language"/>
-  <int value="7564385" label="Slavic Language"/>
-  <int value="7564641" label="Southern Sami"/>
-  <int value="7564649" label="Sami Language"/>
-  <int value="7564650" label="Lule Sami"/>
-  <int value="7564654" label="Inari Sami"/>
-  <int value="7564659" label="Skolt Sami"/>
-  <int value="7564907" label="Soninke"/>
-  <int value="7565159" label="Sogdien"/>
-  <int value="7565166" label="Songhai"/>
-  <int value="7565934" label="Sranan Tongo"/>
-  <int value="7565938" label="Serer"/>
-  <int value="7566177" label="Nilo-Saharan Language"/>
-  <int value="7566201" label="Saho"/>
-  <int value="7566699" label="Sukuma"/>
-  <int value="7566707" label="Susu"/>
-  <int value="7566712" label="Sumerian"/>
-  <int value="7567202" label="Comorian"/>
-  <int value="7567715" label="Classical Syriac"/>
-  <int value="7567730" label="Syriac"/>
-  <int value="7627113" label="Tai Language"/>
-  <int value="7628141" label="Timne"/>
-  <int value="7628143" label="Teso"/>
-  <int value="7628146" label="Tereno"/>
-  <int value="7628148" label="Tetum"/>
-  <int value="7629159" label="Tigre"/>
-  <int value="7629174" label="Tiv"/>
-  <int value="7629676" label="Tokelau"/>
-  <int value="7629928" label="Klingon"/>
-  <int value="7629929" label="Tlingit"/>
-  <int value="7630184" label="Tamashek"/>
-  <int value="7630695" label="Nyasa Tonga"/>
-  <int value="7630953" label="Tok Pisin"/>
-  <int value="7631478" label="Taroko"/>
-  <int value="7631721" label="Tsimshian"/>
-  <int value="7632237" label="Tumbuka"/>
-  <int value="7632240" label="Tupi Language"/>
-  <int value="7632244" label="Altaic Language"/>
-  <int value="7632492" label="Tuvalu"/>
-  <int value="7632753" label="Tasawaq"/>
-  <int value="7633270" label="Tuvinian"/>
-  <int value="7633517" label="Central Morocco Tamazight"/>
-  <int value="7693421" label="Udmurt"/>
-  <int value="7694177" label="Ugaritic"/>
-  <int value="7695714" label="Umbundu"/>
-  <int value="7695972" label="Unknown Language"/>
-  <int value="7758185" label="Vai"/>
-  <int value="7761780" label="Votic"/>
-  <int value="7763310" label="Vunjo"/>
-  <int value="7823723" label="Wakashan Language"/>
-  <int value="7823724" label="Walamo"/>
-  <int value="7823730" label="Waray"/>
-  <int value="7823731" label="Washo"/>
-  <int value="7824750" label="Sorbian Language"/>
-  <int value="7889260" label="Kalmyk"/>
-  <int value="7892839" label="Soga"/>
-  <int value="7954799" label="Yao"/>
-  <int value="7954800" label="Yapese"/>
-  <int value="7958635" label="Yupik Language"/>
-  <int value="7959909" label="Cantonese"/>
-  <int value="8020336" label="Zapotec"/>
-  <int value="8020588" label="Blissymbols"/>
-  <int value="8021358" label="Zenaga"/>
-  <int value="8023652" label="Zande"/>
-  <int value="8025454" label="Zuni"/>
-  <int value="8026232" label="No linguistic content"/>
-  <int value="8026721" label="Zaza"/>
-</enum>
-
-<enum name="LastSettingParsed" type="int">
-  <obsolete>
-    Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for
-    diagnosing crash causes.
-  </obsolete>
-  <int value="0" label="Update Empty"/>
-  <int value="1" label="Update Parsed"/>
-  <int value="2" label="Update Invalid"/>
-  <int value="3" label="UpdateOrigins Empty"/>
-  <int value="4" label="UpdateOrigins Parsed"/>
-  <int value="5" label="UpdateOrigins Invalid"/>
-  <int value="6" label="HandleUpdateOrigins Empty"/>
-  <int value="7" label="HandleUpdateOrigins Parsed"/>
-  <int value="8" label="HandleUpdateOrigins Invalid"/>
-</enum>
-
-<enum name="LaunchErrorCodes" type="int">
-  <int value="0" label="SBOX_ALL_OK"/>
-  <int value="1" label="SBOX_ERROR_GENERIC"/>
-  <int value="2" label="SBOX_ERROR_BAD_PARAMS"/>
-  <int value="3" label="SBOX_ERROR_UNSUPPORTED"/>
-  <int value="4" label="SBOX_ERROR_NO_SPACE"/>
-  <int value="5" label="SBOX_ERROR_INVALID_IPC"/>
-  <int value="6" label="SBOX_ERROR_FAILED_IPC"/>
-  <int value="7" label="SBOX_ERROR_NO_HANDLE"/>
-  <int value="8" label="SBOX_ERROR_UNEXPECTED_CALL"/>
-  <int value="9" label="SBOX_ERROR_WAIT_ALREADY_CALLED"/>
-  <int value="10" label="SBOX_ERROR_CHANNEL_ERROR"/>
-  <int value="11" label="SBOX_ERROR_CANNOT_CREATE_DESKTOP"/>
-  <int value="12" label="SBOX_ERROR_CANNOT_CREATE_WINSTATION"/>
-  <int value="13" label="SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION"/>
-  <int value="14" label="SBOX_ERROR_INVALID_APP_CONTAINER"/>
-  <int value="15" label="SBOX_ERROR_INVALID_CAPABILITY"/>
-  <int value="16" label="SBOX_ERROR_CANNOT_INIT_APPCONTAINER"/>
-  <int value="17" label="SBOX_ERROR_PROC_THREAD_ATTRIBUTES"/>
-  <int value="18" label="SBOX_ERROR_CREATE_PROCESS"/>
-  <int value="19" label="SBOX_ERROR_DELEGATE_PRE_SPAWN"/>
-  <int value="20" label="SBOX_ERROR_ASSIGN_PROCESS_TO_JOB_OBJECT"/>
-  <int value="21" label="SBOX_ERROR_SET_THREAD_TOKEN"/>
-  <int value="22" label="SBOX_ERROR_GET_THREAD_CONTEXT"/>
-  <int value="23" label="SBOX_ERROR_DUPLICATE_TARGET_INFO"/>
-  <int value="24" label="SBOX_ERROR_SET_LOW_BOX_TOKEN"/>
-  <int value="25" label="SBOX_ERROR_CREATE_FILE_MAPPING"/>
-  <int value="26" label="SBOX_ERROR_DUPLICATE_SHARED_SECTION"/>
-  <int value="27" label="SBOX_ERROR_MAP_VIEW_OF_SHARED_SECTION"/>
-  <int value="28" label="SBOX_ERROR_APPLY_ASLR_MITIGATIONS"/>
-  <int value="29" label="SBOX_ERROR_SETUP_BASIC_INTERCEPTIONS"/>
-  <int value="30" label="SBOX_ERROR_SETUP_INTERCEPTION_SERVICE"/>
-  <int value="31" label="SBOX_ERROR_INITIALIZE_INTERCEPTIONS"/>
-  <int value="32" label="SBOX_ERROR_SETUP_NTDLL_IMPORTS"/>
-  <int value="33" label="SBOX_ERROR_SETUP_HANDLE_CLOSER"/>
-  <int value="34" label="SBOX_ERROR_CANNOT_GET_WINSTATION"/>
-  <int value="35" label="SBOX_ERROR_CANNOT_QUERY_WINSTATION_SECURITY"/>
-  <int value="36" label="SBOX_ERROR_CANNOT_GET_DESKTOP"/>
-  <int value="37" label="SBOX_ERROR_CANNOT_QUERY_DESKTOP_SECURITY"/>
-  <int value="38" label="SBOX_ERROR_CANNOT_SETUP_INTERCEPTION_CONFIG_BUFFER"/>
-  <int value="39" label="SBOX_ERROR_CANNOT_COPY_DATA_TO_CHILD"/>
-  <int value="40" label="SBOX_ERROR_CANNOT_SETUP_INTERCEPTION_THUNK"/>
-  <int value="41" label="SBOX_ERROR_CANNOT_RESOLVE_INTERCEPTION_THUNK"/>
-  <int value="42" label="SBOX_ERROR_CANNOT_WRITE_INTERCEPTION_THUNK"/>
-  <int value="43" label="SBOX_ERROR_CANNOT_FIND_BASE_ADDRESS"/>
-  <int value="1002" label="LAUNCH_RESULT_SUCCESS"/>
-  <int value="1003" label="LAUNCH_RESULT_FAILURE"/>
-</enum>
-
-<enum name="LaunchFromHomeScreen" type="int">
-  <int value="0" label="Launched as standalone web app"/>
-  <int value="1" label="Launched as a tab"/>
-</enum>
-
-<enum name="LaunchFromHomeScreenSource" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Menu item (deprecated in M57+)"/>
-  <int value="2" label="App banner"/>
-  <int value="3" label="Bookmark navigator widget"/>
-  <int value="4" label="Bookmark shortcut widget"/>
-  <int value="5" label="Notification"/>
-  <int value="6" label="Menu item (PWA)"/>
-  <int value="7" label="Menu item (standalone)"/>
-  <int value="8" label="Menu item (shortcut)"/>
-</enum>
-
-<enum name="LaunchIntentFlags" type="int">
-  <int value="0" label="No flags"/>
-  <int value="524288" label="NEW_DOCUMENT"/>
-  <int value="268435456" label="NEW_TASK"/>
-  <int value="268959744" label="NEW_TASK | NEW_DOCUMENT"/>
-</enum>
-
-<enum name="LazyCSSParseUsage" type="int">
-  <int value="0" label="&gt;= 0%"/>
-  <int value="1" label="&gt; 10%"/>
-  <int value="2" label="&gt; 25%"/>
-  <int value="3" label="&gt; 50%"/>
-  <int value="4" label="&gt; 75%"/>
-  <int value="5" label="&gt; 90%"/>
-  <int value="6" label="= 100%"/>
-</enum>
-
-<enum name="LevelDBCorruptionRestoreValue" type="int">
-  <int value="0" label="Database Delete Success"/>
-  <int value="1" label="Database Delete Failure"/>
-  <int value="2" label="Database Repair Success"/>
-</enum>
-
-<enum name="LevelDBCorruptionTypes" type="int">
-  <int value="0" label="other"/>
-  <int value="1" label="missing files"/>
-  <int value="2" label="log record too small"/>
-  <int value="3" label="corrupted internal key"/>
-  <int value="4" label="partial record"/>
-  <int value="5" label="missing start of fragmented record"/>
-  <int value="6" label="error in middle of record"/>
-  <int value="7" label="unknown record type"/>
-  <int value="8" label="truncated record at end"/>
-  <int value="9" label="bad record length"/>
-  <int value="10" label="VersionEdit"/>
-  <int value="11" label="FileReader invoked with unexpected value"/>
-  <int value="12" label="corrupted key"/>
-  <int value="13" label="CURRENT file does not end with newline"/>
-  <int value="14" label="no meta-nextfile entry"/>
-  <int value="15" label="no meta-lognumber entry"/>
-  <int value="16" label="no last-sequence-number entry"/>
-  <int value="17" label="malformed WriteBatch"/>
-  <int value="18" label="bad WriteBatch Put"/>
-  <int value="19" label="bad WriteBatch Delete"/>
-  <int value="20" label="unknown WriteBatch tag"/>
-  <int value="21" label="WriteBatch has wrong count"/>
-  <int value="22" label="bad entry in block"/>
-  <int value="23" label="bad block contents"/>
-  <int value="24" label="bad block handle"/>
-  <int value="25" label="truncated block read"/>
-  <int value="26" label="block checksum mismatch"/>
-  <int value="27" label="checksum mismatch"/>
-  <int value="28" label="corrupted compressed block contents"/>
-  <int value="29" label="bad block type"/>
-  <int value="30" label="bad magic number"/>
-  <int value="31" label="file is too short"/>
-</enum>
-
-<enum name="LevelDBDatabaseCorruptionRestoreValue" type="int">
-  <int value="0" label="Delete Success"/>
-  <int value="1" label="Delete Failure"/>
-  <int value="2" label="Repair Success"/>
-</enum>
-
-<enum name="LevelDBErrorCount" type="int">
-  <int value="1" label="Failure"/>
-</enum>
-
-<enum name="LevelDBErrorTypes" type="int">
-  <int value="0" label="NotFound"/>
-  <int value="1" label="Corruption"/>
-  <int value="2" label="IOError"/>
-  <int value="3" label="Other"/>
-</enum>
-
-<enum name="LevelDBIOErrorMethods" type="int">
-  <int value="0" label="SequentialFileRead"/>
-  <int value="1" label="SequentialFileSkip"/>
-  <int value="2" label="RandomAccessFileRead"/>
-  <int value="3" label="WritableFileAppend"/>
-  <int value="4" label="WritableFileClose"/>
-  <int value="5" label="WritableFileFlush"/>
-  <int value="6" label="WritableFileSync"/>
-  <int value="7" label="NewSequentialFile"/>
-  <int value="8" label="NewRandomAccessFile"/>
-  <int value="9" label="NewWritableFile"/>
-  <int value="10" label="DeleteFile"/>
-  <int value="11" label="CreateDir"/>
-  <int value="12" label="DeleteDir"/>
-  <int value="13" label="GetFileSize"/>
-  <int value="14" label="RenameFile"/>
-  <int value="15" label="LockFile"/>
-  <int value="16" label="UnlockFile"/>
-  <int value="17" label="GetTestDirectory"/>
-  <int value="18" label="NewLogger"/>
-  <int value="19" label="SyncParent"/>
-  <int value="20" label="GetChildren"/>
-  <int value="21" label="NewAppendableFile"/>
-</enum>
-
-<enum name="LevelDBStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Not Found"/>
-  <int value="2" label="Corruption"/>
-  <int value="3" label="Not Supported"/>
-  <int value="4" label="Invalid Argument"/>
-  <int value="5" label="IO Error"/>
-</enum>
-
-<enum name="LevelDBValueCorruptionDeleteValue" type="int">
-  <int value="0" label="Delete Success"/>
-  <int value="1" label="Delete Failure"/>
-</enum>
-
-<enum name="LibraryLoadFromApkStatus" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Not supported">obsolete</int>
-  <int value="2" label="Supported">obsolete</int>
-  <int value="3" label="Successful"/>
-  <int value="4" label="Used unpack library fallback">obsolete</int>
-  <int value="5" label="Used no map executable support fallback">obsolete</int>
-</enum>
-
-<enum name="LinkMonitorFailureType" type="int">
-  <int value="0" label="Local MAC Address Not Found"/>
-  <int value="1" label="Client Startup Failure"/>
-  <int value="2" label="Transmission Failure"/>
-  <int value="3" label="Failure Threshold Reached"/>
-</enum>
-
-<enum name="LinuxAudioIO" type="int">
-  <int value="0" label="PulseAudio"/>
-  <int value="1" label="ALSA"/>
-  <int value="2" label="Cras"/>
-</enum>
-
-<enum name="LinuxBackendUsage" type="int">
-  <int value="0" label="KDE_NOFLAG_PLAINTEXT"/>
-  <int value="1" label="KDE_NOFLAG_KWALLET"/>
-  <int value="2" label="KDE_KWALLETFLAG_PLAINTEXT"/>
-  <int value="3" label="KDE_KWALLETFLAG_KWALLET"/>
-  <int value="4" label="KDE_GNOMEFLAG_PLAINTEXT"/>
-  <int value="5" label="KDE_GNOMEFLAG_KEYRING"/>
-  <int value="6" label="KDE_GNOMEFLAG_LIBSECRET"/>
-  <int value="7" label="KDE_BASICFLAG_PLAINTEXT"/>
-  <int value="8" label="GNOME_NOFLAG_PLAINTEXT"/>
-  <int value="9" label="GNOME_NOFLAG_KEYRING"/>
-  <int value="10" label="GNOME_NOFLAG_LIBSECRET"/>
-  <int value="11" label="GNOME_GNOMEFLAG_PLAINTEXT"/>
-  <int value="12" label="GNOME_GNOMEFLAG_KEYRING"/>
-  <int value="13" label="GNOME_GNOMEFLAG_LIBSECRET"/>
-  <int value="14" label="GNOME_KWALLETFLAG_PLAINTEXT"/>
-  <int value="15" label="GNOME_KWALLETFLAG_KWALLET"/>
-  <int value="16" label="GNOME_BASICFLAG_PLAINTEXT"/>
-  <int value="17" label="OTHER_PLAINTEXT"/>
-  <int value="18" label="OTHER_KWALLET"/>
-  <int value="19" label="OTHER_KEYRING"/>
-  <int value="20" label="OTHER_LIBSECRET"/>
-</enum>
-
-<enum name="LinuxGlibcVersion" type="int">
-  <int value="0" label="Not Parseable"/>
-  <int value="1" label="Unknown"/>
-  <int value="2" label="2.11"/>
-  <int value="3" label="2.12"/>
-  <int value="4" label="2.13"/>
-  <int value="5" label="2.14"/>
-  <int value="6" label="2.15"/>
-  <int value="7" label="2.16"/>
-  <int value="8" label="2.17"/>
-  <int value="9" label="2.18"/>
-  <int value="10" label="2.19"/>
-  <int value="11" label="2.20"/>
-  <int value="12" label="2.21"/>
-  <int value="13" label="2.22"/>
-  <int value="14" label="2.23"/>
-  <int value="15" label="2.24"/>
-  <int value="16" label="2.25"/>
-  <int value="17" label="2.26"/>
-  <int value="18" label="2.27"/>
-  <int value="19" label="2.28"/>
-  <int value="20" label="2.29"/>
-</enum>
-
-<enum name="LinuxSandboxStatus" type="int">
-  <int value="0" label="none"/>
-  <int value="1" label="suid"/>
-  <int value="2" label="pidns"/>
-  <int value="3" label="suid, pidns"/>
-  <int value="4" label="netns"/>
-  <int value="5" label="suid, netns"/>
-  <int value="6" label="pidns, netns"/>
-  <int value="7" label="suid, pidns, netns"/>
-  <int value="8" label="seccomp-bpf"/>
-  <int value="9" label="suid, seccomp-bpf"/>
-  <int value="10" label="pidns, seccomp-bpf"/>
-  <int value="11" label="suid, pidns, seccomp-bpf"/>
-  <int value="12" label="netns, seccomp-bpf"/>
-  <int value="13" label="suid, netns, seccomp-bpf"/>
-  <int value="14" label="pidns, netns, seccomp-bpf"/>
-  <int value="15" label="suid, pidns, netns, seccomp-bpf"/>
-  <int value="16" label="yama"/>
-  <int value="17" label="suid, yama"/>
-  <int value="18" label="pidns, yama"/>
-  <int value="19" label="suid, pidns, yama"/>
-  <int value="20" label="netns, yama"/>
-  <int value="21" label="suid, netns, yama"/>
-  <int value="22" label="pidns, netns, yama"/>
-  <int value="23" label="suid, pidns, netns, yama"/>
-  <int value="24" label="seccomp-bpf, yama"/>
-  <int value="25" label="suid, seccomp-bpf, yama"/>
-  <int value="26" label="pidns, seccomp-bpf, yama"/>
-  <int value="27" label="suid, pidns, seccomp-bpf, yama"/>
-  <int value="28" label="netns, seccomp-bpf, yama"/>
-  <int value="29" label="suid, netns, seccomp-bpf, yama"/>
-  <int value="30" label="pidns, netns, seccomp-bpf, yama"/>
-  <int value="31" label="suid, pidns, netns, seccomp-bpf, yama"/>
-  <int value="32" label="seccomp-tsync"/>
-  <int value="33" label="suid, seccomp-tsync"/>
-  <int value="34" label="pidns, seccomp-tsync"/>
-  <int value="35" label="suid, pidns, seccomp-tsync"/>
-  <int value="36" label="netns, seccomp-tsync"/>
-  <int value="37" label="suid, netns, seccomp-tsync"/>
-  <int value="38" label="pidns, netns, seccomp-tsync"/>
-  <int value="39" label="suid, pidns, netns, seccomp-tsync"/>
-  <int value="40" label="seccomp-bpf, seccomp-tsync"/>
-  <int value="41" label="suid, seccomp-bpf, seccomp-tsync"/>
-  <int value="42" label="pidns, seccomp-bpf, seccomp-tsync"/>
-  <int value="43" label="suid, pidns, seccomp-bpf, seccomp-tsync"/>
-  <int value="44" label="netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="45" label="suid, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="46" label="pidns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="47" label="suid, pidns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="48" label="yama, seccomp-tsync"/>
-  <int value="49" label="suid, yama, seccomp-tsync"/>
-  <int value="50" label="pidns, yama, seccomp-tsync"/>
-  <int value="51" label="suid, pidns, yama, seccomp-tsync"/>
-  <int value="52" label="netns, yama, seccomp-tsync"/>
-  <int value="53" label="suid, netns, yama, seccomp-tsync"/>
-  <int value="54" label="pidns, netns, yama, seccomp-tsync"/>
-  <int value="55" label="suid, pidns, netns, yama, seccomp-tsync"/>
-  <int value="56" label="seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="57" label="suid, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="58" label="pidns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="59" label="suid, pidns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="60" label="netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="61" label="suid, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="62" label="pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="63" label="suid, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="64" label="userns"/>
-  <int value="65" label="suid, userns"/>
-  <int value="66" label="userns, pidns"/>
-  <int value="67" label="suid, userns, pidns"/>
-  <int value="68" label="userns, netns"/>
-  <int value="69" label="suid, userns, netns"/>
-  <int value="70" label="userns, pidns, netns"/>
-  <int value="71" label="suid, userns, pidns, netns"/>
-  <int value="72" label="userns, seccomp-bpf"/>
-  <int value="73" label="suid, userns, seccomp-bpf"/>
-  <int value="74" label="userns, pidns, seccomp-bpf"/>
-  <int value="75" label="suid, userns, pidns, seccomp-bpf"/>
-  <int value="76" label="userns, netns, seccomp-bpf"/>
-  <int value="77" label="suid, userns, netns, seccomp-bpf"/>
-  <int value="78" label="userns, pidns, netns, seccomp-bpf"/>
-  <int value="79" label="suid, userns, pidns, netns, seccomp-bpf"/>
-  <int value="80" label="userns, yama"/>
-  <int value="81" label="suid, userns, yama"/>
-  <int value="82" label="userns, pidns, yama"/>
-  <int value="83" label="suid, userns, pidns, yama"/>
-  <int value="84" label="userns, netns, yama"/>
-  <int value="85" label="suid, userns, netns, yama"/>
-  <int value="86" label="userns, pidns, netns, yama"/>
-  <int value="87" label="suid, userns, pidns, netns, yama"/>
-  <int value="88" label="userns, seccomp-bpf, yama"/>
-  <int value="89" label="suid, userns, seccomp-bpf, yama"/>
-  <int value="90" label="userns, pidns, seccomp-bpf, yama"/>
-  <int value="91" label="suid, userns, pidns, seccomp-bpf, yama"/>
-  <int value="92" label="userns, netns, seccomp-bpf, yama"/>
-  <int value="93" label="suid, userns, netns, seccomp-bpf, yama"/>
-  <int value="94" label="userns, pidns, netns, seccomp-bpf, yama"/>
-  <int value="95" label="suid, userns, pidns, netns, seccomp-bpf, yama"/>
-  <int value="96" label="userns, seccomp-tsync"/>
-  <int value="97" label="suid, userns, seccomp-tsync"/>
-  <int value="98" label="userns, pidns, seccomp-tsync"/>
-  <int value="99" label="suid, userns, pidns, seccomp-tsync"/>
-  <int value="100" label="userns, netns, seccomp-tsync"/>
-  <int value="101" label="suid, userns, netns, seccomp-tsync"/>
-  <int value="102" label="userns, pidns, netns, seccomp-tsync"/>
-  <int value="103" label="suid, userns, pidns, netns, seccomp-tsync"/>
-  <int value="104" label="userns, seccomp-bpf, seccomp-tsync"/>
-  <int value="105" label="suid, userns, seccomp-bpf, seccomp-tsync"/>
-  <int value="106" label="userns, pidns, seccomp-bpf, seccomp-tsync"/>
-  <int value="107" label="suid, userns, pidns, seccomp-bpf, seccomp-tsync"/>
-  <int value="108" label="userns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="109" label="suid, userns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="110" label="userns, pidns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="111"
-      label="suid, userns, pidns, netns, seccomp-bpf, seccomp-tsync"/>
-  <int value="112" label="userns, yama, seccomp-tsync"/>
-  <int value="113" label="suid, userns, yama, seccomp-tsync"/>
-  <int value="114" label="userns, pidns, yama, seccomp-tsync"/>
-  <int value="115" label="suid, userns, pidns, yama, seccomp-tsync"/>
-  <int value="116" label="userns, netns, yama, seccomp-tsync"/>
-  <int value="117" label="suid, userns, netns, yama, seccomp-tsync"/>
-  <int value="118" label="userns, pidns, netns, yama, seccomp-tsync"/>
-  <int value="119" label="suid, userns, pidns, netns, yama, seccomp-tsync"/>
-  <int value="120" label="userns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="121" label="suid, userns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="122" label="userns, pidns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="123"
-      label="suid, userns, pidns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="124" label="userns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="125"
-      label="suid, userns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="126"
-      label="userns, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="127"
-      label="suid, userns, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
-  <int value="2147483648" label="Invalid"/>
-</enum>
-
-<enum name="LinuxWindowManagerName" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Blackbox"/>
-  <int value="2" label="Chrome OS"/>
-  <int value="3" label="Compiz"/>
-  <int value="4" label="Enlightment"/>
-  <int value="5" label="IceWM"/>
-  <int value="6" label="KWin"/>
-  <int value="7" label="Metacity"/>
-  <int value="8" label="Muffin"/>
-  <int value="9" label="Mutter"/>
-  <int value="10" label="Openbox"/>
-  <int value="11" label="Xfwm4"/>
-  <int value="12" label="Awesome"/>
-  <int value="13" label="i3"/>
-  <int value="14" label="Ion3"/>
-  <int value="15" label="Matchbox"/>
-  <int value="16" label="Notion"/>
-  <int value="17" label="Qtile"/>
-  <int value="18" label="Ratpoison"/>
-  <int value="19" label="StumpWM"/>
-  <int value="20" label="wmii"/>
-  <int value="21" label="Fluxbox"/>
-  <int value="22" label="Xmonad"/>
-  <int value="23" label="Unnamed"/>
-</enum>
-
-<enum name="LoadLibraryResultCategory" type="int">
-  <int value="0" label="LoadLibraryExW Succeeded"/>
-  <int value="1" label="LoadLibraryExW Fail, LoadLibraryW Succeeded"/>
-  <int value="2" label="LoadLibraryExW Fail, LoadLibraryW Fail"/>
-  <int value="3" label="LoadLibraryExW Unavailable, LoadLibraryW Succeeded"/>
-  <int value="4" label="LoadLibraryExW Unavailable, LoadLibraryW Fail"/>
-</enum>
-
-<enum name="LoadType" type="int">
-  <int value="0" label="UNDEFINED_LOAD">Not yet initialized</int>
-  <int value="1" label="RELOAD">User pressed reload</int>
-  <int value="2" label="HISTORY_LOAD">Back or forward</int>
-  <int value="3" label="NORMAL_LOAD">User entered URL, or omnibox search</int>
-  <int value="4" label="LINK_LOAD">(deprecated) Included next 4 categories</int>
-  <int value="5" label="LINK_LOAD_NORMAL">Commonly following of link</int>
-  <int value="6" label="LINK_LOAD_RELOAD">JS/link directed reload</int>
-  <int value="7" label="LINK_LOAD_CACHE_STALE_OK">
-    back/forward or encoding change
-  </int>
-  <int value="8" label="LINK_LOAD_CACHE_ONLY">
-    Allow stale data (avoid doing a re-post)
-  </int>
-  <int value="9" label="PRERENDER_LOAD">Speculative prerendering of a page</int>
-</enum>
-
-<enum name="LocalRendererSinkStates" type="int">
-  <int value="0" label="SinkStarted"/>
-  <int value="1" label="SinkNeverStarted"/>
-</enum>
-
-<enum name="LocalStorageOpenError" type="int">
-  <int value="0" label="Directory open failed"/>
-  <int value="1" label="Database open failed"/>
-  <int value="2" label="Invalid schema version"/>
-  <int value="3" label="Error reading schema version"/>
-</enum>
-
-<enum name="LockScreenProgress" type="int">
-  <int value="0" label="Start screen lock"/>
-  <int value="1" label="Enter password correctly"/>
-  <int value="2" label="Choose pin or password"/>
-  <int value="3" label="Enter pin"/>
-  <int value="4" label="Confirm pin"/>
-</enum>
-
-<enum name="LoginConsumerWhitelist" type="int">
-  <int value="0" label="ANY_USER_ALLOWED">Any user can sign in</int>
-  <int value="1" label="ONLY_WHITELISTED_ALLOWED">Whitelisted users only</int>
-</enum>
-
-<enum name="LoginCustomFlags" type="int">
-<!--
-Values in LoginCustomFlags are:  value=(uint32_t)MD5(label).
-This enum is verified by AboutFlagsHistogramTest unit test.
-To add a new entry, add it with any unique value and run test to compute valid
-value.
-Don't remove entries when removing a flag, they are still used to decode data
-from previous Chrome versions.
--->
-
-  <summary>Chrome flags that lead to chrome restart on ChromeOS.</summary>
-  <int value="-2146613579" label="V8Future:disabled"/>
-  <int value="-2143328006"
-      label="enable-fill-on-account-select-no-highlighting"/>
-  <int value="-2143113994" label="enable-ephemeral-apps-in-webstore"/>
-  <int value="-2134333982" label="ShowArcFilesApp:enabled"/>
-  <int value="-2134244069" label="HttpFormWarning:enabled"/>
-  <int value="-2132591642" label="enable-input-view"/>
-  <int value="-2122048316"
-      label="DisplayPersistenceToggleInPermissionPrompts:enabled"/>
-  <int value="-2119827860" label="ash-disable-maximize-mode-window-backdrop"/>
-  <int value="-2119530966" label="enable-webrtc-dtls12"/>
-  <int value="-2119493239" label="enable-app-info-dialog-mac"/>
-  <int value="-2117201726" label="disable-gpu-rasterization"/>
-  <int value="-2114831248" label="disable-new-ntp"/>
-  <int value="-2113705745"
-      label="CrossOriginMediaPlaybackRequiresUserGesture:enabled"/>
-  <int value="-2099035488" label="enable-data-reduction-proxy-bypass-warning"/>
-  <int value="-2098610409" label="disable-lcd-text"/>
-  <int value="-2097515669" label="disable-cast"/>
-  <int value="-2091404586" label="TabStripKeyboardFocus:enabled"/>
-  <int value="-2090484194" label="ContextualSearchUrlActions:disabled"/>
-  <int value="-2083195884" label="enable-firewall-hole-punching"/>
-  <int value="-2082042818"
-      label="AutofillCreditCardLastUsedDateDisplay:enabled"/>
-  <int value="-2077268643" label="disable-device-enumeration"/>
-  <int value="-2075870708" label="MediaRemotingEncrypted:disabled"/>
-  <int value="-2075807193" label="enable-webusb-on-any-origin"/>
-  <int value="-2075725205" label="disable-new-zip-unpacker"/>
-  <int value="-2067166422" label="enable-slimming-paint-v2"/>
-  <int value="-2063352474" label="enable-new-task-manager"/>
-  <int value="-2063014275" label="enable-web-bluetooth"/>
-  <int value="-2062872298" label="market-url-for-testing"/>
-  <int value="-2062373123" label="WebPaymentsModifiers:enabled"/>
-  <int value="-2058656447" label="ContextualSearchUrlActions:enabled"/>
-  <int value="-2048732429" label="enable-alternative-services"/>
-  <int value="-2048679945" label="NTPOfflinePageDownloadSuggestions:disabled"/>
-  <int value="-2047832738" label="enable-system-timezone-automatic-detection"/>
-  <int value="-2047822258" label="enable-avfoundation"/>
-  <int value="-2043128632" label="enable-tab-switcher-in-document-mode"/>
-  <int value="-2040115518" label="load-media-router-component-extension"/>
-  <int value="-2029912304" label="StaleWhileRevalidate2:enabled"/>
-  <int value="-2025367104" label="enable-material-design-ntp"/>
-  <int value="-2020721975" label="smart-virtual-keyboard"/>
-  <int value="-2020024440" label="scroll-end-effect"/>
-  <int value="-2017953534" label="enable-hosted-app-shim-creation"/>
-  <int value="-2013551096" label="ViewsSimplifiedFullscreenUI:disabled"/>
-  <int value="-2009622663" label="WebRtcHWH264Encoding:enabled"/>
-  <int value="-2008272679" label="disable-webrtc-hw-encoding"/>
-  <int value="-2005089558" label="BackgroundVideoTrackOptimization:disabled"/>
-  <int value="-2003354337"
-      label="enable-search-button-in-omnibox-for-str-or-iip"/>
-  <int value="-1999892428" label="force-ui-direction"/>
-  <int value="-1998927516" label="enable-md-settings"/>
-  <int value="-1989747818" label="TabStripKeyboardFocus:disabled"/>
-  <int value="-1985025593" label="file-manager-enable-new-gallery"/>
-  <int value="-1980328793" label="trace-upload-url"/>
-  <int value="-1972383451" label="disable-pinch"/>
-  <int value="-1972219399" label="NTPSaveToOffline:enabled"/>
-  <int value="-1971086581" label="print-scaling"/>
-  <int value="-1963427770" label="EmojiHandwritingVoiceInput:disabled"/>
-  <int value="-1963402827" label="enable-topchrome-md"/>
-  <int value="-1961648833" label="show_summary"/>
-  <int value="-1956349722" label="disable-smooth-scrolling"/>
-  <int value="-1948540128" label="disable-webrtc-hw-encoding (deprecated)"/>
-  <int value="-1946595906" label="enable-push-api-background-mode"/>
-  <int value="-1943507605" label="enable-new-video-renderer"/>
-  <int value="-1941852572" label="floating-virtual-keyboard"/>
-  <int value="-1940806558" label="enable-syncfs-directory-operation"/>
-  <int value="-1940291343" label="SpeculativeResourcePrefetching:enabled"/>
-  <int value="-1938263248" label="enable-extension-info-dialog"/>
-  <int value="-1937077699" label="http-form-warning"/>
-  <int value="-1934673791" label="gl-composited-texture-quad-border"/>
-  <int value="-1930720286" label="nacl-debug-mask"/>
-  <int value="-1928198763" label="enable-async-dns"/>
-  <int value="-1925117279" label="disable-quic-https"/>
-  <int value="-1915854488" label="enable-offline-pages"/>
-  <int value="-1913801713"
-      label="UploadCrashReportsUsingJobScheduler:disabled"/>
-  <int value="-1912999136" label="enable-automatic-password-saving:enabled"/>
-  <int value="-1911153473" label="enable-easy-signin"/>
-  <int value="-1907342706" label="ReadItLaterInMenu:disabled"/>
-  <int value="-1892555086" label="disable-compositor-animation-timelines"/>
-  <int value="-1892000374" label="SeccompSandboxAndroid:enabled"/>
-  <int value="-1888273969" label="tab-capture-upscale-quality"/>
-  <int value="-1887053262"
-      label="enable-zero-suggest-most-visited-without-serp"/>
-  <int value="-1882330924" label="NTPArticleSuggestions:enabled"/>
-  <int value="-1880355454" label="disable-topchrome-md"/>
-  <int value="-1876881908"
-      label="disable-infobar-for-protected-media-identifier"/>
-  <int value="-1874908826" label="enable-instant-search-clicks"/>
-  <int value="-1874141108" label="NewOmniboxAnswerTypes:enabled"/>
-  <int value="-1872989945" label="enable-webview-based-signin"/>
-  <int value="-1872867546" label="EnumerateAudioDevices:disabled"/>
-  <int value="-1870961970" label="enable-filemanager-mtp"/>
-  <int value="-1869845022" label="force-show-update-menu-item"/>
-  <int value="-1867382602" label="WebRTC-H264WithOpenH264FFmpeg:enabled"/>
-  <int value="-1867342522" label="MaterialDesignHistory:enabled"/>
-  <int value="-1861814223" label="MidiManagerDynamicInstantiation:enabled"/>
-  <int value="-1856902397" label="LoadingWithMojo:enabled"/>
-  <int value="-1849706663" label="enable-password-force-saving:disabled"/>
-  <int value="-1847835522" label="disable-touch-adjustment"/>
-  <int value="-1847776781"
-      label="enable-loading-ipc-optimization-for-small-resources"/>
-  <int value="-1838482444" label="disable-settings-window"/>
-  <int value="-1835975804" label="disable-offline-auto-reload"/>
-  <int value="-1833149810" label="enable-accessibility-tab-switcher"/>
-  <int value="-1832575380" label="show-saved-copy"/>
-  <int value="-1832221649" label="disable-out-of-process-pac"/>
-  <int value="-1821058653" label="enable-delay-agnostic-aec"/>
-  <int value="-1812579951" label="ContentSuggestionsCategoryRanker:enabled"/>
-  <int value="-1811394154" label="disable-webrtc-hw-vp8-encoding"/>
-  <int value="-1810294310" label="AndroidPaymentApps:enabled"/>
-  <int value="-1804485171" label="disable-fullscreen-tab-detaching"/>
-  <int value="-1802502753" label="enable-manual-password-generation:enabled"/>
-  <int value="-1798337879" label="enable-md-downloads"/>
-  <int value="-1797739460" label="brotli-encoding:disabled"/>
-  <int value="-1790227231" label="show-autofill-signatures"/>
-  <int value="-1772172557" label="enable-osk-overscroll"/>
-  <int value="-1767470652" label="out-of-process-pdf"/>
-  <int value="-1751928267" label="disable-icon-ntp"/>
-  <int value="-1746767834" label="ssl-interstitial-v2-gray"/>
-  <int value="-1740519217" label="disable-software-rasterizer"/>
-  <int value="-1735643253" label="enable-display-list-2d-canvas"/>
-  <int value="-1732561795" label="ConsistentOmniboxGeolocation:enabled"/>
-  <int value="-1729926412" label="enable-webusb-notifications"/>
-  <int value="-1725507605" label="enable-web-midi"/>
-  <int value="-1719833926" label="disable-answers-in-suggest"/>
-  <int value="-1716654100" label="tab-capture-downscale-quality"/>
-  <int value="-1714128884" label="disable-launcher-search-provider-api"/>
-  <int value="-1711751318" label="enable-data-reduction-proxy-lo-fi-preview"/>
-  <int value="-1703709912" label="enable-new-ntp"/>
-  <int value="-1703308540" label="disable-webaudio"/>
-  <int value="-1696366449" label="disable-permissions-bubbles"/>
-  <int value="-1692384483" label="disambiguate-autofill-server-name-types"/>
-  <int value="-1691892152" label="SafeSearchUrlReporting:disabled"/>
-  <int value="-1691668194" label="enable-new-bookmark-apps"/>
-  <int value="-1691281364" label="enable-notification-action-icons"/>
-  <int value="-1670137340"
-      label="OptimizeLoadingIPCForSmallResources:disabled"/>
-  <int value="-1669486359" label="ImportantSitesInCBD:enabled"/>
-  <int value="-1663410466" label="top-document-isolation"/>
-  <int value="-1663125441" label="OptInImeMenu:enabled"/>
-  <int value="-1662646099" label="NTPOfflinePageSuggestions:enabled"/>
-  <int value="-1662447331" label="wake-on-packets"/>
-  <int value="-1660972490" label="gpu-rasterization-msaa-sample-count"/>
-  <int value="-1655535052" label="enable-pointer-events"/>
-  <int value="-1654344175" label="disable-extension-info-dialog"/>
-  <int value="-1649778035" label="disable-clear-browsing-data-counters"/>
-  <int value="-1648216169" label="NewOmniboxAnswerTypes:disabled"/>
-  <int value="-1634154256" label="ZeroSuggestRedirectToChrome:enabled"/>
-  <int value="-1631329950" label="ssl-version-max"/>
-  <int value="-1630419335" label="enable-download-notification"/>
-  <int value="-1624854957" label="enable-es3-apis"/>
-  <int value="-1620568042" label="FeaturePolicy:disabled"/>
-  <int value="-1619757314" label="touch-scrolling-mode"/>
-  <int value="-1618707999" label="enable-webfonts-intervention-v2"/>
-  <int value="-1617183455" label="OfflineRecentPages:disabled"/>
-  <int value="-1616855537" label="enable-manual-password-generation:disabled"/>
-  <int value="-1614912400" label="enable-link-disambiguation-popup"/>
-  <int value="-1605567628" label="disable-overlay-scrollbar"/>
-  <int value="-1604051051" label="SpecialLocale:disabled"/>
-  <int value="-1599538279" label="enable-md-policy-page"/>
-  <int value="-1596559650" label="max-tiles-for-interest-area"/>
-  <int value="-1586642651" label="MaterialDesignExtensions:disabled"/>
-  <int value="-1583728573" label="AutofillCreditCardSigninPromo:disabled"/>
-  <int value="-1581724231" label="ModalPermissionPrompts:enabled"/>
-  <int value="-1578295753" label="UserMediaScreenCapturing:disabled"/>
-  <int value="-1575554415" label="AndroidPaymentAppsFilter:enabled"/>
-  <int value="-1572010356" label="enable-privet-v3"/>
-  <int value="-1571841513" label="enable-devtools-experiments"/>
-  <int value="-1559789642" label="RunAllFlashInAllowMode:enabled"/>
-  <int value="-1557527869" label="LoadingWithMojo:disabled"/>
-  <int value="-1553477903" label="ash-disable-text-filtering-in-overview-mode"/>
-  <int value="-1546903171" label="enable-touch-drag-drop"/>
-  <int value="-1544248549" label="ArcUseAuthEndpoint:enabled"/>
-  <int value="-1543316040"
-      label="DisplayPersistenceToggleInPermissionPrompts:disabled"/>
-  <int value="-1536293422" label="SharedArrayBuffer:enabled"/>
-  <int value="-1536242739" label="security-chip"/>
-  <int value="-1514943439" label="ash-enable-swipe-to-close-in-overview-mode"/>
-  <int value="-1514611301" label="enable-data-reduction-proxy-bypass-warnings"/>
-  <int value="-1512656386" label="disable-new-audio-rendering-mixing-strategy"/>
-  <int value="-1510839574" label="disable-sync-synced-notifications"/>
-  <int value="-1504305449" label="NTPPhysicalWebPageSuggestions:enabled"/>
-  <int value="-1497338981" label="disable-accelerated-overflow-scroll"/>
-  <int value="-1491417046" label="enable-fullscreen-toolbar-reveal"/>
-  <int value="-1490298774" label="enable-captive-portal-bypass-proxy-option"/>
-  <int value="-1488744539" label="QuickUnlockFingerprint:enabled"/>
-  <int value="-1487243228" label="NewUsbBackend:disabled"/>
-  <int value="-1482685863" label="enable-request-tablet-site"/>
-  <int value="-1480926949" label="MaterialDesignBookmarks:enabled"/>
-  <int value="-1478876902" label="disable-permission-action-reporting"/>
-  <int value="-1473668019" label="token-binding:disabled"/>
-  <int value="-1473136627" label="enable-web-payments"/>
-  <int value="-1467332609" label="tab-management-experiment-type-anise"/>
-  <int value="-1466990325" label="CrosCompUpdates:enabled"/>
-  <int value="-1460462432" label="disable-media-source"/>
-  <int value="-1456004000" label="VrShell:disabled"/>
-  <int value="-1443796945" label="OfflinePagesSharing:disabled"/>
-  <int value="-1440152291" label="disable-gesture-typing"/>
-  <int value="-1438279809" label="GamepadExtensions:disabled"/>
-  <int value="-1433719718" label="enable-webrtc-stun-origin"/>
-  <int value="-1433087548" label="enable-app-install-alerts"/>
-  <int value="-1426034869" label="NoCreditCardAbort:enabled"/>
-  <int value="-1419788257" label="enable-experimental-hotwording"/>
-  <int value="-1416754663" label="enable-mac-views-native-app-windows"/>
-  <int value="-1411003295" label="disable-encrypted-media"/>
-  <int value="-1409643943" label="enable-child-account-detection"/>
-  <int value="-1408288176" label="enable-account-consistency"/>
-  <int value="-1399753480" label="disable-harfbuzz-rendertext"/>
-  <int value="-1399419572" label="enable-app-list"/>
-  <int value="-1396974542" label="UserMediaScreenCapturing:enabled"/>
-  <int value="-1392562498" label="disable-origin-chip"/>
-  <int value="-1386966873" label="disable-mac-views-native-app-windows"/>
-  <int value="-1377186702" label="DesktopIOSPromotion:disabled"/>
-  <int value="-1375111024" label="enable-fixed-position-compositing"/>
-  <int value="-1365503870" label="enable-simplified-fullscreen-ui"/>
-  <int value="-1363709707" label="MaterialDesignHistory:disabled"/>
-  <int value="-1358669137" label="enable-supervised-user-blacklist"/>
-  <int value="-1357655121" label="enable-iframe-based-signin"/>
-  <int value="-1349872906"
-      label="disallow-autofill-sync-credential-for-reauth"/>
-  <int value="-1349532167" label="enable-wifi-credential-sync"/>
-  <int value="-1346722635" label="gesture-selection"/>
-  <int value="-1341092934" label="enable-accelerated-overflow-scroll"/>
-  <int value="-1340055960" label="enable-streamlined-hosted-apps"/>
-  <int value="-1337185440" label="enable-webvr"/>
-  <int value="-1334327410" label="ash-enable-touch-view-testing"/>
-  <int value="-1327676774" label="disable-accelerated-mjpeg-decode"/>
-  <int value="-1322882747" label="disable-datasaver-prompt"/>
-  <int value="-1319688939" label="ignore-gpu-blacklist"/>
-  <int value="-1310737697" label="MaterialDesignSettings:enabled"/>
-  <int value="-1302904242" label="enable-navigation-tracing"/>
-  <int value="-1289678848" label="SystemDownloadManager:enabled"/>
-  <int value="-1285021473" label="save-page-as-mhtml"/>
-  <int value="-1276912933" label="enable-quick-unlock-pin"/>
-  <int value="-1271563519" label="enable-appcontainer"/>
-  <int value="-1269084216" label="ash-md"/>
-  <int value="-1268836676" label="disable-out-of-process-pdf"/>
-  <int value="-1267958145" label="disable-pdf-material-ui"/>
-  <int value="-1254070521" label="enable-slimming-paint-invalidation"/>
-  <int value="-1251411236" label="disable-new-md-input-view"/>
-  <int value="-1246840031" label="OptInImeMenu:disabled"/>
-  <int value="-1241747717" label="enable-android-password-link"/>
-  <int value="-1235586511" label="enable-datasaver-prompt"/>
-  <int value="-1218608640" label="disable-offline-load-stale-cache"/>
-  <int value="-1216837777" label="clear-data-reduction-proxy-data-savings"/>
-  <int value="-1212855900" label="enable-all-bookmarks-view"/>
-  <int value="-1212273428" label="enable-experimental-app-list"/>
-  <int value="-1212167260" label="disable-app-window-cycling"/>
-  <int value="-1208501269" label="AutofillScanThemeDialog:enabled"/>
-  <int value="-1205790119" label="CredentialManagementAPI:enabled"/>
-  <int value="-1203955801" label="enable-password-change-support:disabled"/>
-  <int value="-1203742042" label="enable-gesture-selection"/>
-  <int value="-1201183153" label="enable-centered-app-list"/>
-  <int value="-1197035323" label="ZeroSuggestRedirectToChrome:disabled"/>
-  <int value="-1184904651" label="enable-npapi"/>
-  <int value="-1184480269" label="LsdPermissionPrompt:enabled"/>
-  <int value="-1177802205" label="enable-hosted-app-quit-notification"/>
-  <int value="-1176748003"
-      label="FramebustingNeedsSameOriginOrUserGesture:disabled"/>
-  <int value="-1176493523" label="enable-md-extensions"/>
-  <int value="-1172572865" label="NTPShowGoogleGInOmnibox:enabled"/>
-  <int value="-1172204005" label="enable-offline-auto-reload-visible-only"/>
-  <int value="-1161409696" label="MediaRemotingEncrypted:enabled"/>
-  <int value="-1160026273" label="enable-web-notification-custom-layouts"/>
-  <int value="-1159563774" label="enable-accessibility-script-injection"/>
-  <int value="-1158993534" label="PrintScaling:enabled"/>
-  <int value="-1151766565" label="enable-fullscreen-tab-detaching"/>
-  <int value="-1137442543" label="enable-slimming-paint"/>
-  <int value="-1136627751" label="ignore-autocomplete-off-autofill"/>
-  <int value="-1136509631" label="ssl-interstitial-v1"/>
-  <int value="-1132704128" label="AndroidPaymentAppsFilter:disabled"/>
-  <int value="-1127996427" label="enable-files-details-panel"/>
-  <int value="-1125133283" label="disable-threaded-scrolling"/>
-  <int value="-1119700637" label="ui-disable-partial-swap"/>
-  <int value="-1107762575" label="enable-data-reduction-proxy-config-client"/>
-  <int value="-1102212525" label="enable-tcp-fastopen"/>
-  <int value="-1099142083" label="V8Ignition:disabled"/>
-  <int value="-1084055006" label="disable-web-notification-custom-layouts"/>
-  <int value="-1082302549" label="scan-cards-in-web-payments"/>
-  <int value="-1078093206" label="ash-debug-shortcuts"/>
-  <int value="-1077752943" label="enable-password-generation"/>
-  <int value="-1075156797" label="enable-brotli"/>
-  <int value="-1075089382" label="enable-physical-web"/>
-  <int value="-1073479583" label="ShowArcFilesApp:disabled"/>
-  <int value="-1067635248" label="SpeculativeResourcePrefetching:disabled"/>
-  <int value="-1062119671" label="enable-password-force-saving"/>
-  <int value="-1056310158" label="disable-memory-pressure-chromeos"/>
-  <int value="-1052782474" label="enable-cloud-devices"/>
-  <int value="-1052415111" label="malware-interstitial-v2"/>
-  <int value="-1052219252" label="disable-captive-portal-bypass-proxy"/>
-  <int value="-1045900007" label="NoCreditCardAbort:disabled"/>
-  <int value="-1041650038" label="enable-forced-migration-to-tabbed-mode"/>
-  <int value="-1039889738" label="NativeNotifications:enabled"/>
-  <int value="-1039555838" label="GamepadExtensions:enabled"/>
-  <int value="-1034344165" label="V8NoTurbo:disabled"/>
-  <int value="-1033738911" label="enable-mac-views-dialogs"/>
-  <int value="-1028733699" label="MacViewsWebUIDialogs:disabled"/>
-  <int value="-1022971520" label="enable-search-button-in-omnibox-for-str"/>
-  <int value="-1020450980" label="gesture-deletion"/>
-  <int value="-1016202433" label="disable-add-to-shelf"/>
-  <int value="-1015006759" label="ImportantSitesInCBD:disabled"/>
-  <int value="-998255750" label="ExperimentalKeyboardLockUI:enabled"/>
-  <int value="-996673716" label="enable-web-app-frame"/>
-  <int value="-980260493" label="NTPSnippets:disabled"/>
-  <int value="-979313250" label="enable-google-branded-context-menu"/>
-  <int value="-979057409" label="enable-seccomp-filter-sandbox"/>
-  <int value="-979034258" label="disable-ntp-other-sessions-menu"/>
-  <int value="-978700508" label="disable-simplified-fullscreen-ui"/>
-  <int value="-977476498" label="disable-eol-notification"/>
-  <int value="-972737445" label="ArcUseAuthEndpoint:disabled"/>
-  <int value="-972425050" label="gesture-editing"/>
-  <int value="-968010468" label="SharedArrayBuffer:disabled"/>
-  <int value="-964676765" label="enable-accelerated-mjpeg-decode"/>
-  <int value="-951394314" label="top-chrome-md"/>
-  <int value="-950793721" label="TranslateUI2016Q2:disabled"/>
-  <int value="-949178861" label="enable-new-avatar-menu"/>
-  <int value="-945806012" label="DownloadsUi:enabled"/>
-  <int value="-938178614" label="enable-suggestions-with-substring-match"/>
-  <int value="-933316841" label="enable-permissions-blacklist"/>
-  <int value="-926422468" label="disable-embedded-shared-worker"/>
-  <int value="-918900957" label="AutofillCreditCardAssist:disabled"/>
-  <int value="-918618075" label="enable-service-worker"/>
-  <int value="-914210146" label="enable-web-based-signin"/>
-  <int value="-912456561" label="MidiManagerWinrt:enabled"/>
-  <int value="-908421850" label="PointerEvent:enabled"/>
-  <int value="-907234795" label="NewAudioRenderingMixingStrategy:disabled"/>
-  <int value="-899334103" label="disable-fast-text-autosizing"/>
-  <int value="-898594349" label="ash-enable-stable-overview-order"/>
-  <int value="-898499262" label="ImprovedA2HS:enabled"/>
-  <int value="-898005938" label="disable-pinch-virtual-viewport"/>
-  <int value="-894214299" label="fill-on-account-select:enabled"/>
-  <int value="-891856063" label="MidiManagerAndroid:enabled"/>
-  <int value="-885601782" label="enable-contextual-search"/>
-  <int value="-884864731" label="WebPaymentsSingleAppUiSkip:enabled"/>
-  <int value="-876148583" label="ArcBootCompletedBroadcast:disabled"/>
-  <int value="-867087281" label="enable-virtual-keyboard"/>
-  <int value="-864266073" label="cros-regions-mode"/>
-  <int value="-864205629" label="enable-offline-load-stale-cache"/>
-  <int value="-861678473" label="disable-offer-upload-credit-cards"/>
-  <int value="-861343291" label="ChromeHome:disabled"/>
-  <int value="-856915246" label="enable-new-audio-rendering-mixing-strategy"/>
-  <int value="-856016114" label="NTPOfflinePages:disabled"/>
-  <int value="-855130893" label="enable-touch-calibration-setting"/>
-  <int value="-853594220" label="disable-new-avatar-menu"/>
-  <int value="-844537521" label="HttpFormWarning:disabled"/>
-  <int value="-842438090" label="enable-md-feedback"/>
-  <int value="-836123854" label="wallet-service-use-sandbox"/>
-  <int value="-835672415" label="PointerEventV1SpecCapturing:disabled"/>
-  <int value="-834661509" label="ModalPermissionPrompts:disabled"/>
-  <int value="-825942229" label="tab-management-experiment-type-elderberry"/>
-  <int value="-823165021" label="MaterialDesignUserMenu:enabled"/>
-  <int value="-820041355" label="enable-transition-compositing"/>
-  <int value="-816984237" label="OfflinePagesAsyncDownload:enabled"/>
-  <int value="-814097014" label="disable-session-crashed-bubble"/>
-  <int value="-813474479" label="site-per-process"/>
-  <int value="-812461825" label="AutofillCreditCardSigninPromo:enabled"/>
-  <int value="-802348444" label="disable-site-engagement-service"/>
-  <int value="-798187384" label="try-supported-channel-layouts"/>
-  <int value="-795600188" label="disable-async-dns"/>
-  <int value="-780798969" label="disable-single-click-autofill"/>
-  <int value="-770319039" label="enable-touch-editing"/>
-  <int value="-763759697" label="enable-audio-support-for-desktop-share"/>
-  <int value="-759830869" label="enable-tab-discarding"/>
-  <int value="-749048160" label="enable-panels"/>
-  <int value="-747463111" label="ContentSuggestionsNotifications:disabled"/>
-  <int value="-746328467" label="ExpensiveBackgroundTimerThrottling:disabled"/>
-  <int value="-744159181" label="disable-spdy-proxy-dev-auth-origin"/>
-  <int value="-743103250" label="enable-linkable-ephemeral-apps"/>
-  <int value="-741806604" label="DownloadsUi:disabled"/>
-  <int value="-723224470" label="enable-password-force-saving:enabled"/>
-  <int value="-716953514" label="disable-password-separated-signin-flow"/>
-  <int value="-714710496" label="VideoFullscreenOrientationLock:disabled"/>
-  <int value="-711890895" label="enable-website-settings-manager"/>
-  <int value="-709058455" label="ui-slow-animations"/>
-  <int value="-699767107" label="enable-sync-app-list"/>
-  <int value="-697751423" label="disable-quickoffice-component-app"/>
-  <int value="-684900739" label="disable-merge-key-char-events"/>
-  <int value="-684223908" label="enable-android-wallpapers-app"/>
-  <int value="-667517406" label="overscroll-history-navigation"/>
-  <int value="-661978438" label="enable-data-reduction-proxy-lo-fi"/>
-  <int value="-660160292" label="enable-apps-show-on-first-paint"/>
-  <int value="-650504533" label="enable-speculative-launch-service-worker"/>
-  <int value="-650176557" label="OfflinePagesSvelteConcurrentLoading:enabled"/>
-  <int value="-649956990" label="enable-harfbuzz-rendertext"/>
-  <int value="-645455405" label="MacViewsNativeDialogs:enabled"/>
-  <int value="-641719457" label="disable-compositor-touch-hit-testing"/>
-  <int value="-631740127" label="inert-visual-viewport"/>
-  <int value="-622685174" label="enable-pdf-material-ui"/>
-  <int value="-620030047" label="CrosCompUpdates:disabled"/>
-  <int value="-617452890" label="media-router"/>
-  <int value="-612480090" label="FasterLocationReload:enabled"/>
-  <int value="-610411643" label="enable-printer-app-search"/>
-  <int value="-606898702" label="MaterialDesignSettings:disabled"/>
-  <int value="-604814313" label="enable-pinch"/>
-  <int value="-604068396" label="disable-input-ime-api"/>
-  <int value="-601384286" label="disable-contextual-search"/>
-  <int value="-598050737" label="disable-es3-apis"/>
-  <int value="-589096918" label="ash-enable-fullscreen-app-list"/>
-  <int value="-579192400" label="disable-input-view"/>
-  <int value="-567920515" label="disable-experimental-hotwording"/>
-  <int value="-563980787" label="disable-webrtc"/>
-  <int value="-562274241" label="enable-extension-action-redesign"/>
-  <int value="-560551550" label="use-memory-pressure-chromeos"/>
-  <int value="-548082154" label="protect-sync-credential:disabled"/>
-  <int value="-536289234" label="ssl-interstitial-v2-colorful"/>
-  <int value="-535208779" label="enable-native-cups"/>
-  <int value="-531810064" label="saveas-menu-label"/>
-  <int value="-528927088" label="AutofillCreditCardPopupLayout:disabled"/>
-  <int value="-528149352" label="WebRtcUseEchoCanceller3:enabled"/>
-  <int value="-519960638" label="enable-site-engagement-service"/>
-  <int value="-518104091" label="NewAudioRenderingMixingStrategy:enabled"/>
-  <int value="-516845951" label="enable-embedded-extension-options"/>
-  <int value="-512971943" label="disable-one-copy"/>
-  <int value="-510488450" label="disable-pnacl"/>
-  <int value="-508143738" label="disable-accelerated-fixed-root-background"/>
-  <int value="-506706655" label="respect-autocomplete-off-autofill"/>
-  <int value="-505679399" label="FontCacheScaling:enabled"/>
-  <int value="-495585885" label="enable-spdy-proxy-dev-auth-origin"/>
-  <int value="-493551777" label="StaleWhileRevalidate2:disabled"/>
-  <int value="-492864618" label="NTPForeignSessionsSuggestions:disabled"/>
-  <int value="-488779992" label="blink-settings"/>
-  <int value="-478462945" label="enable-ephemeral-apps"/>
-  <int value="-475049740" label="disable-vr-shell"/>
-  <int value="-474322576" label="disable-quick-unlock-pin"/>
-  <int value="-472013317" label="WebRTC-H264WithOpenH264FFmpeg:disabled"/>
-  <int value="-462205750" label="enable-service-worker-sync"/>
-  <int value="-461292699" label="ContentSuggestionsCategoryOrder:enabled"/>
-  <int value="-460081932" label="CustomFeedbackUi:disabled"/>
-  <int value="-455203267" label="use_new_features_summary"/>
-  <int value="-449465495" label="disable-browser-task-scheduler"/>
-  <int value="-430360431" label="disable-password-generation"/>
-  <int value="-428599163" label="NTPDownloadSuggestions:enabled"/>
-  <int value="-418868128" label="enable-experimental-web-platform-features"/>
-  <int value="-410852857" label="ImprovedA2HS:disabled"/>
-  <int value="-396994784" label="enable-vr-shell"/>
-  <int value="-396496344" label="ViewsTaskManager:enabled"/>
-  <int value="-395606844" label="enable-site-settings"/>
-  <int value="-387606010" label="ArcBootCompletedBroadcast:enabled"/>
-  <int value="-385337473" label="enable-fast-unload"/>
-  <int value="-384589459" label="disable-supervised-user-safesites"/>
-  <int value="-378180863" label="disable-panels"/>
-  <int value="-378033324" label="disable-win32k-renderer-lockdown"/>
-  <int value="-364325011" label="enable-files-quick-view"/>
-  <int value="-362022976" label="disable-quirks-client"/>
-  <int value="-361948582" label="material-security-verbose"/>
-  <int value="-360038744" label="invert-viewport-scroll-order"/>
-  <int value="-354783358" label="NTPSaveToOffline:disabled"/>
-  <int value="-353182790" label="ConsistentOmniboxGeolocation:disabled"/>
-  <int value="-351552989" label="disable-hosted-apps-in-windows"/>
-  <int value="-351127770" label="enable-offline-pages-as-bookmarks"/>
-  <int value="-349057743" label="extensions-on-chrome-urls"/>
-  <int value="-345838366" label="enable-hosted-apps-in-windows"/>
-  <int value="-345324571" label="enable-quirks-client"/>
-  <int value="-344343842" label="disable-experimental-app-list"/>
-  <int value="-340622848" label="disable-javascript-harmony-shipping"/>
-  <int value="-340255045" label="allow-nacl-socket-api"/>
-  <int value="-329727402" label="disable-files-quick-view"/>
-  <int value="-328361990" label="enable-experimental-extension-apis"/>
-  <int value="-323831744" label="token-binding:enabled"/>
-  <int value="-322937746" label="disable-desktop-capture-picker-new-ui"/>
-  <int value="-322827131" label="tab-management-experiment-type-basil"/>
-  <int value="-320820051" label="enable-zero-copy"/>
-  <int value="-315604713" label="WebUSB:enabled"/>
-  <int value="-314910380" label="disable-distance-field-text"/>
-  <int value="-314605926" label="protect-sync-credential-on-reauth:enabled"/>
-  <int value="-311148335" label="v8-pac-mojo-out-of-process"/>
-  <int value="-300018686" label="disable-cloud-import"/>
-  <int value="-297716805"
-      label="CrossOriginMediaPlaybackRequiresUserGesture:disabled"/>
-  <int value="-290672626" label="enable-asm-wasm"/>
-  <int value="-288316828" label="enable-delegated-renderer"/>
-  <int value="-279920685" label="affiliation-based-matching:enabled"/>
-  <int value="-279493876" label="WebVRExperimentalRendering:enabled"/>
-  <int value="-278347667" label="default-tile-height"/>
-  <int value="-277144896" label="enable-viewport-meta"/>
-  <int value="-268357961" label="enable-feature-policy"/>
-  <int value="-254887599" label="google-profile-info"/>
-  <int value="-241353344" label="MidiManagerWinrt:disabled"/>
-  <int value="-234966279" label="PointerEvent:disabled"/>
-  <int value="-234687894"
-      label="NonValidatingReloadOnRefreshContentV2:disabled"/>
-  <int value="-231922000" label="enable-renderer-mojo-channel"/>
-  <int value="-213518852" label="protect-sync-credential:enabled"/>
-  <int value="-213214894" label="enable-chromevox-arc-support"/>
-  <int value="-206393363" label="enable-scroll-prediction"/>
-  <int value="-204355195" label="secondary-ui-md"/>
-  <int value="-202007318" label="AndroidAIAFetching:enabled"/>
-  <int value="-195029497" label="MediaRemoting:disabled"/>
-  <int value="-192919826" label="ViewsSimplifiedFullscreenUI:enabled"/>
-  <int value="-192389983" label="NoStatePrefetch:enabled"/>
-  <int value="-183246373" label="enable-multilingual-spellchecker"/>
-  <int value="-181093956" label="ScrollAnchoring:enabled"/>
-  <int value="-165756594" label="enable-touch-feedback"/>
-  <int value="-159877930" label="MaterialDesignUserManager:disabled"/>
-  <int value="-158549277" label="enable-embeddedsearch-api"/>
-  <int value="-158197254" label="enable-credential-manager-api"/>
-  <int value="-152677714" label="AsmJsToWebAssembly:enabled"/>
-  <int value="-147283486" label="enable-network-portal-notification"/>
-  <int value="-146552997" label="enable-affiliation-based-matching"/>
-  <int value="-144134779" label="AndroidPayIntegrationV2:disabled"/>
-  <int value="-138773929" label="PassiveDocumentEventListeners:enabled"/>
-  <int value="-122492389" label="enable-browser-task-scheduler"/>
-  <int value="-119055644" label="GenericSensor:enabled"/>
-  <int value="-108881882" label="NTPCondensedTileLayout:enabled"/>
-  <int value="-102537270" label="extension-content-verification"/>
-  <int value="-99781021" label="disable-roboto-font-ui"/>
-  <int value="-89690053" label="MaterialDesignUserManager:enabled"/>
-  <int value="-88822940" label="ssl-version-min"/>
-  <int value="-86788587" label="allow-autofill-sync-credential"/>
-  <int value="-80353187" label="disable-display-color-calibration"/>
-  <int value="-78035185" label="custom_summary"/>
-  <int value="-76631048" label="disable-offline-auto-reload-visible-only"/>
-  <int value="-70595606" label="ash-enable-unified-desktop"/>
-  <int value="-68877684" label="BackgroundVideoTrackOptimization:enabled"/>
-  <int value="-68225452" label="enable-translate-new-ux"/>
-  <int value="-58242474" label="ash-disable-swipe-to-close-in-overview-mode"/>
-  <int value="-55944747" label="disable-child-account-detection"/>
-  <int value="-52483823" label="disable-new-video-renderer"/>
-  <int value="-52241456" label="enable-single-click-autofill"/>
-  <int value="-50021298" label="ash-adjustable-large-cursor"/>
-  <int value="-48920737" label="enable-smooth-scrolling"/>
-  <int value="-45532639" label="enable-default-media-session"/>
-  <int value="-45074716" label="SystemDownloadManager:disabled"/>
-  <int value="-23090520" label="disable-search-button-in-omnibox"/>
-  <int value="-22544408" label="enable-video-player-chromecast-support"/>
-  <int value="-16824589" label="ash-shelf-color"/>
-  <int value="-13918890" label="disable-download-notification"/>
-  <int value="-11260186" label="enable-offline-pages-as-saved-pages"/>
-  <int value="-5052940" label="enable-simplified-fullscreen"/>
-  <int value="-2953333" label="AndroidHistoryManager:disabled"/>
-  <int value="-2371418" label="disable-display-list-2d-canvas"/>
-  <int value="0" label="BAD_FLAG_FORMAT">
-    Command-line flag doesn't start with two dashes.
-  </int>
-  <int value="7444737" label="NTPSuggestionsStandaloneUI:disabled"/>
-  <int value="7533886" label="disable-offer-store-unmasked-wallet-cards"/>
-  <int value="10458238" label="disable-print-preview-simplify"/>
-  <int value="11698808" label="enable-dom-distiller-button-animation"/>
-  <int value="27507364" label="apps-keep-chrome-alive"/>
-  <int value="31848187" label="ViewsTaskManager:disabled"/>
-  <int value="33778663" label="OriginTrials:enabled"/>
-  <int value="37024318" label="disable-affiliation-based-matching"/>
-  <int value="44088203" label="ExpensiveBackgroundTimerThrottling:enabled"/>
-  <int value="48159177" label="reduced-referrer-granularity"/>
-  <int value="51793504" label="protect-sync-credential-on-reauth:disabled"/>
-  <int value="56723110" label="enable-webfonts-intervention"/>
-  <int value="57791920" label="MemoryCoordinator:enabled"/>
-  <int value="59784035" label="ImeThread:disabled"/>
-  <int value="61205887" label="enable-text-input-focus-manager"/>
-  <int value="64942701" label="OfflinePagesSvelteConcurrentLoading:disabled"/>
-  <int value="70878462" label="WebAssembly:disabled"/>
-  <int value="75747474" label="disable-webview-signin-flow"/>
-  <int value="78998551" label="disable-hosted-app-shim-creation"/>
-  <int value="79503461" label="disable-account-consistency"/>
-  <int value="84911198" label="ScanCardsInWebPayments:disabled"/>
-  <int value="88437020" label="FeaturePolicy:enabled"/>
-  <int value="91938915" label="enable-suggestions-service"/>
-  <int value="98134240" label="material-design-ink-drop-animation-speed"/>
-  <int value="103932290" label="show-autofill-type-predictions"/>
-  <int value="118991027" label="enable-accelerated-fixed-root-background"/>
-  <int value="120429808" label="disable-new-profile-management"/>
-  <int value="121684313" label="QuickUnlockPin:enabled"/>
-  <int value="121858954" label="enable-supervised-user-safesites"/>
-  <int value="125934378" label="enable-password-link"/>
-  <int value="147373243" label="enable-deferred-image-decoding"/>
-  <int value="157217034" label="enable-tab-for-desktop-share"/>
-  <int value="157318016" label="AutomaticTabDiscarding:enabled"/>
-  <int value="173288154" label="PrintPdfAsImage:enabled"/>
-  <int value="178337215" label="enable-md-history"/>
-  <int value="180074362" label="memory-pressure-thresholds"/>
-  <int value="189728101" label="FasterLocationReload:disabled"/>
-  <int value="194573877" label="MacViewsNativeDialogs:disabled"/>
-  <int value="194895489" label="passive-listeners-default"/>
-  <int value="200347243" label="WebVRExperimentalRendering:disabled"/>
-  <int value="201343576" label="enable-password-change-support:enabled"/>
-  <int value="203776499" label="enable-virtual-keyboard-overscroll"/>
-  <int value="223662457" label="BackgroundLoadingForDownloads:enabled"/>
-  <int value="243557364" label="ash-force-enable-palette"/>
-  <int value="244697230" label="enable-theme-color-in-tabbed-mode"/>
-  <int value="262382944" label="GuestViewCrossProcessFrames:disabled"/>
-  <int value="266702296" label="disable-plugin-power-saver"/>
-  <int value="270267831" label="enable-scripts-require-action"/>
-  <int value="274103741" label="enable-ntp-popular-sites"/>
-  <int value="278756320" label="disable-app-list-app-info"/>
-  <int value="280644887" label="mash"/>
-  <int value="301869874" label="NTPPhysicalWebPageSuggestions:disabled"/>
-  <int value="304901781" label="NewUsbBackend:enabled"/>
-  <int value="313303258" label="WebPaymentsModifiers:disabled"/>
-  <int value="316182183" label="MediaDocumentDownloadButton:disabled"/>
-  <int value="323605372" label="ui-disable-compositor-animation-timelines"/>
-  <int value="324631366" label="enable-drive-search-in-app-launcher"/>
-  <int value="327045548" label="SafeSearchUrlReporting:enabled"/>
-  <int value="328722396" label="NTPCondensedLayout:disabled"/>
-  <int value="330138076" label="enable-clear-browsing-data-counters"/>
-  <int value="332391072" label="cs-contextual-cards-bar-integration"/>
-  <int value="346711293" label="enable-save-password-bubble"/>
-  <int value="348854923" label="v8-cache-strategies-for-cache-storage"/>
-  <int value="358399482" label="enable-high-dpi-fixed-position-compositing"/>
-  <int value="358493847" label="BackgroundLoader:disabled"/>
-  <int value="360391863" label="NTPOfflineBadge:enabled"/>
-  <int value="360599302" label="enable-gpu-rasterization"/>
-  <int value="365467768" label="prefetch-search-results"/>
-  <int value="368854020" label="ash-screen-rotation-animation"/>
-  <int value="370486304" label="enable-origin-chip-on-srp"/>
-  <int value="372460068" label="QuickUnlockFingerprint:disabled"/>
-  <int value="377093001" label="WebRtcHWH264Encoding:disabled"/>
-  <int value="379326303" label="enable-add-to-shelf"/>
-  <int value="379428799" label="security-chip-animation"/>
-  <int value="385969127" label="disable-win32k-lockdown"/>
-  <int value="387178525" label="VideoFullscreenOrientationLock:enabled"/>
-  <int value="400322063" label="ash-disable-screen-orientation-lock"/>
-  <int value="401983950" label="enable-spdy4"/>
-  <int value="402143634" label="enable-search-button-in-omnibox-always"/>
-  <int value="405329388"
-      label="FramebustingNeedsSameOriginOrUserGesture:enabled"/>
-  <int value="411250226" label="AutoplayMutedVideos:disabled"/>
-  <int value="412957264" label="tab-close-buttons-hidden-with-touch"/>
-  <int value="413081240" label="enable-new-md-input-view"/>
-  <int value="413695227" label="NTPSuggestionsStandaloneUI:enabled"/>
-  <int value="415154056" label="enable-physical-keyboard-autocorrect"/>
-  <int value="416887895" label="enable-password-change-support"/>
-  <int value="422307097" label="PhysicalWeb:disabled"/>
-  <int value="423615350" label="enable-tab-audio-muting"/>
-  <int value="423855924" label="enable-tab-switcher-theme-colors"/>
-  <int value="431691805" label="MediaDocumentDownloadButton:enabled"/>
-  <int value="446316019" label="enable-threaded-compositing"/>
-  <int value="451196246" label="disable-impl-side-painting"/>
-  <int value="455698038"
-      label="disable-gesture-requirement-for-media-playback"/>
-  <int value="457881889" label="enable-autoplay-muted-videos"/>
-  <int value="458410433" label="disable-views-rect-based-targeting"/>
-  <int value="460136092" label="MidiManagerAndroid:disabled"/>
-  <int value="460475728" label="wake-on-wifi-packet"/>
-  <int value="466248382" label="disable-push-api-background-mode"/>
-  <int value="468959230"
-      label="enable-non-validating-reload-on-refresh-content"/>
-  <int value="470011024" label="NonValidatingReloadOnNormalReload:enabled"/>
-  <int value="474743272" label="material-design-ink-drop"/>
-  <int value="477967119" label="enable-unified-media-pipeline"/>
-  <int value="479906041" label="RunAllFlashInAllowMode:disabled"/>
-  <int value="480544447" label="NonValidatingReloadOnRefreshContentV2:enabled"/>
-  <int value="493903641" label="disable-appcontainer"/>
-  <int value="494733611" label="disable-drop-sync-credential"/>
-  <int value="503245473" label="disable-translate-new-ux"/>
-  <int value="504994663" label="GenericSensor:disabled"/>
-  <int value="510814146" label="OfflineBookmarks:enabled"/>
-  <int value="535976218" label="enable-plugin-power-saver"/>
-  <int value="538468149" label="OfflinePagesCT:enabled"/>
-  <int value="546520086" label="enable-data-reduction-proxy-savings-promo"/>
-  <int value="546710806" label="disable-easy-signin"/>
-  <int value="550378029" label="reset-app-list-install-state"/>
-  <int value="550387510" label="NTPAssetDownloadSuggestions:disabled"/>
-  <int value="562979188" label="DesktopIOSPromotion:enabled"/>
-  <int value="567368307" label="enable-experimental-canvas-features"/>
-  <int value="575394365" label="AndroidPaymentApps:disabled"/>
-  <int value="581118445" label="enable-eol-notification"/>
-  <int value="581355159" label="ContentSuggestionsCategoryRanker:disabled"/>
-  <int value="584541349" label="ContextualSearchSingleActions:disabled"/>
-  <int value="592050831" label="disable-slimming-paint"/>
-  <int value="593707592" label="disable-network-portal-notification"/>
-  <int value="596106994" label="CustomFeedbackUi:enabled"/>
-  <int value="598827460" label="enable-roboto-font-ui"/>
-  <int value="602117675" label="NTPBookmarkSuggestions:enabled"/>
-  <int value="603326800" label="UsePasswordSeparatedSigninFlow:enabled"/>
-  <int value="605150752" label="WebUSB:disabled"/>
-  <int value="606288133" label="enable-print-preview-register-promos"/>
-  <int value="606512202" label="AutofillCreditCardPopupLayout:enabled"/>
-  <int value="609112512" label="touch-selection-strategy"/>
-  <int value="610545308" label="enable-potentially-annoying-security-features"/>
-  <int value="624317932" label="print-pdf-as-image"/>
-  <int value="624368375" label="OmniboxEntitySuggestions:enabled"/>
-  <int value="625273056" label="disable-boot-animation"/>
-  <int value="628302973" label="NTPSnippets:enabled"/>
-  <int value="630947363" label="touch-events"/>
-  <int value="635971109" label="PrintPdfAsImage:disabled"/>
-  <int value="636425179" label="mhtml-generator-option"/>
-  <int value="637396292" label="AllBookmarks:enabled"/>
-  <int value="643725031" label="disable-touch-feedback"/>
-  <int value="644189071" label="PermissionsBlacklist:enabled"/>
-  <int value="646252875" label="ReadItLaterInMenu:enabled"/>
-  <int value="646738320" label="disable-gesture-editing"/>
-  <int value="650602639" label="enable-autofill-keyboard-accessory-view"/>
-  <int value="683410401"
-      label="enable-proximity-auth-bluetooth-low-energy-discovery"/>
-  <int value="684806628" label="TranslateLanguageByULP:disabled"/>
-  <int value="689489984" label="disable-zero-suggest"/>
-  <int value="690185633" label="NonValidatingReloadOnNormalReload:disabled"/>
-  <int value="691020108" label="NTPCondensedTileLayout:disabled"/>
-  <int value="693012666" label="QuickUnlockPin:disabled"/>
-  <int value="709850261" label="disable-touch-editing"/>
-  <int value="711424932" label="enable-cloud-print-xps"/>
-  <int value="715617684" label="OriginTrials:disabled"/>
-  <int value="716080990" label="restrict-iframe-permissions"/>
-  <int value="724208771" label="TabsInCBD:enabled"/>
-  <int value="730024226" label="enable-out-of-process-pdf"/>
-  <int value="730750097" label="PermissionsBlacklist:disabled"/>
-  <int value="732703958" label="enable-gesture-tap-highlight"/>
-  <int value="738868972" label="GdiTextPrinting:disabled"/>
-  <int value="745868416" label="disable-system-timezone-automatic-detection"/>
-  <int value="746944193" label="enable-automatic-password-saving:disabled"/>
-  <int value="747847237" label="PhysicalWeb:enabled"/>
-  <int value="752194066" label="enable-app-window-cycling"/>
-  <int value="752939691" label="disable-tab-for-desktop-share"/>
-  <int value="773919225" label="disable-office-editing-component-extension"/>
-  <int value="779086132" label="enable-data-reduction-proxy-alt"/>
-  <int value="782167080" label="enable-new-qp-input-view"/>
-  <int value="783270752" label="AndroidHistoryManager:enabled"/>
-  <int value="803282885" label="PreferHtmlOverPlugins:disabled"/>
-  <int value="805567148"
-      label="enable-canvas-2d-dynamic-rendering-mode-switching"/>
-  <int value="806334184" label="AndroidSpellChecker:enabled"/>
-  <int value="807734471" label="tab-management-experiment-type-disabled"/>
-  <int value="811374216" label="disable-new-bookmark-apps"/>
-  <int value="820650704" label="disable-ntp-popular-sites"/>
-  <int value="821192723" label="show-fps-counter"/>
-  <int value="824961931" label="use-simple-cache-backend"/>
-  <int value="834033186" label="enable-data-reduction-proxy-dev"/>
-  <int value="834326277" label="enable-answers-in-suggest"/>
-  <int value="835018878" label="disable-quic"/>
-  <int value="838887742" label="manual-enhanced-bookmarks"/>
-  <int value="841343322" label="disable-new-korean-ime"/>
-  <int value="851085848" label="enable-settings-window"/>
-  <int value="854730848" label="disable-app-info-dialog-mac"/>
-  <int value="855746780" label="disable-physical-keyboard-autocorrect"/>
-  <int value="857445869" label="enable-captive-portal-bypass-proxy"/>
-  <int value="862453793" label="TranslateUI2016Q2:enabled"/>
-  <int value="867512869" label="mark-non-secure-as"/>
-  <int value="869531646" label="enable-session-crashed-bubble"/>
-  <int value="879699575" label="disable-gesture-tap-highlight"/>
-  <int value="879992337" label="disable-pull-to-refresh-effect"/>
-  <int value="880510010" label="enable-permissions-bubbles"/>
-  <int value="884106779" label="supervised-user-safesites"/>
-  <int value="887011602" label="enable-spelling-auto-correct"/>
-  <int value="903267263" label="disable-offline-pages"/>
-  <int value="908523940" label="PassiveEventListenersDueToFling:disabled"/>
-  <int value="909439558" label="disable-device-discovery"/>
-  <int value="916316159" label="disable-new-app-list-mixer"/>
-  <int value="929462705" label="disable-link-disambiguation-popup"/>
-  <int value="935655516" label="password-import-export:disabled"/>
-  <int value="936341613" label="OfflinePagesCT:disabled"/>
-  <int value="936919953" label="bypass-app-banner-engagement-checks"/>
-  <int value="938191241" label="VrShell:enabled"/>
-  <int value="939554480" label="enable-credit-card-scan"/>
-  <int value="939603162" label="BackgroundLoadingForDownloads:disabled"/>
-  <int value="943319566" label="enable-intent-picker"/>
-  <int value="952558794" label="enable-remote-assistance"/>
-  <int value="980396200" label="enable-new-korean-ime"/>
-  <int value="982032277" label="NTPOfflineBadge:disabled"/>
-  <int value="982511393" label="NTPArticleSuggestions:disabled"/>
-  <int value="983311394" label="tab-management-experiment-type"/>
-  <int value="1000706989" label="AutomaticTabDiscarding:disabled"/>
-  <int value="1002585107" label="emphasize-titles-in-omnibox-dropdown"/>
-  <int value="1003002105" label="MaterialDesignBookmarks:disabled"/>
-  <int value="1007444341" label="enable-prefixed-encrypted-media"/>
-  <int value="1015895665" label="drop-sync-credential:enabled"/>
-  <int value="1019857902"
-      label="disable-hide-inactive-stacked-tab-close-buttons"/>
-  <int value="1022992701" label="enable-origin-chip-always"/>
-  <int value="1033597574" label="disable-layer-squashing"/>
-  <int value="1036068554" label="enable-android-pay-integration-v2"/>
-  <int value="1043334401" label="disable-slimming-paint-invalidation"/>
-  <int value="1050048304" label="enable-font-cache-scaling"/>
-  <int value="1050321458" label="new-profile-management"/>
-  <int value="1054910800" label="enable-timezone-tracking-option"/>
-  <int value="1057887829" label="AutofillScanThemeDialog:disabled"/>
-  <int value="1060319397" label="enable-data-reduction-proxy-carrier-test"/>
-  <int value="1062357243" label="remember-cert-error-decisions"/>
-  <int value="1064288458" label="OfflineRecentPages:enabled"/>
-  <int value="1067618884" label="enable-experimental-input-view-features"/>
-  <int value="1070164693" label="MidiManagerDynamicInstantiation:disabled"/>
-  <int value="1070300488" label="disable-webgl"/>
-  <int value="1081546525" label="ash-enable-docked-windows"/>
-  <int value="1087235172" label="file-manager-enable-new-audio-player"/>
-  <int value="1090377940" label="enable-quic-https"/>
-  <int value="1095061640" label="enable-prominent-url-app-flow"/>
-  <int value="1098823967" label="ash-enable-window-cycle-ui"/>
-  <int value="1104948452" label="manual-enhanced-bookmarks-optout"/>
-  <int value="1105439588" label="enable-swipe-selection"/>
-  <int value="1107543566" label="enable-one-copy"/>
-  <int value="1108663108" label="disable-device-discovery-notifications"/>
-  <int value="1113365156" label="tab-management-experiment-type-chive"/>
-  <int value="1114629582" label="enable-floating-virtual-keyboard"/>
-  <int value="1118109174" label="enable-launcher-search-provider-api"/>
-  <int value="1127183523" label="PassiveEventListenersDueToFling:enabled"/>
-  <int value="1127427821" label="OmniboxEntitySuggestions:disabled"/>
-  <int value="1129888794" label="ash-touch-hud"/>
-  <int value="1133635187" label="force-gpu-rasterization"/>
-  <int value="1139226452" label="enable-nacl-debug"/>
-  <int value="1139363314" label="disable-supervised-user-blacklist"/>
-  <int value="1142515376" label="enable-nacl"/>
-  <int value="1142788238" label="FontCacheScaling:disabled"/>
-  <int value="1149823105" label="enable-input-ime-api"/>
-  <int value="1150622273" label="enable-apps-file-associations"/>
-  <int value="1153454438"
-      label="AutofillCreditCardLastUsedDateDisplay:disabled"/>
-  <int value="1155923106" label="NTPOfflinePages:enabled"/>
-  <int value="1163255347" label="ash-enable-touch-view-touch-feedback"/>
-  <int value="1166169237" label="disable-delay-agnostic-aec"/>
-  <int value="1167613030" label="enable-permission-action-reporting"/>
-  <int value="1174088940" label="enable-wasm"/>
-  <int value="1179936481" label="enable-android-pay-integration-v1"/>
-  <int value="1181056275" label="enable-cloud-backup"/>
-  <int value="1183431946" label="v8-cache-options"/>
-  <int value="1185424279" label="enable-media-router"/>
-  <int value="1190035852" label="MediaRemoting:enabled"/>
-  <int value="1192302892" label="gesture-typing"/>
-  <int value="1192913630" label="OfflinePagesBackgroundLoading:disabled"/>
-  <int value="1196644408" label="performance-monitor-gathering"/>
-  <int value="1196834473" label="disable-smart-virtual-keyboard"/>
-  <int value="1205849612" label="enable-sync-synced-notifications"/>
-  <int value="1209221384" label="enable-experimental-accessibility-features"/>
-  <int value="1210343926" label="enable-drop-sync-credential"/>
-  <int value="1211284676" label="V8NoTurbo:enabled"/>
-  <int value="1219628795" label="PrintScaling:disabled"/>
-  <int value="1219826373" label="ServiceWorkerNavigationPreload:enabled"/>
-  <int value="1220171692" label="SpeculativeLaunchServiceWorker:enabled"/>
-  <int value="1220464509" label="enable-first-run-ui-transitions"/>
-  <int value="1221559505" label="enable-spelling-feedback-field-trial"/>
-  <int value="1222017136" label="WebRtcUseEchoCanceller3:disabled"/>
-  <int value="1235800887" label="V8Ignition:enabled"/>
-  <int value="1237297772" label="no-pings"/>
-  <int value="1242632259" label="ContentSuggestionsCategoryOrder:disabled"/>
-  <int value="1245889469" label="enable-surface-worker"/>
-  <int value="1247293682" label="topchrome-md"/>
-  <int value="1250071868" label="disable-timezone-tracking-option"/>
-  <int value="1253698118" label="ash-disable-stable-overview-order"/>
-  <int value="1257980502" label="disable-accelerated-video-decode"/>
-  <int value="1268470658" label="disable-android-password-link"/>
-  <int value="1269940659" label="EnumerateAudioDevices:enabled"/>
-  <int value="1269952439" label="AndroidAIAFetching:disabled"/>
-  <int value="1272699563" label="enable-hosted-mode"/>
-  <int value="1276209777" label="ntp-switch-to-existing-tab"/>
-  <int value="1279584261" label="enable-carrier-switching"/>
-  <int value="1280614081" label="show-overdraw-feedback"/>
-  <int value="1283956865" label="force-tablet-mode"/>
-  <int value="1283960113" label="disable-fixed-position-compositing"/>
-  <int value="1291257442" label="TabsInCBD:disabled"/>
-  <int value="1291966558" label="ScrollAnchoring:disabled"/>
-  <int value="1294131571" label="disable-winrt-midi-api"/>
-  <int value="1298981651" label="disable-new-task-manager"/>
-  <int value="1300282719" label="OfflinePagesBackgroundLoading:enabled"/>
-  <int value="1302421166" label="NativeNotifications:disabled"/>
-  <int value="1308537004" label="force-pnacl-subzero"/>
-  <int value="1312025202" label="NTPOfflinePageSuggestions:disabled"/>
-  <int value="1314681756" label="NoStatePrefetch:disabled"/>
-  <int value="1317562265" label="SeccompSandboxAndroid:disabled"/>
-  <int value="1318073661" label="MaterialDesignExtensions:enabled"/>
-  <int value="1319725131" label="enable-distance-field-text"/>
-  <int value="1320201920" label="enable-touchpad-three-finger-click"/>
-  <int value="1344833841" label="ImeThread:enabled"/>
-  <int value="1351830811" label="do-not-ignore-autocomplete-off"/>
-  <int value="1352447982" label="enable-lcd-text"/>
-  <int value="1359972809" label="enable-gesture-deletion"/>
-  <int value="1361047396" label="disable-click-delay"/>
-  <int value="1361073386" label="ContentSuggestionsNotifications:enabled"/>
-  <int value="1367529437" label="NTPAssetDownloadSuggestions:enabled"/>
-  <int value="1367671275" label="enable-proximity-auth-proximity-detection"/>
-  <int value="1371092708" label="disable-desktop-capture-picker-old-ui"/>
-  <int value="1371907429" label="enable-wallet-card-import"/>
-  <int value="1372199493" label="windows10-custom-titlebar"/>
-  <int value="1372680885" label="enable-mtp-write-support"/>
-  <int value="1373777956" label="disable-threaded-gpu-rasterization"/>
-  <int value="1378310092" label="disable-suggestions-service"/>
-  <int value="1381746642" label="enable-automatic-password-saving"/>
-  <int value="1382500494" label="disable-drive-apps-in-app-list"/>
-  <int value="1383591631" label="enable-gesture-typing"/>
-  <int value="1384614036" label="disable-unified-media-pipeline"/>
-  <int value="1389729816" label="data-reduction-proxy-lo-fi"/>
-  <int value="1405459667" label="enable-fast-text-autosizing"/>
-  <int value="1406354320" label="MacViewsWebUIDialogs:enabled"/>
-  <int value="1407625309"
-      label="disable-minimize-on-second-launcher-item-click"/>
-  <int value="1408331660" label="enhanced-bookmarks-experiment"/>
-  <int value="1410697724" label="mediadrm-enable-non-compositing"/>
-  <int value="1416592483" label="ash-enable-mirrored-screen"/>
-  <int value="1418054870" label="SpecialLocale:enabled"/>
-  <int value="1421620678" label="simple-clear-browsing-data-support-string"/>
-  <int value="1441897340" label="AndroidSpellCheckerNonLowEnd:enabled"/>
-  <int value="1442798825" label="enable-quic"/>
-  <int value="1454363479" label="disable-storage-manager"/>
-  <int value="1458583431" label="arc-use-auth-endpoint"/>
-  <int value="1459529277" label="disable-text-input-focus-manager"/>
-  <int value="1460747747" label="GdiTextPrinting:enabled"/>
-  <int value="1460958818" label="NTPForeignSessionsSuggestions:enabled"/>
-  <int value="1465624446" label="disable-zero-copy"/>
-  <int value="1466380480" label="enable-device-discovery-notifications"/>
-  <int value="1469407485" label="disable-accelerated-2d-canvas"/>
-  <int value="1479248574" label="disable-voice-input"/>
-  <int value="1481562816" label="disable-password-link"/>
-  <int value="1486171015" label="disable-fill-on-account-select"/>
-  <int value="1489915799" label="disable-permissions-blacklist"/>
-  <int value="1490043732" label="enable-fill-on-account-select"/>
-  <int value="1490255042" label="enable-overlay-scrollbar"/>
-  <int value="1495341532" label="disable-mtp-write-support"/>
-  <int value="1496135626" label="UploadCrashReportsUsingJobScheduler:enabled"/>
-  <int value="1496571153" label="enable-webapk"/>
-  <int value="1497924954" label="js-flags"/>
-  <int value="1499163193" label="PostScriptPrinting:disabled"/>
-  <int value="1505194447" label="disable-transition-compositing"/>
-  <int value="1509901380" label="disable-drive-search-in-app-launcher"/>
-  <int value="1510476448" label="disable-prefixed-encrypted-media"/>
-  <int value="1511140997" label="OfflinePagesAsyncDownload:disabled"/>
-  <int value="1511161758" label="BackgroundLoader:enabled"/>
-  <int value="1515196403" label="fast-user-switching"/>
-  <int value="1517863401" label="history-entry-requires-user-gesture"/>
-  <int value="1541723759" label="ServiceWorkerNavigationPreload:disabled"/>
-  <int value="1548776701" label="AllBookmarks:disabled"/>
-  <int value="1548942246" label="PassiveDocumentEventListeners:disabled"/>
-  <int value="1560188739" label="reader-mode-heuristics"/>
-  <int value="1579461102" label="MemoryCoordinator:disabled"/>
-  <int value="1586022426" label="AutofillCreditCardAssist:enabled"/>
-  <int value="1589341623" label="disable-easy-unlock"/>
-  <int value="1612446645" label="enable-weak-memorycache"/>
-  <int value="1612871297" label="WebPayments:disabled"/>
-  <int value="1612974229" label="allow-insecure-localhost"/>
-  <int value="1617187093" label="enable-improved-a2hs"/>
-  <int value="1622131033" label="ozone-test-single-overlay-support"/>
-  <int value="1634897915" label="password-import-export:enabled"/>
-  <int value="1636962093" label="disable-material-design-ntp"/>
-  <int value="1646498561" label="OfflineBookmarks:disabled"/>
-  <int value="1657713458" label="disable-virtual-keyboard-overscroll"/>
-  <int value="1658644418" label="disable-app-list-voice-search"/>
-  <int value="1661925474" label="silent-debugger-extension-api"/>
-  <int value="1668611601" label="enable-encrypted-media"/>
-  <int value="1689123607" label="enable-app-link"/>
-  <int value="1689183477" label="enable-merge-key-char-events"/>
-  <int value="1691568199" label="AndroidSpellCheckerNonLowEnd:disabled"/>
-  <int value="1694854500" label="disable-save-password-bubble"/>
-  <int value="1696139514" label="enable-ble-advertising-in-apps"/>
-  <int value="1697189972" label="WebPaymentsSingleAppUiSkip:disabled"/>
-  <int value="1701972870" label="NTPSnippetsIncreasedVisibility:enabled"/>
-  <int value="1702821235" label="WebAssembly:enabled"/>
-  <int value="1705724232" label="use-android-midi-api"/>
-  <int value="1723601083" label="enable-app-window-controls"/>
-  <int value="1724800383" label="AsmJsToWebAssembly:disabled"/>
-  <int value="1730094138" label="enable-md-storage-manager"/>
-  <int value="1730236697" label="force-device-scale-factor"/>
-  <int value="1730416578" label="NTPCondensedLayout:enabled"/>
-  <int value="1731522433" label="enable-offer-store-unmasked-wallet-cards"/>
-  <int value="1747279677" label="disable-delegated-renderer"/>
-  <int value="1752168018" label="enable-stale-while-revalidate"/>
-  <int value="1766676896" label="affiliation-based-matching:disabled"/>
-  <int value="1772454319" label="enable-storage-manager"/>
-  <int value="1775475563" label="malware-interstitial-v3"/>
-  <int value="1776475705" label="show-composited-layer-borders"/>
-  <int value="1777059507" label="trust-autofill-server-name-types"/>
-  <int value="1777806335" label="UsePasswordSeparatedSigninFlow:disabled"/>
-  <int value="1783293530" label="disallow-autofill-sync-credential"/>
-  <int value="1783837132" label="enable-threaded-gpu-rasterization"/>
-  <int value="1785093465" label="enable-document-passive-event-listeners"/>
-  <int value="1786229999" label="disable-md-downloads"/>
-  <int value="1791904609" label="disable-autofill-keyboard-accessory-view"/>
-  <int value="1803465156" label="enable-zero-suggest-most-visited"/>
-  <int value="1809940714" label="SpeculativeLaunchServiceWorker:disabled"/>
-  <int value="1812368073" label="enable-new-app-list-mixer"/>
-  <int value="1814671708" label="disable-password-manager-reauthentication"/>
-  <int value="1817312143" label="num-raster-threads"/>
-  <int value="1819256299" label="disable-webrtc-hw-decoding"/>
-  <int value="1819536169" label="disable-cast-streaming-hw-encoding"/>
-  <int value="1820317896" label="NTPShowGoogleGInOmnibox:disabled"/>
-  <int value="1820451991" label="enable-offline-auto-reload"/>
-  <int value="1821723343" label="disable-saml-signin"/>
-  <int value="1827369558" label="AndroidPayIntegrationV1:disabled"/>
-  <int value="1828660283" label="enable-webfonts-intervention-trigger"/>
-  <int value="1838990777" label="V8Future:enabled"/>
-  <int value="1844110073" label="enable-app-view"/>
-  <int value="1847024354" label="enable-hotword-hardware"/>
-  <int value="1852630189" label="NTPBookmarkSuggestions:disabled"/>
-  <int value="1855524566" label="allow-insecure-websocket-from-https-origin"/>
-  <int value="1860597983" label="AndroidSpellChecker:disabled"/>
-  <int value="1861251313"
-      label="enable-message-center-always-scroll-up-upon-notification-removal"/>
-  <int value="1862207743" label="enable-android-spellchecker"/>
-  <int value="1865068568" label="disable-audio-support-for-desktop-share"/>
-  <int value="1865799183" label="javascript-harmony"/>
-  <int value="1866079109" label="team-drives"/>
-  <int value="1867085340" label="brotli-encoding:enabled"/>
-  <int value="1878331098" label="GuestViewCrossProcessFrames:enabled"/>
-  <int value="1881036528" label="disable-multilingual-spellchecker"/>
-  <int value="1881174782" label="disable-brotli"/>
-  <int value="1889076955" label="disable-app-link"/>
-  <int value="1891210939" label="enable-blink-features"/>
-  <int value="1892201400" label="enable-password-separated-signin-flow"/>
-  <int value="1893317228" label="WebPayments:enabled"/>
-  <int value="1895587769" label="CredentialManagementAPI:disabled"/>
-  <int value="1896456311" label="enable-password-save-in-page-navigation"/>
-  <int value="1898231011" label="enable-native-notifications"/>
-  <int value="1900529524" label="disable-touch-drag-drop"/>
-  <int value="1905465678" label="ContextualSearchSingleActions:enabled"/>
-  <int value="1906942630" label="enable-easy-unlock"/>
-  <int value="1915178511" label="disable-blink-features"/>
-  <int value="1927259098" label="TranslateLanguageByULP:enabled"/>
-  <int value="1930901873" label="disable-sync-app-list"/>
-  <int value="1931309368" label="fill-on-account-select:disabled"/>
-  <int value="1939413645" label="enable-invalid-cert-collection"/>
-  <int value="1942911276" label="enable-grouped-history"/>
-  <int value="1944156526" label="sync-url"/>
-  <int value="1947350992" label="drop-sync-credential:disabled"/>
-  <int value="1951466218" label="enable-data-reduction-proxy-lite-page"/>
-  <int value="1955677113" label="trace-export-events-to-etw"/>
-  <int value="1958387645" label="ScanCardsInWebPayments:enabled"/>
-  <int value="1961425320" label="force-qtkit"/>
-  <int value="1964816410" label="AndroidPayIntegrationV2:enabled"/>
-  <int value="1966730288" label="disable-threaded-compositing"/>
-  <int value="1969604362" label="enable-pinch-virtual-viewport"/>
-  <int value="1980011075" label="debug-packed-apps"/>
-  <int value="1980648371" label="PointerEventV1SpecCapturing:enabled"/>
-  <int value="1989877708" label="PostScriptPrinting:enabled"/>
-  <int value="1992466116" label="enable-passive-event-listeners-due-to-fling"/>
-  <int value="1993258379" label="enable-icon-ntp"/>
-  <int value="1994431722" label="MaterialDesignUserMenu:disabled"/>
-  <int value="1995322219" label="EmojiHandwritingVoiceInput:enabled"/>
-  <int value="1996125159" label="AutoplayMutedVideos:enabled"/>
-  <int value="1997047666" label="NTPSnippetsIncreasedVisibility:disabled"/>
-  <int value="2000091128" label="enable-touch-hover"/>
-  <int value="2003811018" label="enable-touch-support-for-screen-magnifier"/>
-  <int value="2004483175" label="multi-instance-merge-tabs"/>
-  <int value="2004829262" label="enable-webgl-draft-extensions"/>
-  <int value="2005614493" label="tab-management-experiment-type-dill"/>
-  <int value="2014331873" label="NTPDownloadSuggestions:disabled"/>
-  <int value="2020107447" label="AndroidPayIntegrationV1:enabled"/>
-  <int value="2037756154" label="enable-impl-side-painting"/>
-  <int value="2059322877" label="new-avatar-menu"/>
-  <int value="2063091429" label="OfflinePagesSharing:enabled"/>
-  <int value="2067634730" label="LsdPermissionPrompt:disabled"/>
-  <int value="2071340353" label="progress-bar-completion"/>
-  <int value="2071461362" label="disable-credit-card-scan"/>
-  <int value="2076903744" label="progress-bar-animation"/>
-  <int value="2077917024"
-      label="enable-supervised-user-managed-bookmarks-folder"/>
-  <int value="2079672348" label="ExperimentalKeyboardLockUI:disabled"/>
-  <int value="2085438501" label="ChromeHome:enabled"/>
-  <int value="2093235103" label="default-tile-width"/>
-  <int value="2097048479" label="disable-auto-hiding-toolbar-threshold"/>
-  <int value="2098714203" label="enable-generic-sensors"/>
-  <int value="2101151142" label="disable-direct-write"/>
-  <int value="2104788328" label="use-winrt-midi-api"/>
-  <int value="2119964154" label="enable-download-resumption"/>
-  <int value="2121550859" label="PreferHtmlOverPlugins:enabled"/>
-  <int value="2121776031" label="auto-virtual-keyboard"/>
-  <int value="2122023503" label="enable-win32k-lockdown-mimetypes"/>
-  <int value="2122876605" label="enable-bleeding-edge-rendering-fast-paths"/>
-  <int value="2123567684" label="OptimizeLoadingIPCForSmallResources:enabled"/>
-  <int value="2126203058" label="force-show-update-menu-badge"/>
-  <int value="2129184006" label="NTPOfflinePageDownloadSuggestions:enabled"/>
-  <int value="2129929643" label="enable-use-zoom-for-dsf"/>
-  <int value="2137347307" label="enable-drive-apps-in-app-list"/>
-  <int value="2137599770" label="enable-win32k-renderer-lockdown"/>
-  <int value="2141463681" label="enable-offer-upload-credit-cards"/>
-</enum>
-
-<enum name="LoginDatabaseInitError" type="int">
-  <int value="0" label="Init success"/>
-  <int value="1" label="Can't open file"/>
-  <int value="2" label="Start transaction error"/>
-  <int value="3" label="Meta table failed initialization"/>
-  <int value="4" label="Incompatible current version"/>
-  <int value="5" label="Logins table failed initialization"/>
-  <int value="6" label="Stats table failed initialization"/>
-  <int value="7" label="Migration error"/>
-  <int value="8" label="Commit transaction error"/>
-</enum>
-
-<enum name="LoginFailureReason" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Could not mount cryptohome"/>
-  <int value="2" label="Could not mount tmpfs"/>
-  <int value="3" label="Could not unmount cryptohome"/>
-  <int value="4" label="Data removal failed"/>
-  <int value="5" label="Login timed out"/>
-  <int value="6" label="Unlock failed"/>
-  <int value="7" label="Network auth failed"/>
-  <int value="8" label="Owner required"/>
-  <int value="9" label="Whitelist check failed"/>
-  <int value="10" label="TPM error"/>
-  <int value="11" label="Failed to get username hash"/>
-  <int value="12" label="Failed to get OAuth2 token"/>
-</enum>
-
-<enum name="LoginIsKnownUser" type="int">
-  <int value="0" label="Unknown user"/>
-  <int value="1" label="Known user"/>
-</enum>
-
-<enum name="LoginPasswordChangeFlow" type="int">
-  <int value="0" label="Password change"/>
-  <int value="1" label="Cryptohome failure"/>
-</enum>
-
-<enum name="LoginPolicyFilesState" type="int">
-  <summary>Policy/owner key file state.</summary>
-  <int value="0" label="HEALTHY_R11">Healthy, pre-R11</int>
-  <int value="1" label="UNUSED">Unused</int>
-  <int value="2" label="HEALTHY">Healthy</int>
-  <int value="3" label="RESERVED">Reserved</int>
-  <int value="4" label="BAD_POLICY_R11">Key OK, policy bad, pre-R11</int>
-  <int value="5" label="UNUSED">Unused</int>
-  <int value="6" label="BAD_POLICY">Key OK, policy bad</int>
-  <int value="7" label="RESERVED">Reserved</int>
-  <int value="8" label="KEY_OK_NO_POLICY_R11">
-    Key OK, no policy, pre-R11 user (http://crosbug.com/24916)
-  </int>
-  <int value="9" label="UNUSED">Unused</int>
-  <int value="10" label="KEY_OK_NO_POLICY">Key OK, no policy</int>
-  <int value="11" label="RESERVED">Reserved</int>
-  <int value="12" label="RESERVED">Reserved</int>
-  <int value="13" label="RESERVED">Reserved</int>
-  <int value="14" label="RESERVED">Reserved</int>
-  <int value="15" label="RESERVED">Reserved</int>
-  <int value="16" label="BAD_KEY_R11">Key bad, policy OK, pre-R11</int>
-  <int value="17" label="UNUSED">Unused</int>
-  <int value="18" label="BAD_KEY">Key bad, policy OK</int>
-  <int value="19" label="RESERVED">Reserved</int>
-  <int value="20" label="BAD_KEY_BAD_POLICY_R11">
-    Key bad, policy bad, pre-R11
-  </int>
-  <int value="21" label="UNUSED">Unused</int>
-  <int value="22" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
-  <int value="23" label="RESERVED">Reserved</int>
-  <int value="24" label="BAD_KEY_NO_POLICY_R11">
-    Key bad, policy bad, pre-R11
-  </int>
-  <int value="25" label="UNUSED">Unused</int>
-  <int value="26" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
-  <int value="27" label="RESERVED">Reserved</int>
-  <int value="28" label="RESERVED">Reserved</int>
-  <int value="29" label="RESERVED">Reserved</int>
-  <int value="30" label="RESERVED">Reserved</int>
-  <int value="31" label="RESERVED">Reserved</int>
-  <int value="32" label="NO_KEY_R11">No key, policy OK, pre-R11</int>
-  <int value="33" label="UNUSED">Unused</int>
-  <int value="34" label="NO_KEY">No key, policy OK</int>
-  <int value="35" label="RESERVED">RESERVED</int>
-  <int value="36" label="NO_KEY_BAD_POLICY_R11">
-    No key, policy bad, pre-R11
-  </int>
-  <int value="37" label="UNUSED">Unused</int>
-  <int value="38" label="NO_KEY_BAD_POLICY">No key, bad policy</int>
-  <int value="39" label="RESERVED">Reserved</int>
-  <int value="40" label="NO_KEY_NO_POLICY_R11">Un-owned, pre-R11</int>
-  <int value="41" label="UNUSED">Unused</int>
-  <int value="42" label="NO_KEY_NO_POLICY">Un-owned</int>
-  <int value="43" label="RESERVED">Reserved</int>
-</enum>
-
-<enum name="LoginReauthReasons" type="int">
-  <int value="0" label="None">
-    No reason recorded so far, nothing to report. This value should never be
-    reported in histogram.
-  </int>
-  <int value="1" label="Other">Legacy profile holders.</int>
-  <int value="2" label="InvalidTokenHandle">
-    Password changed, revoked credentials, account deleted.
-  </int>
-  <int value="3" label="IncorrectPwdEntered">
-    Incorrect password entered 3 times at the pod.
-  </int>
-  <int value="4" label="IncorrectSAMLPwdEntered">
-    Incorrect password entered by a SAML user once. OS would show a tooltip
-    offering user to complete the online sign-in.
-  </int>
-  <int value="5" label="SAMLReauthPolicy">
-    Company policy required re-auth for SAML users.
-  </int>
-  <int value="6" label="MissingCryptohome">
-    Cryptohome is missing, most likely due to deletion during garbage
-    collection.
-  </int>
-  <int value="7" label="SyncFailed">
-    After prior login, OS failed to connect to the sync with the existing RT.
-    This could be due to a deleted account, password changed, account revoked,
-    etc.
-  </int>
-  <int value="8" label="PwdUpdateSkipped">
-    User cancelled the password change prompt. Chrome OS has to continue to send
-    the user through the online flow until user updates their cryptohome
-    password or agrees to start the new cryptohome.
-  </int>
-</enum>
-
-<enum name="LoginStateKeyGenerationStatus" type="int">
-  <summary>The result of a state key generation operation.</summary>
-  <int value="0" label="GENERATION_METHOD_IDENTIFIER_HASH">
-    Successfully generated state keys from machine identifiers.
-  </int>
-  <int value="1" label="GENERATION_METHOD_HMAC_DEVICE_SECRET">
-    Successfully generated state keys from stable device secret.
-  </int>
-  <int value="2" label="MISSING_IDENTIFIERS">
-    Failed due to missing machine IDs.
-  </int>
-  <int value="3" label="BAD_DEVICE_SECRET">
-    Failed due to invalid device secret input.
-  </int>
-  <int value="4" label="HMAC_INIT_FAILURE">HMAC initialization failed.</int>
-  <int value="5" label="HMAC_SIGN_FAILURE">HMAC computation failed.</int>
-</enum>
-
-<enum name="LoginSuccessReason" type="int">
-  <int value="0" label="OFFLINE_AND_ONLINE">
-    Login success offline and online
-  </int>
-  <int value="1" label="OFFLINE_ONLY">Login success offline only</int>
-</enum>
-
-<enum name="LoginUserType" type="int">
-  <int value="0" label="INCOGNITO_NORMAL">Incognito Normal</int>
-  <int value="1" label="OWNER_NORMAL">Owner Normal</int>
-  <int value="2" label="OTHER_NORMAL">Other Normal</int>
-  <int value="3" label="INCOGNITO_DEVELOPER">Incognito Dev</int>
-  <int value="4" label="OWNER_DEVELOPER">Owner Dev</int>
-  <int value="5" label="OTHER_DEVELOPER">Other Dev</int>
-</enum>
-
-<enum name="MacBookVersions" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="MacBook5,X"/>
-  <int value="2" label="MacBook6,X"/>
-  <int value="3" label="MacBook7,X"/>
-  <int value="4" label="MacBook8,X"/>
-  <int value="5" label="MacBookPro11,X"/>
-  <int value="6" label="MacBookPro12,X"/>
-  <int value="7" label="MacBookPro13,X"/>
-  <int value="8" label="MacBookAir5,X"/>
-  <int value="9" label="MacBookAir6,X"/>
-  <int value="10" label="MacBookAir7,X"/>
-  <int value="11" label="MacBookAir8,X"/>
-  <int value="12" label="MacBookAir3,X"/>
-  <int value="13" label="MacBookAir4,X"/>
-  <int value="14" label="MacBook4,X"/>
-  <int value="15" label="MacBook9,X"/>
-  <int value="16" label="MacBook10,X"/>
-  <int value="17" label="MacBookPro10,X"/>
-  <int value="18" label="MacBookPro9,X"/>
-  <int value="19" label="MacBookPro8,X"/>
-  <int value="20" label="MacBookPro7,X"/>
-  <int value="21" label="MacBookPro6,X"/>
-  <int value="22" label="MacBookPro5,X"/>
-</enum>
-
-<enum name="MainFrameStorable" type="int">
-  <int value="0" label="Storable"/>
-  <int value="1" label="cache-control: no-store"/>
-</enum>
-
-<enum name="MainThreadScrollingReason" type="int">
-  <int value="0" label="Not scrolling on main"/>
-  <int value="1" label="Background attachment fixed"/>
-  <int value="2" label="Non layer viewport constrained"/>
-  <int value="3" label="Threaded scrolling disabled"/>
-  <int value="4" label="Scrollbar scrolling"/>
-  <int value="5" label="Page overlay"/>
-  <int value="6" label="Non-fast scrollable region"/>
-  <int value="7" label="Event handlers"/>
-  <int value="8" label="Failed hit test"/>
-  <int value="9" label="No scrolling layer"/>
-  <int value="10" label="Not scrollable"/>
-  <int value="11" label="Continuing main thread scroll"/>
-  <int value="12" label="Non-invertible transform"/>
-  <int value="13" label="Page based scrolling"/>
-  <int value="14" label="Animating scroll on main thread"/>
-  <int value="15" label="Has sticky position objects"/>
-  <int value="16" label="Requires hit testing on custom scrollbars"/>
-  <int value="17" label="Has opacity"/>
-  <int value="18" label="Has transform"/>
-  <int value="19" label="Background not opaque in rect"/>
-  <int value="20" label="Has border radius"/>
-  <int value="21" label="Has clip related property"/>
-  <int value="22" label="Has box shadow from non-root layer"/>
-</enum>
-
-<enum name="MakeChromeDefaultResult" type="int">
-  <int value="0" label="Chrome made default"/>
-  <int value="1" label="Dialog closed without explicit choice"/>
-  <int value="2" label="Other browser selected"/>
-  <int value="3" label="Chrome made default + Relaunch in Metro (obsolete)"/>
-</enum>
-
-<enum name="ManagedUserPasswordChange" type="int">
-  <int value="0" label="OK_MANAGER">Changed in manager session</int>
-  <int value="1" label="OK_MANGED">Changed in supervised user session</int>
-  <int value="2" label="FAILED_NO_MASTER_KEY">Master key not found</int>
-  <int value="3" label="FAILED_NO_SIGNATURE_KEY">
-    Signature or encryption key not found
-  </int>
-  <int value="4" label="FAILED_NO_PASSWORD_DATA">Password data not found</int>
-  <int value="5" label="FAILED_MASTER_KEY_FAILURE">
-    Manager key authorization failed
-  </int>
-  <int value="6" label="FAILED_LOAD_DATA_FAILURE">
-    Could not load new password data upon supervised user signin
-  </int>
-  <int value="7" label="FAILED_INCOMPLETE_DATA_FAILURE">
-    Incomplete password data loaded upon supervised user signin.
-  </int>
-  <int value="8" label="FAILED_AUTHENTICATION_FAILURE">
-    Authentication failure while changing password during supervised user
-    signin.
-  </int>
-  <int value="9" label="FAILED_STORE_DATA">
-    Could not store new password data for supervised user.
-  </int>
-</enum>
-
-<enum name="ManifestFetchResultType" type="int">
-  <int value="0" label="Fetch succeeded"/>
-  <int value="1" label="Fetch failed because of empty URL"/>
-  <int value="2" label="Fetch failed (unspecified reason)"/>
-</enum>
-
-<enum name="MappedCSSProperties" type="int">
-<!-- Generated from third_party/WebKit/Source/core/frame/UseCounter.cpp -->
-
-  <int value="1" label="Total Pages Measured"/>
-  <int value="2" label="color"/>
-  <int value="3" label="direction"/>
-  <int value="4" label="display"/>
-  <int value="5" label="font"/>
-  <int value="6" label="font-family"/>
-  <int value="7" label="font-size"/>
-  <int value="8" label="font-style"/>
-  <int value="9" label="font-variant"/>
-  <int value="10" label="font-weight"/>
-  <int value="11" label="text-rendering"/>
-  <int value="12" label="alias-webkit-font-feature-settings"/>
-  <int value="13" label="font-kerning"/>
-  <int value="14" label="webkit-font-smoothing"/>
-  <int value="15" label="font-variant-ligatures"/>
-  <int value="16" label="webkit-locale"/>
-  <int value="17" label="webkit-text-orientation"/>
-  <int value="18" label="webkit-writing-mode"/>
-  <int value="19" label="zoom"/>
-  <int value="20" label="line-height"/>
-  <int value="21" label="background"/>
-  <int value="22" label="background-attachment"/>
-  <int value="23" label="background-clip"/>
-  <int value="24" label="background-color"/>
-  <int value="25" label="background-image"/>
-  <int value="26" label="background-origin"/>
-  <int value="27" label="background-position"/>
-  <int value="28" label="background-position-x"/>
-  <int value="29" label="background-position-y"/>
-  <int value="30" label="background-repeat"/>
-  <int value="31" label="background-repeat-x"/>
-  <int value="32" label="background-repeat-y"/>
-  <int value="33" label="background-size"/>
-  <int value="34" label="border"/>
-  <int value="35" label="border-bottom"/>
-  <int value="36" label="border-bottom-color"/>
-  <int value="37" label="border-bottom-left-radius"/>
-  <int value="38" label="border-bottom-right-radius"/>
-  <int value="39" label="border-bottom-style"/>
-  <int value="40" label="border-bottom-width"/>
-  <int value="41" label="border-collapse"/>
-  <int value="42" label="border-color"/>
-  <int value="43" label="border-image"/>
-  <int value="44" label="border-image-outset"/>
-  <int value="45" label="border-image-repeat"/>
-  <int value="46" label="border-image-slice"/>
-  <int value="47" label="border-image-source"/>
-  <int value="48" label="border-image-width"/>
-  <int value="49" label="border-left"/>
-  <int value="50" label="border-left-color"/>
-  <int value="51" label="border-left-style"/>
-  <int value="52" label="border-left-width"/>
-  <int value="53" label="border-radius"/>
-  <int value="54" label="border-right"/>
-  <int value="55" label="border-right-color"/>
-  <int value="56" label="border-right-style"/>
-  <int value="57" label="border-right-width"/>
-  <int value="58" label="border-spacing"/>
-  <int value="59" label="border-style"/>
-  <int value="60" label="border-top"/>
-  <int value="61" label="border-top-color"/>
-  <int value="62" label="border-top-left-radius"/>
-  <int value="63" label="border-top-right-radius"/>
-  <int value="64" label="border-top-style"/>
-  <int value="65" label="border-top-width"/>
-  <int value="66" label="border-width"/>
-  <int value="67" label="bottom"/>
-  <int value="68" label="box-shadow"/>
-  <int value="69" label="box-sizing"/>
-  <int value="70" label="caption-side"/>
-  <int value="71" label="clear"/>
-  <int value="72" label="clip"/>
-  <int value="73" label="alias-webkit-clip-path"/>
-  <int value="74" label="content"/>
-  <int value="75" label="counter-increment"/>
-  <int value="76" label="counter-reset"/>
-  <int value="77" label="cursor"/>
-  <int value="78" label="empty-cells"/>
-  <int value="79" label="float"/>
-  <int value="80" label="font-stretch"/>
-  <int value="81" label="height"/>
-  <int value="82" label="image-rendering"/>
-  <int value="83" label="left"/>
-  <int value="84" label="letter-spacing"/>
-  <int value="85" label="list-style"/>
-  <int value="86" label="list-style-image"/>
-  <int value="87" label="list-style-position"/>
-  <int value="88" label="list-style-type"/>
-  <int value="89" label="margin"/>
-  <int value="90" label="margin-bottom"/>
-  <int value="91" label="margin-left"/>
-  <int value="92" label="margin-right"/>
-  <int value="93" label="margin-top"/>
-  <int value="94" label="max-height"/>
-  <int value="95" label="max-width"/>
-  <int value="96" label="min-height"/>
-  <int value="97" label="min-width"/>
-  <int value="98" label="opacity"/>
-  <int value="99" label="orphans"/>
-  <int value="100" label="outline"/>
-  <int value="101" label="outline-color"/>
-  <int value="102" label="outline-offset"/>
-  <int value="103" label="outline-style"/>
-  <int value="104" label="outline-width"/>
-  <int value="105" label="overflow"/>
-  <int value="106" label="overflow-wrap"/>
-  <int value="107" label="overflow-x"/>
-  <int value="108" label="overflow-y"/>
-  <int value="109" label="padding"/>
-  <int value="110" label="padding-bottom"/>
-  <int value="111" label="padding-left"/>
-  <int value="112" label="padding-right"/>
-  <int value="113" label="padding-top"/>
-  <int value="114" label="page"/>
-  <int value="115" label="page-break-after"/>
-  <int value="116" label="page-break-before"/>
-  <int value="117" label="page-break-inside"/>
-  <int value="118" label="pointer-events"/>
-  <int value="119" label="position"/>
-  <int value="120" label="quotes"/>
-  <int value="121" label="resize"/>
-  <int value="122" label="right"/>
-  <int value="123" label="size"/>
-  <int value="124" label="src"/>
-  <int value="125" label="speak"/>
-  <int value="126" label="table-layout"/>
-  <int value="127" label="tab-size"/>
-  <int value="128" label="text-align"/>
-  <int value="129" label="text-decoration"/>
-  <int value="130" label="text-indent"/>
-  <int value="131" label="text-line-through"/>
-  <int value="132" label="text-line-through-color"/>
-  <int value="133" label="text-line-through-mode"/>
-  <int value="134" label="text-line-through-style"/>
-  <int value="135" label="text-line-through-width"/>
-  <int value="136" label="text-overflow"/>
-  <int value="137" label="text-overline"/>
-  <int value="138" label="text-overline-color"/>
-  <int value="139" label="text-overline-mode"/>
-  <int value="140" label="text-overline-style"/>
-  <int value="141" label="text-overline-width"/>
-  <int value="142" label="text-shadow"/>
-  <int value="143" label="text-transform"/>
-  <int value="144" label="text-underline"/>
-  <int value="145" label="text-underline-color"/>
-  <int value="146" label="text-underline-mode"/>
-  <int value="147" label="text-underline-style"/>
-  <int value="148" label="text-underline-width"/>
-  <int value="149" label="top"/>
-  <int value="150" label="transition"/>
-  <int value="151" label="transition-delay"/>
-  <int value="152" label="transition-duration"/>
-  <int value="153" label="transition-property"/>
-  <int value="154" label="transition-timing-function"/>
-  <int value="155" label="unicode-bidi"/>
-  <int value="156" label="unicode-range"/>
-  <int value="157" label="vertical-align"/>
-  <int value="158" label="visibility"/>
-  <int value="159" label="white-space"/>
-  <int value="160" label="widows"/>
-  <int value="161" label="width"/>
-  <int value="162" label="word-break"/>
-  <int value="163" label="word-spacing"/>
-  <int value="164" label="word-wrap"/>
-  <int value="165" label="z-index"/>
-  <int value="166" label="alias-webkit-animation"/>
-  <int value="167" label="alias-webkit-animation-delay"/>
-  <int value="168" label="alias-webkit-animation-direction"/>
-  <int value="169" label="alias-webkit-animation-duration"/>
-  <int value="170" label="alias-webkit-animation-fill-mode"/>
-  <int value="171" label="alias-webkit-animation-iteration-count"/>
-  <int value="172" label="alias-webkit-animation-name"/>
-  <int value="173" label="alias-webkit-animation-play-state"/>
-  <int value="174" label="alias-webkit-animation-timing-function"/>
-  <int value="175" label="webkit-appearance"/>
-  <int value="176" label="webkit-aspect-ratio"/>
-  <int value="177" label="alias-webkit-backface-visibility"/>
-  <int value="178" label="webkit-background-clip"/>
-  <int value="179" label="webkit-background-composite"/>
-  <int value="180" label="webkit-background-origin"/>
-  <int value="181" label="alias-webkit-background-size"/>
-  <int value="182" label="webkit-border-after"/>
-  <int value="183" label="webkit-border-after-color"/>
-  <int value="184" label="webkit-border-after-style"/>
-  <int value="185" label="webkit-border-after-width"/>
-  <int value="186" label="webkit-border-before"/>
-  <int value="187" label="webkit-border-before-color"/>
-  <int value="188" label="webkit-border-before-style"/>
-  <int value="189" label="webkit-border-before-width"/>
-  <int value="190" label="webkit-border-end"/>
-  <int value="191" label="webkit-border-end-color"/>
-  <int value="192" label="webkit-border-end-style"/>
-  <int value="193" label="webkit-border-end-width"/>
-  <int value="194" label="webkit-border-fit"/>
-  <int value="195" label="webkit-border-horizontal-spacing"/>
-  <int value="196" label="webkit-border-image"/>
-  <int value="197" label="alias-webkit-border-radius"/>
-  <int value="198" label="webkit-border-start"/>
-  <int value="199" label="webkit-border-start-color"/>
-  <int value="200" label="webkit-border-start-style"/>
-  <int value="201" label="webkit-border-start-width"/>
-  <int value="202" label="webkit-border-vertical-spacing"/>
-  <int value="203" label="webkit-box-align"/>
-  <int value="204" label="webkit-box-direction"/>
-  <int value="205" label="webkit-box-flex"/>
-  <int value="206" label="webkit-box-flex-group"/>
-  <int value="207" label="webkit-box-lines"/>
-  <int value="208" label="webkit-box-ordinal-group"/>
-  <int value="209" label="webkit-box-orient"/>
-  <int value="210" label="webkit-box-pack"/>
-  <int value="211" label="webkit-box-reflect"/>
-  <int value="212" label="alias-webkit-box-shadow"/>
-  <int value="213" label="webkit-color-correction"/>
-  <int value="214" label="webkit-column-axis"/>
-  <int value="215" label="webkit-column-break-after"/>
-  <int value="216" label="webkit-column-break-before"/>
-  <int value="217" label="webkit-column-break-inside"/>
-  <int value="218" label="alias-webkit-column-count"/>
-  <int value="219" label="alias-webkit-column-gap"/>
-  <int value="220" label="webkit-column-progression"/>
-  <int value="221" label="alias-webkit-column-rule"/>
-  <int value="222" label="alias-webkit-column-rule-color"/>
-  <int value="223" label="alias-webkit-column-rule-style"/>
-  <int value="224" label="alias-webkit-column-rule-width"/>
-  <int value="225" label="alias-webkit-column-span"/>
-  <int value="226" label="alias-webkit-column-width"/>
-  <int value="227" label="alias-webkit-columns"/>
-  <int value="228" label="webkit-box-decoration-break"/>
-  <int value="229" label="webkit-filter"/>
-  <int value="230" label="align-content"/>
-  <int value="231" label="align-items"/>
-  <int value="232" label="align-self"/>
-  <int value="233" label="flex"/>
-  <int value="234" label="flex-basis"/>
-  <int value="235" label="flex-direction"/>
-  <int value="236" label="flex-flow"/>
-  <int value="237" label="flex-grow"/>
-  <int value="238" label="flex-shrink"/>
-  <int value="239" label="flex-wrap"/>
-  <int value="240" label="justify-content"/>
-  <int value="241" label="webkit-font-size-delta"/>
-  <int value="242" label="grid-template-columns"/>
-  <int value="243" label="grid-template-rows"/>
-  <int value="244" label="grid-column-start"/>
-  <int value="245" label="grid-column-end"/>
-  <int value="246" label="grid-row-start"/>
-  <int value="247" label="grid-row-end"/>
-  <int value="248" label="grid-column"/>
-  <int value="249" label="grid-row"/>
-  <int value="250" label="grid-auto-flow"/>
-  <int value="251" label="webkit-highlight"/>
-  <int value="252" label="webkit-hyphenate-character"/>
-  <int value="253" label="webkit-hyphenate-limit-after"/>
-  <int value="254" label="webkit-hyphenate-limit-before"/>
-  <int value="255" label="webkit-hyphenate-limit-lines"/>
-  <int value="256" label="webkit-hyphens"/>
-  <int value="257" label="webkit-line-box-contain"/>
-  <int value="258" label="webkit-line-align"/>
-  <int value="259" label="webkit-line-break"/>
-  <int value="260" label="webkit-line-clamp"/>
-  <int value="261" label="webkit-line-grid"/>
-  <int value="262" label="webkit-line-snap"/>
-  <int value="263" label="webkit-logical-width"/>
-  <int value="264" label="webkit-logical-height"/>
-  <int value="265" label="webkit-margin-after-collapse"/>
-  <int value="266" label="webkit-margin-before-collapse"/>
-  <int value="267" label="webkit-margin-bottom-collapse"/>
-  <int value="268" label="webkit-margin-top-collapse"/>
-  <int value="269" label="webkit-margin-collapse"/>
-  <int value="270" label="webkit-margin-after"/>
-  <int value="271" label="webkit-margin-before"/>
-  <int value="272" label="webkit-margin-end"/>
-  <int value="273" label="webkit-margin-start"/>
-  <int value="274" label="webkit-marquee"/>
-  <int value="275" label="webkit-marquee-direction"/>
-  <int value="276" label="webkit-marquee-increment"/>
-  <int value="277" label="webkit-marquee-repetition"/>
-  <int value="278" label="webkit-marquee-speed"/>
-  <int value="279" label="webkit-marquee-style"/>
-  <int value="280" label="webkit-mask"/>
-  <int value="281" label="webkit-mask-box-image"/>
-  <int value="282" label="webkit-mask-box-image-outset"/>
-  <int value="283" label="webkit-mask-box-image-repeat"/>
-  <int value="284" label="webkit-mask-box-image-slice"/>
-  <int value="285" label="webkit-mask-box-image-source"/>
-  <int value="286" label="webkit-mask-box-image-width"/>
-  <int value="287" label="webkit-mask-clip"/>
-  <int value="288" label="webkit-mask-composite"/>
-  <int value="289" label="webkit-mask-image"/>
-  <int value="290" label="webkit-mask-origin"/>
-  <int value="291" label="webkit-mask-position"/>
-  <int value="292" label="webkit-mask-position-x"/>
-  <int value="293" label="webkit-mask-position-y"/>
-  <int value="294" label="webkit-mask-repeat"/>
-  <int value="295" label="webkit-mask-repeat-x"/>
-  <int value="296" label="webkit-mask-repeat-y"/>
-  <int value="297" label="webkit-mask-size"/>
-  <int value="298" label="webkit-max-logical-width"/>
-  <int value="299" label="webkit-max-logical-height"/>
-  <int value="300" label="webkit-min-logical-width"/>
-  <int value="301" label="webkit-min-logical-height"/>
-  <int value="302" label="webkit-nbsp-mode"/>
-  <int value="303" label="order"/>
-  <int value="304" label="webkit-padding-after"/>
-  <int value="305" label="webkit-padding-before"/>
-  <int value="306" label="webkit-padding-end"/>
-  <int value="307" label="webkit-padding-start"/>
-  <int value="308" label="alias-webkit-perspective"/>
-  <int value="309" label="alias-webkit-perspective-origin"/>
-  <int value="310" label="webkit-perspective-origin-x"/>
-  <int value="311" label="webkit-perspective-origin-y"/>
-  <int value="312" label="webkit-print-color-adjust"/>
-  <int value="313" label="webkit-rtl-ordering"/>
-  <int value="314" label="webkit-ruby-position"/>
-  <int value="315" label="webkit-text-combine"/>
-  <int value="316" label="webkit-text-decorations-in-effect"/>
-  <int value="317" label="webkit-text-emphasis"/>
-  <int value="318" label="webkit-text-emphasis-color"/>
-  <int value="319" label="webkit-text-emphasis-position"/>
-  <int value="320" label="webkit-text-emphasis-style"/>
-  <int value="321" label="webkit-text-fill-color"/>
-  <int value="322" label="webkit-text-security"/>
-  <int value="323" label="webkit-text-stroke"/>
-  <int value="324" label="webkit-text-stroke-color"/>
-  <int value="325" label="webkit-text-stroke-width"/>
-  <int value="326" label="alias-webkit-transform"/>
-  <int value="327" label="alias-webkit-transform-origin"/>
-  <int value="328" label="webkit-transform-origin-x"/>
-  <int value="329" label="webkit-transform-origin-y"/>
-  <int value="330" label="webkit-transform-origin-z"/>
-  <int value="331" label="alias-webkit-transform-style"/>
-  <int value="332" label="alias-webkit-transition"/>
-  <int value="333" label="alias-webkit-transition-delay"/>
-  <int value="334" label="alias-webkit-transition-duration"/>
-  <int value="335" label="alias-webkit-transition-property"/>
-  <int value="336" label="alias-webkit-transition-timing-function"/>
-  <int value="337" label="webkit-user-drag"/>
-  <int value="338" label="webkit-user-modify"/>
-  <int value="339" label="alias-webkit-user-select"/>
-  <int value="340" label="webkit-flow-into"/>
-  <int value="341" label="webkit-flow-from"/>
-  <int value="342" label="webkit-region-fragment"/>
-  <int value="343" label="webkit-region-break-after"/>
-  <int value="344" label="webkit-region-break-before"/>
-  <int value="345" label="webkit-region-break-inside"/>
-  <int value="346" label="shape-inside"/>
-  <int value="347" label="shape-outside"/>
-  <int value="348" label="shape-margin"/>
-  <int value="349" label="shape-padding"/>
-  <int value="350" label="webkit-wrap-flow"/>
-  <int value="351" label="webkit-wrap-through"/>
-  <int value="352" label="webkit-wrap"/>
-  <int value="353" label="webkit-tap-highlight-color"/>
-  <int value="354" label="webkit-app-region"/>
-  <int value="355" label="clip-path"/>
-  <int value="356" label="clip-rule"/>
-  <int value="357" label="mask"/>
-  <int value="358" label="enable-background"/>
-  <int value="359" label="filter"/>
-  <int value="360" label="flood-color"/>
-  <int value="361" label="flood-opacity"/>
-  <int value="362" label="lighting-color"/>
-  <int value="363" label="stop-color"/>
-  <int value="364" label="stop-opacity"/>
-  <int value="365" label="color-interpolation"/>
-  <int value="366" label="color-interpolation-filters"/>
-  <int value="367" label="color-profile"/>
-  <int value="368" label="color-rendering"/>
-  <int value="369" label="fill"/>
-  <int value="370" label="fill-opacity"/>
-  <int value="371" label="fill-rule"/>
-  <int value="372" label="marker"/>
-  <int value="373" label="marker-end"/>
-  <int value="374" label="marker-mid"/>
-  <int value="375" label="marker-start"/>
-  <int value="376" label="mask-type"/>
-  <int value="377" label="shape-rendering"/>
-  <int value="378" label="stroke"/>
-  <int value="379" label="stroke-dasharray"/>
-  <int value="380" label="stroke-dashoffset"/>
-  <int value="381" label="stroke-linecap"/>
-  <int value="382" label="stroke-linejoin"/>
-  <int value="383" label="stroke-miterlimit"/>
-  <int value="384" label="stroke-opacity"/>
-  <int value="385" label="stroke-width"/>
-  <int value="386" label="alignment-baseline"/>
-  <int value="387" label="baseline-shift"/>
-  <int value="388" label="dominant-baseline"/>
-  <int value="389" label="glyph-orientation-horizontal"/>
-  <int value="390" label="glyph-orientation-vertical"/>
-  <int value="391" label="kerning"/>
-  <int value="392" label="text-anchor"/>
-  <int value="393" label="vector-effect"/>
-  <int value="394" label="writing-mode"/>
-  <int value="395" label="webkit-svg-shadow"/>
-  <int value="396" label="webkit-cursor-visibility"/>
-  <int value="397" label="image-orientation"/>
-  <int value="398" label="image-resolution"/>
-  <int value="399" label="webkit-blend-mode"/>
-  <int value="400" label="webkit-background-blend-mode"/>
-  <int value="401" label="text-decoration-line"/>
-  <int value="402" label="text-decoration-style"/>
-  <int value="403" label="text-decoration-color"/>
-  <int value="404" label="text-align-last"/>
-  <int value="405" label="text-underline-position"/>
-  <int value="406" label="max-zoom"/>
-  <int value="407" label="min-zoom"/>
-  <int value="408" label="orientation"/>
-  <int value="409" label="user-zoom"/>
-  <int value="410" label="webkit-dashboard-region"/>
-  <int value="411" label="webkit-overflow-scrolling"/>
-  <int value="412" label="webkit-app-region"/>
-  <int value="413" label="alias-webkit-filter"/>
-  <int value="414" label="webkit-box-decoration-break"/>
-  <int value="415" label="webkit-tap-highlight-color"/>
-  <int value="416" label="buffered-rendering"/>
-  <int value="417" label="grid-auto-rows"/>
-  <int value="418" label="grid-auto-columns"/>
-  <int value="419" label="background-blend-mode"/>
-  <int value="420" label="mix-blend-mode"/>
-  <int value="421" label="touch-action"/>
-  <int value="422" label="grid-area"/>
-  <int value="423" label="grid-template-areas"/>
-  <int value="424" label="animation"/>
-  <int value="425" label="animation-delay"/>
-  <int value="426" label="animation-direction"/>
-  <int value="427" label="animation-duration"/>
-  <int value="428" label="animation-fill-mode"/>
-  <int value="429" label="animation-iteration-count"/>
-  <int value="430" label="animation-name"/>
-  <int value="431" label="animation-play-state"/>
-  <int value="432" label="animation-timing-function"/>
-  <int value="433" label="object-fit"/>
-  <int value="434" label="paint-order"/>
-  <int value="435" label="mask-source-type"/>
-  <int value="436" label="isolation"/>
-  <int value="437" label="object-position"/>
-  <int value="438" label="internal-callback"/>
-  <int value="439" label="shape-image-threshold"/>
-  <int value="440" label="column-fill"/>
-  <int value="441" label="text-justify"/>
-  <int value="442" label="touch-action-delay"/>
-  <int value="443" label="justify-self"/>
-  <int value="444" label="scroll-behavior"/>
-  <int value="445" label="will-change"/>
-  <int value="446" label="transform"/>
-  <int value="447" label="transform-origin"/>
-  <int value="448" label="transform-style"/>
-  <int value="449" label="perspective"/>
-  <int value="450" label="perspective-origin"/>
-  <int value="451" label="backface-visibility"/>
-  <int value="452" label="grid-template"/>
-  <int value="453" label="grid"/>
-  <int value="454" label="all"/>
-  <int value="455" label="justify-items"/>
-  <int value="456" label="scroll-blocks-on"/>
-  <int value="457" label="alias-motion-path"/>
-  <int value="458" label="alias-motion-offset"/>
-  <int value="459" label="alias-motion-rotation"/>
-  <int value="460" label="motion"/>
-  <int value="461" label="x"/>
-  <int value="462" label="y"/>
-  <int value="463" label="rx"/>
-  <int value="464" label="ry"/>
-  <int value="465" label="font-size-adjust"/>
-  <int value="466" label="cx"/>
-  <int value="467" label="cy"/>
-  <int value="468" label="r"/>
-  <int value="469" label="alias-epub-caption-side"/>
-  <int value="470" label="alias-epub-text-combine"/>
-  <int value="471" label="alias-epub-text-emphasis"/>
-  <int value="472" label="alias-epub-text-emphasis-color"/>
-  <int value="473" label="alias-epub-text-emphasis-style"/>
-  <int value="474" label="alias-epub-text-orientation"/>
-  <int value="475" label="alias-epub-text-transform"/>
-  <int value="476" label="alias-epub-word-break"/>
-  <int value="477" label="alias-epub-writing-mode"/>
-  <int value="478" label="alias-webkit-align-content"/>
-  <int value="479" label="alias-webkit-align-items"/>
-  <int value="480" label="alias-webkit-align-self"/>
-  <int value="481" label="alias-webkit-border-bottom-left-radius"/>
-  <int value="482" label="alias-webkit-border-bottom-right-radius"/>
-  <int value="483" label="alias-webkit-border-top-left-radius"/>
-  <int value="484" label="alias-webkit-border-top-right-radius"/>
-  <int value="485" label="alias-webkit-box-sizing"/>
-  <int value="486" label="alias-webkit-flex"/>
-  <int value="487" label="alias-webkit-flex-basis"/>
-  <int value="488" label="alias-webkit-flex-direction"/>
-  <int value="489" label="alias-webkit-flex-flow"/>
-  <int value="490" label="alias-webkit-flex-grow"/>
-  <int value="491" label="alias-webkit-flex-shrink"/>
-  <int value="492" label="alias-webkit-flex-wrap"/>
-  <int value="493" label="alias-webkit-justify-content"/>
-  <int value="494" label="alias-webkit-opacity"/>
-  <int value="495" label="alias-webkit-order"/>
-  <int value="496" label="alias-webkit-shape-image-threshold"/>
-  <int value="497" label="alias-webkit-shape-margin"/>
-  <int value="498" label="alias-webkit-shape-outside"/>
-  <int value="499" label="scroll-snap-type"/>
-  <int value="500" label="scroll-snap-points-x"/>
-  <int value="501" label="scroll-snap-points-y"/>
-  <int value="502" label="scroll-snap-coordinate"/>
-  <int value="503" label="scroll-snap-destination"/>
-  <int value="504" label="translate"/>
-  <int value="505" label="rotate"/>
-  <int value="506" label="scale"/>
-  <int value="507" label="image-orientation"/>
-  <int value="508" label="backdrop-filter"/>
-  <int value="509" label="text-combine-upright"/>
-  <int value="510" label="text-orientation"/>
-  <int value="511" label="grid-column-gap"/>
-  <int value="512" label="grid-row-gap"/>
-  <int value="513" label="grid-gap"/>
-  <int value="514" label="font-feature-settings"/>
-  <int value="515" label="variable"/>
-  <int value="516" label="font-display"/>
-  <int value="517" label="contain"/>
-  <int value="518" label="d"/>
-  <int value="519" label="snap-height"/>
-  <int value="520" label="break-after"/>
-  <int value="521" label="break-before"/>
-  <int value="522" label="break-inside"/>
-  <int value="523" label="column-count"/>
-  <int value="524" label="column-gap"/>
-  <int value="525" label="column-rule"/>
-  <int value="526" label="column-rule-color"/>
-  <int value="527" label="column-rule-style"/>
-  <int value="528" label="column-rule-width"/>
-  <int value="529" label="column-span"/>
-  <int value="530" label="column-width"/>
-  <int value="531" label="columns"/>
-  <int value="532" label="apply-at-rule"/>
-  <int value="533" label="font-variant-caps"/>
-  <int value="534" label="hyphens"/>
-  <int value="535" label="font-variant-numeric"/>
-  <int value="536" label="text-size-adjust"/>
-  <int value="537" label="alias-webkit-text-size-adjust"/>
-  <int value="538" label="overflow-anchor"/>
-  <int value="539" label="user-select"/>
-  <int value="540" label="offset-distance"/>
-  <int value="541" label="offset-path"/>
-  <int value="542" label="offset-rotation"/>
-  <int value="543" label="offset"/>
-  <int value="544" label="offset-anchor"/>
-  <int value="545" label="offset-position"/>
-  <int value="546" label="text-decoration-skip"/>
-  <int value="547" label="caret-color"/>
-  <int value="548" label="offset-rotate"/>
-  <int value="549" label="font-variation-settings"/>
-  <int value="550" label="inline-size"/>
-  <int value="551" label="block-size"/>
-  <int value="552" label="min-inline-size"/>
-  <int value="553" label="min-block-size"/>
-  <int value="554" label="max-inline-size"/>
-  <int value="555" label="max-block-size"/>
-  <int value="556" label="line-break"/>
-</enum>
-
-<enum name="MappedEditingCommands" type="int">
-<!-- Generated from third_party/WebKit/Source/core/editing/EditorCommand.cpp -->
-
-  <int value="1" label="AlignJustified"/>
-  <int value="2" label="AlignLeft"/>
-  <int value="3" label="AlignRight"/>
-  <int value="4" label="BackColor"/>
-  <int value="5" label="BackwardDelete"/>
-  <int value="6" label="Bold"/>
-  <int value="7" label="Copy"/>
-  <int value="8" label="CreateLink"/>
-  <int value="9" label="Cut"/>
-  <int value="10" label="DefaultParagraphSeparator"/>
-  <int value="11" label="Delete"/>
-  <int value="12" label="DeleteBackward"/>
-  <int value="13" label="DeleteBackwardByDecomposingPreviousCharacter"/>
-  <int value="14" label="DeleteForward"/>
-  <int value="15" label="DeleteToBeginningOfLine"/>
-  <int value="16" label="DeleteToBeginningOfParagraph"/>
-  <int value="17" label="DeleteToEndOfLine"/>
-  <int value="18" label="DeleteToEndOfParagraph"/>
-  <int value="19" label="DeleteToMark"/>
-  <int value="20" label="DeleteWordBackward"/>
-  <int value="21" label="DeleteWordForward"/>
-  <int value="22" label="FindString"/>
-  <int value="23" label="FontName"/>
-  <int value="24" label="FontSize"/>
-  <int value="25" label="FontSizeDelta"/>
-  <int value="26" label="ForeColor"/>
-  <int value="27" label="FormatBlock"/>
-  <int value="28" label="ForwardDelete"/>
-  <int value="29" label="HiliteColor"/>
-  <int value="30" label="IgnoreSpelling"/>
-  <int value="31" label="Indent"/>
-  <int value="32" label="InsertBacktab"/>
-  <int value="33" label="InsertHTML"/>
-  <int value="34" label="InsertHorizontalRule"/>
-  <int value="35" label="InsertImage"/>
-  <int value="36" label="InsertLineBreak"/>
-  <int value="37" label="InsertNewline"/>
-  <int value="38" label="InsertNewlineInQuotedContent"/>
-  <int value="39" label="InsertOrderedList"/>
-  <int value="40" label="InsertParagraph"/>
-  <int value="41" label="InsertTab"/>
-  <int value="42" label="InsertText"/>
-  <int value="43" label="InsertUnorderedList"/>
-  <int value="44" label="Italic"/>
-  <int value="45" label="JustifyCenter"/>
-  <int value="46" label="JustifyFull"/>
-  <int value="47" label="JustifyLeft"/>
-  <int value="48" label="JustifyNone"/>
-  <int value="49" label="JustifyRight"/>
-  <int value="50" label="MakeTextWritingDirectionLeftToRight"/>
-  <int value="51" label="MakeTextWritingDirectionNatural"/>
-  <int value="52" label="MakeTextWritingDirectionRightToLeft"/>
-  <int value="53" label="MoveBackward"/>
-  <int value="54" label="MoveBackwardAndModifySelection"/>
-  <int value="55" label="MoveDown"/>
-  <int value="56" label="MoveDownAndModifySelection"/>
-  <int value="57" label="MoveForward"/>
-  <int value="58" label="MoveForwardAndModifySelection"/>
-  <int value="59" label="MoveLeft"/>
-  <int value="60" label="MoveLeftAndModifySelection"/>
-  <int value="61" label="MovePageDown"/>
-  <int value="62" label="MovePageDownAndModifySelection"/>
-  <int value="63" label="MovePageUp"/>
-  <int value="64" label="MovePageUpAndModifySelection"/>
-  <int value="65" label="MoveParagraphBackward"/>
-  <int value="66" label="MoveParagraphBackwardAndModifySelection"/>
-  <int value="67" label="MoveParagraphForward"/>
-  <int value="68" label="MoveParagraphForwardAndModifySelection"/>
-  <int value="69" label="MoveRight"/>
-  <int value="70" label="MoveRightAndModifySelection"/>
-  <int value="71" label="MoveToBeginningOfDocument"/>
-  <int value="72" label="MoveToBeginningOfDocumentAndModifySelection"/>
-  <int value="73" label="MoveToBeginningOfLine"/>
-  <int value="74" label="MoveToBeginningOfLineAndModifySelection"/>
-  <int value="75" label="MoveToBeginningOfParagraph"/>
-  <int value="76" label="MoveToBeginningOfParagraphAndModifySelection"/>
-  <int value="77" label="MoveToBeginningOfSentence"/>
-  <int value="78" label="MoveToBeginningOfSentenceAndModifySelection"/>
-  <int value="79" label="MoveToEndOfDocument"/>
-  <int value="80" label="MoveToEndOfDocumentAndModifySelection"/>
-  <int value="81" label="MoveToEndOfLine"/>
-  <int value="82" label="MoveToEndOfLineAndModifySelection"/>
-  <int value="83" label="MoveToEndOfParagraph"/>
-  <int value="84" label="MoveToEndOfParagraphAndModifySelection"/>
-  <int value="85" label="MoveToEndOfSentence"/>
-  <int value="86" label="MoveToEndOfSentenceAndModifySelection"/>
-  <int value="87" label="MoveToLeftEndOfLine"/>
-  <int value="88" label="MoveToLeftEndOfLineAndModifySelection"/>
-  <int value="89" label="MoveToRightEndOfLine"/>
-  <int value="90" label="MoveToRightEndOfLineAndModifySelection"/>
-  <int value="91" label="MoveUp"/>
-  <int value="92" label="MoveUpAndModifySelection"/>
-  <int value="93" label="MoveWordBackward"/>
-  <int value="94" label="MoveWordBackwardAndModifySelection"/>
-  <int value="95" label="MoveWordForward"/>
-  <int value="96" label="MoveWordForwardAndModifySelection"/>
-  <int value="97" label="MoveWordLeft"/>
-  <int value="98" label="MoveWordLeftAndModifySelection"/>
-  <int value="99" label="MoveWordRight"/>
-  <int value="100" label="MoveWordRightAndModifySelection"/>
-  <int value="101" label="Outdent"/>
-  <int value="102" label="OverWrite"/>
-  <int value="103" label="Paste"/>
-  <int value="104" label="PasteAndMatchStyle"/>
-  <int value="105" label="PasteGlobalSelection"/>
-  <int value="106" label="Print"/>
-  <int value="107" label="Redo"/>
-  <int value="108" label="RemoveFormat"/>
-  <int value="109" label="ScrollPageBackward"/>
-  <int value="110" label="ScrollPageForward"/>
-  <int value="111" label="ScrollLineUp"/>
-  <int value="112" label="ScrollLineDown"/>
-  <int value="113" label="ScrollToBeginningOfDocument"/>
-  <int value="114" label="ScrollToEndOfDocument"/>
-  <int value="115" label="SelectAll"/>
-  <int value="116" label="SelectLine"/>
-  <int value="117" label="SelectParagraph"/>
-  <int value="118" label="SelectSentence"/>
-  <int value="119" label="SelectToMark"/>
-  <int value="120" label="SelectWord"/>
-  <int value="121" label="SetMark"/>
-  <int value="122" label="Strikethrough"/>
-  <int value="123" label="StyleWithCSS"/>
-  <int value="124" label="Subscript"/>
-  <int value="125" label="Superscript"/>
-  <int value="126" label="SwapWithMark"/>
-  <int value="127" label="ToggleBold"/>
-  <int value="128" label="ToggleItalic"/>
-  <int value="129" label="ToggleUnderline"/>
-  <int value="130" label="Transpose"/>
-  <int value="131" label="Underline"/>
-  <int value="132" label="Undo"/>
-  <int value="133" label="Unlink"/>
-  <int value="134" label="Unscript"/>
-  <int value="135" label="Unselect"/>
-  <int value="136" label="UseCSS"/>
-  <int value="137" label="Yank"/>
-  <int value="138" label="YankAndSelect"/>
-  <int value="139" label="AlignCenter"/>
-</enum>
-
-<enum name="MarkHttpAsStatus" type="int">
-  <int value="0" label="Neutral (deprecated February 2017)"/>
-  <int value="1" label="Non-Secure"/>
-  <int value="2" label="Neutral with a verbose warning on sensitive fields"/>
-</enum>
-
-<enum name="MarkNonSecureAsStatus" type="int">
-  <int value="0" label="Neutral"/>
-  <int value="1" label="Dubious (deprecated August 2015)"/>
-  <int value="2" label="Non-Secure"/>
-</enum>
-
-<enum name="MayLaunchUrlType" type="int">
-  <int value="0" label="No MayLaunchUrl() call."/>
-  <int value="1" label="Low confidence."/>
-  <int value="2" label="High confidence."/>
-  <int value="3" label="Low and High confidence."/>
-</enum>
-
-<enum name="MediaCommand" type="int">
-  <int value="0" label="Resume"/>
-  <int value="1" label="Pause"/>
-  <int value="2" label="Seek"/>
-</enum>
-
-<enum name="MediaContainers" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="AAC (Advanced Audio Coding)"/>
-  <int value="2" label="AC-3"/>
-  <int value="3" label="AIFF (Audio Interchange File Format)"/>
-  <int value="4" label="AMR (Adaptive Multi-Rate Audio)"/>
-  <int value="5" label="APE (Monkey's Audio)"/>
-  <int value="6" label="ASF (Advanced / Active Streaming Format)"/>
-  <int value="7" label="SSA (SubStation Alpha) subtitle"/>
-  <int value="8" label="AVI (Audio Video Interleaved)"/>
-  <int value="9" label="Bink"/>
-  <int value="10" label="CAF (Apple Core Audio Format)"/>
-  <int value="11" label="DTS"/>
-  <int value="12" label="DTS-HD"/>
-  <int value="13" label="DV (Digital Video)"/>
-  <int value="14" label="DXA"/>
-  <int value="15" label="Enhanced AC-3"/>
-  <int value="16" label="FLAC (Free Lossless Audio Codec)"/>
-  <int value="17" label="FLV (Flash Video)"/>
-  <int value="18" label="GSM (Global System for Mobile Audio)"/>
-  <int value="19" label="H.261"/>
-  <int value="20" label="H.263"/>
-  <int value="21" label="H.264"/>
-  <int value="22" label="HLS (Apple HTTP Live Streaming PlayList)"/>
-  <int value="23" label="Berkeley/IRCAM/CARL Sound Format"/>
-  <int value="24" label="MJPEG video"/>
-  <int value="25" label="QuickTime / MOV / MPEG4"/>
-  <int value="26" label="MP3 (MPEG audio layer 2/3)"/>
-  <int value="27" label="MPEG-2 Program Stream"/>
-  <int value="28" label="MPEG-2 Transport Stream"/>
-  <int value="29" label="MPEG-4 Bitstream"/>
-  <int value="30" label="Ogg"/>
-  <int value="31" label="RM (RealMedia)"/>
-  <int value="32" label="SRT (SubRip subtitle)"/>
-  <int value="33" label="SWF (ShockWave Flash)"/>
-  <int value="34" label="VC-1"/>
-  <int value="35" label="WAV / WAVE (Waveform Audio)"/>
-  <int value="36" label="Matroska / WebM"/>
-  <int value="37" label="WTV (Windows Television)"/>
-  <int value="38" label="DASH"/>
-  <int value="39" label="SmoothStream"/>
-</enum>
-
-<enum name="MediaControlsDownloadReason" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="Clicked"/>
-</enum>
-
-<enum name="MediaControlsShowReason" type="int">
-  <int value="0" label="Attribute"/>
-  <int value="1" label="Fullscreen"/>
-  <int value="2" label="No scripts allowed"/>
-  <int value="3" label="Not shown"/>
-  <int value="4" label="Disabled by settings"/>
-</enum>
-
-<enum name="MediaDocumentDownloadButtonType" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="Clicked"/>
-</enum>
-
-<enum name="MediaElementAutoPlay" type="int">
-  <obsolete>
-    Deprecated 11/2016 in Issue 666370 with the deprecation of Autoplay
-    experiment.
-  </obsolete>
-  <int value="0" label="Media element with autoplay seen"/>
-  <int value="1"
-      label="Autoplay enabled and user stopped media play at any point"/>
-  <int value="2"
-      label="Autoplay enabled but user bailed out on media play early"/>
-  <int value="3" label="Autoplay disabled but user manually started media"/>
-  <int value="4"
-      label="Autoplay enabled through a user-gesture triggered load() call."/>
-  <int value="5" label="Autoplay disabled by sandbox flags."/>
-  <int value="6" label="Gesture requirement overridden during initial load."/>
-  <int value="7" label="Gesture requirement overridden in play()."/>
-  <int value="8"
-      label="Gesture req. overridden after scroll for deferred attribute."/>
-  <int value="9"
-      label="Gesture req. overridden after scroll for deferred play()."/>
-  <int value="10" label="play() call failed due to gesture requirement."/>
-  <int value="11" label="Any playback started."/>
-  <int value="12" label="Any playback paused."/>
-  <int value="13" label="Any playback bailed out."/>
-  <int value="14" label="Any playback completed."/>
-  <int value="15" label="Any audio element encountered."/>
-  <int value="16" label="Any video element encountered."/>
-  <int value="17" label="Autoplayed media complete."/>
-  <int value="18" label="Gestureless playback started due to load()."/>
-  <int value="19" label="Gesture requirement overridden for media stream."/>
-  <int value="20" label="Gesture requirement overridden, unknown reason."/>
-  <int value="21" label="Gesture requirement overridden by play method."/>
-</enum>
-
-<enum name="MediaGalleriesUsageType" type="int">
-  <int value="0" label="Gallery added from permission dialog"/>
-  <int value="1" label="Gallery permission added from permission dialog"/>
-  <int value="2" label="Gallery permission removed from permission dialog"/>
-  <int value="3" label="GetMediaFileSystems API invocations"/>
-  <int value="4" label="Profiles With API Usage (corrected in M35)"/>
-  <int value="5" label="Dialog shown"/>
-  <int value="6" label="Dialog permissions saved"/>
-  <int value="7" label="Gallery added from WebUI"/>
-  <int value="8" label="Gallery removed from WebUI"/>
-  <int value="9" label="Preferences initialized"/>
-  <int value="10" label="Preferences initialization failed"/>
-  <int value="11"
-      label="GetAllMediaFileSystemMetadata API invocations (obsolete)"/>
-  <int value="12" label="GetMetadata API invocations"/>
-  <int value="13" label="AddUserSelectedFolder API invocations"/>
-  <int value="14" label="StartMediaScan API invocations (obsolete)"/>
-  <int value="15" label="CancelMediaScan API invocations (obsolete)"/>
-  <int value="16" label="AddScanResults API invocations (obsolete)"/>
-  <int value="17" label="A media scan completed (obsolete)"/>
-  <int value="18" label="AddScanResults dialog cancelled (obsolete)"/>
-  <int value="19" label="AddScanResults dialog accepted (obsolete)"/>
-  <int value="20"
-      label="Gallery removed from AddScanResults dialog (obsolete)"/>
-  <int value="21" label="Gallery removed from permission dialog"/>
-  <int value="22"
-      label="DropPermissionForMediaFileSystem API invocations (obsolete)"/>
-  <int value="23" label="GetAllGalleryWatch API invocations (obsolete)"/>
-  <int value="24" label="RemoveAllGalleryWatch API invocations (obsolete)"/>
-  <int value="25" label="iTunes file system used this session"/>
-  <int value="26" label="Picasa file system used this session"/>
-  <int value="27" label="iPhoto file system used this session (obsolete)"/>
-</enum>
-
-<enum name="MediaKeyError" type="int">
-  <int value="1" label="kUnknownError"/>
-  <int value="2" label="kClientError"/>
-  <int value="4" label="kOutputError"/>
-</enum>
-
-<enum name="MediaKeyException" type="int">
-  <int value="0" label="kUnknownResultId"/>
-  <int value="1" label="kSuccess"/>
-  <int value="2" label="kKeySystemNotSupported"/>
-  <int value="3" label="kInvalidPlayerState"/>
-</enum>
-
-<enum name="MediaKeySystemSupportStatus" type="int">
-  <int value="0" label="Queried"/>
-  <int value="1" label="Supported"/>
-  <int value="2" label="Queried with type"/>
-  <int value="3" label="Supported with type"/>
-</enum>
-
-<enum name="MediaLoadType" type="int">
-  <int value="0" label="URL"/>
-  <int value="1" label="MediaSource"/>
-  <int value="2" label="MediaStream"/>
-</enum>
-
-<enum name="MediaNotificationClickSource" type="int">
-  <int value="0" label="Media"/>
-  <int value="1" label="Presentation"/>
-  <int value="2" label="MediaFling"/>
-</enum>
-
-<enum name="MediaOutputProtectionStatus" type="int">
-  <int value="0" label="Queried"/>
-  <int value="1" label="No external link"/>
-  <int value="2" label="All external links protected"/>
-</enum>
-
-<enum name="MediaPlayerExitStatus" type="int">
-  <int value="0" label="No errors"/>
-  <int value="1" label="Has errors"/>
-</enum>
-
-<enum name="MediaRouteProviderResult" type="int">
-  <int value="0" label="UnknownError"/>
-  <int value="1" label="Ok"/>
-  <int value="2" label="TimedOut"/>
-  <int value="3" label="RouteNotFound"/>
-  <int value="4" label="SinkNotFound"/>
-  <int value="5" label="InvalidOrigin"/>
-  <int value="6" label="OffTheRecordMismatch"/>
-  <int value="7" label="NoSupportedProvider"/>
-  <int value="8" label="Cancelled"/>
-</enum>
-
-<enum name="MediaRouteProviderVersion" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="SameVersionAsChrome"/>
-  <int value="2" label="OneVersionBehindChrome"/>
-  <int value="3" label="MultipleVersionsBehindChrome"/>
-</enum>
-
-<enum name="MediaRouteProviderWakeReason" type="int">
-  <int value="0" label="CreateRoute"/>
-  <int value="1" label="JoinRoute"/>
-  <int value="2" label="TerminateRoute"/>
-  <int value="3" label="SendSessionMessage"/>
-  <int value="4" label="SendSessionBinaryMessage"/>
-  <int value="5" label="DetachRoute"/>
-  <int value="6" label="StartObservingMediaSinks"/>
-  <int value="7" label="StopObservingMediaSinks"/>
-  <int value="8" label="StartObservingMediaRoutes"/>
-  <int value="9" label="StopObservingMediaRoutes"/>
-  <int value="10" label="StartListeningForRouteMessages"/>
-  <int value="11" label="StopListeningForRouteMessages"/>
-  <int value="12" label="ConnectionError"/>
-  <int value="13" label="RegisterMediaRouteProvider"/>
-  <int value="14" label="ConnectRouteByRouteId"/>
-  <int value="15" label="EnableMdnsDiscovery"/>
-  <int value="16" label="UpdateMediaSinks"/>
-  <int value="17" label="SearchSinks"/>
-</enum>
-
-<enum name="MediaRouteProviderWakeup" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="ErrorUnknown"/>
-  <int value="2" label="ErrorTooManyRetries"/>
-</enum>
-
-<enum name="MediaRouterCreateRouteOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure No Route"/>
-  <int value="2" label="Failure Invalid Sink"/>
-</enum>
-
-<enum name="MediaRouterDialogOpenOrigin" type="int">
-  <int value="0" label="Toolbar"/>
-  <int value="1" label="Overflow Menu"/>
-  <int value="2" label="Contextual Menu"/>
-  <int value="3" label="Page"/>
-</enum>
-
-<enum name="MediaRouterInitialViews" type="int">
-  <int value="0" label="Route Details"/>
-  <int value="1" label="Sink List"/>
-</enum>
-
-<enum name="MediaRouterSinkPositionLabel" type="int">
-  <int value="100" label="100+"/>
-</enum>
-
-<enum name="MediaRouterSourceTypes" type="int">
-  <int value="1" label="App"/>
-  <int value="2" label="Tab"/>
-  <int value="4" label="Desktop"/>
-</enum>
-
-<enum name="MediaRouterUserAction" type="int">
-  <int value="0" label="Change Mode"/>
-  <int value="1" label="Start Local"/>
-  <int value="2" label="Stop Local"/>
-  <int value="3" label="Close"/>
-  <int value="4" label="Status Remote"/>
-  <int value="5" label="Replace Local Route"/>
-</enum>
-
-<enum name="MediaRouteType" type="int">
-  <int value="0" label="Local"/>
-  <int value="1" label="Remote"/>
-</enum>
-
-<enum name="MediaSessionActionSource" type="int">
-  <int value="0" label="Media Notification"/>
-  <int value="1" label="MediaSession (Android)"/>
-  <int value="2" label="Headset Unplugged"/>
-</enum>
-
-<enum name="MediaSessionSuspendedSource" type="int">
-  <int value="0" label="System Transient"/>
-  <int value="1" label="System Permanent"/>
-  <int value="2" label="UI"/>
-  <int value="3" label="CONTENT"/>
-  <int value="4" label="System Transient Duck"/>
-</enum>
-
-<enum name="MediaStreamRequestResult" type="int">
-  <int value="0" label="Ok"/>
-  <int value="1" label="Permission Denied"/>
-  <int value="2" label="Permission Dismissed"/>
-  <int value="3" label="Invalid State"/>
-  <int value="4" label="No Hardware"/>
-  <int value="5" label="Invalid Security Origin"/>
-  <int value="6" label="Tab Capture Failure"/>
-  <int value="7" label="Screen Capture Failure"/>
-  <int value="8" label="Capture Failure"/>
-  <int value="9" label="Constraint Not Satisfied"/>
-  <int value="10" label="Track Start Failure"/>
-  <int value="11" label="Not Supported"/>
-  <int value="12" label="Failed due to shutdown"/>
-</enum>
-
-<enum name="MediaStreamRequestState" type="int">
-  <int value="0" label="Explicitly Cancelled"/>
-  <int value="1" label="Stream Not Generated"/>
-  <int value="2" label="Pending Media Tracks"/>
-</enum>
-
-<enum name="MediaTypePredictionResult" type="int">
-  <int value="0" label="All correct"/>
-  <int value="1" label="All incorrect"/>
-  <int value="2" label="Path-based was better"/>
-  <int value="3" label="URL-based was better"/>
-</enum>
-
-<enum name="MediaUrlType" type="int">
-  <int value="0" label="Non Http Live Stream Type"/>
-  <int value="1" label="Http Live Stream Type"/>
-</enum>
-
-<enum name="MemoryPressureLevel" type="int">
-  <int value="0" label="No memory pressure"/>
-  <int value="1" label="Moderate memory pressure"/>
-  <int value="2" label="Critical memory pressure"/>
-</enum>
-
-<enum name="MemoryPressureLevelChanges" type="int">
-  <int value="0" label="No pressure to moderate pressure"/>
-  <int value="1" label="No pressure to critical pressure"/>
-  <int value="2" label="Moderate pressure to critical pressure"/>
-  <int value="3" label="Critical pressure to moderate pressure"/>
-  <int value="4" label="Critical pressure to no pressure"/>
-  <int value="5" label="Moderate pressure to no pressure"/>
-</enum>
-
-<enum name="MemoryState" type="int">
-  <int value="0" label="Normal"/>
-  <int value="1" label="Throttled"/>
-  <int value="2" label="Suspended"/>
-</enum>
-
-<enum name="MessageLoopProblems" type="int">
-  <int value="0" label="Message Post"/>
-  <int value="1" label="Completion Post"/>
-  <int value="2" label="Set Timer"/>
-  <int value="3" label="Received WM_QUIT"/>
-</enum>
-
-<enum name="MetadataReadResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Open failure"/>
-  <int value="2" label="Not found"/>
-  <int value="3" label="Get info failure"/>
-  <int value="4" label="File too big"/>
-  <int value="5" label="Read failure"/>
-  <int value="6" label="Parse failure"/>
-  <int value="7" label="Malformed data"/>
-</enum>
-
-<enum name="MetadataWriteResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Serialization failure"/>
-  <int value="2" label="Write failure"/>
-</enum>
-
-<enum name="MetaTagTypeEnum" type="int">
-  <int value="0" label="No viewport tag"/>
-  <int value="1" label="Viewport meta with device width"/>
-  <int value="2" label="Viewport meta with constant width"/>
-  <int value="3" label="Viewport meta other"/>
-  <int value="4" label="HandheldFriendly meta"/>
-  <int value="5" label="MobileOptimized meta"/>
-  <int value="6" label="XHTML-MP document type"/>
-</enum>
-
-<enum name="MetricsReportingChange" type="int">
-  <int value="0" label="Error">
-    Error occurred while updating MetricsReporting
-  </int>
-  <int value="1" label="Disabled successfully"/>
-  <int value="2" label="Enabled successfully"/>
-</enum>
-
-<enum name="MhtmlGenerationFinalSaveStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="File closing error"/>
-  <int value="2" label="File creation error"/>
-  <int value="3" label="File writing error"/>
-  <int value="4" label="Frame no longer exists"/>
-  <int value="5" label="Main frame serialization forbidden"/>
-  <int value="6" label="Render process no longer exists"/>
-</enum>
-
-<enum name="MicrophoneMuteResult" type="int">
-  <int value="0" label="Muted"/>
-  <int value="1" label="Not muted"/>
-</enum>
-
-<enum name="MidiResult" type="int">
-  <int value="0" label="Not initialized"/>
-  <int value="1" label="Successfully initialized"/>
-  <int value="2" label="Not supported"/>
-  <int value="3" label="Generic initialization error"/>
-</enum>
-
-<enum name="MidiUsage" type="int">
-  <int value="0" label="Instantiated"/>
-  <int value="1" label="Instantiated on unsupported platforms"/>
-  <int value="2" label="Session is started"/>
-  <int value="3" label="Session is ended"/>
-  <int value="4" label="Initialized"/>
-  <int value="5" label="Input port is added"/>
-  <int value="6" label="Output port is added"/>
-</enum>
-
-<enum name="MigrationNssToPemNetworkTypes" type="int">
-  <int value="0" label="EAP"/>
-  <int value="1" label="OpenVPN"/>
-  <int value="2" label="IPsec"/>
-</enum>
-
-<enum name="MissingStartType" type="int">
-  <int value="0" label="Nothing missing"/>
-  <int value="1" label="Start missing"/>
-  <int value="2" label="Commit missing"/>
-  <int value="3" label="Start+Commit missing"/>
-  <int value="4" label="NavStart missing"/>
-  <int value="5" label="NavStart+Start missing"/>
-  <int value="6" label="NavStart+Commit missing"/>
-  <int value="7" label="NavStart+Start+Commit missing"/>
-</enum>
-
-<enum name="MistSwitchResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-</enum>
-
-<enum name="MobileDownloadCancelReason" type="int">
-  <int value="0" label="Not canceled"/>
-  <int value="1" label="Click on the cancel button"/>
-  <int value="2" label="Notification dismissed"/>
-  <int value="3" label="Overwrite infobar dismissed"/>
-  <int value="4" label="No storage permission"/>
-  <int value="5" label="Dangerous download infobar dismissed"/>
-  <int value="6" label="No external storage"/>
-  <int value="7" label="Cannot determine download target"/>
-  <int value="8" label="Cancelled by native for other reasons"/>
-</enum>
-
-<enum name="MobileDownloadInterceptFailureReason" type="int">
-  <int value="0" label="No failure"/>
-  <int value="1" label="Empty url"/>
-  <int value="2" label="Non http or https"/>
-  <int value="3" label="Non GET method"/>
-  <int value="4" label="No request headers"/>
-  <int value="5" label="Use http auth"/>
-  <int value="6" label="Use channel bound cookies"/>
-</enum>
-
-<enum name="MobileDownloadResumption" type="int">
-  <int value="0" label="Resumption button shown after manual pause"/>
-  <int value="1" label="Resumption button shown after browser is killed"/>
-  <int value="2" label="Resumption button clicked"/>
-  <int value="3" label="Resumption failed"/>
-  <int value="4" label="Resumption auto started"/>
-</enum>
-
-<enum name="MobileFreProgress" type="int">
-  <int value="0" label="FRE started"/>
-  <int value="1" label="Welcome shown"/>
-  <int value="2" label="Data saver shown"/>
-  <int value="3" label="Sign in shown"/>
-  <int value="4" label="FRE completed w/ user signed in"/>
-  <int value="5" label="FRE completed w/ user not signed in"/>
-</enum>
-
-<enum name="MobileFreSignInChoice" type="int">
-  <summary>
-    These values are defined inside the MobileFreSignInChoice enum
-    chrome/browser/android/metrics/uma_bridge.cc and reference possible ways of
-    completing the sign-in part of the First Run Experience.
-  </summary>
-  <int value="0" label="Settings default account"/>
-  <int value="1" label="Settings another account"/>
-  <int value="2" label="Accept default account"/>
-  <int value="3" label="Accept another account"/>
-  <int value="4" label="No thanks"/>
-</enum>
-
-<enum name="MobileHungRendererInfoBarEvent" type="int">
-  <int value="0" label="Clicked the 'Wait' button"/>
-  <int value="1" label="Clicked the 'Kill' button"/>
-  <int value="2" label="Clicked the 'X' (close) button)"/>
-  <int value="3" label="Infobar dismissed after renderer became responsive"/>
-  <int value="4" label="Infobar dismissed after tab closed"/>
-</enum>
-
-<enum name="MobileSessionShutdownType" type="int">
-  <int value="0" label="Shutdown in background"/>
-  <int value="1" label="Shutdown in foreground; no log; no memory warning"/>
-  <int value="2" label="Shutdown in foreground; with log; no memory warning"/>
-  <int value="3" label="Shutdown in foreground; no log; with memory warning"/>
-  <int value="4" label="Shutdown in foreground; with log; with memory warning"/>
-  <int value="5" label="First launch after upgrade"/>
-</enum>
-
-<enum name="MobileStartingAction" type="int">
-  <int value="0" label="No activity"/>
-  <int value="1" label="Open new tab"/>
-  <int value="2" label="Focus omnibox"/>
-  <int value="3" label="Open bookmarks"/>
-  <int value="4" label="Open recents"/>
-  <int value="5" label="Open history"/>
-  <int value="6" label="Open tab switcher"/>
-</enum>
-
-<enum name="ModuleIndex" type="int">
-  <int value="0" label="chrome.dll"/>
-  <int value="1" label="chrome_elf.dll"/>
-  <int value="2" label="ntdll.dll"/>
-</enum>
-
-<enum name="MojoMachPortRelayBrokerError" type="int">
-  <int value="0" label="SUCCESS">
-    The Mach port was successfully sent or received.
-  </int>
-  <int value="1" label="ERROR_TASK_FOR_PID">
-    Couldn't get a task port for the process with a given pid.
-  </int>
-  <int value="2" label="ERROR_MAKE_RECEIVE_PORT">
-    Couldn't make a port with receive rights in the destination process.
-  </int>
-  <int value="3" label="ERROR_SET_ATTRIBUTES">
-    Couldn't change the attributes of a Mach port.
-  </int>
-  <int value="4" label="ERROR_EXTRACT_DEST_RIGHT">
-    Couldn't extract a right from the destination.
-  </int>
-  <int value="5" label="ERROR_SEND_MACH_PORT">
-    Couldn't send a Mach port in a call to mach_msg().
-  </int>
-  <int value="6" label="ERROR_EXTRACT_SOURCE_RIGHT">
-    Couldn't extract a right from the source.
-  </int>
-</enum>
-
-<enum name="MojoMachPortRelayChildError" type="int">
-  <int value="0" label="SUCCESS">The Mach port was successfully received.</int>
-  <int value="1" label="ERROR_RECEIVE_MACH_MESSAGE">
-    An error occurred while trying to receive a Mach port with mach_msg().
-  </int>
-</enum>
-
-<enum name="MostVisitedTileIndex" type="int">
-  <summary>
-    Index of a tile on the new tab page. This is only an enum so that the
-    dashboard won't produce misleading statistics like averages.
-  </summary>
-  <int value="0" label="0"/>
-  <int value="1" label="1"/>
-  <int value="2" label="2"/>
-  <int value="3" label="3"/>
-  <int value="4" label="4"/>
-  <int value="5" label="5"/>
-  <int value="6" label="6"/>
-  <int value="7" label="7"/>
-  <int value="8" label="8"/>
-  <int value="9" label="9"/>
-  <int value="10" label="10"/>
-  <int value="11" label="11"/>
-</enum>
-
-<enum name="MostVisitedTileType" type="int">
-  <summary>The visual type of a most visited tile on the new tab page.</summary>
-  <int value="0" label="None">The icon or thumbnail hasn't loaded yet.</int>
-  <int value="1" label="IconReal">
-    The item displays a site's actual favicon or touch icon.
-  </int>
-  <int value="2" label="IconColor">
-    The item displays a color derived from the site's favicon or touch icon.
-  </int>
-  <int value="3" label="IconDefault">
-    The item displays a default gray box in place of an icon.
-  </int>
-  <int value="4" label="ThumbnailLocal">
-    The item displays a locally-captured thumbnail of the site content.
-  </int>
-  <int value="5" label="ThumbnailServer">
-    The item displays a server-provided thumbnail of the site content.
-  </int>
-  <int value="6" label="ThumbnailDefault">
-    The item displays a default graphic in place of a thumbnail.
-  </int>
-</enum>
-
-<enum name="MotionEventToolType" type="int">
-  <summary>The type of tool that triggers a pointer-type MotionEvent.</summary>
-  <int value="0" label="Unknown">Unknown tool type.</int>
-  <int value="1" label="Finger">The tool is a finger (touch).</int>
-  <int value="2" label="Stylus">The tool is a stylus.</int>
-  <int value="3" label="Mouse">The tool is a mouse or trackpad.</int>
-  <int value="4" label="Eraser">
-    The tool is an eraser or a stylus being used in an inverted posture.
-  </int>
-</enum>
-
-<enum name="MouseEventFollowedByClick" type="int">
-  <int value="0" label="Missed event before click"/>
-  <int value="1" label="Caught event before click"/>
-</enum>
-
-<enum name="MSECodec" type="int">
-  <int value="0" label="(Unknown)"/>
-  <int value="1" label="VP8"/>
-  <int value="2" label="VP9"/>
-  <int value="3" label="Vorbis"/>
-  <int value="4" label="H.264"/>
-  <int value="5" label="MPEG2 AAC"/>
-  <int value="6" label="MPEG4 AAC"/>
-  <int value="7" label="EAC3"/>
-  <int value="8" label="MP3"/>
-  <int value="9" label="OPUS"/>
-  <int value="10" label="HEVC"/>
-  <int value="11" label="AC3"/>
-  <int value="12" label="DOLBYVISION"/>
-</enum>
-
-<enum name="MultiAccountUpdateBubbleUserAction" type="int">
-  <int value="0" label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_CHANGED"/>
-  <int value="1" label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_NOT_CHANGED"/>
-  <int value="2"
-      label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_REJECTED_UPDATE"/>
-  <int value="3" label="DEFAULT_ACCOUNT_PREFERRED_USER_CHANGED"/>
-  <int value="4" label="DEFAULT_ACCOUNT_PREFERRED_USER_NOT_CHANGED"/>
-  <int value="5" label="DEFAULT_ACCOUNT_PREFERRED_USER_REJECTED_UPDATE"/>
-  <int value="6" label="DEFAULT_ACCOUNT_FIRST_USER_CHANGED"/>
-  <int value="7" label="DEFAULT_ACCOUNT_FIRST_USER_NOT_CHANGED"/>
-  <int value="8" label="DEFAULT_ACCOUNT_FIRST_USER_REJECTED_UPDATE"/>
-</enum>
-
-<enum name="MultiChromeFrameRemovalResult" type="int">
-  <int value="0" label="ALL_FAILED">All removal operations failed.</int>
-  <int value="1" label="PARTIAL_SUCCESS">
-    Some, but not all, operations succeeded.
-  </int>
-  <int value="2" label="SUCCESS">All operations succeeded.</int>
-</enum>
-
-<enum name="MultiProfileSessionMode" type="int">
-  <int value="0" label="Single user mode"/>
-  <int value="1" label="Side by side mode"/>
-  <int value="2" label="Separate desktop mode"/>
-</enum>
-
-<enum name="MultiProfileSigninUserAction" type="int">
-  <int value="0" label="System tray"/>
-  <int value="1" label="Browser frame"/>
-</enum>
-
-<enum name="MultiProfileSwitchActiveUserAction" type="int">
-  <int value="0" label="System tray"/>
-  <int value="1" label="Keyboard accelerator"/>
-</enum>
-
-<enum name="MultiProfileTeleportWindowAction" type="int">
-  <int value="0" label="Drag and drop"/>
-  <int value="1" label="Caption context menu"/>
-  <int value="2" label="Return by minimize"/>
-  <int value="3" label="Return by launcher"/>
-</enum>
-
-<enum name="MultiProfileTeleportWindowType" type="int">
-  <int value="0" label="Tabbed browser"/>
-  <int value="1" label="Tabbed incognito browser"/>
-  <int value="2" label="V1 app"/>
-  <int value="3" label="V2 app"/>
-  <int value="4" label="Panel"/>
-  <int value="5" label="Popup"/>
-  <int value="6" label="Unknown"/>
-</enum>
-
-<enum name="NaClHelperStatus" type="int">
-  <int value="0" label="Helper not initialized"/>
-  <int value="1" label="Helper executable missing"/>
-  <int value="2" label="Helper bootstrap executable missing"/>
-  <int value="3" label="Browser running under Valgrind"/>
-  <int value="4" label="Helper failed to launch"/>
-  <int value="5" label="Helper failed to ACK"/>
-  <int value="6" label="Helper started correctly"/>
-</enum>
-
-<enum name="NaClHttpStatusCodeClass" type="int">
-  <int value="0" label="0XX"/>
-  <int value="1" label="1XX"/>
-  <int value="2" label="2XX"/>
-  <int value="3" label="3XX"/>
-  <int value="4" label="4XX"/>
-  <int value="5" label="5XX"/>
-  <int value="6" label="No status"/>
-</enum>
-
-<enum name="NaClManifestType" type="int">
-  <int value="0" label="File"/>
-  <int value="1" label="DataURI"/>
-</enum>
-
-<enum name="NaClOSArchEnum" type="int">
-  <int value="0" label="Linux x86-32"/>
-  <int value="1" label="Linux x86-64"/>
-  <int value="2" label="Linux ARM"/>
-  <int value="3" label="Mac x86-32"/>
-  <int value="4" label="Mac x86-64"/>
-  <int value="5" label="Mac ARM"/>
-  <int value="6" label="Windows x86-32"/>
-  <int value="7" label="Windows x86-64"/>
-  <int value="8" label="Windows ARM"/>
-  <int value="9" label="Linux Mips32"/>
-</enum>
-
-<enum name="NaClPluginErrorCode" type="int">
-  <int value="0" label="ERROR_LOAD_SUCCESS"/>
-  <int value="1" label="ERROR_LOAD_ABORTED"/>
-  <int value="2" label="ERROR_UNKNOWN"/>
-  <int value="3" label="ERROR_MANIFEST_RESOLVE_URL"/>
-  <int value="4" label="ERROR_MANIFEST_LOAD_URL"/>
-  <int value="5" label="ERROR_MANIFEST_STAT"/>
-  <int value="6" label="ERROR_MANIFEST_TOO_LARGE"/>
-  <int value="7" label="ERROR_MANIFEST_OPEN"/>
-  <int value="8" label="ERROR_MANIFEST_MEMORY_ALLOC"/>
-  <int value="9" label="ERROR_MANIFEST_READ"/>
-  <int value="10" label="ERROR_MANIFEST_PARSING"/>
-  <int value="11" label="ERROR_MANIFEST_SCHEMA_VALIDATE"/>
-  <int value="12" label="ERROR_MANIFEST_GET_NEXE_URL"/>
-  <int value="13" label="ERROR_NEXE_LOAD_URL"/>
-  <int value="14" label="ERROR_NEXE_ORIGIN_PROTOCOL"/>
-  <int value="15" label="ERROR_NEXE_FH_DUP"/>
-  <int value="16" label="ERROR_NEXE_STAT"/>
-  <int value="17" label="ERROR_ELF_CHECK_IO"/>
-  <int value="18" label="ERROR_ELF_CHECK_FAIL"/>
-  <int value="19" label="ERROR_SEL_LDR_INIT"/>
-  <int value="20" label="ERROR_SEL_LDR_CREATE_LAUNCHER"/>
-  <int value="21" label="ERROR_SEL_LDR_FD"/>
-  <int value="22" label="ERROR_SEL_LDR_LAUNCH"/>
-  <int value="23" label="ERROR_SEL_LDR_COMMUNICATION"/>
-  <int value="24" label="ERROR_SEL_LDR_SEND_NEXE"/>
-  <int value="25" label="ERROR_SEL_LDR_HANDLE_PASSING"/>
-  <int value="26" label="ERROR_SEL_LDR_START_MODULE"/>
-  <int value="27" label="ERROR_SEL_LDR_START_STATUS"/>
-  <int value="28" label="ERROR_SRPC_CONNECTION_FAIL"/>
-  <int value="29" label="ERROR_START_PROXY_CHECK_PPP"/>
-  <int value="30" label="ERROR_START_PROXY_ALLOC"/>
-  <int value="31" label="ERROR_START_PROXY_MODULE"/>
-  <int value="32" label="ERROR_START_PROXY_INSTANCE"/>
-  <int value="33" label="ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL"/>
-  <int value="34" label="ERROR_SEL_LDR_COMMUNICATION_REV_SETUP"/>
-  <int value="35" label="ERROR_SEL_LDR_COMMUNICATION_WRAPPER"/>
-  <int value="36" label="ERROR_SEL_LDR_COMMUNICATION_REV_SERVICE"/>
-  <int value="37" label="ERROR_START_PROXY_CRASH"/>
-  <int value="38" label="ERROR_MANIFEST_PROGRAM_MISSING_ARCH"/>
-  <int value="39" label="ERROR_PNACL_CACHE_OPEN_INPROGRESS"/>
-  <int value="40" label="ERROR_PNACL_CACHE_OPEN_NOACCESS"/>
-  <int value="41" label="ERROR_PNACL_CACHE_OPEN_NOQUOTA"/>
-  <int value="42" label="ERROR_PNACL_CACHE_OPEN_NOSPACE"/>
-  <int value="43" label="ERROR_PNACL_CACHE_OPEN_OTHER"/>
-  <int value="44" label="ERROR_PNACL_CACHE_DIRECTORY_CREATE"/>
-  <int value="45" label="ERROR_PNACL_CACHE_FILEOPEN_NOACCESS"/>
-  <int value="46" label="ERROR_PNACL_CACHE_FILEOPEN_NOQUOTA"/>
-  <int value="47" label="ERROR_PNACL_CACHE_FILEOPEN_NOSPACE"/>
-  <int value="48" label="ERROR_PNACL_CACHE_FILEOPEN_NOTAFILE"/>
-  <int value="49" label="ERROR_PNACL_CACHE_FILEOPEN_OTHER"/>
-  <int value="50" label="ERROR_PNACL_CACHE_FETCH_NOACCESS"/>
-  <int value="51" label="ERROR_PNACL_CACHE_FETCH_NOTFOUND"/>
-  <int value="52" label="ERROR_PNACL_CACHE_FETCH_OTHER"/>
-  <int value="53" label="ERROR_PNACL_CACHE_FINALIZE_COPY_NOQUOTA"/>
-  <int value="54" label="ERROR_PNACL_CACHE_FINALIZE_COPY_NOSPACE"/>
-  <int value="55" label="ERROR_PNACL_CACHE_FINALIZE_COPY_OTHER"/>
-  <int value="56" label="ERROR_PNACL_CACHE_FINALIZE_RENAME_NOACCESS"/>
-  <int value="57" label="ERROR_PNACL_CACHE_FINALIZE_RENAME_OTHER"/>
-  <int value="58" label="ERROR_PNACL_RESOURCE_FETCH"/>
-  <int value="59" label="ERROR_PNACL_PEXE_FETCH_ABORTED"/>
-  <int value="60" label="ERROR_PNACL_PEXE_FETCH_NOACCESS"/>
-  <int value="61" label="ERROR_PNACL_PEXE_FETCH_OTHER"/>
-  <int value="62" label="ERROR_PNACL_THREAD_CREATE"/>
-  <int value="63" label="ERROR_PNACL_LLC_SETUP"/>
-  <int value="64" label="ERROR_PNACL_LD_SETUP"/>
-  <int value="65" label="ERROR_PNACL_LLC_INTERNAL"/>
-  <int value="66" label="ERROR_PNACL_LD_INTERNAL"/>
-  <int value="67" label="ERROR_PNACL_CREATE_TEMP"/>
-  <int value="68" label="ERROR_PNACL_NOT_ENABLED"/>
-  <int value="69" label="ERROR_MANIFEST_NOACCESS_URL"/>
-  <int value="70" label="ERROR_NEXE_NOACCESS_URL"/>
-</enum>
-
-<enum name="NaClSelLdrErrorCode" type="int">
-  <int value="0" label="LOAD_OK"/>
-  <int value="1" label="LOAD_STATUS_UNKNOWN"/>
-  <int value="2" label="LOAD_UNSUPPORTED_OS_PLATFORM"/>
-  <int value="3" label="LOAD_DEP_UNSUPPORTED"/>
-  <int value="4" label="LOAD_INTERNAL"/>
-  <int value="5" label="LOAD_DUP_LOAD_MODULE"/>
-  <int value="6" label="LOAD_DUP_START_MODULE"/>
-  <int value="7" label="LOAD_OPEN_ERROR"/>
-  <int value="8" label="LOAD_READ_ERROR"/>
-  <int value="9" label="LOAD_TOO_MANY_PROG_HDRS"/>
-  <int value="10" label="LOAD_BAD_PHENTSIZE"/>
-  <int value="11" label="LOAD_BAD_ELF_MAGIC"/>
-  <int value="12" label="LOAD_NOT_32_BIT"/>
-  <int value="13" label="LOAD_NOT_64_BIT"/>
-  <int value="14" label="LOAD_BAD_ABI"/>
-  <int value="15" label="LOAD_NOT_EXEC"/>
-  <int value="16" label="LOAD_BAD_MACHINE"/>
-  <int value="17" label="LOAD_BAD_ELF_VERS"/>
-  <int value="18" label="LOAD_TOO_MANY_SECT"/>
-  <int value="19" label="LOAD_BAD_SECT"/>
-  <int value="20" label="LOAD_NO_MEMORY"/>
-  <int value="21" label="LOAD_SECT_HDR"/>
-  <int value="22" label="LOAD_ADDR_SPACE_TOO_SMALL"/>
-  <int value="23" label="LOAD_ADDR_SPACE_TOO_BIG"/>
-  <int value="24" label="LOAD_DATA_OVERLAPS_STACK_SECTION"/>
-  <int value="25" label="LOAD_RODATA_OVERLAPS_DATA"/>
-  <int value="26" label="LOAD_DATA_NOT_LAST_SEGMENT"/>
-  <int value="27" label="LOAD_NO_DATA_BUT_RODATA_NOT_LAST_SEGMENT"/>
-  <int value="28" label="LOAD_TEXT_OVERLAPS_RODATA"/>
-  <int value="29" label="LOAD_TEXT_OVERLAPS_DATA"/>
-  <int value="30" label="LOAD_BAD_RODATA_ALIGNMENT"/>
-  <int value="31" label="LOAD_BAD_DATA_ALIGNMENT"/>
-  <int value="32" label="LOAD_UNLOADABLE"/>
-  <int value="33" label="LOAD_BAD_ELF_TEXT"/>
-  <int value="34" label="LOAD_TEXT_SEG_TOO_BIG"/>
-  <int value="35" label="LOAD_DATA_SEG_TOO_BIG"/>
-  <int value="36" label="LOAD_MPROTECT_FAIL"/>
-  <int value="37" label="LOAD_MADVISE_FAIL"/>
-  <int value="38" label="LOAD_TOO_MANY_SYMBOL_STR"/>
-  <int value="39" label="LOAD_SYMTAB_ENTRY_TOO_SMALL"/>
-  <int value="40" label="LOAD_NO_SYMTAB"/>
-  <int value="41" label="LOAD_NO_SYMTAB_STRINGS"/>
-  <int value="42" label="LOAD_SYMTAB_ENTRY"/>
-  <int value="43" label="LOAD_UNKNOWN_SYMBOL_TYPE"/>
-  <int value="44" label="LOAD_SYMTAB_DUP"/>
-  <int value="45" label="LOAD_REL_ERROR"/>
-  <int value="46" label="LOAD_REL_UNIMPL"/>
-  <int value="47" label="LOAD_UNDEF_SYMBOL"/>
-  <int value="48" label="LOAD_BAD_SYMBOL_DATA"/>
-  <int value="49" label="LOAD_BAD_FILE"/>
-  <int value="50" label="LOAD_BAD_ENTRY"/>
-  <int value="51" label="LOAD_SEGMENT_OUTSIDE_ADDRSPACE"/>
-  <int value="52" label="LOAD_DUP_SEGMENT"/>
-  <int value="53" label="LOAD_SEGMENT_BAD_LOC"/>
-  <int value="54" label="LOAD_BAD_SEGMENT"/>
-  <int value="55" label="LOAD_REQUIRED_SEG_MISSING"/>
-  <int value="56" label="LOAD_SEGMENT_BAD_PARAM"/>
-  <int value="57" label="LOAD_VALIDATION_FAILED"/>
-  <int value="58" label="LOAD_UNIMPLEMENTED"/>
-  <int value="59" label="SRT_NO_SEG_SEL"/>
-  <int value="60" label="LOAD_BAD_EHSIZE"/>
-  <int value="61" label="LOAD_EHDR_OVERFLOW"/>
-  <int value="62" label="LOAD_PHDR_OVERFLOW"/>
-  <int value="63" label="LOAD_UNSUPPORTED_CPU"/>
-  <int value="64" label="LOAD_NO_MEMORY_FOR_DYNAMIC_TEXT"/>
-  <int value="65" label="LOAD_NO_MEMORY_FOR_ADDRESS_SPACE"/>
-</enum>
-
-<enum name="NaClStartupEnum" type="int">
-  <int value="0" label="Default tab opened"/>
-  <int value="1" label="New tab opened"/>
-  <int value="2" label="NaCl sel_ldr started"/>
-</enum>
-
-<enum name="NaClValidationCacheEnum" type="int">
-  <int value="0" label="Miss"/>
-  <int value="1" label="Hit"/>
-</enum>
-
-<enum name="NativeLibraryPreloaderResult" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="WRONG_PACKAGE_NAME"/>
-  <int value="2" label="ADDRESS_SPACE_NOT_RESERVED"/>
-  <int value="3" label="FAILED_WAITING_FOR_RELRO"/>
-  <int value="4" label="FAILED_LISTING_WEBVIEW_PACKAGES"/>
-  <int value="5" label="FAILED_TO_OPEN_RELRO_FILE"/>
-  <int value="6" label="FAILED_TO_LOAD_LIBRARY"/>
-  <int value="7" label="FAILED_JNI_CALL"/>
-  <int value="8" label="FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN"/>
-  <int value="10" label="FAILED_TO_FIND_NAMESPACE"/>
-</enum>
-
-<enum name="NatTypeCounters" type="int">
-  <int value="0" label="Not behind a NAT."/>
-  <int value="1" label="Behind a NAT of unknown type."/>
-  <int value="2" label="Behind a Symmetric NAT."/>
-  <int value="3" label="Behind a Non-Symmetric NAT."/>
-</enum>
-
-<enum name="NavigationDirection" type="int">
-  <obsolete>
-    Deprecated as of Chrome 59 in favour of OverscrollNavigationType.
-  </obsolete>
-  <summary>Direction of the overscroll gesture.</summary>
-  <int value="0" label="None">Did not scroll</int>
-  <int value="1" label="Forward">Scrolled forward</int>
-  <int value="2" label="Back">Scrolled back</int>
-</enum>
-
-<enum name="NavigationInterceptResult" type="int">
-  <int value="0" label="Created external intent"/>
-  <int value="1" label="Created external intent with tab clobbering"/>
-  <int value="2" label="Created async dialog for confirming external intent"/>
-  <int value="3" label="Navigation not intercepted"/>
-</enum>
-
-<enum name="NavigationScheme" type="int">
-  <int value="0" label="(Unknown)"/>
-  <int value="1" label="http"/>
-  <int value="2" label="https"/>
-  <int value="3" label="file"/>
-  <int value="4" label="ftp"/>
-  <int value="5" label="data"/>
-  <int value="6" label="javascript"/>
-  <int value="7" label="about"/>
-  <int value="8" label="chrome"/>
-  <int value="9" label="blob"/>
-  <int value="10" label="filesystem"/>
-</enum>
-
-<enum name="NavigatorVibrationType" type="int">
-  <int value="0" label="Main frame vibrate, no user gesture"/>
-  <int value="1" label="Main frame vibrate, with user gesture"/>
-  <int value="2" label="Same-origin subframe vibrate, no user gesture"/>
-  <int value="3" label="Same-origin subframe vibrate, with user gesture"/>
-  <int value="4" label="Cross-origin subframe vibrate, no user gesture"/>
-  <int value="5" label="Cross-origin subframe vibrate, with user gesture"/>
-</enum>
-
-<enum name="NCNGetActiveNetworkInfoResult" type="int">
-  <int value="0" label="Active network was disconnected"/>
-  <int value="1" label="Active network was already connected"/>
-  <int value="2" label="Android API level was too old for unblocking"/>
-  <int value="3" label="Active network was not blocked"/>
-  <int value="4" label="App was not running in the background"/>
-  <int value="5" label="Active network was unblocked"/>
-</enum>
-
-<enum name="NegativeSampleReason" type="int">
-  <int value="0"
-      label="Persistent sparse histogram had logged value but no active
-             sample."/>
-  <int value="1"
-      label="Persistent sparse histogram active sample less than logged
-             value."/>
-</enum>
-
-<enum name="NetCacheState" type="int">
-  <int value="0" label="FROM_CACHE"/>
-  <int value="1" label="STILL_VALID"/>
-  <int value="2" label="NO_LONGER_VALID"/>
-  <int value="3" label="NO_ENTRY"/>
-</enum>
-
-<enum name="NetConnectivityProtocolStatus" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="IP_STRING_PARSE_FAILED"/>
-  <int value="2" label="SOCKET_CREATE_FAILED"/>
-  <int value="3" label="RESOLVE_FAILED"/>
-  <int value="4" label="CONNECT_FAILED"/>
-  <int value="5" label="WRITE_FAILED"/>
-  <int value="6" label="READ_TIMED_OUT"/>
-  <int value="7" label="READ_FAILED"/>
-  <int value="8" label="ZERO_LENGTH_ERROR"/>
-  <int value="9" label="NO_CHECKSUM_ERROR"/>
-  <int value="10" label="NO_KEY_ERROR"/>
-  <int value="11" label="NO_PAYLOAD_SIZE_ERROR"/>
-  <int value="12" label="NO_PAYLOAD_ERROR"/>
-  <int value="13" label="INVALID_KEY_ERROR"/>
-  <int value="14" label="TOO_SHORT_PAYLOAD"/>
-  <int value="15" label="TOO_LONG_PAYLOAD"/>
-  <int value="16" label="INVALID_CHECKSUM"/>
-  <int value="17" label="PATTERN_CHANGED"/>
-  <int value="18" label="INVALID_PACKET_NUMBER"/>
-  <int value="19" label="TOO_MANY_PACKETS"/>
-  <int value="20" label="STATUS_MAX"/>
-</enum>
-
-<enum name="NetConnectivityStatus" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="IP_STRING_PARSE_FAILED"/>
-  <int value="2" label="SOCKET_CREATE_FAILED"/>
-  <int value="3" label="RESOLVE_FAILED"/>
-  <int value="4" label="CONNECT_FAILED"/>
-  <int value="5" label="WRITE_FAILED"/>
-  <int value="6" label="READ_TIMED_OUT"/>
-  <int value="7" label="READ_FAILED"/>
-  <int value="8" label="READ_VERIFY_FAILED"/>
-  <int value="9" label="STATUS_MAX"/>
-</enum>
-
-<enum name="NetErrorCodes" type="int">
-<!-- Generated from net/base/net_error_list.h -->
-
-  <int value="0" label="OK"/>
-  <int value="1" label="IO_PENDING"/>
-  <int value="2" label="FAILED"/>
-  <int value="3" label="ABORTED"/>
-  <int value="4" label="INVALID_ARGUMENT"/>
-  <int value="5" label="INVALID_HANDLE"/>
-  <int value="6" label="FILE_NOT_FOUND"/>
-  <int value="7" label="TIMED_OUT"/>
-  <int value="8" label="FILE_TOO_BIG"/>
-  <int value="9" label="UNEXPECTED"/>
-  <int value="10" label="ACCESS_DENIED"/>
-  <int value="11" label="NOT_IMPLEMENTED"/>
-  <int value="12" label="INSUFFICIENT_RESOURCES"/>
-  <int value="13" label="OUT_OF_MEMORY"/>
-  <int value="14" label="UPLOAD_FILE_CHANGED"/>
-  <int value="15" label="SOCKET_NOT_CONNECTED"/>
-  <int value="16" label="FILE_EXISTS"/>
-  <int value="17" label="FILE_PATH_TOO_LONG"/>
-  <int value="18" label="FILE_NO_SPACE"/>
-  <int value="19" label="FILE_VIRUS_INFECTED"/>
-  <int value="20" label="BLOCKED_BY_CLIENT"/>
-  <int value="21" label="NETWORK_CHANGED"/>
-  <int value="22" label="BLOCKED_BY_ADMINISTRATOR"/>
-  <int value="23" label="SOCKET_IS_CONNECTED"/>
-  <int value="24" label="BLOCKED_ENROLLMENT_CHECK_PENDING"/>
-  <int value="25" label="UPLOAD_STREAM_REWIND_NOT_SUPPORTED"/>
-  <int value="26" label="CONTEXT_SHUT_DOWN"/>
-  <int value="27" label="BLOCKED_BY_RESPONSE"/>
-  <int value="28" label="BLOCKED_BY_XSS_AUDITOR"/>
-  <int value="29" label="CLEARTEXT_NOT_PERMITTED"/>
-  <int value="100" label="CONNECTION_CLOSED"/>
-  <int value="101" label="CONNECTION_RESET"/>
-  <int value="102" label="CONNECTION_REFUSED"/>
-  <int value="103" label="CONNECTION_ABORTED"/>
-  <int value="104" label="CONNECTION_FAILED"/>
-  <int value="105" label="NAME_NOT_RESOLVED"/>
-  <int value="106" label="INTERNET_DISCONNECTED"/>
-  <int value="107" label="SSL_PROTOCOL_ERROR"/>
-  <int value="108" label="ADDRESS_INVALID"/>
-  <int value="109" label="ADDRESS_UNREACHABLE"/>
-  <int value="110" label="SSL_CLIENT_AUTH_CERT_NEEDED"/>
-  <int value="111" label="TUNNEL_CONNECTION_FAILED"/>
-  <int value="112" label="NO_SSL_VERSIONS_ENABLED"/>
-  <int value="113" label="SSL_VERSION_OR_CIPHER_MISMATCH"/>
-  <int value="114" label="SSL_RENEGOTIATION_REQUESTED"/>
-  <int value="115" label="PROXY_AUTH_UNSUPPORTED"/>
-  <int value="116" label="CERT_ERROR_IN_SSL_RENEGOTIATION"/>
-  <int value="117" label="BAD_SSL_CLIENT_AUTH_CERT"/>
-  <int value="118" label="CONNECTION_TIMED_OUT"/>
-  <int value="119" label="HOST_RESOLVER_QUEUE_TOO_LARGE"/>
-  <int value="120" label="SOCKS_CONNECTION_FAILED"/>
-  <int value="121" label="SOCKS_CONNECTION_HOST_UNREACHABLE"/>
-  <int value="122" label="ALPN_NEGOTIATION_FAILED"/>
-  <int value="123" label="SSL_NO_RENEGOTIATION"/>
-  <int value="124" label="WINSOCK_UNEXPECTED_WRITTEN_BYTES"/>
-  <int value="125" label="SSL_DECOMPRESSION_FAILURE_ALERT"/>
-  <int value="126" label="SSL_BAD_RECORD_MAC_ALERT"/>
-  <int value="127" label="PROXY_AUTH_REQUESTED"/>
-  <int value="128" label="SSL_UNSAFE_NEGOTIATION"/>
-  <int value="129" label="SSL_WEAK_SERVER_EPHEMERAL_DH_KEY"/>
-  <int value="130" label="PROXY_CONNECTION_FAILED"/>
-  <int value="131" label="MANDATORY_PROXY_CONFIGURATION_FAILED"/>
-  <int value="132" label="ESET_ANTI_VIRUS_SSL_INTERCEPTION"/>
-  <int value="133" label="PRECONNECT_MAX_SOCKET_LIMIT"/>
-  <int value="134" label="SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED"/>
-  <int value="135" label="SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY"/>
-  <int value="136" label="PROXY_CERTIFICATE_INVALID"/>
-  <int value="137" label="NAME_RESOLUTION_FAILED"/>
-  <int value="138" label="NETWORK_ACCESS_DENIED"/>
-  <int value="139" label="TEMPORARILY_THROTTLED"/>
-  <int value="140" label="HTTPS_PROXY_TUNNEL_RESPONSE"/>
-  <int value="141" label="SSL_CLIENT_AUTH_SIGNATURE_FAILED"/>
-  <int value="142" label="MSG_TOO_BIG"/>
-  <int value="143" label="SPDY_SESSION_ALREADY_EXISTS"/>
-  <int value="144" label="LIMIT_VIOLATION"/>
-  <int value="145" label="WS_PROTOCOL_ERROR"/>
-  <int value="146" label="PROTOCOL_SWITCHED"/>
-  <int value="147" label="ADDRESS_IN_USE"/>
-  <int value="148" label="SSL_HANDSHAKE_NOT_COMPLETED"/>
-  <int value="149" label="SSL_BAD_PEER_PUBLIC_KEY"/>
-  <int value="150" label="SSL_PINNED_KEY_NOT_IN_CERT_CHAIN"/>
-  <int value="151" label="CLIENT_AUTH_CERT_TYPE_UNSUPPORTED"/>
-  <int value="152" label="ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH"/>
-  <int value="153" label="SSL_DECRYPT_ERROR_ALERT"/>
-  <int value="154" label="WS_THROTTLE_QUEUE_TOO_LARGE"/>
-  <int value="155" label="TOO_MANY_SOCKET_STREAMS"/>
-  <int value="156" label="SSL_SERVER_CERT_CHANGED"/>
-  <int value="157" label="SSL_INAPPROPRIATE_FALLBACK"/>
-  <int value="158" label="CT_NO_SCTS_VERIFIED_OK"/>
-  <int value="159" label="SSL_UNRECOGNIZED_NAME_ALERT"/>
-  <int value="160" label="SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR"/>
-  <int value="161" label="SOCKET_SET_SEND_BUFFER_SIZE_ERROR"/>
-  <int value="162" label="SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE"/>
-  <int value="163" label="SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE"/>
-  <int value="164" label="SSL_CLIENT_AUTH_CERT_BAD_FORMAT"/>
-  <int value="165" label="SSL_FALLBACK_BEYOND_MINIMUM_VERSION"/>
-  <int value="166" label="ICANN_NAME_COLLISION"/>
-  <int value="167" label="SSL_SERVER_CERT_BAD_FORMAT"/>
-  <int value="168" label="CT_STH_PARSING_FAILED"/>
-  <int value="169" label="CT_STH_INCOMPLETE"/>
-  <int value="170" label="UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH"/>
-  <int value="171" label="CT_CONSISTENCY_PROOF_PARSING_FAILED"/>
-  <int value="172" label="SSL_OBSOLETE_CIPHER"/>
-  <int value="173" label="WS_UPGRADE"/>
-  <int value="200" label="CERT_COMMON_NAME_INVALID"/>
-  <int value="201" label="CERT_DATE_INVALID"/>
-  <int value="202" label="CERT_AUTHORITY_INVALID"/>
-  <int value="203" label="CERT_CONTAINS_ERRORS"/>
-  <int value="204" label="CERT_NO_REVOCATION_MECHANISM"/>
-  <int value="205" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
-  <int value="206" label="CERT_REVOKED"/>
-  <int value="207" label="CERT_INVALID"/>
-  <int value="208" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
-  <int value="209" label="CERT_NOT_IN_DNS"/>
-  <int value="210" label="CERT_NON_UNIQUE_NAME"/>
-  <int value="211" label="CERT_WEAK_KEY"/>
-  <int value="212" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
-  <int value="213" label="CERT_VALIDITY_TOO_LONG"/>
-  <int value="214" label="CERTIFICATE_TRANSPARENCY_REQUIRED"/>
-  <int value="215" label="CERT_END"/>
-  <int value="300" label="INVALID_URL"/>
-  <int value="301" label="DISALLOWED_URL_SCHEME"/>
-  <int value="302" label="UNKNOWN_URL_SCHEME"/>
-  <int value="310" label="TOO_MANY_REDIRECTS"/>
-  <int value="311" label="UNSAFE_REDIRECT"/>
-  <int value="312" label="UNSAFE_PORT"/>
-  <int value="320" label="INVALID_RESPONSE"/>
-  <int value="321" label="INVALID_CHUNKED_ENCODING"/>
-  <int value="322" label="METHOD_NOT_SUPPORTED"/>
-  <int value="323" label="UNEXPECTED_PROXY_AUTH"/>
-  <int value="324" label="EMPTY_RESPONSE"/>
-  <int value="325" label="RESPONSE_HEADERS_TOO_BIG"/>
-  <int value="326" label="PAC_STATUS_NOT_OK"/>
-  <int value="327" label="PAC_SCRIPT_FAILED"/>
-  <int value="328" label="REQUEST_RANGE_NOT_SATISFIABLE"/>
-  <int value="329" label="MALFORMED_IDENTITY"/>
-  <int value="330" label="CONTENT_DECODING_FAILED"/>
-  <int value="331" label="NETWORK_IO_SUSPENDED"/>
-  <int value="332" label="SYN_REPLY_NOT_RECEIVED"/>
-  <int value="333" label="ENCODING_CONVERSION_FAILED"/>
-  <int value="334" label="UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT"/>
-  <int value="335" label="INVALID_SPDY_STREAM"/>
-  <int value="336" label="NO_SUPPORTED_PROXIES"/>
-  <int value="337" label="SPDY_PROTOCOL_ERROR"/>
-  <int value="338" label="INVALID_AUTH_CREDENTIALS"/>
-  <int value="339" label="UNSUPPORTED_AUTH_SCHEME"/>
-  <int value="340" label="ENCODING_DETECTION_FAILED"/>
-  <int value="341" label="MISSING_AUTH_CREDENTIALS"/>
-  <int value="342" label="UNEXPECTED_SECURITY_LIBRARY_STATUS"/>
-  <int value="343" label="MISCONFIGURED_AUTH_ENVIRONMENT"/>
-  <int value="344" label="UNDOCUMENTED_SECURITY_LIBRARY_STATUS"/>
-  <int value="345" label="RESPONSE_BODY_TOO_BIG_TO_DRAIN"/>
-  <int value="346" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH"/>
-  <int value="347" label="INCOMPLETE_SPDY_HEADERS"/>
-  <int value="348" label="PAC_NOT_IN_DHCP"/>
-  <int value="349" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION"/>
-  <int value="350" label="RESPONSE_HEADERS_MULTIPLE_LOCATION"/>
-  <int value="351" label="SPDY_SERVER_REFUSED_STREAM"/>
-  <int value="352" label="SPDY_PING_FAILED"/>
-  <int value="353" label="PIPELINE_EVICTION"/>
-  <int value="354" label="CONTENT_LENGTH_MISMATCH"/>
-  <int value="355" label="INCOMPLETE_CHUNKED_ENCODING"/>
-  <int value="356" label="QUIC_PROTOCOL_ERROR"/>
-  <int value="357" label="RESPONSE_HEADERS_TRUNCATED"/>
-  <int value="358" label="QUIC_HANDSHAKE_FAILED"/>
-  <int value="359" label="REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC"/>
-  <int value="360" label="SPDY_INADEQUATE_TRANSPORT_SECURITY"/>
-  <int value="361" label="SPDY_FLOW_CONTROL_ERROR"/>
-  <int value="362" label="SPDY_FRAME_SIZE_ERROR"/>
-  <int value="363" label="SPDY_COMPRESSION_ERROR"/>
-  <int value="364" label="PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION"/>
-  <int value="365" label="HTTP_1_1_REQUIRED"/>
-  <int value="366" label="PROXY_HTTP_1_1_REQUIRED"/>
-  <int value="367" label="PAC_SCRIPT_TERMINATED"/>
-  <int value="368" label="ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN"/>
-  <int value="369" label="TEMPORARY_BACKOFF"/>
-  <int value="370" label="INVALID_HTTP_RESPONSE"/>
-  <int value="371" label="CONTENT_DECODING_INIT_FAILED"/>
-  <int value="372" label="SPDY_RST_STREAM_NO_ERROR_RECEIVED"/>
-  <int value="400" label="CACHE_MISS"/>
-  <int value="401" label="CACHE_READ_FAILURE"/>
-  <int value="402" label="CACHE_WRITE_FAILURE"/>
-  <int value="403" label="CACHE_OPERATION_NOT_SUPPORTED"/>
-  <int value="404" label="CACHE_OPEN_FAILURE"/>
-  <int value="405" label="CACHE_CREATE_FAILURE"/>
-  <int value="406" label="CACHE_RACE"/>
-  <int value="407" label="CACHE_CHECKSUM_READ_FAILURE"/>
-  <int value="408" label="CACHE_CHECKSUM_MISMATCH"/>
-  <int value="409" label="CACHE_LOCK_TIMEOUT"/>
-  <int value="410" label="CACHE_AUTH_FAILURE_AFTER_READ"/>
-  <int value="501" label="INSECURE_RESPONSE"/>
-  <int value="502" label="NO_PRIVATE_KEY_FOR_CERT"/>
-  <int value="503" label="ADD_USER_CERT_FAILED"/>
-  <int value="601" label="FTP_FAILED"/>
-  <int value="602" label="FTP_SERVICE_UNAVAILABLE"/>
-  <int value="603" label="FTP_TRANSFER_ABORTED"/>
-  <int value="604" label="FTP_FILE_BUSY"/>
-  <int value="605" label="FTP_SYNTAX_ERROR"/>
-  <int value="606" label="FTP_COMMAND_NOT_SUPPORTED"/>
-  <int value="607" label="FTP_BAD_COMMAND_SEQUENCE"/>
-  <int value="701" label="PKCS12_IMPORT_BAD_PASSWORD"/>
-  <int value="702" label="PKCS12_IMPORT_FAILED"/>
-  <int value="703" label="IMPORT_CA_CERT_NOT_CA"/>
-  <int value="704" label="IMPORT_CERT_ALREADY_EXISTS"/>
-  <int value="705" label="IMPORT_CA_CERT_FAILED"/>
-  <int value="706" label="IMPORT_SERVER_CERT_FAILED"/>
-  <int value="707" label="PKCS12_IMPORT_INVALID_MAC"/>
-  <int value="708" label="PKCS12_IMPORT_INVALID_FILE"/>
-  <int value="709" label="PKCS12_IMPORT_UNSUPPORTED"/>
-  <int value="710" label="KEY_GENERATION_FAILED"/>
-  <int value="711" label="ORIGIN_BOUND_CERT_GENERATION_FAILED"/>
-  <int value="712" label="PRIVATE_KEY_EXPORT_FAILED"/>
-  <int value="713" label="SELF_SIGNED_CERT_GENERATION_FAILED"/>
-  <int value="714" label="CERT_DATABASE_CHANGED"/>
-  <int value="715" label="CHANNEL_ID_IMPORT_FAILED"/>
-  <int value="800" label="DNS_MALFORMED_RESPONSE"/>
-  <int value="801" label="DNS_SERVER_REQUIRES_TCP"/>
-  <int value="802" label="DNS_SERVER_FAILED"/>
-  <int value="803" label="DNS_TIMED_OUT"/>
-  <int value="804" label="DNS_CACHE_MISS"/>
-  <int value="805" label="DNS_SEARCH_EMPTY"/>
-  <int value="806" label="DNS_SORT_ERROR"/>
-</enum>
-
-<enum name="NetErrorNavigationCorrectionTypes" type="int">
-  <int value="0" label="Google cached page"/>
-  <int value="1" label="URL correction"/>
-  <int value="2" label="Alt URL - domain"/>
-  <int value="3" label="Alt URL - host"/>
-  <int value="4" label="Alt URL - sitemap"/>
-  <int value="5" label="Alt URL - path parent folder"/>
-  <int value="6" label="Alt URL - content overlap"/>
-  <int value="7" label="Emphasized URL correction"/>
-  <int value="100" label="Web search query"/>
-</enum>
-
-<enum name="NetErrorPageEvents" type="int">
-  <int value="0" label="Error Page Shown"/>
-  <int value="1" label="Reload Button Shown"/>
-  <int value="2" label="Reload Button Clicked"/>
-  <int value="3" label="Reload Button Click Load Error"/>
-  <int value="4" label="Show Saved Copy Button Shown"/>
-  <int value="5" label="Show Saved Copy Button Clicked"/>
-  <int value="6" label="Show Saved Copy Button Click Load Error"/>
-  <int value="7" label="More Button Clicked"/>
-  <int value="8" label="Browser Initiated Reload"/>
-  <int value="9" label="Both Buttons Shown"/>
-  <int value="10" label="Both Buttons Shown, Reload Clicked"/>
-  <int value="11" label="Both Buttons Shown, Show Saved Copy Clicked"/>
-  <int value="12" label="Easter egg activated"/>
-  <int value="13" label="Show Cached Copy button shown"/>
-  <int value="14" label="Show Cached Copy button clicked"/>
-  <int value="15" label="Show Cached Page button shown"/>
-  <int value="16" label="Show Cached Page button clicked"/>
-  <int value="17" label="Diagnose button clicked"/>
-  <int value="18" label="Show Offline Pages Button Shown"/>
-  <int value="19" label="Show Offline Pages Button Clicked"/>
-  <int value="20" label="Show Offline Copy Button Shown"/>
-  <int value="21" label="Show Offline Copy Button Clicked"/>
-  <int value="22" label="Download Button Shown"/>
-  <int value="23" label="Download Button Clicked"/>
-</enum>
-
-<enum name="NetFilterType" type="int">
-  <summary>
-    Specific content decoding filter.  See   net::Filter::FilterType for more
-    details
-  </summary>
-  <int value="0" label="Brotli"/>
-  <int value="1" label="Deflate"/>
-  <int value="2" label="GZIP"/>
-  <int value="3" label="GzipHelpingSdch"/>
-  <int value="4" label="SDCH"/>
-  <int value="5" label="SDCHPossible"/>
-  <int value="6" label="Unsupported"/>
-</enum>
-
-<enum name="NetFilterType2" type="int">
-  <summary>
-    Specific content decoding filter.  See net::SourceStream::SourceType for
-    more details
-  </summary>
-  <int value="0" label="Brotli"/>
-  <int value="1" label="Deflate"/>
-  <int value="2" label="GZIP"/>
-  <int value="3" label="GZIPFallback"/>
-  <int value="4" label="SDCH"/>
-  <int value="5" label="SDCHPossible"/>
-  <int value="6" label="Invalid"/>
-  <int value="7" label="None"/>
-</enum>
-
-<enum name="NetInternalsUiFeature" type="int">
-  <int value="0" label="NetInternals"/>
-  <int value="1" label="Connection tester"/>
-</enum>
-
-<enum name="NetPreconnectUtilization" type="int">
-  <int value="0" label="non-speculative, never connected"/>
-  <int value="1" label="non-speculative, never used"/>
-  <int value="2" label="non-speculative and used"/>
-  <int value="3" label="omnibox never connected"/>
-  <int value="4" label="omnibox never used"/>
-  <int value="5" label="omnibox and used"/>
-  <int value="6" label="subresource never connected"/>
-  <int value="7" label="subresource never used"/>
-  <int value="8" label="subresource and used"/>
-</enum>
-
-<enum name="Network3GGobiError" type="int">
-  <summary>
-    These error indexes are produced by QCErrorToMetricIndex() in
-    gobi-cromo-plugin.
-  </summary>
-  <int value="0" label="NONE"/>
-  <int value="1" label="QMI_HARDWARE_RESTRICTED"/>
-</enum>
-
-<enum name="NetworkAuthModeType" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="EAP-AKA"/>
-  <int value="2" label="EAP-FAST"/>
-  <int value="3" label="EAP-GPSK"/>
-  <int value="4" label="EAP-GTC"/>
-  <int value="5" label="EAP-IKEV2"/>
-  <int value="6" label="EAP-LEAP"/>
-  <int value="7" label="EAP-MD5"/>
-  <int value="8" label="EAP-MSCHAPV2"/>
-  <int value="9" label="EAP-OTP"/>
-  <int value="10" label="EAP-PAX"/>
-  <int value="11" label="EAP-PEAP"/>
-  <int value="12" label="EAP-PSK"/>
-  <int value="13" label="EAP-SAKE"/>
-  <int value="14" label="EAP-SIM"/>
-  <int value="15" label="EAP-TLS"/>
-  <int value="16" label="EAP-TNC"/>
-  <int value="17" label="EAP-TTLS"/>
-</enum>
-
-<enum name="NetworkCellular3GPPRegistrationDelayedDrop" type="int">
-  <int value="0" label="Delayed drop posted">
-    A signal loss in the cellular service was detected and a delayed connection
-    drop request was posted. This request causes the cellular connection to be
-    dropped if it is not cancelled within the delay provided.
-  </int>
-  <int value="1" label="Delayed drop canceled">
-    Signal strength returned to normal soon after a delayed drop request was
-    made, causing the request to be canceled. This indicates a flaky network.
-  </int>
-</enum>
-
-<enum name="NetworkCellularOutOfCreditsReason" type="int">
-  <int value="0" label="Connect-Disconnect Loop"/>
-  <int value="1" label="TX-Queue Congestion"/>
-  <int value="2" label="Elongated Time Wait"/>
-</enum>
-
-<enum name="NetworkCellularTechnology" type="int">
-  <int value="0" label="1XRTT"/>
-  <int value="1" label="EDGE"/>
-  <int value="2" label="EVDO"/>
-  <int value="3" label="GPRS"/>
-  <int value="4" label="GSM"/>
-  <int value="5" label="HSPA"/>
-  <int value="6" label="HSPA_PLUS"/>
-  <int value="7" label="LTE"/>
-  <int value="8" label="UMTS"/>
-  <int value="9" label="Unknown"/>
-</enum>
-
-<enum name="NetworkCellularUsageRequestStatus" type="int">
-  <summary>
-    Status code that we received in response to a cellular usage API request.
-  </summary>
-  <int value="0" label="Failed">
-    This value is distinct from the others in that it indicates that we were
-    unable to issue a request or that we received no reply. The other values
-    represent the status code contained in a reply.
-  </int>
-  <int value="1" label="Ok"/>
-  <int value="2" label="Error"/>
-  <int value="3" label="Malformed Request"/>
-  <int value="4" label="Internal Error"/>
-  <int value="5" label="Service Unavailable"/>
-  <int value="6" label="Request Refused"/>
-  <int value="7" label="Unknown Device"/>
-</enum>
-
-<enum name="NetworkChannelType" type="int">
-  <int value="0" label="UNDEF"/>
-  <int value="1" label="2412"/>
-  <int value="2" label="2417"/>
-  <int value="3" label="2422"/>
-  <int value="4" label="2427"/>
-  <int value="5" label="2432"/>
-  <int value="6" label="2437"/>
-  <int value="7" label="2442"/>
-  <int value="8" label="2447"/>
-  <int value="9" label="2452"/>
-  <int value="10" label="2457"/>
-  <int value="11" label="2462"/>
-  <int value="12" label="2467"/>
-  <int value="13" label="2472"/>
-  <int value="14" label="2484"/>
-  <int value="15" label="5180"/>
-  <int value="16" label="5200"/>
-  <int value="17" label="5220"/>
-  <int value="18" label="5240"/>
-  <int value="19" label="5260"/>
-  <int value="20" label="5280"/>
-  <int value="21" label="5300"/>
-  <int value="22" label="5320"/>
-  <int value="23" label="5500"/>
-  <int value="24" label="5520"/>
-  <int value="25" label="5540"/>
-  <int value="26" label="5560"/>
-  <int value="27" label="5580"/>
-  <int value="28" label="5600"/>
-  <int value="29" label="5620"/>
-  <int value="30" label="5640"/>
-  <int value="31" label="5660"/>
-  <int value="32" label="5680"/>
-  <int value="33" label="5700"/>
-  <int value="34" label="5745"/>
-  <int value="35" label="5765"/>
-  <int value="36" label="5785"/>
-  <int value="37" label="5805"/>
-  <int value="38" label="5825"/>
-  <int value="39" label="5170"/>
-  <int value="40" label="5190"/>
-  <int value="41" label="5210"/>
-  <int value="42" label="5230"/>
-</enum>
-
-<enum name="NetworkClockStates" type="int">
-  <int value="0"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC: accuracy of system clock is
-             unknown because there is no information available from the
-             network about what time it is (OBSOLETE)"/>
-  <int value="1"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_SYNC_LOST: system clock is unknown
-             because the system clock has fallen out of sync with the network
-             clock since the last time that network time was retrieved"/>
-  <int value="2"
-      label="NETWORK_CLOCK_STATE_OK: system clock is roughly accurate
-             relative to network time"/>
-  <int value="3"
-      label="NETWORK_CLOCK_STATE_CLOCK_IN_PAST: system clock is in the past
-             relative to network time"/>
-  <int value="4"
-      label="NETWORK_CLOCK_STATE_CLOCK_IN_FUTURE: system clock is in the
-             future relative to network time"/>
-  <int value="5"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC_ATTEMPT: accuracy of system
-             clock is unknown because there has not yet been any attempt to
-             query the network clock"/>
-  <int value="6"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SUCCESSFUL_SYNC: accuracy of
-             system clock is unknown because one or more attempts to sync
-             with the network clock have failed"/>
-  <int value="7"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_FIRST_SYNC_PENDING: accuracy of
-             system clock is unknown because the first attempt to sync with
-             the network clock is pending"/>
-  <int value="8"
-      label="NETWORK_CLOCK_STATE_UNKNOWN_SUBSEQUENT_SYNC_PENDING: accuracy of
-             system clock is unknown because one or more attempts to sync
-             with the network clock have failed, and a subsequent attempt is
-             pending"/>
-</enum>
-
-<enum name="NetworkConnectionIPType" type="int">
-  <int value="0" label="IPv4"/>
-  <int value="1" label="IPv6"/>
-</enum>
-
-<enum name="NetworkConnectionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Ethernet"/>
-  <int value="2" label="WiFi"/>
-  <int value="3" label="2g"/>
-  <int value="4" label="3g"/>
-  <int value="5" label="4g"/>
-  <int value="6" label="None"/>
-  <int value="7" label="Bluetooth"/>
-</enum>
-
-<enum name="NetworkCorruptedProfile" type="int">
-  <int value="0" label="Corrupted Profile"/>
-</enum>
-
-<enum name="NetworkDhcpClientStatus" type="int">
-  <int value="0" label="Arp Gateway">
-    The DHCP client will attempt to identify the default gateway using a unicast
-    ARP to the gateway's MAC address.  This may help speed up the re-connection
-    process.
-  </int>
-  <int value="1" label="Arp Self">
-    The DHCP client will attempt to ARP for the IP address that it was supplied.
-    This indicates that the client is unsure whether the address it was assigned
-    is valid.
-  </int>
-  <int value="2" label="Bound">
-    The DHCP client has successfully acquired an IP address.
-  </int>
-  <int value="3" label="Discover">
-    The DHCP client has inititated a DHCP DISCOVER, a broadcast request for any
-    server to provide it with an address.
-  </int>
-  <int value="4" label="Additional Offer">
-    The DHCP client has received more than one offer in response to its DHCP
-    DISCOVER request.
-  </int>
-  <int value="5" label="Failed Offer">
-    The DHCP client has received an offer in response to its DHCP DISCOVER which
-    is the same as an address it previously failed to validate via an &quot;Arp
-    Self&quot; test.
-  </int>
-  <int value="6" label="Invalid Offer">
-    The DHCP client has received an offer in response to its DHCP DISCOVER which
-    is either an all-zeros or all-ones IP address, and therefore invalid.
-  </int>
-  <int value="7" label="Ignore Non-Offer">
-    The DHCP client has received a response to its DHCP DISCOVER which is not
-    actually a DHCP OFFER.
-  </int>
-  <int value="8" label="Inform">
-    The DHCP client has issued a DHCP INFORM message for an IP address it has
-    self-assigned.
-  </int>
-  <int value="9" label="Init">
-    The DHCP client is intializing its internal state.
-  </int>
-  <int value="10" label="Nak Defer">
-    The DHCP client has received a DHCP NAK and will defer processing this
-    response for a receive interval.
-  </int>
-  <int value="11" label="Rebind">
-    The DHCP client is performing the second level &quot;rebind&quot; lease
-    renewal stage, and has presumably failed the first level &quot;renew&quot;
-    stage.
-  </int>
-  <int value="12" label="Reboot">
-    The DHCP client is attempting to re-acquire a lease on a network where it
-    had previously been connected at some time in the past.
-  </int>
-  <int value="13" label="Release">
-    The DHCP client is releasing its current lease to its assigned IP address.
-  </int>
-  <int value="14" label="Renew">
-    The DHCP client is performing a first level renewal of its current lease.
-  </int>
-  <int value="15" label="Request">
-    The DHCP client is performing a DHCP REQUEST for a lease it has been
-    offered.
-  </int>
-</enum>
-
-<enum name="NetworkDHCPOptionFailure" type="int">
-  <int value="0" label="DHCP Option Failure"/>
-</enum>
-
-<enum name="NetworkDisconnectType" type="int">
-  <int value="0" label="System Disconnect"/>
-  <int value="1" label="User Disconnect"/>
-</enum>
-
-<enum name="NetworkErrorType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Portal"/>
-  <int value="2" label="Offline"/>
-  <int value="3" label="Proxy"/>
-  <int value="4" label="AuthExtTimeout"/>
-  <int value="5" label="None"/>
-</enum>
-
-<enum name="NetworkLocationRequestEvent" type="int">
-  <int value="0" label="REQUEST_START"/>
-  <int value="1" label="REQUEST_CANCEL"/>
-  <int value="2" label="RESPONSE_SUCCESS"/>
-  <int value="3" label="RESPONSE_NOT_OK"/>
-  <int value="4" label="RESPONSE_EMPTY"/>
-  <int value="5" label="RESPONSE_MALFORMED"/>
-  <int value="6" label="RESPONSE_INVALID_FIX"/>
-</enum>
-
-<enum name="NetworkPhyModeType" type="int">
-  <int value="0" label="UNDEF"/>
-  <int value="1" label="802.11a"/>
-  <int value="2" label="802.11b"/>
-  <int value="3" label="802.11g"/>
-  <int value="4" label="802.11n"/>
-  <int value="5" label="PSB 10MHz-wide"/>
-  <int value="6" label="PSB 5MHz-wide"/>
-  <int value="7" label="802.11ac"/>
-</enum>
-
-<enum name="NetworkPortalResult" type="int">
-  <summary>
-    The portal result types come from PortalResult in shill/metrics.h
-  </summary>
-  <int value="0" label="Success"/>
-  <int value="1" label="DNS Failure"/>
-  <int value="2" label="DNS Timeout"/>
-  <int value="3" label="Connection Failure"/>
-  <int value="4" label="Connection Timeout"/>
-  <int value="5" label="HTTP Failure"/>
-  <int value="6" label="HTTP Timeout"/>
-  <int value="7" label="Content Failure"/>
-  <int value="8" label="Content Timeout"/>
-  <int value="9" label="Unknown"/>
-</enum>
-
-<enum name="NetworkProblemType" type="int">
-  <int value="0" label="Congested TCP Queue"/>
-  <int value="1" label="DNS Failure"/>
-</enum>
-
-<enum name="NetworkQueueStopReason" type="int">
-  <summary>The stop reasons come from shill/mac80211_monitor.h.</summary>
-  <int value="0" label="Device Driver"/>
-  <int value="1" label="Power Save"/>
-  <int value="2" label="Channel Switch Announcement"/>
-  <int value="3" label="Aggregation"/>
-  <int value="4" label="Suspend"/>
-  <int value="5" label="Buffer Add"/>
-  <int value="6" label="Channel Type Change"/>
-</enum>
-
-<enum name="NetworkQuietStatus" type="int">
-  <int value="0" label="Had network 0-quiet for 0.5 seconds"/>
-  <int value="1" label="Had network 2-quiet for 2 seconds"/>
-</enum>
-
-<enum name="NetworkSecurityType" type="int">
-  <summary>
-    The security types come from the connman_service_security enum in
-    flimflam/include/service.h
-  </summary>
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="NONE"/>
-  <int value="2" label="WEP"/>
-  <int value="3" label="WPA"/>
-  <int value="4" label="802.11i/RSN"/>
-  <int value="5" label="802.1x"/>
-  <int value="6" label="PSK"/>
-</enum>
-
-<enum name="NetworkServiceError" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="AAA_FAILED"/>
-  <int value="2" label="ACTIVATION_FAILED"/>
-  <int value="3" label="BAD_PASSPHRASE"/>
-  <int value="4" label="BAD_WEPKEY"/>
-  <int value="5" label="CONNECT_FAILED"/>
-  <int value="6" label="DHCP_FAILED"/>
-  <int value="7" label="DNS_LOOKUP_FAILED"/>
-  <int value="8" label="EAP_AUTHENTICATION_FAILED"/>
-  <int value="9" label="EAP_LOCAL_TLS_FAILED"/>
-  <int value="10" label="EAP_REMOTE_TLS_FAILED"/>
-  <int value="11" label="HTTP_GET_FAILED"/>
-  <int value="12" label="IPSEC_CERT_AUTH_FAILED"/>
-  <int value="13" label="IPSEC_PSK_AUTH_FAILED"/>
-  <int value="14" label="INTERNAL"/>
-  <int value="15" label="NEED_EVDO"/>
-  <int value="16" label="NEED_HOME_NETWORK"/>
-  <int value="17" label="OTASP_FAILED"/>
-  <int value="18" label="OUT_OF_RANGE"/>
-  <int value="19" label="PPP_AUTH_FAILED"/>
-  <int value="20" label="PIN_MISSING"/>
-</enum>
-
-<enum name="NetworkTechnology" type="int">
-  <int value="0" label="Cellular"/>
-  <int value="1" label="Ethernet"/>
-  <int value="2" label="Ethernet EAP"/>
-  <int value="3" label="WiFi"/>
-  <int value="4" label="WiMax"/>
-  <int value="5" label="VPN"/>
-  <int value="6" label="Unknown"/>
-</enum>
-
-<enum name="NewTabPageActionAndroid" type="int">
-  <obsolete>
-    Deprecated as of 01/2017. Replaced by NewTabPageActionAndroid2.
-  </obsolete>
-  <int value="0" label="Searched using the omnibox"/>
-  <int value="1" label="Navigated to Google search homepage using the omnibox"/>
-  <int value="2" label="Navigated to any other page using the omnibox"/>
-  <int value="3" label="Opened a most visited page"/>
-  <int value="4" label="Opened a recently closed tab"/>
-  <int value="5" label="Opened a bookmark"/>
-  <int value="6" label="Opened a foreign session (from other devices section)"/>
-  <int value="7" label="Navigated to the webpage for a snippet"/>
-  <int value="8" label="DEPRECATED: Clicked on an interest item"/>
-  <int value="9" label="Clicked on Learn More"/>
-  <int value="10"
-      label="Clicked on the Refresh button in the all dismissed state"/>
-</enum>
-
-<enum name="NewTabPageActionAndroid2" type="int">
-  <int value="0" label="Searched using the omnibox"/>
-  <int value="1" label="Navigated to Google search homepage using the omnibox"/>
-  <int value="2" label="Navigated to any other page using the omnibox"/>
-  <int value="3" label="Opened a most visited tile"/>
-  <int value="4" label="Opened the recent tabs manager"/>
-  <int value="5" label="Opened the history manager"/>
-  <int value="6" label="Opened the bookmarks manager"/>
-  <int value="7" label="Opened the downloads manager"/>
-  <int value="8" label="Navigated to the webpage for a snippet"/>
-  <int value="9" label="Clicked on Learn More"/>
-  <int value="10"
-      label="Clicked on the Refresh button in the all dismissed state"/>
-</enum>
-
-<enum name="NewTabPageBookmarkActionAndroid" type="int">
-  <summary>
-    These values are defined in PartnerBookmarkAction enum in
-    chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc.
-  </summary>
-  <int value="0" label="Deleted partner bookmark"/>
-  <int value="1" label="Deleted root partner folder"/>
-  <int value="2" label="Renamed partner bookmark"/>
-  <int value="3" label="Renamed root partner folder"/>
-</enum>
-
-<enum name="NewTabPageLogoClick" type="int">
-  <int value="0" label="Static logo clicked"/>
-  <int value="1" label="CTA image clicked"/>
-  <int value="2" label="Animated logo clicked"/>
-</enum>
-
-<enum name="NewTabPageLogoDownloadOutcome" type="int">
-  <summary>
-    These values are defined in LogoDownloadOutcome enum in
-    components/search_provider_logos/logo_tracker.h.
-  </summary>
-  <int value="0" label="New logo success"/>
-  <int value="1" label="No logo today"/>
-  <int value="2" label="Download failed"/>
-  <int value="3" label="Parsing failed"/>
-  <int value="4" label="Decoding failed"/>
-  <int value="5" label="Logo revalidated"/>
-</enum>
-
-<enum name="NewTabPageLogoShown" type="int">
-  <int value="0" label="Static logo shown"/>
-  <int value="1" label="CTA image shown"/>
-</enum>
-
-<enum name="NewTabPageMobilePromo" type="int">
-  <summary>
-    These values are defined inside the PromoImpressionBuckets enum in
-    chrome/browser/ui/webui/ntp/android/promo_handler.cc
-  </summary>
-  <int value="0" label="Shown from most visited page"/>
-  <int value="1" label="Shown from open tabs page"/>
-  <int value="2" label="Shown from sync promo page"/>
-  <int value="3" label="User pressed 'Try Chrome'"/>
-  <int value="4" label="User dismissed the promo"/>
-</enum>
-
-<enum name="NewTabType" type="int">
-  <int value="0" label="New tab button"/>
-  <int value="1" label="Regular menu option"/>
-  <int value="2" label="Tab strip menu option"/>
-</enum>
-
-<enum name="NewTabURLState" type="int">
-  <int value="0" label="Valid URL was used"/>
-  <int value="1" label="Corrupt state"/>
-  <int value="2" label="Incognito window"/>
-  <int value="3" label="No URL for default provider"/>
-  <int value="4" label="Insecure URL"/>
-  <int value="5" label="Suggest is disabled"/>
-  <int value="6" label="URL blocked for supervised user"/>
-</enum>
-
-<enum name="NewUserPriorityPrefsSyncResult" type="int">
-  <int value="0" label="Succeeded"/>
-  <int value="1" label="Timed out"/>
-</enum>
-
-<enum name="NormalizedScore" type="int">
-  <int value="0" label="Underflow bucket"/>
-  <int value="1" label="Score in (0, 0.1]"/>
-  <int value="2" label="Score in (0.1, 0.2]"/>
-  <int value="3" label="Score in (0.2, 0.3]"/>
-  <int value="4" label="Score in (0.3, 0.4]"/>
-  <int value="5" label="Score in (0.4, 0.5]"/>
-  <int value="6" label="Score in (0.5, 0.6]"/>
-  <int value="7" label="Score in (0.6, 0.7]"/>
-  <int value="8" label="Score in (0.7, 0.8]"/>
-  <int value="9" label="Score in (0.8, 0.9]"/>
-  <int value="10" label="Score in (0.9, 1.0]"/>
-  <int value="11" label="Overflow bucket"/>
-</enum>
-
-<enum name="NoStatePrefetchResponseType" type="int">
-  <int value="0" label="Sub-resource, cacheable"/>
-  <int value="1" label="Sub-resource, no-store"/>
-  <int value="2" label="Sub-resource redirect, cacheable"/>
-  <int value="3" label="Sub-resource redirect, no-store"/>
-  <int value="4" label="Main resource, cacheable"/>
-  <int value="5" label="Main resource, no-store"/>
-  <int value="6" label="Main resource redirect, cacheable"/>
-  <int value="7" label="Main resource redirect, no-store"/>
-</enum>
-
-<enum name="NoteTakingAppLaunchResult" type="int">
-  <int value="0" label="Chrome app launched successfully"/>
-  <int value="1" label="Chrome app missing"/>
-  <int value="2" label="Android app launched successfully"/>
-  <int value="3" label="Android not supported by profile"/>
-  <int value="4" label="Android not running"/>
-  <int value="5" label="Couldn't convert path to Android URL"/>
-  <int value="6" label="No app specified"/>
-  <int value="7" label="No apps available"/>
-</enum>
-
-<enum name="NotificationActionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Notification added"/>
-  <int value="2" label="Notification updated"/>
-  <int value="3" label="Notification clicked"/>
-  <int value="4" label="Notification button clicked"/>
-  <int value="5" label="Notification displayed"/>
-  <int value="6" label="Notification closed by user"/>
-  <int value="7" label="Notification closed by system"/>
-</enum>
-
-<enum name="NotificationAppStatus" type="int">
-  <int value="0" label="Undeterminable (old Android version)"/>
-  <int value="1" label="Undeterminable (exception thrown)"/>
-  <int value="2" label="Enabled"/>
-  <int value="3" label="Disabled"/>
-</enum>
-
-<enum name="NotificationDatabaseStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Not found error"/>
-  <int value="2" label="Corruption error"/>
-  <int value="3" label="Failure error"/>
-  <int value="4" label="I/O error"/>
-  <int value="5" label="Not supported error"/>
-  <int value="6" label="Invalid Argument error"/>
-</enum>
-
-<enum name="NotifierType" type="int">
-  <int value="0" label="Application"/>
-  <int value="1" label="Arc++"/>
-  <int value="2" label="Web Page"/>
-  <int value="3" label="System Component"/>
-</enum>
-
-<enum name="NotifyResult" type="int">
-  <int value="0" label="PROCESS_NONE"/>
-  <int value="1" label="PROCESS_NOTIFIED"/>
-  <int value="2" label="PROFILE_IN_USE"/>
-  <int value="3" label="LOCK_ERROR"/>
-</enum>
-
-<enum name="NotStreamingReason" type="int">
-  <int value="0" label="Already loaded"/>
-  <int value="1" label="Not HTTP"/>
-  <int value="2" label="Reload"/>
-  <int value="3" label="Context not valid"/>
-  <int value="4" label="Encoding not supported"/>
-  <int value="5" label="Thread busy"/>
-  <int value="6" label="V8 cannot stream"/>
-  <int value="7" label="Script too small"/>
-</enum>
-
-<enum name="NPAPIPluginStatus" type="int">
-  <int value="0" label="Unsupported">
-    NPAPI is not supported on this platform
-  </int>
-  <int value="1" label="Disabled">NPAPI is disabled</int>
-  <int value="2" label="Enabled">NPAPI is enabled</int>
-</enum>
-
-<enum name="NQEEffectiveConnectionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Offline"/>
-  <int value="2" label="Slow 2G"/>
-  <int value="3" label="2G"/>
-  <int value="4" label="3G"/>
-  <int value="5" label="4G"/>
-  <int value="6" label="Broadband">
-    <obsolete>
-      Deprecated as of 01/2017.
-    </obsolete>
-  </int>
-</enum>
-
-<enum name="NQEExternalEstimateProviderStatus" type="int">
-  <int value="0" label="External estimate provider was not available"/>
-  <int value="1" label="External estimate provider was available"/>
-  <int value="2" label="External estimate provider was queried"/>
-  <int value="3" label="Query to external estimate provider was successful"/>
-  <int value="4" label="Callback received from external estimate provider"/>
-  <int value="5" label="RTT was available from the external estimate provider"/>
-  <int value="6"
-      label="Downlink bandwidth was available from the external estimate
-             provider"/>
-</enum>
-
-<enum name="NQEObservationSource" type="int">
-  <int value="0" label="HTTP"/>
-  <int value="1" label="TCP"/>
-  <int value="2" label="QUIC"/>
-  <int value="3" label="HTTP-layer cached"/>
-  <int value="4" label="HTTP-layer default"/>
-  <int value="5" label="HTTP-layer external estimate provider"/>
-  <int value="6" label="Transport-layer cached"/>
-  <int value="7" label="Transport-layer default"/>
-</enum>
-
-<enum name="NtpFollowAction" type="int">
-  <int value="0" label="PAGE_TRANSITION_LINK"/>
-  <int value="1" label="PAGE_TRANSITION_TYPED"/>
-  <int value="2" label="PAGE_TRANSITION_AUTO_BOOKMARK"/>
-  <int value="3" label="PAGE_TRANSITION_AUTO_SUBFRAME"/>
-  <int value="4" label="PAGE_TRANSITION_MANUAL_SUBFRAME"/>
-  <int value="5" label="PAGE_TRANSITION_GENERATED"/>
-  <int value="6" label="PAGE_TRANSITION_START_PAGE"/>
-  <int value="7" label="PAGE_TRANSITION_FORM_SUBMIT"/>
-  <int value="8" label="PAGE_TRANSITION_RELOAD"/>
-  <int value="9" label="PAGE_TRANSITION_KEYWORD"/>
-  <int value="10" label="PAGE_TRANSITION_KEYWORD_GENERATED"/>
-  <int value="11" label="Clicked on a tile."/>
-  <int value="12" label="Clicked to other NTP pane."/>
-  <int value="13" label="Other action"/>
-</enum>
-
-<enum name="NTPImpressionType" type="int">
-  <int value="0" label="regular NTP impression"/>
-  <int value="1" label="potential NTP impression - no open tab"/>
-</enum>
-
-<enum name="NTPLayout" type="int">
-  <int value="0" label="Doesn't fit, not expanding to cut off most likely"/>
-  <int value="1" label="Doesn't fit, expanding to cut off most likely"/>
-  <int value="2" label="Fits, field trial is not enabled"/>
-  <int value="3" label="Fits, field trial is enabled but does not fit"/>
-  <int value="4" label="Fits with field trial"/>
-  <int value="5" label="Layout is condensed"/>
-</enum>
-
-<enum name="NTPLoadType" type="int">
-  <int value="0" label="Cold startup"/>
-  <int value="1" label="Warm startup"/>
-  <int value="2" label="Other, not at startup"/>
-</enum>
-
-<enum name="NtpMostVisitedScheme" type="int">
-  <obsolete>
-    Deprecated 2016-05.
-  </obsolete>
-  <int value="0" label="Other (not web-safe)"/>
-  <int value="1" label="Other (web-safe)"/>
-  <int value="2" label="http://"/>
-  <int value="3" label="https://"/>
-  <int value="4" label="ftp://"/>
-  <int value="5" label="file://"/>
-  <int value="6" label="chrome://"/>
-  <int value="7" label="chrome-extension://"/>
-  <int value="8" label="javascript://"/>
-</enum>
-
-<enum name="NtpPaneType" type="int">
-  <int value="1" label="MostVisited"/>
-  <int value="2" label="Apps"/>
-  <int value="3" label="Bookmarks"/>
-  <int value="4" label="Suggestions"/>
-</enum>
-
-<enum name="NtpPromoAction" type="int">
-  <int value="0" label="NTP Promo viewed"/>
-  <int value="1" label="NTP Promo closed"/>
-  <int value="2" label="NTP Promo link clicked"/>
-</enum>
-
-<enum name="NtpRequestThrottlerStatus" type="int">
-  <int value="0" label="Interactive request - quota granted"/>
-  <int value="1" label="Background request - quota granted"/>
-  <int value="2" label="Background request - quota exceeded"/>
-  <int value="3" label="Interactive request - quota exceeded"/>
-</enum>
-
-<enum name="NtpSnippetsFetchResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Empty hosts - deprecated"/>
-  <int value="2" label="URLRequestStatus error"/>
-  <int value="3" label="HTTP error"/>
-  <int value="4" label="JSON parse error"/>
-  <int value="5" label="Invalid snippet content"/>
-  <int value="6" label="Error in obtaining oauth access token"/>
-  <int value="7" label="Out of interactive quota - deprecated"/>
-  <int value="8" label="Out of non-interactive quota - deprecated"/>
-</enum>
-
-<enum name="NTPSnippetsState" type="int">
-  <summary>
-    The state of the RemoteSuggestionsProvider (formerly known as
-    NTPSnippetsService).
-  </summary>
-<!-- Note: 0 corresponds to NOT_INITED, which should never be recorded. -->
-
-  <int value="1" label="Ready"/>
-  <int value="2" label="Disabled"/>
-  <int value="3" label="Error"/>
-</enum>
-
-<enum name="NtpSuggestionsType" type="int">
-  <int value="0" label="Client suggestion"/>
-  <int value="1" label="Server suggestion"/>
-</enum>
-
-<enum name="NtpTileExperimentActions" type="int">
-  <summary>
-    The types of actions performed by the Most Visited Tile Placement
-    experiment, used to identify the cases where the experiment could not
-    operate as expected, and the reason for it.
-  </summary>
-  <int value="0" label="Removed URL that was already open in browser"/>
-  <int value="1" label="Didn't remove URL, too few suggestions in MV"/>
-  <int value="2" label="Too few URLs, didn't flip tiles 1 and 8"/>
-  <int value="3" label="Too few URLs, didn't flip tiles 1 and 4"/>
-</enum>
-
-<enum name="NTSTATUS" type="int">
-  <int value="-1073741818" label="0xC0000006 - STATUS_IN_PAGE_ERROR"/>
-  <int value="-1073741808" label="0xC0000010 - STATUS_INVALID_DEVICE_REQUEST"/>
-  <int value="-1073741803" label="0xC0000015 - STATUS_NONEXISTENT_SECTOR"/>
-  <int value="-1073741790" label="0xC0000022 - STATUS_ACCESS_DENIED"/>
-  <int value="-1073741697" label="0xC000007F - STATUS_DISK_FULL"/>
-  <int value="-1073741668" label="0xC000009C - STATUS_DEVICE_DATA_ERROR"/>
-  <int value="-1073741667" label="0xC000009D - STATUS_DEVICE_NOT_CONNECTED"/>
-  <int value="-1073741643" label="0xC00000B5 - STATUS_IO_TIMEOUT"/>
-  <int value="-1073741630" label="0xC00000C2 - STATUS_ADAPTER_HARDWARE_ERROR"/>
-  <int value="-1073741591" label="0xC00000E9 - STATUS_UNEXPECTED_IO_ERROR"/>
-  <int value="-1073741435" label="0xC0000185 - STATUS_IO_DEVICE_ERROR"/>
-  <int value="-1073740669" label="0xC0000483 - STATUS_DEVICE_HARDWARE_ERROR"/>
-  <int value="-1073740023" label="0xC0000709 - STATUS_HARDWARE_MEMORY_ERROR"/>
-  <int value="0" label="0x00000000 - STATUS_SUCCESS"/>
-</enum>
-
-<enum name="NullableBoolean" type="int">
-  <summary>
-    A Nullable Boolean can True, False or Null (ie: unset or absent).
-  </summary>
-  <int value="0" label="False"/>
-  <int value="1" label="True"/>
-  <int value="2" label="Null"/>
-</enum>
-
-<enum name="OAuth2LoginAccountRevokedMigrationState" type="int">
-  <int value="0" label="Account ID migration not started"/>
-  <int value="1" label="Account ID migration in progress"/>
-  <int value="2" label="Account ID migration done"/>
-</enum>
-
-<enum name="OAuth2LoginSeedState" type="int">
-  <int value="0" label="Account was seeded before FireRefreshTokenRevoked"/>
-  <int value="1" label="Account was seeded before FireRefreshTokenAvailable"/>
-  <int value="2" label="Account was not seeded before FireRefreshTokenRevoked"/>
-  <int value="3"
-      label="Account was not seeded before FireRefreshTokenAvailable"/>
-</enum>
-
-<enum name="OfflinePagesAggregatedRequestResult" type="int">
-  <int value="0" label="Show offline page on disconnected network"/>
-  <int value="1" label="Page not found on disconnected network"/>
-  <int value="2" label="Show offline page on flaky network"/>
-  <int value="3" label="Page not found on flaky network"/>
-  <int value="4" label="Show offline page on prohibitively slow network"/>
-  <int value="5" label="Page not found on prohibitively slow network"/>
-  <int value="6" label="Page not fresh on prohibitively slow network"/>
-  <int value="7" label="Show offline page on connected network"/>
-  <int value="8" label="Page not found on connected network"/>
-  <int value="9" label="Android Tab does not have persistent ID"/>
-  <int value="10" label="No web contents"/>
-  <int value="11" label="Unknown net error, showing error page"/>
-  <int value="12" label="Redirected on disconnected network"/>
-  <int value="13" label="Redirected on flaky network"/>
-  <int value="14" label="Redirected on prohibitively slow network"/>
-  <int value="15" label="Redirected on connected network"/>
-</enum>
-
-<enum name="OfflinePagesBackgroundImmediateStartStatus" type="int">
-  <int value="0" label="Started"/>
-  <int value="1" label="Busy"/>
-  <int value="2" label="Not accepted by loader"/>
-  <int value="3" label="No connection"/>
-  <int value="4"
-      label="Weak connection (according to network quality estimator)"/>
-  <int value="5" label="Not started on svelte device"/>
-</enum>
-
-<enum name="OfflinePagesBackgroundOfflinerRequestStatus" type="int">
-<!-- Generated from components/offline_pages/background/offliner.h -->
-
-  <int value="0" label="Unknown (not expected to be recorded)"/>
-  <int value="1" label="Loaded (not expected to be recorded)"/>
-  <int value="2" label="Saved"/>
-  <int value="3" label="RequestCoordinator canceled"/>
-  <int value="4" label="Loading canceled"/>
-  <int value="5" label="Loading failed (retryable)"/>
-  <int value="6" label="Save failed"/>
-  <int value="7" label="Foreground transition canceled"/>
-  <int value="8" label="RequestCoordinator timed-out"/>
-  <int value="9" label="Loading not started (deprecated 1/2017)"/>
-  <int value="10" label="Loading failed (non-retryable)"/>
-  <int value="11" label="Loading failed (don't start next request)"/>
-  <int value="12" label="Loading not accepted"/>
-  <int value="13" label="Queue update failed"/>
-  <int value="14" label="Background scheduler canceled processing"/>
-</enum>
-
-<enum name="OfflinePagesCctApiPrerenderAllowedStatus" type="int">
-  <int value="0" label="PrerenderAllowed"/>
-  <int value="1" label="ThirdPartyCookiesDisabled"/>
-  <int value="2" label="NetworkPredictionDisabled"/>
-</enum>
-
-<enum name="OfflinePagesClearAllStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Store reset failed"/>
-  <int value="2" label="Store reload failed"/>
-</enum>
-
-<enum name="OfflinePagesClearStorageResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Unnecessary to clean"/>
-  <int value="2" label="Page expiration failed (deprecated 11/2016)"/>
-  <int value="3" label="Page record deletion failed"/>
-  <int value="4"
-      label="Both expiration and deletion failed (deprecated 11/2016)"/>
-</enum>
-
-<enum name="OfflinePagesDeletePageResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Cancelled"/>
-  <int value="2" label="Store failure"/>
-  <int value="3" label="Device failure"/>
-  <int value="4" label="Not found"/>
-</enum>
-
-<enum name="OfflinePagesLoadStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Store init failed"/>
-  <int value="2" label="Store load failed"/>
-  <int value="3" label="Data parsing failed"/>
-</enum>
-
-<enum name="OfflinePagesRedirectResult" type="int">
-  <obsolete>
-    Deprecated 2016-08.
-  </obsolete>
-  <int value="0" label="Redirected on disconnected network"/>
-  <int value="1" label="Page not found on disconnected network"/>
-  <int value="2" label="Redirected on flaky network"/>
-  <int value="3" label="Page not found on flaky network"/>
-  <int value="4" label="Ignored flaky network forward/back"/>
-  <int value="5" label="Redirected on connected network"/>
-  <int value="6" label="Android Tab does not have persistent ID"/>
-  <int value="7" label="Unknown net error, showing error page"/>
-  <int value="8" label="Redirect loop offline"/>
-  <int value="9" label="Redirect loop online"/>
-</enum>
-
-<enum name="OfflinePagesSavePageResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Cancelled"/>
-  <int value="2" label="Device full"/>
-  <int value="3" label="Content unavailable"/>
-  <int value="4" label="Archive creation failed"/>
-  <int value="5" label="Store failure"/>
-  <int value="6" label="Already exists"/>
-  <int value="7" label="Skipped"/>
-  <int value="8" label="Security certificate error"/>
-</enum>
-
-<enum name="OfflinePagesSharedPageWasOffline" type="int">
-  <int value="0" label="Online"/>
-  <int value="1" label="Offline"/>
-</enum>
-
-<enum name="OfflineStatus" type="int">
-  <obsolete>
-    Deprecated 4/2015.
-  </obsolete>
-  <int value="0" label="Fresh data load from Cache"/>
-  <int value="1" label="Successful network request (validation or fetch)."/>
-  <int value="2" label="Failed network request (non-offline error)."/>
-  <int value="3" label="Server offline and stale data available."/>
-  <int value="4" label="Server offline and stale data not available."/>
-</enum>
-
-<enum name="OffscreenCanvasCommitType" type="int">
-  <int value="0" label="GPUCanvasGPUCompositing"/>
-  <int value="1" label="GPUCanvasSoftwareCompositing"/>
-  <int value="2" label="SoftwareCanvasGPUCompositing"/>
-  <int value="3" label="SoftwareCanvasSoftwareCompositing"/>
-</enum>
-
-<enum name="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon" type="int">
-  <int value="0" label="disabled by flags"/>
-  <int value="1" label="enabled by flags"/>
-  <int value="2" label="auto, not in trial"/>
-  <int value="3" label="auto, disabled in trial"/>
-  <int value="4" label="auto, enabled in trial"/>
-</enum>
-
-<enum name="OmniboxEnteredKeywordMode" type="int">
-  <int value="0" label="via tab"/>
-  <int value="1" label="via space at end"/>
-  <int value="2" label="via space in middle"/>
-  <int value="3" label="keyboard shortcut"/>
-  <int value="4" label="question mark"/>
-</enum>
-
-<enum name="OmniboxInputType" type="int">
-  <int value="0" label="invalid"/>
-  <int value="1" label="unknown"/>
-  <int value="2" label="deprecated: requested url"/>
-  <int value="3" label="url"/>
-  <int value="4" label="query"/>
-  <int value="5" label="forced query"/>
-</enum>
-
-<enum name="OmniboxPageContext" type="int">
-  <int value="0" label="invalid spec; shouldn't happen"/>
-  <int value="1"
-      label="extension-replaced new tab page OR obsolete new tab page"/>
-  <int value="2" label="about:blank"/>
-  <int value="3" label="the user's home page"/>
-  <int value="4" label="other (typically an arbitrary URL)"/>
-  <int value="5" label="obsolete: instant new tab page"/>
-  <int value="6" label="search results page with search term replacement"/>
-  <int value="7" label="new tab page with omnibox as starting focus"/>
-  <int value="8" label="new tab page with fakebox as starting focus"/>
-  <int value="9" label="search results page without search term replacement"/>
-  <int value="10" label="home screen"/>
-  <int value="11" label="search app"/>
-  <int value="12" label="maps app"/>
-</enum>
-
-<enum name="OmniboxProviderAndResultType" type="int">
-  <int value="101" label="URL_WHAT_YOU_TYPED via HistoryURL provider"/>
-  <int value="102" label="HISTORY_URL via HistoryURL provider"/>
-  <int value="302" label="HISTORY_URL via HistoryQuick provider"/>
-  <int value="303" label="HISTORY_TITLE via HistoryQuick provider"/>
-  <int value="406" label="NAVSUGGEST via SearchProvider"/>
-  <int value="407" label="SEARCH_WHAT_YOU_TYPED via SearchProvider"/>
-  <int value="408" label="SEARCH_HISTORY via SearchProvider"/>
-  <int value="409" label="SEARCH_SUGGEST via SearchProvider"/>
-  <int value="410" label="SEARCH_OTHER_ENGINE via SearchProvider"/>
-  <int value="414" label="SEARCH_SUGGEST_ENTITY via SearchProvider"/>
-  <int value="415" label="SEARCH_SUGGEST_TAIL via SearchProvider"/>
-  <int value="416" label="SEARCH_SUGGEST_PERSONALIZED via SearchProvider"/>
-  <int value="422" label="SEARCH_SUGGEST_ANSWER via SearchProvider"/>
-  <int value="423" label="CALCULATOR via SearchProvider"/>
-  <int value="505" label="HISTORY_KEYWORD via KeywordProvider"/>
-  <int value="510" label="SEARCH_OTHER_ENGINE via KeywordProvider"/>
-  <int value="606" label="NAVSUGGEST via BuiltinProvider"/>
-  <int value="700" label="UNKNOWN_RESULT_TYPE via Shortcuts provider"/>
-  <int value="701" label="URL_WHAT_YOU_TYPED via Shortcuts provider"/>
-  <int value="702" label="HISTORY_URL via Shortcuts provider"/>
-  <int value="703" label="HISTORY_TITLE via Shortcuts provider"/>
-  <int value="705" label="HISTORY_KEYWORD via Shortcuts provider"/>
-  <int value="708" label="SEARCH_HISTORY via Shortcuts provider"/>
-  <int value="710" label="SEARCH_OTHER_ENGINE via Shortcuts provider"/>
-  <int value="713" label="BOOKMARK_TITLE via Shortcuts provider"/>
-  <int value="716" label="SEARCH_SUGGEST_PERSONALIZED via Shortcuts provider"/>
-  <int value="717" label="SEARCH_SUGGEST_PROFILE via Shortcuts provider"/>
-  <int value="1013" label="BOOKMARK_TITLE via BookmarkProvider"/>
-  <int value="1106" label="NAVSUGGEST via ZeroSuggest"/>
-  <int value="1109" label="SEARCH_SUGGEST via ZeroSuggest"/>
-  <int value="1116" label="SEARCH_SUGGEST_PERSONALIZED via ZeroSuggest"/>
-  <int value="1202" label="HISTORY_URL from on-device service"/>
-  <int value="1212" label="CONTACT from on-device service"/>
-  <int value="1218" label="APP_RESULT from on-device service"/>
-  <int value="1219" label="APP from on-device service"/>
-  <int value="1220" label="LEGACY_ON_DEVICE from on-device service"/>
-  <int value="1424" label="CLIPBOARD from Clipboard provider"/>
-</enum>
-
-<enum name="OmniboxProviderType" type="int">
-  <int value="1" label="HistoryURL"/>
-  <int value="2" label="deprecated: HistoryContents"/>
-  <int value="3" label="HistoryQuick"/>
-  <int value="4" label="SearchProvider"/>
-  <int value="5" label="KeywordProvider"/>
-  <int value="6" label="BuiltinProvider"/>
-  <int value="7" label="ShortcutsProvider"/>
-  <int value="8" label="deprecated: ExtensionAppProvider"/>
-  <int value="9" label="deprecated: ContactsProvider"/>
-  <int value="10" label="BookmarkProvider"/>
-  <int value="11" label="ZeroSuggest"/>
-  <int value="12" label="on device (only used by Android GSA)"/>
-  <int value="13" label="on device chrome (chrome content provider)"/>
-  <int value="14" label="clipboard provider"/>
-</enum>
-
-<enum name="OmniboxSearchEngine" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Google"/>
-  <int value="2" label="Yahoo!"/>
-  <int value="3" label="Bing"/>
-  <int value="4" label="Ask"/>
-  <int value="5" label="Yahoo! Quebec"/>
-  <int value="6" label="OK.hu"/>
-  <int value="7" label="Bing French and Arabic"/>
-  <int value="11" label="Yamli"/>
-  <int value="12" label="Araby"/>
-  <int value="13" label="Maktoob"/>
-  <int value="14" label="Masrawy"/>
-  <int value="15" label="Yandex"/>
-  <int value="16" label="Rambler"/>
-  <int value="17" label="TUT.BY"/>
-  <int value="18" label="hispavista"/>
-  <int value="19" label="Jabse"/>
-  <int value="20" label="NUR.KZ"/>
-  <int value="21" label="Baidu"/>
-  <int value="22" label="search.ch"/>
-  <int value="23" label="goo"/>
-  <int value="24" label="Pogodak!"/>
-  <int value="25" label="Seznam"/>
-  <int value="26" label="Centrum"/>
-  <int value="27" label="Atlas"/>
-  <int value="28" label="Jubii"/>
-  <int value="29" label="Eniro"/>
-  <int value="30" label="NetSprint"/>
-  <int value="32" label="diri"/>
-  <int value="33" label="Custom"/>
-  <int value="35" label="AOL"/>
-  <int value="36" label="Conduit"/>
-  <int value="37" label="Rediff"/>
-  <int value="38" label="guruji"/>
-  <int value="40" label="GO.com"/>
-  <int value="41" label="Rednano"/>
-  <int value="44" label="NETI"/>
-  <int value="45" label="DELFI"/>
-  <int value="46" label="Fonecta 02.fi"/>
-  <int value="50" label="AVG"/>
-  <int value="51" label="search.ch"/>
-  <int value="54" label="in.gr"/>
-  <int value="55" label="Walla!"/>
-  <int value="59" label="leit.is"/>
-  <int value="62" label="Virgilio"/>
-  <int value="63" label="Libero"/>
-  <int value="67" label="Naver"/>
-  <int value="68" label="Daum"/>
-  <int value="69" label="Nate"/>
-  <int value="71" label="LATNE"/>
-  <int value="72" label="ABC S.k"/>
-  <int value="73" label="Kvasir"/>
-  <int value="75" label="Onet.pl"/>
-  <int value="76" label="Wirtualna Polska"/>
-  <int value="77" label="SAPO"/>
-  <int value="82" label="UOL Busca"/>
-  <int value="83" label="@MAIL.RU"/>
-  <int value="85" label="Zoznam"/>
-  <int value="87" label="Najdi.si"/>
-  <int value="88" label="360"/>
-  <int value="89" label="AltaVista"/>
-  <int value="90" label="Terra"/>
-  <int value="99" label="Spray"/>
-  <int value="100" label="Sanook!"/>
-  <int value="101" label="MYNET"/>
-  <int value="102" label="searchnu.com"/>
-  <int value="103" label="babylon.com"/>
-  <int value="104" label="delta-search.com"/>
-  <int value="105" label="iminent.com"/>
-  <int value="106" label="hao123.com"/>
-  <int value="107" label="sweetim.com"/>
-  <int value="108" label="snap.do"/>
-  <int value="109" label="snapdo.com"/>
-  <int value="110" label="softonic.com"/>
-  <int value="111" label="searchfunmoods.com"/>
-  <int value="112" label="incredibar.com"/>
-  <int value="113" label="sweetpacks.com"/>
-  <int value="114" label="imesh.net"/>
-</enum>
-
-<enum name="OmniboxSearchEngineType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="AOL"/>
-  <int value="2" label="Ask"/>
-  <int value="3" label="Atlas"/>
-  <int value="4" label="AVG"/>
-  <int value="5" label="Baidu"/>
-  <int value="6" label="Babylon"/>
-  <int value="7" label="Bing"/>
-  <int value="8" label="Conduit"/>
-  <int value="9" label="Daum"/>
-  <int value="10" label="DELFI"/>
-  <int value="11" label="Delta"/>
-  <int value="12" label="Funmoods"/>
-  <int value="13" label="goo"/>
-  <int value="14" label="Google"/>
-  <int value="15" label="iminent.com"/>
-  <int value="16" label="IMesh"/>
-  <int value="17" label="in.gr"/>
-  <int value="18" label="incredibar.com"/>
-  <int value="19" label="Kvasir"/>
-  <int value="20" label="Libero"/>
-  <int value="21" label="@MAIL.RU"/>
-  <int value="22" label="Najdi.si"/>
-  <int value="23" label="Nate"/>
-  <int value="24" label="Naver"/>
-  <int value="25" label="NETI"/>
-  <int value="26" label="Nigma"/>
-  <int value="27" label="OK.hu"/>
-  <int value="28" label="Onet.pl"/>
-  <int value="29" label="Rambler"/>
-  <int value="30" label="SAPO"/>
-  <int value="31" label="searchnu"/>
-  <int value="32" label="search-results.com"/>
-  <int value="33" label="Seznam"/>
-  <int value="34" label="snap.do"/>
-  <int value="35" label="softonic.com"/>
-  <int value="36" label="Sogou"/>
-  <int value="37" label="Soso"/>
-  <int value="38" label="sweetim.com/sweetpacks.com"/>
-  <int value="39" label="Terra"/>
-  <int value="40" label="TUT.BY"/>
-  <int value="41" label="Vinden.nl"/>
-  <int value="42" label="Virgilio"/>
-  <int value="43" label="Walla!"/>
-  <int value="44" label="Wirtualna Polska"/>
-  <int value="45" label="Yahoo!"/>
-  <int value="46" label="Yandex"/>
-  <int value="47" label="Zoznam"/>
-</enum>
-
-<enum name="OmniboxSuggestRequests" type="int">
-  <int value="1" label="requests sent"/>
-  <int value="2" label="requests invalidated"/>
-  <int value="3" label="(non-invalidated) replies received"/>
-</enum>
-
-<enum name="OmniboxSummarizedResultType" type="int">
-  <int value="0" label="URL"/>
-  <int value="1" label="search"/>
-  <int value="2" label="app/extension"/>
-  <int value="3" label="contact"/>
-  <int value="4" label="on-device"/>
-  <int value="5" label="unknown"/>
-</enum>
-
-<enum name="OmniboxUserTextCleared" type="int">
-  <int value="0" label="cleared by editing"/>
-  <int value="1" label="cleared with escape"/>
-</enum>
-
-<enum name="OmniboxZeroSuggestRequests" type="int">
-  <int value="1" label="requests sent"/>
-  <int value="2" label="requests invalidated"/>
-  <int value="3" label="(non-invalidated) replies received"/>
-</enum>
-
-<enum name="OpenFileSystemResult" type="int">
-  <int value="0" label="OK."/>
-  <int value="1" label="In incognito mode."/>
-  <int value="2" label="Invalid scheme."/>
-  <int value="3" label="Failed to create directory."/>
-</enum>
-
-<enum name="OpenLinkAsUser" type="int">
-  <int value="0" label="Active profile."/>
-  <int value="1" label="Inactive, multi-profile."/>
-  <int value="2" label="Inactive, single-profile."/>
-</enum>
-
-<enum name="OpenLinkAsUserProfilesState" type="int">
-  <int value="0" label="No other active profiles."/>
-  <int value="1" label="Active other profiles."/>
-</enum>
-
-<enum name="OriginTrialEnableResult" type="int">
-  <obsolete>
-    Obsolete as of M54 and replaced by OriginTrialTokenStatus.
-  </obsolete>
-  <int value="0" label="Success"/>
-  <int value="1" label="NotSupported"/>
-  <int value="2" label="Insecure"/>
-  <int value="3" label="NoTokens"/>
-  <int value="4" label="Expired"/>
-  <int value="5" label="WrongFeature"/>
-  <int value="6" label="WrongOrigin"/>
-  <int value="7" label="InvalidSignature"/>
-  <int value="8" label="Malformed"/>
-  <int value="9" label="WrongVersion"/>
-  <int value="10" label="FeatureDisabled"/>
-</enum>
-
-<enum name="OriginTrialMessageGeneratedResult" type="int">
-  <obsolete>
-    Obsolete as of Chrome 54.
-  </obsolete>
-  <int value="0" label="NotRequested"/>
-  <int value="1" label="Yes"/>
-  <int value="2" label="No"/>
-</enum>
-
-<enum name="OriginTrialTokenStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="NotSupported"/>
-  <int value="2" label="Insecure"/>
-  <int value="3" label="Expired"/>
-  <int value="4" label="WrongOrigin"/>
-  <int value="5" label="InvalidSignature"/>
-  <int value="6" label="Malformed"/>
-  <int value="7" label="WrongVersion"/>
-  <int value="8" label="FeatureDisabled"/>
-  <int value="9" label="TokenDisabled"/>
-</enum>
-
-<enum name="OSAgnosticErrno" type="int">
-  <summary>Errno values with the same meanings on Mac/Win/Linux.</summary>
-  <int value="0" label="0">No error</int>
-  <int value="1" label="EPERM">Operation not permitted</int>
-  <int value="2" label="ENOENT">No such file or directory</int>
-  <int value="3" label="ESRCH">No such process</int>
-  <int value="4" label="EINTR">Interrupted function call</int>
-  <int value="5" label="EIO">Input/output error</int>
-  <int value="6" label="ENXIO">No such device or address</int>
-  <int value="7" label="E2BIG">Arg list too long</int>
-  <int value="8" label="ENOEXEC">Exec format error</int>
-  <int value="9" label="EBADF">Bad file descriptor</int>
-  <int value="10" label="ECHILD">No child processes</int>
-  <int value="11" label="EDEADLK">Resource deadlock avoided</int>
-  <int value="12" label="ENOMEM">Cannot allocate memory</int>
-  <int value="13" label="EACCES">Permission denied</int>
-  <int value="14" label="EFAULT">Bad address</int>
-  <int value="15" label="ENOTBLK">Not a block device</int>
-  <int value="16" label="EBUSY">Resource busy</int>
-  <int value="17" label="EEXIST">File exists</int>
-  <int value="18" label="EXDEV">Improper link</int>
-  <int value="19" label="ENODEV">Operation not supported by device</int>
-  <int value="20" label="ENOTDIR">Not a directory</int>
-  <int value="21" label="EISDIR">Is a directory</int>
-  <int value="22" label="EINVAL">Invalid argument</int>
-  <int value="23" label="ENFILE">Too many open files in system</int>
-  <int value="24" label="EMFILE">Too many open files</int>
-  <int value="25" label="ENOTTY">Inappropriate ioctl for device</int>
-  <int value="26" label="ETXTBSY">Text file busy</int>
-  <int value="27" label="EFBIG">File too large</int>
-  <int value="28" label="ENOSPC">Device out of space</int>
-  <int value="29" label="ESPIPE">Illegal seek</int>
-  <int value="30" label="EROFS">Read-only file system</int>
-  <int value="31" label="EMLINK">Too many links</int>
-  <int value="32" label="EPIPE">Broken pipe</int>
-  <int value="33" label="EDOM">Numerical argument out of domain</int>
-  <int value="34" label="ERANGE">Numerical result out of range</int>
-</enum>
-
-<enum name="OsSuite" type="int">
-  <int value="0" label="Windows Home Edition"/>
-  <int value="1" label="Windows Professional Edition (or better)"/>
-  <int value="2" label="Windows Server Edition"/>
-</enum>
-
-<enum name="OSXExceptionHandlerEvents" type="int">
-  <int value="0" label="EXCEPTION_ACCESSIBILITY">
-    Object does not support accessibility attributes
-  </int>
-  <int value="1" label="EXCEPTION_MENU_ITEM_BOUNDS_CHECK">
-    Forced crash due to menu item bounds checking failure
-  </int>
-  <int value="2" label="EXCEPTION_VIEW_NOT_IN_WINDOW">
-    Forced crash due to view not in a window requiring a window
-  </int>
-  <int value="3" label="EXCEPTION_NSURL_INIT_NIL">
-    Whitelisted exception for bug 85463.  Suspect ImageKit conversions for media
-    browser in open or save panel.
-  </int>
-  <int value="4" label="EXCEPTION_NSDATADETECTOR_NIL_STRING">
-    Whitelisted exception for bug 316759.  Suspect background address detection,
-    field unknown.
-  </int>
-  <int value="5" label="EXCEPTION_NSREGULAREXPRESSION_NIL_STRING">
-    Whitelisted exception for bug 466076.  Suspect background address detection,
-    field unknown.
-  </int>
-</enum>
-
-<enum name="OSXFullscreenParameters" type="int">
-  <int value="0" label="IMMERSIVE_SECONDARY_SHARED_SINGLE">INVALID</int>
-  <int value="1" label="APPKIT_SECONDARY_SHARED_SINGLE">INVALID</int>
-  <int value="2" label="IMMERSIVE_PRIMARY_SHARED_SINGLE">
-    Immersive Mechanism + Primary Screen + Shared Spaces + Single Screen
-  </int>
-  <int value="3" label="APPKIT_PRIMARY_SHARED_SINGLE">
-    AppKit Mechanism + Primary Screen + Shared Spaces + Single Screen
-  </int>
-  <int value="4" label="IMMERSIVE_SECONDARY_SEPARATE_SINGLE">INVALID</int>
-  <int value="5" label="APPKIT_SECONDARY_SEPARATE_SINGLE">INVALID</int>
-  <int value="6" label="IMMERSIVE_PRIMARY_SEPARATE_SINGLE">
-    Immersive Mechanism + Primary Screen + Separate Spaces + Single Screen
-  </int>
-  <int value="7" label="APPKIT_PRIMARY_SEPARATE_SINGLE">
-    AppKit Mechanism + Primary Screen + Separate Spaces + Single Screen
-  </int>
-  <int value="8" label="IMMERSIVE_SECONDARY_SHARED_MULTIPLE">
-    Immersive Mechanism + Secondary Screen + Shared Spaces + Multiple Screens
-  </int>
-  <int value="9" label="APPKIT_SECONDARY_SHARED_MULTIPLE">
-    AppKit Mechanism + Secondary Screen + Shared Spaces + Multiple Screens
-  </int>
-  <int value="10" label="IMMERSIVE_PRIMARY_SHARED_MULTIPLE">
-    Immersive Mechanism + Primary Screen + Shared Spaces + Multiple Screens
-  </int>
-  <int value="11" label="APPKIT_PRIMARY_SHARED_MULTIPLE">
-    AppKit Mechanism + Primary Screen + Shared Spaces + Multiple Screens
-  </int>
-  <int value="12" label="IMMERSIVE_SECONDARY_SEPARATE_MULTIPLE">
-    Immersive Mechanism + Secondary Screen + Separate Spaces + Multiple Screens
-  </int>
-  <int value="13" label="APPKIT_SECONDARY_SEPARATE_MULTIPLE">
-    AppKit Mechanism + Secondary Screen + Separate Spaces + Multiple Screens
-  </int>
-  <int value="14" label="IMMERSIVE_PRIMARY_SEPARATE_MULTIPLE">
-    Immersive Mechanism + Primary Screen + Separate Spaces + Multiple Screens
-  </int>
-  <int value="15" label="APPKIT_PRIMARY_SEPARATE_MULTIPLE">
-    AppKit Mechanism + Primary Screen + Separate Spaces + Multiple Screens
-  </int>
-</enum>
-
-<enum name="OSXFullscreenStyle" type="int">
-  <int value="0" label="IMMERSIVE">
-    The window was fullscreened using the immersive mechanism.
-  </int>
-  <int value="1" label="PRESENTATION_MODE">
-    The window was fullscreened using the AppKit mechanism, in Presentation
-    Mode.
-  </int>
-  <int value="2" label="CANONICAL_FULLSCREEN">
-    The window was fullscreened using the AppKit mechanism, in Canonical
-    Fullscreen.
-  </int>
-</enum>
-
-<enum name="OSXFullscreenWindowLocation" type="int">
-  <int value="0" label="PRIMARY_SINGLE_SCREEN">
-    The window was located on the primary screen, and there is only a single
-    screen available.
-  </int>
-  <int value="1" label="PRIMARY_MULTIPLE_SCREEN">
-    The window was located on the primary screen, and there are multiple screens
-    available.
-  </int>
-  <int value="2" label="SECONDARY_MULTIPLE_SCREEN">
-    The window was located on a secondary screen, and there are multiple screens
-    available.
-  </int>
-</enum>
-
-<enum name="OSXHandoffOrigin" type="int">
-  <int value="0" label="Unknown Origin"/>
-  <int value="1" label="Chrome on iOS"/>
-  <int value="2" label="Chrome on Mac"/>
-</enum>
-
-<enum name="OSXScreensHaveSeparateSpaces" type="int">
-  <int value="0" label="CANNOT_HAVE_SEPARATE_SPACES">
-    The &quot;Screens Have Separate Spaces&quot; option is unavailable.
-  </int>
-  <int value="1" label="SEPARATE_SPACES">
-    The &quot;Screens Have Separate Spaces&quot; option is on.
-  </int>
-  <int value="2" label="SHARED_SPACES">
-    The &quot;Screens Have Separate Spaces&quot; option is off.
-  </int>
-</enum>
-
-<enum name="OSXSharedMemoryMechanism" type="int">
-  <int value="0" label="POSIX">
-    The shared memory region is backed by a POSIX fd.
-  </int>
-  <int value="1" label="MACH">
-    The shared memory region is backed by a Mach memory object.
-  </int>
-</enum>
-
-<enum name="OtherPossibleUsernamesUsage" type="int">
-  <int value="0" label="Nothing to Autofill"/>
-  <int value="1" label="No other possible usernames"/>
-  <int value="2" label="Other possible usernames present, but none were shown"/>
-  <int value="3" label="Other possible username was shown, but not selected"/>
-  <int value="4" label="Other possible username was selected"/>
-</enum>
-
-<enum name="OtherSessionsActions" type="int">
-  <int value="0" label="Menu initialized"/>
-  <int value="1" label="Menu shown"/>
-  <int value="2" label="Link clicked"/>
-  <int value="3" label="Link context menu shown"/>
-  <int value="4" label="Device context menu shown"/>
-  <int value="5" label="Unused/previous device context menu shown"/>
-  <int value="6" label="Collapse Session"/>
-  <int value="7" label="Expand Session"/>
-  <int value="8" label="Open All"/>
-  <int value="9" label="Has foreign data"/>
-  <int value="10" label="Hide for now"/>
-</enum>
-
-<enum name="OutputDeviceStatus" type="int">
-  <int value="0" label="Ok"/>
-  <int value="1" label="Not found"/>
-  <int value="2" label="Not authorized"/>
-  <int value="3" label="Authorization timed out"/>
-  <int value="4" label="Internal error"/>
-</enum>
-
-<enum name="OverscrollMode" type="int">
-  <summary>Direction of the overscroll gesture.</summary>
-  <int value="1" label="North">Scrolled from bottom towards top</int>
-  <int value="2" label="South">Scrolled from top towards the bottom</int>
-  <int value="3" label="West">Scrolled from right towards left</int>
-  <int value="4" label="East">Scrolled from left towards right</int>
-</enum>
-
-<enum name="OverscrollNavigationType" type="int">
-  <summary>
-    Type of the overscroll gesture based on direction and source   (i.e.
-    touchpad vs. touch screen).
-  </summary>
-  <int value="0" label="None">Did not scroll</int>
-  <int value="1" label="Forward Touchpad">Scrolled forward using touchpad</int>
-  <int value="2" label="Back Touchpad">Scrolled back using touchpad</int>
-  <int value="3" label="Forward Touch Screen">
-    Scrolled forward using touch screen
-  </int>
-  <int value="4" label="Back Touch Screen">
-    Scrolled back using touch screen
-  </int>
-</enum>
-
-<enum name="P2PLookupResult" type="int">
-  <int value="0" label="Found"/>
-  <int value="1" label="Not Found"/>
-  <int value="2" label="Vanished"/>
-  <int value="3" label="Canceled"/>
-  <int value="4" label="Filtered"/>
-</enum>
-
-<enum name="P2PServerResult" type="int">
-  <int value="0" label="Response Sent"/>
-  <int value="1" label="Response Interrupted"/>
-  <int value="2" label="Malformed"/>
-  <int value="3" label="Not Found"/>
-  <int value="4" label="Index"/>
-</enum>
-
-<enum name="PacResultForStrippedUrl" type="int">
-  <obsolete>
-    Deprecated 4/27/2016. No longer tracked.
-  </obsolete>
-  <summary>
-    Result for PAC script experiment as defined in
-    net/proxy/proxy_resolver_v8_tracing.h
-  </summary>
-  <int value="0" label="SKIPPED_FALLBACK_BLOCKING_DNS"/>
-  <int value="1" label="SUCCESS"/>
-  <int value="2" label="SUCCESS_DIFFERENT_ALERTS"/>
-  <int value="3" label="SUCCESS_DIFFERENT_NUM_DNS"/>
-  <int value="4" label="FAIL_ABANDONED"/>
-  <int value="5" label="FAIL_FALLBACK_BLOCKING_DNS"/>
-  <int value="6" label="FAIL_ERROR"/>
-  <int value="7" label="FAIL_DIFFERENT_PROXY_LIST"/>
-</enum>
-
-<enum name="PageLoadEvent" type="int">
-  <obsolete>
-    Deprecated in favor of {Committed|Provisional|InternalError}LoadEvent
-  </obsolete>
-  <int value="0" label="Started main frame load"/>
-  <int value="1" label="Failed load before commit"/>
-  <int value="2" label="Aborted load before commit"/>
-  <int value="3" label="Aborted load before first layout"/>
-  <int value="4" label="Successful first layout (foreground)"/>
-  <int value="5" label="Successful first layout (backgrounded)"/>
-</enum>
-
-<enum name="PageScaleFactorRange" type="int">
-  <int value="0" label="&lt;25%"/>
-  <int value="1" label="25-49%"/>
-  <int value="2" label="50-74%"/>
-  <int value="3" label="75-99%"/>
-  <int value="4" label="100-124%"/>
-  <int value="5" label="125-149%"/>
-  <int value="6" label="150-174%"/>
-  <int value="7" label="175-199%"/>
-  <int value="8" label="200-224%"/>
-  <int value="9" label="225-249%"/>
-  <int value="10" label="250-274%"/>
-  <int value="11" label="275-299%"/>
-  <int value="12" label="300-324%"/>
-  <int value="13" label="325-349%"/>
-  <int value="14" label="350-374%"/>
-  <int value="15" label="375-399%"/>
-  <int value="16" label="400-424%"/>
-  <int value="17" label="425-449%"/>
-  <int value="18" label="450-474%"/>
-  <int value="19" label="475-499%"/>
-  <int value="20" label="&gt;=500%"/>
-</enum>
-
-<enum name="PagespeedHeaderServerType" type="int">
-  <int value="0" label="Total responses"/>
-  <int value="1" label="mod_pagespeed server"/>
-  <int value="2" label="ngx_pagespeed server"/>
-  <int value="3" label="PageSpeed Service server"/>
-  <int value="4" label="Unknown server type"/>
-</enum>
-
-<enum name="PagespeedVersion" type="int">
-  <summary>
-    The version of PageSpeed. Values up to 1.6.29.x are in use as of 2013-10-01
-    while later values may adjust 'a' and/or 'b' arbitrarily.
-  </summary>
-  <int value="1" label="Unknown"/>
-  <int value="2" label="0.9.10.0"/>
-  <int value="3" label="0.9.10.x"/>
-  <int value="4" label="0.9.11.0"/>
-  <int value="5" label="0.9.11.x"/>
-  <int value="6" label="0.9.12.0"/>
-  <int value="7" label="0.9.12.x"/>
-  <int value="8" label="0.9.13.0"/>
-  <int value="9" label="0.9.13.x"/>
-  <int value="10" label="0.9.14.0"/>
-  <int value="11" label="0.9.14.x"/>
-  <int value="12" label="0.9.15.0"/>
-  <int value="13" label="0.9.15.x"/>
-  <int value="14" label="0.9.16.0"/>
-  <int value="15" label="0.9.16.x"/>
-  <int value="16" label="0.9.17.0"/>
-  <int value="17" label="0.9.17.x"/>
-  <int value="18" label="0.9.18.0"/>
-  <int value="19" label="0.9.18.x"/>
-  <int value="20" label="0.10.19.0"/>
-  <int value="21" label="0.10.19.x"/>
-  <int value="22" label="0.10.20.0"/>
-  <int value="23" label="0.10.20.x"/>
-  <int value="24" label="0.10.21.0"/>
-  <int value="25" label="0.10.21.x"/>
-  <int value="26" label="0.10.22.0"/>
-  <int value="27" label="0.10.22.x"/>
-  <int value="28" label="1.1.23.0"/>
-  <int value="29" label="1.1.23.x"/>
-  <int value="30" label="1.2.24.0"/>
-  <int value="31" label="1.2.24.x"/>
-  <int value="32" label="1.3.25.0"/>
-  <int value="33" label="1.3.25.x"/>
-  <int value="34" label="1.4.26.0"/>
-  <int value="35" label="1.4.26.x"/>
-  <int value="36" label="1.5.27.0"/>
-  <int value="37" label="1.5.27.x"/>
-  <int value="38" label="1.5.28.0"/>
-  <int value="39" label="1.5.28.x"/>
-  <int value="40" label="1.6.29.0"/>
-  <int value="41" label="1.6.29.x"/>
-  <int value="42" label="a.b.30.0"/>
-  <int value="43" label="a.b.30.x"/>
-  <int value="44" label="a.b.31.0"/>
-  <int value="45" label="a.b.31.x"/>
-  <int value="46" label="a.b.32.0"/>
-  <int value="47" label="a.b.32.x"/>
-  <int value="48" label="a.b.33.0"/>
-  <int value="49" label="a.b.33.x"/>
-  <int value="50" label="a.b.34.0"/>
-  <int value="51" label="a.b.34.x"/>
-  <int value="52" label="a.b.35.0"/>
-  <int value="53" label="a.b.35.x"/>
-  <int value="54" label="a.b.36.0"/>
-  <int value="55" label="a.b.36.x"/>
-  <int value="56" label="a.b.37.0"/>
-  <int value="57" label="a.b.37.x"/>
-  <int value="58" label="a.b.38.0"/>
-  <int value="59" label="a.b.38.x"/>
-  <int value="60" label="a.b.39.0"/>
-  <int value="61" label="a.b.39.x"/>
-  <int value="62" label="a.b.40.0"/>
-  <int value="63" label="a.b.40.x"/>
-  <int value="64" label="a.b.41.0"/>
-  <int value="65" label="a.b.41.x"/>
-  <int value="66" label="a.b.42.0"/>
-  <int value="67" label="a.b.42.x"/>
-  <int value="68" label="a.b.43.0"/>
-  <int value="69" label="a.b.43.x"/>
-  <int value="70" label="a.b.44.0"/>
-  <int value="71" label="a.b.44.x"/>
-  <int value="72" label="a.b.45.0"/>
-  <int value="73" label="a.b.45.x"/>
-  <int value="74" label="a.b.46.0"/>
-  <int value="75" label="a.b.46.x"/>
-  <int value="76" label="a.b.47.0"/>
-  <int value="77" label="a.b.47.x"/>
-  <int value="78" label="a.b.48.0"/>
-  <int value="79" label="a.b.48.x"/>
-  <int value="80" label="a.b.49.0"/>
-  <int value="81" label="a.b.49.x"/>
-  <int value="82" label="a.b.50.0"/>
-  <int value="83" label="a.b.50.x"/>
-  <int value="84" label="a.b.51.0"/>
-  <int value="85" label="a.b.51.x"/>
-  <int value="86" label="a.b.52.0"/>
-  <int value="87" label="a.b.52.x"/>
-  <int value="88" label="a.b.53.0"/>
-  <int value="89" label="a.b.53.x"/>
-  <int value="90" label="a.b.54.0"/>
-  <int value="91" label="a.b.54.x"/>
-  <int value="92" label="a.b.55.0"/>
-  <int value="93" label="a.b.55.x"/>
-  <int value="94" label="a.b.56.0"/>
-  <int value="95" label="a.b.56.x"/>
-  <int value="96" label="a.b.57.0"/>
-  <int value="97" label="a.b.57.x"/>
-  <int value="98" label="a.b.58.0"/>
-  <int value="99" label="a.b.58.x"/>
-</enum>
-
-<enum name="PageUsed" type="int">
-  <int value="0" label="Discarded"/>
-  <int value="1" label="Used"/>
-</enum>
-
-<enum name="PageVisitTransitionType" type="int">
-  <int value="0" label="Page"/>
-  <int value="1" label="Omnibox URL"/>
-  <int value="2" label="Omnibox default search"/>
-  <int value="3" label="Omnibox template search"/>
-  <int value="4" label="Bookmark"/>
-  <int value="5" label="Copy and paste"/>
-  <int value="6" label="Forward or backward"/>
-  <int value="7" label="Restore"/>
-  <int value="8" label="Unknown"/>
-</enum>
-
-<enum name="PaletteModeCancelType" type="int">
-  <int value="0" label="Palette laser pointer mode is cancelled."/>
-  <int value="1" label="Palette laser pointer mode is switched out of"/>
-  <int value="2" label="Palette magnify mode is cancelled."/>
-  <int value="3" label="Palette magnify mode is switched out of."/>
-</enum>
-
-<enum name="PaletteTrayOptions" type="int">
-  <int value="0" label="Palette being closed or dismissed with no action"/>
-  <int value="1" label="Click on the settings button"/>
-  <int value="2" label="Click on the help button"/>
-  <int value="3" label="Capture region"/>
-  <int value="4" label="Capture screen"/>
-  <int value="5" label="Add new note"/>
-  <int value="6" label="Magnifying glass mode"/>
-  <int value="7" label="Laser pointer mode"/>
-</enum>
-
-<enum name="PanningModelType" type="int">
-  <int value="0" label="equalpower"/>
-  <int value="1" label="HRTF"/>
-</enum>
-
-<enum name="ParsedCookieStatus" type="int">
-  <obsolete>
-    Deprecated as of 9/2013. Experiment to measure control characters in cookies
-    is finished.
-  </obsolete>
-  <int value="0" label="All cookie values valid and without control chars"/>
-  <int value="1" label="Cookie contains control chars"/>
-  <int value="2" label="Cookie is invalid"/>
-  <int value="3" label="Cookie contains both control chars and is invalid"/>
-</enum>
-
-<enum name="PassiveForcedListenerResultType" type="int">
-  <int value="0" label="PreventDefaultNotCalled"/>
-  <int value="1" label="DocumentLevelTouchPreventDefaultCalled"/>
-</enum>
-
-<enum name="PasswordBubbleDisplayDisposition" type="int">
-  <int value="0" label="Opened automatically / Offering a password to save"/>
-  <int value="1" label="Opened manually / Offering a password to save"/>
-  <int value="2" label="Opened manually / Managing saved passwords"/>
-  <int value="3" label="Opened manually / Site is blacklisted (obsolete)"/>
-  <int value="4"
-      label="Opened automatically / Confirming generated password saved"/>
-  <int value="5"
-      label="Opened automatically / Offering a credential to choose
-             (obsolete)"/>
-  <int value="6" label="Opened automatically / Auto-signin toast"/>
-  <int value="7" label="Opened manually / Offering a password to update"/>
-  <int value="8" label="Opened automatically / Offering a password to update"/>
-</enum>
-
-<enum name="PasswordBubbleSignInPromoDismissalReason" type="int">
-  <int value="0" label="Dismissed"/>
-  <int value="1" label="Sign in"/>
-  <int value="2" label="No thanks"/>
-</enum>
-
-<enum name="PasswordFormQueryVolume" type="int">
-  <int value="0" label="New password query"/>
-  <int value="1" label="Current query"/>
-</enum>
-
-<enum name="PasswordFormType" type="int">
-  <int value="0" label="Login form"/>
-  <int value="1" label="Login form without username"/>
-  <int value="2"
-      label="Enabled change password form (saved credentials match username)"/>
-  <int value="3"
-      label="Disabled change password form (no matching credentials)"/>
-  <int value="4" label="Disabled change password form without username"/>
-  <int value="5" label="Signup form"/>
-  <int value="6" label="Signup form without username"/>
-  <int value="7" label="Combined login and signup form"/>
-</enum>
-
-<enum name="PasswordGenerationEvent" type="int">
-  <int value="0" label="No sign up form"/>
-  <int value="1" label="Local heuristics found sign up form"/>
-  <int value="2" label="DEPRECATED: Icon shown"/>
-  <int value="3" label="DEPRECATED: Bubble shown"/>
-  <int value="4" label="Generation available"/>
-  <int value="5" label="DEPRECATED: Generation popup shown"/>
-  <int value="6" label="Generated password accepted"/>
-  <int value="7" label="DEPRECATED: Editing popup shown"/>
-  <int value="8" label="Generated password edited"/>
-  <int value="9" label="Generated password deleted"/>
-  <int value="10" label="Generated popup shown (limit once per page)"/>
-  <int value="11" label="Editing popup shown (limit once per page)"/>
-  <int value="12" label="Generation triggered by autocomplete attributes"/>
-</enum>
-
-<enum name="PasswordImportFromCSVResult" type="int">
-  <int value="0" label="Password import succeeded"/>
-  <int value="1" label="Password import failed due to IO error"/>
-  <int value="2" label="Password import failed due to malformed CSV"/>
-  <int value="3" label="Password import failed due to missing content"/>
-  <int value="4" label="Boundary value"/>
-</enum>
-
-<enum name="PasswordManagerActionsTaken" type="int">
-  <obsolete>
-    Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
-  </obsolete>
-  <summary>
-    The value is a combination of three different options - what did the
-    password manager do, what did the user do, and was the form submitted (and
-    submitted successfully or not). The meaning of each value can be determined
-    from the values in chrome/browser/password_manager/password_form_manager.h
-  </summary>
-  <int value="0"
-      label="manager did nothing / user did nothing / form not submitted"/>
-  <int value="1"
-      label="manager did nothing / user chose a value / form not submitted"/>
-  <int value="2"
-      label="manager did nothing / user typed in something / form not
-             submitted"/>
-  <int value="3"
-      label="manager filled the fields / user did nothing / form not
-             submitted"/>
-  <int value="4"
-      label="manager filled the fields / user chose a value / form not
-             submitted"/>
-  <int value="5"
-      label="manager filled the fields / user typed in something / form not
-             submitted"/>
-  <int value="6"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form not submitted"/>
-  <int value="7"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form not submitted (this value shouldn't be possible)"/>
-  <int value="8"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form not submitted"/>
-  <int value="9"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             not submitted"/>
-  <int value="10"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form not submitted (this value shouldn't be possible)"/>
-  <int value="11"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form not submitted"/>
-  <int value="12"
-      label="manager did nothing / user did nothing / form submit failed"/>
-  <int value="13"
-      label="manager did nothing / user chose a value / form submit failed"/>
-  <int value="14"
-      label="manager did nothing / user typed in something / form submit
-             failed"/>
-  <int value="15"
-      label="manager filled the fields / user did nothing / form submit
-             failed"/>
-  <int value="16"
-      label="manager filled the fields / user chose a value / form submit
-             failed"/>
-  <int value="17"
-      label="manager filled the fields / user typed in something / form
-             submit failed"/>
-  <int value="18"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit failed"/>
-  <int value="19"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit failed (this value shouldn't be possible)"/>
-  <int value="20"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form submit failed"/>
-  <int value="21"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             submit failed"/>
-  <int value="22"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form submit failed (this value shouldn't be possible)"/>
-  <int value="23"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form submit failed"/>
-  <int value="24"
-      label="manager did nothing / user did nothing / form submit succeeded"/>
-  <int value="25"
-      label="manager did nothing / user chose a value / form submit succeeded"/>
-  <int value="26"
-      label="manager did nothing / user typed in something / form submit
-             succeeded"/>
-  <int value="27"
-      label="manager filled the fields / user did nothing / form submit
-             succeeded"/>
-  <int value="28"
-      label="manager filled the fields / user chose a value / form submit
-             succeeded"/>
-  <int value="29"
-      label="manager filled the fields / user typed in something / form
-             submit succeeded"/>
-  <int value="30"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit succeeded"/>
-  <int value="31"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit succeeded (this value shouldn't be possible)"/>
-  <int value="32"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form submit succeeded"/>
-  <int value="33"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             submit succeeded"/>
-  <int value="34"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form submit succeeded (this value shouldn't be possible)"/>
-  <int value="35"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form submit succeeded"/>
-</enum>
-
-<enum name="PasswordManagerActionsTakenV3" type="int">
-  <summary>
-    The value is a combination of three different options - what did the
-    password manager do, what did the user do, and was the form submitted (and
-    submitted successfully or not). The meaning of each value can be determined
-    from the values in chrome/browser/password_manager/password_form_manager.h
-  </summary>
-  <int value="0"
-      label="manager did nothing / user did nothing / form not submitted"/>
-  <int value="1"
-      label="manager did nothing / user chose a value / form not submitted"/>
-  <int value="2"
-      label="manager did nothing / user chose a value from PSL / form not
-             submitted"/>
-  <int value="3"
-      label="manager did nothing / user typed in password / form not
-             submitted"/>
-  <int value="4"
-      label="manager did nothing / user typed in username and password / form
-             not submitted"/>
-  <int value="5"
-      label="manager filled the fields / user did nothing / form not
-             submitted"/>
-  <int value="6"
-      label="manager filled the fields / user chose a value / form not
-             submitted"/>
-  <int value="7"
-      label="manager filled the fields / user chose a value from PSL / form
-             not submitted"/>
-  <int value="8"
-      label="manager filled the fields / user typed in password / form not
-             submitted"/>
-  <int value="9"
-      label="manager filled the fields / user typed in username and password
-             / form not submitted"/>
-  <int value="10"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form not submitted"/>
-  <int value="11"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form not submitted (this value shouldn't be possible)"/>
-  <int value="12"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from PSL / form not submitted (this value shouldn't be possible)"/>
-  <int value="13"
-      label="manager did nothing (site was blacklisted) / user typed in
-             password / form not submitted"/>
-  <int value="14"
-      label="manager did nothing (site was blacklisted) / user typed in
-             username and password / form not submitted"/>
-  <int value="15"
-      label="manager did nothing / user did nothing / form submit failed"/>
-  <int value="16"
-      label="manager did nothing / user chose a value / form submit failed"/>
-  <int value="17"
-      label="manager did nothing / user chose a value from psl / form submit
-             failed"/>
-  <int value="18"
-      label="manager did nothing / user typed in password / form submit
-             failed"/>
-  <int value="19"
-      label="manager did nothing / user typed in username and password / form
-             submit failed"/>
-  <int value="20"
-      label="manager filled the fields / user did nothing / form submit
-             failed"/>
-  <int value="21"
-      label="manager filled the fields / user chose a value / form submit
-             failed"/>
-  <int value="22"
-      label="manager filled the fields / user chose a value from psl / form
-             submit failed"/>
-  <int value="23"
-      label="manager filled the fields / user typed in pasword / form submit
-             failed"/>
-  <int value="24"
-      label="manager filled the fields / user typed in username and pasword /
-             form submit failed"/>
-  <int value="25"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit failed"/>
-  <int value="26"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit failed (this value shouldn't be possible)"/>
-  <int value="27"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from psl / form submit failed (this value shouldn't be possible)"/>
-  <int value="28"
-      label="manager did nothing (site was blacklisted) / user typed in
-             password / form submit failed"/>
-  <int value="29"
-      label="manager did nothing (site was blacklisted) / user typed in
-             username and password / form submit failed"/>
-  <int value="30"
-      label="manager did nothing / user did nothing / form submit succeeded"/>
-  <int value="31"
-      label="manager did nothing / user chose a value / form submit succeeded"/>
-  <int value="32"
-      label="manager did nothing / user chose a value from psl / form submit
-             succeeded"/>
-  <int value="33"
-      label="manager did nothing / user typed in password / form submit
-             succeeded"/>
-  <int value="34"
-      label="manager did nothing / user typed in username and password / form
-             submit succeeded"/>
-  <int value="35"
-      label="manager filled the fields / user did nothing / form submit
-             succeeded"/>
-  <int value="36"
-      label="manager filled the fields / user chose a value / form submit
-             succeeded"/>
-  <int value="37"
-      label="manager filled the fields / user chose a value from psl / form
-             submit succeeded"/>
-  <int value="38"
-      label="manager filled the fields / user typed in password / form submit
-             succeeded"/>
-  <int value="39"
-      label="manager filled the fields / user typed in username and password
-             / form submit succeeded"/>
-  <int value="40"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit succeeded"/>
-  <int value="41"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit succeeded (this value shouldn't be possible)"/>
-  <int value="42"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from psl / form submit succeeded (this value shouldn't be
-             possible)"/>
-  <int value="43"
-      label="manager did nothing (site was blacklisted) / user typed in
-             password / form submit succeeded"/>
-  <int value="44"
-      label="manager did nothing (site was blacklisted) / user typed in
-             username and password / form submit succeeded"/>
-</enum>
-
-<enum name="PasswordManagerActionsTakenWithPsl" type="int">
-  <obsolete>
-    Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
-  </obsolete>
-  <summary>
-    The value is a combination of three different options - what did the
-    password manager do, what did the user do, and was the form submitted (and
-    submitted successfully or not). The meaning of each value can be determined
-    from the values in chrome/browser/password_manager/password_form_manager.h
-  </summary>
-  <int value="0"
-      label="manager did nothing / user did nothing / form not submitted"/>
-  <int value="1"
-      label="manager did nothing / user chose a value / form not submitted"/>
-  <int value="2"
-      label="manager did nothing / user chose a value from PSL / form not
-             submitted"/>
-  <int value="3"
-      label="manager did nothing / user typed in something / form not
-             submitted"/>
-  <int value="4"
-      label="manager filled the fields / user did nothing / form not
-             submitted"/>
-  <int value="5"
-      label="manager filled the fields / user chose a value / form not
-             submitted"/>
-  <int value="6"
-      label="manager filled the fields / user chose a value from PSL / form
-             not submitted"/>
-  <int value="7"
-      label="manager filled the fields / user typed in something / form not
-             submitted"/>
-  <int value="8"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form not submitted"/>
-  <int value="9"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form not submitted (this value shouldn't be possible)"/>
-  <int value="10"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from PSL / form not submitted (this value shouldn't be possible)"/>
-  <int value="11"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form not submitted"/>
-  <int value="12"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             not submitted"/>
-  <int value="13"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form not submitted (this value shouldn't be possible)"/>
-  <int value="14"
-      label="manager did nothing (autocomplete off) / user chose a value from
-             psl / form not submitted (this value shouldn't be possible)"/>
-  <int value="15"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form not submitted"/>
-  <int value="16"
-      label="manager did nothing / user did nothing / form submit failed"/>
-  <int value="17"
-      label="manager did nothing / user chose a value / form submit failed"/>
-  <int value="18"
-      label="manager did nothing / user chose a value from psl / form submit
-             failed"/>
-  <int value="19"
-      label="manager did nothing / user typed in something / form submit
-             failed"/>
-  <int value="20"
-      label="manager filled the fields / user did nothing / form submit
-             failed"/>
-  <int value="21"
-      label="manager filled the fields / user chose a value / form submit
-             failed"/>
-  <int value="22"
-      label="manager filled the fields / user chose a value from psl / form
-             submit failed"/>
-  <int value="23"
-      label="manager filled the fields / user typed in something / form
-             submit failed"/>
-  <int value="24"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit failed"/>
-  <int value="25"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit failed (this value shouldn't be possible)"/>
-  <int value="26"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from psl / form submit failed (this value shouldn't be possible)"/>
-  <int value="27"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form submit failed"/>
-  <int value="28"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             submit failed"/>
-  <int value="29"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form submit failed (this value shouldn't be possible)"/>
-  <int value="30"
-      label="manager did nothing (autocomplete off) / user chose a value from
-             psl / form submit failed (this value shouldn't be possible)"/>
-  <int value="31"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form submit failed"/>
-  <int value="32"
-      label="manager did nothing / user did nothing / form submit succeeded"/>
-  <int value="33"
-      label="manager did nothing / user chose a value / form submit succeeded"/>
-  <int value="34"
-      label="manager did nothing / user chose a value from psl / form submit
-             succeeded"/>
-  <int value="35"
-      label="manager did nothing / user typed in something / form submit
-             succeeded"/>
-  <int value="36"
-      label="manager filled the fields / user did nothing / form submit
-             succeeded"/>
-  <int value="37"
-      label="manager filled the fields / user chose a value / form submit
-             succeeded"/>
-  <int value="38"
-      label="manager filled the fields / user chose a value from psl / form
-             submit succeeded"/>
-  <int value="39"
-      label="manager filled the fields / user typed in something / form
-             submit succeeded"/>
-  <int value="40"
-      label="manager did nothing (site was blacklisted) / user did nothing /
-             form submit succeeded"/>
-  <int value="41"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             / form submit succeeded (this value shouldn't be possible)"/>
-  <int value="42"
-      label="manager did nothing (site was blacklisted) / user chose a value
-             from psl / form submit succeeded (this value shouldn't be
-             possible)"/>
-  <int value="43"
-      label="manager did nothing (site was blacklisted) / user typed in
-             something / form submit succeeded"/>
-  <int value="44"
-      label="manager did nothing (autocomplete off) / user did nothing / form
-             submit succeeded"/>
-  <int value="45"
-      label="manager did nothing (autocomplete off) / user chose a value /
-             form submit succeeded (this value shouldn't be possible)"/>
-  <int value="46"
-      label="manager did nothing (autocomplete off) / user chose a value from
-             psl / form submit succeeded (this value shouldn't be possible)"/>
-  <int value="47"
-      label="manager did nothing (autocomplete off) / user typed in something
-             / form submit succeeded"/>
-</enum>
-
-<enum name="PasswordManagerAllowToCollectURLBubble.UIDismissalReason"
-    type="int">
-  <obsolete>
-    The bubble isn't shown anymore. Become obsolete in Feb. 2015.
-  </obsolete>
-  <int value="0" label="Bubble lost focus / No infobar interaction"/>
-  <int value="1" label="Clicked collect URL"/>
-  <int value="2" label="Clicked do not collect URL"/>
-</enum>
-
-<enum name="PasswordManagerEmptyUsernameField" type="int">
-  <int value="0" label="Has username field"/>
-  <int value="1" label="No username field"/>
-</enum>
-
-<enum name="PasswordManagerEmptyUsernamePasswordChangeForm" type="int">
-  <int value="0" label="Not a password change form"/>
-  <int value="1" label="A password change form"/>
-</enum>
-
-<enum name="PasswordManagerFilledAndroidCredentials" type="int">
-  <int value="0" label="NOT from Android"/>
-  <int value="1" label="From Android"/>
-</enum>
-
-<enum name="PasswordManagerOfferedAndroidCredentials" type="int">
-  <int value="0" label="None from Android"/>
-  <int value="1" label="1+ from Android"/>
-</enum>
-
-<enum name="PasswordManagerOsPasswordStatus" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Unsupported platform"/>
-  <int value="2" label="Password is blank"/>
-  <int value="3" label="Password is non blank"/>
-  <int value="4"
-      label="Password status not checked as user is on a Windows Domain"/>
-</enum>
-
-<enum name="PasswordManagerPreferencesInitialAndFinalValues" type="int">
-  <summary>
-    The pair of initial values and the pair of final values for the legacy
-    preference for controlling the Chrome Password Manager and new preference
-    for controlling Smart Lock on Android. In the values label N means new pref
-    value, L meand legacy pref value.
-  </summary>
-  <int value="0"
-      label="Initial state: N='off', L='off' Final state: N='off', L='off'"/>
-  <int value="1"
-      label="Initial state: N='off', L='off' Final state: N='off', L='on'"/>
-  <int value="2"
-      label="Initial state: N='off', L='off' Final state: N='on', L='off'"/>
-  <int value="3"
-      label="Initial state: N='off', L='off' Final state: N='on', L='on'"/>
-  <int value="4"
-      label="Initial state: N='off', L='on' Final state: N='off', L='off'"/>
-  <int value="5"
-      label="Initial state: N='off', L='on' Final state: N='off', L='on'"/>
-  <int value="6"
-      label="Initial state: N='off', L='on' Final state: N='on', L='off'"/>
-  <int value="7"
-      label="Initial state: N='off', L='on' Final state: N='on', L='on'"/>
-  <int value="8"
-      label="Initial state: N='on', L='off' Final state: N='off', L='off'"/>
-  <int value="9"
-      label="Initial state: N='on', L='off' Final state: N='off', L='on'"/>
-  <int value="10"
-      label="Initial state: N='on', L='off' Final state: N='on', L='off'"/>
-  <int value="11"
-      label="Initial state: N='on', L='off' Final state: N='on', L='on'"/>
-  <int value="12"
-      label="Initial state: N='on', L='on' Final state: N='off', L='off'"/>
-  <int value="13"
-      label="Initial state: N='on', L='on' Final state: N='off', L='on'"/>
-  <int value="14"
-      label="Initial state: N='on', L='on' Final state: N='on', L='off'"/>
-  <int value="15"
-      label="Initial state: N='on', L='on' Final state: N='on', L='on'"/>
-</enum>
-
-<enum name="PasswordManagerPreferencesInitialValues" type="int">
-  <summary>
-    The pair of initial values for the legacy preference for controlling the
-    Chrome Password Manager and new preference for controlling Smart Lock on
-    Android.
-  </summary>
-  <int value="0" label="New pref is 'off', legacy pref is 'off'"/>
-  <int value="1" label="New pref is 'off', legacy pref is 'on'"/>
-  <int value="2" label="New pref is 'on', legacy pref is 'off'"/>
-  <int value="3" label="New pref is 'on', legacy pref is 'on'"/>
-</enum>
-
-<enum name="PasswordManagerPslDomainMatchTriggering" type="int">
-  <summary>
-    The value indicates whether an entry returned by password autofill contains
-    a value that was found by matching against the public suffix list.
-  </summary>
-  <int value="0" label="Matching not used"/>
-  <int value="1" label="No match"/>
-  <int value="2" label="Match"/>
-  <int value="3" label="Federated match"/>
-</enum>
-
-<enum name="PasswordManagerShowEmptyUsername" type="int">
-  <int value="0" label="Non-empty username"/>
-  <int value="1" label="Empty username"/>
-</enum>
-
-<enum name="PasswordManagerSyncingAccountState" type="int">
-  <summary>
-    The value is a combination of the current sync state and if the user has
-    their sync password saved.
-  </summary>
-  <int value="0" label="Syncing/Sync password not saved"/>
-  <int value="1" label="Syncing/Sync password saved"/>
-  <int value="2" label="Not Syncing/Sync password not saved"/>
-  <int value="3"
-      label="Not Syncing/Sync pasword saved. This value should not happen."/>
-</enum>
-
-<enum name="PasswordManagerUIDismissalReason" type="int">
-  <int value="0" label="Bubble lost focus / No infobar interaction"/>
-  <int value="1" label="Clicked 'Save'"/>
-  <int value="2" label="Clicked 'Nope'"/>
-  <int value="3" label="Clicked 'Never'"/>
-  <int value="4" label="Clicked 'Manage passwords'"/>
-  <int value="5" label="Clicked 'Done'"/>
-  <int value="6" label="Clicked 'Unblacklist' (obsolete)"/>
-  <int value="7" label="Clicked 'OK'"/>
-  <int value="8" label="Clicked on a credential (obsolete)"/>
-  <int value="9" label="Auto-signin toast timeout"/>
-  <int value="10" label="Auto-signin toast clicked (obsolete)"/>
-  <int value="11" label="Clicked 'Google Smart Lock'"/>
-  <int value="12" label="Clicked the link passwords.google.com"/>
-</enum>
-
-<enum name="PasswordReusePasswordFieldDetected" type="int">
-  <int value="0" label="No password field"/>
-  <int value="1" label="Has password field"/>
-</enum>
-
-<enum name="PasswordSubmissionEvent" type="int">
-  <int value="0" label="Password submission succeeded"/>
-  <int value="1" label="Password submission failed"/>
-  <int value="2" label="Password not submitted"/>
-  <int value="3" label="Generated password overridden by a non-generated one"/>
-  <int value="4" label="Password used"/>
-  <int value="5" label="Generated password submission would have failed"/>
-</enum>
-
-<enum name="PasswordSyncState" type="int">
-  <int value="0" label="Syncing OK"/>
-  <int value="1" label="Read failed"/>
-  <int value="2" label="Duplcate tags"/>
-  <int value="3" label="Server failed"/>
-</enum>
-
-<enum name="PaymentRequestAbortReason" type="int">
-  <int value="0" label="DismissedByUser"/>
-  <int value="1" label="AbortedByMerchant"/>
-  <int value="2" label="InvalidDataFromRenderer"/>
-  <int value="3" label="MojoConnectionError"/>
-  <int value="4" label="MojoRendererClosing"/>
-  <int value="5" label="InstrumentDetailsError"/>
-  <int value="6" label="NoMatchingPaymentMethod - Deprecated"/>
-  <int value="7" label="NoSupportedPaymentMethod - Deprecated"/>
-  <int value="8" label="Other"/>
-</enum>
-
-<enum name="PaymentRequestCanMakePaymentEffectOnShow" type="int">
-  <int value="0"
-      label="CanMakePayment() returned false and show() was not called"/>
-  <int value="1" label="CanMakePayment() returned false and show() was called"/>
-  <int value="2"
-      label="CanMakePayment() returned true and show() was not called"/>
-  <int value="3" label="CanMakePayment() returned true and show() was called"/>
-</enum>
-
-<enum name="PaymentRequestFlowCompletionStatus" type="int">
-  <int value="0" label="Completed"/>
-  <int value="1" label="Aborted"/>
-</enum>
-
-<enum name="PaymentRequestNoShowReason" type="int">
-  <int value="0" label="NoMatchingPaymentMethod"/>
-  <int value="1" label="NoSupportedPaymentMethod"/>
-</enum>
-
-<enum name="PaymentRequestPaymentMethods" type="int">
-  <int value="0" label="Autofill credit cards"/>
-  <int value="1" label="Android Pay"/>
-  <int value="2" label="Other Payment App"/>
-</enum>
-
-<enum name="PaymentRequestRequestedInformation" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Email"/>
-  <int value="2" label="Phone"/>
-  <int value="3" label="Email and Phone"/>
-  <int value="4" label="Shipping Address"/>
-  <int value="5" label="Email and Shipping Address"/>
-  <int value="6" label="Phone and Shipping Address"/>
-  <int value="7" label="Email, Phone and Shipping Address"/>
-  <int value="8" label="Name"/>
-  <int value="9" label="Email and Name"/>
-  <int value="10" label="Phone and Name"/>
-  <int value="11" label="Email, Phone and Name"/>
-  <int value="12" label="Shipping Address and Name"/>
-  <int value="13" label="Email, Shipping Address and Name"/>
-  <int value="14" label="Phone, Shipping Address and Name"/>
-  <int value="15" label="Email, Phone, Shipping Address and Name"/>
-</enum>
-
-<enum name="PDFFeatures" type="int">
-  <int value="0" label="Loaded Document"/>
-  <int value="1" label="Has Title"/>
-  <int value="2" label="Has Bookmarks"/>
-</enum>
-
-<enum name="PeerConnectionCounters" type="int">
-  <int value="0" label="PeerConnection enabled with IPv4."/>
-  <int value="1" label="PeerConnection enabled with Ipv6."/>
-  <int value="2" label="IPv4 BestConnection."/>
-  <int value="3" label="IPv6 BestConnection."/>
-</enum>
-
-<enum name="PeerConnectionRtcpMux" type="int">
-  <int value="0" label="Disabled"/>
-  <int value="1" label="Enabled"/>
-  <int value="2" label="No media"/>
-</enum>
-
-<enum name="PeerConnectionRtcpMuxPolicy" type="int">
-  <int value="0" label="Require"/>
-  <int value="1" label="Negotiate"/>
-  <int value="2" label="Default"/>
-</enum>
-
-<enum name="PepperInterface" type="int">
-<!-- Generated by ppapi/tools/pepper_hash_for_uma.cc -->
-
-  <int value="286711" label="PPB_FlashFullscreen;0.1"/>
-  <int value="2804066" label="PPB_AudioConfig;1.1"/>
-  <int value="8760108" label="PPB_Testing_Private;1.0"/>
-  <int value="10714106" label="PPB_OutputProtection_Private;0.1"/>
-  <int value="11143977" label="PPB_PlatformVerification_Private;0.2"/>
-  <int value="12033600" label="PPB_Compositor;0.1"/>
-  <int value="13662160" label="PPB_CharSet(Dev);0.4"/>
-  <int value="22816901" label="PPB_FileChooser(Dev);0.5"/>
-  <int value="28187368" label="PPB_IMEInputEvent(Dev);0.2"/>
-  <int value="36133501" label="PPB_MediaStreamVideoTrack;1.0"/>
-  <int value="37307420" label="PPB_Scrollbar(Dev);0.5"/>
-  <int value="59327104" label="PPB_Messaging;1.2"/>
-  <int value="62905097" label="PPB_TrueTypeFont(Dev);0.1"/>
-  <int value="79708274" label="PPB_TCPSocket;1.1"/>
-  <int value="110360074" label="PPB_Var;1.1"/>
-  <int value="125017713" label="PPB_CameraCapabilities_Private;0.1"/>
-  <int value="126651696" label="PPB_ContentDecryptor_Private;0.12"/>
-  <int value="138418890" label="PPB_Memory(Dev);0.1"/>
-  <int value="150724524" label="PPB_Graphics2D;1.2"/>
-  <int value="153443470" label="PPB_URLResponseInfo;1.0"/>
-  <int value="153532707" label="PPB_Buffer(Dev);0.4"/>
-  <int value="156766028" label="PPB_UMA_Private;0.3"/>
-  <int value="162107265" label="PPB_NetworkMonitor;1.0"/>
-  <int value="180906214" label="PPB_Instance_Private;0.1"/>
-  <int value="206043276" label="PPB_CompositorLayer;0.1"/>
-  <int value="221802429" label="PPB_URLUtil(Dev);0.7"/>
-  <int value="225125520" label="PPB_Find(Private);0.3"/>
-  <int value="226206264" label="PPB_FileRef;1.1"/>
-  <int value="229560990" label="PPB_Var(Deprecated);0.3"/>
-  <int value="250764663" label="PPB_Graphics2D(Dev);0.2"/>
-  <int value="320267009" label="PPB_Flash_File_ModuleLocal;3"/>
-  <int value="344923193" label="PPB_CompositorLayer;0.2"/>
-  <int value="348907389" label="PPB_TCPSocket_Private;0.4"/>
-  <int value="382780521" label="PPB_FileRef;1.2"/>
-  <int value="415548516" label="PPB_MessageLoop;1.0"/>
-  <int value="434146763" label="PPB_BrowserFont_Trusted;1.0"/>
-  <int value="495324603" label="PPB_Widget(Dev);0.4"/>
-  <int value="556941117" label="PPB_IMEInputEvent;1.0"/>
-  <int value="588532407" label="PPB_Graphics2D;1.1"/>
-  <int value="596770967" label="PPB_X509Certificate_Private;0.1"/>
-  <int value="612625164" label="PPB_InputEvent;1.0"/>
-  <int value="615811055" label="PPB_Flash_MessageLoop;0.1"/>
-  <int value="617438958" label="PPB_VideoDecoder;1.0"/>
-  <int value="629092173" label="PPB_VideoCapture(Dev);0.3"/>
-  <int value="630100238" label="PPB_AudioBuffer;0.1"/>
-  <int value="631212065" label="PPB_MouseInputEvent;1.0"/>
-  <int value="632306545" label="PPB_FileRef;1.0"/>
-  <int value="656561383" label="PPB_FlashFullscreen;1.0"/>
-  <int value="657117235" label="PPB_Flash_DRM;1.0"/>
-  <int value="668624105" label="PPB_Flash_DeviceID;1.0"/>
-  <int value="706893509" label="PPB_ContentDecryptor_Private;0.11"/>
-  <int value="714324031" label="PPB_Graphics3D;1.0"/>
-  <int value="724664149" label="PPB_Flash_Menu;0.2"/>
-  <int value="732838108" label="PPB_IsolatedFileSystem_Private;0.2"/>
-  <int value="760024173" label="PPB_FileIO;1.0"/>
-  <int value="760246876" label="PPB_OpenGLES2VertexArrayObject;1.0"/>
-  <int value="763746388" label="PPB_NaCl_Private;1.0"/>
-  <int value="772423590" label="PPB_TouchInputEvent;1.0"/>
-  <int value="780912189" label="PPB_Alarms(Dev);0.1"/>
-  <int value="795366801" label="PPB_Trace_Event(Dev);0.2"/>
-  <int value="804011173" label="PPB_Gamepad;1.0"/>
-  <int value="810111568" label="PPB_Messaging;1.0"/>
-  <int value="829878300" label="PPB_TCPSocket;1.0"/>
-  <int value="835840137" label="PPB_WebSocket;1.0"/>
-  <int value="844787073" label="PPB_TextInput(Dev);0.2"/>
-  <int value="856177441" label="PPB_VarArray;1.0"/>
-  <int value="857934187" label="PPB_Ext_Socket(Dev);0.1"/>
-  <int value="866907383" label="PPB_View;1.2"/>
-  <int value="883046945" label="PPB_OpenGLES2ChromiumMapSub;1.0"/>
-  <int value="890225106" label="PPB_FileChooserTrusted;0.6"/>
-  <int value="893629850" label="PPB_VarArrayBuffer;1.0"/>
-  <int value="897332014" label="PPB_Zoom(Dev);0.2"/>
-  <int value="906618937" label="PPB_Find_Private;0.3"/>
-  <int value="910782902" label="PPB_AudioFrame;0.1"/>
-  <int value="913922409" label="PPB_NetworkProxy;1.0"/>
-  <int value="916446405" label="PPB_URLUtil(Dev);0.6"/>
-  <int value="929640141" label="PPB_VideoDestination_Private;0.1"/>
-  <int value="930528031" label="PPB_OpenGLES2DrawBuffers(Dev);1.0"/>
-  <int value="930786862" label="PPB_Flash_Clipboard;5.0"/>
-  <int value="941275733" label="PPB_Flash;12.6"/>
-  <int value="943174056" label="PPB_VideoDecoder;0.2"/>
-  <int value="944161065" label="PPB_Flash_DRM;1.1"/>
-  <int value="946515854" label="PPB_View(Dev);0.1"/>
-  <int value="948969343" label="PPB_OpenGLES2;1.0"/>
-  <int value="961061294" label="PPB_Var;1.2"/>
-  <int value="961317980" label="PPB_Fullscreen;1.0"/>
-  <int value="964595048" label="PPB_BrokerTrusted;0.2"/>
-  <int value="965548627" label="PPB_Audio;1.1"/>
-  <int value="972914533" label="PPB_TextInputController;1.0"/>
-  <int value="997459960" label="PPB_FileChooserTrusted;0.5"/>
-  <int value="1008493701" label="PPB_UDPSocket;1.0"/>
-  <int value="1017579801" label="PPB_OpenGLES2FramebufferBlit;1.0"/>
-  <int value="1032125598" label="PPB_HostResolver;1.0"/>
-  <int value="1032205959" label="PPB_UDPSocket;1.1"/>
-  <int value="1039206341" label="PPB_UDPSocket_Private;0.2"/>
-  <int value="1042058362" label="PPB_Core;1.0"/>
-  <int value="1050892821" label="PPB_OpenGLES2InstancedArrays;1.0"/>
-  <int value="1055791466" label="PPB_CursorControl(Dev);0.4"/>
-  <int value="1065040273" label="PPB_KeyboardInputEvent;1.2"/>
-  <int value="1086644401" label="PPB_Proxy_Private;6"/>
-  <int value="1094761313" label="PPB_URLLoaderTrusted;0.3"/>
-  <int value="1099975614" label="PPB_Flash;12.5"/>
-  <int value="1111997633" label="PPB_AudioInput(Dev);0.4"/>
-  <int value="1155638369" label="PPB_WheelInputEvent;1.0"/>
-  <int value="1161845861" label="PPB_NetAddress_Private;1.0"/>
-  <int value="1173327824" label="PPB_OpenGLES2ChromiumEnableFeature;1.0"/>
-  <int value="1188712923" label="PPB_Talk_Private;2.0"/>
-  <int value="1218354710" label="PPB_VideoFrame;0.1"/>
-  <int value="1260990020" label="PPB_Ext_Socket(Dev);0.2"/>
-  <int value="1262240942" label="PPB_FileIO;1.1"/>
-  <int value="1262834677" label="PPB_CameraDevice_Private;0.1"/>
-  <int value="1272679676" label="PPB_TCPSocket_Private;0.5"/>
-  <int value="1296231808" label="PPB_VideoDecoder;0.1"/>
-  <int value="1304992407" label="PPB_UDPSocket;1.2"/>
-  <int value="1316246754" label="PPB_KeyboardInputEvent;1.0"/>
-  <int value="1316320941" label="PPB_Graphics2D(Dev);0.1"/>
-  <int value="1321620067" label="PPB_Instance;1.0"/>
-  <int value="1328369437" label="PPB_Talk_Private;1.0"/>
-  <int value="1337084425" label="PPB_View;1.0"/>
-  <int value="1354526686" label="PPB_FileIO_Private;0.1"/>
-  <int value="1357207230" label="PPB_DeviceRef(Dev);0.1"/>
-  <int value="1358195444" label="PPB_CharSet_Trusted;1.0"/>
-  <int value="1360443600" label="PPB_OpenGLES2FramebufferMultisample;1.0"/>
-  <int value="1374404330" label="PPB_BrokerTrusted;0.3"/>
-  <int value="1374976378" label="PPB_OpenGLES2Query;1.0"/>
-  <int value="1423820530" label="PPB_ContentDecryptor_Private;0.14"/>
-  <int value="1437724812" label="PPB_AudioConfig;1.0"/>
-  <int value="1443771913" label="PPB_NetAddress;1.0"/>
-  <int value="1502481774" label="PPB_OpenGLES2ChromiumMapSub(Dev);1.0"/>
-  <int value="1504691399" label="PPB_Flash;13.0"/>
-  <int value="1505595424" label="PPB_Crypto(Dev);0.1"/>
-  <int value="1508192415" label="PPB_VarDictionary;1.0"/>
-  <int value="1519132417" label="PPB_FileSystem;1.0"/>
-  <int value="1520420939" label="PPB_MouseCursor;1.0"/>
-  <int value="1528832860" label="PPB_FileChooser(Dev);0.6"/>
-  <int value="1534600005" label="PPB_AudioEncoder;0.1"/>
-  <int value="1577776196" label="PPB_InputEvent_Private;0.1"/>
-  <int value="1616589391" label="PPB_TCPServerSocket_Private;0.2"/>
-  <int value="1641037564" label="PPB_VideoSource_Private;0.1"/>
-  <int value="1645591549" label="PPB_Widget(Dev);0.3"/>
-  <int value="1659973365" label="PPB_ImageCapture_Private;0.1"/>
-  <int value="1665257952" label="PPB_VideoDecoder;1.1"/>
-  <int value="1677958987" label="PPB_ImageData;1.0"/>
-  <int value="1680873803" label="PPB_Console;1.0"/>
-  <int value="1681523535" label="PPB_TCPSocket;1.2"/>
-  <int value="1703245231" label="PPB_NetworkList;1.0"/>
-  <int value="1714657156" label="PPB_MediaStreamAudioTrack;0.1"/>
-  <int value="1721408268" label="PPB_URLLoader;1.0"/>
-  <int value="1735606779" label="PPB_VideoEncoder;0.1"/>
-  <int value="1753813390" label="PPB_Flash_Clipboard;4.0"/>
-  <int value="1773992510" label="PPB_PDF;1"/>
-  <int value="1775059283" label="PPB_Flash_FontFile;0.1"/>
-  <int value="1779899536" label="PPB_Flash_Print;1.0"/>
-  <int value="1821321578" label="PPB_UMA_Private;0.2"/>
-  <int value="1822250569" label="PPB_Trace_Event(Dev);0.1"/>
-  <int value="1827038364" label="PPB_DisplayColorProfile_Private;0.1"/>
-  <int value="1838344955" label="PPB_Flash;12.4"/>
-  <int value="1845295664" label="PPB_Ext_CrxFileSystem_Private;0.1"/>
-  <int value="1866591098" label="PPB_FileRefPrivate;0.1"/>
-  <int value="1870131254" label="PPB_MouseLock;1.0"/>
-  <int value="1930785273" label="PPB_Var;1.0"/>
-  <int value="1944731926" label="PPB_URLRequestInfo;1.0"/>
-  <int value="1955790313" label="PPB_MediaStreamVideoTrack;0.1"/>
-  <int value="1970082102" label="PPB_TCPServerSocket_Private;0.1"/>
-  <int value="1978180250" label="PPB_Flash_Clipboard;5.1"/>
-  <int value="1980463089" label="PPB_View;1.1"/>
-  <int value="1981643755" label="PPB_FileMapping;0.1"/>
-  <int value="1990584694" label="PPB_VpnProvider;0.1"/>
-  <int value="1994108724" label="PPB_Flash_File_FileRef;2"/>
-  <int value="1997668256" label="PPB_GLESChromiumTextureMapping(Dev);0.1"/>
-  <int value="1998274350" label="PPB_Font(Dev);0.6"/>
-  <int value="2001322203" label="PPB_Messaging;1.1"/>
-  <int value="2003778556" label="PPB_MouseInputEvent;1.1"/>
-  <int value="2005291722" label="PPB_NetAddress_Private;1.1"/>
-  <int value="2012645499" label="PPB_Find(Dev);0.3"/>
-  <int value="2019398562" label="PPB_TCPSocket_Private;0.3"/>
-  <int value="2023751176" label="PPB_Printing(Dev);0.7"/>
-  <int value="2024537413" label="PPB_Graphics2D;1.0"/>
-  <int value="2026777995" label="PPB_VideoDecoder(Dev);0.16"/>
-  <int value="2027770764" label="PPB_UDPSocket_Private;0.3"/>
-  <int value="2031327332" label="PPB_TextInput(Dev);0.1"/>
-  <int value="2056532375" label="PPB_Audio;1.0"/>
-  <int value="2062775054" label="PPB_IMEInputEvent(Dev);0.1"/>
-  <int value="2070539867" label="PPB_ContentDecryptor_Private;0.13"/>
-  <int value="2070630224" label="PPB_AudioInput(Dev);0.3"/>
-  <int value="2095945999" label="PPB_NetAddress_Private;0.1"/>
-  <int value="2098849894" label="PPB_ContentDecryptor_Private;0.10"/>
-  <int value="2123225074" label="PPB_HostResolver_Private;0.1"/>
-  <int value="2126196629" label="PPB_UDPSocket_Private;0.4"/>
-</enum>
-
-<enum name="PermissionAction" type="int">
-  <int value="0" label="GRANTED"/>
-  <int value="1" label="DENIED"/>
-  <int value="2" label="DISMISSED"/>
-  <int value="3" label="IGNORED"/>
-  <int value="4" label="REVOKED"/>
-</enum>
-
-<enum name="PermissionEmbargoStatus" type="int">
-  <int value="0" label="NOT_EMBARGOED"/>
-  <int value="1" label="BLACKLISTED"/>
-  <int value="2" label="REPEATED_DISMISSALS"/>
-</enum>
-
-<enum name="PermissionRequestType" type="int">
-  <int value="0" label="PERMISSION_BUBBLE_UNKNOWN"/>
-  <int value="1" label="PERMISSION_BUBBLE_MULTIPLE"/>
-  <int value="2" label="PERMISSION_BUBBLE_UNUSED_PERMISSION"/>
-  <int value="3" label="PERMISSION_BUBBLE_QUOTA"/>
-  <int value="4" label="PERMISSION_BUBBLE_DOWNLOAD"/>
-  <int value="5" label="PERMISSION_BUBBLE_MEDIA_STREAM"/>
-  <int value="6" label="PERMISSION_BUBBLE_REGISTER_PROTOCOL_HANDLER"/>
-  <int value="7" label="PERMISSION_BUBBLE_PERMISSION_GEOLOCATION"/>
-  <int value="8" label="PERMISSION_BUBBLE_PERMISSION_MIDI_SYSEX"/>
-  <int value="9" label="PERMISSION_BUBBLE_PERMISSION_NOTIFICATIONS"/>
-  <int value="10"
-      label="PERMISSION_BUBBLE_PERMISSION_PROTECTED_MEDIA_IDENTIFIER"/>
-  <int value="11" label="PERMISSION_BUBBLE_PERMISSION_PUSH_MESSAGING"/>
-</enum>
-
-<enum name="PermissionStatus" type="int">
-  <int value="0" label="PERMISSION_STATUS_GRANTED"/>
-  <int value="1" label="PERMISSION_STATUS_DENIED"/>
-  <int value="2" label="PERMISSION_STATUS_ASK"/>
-</enum>
-
-<enum name="PermissionType" type="int">
-  <int value="0" label="PERMISSION_UNKNOWN"/>
-  <int value="1" label="PERMISSION_MIDI_SYSEX"/>
-  <int value="2" label="PERMISSION_PUSH_MESSAGING"/>
-  <int value="3" label="PERMISSION_NOTIFICATIONS"/>
-  <int value="4" label="PERMISSION_GEOLOCATION"/>
-  <int value="5" label="PERMISSION_PROTECTED_MEDIA_IDENTIFIER"/>
-  <int value="6" label="PERMISSION_MIDI"/>
-  <int value="7" label="PERMISSION_DURABLE_STORAGE"/>
-  <int value="8" label="PERMISSION_AUDIO_CAPTURE"/>
-  <int value="9" label="PERMISSION_VIDEO_CAPTURE"/>
-  <int value="10" label="PERMISSION_BACKGROUND_SYNC"/>
-  <int value="11" label="PERMISSION_FLASH"/>
-</enum>
-
-<enum name="PersistedLogsLogReadStatus" type="int">
-  <int value="0" label="RECALL_SUCCESS"/>
-  <int value="1" label="LIST_EMPTY"/>
-  <int value="2" label="LIST_SIZE_MISSING"/>
-  <int value="3" label="LIST_SIZE_TOO_SMALL"/>
-  <int value="4" label="LIST_SIZE_CORRUPTION"/>
-  <int value="5" label="LOG_STRING_CORRUPTION"/>
-  <int value="6" label="CHECKSUM_CORRUPTION"/>
-  <int value="7" label="CHECKSUM_STRING_CORRUPTION"/>
-  <int value="8" label="DECODE_FAIL"/>
-  <int value="9" label="DEPRECATED_XML_PROTO_MISMATCH"/>
-</enum>
-
-<enum name="PersistentAllocatorErrors" type="int">
-  <int value="1" label="Allocator memory is corrupt (set only once)"/>
-</enum>
-
-<enum name="PersistentHistogramsInitResult" type="int">
-  <int value="0" label="Local-Memory Success"/>
-  <int value="1" label="Local-Memory Failure"/>
-  <int value="2" label="Mapped-File Success"/>
-  <int value="3" label="Mapped-File Failure"/>
-  <int value="5" label="Mapped-File Already Exists"/>
-</enum>
-
-<enum name="PhotoEditorFileType" type="int">
-  <int value="0" label="jpg"/>
-  <int value="1" label="png"/>
-  <int value="2" label="gif"/>
-  <int value="3" label="bmp"/>
-  <int value="4" label="webp"/>
-  <int value="5" label="other"/>
-</enum>
-
-<enum name="PhotoEditorLoadMode" type="int">
-  <int value="0" label="From full resolution cache"/>
-  <int value="1" label="From screen resolution cache"/>
-  <int value="2" label="From file"/>
-  <int value="3" label="Other"/>
-</enum>
-
-<enum name="PhotoEditorSaveResult" type="int">
-  <int value="0" label="Failure"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="Other"/>
-</enum>
-
-<enum name="PhotoEditorToolType" type="int">
-  <int value="0" label="Auto-fix"/>
-  <int value="1" label="Crop"/>
-  <int value="2" label="Brightness"/>
-  <int value="3" label="Rotate left"/>
-  <int value="4" label="Rotate right"/>
-  <int value="5" label="Rotate undo"/>
-  <int value="6" label="Rotate redo"/>
-  <int value="7" label="Share"/>
-  <int value="8" label="Other"/>
-</enum>
-
-<enum name="PhysicalWebActivityReferer" type="int">
-  <int value="0" label="REFERER_UNDEFINED"/>
-  <int value="1" label="REFERER_NOTIFICATION (Obsolete)"/>
-  <int value="2" label="REFERER_OPTIN (Obsolete)"/>
-  <int value="3" label="REFERER_PREFERENCE"/>
-  <int value="4" label="REFERER_DIAGNOSTICS"/>
-</enum>
-
-<enum name="PhysicalWebInitialStateIosChrome" type="int">
-  <int value="0" label="OPTOUT_BTOFF_LOCOFF_UNAUTH"/>
-  <int value="1" label="OPTOUT_BTOFF_LOCOFF_AUTH"/>
-  <int value="2" label="OPTOUT_BTOFF_LOCON_UNAUTH"/>
-  <int value="3" label="OPTOUT_BTOFF_LOCON_AUTH"/>
-  <int value="4" label="OPTOUT_BTON_LOCOFF_UNAUTH"/>
-  <int value="5" label="OPTOUT_BTON_LOCOFF_AUTH"/>
-  <int value="6" label="OPTOUT_BTON_LOCON_UNAUTH"/>
-  <int value="7" label="OPTOUT_BTON_LOCON_AUTH"/>
-  <int value="8" label="OPTIN_BTOFF_LOCOFF_UNAUTH"/>
-  <int value="9" label="OPTIN_BTOFF_LOCOFF_AUTH"/>
-  <int value="10" label="OPTIN_BTOFF_LOCON_UNAUTH"/>
-  <int value="11" label="OPTIN_BTOFF_LOCON_AUTH"/>
-  <int value="12" label="OPTIN_BTON_LOCOFF_UNAUTH"/>
-  <int value="13" label="OPTIN_BTON_LOCOFF_AUTH"/>
-  <int value="14" label="OPTIN_BTON_LOCON_UNAUTH"/>
-  <int value="15" label="OPTIN_BTON_LOCON_AUTH"/>
-  <int value="16" label="ONBOARDING_BTOFF_LOCOFF_UNAUTH"/>
-  <int value="17" label="ONBOARDING_BTOFF_LOCOFF_AUTH"/>
-  <int value="18" label="ONBOARDING_BTOFF_LOCON_UNAUTH"/>
-  <int value="19" label="ONBOARDING_BTOFF_LOCON_AUTH"/>
-  <int value="20" label="ONBOARDING_BTON_LOCOFF_UNAUTH"/>
-  <int value="21" label="ONBOARDING_BTON_LOCOFF_AUTH"/>
-  <int value="22" label="ONBOARDING_BTON_LOCON_UNAUTH"/>
-  <int value="23" label="ONBOARDING_BTON_LOCON_AUTH"/>
-</enum>
-
-<enum name="PhysicalWebPreferenceStatus" type="int">
-  <int value="0" label="OFF"/>
-  <int value="1" label="ON"/>
-  <int value="2" label="ONBOARDING"/>
-</enum>
-
-<enum name="PingResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Response started"/>
-  <int value="2" label="Timed out"/>
-  <int value="3" label="Canceled"/>
-  <int value="4" label="Failed"/>
-  <int value="5" label="Uncompleted"/>
-</enum>
-
-<enum name="PipelineStatus" type="int">
-  <int value="0" label="PIPELINE_OK"/>
-  <int value="1" label="PIPELINE_ERROR_URL_NOT_FOUND"/>
-  <int value="2" label="PIPELINE_ERROR_NETWORK"/>
-  <int value="3" label="PIPELINE_ERROR_DECODE"/>
-  <int value="5" label="PIPELINE_ERROR_ABORT"/>
-  <int value="6" label="PIPELINE_ERROR_INITIALIZATION_FAILED"/>
-  <int value="7" label="PIPELINE_ERROR_REQUIRED_FILTER_MISSING"/>
-  <int value="8" label="PIPELINE_ERROR_COULD_NOT_RENDER"/>
-  <int value="9" label="PIPELINE_ERROR_READ"/>
-  <int value="10" label="PIPELINE_ERROR_OPERATION_PENDING"/>
-  <int value="11" label="PIPELINE_ERROR_INVALID_STATE"/>
-  <int value="12" label="DEMUXER_ERROR_COULD_NOT_OPEN"/>
-  <int value="13" label="DEMUXER_ERROR_COULD_NOT_PARSE"/>
-  <int value="14" label="DEMUXER_ERROR_NO_SUPPORTED_STREAMS"/>
-  <int value="15" label="DECODER_ERROR_NOT_SUPPORTED"/>
-  <int value="16" label="CHUNK_DEMUXER_ERROR_APPEND_FAILED"/>
-  <int value="17" label="CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR"/>
-  <int value="18" label="CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR"/>
-  <int value="19" label="AUDIO_RENDERER_ERROR"/>
-  <int value="20" label="AUDIO_RENDERER_ERROR_SPLICE_FAILED"/>
-</enum>
-
-<enum name="Platform.BootMode.FirmwareWriteProtect" type="int">
-  <int value="0" label="Off"/>
-  <int value="1" label="On"/>
-  <int value="2" label="Zero length range"/>
-  <int value="3" label="Error"/>
-</enum>
-
-<enum name="Platform.BootMode.SwitchStatus" type="int">
-  <int value="0" label="Off"/>
-  <int value="1" label="On"/>
-  <int value="2" label="Error"/>
-</enum>
-
-<enum name="Platform.Crouton.Started" type="int">
-  <int value="0" label="Total count"/>
-  <int value="1" label="Started"/>
-</enum>
-
-<enum name="PlatformFileError" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="FAILED"/>
-  <int value="2" label="IN_USE"/>
-  <int value="3" label="EXISTS"/>
-  <int value="4" label="NOT_FOUND"/>
-  <int value="5" label="ACCESS_DENIED"/>
-  <int value="6" label="TOO_MANY_OPENED"/>
-  <int value="7" label="NO_MEMORY"/>
-  <int value="8" label="NO_SPACE"/>
-  <int value="9" label="NOT_A_DIRECTORY"/>
-  <int value="10" label="INVALID_OPERATION"/>
-  <int value="11" label="SECURITY"/>
-  <int value="12" label="ABORT"/>
-  <int value="13" label="NOT_A_FILE"/>
-  <int value="14" label="NOT_EMPTY"/>
-  <int value="15" label="INVALID_URL"/>
-  <int value="16" label="I/O"/>
-</enum>
-
-<enum name="PlatformNotificationStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Service Worker not found"/>
-  <int value="2" label="Service Worker error"/>
-  <int value="3" label="event.waitUntil promise rejected"/>
-  <int value="4" label="Database error"/>
-</enum>
-
-<enum name="PlatformStateStoreLoadResult" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="CLEARED_DATA">
-    Platform data cleared for new profile.
-  </int>
-  <int value="2" label="CLEARED_NO_DATA">
-    Empty platform data cleared for new profile.
-  </int>
-  <int value="3" label="DATA_CLEAR_FAILED">
-    Failed to clear data for new profile.
-  </int>
-  <int value="4" label="OPEN_FAILED">Failed to open data store.</int>
-  <int value="5" label="READ_FAILED">Failed to read from data store.</int>
-  <int value="6" label="PARSE_ERROR">Data could not be parsed.</int>
-</enum>
-
-<enum name="PluginAvailabilityStatus" type="int">
-  <int value="0" label="PLUGIN_NOT_REGISTERED"/>
-  <int value="1" label="PLUGIN_AVAILABLE"/>
-  <int value="2" label="PLUGIN_DISABLED"/>
-</enum>
-
-<enum name="PluginGroup" type="int">
-  <int value="0" label="Other Plugin"/>
-  <int value="1" label="Adobe Reader"/>
-  <int value="2" label="Java"/>
-  <int value="3" label="Quicktime"/>
-  <int value="4" label="Shockwave"/>
-  <int value="5" label="Real Player"/>
-  <int value="6" label="Silverlight"/>
-  <int value="7" label="Windows Media Player"/>
-  <int value="8" label="Google Talk"/>
-  <int value="9" label="Google Earth"/>
-</enum>
-
-<enum name="PluginListError" type="int">
-  <int value="0" label="NoError"/>
-  <int value="1" label="JsonInvalidEscape"/>
-  <int value="2" label="JsonSyntaxError"/>
-  <int value="3" label="JsonUnexpectedToken"/>
-  <int value="4" label="JsonTrailingComma"/>
-  <int value="5" label="JsonTooMuchNesting"/>
-  <int value="6" label="JsonUnexpectedDataAfterRoot"/>
-  <int value="7" label="JsonUnsupportedEncoding"/>
-  <int value="8" label="JsonUnquotedDictionaryKey"/>
-  <int value="9" label="SchemaError"/>
-</enum>
-
-<enum name="PluginLoadResult" type="int">
-  <int value="0" label="LOAD_SUCCESS"/>
-  <int value="1" label="LOAD_FAILED"/>
-  <int value="2" label="ENTRY_POINT_MISSING"/>
-  <int value="3" label="INIT_FAILED"/>
-  <int value="4" label="FILE_MISSING"/>
-</enum>
-
-<enum name="PluginPowerSaverPeripheralHeuristicDecision" type="int">
-  <int value="0" label="Peripheral"/>
-  <int value="1" label="Essential Same-Origin"/>
-  <int value="2" label="Essential Cross-Origin Big"/>
-  <int value="3" label="Essential Cross-Origin Whitelisted"/>
-  <int value="4" label="Tiny"/>
-  <int value="5" label="Unknown Size"/>
-</enum>
-
-<enum name="PluginPowerSaverPosterParamPresence" type="int">
-  <int value="0" label="No poster param. Plugin power saver disabled."/>
-  <int value="1" label="No poster param. Plugin power saver enabled."/>
-  <int value="2" label="Poster param exists. Plugin power saver disabled."/>
-  <int value="3" label="Poster param exists. Plugin power saver enabled."/>
-</enum>
-
-<enum name="PluginPowerSaverUnthrottleMethod" type="int">
-  <int value="0" label="Never Unthrottled"/>
-  <int value="1" label="Unthrottled by Click"/>
-  <int value="2" label="Unthrottled by Retroactive Whitelist"/>
-  <int value="3" label="Unthrottled by Audio Playback"/>
-  <int value="4" label="Unthrottled by Size Change"/>
-  <int value="5" label="Unthrottled by Omnibox icon"/>
-</enum>
-
-<enum name="PNaClOptionsOptLevelEnum" type="int">
-  <int value="0" label="0"/>
-  <int value="1" label="1"/>
-  <int value="2" label="2"/>
-  <int value="3" label="3"/>
-  <int value="4" label="Default / Unknown"/>
-</enum>
-
-<enum name="PNaClTranslationCacheEnum" type="int">
-  <int value="0" label="Miss"/>
-  <int value="1" label="Hit"/>
-</enum>
-
-<enum name="PointerSensitivity" type="int">
-  <int value="1" label="1"/>
-  <int value="2" label="2"/>
-  <int value="3" label="3"/>
-  <int value="4" label="4"/>
-  <int value="5" label="5"/>
-</enum>
-
-<enum name="PolicyLoadStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="No Policy File"/>
-  <int value="2" label="Load Error"/>
-</enum>
-
-<enum name="PolicyValidationStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Bad Initial Signature"/>
-  <int value="2" label="Bad Signature"/>
-  <int value="3" label="Policy Error Code"/>
-  <int value="4" label="Payload Parse Error"/>
-  <int value="5" label="Wrong Policy Type"/>
-  <int value="6" label="Wrong Settings Entity ID"/>
-  <int value="7" label="Bad Timestamp"/>
-  <int value="8" label="Wrong Token"/>
-  <int value="9" label="Wrong Username"/>
-  <int value="10" label="Policy Parse Error"/>
-  <int value="11" label="Bad Key Validation Signature"/>
-</enum>
-
-<enum name="Ports" type="int">
-  <int value="80" label="Port 80"/>
-  <int value="443" label="Port 443"/>
-</enum>
-
-<enum name="PostMergeVerificationOutcome" type="int">
-  <int value="0" label="Undefined"/>
-  <int value="1" label="Succeeded"/>
-  <int value="2" label="No accounts found"/>
-  <int value="3" label="Missing primary account"/>
-  <int value="4" label="Primary account is not the first"/>
-  <int value="5" label="Verification failed"/>
-  <int value="6" label="Connection failed"/>
-  <int value="7" label="Overflow"/>
-</enum>
-
-<enum name="PostSubmitNavigation" type="int">
-  <int value="0" label="Same domain"/>
-  <int value="1" label="Different domain"/>
-</enum>
-
-<enum name="PowerBrightnessAdjust" type="int">
-  <int value="0" label="Brightness Down"/>
-  <int value="1" label="Brightness Up"/>
-  <int value="2" label="Brightness Absolute"/>
-</enum>
-
-<enum name="PowerChargerType" type="int">
-  <obsolete>
-    Deprecated 11/2014 in issue 427057.
-  </obsolete>
-  <int value="0" label="Unknown charger"/>
-  <int value="1" label="MAINS charger"/>
-  <int value="2" label="USB Charger"/>
-  <int value="3" label="Unconfirmed Spring Charger"/>
-  <int value="4" label="Safe Spring Charger"/>
-</enum>
-
-<enum name="PowerConnectedChargingPorts" type="int">
-  <summary>
-    Connected charging ports on Chrome OS, as reported by the kernel.
-  </summary>
-  <int value="0" label="No ports connected"/>
-  <int value="1" label="First port connected"/>
-  <int value="2" label="Second port connected"/>
-  <int value="3" label="First and second ports connected"/>
-  <int value="4" label="More than two ports exist"/>
-</enum>
-
-<enum name="PowerSupplyType" type="int">
-  <summary>
-    The type of power supply connected to a Chrome OS system, as reported by the
-    kernel.
-  </summary>
-  <int value="0" label="Other"/>
-  <int value="1" label="Mains"/>
-  <int value="2" label="USB"/>
-  <int value="3" label="USB_ACA"/>
-  <int value="4" label="USB_CDP"/>
-  <int value="5" label="USB_DCP"/>
-  <int value="6" label="USB_C"/>
-  <int value="7" label="USB_PD"/>
-  <int value="8" label="USB_PD_DRP"/>
-</enum>
-
-<enum name="PowerwashDialogViewType" type="int">
-  <int value="0" label="Invoked on settings page"/>
-  <int value="1" label="Shortcut. Confirmation for powerwash only."/>
-  <int value="2" label="Shortcut. Confirmation for powerwash and rollback."/>
-  <int value="3" label="Shortcut. Offer. Rollback unavailable."/>
-  <int value="4" label="Shortcut. Offer. Rollback available."/>
-  <int value="5" label="Shortcut. Restart required."/>
-</enum>
-
-<enum name="PrecacheEvents" type="int">
-  <int value="0" label="PRECACHE_TASK_STARTED_PERIODIC"/>
-  <int value="1" label="PRECACHE_TASK_STARTED_ONEOFF"/>
-  <int value="2" label="PRECACHE_TASK_STARTED_DUPLICATE"/>
-  <int value="3" label="PRECACHE_TASK_LOAD_LIBRARY_FAIL"/>
-  <int value="4" label="PRECACHE_CANCEL_NO_UNMETERED_NETWORK"/>
-  <int value="5" label="PRECACHE_CANCEL_NO_POWER"/>
-  <int value="6" label="PRECACHE_CANCEL_DISABLED_PREF"/>
-  <int value="7" label="DISABLED_IN_PRECACHE_PREF"/>
-  <int value="8" label="SYNC_SERVICE_TIMEOUT"/>
-  <int value="9" label="PRECACHE_SESSION_TIMEOUT"/>
-  <int value="10" label="PRECACHE_SESSION_STARTED"/>
-  <int value="11" label="PERIODIC_TASK_SCHEDULE_BOOT_SIGNAL"/>
-  <int value="12" label="PERIODIC_TASK_SCHEDULE_BOOT_SIGNAL_FAIL"/>
-  <int value="13" label="PERIODIC_TASK_SCHEDULE_UPGRADE"/>
-  <int value="14" label="PERIODIC_TASK_SCHEDULE_UPGRADE_FAIL"/>
-  <int value="15" label="ONEOFF_TASK_SCHEDULE"/>
-  <int value="16" label="ONEOFF_TASK_SCHEDULE_FAIL"/>
-  <int value="17" label="PRECACHE_SESSION_COMPLETE"/>
-  <int value="18" label="PRECACHE_SESSION_INCOMPLETE"/>
-</enum>
-
-<enum name="PreconnectedNavigation" type="int">
-  <int value="0" label="No recent pre-connect to the page"/>
-  <int value="1" label="Page nav. preceded by a pre-connect"/>
-</enum>
-
-<enum name="PreconnectMotivation" type="int">
-  <int value="0" label="MOUSE_OVER_MOTIVATED"/>
-  <int value="1" label="PAGE_SCAN_MOTIVATED"/>
-  <int value="2" label="UNIT_TEST_MOTIVATED"/>
-  <int value="3" label="LINKED_MAX_MOTIVATED"/>
-  <int value="4" label="OMNIBOX_MOTIVATED"/>
-  <int value="5" label="STARTUP_LIST_MOTIVATED"/>
-  <int value="6" label="EARLY_LOAD_MOTIVATED"/>
-  <int value="7" label="NO_PREFETCH_MOTIVATION"/>
-  <int value="8" label="STATIC_REFERAL_MOTIVATED"/>
-  <int value="9" label="LEARNED_REFERAL_MOTIVATED"/>
-  <int value="10" label="SELF_REFERAL_MOTIVATED"/>
-</enum>
-
-<enum name="PreconnectSubresourceEval" type="int">
-  <int value="0" label="PRECONNECTION"/>
-  <int value="1" label="PRERESOLUTION"/>
-  <int value="2" label="TOO_NEW"/>
-</enum>
-
-<enum name="PreconnectTriggerUsed" type="int">
-  <int value="0" label="The pre-connect triggered host was not accessed"/>
-  <int value="1" label="The pre-connect triggered host was accessed"/>
-</enum>
-
-<enum name="PredictionStatus" type="int">
-  <int value="0" label="No prediction"/>
-  <int value="1" label="Successful prediction"/>
-  <int value="2" label="Wrong prediction"/>
-</enum>
-
-<enum name="PrefetchStatus" type="int">
-  <int value="0" label="undefined"/>
-  <int value="1" label="success from cache"/>
-  <int value="2" label="success from network"/>
-  <int value="3" label="canceled in-flight"/>
-  <int value="4" label="success already prefetched"/>
-</enum>
-
-<enum name="PrefHashStoreVersion" type="int">
-  <int value="0" label="VERSION_UNINITIALIZED"/>
-  <int value="1" label="VERSION_PRE_MIGRATION"/>
-  <int value="2" label="VERSION_LATEST"/>
-</enum>
-
-<enum name="PrerenderCookieSendType" type="int">
-  <obsolete>
-    Deprecated March 13 2015.
-  </obsolete>
-  <int value="0" label="no cookies sent"/>
-  <int value="1" label="first party cookies sent"/>
-  <int value="2" label="third party cookies sent"/>
-  <int value="3" label="third party cookies sent for blocking resource"/>
-</enum>
-
-<enum name="PrerenderCookieStatus" type="int">
-  <obsolete>
-    Deprecated March 13 2015.
-  </obsolete>
-  <int value="0" label="no action"/>
-  <int value="1" label="[main frame send]"/>
-  <int value="2" label="[main frame change]"/>
-  <int value="3" label="[main frame send, main frame change]"/>
-  <int value="4" label="[other send]"/>
-  <int value="5" label="[main frame send, other send]"/>
-  <int value="6" label="[main frame change, other send]"/>
-  <int value="7" label="[main frame send, main frame change, other send]"/>
-  <int value="8" label="[other change]"/>
-  <int value="9" label="[main frame send, other change]"/>
-  <int value="10" label="[main frame change, other change]"/>
-  <int value="11" label="[main frame send, main frame change, other change]"/>
-  <int value="12" label="[other send, other change]"/>
-  <int value="13" label="[main frame send, other send, other change]"/>
-  <int value="14" label="[main frame change, other send, other change]"/>
-  <int value="15"
-      label="[main frame send, main frame change, other send, other change]"/>
-</enum>
-
-<enum name="PrerenderEvent" type="int">
-  <obsolete>
-    Deprecated Dec 12 2014.
-  </obsolete>
-  <int value="0" label="Swapin no delegate"/>
-  <int value="1" label="Swapin candidate"/>
-  <int value="2" label="Swapin candidate namespace matces"/>
-  <int value="3" label="Swapin no merge pending"/>
-  <int value="4" label="Swapin merging disabled"/>
-  <int value="5" label="Swapin issuing merge"/>
-  <int value="6" label="Merge for swapin candidate"/>
-  <int value="7" label="Merge result no pending swapin"/>
-  <int value="8" label="Merge result timeout cb"/>
-  <int value="9" label="Merge result result cb"/>
-  <int value="10" label="Merge result timed out"/>
-  <int value="11" label="Merge result merge done"/>
-  <int value="12" label="Merge result: namespace not found"/>
-  <int value="13" label="Merge result: namespace not alias"/>
-  <int value="14" label="Merge result: not logging"/>
-  <int value="15" label="Merge result: no transactions"/>
-  <int value="16" label="Merge result: too many transactions"/>
-  <int value="17" label="Merge result: not mergeable"/>
-  <int value="18" label="Merge result: mergeable"/>
-  <int value="19" label="Merge result merge failed"/>
-  <int value="20" label="Merge result swapping in"/>
-  <int value="21" label="Merge result swapin successful"/>
-  <int value="22" label="Merge result swapin failed"/>
-</enum>
-
-<enum name="PrerenderFinalStatus" type="int">
-  <int value="0" label="USED"/>
-  <int value="1" label="TIMED_OUT"/>
-  <int value="2" label="EVICTED"/>
-  <int value="3" label="MANAGER_SHUTDOWN"/>
-  <int value="4" label="CLOSED"/>
-  <int value="5" label="CREATE_NEW_WINDOW"/>
-  <int value="6" label="PROFILE_DESTROYED"/>
-  <int value="7" label="APP_TERMINATING"/>
-  <int value="8" label="JAVASCRIPT_ALERT"/>
-  <int value="9" label="AUTH_NEEDED"/>
-  <int value="10" label="HTTPS"/>
-  <int value="11" label="DOWNLOAD"/>
-  <int value="12" label="MEMORY_LIMIT_EXCEEDED"/>
-  <int value="13" label="JS_OUT_OF_MEMORY"/>
-  <int value="14" label="RENDERER_UNRESPONSIVE"/>
-  <int value="15" label="TOO_MANY_PROCESSES"/>
-  <int value="16" label="RATE_LIMIT_EXCEEDED"/>
-  <int value="17" label="PENDING_SKIPPED"/>
-  <int value="18" label="CONTROL_GROUP"/>
-  <int value="19" label="HTML5_MEDIA"/>
-  <int value="20" label="SOURCE_RENDER_VIEW_CLOSED"/>
-  <int value="21" label="RENDERER_CRASHED"/>
-  <int value="22" label="UNSUPPORTED_SCHEME"/>
-  <int value="23" label="INVALID_HTTP_METHOD"/>
-  <int value="24" label="WINDOW_PRINT"/>
-  <int value="25" label="RECENTLY_VISITED"/>
-  <int value="26" label="WINDOW_OPENER"/>
-  <int value="27" label="PAGE_ID_CONFLICT"/>
-  <int value="28" label="SAFE_BROWSING"/>
-  <int value="29" label="FRAGMENT_MISMATCH"/>
-  <int value="30" label="SSL_CLIENT_CERTIFICATE_REQUESTED"/>
-  <int value="31" label="CACHE_OR_HISTORY_CLEARED"/>
-  <int value="32" label="CANCELLED"/>
-  <int value="33" label="SSL_ERROR"/>
-  <int value="34" label="CROSS_SITE_NAVIGATION_PENDING"/>
-  <int value="35" label="DEVTOOLS_ATTACHED"/>
-  <int value="36" label="SESSION_STORAGE_NAMESPACE_MISMATCH"/>
-  <int value="37" label="NO_USE_GROUP"/>
-  <int value="38" label="MATCH_COMPLETE_DUMMY"/>
-  <int value="39" label="DUPLICATE"/>
-  <int value="40" label="OPEN_URL"/>
-  <int value="41" label="WOULD_HAVE_BEEN_USED"/>
-  <int value="42" label="REGISTER_PROTOCOL_HANDLER"/>
-  <int value="43" label="CREATING_AUDIO_STREAM"/>
-  <int value="44" label="PAGE_BEING_CAPTURED"/>
-  <int value="45" label="BAD_DEFERRED_REDIRECT"/>
-  <int value="46" label="NAVIGATION_UNCOMMITTED"/>
-  <int value="47" label="NEW_NAVIGATION_ENTRY"/>
-  <int value="48" label="COOKIE_STORE_NOT_LOADED"/>
-  <int value="49" label="COOKIE_CONFLICT"/>
-  <int value="50" label="NON_EMPTY_BROWSING_INSTANCE"/>
-  <int value="51" label="NAVIGATION_INTERCEPTED"/>
-  <int value="52" label="PRERENDERING_DISABLED"/>
-  <int value="53" label="CELLULAR_NETWORK"/>
-  <int value="54" label="BLOCK_THIRD_PARTY_COOKIES"/>
-  <int value="55" label="CREDENTIAL_MANAGER_API"/>
-  <int value="56" label="NOSTATE_PREFETCH_FINISHED"/>
-  <int value="57" label="LOW_END_DEVICE"/>
-</enum>
-
-<enum name="PrerenderHoverEvent" type="int">
-  <obsolete>
-    deprecated May 10 2012
-  </obsolete>
-  <int value="0" label="HOVER_EVENT_START"/>
-  <int value="1" label="HOVER_EVENT_TOO_SHORT"/>
-  <int value="2" label="HOVER_EVENT_REPLACED"/>
-  <int value="3" label="HOVER_EVENT_CLICK"/>
-</enum>
-
-<enum name="PrerenderLocalPredictorEvents" type="int">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <int value="0" label="Constructed"/>
-  <int value="1" label="Init scheduled"/>
-  <int value="2" label="Init started"/>
-  <int value="3" label="Init failed: no history"/>
-  <int value="4" label="Init succeeded"/>
-  <int value="5" label="AddVisit"/>
-  <int value="6" label="AddVisit initialized"/>
-  <int value="7" label="AddVisit prerender identified"/>
-  <int value="8" label="AddVisit relevant transition"/>
-  <int value="9" label="AddVisit identified prerender candidate"/>
-  <int value="10" label="AddVisit prerendering"/>
-  <int value="11" label="Got prerender url"/>
-  <int value="12" label="Error: no prerender url for PLT"/>
-  <int value="13" label="AddVisit prerender rextended"/>
-  <int value="14" label="URL lookup result"/>
-  <int value="15" label="URL lookup result: root page"/>
-  <int value="16" label="URL lookup result: http"/>
-  <int value="17" label="URL lookup result: has query string"/>
-  <int value="18" label="URL lookup result: contains logout"/>
-  <int value="19" label="URL lookup result: contians login"/>
-  <int value="20" label="Start url lookup"/>
-  <int value="21" label="AddVisit not root page"/>
-  <int value="22" label="Whitelist error"/>
-  <int value="23" label="Whitelist ok"/>
-  <int value="24" label="URL lookup result: on whitelist"/>
-  <int value="25" label="URL lookup result: on whitelist root page"/>
-  <int value="26" label="URL lookup result: extended root page"/>
-  <int value="27" label="URL lookup result: root page http"/>
-  <int value="28" label="URL lookup failed"/>
-  <int value="29" label="URL lookup no source webcontents found"/>
-  <int value="30" label="URL lookup no logged in table found"/>
-  <int value="31" label="URL lookup issuing logged in lookup"/>
-  <int value="32" label="Continue prerender check started"/>
-  <int value="33" label="Continue prerender check no url"/>
-  <int value="34" label="Continue prerender check priority too low"/>
-  <int value="35" label="Continue prerender check urls identical but fragemet"/>
-  <int value="36" label="Continue prerender check https"/>
-  <int value="37" label="Continue prerender check root page"/>
-  <int value="38" label="Continue prerender check logout url"/>
-  <int value="39" label="Continue prerender check login url"/>
-  <int value="40" label="Continue prerender check not logged in"/>
-  <int value="41" label="Continue prerender check fallthrough no prerender"/>
-  <int value="42" label="Continue prerender check issuing prerender"/>
-  <int value="43" label="Issuing prerender"/>
-  <int value="44" label="No prerender candidates"/>
-  <int value="45" label="Got history issuing lookup"/>
-  <int value="46" label="Tab Helper URL seen"/>
-  <int value="47" label="Tab Helper URL seen match"/>
-  <int value="48" label="Tab Helper URL seen namespace match"/>
-  <int value="49" label="URL lookup multiple source webcontents"/>
-  <int value="50" label="Continue prerender check side-effect free whitelist"/>
-  <int value="51" label="Continue prerender check Examine next URL"/>
-  <int value="52" label="Issuing prerender, already prerendering"/>
-  <int value="53" label="Issuing prerender, new prerender"/>
-  <int value="54" label="Issuing prerender, cancelled old prerender"/>
-  <int value="55" label="Continue prerender check fallthrough prerendering"/>
-  <int value="56" label="URL lookup success"/>
-  <int value="57" label="Prerender Service disabled"/>
-  <int value="58" label="Prerender Service issued lookup"/>
-  <int value="59" label="Prerender Service lookup timed out"/>
-  <int value="60" label="Prerender Service received result"/>
-  <int value="61" label="Prerender Service no record for result"/>
-  <int value="62" label="Prerender Service parsed correctly"/>
-  <int value="63" label="Prerender Service parse error"/>
-  <int value="64" label="Prerender Service parse error incorrect JSON"/>
-  <int value="65" label="Prerender Service hinting timed out"/>
-  <int value="66" label="Prerender Service hinting url lookup timed out"/>
-  <int value="67" label="Prerender Service candidate url lookup timed out"/>
-  <int value="68" label="Continue prerender check service whitelist"/>
-  <int value="69" label="Continue prerender check next URL local"/>
-  <int value="70" label="Continue prerender check next URL service"/>
-  <int value="71" label="AddVisit relevant transition repeat URL"/>
-  <int value="72" label="AddVisit relevant transition new URL"/>
-  <int value="73" label="Tab Helper namespace mismatch: no namespace"/>
-  <int value="74" label="Tab Helper namespace mismatch: merge issued"/>
-  <int value="75" label="Namespace mismatch: merge result received"/>
-  <int value="76" label="Namespace mismatch: merge result namespace not found"/>
-  <int value="77" label="Namespace mismatch: merge result not logging"/>
-  <int value="78" label="Namespace mismatch: merge result no transactions"/>
-  <int value="79"
-      label="Namespace mismatch: merge result too many transactions"/>
-  <int value="80" label="Namespace mismatch: merge result not mergeable"/>
-  <int value="81" label="Namespace mismatch: merge result mergeable"/>
-  <int value="82" label="Init failed unencrypted sync not enabled"/>
-  <int value="83" label="Continue prerender check next URL not skipped"/>
-  <int value="84" label="Prerender Service returned hinting candidates"/>
-  <int value="85" label="Namespace mismatch: merge result namespace not alias"/>
-  <int value="86" label="Tab Helper URL seen entry"/>
-  <int value="87" label="Tab Helper URL seen match browser navigation"/>
-  <int value="88" label="Tab Helper URL seen namespace match entry"/>
-  <int value="89"
-      label="Tab Helper URL seen namespace match browser navigation"/>
-  <int value="90" label="Prefetch List item added"/>
-  <int value="91" label="Prefetch list seen tab contents"/>
-  <int value="92" label="Prefetch list seen history"/>
-  <int value="93" label="Issue Prerender called"/>
-  <int value="94" label="Issue Prerender prefetch enabled"/>
-  <int value="95" label="Issue Prerender prefetch issued"/>
-</enum>
-
-<enum name="PrerenderLocalVisitEvents" type="int">
-  <obsolete>
-    Deprecated Nov 16 2012
-  </obsolete>
-  <int value="0" label="V1_VISIT"/>
-  <int value="1" label="V1_PRERENDER_STARTED_1"/>
-  <int value="2" label="V1_PRERENDER_USED_1"/>
-  <int value="3" label="V1_PRERENDER_STARTED_3"/>
-  <int value="4" label="V1_PRERENDER_USED_3"/>
-  <int value="5" label="V1_PRERENDER_STARTED_5"/>
-  <int value="6" label="V1_PRERENDER_USED_5"/>
-  <int value="10" label="VISIT"/>
-  <int value="11" label="VISIT_EXCLUDE_BACK_FORWARD"/>
-  <int value="12" label="VISIT_EXCLUDE_HOME_PAGE"/>
-  <int value="13" label="VISIT_EXCLUDE_REDIRECT_CHAIN"/>
-  <int value="14" label="PRERENDER_STARTED_1"/>
-  <int value="15" label="PRERENDER_USED_1"/>
-  <int value="16" label="PRERENDER_STARTED_3"/>
-  <int value="17" label="PRERENDER_USED_3"/>
-  <int value="18" label="PRERENDER_STARTED_5"/>
-  <int value="19" label="PRERENDER_USED_5"/>
-</enum>
-
-<enum name="PrerenderMode" type="int">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <int value="0" label="PRERENDER_MODE_DISABLED"/>
-  <int value="1" label="PRERENDER_MODE_ENABLED"/>
-  <int value="2" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
-  <int value="3" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
-  <int value="4" label="PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP"/>
-  <int value="5" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
-  <int value="6" label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
-  <int value="7" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
-  <int value="8" label="PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP"/>
-</enum>
-
-<enum name="PrerenderPageviewEvents" type="int">
-  <obsolete>
-    deprecated Nov 16 2012
-  </obsolete>
-  <int value="0" label="PAGEVIEW_EVENT_NEW_URL"/>
-  <int value="1" label="PAGEVIEW_EVENT_TOP_SITE_NEW_URL"/>
-  <int value="2" label="PAGEVIEW_EVENT_LOAD_START"/>
-  <int value="3" label="PAGEVIEW_EVENT_TOP_SITE_LOAD_START"/>
-</enum>
-
-<enum name="PrerenderRelTypes" type="int">
-  <int value="0" label="PRERENDER_REL_TYPE_NONE"/>
-  <int value="1" label="PRERENDER_REL_TYPE_PRERENDER"/>
-  <int value="2" label="PRERENDER_REL_TYPE_NEXT"/>
-  <int value="3" label="PRERENDER_REL_TYPE_PRERENDER_AND_NEXT"/>
-</enum>
-
-<enum name="PrerenderSchemeCancelReason" type="int">
-  <int value="0" label="EXTERNAL_PROTOCOL"/>
-  <int value="1" label="DATA"/>
-  <int value="2" label="BLOB"/>
-  <int value="3" label="FILE"/>
-  <int value="4" label="FILESYSTEM"/>
-  <int value="5" label="WEBSOCKET"/>
-  <int value="6" label="FTP"/>
-  <int value="7" label="CHROME"/>
-  <int value="8" label="CHROME_EXTENSION"/>
-  <int value="9" label="ABOUT"/>
-  <int value="10" label="UNKNOWN"/>
-</enum>
-
-<enum name="PrerenderTabHelperEvents" type="int">
-  <obsolete>
-    Deprecated April 2015
-  </obsolete>
-  <int value="0" label="Table requested"/>
-  <int value="1" label="Table present"/>
-  <int value="2" label="Mainframe change"/>
-  <int value="3" label="Mainframe change, logged in"/>
-  <int value="4" label="Mainframe commit"/>
-  <int value="5" label="Mainframe commit, logged in"/>
-  <int value="6" label="Login action added"/>
-  <int value="7" label="Login action added, Mainframe"/>
-  <int value="8" label="Login action added, Mainframe, pw empty"/>
-  <int value="9" label="Login action added, Subframe"/>
-  <int value="10" label="Login action added, Subframe, pw empty"/>
-</enum>
-
-<enum name="PresentationResult" type="int">
-  <int value="0" label="Requested"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="SuccessAlreadyPresenting"/>
-  <int value="3" label="VRDisplayCannotPresent"/>
-  <int value="4" label="PresentationNotSupportedByDisplay"/>
-  <int value="5" label="VRDisplayNotFound"/>
-  <int value="6" label="NotInitiatedByUserGesture"/>
-  <int value="7" label="InvalidNumberOfLayers"/>
-  <int value="8" label="InvalidLayerSource"/>
-  <int value="9" label="LayerSourceMissingWebGLContext"/>
-  <int value="10" label="InvalidLayerBounds"/>
-  <int value="11" label="ServiceInactive"/>
-  <int value="12" label="RequestDenied"/>
-</enum>
-
-<enum name="PreTapEvents" type="int">
-  <int value="0" label="no event"/>
-  <int value="1" label="tapdown"/>
-  <int value="2" label="tapunconfirmed"/>
-  <int value="3" label="tapdown + tapunconfirmed"/>
-</enum>
-
-<enum name="PreviewsContextMenuActionLoFi" type="int">
-  <int value="0" label="'Load image' context menu item shown"/>
-  <int value="1" label="'Load image' context menu item clicked"/>
-  <int value="2"
-      label="Pages where the user has clicked 'Load image' at least once"/>
-  <int value="3" label="'Load images' context menu item shown (obsolete)"/>
-  <int value="4" label="'Load images' context menu item clicked (obsolete)"/>
-</enum>
-
-<enum name="PreviewsEligibilityReason" type="int">
-  <int value="0" label="Preview Allowed."/>
-  <int value="1" label="Blacklist not created."/>
-  <int value="2" label="Blacklist data not loaded yet from disk."/>
-  <int value="3" label="User opted out of a preview recently."/>
-  <int value="4" label="User is blacklisted for all hosts."/>
-  <int value="5" label="User is blacklisted for the specific host."/>
-  <int value="6" label="The network quality estimate is not available."/>
-  <int value="7" label="The network is not slow enough to show previews."/>
-  <int value="8"
-      label="The page was being reloaded and the preview type can not be
-             shown on a reload."/>
-</enum>
-
-<enum name="PreviewsInfoBarAction" type="int">
-  <int value="0" label="Infobar shown"/>
-  <int value="1" label="Infobar 'Load original' clicked"/>
-  <int value="2" label="Infobar dismissed by user"/>
-  <int value="3" label="Infobar dismissed by navigation"/>
-  <int value="4" label="Infobar dismissed by reload"/>
-</enum>
-
-<enum name="PreviewsUserOptedOut" type="int">
-  <int value="0" label="The user did not choose to reload the full page."/>
-  <int value="1" label="The user chose to reload the full page."/>
-</enum>
-
-<enum name="PrinterServiceEventType" type="int">
-  <int value="0" label="Printer added"/>
-  <int value="1" label="Page displayed (Deprecated)"/>
-  <int value="2" label="Printer supported notification shown"/>
-  <int value="3" label="Printer not supported notification shown"/>
-  <int value="4" label="Printer provider Web Store app launched"/>
-</enum>
-
-<enum name="PrintPreviewFailureType" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Bad settings from print preview tab"/>
-  <int value="2" label="Copy metadata failed (Deprecated)"/>
-  <int value="3" label="Metafile init failed"/>
-  <int value="4" label="0-page preview"/>
-  <int value="5" label="Mac draft metafile init failed (Deprecated)"/>
-  <int value="6" label="PreviewPageRendered with no metafile"/>
-  <int value="7" label="UpdatePrintSettings failed"/>
-  <int value="8" label="Received bad printer settings"/>
-</enum>
-
-<enum name="PrintPreviewFontTypeType" type="int">
-  <int value="0" label="TYPE1"/>
-  <int value="1" label="TYPE1_CID"/>
-  <int value="2" label="CFF"/>
-  <int value="3" label="TRUETYPE"/>
-  <int value="4" label="OTHER"/>
-  <int value="5" label="NOT_EMBEDDABLE"/>
-</enum>
-
-<enum name="PrintPreviewGcpPromoBuckets" type="int">
-  <int value="0" label="PROMO_SHOWN"/>
-  <int value="1" label="PROMO_CLICKED"/>
-  <int value="2" label="PROMO_CLOSED"/>
-</enum>
-
-<enum name="PrintPreviewHelperEvents" type="int">
-  <int value="0" label="PREVIEW_EVENT_REQUESTED"/>
-  <int value="1" label="PREVIEW_EVENT_CACHE_HIT"/>
-  <int value="2" label="PREVIEW_EVENT_CREATE_DOCUMENT"/>
-  <int value="3" label="PREVIEW_EVENT_NEW_SETTINGS"/>
-</enum>
-
-<enum name="PrintPreviewPrintDestinationBuckets" type="int">
-  <int value="0" label="DESTINATION_SHOWN"/>
-  <int value="1" label="DESTINATION_CLOSED_CHANGED"/>
-  <int value="2" label="DESTINATION_CLOSED_UNCHANGED"/>
-  <int value="3" label="SIGNIN_PROMPT"/>
-  <int value="4" label="SIGNIN_TRIGGERED"/>
-  <int value="5" label="PRIVET_DUPLICATE_SELECTED"/>
-  <int value="6" label="CLOUD_DUPLICATE_SELECTED"/>
-  <int value="7" label="REGISTER_PROMO_SHOWN"/>
-  <int value="8" label="REGISTER_PROMO_SELECTED"/>
-  <int value="9" label="ACCOUNT_CHANGED"/>
-  <int value="10" label="ADD_ACCOUNT_SELECTED"/>
-  <int value="11" label="INVITATION_AVAILABLE"/>
-  <int value="12" label="INVITATION_ACCEPTED"/>
-  <int value="13" label="INVITATION_REJECTED"/>
-</enum>
-
-<enum name="PrintPreviewPrintDocumentTypeBuckets" type="int">
-  <int value="0" label="HTML_DOCUMENT"/>
-  <int value="1" label="PDF_DOCUMENT"/>
-</enum>
-
-<enum name="PrintPreviewPrintSettingsUiBuckets" type="int">
-  <int value="0" label="ADVANCED_SETTINGS_DIALOG_SHOWN"/>
-  <int value="1" label="ADVANCED_SETTINGS_DIALOG_CANCELED"/>
-  <int value="2" label="MORE_SETTINGS_CLICKED"/>
-  <int value="3" label="LESS_SETTINGS_CLICKED"/>
-  <int value="4" label="PRINT_WITH_SETTINGS_EXPANDED"/>
-  <int value="5" label="PRINT_WITH_SETTINGS_COLLAPSED"/>
-</enum>
-
-<enum name="PrintPreviewUserActionType" type="int">
-  <int value="0" label="PRINT_TO_PRINTER"/>
-  <int value="1" label="PRINT_TO_PDF"/>
-  <int value="2" label="CANCEL"/>
-  <int value="3" label="FALLBACK_TO_ADVANCED_SETTINGS_DIALOG"/>
-  <int value="4" label="PREVIEW_FAILED"/>
-  <int value="5" label="PREVIEW_STARTED"/>
-  <int value="6" label="INITIATOR_TAB_CRASHED_UNUSED"/>
-  <int value="7" label="INITIATOR_TAB_CLOSED"/>
-  <int value="8" label="PRINT_WITH_CLOUD_PRINT"/>
-  <int value="9" label="PRINT_WITH_PRIVET"/>
-  <int value="10" label="PRINT_WITH_EXTENSION"/>
-</enum>
-
-<enum name="PrintSettings" type="int">
-  <int value="0" label="LANDSCAPE"/>
-  <int value="1" label="PORTRAIT"/>
-  <int value="2" label="COLOR"/>
-  <int value="3" label="BLACK_AND_WHITE"/>
-  <int value="4" label="COLLATE"/>
-  <int value="5" label="SIMPLEX"/>
-  <int value="6" label="DUPLEX"/>
-  <int value="7" label="TOTAL"/>
-  <int value="8" label="HEADERS_AND_FOOTERS"/>
-  <int value="9" label="CSS_BACKGROUND"/>
-  <int value="10" label="SELECTION_ONLY"/>
-  <int value="11" label="EXTERNAL_PDF_PREVIEW"/>
-  <int value="12" label="PAGE_RANGE"/>
-  <int value="13" label="DEFAULT_MEDIA"/>
-  <int value="14" label="NON_DEFAULT_MEDIA"/>
-  <int value="15" label="COPIES"/>
-  <int value="16" label="NON_DEFAULT_MARGINS"/>
-  <int value="17" label="DISTILL_PAGE_UNUSED"/>
-  <int value="18" label="SCALING"/>
-  <int value="19" label="PRINT_AS_IMAGE"/>
-</enum>
-
-<enum name="PrivetNotificationsEvent" type="int">
-  <int value="0" label="PRIVET_SERVICE_STARTED"/>
-  <int value="1" label="PRIVET_LISTER_STARTED"/>
-  <int value="2" label="PRIVET_DEVICE_CHANGED"/>
-  <int value="3" label="PRIVET_INFO_DONE"/>
-  <int value="4" label="PRIVET_NOTIFICATION_SHOWN"/>
-  <int value="5" label="PRIVET_NOTIFICATION_CANCELED"/>
-  <int value="6" label="PRIVET_NOTIFICATION_CLICKED"/>
-  <int value="7" label="PRIVET_DISABLE_NOTIFICATIONS_CLICKED"/>
-</enum>
-
-<enum name="ProcessDetailedExitStatus" type="int">
-  <int value="0" label="Empty minidump in running app"/>
-  <int value="1" label="Empty minidump in paused app"/>
-  <int value="2" label="Empty minidump in background app"/>
-  <int value="3" label="Valid minidump in running app"/>
-  <int value="4" label="Valid minidump in paused app"/>
-  <int value="5" label="Valid minidump in background app"/>
-</enum>
-
-<enum name="ProcessNameHash" type="int">
-  <summary>
-    The hash of a lower case process name generated using metrics::HashName.
-  </summary>
-  <int value="-2031320757" label="naio.exe"/>
-  <int value="-1975402871" label="windbg.exe"/>
-  <int value="-1883802758" label="chrome.exe"/>
-  <int value="-1861811955" label="origin.exe"/>
-  <int value="-1794024814" label="avpui.exe"/>
-  <int value="-1728702815" label="devenv.exe"/>
-  <int value="-1700192260" label="outlook.exe"/>
-  <int value="-1524496827" label="client.exe"/>
-  <int value="-1478451048" label="nexus.exe"/>
-  <int value="-1121730033" label="firefox.exe"/>
-  <int value="-1119614451" label="idman.exe"/>
-  <int value="-958751916" label="qq.exe"/>
-  <int value="-642217101" label="new_chrome.exe"/>
-  <int value="-590220378" label="phped.exe"/>
-  <int value="-569935454" label="itype.exe"/>
-  <int value="-319883659" label="perl.exe"/>
-  <int value="-214303849" label="userinit.exe"/>
-  <int value="-113003297" label="launchy.exe"/>
-  <int value="-105465200" label="discord.exe"/>
-  <int value="-84282901" label="cmd.exe"/>
-  <int value="-46738700" label="svchost.exe"/>
-  <int value="-918169" label="wlmail.exe"/>
-  <int value="0" label="Unknown"/>
-  <int value="98111354" label="explorer.exe"/>
-  <int value="160270488" label="node.exe"/>
-  <int value="169714319" label="idea.exe"/>
-  <int value="179238190" label="botweb.exe"/>
-  <int value="309035343" label="mailbird.exe"/>
-  <int value="373915621" label="skype.exe"/>
-  <int value="533327338" label="raidcall.exe"/>
-  <int value="575047983" label="tween.exe"/>
-  <int value="683573237" label="dropbox.exe"/>
-  <int value="693432326" label="steam.exe"/>
-  <int value="729198307" label="excel.exe"/>
-  <int value="742620152" label="python.exe"/>
-  <int value="747859312" label="courier.exe"/>
-  <int value="1000072556" label="java.exe"/>
-  <int value="1408608854" label="old_chrome.exe"/>
-  <int value="1412988381" label="claunch.exe"/>
-  <int value="1590408389" label="services.exe"/>
-  <int value="1614875030" label="taskeng.exe"/>
-  <int value="1630952668" label="line.exe"/>
-  <int value="1641914182" label="winword.exe"/>
-  <int value="1660748446" label="acad.exe"/>
-  <int value="1775984853" label="spotify.exe"/>
-  <int value="1896894115" label="filmora.exe"/>
-  <int value="1914315258" label="cdb.exe"/>
-  <int value="1941932935" label="javaw.exe"/>
-  <int value="1943061727" label="fiddler.exe"/>
-  <int value="1976535553" label="jsvmail.exe"/>
-  <int value="2011028983" label="pcman.exe"/>
-</enum>
-
-<enum name="ProcessType" type="int">
-  <obsolete>
-    Deprecated 3/2013. No longer generated.
-  </obsolete>
-  <summary>
-    The value for type comes from the ProcessType enum in
-    content/public/common/process_type.h.
-  </summary>
-  <int value="1" label="UNKNOWN"/>
-  <int value="2" label="BROWSER"/>
-  <int value="3" label="RENDER"/>
-  <int value="4" label="PLUGIN"/>
-  <int value="5" label="WORKER"/>
-  <int value="6" label="NACL"/>
-  <int value="7" label="UTILITY"/>
-  <int value="8" label="PROFILE_IMPORT"/>
-  <int value="9" label="ZYGOTE"/>
-  <int value="10" label="SANDBOX_HELPER"/>
-  <int value="11" label="NACL_BROKER_PROCESS"/>
-  <int value="12" label="GPU_PROCESS"/>
-  <int value="13" label="PPAPI_PLUGIN_PROCESS"/>
-</enum>
-
-<enum name="ProcessType2" type="int">
-  <summary>
-    The value for type comes from the ProcessType enum in
-    content/public/common/process_type.h.
-  </summary>
-  <int value="1" label="UNKNOWN"/>
-  <int value="2" label="BROWSER"/>
-  <int value="3" label="RENDER"/>
-  <int value="4" label="PLUGIN"/>
-  <int value="5" label="WORKER"/>
-  <int value="6" label="UTILITY"/>
-  <int value="7" label="ZYGOTE"/>
-  <int value="8" label="SANDBOX_HELPER"/>
-  <int value="9" label="GPU_PROCESS"/>
-  <int value="10" label="PPAPI_PLUGIN_PROCESS"/>
-  <int value="11" label="PPAPI_BROKER_PROCESS"/>
-  <int value="12" label="PROFILE_IMPORT"/>
-  <int value="13" label="NACL"/>
-  <int value="14" label="NACL_BROKER_PROCESS"/>
-</enum>
-
-<enum name="ProfileAddNewUser" type="int">
-  <int value="0" label="Add new user from icon menu"/>
-  <int value="1" label="Add new user from title bar menu"/>
-  <int value="2" label="Add new user from settings dialog"/>
-  <int value="3" label="Add new user from the User Manager"/>
-  <int value="4" label="Auto-created after deleting last user"/>
-</enum>
-
-<enum name="ProfileAndroidAccountManagementMenu" type="int">
-  <int value="0" label="Opened Menu">
-    User arrived at the Account management screen.
-  </int>
-  <int value="1" label="Add Account">
-    User arrived at the Account management screen, and clicked Add account.
-  </int>
-  <int value="2" label="Go Incognito">
-    User arrived at the Account management screen, and clicked Go incognito.
-  </int>
-  <int value="3" label="Primary Account">
-    User arrived at the Account management screen, and clicked on primary.
-  </int>
-  <int value="4" label="Secondary Account">
-    User arrived at the Account management screen, and clicked on secondary.
-  </int>
-  <int value="5" label="Toggled Signout">
-    User arrived at the Account management screen, toggled Chrome signout.
-  </int>
-  <int value="6" label="Confirm Signout">
-    User toggled Chrome signout, and clicked Signout.
-  </int>
-  <int value="7" label="Cancel Signout">
-    User toggled Chrome signout, and clicked Cancel.
-  </int>
-</enum>
-
-<enum name="ProfileAuth" type="int">
-  <int value="0" label="Authentication was unnecessary (profile not locked)"/>
-  <int value="1" label="Authentication performed using local credentials"/>
-  <int value="2" label="Authentication performed on-line"/>
-  <int value="3" label="Authentication failed"/>
-  <int value="4" label="Authentication failed due to being offline"/>
-</enum>
-
-<enum name="ProfileAvatar" type="int">
-  <int value="0" label="Generic"/>
-  <int value="1" label="Generic Aqua"/>
-  <int value="2" label="Generic Blue"/>
-  <int value="3" label="Generic Green"/>
-  <int value="4" label="Generic Orange"/>
-  <int value="5" label="Generic Purple"/>
-  <int value="6" label="Generic Red"/>
-  <int value="7" label="Generic Yellow"/>
-  <int value="8" label="Secret Agent"/>
-  <int value="9" label="Superhero"/>
-  <int value="10" label="Volleyball"/>
-  <int value="11" label="Businessman"/>
-  <int value="12" label="Ninja"/>
-  <int value="13" label="Alien"/>
-  <int value="14" label="Super Awesome Cool Smiley Face"/>
-  <int value="15" label="Flower"/>
-  <int value="16" label="Pizza"/>
-  <int value="17" label="Soccer"/>
-  <int value="18" label="Burger"/>
-  <int value="19" label="Cat"/>
-  <int value="20" label="Cupcake"/>
-  <int value="21" label="Dog"/>
-  <int value="22" label="Horse"/>
-  <int value="23" label="Margarita"/>
-  <int value="24" label="Note"/>
-  <int value="25" label="Sun And Cloud"/>
-  <int value="26" label="Unknown"/>
-  <int value="27" label="GAIA"/>
-</enum>
-
-<enum name="ProfileCreateResult" type="int">
-  <int value="0" label="Failed locally"/>
-  <int value="1" label="Failed remotely"/>
-  <int value="2" label="Created but not initialized (should never happen)"/>
-  <int value="3" label="Succeeded"/>
-  <int value="4" label="Canceled"/>
-</enum>
-
-<enum name="ProfileDeleteAction" type="int">
-  <int value="0" label="Settings Page">
-    The user confirmed deletion of a profile from the settings page. This metric
-    is recorded even if profile deletion is cancelled after the confirmation.
-  </int>
-  <int value="1" label="User Manager">
-    The user confirmed deletion of a profile from the User Manager. This metric
-    is recorded even if profile deletion is cancelled after the confirmation.
-  </int>
-  <int value="2" label="User Manager Warning Shown">
-    The user clicked 'Remove this person' in the user manager and was shown the
-    profile deletion warning. No profile deletion action has been started yet.
-  </int>
-  <int value="3" label="Settings Page Warning Shown">
-    The user clicked 'Remove...' or the 'X' in the settings page and was shown
-    the profile deletion warning. No profile deletion action has been started
-    yet.
-  </int>
-  <int value="4" label="Aborted after confirmation">
-    The user confirmed the deletion of a profile in either the settings page or
-    the User Manager, but clicked 'Stay' in an OnBeforeUnload dialog. Since the
-    browsing window of the profile was still open, profile deletion was
-    cancelled.
-  </int>
-</enum>
-
-<enum name="ProfileDesktopMenu" type="int">
-  <int value="0" label="Locked in Menu">
-    User opened the user menu, and clicked lock.
-  </int>
-  <int value="1" label="Remove Account in Menu">
-    User opened the user menu, and removed an account.
-  </int>
-  <int value="2" label="Add Account in Menu">
-    User opened the user menu, and started adding an account.
-  </int>
-  <int value="3" label="Edit Profile Name in Menu">
-    User opened the user menu, and changed the profile name.
-  </int>
-  <int value="4" label="Edit Profile Image in Menu">
-    User opened the user menu, and started selecting a new profile image.
-  </int>
-  <int value="5" label="Open User Manager in Menu">
-    User opened the user menu, and opened the User Manager.
-  </int>
-  <int value="6" label="Go Incognito from Menu">
-    User opened the user menu, and selected Go Incognito.
-  </int>
-</enum>
-
-<enum name="ProfileErrorType" type="int">
-  <int value="0" label="History error"/>
-  <int value="1" label="Preferences error"/>
-  <int value="2" label="Webdata autofill DB error"/>
-  <int value="3" label="Webdata token DB error"/>
-  <int value="4" label="Webdata DB error"/>
-  <int value="5" label="Webdata keyword DB error"/>
-</enum>
-
-<enum name="ProfileGaiaPhotoOptions" type="int">
-  <int value="0" label="User opted to use GAIA photo"/>
-  <int value="1" label="User opted not to use GAIA photo"/>
-</enum>
-
-<enum name="ProfileImageDownloadResult" type="int">
-  <int value="0" label="DownloadSuccessChanged">
-    <summary>
-      Reported when image download succeeds and the image is newer than what we
-      already have so we update it.
-    </summary>
-  </int>
-  <int value="1" label="DownloadSuccess">
-    <summary>Reported anytime we download profile image successfully.</summary>
-  </int>
-  <int value="2" label="DownloadFailure">
-    <summary>Download failed because of network errors.</summary>
-  </int>
-  <int value="3" label="DownloadDefault">
-    <summary>
-      We didn't download the image because it's the default one.
-    </summary>
-  </int>
-</enum>
-
-<enum name="ProfileNetUserCount" type="int">
-  <int value="0" label="Added new user"/>
-  <int value="1" label="Deleted a profile"/>
-</enum>
-
-<enum name="ProfileNewAvatarMenuNotYou" type="int">
-  <int value="0" label="View 'Not You?' Bubble">
-    User views the 'Not You?' bubble.
-  </int>
-  <int value="1" label="Back">
-    User selects back from within the 'Not You?' bubble.
-  </int>
-  <int value="2" label="Add Person">
-    User adds a person from within the 'Not You?' bubble.
-  </int>
-  <int value="3" label="Disconnect">
-    User chooses to disconnect (sign out) from within the 'Not You?' bubble.
-  </int>
-</enum>
-
-<enum name="ProfileNewAvatarMenuSignin" type="int">
-  <int value="0" label="View Signin Bubble">
-    User viewed the signin bubble after successfully using the inline signin.
-  </int>
-  <int value="1" label="Dismiss">
-    User selected ok to dismiss the signin bubble.
-  </int>
-  <int value="2" label="Settings">
-    User opened the settings from the signin bubble.
-  </int>
-</enum>
-
-<enum name="ProfileNewAvatarMenuUpgrade" type="int">
-  <int value="0" label="View Upgrade Bubble">
-    User views the upgrade bubble.
-  </int>
-  <int value="1" label="Dismiss">User dismissed the upgrade bubble.</int>
-  <int value="2" label="What's New">
-    User selects 'What's New' in the upgrade bubble.
-  </int>
-  <int value="3" label="Not You?">
-    User selects 'Not You?' in the upgrade bubble.
-  </int>
-</enum>
-
-<enum name="ProfileOpen" type="int">
-  <int value="0" label="Add new user"/>
-  <int value="1" label="Add new user from icon menu"/>
-  <int value="2" label="Add new user from title bar menu"/>
-  <int value="3" label="Switch profile from icon menu"/>
-  <int value="4" label="Switch profile from title bar menu"/>
-  <int value="5" label="Opened the avatar bubble menu from NTP"/>
-  <int value="6" label="Opened the avatar bubble menu from icon"/>
-  <int value="7" label="Deleted a profile"/>
-</enum>
-
-<enum name="ProfileOpenMethod" type="int">
-  <int value="0" label="Opened the avatar menu from NTP"/>
-  <int value="1" label="Opened the avatar menu from avatar button"/>
-  <int value="2" label="Switch to profile from icon menu"/>
-  <int value="3" label="Switch to profile from title bar menu"/>
-  <int value="4" label="Switch to profile from Mac OS X Dock menu"/>
-  <int value="5" label="Opened the User Manager"/>
-  <int value="6" label="Switch to profile via User Manager"/>
-  <int value="7" label="Switch to locked profile via User Manager"/>
-  <int value="8" label="Switch to Guest profile"/>
-  <int value="9" label="Switch to profile from context menu"/>
-</enum>
-
-<enum name="ProfileResetRequestOriginEnum" type="int">
-  <int value="0" label="Unspecified"/>
-  <int value="1" label="Unknown"/>
-  <int value="2" label="User click"/>
-  <int value="3" label="CCT"/>
-  <int value="4" label="Triggered reset"/>
-</enum>
-
-<enum name="ProfileSigninStatus" type="int">
-  <int value="0" label="All profiles signed in"/>
-  <int value="1" label="All profiles not signed in"/>
-  <int value="2" label="Mixed signin status"/>
-  <int value="3" label="Unknown signin status"/>
-  <int value="4" label="Error getting signin status"/>
-</enum>
-
-<enum name="ProfileSync" type="int">
-  <int value="0" label="Signed in to sync"/>
-  <int value="1" label="Signed in to sync from original profile"/>
-  <int value="2" label="Signed in to sync from secondary profile"/>
-  <int value="3" label="Customized sync options"/>
-  <int value="4" label="Chose what to sync"/>
-  <int value="5" label="Encrypted all data"/>
-  <int value="6" label="Selected a passphrase"/>
-</enum>
-
-<enum name="ProfileSyncCustomize" type="int">
-  <int value="0" label="Customized sync options"/>
-  <int value="1" label="Chose what to sync"/>
-  <int value="2" label="Encrypted all data"/>
-  <int value="3" label="Selected a passphrase"/>
-</enum>
-
-<enum name="ProfileType" type="int">
-  <int value="0" label="Original (default) profile"/>
-  <int value="1" label="Secondary (user-created) profile"/>
-</enum>
-
-<enum name="ProfileUpgradeEnrollment" type="int">
-  <int value="0" label="User viewed the Upgrade promo card in the user menu."/>
-  <int value="1" label="User selected to view the intro tutorial."/>
-  <int value="2" label="User opted into New Profile Management by Promo card."/>
-  <int value="3" label="User closed the Upgrade card."/>
-  <int value="4" label="User disabled New Profiles Management."/>
-  <int value="5" label="User elected to send feedback."/>
-</enum>
-
-<enum name="ProtectorError" type="int">
-  <obsolete>
-    Deprecated 8/2013. No longer generated.
-  </obsolete>
-  <summary>
-    Codes for errors Protector detects about settings it protects. See
-    chrome/browser/protector/histograms.h for the corresponding enum.
-  </summary>
-  <int value="0" label="Backup invalid"/>
-  <int value="1" label="Value changed"/>
-  <int value="2" label="Value valid"/>
-  <int value="3" label="Value is valid and zero"/>
-</enum>
-
-<enum name="ProtocolVersion" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="HTTP 1.1"/>
-  <int value="2" label="SPDY 2.0"/>
-  <int value="3" label="SPDY 3.0"/>
-  <int value="4" label="SPDY 3.1"/>
-  <int value="5" label="SPDY 4.0"/>
-</enum>
-
-<enum name="ProvisionalLoadEvent" type="int">
-  <int value="0" label="Stopped no error">
-    This should represent the provisional load being stopped by the user, but
-    should not occur pre-PlzNavigate.
-  </int>
-  <int value="1" label="Load failed: ERR_ABORTED">
-    The provisional load failed with net::ERR_ABORTED. Note that ERR_ABORTED
-    includes downloads, 204s, and other non user-initiated abort conditions
-    (crbug.com/542369)
-  </int>
-  <int value="2" label="Load failed: not ERR_ABORTED">
-    The provisional load failed with an error other than net::ERR_ABORTED
-  </int>
-  <int value="3" label="Load successfully committed"/>
-</enum>
-
-<enum name="ProvisionalSaveFailure" type="int">
-  <int value="0" label="SAVING_DISABLED"/>
-  <int value="1" label="EMPTY_PASSWORD"/>
-  <int value="2" label="NO_MATCHING_FORM"/>
-  <int value="3" label="MATCHING_NOT_COMPLETE"/>
-  <int value="4" label="FORM_BLACKLISTED"/>
-  <int value="5" label="INVALID_FORM"/>
-  <int value="6" label="AUTOCOMPLETE_OFF"/>
-  <int value="7" label="SYNC_CREDENTIALS"/>
-</enum>
-
-<enum name="ProxyStatus" type="int">
-  <int value="0" label="PROXY_STATUS_IGNORED"/>
-  <int value="1" label="PROXY_UNINITIALIZED"/>
-  <int value="2" label="PROXY_NOT_USED"/>
-  <int value="3" label="PROXY_PAC_RESOLVER"/>
-  <int value="4" label="PROXY_HAS_RULES"/>
-</enum>
-
-<enum name="PublicKeyPinFailedDomain" type="int">
-  <int value="0" label="DOMAIN_NOT_PINNED"/>
-  <int value="1" label="DOMAIN_GOOGLE_COM"/>
-  <int value="2" label="DOMAIN_ANDROID_COM"/>
-  <int value="3" label="DOMAIN_GOOGLE_ANALYTICS_COM"/>
-  <int value="4" label="DOMAIN_GOOGLEPLEX_COM"/>
-  <int value="5" label="DOMAIN_YTIMG_COM"/>
-  <int value="6" label="DOMAIN_GOOGLEUSERCONTENT_COM"/>
-  <int value="7" label="DOMAIN_YOUTUBE_COM"/>
-  <int value="8" label="DOMAIN_GOOGLEAPIS_COM"/>
-  <int value="9" label="DOMAIN_GOOGLEADSERVICES_COM"/>
-  <int value="10" label="DOMAIN_GOOGLECODE_COM"/>
-  <int value="11" label="DOMAIN_APPSPOT_COM"/>
-  <int value="12" label="DOMAIN_GOOGLESYNDICATION_COM"/>
-  <int value="13" label="DOMAIN_DOUBLECLICK_NET"/>
-  <int value="14" label="DOMAIN_GSTATIC_COM"/>
-  <int value="15" label="DOMAIN_GMAIL_COM"/>
-  <int value="16" label="DOMAIN_GOOGLEMAIL_COM"/>
-  <int value="17" label="DOMAIN_GOOGLEGROUPS_COM"/>
-  <int value="18" label="DOMAIN_TORPROJECT_ORG"/>
-  <int value="19" label="DOMAIN_TWITTER_COM"/>
-  <int value="20" label="DOMAIN_TWIMG_COM"/>
-  <int value="21" label="DOMAIN_AKAMAIHD_NET"/>
-  <int value="22" label="DOMAIN_TOR2WEB_ORG"/>
-  <int value="23" label="DOMAIN_YOUTU_BE"/>
-  <int value="24" label="DOMAIN_GOOGLECOMMERCE_COM"/>
-  <int value="25" label="DOMAIN_URCHIN_COM"/>
-  <int value="26" label="DOMAIN_GOO_GL"/>
-  <int value="27" label="DOMAIN_G_CO"/>
-  <int value="28" label="DOMAIN_GOOGLE_AC"/>
-  <int value="29" label="DOMAIN_GOOGLE_AD"/>
-  <int value="30" label="DOMAIN_GOOGLE_AE"/>
-  <int value="31" label="DOMAIN_GOOGLE_AF"/>
-  <int value="32" label="DOMAIN_GOOGLE_AG"/>
-  <int value="33" label="DOMAIN_GOOGLE_AM"/>
-  <int value="34" label="DOMAIN_GOOGLE_AS"/>
-  <int value="35" label="DOMAIN_GOOGLE_AT"/>
-  <int value="36" label="DOMAIN_GOOGLE_AZ"/>
-  <int value="37" label="DOMAIN_GOOGLE_BA"/>
-  <int value="38" label="DOMAIN_GOOGLE_BE"/>
-  <int value="39" label="DOMAIN_GOOGLE_BF"/>
-  <int value="40" label="DOMAIN_GOOGLE_BG"/>
-  <int value="41" label="DOMAIN_GOOGLE_BI"/>
-  <int value="42" label="DOMAIN_GOOGLE_BJ"/>
-  <int value="43" label="DOMAIN_GOOGLE_BS"/>
-  <int value="44" label="DOMAIN_GOOGLE_BY"/>
-  <int value="45" label="DOMAIN_GOOGLE_CA"/>
-  <int value="46" label="DOMAIN_GOOGLE_CAT"/>
-  <int value="47" label="DOMAIN_GOOGLE_CC"/>
-  <int value="48" label="DOMAIN_GOOGLE_CD"/>
-  <int value="49" label="DOMAIN_GOOGLE_CF"/>
-  <int value="50" label="DOMAIN_GOOGLE_CG"/>
-  <int value="51" label="DOMAIN_GOOGLE_CH"/>
-  <int value="52" label="DOMAIN_GOOGLE_CI"/>
-  <int value="53" label="DOMAIN_GOOGLE_CL"/>
-  <int value="54" label="DOMAIN_GOOGLE_CM"/>
-  <int value="55" label="DOMAIN_GOOGLE_CN"/>
-  <int value="56" label="DOMAIN_CO_AO"/>
-  <int value="57" label="DOMAIN_CO_BW"/>
-  <int value="58" label="DOMAIN_CO_CK"/>
-  <int value="59" label="DOMAIN_CO_CR"/>
-  <int value="60" label="DOMAIN_CO_HU"/>
-  <int value="61" label="DOMAIN_CO_ID"/>
-  <int value="62" label="DOMAIN_CO_IL"/>
-  <int value="63" label="DOMAIN_CO_IM"/>
-  <int value="64" label="DOMAIN_CO_IN"/>
-  <int value="65" label="DOMAIN_CO_JE"/>
-  <int value="66" label="DOMAIN_CO_JP"/>
-  <int value="67" label="DOMAIN_CO_KE"/>
-  <int value="68" label="DOMAIN_CO_KR"/>
-  <int value="69" label="DOMAIN_CO_LS"/>
-  <int value="70" label="DOMAIN_CO_MA"/>
-  <int value="71" label="DOMAIN_CO_MZ"/>
-  <int value="72" label="DOMAIN_CO_NZ"/>
-  <int value="73" label="DOMAIN_CO_TH"/>
-  <int value="74" label="DOMAIN_CO_TZ"/>
-  <int value="75" label="DOMAIN_CO_UG"/>
-  <int value="76" label="DOMAIN_CO_UK"/>
-  <int value="77" label="DOMAIN_CO_UZ"/>
-  <int value="78" label="DOMAIN_CO_VE"/>
-  <int value="79" label="DOMAIN_CO_VI"/>
-  <int value="80" label="DOMAIN_CO_ZA"/>
-  <int value="81" label="DOMAIN_CO_ZM"/>
-  <int value="82" label="DOMAIN_CO_ZW"/>
-  <int value="83" label="DOMAIN_COM_AF"/>
-  <int value="84" label="DOMAIN_COM_AG"/>
-  <int value="85" label="DOMAIN_COM_AI"/>
-  <int value="86" label="DOMAIN_COM_AR"/>
-  <int value="87" label="DOMAIN_COM_AU"/>
-  <int value="88" label="DOMAIN_COM_BD"/>
-  <int value="89" label="DOMAIN_COM_BH"/>
-  <int value="90" label="DOMAIN_COM_BN"/>
-  <int value="91" label="DOMAIN_COM_BO"/>
-  <int value="92" label="DOMAIN_COM_BR"/>
-  <int value="93" label="DOMAIN_COM_BY"/>
-  <int value="94" label="DOMAIN_COM_BZ"/>
-  <int value="95" label="DOMAIN_COM_CN"/>
-  <int value="96" label="DOMAIN_COM_CO"/>
-  <int value="97" label="DOMAIN_COM_CU"/>
-  <int value="98" label="DOMAIN_COM_CY"/>
-  <int value="99" label="DOMAIN_COM_DO"/>
-  <int value="100" label="DOMAIN_COM_EC"/>
-  <int value="101" label="DOMAIN_COM_EG"/>
-  <int value="102" label="DOMAIN_COM_ET"/>
-  <int value="103" label="DOMAIN_COM_FJ"/>
-  <int value="104" label="DOMAIN_COM_GE"/>
-  <int value="105" label="DOMAIN_COM_GH"/>
-  <int value="106" label="DOMAIN_COM_GI"/>
-  <int value="107" label="DOMAIN_COM_GR"/>
-  <int value="108" label="DOMAIN_COM_GT"/>
-  <int value="109" label="DOMAIN_COM_HK"/>
-  <int value="110" label="DOMAIN_COM_IQ"/>
-  <int value="111" label="DOMAIN_COM_JM"/>
-  <int value="112" label="DOMAIN_COM_JO"/>
-  <int value="113" label="DOMAIN_COM_KH"/>
-  <int value="114" label="DOMAIN_COM_KW"/>
-  <int value="115" label="DOMAIN_COM_LB"/>
-  <int value="116" label="DOMAIN_COM_LY"/>
-  <int value="117" label="DOMAIN_COM_MT"/>
-  <int value="118" label="DOMAIN_COM_MX"/>
-  <int value="119" label="DOMAIN_COM_MY"/>
-  <int value="120" label="DOMAIN_COM_NA"/>
-  <int value="121" label="DOMAIN_COM_NF"/>
-  <int value="122" label="DOMAIN_COM_NG"/>
-  <int value="123" label="DOMAIN_COM_NI"/>
-  <int value="124" label="DOMAIN_COM_NP"/>
-  <int value="125" label="DOMAIN_COM_NR"/>
-  <int value="126" label="DOMAIN_COM_OM"/>
-  <int value="127" label="DOMAIN_COM_PA"/>
-  <int value="128" label="DOMAIN_COM_PE"/>
-  <int value="129" label="DOMAIN_COM_PH"/>
-  <int value="130" label="DOMAIN_COM_PK"/>
-  <int value="131" label="DOMAIN_COM_PL"/>
-  <int value="132" label="DOMAIN_COM_PR"/>
-  <int value="133" label="DOMAIN_COM_PY"/>
-  <int value="134" label="DOMAIN_COM_QA"/>
-  <int value="135" label="DOMAIN_COM_RU"/>
-  <int value="136" label="DOMAIN_COM_SA"/>
-  <int value="137" label="DOMAIN_COM_SB"/>
-  <int value="138" label="DOMAIN_COM_SG"/>
-  <int value="139" label="DOMAIN_COM_SL"/>
-  <int value="140" label="DOMAIN_COM_SV"/>
-  <int value="141" label="DOMAIN_COM_TJ"/>
-  <int value="142" label="DOMAIN_COM_TN"/>
-  <int value="143" label="DOMAIN_COM_TR"/>
-  <int value="144" label="DOMAIN_COM_TW"/>
-  <int value="145" label="DOMAIN_COM_UA"/>
-  <int value="146" label="DOMAIN_COM_UY"/>
-  <int value="147" label="DOMAIN_COM_VC"/>
-  <int value="148" label="DOMAIN_COM_VE"/>
-  <int value="149" label="DOMAIN_COM_VN"/>
-  <int value="150" label="DOMAIN_GOOGLE_CV"/>
-  <int value="151" label="DOMAIN_GOOGLE_CZ"/>
-  <int value="152" label="DOMAIN_GOOGLE_DE"/>
-  <int value="153" label="DOMAIN_GOOGLE_DJ"/>
-  <int value="154" label="DOMAIN_GOOGLE_DK"/>
-  <int value="155" label="DOMAIN_GOOGLE_DM"/>
-  <int value="156" label="DOMAIN_GOOGLE_DZ"/>
-  <int value="157" label="DOMAIN_GOOGLE_EE"/>
-  <int value="158" label="DOMAIN_GOOGLE_ES"/>
-  <int value="159" label="DOMAIN_GOOGLE_FI"/>
-  <int value="160" label="DOMAIN_GOOGLE_FM"/>
-  <int value="161" label="DOMAIN_GOOGLE_FR"/>
-  <int value="162" label="DOMAIN_GOOGLE_GA"/>
-  <int value="163" label="DOMAIN_GOOGLE_GE"/>
-  <int value="164" label="DOMAIN_GOOGLE_GG"/>
-  <int value="165" label="DOMAIN_GOOGLE_GL"/>
-  <int value="166" label="DOMAIN_GOOGLE_GM"/>
-  <int value="167" label="DOMAIN_GOOGLE_GP"/>
-  <int value="168" label="DOMAIN_GOOGLE_GR"/>
-  <int value="169" label="DOMAIN_GOOGLE_GY"/>
-  <int value="170" label="DOMAIN_GOOGLE_HK"/>
-  <int value="171" label="DOMAIN_GOOGLE_HN"/>
-  <int value="172" label="DOMAIN_GOOGLE_HR"/>
-  <int value="173" label="DOMAIN_GOOGLE_HT"/>
-  <int value="174" label="DOMAIN_GOOGLE_HU"/>
-  <int value="175" label="DOMAIN_GOOGLE_IE"/>
-  <int value="176" label="DOMAIN_GOOGLE_IM"/>
-  <int value="177" label="DOMAIN_GOOGLE_INFO"/>
-  <int value="178" label="DOMAIN_GOOGLE_IQ"/>
-  <int value="179" label="DOMAIN_GOOGLE_IS"/>
-  <int value="180" label="DOMAIN_GOOGLE_IT"/>
-  <int value="181" label="DOMAIN_IT_AO"/>
-  <int value="182" label="DOMAIN_GOOGLE_JE"/>
-  <int value="183" label="DOMAIN_GOOGLE_JO"/>
-  <int value="184" label="DOMAIN_GOOGLE_JOBS"/>
-  <int value="185" label="DOMAIN_GOOGLE_JP"/>
-  <int value="186" label="DOMAIN_GOOGLE_KG"/>
-  <int value="187" label="DOMAIN_GOOGLE_KI"/>
-  <int value="188" label="DOMAIN_GOOGLE_KZ"/>
-  <int value="189" label="DOMAIN_GOOGLE_LA"/>
-  <int value="190" label="DOMAIN_GOOGLE_LI"/>
-  <int value="191" label="DOMAIN_GOOGLE_LK"/>
-  <int value="192" label="DOMAIN_GOOGLE_LT"/>
-  <int value="193" label="DOMAIN_GOOGLE_LU"/>
-  <int value="194" label="DOMAIN_GOOGLE_LV"/>
-  <int value="195" label="DOMAIN_GOOGLE_MD"/>
-  <int value="196" label="DOMAIN_GOOGLE_ME"/>
-  <int value="197" label="DOMAIN_GOOGLE_MG"/>
-  <int value="198" label="DOMAIN_GOOGLE_MK"/>
-  <int value="199" label="DOMAIN_GOOGLE_ML"/>
-  <int value="200" label="DOMAIN_GOOGLE_MN"/>
-  <int value="201" label="DOMAIN_GOOGLE_MS"/>
-  <int value="202" label="DOMAIN_GOOGLE_MU"/>
-  <int value="203" label="DOMAIN_GOOGLE_MV"/>
-  <int value="204" label="DOMAIN_GOOGLE_MW"/>
-  <int value="205" label="DOMAIN_GOOGLE_NE"/>
-  <int value="206" label="DOMAIN_NE_JP"/>
-  <int value="207" label="DOMAIN_GOOGLE_NET"/>
-  <int value="208" label="DOMAIN_GOOGLE_NL"/>
-  <int value="209" label="DOMAIN_GOOGLE_NO"/>
-  <int value="210" label="DOMAIN_GOOGLE_NR"/>
-  <int value="211" label="DOMAIN_GOOGLE_NU"/>
-  <int value="212" label="DOMAIN_OFF_AI"/>
-  <int value="213" label="DOMAIN_GOOGLE_PK"/>
-  <int value="214" label="DOMAIN_GOOGLE_PL"/>
-  <int value="215" label="DOMAIN_GOOGLE_PN"/>
-  <int value="216" label="DOMAIN_GOOGLE_PS"/>
-  <int value="217" label="DOMAIN_GOOGLE_PT"/>
-  <int value="218" label="DOMAIN_GOOGLE_RO"/>
-  <int value="219" label="DOMAIN_GOOGLE_RS"/>
-  <int value="220" label="DOMAIN_GOOGLE_RU"/>
-  <int value="221" label="DOMAIN_GOOGLE_RW"/>
-  <int value="222" label="DOMAIN_GOOGLE_SC"/>
-  <int value="223" label="DOMAIN_GOOGLE_SE"/>
-  <int value="224" label="DOMAIN_GOOGLE_SH"/>
-  <int value="225" label="DOMAIN_GOOGLE_SI"/>
-  <int value="226" label="DOMAIN_GOOGLE_SK"/>
-  <int value="227" label="DOMAIN_GOOGLE_SM"/>
-  <int value="228" label="DOMAIN_GOOGLE_SN"/>
-  <int value="229" label="DOMAIN_GOOGLE_SO"/>
-  <int value="230" label="DOMAIN_GOOGLE_ST"/>
-  <int value="231" label="DOMAIN_GOOGLE_TD"/>
-  <int value="232" label="DOMAIN_GOOGLE_TG"/>
-  <int value="233" label="DOMAIN_GOOGLE_TK"/>
-  <int value="234" label="DOMAIN_GOOGLE_TL"/>
-  <int value="235" label="DOMAIN_GOOGLE_TM"/>
-  <int value="236" label="DOMAIN_GOOGLE_TN"/>
-  <int value="237" label="DOMAIN_GOOGLE_TO"/>
-  <int value="238" label="DOMAIN_GOOGLE_TP"/>
-  <int value="239" label="DOMAIN_GOOGLE_TT"/>
-  <int value="240" label="DOMAIN_GOOGLE_US"/>
-  <int value="241" label="DOMAIN_GOOGLE_UZ"/>
-  <int value="242" label="DOMAIN_GOOGLE_VG"/>
-  <int value="243" label="DOMAIN_GOOGLE_VU"/>
-  <int value="244" label="DOMAIN_GOOGLE_WS"/>
-  <int value="245" label="DOMAIN_CHROMIUM_ORG"/>
-  <int value="246" label="DOMAIN_CRYPTO_CAT"/>
-  <int value="247" label="DOMAIN_LAVABIT_COM"/>
-  <int value="248" label="DOMAIN_GOOGLETAGMANAGER_COM"/>
-  <int value="249" label="DOMAIN_GOOGLETAGSERVICES_COM"/>
-  <int value="250" label="DOMAIN_DROPBOX_COM"/>
-  <int value="251" label="DOMAIN_YOUTUBE_NOCOOKIE_COM"/>
-  <int value="252" label="DOMAIN_2MDN_NET"/>
-  <int value="253" label="DOMAIN_FACEBOOK_COM"/>
-  <int value="254" label="DOMAIN_SPIDEROAK_COM"/>
-</enum>
-
-<enum name="PushDeliveryStatus" type="int">
-  <int value="0" label="Successful"/>
-  <int value="1" label="Message was invalid"/>
-  <int value="2" label="App id was unknown"/>
-  <int value="3" label="Origin no longer has permission"/>
-  <int value="4" label="Service Worker not found"/>
-  <int value="5" label="Service Worker error"/>
-  <int value="6" label="event.waitUntil promise rejected"/>
-  <int value="7" label="Service Worker timeout while processing event"/>
-</enum>
-
-<enum name="PushGetRegistrationStatus" type="int">
-  <int value="0" label="Successful"/>
-  <int value="1" label="No push service"/>
-  <int value="2" label="Storage error"/>
-  <int value="3" label="Registration not found"/>
-  <int value="4" label="Registration not found (no incognito push service)"/>
-  <int value="5" label="Unable to retrieve the public key"/>
-</enum>
-
-<enum name="PushRegistrationStatus" type="int">
-  <int value="0" label="Successful - from push service"/>
-  <int value="1" label="Service Worker not found"/>
-  <int value="2" label="No push service"/>
-  <int value="3" label="Registration limit reached"/>
-  <int value="4" label="Permission denied"/>
-  <int value="5" label="Push service error"/>
-  <int value="6" label="No sender id provided"/>
-  <int value="7" label="Storage error"/>
-  <int value="8" label="Successful - from cache"/>
-  <int value="9" label="Network error"/>
-  <int value="10" label="Permission denied (no incognito push service)"/>
-  <int value="11" label="Unable to retrieve the public key"/>
-  <int value="12" label="Empty or missing manifest"/>
-  <int value="13" label="Mismatched sender id"/>
-</enum>
-
-<enum name="PushUnregistrationReason" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="JavaScript API"/>
-  <int value="2" label="Permission revoked"/>
-  <int value="3" label="Incoming message app id was unknown"/>
-  <int value="4" label="Incoming message origin no longer has permission"/>
-  <int value="5" label="Incoming message Service Worker not found"/>
-  <int value="6" label="GCM Store reset due to corruption"/>
-  <int value="7" label="Service Worker unregistered"/>
-</enum>
-
-<enum name="PushUnregistrationStatus" type="int">
-  <int value="0" label="Successful - from push service"/>
-  <int value="1" label="Successful - was not registered"/>
-  <int value="2" label="Pending - will retry network error"/>
-  <int value="3" label="Service Worker not found"/>
-  <int value="4" label="No push service"/>
-  <int value="5" label="Pending - will retry push service error"/>
-  <int value="6" label="Storage error"/>
-  <int value="7" label="Network error"/>
-</enum>
-
-<enum name="PushUserVisibleStatus" type="int">
-  <int value="0" label="Required and shown"/>
-  <int value="1" label="Not required but shown"/>
-  <int value="2" label="Not required and not shown"/>
-  <int value="3" label="Required but not shown - used grace"/>
-  <int value="4" label="Required but not shown - grace exceeded"/>
-</enum>
-
-<enum name="QuicAddressMismatch" type="int">
-  <int value="0" label="Address mismatch: IPv4 IPv4"/>
-  <int value="1" label="Address mismatch: IPv6 IPv6"/>
-  <int value="2" label="Address mismatch: IPv4 IPv6"/>
-  <int value="3" label="Address mismatch: IPv6 IPv4"/>
-  <int value="4" label="Port mismatch: IPv4 IPv4"/>
-  <int value="5" label="Port mismatch: IPv6 IPv6"/>
-  <int value="6" label="Address and port match: IPv4 IPv4"/>
-  <int value="7" label="Address and port match: IPv6 IPv6"/>
-</enum>
-
-<enum name="QuicAlternativeProxyUsage" type="int">
-  <int value="0" label="ALTERNATIVE_PROXY_USAGE_NO_RACE"/>
-  <int value="1" label="ALTERNATIVE_PROXY_USAGE_WON_RACE"/>
-  <int value="2" label="ALTERNATIVE_PROXY_USAGE_LOST_RACE"/>
-</enum>
-
-<enum name="QuicBadPacketLossEvents" type="int">
-  <int value="1" label="ONE_PACKET_LOST"/>
-  <int value="2" label="TWO_PACKETS_LOST"/>
-  <int value="3" label="THREE_PACKETS_LOST"/>
-  <int value="4" label="FOUR_PACKETS_LOST"/>
-  <int value="5" label="FIVE_PACKETS_LOST"/>
-</enum>
-
-<enum name="QuicConnectionMigrationStatus" type="int">
-  <int value="0" label="NO_MIGRATABLE_STREAMS"/>
-  <int value="1" label="ALREADY_MIGRATED"/>
-  <int value="2" label="INTERNAL_ERROR"/>
-  <int value="3" label="TOO_MANY_CHANGES"/>
-  <int value="4" label="SUCCESS"/>
-  <int value="5" label="NON_MIGRATABLE_STREAM"/>
-  <int value="6" label="DISABLED"/>
-  <int value="7" label="MIGRATION_STATUS_NO_ALTERNATE_NETWORK"/>
-</enum>
-
-<enum name="QuicDisabledReason" type="int">
-  <int value="1" label="Public reset post handshake"/>
-  <int value="2" label="Timeout with open streams"/>
-  <int value="3" label="Bad packet loss rate"/>
-</enum>
-
-<enum name="QuicDiskCacheAPICall" type="int">
-  <int value="0" label="Start"/>
-  <int value="1" label="WaitForDataReady"/>
-  <int value="2" label="Parse"/>
-  <int value="3" label="WaitForDataReadyCancel"/>
-  <int value="4" label="ReadyToPersist"/>
-  <int value="5" label="Persist"/>
-  <int value="6" label="ExternalCacheHit"/>
-  <int value="7" label="ResetWaitForDataReady"/>
-</enum>
-
-<enum name="QuicDiskCacheEntryState" type="int">
-  <int value="0" label="Opened"/>
-  <int value="1" label="Closed"/>
-</enum>
-
-<enum name="QuicDiskCacheFailureReason" type="int">
-  <int value="0" label="WAIT_FOR_DATA_READY_INVALID_ARGUMENT_FAILURE"/>
-  <int value="1" label="GET_BACKEND_FAILURE"/>
-  <int value="2" label="OPEN_FAILURE"/>
-  <int value="3" label="CREATE_OR_OPEN_FAILURE"/>
-  <int value="4" label="PARSE_NO_DATA_FAILURE"/>
-  <int value="5" label="PARSE_FAILURE"/>
-  <int value="6" label="READ_FAILURE"/>
-  <int value="7" label="READY_TO_PERSIST_FAILURE"/>
-  <int value="8" label="PERSIST_NO_BACKEND_FAILURE"/>
-  <int value="9" label="WRITE_FAILURE"/>
-  <int value="10" label="NO_FAILURE"/>
-  <int value="11" label="PARSE_DATA_DECODE_FAILURE"/>
-</enum>
-
-<enum name="QuicErrorCodes" type="int">
-  <int value="0" label="NO_ERROR"/>
-  <int value="1" label="INTERNAL_ERROR"/>
-  <int value="2" label="STREAM_DATA_AFTER_TERMINATION"/>
-  <int value="3" label="INVALID_PACKET_HEADER"/>
-  <int value="4" label="INVALID_FRAME_DATA"/>
-  <int value="5" label="INVALID_FEC_DATA"/>
-  <int value="6" label="INVALID_RST_STREAM_DATA"/>
-  <int value="7" label="INVALID_CONNECTION_CLOSE_DATA"/>
-  <int value="8" label="INVALID_GOAWAY_DATA"/>
-  <int value="9" label="INVALID_ACK_DATA"/>
-  <int value="10" label="INVALID_VERSION_NEGOTIATION_PACKET"/>
-  <int value="11" label="INVALID_PUBLIC_RST_PACKET"/>
-  <int value="12" label="DECRYPTION_FAILURE"/>
-  <int value="13" label="ENCRYPTION_FAILURE"/>
-  <int value="14" label="PACKET_TOO_LARGE"/>
-  <int value="15" label="PACKET_FOR_NONEXISTENT_STREAM"/>
-  <int value="16" label="PEER_GOING_AWAY"/>
-  <int value="17" label="INVALID_STREAM_ID"/>
-  <int value="18" label="TOO_MANY_OPEN_STREAMS"/>
-  <int value="19" label="PUBLIC_RESET"/>
-  <int value="20" label="INVALID_VERSION"/>
-  <int value="21" label="STREAM_RST_BEFORE_HEADERS_DECOMPRESSED"/>
-  <int value="22" label="INVALID_HEADER_ID"/>
-  <int value="23" label="INVALID_NEGOTIATED_VALUE"/>
-  <int value="24" label="DECOMPRESSION_FAILURE"/>
-  <int value="25" label="NETWORK_IDLE_TIMEOUT"/>
-  <int value="26" label="ERROR_MIGRATING_ADDRESS"/>
-  <int value="27" label="PACKET_WRITE_ERROR"/>
-  <int value="28" label="HANDSHAKE_FAILED"/>
-  <int value="29" label="CRYPTO_TAGS_OUT_OF_ORDER"/>
-  <int value="30" label="CRYPTO_TOO_MANY_ENTRIES"/>
-  <int value="31" label="CRYPTO_INVALID_VALUE_LENGTH"/>
-  <int value="32" label="CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE"/>
-  <int value="33" label="INVALID_CRYPTO_MESSAGE_TYPE"/>
-  <int value="34" label="INVALID_CRYPTO_MESSAGE_PARAMETER"/>
-  <int value="35" label="CRYPTO_MESSAGE_PARAMETER_NOT_FOUND"/>
-  <int value="36" label="CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP"/>
-  <int value="37" label="CRYPTO_MESSAGE_INDEX_NOT_FOUND"/>
-  <int value="38" label="CRYPTO_INTERNAL_ERROR"/>
-  <int value="39" label="CRYPTO_VERSION_NOT_SUPPORTED"/>
-  <int value="40" label="CRYPTO_NO_SUPPORT"/>
-  <int value="41" label="CRYPTO_TOO_MANY_REJECTS"/>
-  <int value="42" label="PROOF_INVALID"/>
-  <int value="43" label="CRYPTO_DUPLICATE_TAG"/>
-  <int value="44" label="CRYPTO_ENCRYPTION_LEVEL_INCORRECT"/>
-  <int value="45" label="CRYPTO_SERVER_CONFIG_EXPIRED"/>
-  <int value="46" label="INVALID_STREAM_DATA"/>
-  <int value="47" label="INVALID_CONGESTION_FEEDBACK_DATA"/>
-  <int value="48" label="MISSING_PAYLOAD"/>
-  <int value="49" label="INVALID_PRIORITY"/>
-  <int value="50" label="INVALID_STREAM_FRAME"/>
-  <int value="51" label="PACKET_READ_ERROR"/>
-  <int value="52" label="INVALID_CHANNEL_ID_SIGNATURE"/>
-  <int value="53" label="CRYPTO_SYMMETRIC_KEY_SETUP_FAILED"/>
-  <int value="54" label="CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO"/>
-  <int value="55" label="VERSION_NEGOTIATION_MISMATCH"/>
-  <int value="56" label="INVALID_HEADERS_STREAM_DATA"/>
-  <int value="57" label="INVALID_WINDOW_UPDATE_DATA"/>
-  <int value="58" label="INVALID_BLOCKED_DATA"/>
-  <int value="59" label="FLOW_CONTROL_ERROR"/>
-  <int value="60" label="INVALID_STOP_WAITING_DATA"/>
-  <int value="61" label="UNENCRYPTED_STREAM_DATA"/>
-  <int value="62" label="CONNECTION_IP_POOLED"/>
-  <int value="63" label="FLOW_CONTROL_SENT_TOO_MUCH_DATA"/>
-  <int value="64" label="FLOW_CONTROL_INVALID_WINDOW"/>
-  <int value="65" label="CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE"/>
-  <int value="66" label="TOO_MANY_UNFINISHED_STREAMS"/>
-  <int value="67" label="HANDSHAKE_TIMEOUT"/>
-  <int value="68" label="TOO_MANY_OUTSTANDING_SENT_PACKETS"/>
-  <int value="69" label="TOO_MANY_OUTSTANDING_RECEIVED_PACKETS"/>
-  <int value="70" label="CONNECTION_CANCELLED"/>
-  <int value="71" label="BAD_PACKET_LOSS_RATE"/>
-  <int value="72" label="CRYPTO_HANDSHAKE_STATELESS_REJECT"/>
-  <int value="73" label="PUBLIC_RESETS_POST_HANDSHAKE"/>
-  <int value="74" label="TIMEOUTS_WITH_OPEN_STREAMS"/>
-  <int value="75" label="FAILED_TO_SERIALIZE_PACKET"/>
-  <int value="76" label="TOO_MANY_AVAILABLE_STREAMS"/>
-  <int value="77" label="UNENCRYPTED_FEC_DATA"/>
-  <int value="78" label="INVALID_PATH_CLOSE_DATA"/>
-  <int value="79" label="BAD_MULTIPATH_FLAG"/>
-  <int value="80" label="IP_ADDRESS_CHANGED"/>
-  <int value="81" label="CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS"/>
-  <int value="82" label="CONNECTION_MIGRATION_TOO_MANY_CHANGES"/>
-  <int value="83" label="CONNECTION_MIGRATION_NO_NEW_NETWORK"/>
-  <int value="84" label="CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM"/>
-  <int value="85" label="TOO_MANY_RTOS"/>
-  <int value="86" label="ERROR_MIGRATING_PORT"/>
-  <int value="87" label="OVERLAPPING_STREAM_DATA"/>
-  <int value="88" label="ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA"/>
-  <int value="89" label="MAYBE_CORRUPTED_MEMORY"/>
-  <int value="90" label="CRYPTO_CHLO_TOO_LARGE"/>
-  <int value="91" label="MULTIPATH_PATH_DOES_NOT_EXIST"/>
-  <int value="92" label="MULTIPATH_PATH_NOT_ACTIVE"/>
-  <int value="93" label="TOO_MANY_FRAME_GAPS"/>
-  <int value="94" label="UNSUPPORTED_PROOF_DEMAND"/>
-</enum>
-
-<enum name="QuicHandshakeFailureReason" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="BLACK_HOLE"/>
-  <int value="2" label="PUBLIC_RESET"/>
-</enum>
-
-<enum name="QuicHandshakeState" type="int">
-  <int value="0" label="STARTED"/>
-  <int value="1" label="ENCRYPTION_ESTABLISHED"/>
-  <int value="2" label="HANDSHAKE_CONFIRMED"/>
-  <int value="3" label="FAILED"/>
-</enum>
-
-<enum name="QuickofficeErrorTypes" type="int">
-  <int value="0" label="doc uncaught js exception"/>
-  <int value="1" label="docx uncaught js exception"/>
-  <int value="2" label="docm uncaught js exception"/>
-  <int value="3" label="xls uncaught js exception"/>
-  <int value="4" label="xlsx uncaught js exception"/>
-  <int value="5" label="xlsm uncaught js exception"/>
-  <int value="6" label="ppt uncaught js exception"/>
-  <int value="7" label="pptx uncaught js exception"/>
-  <int value="8" label="pptm uncaught js exception"/>
-  <int value="9" label="pps uncaught js exception"/>
-  <int value="10" label="ppsx uncaught js exception"/>
-  <int value="11" label="ppsm uncaught js exception"/>
-  <int value="12" label="doc suspected corrupt file"/>
-  <int value="13" label="docx suspected corrupt file"/>
-  <int value="14" label="docm suspected corrupt file"/>
-  <int value="15" label="xls suspected corrupt file"/>
-  <int value="16" label="xlsx suspected corrupt file"/>
-  <int value="17" label="xlsm suspected corrupt file"/>
-  <int value="18" label="ppt suspected corrupt file"/>
-  <int value="19" label="pptx suspected corrupt file"/>
-  <int value="20" label="pptm suspected corrupt file"/>
-  <int value="21" label="pps suspected corrupt file"/>
-  <int value="22" label="ppsx suspected corrupt file"/>
-  <int value="23" label="ppsm suspected corrupt file"/>
-  <int value="24" label="doc qowt ui warning"/>
-  <int value="25" label="docx qowt ui warning"/>
-  <int value="26" label="docm qowt ui warning"/>
-  <int value="27" label="xls qowt ui warning"/>
-  <int value="28" label="xlsx qowt ui warning"/>
-  <int value="29" label="xlsm qowt ui warning"/>
-  <int value="30" label="ppt qowt ui warning"/>
-  <int value="31" label="pptx qowt ui warning"/>
-  <int value="32" label="pptm qowt ui warning"/>
-  <int value="33" label="pps qowt ui warning"/>
-  <int value="34" label="ppsx qowt ui warning"/>
-  <int value="35" label="ppsm qowt ui warning"/>
-  <int value="36" label="doc nacl error"/>
-  <int value="37" label="docx nacl error"/>
-  <int value="38" label="docm nacl error"/>
-  <int value="39" label="xls nacl error"/>
-  <int value="40" label="xlsx nacl error"/>
-  <int value="41" label="xlsm nacl error"/>
-  <int value="42" label="ppt nacl error"/>
-  <int value="43" label="pptx nacl error"/>
-  <int value="44" label="pptm nacl error"/>
-  <int value="45" label="pps nacl error"/>
-  <int value="46" label="ppsx nacl error"/>
-  <int value="47" label="ppsm nacl error"/>
-  <int value="48" label="doc nacl crash"/>
-  <int value="49" label="docx nacl crash"/>
-  <int value="50" label="docm nacl crash"/>
-  <int value="51" label="xls nacl crash"/>
-  <int value="52" label="xlsx nacl crash"/>
-  <int value="53" label="xlsm nacl crash"/>
-  <int value="54" label="ppt nacl crash"/>
-  <int value="55" label="pptx nacl crash"/>
-  <int value="56" label="pptm nacl crash"/>
-  <int value="57" label="pps nacl crash"/>
-  <int value="58" label="ppsx nacl crash"/>
-  <int value="59" label="ppsm nacl crash"/>
-  <int value="60" label="doc invalid file format"/>
-  <int value="61" label="docx invalid file format"/>
-  <int value="62" label="docm invalid file format"/>
-  <int value="63" label="xls invalid file format"/>
-  <int value="64" label="xlsx invalid file format"/>
-  <int value="65" label="xlsm invalid file format"/>
-  <int value="66" label="ppt invalid file format"/>
-  <int value="67" label="pptx invalid file format"/>
-  <int value="68" label="pptm invalid file format"/>
-  <int value="69" label="pps invalid file format"/>
-  <int value="70" label="ppsx invalid file format"/>
-  <int value="71" label="ppsm invalid file format"/>
-  <int value="72" label="doc editing dom sync error"/>
-  <int value="73" label="docx editing dom sync error"/>
-  <int value="74" label="docm editing dom sync error"/>
-  <int value="75" label="xls editing dom sync error"/>
-  <int value="76" label="xlsx editing dom sync error"/>
-  <int value="77" label="xlsm editing dom sync error"/>
-  <int value="78" label="ppt editing dom sync error"/>
-  <int value="79" label="pptx editing dom sync error"/>
-  <int value="80" label="pptm editing dom sync error"/>
-  <int value="81" label="pps editing dom sync error"/>
-  <int value="82" label="ppsx editing dom sync error"/>
-  <int value="83" label="ppsm editing dom sync error"/>
-</enum>
-
-<enum name="QuickofficeFileFormat" type="int">
-  <int value="0" label="doc"/>
-  <int value="1" label="docx"/>
-  <int value="2" label="docm"/>
-  <int value="3" label="xls"/>
-  <int value="4" label="xlsx"/>
-  <int value="5" label="xlsm"/>
-  <int value="6" label="ppt"/>
-  <int value="7" label="pptx"/>
-  <int value="8" label="pptm"/>
-  <int value="9" label="pps"/>
-  <int value="10" label="ppsx"/>
-  <int value="11" label="ppsm"/>
-  <int value="12" label="csv"/>
-</enum>
-
-<enum name="QuicRejectReasons" type="int">
-  <int value="1" label="CLIENT_NONCE_UNKNOWN_FAILURE"/>
-  <int value="2" label="CLIENT_NONCE_INVALID_FAILURE"/>
-  <int value="4" label="CLIENT_NONCE_NOT_UNIQUE_FAILURE"/>
-  <int value="8" label="CLIENT_NONCE_INVALID_ORBIT_FAILURE"/>
-  <int value="16" label="CLIENT_NONCE_INVALID_TIME_FAILURE"/>
-  <int value="32" label="CLIENT_NONCE_STRIKE_REGISTER_TIMEOUT"/>
-  <int value="64" label="CLIENT_NONCE_STRIKE_REGISTER_FAILURE"/>
-  <int value="128" label="SERVER_NONCE_DECRYPTION_FAILURE"/>
-  <int value="256" label="SERVER_NONCE_INVALID_FAILURE"/>
-  <int value="512" label="SERVER_NONCE_NOT_UNIQUE_FAILURE"/>
-  <int value="1024" label="SERVER_NONCE_INVALID_TIME_FAILURE"/>
-  <int value="2048" label="SERVER_CONFIG_INCHOATE_HELLO_FAILURE"/>
-  <int value="4096" label="SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE"/>
-  <int value="8192" label="SOURCE_ADDRESS_TOKEN_INVALID_FAILURE"/>
-  <int value="16384" label="SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
-  <int value="16512"
-      label="SERVER_NONCE_DECRYPTION_FAILURE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
-  <int value="32768" label="SOURCE_ADDRESS_TOKEN_PARSE_FAILURE"/>
-  <int value="65536" label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE"/>
-  <int value="65664"
-      label="SERVER_NONCE_DECRYPTION_FAILURE+SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE"/>
-  <int value="131072" label="SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE"/>
-  <int value="262144" label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE"/>
-  <int value="524288" label="SERVER_NONCE_REQUIRED_FAILURE"/>
-  <int value="540672"
-      label="SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
-  <int value="589824"
-      label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
-  <int value="786432"
-      label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
-  <int value="1048576" label="INVALID_EXPECTED_LEAF_CERTIFICATE"/>
-  <int value="1064960"
-      label="INVALID_EXPECTED_LEAF_CERTIFICATE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
-  <int value="1114112"
-      label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
-  <int value="1310720"
-      label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
-  <int value="1572864"
-      label="SERVER_NONCE_REQUIRED_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
-  <int value="1589248"
-      label="INVALID_EXPECTED_LEAF_CERTIFICATE+SERVER_NONCE_REQUIRED_FAILURE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
-</enum>
-
-<enum name="QuicRstStreamErrorCodes" type="int">
-  <int value="0" label="NO_ERROR"/>
-  <int value="1" label="ERROR_PROCESSING_STREAM"/>
-  <int value="2" label="MULTIPLE_TERMINATION_OFFSETS"/>
-  <int value="3" label="BAD_APPLICATION_PAYLOAD"/>
-  <int value="4" label="CONNECTION_ERROR"/>
-  <int value="5" label="PEER_GOING_AWAY"/>
-  <int value="6" label="CANCELLED"/>
-  <int value="7" label="RST_FLOW_CONTROL_ACCOUNTING"/>
-  <int value="8" label="REFUSED"/>
-  <int value="9" label="INVALID_PROMISE_URL"/>
-  <int value="10" label="UNAUTHORIZED_PROMISE_URL"/>
-  <int value="11" label="DUPLICATE_PROMISE_URL"/>
-  <int value="12" label="PROMISE_VARY_MISMATCH"/>
-  <int value="13" label="INVALID_PROMISE_METHOD"/>
-  <int value="14" label="PUSH_STREAM_TIMED_OUT"/>
-  <int value="15" label="HEADERS_TOO_LARGE"/>
-</enum>
-
-<enum name="QuicServerConfigState" type="int">
-  <int value="0" label="SERVER_CONFIG_EMPTY"/>
-  <int value="1" label="SERVER_CONFIG_INVALID"/>
-  <int value="2" label="SERVER_CONFIG_CORRUPTED"/>
-  <int value="3" label="SERVER_CONFIG_EXPIRED"/>
-  <int value="4" label="SERVER_CONFIG_INVALID_EXPIRY"/>
-  <int value="5" label="SERVER_CONFIG_VALID"/>
-</enum>
-
-<enum name="QuicSessionErrorCodes" type="int">
-  <int value="0" label="CONNECTING_SOCKET"/>
-  <int value="1" label="SETTING_RECEIVE_BUFFER"/>
-  <int value="2" label="SETTING_SEND_BUFFER"/>
-  <int value="3" label="SETTING_DO_NOT_FRAGMENT"/>
-</enum>
-
-<enum name="QuicSessionLocations" type="int">
-  <int value="0" label="DESTRUCTOR"/>
-  <int value="1" label="ADD_OBSERVER"/>
-  <int value="2" label="TRY_CREATE_STREAM"/>
-  <int value="3" label="CREATE_OUTGOING_RELIABLE_STREAM"/>
-  <int value="4" label="NOTIFY_FACTORY_OF_SESSION_CLOSED_LATER"/>
-  <int value="5" label="NOTIFY_FACTORY_OF_SESSION_CLOSED"/>
-</enum>
-
-<enum name="QuotaOriginTypes" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="None"/>
-  <int value="2" label="google.com durable"/>
-  <int value="3" label="non-google.com durable"/>
-  <int value="4" label="google.com unlimitedStorage app/ext"/>
-  <int value="5" label="non-google.com unlimitedStorage app/ext"/>
-  <int value="6" label="In use"/>
-</enum>
-
-<enum name="RapporDiscardReason" type="int">
-  <int value="0" label="Upload Success"/>
-  <int value="1" label="Upload Rejected"/>
-  <int value="2" label="Queue Overflowed"/>
-</enum>
-
-<enum name="RapporLoadResultType" type="int">
-  <int value="0" label="LOAD_SUCCESS"/>
-  <int value="1" label="LOAD_EMPTY_VALUE"/>
-  <int value="2" label="LOAD_CORRUPT_VALUE"/>
-</enum>
-
-<enum name="ReadingListContextMenuActions" type="int">
-  <int value="0" label="New Tab"/>
-  <int value="1" label="New Incognito Tab"/>
-  <int value="2" label="Copy Link"/>
-  <int value="3" label="View Offline"/>
-  <int value="4" label="Cancel"/>
-</enum>
-
-<enum name="ReadingListDownloadStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Will retry"/>
-</enum>
-
-<enum name="RecentTabsAction" type="int">
-  <int value="0" label="Local Session Tab"/>
-  <int value="1" label="Other Device Tab"/>
-  <int value="2" label="Restore Window"/>
-  <int value="3" label="Show More"/>
-</enum>
-
-<enum name="RecoveryComponentEvent" type="int">
-  <int value="0" label="RunningNonElevated"/>
-  <int value="1" label="ElevationNeeded"/>
-  <int value="2" label="RunFailed"/>
-  <int value="3" label="RunSucceeded"/>
-  <int value="4" label="RunSkipped"/>
-  <int value="5" label="RunningElevated"/>
-  <int value="6" label="RunElevatedFailed"/>
-  <int value="7" label="RunElevatedSucceeded"/>
-  <int value="8" label="RunElevatedSkipped"/>
-  <int value="9" label="DownloadError"/>
-</enum>
-
-<enum name="RefcountOperation" type="int">
-  <int value="0" label="Decrement"/>
-  <int value="1" label="Increment"/>
-</enum>
-
-<enum name="RemotePlaybackDeviceType" type="int">
-  <int value="0" label="Cast Generic Media Player"/>
-  <int value="1" label="Cast YouTube Player"/>
-  <int value="2" label="Non-Cast YouTube Player"/>
-</enum>
-
-<enum name="RemotePlaybackUrlResolveResult" type="int">
-  <int value="0" label="Successfully Resolved"/>
-  <int value="1" label="Malformed or empty Url"/>
-  <int value="2" label="No CORS header when required"/>
-  <int value="3" label="CORS header incompatible with Chromecast"/>
-  <int value="4" label="The response code indicated failure"/>
-  <int value="5" label="IO exception while fetching the url"/>
-  <int value="6" label="Unknown media type"/>
-</enum>
-
-<enum name="RemotingStartTrigger" type="int">
-  <int value="0" label="Unknown start trigger"/>
-  <int value="1" label="Entered fullscreen"/>
-  <int value="2" label="Became dominant content"/>
-  <int value="3" label="Re-allowed by page"/>
-  <int value="4" label="Sink available"/>
-  <int value="5" label="Play command"/>
-  <int value="6" label="Supported audio codec"/>
-  <int value="7" label="Supported video codec"/>
-  <int value="8" label="Supported audio and video codec"/>
-  <int value="9" label="CDM ready"/>
-</enum>
-
-<enum name="RemotingStopTrigger" type="int">
-  <int value="0" label="Unknown stop trigger"/>
-  <int value="1" label="Route terminated"/>
-  <int value="2" label="Media element destroyed"/>
-  <int value="3" label="Exited fullscreen"/>
-  <int value="4" label="Became auxiliary content"/>
-  <int value="5" label="Disallowed by page"/>
-  <int value="6" label="Start race"/>
-  <int value="7" label="Unsupported audio codec"/>
-  <int value="8" label="Unsupported video codec"/>
-  <int value="9" label="Unsupported audio and video codec"/>
-  <int value="10" label="Decryption/CDM error"/>
-  <int value="11" label="Receiver initialize failed"/>
-  <int value="12" label="Receiver pipeline error"/>
-  <int value="13" label="Frame drop rate high"/>
-  <int value="14" label="Pacing too slowly"/>
-  <int value="15" label="Peers out-of-sync"/>
-  <int value="16" label="RPC invalid"/>
-  <int value="17" label="Data pipe create error"/>
-  <int value="18" label="Mojo pipe error"/>
-</enum>
-
-<enum name="RemotingTrackConfiguration" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Audio only"/>
-  <int value="2" label="Video only"/>
-  <int value="3" label="Audio and video"/>
-</enum>
-
-<enum name="RendererSchedulerTaskQueueType" type="int">
-  <int value="0" label="Control"/>
-  <int value="1" label="Default"/>
-  <int value="2" label="DefaultLoading"/>
-  <int value="3" label="DefaultTimer"/>
-  <int value="4" label="Unthrottled"/>
-  <int value="5" label="FrameLoading"/>
-  <int value="6" label="FrameTimer"/>
-  <int value="7" label="FrameUnthrottled"/>
-  <int value="8" label="Compositor"/>
-  <int value="9" label="Idle"/>
-  <int value="10" label="Test"/>
-</enum>
-
-<enum name="RendererType" type="int">
-  <int value="1" label="Normal renderer"/>
-  <int value="2" label="Extension renderer"/>
-</enum>
-
-<enum name="RendererUnresponsiveType" type="int">
-  <obsolete>
-    Deprecated 3/2017.
-  </obsolete>
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Pending in-flight events"/>
-  <int value="2" label="Waiting for dialog closed"/>
-  <int value="3" label="Suppressed dialogs in unload events"/>
-  <int value="4" label="During BeforeUnload"/>
-  <int value="5" label="During Unload"/>
-  <int value="6" label="While closing the page"/>
-</enum>
-
-<enum name="RenderViewContextMenuItem" type="int">
-  <int value="0" label="IDC_CONTENT_CONTEXT_CUSTOM_FIRST"/>
-  <int value="1" label="IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST"/>
-  <int value="2" label="IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST"/>
-  <int value="3" label="IDC_CONTENT_CONTEXT_OPENLINKNEWTAB"/>
-  <int value="4" label="IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW"/>
-  <int value="5" label="IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD"/>
-  <int value="6" label="IDC_CONTENT_CONTEXT_SAVELINKAS"/>
-  <int value="7" label="IDC_CONTENT_CONTEXT_SAVEAVAS"/>
-  <int value="8" label="IDC_CONTENT_CONTEXT_SAVEIMAGEAS"/>
-  <int value="9" label="IDC_CONTENT_CONTEXT_COPYLINKLOCATION"/>
-  <int value="10" label="IDC_CONTENT_CONTEXT_COPYIMAGELOCATION"/>
-  <int value="11" label="IDC_CONTENT_CONTEXT_COPYAVLOCATION"/>
-  <int value="12" label="IDC_CONTENT_CONTEXT_COPYIMAGE"/>
-  <int value="13" label="IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB"/>
-  <int value="14" label="IDC_CONTENT_CONTEXT_OPENAVNEWTAB"/>
-  <int value="15" label="IDC_CONTENT_CONTEXT_PLAYPAUSE"/>
-  <int value="16" label="IDC_CONTENT_CONTEXT_MUTE"/>
-  <int value="17" label="IDC_CONTENT_CONTEXT_LOOP"/>
-  <int value="18" label="IDC_CONTENT_CONTEXT_CONTROLS"/>
-  <int value="19" label="IDC_CONTENT_CONTEXT_ROTATECW"/>
-  <int value="20" label="IDC_CONTENT_CONTEXT_ROTATECCW"/>
-  <int value="21" label="IDC_BACK"/>
-  <int value="22" label="IDC_FORWARD"/>
-  <int value="23" label="IDC_SAVE_PAGE"/>
-  <int value="24" label="IDC_RELOAD"/>
-  <int value="25" label="IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP"/>
-  <int value="26" label="IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP"/>
-  <int value="27" label="IDC_PRINT"/>
-  <int value="28" label="IDC_VIEW_SOURCE"/>
-  <int value="29" label="IDC_CONTENT_CONTEXT_INSPECTELEMENT"/>
-  <int value="30" label="IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE"/>
-  <int value="31" label="IDC_CONTENT_CONTEXT_VIEWPAGEINFO"/>
-  <int value="32" label="IDC_CONTENT_CONTEXT_TRANSLATE"/>
-  <int value="33" label="IDC_CONTENT_CONTEXT_RELOADFRAME"/>
-  <int value="34" label="IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE"/>
-  <int value="35" label="IDC_CONTENT_CONTEXT_VIEWFRAMEINFO"/>
-  <int value="36" label="IDC_CONTENT_CONTEXT_UNDO"/>
-  <int value="37" label="IDC_CONTENT_CONTEXT_REDO"/>
-  <int value="38" label="IDC_CONTENT_CONTEXT_CUT"/>
-  <int value="39" label="IDC_CONTENT_CONTEXT_COPY"/>
-  <int value="40" label="IDC_CONTENT_CONTEXT_PASTE"/>
-  <int value="41" label="IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE"/>
-  <int value="42" label="IDC_CONTENT_CONTEXT_DELETE"/>
-  <int value="43" label="IDC_CONTENT_CONTEXT_SELECTALL"/>
-  <int value="44" label="IDC_CONTENT_CONTEXT_SEARCHWEBFOR"/>
-  <int value="45" label="IDC_CONTENT_CONTEXT_GOTOURL"/>
-  <int value="46" label="IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS"/>
-  <int value="47" label="IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS"/>
-  <int value="48" label="IDC_CONTENT_CONTEXT_ADDSEARCHENGINE"/>
-  <int value="49" label="IDC_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES"/>
-  <int value="50" label="IDC_CONTENT_CONTEXT_SPEECH_INPUT_ABOUT"/>
-  <int value="51" label="IDC_SPEECH_INPUT_MENU"/>
-  <int value="52" label="IDC_CONTENT_CONTEXT_OPENLINKWITH"/>
-  <int value="53" label="IDC_CHECK_SPELLING_WHILE_TYPING"/>
-  <int value="54" label="IDC_SPELLCHECK_MENU"/>
-  <int value="55" label="IDC_CONTENT_CONTEXT_SPELLING_TOGGLE"/>
-  <int value="56" label="IDC_SPELLCHECK_LANGUAGES_FIRST"/>
-  <int value="57" label="IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE"/>
-  <int value="58" label="IDC_SPELLCHECK_SUGGESTION"/>
-  <int value="59" label="IDC_SPELLCHECK_ADD_TO_DICTIONARY"/>
-  <int value="60" label="IDC_SPELLPANEL_TOGGLE"/>
-  <int value="61" label="IDC_CONTENT_CONTEXT_OPENORIGINALIMAGENEWTAB"/>
-  <int value="62" label="IDC_WRITING_DIRECTION_MENU"/>
-  <int value="63" label="IDC_WRITING_DIRECTION_DEFAULT"/>
-  <int value="64" label="IDC_WRITING_DIRECTION_LTR"/>
-  <int value="65" label="IDC_WRITING_DIRECTION_RTL"/>
-  <int value="66" label="IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE"/>
-  <int value="67" label="IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD"/>
-  <int value="68" label="IDC_ROUTE_MEDIA"/>
-  <int value="69" label="IDC_CONTENT_CONTEXT_COPYLINKTEXT"/>
-  <int value="70" label="IDC_CONTENT_CONTEXT_OPENLINKINPROFILE"/>
-  <int value="71" label="IDC_OPEN_LINK_IN_PROFILE_FIRST"/>
-  <int value="72" label="IDC_CONTENT_CONTEXT_GENERATEPASSWORD"/>
-  <int value="73" label="IDC_SPELLCHECK_MULTI_LINGUAL"/>
-  <int value="74" label="IDC_CONTENT_CONTEXT_OPEN_WITH1"/>
-  <int value="75" label="IDC_CONTENT_CONTEXT_OPEN_WITH2"/>
-  <int value="76" label="IDC_CONTENT_CONTEXT_OPEN_WITH3"/>
-  <int value="77" label="IDC_CONTENT_CONTEXT_OPEN_WITH4"/>
-  <int value="78" label="IDC_CONTENT_CONTEXT_OPEN_WITH5"/>
-  <int value="79" label="IDC_CONTENT_CONTEXT_OPEN_WITH6"/>
-  <int value="80" label="IDC_CONTENT_CONTEXT_OPEN_WITH7"/>
-  <int value="81" label="IDC_CONTENT_CONTEXT_OPEN_WITH8"/>
-  <int value="82" label="IDC_CONTENT_CONTEXT_OPEN_WITH9"/>
-  <int value="83" label="IDC_CONTENT_CONTEXT_OPEN_WITH10"/>
-  <int value="84" label="IDC_CONTENT_CONTEXT_OPEN_WITH11"/>
-  <int value="85" label="IDC_CONTENT_CONTEXT_OPEN_WITH12"/>
-  <int value="86" label="IDC_CONTENT_CONTEXT_OPEN_WITH13"/>
-  <int value="87" label="IDC_CONTENT_CONTEXT_OPEN_WITH14"/>
-  <int value="88" label="IDC_CONTENT_CONTEXT_EXIT_FULLSCREEN"/>
-</enum>
-
-<enum name="ReportProcessingResult" type="int">
-  <int value="0" label="Success">A report was created and uploaded</int>
-  <int value="1" label="Suppressed">
-    A report was not uploaded because the CSD Whitelist killswitch was present
-  </int>
-  <int value="2" label="InvalidRequest">
-    A report was not uploaded because it could not be serialized
-  </int>
-  <int value="3" label="Cancelled">
-    A report upload was cancelled due to service shutdown
-  </int>
-  <int value="4" label="RequestFailed">A report upload failed</int>
-  <int value="5" label="InvalidResponse">
-    The response from a report upload was invalid
-  </int>
-  <int value="6" label="NoDownload">
-    A report was not uploaded because no binary download was found to report
-  </int>
-</enum>
-
-<enum name="RequestAction" type="int">
-  <int value="0" label="CANCEL"/>
-  <int value="1" label="REDIRECT"/>
-  <int value="2" label="MODIFY_REQUEST_HEADERS"/>
-  <int value="3" label="MODIFY_RESPONSE_HEADERS"/>
-  <int value="4" label="SET_AUTH_CREDENTIALS"/>
-</enum>
-
-<enum name="RequestedImageMimeType" type="int">
-  <int value="0" label="Png"/>
-  <int value="1" label="Jpeg"/>
-  <int value="2" label="Webp"/>
-  <int value="3" label="Gif"/>
-  <int value="4" label="Bmp"/>
-  <int value="5" label="Ico"/>
-  <int value="6" label="Tiff"/>
-  <int value="7" label="Unknown"/>
-</enum>
-
-<enum name="RequestMediaKeySystemAccessStatus" type="int">
-  <int value="0" label="Requested"/>
-  <int value="1" label="Supported"/>
-</enum>
-
-<enum name="ResolutionCategory" type="int">
-  <int value="0" label="RESOLVE_SUCCESS"/>
-  <int value="1" label="RESOLVE_FAIL"/>
-  <int value="2" label="RESOLVE_SPECULATIVE_SUCCESS"/>
-  <int value="3" label="RESOLVE_SPECULATIVE_FAIL"/>
-</enum>
-
-<enum name="ResolutionUnspecWasteCategory" type="int">
-  <int value="0" label="AF_WASTE_IPV4_ONLY">
-    Running in a IPv4-only configuration.  No waste.
-  </int>
-  <int value="1" label="AF_WASTE_CACHE_IPV4">
-    Cache contained an UNSPEC result for this IPv4 lookup.  Waste.
-  </int>
-  <int value="2" label="AF_WASTE_CACHE_UNSPEC">
-    Cache contained an IPv4 result for this UNSPEC lookup.  Waste.
-  </int>
-  <int value="3" label="AF_WASTE_JOB_IPV4">
-    Job pool contained an UNSPEC job for this IPv4 lookup.  Waste.
-  </int>
-  <int value="4" label="AF_WASTE_JOB_UNSPEC">
-    Job pool contained an IPv4 job for this UNSPEC lookup.  Waste.
-  </int>
-  <int value="5" label="AF_WASTE_NONE_IPV4">
-    A new job was needed for this IPv4 lookup.  No waste.
-  </int>
-  <int value="6" label="AF_WASTE_NONE_UNSPEC">
-    A new job was needed for this UNSPEC lookup.  No waste.
-  </int>
-</enum>
-
-<enum name="ResourceHasClient" type="int">
-  <int value="0" label="No client"/>
-  <int value="1" label="Has client"/>
-</enum>
-
-<enum name="ResourceLoaderExpectedContentSizeResult" type="int">
-  <int value="0" label="EQ_RESPONSE_BODY"/>
-  <int value="1" label="EQ_RESPONSE_BODY_GT_EQ_BUFFER_SIZE"/>
-  <int value="2" label="GT_EQ_BUFFER_SIZE"/>
-  <int value="3" label="LT_RESPONSE_BODY"/>
-  <int value="4" label="GT_RESPONSE_BODY"/>
-  <int value="5" label="UNKNOWN"/>
-</enum>
-
-<enum name="ResourceLoaderInliningStatus" type="int">
-  <int value="0" label="Applicable"/>
-  <int value="1" label="EarlyAllocation"/>
-  <int value="2" label="UnknownContentLength"/>
-  <int value="3" label="LargeContent"/>
-  <int value="4" label="HasTransferEncoding"/>
-  <int value="5" label="HasContentEncoding"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorMainFrameRequestStats" type="int">
-  <int value="0" label="MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS"/>
-  <int value="1" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS"/>
-  <int value="2" label="MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS"/>
-  <int value="3" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS"/>
-  <int value="4" label="MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES"/>
-  <int value="5" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorNavigationEvent" type="int">
-  <int value="0" label="NAVIGATION_EVENT_REQUEST_STARTED"/>
-  <int value="1" label="NAVIGATION_EVENT_REQUEST_REDIRECTED"/>
-  <int value="2" label="NAVIGATION_EVENT_REQUEST_REDIRECTED_EMPTY_URL"/>
-  <int value="3" label="NAVIGATION_EVENT_REQUEST_EXPIRED"/>
-  <int value="4" label="NAVIGATION_EVENT_RESPONSE_STARTED"/>
-  <int value="5" label="NAVIGATION_EVENT_ONLOAD"/>
-  <int value="6" label="NAVIGATION_EVENT_ONLOAD_EMPTY_URL"/>
-  <int value="7" label="NAVIGATION_EVENT_ONLOAD_UNTRACKED_URL"/>
-  <int value="8" label="NAVIGATION_EVENT_ONLOAD_TRACKED_URL"/>
-  <int value="9" label="NAVIGATION_EVENT_SHOULD_TRACK_URL"/>
-  <int value="10" label="NAVIGATION_EVENT_SHOULD_NOT_TRACK_URL"/>
-  <int value="11" label="NAVIGATION_EVENT_URL_TABLE_FULL"/>
-  <int value="12" label="NAVIGATION_EVENT_HAVE_PREDICTIONS_FOR_URL"/>
-  <int value="13" label="NAVIGATION_EVENT_NO_PREDICTIONS_FOR_URL"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorNavigationStatus" type="int">
-  <int value="0" label="NAVIGATION_STATUS_COMPLETE"/>
-  <int value="1" label="NAVIGATION_STATUS_COMPLETE_ABANDONED"/>
-  <int value="2" label="NAVIGATION_STATUS_ABANDONED"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorNetworkType" type="int">
-  <int value="-2" label="CONNECTION_ALL"/>
-  <int value="-1" label="CONNECTION_CELLULAR"/>
-  <int value="0" label="CONNECTION_UNKNOWN"/>
-  <int value="1" label="CONNECTION_ETHERNET"/>
-  <int value="2" label="CONNECTION_WIFI"/>
-  <int value="3" label="CONNECTION_2G"/>
-  <int value="4" label="CONNECTION_3G"/>
-  <int value="5" label="CONNECTION_4G"/>
-  <int value="6" label="CONNECTION_NONE"/>
-  <int value="7" label="CONNECTION_BLUETOOTH"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorRedirectStatus" type="int">
-  <int value="0" label="NO_REDIRECT"/>
-  <int value="1" label="NO_REDIRECT_BUT_PREDICTED"/>
-  <int value="2" label="REDIRECT_NOT_PREDICTED"/>
-  <int value="3" label="REDIRECT_WRONG_PREDICTED"/>
-  <int value="4" label="REDIRECT_CORRECTLY_PREDICTED"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorReportingEvent" type="int">
-  <int value="0" label="REPORTING_EVENT_ALL_HISTORY_CLEARED"/>
-  <int value="1" label="REPORTING_EVENT_PARTIAL_HISTORY_CLEARED"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorRequestStats" type="int">
-  <int value="0" label="REQUEST_STATS_TOTAL_RESPONSES"/>
-  <int value="1" label="REQUEST_STATS_TOTAL_PROCESSED_RESPONSES"/>
-  <int value="2" label="REQUEST_STATS_NO_RESOURCE_REQUEST_INFO"/>
-  <int value="3" label="REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO"/>
-</enum>
-
-<enum name="ResourcePrefetchPredictorResourceStatus" type="int">
-  <int value="0" label="RESOURCE_STATUS_HANDLED"/>
-  <int value="1" label="RESOURCE_STATUS_NOT_HTTP_PAGE"/>
-  <int value="2" label="RESOURCE_STATUS_NOT_HTTP_RESOURCE"/>
-  <int value="4" label="RESOURCE_STATUS_UNSUPPORTED_MIME_TYPE"/>
-  <int value="8" label="RESOURCE_STATUS_NOT_GET"/>
-  <int value="16" label="RESOURCE_STATUS_URL_TOO_LONG"/>
-  <int value="32" label="RESOURCE_STATUS_NOT_CACHEABLE"/>
-  <int value="64" label="RESOURCE_STATUS_HEADERS_MISSING"/>
-</enum>
-
-<enum name="ResourceReporterCpuUsage" type="int">
-  <int value="0" label="0-10%"/>
-  <int value="1" label="10%-30%"/>
-  <int value="2" label="30%-60%"/>
-  <int value="4" label="&gt;60%"/>
-</enum>
-
-<enum name="ResourceReporterMemoryUsage" type="int">
-  <int value="0" label="0-200MB"/>
-  <int value="1" label="200MB-400MB"/>
-  <int value="2" label="400MB-600MB"/>
-  <int value="4" label="600MB-800MB"/>
-  <int value="8" label="800MB-1GB"/>
-  <int value="16" label="&gt;1GB."/>
-</enum>
-
-<enum name="ResourceType" type="int">
-  <int value="0" label="Main resource"/>
-  <int value="1" label="Image"/>
-  <int value="2" label="CSSS"/>
-  <int value="3" label="Script"/>
-  <int value="4" label="Font"/>
-  <int value="5" label="Raw"/>
-  <int value="6" label="SVG"/>
-  <int value="7" label="XSL"/>
-  <int value="8" label="Link prefetch"/>
-  <int value="9" label="Link subresource"/>
-  <int value="10" label="Text track"/>
-  <int value="11" label="ImportResource"/>
-  <int value="12" label="Media"/>
-  <int value="13" label="Manifest"/>
-</enum>
-
-<enum name="RestoredCachedStyleSheet" type="int">
-  <int value="0" label="No usable cache found"/>
-  <int value="1" label="Cached StyleSheetContents was reused"/>
-</enum>
-
-<enum name="RevalidationPolicy" type="int">
-  <int value="0" label="Use"/>
-  <int value="1" label="Revalidate"/>
-  <int value="2" label="Reload"/>
-  <int value="3" label="Load"/>
-</enum>
-
-<enum name="RunningMode" type="int">
-  <obsolete>
-    Removed 9/2016.
-  </obsolete>
-  <int value="0" label="Document Mode"/>
-  <int value="1" label="Tabbed Mode"/>
-</enum>
-
-<enum name="SadTabEvent" type="int">
-  <int value="0" label="Displayed"/>
-  <int value="1" label="Button clicked"/>
-  <int value="2" label="Learn more clicked"/>
-</enum>
-
-<enum name="SadTabKind" type="int">
-  <int value="0" label="Crash (Aw, Snap!)"/>
-  <int value="1" label="Kill (He's dead, Jim!)"/>
-</enum>
-
-<enum name="SafeBrowsingAttributionResultTypes" type="int">
-  <int value="1" label="SUCCESS"/>
-  <int value="2" label="SUCCESS_LANDING_PAGE"/>
-  <int value="3" label="SUCCESS_LANDING_REFERRER"/>
-  <int value="4" label="INVALID_URL"/>
-  <int value="5" label="NAVIGATION_EVENT_NOT_FOUND"/>
-</enum>
-
-<enum name="SafeBrowsingParseV4HashResult" type="int">
-  <int value="0" label="PARSE_FROM_STRING_ERROR"/>
-  <int value="1" label="UNEXPECTED_THREAT_ENTRY_TYPE_ERROR"/>
-  <int value="2" label="UNEXPECTED_THREAT_TYPE_ERROR"/>
-  <int value="3" label="UNEXPECTED_PLATFORM_TYPE_ERROR"/>
-  <int value="4" label="NO_METADATA_ERROR"/>
-  <int value="5" label="INCONSISTENT_THREAT_TYPE_ERROR"/>
-  <int value="6" label="UNEXPECTED_METADATA_VALUE_ERROR"/>
-  <int value="7" label="NO_THREAT_ERROR"/>
-</enum>
-
-<enum name="SafeBrowsingParseV4UpdateResult" type="int">
-  <int value="0" label="PARSE_FROM_STRING_ERROR"/>
-  <int value="1" label="NO_PLATFORM_TYPE_ERROR"/>
-  <int value="2" label="NO_THREAT_ENTRY_TYPE_ERROR"/>
-  <int value="3" label="NO_THREAT_TYPE_ERROR"/>
-  <int value="4" label="NO_STATE_ERROR"/>
-</enum>
-
-<enum name="SafeBrowsingResponse" type="int">
-  <int value="0" label="NOT_BLACKLISTED"/>
-  <int value="1" label="TIMEOUT"/>
-  <int value="2" label="BLACKLISTED"/>
-</enum>
-
-<enum name="SafeBrowsingV4ApplyUpdateResult" type="int">
-  <int value="0" label="APPLY_UPDATE_SUCCESS"/>
-  <int value="1" label="UNEXPECTED_APPLY_UPDATE_FAILURE"/>
-  <int value="2" label="PREFIX_SIZE_TOO_SMALL_FAILURE"/>
-  <int value="3" label="PREFIX_SIZE_TOO_LARGE_FAILURE"/>
-  <int value="4" label="ADDITIONS_SIZE_UNEXPECTED_FAILURE"/>
-  <int value="5" label="ADDITIONS_HAS_EXISTING_PREFIX_FAILURE"/>
-  <int value="6" label="UNEXPECTED_RESPONSE_TYPE_FAILURE"/>
-  <int value="7" label="REMOVALS_INDEX_TOO_LARGE_FAILURE"/>
-  <int value="8" label="RICE_DECODING_FAILURE"/>
-  <int value="9" label="UNEXPECTED_COMPRESSION_TYPE_ADDITIONS_FAILURE"/>
-  <int value="10" label="UNEXPECTED_COMPRESSION_TYPE_REMOVALS_FAILURE"/>
-  <int value="11" label="CHECKSUM_MISMATCH_FAILURE"/>
-</enum>
-
-<enum name="SafeBrowsingV4DecodeResult" type="int">
-  <int value="0" label="DECODE_SUCCESS"/>
-  <int value="1" label="DECODE_NO_MORE_ENTRIES_FAILURE"/>
-  <int value="2" label="DECODE_REQUESTED_TOO_MANY_BITS_FAILURE"/>
-  <int value="3" label="DECODE_RAN_OUT_OF_BITS_FAILURE"/>
-  <int value="4" label="NUM_ENTRIES_NEGATIVE_FAILURE"/>
-  <int value="5" label="RICE_PARAMETER_NON_POSITIVE_FAILURE"/>
-  <int value="6" label="ENCODED_DATA_UNEXPECTED_EMPTY_FAILURE"/>
-  <int value="7" label="DECODED_INTEGER_OVERFLOW_FAILURE"/>
-</enum>
-
-<enum name="SafeBrowsingV4FullHashCacheResult" type="int">
-  <int value="0" label="FULL_HASH_CACHE_MISS"/>
-  <int value="1" label="FULL_HASH_CACHE_HIT"/>
-  <int value="2" label="FULL_HASH_NEGATIVE_CACHE_HIT"/>
-</enum>
-
-<enum name="SafeBrowsingV4GetHashCheckResult" type="int">
-  <int value="0" label="GET_HASH_CHECK_EMPTY"/>
-  <int value="1" label="GET_HASH_CHECK_HIT"/>
-  <int value="2" label="GET_HASH_CHECK_MISS"/>
-</enum>
-
-<enum name="SafeBrowsingV4OperationResult" type="int">
-  <int value="0" label="STATUS_200"/>
-  <int value="1" label="PARSE_ERROR (subset of STATUS_200)"/>
-  <int value="2" label="NETWORK_ERROR"/>
-  <int value="3" label="HTTP_ERROR"/>
-  <int value="4" label="BACKOFF_ERROR"/>
-  <int value="5" label="MIN_WAIT_DURATION_ERROR"/>
-  <int value="6" label="ALREADY_PENDING_ERROR"/>
-</enum>
-
-<enum name="SafeBrowsingV4StoreReadResult" type="int">
-  <int value="0" label="READ_SUCCESS"/>
-  <int value="1" label="UNEXPECTED_READ_FAILURE"/>
-  <int value="2" label="FILE_UNREADABLE_FAILURE"/>
-  <int value="3" label="FILE_EMPTY_FAILURE"/>
-  <int value="4" label="PROTO_PARSING_FAILURE"/>
-  <int value="5" label="UNEXPECTED_MAGIC_NUMBER_FAILURE"/>
-  <int value="6" label="FILE_VERSION_TOO_LOW_FAILURE"/>
-  <int value="7" label="HASH_PREFIX_INFO_MISSING_FAILURE"/>
-  <int value="8" label="HASH_PREFIX_MAP_GENERATION_FAILURE"/>
-</enum>
-
-<enum name="SafeBrowsingV4StoreWriteResult" type="int">
-  <int value="0" label="WRITE_SUCCESS"/>
-  <int value="1" label="UNEXPECTED_WRITE_FAILURE"/>
-  <int value="2" label="INVALID_RESPONSE_TYPE_FAILURE"/>
-  <int value="3" label="UNEXPECTED_BYTES_WRITTEN_FAILURE"/>
-  <int value="4" label="UNABLE_TO_RENAME_FAILURE"/>
-</enum>
-
-<enum name="SavePasswordPromptResponseType" type="int">
-  <int value="0" label="NO_RESPONSE"/>
-  <int value="1" label="REMEMBER_PASSWORD"/>
-  <int value="2" label="DONT_REMEMBER_PASSWORD"/>
-</enum>
-
-<enum name="SB2BloomFailure" type="int">
-  <obsolete>
-    Bloom filter support deleted in October 2012.
-  </obsolete>
-  <int value="0" label="READ_OPEN"/>
-  <int value="1" label="READ_VERSION"/>
-  <int value="2" label="READ_NUM_KEYS"/>
-  <int value="3" label="READ_KEY"/>
-  <int value="4" label="READ_DATA_MINSIZE"/>
-  <int value="5" label="READ_DATA_MAXSIZE"/>
-  <int value="6" label="READ_DATA_SHORT"/>
-  <int value="7" label="READ_DATA"/>
-</enum>
-
-<enum name="SB2BloomFilterFalsePositives" type="int">
-  <obsolete>
-    Bloom filter support deleted in October 2012.
-  </obsolete>
-  <int value="0" label="ALL_MISSES"/>
-  <int value="1" label="FALSE_POSITIVE_MISSES"/>
-</enum>
-
-<enum name="SB2DatabaseFailure" type="int">
-  <int value="0" label="FAILURE_DATABASE_CORRUPT"/>
-  <int value="1" label="FAILURE_DATABASE_CORRUPT_HANDLER"/>
-  <int value="2" label="FAILURE_BROWSE_DATABASE_UPDATE_BEGIN"/>
-  <int value="3" label="FAILURE_BROWSE_DATABASE_UPDATE_FINISH"/>
-  <int value="4" label="FAILURE_DATABASE_FILTER_MISSING_OBSOLETE"/>
-  <int value="5" label="FAILURE_DATABASE_FILTER_READ_OBSOLETE"/>
-  <int value="6" label="FAILURE_DATABASE_FILTER_WRITE_OBSOLETE"/>
-  <int value="7" label="FAILURE_DATABASE_FILTER_DELETE"/>
-  <int value="8" label="FAILURE_DATABASE_STORE_MISSING"/>
-  <int value="9" label="FAILURE_DATABASE_STORE_DELETE"/>
-  <int value="10" label="FAILURE_DOWNLOAD_DATABASE_UPDATE_BEGIN"/>
-  <int value="11" label="FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH"/>
-  <int value="12" label="FAILURE_WHITELIST_DATABASE_UPDATE_BEGIN"/>
-  <int value="13" label="FAILURE_WHITELIST_DATABASE_UPDATE_FINISH"/>
-  <int value="14" label="FAILURE_BROWSE_PREFIX_SET_READ"/>
-  <int value="15" label="FAILURE_BROWSE_PREFIX_SET_WRITE"/>
-  <int value="16" label="FAILURE_BROWSE_PREFIX_SET_DELETE"/>
-  <int value="17" label="FAILURE_EXTENSION_BLACKLIST_UPDATE_BEGIN"/>
-  <int value="18" label="FAILURE_EXTENSION_BLACKLIST_UPDATE_FINISH"/>
-  <int value="19" label="FAILURE_EXTENSION_BLACKLIST_DELETE"/>
-  <int value="20" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_BEGIN"/>
-  <int value="21" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH"/>
-  <int value="22" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_DELETE"/>
-  <int value="23" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ"/>
-  <int value="24" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE"/>
-  <int value="25" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE"/>
-  <int value="26" label="FAILURE_IP_BLACKLIST_UPDATE_BEGIN"/>
-  <int value="27" label="FAILURE_IP_BLACKLIST_UPDATE_FINISH"/>
-  <int value="28" label="FAILURE_IP_BLACKLIST_UPDATE_INVALID"/>
-  <int value="29" label="FAILURE_IP_BLACKLIST_DELETE"/>
-  <int value="30" label="FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN"/>
-  <int value="31" label="FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH"/>
-  <int value="32" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ"/>
-  <int value="33" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE"/>
-  <int value="34" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE"/>
-  <int value="35" label="FAILURE_RESOURCE_BLACKLIST_UPDATE_BEGIN"/>
-  <int value="36" label="FAILURE_RESOURCE_BLACKLIST_UPDATE_FINISH"/>
-  <int value="37" label="FAILURE_RESOURCE_BLACKLIST_DELETE"/>
-  <int value="38" label="FAILURE_MODULE_WHITELIST_DELETE"/>
-</enum>
-
-<enum name="SB2DownloadChecks" type="int">
-  <int value="0" label="URL_CHECKS_TOTAL"/>
-  <int value="1" label="URL_CHECKS_CANCELED"/>
-  <int value="2" label="URL_CHECKS_MALWARE"/>
-  <int value="3" label="HASH_CHECKS_TOTAL"/>
-  <int value="4" label="HASH_CHECKS_MALWARE"/>
-</enum>
-
-<enum name="SB2FilterLoad" type="int">
-  <int value="0" label="ALL"/>
-  <int value="1" label="PREFIX_SET"/>
-  <int value="2" label="BLOOM_FILTER"/>
-</enum>
-
-<enum name="SB2FormatEvent" type="int">
-  <summary>
-    Track information for various error cases in the safe-browsing store.
-  </summary>
-  <int value="0" label="FILE_CORRUPT">Store corruption detected</int>
-  <int value="1" label="SQLITE_CORRUPT">
-    SQLite store orruption detected (obsolete)
-  </int>
-  <int value="2" label="FOUND_SQLITE">SQLite store found (obsolete)</int>
-  <int value="3" label="FOUND_UNKNOWN">Store format unknown at open</int>
-  <int value="4" label="SQLITE_DELETED">
-    Deleted SQLite-format store (obsolete)
-  </int>
-  <int value="5" label="SQLITE_DELETE_FAILED">
-    Deletion of SQLite-format store failed (obsolete)
-  </int>
-  <int value="6" label="SQLITE_DELETED_ORIGINAL">
-    Deleted pre-release SQLite store (obsolete)
-  </int>
-  <int value="7" label="SQLITE_DELETE_ORIGINAL_FAILED">
-    Deletion of pre-release SQLite store failed (obsolete)
-  </int>
-  <int value="8" label="VALIDITY_CHECKSUM_FAILURE">
-    Failed explicit checksum check on failed update from server
-  </int>
-  <int value="9" label="UPDATE_CHECKSUM_FAILURE">
-    Failed checksum check while merging new data into store
-  </int>
-  <int value="10" label="HEADER_CHECKSUM_FAILURE">
-    Failed header checksum check when opening store
-  </int>
-  <int value="11" label="FOUND_DEPRECATED">
-    Store with valid magic number has deprecated version number
-  </int>
-</enum>
-
-<enum name="SB2GetHashResult" type="int">
-  <int value="0" label="STATUS_200"/>
-  <int value="1" label="STATUS_204"/>
-  <int value="2" label="FULL_HASH_EMPTY (sum of STATUS_204, *_ERROR)"/>
-  <int value="3" label="FULL_HASH_HIT (subset of STATUS_200)"/>
-  <int value="4" label="FULL_HASH_MISS (subset of STATUS_200)"/>
-  <int value="5" label="PARSE_ERROR (subset of STATUS_200)"/>
-  <int value="6" label="NETWORK_ERROR"/>
-  <int value="7" label="HTTP_ERROR"/>
-  <int value="8" label="BACKOFF_ERROR"/>
-</enum>
-
-<enum name="SB2InterstitialAction" type="int">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <int value="0" label="MALWARE_SHOW"/>
-  <int value="1" label="MALWARE_DONT_PROCEED"/>
-  <int value="2" label="MALWARE_FORCED_DONT_PROCEED"/>
-  <int value="3" label="MALWARE_PROCEED"/>
-  <int value="4" label="MULTIPLE_SHOW"/>
-  <int value="5" label="MULTIPLE_DONT_PROCEED"/>
-  <int value="6" label="MULTIPLE_FORCED_DONT_PROCEED"/>
-  <int value="7" label="MULTIPLE_PROCEED"/>
-  <int value="8" label="PHISHING_SHOW"/>
-  <int value="9" label="PHISHING_DONT_PROCEED"/>
-  <int value="10" label="PHISHING_FORCED_DONT_PROCEED"/>
-  <int value="11" label="PHISHING_PROCEED"/>
-  <int value="12" label="MALWARE_SHOW_ADVANCED"/>
-  <int value="13" label="MULTIPLE_SHOW_ADVANCED"/>
-  <int value="14" label="PHISHING_SHOW_ADVANCED"/>
-</enum>
-
-<enum name="SB2InterstitialActionDetails" type="int">
-  <obsolete>
-    Deprecated 9/2014.
-  </obsolete>
-  <int value="0" label="MALWARE_SHOW_NEW_SITE"/>
-  <int value="1" label="MALWARE_PROCEED_NEW_SITE"/>
-  <int value="2" label="MALWARE_SHOW_CROSS_SITE"/>
-  <int value="3" label="MALWARE_PROCEED_CROSS_SITE"/>
-  <int value="4" label="PHISHING_SHOW_NEW_SITE"/>
-  <int value="5" label="PHISHING_PROCEED_NEW_SITE"/>
-  <int value="6" label="PHISHING_SHOW_CROSS_SITE"/>
-  <int value="7" label="PHISHING_PROCEED_CROSS_SITE"/>
-</enum>
-
-<enum name="SB2PrefixSetEvent" type="int">
-  <obsolete>
-    Deprecated 9/2012. No longer generated.
-  </obsolete>
-  <int value="0" label="PREFIX_SET_HIT"/>
-  <int value="1" label="BLOOM_HIT"/>
-  <int value="2" label="BLOOM_MISS_PREFIX_SET_HIT"/>
-  <int value="3" label="BLOOM_MISS_PREFIX_HIT_INVALID"/>
-  <int value="4" label="GETPREFIXES_BROKEN"/>
-  <int value="5" label="GETPREFIXES_BROKEN_SIZE"/>
-  <int value="6" label="GETPREFIXES_FIRST_BROKEN"/>
-  <int value="7" label="SBPREFIX_WAS_BROKEN"/>
-  <int value="8" label="GETPREFIXES_BROKEN_SORTING"/>
-  <int value="9" label="GETPREFIXES_BROKEN_DUPLICATION"/>
-  <int value="10" label="GETPREFIX_UNSORTED_IS_DELTA"/>
-  <int value="11" label="GETPREFIX_UNSORTED_IS_INDEX"/>
-  <int value="12" label="CREATE_PREFIX_SET_CHECKSUM"/>
-  <int value="13" label="CREATE_BLOOM_FILTER_CHECKSUM"/>
-  <int value="14" label="CREATE_ADD_PREFIXES_CHECKSUM"/>
-  <int value="15" label="CREATE_PREFIXES_CHECKSUM"/>
-  <int value="16" label="GET_PREFIXES_CHECKSUM"/>
-  <int value="17" label="MISMATCH_PREFIX_SET_CHECKSUM"/>
-  <int value="18" label="MISMATCH_BLOOM_FILTER_CHECKSUM"/>
-  <int value="19" label="BLOOM_MISS_PREFIX_HIT"/>
-</enum>
-
-<enum name="SB2RemoteCallResult" type="int">
-  <int value="0" label="INTERNAL_ERROR"/>
-  <int value="1" label="TIMEOUT"/>
-  <int value="2" label="SAFE"/>
-  <int value="3" label="UNSAFE"/>
-  <int value="4" label="JSON_EMPTY"/>
-  <int value="5" label="JSON_FAILED_TO_PARSE"/>
-  <int value="6" label="JSON_UNKNOWN_THREAT"/>
-  <int value="7" label="UNSUPPORTED"/>
-</enum>
-
-<enum name="SB2RemoteCallThreatSubType" type="int">
-  <int value="0" label="No subtype added"/>
-  <int value="1" label="Potentially Harmful App Landing URL"/>
-  <int value="2" label="Potentially Harmful App Distribution URL"/>
-  <int value="3" label="Unknown"/>
-  <int value="4" label="Social Engineering Ads URL"/>
-  <int value="5" label="Social Engineering Landing URL"/>
-  <int value="6" label="Phishing URL"/>
-</enum>
-
-<enum name="SB2SideEffectFreeWhitelistStatus" type="int">
-  <int value="0" label="Enabled"/>
-  <int value="1" label="Disabled"/>
-</enum>
-
-<enum name="SB2UpdateResult" type="int">
-  <int value="0" label="FAIL"/>
-  <int value="1" label="SUCCESS"/>
-  <int value="2" label="BACKUP_CONNECT_FAIL"/>
-  <int value="3" label="BACKUP_CONNECT_SUCCESS"/>
-  <int value="4" label="BACKUP_HTTP_FAIL"/>
-  <int value="5" label="BACKUP_HTTP_SUCCESS"/>
-  <int value="6" label="BACKUP_NETWORK_FAIL"/>
-  <int value="7" label="BACKUP_NETWORK_SUCCESS"/>
-</enum>
-
-<enum name="SBClientDetectionPreClassificationCheckFail" type="int">
-  <int value="0" label="PROXY_FETCH"/>
-  <int value="1" label="PRIVATE_IP"/>
-  <int value="2" label="OFF_THE_RECORD"/>
-  <int value="3" label="MATCH_CSD_WHITELIST"/>
-  <int value="4" label="TOO_MANY_REPORTS"/>
-  <int value="5" label="UNSUPPORTED_MIME_TYPE"/>
-  <int value="6" label="NO_DATABASE_MANAGER"/>
-  <int value="7" label="KILLSWITCH"/>
-  <int value="8" label="CANCEL"/>
-  <int value="9" label="RESULT_FROM_CACHE"/>
-  <int value="10" label="NOT_HTTP_URL"/>
-</enum>
-
-<enum name="SBClientDownloadCheckDownloadStats" type="int">
-  <int value="0" label="INVALID_URL"/>
-  <int value="1" label="SB_DISABLED"/>
-  <int value="2" label="WHITELISTED_URL"/>
-  <int value="3" label="WHITELISTED_REFERRER"/>
-  <int value="4" label="INVALID_REQUEST_PROTO"/>
-  <int value="5" label="SERVER_PING_FAILED"/>
-  <int value="6" label="INVALID_RESPONSE_PROTO"/>
-  <int value="7" label="NOT_BINARY_FILE"/>
-  <int value="8" label="REQUEST_CANCELED"/>
-  <int value="9" label="DOWNLOAD_DANGEROUS"/>
-  <int value="10" label="DOWNLOAD_SAFE"/>
-  <int value="11" label="EMPTY_URL_CHAIN"/>
-  <int value="12" label="HTTPS_URL (deprecated)"/>
-  <int value="13" label="PING_DISABLED"/>
-  <int value="14" label="TRUSTED_EXECUTABLE"/>
-  <int value="15" label="OS_NOT_SUPPORTED"/>
-  <int value="16" label="DOWNLOAD_UNCOMMON"/>
-  <int value="17" label="DOWNLOAD_NOT_SUPPORTED"/>
-  <int value="18" label="INVALID_RESPONSE_VERDICT"/>
-  <int value="19" label="ARCHIVE_WITHOUT_BINARIES"/>
-  <int value="20" label="DOWNLOAD_DANGEROUS_HOST"/>
-  <int value="21" label="DOWNLOAD_POTENTIALLY_UNWANTED"/>
-  <int value="22" label="UNSUPPORTED_URL_SCHEME"/>
-  <int value="23" label="MANUAL_BLACKLIST"/>
-  <int value="24" label="LOCAL_FILE"/>
-  <int value="25" label="REMOTE_FILE"/>
-  <int value="26" label="SAMPLED_UNSUPPORTED_FILE"/>
-  <int value="27" label="VERDICT_UNKNOWN"/>
-</enum>
-
-<enum name="SBClientDownloadCheckResult" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="SAFE"/>
-  <int value="2" label="DANGEROUS"/>
-  <int value="3" label="UNCOMMON"/>
-  <int value="4" label="DANGEROUS_HOST"/>
-  <int value="5" label="POTENTIALLY_UNWANTED"/>
-</enum>
-
-<enum name="SBClientDownloadExtensions" type="int">
-  <int value="-1" label="File extension not categorized"/>
-  <int value="0" label="EXE"/>
-  <int value="1" label="MSI"/>
-  <int value="2" label="CAB"/>
-  <int value="3" label="SYS"/>
-  <int value="4" label="SCR"/>
-  <int value="5" label="DRV"/>
-  <int value="6" label="BAT"/>
-  <int value="7" label="ZIP"/>
-  <int value="8" label="RAR"/>
-  <int value="9" label="DLL"/>
-  <int value="10" label="PIF"/>
-  <int value="11" label="COM"/>
-  <int value="12" label="JAR"/>
-  <int value="13" label="CLASS"/>
-  <int value="14" label="PDF"/>
-  <int value="15" label="VB"/>
-  <int value="16" label="REG"/>
-  <int value="17" label="GRP"/>
-  <int value="18" label="OTHER"/>
-  <int value="19" label="CRX"/>
-  <int value="20" label="APK"/>
-  <int value="21" label="DMG"/>
-  <int value="22" label="PKG"/>
-  <int value="23" label="TORRENT"/>
-  <int value="24" label="WEBSITE"/>
-  <int value="25" label="URL"/>
-  <int value="26" label="VBE"/>
-  <int value="27" label="VBS"/>
-  <int value="28" label="JS"/>
-  <int value="29" label="JSE"/>
-  <int value="30" label="MHT"/>
-  <int value="31" label="MHTML"/>
-  <int value="32" label="MSC"/>
-  <int value="33" label="MSP"/>
-  <int value="34" label="MST"/>
-  <int value="35" label="BAS"/>
-  <int value="36" label="HTA"/>
-  <int value="37" label="MSH"/>
-  <int value="38" label="MSH1"/>
-  <int value="39" label="MSH1XML"/>
-  <int value="40" label="MSH2"/>
-  <int value="41" label="MSH2XML"/>
-  <int value="42" label="MSHXML"/>
-  <int value="43" label="PS1"/>
-  <int value="44" label="PS1XML"/>
-  <int value="45" label="PS2"/>
-  <int value="46" label="PS2XML"/>
-  <int value="47" label="PSC1"/>
-  <int value="48" label="PSC2"/>
-  <int value="49" label="SCF"/>
-  <int value="50" label="SCT"/>
-  <int value="51" label="WSF"/>
-  <int value="52" label="7Z"/>
-  <int value="53" label="XZ"/>
-  <int value="54" label="GZ"/>
-  <int value="55" label="TGZ"/>
-  <int value="56" label="BZ2"/>
-  <int value="57" label="TAR"/>
-  <int value="58" label="ARJ"/>
-  <int value="59" label="LZH"/>
-  <int value="60" label="LHA"/>
-  <int value="61" label="WIM"/>
-  <int value="62" label="Z"/>
-  <int value="63" label="LZMA"/>
-  <int value="64" label="CPIO"/>
-  <int value="65" label="CMD"/>
-  <int value="66" label="APP"/>
-  <int value="67" label="OSX -- Not supported"/>
-  <int value="68" label="SWF"/>
-  <int value="69" label="SPL"/>
-  <int value="70" label="APPLICATION"/>
-  <int value="71" label="ASP"/>
-  <int value="72" label="ASX"/>
-  <int value="73" label="CFG"/>
-  <int value="74" label="CHI"/>
-  <int value="75" label="CHM"/>
-  <int value="76" label="CPL"/>
-  <int value="77" label="FXP"/>
-  <int value="78" label="HLP"/>
-  <int value="79" label="HTT"/>
-  <int value="80" label="INF"/>
-  <int value="81" label="INI"/>
-  <int value="82" label="INS"/>
-  <int value="83" label="ISP"/>
-  <int value="84" label="LNK"/>
-  <int value="85" label="LOCAL"/>
-  <int value="86" label="MANIFEST"/>
-  <int value="87" label="MAU"/>
-  <int value="88" label="MMC"/>
-  <int value="89" label="MOF"/>
-  <int value="90" label="OCX"/>
-  <int value="91" label="OPS"/>
-  <int value="92" label="PCD"/>
-  <int value="93" label="PLG"/>
-  <int value="94" label="PRF"/>
-  <int value="95" label="PRG"/>
-  <int value="96" label="PST"/>
-  <int value="97" label="CRT"/>
-  <int value="98" label="ADE"/>
-  <int value="99" label="ADP"/>
-  <int value="100" label="MAD"/>
-  <int value="101" label="MAF"/>
-  <int value="102" label="MAG"/>
-  <int value="103" label="MAM"/>
-  <int value="104" label="MAQ"/>
-  <int value="105" label="MAR"/>
-  <int value="106" label="MAS"/>
-  <int value="107" label="MAT"/>
-  <int value="108" label="MAV"/>
-  <int value="109" label="MAW"/>
-  <int value="110" label="MDA"/>
-  <int value="111" label="MDB"/>
-  <int value="112" label="MDE"/>
-  <int value="113" label="MDT"/>
-  <int value="114" label="MDW"/>
-  <int value="115" label="MDZ"/>
-  <int value="116" label="SHB"/>
-  <int value="117" label="SHS"/>
-  <int value="118" label="VSD"/>
-  <int value="119" label="VSMACROS"/>
-  <int value="120" label="VSS"/>
-  <int value="121" label="VST"/>
-  <int value="122" label="VSW"/>
-  <int value="123" label="WS"/>
-  <int value="124" label="WSC"/>
-  <int value="125" label="WSH"/>
-  <int value="126" label="XBAP"/>
-  <int value="127" label="XNK"/>
-  <int value="128" label="JNLP"/>
-  <int value="129" label="PL"/>
-  <int value="130" label="PY"/>
-  <int value="131" label="PYC"/>
-  <int value="132" label="PYW"/>
-  <int value="133" label="RB"/>
-  <int value="134" label="BASH"/>
-  <int value="135" label="CSH"/>
-  <int value="136" label="KSH"/>
-  <int value="137" label="SH"/>
-  <int value="138" label="SHAR"/>
-  <int value="139" label="TCSH"/>
-  <int value="140" label="COMMAND"/>
-  <int value="141" label="DEB"/>
-  <int value="142" label="RPM"/>
-  <int value="143" label="DEX"/>
-  <int value="144" label="APPREF_MS"/>
-  <int value="145" label="GADGET"/>
-  <int value="146" label="EFI"/>
-  <int value="147" label="FON"/>
-  <int value="148" label="BZIP2"/>
-  <int value="149" label="GZIP"/>
-  <int value="150" label="TAZ"/>
-  <int value="151" label="TBZ"/>
-  <int value="152" label="TBZ2"/>
-  <int value="153" label="PARTIAL"/>
-  <int value="154" label="SVG"/>
-  <int value="155" label="XML"/>
-  <int value="156" label="XRM_MS"/>
-  <int value="157" label="XSL"/>
-  <int value="158" label="ACTION"/>
-  <int value="159" label="BIN"/>
-  <int value="160" label="INX"/>
-  <int value="161" label="IPA -- Not supported"/>
-  <int value="162" label="ISU"/>
-  <int value="163" label="JOB"/>
-  <int value="164" label="OUT"/>
-  <int value="165" label="PAD -- Not supported"/>
-  <int value="166" label="PAF"/>
-  <int value="167" label="RGS"/>
-  <int value="168" label="U3P"/>
-  <int value="169" label="VBSCRIPT"/>
-  <int value="170" label="WORKFLOW"/>
-  <int value="171" label="001"/>
-  <int value="172" label="ACE"/>
-  <int value="173" label="ARC"/>
-  <int value="174" label="B64"/>
-  <int value="175" label="BALZ"/>
-  <int value="176" label="BHX"/>
-  <int value="177" label="BZ"/>
-  <int value="178" label="FAT"/>
-  <int value="179" label="HFS"/>
-  <int value="180" label="HQX"/>
-  <int value="181" label="ISO"/>
-  <int value="182" label="LPAQ1"/>
-  <int value="183" label="LPAQ5"/>
-  <int value="184" label="LPAQ8"/>
-  <int value="185" label="MIM"/>
-  <int value="186" label="NTFS"/>
-  <int value="187" label="PAQ8F"/>
-  <int value="188" label="PAQ8JD"/>
-  <int value="189" label="PAQ8L"/>
-  <int value="190" label="PAQ8O"/>
-  <int value="191" label="PEA"/>
-  <int value="192" label="PET"/>
-  <int value="193" label="PUP"/>
-  <int value="194" label="QUAD"/>
-  <int value="195" label="R00"/>
-  <int value="196" label="R01"/>
-  <int value="197" label="R02"/>
-  <int value="198" label="R03"/>
-  <int value="199" label="R04"/>
-  <int value="200" label="R05"/>
-  <int value="201" label="R06"/>
-  <int value="202" label="R07"/>
-  <int value="203" label="R08"/>
-  <int value="204" label="R09"/>
-  <int value="205" label="R10"/>
-  <int value="206" label="R11"/>
-  <int value="207" label="R12"/>
-  <int value="208" label="R13"/>
-  <int value="209" label="R14"/>
-  <int value="210" label="R15"/>
-  <int value="211" label="R16"/>
-  <int value="212" label="R17"/>
-  <int value="213" label="R18"/>
-  <int value="214" label="R19"/>
-  <int value="215" label="R20"/>
-  <int value="216" label="R21"/>
-  <int value="217" label="R22"/>
-  <int value="218" label="R23"/>
-  <int value="219" label="R24"/>
-  <int value="220" label="R25"/>
-  <int value="221" label="R26"/>
-  <int value="222" label="R27"/>
-  <int value="223" label="R28"/>
-  <int value="224" label="R29"/>
-  <int value="225" label="SLP"/>
-  <int value="226" label="SQUASHFS"/>
-  <int value="227" label="SWM"/>
-  <int value="228" label="TPZ"/>
-  <int value="229" label="TXZ"/>
-  <int value="230" label="TZ"/>
-  <int value="231" label="UDF"/>
-  <int value="232" label="UU"/>
-  <int value="233" label="UUE"/>
-  <int value="234" label="VHD"/>
-  <int value="235" label="VMDK"/>
-  <int value="236" label="WRC"/>
-  <int value="237" label="XAR"/>
-  <int value="238" label="XXE"/>
-  <int value="239" label="ZIPX"/>
-  <int value="240" label="ZPAQ"/>
-  <int value="241" label="RELS"/>
-  <int value="242" label="MSG"/>
-  <int value="243" label="EML"/>
-  <int value="244" label="RTF"/>
-  <int value="245" label="VHDX"/>
-  <int value="246" label="SEARCH_MS"/>
-  <int value="247" label="IMG"/>
-  <int value="248" label="SMI"/>
-  <int value="249" label="SPARSEBUNDLE"/>
-  <int value="250" label="SPARSEIMAGE"/>
-  <int value="251" label="CDR"/>
-  <int value="252" label="DMGPART"/>
-  <int value="253" label="DVDR"/>
-  <int value="254" label="DART"/>
-  <int value="255" label="DC42"/>
-  <int value="256" label="DISKCOPY42"/>
-  <int value="257" label="IMGPART"/>
-  <int value="258" label="NDIF"/>
-  <int value="259" label="UDIF"/>
-  <int value="260" label="TOAST"/>
-  <int value="261" label="RUN"/>
-  <int value="262" label="AD"/>
-  <int value="263" label="MPKG"/>
-  <int value="264" label="AS"/>
-  <int value="265" label="CPGZ"/>
-  <int value="266" label="PAX"/>
-  <int value="267" label="XIP"/>
-  <int value="268" label="DOCX"/>
-  <int value="269" label="DOCM"/>
-  <int value="270" label="DOTT"/>
-  <int value="271" label="DOTM"/>
-  <int value="272" label="DOCB"/>
-  <int value="273" label="XLSX"/>
-  <int value="274" label="XLSM"/>
-  <int value="275" label="XLTX"/>
-  <int value="276" label="XLTM"/>
-  <int value="277" label="PPTX"/>
-  <int value="278" label="PPTM"/>
-  <int value="279" label="POTX"/>
-  <int value="280" label="PPAM"/>
-  <int value="281" label="PPSX"/>
-  <int value="282" label="SLDX"/>
-  <int value="283" label="SLDM"/>
-</enum>
-
-<enum name="SBClientDownloadIsSignedBinary" type="int">
-  <int value="0" label="Unsigned"/>
-  <int value="1" label="Signed"/>
-</enum>
-
-<enum name="SBClientDownloadPPAPIDownloadRequestOutcome" type="int">
-  <int value="0" label="(unknown)"/>
-  <int value="1" label="Request destroyed before completion"/>
-  <int value="2" label="Unsupported file type"/>
-  <int value="3" label="Timed out"/>
-  <int value="4" label="Whitelisted URL"/>
-  <int value="5" label="Request was malformed"/>
-  <int value="6" label="Network request failed"/>
-  <int value="7" label="Response was malformed"/>
-  <int value="8" label="Succeeded"/>
-</enum>
-
-<enum name="SBClientMalwareSentReports" type="int">
-  <int value="0" label="Sent"/>
-  <int value="1" label="Hit limit"/>
-  <int value="2" label="Failed serialization"/>
-</enum>
-
-<enum name="SBClientPhishingCancelClassificationReason" type="int">
-  <int value="0" label="NAVIGATE_AWAY"/>
-  <int value="1" label="NAVIGATE_WITHIN_PAGE"/>
-  <int value="2" label="PAGE_RECAPTURED"/>
-  <int value="3" label="SHUTDOWN"/>
-  <int value="4" label="NEW_PHISHING_SCORER"/>
-</enum>
-
-<enum name="SBClientPhishingClientModelStatus" type="int">
-  <int value="0" label="MODEL_SUCCESS"/>
-  <int value="1" label="MODEL_NOT_CHANGED"/>
-  <int value="2" label="MODEL_FETCH_FAILED"/>
-  <int value="3" label="MODEL_EMPTY"/>
-  <int value="4" label="MODEL_TOO_LARGE"/>
-  <int value="5" label="MODEL_PARSE_ERROR"/>
-  <int value="6" label="MODEL_MISSING_FIELDS"/>
-  <int value="7" label="MODEL_INVALID_VERSION_NUMBER"/>
-  <int value="8" label="BAD_HASH_IDS"/>
-</enum>
-
-<enum name="SBClientPhishingScorerCreationStatus" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="MODEL_OPEN_FAIL"/>
-  <int value="2" label="MODEL_FILE_EMPTY"/>
-  <int value="3" label="MODEL_FILE_TOO_LARGE"/>
-  <int value="4" label="MODEL_PARSE_ERROR"/>
-  <int value="5" label="MODEL_MISSING_FIELDS"/>
-</enum>
-
-<enum name="SBClientPhishingSkipClassificationReason" type="int">
-  <int value="0" label="Not skipped"/>
-  <int value="1" label="Skipped: HTTPS"/>
-  <int value="2" label="Skipped: Not a GET request"/>
-</enum>
-
-<enum name="SBDownloadFeedbackUploadResult" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="UPLOAD_SUCCESS"/>
-  <int value="2" label="UPLOAD_CANCELLED"/>
-  <int value="3" label="UPLOAD_METADATA_NET_ERROR"/>
-  <int value="4" label="UPLOAD_METADATA_RESPONSE_ERROR"/>
-  <int value="5" label="UPLOAD_FILE_NET_ERROR"/>
-  <int value="6" label="UPLOAD_FILE_RESPONSE_ERROR"/>
-  <int value="7" label="UPLOAD_COMPLETE_RESPONSE_ERROR"/>
-</enum>
-
-<enum name="SBFileTypeUpdateResult" type="int">
-  <int value="1" label="SUCCESS"/>
-  <int value="2" label="FAILED_EMPTY"/>
-  <int value="3" label="FAILED_PROTO_PARSE"/>
-  <int value="4" label="FAILED_DELTA_CHECK"/>
-  <int value="5" label="FAILED_VERSION_CHECK"/>
-  <int value="6" label="FAILED_DEFAULT_SETTING_SET"/>
-  <int value="7" label="FAILED_WRONG_SETTINGS_COUNT"/>
-  <int value="8" label="SKIPPED_VERSION_CHECK_EQUAL"/>
-</enum>
-
-<enum name="ScheduledNavigationType" type="int">
-  <int value="0" label="(no gesture) ScheduledReload"/>
-  <int value="1" label="(no gesture) ScheduledFormSubmission"/>
-  <int value="2" label="(no gesture) ScheduledURLNavigation"/>
-  <int value="3" label="(no gesture) ScheduledRedirect"/>
-  <int value="4" label="(no gesture) ScheduledLocationChange"/>
-  <int value="5" label="(no gesture) ScheduledPageBlock"/>
-  <int value="6" label="(gesture) ScheduledReload"/>
-  <int value="7" label="(gesture) ScheduledFormSubmission"/>
-  <int value="8" label="(gesture) ScheduledURLNavigation"/>
-  <int value="9" label="(gesture) ScheduledRedirect"/>
-  <int value="10" label="(gesture) ScheduledLocationChange"/>
-  <int value="11" label="(gesture) ScheduledPageBlock"/>
-</enum>
-
-<enum name="ScoutActiveExtendedReportingPref" type="int">
-  <int value="0" label="Active pref is the legacy SBER pref"/>
-  <int value="1" label="Active pref is the new Scout pref"/>
-</enum>
-
-<enum name="ScoutTransitionReason" type="int">
-  <int value="0" label="Flag forced Scout Group to true"/>
-  <int value="1" label="Flag forced Scout Group to false"/>
-  <int value="2" label="User in OnlyShowScout group, enters Scout Group"/>
-  <int value="3"
-      label="User in CanShowScout group, enters Scout Group immediately"/>
-  <int value="4"
-      label="User in CanShowScout group, waiting for interstitial to enter
-             Scout Group"/>
-  <int value="5"
-      label="User in CanShowScout group saw first interstitial and entered
-             Scout Group"/>
-  <int value="6" label="User in Control group"/>
-  <int value="7" label="Rollback: SBER2 on on implies SBER1 can turn on"/>
-  <int value="8" label="Rollback: SBER2 off so SBER1 must be turned off"/>
-  <int value="9" label="Rollback: SBER2 absent so SBER1 must be cleared"/>
-</enum>
-
-<enum name="ScrollingThreadStatus" type="int">
-  <int value="0" label="SCROLLING_ON_COMPOSITOR"/>
-  <int value="1" label="SCROLLING_ON_COMPOSITOR_BLOCKED_ON_MAIN"/>
-  <int value="2" label="SCROLLING_ON_MAIN"/>
-</enum>
-
-<enum name="ScrollThread" type="int">
-  <int value="0" label="Scroll on impl-thread"/>
-  <int value="1" label="Scroll on main-thread"/>
-</enum>
-
-<enum name="SCTCanBeChecked" type="int">
-  <int value="0" label="No valid STH"/>
-  <int value="1" label="Requires newer STH"/>
-  <int value="2" label="Can be checked for inclusion"/>
-</enum>
-
-<enum name="SCTOrigin" type="int">
-  <int value="0" label="SCT_EMBEDDED"/>
-  <int value="1" label="SCT_FROM_TLS_EXTENSION"/>
-  <int value="2" label="SCT_FROM_OCSP_RESPONSE"/>
-</enum>
-
-<enum name="SCTVerifyStatus" type="int">
-  <int value="0" label="SCT_STATUS_NONE"/>
-  <int value="1" label="SCT_STATUS_LOG_UNKNOWN"/>
-  <int value="2" label="DEPRECATED: SCT_STATUS_INVALID"/>
-  <int value="3" label="SCT_STATUS_OK"/>
-  <int value="4" label="SCT_STATUS_INVALID_SIGNATURE"/>
-  <int value="5" label="SCT_STATUS_INVALID_TIMESTAMP"/>
-</enum>
-
-<enum name="SdchDictionaryFate" type="int">
-  <summary>
-    Fate of an Sdch dictionary, on load and eviction. See
-    net/sdch/sdch_owner.cc.
-  </summary>
-  <int value="1" label="GET_IGNORED"/>
-  <int value="2" label="FETCH_FAILED"/>
-  <int value="3" label="FETCH_IGNORED_NO_SPACE"/>
-  <int value="4" label="FETCH_MANAGER_REFUSED"/>
-  <int value="5" label="ADD_RESPONSE_TRIGGERRED"/>
-  <int value="6" label="EVICT_FOR_DICT"/>
-  <int value="7" label="EVICT_FOR_MEMORY"/>
-  <int value="8" label="EVICT_FOR_DESTRUCTION"/>
-  <int value="9" label="ADD_PERSISTENCE_TRIGGERRED"/>
-  <int value="10" label="UNLOAD_FOR_DESTRUCTION"/>
-</enum>
-
-<enum name="SdchPersistenceFailureReason" type="int">
-  <summary>
-    Errors that can occur when reading in or writing out persisted dictionary
-    information. See enum in net/sdch/sdch_owner.h for more information.
-  </summary>
-  <int value="1" label="NO_FILE"/>
-  <int value="2" label="READ_FAILED"/>
-  <int value="3" label="WRITE_FAILED"/>
-  <int value="4" label="OTHER"/>
-</enum>
-
-<enum name="SdchProblemCode" type="int">
-  <summary>
-    SDCH problem codes, listed in net/base/sdch_problem_code_list.h
-  </summary>
-  <int value="1" label="ADDED_CONTENT_ENCODING"/>
-  <int value="2" label="FIXED_CONTENT_ENCODING"/>
-  <int value="3" label="FIXED_CONTENT_ENCODINGS"/>
-  <int value="4" label="DECODE_HEADER_ERROR"/>
-  <int value="5" label="DECODE_BODY_ERROR"/>
-  <int value="6" label="OPTIONAL_GUNZIP_ENCODING_ADDED"/>
-  <int value="7" label="BINARY_ADDED_CONTENT_ENCODING"/>
-  <int value="8" label="BINARY_FIXED_CONTENT_ENCODING"/>
-  <int value="9" label="BINARY_FIXED_CONTENT_ENCODINGS"/>
-  <int value="10" label="DICTIONARY_FOUND_HAS_WRONG_DOMAIN"/>
-  <int value="11" label="DICTIONARY_FOUND_HAS_WRONG_PORT_LIST"/>
-  <int value="12" label="DICTIONARY_FOUND_HAS_WRONG_PATH"/>
-  <int value="13" label="DICTIONARY_FOUND_HAS_WRONG_SCHEME"/>
-  <int value="14" label="DICTIONARY_HASH_NOT_FOUND"/>
-  <int value="15" label="DICTIONARY_HASH_MALFORMED"/>
-  <int value="16" label="defunct (DICTIONARY_FOUND_EXPIRED)"/>
-  <int value="20" label="DICTIONARY_HAS_NO_HEADER"/>
-  <int value="21" label="DICTIONARY_HEADER_LINE_MISSING_COLON"/>
-  <int value="22" label="DICTIONARY_MISSING_DOMAIN_SPECIFIER"/>
-  <int value="23" label="DICTIONARY_SPECIFIES_TOP_LEVEL_DOMAIN"/>
-  <int value="24" label="DICTIONARY_DOMAIN_NOT_MATCHING_SOURCE_URL"/>
-  <int value="25" label="DICTIONARY_PORT_NOT_MATCHING_SOURCE_URL"/>
-  <int value="26" label="DICTIONARY_HAS_NO_TEXT"/>
-  <int value="27" label="DICTIONARY_REFERER_URL_HAS_DOT_IN_PREFIX"/>
-  <int value="28" label="DICTIONARY_UNSUPPORTED_VERSION"/>
-  <int value="30" label="DICTIONARY_LOAD_ATTEMPT_FROM_DIFFERENT_HOST"/>
-  <int value="31" label="DICTIONARY_SELECTED_FOR_SSL"/>
-  <int value="32" label="DICTIONARY_ALREADY_LOADED"/>
-  <int value="33" label="DICTIONARY_SELECTED_FROM_NON_HTTP"/>
-  <int value="34" label="defunct (DICTIONARY_IS_TOO_LARGE)">
-    Recorded in separate histogram; see Sdch3.DictionaryFate.
-  </int>
-  <int value="35" label="defunct (DICTIONARY_COUNT_EXCEEDED)">
-    Recorded in separate histogram; see Sdch3.DictionaryFate.
-  </int>
-  <int value="36" label="defunct">
-    DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD used instead
-  </int>
-  <int value="37" label="defunct">
-    DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD used instead
-  </int>
-  <int value="38" label="DICTIONARY_FETCH_READ_FAILED-defunct">
-    Used to indicate a broken false return from URLRequest::Read(); no longer
-    checking that return value.
-  </int>
-  <int value="39" label="DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD"/>
-  <int value="40" label="ATTEMPT_TO_DECODE_NON_HTTP_DATA"/>
-  <int value="44" label="DICTIONARY_NO_ROOM"/>
-  <int value="50" label="MULTIENCODING_FOR_NON_SDCH_REQUEST"/>
-  <int value="51" label="SDCH_CONTENT_ENCODE_FOR_NON_SDCH_REQUEST"/>
-  <int value="52" label="UNADVERTISED_DICTIONARY_USED"/>
-  <int value="53" label="UNADVERTISED_DICTIONARY_USED_CACHED"/>
-  <int value="61" label="DOMAIN_BLACKLIST_INCLUDES_TARGET"/>
-  <int value="70" label="META_REFRESH_RECOVERY"/>
-  <int value="71" label="defunct">
-    Almost the same as META_REFRESH_UNSUPPORTED
-  </int>
-  <int value="72" label="defunct">
-    Almost the same as CACHED_META_REFRESH_UNSUPPORTED
-  </int>
-  <int value="73" label="defunct">
-    PASSING_THROUGH_NON_SDCH plus DISCARD_TENTATIVE_SDCH
-  </int>
-  <int value="74" label="META_REFRESH_UNSUPPORTED"/>
-  <int value="75" label="CACHED_META_REFRESH_UNSUPPORTED"/>
-  <int value="76" label="PASSING_THROUGH_NON_SDCH"/>
-  <int value="77" label="INCOMPLETE_SDCH_CONTENT"/>
-  <int value="78" label="PASS_THROUGH_404_CODE"/>
-  <int value="79" label="PASS_THROUGH_OLD_CACHED"/>
-  <int value="80" label="META_REFRESH_CACHED_RECOVERY"/>
-  <int value="81" label="defunct (DISCARD_TENTATIVE_SDCH)">
-    Now tracked by ResponseCorruptionDetection.* histograms.
-  </int>
-  <int value="90" label="defunct (UNFLUSHED_CONTENT)"/>
-  <int value="91" label="MISSING_TIME_STATS"/>
-  <int value="92" label="CACHE_DECODED"/>
-  <int value="93" label="defunct (OVER_10_MINUTES)"/>
-  <int value="94" label="UNINITIALIZED"/>
-  <int value="95" label="PRIOR_TO_DICTIONARY"/>
-  <int value="96" label="DECODE_ERROR"/>
-  <int value="100" label="LATENCY_TEST_DISALLOWED"/>
-  <int value="105" label="defunct (DISABLED)">
-    No longer centrally tracked, since SDCH is enabled or disabled per
-    URLRequestContext.
-  </int>
-  <int value="106" label="defunct (SECURE_SCHEME_NOT_SUPPORTED)">
-    SDCH support is now always enabled for secure schemes.
-  </int>
-  <int value="107" label="DICTIONARY_USED_AFTER_DELETION"/>
-</enum>
-
-<enum name="SdchResponseCorruptionDetectionCauses" type="int">
-  <summary>
-    SDCH decode corruption detection cases, listed in net/filter/sdch_filter.cc.
-    See also comments in SdchFilter::ReadFilteredData in the same file.
-  </summary>
-  <int value="1" label="RESPONSE_404"/>
-  <int value="2" label="RESPONSE_NOT_200"/>
-  <int value="3" label="RESPONSE_OLD_UNENCODED"/>
-  <int value="4" label="RESPONSE_TENTATIVE_SDCH"/>
-  <int value="5" label="RESPONSE_NO_DICTIONARY"/>
-  <int value="6" label="RESPONSE_CORRUPT_SDCH"/>
-  <int value="7" label="RESPONSE_ENCODING_LIE"/>
-</enum>
-
-<enum name="SearchAccessPoint" type="int">
-  <int value="0" label="Omnibox"/>
-  <int value="1" label="Omnibox Instant"/>
-  <int value="2" label="Direct Navigation"/>
-  <int value="3" label="Direct Navigation Instant"/>
-  <int value="4" label="Home Page"/>
-  <int value="5" label="Home Page Instant"/>
-  <int value="6" label="Search App"/>
-  <int value="7" label="Search App Instant"/>
-  <int value="8" label="Other"/>
-  <int value="9" label="Other Instant"/>
-</enum>
-
-<enum name="SearchEngine" type="int">
-  <obsolete>
-    Deprecated 8/2013. No longer generated.
-  </obsolete>
-  <summary>
-    Indices of most popular prepopulated search engines as defined in
-    components/search_engines/search_engine_type.h.
-  </summary>
-  <int value="0" label="OTHER"/>
-  <int value="1" label="GOOGLE"/>
-  <int value="2" label="YAHOO"/>
-  <int value="3" label="YAHOOJP"/>
-  <int value="4" label="BING"/>
-  <int value="5" label="ASK"/>
-  <int value="6" label="YANDEX"/>
-  <int value="7" label="SEZNAM"/>
-  <int value="8" label="CENTRUM"/>
-  <int value="9" label="NETSPRINT"/>
-  <int value="10" label="VIRGILIO"/>
-  <int value="11" label="MAILRU"/>
-  <int value="12" label="ABCSOK"/>
-  <int value="13" label="ALTAVISTA"/>
-  <int value="14" label="BAIDU"/>
-  <int value="15" label="DAUM"/>
-  <int value="16" label="DELFI"/>
-  <int value="17" label="DIRI"/>
-  <int value="18" label="GOO"/>
-  <int value="19" label="IN"/>
-  <int value="20" label="NAJDI"/>
-  <int value="21" label="NAVER"/>
-  <int value="22" label="NETI"/>
-  <int value="23" label="OK"/>
-  <int value="24" label="POGODAK"/>
-  <int value="25" label="POGODOK_MK"/>
-  <int value="26" label="RAMBLER"/>
-  <int value="27" label="SANOOK"/>
-  <int value="28" label="SAPO"/>
-  <int value="29" label="TUT"/>
-  <int value="30" label="WALLA"/>
-  <int value="31" label="ZOZNAM"/>
-  <int value="32" label="YAHOOQC"/>
-  <int value="33" label="NONE"/>
-</enum>
-
-<enum name="SecurityInterstitialDecision" type="int">
-  <int value="0" label="SHOW"/>
-  <int value="1" label="PROCEED"/>
-  <int value="2" label="DONT_PROCEED"/>
-  <int value="3" label="PROCEEDING_DISABLED"/>
-</enum>
-
-<enum name="SecurityInterstitialInteraction" type="int">
-  <int value="0" label="TOTAL_VISITS"/>
-  <int value="1" label="SHOW_ADVANCED"/>
-  <int value="2" label="SHOW_PRIVACY"/>
-  <int value="3" label="SHOW_DIAGNOSTIC"/>
-  <int value="4" label="SHOW_LEARN_MORE"/>
-  <int value="5" label="RELOAD"/>
-  <int value="6" label="OPEN_TIME_SETTINGS"/>
-  <int value="7" label="SET_EXTENDED_REPORTING_ENABLED"/>
-  <int value="8" label="SET_EXTENDED_REPORTING_DISABLED"/>
-  <int value="9" label="EXTENDED_REPORTING_IS_ENABLED"/>
-  <int value="10" label="REPORT_PHISHING_ERROR"/>
-  <int value="11" label="SHOW_WHITEPAPER"/>
-</enum>
-
-<enum name="SelectFileDialogScope" type="int">
-  <int value="0" label="Generic files"/>
-  <int value="1" label="Images"/>
-  <int value="2" label="Videos"/>
-  <int value="3" label="Images and videos"/>
-</enum>
-
-<enum name="ServiceProcessEventType" type="int">
-  <int value="0" label="SERVICE_EVENT_INITIALIZE"/>
-  <int value="1" label="SERVICE_EVENT_ENABLED_ON_LAUNCH"/>
-  <int value="2" label="SERVICE_EVENT_ENABLE"/>
-  <int value="3" label="SERVICE_EVENT_DISABLE"/>
-  <int value="4" label="SERVICE_EVENT_DISABLE_BY_POLICY"/>
-  <int value="5" label="SERVICE_EVENT_LAUNCH"/>
-  <int value="6" label="SERVICE_EVENT_LAUNCHED"/>
-  <int value="7" label="SERVICE_EVENT_LAUNCH_FAILED"/>
-  <int value="8" label="SERVICE_EVENT_CHANNEL_CONNECTED"/>
-  <int value="9" label="SERVICE_EVENT_CHANNEL_ERROR"/>
-  <int value="10" label="SERVICE_EVENT_INFO_REQUEST"/>
-  <int value="11" label="SERVICE_EVENT_INFO_REPLY"/>
-  <int value="12" label="SERVICE_EVENT_HISTOGRAMS_REQUEST"/>
-  <int value="13" label="SERVICE_EVENT_HISTOGRAMS_REPLY"/>
-  <int value="14" label="SERVICE_PRINTERS_REQUEST"/>
-  <int value="15" label="SERVICE_PRINTERS_REPLY"/>
-</enum>
-
-<enum name="ServicesCustomizationLoadResult" type="int">
-  <int value="0" label="Manifest loaded successfully"/>
-  <int value="1" label="Manifest not found on server"/>
-  <int value="2" label="Manifest parsing error"/>
-  <int value="3" label="Failed to load manifest after N retries"/>
-</enum>
-
-<enum name="ServiceUtilityProcessHostEventType" type="int">
-  <int value="0" label="SERVICE_UTILITY_STARTED"/>
-  <int value="1" label="SERVICE_UTILITY_DISCONNECTED"/>
-  <int value="2" label="SERVICE_UTILITY_METAFILE_REQUEST"/>
-  <int value="3" label="SERVICE_UTILITY_METAFILE_SUCCEEDED"/>
-  <int value="4" label="SERVICE_UTILITY_METAFILE_FAILED"/>
-  <int value="5" label="SERVICE_UTILITY_CAPS_REQUEST"/>
-  <int value="6" label="SERVICE_UTILITY_CAPS_SUCCEEDED"/>
-  <int value="7" label="SERVICE_UTILITY_CAPS_FAILED"/>
-  <int value="8" label="SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST"/>
-  <int value="9" label="SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED"/>
-  <int value="10" label="SERVICE_UTILITY_SEMANTIC_CAPS_FAILED"/>
-  <int value="11" label="SERVICE_UTILITY_FAILED_TO_START"/>
-</enum>
-
-<enum name="ServiceWorkerCacheErrorType" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Exists Error"/>
-  <int value="2" label="Storage Error"/>
-  <int value="3" label="Not Found Error"/>
-  <int value="4" label="Quota Exceeded Error"/>
-</enum>
-
-<enum name="ServiceWorkerCacheResponseType" type="int">
-  <int value="0" label="Basic"/>
-  <int value="1" label="CORS"/>
-  <int value="2" label="Default"/>
-  <int value="3" label="Error"/>
-  <int value="4" label="Opaque"/>
-  <int value="5" label="OpaqueRedirect"/>
-</enum>
-
-<enum name="ServiceWorkerContextRequestHandlerStatus" type="int">
-  <summary>
-    The result of ServiceWorkerContextHandler handling a request for a service
-    worker script. From ServiceWorkerContextHandler::CreateJobStatus.
-  </summary>
-  <int value="0" label="Uninitialized"/>
-  <int value="1" label="Created a write job"/>
-  <int value="2" label="Created a write job with an incumbent"/>
-  <int value="3" label="Created a read job"/>
-  <int value="4" label="Created a read job for a duplicate script import"/>
-  <int value="5" label="Error: no provider"/>
-  <int value="6" label="Error: redundant version"/>
-  <int value="7" label="Error: no context"/>
-  <int value="8" label="Error: redirect"/>
-  <int value="9"
-      label="Error: fell back to network for an uninstalled script import"/>
-  <int value="10" label="Error: out of resource ids"/>
-</enum>
-
-<enum name="ServiceWorkerDatabaseStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Not Found Error"/>
-  <int value="2" label="IO Error"/>
-  <int value="3" label="Corruption Error"/>
-  <int value="4" label="Operation Error"/>
-  <int value="5" label="Not Supported Error"/>
-</enum>
-
-<enum name="ServiceWorkerDeleteAndStartOverResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Failed to delete ServiceWorkerDatabase"/>
-  <int value="2" label="Failed to delete ServiceWorkerDiskCache"/>
-</enum>
-
-<enum name="ServiceWorkerDiskCacheMigrationResult" type="int">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <int value="0" label="MIGRATION_OK"/>
-  <int value="1" label="MIGRATION_NOT_NECESSARY"/>
-  <int value="2" label="MIGRATION_ERROR_MIGRATION_FAILED"/>
-  <int value="3" label="MIGRATION_ERROR_UPDATE_DATABASE"/>
-</enum>
-
-<enum name="ServiceWorkerDiskCacheMigrationStatus" type="int">
-  <obsolete>
-    Deprecated because the migrator was removed as of 12/2015.
-  </obsolete>
-  <int value="0" label="MIGRATION_STATUS_OK"/>
-  <int value="1" label="MIGRATION_ERROR_FAILED"/>
-  <int value="2" label="MIGRATION_ERROR_MOVE_DISKCACHE"/>
-  <int value="3" label="MIGRATION_ERROR_INIT_SRC_DISKCACHE"/>
-  <int value="4" label="MIGRATION_ERROR_INIT_DEST_DISKCACHE"/>
-  <int value="5" label="MIGRATION_ERROR_OPEN_NEXT_ENTRY"/>
-  <int value="6" label="MIGRATION_ERROR_READ_ENTRY_KEY"/>
-  <int value="7" label="MIGRATION_ERROR_READ_RESPONSE_INFO"/>
-  <int value="8" label="MIGRATION_ERROR_WRITE_RESPONSE_INFO"/>
-  <int value="9" label="MIGRATION_ERROR_WRITE_RESPONSE_METADATA"/>
-  <int value="10" label="MIGRATION_ERROR_READ_RESPONSE_DATA"/>
-  <int value="11" label="MIGRATION_ERROR_WRITE_RESPONSE_DATA"/>
-</enum>
-
-<enum name="ServiceWorkerEventHandleRatioType" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Some"/>
-  <int value="2" label="All"/>
-</enum>
-
-<enum name="ServiceWorkerMetrics.EventType" type="int">
-  <int value="0" label="ACTIVATE"/>
-  <int value="1" label="INSTALL"/>
-  <int value="2" label="FETCH (unused)"/>
-  <int value="3" label="SYNC"/>
-  <int value="4" label="NOTIFICATION_CLICK"/>
-  <int value="5" label="PUSH"/>
-  <int value="6" label="GEOFENCING (unused)"/>
-  <int value="7" label="SERVICE_PORT_CONNECT (unused)"/>
-  <int value="8" label="MESSAGE"/>
-  <int value="9" label="NOTIFICATION_CLOSE"/>
-  <int value="10" label="FETCH_MAIN_FRAME"/>
-  <int value="11" label="FETCH_SUB_FRAME"/>
-  <int value="12" label="FETCH_SHARED_WORKER"/>
-  <int value="13" label="FETCH_SUB_RESOURCE"/>
-  <int value="14" label="UNKNOWN"/>
-  <int value="15" label="FOREIGN_FETCH"/>
-  <int value="16" label="FETCH_WAITUNTIL"/>
-  <int value="17" label="FOREIGN_FETCH_WAITUNTIL"/>
-  <int value="18" label="NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
-  <int value="19" label="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
-  <int value="20" label="NAVIGATION_HINT_LINK_TAP_DOWN"/>
-  <int value="21" label="EXTERNAL_REQUEST"/>
-  <int value="22" label="PAYMENT_REQUEST"/>
-</enum>
-
-<enum name="ServiceWorkerPreparationType" type="int">
-  <summary>
-    The type of preparation that was required for the browser to find and
-    possibly start up a service worker to dispatch a fetch event to. From
-    ServiceWorkerMetrics::WorkerPreparationType.
-  </summary>
-  <int value="0" label="Unknown"/>
-  <int value="1"
-      label="The worker was already starting up. The browser waited for it
-             finish."/>
-  <int value="2" label="The worker was already running."/>
-  <int value="3"
-      label="The worker was stopping. Once stopped, the browser started it up"/>
-  <int value="4" label="The worker started up in a new process."/>
-  <int value="5" label="The worker started up in an existing process."/>
-  <int value="6" label="The worker started up during browser startup."/>
-</enum>
-
-<enum name="ServiceWorkerReadResponseResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Read headers error"/>
-  <int value="2" label="Read data error"/>
-</enum>
-
-<enum name="ServiceWorkerResponseError" type="int">
-  <int value="0" label="ErrorUnknown"/>
-  <int value="1" label="ErrorPromiseRejected"/>
-  <int value="2" label="ErrorDefaultPrevented"/>
-  <int value="3" label="ErrorNoV8Instance"/>
-  <int value="4" label="ErrorResponseTypeError"/>
-  <int value="5" label="ErrorResponseTypeOpaque"/>
-  <int value="6" label="ErrorResponseTypeNotBasicOrDefault"/>
-  <int value="7" label="ErrorBodyUsed"/>
-  <int value="8" label="ErrorResponseTypeOpaqueForClientRequest"/>
-  <int value="9" label="ErrorResponseTypeOpaqueRedirect"/>
-  <int value="10" label="ErrorBodyLocked"/>
-  <int value="11" label="NoForeignFetchResponse"/>
-  <int value="12" label="ForeignFetchHeadersWithoutOrigin"/>
-  <int value="13" label="ForeignFetchMismatchedOrigin"/>
-  <int value="14" label="RedirectedResponseForNotFollowRequest"/>
-</enum>
-
-<enum name="ServiceWorkerSite" type="int">
-  <int value="0" label="Other (unused)"/>
-  <int value="1" label="NewTabPage"/>
-  <int value="2" label="WithFetchHandler"/>
-  <int value="3" label="WithoutFetchHandler"/>
-  <int value="4" label="Google+"/>
-  <int value="5" label="Inbox"/>
-  <int value="6" label="Google Docs and Drive"/>
-</enum>
-
-<enum name="ServiceWorkerStatusCode" type="int">
-  <int value="0" label="SERVICE_WORKER_OK"/>
-  <int value="1" label="SERVICE_WORKER_ERROR_FAILED"/>
-  <int value="2" label="SERVICE_WORKER_ERROR_ABORT"/>
-  <int value="3" label="SERVICE_WORKER_ERROR_START_WORKER_FAILED"/>
-  <int value="4" label="SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND"/>
-  <int value="5" label="SERVICE_WORKER_ERROR_NOT_FOUND"/>
-  <int value="6" label="SERVICE_WORKER_ERROR_EXISTS"/>
-  <int value="7" label="SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED"/>
-  <int value="8" label="SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED"/>
-  <int value="9" label="SERVICE_WORKER_ERROR_IPC_FAILED"/>
-  <int value="10" label="SERVICE_WORKER_ERROR_NETWORK"/>
-  <int value="11" label="SERVICE_WORKER_ERROR_SECURITY"/>
-  <int value="12" label="SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED"/>
-  <int value="13" label="SERVICE_WORKER_ERROR_STATE"/>
-  <int value="14" label="SERVICE_WORKER_ERROR_TIMEOUT"/>
-  <int value="15" label="SERVICE_WORKER_ERROR_SCRIPT_EVALUATE_FAILED"/>
-  <int value="16" label="SERVICE_WORKER_ERROR_DISK_CACHE"/>
-  <int value="17" label="SERVICE_WORKER_ERROR_REDUNDANT"/>
-  <int value="18" label="SERVICE_WORKER_ERROR_DISALLOWED"/>
-  <int value="19" label="SERVICE_WORKER_ERROR_DISABLED_WORKER (unused)"/>
-</enum>
-
-<enum name="ServiceWorkerStoppedStatus" type="int">
-  <int value="0" label="NORMAL"/>
-  <int value="1" label="DETACH_BY_REGISTRY"/>
-  <int value="2" label="TIMEOUT"/>
-</enum>
-
-<enum name="ServiceWorkerStopStatus" type="int">
-  <obsolete>
-    Deprecated Oct 2015. No longer generated in the code.
-  </obsolete>
-  <int value="0" label="STOP_STATUS_STOPPING"/>
-  <int value="1" label="STOP_STATUS_STOPPED"/>
-  <int value="2" label="STOP_STATUS_STALLED"/>
-  <int value="3" label="STOP_STATUS_STALLED_THEN_STOPPED"/>
-</enum>
-
-<enum name="ServiceWorkerURLRequestJobResult" type="int">
-  <int value="0" label="REQUEST_JOB_FALLBACK_RESPONSE"/>
-  <int value="1" label="REQUEST_JOB_FALLBACK_FOR_CORS"/>
-  <int value="2" label="REQUEST_JOB_HEADERS_ONLY_RESPONSE"/>
-  <int value="3" label="REQUEST_JOB_STREAM_RESPONSE"/>
-  <int value="4" label="REQUEST_JOB_BLOB_RESPONSE"/>
-  <int value="5" label="REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO"/>
-  <int value="6" label="REQUEST_JOB_ERROR_BAD_BLOB"/>
-  <int value="7" label="REQUEST_JOB_ERROR_NO_PROVIDER_HOST"/>
-  <int value="8" label="REQUEST_JOB_ERROR_NO_ACTIVE_VERSION"/>
-  <int value="9" label="REQUEST_JOB_ERROR_NO_REQUEST"/>
-  <int value="10" label="REQUEST_JOB_ERROR_FETCH_EVENT_DISPATCH"/>
-  <int value="11" label="REQUEST_JOB_ERROR_BLOB_READ"/>
-  <int value="12" label="REQUEST_JOB_ERROR_STREAM_ABORTED"/>
-  <int value="13" label="REQUEST_JOB_ERROR_KILLED"/>
-  <int value="14" label="REQUEST_JOB_ERROR_KILLED_WITH_BLOB"/>
-  <int value="15" label="REQUEST_JOB_ERROR_KILLED_WITH_STREAM"/>
-  <int value="16" label="REQUEST_JOB_ERROR_DESTROYED"/>
-  <int value="17" label="REQUEST_JOB_ERROR_DESTROYED_WITH_BLOB"/>
-  <int value="18" label="REQUEST_JOB_ERROR_DESTROYED_WITH_STREAM"/>
-  <int value="19" label="REQUEST_JOB_ERROR_BAD_DELEGATE"/>
-  <int value="20" label="REQUEST_JOB_ERROR_REQUEST_BODY_BLOB_FAILED"/>
-</enum>
-
-<enum name="ServiceWorkerWriteResponseResult" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Write headers error"/>
-  <int value="2" label="Write data error"/>
-</enum>
-
-<enum name="SessionCrashedBubbleUserAction" type="int">
-  <int value="0" label="The bubble was shown"/>
-  <int value="1" label="There was an error when showing the bubble."/>
-  <int value="2" label="The Restore button was clicked"/>
-  <int value="3" label="User was already opted in to UMA"/>
-  <int value="4" label="User chose to opt in to UMA"/>
-  <int value="5" label="User clicked on the help button"/>
-  <int value="6" label="User ignored or closed the bubble"/>
-  <int value="7" label="The bar with UMA opt-in option was shown."/>
-  <int value="8" label="The Startup pages button was clicked."/>
-</enum>
-
-<enum name="SessionRestoreActions" type="int">
-  <int value="0" label="A session restore was started"/>
-  <int value="1" label="A session restore deferred one or more tabs"/>
-</enum>
-
-<enum name="SessionRestoreTabActions" type="int">
-  <int value="0" label="A tab was created"/>
-  <int value="1" label="A tab's content was automatically loaded"/>
-  <int value="2" label="The loading of a tab's content was deferred"/>
-  <int value="3" label="A deferred tab's content was loaded via user action"/>
-  <int value="4" label="A tab's content automatically started to load"/>
-</enum>
-
-<enum name="SessionStartupPref" type="int">
-  <int value="0" label="Open home page (unused)"/>
-  <int value="1" label="Continue from last opened pages"/>
-  <int value="4" label="Open URLs"/>
-  <int value="5" label="Open new tab page"/>
-</enum>
-
-<enum name="SessionStartupType" type="int">
-  <obsolete>
-    Deprecated 8/2013. No longer generated.
-  </obsolete>
-  <int value="0" label="New Tab page"/>
-  <int value="1" label="Homepage (DEPRECATED)"/>
-  <int value="2" label="Last session"/>
-  <int value="3" label="Specified URLs"/>
-</enum>
-
-<enum name="SessionStorageDatabaseOpen" type="int">
-  <int value="0" label="OK">Succesfully opened the database.</int>
-  <int value="1" label="Recovered">
-    Failed to open the existing db, deleted it, and created a new empty db.
-  </int>
-  <int value="2" label="Reopen: Total Fail">
-    <obsolete>
-      Deprecated 2016/11. Replaced by other &quot;Reopen:&quot; errors.
-    </obsolete>
-    Failed to open the database and also failed to delete and start over.
-  </int>
-  <int value="3" label="Reopen: not found">
-    Reopen attempt failed with (not found) after successful database delete.
-  </int>
-  <int value="4" label="Reopen: not supported">
-    Reopen attempt failed with (not supported) after successful database delete.
-  </int>
-  <int value="5" label="Reopen: corruption">
-    Reopen attempt failed with (corruption) after successful database delete.
-  </int>
-  <int value="6" label="Reopen: invalid argument">
-    Reopen attempt failed with (invalid argument) after successful database
-    delete.
-  </int>
-  <int value="7" label="Reopen: I/O error">
-    Reopen attempt failed with (I/O error) after successful database delete.
-  </int>
-</enum>
-
-<enum name="SetDefaultAttemptResult" type="int">
-  <obsolete>
-    Deprecated 2016/03. Replaced by DefaultWebClientState.
-  </obsolete>
-  <int value="0" label="Success">Chrome was set as the default web client.</int>
-  <int value="1" label="Already default">
-    Chrome was already the default web client. This counts as a successful
-    attempt.
-  </int>
-  <int value="2" label="Failure">
-    Chrome was not set as the default web client.
-  </int>
-  <int value="3" label="Abandoned">
-    The attempt was abandoned because the observer was destroyed.
-  </int>
-  <int value="4" label="Launch failure">
-    Failed to launch the process to set Chrome as the default web client
-    asynchronously.
-  </int>
-  <int value="5" label="Other worker">
-    Another worker is already in progress to make Chrome the default web client.
-  </int>
-  <int value="6" label="Retry">
-    The user initiated another attempt while the asynchronous operation was
-    already in progress.
-  </int>
-  <int value="7" label="No errors, not default">
-    No errors were encountered yet Chrome is still not the default web client.
-  </int>
-</enum>
-
-<enum name="SettingsInteractionConcludeReason" type="int">
-  <int value="0" label="Registry watcher">
-    A change to the protocol registry key was detected.
-  </int>
-  <int value="1" label="Timeout">
-    The timer fired before a change to the protocol registry key was detected.
-  </int>
-</enum>
-
-<enum name="SettingsResetPromptConfigError" type="int">
-  <int value="1" label="Config Ok"/>
-  <int value="2" label="Missing domain_hashes param"/>
-  <int value="3" label="Bad domain_hashes param"/>
-  <int value="4" label="Bad domain hash"/>
-  <int value="5" label="Bad domain id"/>
-  <int value="6" label="Duplicate domain hash"/>
-  <int value="7" label="Bad delay_before_prompt_seconds param"/>
-  <int value="8" label="Bad prompt_wave param"/>
-  <int value="9" label="Bad time_between_prompts_seconds param"/>
-</enum>
-
-<enum name="SettingsResetPromptResetState" type="int">
-  <int value="1" label="Reset required"/>
-  <int value="2" label="Domain not matched, no reset required"/>
-  <int value="3" label="Already prompted for setting, no reset required"/>
-  <int value="4" label="Recently prompted, no reset required"/>
-  <int value="5" label="Other setting requires reset, no reset required"/>
-  <int value="6" label="Policy detected, no reset required"/>
-</enum>
-
-<enum name="SettingsResetPromptSettingsReset" type="int">
-  <int value="1" label="Homepage"/>
-  <int value="2" label="Default search engine"/>
-  <int value="3" label="Startup URLs"/>
-</enum>
-
-<enum name="SettingsSections" type="int">
-  <summary>
-    A collection of sections from chrome://settings. Used for metrics about
-    searching within the settings options.
-  </summary>
-  <int value="0" label="No Match Found"/>
-  <int value="1" label="Unknown Section"/>
-  <int value="2" label="Network CROS"/>
-  <int value="3" label="Proxy"/>
-  <int value="4" label="Appearance"/>
-  <int value="5" label="Device"/>
-  <int value="6" label="Search"/>
-  <int value="7" label="Sync Users"/>
-  <int value="8" label="Set Default Browser"/>
-  <int value="9" label="Date Time"/>
-  <int value="10" label="Device Control"/>
-  <int value="11" label="Privacy"/>
-  <int value="12" label="Bluetooth Devices"/>
-  <int value="13" label="Passwords and Autofill"/>
-  <int value="14" label="Easy Unlock"/>
-  <int value="15" label="Web Content"/>
-  <int value="16" label="Network"/>
-  <int value="17" label="Languages"/>
-  <int value="18" label="Downloads"/>
-  <int value="19" label="Certificates"/>
-  <int value="20" label="Cloudprint Options"/>
-  <int value="21" label="A11y"/>
-  <int value="22" label="Factory Reset"/>
-  <int value="23" label="System"/>
-  <int value="24" label="Reset Profile"/>
-  <int value="25" label="Sync"/>
-  <int value="26" label="Startup"/>
-  <int value="27" label="Mouselock"/>
-  <int value="28" label="Page Zoom Levels"/>
-  <int value="29" label="Status"/>
-  <int value="30" label="Main"/>
-  <int value="31" label="Pointer Touchpad"/>
-  <int value="32" label="Pointer Mouse"/>
-  <int value="33" label="Prefs Blocked Languages"/>
-  <int value="34" label="Prefs Language Blacklist"/>
-  <int value="35" label="Prefs Site Blacklist"/>
-  <int value="36" label="Prefs Whitelists"/>
-  <int value="37" label="Prefs Supported Languages"/>
-  <int value="38" label="Prefs Cld Version"/>
-  <int value="39" label="Prefs Cld Data Source"/>
-  <int value="40" label="Prefs Dump"/>
-</enum>
-
-<enum name="SetupInstallResult" type="int">
-  <int value="0" label="First install of Chrome succeeded."/>
-  <int value="1" label="Same version reinstalled for repair."/>
-  <int value="2" label="Chrome successfully updated to new version."/>
-  <int value="3" label="No work done; launched existing Chrome."/>
-  <int value="4" label="Higher version of Chrome already exists."/>
-  <int value="5" label="User level install already exists."/>
-  <int value="6" label="Machine level install already exists."/>
-  <int value="7" label="Install/update failed."/>
-  <int value="8" label="Failed to patch setup.exe."/>
-  <int value="9" label="Current OS not supported."/>
-  <int value="10" label="OS API call failed."/>
-  <int value="11" label="Unable to get Temp directory."/>
-  <int value="12" label="Failed to uncompress Chrome archive."/>
-  <int value="13" label="Something wrong with the installer archive."/>
-  <int value="14" label="User trying system level install is not Admin."/>
-  <int value="15" label="Chrome not installed (during uninstall)."/>
-  <int value="16" label="Chrome currently running (during uninstall)."/>
-  <int value="17" label="User has confirmed Chrome uninstall."/>
-  <int value="18" label="User okayed uninstall and profile deletion."/>
-  <int value="19" label="Chrome successfully uninstalled."/>
-  <int value="20" label="Chrome uninstallation failed."/>
-  <int value="21" label="User cancelled Chrome uninstallation."/>
-  <int value="22" label="Unknown status (this should never happen)."/>
-  <int value="23" label="Rename of new_chrome.exe to chrome.exe worked."/>
-  <int value="24" label="Rename of new_chrome.exe failed."/>
-  <int value="25" label="EULA dialog was not accepted by user."/>
-  <int value="26" label="EULA dialog was accepted by user."/>
-  <int value="27" label="EULA accepted with the crash option selected."/>
-  <int value="28" label="Installation directory is in use by another process."/>
-  <int value="29" label="Uninstallation required a reboot."/>
-  <int value="30" label="Chrome successfully updated but old version running."/>
-  <int value="31" label="Chrome repair failed as Chrome was running."/>
-  <int value="32" label="Setup has been re-launched as the interactive user."/>
-  <int value="33"
-      label="The chrome-sxs option provided does not work with other command
-             line options."/>
-  <int value="42" label="Failed to apply a diff patch."/>
-  <int value="47"
-      label="A non-install option was called with an invalid installer state."/>
-  <int value="49"
-      label="The arguments of --patch were missing or they were invalid for
-             any reason."/>
-  <int value="50"
-      label="No previous version archive found for differential update."/>
-  <int value="51"
-      label="No multi-install products to update. The binaries will be
-             uninstalled if they are not in use."/>
-  <int value="52" label="The binaries were uninstalled."/>
-  <int value="53" label="An unsupported legacy option was given."/>
-  <int value="54" label="Current CPU not supported."/>
-  <int value="55" label="Autoupdates are now enabled."/>
-  <int value="56" label="Autoupdates could not be enabled."/>
-  <int value="57"
-      label="Unpacking the (possibly patched) uncompressed archive failed."/>
-</enum>
-
-<enum name="SetupSingletonAcquisitionResult" type="int">
-  <int value="0" label="The setup singleton was acquired successfully."/>
-  <int value="1" label="Acquisition of the exit event mutex timed out."/>
-  <int value="2" label="Acquisition of the setup mutex timed out."/>
-  <int value="3" label="Creation of the setup mutex failed."/>
-  <int value="4" label="Creation of the exit event failed."/>
-  <int value="5" label="Creation of the exit event mutex failed."/>
-</enum>
-
-<enum name="SHA1Status" type="int">
-  <summary>
-    Whether or not SHA-1 was present in a certificate chain and, if it was, when
-    the leaf certificate expired.
-  </summary>
-  <int value="0" label="Not present"/>
-  <int value="1" label="Expires after Jan 1, 2017"/>
-  <int value="2" label="Expires between Jun 1, 2016 and Jan 1, 2017"/>
-  <int value="3" label="Expires between Jan 1, 2016 and Jun 1, 2016"/>
-  <int value="4" label="Expires before Jan 1, 2016"/>
-</enum>
-
-<enum name="ShaderModel" type="int">
-  <summary>The GPU's Direct3D shader model version.</summary>
-  <int value="0" label="SHADER_MODEL_UNKNOWN"/>
-  <int value="1" label="SHADER_MODEL_2_0"/>
-  <int value="2" label="SHADER_MODEL_3_0"/>
-  <int value="3" label="SHADER_MODEL_4_0"/>
-  <int value="4" label="SHADER_MODEL_4_1"/>
-  <int value="5" label="SHADER_MODEL_5_0"/>
-</enum>
-
-<enum name="SharedMemoryCreateError" type="int">
-  <int value="0" label="SUCCESS">
-    The shared memory region was successfully created.
-  </int>
-  <int value="1" label="SIZE_ZERO">Failure because the size was zero.</int>
-  <int value="2" label="SIZE_TOO_LARGE">
-    Failure because the size was too large.
-  </int>
-  <int value="3" label="INITIALIZE_ACL_FAILURE">
-    Failure to initialize an ACL.
-  </int>
-  <int value="4" label="INITIALIZE_SECURITY_DESC_FAILURE">
-    Failure to initialize the security descriptor.
-  </int>
-  <int value="5" label="SET_SECURITY_DESC_FAILURE">
-    Failure to set the security descriptor.
-  </int>
-  <int value="6" label="CREATE_FILE_MAPPING_FAILURE">
-    Failure to create the file mapping.
-  </int>
-  <int value="7" label="REDUCE_PERMISSIONS_FAILURE">
-    Failure to reduce the permissions on the file mapping.
-  </int>
-  <int value="8" label="ALREADY_EXISTS">
-    The shared memory region already exists.
-  </int>
-</enum>
-
-<enum name="ShelfAlignmentValue" type="int">
-  <summary>
-    The alignment of the shelf area (see ash/launcher/launcher_view.cc).
-  </summary>
-  <int value="0" label="Bottom"/>
-  <int value="1" label="Left"/>
-  <int value="2" label="Right"/>
-</enum>
-
-<enum name="ShillSuspendTerminationDarkResumeActionResult" type="int">
-  <summary>
-    The termination/suspend/dark resume action result types come from
-    SuspendActionResult in shill/metrics.h
-  </summary>
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-</enum>
-
-<enum name="ShouldAllowOpenURLFailureReason" type="int">
-  <summary>
-    Specifies the reason why the web-accessible resource check in
-    ShouldAllowOpenURL fails.
-  </summary>
-  <int value="0" label="Request is to filesystem: URL with extension origin"/>
-  <int value="1" label="Request is to blob: URL with extension origin"/>
-  <int value="2"
-      label="Resource is not web-accessible and site URL has scheme that used
-             to be allowed"/>
-  <int value="3" label="Resource is not web-accessible (most common)"/>
-</enum>
-
-<enum name="ShutdownReason" type="int">
-  <summary>
-    The reason that the Chrome OS power manager shut down or rebooted the
-    system.
-  </summary>
-  <int value="0" label="User request"/>
-  <int value="1" label="State transition"/>
-  <int value="2" label="Low battery"/>
-  <int value="3" label="Suspend failures"/>
-  <int value="4" label="Dark resume"/>
-  <int value="5" label="System update"/>
-  <int value="6" label="Dark resume failed"/>
-</enum>
-
-<enum name="ShutdownType" type="int">
-  <int value="0" label="Not valid">Invalid value.</int>
-  <int value="1" label="Window close">The last browser window was closed.</int>
-  <int value="2" label="Browser exit">User clicked on the Exit menu item.</int>
-  <int value="3" label="End session">OS is logging off or shutting down.</int>
-</enum>
-
-<enum name="SideloadUIEvents" type="int">
-  <int value="0" label="Extension installed"/>
-  <int value="1" label="Extension ignored"/>
-  <int value="2" label="Extension re-enabled"/>
-  <int value="3" label="Extension uninstalled"/>
-</enum>
-
-<enum name="SideloadWipeoutBubble" type="int">
-  <int value="0" label="Learn more"/>
-  <int value="1" label="Settings page"/>
-  <int value="2" label="Dismiss"/>
-</enum>
-
-<enum name="SigninAccessPoint" type="int">
-  <int value="0" label="Start page"/>
-  <int value="1" label="NTP Link"/>
-  <int value="2" label="Menu"/>
-  <int value="3" label="Settings"/>
-  <int value="4" label="Supervised user"/>
-  <int value="5" label="Extension install bubble"/>
-  <int value="6" label="Extensions"/>
-  <int value="7" label="Apps page link"/>
-  <int value="8" label="Bookmark bubble"/>
-  <int value="9" label="Bookmark manager"/>
-  <int value="10" label="Avatar bubble sign in"/>
-  <int value="11" label="User manager"/>
-  <int value="12" label="Devices page"/>
-  <int value="13" label="Cloud print"/>
-  <int value="14" label="Content area"/>
-  <int value="15" label="Signin promo"/>
-  <int value="16" label="Recent tabs"/>
-  <int value="17" label="Typed URL with unknown access point"/>
-  <int value="18" label="Password bubble"/>
-  <int value="19" label="Autofill dropdown"/>
-  <int value="20" label="NTP Content Suggestions"/>
-  <int value="21" label="Re-signin infobar"/>
-  <int value="22" label="Tab switcher"/>
-</enum>
-
-<enum name="SigninAccountEquality" type="int">
-  <int value="0" label="Both Equal"/>
-  <int value="1" label="Both Different"/>
-  <int value="2" label="Only Same Email"/>
-  <int value="3" label="Only Same Id"/>
-  <int value="4" label="Email Fallback"/>
-</enum>
-
-<enum name="SigninAccountReconcilorState" type="int">
-  <int value="0" label="OK">
-    The account reconcilor has finished running and is up-to-date.
-  </int>
-  <int value="1" label="Running">
-    The account reconcilor is running and gathering informations.
-  </int>
-  <int value="2" label="Error">
-    The account reconcilor has encountered an error and stopped.
-  </int>
-</enum>
-
-<enum name="SigninChoice" type="int">
-  <int value="0" label="Cancel"/>
-  <int value="1" label="Continue"/>
-  <int value="2" label="New Profile"/>
-</enum>
-
-<enum name="SigninFlowConfirmations" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="OK"/>
-  <int value="2" label="Return"/>
-  <int value="3" label="Advanced"/>
-  <int value="4" label="Close"/>
-  <int value="5" label="Escape"/>
-  <int value="6" label="Undo"/>
-  <int value="7" label="Learn more"/>
-  <int value="8" label="Learn more ok"/>
-  <int value="9" label="Learn more return"/>
-  <int value="10" label="Learn more advanced"/>
-  <int value="11" label="Learn more close"/>
-  <int value="12" label="Learn more escape"/>
-  <int value="13" label="Learn more undo"/>
-</enum>
-
-<enum name="SigninHelperFlow" type="int">
-  <int value="0" label="Shown">The signin flow was shown to the user.</int>
-  <int value="1" label="Accepted">The user pressed accept to sign in.</int>
-  <int value="2" label="Rejected">The user pressed the reject to sign in.</int>
-  <int value="3" label="Dismissed">
-    The user pressed the X button to dismiss the signin promo.
-  </int>
-  <int value="4" label="Ignored">
-    The user completely ignored the signin promo. Either they navigated away, or
-    they used the page as is.
-  </int>
-  <int value="5" label="Learn More">
-    The user clicked on the learn more link in the signin promo.
-  </int>
-  <int value="6" label="Accept with Defaults">
-    The sync was started with default settings.
-  </int>
-  <int value="7" label="Accept with Advanced">
-    The sync was started with advanced settings.
-  </int>
-  <int value="8" label="Auto-Accept with Defaults">
-    The sync was started through auto-accept with default settings.
-  </int>
-  <int value="9" label="Auto-Accept with Advanced">
-    The sync was started through auto-accept with advanced settings.
-  </int>
-  <int value="10" label="Undo">The sync was aborted with an undo button.</int>
-</enum>
-
-<enum name="SigninInvestigatedScenario" type="int">
-  <int value="0" label="Upgrade low risk"/>
-  <int value="1" label="Upgrade high risk"/>
-  <int value="2" label="Same account"/>
-  <int value="3" label="Different account"/>
-</enum>
-
-<enum name="SigninReason" type="int">
-  <int value="0" label="Signin primary account"/>
-  <int value="1" label="Add secondary account"/>
-  <int value="2" label="Reauthentication"/>
-  <int value="3" label="Unlock profile"/>
-  <int value="4" label="Typed URL with unknown reason"/>
-</enum>
-
-<enum name="SigninReauthStates" type="int">
-  <int value="0" label="Account mismatch"/>
-  <int value="1" label="Reauth Shown"/>
-</enum>
-
-<enum name="SigninSignoutProfile" type="int">
-  <int value="0" label="Preference changed">
-    The preference or policy controlling if signin is valid has changed.
-  </int>
-  <int value="1" label="Google service pattern changed">
-    The valid username pattern for signing in to the Google service changed.
-  </int>
-  <int value="2" label="Signin preference changed during signin">
-    The preference or policy controlling if signin is valid changed during the
-    signin process.
-  </int>
-  <int value="3" label="User clicked signout">User clicked to signout.</int>
-  <int value="4" label="Signin aborted">
-    The signin process was aborted, but signin had succeeded, so signout. This
-    may be due to a server response, policy definition or user action.
-  </int>
-  <int value="5" label="Server forced">
-    The sync server caused the profile to be signed out.
-  </int>
-  <int value="6" label="Credentials transfered">
-    The credentials are being transfered to a new profile, so the old one is
-    signed out.
-  </int>
-  <int value="7" label="Authentication failed with force signin">
-    Signed out because credentials are invalid and force-sign-in is enabled.
-  </int>
-</enum>
-
-<enum name="SigninSource" type="int">
-  <int value="0" label="Start page"/>
-  <int value="1" label="NTP Link"/>
-  <int value="2" label="Menu"/>
-  <int value="3" label="Settings"/>
-  <int value="4" label="Extension install bubble"/>
-  <int value="5" label="App launcher"/>
-  <int value="6" label="Apps page link"/>
-  <int value="7" label="Bookmark bubble"/>
-  <int value="8" label="Avatar bubble sign in"/>
-  <int value="9" label="Avatar bubble add account"/>
-  <int value="10" label="Devices page"/>
-  <int value="11" label="Reauth"/>
-  <int value="12" label="Unknown"/>
-</enum>
-
-<enum name="SigninTokenTableReadTokenFromDBResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Decrypt failed"/>
-  <int value="2" label="Read DB failed (bad entry)"/>
-</enum>
-
-<enum name="SigninXDevicePromoEligibility" type="int">
-  <int value="0" label="Eligible">The user is eligible for the promo.</int>
-  <int value="1" label="Opted Out">
-    The profile has previously opted out of the promo.
-  </int>
-  <int value="2" label="Signed In">The profile is already signed in.</int>
-  <int value="3" label="Not Single GAIA Account">
-    The profile does not have a single, peristent GAIA cookie.
-  </int>
-  <int value="4" label="Unknown count of devices">
-    Yet to determine how many devices the user has.
-  </int>
-  <int value="5" label="Error fetching device activity">
-    An error was returned trying to determine the account's devices.
-  </int>
-  <int value="6" label="Throttled fetching device activity">
-    The call to get device activity was throttled, and never executed.
-  </int>
-  <int value="7" label="Zero devices found">The user has no devices.</int>
-  <int value="8" label="No devices active">
-    The user has no device that was recently active.
-  </int>
-</enum>
-
-<enum name="SigninXDevicePromoInitialized" type="int">
-  <int value="0" label="Initialized">
-    The promo was initialized successfully.
-  </int>
-  <int value="1" label="Opted Out">
-    The profile is opted out, so the promo didn't initialize.
-  </int>
-  <int value="2" label="No variations config">
-    Unable to read the variations configuration.
-  </int>
-</enum>
-
-<enum name="SimpleCache.EntryCreatedAndStream2Omitted" type="int">
-  <int value="0" label="Stream 2 file was present"/>
-  <int value="1" label="Empty stream 2 file was omitted"/>
-</enum>
-
-<enum name="SimpleCache.EntryOpenedAndStream2Removed" type="int">
-  <int value="0" label="Stream 2 file was already omitted or not empty"/>
-  <int value="1" label="Empty stream 2 file removed"/>
-</enum>
-
-<enum name="SimpleCache.FileDescriptorLimitStatus" type="int">
-  <int value="0" label="Unsupported"/>
-  <int value="1" label="Supported but failed"/>
-  <int value="2" label="Succeeded"/>
-</enum>
-
-<enum name="SimpleCacheHeaderSizeChange" type="int">
-  <int value="0" label="Written for the first time"/>
-  <int value="1" label="Rewritten with same size"/>
-  <int value="2" label="Rewritten with larger size"/>
-  <int value="3" label="Rewritten with smaller size"/>
-  <int value="4" label="Unexpected header stream write"/>
-</enum>
-
-<enum name="SimpleCacheIndexInitializeMethod" type="int">
-  <int value="0" label="Directory Scan"/>
-  <int value="1" label="Index File"/>
-  <int value="2" label="New Cache"/>
-</enum>
-
-<enum name="SimpleCacheIndexWriteReason" type="int">
-  <int value="0" label="Shutdown"/>
-  <int value="1" label="Startup Merge"/>
-  <int value="2" label="Saved While Idle"/>
-  <int value="3" label="Stopped (Android only)"/>
-</enum>
-
-<enum name="SimpleCacheOpenEntryIndexState" type="int">
-  <int value="0" label="No index"/>
-  <int value="1" label="Hit"/>
-  <int value="2" label="Miss"/>
-</enum>
-
-<enum name="SimpleCacheReadParallelizable" type="int">
-  <int value="0" label="Standalone Read (obsolete)"/>
-  <int value="1" label="Follows read"/>
-  <int value="2" label="Follows conflicting write"/>
-  <int value="3" label="Follows non conflicting write"/>
-  <int value="4" label="Follows other operation"/>
-  <int value="5" label="Read alone in queue"/>
-</enum>
-
-<enum name="SimpleCacheReadResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Invalid Argument"/>
-  <int value="2" label="Nonblocking Empty Return"/>
-  <int value="3" label="Invalid State"/>
-  <int value="4" label="Fast Empty Return"/>
-  <int value="5" label="Synchronous Read Failure"/>
-  <int value="6" label="Synchronous Checksum Failure"/>
-</enum>
-
-<enum name="SimpleCacheStaleIndexQuality" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Missed Entries"/>
-  <int value="2" label="Extra Entries"/>
-  <int value="3" label="Both"/>
-</enum>
-
-<enum name="SimpleCacheSyncCheckEOFResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Read Failure"/>
-  <int value="2" label="Magic Number Mismatch"/>
-  <int value="3" label="CRC Mismatch"/>
-</enum>
-
-<enum name="SimpleCacheSyncCloseResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Write Failure"/>
-</enum>
-
-<enum name="SimpleCacheSyncCreateResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Platform File Error"/>
-  <int value="2" label="Can't Write Header"/>
-  <int value="3" label="Can't Write Key"/>
-</enum>
-
-<enum name="SimpleCacheSyncOpenResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Platform File Error"/>
-  <int value="2" label="Can't Read Header"/>
-  <int value="3" label="Bad Magic Number"/>
-  <int value="4" label="Bad Version"/>
-  <int value="5" label="Can't Read Key"/>
-  <int value="6" label="Key Mismatch"/>
-  <int value="7" label="Hash Mismatch"/>
-  <int value="8" label="Sparse Open Failed"/>
-</enum>
-
-<enum name="SimpleCacheSyncSHA256Result" type="int">
-  <int value="0" label="Not Present"/>
-  <int value="1" label="Matched"/>
-  <int value="2" label="Did Not Match"/>
-</enum>
-
-<enum name="SimpleCacheSyncWriteResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Pretruncate Failure"/>
-  <int value="2" label="Write Failure"/>
-  <int value="3" label="Truncate Failure"/>
-  <int value="4" label="Lazy Stream Entry Doomed"/>
-  <int value="5" label="Lazy Create Failure"/>
-  <int value="6" label="Lazy Initialization Failure"/>
-</enum>
-
-<enum name="SimpleCacheWriteDependencyType" type="int">
-  <int value="0" label="First operation in the queue (Optimistic)"/>
-  <int value="1" label="Follows conflicting optimistic write"/>
-  <int value="2" label="Follows non conflicting optimistic write"/>
-  <int value="3" label="Follows conflicting conservative write"/>
-  <int value="4" label="Follows non conflicting conservative write"/>
-  <int value="5" label="Follows conflicting read"/>
-  <int value="6" label="Follows non conflicting read"/>
-  <int value="7" label="Follows other operation"/>
-</enum>
-
-<enum name="SimpleCacheWriteResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Invalid Argument"/>
-  <int value="2" label="Over Max Size"/>
-  <int value="3" label="Bad State"/>
-  <int value="4" label="Synchronous Write Failure"/>
-  <int value="5" label="Fast Empty Return (Success)"/>
-</enum>
-
-<enum name="SimpleGeolocationRequestEvent" type="int">
-  <int value="0" label="Request start"/>
-  <int value="1" label="Response success"/>
-  <int value="2" label="Response not OK"/>
-  <int value="3" label="Response empty"/>
-  <int value="4" label="Response malformed"/>
-</enum>
-
-<enum name="SimpleGeolocationRequestHasCellTowers" type="int">
-  <int value="0" label="No cell tower data in request."/>
-  <int value="1" label="Cell tower data present."/>
-</enum>
-
-<enum name="SimpleGeolocationRequestHasWiFiAccessPoints" type="int">
-  <int value="0" label="No WiFi data in request."/>
-  <int value="1" label="WiFi data present."/>
-</enum>
-
-<enum name="SimpleGeolocationRequestResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Server error"/>
-  <int value="3" label="Request is cancelled."/>
-</enum>
-
-<enum name="SimpleIndexState" type="int">
-  <int value="0" label="Corrupt"/>
-  <int value="1" label="Stale"/>
-  <int value="2" label="Fresh"/>
-  <int value="3" label="Fresh index with cache updated since backend start"/>
-</enum>
-
-<enum name="SiteEngagementServiceEngagementType" type="int">
-  <int value="0" label="Navigation"/>
-  <int value="1" label="Keypress"/>
-  <int value="2" label="Mouse down"/>
-  <int value="3" label="Tap gesture"/>
-  <int value="4" label="Scroll (mouse wheel or touch)"/>
-  <int value="5" label="Media (foreground tab)"/>
-  <int value="6" label="Media (background tab)"/>
-  <int value="7" label="Webapp shortcut launch"/>
-</enum>
-
-<enum name="SiteIsolationMimeType" type="int">
-  <int value="0" label="HTML"/>
-  <int value="1" label="XML"/>
-  <int value="2" label="JSON"/>
-  <int value="3" label="Plain"/>
-  <int value="4" label="Others"/>
-</enum>
-
-<enum name="SkiaFilterQuality" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="Low"/>
-  <int value="2" label="Medium"/>
-  <int value="3" label="High"/>
-</enum>
-
-<enum name="SkiaLockTexturePath" type="int">
-  <int value="0" label="Failure"/>
-  <int value="1" label="Pre-Existing"/>
-  <int value="2" label="Native"/>
-  <int value="3" label="Compressed"/>
-  <int value="4" label="YUV"/>
-  <int value="5" label="RGBA"/>
-</enum>
-
-<enum name="SkiaScaleFactor" type="int">
-  <int value="0" label="Upscale"/>
-  <int value="1" label="No Scale"/>
-  <int value="2" label="Downscale"/>
-  <int value="3" label="Large Downscale"/>
-</enum>
-
-<enum name="SnackbarIdentifier" type="int">
-  <int value="-2" label="TEST_SNACKBAR"/>
-  <int value="-1" label="UNKNOWN"/>
-  <int value="0" label="BOOKMARK_ADDED"/>
-  <int value="1" label="BOOKMARK_DELETE_UNDO"/>
-  <int value="2" label="NTP_MOST_VISITED_DELETE_UNDO"/>
-  <int value="3" label="OFFLINE_PAGE_RELOAD"/>
-  <int value="4" label="AUTO_LOGIN"/>
-  <int value="5" label="OMNIBOX_GEOLOCATION"/>
-  <int value="6" label="LOFI"/>
-  <int value="7" label="DATA_USE_STARTED"/>
-  <int value="8" label="DATA_USE_ENDED"/>
-  <int value="9" label="DOWNLOAD_SUCCEEDED"/>
-  <int value="10" label="DOWNLOAD_FAILED"/>
-  <int value="11" label="TAB_CLOSE_UNDO"/>
-  <int value="12" label="TAB_CLOSE_ALL_UNDO"/>
-  <int value="13" label="DOWNLOAD_DELETE_UNDO"/>
-  <int value="14" label="SPECIAL_LOCALE"/>
-  <int value="15" label="BLIMP"/>
-  <int value="16" label="DATA_REDUCTION_PROMO"/>
-  <int value="17" label="HISTORY_LINK_COPIED"/>
-</enum>
-
-<enum name="SnippetOpenMethod" type="int">
-  <int value="0" label="Plain click"/>
-  <int value="1" label="New Window"/>
-  <int value="2" label="New Tab"/>
-  <int value="3" label="Incognito Tab"/>
-  <int value="4" label="Save for Offline"/>
-</enum>
-
-<enum name="SnippetsInteractions" type="int">
-  <int value="0" label="Snippets were shown to the user"/>
-  <int value="1" label="User scrolled through the snippets"/>
-  <int value="2" label="User clicked on a snippet into the host website"/>
-  <int value="3" label="User swiped a snippet away (obsolete)"/>
-  <int value="4" label="User swiped a snippet away after visiting"/>
-  <int value="5" label="User swiped a snippet away without visiting"/>
-  <int value="6"
-      label="User scrolled below the fold (max once per NTP load). Obsolete."/>
-</enum>
-
-<enum name="SocketErrorCode" type="int">
-  <int value="0" label="ERR_MSG_TOO_BIG"/>
-  <int value="1" label="ERR_ADDRESS_UNREACHABLE"/>
-  <int value="2" label="ERR_ADDRESS_INVALID"/>
-  <int value="3" label="ERR_INTERNET_DISCONNECTED"/>
-  <int value="4" label="ERR_TIMED_OUT"/>
-  <int value="5" label="ERR_INSUFFICIENT_RESOURCES"/>
-  <int value="6" label="ERR_OUT_OF_MEMORY"/>
-  <int value="7" label="ERR_OTHER"/>
-</enum>
-
-<enum name="SocketStreamConnectionType" type="int">
-  <int value="0" label="None"/>
-  <int value="1" label="All"/>
-  <int value="2" label="Tunnel"/>
-  <int value="3" label="SOCKS"/>
-  <int value="4" label="SSL"/>
-  <int value="5" label="Secure proxy"/>
-</enum>
-
-<enum name="SocketStreamProtocolType" type="int">
-  <int value="0" label="unknown"/>
-  <int value="1" label="ws"/>
-  <int value="2" label="wss"/>
-</enum>
-
-<enum name="SoftwareImageDecodeState" type="int">
-  <int value="0" label="Wasted"/>
-  <int value="1" label="Used"/>
-  <int value="2" label="Used, relock failed"/>
-  <int value="3" label="Wasted, relocked"/>
-  <int value="4" label="Used, relocked"/>
-</enum>
-
-<enum name="SoftwareReporterExperimentError" type="int">
-  <int value="1" label="Bad tag"/>
-  <int value="2" label="Bad parameters"/>
-</enum>
-
-<enum name="SoftwareReporterLogsUploadEnabled" type="int">
-  <int value="0" label="Enabled"/>
-  <int value="1" label="SBER Disabled"/>
-  <int value="2" label="Recently sent logs"/>
-</enum>
-
-<enum name="SoftwareReporterLogsUploadResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Request failed"/>
-  <int value="2" label="Invalid response"/>
-  <int value="3" label="Timed out"/>
-  <int value="4" label="Internal error"/>
-  <int value="5" label="Report too large"/>
-  <int value="6" label="No network"/>
-</enum>
-
-<enum name="SoftwareReporterLogsUploadResultRegistryError" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Invalid registry key"/>
-  <int value="2" label="Value not found"/>
-  <int value="3" label="Value out of bounds"/>
-</enum>
-
-<enum name="SpdyFrameFlowControlState" type="int">
-  <int value="0" label="Send not stalled"/>
-  <int value="1" label="Send stalled by stream"/>
-  <int value="2" label="Send stalled by session"/>
-  <int value="3" label="Send stalled by stream and session"/>
-</enum>
-
-<enum name="SpdyIPPoolDomainMatch" type="int">
-  <int value="0" label="mismatch"/>
-  <int value="1" label="match"/>
-</enum>
-
-<!-- Replaced by SpdyProtocolErrorDetails2 on 2013-04-19. -->
-
-<enum name="SpdyProtocolErrorDetails" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Invalid Control Frame"/>
-  <int value="2" label="Control Frame Payload Too Large"/>
-  <int value="3" label="Zlib Init Failure"/>
-  <int value="4" label="Unsupported Version"/>
-  <int value="5" label="Decompress Failure"/>
-  <int value="6" label="Compress Failure"/>
-  <int value="7" label="Credential Frame Corrupt"/>
-  <int value="8" label="Invalid Data Frame Flags"/>
-<!-- r181910 added an enum value here, so don't trust the counts for
-     the values below for Chrome builds after that revision. -->
-
-  <int value="9" label="Invalid Status Code"/>
-  <int value="10" label="Protocol Error"/>
-  <int value="11" label="Invalid Stream"/>
-  <int value="12" label="Refused Stream"/>
-  <int value="13" label="Unsupported Version"/>
-  <int value="14" label="Cancel"/>
-  <int value="15" label="Internal Error"/>
-  <int value="16" label="Flow Control Error"/>
-  <int value="17" label="Stream In Use"/>
-  <int value="18" label="Stream Already Closed"/>
-  <int value="19" label="Invalid Credentials"/>
-  <int value="20" label="Frame Too Large"/>
-  <int value="21" label="Unexpected Ping"/>
-  <int value="22" label="Rst Stream For Non Active Stream"/>
-  <int value="23" label="Spdy Compression Failure"/>
-  <int value="24" label="Request For Secure Content Over Insecure Session"/>
-  <int value="25" label="Protocol Error Syn Reply Not Received"/>
-  <int value="26" label="Num Spdy Protocol Error Details"/>
-</enum>
-
-<enum name="SpdyProtocolErrorDetails2" type="int">
-<!-- SpdyFramer::SpdyErrors -->
-
-  <int value="0" label="No error"/>
-  <int value="1" label="Invalid Control Frame"/>
-  <int value="2" label="Control Frame Payload Too Large"/>
-  <int value="3" label="Zlib Init Failure"/>
-  <int value="4" label="Unsupported Version"/>
-  <int value="5" label="Decompress Failure"/>
-  <int value="6" label="Compress Failure"/>
-  <int value="7" label="Credential Frame Corrupt"/>
-  <int value="8" label="Invalid Data Frame Flags"/>
-  <int value="9" label="Invalid Control Frame Flags"/>
-<!-- SpdyRstStreamStatus -->
-
-  <int value="10" label="(Unused)"/>
-  <int value="11" label="Protocol Error"/>
-  <int value="12" label="Closed Stream"/>
-  <int value="13" label="Refused Stream"/>
-  <int value="14" label="Unsupported Version"/>
-  <int value="15" label="Cancel"/>
-  <int value="16" label="Internal Error"/>
-  <int value="17" label="Flow Control Error"/>
-  <int value="18" label="Stream In Use"/>
-  <int value="19" label="Stream Already Closed"/>
-  <int value="20" label="Invalid Credentials"/>
-  <int value="21" label="Frame Too Large"/>
-<!-- SpdySession errors -->
-
-  <int value="22" label="Unexpected Ping"/>
-  <int value="23" label="Rst Stream For Non Active Stream"/>
-  <int value="24" label="Spdy Compression Failure"/>
-  <int value="25" label="Request For Secure Content Over Insecure Session"/>
-  <int value="26" label="Syn Reply Not Received"/>
-  <int value="27" label="Invalid Window Update Size"/>
-  <int value="28" label="Receive Window Size Violation"/>
-<!-- More SpdyFramer::SpdyErrors -->
-
-  <int value="29" label="GoAway Frame Corrupt"/>
-  <int value="30" label="RstStream Frame Corrupt"/>
-  <int value="31" label="Unexpected Frame (Expected Continuation)"/>
-<!-- More SpdyRstStreamStatus -->
-
-  <int value="32" label="Timeout waiting for settings acknowledgement"/>
-  <int value="33"
-      label="Connection established in response to CONNECT request was
-             abnormally closed"/>
-  <int value="34" label="Peer exhibiting suspect behavior."/>
-  <int value="35" label="Inadequate security."/>
-  <int value="36" label="HTTP/1.1 required."/>
-<!-- More SpdyFramer::SpdyErrors -->
-
-  <int value="37" label="Invalid control frame size."/>
-  <int value="38" label="Invalid stream ID."/>
-  <int value="39" label="Invalid padding length."/>
-  <int value="40" label="Oversized payload."/>
-<!-- More SpdyRstStreamStatus -->
-
-  <int value="41" label="No error."/>
-  <int value="42" label="Compression error."/>
-</enum>
-
-<enum name="SpdyProtocolVersion" type="int">
-  <summary>
-    SPDY protocol version identifier, including major and minor protocol
-    numbers, and draft versions where appropriate.
-  </summary>
-  <int value="0" label="SPDY 2.0"/>
-  <int value="1" label="SPDY 3.0"/>
-  <int value="2" label="SPDY 3.1"/>
-  <int value="3" label="HTTP/2 draft-14"/>
-  <int value="4" label="HTTP/2 draft-15"/>
-  <int value="5" label="HTTP/2 draft-16"/>
-  <int value="6" label="HTTP/2 draft-17"/>
-  <int value="7" label="HTTP/2"/>
-</enum>
-
-<enum name="SpdySessionGet" type="int">
-  <int value="0" label="created new"/>
-  <int value="1" label="found existing"/>
-  <int value="2" label="found existing from IP Pool"/>
-  <int value="3" label="imported from socket"/>
-</enum>
-
-<enum name="SpdySettingsReceived" type="int">
-  <int value="0" label="not received"/>
-  <int value="1" label="received"/>
-</enum>
-
-<enum name="SpdySettingsSent" type="int">
-  <int value="0" label="not sent"/>
-  <int value="1" label="sent"/>
-</enum>
-
-<enum name="SpecialLocalePromoAction" type="int">
-  <int value="0" label="Use Sogou"/>
-  <int value="1" label="Keep Google"/>
-  <int value="2" label="Settings"/>
-  <int value="3" label="Back key"/>
-</enum>
-
-<enum name="SpecialShFileOperationCodes" type="int">
-  <summary>Legacy error codes still returned by |ShFileOperation()|</summary>
-  <int value="5" label="Access denied (Win32)"/>
-  <int value="32" label="Sharing violation (Win32)"/>
-  <int value="87" label="Invalid parameter (Win32)"/>
-  <int value="113" label="Source and Destination are same file"/>
-  <int value="114" label="Multiple source mapped to single destination"/>
-  <int value="115" label="Rename to different directory"/>
-  <int value="116" label="Source root"/>
-  <int value="117" label="Canceled by user"/>
-  <int value="118" label="Destination is subtree of source"/>
-  <int value="120" label="Denied by security settings"/>
-  <int value="121" label="Path length exceeded MAX_PATH"/>
-  <int value="122" label="Multiple destination paths"/>
-  <int value="124" label="Path invalid"/>
-  <int value="125" label="Source and destination have same parent"/>
-  <int value="126" label="Destination exists"/>
-  <int value="128" label="Destination exists as folder"/>
-  <int value="129" label="Name length exceeded MAX_PATH"/>
-  <int value="130" label="Destination read-only CD-ROM"/>
-  <int value="131" label="Destination read-only DVD"/>
-  <int value="132" label="Destination writable CD-ROM"/>
-  <int value="133" label="File too large"/>
-  <int value="134" label="Source read-only CD-ROM"/>
-  <int value="135" label="Source read-only DVD"/>
-  <int value="136" label="Source writable CD-ROM"/>
-  <int value="183" label="Operation exceeded MAX_PATH"/>
-  <int value="1026" label="Invalid path / unknown"/>
-  <int value="65536" label="Unspecified destination error"/>
-  <int value="65652" label="Destination root"/>
-</enum>
-
-<enum name="SpeculativeRestoreApplicability" type="int">
-  <int value="0" label="Applicable"/>
-  <int value="1" label="Not applicable (tablet)"/>
-  <int value="2" label="Not applicable (low-memory device)"/>
-  <int value="3" label="Not applicable (bandwidth management)"/>
-</enum>
-
-<enum name="SpeculativeRestorePredictionAccuracy" type="int">
-  <int value="0" label="Hit"/>
-  <int value="1" label="Miss (different tab)"/>
-  <int value="2" label="Miss (tab not switched)"/>
-</enum>
-
-<enum name="SpeculativeRestoreTabStatus" type="int">
-  <int value="0" label="Already loaded"/>
-  <int value="1" label="Needs restore"/>
-</enum>
-
-<enum name="SplashscreenColorStatus" type="int">
-  <int value="0" label="Default color"/>
-  <int value="1" label="Custom color"/>
-</enum>
-
-<enum name="SplashscreenHidesReason" type="int">
-  <int value="0" label="First Paint"/>
-  <int value="1" label="Page Load Finished"/>
-  <int value="2" label="Page Load Failed"/>
-  <int value="3" label="Crash"/>
-</enum>
-
-<enum name="SplashscreenIconType" type="int">
-  <int value="0" label="No splashscreen icon"/>
-  <int value="1" label="Fallback icon"/>
-  <int value="2" label="Custom icon"/>
-  <int value="3" label="Small custom icon"/>
-</enum>
-
-<enum name="SqliteErrorCode" type="int">
-  <summary>Error codes returned by SQLite - see sqlite3.h</summary>
-  <int value="0" label="SQLITE_OK">Successful result</int>
-  <int value="1" label="SQLITE_ERROR">SQL error or missing database</int>
-  <int value="2" label="SQLITE_INTERNAL">
-    NOT USED. Internal logic error in SQLite
-  </int>
-  <int value="3" label="SQLITE_PERM">Access permission denied</int>
-  <int value="4" label="SQLITE_ABORT">Callback routine requested an abort</int>
-  <int value="5" label="SQLITE_BUSY">The database file is locked</int>
-  <int value="6" label="SQLITE_LOCKED">A table in the database is locked</int>
-  <int value="7" label="SQLITE_NOMEM">A malloc() failed</int>
-  <int value="8" label="SQLITE_READONLY">
-    Attempt to write a readonly database
-  </int>
-  <int value="9" label="SQLITE_INTERRUPT">
-    Operation terminated by sqlite3_interrupt()
-  </int>
-  <int value="10" label="SQLITE_IOERR">
-    Some kind of disk I/O error occurred
-  </int>
-  <int value="11" label="SQLITE_CORRUPT">
-    The database disk image is malformed
-  </int>
-  <int value="12" label="SQLITE_NOTFOUND">
-    NOT USED. Table or record not found
-  </int>
-  <int value="13" label="SQLITE_FULL">
-    Insertion failed because database is full
-  </int>
-  <int value="14" label="SQLITE_CANTOPEN">Unable to open the database file</int>
-  <int value="15" label="SQLITE_PROTOCOL">
-    NOT USED. Database lock protocol error
-  </int>
-  <int value="16" label="SQLITE_EMPTY">Database is empty</int>
-  <int value="17" label="SQLITE_SCHEMA">The database schema changed</int>
-  <int value="18" label="SQLITE_TOOBIG">String or BLOB exceeds size limit</int>
-  <int value="19" label="SQLITE_CONSTRAINT">
-    Abort due to contraint violation
-  </int>
-  <int value="20" label="SQLITE_MISMATCH">Data type mismatch</int>
-  <int value="21" label="SQLITE_MISUSE">Library used incorrectly</int>
-  <int value="22" label="SQLITE_NOLFS">
-    Uses OS features not supported on host
-  </int>
-  <int value="23" label="SQLITE_AUTH">Authorization denied</int>
-  <int value="24" label="SQLITE_FORMAT">Auxiliary database format error</int>
-  <int value="25" label="SQLITE_RANGE">
-    2nd parameter to sqlite3_bind() out of range
-  </int>
-  <int value="26" label="SQLITE_NOTADB">
-    File opened that is not a database file
-  </int>
-  <int value="27" label="SQLITE_NOTICE">Notifications from sqlite3_log()</int>
-  <int value="28" label="SQLITE_WARNING">Warnings from sqlite3_log()</int>
-  <int value="100" label="SQLITE_ROW">sqlite3_step() has another row ready</int>
-  <int value="101" label="SQLITE_DONE">
-    sqlite3_step() has finished executing
-  </int>
-  <int value="261" label="SQLITE_BUSY_RECOVERY">TBD</int>
-  <int value="262" label="SQLITE_LOCKED_SHAREDCACHE">TBD</int>
-  <int value="264" label="SQLITE_READONLY_RECOVERY">TBD</int>
-  <int value="266" label="SQLITE_IOERR_READ">Error reading from file</int>
-  <int value="267" label="SQLITE_CORRUPT_VTAB">TBD</int>
-  <int value="270" label="SQLITE_CANTOPEN_NOTEMPDIR">TBD</int>
-  <int value="275" label="SQLITE_CONSTRAINT_CHECK">TBD</int>
-  <int value="279" label="SQLITE_AUTH_USER">TBD</int>
-  <int value="283" label="SQLITE_NOTICE_RECOVER_WAL">TBD</int>
-  <int value="284" label="SQLITE_WARNING_AUTOINDEX">TBD</int>
-  <int value="516" label="SQLITE_ABORT_ROLLBACK">TBD</int>
-  <int value="517" label="SQLITE_BUSY_SNAPSHOT">TBD</int>
-  <int value="520" label="SQLITE_READONLY_CANTLOCK">TBD</int>
-  <int value="522" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
-  <int value="526" label="SQLITE_CANTOPEN_ISDIR">
-    Database file is directory
-  </int>
-  <int value="531" label="SQLITE_CONSTRAINT_COMMITHOOK">TBD</int>
-  <int value="539" label="SQLITE_NOTICE_RECOVER_ROLLBACK">TBD</int>
-  <int value="776" label="SQLITE_READONLY_ROLLBACK">
-    Cannot rollback due to readonly file
-  </int>
-  <int value="778" label="SQLITE_IOERR_WRITE">
-    Error writing to file (other than SQLITE_FULL)
-  </int>
-  <int value="782" label="SQLITE_CANTOPEN_FULLPATH">TBD</int>
-  <int value="787" label="SQLITE_CONSTRAINT_FOREIGNKEY">
-    Constraint failure due to foreign key violation
-  </int>
-  <int value="1032" label="SQLITE_READONLY_DBMOVED">
-    Readonly because database file was moved or unlinked while open
-  </int>
-  <int value="1034" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
-  <int value="1038" label="SQLITE_CANTOPEN_CONVPATH">TBD</int>
-  <int value="1043" label="SQLITE_CONSTRAINT_FUNCTION">TBD</int>
-  <int value="1290" label="SQLITE_IOERR_DIR_FSYNC">
-    Error syncing directory changes to disk
-  </int>
-  <int value="1299" label="SQLITE_CONSTRAINT_NOTNULL">
-    NOTNULL constraint violated
-  </int>
-  <int value="1546" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
-  <int value="1555" label="SQLITE_CONSTRAINT_PRIMARYKEY">
-    Primary key not unique
-  </int>
-  <int value="1802" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
-  <int value="1811" label="SQLITE_CONSTRAINT_TRIGGER">
-    Constraint failed due to trigger raise
-  </int>
-  <int value="2058" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
-  <int value="2067" label="SQLITE_CONSTRAINT_UNIQUE">
-    Unique constraint failed
-  </int>
-  <int value="2314" label="SQLITE_IOERR_RDLOCK">
-    Error getting read lock - should not be possible
-  </int>
-  <int value="2323" label="SQLITE_CONSTRAINT_VTAB">TBD</int>
-  <int value="2570" label="SQLITE_IOERR_DELETE">Error deleting file</int>
-  <int value="2579" label="SQLITE_CONSTRAINT_ROWID">Rowid not unique</int>
-  <int value="2826" label="SQLITE_IOERR_BLOCKED">
-    Deadlock due to other process access to SQLite files
-  </int>
-  <int value="3082" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
-  <int value="3338" label="SQLITE_IOERR_ACCESS">
-    Error getting file attributes (other than not found)
-  </int>
-  <int value="3594" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
-    Error while querying lock status
-  </int>
-  <int value="3850" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
-  <int value="4106" label="SQLITE_IOERR_CLOSE">Error closing file</int>
-  <int value="4362" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
-  <int value="4618" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
-  <int value="4874" label="SQLITE_IOERR_SHMSIZE">
-    Error in stat while mmapping file
-  </int>
-  <int value="5130" label="SQLITE_IOERR_SHMLOCK">Unused</int>
-  <int value="5386" label="SQLITE_IOERR_SHMMAP">TBD</int>
-  <int value="5642" label="SQLITE_IOERR_SEEK">TBD</int>
-  <int value="5898" label="SQLITE_IOERR_DELETE_NOENT">TBD</int>
-  <int value="6154" label="SQLITE_IOERR_MMAP">TBD</int>
-  <int value="6410" label="SQLITE_IOERR_GETTEMPPATH">TBD</int>
-  <int value="6666" label="SQLITE_IOERR_CONVPATH">TBD</int>
-</enum>
-
-<enum name="SqliteIOERRCode" type="int">
-  <obsolete>
-    Replaced 5/14/2013 by expanded Sqlite.Error histogram.
-  </obsolete>
-  <summary>Extended error codes returned by SQLite - see sqlite3.h</summary>
-  <int value="0" label="SQLITE_IOERR">No extended code given</int>
-  <int value="1" label="SQLITE_IOERR_READ">Error reading from file</int>
-  <int value="2" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
-  <int value="3" label="SQLITE_IOERR_WRITE">
-    Error writing to file (other than SQLITE_FULL)
-  </int>
-  <int value="4" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
-  <int value="5" label="SQLITE_IOERR_DIR_FSYNC">
-    Error syncing directory changes to disk
-  </int>
-  <int value="6" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
-  <int value="7" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
-  <int value="8" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
-  <int value="9" label="SQLITE_IOERR_RDLOCK">
-    Error getting read lock - should not be possible
-  </int>
-  <int value="10" label="SQLITE_IOERR_DELETE">Error deleting file</int>
-  <int value="11" label="SQLITE_IOERR_BLOCKED">
-    Deadlock due to other process access to SQLite files
-  </int>
-  <int value="12" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
-  <int value="13" label="SQLITE_IOERR_ACCESS">
-    Error getting file attributes (other than not found)
-  </int>
-  <int value="14" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
-    Error while querying lock status
-  </int>
-  <int value="15" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
-  <int value="16" label="SQLITE_IOERR_CLOSE">Error closing file</int>
-  <int value="17" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
-  <int value="18" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
-  <int value="19" label="SQLITE_IOERR_SHMSIZE">
-    Error in stat while mmapping file
-  </int>
-  <int value="20" label="SQLITE_IOERR_SHMLOCK">Unused</int>
-</enum>
-
-<enum name="SqliteRecoveryEventEnum" type="int">
-  <summary>
-    Track successful completion or failure of sql::Recovery implementation.
-  </summary>
-  <int value="0" label="RECOVERY_SUCCESS_BEGIN">
-    sql::Recovery::Init() (helper for Begin()) completely successfully.
-  </int>
-  <int value="1" label="RECOVERY_FAILED_OPEN_TEMPORARY">
-    Failed to open temporary database to recover into.
-  </int>
-  <int value="2" label="RECOVERY_FAILED_VIRTUAL_TABLE_INIT">
-    Failed to initialize recover vtable subsystem for connection.
-  </int>
-  <int value="3" label="RECOVERY_FAILED_VIRTUAL_TABLE_SYSTEM_SQLITE">
-    USE_SYSTEM_SQLITE in force, recovery virtual table not available.
-  </int>
-  <int value="4" label="RECOVERY_FAILED_WRITABLE_SCHEMA">
-    Failed to enable writable_schema.
-  </int>
-  <int value="5" label="RECOVERY_FAILED_ATTACH">
-    Failed to attach corrupt database to recovery database.
-  </int>
-  <int value="6" label="RECOVERY_SUCCESS_BACKUP">
-    sql::Recovery::Backup() (helper for Recovered()) completely successfully.
-  </int>
-  <int value="7" label="RECOVERY_FAILED_BACKUP_INIT">
-    Failed sqlite3_backup_init().  Error code in Sqlite.RecoveryHandle.
-  </int>
-  <int value="8" label="RECOVERY_FAILED_BACKUP_STEP">
-    Failed sqlite3_backup_step().  Error code in Sqlite.RecoveryStep.
-  </int>
-  <int value="9" label="RECOVERY_SUCCESS_AUTORECOVER">
-    sql::Recovery::AutoRecoverTable() completed successfully.
-  </int>
-  <int value="10" label="RECOVERY_FAILED_AUTORECOVER_UNRECOGNIZED_TYPE">
-    Failed sqlite3_backup_step().  Error code in Sqlite.RecoveryStep.
-  </int>
-  <int value="11" label="RECOVERY_FAILED_AUTORECOVER_MISSING_TABLE">
-    AutoRecoverTable() could not find the target table.
-  </int>
-  <int value="12" label="RECOVERY_FAILED_AUTORECOVER_CREATE">
-    AutoRecoverTable() failed creating recovery vtable.
-  </int>
-  <int value="13" label="RECOVERY_FAILED_AUTORECOVER_INSERT">
-    AutoRecoverTable() failed copying data from recovery to target table.
-  </int>
-  <int value="14" label="RECOVERY_FAILED_AUTORECOVER_DROP">
-    AutoRecoverTable() failed to drop recovery table.
-  </int>
-  <int value="15" label="RECOVERY_SUCCESS_SETUP_META">
-    sql::Recovery::SetupMeta() completed successfully.
-  </int>
-  <int value="16" label="RECOVERY_FAILED_META_CREATE">
-    SetupMeta() failed to create meta recovery table.
-  </int>
-  <int value="17" label="RECOVERY_SUCCESS_META_VERSION">
-    GetMetaVersionNumber() found no version row in meta table.
-  </int>
-  <int value="18" label="RECOVERY_FAILED_META_QUERY">
-    GetMetaVersionNumber() failed querying recovery meta table.
-  </int>
-  <int value="19" label="RECOVERY_FAILED_META_NO_VERSION">
-    GetMetaVersionNumber() found no version row in meta table.
-  </int>
-  <int value="20" label="RECOVERY_SUCCESS_AUTORECOVERDB">
-    sql::Recovery::RecoverDatabaseOrRaze() completed successfully.
-  </int>
-  <int value="21" label="RECOVERY_FAILED_AUTORECOVERDB_BEGIN">
-    Autorecover could not setup the database for recovery attempt.
-  </int>
-  <int value="22" label="RECOVERY_FAILED_AUTORECOVERDB_SCHEMASELECT">
-    Autorecover could not read corrupt db schema.
-  </int>
-  <int value="23" label="RECOVERY_FAILED_AUTORECOVERDB_SCHEMACREATE">
-    Autorecover could not create new db schema.
-  </int>
-  <int value="24" label="RECOVERY_FAILED_AUTORECOVERDB_NAMESELECT">
-    Autorecover could not read table names from corrupt db.
-  </int>
-  <int value="25" label="RECOVERY_FAILED_AUTORECOVERDB_TABLE">
-    Autorecover failed when recovering a table.
-  </int>
-  <int value="26" label="RECOVERY_FAILED_AUTORECOVERDB_SEQUENCE">
-    Autorecover failed when recovering sequence table.
-  </int>
-  <int value="27" label="RECOVERY_FAILED_AUTORECOVERDB_AUX">
-    Autorecover failed when recovering triggers, views, or virtual tables.
-  </int>
-  <int value="28" label="RECOVERY_FAILED_AUTORECOVERDB_NOTADB_DELETE">
-    Autorecover failed setup with NOTADB, then failed deleting the db.
-  </int>
-  <int value="29" label="RECOVERY_FAILED_AUTORECOVERDB_NOTADB_REOPEN">
-    Autorecover failed setup with NOTADB, then failed to re-open the db after
-    deleting it.
-  </int>
-  <int value="30" label="RECOVERY_FAILED_AUTORECOVERDB_NOTADB_QUERY">
-    Autorecover failed setup with NOTADB, then failed to query the db after
-    deleting it.
-  </int>
-  <int value="31" label="RECOVERY_SUCCESS_AUTORECOVERDB_NOTADB_DELETE">
-    Autorecover failed setup with NOTADB, then successfully deleted the
-    unrecoverable db and verified that it now works.
-  </int>
-</enum>
-
-<enum name="SqliteStatsEnum" type="int">
-  <summary/>
-  <int value="0" label="EVENT_STATEMENT_RUN">
-    Count statements initiated by Step(), Run(), or Execute*().
-  </int>
-  <int value="1" label="EVENT_STATEMENT_ROWS">
-    Count steps which returned SQLITE_ROW.
-  </int>
-  <int value="2" label="EVENT_STATEMENT_SUCCESS">
-    Count statements which ran to completion with no errors.
-  </int>
-  <int value="3" label="EVENT_EXECUTE">Count calls to Execute*().</int>
-  <int value="4" label="EVENT_CHANGES_AUTOCOMMIT">
-    Count rows changed without an explicit transaction.
-  </int>
-  <int value="5" label="EVENT_CHANGES">
-    Count rows changed in an explicit transaction.
-  </int>
-  <int value="6" label="EVENT_BEGIN">Explicit transactions begun.</int>
-  <int value="7" label="EVENT_COMMIT">Explicit transactions committed.</int>
-  <int value="8" label="EVENT_ROLLBACK">Explicit transactions rolled back.</int>
-  <int value="9" label="EVENT_MMAP_META_MISSING">
-    No meta table in mmap probe.
-  </int>
-  <int value="10" label="EVENT_MMAP_META_FAILURE_READ">
-    Failed to read meta table in mmap probe.
-  </int>
-  <int value="11" label="EVENT_MMAP_META_FAILURE_UPDATE">
-    Failed to update meta table in mmap probe.
-  </int>
-  <int value="12" label="EVENT_MMAP_VFS_FAILURE">
-    Failed to access SQLite vfs in mmap probe.
-  </int>
-  <int value="13" label="EVENT_MMAP_FAILED">
-    Found cached failure status in mmap probe.
-  </int>
-  <int value="14" label="EVENT_MMAP_FAILED_NEW">
-    Error while reading database in mmap probe.
-  </int>
-  <int value="15" label="EVENT_MMAP_SUCCESS_NEW">
-    Successfully read to end of database in mmap probe.
-  </int>
-  <int value="16" label="EVENT_MMAP_SUCCESS_PARTIAL">
-    Successfully read some of database in mmap probe.
-  </int>
-  <int value="17" label="EVENT_MMAP_SUCCESS_NO_PROGRESS">
-    Exhausted read quota in mmap probe.
-  </int>
-  <int value="18" label="EVENT_MMAP_STATUS_FAILURE_READ">
-    Failed to read status view in mmap probe.
-  </int>
-  <int value="19" label="EVENT_MMAP_STATUS_FAILURE_UPDATE">
-    Failed to update status view in mmap probe.
-  </int>
-</enum>
-
-<enum name="SqliteVersionDeprecation" type="int">
-  <summary>Sqlite database version deprecation status</summary>
-  <int value="0" label="DEPRECATION_DATABASE_NOT_EMPTY">
-    Database has tables, but no meta table.
-  </int>
-  <int value="1" label="DEPRECATION_DATABASE_UNKNOWN">
-    Failure figuring out if database has tables.
-  </int>
-  <int value="2" label="DEPRECATION_FAILED_VERSION">
-    Failed querying meta table.
-  </int>
-  <int value="3" label="DEPRECATION_NO_VERSION">
-    No version row in meta table.
-  </int>
-  <int value="4" label="DEPRECATION_RAZED">Raze succeeded.</int>
-  <int value="5" label="DEPRECATION_RAZE_FAILED">Raze failed.</int>
-</enum>
-
-<enum name="SqliteVfsEvents" type="int">
-  <summary>I/O events from browser-process SQLite VFS wrapper.</summary>
-  <int value="0" label="VFS_OPEN">Calls to xOpen().</int>
-  <int value="1" label="VFS_DELETE">Calls to xDelete().</int>
-  <int value="2" label="VFS_ACCESS">Calls to xAccess().</int>
-  <int value="3" label="VFS_FULLPATHNAME">Calls to xFullPath().</int>
-  <int value="4" label="VFS_IO_CLOSE">Calls to xClose().</int>
-  <int value="5" label="VFS_IO_READ">Calls to xRead().</int>
-  <int value="6" label="VFS_IO_WRITE">Calls to xWrite().</int>
-  <int value="7" label="VFS_IO_TRUNCATE">Calls to xTruncate().</int>
-  <int value="8" label="VFS_IO_SYNC">Calls to xSync().</int>
-  <int value="9" label="VFS_IO_FILESIZE">Calls to xFileSize().</int>
-  <int value="10" label="VFS_IO_FETCH">Calls to xFetch().</int>
-</enum>
-
-<enum name="SRIResourceIntegrityMismatchEvent" type="int">
-  <int value="0" label="CHECKING_FOR_INTEGRITY_MISMATCH"/>
-  <int value="1" label="REFETCH_DUE_TO_INTEGRITY_MISMATCH"/>
-</enum>
-
-<enum name="SRTCompleted" type="int">
-  <int value="0" label="Not Completed"/>
-  <int value="1" label="Completed"/>
-  <int value="2" label="Completed Later"/>
-</enum>
-
-<enum name="SRTPromptUsage" type="int">
-  <int value="0" label="Shown"/>
-  <int value="1" label="Accepted"/>
-  <int value="2" label="Denied"/>
-  <int value="3" label="Fell back to download page."/>
-  <int value="4" label="SRT download unavailable, no prompt shown."/>
-  <int value="5" label="Closed"/>
-  <int value="6" label="Shown from menu."/>
-</enum>
-
-<enum name="SSLAuthRootConsistency" type="int">
-  <summary>
-    The results of comparing the built-in list of known Windows roots against
-    programatically detecting the built-in status.
-  </summary>
-  <int value="0" label="Not AuthRoot, not built-in">
-    Not detected as from AuthRoot, nor built-in
-    (BUILT_IN_PROPERTY_NOT_FOUND_BUILTIN_NOT_SET)
-  </int>
-  <int value="1" label="Not AuthRoot, but built-in">
-    Not detected as from AuthRoot, but built-in
-    (BUILT_IN_PROPERTY_NOT_FOUND_BUILTIN_SET)
-  </int>
-  <int value="2" label="AuthRoot, not built-in">
-    Detected as from AuthRoot, but not built-in
-    (BUILT_IN_PROPERTY_FOUND_BUILTIN_NOT_SET)
-  </int>
-  <int value="3" label="AuthRoot, built-in">
-    Detected as from AuthRoot and also built-in
-    (BUILT_IN_PROPERTY_FOUND_BUILTIN_SET)
-  </int>
-</enum>
-
-<enum name="SSLCaptivePortal" type="int">
-  <int value="0" label="All captive portal events (CAPTIVE_PORTAL_ALL)"/>
-  <int value="1"
-      label="Chrome captive portal detection enabled
-             (CAPTIVE_PORTAL_DETECTION_ENABLED)"/>
-  <int value="2"
-      label="Chrome captive portal detection enabled on an overridable SSL
-             error page (CAPTIVE_PORTAL_DETECTION_ENABLED_OVERRIDABLE)">
-    This is a subset of CAPTIVE_PORTAL_DETECTION_ENABLED (bucket 1), the only
-    difference is that it is for overridable errors.
-  </int>
-  <int value="3"
-      label="Received a captive portal probe result.
-             (CAPTIVE_PORTAL_PROBE_COMPLETED)">
-    Was the captive portal probe completed before the interstitial was closed?
-    Captive Portal won't be detected unless ::Observe is triggered which might
-    be a few seconds later.
-  </int>
-  <int value="4"
-      label="Received a captive portal result on an overridable SSL error page
-             (CAPTIVE_PORTAL_PROBE_COMPLETED_OVERRIDABLE)">
-    This is a subset of CAPTIVE_PORTAL_PROBE_COMPLETED (bucket 3), the only
-    difference is that it is for overridable errors.
-  </int>
-  <int value="5"
-      label="Received no response or Non-HTTP login page
-             (CAPTIVE_PORTAL_NO_RESPONSE)"/>
-  <int value="6"
-      label="Received no response or Non-HTTP login page on an overridable
-             SSL error page (CAPTIVE_PORTAL_NO_RESPONSE_OVERRIDABLE)"/>
-  <int value="7" label="Detected captive portal (CAPTIVE_PORTAL_DETECTED)"/>
-  <int value="8"
-      label="Detected captive portal on an overridable SSL error page
-             (CAPTIVE_PORTAL_DETECTED_OVERRIDABLE)">
-    This is a subset of CAPTIVE_PORTAL_DETECTED (bucket 7), the only difference
-    is that it is for overridable errors.
-  </int>
-</enum>
-
-<enum name="SSLCipherSuite" type="int">
-  <summary>SSL/TLS cipher suites from the IANA registry</summary>
-  <int value="10" label="TLS_RSA_WITH_3DES_EDE_CBC_SHA"/>
-  <int value="22" label="TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
-  <int value="47" label="TLS_RSA_WITH_AES_128_CBC_SHA"/>
-  <int value="51" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA"/>
-  <int value="53" label="TLS_RSA_WITH_AES_256_CBC_SHA"/>
-  <int value="57" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA"/>
-  <int value="60" label="TLS_RSA_WITH_AES_128_CBC_SHA256"/>
-  <int value="61" label="TLS_RSA_WITH_AES_256_CBC_SHA256"/>
-  <int value="103" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"/>
-  <int value="107" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"/>
-  <int value="156" label="TLS_RSA_WITH_AES_128_GCM_SHA256"/>
-  <int value="157" label="TLS_RSA_WITH_AES_256_GCM_SHA384"/>
-  <int value="158" label="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"/>
-  <int value="159" label="TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"/>
-  <int value="4865" label="TLS_AES_128_GCM_SHA256"/>
-  <int value="4866" label="TLS_AES_256_GCM_SHA384"/>
-  <int value="4867" label="TLS_CHACHA20_POLY1305_SHA256"/>
-  <int value="5815"
-      label="TLS_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256 (experimental)"/>
-  <int value="5816"
-      label="TLS_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (experimental)"/>
-  <int value="5817"
-      label="TLS_CECPQ1_RSA_WITH_AES_256_GCM_SHA384 (experimental)"/>
-  <int value="5818"
-      label="TLS_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384 (experimental)"/>
-  <int value="49159" label="TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"/>
-  <int value="49160" label="TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"/>
-  <int value="49161" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"/>
-  <int value="49162" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"/>
-  <int value="49169" label="TLS_ECDHE_RSA_WITH_RC4_128_SHA"/>
-  <int value="49170" label="TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
-  <int value="49171" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"/>
-  <int value="49172" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"/>
-  <int value="49187" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"/>
-  <int value="49188" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"/>
-  <int value="49191" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"/>
-  <int value="49192" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"/>
-  <int value="49195" label="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"/>
-  <int value="49196" label="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"/>
-  <int value="49199" label="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"/>
-  <int value="49200" label="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"/>
-  <int value="52243"
-      label="TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
-  <int value="52244"
-      label="TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
-  <int value="52245" label="TLS_DHE_RSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
-  <int value="52392" label="TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"/>
-  <int value="52393" label="TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"/>
-</enum>
-
-<enum name="SSLErrorCauses" type="int">
-  <int value="0" label="CLOCK_PAST: System clock set early">
-    This cause is recorded if the SSL error is CERT_DATE_INVALID and Chrome had
-    reason to believe that the system clock was behind.  Methods of detecting
-    clock inaccuracy have changed over time.
-  </int>
-  <int value="1" label="CLOCK_FUTURE: System clock set late">
-    This cause is recorded if the SSL error is CERT_DATE_INVALID and Chrome had
-    reason to believe that the system clock was behind.  Methods of detecting
-    clock inaccuracy have changed over time.
-  </int>
-  <int value="2"
-      label="WWW_SUBDOMAIN_MATCH: Difference between the URL and the DNS is
-             www">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    hostname differs from one of the DNS names in the certificate (CN or SANs)
-    only by the presence or absence of the single-label prefix &quot;www&quot;.
-    This case is not recored if the host name is not a known TLD.
-  </int>
-  <int value="3" label="SUBDOMAIN_MATCH: The URL is a subdomain of the DNS">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    difference between the URL and the DNS name is not &quot;www&quot;. This
-    case is not recorded if the host name is not a known TLD.
-  </int>
-  <int value="4"
-      label="SUBDOMAIN_INVERSE_MATCH: The DNS is a subdomain of the URL">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    difference between the DNS name and the URL is not &quot;www&quot;. This
-    case is not recorded if the host name is not a known TLD.
-  </int>
-  <int value="5"
-      label="SUBDOMAIN_OUTSIDE_WILDCARD: The URL is outside the scope of the
-             wildcard certificate">
-    This cause is recorded only if the ssl error is CERT_COMMON_NAME_INVALID, we
-    have received a wildcard certificate and the scope of a wildcard certificate
-    is too narrow for the hostname. This case is not recorded if the host name
-    is not a known TLD.
-  </int>
-  <int value="6"
-      label="HOST_NAME_NOT_KNOWN_TLD: The host name is not a known TLD">
-    This cause is recorded only for CERT_COMMON_NAME_INVALID errors.
-  </int>
-  <int value="7"
-      label="LIKELY_MULTI_TENANT_HOSTING: The certificate is a shared
-             certificate">
-    This cause is recorded only for CERT_COMMON_NAME_INVALID errors. It is
-    possible that this error overlaps with others but it is not likely because
-    of the heuristics which decide as to what constitutes a shared certificate.
-    In cases of overlap, we emit to only one bucket.
-  </int>
-  <int value="8" label="LOCALHOST: The user is trying to connect to local host">
-    This cause is recorded only for CERT_AUTHORITY_INVALID errors.
-  </int>
-  <int value="9" label="PRIVATE_URL: The user is trying to connect to a VPN">
-    This cause is recorded only for CERT_AUTHORITY_INVALID errors. The user did
-    not receive a certificate signed by a valid CA.
-  </int>
-  <int value="10"
-      label="AUTHORTIY_ERROR_CAPTIVE_PORTAL: Captive portal was detected">
-    This cause is recorded only for CERT_AUTHORITY_INVALID errors. (Deprecated
-    in M47.)
-  </int>
-  <int value="11" label="SELF_SIGNED: The cert is self-signed">
-    This cause is recorded only for CERT_AUTHORITY_INVALID errors.
-  </int>
-  <int value="12" label="EXPIRED_RECENTLY: Cert expired within last 28 days.">
-
-  </int>
-  <int value="13"
-      label="LIKELY_SAME_DOMAIN: Cert likely belongs to the same domain">
-    This case is recorded if the SSL error is CERT_COMMON_NAME_INVALID error and
-    the hostname in request URL has the same domain (effective TLD + 1 label) as
-    the common name or at least one of the subject alternative names in
-    certificate. This case is not recorded if the host name is not a known tld.
-  </int>
-</enum>
-
-<enum name="SSLErrorHandlerEvent" type="int">
-  <int value="0" label="HANDLE_ALL"/>
-  <int value="1" label="SHOW_CAPTIVE_PORTAL_INTERSTITIAL_NONOVERRIDABLE"/>
-  <int value="2" label="SHOW_CAPTIVE_PORTAL_INTERSTITIAL_OVERRIDABLE"/>
-  <int value="3" label="SHOW_SSL_INTERSTITIAL_NONOVERRIDABLE"/>
-  <int value="4" label="SHOW_SSL_INTERSTITIAL_OVERRIDABLE"/>
-  <int value="5" label="WWW_MISMATCH_FOUND"/>
-  <int value="6" label="WWW_MISMATCH_URL_AVAILABLE"/>
-  <int value="7" label="WWW_MISMATCH_URL_NOT_AVAILABLE"/>
-  <int value="8" label="SHOW_BAD_CLOCK"/>
-  <int value="9" label="CAPTIVE_PORTAL_CERT_FOUND"/>
-</enum>
-
-<enum name="SSLErrorTypes" type="int">
-  <int value="0" label="CERT_COMMON_NAME_INVALID"/>
-  <int value="1" label="CERT_DATE_INVALID"/>
-  <int value="2" label="CERT_AUTHORITY_INVALID"/>
-  <int value="3" label="CERT_CONTAINS_ERRORS"/>
-  <int value="4" label="CERT_NO_REVOCATION_MECHANISM"/>
-  <int value="5" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
-  <int value="6" label="CERT_REVOKED"/>
-  <int value="7" label="CERT_INVALID"/>
-  <int value="8" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
-  <int value="9" label="CERT_WEAK_KEY"/>
-  <int value="10" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
-  <int value="11" label="UNKNOWN"/>
-  <int value="12" label="CERT_WEAK_KEY_DH"/>
-  <int value="13" label="CERT_PINNED_KEY_MISSING"/>
-  <int value="14" label="CERT_VALIDITY_TOO_LONG"/>
-</enum>
-
-<enum name="SSLFailureState" type="int">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <int value="0" label="No failure"/>
-  <int value="1" label="Unknown failure"/>
-  <int value="2" label="Failed to process ClientHello"/>
-  <int value="3" label="Buggy AES-GCM"/>
-  <int value="4" label="Failed with client authentication"/>
-  <int value="5" label="Session version mismatch"/>
-  <int value="6" label="Failed with Next Proto Negotiation"/>
-</enum>
-
-<enum name="SSLGoodCertSeenEvent" type="int">
-  <int value="0" label="NO_PREVIOUS_EXCEPTION"/>
-  <int value="1" label="HAD_PREVIOUS_EXCEPTION"/>
-</enum>
-
-<enum name="SSLHashAlgorithm" type="int">
-  <obsolete>
-    Removed June 2016.
-  </obsolete>
-  <int value="0" label="None (unused)"/>
-  <int value="1" label="MD5"/>
-  <int value="2" label="SHA-1"/>
-  <int value="3" label="SHA-224"/>
-  <int value="4" label="SHA-256"/>
-  <int value="5" label="SHA-384"/>
-  <int value="6" label="SHA-512"/>
-</enum>
-
-<enum name="SSLIsExpiredAndDecision" type="int">
-  <int value="0" label="EXPIRED_AND_PROCEED"/>
-  <int value="1" label="EXPIRED_AND_DO_NOT_PROCEED"/>
-  <int value="2" label="NOT_EXPIRED_AND_PROCEED"/>
-  <int value="3" label="NOT_EXPIRED_AND_DO_NOT_PROCEED"/>
-</enum>
-
-<enum name="SSLNegotiatedAlpnProtocol" type="int">
-  <int value="0" label="ALPN not used"/>
-  <int value="1" label="HTTP/1.1 negotiated via ALPN"/>
-  <int value="2" label="HTTP/2 negotiated via ALPN"/>
-</enum>
-
-<enum name="SSLOrQUICVersion" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="SSL 2.0"/>
-  <int value="2" label="SSL 3.0"/>
-  <int value="3" label="TLS 1.0"/>
-  <int value="4" label="TLS 1.1"/>
-  <int value="5" label="TLS 1.2"/>
-  <int value="6" label="TLS 1.3"/>
-  <int value="7" label="QUIC"/>
-</enum>
-
-<enum name="SSLProtocolNegotiation" type="int">
-  <int value="1" label="ALPN, HTTP/1.1"/>
-  <int value="100" label="ALPN, SPDY 2.0"/>
-  <int value="101" label="ALPN, SPDY 3.0"/>
-  <int value="102" label="ALPN, SPDY 3.1"/>
-  <int value="103" label="ALPN, HTTP/2 draft-14"/>
-  <int value="104" label="ALPN, HTTP/2 draft-15"/>
-  <int value="107" label="ALPN, HTTP/2"/>
-  <int value="200" label="ALPN, QUIC/1 + SPDY/3"/>
-  <int value="501" label="NPN, HTTP/1.1"/>
-  <int value="600" label="NPN, SPDY 2.0"/>
-  <int value="601" label="NPN, SPDY 3.0"/>
-  <int value="602" label="NPN, SPDY 3.1"/>
-  <int value="603" label="NPN, HTTP/2 draft-14"/>
-  <int value="604" label="NPN, HTTP/2 draft-15"/>
-  <int value="607" label="NPN, HTTP/2"/>
-  <int value="700" label="NPN, QUIC/1 + SPDY/3"/>
-  <int value="1001" label="NPN, fallback to HTTP/1.1"/>
-  <int value="1100" label="NPN, fallback to SPDY 2.0"/>
-  <int value="1101" label="NPN, fallback to SPDY 3.0"/>
-  <int value="1102" label="NPN, fallback to SPDY 3.1"/>
-  <int value="1103" label="NPN, fallback to HTTP/2 draft-14"/>
-  <int value="1104" label="NPN, fallback to HTTP/2 draft-15"/>
-  <int value="1107" label="NPN, fallback to HTTP/2"/>
-  <int value="1200" label="NPN, fallback to QUIC/1 + SPDY/3"/>
-</enum>
-
-<enum name="SSLResponseTypesV2" type="int">
-  <int value="0" label="SHOW_ALL"/>
-  <int value="1" label="SHOW_OVERRIDABLE"/>
-  <int value="2" label="PROCEED_OVERRIDABLE"/>
-  <int value="3" label="PROCEED_NAME"/>
-  <int value="4" label="PROCEED_DATE"/>
-  <int value="5" label="PROCEED_AUTHORITY"/>
-  <int value="6" label="DONT_PROCEED_OVERRIDABLE"/>
-  <int value="7" label="DONT_PROCEED_NAME"/>
-  <int value="8" label="DONT_PROCEED_DATE"/>
-  <int value="9" label="DONT_PROCEED_AUTHORITY"/>
-  <int value="10" label="MORE"/>
-  <int value="11" label="SHOW_UNDERSTAND"/>
-  <int value="12" label="SHOW_INTERNAL_HOSTNAME">
-    As of M40, this now also includes dotless domains.
-  </int>
-  <int value="13" label="PROCEED_INTERNAL_HOSTNAME">
-    As of M40, this now also includes dotless domains.
-  </int>
-  <int value="14" label="SHOW_NEW_SITE"/>
-  <int value="15" label="PROCEED_NEW_SITE"/>
-  <int value="16"
-      label="User manually typed proceed (PROCEED_MANUAL_NONOVERRIDABLE)"/>
-  <int value="17"
-      label="Chrome captive portal detection enabled
-             (DEPRECATED_CAPTIVE_PORTAL_DETECTION_ENABLED)"/>
-  <int value="18"
-      label="Chrome captive portal detection enabled on an overridable SSL
-             error page
-             (DEPRECATED_CAPTIVE_PORTAL_DETECTION_ENABLED_OVERRIDABLE)"/>
-  <int value="19"
-      label="Received a captive portal result
-             (DEPRECATED_CAPTIVE_PORTAL_PROBE_COMPLETED)"/>
-  <int value="20"
-      label="Received a captive portal result on an overridable SSL error
-             page (DEPRECATED_CAPTIVE_PORTAL_PROBE_COMPLETED_OVERRIDABLE)"/>
-  <int value="21"
-      label="Received no response or Non-HTTP login page
-             (DEPRECATED_CAPTIVE_PORTAL_NO_RESPONSE)"/>
-  <int value="22"
-      label="Received no response or Non-HTTP login page on an overridable
-             SSL error page
-             (DEPRECATED_CAPTIVE_PORTAL_NO_RESPONSE_OVERRIDABLE)"/>
-  <int value="23"
-      label="Detected captive portal (DEPRECATED_CAPTIVE_PORTAL_DETECTED)"/>
-  <int value="24"
-      label="Detected captive portal on an overridable SSL error page
-             (DEPRECATED_CAPTIVE_PORTAL_DETECTED_OVERRIDABLE)"/>
-  <int value="25"
-      label="Displayed clock interstitial. (DISPLAYED_CLOCK_INTERSTITIAL)"/>
-</enum>
-
-<enum name="SSLSignatureAlgorithm" type="int">
-  <int value="513" label="rsa_pkcs1_sha1"/>
-  <int value="515" label="ecdsa_sha1"/>
-  <int value="1025" label="rsa_pkcs1_sha256"/>
-  <int value="1027" label="ecdsa_secp256r1_sha256"/>
-  <int value="1281" label="rsa_pkcs1_sha384"/>
-  <int value="1283" label="ecdsa_secp384r1_sha384"/>
-  <int value="1537" label="rsa_pkcs1_sha512"/>
-  <int value="1539" label="ecdsa_secp521r1_sha512"/>
-  <int value="1792" label="rsa_pss_sha256 (old)"/>
-  <int value="1793" label="rsa_pss_sha384 (old)"/>
-  <int value="1794" label="rsa_pss_sha512 (old)"/>
-  <int value="2052" label="rsa_pss_sha256"/>
-  <int value="2053" label="rsa_pss_sha384"/>
-  <int value="2054" label="rsa_pss_sha512"/>
-</enum>
-
-<enum name="StarsLaunchLocation" type="int">
-  <int value="0" label="All Items"/>
-  <int value="1" label="Uncategorized"/>
-  <int value="2" label="Folder"/>
-  <int value="3" label="Filter"/>
-  <int value="4" label="Search"/>
-  <int value="5" label="Bookmark Editor"/>
-  <int value="6" label="Omnibox"/>
-</enum>
-
-<enum name="StartupProfilingFinishReason" type="int">
-  <int value="0" label="Done (all metrics gathered)"/>
-  <int value="1"
-      label="Abandoned because blocking UI was displayed on startup"/>
-  <int value="2" label="Abandoned because profiled content was hidden"/>
-  <int value="3" label="Abandoned because profiled content was destroyed"/>
-  <int value="4"
-      label="Abandoned because profiled content was navigated away from"/>
-  <int value="5"
-      label="Abandoned because profiled content failed to load its main
-             resource"/>
-</enum>
-
-<enum name="StartupTemperature" type="int">
-  <int value="0" label="Cold startup (mostly hard faults)"/>
-  <int value="1" label="Warm startup (nearly no hard faults)"/>
-  <int value="2" label="Lukewarm startup (in between cold and warm)"/>
-</enum>
-
-<enum name="StartupURLsMigration" type="int">
-  <int value="0" label="Performed migration"/>
-  <int value="1" label="No migration value"/>
-  <int value="2" label="Reset migration"/>
-</enum>
-
-<enum name="State" type="int">
-  <int value="0" label="Canceled"/>
-  <int value="1" label="Dropped"/>
-  <int value="2" label="Created"/>
-  <int value="3" label="Unknown"/>
-  <int value="4" label="Initializing"/>
-  <int value="5" label="Connecting"/>
-  <int value="6" label="Authenticated"/>
-  <int value="7" label="Connected"/>
-  <int value="8" label="Closed"/>
-  <int value="9" label="Failed"/>
-</enum>
-
-<enum name="StateStoreInitResult" type="int">
-  <int value="0"
-      label="Kept pref: platform-specific store non-existent or not
-             supported."/>
-  <int value="1" label="Erased pref: platform-specific store was empty"/>
-  <int value="2" label="Overwrote pref: platform-specific store differed"/>
-  <int value="3" label="No pref change: was equal to platform-specific store"/>
-</enum>
-
-<enum name="StatusHeader" type="int">
-  <int value="0" label="Headers do not include :status header field."/>
-  <int value="1" label=":status header does not start with a number."/>
-  <int value="2" label=":status header is an integer."/>
-  <int value="3" label=":status header is an integer followed by text."/>
-</enum>
-
-<enum name="StayVsLeave" type="int">
-  <int value="0" label="Stay on the current page"/>
-  <int value="1" label="Leave the current page"/>
-</enum>
-
-<enum name="StyleSheetCacheStatus" type="int">
-  <int value="0" label="No usable cache found"/>
-  <int value="1" label="DiskCache served the CSS source"/>
-  <int value="2" label="MemoryCached StyleSheetContents was reused"/>
-</enum>
-
-<enum name="SubresourceFilterActivationDecision" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Activated"/>
-  <int value="2" label="Disabled"/>
-  <int value="3" label="Unsupported scheme"/>
-  <int value="4" label="URL whitelisted"/>
-  <int value="5" label="Activation list not matched"/>
-</enum>
-
-<enum name="SubresourceFilterActivationState" type="int">
-  <int value="0" label="Disabled"/>
-  <int value="1" label="DryRun"/>
-  <int value="2" label="Enabled"/>
-</enum>
-
-<enum name="SubresourceFilterMatchPattern" type="int">
-  <int value="0" label="NoHit"/>
-  <int value="1" label="Last"/>
-  <int value="2" label="Middle"/>
-  <int value="3" label="Middle_Last"/>
-  <int value="4" label="First"/>
-  <int value="5" label="First_Last"/>
-  <int value="6" label="First_Middle"/>
-  <int value="7" label="AllHits"/>
-  <int value="8" label="NoRedirectsHit"/>
-</enum>
-
-<enum name="SubresourceFilterWriteRulesetResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="FailedCreatingScratchDir"/>
-  <int value="2" label="FailedWritingRulesetData"/>
-  <int value="3" label="FailedWritingLicense"/>
-  <int value="4" label="FailedReplaceFile"/>
-  <int value="5" label="FailedDeletePreexisting"/>
-  <int value="6" label="FailedOpeningUnindexedRuleset"/>
-  <int value="7" label="FailedParsingUnindexedRuleset"/>
-  <int value="8" label="FailedCreatingVersionDir"/>
-  <int value="9" label="FailedCreatingSentinelFile"/>
-  <int value="10" label="FailedDeletingSentinelFile"/>
-  <int value="11" label="AbortedBecauseSentinelFileWasPresent"/>
-</enum>
-
-<enum name="SuggestAppsDialogCloseReason" type="int">
-  <int value="0" label="Unknown error"/>
-  <int value="1" label="Item installed"/>
-  <int value="2" label="User cancelled"/>
-  <int value="3" label="Webstore link clicked"/>
-</enum>
-
-<enum name="SuggestAppsDialogInstall" type="int">
-  <int value="0" label="Install succeeded"/>
-  <int value="1" label="Install cancelled"/>
-  <int value="2" label="Install failed"/>
-</enum>
-
-<enum name="SuggestAppsDialogLoad" type="int">
-  <int value="0" label="Load succeeded"/>
-  <int value="1" label="Load cancelled"/>
-  <int value="2" label="Load failed"/>
-</enum>
-
-<enum name="SuggestionAnswerType" type="int">
-  <summary>Type of Answer shown in omnibox suggestion list.</summary>
-  <int value="1" label="Dictionary"/>
-  <int value="2" label="Finance"/>
-  <int value="3" label="Knowledge graph"/>
-  <int value="5" label="Sports"/>
-  <int value="6" label="Sunrise"/>
-  <int value="7" label="Translation"/>
-  <int value="8" label="Weather"/>
-  <int value="9" label="When is"/>
-  <int value="10" label="Currency"/>
-</enum>
-
-<enum name="SuggestionsResponseState" type="int">
-  <int value="0" label="Empty response received from the server."/>
-  <int value="1" label="Invalid response received from the server."/>
-  <int value="2" label="Valid response received from the server."/>
-</enum>
-
-<enum name="SupervisedUserSafetyFilterResult" type="int">
-  <int value="100" label="LINK_ALLOWED">Link; Allowed as safe</int>
-  <int value="101" label="TYPED_ALLOWED">Typed URL; Allowed as safe</int>
-  <int value="102" label="AUTO_BOOKMARK_ALLOWED">Bookmark; Allowed as safe</int>
-  <int value="103" label="AUTO_SUBFRAME_ALLOWED">
-    Subframe navigation; Allowed as safe
-  </int>
-  <int value="104" label="MANUAL_SUBFRAME_ALLOWED">
-    Manual subframe navigation; Allowed as safe
-  </int>
-  <int value="105" label="GENERATED_ALLOWED">
-    Generated from Omnibox; Allowed as safe
-  </int>
-  <int value="106" label="AUTO_TOPLEVEL_ALLOWED">
-    Automatic toplevel navigation; Allowed as safe
-  </int>
-  <int value="107" label="FORM_SUBMIT_ALLOWED">
-    Form submission; Allowed as safe
-  </int>
-  <int value="108" label="RELOAD_ALLOWED">Reload; Allowed as safe</int>
-  <int value="109" label="KEYWORD_ALLOWED">
-    Omnibox keyword; Allowed as safe
-  </int>
-  <int value="110" label="KEYWORD_GENERATED_ALLOWED">
-    URL generated from Omnibox keyword; Allowed as safe
-  </int>
-  <int value="199" label="OTHER_ALLOWED">Other navigation; Allowed as safe</int>
-  <int value="200" label="LINK_ALLOWED_UNKNOWN">
-    Link; Allowed by default (safety state unknown)
-  </int>
-  <int value="201" label="TYPED_ALLOWED_UNKNOWN">
-    Typed URL; Allowed by default (safety state unknown)
-  </int>
-  <int value="202" label="AUTO_BOOKMARK_ALLOWED_UNKNOWN">
-    Bookmark; Allowed by default (safety state unknown)
-  </int>
-  <int value="203" label="AUTO_SUBFRAME_ALLOWED_UNKNOWN">
-    Subframe navigation; Allowed by default (safety state unknown)
-  </int>
-  <int value="204" label="MANUAL_SUBFRAME_ALLOWED_UNKNOWN">
-    Manual subframe navigation; Allowed by default (safety state unknown)
-  </int>
-  <int value="205" label="GENERATED_ALLOWED_UNKNOWN">
-    Generated from Omnibox; Allowed by default (safety state unknown)
-  </int>
-  <int value="206" label="AUTO_TOPLEVEL_ALLOWED_UNKNOWN">
-    Automatic toplevel navigation; Allowed by default (safety state unknown)
-  </int>
-  <int value="207" label="FORM_SUBMIT_ALLOWED_UNKNOWN">
-    Form submission; Allowed by default (safety state unknown)
-  </int>
-  <int value="208" label="RELOAD_ALLOWED_UNKNOWN">
-    Reload; Allowed by default (safety state unknown)
-  </int>
-  <int value="209" label="KEYWORD_ALLOWED_UNKNOWN">
-    Omnibox keyword; Allowed by default (safety state unknown)
-  </int>
-  <int value="210" label="KEYWORD_GENERATED_ALLOWED_UNKNOWN">
-    URL generated from Omnibox keyword; Allowed by default (safety state
-    unknown)
-  </int>
-  <int value="299" label="OTHER_ALLOWED_UNKNOWN">
-    Other navigation; Allowed by default (safety state unknown)
-  </int>
-  <int value="300" label="LINK_BLOCKED_BLACKLIST">
-    Link; Blocked by static blacklist
-  </int>
-  <int value="301" label="TYPED_BLOCKED_BLACKLIST">
-    Typed URL; Blocked by static blacklist
-  </int>
-  <int value="302" label="AUTO_BOOKMARK_BLOCKED_BLACKLIST">
-    Bookmark; Blocked by static blacklist
-  </int>
-  <int value="303" label="AUTO_SUBFRAME_BLOCKED_BLACKLIST">
-    Subframe navigation; Blocked by static blacklist
-  </int>
-  <int value="304" label="MANUAL_SUBFRAME_BLOCKED_BLACKLIST">
-    Manual subframe navigation; Blocked by static blacklist
-  </int>
-  <int value="305" label="GENERATED_BLOCKED_BLACKLIST">
-    Generated from Omnibox; Blocked by static blacklist
-  </int>
-  <int value="306" label="AUTO_TOPLEVEL_BLOCKED_BLACKLIST">
-    Automatic toplevel navigation; Blocked by static blacklist
-  </int>
-  <int value="307" label="FORM_SUBMIT_BLOCKED_BLACKLIST">
-    Form submission; Blocked by static blacklist
-  </int>
-  <int value="308" label="RELOAD_BLOCKED_BLACKLIST">
-    Reload; Blocked by static blacklist
-  </int>
-  <int value="309" label="KEYWORD_BLOCKED_BLACKLIST">
-    Omnibox keyword; Blocked by static blacklist
-  </int>
-  <int value="310" label="KEYWORD_GENERATED_BLOCKED_BLACKLIST">
-    URL generated from Omnibox keyword; Blocked by static blacklist
-  </int>
-  <int value="399" label="OTHER_BLOCKED_BLACKLIST">
-    Other navigation; Blocked by static blacklist
-  </int>
-  <int value="400" label="LINK_BLOCKED_SAFESITES">
-    Link; Blocked by SafeSites
-  </int>
-  <int value="401" label="TYPED_BLOCKED_SAFESITES">
-    Typed URL; Blocked by SafeSites
-  </int>
-  <int value="402" label="AUTO_BOOKMARK_BLOCKED_SAFESITES">
-    Bookmark; Blocked by SafeSites
-  </int>
-  <int value="403" label="AUTO_SUBFRAME_BLOCKED_SAFESITES">
-    Subframe navigation; Blocked by SafeSites
-  </int>
-  <int value="404" label="MANUAL_SUBFRAME_BLOCKED_SAFESITES">
-    Manual subframe navigation; Blocked by SafeSites
-  </int>
-  <int value="405" label="GENERATED_BLOCKED_SAFESITES">
-    Generated from Omnibox; Blocked by SafeSites
-  </int>
-  <int value="406" label="AUTO_TOPLEVEL_BLOCKED_SAFESITES">
-    Automatic toplevel navigation; Blocked by SafeSites
-  </int>
-  <int value="407" label="FORM_SUBMIT_BLOCKED_SAFESITES">
-    Form submission; Blocked by SafeSites
-  </int>
-  <int value="408" label="RELOAD_BLOCKED_SAFESITES">
-    Reload; Blocked by SafeSites
-  </int>
-  <int value="409" label="KEYWORD_BLOCKED_SAFESITES">
-    Omnibox keyword; Blocked by SafeSites
-  </int>
-  <int value="410" label="KEYWORD_GENERATED_BLOCKED_SAFESITES">
-    URL generated from Omnibox keyword; Blocked by SafeSites
-  </int>
-  <int value="499" label="OTHER_BLOCKED_SAFESITES">
-    Other navigation; Blocked by SafeSites
-  </int>
-  <int value="500" label="LINK_BLOCKED_MANUAL">
-    Link; Blocked by manual exception
-  </int>
-  <int value="501" label="TYPED_BLOCKED_MANUAL">
-    Typed URL; Blocked by manual exception
-  </int>
-  <int value="502" label="AUTO_BOOKMARK_BLOCKED_MANUAL">
-    Bookmark; Blocked by manual exception
-  </int>
-  <int value="503" label="AUTO_SUBFRAME_BLOCKED_MANUAL">
-    Subframe navigation; Blocked by manual exception
-  </int>
-  <int value="504" label="MANUAL_SUBFRAME_BLOCKED_MANUAL">
-    Manual subframe navigation; Blocked by manual exception
-  </int>
-  <int value="505" label="GENERATED_BLOCKED_MANUAL">
-    Generated from Omnibox; Blocked by manual exception
-  </int>
-  <int value="506" label="AUTO_TOPLEVEL_BLOCKED_MANUAL">
-    Automatic toplevel navigation; Blocked by manual exception
-  </int>
-  <int value="507" label="FORM_SUBMIT_BLOCKED_MANUAL">
-    Form submission; Blocked by manual exception
-  </int>
-  <int value="508" label="RELOAD_BLOCKED_MANUAL">
-    Reload; Blocked by manual exception
-  </int>
-  <int value="509" label="KEYWORD_BLOCKED_MANUAL">
-    Omnibox keyword; Blocked by manual exception
-  </int>
-  <int value="510" label="KEYWORD_GENERATED_BLOCKED_MANUAL">
-    URL generated from Omnibox keyword; Blocked by manual exception
-  </int>
-  <int value="599" label="OTHER_BLOCKED_MANUAL">
-    Other navigation; Blocked by manual exception
-  </int>
-  <int value="600" label="LINK_BLOCKED_DEFAULT">
-    Link; Blocked by global settings
-  </int>
-  <int value="601" label="TYPED_BLOCKED_DEFAULT">
-    Typed URL; Blocked by global settings
-  </int>
-  <int value="602" label="AUTO_BOOKMARK_BLOCKED_DEFAULT">
-    Bookmark; Blocked by global settings
-  </int>
-  <int value="603" label="AUTO_SUBFRAME_BLOCKED_DEFAULT">
-    Subframe navigation; Blocked by global settings
-  </int>
-  <int value="604" label="MANUAL_SUBFRAME_BLOCKED_DEFAULT">
-    Manual subframe navigation; Blocked by global settings
-  </int>
-  <int value="605" label="GENERATED_BLOCKED_DEFAULT">
-    Generated from Omnibox; Blocked by global settings
-  </int>
-  <int value="606" label="AUTO_TOPLEVEL_BLOCKED_DEFAULT">
-    Automatic toplevel navigation; Blocked by global settings
-  </int>
-  <int value="607" label="FORM_SUBMIT_BLOCKED_DEFAULT">
-    Form submission; Blocked by global settings
-  </int>
-  <int value="608" label="RELOAD_BLOCKED_DEFAULT">
-    Reload; Blocked by global settings
-  </int>
-  <int value="609" label="KEYWORD_BLOCKED_DEFAULT">
-    Omnibox keyword; Blocked by global settings
-  </int>
-  <int value="610" label="KEYWORD_GENERATED_BLOCKED_DEFAULT">
-    URL generated from Omnibox keyword; Blocked by global settings
-  </int>
-  <int value="699" label="OTHER_BLOCKED_DEFAULT">
-    Other navigation; Blocked by global settings
-  </int>
-  <int value="700" label="LINK_ALLOWED_WHITELIST">
-    Link; Allowed by whitelist
-  </int>
-  <int value="701" label="TYPED_ALLOWED_WHITELIST">
-    Typed URL; Allowed by whitelist
-  </int>
-  <int value="702" label="AUTO_BOOKMARK_ALLOWED_WHITELIST">
-    Bookmark; Allowed by whitelist
-  </int>
-  <int value="703" label="AUTO_SUBFRAME_ALLOWED_WHITELIST">
-    Subframe navigation; Allowed by whitelist
-  </int>
-  <int value="704" label="MANUAL_SUBFRAME_ALLOWED_WHITELIST">
-    Manual subframe navigation; Allowed by whitelist
-  </int>
-  <int value="705" label="GENERATED_ALLOWED_WHITELIST">
-    Generated from Omnibox; Allowed by whitelist
-  </int>
-  <int value="706" label="AUTO_TOPLEVEL_ALLOWED_WHITELIST">
-    Automatic toplevel navigation; Allowed by whitelist
-  </int>
-  <int value="707" label="FORM_SUBMIT_ALLOWED_WHITELIST">
-    Form submission; Allowed by whitelist
-  </int>
-  <int value="708" label="RELOAD_ALLOWED_WHITELIST">
-    Reload; Allowed by whitelist
-  </int>
-  <int value="709" label="KEYWORD_ALLOWED_WHITELIST">
-    Omnibox keyword; Allowed by whitelist
-  </int>
-  <int value="710" label="KEYWORD_GENERATED_ALLOWED_WHITELIST">
-    URL generated from Omnibox keyword; Allowed by whitelist
-  </int>
-  <int value="799" label="OTHER_ALLOWED_WHITELIST">
-    Other navigation; Allowed by whitelist
-  </int>
-</enum>
-
-<enum name="SuspendAttempt" type="int">
-  <int value="0" label="Attempted"/>
-</enum>
-
-<enum name="SuspendResult" type="int">
-  <int value="0" label="Succeeded"/>
-  <int value="1" label="Failed"/>
-  <int value="2" label="Canceled (before writing wakeup count)"/>
-  <int value="3" label="Canceled (after writing wakeup count)"/>
-</enum>
-
-<enum name="SuspendStatus" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Cancelled"/>
-  <int value="3" label="Attempted"/>
-</enum>
-
-<enum name="SwReporterRunningTimeRegistryError" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Registry key invalid"/>
-  <int value="2" label="Missing start time"/>
-  <int value="3" label="Missing end time"/>
-  <int value="4" label="Missing start and end times"/>
-</enum>
-
-<enum name="SwReporterStep" type="int">
-  <int value="0" label="Explicit request"/>
-  <int value="1" label="Startup retry"/>
-  <int value="2" label="Retried too many times"/>
-  <int value="3" label="Start execution"/>
-  <int value="4" label="Failed to start"/>
-  <int value="5" label="Registry exit code"/>
-  <int value="6" label="Reset retries"/>
-  <int value="7" label="Begin SRT download"/>
-  <int value="8" label="No browser to show prompt"/>
-  <int value="9" label="No local state"/>
-  <int value="10" label="No prompt needed"/>
-  <int value="11" label="No prompt field trial"/>
-  <int value="12" label="Already prompted"/>
-  <int value="13" label="Daily run"/>
-  <int value="14" label="Added to menu"/>
-</enum>
-
-<enum name="SyncAttachmentStoreResult" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="UNSPECIFIED_ERROR"/>
-  <int value="2" label="STORE_INITIALIZATION_FAILED"/>
-</enum>
-
-<enum name="SyncAuthError" type="int">
-  <int value="0"
-      label="Number of times clients have encountered an Auth error."/>
-  <int value="1" label="Number of times clients have fixed an auth error."/>
-</enum>
-
-<enum name="SyncBackendInitializeRestoreState" type="int">
-  <int value="0" label="Expected restored types and found some"/>
-  <int value="1" label="Expected restored types but found none"/>
-  <int value="2" label="Did not expect restored types and found none"/>
-  <int value="3" label="Did not expect restored types but found some"/>
-</enum>
-
-<enum name="SyncBookmarkModelSyncState" type="int">
-  <summary>
-    The state of the local bookmark model version compared to Sync. Corresponds
-    to NativeModelSyncState in bookmark_model_associator.h.
-  </summary>
-  <int value="0" label="Local version is unset"/>
-  <int value="1" label="Local version is in sync"/>
-  <int value="2" label="Local version is behind"/>
-  <int value="3" label="Local version is ahead"/>
-</enum>
-
-<enum name="SyncConfigureResult" type="int">
-  <summary>
-    Sync data type configure results. The codes are listed in
-    data_type_controller.h with more details.
-  </summary>
-  <int value="0" label="OK"/>
-  <int value="1" label="OK_FIRST_RUN"/>
-  <int value="2" label="ASSOCIATION_FAILED"/>
-  <int value="3" label="ABORTED"/>
-  <int value="4" label="UNRECOVERABLE_ERROR"/>
-  <int value="5" label="NEEDS_CRYPTO"/>
-  <int value="6" label="RUNTIME_ERROR"/>
-</enum>
-
-<enum name="SyncConflictResolutions" type="int">
-  <summary>
-    Sync conflict resolutions. The codes are listed in conflict_resolution.h,
-    and correspond to all the different ways a sync conflict can be resolved.
-  </summary>
-  <int value="0" label="Changes match"/>
-  <int value="1" label="Use local"/>
-  <int value="2" label="Use remote"/>
-  <int value="3" label="Use new"/>
-</enum>
-
-<enum name="SyncCryptographerPendingKeysState" type="int">
-  <int value="0" label="Does not have pending keys"/>
-  <int value="1" label="Has pending keys"/>
-</enum>
-
-<enum name="SyncCryptographerReadyState" type="int">
-  <int value="0" label="Not Ready"/>
-  <int value="1" label="Ready"/>
-</enum>
-
-<enum name="SyncCustomEncryptionEvent" type="int">
-  <int value="0" label="Default setup with an implicit passphrase"/>
-  <int value="1" label="Advanced setup with a custom passphrase"/>
-</enum>
-
-<enum name="SyncDeferredInitTrigger" type="int">
-  <int value="0" label="Data type requested init."/>
-  <int value="1" label="Fallback timer triggered init."/>
-</enum>
-
-<enum name="SyncDirectoryOpenResult" type="int">
-  <summary>Possible outcomes of an attempt to load the sync directory.</summary>
-  <int value="0" label="FIRST_TRY_SUCCESS"/>
-  <int value="1" label="SECOND_TRY_SUCCESS"/>
-  <int value="2" label="SECOND_TRY_FAILURE"/>
-</enum>
-
-<enum name="SyncedNotificationActionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Notification clicked"/>
-  <int value="2" label="Notification button clicked"/>
-  <int value="3" label="Notification closed by user"/>
-  <int value="4" label="Notification closed by system"/>
-</enum>
-
-<enum name="SyncedSearchEngineDeleteEvent" type="int">
-  <summary>Possible events that delete a synced search engine.</summary>
-  <int value="0" label="USER_INITIATED"/>
-  <int value="1" label="PRE_SYNC_DELETE"/>
-  <int value="2" label="EMPTY_FIELD"/>
-</enum>
-
-<enum name="SyncErrorInfobarTypes" type="int">
-  <summary>Possible errors that can trigger a sync error infobar.</summary>
-  <int value="1" label="Sign in needs update"/>
-  <int value="2" label="Service unavailable"/>
-  <int value="3" label="Needs passphrase"/>
-  <int value="4" label="Unrecoverable error"/>
-</enum>
-
-<enum name="SyncEventCode" type="int">
-  <summary>
-    Sync UI events. The codes are listed in profile_syncer_service.h with more
-    details.
-  </summary>
-  <int value="1" label="START_FROM_NTP"/>
-  <int value="2" label="START_FROM_WRENCH"/>
-  <int value="3" label="START_FROM_OPTIONS"/>
-  <int value="10" label="CANCEL_FROM_SIGNON_WITHOUT_AUTH"/>
-  <int value="11" label="CANCEL_DURING_SIGNON"/>
-  <int value="12" label="CANCEL_DURING_SIGNON_AFTER_MERGE"/>
-  <int value="20" label="STOP_FROM_OPTIONS"/>
-  <int value="21" label="STOP_FROM_ADVANCED_DIALOG"/>
-  <int value="30" label="MERGE_AND_SYNC_NEEDED"/>
-</enum>
-
-<enum name="SyncFaviconsAvailable" type="int">
-  <int value="0" label="Synced favicons full"/>
-  <int value="1" label="Synced favicons not full"/>
-</enum>
-
-<enum name="SyncFSConflictResolutionPolicy" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="LastWriteWin"/>
-  <int value="2" label="Manual"/>
-</enum>
-
-<enum name="SyncFSRemoteServiceState" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="TemporaryUnavailable"/>
-  <int value="2" label="AuthenticationRequired"/>
-  <int value="3" label="Disabled"/>
-</enum>
-
-<enum name="SyncInitialState" type="int">
-  <int value="0" label="Can attempt to start"/>
-  <int value="1" label="No signed in user"/>
-  <int value="2" label="Turned off by user"/>
-  <int value="3" label="Turned off and setup not completed"/>
-  <int value="4" label="Must confirm sync settings"/>
-  <int value="5" label="Disallowed by enterprise policy"/>
-  <int value="6" label="Disallowed by the platform"/>
-</enum>
-
-<enum name="SyncKeystoreDecryptionFailure" type="int">
-  <int value="0" label="No keystore key"/>
-  <int value="1" label="Unknown reason"/>
-</enum>
-
-<enum name="SyncModelTypes" type="int">
-  <int value="0" label="Unspecified"/>
-  <int value="1" label="Top Level Folder"/>
-  <int value="2" label="Bookmarks"/>
-  <int value="3" label="Preferences"/>
-  <int value="4" label="Passwords"/>
-  <int value="5" label="Autofill Profile"/>
-  <int value="6" label="Autocomplete"/>
-  <int value="7" label="Themes"/>
-  <int value="8" label="Typed URLs"/>
-  <int value="9" label="Extensions"/>
-  <int value="10" label="Search Engines"/>
-  <int value="11" label="Sessions"/>
-  <int value="12" label="Apps"/>
-  <int value="13" label="App Settings"/>
-  <int value="14" label="Extension Settings"/>
-  <int value="15" label="App Notifications"/>
-  <int value="16" label="History Delete Directives"/>
-  <int value="17" label="Nigori"/>
-  <int value="18" label="Device Information"/>
-  <int value="19" label="Experiments"/>
-  <int value="20" label="Synced Notifications"/>
-  <int value="21" label="Priority Preferences"/>
-  <int value="22" label="Dictionary"/>
-  <int value="23" label="Favicon Images"/>
-  <int value="24" label="Favicon Tracking"/>
-  <int value="25" label="Proxy Tabs"/>
-  <int value="26" label="Managed User Settings"/>
-  <int value="27" label="Managed Users"/>
-  <int value="28" label="Articles"/>
-  <int value="29" label="App List"/>
-  <int value="30" label="Managed User Shared Settings"/>
-  <int value="31" label="Synced Notification App Info"/>
-  <int value="32" label="Wifi Credentials"/>
-  <int value="33" label="Managed User Whitelists"/>
-  <int value="34" label="Autofill Wallet"/>
-  <int value="35" label="Autofill Wallet Metadata"/>
-  <int value="36" label="Arc Package"/>
-  <int value="37" label="Printers"/>
-  <int value="38" label="Reading List"/>
-  <int value="39" label="User Events"/>
-</enum>
-
-<enum name="SyncModelTypeStoreInitResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Not found"/>
-  <int value="2" label="Corruption"/>
-  <int value="3" label="Not supported"/>
-  <int value="4" label="Invalid argument"/>
-  <int value="5" label="IO error"/>
-  <int value="6" label="Schema descriptor issue"/>
-  <int value="7" label="Migration failed"/>
-  <int value="8" label="Unknown error"/>
-  <int value="9" label="Store recovered after corruption"/>
-</enum>
-
-<enum name="SyncNigoriMigrationResult" type="int">
-  <int value="0" label="Failed to set default encryption key"/>
-  <int value="1" label="Failed to set nondefault encryption key"/>
-  <int value="2" label="Failed to extract keystore decryptor"/>
-  <int value="3" label="Failed to extract encryption keybag"/>
-  <int value="4"
-      label="Successfully migrated to non-backwards compatible keystore mode"/>
-  <int value="5"
-      label="Successfully migrated to backwards compatible keystore mode"/>
-  <int value="6" label="Successfully migrated with frozen implicit passphrase"/>
-  <int value="7" label="Successfully migrated with custom passphrase"/>
-</enum>
-
-<enum name="SyncNigoriMigrationState" type="int">
-  <int value="0" label="Fully migrated"/>
-  <int value="1" label="Not migrated due to cryptographer not ready"/>
-  <int value="2" label="Not migrated due to missing keystore key"/>
-  <int value="3" label="Not migrated for an unknown reason"/>
-</enum>
-
-<enum name="SyncPassphraseDismissal" type="int">
-  <int value="0" label="Passphrase accepted"/>
-  <int value="1" label="Cancel with wrong passphrase error"/>
-  <int value="2" label="Cancel without any passphrase attempted"/>
-  <int value="3" label="Followed reset link"/>
-</enum>
-
-<enum name="SyncPassphraseType" type="int">
-  <int value="0" label="IMPLICIT_PASSPHRASE"/>
-  <int value="1" label="KEYSTORE_PASSPHRASE"/>
-  <int value="2" label="FROZEN_IMPLICIT_PASSPHRASE"/>
-  <int value="3" label="CUSTOM_PASSPHRASE"/>
-</enum>
-
-<enum name="SyncPromoAction" type="int">
-  <int value="0" label="The promo was shown to the user"/>
-  <int value="1" label="The user clicked the promo to sign in"/>
-</enum>
-
-<enum name="SyncSimpleConflictResolutions" type="int">
-  <summary>
-    Sync simple conflict resolutions. The codes are listed in
-    conflict_resolver.h, and correspond to the different methods we have for
-    resolving simple sync conflicts.
-  </summary>
-  <int value="0" label="Overwrite local"/>
-  <int value="1" label="Overwrite server"/>
-  <int value="2" label="Undelete"/>
-  <int value="3" label="Ignore encryption"/>
-  <int value="4" label="Nigori merge"/>
-  <int value="5" label="Changes match"/>
-</enum>
-
-<enum name="SyncStartResult" type="int">
-  <summary>
-    Sync data type start results. The codes are listed in data_type_controller.h
-    with more details.
-  </summary>
-  <int value="0" label="OK"/>
-  <int value="1" label="OK_FIRST_RUN"/>
-  <int value="2" label="BUSY"/>
-  <int value="3" label="NOT_ENABLED"/>
-  <int value="4" label="ASSOCIATION_FAILED"/>
-  <int value="5" label="ABORTED"/>
-  <int value="6" label="UNRECOVERABLE_ERROR"/>
-  <int value="7" label="NEEDS_CRYPTO"/>
-</enum>
-
-<enum name="SyncStopSource" type="int">
-  <int value="0" label="Profile destruction"/>
-  <int value="1" label="Sign out"/>
-  <int value="2" label="Birthday error"/>
-  <int value="3" label="Chrome sync settings"/>
-  <int value="4" label="Android Chrome sync setting"/>
-  <int value="5" label="Android master sync setting"/>
-</enum>
-
-<enum name="SyncUnrecoverableErrorReason" type="int">
-  <summary>Reasons for sync unrecoverable errors.</summary>
-  <int value="0" label="No error"/>
-  <int value="1" label="Syncer error"/>
-  <int value="2" label="Backend initialization error"/>
-  <int value="3" label="Configuration retry"/>
-  <int value="4" label="Configuration failure"/>
-  <int value="5" label="Actionable error"/>
-</enum>
-
-<enum name="SystemLogPIIType" type="int">
-  <obsolete>
-    Deprecated and removed from code as of 01/2016.
-  </obsolete>
-  <int value="0" label="Email address"/>
-  <int value="1" label="IP address"/>
-  <int value="2" label="Web URL"/>
-  <int value="3" label="SSID"/>
-</enum>
-
-<enum name="SystemMenuDefaultViewRows" type="int">
-  <int value="0" label="NOT_RECORDED - Should not be recorded"/>
-  <int value="1" label="TEST - Should not be recorded"/>
-  <int value="2" label="Accessibility"/>
-  <int value="3" label="Audio"/>
-  <int value="4" label="Bluetooth"/>
-  <int value="5" label="Caps lock"/>
-  <int value="6" label="Cast"/>
-  <int value="7" label="Date"/>
-  <int value="8" label="Display settings"/>
-  <int value="9" label="Display brightness"/>
-  <int value="10" label="Enterprise"/>
-  <int value="11" label="IME"/>
-  <int value="12" label="Multi profile media"/>
-  <int value="13" label="Network"/>
-  <int value="14" label="Settings"/>
-  <int value="15" label="Update"/>
-  <int value="16" label="Power"/>
-  <int value="17" label="Rotation lock"/>
-  <int value="18" label="Screen capture"/>
-  <int value="19" label="Screen share"/>
-  <int value="20" label="Session length limit"/>
-  <int value="21" label="SMS"/>
-  <int value="22" label="Supervised user"/>
-  <int value="23" label="Tracing"/>
-  <int value="24" label="User"/>
-  <int value="25" label="VPN"/>
-</enum>
-
-<enum name="SystemNotificationType" type="int">
-  <int value="0" label="Downloads - Files"/>
-  <int value="1" label="Downloads - Pages"/>
-  <int value="2" label="Close Incognito Tabs"/>
-</enum>
-
-<enum name="TabBackgroundLoadStatus" type="int">
-  <int value="0" label="Loaded on creation and shown"/>
-  <int value="1" label="Loaded on creation and lost"/>
-  <int value="2" label="Not loaded on creation"/>
-</enum>
-
-<enum name="TabDiscardingEvents" type="int">
-  <int value="0" label="Switched to an active tab"/>
-  <int value="1" label="Switched to a discarded tab"/>
-  <int value="2" label="Discarded a tab"/>
-  <int value="3"
-      label="Discarded a tab playing audio (included in the previous one)"/>
-</enum>
-
-<enum name="TabRendererCrashStatus" type="int">
-  <int value="0" label="Shown in foreground app"/>
-  <int value="1" label="Hidden in foreground app"/>
-  <int value="2" label="Hidden in background app"/>
-</enum>
-
-<enum name="TabRendererExitStatus" type="int">
-  <int value="0" label="OOM protected in running app"/>
-  <int value="1" label="OOM protected in paused app"/>
-  <int value="2" label="OOM protected in background app"/>
-  <int value="3" label="Not protected in running app"/>
-  <int value="4" label="Not protected in paused app"/>
-  <int value="5" label="Not protected in background app"/>
-</enum>
-
-<enum name="TabRestoreResult" type="int">
-  <int value="0" label="Failure (other)"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="Failure due to network connectivity"/>
-</enum>
-
-<enum name="TabRestoreUserAction" type="int">
-  <int value="0" label="Wait for completion"/>
-  <int value="1" label="Leave tab (close tab/switch tab/go to tab switcher)"/>
-  <int value="2" label="Leave Chrome"/>
-</enum>
-
-<enum name="TabStatus" type="int">
-  <int value="0" label="Memory resident"/>
-  <int value="1" label="Evicted and reloaded"/>
-  <int value="2" label="Reloaded due to cold start"/>
-  <int value="3" label="Partially evicted"/>
-  <int value="4" label="Reloaded due to backgrounding"/>
-  <int value="5" label="Reloaded due to incognito"/>
-  <int value="6" label="Reloaded due to cold start (fg tab on start)"/>
-  <int value="7" label="Reloaded due to cold start (bg tab on switch)"/>
-  <int value="8" label="Lazy load for 'Open in new tab'"/>
-  <int value="9" label="Stopped due to page loading when backgrounding"/>
-  <int value="10" label="Evicted due to page loading when backgrounding"/>
-  <int value="11" label="Evicted due to OS terminating the renderer."/>
-</enum>
-
-<enum name="TabStripState" type="int">
-  <int value="0" label="Initial state"/>
-  <int value="1" label="Tab is active, shown foreground."/>
-  <int value="2" label="Tab is inactive, in background."/>
-  <int value="3" label="Tab is detached from tab-strip."/>
-  <int value="4" label="Tab is closed."/>
-</enum>
-
-<enum name="TabSwitchedToForegroundLaunchedWithURL" type="int">
-  <obsolete>
-    Deprecated as of 04/2014.
-  </obsolete>
-  <int value="0" label="Launched without an URL"/>
-  <int value="1" label="Launched with an URL"/>
-</enum>
-
-<enum name="TabSwitchedToForegroundRevisit" type="int">
-  <obsolete>
-    Deprecated as of 04/2014.
-  </obsolete>
-  <int value="0" label="First time"/>
-  <int value="1" label="Revisit"/>
-</enum>
-
-<enum name="TapDelayType" type="int">
-  <int value="0" label="Delayed Tap"/>
-  <int value="1" label="Undelayed Tap"/>
-</enum>
-
-<enum name="TcpSocketStatus" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Fast Connection Return"/>
-  <int value="2" label="Slow Connection Return"/>
-  <int value="3" label="Connection Error"/>
-  <int value="4" label="Syn Data Acknowledged"/>
-  <int value="5" label="Syn Data Nacked"/>
-  <int value="6" label="Syn Data Getsockopt Failed"/>
-  <int value="7" label="No Syn Data + Ack (can't happen)"/>
-  <int value="8" label="No Syn Data + Nack"/>
-  <int value="9" label="No Syn Data + Getsockopt Failed"/>
-  <int value="10" label="Fast Connect + Read Failed"/>
-  <int value="11" label="Slow Connect + Read Failed"/>
-  <int value="12" label="Previously Failed"/>
-</enum>
-
-<enum name="TempFileFailure" type="int">
-  <int value="0" label="Creating"/>
-  <int value="1" label="Opening"/>
-  <int value="2" label="Closing (unused)"/>
-  <int value="3" label="Writing"/>
-  <int value="4" label="Renaming"/>
-  <int value="5" label="Flushing"/>
-</enum>
-
-<enum name="ThreadType" type="int">
-  <int value="0" label="UI"/>
-  <int value="1" label="Blocking"/>
-</enum>
-
-<enum name="ThrottleInfobarResponse" type="int">
-  <int value="0" label="No response"/>
-  <int value="1" label="Try again"/>
-  <int value="2" label="Wait"/>
-  <int value="3" label="Infobar dismissed"/>
-</enum>
-
-<enum name="TileMemoryBudget" type="int">
-  <int value="0" label="Within memory budget"/>
-  <int value="1" label="Exceeded memory budget"/>
-</enum>
-
-<enum name="TimeZoneRequestEvent" type="int">
-  <int value="0" label="Request start"/>
-  <int value="1" label="Response success"/>
-  <int value="2" label="Response not OK"/>
-  <int value="3" label="Response empty"/>
-  <int value="4" label="Response malformed"/>
-</enum>
-
-<enum name="TimeZoneRequestResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-  <int value="2" label="Server error"/>
-  <int value="3" label="Request is cancelled."/>
-</enum>
-
-<enum name="TLSRenegotiationPatched" type="int">
-  <int value="0" label="Not renegotiation patched"/>
-  <int value="1" label="Renegotiation patched"/>
-</enum>
-
-<enum name="TokenBinding.KeyMatch" type="int">
-  <int value="0" label="No keys"/>
-  <int value="1" label="Keys match"/>
-  <int value="2" label="Socket (Channel ID) key missing"/>
-  <int value="3" label="Request (Token Binding) key missing"/>
-  <int value="4" label="Keys present but don't match"/>
-  <int value="5" label="Error looking up request key"/>
-</enum>
-
-<enum name="TokenBinding.StoreEphemerality" type="int">
-  <int value="0" label="CID_EPHEMERAL_COOKIE_EPHEMERAL">
-    This value has been deprecated and replaced by EPHEMERAL_MATCH and
-    EPHEMERAL_MISMATCH.
-  </int>
-  <int value="1" label="CID_EPHEMERAL_COOKIE_PERSISTENT"/>
-  <int value="2" label="CID_PERSISTENT_COOKIE_EPHEMERAL"/>
-  <int value="3" label="CID_PERSISTENT_COOKIE_PERSISTENT">
-    This value has been deprecated and replaced by PERSISTENT_MATCH and
-    PERSISTENT_MISMATCH.
-  </int>
-  <int value="4" label="NO_COOKIE_STORE"/>
-  <int value="5" label="NO_CHANNEL_ID_STORE"/>
-  <int value="6" label="KNOWN_MISMATCH"/>
-  <int value="7" label="EPHEMERAL_MATCH"/>
-  <int value="8" label="EPHEMERAL_MISMATCH"/>
-  <int value="9" label="PERSISTENT_MATCH"/>
-  <int value="10" label="PERSISTENT_MISMATCH"/>
-  <int value="11" label="EPHEMERAL_UNKNOWN"/>
-  <int value="12" label="PERSISTENT_UNKNOWN"/>
-</enum>
-
-<enum name="TokenBinding.Support" type="int">
-  <int value="0" label="DISABLED"/>
-  <int value="1" label="CLIENT_ONLY"/>
-  <int value="2" label="CLIENT_AND_SERVER"/>
-  <int value="3" label="CLIENT_NO_CHANNEL_ID_SERVICE"/>
-</enum>
-
-<enum name="TouchEventDispatchResultType" type="int">
-  <int value="0" label="Unhandled touch events"/>
-  <int value="1" label="Handled touch events"/>
-</enum>
-
-<enum name="TouchEventFeatureDetectionState" type="int">
-  <int value="0" label="Enabled"/>
-  <int value="1" label="Automatic - enabled"/>
-  <int value="2" label="Automatic - disabled"/>
-  <int value="3" label="Disabled"/>
-</enum>
-
-<enum name="TouchpadDeviceState" type="int">
-  <int value="0" label="NO_TP_PRESENT_NO_TP_EXPECTED">
-    No touchpad detected on a device without built-in touchpad
-  </int>
-  <int value="1" label="TP_PRESENT_NO_TP_EXPECTED">
-    External touchpad detected on a device without built-in touchpad
-  </int>
-  <int value="2" label="NO_TP_PRESENT_TP_EXPECTED_BOOT">
-    Built-in touchpad not detected at boot time on a device with built-in
-    touchpad (touchpad failure at boot time)
-  </int>
-  <int value="3" label="TP_PRESENT_TP_EXPECTED_BOOT">
-    Built-in touchpad detected at boot time on a device with built-in touchpad
-  </int>
-  <int value="4" label="NO_TP_PRESENT_TP_EXPECTED_RESUME">
-    Built-in touchpad not detected at resume time on a device with built-in
-    touchpad (touchpad failure at resume time)
-  </int>
-  <int value="5" label="TP_PRESENT_TP_EXPECTED_RESUME">
-    Built-in touchpad detected at resume time on a device with built-in touchpad
-  </int>
-</enum>
-
-<enum name="TouchpadProblemType" type="int">
-  <int value="0" label="All events">
-    All observed input events from touchpad. Serves as a reference.
-  </int>
-  <int value="1" label="Noisy Ground">
-    The touchpad noise events (e.g. abrupt cursor jumps) caused by the noisy
-    ground.
-  </int>
-</enum>
-
-<enum name="TouchTargetAndDispatchResultType" type="int">
-  <int value="0"
-      label="Non-root-scroller, non-scrollable document, not handled"/>
-  <int value="1"
-      label="Non-root-scroller, non-scrollable document, handled application"/>
-  <int value="2" label="Non-root-scroller, scrollable document, not handled"/>
-  <int value="3"
-      label="Non-root-scroller, scrollable document, handled application"/>
-  <int value="4" label="Root-scroller, non-scrollable document, not handled"/>
-  <int value="5"
-      label="Root-scroller, non-scrollable document, handled application"/>
-  <int value="6" label="Root-scroller, scrollable document, not handled"/>
-  <int value="7"
-      label="Root-scroller, scrollable document, handled application"/>
-</enum>
-
-<enum name="TouchTargetAndDispatchResultType2" type="int">
-  <int value="0"
-      label="Capturing Non-root-scroller, non-scrollable document, already
-             handled"/>
-  <int value="1"
-      label="Capturing Non-root-scroller, non-scrollable document, not
-             handled"/>
-  <int value="2"
-      label="Capturing Non-root-scroller, non-scrollable document, handled
-             application"/>
-  <int value="3"
-      label="Capturing Non-root-scroller, scrollable document, already
-             handled"/>
-  <int value="4"
-      label="Capturing Non-root-scroller, scrollable document, not handled"/>
-  <int value="5"
-      label="Capturing Non-root-scroller, scrollable document, handled
-             application"/>
-  <int value="6"
-      label="Capturing Root-scroller, non-scrollable document, already
-             handled"/>
-  <int value="7"
-      label="Capturing Root-scroller, non-scrollable document, not handled"/>
-  <int value="8"
-      label="Capturing Root-scroller, non-scrollable document, handled
-             application"/>
-  <int value="9"
-      label="Capturing Root-scroller, scrollable document, already handled"/>
-  <int value="10"
-      label="Capturing Root-scroller, scrollable document, not handled"/>
-  <int value="11"
-      label="Capturing Root-scroller, scrollable document, handled
-             application"/>
-  <int value="12"
-      label="Non-root-scroller, non-scrollable document, already handled"/>
-  <int value="13"
-      label="Non-root-scroller, non-scrollable document, not handled"/>
-  <int value="14"
-      label="Non-root-scroller, non-scrollable document, handled application"/>
-  <int value="15"
-      label="Non-root-scroller, scrollable document, already handled"/>
-  <int value="16" label="Non-root-scroller, scrollable document, not handled"/>
-  <int value="17"
-      label="Non-root-scroller, scrollable document, handled application"/>
-  <int value="18"
-      label="Root-scroller, non-scrollable document, already handled"/>
-  <int value="19" label="Root-scroller, non-scrollable document, not handled"/>
-  <int value="20"
-      label="Root-scroller, non-scrollable document, handled application"/>
-  <int value="21" label="Root-scroller, scrollable document, already handled"/>
-  <int value="22" label="Root-scroller, scrollable document, not handled"/>
-  <int value="23"
-      label="Root-scroller, scrollable document, handled application"/>
-  <int value="24"
-      label="Bubbling Non-root-scroller, non-scrollable document, already
-             handled"/>
-  <int value="25"
-      label="Bubbling Non-root-scroller, non-scrollable document, not handled"/>
-  <int value="26"
-      label="Bubbling Non-root-scroller, non-scrollable document, handled
-             application"/>
-  <int value="27"
-      label="Bubbling Non-root-scroller, scrollable document, already handled"/>
-  <int value="28"
-      label="Bubbling Non-root-scroller, scrollable document, not handled"/>
-  <int value="29"
-      label="Bubbling Non-root-scroller, scrollable document, handled
-             application"/>
-  <int value="30"
-      label="Bubbling Root-scroller, non-scrollable document, already handled"/>
-  <int value="31"
-      label="Bubbling Root-scroller, non-scrollable document, not handled"/>
-  <int value="32"
-      label="Bubbling Root-scroller, non-scrollable document, handled
-             application"/>
-  <int value="33"
-      label="Bubbling Root-scroller, scrollable document, already handled"/>
-  <int value="34"
-      label="Bubbling Root-scroller, scrollable document, not handled"/>
-  <int value="35"
-      label="Bubbling Root-scroller, scrollable document, handled application"/>
-</enum>
-
-<enum name="TPMResultCodeEnum" type="int">
-  <int value="0" label="TPM_SUCCESS"/>
-  <int value="1" label="TPM_E_AUTHFAIL"/>
-  <int value="2" label="TPM_E_BADINDEX"/>
-  <int value="3" label="TPM_E_BAD_PARAMETER"/>
-  <int value="4" label="TPM_E_AUDITFAILURE"/>
-  <int value="5" label="TPM_E_CLEAR_DISABLED"/>
-  <int value="6" label="TPM_E_DEACTIVATED"/>
-  <int value="7" label="TPM_E_DISABLED"/>
-  <int value="8" label="TPM_E_DISABLED_CMD"/>
-  <int value="9" label="TPM_E_FAIL"/>
-  <int value="10" label="TPM_E_BAD_ORDINAL"/>
-  <int value="11" label="TPM_E_INSTALL_DISABLED"/>
-  <int value="12" label="TPM_E_INVALID_KEYHANDLE"/>
-  <int value="13" label="TPM_E_KEYNOTFOUND"/>
-  <int value="14" label="TPM_E_INAPPROPRIATE_ENC"/>
-  <int value="15" label="TPM_E_MIGRATEFAIL"/>
-  <int value="16" label="TPM_E_INVALID_PCR_INFO"/>
-  <int value="17" label="TPM_E_NOSPACE"/>
-  <int value="18" label="TPM_E_NOSRK"/>
-  <int value="19" label="TPM_E_NOTSEALED_BLOB"/>
-  <int value="20" label="TPM_E_OWNER_SET"/>
-  <int value="21" label="TPM_E_RESOURCES"/>
-  <int value="22" label="TPM_E_SHORTRANDOM"/>
-  <int value="23" label="TPM_E_SIZE"/>
-  <int value="24" label="TPM_E_WRONGPCRVAL"/>
-  <int value="25" label="TPM_E_BAD_PARAM_SIZE"/>
-  <int value="26" label="TPM_E_SHA_THREAD"/>
-  <int value="27" label="TPM_E_SHA_ERROR"/>
-  <int value="28" label="TPM_E_FAILEDSELFTEST"/>
-  <int value="29" label="TPM_E_AUTH2FAIL"/>
-  <int value="30" label="TPM_E_BADTAG"/>
-  <int value="31" label="TPM_E_IOERROR"/>
-  <int value="32" label="TPM_E_ENCRYPT_ERROR"/>
-  <int value="33" label="TPM_E_DECRYPT_ERROR"/>
-  <int value="34" label="TPM_E_INVALID_AUTHHANDLE"/>
-  <int value="35" label="TPM_E_NO_ENDORSEMENT"/>
-  <int value="36" label="TPM_E_INVALID_KEYUSAGE"/>
-  <int value="37" label="TPM_E_WRONG_ENTITYTYPE"/>
-  <int value="38" label="TPM_E_INVALID_POSTINIT"/>
-  <int value="39" label="TPM_E_INAPPROPRIATE_SIG"/>
-  <int value="40" label="TPM_E_BAD_KEY_PROPERTY"/>
-  <int value="41" label="TPM_E_BAD_MIGRATION"/>
-  <int value="42" label="TPM_E_BAD_SCHEME"/>
-  <int value="43" label="TPM_E_BAD_DATASIZE"/>
-  <int value="44" label="TPM_E_BAD_MODE"/>
-  <int value="45" label="TPM_E_BAD_PRESENCE"/>
-  <int value="46" label="TPM_E_BAD_VERSION"/>
-  <int value="47" label="TPM_E_NO_WRAP_TRANSPORT"/>
-  <int value="48" label="TPM_E_AUDITFAIL_UNSUCCESSFUL"/>
-  <int value="49" label="TPM_E_AUDITFAIL_SUCCESSFUL"/>
-  <int value="50" label="TPM_E_NOTRESETABLE"/>
-  <int value="51" label="TPM_E_NOTLOCAL"/>
-  <int value="52" label="TPM_E_BAD_TYPE"/>
-  <int value="53" label="TPM_E_INVALID_RESOURCE"/>
-  <int value="54" label="TPM_E_NOTFIPS"/>
-  <int value="55" label="TPM_E_INVALID_FAMILY"/>
-  <int value="56" label="TPM_E_NO_NV_PERMISSION"/>
-  <int value="57" label="TPM_E_REQUIRES_SIGN"/>
-  <int value="58" label="TPM_E_KEY_NOTSUPPORTED"/>
-  <int value="59" label="TPM_E_AUTH_CONFLICT"/>
-  <int value="60" label="TPM_E_AREA_LOCKED"/>
-  <int value="61" label="TPM_E_BAD_LOCALITY"/>
-  <int value="62" label="TPM_E_READ_ONLY"/>
-  <int value="63" label="TPM_E_PER_NOWRITE"/>
-  <int value="64" label="TPM_E_FAMILYCOUNT"/>
-  <int value="65" label="TPM_E_WRITE_LOCKED"/>
-  <int value="66" label="TPM_E_BAD_ATTRIBUTES"/>
-  <int value="67" label="TPM_E_INVALID_STRUCTURE"/>
-  <int value="68" label="TPM_E_KEY_OWNER_CONTROL"/>
-  <int value="69" label="TPM_E_BAD_COUNTER"/>
-  <int value="70" label="TPM_E_NOT_FULLWRITE"/>
-  <int value="71" label="TPM_E_CONTEXT_GAP"/>
-  <int value="72" label="TPM_E_MAXNVWRITES"/>
-  <int value="73" label="TPM_E_NOOPERATOR"/>
-  <int value="74" label="TPM_E_RESOURCEMISSING"/>
-  <int value="75" label="TPM_E_DELEGATE_LOCK"/>
-  <int value="76" label="TPM_E_DELEGATE_FAMILY"/>
-  <int value="77" label="TPM_E_DELEGATE_ADMIN"/>
-  <int value="78" label="TPM_E_TRANSPORT_NOTEXCLUSIVE"/>
-  <int value="79" label="TPM_E_OWNER_CONTROL"/>
-  <int value="80" label="TPM_E_DAA_RESOURCES"/>
-  <int value="81" label="TPM_E_DAA_INPUT_DATA0"/>
-  <int value="82" label="TPM_E_DAA_INPUT_DATA1"/>
-  <int value="83" label="TPM_E_DAA_ISSUER_SETTINGS"/>
-  <int value="84" label="TPM_E_DAA_TPM_SETTINGS"/>
-  <int value="85" label="TPM_E_DAA_STAGE"/>
-  <int value="86" label="TPM_E_DAA_ISSUER_VALIDITY"/>
-  <int value="87" label="TPM_E_DAA_WRONG_W"/>
-  <int value="88" label="TPM_E_BAD_HANDLE"/>
-  <int value="89" label="TPM_E_BAD_DELEGATE"/>
-  <int value="90" label="TPM_E_BADCONTEXT"/>
-  <int value="91" label="TPM_E_TOOMANYCONTEXTS"/>
-  <int value="92" label="TPM_E_MA_TICKET_SIGNATURE"/>
-  <int value="93" label="TPM_E_MA_DESTINATION"/>
-  <int value="94" label="TPM_E_MA_SOURCE"/>
-  <int value="95" label="TPM_E_MA_AUTHORITY"/>
-  <int value="97" label="TPM_E_PERMANENTEK"/>
-  <int value="98" label="TPM_E_BAD_SIGNATURE"/>
-  <int value="99" label="TPM_E_NOCONTEXTSPACE"/>
-  <int value="2048" label="TPM_E_RETRY"/>
-  <int value="2049" label="TPM_E_NEEDS_SELFTEST"/>
-  <int value="2050" label="TPM_E_DOING_SELFTEST"/>
-  <int value="2051" label="TPM_E_DEFEND_LOCK_RUNNING"/>
-</enum>
-
-<enum name="TrackedPreference" type="int">
-  <int value="0" label="kShowHomeButton"/>
-  <int value="1" label="kHomePageIsNewTabPage"/>
-  <int value="2" label="kHomePage"/>
-  <int value="3" label="kRestoreOnStartup"/>
-  <int value="4" label="kURLsToRestoreOnStartup"/>
-  <int value="5" label="extensions::pref_names::kExtensions"/>
-  <int value="6" label="kGoogleServicesLastUsername"/>
-  <int value="7" label="kSearchProviderOverrides"/>
-  <int value="8" label="kDefaultSearchProviderSearchURL (Obsolete 12/2016)"/>
-  <int value="9" label="kDefaultSearchProviderKeyword (Obsolete 12/2016)"/>
-  <int value="10" label="kDefaultSearchProviderName (Obsolete 12/2016)"/>
-  <int value="11" label="kPinnedTabs"/>
-  <int value="12" label="kKnownDisabled (Obsolete 07/2014)"/>
-  <int value="13" label="kProfileResetPromptMemento (Obsolete 11/2015)"/>
-  <int value="14" label="kDefaultSearchProviderDataPrefName"/>
-  <int value="15" label="kPreferenceResetTime"/>
-  <int value="16" label="kSafeBrowsingIncidentReportSent"/>
-  <int value="17" label="kSyncRemainingRollbackTries"/>
-  <int value="18" label="kSafeBrowsingIncidentsSent"/>
-  <int value="19" label="kSwReporterPromptVersion"/>
-  <int value="20" label="kSwReporterPromptReason"/>
-  <int value="21" label="kGoogleServicesUsername"/>
-  <int value="22" label="kSwReporterPromptSeed"/>
-  <int value="23" label="kGoogleServicesAccountId"/>
-  <int value="24" label="kGoogleServicesLastAccountId"/>
-  <int value="25" label="kSettingsResetPromptPromptWave"/>
-  <int value="26" label="kSettingsResetPromptLastTriggeredForDefaultSearch"/>
-  <int value="27" label="kSettingsResetPromptLastTriggeredForStartupUrls"/>
-  <int value="28" label="kSettingsResetPromptLastTriggeredForHomepage"/>
-</enum>
-
-<enum name="TranslateBubbleUiEvent" type="int">
-  <int value="1" label="Switch to Options page"/>
-  <int value="2" label="Leave Options page"/>
-  <int value="3" label="Advanced Link clicked"/>
-  <int value="4" label="Always Translate checked"/>
-  <int value="5" label="Always Translate unchecked"/>
-  <int value="6" label="Nope menu clicked"/>
-  <int value="7" label="Never Translate Language menu clicked"/>
-  <int value="8" label="Never Translate This Site menu clicked"/>
-  <int value="9" label="Translate button clicked"/>
-  <int value="10" label="Done button clicked"/>
-  <int value="11" label="Cancel button clicked"/>
-  <int value="12" label="Close button clicked"/>
-  <int value="13" label="Try Again button clicked"/>
-  <int value="14" label="Show Original button clicked"/>
-  <int value="15" label="Language Settings link clicked"/>
-  <int value="16" label="Source Language menu clicked"/>
-  <int value="17" label="Target Language menu clicked"/>
-  <int value="18" label="Page Action icon activated"/>
-  <int value="19" label="Page Action icon deactivated"/>
-  <int value="20" label="Bubble was shown"/>
-  <int value="21" label="Bubble not shown: window is no longer valid"/>
-  <int value="22" label="Bubble not shown: window is minimized"/>
-  <int value="23" label="Bubble not shown: window is not active"/>
-  <int value="24" label="Bubble not shown: web contents not active"/>
-  <int value="25" label="Bubble not shown: editable field is active"/>
-</enum>
-
-<enum name="TranslateError" type="int">
-  <int value="0" label="No error"/>
-  <int value="1" label="Network error"/>
-  <int value="2" label="Initialization error"/>
-  <int value="3" label="Unknown language"/>
-  <int value="4" label="Unsupported language"/>
-  <int value="5" label="Identical language"/>
-  <int value="6" label="Translation error"/>
-</enum>
-
-<enum name="TranslateInitiationStatus" type="int">
-  <int value="0" label="Completely disabled by prefs"/>
-  <int value="1" label="Completely disabled by switch"/>
-  <int value="2" label="Disabled by user configuration"/>
-  <int value="3" label="Unsupported Language"/>
-  <int value="4" label="Unsupported URL"/>
-  <int value="5" label="Do nothing for similar languages"/>
-  <int value="6" label="Do nothing for accepted languages"/>
-  <int value="7" label="Auto translation by user configuration"/>
-  <int value="8" label="Auto translation by linked from a translated page"/>
-  <int value="9" label="Show infobar"/>
-  <int value="10" label="MIME-type is not supported"/>
-  <int value="11" label="Disabled by Key"/>
-  <int value="12" label="Language in ULP"/>
-  <int value="13" label="Aborted by translate ranker"/>
-</enum>
-
-<enum name="TranslateLanguage" type="int">
-  <int value="0" label="No language code"/>
-  <int value="1" label="Valid language code"/>
-  <int value="2" label="Invalid language code"/>
-</enum>
-
-<enum name="TranslateLanguageDetectionTiming" type="int">
-  <int value="0" label="On time"/>
-  <int value="1" label="Deferred"/>
-  <int value="2" label="Resumed"/>
-</enum>
-
-<enum name="TranslateLanguageVerification" type="int">
-  <int value="0" label="CLD is disabled"/>
-  <int value="1" label="No Content-Language"/>
-  <int value="2" label="CLD can not determine a language"/>
-  <int value="3" label="CLD agrees with Content-Language"/>
-  <int value="4" label="CLD disagrees with Content-Language"/>
-  <int value="5" label="CLD can be trusted"/>
-  <int value="6" label="CLD can complement a sub code"/>
-</enum>
-
-<enum name="TranslateRankerModelStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Download Throttled"/>
-  <int value="2" label="Download Failed"/>
-  <int value="3" label="Parse Failed"/>
-  <int value="4" label="Validation Failed"/>
-</enum>
-
-<enum name="TranslateScheme" type="int">
-  <int value="0" label="http"/>
-  <int value="1" label="https"/>
-  <int value="2" label="unexpected other schemes"/>
-</enum>
-
-<enum name="TrimMemoryLevel" type="int">
-  <summary>
-    The level provided by Android's ComponentCallbacks2.onTrimMemory().
-  </summary>
-  <int value="5" label="TRIM_MEMORY_RUNNING_MODERATE"/>
-  <int value="10" label="TRIM_MEMORY_RUNNING_LOW"/>
-  <int value="15" label="TRIM_MEMORY_RUNNING_CRITICAL"/>
-  <int value="40" label="TRIM_MEMORY_BACKGROUND"/>
-  <int value="60" label="TRIM_MEMORY_MODERATE"/>
-  <int value="80" label="TRIM_MEMORY_COMPLETE"/>
-</enum>
-
-<enum name="UIEventType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Touch released"/>
-  <int value="2" label="Touch pressed"/>
-  <int value="3" label="Touch moved"/>
-  <int value="4" label="Touch stationary"/>
-  <int value="5" label="Touch cancelled"/>
-  <int value="6" label="Gesture scroll begin"/>
-  <int value="7" label="Gesture scroll end"/>
-  <int value="8" label="Gesture scroll update"/>
-  <int value="9" label="Gesture tap"/>
-  <int value="10" label="Gesture tap down"/>
-  <int value="11" label="Gesture finger down"/>
-  <int value="12" label="Gesture finger up"/>
-  <int value="13" label="Gesture double tap"/>
-  <int value="14" label="Gesture triple tap"/>
-  <int value="15" label="Gesture two-finger tap"/>
-  <int value="16" label="Gesture pinch begin"/>
-  <int value="17" label="Gesture pinch end"/>
-  <int value="18" label="Gesture pinch update (2 fingers)"/>
-  <int value="19" label="Long press"/>
-  <int value="20" label="Multi-finger swipe (2 fingers)"/>
-  <int value="21" label="Scroll"/>
-  <int value="22" label="Scroll fling start"/>
-  <int value="23" label="Scroll fling cancel"/>
-  <int value="24" label="Multi-finger swipe (3 fingers)"/>
-  <int value="25" label="Multi-finger swipe (4+ fingers)"/>
-  <int value="26" label="Gesture scroll update (2 fingers)"/>
-  <int value="27" label="Gesture scroll update (3 fingers)"/>
-  <int value="28" label="Gesture scroll update (4+ fingers)"/>
-  <int value="29" label="Gesture pinch update (3 fingers)"/>
-  <int value="30" label="Gesture pinch update (4+ fingers)"/>
-  <int value="31" label="Long tap"/>
-  <int value="32" label="Show Press"/>
-  <int value="33" label="Tap Cancel"/>
-  <int value="34" label="Edge swipe"/>
-  <int value="35" label="One-finger swipe"/>
-  <int value="36" label="Tap unconfirmed"/>
-</enum>
-
-<enum name="UkmDataDroppedReason" type="int">
-  <int value="0" label="Not dropped"/>
-  <int value="1" label="Recording disabled"/>
-  <int value="2" label="Max hit"/>
-</enum>
-
-<enum name="UmaCleanExitConsistency" type="int">
-  <int value="0" label="Dirty/Dirty (Registry/Local State)"/>
-  <int value="1" label="Dirty/Clean (Registry/Local State)"/>
-  <int value="2" label="Clean/Dirty (Registry/Local State)"/>
-  <int value="3" label="Clean/Clean (Registry/Local State)"/>
-  <int value="4" label="Missing/Dirty (Registry/Local State)"/>
-  <int value="5" label="Missing/Clean (Registry/Local State)"/>
-</enum>
-
-<enum name="UmaEntropySourceType" type="int">
-  <int value="0" label="No entropy source (never hit)"/>
-  <int value="1" label="Low Entropy Source"/>
-  <int value="2" label="High Entropy Source"/>
-</enum>
-
-<enum name="UmaInitSequence" type="int">
-  <int value="0" label="Timer fired first"/>
-  <int value="1" label="Init task completed first"/>
-</enum>
-
-<enum name="UmaMachineIdState" type="int">
-  <int value="0" label="ID generation failed"/>
-  <int value="1" label="No stored value"/>
-  <int value="2" label="Machine ID changed"/>
-  <int value="3" label="Machine ID unchanged"/>
-</enum>
-
-<enum name="UmaUploadResponseStatus" type="int">
-  <int value="0" label="Unknown failure"/>
-  <int value="1" label="Success"/>
-  <int value="2" label="Bad request"/>
-  <int value="3" label="No response"/>
-</enum>
-
-<enum name="UncacheableReason" type="int">
-  <int value="0" label="kNoData"/>
-  <int value="1" label="kPre11PartialResponse"/>
-  <int value="2" label="kNoStrongValidatorOnPartialResponse"/>
-  <int value="3" label="kShortMaxAge"/>
-  <int value="4" label="kExpiresTooSoon"/>
-  <int value="5" label="kHasMustRevalidate"/>
-  <int value="6" label="kNoCache"/>
-  <int value="7" label="kNoStore"/>
-</enum>
-
-<enum name="UniformityTrialGroupNotActive" type="int">
-  <int value="0" label="Invalid"/>
-  <int value="1" label="Group not reported"/>
-  <int value="2" label="Trial was disabled"/>
-  <int value="3" label="Group not reported and trial was disabled"/>
-</enum>
-
-<enum name="UnlockType" type="int">
-  <int value="0" label="Password"/>
-  <int value="1" label="Pin"/>
-</enum>
-
-<enum name="UnPackStatus" type="int">
-  <int value="0" label="No Error"/>
-  <int value="1" label="Archive file not found"/>
-  <int value="2" label="Archive file can not be opened"/>
-  <int value="3" label="Archive can not be opened by extract tool."/>
-  <int value="4" label="File can not be extracted"/>
-  <int value="5" label="Mapped file IO Exception"/>
-  <int value="6" label="Can not get the name of extracted file"/>
-  <int value="7" label="Can not create extracted file on disk"/>
-  <int value="8" label="Can not write the extracted file on disk"/>
-  <int value="9" label="Can not set the extract time to file"/>
-  <int value="10" label="Can not close extracted file"/>
-</enum>
-
-<enum name="UpdateEngineAttemptResult" type="int">
-  <int value="0" label="Update Succeeded"/>
-  <int value="1" label="Internal Error"/>
-  <int value="2" label="Payload Download Error"/>
-  <int value="3" label="Metadata Malformed"/>
-  <int value="4" label="Operation Malformed"/>
-  <int value="5" label="Operation Execution Error"/>
-  <int value="6" label="Metadata Verification Failed"/>
-  <int value="7" label="Payload Verification Failed"/>
-  <int value="8" label="Verification Failed"/>
-  <int value="9" label="Post-install Failed"/>
-  <int value="10" label="Abnormal Termination"/>
-</enum>
-
-<enum name="UpdateEngineCertificateCheckStatus" type="int">
-  <int value="0" label="Valid certificate">
-    The certificate is valid and the same as seen before or the first time we
-    see a certificate.
-  </int>
-  <int value="1" label="Changed certificate">
-    The certificate is valid, but is different than a previously seen
-    certificate for the selected server.
-  </int>
-  <int value="2" label="Certificate check failed">
-    The certificate validation failed.
-  </int>
-</enum>
-
-<enum name="UpdateEngineCheckReaction" type="int">
-  <int value="0" label="Updating"/>
-  <int value="1" label="Ignoring"/>
-  <int value="2" label="Deferring"/>
-  <int value="3" label="Backing Off"/>
-</enum>
-
-<enum name="UpdateEngineCheckResult" type="int">
-  <int value="0" label="Update Available"/>
-  <int value="1" label="No Update Available"/>
-  <int value="2" label="Response Download Error"/>
-  <int value="3" label="Response Parsing Error"/>
-  <int value="4" label="Reboot Pending"/>
-</enum>
-
-<enum name="UpdateEngineConnectionType" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Ethernet"/>
-  <int value="2" label="Wifi"/>
-  <int value="3" label="WiMAX"/>
-  <int value="4" label="Bluetooth"/>
-  <int value="5" label="Cellular"/>
-  <int value="6" label="Tethered (Ethernet)"/>
-  <int value="7" label="Tethered (Wifi)"/>
-</enum>
-
-<enum name="UpdateEngineDownloadErrorCode" type="int">
-  <int value="0" label="Download Error"/>
-  <int value="100" label="Input Malformed (Internal Error)"/>
-  <int value="101" label="Unknown HTTP Status (not 200-599)"/>
-  <int value="400" label="Bad Request (HTTP Status 400)"/>
-  <int value="401" label="Unauthorized (HTTP Status 401)"/>
-  <int value="402" label="Payment Required (HTTP Status 402)"/>
-  <int value="403" label="Forbidden (HTTP Status 403)"/>
-  <int value="404" label="Not Found (HTTP Status 404)"/>
-  <int value="405" label="Method Not Allowed (HTTP Status 405)"/>
-  <int value="406" label="Not Acceptable (HTTP Status 406)"/>
-  <int value="407" label="Proxy Auth Req (HTTP Status 407)"/>
-  <int value="408" label="Request Timeout (HTTP Status 408)"/>
-  <int value="409" label="Conflict (HTTP Status 409)"/>
-  <int value="410" label="Gone (HTTP Status 410)"/>
-  <int value="500" label="Internal Server Error (HTTP Status 500)"/>
-  <int value="501" label="Not Implemented (HTTP Status 501)"/>
-  <int value="502" label="Bad Gateway (HTTP Status 502)"/>
-  <int value="503" label="Service Unavailable (HTTP Status 503)"/>
-  <int value="504" label="Gateway Timeout (HTTP Status 504)"/>
-</enum>
-
-<enum name="UpdateEngineDownloadSource" type="int">
-  <int value="0" label="HTTPS Server"/>
-  <int value="1" label="HTTP Server"/>
-  <int value="2" label="HTTP Peer"/>
-</enum>
-
-<enum name="UpdateEngineDownloadSources" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="HTTPS Server Only"/>
-  <int value="2" label="HTTP Server Only"/>
-  <int value="3" label="HTTP Server, HTTPS Server"/>
-  <int value="4" label="HTTP Peer Only"/>
-  <int value="5" label="HTTP Peer and HTTPS Server"/>
-  <int value="6" label="HTTP Peer and HTTP Server"/>
-  <int value="7" label="HTTP Peer, HTTPS Server, and HTTP Server"/>
-</enum>
-
-<enum name="UpdateEngineErrorCode" type="int">
-  <int value="0" label="kErrorCodeSuccess"/>
-  <int value="1" label="kErrorCodeError"/>
-  <int value="2" label="kErrorCodeOmahaRequestError"/>
-  <int value="3" label="kErrorCodeOmahaResponseHandlerError"/>
-  <int value="4" label="kErrorCodeFilesystemCopierError"/>
-  <int value="5" label="kErrorCodePostinstallRunnerError"/>
-  <int value="6" label="kErrorCodeSetBootableFlagError"/>
-  <int value="7" label="kErrorCodeInstallDeviceOpenError"/>
-  <int value="8" label="kErrorCodeKernelDeviceOpenError"/>
-  <int value="9" label="kErrorCodeDownloadTransferError"/>
-  <int value="10" label="kErrorCodePayloadHashMismatchError"/>
-  <int value="11" label="kErrorCodePayloadSizeMismatchError"/>
-  <int value="12" label="kErrorCodeDownloadPayloadVerificationError"/>
-  <int value="13" label="kErrorCodeDownloadNewPartitionInfoError"/>
-  <int value="14" label="kErrorCodeDownloadWriteError"/>
-  <int value="15" label="kErrorCodeNewRootfsVerificationError"/>
-  <int value="16" label="kErrorCodeNewKernelVerificationError"/>
-  <int value="17" label="kErrorCodeSignedDeltaPayloadExpectedError"/>
-  <int value="18" label="kErrorCodeDownloadPayloadPubKeyVerificationError"/>
-  <int value="19" label="kErrorCodePostinstallBootedFromFirmwareB"/>
-  <int value="20" label="kErrorCodeDownloadStateInitializationError"/>
-  <int value="21" label="kErrorCodeDownloadInvalidMetadataMagicString"/>
-  <int value="22" label="kErrorCodeDownloadSignatureMissingInManifest"/>
-  <int value="23" label="kErrorCodeDownloadManifestParseError"/>
-  <int value="24" label="kErrorCodeDownloadMetadataSignatureError"/>
-  <int value="25" label="kErrorCodeDownloadMetadataSignatureVerificationError"/>
-  <int value="26" label="kErrorCodeDownloadMetadataSignatureMismatch"/>
-  <int value="27" label="kErrorCodeDownloadOperationHashVerificationError"/>
-  <int value="28" label="kErrorCodeDownloadOperationExecutionError"/>
-  <int value="29" label="kErrorCodeDownloadOperationHashMismatch"/>
-  <int value="30" label="kErrorCodeOmahaRequestEmptyResponseError"/>
-  <int value="31" label="kErrorCodeOmahaRequestXMLParseError"/>
-  <int value="32" label="kErrorCodeDownloadInvalidMetadataSize"/>
-  <int value="33" label="kErrorCodeDownloadInvalidMetadataSignature"/>
-  <int value="34" label="kErrorCodeOmahaRequestResponseInvalid"/>
-  <int value="35" label="kErrorCodeOmahaUpdateIgnoredPerPolicy"/>
-  <int value="36" label="kErrorCodeOmahaUpdateDeferredPerPolicy"/>
-  <int value="37" label="kErrorCodeOmahaErrorInHTTPResponse"/>
-  <int value="38" label="kErrorCodeDownloadOperationHashMissingError"/>
-  <int value="39" label="kErrorCodeDownloadMetadataSignatureMissingError"/>
-  <int value="40" label="kErrorCodeOmahaUpdateDeferredForBackoff"/>
-  <int value="41" label="kErrorCodePostinstallPowerwashError"/>
-  <int value="42" label="kErrorCodeUpdateCanceledByChannelChange"/>
-  <int value="43" label="kErrorCodePostinstallFirmwareRONotUpdatable"/>
-  <int value="44" label="kErrorCodeUnsupportedMajorPayloadVersion"/>
-  <int value="45" label="kErrorCodeUnsupportedMinorPayloadVersion"/>
-  <int value="46" label="kErrorCodeOmahaRequestXMLHasEntityDecl"/>
-  <int value="47" label="kErrorCodeFilesystemVerifierError"/>
-  <int value="48" label="kErrorCodeUserCanceled"/>
-  <int value="49" label="kErrorCodeNonCriticalUpdateInOOBE"/>
-</enum>
-
-<enum name="UpdateEngineInstallDateProvisioningSource" type="int">
-  <int value="0" label="Omaha Response"/>
-  <int value="1" label="OOBE Marker"/>
-</enum>
-
-<enum name="UpdateEnginePayloadFormat" type="int">
-  <int value="0" label="Full"/>
-  <int value="1" label="Delta"/>
-  <int value="2" label="Forced Full"/>
-</enum>
-
-<enum name="UpdatePasswordSubmissionEvent" type="int">
-  <int value="0" label="NO_ACCOUNTS_CLICKED_UPDATE"/>
-  <int value="1" label="NO_ACCOUNTS_CLICKED_NOPE"/>
-  <int value="2" label="NO_ACCOUNTS_NO_INTERACTION"/>
-  <int value="3" label="ONE_ACCOUNT_CLICKED_UPDATE"/>
-  <int value="4" label="ONE_ACCOUNT_CLICKED_NOPE"/>
-  <int value="5" label="ONE_ACCOUNT_NO_INTERACTION"/>
-  <int value="6" label="MULTIPLE_ACCOUNTS_CLICKED_UPDATE"/>
-  <int value="7" label="MULTIPLE_ACCOUNTS_CLICKED_NOPE"/>
-  <int value="8" label="MULTIPLE_ACCOUNTS_NO_INTERACTION"/>
-  <int value="9" label="PASSWORD_OVERRIDDEN_CLICKED_UPDATE"/>
-  <int value="10" label="PASSWORD_OVERRIDDEN_CLICKED_NOPE"/>
-  <int value="11" label="PASSWORD_OVERRIDDEN_NO_INTERACTION"/>
-</enum>
-
-<enum name="UpdatePolicy" type="int">
-  <int value="0" label="UPDATES_DISABLED"/>
-  <int value="1" label="AUTOMATIC_UPDATES"/>
-  <int value="2" label="MANUAL_UPDATES_ONLY"/>
-  <int value="3" label="AUTO_UPDATES_ONLY"/>
-</enum>
-
-<enum name="UrlResolutionResult" type="int">
-  <int value="0" label="Absolute URL"/>
-  <int value="1" label="Resolutions Differ"/>
-  <int value="2" label="Resolutions Agree"/>
-</enum>
-
-<enum name="URLSchemeForHistogram" type="int">
-  <int value="0" label="kUnknownURLScheme"/>
-  <int value="1" label="kMissingURLScheme"/>
-  <int value="2" label="kHttpURLScheme"/>
-  <int value="3" label="kHttpsURLScheme"/>
-  <int value="4" label="kFtpURLScheme"/>
-  <int value="5" label="kChromeExtensionURLScheme"/>
-  <int value="6" label="kJavascriptURLScheme"/>
-  <int value="7" label="kFileURLScheme"/>
-  <int value="8" label="kBlobURLScheme"/>
-  <int value="9" label="kDataURLScheme"/>
-  <int value="10" label="kFileSystemScheme"/>
-</enum>
-
-<enum name="UsedInDraw" type="int">
-  <obsolete>
-    Deprecated 02/2017 in Issue 675840.
-  </obsolete>
-  <int value="0" label="Was not used in draw"/>
-  <int value="1" label="Was used in draw"/>
-</enum>
-
-<enum name="UserCertContentDisposition" type="int">
-  <int value="0" label="No Content-Disposition"/>
-  <int value="1" label="Content-Disposition"/>
-</enum>
-
-<enum name="UserChannels" type="int">
-  <int value="-1" label="Unknown"/>
-  <int value="0" label="Canary"/>
-  <int value="1" label="Dev"/>
-  <int value="2" label="Beta"/>
-  <int value="3" label="Stable"/>
-</enum>
-
-<enum name="UserGestureRequirement" type="int">
-  <int value="0" label="Required and available"/>
-  <int value="1" label="Required and not available"/>
-  <int value="2" label="Not required and available"/>
-  <int value="3" label="Not required and not available"/>
-</enum>
-
-<enum name="UserInitiatedEvent" type="int">
-  <int value="0" label="WiFi Scan"/>
-</enum>
-
-<enum name="UserPodsDisplay" type="int">
-  <int value="0" label="Enabled by local settings"/>
-  <int value="1" label="Enabled by domain policy"/>
-  <int value="2" label="Disabled by local settings"/>
-  <int value="3" label="Disabled by domain policy"/>
-</enum>
-
-<enum name="UserSelectableSyncType" type="int">
-  <int value="0" label="Bookmarks"/>
-  <int value="1" label="Preferences"/>
-  <int value="2" label="Passwords"/>
-  <int value="3" label="Autofill"/>
-  <int value="4" label="Themes"/>
-  <int value="5" label="Omnibox History"/>
-  <int value="6" label="Extensions"/>
-  <int value="7" label="Open Tabs"/>
-  <int value="8" label="Apps"/>
-  <int value="9" label="Synced Notifications"/>
-  <int value="10" label="WiFi Credentials"/>
-  <int value="11" label="Reading List"/>
-</enum>
-
-<enum name="UserType" type="int">
-  <int value="0" label="Regular"/>
-  <int value="1" label="Guest"/>
-  <int value="2" label="Retail Mode"/>
-  <int value="3" label="Public Account"/>
-  <int value="4" label="Locally Managed"/>
-  <int value="5" label="Kiosk App"/>
-  <int value="6" label="Regular Supervised"/>
-</enum>
-
-<enum name="V8CodeCacheRejectReason" type="int">
-  <int value="1" label="MAGIC_NUMBER_MISMATCH">
-    Reject due to magic number mismatch
-  </int>
-  <int value="2" label="VERSION_MISMATCH">
-    Reject due to version hash mismatch
-  </int>
-  <int value="3" label="SOURCE_MISMATCH">
-    Reject due to source hash mismatch
-  </int>
-  <int value="4" label="CPU_FEATURES_MISMATCH">
-    Reject due to CPU features mismatch
-  </int>
-  <int value="5" label="FLAGS_MISMATCH">Reject due to flags hash mismatch</int>
-  <int value="6" label="CHECKSUM_MISMATCH">Reject due to checksum mismatch</int>
-  <int value="7" label="INVALID_HEADER">Invalid header</int>
-</enum>
-
-<enum name="V8DebugFeature" type="int">
-  <int value="1" label="kActive">Debugger has been active</int>
-  <int value="2" label="kBreakPoint">
-    Debugger has been used to set break points
-  </int>
-  <int value="3" label="kStepping">
-    Debugger has been used to step through Javascript code
-  </int>
-  <int value="4" label="kHeapSnapshot">
-    Heap profiler has been used to take heap snapshots
-  </int>
-  <int value="5" label="kAllocationTracking">
-    Heap profiler has been used to track allocations
-  </int>
-  <int value="6" label="kProfiler">
-    Cpu profiler has been used to profile execution
-  </int>
-  <int value="7" label="kLiveEdit">
-    LiveEdit has been used to replace Javascript code on-the-fly
-  </int>
-</enum>
-
-<enum name="V8InitializerLoadV8SnapshotResult" type="int">
-  <int value="0" label="SUCCESS">Load succeeded</int>
-  <int value="1" label="FAILED_OPEN">Failure to open snapshot file</int>
-  <int value="2" label="FAILED_MAP">Failed to map snapshot</int>
-  <int value="3" label="FAILED_VERIFY">Failed to verify snapshot</int>
-</enum>
-
-<enum name="V8InitializerOpenV8FileResult" type="int">
-  <int value="0" label="OPENED">Opened without issue</int>
-  <int value="1" label="OPENED_RETRY">Opened after one or more retries</int>
-  <int value="2" label="FAILED_IN_USE">Failed because file in use</int>
-  <int value="3" label="FAILED_OTHER">Failed for other reason</int>
-</enum>
-
-<enum name="VAJDADecoderFailure" type="int">
-  <int value="0" label="VAAPI_ERROR"/>
-</enum>
-
-<enum name="ValidateMenuItemSelectorType" type="int">
-  <int value="0"
-      label="The menu items' associated action is an unknown selector."/>
-  <int value="1" label="The menu item's associated action is -newProfile."/>
-  <int value="2" label="The menu item's associated action is -editProfile."/>
-  <int value="3"
-      label="The menu item's associated action is -switchToProfileFromMenu."/>
-  <int value="4"
-      label="The menu item's associated action is -switchToProfileFromDock."/>
-</enum>
-
-<enum name="ValidationFailures" type="int">
-  <int value="0" label="DBus"/>
-  <int value="1" label="Load Key"/>
-</enum>
-
-<enum name="VariationSeedSignature" type="int">
-  <int value="0" label="Signature Missing"/>
-  <int value="1" label="Signature Decode Failed"/>
-  <int value="2" label="Invalid Signature"/>
-  <int value="3" label="Invalid Signature for Seed"/>
-  <int value="4" label="Valid Signature for Seed"/>
-</enum>
-
-<enum name="VariationsFirstRunResult" type="int">
-  <int value="0" label="Seed imported successfully"/>
-  <int value="1" label="Seed import failed - no callback (Obsolete)"/>
-  <int value="2" label="Seed import failed - no first run seed"/>
-  <int value="3" label="Seed import failed - failed to store seed"/>
-  <int value="4" label="Seed import failed - invalid response date string"/>
-</enum>
-
-<enum name="VariationsFirstRunSeedFetchResult" type="int">
-  <int value="-3" label="UnknownHostException fetching seed"/>
-  <int value="-2" label="SocketTimeoutException fetching seed"/>
-  <int value="-1" label="IOException fetching seed"/>
-  <int value="200" label="200: OK"/>
-  <int value="201" label="201: Created"/>
-  <int value="202" label="202: Accepted"/>
-  <int value="203" label="203: Non-Authoritative Information"/>
-  <int value="204" label="204: No Content"/>
-  <int value="205" label="205: Reset Content"/>
-  <int value="206" label="206: Partial Content"/>
-  <int value="300" label="300: Multiple Choices"/>
-  <int value="301" label="301: Moved Permanently"/>
-  <int value="302" label="302: Found"/>
-  <int value="303" label="303: See Other"/>
-  <int value="304" label="304: Not Modified"/>
-  <int value="305" label="305: Use Proxy"/>
-  <int value="306" label="306: (Unused)"/>
-  <int value="307" label="307: Temporary Redirect"/>
-  <int value="400" label="400: Bad Request"/>
-  <int value="401" label="401: Unauthorized"/>
-  <int value="402" label="402: Payment Required"/>
-  <int value="403" label="403: Forbidden"/>
-  <int value="404" label="404: Not Found"/>
-  <int value="405" label="405: Method Not Allowed"/>
-  <int value="406" label="406: Not Acceptable"/>
-  <int value="407" label="407: Proxy Authentication Required"/>
-  <int value="408" label="408: Request Timeout"/>
-  <int value="409" label="409: Conflict"/>
-  <int value="410" label="410: Gone"/>
-  <int value="411" label="411: Length Required"/>
-  <int value="412" label="412: Precondition Failed"/>
-  <int value="413" label="413: Request Entity Too Large"/>
-  <int value="414" label="414: Request-URI Too Long"/>
-  <int value="415" label="415: Unsupported Media Type"/>
-  <int value="416" label="416: Requested Range Not Satisfiable"/>
-  <int value="417" label="417: Expectation Failed"/>
-  <int value="500" label="500: Internal Server Error"/>
-  <int value="501" label="501: Not Implemented"/>
-  <int value="502" label="502: Bad Gateway"/>
-  <int value="503" label="503: Service Unavailable"/>
-  <int value="504" label="504: Gateway Timeout"/>
-  <int value="505" label="505: HTTP Version Not Supported"/>
-</enum>
-
-<enum name="VariationsHeadersURLValidationResult" type="int">
-  <int value="0" label="Rejected: Invalid URL."/>
-  <int value="1" label="Rejected: Not https. (Deprecated)"/>
-  <int value="2" label="Rejected: Not Google domain."/>
-  <int value="3" label="Should append headers."/>
-  <int value="4" label="Rejected: Neither http, nor https."/>
-  <int value="5" label="Rejected: Is a Google domain, but not https."/>
-</enum>
-
-<enum name="VariationsPermanentConsistencyCountryResult" type="int">
-  <int value="0" label="Saved pref missing and no country code in seed"/>
-  <int value="1" label="Saved pref missing and country code in seed"/>
-  <int value="2" label="Saved pref invalid and no country code in seed"/>
-  <int value="3" label="Saved pref invalid and country code in seed"/>
-  <int value="4"
-      label="Saved pref present for current version and no country code in
-             seed"/>
-  <int value="5"
-      label="Saved pref present for different version and no country code in
-             seed"/>
-  <int value="6"
-      label="Saved pref present for current version and country code in seed
-             matches"/>
-  <int value="7"
-      label="Saved pref present for current version and country code in seed
-             is different"/>
-  <int value="8"
-      label="Saved pref present for different version and country code in
-             seed matches"/>
-  <int value="9"
-      label="Saved pref present for different version and country code in
-             seed is different"/>
-</enum>
-
-<enum name="VariationsResourceRequestsAllowedState" type="int">
-  <int value="0" label="Requests allowed"/>
-  <int value="1" label="Requests not allowed (Obsolete 11/2013)"/>
-  <int value="2" label="Notified that requests became allowed"/>
-  <int value="3" label="Requests not allowed: EULA not accepted"/>
-  <int value="4" label="Requests not allowed: network down"/>
-  <int value="5" label="Requests not allowed: disabled by command line"/>
-</enum>
-
-<enum name="VariationsSeedDateChange" type="int">
-  <int value="0" label="No previous date"/>
-  <int value="1" label="New date older than old date"/>
-  <int value="2" label="Same day"/>
-  <int value="3" label="Day changed"/>
-</enum>
-
-<enum name="VariationsSeedEmpty" type="int">
-  <int value="0" label="Seed Not Empty"/>
-  <int value="1" label="Seed Empty"/>
-  <int value="2" label="Seed Corrupt (Obsolete)"/>
-  <int value="3" label="Seed Signature Verification Failed"/>
-  <int value="4" label="Seed Corrupt Base64 Data"/>
-  <int value="5" label="Seed Corrupt Protobuf"/>
-  <int value="6" label="Seed Corrupt Gzip Data"/>
-</enum>
-
-<enum name="VariationsSeedExpiry" type="int">
-  <int value="0" label="Not Expired"/>
-  <int value="1" label="Fetch Time Missing"/>
-  <int value="2" label="Expired"/>
-</enum>
-
-<enum name="VariationsSeedStoreResult" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Failed - Empty Seed"/>
-  <int value="2" label="Failed - Parse Error"/>
-  <int value="3" label="Failed - Signature Mismatch"/>
-  <int value="4" label="Failed - Gzip Compress Error"/>
-  <int value="5" label="Delta Count"/>
-  <int value="6" label="Failed - Delta: Read Seed"/>
-  <int value="7" label="Failed - Delta: Apply"/>
-  <int value="8" label="Failed - Delta: Store Seed"/>
-  <int value="9" label="Failed - Gzip Uncompress Error"/>
-  <int value="10" label="Failed - Empty Gzip Contents"/>
-  <int value="11" label="Failed - Unsupported Seed Format"/>
-</enum>
-
-<enum name="VaryType" type="int">
-  <int value="0" label="No Vary header present"/>
-  <int value="1" label="Vary:User-Agent"/>
-  <int value="2" label="Other"/>
-</enum>
-
-<enum name="VAVDADecoderFailure" type="int">
-  <int value="0" label="VAAPI_ERROR"/>
-</enum>
-
-<enum name="VAVDAH264DecoderFailure" type="int">
-  <int value="0" label="FRAME_MBS_ONLY_FLAG_NOT_ONE"/>
-  <int value="1" label="GAPS_IN_FRAME_NUM"/>
-  <int value="2" label="MID_STREAM_RESOLUTION_CHANGE"/>
-  <int value="3" label="INTERLACED_STREAM"/>
-  <int value="4" label="VAAPI_ERROR"/>
-</enum>
-
-<enum name="VAVEAEncoderFailure" type="int">
-  <int value="0" label="VAAPI_ERROR"/>
-</enum>
-
-<enum name="VerifyWakeOnWiFiSettingsResult" type="int">
-  <summary>
-    The result of NIC wake on WiFi settings verification. Corresponds to
-    VerifyWakeOnWiFiSettingsResult in shill/metrics.h
-  </summary>
-  <int value="0" label="Success"/>
-  <int value="1" label="Failure"/>
-</enum>
-
-<enum name="VideoCaptureEvent" type="int">
-  <int value="0" label="Starting video capture"/>
-  <int value="1" label="Stopping video capture normally"/>
-  <int value="2" label="Stopping video capture due to error"/>
-  <int value="3" label="Video capture device stopped. No frames produced."/>
-  <int value="4" label="Desktop/Tab capture stopped. No frames produced."/>
-</enum>
-
-<enum name="VideoCodec" type="int">
-  <int value="0" label="kUnknownVideoCodec"/>
-  <int value="1" label="kCodecH264"/>
-  <int value="2" label="kCodecVC1"/>
-  <int value="3" label="kCodecMPEG2"/>
-  <int value="4" label="kCodecMPEG4"/>
-  <int value="5" label="kCodecTheora"/>
-  <int value="6" label="kCodecVP8"/>
-  <int value="7" label="kCodecVP9"/>
-  <int value="8" label="kCodecHEVC"/>
-  <int value="9" label="kCodecDolbyVision"/>
-</enum>
-
-<enum name="VideoCodecProfile" type="int">
-  <int value="0" label="H.264 Baseline"/>
-  <int value="1" label="H.264 Main"/>
-  <int value="2" label="H.264 Extended"/>
-  <int value="3" label="H.264 High"/>
-  <int value="4" label="H.264 High10"/>
-  <int value="5" label="H.264 High422"/>
-  <int value="6" label="H.264 High444"/>
-  <int value="7" label="H.264 ScalableBaseline"/>
-  <int value="8" label="H.264 ScalableHigh"/>
-  <int value="9" label="H.264 StereoHigh"/>
-  <int value="10" label="H.264 MultiviewHigh"/>
-  <int value="11" label="VP8"/>
-  <int value="12" label="VP9 Profile0"/>
-  <int value="13" label="VP9 Profile1"/>
-  <int value="14" label="VP9 Profile2"/>
-  <int value="15" label="VP9 Profile3"/>
-  <int value="16" label="HEVC Main"/>
-  <int value="17" label="HEVC Main10"/>
-  <int value="18" label="HEVC Main Still-picture"/>
-  <int value="19" label="DolbyVision profile0"/>
-  <int value="20" label="DolbyVision profile4"/>
-  <int value="21" label="DolbyVision profile5"/>
-  <int value="22" label="DolbyVision profile7"/>
-</enum>
-
-<enum name="VideoDecodeAcceleratorError" type="int">
-  <int value="1" label="Illegal state">
-    An operation was attempted during an incompatible decoder state.
-  </int>
-  <int value="2" label="Invalid argument">
-    Invalid argument was passed to an API method.
-  </int>
-  <int value="3" label="Unreadable input">Encoded input is unreadable.</int>
-  <int value="4" label="Platform failure">
-    A failure occurred at the browser layer or lower. Examples of such failures
-    include GPU hardware failures, GPU driver failures, GPU library failures,
-    browser programming errors, and so on.
-  </int>
-</enum>
-
-<enum name="VideoFormat" type="int">
-  <obsolete>
-    Deprecated as of 05/2015. Substituted by VideoFramePixelFormat.
-  </obsolete>
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="YV12"/>
-  <int value="2" label="I420"/>
-  <int value="3" label="YV16"/>
-  <int value="4" label="YV12A"/>
-  <int value="5" label="YV24"/>
-  <int value="6" label="NV12"/>
-  <int value="7" label="ARGB"/>
-  <int value="8" label="HOLE"/>
-  <int value="9" label="NATIVE_TEXTURE"/>
-</enum>
-
-<enum name="VideoFrameColorSpace" type="int">
-  <int value="0" label="Unspecified, usually Rec 601"/>
-  <int value="1" label="Jpeg"/>
-  <int value="2" label="HD Rec 709"/>
-  <int value="3" label="SD Rec 601"/>
-</enum>
-
-<enum name="VideoFramePixelFormat" type="int">
-  <obsolete>
-    Deprecated as of 08/2015. Substituted by VideoPixelFormatUnion.
-  </obsolete>
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="YV12"/>
-  <int value="2" label="I420"/>
-  <int value="3" label="YV16"/>
-  <int value="4" label="YV12A"/>
-  <int value="5" label="YV24"/>
-  <int value="6" label="NV12 (Mac only)"/>
-  <int value="7" label="ARGB"/>
-  <int value="8" label="xRGB"/>
-  <int value="9" label="UYVY"/>
-</enum>
-
-<enum name="VideoFullscreenOrientationLockMetadataAvailability" type="int">
-  <int value="0" label="Available"/>
-  <int value="1" label="Missing"/>
-  <int value="2" label="Received (after Missing)"/>
-</enum>
-
-<enum name="VideoFullscreenOrientationLockResult" type="int">
-  <int value="0" label="Already locked, no attempt"/>
-  <int value="1" label="Portrait"/>
-  <int value="2" label="Landscape"/>
-</enum>
-
-<enum name="VideoPixelFormat" type="int">
-  <obsolete>
-    Deprecated as of 05/2015. Substituted by VideoFormat.
-  </obsolete>
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="YV12"/>
-  <int value="2" label="YV16"/>
-  <int value="3" label="I420"/>
-  <int value="4" label="YV12A"/>
-  <int value="5" label="HOLE"/>
-  <int value="6" label="NATIVE_TEXTURE"/>
-  <int value="7" label="YV12J"/>
-  <int value="8" label="NV12"/>
-  <int value="9" label="YV24"/>
-  <int value="10" label="ARGB"/>
-  <int value="11" label="YV12HD"/>
-</enum>
-
-<enum name="VideoPixelFormatUnion" type="int">
-  <int value="0" label="UNKNOWN"/>
-  <int value="1" label="I420"/>
-  <int value="2" label="YV12"/>
-  <int value="3" label="YV16"/>
-  <int value="4" label="YV12A"/>
-  <int value="5" label="YV24"/>
-  <int value="6" label="NV12"/>
-  <int value="7" label="NV21"/>
-  <int value="8" label="UYVY"/>
-  <int value="9" label="YUY2"/>
-  <int value="10" label="ARGB"/>
-  <int value="11" label="XRGB"/>
-  <int value="12" label="RGB24"/>
-  <int value="13" label="RGB32"/>
-  <int value="14" label="MJPEG"/>
-  <int value="15" label="MT21"/>
-  <int value="16" label="YUV420P9"/>
-  <int value="17" label="YUV420P10"/>
-  <int value="18" label="YUV422P9"/>
-  <int value="19" label="YUV422P10"/>
-  <int value="20" label="YUV444P9"/>
-  <int value="21" label="YUV444P10"/>
-  <int value="22" label="YUV420P12"/>
-  <int value="23" label="YUV422P12"/>
-  <int value="24" label="YUV444P12"/>
-  <int value="25" label="Y8"/>
-  <int value="26" label="Y16"/>
-</enum>
-
-<enum name="VideoPlayerCastAPIExtensionStatus" type="int">
-  <int value="0" label="Skipped (Cast extension is unavailable)"/>
-  <int value="1" label="Installation failed"/>
-  <int value="2" label="Load failed"/>
-  <int value="3" label="Loaded successfully (newly installed)"/>
-  <int value="4" label="Loaded successfully (already installed)"/>
-</enum>
-
-<enum name="VideoPlayerPlayType" type="int">
-  <int value="0" label="Local playback"/>
-  <int value="1" label="Play on cast device"/>
-</enum>
-
-<enum name="VideoRotation" type="int">
-  <int value="0" label="VIDEO_ROTATION_0"/>
-  <int value="1" label="VIDEO_ROTATION_90"/>
-  <int value="2" label="VIDEO_ROTATION_180"/>
-  <int value="3" label="VIDEO_ROTATION_270"/>
-</enum>
-
-<enum name="ViewFileType" type="int">
-  <int value="0" label="other"/>
-  <int value="1" label=".3ga"/>
-  <int value="2" label=".3gp"/>
-  <int value="3" label=".aac"/>
-  <int value="4" label=".alac"/>
-  <int value="5" label=".asf"/>
-  <int value="6" label=".avi"/>
-  <int value="7" label=".bmp"/>
-  <int value="8" label=".csv"/>
-  <int value="9" label=".doc"/>
-  <int value="10" label=".docx"/>
-  <int value="11" label=".flac"/>
-  <int value="12" label=".gif"/>
-  <int value="13" label=".jpeg"/>
-  <int value="14" label=".jpg"/>
-  <int value="15" label=".log"/>
-  <int value="16" label=".m3u"/>
-  <int value="17" label=".m3u8"/>
-  <int value="18" label=".m4a"/>
-  <int value="19" label=".m4v"/>
-  <int value="20" label=".mid"/>
-  <int value="21" label=".mkv"/>
-  <int value="22" label=".mov"/>
-  <int value="23" label=".mp3"/>
-  <int value="24" label=".mp4"/>
-  <int value="25" label=".mpg"/>
-  <int value="26" label=".odf"/>
-  <int value="27" label=".odp"/>
-  <int value="28" label=".ods"/>
-  <int value="29" label=".odt"/>
-  <int value="30" label=".oga"/>
-  <int value="31" label=".ogg"/>
-  <int value="32" label=".ogv"/>
-  <int value="33" label=".pdf"/>
-  <int value="34" label=".png"/>
-  <int value="35" label=".ppt"/>
-  <int value="36" label=".pptx"/>
-  <int value="37" label=".ra"/>
-  <int value="38" label=".ram"/>
-  <int value="39" label=".rar"/>
-  <int value="40" label=".rm"/>
-  <int value="41" label=".rtf"/>
-  <int value="42" label=".wav"/>
-  <int value="43" label=".webm"/>
-  <int value="44" label=".webp"/>
-  <int value="45" label=".wma"/>
-  <int value="46" label=".wmv"/>
-  <int value="47" label=".xls"/>
-  <int value="48" label=".xlsx"/>
-  <int value="49" label=".crdownload"/>
-  <int value="50" label=".crx"/>
-  <int value="51" label=".dmg"/>
-  <int value="52" label=".exe"/>
-  <int value="53" label=".html"/>
-  <int value="54" label=".htm"/>
-  <int value="55" label=".jar"/>
-  <int value="56" label=".ps"/>
-  <int value="57" label=".torrent"/>
-  <int value="58" label=".txt"/>
-  <int value="59" label=".zip"/>
-</enum>
-
-<enum name="VisibleTab" type="int">
-  <int value="0" label="Custom Tab"/>
-  <int value="1" label="Chrome Tab"/>
-</enum>
-
-<enum name="VPNDriver" type="int">
-  <int value="0" label="OpenVPN"/>
-  <int value="1" label="L2TP/IPSec"/>
-  <int value="2" label="Third Party"/>
-</enum>
-
-<enum name="VPNRemoteAuthenticationType" type="int">
-  <int value="0" label="OpenVPN Default"/>
-  <int value="1" label="OpenVPN Certificate"/>
-  <int value="2" label="L2TP/IPSec Default"/>
-  <int value="3" label="L2TP/IPSec Certificate"/>
-  <int value="4" label="L2TP/IPSec PSK"/>
-</enum>
-
-<enum name="VPNUserAuthenticationType" type="int">
-  <int value="0" label="OpenVPN None"/>
-  <int value="1" label="OpenVPN Certificate"/>
-  <int value="2" label="OpenVPN Username/Password"/>
-  <int value="3" label="OpenVPN Username/Password/OTP"/>
-  <int value="4" label="L2TP/IPSec None"/>
-  <int value="5" label="L2TP/IPSec Certificate"/>
-  <int value="6" label="L2TP/IPSec Username/Password"/>
-</enum>
-
-<enum name="VRViewerType" type="int">
-  <int value="0" label="UNKNOWN_TYPE"/>
-  <int value="1" label="CARDBOARD"/>
-  <int value="2" label="DAYDREAM"/>
-</enum>
-
-<enum name="VTVDAInitializationFailureType" type="int">
-  <int value="0" label="Successfully Initialized"/>
-  <int value="1" label="Framework Load Error"/>
-  <int value="2" label="Hardware Session Error"/>
-  <int value="3" label="Software Session Error"/>
-</enum>
-
-<enum name="VTVDASessionFailureType" type="int">
-  <int value="0" label="Successfully Initialized"/>
-  <int value="1" label="Platform Error"/>
-  <int value="2" label="Invalid Stream"/>
-  <int value="3" label="Unsupported Stream Parameters"/>
-  <int value="4" label="Decode Error"/>
-  <int value="5" label="Unsupported Stream"/>
-</enum>
-
-<enum name="WakeOnWiFiFeaturesEnabledState" type="int">
-  <summary>
-    The wake on WiFi features enabled in shill, which come from
-    WakeOnWiFiFeaturesEnabledState in shill/metrics.h
-  </summary>
-  <int value="0" label="None"/>
-  <int value="1" label="Packet"/>
-  <int value="2" label="DarkConnect"/>
-  <int value="3" label="Packet and DarkConnect"/>
-</enum>
-
-<enum name="WakeOnWiFiThrottled" type="int">
-  <summary>
-    Whether or not wake on WiFi was disabled during suspend because of excessive
-    dark resume wakes. Corresponds to WakeOnWiFiThrottled in shill/metrics.h
-  </summary>
-  <int value="0"
-      label="False (Wake on WiFi was not disabled due to excessive dark
-             resume wakes"/>
-  <int value="1"
-      label="True (Wake on WiFi was disabled due to exessive dark resume
-             wakes"/>
-</enum>
-
-<enum name="WakeReasonReceivedBeforeOnDarkResume" type="int">
-  <int value="0" label="Wake reason not received before OnDarkResume"/>
-  <int value="1" label="Wake reason received before OnDarkResume"/>
-</enum>
-
-<enum name="WalletApiCall" type="int">
-  <int value="0" label="Unknown API call"/>
-  <int value="1" label="Accept Legal Documents"/>
-  <int value="2" label="Authenticate Instrument"/>
-  <int value="3" label="Get Full Wallet"/>
-  <int value="4" label="Get Wallet Items"/>
-  <int value="5" label="Save to Wallet"/>
-</enum>
-
-<enum name="WalletErrors" type="int">
-  <int value="0" label="Baseline: Issued request"/>
-  <int value="1" label="Fatal error (deprecated)"/>
-  <int value="2" label="Malformed response"/>
-  <int value="3" label="Network error"/>
-  <int value="4" label="Bad request"/>
-  <int value="5" label="Internal error"/>
-  <int value="6" label="Invalid params"/>
-  <int value="7" label="Service unavailable"/>
-  <int value="8" label="Spending limit exceeded"/>
-  <int value="9" label="Unsupported API version"/>
-  <int value="10" label="Unknown error"/>
-  <int value="11" label="Unsupported merchant"/>
-  <int value="12" label="Unsupported buyer legal address"/>
-  <int value="13" label="Unverified know your customer status"/>
-</enum>
-
-<enum name="WalletRequiredActions" type="int">
-  <int value="0" label="Baseline: Issued request"/>
-  <int value="1" label="Unknown"/>
-  <int value="2" label="GAIA auth"/>
-  <int value="3" label="Passive GAIA auth"/>
-  <int value="4" label="Set up Wallet"/>
-  <int value="5" label="Accept ToS"/>
-  <int value="6" label="Update expiration date"/>
-  <int value="7" label="Upgrade min address"/>
-  <int value="8" label="Choose another instrument or address"/>
-  <int value="9" label="Verify CVV"/>
-  <int value="10" label="Invalid form field"/>
-  <int value="11" label="Require phone number"/>
-</enum>
-
-<enum name="WallpaperApps" type="int">
-  <int value="0" label="Chrome OS Wallpaper Picker App"/>
-  <int value="1" label="Android Wallpapers App"/>
-</enum>
-
-<enum name="WallpaperLayout" type="int">
-  <int value="0" label="Center"/>
-  <int value="1" label="Center Cropped"/>
-  <int value="2" label="Stretch"/>
-  <int value="3" label="Tile"/>
-</enum>
-
-<enum name="WallpaperType" type="int">
-  <int value="0" label="Daily"/>
-  <int value="1" label="Customized"/>
-  <int value="2" label="Default"/>
-  <int value="3" label="Unknown (unused)"/>
-  <int value="4" label="Online"/>
-  <int value="5" label="Policy"/>
-  <int value="6" label="Third party"/>
-  <int value="7" label="Device policy"/>
-</enum>
-
-<enum name="WarmupStateOnLaunch" type="int">
-  <int value="0" label="No Session, No Warmup"/>
-  <int value="1" label="No Session, Warmup"/>
-  <int value="2" label="Session, No Warmup, Warmup called from another UID"/>
-  <int value="3" label="Session, No Warmup"/>
-  <int value="4" label="Session, Warmup"/>
-</enum>
-
-<enum name="WebApkGooglePlayInstallState" type="int">
-  <int value="0" label="Play installation supported."/>
-  <int value="1" label="Play installation disabled for other reason."/>
-  <int value="2" label="Google Play Services unavailable."/>
-  <int value="3" label="Play installation disabled by variations."/>
-  <int value="4" label="Play installation disabled by Play."/>
-</enum>
-
-<enum name="WebApkInstallEvent" type="int">
-  <int value="0" label="Infobar is ignored"/>
-  <int value="1" label="Infobar is dismissed before installation"/>
-  <int value="2" label="Infobar is dismissed during installation"/>
-  <int value="3" label="Success"/>
-  <int value="4" label="Failed"/>
-</enum>
-
-<enum name="WebApkInstallInfoBarShown" type="int">
-  <int value="0" label="WebApk infobar shown from the app banner"/>
-  <int value="1" label="WebApk infobar shown from the add to homescreen menu"/>
-</enum>
-
-<enum name="WebApkInstallSource" type="int">
-  <int value="0" label="Installation started from the app banner"/>
-  <int value="1" label="Installation started from the add to homescreen menu"/>
-</enum>
-
-<enum name="WebApkOpenResult" type="int">
-  <int value="0" label="Open an installed WebAPK successfully"/>
-  <int value="1" label="Launch intent for WebAPK is null"/>
-  <int value="2" label="Activity for WebAPK not found."/>
-</enum>
-
-<enum name="WebApkUpdateRequestQueued" type="int">
-  <int value="0" label="Queued for the first time"/>
-  <int value="1" label="Queued for the second time"/>
-  <int value="2" label="Queued for the third time"/>
-</enum>
-
-<enum name="WebApkUpdateRequestSent" type="int">
-  <int value="0" label="Sent immediately after an update check"/>
-  <int value="1" label="Sent when WebAPK is moved to background"/>
-  <int value="2" label="Sent by forcing an update"/>
-</enum>
-
-<enum name="WebApkUserAction" type="int">
-  <int value="0" label="Open a previously installed WebAPK"/>
-  <int value="1" label="Dismiss to open a previously installed WebAPK"/>
-  <int value="2" label="Open a newly installed WebAPK"/>
-  <int value="3" label="Dismiss to open a newly installed WebAPK"/>
-</enum>
-
-<enum name="WebAudioAutoplayStatus" type="int">
-  <int value="0" label="The AudioContext failed to autoplay"/>
-  <int value="1" label="Failed to autoplay but start() called on user gesture"/>
-  <int value="2" label="The AudioContext successfully autoplayed"/>
-</enum>
-
-<enum name="WebBluetoothConnectGATTOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Device no longer in range"/>
-  <int value="2" label="Unknown Error"/>
-  <int value="3" label="In Progress"/>
-  <int value="4" label="Failed"/>
-  <int value="5" label="Auth Failed"/>
-  <int value="6" label="Auth Canceled"/>
-  <int value="7" label="Auth Rejected"/>
-  <int value="8" label="Auth Timeout"/>
-  <int value="9" label="Unsupported Device"/>
-</enum>
-
-<enum name="WebBluetoothFunction" type="int">
-  <int value="0" label="requestDevice()"/>
-  <int value="1" label="RemoteGATTServer.connect()"/>
-  <int value="2" label="RemoteGATTServer.getPrimaryService()"/>
-  <int value="3" label="RemoteGATTService.getCharacteristic()"/>
-  <int value="4" label="RemoteGATTCharacteristic.readValue()"/>
-  <int value="5" label="RemoteGATTCharacteristic.writeValue()"/>
-  <int value="6" label="RemoteGATTCharacteristic.startNotifications()"/>
-  <int value="7" label="RemoteGATTCharacteristic.stopNotifications()"/>
-  <int value="8" label="RemoteGATTServer.disconnect()"/>
-  <int value="9" label="RemoteGATTService.getCharacteristics()"/>
-  <int value="10" label="RemoteGATTServer.getPrimaryServices()"/>
-  <int value="11" label="RemoteGATTDescriptor.readValue()"/>
-  <int value="12" label="RemoteGATTDescriptor.writeValue()"/>
-  <int value="13" label="RemoteGATTCharacteristic.getDescriptor()"/>
-  <int value="14" label="RemoteGATTCharacteristic.getDescriptors()"/>
-</enum>
-
-<enum name="WebBluetoothGATTOperationOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="No Device"/>
-  <int value="2" label="No Service"/>
-  <int value="3" label="No Characteristic"/>
-  <int value="4" label="No Descriptor"/>
-  <int value="5" label="Unknown"/>
-  <int value="6" label="Failed"/>
-  <int value="7" label="In Progress"/>
-  <int value="8" label="Invalid Length"/>
-  <int value="9" label="Not Permitted"/>
-  <int value="10" label="Not Authorized"/>
-  <int value="11" label="Not Paired"/>
-  <int value="12" label="Not Supported"/>
-  <int value="13" label="Blocklisted"/>
-</enum>
-
-<enum name="WebBluetoothGetCharacteristicOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="No device"/>
-  <int value="2" label="No service"/>
-  <int value="3" label="Not found"/>
-  <int value="4" label="Blocklisted"/>
-  <int value="5" label="No characteristics"/>
-</enum>
-
-<enum name="WebBluetoothGetDescriptorOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="No device"/>
-  <int value="2" label="No service"/>
-  <int value="3" label="No characteristic"/>
-  <int value="4" label="Not found"/>
-  <int value="5" label="Blocklisted"/>
-  <int value="6" label="No descriptors"/>
-</enum>
-
-<enum name="WebBluetoothGetPrimaryServiceOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="Device no longer in range."/>
-  <int value="2" label="Not found"/>
-  <int value="3" label="No services"/>
-</enum>
-
-<enum name="WebBluetoothRequestDeviceOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="No Bluetooth adapter"/>
-  <int value="2" label="No RenderFrameHost for message source"/>
-  <int value="3" label="(Obsolete) Discovery start failed"/>
-  <int value="4" label="(Obsolete) Discovery stop failed"/>
-  <int value="5" label="(Obsolete) No matching devices found"/>
-  <int value="6" label="Bluetooth Adapter not present"/>
-  <int value="7" label="(Obsolete) Bluetooth Adapter was off"/>
-  <int value="8"
-      label="Chosen device vanished between discovery and user selection"/>
-  <int value="9" label="Chooser cancelled"/>
-  <int value="10"
-      label="Chooser insta-closed because Chrome isn't allowed to ask for
-             permission to scan for BT devices"/>
-  <int value="11" label="Blocklisted service UUID in filter"/>
-  <int value="12" label="Bluetooth Overview Help link pressed."/>
-  <int value="13" label="Adapter Off Help link pressed."/>
-  <int value="14" label="Need Location Help link pressed."/>
-  <int value="15"
-      label="Chooser insta-closed because user or enterprise policy has
-             disabled it"/>
-  <int value="16" label="Web Bluetooth kill switch enabled"/>
-  <int value="17" label="Web Bluetooth chooser event handler invalid"/>
-  <int value="18" label="Bluetooth Low Energy not available"/>
-  <int value="19" label="Chooser re-scan link pressed."/>
-</enum>
-
-<enum name="WebBluetoothRSSISignalStrengthLevel" type="int">
-  <int value="0" label="&lt;= minimum RSSI; displayed as level 0"/>
-  <int value="1" label="RSSI displayed as level 0"/>
-  <int value="2" label="RSSI displayed as level 1"/>
-  <int value="3" label="RSSI displayed as level 2"/>
-  <int value="4" label="RSSI displayed as level 3"/>
-  <int value="5" label="RSSI displayed as level 4"/>
-  <int value="6" label="&gt;= maximium RSSI; displayed as level 4"/>
-</enum>
-
-<enum name="WebCertVerifyAgreement" type="int">
-  <int value="0" label="Accepted by both iOS and NSS."/>
-  <int value="1" label="Rejected by both iOS and NSS."/>
-  <int value="2" label="Accepted only by iOS (rejected by NSS)."/>
-  <int value="3" label="Accepted only by NSS (rejected by iOS)."/>
-</enum>
-
-<enum name="WebContentsState" type="int">
-  <int value="0" label="No WebContents"/>
-  <int value="1" label="Prerendered WebContents"/>
-  <int value="2" label="Spare WebContents"/>
-</enum>
-
-<enum name="WebFontCacheHit" type="int">
-  <int value="0" label="Miss"/>
-  <int value="1" label="Hit disk cache"/>
-  <int value="2" label="Served from data URL"/>
-  <int value="3" label="Hit memory cache"/>
-</enum>
-
-<enum name="WebFontDiskCacheHit" type="int">
-  <int value="0" label="Not in the cache"/>
-  <int value="1" label="In the cache"/>
-  <int value="2" label="Previously in the cache"/>
-</enum>
-
-<enum name="WebFontInterventionResult" type="int">
-  <int value="0" label="Wasn't triggered, and does not time out"/>
-  <int value="1" label="Wasn't triggered, but time out"/>
-  <int value="2" label="Was triggered, but would not time out"/>
-  <int value="3" label="Was triggered, and would time out"/>
-</enum>
-
-<enum name="WebFontLoadLimitState" type="int">
-  <int value="0" label="Load not started"/>
-  <int value="1" label="Under limit"/>
-  <int value="2" label="Short limit exceeded"/>
-  <int value="3" label="Long limit exceeded"/>
-</enum>
-
-<enum name="WebFontPackageFormat" type="int">
-  <int value="0" label="Unknown / Decode error"/>
-  <int value="1" label="SFNT"/>
-  <int value="2" label="WOFF"/>
-  <int value="3" label="WOFF 2.0"/>
-  <int value="4" label="SVG"/>
-</enum>
-
-<enum name="WebFontUsageType" type="int">
-  <int value="0" label="Styled, and used"/>
-  <int value="1" label="Styled, but not used"/>
-  <int value="2" label="Not styled, but used"/>
-</enum>
-
-<enum name="WebHistoryStatus" type="int">
-  <int value="0" label="WEB_HISTORY_QUERY_FAILED">Failed</int>
-  <int value="1" label="WEB_HISTORY_QUERY_SUCCEEDED">Succeeded</int>
-  <int value="2" label="WEB_HISTORY_QUERY_TIMED_OUT">Timed out</int>
-</enum>
-
-<enum name="WebRTCAecDelayEstimateReliability" type="int">
-  <int value="0" label="None."/>
-  <int value="1" label="Poor."/>
-  <int value="2" label="Medium."/>
-  <int value="3" label="Good."/>
-  <int value="4" label="Excellent."/>
-</enum>
-
-<enum name="WebRtcAudioCodecs" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Opus"/>
-  <int value="2" label="iSAC"/>
-  <int value="3" label="pcmA"/>
-  <int value="4" label="pcmU"/>
-  <int value="5" label="g722"/>
-  <int value="6" label="iLBC"/>
-</enum>
-
-<enum name="WebRtcBweType" type="int">
-  <int value="0" label="Receiver, no extension"/>
-  <int value="1" label="Receiver, transmission offset"/>
-  <int value="2" label="Receiver, absolute send time"/>
-  <int value="3" label="Sender, transport sequence number"/>
-</enum>
-
-<enum name="WebRTCEventFrequency" type="int">
-  <int value="0" label="None."/>
-  <int value="1" label="Few."/>
-  <int value="2" label="Several."/>
-  <int value="3" label="Many."/>
-  <int value="4" label="Constant."/>
-</enum>
-
-<enum name="WebRtcH264DecoderImplEvent" type="int">
-  <int value="0" label="Init"/>
-  <int value="1" label="Error"/>
-</enum>
-
-<enum name="WebRtcH264EncoderImplEvent" type="int">
-  <int value="0" label="Init"/>
-  <int value="1" label="Error"/>
-</enum>
-
-<enum name="WebRtcVideoCodecs" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="VP8"/>
-  <int value="2" label="VP9"/>
-  <int value="3" label="H264"/>
-</enum>
-
-<enum name="WebShareMethod" type="int">
-  <int value="0" label="Share"/>
-</enum>
-
-<enum name="WebShareOutcome" type="int">
-  <int value="0" label="Success"/>
-  <int value="1" label="UnknownFailure"/>
-  <int value="2" label="Canceled"/>
-</enum>
-
-<enum name="WebsiteSettingsAction" type="int">
-  <int value="0" label="Opened"/>
-  <int value="1" label="(Deprecated) Selected Permissions tab"/>
-  <int value="2" label="(Deprecated) Selected Connection tab"/>
-  <int value="3" label="(Deprecated) Connection tab shown immediately"/>
-  <int value="4" label="Cookies dialog opened"/>
-  <int value="5" label="Changed permission"/>
-  <int value="6" label="Certificate dialog opened"/>
-  <int value="7" label="(Deprecated) Transparency viewer opened"/>
-  <int value="8" label="Connection help opened"/>
-  <int value="9" label="Site settings opened"/>
-  <int value="10" label="Security details opened"/>
-</enum>
-
-<enum name="WebSocketHandshakeResult" type="int">
-  <int value="0" label="Incomplete"/>
-  <int value="1" label="Normal"/>
-  <int value="2" label="Failed"/>
-  <int value="3" label="Connected"/>
-</enum>
-
-<enum name="WebSocketNewHandshakeResult" type="int">
-  <int value="0" label="INCOMPLETE">Incomplete</int>
-  <int value="1" label="CONNECTED">Connected</int>
-  <int value="2" label="FAILED">Failed</int>
-</enum>
-
-<enum name="WebSocketNewPerMessageDeflateContextTakeoverMode" type="int">
-  <int value="0" label="Do not take over"/>
-  <int value="1" label="Take over"/>
-</enum>
-
-<enum name="WebSocketPerMessageDeflateContextTakeOverMode" type="int">
-  <int value="0" label="Do not take over"/>
-  <int value="1" label="Take over"/>
-</enum>
-
-<enum name="WebSocketReceiveType" type="int">
-  <int value="0" label="String"/>
-  <int value="1" label="ArrayBuffer"/>
-  <int value="2" label="Blob"/>
-</enum>
-
-<enum name="WebSocketSendType" type="int">
-  <int value="0" label="String"/>
-  <int value="1" label="ArrayBuffer"/>
-  <int value="2" label="ArrayBufferView"/>
-  <int value="3" label="Blob"/>
-</enum>
-
-<enum name="WebUIUrlHashes" type="int">
-  <int value="-2103246641" label="chrome://signin-internals/"/>
-  <int value="-2034706497" label="chrome://net-internals/"/>
-  <int value="-1911971715" label="chrome://history/"/>
-  <int value="-1887206190" label="chrome://nfc-debug/"/>
-  <int value="-1808179141" label="chrome://password-manager-internals/"/>
-  <int value="-1743341803" label="chrome://bookmarks/"/>
-  <int value="-1729122580" label="chrome://chrome-urls/"/>
-  <int value="-1700864659" label="chrome://slow/"/>
-  <int value="-1697077152" label="chrome://device-log/"/>
-  <int value="-1690355375" label="chrome://mobilesetup/"/>
-  <int value="-1681544613" label="chrome://print/"/>
-  <int value="-1647734092" label="chrome://net-export/"/>
-  <int value="-1591890659" label="chrome://syncfs-internals/"/>
-  <int value="-1493822642" label="chrome://invalidations/"/>
-  <int value="-1440785181" label="chrome://profile-signin-confirmation/"/>
-  <int value="-1398642514" label="chrome://gesture/"/>
-  <int value="-1382906531" label="chrome://managed-user-passphrase/"/>
-  <int value="-1379571130" label="chrome://newtab/"/>
-  <int value="-1378421581" label="chrome://media-router/"/>
-  <int value="-1313432739" label="chrome://plugins/"/>
-  <int value="-1169621742" label="chrome://linux-proxy-config/"/>
-  <int value="-1108319739" label="chrome://sync-internals/"/>
-  <int value="-1082746738" label="chrome://credits/"/>
-  <int value="-1078583150" label="chrome://view-cert-dialog/"/>
-  <int value="-986409800" label="chrome://identity-internals/"/>
-  <int value="-969979971" label="chrome://sandbox/"/>
-  <int value="-946383082" label="chrome://translate-internals/"/>
-  <int value="-936786926" label="chrome://settings/"/>
-  <int value="-902637811" label="chrome://appcache-internals/"/>
-  <int value="-891260101" label="chrome://inspect/"/>
-  <int value="-853789543" label="chrome://bluetooth-pairing/"/>
-  <int value="-823585847" label="chrome://chrome-signin/"/>
-  <int value="-756514973" label="chrome://version/"/>
-  <int value="-753390931" label="chrome://interstitials/"/>
-  <int value="-727952446" label="chrome://nacl/"/>
-  <int value="-707542503" label="chrome://choose-mobile-network/"/>
-  <int value="-672072143" label="chrome://site-engagement/"/>
-  <int value="-661305899" label="chrome://set-time/"/>
-  <int value="-644310325" label="chrome://os-credits/"/>
-  <int value="-624584089"
-      label="chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/ (Bookmark
-             Manager)"/>
-  <int value="-606058756" label="chrome://accessibility/"/>
-  <int value="-516792794" label="chrome://downloads/"/>
-  <int value="-512782085" label="chrome://salsa/"/>
-  <int value="-451371558" label="chrome://serviceworker-internals/"/>
-  <int value="-377028639" label="chrome://copresence/"/>
-  <int value="-359703631" label="chrome://slow_trace/"/>
-  <int value="-245337017" label="chrome://user-actions/"/>
-  <int value="-206925255" label="chrome://popular-sites-internals/"/>
-  <int value="-176639700" label="chrome://omnibox/"/>
-  <int value="-106823253" label="chrome://conflicts/"/>
-  <int value="-90956977" label="chrome://dns/"/>
-  <int value="-42737706" label="chrome://extensions-frame/"/>
-  <int value="-2353438" label="chrome://sim-unlock/"/>
-  <int value="1377205" label="chrome://history-frame/"/>
-  <int value="34035361" label="chrome://apps/"/>
-  <int value="43923599" label="chrome://tracing/"/>
-  <int value="58807865" label="chrome://local-state/"/>
-  <int value="112165789" label="chrome://device-emulator/"/>
-  <int value="114748825" label="chrome-devtools://devtools/"/>
-  <int value="164517522" label="chrome://discards/"/>
-  <int value="171659041" label="chrome://webrtc-device-provider/"/>
-  <int value="253258497" label="chrome://components/"/>
-  <int value="260253931" label="chrome://devices/"/>
-  <int value="325375649" label="chrome://settings-frame/"/>
-  <int value="361621847" label="chrome://make-metro/"/>
-  <int value="554090510" label="chrome://first-run/"/>
-  <int value="581234974" label="chrome://tcmalloc/"/>
-  <int value="646837226" label="chrome://crashes/"/>
-  <int value="659389881" label="chrome://gpu/"/>
-  <int value="689991895" label="chrome://supervised-user-internals/"/>
-  <int value="742272091" label="chrome://extensions/"/>
-  <int value="784140714" label="chrome://predictors/"/>
-  <int value="812624791" label="chrome://dom-distiller/"/>
-  <int value="918960088" label="chrome://instant/"/>
-  <int value="943766809" label="chrome://view-cert/"/>
-  <int value="977219287" label="chrome://memory/"/>
-  <int value="985294599" label="chrome://webrtc-logs/"/>
-  <int value="1055519744" label="chrome://webrtc-internals/"/>
-  <int value="1109407387" label="chrome://keyboardoverlay/"/>
-  <int value="1211642987" label="chrome://voicesearch/"/>
-  <int value="1213428635" label="chrome://memory-redirect/"/>
-  <int value="1281801197" label="chrome://terms/"/>
-  <int value="1340926535" label="chrome://network/"/>
-  <int value="1354146226" label="chrome://tab-modal-confirm-dialog/"/>
-  <int value="1371905827" label="chrome://flags/"/>
-  <int value="1396129399" label="chrome://flash/"/>
-  <int value="1403605293" label="chrome://proxy-settings/"/>
-  <int value="1427179406" label="chrome://gcm-internals/"/>
-  <int value="1454088830" label="chrome://uber-frame/"/>
-  <int value="1457759734" label="chrome://user-manager/"/>
-  <int value="1463418339" label="chrome://proximity-auth/"/>
-  <int value="1466599095" label="chrome://oobe/"/>
-  <int value="1467342679" label="chrome://memory-internals/"/>
-  <int value="1540230808" label="chrome://power/"/>
-  <int value="1568301017" label="chrome://media-internals/"/>
-  <int value="1585293659" label="chrome://system/"/>
-  <int value="1603463396" label="chrome://help-frame/"/>
-  <int value="1615939424" label="chrome://chrome/"/>
-  <int value="1628875649" label="chrome://quota-internals/"/>
-  <int value="1631369147" label="chrome://domain-reliability-internals/"/>
-  <int value="1662453825" label="chrome://indexeddb-internals/"/>
-  <int value="1687272877" label="chrome://syncresources/"/>
-  <int value="1725906496" label="chrome://imageburner/"/>
-  <int value="1765337366" label="chrome://certificate-manager/"/>
-  <int value="1797107942" label="chrome://md-settings/"/>
-  <int value="1887784693" label="chrome://policy/"/>
-  <int value="1926101309" label="chrome://cryptohome/"/>
-  <int value="1961263039" label="chrome://profiler/"/>
-  <int value="1975618905" label="chrome://app-list/"/>
-  <int value="2040878656" label="chrome://bluetooth-internals/"/>
-  <int value="2114840772" label="chrome://drive-internals/"/>
-  <int value="3251925547" label="chrome://offline-internals/"/>
-</enum>
-
-<enum name="WebUsbChooserClosed" type="int">
-  <int value="0" label="User cancelled"/>
-  <int value="1" label="User cancelled, no devices available"/>
-  <int value="2" label="Permission granted"/>
-  <int value="3" label="Ephemeral permission granted"/>
-</enum>
-
-<enum name="WebUsbNotificationClosed" type="int">
-  <int value="0" label="Closed by system"/>
-  <int value="1" label="Closed by user"/>
-  <int value="2" label="Clicked"/>
-</enum>
-
-<enum name="WebUsbPermissionRevoked" type="int">
-  <int value="0" label="Revoked permission"/>
-  <int value="1" label="Revoked ephemeral permission"/>
-</enum>
-
-<enum name="WelcomeSignInPromptOutcome" type="int">
-  <int value="0" label="User navigated away from page"/>
-  <int value="1" label="User declined prompt"/>
-  <int value="2" label="User completed sign in flow"/>
-</enum>
-
-<enum name="WhitelistedDownloadType" type="int">
-  <int value="0" label="Does not match any whitelists"/>
-  <int value="1" label="URL whitelist"/>
-  <int value="2" label="Signature whitelist"/>
-</enum>
-
-<enum name="WiFiApMode" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Managed"/>
-  <int value="2" label="AdHoc"/>
-</enum>
-
-<enum name="WiFiConnectionStatusAfterWake" type="int">
-  <int value="0" label="Connected (Wake On WiFi enabled)"/>
-  <int value="1" label="Not connected (Wake On WiFi enabled)"/>
-  <int value="2" label="Connected (Wake On WiFi disabled)"/>
-  <int value="3" label="Not connected (Wake On WiFi disabled)"/>
-</enum>
-
-<enum name="WiFiReasonCode" type="int">
-  <int value="0" label="kReasonReserved0"/>
-  <int value="1" label="kReasonCodeUnspecified"/>
-  <int value="2" label="kReasonCodePreviousAuthenticationInvalid"/>
-  <int value="3" label="kReasonCodeSenderHasLeft"/>
-  <int value="4" label="kReasonCodeInactivity"/>
-  <int value="5" label="kReasonCodeTooManySTAs"/>
-  <int value="6" label="kReasonCodeNonAuthenticated"/>
-  <int value="7" label="kReasonCodeNonAssociated"/>
-  <int value="8" label="kReasonCodeDisassociatedHasLeft"/>
-  <int value="9" label="kReasonCodeReassociationNotAuthenticated"/>
-  <int value="10" label="kReasonCodeUnacceptablePowerCapability"/>
-  <int value="11" label="kReasonCodeUnacceptableSupportedChannelInfo"/>
-  <int value="12" label="kReasonReserved12"/>
-  <int value="13" label="kReasonCodeInvalidInfoElement"/>
-  <int value="14" label="kReasonCodeMICFailure"/>
-  <int value="15" label="kReasonCode4WayTimeout"/>
-  <int value="16" label="kReasonCodeGroupKeyHandshakeTimeout"/>
-  <int value="17" label="kReasonCodeDifferenIE"/>
-  <int value="18" label="kReasonCodeGroupCipherInvalid"/>
-  <int value="19" label="kReasonCodePairwiseCipherInvalid"/>
-  <int value="20" label="kReasonCodeAkmpInvalid"/>
-  <int value="21" label="kReasonCodeUnsupportedRsnIeVersion"/>
-  <int value="22" label="kReasonCodeInvalidRsnIeCaps"/>
-  <int value="23" label="kReasonCode8021XAuth"/>
-  <int value="24" label="kReasonCodeCipherSuiteRejected"/>
-  <int value="25" label="kReasonReserved25"/>
-  <int value="26" label="kReasonReserved26"/>
-  <int value="27" label="kReasonReserved27"/>
-  <int value="28" label="kReasonReserved28"/>
-  <int value="29" label="kReasonReserved29"/>
-  <int value="30" label="kReasonReserved30"/>
-  <int value="31" label="kReasonReserved31"/>
-  <int value="32" label="kReasonCodeUnspecifiedQoS"/>
-  <int value="33" label="kReasonCodeQoSBandwidth"/>
-  <int value="34" label="kReasonCodeiPoorConditions"/>
-  <int value="35" label="kReasonCodeOutsideTxop"/>
-  <int value="36" label="kReasonCodeStaLeaving"/>
-  <int value="37" label="kReasonCodeUnacceptableMechanism"/>
-  <int value="38" label="kReasonCodeSetupRequired"/>
-  <int value="39" label="kReasonCodeTimeout"/>
-  <int value="45" label="kReasonCodeCipherSuiteNotSupported"/>
-</enum>
-
-<enum name="WiFiScanResult" type="int">
-  <int value="0" label="ProgressiveScan connected"/>
-  <int value="1" label="ProgressiveScan error then FullScan didn't connect"/>
-  <int value="2" label="ProgressiveScan error then FullScan connected"/>
-  <int value="3"
-      label="ProgressiveScan didn't connect then FullScan didn't connect"/>
-  <int value="4"
-      label="ProgressiveScan didn't connect then FullScan connected"/>
-  <int value="5" label="FullScan didn't connect"/>
-  <int value="6" label="FullScan connected"/>
-  <int value="7" label="Internal error"/>
-</enum>
-
-<enum name="WiFiStatusType" type="int">
-  <int value="0" label="kStatusCodeTypeByAp"/>
-  <int value="1" label="kStatusCodeTypeByClient"/>
-  <int value="2" label="kStatusCodeTypeByUser"/>
-  <int value="3" label="kStatusCodeTypeConsideredDead"/>
-</enum>
-
-<enum name="Win8PageLoadType" type="int">
-  <int value="0" label="Metro"/>
-  <int value="1" label="Desktop"/>
-  <int value="2" label="Metro Aura"/>
-  <int value="3" label="Desktop Aura"/>
-</enum>
-
-<enum name="WindowOpenDisposition" type="int">
-  <int value="0" label="Unknown"/>
-  <int value="1" label="Current Tab"/>
-  <int value="2" label="Singleton Tab"/>
-  <int value="3" label="New Foreground Tab"/>
-  <int value="4" label="New Background Tab"/>
-  <int value="5" label="New Popup"/>
-  <int value="6" label="New Window"/>
-  <int value="7" label="Save To Disk"/>
-  <int value="8" label="Off The Record"/>
-  <int value="9" label="Ignore Action"/>
-</enum>
-
-<enum name="WindowsExitCode" type="int">
-  <int value="-2147483645" label="0x80000003 - STATUS_BREAKPOINT"/>
-  <int value="-1073741819" label="0xC0000005 - STATUS_ACCESS_VIOLATION"/>
-  <int value="-1073740972" label="0xC0000354 - STATUS_DEBUGGER_INACTIVE"/>
-  <int value="-1073740791" label="0xC0000409 - STATUS_STACK_BUFFER_OVERRUN"/>
-  <int value="-1073740777"
-      label="0xC0000417 - STATUS_INVALID_CRUNTIME_PARAMETER"/>
-  <int value="-805306369" label="0xCFFFFFFF - Hung browser killed."/>
-  <int value="-36863" label="0xFFFF7001 - Crashpad kCrashExitCodeNoDump."/>
-  <int value="-36862" label="0xFFFF7002 - Crashpad kFailedTerminationCode."/>
-  <int value="0" label="content::RESULT_CODE_NORMAL_EXIT"/>
-  <int value="1" label="content::RESULT_CODE_KILLED"/>
-  <int value="2" label="content::RESULT_CODE_HUNG"/>
-  <int value="3" label="content::RESULT_CODE_KILLED_BAD_MESSAGE"/>
-  <int value="4" label="chrome::RESULT_CODE_INVALID_CMDLINE_URL"/>
-  <int value="5" label="chrome::RESULT_CODE_BAD_PROCESS_TYPE"/>
-  <int value="6" label="chrome::RESULT_CODE_MISSING_DATA"/>
-  <int value="7" label="chrome::RESULT_CODE_SHELL_INTEGRATION_FAILED"/>
-  <int value="8" label="chrome::RESULT_CODE_MACHINE_LEVEL_INSTALL_EXISTS"/>
-  <int value="9" label="chrome::RESULT_CODE_UNINSTALL_CHROME_ALIVE"/>
-  <int value="10" label="chrome::RESULT_CODE_UNINSTALL_USER_CANCEL"/>
-  <int value="11" label="chrome::RESULT_CODE_UNINSTALL_DELETE_PROFILE"/>
-  <int value="12" label="chrome::RESULT_CODE_UNSUPPORTED_PARAM"/>
-  <int value="13" label="chrome::RESULT_CODE_IMPORTER_HUNG"/>
-  <int value="14" label="chrome::RESULT_CODE_RESPAWN_FAILED"/>
-  <int value="15" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP1"/>
-  <int value="16" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP2"/>
-  <int value="17" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP3"/>
-  <int value="18" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP4"/>
-  <int value="19" label="chrome::RESULT_CODE_NORMAL_EXIT_CANCEL"/>
-  <int value="20" label="chrome::RESULT_CODE_PROFILE_IN_USE"/>
-  <int value="21" label="chrome::RESULT_CODE_PACK_EXTENSION_ERROR"/>
-  <int value="22" label="chrome::RESULT_CODE_UNINSTALL_EXTENSION_ERROR"/>
-  <int value="23" label="chrome::RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED"/>
-  <int value="24" label="chrome::RESULT_CODE_NOTUSED_1"/>
-  <int value="25" label="chrome::RESULT_CODE_INSTALL_FROM_WEBSTORE_ERROR_2"/>
-  <int value="26" label="chrome::RESULT_CODE_NOTUSED_2"/>
-  <int value="27" label="chrome::RESULT_CODE_EULA_REFUSED"/>
-  <int value="28" label="chrome::RESULT_CODE_SXS_MIGRATION_FAILED"/>
-  <int value="29" label="chrome::RESULT_CODE_ACTION_DISALLOWED_BY_POLICY"/>
-  <int value="30" label="chrome::RESULT_CODE_INVALID_SANDBOX_STATE"/>
-  <int value="259" label="0x103 - STILL_ACTIVE."/>
-  <int value="85436397" label="0x517a7ed - Crashpad simulated exception"/>
-  <int value="1073807364" label="0x40010004 - DBG_TERMINATE_PROCESS"/>
-</enum>
-
-<enum name="WindowsVersion" type="int">
-  <int value="0" label="Pre-XP"/>
-  <int value="1" label="XP"/>
-  <int value="2" label="2003 Server"/>
-  <int value="3" label="Vista"/>
-  <int value="4" label="Windows 7"/>
-  <int value="5" label="Windows 8"/>
-  <int value="6" label="Windows 8.1"/>
-  <int value="7" label="Windows 10"/>
-  <int value="8" label="Windows 10 TH2"/>
-</enum>
-
-<enum name="WindowType" type="int">
-  <int value="0" label="Other"/>
-  <int value="1" label="Browser"/>
-  <int value="2" label="Hosted App"/>
-  <int value="3" label="Packaged App"/>
-</enum>
-
-<enum name="WinGetLastError" type="int">
-  <int value="0" label="SUCCESS"/>
-  <int value="1" label="INVALID_FUNCTION"/>
-  <int value="2" label="FILE_NOT_FOUND"/>
-  <int value="3" label="PATH_NOT_FOUND"/>
-  <int value="4" label="TOO_MANY_OPEN_FILES"/>
-  <int value="5" label="ACCESS_DENIED"/>
-  <int value="6" label="INVALID_HANDLE"/>
-  <int value="7" label="ARENA_TRASHED"/>
-  <int value="8" label="NOT_ENOUGH_MEMORY"/>
-  <int value="9" label="INVALID_BLOCK"/>
-  <int value="10" label="BAD_ENVIRONMENT"/>
-  <int value="11" label="BAD_FORMAT"/>
-  <int value="12" label="INVALID_ACCESS"/>
-  <int value="13" label="INVALID_DATA"/>
-  <int value="14" label="OUTOFMEMORY"/>
-  <int value="15" label="INVALID_DRIVE"/>
-  <int value="16" label="CURRENT_DIRECTORY"/>
-  <int value="17" label="NOT_SAME_DEVICE"/>
-  <int value="18" label="NO_MORE_FILES"/>
-  <int value="19" label="WRITE_PROTECT"/>
-  <int value="20" label="BAD_UNIT"/>
-  <int value="21" label="NOT_READY"/>
-  <int value="22" label="BAD_COMMAND"/>
-  <int value="23" label="CRC"/>
-  <int value="24" label="BAD_LENGTH"/>
-  <int value="25" label="SEEK"/>
-  <int value="26" label="NOT_DOS_DISK"/>
-  <int value="27" label="SECTOR_NOT_FOUND"/>
-  <int value="28" label="OUT_OF_PAPER"/>
-  <int value="29" label="WRITE_FAULT"/>
-  <int value="30" label="READ_FAULT"/>
-  <int value="31" label="GEN_FAILURE"/>
-  <int value="32" label="SHARING_VIOLATION"/>
-  <int value="33" label="LOCK_VIOLATION"/>
-  <int value="34" label="WRONG_DISK"/>
-  <int value="36" label="SHARING_BUFFER_EXCEEDED"/>
-  <int value="38" label="HANDLE_EOF"/>
-  <int value="39" label="HANDLE_DISK_FULL"/>
-  <int value="50" label="NOT_SUPPORTED"/>
-  <int value="51" label="REM_NOT_LIST"/>
-  <int value="52" label="DUP_NAME"/>
-  <int value="53" label="BAD_NETPATH"/>
-  <int value="54" label="NETWORK_BUSY"/>
-  <int value="55" label="DEV_NOT_EXIST"/>
-  <int value="56" label="TOO_MANY_CMDS"/>
-  <int value="57" label="ADAP_HDW_ERR"/>
-  <int value="58" label="BAD_NET_RESP"/>
-  <int value="59" label="UNEXP_NET_ERR"/>
-  <int value="60" label="BAD_REM_ADAP"/>
-  <int value="61" label="PRINTQ_FULL"/>
-  <int value="62" label="NO_SPOOL_SPACE"/>
-  <int value="63" label="PRINT_CANCELLED"/>
-  <int value="64" label="NETNAME_DELETED"/>
-  <int value="65" label="NETWORK_ACCESS_DENIED"/>
-  <int value="66" label="BAD_DEV_TYPE"/>
-  <int value="67" label="BAD_NET_NAME"/>
-  <int value="68" label="TOO_MANY_NAMES"/>
-  <int value="69" label="TOO_MANY_SESS"/>
-  <int value="70" label="SHARING_PAUSED"/>
-  <int value="71" label="REQ_NOT_ACCEP"/>
-  <int value="72" label="REDIR_PAUSED"/>
-  <int value="80" label="FILE_EXISTS"/>
-  <int value="82" label="CANNOT_MAKE"/>
-  <int value="83" label="FAIL_I24"/>
-  <int value="84" label="OUT_OF_STRUCTURES"/>
-  <int value="85" label="ALREADY_ASSIGNED"/>
-  <int value="86" label="INVALID_PASSWORD"/>
-  <int value="87" label="INVALID_PARAMETER"/>
-  <int value="88" label="NET_WRITE_FAULT"/>
-  <int value="89" label="NO_PROC_SLOTS"/>
-  <int value="100" label="TOO_MANY_SEMAPHORES"/>
-  <int value="101" label="EXCL_SEM_ALREADY_OWNED"/>
-  <int value="102" label="SEM_IS_SET"/>
-  <int value="103" label="TOO_MANY_SEM_REQUESTS"/>
-  <int value="104" label="INVALID_AT_INTERRUPT_TIME"/>
-  <int value="105" label="SEM_OWNER_DIED"/>
-  <int value="106" label="SEM_USER_LIMIT"/>
-  <int value="107" label="DISK_CHANGE"/>
-  <int value="108" label="DRIVE_LOCKED"/>
-  <int value="109" label="BROKEN_PIPE"/>
-  <int value="110" label="OPEN_FAILED"/>
-  <int value="111" label="BUFFER_OVERFLOW"/>
-  <int value="112" label="DISK_FULL"/>
-  <int value="113" label="NO_MORE_SEARCH_HANDLES"/>
-  <int value="114" label="INVALID_TARGET_HANDLE"/>
-  <int value="117" label="INVALID_CATEGORY"/>
-  <int value="118" label="INVALID_VERIFY_SWITCH"/>
-  <int value="119" label="BAD_DRIVER_LEVEL"/>
-  <int value="120" label="CALL_NOT_IMPLEMENTED"/>
-  <int value="121" label="SEM_TIMEOUT"/>
-  <int value="122" label="INSUFFICIENT_BUFFER"/>
-  <int value="123" label="INVALID_NAME"/>
-  <int value="124" label="INVALID_LEVEL"/>
-  <int value="125" label="NO_VOLUME_LABEL"/>
-  <int value="126" label="MOD_NOT_FOUND"/>
-  <int value="127" label="PROC_NOT_FOUND"/>
-  <int value="128" label="WAIT_NO_CHILDREN"/>
-  <int value="129" label="CHILD_NOT_COMPLETE"/>
-  <int value="130" label="DIRECT_ACCESS_HANDLE"/>
-  <int value="131" label="NEGATIVE_SEEK"/>
-  <int value="132" label="SEEK_ON_DEVICE"/>
-  <int value="133" label="IS_JOIN_TARGET"/>
-  <int value="134" label="IS_JOINED"/>
-  <int value="135" label="IS_SUBSTED"/>
-  <int value="136" label="NOT_JOINED"/>
-  <int value="137" label="NOT_SUBSTED"/>
-  <int value="138" label="JOIN_TO_JOIN"/>
-  <int value="139" label="SUBST_TO_SUBST"/>
-  <int value="140" label="JOIN_TO_SUBST"/>
-  <int value="141" label="SUBST_TO_JOIN"/>
-  <int value="142" label="BUSY_DRIVE"/>
-  <int value="143" label="SAME_DRIVE"/>
-  <int value="144" label="DIR_NOT_ROOT"/>
-  <int value="145" label="DIR_NOT_EMPTY"/>
-  <int value="146" label="IS_SUBST_PATH"/>
-  <int value="147" label="IS_JOIN_PATH"/>
-  <int value="148" label="PATH_BUSY"/>
-  <int value="149" label="IS_SUBST_TARGET"/>
-  <int value="150" label="SYSTEM_TRACE"/>
-  <int value="151" label="INVALID_EVENT_COUNT"/>
-  <int value="152" label="TOO_MANY_MUXWAITERS"/>
-  <int value="153" label="INVALID_LIST_FORMAT"/>
-  <int value="154" label="LABEL_TOO_LONG"/>
-  <int value="155" label="TOO_MANY_TCBS"/>
-  <int value="156" label="SIGNAL_REFUSED"/>
-  <int value="157" label="DISCARDED"/>
-  <int value="158" label="NOT_LOCKED"/>
-  <int value="159" label="BAD_THREADID_ADDR"/>
-  <int value="160" label="BAD_ARGUMENTS"/>
-  <int value="161" label="BAD_PATHNAME"/>
-  <int value="162" label="SIGNAL_PENDING"/>
-  <int value="164" label="MAX_THRDS_REACHED"/>
-  <int value="167" label="LOCK_FAILED"/>
-  <int value="170" label="BUSY"/>
-  <int value="171" label="DEVICE_SUPPORT_IN_PROGRESS"/>
-  <int value="173" label="CANCEL_VIOLATION"/>
-  <int value="174" label="ATOMIC_LOCKS_NOT_SUPPORTED"/>
-  <int value="180" label="INVALID_SEGMENT_NUMBER"/>
-  <int value="182" label="INVALID_ORDINAL"/>
-  <int value="183" label="ALREADY_EXISTS"/>
-  <int value="186" label="INVALID_FLAG_NUMBER"/>
-  <int value="187" label="SEM_NOT_FOUND"/>
-  <int value="188" label="INVALID_STARTING_CODESEG"/>
-  <int value="189" label="INVALID_STACKSEG"/>
-  <int value="190" label="INVALID_MODULETYPE"/>
-  <int value="191" label="INVALID_EXE_SIGNATURE"/>
-  <int value="192" label="EXE_MARKED_INVALID"/>
-  <int value="193" label="BAD_EXE_FORMAT"/>
-  <int value="194" label="ITERATED_DATA_EXCEEDS_64k"/>
-  <int value="195" label="INVALID_MINALLOCSIZE"/>
-  <int value="196" label="DYNLINK_FROM_INVALID_RING"/>
-  <int value="197" label="IOPL_NOT_ENABLED"/>
-  <int value="198" label="INVALID_SEGDPL"/>
-  <int value="199" label="AUTODATASEG_EXCEEDS_64k"/>
-  <int value="200" label="RING2SEG_MUST_BE_MOVABLE"/>
-  <int value="201" label="RELOC_CHAIN_XEEDS_SEGLIM"/>
-  <int value="202" label="INFLOOP_IN_RELOC_CHAIN"/>
-  <int value="203" label="ENVVAR_NOT_FOUND"/>
-  <int value="205" label="NO_SIGNAL_SENT"/>
-  <int value="206" label="FILENAME_EXCED_RANGE"/>
-  <int value="207" label="RING2_STACK_IN_USE"/>
-  <int value="208" label="META_EXPANSION_TOO_LONG"/>
-  <int value="209" label="INVALID_SIGNAL_NUMBER"/>
-  <int value="210" label="THREAD_1_INACTIVE"/>
-  <int value="212" label="LOCKED"/>
-  <int value="214" label="TOO_MANY_MODULES"/>
-  <int value="215" label="NESTING_NOT_ALLOWED"/>
-  <int value="216" label="EXE_MACHINE_TYPE_MISMATCH"/>
-  <int value="217" label="EXE_CANNOT_MODIFY_SIGNED_BINARY"/>
-  <int value="218" label="EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY"/>
-  <int value="220" label="FILE_CHECKED_OUT"/>
-  <int value="221" label="CHECKOUT_REQUIRED"/>
-  <int value="222" label="BAD_FILE_TYPE"/>
-  <int value="223" label="FILE_TOO_LARGE"/>
-  <int value="224" label="FORMS_AUTH_REQUIRED"/>
-  <int value="225" label="VIRUS_INFECTED"/>
-  <int value="226" label="VIRUS_DELETED"/>
-  <int value="229" label="PIPE_LOCAL"/>
-  <int value="230" label="BAD_PIPE"/>
-  <int value="231" label="PIPE_BUSY"/>
-  <int value="232" label="NO_DATA"/>
-  <int value="233" label="PIPE_NOT_CONNECTED"/>
-  <int value="234" label="MORE_DATA"/>
-  <int value="240" label="VC_DISCONNECTED"/>
-  <int value="254" label="INVALID_EA_NAME"/>
-  <int value="255" label="EA_LIST_INCONSISTENT"/>
-  <int value="258" label="TIMEOUT"/>
-  <int value="259" label="NO_MORE_ITEMS"/>
-  <int value="266" label="CANNOT_COPY"/>
-  <int value="267" label="DIRECTORY"/>
-  <int value="275" label="EAS_DIDNT_FIT"/>
-  <int value="276" label="EA_FILE_CORRUPT"/>
-  <int value="277" label="EA_TABLE_FULL"/>
-  <int value="278" label="INVALID_EA_HANDLE"/>
-  <int value="282" label="EAS_NOT_SUPPORTED"/>
-  <int value="288" label="NOT_OWNER"/>
-  <int value="298" label="TOO_MANY_POSTS"/>
-  <int value="299" label="PARTIAL_COPY"/>
-  <int value="300" label="OPLOCK_NOT_GRANTED"/>
-  <int value="301" label="INVALID_OPLOCK_PROTOCOL"/>
-  <int value="302" label="DISK_TOO_FRAGMENTED"/>
-  <int value="303" label="DELETE_PENDING"/>
-  <int value="304"
-      label="INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING"/>
-  <int value="305" label="SHORT_NAMES_NOT_ENABLED_ON_VOLUME"/>
-  <int value="306" label="SECURITY_STREAM_IS_INCONSISTENT"/>
-  <int value="307" label="INVALID_LOCK_RANGE"/>
-  <int value="308" label="IMAGE_SUBSYSTEM_NOT_PRESENT"/>
-  <int value="309" label="NOTIFICATION_GUID_ALREADY_DEFINED"/>
-  <int value="310" label="INVALID_EXCEPTION_HANDLER"/>
-  <int value="311" label="DUPLICATE_PRIVILEGES"/>
-  <int value="312" label="NO_RANGES_PROCESSED"/>
-  <int value="313" label="NOT_ALLOWED_ON_SYSTEM_FILE"/>
-  <int value="314" label="DISK_RESOURCES_EXHAUSTED"/>
-  <int value="315" label="INVALID_TOKEN"/>
-  <int value="316" label="DEVICE_FEATURE_NOT_SUPPORTED"/>
-  <int value="317" label="MR_MID_NOT_FOUND"/>
-  <int value="318" label="SCOPE_NOT_FOUND"/>
-  <int value="319" label="UNDEFINED_SCOPE"/>
-  <int value="320" label="INVALID_CAP"/>
-  <int value="321" label="DEVICE_UNREACHABLE"/>
-  <int value="322" label="DEVICE_NO_RESOURCES"/>
-  <int value="323" label="DATA_CHECKSUM_ERROR"/>
-  <int value="324" label="INTERMIXED_KERNEL_EA_OPERATION"/>
-  <int value="326" label="FILE_LEVEL_TRIM_NOT_SUPPORTED"/>
-  <int value="327" label="OFFSET_ALIGNMENT_VIOLATION"/>
-  <int value="328" label="INVALID_FIELD_IN_PARAMETER_LIST"/>
-  <int value="329" label="OPERATION_IN_PROGRESS"/>
-  <int value="330" label="BAD_DEVICE_PATH"/>
-  <int value="331" label="TOO_MANY_DESCRIPTORS"/>
-  <int value="332" label="SCRUB_DATA_DISABLED"/>
-  <int value="333" label="NOT_REDUNDANT_STORAGE"/>
-  <int value="334" label="RESIDENT_FILE_NOT_SUPPORTED"/>
-  <int value="335" label="COMPRESSED_FILE_NOT_SUPPORTED"/>
-  <int value="336" label="DIRECTORY_NOT_SUPPORTED"/>
-  <int value="337" label="NOT_READ_FROM_COPY"/>
-  <int value="350" label="FAIL_NOACTION_REBOOT"/>
-  <int value="351" label="FAIL_SHUTDOWN"/>
-  <int value="352" label="FAIL_RESTART"/>
-  <int value="353" label="MAX_SESSIONS_REACHED"/>
-  <int value="400" label="THREAD_MODE_ALREADY_BACKGROUND"/>
-  <int value="401" label="THREAD_MODE_NOT_BACKGROUND"/>
-  <int value="402" label="PROCESS_MODE_ALREADY_BACKGROUND"/>
-  <int value="403" label="PROCESS_MODE_NOT_BACKGROUND"/>
-  <int value="487" label="INVALID_ADDRESS"/>
-  <int value="500" label="USER_PROFILE_LOAD"/>
-  <int value="534" label="ARITHMETIC_OVERFLOW"/>
-  <int value="535" label="PIPE_CONNECTED"/>
-  <int value="536" label="PIPE_LISTENING"/>
-  <int value="537" label="VERIFIER_STOP"/>
-  <int value="538" label="ABIOS_ERROR"/>
-  <int value="539" label="WX86_WARNING"/>
-  <int value="540" label="WX86_ERROR"/>
-  <int value="541" label="TIMER_NOT_CANCELED"/>
-  <int value="542" label="UNWIND"/>
-  <int value="543" label="BAD_STACK"/>
-  <int value="544" label="INVALID_UNWIND_TARGET"/>
-  <int value="545" label="INVALID_PORT_ATTRIBUTES"/>
-  <int value="546" label="PORT_MESSAGE_TOO_LONG"/>
-  <int value="547" label="INVALID_QUOTA_LOWER"/>
-  <int value="548" label="DEVICE_ALREADY_ATTACHED"/>
-  <int value="549" label="INSTRUCTION_MISALIGNMENT"/>
-  <int value="550" label="PROFILING_NOT_STARTED"/>
-  <int value="551" label="PROFILING_NOT_STOPPED"/>
-  <int value="552" label="COULD_NOT_INTERPRET"/>
-  <int value="553" label="PROFILING_AT_LIMIT"/>
-  <int value="554" label="CANT_WAIT"/>
-  <int value="555" label="CANT_TERMINATE_SELF"/>
-  <int value="556" label="UNEXPECTED_MM_CREATE_ERR"/>
-  <int value="557" label="UNEXPECTED_MM_MAP_ERROR"/>
-  <int value="558" label="UNEXPECTED_MM_EXTEND_ERR"/>
-  <int value="559" label="BAD_FUNCTION_TABLE"/>
-  <int value="560" label="NO_GUID_TRANSLATION"/>
-  <int value="561" label="INVALID_LDT_SIZE"/>
-  <int value="563" label="INVALID_LDT_OFFSET"/>
-  <int value="564" label="INVALID_LDT_DESCRIPTOR"/>
-  <int value="565" label="TOO_MANY_THREADS"/>
-  <int value="566" label="THREAD_NOT_IN_PROCESS"/>
-  <int value="567" label="PAGEFILE_QUOTA_EXCEEDED"/>
-  <int value="568" label="LOGON_SERVER_CONFLICT"/>
-  <int value="569" label="SYNCHRONIZATION_REQUIRED"/>
-  <int value="570" label="NET_OPEN_FAILED"/>
-  <int value="571" label="IO_PRIVILEGE_FAILED"/>
-  <int value="572" label="CONTROL_C_EXIT"/>
-  <int value="573" label="MISSING_SYSTEMFILE"/>
-  <int value="574" label="UNHANDLED_EXCEPTION"/>
-  <int value="575" label="APP_INIT_FAILURE"/>
-  <int value="576" label="PAGEFILE_CREATE_FAILED"/>
-  <int value="577" label="INVALID_IMAGE_HASH"/>
-  <int value="578" label="NO_PAGEFILE"/>
-  <int value="579" label="ILLEGAL_FLOAT_CONTEXT"/>
-  <int value="580" label="NO_EVENT_PAIR"/>
-  <int value="581" label="DOMAIN_CTRLR_CONFIG_ERROR"/>
-  <int value="582" label="ILLEGAL_CHARACTER"/>
-  <int value="583" label="UNDEFINED_CHARACTER"/>
-  <int value="584" label="FLOPPY_VOLUME"/>
-  <int value="585" label="BIOS_FAILED_TO_CONNECT_INTERRUPT"/>
-  <int value="586" label="BACKUP_CONTROLLER"/>
-  <int value="587" label="MUTANT_LIMIT_EXCEEDED"/>
-  <int value="588" label="FS_DRIVER_REQUIRED"/>
-  <int value="589" label="CANNOT_LOAD_REGISTRY_FILE"/>
-  <int value="590" label="DEBUG_ATTACH_FAILED"/>
-  <int value="591" label="SYSTEM_PROCESS_TERMINATED"/>
-  <int value="592" label="DATA_NOT_ACCEPTED"/>
-  <int value="593" label="VDM_HARD_ERROR"/>
-  <int value="594" label="DRIVER_CANCEL_TIMEOUT"/>
-  <int value="595" label="REPLY_MESSAGE_MISMATCH"/>
-  <int value="596" label="LOST_WRITEBEHIND_DATA"/>
-  <int value="597" label="CLIENT_SERVER_PARAMETERS_INVALID"/>
-  <int value="598" label="NOT_TINY_STREAM"/>
-  <int value="599" label="STACK_OVERFLOW_READ"/>
-  <int value="600" label="CONVERT_TO_LARGE"/>
-  <int value="601" label="FOUND_OUT_OF_SCOPE"/>
-  <int value="602" label="ALLOCATE_BUCKET"/>
-  <int value="603" label="MARSHALL_OVERFLOW"/>
-  <int value="604" label="INVALID_VARIANT"/>
-  <int value="605" label="BAD_COMPRESSION_BUFFER"/>
-  <int value="606" label="AUDIT_FAILED"/>
-  <int value="607" label="TIMER_RESOLUTION_NOT_SET"/>
-  <int value="608" label="INSUFFICIENT_LOGON_INFO"/>
-  <int value="609" label="BAD_DLL_ENTRYPOINT"/>
-  <int value="610" label="BAD_SERVICE_ENTRYPOINT"/>
-  <int value="611" label="IP_ADDRESS_CONFLICT1"/>
-  <int value="612" label="IP_ADDRESS_CONFLICT2"/>
-  <int value="613" label="REGISTRY_QUOTA_LIMIT"/>
-  <int value="614" label="NO_CALLBACK_ACTIVE"/>
-  <int value="615" label="PWD_TOO_SHORT"/>
-  <int value="616" label="PWD_TOO_RECENT"/>
-  <int value="617" label="PWD_HISTORY_CONFLICT"/>
-  <int value="618" label="UNSUPPORTED_COMPRESSION"/>
-  <int value="619" label="INVALID_HW_PROFILE"/>
-  <int value="620" label="INVALID_PLUGPLAY_DEVICE_PATH"/>
-  <int value="621" label="QUOTA_LIST_INCONSISTENT"/>
-  <int value="622" label="EVALUATION_EXPIRATION"/>
-  <int value="623" label="ILLEGAL_DLL_RELOCATION"/>
-  <int value="624" label="DLL_INIT_FAILED_LOGOFF"/>
-  <int value="625" label="VALIDATE_CONTINUE"/>
-  <int value="626" label="NO_MORE_MATCHES"/>
-  <int value="627" label="RANGE_LIST_CONFLICT"/>
-  <int value="628" label="SERVER_SID_MISMATCH"/>
-  <int value="629" label="CANT_ENABLE_DENY_ONLY"/>
-  <int value="630" label="FLOAT_MULTIPLE_FAULTS"/>
-  <int value="631" label="FLOAT_MULTIPLE_TRAPS"/>
-  <int value="632" label="NOINTERFACE"/>
-  <int value="633" label="DRIVER_FAILED_SLEEP"/>
-  <int value="634" label="CORRUPT_SYSTEM_FILE"/>
-  <int value="635" label="COMMITMENT_MINIMUM"/>
-  <int value="636" label="PNP_RESTART_ENUMERATION"/>
-  <int value="637" label="SYSTEM_IMAGE_BAD_SIGNATURE"/>
-  <int value="638" label="PNP_REBOOT_REQUIRED"/>
-  <int value="639" label="INSUFFICIENT_POWER"/>
-  <int value="640" label="MULTIPLE_FAULT_VIOLATION"/>
-  <int value="641" label="SYSTEM_SHUTDOWN"/>
-  <int value="642" label="PORT_NOT_SET"/>
-  <int value="643" label="DS_VERSION_CHECK_FAILURE"/>
-  <int value="644" label="RANGE_NOT_FOUND"/>
-  <int value="646" label="NOT_SAFE_MODE_DRIVER"/>
-  <int value="647" label="FAILED_DRIVER_ENTRY"/>
-  <int value="648" label="DEVICE_ENUMERATION_ERROR"/>
-  <int value="649" label="MOUNT_POINT_NOT_RESOLVED"/>
-  <int value="650" label="INVALID_DEVICE_OBJECT_PARAMETER"/>
-  <int value="651" label="MCA_OCCURED"/>
-  <int value="652" label="DRIVER_DATABASE_ERROR"/>
-  <int value="653" label="SYSTEM_HIVE_TOO_LARGE"/>
-  <int value="654" label="DRIVER_FAILED_PRIOR_UNLOAD"/>
-  <int value="655" label="VOLSNAP_PREPARE_HIBERNATE"/>
-  <int value="656" label="HIBERNATION_FAILURE"/>
-  <int value="657" label="PWD_TOO_LONG"/>
-  <int value="665" label="FILE_SYSTEM_LIMITATION"/>
-  <int value="668" label="ASSERTION_FAILURE"/>
-  <int value="669" label="ACPI_ERROR"/>
-  <int value="670" label="WOW_ASSERTION"/>
-  <int value="671" label="PNP_BAD_MPS_TABLE"/>
-  <int value="672" label="PNP_TRANSLATION_FAILED"/>
-  <int value="673" label="PNP_IRQ_TRANSLATION_FAILED"/>
-  <int value="674" label="PNP_INVALID_ID"/>
-  <int value="675" label="WAKE_SYSTEM_DEBUGGER"/>
-  <int value="676" label="HANDLES_CLOSED"/>
-  <int value="677" label="EXTRANEOUS_INFORMATION"/>
-  <int value="678" label="RXACT_COMMIT_NECESSARY"/>
-  <int value="679" label="MEDIA_CHECK"/>
-  <int value="680" label="GUID_SUBSTITUTION_MADE"/>
-  <int value="681" label="STOPPED_ON_SYMLINK"/>
-  <int value="682" label="LONGJUMP"/>
-  <int value="683" label="PLUGPLAY_QUERY_VETOED"/>
-  <int value="684" label="UNWIND_CONSOLIDATE"/>
-  <int value="685" label="REGISTRY_HIVE_RECOVERED"/>
-  <int value="686" label="DLL_MIGHT_BE_INSECURE"/>
-  <int value="687" label="DLL_MIGHT_BE_INCOMPATIBLE"/>
-  <int value="688" label="DBG_EXCEPTION_NOT_HANDLED"/>
-  <int value="689" label="DBG_REPLY_LATER"/>
-  <int value="690" label="DBG_UNABLE_TO_PROVIDE_HANDLE"/>
-  <int value="691" label="DBG_TERMINATE_THREAD"/>
-  <int value="692" label="DBG_TERMINATE_PROCESS"/>
-  <int value="693" label="DBG_CONTROL_C"/>
-  <int value="694" label="DBG_PRINTEXCEPTION_C"/>
-  <int value="695" label="DBG_RIPEXCEPTION"/>
-  <int value="696" label="DBG_CONTROL_BREAK"/>
-  <int value="697" label="DBG_COMMAND_EXCEPTION"/>
-  <int value="698" label="OBJECT_NAME_EXISTS"/>
-  <int value="699" label="THREAD_WAS_SUSPENDED"/>
-  <int value="700" label="IMAGE_NOT_AT_BASE"/>
-  <int value="701" label="RXACT_STATE_CREATED"/>
-  <int value="702" label="SEGMENT_NOTIFICATION"/>
-  <int value="703" label="BAD_CURRENT_DIRECTORY"/>
-  <int value="704" label="FT_READ_RECOVERY_FROM_BACKUP"/>
-  <int value="705" label="FT_WRITE_RECOVERY"/>
-  <int value="706" label="IMAGE_MACHINE_TYPE_MISMATCH"/>
-  <int value="707" label="RECEIVE_PARTIAL"/>
-  <int value="708" label="RECEIVE_EXPEDITED"/>
-  <int value="709" label="RECEIVE_PARTIAL_EXPEDITED"/>
-  <int value="710" label="EVENT_DONE"/>
-  <int value="711" label="EVENT_PENDING"/>
-  <int value="712" label="CHECKING_FILE_SYSTEM"/>
-  <int value="713" label="FATAL_APP_EXIT"/>
-  <int value="714" label="PREDEFINED_HANDLE"/>
-  <int value="715" label="WAS_UNLOCKED"/>
-  <int value="716" label="SERVICE_NOTIFICATION"/>
-  <int value="717" label="WAS_LOCKED"/>
-  <int value="718" label="LOG_HARD_ERROR"/>
-  <int value="719" label="ALREADY_WIN32"/>
-  <int value="720" label="IMAGE_MACHINE_TYPE_MISMATCH_EXE"/>
-  <int value="721" label="NO_YIELD_PERFORMED"/>
-  <int value="722" label="TIMER_RESUME_IGNORED"/>
-  <int value="723" label="ARBITRATION_UNHANDLED"/>
-  <int value="724" label="CARDBUS_NOT_SUPPORTED"/>
-  <int value="725" label="MP_PROCESSOR_MISMATCH"/>
-  <int value="726" label="HIBERNATED"/>
-  <int value="727" label="RESUME_HIBERNATION"/>
-  <int value="728" label="FIRMWARE_UPDATED"/>
-  <int value="729" label="DRIVERS_LEAKING_LOCKED_PAGES"/>
-  <int value="730" label="WAKE_SYSTEM"/>
-  <int value="731" label="WAIT_1"/>
-  <int value="732" label="WAIT_2"/>
-  <int value="733" label="WAIT_3"/>
-  <int value="734" label="WAIT_63"/>
-  <int value="735" label="ABANDONED_WAIT_0"/>
-  <int value="736" label="ABANDONED_WAIT_63"/>
-  <int value="737" label="USER_APC"/>
-  <int value="738" label="KERNEL_APC"/>
-  <int value="739" label="ALERTED"/>
-  <int value="740" label="ELEVATION_REQUIRED"/>
-  <int value="741" label="REPARSE"/>
-  <int value="742" label="OPLOCK_BREAK_IN_PROGRESS"/>
-  <int value="743" label="VOLUME_MOUNTED"/>
-  <int value="744" label="RXACT_COMMITTED"/>
-  <int value="745" label="NOTIFY_CLEANUP"/>
-  <int value="746" label="PRIMARY_TRANSPORT_CONNECT_FAILED"/>
-  <int value="747" label="PAGE_FAULT_TRANSITION"/>
-  <int value="748" label="PAGE_FAULT_DEMAND_ZERO"/>
-  <int value="749" label="PAGE_FAULT_COPY_ON_WRITE"/>
-  <int value="750" label="PAGE_FAULT_GUARD_PAGE"/>
-  <int value="751" label="PAGE_FAULT_PAGING_FILE"/>
-  <int value="752" label="CACHE_PAGE_LOCKED"/>
-  <int value="753" label="CRASH_DUMP"/>
-  <int value="754" label="BUFFER_ALL_ZEROS"/>
-  <int value="755" label="REPARSE_OBJECT"/>
-  <int value="756" label="RESOURCE_REQUIREMENTS_CHANGED"/>
-  <int value="757" label="TRANSLATION_COMPLETE"/>
-  <int value="758" label="NOTHING_TO_TERMINATE"/>
-  <int value="759" label="PROCESS_NOT_IN_JOB"/>
-  <int value="760" label="PROCESS_IN_JOB"/>
-  <int value="761" label="VOLSNAP_HIBERNATE_READY"/>
-  <int value="762" label="FSFILTER_OP_COMPLETED_SUCCESSFULLY"/>
-  <int value="763" label="INTERRUPT_VECTOR_ALREADY_CONNECTED"/>
-  <int value="764" label="INTERRUPT_STILL_CONNECTED"/>
-  <int value="765" label="WAIT_FOR_OPLOCK"/>
-  <int value="766" label="DBG_EXCEPTION_HANDLED"/>
-  <int value="767" label="DBG_CONTINUE"/>
-  <int value="768" label="CALLBACK_POP_STACK"/>
-  <int value="769" label="COMPRESSION_DISABLED"/>
-  <int value="770" label="CANTFETCHBACKWARDS"/>
-  <int value="771" label="CANTSCROLLBACKWARDS"/>
-  <int value="772" label="ROWSNOTRELEASED"/>
-  <int value="773" label="BAD_ACCESSOR_FLAGS"/>
-  <int value="774" label="ERRORS_ENCOUNTERED"/>
-  <int value="775" label="NOT_CAPABLE"/>
-  <int value="776" label="REQUEST_OUT_OF_SEQUENCE"/>
-  <int value="777" label="VERSION_PARSE_ERROR"/>
-  <int value="778" label="BADSTARTPOSITION"/>
-  <int value="779" label="MEMORY_HARDWARE"/>
-  <int value="780" label="DISK_REPAIR_DISABLED"/>
-  <int value="781"
-      label="INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE"/>
-  <int value="782" label="SYSTEM_POWERSTATE_TRANSITION"/>
-  <int value="783" label="SYSTEM_POWERSTATE_COMPLEX_TRANSITION"/>
-  <int value="784" label="MCA_EXCEPTION"/>
-  <int value="785" label="ACCESS_AUDIT_BY_POLICY"/>
-  <int value="786" label="ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY"/>
-  <int value="787" label="ABANDON_HIBERFILE"/>
-  <int value="788" label="LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED"/>
-  <int value="789" label="LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR"/>
-  <int value="790" label="LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR"/>
-  <int value="791" label="BAD_MCFG_TABLE"/>
-  <int value="792" label="DISK_REPAIR_REDIRECTED"/>
-  <int value="793" label="DISK_REPAIR_UNSUCCESSFUL"/>
-  <int value="794" label="CORRUPT_LOG_OVERFULL"/>
-  <int value="795" label="CORRUPT_LOG_CORRUPTED"/>
-  <int value="796" label="CORRUPT_LOG_UNAVAILABLE"/>
-  <int value="797" label="CORRUPT_LOG_DELETED_FULL"/>
-  <int value="798" label="CORRUPT_LOG_CLEARED"/>
-  <int value="799" label="ORPHAN_NAME_EXHAUSTED"/>
-  <int value="800" label="OPLOCK_SWITCHED_TO_NEW_HANDLE"/>
-  <int value="801" label="CANNOT_GRANT_REQUESTED_OPLOCK"/>
-  <int value="802" label="CANNOT_BREAK_OPLOCK"/>
-  <int value="803" label="OPLOCK_HANDLE_CLOSED"/>
-  <int value="804" label="NO_ACE_CONDITION"/>
-  <int value="805" label="INVALID_ACE_CONDITION"/>
-  <int value="806" label="FILE_HANDLE_REVOKED"/>
-  <int value="807" label="IMAGE_AT_DIFFERENT_BASE"/>
-  <int value="994" label="EA_ACCESS_DENIED"/>
-  <int value="995" label="OPERATION_ABORTED"/>
-  <int value="996" label="IO_INCOMPLETE"/>
-  <int value="997" label="IO_PENDING"/>
-  <int value="998" label="NOACCESS"/>
-  <int value="999" label="SWAPERROR"/>
-</enum>
-
-<enum name="WinJumplistCategory" type="int">
-  <int value="0" label="Recently Closed"/>
-  <int value="1" label="Most Visited"/>
-  <int value="2" label="People"/>
-</enum>
-
-<enum name="WorkerThreadExitCode" type="int">
-  <int value="0" label="NotTerminated"/>
-  <int value="1" label="GracefullyTerminated"/>
-  <int value="2" label="SyncForciblyTerminated"/>
-  <int value="3" label="AsyncForciblyTerminated"/>
-</enum>
-
-<enum name="WrenchMenuAction" type="int">
-  <int value="0" label="New tab"/>
-  <int value="1" label="New window"/>
-  <int value="2" label="New incognito window"/>
-  <int value="3" label="Show bookmark bar"/>
-  <int value="4" label="Show bookmark manager"/>
-  <int value="5" label="Import settings"/>
-  <int value="6" label="Bookmark page"/>
-  <int value="7" label="Bookmark all tabs"/>
-  <int value="8" label="Pin to start screen"/>
-  <int value="9" label="Restore tab"/>
-  <int value="10" label="Win desktop restart"/>
-  <int value="11" label="Win8 metro restart"/>
-  <int value="12" label="Win chromeos restart"/>
-  <int value="13" label="Distill page"/>
-  <int value="14" label="Save page"/>
-  <int value="15" label="Find"/>
-  <int value="16" label="Print"/>
-  <int value="17" label="Cut"/>
-  <int value="18" label="Copy"/>
-  <int value="19" label="Paste"/>
-  <int value="20" label="Create hosted app"/>
-  <int value="21" label="Create shortcuts"/>
-  <int value="22" label="Manage extensions"/>
-  <int value="23" label="Task manager"/>
-  <int value="24" label="Clear browsing data"/>
-  <int value="25" label="View source"/>
-  <int value="26" label="Dev tools"/>
-  <int value="27" label="Dev tools console"/>
-  <int value="28" label="Dev tools devices"/>
-  <int value="29" label="Profiling enabled"/>
-  <int value="30" label="Zoom minus"/>
-  <int value="31" label="Zoom plus"/>
-  <int value="32" label="Fullscreen"/>
-  <int value="33" label="Show history"/>
-  <int value="34" label="Show downloads"/>
-  <int value="35" label="Show sync setup"/>
-  <int value="36" label="Options"/>
-  <int value="37" label="About"/>
-  <int value="38" label="Help page via menu"/>
-  <int value="39" label="Feedback"/>
-  <int value="40" label="Toggle request tablet site"/>
-  <int value="41" label="Recent tab"/>
-  <int value="42" label="Open a bookmark"/>
-  <int value="43" label="Exit"/>
-  <int value="44" label="Upgrade browser"/>
-  <int value="45" label="Cast"/>
-</enum>
-
-<enum name="XFrameOptions" type="int">
-  <int value="0" label="NONE">
-    A frame is loaded without any X-Frame-Options header.
-  </int>
-  <int value="1" label="DENY">X-Frame-Options: DENY.</int>
-  <int value="2" label="SAMEORIGIN">
-    X-Frame-Options: SAMEORIGIN. The navigation proceeds and every ancestor has
-    the same origin.
-  </int>
-  <int value="3" label="SAMEORIGIN_BLOCKED">
-    X-Frame-Options: SAMEORIGIN. The navigation is blocked because the top-frame
-    doesn't have the same origin.
-  </int>
-  <int value="4" label="SAMEORIGIN_WITH_BAD_ANCESTOR_CHAIN">
-    X-Frame-Options: SAMEORIGIN. The navigation proceeds despite the fact that
-    there is an ancestor that doesn't have the same origin.
-  </int>
-  <int value="5" label="ALLOWALL">X-Frame-Options: ALLOWALL.</int>
-  <int value="6" label="INVALID">
-    Invalid &quot;X-Frame-Options&quot; directive encountered.
-  </int>
-  <int value="7" label="CONFLICT">
-    The frame sets multiple &quot;X-Frame-Options&quot; header with conflicting
-    values.
-  </int>
-  <int value="8" label="BYPASS">
-    The &quot;frame-ancestors&quot; CSP directive should take effect instead.
-  </int>
-</enum>
-
-<enum name="XMLHttpRequestHeaderValueCategoryInRFC7230" type="int">
-  <int value="0" label="Header Value Invalid"/>
-  <int value="1" label="Header Value Affected By Normalization"/>
-  <int value="2" label="Header Value Valid"/>
-</enum>
-
-<enum name="XMLHttpRequestSendArrayBufferOrView" type="int">
-  <int value="0" label="XMLHttpRequestSendArrayBuffer"/>
-  <int value="1" label="XMLHttpRequestSendArrayBufferView"/>
-</enum>
-
-<enum name="YoungGenerationHandling" type="int">
-  <int value="0" label="Regular Scavenge"/>
-  <int value="1" label="Scavenge using fast promotion mode"/>
-</enum>
-
-<enum name="YouTubeRewriteStatus" type="int">
-  <int value="0" label="Success">Embed was properly rewritten.</int>
-  <int value="1" label="Success, params were rewritten">
-    Embed was rewritten but the params had to be fixed.
-  </int>
-  <int value="2" label="Success, had JS API enabled">
-    Embed was rewritten even though JS API was enabled (Android only).
-  </int>
-  <int value="3" label="Embed not rewritten, JS API enabled">
-    Embed was not rewritten because JS API was enabled.
-  </int>
-</enum>
-
-<enum name="ZeroSuggestEligibleOnFocus" type="int">
-  <int value="0" label="Eligible">
-    URL can be currently sent to the suggest server.
-  </int>
-  <int value="1"
-      label="Generally eligible in current context but particular URL
-             ineligible">
-    URL cannot be sent to the suggest server but another URL would be eligible
-    at this time.
-  </int>
-  <int value="2" label="Generally ineligible in current context">
-    No URL can be sent to the suggest server at this time.
-  </int>
-</enum>
-
-</enums>
-
-<!-- Histogram suffixes list -->
-
-<histogram_suffixes_list>
-
-<histogram_suffixes name="AccountInvestigationReportingType">
-  <suffix name="OnChange"
-      label="Driven from a change in signin status or change in content area
-             GAIA accounts."/>
-  <suffix name="Periodic" label="Emitted once per 24 hours."/>
-  <affected-histogram name="Signin.CookieJar.ChromeAccountRelation"/>
-  <affected-histogram name="Signin.CookieJar.SignedInCount"/>
-  <affected-histogram name="Signin.CookieJar.SignedOutCount"/>
-  <affected-histogram name="Signin.CookieJar.StableAge"/>
-  <affected-histogram name="Signin.CookieJar.TotalCount"/>
-  <affected-histogram name="Signin.IsShared"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ActiveNetworkState">
-  <suffix name="Offline"
-      label="network manager thinks that the active network is offline"/>
-  <suffix name="Online"
-      label="network manager thinks that the active network is online"/>
-  <suffix name="RestrictedPool"
-      label="network manager thinks that the active network is behind portal"/>
-  <affected-histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"/>
-  <affected-histogram name="CaptivePortal.Session.DiscrepancyWithShill"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AffiliationDummyData" separator=".">
-  <suffix name="OnStartup"
-      label="with the dummy data being requested shortly after start-up"/>
-  <suffix name="Periodic"
-      label="with the dummy data being requested periodically later"/>
-  <affected-histogram
-      name="PasswordManager.AffiliationDummyData.RequestResultCount"/>
-  <affected-histogram
-      name="PasswordManager.AffiliationDummyData.RequestSuccess"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AlternateProtocol">
-  <suffix name="AlternateProtocol_spdy"
-      label="with alternate protocol available but http is used"/>
-  <suffix name="AlternateProtocol_http"
-      label="(with alternate protocol available and spdy is used"/>
-  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
-  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidBootProgressEvents" separator="_">
-  <suffix name="ams_ready" label="For the boot_progress_ams_ready event."/>
-  <suffix name="enable_screen"
-      label="For the boot_progress_enable_screen event."/>
-  <suffix name="pms_data_scan_start"
-      label="For the boot_progress_pms_data_scan_start event."/>
-  <suffix name="pms_ready" label="For the boot_progress_pms_ready event."/>
-  <suffix name="pms_scan_end"
-      label="For the boot_progress_pms_scan_end event."/>
-  <suffix name="pms_start" label="For the boot_progress_pms_start event."/>
-  <suffix name="pms_system_scan_start"
-      label="For the boot_progress_pms_system_scan_start event."/>
-  <suffix name="preload_end" label="For the boot_progress_preload_end event."/>
-  <suffix name="preload_start"
-      label="For the boot_progress_preload_start event."/>
-  <suffix name="start" label="For the boot_progress_start event."/>
-  <suffix name="system_run" label="For the boot_progress_system_run event."/>
-  <affected-histogram name="Arc.boot_progress"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidCrashUploadTypes">
-  <suffix name="Browser" label="Measures browser crash uploads."/>
-  <suffix name="GPU" label="Measures GPU crash uploads."/>
-  <suffix name="Other" label="Measures other crash uploads."/>
-  <suffix name="Renderer" label="Measures renderer crash uploads."/>
-  <affected-histogram name="Tab.AndroidCrashUpload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidDownloadTypes" separator=".">
-  <suffix name="Audio"/>
-  <suffix name="Document"/>
-  <suffix name="Image"/>
-  <suffix name="OfflinePage"/>
-  <suffix name="Other"/>
-  <suffix name="Total"/>
-  <suffix name="Video"/>
-  <affected-histogram name="Android.DownloadManager.InitialCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidGATTEvents" separator=".">
-  <suffix name="onCharacteristicRead.Status"/>
-  <suffix name="onCharacteristicWrite.Status"/>
-  <suffix name="onConnectionStateChange.Status.Connected"
-      label="While Connected"/>
-  <suffix name="onConnectionStateChange.Status.Disconnected"
-      label="While Disonnected"/>
-  <suffix name="onConnectionStateChange.Status.InvalidState"
-      label="While InvalidState"/>
-  <suffix name="onDescriptorRead.Status"/>
-  <suffix name="onDescriptorWrite.Status"/>
-  <suffix name="onServicesDiscovered.Status.Connected" label="While Connected"/>
-  <suffix name="onServicesDiscovered.Status.Disconnected"
-      label="While Disconnected"/>
-  <affected-histogram name="Bluetooth.Web.Android"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidGetAccountsTypes">
-  <suffix name="AccountManager" label="Using Android AccountManager API"/>
-  <suffix name="GoogleAuthUtil" label="Using GoogleAuthUtil API"/>
-  <affected-histogram name="Signin.AndroidGetAccountsTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AndroidTabPersistentStoreTime" separator=".">
-  <suffix name="CleanupAllEncryptedTime">
-    <obsolete>
-      Original code deleted in a refactoring.
-    </obsolete>
-  </suffix>
-  <suffix name="LoadStateInternalPrefetchTime"/>
-  <suffix name="LoadStateInternalTime"/>
-  <suffix name="LoadStateTime"/>
-  <suffix name="MergeStateInternalTime"/>
-  <suffix name="MergeStateInternalFetchTime"/>
-  <suffix name="ReadMergedStateTime"/>
-  <suffix name="ReadSavedStateTime"/>
-  <suffix name="RestoreTabPrefetchTime"/>
-  <suffix name="RestoreTabTime"/>
-  <suffix name="SaveListTime"/>
-  <suffix name="SaveStateTime"/>
-  <suffix name="SaveTabsTime"/>
-  <affected-histogram name="Android.StrictMode.TabPersistentStore"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AppListFirstPaintWarmStartFast" separator="">
-  <suffix name="" label="Normal start."/>
-  <suffix name="Fast"
-      label="Fast start by skipping normal chrome.dll startup."/>
-  <affected-histogram name="Startup.AppListFirstPaintWarmStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AsyncDNSPref">
-  <suffix name="Disabled"/>
-  <suffix name="Enabled"/>
-  <affected-histogram name="AsyncDNS.PrefDefaultSource"/>
-  <affected-histogram name="AsyncDNS.PrefSource"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AsyncSlowStart">
-  <suffix name="AsyncSlowStart" label="Async Slow Start on"/>
-  <suffix name="AsyncSlowStart_off" label="Async Slow Start off"/>
-  <suffix name="AsyncSlowStart_on" label="Async Slow Start on"/>
-  <affected-histogram name="Net.Transaction_Connected_New"/>
-  <affected-histogram name="Renderer4.StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AttemptResultCode">
-  <obsolete>
-    Deprecated 2016/03. The async set-as-default experiments are finished.
-  </obsolete>
-  <suffix name="Success"/>
-  <suffix name="Failure"/>
-  <suffix name="Abandoned"/>
-  <suffix name="Retry"/>
-  <suffix name="NoErrorsNotDefault"/>
-  <affected-histogram name="DefaultBrowser.AsyncSetAsDefault.Duration"/>
-  <affected-histogram name="DefaultBrowser.SetDefaultAsyncDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AudioLatency" separator=".">
-  <suffix name="LatencyExactMs" label="Exact latency in milliseconds"/>
-  <suffix name="LatencyInteractive" label="Interactive latency"/>
-  <suffix name="LatencyRtc" label="RTC latency"/>
-  <suffix name="LatencyPlayback" label="Playback latency"/>
-  <affected-histogram name="Media.Audio.Render.BrowserCallbackRegularity"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillCreditCardInfoBarSaveType" separator=".">
-  <suffix name="Local" label="Local credit card save"/>
-  <suffix name="Server" label="Server/upload credit card save"/>
-  <affected-histogram name="Autofill.CreditCardInfoBar"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillDataAvailability" separator=".">
-  <suffix name="WithNoData" label="no autofill data"/>
-  <suffix name="WithOnlyServerData" label="only server autofill data"/>
-  <suffix name="WithOnlyLocalData" label="only local autofill data"/>
-  <suffix name="WithBothServerAndLocalData"
-      label="both server and local autofill data"/>
-  <affected-histogram name="Autofill.FormEvents.Address"/>
-  <affected-histogram name="Autofill.FormEvents.CreditCard"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillPayloadCompressionType" separator=".">
-  <suffix name="Query" label="Query request compression"/>
-  <suffix name="Upload" label="Upload request compression"/>
-  <affected-histogram name="Autofill.PayloadCompressionRatio"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillRealPanResultGroups" separator=".">
-  <suffix name="Failure" label="Failure"/>
-  <suffix name="NetworkError" label="Network errors"/>
-  <suffix name="Success" label="Success"/>
-  <affected-histogram name="Autofill.UnmaskPrompt.GetRealPanDuration"/>
-  <affected-histogram name="Autofill.UnmaskPrompt.UnmaskingDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillSaveCreditCardPromptDestination"
-    separator=".">
-  <suffix name="Local" label="to local storage"/>
-  <suffix name="Upload" label="to upload"/>
-  <affected-histogram name="Autofill.SaveCreditCardPrompt"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillSaveCreditCardPromptShow" separator=".">
-  <suffix name="FirstShow"
-      label="first time prompt is shown for a single credit card submit"/>
-  <suffix name="Reshows" label="all shows after the first one, combined"/>
-  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local"/>
-  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillServerExperiments">
-  <obsolete>
-    Deprecated as of at least 2013. Current autofill experiments rely on Finch
-    rather than a custom experimentation setup.
-  </obsolete>
-  <suffix name="ar06" label="Acceptance ratio: 0.6"/>
-  <suffix name="ar1" label="Acceptance ratio: 1.0"/>
-  <suffix name="ar2" label="Acceptance ratio: 2.0"/>
-  <suffix name="ar4" label="Acceptance ratio: 4.0"/>
-  <suffix name="ar04wr3fs4"
-      label="Acceptance ratio: 0.4; winner lead ratio: 3.0; min form score: 4"/>
-  <suffix name="ar05wlr15"
-      label="Acceptance ratio: 0.5; winner lead ratio: 1.5"/>
-  <suffix name="ar05wlr25"
-      label="Acceptance ratio: 0.5; winner lead ratio: 2.5"/>
-  <suffix name="ar05wr15fs5"
-      label="Acceptance ratio: 0.5; winner lead ratio: 1.5; min form score: 5"/>
-  <suffix name="fp05" label="Probability picker algorithm, p=0.5"/>
-  <suffix name="fp025" label="Probability picker algorithm, p=0.25"/>
-  <suffix name="fp05cc03"
-      label="Probability picker algorithm, p=0.5; p_ccname=0.3"/>
-  <suffix name="fp05cco03"
-      label="Probability picker algorithm, p=0.5;
-             p_ccname_given_other_cc_fields=0.3"/>
-  <suffix name="fp05cco03cstd"
-      label="Probability picker algorithm, p=0.5;
-             p_ccname_given_other_cc_fields=0.3; with fallback to the default
-             algorithm"/>
-  <suffix name="fp05cc03e1"
-      label="Probability picker algorithm, p=0.5 for cc and company name
-             fields; p_ccname_given_other_cc_fields=0.3; with fallback to the
-             default algorithm;"/>
-  <suffix name="tbar1" label="Use only Toolbar upload data"/>
-  <affected-histogram name="Autofill.Quality"/>
-  <affected-histogram name="AutoFill.Quality"/>
-  <affected-histogram name="Autofill.Quality.HeuristicType"/>
-  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
-  <affected-histogram name="Autofill.Quality.PredictedType"/>
-  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
-  <affected-histogram name="Autofill.Quality.ServerType"/>
-  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillStoredServerCardType" separator=".">
-  <suffix name="Masked" label="Masked cards"/>
-  <suffix name="Unmasked" label="Unmasked cards (locally cached)"/>
-  <affected-histogram name="Autofill.StoredServerCreditCardCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="AutofillUnmaskPromptCloseReasonEvents" separator=".">
-  <suffix name="Failure" label="Failure"/>
-  <suffix name="NoAttempts" label="No attempts"/>
-  <suffix name="Success" label="Success"/>
-  <suffix name="AbandonUnmasking" label="Abandon unmasking"/>
-  <affected-histogram name="Autofill.UnmaskPrompt.Duration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BadBlockCounts" separator=".">
-  <suffix name="Backupsys" label="backupsys partition"/>
-  <suffix name="Bbt" label="bbt partition"/>
-  <suffix name="Block0" label="block0 partition"/>
-  <suffix name="Bootloader" label="bootloader partition"/>
-  <suffix name="Cache" label="cache partition"/>
-  <suffix name="Factory_store" label="factory_store partition"/>
-  <suffix name="Fts" label="fts partition"/>
-  <suffix name="Kernel" label="kernel partition"/>
-  <suffix name="Postbootloader" label="postbootloader partition"/>
-  <suffix name="Postbootloader-B" label="postbootloader-B partition"/>
-  <suffix name="Prebootloader" label="prebootloader partition"/>
-  <suffix name="Recovery" label="recovery partition"/>
-  <suffix name="Rootfs" label="rootfs partition"/>
-  <suffix name="Total" label="total partition"/>
-  <suffix name="TZ" label="TZ partition"/>
-  <suffix name="TZ-B" label="TZ-B partition"/>
-  <suffix name="Userdata" label="userdata partition"/>
-  <affected-histogram name="Platform.Storage.Flash.BadBlocks"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BatchStunPingParameters" separator=".">
-  <suffix name="1ms.1" label="1ms gap, 1st batch"/>
-  <suffix name="1ms.2" label="1ms gap, 2nd batch"/>
-  <suffix name="1ms.3" label="1ms gap, 3rd batch"/>
-  <suffix name="5ms.1" label="5ms gap, 1st batch"/>
-  <suffix name="5ms.2" label="5ms gap, 2nd batch"/>
-  <suffix name="5ms.3" label="5ms gap, 3rd batch"/>
-  <suffix name="10ms.1" label="10ms gap, 1st batch"/>
-  <suffix name="10ms.2" label="10ms gap, 2nd batch"/>
-  <suffix name="10ms.3" label="10ms gap, 3rd batch"/>
-  <suffix name="25ms.1" label="25ms gap, 1st batch"/>
-  <suffix name="25ms.2" label="25ms gap, 2nd batch"/>
-  <suffix name="25ms.3" label="25ms gap, 3rd batch"/>
-  <suffix name="50ms.1" label="50ms gap, 1st batch"/>
-  <suffix name="50ms.2" label="50ms gap, 2nd batch"/>
-  <suffix name="50ms.3" label="50ms gap, 3rd batch"/>
-  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NoNAT"/>
-  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NonSymNAT"/>
-  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.SymNAT"/>
-  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
-  <suffix name="Canvas"/>
-  <suffix name="ImageBitmap"/>
-  <suffix name="Others"/>
-  <suffix name="SVG"/>
-  <suffix name="Video"/>
-  <affected-histogram name="Blink.Canvas.DrawImage"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasDurationBySource" separator=".">
-  <suffix name="CPU"/>
-  <suffix name="DisplayList"/>
-  <suffix name="GPU"/>
-  <affected-histogram name="Blink.Canvas.DrawImage.Canvas"/>
-  <affected-histogram name="Blink.Canvas.DrawImage.ImageBitmap"/>
-  <affected-histogram name="Blink.Canvas.DrawImage.Others"/>
-  <affected-histogram name="Blink.Canvas.DrawImage.SVG"/>
-  <affected-histogram name="Blink.Canvas.DrawImage.Video"/>
-  <affected-histogram name="Blink.Canvas.GetImageData"/>
-  <affected-histogram name="Blink.Canvas.PutImageData"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasOffscreenCommitType" separator=".">
-  <suffix name="GPUCanvasGPUCompositingMain"/>
-  <suffix name="GPUCanvasGPUCompositingWorker"/>
-  <suffix name="GPUCanvasSoftwareCompositingMain"/>
-  <suffix name="GPUCanvasSoftwareCompositingWorker"/>
-  <suffix name="SoftwareCanvasGPUCompositingMain"/>
-  <suffix name="SoftwareCanvasGPUCompositingWorker"/>
-  <suffix name="SoftwareCanvasSoftwareCompositingMain"/>
-  <suffix name="SoftwareCanvasSoftwareCompositingWorker"/>
-  <affected-histogram name="Blink.Canvas.OffscreenCommitTimer"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasToBlobIdleEncodAndDelayType" separator=".">
-  <suffix name="JPEG"/>
-  <suffix name="PNG"/>
-  <affected-histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration"/>
-  <affected-histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasToBlobType" separator=".">
-  <suffix name="JPEG"/>
-  <suffix name="PNG"/>
-  <suffix name="WEBP"/>
-  <affected-histogram name="Blink.Canvas.ToBlobDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkCanvasToDataURLTime" separator=".">
-  <suffix name="BMP">
-    <obsolete>
-      Removed in Oct 2016
-    </obsolete>
-  </suffix>
-  <suffix name="GIF">
-    <obsolete>
-      Removed in Oct 2016
-    </obsolete>
-  </suffix>
-  <suffix name="ICON">
-    <obsolete>
-      Removed in Oct 2016
-    </obsolete>
-  </suffix>
-  <suffix name="JPEG"/>
-  <suffix name="PNG"/>
-  <suffix name="TIFF">
-    <obsolete>
-      Removed in Oct 2016
-    </obsolete>
-  </suffix>
-  <suffix name="Unknown">
-    <obsolete>
-      Removed in Oct 2016
-    </obsolete>
-  </suffix>
-  <suffix name="WEBP"/>
-  <affected-histogram name="Blink.Canvas.ToDataURL"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="BlinkGCReason">
-  <suffix name="IdleGC" label="Idle GC"/>
-  <suffix name="PreciseGC" label="Precise GC"/>
-  <suffix name="ConservativeGC" label="Conservative GC"/>
-  <suffix name="ForcedGC" label="Forced GC for testing"/>
-  <suffix name="MemoryPressureGC" label="Memory pressure GC"/>
-  <suffix name="PageNavigationGC" label="Page navigation GC"/>
-  <affected-histogram name="BlinkGC.CollectionRate"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CachedResourceType" separator=".">
-  <suffix name="JavaScript"
-      label="Showing cache patterns only for JavaScript resources."/>
-  <suffix name="CSS" label="Showing cache patterns only for CSS resources."/>
-  <suffix name="MainFrameHTML"
-      label="Showing cache patterns only for main-frame HTML resources."/>
-  <suffix name="NonMainFrameHTML"
-      label="Showing cache patterns only for non-main-frame HTML resources."/>
-  <suffix name="Image"
-      label="Showing cache patterns only for image resources."/>
-  <suffix name="TinyImage"
-      label="Showing cache patterns only for image resources with
-             content-length less than 100 bytes."/>
-  <suffix name="NonTinyImage"
-      label="Showing cache patterns only for image resources with
-             content-length &gt;= 100 bytes."/>
-  <suffix name="Font" label="Showing cache patterns only for font resources."/>
-  <suffix name="Audio"
-      label="Showing cache patterns only for audio resources."/>
-  <suffix name="Video"
-      label="Showing cache patterns only for video resources."/>
-  <affected-histogram name="HttpCache.Pattern"/>
-  <affected-histogram
-      name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed"/>
-  <affected-histogram name="HttpCache.ValidationCause"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheInstance" separator="." ordering="prefix">
-  <suffix name="App"
-      label="Collected from the HTML5 Application Cache instance."/>
-  <suffix name="Http" label="Collected from the HTTP Cache instance."/>
-  <suffix name="Media" label="Collected from the Media Cache instance."/>
-  <affected-histogram name="SimpleCache.CacheSizeOnInit"/>
-  <affected-histogram name="SimpleCache.CheckCRCResult"/>
-  <affected-histogram name="SimpleCache.CreationToIndex"/>
-  <affected-histogram name="SimpleCache.CreationToIndexFail"/>
-  <affected-histogram name="SimpleCache.EntryCreatedAndStream2Omitted"/>
-  <affected-histogram name="SimpleCache.EntryCreationResult"/>
-  <affected-histogram name="SimpleCache.EntryCreationTime"/>
-  <affected-histogram name="SimpleCache.EntryOpenedAndStream2Removed"/>
-  <affected-histogram name="SimpleCache.EntryOperationsPending"/>
-  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart"/>
-  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart2"/>
-  <affected-histogram name="SimpleCache.Eviction.EntryCount"/>
-  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart"/>
-  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2"/>
-  <affected-histogram name="SimpleCache.Eviction.Result"/>
-  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted"/>
-  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted2"/>
-  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone"/>
-  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone2"/>
-  <affected-histogram name="SimpleCache.Eviction.TimeToDone"/>
-  <affected-histogram name="SimpleCache.Eviction.TimeToSelectEntries"/>
-  <affected-histogram name="SimpleCache.FileDescriptorLimitHard"/>
-  <affected-histogram name="SimpleCache.FileDescriptorLimitSoft"/>
-  <affected-histogram name="SimpleCache.FileDescriptorLimitStatus"/>
-  <affected-histogram name="SimpleCache.GlobalOpenEntryCount"/>
-  <affected-histogram name="SimpleCache.HeaderSize"/>
-  <affected-histogram name="SimpleCache.HeaderSizeChange"/>
-  <affected-histogram name="SimpleCache.HeaderSizeDecreaseAbsolute"/>
-  <affected-histogram name="SimpleCache.HeaderSizeDecreasePercentage"/>
-  <affected-histogram name="SimpleCache.HeaderSizeIncreaseAbsolute"/>
-  <affected-histogram name="SimpleCache.HeaderSizeIncreasePercentage"/>
-  <affected-histogram name="SimpleCache.IndexCorrupt"/>
-  <affected-histogram name="SimpleCache.IndexCreatedEntryCount"/>
-  <affected-histogram name="SimpleCache.IndexEntriesLoaded"/>
-  <affected-histogram name="SimpleCache.IndexEntriesRestored"/>
-  <affected-histogram name="SimpleCache.IndexFileStateOnLoad"/>
-  <affected-histogram name="SimpleCache.IndexInitializationWaiters"/>
-  <affected-histogram name="SimpleCache.IndexInitializeMethod"/>
-  <affected-histogram name="SimpleCache.IndexLoadTime"/>
-  <affected-histogram name="SimpleCache.IndexNumEntriesOnInit"/>
-  <affected-histogram name="SimpleCache.IndexNumEntriesOnWrite"/>
-  <affected-histogram name="SimpleCache.IndexRestoreTime"/>
-  <affected-histogram name="SimpleCache.IndexWriteInterval.Background"/>
-  <affected-histogram name="SimpleCache.IndexWriteInterval.Foreground"/>
-  <affected-histogram name="SimpleCache.IndexWriteReason"/>
-  <affected-histogram name="SimpleCache.IndexWriteReasonAtLoad"/>
-  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Background"/>
-  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Foreground"/>
-  <affected-histogram name="SimpleCache.KeyMatchedOnOpen"/>
-  <affected-histogram name="SimpleCache.LastClusterLossPercent"/>
-  <affected-histogram name="SimpleCache.LastClusterSize"/>
-  <affected-histogram name="SimpleCache.MaxCacheSizeOnInit"/>
-  <affected-histogram name="SimpleCache.OpenEntryIndexState"/>
-  <affected-histogram name="SimpleCache.PercentFullOnInit"/>
-  <affected-histogram name="SimpleCache.ReadIsParallelizable"/>
-  <affected-histogram name="SimpleCache.ReadResult"/>
-  <affected-histogram name="SimpleCache.StaleIndexExtraEntryCount"/>
-  <affected-histogram name="SimpleCache.StaleIndexMissedEntryCount"/>
-  <affected-histogram name="SimpleCache.StaleIndexQuality"/>
-  <affected-histogram name="SimpleCache.SyncCheckEOFHasCrc"/>
-  <affected-histogram name="SimpleCache.SyncCheckEOFResult"/>
-  <affected-histogram name="SimpleCache.SyncCloseResult"/>
-  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
-  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError_WithIndex"/>
-  <affected-histogram
-      name="SimpleCache.SyncCreatePlatformFileError_WithoutIndex"/>
-  <affected-histogram name="SimpleCache.SyncCreateResult"/>
-  <affected-histogram name="SimpleCache.SyncCreateResult_WithIndex"/>
-  <affected-histogram name="SimpleCache.SyncCreateResult_WithoutIndex"/>
-  <affected-histogram name="SimpleCache.SyncKeySHA256Result"/>
-  <affected-histogram name="SimpleCache.SyncOpenEntryAge"/>
-  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
-  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError_WithIndex"/>
-  <affected-histogram
-      name="SimpleCache.SyncOpenPlatformFileError_WithoutIndex"/>
-  <affected-histogram name="SimpleCache.SyncOpenResult"/>
-  <affected-histogram name="SimpleCache.SyncOpenResult_WithIndex"/>
-  <affected-histogram name="SimpleCache.SyncOpenResult_WithoutIndex"/>
-  <affected-histogram name="SimpleCache.SyncWriteResult"/>
-  <affected-histogram name="SimpleCache.WriteDependencyType"/>
-  <affected-histogram name="SimpleCache.WriteResult"/>
-  <affected-histogram name="SimpleCache.WriteResult2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheListSize">
-  <obsolete>
-    Experiments no longer active.
-  </obsolete>
-  <suffix name="CacheListSize_12" label="Control"/>
-  <suffix name="CacheListSize_13" label="Extended deleted list (2x)"/>
-  <suffix name="CacheListSize_14" label="Out of the experiment"/>
-  <affected-histogram name="DiskCache.TotalIOTime"/>
-  <affected-histogram name="Net.HttpJob.TotalTime"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_Reload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheSensitivityAnalysis">
-  <obsolete>
-    Experiments no longer active.
-  </obsolete>
-  <suffix name="No" label="Turned off"/>
-  <suffix name="Control" label="Control group"/>
-  <suffix name="ControlA" label="Control, Group A"/>
-  <suffix name="ControlB" label="Control, Group B"/>
-  <suffix name="100" label="100% slowdown"/>
-  <suffix name="100A" label="100% slowdown, Group A"/>
-  <suffix name="100B" label="100% slowdown, Group B"/>
-  <suffix name="200A" label="200% slowdown, Group A"/>
-  <suffix name="200B" label="200% slowdown, Group B"/>
-  <suffix name="400A" label="400% slowdown, Group A"/>
-  <suffix name="400B" label="400% slowdown, Group B"/>
-  <affected-histogram name="Net.HttpJob.TotalTime"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
-  <affected-histogram name="PLT.BeginToFinish_CacheSensitivity"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_CacheSensitivity"/>
-  <affected-histogram name="PLT.BeginToFirstPaint_CacheSensitivity"/>
-  <affected-histogram name="PLT.CommitToFirstPaint_CacheSensitivity"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheSensitivityHistograms">
-  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFirstPaint"/>
-  <affected-histogram name="PLT.CommitToFirstPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheSensitivityHistograms">
-  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFirstPaint"/>
-  <affected-histogram name="PLT.CommitToFirstPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CacheThrottle">
-  <suffix name="CacheThrottle_On" label="Throttling payload requests."/>
-  <suffix name="CacheThrottle_Off" label="Control group."/>
-  <affected-histogram name="DiskCache.TotalIOTime"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_Reload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CanvasRequestedImageMimeTypeFunctions">
-  <suffix name="toDataURL" label="Image formats passed to canvas.toDataURL"/>
-  <suffix name="toBlobCallback"
-      label="Image formats passed to canvas.toBlob (callback)"/>
-  <suffix name="convertToBlobPromise"
-      label="Image formats passed to OffscreenCanvas.convertToBlob (promise)"/>
-  <affected-histogram name="Canvas.RequestedImageMimeTypes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CertificateTypeAlgorithms" separator=".">
-  <owner>rsleevi@chromium.org</owner>
-  <suffix name="DH" label="DH"/>
-  <suffix name="DSA" label="DSA"/>
-  <suffix name="ECDH" label="ECDH"/>
-  <suffix name="ECDSA" label="ECDSA"/>
-  <suffix name="RSA" label="RSA"/>
-  <suffix name="Unknown" label="SPKI unrecognized by cert library"/>
-  <suffix name="Unsupported" label="Un-histogrammed type - please fix"/>
-  <affected-histogram name="CertificateType.BR.Intermediate"/>
-  <affected-histogram name="CertificateType.BR.Leaf"/>
-  <affected-histogram name="CertificateType.BR.Root"/>
-  <affected-histogram name="CertificateType.NonBR.Intermediate"/>
-  <affected-histogram name="CertificateType.NonBR.Leaf"/>
-  <affected-histogram name="CertificateType.NonBR.Root"/>
-  <affected-histogram name="CertificateType2.BR.Intermediate"/>
-  <affected-histogram name="CertificateType2.BR.Leaf"/>
-  <affected-histogram name="CertificateType2.BR.Root"/>
-  <affected-histogram name="CertificateType2.NonBR.Intermediate"/>
-  <affected-histogram name="CertificateType2.NonBR.Leaf"/>
-  <affected-histogram name="CertificateType2.NonBR.Root"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CertificateTypeBRValidity" separator=".">
-  <obsolete>
-    Deprecated as of 8/2013. This histogram only considered the leaf certificate
-    expiry date as a proxy for whether a certificate was in-scope for the BRs,
-    but did not consider the issuance date. As some CAs have issued long-lived
-    certs prior to the BRs, this disproportionately reported those certs as
-    being subject to the BRs, but non-compliant, when in reality they're not
-    subject.
-  </obsolete>
-  <suffix name="BR"
-      label="The *leaf* certificate of the chain expires after 2013-12-31,
-             meaning that it should be in scope for the Baseline
-             Requirement's key size requirements"/>
-  <suffix name="NonBR"
-      label="The *leaf* certificate of the chain expires on or before
-             2013-12-31"/>
-  <affected-histogram name="CertificateType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CertificateTypeBRValidity2" separator=".">
-  <suffix name="BR"
-      label="The *leaf* certificate of the chain expires after 2013-12-31 and
-             was issued on or after 2012-07-01, as judged by the notBefore,
-             meaning that it should be in scope for the Baseline
-             Requirement's key size requirements"/>
-  <suffix name="NonBR"
-      label="The *leaf* certificate of the chain expires on or before
-             2013-12-31 or was issued before 2012-07-01"/>
-  <affected-histogram name="CertificateType2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CertificateTypeChainPosition" separator=".">
-  <suffix name="Intermediate" label="Intermediate's SPKI"/>
-  <suffix name="Leaf" label="Leaf's SPKI"/>
-  <suffix name="Root" label="Root's SPKI"/>
-  <affected-histogram name="CertificateType.BR"/>
-  <affected-histogram name="CertificateType.NonBR"/>
-  <affected-histogram name="CertificateType2.BR"/>
-  <affected-histogram name="CertificateType2.NonBR"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CertIo" separator="">
-  <obsolete>
-    Deprecated as of 01/2016. CertCacheTrial has been removed.
-    https://crbug.com/522312
-  </obsolete>
-  <suffix name="ReadSuccess"
-      label="success rate of reading a certificate from the disk cache"/>
-  <suffix name="ReadFailure"
-      label="failure rate of reading a certificate from the disk cache"/>
-  <suffix name="WriteSuccess"
-      label="success rate of writing a certificate to the disk cache"/>
-  <suffix name="WriteFailure"
-      label="failure rate of writing a certificate to the disk cache"/>
-  <affected-histogram name="DiskBasedCertCache.CertIo"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ChromeActivityName" separator=".">
-  <suffix name="ChromeTabbedActivity"
-      label="Activity launched in TABBED mode on Android"/>
-  <suffix name="DocumentActivity"
-      label="Activity launched in DOCUMENT mode (Tabs and apps together) on
-             Android"/>
-  <suffix name="CustomTabActivity"
-      label="Activity launched with a CUSTOM TAB on Android"/>
-  <affected-histogram name="MobileStartup.ToolbarFirstDrawTime"/>
-  <affected-histogram name="MobileStartup.ToolbarFirstFocusTime"/>
-  <affected-histogram name="MobileStartup.ToolbarInflationTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ChromeOS.MachineIdRegen.AgeSeconds">
-  <suffix name="Network"/>
-  <suffix name="Periodic"/>
-  <suffix name="Unknown"/>
-  <affected-histogram name="ChromeOS.MachineIdRegen.AgeSeconds"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Clients.StaleWhileRevalidateExperiment" separator="."
-    ordering="prefix">
-  <suffix name="Clients.StaleWhileRevalidateExperiment"
-      label="Timing was recorded on one of the domains of focus for
-             stale-while-revalidate"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ClockResolution" separator=".">
-  <obsolete>
-    These were temporary metrics intended to understand whether high/low
-    resolution clocks adversely impact page load metrics. After collecting a few
-    months of data it was determined that clock resolution doesn't adversely
-    impact our metrics, and that these histograms were no longer needed.
-  </obsolete>
-  <suffix name="HighResolutionClock"
-      label="base::TimeTicks::IsHighResolution() is true for this measurement"/>
-  <suffix name="LowResolutionClock"
-      label="base::TimeTicks::IsHighResolution() is false for this
-             measurement"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CloudPrintRequests" separator=".">
-  <suffix name="Register" label="Register request"/>
-  <suffix name="UpdatePrinter" label="Update printer request"/>
-  <suffix name="DownloadData" label="Download data request"/>
-  <suffix name="Other" label="Other requests"/>
-  <affected-histogram name="CloudPrint.UrlFetcherDownloadSize"/>
-  <affected-histogram name="CloudPrint.UrlFetcherRequestTime"/>
-  <affected-histogram name="CloudPrint.UrlFetcherRetries"/>
-  <affected-histogram name="CloudPrint.UrlFetcherUploadSize"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CompositorTimingHistoryProcess" separator="."
-    ordering="prefix">
-  <suffix name="Browser"/>
-  <suffix name="Renderer"/>
-  <affected-histogram name="Scheduling.ActivateDuration2"/>
-  <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical2"/>
-  <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical2"/>
-  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"/>
-  <affected-histogram
-      name="Scheduling.BeginMainFrameQueueDurationNotCritical2"/>
-  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"/>
-  <affected-histogram name="Scheduling.CommitInterval2"/>
-  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration2"/>
-  <affected-histogram name="Scheduling.DrawDuration2"/>
-  <affected-histogram name="Scheduling.DrawInterval2"/>
-  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta2"/>
-  <affected-histogram name="Scheduling.PrepareTilesDuration2"/>
-  <affected-histogram name="Scheduling.SwapAckWasFast"/>
-  <affected-histogram name="Scheduling.SwapToAckLatency2"/>
-  <affected-histogram name="Scheduling.VsyncToBeginMainFrameLatency2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CompositorTimingHistoryProcess2" separator="."
-    ordering="prefix">
-  <suffix name="Browser"/>
-  <suffix name="Renderer"/>
-  <affected-histogram name="Scheduling.PendingTreeDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CompositorTimingHistoryProcessObsolete" separator="."
-    ordering="prefix">
-  <obsolete>
-    These used an old bucketing scheme that that had too many buckets and were
-    an inefficient usage of UMA bandwidth. They have been replaced by new
-    metrics of the same name with a &quot;2&quot; appended to them.
-  </obsolete>
-  <suffix name="Browser"/>
-  <suffix name="Renderer"/>
-  <affected-histogram name="Scheduling.ActivateDuration"/>
-  <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical"/>
-  <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical"/>
-  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical"/>
-  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"/>
-  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration"/>
-  <affected-histogram name="Scheduling.BeginMainFrameToCommitDuration"/>
-  <affected-histogram name="Scheduling.CommitInterval"/>
-  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration"/>
-  <affected-histogram name="Scheduling.DrawDuration"/>
-  <affected-histogram name="Scheduling.DrawInterval"/>
-  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta"/>
-  <affected-histogram name="Scheduling.PrepareTilesDuration"/>
-  <affected-histogram name="Scheduling.SwapToAckLatency"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CompositorTimingHistorySubcategory" separator=".">
-  <obsolete>
-    Estimates don't need long term monitoring.
-  </obsolete>
-  <suffix name="NotUsedForEstimate"
-      label="Samples that don't affect estimates. For example, because we are
-             coming out of idle."/>
-  <suffix name="Overestimate"
-      label="Tracks when the compositor's estimates were too high and by how
-             much."/>
-  <suffix name="Underestimate"
-      label="Tracks when the compositor's estimates were too low and by how
-             much."/>
-  <affected-histogram name="Scheduling.Browser.ActivateDuration"/>
-  <affected-histogram name="Scheduling.Browser.BeginMainFrameToCommitDuration"/>
-  <affected-histogram
-      name="Scheduling.Browser.CommitToReadyToActivateDuration"/>
-  <affected-histogram name="Scheduling.Browser.DrawDuration"/>
-  <affected-histogram name="Scheduling.Browser.PrepareTilesDuration"/>
-  <affected-histogram name="Scheduling.Renderer.ActivateDuration"/>
-  <affected-histogram
-      name="Scheduling.Renderer.BeginMainFrameToCommitDuration"/>
-  <affected-histogram
-      name="Scheduling.Renderer.CommitToReadyToActivateDuration"/>
-  <affected-histogram name="Scheduling.Renderer.DrawDuration"/>
-  <affected-histogram name="Scheduling.Renderer.PrepareTilesDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CompositorTimingHistorySubcategory2" separator=".">
-  <obsolete>
-    Estimates don't need long term monitoring.
-  </obsolete>
-  <suffix name="NotUsedForEstimate"
-      label="Samples that don't affect estimates. For example, because we are
-             coming out of idle."/>
-  <affected-histogram
-      name="Scheduling.Browser.BeginMainFrameQueueDurationCritical"/>
-  <affected-histogram
-      name="Scheduling.Browser.BeginMainFrameQueueDurationNotCritical"/>
-  <affected-histogram
-      name="Scheduling.Browser.BeginMainFrameStartToCommitDuration"/>
-  <affected-histogram
-      name="Scheduling.Renderer.BeginMainFrameQueueDurationCritical"/>
-  <affected-histogram
-      name="Scheduling.Renderer.BeginMainFrameQueueDurationNotCritical"/>
-  <affected-histogram
-      name="Scheduling.Renderer.BeginMainFrameStartToCommitDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ConnCountImpact">
-  <suffix name="conn_count_16" label="with 16 persistent connections per host"/>
-  <suffix name="conn_count_4" label="with 4 persistent connections per host"/>
-  <suffix name="conn_count_5" label="with 5 persistent connections per host"/>
-  <suffix name="conn_count_6" label="with 6 persistent connections per host"/>
-  <suffix name="conn_count_7" label="with 7 persistent connections per host"/>
-  <suffix name="conn_count_8" label="with 8 persistent connections per host"/>
-  <suffix name="conn_count_9" label="with 9 persistent connections per host"/>
-  <affected-histogram name="Net.Transaction_Connected_New"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="Renderer4.Abandoned"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ConnectivityDiagnostics" separator=".">
-  <suffix name="0" label="INTERNET_DISCONNECTED"/>
-  <suffix name="1" label="CHROME_VERSION"/>
-  <suffix name="2" label="CHROMEOS_VERSION"/>
-  <suffix name="3" label="DNS_RESOLVER_PRESENT"/>
-  <suffix name="4" label="CAPTIVE_PORTAL_DNS"/>
-  <suffix name="5" label="CAPTIVE_PORTAL_HTTP"/>
-  <suffix name="6" label="FIREWALL_80"/>
-  <suffix name="7" label="FIREWALL_443"/>
-  <suffix name="8" label="RESOLVER_LATENCY"/>
-  <suffix name="9" label="HTTP_LATENCY"/>
-  <suffix name="10" label="NIC_SIGNAL_STRENGTH"/>
-  <suffix name="11" label="PING_GATEWAY"/>
-  <affected-histogram name="ConnectivityDiagnostics.TestVerdict"/>
-  <affected-histogram name="ConnectivityDiagnostics.TimeTaken"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ConnnectBackupJobs">
-  <suffix name="ConnectBackupJobsEnabled"/>
-  <suffix name="ConnectBackupJobsDisabled"/>
-  <affected-histogram name="Net.PreconnectUtilization"/>
-  <affected-histogram name="Net.PreconnectUtilization2"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.LoadType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ContentSettingsType" separator=".">
-  <suffix name="app-banner" label="App banner exceptions"/>
-  <suffix name="autoplay" label="Autoplay exception"/>
-  <suffix name="auto-select-certificate" label="Auto-select cert exceptions"/>
-  <suffix name="automatic-downloads" label="Automatic downloads exceptions"/>
-  <suffix name="background-sync" label="Background sync exceptions"/>
-  <suffix name="bluetooth-guard" label="Bluetooth guard exceptions"/>
-  <suffix name="cookies" label="Cookies exceptions"/>
-  <suffix name="durable-storage" label="Durable Storage Exceptions"/>
-  <suffix name="fullscreen" label="Fullscreen exceptions"/>
-  <suffix name="geolocation" label="Geolocation exceptions"/>
-  <suffix name="images" label="Images exceptions"/>
-  <suffix name="javascript" label="JavaScript exceptions"/>
-  <suffix name="keygen" label="Keygen exceptions"/>
-  <suffix name="media-stream-camera" label="Camera exceptions"/>
-  <suffix name="media-stream-mic" label="Microphone exceptions"/>
-  <suffix name="midi-sysex" label="Midi exceptions"/>
-  <suffix name="mixed-script" label="Mixed script exceptions"/>
-  <suffix name="mouselock" label="Mouse lock exceptions"/>
-  <suffix name="notifications" label="Notification exceptions"/>
-  <suffix name="plugins" label="Plugins exceptions"/>
-  <suffix name="popups" label="Popups exceptions"/>
-  <suffix name="ppapi-broker" label="Ppapi broker exceptions"/>
-  <suffix name="protected-media-identifier" label="Protected media exceptions"/>
-  <suffix name="protocol-handler" label="Protocol handler exceptions"/>
-  <suffix name="push-messaging" label="Push messaging exceptions"/>
-  <suffix name="site-engagement" label="Site engagement exceptions"/>
-  <suffix name="ssl-cert-decisions" label="SSL cert decisions exceptions"/>
-  <suffix name="usb-chooser-data" label="USB chooser data exceptions"/>
-  <affected-histogram name="ContentSettings.Exceptions"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ContentSuggestionCategory" separator=".">
-  <suffix name="RecentTabs" label="Recent (offline) tabs"/>
-  <suffix name="Downloads" label="Downloads"/>
-  <suffix name="Bookmarks" label="Bookmarks"/>
-  <suffix name="PhysicalWeb" label="Physical Web pages"/>
-  <suffix name="Articles" label="Articles for you"/>
-  <suffix name="ForeignTabs" label="Open tabs on other devices"/>
-  <suffix name="Experimental" label="Experimental"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedVisited"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpened"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore"/>
-  <affected-histogram
-      name="NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonShown"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.OpenDisposition"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.Opened"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedAge"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedCategoryIndex"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedScore"/>
-  <affected-histogram
-      name="NewTabPage.ContentSuggestions.OpenedScoreNormalized"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.Shown"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.ShownAge"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.ShownScore"/>
-  <affected-histogram
-      name="NewTabPage.ContentSuggestions.ShownScoreNormalized"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.VisitDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ContextMenuType" separator=".">
-  <suffix name="Link"
-      label="The context menu was shown for a (non-image) link"/>
-  <suffix name="Image"
-      label="The context menu was shown for a (non-link) image"/>
-  <suffix name="ImageLink"
-      label="The context menu was shown for an image which is also a link"/>
-  <suffix name="Video" label="The context menu was shown for a video"/>
-  <suffix name="SelectedText"
-      label="The context menu was shown for a text selection"/>
-  <suffix name="MisspelledWord"
-      label="The context menu was shown for a misspelt word"/>
-  <affected-histogram name="ContextMenu.SelectedOption"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ContextType" separator=".">
-  <suffix name="BrowserCompositor"
-      label="A BrowserCompositor GPU command buffer context"/>
-  <suffix name="BrowserMainThread"
-      label="A BrowserMainThread GPU command buffer context"/>
-  <suffix name="RenderCompositor"
-      label="A RenderCompositor GPU command buffer context"/>
-  <suffix name="RenderMainThread"
-      label="A RenderMainThread GPU command buffer context"/>
-  <suffix name="RenderWorker"
-      label="A RenderWorker GPU command buffer context"/>
-  <suffix name="Unknown" label="A GPU command buffer context of unknown type"/>
-  <suffix name="VideoAccelerator"
-      label="A VideoAccelerator GPU command buffer context"/>
-  <suffix name="VideoCapture"
-      label="A VideoCapture GPU command buffer context"/>
-  <suffix name="WebGL" label="A WebGL GPU command buffer context"/>
-  <suffix name="Media" label="The media worker command buffer context"/>
-  <suffix name="BlimpRenderCompositor"
-      label="BlimpCompositor compositor command buffer context">
-    <obsolete>
-      Deprecated and removed from code as of 02/2017.
-    </obsolete>
-  </suffix>
-  <suffix name="BlimpRenderWorker"
-      label="BlimpCompositor worker command buffer context">
-    <obsolete>
-      Deprecated and removed from code as of 02/2017.
-    </obsolete>
-  </suffix>
-  <affected-histogram name="GPU.ContextLost"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ContextualSearchQuickActionCategory" separator=".">
-  <suffix name="Address"/>
-  <suffix name="Email"/>
-  <suffix name="Event"/>
-  <suffix name="Phone"/>
-  <suffix name="None"/>
-  <suffix name="Website"/>
-  <affected-histogram name="Search.ContextualSearchQuickActions.Clicked"/>
-  <affected-histogram
-      name="Search.ContextualSearchQuickActions.IntentResolution"/>
-  <affected-histogram name="Search.ContextualSearchQuickActions.ResultsSeen"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CreditCardScanSuccess">
-  <suffix name="Completed" label="Credit card scan completed."/>
-  <suffix name="Cancelled" label="Credit card scan was cancelled."/>
-  <affected-histogram name="Autofill.ScanCreditCard.Duration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CrosFirstRunStep" separator="">
-  <suffix name="AppList"/>
-  <suffix name="Tray"/>
-  <suffix name="Help"/>
-  <affected-histogram name="CrosFirstRun.TimeSpentOnStep"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="CurrentTabState">
-  <suffix name="Initial" label="For a tab that is just being created."/>
-  <suffix name="Active"
-      label="For an active tab which is shown foreground in a browser window."/>
-  <suffix name="Inactive"
-      label="For tabs in background and not shown to user."/>
-  <suffix name="Detached"
-      label="For a tab that is being dragged by user to outside of the
-             browser window."/>
-  <affected-histogram name="Tabs.StateTransfer.Target"/>
-  <affected-histogram name="Tabs.StateTransfer.Time"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy">
-  <obsolete>
-    Deprecated 9/2016.
-  </obsolete>
-  <suffix name="DataReductionProxy"
-      label="Only page loads through the data reduction proxy are considered."/>
-  <suffix name="HTTPS_DataReductionProxy"
-      label="Only page loads through the data reduction proxy through an HTTP
-             tunnel for HTTPS origins are considered."/>
-  <affected-histogram name="PLT.NT_Connect"/>
-  <affected-histogram name="PLT.NT_DelayBeforeConnect"/>
-  <affected-histogram name="PLT.NT_DelayBeforeDomainLookup"/>
-  <affected-histogram name="PLT.NT_DelayBeforeDomLoading"/>
-  <affected-histogram name="PLT.NT_DelayBeforeFetch"/>
-  <affected-histogram name="PLT.NT_DelayBeforeFetchRedirect"/>
-  <affected-histogram name="PLT.NT_DelayBeforeLoadEvent"/>
-  <affected-histogram name="PLT.NT_DelayBeforeRequest"/>
-  <affected-histogram name="PLT.NT_DomainLookup"/>
-  <affected-histogram name="PLT.NT_DomContentLoaded"/>
-  <affected-histogram name="PLT.NT_DomInteractive"/>
-  <affected-histogram name="PLT.NT_DomLoading"/>
-  <affected-histogram name="PLT.NT_LoadEvent"/>
-  <affected-histogram name="PLT.NT_Redirect"/>
-  <affected-histogram name="PLT.NT_Request"/>
-  <affected-histogram name="PLT.NT_Response"/>
-  <affected-histogram name="PLT.PT_BeginToCommit"/>
-  <affected-histogram name="PLT.PT_BeginToFinish"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
-  <affected-histogram name="PLT.PT_CommitToFinish"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
-  <affected-histogram name="PLT.PT_FinishDocToFinish"/>
-  <affected-histogram name="PLT.PT_RequestToCommit"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
-  <affected-histogram name="PLT.PT_RequestToFinish"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
-  <affected-histogram name="PLT.PT_RequestToStart"/>
-  <affected-histogram name="PLT.PT_StartToCommit"/>
-  <affected-histogram name="PLT.PT_StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes
-    name="DataReductionProxy.LoFi.Accuracy.DifferentRecordingIntervals"
-    separator=".">
-  <suffix name="15"
-      label="Recorded approximately 15 seconds after navigation start"/>
-  <suffix name="30"
-      label="Recorded approximately 30 seconds after navigation start"/>
-  <suffix name="60"
-      label="Recorded approximately 60 seconds after navigation start"/>
-  <affected-histogram name="DataReductionProxy.LoFi.Accuracy"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy.MimeType">
-  <suffix name="Application" label="Application mime-type"/>
-  <suffix name="Unknown"
-      label="Deprecated. Moved to UnknownMime in M46. Unknown mime-type"/>
-  <suffix name="UnknownMime" label="Unknown mime-type"/>
-  <suffix name="Video" label="Video mime-type"/>
-  <affected-histogram name="Net.DailyContentLength"/>
-  <affected-histogram name="Net.DailyContentLength_DataReductionProxyEnabled"/>
-  <affected-histogram name="Net.DailyContentLength_ViaDataReductionProxy"/>
-  <affected-histogram name="Net.DailyOriginalContentLength"/>
-  <affected-histogram
-      name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"/>
-  <affected-histogram
-      name="Net.DailyOriginalContentLength_ViaDataReductionProxy"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy.NetworkTypes" separator=".">
-  <suffix name="Unknown" label="On Unknown network"/>
-  <suffix name="Ethernet" label="On Ethernet network"/>
-  <suffix name="WiFi" label="On WiFi network"/>
-  <suffix name="2G" label="On 2G network"/>
-  <suffix name="3G" label="On 3G Network"/>
-  <suffix name="4G" label="On 4G network"/>
-  <suffix name="None" label="With no detected network"/>
-  <suffix name="Bluetooth" label="On Bluetooth network"/>
-  <affected-histogram name="DataReductionProxy.AutoLoFiAccuracy"/>
-  <affected-histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"/>
-  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.15"/>
-  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.30"/>
-  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.60"/>
-  <affected-histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy.WithValidOCL.LoFiOn" separator=".">
-  <suffix name="LoFiOn"
-      label="Only page loads through the data reduction proxy with Lo-Fi On
-             are considered."/>
-  <affected-histogram name="Net.HttpContentLengthDifferenceWithValidOCL"/>
-  <affected-histogram name="Net.HttpContentLengthWithValidOCL"/>
-  <affected-histogram name="Net.HttpOriginalContentLengthWithValidOCL"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy_AutoLoFi" separator="_">
-  <obsolete>
-    Deprecated 09/2016.
-  </obsolete>
-  <suffix name="DataReductionProxy_AutoLoFiOn"
-      label="Only page loads through the data reduction proxy with auto LoFi
-             enabled are considered."/>
-  <suffix name="DataReductionProxy_AutoLoFiOff"
-      label="Only page loads through the data reduction proxy with auto LoFi
-             disabled are considered."/>
-  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOn"
-      label="Only page loads through the data reduction proxy through an HTTP
-             tunnel for HTTPS origins with auto LoFi enabled are considered."/>
-  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOff"
-      label="Only page loads through the data reduction proxy through an HTTP
-             tunnel for HTTPS origins with auto LoFi disabled are considered."/>
-  <affected-histogram name="PLT.BeginToFirstPaint"/>
-  <affected-histogram name="PLT.PT_BeginToFinish"/>
-  <affected-histogram name="PLT.PT_CommitToFinish"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
-  <affected-histogram name="PLT.PT_RequestToFinish"/>
-  <affected-histogram name="PLT.PT_StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy_TamperingFingerprints"
-    separator="_">
-  <suffix name="ChromeProxy"
-      label="for each carrier, number of tamperings detected on Chrome-Proxy
-             header"/>
-  <suffix name="ContentLength"
-      label="for each carrier, total number of responses whose Content-Length
-             header has been tampered with"/>
-  <suffix name="ContentLength_CSS"
-      label="for each carrier, number of CSS responses whose Content-Length
-             header has been tampered with"/>
-  <suffix name="ContentLength_Image"
-      label="for each carrier, number of image responses whose Content-Length
-             header has been tampered with"/>
-  <suffix name="ContentLength_Image_GIF"
-      label="for each carrier, number of GIF image responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="ContentLength_Image_JPG"
-      label="for each carrier, number of JPEG image responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="ContentLength_Image_PNG"
-      label="for each carrier, number of PNG image responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="ContentLength_Image_WEBP"
-      label="for each carrier, number of WebP image responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="ContentLength_Video"
-      label="for each carrier, number of video responses whose Content-Length
-             header has been tampered with"/>
-  <suffix name="CompressionRatio_Image"
-      label="the histogram of compression ratio of images"/>
-  <suffix name="CompressionRatio_Image_GIF"
-      label="the histogram of compression ratio of GIF images"/>
-  <suffix name="CompressionRatio_Image_JPG"
-      label="the histogram of compression ratio of JPG images"/>
-  <suffix name="CompressionRatio_Image_PNG"
-      label="the histogram of compression ratio of PNG images"/>
-  <suffix name="CompressionRatio_Image_WEBP"
-      label="the histogram of compression ratio of WEBP images"/>
-  <suffix name="CompressionRatio_Video"
-      label="the histogram of compression ratio of videos"/>
-  <suffix name="CompressionRatio_Image_0_10KB"
-      label="the histogram of compression ratio of images whose sizes are in
-             the range of 0-10KB"/>
-  <suffix name="CompressionRatio_Image_10_100KB"
-      label="the histogram of compression ratio of images whose sizes are in
-             the range of 10-100KB"/>
-  <suffix name="CompressionRatio_Image_100_500KB"
-      label="the histogram of compression ratio of images whose sizes are in
-             the range of 100-500KB"/>
-  <suffix name="CompressionRatio_Image_500KB"
-      label="the histogram of compression ratio of images whose sizes are
-             larger than 500KB"/>
-  <suffix name="ContentLength_JS"
-      label="for each carrier, number of JavaScript responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="ContentLength_Other"
-      label="for each carrier, number of other type responses whose
-             Content-Length header has been tampered with"/>
-  <suffix name="OtherHeaders"
-      label="for each carrier, number of tamperings detected on a list of
-             headers"/>
-  <suffix name="Via"
-      label="for each carrier, number of tamperings detected on Via header"/>
-  <suffix name="Via_Missing"
-      label="for each carrier, number of responses whose data reduction
-             proxy's Via header is missing"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy_TamperingTotal" separator="_">
-  <suffix name="Total" label="total number of tamperings detected"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_CSS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_0_10KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_100_500KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_10_100KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_500KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_GIF"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_JPG"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_PNG"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_WEBP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_JS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTP_Video"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_CSS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_0_10KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_100_500KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_10_100KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_500KB"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_GIF"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_JPG"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_PNG"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_WEBP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_JS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Video"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_ChromeProxy"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_CSS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Image"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_JS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Other"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTP_OtherHeaders"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via_Missing"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ChromeProxy"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_CSS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Image"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_JS"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Other"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_OtherHeaders"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS_Via"/>
-  <affected-histogram
-      name="DataReductionProxy.HeaderTamperedHTTPS_Via_Missing"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxy_TotalCounts" separator="_">
-  <suffix name="JS" label="JavaScript count"/>
-  <suffix name="CSS" label="CSS count"/>
-  <suffix name="Image" label="image count"/>
-  <suffix name="Image_GIF" label="GIF image count"/>
-  <suffix name="Image_JPG" label="JPG image count"/>
-  <suffix name="Image_PNG" label="PNG image count"/>
-  <suffix name="Image_WEBP" label="WEBP image count"/>
-  <suffix name="Video" label="Video count"/>
-  <suffix name="Image_0_10KB" label="image counts of 0-10KB"/>
-  <suffix name="Image_10_100KB" label="image counts of 10-100KB"/>
-  <suffix name="Image_100_500KB" label="image counts of 100-500KB"/>
-  <suffix name="Image_500KB" label="image counts of more than 500KB"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
-  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxyBypassedBytes" separator=".">
-  <suffix name="SSL" label="Bypass due to SSL"/>
-  <suffix name="LocalBypassRules"
-      label="Bypass due to client-side bypass rules or because the proxy
-             config was missing at the client"/>
-  <suffix name="ManagedProxyConfig"
-      label="Deprecated 1/9/2014 (M-41). Bypass due to a managed config"/>
-  <suffix name="ProxyOverridden"
-      label="Bypass due to another proxy taking precedence"/>
-  <suffix name="Current" label="Bypass due to explicit instruction"/>
-  <suffix name="CurrentAudioVideo"
-      label="Bypass due to explicit instruction for audio/video"/>
-  <suffix name="CurrentApplicationOctetStream"
-      label="Bypass due to explicit instruction for
-             'application/octet-stream' content type"/>
-  <suffix name="ShortAll" label="Short bypass"/>
-  <suffix name="ShortTriggeringRequest"
-      label="Triggering request short bypass"/>
-  <suffix name="ShortAudioVideo"
-      label="Triggering request short bypass due to audio/video"/>
-  <suffix name="MediumAll" label="Medium bypass"/>
-  <suffix name="MediumTriggeringRequest"
-      label="Triggering request medium bypass"/>
-  <suffix name="LongAll" label="Long bypass"/>
-  <suffix name="LongTriggeringRequest" label="Triggering request long bypass"/>
-  <suffix name="MissingViaHeader4xx"
-      label="Bypass due to a 4xx missing via header"/>
-  <suffix name="MissingViaHeaderOther"
-      label="Bypass due to other missing via header"/>
-  <suffix name="Malformed407"
-      label="Bypass due to 407 response from proxy without a challenge"/>
-  <suffix name="Status500HttpInternalServerError"
-      label="Bypass due to internal server error"/>
-  <suffix name="Status502HttpBadGateway"
-      label="Bypass because the request URI was too long"/>
-  <suffix name="Status503HttpServiceUnavailable"
-      label="Bypass due to a 503 response"/>
-  <suffix name="NetworkErrorTimedOut" label="Bypass due to network timeout"/>
-  <suffix name="NetworkErrorProxyConnectionFailed"
-      label="Bypass due to failed proxy connection"/>
-  <suffix name="NetworkErrorProxyCertificateInvalid"
-      label="Bypass due to invalid proxy certificate"/>
-  <suffix name="NetworkErrorOther" label="Bypass due to any network error"/>
-  <affected-histogram name="DataReductionProxy.BypassedBytes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxyConfigFetchLostBytes" separator="_">
-  <obsolete>
-    Removed in Feb 2016.
-  </obsolete>
-  <suffix name="0" label="Bucket 0 for gathering multiple data points."/>
-  <suffix name="1" label="Bucket 1 for gathering multiple data points."/>
-  <suffix name="2" label="Bucket 2 for gathering multiple data points."/>
-  <suffix name="3" label="Bucket 3 for gathering multiple data points."/>
-  <suffix name="4" label="Bucket 4 for gathering multiple data points."/>
-  <suffix name="5" label="Bucket 5 for gathering multiple data points."/>
-  <suffix name="6" label="Bucket 6 for gathering multiple data points."/>
-  <suffix name="7" label="Bucket 7 for gathering multiple data points."/>
-  <suffix name="8" label="Bucket 8 for gathering multiple data points."/>
-  <suffix name="9" label="Bucket 9 for gathering multiple data points."/>
-  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesCL"/>
-  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesDiff"/>
-  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesOCL"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxyMissingViaHeaderBytes"
-    separator=".">
-  <suffix name="4xx" label="Response with 4xx response code"/>
-  <suffix name="Other" label="Other response"/>
-  <affected-histogram name="DataReductionProxy.MissingViaHeader.Bytes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxyMissingViaHeaderResponseCode"
-    separator=".">
-  <suffix name="Primary" label="Primary data reduction proxy"/>
-  <suffix name="Fallback" label="Fallback data reduction proxy"/>
-  <affected-histogram name="DataReductionProxy.MissingViaHeader.ResponseCode"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataReductionProxyRequestCompletionErrorCodes"
-    separator=".">
-  <suffix name="Primary" label="Primary data reduction proxy"/>
-  <suffix name="Fallback" label="Fallback data reduction proxy"/>
-  <affected-histogram name="DataReductionProxy.RequestCompletionErrorCodes"/>
-</histogram_suffixes>
-
-<histogram_suffixes
-    name="DataReductionProxyRequestCompletionErrorCodesMainFrame" separator=".">
-  <suffix name="Primary" label="Primary data reduction proxy"/>
-  <suffix name="Fallback" label="Fallback data reduction proxy"/>
-  <affected-histogram
-      name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataSaverEnabled" separator=".">
-  <suffix name="DataSaverEnabled" label="Data Saver is enabled"/>
-  <suffix name="DataSaverDisabled" label="Data Saver is disabled"/>
-  <affected-histogram name="Previews.ContentLength"/>
-  <affected-histogram name="Previews.DataInflation"/>
-  <affected-histogram name="Previews.DataInflationPercent"/>
-  <affected-histogram name="Previews.DataSavings"/>
-  <affected-histogram name="Previews.DataSavingsPercent"/>
-  <affected-histogram name="Previews.OriginalContentLength"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUsageReportSubmissionBytes" separator=".">
-  <suffix name="Failed"
-      label="Platform external data use observer reported the submission as
-             failed"/>
-  <suffix name="Lost"
-      label="Lost before it could be submitted to platform external data use
-             observer"/>
-  <suffix name="Successful"
-      label="Platform external data use observer reported the submission as
-             successful"/>
-  <suffix name="TimedOut"
-      label="Submission of the report to the platform external data use
-             observer timed out"/>
-  <affected-histogram name="DataUsage.ReportSubmission.Bytes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUse.AppTabState.Dimensions" separator=".">
-  <suffix name="Upstream.AppBackground"/>
-  <suffix name="Upstream.AppForeground.TabBackground"/>
-  <suffix name="Upstream.AppForeground.TabForeground"/>
-  <suffix name="Downstream.AppBackground"/>
-  <suffix name="Downstream.AppForeground.TabBackground"/>
-  <suffix name="Downstream.AppForeground.TabForeground"/>
-  <affected-histogram name="DataUse.AppTabState"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUse.Bytes" separator=".">
-  <suffix name="Delegate" label="As reported by the network delegate."/>
-  <suffix name="OS"
-      label="As reported by the operating system. Currently logged only on
-             Android."/>
-  <affected-histogram name="DataUse.BytesReceived"/>
-  <affected-histogram name="DataUse.BytesSent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUse.Dimensions" separator=".">
-  <suffix name="Upstream.Background.NotCellular"/>
-  <suffix name="Upstream.Background.Cellular"/>
-  <suffix name="Upstream.Foreground.NotCellular"/>
-  <suffix name="Upstream.Foreground.Cellular"/>
-  <suffix name="Downstream.Background.NotCellular"/>
-  <suffix name="Downstream.Background.Cellular"/>
-  <suffix name="Downstream.Foreground.NotCellular"/>
-  <suffix name="Downstream.Foreground.Cellular"/>
-  <suffix name="Upstream.Unknown.NotCellular"/>
-  <suffix name="Upstream.Unknown.Cellular"/>
-  <suffix name="Downstream.Unknown.NotCellular"/>
-  <suffix name="Downstream.Unknown.Cellular"/>
-  <affected-histogram name="DataUse.MessageSize.AllServices"/>
-  <affected-histogram name="DataUse.TrafficSize.System"/>
-  <affected-histogram name="DataUse.TrafficSize.User"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUse.Service.Types" separator=".">
-  <suffix name="NotTagged"/>
-  <suffix name="Suggestions"/>
-  <suffix name="Translate"/>
-  <suffix name="Sync"/>
-  <suffix name="Omnibox"/>
-  <suffix name="Invalidation"/>
-  <suffix name="Rappor"/>
-  <suffix name="Variations"/>
-  <suffix name="UMA"/>
-  <suffix name="DomainReliability"/>
-  <suffix name="ProfileDownloader"/>
-  <suffix name="GoogleURLTracker"/>
-  <suffix name="Autofill"/>
-  <suffix name="Policy"/>
-  <suffix name="SpellChecker"/>
-  <suffix name="NTPSnippets">
-    <obsolete>
-      Deprecated March 2017
-    </obsolete>
-  </suffix>
-  <suffix name="NTPSnippetsSuggestions"/>
-  <suffix name="NTPSnippetsThumbnails"/>
-  <affected-histogram name="DataUse.MessageSize"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DataUse.TrafficSource" separator=".">
-  <suffix name="System"/>
-  <suffix name="User"/>
-  <affected-histogram name="DataUse.BackgroundToDataRecievedPerByte"/>
-  <affected-histogram name="DataUse.BackgroundToFirstDownstream"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DefaultAppsExperiment">
-  <suffix name="NoDefaultApps" label="User's without default apps installed"/>
-  <suffix name="WithDefaultApps" label="User's with default apps installed"/>
-  <affected-histogram name="Extensions.AppTabLaunchType"/>
-  <affected-histogram name="Extensions.ExtensionInstalled"/>
-  <affected-histogram name="Extensions.ExtensionUninstalled"/>
-  <affected-histogram name="NewTabPage.DefaultPageType"/>
-  <affected-histogram name="NewTabPage.SelectedPageType"/>
-  <affected-histogram name="NtpHandler.AttachShownPageType"/>
-  <affected-histogram name="NtpHandler.SelectedShownPageType"/>
-  <affected-histogram name="Profile.AppCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DefaultPinnedApps">
-  <obsolete>
-    Deprecated as of 12/2013. Default pinned apps trial is finished.
-  </obsolete>
-  <suffix name="Existing"/>
-  <suffix name="Control"/>
-  <suffix name="Alternate"/>
-  <affected-histogram name="Cros.ClickOnShelf"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DeprecatedPrerenderSource" ordering="prefix">
-  <obsolete>
-    Deprecated August 2016
-  </obsolete>
-  <suffix name="" label="All prerenders."/>
-  <suffix name="exp1" label="Likelihood threshold experiment 1.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp2" label="Likelihood threshold experiment 2.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp3" label="Likelihood threshold experiment 3.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp4" label="Likelihood threshold experiment 4.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp5" label="Likelihood threshold experiment 5.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp6" label="Likelihood threshold experiment 6.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp7" label="Likelihood threshold experiment 7.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp8" label="Likelihood threshold experiment 8.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="exp9" label="Likelihood threshold experiment 9.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="gws" label="GWS triggered prerender."/>
-  <suffix name="externalrequest" label="Externally triggered prerender."/>
-  <suffix name="externalrequestforced"
-      label="Forced prerender regardless of network."/>
-  <suffix name="Instant" label="Instant search prerender."/>
-  <suffix name="localpredictor" label="Local predictor triggered prerender.">
-    <obsolete>
-      Deprecated April 2015
-    </obsolete>
-  </suffix>
-  <suffix name="omnibox" label="Triggered from the omnibox."/>
-  <suffix name="wash" label="Multiple sources could have triggered."/>
-  <suffix name="web" label="Link triggered prerender."/>
-  <suffix name="webcross"
-      label="Link triggered prerender, rel=prerender, cross domain."/>
-  <suffix name="websame"
-      label="Link triggered prerender, rel=prerender, same domain."/>
-  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
-  <suffix name="offline"
-      label="Prerender triggered for saving a page for offline use."/>
-  <affected-histogram name="Prerender.FinalStatus_Prerender5minTTL"/>
-  <affected-histogram name="Prerender.FinalStatus_PrerenderControl"/>
-  <affected-histogram name="Prerender.FinalStatus_PrerenderEnabled"/>
-  <affected-histogram name="Prerender.FinalStatus_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.FinalStatus_PrerenderMulti"/>
-  <affected-histogram name="Prerender.FinalStatus_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
-  <affected-histogram
-      name="Prerender.FinalStatusMatchComplete_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.FinalStatusMatchComplete_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.FinalStatusMatchComplete_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.FinalStatusMatchComplete_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderMulti"/>
-  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent_Prerender5minTTL"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderControl"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.LocalPredictorEvent_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderMulti"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.PerceivedPLT_Prerender5minTTL"/>
-  <affected-histogram name="Prerender.PerceivedPLT_PrerenderControl"/>
-  <affected-histogram name="Prerender.PerceivedPLT_PrerenderEnabled"/>
-  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMulti"/>
-  <affected-histogram name="Prerender.PerceivedPLT_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched_Prerender5minTTL"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderControl"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatched_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderMulti"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTMatchedComplete_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.PerceivedPLTWindowed_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderNoUse"/>
-  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
-  <affected-histogram
-      name="Prerender.PercentLoadDoneAtSwapin_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PercentLoadDoneAtSwapin_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PercentLoadDoneAtSwapin_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PercentLoadDoneAtSwapin_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderMulti"/>
-  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.PrerenderNotSwappedInPLT_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.PrerenderNotSwappedInPLT_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.PrerenderNotSwappedInPLT_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.PrerenderNotSwappedInPLT_PrerenderMatchComplete"/>
-  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderMulti"/>
-  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderNoUse"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_Prerender5minTTL"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderControl"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderEnabled"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMatchComplete"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMulti"/>
-  <affected-histogram
-      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderNoUse"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DesktopIOSEntryPoints" separator="."
-    ordering="prefix">
-  <affected-histogram name="DesktopIOSPromotion.DismissalReason"/>
-  <suffix name="SavePasswordsNewBubble"/>
-  <suffix name="BookmarksNewBubble"/>
-  <suffix name="BookmarksFootNote"/>
-  <suffix name="HistoryPage"/>
-  <affected-histogram name="DesktopIOSPromotion.SMSToSigninTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DesktopIOSPromotionSMSSent" separator="."
-    ordering="prefix">
-  <suffix name="SMSSent" label="SMS sent from the promotion."/>
-  <suffix name="NoSMS" label="No SMS was sent from the promotion."/>
-  <affected-histogram name="DesktopIOSPromotion.IOSSigninReason"/>
-  <affected-histogram name="DesktopIOSPromotion.VariationSigninReason"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DiskUsagePerUserCount" separator=".">
-  <suffix name="1User" label="Only 1 user exists on device."/>
-  <suffix name="2Users" label="2 users exist on device."/>
-  <suffix name="3Users" label="3 users exist on device."/>
-  <suffix name="4Users" label="4 users exist on device."/>
-  <suffix name="5Users" label="5 users exist on device."/>
-  <suffix name="6Users" label="6 users exist on device."/>
-  <suffix name="7OrMoreUsers" label="7 or more users exist on device."/>
-  <affected-histogram name="Platform.DiskUsage.Cache_Avg"/>
-  <affected-histogram name="Platform.DiskUsage.Cache_Max"/>
-  <affected-histogram name="Platform.DiskUsage.Downloads_Avg"/>
-  <affected-histogram name="Platform.DiskUsage.Downloads_Max"/>
-  <affected-histogram name="Platform.DiskUsage.GCache_Avg"/>
-  <affected-histogram name="Platform.DiskUsage.GCache_Max"/>
-  <affected-histogram name="Platform.DiskUsage.LeastUsedAccountDays"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DNS.HostCache.UpdateStale.AddressListDeltaType">
-  <suffix name="Identical" label="Same addresses, in the same order."/>
-  <suffix name="Reordered" label="Same addresses, in a different order."/>
-  <suffix name="Overlap" label="Some same addreses, some different."/>
-  <suffix name="Disjoint" label="All different addresses."/>
-  <affected-histogram name="DNS.HostCache.UpdateStale.ExpiredBy"/>
-  <affected-histogram name="DNS.HostCache.UpdateStale.NetworkChanges"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DnsImpact2">
-  <suffix name="disabled_prefetch"
-      label="DNS pre-resolving is disabled in these clients"/>
-  <suffix name="disabled_prefetch_4_connections"
-      label="DNS pre-resolving is disabled in these clients, and a maximum of
-             4 connections per host was allowed"/>
-  <suffix name="enabled_prefetch_4_connections"
-      label="a maximum of 4 connections per host was allowed in these clients"/>
-  <suffix name="parallel_4_prefetch"
-      label="DNS pre-resolving was only doing 4 concurrent speculative
-             resolutions in this test"/>
-  <affected-histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency"/>
-  <affected-histogram name="Net.TCP_Connection_Idle_Sockets">
-    <with-suffix name="disabled_prefetch"/>
-    <with-suffix name="disabled_prefetch_4_connections"/>
-    <with-suffix name="enabled_prefetch_4_connections"/>
-  </affected-histogram>
-  <affected-histogram name="Net.TCP_Connection_Latency"/>
-  <affected-histogram name="Net.Transaction_Connected"/>
-  <affected-histogram name="Net.Transaction_Connected_New"/>
-  <affected-histogram name="Net.Transaction_Connected_New_b"/>
-  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
-  <affected-histogram name="Net.Transaction_Latency"/>
-  <affected-histogram name="Net.Transaction_Latency_b"/>
-  <affected-histogram name="Net.Transaction_Latency_Total"/>
-  <affected-histogram name="Net.Transaction_Latency_Total_New_Connection"/>
-  <affected-histogram
-      name="Net.Transaction_Latency_Total_New_Connection_Under_10"/>
-  <affected-histogram name="Net.Transaction_Latency_Total_Under_10"/>
-  <affected-histogram name="Net.Transaction_Latency_Under_10"/>
-  <affected-histogram name="PLT.RequestToFinish">
-    <with-suffix name="parallel_4_prefetch"/>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="DnsImpact3">
-  <suffix name="disabled_prefetch" label="with DNS pre-resolving disabled"/>
-  <suffix name="parallel_4_prefetch"
-      label="with only 4 concurrent speculative resolutions done in parallel"/>
-  <affected-histogram name="Net.Transaction_Connected_New">
-    <with-suffix name="disabled_prefetch"/>
-  </affected-histogram>
-  <affected-histogram name="Renderer2.FinishDocToFinish"/>
-  <affected-histogram name="Renderer2.RequestToFinish"/>
-  <affected-histogram name="Renderer2.RequestToFinish_L">
-    <with-suffix name="disabled_prefetch"/>
-  </affected-histogram>
-  <affected-histogram name="Renderer2.RequestToFirstLayout"/>
-  <affected-histogram name="Renderer2.RequestToStart"/>
-  <affected-histogram name="Renderer2.StartToFinish"/>
-  <affected-histogram name="Renderer2.StartToFinishDoc"/>
-  <affected-histogram name="Renderer2.StartToFirstLayout"/>
-  <affected-histogram name="Renderer4.RequestToFinish">
-    <with-suffix name="parallel_4_prefetch"/>
-  </affected-histogram>
-  <affected-histogram name="Renderer4.StartToFinish">
-    <with-suffix name="parallel_4_prefetch"/>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="DnsParallelism">
-  <suffix name="parallel_10"
-      label="with only 10 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_14"
-      label="with only 14 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_20"
-      label="with only 20 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_6"
-      label="with only 6 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_7"
-      label="with only 7 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_8"
-      label="with only 8 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_9"
-      label="with only 9 concurrent resolutions done in parallel"/>
-  <suffix name="parallel_default"
-      label="with the default number of concurrent resolutions done in
-             parallel"/>
-  <affected-histogram name="DNS.ResolveCategory"/>
-  <affected-histogram name="DNS.ResolveSuccess"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DocsSpecific" separator=".">
-  <suffix name="Docs" label="Only for docs.google.com"/>
-  <affected-histogram name="appcache.MainResourceResponseRetrieval"/>
-  <affected-histogram name="appcache.SubResourceResponseRetrieval"/>
-  <affected-histogram name="appcache.UpdateJobResult"/>
-  <affected-histogram name="appcache.UpdateProgressAtPointOfFaliure"/>
-  <affected-histogram name="appcache.UpdateWasOffOriginAtPointOfFailure"/>
-  <affected-histogram name="appcache.UpdateWasStalledAtPointOfFailure"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DomainGoogle" separator="">
-  <suffix name="Google" label="only Google cookies are recorded."/>
-  <suffix name="Other" label="only NON-Google cookies are recorded."/>
-  <affected-histogram name="Cookie.ReinstatedCookies"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DownloadDangerPromptResponse" separator=".">
-  <suffix name="Proceed"
-      label="The user clicked through and recovered the download."/>
-  <suffix name="Shown" label="The user was shown the prompt."/>
-  <affected-histogram name="Download.DownloadDangerPrompt.DangerousContent"/>
-  <affected-histogram name="Download.DownloadDangerPrompt.DangerousFile"/>
-  <affected-histogram name="Download.DownloadDangerPrompt.DangerousHost"/>
-  <affected-histogram name="Download.DownloadDangerPrompt.DangerousURL"/>
-  <affected-histogram name="Download.DownloadDangerPrompt.PotentiallyUnwanted"/>
-  <affected-histogram name="Download.DownloadDangerPrompt.UncommonContent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DownloadDangerPromptType" separator=".">
-  <suffix name="DangerousContent" label="File marked DANGEROUS_CONTENT"/>
-  <suffix name="DangerousFile" label="File marked DANGEROUS_FILE"/>
-  <suffix name="DangerousHost" label="File marked DANGEROUS_HOST"/>
-  <suffix name="DangerousURL" label="File marked DANGEROUS_URL"/>
-  <suffix name="PotentiallyUnwanted" label="File marked POTENTIALLY_UNWANTED"/>
-  <suffix name="UncommonContent" label="File marked UNCOMMON_CONTENT"/>
-  <affected-histogram name="Download.DownloadDangerPrompt"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="DownloadWithUnsupportedScheme" separator=".">
-  <suffix name="ContentScheme" label="downloads with content scheme"/>
-  <suffix name="ContentIdScheme" label="downloads with cid scheme"/>
-  <suffix name="LocalFileScheme" label="downloads with file:/// scheme"/>
-  <suffix name="RemoteFileScheme" label="downloads with file:// scheme"/>
-  <suffix name="FileSystemScheme" label="downloads with filesystem scheme"/>
-  <suffix name="FtpScheme" label="downloads with ftp scheme"/>
-  <suffix name="GopherScheme" label="downloads with gopher scheme"/>
-  <suffix name="JavaScriptScheme" label="downloads with javascript scheme"/>
-  <suffix name="WSOrWSSScheme" label="downloads with ws or wss scheme"/>
-  <suffix name="OtherUnsupportedScheme" label="Other unsupported schemes"/>
-  <affected-histogram name="SBClientDownload.UnsupportedScheme"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="EmePromise" separator=".">
-  <suffix name="CloseSession" label="CloseSession promises only."/>
-  <suffix name="CreateSession" label="CreateSession promises only.">
-    <obsolete>
-      Replaced by GenerateRequest.
-    </obsolete>
-  </suffix>
-  <suffix name="GenerateRequest" label="GenerateRequest promises only."/>
-  <suffix name="LoadSession" label="LoadSession promises only."/>
-  <suffix name="RemoveSession" label="RemoveSession promises only."/>
-  <suffix name="UpdateSession" label="UpdateSession promises only."/>
-  <affected-histogram name="Media.EME.ClearKey"/>
-  <affected-histogram name="Media.EME.Unknown"/>
-  <affected-histogram name="Media.EME.Widevine"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="EmeTimeToResolvePromise" separator=".">
-  <suffix name="GenerateRequest" label="GenerateRequest promises only."/>
-  <suffix name="LoadSession" label="LoadSession promises only."/>
-  <affected-histogram name="Media.EME.ClearKey.TimeTo"/>
-  <affected-histogram name="Media.EME.Unknown.TimeTo"/>
-  <affected-histogram name="Media.EME.Widevine.TimeTo"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="EngagementScoreBuckets">
-  <owner>calamity@chromium.org</owner>
-  <suffix name="0"/>
-  <suffix name="10"/>
-  <suffix name="20"/>
-  <suffix name="30"/>
-  <suffix name="40"/>
-  <suffix name="50"/>
-  <suffix name="60"/>
-  <suffix name="70"/>
-  <suffix name="80"/>
-  <suffix name="90"/>
-  <suffix name="100"/>
-  <affected-histogram name="SiteEngagementService.EngagementScoreBucket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="EventLatencyOS" separator=".">
-  <suffix name="MOUSE_WHEEL"/>
-  <suffix name="TOUCH_MOVED"/>
-  <suffix name="TOUCH_PRESSED"/>
-  <suffix name="TOUCH_RELEASED"/>
-  <affected-histogram name="Event.Latency.OS"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExitFunnels" separator=".">
-  <suffix name="BackgroundOff"/>
-  <suffix name="BackgroundOn"/>
-  <suffix name="BrowserExit"/>
-  <suffix name="EndSession"/>
-  <suffix name="ES_CloseApp"/>
-  <suffix name="ES_Critical"/>
-  <suffix name="ES_Logoff"/>
-  <suffix name="ES_Other"/>
-  <suffix name="HungBrowserTerminated"/>
-  <suffix name="KillProcess"/>
-  <suffix name="LastWindowClose"/>
-  <suffix name="MessageWindowHung"/>
-  <suffix name="MessageWindowNotFound"/>
-  <suffix name="MessageWindowVanished"/>
-  <suffix name="ProcessSingletonIsShuttingDown"/>
-  <suffix name="RendezvousToHungBrowser"/>
-  <suffix name="SessionEnding"/>
-  <suffix name="TraybarEndSession"/>
-  <suffix name="TraybarExit"/>
-  <suffix name="WatcherEndSession"/>
-  <suffix name="WatcherLogoff"/>
-  <suffix name="WatcherQueryEndSession"/>
-  <suffix name="WM_ENDSESSION"/>
-  <affected-histogram name="Stability.ExitFunnel"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionFunctionExecutionTime" separator=".">
-  <suffix name="1msTo5ms"
-      label="Execution took between 1ms and 5ms (tolerable)."/>
-  <suffix name="5msTo10ms" label="Execution took between 5ms and 10ms (slow)."/>
-  <suffix name="LessThan1ms" label="Execution took less than 1ms (fast)."/>
-  <suffix name="Over10ms" label="Execution took over 10ms (glacial)."/>
-  <affected-histogram name="Extensions.Functions.FailedTime"/>
-  <affected-histogram name="Extensions.Functions.SucceededTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionMessagingPortCreationTime" separator=".">
-  <suffix name="Normal"
-      label="Created during any time other than the 'unload' or 'beforeunload'
-             handlers.">
-    <obsolete>
-      Deprecated and removed from code as of 05/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="InBeforeUnload"
-      label="Created during an event handler for the 'beforeunload' event.">
-    <obsolete>
-      Deprecated and removed from code as of 05/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="InUnload"
-      label="Created during an event handler for the 'unload' event.">
-    <obsolete>
-      Deprecated and removed from code as of 05/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="Total" label="The total number of ports created."/>
-  <affected-histogram name="Extensions.Messaging.ExtensionPortsCreated"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionMessagingPortType" separator=".">
-  <suffix name="Extension" label="A port opened to an extension context."/>
-  <suffix name="NativeApp" label="A port opened to a native application."/>
-  <suffix name="Tab" label="A port opened to a tab context."/>
-  <affected-histogram name="Extensions.Messaging.GetPortIdAsyncTime"/>
-  <affected-histogram name="Extensions.Messaging.GetPortIdSyncTime"/>
-  <affected-histogram name="Extensions.Messaging.SetPortIdTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionsDatabaseOpen" separator=".">
-  <suffix name="Rules" label="Rules backing stores"/>
-  <suffix name="Settings" label="Settings backing stores"/>
-  <suffix name="State" label="State backing stores"/>
-  <affected-histogram name="Extensions.Database.Open"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionsDatabaseRestore" separator=".">
-  <suffix name="Rules" label="Rules backing stores"/>
-  <suffix name="Settings" label="Settings backing stores"/>
-  <suffix name="State" label="State backing stores"/>
-  <affected-histogram name="Extensions.Database.Restore"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExtensionWebUiPageType" separator=".">
-  <suffix name="MD" label="The Material Design chrome://extensions page."/>
-  <suffix name="Uber" label="The Uber chrome://extensions page."/>
-  <affected-histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime"/>
-  <affected-histogram name="Extensions.WebUi.LoadCompletedInMainFrame"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ExternalExtensionEvent" separator="">
-  <suffix name="NonWebstore"
-      label="sideloaded extensions that don't update from the webstore"/>
-  <suffix name="Webstore"
-      label="sideloaded extensions that update from the webstore"/>
-  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="FieldPredictionSubmissionEvents" separator=".">
-  <suffix name="NoSubmission" label="No observed submission."/>
-  <suffix name="BasedOnAutocomplete"
-      label="Quality metrics based on autocomplete attributes."/>
-  <affected-histogram
-      name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"/>
-  <affected-histogram name="Autofill.Quality.HeuristicType"/>
-  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
-  <affected-histogram name="Autofill.Quality.PredictedType"/>
-  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
-  <affected-histogram name="Autofill.Quality.ServerType"/>
-  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="FileBrowserLoad" separator=".">
-  <suffix name="Construct"
-      label="Time spent constructing the main Javascript object.">
-    <obsolete>
-      Deprecated as of 12/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="DOM" label="Time to initialize DOM.">
-    <obsolete>
-      Deprecated as of 12/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="FileSystem"
-      label="Time to get access to the local file system.">
-    <obsolete>
-      Deprecated as of 9/2013.
-    </obsolete>
-  </suffix>
-  <suffix name="Parse" label="Time to parse Javascript and CSS (Deprecated).">
-    <obsolete>
-      Deprecated as of 12/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="Roots" label="Time to enumerate file system roots.">
-    <obsolete>
-      Deprecated as of 12/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="Total"
-      label="Total load time from the moment the Javascript started parsing
-             till the moment the empty file list is displayed."/>
-  <suffix name="Script" label="Time to parse Javascript and CSS."/>
-  <suffix name="BackgroundScript"
-      label="Time to initialize backend script to wait for events."/>
-  <suffix name="BackgroundLaunch"
-      label="Time from onLaunched event is called to the window is created."/>
-  <suffix name="BackgroundRestart" label="Time to create a window on restart."/>
-  <suffix name="ImportElements"
-      label="Time to initialize the polymer elements."/>
-  <suffix name="InitBackgroundPage"
-      label="Time to initialize the background page."/>
-  <suffix name="InitDocuments"
-      label="Time to initialize the background page and the elements."/>
-  <suffix name="InitSettings" label="Time to restore user settings."/>
-  <suffix name="InitUI"
-      label="Time to initialize all UI after all elements are initialized."/>
-  <affected-histogram name="FileBrowser.Load"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="FirstPacketSplit">
-  <suffix name="first_packet_intact"
-      label="with GET/POST headers often using only 1 packet"/>
-  <suffix name="first_packet_split"
-      label="with all GET/POST requests using at least 2 packets"/>
-  <affected-histogram name="Renderer4.Abandoned"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="Renderer4.LoadType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="FirstUserActionTypes" separator=".">
-  <suffix name="Backgrounded" label="The user sent Chrome to the background"/>
-  <suffix name="Continuation"
-      label="The user continued the task from the last time they used the app"/>
-  <suffix name="NtpCreated" label="The user action open a NTP."/>
-  <suffix name="Omnibox" label="The user interacted with the omnibox."/>
-  <suffix name="SwitchTabs" label="The user switched tabs."/>
-  <affected-histogram name="FirstUserAction.BackgroundTime.MainIntent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="FromGWS">
-  <suffix name="FromGWS"
-      label="Only page loads that are a result of a navigation from a web
-             search are considered."/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFirstPaint"/>
-  <affected-histogram name="PLT.CommitToFirstPaint"/>
-  <affected-histogram name="PLT.PT_BeginToCommit"/>
-  <affected-histogram name="PLT.PT_BeginToFinish"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
-  <affected-histogram name="PLT.PT_CommitToFinish"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
-  <affected-histogram name="PLT.PT_RequestToCommit"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
-  <affected-histogram name="PLT.PT_RequestToFinish"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
-  <affected-histogram name="PLT.PT_RequestToStart"/>
-  <affected-histogram name="PLT.PT_StartToCommit"/>
-  <affected-histogram name="PLT.PT_StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GLApisWithErrorReporting">
-  <suffix name="TexImage2D" label="All GL APIs that allocate a 2D texture."/>
-  <suffix name="TexImage3D" label="All GL APIs that allocate a 3D texture."/>
-  <affected-histogram name="GPU.Error"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GlobalSdch">
-  <suffix name="global_disable_sdch" label="with SDCH completely disabled"/>
-  <suffix name="global_enable_sdch"
-      label="with SDCH support for applicable sites"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadCacheOnly"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_NormalLoad"/>
-  <affected-histogram name="PLT.LoadType"/>
-  <affected-histogram name="PLT.RequestToFinish"/>
-  <affected-histogram name="PLT.StartToFinish"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadCacheOnly"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadCacheOnly"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadStaleOk"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
-  <affected-histogram name="Renderer4.LoadType"/>
-  <affected-histogram name="Renderer4.RequestToFinish"/>
-  <affected-histogram name="Renderer4.StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GoogleSearchVariations">
-  <owner>kmadhusu@chromium.org</owner>
-  <suffix name="_PrerenderDisabled"
-      label="Counts number of Google searches from various access points in
-             the Android Chrome browser when prerendering is disabled via
-             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
-             settings. Only recorded on Android."/>
-  <suffix name="_PrerenderEnabled"
-      label="Counts number of Google searches from various access points in
-             the Android Chrome browser when prerendering is enabled via
-             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
-             settings. Only recorded on Android."/>
-  <affected-histogram name="GoogleSearch.AccessPoint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GPU.ContextType" separator=".">
-  <suffix name="WebGL" label="WebGL Context."/>
-  <suffix name="GLES" label="GLES Context."/>
-  <affected-histogram name="GPU.ContextMemory"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GPU.MemorySamplingTime" separator=".">
-  <suffix name="Periodic" label="Sampled periodically."/>
-  <suffix name="Shutdown" label="Sampled at shutdown."/>
-  <suffix name="Pressure" label="Sampled on CRITICAL memory pressure signal."/>
-  <affected-histogram name="GPU.ContextMemory.GLES"/>
-  <affected-histogram name="GPU.ContextMemory.WebGL"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="GWSChromeJointExperiment">
-  <suffix name="Experiment1"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment2"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment3"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment4"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment5"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment6"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment7"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment8"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment9"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment10"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment11"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment12"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment13"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment14"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment15"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment16"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment17"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment18"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment19"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <suffix name="Experiment20"
-      label="Only page loads that are a result of a navigation from a web
-             search under a specific web search/Chrome joint experiment.
-             Unused at this moment."/>
-  <affected-histogram name="PLT.BeginToFinish_FromGWS"/>
-  <affected-histogram name="PLT.BeginToFinish_NoPreview"/>
-  <affected-histogram name="PLT.BeginToFinish_Preview"/>
-  <affected-histogram name="PLT.BeginToFinish_WithPreview"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_FromGWS"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_NoPreview"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_Preview"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_WithPreview"/>
-  <affected-histogram name="PLT.BeginToFirstPaint_FromGWS"/>
-  <affected-histogram name="PLT.BeginToFirstPaint_NoPreview"/>
-  <affected-histogram name="PLT.BeginToFirstPaint_Preview"/>
-  <affected-histogram name="PLT.BeginToFirstPaint_WithPreview"/>
-  <affected-histogram name="PLT.CommitToFirstPaint_FromGWS"/>
-  <affected-histogram name="PLT.CommitToFirstPaint_NoPreview"/>
-  <affected-histogram name="PLT.CommitToFirstPaint_Preview"/>
-  <affected-histogram name="PLT.CommitToFirstPaint_WithPreview"/>
-  <affected-histogram name="PLT.PT_BeginToCommit_FromGWS"/>
-  <affected-histogram name="PLT.PT_BeginToCommit_NoPreview"/>
-  <affected-histogram name="PLT.PT_BeginToCommit_Preview"/>
-  <affected-histogram name="PLT.PT_BeginToCommit_WithPreview"/>
-  <affected-histogram name="PLT.PT_BeginToFinish_FromGWS"/>
-  <affected-histogram name="PLT.PT_BeginToFinish_NoPreview"/>
-  <affected-histogram name="PLT.PT_BeginToFinish_Preview"/>
-  <affected-histogram name="PLT.PT_BeginToFinish_WithPreview"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc_FromGWS"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc_NoPreview"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc_Preview"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc_WithPreview"/>
-  <affected-histogram name="PLT.PT_CommitToFinish_FromGWS"/>
-  <affected-histogram name="PLT.PT_CommitToFinish_NoPreview"/>
-  <affected-histogram name="PLT.PT_CommitToFinish_Preview"/>
-  <affected-histogram name="PLT.PT_CommitToFinish_WithPreview"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc_FromGWS"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc_NoPreview"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc_Preview"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc_WithPreview"/>
-  <affected-histogram name="PLT.PT_RequestToCommit_FromGWS"/>
-  <affected-histogram name="PLT.PT_RequestToCommit_NoPreview"/>
-  <affected-histogram name="PLT.PT_RequestToCommit_Preview"/>
-  <affected-histogram name="PLT.PT_RequestToCommit_WithPreview"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_FromGWS"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_NoPreview"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_Preview"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_WithPreview"/>
-  <affected-histogram name="PLT.PT_RequestToFinish_FromGWS"/>
-  <affected-histogram name="PLT.PT_RequestToFinish_NoPreview"/>
-  <affected-histogram name="PLT.PT_RequestToFinish_Preview"/>
-  <affected-histogram name="PLT.PT_RequestToFinish_WithPreview"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc_FromGWS"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc_NoPreview"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc_Preview"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc_WithPreview"/>
-  <affected-histogram name="PLT.PT_RequestToStart_FromGWS"/>
-  <affected-histogram name="PLT.PT_RequestToStart_NoPreview"/>
-  <affected-histogram name="PLT.PT_RequestToStart_Preview"/>
-  <affected-histogram name="PLT.PT_RequestToStart_WithPreview"/>
-  <affected-histogram name="PLT.PT_StartToCommit_FromGWS"/>
-  <affected-histogram name="PLT.PT_StartToCommit_NoPreview"/>
-  <affected-histogram name="PLT.PT_StartToCommit_Preview"/>
-  <affected-histogram name="PLT.PT_StartToCommit_WithPreview"/>
-  <affected-histogram name="PLT.PT_StartToFinish_FromGWS"/>
-  <affected-histogram name="PLT.PT_StartToFinish_NoPreview"/>
-  <affected-histogram name="PLT.PT_StartToFinish_Preview"/>
-  <affected-histogram name="PLT.PT_StartToFinish_WithPreview"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HadUserInput" separator=".">
-  <suffix name="HadUserInput" label="Had user input"/>
-  <suffix name="NoUserInput" label="No user input"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HandshakeConfirmed" separator=".">
-  <suffix name="HandshakeConfirmed" label="the handshake was confirmed"/>
-  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"/>
-  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HistogramInconsistencies" separator=".">
-  <suffix name="Cronet" label="Cronet histograms."/>
-  <affected-histogram name="Histogram.InconsistenciesBrowser"/>
-  <affected-histogram name="Histogram.InconsistenciesBrowserUnique"/>
-  <affected-histogram name="Histogram.InconsistentSnapshotBrowser"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HttpCacheAccessToDoneCases" separator=".">
-  <suffix name="SentRequest" label="The request was sent over the network."/>
-  <suffix name="Used"
-      label="A cache entry was used without using the network."/>
-  <affected-histogram name="HttpCache.AccessToDone"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HttpCacheBeforeSendCases" separator=".">
-  <suffix name="CantConditionalize"
-      label="A cached resource existed but no conditional request could be
-             written."/>
-  <suffix name="NotCached" label="There was no pre-existing disk cache entry."/>
-  <suffix name="Updated"
-      label="A cached resource existed and was updated over the network."/>
-  <suffix name="Validated"
-      label="A cached resource existed and was validated over the network."/>
-  <affected-histogram name="HttpCache.BeforeSend"/>
-  <affected-histogram name="HttpCache.PercentBeforeSend"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HttpJobBytes" separator=".">
-  <suffix name="Cache" label="For requests served from the cache."/>
-  <suffix name="Net" label="For requests served from the network."/>
-  <affected-histogram name="Net.HttpJob.PrefilterBytesRead"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="HttpPipeliningCompatibility">
-  <suffix name="disable_test" label="Do nothing"/>
-  <suffix name="enable_test" label="Test connection for HTTP pipelining"/>
-  <affected-histogram name="NetConnectivity.Pipeline.0.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.0.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.0.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.1.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.1.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.1.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.2.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.2.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.2.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.3.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.3.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.3.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.4.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.4.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.4.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.5.NetworkError"/>
-  <affected-histogram name="NetConnectivity.Pipeline.5.ResponseCode"/>
-  <affected-histogram name="NetConnectivity.Pipeline.5.Status"/>
-  <affected-histogram name="NetConnectivity.Pipeline.AllHTTP11"/>
-  <affected-histogram name="NetConnectivity.Pipeline.CanarySuccess"/>
-  <affected-histogram name="NetConnectivity.Pipeline.Depth"/>
-  <affected-histogram name="NetConnectivity.Pipeline.Success"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IdleSktToImpact">
-  <suffix name="idle_timeout_5"
-      label="with 5-second unused idle socket timeout"/>
-  <suffix name="idle_timeout_10"
-      label="with 10-second unused idle socket timeout"/>
-  <suffix name="idle_timeout_20"
-      label="with 20-second unused idle socket timeout"/>
-  <suffix name="idle_timeout_60"
-      label="with 60-second unused idle socket timeout"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ImageDecoderFileTypes" separator=".">
-  <obsolete>
-    Deprecated as of 11/29/2016.
-  </obsolete>
-  <suffix name="BMP" label="Image decoded as BMP"/>
-  <suffix name="GIF" label="Image decoded as GIF"/>
-  <suffix name="ICO" label="Image decoded as ICO"/>
-  <suffix name="JPEG" label="Image decoded as JPEG"/>
-  <suffix name="PNG" label="Image decoded as PNG"/>
-  <affected-histogram name="Blink.DecodedImage.CanvasExpanded"/>
-  <affected-histogram name="Blink.DecodedImage.EffectiveDimensionsLocation"/>
-  <affected-histogram name="Blink.DecodedImage.XCanvasExpansion"/>
-  <affected-histogram name="Blink.DecodedImage.YCanvasExpansion"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IMEAutoCorrect" separator=".">
-  <suffix name="AC0" label="The auto-correct level is 0"/>
-  <suffix name="AC1" label="The auto-correct level is 1"/>
-  <suffix name="AC2" label="The auto-correct level is 2"/>
-  <affected-histogram name="InputMethod.Commit.Index.FR"/>
-  <affected-histogram name="InputMethod.Commit.Index.US"/>
-  <affected-histogram name="InputMethod.Commit.Type.FR"/>
-  <affected-histogram name="InputMethod.Commit.Type.US"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IMEMajorNames" separator=".">
-  <suffix name="US" label="The US keyboard input method"/>
-  <suffix name="FR" label="The French keyboard input method"/>
-  <suffix name="Pinyin" label="The Chinse Pinyin input method"/>
-  <affected-histogram name="InputMethod.Commit.Index"/>
-  <affected-histogram name="InputMethod.Commit.Type"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IMEVKLatency" separator=".">
-  <suffix name="BackgroundSettingsFetched"
-      label="Latency for settings fetched from background"/>
-  <suffix name="HtmlLoaded" label="Latency for the page is loaded"/>
-  <suffix name="KeyboardCreated" label="Latency for the keyboard is created"/>
-  <suffix name="KeyboardShown" label="Latency for keyboard is shown"/>
-  <suffix name="KeysetLoaded" label="Latency for keyset config is loaded"/>
-  <suffix name="LayoutLoaded" label="Latency for layout definition is loaded"/>
-  <affected-histogram name="InputMethod.VirtualKeyboard.InitLatency"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ImmediatePageLoadTiming" separator=".">
-  <obsolete>
-    Deprecated by PageLoad.PaintTiming.NavigationToFirstContentfulPaint.
-  </obsolete>
-  <suffix name="Immediate"
-      label="Logged immediately after a timing update is observed, unlike
-             normal PageLoad timing metrics, which are logged at the end of a
-             page's lifetime. This metric is temporary and is intended to
-             help loading-dev to understand the impact of logging metrics at
-             the end of a page load."/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IndexedDBLevelDBErrnoMethods" separator=".">
-  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
-  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
-  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
-  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
-  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
-  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
-  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
-  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
-  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
-  <suffix name="WritableFileSyncParent"
-      label="ChromiumWritableFile::SyncParent"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IndexedDBLevelDBPFEMethods" separator=".">
-  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
-  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
-  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
-  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
-  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
-  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
-  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
-  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
-  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
-  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
-  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="InstallerDownloadSources" separator="">
-  <suffix name="HttpPeer" label="Download Source: HTTP Peer"/>
-  <suffix name="HttpServer" label="Download Source: HTTP Server"/>
-  <suffix name="HttpsServer" label="Download Source: HTTPS Server"/>
-  <affected-histogram name="Installer.SuccessfulMBsDownloadedFrom"/>
-  <affected-histogram name="Installer.TotalMBsDownloadedFrom"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Instant">
-  <suffix name="Extended" label="Suggestions + Results"/>
-  <suffix name="Instant" label="Results"/>
-  <affected-histogram name="Instant.SessionsStorageNamespace"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="InstantExtended_QuerytoQuery">
-  <obsolete>
-    All relevant histograms have been marked as obsolete as of Sep 2016.
-  </obsolete>
-  <owner>macourteau@chromium.org</owner>
-  <suffix name="400" label="Omnibox width &lt; 400"/>
-  <suffix name="700" label="Omnibox width &lt; 700"/>
-  <suffix name="1200" label="Omnibox width &lt; 1200"/>
-  <suffix name="large" label="Omnibox width &gt;= 1200"/>
-  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery"/>
-  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoURL"/>
-  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoQuery"/>
-  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoURL"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="InstantSearchClicks">
-  <obsolete>
-    Deprecated as of 7/2015.
-  </obsolete>
-  <suffix name="WithPreview"
-      label="Only page loads through data reduction proxy that are result of
-             navigation from web search and preview version of the page shown
-             are considered."/>
-  <suffix name="Preview"
-      label="Only page loads through data reduction proxy that are result of
-             navigation from web search and preview version of the page shown
-             are considered."/>
-  <suffix name="NoPreview"
-      label="Only page loads through data reduction proxy that are result of
-             navigation from web search and preview version of the page shown
-             are considered."/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.BeginToFirstPaint"/>
-  <affected-histogram name="PLT.CommitToFirstPaint"/>
-  <affected-histogram name="PLT.PT_BeginToCommit"/>
-  <affected-histogram name="PLT.PT_BeginToFinish"/>
-  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
-  <affected-histogram name="PLT.PT_CommitToFinish"/>
-  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
-  <affected-histogram name="PLT.PT_RequestToCommit"/>
-  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
-  <affected-histogram name="PLT.PT_RequestToFinish"/>
-  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
-  <affected-histogram name="PLT.PT_RequestToStart"/>
-  <affected-histogram name="PLT.PT_StartToCommit"/>
-  <affected-histogram name="PLT.PT_StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IntentToFirstCommitZoom" separator=".">
-  <owner>lizeb@chromium.org</owner>
-  <owner>pasko@chromium.org</owner>
-  <suffix name="ZoomedIn" label="Zoomed in view: shorter range, more buckets."/>
-  <suffix name="ZoomedOut"
-      label="Zoomed out view: longer time range, less buckets."/>
-  <affected-histogram
-      name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"/>
-  <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime2"/>
-  <affected-histogram name="Startup.FirstCommitNavigationTime2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="InterProcessTimeTicksConversionType">
-  <owner>ppi@chromium.org</owner>
-  <suffix name="BrowserToRenderer"/>
-  <suffix name="RendererToBrowser"/>
-  <affected-histogram name="InterProcessTimeTicks.BrowserAhead"/>
-  <affected-histogram name="InterProcessTimeTicks.BrowserBehind"/>
-  <affected-histogram name="InterProcessTimeTicks.IsSkewAdditive"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Interval" separator="_">
-  <obsolete>
-    Removed 10/2016.
-  </obsolete>
-  <suffix name="Interval" label="Interval between two consecutive connects is"/>
-  <affected-histogram name="Net.TCP_Connection_Latency"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Interval_20ms_plus_and_minus" separator="_">
-  <obsolete>
-    Removed 11/2016.
-  </obsolete>
-  <suffix name="Interval_20ms_Minus"
-      label="Interval between two consecutive connects is less than 20ms."/>
-  <suffix name="Interval_20ms_Plus"
-      label="Interval between two consecutive connects is greater than or
-             equal to 20ms."/>
-  <affected-histogram name="Net.TCP_Connection_Latency"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Interval_lt_gt_20ms" separator="_">
-  <obsolete>
-    Removed 11/2016.
-  </obsolete>
-  <suffix name="LessThanOrEqual_10ms" label="less than or equal to 10ms."/>
-  <suffix name="LessThanOrEqual_20ms"
-      label="more than 10ms, and less than or equal to 20ms."/>
-  <suffix name="GreaterThan_20ms" label="greater than 20ms."/>
-  <affected-histogram name="Net.TCP_Connection_Latency_Interval"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IOMode" separator=".">
-  <suffix name="Synchronous"/>
-  <suffix name="Asynchronous"/>
-  <affected-histogram name="Net.QuicSession.PacketWriteTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="iOS_PLT" separator="">
-  <owner>pauljensen@chromium.org</owner>
-  <suffix name="" label="not using Data Reduction Proxy"/>
-  <suffix name="_DataReductionProxy" label="using Data Reduction Proxy"/>
-  <affected-histogram name="Tabs.iOS_PostRedirectPLT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IPProtocolType" separator="_">
-  <suffix name="UDP"/>
-  <suffix name="TCP"/>
-  <affected-histogram name="WebRTC.PeerConnection.CandidatePairType"/>
-  <affected-histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed"/>
-  <affected-histogram name="WebRTC.SystemPercentPacketsDelayed"/>
-  <affected-histogram name="WebRTC.SystemSendPacketDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="IPv6_Probe">
-  <suffix name="IPv6_probe_skipped"
-      label="with IPv6 not probed, and default OS settings used"/>
-  <suffix name="IPv6_probe_done"
-      label="with IPv6 probed for and possibly disabled"/>
-  <affected-histogram name="DNS.PrefetchResolution"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="JSDialogs.DialogType" separator=".">
-  <suffix name="Alert"/>
-  <suffix name="Confirm"/>
-  <suffix name="Prompt"/>
-  <affected-histogram name="JSDialogs.DismissalCause"/>
-  <affected-histogram name="JSDialogs.IsForemost"/>
-  <affected-histogram name="JSDialogs.SiteEngagementOfDialogs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="JSDialogs.EngagementList" separator=".">
-  <suffix name="EngagementNone" label="site engagement = 0"/>
-  <suffix name="EngagementLessThanOne" label="site engagement &lt; 1"/>
-  <suffix name="EngagementOneToFive" label="site engagement &gt;= 1, &lt; 5"/>
-  <suffix name="EngagementHigher" label="site engagement &gt;= 5"/>
-  <affected-histogram name="JSDialogs.CharacterCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="JSDialogs.FrameType" separator=".">
-  <suffix name="MainFrame" label="dialog spawned by the main frame"/>
-  <suffix name="Subframe" label="dialog spawned by a subframe"/>
-  <affected-histogram name="JSDialogs.CharacterCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="JSDialogs.LeaveStay" separator=".">
-  <suffix name="Leave" label="user opted to leave the page"/>
-  <suffix name="Stay" label="user opted to stay on the page"/>
-  <affected-histogram name="JSDialogs.SiteEngagementOfBeforeUnload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="JSDialogs.UserGestureSinceLoad" separator=".">
-  <suffix name="UserGestureSinceLoad"/>
-  <suffix name="NoUserGestureSinceLoad"/>
-  <affected-histogram name="JSDialogs.CharacterCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LateBindingExperiment">
-  <suffix name="disable_late_binding" label="socket late binding is disabled"/>
-  <suffix name="enable_late_binding" label="socket late binding is enabled"/>
-  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
-  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
-  <affected-histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket"/>
-  <affected-histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket"/>
-  <affected-histogram name="Net.TCPSocketType"/>
-  <affected-histogram name="Net.Transaction_Connected"/>
-  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
-  <affected-histogram name="Net.TransportSocketRequestTime"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
-  <affected-histogram name="Renderer4.RequestToFinish"/>
-  <affected-histogram name="Renderer4.StartToFinish"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBBFEMethods" separator=".">
-  <owner>cmumford@chromium.org</owner>
-  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
-  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
-  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
-  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
-  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
-  <suffix name="GetTestDirectory" label="ChromiumEnv::GetTestDirectory"/>
-  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
-  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
-  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
-  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
-  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
-  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
-  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
-  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
-  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
-  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
-  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
-  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
-  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
-  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
-  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
-  <suffix name="WritableFileSyncParent"
-      label="ChromiumWritableFile::SyncParent"/>
-  <affected-histogram name="LevelDBEnv.IDB.IOError.BFE"/>
-  <affected-histogram name="LevelDBEnv.IOError.BFE"/>
-  <affected-histogram name="LevelDBEnv.LocalStorage.IOError.BFE"/>
-  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError.BFE"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"/>
-  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvBackupRestore" separator="">
-  <obsolete>
-    Deprecated 08/2016.
-  </obsolete>
-  <suffix name="Backup" label="Backing up an ldb file."/>
-  <suffix name="Restore" label="Restoring an ldb file."/>
-  <affected-histogram name="LevelDBEnv.IDB.Table"/>
-  <affected-histogram name="LevelDBEnv.ServiceWorker.Table"/>
-  <affected-histogram name="LevelDBEnv.Table"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvMaxFDs" separator=".">
-  <suffix name="Success"
-      label="This histogram shows the limit when open succeeded."/>
-  <suffix name="TooManyOpened"
-      label="This histogram shows the limit when open failed because the
-             limit had been reached."/>
-  <suffix name="OtherError"
-      label="This histogram shows the limit when open failed for reasons
-             other than exceeding the limit."/>
-  <affected-histogram name="LevelDBEnv.IDB.MaxFDs"/>
-  <affected-histogram name="LevelDBEnv.LocalStorage.MaxFDs"/>
-  <affected-histogram name="LevelDBEnv.MaxFDs"/>
-  <affected-histogram name="LevelDBEnv.ServiceWorker.MaxFDs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvPlatformFileErrors" separator="">
-  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
-  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
-  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
-  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
-  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
-  <affected-histogram name="LevelDBEnv.IDB.IOError."/>
-  <affected-histogram name="LevelDBEnv.IOError."/>
-  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError."/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvRetry" separator="">
-  <suffix name="RenameFile" label="RenameFile"/>
-  <suffix name="LockFile" label="LockFile"/>
-  <suffix name="CreateDir" label="CreateDir"/>
-  <affected-histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"/>
-  <affected-histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor"/>
-  <affected-histogram name="LevelDBEnv.LocalStorage.RetryRecoveredFromErrorIn"/>
-  <affected-histogram name="LevelDBEnv.LocalStorage.TimeUntilSuccessFor"/>
-  <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
-  <affected-histogram
-      name="LevelDBEnv.ServiceWorker.RetryRecoveredFromErrorIn"/>
-  <affected-histogram name="LevelDBEnv.ServiceWorker.TimeUntilSuccessFor"/>
-  <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvRetryTimes" separator="">
-  <obsolete>
-    Deprecated 2013-04 in favor of LevelDBEnvRetry.
-  </obsolete>
-  <suffix name="Rename" label="RenameFile"/>
-  <suffix name="LockFile" label="LockFile"/>
-  <affected-histogram name="LevelDBEnv.IDB.TimeTo"/>
-  <affected-histogram name="LevelDBEnv.TimeTo"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBEnvTypes" separator="." ordering="prefix">
-  <suffix name="IDB" label="Restricted to IndexedDB LevelDB environments"/>
-  <suffix name="LocalStorage"
-      label="Restricted to LocalStorage LevelDB environments"/>
-  <suffix name="ServiceWorker"
-      label="Restricted to ServiceWorker LevelDB environments"/>
-  <affected-histogram name="LevelDBEnv.IOError"/>
-  <affected-histogram name="LevelDBEnv.IOError."/>
-  <affected-histogram name="LevelDBEnv.IOError.BFE"/>
-  <affected-histogram name="LevelDBEnv.IOError.NewLogger"/>
-  <affected-histogram name="LevelDBEnv.IOError.NewSequentialFile"/>
-  <affected-histogram name="LevelDBEnv.IOError.RandomAccessFile"/>
-  <affected-histogram name="LevelDBEnv.IOError.WritableFileAppend"/>
-  <affected-histogram name="LevelDBEnv.IOError.WritableFileFlush"/>
-  <affected-histogram name="LevelDBEnv.LockFileAncestorsNotFound"/>
-  <affected-histogram name="LevelDBEnv.MaxFDs"/>
-  <affected-histogram name="LevelDBEnv.MissingFiles"/>
-  <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
-  <affected-histogram name="LevelDBEnv.Table"/>
-  <affected-histogram name="LevelDBEnv.TimeTo"/>
-  <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LevelDBOpenResults">
-  <suffix name="DomDistillerStore" label="Databases for DomDistillerStore"/>
-  <suffix name="GCMKeyStore" label="Databases for GCMKeyStore"/>
-  <suffix name="ImageManager" label="Databases for ImageManager"/>
-  <suffix name="OfflinePageMetadataStore"
-      label="Databases for OfflinePageMetadataStore"/>
-  <suffix name="UsageReportsBufferBackend"
-      label="The result of the first attempt to open the usage reports buffer
-             backend database."/>
-  <suffix name="BudgetManager"
-      label="Database for storing budget information for origins."/>
-  <affected-histogram name="LevelDB.Open"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LocalStorageCachePurgeReason" separator=".">
-  <suffix name="AggressivePurgeTriggered"
-      label="Aggressive purge was triggered on memory pressure."/>
-  <suffix name="AreaCountLimitExceeded"
-      label="Storage areas count exceeded limit."/>
-  <suffix name="InactiveOnLowEndDevice"
-      label="Inactive areas found in low end device."/>
-  <suffix name="ModeratePurgeTriggered"
-      label="Moderate purge was triggered on memory pressure."/>
-  <suffix name="SizeLimitExceeded" label="Cache size exceeded limit."/>
-  <affected-histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LocalStorageSizes" separator="">
-  <suffix name="Under100KB" label="DB size under 100KB"/>
-  <suffix name="100KBTo1MB" label="DB size between 100KB and 1MB"/>
-  <suffix name="1MBTo5MB" label="DB size between 1MB and 5MB"/>
-  <affected-histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage"/>
-  <affected-histogram name="LocalStorage.MojoTimeToPrimeFor"/>
-  <affected-histogram name="LocalStorage.RendererTimeToPrimeLocalStorage"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LocationAttachedStatus" separator=".">
-  <suffix name="LocationAttached"
-      label="This histogram is for when the location was successfully
-             attached to the request."/>
-  <suffix name="LocationNotAttached"
-      label="This histogram is for when the location was not attached to the
-             request. A location may not be attached if it is too old or if
-             the permissions do not allow it."/>
-  <affected-histogram name="Geolocation.Header.TimeListening.BatterySaving"/>
-  <affected-histogram name="Geolocation.Header.TimeListening.GpsOnly"/>
-  <affected-histogram name="Geolocation.Header.TimeListening.HighAccuracy"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LocationMode" separator=".">
-  <suffix name="BatterySaving"
-      label="This histogram is for location mode Battery Saving."/>
-  <suffix name="GpsOnly" label="This histogram is for location mode GPS Only."/>
-  <suffix name="HighAccuracy"
-      label="This histogram is for location mode High Accuracy."/>
-  <affected-histogram name="Geolocation.Header.LocationAge"/>
-  <affected-histogram name="Geolocation.Header.TimeListening"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LockExistingCachedImage" separator=".">
-  <suffix name="Software.EVENTUALLY" label="Eventually bin for software"/>
-  <suffix name="Software.NOW" label="Now bin for software"/>
-  <suffix name="Software.SOON" label="Soon bin for software"/>
-  <affected-histogram name="Renderer4.LockExistingCachedImage"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="LowMemoryMargin">
-  <suffix name="default" label="Low memory margin set to the system default"/>
-  <suffix name="off" label="Low memory notification disabled"/>
-  <suffix name="0mb" label="Low memory margin set to 0MB"/>
-  <suffix name="25mb" label="Low memory margin set to 25MB"/>
-  <suffix name="50mb" label="Low memory margin set to 50MB"/>
-  <suffix name="100mb" label="Low memory margin set to 100MB"/>
-  <suffix name="200mb" label="Low memory margin set to 200MB"/>
-  <affected-histogram name="Tabs.Discard.DiscardCount"/>
-  <affected-histogram name="Tabs.Discard.InitialTime2"/>
-  <affected-histogram name="Tabs.Discard.IntervalTime2"/>
-  <affected-histogram name="Tabs.Discard.MemAnonymousMB"/>
-  <affected-histogram name="Tabs.Discard.MemAvailableMB"/>
-  <affected-histogram name="Tabs.Discard.TabCount"/>
-  <affected-histogram name="Tabs.SadTab.CrashCreated"/>
-  <affected-histogram name="Tabs.SadTab.KillCreated"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ManifestProperties" separator=".">
-  <suffix name="name"/>
-  <suffix name="short_name"/>
-  <suffix name="start_url"/>
-  <suffix name="display"/>
-  <suffix name="orientation"/>
-  <suffix name="icons"/>
-  <suffix name="gcm_sender_id"/>
-  <affected-histogram name="Manifest.HasProperty"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaAudioInputControllerTime" separator=".">
-  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
-  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
-  <suffix name="RecordTime" label="Measures the time taken for DoRecord()."/>
-  <affected-histogram name="Media.AudioInputController"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaAudioInputDeviceManagerTime" separator=".">
-  <suffix name="OpenOnDeviceThreadTime"
-      label="Measures the time taken for OpenOnDeviceThread()."/>
-  <suffix name="EnumerateOnDeviceThreadTime"
-      label="Measures the time taken for EnumerateOnDeviceThread()."/>
-  <affected-histogram name="Media.AudioInputDeviceManager"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaAudioOutputControllerTime" separator=".">
-  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
-  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
-  <suffix name="DeviceChangeTime"
-      label="Measures the time taken for OnDeviceChange()."/>
-  <suffix name="PauseTime" label="Measures the time taken for DoPause()."/>
-  <suffix name="PlayTime"
-      label="Measures the time taken for DoPlay(). Technically only the
-             worker method AudioOutputController::PollAndStartIfDataReady()."/>
-  <affected-histogram name="Media.AudioOutputController"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaPipelineStatusForStreams" separator=".">
-  <suffix name="AudioVideo.Other"
-      label="PipelineStatus for the codecs that dont have an explicit metric."/>
-  <suffix name="AudioVideo.VP8.SW"
-      label="PipelineStatus for AV streams with VP8 software decoder."/>
-  <suffix name="AudioVideo.VP8.HW"
-      label="PipelineStatus for AV streams with VP8 hardware decoder."/>
-  <suffix name="AudioVideo.VP8.DDS.SW"
-      label="PipelineStatus for AV streams with VP8 software codec and that
-             go through the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.VP8.DDS.HW"
-      label="PipelineStatus for AV streams with VP8 hardware codec and that
-             go through the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.VP8.DVD"
-      label="PipelineStatus for AV streams with VP8 codec and that go through
-             the DecryptingVideoDecoder (DVD)."/>
-  <suffix name="AudioVideo.VP9.SW"
-      label="PipelineStatus for AV streams with VP9 software decoder."/>
-  <suffix name="AudioVideo.VP9.HW"
-      label="PipelineStatus for AV streams with VP9 hardware decoder."/>
-  <suffix name="AudioVideo.VP9.DDS.SW"
-      label="PipelineStatus for AV streams with VP9 codec and that go through
-             the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.VP9.DDS.HW"
-      label="PipelineStatus for AV streams with VP9 hardware codec and that
-             go through the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.VP9.DVD"
-      label="PipelineStatus for AV streams with VP9 software codec and that
-             go through the DecryptingVideoDecoder (DVD)."/>
-  <suffix name="AudioVideo.H264.SW"
-      label="PipelineStatus for software decoded AV streams with H264
-             decoder."/>
-  <suffix name="AudioVideo.H264.HW"
-      label="PipelineStatus for hardware decoded AV streams with H264
-             decoder."/>
-  <suffix name="AudioVideo.H264.DDS.SW"
-      label="PipelineStatus for AV streams with H264 software decoder and
-             that go through the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.H264.DDS.HW"
-      label="PipelineStatus for AV streams with H264 hardware decoder and
-             that go through the DecryptingDemuxerStream (DDS)."/>
-  <suffix name="AudioVideo.H264.DVD"
-      label="PipelineStatus for AV streams with H264 decoder and that go
-             through the DecryptingVideoDecoder (DVD)."/>
-  <suffix name="AudioOnly" label="PipelineStatus for Audio-only streams."/>
-  <suffix name="VideoOnly" label="PipelineStatus for Video-only streams."/>
-  <suffix name="Unsupported" label="PipelineStatus for unsupported streams."/>
-  <affected-histogram name="Media.PipelineStatus"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaVideoCaptureManagerTime" separator=".">
-  <suffix name="StartDeviceTime"
-      label="Measures the time taken for DoStartDeviceOnDeviceThread()."/>
-  <suffix name="StopDeviceTime"
-      label="Measures the time taken for DoStopDeviceOnDeviceThread()."/>
-  <suffix name="GetAvailableDevicesInfoOnDeviceThreadTime"
-      label="Measures the time taken to enumerate devices and their
-             capabilities, between EnumerateDevices() and
-             OnDevicesInfoEnumerated()."/>
-  <affected-histogram name="Media.VideoCaptureManager"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaWatchTimeCategories" separator=".">
-  <suffix name="Audio.All"
-      label="Watch time for all media with only an audio track."/>
-  <suffix name="Audio.AC"
-      label="Watch time for all media with only an audio track on AC power."/>
-  <suffix name="Audio.Battery"
-      label="Watch time for all media with only an audio track on battery
-             power."/>
-  <suffix name="Audio.MSE"
-      label="Watch time for MSE media with only an audio track."/>
-  <suffix name="Audio.SRC"
-      label="Watch time for SRC media with only an audio track."/>
-  <suffix name="Audio.EME"
-      label="Watch time for EME media with only an audio track."/>
-  <suffix name="Audio.EmbeddedExperience"
-      label="Watch time for downloaded media on Android with only an audio
-             track."/>
-  <suffix name="AudioVideo.All"
-      label="Watch time for all media with both an audio and video track."/>
-  <suffix name="AudioVideo.AC"
-      label="Watch time for all media with both an audio and video track on
-             AC power."/>
-  <suffix name="AudioVideo.Battery"
-      label="Watch time for all media with both an audio and video track on
-             battery power."/>
-  <suffix name="AudioVideo.MSE"
-      label="Watch time for MSE media with both an audio and video track."/>
-  <suffix name="AudioVideo.SRC"
-      label="Watch time for SRC media with both an audio and video track."/>
-  <suffix name="AudioVideo.EME"
-      label="Watch time for EME media with both an audio and video track."/>
-  <suffix name="AudioVideo.EmbeddedExperience"
-      label="Watch time for downloaded media on Android with both an audio
-             and video track."/>
-  <affected-histogram name="Media.WatchTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MediaWMPIMemoryUsage" separator=".">
-  <suffix name="Audio"/>
-  <suffix name="DataSource"/>
-  <suffix name="Demuxer"/>
-  <suffix name="Video"/>
-  <affected-histogram name="Media.WebMediaPlayerImpl.Memory"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MemoryFDsAllProcesses" separator="."
-    ordering="prefix">
-  <suffix name="Browser" label="Browser process"/>
-  <suffix name="Gpu" label="GPU process"/>
-  <suffix name="RendererAll" label="Renderer process"/>
-  <suffix name="Chrome" label="chrome:// renderer process"/>
-  <suffix name="Extension" label="Extension process"/>
-  <suffix name="NativeClient" label="Native client process"/>
-  <suffix name="NativeClientBroker" label="Native client broker process"/>
-  <suffix name="PeperPlugin" label="Pepper plugin process"/>
-  <suffix name="PepperPluginBroker" label="Pepper plugin broker process"/>
-  <suffix name="Renderer" label="Renderer process"/>
-  <suffix name="SandboxHelper" label="Sandbox helper process"/>
-  <suffix name="Utility" label="Utility process"/>
-  <suffix name="Zygote" label="Zygot process"/>
-  <affected-histogram name="Memory.OpenFDs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" separator="."
-    ordering="prefix">
-  <suffix name="Browser" label="Browser process"/>
-  <suffix name="Gpu" label="GPU process"/>
-  <suffix name="RendererAll" label="Renderer process"/>
-  <affected-histogram name="Memory.OpenFDsSoftLimit"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MemoryStateTransition" separator=".">
-  <suffix name="NormalToThrottled"/>
-  <suffix name="NormalToSuspended"/>
-  <suffix name="ThrottledToNormal"/>
-  <suffix name="ThrottledToSuspended"/>
-  <suffix name="SuspendedToNormal"/>
-  <suffix name="SuspendedToThrottled"/>
-  <affected-histogram name="Memory.Coordinator.StateDuration"/>
-  <affected-histogram name="Memory.Coordinator.TotalPrivate"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileDownloadBytesDownloadedTypes" separator=".">
-  <suffix name="ChromeNetworkStack.Failure"/>
-  <suffix name="ChromeNetworkStack.Success"/>
-  <suffix name="DownloadManager.Failure"/>
-  <suffix name="DownloadManager.Success"/>
-  <affected-histogram name="MobileDownload.BytesDownloaded"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileDownloadBytesWastedTypes" separator=".">
-  <suffix name="Failure" label="Recorded upon download failure."/>
-  <suffix name="Success" label="Recorded upon download success."/>
-  <suffix name="Cancel" label="Recorded upon download Cancel."/>
-  <affected-histogram name="MobileDownload.BytesWasted.ChromeNetworkStack"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileDownloadDownloadTimeTypes" separator=".">
-  <suffix name="ChromeNetworkStack.Cancel"/>
-  <suffix name="ChromeNetworkStack.Failure"/>
-  <suffix name="ChromeNetworkStack.Success"/>
-  <suffix name="DownloadManager.Failure"/>
-  <suffix name="DownloadManager.Success"/>
-  <affected-histogram name="MobileDownload.DownloadTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileDownloadInterruptionsCountTypes" separator=".">
-  <suffix name="ChromeNetworkStack.Cancel"/>
-  <suffix name="ChromeNetworkStack.Failure"/>
-  <suffix name="ChromeNetworkStack.Success"/>
-  <affected-histogram name="MobileDownload.InterruptionsCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileFreEntryType" separator=".">
-  <suffix name="MainIntent" label="Icon click"/>
-  <suffix name="ViewIntent" label="VIEW intent"/>
-  <affected-histogram name="MobileFre.Progress"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileFreSignInChoiceEntryType" separator=".">
-  <obsolete>
-    Removed from code as of 08/2016.
-  </obsolete>
-  <suffix name="MainIntent" label="Icon click"/>
-  <suffix name="ViewIntent" label="VIEW intent"/>
-  <affected-histogram name="MobileFre.SignInChoice"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="MobileFreSignInChoiceNumberOfAccounts" separator=".">
-  <obsolete>
-    Removed from code as of 08/2016.
-  </obsolete>
-  <suffix name="ZeroAccounts" label="Zero accounts"/>
-  <suffix name="OneAccount" label="One account"/>
-  <suffix name="ManyAccounts" label="Two or more accounts"/>
-  <affected-histogram name="MobileFre.SignInChoice.MainIntent"/>
-  <affected-histogram name="MobileFre.SignInChoice.ViewIntent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ModuleIntegrityVerificationType" separator=".">
-  <suffix name="WithoutByteSet"
-      label="The version of the Module Integrity Verifier that doesn't use a
-             hash set to track relocations."/>
-  <suffix name="WithByteSet"
-      label="The version of the Module Integrity Verifier that uses a hash set
-             to track relocations.">
-    <obsolete>
-      Deprecated and removed from code as of 05/2015.
-    </obsolete>
-  </suffix>
-  <affected-histogram name="ModuleIntegrityVerification.BytesModified"/>
-  <affected-histogram name="ModuleIntegrityVerification.Difference"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NatType" separator=".">
-  <suffix name="NoNAT"/>
-  <suffix name="UnknownNAT"/>
-  <suffix name="SymNAT"/>
-  <suffix name="NonSymNAT"/>
-  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent"/>
-  <affected-histogram name="WebRTC.Stun.ResponseLatency"/>
-  <affected-histogram name="WebRTC.Stun.SuccessPercent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NavigationCharacteristic">
-  <suffix name="ExistingRenderer_BeforeUnloadDiscounted"
-      label="Navigation reused an existing renderer process. Time spent in
-             beforeunload subtracted."/>
-  <suffix name="NewRenderer_BeforeUnloadDiscounted"
-      label="Navigation spawned a new renderer process. Time spent in
-             beforeunload subtracted."/>
-  <suffix name="SessionRestored_BeforeUnloadDiscounted"
-      label="Navigation caused by restoring a tab from a previous session
-             (whether from a crash or a continued session) either spawning or
-             reusing a renderer. Time spent in beforeunload subtracted."/>
-  <suffix name="SessionRestored"
-      label="Navigation caused by restoring a tab from a previous session
-             (whether from a crash or a continued session) either spawning or
-             reusing a renderer. Time spent in beforeunload subtracted.">
-    <obsolete>
-      Replaced by the likely named entry. It had a misleading name as it also
-      has the before-unload time discounted.
-    </obsolete>
-  </suffix>
-  <affected-histogram name="Navigation.TimeToCommit"/>
-  <affected-histogram name="Navigation.TimeToURLJobStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NavigationPreloadEnabled">
-  <affected-histogram
-      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
-  <affected-histogram
-      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time_StartWorkerExistingProcess"/>
-  <suffix name="NavigationPreloadEnabled" label="Navigation preload occurred."/>
-  <affected-histogram
-      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NavigationPreloadOrWorkerFirst">
-  <suffix name="SWStartFirst"
-      label="The service worker finished preparing before the navigation
-             preload response arrived."/>
-  <suffix name="NavPreloadFirst"
-      label="The navigation preload response arrived before the service
-             worker finished preparing."/>
-  <affected-histogram name="ServiceWorker.NavigationPreload.ConcurrentTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.BidirectionalStreamExperiment" separator=".">
-  <owner>xunjieli@chromium.org</owner>
-  <suffix name="QUIC" label="Bidirectional streams that use QUIC protocol"/>
-  <suffix name="HTTP2" label="Bidirectional stream that use HTTP2 protocol"/>
-  <affected-histogram name="Net.BidirectionalStream.ReceivedBytes"/>
-  <affected-histogram name="Net.BidirectionalStream.SentBytes"/>
-  <affected-histogram name="Net.BidirectionalStream.TimeToReadEnd"/>
-  <affected-histogram name="Net.BidirectionalStream.TimeToReadStart"/>
-  <affected-histogram name="Net.BidirectionalStream.TimeToSendEnd"/>
-  <affected-histogram name="Net.BidirectionalStream.TimeToSendStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.QuicClientHelloRejectReasons.QuicIsSecureOrNot"
-    separator=".">
-  <owner>rtenneti@chromium.org</owner>
-  <suffix name="Insecure" label="for insecure QUIC.">
-    <obsolete>
-      Deprecated and removed from code as of 10/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="Secure" label="for secure QUIC."/>
-  <suffix name="TooMany"
-      label="for secure QUIC when there were too many rejects."/>
-  <affected-histogram name="Net.QuicClientHelloRejectReasons"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.QuicSession.21CumulativePackets" separator="_">
-  <owner>rch@chromium.org</owner>
-  <suffix name="First21"
-      label="Only the first group of 21 packets in a connection via"/>
-  <suffix name="Some21s"
-      label="After the first 21, this records data for some groups of 21
-             consecutive sequence nmubers, arriving via."/>
-  <affected-histogram name="Net.QuicSession.21CumulativePacketsReceived"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.QuicSession.6PacketPatterns" separator="_">
-  <owner>rch@chromium.org</owner>
-  <suffix name="First6"
-      label="Only the first group of 6 packets in a connection via"/>
-  <suffix name="Some6s"
-      label="After the first 6, this records patterns for some groups of 6
-             consecutive sequence numbers, arriving via."/>
-  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.QuicSession.PacketReceived" separator="_">
-  <owner>rch@chromium.org</owner>
-  <suffix name="Ack"
-      label="Only packets that were received by Chrome as well being part of
-             connections via"/>
-  <suffix name="Nack"
-      label="Only packets that were missed by Chrome as well being part of
-             connections via"/>
-  <suffix name="IsAnAck"
-      label="Only packets that were probably solo ACK packets when recieved
-             by Chrome as well being part of connections via"/>
-  <suffix name="IsNotAck"
-      label="Only packets that were probably NOT solo ACK packets when
-             recieved by Chrome as well being part of connections via"/>
-  <affected-histogram name="Net.QuicSession.PacketReceived"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Net.QuicSession.PacketReceived_CONNECTION_TYPE"
-    separator="_">
-  <owner>rch@chromium.org</owner>
-  <suffix name="CONNECTION_UNKNOWN" label="WiFi are tallied."/>
-  <suffix name="CONNECTION_ETHERNET"
-      label="ethernet are tallied, but this may include connections to a WiFi
-             bridge."/>
-  <suffix name="CONNECTION_WIFI"
-      label="WiFi are tallied, but this may include connections to a mobile
-             hotspot. Also check similar histograms that end in WIFI_802.11*
-             for more details on some platforms."/>
-  <suffix name="CONNECTION_WIFI_ANCIENT"
-      label="802.11 that are no longer standard are tallied."/>
-  <suffix name="CONNECTION_WIFI_802.11a" label="802.11a are tallied."/>
-  <suffix name="CONNECTION_WIFI_802.11b" label="802.11b are tallied."/>
-  <suffix name="CONNECTION_WIFI_802.11g" label="802.11g are tallied."/>
-  <suffix name="CONNECTION_WIFI_802.11n" label="802.11n are tallied."/>
-  <suffix name="CONNECTION_2G" label="mobile 2G are tallied."/>
-  <suffix name="CONNECTION_3G" label="mobile 3G are tallied."/>
-  <suffix name="CONNECTION_4G" label="mobile 4G are tallied."/>
-  <suffix name="CONNECTION_NONE"
-      label="NO(?) network are tallied (should be empty)."/>
-  <suffix name="CONNECTION_BLUETOOTH"
-      label="Bluetooth are tallied, but this may include connections to a
-             mobile hotspot."/>
-  <affected-histogram
-      name="Net.QuicSession.21CumulativePacketsReceived_First21"/>
-  <affected-histogram
-      name="Net.QuicSession.21CumulativePacketsReceived_Some21s"/>
-  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_First6"/>
-  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_Some6s"/>
-  <affected-histogram name="Net.QuicSession.PacketLossRate"/>
-  <affected-histogram name="Net.QuicSession.PacketReceived_Ack"/>
-  <affected-histogram name="Net.QuicSession.PacketReceived_IsAnAck"/>
-  <affected-histogram name="Net.QuicSession.PacketReceived_IsNotAck"/>
-  <affected-histogram name="Net.QuicSession.PacketReceived_Nack"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity" separator=".">
-  <suffix name="53.100B" label="100 bytes of data on port 53."/>
-  <suffix name="53.100B.NoProxy"
-      label="100 bytes of data on port 53 with no proxy."/>
-  <suffix name="53.1K" label="1K bytes of data on port 53."/>
-  <suffix name="53.1K.NoProxy"
-      label="1K bytes of data on port 53 with no proxy."/>
-  <suffix name="53.100B.RTT"
-      label="100 bytes of data on port 53 successfully."/>
-  <suffix name="53.100B.RTT.NoProxy"
-      label="100 bytes of data on port 53 successfully with no proxy."/>
-  <suffix name="53.1K.RTT" label="1K bytes of data on port 53 successfully."/>
-  <suffix name="53.1K.RTT.NoProxy"
-      label="1K bytes of data on port 53 successfully with no proxy."/>
-  <suffix name="587.100B" label="100 bytes of data on port 587."/>
-  <suffix name="587.100B.NoProxy"
-      label="100 bytes of data on port 587 with no proxy."/>
-  <suffix name="587.1K" label="1K bytes of data on port 587."/>
-  <suffix name="587.1K.NoProxy"
-      label="1K bytes of data on port 587 with no proxy."/>
-  <suffix name="587.100B.RTT"
-      label="100 bytes of data on port 587 successfully."/>
-  <suffix name="587.100B.RTT.NoProxy"
-      label="100 bytes of data on port 587 successfully with no proxy."/>
-  <suffix name="587.1K.RTT" label="1K bytes of data on port 587 successfully."/>
-  <suffix name="587.1K.RTT.NoProxy"
-      label="1K bytes of data on port 587 successfully with no proxy."/>
-  <suffix name="6121.100B" label="100 bytes of data on port 6121."/>
-  <suffix name="6121.100B.NoProxy"
-      label="100 bytes of data on port 6121 with no proxy."/>
-  <suffix name="6121.1K" label="1K bytes of data on port 6121."/>
-  <suffix name="6121.1K.NoProxy"
-      label="1K bytes of data on port 6121 with no proxy."/>
-  <suffix name="6121.100B.RTT"
-      label="100 bytes of data on port 6121 successfully."/>
-  <suffix name="6121.100B.RTT.NoProxy"
-      label="100 bytes of data on port 6121 successfully with no proxy."/>
-  <suffix name="6121.1K.RTT"
-      label="1K bytes of data on port 6121 successfully."/>
-  <suffix name="6121.1K.RTT.NoProxy"
-      label="1K bytes of data on port 6121 successfully with no proxy."/>
-  <suffix name="80.100B" label="100 bytes of data on port 80."/>
-  <suffix name="80.100B.NoProxy"
-      label="100 bytes of data on port 80 with no proxy."/>
-  <suffix name="80.1K" label="1K bytes of data on port 80."/>
-  <suffix name="80.1K.NoProxy"
-      label="1K bytes of data on port 80 with no proxy."/>
-  <suffix name="80.100B.RTT"
-      label="100 bytes of data on port 80 successfully."/>
-  <suffix name="80.100B.RTT.NoProxy"
-      label="100 bytes of data on port 80 successfully with no proxy."/>
-  <suffix name="80.1K.RTT" label="1K bytes of data on port 80 successfully."/>
-  <suffix name="80.1K.RTT.NoProxy"
-      label="1K bytes of data on port 80 successfully with no proxy."/>
-  <suffix name="8080.100B" label="100 bytes of data on port 8080."/>
-  <suffix name="8080.100B.NoProxy"
-      label="100 bytes of data on port 8080 with no proxy."/>
-  <suffix name="8080.1K" label="1K bytes of data on port 8080."/>
-  <suffix name="8080.1K.NoProxy"
-      label="1K bytes of data on port 8080 with no proxy."/>
-  <suffix name="8080.100B.RTT"
-      label="100 bytes of data on port 8080 successfully."/>
-  <suffix name="8080.100B.RTT.NoProxy"
-      label="100 bytes of data on port 8080 successfully with no proxy."/>
-  <suffix name="8080.1K.RTT"
-      label="1K bytes of data on port 8080 successfully."/>
-  <suffix name="8080.1K.RTT.NoProxy"
-      label="1K bytes of data on port 8080 successfully with no proxy."/>
-  <affected-histogram name="NetConnectivity.TCP.Status"/>
-  <affected-histogram name="NetConnectivity.TCP.Success"/>
-  <affected-histogram name="NetConnectivity.UDP.PacketLoss"/>
-  <affected-histogram name="NetConnectivity.UDP.PacketLoss6"/>
-  <affected-histogram name="NetConnectivity.UDP.Status"/>
-  <affected-histogram name="NetConnectivity.UDP.Success"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2" separator=".">
-  <suffix name="AcksReceivedFromFirst2Packets" label="2 packets."/>
-  <suffix name="AcksReceivedFromFirst3Packets" label="3 packets."/>
-  <suffix name="AcksReceivedFromFirst4Packets" label="4 packets."/>
-  <suffix name="AcksReceivedFromFirst5Packets" label="5 packets."/>
-  <suffix name="AcksReceivedFromFirst6Packets" label="6 packets."/>
-  <suffix name="AcksReceivedFromFirst7Packets" label="7 packets."/>
-  <suffix name="AcksReceivedFromFirst8Packets" label="8 packets."/>
-  <suffix name="AcksReceivedFromFirst9Packets" label="9 packets."/>
-  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
-  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
-  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
-  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
-  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
-  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
-  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
-  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
-  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
-  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
-  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
-  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
-  <affected-histogram name="NetConnectivity.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2a" separator=".">
-  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
-  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
-  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
-  <affected-histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket"/>
-  <affected-histogram name="NetConnectivity2.Sent21.GotAnAck"/>
-  <affected-histogram name="NetConnectivity2.Sent21.PacketsSent"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2b" separator=".">
-  <suffix name="AcksReceivedFromFirst2Packets.6121.100B"
-      label="2 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst3Packets.6121.100B"
-      label="3 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst4Packets.6121.100B"
-      label="4 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst5Packets.6121.100B"
-      label="5 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst6Packets.6121.100B"
-      label="6 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst7Packets.6121.100B"
-      label="7 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst8Packets.6121.100B"
-      label="8 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst9Packets.6121.100B"
-      label="9 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst10Packets.6121.100B"
-      label="10 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst11Packets.6121.100B"
-      label="11 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst12Packets.6121.100B"
-      label="12 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst13Packets.6121.100B"
-      label="13 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst14Packets.6121.100B"
-      label="14 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst15Packets.6121.100B"
-      label="15 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst16Packets.6121.100B"
-      label="16 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst17Packets.6121.100B"
-      label="17 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst18Packets.6121.100B"
-      label="18 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst19Packets.6121.100B"
-      label="19 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst20Packets.6121.100B"
-      label="20 packets. 100 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst21Packets.6121.100B"
-      label="21 packets. 100 bytes of data is sent on port 6121."/>
-  <affected-histogram name="NetConnectivity2.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2c" separator=".">
-  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
-  <suffix name="6121.100B.NoProxy"
-      label="100 bytes of data is sent on port 6121 with no proxy."/>
-  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
-  <suffix name="6121.500B.NoProxy"
-      label="500 bytes of data is sent on port 6121 with no proxy."/>
-  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
-  <suffix name="6121.1K.NoProxy"
-      label="1K bytes of data is sent on port 6121 with no proxy."/>
-  <affected-histogram name="NetConnectivity2.Send6.PacketsSent"/>
-  <affected-histogram name="NetConnectivity2.Send6.SeriesAcked"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2d" separator=".">
-  <suffix name="AcksReceivedFromFirst2Packets.6121.500B"
-      label="2 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst3Packets.6121.500B"
-      label="3 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst4Packets.6121.500B"
-      label="4 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst5Packets.6121.500B"
-      label="5 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst6Packets.6121.500B"
-      label="6 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst7Packets.6121.500B"
-      label="7 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst8Packets.6121.500B"
-      label="8 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst9Packets.6121.500B"
-      label="9 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst10Packets.6121.500B"
-      label="10 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst11Packets.6121.500B"
-      label="11 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst12Packets.6121.500B"
-      label="12 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst13Packets.6121.500B"
-      label="13 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst14Packets.6121.500B"
-      label="14 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst15Packets.6121.500B"
-      label="15 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst16Packets.6121.500B"
-      label="16 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst17Packets.6121.500B"
-      label="17 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst18Packets.6121.500B"
-      label="18 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst19Packets.6121.500B"
-      label="19 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst20Packets.6121.500B"
-      label="20 packets. 500 bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst21Packets.6121.500B"
-      label="21 packets. 500 bytes of data is sent on port 6121."/>
-  <affected-histogram name="NetConnectivity2.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity2e" separator=".">
-  <suffix name="AcksReceivedFromFirst2Packets.6121.1K"
-      label="2 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst3Packets.6121.1K"
-      label="3 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst4Packets.6121.1K"
-      label="4 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst5Packets.6121.1K"
-      label="5 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst6Packets.6121.1K"
-      label="6 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst7Packets.6121.1K"
-      label="7 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst8Packets.6121.1K"
-      label="8 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst9Packets.6121.1K"
-      label="9 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst10Packets.6121.1K"
-      label="10 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst11Packets.6121.1K"
-      label="11 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst12Packets.6121.1K"
-      label="12 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst13Packets.6121.1K"
-      label="13 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst14Packets.6121.1K"
-      label="14 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst15Packets.6121.1K"
-      label="15 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst16Packets.6121.1K"
-      label="16 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst17Packets.6121.1K"
-      label="17 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst18Packets.6121.1K"
-      label="18 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst19Packets.6121.1K"
-      label="19 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst20Packets.6121.1K"
-      label="20 packets. 1K bytes of data is sent on port 6121."/>
-  <suffix name="AcksReceivedFromFirst21Packets.6121.1K"
-      label="21 packets. 1K bytes of data is sent on port 6121."/>
-  <affected-histogram name="NetConnectivity2.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3a" separator=".">
-  <suffix name="NonPacedPacket"
-      label="In this histogram results are only shown if at least two packets
-             were ACKed in the Startup Test. Packets were sent as rapidly as
-             possible."/>
-  <suffix name="PacedPacket"
-      label="In this histogram results are only shown if at least two packets
-             were ACKed in the Startup Test. Packets are sent at equal
-             intervals. The interval is selected to match the bandwidth
-             discovered during the StartPacket test."/>
-  <suffix name="StartPacket"
-      label="Packets are sent as rapidly as possible, just after successfully
-             sending an UMA upload. Each packet was numbered, as was its ACK
-             sent back by Google. If no packets (of the 21) were ever ACKed,
-             then the port is assumed to be blocked, and no data is recorded
-             in this histogram."/>
-  <affected-histogram name="NetConnectivity3"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3aa" separator=".">
-  <suffix name="Sent21"
-      label="This histogram shows the number of echo responses received from
-             the first"/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3AckReceivedForNthPacket"
-    separator=".">
-  <suffix name="Sent21.AckReceivedForNthPacket"
-      label="Each packet was numbered, as was its ACK sent back by Google.
-             This histogram records, for each packet number, how often we
-             received an ACK for that packet."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3AcksReceivedFromFirst" separator=".">
-  <suffix name="AcksReceivedFromFirst02Packets" label="2 packets."/>
-  <suffix name="AcksReceivedFromFirst03Packets" label="3 packets."/>
-  <suffix name="AcksReceivedFromFirst04Packets" label="4 packets."/>
-  <suffix name="AcksReceivedFromFirst05Packets" label="5 packets."/>
-  <suffix name="AcksReceivedFromFirst06Packets" label="6 packets."/>
-  <suffix name="AcksReceivedFromFirst07Packets" label="7 packets."/>
-  <suffix name="AcksReceivedFromFirst08Packets" label="8 packets."/>
-  <suffix name="AcksReceivedFromFirst09Packets" label="9 packets."/>
-  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
-  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
-  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
-  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
-  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
-  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
-  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
-  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
-  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
-  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
-  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
-  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3GotAnAck" separator=".">
-  <suffix name="Sent21.GotAnAck"
-      label="The histogram shows if we ever got an ACK for a packet in our
-             series of 21."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3PacketDelay1" separator=".">
-  <suffix name="Sent21.443"
-      label="This histogram shows the difference between the time when we
-             have received 1st byte from the server and the last time when we
-             have received data from the server on port 443."/>
-  <suffix name="Sent21.6121"
-      label="This histogram shows the difference between the time when we
-             have received 1st byte from the server and the last time when we
-             have received data from the server on port 6121."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3PacketDelay2" separator=".">
-  <suffix name="443.100B.PacketDelay"
-      label="100 bytes of data is sent on port 443."/>
-  <suffix name="443.1200B.PacketDelay"
-      label="1200 bytes of data is sent on port 443."/>
-  <suffix name="443.500B.PacketDelay"
-      label="500 bytes of data is sent on port 443."/>
-  <suffix name="6121.100B.PacketDelay"
-      label="100 bytes of data is sent on port 6121."/>
-  <suffix name="6121.1200B.PacketDelay"
-      label="1200 bytes of data is sent on port 6121."/>
-  <suffix name="6121.500B.PacketDelay"
-      label="500 bytes of data is sent on port 6121."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3PacketRTT" separator=".">
-  <suffix name="Sent21.Success.RTT" label="The histogram shows the RTT for"/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3Packets" separator=".">
-  <suffix name="Packet01" label="1st packet."/>
-  <suffix name="Packet02" label="2nd packet."/>
-  <suffix name="Packet03" label="3rd packet."/>
-  <suffix name="Packet10" label="10th packet."/>
-  <suffix name="Packet20" label="20th packet."/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3PacketsSent" separator=".">
-  <suffix name="Sent21.PacketsSent"
-      label="This histogram records how many packets (out of 21 attempted)
-             were sent to the server via UDP."/>
-  <suffix name="Send6.SeriesAcked"
-      label="Chrome sends 6 UDP packets in a row to test to see if there is a
-             probabalistic dependency in packet loss for consecutive packets.
-             We record a bit vector of packets received, where the least
-             significant bit is a 1 if the first packet was received, etc.
-             For example, if all packets other than packet 2 and 4 are
-             responded to, then we'd have a sample (in binary) of 110101B, or
-             53."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket"/>
-  <affected-histogram name="NetConnectivity3.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3PacketsSentBytes" separator=".">
-  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
-  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
-  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
-  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
-  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
-  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AckReceivedForNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.PacketsSent"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AckReceivedForNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.PacketsSent"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AckReceivedForNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.PacketsSent"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet20"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity3Send6Acked" separator=".">
-  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
-  <suffix name="443.100B.NoProxy"
-      label="100 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
-  <suffix name="443.500B.NoProxy"
-      label="500 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
-  <suffix name="443.1200B.NoProxy"
-      label="1200 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
-  <suffix name="6121.100B.NoProxy"
-      label="100 bytes of data is sent on port 6121 with no proxy."/>
-  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
-  <suffix name="6121.500B.NoProxy"
-      label="500 bytes of data is sent on port 6121 with no proxy."/>
-  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
-  <suffix name="6121.1200B.NoProxy"
-      label="1200 bytes of data is sent on port 6121 with no proxy."/>
-  <affected-histogram name="NetConnectivity3.NonPacedPacket.Send6.SeriesAcked"/>
-  <affected-histogram name="NetConnectivity3.PacedPacket.Send6.SeriesAcked"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent"/>
-  <affected-histogram name="NetConnectivity3.StartPacket.Send6.SeriesAcked"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4a" separator=".">
-  <suffix name="NATBind.Sent2"
-      label="Two packets were sent spreading over a random period, to test if
-             the NAT dropped the binding. Afterwords, an extra (short) packet
-             was sent with renewed NAT binding to test whether the network
-             that was used to deliver the first packet is still connected.
-             Results are only shown in this histogram if at least ten packets
-             were received in the StartPacket test."/>
-  <suffix name="NonPacedPacket"
-      label="21 Packets were sent as rapidly as possible. Results are only
-             shown in this histogram if at least two packets were received in
-             the StartPacket Test."/>
-  <suffix name="PacedPacket"
-      label="21 Packets were sent at equal intervals, which were selected to
-             match the bandwidth discovered during the StartPacket test.
-             Results are only shown in this histogram if at least two packets
-             were received in the StartPacket Test."/>
-  <suffix name="StartPacket"
-      label="21 Packets were sent as rapidly as possible, just after the
-             client successfully sent a UMA upload. Each packet was numbered
-             when it was sent by Google."/>
-  <affected-histogram name="NetConnectivity4"/>
-  <affected-histogram name="NetConnectivity5"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4NATBindPacketReceives" separator=".">
-  <suffix name="Bind.Failure"
-      label="Only when the second packet never arrived (we wait for 10 extra
-             seconds) and the first and the extra (short) packets arrived did
-             we record the duration in seconds between the sendings of the
-             first two packets in this histogram."/>
-  <suffix name="Bind.Success"
-      label="Only when all three packets including the extra (short) packet
-             arrived did we record the duration in seconds between the
-             sendings of the first two packets in this histogram."/>
-  <suffix name="Connectivity.Failure"
-      label="Only when the extra (short) packet (with renewed NAT binding)
-             never arrived (we wait for 10 extra seconds) did we record the
-             duration in seconds between the sendings of the first two
-             packets in this histogram."/>
-  <suffix name="Connectivity.Success"
-      label="Only when the extra (short) packet arrived did we record the
-             duration in seconds between the sendings of the first two
-             packets in this histogram."/>
-  <suffix name="SendToLastRecvDelay"
-      label="This histogram records the time duration (in milliseconds)
-             between the client sending the request and the receiving of the
-             second packet sent from the server, excluding the idle time
-             between sendings of the first two packets. Results are only
-             shown if the first two packets are both received."/>
-  <affected-histogram name="NetConnectivity4.NATBind.Sent2"/>
-  <affected-histogram name="NetConnectivity5.NATBind.Sent2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketFirst6" separator=".">
-  <suffix name="First6.SeriesRecv"
-      label="This histogram records a bit vector of the first 6 packets sent,
-             where the least significant bit is a 1 if the first packet was
-             received, etc. For example, if all packets other than packet 2
-             and 4 are received, then we'd have a sample (in binary) of
-             110101B, or 53."/>
-  <suffix name="Sent21"
-      label="This histogram shows the number of packets received from the
-             first"/>
-  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket"/>
-  <affected-histogram name="NetConnectivity4.StartPacket"/>
-  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket"/>
-  <affected-histogram name="NetConnectivity5.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketReceives" separator=".">
-  <suffix name="NumRecvFromFirst01Packets" label="1 packet."/>
-  <suffix name="NumRecvFromFirst02Packets" label="2 packets."/>
-  <suffix name="NumRecvFromFirst03Packets" label="3 packets."/>
-  <suffix name="NumRecvFromFirst04Packets" label="4 packets."/>
-  <suffix name="NumRecvFromFirst05Packets" label="5 packets."/>
-  <suffix name="NumRecvFromFirst06Packets" label="6 packets."/>
-  <suffix name="NumRecvFromFirst07Packets" label="7 packets."/>
-  <suffix name="NumRecvFromFirst08Packets" label="8 packets."/>
-  <suffix name="NumRecvFromFirst09Packets" label="9 packets."/>
-  <suffix name="NumRecvFromFirst10Packets" label="10 packets."/>
-  <suffix name="NumRecvFromFirst11Packets" label="11 packets."/>
-  <suffix name="NumRecvFromFirst12Packets" label="12 packets."/>
-  <suffix name="NumRecvFromFirst13Packets" label="13 packets."/>
-  <suffix name="NumRecvFromFirst14Packets" label="14 packets."/>
-  <suffix name="NumRecvFromFirst15Packets" label="15 packets."/>
-  <suffix name="NumRecvFromFirst16Packets" label="16 packets."/>
-  <suffix name="NumRecvFromFirst17Packets" label="17 packets."/>
-  <suffix name="NumRecvFromFirst18Packets" label="18 packets."/>
-  <suffix name="NumRecvFromFirst19Packets" label="19 packets."/>
-  <suffix name="NumRecvFromFirst20Packets" label="20 packets."/>
-  <suffix name="NumRecvFromFirst21Packets" label="21 packets."/>
-  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketRTT" separator=".">
-  <suffix name="Sent21.GotAPacket"
-      label="The histogram shows if we ever got at least one packet in our
-             series of 21."/>
-  <suffix name="Sent21.PacketDelay"
-      label="The histogram shows the average inter-arrival time between every
-             two consecutive packets we receive in our series of 21
-             multiplied by 20 (so this is essentially the time duration
-             between the first and the last received packets)."/>
-  <suffix name="Sent21.PacketsRecv"
-      label="The histogram shows how many packets we receive in our series of
-             21."/>
-  <suffix name="Sent21.RecvNthPacket"
-      label="Each packet was numbered when it was sent by Google. This
-             histogram records, for each packet number, how often we received
-             that packet."/>
-  <suffix name="Sent21.SendToLastRecvDelay"
-      label="This histogram records the time duration between the client
-             sending the request and the receiving of the last packet sent
-             from the server, excluding the total pacing time requested by
-             the client. Results are only shown if at least two packets are
-             received."/>
-  <suffix name="Sent21.Success.RTT"
-      label="The histogram shows the RTT for the"/>
-  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket"/>
-  <affected-histogram name="NetConnectivity4.StartPacket"/>
-  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket"/>
-  <affected-histogram name="NetConnectivity5.StartPacket"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketRTTSeries" separator=".">
-  <suffix name="Packet01" label="1st packet."/>
-  <suffix name="Packet02" label="2nd packet."/>
-  <suffix name="Packet03" label="3rd packet."/>
-  <suffix name="Packet10" label="10th packet."/>
-  <suffix name="Packet20" label="20th packet."/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.Success.RTT"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.Success.RTT"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.Success.RTT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketsAll" separator=".">
-  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
-  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
-  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
-  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
-  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
-  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
-  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Failure"/>
-  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Success"/>
-  <affected-histogram
-      name="NetConnectivity4.NATBind.Sent2.Connectivity.Failure"/>
-  <affected-histogram
-      name="NetConnectivity4.NATBind.Sent2.Connectivity.Success"/>
-  <affected-histogram
-      name="NetConnectivity4.NATBind.Sent2.SendToLastRecvDelay"/>
-  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.PacketDelay"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.PacketsRecv"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketDelay"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketsRecv"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketDelay"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketsRecv"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Failure"/>
-  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Success"/>
-  <affected-histogram
-      name="NetConnectivity5.NATBind.Sent2.Connectivity.Failure"/>
-  <affected-histogram
-      name="NetConnectivity5.NATBind.Sent2.Connectivity.Success"/>
-  <affected-histogram
-      name="NetConnectivity5.NATBind.Sent2.SendToLastRecvDelay"/>
-  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.PacketDelay"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.PacketsRecv"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketDelay"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketsRecv"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet20"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.GotAPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketDelay"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketsRecv"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.RecvNthPacket"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.SendToLastRecvDelay"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet01"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet02"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet03"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet10"/>
-  <affected-histogram
-      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet20"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketSizeTest" separator=".">
-  <suffix name="PacketSizeTest.Connectivity.Failure"
-      label="This histogram records the size of the packet size that was not
-             received from the server."/>
-  <suffix name="PacketSizeTest.Connectivity.Success"
-      label="This histogram records the size of the packet size that was
-             received from the server."/>
-  <affected-histogram name="NetConnectivity4"/>
-  <affected-histogram name="NetConnectivity5"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4PacketSizeTestPort" separator=".">
-  <suffix name="443" label="Packet is sent on port 443."/>
-  <suffix name="80" label="Packet is sent on port 80."/>
-  <affected-histogram
-      name="NetConnectivity4.PacketSizeTest.Connectivity.Failure"/>
-  <affected-histogram
-      name="NetConnectivity4.PacketSizeTest.Connectivity.Success"/>
-  <affected-histogram
-      name="NetConnectivity5.PacketSizeTest.Connectivity.Failure"/>
-  <affected-histogram
-      name="NetConnectivity5.PacketSizeTest.Connectivity.Success"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetConnectivity4SeriesRecv" separator=".">
-  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
-  <suffix name="443.100B.NoProxy"
-      label="100 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
-  <suffix name="443.1200B.NoProxy"
-      label="1200 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
-  <suffix name="443.500B.NoProxy"
-      label="500 bytes of data is sent on port 443 with no proxy."/>
-  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
-  <suffix name="80.100B.NoProxy"
-      label="100 bytes of data is sent on port 80 with no proxy."/>
-  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
-  <suffix name="80.1200B.NoProxy"
-      label="1200 bytes of data is sent on port 80 with no proxy."/>
-  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
-  <suffix name="80.500B.NoProxy"
-      label="500 bytes of data is sent on port 80 with no proxy."/>
-  <affected-histogram name="NetConnectivity4.NonPacedPacket.First6.SeriesRecv"/>
-  <affected-histogram name="NetConnectivity4.PacedPacket.First6.SeriesRecv"/>
-  <affected-histogram name="NetConnectivity4.StartPacket.First6.SeriesRecv"/>
-  <affected-histogram name="NetConnectivity5.NonPacedPacket.First6.SeriesRecv"/>
-  <affected-histogram name="NetConnectivity5.PacedPacket.First6.SeriesRecv"/>
-  <affected-histogram name="NetConnectivity5.StartPacket.First6.SeriesRecv"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetErrorCodeSubtype" separator="." ordering="prefix">
-  <owner>csharrison@chromium.org</owner>
-  <suffix name="NTP.Google" label="The Google web NTP"/>
-  <suffix name="NTP.ThirdParty"
-      label="The NTP served by a third party (e.g. Bing)"/>
-  <suffix name="NTP.Local" label="The local NTP"/>
-  <affected-histogram name="Net.RequestTime2.ErrAborted"/>
-  <affected-histogram name="Net.RequestTime2.Success"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetProxyResolverExecutionTime">
-  <suffix name="UrlOver2K" label="URL length was over 2K"/>
-  <suffix name="UrlOver4K" label="URL length was over 4K"/>
-  <suffix name="UrlOver8K" label="URL length was over 8K"/>
-  <suffix name="UrlOver128K" label="URL length was over 128K"/>
-  <affected-histogram name="Net.ProxyResolver.ExecutionTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetQuicDiskCacheBackend" separator=".">
-  <owner>rtenneti@chromium.org</owner>
-  <suffix name="NoBackend" label="DiskCache didn't have a backend"/>
-  <suffix name="DiskCache" label="DiskCache backend is using disk cache."/>
-  <suffix name="MemoryCache" label="DiskCache backend is using memory cache."/>
-  <suffix name="PropertiesBasedCache" label="Preferences based cache is used."/>
-  <suffix name="WaitForDataReady"
-      label="Tracks the last failure reason until WaitForDataReady or its
-             callback is executed. This is recorded when data is ready in
-             WaitForDataReady or when the callback is executed"/>
-  <affected-histogram name="Net.QuicDiskCache.APICall"/>
-  <affected-histogram name="Net.QuicDiskCache.FailureReason"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetRequestTime" separator=".">
-  <suffix name="ErrAborted" label="Request aborted"/>
-  <suffix name="ErrConnectionReset" label="Connection reset"/>
-  <suffix name="ErrConnectionTimedOut" label="Request connection timed out"/>
-  <suffix name="ErrInternetDisconnected" label="Internet disconnected"/>
-  <suffix name="ErrNameNotResolved" label="Request domain not resolved"/>
-  <suffix name="ErrTimedOut" label="Request timed out"/>
-  <suffix name="MiscError" label="Uncategorized error"/>
-  <suffix name="Success" label="Success"/>
-  <affected-histogram name="Net.RequestTime"/>
-  <affected-histogram name="Net.RequestTime2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NetworkErrors" separator=".">
-  <suffix name="AuthExtTimeout" label="with the last error AuthExtTimeout"/>
-  <suffix name="Offline" label="with the last error Offline"/>
-  <suffix name="Portal" label="with the last error Portal"/>
-  <suffix name="Proxy" label="with the last error Proxy"/>
-  <affected-histogram name="OOBE.ErrorScreensTime.Enrollment"/>
-  <affected-histogram name="OOBE.ErrorScreensTime.Signin"/>
-  <affected-histogram name="OOBE.ErrorScreensTime.Supervised"/>
-  <affected-histogram name="OOBE.ErrorScreensTime.Update"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NewTabPageIconTypes" separator=".">
-  <suffix name="IconsColor"
-      label="Icons using a fallback color (favicon resolution too low)."/>
-  <suffix name="IconsGray"
-      label="Icons using a gray color (no favicon available)."/>
-  <suffix name="IconsReal"
-      label="Icons using an actual icon published by the site."/>
-  <affected-histogram name="NewTabPage.MostVisited"/>
-  <affected-histogram name="NewTabPage.SuggestionsImpression"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NewTabPageProviders" separator=".">
-  <suffix name="client" label="Suggestions coming from the client."/>
-  <suffix name="server" label="Suggestions coming from the server."/>
-  <suffix name="popular" label="Non-personalized, popular suggestions."/>
-  <suffix name="whitelist"
-      label="Installed whitelist entry point suggestions."/>
-  <suffix name="client0">
-    <obsolete>
-      Hasn't been used for a while, as of 2016-07.
-    </obsolete>
-  </suffix>
-  <suffix name="server0">
-    <obsolete>
-      Hasn't been used for a while, as of 2016-07.
-    </obsolete>
-  </suffix>
-  <suffix name="server8">
-    <obsolete>
-      Not used anymore as of 2016-07.
-    </obsolete>
-  </suffix>
-  <suffix name="server9">
-    <obsolete>
-      Has never been used.
-    </obsolete>
-  </suffix>
-  <suffix name="server10">
-    <obsolete>
-      Has never been used.
-    </obsolete>
-  </suffix>
-  <suffix name="server11">
-    <obsolete>
-      Has never been used.
-    </obsolete>
-  </suffix>
-  <affected-histogram name="NewTabPage.MostVisited"/>
-  <affected-histogram name="NewTabPage.SuggestionsImpression"/>
-  <affected-histogram name="NewTabPage.TileType"/>
-  <affected-histogram name="NewTabPage.TileTypeClicked"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NewTabPageTimings" separator=".">
-  <suffix name="MostLikely" label="Loaded server-side suggestions."/>
-  <suffix name="MostVisited" label="Loaded client-side suggestions."/>
-  <suffix name="LocalNTP" label="Loaded local NTP"/>
-  <suffix name="Web" label="Loaded server-side NTP"/>
-  <suffix name="Startup" label="NTP loaded during browser startup."/>
-  <suffix name="NewTab" label="NTP loaded on a new tab."/>
-  <affected-histogram name="NewTabPage.LoadTime"/>
-  <affected-histogram name="NewTabPage.TilesReceivedTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NextTabState">
-  <suffix name="Active"
-      label="For a tab active which is shown foreground in a browser window."/>
-  <suffix name="Inactive"
-      label="For tabs in background and not shown to user."/>
-  <suffix name="Detached"
-      label="For a tab that is being dragged by user to outside of the
-             browser window."/>
-  <suffix name="Closed" label="For a tab that is about to be closed."/>
-  <affected-histogram name="Tabs.StateTransfer.Time_Active"/>
-  <affected-histogram name="Tabs.StateTransfer.Time_Detached"/>
-  <affected-histogram name="Tabs.StateTransfer.Time_Inactive"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NotificationDisplayExperiment">
-  <suffix name="Fullscreen.Shown"
-      label="A notification sent by a fullscreen app or webpage that is
-             displayed."/>
-  <suffix name="Fullscreen.Suppressed"
-      label="A notification sent by a fullscreen app or webpage that is not
-             displayed."/>
-  <suffix name="Windowed"
-      label="A notification sent by a non-fullscreen app or webpage."/>
-  <affected-histogram name="Notifications.Display"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NotificationImageTypes" separator=".">
-  <suffix name="ActionIcon"/>
-  <suffix name="Badge"/>
-  <suffix name="Icon"/>
-  <suffix name="Image"/>
-  <affected-histogram name="Notifications.LoadFailTime"/>
-  <affected-histogram name="Notifications.LoadFileSize"/>
-  <affected-histogram name="Notifications.LoadFinishTime"/>
-  <affected-histogram name="Notifications.LoadScaleDownTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.Accuracy.Metric.Accuracy.DiffPositiveOrNegative"
-    separator=".">
-  <suffix name="Negative"
-      label="Estimate of the metric was lower than observed metric"/>
-  <suffix name="Positive"
-      label="Estimate of the metric was higher than observed metric"/>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"/>
-  <affected-histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff"/>
-  <affected-histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff"/>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"/>
-  <affected-histogram
-      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"/>
-  <affected-histogram
-      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.Accuracy.Metric.AccuracyRecordingIntervals"
-    separator=".">
-  <suffix name="15"
-      label="Recorded approximately 15 seconds after navigation start"/>
-  <suffix name="30"
-      label="Recorded approximately 30 seconds after navigation start">
-    <obsolete>
-      Deprecated as of 01/2017.
-    </obsolete>
-  </suffix>
-  <suffix name="60"
-      label="Recorded approximately 60 seconds after navigation start">
-    <obsolete>
-      Deprecated as of 01/2017.
-    </obsolete>
-  </suffix>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
-  <affected-histogram
-      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
-  <affected-histogram
-      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
-</histogram_suffixes>
-
-<histogram_suffixes
-    name="NQE.Accuracy.Metric.EffectiveConnectionType.ObservedIntervals"
-    separator=".">
-  <suffix name="Unknown"
-      label="Observed effective connection type was Unknown"/>
-  <suffix name="Offline"
-      label="Observed effective connection type was Offline"/>
-  <suffix name="Slow2G" label="Observed effective connection type was Slow2G"/>
-  <suffix name="2G" label="Observed effective connection type was 2G"/>
-  <suffix name="3G" label="Observed effective connection type was 3G"/>
-  <suffix name="4G" label="Observed effective connection type was 4G"/>
-  <suffix name="Broadband"
-      label="Observed effective connection type was Broadband"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.Accuracy.RTT.ObservedIntervals" separator=".">
-  <suffix name="0_20"
-      label="Observed metric was between 0 and 20 (inclusive) units"/>
-  <suffix name="20_60"
-      label="Observed metric was between 20 and 60 (inclusive) units"/>
-  <suffix name="60_140"
-      label="Observed metric was between 60 and 140 (inclusive) units"/>
-  <suffix name="140_300"
-      label="Observed metric was between 140 and 300 (inclusive) units"/>
-  <suffix name="300_620"
-      label="Observed metric was between 300 and 620 (inclusive) units"/>
-  <suffix name="620_1260"
-      label="Observed metric was between 620 and 1260 (inclusive) units"/>
-  <suffix name="1260_2540"
-      label="Observed metric was between 1260 and 2540 (inclusive) units"/>
-  <suffix name="2540_5100"
-      label="Observed metric was between 2540 and 51000 (inclusive) units"/>
-  <suffix name="5100_Infinity"
-      label="Observed metric was greater than 5100 (inclusive) units"/>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.30">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.60">
-    <obsolete>
-      Deprecated 01/2017.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
-  <affected-histogram
-      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
-  <affected-histogram
-      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
-  <suffix name="Percentile0" label="0th percentile"/>
-  <suffix name="Percentile10" label="10th percentile"/>
-  <suffix name="Percentile50" label="50th percentile"/>
-  <suffix name="Percentile90" label="90th percentile"/>
-  <suffix name="Percentile100" label="100th percentile"/>
-  <affected-histogram name="NQE.RTT"/>
-  <affected-histogram name="NQE.TransportRTT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
-  <suffix name="Percentile50" label="50th percentile"/>
-  <affected-histogram name="NQE.MainFrame.Kbps"/>
-  <affected-histogram name="NQE.MainFrame.RTT"/>
-  <affected-histogram name="NQE.MainFrame.TransportRTT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.EstimateAvailable.MainFrame.Histograms"
-    separator=".">
-  <suffix name="Kbps"
-      label="Records availability of the downstream throughput estimate."/>
-  <suffix name="RTT" label="Records availability of the HTTP RTT estimate."/>
-  <suffix name="TransportRTT"
-      label="Records availability of the transport RTT estimate."/>
-  <affected-histogram name="NQE.EstimateAvailable.MainFrame"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NQE.NetworkTypes" separator=".">
-  <suffix name="Unknown" label="On Unknown network"/>
-  <suffix name="Ethernet" label="On Ethernet network"/>
-  <suffix name="WiFi" label="On WiFi network"/>
-  <suffix name="2G" label="On 2G network"/>
-  <suffix name="3G" label="On 3G Network"/>
-  <suffix name="4G" label="On 4G network"/>
-  <suffix name="None" label="With no detected network"/>
-  <suffix name="Bluetooth" label="On Bluetooth network"/>
-  <affected-histogram name="NQE.FastestRTT"/>
-  <affected-histogram name="NQE.MainFrame.EffectiveConnectionType"/>
-  <affected-histogram name="NQE.MainFrame.Kbps.Percentile50"/>
-  <affected-histogram name="NQE.MainFrame.RTT.Percentile50"/>
-  <affected-histogram name="NQE.MainFrame.TransportRTT.Percentile50"/>
-  <affected-histogram name="NQE.PeakKbps"/>
-  <affected-histogram name="NQE.RTT.Percentile0"/>
-  <affected-histogram name="NQE.RTT.Percentile10"/>
-  <affected-histogram name="NQE.RTT.Percentile100"/>
-  <affected-histogram name="NQE.RTT.Percentile50"/>
-  <affected-histogram name="NQE.RTT.Percentile90"/>
-  <affected-histogram name="NQE.TransportRTT.Percentile0"/>
-  <affected-histogram name="NQE.TransportRTT.Percentile10"/>
-  <affected-histogram name="NQE.TransportRTT.Percentile100"/>
-  <affected-histogram name="NQE.TransportRTT.Percentile50"/>
-  <affected-histogram name="NQE.TransportRTT.Percentile90"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="NumLayersBucket" separator=".">
-  <suffix name="0" label="Layer count bucket [0, 10)"/>
-  <suffix name="1" label="Layer count bucket [10, 30)"/>
-  <suffix name="2" label="Layer count bucket [30, 70)"/>
-  <suffix name="3" label="Layer count bucket [70, 150)"/>
-  <suffix name="4" label="Layer count bucket [150, infinity)"/>
-  <affected-histogram name="Compositing.Browser.LayersUpdateTime"/>
-  <affected-histogram name="Compositing.Renderer.LayersUpdateTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OffDomainInclusionAbortReason" separator=".">
-  <obsolete>
-    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
-  </obsolete>
-  <suffix name="EmptyMainFrameURL" label="The main frame URL was empty."/>
-  <suffix name="HistoryLookupFailed"
-      label="The lookup to the HistoryService failed."/>
-  <suffix name="Incognito"
-      label="The profile associated with the frame under analysis is an
-             incognito profile."/>
-  <suffix name="NoHistoryService"
-      label="There was no HistoryService associated with the profile of the
-             frame under analysis (this can happen seldomly on startup for
-             early net requests, or on shutdown by the asynchronous nature of
-             the analysis, but shouldn't be common)."/>
-  <suffix name="NoProfile"
-      label="The profile associated with the frame under analysis couldn't be
-             resolved (expected to happen at a low frequency by the
-             asynchronous nature of the analysis)."/>
-  <affected-histogram name="SBOffDomainInclusion.Abort"/>
-  <affected-histogram name="SBOffDomainInclusion2.Abort"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OfflinePagesNamespace" separator=".">
-  <suffix name="bookmark" label="Offline bookmark cache"/>
-  <suffix name="last_n" label="Offline recent pages"/>
-  <suffix name="async_loading" label="Offline async loaded pages"/>
-  <suffix name="custom_tabs" label="Offline custom tabs"/>
-  <suffix name="download" label="Offline downloaded pages"/>
-  <suffix name="ntp_suggestions" label="Offline ntp suggestions"/>
-  <affected-histogram
-      name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"/>
-  <affected-histogram name="OfflinePages.Background.OfflinerRequestStatus"/>
-  <affected-histogram name="OfflinePages.Background.TimeToCanceled"/>
-  <affected-histogram name="OfflinePages.Background.TimeToSaved"/>
-  <affected-histogram name="OfflinePages.Background.TimeToStart"/>
-  <affected-histogram name="OfflinePages.Background.TimeToStart.Svelte"/>
-  <affected-histogram name="OfflinePages.DeletePage.AccessCount"/>
-  <affected-histogram name="OfflinePages.DeletePage.LastOpenToCreated"/>
-  <affected-histogram name="OfflinePages.DeletePage.PageSize"/>
-  <affected-histogram name="OfflinePages.DeletePage.TimeSinceLastOpen"/>
-  <affected-histogram name="OfflinePages.ExpirePage.PageLifetime"/>
-  <affected-histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess"/>
-  <affected-histogram name="OfflinePages.FirstOpenSinceCreated"/>
-  <affected-histogram name="OfflinePages.OpenSinceLastOpen"/>
-  <affected-histogram name="OfflinePages.PageLifetime"/>
-  <affected-histogram name="OfflinePages.PageSize"/>
-  <affected-histogram name="OfflinePages.SavePageResult"/>
-  <affected-histogram name="OfflinePages.SavePageTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OmniboxProviderTime" separator=".">
-  <suffix name="Bookmark"/>
-  <suffix name="Builtin"/>
-  <suffix name="Contact"/>
-  <suffix name="ExtensionApp"/>
-  <suffix name="HistoryContents"/>
-  <suffix name="HistoryQuick"/>
-  <suffix name="HistoryURL"/>
-  <suffix name="Keyword"/>
-  <suffix name="Search"/>
-  <suffix name="Shortcuts"/>
-  <suffix name="ZeroSuggest"/>
-  <affected-histogram name="Omnibox.ProviderTime"/>
-  <affected-histogram name="Omnibox.ProviderTime2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OobeScreenName" separator=".">
-  <suffix name="Eula"/>
-  <suffix name="Hid-detection"/>
-  <suffix name="Image"/>
-  <suffix name="Network"/>
-  <suffix name="Update"/>
-  <suffix name="Wrong-hwid"/>
-  <affected-histogram name="OOBE.StepCompletionTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OtherActivityProcesses" separator=".">
-  <suffix name="gpu-process"/>
-  <suffix name="renderer"/>
-  <suffix name="setup"/>
-  <affected-histogram name="UMA.Histograms.Activity"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="OverlappedReadImpact">
-  <obsolete>
-    Experiments no longer active.
-  </obsolete>
-  <suffix name="OverlappedReadDisabled" label="Non-blocking reads"/>
-  <suffix name="OverlappedReadEnabled" label="Default, async reads"/>
-  <affected-histogram name="Net.HttpJob.TotalTime"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.LoadType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadBackgrounded" separator=".">
-  <obsolete>
-    Deprecated in favor of PageLoadBackgrounded2.
-  </obsolete>
-  <suffix name="BG"
-      label="Event occurred at least partially in the background"/>
-  <affected-histogram
-      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadBackgrounded2" separator=".">
-  <suffix name="Background"
-      label="The page was backgrounded at least once from navigation start to
-             this event."/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseDuration"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.Timing2.NavigationToFirstContentfulPaint">
-    <obsolete>
-      Deprecated in favor of PaintTiming equivalent.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram name="PageLoad.Events.Committed"/>
-  <affected-histogram name="PageLoad.Events.Provisional"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToCommit"/>
-  <affected-histogram
-      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstImagePaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstPaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
-  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
-  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadEventConditions" separator=".">
-  <suffix name="BeforeCommit"/>
-  <suffix name="AfterCommit.BeforePaint"/>
-  <suffix base="true" name="AfterPaint.BeforeInteraction"/>
-  <suffix base="true" name="AfterPaint.Before1sDelayedInteraction"/>
-  <suffix name="DuringParse"/>
-  <affected-histogram name="PageLoad.AbortTiming.Background"/>
-  <affected-histogram name="PageLoad.AbortTiming.ClientRedirect"/>
-  <affected-histogram name="PageLoad.AbortTiming.Close"/>
-  <affected-histogram name="PageLoad.AbortTiming.ForwardBackNavigation"/>
-  <affected-histogram name="PageLoad.AbortTiming.NewNavigation"/>
-  <affected-histogram name="PageLoad.AbortTiming.Other"/>
-  <affected-histogram name="PageLoad.AbortTiming.Reload"/>
-  <affected-histogram name="PageLoad.AbortTiming.Stop"/>
-  <affected-histogram name="PageLoad.AbortTiming.UnknownNavigation"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.Background"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.ClientRedirect"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.Close"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.NewNavigation"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.Other"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.Reload"/>
-  <affected-histogram name="PageLoad.Experimental.AbortTiming.Stop"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstBackground">
-    <obsolete>
-      deprecated in favor of PageLoad.AbortTiming.Background.*
-    </obsolete>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsAfterPaint" separator=".">
-  <suffix name="AfterPaint"
-      label="Limited to the duration of time starting after first paint, for
-             page loads that reached first paint."/>
-  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsCacheInfo" separator=".">
-  <suffix name="NoStore" label="Main resource had cache-control: no-store"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.ForwardBackNavigation"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.NavigationToParseStart.LoadType.ForwardBackNavigation"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsAmpCachePages" separator="."
-    ordering="prefix">
-  <suffix name="Clients.AMPCache"
-      label="PageLoadMetrics that are a result of a navigations to an AMP
-             cache page. Same page navigations are not tracked."/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsCssScanner" separator="."
-    ordering="prefix">
-  <suffix name="Clients.CssScanner"
-      label="Metrics from pages scanned by the preload scanner for @import
-             CSS rules"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsDataReductionProxy"
-    separator="." ordering="prefix">
-  <suffix name="Clients.DataReductionProxy"
-      label="PageLoadMetrics that are a result of a navigation through the
-             data reduction proxy."/>
-  <suffix name="Clients.DataReductionProxy.LoFiOn"
-      label="PageLoadMetrics that are a result of a navigation through the
-             data reduction proxy with session in LoFi enabled or control
-             field trial, and when the connection was slow."/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
-  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsDataReductionProxyResources"
-    separator=".">
-  <suffix name="NonProxied"
-      label="Resources not loaded through data reduction proxy."/>
-  <suffix name="Proxied"
-      label="Resources loaded through data reduction proxy."/>
-  <affected-histogram
-      name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="."
-    ordering="prefix">
-  <suffix name="Clients.DocWrite.Block"
-      label="PageLoadMetrics from a page that has synchronous, cross-origin
-             document.written scripts that could be blocked if the
-             document.write script blocking feature is enabled."/>
-  <suffix name="Clients.DocWrite.Evaluator"
-      label="PageLoadMetrics from a page that could have been evaluated by
-             the DocumentWriteEvaluator"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
-  <affected-histogram
-      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
-  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
-  <affected-histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsFromGoogleSearch" separator="."
-    ordering="prefix">
-  <suffix name="Clients.FromGoogleSearch"
-      label="PageLoadMetrics that are a result of a navigation from a Google
-             web search"/>
-  <suffix name="Clients.FromGWS"
-      label="PageLoadMetrics that are a result of a navigation from a Google
-             web search">
-    <obsolete>
-      Deprecated in favor of Clients.FromGoogleSearch.
-    </obsolete>
-  </suffix>
-  <suffix name="Clients.FromGWS2"
-      label="PageLoadMetrics that are a result of a navigation from a Google
-             web search">
-    <obsolete>
-      Deprecated in favor of Clients.FromGoogleSearch.
-    </obsolete>
-  </suffix>
-  <affected-histogram
-      name="PageLoad.AbortTiming.Close.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.Close.AfterPaint.BeforeInteraction"/>
-  <affected-histogram name="PageLoad.AbortTiming.Close.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterPaint.Before1sDelayedInteraction"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.NewNavigation.AfterPaint.BeforeInteraction"/>
-  <affected-histogram name="PageLoad.AbortTiming.Other.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.Reload.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.Reload.AfterPaint.Before1sDelayedInteraction"/>
-  <affected-histogram name="PageLoad.AbortTiming.Stop.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.Stop.AfterPaint.BeforeInteraction"/>
-  <affected-histogram name="PageLoad.AbortTiming.Stop.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.UnknownNavigation.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Close.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Close.AfterPaint.BeforeInteraction"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Close.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterPaint.Before1sDelayedInteraction"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterPaint.BeforeInteraction"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Other.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Reload.AfterPaint.Before1sDelayedInteraction"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Stop.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Stop.AfterPaint.BeforeInteraction"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Stop.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
-  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsMedia" separator="."
-    ordering="prefix">
-  <suffix name="Clients.Media"
-      label="PageLoadMetrics for page loads that involved playing a media
-             element."/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsOfflinePages" separator="."
-    ordering="prefix">
-  <suffix name="Clients.Previews.OfflinePages"
-      label="PageLoadMetrics that are a result of a navigation that shows
-             users an offline page preview. Offline page previews are shown
-             when a user's effective connection type is prohibitively slow."/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsProtocol" separator="."
-    ordering="prefix">
-  <suffix name="Clients.Protocol.H1"
-      label="PageLoadMetrics that are a result of a navigation to main
-             resource over HTTP/1.1">
-    <obsolete>
-      Renamed to Clients.Protocol.H11
-    </obsolete>
-  </suffix>
-  <suffix name="Clients.Protocol.H11"
-      label="PageLoadMetrics that are a result of a navigation to main
-             resource over HTTP/1.1"/>
-  <suffix name="Clients.Protocol.H2"
-      label="PageLoadMetrics that are a result of a navigation to main
-             resource over HTTP/2"/>
-  <suffix name="Clients.Protocol.QUIC"
-      label="PageLoadMetrics that are a result of a navigation to main
-             resource over QUIC"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsReload" separator="."
-    ordering="prefix">
-  <obsolete>
-    Deprecated at M53 in favor of LoadType.Reload.
-  </obsolete>
-  <suffix name="Clients.Reload"
-      label="PageLoadMetrics from a page that is reloaded"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsResourcePrefetchPredictor"
-    separator="." ordering="prefix">
-  <suffix base="true" name="Clients.ResourcePrefetchPredictor"
-      label="PageLoadMetrics with enabled ResourcePrefetchPredictor"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes
-    name="PageLoadMetricsClientsResourcePrefetchPredictorPrefetchingType"
-    separator=".">
-  <suffix name="Prefetchable"
-      label="The predictor database contained subresources for prediction for
-             a page"/>
-  <affected-histogram
-      name="PageLoad.Clients.ResourcePrefetchPredictor.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Clients.ResourcePrefetchPredictor.PaintTiming.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsServiceWorker" separator="."
-    ordering="prefix">
-  <suffix name="Clients.ServiceWorker"
-      label="PageLoadMetrics from a page that is controlled by a Service
-             Worker"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint">
-    <obsolete>
-      Deprecated in favor of PaintTiming equivalent.
-    </obsolete>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsServiceWorkerSpecialApps"
-    separator=".">
-  <suffix name="inbox" label="Custom histogram for Inbox"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Clients.ServiceWorker.PaintTiming.ParseStartToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsSubresourceFilter"
-    separator="." ordering="prefix">
-  <suffix name="Clients.SubresourceFilter"
-      label="For pages with filtered subresources. Includes dryrun matches."/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
-  <affected-histogram
-      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
-  <affected-histogram name="PageLoad.Experimental.CompletedResources.Cache"/>
-  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
-  <affected-histogram name="PageLoad.Experimental.CompletedResources.Total"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsClientsTabRestore" separator="."
-    ordering="prefix">
-  <suffix name="Clients.TabRestore"
-      label="PageLoadMetrics that are a result of a navigation caused by a
-             tab restore."/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsLoadType" separator=".">
-  <suffix name="LoadType.Reload" label="Restricted to reloaded pages."/>
-  <suffix name="LoadType.ForwardBackNavigation"
-      label="Restricted to forward/back navigations."/>
-  <suffix name="LoadType.NewNavigation"
-      label="Restricted to new navigations (link clicks, URLs typed into the
-             URL box, etc)."/>
-  <affected-histogram
-      name="PageLoad.Clients.SubresourceFilter.ActivationDecision"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
-  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsNoEndTime" separator=".">
-  <suffix name="NoEndTime"
-      label="The page load had no recorded end time, so an end time was
-             synthesized at the time the page end notification was processed."/>
-  <affected-histogram
-      name="PageLoad.Experimental.PageTiming.FirstPaintToPageEnd"/>
-  <affected-histogram
-      name="PageLoad.Experimental.PageTiming.NavigationToPageEnd"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsUserGesture" separator=".">
-  <suffix name="UserGesture"
-      label="Restricted to pages loaded via a user gesture."/>
-  <affected-histogram
-      name="PageLoad.Clients.Reload.PaintTiming.NavigationToFirstContentfulPaint">
-    <obsolete>
-      Deprecated in favor of
-      PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsUserInitiated" separator=".">
-  <suffix name="UserInitiated"
-      label="(experimental) Page load metric that is approximately user
-             initiated"/>
-  <affected-histogram
-      name="PageLoad.AbortTiming.ForwardBackNavigation.BeforeCommit"/>
-  <affected-histogram name="PageLoad.AbortTiming.NewNavigation.BeforeCommit"/>
-  <affected-histogram name="PageLoad.AbortTiming.Reload.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit">
-    <obsolete>
-      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit">
-    <obsolete>
-      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Reload.BeforeCommit">
-    <obsolete>
-      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram
-      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadMetricsUserInitiated2" separator=".">
-  <suffix name="UserGesture"
-      label="(experimental) Page load that has a user gesture"/>
-  <suffix name="UserInputEvent"
-      label="(experimental) Page load that has a user input event"/>
-  <suffix name="BrowserInitiated"
-      label="(experimental) Page load that was initiated from the browser
-             process"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"/>
-  <affected-histogram
-      name="PageLoad.Experimental.AbortTiming.Reload.BeforeCommit"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadType">
-  <suffix name="HistoryLoad"
-      label="but only for user pressing back or forward"/>
-  <suffix name="LinkLoad"
-      label="deprecated - see LinkLoadReload, LinkLoadNormal,
-             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
-             back to a posted page"/>
-  <suffix name="LinkLoadCacheOnly"
-      label="content initiated, commonly back to a posted page, where browser
-             must ONLY use cache"/>
-  <suffix name="LinkLoadNormal"
-      label="content initiated, ordinary link traversal or post"/>
-  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
-  <suffix name="LinkLoadStaleOk"
-      label="content initiated, commonly forward or back where stale cached
-             data is very acceptable"/>
-  <suffix name="NormalLoad"
-      label="but only for user entered URL or omnibox search"/>
-  <suffix name="Reload" label="but only for user pressed reload"/>
-  <suffix name="UndefLoad"
-      label="should never happen... as it is only for an client-code error
-             case which should not exist"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.StartToCommit">
-    <with-suffix name="LinkLoadNormal"/>
-    <with-suffix name="NormalLoad"/>
-  </affected-histogram>
-  <affected-histogram name="PLT.StartToFinish">
-    <with-suffix name="LinkLoadNormal"/>
-    <with-suffix name="NormalLoad"/>
-  </affected-histogram>
-  <affected-histogram name="Renderer4.BeginToFinish"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PageLoadType">
-  <suffix name="HistoryLoad"
-      label="but only for user pressing back or forward"/>
-  <suffix name="LinkLoad"
-      label="deprecated - see LinkLoadReload, LinkLoadNormal,
-             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
-             back to a posted page"/>
-  <suffix name="LinkLoadCacheOnly"
-      label="content initiated, commonly back to a posted page, where browser
-             must ONLY use cache"/>
-  <suffix name="LinkLoadNormal"
-      label="content initiated, ordinary link traversal or post"/>
-  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
-  <suffix name="LinkLoadStaleOk"
-      label="content initiated, commonly forward or back where stale cached
-             data is very acceptable"/>
-  <suffix name="NormalLoad"
-      label="but only for user entered URL or omnibox search"/>
-  <suffix name="Reload" label="but only for user pressed reload"/>
-  <suffix name="UndefLoad"
-      label="should never happen... as it is only for an client-code error
-             case which should not exist"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.StartToCommit">
-    <with-suffix name="LinkLoadNormal"/>
-    <with-suffix name="NormalLoad"/>
-  </affected-histogram>
-  <affected-histogram name="PLT.StartToFinish">
-    <with-suffix name="LinkLoadNormal"/>
-    <with-suffix name="NormalLoad"/>
-  </affected-histogram>
-  <affected-histogram name="Renderer4.BeginToFinish"/>
-  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordCustomPassphrase" separator=".">
-  <suffix name="WithCustomPassphrase"/>
-  <suffix name="WithoutCustomPassphrase"/>
-  <affected-histogram name="PasswordManager.AccountsPerSite"/>
-  <affected-histogram name="PasswordManager.AccountsPerSite.AutoGenerated"/>
-  <affected-histogram name="PasswordManager.AccountsPerSite.UserCreated"/>
-  <affected-histogram name="PasswordManager.BlacklistedSites"/>
-  <affected-histogram name="PasswordManager.TimesGeneratedPasswordUsed"/>
-  <affected-histogram name="PasswordManager.TimesPasswordUsed.AutoGenerated"/>
-  <affected-histogram name="PasswordManager.TimesPasswordUsed.UserCreated"/>
-  <affected-histogram name="PasswordManager.TotalAccounts.AutoGenerated"/>
-  <affected-histogram name="PasswordManager.TotalAccounts.UserCreated"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordGenerated" separator=".">
-  <suffix name="UserCreated"/>
-  <suffix name="AutoGenerated"/>
-  <affected-histogram name="PasswordManager.AccountsPerSite"/>
-  <affected-histogram name="PasswordManager.TimesPasswordUsed"/>
-  <affected-histogram name="PasswordManager.TotalAccounts"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordManagerMonitor">
-  <obsolete>
-    Deprecated as of 03/2016.
-  </obsolete>
-  <suffix name="group_1" label="group 1"/>
-  <suffix name="group_2" label="group 2"/>
-  <suffix name="group_3" label="group 3"/>
-  <suffix name="group_4" label="group 4"/>
-  <suffix name="group_5" label="group 5"/>
-  <suffix name="group_6" label="group 6"/>
-  <suffix name="group_7" label="group 7"/>
-  <suffix name="group_8" label="group 8"/>
-  <suffix name="group_9" label="group 9"/>
-  <suffix name="group_10" label="group 10"/>
-  <suffix name="group_11" label="group 11"/>
-  <suffix name="group_12" label="group 12"/>
-  <suffix name="group_13" label="group 13"/>
-  <suffix name="group_14" label="group 14"/>
-  <suffix name="group_15" label="group 15"/>
-  <suffix name="group_16" label="group 16"/>
-  <suffix name="group_17" label="group 17"/>
-  <suffix name="group_18" label="group 18"/>
-  <suffix name="group_19" label="group 19"/>
-  <suffix name="group_20" label="group 20"/>
-  <suffix name="" label=""/>
-  <affected-histogram name="PasswordManager.LinuxBackendStatistics"/>
-  <affected-histogram name="PasswordManager.ProvisionalSaveFailure"/>
-  <affected-histogram
-      name="PasswordManager.SavePasswordPromptDisappearedQuickly"/>
-  <affected-histogram name="PasswordManager.SavePasswordPromptDisplayed"/>
-  <affected-histogram name="PasswordManager.SavePasswordPromptResponse"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordReuseSourceRealm" separator=".">
-  <suffix name="FromHttpRealm"
-      label="The account in question was saved on an HTTP site."/>
-  <suffix name="FromHttpsRealm"
-      label="The account in question was saved on a HTTPS site (including
-             those with certificate issues)."/>
-  <affected-histogram name="PasswordManager.AccountsReusingPassword"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordReuseTargetRealm" separator=".">
-  <suffix name="OnHttpRealmWithSameHost"
-      label="The number of other accounts whose realms have HTTP scheme and
-             the same host as the account in question."/>
-  <suffix name="OnHttpsRealmWithSameHost"
-      label="The number of other accounts whose realms have HTTPS scheme and
-             the same host as the account in question."/>
-  <suffix name="OnHttpRealmWithDifferentHost"
-      label="The number of other accounts whose realms have HTTP scheme and
-             different hosts than the account in question."/>
-  <suffix name="OnHttpsRealmWithDifferentHost"
-      label="The number of other accounts whose realms have HTTPS scheme and
-             different hosts than the account in question."/>
-  <suffix name="OnAnyRealmWithDifferentHost"
-      label="The number of other accounts whose realms have different hosts
-             than the account in question, and their scheme is either HTTP or
-             HTTPS."/>
-  <suffix name="OnPSLMatchingRealm"
-      label="The number of other accounts whose realms are public suffix
-             matches to that of the account in question (the scheme is always
-             the same in these cases)."/>
-  <affected-histogram
-      name="PasswordManager.AccountsReusingPassword.FromHttpRealm"/>
-  <affected-histogram
-      name="PasswordManager.AccountsReusingPassword.FromHttpsRealm"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PasswordScheme" separator=".">
-  <suffix name="Android" label="The password is for an Android app."/>
-  <suffix name="Ftp" label="The scheme of the origin is FTP."/>
-  <suffix name="Http" label="The scheme of the origin is HTTP."/>
-  <suffix name="Https" label="The scheme of the origin is HTTPS."/>
-  <suffix name="Other" label="The scheme of the origin is something else."/>
-  <affected-histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PaymentRequestOutcome" separator=".">
-  <suffix name="Completed" label="The Payment Request was completed"/>
-  <suffix name="UserAborted"
-      label="The Payment Request was aborted by the user"/>
-  <suffix name="OtherAborted"
-      label="The Payment Request was aborted but not but the user"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds.ContactInfo"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds.CreditCards"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSelectionAdds.ShippingAddress"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSelectionChanges.ContactInfo"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSelectionChanges.CreditCards"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSelectionChanges.ShippingAddress"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits.ContactInfo"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits.CreditCards"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSelectionEdits.ShippingAddress"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSuggestionsShown.ContactInfo"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSuggestionsShown.CreditCards"/>
-  <affected-histogram
-      name="PaymentRequest.NumberOfSuggestionsShown.ShippingAddress"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PaymentRequestSection" separator=".">
-  <suffix name="ContactInfo"
-      label="For the contact info section of a Payment Request"/>
-  <suffix name="CreditCards"
-      label="For the credit card section of a Payment Request"/>
-  <suffix name="ShippingAddress"
-      label="For the shipping address section of a Payment Request"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionChanges"/>
-  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits"/>
-  <affected-histogram name="PaymentRequest.NumberOfSuggestionsShown"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PerformanceMonitor" separator=".">
-  <suffix name="BrowserProcess"/>
-  <suffix name="GPUProcess"/>
-  <suffix name="PluginProcess"/>
-  <suffix name="PPAPIFlashProcess"/>
-  <suffix name="PPAPIProcess"/>
-  <suffix name="RendererProcess"/>
-  <suffix name="RendererExtensionEventProcess"/>
-  <suffix name="RendererExtensionPersistentProcess"/>
-  <suffix name="WorkerProcess"/>
-  <affected-histogram name="PerformanceMonitor.AverageCPU"/>
-  <affected-histogram name="PerformanceMonitor.HighCPU"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PermissionRequestGesture" separator=".">
-  <suffix name="Gesture" label="With user gesture"/>
-  <suffix name="NoGesture" label="Without user gesture"/>
-  <affected-histogram name="Permissions.Prompt.Accepted"/>
-  <affected-histogram name="Permissions.Prompt.Denied"/>
-  <affected-histogram name="Permissions.Prompt.Shown"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PermissionTypes" separator=".">
-  <suffix name="MidiSysEx" label="Midi SysEx permsision actions"/>
-  <suffix name="PushMessaging" label="Push messaging permission actions"/>
-  <suffix name="Notifications" label="Notification permission actions"/>
-  <suffix name="Geolocation" label="Geolocation permission actions"/>
-  <suffix name="ProtectedMedia" label="Protected media permission actions"/>
-  <suffix name="DurableStorage" label="Durable Storage permission actions"/>
-  <suffix name="AudioCapture" label="Microphone permission actions"/>
-  <suffix name="VideoCapture" label="Camera permission actions"/>
-  <suffix name="Flash" label="Flash permission actions"/>
-  <affected-histogram name="ContentSettings.PermissionActions"/>
-  <affected-histogram name="ContentSettings.PermissionActionsInsecureOrigin"/>
-  <affected-histogram name="ContentSettings.PermissionActionsSecureOrigin"/>
-  <affected-histogram name="Permissions.Action"/>
-  <affected-histogram name="Permissions.Action.InsecureOrigin"/>
-  <affected-histogram name="Permissions.Action.SecureOrigin"/>
-  <affected-histogram name="Permissions.Prompt.Accepted.Persisted"/>
-  <affected-histogram name="Permissions.Prompt.Accepted.PriorDismissCount"/>
-  <affected-histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount"/>
-  <affected-histogram name="Permissions.Prompt.Denied.Persisted"/>
-  <affected-histogram name="Permissions.Prompt.Denied.PriorDismissCount"/>
-  <affected-histogram name="Permissions.Prompt.Denied.PriorIgnoreCount"/>
-  <affected-histogram name="Permissions.Prompt.Dismissed.PriorDismissCount"/>
-  <affected-histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount"/>
-  <affected-histogram name="Permissions.Prompt.Ignored.PriorDismissCount"/>
-  <affected-histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount"/>
-  <affected-histogram name="Permissions.Requested.CrossOrigin"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PersistentMemoryAllocs" separator="."
-    ordering="prefix,2">
-  <obsolete>
-    Deprecated 2/2017 for Issue 689315 which indicated they weren't being used.
-  </obsolete>
-  <suffix name="BrowserMetrics" label="For browser process metrics."/>
-  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
-  <suffix name="GpuMetrics" label="For GPU process metrics."/>
-  <suffix name="PpapiBrokerMetrics"
-      label="For &quot;PPAPI broker&quot; process metrics."/>
-  <suffix name="PpapiPluginMetrics"
-      label="For &quot;PPAPI plugin&quot; process metrics."/>
-  <suffix name="RendererMetrics" label="For renderer process metrics."/>
-  <suffix name="SandboxHelperMetrics"
-      label="For &quot;sandbox helper&quot; process metrics."/>
-  <suffix name="SetupMetrics" label="For setup metrics."/>
-  <suffix name="UtilityMetrics"
-      label="For &quot;utility&quot; process metrics."/>
-  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
-  <affected-histogram name="UMA.PersistentAllocator.Allocs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PersistentMemoryErrors" separator="."
-    ordering="prefix,2">
-  <suffix name="BrowserMetrics" label="For browser process metrics."/>
-  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
-  <suffix name="GpuMetrics" label="For GPU process metrics."/>
-  <suffix name="PpapiBrokerMetrics"
-      label="For &quot;PPAPI broker&quot; process metrics."/>
-  <suffix name="PpapiPluginMetrics"
-      label="For &quot;PPAPI plugin&quot; process metrics."/>
-  <suffix name="RendererMetrics" label="For renderer process metrics."/>
-  <suffix name="SandboxHelperMetrics"
-      label="For &quot;sandbox helper&quot; process metrics."/>
-  <suffix name="SetupMetrics" label="For setup metrics."/>
-  <suffix name="UtilityMetrics"
-      label="For &quot;utility&quot; process metrics."/>
-  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
-  <affected-histogram name="UMA.PersistentAllocator.Errors"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PersistentMemoryUsedPct" separator="."
-    ordering="prefix,2">
-  <suffix name="BrowserMetrics" label="For browser process metrics."/>
-  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
-  <suffix name="GpuMetrics" label="For GPU process metrics."/>
-  <suffix name="PpapiBrokerMetrics"
-      label="For &quot;PPAPI broker&quot; process metrics."/>
-  <suffix name="PpapiPluginMetrics"
-      label="For &quot;PPAPI plugin&quot; process metrics."/>
-  <suffix name="RendererMetrics" label="For renderer process metrics."/>
-  <suffix name="SandboxHelperMetrics"
-      label="For &quot;sandbox helper&quot; process metrics."/>
-  <suffix name="SetupMetrics" label="For setup metrics."/>
-  <suffix name="UtilityMetrics"
-      label="For &quot;utility&quot; process metrics."/>
-  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
-  <affected-histogram name="UMA.PersistentAllocator.UsedPct"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PhysicalWebDebugActions" separator=".">
-  <suffix name="ChromeStart" label="when Chrome first starts up"/>
-  <suffix name="LaunchFromDiagnostics"
-      label="when the user launches the ListUrlActivity from the Physical Web
-             diagnostics page"/>
-  <suffix name="LaunchFromPreferences"
-      label="when the user launches the ListUrlActivity from the Physical Web
-             preferencs screen"/>
-  <affected-histogram name="PhysicalWeb.State.Bluetooth"/>
-  <affected-histogram name="PhysicalWeb.State.DataConnectionActive"/>
-  <affected-histogram name="PhysicalWeb.State.LocationPermission"/>
-  <affected-histogram name="PhysicalWeb.State.LocationServices"/>
-  <affected-histogram name="PhysicalWeb.State.Preference"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Platform.FirmwareType" separator=".">
-  <suffix name="Main" label="Main processor firmware"/>
-  <suffix name="EC" label="Embedded Controller firmware"/>
-  <suffix name="PD" label="USB Power Delivery controller firmware"/>
-  <affected-histogram name="Platform.BootMode.FirmwareWriteProtect"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PlatformMeminfoPercentage" separator="">
-  <suffix name="infoActive" label="Active memory."/>
-  <suffix name="infoActiveAnon"
-      label="Active anonymous memory (data segments)."/>
-  <suffix name="infoActiveFile"
-      label="Active file-backed memory (executables, ...)."/>
-  <suffix name="infoAnonPages" label="Anonymous memory (executables, ...)."/>
-  <suffix name="infoBuffers" label="Buffer cache (executables, ...)."/>
-  <suffix name="infoCached"
-      label="size of file-backed memory minus swap and buffer cache."/>
-  <suffix name="infoInactive" label="Inactive memory."/>
-  <suffix name="infoInactiveAnon"
-      label="Inactive anonymous memory (data segments)."/>
-  <suffix name="infoInactiveFile" label="Inactive file-backed memory."/>
-  <suffix name="infoMapped" label="Mapped memory."/>
-  <suffix name="infoMemFree" label="Free memory."/>
-  <suffix name="infoSwapUsedPercent" label="Used swap memory."/>
-  <affected-histogram name="Platform.Mem"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PlatformMeminfoSize" separator="">
-  <suffix name="MemFreeDerived" label="Size derived from free+buffers+cached."/>
-  <suffix name="MemTotal" label="Size of total installed memory."/>
-  <suffix name="MemUsedDerived"
-      label="Size of &quot;Total - FreeDerived&quot; memory."/>
-  <suffix name="Shmem" label="Size of shared memory."/>
-  <suffix name="Slab" label="Size of slab memory."/>
-  <suffix name="SwapUsed" label="Size of used swap memory."/>
-  <suffix name="Unevictable" label="Size of unevictable memory."/>
-  <affected-histogram name="Platform.Meminfo"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PluginFlashEngagement" separator=".">
-  <suffix name="ContentSettingAllowed" label="Engagement when Flash allowed."/>
-  <suffix name="ContentSettingBlocked" label="Engagement when Flash blocked."/>
-  <suffix name="NoSetting" label="Engagement when no content setting set."/>
-  <affected-histogram name="Plugin.Flash.Engagement"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PNaClTranslatorTypes" separator=".">
-  <suffix name="" label="All translator types"/>
-  <suffix name="LLC" label="LLC-based translator"/>
-  <suffix name="Subzero" label="Subzero-based translator"/>
-  <affected-histogram name="NaCl.Options.PNaCl.OptLevel"/>
-  <affected-histogram name="NaCl.Perf.PNaClCache.IsHit"/>
-  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec"/>
-  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileTime"/>
-  <affected-histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler"/>
-  <affected-histogram
-      name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"/>
-  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec"/>
-  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime"/>
-  <affected-histogram name="NaCl.Perf.Size.PexeNexeSizePct"/>
-  <affected-histogram name="NaCl.Perf.Size.PNaClTranslatedNexe"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PositionVariants">
-  <suffix name="0_0" label="Only snippets on position 0"/>
-  <suffix name="1_2" label="Only snippets on position 1-2"/>
-  <suffix name="3_4" label="Only snippets on position 3-4"/>
-  <suffix name="5_9" label="Only snippets on position 5-9"/>
-  <affected-histogram name="NewTabPage.Snippets.CardClickedAge"/>
-  <affected-histogram name="NewTabPage.Snippets.CardClickedScore"/>
-  <affected-histogram name="NewTabPage.Snippets.CardClickedScoreNew"/>
-  <affected-histogram name="NewTabPage.Snippets.CardLongPressedAge"/>
-  <affected-histogram name="NewTabPage.Snippets.CardLongPressedScoreNew"/>
-  <affected-histogram name="NewTabPage.Snippets.CardShownAge"/>
-  <affected-histogram name="NewTabPage.Snippets.CardShownScore"/>
-  <affected-histogram name="NewTabPage.Snippets.CardShownScoreNew"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PpapiPluginName">
-  <suffix name="libpepflashplayer.so" label="Flash player on Linux or Cros"/>
-  <suffix name="libwidevinecdmadapter.so"
-      label="Widevine CDM on Linux or Cros"/>
-  <suffix name="pepflashplayer.dll" label="Flash player on Windows"/>
-  <suffix name="PepperFlashPlayer.plugin" label="Flash player on Mac"/>
-  <suffix name="widevinecdmadapter.dll" label="Widevine CDM on Windows"/>
-  <suffix name="widevinecdmadapter.plugin" label="Widevine CDM on Mac"/>
-  <affected-histogram name="Plugin.PpapiBrokerLoadErrorCode"/>
-  <affected-histogram name="Plugin.PpapiBrokerLoadResult"/>
-  <affected-histogram name="Plugin.PpapiBrokerLoadTime"/>
-  <affected-histogram name="Plugin.PpapiPluginLoadErrorCode"/>
-  <affected-histogram name="Plugin.PpapiPluginLoadResult"/>
-  <affected-histogram name="Plugin.PpapiPluginLoadTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrecacheCellular" separator=".">
-  <suffix name="Cellular"
-      label="covers fetches when connected to cellular networks"/>
-  <affected-histogram name="Precache.DownloadedNonPrecache"/>
-  <affected-histogram name="Precache.Saved"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PreferenceFileNames" separator=".">
-  <suffix name="Local_State" label="Local State file"/>
-  <suffix name="Preferences" label="Preferences file"/>
-  <suffix name="Secure_Preferences" label="Secure Preferences file"/>
-  <affected-histogram name="Settings.JsonDataReadSizeKilobytes"/>
-  <affected-histogram name="Settings.JsonDataSizeKilobytes"/>
-  <affected-histogram name="Settings.JsonDataWriteCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Prefetch">
-  <suffix name="ContentPrefetchPrefetchOff"
-      label="Prefetch is completely disabled."/>
-  <suffix name="ContentPrefetchPrefetchOn"
-      label="prefetch is enabled but prerender is disabled."/>
-  <affected-histogram name="HttpCache.EntryLockWait"/>
-  <affected-histogram name="Net.HttpTimeToFirstByte"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
-  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.PerceivedLoadTime"/>
-  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Prerender">
-  <obsolete>
-    Deprecated August 2016
-  </obsolete>
-  <suffix name="PrerenderEnabled" label="prerender is enabled."/>
-  <suffix name="PrerenderControl" label="prerender is disabled."/>
-  <suffix name="PrerenderNoUse"
-      label="prerender is enabled, but pages are not swapped in."/>
-  <suffix name="PrerenderMulti"
-      label="prerender is enabled with multiple simultanious prerenders."/>
-  <suffix name="Prerender5minTTL"
-      label="prerender is enabled, and the TTL is extended to 5 minutes."/>
-  <suffix name="PrerenderMatchComplete"
-      label="prerender is enabled, and match complete replacements are used
-             to gather extended statistics."/>
-  <affected-histogram name="HttpCache.EntryLockWait"/>
-  <affected-histogram name="Net.HttpTimeToFirstByte"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish"/>
-  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
-  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.BeginToFinishDoc"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
-  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
-  <affected-histogram name="PLT.PerceivedLoadTime"/>
-  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
-  <affected-histogram name="Prerender.FinalStatus"/>
-  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
-  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent"/>
-  <affected-histogram name="Prerender.PerceivedPLT"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
-  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
-  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
-  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
-  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
-  <affected-histogram name="Prerender.RendererIdleTime"/>
-  <affected-histogram name="Prerender.RendererPerceivedPLT"/>
-  <affected-histogram name="Prerender.RendererPerceivedPLTMatched"/>
-  <affected-histogram name="Prerender.RendererTimeUntilDisplay"/>
-  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
-  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderHoverType" ordering="prefix">
-  <obsolete>
-    deprecated May 10 2012
-  </obsolete>
-  <suffix name="HoverStats_50" label="Hover stats @ threshold 50 ms."/>
-  <suffix name="HoverStats_75" label="Hover stats @ threshold 75 ms."/>
-  <suffix name="HoverStats_100" label="Hover stats @ threshold 100 ms."/>
-  <suffix name="HoverStats_150" label="Hover stats @ threshold 150 ms."/>
-  <suffix name="HoverStats_200" label="Hover stats @ threshold 200 ms."/>
-  <suffix name="HoverStats_250" label="Hover stats @ threshold 250 ms."/>
-  <suffix name="HoverStats_300" label="Hover stats @ threshold 300 ms."/>
-  <suffix name="HoverStats_400" label="Hover stats @ threshold 400 ms."/>
-  <suffix name="HoverStats_500" label="Hover stats @ threshold 500 ms."/>
-  <suffix name="HoverStats_750" label="Hover stats @ threshold 750 ms."/>
-  <suffix name="HoverStats_1000" label="Hover stats @ threshold 1000 ms."/>
-  <suffix name="HoverStats_1500" label="Hover stats @ threshold 1500 ms."/>
-  <suffix name="HoverStats_2000" label="Hover stats @ threshold 2000 ms."/>
-  <suffix name="HoverStats_3000" label="Hover stats @ threshold 3000 ms."/>
-  <suffix name="HoverStats_4000" label="Hover stats @ threshold 4000 ms."/>
-  <suffix name="HoverStats_5000" label="Hover stats @ threshold 5000 ms."/>
-  <affected-histogram name="Prerender.Events"/>
-  <affected-histogram name="Prerender.TimeToClick"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderModeType">
-  <obsolete>
-    Deprecated August 2016
-  </obsolete>
-  <suffix name="_Disabled" label="PRERENDER_MODE_DISABLED"/>
-  <suffix name="_Enabled" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
-  <suffix name="_Control" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
-  <suffix name="_Multi"
-      label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
-  <suffix name="_15MinTTL" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
-  <suffix name="_NoUse" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
-  <affected-histogram name="Prerender.OmniboxNavigationsCouldPrerender"/>
-  <affected-histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount"/>
-  <affected-histogram name="Prerender.OmniboxPrerenderCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderPrefetchAge" separator=".">
-  <suffix name="Cold" label="Prefetch too old to skip revalidation."/>
-  <suffix name="Reference"
-      label="No prefetch. Warning: do not compare with the load times of
-             prefetched pages (bias)."/>
-  <suffix name="Warm" label="Prefetch skips revalidation."/>
-  <affected-histogram name="Prerender.PrefetchTTFCP"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderPrefetchMainResourceType" separator=".">
-  <suffix name="Cacheable" label="Main resource cacheable."/>
-  <suffix name="NoStore" label="Main resource no-store."/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Reference"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderPrefetchPaintVisibility" separator=".">
-  <suffix name="Hidden" label="Page was hidden during rendering."/>
-  <suffix name="Visible" label="Page visible for all of rendering."/>
-  <affected-histogram name="Prerender.PerceivedTTFCPRecorded"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.Cacheable"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PrerenderSource" ordering="prefix">
-  <suffix name="" label="All prerenders."/>
-  <suffix name="gws" label="GWS triggered prerender."/>
-  <suffix name="externalrequest" label="Externally triggered prerender."/>
-  <suffix name="externalrequestforced"
-      label="Forced prerender regardless of network."/>
-  <suffix name="Instant" label="Instant search prerender."/>
-  <suffix name="none"
-      label="No origin; in the case of prefetch TTFCP this is when no
-             prefetch was involved."/>
-  <suffix name="omnibox" label="Triggered from the omnibox."/>
-  <suffix name="wash" label="Multiple sources could have triggered."/>
-  <suffix name="web" label="Link triggered prerender."/>
-  <suffix name="webcross"
-      label="Link triggered prerender, rel=prerender, cross domain."/>
-  <suffix name="websame"
-      label="Link triggered prerender, rel=prerender, same domain."/>
-  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
-  <suffix name="offline"
-      label="Prerender triggered for saving a page for offline use."/>
-  <affected-histogram name="Prerender.AbandonTimeUntilUsed"/>
-  <affected-histogram name="Prerender.CookieSendType"/>
-  <affected-histogram name="Prerender.CookieStatus"/>
-  <affected-histogram name="Prerender.Event"/>
-  <affected-histogram name="Prerender.FinalStatus"/>
-  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
-  <affected-histogram name="Prerender.LocalPredictorEvent"/>
-  <affected-histogram name="Prerender.LocalPredictorTimeUntilUsed"/>
-  <affected-histogram name="Prerender.NetworkBytesUsed"/>
-  <affected-histogram name="Prerender.NetworkBytesWasted"/>
-  <affected-histogram name="Prerender.NoStatePrefetchAge"/>
-  <affected-histogram name="Prerender.NoStatePrefetchMainResourceRedirects"/>
-  <affected-histogram name="Prerender.NoStatePrefetchResponseTypes"/>
-  <affected-histogram name="Prerender.NoStatePrefetchSubResourceRedirects"/>
-  <affected-histogram name="Prerender.PageVisitedStatus"/>
-  <affected-histogram name="Prerender.PerceivedPLT"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
-  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
-  <affected-histogram
-      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
-  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
-  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
-  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
-  <affected-histogram name="Prerender.PerceivedTTFCPRecorded.Hidden"/>
-  <affected-histogram name="Prerender.PerceivedTTFCPRecorded.Visible"/>
-  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
-  <affected-histogram name="Prerender.PrefetchAge"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable.Hidden"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable.Visible"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore.Hidden"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore.Visible"/>
-  <affected-histogram
-      name="Prerender.PrefetchTTFCP.Reference.Cacheable.Hidden"/>
-  <affected-histogram
-      name="Prerender.PrefetchTTFCP.Reference.Cacheable.Visible"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore.Hidden"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore.Visible"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable.Hidden"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable.Visible"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore.Hidden"/>
-  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore.Visible"/>
-  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
-  <affected-histogram name="Prerender.PrerendersPerSessionCount"/>
-  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
-  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
-  <affected-histogram name="Prerender.TimeBetweenPrerenderRequests"/>
-  <affected-histogram name="Prerender.TimeSinceLastRecentVisit"/>
-  <affected-histogram name="Prerender.TimeUntilUsed2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProcessType" separator=".">
-  <suffix name="BrowserProcess" label="Browser Process"/>
-  <suffix name="RendererProcess"
-      label="Renderer Process (not an extension process)"/>
-  <suffix name="ExtensionProcess" label="Extension Process"/>
-  <affected-histogram name="Extensions.ExtensionCreationTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProfileMenuGAIASource" separator=".">
-  <suffix name="NonGAIA" label="Interaction was not initiated from GAIA"/>
-  <suffix name="GAIASignout"
-      label="GAIA-initiated interaction indicating a service type of Signout"/>
-  <suffix name="GAIAIncognito"
-      label="GAIA-initiated interaction indicating a service type of
-             Incognito (used for DesktopMenu)"/>
-  <suffix name="GAIASignoutIncognito"
-      label="GAIA-initiated interaction indicating a service type of Signout
-             and go Incognito (used for AndroidAccountManagementMenu)"/>
-  <suffix name="GAIAAddSession"
-      label="GAIA-initiated interaction indicating a service type of Add a
-             Session"/>
-  <suffix name="GAIAReAuth"
-      label="GAIA-initiated interaction indicating a service type of
-             Reauthenticate this user"/>
-  <suffix name="GAIASignup"
-      label="GAIA-initiated interaction indicating a service type of Add an
-             account"/>
-  <suffix name="GAIADefault"
-      label="GAIA-initiated interaction indicating the default service type"/>
-  <affected-histogram name="Profile.AndroidAccountManagementMenu"/>
-  <affected-histogram name="Profile.DesktopMenu"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProfileOpenState" separator=".">
-  <suffix name="ToOpenedProfile"
-      label="The profile being switched to was already loaded and had at
-             least one open browser"/>
-  <suffix name="ToUnopenedProfile"
-      label="The profile being switched to had not yet been loaded this
-             Chrome session"/>
-  <suffix name="ToOpenedProfileWithoutBrowser"
-      label="The profile being switched to was already opened and had no
-             active browsers"/>
-  <affected-histogram name="Profile.OpenMethod"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProfilePictureDownload" separator=".">
-  <suffix name="Default.OOBE" label="default picture, in OOBE"/>
-  <suffix name="Default.LoggedIn" label="default picture, after login"/>
-  <suffix name="Default.Preferences" label="default picture, in Prefs"/>
-  <suffix name="Failure.OOBE" label="download has failed, in OOBE"/>
-  <suffix name="Failure.LoggedIn" label="download has failed, after login"/>
-  <suffix name="Failure.Preferences" label="download has failed, in Prefs"/>
-  <suffix name="Success.OOBE" label="download was successful, in OOBE"/>
-  <suffix name="Success.LoggedIn" label="download was successful, after login"/>
-  <suffix name="Success.Preferences" label="download was successful, in Prefs"/>
-  <affected-histogram name="UserImage.ProfileDownloadTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProgressiveScan">
-  <suffix name="FullScan" label="Using WPA_supplicant to scan."/>
-  <suffix name="33Percent_4MinMax"
-      label="Progressive scan @ 33%, 4 frequency bins."/>
-  <suffix name="50Percent_4MinMax"
-      label="Progressive scan @ 50%, 4 frequency bins."/>
-  <suffix name="50Percent_8MinMax"
-      label="Progressive scan @ 50%, 8 frequency bins."/>
-  <suffix name="100Percent_8MinMax"
-      label="Progressive scan @ 100%, 8 frequency bins."/>
-  <suffix name="100Percent_1MinSeen_A"
-      label="Progressive scan @ all previously seen frequencies (A)."/>
-  <suffix name="100Percent_1MinSeen_B"
-      label="Progressive scan @ all previously seen frequencies (B)."/>
-  <suffix name="100Percent_1Min_4Max"
-      label="Progressive scan @ 100%, minimum 1/maximum 4 frequencies."/>
-  <affected-histogram name="Network.Shill.TimeToDrop"/>
-  <affected-histogram name="Network.Shill.WiFi.ScanResult"/>
-  <affected-histogram name="Network.Shill.Wifi.TimeToConnect"/>
-  <affected-histogram name="Network.Shill.Wifi.TimeToJoin"/>
-  <affected-histogram name="Network.Shill.Wifi.TimeToScan"/>
-  <affected-histogram name="Network.Shill.Wifi.TimeToScanAndConnect"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProtectorSettingChange" separator=".">
-  <obsolete>
-    Deprecated 8/2013. No longer tracked.
-  </obsolete>
-  <suffix name="Applied" label="change has been accepted by user"/>
-  <suffix name="Corrupt" label="possibly hijacked, backup invalid"/>
-  <suffix name="Discarded" label="change has been reverted by user"/>
-  <suffix name="Fallback" label="fallback provider used (no backup available)"/>
-  <suffix name="Hijacked" label="hijacked, with a valid backup"/>
-  <suffix name="Missing" label="fallback provider missing, added"/>
-  <suffix name="New" label="(obsolete, was sum of Corrupt+Hijacked)"/>
-  <suffix name="Restored"
-      label="search provider restored by Protector before showing the bubble"/>
-  <suffix name="Timeout" label="change has been ignored by user (timed out)"/>
-  <affected-histogram name="Protector.SearchProvider"/>
-  <affected-histogram name="Protector.StartupSettings"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ProxyConnectionImpact">
-  <suffix name="proxy_connections_16"
-      label="with 16 connections per proxy server"/>
-  <suffix name="proxy_connections_32"
-      label="with 32 connections per proxy server"/>
-  <suffix name="proxy_connections_64"
-      label="with 64 connections per proxy server"/>
-  <suffix name="proxy_connections_8"
-      label="with 8 connections per proxy server"/>
-  <affected-histogram name="Net.HttpProxySocketRequestTime"/>
-  <affected-histogram name="Net.SocksSocketRequestTime"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="PurgeAndSuspendExperiment" separator=".">
-  <suffix name="BlinkGCKB" label="Constrained to the BlinkGC allocator"/>
-  <suffix name="DiscardableKB" label="Constrained to discardable memory usage"/>
-  <suffix name="PartitionAllocKB"
-      label="Constrained to PartitionAlloc allocator"/>
-  <suffix name="MallocKB" label="Constrained to malloc memory usage"/>
-  <suffix name="TotalAllocatedKB"
-      label="Summed over the PartitionAlloc, malloc, discardable memory,
-             mainThreadIsolate() and BlinkGC allocators"/>
-  <suffix name="V8MainThreadIsolateKB"
-      label="Constrained to memory usage by mainThreadIsolate()"/>
-  <affected-histogram name="PurgeAndSuspend.Experimental.MemoryGrowth"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="QueryTimeSuffix" separator=".">
-  <suffix name="0" label="N = 0"/>
-  <suffix name="1" label="N = 1"/>
-  <suffix name="2" label="N = 2"/>
-  <suffix name="3" label="N = 3"/>
-  <suffix name="4" label="N = 4"/>
-  <suffix name="5" label="N = 5"/>
-  <affected-histogram name="Omnibox.QueryTime"/>
-  <affected-histogram name="Omnibox.QueryTime2"/>
-  <affected-histogram name="ShortcutsProvider.QueryIndexTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="QuicConnectionType" separator="">
-  <owner>rch@chromium.org</owner>
-  <suffix name="ForHTTP" label="Only insecure HTTP connections are counted.">
-    <obsolete>
-      Deprecated 10/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="ForHTTPS" label="Only secure HTTPS connections are counted."/>
-  <affected-histogram name="Net.QuicSession.ConnectRandomPort"/>
-  <affected-histogram
-      name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"/>
-  <affected-histogram name="Net.QuicSession.ConnectSelectPort">
-    <obsolete>
-      Deprecated 04/2016.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram name="Net.QuicSession.HandshakeRoundTrips"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="QuicPortSelection" separator="">
-  <owner>rch@chromium.org</owner>
-  <suffix name="SelectPort"
-      label="An effort was mode to (try to) consistently connect using the
-             same source port for the given server IP/port."/>
-  <suffix name="RandomPort"
-      label="The operating system randomly selected a source port for the
-             connection."/>
-  <affected-histogram name="Net.QuicSession.Connect"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="QuicSessionVerifyProofTime" separator=".">
-  <suffix name="" label="Verification time for a server."/>
-  <suffix name="google" label="Verification time for www.google.com server."/>
-  <suffix name="CachedServerConfig"
-      label="Verification time for a server when server config from cache is
-             used."/>
-  <affected-histogram name="Net.QuicSession.VerifyProofTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RasterBufferProvider" separator=".">
-  <suffix name="Gpu" label="The GpuRasterBufferProvider was in use."/>
-  <suffix name="OneCopy" label="The OneCopyRasterBufferProvider was in use."/>
-  <affected-histogram name="Renderer4.Browser.PartialRasterPercentageSaved"/>
-  <affected-histogram name="Renderer4.Renderer.PartialRasterPercentageSaved"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RasterTaskType" separator=".">
-  <suffix name="" label="This metric includes both gpu and software raster."/>
-  <suffix name="Gpu" label="This metric is for only gpu raster."/>
-  <suffix name="Software" label="This metric is for only software raster."/>
-  <affected-histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"/>
-  <affected-histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs2"/>
-  <affected-histogram name="Compositing.Browser.RasterTask.RasterUs"/>
-  <affected-histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"/>
-  <affected-histogram
-      name="Compositing.Renderer.RasterTask.RasterPixelsPerMs2"/>
-  <affected-histogram name="Compositing.Renderer.RasterTask.RasterUs"/>
-  <affected-histogram name="Renderer4.ImageDecodeTaskDurationUs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ReferrerAttribution" separator=".">
-  <suffix name="DownloadAttribution" label="Download referrer attribution."/>
-  <suffix name="PhishingInterstitialAttribution"
-      label="Phishing interstitial referrer attribution."/>
-  <suffix name="PPAPIDownloadAttribution"
-      label="PPAPI download referrer attribution."/>
-  <suffix name="MalwareInterstitialAttribution"
-      label="Malware interstitial referrer attribution."/>
-  <suffix name="UwsInterstitialAttribution"
-      label="UwS interstitial referrer attribution."/>
-  <affected-histogram name="SafeBrowsing.ReferrerAttributionResult"/>
-  <affected-histogram name="SafeBrowsing.ReferrerHasInvalidTabID"/>
-  <affected-histogram name="SafeBrowsing.ReferrerURLChainSize"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RemoteProcessWarmStartFast" separator="">
-  <suffix name="" label="Normal start."/>
-  <suffix name="Fast"
-      label="Fast start by skipping normal chrome.dll startup."/>
-  <affected-histogram name="Startup.WarmStartTimeFromRemoteProcessStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RendererEventLatency" separator=".">
-  <suffix name="Char" label="The Char event occurs on textual keyboard input."/>
-  <suffix name="ContextMenu" label="For ContextMenu event."/>
-  <suffix name="GestureDoubleTap"
-      label="A GestureDoubleTap occurs when the user double taps on a
-             touchscreen."/>
-  <suffix name="GestureFlingCancel"
-      label="A GestureFlingCancel is sent to the renderer to cancel any
-             active flings."/>
-  <suffix name="GestureFlingStart"
-      label="A GestureFlingStart is sent when the user quickly flicks on a
-             touchscreen."/>
-  <suffix name="GestureLongPress"
-      label="A GestureLongPress is sent when the user taps down and holds
-             their finger on a touchscreen."/>
-  <suffix name="GestureLongTap"
-      label="A GestureLongTap is sent when the user taps down on a
-             touchscreen, holds their finger for a while, then releases."/>
-  <suffix name="GesturePinchBegin"
-      label="A GesturePinchBegin is sent when a user starts a pinch zoom
-             motion on a touchscreen."/>
-  <suffix name="GesturePinchEnd"
-      label="A GesturePinchEnd is sent when the user releases their fingers
-             from the touchscreen after performing a pinch zoom motion."/>
-  <suffix name="GesturePinchUpdate"
-      label="GesturePinchUpdate events are sent while the user is performing
-             a pinch zoom motion on a touch screen. GesturePinchUpdate events
-             are sent as the user changes the distance between their fingers."/>
-  <suffix name="GestureScrollBegin"
-      label="A GestureScrollBegin is sent at the beginning of a gesture
-             scroll on a touchscreen."/>
-  <suffix name="GestureScrollEnd"
-      label="A GestureScrollEnd is sent when the user releases their finger
-             after a gesture scroll on a touchscreen."/>
-  <suffix name="GestureScrollUpdate"
-      label="GestureScrollUpdate events are sent as the user drags their
-             finger along the touchscreen during a gesture scroll."/>
-  <suffix name="GestureScrollUpdateWithoutPropagation"
-      label="GestureScrollUpdateWithoutPropagation events are scroll updates
-             that shouldn't bubble, generated by a gesture fling."/>
-  <suffix name="GestureShowPress"
-      label="A GestureShowPress event is sent when the user presses down on
-             the touchscreen but before a GestureTapDown."/>
-  <suffix name="GestureTap"
-      label="A GestureTap is sent when the user presses down and releases on
-             a touchscreen."/>
-  <suffix name="GestureTapUnconfirmed"
-      label="A GestureTapUnconfirmed is sent when the user taps the
-             touchscreen but, due to a delay, the GestureTap isn't sent yet."/>
-  <suffix name="GestureTapCancel"
-      label="A GestureTapCancel is sent to cancel a pending GestureTap event.
-             For example, if the user taps down but drags their finger
-             instead of releasing it."/>
-  <suffix name="GestureTapDown"
-      label="A GestureTapDown is sent when the user presses on the
-             touchscreen in what could potentially be a full GestureTap
-             event."/>
-  <suffix name="GestureTwoFingerTap"
-      label="A GestureTwoFingerTap is sent when the user presses down a
-             releases on a touchscreen with two fingers."/>
-  <suffix name="KeyDown"
-      label="A KeyDown event is sent when a keyboard key is pressed down."/>
-  <suffix name="KeyUp"
-      label="A KeyUp event is sent when a depressed keyboard key is released."/>
-  <suffix name="MouseDown"
-      label="A MouseDown event is sent when the user click down a mouse
-             button."/>
-  <suffix name="MouseEnter"
-      label="A MouseEnter event is sent when the mouse cursor enters the
-             renderer area."/>
-  <suffix name="MouseLeave"
-      label="A MouseLeave event is sent when the mouse cursor leaves the
-             renderer area."/>
-  <suffix name="MouseMove"
-      label="A MouseMove event is sent when the mouse cursor moves within the
-             renderer area."/>
-  <suffix name="MouseUp"
-      label="A MouseUp event is sent when a depressed mouse button is
-             released."/>
-  <suffix name="MouseWheel"
-      label="A MouseWheel event is sent when the user scrolls using the mouse
-             wheel within the renderer area."/>
-  <suffix name="RawKeyDown"
-      label="A RawKeyDown event is a wrapper around a native key event."/>
-  <suffix name="TouchCancel"
-      label="A TouchCancel is used to cancel an existing touch point. For
-             example, if the user drags a finger outside the bounds of the
-             renderer."/>
-  <suffix name="TouchEnd"
-      label="A TouchEnd is send when the user lifts a finger from the
-             touchscreen."/>
-  <suffix name="TouchMove"
-      label="A TouchMove is sent when the user moves a finger along the
-             touchscreen."/>
-  <suffix name="TouchStart"
-      label="A TouchStart is sent when the user first touches a finger to the
-             touchscreen."/>
-  <suffix name="Undefined" label="For unknown or undefined events."/>
-  <affected-histogram name="Event.Latency.Renderer"/>
-  <affected-histogram name="Event.Latency.Renderer2"/>
-  <affected-histogram name="Event.Latency.RendererImpl"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RendererMemoryAllocator" separator=".">
-  <suffix base="true" name="BlinkGC"
-      label="Constrained to the BlinkGC allocator"/>
-  <suffix base="true" name="Discardable"
-      label="Constrained to discardable memory usage"/>
-  <suffix base="true" name="Malloc" label="Constrained to malloc usage"/>
-  <suffix base="true" name="NonDiscardableTotalAllocated"
-      label="Summed over the PartitionAlloc, malloc, mainThreadIsolate() and
-             BlinkGC allocators"/>
-  <suffix base="true" name="PartitionAlloc"
-      label="Constrained to the PartitionAlloc allocator"/>
-  <suffix base="true" name="TotalAllocatedPerRenderView"
-      label="TotalAllocated divided by the number of RenderViews"/>
-  <suffix base="true" name="V8MainThreadIsolate"
-      label="Constrained to memory usage by mainThreadIsolate()"/>
-  <suffix base="true" name="TotalAllocated"
-      label="Summed over the PartitionAlloc, malloc, discardable memory,
-             mainThreadIsolate() and BlinkGC allocators"/>
-  <affected-histogram name="Memory.Experimental.Renderer"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RendererMemoryTiming" separator=".">
-  <suffix name="DidFinishLoad"
-      label="Recorded each time DidFinishLoad is called for *any* frame
-             within the page."/>
-  <suffix name="MainFrameDidFinishLoad"
-      label="Recorded when DidFinishLoad is called for the main frame."/>
-  <affected-histogram name="Memory.Experimental.Renderer.BlinkGC"/>
-  <affected-histogram name="Memory.Experimental.Renderer.Discardable"/>
-  <affected-histogram name="Memory.Experimental.Renderer.Malloc"/>
-  <affected-histogram
-      name="Memory.Experimental.Renderer.NonDiscardableTotalAllocated"/>
-  <affected-histogram name="Memory.Experimental.Renderer.PartitionAlloc"/>
-  <affected-histogram name="Memory.Experimental.Renderer.TotalAllocated"/>
-  <affected-histogram
-      name="Memory.Experimental.Renderer.TotalAllocatedPerRenderView"/>
-  <affected-histogram name="Memory.Experimental.Renderer.V8MainThreadIsolate"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RequestMediaKeySystemAccessKeySystems" separator=".">
-  <suffix name="ClearKey" label="Requests for the Clear Key key system."/>
-  <suffix name="Unknown"
-      label="Requests for an unknown or unsupported key system."/>
-  <suffix name="Widevine" label="Requests for the Widevine key system."/>
-  <affected-histogram name="Media.EME.RequestMediaKeySystemAccess"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="RequestThrottlerTypes">
-  <suffix name="SuggestionFetcher"
-      label="Fetcher for content suggestions on mobile NTP">
-    <obsolete>
-      Deprecated in 10/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="SuggestionFetcherRareNTPUser"
-      label="Fetcher for content suggestions on mobile NTP - rare NTP users"/>
-  <suffix name="SuggestionFetcherActiveNTPUser"
-      label="Fetcher for content suggestions on mobile NTP - active NTP users"/>
-  <suffix name="SuggestionFetcherActiveSuggestionsConsumer"
-      label="Fetcher for content suggestions on mobile NTP - active
-             suggestions consumers"/>
-  <suffix name="SuggestionThumbnailFetcher"
-      label="Fetcher for article thumbnails on mobile NTP"/>
-  <affected-histogram name="NewTabPage.RequestThrottler.PerDay"/>
-  <affected-histogram name="NewTabPage.RequestThrottler.PerDayInteractive"/>
-  <affected-histogram name="NewTabPage.RequestThrottler.RequestStatus"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourceLoaderSizeSlice" separator=".">
-  <suffix name="LT_2kB" label="Sliced for resources smaller than 2kB."/>
-  <suffix name="LT_32kB"
-      label="Sliced for resources smaller than 32kB and larger than 2kB."/>
-  <suffix name="LT_512kB"
-      label="Sliced for resources smaller than 512kB and larger than 32kB."/>
-  <suffix name="Over_512kB" label="Sliced for resources larger than 512kB."/>
-  <suffix name="InliningApplicable"
-      label="Resources that the chunk inlining is applicable."/>
-  <affected-histogram name="Net.ResourceLoader.ResponseStartToEnd"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorNetworkTypePrefetch"
-    separator=".">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="NotPrefetched"
-      label="Number of non-prefetched pages on each type of network."/>
-  <suffix name="Prefetched"
-      label="Number of prefetched pages on each type of network."/>
-  <affected-histogram name="ResourcePrefetchPredictor.NetworkType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorPLTNetworkTypes">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="2G" label="Page load time in 2G network."/>
-  <suffix name="3G" label="Page load time in 3G network."/>
-  <suffix name="4G" label="Page load time in 4G network."/>
-  <suffix name="Bluetooth" label="Page load time in bluetooth network."/>
-  <suffix name="Cellular" label="Page load time in cellular network."/>
-  <suffix name="Ethernet" label="Page load time in Ethernet."/>
-  <suffix name="None" label="Page load time without network connection."/>
-  <suffix name="Unknown" label="Page load time in unknown type of network."/>
-  <suffix name="WiFi" label="Page load time in WiFi network."/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT.NotPrefetched"/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Host"/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Url"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetch" separator=".">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="NotPrefetched"
-      label="Page load time for non-prefetched pages."/>
-  <suffix name="Prefetched" label="Page load time for prefetched pages."/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetchType"
-    separator=".">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="Host"
-      label="Page load time for prefetched pages based on main frame host."/>
-  <suffix name="Url"
-      label="Page load time for prefetched pages based on main frame URL."/>
-  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatsVariedMax">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="25"
-      label="Covers statistics when the maximum subresources that can be
-             prefetched is set to 25."/>
-  <suffix name="50"
-      label="Covers statistics when the maximum subresources that can be
-             prefetched is set to 50."/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_Count"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatTypes">
-  <obsolete>
-    Deprecated September 2016. No longer recorded.
-  </obsolete>
-  <suffix name="Count" label="Predicted accuracy stats as the raw numbers."/>
-  <suffix name="PercentOfTotalPrefetched"
-      label="Predicted accuracy stats as percent of total resources
-             prefetched."/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork"/>
-  <affected-histogram
-      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourceSchedulerClientBreakDown">
-  <obsolete>
-    Deprecated 1/2016
-  </obsolete>
-  <suffix name="1Client" label="One Client in the ResourceScheduler."/>
-  <suffix name="Max5Clients"
-      label="Two to five Clients in the ResourceScheduler."/>
-  <suffix name="Max15Clients"
-      label="Six to fifteen Clients in the ResourceScheduler."/>
-  <suffix name="Max30Clients"
-      label="Sixteen to thirty Clients in the ResourceScheduler."/>
-  <suffix name="Over30Clients"
-      label="Over thirty Clients in the ResourceScheduler."/>
-  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Active"/>
-  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Background"/>
-  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Other"/>
-  <affected-histogram
-      name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ResourceType" separator=".">
-  <suffix name="MainResource"/>
-  <suffix name="Image"/>
-  <suffix name="CSSStyleSheet"/>
-  <suffix name="Script"/>
-  <suffix name="Font"/>
-  <suffix name="Raw"/>
-  <suffix name="SVGDocument"/>
-  <suffix name="XSLStyleSheet"/>
-  <suffix name="LinkPrefetch"/>
-  <suffix name="LinkSubresource"/>
-  <suffix name="TextTrack"/>
-  <suffix name="ImportResource"/>
-  <suffix name="Media"/>
-  <suffix name="Manifest"/>
-  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy"/>
-  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"/>
-  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"/>
-  <affected-histogram name="PreloadScanner.Counts"/>
-  <affected-histogram name="PreloadScanner.Counts.Miss"/>
-  <affected-histogram name="PreloadScanner.Counts2"/>
-  <affected-histogram name="PreloadScanner.Counts2.Miss"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsing.V4Store.Metrics" separator=".">
-  <suffix name="AnyIpMalware" label="(Obsolete. Was: AnyIpMalware)"/>
-  <suffix name="CertCsdDownloadWhitelist"/>
-  <suffix name="ChromeExtMalware"/>
-  <suffix name="ChromeFilenameClientIncident"/>
-  <suffix name="ChromeUrlClientIncident"/>
-  <suffix name="IpMalware"/>
-  <suffix name="UrlCsdDownloadWhitelist"/>
-  <suffix name="UrlCsdWhitelist"/>
-  <suffix name="UrlMalware"/>
-  <suffix name="UrlMalBin"/>
-  <suffix name="UrlSoceng"/>
-  <suffix name="UrlUws"/>
-  <affected-histogram name="SafeBrowsing.V4Database.Size"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"/>
-  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"/>
-  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"/>
-  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"/>
-  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time"/>
-  <affected-histogram
-      name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"/>
-  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time"/>
-  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsingLists" separator=".">
-  <suffix name="Browse" label="Browse"/>
-  <suffix name="Download" label="Download"/>
-  <suffix name="CsdWhitelist" label="CsdWhitelist"/>
-  <suffix name="DownloadWhitelist" label="DownloadWhitelist"/>
-  <suffix name="InclusionWhitelist" label="InclusionWhitelist"/>
-  <suffix name="ExtensionBlacklist" label="ExtensionBlacklist"/>
-  <suffix name="SideEffectFreeWhitelist" label="SideEffectFreeWhitelist">
-    <obsolete>
-      Deprecated 4/2015.
-    </obsolete>
-  </suffix>
-  <suffix name="IPBlacklist" label="IPBlacklist"/>
-  <suffix name="UnwantedSoftware" label="UnwantedSoftware"/>
-  <suffix name="ResourceBlacklist" label="ResourceBlacklist"/>
-  <affected-histogram name="SB2.DatabaseSizeKilobytes"/>
-  <affected-histogram name="SB2.PrefixSetSizeKilobytes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsingScoutGroupValues" separator=".">
-  <suffix name="NoScoutGroup"
-      label="User sees the legacy Extended Reporting opt-in"/>
-  <suffix name="ScoutGroup"
-      label="User sees the new Extended Reporting opt-in"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsingScoutInterstitialDecisions" separator=".">
-  <suffix name="First_LeftUnchecked"
-      label="User saw opt-in for first time and left it unchecked"/>
-  <suffix name="First_Enabled"
-      label="User saw opt-in for first time and enabled it"/>
-  <suffix name="First_Disabled"
-      label="User saw opt-in for first time and disabled it"/>
-  <suffix name="Repeat_LeftEnabled"
-      label="User saw opt-in again and left it enabled"/>
-  <suffix name="Repeat_Disabled"
-      label="User saw opt-in again and changed it to disabled"/>
-  <suffix name="Repeat_Enabled"
-      label="User saw opt-in again and changed it to enabled"/>
-  <suffix name="Repeat_LeftDisabled"
-      label="User saw opt-in again and left it disabled"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.Decision"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsingScoutOptInLocations" separator=".">
-  <suffix name="ChromeSettings" label="The settings UI on Desktop"/>
-  <suffix name="AndroidSettings" label="The settings UI on Android"/>
-  <suffix name="DownloadPopup" label="The Download Feedback popup"/>
-  <suffix name="SecurityInterstitial"
-      label="One of the Security Interstitials (malware, SSL, etc)"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref.SBER1Pref"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref.SBER2Pref"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SafeBrowsingScoutPrefValues" separator=".">
-  <suffix name="SBER1Pref" label="Value of the legacy Extended Reporting pref"/>
-  <suffix name="SBER2Pref" label="Value of the new Extended Reporting pref"/>
-  <affected-histogram name="SafeBrowsing.Pref.SawInterstitial"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.NoScoutGroup"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.ScoutGroup"/>
-  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SameVersionStartupCounts" separator=".">
-  <suffix name="1" label="1st startup with same version"/>
-  <suffix name="2" label="2nd startup with same version"/>
-  <suffix name="3" label="3rd startup with same version"/>
-  <suffix name="4" label="4th startup with same version"/>
-  <suffix name="5" label="5th startup with same version"/>
-  <suffix name="6" label="6th startup with same version"/>
-  <suffix name="7" label="7th startup with same version"/>
-  <suffix name="8" label="8th startup with same version"/>
-  <suffix name="9" label="9th startup with same version"/>
-  <suffix name="Over" label="&gt; 9th startup with same version"/>
-  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartHardFaultCount"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
-  <affected-histogram name="Startup.BrowserOpenTabs"/>
-  <affected-histogram name="Startup.BrowserWindowDisplay"/>
-  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
-  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
-  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
-  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
-  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
-  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
-  <affected-histogram name="Startup.SystemUptime"/>
-  <affected-histogram name="Startup.Temperature"/>
-  <affected-histogram name="Startup.TimeSinceLastStartup"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SB2ResourceTypes" separator=".">
-  <suffix name="Checked"
-      label="Resources that were checked. Logged before the resource starts
-             loading and again for each redirect."/>
-  <suffix name="Safe"
-      label="Resources that were checked and deemed safe. Logged when the URL
-             check is completed.">
-    <obsolete>
-      Deprecated in 9/2016.
-    </obsolete>
-  </suffix>
-  <suffix name="Skipped"
-      label="Resources that were not checked because they are not active-ish
-             content types. Only used on mobile. Logged before the resource
-             request starts."/>
-  <suffix name="Unsafe"
-      label="Resources that were checked and classified as unsafe. Logged
-             when the URL check is completed."/>
-  <suffix name="UnsafePrefetchCanceled"
-      label="Pre-fetched resources that were checked and classified as
-             unsafe. Logged as the request is canceled."/>
-  <affected-histogram name="SB2.ResourceTypes"/>
-  <affected-histogram name="SB2.ResourceTypes2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SBInterstitial">
-  <obsolete>
-    deprecated November 10 2012 crrev.com/167056
-  </obsolete>
-  <suffix name="V1" label="version 1 interstitial"/>
-  <suffix name="V2" label="version 2 interstitial"/>
-  <affected-histogram name="SB2.InterstitialAction"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimeClosed"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimeDiagnostic"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimeLearnMore"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimePrivacyPolicy"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimeProceed"/>
-  <affected-histogram name="SB2.MalwareInterstitialTimeTakeMeBack"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ScreenshareLayerStats" separator=".">
-  <suffix name="FrameRate"
-      label="Frames per second sent, in fps. The value is reported when a
-             stream is removed and is calculated as the total number of
-             frames in this layer, divided by the duration of the call."/>
-  <suffix name="Qp"
-      label="Average quantizer (qp) of frames sent. The value is reported
-             when a stream is removed and is calculated, for this layer, as
-             the sum of all qp values divided the number of frames."/>
-  <suffix name="TargetBitrate"
-      label="Average target bitrate in kbps. The value is reported when a
-             stream is removed and is calculated as the sum of all target
-             bitrates for this layer (sampled after frame has been encoded)
-             divided by the total number of frames for this layer."/>
-  <affected-histogram name="WebRTC.Video.Screenshare.Layer0"/>
-  <affected-histogram name="WebRTC.Video.Screenshare.Layer1"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ScrollUpdateHandledThread">
-  <suffix name="Main" label="ScrollUpdate handled on main thread"/>
-  <suffix name="Impl" label="ScrollUpdate handled on impl thread"/>
-  <affected-histogram
-      name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2"/>
-  <affected-histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2"/>
-  <affected-histogram
-      name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2"/>
-  <affected-histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2"/>
-  <affected-histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"/>
-  <affected-histogram
-      name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"/>
-  <affected-histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"/>
-  <affected-histogram name="Event.Latency.ScrollUpdate.TouchToHandled"/>
-  <affected-histogram
-      name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"/>
-  <affected-histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SecurityInterstitialSBType" separator="."
-    ordering="prefix">
-  <suffix name="harmful"/>
-  <suffix name="harmful_subresource"/>
-  <suffix name="malware"/>
-  <suffix name="malware_subresource"/>
-  <suffix name="phishing"/>
-  <suffix name="phishing_subresource"/>
-  <suffix name="social_engineering_ads"/>
-  <suffix name="social_engineering_ads_subresource"/>
-  <suffix name="social_engineering_landing"/>
-  <suffix name="social_engineering_landing_subresource"/>
-  <affected-histogram name="interstitial.decision"/>
-  <affected-histogram name="interstitial.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.interaction"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SecurityInterstitialSBWithSourceType" separator=".">
-  <suffix name="from_data_saver"
-      label="Interstitial for a resource classified as unsafe by the Data
-             Saver service."/>
-  <suffix name="from_device"
-      label="Interstitial for a resource classified as unsafe by the Safe
-             Browsing database via either
-             {Local,Remote}SafeBrowsingDatabaseManager."/>
-  <suffix name="from_device_v4"
-      label="Interstitial for a resource classified as unsafe by the Safe
-             Browsing database version 4 via either
-             {Local,Remote}SafeBrowsingDatabaseManager."/>
-  <suffix name="from_client_side_detection"
-      label="Interstitial for a resource classified as unsafe by the client
-             side detection."/>
-  <affected-histogram name="interstitial.harmful.decision"/>
-  <affected-histogram name="interstitial.harmful.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.harmful.interaction"/>
-  <affected-histogram name="interstitial.harmful_subresource.decision"/>
-  <affected-histogram
-      name="interstitial.harmful_subresource.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.harmful_subresource.interaction"/>
-  <affected-histogram name="interstitial.malware.decision"/>
-  <affected-histogram name="interstitial.malware.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.malware.interaction"/>
-  <affected-histogram name="interstitial.malware_subresource.decision"/>
-  <affected-histogram
-      name="interstitial.malware_subresource.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.malware_subresource.interaction"/>
-  <affected-histogram name="interstitial.phishing.decision"/>
-  <affected-histogram name="interstitial.phishing.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.phishing.interaction"/>
-  <affected-histogram name="interstitial.phishing_subresource.decision"/>
-  <affected-histogram
-      name="interstitial.phishing_subresource.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.phishing_subresource.interaction"/>
-  <affected-histogram name="interstitial.social_engineering_ads.decision"/>
-  <affected-histogram
-      name="interstitial.social_engineering_ads.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.social_engineering_ads.interaction"/>
-  <affected-histogram
-      name="interstitial.social_engineering_ads_subresource.decision"/>
-  <affected-histogram
-      name="interstitial.social_engineering_ads_subresource.decision.repeat_visit"/>
-  <affected-histogram
-      name="interstitial.social_engineering_ads_subresource.interaction"/>
-  <affected-histogram name="interstitial.social_engineering_landing.decision"/>
-  <affected-histogram
-      name="interstitial.social_engineering_landing.decision.repeat_visit"/>
-  <affected-histogram
-      name="interstitial.social_engineering_landing.interaction"/>
-  <affected-histogram
-      name="interstitial.social_engineering_landing_subresource.decision"/>
-  <affected-histogram
-      name="interstitial.social_engineering_landing_subresource.decision.repeat_visit"/>
-  <affected-histogram
-      name="interstitial.social_engineering_landing_subresource.interaction"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SecurityInterstitialSSLType" separator="."
-    ordering="prefix">
-  <suffix name="bad_clock"/>
-  <suffix name="ssl_nonoverridable"/>
-  <suffix name="ssl_overridable"/>
-  <affected-histogram name="interstitial.decision"/>
-  <affected-histogram name="interstitial.decision.repeat_visit"/>
-  <affected-histogram name="interstitial.interaction"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.ContextRequestType" separator=".">
-  <suffix name="InstalledWorker.MainScript"
-      label="Main script for an installed worker"/>
-  <suffix name="InstalledWorker.ImportedScript"
-      label="Imported script for an installed worker"/>
-  <suffix name="NewWorker.MainScript"
-      label="Main script for a new (not installed) worker"/>
-  <suffix name="NewWorker.ImportedScript"
-      label="Imported script for new (not installed) worker"/>
-  <affected-histogram name="ServiceWorker.ContextRequestHandlerStatus"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.EventType">
-  <suffix name="ACTIVATE" label="ACTIVATE"/>
-  <suffix name="INSTALL" label="INSTALL"/>
-  <suffix name="SYNC" label="SYNC"/>
-  <suffix name="NOTIFICATION_CLICK" label="NOTIFICATION_CLICK"/>
-  <suffix name="PUSH" label="PUSH"/>
-  <suffix name="GEOFENCING" label="GEOFENCING">
-    <obsolete>
-      Deprecated as of 5/2016 because geofencing got removed.
-    </obsolete>
-  </suffix>
-  <suffix name="MESSAGE" label="MESSAGE"/>
-  <suffix name="NOTIFICATION_CLOSE" label="NOTIFICATION_CLOSE"/>
-  <suffix name="FETCH_MAIN_FRAME" label="FETCH_MAIN_FRAME"/>
-  <suffix name="FETCH_SUB_FRAME" label="FETCH_SUB_FRAME"/>
-  <suffix name="FETCH_SHARED_WORKER" label="FETCH_SHARED_WORKER"/>
-  <suffix name="FETCH_SUB_RESOURCE" label="FETCH_SUB_RESOURCE"/>
-  <suffix name="UNKNOWN" label="UNKNOWN"/>
-  <suffix name="FOREIGN_FETCH" label="FOREIGN_FETCH"/>
-  <suffix name="NAVIGATION_HINT_LINK_MOUSE_DOWN"
-      label="NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
-  <suffix name="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"
-      label="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
-  <suffix name="NAVIGATION_HINT_LINK_TAP_DOWN"
-      label="NAVIGATION_HINT_LINK_TAP_DOWN"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay"/>
-  <affected-histogram name="ServiceWorker.StartWorker.StatusByPurpose"/>
-  <affected-histogram name="ServiceWorker.StartWorker.Time_DuringStartup"/>
-  <affected-histogram name="ServiceWorker.StartWorker.Time_ExistingProcess"/>
-  <affected-histogram name="ServiceWorker.StartWorker.Time_NewProcess"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.FailureStreak">
-  <suffix name="1" label="Failed one time."/>
-  <suffix name="2" label="Failed two times."/>
-  <suffix name="3" label="Failed three times."/>
-  <affected-histogram name="ServiceWorker.StartWorker.AfterFailureStreak"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.NavigationHint" separator=".">
-  <suffix name="LINK_MOUSE_DOWN" label="LINK_MOUSE_DOWN"/>
-  <suffix name="LINK_TAP_UNCONFIRMED" label="LINK_TAP_UNCONFIRMED"/>
-  <suffix name="LINK_TAP_DOWN" label="LINK_TAP_DOWN"/>
-  <affected-histogram name="ServiceWorker.NavigationHintPrecision"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.NavigationHintLatency">
-  <suffix name="IsRunningNavigationHintTask"
-      label="Starting a service worker for a navigation hint."/>
-  <affected-histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"/>
-  <affected-histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.ShutdownStatus">
-  <suffix name="InShutdown" label="Browser shutdown started."/>
-  <suffix name="NotInShutdown" label="Browser shutdown has not started."/>
-  <affected-histogram name="ServiceWorker.ActivateEventStatus"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.StartSituation">
-  <suffix name="DuringStartup"
-      label="The worker started up during browser startup."/>
-  <suffix name="NewProcess"
-      label="A new process was created for the worker (or is asyncly being
-             created, depending on the histogram)."/>
-  <suffix name="ExistingProcess"
-      label="An existing process was used for the worker."/>
-  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript"/>
-  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache"/>
-  <affected-histogram
-      name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"/>
-  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network"/>
-  <affected-histogram
-      name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker"/>
-  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread"/>
-  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob"/>
-  <affected-histogram name="ServiceWorker.StartWorker.Time"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorker.WorkerPreparationMode">
-  <suffix name="StartWorkerDuringStartup"
-      label="Started a worker during browser startup."/>
-  <suffix name="StartWorkerNewProcess"
-      label="Started a worker in a new process."/>
-  <suffix name="StartWorkerExistingProcess"
-      label="Started a worker in an existing process."/>
-  <suffix name="StartingWorker"
-      label="The activated worker was already starting up."/>
-  <suffix name="RunningWorker"
-      label="The activated worker was already running."/>
-  <suffix name="StoppingWorker" label="The activated worker was stopping."/>
-  <affected-histogram
-      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorkerCache.Cache" separator=".">
-  <suffix name="Batch"
-      label="The time to perform the 'batch' operation on a ServiceWorker
-             Cache, which batches other basic operations."/>
-  <suffix name="Keys"
-      label="The time to perform the 'keys' operation on a ServiceWorker
-             Cache, which returns all of the keys in the cache."/>
-  <suffix name="Match"
-      label="The time to perform the 'match' operation on a ServiceWorker
-             Cache, which does a lookup."/>
-  <suffix name="MatchAll"
-      label="The time to perform the 'matchAll' operation on a ServiceWorker
-             Cache, which does a mass cache lookup."/>
-  <affected-histogram name="ServiceWorkerCache.Cache"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorkerCache.CacheStorage" separator=".">
-  <suffix name="Delete"
-      label="The time to perform the 'delete' operation on a ServiceWorker
-             CacheStorage, which deletes a cache."/>
-  <suffix name="Has"
-      label="The time to perform the 'has' operation on a ServiceWorker
-             CacheStorage, which returns if the cache exists."/>
-  <suffix name="Keys"
-      label="The time to perform the 'keys' operation on a ServiceWorker
-             CacheStorage, which returns all of the cache names."/>
-  <suffix name="Match"
-      label="The time to perform the 'match' operation on a ServiceWorker
-             CacheStorage, which does a shortcut cache lookup."/>
-  <suffix name="Open"
-      label="The time to perform the 'open' operation on a ServiceWorker
-             CacheStorage, which gets or creates a cache."/>
-  <affected-histogram name="ServiceWorkerCache.CacheStorage"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorkerScheduler" separator="."
-    ordering="prefix">
-  <suffix name="CacheStorage" label="Collected from a CacheStorage instance"/>
-  <suffix name="Cache" label="Collected from a CacheStorageCache instance"/>
-  <suffix name="BackgroundSyncManager"
-      label="Collected from a BackgroundSyncManager instance"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueLength"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ServiceWorkerSpecialAppsForEventDispatchingDelay"
-    separator=".">
-  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
-  <suffix name="gmail" label="Custom histogram for GMail"/>
-  <suffix name="inbox" label="Custom histogram for Inbox"/>
-  <suffix name="ntp" label="Custom histogram for New Tab Page"/>
-  <suffix name="plus" label="Custom histogram for Google+"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_ACTIVATE"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_FETCH_MAIN_FRAME"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_FETCH_SHARED_WORKER"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_FRAME"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_RESOURCE"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_FOREIGN_FETCH"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_GEOFENCING"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_INSTALL"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_MESSAGE"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_DOWN"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLICK"/>
-  <affected-histogram
-      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLOSE"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_PUSH"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_SYNC"/>
-  <affected-histogram name="ServiceWorker.EventDispatchingDelay_UNKNOWN"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SessionRestoreTabCountMemoryPressure">
-  <suffix name="MemoryPressure"
-      label="Total tabs involved in session restore that encountered memory
-             pressure."/>
-  <suffix name="MemoryPressure_Loaded"
-      label="Tabs fully loaded before memory pressure."/>
-  <suffix name="MemoryPressure_LoadStarted"
-      label="Tabs started to load before memory pressure."/>
-  <suffix name="MemoryPressure_Deferred"
-      label="Tabs deferred by memory pressure."/>
-  <suffix name="NoMemoryPressure"
-      label="Total tabs involved in a session restore that did not encounter
-             memory pressure."/>
-  <suffix name="NoMemoryPressure_Loaded"
-      label="Tabs fully loaded in a session restore that did not encounter
-             memory pressure."/>
-  <suffix name="NoMemoryPressure_LoadStarted"
-      label="Tabs started to load in a session restore that did not encounter
-             memory pressure."/>
-  <affected-histogram name="SessionRestore.TabCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SessionRestoreTabCounts">
-  <suffix name="1" label="1 tab present"/>
-  <suffix name="2" label="2 tabs present"/>
-  <suffix name="3" label="3 tabs present"/>
-  <suffix name="4" label="4 tabs present"/>
-  <suffix name="5" label="5 tabs present"/>
-  <suffix name="6" label="6 tabs present"/>
-  <suffix name="7" label="7 tabs present"/>
-  <suffix name="8" label="8 tabs present"/>
-  <suffix name="9" label="9 tabs present"/>
-  <suffix name="10" label="10 tabs present"/>
-  <suffix name="11" label="11 tab present"/>
-  <suffix name="12" label="12 tabs present"/>
-  <suffix name="13" label="13 tabs present"/>
-  <suffix name="14" label="14 tabs present"/>
-  <suffix name="15" label="15 tabs present"/>
-  <suffix name="16" label="16 tabs present"/>
-  <suffix name="17" label="17 tabs present"/>
-  <suffix name="18" label="18 tabs present"/>
-  <suffix name="19" label="19 tabs present"/>
-  <suffix name="20" label="20 tabs present"/>
-  <affected-histogram name="SessionRestore.AllTabsLoaded"/>
-  <affected-histogram name="SessionRestore.FirstTabPainted"/>
-  <affected-histogram name="SessionRestore.ForegroundTabFirstLoaded"/>
-  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint"/>
-  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint2"/>
-  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint3"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SettingsResetPromptSettingType">
-  <suffix name="DefaultSearch" label="Reset state for default search engine."/>
-  <suffix name="StartupUrls" label="Reset state for startup URLs."/>
-  <suffix name="Homepage" label="Reset state for homepage."/>
-  <affected-histogram name="SettingsResetPrompt.ResetState"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SetupInstallTimes" separator=".">
-  <suffix name="background" label="Background; lowered priority."/>
-  <affected-histogram name="Setup.Install.ApplyArchivePatchTime"/>
-  <affected-histogram name="Setup.Install.HasArchivePatch"/>
-  <affected-histogram name="Setup.Install.UncompressArchivePatchTime"/>
-  <affected-histogram name="Setup.Install.UncompressFullArchiveTime"/>
-  <affected-histogram name="Setup.Install.UnpackFullArchiveTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ShillWiFiRememberedNetworkSecurityMode" separator=".">
-  <suffix name="802_1x" label="Network is secured with 802.1x"/>
-  <suffix name="none" label="Network is not secured"/>
-  <suffix name="psk" label="Network is security with WPA or WPA-2 (aka RSN)"/>
-  <suffix name="wep" label="Network employs WEP (Wired Equivalent Privacy)"/>
-  <affected-histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount"/>
-  <affected-histogram name="Network.Shill.WiFi.RememberedUserNetworkCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="ShowAppListWarmStartFast" separator="">
-  <suffix name="" label="Normal start."/>
-  <suffix name="Fast"
-      label="Fast start by skipping normal chrome.dll startup."/>
-  <affected-histogram name="Startup.ShowAppListWarmStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SideloadWipeout">
-  <suffix name="Enabled" label="Sideload Wipeout Active."/>
-  <suffix name="Disabled" label="Control group."/>
-  <affected-histogram name="DisabledExtension.ExtensionWipedStatus"/>
-  <affected-histogram name="DisabledExtension.SideloadWipeoutCount"/>
-  <affected-histogram name="DisabledExtension.SideloadWipeoutNeeded"/>
-  <affected-histogram name="DisabledExtension.UserSelection"/>
-  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
-  <affected-histogram name="Extensions.InstallSource"/>
-  <affected-histogram name="Extensions.UpdateSource"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Signin.Actions" separator=".">
-  <suffix name="AllAccessPointActions"/>
-  <suffix name="AndroidAccountConsistencyFirstRunActions"
-      label="Signin Flow shown on android after Account Consistency flag was
-             enabled."/>
-  <affected-histogram name="Signin"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Signin.ObsoleteActions" separator=".">
-  <obsolete>
-    Deprecated as of 12/2014.
-  </obsolete>
-  <suffix name="AppLauncherActions"/>
-  <suffix name="ExtensionInstallBubbleActions"/>
-  <suffix name="MenuActions"/>
-  <suffix name="NTPLinkActions"/>
-  <suffix name="OneClickActions"/>
-  <suffix name="SettingsActions"/>
-  <suffix name="StartPageActions"/>
-  <suffix name="UnknownActions"/>
-  <affected-histogram name="Signin"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Signin.Reconciler" separator=".">
-  <suffix name="FirstRun"
-      label="First execution of the reconciler after the profile was loaded
-             or the new_profile_management flag was toggled."/>
-  <suffix name="SubsequentRun"
-      label="Execution of the reconciler triggered by some other change of
-             state."/>
-  <affected-histogram name="Signin.Reconciler.AddedToChrome"/>
-  <affected-histogram name="Signin.Reconciler.AddedToCookieJar"/>
-  <affected-histogram name="Signin.Reconciler.DifferentPrimaryAccounts"/>
-  <affected-histogram name="Signin.Reconciler.RemovedFromCookieJar"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Signin.Reconciler.Duration" separator=".">
-  <suffix name="Success" label="Successful execution of reconciler"/>
-  <suffix name="Failure" label="Failed execution of reconciler"/>
-  <affected-histogram name="Signin.Reconciler.Duration"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SimpleCacheWithOrWithoutIndex">
-  <suffix name="WithIndex" label="The Simple Cache index was loaded."/>
-  <suffix name="WithoutIndex"
-      label="The Simple Cache index was not yet loaded."/>
-  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
-  <affected-histogram name="SimpleCache.SyncCreateResult"/>
-  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
-  <affected-histogram name="SimpleCache.SyncOpenResult"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SkiaDrawScaleFactorFilterQuality" separator=".">
-  <suffix name="AnyFilterQuality" label="Any filter quality was used."/>
-  <suffix name="HighFilterQuality" label="High filter quality was used."/>
-  <suffix name="LowFilterQuality" label="Low filter quality was used."/>
-  <suffix name="MediumFilterQuality" label="Medium filter quality was used."/>
-  <suffix name="NoneFilterQuality" label="None filter quality was used."/>
-  <affected-histogram name="Skia.DrawScaleFactor"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SocketOperation" separator=".">
-  <suffix name="Connect"/>
-  <suffix name="Read"/>
-  <suffix name="Write"/>
-  <affected-histogram name="Net.SSLProtocolErrorCipher"/>
-  <affected-histogram name="Net.SSLProtocolErrorReason"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SocketType">
-  <obsolete>
-    Deprecated as of 03/2015.
-  </obsolete>
-  <suffix name="HTTPProxy" label="HTTP proxy socket"/>
-  <suffix name="SOCK" label="SOCKS socket"/>
-  <suffix name="SSL" label="(Obsolete, SSL socket)"/>
-  <suffix name="SSL2" label="SSL2 socket"/>
-  <suffix name="SSLForProxies"
-      label="SSLClientSocket wrapping the TCPClient socket eventually used
-             for connection to a proxy"/>
-  <suffix name="SSLforHTTPSProxy"
-      label="SSLClientSocket wrapping the TCPClient socket eventually used
-             for connection to an HTTPS proxy"/>
-  <suffix name="TCP" label="plain, no proxy, no SSL socket"/>
-  <suffix name="TCPforHTTPProxy"
-      label="TCPClientSocket eventually used for connection to an HTTP proxy"/>
-  <suffix name="TCPforHTTPSProxy"
-      label="TCPClientSocket eventually used for connection to an HTTPS proxy"/>
-  <suffix name="TCPforSOCKS"
-      label="TCPClientSocket eventually used for connection to a SOCKS proxy"/>
-  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
-  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
-  <affected-histogram name="Net.SocketInitErrorCodes"/>
-  <affected-histogram name="Net.SocketRequestTime"/>
-  <affected-histogram name="Net.SocketType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SoftwareReporterEngine">
-  <suffix name="Original"/>
-  <suffix name="Experimental"/>
-  <affected-histogram name="SoftwareReporter.FoundUwSReadError"/>
-  <affected-histogram name="SoftwareReporter.LogsUploadEnabled"/>
-  <affected-histogram name="SoftwareReporter.LogsUploadResult"/>
-  <affected-histogram name="SoftwareReporter.LogsUploadResultRegistryError"/>
-  <affected-histogram name="SoftwareReporter.MajorVersion"/>
-  <affected-histogram name="SoftwareReporter.MemoryUsed"/>
-  <affected-histogram name="SoftwareReporter.MinorVersion"/>
-  <affected-histogram name="SoftwareReporter.RunningTime"/>
-  <affected-histogram name="SoftwareReporter.RunningTimeAccordingToChrome"/>
-  <affected-histogram name="SoftwareReporter.RunningTimeRegistryError"/>
-  <affected-histogram name="SoftwareReporter.Step"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SpdyCwnd">
-  <obsolete>
-    Deprecated as of 07/2014.
-  </obsolete>
-  <owner>willchan@chromium.org</owner>
-  <suffix name="cwnd32" label="using cwnd policy static 32"/>
-  <suffix name="cwnd10" label="using cwnd policy static 10"/>
-  <suffix name="cwnd16" label="using cwnd policy static 16"/>
-  <suffix name="cwndMin16" label="using dynamic cwnd policy no lower than 16"/>
-  <suffix name="cwndMin10" label="using dynamic cwnd policy no lower than 10"/>
-  <suffix name="cwndDynamic" label="using dynamic cwnd policy"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SpdyImpact">
-  <suffix name="npn_with_http"
-      label="with NPN negotiated but using HTTP instead of SPDY"/>
-  <suffix name="npn_with_spdy" label="with NPN negotiated and using SPDY"/>
-  <affected-histogram name="Net.Transaction_Connected"/>
-  <affected-histogram name="Net.Transaction_Connected_New"/>
-  <affected-histogram name="Net.Transaction_Connected_New_b"/>
-  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
-  <affected-histogram name="PLT.Abandoned"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
-  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SpdySettingsCwnd" separator="">
-  <suffix name="10K" label="where at least 10KB was transferred."/>
-  <suffix name="25K" label="where at least 25KB was transferred."/>
-  <suffix name="50K" label="where at least 50KB was transferred."/>
-  <suffix name="100K" label="where at least 100KB was transferred."/>
-  <affected-histogram name="Net.SpdySettingsCwnd"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SqliteDatabases" separator=".">
-  <owner>shess@chromium.org</owner>
-  <suffix name="Activity" label="Activity"/>
-  <suffix name="Affiliation" label="Affiliation"/>
-  <suffix name="AppCache" label="AppCache"/>
-  <suffix name="BookmarkImages" label="BookmarkImages"/>
-  <suffix name="Cookie" label="Cookie"/>
-  <suffix name="DatabaseTracker" label="DatabaseTracker"/>
-  <suffix name="DomainBoundCerts" label="DomainBoundCerts"/>
-  <suffix name="DOMStorageDatabase" label="DOMStorageDatabase"/>
-  <suffix name="History" label="History"/>
-  <suffix name="OfflinePageMetadata" label="OfflinePageMetadata"/>
-  <suffix name="Passwords" label="Passwords"/>
-  <suffix name="Predictor" label="Predictor"/>
-  <suffix name="PreviewsOptOut" label="PreviewsOptOut"/>
-  <suffix name="Quota" label="Quota"/>
-  <suffix name="Shortcuts" label="Shortcuts"/>
-  <suffix name="SyncDirectory" label="SyncDirectory"/>
-  <suffix name="Text" label="Text (obsolete 7/24/13)"/>
-  <suffix name="Thumbnail" label="Thumbnail"/>
-  <suffix name="TopSites" label="TopSites"/>
-  <suffix name="Web" label="Web"/>
-  <affected-histogram name="Sqlite.AutoCommitTime"/>
-  <affected-histogram name="Sqlite.CommitTime"/>
-  <affected-histogram name="Sqlite.Error"/>
-  <affected-histogram name="Sqlite.QueryTime"/>
-  <affected-histogram name="Sqlite.SizeKB"/>
-  <affected-histogram name="Sqlite.Stats"/>
-  <affected-histogram name="Sqlite.UpdateTime"/>
-  <affected-histogram name="Sqlite.Version"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SqliteVfsOperations" separator="_">
-  <owner>shess@chromium.org</owner>
-  <suffix name="Fetch" label="fetch"/>
-  <suffix name="Read" label="read"/>
-  <suffix name="Write" label="write"/>
-  <affected-histogram name="Sqlite.Vfs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SSLFalseStart">
-  <obsolete>
-    Removed 2011-06-01.
-  </obsolete>
-  <suffix name="FalseStart_enabled"/>
-  <suffix name="FalseStart_disabled"/>
-  <affected-histogram name="Net.SSL_Connection_Latency"/>
-  <affected-histogram name="Net.SSL_Connection_Latency_2"/>
-  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
-  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StartupProfilingAbandonState">
-  <suffix name="NoPaint" label="Abandoned before first paint."/>
-  <suffix name="NoLoad" label="Abandoned before first main frame load."/>
-  <affected-histogram name="Startup.FirstWebContents.FinishReason"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StartupTemperature" separator=".">
-  <suffix name="ColdStartup" label="Startup was cold (mostly hard faults)."/>
-  <suffix name="WarmStartup" label="Startup was warm (almost no hard faults)."/>
-  <suffix name="LukewarmStartup" label="Startup was neither warm nor cold."/>
-  <affected-histogram
-      name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"/>
-  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
-  <affected-histogram
-      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"/>
-  <affected-histogram
-      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
-  <affected-histogram name="Startup.BrowserOpenTabs"/>
-  <affected-histogram name="Startup.BrowserWindowDisplay"/>
-  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad"/>
-  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
-  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
-  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
-  <affected-histogram
-      name="Startup.FirstWebContents.MainNavigationStart.MultiTabs"/>
-  <affected-histogram
-      name="Startup.FirstWebContents.MainNavigationStart.SingleTab"/>
-  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint"/>
-  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
-  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
-  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
-  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
-  <affected-histogram name="Startup.SystemUptime"/>
-  <affected-histogram name="Startup.TimeSinceLastStartup"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StartupTimeBombAlarm" separator=".">
-  <obsolete>
-    Deprecated as of 10/2014.
-  </obsolete>
-  <suffix name="ThreadNowDuration" label="Duration is in thread CPU time."/>
-  <suffix name="TimeDuration" label="Duration is in clock time."/>
-  <suffix name="TimeTicksDuration" label="Duration is in TimeTicks time."/>
-  <affected-histogram name="StartupTimeBomb.Alarm"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StartupWorkload" separator=".">
-  <suffix name="SingleTab" label="Single tab instantiated on startup."/>
-  <suffix name="MultiTabs" label="Multiple tabs instantiated on startup."/>
-  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StartWorkerExistingProcess">
-  <suffix name="StartWorkerExistingProcess"
-      label="The worker started up in an existing process"/>
-  <affected-histogram name="ServiceWorker.NavigationPreload.ConcurrentTime"/>
-  <affected-histogram
-      name="ServiceWorker.NavigationPreload.ConcurrentTime_NavPreloadFirst"/>
-  <affected-histogram
-      name="ServiceWorker.NavigationPreload.ConcurrentTime_SWStartFirst"/>
-  <affected-histogram
-      name="ServiceWorker.NavigationPreload.FinishedBeforeStartWorker"/>
-  <affected-histogram
-      name="ServiceWorker.NavigationPreload.NavPreloadAfterSWStart"/>
-  <affected-histogram
-      name="ServiceWorker.NavigationPreload.SWStartAfterNavPreload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Storage.BlobAppendableItems" separator=".">
-  <suffix name="Bytes" label="Appending bytes."/>
-  <suffix name="File" label="Appending a file with a known size."/>
-  <suffix name="FileSystem"
-      label="Appending a filesystem object with known size."/>
-  <suffix name="Blob" label="Appending a blob."/>
-  <suffix name="CacheEntry" label="Appending a cache entry."/>
-  <affected-histogram name="Storage.BlobItemSize"/>
-  <affected-histogram name="Storage.BlobItemSize.BlobSlice"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="StunPingInternal" separator=".">
-  <suffix name="0ms" label="0ms between requests"/>
-  <suffix name="5ms" label="5ms between requests"/>
-  <suffix name="10ms" label="10ms between requests"/>
-  <suffix name="15ms" label="15ms between requests"/>
-  <suffix name="20ms" label="20ms between requests"/>
-  <suffix name="25ms" label="25ms between requests"/>
-  <suffix name="30ms" label="30ms between requests"/>
-  <suffix name="35ms" label="35ms between requests"/>
-  <suffix name="40ms" label="40ms between requests"/>
-  <suffix name="45ms" label="45ms between requests"/>
-  <suffix name="50ms" label="50ms between requests"/>
-  <suffix name="100ms" label="100ms between requests"/>
-  <affected-histogram name="WebRTC.Stun.ResponseLatency.NoNAT"/>
-  <affected-histogram name="WebRTC.Stun.ResponseLatency.NonSymNAT"/>
-  <affected-histogram name="WebRTC.Stun.ResponseLatency.SymNAT"/>
-  <affected-histogram name="WebRTC.Stun.ResponseLatency.UnknownNAT"/>
-  <affected-histogram name="WebRTC.Stun.SuccessPercent.NoNAT"/>
-  <affected-histogram name="WebRTC.Stun.SuccessPercent.NonSymNAT"/>
-  <affected-histogram name="WebRTC.Stun.SuccessPercent.SymNAT"/>
-  <affected-histogram name="WebRTC.Stun.SuccessPercent.UnknownNAT"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SyncModelType" separator=".">
-  <suffix name="APP" label="APP"/>
-  <suffix name="APP_LIST" label="APP_LIST"/>
-  <suffix name="APP_NOTIFICATION" label="APP_NOTIFICATION"/>
-  <suffix name="APP_SETTING" label="APP_SETTING"/>
-  <suffix name="ARTICLE" label="ARTICLE"/>
-  <suffix name="AUTOFILL" label="AUTOFILL"/>
-  <suffix name="AUTOFILL_PROFILE" label="AUTOFILL_PROFILE"/>
-  <suffix name="AUTOFILL_WALLET" label="AUTOFILL_WALLET"/>
-  <suffix name="AUTOFILL_WALLET_METADATA" label="AUTOFILL_WALLET_METADATA"/>
-  <suffix name="BOOKMARK" label="BOOKMARK"/>
-  <suffix name="DEVICE_INFO" label="DEVICE_INFO"/>
-  <suffix name="DICTIONARY" label="DICTIONARY"/>
-  <suffix name="EXPERIMENTS" label="EXPERIMENTS"/>
-  <suffix name="EXTENSION" label="EXTENSION"/>
-  <suffix name="EXTENSION_SETTING" label="EXTENSION_SETTING"/>
-  <suffix name="FAVICON_IMAGE" label="FAVICON_IMAGE"/>
-  <suffix name="FAVICON_TRACKING" label="FAVICON_TRACKING"/>
-  <suffix name="HISTORY_DELETE_DIRECTIVE" label="HISTORY_DELETE_DIRECTIVE"/>
-  <suffix name="MANAGED_USER" label="MANAGED_USER"/>
-  <suffix name="MANAGED_USER_SETTING" label="MANAGED_USER_SETTING"/>
-  <suffix name="MANAGED_USER_SHARED_SETTING"
-      label="MANAGED_USER_SHARED_SETTING"/>
-  <suffix name="MANAGED_USER_WHITELIST" label="MANAGED_USER_WHITELIST"/>
-  <suffix name="NIGORI" label="NIGORI"/>
-  <suffix name="PASSWORD" label="PASSWORD"/>
-  <suffix name="PREFERENCE" label="PREFERENCE"/>
-  <suffix name="SEARCH_ENGINE" label="SEARCH_ENGINE"/>
-  <suffix name="SESSION" label="SESSION"/>
-  <suffix name="SYNCED_NOTIFICATION" label="SYNCED_NOTIFICATION"/>
-  <suffix name="SYNCED_NOTIFICATION_APP_INFO"
-      label="SYNCED_NOTIFICATION_APP_INFO"/>
-  <suffix name="PRIORITY_PREFERENCE" label="PRIORITY_PREFERENCE"/>
-  <suffix name="THEME" label="THEME"/>
-  <suffix name="TYPED_URL" label="TYPED_URL"/>
-  <suffix name="USER_EVENT" label="USER_EVENT"/>
-  <suffix name="WIFI_CREDENTIAL" label="WIFI_CREDENTIAL"/>
-  <affected-histogram name="Sync.ModelTypeCount"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="SyzygyStartupTime">
-  <obsolete>
-    No longer logged.
-  </obsolete>
-  <suffix name="PreReadEnabled"/>
-  <suffix name="PreReadDisabled"/>
-  <suffix name="XP_PreReadEnabled"/>
-  <suffix name="XP_PreReadDisabled"/>
-  <suffix name="PreRead_0"/>
-  <suffix name="PreRead_5"/>
-  <suffix name="PreRead_10"/>
-  <suffix name="PreRead_15"/>
-  <suffix name="PreRead_20"/>
-  <suffix name="PreRead_25"/>
-  <suffix name="PreRead_30"/>
-  <suffix name="PreRead_35"/>
-  <suffix name="PreRead_40"/>
-  <suffix name="PreRead_45"/>
-  <suffix name="PreRead_50"/>
-  <suffix name="PreRead_55"/>
-  <suffix name="PreRead_60"/>
-  <suffix name="PreRead_65"/>
-  <suffix name="PreRead_70"/>
-  <suffix name="PreRead_75"/>
-  <suffix name="PreRead_80"/>
-  <suffix name="PreRead_85"/>
-  <suffix name="PreRead_90"/>
-  <suffix name="PreRead_95"/>
-  <suffix name="PreRead_100"/>
-  <suffix name="XP_PreRead_0"/>
-  <suffix name="XP_PreRead_5"/>
-  <suffix name="XP_PreRead_10"/>
-  <suffix name="XP_PreRead_15"/>
-  <suffix name="XP_PreRead_20"/>
-  <suffix name="XP_PreRead_25"/>
-  <suffix name="XP_PreRead_30"/>
-  <suffix name="XP_PreRead_35"/>
-  <suffix name="XP_PreRead_40"/>
-  <suffix name="XP_PreRead_45"/>
-  <suffix name="XP_PreRead_50"/>
-  <suffix name="XP_PreRead_55"/>
-  <suffix name="XP_PreRead_60"/>
-  <suffix name="XP_PreRead_65"/>
-  <suffix name="XP_PreRead_70"/>
-  <suffix name="XP_PreRead_75"/>
-  <suffix name="XP_PreRead_80"/>
-  <suffix name="XP_PreRead_85"/>
-  <suffix name="XP_PreRead_90"/>
-  <suffix name="XP_PreRead_95"/>
-  <suffix name="XP_PreRead_100"/>
-  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
-  <affected-histogram name="Startup.BrowserOpenTabs"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TabNewTabOnload" separator=".">
-  <suffix name="Local" label="Local New Tab page."/>
-  <suffix name="Google" label="New Tab page for Google."/>
-  <suffix name="Other" label="New Tab page for a non-Google provider."/>
-  <affected-histogram name="Tab.NewTabOnload"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Tabs.SwitchLatency">
-  <suffix name="Perceived"
-      label="The time it takes to show something on the screen after the user
-             selects a tab. This might be a fake snapshot or it might just be
-             the time it takes to show the real content if no snapshot was
-             available."/>
-  <suffix name="Actual"
-      label="The time it takes to show a real live frame from the renderer on
-             the screen after the user selects a tab. This doesn not include
-             fake snapshots or other tricks, but the actual time to get real
-             interactable content displayed."/>
-  <affected-histogram name="Tabs.SwitchFromCloseLatency"/>
-  <affected-histogram name="Tabs.SwitchFromExitLatency"/>
-  <affected-histogram name="Tabs.SwitchFromNewLatency"/>
-  <affected-histogram name="Tabs.SwitchFromUserLatency"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TaskSchedulerMayBlock" separator=".">
-  <suffix name="MayBlock"
-      label="Applies to tasks posted with MayBlock() or
-             WithBaseSyncPrimitives()."/>
-  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundTaskPriority"/>
-  <affected-histogram
-      name="TaskScheduler.TaskLatency.UserBlockingTaskPriority"/>
-  <affected-histogram name="TaskScheduler.TaskLatency.UserVisibleTaskPriority"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TaskSchedulerTaskPriority" separator=".">
-  <suffix name="BackgroundTaskPriority"
-      label="Applies to tasks posted with a BACKGROUND priority."/>
-  <suffix name="UserVisibleTaskPriority"
-      label="Applies to tasks posted with a USER_VISIBLE priority."/>
-  <suffix name="UserBlockingTaskPriority"
-      label="Applies to tasks posted with a USER_BLOCKING priority."/>
-  <affected-histogram name="TaskScheduler.TaskLatency"/>
-  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundFileIOPool">
-    <obsolete>
-      Deprecated 12/2016. Pool name removed from task latency histogram name.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundPool">
-    <obsolete>
-      Deprecated 12/2016. Pool name removed from task latency histogram name.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundFileIOPool">
-    <obsolete>
-      Deprecated 12/2016. Pool name removed from task latency histogram name.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundPool">
-    <obsolete>
-      Deprecated 12/2016. Pool name removed from task latency histogram name.
-    </obsolete>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="TaskSchedulerWorkerPool" separator=".">
-  <suffix name="BackgroundBlockingPool"
-      label="Applies to the BackgroundBlocking worker pool."/>
-  <suffix name="BackgroundFileIOPool"
-      label="Applies to the BackgroundFileIO worker pool.">
-    <obsolete>
-      Deprecated 02/2017. Pool was renamed to BackgroundBlocking.
-    </obsolete>
-  </suffix>
-  <suffix name="BackgroundPool" label="Applies to the Background worker pool."/>
-  <suffix name="ForegroundBlockingPool"
-      label="Applies to the ForegroundBlocking worker pool."/>
-  <suffix name="ForegroundFileIOPool"
-      label="Applies to the ForegroundFileIO worker pool.">
-    <obsolete>
-      Deprecated 02/2017. Pool was renamed to ForegroundBlocking.
-    </obsolete>
-  </suffix>
-  <suffix name="ForegroundPool" label="Applies to the Foreground worker pool."/>
-  <suffix name="RendererBackgroundBlockingPool"
-      label="Applies to the RendererBackgroundBlocking worker pool."/>
-  <suffix name="RendererBackgroundPool"
-      label="Applies to the RendererBackground worker pool."/>
-  <suffix name="RendererForegroundBlockingPool"
-      label="Applies to the RendererForegroundBlocking worker pool."/>
-  <suffix name="RendererForegroundPool"
-      label="Applies to the RendererForeground worker pool."/>
-  <affected-histogram name="TaskScheduler.DetachDuration"/>
-  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach"/>
-  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits"/>
-  <affected-histogram name="TaskScheduler.TaskLatency">
-    <obsolete>
-      Deprecated 12/2016. Pool name removed from task latency histogram name.
-    </obsolete>
-  </affected-histogram>
-</histogram_suffixes>
-
-<histogram_suffixes name="ThreadWatcher" separator=".">
-  <suffix name="CACHE" label="where watched thread is CACHE BrowserThread."/>
-  <suffix name="DB" label="where watched thread is DB BrowserThread."/>
-  <suffix name="FILE" label="where watched thread is FILE BrowserThread."/>
-  <suffix name="IO" label="where watched thread is IO BrowserThread."/>
-  <suffix name="UI" label="where watched thread is UI BrowserThread."/>
-  <affected-histogram name="ThreadWatcher.ResponseTime"/>
-  <affected-histogram name="ThreadWatcher.ResponsiveThreads"/>
-  <affected-histogram name="ThreadWatcher.Unresponsive"/>
-  <affected-histogram name="ThreadWatcher.UnresponsiveThreads"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TimestampTimebaseProcess" separator=".">
-  <suffix name="Browser"/>
-  <suffix name="Renderer"/>
-  <affected-histogram name="Event.TimestampHasValidTimebase"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TotalTimeToHttpsGoogle" separator=".">
-  <suffix name="Quic">
-    <obsolete>
-      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.Quic instead.
-    </obsolete>
-  </suffix>
-  <suffix name="NotQuic">
-    <obsolete>
-      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.NotQuic instead.
-    </obsolete>
-  </suffix>
-  <suffix name="Secure.Quic"
-      label="Recorded for Google servers (https) only when QUIC is used."/>
-  <suffix name="Secure.NotQuic"
-      label="Recorded for Google servers (https) only when QUIC is not used."/>
-  <affected-histogram name="Net.HttpJob.TotalTime"/>
-  <affected-histogram name="Net.HttpJob.TotalTimeCached">
-    <obsolete>
-      Deprecated 10/2016, no longer used.
-    </obsolete>
-  </affected-histogram>
-  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="Tps65090Fets" separator=".">
-  <suffix name="Fet1" label="FET1 on tps65090 (register 0xf)"/>
-  <suffix name="Fet2" label="FET2 on tps65090 (register 0x10)"/>
-  <suffix name="Fet3" label="FET3 on tps65090 (register 0x11)"/>
-  <suffix name="Fet4" label="FET4 on tps65090 (register 0x12)"/>
-  <suffix name="Fet5" label="FET5 on tps65090 (register 0x13)"/>
-  <suffix name="Fet6" label="FET6 on tps65090 (register 0x14)"/>
-  <suffix name="Fet7" label="FET7 on tps65090 (register 0x15)"/>
-  <affected-histogram name="Platform.Tps65090Retries"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TrackedPreferencesExternalValidators" separator=".">
-  <suffix name="FromRegistry"
-      label="Validation using MACs in the Windows Registry."/>
-  <affected-histogram name="Settings.TrackedPreferenceChanged"/>
-  <affected-histogram name="Settings.TrackedPreferenceCleared"/>
-  <affected-histogram name="Settings.TrackedPreferenceInitialized"/>
-  <affected-histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"/>
-  <affected-histogram name="Settings.TrackedPreferenceNullInitialized"/>
-  <affected-histogram name="Settings.TrackedPreferenceTrustedInitialized"/>
-  <affected-histogram name="Settings.TrackedPreferenceUnchanged"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TrackedSplitPreferences" separator=".">
-  <suffix name="extensions.settings" label="Extension IDs dictionary"/>
-  <affected-histogram name="Settings.TrackedSplitPreferenceChanged"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="TrafficStatsAmortizerBytesDirection" separator=".">
-  <suffix name="Tx" label="Records only transmitted network bytes."/>
-  <suffix name="Rx" label="Records only received network bytes."/>
-  <affected-histogram
-      name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"/>
-  <affected-histogram
-      name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="UnackedPackets" separator=".">
-  <obsolete>
-    Deprecated as of 08/2016.
-  </obsolete>
-  <suffix name="UnackedPackets"
-      label="The session had outstanding unacked packets."/>
-  <suffix name="NoUnackedPackets"
-      label="The session had no outstanding unacked packets."/>
-  <affected-histogram
-      name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="UnPackConsumer">
-  <suffix name="ChromeArchivePatch"
-      label="compressed patch: chrome_patch.packed.7z holding
-             chrome_patch.diff (small)."/>
-  <suffix name="CompressedChromeArchive"
-      label="compressed archive: chrome.packed.7z holding chrome.7z (big)."/>
-  <suffix name="SetupExePatch"
-      label="compressed patch: setup_patch.packed.7z holding setup_patch.diff
-             (small)."/>
-  <suffix name="UncompressedChromeArchive"
-      label="uncompressed archive: chrome.7z holding install dir (big)."/>
-  <affected-histogram name="Setup.Install.LzmaUnPackNTSTATUS"/>
-  <affected-histogram name="Setup.Install.LzmaUnPackStatus"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="V8SpecialApps" separator=".">
-  <suffix name="calendar" label="Custom histogram for Calendar"/>
-  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
-  <suffix name="gmail" label="Custom histogram for GMail"/>
-  <suffix name="inbox" label="Custom histogram for Inbox"/>
-  <suffix name="plus" label="Custom histogram for Google+"/>
-  <suffix name="top10"
-      label="Custom histogram for Alexa's Top10 non-Google sites"/>
-  <suffix name="youtube" label="Custom histogram for Youtube"/>
-  <affected-histogram name="V8.MemoryExternalFragmentationTotal"/>
-  <affected-histogram name="V8.MemoryHeapCommitted"/>
-  <affected-histogram name="V8.MemoryHeapSampleTotalCommitted"/>
-  <affected-histogram name="V8.MemoryHeapSampleTotalUsed"/>
-  <affected-histogram name="V8.MemoryHeapUsed"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="VideoEncodedQpStats" separator=".">
-  <suffix name="H264"
-      label="Video codec: H264. QP range: 0-51. No spatial layers."/>
-  <suffix name="Vp8"
-      label="Video codec: VP8. QP range: 0-127. Single stream sent."/>
-  <suffix name="Vp8.S0"
-      label="Video codec: VP8. QP range: 0-127. Spatial index 0."/>
-  <suffix name="Vp8.S1"
-      label="Video codec: VP8. QP range: 0-127. Spatial index 1."/>
-  <suffix name="Vp8.S2"
-      label="Video codec: VP8. QP range: 0-127. Spatial index 2."/>
-  <suffix name="Vp9"
-      label="Video codec: VP9. QP range: 0-255. No spatial layers."/>
-  <suffix name="Vp9.S0"
-      label="Video codec: VP9. QP range: 0-255. Spatial layer 0."/>
-  <suffix name="Vp9.S1"
-      label="Video codec: VP9. QP range: 0-255. Spatial layer 1."/>
-  <suffix name="Vp9.S2"
-      label="Video codec: VP9. QP range: 0-255. Spatial layer 2."/>
-  <affected-histogram name="WebRTC.Video.Encoded.Qp"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="VRSessionType" separator=".">
-  <suffix name="Browser"
-      label="The session is restricted to the period that the browser is
-             displaying a regular page."/>
-  <suffix name="Fullscreen"
-      label="The session is restricted to the period that the browser is
-             displaying fullscreen content."/>
-  <suffix name="WebVR"
-      label="The session is restricted to the period that browser is
-             displaying WebVR contents."/>
-  <affected-histogram name="VRSessionTime"/>
-  <affected-histogram name="VRSessionVideoTime"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebFontFamily">
-  <suffix name="roboto" label="Roboto font"/>
-  <suffix name="opensans" label="Open Sans font"/>
-  <suffix name="others" label="Fonts other than Roboto and Open Sans"/>
-  <affected-histogram name="WebFont.DiskCache.EntryAge.Evict"/>
-  <affected-histogram name="WebFont.DiskCache.EntryAge.Hit"/>
-  <affected-histogram name="WebFont.DiskCache.ReuseCount.Evict"/>
-  <affected-histogram name="WebFont.DiskCache.ReuseCount.Hit"/>
-  <affected-histogram name="WebFont.DiskCacheHit"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebFontFormat" separator=".">
-  <suffix name="SFNT" label="TrueType or OpenType fonts"/>
-  <suffix name="WOFF" label="WOFF 1.0 fonts"/>
-  <suffix name="WOFF2" label="WOFF 2.0 fonts"/>
-  <affected-histogram name="WebFont.DecodeSpeed"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebFontMissedCache" separator="." ordering="prefix">
-  <owner>toyoshim@chromium.org</owner>
-  <suffix name="MissedCache" label="On missed cache"/>
-  <affected-histogram name="WebFont.DownloadTime.0.Under10KB"/>
-  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
-  <affected-histogram name="WebFont.DownloadTime.2.50KBTo100KB"/>
-  <affected-histogram name="WebFont.DownloadTime.3.100KBTo1MB"/>
-  <affected-histogram name="WebFont.DownloadTime.4.Over1MB"/>
-  <affected-histogram name="WebFont.DownloadTime.LoadError"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebFontMissedCacheAndInterventionTriggeredOrNot"
-    separator="." ordering="prefix">
-  <owner>toyoshim@chromium.org</owner>
-  <suffix name="MissedCacheAndInterventionNotTriggered"
-      label="On missed cache and intervention not triggered"/>
-  <suffix name="MissedCacheAndInterventionTriggered"
-      label="On missed cache and intervention triggered"/>
-  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
-  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebRTCEchoCancellerStatisticType" separator=".">
-  <suffix name="Average" label="The average over the time interval"/>
-  <suffix name="Max" label="The maximum over the time interval"/>
-  <suffix name="Min" label="The minimum over the time interval"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand0"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand1"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErlBand0"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErlBand1"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErleBand0"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErleBand1"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand0"/>
-  <affected-histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand1"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebRTCMediaType" separator=".">
-  <suffix name="Audio" label="Audio"/>
-  <suffix name="Video" label="Video"/>
-  <suffix name="Data" label="Data"/>
-  <affected-histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"/>
-  <affected-histogram name="WebRTC.PeerConnection.SslCipherSuite"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebSocketMessageSizeReceive" separator=".">
-  <suffix name="ArrayBuffer"/>
-  <suffix name="Blob"/>
-  <affected-histogram name="WebCore.WebSocket.MessageSize.Receive"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebSocketMessageSizeSend" separator=".">
-  <suffix name="ArrayBuffer"/>
-  <suffix name="ArrayBufferView"/>
-  <suffix name="Blob"/>
-  <affected-histogram name="WebCore.WebSocket.MessageSize.Send"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WebStoreLinkExperiment">
-  <suffix name="Disabled" label="Neither extra webstore link is visible"/>
-  <suffix name="FooterLink" label="Link in bottom right of footer"/>
-  <suffix name="PlusIcon" label="Plus icon in apps page"/>
-  <affected-histogram name="Extensions.AppLaunch"/>
-  <affected-histogram name="NewTabPage.DefaultPageType"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WeekdayNames">
-  <suffix name="Monday"/>
-  <suffix name="Tuesday"/>
-  <suffix name="Wednesday"/>
-  <suffix name="Thursday"/>
-  <suffix name="Friday"/>
-  <suffix name="Saturday"/>
-  <suffix name="Sunday"/>
-  <affected-histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WelcomeWin10Variant">
-  <owner>tmartino@chromium.org</owner>
-  <suffix name="InlineCombined" label="Inline layout style, combined promo"/>
-  <suffix name="InlineDefault"
-      label="Inline layout style, default browser promo only"/>
-  <suffix name="SectionedCombined"
-      label="Sectioned layout style, combined promo"/>
-  <suffix name="SectionedDefault"
-      label="Sectioned layout style, default browser promo only"/>
-  <affected-histogram name="Welcome.Win10.DefaultPromptResult"/>
-  <affected-histogram name="Welcome.Win10.PinnedPromptResult"/>
-</histogram_suffixes>
-
-<histogram_suffixes name="WrenchMenuActionTimings" separator=".">
-  <suffix name="NewTab"/>
-  <suffix name="NewWindow"/>
-  <suffix name="NewIncognitoWindow"/>
-  <suffix name="ShowBookmarkBar"/>
-  <suffix name="ShowBookmarkMgr"/>
-  <suffix name="ImportSettings"/>
-  <suffix name="BookmarkPage"/>
-  <suffix name="BookmarkAllTabs"/>
-  <suffix name="PinToStartScreen"/>
-  <suffix name="RestoreTab"/>
-  <suffix name="WinDesktopRestart"/>
-  <suffix name="Win8MetroRestart"/>
-  <suffix name="ChromeOSRestart"/>
-  <suffix name="DistillPage"/>
-  <suffix name="SavePage"/>
-  <suffix name="Find"/>
-  <suffix name="Print"/>
-  <suffix name="Cut"/>
-  <suffix name="Copy"/>
-  <suffix name="Paste"/>
-  <suffix name="CreateHostedApp"/>
-  <suffix name="CreateShortcuts"/>
-  <suffix name="ManageExtensions"/>
-  <suffix name="TaskManager"/>
-  <suffix name="ClearBrowsingData"/>
-  <suffix name="ViewSource"/>
-  <suffix name="DevTools"/>
-  <suffix name="DevToolsConsole"/>
-  <suffix name="DevToolsDevices"/>
-  <suffix name="ProfilingEnabled"/>
-  <suffix name="ZoomMinus"/>
-  <suffix name="ZoomPlus"/>
-  <suffix name="EnterFullScreen"/>
-  <suffix name="ShowHistory"/>
-  <suffix name="ShowDownloads"/>
-  <suffix name="ShowSyncSetup"/>
-  <suffix name="Settings"/>
-  <suffix name="About"/>
-  <suffix name="HelpPage"/>
-  <suffix name="Feedback"/>
-  <suffix name="RequestTabletSite"/>
-  <suffix name="Exit"/>
-  <suffix name="OpenBookmark"/>
-  <suffix name="OpenRecentTab"/>
-  <suffix name="BookmarkOpen">
-    <obsolete>
-      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenBookmark
-      instead.
-    </obsolete>
-  </suffix>
-  <suffix name="RecentTab">
-    <obsolete>
-      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenRecentTab
-      instead.
-    </obsolete>
-  </suffix>
-  <suffix name="Cast"/>
-  <affected-histogram name="WrenchMenu.TimeToAction"/>
-</histogram_suffixes>
-
-</histogram_suffixes_list>
-
-</histogram-configuration>
diff --git a/src/tools/metrics/histograms/histograms.xml b/src/tools/metrics/histograms/histograms.xml
index 04429b4..1383139 100644
--- a/src/tools/metrics/histograms/histograms.xml
+++ b/src/tools/metrics/histograms/histograms.xml
@@ -9486,6 +9486,14 @@
   <owner>lizeb@chromium.org</owner>
   <summary>
     Time between the intent arrival to a Custom Tab and the first navigation
+    start, if the navigation is successful. Non-&quot;Herb&quot; mode.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.IntentToFirstCommitNavigationTime3" units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Time between the intent arrival to a Custom Tab and the first navigation
     commit, if the navigation is successful. Similar in principle to
     Startup.FirstCommitNavigationTime. Non-&quot;Herb&quot; mode.
   </summary>
@@ -10661,6 +10669,25 @@
   </summary>
 </histogram>
 
+<histogram name="DataUse.FavIcon.Downstream" units="bytes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the downstream network data use of favicon requests. Logged when the
+    request is completed or redirected. Zero bytes are recorded when the request
+    is served from cache.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.FavIcon.Downstream.Non200Response" units="bytes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the downstream network data use of favicon requests with non 200
+    response code. Logged when the request is completed or redirected.
+  </summary>
+</histogram>
+
 <histogram name="DataUse.MessageSize" units="bytes">
   <owner>amohammadkhan@chromium.org</owner>
   <owner>bengr@chromium.org</owner>
@@ -10951,6 +10978,29 @@
   </summary>
 </histogram>
 
+<histogram name="DelayNavigationThrottle.Delay.Actual" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The actual delay added to main frame navigations by DelayNavigationThrottle.
+  </summary>
+</histogram>
+
+<histogram name="DelayNavigationThrottle.Delay.Delta" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The absolute delta between the specified and actual delays added to main
+    frame navigations by DelayNavigationThrottle.
+  </summary>
+</histogram>
+
+<histogram name="DelayNavigationThrottle.Delay.Specified" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The specified delay added to main frame navigations by
+    DelayNavigationThrottle.
+  </summary>
+</histogram>
+
 <histogram name="DesktopIOSPromotion.DismissalReason"
     enum="DesktopIOSPromotionDismissalReason">
   <owner>mrefaat@chromium.org</owner>
@@ -11587,6 +11637,13 @@
   </summary>
 </histogram>
 
+<histogram name="Dialog.Creation" enum="DialogName">
+  <owner>pdyson@chromium.org</owner>
+  <summary>
+    Counts the number times various types of dialog boxes are created.
+  </summary>
+</histogram>
+
 <histogram name="DirectWrite.Fonts.BuildCache.File.Size" units="KB">
   <owner>shrikant@chromium.org</owner>
   <summary>
@@ -12738,6 +12795,9 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.DBSizeInKB" units="KB">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>
     The size, on disk, of the domain bound cert database as it is being loaded.
@@ -12745,11 +12805,17 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.GenerateCertTime" units="ms">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>Time spent generating a domain bound cert.</summary>
 </histogram>
 
 <histogram name="DomainBoundCerts.GetCertTime" units="ms">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>
     Combined time for GetDomainBoundCert retrieval (both synchronous and
@@ -12758,6 +12824,9 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>
     Time for asynchronous retrieval (from the GetDomainBoundCert call until
@@ -12766,6 +12835,9 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.GetCertTimeSync" units="ms">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>Time for synchronous GetDomainBoundCert cert retrieval.</summary>
 </histogram>
@@ -12794,6 +12866,9 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>
     Longest time spent by requests waiting for load of domain bound cert
@@ -12802,6 +12877,9 @@
 </histogram>
 
 <histogram name="DomainBoundCerts.TaskWaitCount">
+  <obsolete>
+    Removed 4/2017.
+  </obsolete>
   <owner>mattm@chromium.org</owner>
   <summary>
     Number of requests that waited for load of domain bound cert database.
@@ -13820,6 +13898,23 @@
   </summary>
 </histogram>
 
+<histogram name="Download.ParallelDownloadAddStreamSuccess"
+    enum="BooleanSuccess">
+  <owner>xingliu@chromium.org</owner>
+  <summary>
+    Records if the byte stream reader of a subsequent request is successfully
+    added to the download sink.
+  </summary>
+</histogram>
+
+<histogram name="Download.ParallelDownloadRequestCount" units="requests">
+  <owner>xingliu@chromium.org</owner>
+  <summary>
+    The total number of requests sent for a parallel download, including the
+    initial request.
+  </summary>
+</histogram>
+
 <histogram name="Download.PotentialBandwidth" units="Bytes/second">
   <obsolete>
     Deprecated January 2017.
@@ -19920,6 +20015,18 @@
   </summary>
 </histogram>
 
+<histogram name="Extensions.ShouldAllowOpenURL.Failure.Scheme"
+    enum="ShouldAllowOpenURLFailureScheme">
+  <owner>alexmos@chromium.org</owner>
+  <summary>
+    When the web-accessible resource check in
+    ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL fails, this
+    records the scheme of the SiteInstance that initiated the blocked load. This
+    check is performed on navigations that utilize the OpenURL path as well as
+    on transfers.
+  </summary>
+</histogram>
+
 <histogram name="Extensions.StartupDelay" units="ms">
   <owner>asargent@chromium.org</owner>
   <summary>The time one extension delays network requests at startup.</summary>
@@ -21290,6 +21397,42 @@
   <summary>Http response codes in NetworkLocationRequest.</summary>
 </histogram>
 
+<histogram base="true" name="Geolocation.SettingsDialog.AcceptEvent"
+    enum="GeolocationSettingsDialogBackOff">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the backoff level when the Location Settings Dialog is accepted by
+    the user.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Geolocation.SettingsDialog.DenyEvent"
+    enum="GeolocationSettingsDialogBackOff">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the backoff level when the Location Settings Dialog is rejected by
+    the user.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Geolocation.SettingsDialog.ShowEvent"
+    enum="GeolocationSettingsDialogBackOff">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the backoff level when the Location Settings Dialog is shown to the
+    user.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Geolocation.SettingsDialog.SuppressEvent"
+    enum="GeolocationSettingsDialogBackOff">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the backoff level when the Location Settings Dialog is suppressed
+    due to backoff.
+  </summary>
+</histogram>
+
 <histogram name="Geolocation.Timeout">
   <owner>mvanouwerkerk@chromium.org</owner>
   <summary>
@@ -21335,6 +21478,16 @@
   </summary>
 </histogram>
 
+<histogram name="GeolocationDisclosure.PostDisclosureDSESetting"
+    enum="BooleanAllowed">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the geolocation default search engine setting after the search
+    geolocation disclosure has been shown and won't be shown again. This metric
+    is only recorded once per client.
+  </summary>
+</histogram>
+
 <histogram name="GeolocationDisclosure.PostDisclosurePermission"
     enum="PermissionStatus">
   <obsolete>
@@ -21358,6 +21511,16 @@
   </summary>
 </histogram>
 
+<histogram name="GeolocationDisclosure.PreDisclosureDSESetting"
+    enum="BooleanAllowed">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the geolocation default search engine setting immediately before the
+    search geolocation disclosure has been shown. This metric is only recorded
+    once per client.
+  </summary>
+</histogram>
+
 <histogram name="GeolocationDisclosure.PreDisclosurePermission"
     enum="PermissionStatus">
   <obsolete>
@@ -21747,6 +21910,11 @@
   <summary>Whether or not a frame displays an overlay.</summary>
 </histogram>
 
+<histogram name="GPU.DirectComposition.SwapchainFormat" enum="SwapchainFormat">
+  <owner>jbauman@chromium.org</owner>
+  <summary>What type of swapchain was actually created for an overlay.</summary>
+</histogram>
+
 <histogram name="GPU.DoLinkProgramTime" units="ms">
   <owner>jmadill@chromium.org</owner>
   <summary>
@@ -27047,6 +27215,15 @@
   </summary>
 </histogram>
 
+<histogram name="Media.MediaElement.ContentTypeParseable"
+    enum="ContentTypeParseableResult">
+  <owner>jrummell@chromium.org</owner>
+  <summary>
+    Whether the content type provided to HTMLMediaElement would parse with
+    ParsedContentType or not.
+  </summary>
+</histogram>
+
 <histogram name="Media.MicrophoneMuted" enum="MicrophoneMuteResult">
   <owner>henrika@chromium.org</owner>
   <summary>
@@ -27564,6 +27741,91 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="Media.Timeline.DragGestureDuration" units="ms">
+<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The duration of the user gesture (how long their finger is down), recorded
+    at the end of each drag gesture. This histogram is split according to the
+    width of the slider track in CSS px - see histogram name suffix.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Media.Timeline.DragPercent"
+    enum="MediaTimelinePercent">
+<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The net distance the media scrubber moved, recorded at the end of each drag
+    gesture, as a percentage of the width of the slider track. This histogram is
+    split according to the width of the slider track in CSS px - see histogram
+    name suffix.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Media.Timeline.DragSumAbsTimeDelta"
+    enum="MediaTimelineAbsTimeDelta">
+<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The sum of absolute distances the media scrubber incrementally moved,
+    recorded at the end of each drag gesture, each measured as the change in
+    media current time. If the scrubber was dragged back and forth before being
+    released, this will be larger than the value recorded for
+    Media.Timeline.DragTimeDelta (and may even be larger than the media
+    duration), otherwise it will be the same as DragTimeDelta. This histogram is
+    split according to the width of the slider track in CSS px - see histogram
+    name suffix.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Media.Timeline.DragTimeDelta"
+    enum="MediaTimelineTimeDelta">
+<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The net distance the media scrubber moved, recorded at the end of each drag
+    gesture, measured as the change in media current time. This histogram is
+    split according to the width of the slider track in CSS px - see histogram
+    name suffix.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Media.Timeline.SeekType"
+    enum="MediaTimelineSeekType">
+<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The type of user gesture, recorded at the end of each input sequence. For
+    example holding down the right arrow key with the scrubber focused will only
+    be logged as a single event. This histogram is split according to the width
+    of the slider track in CSS px - see histogram name suffix.
+  </summary>
+</histogram>
+
+<histogram name="Media.Timeline.Width" units="CSS px">
+<!-- Name completed by histogram_suffixes name="MediaElementConfigurations" -->
+
+  <owner>johnme@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The width of the media timeline track in CSS pixels, recorded the first time
+    a media element with controls starts playing (strictly speaking, it's the
+    width in CSS pixels ignoring CSS transforms, multiplied by pageZoomFactor,
+    but deliberately ignoring pinch zoom's pageScaleFactor).
+  </summary>
+</histogram>
+
 <histogram name="Media.TimeToPipelineStarted" units="ms">
   <obsolete>
     Removed from code 2014/6/18.
@@ -29708,6 +29970,19 @@
   </summary>
 </histogram>
 
+<histogram name="MobileDownload.Notification.FixingSummaryLeak"
+    enum="BooleanForegroundNotification">
+  <owner>dtrainor@chromium.org</owner>
+  <summary>
+    Android: Records the situation where we try to fix a standalone downloads
+    summary notification, which shouldn't be visible to the user.  True if the
+    notification was a foreground notification, in which case we can't dismiss
+    it and need to attempt a more drastic workaround. False if it was a normal
+    notification and we can dismiss it easily (this is okay and expected
+    behavior in some scenarios).
+  </summary>
+</histogram>
+
 <histogram name="MobileFre.Progress" enum="MobileFreProgress">
   <owner>gogerald@chromium.org</owner>
   <summary>
@@ -29794,6 +30069,21 @@
   </summary>
 </histogram>
 
+<histogram name="MobileOmnibox.PressedClipboardSuggestionAge" units="ms">
+  <owner>jif@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    When a user presses an omnibox suggestion based on the content of the
+    clipboard, this histograms records how long ago Chrome detected a change in
+    the clipboard.
+
+    Intended to be compared to Omnibox.ClipboardSuggestionShownAge.
+
+    If Chrome never detected a change to the clipboard, no clipboard suggestion
+    is shown, meaning this histogram will never be emitted to.
+  </summary>
+</histogram>
+
 <histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction">
   <owner>mariakhomenko@chromium.org</owner>
   <summary>
@@ -37436,7 +37726,7 @@
   </summary>
 </histogram>
 
-<histogram name="Net.SSL_Connection_Error_Google" units="NetErrorCodes">
+<histogram name="Net.SSL_Connection_Error_Google" enum="NetErrorCodes">
   <owner>svaldez@chromium.org</owner>
   <summary>
     Counts of specific error codes returned when opening an SSL connection for
@@ -37444,8 +37734,7 @@
   </summary>
 </histogram>
 
-<histogram name="Net.SSL_Connection_Error_TLS13Experiment"
-    units="NetErrorCodes">
+<histogram name="Net.SSL_Connection_Error_TLS13Experiment" enum="NetErrorCodes">
   <owner>svaldez@chromium.org</owner>
   <summary>
     Counts of specific error codes returned when opening an SSL connection for
@@ -41374,6 +41663,10 @@
 </histogram>
 
 <histogram name="NewTabPage.IconsColor">
+  <obsolete>
+    Deprecated 2017-04, replaced by NewTabPage.TileType and
+    NewTabPage.SuggestionsImpression.IconsColor.
+  </obsolete>
   <owner>newt@chromium.org</owner>
   <summary>
     The number of most visited tiles on the new tab page that are displayed
@@ -41383,6 +41676,10 @@
 </histogram>
 
 <histogram name="NewTabPage.IconsGray">
+  <obsolete>
+    Deprecated 2017-04, replaced by NewTabPage.TileType and
+    NewTabPage.SuggestionsImpression.IconsGray.
+  </obsolete>
   <owner>newt@chromium.org</owner>
   <summary>
     The number of most visited tiles on the new tab page that are displayed as
@@ -41391,6 +41688,10 @@
 </histogram>
 
 <histogram name="NewTabPage.IconsReal">
+  <obsolete>
+    Deprecated 2017-04, replaced by NewTabPage.TileType and
+    NewTabPage.SuggestionsImpression.IconsReal.
+  </obsolete>
   <owner>newt@chromium.org</owner>
   <summary>
     The number of most visited tiles on the new tab page that are displayed with
@@ -42362,20 +42663,20 @@
   </summary>
 </histogram>
 
-<histogram name="NewTabPage.TileType" enum="MostVisitedTileType">
-  <owner>newt@chromium.org</owner>
+<histogram name="NewTabPage.TileType" enum="NTPTileVisualType">
+  <owner>mastiz@chromium.org</owner>
   <summary>
     The visual type of each most visited tile displayed on the new tab page,
     e.g. actual thumbnail or placeholder thumbnail. This is recorded for each
-    most visited item when the NTP is opened. Only measured on Android.
+    most visited item when the NTP is opened.
   </summary>
 </histogram>
 
-<histogram name="NewTabPage.TileTypeClicked" enum="MostVisitedTileType">
-  <owner>newt@chromium.org</owner>
+<histogram name="NewTabPage.TileTypeClicked" enum="NTPTileVisualType">
+  <owner>mastiz@chromium.org</owner>
   <summary>
     The visual type of the most visited item that the user clicked on, e.g.
-    actual thumbnail or placeholder thumbnail. Only measured on Android.
+    actual thumbnail or placeholder thumbnail.
   </summary>
 </histogram>
 
@@ -44299,6 +44600,22 @@
   </summary>
 </histogram>
 
+<histogram name="Omnibox.ClipboardSuggestionShownAge" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Recorded every time the omnibox is focussed and a recent URL from the user's
+    clipboard is suggested.  The value indicates the estimated age of the
+    clipboard.  (If Chrome observed the clipboard modification, this age is
+    exact.  If Chrome did not observe the modification, then it's a conservative
+    estimate: the last time Chrome observed a clipboard modification, which is
+    certainly older than the current clipboard.  If Chrome never observed a
+    clipboard modification, no clipboard suggestion is shown, meaning this
+    histogram will never be emitted to.)
+
+    Intended to be compared with MobileOmnibox.PressedClipboardSuggestionAge.
+  </summary>
+</histogram>
+
 <histogram name="Omnibox.ClipboardSuggestionShownWithCurrentURL"
     enum="BooleanPresent">
   <owner>mpearson@chromium.org</owner>
@@ -44754,6 +45071,65 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Omnibox.SuggestionUsed.Search.Experimental.ForegroundToFirstMeaningfulPaint.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from the page first appearing in the foreground to its
+    first meaningful paint. Only recorded on navigations that use a prerender
+    that is to a search query suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.Search.Experimental.NavigationToFirstMeaningfulPaint"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from navigation start to first meaningful paint. Only
+    recorded for a search query suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.Search.ForegroundToFirstContentfulPaint.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from the page first appearing in the foreground to its
+    first contentful paint. Only recorded on navigations that use a prerender
+    that is to a search query suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.Search.NavigationToFirstContentfulPaint"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from navigation start to first contentful paint. Only
+    recorded for a search query suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.Search.NavigationToFirstForeground.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from a page being navigated to in prerender to it first
+    showing up in foreground. Only recorded on navigations that used a prerender
+    that was to a search query suggestion selected from the omnibox. This is
+    only recorded on pages that experience a first contentful paint.
+  </summary>
+</histogram>
+
 <histogram name="Omnibox.SuggestionUsed.SearchVsUrl"
     enum="OmniboxSummarizedResultType">
   <owner>mpearson@google.com</owner>
@@ -44763,6 +45139,64 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Omnibox.SuggestionUsed.URL.Experimental.ForegroundToFirstMeaningfulPaint.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from the page first appearing in the foreground to its
+    first meaningful paint. Only recorded on navigations that use a prerender
+    that is to a URL suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.URL.Experimental.NavigationToFirstMeaningfulPaint"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from navigation start to first meaningful paint. Only
+    recorded for a URL suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.URL.ForegroundToFirstContentfulPaint.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from the page first appearing in the foreground to its
+    first contentful paint. Only recorded on navigations that use a prerender
+    that is to a URL suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestionUsed.URL.NavigationToFirstContentfulPaint"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from navigation start to first contentful paint. Only
+    recorded for a URL suggestion selected from the omnibox.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SuggestionUsed.URL.NavigationToFirstForeground.Prerender"
+    units="ms">
+  <owner>lpy@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Measures the time from a page being navigated to in prerender to it first
+    showing up in foreground. Only recorded on navigations that used a prerender
+    that was to a URL suggestion selected from the omnibox. This is only
+    recorded on pages that experience a first contentful paint.
+  </summary>
+</histogram>
+
 <histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime" units="ms">
   <owner>mpearson@chromium.org</owner>
   <summary>
@@ -47948,6 +48382,16 @@
   </summary>
 </histogram>
 
+<histogram name="PasswordProtection.NumberOfCachedVerdictBeforeShutdown"
+    units="count">
+  <owner>jialiul@chromium.org</owner>
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Number of password protection verdicts stored in content settings of a
+    profile before this profile is destructed.
+  </summary>
+</histogram>
+
 <histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode"
     enum="CombinedHttpResponseAndNetErrorCode">
   <owner>jialiul@chromium.org</owner>
@@ -62397,6 +62841,9 @@
 
 <histogram name="Search.ContextualSearchIconSpriteAnimated"
     enum="ContextualSearchIconSpriteAnimated">
+  <obsolete>
+    Contextual Search icon sprite removed 04/2017.
+  </obsolete>
   <owner>donnd@chromium.org</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
@@ -73550,8 +73997,7 @@
   <summary>Counts translation target page schemes.</summary>
 </histogram>
 
-<histogram name="Translate.Ranker.Model.Status"
-    enum="TranslateRankerModelStatus">
+<histogram name="Translate.Ranker.Model.Status" enum="RankerModelStatus">
   <owner>rogerm@google.com</owner>
   <summary>
     Tracks the outcome of attempts to download a Translate Ranker Model.
@@ -73805,6 +74251,16 @@
   </summary>
 </histogram>
 
+<histogram name="UKM.LogUpload.ResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>holte@chromium.org</owner>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    HTTP response codes and network errors encountered by UKM when attempting to
+    upload logs to the server.
+  </summary>
+</histogram>
+
 <histogram name="UKM.PersistentLogRecall.Status"
     enum="PersistedLogsLogReadStatus">
   <owner>holte@chromium.org</owner>
@@ -73845,6 +74301,9 @@
 </histogram>
 
 <histogram name="UKM.Upload.ResponseCode" enum="HttpResponseCode">
+  <obsolete>
+    Replaced by UKM.LogUpload.ResponseOrErrorCode
+  </obsolete>
   <owner>holte@chromium.org</owner>
   <owner>rkaplow@chromium.org</owner>
   <summary>
@@ -74342,6 +74801,16 @@
   </summary>
 </histogram>
 
+<histogram name="UMA.LogUpload.ResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>holte@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    HTTP response codes and network errors encountered by UMA when attempting to
+    upload logs to the server.
+  </summary>
+</histogram>
+
 <histogram name="UMA.LowEntropySourceValue">
   <owner>asvitkine@chromium.org</owner>
   <summary>
@@ -74581,6 +75050,9 @@
 
 <histogram name="UMA.UploadResponseStatus.Protobuf"
     enum="UmaUploadResponseStatus">
+  <obsolete>
+    Replaced by UMA.LogUpload.ResponseOrErrorCode
+  </obsolete>
   <owner>asvitkine@chromium.org</owner>
   <summary>
     For each upload to the protocol buffer (v2) UMA server, log whether the
@@ -75323,6 +75795,20 @@
   </summary>
 </histogram>
 
+<histogram name="V8.ArrayBufferBigAllocations" units="MB">
+  <owner>bradnelson@chromium.org</owner>
+  <owner>titzer@chromium.org</owner>
+  <owner>kschimpf@chromium.org</owner>
+  <summary>Number of bytes requested in an array buffer allocation.</summary>
+</histogram>
+
+<histogram name="V8.ArrayBufferNewSizeFailures" units="MB">
+  <owner>bradnelson@chromium.org</owner>
+  <owner>titzer@chromium.org</owner>
+  <owner>kschimpf@chromium.org</owner>
+  <summary>Array buffer sizes for which V8 failed to allocate memory.</summary>
+</histogram>
+
 <histogram name="V8.AsmWasmTranslationMicroSeconds" units="microseconds">
   <owner>bradnelson@chromium.org</owner>
   <owner>titzer@chromium.org</owner>
@@ -76924,6 +77410,25 @@
   </summary>
 </histogram>
 
+<histogram name="Webapp.InstallabilityCheckStatus.MenuItemAddToHomescreen"
+    enum="InstallabilityCheckStatus">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records whether or not the check that a site is or isn't a Progressive Web
+    App (PWA) has completed when the user taps the add to homescreen menu item
+    on Android.
+  </summary>
+</histogram>
+
+<histogram name="Webapp.InstallabilityCheckStatus.MenuOpen"
+    enum="InstallabilityCheckStatus">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records whether or not the check that a site is or isn't a Progressive Web
+    App (PWA) has completed when the user opens the menu on Android.
+  </summary>
+</histogram>
+
 <histogram name="Webapp.Splashscreen.BackgroundColor"
     enum="SplashscreenColorStatus">
   <owner>mlamouri@chromium.org</owner>
@@ -79465,6 +79970,14 @@
   </summary>
 </histogram>
 
+<histogram name="WebRTC.Video.AdaptChangesPerMinute" units="changes/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average number of adaptation changes per minute for a sent video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
 <histogram name="WebRTC.Video.AverageRoundTripTimeInMilliseconds" units="ms">
   <owner>holmer@chromium.org</owner>
   <summary>
@@ -80967,6 +81480,18 @@
   </summary>
 </histogram>
 
+<histogram name="WorkerScheduler.WorkerThreadLoad" units="%">
+  <owner>kinuko@chromium.org</owner>
+  <summary>
+    Worker thread load, i.e. percentage of time spent on running tasks. This
+    metric is emitted at most once per kWorkerThreadLoadTrackerReportingInterval
+    sec per worker thread amortized. E.g. if a worker ran a single task for X
+    seconds and then went to idle for Y seconds before it shuts down, and
+    assuming the interval rate was 1 sec, we get X samples for 100% and Y
+    samples for 0%.
+  </summary>
+</histogram>
+
 <histogram name="WorkerThread.DebuggerTask.Time" units="ms">
   <owner>nhiroki@chromium.org</owner>
   <summary>The time taken for running a debugger task on WorkerThread.</summary>
@@ -83213,6 +83738,7 @@
   <int value="164" label="BFSI_INVALID_TAG"/>
   <int value="165" label="BFSI_INVALID_REQUESTS"/>
   <int value="166" label="BFSI_INVALID_TITLE"/>
+  <int value="167" label="RWH_INVALID_FRAME_TOKEN"/>
 </enum>
 
 <enum name="BadMessageReasonExtensions" type="int">
@@ -83481,6 +84007,11 @@
   <int value="1" label="Active"/>
 </enum>
 
+<enum name="BooleanAllowed" type="int">
+  <int value="0" label="Not Allowed"/>
+  <int value="1" label="Allowed"/>
+</enum>
+
 <enum name="BooleanAttempted" type="int">
   <int value="0" label="Not Attempted"/>
   <int value="1" label="Attempted"/>
@@ -83701,6 +84232,11 @@
   <int value="1" label="Force Disabled"/>
 </enum>
 
+<enum name="BooleanForegroundNotification" type="int">
+  <int value="0" label="Background Notification"/>
+  <int value="1" label="Foreground Notification"/>
+</enum>
+
 <enum name="BooleanForemost" type="int">
   <int value="0" label="Tab was not foremost"/>
   <int value="1" label="Tab was foremost"/>
@@ -84191,6 +84727,7 @@
   <int value="1" label="QUIC_STREAM_FACTORY"/>
   <int value="2" label="HTTP_STREAM_FACTORY_IMPL_JOB_ALT"/>
   <int value="3" label="HTTP_STREAM_FACTORY_IMPL_JOB_MAIN"/>
+  <int value="4" label="QUIC_HTTP_STREAM"/>
 </enum>
 
 <enum name="BrotliFilterDecodingStatus" type="int">
@@ -86235,6 +86772,19 @@
   <int value="26" label="Background sync setting"/>
 </enum>
 
+<enum name="ContentTypeParseableResult" type="int">
+  <int value="0" label="IsSupported returned and MIME type parseable"/>
+  <int value="1" label="MayBeSupported returned and MIME type parseable"/>
+  <int value="2" label="IsNotSupported returned and MIME type parseable"/>
+  <int value="3"
+      label="IsSupported returned and MIME type not parseable (should fail)"/>
+  <int value="4"
+      label="MayBeSupported returned and MIME type not parseable (should
+             fail)"/>
+  <int value="5"
+      label="IsNotSupported returned and MIME type not parseable (acceptable)"/>
+</enum>
+
 <enum name="ContextLostReason" type="int">
   <summary>The reason for losing a GPU context.</summary>
   <int value="0" label="CONTEXT_INIT_FAILED"/>
@@ -88090,6 +88640,11 @@
   <int value="22" label="SQLite Integrity Top Sites Test"/>
 </enum>
 
+<enum name="DialogName" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Translate"/>
+</enum>
+
 <enum name="DifferentPrimaryAccounts" type="int">
   <int value="0" label="Primary Accounts the same"/>
   <int value="1" label="(obsolete) Primary Accounts different"/>
@@ -94555,10 +95110,17 @@
   <int value="1902" label="GenericSensorOnActivate"/>
   <int value="1903" label="GenericSensorOnChange"/>
   <int value="1904" label="GenericSensorOnError"/>
-  <int value="1905" label="GenericSensorState"/>
+  <int value="1905" label="GenericSensorActivated"/>
   <int value="1906" label="GyroscopeConstructor"/>
   <int value="1907" label="MagnetometerConstructor"/>
   <int value="1908" label="OrientationSensorPopulateMatrix"/>
+  <int value="1909" label="WindowOpenWithInvalidURL"/>
+  <int value="1910" label="CrossOriginMainFrameNulledNameAccessed"/>
+  <int value="1911" label="MenuItemElementIconAttribute"/>
+  <int value="1912" label="WebkitCSSMatrixSetMatrixValue"/>
+  <int value="1913" label="WebkitCSSMatrixConstructFromString"/>
+  <int value="1914" label="CanRequestURLHTTPContainingNewline"/>
+  <int value="1915" label="CanRequestURLNonHTTPContainingNewline"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
@@ -96690,6 +97252,12 @@
   <int value="5" label="User ignored the bar"/>
 </enum>
 
+<enum name="GeolocationSettingsDialogBackOff" type="int">
+  <int value="0" label="One week"/>
+  <int value="1" label="One month"/>
+  <int value="2" label="Three months"/>
+</enum>
+
 <enum name="GeopositionErrorCode" type="int">
   <int value="0" label="There was no error"/>
   <int value="1" label="User denied use of geolocation"/>
@@ -98406,6 +98974,15 @@
   <int value="35" label="Ran by google.com/intl/ (deprecated)"/>
 </enum>
 
+<enum name="InstallabilityCheckStatus" type="int">
+  <int value="0" label="Check not started"/>
+  <int value="1" label="Check terminated before it could finish"/>
+  <int value="2" label="Check not complete, site is not a PWA"/>
+  <int value="3" label="Check not complete, site is a PWA"/>
+  <int value="4" label="Check complete, site is not a PWA"/>
+  <int value="5" label="Check complete, site is a PWA"/>
+</enum>
+
 <enum name="InstallStatus" type="int">
   <int value="0" label="FIRST_INSTALL_SUCCESS"/>
   <int value="1" label="INSTALL_REPAIRED"/>
@@ -99837,6 +100414,7 @@
   <int value="6" label="Menu item (PWA)"/>
   <int value="7" label="Menu item (standalone)"/>
   <int value="8" label="Menu item (shortcut)"/>
+  <int value="9" label="External intent"/>
 </enum>
 
 <enum name="LaunchIntentFlags" type="int">
@@ -100401,6 +100979,7 @@
   <int value="-1634154256" label="ZeroSuggestRedirectToChrome:enabled"/>
   <int value="-1631329950" label="ssl-version-max"/>
   <int value="-1630419335" label="enable-download-notification"/>
+  <int value="-1629748710" label="ash-enable-smooth-screen-rotation"/>
   <int value="-1624854957" label="enable-es3-apis"/>
   <int value="-1620568042" label="FeaturePolicy:disabled"/>
   <int value="-1619757314" label="touch-scrolling-mode"/>
@@ -100508,6 +101087,7 @@
   <int value="-1203742042" label="enable-gesture-selection"/>
   <int value="-1201183153" label="enable-centered-app-list"/>
   <int value="-1197035323" label="ZeroSuggestRedirectToChrome:disabled"/>
+  <int value="-1190174011" label="enable-hdr"/>
   <int value="-1184904651" label="enable-npapi"/>
   <int value="-1184480269" label="LsdPermissionPrompt:enabled"/>
   <int value="-1177802205" label="enable-hosted-app-quit-notification"/>
@@ -100520,6 +101100,7 @@
   <int value="-1160026273" label="enable-web-notification-custom-layouts"/>
   <int value="-1159563774" label="enable-accessibility-script-injection"/>
   <int value="-1158993534" label="PrintScaling:enabled"/>
+  <int value="-1155543191" label="CopylessPaste:disabled"/>
   <int value="-1151766565" label="enable-fullscreen-tab-detaching"/>
   <int value="-1137442543" label="enable-slimming-paint"/>
   <int value="-1136627751" label="ignore-autocomplete-off-autofill"/>
@@ -100579,6 +101160,7 @@
   <int value="-918618075" label="enable-service-worker"/>
   <int value="-914210146" label="enable-web-based-signin"/>
   <int value="-912456561" label="MidiManagerWinrt:enabled"/>
+  <int value="-909641013" label="DataReductionProxySiteBreakdown:enabled"/>
   <int value="-908421850" label="PointerEvent:enabled"/>
   <int value="-907234795" label="NewAudioRenderingMixingStrategy:disabled"/>
   <int value="-899334103" label="disable-fast-text-autosizing"/>
@@ -100695,6 +101277,7 @@
   <int value="-428599163" label="NTPDownloadSuggestions:enabled"/>
   <int value="-418868128" label="enable-experimental-web-platform-features"/>
   <int value="-410852857" label="ImprovedA2HS:disabled"/>
+  <int value="-405380243" label="enable-encryption-migration"/>
   <int value="-396994784" label="enable-vr-shell"/>
   <int value="-396496344" label="ViewsTaskManager:enabled"/>
   <int value="-395606844" label="enable-site-settings"/>
@@ -100704,6 +101287,7 @@
   <int value="-378180863" label="disable-panels"/>
   <int value="-378033324" label="disable-win32k-renderer-lockdown"/>
   <int value="-364325011" label="enable-files-quick-view"/>
+  <int value="-364267715" label="disable-native-cups"/>
   <int value="-362022976" label="disable-quirks-client"/>
   <int value="-361948582" label="material-security-verbose"/>
   <int value="-360038744" label="invert-viewport-scroll-order"/>
@@ -100738,6 +101322,7 @@
   <int value="-277144896" label="enable-viewport-meta"/>
   <int value="-268357961" label="enable-feature-policy"/>
   <int value="-254887599" label="google-profile-info"/>
+  <int value="-250721831" label="AndroidAutofillAccessibility:disabled"/>
   <int value="-241353344" label="MidiManagerWinrt:disabled"/>
   <int value="-234966279" label="PointerEvent:disabled"/>
   <int value="-234687894"
@@ -100938,12 +101523,14 @@
   <int value="624368375" label="OmniboxEntitySuggestions:enabled"/>
   <int value="625273056" label="disable-boot-animation"/>
   <int value="628302973" label="NTPSnippets:enabled"/>
+  <int value="628570445" label="AndroidAutofillAccessibility:enabled"/>
   <int value="630947363" label="touch-events"/>
   <int value="635971109" label="PrintPdfAsImage:disabled"/>
   <int value="636425179" label="mhtml-generator-option"/>
   <int value="637396292" label="AllBookmarks:enabled"/>
   <int value="643725031" label="disable-touch-feedback"/>
   <int value="644189071" label="PermissionsBlacklist:enabled"/>
+  <int value="644674603" label="DataReductionProxySiteBreakdown:disabled"/>
   <int value="646252875" label="ReadItLaterInMenu:enabled"/>
   <int value="646738320" label="disable-gesture-editing"/>
   <int value="650602639" label="enable-autofill-keyboard-accessory-view"/>
@@ -100951,6 +101538,7 @@
   <int value="683410401"
       label="enable-proximity-auth-bluetooth-low-energy-discovery"/>
   <int value="684806628" label="TranslateLanguageByULP:disabled"/>
+  <int value="685916283" label="enable-zip-archiver-on-file-manager"/>
   <int value="689489984" label="disable-zero-suggest"/>
   <int value="690185633" label="NonValidatingReloadOnNormalReload:disabled"/>
   <int value="691020108" label="NTPCondensedTileLayout:disabled"/>
@@ -100987,6 +101575,7 @@
   <int value="835018878" label="disable-quic"/>
   <int value="838887742" label="manual-enhanced-bookmarks"/>
   <int value="841343322" label="disable-new-korean-ime"/>
+  <int value="846951416" label="CopylessPaste:enabled"/>
   <int value="851085848" label="enable-settings-window"/>
   <int value="854730848" label="disable-app-info-dialog-mac"/>
   <int value="855746780" label="disable-physical-keyboard-autocorrect"/>
@@ -101011,6 +101600,7 @@
   <int value="938191241" label="VrShell:enabled"/>
   <int value="939554480" label="enable-credit-card-scan"/>
   <int value="939603162" label="BackgroundLoadingForDownloads:disabled"/>
+  <int value="941036016" label="ContentSuggestionsSettings:disabled"/>
   <int value="943319566" label="enable-intent-picker"/>
   <int value="952558794" label="enable-remote-assistance"/>
   <int value="980396200" label="enable-new-korean-ime"/>
@@ -101181,6 +101771,7 @@
   <int value="1579461102" label="MemoryCoordinator:disabled"/>
   <int value="1586022426" label="AutofillCreditCardAssist:enabled"/>
   <int value="1589341623" label="disable-easy-unlock"/>
+  <int value="1594247626" label="ContentSuggestionsSettings:enabled"/>
   <int value="1605611615" label="enable-webrtc-srtp-aes-gcm"/>
   <int value="1612446645" label="enable-weak-memorycache"/>
   <int value="1612871297" label="WebPayments:disabled"/>
@@ -102103,7 +102694,7 @@
   <int value="516" label="font-display"/>
   <int value="517" label="contain"/>
   <int value="518" label="d"/>
-  <int value="519" label="snap-height"/>
+  <int value="519" label="line-height-step"/>
   <int value="520" label="break-after"/>
   <int value="521" label="break-before"/>
   <int value="522" label="break-inside"/>
@@ -102140,7 +102731,10 @@
   <int value="553" label="min-block-size"/>
   <int value="554" label="max-inline-size"/>
   <int value="555" label="max-block-size"/>
-  <int value="556" label="line-break"/>
+  <int value="556" label="alias-line-break"/>
+  <int value="557" label="place-content"/>
+  <int value="558" label="place-items"/>
+  <int value="559" label="transform-box"/>
 </enum>
 
 <enum name="MappedEditingCommands" type="int">
@@ -102522,6 +103116,7 @@
   <int value="15" label="EnableMdnsDiscovery"/>
   <int value="16" label="UpdateMediaSinks"/>
   <int value="17" label="SearchSinks"/>
+  <int value="18" label="ProvideSinks"/>
 </enum>
 
 <enum name="MediaRouteProviderWakeup" type="int">
@@ -102608,6 +103203,149 @@
   <int value="2" label="Pending Media Tracks"/>
 </enum>
 
+<enum name="MediaTimelineAbsTimeDelta" type="int">
+  <int value="0" label="[0, 1ms)"/>
+  <int value="1" label="[1ms, 16ms)"/>
+  <int value="2" label="[16ms, 32ms)"/>
+  <int value="3" label="[32ms, 64ms)"/>
+  <int value="4" label="[64ms, 128ms)"/>
+  <int value="5" label="[128ms, 256ms)"/>
+  <int value="6" label="[256ms, 512ms)"/>
+  <int value="7" label="[512ms, 1s)"/>
+  <int value="8" label="[1s, 2s)"/>
+  <int value="9" label="[2s, 4s)"/>
+  <int value="10" label="[4s, 8s)"/>
+  <int value="11" label="[8s, 15s)"/>
+  <int value="12" label="[15s, 30s)"/>
+  <int value="13" label="[30s, 1m)"/>
+  <int value="14" label="[1m, 2m)"/>
+  <int value="15" label="[2m, 4m)"/>
+  <int value="16" label="[4m, 8m)"/>
+  <int value="17" label="[8m, 15m)"/>
+  <int value="18" label="[15m, 30m)"/>
+  <int value="19" label="[30m, 1h)"/>
+  <int value="20" label="[1h, 2h)"/>
+  <int value="21" label="[2h, 4h)"/>
+  <int value="22" label="[4h, 8h)"/>
+  <int value="23" label="[8h, 16h)"/>
+  <int value="24" label="[16h, inf)"/>
+</enum>
+
+<enum name="MediaTimelinePercent" type="int">
+  <int value="0" label="[-100.0%, -90.0%]"/>
+  <int value="1" label="(-90.0%, -80.0%]"/>
+  <int value="2" label="(-80.0%, -70.0%]"/>
+  <int value="3" label="(-70.0%, -60.0%]"/>
+  <int value="4" label="(-60.0%, -50.0%]"/>
+  <int value="5" label="(-50.0%, -45.0%]"/>
+  <int value="6" label="(-45.0%, -40.0%]"/>
+  <int value="7" label="(-40.0%, -35.0%]"/>
+  <int value="8" label="(-35.0%, -30.0%]"/>
+  <int value="9" label="(-30.0%, -25.0%]"/>
+  <int value="10" label="(-25.0%, -20.0%]"/>
+  <int value="11" label="(-20.0%, -15.0%]"/>
+  <int value="12" label="(-15.0%, -10.0%]"/>
+  <int value="13" label="(-10.0%, -7.0%]"/>
+  <int value="14" label="(-7.0%, -5.0%]"/>
+  <int value="15" label="(-5.0%, -3.0%]"/>
+  <int value="16" label="(-3.0%, -2.0%]"/>
+  <int value="17" label="(-2.0%, -1.5%]"/>
+  <int value="18" label="(-1.5%, -1.0%]"/>
+  <int value="19" label="(-1.0%, -0.7%]"/>
+  <int value="20" label="(-0.7%, -0.5%]"/>
+  <int value="21" label="(-0.5%, -0.3%]"/>
+  <int value="22" label="(-0.3%, -0.2%]"/>
+  <int value="23" label="(-0.2%, -0.1%]"/>
+  <int value="24" label="(-0.1%, 0%)"/>
+  <int value="25" label="[0%, 0%]"/>
+  <int value="26" label="(0%, 0.1%)"/>
+  <int value="27" label="[0.1%, 0.2%)"/>
+  <int value="28" label="[0.2%, 0.3%)"/>
+  <int value="29" label="[0.3%, 0.5%)"/>
+  <int value="30" label="[0.5%, 0.7%)"/>
+  <int value="31" label="[0.7%, 1.0%)"/>
+  <int value="32" label="[1.0%, 1.5%)"/>
+  <int value="33" label="[1.5%, 2.0%)"/>
+  <int value="34" label="[2.0%, 3.0%)"/>
+  <int value="35" label="[3.0%, 5.0%)"/>
+  <int value="36" label="[5.0%, 7.0%)"/>
+  <int value="37" label="[7.0%, 10.0%)"/>
+  <int value="38" label="[10.0%, 15.0%)"/>
+  <int value="39" label="[15.0%, 20.0%)"/>
+  <int value="40" label="[20.0%, 25.0%)"/>
+  <int value="41" label="[25.0%, 30.0%)"/>
+  <int value="42" label="[30.0%, 35.0%)"/>
+  <int value="43" label="[35.0%, 40.0%)"/>
+  <int value="44" label="[40.0%, 45.0%)"/>
+  <int value="45" label="[45.0%, 50.0%)"/>
+  <int value="46" label="[50.0%, 60.0%)"/>
+  <int value="47" label="[60.0%, 70.0%)"/>
+  <int value="48" label="[70.0%, 80.0%)"/>
+  <int value="49" label="[80.0%, 90.0%)"/>
+  <int value="50" label="[90.0%, 100.0%]"/>
+</enum>
+
+<enum name="MediaTimelineSeekType" type="int">
+  <int value="0" label="Click"/>
+  <int value="1" label="Drag from current position"/>
+  <int value="2" label="Drag from elsewhere"/>
+  <int value="3" label="Keyboard arrow key"/>
+  <int value="4" label="Keyboard page up/down key"/>
+  <int value="5" label="Keyboard home/end key"/>
+</enum>
+
+<enum name="MediaTimelineTimeDelta" type="int">
+  <int value="0" label="(-inf, -16h]"/>
+  <int value="1" label="(-16h, -8h]"/>
+  <int value="2" label="(-8h, -4h]"/>
+  <int value="3" label="(-4h, -2h]"/>
+  <int value="4" label="(-2h, -1h]"/>
+  <int value="5" label="(-1h, -30m]"/>
+  <int value="6" label="(-30m, -15m]"/>
+  <int value="7" label="(-15m, -8m]"/>
+  <int value="8" label="(-8m, -4m]"/>
+  <int value="9" label="(-4m, -2m]"/>
+  <int value="10" label="(-2m, -1m]"/>
+  <int value="11" label="(-1m, -30s]"/>
+  <int value="12" label="(-30s, -15s]"/>
+  <int value="13" label="(-15s, -8s]"/>
+  <int value="14" label="(-8s, -4s]"/>
+  <int value="15" label="(-4s, -2s]"/>
+  <int value="16" label="(-2s, -1s]"/>
+  <int value="17" label="(-1s, -512ms]"/>
+  <int value="18" label="(-512ms, -256ms]"/>
+  <int value="19" label="(-256ms, -128ms]"/>
+  <int value="20" label="(-128ms, -64ms]"/>
+  <int value="21" label="(-64ms, -32ms]"/>
+  <int value="22" label="(-32ms, -16ms]"/>
+  <int value="23" label="(-16ms, 0)"/>
+  <int value="24" label="[0, 0]"/>
+  <int value="25" label="(0, 16ms)"/>
+  <int value="26" label="[16ms, 32ms)"/>
+  <int value="27" label="[32ms, 64ms)"/>
+  <int value="28" label="[64ms, 128ms)"/>
+  <int value="29" label="[128ms, 256ms)"/>
+  <int value="30" label="[256ms, 512ms)"/>
+  <int value="31" label="[512ms, 1s)"/>
+  <int value="32" label="[1s, 2s)"/>
+  <int value="33" label="[2s, 4s)"/>
+  <int value="34" label="[4s, 8s)"/>
+  <int value="35" label="[8s, 15s)"/>
+  <int value="36" label="[15s, 30s)"/>
+  <int value="37" label="[30s, 1m)"/>
+  <int value="38" label="[1m, 2m)"/>
+  <int value="39" label="[2m, 4m)"/>
+  <int value="40" label="[4m, 8m)"/>
+  <int value="41" label="[8m, 15m)"/>
+  <int value="42" label="[15m, 30m)"/>
+  <int value="43" label="[30m, 1h)"/>
+  <int value="44" label="[1h, 2h)"/>
+  <int value="45" label="[2h, 4h)"/>
+  <int value="46" label="[4h, 8h)"/>
+  <int value="47" label="[8h, 16h)"/>
+  <int value="48" label="[16h, inf)"/>
+</enum>
+
 <enum name="MediaTypePredictionResult" type="int">
   <int value="0" label="All correct"/>
   <int value="1" label="All incorrect"/>
@@ -102872,29 +103610,6 @@
   <int value="11" label="11"/>
 </enum>
 
-<enum name="MostVisitedTileType" type="int">
-  <summary>The visual type of a most visited tile on the new tab page.</summary>
-  <int value="0" label="None">The icon or thumbnail hasn't loaded yet.</int>
-  <int value="1" label="IconReal">
-    The item displays a site's actual favicon or touch icon.
-  </int>
-  <int value="2" label="IconColor">
-    The item displays a color derived from the site's favicon or touch icon.
-  </int>
-  <int value="3" label="IconDefault">
-    The item displays a default gray box in place of an icon.
-  </int>
-  <int value="4" label="ThumbnailLocal">
-    The item displays a locally-captured thumbnail of the site content.
-  </int>
-  <int value="5" label="ThumbnailServer">
-    The item displays a server-provided thumbnail of the site content.
-  </int>
-  <int value="6" label="ThumbnailDefault">
-    The item displays a default graphic in place of a thumbnail.
-  </int>
-</enum>
-
 <enum name="MotionEventToolType" type="int">
   <summary>The type of tool that triggers a pointer-type MotionEvent.</summary>
   <int value="0" label="Unknown">Unknown tool type.</int>
@@ -103588,6 +104303,17 @@
   <int value="5" label="SDCHPossible"/>
   <int value="6" label="Invalid"/>
   <int value="7" label="None"/>
+  <int value="8" label="Rejected">
+    Unlike other values, this one is reported from HttpNetworkTransaction in a
+    case when an unadvertised, but known encoding appears in a
+    &quot;Content-Encoding&quot; header, and is thus not comparable with the
+    other values, which are potentially returned from cached entries.
+  </int>
+  <int value="9" label="Unknown">
+    Reported from URLRequestHttpJob::SetUpSourceStream when an unknown encoding
+    appears in a &quot;Content-Encoding&quot; header. Despite being reported in
+    this histogram, this does not cause a CONTENT_DECODING_FAILED error.
+  </int>
 </enum>
 
 <enum name="NetInternalsUiFeature" type="int">
@@ -104330,6 +105056,37 @@
   <int value="3" label="Too few URLs, didn't flip tiles 1 and 4"/>
 </enum>
 
+<enum name="NTPTileVisualType" type="int">
+  <summary>The visual type of a most visited tile on the new tab page.</summary>
+  <int value="0" label="None">The icon or thumbnail hasn't loaded yet.</int>
+  <int value="1" label="IconReal">
+    The item displays a site's actual favicon or touch icon.
+  </int>
+  <int value="2" label="IconColor">
+    The item displays a color derived from the site's favicon or touch icon.
+  </int>
+  <int value="3" label="IconDefault">
+    The item displays a default gray box in place of an icon.
+  </int>
+  <int value="4" label="DeprecatedThumbnailLocal">
+    Deprecated: The item displays a locally-captured thumbnail of the site
+    content.
+  </int>
+  <int value="5" label="DeprecatedThumbnailServer">
+    Deprecated: The item displays a server-provided thumbnail of the site
+    content.
+  </int>
+  <int value="6" label="DeprecatedThumbnailDefault">
+    Deprecated: The item displays a default graphic in place of a thumbnail.
+  </int>
+  <int value="7" label="Thumbnail">
+    The item displays a thumbnail of the page.
+  </int>
+  <int value="8" label="ThumbnailFailed">
+    The item displays a default gray box in place of a thumbnail.
+  </int>
+</enum>
+
 <enum name="NTSTATUS" type="int">
   <int value="-1073741818" label="0xC0000006 - STATUS_IN_PAGE_ERROR"/>
   <int value="-1073741808" label="0xC0000010 - STATUS_INVALID_DEVICE_REQUEST"/>
@@ -104583,6 +105340,8 @@
   <int value="2" label="via space in middle"/>
   <int value="3" label="keyboard shortcut"/>
   <int value="4" label="question mark"/>
+  <int value="5" label="mouse click on hint view"/>
+  <int value="6" label="tap gesture on hint view"/>
 </enum>
 
 <enum name="OmniboxInputType" type="int">
@@ -106201,6 +106960,7 @@
   <int value="1360443600" label="PPB_OpenGLES2FramebufferMultisample;1.0"/>
   <int value="1374404330" label="PPB_BrokerTrusted;0.3"/>
   <int value="1374976378" label="PPB_OpenGLES2Query;1.0"/>
+  <int value="1388412013" label="PPB_AudioOutput(Dev);0.1"/>
   <int value="1423820530" label="PPB_ContentDecryptor_Private;0.14"/>
   <int value="1437724812" label="PPB_AudioConfig;1.0"/>
   <int value="1443771913" label="PPB_NetAddress;1.0"/>
@@ -106279,6 +107039,7 @@
   <int value="0" label="NOT_EMBARGOED"/>
   <int value="1" label="BLACKLISTED"/>
   <int value="2" label="REPEATED_DISMISSALS"/>
+  <int value="3" label="REPEATED_IGNORES"/>
 </enum>
 
 <enum name="PermissionRequestType" type="int">
@@ -108215,7 +108976,9 @@
   <int value="92" label="MULTIPATH_PATH_NOT_ACTIVE"/>
   <int value="93" label="TOO_MANY_FRAME_GAPS"/>
   <int value="94" label="UNSUPPORTED_PROOF_DEMAND"/>
-  <int value="95" label="HEADERS_STREAM_DATA_DECOMPRESS_FAILURE"/>
+  <int value="95" label="STREAM_SEQUENCER_INVALID_STATE"/>
+  <int value="96" label="TOO_MANY_SESSIONS_ON_SERVER"/>
+  <int value="97" label="HEADERS_STREAM_DATA_DECOMPRESS_FAILURE"/>
 </enum>
 
 <enum name="QuicHandshakeFailureReason" type="int">
@@ -108432,6 +109195,15 @@
   <int value="6" label="In use"/>
 </enum>
 
+<enum name="RankerModelStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Download Throttled"/>
+  <int value="2" label="Download Failed"/>
+  <int value="3" label="Parse Failed"/>
+  <int value="4" label="Validation Failed"/>
+  <int value="5" label="Incompatible"/>
+</enum>
+
 <enum name="RapporDiscardReason" type="int">
   <int value="0" label="Upload Success"/>
   <int value="1" label="Upload Rejected"/>
@@ -110568,6 +111340,31 @@
   <int value="3" label="Resource is not web-accessible (most common)"/>
 </enum>
 
+<enum name="ShouldAllowOpenURLFailureScheme" type="int">
+<!-- Generated from chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc -->
+
+  <int value="0" label="SCHEME_UNKNOWN"/>
+  <int value="1" label="SCHEME_EMPTY"/>
+  <int value="2" label="SCHEME_HTTP"/>
+  <int value="3" label="SCHEME_HTTPS"/>
+  <int value="4" label="SCHEME_FILE"/>
+  <int value="5" label="SCHEME_FTP"/>
+  <int value="6" label="SCHEME_DATA"/>
+  <int value="7" label="SCHEME_JAVASCRIPT"/>
+  <int value="8" label="SCHEME_ABOUT"/>
+  <int value="9" label="SCHEME_CHROME"/>
+  <int value="10" label="SCHEME_DEVTOOLS"/>
+  <int value="11" label="SCHEME_GUEST"/>
+  <int value="12" label="SCHEME_VIEWSOURCE"/>
+  <int value="13" label="SCHEME_CHROME_SEARCH"/>
+  <int value="14" label="SCHEME_CHROME_NATIVE"/>
+  <int value="15" label="SCHEME_DOM_DISTILLER"/>
+  <int value="16" label="SCHEME_CHROME_EXTENSION"/>
+  <int value="17" label="SCHEME_CONTENT"/>
+  <int value="18" label="SCHEME_BLOB"/>
+  <int value="19" label="SCHEME_FILESYSTEM"/>
+</enum>
+
 <enum name="ShutdownReason" type="int">
   <summary>
     The reason that the Chrome OS power manager shut down or rebooted the
@@ -111865,44 +112662,24 @@
     reason to believe that the system clock was behind.  Methods of detecting
     clock inaccuracy have changed over time.
   </int>
-  <int value="2"
-      label="WWW_SUBDOMAIN_MATCH: Difference between the URL and the DNS is
-             www">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    hostname differs from one of the DNS names in the certificate (CN or SANs)
-    only by the presence or absence of the single-label prefix &quot;www&quot;.
-    This case is not recored if the host name is not a known TLD.
+  <int value="2" label="WWW_SUBDOMAIN_MATCH: (Deprecated)">
+    (Deprecated in favor of WWW_SUBDOMAIN_MATCH2)
   </int>
-  <int value="3" label="SUBDOMAIN_MATCH: The URL is a subdomain of the DNS">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    difference between the URL and the DNS name is not &quot;www&quot;. This
-    case is not recorded if the host name is not a known TLD.
+  <int value="3" label="SUBDOMAIN_MATCH: (Deprecated)">
+    (Deprecated in favor of SUBDOMAIN_MATCH2)
   </int>
-  <int value="4"
-      label="SUBDOMAIN_INVERSE_MATCH: The DNS is a subdomain of the URL">
-    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
-    difference between the DNS name and the URL is not &quot;www&quot;. This
-    case is not recorded if the host name is not a known TLD.
+  <int value="4" label="SUBDOMAIN_INVERSE_MATCH: (Deprecated)">
+    (Deprecated in favor of SUBDOMAIN_INVERSE_MATCH2)
   </int>
-  <int value="5"
-      label="SUBDOMAIN_OUTSIDE_WILDCARD: The URL is outside the scope of the
-             wildcard certificate">
-    This cause is recorded only if the ssl error is CERT_COMMON_NAME_INVALID, we
-    have received a wildcard certificate and the scope of a wildcard certificate
-    is too narrow for the hostname. This case is not recorded if the host name
-    is not a known TLD.
+  <int value="5" label="SUBDOMAIN_OUTSIDE_WILDCARD: (Deprecated)">
+    (Deprecated in favor of SUBDOMAIN_OUTSIDE_WILDCARD2)
   </int>
   <int value="6"
       label="HOST_NAME_NOT_KNOWN_TLD: The host name is not a known TLD">
     This cause is recorded only for CERT_COMMON_NAME_INVALID errors.
   </int>
-  <int value="7"
-      label="LIKELY_MULTI_TENANT_HOSTING: The certificate is a shared
-             certificate">
-    This cause is recorded only for CERT_COMMON_NAME_INVALID errors. It is
-    possible that this error overlaps with others but it is not likely because
-    of the heuristics which decide as to what constitutes a shared certificate.
-    In cases of overlap, we emit to only one bucket.
+  <int value="7" label="LIKELY_MULTI_TENANT_HOSTING: (Deprecated)">
+    (Deprecated in favor of LIKELY_MULTI_TENANT_HOSTING2)
   </int>
   <int value="8" label="LOCALHOST: The user is trying to connect to local host">
     This cause is recorded only for CERT_AUTHORITY_INVALID errors.
@@ -111922,12 +112699,56 @@
   <int value="12" label="EXPIRED_RECENTLY: Cert expired within last 28 days.">
 
   </int>
-  <int value="13"
-      label="LIKELY_SAME_DOMAIN: Cert likely belongs to the same domain">
+  <int value="13" label="LIKELY_SAME_DOMAIN: (Deprecated)">
+    (Deprecated in favor of LIKELY_SAME_DOMAIN2)
+  </int>
+  <int value="14" label="NO_SUBJECT_ALT_NAME: Cert lacks SubjectAltName">
+    This case is recorded if the SSL error is CERT_COMMON_NAME_INVALID error and
+    the certificate does not specify any DNS names in a SubjectAltName
+    extension. (Chrome 58 deprecated matching hostnames to the SubjectCN Field.)
+  </int>
+  <int value="15"
+      label="WWW_SUBDOMAIN_MATCH2: Difference between the URL and the DNS is
+             www">
+    This cause is recorded if the SSL error is CERT_COMMON_NAME_INVALID and the
+    hostname differs from one of the DNS names in the certificate (SANs) only by
+    the presence or absence of the single-label prefix &quot;www&quot;. This
+    case is not recorded if the host name is not a known TLD.
+  </int>
+  <int value="16" label="SUBDOMAIN_MATCH2: The URL is a subdomain of the DNS">
+    This cause is recorded if the SSL error is CERT_COMMON_NAME_INVALID, the URL
+    hostname is a subdomain of a DNS name in the certificate, and the difference
+    between the URL and the DNS name is not &quot;www&quot;. This case is not
+    recorded if the host name is not a known TLD.
+  </int>
+  <int value="17"
+      label="SUBDOMAIN_INVERSE_MATCH2: The DNS is a subdomain of the URL">
+    This cause is recorded if the SSL error is CERT_COMMON_NAME_INVALID, a DNS
+    name in the certificate is a subdomain of the URL hostname, and the
+    difference between the DNS name and the URL is not &quot;www&quot;. This
+    case is not recorded if the host name is not a known TLD.
+  </int>
+  <int value="18"
+      label="SUBDOMAIN_OUTSIDE_WILDCARD2: The URL is outside the scope of the
+             wildcard certificate">
+    This cause is recorded only if the SSL error is CERT_COMMON_NAME_INVALID, we
+    have received a wildcard certificate and the scope of a wildcard certificate
+    is too narrow for the hostname. This case is not recorded if the host name
+    is not a known TLD.
+  </int>
+  <int value="19"
+      label="LIKELY_MULTI_TENANT_HOSTING2: The certificate is a shared
+             certificate">
+    This cause is recorded only for CERT_COMMON_NAME_INVALID errors where the
+    certificate contains numerous unrelated DNS names. This case is not recorded
+    if the host name is not a known TLD.
+  </int>
+  <int value="20"
+      label="LIKELY_SAME_DOMAIN2: Cert likely belongs to the same domain">
     This case is recorded if the SSL error is CERT_COMMON_NAME_INVALID error and
     the hostname in request URL has the same domain (effective TLD + 1 label) as
-    the common name or at least one of the subject alternative names in
-    certificate. This case is not recorded if the host name is not a known tld.
+    a SubjectAltName in the certificate. This case is not recorded if the host
+    name is not a known TLD.
   </int>
 </enum>
 
@@ -111937,11 +112758,12 @@
   <int value="2" label="SHOW_CAPTIVE_PORTAL_INTERSTITIAL_OVERRIDABLE"/>
   <int value="3" label="SHOW_SSL_INTERSTITIAL_NONOVERRIDABLE"/>
   <int value="4" label="SHOW_SSL_INTERSTITIAL_OVERRIDABLE"/>
-  <int value="5" label="WWW_MISMATCH_FOUND"/>
+  <int value="5" label="WWW_MISMATCH_FOUND (Deprecated)"/>
   <int value="6" label="WWW_MISMATCH_URL_AVAILABLE"/>
   <int value="7" label="WWW_MISMATCH_URL_NOT_AVAILABLE"/>
   <int value="8" label="SHOW_BAD_CLOCK"/>
   <int value="9" label="CAPTIVE_PORTAL_CERT_FOUND"/>
+  <int value="10" label="WWW_MISMATCH_FOUND_IN_SAN"/>
 </enum>
 
 <enum name="SSLErrorTypes" type="int">
@@ -112545,6 +113367,11 @@
   <int value="3" label="Attempted"/>
 </enum>
 
+<enum name="SwapchainFormat" type="int">
+  <int value="0" label="B8G8R8A8"/>
+  <int value="1" label="YUY2"/>
+</enum>
+
 <enum name="SwReporterRunningTimeRegistryError" type="int">
   <int value="0" label="No error"/>
   <int value="1" label="Registry key invalid"/>
@@ -113467,14 +114294,6 @@
   <int value="6" label="CLD can complement a sub code"/>
 </enum>
 
-<enum name="TranslateRankerModelStatus" type="int">
-  <int value="0" label="OK"/>
-  <int value="1" label="Download Throttled"/>
-  <int value="2" label="Download Failed"/>
-  <int value="3" label="Parse Failed"/>
-  <int value="4" label="Validation Failed"/>
-</enum>
-
 <enum name="TranslateScheme" type="int">
   <int value="0" label="http"/>
   <int value="1" label="https"/>
@@ -118135,6 +118954,15 @@
   <affected-histogram name="PLT.PT_StartToFinish"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="GeolocationSettingsDialogSource">
+  <suffix name="DSE" label="Default search engine"/>
+  <suffix name="NonDSE" label="Non-default search engine"/>
+  <affected-histogram name="Geolocation.SettingsDialog.AcceptEvent"/>
+  <affected-histogram name="Geolocation.SettingsDialog.DenyEvent"/>
+  <affected-histogram name="Geolocation.SettingsDialog.ShowEvent"/>
+  <affected-histogram name="Geolocation.SettingsDialog.SuppressEvent"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="GLApisWithErrorReporting">
   <suffix name="TexImage2D" label="All GL APIs that allocate a 2D texture."/>
   <suffix name="TexImage3D" label="All GL APIs that allocate a 3D texture."/>
@@ -118606,6 +119434,7 @@
   <affected-histogram
       name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"/>
   <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime2"/>
+  <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime3"/>
   <affected-histogram name="Startup.FirstCommitNavigationTime2"/>
 </histogram_suffixes>
 
@@ -118978,6 +119807,14 @@
   <affected-histogram name="Media.AudioOutputController"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="MediaElementConfigurations" separator=".">
+  <suffix name="InlinePortrait"/>
+  <suffix name="InlineLandscape"/>
+  <suffix name="FullscreenPortrait"/>
+  <suffix name="FullscreenLandscape"/>
+  <affected-histogram name="Media.Timeline.Width"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="MediaPipelineStatusForStreams" separator=".">
   <suffix name="AudioVideo.Other"
       label="PipelineStatus for the codecs that dont have an explicit metric."/>
@@ -119028,6 +119865,20 @@
   <affected-histogram name="Media.PipelineStatus"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="MediaTimelineWidths" separator=".">
+  <suffix name="32_47"/>
+  <suffix name="48_79"/>
+  <suffix name="80_127"/>
+  <suffix name="128_255"/>
+  <suffix name="256_511"/>
+  <suffix name="512_inf"/>
+  <affected-histogram name="Media.Timeline.DragGestureDuration"/>
+  <affected-histogram name="Media.Timeline.DragPercent"/>
+  <affected-histogram name="Media.Timeline.DragSumAbsTimeDelta"/>
+  <affected-histogram name="Media.Timeline.DragTimeDelta"/>
+  <affected-histogram name="Media.Timeline.SeekType"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="MediaVideoCaptureManagerTime" separator=".">
   <suffix name="StartDeviceTime"
       label="Measures the time taken for DoStartDeviceOnDeviceThread()."/>
@@ -121269,7 +122120,8 @@
   <suffix name="AfterPaint"
       label="Limited to the duration of time starting after first paint, for
              page loads that reached first paint."/>
-  <suffix name="NoCommit" label="Limited to page loads that did not commit."/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.PageTiming.ForegroundDuration"/>
   <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
 </histogram_suffixes>
 
@@ -121486,7 +122338,7 @@
 
 <histogram_suffixes name="PageLoadMetricsClientsMedia" separator="."
     ordering="prefix">
-  <suffix name="Clients.Media"
+  <suffix name="Clients.MediaPageLoad"
       label="PageLoadMetrics for page loads that involved playing a media
              element."/>
   <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
@@ -121628,10 +122480,19 @@
       name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
   <affected-histogram
       name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
+  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
   <affected-histogram
       name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
   <affected-histogram
       name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsClientsTabRestore" separator="."
@@ -121661,6 +122522,27 @@
   <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="PageLoadMetricsMediaPlayed" separator=".">
+  <suffix name="MediaPlayed" label="Limited to pages where media was played."/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Network"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsNoCommit" separator=".">
+  <suffix name="NoCommit" label="Limited to page loads that did not commit."/>
+  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="PageLoadMetricsNoEndTime" separator=".">
   <suffix name="NoEndTime"
       label="The page load had no recorded end time, so an end time was
@@ -121671,6 +122553,23 @@
       name="PageLoad.Experimental.PageTiming.NavigationToPageEnd"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="PageLoadMetricsNoMediaPlayed" separator=".">
+  <suffix name="NoMediaPlayed"
+      label="Limited to pages where no media was played."/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Network"/>
+  <affected-histogram
+      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="PageLoadMetricsUserGesture" separator=".">
   <suffix name="UserGesture"
       label="Restricted to pages loaded via a user gesture."/>
@@ -122632,6 +123531,7 @@
       label="Malware interstitial referrer attribution."/>
   <suffix name="UwsInterstitialAttribution"
       label="UwS interstitial referrer attribution."/>
+  <suffix name="PasswordEventAttribution"/>
   <affected-histogram name="SafeBrowsing.ReferrerAttributionResult"/>
   <affected-histogram name="SafeBrowsing.ReferrerHasInvalidTabID"/>
   <affected-histogram name="SafeBrowsing.ReferrerURLChainSize"/>
@@ -124278,6 +125178,12 @@
   <affected-histogram name="V8.WasmModuleSizeBytes"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="VideoAdaptationReason" separator=".">
+  <suffix name="Cpu" label="Adapt reason: cpu."/>
+  <suffix name="Quality" label="Adapt reason: quality."/>
+  <affected-histogram name="WebRTC.Video.AdaptChangesPerMinute"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="VideoEncodedQpStats" separator=".">
   <suffix name="H264"
       label="Video codec: H264. QP range: 0-51. No spatial layers."/>
@@ -124443,7 +125349,11 @@
   <suffix name="Copy"/>
   <suffix name="Paste"/>
   <suffix name="CreateHostedApp"/>
-  <suffix name="CreateShortcuts"/>
+  <suffix name="CreateShortcuts">
+    <obsolete>
+      Deprecated as of 04/2017. Replaced by Bookmark Apps (CreateHostedApp).
+    </obsolete>
+  </suffix>
   <suffix name="ManageExtensions"/>
   <suffix name="TaskManager"/>
   <suffix name="ClearBrowsingData"/>
diff --git a/src/tools/metrics/histograms/presubmit_scheme_histograms.py b/src/tools/metrics/histograms/presubmit_scheme_histograms.py
new file mode 100644
index 0000000..4adccb9
--- /dev/null
+++ b/src/tools/metrics/histograms/presubmit_scheme_histograms.py
@@ -0,0 +1,31 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Check to see if the ShouldAllowOpenURLFailureScheme enum in histograms.xml
+needs to be updated. This can be called from a chromium PRESUBMIT.py to ensure
+updates to the enum in chrome_content_browser_client_extensions_part.cc also
+include the generated changes to histograms.xml.
+"""
+
+import update_histogram_enum
+
+def PrecheckShouldAllowOpenURLEnums(input_api, output_api):
+  source_file = 'chrome/browser/extensions/' \
+                'chrome_content_browser_client_extensions_part.cc'
+
+  affected_files = (f.LocalPath() for f in input_api.AffectedFiles())
+  if source_file not in affected_files:
+    return []
+
+  if update_histogram_enum.HistogramNeedsUpdate(
+      histogram_enum_name='ShouldAllowOpenURLFailureScheme',
+      source_enum_path=source_file,
+      start_marker='^enum ShouldAllowOpenURLFailureScheme {',
+      end_marker='^SCHEME_LAST'):
+    return [output_api.PresubmitPromptWarning(
+        'ShouldAllowOpenURLFailureScheme has been updated but histogram.xml '
+        'does not appear to be updated.\nPlease run:\n'
+        '  python tools/metrics/histograms/'
+        'update_should_allow_open_url_histograms.py\n')]
+  return []
diff --git a/src/tools/metrics/histograms/update_histogram_enum.py b/src/tools/metrics/histograms/update_histogram_enum.py
index db9037f..5c42a12 100644
--- a/src/tools/metrics/histograms/update_histogram_enum.py
+++ b/src/tools/metrics/histograms/update_histogram_enum.py
@@ -38,7 +38,8 @@
 
 
 def ReadHistogramValues(filename, start_marker, end_marker):
-  """Returns a dictionary of enum values, read from a C++ file.
+  """Returns a dictionary of enum values and a pair of labels that have the same
+     enum values, read from a C++ file.
 
   Args:
       filename: The unix-style path (relative to src/) of the file to open.
@@ -75,13 +76,16 @@
             label = m.group(1)
           else:
             continue
+        # If two enum labels have the same value
+        if enum_value in result:
+          return result, (result[enum_value], label)
         result[enum_value] = label
         enum_value += 1
     else:
       if START_REGEX.match(line):
         inside_enum = True
         enum_value = 0
-  return result
+  return result, None
 
 
 def CreateEnumItemNode(document, value, label):
@@ -180,12 +184,14 @@
       end_marker: A regular expression that matches the end of the C++ enum.
   """
   Log('Reading histogram enum definition from "{0}".'.format(source_enum_path))
-  source_enum_values = ReadHistogramValues(source_enum_path, start_marker,
-                                           end_marker)
+  source_enum_values, duplicated_values = ReadHistogramValues(
+      source_enum_path, start_marker, end_marker)
+  if duplicated_values:
+    return False, duplicated_values
 
   (xml, new_xml) = _GetOldAndUpdatedXml(histogram_enum_name, source_enum_values,
                                         source_enum_path)
-  return xml != new_xml
+  return xml != new_xml, None
 
 
 def UpdateHistogramFromDict(histogram_enum_name, source_enum_values,
diff --git a/src/tools/metrics/histograms/update_should_allow_open_url_histograms.py b/src/tools/metrics/histograms/update_should_allow_open_url_histograms.py
new file mode 100644
index 0000000..2b16c4f
--- /dev/null
+++ b/src/tools/metrics/histograms/update_should_allow_open_url_histograms.py
@@ -0,0 +1,27 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Updates the ShouldAllowOpenURLFailureScheme enum in histograms.xml file with
+values read from chrome_content_browser_client_extensions_part.cc.
+
+If the file was pretty-printed, the updated version is pretty-printed too.
+"""
+
+import os
+import sys
+
+from update_histogram_enum import UpdateHistogramEnum
+
+if __name__ == '__main__':
+  if len(sys.argv) > 1:
+    print >>sys.stderr, 'No arguments expected!'
+    sys.stderr.write(__doc__)
+    sys.exit(1)
+
+  source_file = 'chrome/browser/extensions/' \
+                'chrome_content_browser_client_extensions_part.cc'
+  UpdateHistogramEnum(histogram_enum_name='ShouldAllowOpenURLFailureScheme',
+                      source_enum_path=source_file,
+                      start_marker='^enum ShouldAllowOpenURLFailureScheme {',
+                      end_marker='^SCHEME_LAST')
diff --git a/src/tools/metrics/ukm/OWNERS b/src/tools/metrics/ukm/OWNERS
new file mode 100644
index 0000000..227946e
--- /dev/null
+++ b/src/tools/metrics/ukm/OWNERS
@@ -0,0 +1,3 @@
+# Metrics changes should always be reviewed by owners.
+per-file ukm.xml=file://tools/metrics/OWNERS 
+per-file ukm.xml=set noparent
diff --git a/src/tools/metrics/ukm/PRESUBMIT.py b/src/tools/metrics/ukm/PRESUBMIT.py
new file mode 100644
index 0000000..41c5426
--- /dev/null
+++ b/src/tools/metrics/ukm/PRESUBMIT.py
@@ -0,0 +1,35 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Presubmit script for ukm.xml.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into gcl.
+"""
+
+UKM_XML = 'ukm.xml'
+
+
+def CheckChange(input_api, output_api):
+  """Checks that ukm.xml is pretty-printed and well-formatted."""
+  for f in input_api.AffectedTextFiles():
+    p = f.AbsoluteLocalPath()
+    if (input_api.basename(p) == UKM_XML
+        and input_api.os_path.dirname(p) == input_api.PresubmitLocalPath()):
+      cwd = input_api.os_path.dirname(p)
+      exit_code = input_api.subprocess.call(
+          ['python', 'pretty_print.py', '--presubmit'], cwd=cwd)
+      if exit_code != 0:
+        return [output_api.PresubmitError(
+            '%s is not formatted correctly; run %s/pretty_print.py to fix' %
+            (UKM_XML, input_api.PresubmitLocalPath()))]
+  return []
+
+
+def CheckChangeOnUpload(input_api, output_api):
+  return CheckChange(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+  return CheckChange(input_api, output_api)
diff --git a/src/tools/metrics/ukm/model.py b/src/tools/metrics/ukm/model.py
new file mode 100644
index 0000000..f0c7ebe
--- /dev/null
+++ b/src/tools/metrics/ukm/model.py
@@ -0,0 +1,61 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# """Model objects for ukm.xml contents."""
+
+import os
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
+import models
+
+# Model definitions for ukm.xml content
+_OBSOLETE_TYPE = models.TextNodeType('obsolete')
+_OWNER_TYPE = models.TextNodeType('owner', single_line=True)
+_SUMMARY_TYPE = models.TextNodeType('summary')
+
+_LOWERCASE_NAME_FN = lambda n: n.attributes['name'].value.lower()
+
+_METRIC_TYPE =  models.ObjectNodeType(
+    'metric',
+    attributes=[('name', unicode)],
+    children=[
+        models.ChildType('obsolete', _OBSOLETE_TYPE, False),
+        models.ChildType('owners', _OWNER_TYPE, True),
+        models.ChildType('summary', _SUMMARY_TYPE, False),
+    ])
+
+_EVENT_TYPE =  models.ObjectNodeType(
+    'event',
+    alphabetization=('metric', _LOWERCASE_NAME_FN),
+    attributes=[('name', unicode)],
+    extra_newlines=(1, 1, 1),
+    children=[
+        models.ChildType('obsolete', _OBSOLETE_TYPE, False),
+        models.ChildType('owners', _OWNER_TYPE, True),
+        models.ChildType('summary', _SUMMARY_TYPE, False),
+        models.ChildType('metrics', _METRIC_TYPE, True),
+    ])
+
+_UKM_CONFIGURATION_TYPE = models.ObjectNodeType(
+    'ukm-configuration',
+    extra_newlines=(2, 1, 1),
+    indent=False,
+    children=[
+        models.ChildType('events', _EVENT_TYPE, True),
+    ])
+
+UKM_XML_TYPE = models.DocumentType(_UKM_CONFIGURATION_TYPE)
+
+def UpdateXML(original_xml):
+  """Parses the original xml and return a pretty printed version.
+
+  Args:
+    original_xml: A string containing the original xml file contents.
+
+  Returns:
+    A pretty-printed xml string, or None if the config contains errors.
+  """
+  config = UKM_XML_TYPE.Parse(original_xml)
+
+  return UKM_XML_TYPE.PrettyPrint(config)
diff --git a/src/tools/metrics/ukm/pretty_print.py b/src/tools/metrics/ukm/pretty_print.py
new file mode 100755
index 0000000..8398ed3
--- /dev/null
+++ b/src/tools/metrics/ukm/pretty_print.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+import model
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
+import presubmit_util
+
+
+
+def main(argv):
+  presubmit_util.DoPresubmitMain(argv, 'ukm.xml', 'ukm.old.xml',
+                                 'pretty_print.py', model.UpdateXML)
+
+
+if '__main__' == __name__:
+  sys.exit(main(sys.argv))
diff --git a/src/tools/metrics/ukm/pretty_print_test.py b/src/tools/metrics/ukm/pretty_print_test.py
new file mode 100755
index 0000000..8f23cd7
--- /dev/null
+++ b/src/tools/metrics/ukm/pretty_print_test.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+import model
+
+
+PRETTY_XML = """
+<!-- Comment1 -->
+
+<ukm-configuration>
+
+<event name="Event1">
+  <owner>owner@chromium.org</owner>
+  <summary>
+    Event1 summary.
+  </summary>
+  <metric name="Metric1">
+    <owner>owner2@chromium.org</owner>
+    <summary>
+      Metric1 summary.
+    </summary>
+  </metric>
+  <metric name="Metric2"/>
+</event>
+
+</ukm-configuration>
+""".strip()
+
+
+class UkmXmlTest(unittest.TestCase):
+
+  def testIsPretty(self):
+    result = model.UpdateXML(PRETTY_XML)
+    self.assertMultiLineEqual(PRETTY_XML, result.strip())
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/src/tools/metrics/ukm/ukm.xml b/src/tools/metrics/ukm/ukm.xml
new file mode 100644
index 0000000..75d8a1a
--- /dev/null
+++ b/src/tools/metrics/ukm/ukm.xml
@@ -0,0 +1,44 @@
+<!--
+Copyright 2017 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!--
+This file is used to generate a comprehensive list of Chrome UKM metrics
+along with a detailed description for each metric.
+-->
+
+<ukm-configuration>
+
+<event name="PageLoad">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Recorded when Pageload observer events fire.
+  </summary>
+  <metric name="DocumentTiming.NavigationToDOMContentLoadedEventFired">
+    <summary>
+      Time from navigation to dom content loaded in ms.
+    </summary>
+  </metric>
+  <metric name="DocumentTiming.NavigationToLoadEventFired"/>
+  <metric name="Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
+  <metric name="Navigation.PageTransition"/>
+  <metric name="Net.EffectiveConnectionType.OnNavigationStart"/>
+  <metric name="Net.ErrorCode.OnFailedProvisionalLoad"/>
+  <metric name="PageTiming.ForegroundDuration"/>
+  <metric name="PageTiming.NavigationToFailedProvisionalLoad"/>
+  <metric name="PaintTiming.NavigationToFirstContentfulPaint"/>
+  <metric name="ParseTiming.NavigationToParseStart">
+    <summary>
+      Time from navigation to parse start in ms.
+    </summary>
+  </metric>
+</event>
+
+<event name="Autofill.CardUploadDecision">
+  <owner>sebsg@chromium.org</owner>
+  <metric name="UploadDecision"/>
+</event>
+
+</ukm-configuration>
diff --git a/src/tools/perf/benchmarks/v8.py b/src/tools/perf/benchmarks/v8.py
index 1761f82..e671c67 100644
--- a/src/tools/perf/benchmarks/v8.py
+++ b/src/tools/perf/benchmarks/v8.py
@@ -188,7 +188,7 @@
   """Measures V8 GC metrics and memory usage while scrolling the top web pages.
   http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
 
-  page_set = page_sets.InfiniteScrollPageSet
+  page_set = page_sets.InfiniteScrollStorySet
 
   @classmethod
   def Name(cls):
@@ -228,7 +228,7 @@
   web pages.
   http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
 
-  page_set = page_sets.MobileInfiniteScrollPageSet
+  page_set = page_sets.MobileInfiniteScrollStorySet
 
   @classmethod
   def Name(cls):
diff --git a/src/tools/perf/core/perf_data_generator.py b/src/tools/perf/core/perf_data_generator.py
index 38abb4f..927965e 100755
--- a/src/tools/perf/core/perf_data_generator.py
+++ b/src/tools/perf/core/perf_data_generator.py
@@ -481,7 +481,7 @@
 
 
 def generate_isolate_script_entry(swarming_dimensions, test_args,
-    isolate_name, step_name, ignore_swarming_task_failure,
+    isolate_name, step_name, ignore_task_failure,
     override_compile_targets=None,
     swarming_timeout=None):
   result = {
@@ -498,7 +498,7 @@
       'can_use_on_swarming_builders': True,
       'expiration': 10 * 60 * 60, # 10 hour timeout for now (crbug.com/699312)
       'hard_timeout': swarming_timeout if swarming_timeout else 7200,
-      'ignore_swarming_task_failure': ignore_swarming_task_failure,
+      'ignore_task_failure': ignore_task_failure,
       'io_timeout': 3600,
       'dimension_sets': swarming_dimensions,
     }
@@ -521,18 +521,18 @@
   # When this is enabled on more than just windows machines we will need
   # --device=android
 
-  ignore_swarming_task_failure = False
+  ignore_task_failure = False
   step_name = benchmark_name
   if browser == 'reference':
     test_args.append('--output-trace-tag=_ref')
     step_name += '.reference'
     # We ignore the failures on reference builds since there is little we can do
     # to fix them except waiting for the reference build to update.
-    ignore_swarming_task_failure = True
+    ignore_task_failure = True
 
   return generate_isolate_script_entry(
       swarming_dimensions, test_args, 'telemetry_perf_tests',
-      step_name, ignore_swarming_task_failure=ignore_swarming_task_failure,
+      step_name, ignore_task_failure=ignore_task_failure,
       override_compile_targets=['telemetry_perf_tests'],
       swarming_timeout=BENCHMARK_SWARMING_TIMEOUTS.get(benchmark_name))
 
@@ -575,7 +575,7 @@
   return [
     generate_isolate_script_entry(
         [get_swarming_dimension(dimension, shard)], [], name, name,
-        ignore_swarming_task_failure=False)
+        ignore_task_failure=False)
     for name, shard in dimension['perf_tests']
   ]
 
diff --git a/src/tools/perf/core/perf_data_generator_unittest.py b/src/tools/perf/core/perf_data_generator_unittest.py
index 8d35877..4aad5c3 100644
--- a/src/tools/perf/core/perf_data_generator_unittest.py
+++ b/src/tools/perf/core/perf_data_generator_unittest.py
@@ -78,7 +78,7 @@
         'args': ['speedometer', '-v', '--upload-results',
                  '--output-format=chartjson', '--browser=release'],
         'swarming': {
-          'ignore_swarming_task_failure': False,
+          'ignore_task_failure': False,
           'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}],
           'hard_timeout': 7200,
           'can_use_on_swarming_builders': True,
@@ -100,7 +100,7 @@
                  '--output-format=chartjson', '--browser=reference',
                  '--output-trace-tag=_ref'],
         'swarming': {
-          'ignore_swarming_task_failure': True,
+          'ignore_task_failure': True,
           'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}],
           'hard_timeout': 7200,
           'can_use_on_swarming_builders': True,
diff --git a/src/tools/perf/core/stacktrace_unittest.py b/src/tools/perf/core/stacktrace_unittest.py
index a9d2744..7c2df42 100644
--- a/src/tools/perf/core/stacktrace_unittest.py
+++ b/src/tools/perf/core/stacktrace_unittest.py
@@ -31,8 +31,9 @@
 
   # Some platforms do not support full stack traces, this test requires only
   # minimal symbols to be available.
-  @decorators.Enabled('mac', 'linux', 'win')
-  @decorators.Disabled('snowleopard')
+  # Disabled on win due to crbug.com/706328.
+  @decorators.Enabled('mac', 'linux')
+  @decorators.Disabled('snowleopard', 'win')
   def testCrashMinimalSymbols(self):
     with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c:
       self._tab.Navigate('chrome://crash', timeout=5)
diff --git a/src/tools/perf/page_sets/infinite_scroll_cases.py b/src/tools/perf/page_sets/infinite_scroll_cases.py
index 7930a6e..25221f0 100644
--- a/src/tools/perf/page_sets/infinite_scroll_cases.py
+++ b/src/tools/perf/page_sets/infinite_scroll_cases.py
@@ -1,80 +1,157 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
+# Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-from telemetry.page import page as page_module
+
+import sys
+
+from page_sets.login_helpers import facebook_login
+from page_sets.system_health import platforms
+from telemetry.core import discover
+from telemetry.page import page
 from telemetry.page import shared_page_state
 from telemetry import story
 
-TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS = 5
-SCROLL_TIMEOUT_IN_SECONDS = 120
+class _InfiniteScrollStory(page.Page):
+  """ Base class for infinite scroll stories."""
 
-# TODO(ulan): Remove this once crbug.com/541508 is fixed.
-STARTUP_SCRIPT = '''
-    window.WebSocket = undefined;
-    window.Worker = undefined;
-    window.performance = undefined;'''
+  NAME = NotImplemented
+  URL = NotImplemented
+  SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS
 
+  SCROLL_DISTANCE = 25000
+  SCROLL_STEP = 1000
+  MAX_SCROLL_RETRIES = 3
+  TIME_BEFORE_SCROLL_RETRY_IN_SECONDS = 1
+  TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS = 5
 
-class InfiniteScrollPage(page_module.Page):
-  def __init__(self, url, page_set, name, scroll_amount, delay, repeat,
-               credentials=None):
-    super(InfiniteScrollPage, self).__init__(
-        url=url, page_set=page_set, name=name,
+  def __init__(self, story_set):
+    super(_InfiniteScrollStory, self).__init__(
+        page_set=story_set, url=self.URL, name=self.NAME,
         shared_page_state_class=shared_page_state.SharedPageState,
-       credentials_path='data/credentials.json')
-    self.credentials = credentials
-    self.script_to_evaluate_on_commit = STARTUP_SCRIPT
-    self.scroll_amount = scroll_amount
-    self.delay = delay
-    self.repeat = repeat
+        credentials_path='data/credentials.json')
+    # TODO(ulan): Remove this once crbug.com/541508 is fixed.
+    self.script_to_evaluate_on_commit = '''
+        window.WebSocket = undefined;
+        window.Worker = undefined;
+        window.performance = undefined;'''
 
   def RunPageInteractions(self, action_runner):
-    self._WaitAction(action_runner)
-    self._ScrollAction(action_runner, self.scroll_amount, self.delay,
-                       self.repeat)
-
-  def _ScrollAction(self, action_runner, scroll_amount, delay, repeat):
-    with action_runner.CreateInteraction('Begin'):
-      action_runner.tab.browser.DumpMemory()
-    with action_runner.CreateInteraction('Scrolling'):
-      action_runner.RepeatableBrowserDrivenScroll(
-        y_scroll_distance_ratio=scroll_amount,
-        repeat_delay_ms=delay,
-        repeat_count=repeat,
-        timeout=SCROLL_TIMEOUT_IN_SECONDS)
-    with action_runner.CreateInteraction('End'):
-      action_runner.tab.browser.DumpMemory()
-
-  def _WaitAction(self, action_runner):
     with action_runner.CreateInteraction('Load'):
       action_runner.WaitForJavaScriptCondition(
         'document.body != null && '
         'document.body.scrollHeight > window.innerHeight && '
         '!document.body.addEventListener("touchstart", function() {})')
     with action_runner.CreateInteraction('Wait'):
-      action_runner.Wait(TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS)
+      action_runner.Wait(self.TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS)
     with action_runner.CreateInteraction('GC'):
       action_runner.ForceGarbageCollection()
+    with action_runner.CreateInteraction('Begin'):
+      action_runner.tab.browser.DumpMemory()
+    with action_runner.CreateInteraction('Scrolling'):
+      self._Scroll(action_runner, self.SCROLL_DISTANCE, self.SCROLL_STEP)
+    with action_runner.CreateInteraction('End'):
+      action_runner.tab.browser.DumpMemory()
 
+  def _Scroll(self, action_runner, distance, step_size):
+    """ This function scrolls the webpage by the given scroll distance in
+    multiple steps, where each step (except the last one) has the given size.
 
-class InfiniteScrollPageSet(story.StorySet):
-  """ Top pages that can be scrolled for many pages. """
+    If scrolling gets stuck, the functions retries scrolling MAX_SCROLL_RETRIES
+    times waiting TIME_BEFORE_SCROLL_RETRY_IN_SECONDS seconds between retries.
+    """
+    remaining = distance - action_runner.EvaluateJavaScript('window.scrollY')
+    retry_count = 0
+    # Scroll until the window.scrollY is within 1 pixel of the target distance.
+    while remaining > 1:
+      action_runner.ScrollPage(distance=min(remaining, step_size) + 1)
+      new_remaining = (distance -
+          action_runner.EvaluateJavaScript('window.scrollY'))
+      if remaining == new_remaining:
+        # Scrolling is stuck. This can happen if the page is loading
+        # resources. Give the page some time and retry scrolling.
+        if retry_count == self.MAX_SCROLL_RETRIES:
+          raise Exception('Scrolling stuck at %d' % remaining)
+        retry_count += 1
+        action_runner.Wait(self.TIME_BEFORE_SCROLL_RETRY_IN_SECONDS)
+      else:
+        retry_count = 0
+        remaining = new_remaining
+
+class DiscourseDesktopStory(_InfiniteScrollStory):
+  NAME = 'discourse'
+  URL = ('https://meta.discourse.org/t/the-official-discourse-tags-plugin' +
+     '-discourse-tagging/26482')
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+class DiscourseMobileStory(_InfiniteScrollStory):
+  NAME = 'discourse'
+  URL = ('https://meta.discourse.org/t/the-official-discourse-tags-plugin' +
+     '-discourse-tagging/26482')
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  SCROLL_DISTANCE = 15000
+
+class FacebookDesktopStory(_InfiniteScrollStory):
+  NAME = 'facebook'
+  URL = 'https://www.facebook.com/shakira'
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+class FacebookMobileStory(_InfiniteScrollStory):
+  NAME = 'facebook'
+  URL = 'https://m.facebook.com/shakira'
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  def RunNavigateSteps(self, action_runner):
+    facebook_login.LoginWithMobileSite(
+        action_runner, 'facebook3', self.credentials_path)
+    super(FacebookMobileStory, self).RunNavigateSteps(action_runner)
+
+class FlickrDesktopStory(_InfiniteScrollStory):
+  NAME = 'flickr'
+  URL = 'https://www.flickr.com/explore'
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+class FlickrMobileStory(_InfiniteScrollStory):
+  NAME = 'flickr'
+  URL = 'https://www.flickr.com/explore'
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  SCROLL_DISTANCE = 10000
+
+class PinterestMobileStory(_InfiniteScrollStory):
+  NAME = 'pinterest'
+  URL = 'https://www.pinterest.com/all'
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+
+class TumblrStory(_InfiniteScrollStory):
+  NAME = 'tumblr'
+  URL = 'http://techcrunch.tumblr.com/'
+
+class TwitterDesktopStory(_InfiniteScrollStory):
+  NAME = 'twitter'
+  URL = 'https://twitter.com/taylorswift13'
+  SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+class InfiniteScrollStorySet(story.StorySet):
+  """ Desktop story set. """
   def __init__(self):
-    super(InfiniteScrollPageSet, self).__init__(
+    super(InfiniteScrollStorySet, self).__init__(
         archive_data_file='data/infinite_scroll.json',
         cloud_storage_bucket=story.PARTNER_BUCKET)
-    # The scroll distance is chosen such that the page can be scrolled
-    # continuously through the test without hitting the end of the page.
-    SCROLL_FAR = 60
-    SCROLL_PAGE = 1
-    pages = [
-        ('https://www.facebook.com/shakira', 'facebook', SCROLL_FAR, 0, 0),
-        ('https://twitter.com/taylorswift13', 'twitter', SCROLL_PAGE, 10, 30),
-        ('http://techcrunch.tumblr.com/', 'tumblr', SCROLL_FAR, 0, 0),
-        ('https://www.flickr.com/explore', 'flickr', SCROLL_FAR, 0, 0),
-        ('https://meta.discourse.org/t/the-official-discourse-tags-plugin-discourse-tagging/26482',
-         'discourse', SCROLL_PAGE, 10, 30)
-    ]
-    for (url, name, scroll_amount, delay, repeat) in pages:
-      self.AddStory(
-        InfiniteScrollPage(url, self, name, scroll_amount, delay, repeat))
+    for story_class in _FindInfiniteScrollStoryClasses(platforms.DESKTOP):
+      self.AddStory(story_class(self))
+
+class MobileInfiniteScrollStorySet(story.StorySet):
+  """ Mobile story set. """
+  def __init__(self):
+    super(MobileInfiniteScrollStorySet, self).__init__(
+        archive_data_file='data/mobile_infinite_scroll.json',
+        cloud_storage_bucket=story.PARTNER_BUCKET)
+    for story_class in _FindInfiniteScrollStoryClasses(platforms.MOBILE):
+      self.AddStory(story_class(self))
+
+def _FindInfiniteScrollStoryClasses(platform):
+  # Sort the classes by their names so that their order is stable and
+  # deterministic.
+  for unused_cls_name, cls in sorted(discover.DiscoverClassesInModule(
+      module=sys.modules[__name__], base_class=_InfiniteScrollStory,
+      index_by_class_name=True).iteritems()):
+    if platform in cls.SUPPORTED_PLATFORMS:
+      yield cls
diff --git a/src/tools/perf/page_sets/mobile_infinite_scroll_cases.py b/src/tools/perf/page_sets/mobile_infinite_scroll_cases.py
deleted file mode 100644
index adf4271..0000000
--- a/src/tools/perf/page_sets/mobile_infinite_scroll_cases.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-from page_sets import mobile_facebook_page
-from telemetry.page import page as page_module
-from telemetry.page import shared_page_state
-from telemetry import story
-
-TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS = 5
-SCROLL_TIMEOUT_IN_SECONDS = 120
-
-# TODO(ulan): Remove this once crbug.com/541508 is fixed.
-STARTUP_SCRIPT = '''
-    window.WebSocket = undefined;
-    window.Worker = undefined;
-    window.performance = undefined;'''
-
-def _ScrollAction(action_runner, scroll_amount, delay, repeat):
-  with action_runner.CreateInteraction('Begin'):
-    action_runner.tab.browser.DumpMemory()
-  with action_runner.CreateInteraction('Scrolling'):
-    action_runner.RepeatableBrowserDrivenScroll(
-      y_scroll_distance_ratio=scroll_amount,
-      repeat_delay_ms=delay,
-      repeat_count=repeat,
-      timeout=SCROLL_TIMEOUT_IN_SECONDS)
-  with action_runner.CreateInteraction('End'):
-    action_runner.tab.browser.DumpMemory()
-
-def _WaitAction(action_runner):
-  with action_runner.CreateInteraction('Load'):
-    action_runner.WaitForJavaScriptCondition(
-      'document.body != null && '
-      'document.body.scrollHeight > window.innerHeight && '
-      '!document.body.addEventListener("touchstart", function() {})')
-  with action_runner.CreateInteraction('Wait'):
-    action_runner.Wait(TIME_TO_WAIT_BEFORE_STARTING_IN_SECONDS)
-  with action_runner.CreateInteraction('GC'):
-    action_runner.ForceGarbageCollection()
-
-class MobileInfiniteScrollPage(page_module.Page):
-  def __init__(self, url, page_set, name, scroll_amount, delay, repeat,
-               credentials=None):
-    super(MobileInfiniteScrollPage, self).__init__(
-        url=url, page_set=page_set, name=name,
-        shared_page_state_class=shared_page_state.SharedPageState,
-       credentials_path='data/credentials.json')
-    self.credentials = credentials
-    self.script_to_evaluate_on_commit = STARTUP_SCRIPT
-    self.scroll_amount = scroll_amount
-    self.delay = delay
-    self.repeat = repeat
-
-  def RunPageInteractions(self, action_runner):
-    _WaitAction(action_runner)
-    _ScrollAction(action_runner, self.scroll_amount, self.delay,
-                       self.repeat)
-
-class MobileInfiniteScrollFacebookPage(mobile_facebook_page.MobileFacebookPage):
-  def __init__(self, url, page_set, name, scroll_amount, delay, repeat):
-    super(MobileInfiniteScrollFacebookPage, self).__init__(
-        url=url, page_set=page_set,
-        shared_page_state_class=shared_page_state.SharedPageState,
-        name=name)
-    self.script_to_evaluate_on_commit = STARTUP_SCRIPT
-    self.scroll_amount = scroll_amount
-    self.delay = delay
-    self.repeat = repeat
-
-  def RunPageInteractions(self, action_runner):
-    _WaitAction(action_runner)
-    _ScrollAction(action_runner, self.scroll_amount, self.delay,
-                       self.repeat)
-
-class MobileInfiniteScrollPageSet(story.StorySet):
-  """ Top mobile pages that can be scrolled for many pages. """
-  def __init__(self):
-    super(MobileInfiniteScrollPageSet, self).__init__(
-        archive_data_file='data/mobile_infinite_scroll.json',
-        cloud_storage_bucket=story.PARTNER_BUCKET)
-    # The scroll distance is chosen such that the page can be scrolled
-    # continuously through the test without hitting the end of the page.
-    SCROLL_FAR = 60
-    SCROLL_PAGE = 1
-    pages = [
-        ('https://m.facebook.com/shakira', 'facebook', SCROLL_FAR, 0, 0),
-        ('https://www.pinterest.com/all', 'pinterest', SCROLL_FAR, 0, 0),
-        ('http://techcrunch.tumblr.com/', 'tumblr', SCROLL_FAR, 0, 0),
-        ('https://www.flickr.com/explore', 'flickr', SCROLL_FAR, 0, 0),
-        ('https://meta.discourse.org/t/the-official-discourse-tags-plugin-discourse-tagging/26482',
-         'discourse', SCROLL_PAGE, 10, 30)
-    ]
-    self.AddStory(
-      MobileInfiniteScrollFacebookPage(pages[0][0], self, pages[0][1],
-                                       pages[0][2], pages[0][3], pages[0][4]))
-    for (url, name, scroll_amount, delay, repeat) in pages[1:]:
-      self.AddStory(
-        MobileInfiniteScrollPage(url, self, name, scroll_amount, delay, repeat))
diff --git a/src/tools/perf/page_sets/system_health/browsing_stories.py b/src/tools/perf/page_sets/system_health/browsing_stories.py
index 8d5ac93..38a58b7 100644
--- a/src/tools/perf/page_sets/system_health/browsing_stories.py
+++ b/src/tools/perf/page_sets/system_health/browsing_stories.py
@@ -131,10 +131,6 @@
   ITEM_SCROLL_REPEAT = 4
   SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
 
-  @classmethod
-  def ShouldDisable(cls, possible_browser):
-    return possible_browser.platform.IsSvelte()  # crbug.com/668097
-
 
 class FlipboardDesktopStory(_NewsBrowsingStory):
   NAME = 'browse:news:flipboard'
diff --git a/src/tools/traffic_annotation/traffic_annotation.proto b/src/tools/traffic_annotation/traffic_annotation.proto
index 4e6a709..de942a5 100644
--- a/src/tools/traffic_annotation/traffic_annotation.proto
+++ b/src/tools/traffic_annotation/traffic_annotation.proto
@@ -114,6 +114,8 @@
       WEBSITE = 0;
       // A Google owned service, like SafeBrowsing, spellchecking, ...
       GOOGLE_OWNED_SERVICE = 1;
+      // Does not go to the network and just fetches a resource locally.
+      LOCAL = 2;
       // Other endpoints, e.g. a service hosting a PAC script. In case of doubt,
       // use this category. We will audit it in the future to see whether we
       // need more categories.
diff --git a/src/tools/win/new_analyze_warnings/retrieve_warnings.py b/src/tools/win/new_analyze_warnings/retrieve_warnings.py
index 33c5d40..7b3c75a 100644
--- a/src/tools/win/new_analyze_warnings/retrieve_warnings.py
+++ b/src/tools/win/new_analyze_warnings/retrieve_warnings.py
@@ -1,6 +1,7 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright (c) 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
+
 """
 This retrieves the latest warnings from the Chrome /analyze build machine, and
 does a diff.
@@ -8,93 +9,90 @@
 fills out the functionality.
 """
 
-import urllib
-import sys
 import glob
 import os
+import subprocess
+import sys
+import urllib
 
 if len(sys.argv) < 2:
-  print "Missing build number."
+  print 'Missing build number.'
   sys.exit(10)
 
-buildNumber = int(sys.argv[1])
+build_number = int(sys.argv[1])
 
-baseURL = "http://build.chromium.org/p/chromium.fyi/builders/" + \
-  "Chromium%20Windows%20Analyze/"
+base_url = 'http://build.chromium.org/p/chromium.fyi/builders/' + \
+  'Chromium%20Windows%20Analyze/'
 
-print "Finding recent builds on %s" % baseURL
-baseData = urllib.urlopen(baseURL).read()
-recentOff = baseData.find("Recent Builds:")
-buildPattern = 'success</td>    <td><a href="' + \
-  '../../builders/Chromium%20Windows%20Analyze/builds/'
+print 'Finding recent builds on %s' % base_url
+base_data = urllib.urlopen(base_url).read()
+recent_off = base_data.find('Recent Builds:')
+build_marker = 'success</td>    <td><a href="' + \
+               '../../builders/Chromium%20Windows%20Analyze/builds/'
 # For some reason I couldn't get regular expressions to work on this data.
-latestBuildOff = baseData.find(buildPattern, recentOff) + len(buildPattern)
-if latestBuildOff < len(buildPattern):
-  print "Couldn't find successful build."
+latest_build_off = base_data.find(build_marker, recent_off) + len(build_marker)
+if latest_build_off < len(build_marker):
+  print 'Couldn\'t find successful build.'
   sys.exit(10)
-latestEndOff = baseData.find('"', latestBuildOff)
-latestBuildStr = baseData[latestBuildOff:latestEndOff]
-maxBuildNumber = int(latestBuildStr)
-if buildNumber > maxBuildNumber:
-  print "Requested build number (%d) is too high. Maximum is %d." % \
-    (buildNumber, maxBuildNumber)
+latest_end_off = base_data.find('"', latest_build_off)
+latest_build_str = base_data[latest_build_off:latest_end_off]
+max_build_number = int(latest_build_str)
+if build_number > max_build_number:
+  print 'Requested build number (%d) is too high. Maximum is %d.' % \
+        (build_number, max_build_number)
   sys.exit(10)
 # Treat negative numbers specially
 if sys.argv[1][0] == '-':
-  buildNumber = maxBuildNumber + buildNumber
-  if buildNumber < 0:
-    buildNumber = 0
-  print "Retrieving build number %d of %d" % (buildNumber, maxBuildNumber)
+  build_number = max_build_number + build_number
+  if build_number < 0:
+    build_number = 0
+  print 'Retrieving build number %d of %d' % (build_number, max_build_number)
 
 # Found the last summary results in the current directory
-results = glob.glob("analyze*_summary.txt")
+results = glob.glob('analyze*_summary.txt')
 results.sort()
-previous = "%04d" % (buildNumber - 1)
+previous = '%04d' % (build_number - 1)
 if results:
-  possiblePrevious = results[-1][7:11]
-  if int(possiblePrevious) == buildNumber:
+  possible_previous = results[-1][7:11]
+  if int(possible_previous) == build_number:
     if len(results) > 1:
       previous = results[-2][7:11]
   else:
-    previous = possiblePrevious
+    previous = possible_previous
 
-dataURL = baseURL + "builds/" + str(buildNumber) + "/steps/compile/logs/stdio"
-revisionURL = baseURL + "builds/" + str(buildNumber)
+data_descriptor = 'chromium/bb/chromium.fyi/Chromium_Windows_Analyze/' + \
+                  '%d/+/recipes/steps/compile/0/stdout' % build_number
+revision_url = base_url + 'builds/' + str(build_number)
 
 # Retrieve the revision
-revisionData = urllib.urlopen(revisionURL).read()
-key = "Got Revision</td><td>"
-Off = revisionData.find(key) + len(key)
-if Off > len(key):
-  revision = revisionData[Off: Off + 40]
-  print "Revision is '%s'" % revision
-  print "Environment variables can be set with set_analyze_revision.bat"
-  payload = "set ANALYZE_REVISION=%s\r\n" % revision
-  payload += "set ANALYZE_BUILD_NUMBER=%04d\r\n" % buildNumber
-  payload += "set ANALYZE_PREV_BUILD_NUMBER=%s\r\n" % previous
-  open("set_analyze_revision.bat", "wt").write(payload)
+revisionData = urllib.urlopen(revision_url).read()
+key = 'Got Revision</td><td>'
+off = revisionData.find(key) + len(key)
+if off > len(key):
+  revision = revisionData[off: off + 40]
+  print 'Revision is "%s"' % revision
+  print 'Environment variables can be set with set_analyze_revision.bat'
+  payload = 'set ANALYZE_REVISION=%s\r\n' % revision
+  payload += 'set ANALYZE_BUILD_NUMBER=%04d\r\n' % build_number
+  payload += 'set ANALYZE_PREV_BUILD_NUMBER=%s\r\n' % previous
+  open('set_analyze_revision.bat', 'wt').write(payload)
 
   # Retrieve the raw warning data
-  print "Retrieving raw build results. Please wait."
-  data = urllib.urlopen(dataURL).read()
-  if data.count("status: SUCCESS") == 0:
-    print "Build failed or is incomplete."
-  else:
-    # Fix up "'" and '"'
-    data = data.replace("&#39;", "'").replace("&#34;", '"')
-    # Fix up '<' and '>'
-    data = data.replace("&lt;", "<").replace("&gt;", ">")
-    # Fix up '&'
-    data = data.replace("&amp;", "&")
-    # Fix up random spans
-    data = data.replace('</span><span class="stdout">', '')
-    # Fix up the source paths to match my local /analyze repo
-    if "ANALYZE_REPO" in os.environ:
-      sourcePath = r"e:\b\build\slave\chromium_windows_analyze\build\src"
-      destPath = os.path.join(os.environ["ANALYZE_REPO"], "src")
-      data = data.replace(sourcePath, destPath)
-    outputName = "analyze%04d_full.txt" % buildNumber
-    open(outputName, "w").write(data)
-    print "Done. Data is in %s" % outputName
+  print 'Retrieving raw build results. Please wait.'
+  # Results are now retrieved using logdog. Instructions on how to install the
+  # logdog tool can be found here:
+  # https://bugs.chromium.org/p/chromium/issues/detail?id=698429#c1
+  # In particular, from c:\src\logdog_cipd_root:
+  # > depot_tools\cipd init
+  # > depot_tools\cipd install infra/tools/luci/logdog/logdog/windows-amd64
+  command = r'c:\src\logdog_cipd_root\logdog.exe cat %s' % data_descriptor
+  data = str(subprocess.check_output(command))
+  if 'ANALYZE_REPO' in os.environ:
+    source_path = r'e:\b\build\slave\chromium_windows_analyze\build\src'
+    dest_path = os.path.join(os.environ['ANALYZE_REPO'], 'src')
+    data = data.replace(source_path, dest_path)
+  output_name = 'analyze%04d_full.txt' % build_number
+  open(output_name, 'w').write(data)
+  print 'Done. Data is in %s' % output_name
 else:
-  print "No revision information found!"
+  print 'No revision information found!'
diff --git a/src/url/gurl_unittest.cc b/src/url/gurl_unittest.cc
index 258ea03..d3a59de 100644
--- a/src/url/gurl_unittest.cc
+++ b/src/url/gurl_unittest.cc
@@ -645,10 +645,12 @@
   // Constructor.
   GURL url_1(" \t ht\ntp://\twww.goo\rgle.com/as\ndf \n ");
   EXPECT_EQ("http://www.google.com/asdf", url_1.spec());
+  EXPECT_TRUE(url_1.parsed_for_possibly_invalid_spec().whitespace_removed);
 
   // Relative path resolver.
   GURL url_2 = url_1.Resolve(" \n /fo\to\r ");
   EXPECT_EQ("http://www.google.com/foo", url_2.spec());
+  EXPECT_TRUE(url_2.parsed_for_possibly_invalid_spec().whitespace_removed);
 
   // Note that newlines are NOT stripped from ReplaceComponents.
 }
diff --git a/src/url/third_party/mozilla/url_parse.cc b/src/url/third_party/mozilla/url_parse.cc
index 4176860..1c1f3dd 100644
--- a/src/url/third_party/mozilla/url_parse.cc
+++ b/src/url/third_party/mozilla/url_parse.cc
@@ -692,16 +692,17 @@
 
 Parsed::Parsed() : whitespace_removed(false), inner_parsed_(NULL) {}
 
-Parsed::Parsed(const Parsed& other) :
-    scheme(other.scheme),
-    username(other.username),
-    password(other.password),
-    host(other.host),
-    port(other.port),
-    path(other.path),
-    query(other.query),
-    ref(other.ref),
-    inner_parsed_(NULL) {
+Parsed::Parsed(const Parsed& other)
+    : scheme(other.scheme),
+      username(other.username),
+      password(other.password),
+      host(other.host),
+      port(other.port),
+      path(other.path),
+      query(other.query),
+      ref(other.ref),
+      whitespace_removed(other.whitespace_removed),
+      inner_parsed_(NULL) {
   if (other.inner_parsed_)
     set_inner_parsed(*other.inner_parsed_);
 }
@@ -716,6 +717,7 @@
     path = other.path;
     query = other.query;
     ref = other.ref;
+    whitespace_removed = other.whitespace_removed;
     if (other.inner_parsed_)
       set_inner_parsed(*other.inner_parsed_);
     else